@peter.prib/renderengine 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +203 -2
- package/REFERENCE.md +2198 -0
- package/dist/renderengine-workspace.umd.js +46905 -0
- package/dist/renderengine.umd.js +42223 -0
- package/examples/archimate.html +66 -0
- package/examples/diagram-editor.html +51 -0
- package/package.json +65 -4
- package/src/BaseRenderer.js +57 -0
- package/src/CanvasRenderer.js +194 -0
- package/src/Mat4.js +111 -0
- package/src/OrbitCamera.js +57 -0
- package/src/RendererFactory.js +50 -0
- package/src/SVGRenderer.js +439 -0
- package/src/archimate.js +723 -0
- package/src/archimateArchiFormat.js +1693 -0
- package/src/archimateArchiTypes.js +72 -0
- package/src/archimateArchive.js +140 -0
- package/src/archimateCSV.js +127 -0
- package/src/archimateDrawio.js +182 -0
- package/src/archimateExchangeFormat.js +546 -0
- package/src/archimateRelationshipTable.js +93 -0
- package/src/archimateSpecializations.js +161 -0
- package/src/chartCatalog.js +589 -0
- package/src/charting/ArchimateDiagramEditor.js +1624 -0
- package/src/charting/ArchimateSpecializationSelector.js +134 -0
- package/src/charting/Axis.js +68 -0
- package/src/charting/CameraSeeder.js +30 -0
- package/src/charting/CatalogDialog.js +92 -0
- package/src/charting/Chart.js +37 -0
- package/src/charting/Chart3D.js +99 -0
- package/src/charting/ChartBox.js +80 -0
- package/src/charting/ChartData.js +27 -0
- package/src/charting/ChartRegistry.js +76 -0
- package/src/charting/CheckboxTreeSelector.js +304 -0
- package/src/charting/ColorField.js +107 -0
- package/src/charting/ColorPalette.js +88 -0
- package/src/charting/CommandHistory.js +176 -0
- package/src/charting/DataFilter.js +52 -0
- package/src/charting/Diagram.js +36 -0
- package/src/charting/Diagram3D.js +29 -0
- package/src/charting/DiagramClipboard.js +31 -0
- package/src/charting/DiagramEditor.js +3330 -0
- package/src/charting/DiagramEditorCommand.js +110 -0
- package/src/charting/DiagramEditorCommands.js +237 -0
- package/src/charting/DiagramEditorEdgeCommands.js +142 -0
- package/src/charting/DiagramEditorState.js +98 -0
- package/src/charting/DiagramRegistry.js +86 -0
- package/src/charting/DiagramTypeRegistry.js +326 -0
- package/src/charting/DiagramViewPropertiesDialog.js +46 -0
- package/src/charting/Edge.js +113 -0
- package/src/charting/ErrorBars.js +37 -0
- package/src/charting/FilterSystem.js +285 -0
- package/src/charting/FindReplaceDialog.js +139 -0
- package/src/charting/FormDialog.js +385 -0
- package/src/charting/Gauge.js +58 -0
- package/src/charting/Hierarchy.js +175 -0
- package/src/charting/HintPanel.js +86 -0
- package/src/charting/ImageSelector.js +148 -0
- package/src/charting/InteractionManager.js +725 -0
- package/src/charting/Legend.js +58 -0
- package/src/charting/MenuBar.js +62 -0
- package/src/charting/ModelFileFormat.js +115 -0
- package/src/charting/OrbitControls.js +77 -0
- package/src/charting/Palette.js +119 -0
- package/src/charting/PopupMenu.js +117 -0
- package/src/charting/PropertiesPanel.js +155 -0
- package/src/charting/PropertyListEditor.js +96 -0
- package/src/charting/PropertyLog.js +92 -0
- package/src/charting/SettingsCascade.js +93 -0
- package/src/charting/SettingsDialog.js +53 -0
- package/src/charting/SettingsManager.js +179 -0
- package/src/charting/SettingsViewPropertiesDialog.js +58 -0
- package/src/charting/ShapePaths.js +27 -0
- package/src/charting/Statistics.js +134 -0
- package/src/charting/TemplateCatalog.js +59 -0
- package/src/charting/TemplateLibrary.js +103 -0
- package/src/charting/TextStyle.js +168 -0
- package/src/charting/ViewFit.js +55 -0
- package/src/charting/ViewMenu.js +70 -0
- package/src/charting/ViewPropertiesDialog.js +77 -0
- package/src/charting/ViewTabStrip.js +81 -0
- package/src/charting/archimate/ArchiFileFormat.js +32 -0
- package/src/charting/archimate/ArchimateCanvasEditor.js +815 -0
- package/src/charting/archimate/ArchimateCsvFileFormat.js +35 -0
- package/src/charting/archimate/ArchimateEdge.js +137 -0
- package/src/charting/archimate/ArchimateElementTemplate.js +195 -0
- package/src/charting/archimate/ArchimatePalette.js +102 -0
- package/src/charting/archimate/CsvImportDialog.js +105 -0
- package/src/charting/archimate/CustomViewpoints.js +74 -0
- package/src/charting/archimate/DerivedEdge.js +29 -0
- package/src/charting/archimate/DrawioFileFormat.js +24 -0
- package/src/charting/archimate/ElementFilterRule.js +21 -0
- package/src/charting/archimate/ExchangeFileFormat.js +28 -0
- package/src/charting/archimate/ViewGroupTemplate.js +137 -0
- package/src/charting/archimate/ViewLineEdge.js +84 -0
- package/src/charting/archimate/ViewpointRule.js +45 -0
- package/src/charting/archimate/archimateFileFormats.js +12 -0
- package/src/charting/archimate/archimateNames.js +5 -0
- package/src/charting/archimate/csvMapping.js +122 -0
- package/src/charting/archimate/elementMenuItems.js +32 -0
- package/src/charting/archimate/elementProperties.js +146 -0
- package/src/charting/archimate/elementTypeChoices.js +7 -0
- package/src/charting/archimate/elementTypeGroups.js +19 -0
- package/src/charting/archimate/index.js +17 -0
- package/src/charting/archimate/specializationCatalogDialog.js +64 -0
- package/src/charting/archimate/typeGlyph.js +29 -0
- package/src/charting/arrangement/Arrangement.js +112 -0
- package/src/charting/arrangement/ArrangementCommand.js +29 -0
- package/src/charting/arrangement/BackgroundCommand.js +41 -0
- package/src/charting/arrangement/BackgroundGroup.js +18 -0
- package/src/charting/arrangement/GroupCommand.js +46 -0
- package/src/charting/arrangement/ItemGroup.js +62 -0
- package/src/charting/arrangement/LockCommand.js +32 -0
- package/src/charting/arrangement/UngroupCommand.js +27 -0
- package/src/charting/arrangement/alignment.js +88 -0
- package/src/charting/arrangement/arrangeMenuItems.js +25 -0
- package/src/charting/arrangement/index.js +11 -0
- package/src/charting/arrangement/layouts.js +233 -0
- package/src/charting/canvas/ArchiHint.js +78 -0
- package/src/charting/canvas/CanvasBoxKind.js +39 -0
- package/src/charting/canvas/CanvasPalette.js +49 -0
- package/src/charting/canvas/CanvasTemplateLibrary.js +61 -0
- package/src/charting/canvas/CanvasTemplateMenu.js +151 -0
- package/src/charting/canvas/EditHintCommand.js +28 -0
- package/src/charting/canvas/canvasBoxKinds.js +27 -0
- package/src/charting/canvas/canvasBoxMenuItems.js +40 -0
- package/src/charting/canvas/defaultCanvasTemplates.js +186 -0
- package/src/charting/canvas/diagramBoxKinds.js +12 -0
- package/src/charting/canvas/hintMenuItems.js +49 -0
- package/src/charting/charts/ArcGauge.js +55 -0
- package/src/charting/charts/AreaChart.js +71 -0
- package/src/charting/charts/BarChart.js +80 -0
- package/src/charting/charts/BarChart3D.js +56 -0
- package/src/charting/charts/BarChart3DOrbit.js +53 -0
- package/src/charting/charts/BarChartBase.js +70 -0
- package/src/charting/charts/BarGauge.js +42 -0
- package/src/charting/charts/BoxPlotChart.js +41 -0
- package/src/charting/charts/BubbleChart.js +99 -0
- package/src/charting/charts/BubbleChart3D.js +78 -0
- package/src/charting/charts/BulletGauge.js +87 -0
- package/src/charting/charts/CalendarHeatmapChart.js +204 -0
- package/src/charting/charts/CandlestickChart.js +54 -0
- package/src/charting/charts/ChordDiagram.js +130 -0
- package/src/charting/charts/DensityChart.js +73 -0
- package/src/charting/charts/DialGauge.js +65 -0
- package/src/charting/charts/DonutChart.js +15 -0
- package/src/charting/charts/FunnelChart.js +47 -0
- package/src/charting/charts/GanttChart.js +201 -0
- package/src/charting/charts/GaugeChart.js +175 -0
- package/src/charting/charts/GeoMapChart.js +146 -0
- package/src/charting/charts/GroupedBarChart.js +88 -0
- package/src/charting/charts/GroupedDistributionChart.js +70 -0
- package/src/charting/charts/HeatmapChart.js +80 -0
- package/src/charting/charts/HierarchyChart.js +39 -0
- package/src/charting/charts/HistogramChart.js +45 -0
- package/src/charting/charts/KpiTile.js +72 -0
- package/src/charting/charts/LagPlotChart.js +41 -0
- package/src/charting/charts/LineChart.js +124 -0
- package/src/charting/charts/MultiRingGauge.js +54 -0
- package/src/charting/charts/OutlineChart.js +95 -0
- package/src/charting/charts/ParallelCoordinatesChart.js +130 -0
- package/src/charting/charts/PieChart.js +56 -0
- package/src/charting/charts/PipeChart.js +88 -0
- package/src/charting/charts/PopulationPyramidChart.js +106 -0
- package/src/charting/charts/QQPlotChart.js +64 -0
- package/src/charting/charts/RadarChart.js +76 -0
- package/src/charting/charts/RadialBarChart.js +96 -0
- package/src/charting/charts/RingGauge.js +23 -0
- package/src/charting/charts/SankeyDiagram.js +174 -0
- package/src/charting/charts/ScatterChart.js +104 -0
- package/src/charting/charts/StackedAreaChart.js +15 -0
- package/src/charting/charts/StackedBarChart.js +33 -0
- package/src/charting/charts/StackedBarChart3DOrbit.js +58 -0
- package/src/charting/charts/StreamGraphChart.js +131 -0
- package/src/charting/charts/SunburstChart.js +57 -0
- package/src/charting/charts/ThermometerGauge.js +43 -0
- package/src/charting/charts/TreemapChart.js +54 -0
- package/src/charting/charts/ViolinChart.js +37 -0
- package/src/charting/charts/WaterfallChart.js +66 -0
- package/src/charting/charts/WordCloudChart.js +104 -0
- package/src/charting/diagramModel/AddViewCommand.js +33 -0
- package/src/charting/diagramModel/DiagramModel.js +39 -0
- package/src/charting/diagramModel/DiagramModelSearch.js +22 -0
- package/src/charting/diagramModel/DiagramView.js +50 -0
- package/src/charting/diagramModel/ModelHistory.js +43 -0
- package/src/charting/diagramModel/ModelReport.js +153 -0
- package/src/charting/diagramModel/ModelSearch.js +223 -0
- package/src/charting/diagramModel/RemoveViewCommand.js +25 -0
- package/src/charting/diagramModel/RenameViewCommand.js +21 -0
- package/src/charting/diagramModel/ReplaceTextCommand.js +25 -0
- package/src/charting/diagramModel/ViewSetChecker.js +34 -0
- package/src/charting/diagramModel/ViewSetModel.js +243 -0
- package/src/charting/diagramModel/index.js +6 -0
- package/src/charting/diagramModel/nameTransforms.js +29 -0
- package/src/charting/diagrams/ArchimateCommands.js +141 -0
- package/src/charting/diagrams/ArchimateDiagram.js +263 -0
- package/src/charting/diagrams/ArchimateModel.js +1155 -0
- package/src/charting/diagrams/ArchimateModelChecker.js +125 -0
- package/src/charting/diagrams/ArchimateModelReport.js +128 -0
- package/src/charting/diagrams/ArchimateModelSearch.js +41 -0
- package/src/charting/diagrams/ArchimateValidator.js +357 -0
- package/src/charting/diagrams/CanvasView.js +112 -0
- package/src/charting/diagrams/ContextMenu.js +37 -0
- package/src/charting/diagrams/DataModelDiagram.js +86 -0
- package/src/charting/diagrams/DataModelRelationshipStrategy.js +38 -0
- package/src/charting/diagrams/DerivedRelationships.js +102 -0
- package/src/charting/diagrams/EbnfDiagram.js +39 -0
- package/src/charting/diagrams/EdgeGeometry.js +553 -0
- package/src/charting/diagrams/EditViewItemCommand.js +128 -0
- package/src/charting/diagrams/ElementInstance.js +157 -0
- package/src/charting/diagrams/GraphDiagram.js +1340 -0
- package/src/charting/diagrams/GraphDiagram3D.js +152 -0
- package/src/charting/diagrams/GraphMetrics.js +81 -0
- package/src/charting/diagrams/GridOverlay.js +137 -0
- package/src/charting/diagrams/ImportRowsCommand.js +62 -0
- package/src/charting/diagrams/LabelHelper.js +108 -0
- package/src/charting/diagrams/MergeElementsCommand.js +101 -0
- package/src/charting/diagrams/NestInstanceCommand.js +34 -0
- package/src/charting/diagrams/NodeGeometry.js +158 -0
- package/src/charting/diagrams/PlaceItemsCommand.js +77 -0
- package/src/charting/diagrams/RadialLayout.js +101 -0
- package/src/charting/diagrams/RelationshipInstance.js +93 -0
- package/src/charting/diagrams/RemoveGroupFromViewCommand.js +28 -0
- package/src/charting/diagrams/RemoveLineCommand.js +27 -0
- package/src/charting/diagrams/ShowElementCommand.js +43 -0
- package/src/charting/diagrams/SvgCoordinate.js +17 -0
- package/src/charting/diagrams/SvgZoom.js +127 -0
- package/src/charting/diagrams/Tooltip.js +62 -0
- package/src/charting/diagrams/ViewConnectionInstance.js +102 -0
- package/src/charting/diagrams/ViewObjectInstance.js +56 -0
- package/src/charting/diagrams/commands/AddEdgeCommand.js +34 -0
- package/src/charting/diagrams/commands/AddNodeCommand.js +28 -0
- package/src/charting/diagrams/commands/AddWaypointCommand.js +27 -0
- package/src/charting/diagrams/commands/CreateFolderCommand.js +27 -0
- package/src/charting/diagrams/commands/DeleteEdgeCommand.js +30 -0
- package/src/charting/diagrams/commands/DeleteFolderCommand.js +47 -0
- package/src/charting/diagrams/commands/DeleteNodeCommand.js +35 -0
- package/src/charting/diagrams/commands/DeleteWaypointCommand.js +24 -0
- package/src/charting/diagrams/commands/GraphCommand.js +65 -0
- package/src/charting/diagrams/commands/InvertEdgeCommand.js +24 -0
- package/src/charting/diagrams/commands/MoveNodeCommand.js +44 -0
- package/src/charting/diagrams/commands/MoveWaypointCommand.js +27 -0
- package/src/charting/diagrams/commands/RenameEdgeCommand.js +23 -0
- package/src/charting/diagrams/commands/RenameFolderCommand.js +31 -0
- package/src/charting/diagrams/commands/RenameNodeCommand.js +27 -0
- package/src/charting/diagrams/commands/ResizeNodeCommand.js +46 -0
- package/src/charting/diagrams/commands/UpdateEdgeSideCommand.js +40 -0
- package/src/charting/diagrams/commands/index.js +17 -0
- package/src/charting/diagrams/duplicates.js +49 -0
- package/src/charting/diagrams/nesting.js +30 -0
- package/src/charting/diagrams/roadmap.js +77 -0
- package/src/charting/edgeMarkers/ArrowMarker.js +15 -0
- package/src/charting/edgeMarkers/CircleMarker.js +13 -0
- package/src/charting/edgeMarkers/CrowsFootMarker.js +16 -0
- package/src/charting/edgeMarkers/DiamondMarker.js +15 -0
- package/src/charting/edgeMarkers/EdgeMarker.js +34 -0
- package/src/charting/edgeMarkers/HalfArrowMarker.js +8 -0
- package/src/charting/edgeMarkers/HollowDiamondMarker.js +18 -0
- package/src/charting/edgeMarkers/HollowTriangleMarker.js +18 -0
- package/src/charting/edgeMarkers/OpenArrowMarker.js +17 -0
- package/src/charting/edgeMarkers/index.js +27 -0
- package/src/charting/edgeStyle/EdgeStyleCascade.js +22 -0
- package/src/charting/edgeStyle/EdgeStyleDialog.js +51 -0
- package/src/charting/edgeStyle/EdgeStyleSchema.js +43 -0
- package/src/charting/edgeStyle/SetStyleCommand.js +12 -0
- package/src/charting/edgeStyle/index.js +4 -0
- package/src/charting/emphasis/EmphasisRule.js +42 -0
- package/src/charting/emphasis/HighlightRule.js +24 -0
- package/src/charting/gauges/ArcTrack.js +51 -0
- package/src/charting/gauges/GaugeAnimation.js +51 -0
- package/src/charting/gauges/GaugeBands.js +48 -0
- package/src/charting/gauges/GaugeScale.js +87 -0
- package/src/charting/gauges/GaugeTrack.js +44 -0
- package/src/charting/gauges/GaugeValue.js +61 -0
- package/src/charting/gauges/HorizontalTrack.js +14 -0
- package/src/charting/gauges/LinearTrack.js +29 -0
- package/src/charting/gauges/Sparkline.js +42 -0
- package/src/charting/gauges/VerticalTrack.js +17 -0
- package/src/charting/glyphs/ArrowGlyph.js +21 -0
- package/src/charting/glyphs/BatteryGlyph.js +18 -0
- package/src/charting/glyphs/ChevronGlyph.js +18 -0
- package/src/charting/glyphs/CircleGlyph.js +15 -0
- package/src/charting/glyphs/CloudGlyph.js +19 -0
- package/src/charting/glyphs/ComponentGlyph.js +18 -0
- package/src/charting/glyphs/ConstraintGlyph.js +24 -0
- package/src/charting/glyphs/ContractBoxGlyph.js +10 -0
- package/src/charting/glyphs/CubeGlyph.js +19 -0
- package/src/charting/glyphs/CylinderGlyph.js +19 -0
- package/src/charting/glyphs/DashedDoubleArrowGlyph.js +11 -0
- package/src/charting/glyphs/DeviceGlyph.js +17 -0
- package/src/charting/glyphs/DiamondGlyph.js +17 -0
- package/src/charting/glyphs/DocumentGlyph.js +17 -0
- package/src/charting/glyphs/DoubleArrowGlyph.js +23 -0
- package/src/charting/glyphs/DoubleCircleGlyph.js +24 -0
- package/src/charting/glyphs/EllipseGlyph.js +18 -0
- package/src/charting/glyphs/FactoryGlyph.js +20 -0
- package/src/charting/glyphs/FlagGlyph.js +16 -0
- package/src/charting/glyphs/GapCircleGlyph.js +17 -0
- package/src/charting/glyphs/GearGlyph.js +37 -0
- package/src/charting/glyphs/Glyph.js +98 -0
- package/src/charting/glyphs/GroupingBoxGlyph.js +13 -0
- package/src/charting/glyphs/HalfCircleGlyph.js +22 -0
- package/src/charting/glyphs/HexagonGlyph.js +28 -0
- package/src/charting/glyphs/IconGlyph.js +22 -0
- package/src/charting/glyphs/ImageGlyph.js +16 -0
- package/src/charting/glyphs/JunctionGlyph.js +17 -0
- package/src/charting/glyphs/LollipopGlyph.js +22 -0
- package/src/charting/glyphs/MagnifierGlyph.js +17 -0
- package/src/charting/glyphs/NoteGlyph.js +33 -0
- package/src/charting/glyphs/ObjectBoxGlyph.js +21 -0
- package/src/charting/glyphs/OrJunctionGlyph.js +17 -0
- package/src/charting/glyphs/ParallelogramGlyph.js +20 -0
- package/src/charting/glyphs/PersonGlyph.js +23 -0
- package/src/charting/glyphs/PillGlyph.js +23 -0
- package/src/charting/glyphs/PinGlyph.js +18 -0
- package/src/charting/glyphs/PrincipleGlyph.js +23 -0
- package/src/charting/glyphs/ProductBoxGlyph.js +16 -0
- package/src/charting/glyphs/RectGlyph.js +15 -0
- package/src/charting/glyphs/RoundedBoxGlyph.js +13 -0
- package/src/charting/glyphs/StackGlyph.js +14 -0
- package/src/charting/glyphs/StepsGlyph.js +20 -0
- package/src/charting/glyphs/StickFigureGlyph.js +32 -0
- package/src/charting/glyphs/SystemSoftwareBoxGlyph.js +16 -0
- package/src/charting/glyphs/TabbedBoxGlyph.js +37 -0
- package/src/charting/glyphs/TargetGlyph.js +23 -0
- package/src/charting/glyphs/WavyBoxGlyph.js +17 -0
- package/src/charting/glyphs/WheelGlyph.js +28 -0
- package/src/charting/glyphs/drawGlyph.js +28 -0
- package/src/charting/glyphs/glyphSvg.js +55 -0
- package/src/charting/glyphs/index.js +109 -0
- package/src/charting/modelTree/AnalysisPanel.js +159 -0
- package/src/charting/modelTree/DiagramTabs.js +217 -0
- package/src/charting/modelTree/ModelTree.js +164 -0
- package/src/charting/modelTree/ModelTreePanel.js +914 -0
- package/src/charting/modelTree/TreeBuilder.js +238 -0
- package/src/charting/modelTree/TreeModeRegistry.js +51 -0
- package/src/charting/modelTree/TreeViewMode.js +110 -0
- package/src/charting/modelTree/buildFilterTrees.js +138 -0
- package/src/charting/modelTree/modes/FlatTreeMode.js +46 -0
- package/src/charting/modelTree/modes/LayerGroupedTreeMode.js +62 -0
- package/src/charting/modelTree/modes/TypeGroupedTreeMode.js +60 -0
- package/src/charting/modelTree/treeLayers.js +11 -0
- package/src/charting/report/reportHtml.js +82 -0
- package/src/charting/report/reportViewer.js +118 -0
- package/src/charting/shapes/CircleShape.js +19 -0
- package/src/charting/shapes/PathShape.js +17 -0
- package/src/charting/shapes/RectShape.js +20 -0
- package/src/charting/shapes/Shape.js +20 -0
- package/src/charting/shapes/ShapeFactory.js +23 -0
- package/src/charting/storage/LocalJsonStore.js +43 -0
- package/src/charting/templates/ActorTemplate.js +36 -0
- package/src/charting/templates/BoxTemplate.js +27 -0
- package/src/charting/templates/CircleTemplate.js +18 -0
- package/src/charting/templates/ClassTemplate.js +20 -0
- package/src/charting/templates/CloudTemplate.js +43 -0
- package/src/charting/templates/ComponentTemplate.js +19 -0
- package/src/charting/templates/CylinderTemplate.js +30 -0
- package/src/charting/templates/DataStoreTemplate.js +16 -0
- package/src/charting/templates/DiamondTemplate.js +10 -0
- package/src/charting/templates/DocumentTemplate.js +32 -0
- package/src/charting/templates/EllipseTemplate.js +15 -0
- package/src/charting/templates/FinalStateTemplate.js +12 -0
- package/src/charting/templates/GlyphTemplate.js +47 -0
- package/src/charting/templates/HexagonTemplate.js +17 -0
- package/src/charting/templates/LifelineTemplate.js +20 -0
- package/src/charting/templates/ManualInputTemplate.js +12 -0
- package/src/charting/templates/NoteTemplate.js +23 -0
- package/src/charting/templates/OctagonTemplate.js +7 -0
- package/src/charting/templates/PackageTemplate.js +25 -0
- package/src/charting/templates/ParallelogramTemplate.js +11 -0
- package/src/charting/templates/PentagonTemplate.js +5 -0
- package/src/charting/templates/PolygonTemplate.js +18 -0
- package/src/charting/templates/PredefinedProcessTemplate.js +13 -0
- package/src/charting/templates/RectangleTemplate.js +28 -0
- package/src/charting/templates/RegularPolygonTemplate.js +21 -0
- package/src/charting/templates/RoundedRectangleTemplate.js +5 -0
- package/src/charting/templates/StadiumTemplate.js +8 -0
- package/src/charting/templates/StarTemplate.js +17 -0
- package/src/charting/templates/SwimlaneTemplate.js +18 -0
- package/src/charting/templates/Template.js +208 -0
- package/src/charting/templates/TrapezoidTemplate.js +11 -0
- package/src/charting/templates/TriangleTemplate.js +12 -0
- package/src/charting/templates/index.js +31 -0
- package/src/charting/templates/outline.js +59 -0
- package/src/charting/templates/svg.js +19 -0
- package/src/charting/textToShapes.js +61 -0
- package/src/charting/toolbar/ToolbarButton.js +38 -0
- package/src/charting/toolbar/ToolbarCheckbox.js +31 -0
- package/src/charting/toolbar/ToolbarItem.js +19 -0
- package/src/charting/toolbar/ToolbarMenu.js +36 -0
- package/src/charting/toolbar/ToolbarSelect.js +38 -0
- package/src/charting/toolbar/ToolbarSeparator.js +7 -0
- package/src/charting/toolbar/ToolbarText.js +22 -0
- package/src/charting/toolbar/index.js +8 -0
- package/src/charting/toolbar/pickFile.js +14 -0
- package/src/charting/viewDecorations.js +85 -0
- package/src/charting/zOrder.js +57 -0
- package/src/csvTable.js +61 -0
- package/src/datamodel.js +122 -0
- package/src/datawindow/BoundedWindow.js +36 -0
- package/src/datawindow/FlatDataWindow.js +34 -0
- package/src/datawindow/GraphDataWindow.js +40 -0
- package/src/datawindow/GroupedSampleDataWindow.js +16 -0
- package/src/datawindow/SeriesDataWindow.js +42 -0
- package/src/datawindow/index.js +31 -0
- package/src/diagramCatalog.js +30 -0
- package/src/ebnfDiagram.js +57 -0
- package/src/ebnfParser.js +129 -0
- package/src/exportImage.js +233 -0
- package/src/index.js +2636 -0
- package/src/itIcons.js +84 -0
- package/src/kernelExpr.js +243 -0
- package/src/propertiesDialog.js +463 -0
- package/src/railroadDiagram.js +571 -0
- package/src/treeModeCatalog.js +16 -0
- package/src/workspace/ContextBus.js +79 -0
- package/src/workspace/EditorShell.js +67 -0
- package/src/workspace/Part.js +163 -0
- package/src/workspace/PartFactory.js +49 -0
- package/src/workspace/PartRegistry.js +86 -0
- package/src/workspace/Workspace.js +321 -0
- package/src/workspace/archimateServices.js +33 -0
- package/src/workspace/dom.js +120 -0
- package/src/workspace/index.js +75 -0
- package/src/workspace/layout/GridNode.js +280 -0
- package/src/workspace/layout/LayoutNode.js +89 -0
- package/src/workspace/layout/PartNode.js +77 -0
- package/src/workspace/layout/SplitNode.js +114 -0
- package/src/workspace/layout/TabsNode.js +191 -0
- package/src/workspace/layout/index.js +24 -0
- package/src/workspace/parts/AdapterPart.js +33 -0
- package/src/workspace/parts/ArchimateCanvasPart.js +345 -0
- package/src/workspace/parts/ArchimateEditorPart.js +79 -0
- package/src/workspace/parts/ChartPart.js +115 -0
- package/src/workspace/parts/ContentPart.js +34 -0
- package/src/workspace/parts/DetailPart.js +46 -0
- package/src/workspace/parts/DiagramEditorPart.js +135 -0
- package/src/workspace/parts/EditorPart.js +388 -0
- package/src/workspace/parts/HtmlPart.js +25 -0
- package/src/workspace/parts/ListPart.js +57 -0
- package/src/workspace/parts/ModelFile.js +187 -0
- package/src/workspace/parts/ModelsPart.js +135 -0
- package/src/workspace/styles.js +258 -0
- package/src/workspace/themes.js +96 -0
- package/src/workspace/workArea.js +413 -0
- package/src/workspace/workAreaModel.js +197 -0
- package/src/workspace.js +16 -0
- package/src/zip/ZipArchive.js +160 -0
- package/src/zip/crc32.js +25 -0
- package/src/zip/inflate.js +159 -0
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
// Copyright 2026 Jaroslav Peter Prib, Purveyor of Excellence
|
|
2
|
+
/**
|
|
3
|
+
* Single source of truth for "what chart types does RenderEngine support" —
|
|
4
|
+
* see ARCHITECTURE.md's "Chart-type catalog" section for the full story.
|
|
5
|
+
*
|
|
6
|
+
* This is not just a flat {key,label} list. Chart types share real,
|
|
7
|
+
* composable capabilities — every one of them takes a title; several accept
|
|
8
|
+
* a legend; several take a customizable color palette while others take a
|
|
9
|
+
* fixed semantic pair (up/down) or a single color; every one has at least
|
|
10
|
+
* one data-driving "axis," but an axis isn't always a spatial position —
|
|
11
|
+
* bubbleChart's `size` is a driving value encoded as a property of the
|
|
12
|
+
* marker object itself (its radius), not a position, and bubbleChart's
|
|
13
|
+
* `colorCol` similarly encodes a *group* as the marker's color rather than
|
|
14
|
+
* a spatial dimension. This file models each chart type as the specific
|
|
15
|
+
* JOINT combination of these reusable pieces (`axes`, `coordSystem`,
|
|
16
|
+
* `legend`, `colorMode`, `camera`) it supports, extracted empirically from
|
|
17
|
+
* every method's real `options` destructure (not aspirational/guessed) —
|
|
18
|
+
* see git history for the audit this came from.
|
|
19
|
+
*/
|
|
20
|
+
|
|
21
|
+
// ── Vocabulary — the reusable pieces every chart type composes from ────────
|
|
22
|
+
|
|
23
|
+
/** What kind of value a given axis role expects. */
|
|
24
|
+
export const AXIS_KIND = {
|
|
25
|
+
CATEGORICAL: 'categorical', // a label/group string
|
|
26
|
+
NUMERIC: 'numeric', // a single number
|
|
27
|
+
NUMERIC_LIST: 'numeric-list', // an array of numbers (one chart glyph, several values — e.g. a stacked bar's segments)
|
|
28
|
+
RAW_SAMPLE: 'raw-sample', // a raw numeric array the chart itself aggregates (histogram bins it, boxPlot computes quartiles) — not pre-aggregated by the caller
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* WHERE an axis role's value actually shows up visually. Most are a literal
|
|
33
|
+
* screen position (`position-*`); the rest are "axis within object" —
|
|
34
|
+
* exactly the bubble/size case: the value drives a property of the marker
|
|
35
|
+
* shape itself (its size, its width, its color, its depth) rather than
|
|
36
|
+
* where it sits on the chart. A future "sphere/ellipsoid" bubble variant
|
|
37
|
+
* with two independent radii is still just two roles both channeled through
|
|
38
|
+
* `shape-size` — the schema doesn't need to change to describe it, only the
|
|
39
|
+
* catalog entry gains a second `shape-size` role.
|
|
40
|
+
*/
|
|
41
|
+
export const ENCODING_CHANNEL = {
|
|
42
|
+
POSITION_X: 'position-x',
|
|
43
|
+
POSITION_Y: 'position-y',
|
|
44
|
+
POSITION_Z: 'position-z',
|
|
45
|
+
POSITION_Y_LENGTH: 'position-y-length', // bar height from a zero baseline
|
|
46
|
+
POSITION_Y_STACKED: 'position-y-stacked', // bar height, one of several segments stacked from a zero baseline
|
|
47
|
+
POSITION_Y_HEIGHT: 'position-y-height', // orbit-3D bar height
|
|
48
|
+
POSITION_Y_DELTA: 'position-y-delta', // waterfall's floating delta bar
|
|
49
|
+
POSITION_ORDER: 'position-order', // funnel/boxPlot-group: sequence matters, not a numeric coordinate
|
|
50
|
+
RADIAL_AXIS: 'radial-axis', // radar: one of N shared spokes
|
|
51
|
+
RADIAL_DISTANCE: 'radial-distance', // radar: distance out along its axis
|
|
52
|
+
ANGLE_OR_AREA: 'angle-or-area', // pie/doughnut slice
|
|
53
|
+
SHAPE_SIZE: 'shape-size', // bubble radius — "axis within object"
|
|
54
|
+
SHAPE_WIDTH: 'shape-width', // pipe line-width / funnel band width — "axis within object"
|
|
55
|
+
SHAPE_DEPTH: 'shape-depth', // barChart3D's isometric depth shadow — "axis within object"
|
|
56
|
+
SHAPE_GLYPH: 'shape-glyph', // candlestick's whole open/high/low/close body+wick is one compound glyph
|
|
57
|
+
COLOR: 'color', // a category mapped to marker/point color — "axis within object"
|
|
58
|
+
COLOR_SCALE: 'color-scale', // a continuous value mapped along a color gradient (heatmap)
|
|
59
|
+
SEMANTIC_COLOR: 'semantic-color', // a fixed meaning (up/down/total), not an arbitrary palette index
|
|
60
|
+
FILL_PERCENT: 'fill-percent', // gauge's single 0-100 fill
|
|
61
|
+
DERIVED: 'derived', // histogram/boxPlot: the chart computes the real visual encoding internally from a raw sample
|
|
62
|
+
TEXT_VALUE: 'text-value', // outlineChart's row count — shown as literal text, not any geometric/color property (a genuinely new "where" — every other channel above drives position/size/color, this one drives displayed text)
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
/** The coordinate system a chart type's `x/y/width/height` (or `cx/cy/r`, or none) options address. */
|
|
66
|
+
export const COORD_SYSTEM = {
|
|
67
|
+
CARTESIAN: 'cartesian', // {x,y,width,height} box
|
|
68
|
+
RADIAL: 'radial', // {cx,cy,radius} or {cx,cy,r} — pie, radar, dialGauge
|
|
69
|
+
ORBIT_3D: 'orbit-3d', // no 2D box at all — a real camera (theta/phi/distance) owns the space
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
/** How a chart type accepts color customization — these are genuinely different contracts, not degrees of the same one. */
|
|
73
|
+
export const COLOR_MODE = {
|
|
74
|
+
PALETTE: 'palette', // string[] indexed by series/category/segment
|
|
75
|
+
SCALE: 'scale', // low→high gradient stops (heatmap's colorScale)
|
|
76
|
+
SEMANTIC: 'semantic', // fixed-meaning named colors (candlestick's upColor/downColor, waterfall's +totalColor)
|
|
77
|
+
SINGLE: 'single', // one color, no per-item variation
|
|
78
|
+
GROUPED_FIELD: 'grouped-field', // colorCol — an actual data column drives color per-point (a group "axis within object"; also has a matching ENCODING_CHANNEL.COLOR axis role)
|
|
79
|
+
NONE: 'none', // no color option at all
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
/** Whether/how a chart type does 3D — these are two unrelated implementations, not degrees of the same feature. */
|
|
83
|
+
export const CAMERA_MODE = {
|
|
84
|
+
NONE: 'none',
|
|
85
|
+
ISOMETRIC: 'isometric', // fixed-angle depth shadow, still 2D mouse interaction (barChart3D, bubbleChart({zAxis:true}))
|
|
86
|
+
ORBIT: 'orbit', // real Mat4/OrbitCamera — drag-to-rotate, wheel-to-zoom (bubbleChart3D, bar/stackedBarChart3DOrbit)
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
// ── The catalog ──────────────────────────────────────────────────────────
|
|
90
|
+
|
|
91
|
+
export const CHART_CATALOG = [
|
|
92
|
+
{
|
|
93
|
+
key: 'bar', label: 'Bar', method: 'barChart', category: '2d',
|
|
94
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
95
|
+
axes: [
|
|
96
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
97
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y_LENGTH, required: true },
|
|
98
|
+
],
|
|
99
|
+
dataShape: 'Array<{label, value}>',
|
|
100
|
+
streamShape: 'flat',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
key: 'groupedBar', label: 'Grouped Bar', method: 'groupedBarChart', category: '2d',
|
|
104
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
105
|
+
seriesCapable: true,
|
|
106
|
+
axes: [
|
|
107
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
108
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y_LENGTH, required: true },
|
|
109
|
+
{ role: 'series', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.COLOR, required: true },
|
|
110
|
+
],
|
|
111
|
+
dataShape: 'Multi-series Array<{name, values:Array<{label,value}>}>',
|
|
112
|
+
streamShape: 'series',
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
key: 'line', label: 'Line', method: 'lineChart', category: '2d',
|
|
116
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.ISOMETRIC,
|
|
117
|
+
seriesCapable: true,
|
|
118
|
+
axes: [
|
|
119
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
120
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y, required: true },
|
|
121
|
+
],
|
|
122
|
+
dataShape: 'Array<{label, value}> or multi-series Array<{name, values:Array<{label,value}>}> — {zAxis:true} adds an isometric depth shadow per series',
|
|
123
|
+
streamShape: 'series',
|
|
124
|
+
},
|
|
125
|
+
{
|
|
126
|
+
key: 'pie', label: 'Pie / Doughnut', method: 'pieChart', category: '2d',
|
|
127
|
+
coordSystem: COORD_SYSTEM.RADIAL, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
128
|
+
axes: [
|
|
129
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.ANGLE_OR_AREA, required: true },
|
|
130
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.ANGLE_OR_AREA, required: true },
|
|
131
|
+
],
|
|
132
|
+
dataShape: 'Array<{label, value}> — innerRadiusRatio>0 makes it a doughnut, same method/data',
|
|
133
|
+
streamShape: 'flat',
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
key: 'donut', label: 'Donut', method: 'donutChart', category: '2d',
|
|
137
|
+
coordSystem: COORD_SYSTEM.RADIAL, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
138
|
+
axes: [
|
|
139
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.ANGLE_OR_AREA, required: true },
|
|
140
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.ANGLE_OR_AREA, required: true },
|
|
141
|
+
],
|
|
142
|
+
dataShape: 'Array<{label, value}> — donutChart is pieChart with a default innerRadiusRatio of 0.5',
|
|
143
|
+
streamShape: 'flat',
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
key: 'area', label: 'Area', method: 'areaChart', category: '2d',
|
|
147
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
148
|
+
seriesCapable: true,
|
|
149
|
+
axes: [
|
|
150
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
151
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y, required: true },
|
|
152
|
+
],
|
|
153
|
+
dataShape: 'Array<{label, value}> or multi-series (same shape as line) — {stacked:true} bands each series atop the previous',
|
|
154
|
+
streamShape: 'series',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
key: 'stackedArea', label: 'Stacked Area', method: 'stackedAreaChart', category: '2d',
|
|
158
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
159
|
+
seriesCapable: true,
|
|
160
|
+
axes: [
|
|
161
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
162
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y, required: true },
|
|
163
|
+
],
|
|
164
|
+
dataShape: 'Multi-series Array<{name, values:Array<{label,value}>}> — each series banded atop the previous',
|
|
165
|
+
streamShape: 'series',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
key: 'scatter', label: 'Scatter', method: 'scatterChart', category: '2d',
|
|
169
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.GROUPED_FIELD, camera: CAMERA_MODE.NONE,
|
|
170
|
+
axes: [
|
|
171
|
+
{ role: 'x', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
172
|
+
{ role: 'y', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y, required: true },
|
|
173
|
+
{ role: 'group', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.COLOR, required: false },
|
|
174
|
+
],
|
|
175
|
+
dataShape: 'Array<{label, x, y}> — plain x/y points at a fixed marker radius; `colorCol` names a field to color-group by (same convention as bubbleChart, minus its required size axis)',
|
|
176
|
+
streamShape: 'flat',
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
key: 'bubble', label: 'Bubble', method: 'bubbleChart', category: '2d',
|
|
180
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.GROUPED_FIELD, camera: CAMERA_MODE.ISOMETRIC,
|
|
181
|
+
axes: [
|
|
182
|
+
{ role: 'x', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
183
|
+
{ role: 'y', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y, required: true },
|
|
184
|
+
{ role: 'size', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.SHAPE_SIZE, required: false },
|
|
185
|
+
{ role: 'group', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.COLOR, required: false },
|
|
186
|
+
],
|
|
187
|
+
dataShape: 'Array<{label, x, y, z}> — z drives bubble size; `colorCol` names a field to color-group by; {zAxis:true} adds an isometric depth shadow',
|
|
188
|
+
streamShape: 'flat',
|
|
189
|
+
},
|
|
190
|
+
{
|
|
191
|
+
key: 'heatmap', label: 'Heatmap', method: 'heatmap', category: '2d',
|
|
192
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SCALE, camera: CAMERA_MODE.NONE,
|
|
193
|
+
axes: [
|
|
194
|
+
{ role: 'x', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
195
|
+
{ role: 'y', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_Y, required: true },
|
|
196
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.COLOR_SCALE, required: true },
|
|
197
|
+
],
|
|
198
|
+
dataShape: 'Array<{x, y, value}> — two category axes shaded by value',
|
|
199
|
+
streamShape: 'none', // fixed x/y category matrix — "add one point" isn't meaningful
|
|
200
|
+
},
|
|
201
|
+
{
|
|
202
|
+
key: 'calendarHeatmap', label: 'Calendar Heatmap', method: 'calendarHeatmap', category: '2d',
|
|
203
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SCALE, camera: CAMERA_MODE.NONE,
|
|
204
|
+
axes: [
|
|
205
|
+
{ role: 'date', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
206
|
+
{ role: 'weekday', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_Y, required: true },
|
|
207
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.COLOR_SCALE, required: true },
|
|
208
|
+
],
|
|
209
|
+
dataShape: 'Array<{date: string|Date, value: number}> — one row per calendar day, shaded by value; empty days use emptyColor',
|
|
210
|
+
streamShape: 'none',
|
|
211
|
+
},
|
|
212
|
+
{
|
|
213
|
+
key: 'gantt', label: 'Gantt', method: 'ganttChart', category: '2d',
|
|
214
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
215
|
+
axes: [
|
|
216
|
+
{ role: 'time', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
217
|
+
{ role: 'task', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_ORDER, required: true },
|
|
218
|
+
{ role: 'progress', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.FILL_PERCENT, required: false },
|
|
219
|
+
],
|
|
220
|
+
dataShape: 'Array<{label, start, end, progress?, category?, color?}> — start/end are Dates, ISO strings, or numbers; progress is 0-100',
|
|
221
|
+
streamShape: 'flat',
|
|
222
|
+
},
|
|
223
|
+
{
|
|
224
|
+
key: 'streamGraph', label: 'Stream Graph', method: 'streamGraph', category: '2d',
|
|
225
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
226
|
+
seriesCapable: true,
|
|
227
|
+
axes: [
|
|
228
|
+
{ role: 'time', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
229
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y, required: true },
|
|
230
|
+
{ role: 'series', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.COLOR, required: true },
|
|
231
|
+
],
|
|
232
|
+
dataShape: 'Multi-series Array<{name, values:Array<{label,value}>}> — stacked areas with a centered (silhouette) baseline',
|
|
233
|
+
streamShape: 'series',
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
key: 'radialBar', label: 'Radial Bar', method: 'radialBarChart', category: '2d',
|
|
237
|
+
coordSystem: COORD_SYSTEM.RADIAL, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
238
|
+
axes: [
|
|
239
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.RADIAL_AXIS, required: true },
|
|
240
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.RADIAL_DISTANCE, required: true },
|
|
241
|
+
],
|
|
242
|
+
dataShape: 'Array<{label, value}> — angular categories with radial bar length',
|
|
243
|
+
streamShape: 'flat',
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
key: 'populationPyramid', label: 'Population Pyramid', method: 'populationPyramid', category: '2d',
|
|
247
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SEMANTIC, camera: CAMERA_MODE.NONE,
|
|
248
|
+
axes: [
|
|
249
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_ORDER, required: true },
|
|
250
|
+
{ role: 'left', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
251
|
+
{ role: 'right', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
252
|
+
],
|
|
253
|
+
dataShape: 'Array<{label, left, right}> — back-to-back horizontal bars (commonly age groups by sex)',
|
|
254
|
+
streamShape: 'flat',
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
key: 'sankey', label: 'Sankey Diagram', method: 'sankeyDiagram', category: '2d',
|
|
258
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
259
|
+
axes: [
|
|
260
|
+
{ role: 'source', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
261
|
+
{ role: 'target', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
262
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.SHAPE_WIDTH, required: true },
|
|
263
|
+
],
|
|
264
|
+
dataShape: '{nodes?: Array<{id,label?,color?}>, links: Array<{source,target,value}>} — proportional-width flow links between nodes',
|
|
265
|
+
streamShape: 'none',
|
|
266
|
+
},
|
|
267
|
+
{
|
|
268
|
+
key: 'chord', label: 'Chord Diagram', method: 'chordDiagram', category: '2d',
|
|
269
|
+
coordSystem: COORD_SYSTEM.RADIAL, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
270
|
+
axes: [
|
|
271
|
+
{ role: 'source', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.RADIAL_AXIS, required: true },
|
|
272
|
+
{ role: 'target', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.RADIAL_AXIS, required: true },
|
|
273
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.SHAPE_WIDTH, required: true },
|
|
274
|
+
],
|
|
275
|
+
dataShape: '{nodes?: Array<{id,label?,color?}>, links: Array<{source,target,value}>} — nodes on a circle with curved chords of proportional thickness',
|
|
276
|
+
streamShape: 'none',
|
|
277
|
+
},
|
|
278
|
+
{
|
|
279
|
+
key: 'wordCloud', label: 'Word Cloud', method: 'wordCloud', category: '2d',
|
|
280
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
281
|
+
axes: [
|
|
282
|
+
{ role: 'text', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.TEXT_VALUE, required: true },
|
|
283
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.SHAPE_SIZE, required: true },
|
|
284
|
+
],
|
|
285
|
+
dataShape: 'Array<{text: string, value: number}> — words sized by value, laid out with spiral placement and bounding-box collision avoidance',
|
|
286
|
+
streamShape: 'flat',
|
|
287
|
+
},
|
|
288
|
+
{
|
|
289
|
+
key: 'parallelCoordinates', label: 'Parallel Coordinates', method: 'parallelCoordinates', category: '2d',
|
|
290
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
291
|
+
axes: [
|
|
292
|
+
{ role: 'dimension', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y, required: true, repeats: true },
|
|
293
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.COLOR, required: false },
|
|
294
|
+
],
|
|
295
|
+
dataShape: 'Array<{label?, category?, [dim: number]}> — one vertical axis per numeric dimension; each row is a polyline; category drives color',
|
|
296
|
+
streamShape: 'flat',
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
key: 'geoMap', label: 'Geospatial Map', method: 'geoMap', category: '2d',
|
|
300
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SCALE, camera: CAMERA_MODE.NONE,
|
|
301
|
+
axes: [
|
|
302
|
+
{ role: 'longitude', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
303
|
+
{ role: 'latitude', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y, required: true },
|
|
304
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.COLOR_SCALE, required: false },
|
|
305
|
+
],
|
|
306
|
+
dataShape: '{features: Array<{id, name, value?, color?, geometry:{type, coordinates}}>, bubbles?: Array<{lat, lon, value}>} — equirectangular-projection choropleth and bubble map; no external geo library',
|
|
307
|
+
streamShape: 'none',
|
|
308
|
+
},
|
|
309
|
+
{
|
|
310
|
+
key: 'candlestick', label: 'Candlestick / OHLC', method: 'candlestick', category: '2d',
|
|
311
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SEMANTIC, camera: CAMERA_MODE.NONE,
|
|
312
|
+
axes: [
|
|
313
|
+
{ role: 'time', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
314
|
+
{ role: 'ohlc', kind: AXIS_KIND.NUMERIC_LIST, channel: ENCODING_CHANNEL.SHAPE_GLYPH, required: true, fields: ['open', 'high', 'low', 'close'] },
|
|
315
|
+
],
|
|
316
|
+
dataShape: 'Array<{label, open, high, low, close}> — optional `markers` overlay point-in-time tooltip annotations',
|
|
317
|
+
streamShape: 'flat',
|
|
318
|
+
},
|
|
319
|
+
{
|
|
320
|
+
key: 'stackedBar', label: 'Stacked Bar', method: 'stackedBarChart', category: '2d',
|
|
321
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
322
|
+
axes: [
|
|
323
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
324
|
+
{ role: 'values', kind: AXIS_KIND.NUMERIC_LIST, channel: ENCODING_CHANNEL.POSITION_Y_STACKED, required: true },
|
|
325
|
+
],
|
|
326
|
+
dataShape: "Array<{label, values:number[]}> e.g. [{label:'Jan', values:[10,20]}] — no built-in legend option despite being multi-series (a real gap; areaChart's stacked mode has one, this doesn't)",
|
|
327
|
+
streamShape: 'flat', // a new stacked bar is a whole new {label,values} record appended to the outer array, not growth of an existing record's values
|
|
328
|
+
},
|
|
329
|
+
{
|
|
330
|
+
key: 'pipe', label: 'Pipe', method: 'pipeChart', category: '2d',
|
|
331
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
332
|
+
seriesCapable: true,
|
|
333
|
+
axes: [
|
|
334
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
335
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y, required: true },
|
|
336
|
+
{ role: 'width', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.SHAPE_WIDTH, required: false },
|
|
337
|
+
],
|
|
338
|
+
dataShape: 'Array<{label, value, metric?}> or multi-series — metric drives tapering line width ("axis within object", same idea as bubble size)',
|
|
339
|
+
streamShape: 'series',
|
|
340
|
+
},
|
|
341
|
+
{
|
|
342
|
+
key: 'radar', label: 'Radar / Spider', method: 'radarChart', category: '2d',
|
|
343
|
+
coordSystem: COORD_SYSTEM.RADIAL, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
344
|
+
seriesCapable: true,
|
|
345
|
+
axes: [
|
|
346
|
+
{ role: 'axis', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.RADIAL_AXIS, required: true, repeats: true },
|
|
347
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.RADIAL_DISTANCE, required: true },
|
|
348
|
+
],
|
|
349
|
+
dataShape: 'Array<{axis, value}> or multi-series Array<{name, values:Array<{axis,value}>}> — each axis scaled independently by its own max',
|
|
350
|
+
streamShape: 'none', // fixed radial axis set — "add one point" would mean adding a new axis to every series at once, not a single value
|
|
351
|
+
},
|
|
352
|
+
{
|
|
353
|
+
key: 'funnel', label: 'Funnel', method: 'funnelChart', category: '2d',
|
|
354
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
355
|
+
axes: [
|
|
356
|
+
{ role: 'stage', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_ORDER, required: true },
|
|
357
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.SHAPE_WIDTH, required: true },
|
|
358
|
+
],
|
|
359
|
+
dataShape: 'Array<{label, value}> ordered largest-first by convention',
|
|
360
|
+
streamShape: 'flat',
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
key: 'waterfall', label: 'Waterfall', method: 'waterfallChart', category: '2d',
|
|
364
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SEMANTIC, camera: CAMERA_MODE.NONE,
|
|
365
|
+
axes: [
|
|
366
|
+
{ role: 'label', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
367
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y_DELTA, required: true },
|
|
368
|
+
{ role: 'type', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.SEMANTIC_COLOR, required: false, values: ['delta', 'total'] },
|
|
369
|
+
],
|
|
370
|
+
dataShape: "Array<{label, value, type?:'delta'|'total'}> — 'total' entries draw full-height checkpoints",
|
|
371
|
+
streamShape: 'flat',
|
|
372
|
+
},
|
|
373
|
+
{
|
|
374
|
+
key: 'histogram', label: 'Histogram', method: 'histogram', category: 'statistical',
|
|
375
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SINGLE, camera: CAMERA_MODE.NONE,
|
|
376
|
+
axes: [
|
|
377
|
+
{ role: 'sample', kind: AXIS_KIND.RAW_SAMPLE, channel: ENCODING_CHANNEL.DERIVED, required: true },
|
|
378
|
+
],
|
|
379
|
+
dataShape: 'number[] — a raw sample, binned internally (not pre-aggregated); no category axis at all, unlike every other cartesian type here',
|
|
380
|
+
streamShape: 'flat',
|
|
381
|
+
},
|
|
382
|
+
{
|
|
383
|
+
key: 'boxPlot', label: 'Box Plot', method: 'boxPlot', category: 'statistical',
|
|
384
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SINGLE, camera: CAMERA_MODE.NONE,
|
|
385
|
+
axes: [
|
|
386
|
+
{ role: 'group', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
387
|
+
{ role: 'sample', kind: AXIS_KIND.RAW_SAMPLE, channel: ENCODING_CHANNEL.DERIVED, required: true },
|
|
388
|
+
],
|
|
389
|
+
dataShape: 'Array<{label, values:number[]}> — raw per-group samples, quartiles/whiskers/outliers computed internally (1.5×IQR Tukey fences)',
|
|
390
|
+
streamShape: 'grouped-sample',
|
|
391
|
+
},
|
|
392
|
+
{
|
|
393
|
+
key: 'density', label: 'Density Plot', method: 'densityChart', category: 'statistical',
|
|
394
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
395
|
+
axes: [
|
|
396
|
+
{ role: 'group', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.COLOR, required: true },
|
|
397
|
+
{ role: 'sample', kind: AXIS_KIND.RAW_SAMPLE, channel: ENCODING_CHANNEL.DERIVED, required: true },
|
|
398
|
+
],
|
|
399
|
+
dataShape: "Array<{label, values:number[]}> — same shape as boxPlot; each group's raw sample becomes an overlaid Gaussian-KDE curve on one shared value-axis, colored per group (not positioned — group drives color here, unlike boxPlot where it drives x-position)",
|
|
400
|
+
streamShape: 'grouped-sample',
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
key: 'violin', label: 'Violin Plot', method: 'violinChart', category: 'statistical',
|
|
404
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
405
|
+
axes: [
|
|
406
|
+
{ role: 'group', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
407
|
+
{ role: 'sample', kind: AXIS_KIND.RAW_SAMPLE, channel: ENCODING_CHANNEL.DERIVED, required: true },
|
|
408
|
+
],
|
|
409
|
+
dataShape: "Array<{label, values:number[]}> — same shape as boxPlot (and interchangeable with it); each group's raw sample becomes a mirrored Gaussian-KDE silhouette in its own x-slot, colored per group",
|
|
410
|
+
streamShape: 'grouped-sample',
|
|
411
|
+
},
|
|
412
|
+
{
|
|
413
|
+
key: 'qq', label: 'Q-Q Plot', method: 'qqPlot', category: 'statistical',
|
|
414
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SINGLE, camera: CAMERA_MODE.NONE,
|
|
415
|
+
axes: [
|
|
416
|
+
{ role: 'sample', kind: AXIS_KIND.RAW_SAMPLE, channel: ENCODING_CHANNEL.DERIVED, required: true },
|
|
417
|
+
],
|
|
418
|
+
dataShape: "number[] — a raw sample; each point is (theoretical normal quantile, sample quantile), with a dashed reference line fit through the sample's own Q1/Q3 — deviation signals non-normality (fat tails, skew); delegates entirely to scatterChart",
|
|
419
|
+
streamShape: 'flat',
|
|
420
|
+
},
|
|
421
|
+
{
|
|
422
|
+
key: 'lag', label: 'Lag Plot', method: 'lagPlot', category: 'statistical',
|
|
423
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SINGLE, camera: CAMERA_MODE.NONE,
|
|
424
|
+
axes: [
|
|
425
|
+
{ role: 'sample', kind: AXIS_KIND.RAW_SAMPLE, channel: ENCODING_CHANNEL.DERIVED, required: true },
|
|
426
|
+
],
|
|
427
|
+
dataShape: 'number[] — an ordered series (e.g. daily returns); plots each value against itself lagged by options.lag (default 1) to visually check autocorrelation — delegates entirely to scatterChart',
|
|
428
|
+
streamShape: 'flat',
|
|
429
|
+
},
|
|
430
|
+
{
|
|
431
|
+
key: 'treemap', label: 'Treemap', method: 'treemapChart', category: '2d',
|
|
432
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
433
|
+
axes: [
|
|
434
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.ANGLE_OR_AREA, required: true },
|
|
435
|
+
{ role: 'group', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_ORDER, required: false },
|
|
436
|
+
],
|
|
437
|
+
dataShape: 'Array<{label, value?, children?}> — a leaf has `value` (no children); a branch has `children` (value computed as their sum) and can nest to any depth; rectangle AREA is proportional to value (squarified layout); color comes from each top-level branch, descendants shaded progressively lighter by depth',
|
|
438
|
+
streamShape: 'flat', // appends a new top-level leaf; adding a point below an existing branch isn't supported by addDataPoint
|
|
439
|
+
},
|
|
440
|
+
{
|
|
441
|
+
key: 'sunburst', label: 'Sunburst', method: 'sunburstChart', category: '2d',
|
|
442
|
+
coordSystem: COORD_SYSTEM.RADIAL, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
443
|
+
axes: [
|
|
444
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.ANGLE_OR_AREA, required: true },
|
|
445
|
+
{ role: 'group', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_ORDER, required: false },
|
|
446
|
+
],
|
|
447
|
+
dataShape: 'Array<{label, value?, children?}> — same hierarchical shape as treemap (shares _hierarchyValue); angle (not area) is proportional to value within each ring, ring = depth',
|
|
448
|
+
streamShape: 'flat',
|
|
449
|
+
},
|
|
450
|
+
{
|
|
451
|
+
key: 'outline', label: 'Outline / Tree List', method: 'outlineChart', category: '2d',
|
|
452
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
453
|
+
axes: [
|
|
454
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.TEXT_VALUE, required: false },
|
|
455
|
+
{ role: 'group', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_ORDER, required: false },
|
|
456
|
+
],
|
|
457
|
+
dataShape: 'Array<{label, value?, children?}> — same hierarchical shape as treemap/sunburst (shares _hierarchyValue); drawn as an indented, collapsible list instead of nested rectangles/rings — a branch\'s value is auto-summed from its descendants and shown as a trailing count, a leaf\'s own extra fields (anything beyond label/value/children) shown as trailing descriptive text instead',
|
|
458
|
+
streamShape: 'flat',
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
key: 'gauge-dial', label: 'Gauge (Dial)', method: 'dialGauge', category: 'gauge',
|
|
462
|
+
coordSystem: COORD_SYSTEM.RADIAL, title: true, legend: false, colorMode: COLOR_MODE.SINGLE, camera: CAMERA_MODE.NONE,
|
|
463
|
+
axes: [
|
|
464
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.FILL_PERCENT, required: true, range: [0, 100] }, // the default; the min/max options change it
|
|
465
|
+
],
|
|
466
|
+
dataShape: 'number, {value, target?}, or [{value, label?, color?}] (a needle each) — no category axis; the only role IS the value (0-100 unless min/max are given)',
|
|
467
|
+
streamShape: 'none', // no array/window at all — update by calling dialGauge(newValue) again directly
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
key: 'gauge-bar', label: 'Gauge (Bar)', method: 'barGauge', category: 'gauge',
|
|
471
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SINGLE, camera: CAMERA_MODE.NONE,
|
|
472
|
+
axes: [
|
|
473
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.FILL_PERCENT, required: true, range: [0, 100] }, // the default; the min/max options change it
|
|
474
|
+
],
|
|
475
|
+
dataShape: 'number, or {value, target?} (0-100 unless min/max are given)',
|
|
476
|
+
streamShape: 'none', // no array/window at all — update by calling barGauge(newValue) again directly
|
|
477
|
+
},
|
|
478
|
+
{
|
|
479
|
+
key: 'bullet', label: 'Bullet Graph', method: 'bulletGauge', category: 'gauge',
|
|
480
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SEMANTIC, camera: CAMERA_MODE.NONE,
|
|
481
|
+
axes: [
|
|
482
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.FILL_PERCENT, required: true },
|
|
483
|
+
{ role: 'target', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_X, required: false },
|
|
484
|
+
],
|
|
485
|
+
dataShape: 'number or {value, target?, ranges?:Array<{max, label?, color?}>}',
|
|
486
|
+
streamShape: 'none',
|
|
487
|
+
},
|
|
488
|
+
{
|
|
489
|
+
key: 'gauge-arc', label: 'Gauge (Arc)', method: 'arcGauge', category: 'gauge',
|
|
490
|
+
coordSystem: COORD_SYSTEM.RADIAL, title: true, legend: false, colorMode: COLOR_MODE.SINGLE, camera: CAMERA_MODE.NONE,
|
|
491
|
+
axes: [
|
|
492
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.FILL_PERCENT, required: true, range: [0, 100] }, // the default; the min/max options change it
|
|
493
|
+
],
|
|
494
|
+
dataShape: 'number, or {value, target?} (0-100 unless min/max are given) — a half circle by default, any startAngle/sweep',
|
|
495
|
+
streamShape: 'none',
|
|
496
|
+
},
|
|
497
|
+
{
|
|
498
|
+
key: 'gauge-ring', label: 'Gauge (Ring)', method: 'ringGauge', category: 'gauge',
|
|
499
|
+
coordSystem: COORD_SYSTEM.RADIAL, title: true, legend: false, colorMode: COLOR_MODE.SINGLE, camera: CAMERA_MODE.NONE,
|
|
500
|
+
axes: [
|
|
501
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.FILL_PERCENT, required: true, range: [0, 100] }, // the default; the min/max options change it
|
|
502
|
+
],
|
|
503
|
+
dataShape: 'number, or {value, target?} (0-100 unless min/max are given)',
|
|
504
|
+
streamShape: 'none',
|
|
505
|
+
},
|
|
506
|
+
{
|
|
507
|
+
key: 'gauge-rings', label: 'Gauge (Rings)', method: 'multiRingGauge', category: 'gauge',
|
|
508
|
+
coordSystem: COORD_SYSTEM.RADIAL, title: true, legend: true, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.NONE,
|
|
509
|
+
axes: [
|
|
510
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.FILL_PERCENT, required: true, range: [0, 100] }, // the default; the min/max options change it
|
|
511
|
+
],
|
|
512
|
+
dataShape: 'Array<number|{value, label?, color?, min?, max?}> — one ring per value, outer first, each on its own scale',
|
|
513
|
+
streamShape: 'none',
|
|
514
|
+
},
|
|
515
|
+
{
|
|
516
|
+
key: 'gauge-thermometer', label: 'Gauge (Thermometer)', method: 'thermometerGauge', category: 'gauge',
|
|
517
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SINGLE, camera: CAMERA_MODE.NONE,
|
|
518
|
+
axes: [
|
|
519
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.FILL_PERCENT, required: true, range: [0, 100] }, // the default; the min/max options change it
|
|
520
|
+
],
|
|
521
|
+
dataShape: 'number, or {value, target?} (0-100 unless min/max are given)',
|
|
522
|
+
streamShape: 'none',
|
|
523
|
+
},
|
|
524
|
+
{
|
|
525
|
+
key: 'kpi-tile', label: 'KPI Tile', method: 'kpiTile', category: 'gauge',
|
|
526
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.SINGLE, camera: CAMERA_MODE.NONE,
|
|
527
|
+
axes: [
|
|
528
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.FILL_PERCENT, required: true, range: [0, 100] }, // the default; the min/max options change it
|
|
529
|
+
],
|
|
530
|
+
dataShape: 'number, or {value?, previous?, history?:number[]} — the figure, its change since the previous value, a sparkline of the history',
|
|
531
|
+
streamShape: 'none',
|
|
532
|
+
},
|
|
533
|
+
{
|
|
534
|
+
key: 'bar3D', label: 'Bar (3D)', method: 'barChart3D', category: '3d',
|
|
535
|
+
coordSystem: COORD_SYSTEM.CARTESIAN, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.ISOMETRIC,
|
|
536
|
+
axes: [
|
|
537
|
+
{ role: 'category', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
538
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y_LENGTH, required: true },
|
|
539
|
+
{ role: 'depth', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.SHAPE_DEPTH, required: false },
|
|
540
|
+
],
|
|
541
|
+
dataShape: 'Array<{label, value, depth?}> — a single fixed-angle isometric shadow per bar, not a real camera (see bar3DOrbit for that)',
|
|
542
|
+
streamShape: 'flat',
|
|
543
|
+
},
|
|
544
|
+
{
|
|
545
|
+
key: 'bubble3D', label: 'Bubble (3D)', method: 'bubbleChart3D', category: '3d',
|
|
546
|
+
coordSystem: COORD_SYSTEM.ORBIT_3D, title: true, legend: false, colorMode: COLOR_MODE.GROUPED_FIELD, camera: CAMERA_MODE.ORBIT,
|
|
547
|
+
axes: [
|
|
548
|
+
{ role: 'x', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
549
|
+
{ role: 'y', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y, required: true },
|
|
550
|
+
{ role: 'z', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Z, required: true },
|
|
551
|
+
{ role: 'size', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.SHAPE_SIZE, required: false },
|
|
552
|
+
{ role: 'group', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.COLOR, required: false },
|
|
553
|
+
],
|
|
554
|
+
dataShape: 'Array<{label, x, y, z, size?, category?}> — real orbit camera (drag-rotate/wheel-zoom); a future sphere/ellipsoid variant is this same shape with a second shape-size-channeled role, not a new chart type',
|
|
555
|
+
streamShape: 'flat',
|
|
556
|
+
},
|
|
557
|
+
{
|
|
558
|
+
key: 'bar3DOrbit', label: 'Bar (3D Orbit)', method: 'barChart3DOrbit', category: '3d',
|
|
559
|
+
coordSystem: COORD_SYSTEM.ORBIT_3D, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.ORBIT,
|
|
560
|
+
axes: [
|
|
561
|
+
{ role: 'x', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
562
|
+
{ role: 'z', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_Z, required: true },
|
|
563
|
+
{ role: 'value', kind: AXIS_KIND.NUMERIC, channel: ENCODING_CHANNEL.POSITION_Y_HEIGHT, required: true },
|
|
564
|
+
],
|
|
565
|
+
dataShape: 'Array<{x, z, value}> — grouped across two categorical axes, real orbit camera; colors indexed by z-group',
|
|
566
|
+
streamShape: 'none', // fixed x*z grid
|
|
567
|
+
},
|
|
568
|
+
{
|
|
569
|
+
key: 'stackedBar3DOrbit', label: 'Stacked Bar (3D Orbit)', method: 'stackedBarChart3DOrbit', category: '3d',
|
|
570
|
+
coordSystem: COORD_SYSTEM.ORBIT_3D, title: true, legend: false, colorMode: COLOR_MODE.PALETTE, camera: CAMERA_MODE.ORBIT,
|
|
571
|
+
axes: [
|
|
572
|
+
{ role: 'x', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_X, required: true },
|
|
573
|
+
{ role: 'z', kind: AXIS_KIND.CATEGORICAL, channel: ENCODING_CHANNEL.POSITION_Z, required: true },
|
|
574
|
+
{ role: 'values', kind: AXIS_KIND.NUMERIC_LIST, channel: ENCODING_CHANNEL.POSITION_Y_HEIGHT, required: true },
|
|
575
|
+
],
|
|
576
|
+
dataShape: 'Array<{x, z, values:number[]}> — same grid as bar3DOrbit, each cell a stack of segments; colors indexed by segment position, not z-group',
|
|
577
|
+
streamShape: 'none', // fixed x*z grid
|
|
578
|
+
},
|
|
579
|
+
];
|
|
580
|
+
|
|
581
|
+
import { ChartRegistry } from './charting/ChartRegistry.js';
|
|
582
|
+
|
|
583
|
+
/** Canonical registry instance seeded with the built-in chart types. */
|
|
584
|
+
export const chartRegistry = new ChartRegistry(CHART_CATALOG);
|
|
585
|
+
|
|
586
|
+
/** Look up one catalog entry by key, or undefined if the key is unknown. */
|
|
587
|
+
export function getChartCatalogEntry(key) {
|
|
588
|
+
return chartRegistry.get(key);
|
|
589
|
+
}
|