  @startuml

' If ENABLE_ALL_PLANT_ELEMENTS is set BEFORE the first C4_* file is loaded,
' nearly "all" PlantUML elements can be used like
'   Component(StorageA, "Storage A ", $baseShape="storage")
!ENABLE_ALL_PLANT_ELEMENTS = 1

' convert it with additional command line argument -DRELATIVE_INCLUDE="./.." to use locally
!if %variable_exists("RELATIVE_INCLUDE")
  ' percy runs (sometimes) with 1.2023.7
  ' !theme C4_united from %get_variable_value("RELATIVE_INCLUDE")/themes
  !theme C4_united from ./../themes
  ' !theme C4_green from ./../themes
  !include ./../C4_Component.puml
!else
  !theme C4_united from https://gitea.utapp.cn/github-mirrors/C4-PlantUML/raw/branch/ut/themes
  ' !theme C4_green from https://gitea.utapp.cn/github-mirrors/C4-PlantUML/raw/branch/ut/themes
  !include https://gitea.utapp.cn/github-mirrors/C4-PlantUML/raw/branch/ut/C4_Component.puml
!endif

LAYOUT_TOP_DOWN()

' default is rectangle
Component(Component, "Container", "", "A component")
' already supported: rectangle, database, queue
Component(rectangleComponent, "Container rectangle", "rectangle", "A component with rectangle element", $baseShape="rectangle")
Component(databaseComponent, "Container database", "database", "A component with database element", $baseShape="database")
Component(queueComponent, "Container queue", "queue", "A component with queue element", $baseShape="queue")

' already supported: rectangle, database, queue
' already defined (via other):
'   node has a different style (cannot changed automatically)
' actor/ not working (font color not changed to $bkColor) - and/or conflict with existing?
' label not working (font color not changed to $bkColor)

Component(actorComponent, "Component actor", "actor", "A component with actor element", $baseShape="actor")
Component(actorBCComponent, "Component actor/", "actor/", "A component with actor/ element", $baseShape="actor/")
Component(agentComponent, "Component agent", "agent", "A component with agent element", $baseShape="agent")
Component(artifactComponent, "Component artifact", "artifact", "A component with artifact element", $baseShape="artifact")
Component(boundaryComponent, "Component boundary", "boundary", "A component with boundary element", $baseShape="boundary") 
Component(cardComponent, "Component card", "card", "A component with card element", $baseShape="card")
Component(circleComponent, "Component circle", "circle", "A component with circle element", $baseShape="circle")
Component(cloudComponent, "Component cloud", "cloud", "A component with cloud element", $baseShape="cloud")
Component(collectionsComponent, "Component collections", "collections", "A component with collections element", $baseShape="collections")
Component(controlComponent, "Component control", "control", "A component with control element", $baseShape="control")
Component(entityComponent, "Component entity", "entity", "A component with entity element", $baseShape="entity")
Component(fileComponent, "Component file", "file", "A component with file element", $baseShape="file")
Component(folderComponent, "Component folder", "folder", "A component with folder element", $baseShape="folder")
Component(frameComponent, "Component frame", "frame", "A component with frame element", $baseShape="frame")
Component(hexagonComponent, "Component hexagon", "hexagon", "A component with hexagon element", $baseShape="hexagon")
Component(interfaceComponent, "Component interface", "interface", "A component with interface element", $baseShape="interface")
Component(labelComponent, "Component label", "label", "A component with label element", $baseShape="label")
Component(nodeComponent, "Component node", "node", "A component with node element", $baseShape="node")
Component(packageComponent, "Component package", "package", "A component with package element", $baseShape="package")
Component(personComponent, "Component person", "person", "A component with person element", $baseShape="person")
Component(stackComponent, "Component stack", "stack", "A component with stack element", $baseShape="stack")
Component(storageComponent, "Component storage", "storage", "A component with storage element", $baseShape="storage")
Component(usecaseComponent, "Component usecase", "usecase", "A component with usecase element", $baseShape="usecase")
Component(usecaseBCComponent, "Component usecase/", "usecase/", "A component with usecase/ element", $baseShape="usecase/")

Container(actorContainer, "Container actor", "actor", "A Container with actor element", $baseShape="actor")
Container(actorBCContainer, "Container actor/", "actor/", "A Container with actor/ element", $baseShape="actor/")
Container(agentContainer, "Container agent", "agent", "A Container with agent element", $baseShape="agent")
Container(artifactContainer, "Container artifact", "artifact", "A Container with artifact element", $baseShape="artifact")
Container(boundaryContainer, "Container boundary", "boundary", "A Container with boundary element", $baseShape="boundary")
Container(cardContainer, "Container card", "card", "A Container with card element", $baseShape="card")
Container(circleContainer, "Container circle", "circle", "A Container with circle element", $baseShape="circle")
Container(cloudContainer, "Container cloud", "cloud", "A Container with cloud element", $baseShape="cloud")
Container(collectionsContainer, "Container collections", "collections", "A Container with collections element", $baseShape="collections")
Container(controlContainer, "Container control", "control", "A Container with control element", $baseShape="control")
Container(entityContainer, "Container entity", "entity", "A Container with entity element", $baseShape="entity")
Container(fileContainer, "Container file", "file", "A Container with file element", $baseShape="file")
Container(folderContainer, "Container folder", "folder", "A Container with folder element", $baseShape="folder")
Container(frameContainer, "Container frame", "frame", "A Container with frame element", $baseShape="frame")
Container(hexagonContainer, "Container hexagon", "hexagon", "A Container with hexagon element", $baseShape="hexagon")
Container(interfaceContainer, "Container interface", "interface", "A Container with interface element", $baseShape="interface")
Container(labelContainer, "Container label", "label", "A Container with label element", $baseShape="label")
Container(nodeContainer, "Container node", "node", "A Container with node element", $baseShape="node")
Container(packageContainer, "Container package", "package", "A Container with package element", $baseShape="package")
Container(personContainer, "Container person", "person", "A Container with person element", $baseShape="person")
Container(stackContainer, "Container stack", "stack", "A Container with stack element", $baseShape="stack")
Container(storageContainer, "Container storage", "storage", "A Container with storage element", $baseShape="storage")
Container(usecaseContainer, "Container usecase", "usecase", "A Container with usecase element", $baseShape="usecase")
Container(usecaseBCContainer, "Container usecase/", "usecase/", "A Container with usecase/ element", $baseShape="usecase/")

System(actorSystem, "System actor", $type="actor", "A System with actor element", $baseShape="actor")
System(actorBCSystem, "System actor/", $type="actor/", "A System with actor/ element", $baseShape="actor/")
System(agentSystem, "System agent", $type="agent", "A System with agent element", $baseShape="agent")
System(artifactSystem, "System artifact", $type="artifact", "A System with artifact element", $baseShape="artifact")
System(boundarySystem, "System boundary", $type="boundary", "A System with boundary element", $baseShape="boundary")
System(cardSystem, "System card", $type="card", "A System with card element", $baseShape="card")
System(circleSystem, "System circle", $type="circle", "A System with circle element", $baseShape="circle")
System(cloudSystem, "System cloud", $type="cloud", "A System with cloud element", $baseShape="cloud")
System(collectionsSystem, "System collections", $type="collections", "A System with collections element", $baseShape="collections")
System(controlSystem, "System control", $type="control", "A System with control element", $baseShape="control")
System(entitySystem, "System entity", $type="entity", "A System with entity element", $baseShape="entity")
System(fileSystem, "System file", $type="file", "A System with file element", $baseShape="file")
System(folderSystem, "System folder", $type="folder", "A System with folder element", $baseShape="folder")
System(frameSystem, "System frame", $type="frame", "A System with frame element", $baseShape="frame")
System(hexagonSystem, "System hexagon", $type="hexagon", "A System with hexagon element", $baseShape="hexagon")
System(interfaceSystem, "System interface", $type="interface", "A System with interface element", $baseShape="interface")
System(labelSystem, "System label", $type="label", "A System with label element", $baseShape="label")
System(nodeSystem, "System node", $type="node", "A System with node element", $baseShape="node")
System(packageSystem, "System package", $type="package", "A System with package element", $baseShape="package")
System(personSystem, "System person", $type="person", "A System with person element", $baseShape="person")
System(stackSystem, "System stack", $type="stack", "A System with stack element", $baseShape="stack")
System(storageSystem, "System storage", $type="storage", "A System with storage element", $baseShape="storage")
System(usecaseSystem, "System usecase", $type="usecase", "A System with usecase element", $baseShape="usecase")
System(usecaseBCSystem, "System usecase/", $type="usecase/", "A System with usecase/ element", $baseShape="usecase/")

SHOW_LEGEND(false)
@enduml