likec4 1.59.1 → 1.59.2

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.
@@ -42,7 +42,7 @@ export {
42
42
  mock as defineTheme,
43
43
  mock as defineThemeColor,
44
44
  }`,loader:`js`}))}}]}});return Rt(Object.assign(i,a?.default??a))}const Dc={aws:`activate.alexa-for-business.amplify.apache-mxnet-on-aws.api-gateway.app-config.app-flow.app-mesh.app-runner.app-stream.app-sync.application-auto-scaling.application-composer.application-cost-profiler.application-discovery-service.application-migration-service.artifact.athena.audit-manager.augmented-ai-a2i.aurora.auto-scaling.backint-agent.backup.batch.billing-conductor.bottlerocket.braket.budgets.certificate-manager.chatbot.chime-sdk.chime-voice-connector.chime.clean-rooms.client-vpn.cloud-control-api.cloud-development-kit.cloud-directory.cloud-formation.cloud-front.cloud-hsm.cloud-map.cloud-search.cloud-shell.cloud-trail.cloud-wan.cloud-watch.cloud9.code-artifact.code-build.code-catalyst.code-commit.code-deploy.code-guru.code-pipeline.code-star.code-whisperer.cognito.command-line-interface.comprehend-medical.comprehend.compute-optimizer.config.connect.console-mobile-application.control-tower.corretto.cost-and-usage-report.cost-explorer.data-exchange.data-pipeline.data-sync.data-zone.database-migration-service.deep-composer.deep-learning-amis.deep-learning-containers.deep-lens.deep-racer.detective.dev-ops-guru.device-farm.direct-connect.directory-service.distro-for-open-telemetry.document-db.dynamo-db.ec2-auto-scaling.ec2-image-builder.ec2.ecs-anywhere.efs.eks-anywhere.eks-cloud.eks-distro.elasti-cache.elastic-beanstalk.elastic-block-store.elastic-container-registry.elastic-container-service.elastic-disaster-recovery.elastic-fabric-adapter.elastic-inference.elastic-kubernetes-service.elastic-load-balancing.elastic-transcoder.elemental-appliances-software.elemental-conductor.elemental-delta.elemental-link.elemental-live.elemental-media-connect.elemental-media-convert.elemental-media-live.elemental-media-package.elemental-media-store.elemental-media-tailor.elemental-server.emr.event-bridge.express-workflows.fargate.fault-injection-simulator.file-cache.fin-space.firewall-manager.forecast.fraud-detector.free-rtos.fsx-for-lustre.fsx-for-net-app-ontap.fsx-for-open-zfs.fsx-for-wfs.fsx.game-kit.game-lift.game-sparks.genomics-cli.global-accelerator.glue-data-brew.glue-elastic-views.glue.ground-station.guard-duty.health-lake.honeycode.iam-identity-center.identity-and-access-management.inspector.interactive-video-service.io-t-1-click.io-t-analytics.io-t-button.io-t-core.io-t-device-defender.io-t-device-management.io-t-edu-kit.io-t-events.io-t-express-link.io-t-fleet-wise.io-t-greengrass.io-t-robo-runner.io-t-site-wise.io-t-things-graph.io-t-twin-maker.iq.kendra.key-management-service.keyspaces.kinesis-data-analytics.kinesis-data-streams.kinesis-firehose.kinesis-video-streams.kinesis.lake-formation.lambda.launch-wizard.lex.license-manager.lightsail.local-zones.location-service.lookout-for-equipment.lookout-for-metrics.lookout-for-vision.lumberyard.macie.mainframe-modernization.managed-blockchain.managed-grafana.managed-service-for-prometheus.managed-services.managed-streaming-for-apache-kafka.managed-workflows-for-apache-airflow.management-console.marketplace-dark.marketplace-light.memory-db-for-redis.migration-evaluator.migration-hub.monitron.mq.neptune.network-firewall.neuron.nice-dcv.nice-engin-frame.nimble-studio.nitro-enclaves.omics.open-3d-engine.open-search-service.ops-works.organizations.outposts-family.outposts-rack.outposts-servers.panorama.parallel-cluster.personal-health-dashboard.personalize.pinpoint-apis.pinpoint.polly.private-5g.private-certificate-authority.private-link.professional-services.proton.quantum-ledger-database.quick-sight.rds-on-vmware.rds.re-post.red-hat-open-shift-service-on-aws.redshift.rekognition.reserved-instance-reporting.resilience-hub.resource-access-manager.resource-explorer.robo-maker.route-53.s3-on-outposts.sage-maker-ground-truth.sage-maker-studio-lab.sage-maker.savings-plans.secrets-manager.security-hub.security-lake.server-migration-service.serverless-application-repository.service-catalog.service-management-connector.shield.signer.sim-space-weaver.simple-email-service.simple-notification-service.simple-queue-service.simple-storage-service-glacier.simple-storage-service.site-to-site-vpn.snowball-edge.snowball.snowcone.snowmobile.step-functions.storage-gateway.sumerian.supply-chain.support.systems-manager.tensor-flow-on-aws.textract.thinkbox-deadline.thinkbox-frost.thinkbox-krakatoa.thinkbox-sequoia.thinkbox-stoke.thinkbox-xmesh.timestream.tools-and-sdks.torch-serve.training-certification.transcribe.transfer-family.transit-gateway.translate.trusted-advisor.verified-access.verified-permissions.virtual-private-cloud.vmware-cloud-on-aws.vpc-lattice.waf.wavelength.well-architected-tool.wickr.work-docs-sdk.work-docs.work-link.work-mail.work-spaces-family.x-ray`.split(`.`),azure:`abs-member.active-directory-connect-health.activity-log.administrative-units.advisor.ai-at-edge.ai-studio.aks-automatic.aks-istio.alerts.all-resources.analysis-services.anomaly-detector.api-center.api-connections.api-management-services.api-proxy.app-compliance-automation.app-configuration.app-registrations.app-service-certificates.app-service-domains.app-service-environments.app-service-plans.app-services.app-space-component.app-space.applens.application-gateway-containers.application-gateways.application-group.application-insights.application-security-groups.aquila.arc-data-services.arc-kubernetes.arc-machines.arc-postgre-sql.arc-sql-managed-instance.arc-sql-server.atm-multistack.auto-scale.automanaged-vm.automation-accounts.availability-sets.avs-vm.azure-a.azure-ad-b2c.azure-api-for-fhir.azure-applied-ai-services.azure-arc.azure-attestation.azure-backup-center.azure-blockchain-service.azure-center-for-sap.azure-chaos-studio.azure-cloud-shell.azure-communication-services.azure-communications-gateway.azure-compute-galleries.azure-consumption-commitment.azure-cosmos-db.azure-data-catalog.azure-data-explorer-clusters.azure-database-maria-db-server.azure-database-migration-services.azure-database-my-sql-server.azure-database-postgre-sql-server-group.azure-database-postgre-sql-server.azure-databox-gateway.azure-databricks.azure-deployment-environments.azure-dev-ops.azure-dev-tunnels.azure-edge-hardware-center.azure-experimentation-studio.azure-fileshares.azure-firewall-manager.azure-firewall-policy.azure-hcp-cache.azure-hpc-workbenches.azure-hybrid-center.azure-information-protection.azure-io-t-operations.azure-lighthouse.azure-load-testing.azure-managed-grafana.azure-managed-redis.azure-maps-accounts.azure-media-service.azure-migrate.azure-monitor-dashboard.azure-monitor-pipeline.azure-monitors-for-sap-solutions.azure-net-app-files.azure-network-function-manager-functions.azure-network-function-manager.azure-object-understanding.azure-open-ai.azure-operator-5g-core.azure-operator-insights.azure-operator-nexus.azure-operator-service-manager.azure-orbital.azure-programmable-connectivity.azure-purview-accounts.azure-quotas.azure-red-hat-open-shift.azure-sentinel.azure-service-bus.azure-sphere.azure-spring-apps.azure-sql-edge.azure-sql-server-stretch-databases.azure-sql-vm.azure-sql.azure-stack-edge.azure-stack-hci-sizer.azure-stack.azure-storage-mover.azure-support-center-blue.azure-sustainability.azure-synapse-analytics.azure-token-service.azure-video-indexer.azure-virtual-desktop.azure-vmware-solution.azure-workbooks.azurite.backlog.backup-vault.bare-metal-infrastructure.bastions.batch-accounts.batch-ai.biz-talk.blob-block.blob-page.blockchain-applications.blueprints.bonsai.bot-services.branch.breeze.browser.bug.builds.business-process-tracking.cache-redis.cache.capacity-reservation-groups.capacity.cdn-profiles.central-service-instance-for-sap.ceres.change-analysis.client-apps.cloud-services-classic.cloud-services-extended-support.cloud-test.code-optimization.code.cognitive-search.cognitive-services-decisions.cognitive-services.collaborative-service.commit.community-images.compliance-center.compliance.compute-fleet.computer-vision.conditional-access.confidential-ledgers.connected-cache.connected-vehicle-platform.connections.consortium.container-apps-environments.container-instances.container-registries.container-services-deprecated.content-moderators.content-safety.controls-horizontal.controls.cost-alerts.cost-analysis.cost-budgets.cost-export.cost-management-and-billing.cost-management.counter.cubes.custom-ip-prefix.custom-vision.customer-lockbox-for-microsoft-azure.dashboard-hub.dashboard.data-box.data-collection-rules.data-factories.data-lake-analytics.data-lake-storage-gen1.data-lake-store-gen1.data-share-invitations.data-shares.data-virtualization.database-instance-for-sap.ddo-s-protection-plans.dedicated-hsm.defender-cm-local-manager.defender-dcs-controller.defender-distributer-control-system.defender-engineering-station.defender-external-management.defender-freezer-monitor.defender-historian.defender-hmi.defender-industrial-packaging-system.defender-industrial-printer.defender-industrial-robot.defender-industrial-scale-system.defender-marquee.defender-meter.defender-plc.defender-pneumatic-device.defender-programable-board.defender-relay.defender-robot-controller.defender-rtu.defender-sensor.defender-slot.defender-web-guiding-system.detonation.dev-console.dev-ops-starter.dev-test-labs.device-compliance.device-configuration.device-enrollment.device-provisioning-services.device-security-apple.device-security-google.device-security-windows.device-update-io-t-hub.devices.diagnostics-settings.digital-twins.disk-encryption-sets.disk-pool.disks-classic.disks-snapshots.disks.dns-multistack.dns-private-resolver.dns-security-policy.dns-zones.download.e-books.edge-actions.edge-management.edge-storage-accelerator.education.elastic-job-agents.elastic-san.endpoint-analytics.engage-center-connect.enterprise-applications.entra-connect-health.entra-connect-sync.entra-connect.entra-domain-services.entra-global-secure-access.entra-id-protection.entra-identity-custom-roles.entra-identity-licenses.entra-identity-risky-signins.entra-identity-risky-users.entra-identity-roles-and-administrators.entra-internet-access.entra-managed-identities.entra-private-access.entra-privleged-identity-management.entra-verified-id.error.event-grid-domains.event-grid-subscriptions.event-grid-topics.event-hub-clusters.event-hubs.exchange-access.exchange-on-premises-access.express-route-circuits.express-route-direct.express-route-traffic-collector.extended-security-updates.extensions.external-id-modified.external-id.external-identities.face-apis.feature-previews.fhir-service.fiji.file.files.firewalls.folder-blank.folder-website.form-recognizers.frd-qa.free-services.front-door-and-cdn-profiles.ftp.function-apps.gear.genomics-accounts.genomics.globe-error.globe-success.globe-warning.groups.guide.hd-insight-clusters.hdi-aks-cluster.heart.help-and-support.host-groups.host-pools.hosts.hybrid-connectivity-hub.ic-m-troubleshooting.identity-governance.identity-multi-factor-authentication.identity-secure-score.image-definitions.image-templates.image-versions.image.images.immersive-readers.import-export-jobs.industrial-io-t.information.infrastructure-backup.input-output.instance-pools.integration-accounts.integration-environments.integration-service-environments.internet-analyzer-profiles.intune-app-protection.intune-for-education.intune-trends.intune.io-t-central-applications.io-t-edge.io-t-hub.ip-address-manager.ip-groups.journey-hub.key-vaults.keys.kubernetes-fleet-manager.kubernetes-services.lab-accounts.lab-services.landing-zone.language-understanding.language.launch-portal.learn.load-balancer-hub.load-balancers.load-test.load-testing.local-network-gateways.location.log-analytics-query-pack.log-analytics-workspaces.log-streaming.logic-apps-custom-connector.logic-apps-template.logic-apps.machine-learning-studio-classic-web-services.machine-learning-studio-web-service-plans.machine-learning-studio-workspaces.machine-learning.machines-azure-arc.maintenance-configuration.managed-applications-center.managed-database.managed-desktop.managed-dev-ops-pools.managed-file-shares.managed-identities.managed-instance-apache-cassandra.managed-service-fabric.management-groups.management-portal.marketplace-management.marketplace.med-tech-service.media-file.media.mesh-applications.metrics-advisor.metrics.microsoft-defender-easm.microsoft-defender-for-cloud.microsoft-defender-for-io-t.microsoft-dev-box.mindaro.mission-landing-zone.mobile-engagement.mobile-networks.mobile.modular-data-center.module.monitor-health-models.monitor.multi-tenancy.multifactor-authentication.my-customers.nat.network-foundation-hub.network-interfaces.network-managers.network-security-groups.network-security-hub.network-security-perimeters.network-watcher.notification-hub-namespaces.notification-hubs.offers.on-premises-data-gateways.open-supply-chain-platform.operation-log-classic.oracle-database.os-images-classic.osconfig.outbound-connection.partner-namespace.partner-registration.partner-topic.peering-service.peerings.personalizers.planetary-computer-pro.plans.policy.power-bi-embedded.power-platform.power-up.power.powershell.preview-features.private-endpoints.private-link-service.private-link-services.private-link.process-explorer.production-ready-database.promethus.proximity-placement-groups.public-ip-addresses-classic.public-ip-addresses.public-ip-prefixes.qn-a-makers.quickstart-center.recent.recovery-services-vaults.region-management.relays.remote-rendering.reservations.reserved-capacity.reserved-ip-addresses-classic.resource-explorer.resource-graph-explorer.resource-group-list.resource-groups.resource-guard.resource-linked.resource-management-private-link.resource-mover.resources-provider.restore-points-collections.restore-points.route-filters.route-tables.rtos.savings-plans.scheduler-job-collections.scheduler.scvmm-management-servers.search-grid.search.security-baselines.security.send-grid-accounts.server-farm.serverless-search.service-catalog-mad.service-endpoint-policies.service-fabric-clusters.service-group-relationships.service-groups.service-health.service-providers.shared-image-galleries.signal-r.software-as-a-service.software-updates.solutions.sonic-dash.spatial-anchor-accounts.speech-services.spot-vm.spot-vmss.sql-data-warehouses.sql-database-fleet-manager.sql-database.sql-elastic-pools.sql-managed-instance.sql-server-registries.sql-server.ssd.ssh-keys.ssis-lift-and-shift-ir.stack-hci-premium.static-apps.stor-simple-data-managers.stor-simple-device-managers.storage-accounts-classic.storage-accounts.storage-actions.storage-azure-files.storage-container.storage-explorer.storage-functions.storage-hubs.storage-queue.storage-sync-services.stream-analytics-jobs.subnet.subscriptions.system-topic.table.tag.tags.targets-management.template-specs.templates.tenant-properties.tenant-status.test-base.tfs-vc-repository.time-series-data-sets.time-series-insights-access-policies.time-series-insights-environments.time-series-insights-event-sources.toolbox.toolchain-orchestrator.traffic-manager-profiles.translator-text.troubleshoot.universal-print.update-management-center.updates.user-privacy.user-settings.user-subscriptions.users.verifiable-credentials.verification-as-a-service.versions.video-analyzers.virtual-clusters.virtual-enclaves.virtual-instance-for-sap.virtual-machine.virtual-machines-classic.virtual-network-gateways.virtual-networks-classic.virtual-networks.virtual-router.virtual-visits-builder.virtual-wan-hub.virtual-wans.vm-app-definitions.vm-app-versions.vm-image-version.vm-images-classic.vm-scale-sets.vpnclient-windows.wac-installer.wac.web-app-database.web-application-firewall-policies-waf.web-jobs.web-slots.web-test.website-power.website-staging.windows-notification-services.windows10-core-services.workbooks.worker-container-app.workflow.workload-orchestration.workspace-gateway.workspaces`.split(`.`),gcp:`access-context-manager.administration.advanced-agent-modeling.advanced-solutions-lab.agent-assist.ai-hub.ai-platform-unified.ai-platform.analytics-hub.anthos-config-management.anthos-service-mesh.anthos.api-analytics.api-monetization.api.apigee-api-platform.apigee-sense.app-engine.artifact-registry.asset-inventory.assured-workloads.auto-ml-natural-language.auto-ml-tables.auto-ml-translation.auto-ml-video-intelligence.auto-ml-vision.auto-ml.bare-metal-solutions.batch.beyondcorp.big-query.bigtable.billing.binary-authorization.catalog.certificate-authority-service.certificate-manager.cloud-api-gateway.cloud-apis.cloud-armor.cloud-asset-inventory.cloud-audit-logs.cloud-build.cloud-cdn.cloud-code.cloud-composer.cloud-data-fusion.cloud-deploy.cloud-deployment-manager.cloud-dns.cloud-domains.cloud-ekm.cloud-endpoints.cloud-external-ip-addresses.cloud-firewall-rules.cloud-for-marketing.cloud-functions.cloud-generic.cloud-gpu.cloud-healthcare-api.cloud-healthcare-marketplace.cloud-hsm.cloud-ids.cloud-inference-api.cloud-interconnect.cloud-jobs-api.cloud-load-balancing.cloud-logging.cloud-media-edge.cloud-monitoring.cloud-nat.cloud-natural-language-api.cloud-network.cloud-ops.cloud-optimization-ai-fleet-routing-api.cloud-optimization-ai.cloud-router.cloud-routes.cloud-run-for-anthos.cloud-run.cloud-scheduler.cloud-security-scanner.cloud-shell.cloud-spanner.cloud-sql.cloud-storage.cloud-tasks.cloud-test-lab.cloud-tpu.cloud-translation-api.cloud-vision-api.cloud-vpn.compute-engine.configuration-management.connectivity-test.connectors.contact-center-ai.container-optimized-os.container-registry.data-catalog.data-labeling.data-layers.data-loss-prevention-api.data-qn-a.data-studio.data-transfer.database-migration-service.dataflow.datalab.dataplex.datapol.dataprep.dataproc-metastore.dataproc.datashare.datastore.datastream.debugger.developer-portal.dialogflow-cx.dialogflow-insights.dialogflow.document-ai.early-access-center.error-reporting.eventarc.filestore.financial-services-marketplace.firestore.fleet-engine.free-trial.game-servers.gce-systems-management.genomics.gke-on-prem.google-cloud-marketplace.google-kubernetes-engine.google-maps-platform.healthcare-nlp-api.home.identity-and-access-management.identity-aware-proxy.identity-platform.iot-core.iot-edge.key-access-justifications.key-management-service.kuberun.launcher.local-ssd.looker.managed-service-for-microsoft-active-directory.media-translation-api.memorystore.migrate-for-anthos.migrate-for-compute-engine.my-cloud.network-connectivity-center.network-intelligence-center.network-security.network-tiers.network-topology.onboarding.os-configuration-management.os-inventory-management.os-patch-management.partner-interconnect.partner-portal.performance-dashboard.permissions.persistent-disk.phishing-protection.policy-analyzer.premium-network-tier.private-connectivity.private-service-connect.producer-portal.profiler.project.pub-sub.quantum-engine.quotas.real-world-insights.recommendations-ai.release-notes.retail-api.risk-manager.runtime-config.secret-manager.security-command-center.security-health-advisor.security-key-enforcement.security.service-discovery.speech-to-text.stackdriver.standard-network-tier.stream-suite.support.tensorflow-enterprise.text-to-speech.tools-for-powershell.trace.traffic-director.transfer-appliance.transfer.user-preferences.vertex-ai.video-intelligence-api.virtual-private-cloud.visual-inspection.vmware-engine.web-risk.web-security-scanner.workflows.workload-identity-pool`.split(`.`),tech:`100tb.500px.aarch64.active-campaign-icon.active-campaign.adobe-after-effects.adobe-animate.adobe-dreamweaver.adobe-icon.adobe-illustrator.adobe-incopy.adobe-indesign.adobe-lightroom.adobe-photoshop.adobe-premiere-pro.adobe-premiere.adobe-xd.adobe.adonis-js.adonisjs-icon.adroll.adyen.aerogear.aerospike-icon.aerospike.after-effects.aha.airbnb-icon.airbnb.airbrake.airflow-icon.airflow.airtable.aix.akamai.akka.alfresco.algolia.alpinejs-icon.alpinejs.altair.amazon-chime.amazon-connect.amazon-web-services.amd.amex-digital.amex.amp-icon.amp.ampersand.amplication-icon.amplication.amplitude-icon.amplitude.anaconda.analog.android-icon.android-studio.android-vertical.android.angellist.angular-icon.angular-js.angular.ansible.ant-design.anthropic-icon.anthropic.apache-camel.apache-cloudstack.apache-flink-icon.apache-flink.apache-spark.apache-superset-icon.apache-superset.apache.apiary.apidog-icon.apidog.apl.apollostack.apostrophe.appbaseio-icon.appbaseio.appcelerator.appcenter-icon.appcenter.appcircle-icon.appcircle.appcode.appdynamics-icon.appdynamics.appium.apple-app-store.apple-pay.apple-safari.apple.applitools-icon.applitools.appsignal-icon.appsignal.apptentive.appveyor.appwrite-icon.appwrite.arangodb-icon.arangodb.arc.architect-icon.architect.archlinux.arduino.argo-icon.argo.argocd.arm.armory-icon.armory.asana-icon.asana.asciidoctor.assembla-icon.assembla.astro-icon.astro.astronomer.async-api-icon.async-api.atlassian.atom-icon.atom.atomic-icon.atomic.atomicojs-icon.atomicojs.aurelia.aurora.auth0-icon.auth0.authy.autodesk-maya.autodesk-shot-grid.autoit.autoprefixer.ava.awesome.awk.aws-amplify.aws-api-gateway.aws-app-mesh.aws-appflow.aws-appsync.aws-athena.aws-aurora.aws-backup.aws-batch.aws-certificate-manager.aws-cloudformation.aws-cloudfront.aws-cloudsearch.aws-cloudtrail.aws-cloudwatch.aws-codebuild.aws-codecommit.aws-codedeploy.aws-codepipeline.aws-codestar.aws-cognito.aws-config.aws-documentdb.aws-dynamodb.aws-ec2.aws-ecs.aws-eks.aws-elastic-beanstalk.aws-elasticache.aws-elb.aws-eventbridge.aws-fargate.aws-glacier.aws-glue.aws-iam.aws-keyspaces.aws-kinesis.aws-kms.aws-lake-formation.aws-lambda.aws-lightsail.aws-mq.aws-msk.aws-neptune.aws-open-search.aws-opsworks.aws-quicksight.aws-rds.aws-redshift.aws-route53.aws-s3.aws-secrets-manager.aws-ses.aws-shield.aws-sns.aws-sqs.aws-step-functions.aws-systems-manager.aws-timestream.aws-vpc.aws-waf.aws-xray.aws.axios.azios.azure-devops.azure-sql-database.azure.babel.backbone-icon.backbone-js.backbone.backerkit.baker-street.balena.ballerina.bamboo.basecamp-icon.basecamp.basekit.baseline.bash-icon.bash.batch.beats.behance.bem-2.bem.bigpanda.bing.biomejs-icon.biomejs.bitbar.bitbucket.bitcoin.bitnami.bitrise-icon.bitrise.blender.blitzjs-icon.blitzjs.blocs.blogger.blossom.blueprint.bluesky.bluetooth.booqable-icon.booqable.bootstrap.bosun.botanalytics.bourbon.bower.box.brackets.brainjs.branch-icon.branch.brandfolder-icon.brandfolder.brave.braze-icon.braze.broadcom-icon.broadcom.broccoli.brotli.browserify-icon.browserify.browserling.browserslist.browserstack.browsersync.brunch.bubble-icon.bubble.buck.buddy.buffer.bugherd-icon.bugherd.bugsee.bugsnag.builder-io-icon.builder-io.buildkite-icon.buildkite.bulma.bun.bunny-net-icon.bunny-net.c.cachet.cairo-graphics.cake-php.cakephp-icon.calibre-icon.calibre.campaignmonitor-icon.campaignmonitor.canjs.canva.capacitor.capacitorjs-icon.capacitorjs.capistrano.carbide.cardano-icon.cardano.cassandra.cent-os.centos-icon.certbot.ceylon.chai.chalk.chargebee-icon.chargebee.chartjs.chef.chevereto.chroma.chromatic-icon.chromatic.chrome-web-store.chrome.cinder.circle-ci.cirrus-ci.cirrus.clarity.claude-icon.claude.clio-lang.clion.cljs.clojure-script.clojure.close.cloud9.cloudacademy-icon.cloudacademy.cloudcraft.cloudflare-icon.cloudflare-workers-icon.cloudflare-workers.cloudflare.cloudinary-icon.cloudinary.cloudlinux.cmake.cobalt.cockpit.cocoapods.coda-icon.coda.codacy.code-igniter.code-pen.codeac.codebase.codebeat.codecademy.codeception.codeclimate-icon.codeclimate.codecov-icon.codecov.codefactor-icon.codefactor.codeigniter-icon.codepen-icon.codersrank-icon.codersrank.coderwall.codesandbox-icon.codesandbox.codesee-icon.codesee.codio.codium-icon.codium.coffee-script.commitizen.compass.componentkit.compose-multiplatform.compose.composer.conan-io.concourse.concretecms-icon.concretecms.conda.confluence.consul.contao.contentful.convox-icon.convox.copyleft-pirate.copyleft.corda.cordova.cosmosdb.couchbase.couchdb-icon.couchdb.coursera.coveralls.cpanel.cplusplus.craftcms.crashlytics.crateio.create-react-app.createjs.crossplane-icon.crossplane.crucible.crystal.csharp.css3-official.css3.cssnext.cube-icon.cube.cucumber.curl.customerio-icon.customerio.cyclejs.cypress-icon.cypress.d3.d3js.dailydev-icon.dailydev.daisy-ui-icon.daisy-ui.danfo.dart.dashlane-icon.dashlane.data-grip.data-spell.data-station.database-labs.datadog-icon.datadog.datasette-icon.datasette.datocms-icon.datocms.dbeaver.dbt-icon.dbt.dcos-icon.dcos.debian.delighted-icon.delighted.deno.dependabot.deployhq-icon.deployhq.derby.descript-icon.descript.designernews.deviantart-icon.deviantart.devicon.dgraph-icon.dgraph.dialogflow.digital-ocean-icon.digital-ocean.dimer.dinersclub.discord-icon.discord-js.discord.discourse-icon.discourse.discover.disqus.django-icon.django-rest.django.dockbit.docker-icon.docker.doctrine.docusaurus.dojo-icon.dojo-toolkit.dojo.dolt.dotnet.dovetail-icon.dovetail.dreamhost.dribbble-icon.dribbble.drift.drip.drizzle-icon.drizzle.drone-icon.drone.drools-icon.drools.dropbox.dropmark.dropwizard.dropzone.drupal-icon.drupal.duckduckgo.dynatrace-icon.dynatrace.dyndns.ebanx.eclipse-ceylon.eclipse-icon.eclipse-ide.eclipse-vert-x.eclipse.ecma.edgedb.edgio-icon.edgio.editorconfig.effect-icon.effect.effector.egghead.elasticbeats.elasticpath-icon.elasticpath.elasticsearch.electron.element.elemental-ui.elementary.eleventy-11ty.eleventy.elixir.ello.elm-classic.elm.elo.emacs-classic.emacs.embedded-c.embedly.ember-js.ember-tomster.ember.emmet.enact.engine-yard-icon.engine-yard.envato.envoy-icon.envoy.envoyer.eraser-icon.eraser.erlang.esbuild.esdoc.eslint-old.eslint.eta-icon.eta.etcd.ethereum-color.ethereum.ethers.ethnio.eventbrite-icon.eventbrite.eventsentry.evergreen-icon.evergreen.expo-icon.expo.express.fabric.facebook.faker.falcor.fast-api.fastapi-icon.fastify-icon.fastify.fastlane.fastly.fauna-icon.fauna.feathers.feathersjs.fedora.fetch.ffmpeg-icon.ffmpeg.figma.file-zilla.firebase-icon.firebase.firefox.flannel.flarum.flask.flat-ui.flattr-icon.flattr.fleep.flickr-icon.flickr.flight.floodio.flow.flowxo.floydhub.flutter.flux.fluxxor.fly-icon.fly.fogbugz-icon.fogbugz.fomo-icon.fomo.font-awesome.forestadmin-icon.forestadmin.forever.formkeep.fortran.foundation.foundationdb-icon.foundationdb.framer.framework7-icon.framework7.freebsd.freedcamp-icon.freedcamp.freedomdefined.fresh.frontapp.fsharp.fuchsia.galliumos.game-analytics-icon.game-analytics.ganache-icon.ganache.gatling.gatsby.gazebo.gcc.geekbot.geetest-icon.geetest.gentoo.getyourguide.ghost.giantswarm.gimp.gin.git-icon.git.gitboard.gitbook.github-actions.github-codespaces.github-copilot.github-icon.github-octocat.github.gitkraken.gitlab-icon.gitlab.gitpod.gitter.gitup.glamorous-icon.glamorous.gleam.glimmerjs.glint.glitch-icon.glitch.gnome-icon.gnome.gnu-emacs.gnu-net.gnu.gnupg-icon.gnupg.go-land.go.gocd.godot-engine.godot-icon.godot.gohorse.google-360suite.google-admob.google-ads.google-adsense.google-analytics.google-bard-icon.google-bard.google-calendar.google-cloud-functions.google-cloud-run.google-cloud.google-data-studio.google-developers.google-domains-icon.google-domains.google-drive.google-fit.google-gemini.google-gmail.google-home.google-icon.google-keep.google-maps.google-marketing-platform.google-meet.google-one.google-optimize.google-palm.google-pay.google-photos.google-play-console-icon.google-play-console.google-play-icon.google-play.google-search-console.google-tag-manager.google-workspace.google.gopher.gradio-icon.gradio.gradle.grafana.grails.grammarly-icon.grammarly.graphene.graphql.grav.gravatar-icon.gravatar.graylog-icon.graylog.greensock-icon.greensock.gridsome-icon.gridsome.grommet.groovehq.groovy.grove.growth-book-icon.growth-book.grpc.grunt.gruntjs.gulp.gulpjs.gunicorn.gunjs.gusto.gwt.hack.hacker-one.hadoop.haiku-icon.haiku.haml.hanami.handlebars.hapi.hardhat-icon.hardhat.harness-icon.harness.harvester.hashicorp-icon.hashicorp-vault.hashicorp.hashnode-icon.hashnode.haskell-icon.haskell.hasura-icon.hasura.haxe.haxl.hbase.hcaptcha-icon.hcaptcha.headlessui-icon.headlessui.heap-icon.heap.helm.helpscout-icon.helpscout.hermes.heroku-icon.heroku-redis.heroku.hexo.hhvm.hibernate.highcharts.hipercard.homebrew.hono.hookstate.hootsuite-icon.hootsuite.hosted-graphite.hostgator-icon.hostgator.hotjar-icon.hotjar.houndci.html5-boilerplate.html5.htmx-icon.htmx.httpie-icon.httpie.hubspot.hugging-face-icon.hugging-face.huggy.hugo.humongous.hyper.hyperapp.ibm-spss-statistics.ibm.ie10.ieee.ietf.ifttt.imagemin.imba-icon.imba.immer-icon.immer.immutable.impala.importio-icon.importio.incident-icon.incident.infer.inferno.influxdb-icon.influxdb.ink.inkscape.insomnia.instagram-icon.instagram.intel.intellij-idea.intercom-icon.intercom.internet-computer-icon.internet-computer.internetexplorer.invision-icon.invision.ionic-icon.ionic.ios.iron-icon.iron.itsalive-icon.itsalive.jade.jaeger.jamstack-icon.jamstack.jasmine.java.javascript.jcb.jeet.jekyll.jenkins.jest.jetbrains-icon.jetbrains-space-icon.jetbrains-space.jetbrains.jfrog.jhipster-icon.jhipster.jira-align.jira.joomla.jotai.jquery-mobile.jquery.jruby.jsbin.jsdelivr.jsdom.jsfiddle.json-ld.json-schema-icon.json-schema.json.jspm.jss.juju.jule.julia.junit.jupyter.jwt-icon.jwt.k3os.k3s.kafka-icon.kafka.kaggle.kaios.kallithea.karate.karma.katalon-icon.katalon.kde.keen.kemal.keras.keycdn-icon.keycdn.keydb-icon.keydb.keystonejs.khan-academy-icon.khan-academy.kibana.kickstarter-icon.kickstarter.kinto-icon.kinto.kirby-icon.kirby.knex-js.knex.knockout.koa.kong-icon.kong.kops.koreio.kotlin-icon.kotlin.kraken.krakenjs.ktor-icon.ktor.kubernetes.kustomer.labview.languagetool.laravel.lastfm.lateral-icon.lateral.latex.launchdarkly-icon.launchdarkly.launchrock.leaflet.leankit-icon.leankit.lerna.less-js.less.lets-cloud.letsencrypt.leveldb.lexical-icon.lexical.liftweb.lighthouse.lightstep-icon.lightstep.lighttpd.linear-icon.linear.linkedin-icon.linkedin.linkerd.linode.linux-mint.linux-tux.linux.liquibase.lit-icon.lit.litmus.livewire.llvm.loader.lodash.logentries.logstash.lookback.looker-icon.looker.loom-icon.loom.loopback-icon.loopback.losant.lua.lucene-net.lucene.lumen.mac-os.madge.maestro.mageia.magento.mailchimp-freddie.mailchimp.maildeveloper.mailgun-icon.mailgun.mailjet-icon.mailjet.malinajs.manjaro.mantine-icon.mantine.mapbox-icon.mapbox.maps-me.mapzen-icon.mapzen.mariadb-icon.mariadb.marionette.markdown.marko.marvel.mastercard.mastodon-icon.mastodon.material-ui.materialize.materializecss.matlab.matomo-icon.matomo.matplotlib-icon.matplotlib.matter-icon.matter.mattermost-icon.mattermost.mautic-icon.mautic.maven.mdn.mdx.medium-icon.medium.medusa-icon.medusa.meilisearch.memcached.memgraph.mention.mercurial.mesos.messenger.meta-icon.meta.metabase.metamask-icon.metamask.meteor-icon.meteor-js.meteor.micro-icon.micro-python.micro.microcosm.micron-icon.micron.microsoft-azure.microsoft-edge.microsoft-icon.microsoft-onedrive.microsoft-power-bi.microsoft-sql-server.microsoft-teams.microsoft-windows-icon.microsoft-windows.microsoft.mida-icon.mida.middleman.midjourney.milligram.million-icon.million.milvus-icon.milvus.mindsdb-icon.mindsdb.minitab.mint-lang.mio.miro-icon.miro.mist.mistral-ai-icon.mistral-ai.mithril.mixmax.mixpanel.mlab.mob-x.mocha.mockflow-icon.mockflow.modernizr.modx-icon.modx.moleculer.momentjs.monday-icon.monday.monero.mongodb-icon.mongodb.mongoose-js.mono.moodle.moon.mootools.morpheus-icon.morpheus.mozilla.mparticle-icon.mparticle.mps-icon.mps.ms-dos.msw-icon.msw.multipass.mysql-icon.mysql.naiveui.namecheap.nano.nanonets.nasm.nativescript.nats-icon.nats.neat.neo4j.neon-icon.neon.neovim.nerog.nestjs.net-core.net.netbeans.netflix-icon.netflix.netlify-icon.netlify.network-x.neverinstall-icon.neverinstall.new-relic-icon.new-relic.new4j.nextjs-icon.nextjs.nginx.ngrok.nhibernate.nhost-icon.nhost.nightwatch.nim-lang.nim.nimble.nix.nocodb.nodal.node-sass.nodebots.nodejs-icon-alt.nodejs-icon.nodejs.nodemon.nodeos.nodewebkit.nomad-icon.nomad.notion-icon.notion.noysi.npm-icon.npm.nuclide.nuget.num-py.nuxt-icon.nuxt-js.nuxt.nvidia.nvm.nx.oauth.objective-c.observablehq.obsidian-icon.obsidian.ocaml.octodns.octopus-deploy.oh-my-zsh.okta-icon.okta.olark.onesignal.open-al.open-api.open-cl.open-cv.open-gl.open-graph.open-stack.open-suse.open-telemetry.open-zeppelin-icon.open-zeppelin.openai-icon.openai.openapi-icon.opencart.opencollective.openframeworks.openjs-foundation-icon.openjs-foundation.openlayers.opensearch-icon.opensearch.openshift.opensource.openstack-icon.opentelemetry-icon.opera.opsgenie.optimizely-icon.optimizely.oracle.oreilly.origami.origin.oshw.osquery.overloop-icon.overloop.p5js.packer.pagekit.pagekite.pagerduty-icon.pagerduty.panda.pandacss-icon.pandacss.pandas-icon.pandas.parcel-icon.parcel.parse.parsehub.partytown-icon.partytown.passbolt-icon.passbolt.passport.patreon.payload.paypal.peer5.pepperoni.percona.percy-icon.percy.perf-rocks.perl.perplexity-icon.perplexity.pf-sense.phalcon.phoenix-framework.phoenix.photon-engine.php-alt.php-storm.php.pinecone-icon.pinecone.pinia.pinterest.pipedream.pipedrive.pipefy.pivotal-tracker.pixijs.pkg.planetscale.planless-icon.planless.plasmic.plastic-scm.platformio.play.playwright.playwrite.ploty.pluralsight-icon.pluralsight.pm2-icon.pm2.pnpm.pocket-base.podman.poeditor.polygon.polymer.portainer.postcss.postgraphile.postgresql.posthog-icon.posthog.postman-icon.postman.pouchdb.powershell.preact.precursor.prerender-icon.prerender.prestashop-icon.prestashop.presto-icon.presto.prettier.prisma.prismic-icon.prismic.processing.processwire-icon.processwire.productboard-icon.productboard.producthunt.progress.prometheus.promises.proofy.protoio.protonet.protractor.prott.pug.pulumi-icon.pulumi.pumpkindb.puppet-icon.puppet.puppeteer.purescript-icon.purescript.pushbullet.pusher-icon.pusher.putty.pwa.pycharm.pypi.pyscript.pytest.python-poetry.python.pytorch-icon.pytorch.pyup.q.qdrant-icon.qdrant.qlik.qodana.qt.qualcomm.quarkus-icon.quarkus.quasar.quay.quobyte.quora.qwik-icon.qwik.r-lang.r.rabbitmq-icon.rabbitmq.rackspace-icon.rackspace.rails.ramda.raml.rancher-icon.rancher.raphael.raspberry-pi.rax.reach.react-bootstrap.react-query-icon.react-query.react-router.react-spring.react-styleguidist.react.reactivex.realm.reapp.reasonml-icon.reasonml.recaptcha.recoil-icon.recoil.red-cube-s-epic-compiler-thingy-programming-re-ct.reddit-icon.reddit.redhat-icon.redhat.redis.redsmin.redux-observable.redux-saga.redux.redwoodjs.reindex.relay.release.remix-icon.remix.ren-py.renovatebot.replay-icon.replay.replit-icon.replit.require.rescript-icon.rescript.rest-li.rethinkdb.retool-icon.retool.riak.rider.riot.risingwave-icon.risingwave.robot-operating-system-ros.rocket-chat-icon.rocket-chat.rocksdb.rocky-linux-icon.rocky-linux.rollbar-icon.rollbar.rollupjs.rome-icon.rome.ros.rsa.rsmq.rspec.rstudio.rubocop.ruby-mine.ruby-on-rails.ruby.rubygems.rum.runscope.rush-icon.rush.rust.rxdb.safari.sagui.sails.salesforce.sameroom.samsung.sanity.sap.sass-doc.sass.saucelabs.scala.scaledrone.scalingo.scribd-icon.scribd.sdl.seaborn-icon.seaborn.section-icon.section.segment-icon.segment.selenium.sema-software.semantic-release.semantic-ui.semaphoreci.sencha.sendgrid-icon.sendgrid.seneca.sensu-icon.sensu.sentry-icon.sentry.sequelize.serverless.sherlock-icon.sherlock.shields.shipit.shogun.shopify.shopware.shortcut-icon.shortcut.sidekiq-icon.sidekiq.signal.sigstore-icon.sigstore.sinatra.singlestore-icon.singlestore.sitepoint.sk-hynix.skaffolder.sketch.skylight.skype.slack-icon.slack.slides.slidev.slim.smartling.smashingmagazine.snap-svg.snaplet-icon.snaplet.snowflake-icon.snowflake.snowpack.snyk.socket-io.solarwinds.solid.solidity.solidjs-icon.solidjs.solr.sonarcloud-icon.sonarcloud.sonarlint-icon.sonarlint.sonarqube.soundcloud.sourcegraph.sourcetree.spark.sparkpost.speakerdeck.speedcurve.spidermonkey-icon.spidermonkey.spinnaker.splunk.spotify-icon.spotify.spree.spring-icon.spring.sql-developer.sqlalchemy.sqlite.square.squarespace.ssh.sst-icon.sst.stability-ai-icon.stability-ai.stackbit-icon.stackbit.stackblitz-icon.stackblitz.stackoverflow-icon.stackoverflow.stackshare.stata.stately-icon.stately.statuspage.stdlib-icon.stdlib.steam.stenciljs-icon.stenciljs.stetho.stickermule.stigg-icon.stigg.stimulus-icon.stimulus.stitch.stoplight.storyblocks-icon.storyblocks.storyblok-icon.storyblok.storybook-icon.storybook.strapi-icon.strapi.streamlit.strider.stripe.struts.styleci.stylefmt.stylelint.stylis.stylus.stytch.sublimetext-icon.sublimetext.subversion.sugarss.supabase-icon.supabase.supertokens-icon.supertokens.surge.surrealdb-icon.surrealdb.survicate-icon.survicate.suse.susy.svelte-icon.svelte-kit.svelte.svg.svgator.swagger.swc.swift.swiftype.swimm.swr.symfony.sysdig-icon.sysdig.t3.tableau-icon.tableau.taiga.tailwindcss-icon.tailwindcss.tapcart-icon.tapcart.taskade-icon.taskade.tastejs.tauri.tealium.teamcity.teamgrid.teamwork-icon.teamwork.telegram.tensorflow.terminal.terraform-icon.terraform.terser-icon.terser.testcafe.testing-library.testlodge.tex.the-algorithms.threejs.thymeleaf-icon.thymeleaf.tidal-icon.tidal.tiktok-icon.tiktok.titanium-sdk.tnw.todoist-icon.todoist.todomvc.tomcat.toml.tor-browser.tor.tortoise-git.tower.traackr.trac.traefik-mesh.traefik-proxy.travis-ci-monochrome.travis-ci.treasuredata-icon.treasuredata.treehouse-icon.treehouse.trello.trpc.truffle-icon.truffle.tsmc.tsnode.tsuru.tumblr-icon.tumblr.tunein.tuple.turbopack-icon.turbopack.turborepo-icon.turborepo.turret.twilio-icon.twilio.twitch.twitter.typeform-icon.typeform.typeorm.typescript-icon-round.typescript-icon.typescript.typesense-icon.typesense.typo3-icon.typo3.ubuntu.udacity-icon.udacity.udemy-icon.udemy.uikit.uml.umu.unbounce-icon.unbounce.undertow.unionpay.unitjs.unito-icon.unito.unity.unix.unjs.unocss.unrealengine-icon.unrealengine.upcase.upstash-icon.upstash.upwork.user-testing-icon.user-testing.uservoice-icon.uservoice.uwsgi.v8-ignition.v8-turbofan.v8.vaadin.vaddy.vagrant-icon.vagrant.vala.vault-icon.vault.vector.vercel-icon.vercel.verdaccio-icon.verdaccio.vernemq.veutify.vim.vimeo-icon.vimeo.visa.visaelectron.visual-studio-code.visual-studio.vite.vitejs.vitess.vitest.vivaldi-icon.vivaldi.vlang.vmware.void.volar.vorejs.vscode.vsphere.vue-storefront.vue.vuetifyjs.vueuse.vulkan.vultr-icon.vultr.vwo.vyper.w3c.waffle-icon.waffle.wagtail.wakatime.walkme.watchman.waypoint-icon.waypoint.wayscript-icon.wayscript.wearos.weave.web-dev-icon.web-dev.web3js.webassembly.webcomponents.webdriverio.webflow.webgpu.webhint-icon.webhint.webhooks.webix-icon.webix.webkit.weblate.webmin.webpack.webplatform.webrtc.websocket.webstorm.webtorrent.weebly.whalar-icon.whalar.whatsapp-icon.whatsapp-monochrome-icon.whatsapp.whatwg.wicket-icon.wicket.wifi.wildfly.windi-css.windows11.windows8.winglang-icon.winglang.wire.wix.wmr.woo-commerce.woocommerce-icon.woopra.wordpress-icon-alt.wordpress-icon.wordpress.workboard.workos-icon.workos.workplace-icon.workplace.wpengine.wufoo.x.xamarin.xampp.xata-icon.xata.xcart.xcode.xero.xml.xray-for-jira.xstate.xtend.xwiki-icon.xwiki.yahoo.yaml.yammer.yandex-ru.yarn.ycombinator.yeoman.yii-framework.yii.youtrack.youtube-icon.youtube.yugabyte-icon.yugabyte.yuno-host.zabbix.zapier.zend-framework.zendesk-icon.zendesk.zenhub-icon.zenhub.zeplin.zeroheight-icon.zeroheight.zig.zod.zoho.zoom-icon.zoom.zorin-os.zsh.zube.zulip-icon.zulip.zwave`.split(`.`),bootstrap:`0-circle-fill.0-circle.0-square-fill.0-square.1-circle-fill.1-circle.1-square-fill.1-square.123.2-circle-fill.2-circle.2-square-fill.2-square.3-circle-fill.3-circle.3-square-fill.3-square.4-circle-fill.4-circle.4-square-fill.4-square.5-circle-fill.5-circle.5-square-fill.5-square.6-circle-fill.6-circle.6-square-fill.6-square.7-circle-fill.7-circle.7-square-fill.7-square.8-circle-fill.8-circle.8-square-fill.8-square.9-circle-fill.9-circle.9-square-fill.9-square.activity.airplane-engines-fill.airplane-engines.airplane-fill.airplane.alarm-fill.alarm.alexa.align-bottom.align-center.align-end.align-middle.align-start.align-top.alipay.alphabet-uppercase.alphabet.alt.amazon.amd.android.android2.app-indicator.app.apple.archive-fill.archive.arrow-90deg-down.arrow-90deg-left.arrow-90deg-right.arrow-90deg-up.arrow-bar-down.arrow-bar-left.arrow-bar-right.arrow-bar-up.arrow-clockwise.arrow-counterclockwise.arrow-down-circle-fill.arrow-down-circle.arrow-down-left-circle-fill.arrow-down-left-circle.arrow-down-left-square-fill.arrow-down-left-square.arrow-down-left.arrow-down-right-circle-fill.arrow-down-right-circle.arrow-down-right-square-fill.arrow-down-right-square.arrow-down-right.arrow-down-short.arrow-down-square-fill.arrow-down-square.arrow-down-up.arrow-down.arrow-left-circle-fill.arrow-left-circle.arrow-left-right.arrow-left-short.arrow-left-square-fill.arrow-left-square.arrow-left.arrow-repeat.arrow-return-left.arrow-return-right.arrow-right-circle-fill.arrow-right-circle.arrow-right-short.arrow-right-square-fill.arrow-right-square.arrow-right.arrow-through-heart-fill.arrow-through-heart.arrow-up-circle-fill.arrow-up-circle.arrow-up-left-circle-fill.arrow-up-left-circle.arrow-up-left-square-fill.arrow-up-left-square.arrow-up-left.arrow-up-right-circle-fill.arrow-up-right-circle.arrow-up-right-square-fill.arrow-up-right-square.arrow-up-right.arrow-up-short.arrow-up-square-fill.arrow-up-square.arrow-up.arrows-angle-contract.arrows-angle-expand.arrows-collapse-vertical.arrows-collapse.arrows-expand-vertical.arrows-expand.arrows-fullscreen.arrows-move.arrows-vertical.arrows.aspect-ratio-fill.aspect-ratio.asterisk.at.award-fill.award.back.backpack-fill.backpack.backpack2-fill.backpack2.backpack3-fill.backpack3.backpack4-fill.backpack4.backspace-fill.backspace-reverse-fill.backspace-reverse.backspace.badge-3d-fill.badge-3d.badge-4k-fill.badge-4k.badge-8k-fill.badge-8k.badge-ad-fill.badge-ad.badge-ar-fill.badge-ar.badge-cc-fill.badge-cc.badge-hd-fill.badge-hd.badge-sd-fill.badge-sd.badge-tm-fill.badge-tm.badge-vo-fill.badge-vo.badge-vr-fill.badge-vr.badge-wc-fill.badge-wc.bag-check-fill.bag-check.bag-dash-fill.bag-dash.bag-fill.bag-heart-fill.bag-heart.bag-plus-fill.bag-plus.bag-x-fill.bag-x.bag.balloon-fill.balloon-heart-fill.balloon-heart.balloon.ban-fill.ban.bandaid-fill.bandaid.bank.bank2.bar-chart-fill.bar-chart-line-fill.bar-chart-line.bar-chart-steps.bar-chart.basket-fill.basket.basket2-fill.basket2.basket3-fill.basket3.battery-charging.battery-full.battery-half.battery.behance.bell-fill.bell-slash-fill.bell-slash.bell.bezier.bezier2.bicycle.bing.binoculars-fill.binoculars.blockquote-left.blockquote-right.bluetooth.body-text.book-fill.book-half.book.bookmark-check-fill.bookmark-check.bookmark-dash-fill.bookmark-dash.bookmark-fill.bookmark-heart-fill.bookmark-heart.bookmark-plus-fill.bookmark-plus.bookmark-star-fill.bookmark-star.bookmark-x-fill.bookmark-x.bookmark.bookmarks-fill.bookmarks.bookshelf.boombox-fill.boombox.bootstrap-fill.bootstrap-icons.bootstrap-reboot.bootstrap.border-all.border-bottom.border-center.border-inner.border-left.border-middle.border-outer.border-right.border-style.border-top.border-width.border.bounding-box-circles.bounding-box.box-arrow-down-left.box-arrow-down-right.box-arrow-down.box-arrow-in-down-left.box-arrow-in-down-right.box-arrow-in-down.box-arrow-in-left.box-arrow-in-right.box-arrow-in-up-left.box-arrow-in-up-right.box-arrow-in-up.box-arrow-left.box-arrow-right.box-arrow-up-left.box-arrow-up-right.box-arrow-up.box-fill.box-seam-fill.box-seam.box.box2-fill.box2-heart-fill.box2-heart.box2.boxes.braces-asterisk.braces.bricks.briefcase-fill.briefcase.brightness-alt-high-fill.brightness-alt-high.brightness-alt-low-fill.brightness-alt-low.brightness-high-fill.brightness-high.brightness-low-fill.brightness-low.brilliance.broadcast-pin.broadcast.browser-chrome.browser-edge.browser-firefox.browser-safari.brush-fill.brush.bucket-fill.bucket.bug-fill.bug.building-add.building-check.building-dash.building-down.building-exclamation.building-fill-add.building-fill-check.building-fill-dash.building-fill-down.building-fill-exclamation.building-fill-gear.building-fill-lock.building-fill-slash.building-fill-up.building-fill-x.building-fill.building-gear.building-lock.building-slash.building-up.building-x.building.buildings-fill.buildings.bullseye.bus-front-fill.bus-front.c-circle-fill.c-circle.c-square-fill.c-square.cake-fill.cake.cake2-fill.cake2.calculator-fill.calculator.calendar-check-fill.calendar-check.calendar-date-fill.calendar-date.calendar-day-fill.calendar-day.calendar-event-fill.calendar-event.calendar-fill.calendar-heart-fill.calendar-heart.calendar-minus-fill.calendar-minus.calendar-month-fill.calendar-month.calendar-plus-fill.calendar-plus.calendar-range-fill.calendar-range.calendar-week-fill.calendar-week.calendar-x-fill.calendar-x.calendar.calendar2-check-fill.calendar2-check.calendar2-date-fill.calendar2-date.calendar2-day-fill.calendar2-day.calendar2-event-fill.calendar2-event.calendar2-fill.calendar2-heart-fill.calendar2-heart.calendar2-minus-fill.calendar2-minus.calendar2-month-fill.calendar2-month.calendar2-plus-fill.calendar2-plus.calendar2-range-fill.calendar2-range.calendar2-week-fill.calendar2-week.calendar2-x-fill.calendar2-x.calendar2.calendar3-event-fill.calendar3-event.calendar3-fill.calendar3-range-fill.calendar3-range.calendar3-week-fill.calendar3-week.calendar3.calendar4-event.calendar4-range.calendar4-week.calendar4.camera-fill.camera-reels-fill.camera-reels.camera-video-fill.camera-video-off-fill.camera-video-off.camera-video.camera.camera2.capslock-fill.capslock.capsule-pill.capsule.car-front-fill.car-front.card-checklist.card-heading.card-image.card-list.card-text.caret-down-fill.caret-down-square-fill.caret-down-square.caret-down.caret-left-fill.caret-left-square-fill.caret-left-square.caret-left.caret-right-fill.caret-right-square-fill.caret-right-square.caret-right.caret-up-fill.caret-up-square-fill.caret-up-square.caret-up.cart-check-fill.cart-check.cart-dash-fill.cart-dash.cart-fill.cart-plus-fill.cart-plus.cart-x-fill.cart-x.cart.cart2.cart3.cart4.cash-coin.cash-stack.cash.cassette-fill.cassette.cast.cc-circle-fill.cc-circle.cc-square-fill.cc-square.chat-dots-fill.chat-dots.chat-fill.chat-heart-fill.chat-heart.chat-left-dots-fill.chat-left-dots.chat-left-fill.chat-left-heart-fill.chat-left-heart.chat-left-quote-fill.chat-left-quote.chat-left-text-fill.chat-left-text.chat-left.chat-quote-fill.chat-quote.chat-right-dots-fill.chat-right-dots.chat-right-fill.chat-right-heart-fill.chat-right-heart.chat-right-quote-fill.chat-right-quote.chat-right-text-fill.chat-right-text.chat-right.chat-square-dots-fill.chat-square-dots.chat-square-fill.chat-square-heart-fill.chat-square-heart.chat-square-quote-fill.chat-square-quote.chat-square-text-fill.chat-square-text.chat-square.chat-text-fill.chat-text.chat.check-all.check-circle-fill.check-circle.check-lg.check-square-fill.check-square.check.check2-all.check2-circle.check2-square.check2.chevron-bar-contract.chevron-bar-down.chevron-bar-expand.chevron-bar-left.chevron-bar-right.chevron-bar-up.chevron-compact-down.chevron-compact-left.chevron-compact-right.chevron-compact-up.chevron-contract.chevron-double-down.chevron-double-left.chevron-double-right.chevron-double-up.chevron-down.chevron-expand.chevron-left.chevron-right.chevron-up.circle-fill.circle-half.circle-square.circle.clipboard-check-fill.clipboard-check.clipboard-data-fill.clipboard-data.clipboard-fill.clipboard-heart-fill.clipboard-heart.clipboard-minus-fill.clipboard-minus.clipboard-plus-fill.clipboard-plus.clipboard-pulse.clipboard-x-fill.clipboard-x.clipboard.clipboard2-check-fill.clipboard2-check.clipboard2-data-fill.clipboard2-data.clipboard2-fill.clipboard2-heart-fill.clipboard2-heart.clipboard2-minus-fill.clipboard2-minus.clipboard2-plus-fill.clipboard2-plus.clipboard2-pulse-fill.clipboard2-pulse.clipboard2-x-fill.clipboard2-x.clipboard2.clock-fill.clock-history.clock.cloud-arrow-down-fill.cloud-arrow-down.cloud-arrow-up-fill.cloud-arrow-up.cloud-check-fill.cloud-check.cloud-download-fill.cloud-download.cloud-drizzle-fill.cloud-drizzle.cloud-fill.cloud-fog-fill.cloud-fog.cloud-fog2-fill.cloud-fog2.cloud-hail-fill.cloud-hail.cloud-haze-fill.cloud-haze.cloud-haze2-fill.cloud-haze2.cloud-lightning-fill.cloud-lightning-rain-fill.cloud-lightning-rain.cloud-lightning.cloud-minus-fill.cloud-minus.cloud-moon-fill.cloud-moon.cloud-plus-fill.cloud-plus.cloud-rain-fill.cloud-rain-heavy-fill.cloud-rain-heavy.cloud-rain.cloud-slash-fill.cloud-slash.cloud-sleet-fill.cloud-sleet.cloud-snow-fill.cloud-snow.cloud-sun-fill.cloud-sun.cloud-upload-fill.cloud-upload.cloud.clouds-fill.clouds.cloudy-fill.cloudy.code-slash.code-square.code.coin.collection-fill.collection-play-fill.collection-play.collection.columns-gap.columns.command.compass-fill.compass.cone-striped.cone.controller.cookie.copy.cpu-fill.cpu.credit-card-2-back-fill.credit-card-2-back.credit-card-2-front-fill.credit-card-2-front.credit-card-fill.credit-card.crop.crosshair.crosshair2.cup-fill.cup-hot-fill.cup-hot.cup-straw.cup.currency-bitcoin.currency-dollar.currency-euro.currency-exchange.currency-pound.currency-rupee.currency-yen.cursor-fill.cursor-text.cursor.dash-circle-dotted.dash-circle-fill.dash-circle.dash-lg.dash-square-dotted.dash-square-fill.dash-square.dash.database-add.database-check.database-dash.database-down.database-exclamation.database-fill-add.database-fill-check.database-fill-dash.database-fill-down.database-fill-exclamation.database-fill-gear.database-fill-lock.database-fill-slash.database-fill-up.database-fill-x.database-fill.database-gear.database-lock.database-slash.database-up.database-x.database.device-hdd-fill.device-hdd.device-ssd-fill.device-ssd.diagram-2-fill.diagram-2.diagram-3-fill.diagram-3.diamond-fill.diamond-half.diamond.dice-1-fill.dice-1.dice-2-fill.dice-2.dice-3-fill.dice-3.dice-4-fill.dice-4.dice-5-fill.dice-5.dice-6-fill.dice-6.disc-fill.disc.discord.display-fill.display.displayport-fill.displayport.distribute-horizontal.distribute-vertical.door-closed-fill.door-closed.door-open-fill.door-open.dot.download.dpad-fill.dpad.dribbble.dropbox.droplet-fill.droplet-half.droplet.duffle-fill.duffle.ear-fill.ear.earbuds.easel-fill.easel.easel2-fill.easel2.easel3-fill.easel3.egg-fill.egg-fried.egg.eject-fill.eject.emoji-angry-fill.emoji-angry.emoji-astonished-fill.emoji-astonished.emoji-dizzy-fill.emoji-dizzy.emoji-expressionless-fill.emoji-expressionless.emoji-frown-fill.emoji-frown.emoji-grimace-fill.emoji-grimace.emoji-grin-fill.emoji-grin.emoji-heart-eyes-fill.emoji-heart-eyes.emoji-kiss-fill.emoji-kiss.emoji-laughing-fill.emoji-laughing.emoji-neutral-fill.emoji-neutral.emoji-smile-fill.emoji-smile-upside-down-fill.emoji-smile-upside-down.emoji-smile.emoji-sunglasses-fill.emoji-sunglasses.emoji-surprise-fill.emoji-surprise.emoji-tear-fill.emoji-tear.emoji-wink-fill.emoji-wink.envelope-arrow-down-fill.envelope-arrow-down.envelope-arrow-up-fill.envelope-arrow-up.envelope-at-fill.envelope-at.envelope-check-fill.envelope-check.envelope-dash-fill.envelope-dash.envelope-exclamation-fill.envelope-exclamation.envelope-fill.envelope-heart-fill.envelope-heart.envelope-open-fill.envelope-open-heart-fill.envelope-open-heart.envelope-open.envelope-paper-fill.envelope-paper-heart-fill.envelope-paper-heart.envelope-paper.envelope-plus-fill.envelope-plus.envelope-slash-fill.envelope-slash.envelope-x-fill.envelope-x.envelope.eraser-fill.eraser.escape.ethernet.ev-front-fill.ev-front.ev-station-fill.ev-station.exclamation-circle-fill.exclamation-circle.exclamation-diamond-fill.exclamation-diamond.exclamation-lg.exclamation-octagon-fill.exclamation-octagon.exclamation-square-fill.exclamation-square.exclamation-triangle-fill.exclamation-triangle.exclamation.exclude.explicit-fill.explicit.exposure.eye-fill.eye-slash-fill.eye-slash.eye.eyedropper.eyeglasses.facebook.fan.fast-forward-btn-fill.fast-forward-btn.fast-forward-circle-fill.fast-forward-circle.fast-forward-fill.fast-forward.feather.feather2.file-arrow-down-fill.file-arrow-down.file-arrow-up-fill.file-arrow-up.file-bar-graph-fill.file-bar-graph.file-binary-fill.file-binary.file-break-fill.file-break.file-check-fill.file-check.file-code-fill.file-code.file-diff-fill.file-diff.file-earmark-arrow-down-fill.file-earmark-arrow-down.file-earmark-arrow-up-fill.file-earmark-arrow-up.file-earmark-bar-graph-fill.file-earmark-bar-graph.file-earmark-binary-fill.file-earmark-binary.file-earmark-break-fill.file-earmark-break.file-earmark-check-fill.file-earmark-check.file-earmark-code-fill.file-earmark-code.file-earmark-diff-fill.file-earmark-diff.file-earmark-easel-fill.file-earmark-easel.file-earmark-excel-fill.file-earmark-excel.file-earmark-fill.file-earmark-font-fill.file-earmark-font.file-earmark-image-fill.file-earmark-image.file-earmark-lock-fill.file-earmark-lock.file-earmark-lock2-fill.file-earmark-lock2.file-earmark-medical-fill.file-earmark-medical.file-earmark-minus-fill.file-earmark-minus.file-earmark-music-fill.file-earmark-music.file-earmark-pdf-fill.file-earmark-pdf.file-earmark-person-fill.file-earmark-person.file-earmark-play-fill.file-earmark-play.file-earmark-plus-fill.file-earmark-plus.file-earmark-post-fill.file-earmark-post.file-earmark-ppt-fill.file-earmark-ppt.file-earmark-richtext-fill.file-earmark-richtext.file-earmark-ruled-fill.file-earmark-ruled.file-earmark-slides-fill.file-earmark-slides.file-earmark-spreadsheet-fill.file-earmark-spreadsheet.file-earmark-text-fill.file-earmark-text.file-earmark-word-fill.file-earmark-word.file-earmark-x-fill.file-earmark-x.file-earmark-zip-fill.file-earmark-zip.file-earmark.file-easel-fill.file-easel.file-excel-fill.file-excel.file-fill.file-font-fill.file-font.file-image-fill.file-image.file-lock-fill.file-lock.file-lock2-fill.file-lock2.file-medical-fill.file-medical.file-minus-fill.file-minus.file-music-fill.file-music.file-pdf-fill.file-pdf.file-person-fill.file-person.file-play-fill.file-play.file-plus-fill.file-plus.file-post-fill.file-post.file-ppt-fill.file-ppt.file-richtext-fill.file-richtext.file-ruled-fill.file-ruled.file-slides-fill.file-slides.file-spreadsheet-fill.file-spreadsheet.file-text-fill.file-text.file-word-fill.file-word.file-x-fill.file-x.file-zip-fill.file-zip.file.files-alt.files.filetype-aac.filetype-ai.filetype-bmp.filetype-cs.filetype-css.filetype-csv.filetype-doc.filetype-docx.filetype-exe.filetype-gif.filetype-heic.filetype-html.filetype-java.filetype-jpg.filetype-js.filetype-json.filetype-jsx.filetype-key.filetype-m4p.filetype-md.filetype-mdx.filetype-mov.filetype-mp3.filetype-mp4.filetype-otf.filetype-pdf.filetype-php.filetype-png.filetype-ppt.filetype-pptx.filetype-psd.filetype-py.filetype-raw.filetype-rb.filetype-sass.filetype-scss.filetype-sh.filetype-sql.filetype-svg.filetype-tiff.filetype-tsx.filetype-ttf.filetype-txt.filetype-wav.filetype-woff.filetype-xls.filetype-xlsx.filetype-xml.filetype-yml.film.filter-circle-fill.filter-circle.filter-left.filter-right.filter-square-fill.filter-square.filter.fingerprint.fire.flag-fill.flag.floppy-fill.floppy.floppy2-fill.floppy2.flower1.flower2.flower3.folder-check.folder-fill.folder-minus.folder-plus.folder-symlink-fill.folder-symlink.folder-x.folder.folder2-open.folder2.fonts.forward-fill.forward.front.fuel-pump-diesel-fill.fuel-pump-diesel.fuel-pump-fill.fuel-pump.fullscreen-exit.fullscreen.funnel-fill.funnel.gear-fill.gear-wide-connected.gear-wide.gear.gem.gender-ambiguous.gender-female.gender-male.gender-neuter.gender-trans.geo-alt-fill.geo-alt.geo-fill.geo.gift-fill.gift.git.github.gitlab.globe-americas.globe-asia-australia.globe-central-south-asia.globe-europe-africa.globe.globe2.google-play.google.gpu-card.graph-down-arrow.graph-down.graph-up-arrow.graph-up.grid-1x2-fill.grid-1x2.grid-3x2-gap-fill.grid-3x2-gap.grid-3x2.grid-3x3-gap-fill.grid-3x3-gap.grid-3x3.grid-fill.grid.grip-horizontal.grip-vertical.h-circle-fill.h-circle.h-square-fill.h-square.hammer.hand-index-fill.hand-index-thumb-fill.hand-index-thumb.hand-index.hand-thumbs-down-fill.hand-thumbs-down.hand-thumbs-up-fill.hand-thumbs-up.handbag-fill.handbag.hash.hdd-fill.hdd-network-fill.hdd-network.hdd-rack-fill.hdd-rack.hdd-stack-fill.hdd-stack.hdd.hdmi-fill.hdmi.headphones.headset-vr.headset.heart-arrow.heart-fill.heart-half.heart-pulse-fill.heart-pulse.heart.heartbreak-fill.heartbreak.hearts.heptagon-fill.heptagon-half.heptagon.hexagon-fill.hexagon-half.hexagon.highlighter.highlights.hospital-fill.hospital.hourglass-bottom.hourglass-split.hourglass-top.hourglass.house-add-fill.house-add.house-check-fill.house-check.house-dash-fill.house-dash.house-door-fill.house-door.house-down-fill.house-down.house-exclamation-fill.house-exclamation.house-fill.house-gear-fill.house-gear.house-heart-fill.house-heart.house-lock-fill.house-lock.house-slash-fill.house-slash.house-up-fill.house-up.house-x-fill.house-x.house.houses-fill.houses.hr.hurricane.hypnotize.image-alt.image-fill.image.images.inbox-fill.inbox.inboxes-fill.inboxes.incognito.indent.infinity.info-circle-fill.info-circle.info-lg.info-square-fill.info-square.info.input-cursor-text.input-cursor.instagram.intersect.journal-album.journal-arrow-down.journal-arrow-up.journal-bookmark-fill.journal-bookmark.journal-check.journal-code.journal-medical.journal-minus.journal-plus.journal-richtext.journal-text.journal-x.journal.journals.joystick.justify-left.justify-right.justify.kanban-fill.kanban.key-fill.key.keyboard-fill.keyboard.ladder.lamp-fill.lamp.laptop-fill.laptop.layer-backward.layer-forward.layers-fill.layers-half.layers.layout-sidebar-inset-reverse.layout-sidebar-inset.layout-sidebar-reverse.layout-sidebar.layout-split.layout-text-sidebar-reverse.layout-text-sidebar.layout-text-window-reverse.layout-text-window.layout-three-columns.layout-wtf.life-preserver.lightbulb-fill.lightbulb-off-fill.lightbulb-off.lightbulb.lightning-charge-fill.lightning-charge.lightning-fill.lightning.line.link-45deg.link.linkedin.list-check.list-columns-reverse.list-columns.list-nested.list-ol.list-stars.list-task.list-ul.list.lock-fill.lock.luggage-fill.luggage.lungs-fill.lungs.magic.magnet-fill.magnet.mailbox-flag.mailbox.mailbox2-flag.mailbox2.map-fill.map.markdown-fill.markdown.marker-tip.mask.mastodon.medium.megaphone-fill.megaphone.memory.menu-app-fill.menu-app.menu-button-fill.menu-button-wide-fill.menu-button-wide.menu-button.menu-down.menu-up.messenger.meta.mic-fill.mic-mute-fill.mic-mute.mic.microsoft-teams.microsoft.minecart-loaded.minecart.modem-fill.modem.moisture.moon-fill.moon-stars-fill.moon-stars.moon.mortarboard-fill.mortarboard.motherboard-fill.motherboard.mouse-fill.mouse.mouse2-fill.mouse2.mouse3-fill.mouse3.music-note-beamed.music-note-list.music-note.music-player-fill.music-player.newspaper.nintendo-switch.node-minus-fill.node-minus.node-plus-fill.node-plus.noise-reduction.nut-fill.nut.nvidia.nvme-fill.nvme.octagon-fill.octagon-half.octagon.opencollective.optical-audio-fill.optical-audio.option.outlet.p-circle-fill.p-circle.p-square-fill.p-square.paint-bucket.palette-fill.palette.palette2.paperclip.paragraph.pass-fill.pass.passport-fill.passport.patch-check-fill.patch-check.patch-exclamation-fill.patch-exclamation.patch-minus-fill.patch-minus.patch-plus-fill.patch-plus.patch-question-fill.patch-question.pause-btn-fill.pause-btn.pause-circle-fill.pause-circle.pause-fill.pause.paypal.pc-display-horizontal.pc-display.pc-horizontal.pc.pci-card-network.pci-card-sound.pci-card.peace-fill.peace.pen-fill.pen.pencil-fill.pencil-square.pencil.pentagon-fill.pentagon-half.pentagon.people-fill.people.percent.person-add.person-arms-up.person-badge-fill.person-badge.person-bounding-box.person-check-fill.person-check.person-circle.person-dash-fill.person-dash.person-down.person-exclamation.person-fill-add.person-fill-check.person-fill-dash.person-fill-down.person-fill-exclamation.person-fill-gear.person-fill-lock.person-fill-slash.person-fill-up.person-fill-x.person-fill.person-gear.person-heart.person-hearts.person-lines-fill.person-lock.person-plus-fill.person-plus.person-raised-hand.person-rolodex.person-slash.person-square.person-standing-dress.person-standing.person-up.person-vcard-fill.person-vcard.person-video.person-video2.person-video3.person-walking.person-wheelchair.person-workspace.person-x-fill.person-x.person.phone-fill.phone-flip.phone-landscape-fill.phone-landscape.phone-vibrate-fill.phone-vibrate.phone.pie-chart-fill.pie-chart.piggy-bank-fill.piggy-bank.pin-angle-fill.pin-angle.pin-fill.pin-map-fill.pin-map.pin.pinterest.pip-fill.pip.play-btn-fill.play-btn.play-circle-fill.play-circle.play-fill.play.playstation.plug-fill.plug.plugin.plus-circle-dotted.plus-circle-fill.plus-circle.plus-lg.plus-slash-minus.plus-square-dotted.plus-square-fill.plus-square.plus.postage-fill.postage-heart-fill.postage-heart.postage.postcard-fill.postcard-heart-fill.postcard-heart.postcard.power.prescription.prescription2.printer-fill.printer.projector-fill.projector.puzzle-fill.puzzle.qr-code-scan.qr-code.question-circle-fill.question-circle.question-diamond-fill.question-diamond.question-lg.question-octagon-fill.question-octagon.question-square-fill.question-square.question.quora.quote.r-circle-fill.r-circle.r-square-fill.r-square.radar.radioactive.rainbow.receipt-cutoff.receipt.reception-0.reception-1.reception-2.reception-3.reception-4.record-btn-fill.record-btn.record-circle-fill.record-circle.record-fill.record.record2-fill.record2.recycle.reddit.regex.repeat-1.repeat.reply-all-fill.reply-all.reply-fill.reply.rewind-btn-fill.rewind-btn.rewind-circle-fill.rewind-circle.rewind-fill.rewind.robot.rocket-fill.rocket-takeoff-fill.rocket-takeoff.rocket.router-fill.router.rss-fill.rss.rulers.safe-fill.safe.safe2-fill.safe2.save-fill.save.save2-fill.save2.scissors.scooter.screwdriver.sd-card-fill.sd-card.search-heart-fill.search-heart.search.segmented-nav.send-arrow-down-fill.send-arrow-down.send-arrow-up-fill.send-arrow-up.send-check-fill.send-check.send-dash-fill.send-dash.send-exclamation-fill.send-exclamation.send-fill.send-plus-fill.send-plus.send-slash-fill.send-slash.send-x-fill.send-x.send.server.shadows.share-fill.share.shield-check.shield-exclamation.shield-fill-check.shield-fill-exclamation.shield-fill-minus.shield-fill-plus.shield-fill-x.shield-fill.shield-lock-fill.shield-lock.shield-minus.shield-plus.shield-shaded.shield-slash-fill.shield-slash.shield-x.shield.shift-fill.shift.shop-window.shop.shuffle.sign-dead-end-fill.sign-dead-end.sign-do-not-enter-fill.sign-do-not-enter.sign-intersection-fill.sign-intersection-side-fill.sign-intersection-side.sign-intersection-t-fill.sign-intersection-t.sign-intersection-y-fill.sign-intersection-y.sign-intersection.sign-merge-left-fill.sign-merge-left.sign-merge-right-fill.sign-merge-right.sign-no-left-turn-fill.sign-no-left-turn.sign-no-parking-fill.sign-no-parking.sign-no-right-turn-fill.sign-no-right-turn.sign-railroad-fill.sign-railroad.sign-stop-fill.sign-stop-lights-fill.sign-stop-lights.sign-stop.sign-turn-left-fill.sign-turn-left.sign-turn-right-fill.sign-turn-right.sign-turn-slight-left-fill.sign-turn-slight-left.sign-turn-slight-right-fill.sign-turn-slight-right.sign-yield-fill.sign-yield.signal.signpost-2-fill.signpost-2.signpost-fill.signpost-split-fill.signpost-split.signpost.sim-fill.sim-slash-fill.sim-slash.sim.sina-weibo.skip-backward-btn-fill.skip-backward-btn.skip-backward-circle-fill.skip-backward-circle.skip-backward-fill.skip-backward.skip-end-btn-fill.skip-end-btn.skip-end-circle-fill.skip-end-circle.skip-end-fill.skip-end.skip-forward-btn-fill.skip-forward-btn.skip-forward-circle-fill.skip-forward-circle.skip-forward-fill.skip-forward.skip-start-btn-fill.skip-start-btn.skip-start-circle-fill.skip-start-circle.skip-start-fill.skip-start.skype.slack.slash-circle-fill.slash-circle.slash-lg.slash-square-fill.slash-square.slash.sliders.sliders2-vertical.sliders2.smartwatch.snapchat.snow.snow2.snow3.sort-alpha-down-alt.sort-alpha-down.sort-alpha-up-alt.sort-alpha-up.sort-down-alt.sort-down.sort-numeric-down-alt.sort-numeric-down.sort-numeric-up-alt.sort-numeric-up.sort-up-alt.sort-up.soundwave.sourceforge.speaker-fill.speaker.speedometer.speedometer2.spellcheck.spotify.square-fill.square-half.square.stack-overflow.stack.star-fill.star-half.star.stars.steam.stickies-fill.stickies.sticky-fill.sticky.stop-btn-fill.stop-btn.stop-circle-fill.stop-circle.stop-fill.stop.stoplights-fill.stoplights.stopwatch-fill.stopwatch.strava.stripe.subscript.substack.subtract.suit-club-fill.suit-club.suit-diamond-fill.suit-diamond.suit-heart-fill.suit-heart.suit-spade-fill.suit-spade.suitcase-fill.suitcase-lg-fill.suitcase-lg.suitcase.suitcase2-fill.suitcase2.sun-fill.sun.sunglasses.sunrise-fill.sunrise.sunset-fill.sunset.superscript.symmetry-horizontal.symmetry-vertical.table.tablet-fill.tablet-landscape-fill.tablet-landscape.tablet.tag-fill.tag.tags-fill.tags.taxi-front-fill.taxi-front.telegram.telephone-fill.telephone-forward-fill.telephone-forward.telephone-inbound-fill.telephone-inbound.telephone-minus-fill.telephone-minus.telephone-outbound-fill.telephone-outbound.telephone-plus-fill.telephone-plus.telephone-x-fill.telephone-x.telephone.tencent-qq.terminal-dash.terminal-fill.terminal-plus.terminal-split.terminal-x.terminal.text-center.text-indent-left.text-indent-right.text-left.text-paragraph.text-right.text-wrap.textarea-resize.textarea-t.textarea.thermometer-half.thermometer-high.thermometer-low.thermometer-snow.thermometer-sun.thermometer.threads-fill.threads.three-dots-vertical.three-dots.thunderbolt-fill.thunderbolt.ticket-detailed-fill.ticket-detailed.ticket-fill.ticket-perforated-fill.ticket-perforated.ticket.tiktok.toggle-off.toggle-on.toggle2-off.toggle2-on.toggles.toggles2.tools.tornado.train-freight-front-fill.train-freight-front.train-front-fill.train-front.train-lightrail-front-fill.train-lightrail-front.translate.transparency.trash-fill.trash.trash2-fill.trash2.trash3-fill.trash3.tree-fill.tree.trello.triangle-fill.triangle-half.triangle.trophy-fill.trophy.tropical-storm.truck-flatbed.truck-front-fill.truck-front.truck.tsunami.tv-fill.tv.twitch.twitter-x.twitter.type-bold.type-h1.type-h2.type-h3.type-h4.type-h5.type-h6.type-italic.type-strikethrough.type-underline.type.ubuntu.ui-checks-grid.ui-checks.ui-radios-grid.ui-radios.umbrella-fill.umbrella.unindent.union.unity.universal-access-circle.universal-access.unlock-fill.unlock.upc-scan.upc.upload.usb-c-fill.usb-c.usb-drive-fill.usb-drive.usb-fill.usb-micro-fill.usb-micro.usb-mini-fill.usb-mini.usb-plug-fill.usb-plug.usb-symbol.usb.valentine.valentine2.vector-pen.view-list.view-stacked.vignette.vimeo.vinyl-fill.vinyl.virus.virus2.voicemail.volume-down-fill.volume-down.volume-mute-fill.volume-mute.volume-off-fill.volume-off.volume-up-fill.volume-up.vr.wallet-fill.wallet.wallet2.watch.water.webcam-fill.webcam.wechat.whatsapp.wifi-1.wifi-2.wifi-off.wifi.wikipedia.wind.window-dash.window-desktop.window-dock.window-fullscreen.window-plus.window-sidebar.window-split.window-stack.window-x.window.windows.wordpress.wrench-adjustable-circle-fill.wrench-adjustable-circle.wrench-adjustable.wrench.x-circle-fill.x-circle.x-diamond-fill.x-diamond.x-lg.x-octagon-fill.x-octagon.x-square-fill.x-square.x.xbox.yelp.yin-yang.youtube.zoom-in.zoom-out`.split(`.`)},Oc=Object.keys(Dc),kc=Dc,Ac=[`likec4lib {`,` icons {`,...[...Object.entries(Dc)].flatMap(([e,t])=>t.map(t=>e+`:`+t)).map(e=>` `+e),` }`,`}`].join(`
45
- `),jc=`likec4builtin`,Mc=`${jc}:///likec4/lib/icons.c4`;function isLikeC4Builtin(e){return(`uri`in e?e.uri:e).scheme===jc}function isNotLikeC4Builtin(e){return!isLikeC4Builtin(e)}const Nc=di(`/`),compareByUri=(e,t)=>Nc(_t(e.uri.path),_t(t.uri.path)),Pc=di(`/`,!0),compareByUriDeepFirst=(e,t)=>Pc(_t(e.uri.path),_t(t.uri.path));var ADisposable=class{toDispose=[];isDisposed=!1;onDispose(...e){this.toDispose.push(...e)}dispose(){this.throwIfDisposed(),this.isDisposed=!0;let e;for(;e=this.toDispose.pop();)try{e.dispose()}catch(e){logWarnError(e)}}throwIfDisposed(){this.isDisposed&&q.warn(`this has already been disposed`)}};const Fc=`AnyProperty`;function isAnyProperty(e){return J.isInstance(e,Fc)}const Ic=`ColorLiteral`;function isColorLiteral(e){return J.isInstance(e,Ic)}const Lc=`DeploymentElement`;function isDeploymentElement(e){return J.isInstance(e,Lc)}const Rc=`DeploymentNodeOrElementKind`,zc=`DeploymentViewRule`;function isDeploymentViewRule(e){return J.isInstance(e,zc)}const Bc=`DynamicViewProperty`,Vc=`DynamicViewRule`;function isDynamicViewRule(e){return J.isInstance(e,Vc)}const Hc=`ElementProperty`;function isElementProperty(e){return J.isInstance(e,Hc)}const Uc=`ExpressionV2`;function isExpressionV2(e){return J.isInstance(e,Uc)}const Wc=`ExtendElementOrRelation`;function isExtendElementOrRelation(e){return J.isInstance(e,Wc)}const Gc=`FqnExpr`;function isFqnExpr(e){return J.isInstance(e,Gc)}const Kc=`FqnExprOrWhere`;function isFqnExprOrWhere(e){return J.isInstance(e,Kc)}const qc=`FqnExprOrWith`;function isFqnExprOrWith(e){return J.isInstance(e,qc)}const Jc=`FqnReferenceable`,Yc=`LikeC4View`;function isLikeC4View(e){return J.isInstance(e,Yc)}const Xc=`MetadataProperty`;function isMetadataProperty(e){return J.isInstance(e,Xc)}const Zc=`MetadataValue`,Qc=`ModelElement`,$c=`Referenceable`,el=`RelationExpr`;function isRelationExpr(e){return J.isInstance(e,el)}const tl=`RelationExprOrWhere`;function isRelationExprOrWhere(e){return J.isInstance(e,tl)}const nl=`RelationExprOrWith`;function isRelationExprOrWith(e){return J.isInstance(e,nl)}const rl=`RelationProperty`,il=`RelationshipStyleProperty`;function isRelationshipStyleProperty(e){return J.isInstance(e,il)}const al=`SizeProperty`;function isSizeProperty(e){return J.isInstance(e,al)}const ol=`StepOrSeries`;function isStepOrSeries(e){return J.isInstance(e,ol)}const sl=`StepStatement`;function isStepStatement(e){return J.isInstance(e,sl)}const cl=`StringProperty`;function isStringProperty(e){return J.isInstance(e,cl)}const ll=`StyleProperty`;function isStyleProperty(e){return J.isInstance(e,ll)}const ul=`TryStep`;function isTryStep(e){return J.isInstance(e,ul)}const dl=`ViewProperty`;function isViewProperty(e){return J.isInstance(e,dl)}const fl=`ViewRule`;function isViewRule(e){return J.isInstance(e,fl)}const pl=`ViewRuleStyleOrGlobalRef`;function isViewRuleStyleOrGlobalRef(e){return J.isInstance(e,pl)}const ml=`WhereElement`;function isWhereElement(e){return J.isInstance(e,ml)}const hl=`WhereElementExpression`;function isWhereElementExpression(e){return J.isInstance(e,hl)}const gl=`WhereExpression`,_l=`WhereKindEqual`;function isWhereKindEqual(e){return J.isInstance(e,_l)}const vl=`WhereMetadataEqual`;function isWhereMetadataEqual(e){return J.isInstance(e,vl)}const yl=`WhereRelation`;function isWhereRelation(e){return J.isInstance(e,yl)}const bl=`WhereRelationExpression`;function isWhereRelationExpression(e){return J.isInstance(e,bl)}const xl=`WhereTagEqual`;function isWhereTagEqual(e){return J.isInstance(e,xl)}const Sl=`AbstractStep`,Cl=`AltSteps`;function isAltSteps(e){return J.isInstance(e,Cl)}const wl=`ArrowProperty`;function isArrowProperty(e){return J.isInstance(e,wl)}const Tl=`BorderProperty`;function isBorderProperty(e){return J.isInstance(e,Tl)}const El=`CatchBlock`;function isCatchBlock(e){return J.isInstance(e,El)}const Dl=`ColorProperty`;function isColorProperty(e){return J.isInstance(e,Dl)}const Ol=`CustomColor`,kl=`CustomElementProperties`;function isCustomElementProperties(e){return J.isInstance(e,kl)}const Al=`CustomRelationProperties`;function isCustomRelationProperties(e){return J.isInstance(e,Al)}const jl=`DeployedInstance`;function isDeployedInstance(e){return J.isInstance(e,jl)}const Ml=`DeployedInstanceBody`;function isDeployedInstanceBody(e){return J.isInstance(e,Ml)}const Nl=`DeploymentNode`;function isDeploymentNode$1(e){return J.isInstance(e,Nl)}t(isDeploymentNode$1,`isDeploymentNode`);const Pl=`DeploymentNodeBody`;function isDeploymentNodeBody(e){return J.isInstance(e,Pl)}const Fl=`DeploymentNodeKind`;function isDeploymentNodeKind(e){return J.isInstance(e,Fl)}const Il=`DeploymentRelation`;function isDeploymentRelation(e){return J.isInstance(e,Il)}const Ll=`DeploymentRelationBody`;function isDeploymentRelationBody(e){return J.isInstance(e,Ll)}const Rl=`DeploymentView`;function isDeploymentView$1(e){return J.isInstance(e,Rl)}t(isDeploymentView$1,`isDeploymentView`);const zl=`DeploymentViewBody`;function isDeploymentViewBody(e){return J.isInstance(e,zl)}const Bl=`DeploymentViewRulePredicate`;function isDeploymentViewRulePredicate(e){return J.isInstance(e,Bl)}const Vl=`DeploymentViewRuleStyle`;function isDeploymentViewRuleStyle(e){return J.isInstance(e,Vl)}const Hl=`DirectedRelationExpr`;function isDirectedRelationExpr(e){return J.isInstance(e,Hl)}const Ul=`DynamicView`;function isDynamicView$1(e){return J.isInstance(e,Ul)}t(isDynamicView$1,`isDynamicView`);const Wl=`DynamicViewBody`;function isDynamicViewBody(e){return J.isInstance(e,Wl)}const Gl=`DynamicViewDisplayVariantProperty`;function isDynamicViewDisplayVariantProperty(e){return J.isInstance(e,Gl)}const Kl=`DynamicViewGlobalPredicateRef`;function isDynamicViewGlobalPredicateRef(e){return J.isInstance(e,Kl)}const ql=`DynamicViewIncludePredicate`;function isDynamicViewIncludePredicate(e){return J.isInstance(e,ql)}const Jl=`DynamicViewRef`,Yl=`Element`;function isElement(e){return J.isInstance(e,Yl)}const Xl=`ElementBody`;function isElementBody(e){return J.isInstance(e,Xl)}const Zl=`ElementKind`;function isElementKind(e){return J.isInstance(e,Zl)}const Ql=`ElementKindExpression`;function isElementKindExpression(e){return J.isInstance(e,Ql)}const $l=`ElementRef`;function isElementRef(e){return J.isInstance(e,$l)}const eu=`ElementStringProperty`;function isElementStringProperty(e){return J.isInstance(e,eu)}const tu=`ElementStyleProperty`;function isElementStyleProperty(e){return J.isInstance(e,tu)}const nu=`ElementTagExpression`;function isElementTagExpression(e){return J.isInstance(e,nu)}const ru=`ElementView`;function isElementView$1(e){return J.isInstance(e,ru)}t(isElementView$1,`isElementView`);const iu=`ElementViewBody`;function isElementViewBody(e){return J.isInstance(e,iu)}const au=`ElementViewRef`,ou=`Expressions`;function isExpressions(e){return J.isInstance(e,ou)}const su=`ExtendDeployment`;function isExtendDeployment(e){return J.isInstance(e,su)}const cu=`ExtendDeploymentBody`;function isExtendDeploymentBody(e){return J.isInstance(e,cu)}const lu=`ExtendElement`;function isExtendElement(e){return J.isInstance(e,lu)}const uu=`ExtendElementBody`;function isExtendElementBody(e){return J.isInstance(e,uu)}const du=`ExtendRelation`;function isExtendRelation(e){return J.isInstance(e,du)}const fu=`ExtendRelationBody`;function isExtendRelationBody(e){return J.isInstance(e,fu)}const pu=`FinallyBlock`;function isFinallyBlock(e){return J.isInstance(e,pu)}const mu=`FqnExpressions`;function isFqnExpressions(e){return J.isInstance(e,mu)}const hu=`FqnExprWhere`;function isFqnExprWhere(e){return J.isInstance(e,hu)}const gu=`FqnExprWith`;function isFqnExprWith(e){return J.isInstance(e,gu)}const _u=`FqnRef`;function isFqnRef(e){return J.isInstance(e,_u)}const vu=`FqnRefExpr`;function isFqnRefExpr(e){return J.isInstance(e,vu)}const yu=`GlobalDynamicPredicateGroup`;function isGlobalDynamicPredicateGroup(e){return J.isInstance(e,yu)}const bu=`GlobalPredicateGroup`;function isGlobalPredicateGroup(e){return J.isInstance(e,bu)}const xu=`Globals`;function isGlobals(e){return J.isInstance(e,xu)}const Su=`GlobalStyle`;function isGlobalStyle(e){return J.isInstance(e,Su)}const Cu=`GlobalStyleGroup`;function isGlobalStyleGroup(e){return J.isInstance(e,Cu)}const wu=`GlobalStyleId`,Tu=`HexColor`;function isHexColor(e){return J.isInstance(e,Tu)}const Eu=`IconColorProperty`;function isIconColorProperty(e){return J.isInstance(e,Eu)}const Du=`IconPositionProperty`;function isIconPositionProperty(e){return J.isInstance(e,Du)}const Ou=`IconProperty`;function isIconProperty(e){return J.isInstance(e,Ou)}const ku=`IconSizeProperty`;function isIconSizeProperty(e){return J.isInstance(e,ku)}const Au=`Imported`;function isImported(e){return J.isInstance(e,Au)}const ju=`ImportsFromPoject`;function isImportsFromPoject(e){return J.isInstance(e,ju)}const Mu=`IncomingRelationExpr`;function isIncomingRelationExpr(e){return J.isInstance(e,Mu)}const Nu=`InOutRelationExpr`;function isInOutRelationExpr(e){return J.isInstance(e,Nu)}const Pu=`LibIcon`;function isLibIcon(e){return J.isInstance(e,Pu)}const Fu=`LikeC4Grammar`;function isLikeC4Grammar(e){return J.isInstance(e,Fu)}const Iu=`LikeC4Lib`;function isLikeC4Lib(e){return J.isInstance(e,Iu)}const Lu=`LineProperty`;function isLineProperty(e){return J.isInstance(e,Lu)}const Ru=`LinkProperty`;function isLinkProperty(e){return J.isInstance(e,Ru)}const zu=`MarkdownOrString`;function isMarkdownOrString(e){return J.isInstance(e,zu)}const Bu=`MetadataArray`;function isMetadataArray(e){return J.isInstance(e,Bu)}const Vu=`MetadataAttribute`;function isMetadataAttribute(e){return J.isInstance(e,Vu)}const Hu=`MetadataBody`;function isMetadataBody(e){return J.isInstance(e,Hu)}const Uu=`Model`;function isModel(e){return J.isInstance(e,Uu)}const Wu=`ModelDeployments`;function isModelDeployments(e){return J.isInstance(e,Wu)}const Gu=`ModelViews`;function isModelViews(e){return J.isInstance(e,Gu)}const Ku=`MultipleProperty`;function isMultipleProperty(e){return J.isInstance(e,Ku)}const qu=`NavigateToProperty`;function isNavigateToProperty(e){return J.isInstance(e,qu)}const Ju=`NotationProperty`;function isNotationProperty(e){return J.isInstance(e,Ju)}const Yu=`NotesProperty`;function isNotesProperty(e){return J.isInstance(e,Yu)}const Xu=`OpacityProperty`;function isOpacityProperty(e){return J.isInstance(e,Xu)}const Zu=`OutgoingRelationExpr`;function isOutgoingRelationExpr(e){return J.isInstance(e,Zu)}const Qu=`PaddingSizeProperty`;function isPaddingSizeProperty(e){return J.isInstance(e,Qu)}const $u=`Relation`;function isRelation(e){return J.isInstance(e,$u)}const ed=`RelationBody`;function isRelationBody(e){return J.isInstance(e,ed)}const td=`RelationExprWhere`;function isRelationExprWhere(e){return J.isInstance(e,td)}const nd=`RelationExprWith`;function isRelationExprWith(e){return J.isInstance(e,nd)}const rd=`RelationKindDotRef`;function isRelationKindDotRef(e){return J.isInstance(e,rd)}const id=`RelationNavigateToProperty`;function isRelationNavigateToProperty(e){return J.isInstance(e,id)}const ad=`RelationshipKind`;function isRelationshipKind(e){return J.isInstance(e,ad)}const od=`RelationStringProperty`;function isRelationStringProperty(e){return J.isInstance(e,od)}const sd=`RelationStyleProperty`;function isRelationStyleProperty(e){return J.isInstance(e,sd)}const cd=`RGBAColor`;function isRGBAColor(e){return J.isInstance(e,cd)}const ld=`ShapeProperty`;function isShapeProperty(e){return J.isInstance(e,ld)}const ud=`ShapeSizeProperty`;function isShapeSizeProperty(e){return J.isInstance(e,ud)}const dd=`SpecificationColor`;function isSpecificationColor(e){return J.isInstance(e,dd)}const fd=`SpecificationDeploymentNodeKind`;function isSpecificationDeploymentNodeKind(e){return J.isInstance(e,fd)}const pd=`SpecificationElementKind`;function isSpecificationElementKind(e){return J.isInstance(e,pd)}const md=`SpecificationElementStringProperty`;function isSpecificationElementStringProperty(e){return J.isInstance(e,md)}const hd=`SpecificationRelationshipKind`;function isSpecificationRelationshipKind(e){return J.isInstance(e,hd)}const gd=`SpecificationRelationshipStringProperty`;function isSpecificationRelationshipStringProperty(e){return J.isInstance(e,gd)}const _d=`SpecificationRule`;function isSpecificationRule(e){return J.isInstance(e,_d)}const vd=`SpecificationTag`;function isSpecificationTag(e){return J.isInstance(e,vd)}const yd=`StepsBlock`;function isStepsBlock(e){return J.isInstance(e,yd)}const bd=`StrictFqnElementRef`;function isStrictFqnElementRef(e){return J.isInstance(e,bd)}const xd=`StrictFqnRef`;function isStrictFqnRef(e){return J.isInstance(e,xd)}function isTag(e){return J.isInstance(e,`Tag`)}const Sd=`TagRef`;function isTagRef(e){return J.isInstance(e,Sd)}const Cd=`Tags`;function isTags(e){return J.isInstance(e,Cd)}const wd=`TextSizeProperty`;function isTextSizeProperty(e){return J.isInstance(e,wd)}const Td=`ViewRef`,Ed=`ViewRuleAncestors`;function isViewRuleAncestors(e){return J.isInstance(e,Ed)}const Dd=`ViewRuleAutoLayout`;function isViewRuleAutoLayout(e){return J.isInstance(e,Dd)}const Od=`ViewRuleGlobalPredicateRef`;function isViewRuleGlobalPredicateRef(e){return J.isInstance(e,Od)}const kd=`ViewRuleGlobalStyle`;function isViewRuleGlobalStyle(e){return J.isInstance(e,kd)}const Ad=`ViewRuleGroup`;function isViewRuleGroup(e){return J.isInstance(e,Ad)}const jd=`ViewRulePredicate`;function isViewRulePredicate(e){return J.isInstance(e,jd)}const Md=`ViewRuleRank`;function isViewRuleRank(e){return J.isInstance(e,Md)}const Nd=`ViewRuleStyle`;function isViewRuleStyle(e){return J.isInstance(e,Nd)}const Pd=`ViewStringProperty`;function isViewStringProperty(e){return J.isInstance(e,Pd)}const Fd=`WhereBinaryExpression`;function isWhereBinaryExpression(e){return J.isInstance(e,Fd)}const Id=`WhereElementKind`;function isWhereElementKind(e){return J.isInstance(e,Id)}const Ld=`WhereElementMetadata`;function isWhereElementMetadata(e){return J.isInstance(e,Ld)}const Rd=`WhereElementNegation`;function isWhereElementNegation(e){return J.isInstance(e,Rd)}const zd=`WhereElementTag`;function isWhereElementTag(e){return J.isInstance(e,zd)}const Bd=`WhereRelationKind`;function isWhereRelationKind(e){return J.isInstance(e,Bd)}const Vd=`WhereRelationMetadata`;function isWhereRelationMetadata(e){return J.isInstance(e,Vd)}const Hd=`WhereRelationNegation`;function isWhereRelationNegation(e){return J.isInstance(e,Hd)}const Ud=`WhereRelationParticipantKind`;function isWhereRelationParticipantKind(e){return J.isInstance(e,Ud)}const Wd=`WhereRelationParticipantMetadata`;function isWhereRelationParticipantMetadata(e){return J.isInstance(e,Wd)}const Gd=`WhereRelationParticipantTag`;function isWhereRelationParticipantTag(e){return J.isInstance(e,Gd)}const Kd=`WhereRelationTag`;function isWhereRelationTag(e){return J.isInstance(e,Kd)}const qd=`WildcardExpression`;function isWildcardExpression(e){return J.isInstance(e,qd)}const Jd=`Step`;function isStep(e){return J.isInstance(e,Jd)}const Yd=`StepSeries`;function isStepSeries(e){return J.isInstance(e,Yd)}const Xd=`SubflowStep`;function isSubflowStep(e){return J.isInstance(e,Xd)}const Zd=`TryBlock`;function isTryBlock(e){return J.isInstance(e,Zd)}var LikeC4AstReflection=class extends pt{getAllTypes(){return[Sl,Cl,Fc,wl,Tl,El,Ic,Dl,Ol,kl,Al,jl,Ml,Lc,Nl,Pl,Fl,Rc,Il,Ll,Rl,zl,zc,Bl,Vl,Hl,Ul,Wl,Gl,Kl,ql,Bc,Jl,Vc,Yl,Xl,Zl,Ql,Hc,$l,eu,tu,nu,ru,iu,au,Uc,ou,su,cu,lu,uu,Wc,`ExtendElementProperty`,du,fu,`ExtendRelationProperty`,pu,Gc,Kc,qc,hu,gu,mu,_u,vu,Jc,yu,bu,Su,Cu,wu,xu,Tu,Eu,Du,Ou,ku,Au,ju,Nu,Mu,Pu,Fu,Iu,Yc,Lu,Ru,zu,Bu,Vu,Hu,Xc,Zc,Uu,Wu,Qc,`ModelReferenceable`,Gu,Ku,qu,Ju,Yu,Xu,Zu,Qu,cd,$c,$u,ed,el,tl,nl,td,nd,rd,id,rl,od,sd,ad,il,ld,ud,al,dd,fd,pd,md,hd,gd,_d,vd,Jd,ol,Yd,sl,yd,bd,xd,cl,ll,Xd,`Tag`,Sd,Cd,wd,Zd,ul,dl,Td,fl,Ed,Dd,Od,kd,Ad,jd,Md,Nd,pl,Pd,Fd,ml,hl,Id,Ld,Rd,zd,gl,_l,vl,yl,bl,Bd,Vd,Hd,Ud,Wd,Gd,Kd,xl,qd]}computeIsSubtype(e,t){switch(e){case Cl:case ol:case ul:return this.isSubtype(sl,t);case wl:case Lu:return this.isSubtype(il,t);case Tl:case Eu:case Du:case Ku:case Xu:case ld:return this.isSubtype(ll,t);case El:case pu:return this.isSubtype(ul,t);case Dl:return this.isSubtype(`RelationshipStyleProperty`,t)||this.isSubtype(`StyleProperty`,t);case jl:case Nl:return this.isSubtype(`DeploymentElement`,t)||this.isSubtype(`Referenceable`,t);case Fl:case Zl:return this.isSubtype(Rc,t);case Rl:case Ul:case ru:return this.isSubtype(Yc,t);case Bl:case Vl:case Ed:return this.isSubtype(zc,t);case Hl:case Mu:case Nu:case Zu:return this.isSubtype(el,t);case Gl:return this.isSubtype(Bc,t);case Kl:case ql:return this.isSubtype(Vc,t);case Bc:case Hc:case qu:case rl:case il:case cl:case ll:return this.isSubtype(Fc,t);case Yl:return this.isSubtype(`FqnReferenceable`,t)||this.isSubtype(`ModelElement`,t)||this.isSubtype(`ModelReferenceable`,t)||this.isSubtype(`Referenceable`,t);case Ql:case nu:case vu:case qd:return this.isSubtype(Gc,t);case eu:return this.isSubtype(`ElementProperty`,t)||this.isSubtype(`StringProperty`,t);case tu:return this.isSubtype(Hc,t);case su:case $c:return this.isSubtype(Jc,t);case lu:return this.isSubtype(`ExtendElementOrRelation`,t)||this.isSubtype(`FqnReferenceable`,t);case Wc:case $u:return this.isSubtype(Qc,t);case du:return this.isSubtype(Wc,t);case Gc:case hu:return this.isSubtype(Kc,t);case Kc:case gu:return this.isSubtype(qc,t);case qc:case nl:return this.isSubtype(Uc,t);case Tu:case cd:return this.isSubtype(Ic,t);case Ou:return this.isSubtype(`ElementProperty`,t)||this.isSubtype(`StyleProperty`,t);case ku:case Qu:case ud:case wd:return this.isSubtype(`SizeProperty`,t)||this.isSubtype(`StyleProperty`,t);case Au:return this.isSubtype(`ModelReferenceable`,t)||this.isSubtype(`Referenceable`,t);case Ru:return this.isSubtype(`ElementProperty`,t)||this.isSubtype(`ExtendElementProperty`,t)||this.isSubtype(`ExtendRelationProperty`,t)||this.isSubtype(`RelationProperty`,t)||this.isSubtype(`ViewProperty`,t);case zu:case Bu:return this.isSubtype(Zc,t);case Vu:case Ju:case Yu:case md:case gd:return this.isSubtype(cl,t);case Hu:return this.isSubtype(Xc,t);case Xc:return this.isSubtype(`ElementProperty`,t)||this.isSubtype(`ExtendElementProperty`,t)||this.isSubtype(`ExtendRelationProperty`,t)||this.isSubtype(`RelationProperty`,t);case el:case td:return this.isSubtype(tl,t);case tl:case nd:return this.isSubtype(nl,t);case id:case sd:return this.isSubtype(rl,t);case od:return this.isSubtype(`RelationProperty`,t)||this.isSubtype(`StringProperty`,t);case Jd:case Yd:return this.isSubtype(`AbstractStep`,t)||this.isSubtype(`StepOrSeries`,t);case Xd:return this.isSubtype(`StepStatement`,t)||this.isSubtype(`StepsBlock`,t);case Zd:return this.isSubtype(`StepsBlock`,t)||this.isSubtype(`TryStep`,t);case dl:return this.isSubtype(`AnyProperty`,t)||this.isSubtype(`DynamicViewProperty`,t);case Dd:return this.isSubtype(`DeploymentViewRule`,t)||this.isSubtype(`DynamicViewRule`,t)||this.isSubtype(`ViewRule`,t);case Od:case Ad:case jd:case Md:return this.isSubtype(fl,t);case kd:case Nd:return this.isSubtype(pl,t);case pl:return this.isSubtype(`DynamicViewRule`,t)||this.isSubtype(`ViewRule`,t);case Pd:return this.isSubtype(`StringProperty`,t)||this.isSubtype(`ViewProperty`,t);case Fd:return this.isSubtype(`WhereElementExpression`,t)||this.isSubtype(`WhereRelationExpression`,t);case ml:case Rd:return this.isSubtype(hl,t);case hl:case bl:return this.isSubtype(gl,t);case Id:return this.isSubtype(`WhereElement`,t)||this.isSubtype(`WhereKindEqual`,t);case Ld:return this.isSubtype(`WhereElement`,t)||this.isSubtype(`WhereMetadataEqual`,t);case zd:return this.isSubtype(`WhereElement`,t)||this.isSubtype(`WhereTagEqual`,t);case yl:case Hd:return this.isSubtype(bl,t);case Bd:case Ud:return this.isSubtype(`WhereKindEqual`,t)||this.isSubtype(`WhereRelation`,t);case Vd:case Wd:return this.isSubtype(`WhereMetadataEqual`,t)||this.isSubtype(`WhereRelation`,t);case Gd:case Kd:return this.isSubtype(`WhereRelation`,t)||this.isSubtype(`WhereTagEqual`,t);default:return!1}}getReferenceType(e){let t=`${e.container.$type}:${e.property}`;switch(t){case`AbstractStep:kind`:case`DeploymentRelation:kind`:case`ExtendRelation:kind`:case`OutgoingRelationExpr:kind`:case`Relation:kind`:case`RelationKindDotRef:kind`:case`Step:kind`:case`StepSeries:kind`:case`WhereRelationKind:value`:return ad;case`ColorProperty:customColor`:case`IconColorProperty:customColor`:return Ol;case`DeploymentNode:kind`:return Fl;case`DynamicViewGlobalPredicateRef:predicate`:return yu;case`DynamicViewRef:view`:return Ul;case`Element:kind`:case`ElementKindExpression:kind`:return Zl;case`ElementViewRef:view`:return ru;case`FqnRef:value`:case`StrictFqnRef:value`:return $c;case`IconProperty:libicon`:return Pu;case`Imported:imported`:case`StrictFqnElementRef:el`:return Yl;case`TagRef:tag`:return`Tag`;case`ViewRef:view`:return Yc;case`ViewRuleGlobalPredicateRef:predicate`:return bu;case`ViewRuleGlobalStyle:style`:return wu;case`WhereElementKind:value`:case`WhereRelationParticipantKind:value`:return Rc;default:throw Error(`${t} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case Sl:return{name:Sl,properties:[{name:`custom`},{name:`dotKind`},{name:`kind`},{name:`target`},{name:`title`}]};case Cl:return{name:Cl,properties:[{name:`branches`,defaultValue:[]},{name:`title`}]};case wl:return{name:wl,properties:[{name:`key`},{name:`value`}]};case Tl:return{name:Tl,properties:[{name:`key`},{name:`value`}]};case El:return{name:El,properties:[{name:`catch`},{name:`title`},{name:`try`}]};case Dl:return{name:Dl,properties:[{name:`customColor`},{name:`key`},{name:`themeColor`}]};case Ol:return{name:Ol,properties:[{name:`name`}]};case kl:return{name:kl,properties:[{name:`props`,defaultValue:[]}]};case Al:return{name:Al,properties:[{name:`props`,defaultValue:[]}]};case jl:return{name:jl,properties:[{name:`body`},{name:`name`},{name:`summary`},{name:`target`},{name:`title`}]};case Ml:return{name:Ml,properties:[{name:`elements`,defaultValue:[]},{name:`props`,defaultValue:[]},{name:`tags`}]};case Nl:return{name:Nl,properties:[{name:`body`},{name:`kind`},{name:`name`},{name:`summary`},{name:`title`}]};case Pl:return{name:Pl,properties:[{name:`elements`,defaultValue:[]},{name:`props`,defaultValue:[]},{name:`tags`}]};case Fl:return{name:Fl,properties:[{name:`name`}]};case Il:return{name:Il,properties:[{name:`body`},{name:`description`},{name:`dotKind`},{name:`kind`},{name:`source`},{name:`tags`},{name:`target`},{name:`technology`},{name:`title`}]};case Ll:return{name:Ll,properties:[{name:`props`,defaultValue:[]},{name:`tags`}]};case Rl:return{name:Rl,properties:[{name:`body`},{name:`name`}]};case zl:return{name:zl,properties:[{name:`props`,defaultValue:[]},{name:`rules`,defaultValue:[]},{name:`tags`}]};case Bl:return{name:Bl,properties:[{name:`expr`},{name:`isInclude`,defaultValue:!1}]};case Vl:return{name:Vl,properties:[{name:`props`,defaultValue:[]},{name:`targets`}]};case Hl:return{name:Hl,properties:[{name:`source`},{name:`target`}]};case Ul:return{name:Ul,properties:[{name:`body`},{name:`name`}]};case Wl:return{name:Wl,properties:[{name:`props`,defaultValue:[]},{name:`rules`,defaultValue:[]},{name:`steps`,defaultValue:[]},{name:`tags`}]};case Gl:return{name:Gl,properties:[{name:`key`},{name:`value`}]};case Kl:return{name:Kl,properties:[{name:`predicate`}]};case ql:return{name:ql,properties:[{name:`exprs`}]};case Jl:return{name:Jl,properties:[{name:`view`}]};case Yl:return{name:Yl,properties:[{name:`body`},{name:`kind`},{name:`name`},{name:`props`,defaultValue:[]}]};case Xl:return{name:Xl,properties:[{name:`elements`,defaultValue:[]},{name:`props`,defaultValue:[]},{name:`tags`}]};case Zl:return{name:Zl,properties:[{name:`name`}]};case Ql:return{name:Ql,properties:[{name:`isEqual`,defaultValue:!1},{name:`kind`}]};case $l:return{name:$l,properties:[{name:`modelElement`}]};case eu:return{name:eu,properties:[{name:`key`},{name:`value`}]};case tu:return{name:tu,properties:[{name:`key`},{name:`props`,defaultValue:[]}]};case nu:return{name:nu,properties:[{name:`isEqual`,defaultValue:!1},{name:`tag`}]};case ru:return{name:ru,properties:[{name:`body`},{name:`extends`},{name:`name`},{name:`viewOf`}]};case iu:return{name:iu,properties:[{name:`props`,defaultValue:[]},{name:`rules`,defaultValue:[]},{name:`tags`}]};case au:return{name:au,properties:[{name:`view`}]};case ou:return{name:ou,properties:[{name:`prev`},{name:`value`}]};case su:return{name:su,properties:[{name:`body`},{name:`deploymentNode`}]};case cu:return{name:cu,properties:[{name:`elements`,defaultValue:[]},{name:`props`,defaultValue:[]},{name:`tags`}]};case lu:return{name:lu,properties:[{name:`body`},{name:`element`}]};case uu:return{name:uu,properties:[{name:`elements`,defaultValue:[]},{name:`props`,defaultValue:[]},{name:`tags`}]};case du:return{name:du,properties:[{name:`body`},{name:`dotKind`},{name:`kind`},{name:`source`},{name:`target`},{name:`title`}]};case fu:return{name:fu,properties:[{name:`props`,defaultValue:[]},{name:`tags`}]};case pu:return{name:pu,properties:[{name:`finally`},{name:`title`},{name:`tryCatch`}]};case mu:return{name:mu,properties:[{name:`prev`},{name:`value`}]};case hu:return{name:hu,properties:[{name:`subject`},{name:`where`}]};case gu:return{name:gu,properties:[{name:`custom`},{name:`subject`}]};case _u:return{name:_u,properties:[{name:`parent`},{name:`value`}]};case vu:return{name:vu,properties:[{name:`ref`},{name:`selector`}]};case yu:return{name:yu,properties:[{name:`name`},{name:`predicates`,defaultValue:[]}]};case bu:return{name:bu,properties:[{name:`name`},{name:`predicates`,defaultValue:[]}]};case xu:return{name:xu,properties:[{name:`name`},{name:`predicates`,defaultValue:[]},{name:`styles`,defaultValue:[]}]};case Su:return{name:Su,properties:[{name:`id`},{name:`props`,defaultValue:[]},{name:`targets`}]};case Cu:return{name:Cu,properties:[{name:`id`},{name:`styles`,defaultValue:[]}]};case wu:return{name:wu,properties:[{name:`name`}]};case Tu:return{name:Tu,properties:[{name:`hex`}]};case Eu:return{name:Eu,properties:[{name:`customColor`},{name:`key`},{name:`themeColor`}]};case Du:return{name:Du,properties:[{name:`key`},{name:`value`}]};case Ou:return{name:Ou,properties:[{name:`key`},{name:`libicon`},{name:`value`}]};case ku:return{name:ku,properties:[{name:`key`},{name:`value`}]};case Au:return{name:Au,properties:[{name:`imported`},{name:`prev`}]};case ju:return{name:ju,properties:[{name:`imports`},{name:`project`}]};case Mu:return{name:Mu,properties:[{name:`to`}]};case Nu:return{name:Nu,properties:[{name:`inout`}]};case Pu:return{name:Pu,properties:[{name:`name`}]};case Fu:return{name:Fu,properties:[{name:`deployments`,defaultValue:[]},{name:`globals`,defaultValue:[]},{name:`imports`,defaultValue:[]},{name:`likec4lib`,defaultValue:[]},{name:`models`,defaultValue:[]},{name:`specifications`,defaultValue:[]},{name:`views`,defaultValue:[]}]};case Iu:return{name:Iu,properties:[{name:`icons`,defaultValue:[]}]};case Lu:return{name:Lu,properties:[{name:`key`},{name:`value`}]};case Ru:return{name:Ru,properties:[{name:`key`},{name:`title`},{name:`value`}]};case zu:return{name:zu,properties:[{name:`markdown`},{name:`text`}]};case Bu:return{name:Bu,properties:[{name:`values`,defaultValue:[]}]};case Vu:return{name:Vu,properties:[{name:`boolValue`,defaultValue:!1},{name:`key`},{name:`value`}]};case Hu:return{name:Hu,properties:[{name:`props`,defaultValue:[]}]};case Uu:return{name:Uu,properties:[{name:`elements`,defaultValue:[]},{name:`name`}]};case Wu:return{name:Wu,properties:[{name:`elements`,defaultValue:[]},{name:`name`}]};case Gu:return{name:Gu,properties:[{name:`folder`},{name:`name`},{name:`styles`,defaultValue:[]},{name:`views`,defaultValue:[]}]};case Ku:return{name:Ku,properties:[{name:`key`},{name:`value`,defaultValue:!1}]};case qu:return{name:qu,properties:[{name:`key`},{name:`value`}]};case Ju:return{name:Ju,properties:[{name:`key`},{name:`value`}]};case Yu:return{name:Yu,properties:[{name:`key`},{name:`value`}]};case Xu:return{name:Xu,properties:[{name:`key`},{name:`value`}]};case Zu:return{name:Zu,properties:[{name:`dotKind`},{name:`from`},{name:`isBidirectional`,defaultValue:!1},{name:`kind`}]};case Qu:return{name:Qu,properties:[{name:`key`},{name:`value`}]};case $u:return{name:$u,properties:[{name:`body`},{name:`description`},{name:`dotKind`},{name:`kind`},{name:`source`},{name:`tags`},{name:`target`},{name:`technology`},{name:`title`}]};case ed:return{name:ed,properties:[{name:`props`,defaultValue:[]},{name:`tags`}]};case td:return{name:td,properties:[{name:`subject`},{name:`where`}]};case nd:return{name:nd,properties:[{name:`custom`},{name:`subject`}]};case rd:return{name:rd,properties:[{name:`kind`}]};case id:return{name:id,properties:[{name:`key`},{name:`value`}]};case ad:return{name:ad,properties:[{name:`name`}]};case od:return{name:od,properties:[{name:`key`},{name:`value`}]};case sd:return{name:sd,properties:[{name:`key`},{name:`props`,defaultValue:[]}]};case cd:return{name:cd,properties:[{name:`alpha`},{name:`blue`},{name:`green`},{name:`red`}]};case ld:return{name:ld,properties:[{name:`key`},{name:`value`}]};case ud:return{name:ud,properties:[{name:`key`},{name:`value`}]};case dd:return{name:dd,properties:[{name:`color`},{name:`name`}]};case fd:return{name:fd,properties:[{name:`kind`},{name:`props`,defaultValue:[]},{name:`tags`}]};case pd:return{name:pd,properties:[{name:`kind`},{name:`props`,defaultValue:[]},{name:`tags`}]};case md:return{name:md,properties:[{name:`key`},{name:`value`}]};case hd:return{name:hd,properties:[{name:`kind`},{name:`props`,defaultValue:[]},{name:`tags`}]};case gd:return{name:gd,properties:[{name:`key`},{name:`value`}]};case _d:return{name:_d,properties:[{name:`colors`,defaultValue:[]},{name:`deploymentNodes`,defaultValue:[]},{name:`elements`,defaultValue:[]},{name:`name`},{name:`relationships`,defaultValue:[]},{name:`tags`,defaultValue:[]}]};case vd:return{name:vd,properties:[{name:`color`},{name:`tag`}]};case yd:return{name:yd,properties:[{name:`steps`,defaultValue:[]}]};case bd:return{name:bd,properties:[{name:`el`},{name:`parent`}]};case xd:return{name:xd,properties:[{name:`parent`},{name:`value`}]};case`Tag`:return{name:`Tag`,properties:[{name:`name`}]};case Sd:return{name:Sd,properties:[{name:`tag`}]};case Cd:return{name:Cd,properties:[{name:`prev`},{name:`values`,defaultValue:[]}]};case wd:return{name:wd,properties:[{name:`key`},{name:`value`}]};case Td:return{name:Td,properties:[{name:`view`}]};case Ed:return{name:Ed,properties:[{name:`key`},{name:`value`,defaultValue:!1}]};case Dd:return{name:Dd,properties:[{name:`direction`},{name:`nodeSep`},{name:`rankSep`}]};case Od:return{name:Od,properties:[{name:`predicate`}]};case kd:return{name:kd,properties:[{name:`style`}]};case Ad:return{name:Ad,properties:[{name:`groupRules`,defaultValue:[]},{name:`props`,defaultValue:[]},{name:`title`}]};case jd:return{name:jd,properties:[{name:`exprs`},{name:`isInclude`,defaultValue:!1}]};case Md:return{name:Md,properties:[{name:`targets`},{name:`value`}]};case Nd:return{name:Nd,properties:[{name:`props`,defaultValue:[]},{name:`targets`}]};case Pd:return{name:Pd,properties:[{name:`key`},{name:`value`}]};case Fd:return{name:Fd,properties:[{name:`left`},{name:`operator`},{name:`right`}]};case Id:return{name:Id,properties:[{name:`not`,defaultValue:!1},{name:`operator`},{name:`value`}]};case Ld:return{name:Ld,properties:[{name:`key`},{name:`not`,defaultValue:!1},{name:`operator`},{name:`value`}]};case Rd:return{name:Rd,properties:[{name:`value`}]};case zd:return{name:zd,properties:[{name:`not`,defaultValue:!1},{name:`operator`},{name:`value`}]};case Bd:return{name:Bd,properties:[{name:`not`,defaultValue:!1},{name:`operator`},{name:`value`}]};case Vd:return{name:Vd,properties:[{name:`key`},{name:`not`,defaultValue:!1},{name:`operator`},{name:`value`}]};case Hd:return{name:Hd,properties:[{name:`value`}]};case Ud:return{name:Ud,properties:[{name:`not`,defaultValue:!1},{name:`operator`},{name:`participant`},{name:`value`}]};case Wd:return{name:Wd,properties:[{name:`key`},{name:`not`,defaultValue:!1},{name:`operator`},{name:`participant`},{name:`value`}]};case Gd:return{name:Gd,properties:[{name:`not`,defaultValue:!1},{name:`operator`},{name:`participant`},{name:`value`}]};case Kd:return{name:Kd,properties:[{name:`not`,defaultValue:!1},{name:`operator`},{name:`value`}]};case qd:return{name:qd,properties:[{name:`isWildcard`,defaultValue:!1}]};case Jd:return{name:Jd,properties:[{name:`custom`},{name:`dotKind`},{name:`isBackward`,defaultValue:!1},{name:`kind`},{name:`source`},{name:`target`},{name:`title`}]};case Yd:return{name:Yd,properties:[{name:`custom`},{name:`dotKind`},{name:`kind`},{name:`source`},{name:`target`},{name:`title`}]};case Xd:return{name:Xd,properties:[{name:`kind`},{name:`steps`,defaultValue:[]},{name:`title`}]};case Zd:return{name:Zd,properties:[{name:`steps`,defaultValue:[]},{name:`title`}]};default:return{name:e,properties:[]}}}};const J=new LikeC4AstReflection;let Qd;const LikeC4Grammar=()=>Qd??=dt(`{"$type":"Grammar","isDeclared":true,"name":"LikeC4","rules":[{"$type":"ParserRule","entry":true,"name":"LikeC4Grammar","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"imports","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Assignment","feature":"specifications","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"models","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Assignment","feature":"views","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@44"},"arguments":[]}},{"$type":"Assignment","feature":"globals","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@131"},"arguments":[]}},{"$type":"Assignment","feature":"deployments","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@116"},"arguments":[]}},{"$type":"Assignment","feature":"likec4lib","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}}],"cardinality":"*"},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LikeC4Lib","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"likec4lib"},{"$type":"Keyword","value":"{"},{"$type":"Keyword","value":"icons"},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"icons","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},"cardinality":"+"},{"$type":"Keyword","value":"}"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LibIcon","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@169"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementKind","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Tag","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationshipKind","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CustomColor","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@172"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentNodeKind","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationRule","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"specification"}},{"$type":"Keyword","value":"{"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"relationships","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Assignment","feature":"colors","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"deploymentNodes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}}],"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationElementKind","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"element"},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@137"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@154"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationElementStringProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"title"},{"$type":"Keyword","value":"description"},{"$type":"Keyword","value":"technology"},{"$type":"Keyword","value":"notation"},{"$type":"Keyword","value":"summary"}]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@171"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationDeploymentNodeKind","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"deploymentNode"},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@137"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@154"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationTag","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"tag"},{"$type":"Assignment","feature":"tag","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Group","elements":[{"$type":"Keyword","value":"color"},{"$type":"Assignment","feature":"color","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@166"},"arguments":[]}}],"cardinality":"?"},{"$type":"Keyword","value":"}"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationColor","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"color"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"color","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@166"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationRelationshipKind","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"relationship"},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@137"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@157"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@140"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationRelationshipStringProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"title"},{"$type":"Keyword","value":"description"},{"$type":"Keyword","value":"technology"},{"$type":"Keyword","value":"notation"}]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@171"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ImportsFromPoject","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"import"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"imports","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"Keyword","value":"}"}]},{"$type":"Assignment","feature":"imports","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Keyword","value":"from"},{"$type":"Assignment","feature":"project","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Imported","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"imported","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@21"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"Imported"},"feature":"prev","operator":"="},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"imported","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@21"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}}],"cardinality":"*"},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Tags","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"values","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@158"},"arguments":[]},"cardinality":"+"},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"Tags"},"feature":"prev","operator":"="},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"values","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@158"},"arguments":[]},"cardinality":"*"}],"cardinality":"*"},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Model","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"model"}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ModelElement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@25"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@34"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":true},"calledByName":false}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Element","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@3"},"deprecatedSyntax":false}},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@192"},"arguments":[]},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@3"},"deprecatedSyntax":false}}]}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}],"cardinality":"?"}],"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@34"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":false},"calledByName":false}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@154"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@137"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@141"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementStringProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"title"},{"$type":"Keyword","value":"description"},{"$type":"Keyword","value":"technology"},{"$type":"Keyword","value":"summary"}]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@171"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendElementOrRelation","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"extend"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"ExtendRelation"}},{"$type":"Assignment","feature":"source","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"dotKind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@159"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-["},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"deprecatedSyntax":false}},{"$type":"Keyword","value":"]->"}]},{"$type":"Keyword","value":"->"}]},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"ExtendElement"}},{"$type":"Assignment","feature":"element","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@31"},"arguments":[]}},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@26"},"arguments":[]}}]}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendElementBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@27"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@34"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":false},"calledByName":false}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendElementProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@137"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendRelationBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendRelationProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@137"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementRef","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Assignment","feature":"modelElement","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"StrictFqnElementRef","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"el","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@21"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Group","elements":[{"$type":"Action","type":{"$ref":"#/interfaces@1"},"feature":"parent","operator":"="},{"$type":"RuleCall","rule":{"$ref":"#/rules@189"},"arguments":[]},{"$type":"Assignment","feature":"el","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@21"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FqnRef","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@1"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Group","elements":[{"$type":"Action","type":{"$ref":"#/interfaces@2"},"feature":"parent","operator":"="},{"$type":"RuleCall","rule":{"$ref":"#/rules@189"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@1"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"StrictFqnRef","returnType":{"$ref":"#/interfaces@3"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@1"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Group","elements":[{"$type":"Action","type":{"$ref":"#/interfaces@3"},"feature":"parent","operator":"="},{"$type":"RuleCall","rule":{"$ref":"#/rules@189"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@1"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Relation","parameters":[{"$type":"Parameter","name":"isExplicit"}],"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","guardCondition":{"$type":"ParameterReference","parameter":{"$ref":"#/rules@34/parameters@0"}},"elements":[{"$type":"Assignment","feature":"source","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}}]},{"$type":"Group","guardCondition":{"$type":"Negation","value":{"$type":"ParameterReference","parameter":{"$ref":"#/rules@34/parameters@0"}}},"elements":[{"$type":"Assignment","feature":"source","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]},"cardinality":"?"}]}]},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"dotKind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@159"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-["},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"deprecatedSyntax":false}},{"$type":"Keyword","value":"]->"}]},{"$type":"Keyword","value":"->"}]},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"description","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}},{"$type":"Assignment","feature":"technology","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}],"cardinality":"?"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@35"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"wildcard":false},{"$type":"ParserRule","name":"RelationBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@36"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@37"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@76"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@38"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@137"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationStringProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"title"},{"$type":"Keyword","value":"technology"},{"$type":"Keyword","value":"description"}]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@171"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationStyleProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"style"}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@157"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MetadataProperty","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"metadata"},{"$type":"RuleCall","rule":{"$ref":"#/rules@40"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MetadataBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MetadataAttribute","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@42"},"arguments":[]}},{"$type":"Assignment","feature":"boolValue","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@181"},"arguments":[]}}]},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MetadataValue","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@171"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@43"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MetadataArray","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"values","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@171"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"values","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@171"},"arguments":[]}}],"cardinality":"*"},{"$type":"Keyword","value":"]"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ModelViews","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"views"}},{"$type":"Assignment","feature":"folder","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"views","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@45"},"arguments":[]}},{"$type":"Assignment","feature":"styles","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@69"},"arguments":[]}}],"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LikeC4ViewRule","returnType":{"$ref":"#/types@2"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@47"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@125"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@46"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementView","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"view"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"extends"},{"$type":"Assignment","feature":"extends","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@49"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"of"},{"$type":"Assignment","feature":"viewOf","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}}]}],"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicView","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"dynamic"},{"$type":"Keyword","value":"view"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRef","definition":{"$type":"Assignment","feature":"view","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@2"},"deprecatedSyntax":false}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementViewRef","definition":{"$type":"Assignment","feature":"view","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@46"},"deprecatedSyntax":false}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewRef","definition":{"$type":"Assignment","feature":"view","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@47"},"deprecatedSyntax":false}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementViewBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@55"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"rules","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@58"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@53"},"arguments":[]},"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"steps","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@104"},"arguments":[]}},{"$type":"Assignment","feature":"rules","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@62"},"arguments":[]}}],"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@54"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@55"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewDisplayVariantProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"variant"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@162"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@56"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@137"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewStringProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"title"},{"$type":"Keyword","value":"description"}]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@171"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewLayoutDirection","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"TopBottom"},{"$type":"Keyword","value":"LeftRight"},{"$type":"Keyword","value":"BottomTop"},{"$type":"Keyword","value":"RightLeft"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRule","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@63"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@64"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@61"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@69"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@70"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@59"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleRank","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"rank"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@60"},"arguments":[]},"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"targets","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@90"},"arguments":[]}},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RankValue","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"same"},{"$type":"Keyword","value":"min"},{"$type":"Keyword","value":"max"},{"$type":"Keyword","value":"source"},{"$type":"Keyword","value":"sink"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleGroup","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@138"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@148"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@139"},"arguments":[]}]},"cardinality":"*"},{"$type":"Assignment","feature":"groupRules","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@63"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@61"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewRule","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@65"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@66"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@69"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@70"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRulePredicate","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"isInclude","operator":"?=","terminal":{"$type":"Keyword","value":"include"}},{"$type":"Keyword","value":"exclude"}]},{"$type":"Assignment","feature":"exprs","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@77"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleGlobalPredicateRef","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"global"},{"$type":"Keyword","value":"predicate"},{"$type":"Assignment","feature":"predicate","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@132"},"deprecatedSyntax":false}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewIncludePredicate","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"include"},{"$type":"Assignment","feature":"exprs","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@77"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewGlobalPredicateRef","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"global"},{"$type":"Keyword","value":"predicate"},{"$type":"Assignment","feature":"predicate","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@133"},"deprecatedSyntax":false}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleStyle","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"style"},{"$type":"Assignment","feature":"targets","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@90"},"arguments":[]}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@153"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@71"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleGlobalStyle","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"global"},{"$type":"Keyword","value":"style"},{"$type":"Assignment","feature":"style","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@134"},"deprecatedSyntax":false}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleStyleOrGlobalRef","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@67"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@68"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleAutoLayout","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"autoLayout"},{"$type":"Assignment","feature":"direction","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@57"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"rankSep","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Assignment","feature":"nodeSep","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NotationProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"notation"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@171"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NotesProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"notes"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@171"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CustomElementProperties","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@75"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@71"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@72"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@153"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CustomRelationProperties","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@76"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@37"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@71"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@72"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@157"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@140"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NavigateToProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"navigateTo"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationNavigateToProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"navigateTo"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Expressions","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@78"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"Expressions"},"feature":"prev","operator":"="},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@78"},"arguments":[]},"cardinality":"?"}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExpressionV2","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@81"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@79"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FqnExprOrWith","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@80"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"FqnExprWith"},"feature":"subject","operator":"="},{"$type":"Keyword","value":"with"},{"$type":"Assignment","feature":"custom","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@73"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FqnExprOrWhere","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@83"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"FqnExprWhere"},"feature":"subject","operator":"="},{"$type":"Keyword","value":"where"},{"$type":"Assignment","feature":"where","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@91"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationExprOrWith","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@82"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"RelationExprWith"},"feature":"subject","operator":"="},{"$type":"Keyword","value":"with"},{"$type":"Assignment","feature":"custom","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@74"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationExprOrWhere","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@85"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"RelationExprWhere"},"feature":"subject","operator":"="},{"$type":"Keyword","value":"where"},{"$type":"Assignment","feature":"where","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@98"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FqnExpr","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WildcardExpression"}},{"$type":"Assignment","feature":"isWildcard","operator":"?=","terminal":{"$type":"Keyword","value":"*"}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"ElementTagExpression"}},{"$type":"Keyword","value":"element.tag"},{"$type":"RuleCall","rule":{"$ref":"#/rules@176"},"arguments":[]},{"$type":"Assignment","feature":"tag","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@158"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"ElementKindExpression"}},{"$type":"Keyword","value":"element.kind"},{"$type":"RuleCall","rule":{"$ref":"#/rules@176"},"arguments":[]},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@3"},"deprecatedSyntax":false}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@84"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FqnRefExpr","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"ref","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}},{"$type":"Assignment","feature":"selector","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@186"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@187"},"arguments":[]}]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationExpr","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@86"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@88"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"InOutRelationExpr","inferredType":{"$type":"InferredType","name":"RelationExpr"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@87"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"InOutRelationExpr"},"feature":"inout","operator":"="},{"$type":"Keyword","value":"->"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IncomingRelationExpr","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"->"},{"$type":"Assignment","feature":"to","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@83"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DirectedRelationExpr","inferredType":{"$type":"InferredType","name":"RelationExpr"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@89"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"DirectedRelationExpr"},"feature":"source","operator":"="},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@83"},"arguments":[]}}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"OutgoingRelationExpr","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"from","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@83"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"isBidirectional","operator":"?=","terminal":{"$type":"Keyword","value":"<->"}},{"$type":"Assignment","feature":"dotKind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@159"},"arguments":[]}},{"$type":"Keyword","value":"->"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-["},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Keyword","value":"]->"}]}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FqnExpressions","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@83"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"FqnExpressions"},"feature":"prev","operator":"="},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@83"},"arguments":[]},"cardinality":"?"}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereElementExpression","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@92"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereElementOr","inferredType":{"$type":"InferredType","name":"WhereElementExpression"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@93"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereBinaryExpression"},"feature":"left","operator":"="},{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"or"}},{"$type":"Assignment","feature":"right","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@93"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereElementAnd","inferredType":{"$type":"InferredType","name":"WhereElementExpression"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@94"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereBinaryExpression"},"feature":"left","operator":"="},{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"and"}},{"$type":"Assignment","feature":"right","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@94"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereElementPrimary","inferredType":{"$type":"InferredType","name":"WhereElementExpression"},"definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"RuleCall","rule":{"$ref":"#/rules@91"},"arguments":[]},{"$type":"Keyword","value":")"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@95"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@96"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereElementNegation","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"not"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@91"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereElement","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereElementMetadata"}},{"$type":"Keyword","value":"metadata"},{"$type":"RuleCall","rule":{"$ref":"#/rules@189"},"arguments":[]},{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@97"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereElementTag"}},{"$type":"Keyword","value":"tag"},{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@158"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereElementKind"}},{"$type":"Keyword","value":"kind"},{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@5"},"deprecatedSyntax":false}}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MetadataFilterValue","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@181"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereRelationExpression","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@99"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereRelationOr","inferredType":{"$type":"InferredType","name":"WhereRelationExpression"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@100"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereBinaryExpression"},"feature":"left","operator":"="},{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"or"}},{"$type":"Assignment","feature":"right","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@100"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereRelationAnd","inferredType":{"$type":"InferredType","name":"WhereRelationExpression"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@101"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereBinaryExpression"},"feature":"left","operator":"="},{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"and"}},{"$type":"Assignment","feature":"right","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@101"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereRelationPrimary","inferredType":{"$type":"InferredType","name":"WhereRelationExpression"},"definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"RuleCall","rule":{"$ref":"#/rules@98"},"arguments":[]},{"$type":"Keyword","value":")"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@102"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@103"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereRelationNegation","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"not"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@98"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereRelation","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereRelationParticipantMetadata"}},{"$type":"Assignment","feature":"participant","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@165"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@189"},"arguments":[]},{"$type":"Keyword","value":"metadata"},{"$type":"RuleCall","rule":{"$ref":"#/rules@189"},"arguments":[]},{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@97"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereRelationParticipantKind"}},{"$type":"Assignment","feature":"participant","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@165"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@189"},"arguments":[]},{"$type":"Keyword","value":"kind"},{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@5"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereRelationParticipantTag"}},{"$type":"Assignment","feature":"participant","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@165"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@189"},"arguments":[]},{"$type":"Keyword","value":"tag"},{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@158"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereRelationMetadata"}},{"$type":"Keyword","value":"metadata"},{"$type":"RuleCall","rule":{"$ref":"#/rules@189"},"arguments":[]},{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@97"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereRelationKind"}},{"$type":"Keyword","value":"kind"},{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereRelationTag"}},{"$type":"Keyword","value":"tag"},{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@158"},"arguments":[]}}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"StepStatement","returnType":{"$ref":"#/types@10"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@106"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@112"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@108"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@114"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"StepsBlockFragment","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"steps","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@104"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SubflowStep","returnType":{"$ref":"#/interfaces@5"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"opt"},{"$type":"Keyword","value":"par"},{"$type":"Keyword","value":"parallel"},{"$type":"Keyword","value":"loop"},{"$type":"Keyword","value":"when"},{"$type":"Keyword","value":"if"},{"$type":"Keyword","value":"else"},{"$type":"Keyword","value":"break"}]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@105"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"StepsBlock","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@105"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false,"$comment":"/**\\n * Represents a block of step statements, i.e. { ... }\\n */"},{"$type":"ParserRule","name":"TryStep","returnType":{"$ref":"#/types@11"},"definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@109"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FinallyBlock","returnType":{"$ref":"#/interfaces@8"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@110"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","type":{"$ref":"#/interfaces@8"},"feature":"tryCatch","operator":"="},{"$type":"Keyword","value":"finally"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"finally","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@107"},"arguments":[]}}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CatchBlock","returnType":{"$ref":"#/interfaces@7"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@111"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","type":{"$ref":"#/interfaces@7"},"feature":"try","operator":"="},{"$type":"Keyword","value":"catch"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"catch","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@107"},"arguments":[]}}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"TryBlock","returnType":{"$ref":"#/interfaces@6"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"try"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@105"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"AltSteps","returnType":{"$ref":"#/interfaces@9"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"alt"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"branches","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@106"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"StepTarget","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"custom","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@74"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"StepSeries","returnType":{"$ref":"#/interfaces@12"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@115"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","type":{"$ref":"#/interfaces@12"},"feature":"source","operator":"="},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"dotKind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@159"},"arguments":[]}},{"$type":"Keyword","value":"->"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-["},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"deprecatedSyntax":false}},{"$type":"Keyword","value":"]->"}]}]},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"custom","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@74"},"arguments":[]},"cardinality":"?"}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Step","returnType":{"$ref":"#/interfaces@11"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"source","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"isBackward","operator":"?=","terminal":{"$type":"Keyword","value":"<-"}},{"$type":"Assignment","feature":"dotKind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@159"},"arguments":[]}},{"$type":"Keyword","value":"->"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-["},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"deprecatedSyntax":false}},{"$type":"Keyword","value":"]->"}]}]},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"custom","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@74"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ModelDeployments","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"deployment"}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@117"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@123"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":true},"calledByName":false}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@121"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentNode","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@7"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@192"},"arguments":[]},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@7"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}}]}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}},{"$type":"Assignment","feature":"summary","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@118"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentNodeBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@119"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@123"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":false},"calledByName":false}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@117"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeployedInstance","definition":{"$type":"Group","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@192"},"arguments":[]}],"cardinality":"?"},{"$type":"Keyword","value":"instanceOf"},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}},{"$type":"Assignment","feature":"summary","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@120"},"arguments":[]},"cardinality":"?"},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeployedInstanceBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@123"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":false},"calledByName":false}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendDeployment","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"extend"},{"$type":"Assignment","feature":"deploymentNode","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@33"},"arguments":[]}},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@122"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendDeploymentBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@27"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@119"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@123"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":true},"calledByName":false}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@117"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentRelation","parameters":[{"$type":"Parameter","name":"isExplicit"}],"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","guardCondition":{"$type":"ParameterReference","parameter":{"$ref":"#/rules@123/parameters@0"}},"elements":[{"$type":"Assignment","feature":"source","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}}]},{"$type":"Group","guardCondition":{"$type":"Negation","value":{"$type":"ParameterReference","parameter":{"$ref":"#/rules@123/parameters@0"}}},"elements":[{"$type":"Assignment","feature":"source","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]},"cardinality":"?"}]}]},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"dotKind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@159"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-["},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"deprecatedSyntax":false}},{"$type":"Keyword","value":"]->"}]},{"$type":"Keyword","value":"->"}]},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"description","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}},{"$type":"Assignment","feature":"technology","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}],"cardinality":"?"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@124"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentRelationBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@36"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentView","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"deployment"},{"$type":"Keyword","value":"view"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@126"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentViewBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@55"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"rules","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@127"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentViewRule","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@130"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@129"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@70"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@128"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleAncestors","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"includeAncestors"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@181"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentViewRuleStyle","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"style"},{"$type":"Assignment","feature":"targets","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@90"},"arguments":[]}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@153"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@71"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentViewRulePredicate","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"isInclude","operator":"?=","terminal":{"$type":"Keyword","value":"include"}},{"$type":"Keyword","value":"exclude"}]},{"$type":"Assignment","feature":"expr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@77"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Globals","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"global"}},{"$type":"Keyword","value":"{"},{"$type":"Group","elements":[{"$type":"Assignment","feature":"predicates","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@132"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@133"},"arguments":[]}]},"cardinality":"*"},{"$type":"Assignment","feature":"styles","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@135"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@136"},"arguments":[]}]},"cardinality":"*"}],"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"GlobalPredicateGroup","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"predicateGroup"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@198"},"arguments":[]}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"predicates","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@63"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"GlobalDynamicPredicateGroup","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"dynamicPredicateGroup"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@198"},"arguments":[]}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"predicates","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@65"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"GlobalStyleId","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@198"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"GlobalStyle","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"style"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@134"},"arguments":[]}},{"$type":"Assignment","feature":"targets","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@90"},"arguments":[]}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@153"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@71"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"GlobalStyleGroup","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"styleGroup"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@134"},"arguments":[]}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"styles","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@67"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LinkProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"link"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@170"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]},"cardinality":"?"},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ColorProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"color"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"themeColor","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@163"},"arguments":[]}},{"$type":"Assignment","feature":"customColor","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@6"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@172"},"arguments":[]},"deprecatedSyntax":false}}]},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"OpacityProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"opacity"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@193"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MultipleProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"multiple"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@181"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IconProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"icon"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"libicon","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@2"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@169"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"none"},{"$type":"RuleCall","rule":{"$ref":"#/rules@170"},"arguments":[]}]}}]},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IconColorProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"iconColor"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"themeColor","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@163"},"arguments":[]}},{"$type":"Assignment","feature":"customColor","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@6"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@172"},"arguments":[]},"deprecatedSyntax":false}}]},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IconSizeProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"iconSize"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@149"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IconPositionValue","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"left"},{"$type":"Keyword","value":"right"},{"$type":"Keyword","value":"top"},{"$type":"Keyword","value":"bottom"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IconPositionProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"iconPosition"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@144"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ShapeProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"shape"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@164"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"BorderStyleValue","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@160"},"arguments":[]},{"$type":"Keyword","value":"none"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"BorderProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"border"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@147"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SizeValue","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"xs"},{"$type":"Keyword","value":"sm"},{"$type":"Keyword","value":"md"},{"$type":"Keyword","value":"lg"},{"$type":"Keyword","value":"xl"},{"$type":"Keyword","value":"xsmall"},{"$type":"Keyword","value":"small"},{"$type":"Keyword","value":"medium"},{"$type":"Keyword","value":"large"},{"$type":"Keyword","value":"xlarge"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ShapeSizeProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"size"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@149"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PaddingSizeProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"padding"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@149"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"TextSizeProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"textSize"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@149"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"StyleProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@138"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@146"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@148"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@139"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@141"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@142"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@140"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@150"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@151"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@152"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@143"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@145"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementStyleProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"style"}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@153"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LineProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"line"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@160"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ArrowProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"head"},{"$type":"Keyword","value":"tail"}]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@161"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationshipStyleProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@138"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@155"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@156"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"TagRef","definition":{"$type":"Assignment","feature":"tag","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@4"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@174"},"arguments":[]},"deprecatedSyntax":false}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationKindDotRef","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@190"},"arguments":[]},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},"deprecatedSyntax":false}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LineOptions","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"solid"},{"$type":"Keyword","value":"dashed"},{"$type":"Keyword","value":"dotted"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ArrowType","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"none"},{"$type":"Keyword","value":"normal"},{"$type":"Keyword","value":"onormal"},{"$type":"Keyword","value":"dot"},{"$type":"Keyword","value":"odot"},{"$type":"Keyword","value":"diamond"},{"$type":"Keyword","value":"odiamond"},{"$type":"Keyword","value":"crow"},{"$type":"Keyword","value":"open"},{"$type":"Keyword","value":"vee"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewDisplayVariantValue","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"diagram"},{"$type":"Keyword","value":"sequence"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ThemeColor","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"primary"},{"$type":"Keyword","value":"secondary"},{"$type":"Keyword","value":"muted"},{"$type":"Keyword","value":"slate"},{"$type":"Keyword","value":"blue"},{"$type":"Keyword","value":"indigo"},{"$type":"Keyword","value":"sky"},{"$type":"Keyword","value":"red"},{"$type":"Keyword","value":"gray"},{"$type":"Keyword","value":"green"},{"$type":"Keyword","value":"amber"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementShape","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"rectangle"},{"$type":"Keyword","value":"component"},{"$type":"Keyword","value":"person"},{"$type":"Keyword","value":"browser"},{"$type":"Keyword","value":"mobile"},{"$type":"Keyword","value":"cylinder"},{"$type":"Keyword","value":"storage"},{"$type":"Keyword","value":"queue"},{"$type":"Keyword","value":"bucket"},{"$type":"Keyword","value":"document"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Participant","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"source"},{"$type":"Keyword","value":"target"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ColorLiteral","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@167"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@168"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RGBAColor","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"rgba"},{"$type":"Keyword","value":"rgb"}]},{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"red","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Keyword","value":",","cardinality":"?"},{"$type":"Assignment","feature":"green","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Keyword","value":",","cardinality":"?"},{"$type":"Assignment","feature":"blue","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Keyword","value":",","cardinality":"?"},{"$type":"Assignment","feature":"alpha","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@196"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@193"},"arguments":[]}]},"cardinality":"?"},{"$type":"Keyword","value":")"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"HexColor","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@188"},"arguments":[]},{"$type":"Assignment","feature":"hex","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@199"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@198"},"arguments":[]}]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IconId","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@182"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Uri","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@183"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@184"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@185"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MarkdownOrString","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"markdown","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@194"},"arguments":[]}},{"$type":"Assignment","feature":"text","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CustomColorId","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@198"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@164"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@161"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@160"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@165"},"arguments":[]},{"$type":"Keyword","value":"element"},{"$type":"Keyword","value":"model"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Id","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@198"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@164"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@163"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@161"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@160"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@165"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@149"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@162"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@144"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@60"},"arguments":[]},{"$type":"Keyword","value":"element"},{"$type":"Keyword","value":"model"},{"$type":"Keyword","value":"group"},{"$type":"Keyword","value":"node"},{"$type":"Keyword","value":"deployment"},{"$type":"Keyword","value":"instance"},{"$type":"Keyword","value":"relationship"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"HashId","dataType":"string","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@188"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EqOperator","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@192"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@191"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"is"}},{"$type":"Assignment","feature":"not","operator":"?=","terminal":{"$type":"Keyword","value":"not"},"cardinality":"?"}]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"IsEqual","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"isEqual","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@192"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@191"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","hidden":true,"name":"BLOCK_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\//"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\/\\\\/[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/[\\\\r\\\\n]+/"},"fragment":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"RegexToken","regex":"/\\\\b(true|false)\\\\b/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LIB_ICON","definition":{"$type":"RegexToken","regex":"/(aws|azure|bootstrap|gcp|tech):[-\\\\w]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"URI_WITH_SCHEMA","definition":{"$type":"RegexToken","regex":"/\\\\w+:\\\\/{2}\\\\S+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"URI_RELATIVE","definition":{"$type":"RegexToken","regex":"/\\\\.{0,2}\\\\/[^\\\\/]\\\\S+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"URI_ALIAS","definition":{"$type":"RegexToken","regex":"/@[a-zA-Z0-9_-]*\\\\/[^\\\\s]+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"DotUnderscore","definition":{"$type":"RegexToken","regex":"/\\\\b\\\\._(?![_a-zA-Z])/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"DotWildcard","definition":{"$type":"RegexToken","regex":"/\\\\b\\\\.\\\\*{1,2}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Hash","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"#"}},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"StickyDot","definition":{"$type":"RegexToken","regex":"/\\\\b\\\\./"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Dot","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"."}},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NotEqual","definition":{"$type":"RegexToken","regex":"/\\\\!\\\\={1,2}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Eq","definition":{"$type":"RegexToken","regex":"/\\\\={1,2}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Percent","definition":{"$type":"RegexToken","regex":"/\\\\b\\\\d+%/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"MarkdownString","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalGroup","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"'''"}},{"$type":"UntilToken","terminal":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"'''"}}}]},{"$type":"TerminalGroup","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"\\"\\"\\""}},{"$type":"UntilToken","terminal":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"\\"\\"\\""}}}]}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"String","definition":{"$type":"RegexToken","regex":"/\\"(?:[^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'(?:[^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Float","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/\\\\b\\\\d+\\\\.\\\\d+\\\\b/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Number","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/\\\\b\\\\d+\\\\b/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"IdTerminal","definition":{"$type":"RegexToken","regex":"/([a-zA-Z]|_+[a-zA-Z0-9])[-\\\\w]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Hex","definition":{"$type":"RegexToken","regex":"/[a-fA-F0-9]{3,}(?![-_g-zG-Z])/"},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"ElementRef","attributes":[{"$type":"TypeAttribute","name":"modelElement","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"StrictFqnElementRef","attributes":[{"$type":"TypeAttribute","name":"parent","isOptional":true,"type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@1"}}},{"$type":"TypeAttribute","name":"el","type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@21"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"FqnRef","attributes":[{"$type":"TypeAttribute","name":"parent","isOptional":true,"type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}}},{"$type":"TypeAttribute","name":"value","type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/types@1"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"StrictFqnRef","attributes":[{"$type":"TypeAttribute","name":"parent","isOptional":true,"type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@3"}}},{"$type":"TypeAttribute","name":"value","type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/types@1"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"StepsBlock","attributes":[{"$type":"TypeAttribute","name":"steps","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/types@10"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"SubflowStep","superTypes":[{"$ref":"#/interfaces@4"}],"attributes":[{"$type":"TypeAttribute","name":"kind","type":{"$type":"UnionType","types":[{"$type":"SimpleType","stringType":"opt"},{"$type":"SimpleType","stringType":"par"},{"$type":"SimpleType","stringType":"parallel"},{"$type":"SimpleType","stringType":"loop"},{"$type":"SimpleType","stringType":"when"},{"$type":"SimpleType","stringType":"if"},{"$type":"SimpleType","stringType":"else"},{"$type":"SimpleType","stringType":"break"}]},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}]},{"$type":"Interface","name":"TryBlock","superTypes":[{"$ref":"#/interfaces@4"}],"attributes":[{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}]},{"$type":"Interface","name":"CatchBlock","attributes":[{"$type":"TypeAttribute","name":"try","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@6"}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"catch","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@4"}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"FinallyBlock","attributes":[{"$type":"TypeAttribute","name":"tryCatch","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@6"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@7"}}]},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"finally","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@4"}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"AltSteps","attributes":[{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"branches","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@5"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"AbstractStep","attributes":[{"$type":"TypeAttribute","name":"kind","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@5"}}}},{"$type":"TypeAttribute","name":"dotKind","isOptional":true,"type":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@159"}}},{"$type":"TypeAttribute","name":"target","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@0"}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"custom","isOptional":true,"type":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@74"}}}],"superTypes":[]},{"$type":"Interface","name":"Step","superTypes":[{"$ref":"#/interfaces@10"}],"attributes":[{"$type":"TypeAttribute","name":"source","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@0"}},"isOptional":false},{"$type":"TypeAttribute","name":"isBackward","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"boolean"}}],"$comment":"/**\\n * A single step in a dynamic view flow\\n * source -> target\\n */"},{"$type":"Interface","name":"StepSeries","superTypes":[{"$ref":"#/interfaces@10"}],"attributes":[{"$type":"TypeAttribute","name":"source","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@11"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@12"}}]},"isOptional":false}],"$comment":"/**\\n * A series of steps in a dynamic view flow\\n * source -> target1 -> target2 -> ...\\n */"}],"types":[{"$type":"Type","name":"ModelReferenceable","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@21"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@17"}}]}},{"$type":"Type","name":"Referenceable","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@117"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@119"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@21"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@17"}}]}},{"$type":"Type","name":"LikeC4View","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@46"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@47"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@125"}}]}},{"$type":"Type","name":"StringProperty","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@24"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@56"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@37"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@41"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@10"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@15"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@71"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@72"}}]}},{"$type":"Type","name":"AnyProperty","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/types@3"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@55"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@53"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@23"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@36"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@157"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@75"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@153"}}]}},{"$type":"Type","name":"DeploymentNodeOrElementKind","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@3"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@7"}}]}},{"$type":"Type","name":"WhereTagEqual","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@96/definition/elements@1/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@103/definition/elements@5/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@103/definition/elements@2/elements@0/inferredType"}}]}},{"$type":"Type","name":"WhereKindEqual","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@96/definition/elements@2/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@103/definition/elements@4/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@103/definition/elements@1/elements@0/inferredType"}}]}},{"$type":"Type","name":"WhereMetadataEqual","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@96/definition/elements@0/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@103/definition/elements@3/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@103/definition/elements@0/elements@0/inferredType"}}]}},{"$type":"Type","name":"WhereExpression","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@91"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@98"}}]}},{"$type":"Type","name":"StepStatement","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/types@12"}},{"$type":"SimpleType","typeRef":{"$ref":"#/types@11"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@9"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@5"}}]}},{"$type":"Type","name":"TryStep","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@6"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@7"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@8"}}]}},{"$type":"Type","name":"StepOrSeries","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@11"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@12"}}]}},{"$type":"Type","name":"DeploymentElement","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@117"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@119"}}]}},{"$type":"Type","name":"FqnReferenceable","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/types@1"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@21"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@25/definition/elements@1/elements@1/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@121"}}]}},{"$type":"Type","name":"SizeProperty","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@150"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@151"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@152"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@143"}}]}}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"usedGrammars":[]}`),$d={languageId:`likec4`,fileExtensions:[`.c4`,`.likec4`,`.like-c4`],caseInsensitive:!1,mode:`production`},ef={skipValidations:!0,recoveryEnabled:!0,nodeLocationTracking:`full`},tf={AstReflection:()=>new LikeC4AstReflection},nf={Grammar:()=>LikeC4Grammar(),LanguageMetaData:()=>$d,parser:{ParserConfig:()=>ef}},rf=Symbol.for(`idattr`),af={writeId(e,t){return e[rf]=t,e},readId(e){return e[rf]}},of={writeId(e,t){return I(t)?e[rf]=void 0:e[rf]=t,e},readId(e){return e[rf]}};function isLikeC4LangiumDocument(e){return e?.textDocument.languageId===$d.languageId}function isLikeC4UserDocument(e){return isLikeC4LangiumDocument(e)&&isNotLikeC4Builtin(e)}function parseMarkdownAsString(e){return e?.markdown||e?.text}function parseAstPercent(e){let t=parseFloat(e);return isNaN(t)?100:Nn(t,{min:0,max:100})}function parseAstOpacityProperty({value:e}){return parseAstPercent(e)}function parseAstSizeValue({value:e}){switch(e){case`xs`:case`sm`:case`md`:case`lg`:case`xl`:return e;case`xsmall`:return`xs`;case`small`:return`sm`;case`medium`:return`md`;case`large`:return`lg`;case`xlarge`:return`xl`;default:bi(e)}}function parseAstIconPositionValue({value:e}){switch(e){case`left`:case`right`:case`top`:case`bottom`:return e;default:bi(e)}}function toRelationshipStyle(e,t){let r={};if(!e||e.length===0)return r;for(let i of e)if(t(i))switch(!0){case isColorProperty(i):{let e=toColor(i);R(e)&&(r.color=e);break}case isLineProperty(i):r.line=i.value;break;case isArrowProperty(i):switch(i.key){case`head`:r.head=i.value;break;case`tail`:r.tail=i.value;break;default:bi(i)}break;default:bi(i)}return r}function toColor(e){return e?.themeColor??e?.customColor?.$refText}function toAutoLayout(e){let t=e.rankSep,r=e.nodeSep,i;switch(e.direction){case`TopBottom`:i=`TB`;break;case`BottomTop`:i=`BT`;break;case`LeftRight`:i=`LR`;break;case`RightLeft`:i=`RL`;break;default:bi(e.direction)}return{direction:i,...r&&{nodeSep:r},...t&&{rankSep:t}}}function toAstViewLayoutDirection(e){switch(e){case`TB`:return`TopBottom`;case`BT`:return`BottomTop`;case`LR`:return`LeftRight`;case`RL`:return`RightLeft`;default:bi(e)}}function getViewRulePredicateContainer(e){return Ge(e,e=>isViewRulePredicate(e)||isDeploymentViewRulePredicate(e)||isDynamicViewIncludePredicate(e))}const _isModel=e=>isModel(e)||isElementBody(e)||isExtendElementBody(e)||isElementViewBody(e)||isDynamicViewBody(e)||isElementRef(e),sf=t(e=>isModelDeployments(e)||isDeploymentViewBody(e)||isDeploymentNodeBody(e)||isExtendDeploymentBody(e)||isDeployedInstanceBody(e),`_isDeployment`);function isFqnRefInsideGlobals(e){for(;;){if(sf(e)||_isModel(e))return!1;if(isGlobals(e)||isModelViews(e))return!0;if(e.$container)e=e.$container;else return!1}}function isFqnRefInsideModel(e){for(;;){if(sf(e))return!1;if(_isModel(e))return!0;if(e.$container)e=e.$container;else return!1}}function isFqnRefInsideDeployment(e){for(;;){if(_isModel(e))return!1;if(sf(e))return!0;if(e.$container)e=e.$container;else return!1}}function elementRef(e){try{let t=isStrictFqnElementRef(e)?e.el.ref:e.modelElement.value.ref;return t?.$type===`Imported`&&(t=t.imported.ref),t?.$type===`Element`?t:void 0}catch{return}}function readStrictFqn(e){let t=[e.$type===`StrictFqnRef`?e.value.$refText:e.el.$refText],r=e.parent;for(;r;)t.push(r.$type===`StrictFqnRef`?r.value.$refText:r.el.$refText),r=r.parent;return t.length===1?t[0]:t.reverse().join(`.`)}function referenceableParent(e){for(;e.parent;)e=e.parent;return e.value.ref??null}function instanceRef(e){let t;for(;t=e.value?.ref;){if(isDeploymentNode$1(t))return null;if(isDeployedInstance(t))return t;if(I(e.parent))return null;e=e.parent}return null}function importsRef(e){let t=referenceableParent(e);return t?.$type===`Imported`?t:null}function isReferenceToDeploymentModel(e){let t;for(;t=e.value?.ref;){if(isDeploymentElement(t))return!0;if(I(e.parent))return!1;e=e.parent}return!1}var IndexManager=class extends ve{services;constructor(e){super(e),this.services=e}async updateContent(e,t){e.likec4ProjectId=this.services.workspace.ProjectsManager.ownerProjectId(e),await super.updateContent(e,t)}projectElements(e,t,r){let i=this.services.workspace.ProjectsManager;return lt(this.symbolIndex.keys()).filter(t=>r&&!r.has(t)?!1:i.isIncluded(e,t)).flatMap(e=>this.getFileDescriptions(e,t))}},LangiumDocuments=class extends mt{services;constructor(e){super(e),this.services=e}get projectsManager(){return this.services.workspace.ProjectsManager}addDocument(e){let t=e.uri.toString();if(this.documentMap.has(t))throw Error(`A document with the URI '${t}' is already present.`);isLikeC4UserDocument(e)&&(e.likec4ProjectId=this.projectsManager.ownerProjectId(e));let r=[...this.documentMap.values()],i=r.at(-1);if(!i||compareByUri(i,e)<=0){this.documentMap.set(t,e);return}r.push(e),r.sort(compareByUri),this.documentMap.clear();for(let e of r)this.documentMap.set(e.uri.toString(),e)}getDocument(e){let t=super.getDocument(e);return isLikeC4UserDocument(t)&&(t.likec4ProjectId=this.projectsManager.ownerProjectId(t)),t}get userDocuments(){return lt(this.documentMap.values()).filter(e=>isLikeC4UserDocument(e)&&!this.projectsManager.isExcluded(e))}get all(){return lt(this.documentMap.values()).map(e=>(isLikeC4UserDocument(e)&&(e.likec4ProjectId=this.projectsManager.ownerProjectId(e)),e))}projectDocuments(e){let t=this.services.workspace.ProjectsManager;return lt(this.documentMap.values()).filter(r=>isLikeC4UserDocument(r)&&t.isIncluded(e,r)?(r.likec4ProjectId=e,!0):!1)}groupedByProject(){let e=this.services.workspace.ProjectsManager;return L(this.userDocuments.toArray(),P(t=>(t.likec4ProjectId=e.ownerProjectId(t),t)),$t(In(`likec4ProjectId`)))}resetProjectIds(){let e=[];for(let t of this.documentMap.values())delete t.likec4ProjectId,isLikeC4UserDocument(t)&&!this.projectsManager.isExcluded(t)&&e.push(t.uri);return e}},cf=e(Zn(),1);const Y=q.getChild(`projects`);function isLangiumDocument(e){return typeof e==`object`&&`uri`in e&&`textDocument`in e}function normalizeUri(e){return isLangiumDocument(e)?e.uri.toString():typeof e==`string`?St(e,{acceptRelative:!1,strict:!0})?e:b.file(e).toString():e.toString()}const lf=/^\/?([A-Za-z]):(?=\/|$)/;function normalizeWindowsDrivePath(e){return e.replace(lf,(e,t)=>`/${t.toLowerCase()}:`)}function uriPathForMatcher(e){return b.isUri(e)?normalizeWindowsDrivePath(e.path):normalizeWindowsDrivePath(b.parse(e).path)}const uf=di(`/`,!0),compareUri=(e,t)=>uf(_t(e.path),_t(t.path));function isParentFolderFor(e){return t=>e.startsWith(gi(t)?t:t.folder)}function _overlaps(e,t){let r=gi(e)?e:e.folder,i=gi(t)?t:t.folder;return r===i||r.startsWith(i)||i.startsWith(r)}function overlaps(...e){return An(_overlaps,e)}function _includes(e,t){return t.startsWith(e.folder)||e.includePaths?.some(isParentFolderFor(t))?!_excludes(e,t):!1}function _isInScope(e,t){return t.startsWith(e.folder)||(e.includePaths?.some(isParentFolderFor(t))??!1)}function _excludes(e,t){return e.exclude?.(uriPathForMatcher(t))??!1}function includes(...e){return An(_includes,e)}function isInScope(...e){return An(_isInScope,e)}function excludes(...e){return An(_excludes,e)}function ProjectFolder(e){return e=normalizeUri(e),yt(e)}const compareProjectByFolder=(e,t)=>compareUri(e.folderUri,t.folderUri);function ensureProjectsOrder(e){return e.length<=1?e:kn(e,compareProjectByFolder)}const df={id:`default`,config:{name:`default`,exclude:[`**/node_modules/**`]},exclude:(0,cf.default)(`**/node_modules/**`,{dot:!0}),includeConfig:{paths:[],maxDepth:3,fileThreshold:30}};function isExcludedByDefault(e){return df.exclude(uriPathForMatcher(e))}function parseRegisterOptions(e){if(`configUri`in e){W(!an(e.configUri),`configUri is emptyish`);let t=b.isUri(e.configUri)?e.configUri:b.parse(normalizeUri(e.configUri)),r=ProjectFolder(S.dirname(t));return{configUri:t,folder:r,folderUri:b.parse(r)}}W(!an(e.folderUri),`folderUri is emptyish`);let t=ProjectFolder(e.folderUri),r=b.parse(t);return{configUri:S.joinPath(r,`likec4.config.json`),folder:t,folderUri:r}}var ff=class ProjectsManager extends ADisposable{services;static DefaultProjectId=df.id;#e=[];#t=void 0;#n=void 0;#r=[];#i=new ai(e=>{if(e===ProjectsManager.DefaultProjectId){let t=this.getWorkspaceFolder(),r=S.joinPath(t,`likec4.config.json`),i=ProjectFolder(t);return{id:e,config:df.config,folder:i,folderUri:b.parse(i),configUri:r,exclude:df.exclude,includeConfig:{...df.includeConfig}}}return yi(this.#r.find(t=>t.id===e),`Project ${e} not found`)});#a=new ai(e=>{if(this.isExcludedByWorkspace(e))return!0;let t=this.findOwnerProject(e);return t?excludes(t,e)?!this.#r.some(includes(e)):!1:this.#r.some(isInScope(e))?!this.#r.some(includes(e)):isExcludedByDefault(e)});#o=new ai(e=>this.findOwnerProject(e)??null);constructor(e){super(),this.services=e,this.onDispose(ae.create(()=>{this.#e.length=0})),Y.trace`created`}isExcludedByWorkspace(e){return this.#n?(b.isUri(e)&&(e=normalizeUri(e)),this.#n(uriPathForMatcher(e))):!1}setWorkspaceExcludePatterns(e){try{if(!Array.isArray(e)){this.#n=void 0;return}let t=L(e,N(R),P(e=>(e=normalizeWindowsDrivePath(e),!Wt(e)&&!e.startsWith(`**`)&&(e=xt(`**`,e)),e)));if(!k(t,1)){this.#n=void 0;return}Y.debug`set workspace exclude patterns: ${t}`,this.#n=(0,cf.default)(t,{dot:!0}),this.clearCaches()}catch(e){Y.warn(`Failed to set workspace exclude patterns`,{error:e}),this.#n=void 0}}get defaultProjectId(){if(this.#t)return this.#t;if(!(this.#r.length>1))return k(this.#r,1)?this.#r[0].id:ProjectsManager.DefaultProjectId}set defaultProjectId(e){if(e!==this.#t){if(this.#t=void 0,!e||e===ProjectsManager.DefaultProjectId){Y.debug`reset default project ID`;return}W(this.#r.find(t=>t.id===e),`Project "${e}" not found`),Y.debug`set default project ID to ${e}`,this.#t=e}}get default(){return this.#i.get(this.defaultProjectId??ProjectsManager.DefaultProjectId)}get all(){if(k(this.#r,1)){let e=[...P(this.#r,In(`id`)),df.id];if(this.#t){let t=e.findIndex(e=>e===this.#t);t>0&&(e.splice(t,1),e.unshift(this.#t))}return e}return[df.id]}getProject(e){let t=typeof e==`string`?e:this.ownerProjectId(e);return this.#i.get(t)}findOverlaped(e){if(this.#r.length===0)return[];let t=overlaps(ProjectFolder(e)),isInsideOrIncludes=e=>t(e)||!!e.includePaths&&!!fn(e.includePaths,t);return this.#r.filter(isInsideOrIncludes)}ensureProjectId(e){return e===ProjectsManager.DefaultProjectId?this.defaultProjectId??ProjectsManager.DefaultProjectId:e?(W(this.#r.some(t=>e===t.id),`Project ID ${e} is not registered`),e):yi(this.defaultProjectId,()=>`Specify exact project, known: [${P(this.#r,In(`id`)).join(`, `)}]`)}ensureProject(e){return e=this.ensureProjectId(e),this.getProject(e)}hasMultipleProjects(){return this.#r.length>1}isExcluded(...e){let t=e.length===1?e[0]:e[1];return isLangiumDocument(t)&&isLikeC4Builtin(t)?!0:e.length===1?this.#a.get(normalizeUri(t)):excludes(this.#i.get(e[0]),normalizeUri(t))}isIncluded(e,t){let r=normalizeUri(t);return this.isExcludedByWorkspace(r)?!1:k(this.#r,1)?e===ProjectsManager.DefaultProjectId?!this.#o.get(r)&&!this.#a.get(r):includes(this.#i.get(e),r):!isExcludedByDefault(r)}async registerConfigFile(e,t){if(this.isExcludedByWorkspace(e))throw Error(`Skipping project config, path ${e.fsPath} is excluded by editor settings`);if(isExcludedByDefault(normalizeUri(e)))throw Error(`Failed to register project config, path ${e.fsPath} is excluded by default: ${df.config.exclude.map(e=>`"${e}"`).join(`, `)}`);try{let r=await this.services.workspace.FileSystemProvider.loadProjectConfig(e);return await this.registerProject({config:r,configUri:e},t)}catch(t){if(!se(t))throw p(t,`Failed to register project config ${e.fsPath}:\n`);return Promise.reject(t)}}async registerProject(e,t){let r=Lt.validate(e.config),{configUri:i,folder:a,folderUri:o}=parseRegisterOptions(e),s=Lt.normalizeInclude(r.include),c=this.#r.find(e=>e.folder===a);return c?(c.config.name!==r.name&&(Y.info`project name changed from ${c.config.name} to ${r.name}`,Y.info`remove ${c.id}`,c.id=this.uniqueProjectId(r.name),Y.info`add ${c.id}`),this.warnIfConfigOverride(c,i),c.config=r,c.folder=a,c.folderUri=o,c.configUri=i,c.includeConfig=s):(c={id:this.uniqueProjectId(r.name),config:r,folder:a,configUri:i,folderUri:o,includeConfig:s},this.#r=ensureProjectsOrder([...this.#r,c]),Y.info`add ${c.id}`),safeCall(()=>this.updateIncludesExcludes(c)),this.isInitiatingOrReloading?c:(this.clearCaches(),this.notifyListeners(),await this.rebuildProject(c.id,t).catch(e=>se(e)?Promise.reject(e):(Y.warn(`Failed to rebuild project {projectId} after config change`,{projectId:c.id,error:e}),Promise.resolve())),c)}ownerProjectId(e){return this.#o.get(normalizeUri(e))?.id??this.#t??ProjectsManager.DefaultProjectId}findOwnerProject(e){if(this.#r.length===0)return;let t=isParentFolderFor(e);return this.#r.find(t)??this.#r.find(includes(e))??void 0}relativePath(e){let t=normalizeUri(e),r=this.#o.get(t);return r?S.relative(r.folderUri,b.parse(t)):t}get isInitiatingOrReloading(){return!!this.#s||!this.services.workspace.WorkspaceManager.isReady}#s=null;async reloadProjects(e){return this.#s?(Y.debug`reload projects is already in progress, waiting`,await this.#s.catch(()=>{})):(Y.debug`schedule reload projects`,this.#s=Promise.resolve().then(()=>this._reloadProjects(e)).catch(e=>(se(e)||Y.warn(`Failed to reload projects`,{error:e}),Promise.reject(e))).finally(()=>{this.#s=null}),await this.#s)}async _reloadProjects(e){let t=this.services.workspace.WorkspaceManager.workspaceFolders;if(!t||t.length===0){Y.warn(`Failed to reloadProjects, no workspace folders found`);return}Y.debug`start reload projects`;let r=[];for(let e of t){let t=b.parse(e.uri);Y.debug`scan projects in ${t.fsPath}`;try{let e=await this.services.workspace.FileSystemProvider.scanProjectFiles(t);for(let i of e)Y.debug`found config ${S.relative(t,i.uri)}`,r.push(i.uri)}catch(e){Y.warn(`Failed on scanProjectFiles in {folder}`,{folder:t.fsPath,error:e})}}if(r.length===0){if(this.#r.length===0){Y.warning(`No config files found`);return}Y.warning(`no config files found, but {count} projects were registered before`,{count:this.#r.length}),Y.warning(`reset`)}r.sort(compareUri);let i=new Map(this.#r.map(e=>[e.configUri.toString(),e]));this.#r=[],this.#i.clear();for(let e of r)try{await this.registerConfigFile(e)}catch(t){Y.warn(c(t));let r=i.get(e.toString());r&&(Y.debug`Update failed, restore project ${r.id}`,await this.registerProject(r).catch(e=>{Y.warn(`fail to restore project ${r.id}, ignoring`,{error:e})}))}this.clearCaches(),this.notifyListeners(),await this.services.workspace.WorkspaceManager.rebuildAll(e)}uniqueProjectId(e){let t=new Set(P(this.#r,In(`id`))),r=e;if(!t.has(r))return r;Y.warn`Project "${e}" already exists, generating unique ID`;let i=1;for(;t.has(r);)r=`${e}-${i++}`;return r}clearCaches(){Y.trace(`clearCaches`),this.#t&&!this.#r.some(e=>e.id===this.#t)&&(this.#t=void 0),this.#i.clear(),this.#o.clear(),this.#a.clear()}async rebuildProject(e,t){let r=this.#r.find(t=>t.id===e);if(!r)return e===ProjectsManager.DefaultProjectId?Y.info`Rebuilding all documents `:Y.warn`Project ${e} not found, rebuilding all`,await this.services.workspace.WorkspaceManager.rebuildAll(t);let i=Y.getChild(r.id),_includes=e=>includes(r,normalizeUri(e)),a=this.services.workspace.LangiumDocuments.userDocuments.filter(_includes).map(e=>e.uri).toArray();if(a.length===0){i.trace`no documents found for project ${r.id}, skipping rebuild`;return}i.info`rebuild project documents: ${a.length}`,this.clearCaches(),await this.services.workspace.DocumentBuilder.update(a,[],t).catch(e=>{i.warn(`Failed to rebuild project`,{error:e})})}getAllIncludePaths(){let e=[];for(let t of this.#r)if(t.includePaths)for(let r of t.includePaths)e.push({projectId:t.id,includePath:r.uri,includeConfig:t.includeConfig});return e}onProjectsUpdate(e){return this.#e.push(e),ae.create(()=>{let t=this.#e.indexOf(e);t>=0&&this.#e.splice(t,1)})}getWorkspaceFolder(){try{return this.services.workspace.WorkspaceManager.workspaceUri}catch(e){return Y.warn(`Failed to get workspace URI, using default folder`,{error:e}),b.file(`/`)}}notifyListeners(){for(let e of[...this.#e])try{e()}catch(e){Y.warn(c(e))}}updateIncludesExcludes(e){let t=e.config;delete e.includePaths,delete e.exclude;let r=e.includeConfig.paths;k(r,1)&&(e.includePaths=P(r,t=>{let r=S.resolvePath(e.folderUri,t);return{uri:r,folder:ProjectFolder(r)}}),Y.debug`project ${e.id} include paths: ${e.includePaths.map(e=>e.uri.fsPath).join(`, `)}`);let i=t.exclude;if(I(i)?e.exclude=df.exclude:k(i,1)&&(e.exclude=(0,cf.default)([e.folderUri,...P(e.includePaths??[],In(`uri`))].flatMap(e=>P(i,t=>(!vt(t)&&!t.startsWith(`**`)&&(t=xt(`**`,t)),Ct(ht(uriPathForMatcher(e),t))))),{contains:!0,dot:!0})),!e.includePaths)return e;for(let t of e.includePaths)for(let r of this.#r)r.id!==e.id&&(overlaps(t,r)&&Y.warn(`Project "{projectId}" include path "{includePath}" overlaps with project "{otherProjectId}" folder. Files in overlapping areas will only belong to one project.`,{projectId:e.id,includePath:t.folder,otherProjectId:r.id}),r.includePaths?.forEach(i=>{overlaps(t,i)&&Y.warn(`Project "{projectId}" include path "{includePath}" overlaps with project "{otherProjectId}" include path "{otherIncludePath}". Files in overlapping areas will only belong to one project.`,{projectId:e.id,includePath:t.folder,otherProjectId:r.id,otherIncludePath:i.folder})}));return e}warnIfConfigOverride(e,t){try{let[r,i]=P([e.configUri,t],S.basename);r!==i&&Y.warn`config ${i} overrides ${r} in folder ${e.folder}`}catch{}}},pf=class TimeoutError extends Error{name=`TimeoutError`;constructor(e,t){super(e,t),Error.captureStackTrace?.(this,TimeoutError)}};const getAbortedReason=e=>e.reason??new DOMException(`This operation was aborted.`,`AbortError`);function pTimeout(e,t){let{milliseconds:r,fallback:i,message:a,customTimers:o={setTimeout,clearTimeout},signal:s}=t,c,abortHandler,l=new Promise((t,l)=>{if(typeof r!=`number`||Math.sign(r)!==1)throw TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(s?.aborted){l(getAbortedReason(s));return}if(s&&(abortHandler=()=>{l(getAbortedReason(s))},s.addEventListener(`abort`,abortHandler,{once:!0})),e.then(t,l),r===1/0)return;let u=new pf;c=o.setTimeout.call(void 0,()=>{if(i){try{t(i())}catch(e){l(e)}return}typeof e.cancel==`function`&&e.cancel(),a===!1?t():a instanceof Error?l(a):(u.message=a??`Promise timed out after ${r} milliseconds`,l(u))},r)}).finally(()=>{l.clear(),abortHandler&&s&&s.removeEventListener(`abort`,abortHandler)});return l.clear=()=>{o.clearTimeout.call(void 0,c),c=void 0},l}var LikeC4WorkspaceManager=class extends ut{services;fileSystemProvider;#e=q.getChild(`workspace`);#t=!1;#n=[];initialBuildOptions={eagerLinking:!0,validation:!0};constructor(e){super(e),this.services=e,this.fileSystemProvider=e.workspace.FileSystemProvider}get documentFactory(){return this.services.workspace.LangiumDocumentFactory}get isReady(){return this.#t}async performStartup(e){this.#t&&this.#e.warn`workspace already initialized, invalid performStartup call`;try{this.#t=!1,await this.readExcludeConfig(),this.folders??=e;let t=e.map(e=>b.parse(e.uri)),r=[],i=[];for(let e of t){this.#e.debug`scanning folder ${e.fsPath} for likec4`;try{let t=await this.fileSystemProvider.scanProjectFiles(e);r.push(...t)}catch(t){this.#e.warn(`Failed to scan workspace folder {folder} for project config files`,{folder:e.fsPath,error:t})}try{i.push(...await this.fileSystemProvider.readDirectory(e,{recursive:!0}))}catch(t){this.#e.warn(`Failed to read workspace folder {folder} for likec4 files`,{folder:e.fsPath,error:t})}this.services.workspace.FileSystemWatcher.watch(e.fsPath)}let a=this.services.workspace.ProjectsManager,o=0;for(let e of r)try{await a.registerConfigFile(e.uri),o++}catch(t){this.#e.warn(`Failed to register config file {config}`,{config:e.uri.fsPath,error:t})}r.length===o?o>0&&this.#e.info`loaded ${o} projects`:this.#e.warn`loaded ${o} projects out of ${r.length}`,o>0&&i.push(...await this.scanProjectIncludePaths());let s=await this.loadDocuments(i);k(s,1)?this.#e.debug`found ${s.length} likec4 documents`:this.#e.warn(`No likec4 documents found in workspace`),s.push(this.documentFactory.fromString(Ac,b.parse(Mc)));for(let e of s)this.saveAddDocument(e);return s}finally{this.#t=!0,this._ready.resolve()}}async scanProjectIncludePaths(){let e=this.services.workspace.ProjectsManager.getAllIncludePaths();if(!k(e,1))return[];let t=Kt(e=>this.services.workspace.ProjectsManager.isExcludedByWorkspace(e.uri)),r=[];for(let{projectId:i,includePath:a,includeConfig:o}of e)try{this.#e.debug`scanning include path ${a.fsPath} for project ${i}`;let e=L(await this.fileSystemProvider.readDirectory(a,{recursive:!0,maxDepth:o.maxDepth}),N(t));r.push(...e),e.length===0?this.#e.trace`no files found in include path ${a.fsPath}`:(this.#e.debug`loaded ${e.length} files from include path ${a.fsPath}`,e.length>o.fileThreshold&&this.#e.warn(`Loaded ${e.length} files from include path ${a.fsPath} (project: ${i}) (threshold: ${o.fileThreshold}).\nLarge include directories may slow workspace initialization. Consider adjusting "include.fileThreshold" or "include.maxDepth" in your project configuration.`))}catch(e){this.#e.warn(`Failed to scan include path ${a.fsPath}`,{error:e})}return r}async loadDocuments(e){let t=L(e,Dn(e=>e.uri.path),kn(compareByUri)),r=[];for(let e of t)try{r.push(await this.documentFactory.fromUri(e.uri))}catch(t){this.#e.warn(`Failed to load document ${e.uri}`,{error:t})}return r}saveAddDocument(e){this.langiumDocuments.hasDocument(e.uri)||this.langiumDocuments.addDocument(e)}workspace(){return this.folders&&k(this.folders,1)?this.folders[0]:null}async rebuildAll(e){let t=this.services.workspace.LangiumDocuments.resetProjectIds();this.#e.info(`invalidate and rebuild all {docs} documents`,{docs:t.length}),this.forceCleanCaches(),await this.documentBuilder.update(t,[],e)}get workspaceUri(){let e=this.workspace();return H(e,`Workspace not initialized`),b.parse(e.uri)}get workspaceURL(){let e=this.workspace();return H(e,`Workspace not initialized`),new URL(e.uri)}forceCleanCaches(){for(let e of[...this.#n])e();this.services.workspace.ProjectsManager.clearCaches(),this.services.workspace.ManualLayouts.clearCaches(),this.services.workspace.Cache.clear()}onForceCleanCache(e){return this.#n.push(e),ae.create(()=>{let t=this.#n.indexOf(e);t!==-1&&this.#n.splice(t,1)})}async readExcludeConfig(){if(!this.services.lsp.Connection){this.#e.debug`no LSP connection, skipping initial configuration read`;return}let e=this.services.workspace.ConfigurationProvider,wait=e=>pTimeout(e,{milliseconds:1e3,message:!1});try{this.#e.trace`waiting for ConfigurationProvider ready...`,await wait(e.ready),this.#e.trace`ConfigurationProvider ready, reading exclude patterns...`;let t=await wait(e.getConfiguration(`likec4`,`exclude`));t?(this.#e.trace`exclude configuration found ${t}`,this.services.workspace.ProjectsManager.setWorkspaceExcludePatterns(t)):this.#e.trace(`no initial exclude configuration found`)}catch(e){this.#e.warn(`Failed to read initial exclude configuration`,{error:e})}}};function projectIdFrom(e){if(isImported(e)){for(;e.$type===`Imported`&&e.$container;)e=e.$container;H(isImportsFromPoject(e))}if(isImportsFromPoject(e))return e.project;let t=Oe(e)?st(e):e;return t.likec4ProjectId?t.likec4ProjectId:(q.warn`Document ${t.uri.fsPath} does not have a project ID assigned, this may lead to unexpected behavior.`,ff.DefaultProjectId)}function stringHash$1(...e){return Ei(e.length>1?e.join(`:::`):e[0])}t(stringHash$1,`stringHash`);function safeCall(e){try{return e()}catch(e){q.trace(`Safe call failed`,{error:e});return}}function performanceNow(){try{return globalThis.performance.now()}catch{return Date.now()}}function performanceMark(){let e=performanceNow();return{get ms(){return performanceNow()-e},get pretty(){return Xn(performanceNow()-e)}}}const mf=q.getChild(`manual-layouts`),hf=`.likec4.snap`,isManualLayoutFile=e=>e!==hf&&e.endsWith(hf);function fileName(e){return`${e}${hf}`}function viewIdFromURI(e){let t=S.basename(e);return isManualLayoutFile(t)?t.slice(0,-12):null}function getManualLayoutsOutDir(e){return S.resolvePath(e.folderUri,e.config.manualLayouts?.outDir??`.likec4`)}const gf={manualLayouts:e=>new DefaultLikeC4ManualLayouts(e)},_f=`file://./`;var DefaultLikeC4ManualLayouts=class extends ADisposable{services;cache;listeners=[];#e=pLimit(1);constructor(e){super(),this.services=e,this.cache=new ne,this.onDispose(ae.create(()=>{this.listeners.length=0,this.cache.clear()})),xi(()=>{this.onDispose(e.workspace.ProjectsManager.onProjectsUpdate(()=>{this.clearCaches()}))})}async handleFileSystemUpdate(e){let t=e.update??e.delete,r=viewIdFromURI(t)??void 0,i=this.services.workspace.ProjectsManager.ownerProjectId(t);if(this.cache.delete(i),`delete`in e){this.triggerUpdate(Hr({removed:t,projectId:i,viewId:r}));return}let a=this.services.workspace.ProjectsManager.getProject(i);if(!r){let e=await this.readSnapshot(t,a);e?r=e.id:(mf.error(`Snapshot ${t.fsPath} does not exist or is invalid`),r=`index`)}this.triggerUpdate({updated:t,projectId:i,viewId:r})}onManualLayoutUpdate(e){return this.listeners.push(e),{dispose:()=>{let t=this.listeners.indexOf(e);t!==-1&&this.listeners.splice(t,1)}}}async readManualLayouts(e){let t=mf.getChild(e.id),r=this.services.workspace.FileSystemProvider,i=getManualLayoutsOutDir(e),a=[],o=`${i.toString()}`;try{let s=await r.scanDirectory(i,isManualLayoutFile);if(s.length===0)return null;s.sort((e,t)=>e.uri.path.localeCompare(t.uri.path));for(let i of s)try{let t=await r.readFile(i.uri),s=Tt.parse(t);o=Ei(o+i.uri.toString()+t);let c=this.resolveIconPathsAfterRead(s,e.folderUri);a.push({...c,_layout:`manual`})}catch(e){t.warn(`Failed to read view snapshot ${i.uri.fsPath}`,{err:e})}a.length&&t.trace`read manual layouts for ${e.id}, found ${a.length}`}catch(r){t.warn(`Failed to read manual layouts for ${e.folderUri.fsPath}`,{err:r})}if(a.length===0)return null;let s=cn(a,In(`id`));return{hash:o,views:s}}async readSnapshot(e,t){let r=this.services.workspace.FileSystemProvider;try{let i=await r.readFile(e),a=Tt.parse(i);if(!t){let r=this.services.workspace.ProjectsManager.ownerProjectId(e);t=this.services.workspace.ProjectsManager.getProject(r)}return{...this.resolveIconPathsAfterRead(a,t.folderUri),_layout:`manual`}}catch(t){return mf.warn(`Failed to read view snapshot ${e.fsPath}`,{err:t}),null}}async read(e){return await this.#e(async()=>{let t=this.cache.get(e.id);if(t!==void 0)return mf.trace`cache hit project ${e.id}`,t;let r=await this.readManualLayouts(e);return this.cache.set(e.id,r),r})}async write(e,t){this.cache.delete(e.id);let r=mf.getChild(e.id),i=getManualLayoutsOutDir(e),a=S.joinPath(i,fileName(t.id));if(`manualLayout`in t){let{manualLayout:e,...r}=t;t=r}let o=Tt.stringify(this.normalizeIconPathsForWrite(t,e.folderUri),{space:2,quote:`'`}),s={uri:a.toString(),range:he.create(Ce.create(0,0),Ce.create(o.split(`
45
+ `),jc=`likec4builtin`,Mc=`${jc}:///likec4/lib/icons.c4`;function isLikeC4Builtin(e){return(`uri`in e?e.uri:e).scheme===jc}function isNotLikeC4Builtin(e){return!isLikeC4Builtin(e)}const Nc=di(`/`),compareByUri=(e,t)=>Nc(_t(e.uri.path),_t(t.uri.path)),Pc=di(`/`,!0),compareByUriDeepFirst=(e,t)=>Pc(_t(e.uri.path),_t(t.uri.path));var ADisposable=class{toDispose=[];isDisposed=!1;onDispose(...e){this.toDispose.push(...e)}dispose(){this.throwIfDisposed(),this.isDisposed=!0;let e;for(;e=this.toDispose.pop();)try{e.dispose()}catch(e){logWarnError(e)}}throwIfDisposed(){this.isDisposed&&q.warn(`this has already been disposed`)}};const Fc=`AnyProperty`;function isAnyProperty(e){return J.isInstance(e,Fc)}const Ic=`ColorLiteral`;function isColorLiteral(e){return J.isInstance(e,Ic)}const Lc=`DeploymentElement`;function isDeploymentElement(e){return J.isInstance(e,Lc)}const Rc=`DeploymentNodeOrElementKind`,zc=`DeploymentViewRule`;function isDeploymentViewRule(e){return J.isInstance(e,zc)}const Bc=`DynamicViewProperty`,Vc=`DynamicViewRule`;function isDynamicViewRule(e){return J.isInstance(e,Vc)}const Hc=`ElementProperty`;function isElementProperty(e){return J.isInstance(e,Hc)}const Uc=`ExpressionV2`;function isExpressionV2(e){return J.isInstance(e,Uc)}const Wc=`ExtendElementOrRelation`;function isExtendElementOrRelation(e){return J.isInstance(e,Wc)}const Gc=`FqnExpr`;function isFqnExpr(e){return J.isInstance(e,Gc)}const Kc=`FqnExprOrWhere`;function isFqnExprOrWhere(e){return J.isInstance(e,Kc)}const qc=`FqnExprOrWith`;function isFqnExprOrWith(e){return J.isInstance(e,qc)}const Jc=`FqnReferenceable`,Yc=`LikeC4View`;function isLikeC4View(e){return J.isInstance(e,Yc)}const Xc=`MetadataProperty`;function isMetadataProperty(e){return J.isInstance(e,Xc)}const Zc=`MetadataValue`,Qc=`ModelElement`,$c=`Referenceable`,el=`RelationExpr`;function isRelationExpr(e){return J.isInstance(e,el)}const tl=`RelationExprOrWhere`;function isRelationExprOrWhere(e){return J.isInstance(e,tl)}const nl=`RelationExprOrWith`;function isRelationExprOrWith(e){return J.isInstance(e,nl)}const rl=`RelationProperty`,il=`RelationshipStyleProperty`;function isRelationshipStyleProperty(e){return J.isInstance(e,il)}const al=`SizeProperty`;function isSizeProperty(e){return J.isInstance(e,al)}const ol=`StepOrSeries`;function isStepOrSeries(e){return J.isInstance(e,ol)}const sl=`StepStatement`;function isStepStatement(e){return J.isInstance(e,sl)}const cl=`StringProperty`;function isStringProperty(e){return J.isInstance(e,cl)}const ll=`StyleProperty`;function isStyleProperty(e){return J.isInstance(e,ll)}const ul=`TryStep`;function isTryStep(e){return J.isInstance(e,ul)}const dl=`ViewProperty`;function isViewProperty(e){return J.isInstance(e,dl)}const fl=`ViewRule`;function isViewRule(e){return J.isInstance(e,fl)}const pl=`ViewRuleStyleOrGlobalRef`;function isViewRuleStyleOrGlobalRef(e){return J.isInstance(e,pl)}const ml=`WhereElement`;function isWhereElement(e){return J.isInstance(e,ml)}const hl=`WhereElementExpression`;function isWhereElementExpression(e){return J.isInstance(e,hl)}const gl=`WhereExpression`,_l=`WhereKindEqual`;function isWhereKindEqual(e){return J.isInstance(e,_l)}const vl=`WhereMetadataEqual`;function isWhereMetadataEqual(e){return J.isInstance(e,vl)}const yl=`WhereRelation`;function isWhereRelation(e){return J.isInstance(e,yl)}const bl=`WhereRelationExpression`;function isWhereRelationExpression(e){return J.isInstance(e,bl)}const xl=`WhereTagEqual`;function isWhereTagEqual(e){return J.isInstance(e,xl)}const Sl=`AbstractStep`,Cl=`AltSteps`;function isAltSteps(e){return J.isInstance(e,Cl)}const wl=`ArrowProperty`;function isArrowProperty(e){return J.isInstance(e,wl)}const Tl=`BorderProperty`;function isBorderProperty(e){return J.isInstance(e,Tl)}const El=`CatchBlock`;function isCatchBlock(e){return J.isInstance(e,El)}const Dl=`ColorProperty`;function isColorProperty(e){return J.isInstance(e,Dl)}const Ol=`CustomColor`,kl=`CustomElementProperties`;function isCustomElementProperties(e){return J.isInstance(e,kl)}const Al=`CustomRelationProperties`;function isCustomRelationProperties(e){return J.isInstance(e,Al)}const jl=`DeployedInstance`;function isDeployedInstance(e){return J.isInstance(e,jl)}const Ml=`DeployedInstanceBody`;function isDeployedInstanceBody(e){return J.isInstance(e,Ml)}const Nl=`DeploymentNode`;function isDeploymentNode$1(e){return J.isInstance(e,Nl)}t(isDeploymentNode$1,`isDeploymentNode`);const Pl=`DeploymentNodeBody`;function isDeploymentNodeBody(e){return J.isInstance(e,Pl)}const Fl=`DeploymentNodeKind`;function isDeploymentNodeKind(e){return J.isInstance(e,Fl)}const Il=`DeploymentRelation`;function isDeploymentRelation(e){return J.isInstance(e,Il)}const Ll=`DeploymentRelationBody`;function isDeploymentRelationBody(e){return J.isInstance(e,Ll)}const Rl=`DeploymentView`;function isDeploymentView$1(e){return J.isInstance(e,Rl)}t(isDeploymentView$1,`isDeploymentView`);const zl=`DeploymentViewBody`;function isDeploymentViewBody(e){return J.isInstance(e,zl)}const Bl=`DeploymentViewRulePredicate`;function isDeploymentViewRulePredicate(e){return J.isInstance(e,Bl)}const Vl=`DeploymentViewRuleStyle`;function isDeploymentViewRuleStyle(e){return J.isInstance(e,Vl)}const Hl=`DirectedRelationExpr`;function isDirectedRelationExpr(e){return J.isInstance(e,Hl)}const Ul=`DynamicView`;function isDynamicView$1(e){return J.isInstance(e,Ul)}t(isDynamicView$1,`isDynamicView`);const Wl=`DynamicViewBody`;function isDynamicViewBody(e){return J.isInstance(e,Wl)}const Gl=`DynamicViewDisplayVariantProperty`;function isDynamicViewDisplayVariantProperty(e){return J.isInstance(e,Gl)}const Kl=`DynamicViewGlobalPredicateRef`;function isDynamicViewGlobalPredicateRef(e){return J.isInstance(e,Kl)}const ql=`DynamicViewIncludePredicate`;function isDynamicViewIncludePredicate(e){return J.isInstance(e,ql)}const Jl=`DynamicViewRef`,Yl=`Element`;function isElement(e){return J.isInstance(e,Yl)}const Xl=`ElementBody`;function isElementBody(e){return J.isInstance(e,Xl)}const Zl=`ElementKind`;function isElementKind(e){return J.isInstance(e,Zl)}const Ql=`ElementKindExpression`;function isElementKindExpression(e){return J.isInstance(e,Ql)}const $l=`ElementRef`;function isElementRef(e){return J.isInstance(e,$l)}const eu=`ElementStringProperty`;function isElementStringProperty(e){return J.isInstance(e,eu)}const tu=`ElementStyleProperty`;function isElementStyleProperty(e){return J.isInstance(e,tu)}const nu=`ElementTagExpression`;function isElementTagExpression(e){return J.isInstance(e,nu)}const ru=`ElementView`;function isElementView$1(e){return J.isInstance(e,ru)}t(isElementView$1,`isElementView`);const iu=`ElementViewBody`;function isElementViewBody(e){return J.isInstance(e,iu)}const au=`ElementViewRef`,ou=`Expressions`;function isExpressions(e){return J.isInstance(e,ou)}const su=`ExtendDeployment`;function isExtendDeployment(e){return J.isInstance(e,su)}const cu=`ExtendDeploymentBody`;function isExtendDeploymentBody(e){return J.isInstance(e,cu)}const lu=`ExtendElement`;function isExtendElement(e){return J.isInstance(e,lu)}const uu=`ExtendElementBody`;function isExtendElementBody(e){return J.isInstance(e,uu)}const du=`ExtendRelation`;function isExtendRelation(e){return J.isInstance(e,du)}const fu=`ExtendRelationBody`;function isExtendRelationBody(e){return J.isInstance(e,fu)}const pu=`FinallyBlock`;function isFinallyBlock(e){return J.isInstance(e,pu)}const mu=`FqnExpressions`;function isFqnExpressions(e){return J.isInstance(e,mu)}const hu=`FqnExprWhere`;function isFqnExprWhere(e){return J.isInstance(e,hu)}const gu=`FqnExprWith`;function isFqnExprWith(e){return J.isInstance(e,gu)}const _u=`FqnRef`;function isFqnRef(e){return J.isInstance(e,_u)}const vu=`FqnRefExpr`;function isFqnRefExpr(e){return J.isInstance(e,vu)}const yu=`GlobalDynamicPredicateGroup`;function isGlobalDynamicPredicateGroup(e){return J.isInstance(e,yu)}const bu=`GlobalPredicateGroup`;function isGlobalPredicateGroup(e){return J.isInstance(e,bu)}const xu=`Globals`;function isGlobals(e){return J.isInstance(e,xu)}const Su=`GlobalStyle`;function isGlobalStyle(e){return J.isInstance(e,Su)}const Cu=`GlobalStyleGroup`;function isGlobalStyleGroup(e){return J.isInstance(e,Cu)}const wu=`GlobalStyleId`,Tu=`HexColor`;function isHexColor(e){return J.isInstance(e,Tu)}const Eu=`IconColorProperty`;function isIconColorProperty(e){return J.isInstance(e,Eu)}const Du=`IconPositionProperty`;function isIconPositionProperty(e){return J.isInstance(e,Du)}const Ou=`IconProperty`;function isIconProperty(e){return J.isInstance(e,Ou)}const ku=`IconSizeProperty`;function isIconSizeProperty(e){return J.isInstance(e,ku)}const Au=`Imported`;function isImported(e){return J.isInstance(e,Au)}const ju=`ImportsFromPoject`;function isImportsFromPoject(e){return J.isInstance(e,ju)}const Mu=`IncomingRelationExpr`;function isIncomingRelationExpr(e){return J.isInstance(e,Mu)}const Nu=`InOutRelationExpr`;function isInOutRelationExpr(e){return J.isInstance(e,Nu)}const Pu=`LibIcon`;function isLibIcon(e){return J.isInstance(e,Pu)}const Fu=`LikeC4Grammar`;function isLikeC4Grammar(e){return J.isInstance(e,Fu)}const Iu=`LikeC4Lib`;function isLikeC4Lib(e){return J.isInstance(e,Iu)}const Lu=`LineProperty`;function isLineProperty(e){return J.isInstance(e,Lu)}const Ru=`LinkProperty`;function isLinkProperty(e){return J.isInstance(e,Ru)}const zu=`MarkdownOrString`;function isMarkdownOrString(e){return J.isInstance(e,zu)}const Bu=`MetadataArray`;function isMetadataArray(e){return J.isInstance(e,Bu)}const Vu=`MetadataAttribute`;function isMetadataAttribute(e){return J.isInstance(e,Vu)}const Hu=`MetadataBody`;function isMetadataBody(e){return J.isInstance(e,Hu)}const Uu=`Model`;function isModel(e){return J.isInstance(e,Uu)}const Wu=`ModelDeployments`;function isModelDeployments(e){return J.isInstance(e,Wu)}const Gu=`ModelViews`;function isModelViews(e){return J.isInstance(e,Gu)}const Ku=`MultipleProperty`;function isMultipleProperty(e){return J.isInstance(e,Ku)}const qu=`NavigateToProperty`;function isNavigateToProperty(e){return J.isInstance(e,qu)}const Ju=`NotationProperty`;function isNotationProperty(e){return J.isInstance(e,Ju)}const Yu=`NotesProperty`;function isNotesProperty(e){return J.isInstance(e,Yu)}const Xu=`OpacityProperty`;function isOpacityProperty(e){return J.isInstance(e,Xu)}const Zu=`OutgoingRelationExpr`;function isOutgoingRelationExpr(e){return J.isInstance(e,Zu)}const Qu=`PaddingSizeProperty`;function isPaddingSizeProperty(e){return J.isInstance(e,Qu)}const $u=`Relation`;function isRelation(e){return J.isInstance(e,$u)}const ed=`RelationBody`;function isRelationBody(e){return J.isInstance(e,ed)}const td=`RelationExprWhere`;function isRelationExprWhere(e){return J.isInstance(e,td)}const nd=`RelationExprWith`;function isRelationExprWith(e){return J.isInstance(e,nd)}const rd=`RelationKindDotRef`;function isRelationKindDotRef(e){return J.isInstance(e,rd)}const id=`RelationNavigateToProperty`;function isRelationNavigateToProperty(e){return J.isInstance(e,id)}const ad=`RelationshipKind`;function isRelationshipKind(e){return J.isInstance(e,ad)}const od=`RelationStringProperty`;function isRelationStringProperty(e){return J.isInstance(e,od)}const sd=`RelationStyleProperty`;function isRelationStyleProperty(e){return J.isInstance(e,sd)}const cd=`RGBAColor`;function isRGBAColor(e){return J.isInstance(e,cd)}const ld=`ShapeProperty`;function isShapeProperty(e){return J.isInstance(e,ld)}const ud=`ShapeSizeProperty`;function isShapeSizeProperty(e){return J.isInstance(e,ud)}const dd=`SpecificationColor`;function isSpecificationColor(e){return J.isInstance(e,dd)}const fd=`SpecificationDeploymentNodeKind`;function isSpecificationDeploymentNodeKind(e){return J.isInstance(e,fd)}const pd=`SpecificationElementKind`;function isSpecificationElementKind(e){return J.isInstance(e,pd)}const md=`SpecificationElementStringProperty`;function isSpecificationElementStringProperty(e){return J.isInstance(e,md)}const hd=`SpecificationRelationshipKind`;function isSpecificationRelationshipKind(e){return J.isInstance(e,hd)}const gd=`SpecificationRelationshipStringProperty`;function isSpecificationRelationshipStringProperty(e){return J.isInstance(e,gd)}const _d=`SpecificationRule`;function isSpecificationRule(e){return J.isInstance(e,_d)}const vd=`SpecificationTag`;function isSpecificationTag(e){return J.isInstance(e,vd)}const yd=`StepsBlock`;function isStepsBlock(e){return J.isInstance(e,yd)}const bd=`StrictFqnElementRef`;function isStrictFqnElementRef(e){return J.isInstance(e,bd)}const xd=`StrictFqnRef`;function isStrictFqnRef(e){return J.isInstance(e,xd)}function isTag(e){return J.isInstance(e,`Tag`)}const Sd=`TagRef`;function isTagRef(e){return J.isInstance(e,Sd)}const Cd=`Tags`;function isTags(e){return J.isInstance(e,Cd)}const wd=`TextSizeProperty`;function isTextSizeProperty(e){return J.isInstance(e,wd)}const Td=`ViewRef`,Ed=`ViewRuleAncestors`;function isViewRuleAncestors(e){return J.isInstance(e,Ed)}const Dd=`ViewRuleAutoLayout`;function isViewRuleAutoLayout(e){return J.isInstance(e,Dd)}const Od=`ViewRuleGlobalPredicateRef`;function isViewRuleGlobalPredicateRef(e){return J.isInstance(e,Od)}const kd=`ViewRuleGlobalStyle`;function isViewRuleGlobalStyle(e){return J.isInstance(e,kd)}const Ad=`ViewRuleGroup`;function isViewRuleGroup(e){return J.isInstance(e,Ad)}const jd=`ViewRulePredicate`;function isViewRulePredicate(e){return J.isInstance(e,jd)}const Md=`ViewRuleRank`;function isViewRuleRank(e){return J.isInstance(e,Md)}const Nd=`ViewRuleStyle`;function isViewRuleStyle(e){return J.isInstance(e,Nd)}const Pd=`ViewStringProperty`;function isViewStringProperty(e){return J.isInstance(e,Pd)}const Fd=`WhereBinaryExpression`;function isWhereBinaryExpression(e){return J.isInstance(e,Fd)}const Id=`WhereElementKind`;function isWhereElementKind(e){return J.isInstance(e,Id)}const Ld=`WhereElementMetadata`;function isWhereElementMetadata(e){return J.isInstance(e,Ld)}const Rd=`WhereElementNegation`;function isWhereElementNegation(e){return J.isInstance(e,Rd)}const zd=`WhereElementTag`;function isWhereElementTag(e){return J.isInstance(e,zd)}const Bd=`WhereRelationKind`;function isWhereRelationKind(e){return J.isInstance(e,Bd)}const Vd=`WhereRelationMetadata`;function isWhereRelationMetadata(e){return J.isInstance(e,Vd)}const Hd=`WhereRelationNegation`;function isWhereRelationNegation(e){return J.isInstance(e,Hd)}const Ud=`WhereRelationParticipantKind`;function isWhereRelationParticipantKind(e){return J.isInstance(e,Ud)}const Wd=`WhereRelationParticipantMetadata`;function isWhereRelationParticipantMetadata(e){return J.isInstance(e,Wd)}const Gd=`WhereRelationParticipantTag`;function isWhereRelationParticipantTag(e){return J.isInstance(e,Gd)}const Kd=`WhereRelationTag`;function isWhereRelationTag(e){return J.isInstance(e,Kd)}const qd=`WildcardExpression`;function isWildcardExpression(e){return J.isInstance(e,qd)}const Jd=`Step`;function isStep(e){return J.isInstance(e,Jd)}const Yd=`StepSeries`;function isStepSeries(e){return J.isInstance(e,Yd)}const Xd=`SubflowStep`;function isSubflowStep(e){return J.isInstance(e,Xd)}const Zd=`TryBlock`;function isTryBlock(e){return J.isInstance(e,Zd)}var LikeC4AstReflection=class extends pt{getAllTypes(){return[Sl,Cl,Fc,wl,Tl,El,Ic,Dl,Ol,kl,Al,jl,Ml,Lc,Nl,Pl,Fl,Rc,Il,Ll,Rl,zl,zc,Bl,Vl,Hl,Ul,Wl,Gl,Kl,ql,Bc,Jl,Vc,Yl,Xl,Zl,Ql,Hc,$l,eu,tu,nu,ru,iu,au,Uc,ou,su,cu,lu,uu,Wc,`ExtendElementProperty`,du,fu,`ExtendRelationProperty`,pu,Gc,Kc,qc,hu,gu,mu,_u,vu,Jc,yu,bu,Su,Cu,wu,xu,Tu,Eu,Du,Ou,ku,Au,ju,Nu,Mu,Pu,Fu,Iu,Yc,Lu,Ru,zu,Bu,Vu,Hu,Xc,Zc,Uu,Wu,Qc,`ModelReferenceable`,Gu,Ku,qu,Ju,Yu,Xu,Zu,Qu,cd,$c,$u,ed,el,tl,nl,td,nd,rd,id,rl,od,sd,ad,il,ld,ud,al,dd,fd,pd,md,hd,gd,_d,vd,Jd,ol,Yd,sl,yd,bd,xd,cl,ll,Xd,`Tag`,Sd,Cd,wd,Zd,ul,dl,Td,fl,Ed,Dd,Od,kd,Ad,jd,Md,Nd,pl,Pd,Fd,ml,hl,Id,Ld,Rd,zd,gl,_l,vl,yl,bl,Bd,Vd,Hd,Ud,Wd,Gd,Kd,xl,qd]}computeIsSubtype(e,t){switch(e){case Cl:case ol:case ul:return this.isSubtype(sl,t);case wl:case Lu:return this.isSubtype(il,t);case Tl:case Eu:case Du:case Ku:case Xu:case ld:return this.isSubtype(ll,t);case El:case pu:return this.isSubtype(ul,t);case Dl:return this.isSubtype(`RelationshipStyleProperty`,t)||this.isSubtype(`StyleProperty`,t);case jl:case Nl:return this.isSubtype(`DeploymentElement`,t)||this.isSubtype(`Referenceable`,t);case Fl:case Zl:return this.isSubtype(Rc,t);case Rl:case Ul:case ru:return this.isSubtype(Yc,t);case Bl:case Vl:case Ed:return this.isSubtype(zc,t);case Hl:case Mu:case Nu:case Zu:return this.isSubtype(el,t);case Gl:return this.isSubtype(Bc,t);case Kl:case ql:return this.isSubtype(Vc,t);case Bc:case Hc:case qu:case rl:case il:case cl:case ll:return this.isSubtype(Fc,t);case Yl:return this.isSubtype(`FqnReferenceable`,t)||this.isSubtype(`ModelElement`,t)||this.isSubtype(`ModelReferenceable`,t)||this.isSubtype(`Referenceable`,t);case Ql:case nu:case vu:case qd:return this.isSubtype(Gc,t);case eu:return this.isSubtype(`ElementProperty`,t)||this.isSubtype(`StringProperty`,t);case tu:return this.isSubtype(Hc,t);case su:case $c:return this.isSubtype(Jc,t);case lu:return this.isSubtype(`ExtendElementOrRelation`,t)||this.isSubtype(`FqnReferenceable`,t);case Wc:case $u:return this.isSubtype(Qc,t);case du:return this.isSubtype(Wc,t);case Gc:case hu:return this.isSubtype(Kc,t);case Kc:case gu:return this.isSubtype(qc,t);case qc:case nl:return this.isSubtype(Uc,t);case Tu:case cd:return this.isSubtype(Ic,t);case Ou:return this.isSubtype(`ElementProperty`,t)||this.isSubtype(`StyleProperty`,t);case ku:case Qu:case ud:case wd:return this.isSubtype(`SizeProperty`,t)||this.isSubtype(`StyleProperty`,t);case Au:return this.isSubtype(`ModelReferenceable`,t)||this.isSubtype(`Referenceable`,t);case Ru:return this.isSubtype(`ElementProperty`,t)||this.isSubtype(`ExtendElementProperty`,t)||this.isSubtype(`ExtendRelationProperty`,t)||this.isSubtype(`RelationProperty`,t)||this.isSubtype(`ViewProperty`,t);case zu:case Bu:return this.isSubtype(Zc,t);case Vu:case Ju:case Yu:case md:case gd:return this.isSubtype(cl,t);case Hu:return this.isSubtype(Xc,t);case Xc:return this.isSubtype(`ElementProperty`,t)||this.isSubtype(`ExtendElementProperty`,t)||this.isSubtype(`ExtendRelationProperty`,t)||this.isSubtype(`RelationProperty`,t);case el:case td:return this.isSubtype(tl,t);case tl:case nd:return this.isSubtype(nl,t);case id:case sd:return this.isSubtype(rl,t);case od:return this.isSubtype(`RelationProperty`,t)||this.isSubtype(`StringProperty`,t);case Jd:case Yd:return this.isSubtype(`AbstractStep`,t)||this.isSubtype(`StepOrSeries`,t);case Xd:return this.isSubtype(`StepStatement`,t)||this.isSubtype(`StepsBlock`,t);case Zd:return this.isSubtype(`StepsBlock`,t)||this.isSubtype(`TryStep`,t);case dl:return this.isSubtype(`AnyProperty`,t)||this.isSubtype(`DynamicViewProperty`,t);case Dd:return this.isSubtype(`DeploymentViewRule`,t)||this.isSubtype(`DynamicViewRule`,t)||this.isSubtype(`ViewRule`,t);case Od:case Ad:case jd:case Md:return this.isSubtype(fl,t);case kd:case Nd:return this.isSubtype(pl,t);case pl:return this.isSubtype(`DynamicViewRule`,t)||this.isSubtype(`ViewRule`,t);case Pd:return this.isSubtype(`StringProperty`,t)||this.isSubtype(`ViewProperty`,t);case Fd:return this.isSubtype(`WhereElementExpression`,t)||this.isSubtype(`WhereRelationExpression`,t);case ml:case Rd:return this.isSubtype(hl,t);case hl:case bl:return this.isSubtype(gl,t);case Id:return this.isSubtype(`WhereElement`,t)||this.isSubtype(`WhereKindEqual`,t);case Ld:return this.isSubtype(`WhereElement`,t)||this.isSubtype(`WhereMetadataEqual`,t);case zd:return this.isSubtype(`WhereElement`,t)||this.isSubtype(`WhereTagEqual`,t);case yl:case Hd:return this.isSubtype(bl,t);case Bd:case Ud:return this.isSubtype(`WhereKindEqual`,t)||this.isSubtype(`WhereRelation`,t);case Vd:case Wd:return this.isSubtype(`WhereMetadataEqual`,t)||this.isSubtype(`WhereRelation`,t);case Gd:case Kd:return this.isSubtype(`WhereRelation`,t)||this.isSubtype(`WhereTagEqual`,t);default:return!1}}getReferenceType(e){let t=`${e.container.$type}:${e.property}`;switch(t){case`AbstractStep:kind`:case`DeploymentRelation:kind`:case`ExtendRelation:kind`:case`OutgoingRelationExpr:kind`:case`Relation:kind`:case`RelationKindDotRef:kind`:case`Step:kind`:case`StepSeries:kind`:case`WhereRelationKind:value`:return ad;case`ColorProperty:customColor`:case`IconColorProperty:customColor`:return Ol;case`DeploymentNode:kind`:return Fl;case`DynamicViewGlobalPredicateRef:predicate`:return yu;case`DynamicViewRef:view`:return Ul;case`Element:kind`:case`ElementKindExpression:kind`:return Zl;case`ElementViewRef:view`:return ru;case`FqnRef:value`:case`StrictFqnRef:value`:return $c;case`IconProperty:libicon`:return Pu;case`Imported:imported`:case`StrictFqnElementRef:el`:return Yl;case`TagRef:tag`:return`Tag`;case`ViewRef:view`:return Yc;case`ViewRuleGlobalPredicateRef:predicate`:return bu;case`ViewRuleGlobalStyle:style`:return wu;case`WhereElementKind:value`:case`WhereRelationParticipantKind:value`:return Rc;default:throw Error(`${t} is not a valid reference id.`)}}getTypeMetaData(e){switch(e){case Sl:return{name:Sl,properties:[{name:`custom`},{name:`dotKind`},{name:`kind`},{name:`target`},{name:`title`}]};case Cl:return{name:Cl,properties:[{name:`branches`,defaultValue:[]},{name:`title`}]};case wl:return{name:wl,properties:[{name:`key`},{name:`value`}]};case Tl:return{name:Tl,properties:[{name:`key`},{name:`value`}]};case El:return{name:El,properties:[{name:`catch`},{name:`title`},{name:`try`}]};case Dl:return{name:Dl,properties:[{name:`customColor`},{name:`key`},{name:`themeColor`}]};case Ol:return{name:Ol,properties:[{name:`name`}]};case kl:return{name:kl,properties:[{name:`props`,defaultValue:[]}]};case Al:return{name:Al,properties:[{name:`props`,defaultValue:[]}]};case jl:return{name:jl,properties:[{name:`body`},{name:`name`},{name:`summary`},{name:`target`},{name:`title`}]};case Ml:return{name:Ml,properties:[{name:`elements`,defaultValue:[]},{name:`props`,defaultValue:[]},{name:`tags`}]};case Nl:return{name:Nl,properties:[{name:`body`},{name:`kind`},{name:`name`},{name:`summary`},{name:`title`}]};case Pl:return{name:Pl,properties:[{name:`elements`,defaultValue:[]},{name:`props`,defaultValue:[]},{name:`tags`}]};case Fl:return{name:Fl,properties:[{name:`name`}]};case Il:return{name:Il,properties:[{name:`body`},{name:`description`},{name:`dotKind`},{name:`kind`},{name:`source`},{name:`tags`},{name:`target`},{name:`technology`},{name:`title`}]};case Ll:return{name:Ll,properties:[{name:`props`,defaultValue:[]},{name:`tags`}]};case Rl:return{name:Rl,properties:[{name:`body`},{name:`name`}]};case zl:return{name:zl,properties:[{name:`props`,defaultValue:[]},{name:`rules`,defaultValue:[]},{name:`tags`}]};case Bl:return{name:Bl,properties:[{name:`expr`},{name:`isInclude`,defaultValue:!1}]};case Vl:return{name:Vl,properties:[{name:`props`,defaultValue:[]},{name:`targets`}]};case Hl:return{name:Hl,properties:[{name:`source`},{name:`target`}]};case Ul:return{name:Ul,properties:[{name:`body`},{name:`name`}]};case Wl:return{name:Wl,properties:[{name:`props`,defaultValue:[]},{name:`rules`,defaultValue:[]},{name:`steps`,defaultValue:[]},{name:`tags`}]};case Gl:return{name:Gl,properties:[{name:`key`},{name:`value`}]};case Kl:return{name:Kl,properties:[{name:`predicate`}]};case ql:return{name:ql,properties:[{name:`exprs`}]};case Jl:return{name:Jl,properties:[{name:`view`}]};case Yl:return{name:Yl,properties:[{name:`body`},{name:`kind`},{name:`name`},{name:`props`,defaultValue:[]}]};case Xl:return{name:Xl,properties:[{name:`elements`,defaultValue:[]},{name:`props`,defaultValue:[]},{name:`tags`}]};case Zl:return{name:Zl,properties:[{name:`name`}]};case Ql:return{name:Ql,properties:[{name:`isEqual`,defaultValue:!1},{name:`kind`}]};case $l:return{name:$l,properties:[{name:`modelElement`}]};case eu:return{name:eu,properties:[{name:`key`},{name:`value`}]};case tu:return{name:tu,properties:[{name:`key`},{name:`props`,defaultValue:[]}]};case nu:return{name:nu,properties:[{name:`isEqual`,defaultValue:!1},{name:`tag`}]};case ru:return{name:ru,properties:[{name:`body`},{name:`extends`},{name:`name`},{name:`viewOf`}]};case iu:return{name:iu,properties:[{name:`props`,defaultValue:[]},{name:`rules`,defaultValue:[]},{name:`tags`}]};case au:return{name:au,properties:[{name:`view`}]};case ou:return{name:ou,properties:[{name:`prev`},{name:`value`}]};case su:return{name:su,properties:[{name:`body`},{name:`deploymentNode`}]};case cu:return{name:cu,properties:[{name:`elements`,defaultValue:[]},{name:`props`,defaultValue:[]},{name:`tags`}]};case lu:return{name:lu,properties:[{name:`body`},{name:`element`}]};case uu:return{name:uu,properties:[{name:`elements`,defaultValue:[]},{name:`props`,defaultValue:[]},{name:`tags`}]};case du:return{name:du,properties:[{name:`body`},{name:`dotKind`},{name:`kind`},{name:`source`},{name:`target`},{name:`title`}]};case fu:return{name:fu,properties:[{name:`props`,defaultValue:[]},{name:`tags`}]};case pu:return{name:pu,properties:[{name:`finally`},{name:`title`},{name:`tryCatch`}]};case mu:return{name:mu,properties:[{name:`prev`},{name:`value`}]};case hu:return{name:hu,properties:[{name:`subject`},{name:`where`}]};case gu:return{name:gu,properties:[{name:`custom`},{name:`subject`}]};case _u:return{name:_u,properties:[{name:`parent`},{name:`value`}]};case vu:return{name:vu,properties:[{name:`ref`},{name:`selector`}]};case yu:return{name:yu,properties:[{name:`name`},{name:`predicates`,defaultValue:[]}]};case bu:return{name:bu,properties:[{name:`name`},{name:`predicates`,defaultValue:[]}]};case xu:return{name:xu,properties:[{name:`name`},{name:`predicates`,defaultValue:[]},{name:`styles`,defaultValue:[]}]};case Su:return{name:Su,properties:[{name:`id`},{name:`props`,defaultValue:[]},{name:`targets`}]};case Cu:return{name:Cu,properties:[{name:`id`},{name:`styles`,defaultValue:[]}]};case wu:return{name:wu,properties:[{name:`name`}]};case Tu:return{name:Tu,properties:[{name:`hex`}]};case Eu:return{name:Eu,properties:[{name:`customColor`},{name:`key`},{name:`themeColor`}]};case Du:return{name:Du,properties:[{name:`key`},{name:`value`}]};case Ou:return{name:Ou,properties:[{name:`key`},{name:`libicon`},{name:`value`}]};case ku:return{name:ku,properties:[{name:`key`},{name:`value`}]};case Au:return{name:Au,properties:[{name:`imported`},{name:`prev`}]};case ju:return{name:ju,properties:[{name:`imports`},{name:`project`}]};case Mu:return{name:Mu,properties:[{name:`to`}]};case Nu:return{name:Nu,properties:[{name:`inout`}]};case Pu:return{name:Pu,properties:[{name:`name`}]};case Fu:return{name:Fu,properties:[{name:`deployments`,defaultValue:[]},{name:`globals`,defaultValue:[]},{name:`imports`,defaultValue:[]},{name:`likec4lib`,defaultValue:[]},{name:`models`,defaultValue:[]},{name:`specifications`,defaultValue:[]},{name:`views`,defaultValue:[]}]};case Iu:return{name:Iu,properties:[{name:`icons`,defaultValue:[]}]};case Lu:return{name:Lu,properties:[{name:`key`},{name:`value`}]};case Ru:return{name:Ru,properties:[{name:`key`},{name:`title`},{name:`value`}]};case zu:return{name:zu,properties:[{name:`markdown`},{name:`text`}]};case Bu:return{name:Bu,properties:[{name:`values`,defaultValue:[]}]};case Vu:return{name:Vu,properties:[{name:`boolValue`,defaultValue:!1},{name:`key`},{name:`value`}]};case Hu:return{name:Hu,properties:[{name:`props`,defaultValue:[]}]};case Uu:return{name:Uu,properties:[{name:`elements`,defaultValue:[]},{name:`name`}]};case Wu:return{name:Wu,properties:[{name:`elements`,defaultValue:[]},{name:`name`}]};case Gu:return{name:Gu,properties:[{name:`folder`},{name:`name`},{name:`styles`,defaultValue:[]},{name:`views`,defaultValue:[]}]};case Ku:return{name:Ku,properties:[{name:`key`},{name:`value`,defaultValue:!1}]};case qu:return{name:qu,properties:[{name:`key`},{name:`value`}]};case Ju:return{name:Ju,properties:[{name:`key`},{name:`value`}]};case Yu:return{name:Yu,properties:[{name:`key`},{name:`value`}]};case Xu:return{name:Xu,properties:[{name:`key`},{name:`value`}]};case Zu:return{name:Zu,properties:[{name:`dotKind`},{name:`from`},{name:`isBidirectional`,defaultValue:!1},{name:`kind`}]};case Qu:return{name:Qu,properties:[{name:`key`},{name:`value`}]};case $u:return{name:$u,properties:[{name:`body`},{name:`description`},{name:`dotKind`},{name:`kind`},{name:`source`},{name:`tags`},{name:`target`},{name:`technology`},{name:`title`}]};case ed:return{name:ed,properties:[{name:`props`,defaultValue:[]},{name:`tags`}]};case td:return{name:td,properties:[{name:`subject`},{name:`where`}]};case nd:return{name:nd,properties:[{name:`custom`},{name:`subject`}]};case rd:return{name:rd,properties:[{name:`kind`}]};case id:return{name:id,properties:[{name:`key`},{name:`value`}]};case ad:return{name:ad,properties:[{name:`name`}]};case od:return{name:od,properties:[{name:`key`},{name:`value`}]};case sd:return{name:sd,properties:[{name:`key`},{name:`props`,defaultValue:[]}]};case cd:return{name:cd,properties:[{name:`alpha`},{name:`blue`},{name:`green`},{name:`red`}]};case ld:return{name:ld,properties:[{name:`key`},{name:`value`}]};case ud:return{name:ud,properties:[{name:`key`},{name:`value`}]};case dd:return{name:dd,properties:[{name:`color`},{name:`name`}]};case fd:return{name:fd,properties:[{name:`kind`},{name:`props`,defaultValue:[]},{name:`tags`}]};case pd:return{name:pd,properties:[{name:`kind`},{name:`props`,defaultValue:[]},{name:`tags`}]};case md:return{name:md,properties:[{name:`key`},{name:`value`}]};case hd:return{name:hd,properties:[{name:`kind`},{name:`props`,defaultValue:[]},{name:`tags`}]};case gd:return{name:gd,properties:[{name:`key`},{name:`value`}]};case _d:return{name:_d,properties:[{name:`colors`,defaultValue:[]},{name:`deploymentNodes`,defaultValue:[]},{name:`elements`,defaultValue:[]},{name:`name`},{name:`relationships`,defaultValue:[]},{name:`tags`,defaultValue:[]}]};case vd:return{name:vd,properties:[{name:`color`},{name:`tag`}]};case yd:return{name:yd,properties:[{name:`steps`,defaultValue:[]}]};case bd:return{name:bd,properties:[{name:`el`},{name:`parent`}]};case xd:return{name:xd,properties:[{name:`parent`},{name:`value`}]};case`Tag`:return{name:`Tag`,properties:[{name:`name`}]};case Sd:return{name:Sd,properties:[{name:`tag`}]};case Cd:return{name:Cd,properties:[{name:`prev`},{name:`values`,defaultValue:[]}]};case wd:return{name:wd,properties:[{name:`key`},{name:`value`}]};case Td:return{name:Td,properties:[{name:`view`}]};case Ed:return{name:Ed,properties:[{name:`key`},{name:`value`,defaultValue:!1}]};case Dd:return{name:Dd,properties:[{name:`direction`},{name:`nodeSep`},{name:`rankSep`}]};case Od:return{name:Od,properties:[{name:`predicate`}]};case kd:return{name:kd,properties:[{name:`style`}]};case Ad:return{name:Ad,properties:[{name:`groupRules`,defaultValue:[]},{name:`props`,defaultValue:[]},{name:`title`}]};case jd:return{name:jd,properties:[{name:`exprs`},{name:`isInclude`,defaultValue:!1}]};case Md:return{name:Md,properties:[{name:`targets`},{name:`value`}]};case Nd:return{name:Nd,properties:[{name:`props`,defaultValue:[]},{name:`targets`}]};case Pd:return{name:Pd,properties:[{name:`key`},{name:`value`}]};case Fd:return{name:Fd,properties:[{name:`left`},{name:`operator`},{name:`right`}]};case Id:return{name:Id,properties:[{name:`not`,defaultValue:!1},{name:`operator`},{name:`value`}]};case Ld:return{name:Ld,properties:[{name:`key`},{name:`not`,defaultValue:!1},{name:`operator`},{name:`value`}]};case Rd:return{name:Rd,properties:[{name:`value`}]};case zd:return{name:zd,properties:[{name:`not`,defaultValue:!1},{name:`operator`},{name:`value`}]};case Bd:return{name:Bd,properties:[{name:`not`,defaultValue:!1},{name:`operator`},{name:`value`}]};case Vd:return{name:Vd,properties:[{name:`key`},{name:`not`,defaultValue:!1},{name:`operator`},{name:`value`}]};case Hd:return{name:Hd,properties:[{name:`value`}]};case Ud:return{name:Ud,properties:[{name:`not`,defaultValue:!1},{name:`operator`},{name:`participant`},{name:`value`}]};case Wd:return{name:Wd,properties:[{name:`key`},{name:`not`,defaultValue:!1},{name:`operator`},{name:`participant`},{name:`value`}]};case Gd:return{name:Gd,properties:[{name:`not`,defaultValue:!1},{name:`operator`},{name:`participant`},{name:`value`}]};case Kd:return{name:Kd,properties:[{name:`not`,defaultValue:!1},{name:`operator`},{name:`value`}]};case qd:return{name:qd,properties:[{name:`isWildcard`,defaultValue:!1}]};case Jd:return{name:Jd,properties:[{name:`custom`},{name:`dotKind`},{name:`isBackward`,defaultValue:!1},{name:`kind`},{name:`source`},{name:`target`},{name:`title`}]};case Yd:return{name:Yd,properties:[{name:`custom`},{name:`dotKind`},{name:`kind`},{name:`source`},{name:`target`},{name:`title`}]};case Xd:return{name:Xd,properties:[{name:`kind`},{name:`steps`,defaultValue:[]},{name:`title`}]};case Zd:return{name:Zd,properties:[{name:`steps`,defaultValue:[]},{name:`title`}]};default:return{name:e,properties:[]}}}};const J=new LikeC4AstReflection;let Qd;const LikeC4Grammar=()=>Qd??=dt(`{"$type":"Grammar","isDeclared":true,"name":"LikeC4","rules":[{"$type":"ParserRule","entry":true,"name":"LikeC4Grammar","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"imports","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@16"},"arguments":[]}},{"$type":"Assignment","feature":"specifications","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@8"},"arguments":[]}},{"$type":"Assignment","feature":"models","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@19"},"arguments":[]}},{"$type":"Assignment","feature":"views","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@44"},"arguments":[]}},{"$type":"Assignment","feature":"globals","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@132"},"arguments":[]}},{"$type":"Assignment","feature":"deployments","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@117"},"arguments":[]}},{"$type":"Assignment","feature":"likec4lib","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@1"},"arguments":[]}}],"cardinality":"*"},"definesHiddenTokens":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LikeC4Lib","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"likec4lib"},{"$type":"Keyword","value":"{"},{"$type":"Keyword","value":"icons"},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"icons","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@2"},"arguments":[]},"cardinality":"+"},{"$type":"Keyword","value":"}"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LibIcon","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@171"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementKind","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Tag","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationshipKind","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CustomColor","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@174"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentNodeKind","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationRule","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"specification"}},{"$type":"Keyword","value":"{"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@9"},"arguments":[]}},{"$type":"Assignment","feature":"tags","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@12"},"arguments":[]}},{"$type":"Assignment","feature":"relationships","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@14"},"arguments":[]}},{"$type":"Assignment","feature":"colors","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@13"},"arguments":[]}},{"$type":"Assignment","feature":"deploymentNodes","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@11"},"arguments":[]}}],"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationElementKind","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"element"},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@3"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@138"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@155"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationElementStringProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"title"},{"$type":"Keyword","value":"description"},{"$type":"Keyword","value":"technology"},{"$type":"Keyword","value":"notation"},{"$type":"Keyword","value":"summary"}]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationDeploymentNodeKind","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"deploymentNode"},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@7"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@10"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@138"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@155"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationTag","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"tag"},{"$type":"Assignment","feature":"tag","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@4"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Group","elements":[{"$type":"Keyword","value":"color"},{"$type":"Assignment","feature":"color","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@168"},"arguments":[]}}],"cardinality":"?"},{"$type":"Keyword","value":"}"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationColor","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"color"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@6"},"arguments":[]}},{"$type":"Assignment","feature":"color","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@168"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationRelationshipKind","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"relationship"},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@5"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@138"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@158"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@15"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@141"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SpecificationRelationshipStringProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"title"},{"$type":"Keyword","value":"description"},{"$type":"Keyword","value":"technology"},{"$type":"Keyword","value":"notation"}]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ImportsFromPoject","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"import"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"imports","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}},{"$type":"Keyword","value":"}"}]},{"$type":"Assignment","feature":"imports","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@17"},"arguments":[]}}]},{"$type":"Keyword","value":"from"},{"$type":"Assignment","feature":"project","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Imported","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"imported","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@21"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"Imported"},"feature":"prev","operator":"="},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"imported","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@21"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}}],"cardinality":"*"},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Tags","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"values","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@159"},"arguments":[]},"cardinality":"+"},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"Tags"},"feature":"prev","operator":"="},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"values","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@159"},"arguments":[]},"cardinality":"*"}],"cardinality":"*"},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Model","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"model"}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@20"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ModelElement","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@25"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@34"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":true},"calledByName":false}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Element","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@3"},"deprecatedSyntax":false}},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@194"},"arguments":[]},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@3"},"deprecatedSyntax":false}}]}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}],"cardinality":"?"}],"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@22"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@34"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":false},"calledByName":false}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@155"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@138"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@142"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementStringProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"title"},{"$type":"Keyword","value":"description"},{"$type":"Keyword","value":"technology"},{"$type":"Keyword","value":"summary"}]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendElementOrRelation","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"extend"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"ExtendRelation"}},{"$type":"Assignment","feature":"source","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"dotKind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@160"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-["},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"deprecatedSyntax":false}},{"$type":"Keyword","value":"]->"}]},{"$type":"Keyword","value":"->"}]},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@28"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"ExtendElement"}},{"$type":"Assignment","feature":"element","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@31"},"arguments":[]}},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@26"},"arguments":[]}}]}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendElementBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@27"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@34"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":false},"calledByName":false}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@21"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendElementProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@138"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendRelationBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@29"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendRelationProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@138"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementRef","returnType":{"$ref":"#/interfaces@0"},"definition":{"$type":"Assignment","feature":"modelElement","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"StrictFqnElementRef","returnType":{"$ref":"#/interfaces@1"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"el","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@21"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Group","elements":[{"$type":"Action","type":{"$ref":"#/interfaces@1"},"feature":"parent","operator":"="},{"$type":"RuleCall","rule":{"$ref":"#/rules@191"},"arguments":[]},{"$type":"Assignment","feature":"el","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@21"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FqnRef","returnType":{"$ref":"#/interfaces@2"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@1"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Group","elements":[{"$type":"Action","type":{"$ref":"#/interfaces@2"},"feature":"parent","operator":"="},{"$type":"RuleCall","rule":{"$ref":"#/rules@191"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@1"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"StrictFqnRef","returnType":{"$ref":"#/interfaces@3"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@1"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Group","elements":[{"$type":"Action","type":{"$ref":"#/interfaces@3"},"feature":"parent","operator":"="},{"$type":"RuleCall","rule":{"$ref":"#/rules@191"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@1"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Relation","parameters":[{"$type":"Parameter","name":"isExplicit"}],"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","guardCondition":{"$type":"ParameterReference","parameter":{"$ref":"#/rules@34/parameters@0"}},"elements":[{"$type":"Assignment","feature":"source","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}}]},{"$type":"Group","guardCondition":{"$type":"Negation","value":{"$type":"ParameterReference","parameter":{"$ref":"#/rules@34/parameters@0"}}},"elements":[{"$type":"Assignment","feature":"source","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]},"cardinality":"?"}]}]},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"dotKind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@160"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-["},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"deprecatedSyntax":false}},{"$type":"Keyword","value":"]->"}]},{"$type":"Keyword","value":"->"}]},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"description","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Assignment","feature":"technology","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}],"cardinality":"?"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@35"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"wildcard":false},{"$type":"ParserRule","name":"RelationBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@36"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@37"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@76"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@38"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@138"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@39"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationStringProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"title"},{"$type":"Keyword","value":"technology"},{"$type":"Keyword","value":"description"}]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationStyleProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"style"}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@158"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MetadataProperty","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"metadata"},{"$type":"RuleCall","rule":{"$ref":"#/rules@40"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MetadataBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@41"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MetadataAttribute","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@42"},"arguments":[]}},{"$type":"Assignment","feature":"boolValue","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@183"},"arguments":[]}}]},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MetadataValue","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@43"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MetadataArray","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"["},{"$type":"Assignment","feature":"values","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"values","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}}],"cardinality":"*"},{"$type":"Keyword","value":"]"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ModelViews","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"views"}},{"$type":"Assignment","feature":"folder","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"views","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@45"},"arguments":[]}},{"$type":"Assignment","feature":"styles","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@69"},"arguments":[]}}],"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LikeC4ViewRule","returnType":{"$ref":"#/types@2"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@47"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@126"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@46"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementView","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"view"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"extends"},{"$type":"Assignment","feature":"extends","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@49"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Keyword","value":"of"},{"$type":"Assignment","feature":"viewOf","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}}]}],"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@51"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicView","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"dynamic"},{"$type":"Keyword","value":"view"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@52"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRef","definition":{"$type":"Assignment","feature":"view","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@2"},"deprecatedSyntax":false}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementViewRef","definition":{"$type":"Assignment","feature":"view","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@46"},"deprecatedSyntax":false}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewRef","definition":{"$type":"Assignment","feature":"view","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@47"},"deprecatedSyntax":false}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementViewBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@55"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"rules","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@58"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@53"},"arguments":[]},"cardinality":"*"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"steps","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@104"},"arguments":[]}},{"$type":"Assignment","feature":"rules","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@62"},"arguments":[]}}],"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@54"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@55"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewDisplayVariantProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"variant"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@163"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@56"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@138"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewStringProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"title"},{"$type":"Keyword","value":"description"}]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewLayoutDirection","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"TopBottom"},{"$type":"Keyword","value":"LeftRight"},{"$type":"Keyword","value":"BottomTop"},{"$type":"Keyword","value":"RightLeft"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRule","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@63"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@64"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@61"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@69"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@70"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@59"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleRank","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"rank"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@60"},"arguments":[]},"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"targets","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@90"},"arguments":[]}},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RankValue","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"same"},{"$type":"Keyword","value":"min"},{"$type":"Keyword","value":"max"},{"$type":"Keyword","value":"source"},{"$type":"Keyword","value":"sink"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleGroup","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"group"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@139"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@149"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@140"},"arguments":[]}]},"cardinality":"*"},{"$type":"Assignment","feature":"groupRules","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@63"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@61"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewRule","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@65"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@66"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@69"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@70"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRulePredicate","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"isInclude","operator":"?=","terminal":{"$type":"Keyword","value":"include"}},{"$type":"Keyword","value":"exclude"}]},{"$type":"Assignment","feature":"exprs","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@77"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleGlobalPredicateRef","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"global"},{"$type":"Keyword","value":"predicate"},{"$type":"Assignment","feature":"predicate","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@133"},"deprecatedSyntax":false}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewIncludePredicate","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"include"},{"$type":"Assignment","feature":"exprs","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@77"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewGlobalPredicateRef","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"global"},{"$type":"Keyword","value":"predicate"},{"$type":"Assignment","feature":"predicate","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@134"},"deprecatedSyntax":false}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleStyle","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"style"},{"$type":"Assignment","feature":"targets","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@90"},"arguments":[]}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@154"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@71"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleGlobalStyle","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"global"},{"$type":"Keyword","value":"style"},{"$type":"Assignment","feature":"style","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@135"},"deprecatedSyntax":false}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleStyleOrGlobalRef","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@67"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@68"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleAutoLayout","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"autoLayout"},{"$type":"Assignment","feature":"direction","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@57"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"rankSep","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@199"},"arguments":[]}},{"$type":"Assignment","feature":"nodeSep","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@199"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NotationProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"notation"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NotesProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"notes"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@173"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CustomElementProperties","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@75"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@24"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@71"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@72"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@154"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CustomRelationProperties","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@76"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@37"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@71"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@72"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@158"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@141"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"NavigateToProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"navigateTo"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@48"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationNavigateToProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"navigateTo"}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@50"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Expressions","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@78"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"Expressions"},"feature":"prev","operator":"="},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@78"},"arguments":[]},"cardinality":"?"}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExpressionV2","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@81"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@79"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FqnExprOrWith","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@80"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"FqnExprWith"},"feature":"subject","operator":"="},{"$type":"Keyword","value":"with"},{"$type":"Assignment","feature":"custom","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@73"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FqnExprOrWhere","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@83"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"FqnExprWhere"},"feature":"subject","operator":"="},{"$type":"Keyword","value":"where"},{"$type":"Assignment","feature":"where","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@91"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationExprOrWith","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@82"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"RelationExprWith"},"feature":"subject","operator":"="},{"$type":"Keyword","value":"with"},{"$type":"Assignment","feature":"custom","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@74"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationExprOrWhere","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@85"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"RelationExprWhere"},"feature":"subject","operator":"="},{"$type":"Keyword","value":"where"},{"$type":"Assignment","feature":"where","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@98"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FqnExpr","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WildcardExpression"}},{"$type":"Assignment","feature":"isWildcard","operator":"?=","terminal":{"$type":"Keyword","value":"*"}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"ElementTagExpression"}},{"$type":"Keyword","value":"element.tag"},{"$type":"RuleCall","rule":{"$ref":"#/rules@178"},"arguments":[]},{"$type":"Assignment","feature":"tag","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@159"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"ElementKindExpression"}},{"$type":"Keyword","value":"element.kind"},{"$type":"RuleCall","rule":{"$ref":"#/rules@178"},"arguments":[]},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@3"},"deprecatedSyntax":false}}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@84"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FqnRefExpr","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"ref","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}},{"$type":"Assignment","feature":"selector","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@188"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@189"},"arguments":[]}]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationExpr","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@86"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@88"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"InOutRelationExpr","inferredType":{"$type":"InferredType","name":"RelationExpr"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@87"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"InOutRelationExpr"},"feature":"inout","operator":"="},{"$type":"Keyword","value":"->"}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IncomingRelationExpr","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"->"},{"$type":"Assignment","feature":"to","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@83"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DirectedRelationExpr","inferredType":{"$type":"InferredType","name":"RelationExpr"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@89"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"DirectedRelationExpr"},"feature":"source","operator":"="},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@83"},"arguments":[]}}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"OutgoingRelationExpr","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"from","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@83"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"isBidirectional","operator":"?=","terminal":{"$type":"Keyword","value":"<->"}},{"$type":"Assignment","feature":"dotKind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@160"},"arguments":[]}},{"$type":"Keyword","value":"->"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-["},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Keyword","value":"]->"}]}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FqnExpressions","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@83"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"FqnExpressions"},"feature":"prev","operator":"="},{"$type":"Keyword","value":","},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@83"},"arguments":[]},"cardinality":"?"}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereElementExpression","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@92"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereElementOr","inferredType":{"$type":"InferredType","name":"WhereElementExpression"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@93"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereBinaryExpression"},"feature":"left","operator":"="},{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"or"}},{"$type":"Assignment","feature":"right","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@93"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereElementAnd","inferredType":{"$type":"InferredType","name":"WhereElementExpression"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@94"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereBinaryExpression"},"feature":"left","operator":"="},{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"and"}},{"$type":"Assignment","feature":"right","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@94"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereElementPrimary","inferredType":{"$type":"InferredType","name":"WhereElementExpression"},"definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"RuleCall","rule":{"$ref":"#/rules@91"},"arguments":[]},{"$type":"Keyword","value":")"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@95"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@96"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereElementNegation","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"not"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@91"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereElement","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereElementMetadata"}},{"$type":"Keyword","value":"metadata"},{"$type":"RuleCall","rule":{"$ref":"#/rules@191"},"arguments":[]},{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@177"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@97"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereElementTag"}},{"$type":"Keyword","value":"tag"},{"$type":"RuleCall","rule":{"$ref":"#/rules@177"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@159"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereElementKind"}},{"$type":"Keyword","value":"kind"},{"$type":"RuleCall","rule":{"$ref":"#/rules@177"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@5"},"deprecatedSyntax":false}}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MetadataFilterValue","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@183"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereRelationExpression","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@99"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereRelationOr","inferredType":{"$type":"InferredType","name":"WhereRelationExpression"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@100"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereBinaryExpression"},"feature":"left","operator":"="},{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"or"}},{"$type":"Assignment","feature":"right","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@100"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereRelationAnd","inferredType":{"$type":"InferredType","name":"WhereRelationExpression"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@101"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereBinaryExpression"},"feature":"left","operator":"="},{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"and"}},{"$type":"Assignment","feature":"right","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@101"},"arguments":[]}}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereRelationPrimary","inferredType":{"$type":"InferredType","name":"WhereRelationExpression"},"definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Keyword","value":"("},{"$type":"RuleCall","rule":{"$ref":"#/rules@98"},"arguments":[]},{"$type":"Keyword","value":")"}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@102"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@103"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereRelationNegation","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"not"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@98"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"WhereRelation","definition":{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereRelationParticipantMetadata"}},{"$type":"Assignment","feature":"participant","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@167"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@191"},"arguments":[]},{"$type":"Keyword","value":"metadata"},{"$type":"RuleCall","rule":{"$ref":"#/rules@191"},"arguments":[]},{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@177"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@97"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereRelationParticipantKind"}},{"$type":"Assignment","feature":"participant","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@167"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@191"},"arguments":[]},{"$type":"Keyword","value":"kind"},{"$type":"RuleCall","rule":{"$ref":"#/rules@177"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/types@5"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereRelationParticipantTag"}},{"$type":"Assignment","feature":"participant","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@167"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@191"},"arguments":[]},{"$type":"Keyword","value":"tag"},{"$type":"RuleCall","rule":{"$ref":"#/rules@177"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@159"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereRelationMetadata"}},{"$type":"Keyword","value":"metadata"},{"$type":"RuleCall","rule":{"$ref":"#/rules@191"},"arguments":[]},{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@177"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@97"},"arguments":[]}}],"cardinality":"?"}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereRelationKind"}},{"$type":"Keyword","value":"kind"},{"$type":"RuleCall","rule":{"$ref":"#/rules@177"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}}]},{"$type":"Group","elements":[{"$type":"Action","inferredType":{"$type":"InferredType","name":"WhereRelationTag"}},{"$type":"Keyword","value":"tag"},{"$type":"RuleCall","rule":{"$ref":"#/rules@177"},"arguments":[]},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@159"},"arguments":[]}}]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"StepStatement","returnType":{"$ref":"#/types@10"},"definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@107"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@113"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@109"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@115"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"StepsBlockFragment","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"steps","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@104"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SubflowKind","returnType":{"$ref":"#/types@11"},"definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"opt"},{"$type":"Keyword","value":"par"},{"$type":"Keyword","value":"parallel"},{"$type":"Keyword","value":"loop"},{"$type":"Keyword","value":"when"},{"$type":"Keyword","value":"if"},{"$type":"Keyword","value":"else"},{"$type":"Keyword","value":"break"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SubflowStep","returnType":{"$ref":"#/interfaces@5"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@106"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@105"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"StepsBlock","returnType":{"$ref":"#/interfaces@4"},"definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@105"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false,"$comment":"/**\\n * Represents a block of step statements, i.e. { ... }\\n */"},{"$type":"ParserRule","name":"TryStep","returnType":{"$ref":"#/types@12"},"definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@110"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"FinallyBlock","returnType":{"$ref":"#/interfaces@8"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@111"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","type":{"$ref":"#/interfaces@8"},"feature":"tryCatch","operator":"="},{"$type":"Keyword","value":"finally"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"finally","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@108"},"arguments":[]}}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CatchBlock","returnType":{"$ref":"#/interfaces@7"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@112"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","type":{"$ref":"#/interfaces@7"},"feature":"try","operator":"="},{"$type":"Keyword","value":"catch"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"catch","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@108"},"arguments":[]}}],"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"TryBlock","returnType":{"$ref":"#/interfaces@6"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"try"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"},{"$type":"RuleCall","rule":{"$ref":"#/rules@105"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"AltSteps","returnType":{"$ref":"#/interfaces@9"},"definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"alt"},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"branches","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@107"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"StepTarget","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"custom","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@74"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"StepSeries","returnType":{"$ref":"#/interfaces@12"},"definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@116"},"arguments":[]},{"$type":"Group","elements":[{"$type":"Action","type":{"$ref":"#/interfaces@12"},"feature":"source","operator":"="},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"dotKind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@160"},"arguments":[]}},{"$type":"Keyword","value":"->"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-["},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"deprecatedSyntax":false}},{"$type":"Keyword","value":"]->"}]}]},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"custom","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@74"},"arguments":[]},"cardinality":"?"}],"cardinality":"*"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Step","returnType":{"$ref":"#/interfaces@11"},"definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"source","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"isBackward","operator":"?=","terminal":{"$type":"Keyword","value":"<-"}},{"$type":"Assignment","feature":"dotKind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@160"},"arguments":[]}},{"$type":"Keyword","value":"->"},{"$type":"Group","elements":[{"$type":"Keyword","value":"-["},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"deprecatedSyntax":false}},{"$type":"Keyword","value":"]->"}]}]},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"custom","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@74"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ModelDeployments","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"deployment"}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@118"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@124"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":true},"calledByName":false}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@122"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentNode","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@7"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@194"},"arguments":[]},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@7"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}}]}]},{"$type":"Group","elements":[{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Assignment","feature":"summary","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@119"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentNodeBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@120"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@124"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":false},"calledByName":false}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@118"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeployedInstance","definition":{"$type":"Group","elements":[{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@194"},"arguments":[]}],"cardinality":"?"},{"$type":"Keyword","value":"instanceOf"},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@30"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Assignment","feature":"summary","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@121"},"arguments":[]},"cardinality":"?"},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeployedInstanceBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@23"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@124"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":false},"calledByName":false}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendDeployment","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"extend"},{"$type":"Assignment","feature":"deploymentNode","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@33"},"arguments":[]}},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@123"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ExtendDeploymentBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@27"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"elements","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@120"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@124"},"arguments":[{"$type":"NamedArgument","value":{"$type":"BooleanLiteral","true":true},"calledByName":false}]},{"$type":"RuleCall","rule":{"$ref":"#/rules@118"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentRelation","parameters":[{"$type":"Parameter","name":"isExplicit"}],"definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Group","guardCondition":{"$type":"ParameterReference","parameter":{"$ref":"#/rules@124/parameters@0"}},"elements":[{"$type":"Assignment","feature":"source","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}}]},{"$type":"Group","guardCondition":{"$type":"Negation","value":{"$type":"ParameterReference","parameter":{"$ref":"#/rules@124/parameters@0"}}},"elements":[{"$type":"Assignment","feature":"source","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]},"cardinality":"?"}]}]},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"dotKind","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@160"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Keyword","value":"-["},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"deprecatedSyntax":false}},{"$type":"Keyword","value":"]->"}]},{"$type":"Keyword","value":"->"}]},{"$type":"Assignment","feature":"target","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@32"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"description","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}},{"$type":"Assignment","feature":"technology","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"}],"cardinality":"?"}],"cardinality":"?"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@125"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentRelationBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@36"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentView","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"deployment"},{"$type":"Keyword","value":"view"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}},{"$type":"Assignment","feature":"body","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@127"},"arguments":[]},"cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentViewBody","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"tags","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@18"},"arguments":[]},"cardinality":"?"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@55"},"arguments":[]},"cardinality":"*"},{"$type":"Assignment","feature":"rules","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@128"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentViewRule","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@131"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@130"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@70"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@129"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ViewRuleAncestors","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"includeAncestors"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@183"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentViewRuleStyle","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"style"},{"$type":"Assignment","feature":"targets","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@90"},"arguments":[]}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@154"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@71"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DeploymentViewRulePredicate","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"isInclude","operator":"?=","terminal":{"$type":"Keyword","value":"include"}},{"$type":"Keyword","value":"exclude"}]},{"$type":"Assignment","feature":"expr","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@77"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Globals","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"Keyword","value":"global"}},{"$type":"Keyword","value":"{"},{"$type":"Group","elements":[{"$type":"Assignment","feature":"predicates","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@133"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@134"},"arguments":[]}]},"cardinality":"*"},{"$type":"Assignment","feature":"styles","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@136"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@137"},"arguments":[]}]},"cardinality":"*"}],"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"GlobalPredicateGroup","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"predicateGroup"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@200"},"arguments":[]}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"predicates","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@63"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"GlobalDynamicPredicateGroup","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"dynamicPredicateGroup"},{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@200"},"arguments":[]}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"predicates","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@65"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"GlobalStyleId","definition":{"$type":"Assignment","feature":"name","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@200"},"arguments":[]}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"GlobalStyle","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"style"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@135"},"arguments":[]}},{"$type":"Assignment","feature":"targets","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@90"},"arguments":[]}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@154"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@71"},"arguments":[]}]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"GlobalStyleGroup","definition":{"$type":"Group","elements":[{"$type":"Keyword","value":"styleGroup"},{"$type":"Assignment","feature":"id","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@135"},"arguments":[]}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"styles","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@67"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LinkProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"link"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@172"},"arguments":[]}},{"$type":"Assignment","feature":"title","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]},"cardinality":"?"},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ColorProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"color"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"themeColor","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@165"},"arguments":[]}},{"$type":"Assignment","feature":"customColor","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@6"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@174"},"arguments":[]},"deprecatedSyntax":false}}]},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"OpacityProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"opacity"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MultipleProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"multiple"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@183"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IconProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"icon"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"libicon","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@2"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@171"},"arguments":[]},"deprecatedSyntax":false}},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"none"},{"$type":"RuleCall","rule":{"$ref":"#/rules@172"},"arguments":[]}]}}]},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IconColorProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"iconColor"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"themeColor","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@165"},"arguments":[]}},{"$type":"Assignment","feature":"customColor","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@6"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@174"},"arguments":[]},"deprecatedSyntax":false}}]},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IconSizeProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"iconSize"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@150"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IconPositionValue","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"left"},{"$type":"Keyword","value":"right"},{"$type":"Keyword","value":"top"},{"$type":"Keyword","value":"bottom"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IconPositionProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"iconPosition"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@145"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ShapeProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"shape"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@166"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"BorderStyleValue","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@161"},"arguments":[]},{"$type":"Keyword","value":"none"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"BorderProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"border"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@148"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"SizeValue","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"xs"},{"$type":"Keyword","value":"sm"},{"$type":"Keyword","value":"md"},{"$type":"Keyword","value":"lg"},{"$type":"Keyword","value":"xl"},{"$type":"Keyword","value":"xsmall"},{"$type":"Keyword","value":"small"},{"$type":"Keyword","value":"medium"},{"$type":"Keyword","value":"large"},{"$type":"Keyword","value":"xlarge"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ShapeSizeProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"size"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@150"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"PaddingSizeProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"padding"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@150"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"TextSizeProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"textSize"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@150"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"StyleProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@139"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@147"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@149"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@140"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@142"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@143"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@141"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@151"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@152"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@153"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@144"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@146"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementStyleProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"style"}},{"$type":"Keyword","value":"{"},{"$type":"Assignment","feature":"props","operator":"+=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@154"},"arguments":[]},"cardinality":"*"},{"$type":"Keyword","value":"}"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LineProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Keyword","value":"line"}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@161"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ArrowProperty","definition":{"$type":"Group","elements":[{"$type":"Assignment","feature":"key","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"head"},{"$type":"Keyword","value":"tail"}]}},{"$type":"Keyword","value":":","cardinality":"?"},{"$type":"Assignment","feature":"value","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@162"},"arguments":[]}},{"$type":"Keyword","value":";","cardinality":"?"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationshipStyleProperty","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@139"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@156"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@157"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"TagRef","definition":{"$type":"Assignment","feature":"tag","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@4"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@176"},"arguments":[]},"deprecatedSyntax":false}},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RelationKindDotRef","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@192"},"arguments":[]},{"$type":"Assignment","feature":"kind","operator":"=","terminal":{"$type":"CrossReference","type":{"$ref":"#/rules@5"},"terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]},"deprecatedSyntax":false}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"LineOptions","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"solid"},{"$type":"Keyword","value":"dashed"},{"$type":"Keyword","value":"dotted"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ArrowType","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"none"},{"$type":"Keyword","value":"normal"},{"$type":"Keyword","value":"onormal"},{"$type":"Keyword","value":"dot"},{"$type":"Keyword","value":"odot"},{"$type":"Keyword","value":"diamond"},{"$type":"Keyword","value":"odiamond"},{"$type":"Keyword","value":"crow"},{"$type":"Keyword","value":"open"},{"$type":"Keyword","value":"vee"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewDisplayVariantValue","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"diagram"},{"$type":"Keyword","value":"sequence"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"DynamicViewFlowKeyword","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"alt"},{"$type":"Keyword","value":"opt"},{"$type":"Keyword","value":"par"},{"$type":"Keyword","value":"parallel"},{"$type":"Keyword","value":"loop"},{"$type":"Keyword","value":"when"},{"$type":"Keyword","value":"if"},{"$type":"Keyword","value":"else"},{"$type":"Keyword","value":"break"},{"$type":"Keyword","value":"try"},{"$type":"Keyword","value":"catch"},{"$type":"Keyword","value":"finally"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ThemeColor","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"primary"},{"$type":"Keyword","value":"secondary"},{"$type":"Keyword","value":"muted"},{"$type":"Keyword","value":"slate"},{"$type":"Keyword","value":"blue"},{"$type":"Keyword","value":"indigo"},{"$type":"Keyword","value":"sky"},{"$type":"Keyword","value":"red"},{"$type":"Keyword","value":"gray"},{"$type":"Keyword","value":"green"},{"$type":"Keyword","value":"amber"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ElementShape","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"rectangle"},{"$type":"Keyword","value":"component"},{"$type":"Keyword","value":"person"},{"$type":"Keyword","value":"browser"},{"$type":"Keyword","value":"mobile"},{"$type":"Keyword","value":"cylinder"},{"$type":"Keyword","value":"storage"},{"$type":"Keyword","value":"queue"},{"$type":"Keyword","value":"bucket"},{"$type":"Keyword","value":"document"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Participant","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"source"},{"$type":"Keyword","value":"target"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"ColorLiteral","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@169"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@170"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"RGBAColor","definition":{"$type":"Group","elements":[{"$type":"Alternatives","elements":[{"$type":"Keyword","value":"rgba"},{"$type":"Keyword","value":"rgb"}]},{"$type":"Keyword","value":"("},{"$type":"Assignment","feature":"red","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@199"},"arguments":[]}},{"$type":"Keyword","value":",","cardinality":"?"},{"$type":"Assignment","feature":"green","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@199"},"arguments":[]}},{"$type":"Keyword","value":",","cardinality":"?"},{"$type":"Assignment","feature":"blue","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@199"},"arguments":[]}},{"$type":"Keyword","value":",","cardinality":"?"},{"$type":"Assignment","feature":"alpha","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@198"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@199"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@195"},"arguments":[]}]},"cardinality":"?"},{"$type":"Keyword","value":")"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"HexColor","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@190"},"arguments":[]},{"$type":"Assignment","feature":"hex","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@201"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@199"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@200"},"arguments":[]}]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"IconId","dataType":"string","definition":{"$type":"RuleCall","rule":{"$ref":"#/rules@184"},"arguments":[]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Uri","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@185"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@186"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@187"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"MarkdownOrString","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"markdown","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@196"},"arguments":[]}},{"$type":"Assignment","feature":"text","operator":"=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@197"},"arguments":[]}}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"CustomColorId","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@200"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@166"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@162"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@161"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@167"},"arguments":[]},{"$type":"Keyword","value":"element"},{"$type":"Keyword","value":"model"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"Id","dataType":"string","definition":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@200"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@166"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@165"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@162"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@161"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@167"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@150"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@163"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@164"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@145"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@60"},"arguments":[]},{"$type":"Keyword","value":"element"},{"$type":"Keyword","value":"model"},{"$type":"Keyword","value":"group"},{"$type":"Keyword","value":"node"},{"$type":"Keyword","value":"deployment"},{"$type":"Keyword","value":"instance"},{"$type":"Keyword","value":"relationship"}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","name":"HashId","dataType":"string","definition":{"$type":"Group","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@190"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@175"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"fragment":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"EqOperator","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Alternatives","elements":[{"$type":"RuleCall","rule":{"$ref":"#/rules@194"},"arguments":[]},{"$type":"RuleCall","rule":{"$ref":"#/rules@193"},"arguments":[]}]}},{"$type":"Group","elements":[{"$type":"Assignment","feature":"operator","operator":"=","terminal":{"$type":"Keyword","value":"is"}},{"$type":"Assignment","feature":"not","operator":"?=","terminal":{"$type":"Keyword","value":"not"},"cardinality":"?"}]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"ParserRule","fragment":true,"name":"IsEqual","definition":{"$type":"Alternatives","elements":[{"$type":"Assignment","feature":"isEqual","operator":"?=","terminal":{"$type":"RuleCall","rule":{"$ref":"#/rules@194"},"arguments":[]}},{"$type":"RuleCall","rule":{"$ref":"#/rules@193"},"arguments":[]}]},"definesHiddenTokens":false,"entry":false,"hiddenTokens":[],"parameters":[],"wildcard":false},{"$type":"TerminalRule","hidden":true,"name":"BLOCK_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\/\\\\*[\\\\s\\\\S]*?\\\\*\\\\//"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"LINE_COMMENT","definition":{"$type":"RegexToken","regex":"/\\\\/\\\\/[^\\\\n\\\\r]*/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"WS","definition":{"$type":"RegexToken","regex":"/[\\\\t ]+/"},"fragment":false},{"$type":"TerminalRule","hidden":true,"name":"NL","definition":{"$type":"RegexToken","regex":"/[\\\\r\\\\n]+/"},"fragment":false},{"$type":"TerminalRule","name":"BOOLEAN","type":{"$type":"ReturnType","name":"boolean"},"definition":{"$type":"RegexToken","regex":"/\\\\b(true|false)\\\\b/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"LIB_ICON","definition":{"$type":"RegexToken","regex":"/(aws|azure|bootstrap|gcp|tech):[-\\\\w]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"URI_WITH_SCHEMA","definition":{"$type":"RegexToken","regex":"/\\\\w+:\\\\/{2}\\\\S+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"URI_RELATIVE","definition":{"$type":"RegexToken","regex":"/\\\\.{0,2}\\\\/[^\\\\/]\\\\S+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"URI_ALIAS","definition":{"$type":"RegexToken","regex":"/@[a-zA-Z0-9_-]*\\\\/[^\\\\s]+/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"DotUnderscore","definition":{"$type":"RegexToken","regex":"/\\\\b\\\\._(?![_a-zA-Z])/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"DotWildcard","definition":{"$type":"RegexToken","regex":"/\\\\b\\\\.\\\\*{1,2}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Hash","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"#"}},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"StickyDot","definition":{"$type":"RegexToken","regex":"/\\\\b\\\\./"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Dot","definition":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"."}},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"NotEqual","definition":{"$type":"RegexToken","regex":"/\\\\!\\\\={1,2}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Eq","definition":{"$type":"RegexToken","regex":"/\\\\={1,2}/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Percent","definition":{"$type":"RegexToken","regex":"/\\\\b\\\\d+%/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"MarkdownString","definition":{"$type":"TerminalAlternatives","elements":[{"$type":"TerminalGroup","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"'''"}},{"$type":"UntilToken","terminal":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"'''"}}}]},{"$type":"TerminalGroup","elements":[{"$type":"CharacterRange","left":{"$type":"Keyword","value":"\\"\\"\\""}},{"$type":"UntilToken","terminal":{"$type":"CharacterRange","left":{"$type":"Keyword","value":"\\"\\"\\""}}}]}]},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"String","definition":{"$type":"RegexToken","regex":"/\\"(?:[^\\"\\\\\\\\]|\\\\\\\\.)*\\"|'(?:[^'\\\\\\\\]|\\\\\\\\.)*'/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Float","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/\\\\b\\\\d+\\\\.\\\\d+\\\\b/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Number","type":{"$type":"ReturnType","name":"number"},"definition":{"$type":"RegexToken","regex":"/\\\\b\\\\d+\\\\b/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"IdTerminal","definition":{"$type":"RegexToken","regex":"/([a-zA-Z]|_+[a-zA-Z0-9])[-\\\\w]*/"},"fragment":false,"hidden":false},{"$type":"TerminalRule","name":"Hex","definition":{"$type":"RegexToken","regex":"/[a-fA-F0-9]{3,}(?![-_g-zG-Z])/"},"fragment":false,"hidden":false}],"interfaces":[{"$type":"Interface","name":"ElementRef","attributes":[{"$type":"TypeAttribute","name":"modelElement","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"StrictFqnElementRef","attributes":[{"$type":"TypeAttribute","name":"parent","isOptional":true,"type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@1"}}},{"$type":"TypeAttribute","name":"el","type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@21"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"FqnRef","attributes":[{"$type":"TypeAttribute","name":"parent","isOptional":true,"type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@2"}}},{"$type":"TypeAttribute","name":"value","type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/types@1"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"StrictFqnRef","attributes":[{"$type":"TypeAttribute","name":"parent","isOptional":true,"type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@3"}}},{"$type":"TypeAttribute","name":"value","type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/types@1"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"StepsBlock","attributes":[{"$type":"TypeAttribute","name":"steps","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/types@10"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"SubflowStep","superTypes":[{"$ref":"#/interfaces@4"}],"attributes":[{"$type":"TypeAttribute","name":"kind","type":{"$type":"SimpleType","typeRef":{"$ref":"#/types@11"}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}]},{"$type":"Interface","name":"TryBlock","superTypes":[{"$ref":"#/interfaces@4"}],"attributes":[{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}}]},{"$type":"Interface","name":"CatchBlock","attributes":[{"$type":"TypeAttribute","name":"try","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@6"}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"catch","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@4"}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"FinallyBlock","attributes":[{"$type":"TypeAttribute","name":"tryCatch","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@6"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@7"}}]},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"finally","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@4"}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"AltSteps","attributes":[{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"branches","type":{"$type":"ArrayType","elementType":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@5"}}},"isOptional":false}],"superTypes":[]},{"$type":"Interface","name":"AbstractStep","attributes":[{"$type":"TypeAttribute","name":"kind","isOptional":true,"type":{"$type":"ReferenceType","referenceType":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@5"}}}},{"$type":"TypeAttribute","name":"dotKind","isOptional":true,"type":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@160"}}},{"$type":"TypeAttribute","name":"target","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@0"}},"isOptional":false},{"$type":"TypeAttribute","name":"title","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"string"}},{"$type":"TypeAttribute","name":"custom","isOptional":true,"type":{"$type":"SimpleType","typeRef":{"$ref":"#/rules@74"}}}],"superTypes":[]},{"$type":"Interface","name":"Step","superTypes":[{"$ref":"#/interfaces@10"}],"attributes":[{"$type":"TypeAttribute","name":"source","type":{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@0"}},"isOptional":false},{"$type":"TypeAttribute","name":"isBackward","isOptional":true,"type":{"$type":"SimpleType","primitiveType":"boolean"}}],"$comment":"/**\\n * A single step in a dynamic view flow\\n * source -> target\\n */"},{"$type":"Interface","name":"StepSeries","superTypes":[{"$ref":"#/interfaces@10"}],"attributes":[{"$type":"TypeAttribute","name":"source","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@11"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@12"}}]},"isOptional":false}],"$comment":"/**\\n * A series of steps in a dynamic view flow\\n * source -> target1 -> target2 -> ...\\n */"}],"types":[{"$type":"Type","name":"ModelReferenceable","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@21"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@17"}}]}},{"$type":"Type","name":"Referenceable","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@118"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@120"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@21"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@17"}}]}},{"$type":"Type","name":"LikeC4View","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@46"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@47"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@126"}}]}},{"$type":"Type","name":"StringProperty","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@24"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@56"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@37"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@41"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@10"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@15"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@71"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@72"}}]}},{"$type":"Type","name":"AnyProperty","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/types@3"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@55"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@53"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@23"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@36"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@158"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@75"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@154"}}]}},{"$type":"Type","name":"DeploymentNodeOrElementKind","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@3"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@7"}}]}},{"$type":"Type","name":"WhereTagEqual","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@96/definition/elements@1/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@103/definition/elements@5/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@103/definition/elements@2/elements@0/inferredType"}}]}},{"$type":"Type","name":"WhereKindEqual","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@96/definition/elements@2/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@103/definition/elements@4/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@103/definition/elements@1/elements@0/inferredType"}}]}},{"$type":"Type","name":"WhereMetadataEqual","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@96/definition/elements@0/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@103/definition/elements@3/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@103/definition/elements@0/elements@0/inferredType"}}]}},{"$type":"Type","name":"WhereExpression","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@91"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@98"}}]}},{"$type":"Type","name":"StepStatement","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/types@13"}},{"$type":"SimpleType","typeRef":{"$ref":"#/types@12"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@9"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@5"}}]}},{"$type":"Type","name":"SubflowKind","type":{"$type":"UnionType","types":[{"$type":"SimpleType","stringType":"opt"},{"$type":"SimpleType","stringType":"par"},{"$type":"SimpleType","stringType":"parallel"},{"$type":"SimpleType","stringType":"loop"},{"$type":"SimpleType","stringType":"when"},{"$type":"SimpleType","stringType":"if"},{"$type":"SimpleType","stringType":"else"},{"$type":"SimpleType","stringType":"break"}]}},{"$type":"Type","name":"TryStep","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@6"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@7"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@8"}}]}},{"$type":"Type","name":"StepOrSeries","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@11"}},{"$type":"SimpleType","typeRef":{"$ref":"#/interfaces@12"}}]}},{"$type":"Type","name":"DeploymentElement","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@118"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@120"}}]}},{"$type":"Type","name":"FqnReferenceable","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/types@1"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@21"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@25/definition/elements@1/elements@1/elements@0/inferredType"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@122"}}]}},{"$type":"Type","name":"SizeProperty","type":{"$type":"UnionType","types":[{"$type":"SimpleType","typeRef":{"$ref":"#/rules@151"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@152"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@153"}},{"$type":"SimpleType","typeRef":{"$ref":"#/rules@144"}}]}}],"definesHiddenTokens":false,"hiddenTokens":[],"imports":[],"usedGrammars":[]}`),$d={languageId:`likec4`,fileExtensions:[`.c4`,`.likec4`,`.like-c4`],caseInsensitive:!1,mode:`production`},ef={skipValidations:!0,recoveryEnabled:!0,nodeLocationTracking:`full`},tf={AstReflection:()=>new LikeC4AstReflection},nf={Grammar:()=>LikeC4Grammar(),LanguageMetaData:()=>$d,parser:{ParserConfig:()=>ef}},rf=Symbol.for(`idattr`),af={writeId(e,t){return e[rf]=t,e},readId(e){return e[rf]}},of={writeId(e,t){return I(t)?e[rf]=void 0:e[rf]=t,e},readId(e){return e[rf]}};function isLikeC4LangiumDocument(e){return e?.textDocument.languageId===$d.languageId}function isLikeC4UserDocument(e){return isLikeC4LangiumDocument(e)&&isNotLikeC4Builtin(e)}function parseMarkdownAsString(e){return e?.markdown||e?.text}function parseAstPercent(e){let t=parseFloat(e);return isNaN(t)?100:Nn(t,{min:0,max:100})}function parseAstOpacityProperty({value:e}){return parseAstPercent(e)}function parseAstSizeValue({value:e}){switch(e){case`xs`:case`sm`:case`md`:case`lg`:case`xl`:return e;case`xsmall`:return`xs`;case`small`:return`sm`;case`medium`:return`md`;case`large`:return`lg`;case`xlarge`:return`xl`;default:bi(e)}}function parseAstIconPositionValue({value:e}){switch(e){case`left`:case`right`:case`top`:case`bottom`:return e;default:bi(e)}}function toRelationshipStyle(e,t){let r={};if(!e||e.length===0)return r;for(let i of e)if(t(i))switch(!0){case isColorProperty(i):{let e=toColor(i);R(e)&&(r.color=e);break}case isLineProperty(i):r.line=i.value;break;case isArrowProperty(i):switch(i.key){case`head`:r.head=i.value;break;case`tail`:r.tail=i.value;break;default:bi(i)}break;default:bi(i)}return r}function toColor(e){return e?.themeColor??e?.customColor?.$refText}function toAutoLayout(e){let t=e.rankSep,r=e.nodeSep,i;switch(e.direction){case`TopBottom`:i=`TB`;break;case`BottomTop`:i=`BT`;break;case`LeftRight`:i=`LR`;break;case`RightLeft`:i=`RL`;break;default:bi(e.direction)}return{direction:i,...r&&{nodeSep:r},...t&&{rankSep:t}}}function toAstViewLayoutDirection(e){switch(e){case`TB`:return`TopBottom`;case`BT`:return`BottomTop`;case`LR`:return`LeftRight`;case`RL`:return`RightLeft`;default:bi(e)}}function getViewRulePredicateContainer(e){return Ge(e,e=>isViewRulePredicate(e)||isDeploymentViewRulePredicate(e)||isDynamicViewIncludePredicate(e))}const _isModel=e=>isModel(e)||isElementBody(e)||isExtendElementBody(e)||isElementViewBody(e)||isDynamicViewBody(e)||isElementRef(e),sf=t(e=>isModelDeployments(e)||isDeploymentViewBody(e)||isDeploymentNodeBody(e)||isExtendDeploymentBody(e)||isDeployedInstanceBody(e),`_isDeployment`);function isFqnRefInsideGlobals(e){for(;;){if(sf(e)||_isModel(e))return!1;if(isGlobals(e)||isModelViews(e))return!0;if(e.$container)e=e.$container;else return!1}}function isFqnRefInsideModel(e){for(;;){if(sf(e))return!1;if(_isModel(e))return!0;if(e.$container)e=e.$container;else return!1}}function isFqnRefInsideDeployment(e){for(;;){if(_isModel(e))return!1;if(sf(e))return!0;if(e.$container)e=e.$container;else return!1}}function elementRef(e){try{let t=isStrictFqnElementRef(e)?e.el.ref:e.modelElement.value.ref;return t?.$type===`Imported`&&(t=t.imported.ref),t?.$type===`Element`?t:void 0}catch{return}}function readStrictFqn(e){let t=[e.$type===`StrictFqnRef`?e.value.$refText:e.el.$refText],r=e.parent;for(;r;)t.push(r.$type===`StrictFqnRef`?r.value.$refText:r.el.$refText),r=r.parent;return t.length===1?t[0]:t.reverse().join(`.`)}function referenceableParent(e){for(;e.parent;)e=e.parent;return e.value.ref??null}function instanceRef(e){let t;for(;t=e.value?.ref;){if(isDeploymentNode$1(t))return null;if(isDeployedInstance(t))return t;if(I(e.parent))return null;e=e.parent}return null}function importsRef(e){let t=referenceableParent(e);return t?.$type===`Imported`?t:null}function isReferenceToDeploymentModel(e){let t;for(;t=e.value?.ref;){if(isDeploymentElement(t))return!0;if(I(e.parent))return!1;e=e.parent}return!1}var IndexManager=class extends ve{services;constructor(e){super(e),this.services=e}async updateContent(e,t){e.likec4ProjectId=this.services.workspace.ProjectsManager.ownerProjectId(e),await super.updateContent(e,t)}projectElements(e,t,r){let i=this.services.workspace.ProjectsManager;return lt(this.symbolIndex.keys()).filter(t=>r&&!r.has(t)?!1:i.isIncluded(e,t)).flatMap(e=>this.getFileDescriptions(e,t))}},LangiumDocuments=class extends mt{services;constructor(e){super(e),this.services=e}get projectsManager(){return this.services.workspace.ProjectsManager}addDocument(e){let t=e.uri.toString();if(this.documentMap.has(t))throw Error(`A document with the URI '${t}' is already present.`);isLikeC4UserDocument(e)&&(e.likec4ProjectId=this.projectsManager.ownerProjectId(e));let r=[...this.documentMap.values()],i=r.at(-1);if(!i||compareByUri(i,e)<=0){this.documentMap.set(t,e);return}r.push(e),r.sort(compareByUri),this.documentMap.clear();for(let e of r)this.documentMap.set(e.uri.toString(),e)}getDocument(e){let t=super.getDocument(e);return isLikeC4UserDocument(t)&&(t.likec4ProjectId=this.projectsManager.ownerProjectId(t)),t}get userDocuments(){return lt(this.documentMap.values()).filter(e=>isLikeC4UserDocument(e)&&!this.projectsManager.isExcluded(e))}get all(){return lt(this.documentMap.values()).map(e=>(isLikeC4UserDocument(e)&&(e.likec4ProjectId=this.projectsManager.ownerProjectId(e)),e))}projectDocuments(e){let t=this.services.workspace.ProjectsManager;return lt(this.documentMap.values()).filter(r=>isLikeC4UserDocument(r)&&t.isIncluded(e,r)?(r.likec4ProjectId=e,!0):!1)}groupedByProject(){let e=this.services.workspace.ProjectsManager;return L(this.userDocuments.toArray(),P(t=>(t.likec4ProjectId=e.ownerProjectId(t),t)),$t(In(`likec4ProjectId`)))}resetProjectIds(){let e=[];for(let t of this.documentMap.values())delete t.likec4ProjectId,isLikeC4UserDocument(t)&&!this.projectsManager.isExcluded(t)&&e.push(t.uri);return e}},cf=e(Zn(),1);const Y=q.getChild(`projects`);function isLangiumDocument(e){return typeof e==`object`&&`uri`in e&&`textDocument`in e}function normalizeUri(e){return isLangiumDocument(e)?e.uri.toString():typeof e==`string`?St(e,{acceptRelative:!1,strict:!0})?e:b.file(e).toString():e.toString()}const lf=/^\/?([A-Za-z]):(?=\/|$)/;function normalizeWindowsDrivePath(e){return e.replace(lf,(e,t)=>`/${t.toLowerCase()}:`)}function uriPathForMatcher(e){return b.isUri(e)?normalizeWindowsDrivePath(e.path):normalizeWindowsDrivePath(b.parse(e).path)}const uf=di(`/`,!0),compareUri=(e,t)=>uf(_t(e.path),_t(t.path));function isParentFolderFor(e){return t=>e.startsWith(gi(t)?t:t.folder)}function _overlaps(e,t){let r=gi(e)?e:e.folder,i=gi(t)?t:t.folder;return r===i||r.startsWith(i)||i.startsWith(r)}function overlaps(...e){return An(_overlaps,e)}function _includes(e,t){return t.startsWith(e.folder)||e.includePaths?.some(isParentFolderFor(t))?!_excludes(e,t):!1}function _isInScope(e,t){return t.startsWith(e.folder)||(e.includePaths?.some(isParentFolderFor(t))??!1)}function _excludes(e,t){return e.exclude?.(uriPathForMatcher(t))??!1}function includes(...e){return An(_includes,e)}function isInScope(...e){return An(_isInScope,e)}function excludes(...e){return An(_excludes,e)}function ProjectFolder(e){return e=normalizeUri(e),yt(e)}const compareProjectByFolder=(e,t)=>compareUri(e.folderUri,t.folderUri);function ensureProjectsOrder(e){return e.length<=1?e:kn(e,compareProjectByFolder)}const df={id:`default`,config:{name:`default`,exclude:[`**/node_modules/**`]},exclude:(0,cf.default)(`**/node_modules/**`,{dot:!0}),includeConfig:{paths:[],maxDepth:3,fileThreshold:30}};function isExcludedByDefault(e){return df.exclude(uriPathForMatcher(e))}function parseRegisterOptions(e){if(`configUri`in e){W(!an(e.configUri),`configUri is emptyish`);let t=b.isUri(e.configUri)?e.configUri:b.parse(normalizeUri(e.configUri)),r=ProjectFolder(S.dirname(t));return{configUri:t,folder:r,folderUri:b.parse(r)}}W(!an(e.folderUri),`folderUri is emptyish`);let t=ProjectFolder(e.folderUri),r=b.parse(t);return{configUri:S.joinPath(r,`likec4.config.json`),folder:t,folderUri:r}}var ff=class ProjectsManager extends ADisposable{services;static DefaultProjectId=df.id;#e=[];#t=void 0;#n=void 0;#r=[];#i=new ai(e=>{if(e===ProjectsManager.DefaultProjectId){let t=this.getWorkspaceFolder(),r=S.joinPath(t,`likec4.config.json`),i=ProjectFolder(t);return{id:e,config:df.config,folder:i,folderUri:b.parse(i),configUri:r,exclude:df.exclude,includeConfig:{...df.includeConfig}}}return yi(this.#r.find(t=>t.id===e),`Project ${e} not found`)});#a=new ai(e=>{if(this.isExcludedByWorkspace(e))return!0;let t=this.findOwnerProject(e);return t?excludes(t,e)?!this.#r.some(includes(e)):!1:this.#r.some(isInScope(e))?!this.#r.some(includes(e)):isExcludedByDefault(e)});#o=new ai(e=>this.findOwnerProject(e)??null);constructor(e){super(),this.services=e,this.onDispose(ae.create(()=>{this.#e.length=0})),Y.trace`created`}isExcludedByWorkspace(e){return this.#n?(b.isUri(e)&&(e=normalizeUri(e)),this.#n(uriPathForMatcher(e))):!1}setWorkspaceExcludePatterns(e){try{if(!Array.isArray(e)){this.#n=void 0;return}let t=L(e,N(R),P(e=>(e=normalizeWindowsDrivePath(e),!Wt(e)&&!e.startsWith(`**`)&&(e=xt(`**`,e)),e)));if(!k(t,1)){this.#n=void 0;return}Y.debug`set workspace exclude patterns: ${t}`,this.#n=(0,cf.default)(t,{dot:!0}),this.clearCaches()}catch(e){Y.warn(`Failed to set workspace exclude patterns`,{error:e}),this.#n=void 0}}get defaultProjectId(){if(this.#t)return this.#t;if(!(this.#r.length>1))return k(this.#r,1)?this.#r[0].id:ProjectsManager.DefaultProjectId}set defaultProjectId(e){if(e!==this.#t){if(this.#t=void 0,!e||e===ProjectsManager.DefaultProjectId){Y.debug`reset default project ID`;return}W(this.#r.find(t=>t.id===e),`Project "${e}" not found`),Y.debug`set default project ID to ${e}`,this.#t=e}}get default(){return this.#i.get(this.defaultProjectId??ProjectsManager.DefaultProjectId)}get all(){if(k(this.#r,1)){let e=[...P(this.#r,In(`id`)),df.id];if(this.#t){let t=e.findIndex(e=>e===this.#t);t>0&&(e.splice(t,1),e.unshift(this.#t))}return e}return[df.id]}getProject(e){let t=typeof e==`string`?e:this.ownerProjectId(e);return this.#i.get(t)}findOverlaped(e){if(this.#r.length===0)return[];let t=overlaps(ProjectFolder(e)),isInsideOrIncludes=e=>t(e)||!!e.includePaths&&!!fn(e.includePaths,t);return this.#r.filter(isInsideOrIncludes)}ensureProjectId(e){return e===ProjectsManager.DefaultProjectId?this.defaultProjectId??ProjectsManager.DefaultProjectId:e?(W(this.#r.some(t=>e===t.id),`Project ID ${e} is not registered`),e):yi(this.defaultProjectId,()=>`Specify exact project, known: [${P(this.#r,In(`id`)).join(`, `)}]`)}ensureProject(e){return e=this.ensureProjectId(e),this.getProject(e)}hasMultipleProjects(){return this.#r.length>1}isExcluded(...e){let t=e.length===1?e[0]:e[1];return isLangiumDocument(t)&&isLikeC4Builtin(t)?!0:e.length===1?this.#a.get(normalizeUri(t)):excludes(this.#i.get(e[0]),normalizeUri(t))}isIncluded(e,t){let r=normalizeUri(t);return this.isExcludedByWorkspace(r)?!1:k(this.#r,1)?e===ProjectsManager.DefaultProjectId?!this.#o.get(r)&&!this.#a.get(r):includes(this.#i.get(e),r):!isExcludedByDefault(r)}async registerConfigFile(e,t){if(this.isExcludedByWorkspace(e))throw Error(`Skipping project config, path ${e.fsPath} is excluded by editor settings`);if(isExcludedByDefault(normalizeUri(e)))throw Error(`Failed to register project config, path ${e.fsPath} is excluded by default: ${df.config.exclude.map(e=>`"${e}"`).join(`, `)}`);try{let r=await this.services.workspace.FileSystemProvider.loadProjectConfig(e);return await this.registerProject({config:r,configUri:e},t)}catch(t){if(!se(t))throw p(t,`Failed to register project config ${e.fsPath}:\n`);return Promise.reject(t)}}async registerProject(e,t){let r=Lt.validate(e.config),{configUri:i,folder:a,folderUri:o}=parseRegisterOptions(e),s=Lt.normalizeInclude(r.include),c=this.#r.find(e=>e.folder===a);return c?(c.config.name!==r.name&&(Y.info`project name changed from ${c.config.name} to ${r.name}`,Y.info`remove ${c.id}`,c.id=this.uniqueProjectId(r.name),Y.info`add ${c.id}`),this.warnIfConfigOverride(c,i),c.config=r,c.folder=a,c.folderUri=o,c.configUri=i,c.includeConfig=s):(c={id:this.uniqueProjectId(r.name),config:r,folder:a,configUri:i,folderUri:o,includeConfig:s},this.#r=ensureProjectsOrder([...this.#r,c]),Y.info`add ${c.id}`),safeCall(()=>this.updateIncludesExcludes(c)),this.isInitiatingOrReloading?c:(this.clearCaches(),this.notifyListeners(),await this.rebuildProject(c.id,t).catch(e=>se(e)?Promise.reject(e):(Y.warn(`Failed to rebuild project {projectId} after config change`,{projectId:c.id,error:e}),Promise.resolve())),c)}ownerProjectId(e){return this.#o.get(normalizeUri(e))?.id??this.#t??ProjectsManager.DefaultProjectId}findOwnerProject(e){if(this.#r.length===0)return;let t=isParentFolderFor(e);return this.#r.find(t)??this.#r.find(includes(e))??void 0}relativePath(e){let t=normalizeUri(e),r=this.#o.get(t);return r?S.relative(r.folderUri,b.parse(t)):t}get isInitiatingOrReloading(){return!!this.#s||!this.services.workspace.WorkspaceManager.isReady}#s=null;async reloadProjects(e){return this.#s?(Y.debug`reload projects is already in progress, waiting`,await this.#s.catch(()=>{})):(Y.debug`schedule reload projects`,this.#s=Promise.resolve().then(()=>this._reloadProjects(e)).catch(e=>(se(e)||Y.warn(`Failed to reload projects`,{error:e}),Promise.reject(e))).finally(()=>{this.#s=null}),await this.#s)}async _reloadProjects(e){let t=this.services.workspace.WorkspaceManager.workspaceFolders;if(!t||t.length===0){Y.warn(`Failed to reloadProjects, no workspace folders found`);return}Y.debug`start reload projects`;let r=[];for(let e of t){let t=b.parse(e.uri);Y.debug`scan projects in ${t.fsPath}`;try{let e=await this.services.workspace.FileSystemProvider.scanProjectFiles(t);for(let i of e)Y.debug`found config ${S.relative(t,i.uri)}`,r.push(i.uri)}catch(e){Y.warn(`Failed on scanProjectFiles in {folder}`,{folder:t.fsPath,error:e})}}if(r.length===0){if(this.#r.length===0){Y.warning(`No config files found`);return}Y.warning(`no config files found, but {count} projects were registered before`,{count:this.#r.length}),Y.warning(`reset`)}r.sort(compareUri);let i=new Map(this.#r.map(e=>[e.configUri.toString(),e]));this.#r=[],this.#i.clear();for(let e of r)try{await this.registerConfigFile(e)}catch(t){Y.warn(c(t));let r=i.get(e.toString());r&&(Y.debug`Update failed, restore project ${r.id}`,await this.registerProject(r).catch(e=>{Y.warn(`fail to restore project ${r.id}, ignoring`,{error:e})}))}this.clearCaches(),this.notifyListeners(),await this.services.workspace.WorkspaceManager.rebuildAll(e)}uniqueProjectId(e){let t=new Set(P(this.#r,In(`id`))),r=e;if(!t.has(r))return r;Y.warn`Project "${e}" already exists, generating unique ID`;let i=1;for(;t.has(r);)r=`${e}-${i++}`;return r}clearCaches(){Y.trace(`clearCaches`),this.#t&&!this.#r.some(e=>e.id===this.#t)&&(this.#t=void 0),this.#i.clear(),this.#o.clear(),this.#a.clear()}async rebuildProject(e,t){let r=this.#r.find(t=>t.id===e);if(!r)return e===ProjectsManager.DefaultProjectId?Y.info`Rebuilding all documents `:Y.warn`Project ${e} not found, rebuilding all`,await this.services.workspace.WorkspaceManager.rebuildAll(t);let i=Y.getChild(r.id),_includes=e=>includes(r,normalizeUri(e)),a=this.services.workspace.LangiumDocuments.userDocuments.filter(_includes).map(e=>e.uri).toArray();if(a.length===0){i.trace`no documents found for project ${r.id}, skipping rebuild`;return}i.info`rebuild project documents: ${a.length}`,this.clearCaches(),await this.services.workspace.DocumentBuilder.update(a,[],t).catch(e=>{i.warn(`Failed to rebuild project`,{error:e})})}getAllIncludePaths(){let e=[];for(let t of this.#r)if(t.includePaths)for(let r of t.includePaths)e.push({projectId:t.id,includePath:r.uri,includeConfig:t.includeConfig});return e}onProjectsUpdate(e){return this.#e.push(e),ae.create(()=>{let t=this.#e.indexOf(e);t>=0&&this.#e.splice(t,1)})}getWorkspaceFolder(){try{return this.services.workspace.WorkspaceManager.workspaceUri}catch(e){return Y.warn(`Failed to get workspace URI, using default folder`,{error:e}),b.file(`/`)}}notifyListeners(){for(let e of[...this.#e])try{e()}catch(e){Y.warn(c(e))}}updateIncludesExcludes(e){let t=e.config;delete e.includePaths,delete e.exclude;let r=e.includeConfig.paths;k(r,1)&&(e.includePaths=P(r,t=>{let r=S.resolvePath(e.folderUri,t);return{uri:r,folder:ProjectFolder(r)}}),Y.debug`project ${e.id} include paths: ${e.includePaths.map(e=>e.uri.fsPath).join(`, `)}`);let i=t.exclude;if(I(i)?e.exclude=df.exclude:k(i,1)&&(e.exclude=(0,cf.default)([e.folderUri,...P(e.includePaths??[],In(`uri`))].flatMap(e=>P(i,t=>(!vt(t)&&!t.startsWith(`**`)&&(t=xt(`**`,t)),Ct(ht(uriPathForMatcher(e),t))))),{contains:!0,dot:!0})),!e.includePaths)return e;for(let t of e.includePaths)for(let r of this.#r)r.id!==e.id&&(overlaps(t,r)&&Y.warn(`Project "{projectId}" include path "{includePath}" overlaps with project "{otherProjectId}" folder. Files in overlapping areas will only belong to one project.`,{projectId:e.id,includePath:t.folder,otherProjectId:r.id}),r.includePaths?.forEach(i=>{overlaps(t,i)&&Y.warn(`Project "{projectId}" include path "{includePath}" overlaps with project "{otherProjectId}" include path "{otherIncludePath}". Files in overlapping areas will only belong to one project.`,{projectId:e.id,includePath:t.folder,otherProjectId:r.id,otherIncludePath:i.folder})}));return e}warnIfConfigOverride(e,t){try{let[r,i]=P([e.configUri,t],S.basename);r!==i&&Y.warn`config ${i} overrides ${r} in folder ${e.folder}`}catch{}}},pf=class TimeoutError extends Error{name=`TimeoutError`;constructor(e,t){super(e,t),Error.captureStackTrace?.(this,TimeoutError)}};const getAbortedReason=e=>e.reason??new DOMException(`This operation was aborted.`,`AbortError`);function pTimeout(e,t){let{milliseconds:r,fallback:i,message:a,customTimers:o={setTimeout,clearTimeout},signal:s}=t,c,abortHandler,l=new Promise((t,l)=>{if(typeof r!=`number`||Math.sign(r)!==1)throw TypeError(`Expected \`milliseconds\` to be a positive number, got \`${r}\``);if(s?.aborted){l(getAbortedReason(s));return}if(s&&(abortHandler=()=>{l(getAbortedReason(s))},s.addEventListener(`abort`,abortHandler,{once:!0})),e.then(t,l),r===1/0)return;let u=new pf;c=o.setTimeout.call(void 0,()=>{if(i){try{t(i())}catch(e){l(e)}return}typeof e.cancel==`function`&&e.cancel(),a===!1?t():a instanceof Error?l(a):(u.message=a??`Promise timed out after ${r} milliseconds`,l(u))},r)}).finally(()=>{l.clear(),abortHandler&&s&&s.removeEventListener(`abort`,abortHandler)});return l.clear=()=>{o.clearTimeout.call(void 0,c),c=void 0},l}var LikeC4WorkspaceManager=class extends ut{services;fileSystemProvider;#e=q.getChild(`workspace`);#t=!1;#n=[];initialBuildOptions={eagerLinking:!0,validation:!0};constructor(e){super(e),this.services=e,this.fileSystemProvider=e.workspace.FileSystemProvider}get documentFactory(){return this.services.workspace.LangiumDocumentFactory}get isReady(){return this.#t}async performStartup(e){this.#t&&this.#e.warn`workspace already initialized, invalid performStartup call`;try{this.#t=!1,await this.readExcludeConfig(),this.folders??=e;let t=e.map(e=>b.parse(e.uri)),r=[],i=[];for(let e of t){this.#e.debug`scanning folder ${e.fsPath} for likec4`;try{let t=await this.fileSystemProvider.scanProjectFiles(e);r.push(...t)}catch(t){this.#e.warn(`Failed to scan workspace folder {folder} for project config files`,{folder:e.fsPath,error:t})}try{i.push(...await this.fileSystemProvider.readDirectory(e,{recursive:!0}))}catch(t){this.#e.warn(`Failed to read workspace folder {folder} for likec4 files`,{folder:e.fsPath,error:t})}this.services.workspace.FileSystemWatcher.watch(e.fsPath)}let a=this.services.workspace.ProjectsManager,o=0;for(let e of r)try{await a.registerConfigFile(e.uri),o++}catch(t){this.#e.warn(`Failed to register config file {config}`,{config:e.uri.fsPath,error:t})}r.length===o?o>0&&this.#e.info`loaded ${o} projects`:this.#e.warn`loaded ${o} projects out of ${r.length}`,o>0&&i.push(...await this.scanProjectIncludePaths());let s=await this.loadDocuments(i);k(s,1)?this.#e.debug`found ${s.length} likec4 documents`:this.#e.warn(`No likec4 documents found in workspace`),s.push(this.documentFactory.fromString(Ac,b.parse(Mc)));for(let e of s)this.saveAddDocument(e);return s}finally{this.#t=!0,this._ready.resolve()}}async scanProjectIncludePaths(){let e=this.services.workspace.ProjectsManager.getAllIncludePaths();if(!k(e,1))return[];let t=Kt(e=>this.services.workspace.ProjectsManager.isExcludedByWorkspace(e.uri)),r=[];for(let{projectId:i,includePath:a,includeConfig:o}of e)try{this.#e.debug`scanning include path ${a.fsPath} for project ${i}`;let e=L(await this.fileSystemProvider.readDirectory(a,{recursive:!0,maxDepth:o.maxDepth}),N(t));r.push(...e),e.length===0?this.#e.trace`no files found in include path ${a.fsPath}`:(this.#e.debug`loaded ${e.length} files from include path ${a.fsPath}`,e.length>o.fileThreshold&&this.#e.warn(`Loaded ${e.length} files from include path ${a.fsPath} (project: ${i}) (threshold: ${o.fileThreshold}).\nLarge include directories may slow workspace initialization. Consider adjusting "include.fileThreshold" or "include.maxDepth" in your project configuration.`))}catch(e){this.#e.warn(`Failed to scan include path ${a.fsPath}`,{error:e})}return r}async loadDocuments(e){let t=L(e,Dn(e=>e.uri.path),kn(compareByUri)),r=[];for(let e of t)try{r.push(await this.documentFactory.fromUri(e.uri))}catch(t){this.#e.warn(`Failed to load document ${e.uri}`,{error:t})}return r}saveAddDocument(e){this.langiumDocuments.hasDocument(e.uri)||this.langiumDocuments.addDocument(e)}workspace(){return this.folders&&k(this.folders,1)?this.folders[0]:null}async rebuildAll(e){let t=this.services.workspace.LangiumDocuments.resetProjectIds();this.#e.info(`invalidate and rebuild all {docs} documents`,{docs:t.length}),this.forceCleanCaches(),await this.documentBuilder.update(t,[],e)}get workspaceUri(){let e=this.workspace();return H(e,`Workspace not initialized`),b.parse(e.uri)}get workspaceURL(){let e=this.workspace();return H(e,`Workspace not initialized`),new URL(e.uri)}forceCleanCaches(){for(let e of[...this.#n])e();this.services.workspace.ProjectsManager.clearCaches(),this.services.workspace.ManualLayouts.clearCaches(),this.services.workspace.Cache.clear()}onForceCleanCache(e){return this.#n.push(e),ae.create(()=>{let t=this.#n.indexOf(e);t!==-1&&this.#n.splice(t,1)})}async readExcludeConfig(){if(!this.services.lsp.Connection){this.#e.debug`no LSP connection, skipping initial configuration read`;return}let e=this.services.workspace.ConfigurationProvider,wait=e=>pTimeout(e,{milliseconds:1e3,message:!1});try{this.#e.trace`waiting for ConfigurationProvider ready...`,await wait(e.ready),this.#e.trace`ConfigurationProvider ready, reading exclude patterns...`;let t=await wait(e.getConfiguration(`likec4`,`exclude`));t?(this.#e.trace`exclude configuration found ${t}`,this.services.workspace.ProjectsManager.setWorkspaceExcludePatterns(t)):this.#e.trace(`no initial exclude configuration found`)}catch(e){this.#e.warn(`Failed to read initial exclude configuration`,{error:e})}}};function projectIdFrom(e){if(isImported(e)){for(;e.$type===`Imported`&&e.$container;)e=e.$container;H(isImportsFromPoject(e))}if(isImportsFromPoject(e))return e.project;let t=Oe(e)?st(e):e;return t.likec4ProjectId?t.likec4ProjectId:(q.warn`Document ${t.uri.fsPath} does not have a project ID assigned, this may lead to unexpected behavior.`,ff.DefaultProjectId)}function stringHash$1(...e){return Ei(e.length>1?e.join(`:::`):e[0])}t(stringHash$1,`stringHash`);function safeCall(e){try{return e()}catch(e){q.trace(`Safe call failed`,{error:e});return}}function performanceNow(){try{return globalThis.performance.now()}catch{return Date.now()}}function performanceMark(){let e=performanceNow();return{get ms(){return performanceNow()-e},get pretty(){return Xn(performanceNow()-e)}}}const mf=q.getChild(`manual-layouts`),hf=`.likec4.snap`,isManualLayoutFile=e=>e!==hf&&e.endsWith(hf);function fileName(e){return`${e}${hf}`}function viewIdFromURI(e){let t=S.basename(e);return isManualLayoutFile(t)?t.slice(0,-12):null}function getManualLayoutsOutDir(e){return S.resolvePath(e.folderUri,e.config.manualLayouts?.outDir??`.likec4`)}const gf={manualLayouts:e=>new DefaultLikeC4ManualLayouts(e)},_f=`file://./`;var DefaultLikeC4ManualLayouts=class extends ADisposable{services;cache;listeners=[];#e=pLimit(1);constructor(e){super(),this.services=e,this.cache=new ne,this.onDispose(ae.create(()=>{this.listeners.length=0,this.cache.clear()})),xi(()=>{this.onDispose(e.workspace.ProjectsManager.onProjectsUpdate(()=>{this.clearCaches()}))})}async handleFileSystemUpdate(e){let t=e.update??e.delete,r=viewIdFromURI(t)??void 0,i=this.services.workspace.ProjectsManager.ownerProjectId(t);if(this.cache.delete(i),`delete`in e){this.triggerUpdate(Hr({removed:t,projectId:i,viewId:r}));return}let a=this.services.workspace.ProjectsManager.getProject(i);if(!r){let e=await this.readSnapshot(t,a);e?r=e.id:(mf.error(`Snapshot ${t.fsPath} does not exist or is invalid`),r=`index`)}this.triggerUpdate({updated:t,projectId:i,viewId:r})}onManualLayoutUpdate(e){return this.listeners.push(e),{dispose:()=>{let t=this.listeners.indexOf(e);t!==-1&&this.listeners.splice(t,1)}}}async readManualLayouts(e){let t=mf.getChild(e.id),r=this.services.workspace.FileSystemProvider,i=getManualLayoutsOutDir(e),a=[],o=`${i.toString()}`;try{let s=await r.scanDirectory(i,isManualLayoutFile);if(s.length===0)return null;s.sort((e,t)=>e.uri.path.localeCompare(t.uri.path));for(let i of s)try{let t=await r.readFile(i.uri),s=Tt.parse(t);o=Ei(o+i.uri.toString()+t);let c=this.resolveIconPathsAfterRead(s,e.folderUri);a.push({...c,_layout:`manual`})}catch(e){t.warn(`Failed to read view snapshot ${i.uri.fsPath}`,{err:e})}a.length&&t.trace`read manual layouts for ${e.id}, found ${a.length}`}catch(r){t.warn(`Failed to read manual layouts for ${e.folderUri.fsPath}`,{err:r})}if(a.length===0)return null;let s=cn(a,In(`id`));return{hash:o,views:s}}async readSnapshot(e,t){let r=this.services.workspace.FileSystemProvider;try{let i=await r.readFile(e),a=Tt.parse(i);if(!t){let r=this.services.workspace.ProjectsManager.ownerProjectId(e);t=this.services.workspace.ProjectsManager.getProject(r)}return{...this.resolveIconPathsAfterRead(a,t.folderUri),_layout:`manual`}}catch(t){return mf.warn(`Failed to read view snapshot ${e.fsPath}`,{err:t}),null}}async read(e){return await this.#e(async()=>{let t=this.cache.get(e.id);if(t!==void 0)return mf.trace`cache hit project ${e.id}`,t;let r=await this.readManualLayouts(e);return this.cache.set(e.id,r),r})}async write(e,t){this.cache.delete(e.id);let r=mf.getChild(e.id),i=getManualLayoutsOutDir(e),a=S.joinPath(i,fileName(t.id));if(`manualLayout`in t){let{manualLayout:e,...r}=t;t=r}let o=Tt.stringify(this.normalizeIconPathsForWrite(t,e.folderUri),{space:2,quote:`'`}),s={uri:a.toString(),range:he.create(Ce.create(0,0),Ce.create(o.split(`
46
46
  `).length-1,1))};r.debug`write snapshot of ${t.id} in project ${e.id} to ${a.fsPath}`;let c=this.services.workspace.FileSystemProvider;try{await c.writeFile(a,o+`
47
47
  `),this.triggerUpdate({updated:a,projectId:e.id,viewId:t.id})}catch(e){r.warn(`Failed to write snapshot ${t.id} to ${a.fsPath}`,{err:e})}return s}async remove(e,t){this.cache.delete(e.id);let r=mf.getChild(e.id),i=getManualLayoutsOutDir(e),a=S.joinPath(i,fileName(t));r.debug`delete snapshot of ${t} in project ${e.id}. File: ${a.fsPath}`;let o={uri:a.toString(),range:he.create(0,0,0,0)};try{if(!await this.services.workspace.FileSystemProvider.deleteFile(a))return r.warn`Snapshot ${t} did not exist at ${a.fsPath}`,null;this.triggerUpdate({removed:a,projectId:e.id,viewId:t})}catch(e){r.warn(`Failed to delete snapshot ${t} from ${a.fsPath}`,{err:e})}return o}clearCaches(){mf.trace`clear caches`,this.cache.clear()}triggerUpdate(e){let t=[...this.listeners];for(let r of t)safeCall(()=>r(e))}normalizeIconPathsForWrite(e,t){let r=e.nodes.map(e=>{if(!e.icon||typeof e.icon!=`string`)return e;if(e.icon.startsWith(`file://`)){let r=b.parse(e.icon),i=S.relative(t,r);return i.startsWith(`..`)?e:{...e,icon:`${_f}${i}`}}return e});return{...e,nodes:r}}resolveIconPathsAfterRead(e,t){let r=e.nodes.map(e=>{if(!e.icon||typeof e.icon!=`string`)return e;if(e.icon.startsWith(_f)){let r=e.icon.substring(9),i=S.joinPath(t,r);return{...e,icon:i.toString()}}return e});return{...e,nodes:r}}};function hasLikeC4Ext(e){return $d.fileExtensions.some(t=>e!==t&&e.endsWith(t))}const vf=[`node_modules`,`.git`,`.svn`,`.yarn`,`.pnpm`];function isNodeModulesOrRepo(e){return vf.includes(e)}function insideNodeModulesOrRepo(e){for(let t of vf)if(e.includes(t))return!0;return!1}const yf=q.getChild(`chokidar`),bf={fileSystemWatcher:e=>new ChokidarFileSystemWatcher(e)},isAnyLikeC4File=e=>{let t=rr(e);return hasLikeC4Ext(t)||Ht(t)||isManualLayoutFile(t)};var ChokidarFileSystemWatcher=class{services;watcher;queue=new Jn({concurrency:1,timeout:5e3});constructor(e){this.services=e,yf.trace`ChokidarFileSystemWatcher created`}watch(e){if(this.watcher){yf.debug`add watching folder: ${e}`,this.watcher.add(e);return}this.watcher=this.createWatcher(e)}async dispose(){if(this.watcher){let e=this.watcher;this.watcher=void 0;try{await e.close()}catch{}}}createWatcher(e){yf.debug`create watcher for folder: ${e}`;let t=Ui.watch(e,{ignored:[e=>insideNodeModulesOrRepo(e),(e,t)=>!!t&&t.isFile()&&!isAnyLikeC4File(e),e=>this.services.workspace.ProjectsManager.isExcluded(b.file(e))],followSymlinks:!0,ignoreInitial:!0}),onAddOrChange=(e,t)=>{t?.isDirectory()||this.enqueueFileOp(`addOrChange: `+e,async()=>{await this.onAddOrChange(e)})},onRemove=(e,t)=>{t?.isDirectory()||this.enqueueFileOp(`remove: `+e,async()=>{await this.onRemove(e)})};return t.on(`add`,onAddOrChange).on(`change`,onAddOrChange).on(`unlink`,onRemove).on(`unlinkDir`,e=>{this.enqueueFileOp(`removeDir: `+e,async()=>{await this.onRemoveDir(e)})}),t}enqueueFileOp(e,t){this.queue.add(async()=>{try{await t()}catch(t){yf.warn(`Failed on {fileop}`,{fileop:e,error:t})}}).catch(t=>{yf.error(`Error on {fileop}`,{fileop:e,error:t})})}async onAddOrChange(e){let t=this.services.workspace,r=rr(e),i=b.file(e);switch(!0){case Ht(r):yf.debug`project config changed: ${e}`,t.ManualLayouts.clearCaches(),await t.ProjectsManager.registerConfigFile(i);break;case isManualLayoutFile(r):yf.debug`manual layout file changed: ${e}`,await t.ManualLayouts.handleFileSystemUpdate({update:i});break;case hasLikeC4Ext(r):yf.debug`file changed: ${e}`,await t.DocumentBuilder.update([i],[]);break;default:yf.warn`Unknown file change: ${e}`}}async onRemove(e){let t=this.services.workspace,r=rr(e),i=b.file(e);switch(!0){case Ht(r):yf.debug`project file removed: ${e}`,t.ManualLayouts.clearCaches(),await t.ProjectsManager.reloadProjects();break;case hasLikeC4Ext(r):yf.debug`file removed: ${e}`,await t.DocumentBuilder.update([],[i]);break;case isManualLayoutFile(r):yf.debug`manual layout file removed: ${e}`,await t.ManualLayouts.handleFileSystemUpdate({delete:i});break;default:yf.warn`Unknown file removal: ${e}`}}async onRemoveDir(e){yf.debug`directory removed: ${e}`;let t=this.services.workspace;t.ProjectsManager.findOverlaped(e).length>0&&(t.ManualLayouts.clearCaches(),await t.ProjectsManager.reloadProjects())}},NoopFileSystemProvider=class{scanProjectFiles(){return Promise.resolve([])}scanDirectory(){return Promise.resolve([])}readFile(e){if(isLikeC4Builtin(e))return Promise.resolve(Ac);throw Error(`No file system is available (${e.toString()})`)}readDirectory(){return Promise.resolve([])}loadProjectConfig(){throw Error(`No file system is available.`)}writeFile(){throw Error(`No file system is available.`)}deleteFile(){throw Error(`No file system is available.`)}},NoopFileSystemWatcher=class{constructor(){q.debug`NoopFileSystemWatcher created`}watch(){}dispose(){return Promise.resolve()}},NoopLikeC4ManualLayouts=class{constructor(){q.debug`NoopLikeC4ManualLayouts created`}handleFileSystemUpdate(){return Promise.resolve()}readSnapshot(){return Promise.resolve(null)}read(){return Promise.resolve(null)}write(){return Promise.reject(Error(`NoopLikeC4ManualLayouts: write operation is not supported`))}remove(){return Promise.resolve(null)}clearCaches(){}onManualLayoutUpdate(){return{dispose:()=>{}}}dispose(){}};const xf={fileSystemWatcher:()=>new NoopFileSystemWatcher},Sf={fileSystemProvider:()=>new NoopFileSystemProvider,...xf},Cf={manualLayouts:()=>new NoopLikeC4ManualLayouts};function isLikeC4ConfigFile(e,t=!1){return!t&&Ht(rr(e))}function isLikeC4File(e,t=!1){return!t&&hasLikeC4Ext(rr(e))}const WithFileSystem=(e=!1)=>({fileSystemProvider:()=>new SymLinkTraversingFileSystemProvider,...e?bf:xf});var SymLinkTraversingFileSystemProvider=class extends it{#e=q.getChild(`filesystem`);async readFile(e){if(isLikeC4Builtin(e))return Promise.resolve(Ac);try{return await super.readFile(e)}catch(t){return this.#e.warn(`Failed to read file ${e.fsPath}`,{error:t}),``}}async readDirectory(e,t){let r=t?.recursive??!0,i=t?.maxDepth??1/0,a=[];try{let t=new Hi().withSymlinks({resolvePaths:!1}).exclude(isNodeModulesOrRepo).withFullPaths().filter(isLikeC4File);r?i!==1/0&&(t=t.withMaxDepth(i)):t=t.withMaxDepth(1);let o=await t.crawl(e.fsPath).withPromise();for(let e of o)a.push({isFile:!0,isDirectory:!1,uri:b.file(e)});return a.sort(compareByUri)}catch(t){return this.#e.warn(`Failed to read directory ${e.fsPath}`,{error:t}),[]}}async scanProjectFiles(e){let t=await this.scanDirectory(e,isLikeC4ConfigFile);return t.length<=1?t:t.sort(compareByUriDeepFirst)}async scanDirectory(e,t){let r=[];try{let i=await new Hi().withSymlinks({resolvePaths:!1}).exclude(isNodeModulesOrRepo).withFullPaths().filter(t).crawl(e.fsPath).withPromise();for(let e of i)r.push({isFile:!0,isDirectory:!1,uri:b.file(e)})}catch(t){this.#e.warn(`Failed to scan directory {path}`,{path:e.fsPath,error:t})}return r}async loadProjectConfig(e){return await loadConfig(e)}async writeFile(e,t){let r=ir(e.fsPath),i=Ii(r,{throwIfNoEntry:!1});if(i?.isFile())throw Error(`Cannot create directory ${r} because a file with the same name exists.`);return i||(this.#e.debug(`creating directory {path}`,{path:r}),Fi(r,{recursive:!0})),this.#e.debug(`writing file {path}`,{path:e.fsPath}),await nr(e.fsPath,t,{encoding:`utf-8`})}async deleteFile(e){try{let t=e.fsPath,r=Ii(t,{throwIfNoEntry:!1});return r?.isFile()||r?.isSymbolicLink()?(await tr(t),this.#e.debug(`deleted file {path}`,{path:t}),!0):(this.#e.warn(`deleteFile failed: {path} does not exist, or is not a file`,{path:t}),!1)}catch(t){this.#e.warn(`Failed to delete file ${e.fsPath}`,{error:t})}return!1}},LikeC4DocumentationProvider=class extends re{parser;locator;constructor(e){super(e),this.parser=e.likec4.ModelParser,this.locator=e.likec4.ModelLocator}getDocumentation(e){if(!isDeploymentNode$1(e)&&!isDeployedInstance(e)&&!isElement(e))return super.getDocumentation(e);try{let t=st(e);if(t.state<y.Linked)return super.getDocumentation(e);let r=this.parser.forDocument(t);switch(!0){case isDeploymentNode$1(e):{let t=r.parseDeploymentNode(e);return t?`**${t.title}**`:void 0}case isDeployedInstance(e):{let i=r.parseDeployedInstance(e);if(!i)return;let[a,o]=V.isImportRef(i.element)?[i.element.project,i.element.model]:[t.likec4ProjectId,i.element.model],s=a?this.locator.getParsedElement(o,a):this.locator.getParsedElement(o),c=[`_instance of_ \`${o}\``];return s&&c.push(`**${s.element.title}**`),c.join(`
48
48
  `)}case isElement(e):{let t=r.parseElement(e);return t?[`**${t.title}**`,`<small>kind: \`${t.kind}\`</small>`].join(`
@@ -84,7 +84,7 @@ export {
84
84
  `,` `)}`,description:null,rules:[{include:[{wildcard:!0}]}]}))}}let _=L(g,cn(In(`id`)));g.some(wr)&&(_=qi(_));for(let e of l)u.has(e.astPath)||q.warn(`Relation extend at ${e.astPath} does not match any relation in the model`);return{data:{[br]:`parsed`,projectId:t.id,project:Sr({id:t.id,title:t.config.title??t.config.name,styles:t.config.styles,manualLayouts:t.config.manualLayouts,inferTechnologyFromIcon:t.config.inferTechnologyFromIcon}),specification:{tags:i.tags,elements:i.specs.elements,relationships:Ln(i.specs.relationships,({notation:e,technology:t,...r})=>({...e&&{notation:e},...t&&{technology:t},style:r})),deployments:i.specs.deployments,...o.size>0&&{metadataKeys:[...o].sort(ui)},customColors:a},elements:d,relations:p,globals:i.globals,views:_,deployments:{elements:m,relations:h},imports:{}},imports:i.imports}}const Z=q.getChild(`builder`);var DefaultLikeC4ModelBuilder=class extends ADisposable{services;projects;parser;listeners=[];cache;DocumentBuilder;manualLayouts;mutex;lastSeen;constructor(e){super(),this.services=e,this.projects=e.shared.workspace.ProjectsManager,this.parser=e.likec4.ModelParser,this.DocumentBuilder=e.shared.workspace.DocumentBuilder,this.mutex=e.shared.workspace.WorkspaceLock,this.manualLayouts=e.shared.workspace.ManualLayouts,this.lastSeen=e.likec4.LastSeen,this.cache=new ProjectModelCache(e),this.onDispose(this.cache,ae.create(()=>{this.listeners.length=0}),this.DocumentBuilder.onUpdate((e,t)=>{t.length>0&&this.notifyListeners(t)}),e.shared.workspace.WorkspaceManager.onForceCleanCache(()=>{this.clearCache()}),this.manualLayouts.onManualLayoutUpdate(({projectId:e})=>{this.notifyListeners(e)}));let t=vn(Bn(),N(e=>isNotLikeC4Builtin(e)&&!this.projects.isExcluded(e)),P(e=>e.uri));this.onDispose(this.DocumentBuilder.onBuildPhase(y.Validated,(e,r)=>{let i=t(e);i.length>0&&this.notifyListeners(i)})),Z.debug`created`}unsafeSyncParseModelData(e){return this.cache.parsedData(e,()=>{let t=Z.getChild(e);try{let r=this.projects.getProject(e),i=this.documents(e);return i.length===0?(t.trace`unsafeSyncParseModelData: ${`skipped due to no documents`}`,null):(t.trace`unsafeSyncParseModelData: ${`completed`}`,buildModelData(this.services,r,i))}catch(t){return Z.warn(`unsafeSyncParseModelData failed for project ${e}`,{err:t}),null}})}unsafeSyncJoinedModelData(e){return this.cache.parsedJoinedData(e,()=>{let t=Z.getChild(e),r=this.unsafeSyncParseModelData(e);if(!r)return null;if(r.imports.size===0)return t.trace(`unsafeSyncJoinedModelData: no imports`),r.data;t.debug(`unsafeSyncJoinedModelData: processing imports`);let i=[...r.imports.associations()].reduce((e,[t,r])=>{if(r.size===0)return e;let i=this.unsafeSyncParseModelData(t);if(i){let a=[...r].flatMap(e=>i.data.elements[e]??[]);k(a,1)&&(e[t]=structuredClone(a))}return e},{});return{...r.data,imports:i}})}async parseModel(e,t){return e=this.projects.ensureProjectId(e),await this.mutex.read(async()=>(t?.isCancellationRequested&&await be(t),this.cache.parsedModel(e,()=>{let t=Z.getChild(e),r=this.unsafeSyncJoinedModelData(e);return r?ji.create(r):(t.debug`parseModel: returning EMPTY`,ji.EMPTY.asParsed)})))}unsafeSyncComputeModel(e,t){return this.cache.computedModel(e,t??null,()=>{let r=Z.getChild(e),i=this.unsafeSyncJoinedModelData(e);if(!i)return e!==ff.DefaultProjectId&&r.warn`unsafeSyncComputeModel: returning EMPTY`,ji.EMPTY.asComputed;let a=performanceMark(),o=ji.create(i),s=[];for(let e of Fn(i.views)){let i=Ki(e,o);if(!i.isSuccess){r.warn(c(i.error));continue}t?.views[e.id]&&Object.assign(i.view,{hasManualLayout:!0}),s.push(i.view)}assignNavigateTo(s);let l={...i,manualLayouts:{...t?.views},[Ir]:`computed`,views:cn(s,In(`id`))};return r.debug(`computeModel${t?` with manual layouts`:``}: {status} in ${a.pretty}`,{status:`completed`}),this.lastSeen.rememberModel(ji.create(l))})}async computeModel(e,t){e=this.projects.ensureProjectId(e);let r=Z.getChild(e);return await this.mutex.read(async()=>{t?.isCancellationRequested&&await be(t);let i=this.projects.getProject(e),a=await this.manualLayouts.read(i),o=this.unsafeSyncComputeModel(e,a);return o===ji.EMPTY&&e!==ff.DefaultProjectId&&r.warn(`computeModel returned EMPTY`),o})}onModelParsed(e){return this.listeners.push(e),ae.create(()=>{let t=this.listeners.indexOf(e);t>=0&&this.listeners.splice(t,1)})}clearCache(){Z.debug(`clear all caches`),this.cache.clear()}documents(e){return this.parser.documents(e).toArray()}notifyListeners(e){if(this.listeners.length===0)return;let t;if(nn(e)){if(t=L(e,$t(e=>this.projects.ownerProjectId(e)),sn()),an(t))return}else t=[[e,[]]];for(let e of[...this.listeners])for(let[r,i]of t)try{e(r,i)}catch(e){Z.warn(c(e))}}},ProjectModelCache=class extends Ue{constructor(e){super(e=>typeof e==`string`?e:e.id),this.toDispose.push(e.shared.workspace.DocumentBuilder.onDocumentPhase(y.Validated,t=>{let r=e.shared.workspace.ProjectsManager.ownerProjectId(t);this.clear(r)}),e.shared.workspace.DocumentBuilder.onUpdate((t,r)=>{if(r.length>0){let t=e.shared.workspace.ProjectsManager,i=Mn(P(r,t.ownerProjectId.bind(t)));if(!k(i,1))return;Z.trace`clear project caches for: ${i} (on delete ${r.map(e=>e.fsPath)})`;for(let e of i)this.clear(e)}}))}parsedData(e,t){let r=`parsed-data`,i=this.get(e,r);if(i!==void 0)return Z.trace`cache hit project ${e} key: ${r}`,i;let a=t();return this.set(e,r,a),Z.trace`cache miss project ${e} key: ${r}`,a}parsedJoinedData(e,t){let r=`parsed-joined-data`,i=this.get(e,r);if(i!==void 0)return Z.trace`cache hit project ${e} key: ${r}`,i;let a=t();return this.set(e,r,a),Z.trace`cache miss project ${e} key: ${r}`,a}parsedModel(e,t){let r=`parsed-model`,i=this.get(e,r);if(i!==void 0)return Z.trace`cache hit project ${e} key: ${r}`,i;let a=t();return this.set(e,r,a),Z.trace`cache miss project ${e} key: ${r}`,a}computedModel(e,t,r){let i=t?`computed-model-${t.hash}`:`computed-model`,a=this.get(e,i);if(a!==void 0)return Z.trace`cache hit project ${e} key: ${i}`,a;let o=r();return this.set(e,i,o),Z.trace`cache miss project ${e} key: ${i}`,o}};const{findNodeForKeyword:Rf,findNodeForProperty:zf}=rt,{getDocument:Bf,streamAllContents:Vf}=Ae,Hf=q.getChild(`locator`);var LikeC4ModelLocator=class{services;fqnIndex;deploymentsIndex;langiumDocuments;parser;projects;constructor(e){this.services=e,this.fqnIndex=e.likec4.FqnIndex,this.deploymentsIndex=e.likec4.DeploymentsIndex,this.langiumDocuments=e.shared.workspace.LangiumDocuments,this.parser=e.likec4.ModelParser,this.projects=e.shared.workspace.ProjectsManager}documents(e){return this.parser.documents(e)}getParsedElement(...e){try{let t,r;if(e.length===2?(t=e[0],r=e[1]):(t=e[0],r=M(t)?this.projects.ensureProjectId():projectIdFrom(t)),M(t)){let e=t,i=this.fqnIndex.byFqn(r,e).head();if(!i)return null;let a=this.langiumDocuments.getDocument(i.documentUri),o=this.findParsedElementByFqnIn(e,a);return o&&a?{projectId:r,element:o,document:a}:null}let i=this.fqnIndex.getFqn(t),a=Bf(t),o=this.findParsedElementByFqnIn(i,a);return o&&a?{projectId:r,element:o,document:a}:null}catch(e){return Hf.debug(c(e)),null}}findParsedElementByFqnIn(e,t){if(t)return this.parser.parse(t).c4Elements.find(t=>t.id===e)}locateElement(e,t){let[r,i]=ii(e);r??=this.projects.ensureProjectId(t);let a=this.fqnIndex.byFqn(r,i).head(),o=a?.nameSegment??a?.selectionSegment;return!a||!o?null:{uri:a.documentUri.toString(),range:o.range}}locateDeploymentElement(e,t){let r=this.projects.ensureProjectId(t),i=e,a=this.deploymentsIndex.byFqn(r,i).head(),o=a?.nameSegment??a?.selectionSegment;return!a||!o?null:{uri:a.documentUri.toString(),range:o.range}}locateRelation(e,t){let r=this.projects.ensureProjectId(t);for(let t of this.documents(r)){let r=t.c4Relations.find(t=>t.id===e)??t.c4DeploymentRelations.find(t=>t.id===e);if(!r)continue;let i=this.services.workspace.AstNodeLocator.getAstNode(t.parseResult.value,r.astPath);if(!isRelation(i)&&!isDeploymentRelation(i))continue;let a=i.kind?zf(i.$cstNode,`kind`):void 0;if(a??=i.dotKind?zf(i.$cstNode,`dotKind`):void 0,a??=Rf(i.$cstNode,`->`),a??=zf(i.$cstNode,`title`),a??=zf(i.$cstNode,`target`),a??=i.$cstNode,a)return{uri:t.uri.toString(),range:{start:a.range.start,end:a.range.start}}}return null}locateViewAst(e,t){let r=this.projects.ensureProjectId(t);for(let t of this.documents(r)){let r=t.c4Views.find(t=>t.id===e);if(!r)continue;let i=this.services.workspace.AstNodeLocator.getAstNode(t.parseResult.value,r.astPath);if(isLikeC4View(i))return{doc:t,view:r,viewAst:i}}return null}locateView(e,t){let r=this.locateViewAst(e,t);if(!r)return null;let i=r.viewAst,a=i.name?zf(i.$cstNode,`name`):void 0;return a??=Rf(i.$cstNode,`view`),a??=i.$cstNode,a?{uri:r.doc.uri.toString(),range:{start:a.range.start,end:a.range.start}}:null}async locateDocumentTags(e,t){let r=this.langiumDocuments.getDocument(e);if(!r||!r.likec4ProjectId)return null;r.state<y.Linked&&(Hf.debug(`Waiting for document ${r.uri.path} to be Linked`),await this.services.shared.workspace.DocumentBuilder.waitUntil(y.Linked,r.uri,t));let i=projectIdFrom(r);Hf.trace`locate document tags for ${r.uri.fsPath} in project ${i}`;try{let e=this.services.likec4.LastSeen.specification(i)?.tags,t=this.services.likec4.LastSeen.styles(i)??dr.DEFAULT;if(!e)return Hf.trace(`No specification or styles found for project ${i}, cannot locate tags for document ${r.uri.fsPath}`),null;let a=L(Vf(r.parseResult.value),mi(e=>isTag(e)||isTagRef(e)),Di(),A(r=>{let i,a;try{isTag(r)?(i=r.name,a=r.$cstNode):(i=r.tag.$refText,a=r.tag.$refNode);let o=e[i];return W(o,`Tag ${i} not found in merged specification`),W(a,`Tag ${i} does not have a $cstNode`),{name:i,color:t.tagColor(o.color).fill,range:a.range,isSpecification:isTag(r)}}catch(e){return Hf.warn(`Fail on tag ${i}`,{err:e}),[]}}));return Hf.debug(`Found ${a.length} tags in document ${r.uri.path}`),a}catch(e){return Hf.warn(c(e)),null}}locateDynamicViewStep(e){let{doc:t,viewAst:r}=this.locateViewAst(e.view,e.projectId)??{};if(!t||!r)return null;if(!isDynamicView$1(r)||!r.body)return Hf.warn(`View ${e.view} is not a dynamic view`),null;let i=this.services.workspace.AstNodeLocator.getAstNodePath(r.body)+e.astPath,a=this.services.workspace.AstNodeLocator.getAstNode(t.parseResult.value,i);if(!a||!isStepOrSeries(a))return Hf.warn(`Failed to locate dynamic view step ${i} in view ${e.view}`),null;let o=a.kind?zf(a.$cstNode,`kind`):void 0;return o??=a.dotKind?zf(a.$cstNode,`dotKind`):void 0,o??=Rf(a.$cstNode,`->`),o??=Rf(a.$cstNode,`<-`),o??=zf(a.$cstNode,`title`),o??=zf(a.$cstNode,`target`),o??=a.$cstNode,o?{uri:t.uri.toString(),range:{start:o.range.start,end:o.range.start}}:null}};const Uf=[`this`,`it`,`self`,`super`,`likec4lib`,`global`];function tryOrLog(e){return async function tryOrLogFn(t,r,i){try{let a=e(t,r,i);Xt(a)&&await a;return}catch(e){let i=e instanceof Error?e.message:String(e);r(`error`,`Validation failed: ${i}`,{node:t}),q.debug(`Validation failed: ${i}`,{error:e})}}}const{getDocument:Wf}=Ae,deploymentNodeChecks=e=>{let t=e.likec4.DeploymentsIndex,r=e.references.NameProvider;return tryOrLog((e,i)=>{let a=r.getName(e);if(!a){i(`error`,`DeploymentNode must be named`,{node:e});return}let o=ni(r.getNameNode(e),`name CstNode not found`).range;Uf.includes(a)&&i(`error`,`Reserved word: ${a}`,{node:e,range:o});let s=projectIdFrom(e),c=t.getFqn(e);t.byFqn(s,c).limit(2).toArray().length>1&&i(`error`,`Duplicate node name "${c}"`,{node:e,range:o})})},deployedInstanceChecks=e=>{let t=e.likec4.DeploymentsIndex,r=e.references.NameProvider;return tryOrLog((e,i)=>{let a=r.getName(e);if(!a){i(`error`,`Deployed instance must be named, unique inside node`,{node:e});return}let o=ni(r.getNameNode(e),`name CstNode not found`).range;Uf.includes(a)&&i(`error`,`Reserved word: ${a}`,{node:e,range:o});let s=projectIdFrom(e),c=t.getFqn(e);t.byFqn(s,c).limit(2).toArray().length>1&&i(`error`,`Duplicate instance name "${c}"`,{node:e,range:o})})},deploymentRelationChecks=e=>{let t=e.likec4.ModelParser;return tryOrLog((e,r)=>{if(!e.target?.value?.ref){r(`error`,`DeploymentRelation target '${e.target?.$cstNode?.text??``}' not resolved`,{node:e,property:`target`});return}let i=Wf(e),a=t.forDocument(i),o;try{o=a._resolveDeploymentRelationSource(e)}catch(t){q.warn(c(t)),r(`error`,`DeploymentRelation source not resolved`,{node:e,property:`source`});return}if(V.isImportRef(o)){r(`error`,`DeploymentRelation cannot refer imported model (not implemented yet)`,{node:e,property:`source`});return}if(V.isModelRef(o)){r(`error`,`DeploymentRelation must refer deployment element`,{node:e,property:`source`});return}let s=a.parseFqnRef(e.target);if(V.isImportRef(s)){r(`error`,`DeploymentRelation cannot refer imported model (not implemented yet)`,{node:e,property:`target`});return}if(V.isModelRef(s)){r(`error`,`DeploymentRelation must refer deployment element`,{node:e,property:`target`});return}ei(o.deployment,s.deployment)&&r(`error`,`Invalid parent-child relationship`,{node:e})})},extendDeploymentChecks=e=>tryOrLog((e,t)=>{let r=e.deploymentNode.value.ref;(!r||!isDeploymentNode$1(r))&&t(`error`,`ExtendDeployment allows only DeploymentNode`,{node:e,property:`deploymentNode`})}),stepSingle=e=>{let t=e.likec4.FqnIndex;return tryOrLog((e,r)=>{let i=elementRef(e.source),a=i&&t.getFqn(i);a||r(`error`,`Source not found (not parsed/indexed yet)`,{node:e,property:`source`});let o=elementRef(e.target),s=o&&t.getFqn(o);s||r(`error`,`Target not found (not parsed/indexed yet)`,{node:e,property:`target`}),a&&s&&ei(a,s)&&a!==s&&r(`error`,`Invalid parent-child relationship`,{node:e})})},stepSeries=e=>{let t=e.likec4.FqnIndex;return tryOrLog((e,r)=>{let i=e.source;isStep(i)&&i.isBackward&&r(`error`,`Invalid chain after backward step`,{node:e});let a=elementRef(e.target);a&&t.getFqn(a)||r(`error`,`Target not found (not parsed/indexed yet)`,{node:e,property:`target`})})},subflowStep=e=>{let isParallel=e=>e.kind===`par`||e.kind===`parallel`,isAltBranch=e=>e.kind===`else`||e.kind===`if`||e.kind===`when`;return tryOrLog((e,t)=>{isParallel(e)&&isSubflowStep(e.$container)&&isParallel(e.$container)&&t(`error`,`Nested parallel blocks are not allowed`,{node:e,property:`kind`}),isAltBranch(e)?isAltSteps(e.$container)||t(`error`,`"${e.kind}" alternative branch must be inside "alt"`,{node:e,property:`kind`}):isAltSteps(e.$container)&&t(`error`,`"${e.kind}" can not be used as an alternative branch, only "if", "when" or "else" are allowed`,{node:e,property:`kind`})})},dynamicViewDisplayVariant=e=>tryOrLog((e,t)=>{if(j(e.value)||e.value!==`diagram`&&e.value!==`sequence`){t(`error`,`Invalid display variant: "diagram" or "sequence" are allowed`,{node:e,property:`value`});return}Me(e,isDynamicViewBody)||t(`error`,`Display mode can be defined only inside dynamic view`,{node:e})}),{getDocument:Gf}=Ae,checkElement=e=>{let t=e.likec4.FqnIndex,r=e.workspace.AstNodeLocator;return tryOrLog((e,i)=>{let a=t.getFqn(e);if(!a){i(`error`,`Not indexed element`,{node:e,property:`name`});return}Uf.includes(e.name)&&i(`error`,`Reserved word: ${e.name}`,{node:e,property:`name`});let o=Gf(e),s=o.uri,c=r.getAstNodePath(e),l=t.byFqn(projectIdFrom(o),a).filter(e=>e.documentUri!==s||e.path!==c).head();if(l){let t=l.documentUri!==s;i(`error`,`Duplicate element name ${e.name===a?e.name:e.name+` (`+a+`)`}`,{node:e,property:`name`,...t&&{relatedInformation:[{location:{range:l.nameSegment?.range??l.selectionSegment?.range,uri:l.documentUri.toString()},message:`conflicting element`}]}})}})},checkElementRef=e=>tryOrLog((e,t)=>{isReferenceToDeploymentModel(e.modelElement)&&t(`error`,`Only model elements allowed here`,{node:e,property:`modelElement`})}),{getDocument:Kf}=Ae,checkImportsFromPoject=e=>{let t=e.shared.workspace.ProjectsManager;return tryOrLog((e,r)=>{if(!t.all.includes(e.project)){r(`error`,`Imported project not found`,{node:e,property:`project`});return}let i=projectIdFrom(Kf(e));if(e.project===i){r(`error`,`Imported project cannot be the same as the current project`,{node:e,property:`project`});return}})},opacityPropertyRuleChecks=e=>tryOrLog((e,t)=>{let r=parseFloat(e.value);(isNaN(r)||r<0||r>100)&&t(`warning`,`Value ignored, must be between 0% and 100%`,{node:e,property:`value`})}),iconPropertyRuleChecks=e=>(e,t)=>{let r=e.$container;r.props.some(t=>isIconProperty(t)&&t!==e)&&t(`error`,`Icon must be defined once`,{node:e}),isElementStyleProperty(r)&&isElementBody(r.$container)&&r.$container.props.some(e=>isIconProperty(e))&&t(`warning`,`Redundant as icon defined on element`,{node:e}),e.value?.startsWith(`file://`)&&t(`error`,`Icon URI must not start with file://`,{node:e,property:`value`})},colorLiteralRuleChecks=e=>(e,t)=>{if(e.$type===`HexColor`){if(e.hex===void 0||M(e.hex)&&!e.hex.match(/^[a-fA-F0-9]+$/)){t(`error`,`Invalid HEX`,{node:e,property:`hex`});return}let r=on(e.hex)?e.hex.toString().length:e.hex.length;r!==6&&r!==3&&r!==8&&t(`error`,`Invalid value "${e.$cstNode?.text}", must be 3, 6 or 8 characters long`,{node:e,property:`hex`});return}if(e.$type===`RGBAColor`){if((!on(e.red)||e.red<0||e.red>255)&&t(`error`,`Invalid value, must be between 0 and 255`,{node:e,property:`red`}),(!on(e.green)||e.green<0||e.green>255)&&t(`error`,`Invalid value, must be between 0 and 255`,{node:e,property:`green`}),(!on(e.blue)||e.blue<0||e.blue>255)&&t(`error`,`Invalid value, must be between 0 and 255`,{node:e,property:`blue`}),on(e.alpha)&&(e.alpha<0||e.alpha>1)&&t(`error`,`Invalid value, must be between 0 and 1`,{node:e,property:`alpha`}),M(e.alpha)){let r=parseFloat(e.alpha);(r<0||r>100)&&t(`error`,`Invalid value, must be between 0% and 100%`,{node:e,property:`alpha`})}return}U(e)},relationChecks=e=>{let t=e.likec4.ModelParser;return tryOrLog((e,r)=>{let i=t.forDocument(st(e)),a=safeCall(()=>i._resolveRelationSource(e));if(!a){r(`error`,`Source not resolved`,{node:e,property:`source`});return}let o=safeCall(()=>i.parseFqnRef(e.target));if(!o){r(`error`,`Target not resolved`,{node:e,property:`target`});return}V.isImportRef(a)&&(V.isImportRef(o)?r(`warning`,`Relationship between imported elements may not be visible in origin projects`,{node:e}):r(`warning`,`Relationship from imported element to local element may not be visible in origin project`,{node:e,property:`source`})),ei(V.flatten(a),V.flatten(o))&&r(`error`,`Invalid parent-child relationship`,{node:e})})},checkRelationBody=e=>tryOrLog((e,t)=>{e.$container.tags?.values&&e.tags?.values&&t(`error`,`Relation cannot have tags in both header and body`,{node:e.tags})}),extendRelationChecks=e=>{let t=e.likec4.ModelParser,r=new He(e.shared,y.Linked),calcFingerprint=({source:e,target:t,kind:r,title:i})=>stringHash$1(`extend-relation`,V.flatten(e),V.flatten(t),r??`default`,i??``);function getProjectFingerprints(t){return r.get(t,()=>new Set(L(e.shared.workspace.LangiumDocuments.projectDocuments(t).toArray(),A(e=>e.c4Relations??[]),P(e=>calcFingerprint(e)))))}return tryOrLog((e,r)=>{let i=st(e),a=t.forDocument(i),o=safeCall(()=>a.parseFqnRef(e.source));if(!o){r(`error`,`Source not resolved`,{node:e,property:`source`});return}let s=safeCall(()=>a.parseFqnRef(e.target));if(!s){r(`error`,`Target not resolved`,{node:e,property:`target`});return}if(!V.isModelRef(o)&&!V.isImportRef(o)){r(`error`,`Source must reference a model element`,{node:e,property:`source`});return}if(!V.isModelRef(s)&&!V.isImportRef(s)){r(`error`,`Target must reference a model element`,{node:e,property:`target`});return}let c=projectIdFrom(i),l=(e.kind??e.dotKind?.kind)?.ref?.name??`default`,{title:u=``}=a.parseBaseProps({},{title:e.title}),d=calcFingerprint({source:o,target:s,kind:l,title:u});getProjectFingerprints(c).has(d)||r(`warning`,`This extend does not match any relation (by source, kind, target, title)`,{node:e})})},checkSpecificationRule=e=>tryOrLog((e,t)=>{e.$containerIndex&&e.$containerIndex>0&&t(`warning`,`Prefer one specification per document`,{node:e,property:`name`})}),checkModel=e=>tryOrLog((e,t)=>{e.$containerIndex&&e.$containerIndex>0&&t(`warning`,`Prefer one model per document`,{node:e,property:`name`})}),checkGlobals=e=>tryOrLog((e,t)=>{e.$containerIndex&&e.$containerIndex>0&&t(`warning`,`Prefer one global block per document`,{node:e,property:`name`})}),checkElementKind=e=>{let t=e.shared.workspace.IndexManager;return tryOrLog((e,r)=>{Uf.includes(e.name)&&r(`error`,`Reserved word: ${e.name}`,{node:e,property:`name`});let i=projectIdFrom(e),a=t.projectElements(i,Zl).filter(t=>t.name===e.name&&t.node!==e).head();if(a){let t=a.documentUri!==st(e).uri;r(`error`,`Duplicate element kind '${e.name}'`,{node:e,property:`name`,...t&&{relatedInformation:[{location:{range:a.nameSegment.range,uri:a.documentUri.toString()},message:`conflicting definition`}]}})}})},checkDeploymentNodeKind=e=>{let t=e.shared.workspace.IndexManager;return tryOrLog((e,r)=>{Uf.includes(e.name)&&r(`error`,`Reserved word: ${e.name}`,{node:e,property:`name`});let i=projectIdFrom(e),a=t.projectElements(i,Fl).filter(t=>t.name===e.name&&t.node!==e).head();if(a){let t=a.documentUri!==st(e).uri;r(`error`,`Duplicate deploymentNode kind '${e.name}'`,{node:e,property:`name`,...t&&{relatedInformation:[{location:{range:a.nameSegment.range,uri:a.documentUri.toString()},message:`conflicting definition`}]}})}})},checkTag=e=>{let t=e.shared.workspace.IndexManager;return tryOrLog((e,r)=>{let i=e.name,a=projectIdFrom(e),o=t.projectElements(a,`Tag`).filter(t=>t.name===i&&t.node!==e).head();if(o){let t=o.documentUri!==st(e).uri;r(`error`,`Duplicate tag '${e.name}'`,{node:e,property:`name`,...t&&{relatedInformation:[{location:{range:o.nameSegment.range,uri:o.documentUri.toString()},message:`conflicting definition`}]}})}})},checkRelationshipKind=e=>{let t=e.shared.workspace.IndexManager;return tryOrLog((e,r)=>{Uf.includes(e.name)&&r(`error`,`Reserved word: ${e.name}`,{node:e,property:`name`});let i=projectIdFrom(e);t.projectElements(i,`RelationshipKind`).filter(t=>t.name===e.name).limit(2).count()>1&&r(`error`,`Duplicate RelationshipKind '${e.name}'`,{node:e,property:`name`})})},checkGlobalPredicate=e=>{let t=e.shared.workspace.IndexManager;return tryOrLog((e,r)=>{let i=projectIdFrom(e),a=t.projectElements(i,bu),o=t.projectElements(i,yu);a.concat(o).filter(t=>t.name===e.name).limit(2).count()>1&&r(`error`,`Duplicate GlobalPredicateGroup or GlobalDynamicPredicateGroup name '${e.name}'`,{node:e,property:`name`})})},checkGlobalStyleId=e=>{let t=e.shared.workspace.IndexManager;return tryOrLog((e,r)=>{let i=projectIdFrom(e);t.projectElements(i,`GlobalStyleId`).filter(t=>t.name===e.name).limit(2).count()>1&&r(`error`,`Duplicate GlobalStyleId name '${e.name}'`,{node:e,property:`name`})})},qf=/@likec4-generated/,viewChecks=e=>{let t=e.shared.workspace.IndexManager;return tryOrLog((e,r)=>{let i=Le(e.$cstNode,[`BLOCK_COMMENT`]);if(i&&qf.test(i.text)&&r(`warning`,`ManualLayoutV1 is no longer supported; remove this block`,{node:e,range:i.range}),!e.name)return;Uf.includes(e.name)&&r(`error`,`Reserved word: ${e.name}`,{node:e,property:`name`});let a=projectIdFrom(e);t.projectElements(a,`LikeC4View`).filter(t=>t.name===e.name).limit(2).count()>1&&r(`error`,`Duplicate view '${e.name}'`,{node:e,property:`name`})})};function collectFqnExprs(e){let t=[],r=e;for(;r;)r.value&&t.push(r.value),r=r.prev;return t.reverse()}const viewRuleRankChecks=e=>tryOrLog((e,t)=>{let r=collectFqnExprs(e.targets);r.length<2&&e.value===`same`&&t(`warning`,`Rank rule should have at least 2 targets`,{node:e,property:`targets`});let i=r.filter(isFqnRefExpr),a=i[0]?.ref?.parent;for(let r=1;r<i.length;r++){let o=i[r];e.value===`same`&&!areSame(a,o?.ref?.parent)&&t(`error`,`All targets must have the same parent rank same`,{node:e,property:`targets`})}});function areSame(e,t){return!e&&!t?!0:!e||!t||e.value.ref!==t.value.ref?!1:areSame(e.parent,t.parent)}const checkFqnExprWith=e=>{let t=e.likec4.ModelParser;return tryOrLog((e,r)=>{let i=getViewRulePredicateContainer(e);if(i?.$type!==`DynamicViewIncludePredicate`&&i?.isInclude!==!0){r(`error`,`Invalid usage inside "exclude"`,{node:e});return}let a=i.$type===`DynamicViewIncludePredicate`,o=t.forDocument(st(i)),s=yr.unwrap(o.parseFqnExprWith(e).custom.expr);switch(!0){case yr.isWildcard(s)&&a:case yr.isElementKindExpr(s)&&a:case yr.isElementTagExpr(s)&&a:r(`warning`,`Predicate is ignored, as not supported in dynamic views`,{node:e});return;case yr.isWildcard(s):case yr.isModelRef(s):case yr.isDeploymentRef(s):return;case yr.isElementKindExpr(s):case yr.isElementTagExpr(s):r(`error`,`Invalid target (expect reference to specific element)`,{node:e,property:`subject`});return;default:bi(s)}})},checkFqnRefExpr=e=>{let t=e.likec4.ModelParser;return tryOrLog((e,r)=>{let i=t.forDocument(st(e)).parseFqnRefExpr(e),a=getViewRulePredicateContainer(e),o=isFqnRefInsideDeployment(e)&&!Me(e,e=>isDeploymentViewRuleStyle(e)||isViewRuleStyle(e));if(a?.$type===`DeploymentViewRulePredicate`||o){if(!Me(e,isRelationExpr)){if(yr.isModelRef(i)){r(`error`,`Deployment view predicate must reference deployment model`,{node:e});return}if(yr.isDeploymentRef(i)&&z.isInsideInstanceRef(i.ref)){r(`error`,`Must reference deployment nodes or instances, but not internals`,{node:e});return}}R(e.selector)&&!isDeploymentNode$1(e.ref.value?.ref)&&r(`warning`,`Selector '${e.selector}' applies to deployment nodes only, ignored here`,{node:e,property:`selector`});return}if(a?.$type===`DynamicViewIncludePredicate`)switch(!0){case yr.isElementKindExpr(i):case yr.isElementTagExpr(i):case yr.isWildcard(i):r(`warning`,`Predicate is ignored, as not supported in dynamic views`,{node:e});return}})},checkIncomingRelationExpr=e=>tryOrLog((e,t)=>{e.to.$type===`WildcardExpression`&&!isInOutRelationExpr(e.$container)&&I(Ge(e,isElementView$1)?.viewOf)&&t(`warning`,`Predicate is ignored as it concerns all relationships`,{node:e})}),checkOutgoingRelationExpr=e=>tryOrLog((e,t)=>{if(getViewRulePredicateContainer(e)?.$type===`ViewRulePredicate`&&e.$container.$type!==`DirectedRelationExpr`&&e.from.$type===`WildcardExpression`){let r=Ge(e,isElementView$1);r&&I(r.viewOf)&&t(`warning`,`Predicate is ignored as it concerns all relationships`,{node:e})}}),checkRelationExpr=e=>{let t=e.likec4.ModelParser;return tryOrLog((e,r)=>{let i=Ge(e,isDeploymentViewRulePredicate);if(!i||i.isInclude!==!0)return;let a=st(e),o=t.forDocument(a),s=Nr.unwrap(o.parseRelationExpr(e)),c=`Model reference is allowed in exclude predicate only`;if(Nr.isDirect(s)){(kr.isModelRef(s.source)||kr.isModelRef(s.target))&&r(`error`,c,{node:e});return}let l;if(l=Nr.isIncoming(s)?s.incoming:Nr.isOutgoing(s)?s.outgoing:s.inout,kr.isModelRef(l)){r(`error`,c,{node:e});return}})},checkRelationExprWith=e=>tryOrLog((e,t)=>{let r=getViewRulePredicateContainer(e);if(!(!r||r.$type==`DynamicViewIncludePredicate`)&&!r.isInclude){t(`error`,`Invalid usage inside "exclude"`,{node:e});return}});var LikeC4DocumentValidator=class extends ie{services;constructor(e){super(e),this.services=e}async validateDocument(e,t,r){return this.services.shared.workspace.ProjectsManager.isExcluded(e)?[]:await super.validateDocument(e,t,r)}};nt();const Jf=Cr(isImportsFromPoject,isImported,isGlobals,isGlobalPredicateGroup,isGlobalDynamicPredicateGroup,isGlobalStyle,isGlobalStyleGroup,isFqnExprWith,isRelationExprWith,isFqnExpr,isRelationExpr,isStepStatement,isDeploymentViewRule,isDeploymentViewRulePredicate,isExpressionV2,isRelationExpr,isFqnRefExpr,isViewProperty,isStyleProperty,isTags,isViewRule,isDynamicViewRule,isLikeC4View,isViewRuleStyleOrGlobalRef,isDeployedInstance,isDeploymentNode$1,isDeploymentRelation,isRelationshipStyleProperty,isDynamicViewDisplayVariantProperty,isMetadataBody,isMetadataProperty,isRelation,isRelationBody,isElementProperty,isStringProperty,isNavigateToProperty,isElement,isElementBody,isElementStyleProperty,isElementRef,isExtendElement,isExtendElementBody,isExtendDeployment,isExtendDeploymentBody,isExtendRelation,isExtendRelationBody,isSpecificationElementKind,isSpecificationRelationshipKind,isSpecificationDeploymentNodeKind,isSpecificationTag,isSpecificationColor,isSpecificationRule,isExpressions,isColorLiteral),findInvalidContainer=e=>{let t=e;for(;t&&!isLikeC4Grammar(t);){if(Jf(t))return t;t=t.$container}};function checksFromDiagnostics(e){let t=e.state>=y.Validated?e.diagnostics?.filter(e=>e.severity===Se.Error)??[]:[],r=new WeakSet;for(let{node:e}of t)if(!(I(e)||r.has(e))&&(r.add(e),!Jf(e))){let t=findInvalidContainer(e);t&&r.add(t)}let isValid=e=>!r.has(e);return{isValid,invalidNodes:r}}function registerValidationChecks(e){q.debug(`registerValidationChecks`),e.validation.ValidationRegistry.register({DeployedInstance:deployedInstanceChecks(e),DeploymentNodeKind:checkDeploymentNodeKind(e),DeploymentNode:deploymentNodeChecks(e),DeploymentRelation:deploymentRelationChecks(e),ExtendDeployment:extendDeploymentChecks(e),ExtendRelation:extendRelationChecks(e),FqnRefExpr:checkFqnRefExpr(e),RelationExpr:checkRelationExpr(e),OpacityProperty:opacityPropertyRuleChecks(e),IconProperty:iconPropertyRuleChecks(e),SpecificationRule:checkSpecificationRule(e),Model:checkModel(e),Globals:checkGlobals(e),GlobalPredicateGroup:checkGlobalPredicate(e),GlobalDynamicPredicateGroup:checkGlobalPredicate(e),GlobalStyleId:checkGlobalStyleId(e),Step:stepSingle(e),StepSeries:stepSeries(e),SubflowStep:subflowStep(e),LikeC4View:viewChecks(e),Element:checkElement(e),ElementRef:checkElementRef(e),ElementKind:checkElementKind(e),Relation:relationChecks(e),RelationBody:checkRelationBody(e),Tag:checkTag(e),FqnExprWith:checkFqnExprWith(e),RelationExprWith:checkRelationExprWith(e),RelationshipKind:checkRelationshipKind(e),IncomingRelationExpr:checkIncomingRelationExpr(e),OutgoingRelationExpr:checkOutgoingRelationExpr(e),ImportsFromPoject:checkImportsFromPoject(e),ColorLiteral:colorLiteralRuleChecks(e),DynamicViewDisplayVariantProperty:dynamicViewDisplayVariant(e),ViewRuleRank:viewRuleRankChecks(e)});let t=e.shared.lsp.Connection;t&&xi(()=>{e.shared.workspace.DocumentBuilder.onUpdate((e,r)=>{for(let e of r)q.debug(`clear diagnostics for deleted ${e.path}`),t.sendDiagnostics({uri:e.toString(),diagnostics:[]}).catch(e=>q.error(c(e)))})})}const Yf=q.getChild(`parser`);function toSingleLine(e){if(e==null)return;let t=removeIndent(e);return M(t)?t.split(`
85
85
  `).join(` `):`md`in t?{md:t.md.split(`
86
86
  `).join(` `)}:{txt:t.txt.split(`
87
- `).join(` `)}}function removeIndent(e){if(e!=null)switch(!0){case M(e):return dedent(e).trim();case isMarkdownOrString(e)&&M(e.markdown):return{md:dedent(e.markdown).trim()};case isMarkdownOrString(e)&&M(e.text):return{txt:dedent(e.text).trim()};case isMarkdownOrString(e):return{txt:``};default:return}}var BaseParser=class{services;doc;project;isValid;docUri;docPathInProject;constructor(e,t,r){this.services=e,this.doc=t,this.project=r,this.isValid=checksFromDiagnostics(t).isValid,this.docUri=t.uri.toString(),this.docPathInProject=S.relative(r.folderUri,t.uri)}logError(e,t,r){let i=e instanceof Error?e.message:typeof e==`string`?e:String(e);if(Oe(t)){let e=this.services.references.NameProvider.getName(t);e=e?`"${e}" (${t.$type})`:`${t.$type}`;let r=t.$cstNode,a=r?`:${r.range.start.line+1}:${r.range.start.character+1}`:``;i+=`\n\tat ${e} (${this.doc.uri.fsPath}${a})`}else t&&`$refText`in t&&(i+=`\n\tat reference "${t.$refText}" (${this.doc.uri.fsPath})`);r&&r!==`base`?Yf.getChild(r).debug(i):Yf.debug(i)}tryParse(e,t,r){try{return!t||!this.isValid(t)?void 0:r(t)}catch(r){this.logError(r,t,e);return}}tryMap(e,t,r){let i=0;return A(t,t=>{try{if(!t||!this.isValid(t))return[];let e=r(t,i);return e===void 0?[]:(i++,e)}catch(r){return this.logError(r,t,e),[]}})}resolveFqn(e){if(isImported(e)){let t=projectIdFrom(e),r=this.resolveFqn(ni(e.imported.ref,`FqnRef is empty of imported: ${e.$cstNode?.text}`));return this.doc.c4Imports.set(t,r),Ar(t,r)}return isExtendElement(e)?readStrictFqn(e.element):isExtendDeployment(e)?readStrictFqn(e.deploymentNode):isDeploymentElement(e)?this.services.likec4.DeploymentsIndex.getFqn(e):this.services.likec4.FqnIndex.getFqn(e)}getAstNodePath(e){return this.services.workspace.AstNodeLocator.getAstNodePath(e)}getMetadata(e){if(!e||!this.isValid(e)||j(e.props))return;let extractValues=e=>{if(isMarkdownOrString(e)){let t=removeIndent(e);if(!t)return[];if(typeof t==`string`)return R(t)?[t]:[];{let e=t.md||t.txt;return R(e)?[e]:[]}}else if(isMetadataArray(e))return e.values.map(e=>removeIndent(e)).map(e=>typeof e==`string`?e:e.md||e.txt).filter(R);return[]},t=L(e.props,A(e=>e.value?extractValues(e.value).map(t=>[e.key,t]):[[e.key,String(e.boolValue)]]),N(([e,t])=>R(t)));if(j(t))return;let r=L(t,$t(([e])=>e),Ln(e=>e.map(([e,t])=>t))),i={};for(let[e,t]of Object.entries(r))t&&t.length>0&&(i[e]=t.length===1?t[0]:t);return j(i)?void 0:i}parseMarkdownOrString(e){if(isMarkdownOrString(e))return removeIndent(e)}convertTags(e){return this.parseTags(e)}parseTags(e){let t=e?.tags;if(!t)return null;let r=[];for(;t;)r.push(...this.tryMap(`base`,t.values,e=>ni(e.tag.ref,`Tag reference is not resolved`).name).filter(R)),t=t.prev;return Qr(r)?Mn(r):null}convertLinks(e){return this.parseLinks(e)}parseLinks(e){if(!e?.props||e.props.length===0)return;let t=this.tryMap(`base`,N(e.props,isLinkProperty),e=>{let t=e.value;if(an(t))return;let r=R(e.title)?toSingleLine(e.title):void 0,i=this.services.lsp.DocumentLinkProvider.relativeLink(this.doc,t);return Hr({url:t,title:r,relative:i&&i!==t?i:void 0})});return Qr(t)?t:void 0}parseIconProperty(e){if(!e||!this.isValid(e))return;let{libicon:t,value:r}=e;switch(!0){case!!t:{let r=t.ref?.name;if(!r){this.logError(`Library icon ${t.$refText} is not a valid library icon`,e);return}return r}case r&&r===`none`:return r;case r&&St(r):if(r.startsWith(`file:`)){this.logError(`Icon property '${r}' used the 'file' protocol which is not supported`,e);return}return r;case r&&r.startsWith(`@`):return this.parseImageAlias(r);case r&&vt(r):return ht(this.doc.uri.toString(),`../`,r);case r&&bt(r):return xt(this.project.folderUri.toString(),r);default:this.logError(`Icon property '${r}' is not a valid URL, library icon, image alias or 'none'`,e);return}}parseImageAlias(e){let t=e.indexOf(`/`),r=t>0?e.substring(0,t):e,i=t>0?e.substring(t+1):``,a={"@":`./images`,...this.project.config.imageAliases}[r];if(!a){Yf.warn(`Image alias "${r}" not found in project configuration`);return}let o=i?xt(a,i):a;return xt(this.project.folderUri.toString(),o)}parseColorLiteral(e){if(this.isValid(e)){if(isHexColor(e))return`#${e.hex}`;if(isRGBAColor(e)){let t=on(e.alpha)?e.alpha:void 0;return M(e.alpha)&&(t=parseAstPercent(e.alpha)/100),t===void 0?`rgb(${e.red},${e.green},${e.blue})`:`rgba(${e.red},${e.green},${e.blue},${t})`}U(e)}}parseElementStyle(e){if(!e)return{};if(nn(e)){let t=this.parseStyleProps(e.find(isElementStyleProperty)?.props);try{let r=this.parseIconProperty(e.find(isIconProperty));r&&(t.icon=r)}catch(e){this.logError(e)}return t}return this.parseStyleProps(e.props)}parseStyleProps(e){let t={};if(!e||e.length===0)return t;for(let r of e)if(this.isValid(r))try{switch(!0){case isBorderProperty(r):R(r.value)&&(t.border=r.value);break;case isColorProperty(r):{let e=toColor(r);R(e)&&(t.color=e);break}case isShapeProperty(r):R(r.value)&&(t.shape=r.value);break;case isIconProperty(r):{let e=this.parseIconProperty(r);R(e)&&(t.icon=e);break}case isIconColorProperty(r):{let e=toColor(r);R(e)&&(t.iconColor=e);break}case isIconSizeProperty(r):R(r.value)&&(t.iconSize=parseAstSizeValue(r));break;case isIconPositionProperty(r):R(r.value)&&(t.iconPosition=parseAstIconPositionValue(r));break;case isOpacityProperty(r):t.opacity=parseAstOpacityProperty(r);break;case isMultipleProperty(r):t.multiple=en(r.value)?r.value:!1;break;case isShapeSizeProperty(r):R(r.value)&&(t.size=parseAstSizeValue(r));break;case isPaddingSizeProperty(r):R(r.value)&&(t.padding=parseAstSizeValue(r));break;case isTextSizeProperty(r):R(r.value)&&(t.textSize=parseAstSizeValue(r));break;default:U(r)}}catch(e){this.logError(e,r)}return Hr(t)}parseBaseProps(e,t){let r=removeIndent(t?.title??parseMarkdownAsString(e.title)),i=t?.description?{txt:removeIndent(t.description)}:this.parseMarkdownOrString(e.description);return Hr({title:r,summary:t?.summary?{txt:removeIndent(t.summary)}:this.parseMarkdownOrString(e.summary),description:i,technology:toSingleLine(t?.technology)??removeIndent(parseMarkdownAsString(e.technology))})}};function*streamDeploymentModel(e){let t=Mr.from(e.parseResult.value.deployments.flatMap(e=>e.elements)),r=[],i;for(;i=t.shift();){if(isDeploymentRelation(i)){r.push(i);continue}if(i.body&&i.body.elements.length>0)for(let e of i.body.elements)t.push(e);yield i}yield*r}function DeploymentModelParser(e){return class DeploymentModelParser extends e{parseDeployment(){let e=this.doc;for(let t of streamDeploymentModel(e))try{switch(!0){case isDeploymentRelation(t):this.isValid(t)&&e.c4DeploymentRelations.push(this.parseDeploymentRelation(t));break;case isDeployedInstance(t):e.c4Deployments.push(this.parseDeployedInstance(t));break;case isDeploymentNode$1(t):e.c4Deployments.push(this.parseDeploymentNode(t));break;case isExtendDeployment(t):{let r=this.parseExtendDeployment(t);r&&e.c4ExtendDeployments.push(r);break}default:U(t)}}catch(e){this.logError(e,t,`deployment`)}}parseDeploymentNode(e){let t=this.isValid,r=this.resolveFqn(e),i=ni(e.kind.ref,`DeploymentKind not resolved`).name,a=this.parseTags(e.body)??void 0,o=this.parseLinks(e.body),s=this.parseElementStyle(e.body?.props),c=this.getMetadata(e.body?.props.find(isMetadataProperty)),l=L(e.body?.props??[],N(t),N(isElementStringProperty),zn(e=>[e.key,e.value])),{title:u,...d}=this.parseBaseProps(l,{title:e.title,summary:e.summary});return Hr({id:r,kind:i,title:u??ti(r),...d,tags:a,links:o,style:s,metadata:c})}parseDeployedInstance(e){let t=this.isValid,r=this.resolveFqn(e),i=this.parseFqnRef(e.target.modelElement);H(V.isModelRef(i)||V.isImportRef(i),`Target must be a model reference`);let a=this.parseTags(e.body)??void 0,o=this.parseElementStyle(e.body?.props),s=this.getMetadata(e.body?.props.find(isMetadataProperty)),c=L(e.body?.props??[],N(t),N(isElementStringProperty),zn(e=>[e.key,e.value])),l=this.parseBaseProps(c,{title:e.title,summary:e.summary});return Hr({id:r,element:i,tags:a,links:this.parseLinks(e.body),...l,style:o,metadata:s})}parseExtendDeployment(e){let t=this.parseTags(e.body),r=this.getMetadata(e.body?.props.find(isMetadataProperty)),i=this.parseLinks(e.body);return!t&&j(r??{})&&!i?null:Hr({id:this.resolveFqn(e),astPath:this.getAstNodePath(e),metadata:r,tags:t,links:i})}_resolveDeploymentRelationSource(e){if(Zt(e.source))return this.parseFqnRef(e.source);if(e.$container.$type===`DeploymentNodeBody`||e.$container.$type===`DeployedInstanceBody`)return{deployment:this.resolveFqn(e.$container.$container)};throw Error(`RelationRefError: Invalid container for sourceless relation`)}parseDeploymentRelation(e){let t=this.isValid,r=this.getAstNodePath(e),i=this._resolveDeploymentRelationSource(e);H(V.isDeploymentRef(i),`Invalid source for deployment relation`);let a=this.parseFqnRef(e.target);H(V.isDeploymentRef(a),`Invalid target for deployment relation`);let o=this.convertTags(e)??this.convertTags(e.body)??void 0,s=this.convertLinks(e.body),c=(e.kind??e.dotKind?.kind)?.ref?.name,l=this.getMetadata(e.body?.props.find(isMetadataProperty)),u=L(e.body?.props??[],N(isRelationStringProperty),N(e=>R(e.value)),zn(e=>[e.key,e.value])),d=L(e.body?.props??[],N(isRelationNavigateToProperty),tn())?.value.view.ref?.name,p=this.parseBaseProps(u,{title:e.title}),m=e.body?.props.find(isRelationStyleProperty);return Hr({id:stringHash$1(`deployment`,this.docUri,r,i.deployment,a.deployment),source:i,target:a,...p,metadata:l,kind:c,tags:o,links:s,...toRelationshipStyle(m?.props,t),navigateTo:d,astPath:r})}}}function DeploymentViewParser(e){return class DeploymentViewParser extends e{parseDeploymentView(e){let t=e.body;H(t,`DynamicElementView body is not defined`);let r=t.props.filter(this.isValid),i=this.getAstNodePath(e),a=e.name;a||=`deployment_`+stringHash$1(this.doc.uri.toString(),i);let{title:o=null,description:s=null}=this.parseBaseProps(L(r,N(isViewStringProperty),zn(e=>[e.key,e.value]))),c=this.convertTags(t),l=this.convertLinks(t);return af.writeId(e,a),{[B._type]:`deployment`,id:a,astPath:i,title:toSingleLine(o)??null,description:s,tags:c,links:Qr(l)?l:null,rules:this.tryMap(`deployment`,t.rules,e=>this.parseDeploymentViewRule(e))}}parseDeploymentViewRule(e){if(isDeploymentViewRulePredicate(e))return this.parseDeploymentViewRulePredicate(e);if(isViewRuleAutoLayout(e))return toAutoLayout(e);if(isViewRuleAncestors(e))return{includeAncestors:e.value};if(isDeploymentViewRuleStyle(e))return this.parseDeploymentViewRuleStyle(e);U(e)}parseDeploymentViewRulePredicate(e){let t=[],r=e.expr;for(;r;){try{let e=r.value;F(e)&&this.isValid(e)&&t.unshift(this.parseExpressionV2(e))}catch(e){logWarnError(e)}r=r.prev}return e.isInclude?{include:t}:{exclude:t}}parseDeploymentViewRuleStyle(e){let t=this.parseStyleProps(e.props.filter(isStyleProperty)),r=removeIndent(parseMarkdownAsString(e.props.find(isNotationProperty)?.value));return{targets:this.parseFqnExpressions(e.targets),style:t,...r&&{notation:r}}}}}const parseMetadataEquals=({operator:e,not:t},r)=>e?.startsWith(`!=`)?{neq:r}:e?.startsWith(`=`)?{eq:r}:t?{neq:r}:{eq:r},parseEquals=({operator:e,not:t},r)=>e.startsWith(`!=`)?{neq:r}:e.startsWith(`=`)?{eq:r}:t?{neq:r}:{eq:r};function parseParticipant(e){return!isWhereRelationParticipantKind(e)&&!isWhereRelationParticipantTag(e)&&!isWhereRelationParticipantMetadata(e)?null:e.participant}function parseWhereClause(e){switch(!0){case isWhereTagEqual(e):{let t=e.value.tag.ref?.name,r=parseParticipant(e);H(t,`Expected tag name`);let i={tag:parseEquals(e,t)};return r?{participant:r,operator:i}:i}case isWhereKindEqual(e):{let t=e.value?.ref?.name,r=parseParticipant(e);H(t,`Expected kind name`);let i={kind:parseEquals(e,t)};return r?{participant:r,operator:i}:i}case isWhereMetadataEqual(e):{let t=e.key,r=parseParticipant(e);H(t,`Expected metadata key`);let i={metadata:{key:t,...e.value==null?{}:{value:parseMetadataEquals(e,String(e.value))}}};return r?{participant:r,operator:i}:i}case isWhereElementNegation(e)||isWhereRelationNegation(e):return{not:parseWhereClause(e.value)};case isWhereBinaryExpression(e):{let t=parseWhereClause(e.left),r=parseWhereClause(e.right);return createBinaryOperator(e.operator.toLowerCase(),t,r)}default:U(e)}}function createBinaryOperator(e,t,r){if(r===null)return t;switch(e){case`and`:{let e=[Gr(t)?t.and:t,Gr(r)?r.and:r].flat();return H(Qr(e),`Expected non-empty array`),{and:e}}case`or`:{let e=[$r(t)?t.or:t,$r(r)?r.or:r].flat();return H(Qr(e),`Expected non-empty array`),{or:e}}default:U(e)}}function ExpressionV2Parser(e){return class ExpressionV2Parser extends e{parseFqnRef(e){let t=ni(e.value?.ref,()=>`Element "${e.$cstNode?.text}" is not resolved`);if(isImported(t)){let e={project:projectIdFrom(t),model:this.resolveFqn(ni(t.imported.ref,`Imported "${t.$cstNode?.text}" is not resolved`))};return this.doc.c4Imports.set(e.project,e.model),e}if(isElement(t)){let r=importsRef(e);if(r){let e={project:projectIdFrom(r),model:this.resolveFqn(t)};return this.doc.c4Imports.set(e.project,e.model),e}let i=instanceRef(e);return i?{deployment:this.resolveFqn(i),element:this.resolveFqn(t)}:{model:this.resolveFqn(t)}}if(isDeploymentElement(t))return{deployment:this.resolveFqn(t)};U(t)}parseExpressionV2(e){if(isFqnExprOrWith(e))return this.parseFqnExprOrWith(e);if(isRelationExprOrWith(e))return this.parseRelationExprOrWith(e);U(e)}parseFqnExprOrWith(e){if(isFqnExprWith(e))return this.parseFqnExprWith(e);if(isFqnExprOrWhere(e))return this.parseFqnExprOrWhere(e);U(e)}parseFqnExprWith(e){let t=this.parseFqnExprOrWhere(e.subject);return(e.custom?.props??[]).reduce((e,t)=>{if(!this.isValid(t))return e;if(isNavigateToProperty(t)){let r=t.value.view.$refText;return R(r)&&(e.custom.navigateTo=r),e}if(isNotesProperty(t)){let r=this.parseMarkdownOrString(t.value);return r&&(e.custom[t.key]=r),e}if(isElementStringProperty(t)){if(t.key===`description`||t.key===`summary`){let r=this.parseMarkdownOrString(t.value);return r&&(e.custom.description=r),e}let r=removeIndent(parseMarkdownAsString(t.value));return r&&(e.custom[t.key]=r),e}if(isIconProperty(t)){let r=this.parseIconProperty(t);return Zt(r)&&(e.custom[t.key]=r),e}if(isColorProperty(t)){let r=toColor(t);return Zt(r)&&(e.custom[t.key]=r),e}if(isShapeProperty(t)||isBorderProperty(t))return Zt(t.value)&&(e.custom[t.key]=t.value),e;if(isOpacityProperty(t))return Zt(t.value)&&(e.custom[t.key]=parseAstOpacityProperty(t)),e;if(isIconColorProperty(t)){let r=toColor(t);return Zt(r)&&(e.custom[t.key]=r),e}if(isNotationProperty(t)){let r=R(t.value)?removeIndent(parseMarkdownAsString(t.value)):void 0;return r&&(e.custom[t.key]=r),e}if(isMultipleProperty(t))return en(t.value)&&(e.custom[t.key]=t.value),e;if(isShapeSizeProperty(t)||isTextSizeProperty(t)||isPaddingSizeProperty(t)||isIconSizeProperty(t))return R(t.value)&&(e.custom[t.key]=parseAstSizeValue(t)),e;if(isIconPositionProperty(t))return R(t.value)&&(e.custom[t.key]=t.value),e;U(t)},{custom:{expr:t}})}parseFqnExprOrWhere(e){if(isFqnExprWhere(e))return this.parseFqnExprWhere(e);if(isFqnExpr(e))return this.parseFqnExpr(e);U(e)}parseFqnExprWhere(e){return H(!isFqnExprWhere(e.subject),`FqnExprWhere is not allowed as subject of FqnExprWhere`),{where:{expr:this.parseFqnExpr(e.subject),condition:e.where?parseWhereClause(e.where):{kind:{neq:`--always-true--`}}}}}parseFqnExpr(e){if(isWildcardExpression(e))return{wildcard:!0};if(isElementKindExpression(e))return H(e.kind?.ref,`ElementKind "${e.$cstNode?.text}" is not resolved`),{elementKind:e.kind.ref.name,isEqual:e.isEqual};if(isElementTagExpression(e))return H(e.tag.tag.ref,`Tag ${e.$cstNode?.text} is not resolved`),{elementTag:e.tag.tag.ref.name,isEqual:e.isEqual};if(isFqnRefExpr(e))return this.parseFqnRefExpr(e);U(e)}parseFqnRefExpr(e){let t=this.parseFqnRef(e.ref);switch(!0){case e.selector===`._`:return{ref:t,selector:`expanded`};case e.selector===`.**`:return{ref:t,selector:`descendants`};case e.selector===`.*`:return{ref:t,selector:`children`};default:return{ref:t}}}parseFqnExpressions(e){let t=[],r=e;for(;r;){try{F(r.value)&&this.isValid(r.value)&&t.push(this.parseFqnExpr(r.value))}catch(e){this.logError(e,r.value,`fqnref`)}r=r.prev}return t.reverse()}parseRelationExprOrWith(e){if(isRelationExprWith(e))return this.parseRelationExprWith(e);if(isRelationExprOrWhere(e))return this.parseRelationExprOrWhere(e);U(e)}parseRelationExprWith(e){let t=this.parseRelationExprOrWhere(e.subject);return{customRelation:{...this.parseCustomRelationProperties(e.custom),expr:t}}}parseCustomRelationProperties(e){return(e?.props??[]).reduce((e,t)=>{if(isNotesProperty(t)){let r=this.parseMarkdownOrString(t.value);return r&&(e[t.key]=r),e}if(isRelationStringProperty(t)||isNotationProperty(t)){if(t.key===`description`){let r=this.parseMarkdownOrString(t.value);return r&&(e.description=r),e}let r=removeIndent(parseMarkdownAsString(t.value));return r&&(e[t.key]=r),e}if(isArrowProperty(t))return R(t.value)&&(e[t.key]=t.value),e;if(isColorProperty(t)){let r=toColor(t);return R(r)&&(e[t.key]=r),e}if(isLineProperty(t))return R(t.value)&&(e[t.key]=t.value),e;if(isRelationNavigateToProperty(t)){let r=t.value.view.ref?.name;return R(r)&&(e[t.key]=r),e}if(isMultipleProperty(t))return en(t.value)&&(e[t.key]=t.value),e;U(t)},{})}parseRelationExprOrWhere(e){if(isRelationExprWhere(e))return this.parseRelationExprWhere(e);if(isRelationExpr(e))return this.parseRelationExpr(e);U(e)}parseRelationExprWhere(e){H(!isRelationExprWhere(e.subject),`RelationExprWhere is not allowed as subject of RelationExprWhere`);let t=this.parseRelationExpr(e.subject),r=t.where?.expr??t,i=t.where?.condition,a=e.where?parseWhereClause(e.where):null,o;return o=a&&i?createBinaryOperator(`and`,i,a):a??i??{kind:{neq:`--always-true--`}},{where:{expr:r,condition:o}}}parseRelationExpr(e){switch(e.$type){case`DirectedRelationExpr`:return this.wrapInWhere({source:this.parseFqnExpr(e.source.from),target:this.parseFqnExpr(e.target),isBidirectional:e.source.isBidirectional},this.parseInlineKindCondition(e.source));case`InOutRelationExpr`:return{inout:this.parseFqnExpr(e.inout.to)};case`OutgoingRelationExpr`:return this.wrapInWhere({outgoing:this.parseFqnExpr(e.from)},this.parseInlineKindCondition(e));case`IncomingRelationExpr`:return{incoming:this.parseFqnExpr(e.to)};default:U(e)}}parseInlineKindCondition(e){let t=e.kind??e.dotKind?.kind;return t?t.ref?{kind:{eq:t.ref?.name}}:(this.logError(`RelationshipKind "${t.$refText}" is not resolved`,e,`fqnref`),null):null}wrapInWhere(e,t){return t?{where:{expr:e,condition:t}}:e}}}function GlobalsParser(e){return class GlobalsParser extends e{parseGlobals(){let{parseResult:e,c4Globals:t}=this.doc,r=this.isValid,i=e.value.globals.filter(r),a=i.flatMap(e=>e.predicates.filter(r));for(let e of a)try{let r=e.name;if(!R(r))continue;if(r in t.predicates){this.logError(`Global predicate named "${r}" is already defined`,e,`globals`);continue}this.parseAndStoreGlobalPredicateGroupOrDynamic(e,r,t)}catch(t){this.logError(t,e,`globals`)}let o=i.flatMap(e=>e.styles.filter(r));for(let e of o)try{let r=e.id.name;if(!R(r))continue;if(r in t.styles){this.logError(`Global style named "${r}" is already defined`,e,`globals`);continue}let i=this.parseGlobalStyleOrGroup(e);k(i,1)&&(t.styles[r]=i)}catch(t){this.logError(t,e,`globals`)}}parseAndStoreGlobalPredicateGroupOrDynamic(e,t,r){if(isGlobalPredicateGroup(e)){let i=this.parseGlobalPredicateGroup(e);k(i,1)&&(r.predicates[t]=i);return}if(isGlobalDynamicPredicateGroup(e)){let i=this.parseGlobalDynamicPredicateGroup(e);k(i,1)&&(r.dynamicPredicates[t]=i);return}U(e)}parseGlobalPredicateGroup(e){return e.predicates.map(e=>this.parseViewRulePredicate(e))}parseGlobalDynamicPredicateGroup(e){return e.predicates.map(e=>this.parseDynamicViewIncludePredicate(e))}parseGlobalStyleOrGroup(e){if(isGlobalStyle(e))return[this.parseViewRuleStyle(e)];if(isGlobalStyleGroup(e))return e.styles.map(e=>this.parseViewRuleStyle(e));U(e)}}}function ImportsParser(e){return class ImportsParser extends e{parseImports(){let e=this.doc.parseResult.value.imports??[];for(let t of e){let e=t.project,r=t.imports;for(;r;){try{this.doc.c4Imports.set(e,this.resolveFqn(ni(r.imported.ref,`ElementRef is empty of imported: ${r.imported.$refText}`)))}catch(e){this.logError(e,r,`imports`)}r=r.prev}}}}}function*streamModel(e){let t=Mr.from(e.parseResult.value.models.flatMap(e=>e.elements)),r=[],i;for(;i=t.shift();){if(isRelation(i)){r.push(i);continue}if(isExtendRelation(i)){r.push(i);continue}if(i.body?.elements&&k(i.body.elements,1))for(let e of i.body.elements)t.push(e);yield i}yield*r}function ModelParser(e){return class ModelParser extends e{parseModel(){let e=this.doc;for(let t of streamModel(e))try{if(isElement(t)){e.c4Elements.push(this.parseElement(t));continue}if(isRelation(t)){e.c4Relations.push(this.parseRelation(t));continue}if(isExtendElement(t)){let r=this.parseExtendElement(t);r&&e.c4ExtendElements.push(r);continue}if(isExtendRelation(t)){let r=this.parseExtendRelation(t);r&&e.c4ExtendRelations.push(r);continue}U(t)}catch(e){this.logError(e,t,`model`)}}parseElement(e){let t=this.isValid,r=this.resolveFqn(e),i=ni(e.kind.ref,`Element kind is not resolved`).name,a=this.parseTags(e.body),o=this.parseElementStyle(e.body?.props),s=this.getMetadata(e.body?.props.find(isMetadataProperty)),c=this.getAstNodePath(e),[l,u,d]=e.props??[],p=L(e.body?.props??[],N(t),N(isElementStringProperty),zn(e=>[e.key,e.value])),{title:m,...h}=this.parseBaseProps(p,{title:l,summary:u,technology:d});return Sr({id:r,kind:i,astPath:c,title:m,metadata:s,tags:a??void 0,links:this.parseLinks(e.body),...h,style:o})}parseExtendElement(e){let t=this.parseTags(e.body),r=this.getMetadata(e.body?.props.find(isMetadataProperty)),i=this.parseLinks(e.body);if(!t&&an(r)&&!i)return null;let a=this.getAstNodePath(e);return Sr({id:this.resolveFqn(e),astPath:a,metadata:r,tags:t,links:i})}parseExtendRelation(e){let t=this.parseFqnRef(e.source),r=this.parseFqnRef(e.target);H(z.isModelRef(t)||z.isImportRef(t),`Source must be a model reference`),H(z.isModelRef(r)||z.isImportRef(r),`Target must be a model reference`);let i=this.parseTags(e.body),a=this.getMetadata(e.body?.props.find(isMetadataProperty)),o=this.getAstNodePath(e),s=this.parseLinks(e.body);if(!i&&j(a??{})&&!s)return null;let c=(e.kind??e.dotKind?.kind)?.ref?.name,{title:l=``}=this.parseBaseProps({},{title:e.title});return Sr({id:stringHash$1(`extend-relation`,z.flatten(t),z.flatten(r),c??`default`,l),astPath:o,metadata:a,tags:i,links:s})}_resolveRelationSource(e){if(Zt(e.source)){let t=this.parseFqnRef(e.source);return H(z.isModelRef(t)||z.isImportRef(t),`Relation source must be a model reference`),t}if(isElementBody(e.$container)||isExtendElementBody(e.$container))return{model:this.resolveFqn(e.$container.$container)};throw Error(`RelationRefError: Invalid container for sourceless relation`)}parseRelation(e){let t=this.isValid,r=this._resolveRelationSource(e),i=this.parseFqnRef(e.target);H(z.isModelRef(i)||z.isImportRef(i),`Target must be a model reference`);let a=this.parseTags(e)??this.parseTags(e.body)??void 0,o=this.parseLinks(e.body),s=(e.kind??e.dotKind?.kind)?.ref?.name,c=this.getMetadata(e.body?.props.find(isMetadataProperty)),l=this.getAstNodePath(e),u=L(e.body?.props??[],N(isRelationStringProperty),N(e=>R(e.value)),zn(e=>[e.key,e.value])),d=L(e.body?.props??[],N(isRelationNavigateToProperty),P(e=>e.value.view.ref?.name),N(R),tn()),{title:p=``,description:m,technology:h}=this.parseBaseProps(u,{title:e.title,description:e.description,technology:e.technology}),g=e.body?.props.find(isRelationStyleProperty);return Sr({id:stringHash$1(this.docUri,l,z.flatten(r),z.flatten(i)),astPath:l,source:r,target:i,title:p,metadata:c,kind:s,tags:a,links:o,navigateTo:d,description:m,technology:h,...toRelationshipStyle(g?.props,t)})}}}function PredicatesParser(e){return class PredicatesParser extends e{parsePredicate(e){return this.parseExpressionV2(e)}parseElementPredicate(e){if(isFqnExprWith(e))return this.parseFqnExprWith(e);if(isFqnExprOrWhere(e))return this.parseFqnExprOrWhere(e);U(e)}parseElementPredicateOrWhere(e){return this.parseFqnExprOrWhere(e)}parseElementExpression(e){return this.parseFqnExpr(e)}parseElementPredicateWhere(e){return this.parseFqnExprWhere(e)}parseElementPredicateWith(e){return this.parseFqnExprWith(e)}parseRelationPredicate(e){return this.parseRelationExprOrWith(e)}parseRelationPredicateOrWhere(e){return this.parseRelationExprOrWhere(e)}parseRelationPredicateWhere(e){return this.parseRelationExprWhere(e)}parseRelationPredicateWith(e){return this.parseRelationExprWith(e)}parseRelationExpression(e){return this.parseRelationExpr(e)}}}function SpecificationParser(e){return class SpecificationParser extends e{parseSpecification(){let{parseResult:{value:{specifications:e}},c4Specification:t}=this.doc,r=this.isValid;for(let i of e.flatMap(e=>e.elements.filter(r)))try{Object.assign(t.elements,this.parseElementSpecificationNode(i))}catch(e){this.logError(e,i,`specification`)}for(let i of e.flatMap(e=>e.deploymentNodes.filter(r)))try{Object.assign(t.deployments,this.parseElementSpecificationNode(i))}catch(e){this.logError(e,i,`specification`)}let i=e.flatMap(e=>e.relationships.filter(this.isValid));for(let e of i){let{kind:r,props:i}=e;try{let a=r.name;if(!R(a))continue;if(a in t.relationships){this.logError(`Relationship kind "${a}" is already defined`,r,`specification`);continue}let o=this.parseTags(e),s=this.parseLinks(e),c=L(i.filter(isSpecificationRelationshipStringProperty)??[],N(e=>this.isValid(e)),zn(e=>[e.key,e.value])),{summary:l,...u}=this.parseBaseProps(c),d=removeIndent(parseMarkdownAsString(c.notation)),p=i.filter(isMultipleProperty);p.length>1&&this.logError(`Duplicate 'multiple' property for relationship "${a}", using the first one`,r,`specification`);let m=p[0];t.relationships[a]=Hr({...u,notation:d,tags:o??void 0,...s&&B.isNonEmptyArray(s)&&{links:s},...toRelationshipStyle(i.filter(isRelationshipStyleProperty),this.isValid),...m&&{multiple:m.value}})}catch(e){this.logError(e,r,`specification`)}}let a=e.flatMap(e=>e.tags.filter(this.isValid));for(let e of a)try{let r=e.tag.name,i=this.getAstNodePath(e.tag),a=e.color&&this.parseColorLiteral(e.color);if(r in t.tags){this.logError(`Tag ${r} is already defined, skipping duplicate`,e,`specification`);continue}R(r)&&(t.tags[r]={astPath:i,...a?{color:a}:{}})}catch(t){this.logError(t,e,`specification`)}let o=e.flatMap(e=>e.colors.filter(r));for(let{name:e,color:r}of o)try{let i=e.name;if(i in t.colors){this.logError(`Custom color "${i}" is already defined`,e,`specification`);continue}t.colors[i]={color:yi(this.parseColorLiteral(r),`Color "${i}" is not valid`)}}catch(e){this.logError(e,r,`specification`)}}parseElementSpecificationNode(e){let{kind:t,props:r}=e,i=t.name;if(!R(i))throw Error(`DeploymentNodeKind name is not resolved`);let a=this.parseTags(e),o=this.parseElementStyle(r.find(isElementStyleProperty)),s=this.parseLinks(e),c=L(r.filter(isSpecificationElementStringProperty)??[],N(e=>this.isValid(e)),zn(e=>[e.key,e.value])),l=this.parseBaseProps(c),u=removeIndent(parseMarkdownAsString(c.notation));return{[i]:Hr({...l,notation:u,tags:a??void 0,...s&&B.isNonEmptyArray(s)&&{links:s},style:o})}}}}function ViewsParser(e){return class ViewsParser extends e{parseViews(){let e=this.isValid;for(let t of this.doc.parseResult.value.views){let r=t.styles.flatMap(t=>{try{return e(t)?this.parseViewRuleStyleOrGlobalRef(t):[]}catch(e){return this.logError(e,t,`views`),[]}}),i=t.folder&&!j(t.folder.trim())?toSingleLine(t.folder):null;for(let a of t.views)try{if(!e(a))continue;switch(!0){case isElementView$1(a):this.doc.c4Views.push(this.parseElementView(a,r));break;case isDynamicView$1(a):this.doc.c4Views.push(this.parseDynamicElementView(a,r));break;case isDeploymentView$1(a):this.doc.c4Views.push(this.parseDeploymentView(a));break;default:U(a)}if(i){let e=this.doc.c4Views.at(-1);e.title=i+` / `+(e.title||e.id)}}catch(e){this.logError(e,a,`views`)}}}parseElementView(e,t){let r=e.body;H(r,`ElementView body is not defined`);let i=this.getAstNodePath(e),a=null;if(`viewOf`in e){let t=elementRef(e.viewOf),r=t&&safeCall(()=>this.resolveFqn(t));if(r)a=r;else{let t=e.name??`unnamed`,r=e.viewOf.$cstNode?.text??`<unknown>`;this.logError(`viewOf ${t} not resolved ${r}`,e.viewOf)}}let o=e.name;o||=`view_`+stringHash$1(this.doc.uri.toString(),i,a??``);let{title:s=null,description:c=null}=this.parseBaseProps(L(r.props,N(e=>this.isValid(e)),N(isViewStringProperty),zn(e=>[e.key,e.value]))),l=this.convertTags(r),u=this.convertLinks(r),d={[B._type]:`element`,id:o,astPath:i,title:toSingleLine(s)??null,description:c,tags:l,links:Qr(u)?u:null,rules:[...t,...this.tryMap(`views`,r.rules,e=>this.parseElementViewRule(e))],...a&&{viewOf:a}};if(af.writeId(e,d.id),`extends`in e){let t=e.extends.view.ref;return H(t?.name,`view extends is not resolved: `+e.$cstNode?.text),Object.assign(d,{extends:t.name})}return d}parseElementViewRule(e){if(isViewRulePredicate(e))return this.parseViewRulePredicate(e);if(isViewRuleGlobalPredicateRef(e))return this.parseViewRuleGlobalPredicateRef(e);if(isViewRuleStyleOrGlobalRef(e))return this.parseViewRuleStyleOrGlobalRef(e);if(isViewRuleAutoLayout(e))return toAutoLayout(e);if(isViewRuleGroup(e))return this.parseViewRuleGroup(e);if(isViewRuleRank(e))return this.parseViewRuleRank(e);U(e)}parseViewRulePredicate(e){let t=[],r=e.exprs;for(;r;){let{value:e,prev:i}=r;if(this.tryParse(`views`,e,()=>{let r=this.parsePredicate(e);t.unshift(r)}),!i)break;r=i}return e.isInclude?{include:t}:{exclude:t}}parseViewRuleGlobalPredicateRef(e){return{predicateId:e.predicate.$refText}}parseViewRuleStyleOrGlobalRef(e){if(isViewRuleStyle(e))return this.parseViewRuleStyle(e);if(isViewRuleGlobalStyle(e))return this.parseViewRuleGlobalStyle(e);U(e)}parseViewRuleGroup(e){let t=[];for(let r of e.groupRules)try{if(!this.isValid(r))continue;if(isViewRulePredicate(r)){t.push(this.parseViewRulePredicate(r));continue}if(isViewRuleGroup(r)){t.push(this.parseViewRuleGroup(r));continue}U(r)}catch(e){this.logError(e,r,`views`)}return{title:toSingleLine(e.title)??null,groupRules:t,...this.parseStyleProps(e.props)}}parseViewRuleRank(e){let t=this.parseFqnExpressions(e.targets).filter(e=>B.ModelExpression.isFqnExpr(e));return{rank:e.value??`same`,targets:t}}parseViewRuleStyle(e){let t=this.parseFqnExpressions(e.targets).filter(e=>B.ModelExpression.isFqnExpr(e)),r=this.parseStyleProps(e.props.filter(isStyleProperty)),i=removeIndent(parseMarkdownAsString(e.props.find(isNotationProperty)?.value));return{targets:t,style:r,...i&&{notation:i}}}parseViewRuleGlobalStyle(e){return{styleId:e.style.$refText}}parseDynamicElementView(e,t){let r=e.body;H(r,`DynamicElementView body is not defined`);let i=this.isValid,a=r.props.filter(i),o=this.getAstNodePath(e),s=e.name;s||=`dynamic_`+stringHash$1(this.doc.uri.toString(),o);let{title:c=null,description:l=null}=this.parseBaseProps(L(a,N(isViewStringProperty),zn(e=>[e.key,e.value]))),u=this.convertTags(r),d=this.convertLinks(r);af.writeId(e,s);let p=fn(a,isDynamicViewDisplayVariantProperty)?.value;return{[B._type]:`dynamic`,id:s,astPath:o,title:toSingleLine(c)??null,description:l,tags:u,links:Qr(d)?d:null,variant:p,rules:[...t,...this.tryMap(`views`,r.rules,e=>this.parseDynamicViewRule(e))],steps:this.parseSteps(r.steps)}}parseDynamicViewRule(e){if(isDynamicViewIncludePredicate(e))return this.parseDynamicViewIncludePredicate(e);if(isDynamicViewGlobalPredicateRef(e))return this.parseViewRuleGlobalPredicateRef(e);if(isViewRuleStyleOrGlobalRef(e))return this.parseViewRuleStyleOrGlobalRef(e);if(isViewRuleAutoLayout(e))return toAutoLayout(e);U(e)}parseDynamicViewIncludePredicate(e){let t=[],r=e.exprs;for(;r;)this.tryParse(`views`,r.value,e=>{if(isFqnExprOrWith(e)){let r=this.parseElementPredicate(e);t.unshift(r)}}),r=r.prev;return{include:t}}parseSteps(e){return this.tryMap(`views`,e,e=>this.parseStepStatement(e))}parseStepStatement(e){switch(!0){case isSubflowStep(e):return this.parseSubflowStep(e);case isTryStep(e):return this.parseTryStep(e);case isAltSteps(e):return this.parseAltSteps(e);case isStepSeries(e):return this.parseStepSeries(e);case isStep(e):return this.parseStep(e);default:U(e)}}parseStepSeries(e){let t=this.recursiveParseStepSeries(e);return H(Qr(t),`Dynamic step chain must have at least one step`),{[B._type]:`series`,steps:t}}recursiveParseStepSeries(e,t){if(isStep(e.source)){if(!this.isValid(e.source))return[];let r=this.parseStep(e.source);if(r.isBackward)return[];let i={...this.parseAbstractDynamicStep(e),source:r.target};return i.target===r.source?i.isBackward=!0:t&&(t.push([r.source,r.target]),t.push([i.source,i.target])),[r,i]}t??=[];let r=this.recursiveParseStepSeries(e.source,t);if(!Qr(r)||!this.isValid(e))return[];let i=Rn(r),a={...this.parseAbstractDynamicStep(e),source:i.target},o=t.findIndex(([e,t])=>e===a.target&&t===a.source);return o===-1?t.push([a.source,a.target]):(a.isBackward=!0,t.splice(o,t.length-o)),[...r,a]}parseStep(e){let t=elementRef(e.source);if(!t)throw Error(`Invalid reference to source`);let r={...this.parseAbstractDynamicStep(e),source:this.resolveFqn(t)};return e.isBackward&&(r={...r,source:r.target,target:r.source,isBackward:!0}),r}parseAbstractDynamicStep(e){let t=elementRef(e.target);if(!t)throw Error(`Invalid reference to target`);let r=pathInsideDynamicView(e),i={target:this.resolveFqn(t),astPath:r},a=removeIndent(e.title);a&&(i.title=a);let o=e.kind?.ref?.name??e.dotKind?.kind.ref?.name;o&&(i.kind=o);for(let t of e.custom?.props??[])try{switch(!0){case isRelationNavigateToProperty(t):{let e=t.value.view.ref?.name;R(e)&&(i.navigateTo=e);break}case isRelationStringProperty(t):case isNotationProperty(t):if(Zt(t.value))if(t.key===`description`){let e=removeIndent(t.value);e&&(i.description=e)}else i[t.key]=removeIndent(parseMarkdownAsString(t.value))??``;break;case isNotesProperty(t):Zt(t.value)&&(i[t.key]=removeIndent(t.value));break;case isArrowProperty(t):Zt(t.value)&&(i[t.key]=t.value);break;case isColorProperty(t):{let e=toColor(t);Zt(e)&&(i[t.key]=e);break}case isLineProperty(t):Zt(t.value)&&(i[t.key]=t.value);break;case isMultipleProperty(t):break;default:U(t)}}catch(e){this.logError(e,t,`views`)}return i}parseSubflowStep(e){let t=e.kind===`parallel`?`par`:e.kind;switch(t){case`break`:case`loop`:case`opt`:case`par`:{let r=this.parseSteps(e.steps);return H(Qr(r),`Parallel steps must have at least one step`),B.exact({[B._type]:t,title:e.title,steps:r})}case`else`:case`if`:case`when`:throw Error(`Unsupported kind: ${t}`);default:U(t)}}parseTryStep(e){if(H(this.isValid(e)),isFinallyBlock(e)){let t=this.parseTryStep(e.tryCatch),r=this.parseSteps(e.finally.steps);return Qr(r)?{...t,finally:B.exact({title:e.title,steps:r})}:t}if(isCatchBlock(e)){let t=this.parseTryStep(e.try),r=this.parseSteps(e.catch.steps);return Qr(r)?{...t,catch:B.exact({title:e.title,steps:r})}:t}let t=this.parseSteps(e.steps);return H(Qr(t),`Try steps must have at least one step`),{[B._type]:`try`,try:B.exact({title:e.title,steps:t})}}parseAltSteps(e){let t=this.tryMap(`views`,e.branches,e=>{let t=e.kind;H(t===`if`||t===`else`||t===`when`,`Expected "if", "else", or "when", got "${t}"`);let r=this.parseSteps(e.steps);return H(Qr(r),`Branch steps must have at least one step`),B.exact({[B._type]:t,title:e.title,steps:r})});return H(Qr(t),`Alt must have at least one branch`),B.exact({[B._type]:`alt`,title:e.title,branches:t})}}}function pathInsideDynamicView(e){let t=e,r=[];for(;!isDynamicViewBody(t);)on(t.$containerIndex)&&r.unshift(`@${t.$containerIndex}`),r.unshift(`/${t.$containerProperty??`__invalid__`}`),t=t.$container;return r.join(``)}nt();const Xf=L(BaseParser,ExpressionV2Parser,ImportsParser,ModelParser,DeploymentModelParser,DeploymentViewParser,PredicatesParser,SpecificationParser,ViewsParser,GlobalsParser);var DocumentParser=class extends Xf{};const Zf=q.getChild(`parser`),isError=e=>e.severity===Se.Error;var LikeC4ModelParser=class extends ADisposable{services;cachedParsers=new oi(e=>this.createParser(e));constructor(e){super(),this.services=e,this.onDispose(ae.create(()=>{this.cachedParsers.clear()}),e.shared.workspace.DocumentBuilder.onDocumentPhase(y.Linked,async e=>{this.cachedParsers.has(e)&&(Zf.trace(`project {project}, Linked: clear cached parser {doc}`,{projectId:e.likec4ProjectId,doc:S.basename(e.uri)}),this.cachedParsers.delete(e))}),e.shared.workspace.DocumentBuilder.onBuildPhase(y.Linked,async e=>{for(let t of e)if(isLikeC4UserDocument(t))try{this.parse(t)}catch(e){logWarnError(e)}}),e.shared.workspace.DocumentBuilder.onDocumentPhase(y.Validated,async e=>{e.diagnostics?.some(isError)&&this.cachedParsers.has(e)&&(Zf.trace(`project {project}, Validated: clear cached parser {doc} because of errors`,{project:e.likec4ProjectId,doc:S.basename(e.uri)}),this.cachedParsers.delete(e))}))}documents(e){return this.services.shared.workspace.LangiumDocuments.projectDocuments(e).map(e=>this.parse(e))}parse(e){return this.forDocument(e).doc}forDocument(e){return this.cachedParsers.get(e)}createParser(e){W(isLikeC4LangiumDocument(e),`Document ${e.uri.toString()} is not a LikeC4 document`);let t=this.services.shared.workspace.ProjectsManager.getProject(e),r=S.relative(t.folderUri,e.uri);Zf.trace(`project {project}, create parser {doc}`,{project:t.id,doc:r}),e.state<y.Linked&&Zf.debug(`Document {doc} is not linked, state is {state}`,{doc:r,state:e.state});let i={c4Specification:{tags:{},elements:{},relationships:{},colors:{},deployments:{}},c4Elements:[],c4ExtendElements:[],c4ExtendDeployments:[],c4ExtendRelations:[],c4Relations:[],c4Deployments:[],c4DeploymentRelations:[],c4Globals:{predicates:{},dynamicPredicates:{},styles:{}},c4Views:[],c4Imports:new si(Set)};e=Object.assign(e,i);let a=new DocumentParser(this.services,e,t);try{a.parseSpecification(),a.parseImports(),a.parseModel(),a.parseDeployment(),a.parseGlobals(),a.parseViews()}catch(e){throw Error(`Error parsing document ${r}`,{cause:e})}return a}},LikeC4ValueConverter=class extends le{runConverter(e,t,r){return e.name===`MarkdownString`?((t.startsWith(`"""`)&&t.endsWith(`"""`)||t.startsWith(`'''`)&&t.endsWith(`'''`))&&(t=t.slice(2,-2)),et.convertString(t)):super.runConverter(e,t,r)}};nt();const{findNodeForKeyword:Qf}=rt,asViewStyleRule=(e,t,r=0)=>{let i=r>0?` `.repeat(r):``;return[i+`style ${e} {`,...sn(t).map(([e,t])=>i+` ${e} ${e===`opacity`?t.toString()+`%`:t}`),i+`}`]},isMatchingViewRule=(e,t)=>r=>{if(!isViewRuleStyle(r)&&!isDeploymentViewRuleStyle(r))return!1;let i=r.targets.value;if(!i||R(r.targets.prev)||i.$type!==`FqnRefExpr`||R(i.selector))return!1;let a=i.ref?.value?.ref;return(a?t.resolve(a):null)===e};function changeElementStyle(e,{view:t,viewAst:r,targets:i,style:a}){H(r.body,`View ${t.id} has no body`);let o=r.$cstNode;H(o,`viewCstNode`);let s=Rn(r.body.rules)?.$cstNode?.range.end??r.body.$cstNode?.range.end;H(s,`insertPos is not defined`);let c=o.range.start.character+2,l=e.likec4.FqnIndex,u=N(r.body.rules,e=>isViewRuleStyle(e)||isDeploymentViewRuleStyle(e)),d=t[Lr]===`element`?t.viewOf??null:null,p=[],m=[];i.forEach(e=>{let t=pn(u,isMatchingViewRule(e,l)),r=d&&Wr(d,e)?e.substring(d.length+1):e;t?p.push({fqn:r,rule:t}):m.push({fqn:r})});let h={start:s,end:s},includeRange=e=>{e.start.line<=h.start.line&&(e.start.line==h.start.line?h.start.character=Math.min(e.start.character,h.start.character):h.start=e.start),e.end.line>=h.end.line&&(e.end.line==h.end.line?h.end.character=Math.max(e.end.character,h.end.character):h.end=e.end)},g=[];if(m.length>0){let e=m.flatMap(({fqn:e})=>asViewStyleRule(e,a,c));g.push(Ye.insert(s,`
87
+ `).join(` `)}}function removeIndent(e){if(e!=null)switch(!0){case M(e):return dedent(e).trim();case isMarkdownOrString(e)&&M(e.markdown):return{md:dedent(e.markdown).trim()};case isMarkdownOrString(e)&&M(e.text):return{txt:dedent(e.text).trim()};case isMarkdownOrString(e):return{txt:``};default:return}}var BaseParser=class{services;doc;project;isValid;docUri;docPathInProject;constructor(e,t,r){this.services=e,this.doc=t,this.project=r,this.isValid=checksFromDiagnostics(t).isValid,this.docUri=t.uri.toString(),this.docPathInProject=S.relative(r.folderUri,t.uri)}logError(e,t,r){let i=e instanceof Error?e.message:typeof e==`string`?e:String(e);if(Oe(t)){let e=this.services.references.NameProvider.getName(t);e=e?`"${e}" (${t.$type})`:`${t.$type}`;let r=t.$cstNode,a=r?`:${r.range.start.line+1}:${r.range.start.character+1}`:``;i+=`\n\tat ${e} (${this.doc.uri.fsPath}${a})`}else t&&`$refText`in t&&(i+=`\n\tat reference "${t.$refText}" (${this.doc.uri.fsPath})`);r&&r!==`base`?Yf.getChild(r).debug(i):Yf.debug(i)}tryParse(e,t,r){try{return!t||!this.isValid(t)?void 0:r(t)}catch(r){this.logError(r,t,e);return}}tryMap(e,t,r){let i=0;return A(t,t=>{try{if(!t||!this.isValid(t))return[];let e=r(t,i);return e===void 0?[]:(i++,e)}catch(r){return this.logError(r,t,e),[]}})}resolveFqn(e){if(isImported(e)){let t=projectIdFrom(e),r=this.resolveFqn(ni(e.imported.ref,`FqnRef is empty of imported: ${e.$cstNode?.text}`));return this.doc.c4Imports.set(t,r),Ar(t,r)}return isExtendElement(e)?readStrictFqn(e.element):isExtendDeployment(e)?readStrictFqn(e.deploymentNode):isDeploymentElement(e)?this.services.likec4.DeploymentsIndex.getFqn(e):this.services.likec4.FqnIndex.getFqn(e)}getAstNodePath(e){return this.services.workspace.AstNodeLocator.getAstNodePath(e)}getMetadata(e){if(!e||!this.isValid(e)||j(e.props))return;let extractValues=e=>{if(isMarkdownOrString(e)){let t=removeIndent(e);if(!t)return[];if(typeof t==`string`)return R(t)?[t]:[];{let e=t.md||t.txt;return R(e)?[e]:[]}}else if(isMetadataArray(e))return e.values.map(e=>removeIndent(e)).map(e=>typeof e==`string`?e:e.md||e.txt).filter(R);return[]},t=L(e.props,A(e=>e.value?extractValues(e.value).map(t=>[e.key,t]):[[e.key,String(e.boolValue)]]),N(([e,t])=>R(t)));if(j(t))return;let r=L(t,$t(([e])=>e),Ln(e=>e.map(([e,t])=>t))),i={};for(let[e,t]of Object.entries(r))t&&t.length>0&&(i[e]=t.length===1?t[0]:t);return j(i)?void 0:i}parseMarkdownOrString(e){if(isMarkdownOrString(e))return removeIndent(e)}convertTags(e){return this.parseTags(e)}parseTags(e){let t=e?.tags;if(!t)return null;let r=[];for(;t;)r.push(...this.tryMap(`base`,t.values,e=>ni(e.tag.ref,`Tag reference is not resolved`).name).filter(R)),t=t.prev;return Qr(r)?Mn(r):null}convertLinks(e){return this.parseLinks(e)}parseLinks(e){if(!e?.props||e.props.length===0)return;let t=this.tryMap(`base`,N(e.props,isLinkProperty),e=>{let t=e.value;if(an(t))return;let r=R(e.title)?toSingleLine(e.title):void 0,i=this.services.lsp.DocumentLinkProvider.relativeLink(this.doc,t);return Hr({url:t,title:r,relative:i&&i!==t?i:void 0})});return Qr(t)?t:void 0}parseIconProperty(e){if(!e||!this.isValid(e))return;let{libicon:t,value:r}=e;switch(!0){case!!t:{let r=t.ref?.name;if(!r){this.logError(`Library icon ${t.$refText} is not a valid library icon`,e);return}return r}case r&&r===`none`:return r;case r&&St(r):if(r.startsWith(`file:`)){this.logError(`Icon property '${r}' used the 'file' protocol which is not supported`,e);return}return r;case r&&r.startsWith(`@`):return this.parseImageAlias(r);case r&&vt(r):return ht(this.doc.uri.toString(),`../`,r);case r&&bt(r):return xt(this.project.folderUri.toString(),r);default:this.logError(`Icon property '${r}' is not a valid URL, library icon, image alias or 'none'`,e);return}}parseImageAlias(e){let t=e.indexOf(`/`),r=t>0?e.substring(0,t):e,i=t>0?e.substring(t+1):``,a={"@":`./images`,...this.project.config.imageAliases}[r];if(!a){Yf.warn(`Image alias "${r}" not found in project configuration`);return}let o=i?xt(a,i):a;return xt(this.project.folderUri.toString(),o)}parseColorLiteral(e){if(this.isValid(e)){if(isHexColor(e))return`#${e.hex}`;if(isRGBAColor(e)){let t=on(e.alpha)?e.alpha:void 0;return M(e.alpha)&&(t=parseAstPercent(e.alpha)/100),t===void 0?`rgb(${e.red},${e.green},${e.blue})`:`rgba(${e.red},${e.green},${e.blue},${t})`}U(e)}}parseElementStyle(e){if(!e)return{};if(nn(e)){let t=this.parseStyleProps(e.find(isElementStyleProperty)?.props);try{let r=this.parseIconProperty(e.find(isIconProperty));r&&(t.icon=r)}catch(e){this.logError(e)}return t}return this.parseStyleProps(e.props)}parseStyleProps(e){let t={};if(!e||e.length===0)return t;for(let r of e)if(this.isValid(r))try{switch(!0){case isBorderProperty(r):R(r.value)&&(t.border=r.value);break;case isColorProperty(r):{let e=toColor(r);R(e)&&(t.color=e);break}case isShapeProperty(r):R(r.value)&&(t.shape=r.value);break;case isIconProperty(r):{let e=this.parseIconProperty(r);R(e)&&(t.icon=e);break}case isIconColorProperty(r):{let e=toColor(r);R(e)&&(t.iconColor=e);break}case isIconSizeProperty(r):R(r.value)&&(t.iconSize=parseAstSizeValue(r));break;case isIconPositionProperty(r):R(r.value)&&(t.iconPosition=parseAstIconPositionValue(r));break;case isOpacityProperty(r):t.opacity=parseAstOpacityProperty(r);break;case isMultipleProperty(r):t.multiple=en(r.value)?r.value:!1;break;case isShapeSizeProperty(r):R(r.value)&&(t.size=parseAstSizeValue(r));break;case isPaddingSizeProperty(r):R(r.value)&&(t.padding=parseAstSizeValue(r));break;case isTextSizeProperty(r):R(r.value)&&(t.textSize=parseAstSizeValue(r));break;default:U(r)}}catch(e){this.logError(e,r)}return Hr(t)}parseBaseProps(e,t){let r=removeIndent(t?.title??parseMarkdownAsString(e.title)),i=t?.description?{txt:removeIndent(t.description)}:this.parseMarkdownOrString(e.description);return Hr({title:r,summary:t?.summary?{txt:removeIndent(t.summary)}:this.parseMarkdownOrString(e.summary),description:i,technology:toSingleLine(t?.technology)??removeIndent(parseMarkdownAsString(e.technology))})}};function*streamDeploymentModel(e){let t=Mr.from(e.parseResult.value.deployments.flatMap(e=>e.elements)),r=[],i;for(;i=t.shift();){if(isDeploymentRelation(i)){r.push(i);continue}if(i.body&&i.body.elements.length>0)for(let e of i.body.elements)t.push(e);yield i}yield*r}function DeploymentModelParser(e){return class DeploymentModelParser extends e{parseDeployment(){let e=this.doc;for(let t of streamDeploymentModel(e))try{switch(!0){case isDeploymentRelation(t):this.isValid(t)&&e.c4DeploymentRelations.push(this.parseDeploymentRelation(t));break;case isDeployedInstance(t):e.c4Deployments.push(this.parseDeployedInstance(t));break;case isDeploymentNode$1(t):e.c4Deployments.push(this.parseDeploymentNode(t));break;case isExtendDeployment(t):{let r=this.parseExtendDeployment(t);r&&e.c4ExtendDeployments.push(r);break}default:U(t)}}catch(e){this.logError(e,t,`deployment`)}}parseDeploymentNode(e){let t=this.isValid,r=this.resolveFqn(e),i=ni(e.kind.ref,`DeploymentKind not resolved`).name,a=this.parseTags(e.body)??void 0,o=this.parseLinks(e.body),s=this.parseElementStyle(e.body?.props),c=this.getMetadata(e.body?.props.find(isMetadataProperty)),l=L(e.body?.props??[],N(t),N(isElementStringProperty),zn(e=>[e.key,e.value])),{title:u,...d}=this.parseBaseProps(l,{title:e.title,summary:e.summary});return Hr({id:r,kind:i,title:u??ti(r),...d,tags:a,links:o,style:s,metadata:c})}parseDeployedInstance(e){let t=this.isValid,r=this.resolveFqn(e),i=this.parseFqnRef(e.target.modelElement);H(V.isModelRef(i)||V.isImportRef(i),`Target must be a model reference`);let a=this.parseTags(e.body)??void 0,o=this.parseElementStyle(e.body?.props),s=this.getMetadata(e.body?.props.find(isMetadataProperty)),c=L(e.body?.props??[],N(t),N(isElementStringProperty),zn(e=>[e.key,e.value])),l=this.parseBaseProps(c,{title:e.title,summary:e.summary});return Hr({id:r,element:i,tags:a,links:this.parseLinks(e.body),...l,style:o,metadata:s})}parseExtendDeployment(e){let t=this.parseTags(e.body),r=this.getMetadata(e.body?.props.find(isMetadataProperty)),i=this.parseLinks(e.body);return!t&&j(r??{})&&!i?null:Hr({id:this.resolveFqn(e),astPath:this.getAstNodePath(e),metadata:r,tags:t,links:i})}_resolveDeploymentRelationSource(e){if(Zt(e.source))return this.parseFqnRef(e.source);if(e.$container.$type===`DeploymentNodeBody`||e.$container.$type===`DeployedInstanceBody`)return{deployment:this.resolveFqn(e.$container.$container)};throw Error(`RelationRefError: Invalid container for sourceless relation`)}parseDeploymentRelation(e){let t=this.isValid,r=this.getAstNodePath(e),i=this._resolveDeploymentRelationSource(e);H(V.isDeploymentRef(i),`Invalid source for deployment relation`);let a=this.parseFqnRef(e.target);H(V.isDeploymentRef(a),`Invalid target for deployment relation`);let o=this.convertTags(e)??this.convertTags(e.body)??void 0,s=this.convertLinks(e.body),c=(e.kind??e.dotKind?.kind)?.ref?.name,l=this.getMetadata(e.body?.props.find(isMetadataProperty)),u=L(e.body?.props??[],N(isRelationStringProperty),N(e=>R(e.value)),zn(e=>[e.key,e.value])),d=L(e.body?.props??[],N(isRelationNavigateToProperty),tn())?.value.view.ref?.name,p=this.parseBaseProps(u,{title:e.title}),m=e.body?.props.find(isRelationStyleProperty);return Hr({id:stringHash$1(`deployment`,this.docUri,r,i.deployment,a.deployment),source:i,target:a,...p,metadata:l,kind:c,tags:o,links:s,...toRelationshipStyle(m?.props,t),navigateTo:d,astPath:r})}}}function DeploymentViewParser(e){return class DeploymentViewParser extends e{parseDeploymentView(e){let t=e.body;H(t,`DynamicElementView body is not defined`);let r=t.props.filter(this.isValid),i=this.getAstNodePath(e),a=e.name;a||=`deployment_`+stringHash$1(this.doc.uri.toString(),i);let{title:o=null,description:s=null}=this.parseBaseProps(L(r,N(isViewStringProperty),zn(e=>[e.key,e.value]))),c=this.convertTags(t),l=this.convertLinks(t);return af.writeId(e,a),{[B._type]:`deployment`,id:a,astPath:i,title:toSingleLine(o)??null,description:s,tags:c,links:Qr(l)?l:null,rules:this.tryMap(`deployment`,t.rules,e=>this.parseDeploymentViewRule(e))}}parseDeploymentViewRule(e){if(isDeploymentViewRulePredicate(e))return this.parseDeploymentViewRulePredicate(e);if(isViewRuleAutoLayout(e))return toAutoLayout(e);if(isViewRuleAncestors(e))return{includeAncestors:e.value};if(isDeploymentViewRuleStyle(e))return this.parseDeploymentViewRuleStyle(e);U(e)}parseDeploymentViewRulePredicate(e){let t=[],r=e.expr;for(;r;){try{let e=r.value;F(e)&&this.isValid(e)&&t.unshift(this.parseExpressionV2(e))}catch(e){logWarnError(e)}r=r.prev}return e.isInclude?{include:t}:{exclude:t}}parseDeploymentViewRuleStyle(e){let t=this.parseStyleProps(e.props.filter(isStyleProperty)),r=removeIndent(parseMarkdownAsString(e.props.find(isNotationProperty)?.value));return{targets:this.parseFqnExpressions(e.targets),style:t,...r&&{notation:r}}}}}const parseMetadataEquals=({operator:e,not:t},r)=>e?.startsWith(`!=`)?{neq:r}:e?.startsWith(`=`)?{eq:r}:t?{neq:r}:{eq:r},parseEquals=({operator:e,not:t},r)=>e.startsWith(`!=`)?{neq:r}:e.startsWith(`=`)?{eq:r}:t?{neq:r}:{eq:r};function parseParticipant(e){return!isWhereRelationParticipantKind(e)&&!isWhereRelationParticipantTag(e)&&!isWhereRelationParticipantMetadata(e)?null:e.participant}function parseWhereClause(e){switch(!0){case isWhereTagEqual(e):{let t=e.value.tag.ref?.name,r=parseParticipant(e);H(t,`Expected tag name`);let i={tag:parseEquals(e,t)};return r?{participant:r,operator:i}:i}case isWhereKindEqual(e):{let t=e.value?.ref?.name,r=parseParticipant(e);H(t,`Expected kind name`);let i={kind:parseEquals(e,t)};return r?{participant:r,operator:i}:i}case isWhereMetadataEqual(e):{let t=e.key,r=parseParticipant(e);H(t,`Expected metadata key`);let i={metadata:{key:t,...e.value==null?{}:{value:parseMetadataEquals(e,String(e.value))}}};return r?{participant:r,operator:i}:i}case isWhereElementNegation(e)||isWhereRelationNegation(e):return{not:parseWhereClause(e.value)};case isWhereBinaryExpression(e):{let t=parseWhereClause(e.left),r=parseWhereClause(e.right);return createBinaryOperator(e.operator.toLowerCase(),t,r)}default:U(e)}}function createBinaryOperator(e,t,r){if(r===null)return t;switch(e){case`and`:{let e=[Gr(t)?t.and:t,Gr(r)?r.and:r].flat();return H(Qr(e),`Expected non-empty array`),{and:e}}case`or`:{let e=[$r(t)?t.or:t,$r(r)?r.or:r].flat();return H(Qr(e),`Expected non-empty array`),{or:e}}default:U(e)}}function ExpressionV2Parser(e){return class ExpressionV2Parser extends e{parseFqnRef(e){let t=ni(e.value?.ref,()=>`Element "${e.$cstNode?.text}" is not resolved`);if(isImported(t)){let e={project:projectIdFrom(t),model:this.resolveFqn(ni(t.imported.ref,`Imported "${t.$cstNode?.text}" is not resolved`))};return this.doc.c4Imports.set(e.project,e.model),e}if(isElement(t)){let r=importsRef(e);if(r){let e={project:projectIdFrom(r),model:this.resolveFqn(t)};return this.doc.c4Imports.set(e.project,e.model),e}let i=instanceRef(e);return i?{deployment:this.resolveFqn(i),element:this.resolveFqn(t)}:{model:this.resolveFqn(t)}}if(isDeploymentElement(t))return{deployment:this.resolveFqn(t)};U(t)}parseExpressionV2(e){if(isFqnExprOrWith(e))return this.parseFqnExprOrWith(e);if(isRelationExprOrWith(e))return this.parseRelationExprOrWith(e);U(e)}parseFqnExprOrWith(e){if(isFqnExprWith(e))return this.parseFqnExprWith(e);if(isFqnExprOrWhere(e))return this.parseFqnExprOrWhere(e);U(e)}parseFqnExprWith(e){let t=this.parseFqnExprOrWhere(e.subject);return(e.custom?.props??[]).reduce((e,t)=>{if(!this.isValid(t))return e;if(isNavigateToProperty(t)){let r=t.value.view.$refText;return R(r)&&(e.custom.navigateTo=r),e}if(isNotesProperty(t)){let r=this.parseMarkdownOrString(t.value);return r&&(e.custom[t.key]=r),e}if(isElementStringProperty(t)){if(t.key===`description`||t.key===`summary`){let r=this.parseMarkdownOrString(t.value);return r&&(e.custom.description=r),e}let r=removeIndent(parseMarkdownAsString(t.value));return r&&(e.custom[t.key]=r),e}if(isIconProperty(t)){let r=this.parseIconProperty(t);return Zt(r)&&(e.custom[t.key]=r),e}if(isColorProperty(t)){let r=toColor(t);return Zt(r)&&(e.custom[t.key]=r),e}if(isShapeProperty(t)||isBorderProperty(t))return Zt(t.value)&&(e.custom[t.key]=t.value),e;if(isOpacityProperty(t))return Zt(t.value)&&(e.custom[t.key]=parseAstOpacityProperty(t)),e;if(isIconColorProperty(t)){let r=toColor(t);return Zt(r)&&(e.custom[t.key]=r),e}if(isNotationProperty(t)){let r=R(t.value)?removeIndent(parseMarkdownAsString(t.value)):void 0;return r&&(e.custom[t.key]=r),e}if(isMultipleProperty(t))return en(t.value)&&(e.custom[t.key]=t.value),e;if(isShapeSizeProperty(t)||isTextSizeProperty(t)||isPaddingSizeProperty(t)||isIconSizeProperty(t))return R(t.value)&&(e.custom[t.key]=parseAstSizeValue(t)),e;if(isIconPositionProperty(t))return R(t.value)&&(e.custom[t.key]=t.value),e;U(t)},{custom:{expr:t}})}parseFqnExprOrWhere(e){if(isFqnExprWhere(e))return this.parseFqnExprWhere(e);if(isFqnExpr(e))return this.parseFqnExpr(e);U(e)}parseFqnExprWhere(e){return H(!isFqnExprWhere(e.subject),`FqnExprWhere is not allowed as subject of FqnExprWhere`),{where:{expr:this.parseFqnExpr(e.subject),condition:e.where?parseWhereClause(e.where):{kind:{neq:`--always-true--`}}}}}parseFqnExpr(e){if(isWildcardExpression(e))return{wildcard:!0};if(isElementKindExpression(e))return H(e.kind?.ref,`ElementKind "${e.$cstNode?.text}" is not resolved`),{elementKind:e.kind.ref.name,isEqual:e.isEqual};if(isElementTagExpression(e))return H(e.tag.tag.ref,`Tag ${e.$cstNode?.text} is not resolved`),{elementTag:e.tag.tag.ref.name,isEqual:e.isEqual};if(isFqnRefExpr(e))return this.parseFqnRefExpr(e);U(e)}parseFqnRefExpr(e){let t=this.parseFqnRef(e.ref);switch(!0){case e.selector===`._`:return{ref:t,selector:`expanded`};case e.selector===`.**`:return{ref:t,selector:`descendants`};case e.selector===`.*`:return{ref:t,selector:`children`};default:return{ref:t}}}parseFqnExpressions(e){let t=[],r=e;for(;r;){try{F(r.value)&&this.isValid(r.value)&&t.push(this.parseFqnExpr(r.value))}catch(e){this.logError(e,r.value,`fqnref`)}r=r.prev}return t.reverse()}parseRelationExprOrWith(e){if(isRelationExprWith(e))return this.parseRelationExprWith(e);if(isRelationExprOrWhere(e))return this.parseRelationExprOrWhere(e);U(e)}parseRelationExprWith(e){let t=this.parseRelationExprOrWhere(e.subject);return{customRelation:{...this.parseCustomRelationProperties(e.custom),expr:t}}}parseCustomRelationProperties(e){return(e?.props??[]).reduce((e,t)=>{if(isNotesProperty(t)){let r=this.parseMarkdownOrString(t.value);return r&&(e[t.key]=r),e}if(isRelationStringProperty(t)||isNotationProperty(t)){if(t.key===`description`){let r=this.parseMarkdownOrString(t.value);return r&&(e.description=r),e}let r=removeIndent(parseMarkdownAsString(t.value));return r&&(e[t.key]=r),e}if(isArrowProperty(t))return R(t.value)&&(e[t.key]=t.value),e;if(isColorProperty(t)){let r=toColor(t);return R(r)&&(e[t.key]=r),e}if(isLineProperty(t))return R(t.value)&&(e[t.key]=t.value),e;if(isRelationNavigateToProperty(t)){let r=t.value.view.ref?.name;return R(r)&&(e[t.key]=r),e}if(isMultipleProperty(t))return en(t.value)&&(e[t.key]=t.value),e;U(t)},{})}parseRelationExprOrWhere(e){if(isRelationExprWhere(e))return this.parseRelationExprWhere(e);if(isRelationExpr(e))return this.parseRelationExpr(e);U(e)}parseRelationExprWhere(e){H(!isRelationExprWhere(e.subject),`RelationExprWhere is not allowed as subject of RelationExprWhere`);let t=this.parseRelationExpr(e.subject),r=t.where?.expr??t,i=t.where?.condition,a=e.where?parseWhereClause(e.where):null,o;return o=a&&i?createBinaryOperator(`and`,i,a):a??i??{kind:{neq:`--always-true--`}},{where:{expr:r,condition:o}}}parseRelationExpr(e){switch(e.$type){case`DirectedRelationExpr`:return this.wrapInWhere({source:this.parseFqnExpr(e.source.from),target:this.parseFqnExpr(e.target),isBidirectional:e.source.isBidirectional},this.parseInlineKindCondition(e.source));case`InOutRelationExpr`:return{inout:this.parseFqnExpr(e.inout.to)};case`OutgoingRelationExpr`:return this.wrapInWhere({outgoing:this.parseFqnExpr(e.from)},this.parseInlineKindCondition(e));case`IncomingRelationExpr`:return{incoming:this.parseFqnExpr(e.to)};default:U(e)}}parseInlineKindCondition(e){let t=e.kind??e.dotKind?.kind;return t?t.ref?{kind:{eq:t.ref?.name}}:(this.logError(`RelationshipKind "${t.$refText}" is not resolved`,e,`fqnref`),null):null}wrapInWhere(e,t){return t?{where:{expr:e,condition:t}}:e}}}function GlobalsParser(e){return class GlobalsParser extends e{parseGlobals(){let{parseResult:e,c4Globals:t}=this.doc,r=this.isValid,i=e.value.globals.filter(r),a=i.flatMap(e=>e.predicates.filter(r));for(let e of a)try{let r=e.name;if(!R(r))continue;if(r in t.predicates){this.logError(`Global predicate named "${r}" is already defined`,e,`globals`);continue}this.parseAndStoreGlobalPredicateGroupOrDynamic(e,r,t)}catch(t){this.logError(t,e,`globals`)}let o=i.flatMap(e=>e.styles.filter(r));for(let e of o)try{let r=e.id.name;if(!R(r))continue;if(r in t.styles){this.logError(`Global style named "${r}" is already defined`,e,`globals`);continue}let i=this.parseGlobalStyleOrGroup(e);k(i,1)&&(t.styles[r]=i)}catch(t){this.logError(t,e,`globals`)}}parseAndStoreGlobalPredicateGroupOrDynamic(e,t,r){if(isGlobalPredicateGroup(e)){let i=this.parseGlobalPredicateGroup(e);k(i,1)&&(r.predicates[t]=i);return}if(isGlobalDynamicPredicateGroup(e)){let i=this.parseGlobalDynamicPredicateGroup(e);k(i,1)&&(r.dynamicPredicates[t]=i);return}U(e)}parseGlobalPredicateGroup(e){return e.predicates.map(e=>this.parseViewRulePredicate(e))}parseGlobalDynamicPredicateGroup(e){return e.predicates.map(e=>this.parseDynamicViewIncludePredicate(e))}parseGlobalStyleOrGroup(e){if(isGlobalStyle(e))return[this.parseViewRuleStyle(e)];if(isGlobalStyleGroup(e))return e.styles.map(e=>this.parseViewRuleStyle(e));U(e)}}}function ImportsParser(e){return class ImportsParser extends e{parseImports(){let e=this.doc.parseResult.value.imports??[];for(let t of e){let e=t.project,r=t.imports;for(;r;){try{this.doc.c4Imports.set(e,this.resolveFqn(ni(r.imported.ref,`ElementRef is empty of imported: ${r.imported.$refText}`)))}catch(e){this.logError(e,r,`imports`)}r=r.prev}}}}}function*streamModel(e){let t=Mr.from(e.parseResult.value.models.flatMap(e=>e.elements)),r=[],i;for(;i=t.shift();){if(isRelation(i)){r.push(i);continue}if(isExtendRelation(i)){r.push(i);continue}if(i.body?.elements&&k(i.body.elements,1))for(let e of i.body.elements)t.push(e);yield i}yield*r}function ModelParser(e){return class ModelParser extends e{parseModel(){let e=this.doc;for(let t of streamModel(e))try{if(isElement(t)){e.c4Elements.push(this.parseElement(t));continue}if(isRelation(t)){e.c4Relations.push(this.parseRelation(t));continue}if(isExtendElement(t)){let r=this.parseExtendElement(t);r&&e.c4ExtendElements.push(r);continue}if(isExtendRelation(t)){let r=this.parseExtendRelation(t);r&&e.c4ExtendRelations.push(r);continue}U(t)}catch(e){this.logError(e,t,`model`)}}parseElement(e){let t=this.isValid,r=this.resolveFqn(e),i=ni(e.kind.ref,`Element kind is not resolved`).name,a=this.parseTags(e.body),o=this.parseElementStyle(e.body?.props),s=this.getMetadata(e.body?.props.find(isMetadataProperty)),c=this.getAstNodePath(e),[l,u,d]=e.props??[],p=L(e.body?.props??[],N(t),N(isElementStringProperty),zn(e=>[e.key,e.value])),{title:m,...h}=this.parseBaseProps(p,{title:l,summary:u,technology:d});return Sr({id:r,kind:i,astPath:c,title:m,metadata:s,tags:a??void 0,links:this.parseLinks(e.body),...h,style:o})}parseExtendElement(e){let t=this.parseTags(e.body),r=this.getMetadata(e.body?.props.find(isMetadataProperty)),i=this.parseLinks(e.body);if(!t&&an(r)&&!i)return null;let a=this.getAstNodePath(e);return Sr({id:this.resolveFqn(e),astPath:a,metadata:r,tags:t,links:i})}parseExtendRelation(e){let t=this.parseFqnRef(e.source),r=this.parseFqnRef(e.target);H(z.isModelRef(t)||z.isImportRef(t),`Source must be a model reference`),H(z.isModelRef(r)||z.isImportRef(r),`Target must be a model reference`);let i=this.parseTags(e.body),a=this.getMetadata(e.body?.props.find(isMetadataProperty)),o=this.getAstNodePath(e),s=this.parseLinks(e.body);if(!i&&j(a??{})&&!s)return null;let c=(e.kind??e.dotKind?.kind)?.ref?.name,{title:l=``}=this.parseBaseProps({},{title:e.title});return Sr({id:stringHash$1(`extend-relation`,z.flatten(t),z.flatten(r),c??`default`,l),astPath:o,metadata:a,tags:i,links:s})}_resolveRelationSource(e){if(Zt(e.source)){let t=this.parseFqnRef(e.source);return H(z.isModelRef(t)||z.isImportRef(t),`Relation source must be a model reference`),t}if(isElementBody(e.$container)||isExtendElementBody(e.$container))return{model:this.resolveFqn(e.$container.$container)};throw Error(`RelationRefError: Invalid container for sourceless relation`)}parseRelation(e){let t=this.isValid,r=this._resolveRelationSource(e),i=this.parseFqnRef(e.target);H(z.isModelRef(i)||z.isImportRef(i),`Target must be a model reference`);let a=this.parseTags(e)??this.parseTags(e.body)??void 0,o=this.parseLinks(e.body),s=(e.kind??e.dotKind?.kind)?.ref?.name,c=this.getMetadata(e.body?.props.find(isMetadataProperty)),l=this.getAstNodePath(e),u=L(e.body?.props??[],N(isRelationStringProperty),N(e=>R(e.value)),zn(e=>[e.key,e.value])),d=L(e.body?.props??[],N(isRelationNavigateToProperty),P(e=>e.value.view.ref?.name),N(R),tn()),{title:p=``,description:m,technology:h}=this.parseBaseProps(u,{title:e.title,description:e.description,technology:e.technology}),g=e.body?.props.find(isRelationStyleProperty);return Sr({id:stringHash$1(this.docUri,l,z.flatten(r),z.flatten(i)),astPath:l,source:r,target:i,title:p,metadata:c,kind:s,tags:a,links:o,navigateTo:d,description:m,technology:h,...toRelationshipStyle(g?.props,t)})}}}function PredicatesParser(e){return class PredicatesParser extends e{parsePredicate(e){return this.parseExpressionV2(e)}parseElementPredicate(e){if(isFqnExprWith(e))return this.parseFqnExprWith(e);if(isFqnExprOrWhere(e))return this.parseFqnExprOrWhere(e);U(e)}parseElementPredicateOrWhere(e){return this.parseFqnExprOrWhere(e)}parseElementExpression(e){return this.parseFqnExpr(e)}parseElementPredicateWhere(e){return this.parseFqnExprWhere(e)}parseElementPredicateWith(e){return this.parseFqnExprWith(e)}parseRelationPredicate(e){return this.parseRelationExprOrWith(e)}parseRelationPredicateOrWhere(e){return this.parseRelationExprOrWhere(e)}parseRelationPredicateWhere(e){return this.parseRelationExprWhere(e)}parseRelationPredicateWith(e){return this.parseRelationExprWith(e)}parseRelationExpression(e){return this.parseRelationExpr(e)}}}function SpecificationParser(e){return class SpecificationParser extends e{parseSpecification(){let{parseResult:{value:{specifications:e}},c4Specification:t}=this.doc,r=this.isValid;for(let i of e.flatMap(e=>e.elements.filter(r)))try{Object.assign(t.elements,this.parseElementSpecificationNode(i))}catch(e){this.logError(e,i,`specification`)}for(let i of e.flatMap(e=>e.deploymentNodes.filter(r)))try{Object.assign(t.deployments,this.parseElementSpecificationNode(i))}catch(e){this.logError(e,i,`specification`)}let i=e.flatMap(e=>e.relationships.filter(this.isValid));for(let e of i){let{kind:r,props:i}=e;try{let a=r.name;if(!R(a))continue;if(a in t.relationships){this.logError(`Relationship kind "${a}" is already defined`,r,`specification`);continue}let o=this.parseTags(e),s=this.parseLinks(e),c=L(i.filter(isSpecificationRelationshipStringProperty)??[],N(e=>this.isValid(e)),zn(e=>[e.key,e.value])),{summary:l,...u}=this.parseBaseProps(c),d=removeIndent(parseMarkdownAsString(c.notation)),p=i.filter(isMultipleProperty);p.length>1&&this.logError(`Duplicate 'multiple' property for relationship "${a}", using the first one`,r,`specification`);let m=p[0];t.relationships[a]=Hr({...u,notation:d,tags:o??void 0,...s&&B.isNonEmptyArray(s)&&{links:s},...toRelationshipStyle(i.filter(isRelationshipStyleProperty),this.isValid),...m&&{multiple:m.value}})}catch(e){this.logError(e,r,`specification`)}}let a=e.flatMap(e=>e.tags.filter(this.isValid));for(let e of a)try{let r=e.tag.name,i=this.getAstNodePath(e.tag),a=e.color&&this.parseColorLiteral(e.color);if(r in t.tags){this.logError(`Tag ${r} is already defined, skipping duplicate`,e,`specification`);continue}R(r)&&(t.tags[r]={astPath:i,...a?{color:a}:{}})}catch(t){this.logError(t,e,`specification`)}let o=e.flatMap(e=>e.colors.filter(r));for(let{name:e,color:r}of o)try{let i=e.name;if(i in t.colors){this.logError(`Custom color "${i}" is already defined`,e,`specification`);continue}t.colors[i]={color:yi(this.parseColorLiteral(r),`Color "${i}" is not valid`)}}catch(e){this.logError(e,r,`specification`)}}parseElementSpecificationNode(e){let{kind:t,props:r}=e,i=t.name;if(!R(i))throw Error(`DeploymentNodeKind name is not resolved`);let a=this.parseTags(e),o=this.parseElementStyle(r.find(isElementStyleProperty)),s=this.parseLinks(e),c=L(r.filter(isSpecificationElementStringProperty)??[],N(e=>this.isValid(e)),zn(e=>[e.key,e.value])),l=this.parseBaseProps(c),u=removeIndent(parseMarkdownAsString(c.notation));return{[i]:Hr({...l,notation:u,tags:a??void 0,...s&&B.isNonEmptyArray(s)&&{links:s},style:o})}}}}function ViewsParser(e){return class ViewsParser extends e{parseViews(){let e=this.isValid;for(let t of this.doc.parseResult.value.views){let r=t.styles.flatMap(t=>{try{return e(t)?this.parseViewRuleStyleOrGlobalRef(t):[]}catch(e){return this.logError(e,t,`views`),[]}}),i=t.folder&&!j(t.folder.trim())?toSingleLine(t.folder):null;for(let a of t.views)try{if(!e(a))continue;switch(!0){case isElementView$1(a):this.doc.c4Views.push(this.parseElementView(a,r));break;case isDynamicView$1(a):this.doc.c4Views.push(this.parseDynamicElementView(a,r));break;case isDeploymentView$1(a):this.doc.c4Views.push(this.parseDeploymentView(a));break;default:U(a)}if(i){let e=this.doc.c4Views.at(-1);e.title=i+` / `+(e.title||e.id)}}catch(e){this.logError(e,a,`views`)}}}parseElementView(e,t){let r=e.body;H(r,`ElementView body is not defined`);let i=this.getAstNodePath(e),a=null;if(`viewOf`in e){let t=elementRef(e.viewOf),r=t&&safeCall(()=>this.resolveFqn(t));if(r)a=r;else{let t=e.name??`unnamed`,r=e.viewOf.$cstNode?.text??`<unknown>`;this.logError(`viewOf ${t} not resolved ${r}`,e.viewOf)}}let o=e.name;o||=`view_`+stringHash$1(this.doc.uri.toString(),i,a??``);let{title:s=null,description:c=null}=this.parseBaseProps(L(r.props,N(e=>this.isValid(e)),N(isViewStringProperty),zn(e=>[e.key,e.value]))),l=this.convertTags(r),u=this.convertLinks(r),d={[B._type]:`element`,id:o,astPath:i,title:toSingleLine(s)??null,description:c,tags:l,links:Qr(u)?u:null,rules:[...t,...this.tryMap(`views`,r.rules,e=>this.parseElementViewRule(e))],...a&&{viewOf:a}};if(af.writeId(e,d.id),`extends`in e){let t=e.extends.view.ref;return H(t?.name,`view extends is not resolved: `+e.$cstNode?.text),Object.assign(d,{extends:t.name})}return d}parseElementViewRule(e){if(isViewRulePredicate(e))return this.parseViewRulePredicate(e);if(isViewRuleGlobalPredicateRef(e))return this.parseViewRuleGlobalPredicateRef(e);if(isViewRuleStyleOrGlobalRef(e))return this.parseViewRuleStyleOrGlobalRef(e);if(isViewRuleAutoLayout(e))return toAutoLayout(e);if(isViewRuleGroup(e))return this.parseViewRuleGroup(e);if(isViewRuleRank(e))return this.parseViewRuleRank(e);U(e)}parseViewRulePredicate(e){let t=[],r=e.exprs;for(;r;){let{value:e,prev:i}=r;if(this.tryParse(`views`,e,()=>{let r=this.parsePredicate(e);t.unshift(r)}),!i)break;r=i}return e.isInclude?{include:t}:{exclude:t}}parseViewRuleGlobalPredicateRef(e){return{predicateId:e.predicate.$refText}}parseViewRuleStyleOrGlobalRef(e){if(isViewRuleStyle(e))return this.parseViewRuleStyle(e);if(isViewRuleGlobalStyle(e))return this.parseViewRuleGlobalStyle(e);U(e)}parseViewRuleGroup(e){let t=[];for(let r of e.groupRules)try{if(!this.isValid(r))continue;if(isViewRulePredicate(r)){t.push(this.parseViewRulePredicate(r));continue}if(isViewRuleGroup(r)){t.push(this.parseViewRuleGroup(r));continue}U(r)}catch(e){this.logError(e,r,`views`)}return{title:toSingleLine(e.title)??null,groupRules:t,...this.parseStyleProps(e.props)}}parseViewRuleRank(e){let t=this.parseFqnExpressions(e.targets).filter(e=>B.ModelExpression.isFqnExpr(e));return{rank:e.value??`same`,targets:t}}parseViewRuleStyle(e){let t=this.parseFqnExpressions(e.targets).filter(e=>B.ModelExpression.isFqnExpr(e)),r=this.parseStyleProps(e.props.filter(isStyleProperty)),i=removeIndent(parseMarkdownAsString(e.props.find(isNotationProperty)?.value));return{targets:t,style:r,...i&&{notation:i}}}parseViewRuleGlobalStyle(e){return{styleId:e.style.$refText}}parseDynamicElementView(e,t){let r=e.body;H(r,`DynamicElementView body is not defined`);let i=this.isValid,a=r.props.filter(i),o=this.getAstNodePath(e),s=e.name;s||=`dynamic_`+stringHash$1(this.doc.uri.toString(),o);let{title:c=null,description:l=null}=this.parseBaseProps(L(a,N(isViewStringProperty),zn(e=>[e.key,e.value]))),u=this.convertTags(r),d=this.convertLinks(r);af.writeId(e,s);let p=fn(a,isDynamicViewDisplayVariantProperty)?.value;return{[B._type]:`dynamic`,id:s,astPath:o,title:toSingleLine(c)??null,description:l,tags:u,links:Qr(d)?d:null,variant:p,rules:[...t,...this.tryMap(`views`,r.rules,e=>this.parseDynamicViewRule(e))],steps:this.parseSteps(r.steps)}}parseDynamicViewRule(e){if(isDynamicViewIncludePredicate(e))return this.parseDynamicViewIncludePredicate(e);if(isDynamicViewGlobalPredicateRef(e))return this.parseViewRuleGlobalPredicateRef(e);if(isViewRuleStyleOrGlobalRef(e))return this.parseViewRuleStyleOrGlobalRef(e);if(isViewRuleAutoLayout(e))return toAutoLayout(e);U(e)}parseDynamicViewIncludePredicate(e){let t=[],r=e.exprs;for(;r;)this.tryParse(`views`,r.value,e=>{if(isFqnExprOrWith(e)){let r=this.parseElementPredicate(e);t.unshift(r)}}),r=r.prev;return{include:t}}parseSteps(e){return this.tryMap(`views`,e,e=>this.parseStepStatement(e))}parseStepStatement(e){switch(!0){case isSubflowStep(e):return this.parseSubflowStep(e);case isTryStep(e):return this.parseTryStep(e);case isAltSteps(e):return this.parseAltSteps(e);case isStepSeries(e):return this.parseStepSeries(e);case isStep(e):return this.parseStep(e);default:U(e)}}parseStepSeries(e){let t=this.recursiveParseStepSeries(e);return H(Qr(t),`Dynamic step chain must have at least one step`),{[B._type]:`series`,steps:t}}recursiveParseStepSeries(e,t){if(isStep(e.source)){if(!this.isValid(e.source))return[];let r=this.parseStep(e.source);if(r.isBackward)return[];let i={...this.parseAbstractDynamicStep(e),source:r.target};return i.target===r.source?i.isBackward=!0:t&&(t.push([r.source,r.target]),t.push([i.source,i.target])),[r,i]}t??=[];let r=this.recursiveParseStepSeries(e.source,t);if(!Qr(r)||!this.isValid(e))return[];let i=Rn(r),a={...this.parseAbstractDynamicStep(e),source:i.target},o=t.findIndex(([e,t])=>e===a.target&&t===a.source);return o===-1?t.push([a.source,a.target]):(a.isBackward=!0,t.splice(o,t.length-o)),[...r,a]}parseStep(e){let t={...this.parseAbstractDynamicStep(e),source:this.parseDynamicStepEndpoint(e.source,`source`)};return e.isBackward&&(t={...t,source:t.target,target:t.source,isBackward:!0}),t}parseAbstractDynamicStep(e){let t=pathInsideDynamicView(e),r={target:this.parseDynamicStepEndpoint(e.target,`target`),astPath:t},i=removeIndent(e.title);i&&(r.title=i);let a=e.kind?.ref?.name??e.dotKind?.kind.ref?.name;a&&(r.kind=a);for(let t of e.custom?.props??[])try{switch(!0){case isRelationNavigateToProperty(t):{let e=t.value.view.ref?.name;R(e)&&(r.navigateTo=e);break}case isRelationStringProperty(t):case isNotationProperty(t):if(Zt(t.value))if(t.key===`description`){let e=removeIndent(t.value);e&&(r.description=e)}else r[t.key]=removeIndent(parseMarkdownAsString(t.value))??``;break;case isNotesProperty(t):Zt(t.value)&&(r[t.key]=removeIndent(t.value));break;case isArrowProperty(t):Zt(t.value)&&(r[t.key]=t.value);break;case isColorProperty(t):{let e=toColor(t);Zt(e)&&(r[t.key]=e);break}case isLineProperty(t):Zt(t.value)&&(r[t.key]=t.value);break;case isMultipleProperty(t):break;default:U(t)}}catch(e){this.logError(e,t,`views`)}return r}parseDynamicStepEndpoint(e,t){let r=this.parseFqnRef(e.modelElement);if(!B.FqnRef.isModelRef(r))throw Error(`Invalid reference to ${t}`);return B.FqnRef.flatten(r)}parseSubflowStep(e){let t=e.kind===`parallel`?`par`:e.kind;switch(t){case`break`:case`loop`:case`opt`:case`par`:{let r=this.parseSteps(e.steps);return H(Qr(r),`Parallel steps must have at least one step`),B.exact({[B._type]:t,title:e.title,steps:r})}case`else`:case`if`:case`when`:throw Error(`Unsupported kind: ${t}`);default:U(t)}}parseTryStep(e){if(H(this.isValid(e)),isFinallyBlock(e)){let t=this.parseTryStep(e.tryCatch),r=this.parseSteps(e.finally.steps);return Qr(r)?{...t,finally:B.exact({title:e.title,steps:r})}:t}if(isCatchBlock(e)){let t=this.parseTryStep(e.try),r=this.parseSteps(e.catch.steps);return Qr(r)?{...t,catch:B.exact({title:e.title,steps:r})}:t}let t=this.parseSteps(e.steps);return H(Qr(t),`Try steps must have at least one step`),{[B._type]:`try`,try:B.exact({title:e.title,steps:t})}}parseAltSteps(e){let t=this.tryMap(`views`,e.branches,e=>{let t=e.kind;H(t===`if`||t===`else`||t===`when`,`Expected "if", "else", or "when", got "${t}"`);let r=this.parseSteps(e.steps);return H(Qr(r),`Branch steps must have at least one step`),B.exact({[B._type]:t,title:e.title,steps:r})});return H(Qr(t),`Alt must have at least one branch`),B.exact({[B._type]:`alt`,title:e.title,branches:t})}}}function pathInsideDynamicView(e){let t=e,r=[];for(;!isDynamicViewBody(t);)on(t.$containerIndex)&&r.unshift(`@${t.$containerIndex}`),r.unshift(`/${t.$containerProperty??`__invalid__`}`),t=t.$container;return r.join(``)}nt();const Xf=L(BaseParser,ExpressionV2Parser,ImportsParser,ModelParser,DeploymentModelParser,DeploymentViewParser,PredicatesParser,SpecificationParser,ViewsParser,GlobalsParser);var DocumentParser=class extends Xf{};const Zf=q.getChild(`parser`),isError=e=>e.severity===Se.Error;var LikeC4ModelParser=class extends ADisposable{services;cachedParsers=new oi(e=>this.createParser(e));constructor(e){super(),this.services=e,this.onDispose(ae.create(()=>{this.cachedParsers.clear()}),e.shared.workspace.DocumentBuilder.onDocumentPhase(y.Linked,async e=>{this.cachedParsers.has(e)&&(Zf.trace(`project {project}, Linked: clear cached parser {doc}`,{projectId:e.likec4ProjectId,doc:S.basename(e.uri)}),this.cachedParsers.delete(e))}),e.shared.workspace.DocumentBuilder.onBuildPhase(y.Linked,async e=>{for(let t of e)if(isLikeC4UserDocument(t))try{this.parse(t)}catch(e){logWarnError(e)}}),e.shared.workspace.DocumentBuilder.onDocumentPhase(y.Validated,async e=>{e.diagnostics?.some(isError)&&this.cachedParsers.has(e)&&(Zf.trace(`project {project}, Validated: clear cached parser {doc} because of errors`,{project:e.likec4ProjectId,doc:S.basename(e.uri)}),this.cachedParsers.delete(e))}))}documents(e){return this.services.shared.workspace.LangiumDocuments.projectDocuments(e).map(e=>this.parse(e))}parse(e){return this.forDocument(e).doc}forDocument(e){return this.cachedParsers.get(e)}createParser(e){W(isLikeC4LangiumDocument(e),`Document ${e.uri.toString()} is not a LikeC4 document`);let t=this.services.shared.workspace.ProjectsManager.getProject(e),r=S.relative(t.folderUri,e.uri);Zf.trace(`project {project}, create parser {doc}`,{project:t.id,doc:r}),e.state<y.Linked&&Zf.debug(`Document {doc} is not linked, state is {state}`,{doc:r,state:e.state});let i={c4Specification:{tags:{},elements:{},relationships:{},colors:{},deployments:{}},c4Elements:[],c4ExtendElements:[],c4ExtendDeployments:[],c4ExtendRelations:[],c4Relations:[],c4Deployments:[],c4DeploymentRelations:[],c4Globals:{predicates:{},dynamicPredicates:{},styles:{}},c4Views:[],c4Imports:new si(Set)};e=Object.assign(e,i);let a=new DocumentParser(this.services,e,t);try{a.parseSpecification(),a.parseImports(),a.parseModel(),a.parseDeployment(),a.parseGlobals(),a.parseViews()}catch(e){throw Error(`Error parsing document ${r}`,{cause:e})}return a}},LikeC4ValueConverter=class extends le{runConverter(e,t,r){return e.name===`MarkdownString`?((t.startsWith(`"""`)&&t.endsWith(`"""`)||t.startsWith(`'''`)&&t.endsWith(`'''`))&&(t=t.slice(2,-2)),et.convertString(t)):super.runConverter(e,t,r)}};nt();const{findNodeForKeyword:Qf}=rt,asViewStyleRule=(e,t,r=0)=>{let i=r>0?` `.repeat(r):``;return[i+`style ${e} {`,...sn(t).map(([e,t])=>i+` ${e} ${e===`opacity`?t.toString()+`%`:t}`),i+`}`]},isMatchingViewRule=(e,t)=>r=>{if(!isViewRuleStyle(r)&&!isDeploymentViewRuleStyle(r))return!1;let i=r.targets.value;if(!i||R(r.targets.prev)||i.$type!==`FqnRefExpr`||R(i.selector))return!1;let a=i.ref?.value?.ref;return(a?t.resolve(a):null)===e};function changeElementStyle(e,{view:t,viewAst:r,targets:i,style:a}){H(r.body,`View ${t.id} has no body`);let o=r.$cstNode;H(o,`viewCstNode`);let s=Rn(r.body.rules)?.$cstNode?.range.end??r.body.$cstNode?.range.end;H(s,`insertPos is not defined`);let c=o.range.start.character+2,l=e.likec4.FqnIndex,u=N(r.body.rules,e=>isViewRuleStyle(e)||isDeploymentViewRuleStyle(e)),d=t[Lr]===`element`?t.viewOf??null:null,p=[],m=[];i.forEach(e=>{let t=pn(u,isMatchingViewRule(e,l)),r=d&&Wr(d,e)?e.substring(d.length+1):e;t?p.push({fqn:r,rule:t}):m.push({fqn:r})});let h={start:s,end:s},includeRange=e=>{e.start.line<=h.start.line&&(e.start.line==h.start.line?h.start.character=Math.min(e.start.character,h.start.character):h.start=e.start),e.end.line>=h.end.line&&(e.end.line==h.end.line?h.end.character=Math.max(e.end.character,h.end.character):h.end=e.end)},g=[];if(m.length>0){let e=m.flatMap(({fqn:e})=>asViewStyleRule(e,a,c));g.push(Ye.insert(s,`
88
88
  `+e.join(`
89
89
  `))),h.start={line:s.line+1,character:c},h.end={line:s.line+e.length,character:Rn(e)?.length??0}}if(p.length>0)for(let{rule:e}of p){let t=e.$cstNode;H(t,`RuleCstNode not found`);for(let[r,i]of sn(a)){let a=r===`opacity`?i.toString()+`%`:i,o=e.props.find(e=>e.key===r);if(o&&o.$cstNode){let{range:{start:e,end:t}}=o.$cstNode;includeRange({start:e,end:t}),g.push(Ye.replace({start:e,end:t},r+` `+a));continue}let s=Qf(t,`{`)?.range.end;H(s,`Opening brace not found`);let c=` `.repeat(t.range.start.character)+` `,l=c+r+` `+a;g.push(Ye.insert(s,`
90
90
  `+l)),includeRange({start:{line:s.line+1,character:c.length},end:{line:s.line+1,character:l.length}})}}return{modifiedRange:h,edits:g}}nt();const{findNodeForKeyword:$f}=rt;function changeViewLayout(e,{view:t,viewAst:r,layout:i}){H(r.body,`View ${t.id} has no body`);let a=r.$cstNode;H(a,`viewCstNode`);let o=toAstViewLayoutDirection(i.direction),s=pn(r.body.rules,isViewRuleAutoLayout),c=`autoLayout ${o}`;if(on(i.rankSep)&&(c+=` ${i.rankSep}`,on(i.nodeSep)&&(c+=` ${i.nodeSep}`)),s&&s.$cstNode)return Ye.replace(s.$cstNode.range,c);let l=$f(r.body.$cstNode,`}`)?.range.start;H(l,`Closing brace not found`);let u=`\t${c}\n\t`;return Ye.insert(l,u)}function preparePayload(e,t){let r=t.shared.workspace,{viewId:i,projectId:a,change:o}=e,s=r.ProjectsManager.ensureProject(a),c=t.likec4.ModelLocator.locateViewAst(i,s.id);if(!c)throw Error(`View ${i} not found in project ${s.id}`);return{viewId:i,change:o,services:t,project:s,doc:c.doc,viewAst:c.viewAst,workspace:r}}function viewChangeHandler(e,t){return r=>{if(r.change.op===e)return t(r)}}const ep=viewChangeHandler(`change-property`,({change:e,viewAst:t})=>{let{title:r,description:i}=e,a=[];return r!==void 0&&a.push(updateViewTitle(t,r)),i!==void 0&&a.push(...updateViewDescription(t,i)),e.tag!==void 0&&a.push(...updateViewTags(t,e.tag)),a});function findExistingViewProperty(e,t){let r=e.body?.props;if(!(!r||!k(r,1)))return pn(r,e=>e.key===t&&e.$cstNode!==void 0)}function findInsertPosition(e,t){let r=t(ni(e.body,`View body is required`));if(!r)return wf.Position.create(0,0);let{line:i,character:a}=r;return wf.Position.create(i,a+1)}const doubleIndent=e=>vn(newline(),indent(indent(e)));function updateViewTitle(e,t){let r=findExistingViewProperty(e,`title`),i=withctx({title:t})(titleProperty());return r?wf.TextEdit.replace(r.$cstNode.range,printOperation(i)):wf.TextEdit.insert(findInsertPosition(e,e=>e.tags?.$cstNode?.range.end??e.$cstNode?.range.start),materialize(doubleIndent(i)).trimEnd())}function collectAllTagRefs(e){let t=[],r=e;for(;r;){let e=[];for(let t of r.values)t.$cstNode&&e.push(t);t.push(e),r=r.prev}return t.reverse().flat()}function addTag(e,t,r){let i=t.tags;return i?.$cstNode?wf.TextEdit.insert(i.$cstNode.range.end,`, #${r}`):wf.TextEdit.insert(findInsertPosition(e,e=>e.$cstNode?.range.start),materialize(doubleIndent(print(`#${r}`))).trimEnd())}function removeTag(e,t){let r=collectAllTagRefs(e.tags),i=r.findIndex(e=>e.tag.ref?.name===t);if(i<0)return;if(r.length===1){let t=e.tags;if(t?.$cstNode){let{start:e}=t.$cstNode.range;return wf.TextEdit.del({start:wf.Position.create(e.line,0),end:wf.Position.create(e.line+1,0)})}return}let a=r[i];if(i>0){let e=r[i-1];return wf.TextEdit.del({start:e.$cstNode.range.end,end:a.$cstNode.range.end})}let o=r[i+1];return wf.TextEdit.del({start:a.$cstNode.range.start,end:o.$cstNode.range.start})}function updateViewTags(e,t){let r=[],i=ni(e.body,`View body is required`);if(t.add){let a=Array.isArray(t.add)?t.add:[t.add];for(let t of a)t&&r.push(addTag(e,i,t))}if(t.remove){let e=Array.isArray(t.remove)?t.remove:[t.remove];for(let t of e){let e=t?removeTag(i,t):void 0;e&&r.push(e)}}return r}function updateViewDescription(e,t){let r=findExistingViewProperty(e,`description`),i=withctx({description:t},indent(indent(descriptionProperty())));if(r)return[wf.TextEdit.replace({start:{line:r.$cstNode.range.start.line,character:0},end:r.$cstNode.range.end},materialize(i).trimEnd())];let a=findInsertPosition(e,e=>L(e.props,P(e=>e.$cstNode?.range.end),N(R),Rn())??e.tags?.$cstNode?.range.end??e.$cstNode?.range.start);return[wf.TextEdit.insert({line:a.line+1,character:0},materialize(i))]}nt();const tp=q.getChild(`model-changes`);var LikeC4ModelChanges=class{services;locator;constructor(e){this.services=e,this.locator=e.likec4.ModelLocator}async applyChange(e){let{viewId:t,projectId:r,change:i}=e;if(i.op===`change-property`){let t=preparePayload(e,this.services),r=ep(t);if(!r)return{success:!1,error:`No changes to apply`};let i=Array.isArray(r)?r:[r];return await this.applyTextEdits(t.doc,i)?{success:!0,location:null}:{success:!1,error:`Failed to apply text edits`}}let a=this.services.shared.workspace;try{let e=a.ProjectsManager.ensureProject(r);tp.debug`Applying model change ${i.op} to view ${t} in project ${e.id}`;let o=this.locator.locateViewAst(t,e.id);if(!o)throw Error(`View ${t} not found in project ${e.id}`);let s={uri:o.doc.textDocument.uri,version:o.doc.textDocument.version};if(i.op===`save-view-snapshot`)return H(t===i.layout.id,`View ID does not match, expected `+t+`, got `+i.layout.id),{success:!0,location:await a.ManualLayouts.write(e,i.layout)};if(i.op===`reset-manual-layout`)return{success:!0,location:await a.ManualLayouts.remove(e,t)};let{edits:c,modifiedRange:l}=this.convertToTextEdit({lookup:o,change:i});return c.length?await this.applyTextEdits(o.doc,c)?{success:!0,location:{uri:s.uri,range:l}}:{success:!1,error:`Failed to apply changes`}:{success:!1,error:`No changes to apply`}}catch(t){let r=c(p(t,`Failed to apply change ${e.change.op} ${e.viewId}`));return tp.warn(r),{success:!1,error:r}}}convertToTextEdit({lookup:e,change:t}){switch(t.op){case`change-element-style`:return changeElementStyle(this.services,{...e,targets:t.targets,style:t.style});case`change-autolayout`:{let r=changeViewLayout(this.services,{...e,layout:t.layout});return{modifiedRange:r.range,edits:[r]}}default:U(t)}}async applyTextEdits(e,t){let r=this.services.shared.lsp.Connection,i=this.services.shared.workspace;if(!r){let r=ye.applyEdits(e.textDocument,t);return await i.FileSystemProvider.writeFile(e.uri,r),await i.DocumentBuilder.update([e.uri],[]),!0}let a=await r.workspace.applyEdit({label:`LikeC4 - change view`,edit:{changes:{[e.textDocument.uri]:t}}});return a.applied?(await i.DocumentBuilder.update([e.uri],[]),a.applied):(tp.warn`Failed to apply text edits to document ${e.textDocument.uri}: ${a.failureReason}`,r.window.showErrorMessage(`Failed to apply changes: ${a.failureReason}`),!1)}},LikeC4NameProvider=class extends ue{services;constructor(e){super(),this.services=e}getNameStrict(e){return ni(this.getName(e),`Failed getName for ${this.services.workspace.AstNodeLocator.getAstNodePath(e)}`)}getName(e){if(ge(e))return e.name;if(isImported(e))return e.imported.$refText;if(isDeployedInstance(e))return e.target.modelElement.value.$refText}getNameNode(e){if(ge(e))return super.getNameNode(e);if(isImported(e))return e.imported.$refNode;if(isDeployedInstance(e))return e.target.modelElement.value.$refNode}};function uniqueDescriptions(e){return L(e,$t(e=>`${e.type}.${e.name}`),sn(),A(([e,t])=>t.length===1?t:[]))}var LikeC4ScopeComputation=class extends oe{constructor(e){super(e)}async computeExports(e,t){let r=[];try{let{specifications:t,models:i,views:a,globals:o,likec4lib:s,deployments:c}=e.parseResult.value;this.exportLibrary(s,r,e),this.exportSpecification(t,r,e),this.exportModel(i,r,e),this.exportViews(a,r,e),this.exportGlobals(o,r,e),this.exportDeployments(c,r,e)}catch(e){logWarnError(e)}return r}exportViews(e,t,r){let i=e?.flatMap(e=>e.views);if(!(I(i)||i.length===0))for(let e of i)try{R(e.name)&&t.push(this.descriptions.createDescription(e,e.name,r))}catch(e){logWarnError(e)}}exportGlobals(e,t,r){if(!(I(e)||e.length===0)){for(let i of e.flatMap(e=>e.predicates))try{let e=i;R(e.name)&&t.push(this.descriptions.createDescription(e,e.name,r))}catch(e){logWarnError(e)}for(let i of e.flatMap(e=>e.styles))try{let e=i.id;R(e.name)&&t.push(this.descriptions.createDescription(e,e.name,r))}catch(e){logWarnError(e)}}}exportModel(e,t,r){if(!(I(e)||e.length===0))for(let i of e.flatMap(e=>e.elements))try{isElement(i)&&R(i.name)&&t.push(this.descriptions.createDescription(i,i.name,r))}catch(e){logWarnError(e)}}exportLibrary(e,t,r){if(!I(e))try{for(let i of e.flatMap(e=>e.icons))t.push(this.descriptions.createDescription(i,i.name,r))}catch(e){logWarnError(e)}}exportSpecification(e,t,r){if(!(I(e)||e.length===0))for(let i of e.flatMap(e=>[...e.elements,...e.relationships,...e.deploymentNodes,...e.tags,...e.colors]))try{switch(!0){case isSpecificationDeploymentNodeKind(i):case isSpecificationElementKind(i):R(i.kind.name)&&t.push(this.descriptions.createDescription(i.kind,i.kind.name,r));continue;case isSpecificationTag(i):R(i.tag.name)&&t.push(this.descriptions.createDescription(i.tag,i.tag.name,r),this.descriptions.createDescription(i.tag,`#`+i.tag.name,r));continue;case isSpecificationRelationshipKind(i):R(i.kind.name)&&t.push(this.descriptions.createDescription(i.kind,i.kind.name,r));continue;case isSpecificationColor(i):R(i.name.name)&&t.push(this.descriptions.createDescription(i.name,i.name.name,r));continue;default:U(i)}}catch(e){logWarnError(e)}}exportDeployments(e,t,r){let i=e?.flatMap(e=>e.elements);if(!(I(i)||i.length===0))for(let e of i)try{isDeploymentNode$1(e)&&R(e.name)&&t.push(this.descriptions.createDescription(e,e.name,r))}catch(e){logWarnError(e)}}computeLocalScopes(e,t){return new Promise(t=>{let r=e.parseResult.value,i=[],a=new ce;for(let t of r.models)try{i.push(...this.processContainer(t,a,e))}catch(e){logWarnError(e)}for(let t of r.deployments)try{i.push(...this.processDeployments(t,a,e))}catch(e){logWarnError(e)}for(let e of r.imports.flatMap(e=>e.imports))try{let t=e;for(;t;)i.push(this.descriptions.createDescription(t,t.imported.$refText)),t=t.prev}catch(e){logWarnError(e)}uniqueDescriptions(i).forEach(e=>{a.add(r,e)}),t(a)})}processContainer(e,t,r){let i=new ce,a=[];for(let o of e.elements){if(isRelation(o))continue;let e;if(isElement(o)?(R(o.name)&&i.add(o.name,this.descriptions.createDescription(o,o.name,r)),e=o.body,e&&(t.add(e,this.descriptions.createDescription(o,`this`,r)),t.add(e,this.descriptions.createDescription(o,`it`,r)))):isExtendElement(o)&&(e=o.body),e&&e.elements.length>0)try{a.push(...this.processContainer(e,t,r))}catch(e){logWarnError(e)}}a.length&&L(a,N(e=>!i.has(e.name)),$t(e=>e.name),dn((e,t)=>{e.length===1&&i.add(t,e[0])}));let o=[...i.values()];return t.addAll(e,o),o}processDeployments(e,t,r){let i=new ce,a=[];for(let o of e.elements){if(isDeploymentRelation(o))continue;let e=o.body;if(!isExtendDeployment(o)){let a=this.nameProvider.getName(o);if(R(a)){let e=this.descriptions.createDescription(o,a,r);i.add(a,e)}e&&(t.add(e,this.descriptions.createDescription(o,`this`,r)),t.add(e,this.descriptions.createDescription(o,`it`,r)))}if(e)try{a.push(...this.processDeployments(e,t,r))}catch(e){logWarnError(e)}}a.length&&L(a,N(e=>!i.has(e.name)),$t(e=>e.name),dn((e,t)=>{e.length===1&&i.add(t,e[0])}));let o=[...i.values()];return t.addAll(e,o),o}};const{getDocument:np}=Ae;var LikeC4ScopeProvider=class extends pe{services;indexManager;constructor(e){super(e),this.services=e,this.indexManager=e.shared.workspace.IndexManager}get fqnIndex(){return this.services.likec4.FqnIndex}get deploymentsIndex(){return this.services.likec4.DeploymentsIndex}getScope(e){try{let t=projectIdFrom(e.container),r=this.reflection.getReferenceType(e);try{let i=e.container;if(isFqnRef(i))return new me(this.streamForFqnRef(t,i,e));if(isStrictFqnRef(i))return this.getScopeForStrictFqnRef(t,i,e);if(r!==`Element`)return this.getProjectScope(t,r,e);if(isImported(i)){let e=projectIdFrom(i);return new me(this.fqnIndex.rootElements(e))}if(isStrictFqnElementRef(i)&&e.property===`el`){let a=i.parent;return a?new me(this.fqnIndex.directChildrenOf(t,readStrictFqn(a))):this.getProjectScope(t,r,e)}return new me(lt(this.computeScope(t,e)))}catch(i){return logWarnError(i),this.getProjectScope(t,r,e)}}catch(e){return logWarnError(e),de}}*genUniqueDescedants(e){if(!e)return;let t=projectIdFrom(e);if(isElement(e)){let r=this.fqnIndex.getFqn(e);yield*this.fqnIndex.uniqueDescedants(t,r);return}if(isDeploymentNode$1(e)){let r=this.deploymentsIndex.getFqn(e);yield*this.deploymentsIndex.uniqueDescedants(t,r)}}*genScopeExtendElement({element:e}){e.el.$nodeDescription&&(yield e.el.$nodeDescription,yield{...e.el.$nodeDescription,name:`this`},yield{...e.el.$nodeDescription,name:`it`}),yield*this.genUniqueDescedants(elementRef(e))}*genScopeElementView({viewOf:e,extends:t}){if(e){e.modelElement.value.$nodeDescription&&(yield e.modelElement.value.$nodeDescription),yield*this.genUniqueDescedants(elementRef(e));return}if(t){let e=t.view.ref;e&&(yield*this.genScopeElementView(e))}}getScopeForStrictFqnRef(e,t,r){let i=t.parent;return i?new me(this.deploymentsIndex.directChildrenOf(e,readStrictFqn(i)).filter(e=>this.reflection.isSubtype(e.type,Nl))):this.getProjectScope(e,Nl,r)}*genScopeExtendDeployment({deploymentNode:e}){e.value.$nodeDescription&&(yield e.value.$nodeDescription);let t=e.value.ref;t&&isDeploymentNode$1(t)&&(yield*this.genUniqueDescedants(t))}streamForFqnRef(e,t,r){let i=t.parent;if(!i)return lt(this.genScopeForParentlessFqnRef(e,t,r));let a=i.value.ref;if(!a)return Te;if(isImported(a))return lt(this.genUniqueDescedants(a.imported.ref));if(isDeploymentNode$1(a))return lt(this.genUniqueDescedants(a));if(isDeployedInstance(a)){let e=a.target.modelElement.value.ref,t=isImported(e)?e.imported.ref:isElement(e)?e:void 0;return lt(this.genUniqueDescedants(t))}return isElement(a)?lt(this.genUniqueDescedants(a)):U(a)}*genScopeForParentlessFqnRef(e,t,r){Me(t,isElementRef)||isFqnRefInsideModel(t)?yield*this.computeScope(e,r,Yl):isFqnRefInsideGlobals(t)?(yield*this.computeScope(e,r,Yl),yield*this.computeScope(e,r,Nl),yield*this.computeScope(e,r,jl)):(yield*this.computeScope(e,r,Nl),yield*this.computeScope(e,r,jl),Me(t,isDeploymentViewBody)&&(yield*this.computeScope(e,r,Yl)));let i=np(t).precomputedScopes;i&&(yield*i.values().filter(e=>this.reflection.isSubtype(e.type,Au)))}*computeScope(e,t,r=this.reflection.getReferenceType(t)){let i=this.reflection.isSubtype(r,Yl),a=this.reflection.isSubtype(r,Lc),o=np(t.container).precomputedScopes;if(!o){yield*this.getProjectScope(e,r,t).getAllElements();return}let byReferenceType=e=>this.reflection.isSubtype(e.type,r),s=t.container;for(;s;){let e=o.get(s).filter(byReferenceType);e.length>0&&(yield*e),a&&isExtendDeploymentBody(s)&&(yield*this.genScopeExtendDeployment(s.$container)),i&&isExtendElementBody(s)&&(yield*this.genScopeExtendElement(s.$container)),i&&isElementViewBody(s)&&(yield*this.genScopeElementView(s.$container)),s=s.$container}yield*this.getProjectScope(e,r,t).getAllElements()}getProjectScope(e,t,r){return t===`LibIcon`?super.getGlobalScope(t,r):this.globalScopeCache.get(`${e}::${t}`,()=>new fe(this.indexManager.projectElements(e,t)))}getGlobalScope(e,t){if(e===`LibIcon`)return super.getGlobalScope(e,t);let r=projectIdFrom(t.container);return this.getProjectScope(r,e,t)}},Q=Ke();let rp;(function(e){e.type=new Q.NotificationType(`likec4/onDidChangeModel`)})(rp||={});let ip;(function(e){e.type=new Q.NotificationType0(`likec4/onDidChangeProjects`)})(ip||={});let ap;(function(e){e.type=new Q.NotificationType(e.Method=`likec4/onDidChangeSnapshot`)})(ap||={});let op;(function(e){e.type=new Q.NotificationType(`likec4/onRequestOpenView`)})(op||={});let sp;(function(e){e.req=new Q.RequestType(`likec4/fetchComputedModel`)})(sp||={});let cp;(function(e){e.req=new Q.RequestType0(`likec4/fetchViewsFromAllProjects`)})(cp||={});let lp;(function(e){e.req=new Q.RequestType(`likec4/fetchLayoutedModel`)})(lp||={});let up;(function(e){e.req=new Q.RequestType(`likec4/layout-view`)})(up||={});let dp;(function(e){e.req=new Q.RequestType(`likec4/validate-layout`)})(dp||={});let fp;(function(e){e.req=new Q.RequestType0(`likec4/reload-projects`)})(fp||={});let pp;(function(e){e.req=new Q.RequestType0(`likec4/fetch-projects`)})(pp||={});let mp;(function(e){e.req=new Q.RequestType(`likec4/register-project`)})(mp||={});let hp;(function(e){e.req=new Q.RequestType(`likec4/build`)})(hp||={});let gp;(function(e){e.req=new Q.RequestType(`likec4/locate`)})(gp||={});let _p;(function(e){e.req=new Q.RequestType(`likec4/change-view`)})(_p||={});let vp;(function(e){e.req=new Q.RequestType0(`likec4/metrics`)})(vp||={});let yp;(function(e){e.req=new Q.RequestType(`likec4/document-tags`)})(yp||={});let bp;(function(e){e.req=new Q.RequestType0(`likec4/fetch-projects-overview`)})(bp||={});const $=q.getChild(`rpc`);var Rpc=class extends ADisposable{services;constructor(e){super(),this.services=e}init=Sn(()=>{let e=this.services.shared.lsp.Connection;if(!e){$.info(`no connection, skip init ServerRpc`);return}$.info(`init ServerRpc`);let t=this.services.likec4,r=this.services.shared.workspace,i=r.LangiumDocuments,a=r.DocumentBuilder,sendDidChangeModelNotification=t=>{$.debug`send ${`onDidChangeModel`} for project ${t}`,e.sendNotification(rp.type,{projectId:t}).catch(e=>{$.warn(`[ServerRpc] error sending onDidChangeModel for project {project}`,{error:e,project:t})})},o=un(e=>{if(typeof e==`string`){sendDidChangeModelNotification(e);return}for(let t of e)sendDidChangeModelNotification(t)},{reducer:(e,t)=>!e||e===t?t:e instanceof Set?(e.add(t),e):new Set([e,t]),triggerAt:`end`,minQuietPeriodMs:130,maxBurstDurationMs:400}),s=un(t=>{t>1?$.debug`send ${`DidChangeProjectsNotification`} (${t} batched)`:$.debug`send ${`DidChangeProjectsNotification`}`,e.sendNotification(ip.type).catch(e=>{$.warn(`[ServerRpc] error sending DidChangeProjectsNotification:`,{error:e})})},{reducer:(e,t)=>(e??0)+t,triggerAt:`end`,minQuietPeriodMs:250,maxBurstDurationMs:700}),c=!0;this.onDispose(ae.create(()=>{o.cancel(),s.cancel()}),t.ModelBuilder.onModelParsed(e=>o.call(e)),r.ProjectsManager.onProjectsUpdate(()=>s.call(1)),e.onRequest(sp.req,async({projectId:e,cleanCaches:i=!1},a)=>{$.debug`received request ${`fetchComputedModel`} for project ${e}`,i&&($.debug`cleanCaches: ${i}`,e?(r.ManualLayouts.clearCaches(),await r.ProjectsManager.rebuildProject(e)):await r.WorkspaceManager.rebuildAll());let o=await t.ModelBuilder.computeModel(e,a);return o===ji.EMPTY?{model:null}:{model:o.$data}}),e.onNotification(ap.type,async e=>{let t=b.parse(e.update??e.delete),i=`update`in e?{update:t}:{delete:t};$.debug`received notification ${`onDidChangeSnapshot`} with ${e}`,await r.ManualLayouts.handleFileSystemUpdate(i)}),e.onRequest(lp.req,async({projectId:e},r)=>{$.debug`received request ${`fetchLayoutedModel`} for project ${e}`;let i=await t.LanguageServices.layoutedModel(e);if(i===null)return{model:null};let a=await t.Views.diagrams(e,r);return{model:{...i.$data,_stage:`layouted`,views:cn(a,e=>e.id)}}}),e.onRequest(up.req,async({viewId:e,projectId:r,layoutType:i,hints:a},o)=>($.debug`received request ${`layoutView`} for ${e} from project ${r} (layout type: ${i??`not set`})`,{result:await t.Views.layoutView({viewId:e,projectId:r,layoutType:i,layoutHints:a,cancelToken:o})})),e.onRequest(dp.req,async({projectId:e},r)=>($.debug`received request ${`validateLayout`} for project ${e}`,{result:reportLayoutDrift((await t.Views.layoutAllViews(e,r)).map(e=>e.diagram))})),e.onRequest(pp.req,async()=>($.debug`received request ${`FetchProjects`}`,{projects:Ln(i.groupedByProject(),(e,t)=>{let{folderUri:i,config:{name:a,title:o}}=r.ProjectsManager.getProject(t);return{folder:i.toString(),config:{name:a,title:o},docs:P(e,e=>e.uri.toString())}})})),e.onRequest(fp.req,async e=>{$.debug`received request ${`ReloadProjects`}`,r.ManualLayouts.clearCaches(),await r.ProjectsManager.reloadProjects(e)}),e.onRequest(mp.req,async(e,t)=>{$.debug`received request ${`RegisterProject`}`,r.ManualLayouts.clearCaches();let i;return i=`configUri`in e?await r.ProjectsManager.registerConfigFile(b.parse(e.configUri),t):await r.ProjectsManager.registerProject(e,t),{id:i.id}}),e.onRequest(cp.req,async e=>{$.debug`received request ${`FetchViewsFromAllProjects`}`;let i=[];for(let a of r.ProjectsManager.all){await be(e);try{let r=await t.Views.computedViews(a,e);i.push(...L(r,P(e=>({id:e.id,title:e.title??e.id,projectId:a})),kn((e,t)=>e.id===`index`?-1:t.id===`index`?1:e.title.localeCompare(t.title))))}catch(e){$.warn(`Failed to fetch views for project ${a}:`,{error:e})}}return{views:i}}),e.onRequest(hp.req,async({docs:t},r)=>{let o=t.map(e=>b.parse(e)),isNotChanged=e=>!o.some(t=>S.equals(t,e)),s=i.userDocuments.map(e=>e.uri).filter(isNotChanged).toArray();$.debug(`[ServerRpc] received request to build: