archsight 0.3.1 → 0.3.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.
- checksums.yaml +4 -4
- data/CONTRIBUTING.md +1 -1
- data/README.md +6 -1
- data/docs/icons.md +3 -2
- data/docs/index.md.erb +5 -4
- data/docs/modeling.md +122 -5
- data/docs/pages.md +12 -3
- data/docs/search.md +9 -2
- data/docs/togaf.md +4 -0
- data/lib/archsight/annotations/relation_resolver.rb +15 -6
- data/lib/archsight/cli.rb +6 -0
- data/lib/archsight/database.rb +57 -3
- data/lib/archsight/diagram.rb +7 -0
- data/lib/archsight/documentation.rb +7 -4
- data/lib/archsight/editor.rb +2 -2
- data/lib/archsight/helpers/requirements_blocks.rb +1 -1
- data/lib/archsight/helpers/resource_resolver.rb +1 -1
- data/lib/archsight/helpers/wiki_links.rb +11 -0
- data/lib/archsight/linter.rb +6 -0
- data/lib/archsight/mcp/analyze_resource_tool.rb +2 -2
- data/lib/archsight/mcp/resource_doc_tool.rb +2 -2
- data/lib/archsight/query/ast.rb +2 -1
- data/lib/archsight/query/evaluator.rb +2 -2
- data/lib/archsight/references.rb +129 -0
- data/lib/archsight/requirements.rb +4 -4
- data/lib/archsight/resources/application_component.rb +3 -0
- data/lib/archsight/resources/application_interface.rb +1 -1
- data/lib/archsight/resources/application_service.rb +4 -4
- data/lib/archsight/resources/base.rb +40 -5
- data/lib/archsight/resources/business_control.rb +80 -0
- data/lib/archsight/resources/business_process.rb +3 -2
- data/lib/archsight/resources/business_product.rb +2 -2
- data/lib/archsight/resources/compliance_evidence.rb +36 -1
- data/lib/archsight/resources/data_object.rb +1 -1
- data/lib/archsight/resources/{business_constraint.rb → motivation_constraint.rb} +4 -4
- data/lib/archsight/resources/motivation_goal.rb +1 -1
- data/lib/archsight/resources/{business_requirement.rb → motivation_requirement.rb} +15 -5
- data/lib/archsight/resources/motivation_stakeholder.rb +2 -2
- data/lib/archsight/resources/strategy_capability.rb +2 -2
- data/lib/archsight/resources/technology_node.rb +1 -1
- data/lib/archsight/resources/technology_service.rb +3 -3
- data/lib/archsight/resources/technology_system_software.rb +3 -3
- data/lib/archsight/resources.rb +34 -3
- data/lib/archsight/template.rb +2 -2
- data/lib/archsight/version.rb +1 -1
- data/lib/archsight/web/api/docs.rb +1 -1
- data/lib/archsight/web/api/json_helpers.rb +14 -10
- data/lib/archsight/web/api/openapi/spec.yaml +2 -2
- data/lib/archsight/web/api/page_helpers.rb +8 -7
- data/lib/archsight/web/api/routes.rb +1 -1
- data/lib/archsight/web/application.rb +6 -1
- data/lib/archsight/web/public/vue/{ApiDocsPage-D-cPRZCT.js → ApiDocsPage-DoOxKjG0.js} +1 -1
- data/lib/archsight/web/public/vue/{DocPage-DK6vNDbF.js → DocPage-CfsC3CeQ.js} +1 -1
- data/lib/archsight/web/public/vue/{EditorPage-BoJpQaVw.js → EditorPage-CsJA0q8n.js} +1 -1
- data/lib/archsight/web/public/vue/{ErrorPage-PGyjdtEf.js → ErrorPage-OJpJz9df.js} +1 -1
- data/lib/archsight/web/public/vue/{GraphView-BLiKR4zP.js → GraphView-CBq6oFRV.js} +1 -1
- data/lib/archsight/web/public/vue/HomePage-BwgMLgVC.js +2 -0
- data/lib/archsight/web/public/vue/InstanceRouter-DQz-SsQq.js +1 -0
- data/lib/archsight/web/public/vue/{InstanceRouter-60Tt3ZNM.css → InstanceRouter-jeavM6PW.css} +1 -1
- data/lib/archsight/web/public/vue/KindList-4q0K9Cll.js +1 -0
- data/lib/archsight/web/public/vue/{PageView-9MgHtrgl.js → PageView-DzeGnvoS.js} +1 -1
- data/lib/archsight/web/public/vue/{QueryError-D1FL1xgA.js → QueryError-kg6Yf-pW.js} +1 -1
- data/lib/archsight/web/public/vue/ResourceList-Df_0e0qt.js +2 -0
- data/lib/archsight/web/public/vue/SearchResults-CKgY6_wH.js +1 -0
- data/lib/archsight/web/public/vue/{SearchResults-DiW5XVYW.css → SearchResults-CyPUZZSC.css} +1 -1
- data/lib/archsight/web/public/vue/WikiPage-DoFJ0dbW.css +1 -0
- data/lib/archsight/web/public/vue/{WikiPage-CeCQBTDS.js → WikiPage-DrvCHwJ7.js} +3 -3
- data/lib/archsight/web/public/vue/{index-D7m61Ahx.js → index-D0Q5GZRs.js} +2 -2
- data/lib/archsight/web/public/vue/index-oF-iyZvk.css +1 -0
- data/lib/archsight/web/public/vue.html +2 -2
- metadata +23 -21
- data/lib/archsight/web/public/vue/HomePage-C0lR8i2C.js +0 -2
- data/lib/archsight/web/public/vue/InstanceRouter-D3W2jJHV.js +0 -1
- data/lib/archsight/web/public/vue/KindList-BlsaRBNO.js +0 -1
- data/lib/archsight/web/public/vue/ResourceList-vkgFyeOY.js +0 -2
- data/lib/archsight/web/public/vue/SearchResults-Cl3O_OEr.js +0 -1
- data/lib/archsight/web/public/vue/WikiPage-C-8SG67a.css +0 -1
- data/lib/archsight/web/public/vue/index-Dbx3MXWG.css +0 -1
|
@@ -34,8 +34,8 @@ class Archsight::Resources::TechnologySystemSoftware < Archsight::Resources::Bas
|
|
|
34
34
|
relation :realizedThrough, :technologyArtifacts, :TechnologyArtifact
|
|
35
35
|
relation :exposes, :applicationInterfaces, :ApplicationInterface
|
|
36
36
|
relation :dependsOn, :applicationInterfaces, :ApplicationInterface
|
|
37
|
-
relation :realizes, :
|
|
38
|
-
relation :partiallyRealizes, :
|
|
39
|
-
relation :plans, :
|
|
37
|
+
relation :realizes, :motivationRequirements, :MotivationRequirement
|
|
38
|
+
relation :partiallyRealizes, :motivationRequirements, :MotivationRequirement
|
|
39
|
+
relation :plans, :motivationRequirements, :MotivationRequirement
|
|
40
40
|
relation :evidencedBy, :complianceEvidences, :ComplianceEvidence
|
|
41
41
|
end
|
data/lib/archsight/resources.rb
CHANGED
|
@@ -6,6 +6,37 @@ module Archsight
|
|
|
6
6
|
# Store the class mapping
|
|
7
7
|
@resource_classes = {}
|
|
8
8
|
|
|
9
|
+
# Kinds that were renamed: the old name is still accepted (see Database#create_valid_instance) and reported
|
|
10
|
+
# as deprecated by `archsight lint`. The table is only consulted by lookups; `each` and `resource_classes`
|
|
11
|
+
# list every kind once, under its new name. Remove an entry (and its relation keys below) to end the transition.
|
|
12
|
+
KIND_ALIASES = {
|
|
13
|
+
"BusinessRequirement" => "MotivationRequirement",
|
|
14
|
+
"BusinessConstraint" => "MotivationConstraint"
|
|
15
|
+
}.freeze
|
|
16
|
+
|
|
17
|
+
# Relation keys (the plural kind names under `spec.<verb>`) that were renamed together with their kind
|
|
18
|
+
RELATION_KEY_ALIASES = {
|
|
19
|
+
"businessRequirements" => "motivationRequirements",
|
|
20
|
+
"businessConstraints" => "motivationConstraints"
|
|
21
|
+
}.freeze
|
|
22
|
+
|
|
23
|
+
# Relations that are never written in a file: they are derived from what a resource's text and diagram say
|
|
24
|
+
# (see Archsight::References). `mentions` comes from links in text, `depicts` from the nodes of a diagram.
|
|
25
|
+
# Every kind can have them towards every kind, so instead of one relation per target kind a class gets one per
|
|
26
|
+
# verb, under the key DERIVED_KEY, that holds resources of any kind (relations are followed by looking at the
|
|
27
|
+
# resources they hold, not at the kind they were declared for).
|
|
28
|
+
DERIVED_VERBS = %i[mentions depicts].freeze
|
|
29
|
+
DERIVED_KEY = :resources
|
|
30
|
+
|
|
31
|
+
# The derived relations of every class, next to the ones it declares: [verb, key, kind]
|
|
32
|
+
DERIVED_RELATIONS = DERIVED_VERBS.map { |verb| [verb, DERIVED_KEY, "Resource"] }.freeze
|
|
33
|
+
|
|
34
|
+
# The current name of a kind, whichever of its names is given
|
|
35
|
+
def self.canonical(klass_name)
|
|
36
|
+
name = klass_name.to_s
|
|
37
|
+
KIND_ALIASES.fetch(name, name)
|
|
38
|
+
end
|
|
39
|
+
|
|
9
40
|
# Register a resource class
|
|
10
41
|
def self.register(klass)
|
|
11
42
|
# Skip anonymous classes (used in tests)
|
|
@@ -20,9 +51,9 @@ module Archsight
|
|
|
20
51
|
@resource_classes
|
|
21
52
|
end
|
|
22
53
|
|
|
23
|
-
# Returns the class by name
|
|
54
|
+
# Returns the class by name; a renamed kind is found under its old name too
|
|
24
55
|
def self.[](klass_name)
|
|
25
|
-
@resource_classes[klass_name
|
|
56
|
+
@resource_classes[canonical(klass_name)]
|
|
26
57
|
end
|
|
27
58
|
|
|
28
59
|
# Iterate over all resource class names (sorted)
|
|
@@ -32,7 +63,7 @@ module Archsight
|
|
|
32
63
|
|
|
33
64
|
# Get the constant by name (for backward compatibility with const_get)
|
|
34
65
|
def self.const_get(name)
|
|
35
|
-
@resource_classes[name
|
|
66
|
+
@resource_classes[canonical(name)] || super
|
|
36
67
|
end
|
|
37
68
|
end
|
|
38
69
|
end
|
data/lib/archsight/template.rb
CHANGED
|
@@ -35,10 +35,10 @@ module Archsight
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
def add_relations(yaml, klass)
|
|
38
|
-
return if klass.
|
|
38
|
+
return if klass.declared_relations.empty?
|
|
39
39
|
|
|
40
40
|
yaml["spec"] = {} if yaml["spec"].nil?
|
|
41
|
-
klass.
|
|
41
|
+
klass.declared_relations.each do |verb, relation_kind, _relation_klass|
|
|
42
42
|
relation_verb = verb.to_s.delete_prefix(":")
|
|
43
43
|
yaml["spec"][relation_verb] ||= {}
|
|
44
44
|
yaml["spec"][relation_verb][relation_kind.to_s] = []
|
data/lib/archsight/version.rb
CHANGED
|
@@ -18,7 +18,7 @@ module Archsight::Web::API::Docs
|
|
|
18
18
|
# GET /api/v1/docs/resources/:filename — auto-generated resource docs
|
|
19
19
|
get "/api/v1/docs/resources/:filename" do
|
|
20
20
|
filename = params["filename"].gsub(/[^a-zA-Z0-9_-]/, "")
|
|
21
|
-
kind_name = filename.split("_").map(&:capitalize).join
|
|
21
|
+
kind_name = Archsight::Resources.canonical(filename.split("_").map(&:capitalize).join) # an old help link shows the renamed kind
|
|
22
22
|
|
|
23
23
|
begin
|
|
24
24
|
content = Archsight::Documentation.generate(kind_name)
|
|
@@ -74,7 +74,7 @@ module Archsight::Web::API::JsonHelpers
|
|
|
74
74
|
|
|
75
75
|
def build_list_response(kind, pagination, instances)
|
|
76
76
|
{
|
|
77
|
-
kind: kind,
|
|
77
|
+
kind: Archsight::Resources.canonical(kind),
|
|
78
78
|
total: pagination[:total],
|
|
79
79
|
limit: pagination[:limit],
|
|
80
80
|
offset: pagination[:offset],
|
|
@@ -88,9 +88,10 @@ module Archsight::Web::API::JsonHelpers
|
|
|
88
88
|
|
|
89
89
|
def build_instance_response(kind, instance)
|
|
90
90
|
{
|
|
91
|
-
kind: kind,
|
|
91
|
+
kind: Archsight::Resources.canonical(kind),
|
|
92
92
|
name: instance.name,
|
|
93
|
-
metadata: { annotations: render_annotations(instance.annotations, base: Archsight::Assets.base_dir_for(instance, resources_dir: Archsight.resources_dir)) },
|
|
93
|
+
metadata: { annotations: render_annotations(instance.annotations, base: Archsight::Assets.base_dir_for(instance, resources_dir: Archsight.resources_dir), kind: kind) },
|
|
94
|
+
annotation_formats: Archsight::Resources[kind]&.annotation_formats(instance.annotations.keys) || {},
|
|
94
95
|
spec: serialize_spec(instance.spec),
|
|
95
96
|
relations: extract_relations(instance),
|
|
96
97
|
references: extract_references(instance),
|
|
@@ -106,10 +107,14 @@ module Archsight::Web::API::JsonHelpers
|
|
|
106
107
|
Archsight::Helpers::DiagramBlocks.render_diagram(source, resolver: Archsight::Helpers::ResourceResolver.new(db))
|
|
107
108
|
end
|
|
108
109
|
|
|
110
|
+
# The values of markdown annotations are rendered to HTML: architecture/description and every annotation the
|
|
111
|
+
# kind defines with `format: :markdown`.
|
|
109
112
|
# @param base [String, nil] directory of the file the resource comes from, for the images of its markdown
|
|
110
|
-
|
|
113
|
+
# @param kind [String, nil] the kind of the resource, to find which of its annotations are markdown
|
|
114
|
+
def render_annotations(annotations, base: nil, kind: nil)
|
|
115
|
+
klass = kind && Archsight::Resources[kind]
|
|
111
116
|
annotations.each_with_object({}) do |(key, value), result|
|
|
112
|
-
result[key] = if
|
|
117
|
+
result[key] = if value.is_a?(String) && (MARKDOWN_ANNOTATION_KEYS.include?(key) || klass&.annotation_format(key) == :markdown)
|
|
113
118
|
markdown(value, base: base)
|
|
114
119
|
else
|
|
115
120
|
value
|
|
@@ -167,11 +172,10 @@ module Archsight::Web::API::JsonHelpers
|
|
|
167
172
|
relations = {}
|
|
168
173
|
|
|
169
174
|
instance.class.relations.each do |verb, spec_key, kind|
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
relations[verb] ||= {}
|
|
174
|
-
relations[verb][kind] = rels
|
|
175
|
+
found = instance.relations(verb, spec_key)
|
|
176
|
+
# derived relations hold resources of any kind: grouped by the kind each one is
|
|
177
|
+
groups = Archsight::Resources::DERIVED_VERBS.include?(verb) ? found.group_by(&:klass) : { kind => found }
|
|
178
|
+
groups.each { |target_kind, rels| (relations[verb] ||= {})[target_kind] = rels.map(&:name) unless rels.empty? }
|
|
175
179
|
end
|
|
176
180
|
|
|
177
181
|
relations
|
|
@@ -705,9 +705,9 @@ paths:
|
|
|
705
705
|
|
|
706
706
|
/api/v1/requirements:
|
|
707
707
|
get:
|
|
708
|
-
summary:
|
|
708
|
+
summary: Requirements of a selection of resources
|
|
709
709
|
description: |
|
|
710
|
-
The
|
|
710
|
+
The requirements that the resources selected by `of` realize (`implemented`), partially realize
|
|
711
711
|
(`partial`) or plan (`planned`), merged over all of them: one entry per requirement with the best status and
|
|
712
712
|
the resources it comes from (`by`). Sorted by priority (must, should, may, none), then name. `story` is
|
|
713
713
|
rendered HTML.
|
|
@@ -67,13 +67,14 @@ module Archsight::Web::API::PageHelpers
|
|
|
67
67
|
rest.to_s.lstrip
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
-
#
|
|
70
|
+
# The other pages that link to this page with [[name]] or [[title]] (optionally with |label): the pages that mention it
|
|
71
|
+
# (see Archsight::References), so a link in code does not count and a page is not listed twice.
|
|
71
72
|
def page_backlinks(page)
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
page.references
|
|
74
|
+
.select { |ref| ref[:verb] == :mentions && ref[:instance].klass == "Page" && !ref[:instance].equal?(page) }
|
|
75
|
+
.map { |ref| ref[:instance] }
|
|
76
|
+
.uniq
|
|
77
|
+
.sort_by(&:name)
|
|
78
|
+
.map { |other| { name: other.name, title: other.title } }
|
|
78
79
|
end
|
|
79
80
|
end
|
|
@@ -112,7 +112,7 @@ module Archsight::Web::API::Routes
|
|
|
112
112
|
end
|
|
113
113
|
end
|
|
114
114
|
|
|
115
|
-
# GET /api/v1/requirements - The
|
|
115
|
+
# GET /api/v1/requirements - The requirements of the resources a query selects (see Archsight::Requirements)
|
|
116
116
|
get "/api/v1/requirements" do
|
|
117
117
|
query = params[:of]
|
|
118
118
|
json_error("Query parameter 'of' is required", status: 400, error_type: "BadRequest") unless query
|
|
@@ -87,9 +87,14 @@ class Archsight::Web::Application < Sinatra::Base
|
|
|
87
87
|
mcp_server.register_tool(Archsight::MCP::ResourceDocTool)
|
|
88
88
|
mcp_server.register_tool(Archsight::MCP::ExecuteAnalysisTool)
|
|
89
89
|
|
|
90
|
+
# The server is meant to be deployed (behind an ingress under its own hostname), and the web UI and API do not
|
|
91
|
+
# restrict who may reach them either. FastMcp's default would only accept the Origin / Host `localhost`
|
|
92
|
+
# (DNS-rebinding protection) and answer every other hostname with 403, so the check is switched off: an empty
|
|
93
|
+
# list of allowed origins disables it.
|
|
90
94
|
use FastMcp::Transports::RackTransport, mcp_server,
|
|
91
95
|
path_prefix: "/mcp",
|
|
92
|
-
localhost_only: false
|
|
96
|
+
localhost_only: false,
|
|
97
|
+
allowed_origins: []
|
|
93
98
|
end
|
|
94
99
|
|
|
95
100
|
helpers Archsight::GraphvisRenderer, Archsight::Helpers
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{$ as e,B as t,H as n,M as r,T as i,X as a,Y as o,j as s,k as c,t as l,x as u}from"./index-
|
|
1
|
+
import{$ as e,B as t,H as n,M as r,T as i,X as a,Y as o,j as s,k as c,t as l,x as u}from"./index-D0Q5GZRs.js";var d={class:`api-docs-page`},f={key:0,class:`pico-color-red-500`},p=l({__name:`ApiDocsPage`,setup(l){let p=u(),m=o(null),h=o(null);function g(e){return new Promise((t,n)=>{if(window.Redoc)return t();let r=document.createElement(`script`);r.src=e,r.onload=t,r.onerror=()=>n(Error(`Failed to load ReDoc`)),document.head.appendChild(r)})}return t(async()=>{try{await g(`https://cdn.redoc.ly/redoc/latest/bundles/redoc.standalone.js`),window.Redoc.init(`/api/v1/openapi.yaml`,{},m.value)}catch(e){h.value=e.message}}),(t,o)=>(n(),r(`div`,d,[c(`a`,{href:`#`,class:`back-link`,onClick:o[0]||=i(e=>a(p).back(),[`prevent`])},`← Back`),h.value?(n(),r(`div`,f,e(h.value),1)):s(``,!0),c(`div`,{ref_key:`container`,ref:m},null,512)]))}},[[`__scopeId`,`data-v-4823b89b`]]);export{p as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{A as e,H as t,K as n,M as r,Y as i,k as a,s as o}from"./index-
|
|
1
|
+
import{A as e,H as t,K as n,M as r,Y as i,k as a,s as o}from"./index-D0Q5GZRs.js";import{t as s}from"./WikiPage-DrvCHwJ7.js";var c={key:1},l={__name:`DocPage`,props:{filename:String},setup(l){let u=l,d=i(null);function f(e,t){let n=new DOMParser().parseFromString(e,`text/html`).body,r=n.querySelector(`:scope > article`)||n,i=r.querySelector(`h1`),a=i?.textContent.trim()||t.split(`/`).pop().replace(/[-_]/g,` `);i?.remove();let o=[...r.querySelectorAll(`h2[id], h3[id], h4[id]`)].map(e=>({level:Number(e.tagName[1]),id:e.id,text:e.textContent.trim()})),s=[{title:`Documentation`}];return t.startsWith(`resources/`)&&s.push({title:`Resource types`}),{title:a,html:r.innerHTML,toc:o.length>=2?o:[],breadcrumb:s}}async function p(){let e=await o(u.filename);d.value=e?f(e,u.filename):{title:`Not found`,html:`<p>Documentation not found.</p>`,toc:[],breadcrumb:[{title:`Documentation`}]},document.title=`${d.value.title} - Archsight`}return n(()=>u.filename,p,{immediate:!0}),(n,i)=>d.value?(t(),e(s,{key:0,title:d.value.title,html:d.value.html,breadcrumb:d.value.breadcrumb,toc:d.value.toc},null,8,[`title`,`html`,`breadcrumb`,`toc`])):(t(),r(`article`,c,[...i[0]||=[a(`p`,null,`Loading...`,-1)]]))}};export{l as default};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{i as e,n as t,t as n}from"./useHighlight-D5Gf8DLl.js";import{$ as r,A as i,B as a,C as o,E as s,F as c,G as l,H as u,J as d,K as f,L as p,M as m,O as h,P as g,R as _,S as v,T as ee,U as y,V as b,X as x,Y as S,Z as C,_ as w,a as T,c as te,j as E,k as D,l as ne,o as re,q as ie,t as ae,v as oe,x as se,z as ce}from"./index-D7m61Ahx.js";var le=`archsight.diagramPreview.layout`,ue=[`bottom`,`right`,`full`,`hidden`],de=`(min-width: 1400px)`;function fe(){try{let e=localStorage.getItem(le);return ue.includes(e)?e:null}catch{return null}}var pe=S(fe()),me=S(typeof matchMedia==`function`&&matchMedia(de).matches);typeof matchMedia==`function`&&matchMedia(de).addEventListener(`change`,e=>{me.value=e.matches});var he=h(()=>pe.value||(me.value?`right`:`bottom`));function ge(e){if(ue.includes(e)){pe.value=e;try{localStorage.setItem(le,e)}catch{}}}function _e(){return{layout:he,setLayout:ge}}var ve={class:`preview-head`},ye={class:`preview-tools`},be={key:0,class:`preview-state`},xe={class:`preview-layout`,role:`group`,"aria-label":`Preview layout`},Se=[`aria-pressed`,`title`,`aria-label`,`onClick`],Ce={key:0,class:`preview-error`,role:`alert`},we=[`innerHTML`],Te={key:2,class:`preview-empty`},Ee=300,De=ae({__name:`DiagramPreview`,props:{source:String},setup(e){let t=e,{layout:n,setLayout:i}=_e(),a=h(()=>n.value===`hidden`),o=[{value:`bottom`,icon:`iconoir-table-rows`,label:`Below the editor`},{value:`right`,icon:`iconoir-view-columns-2`,label:`Right of the editor`},{value:`full`,icon:`iconoir-expand`,label:`Preview only`},{value:`hidden`,icon:`iconoir-eye-closed`,label:`Hide preview`}],c=S(``),l=S(null),d=S(!1),p=null,_=null;function v(){clearTimeout(p),p=null,_?.abort(),_=null}async function ee(e){_=new AbortController;let t=_;d.value=!0;try{let n=await w(e,{signal:t.signal});if(t!==_)return;n.html&&(c.value=n.html),l.value=n.error}catch(e){if(e.name===`AbortError`||t!==_)return;l.value=e.message}finally{t===_&&(d.value=!1)}}f([()=>t.source,a],([e,t],[,n])=>{if(v(),t){d.value=!1;return}if(!e||!e.trim()){c.value=``,l.value=null,d.value=!1;return}d.value=!0,p=setTimeout(()=>ee(e),n?0:Ee)},{immediate:!0}),ce(v);function b(e){e.target.closest(`a`)&&e.preventDefault()}return(e,t)=>(u(),m(`div`,{class:C([`diagram-preview`,`layout-${x(n)}`])},[D(`div`,ve,[D(`span`,null,[t[0]||=D(`i`,{class:`iconoir-eye`},null,-1),t[1]||=g(` Preview`,-1),a.value?(u(),m(s,{key:0},[g(` hidden`)],64)):E(``,!0)]),D(`span`,ye,[d.value&&!a.value?(u(),m(`span`,be,`Rendering…`)):E(``,!0),D(`span`,xe,[(u(!0),m(s,null,y(o.filter(e=>!a.value||e.value!==`hidden`),e=>(u(),m(`button`,{key:e.value,type:`button`,class:C({active:x(n)===e.value}),"aria-pressed":x(n)===e.value,title:e.label,"aria-label":e.label,onClick:t=>x(i)(e.value)},[D(`i`,{class:C(e.icon)},null,2)],10,Se))),128))])])]),a.value?E(``,!0):(u(),m(s,{key:0},[l.value?(u(),m(`div`,Ce,[t[2]||=D(`i`,{class:`iconoir-warning-triangle`},null,-1),g(` `+r(l.value),1)])):E(``,!0),c.value?(u(),m(`div`,{key:1,class:C([`preview-body`,{stale:!!l.value}]),title:`Links are disabled in the preview`,onClick:b,innerHTML:c.value},null,10,we)):!l.value&&!d.value?(u(),m(`p`,Te,`Nothing to preview yet.`)):E(``,!0)],64))],2))}},[[`__scopeId`,`data-v-11568657`]]),Oe={class:`label-row`},ke=[`for`,`title`],Ae={key:0,class:`required`},je=[`id`,`aria-invalid`],Me=[`value`],Ne=[`id`,`aria-invalid`,`placeholder`],Pe={key:0,class:`future-hint`},Fe={class:`code-source`},Ie=[`id`,`aria-invalid`,`placeholder`],Le={class:`future-hint`},Re=[`id`,`step`,`aria-invalid`],ze=[`id`,`aria-invalid`],Be=[`id`,`aria-invalid`],Ve=[`id`,`aria-invalid`],He={key:7,class:`field-description`},Ue={key:8,class:`field-error`},We=ae({__name:`EditorField`,props:{field:Object,modelValue:[String,Number,null],error:[Array,null]},emits:[`update:modelValue`,`openMarkdown`],setup(e,{emit:t}){let n=e,a=t,c=h({get:()=>n.modelValue??``,set:e=>a(`update:modelValue`,e)}),l=h(()=>[`textarea`,`markdown`,`code`].includes(n.field.input_type)),f=h(()=>n.field.key===`page/content`),p=h(()=>n.field.code_language===`asd`),{layout:_}=_e(),ee={asd:`Archsight Diagram`},b=h(()=>{let e=n.field.code_language||``;return ee[e]||e.charAt(0).toUpperCase()+e.slice(1)}),S=h(()=>n.error&&n.error.length>0);return(t,n)=>(u(),m(`div`,{class:C([`field-group`,{"field-full-width":l.value}])},[D(`div`,Oe,[D(`label`,{for:e.field.key,title:e.field.description},[g(r(e.field.title)+` `,1),e.field.required?(u(),m(`span`,Ae,`*`)):E(``,!0)],8,ke),e.field.input_type===`markdown`?(u(),m(`button`,{key:0,type:`button`,class:`btn-edit-markdown`,title:`Open rich text editor`,onClick:n[0]||=n=>t.$emit(`openMarkdown`,e.field.key)},[...n[8]||=[D(`i`,{class:`iconoir-edit-pencil`},null,-1),g(` Edit `,-1)]])):E(``,!0)]),e.field.input_type===`select`?d((u(),m(`select`,{key:0,id:e.field.key,"onUpdate:modelValue":n[1]||=e=>c.value=e,"aria-invalid":S.value?`true`:void 0},[n[9]||=D(`option`,{value:``},`Select...`,-1),(u(!0),m(s,null,y(e.field.options,e=>(u(),m(`option`,{key:e,value:e},r(e),9,Me))),128))],8,je)),[[v,c.value]]):e.field.input_type===`textarea`||e.field.input_type===`markdown`?(u(),m(`div`,{key:1,class:C([`markdown-field`,{"page-body":f.value}])},[d(D(`textarea`,{id:e.field.key,"onUpdate:modelValue":n[2]||=e=>c.value=e,"aria-invalid":S.value?`true`:void 0,placeholder:e.field.input_type===`markdown`?`Enter markdown content...`:`One entry per line...`},null,8,Ne),[[o,c.value]]),e.field.input_type===`markdown`?(u(),m(`small`,Pe,[...n[10]||=[D(`i`,{class:`iconoir-info-circle`},null,-1),g(` Markdown, `,-1),D(`code`,null,`[[links]]`,-1),g(` and `,-1),D(`code`,null,"```asd",-1),g(` diagrams. Use Edit for the rich text editor `,-1)]])):E(``,!0)],2)):e.field.input_type===`code`?(u(),m(`div`,{key:2,class:C([`code-field`,p.value&&[`with-preview`,`layout-${x(_)}`]])},[D(`div`,Fe,[d(D(`textarea`,{id:e.field.key,"onUpdate:modelValue":n[3]||=e=>c.value=e,"aria-invalid":S.value?`true`:void 0,placeholder:`Enter ${e.field.code_language||``} code...`,spellcheck:`false`},null,8,Ie),[[o,c.value]]),D(`small`,Le,[n[11]||=D(`i`,{class:`iconoir-code`},null,-1),g(` `+r(b.value)+` code `,1)])]),p.value?(u(),i(De,{key:0,class:`field-diagram-preview`,source:String(c.value)},null,8,[`source`])):E(``,!0)],2)):e.field.input_type===`number`?d((u(),m(`input`,{key:3,id:e.field.key,type:`number`,"onUpdate:modelValue":n[4]||=e=>c.value=e,step:e.field.step,"aria-invalid":S.value?`true`:void 0},null,8,Re)),[[o,c.value]]):e.field.input_type===`url`?d((u(),m(`input`,{key:4,id:e.field.key,type:`url`,"onUpdate:modelValue":n[5]||=e=>c.value=e,placeholder:`https://...`,"aria-invalid":S.value?`true`:void 0},null,8,ze)),[[o,c.value]]):e.field.input_type===`list`?d((u(),m(`input`,{key:5,id:e.field.key,type:`text`,"onUpdate:modelValue":n[6]||=e=>c.value=e,placeholder:`Comma-separated values`,"aria-invalid":S.value?`true`:void 0},null,8,Be)),[[o,c.value]]):d((u(),m(`input`,{key:6,id:e.field.key,type:`text`,"onUpdate:modelValue":n[7]||=e=>c.value=e,"aria-invalid":S.value?`true`:void 0},null,8,Ve)),[[o,c.value]]),e.field.description&&![`textarea`,`markdown`,`code`].includes(e.field.input_type)?(u(),m(`small`,He,r(e.field.description),1)):E(``,!0),S.value?(u(),m(`div`,Ue,r(e.error.join(`, `)),1)):E(``,!0)],2))}},[[`__scopeId`,`data-v-fe1221de`]]),Ge={class:`relations-editor`},Ke={key:0,class:`no-relations`},qe={id:`relations-list`},Je={class:`relation-text`},Ye=[`onClick`],Xe={class:`add-relation-row`},Ze=[`value`],Qe=[`value`],$e=ae({__name:`EditorRelations`,props:{relations:Array,relationOptions:Array,instancesByKind:Object},emits:[`update:relations`],setup(e,{emit:t}){let n=e,i=t,a=S(``),o=S(``),c=h(()=>[...n.relations].sort((e,t)=>(e.verb+e.kind+e.name).localeCompare(t.verb+t.kind+t.name))),l=h(()=>a.value?n.relationOptions.find(e=>e.combo===a.value)?.target_kind:null),p=h(()=>l.value&&n.instancesByKind[l.value]||[]);f(a,()=>{o.value=``});function _(){if(!a.value||!o.value)return;let e=n.relationOptions.find(e=>e.combo===a.value);if(!e||n.relations.some(t=>t.verb===e.verb&&t.kind===e.target_kind&&t.name===o.value))return;let t=[...n.relations,{verb:e.verb,kind:e.target_kind,name:o.value}];i(`update:relations`,t),a.value=``,o.value=``}function ee(e){let t=n.relations.filter((t,n)=>n!==e);i(`update:relations`,t)}return(t,n)=>(u(),m(`div`,Ge,[!e.relationOptions||e.relationOptions.length===0?(u(),m(`p`,Ke,` This resource type has no defined relations. `)):(u(),m(s,{key:1},[D(`div`,qe,[(u(!0),m(s,null,y(c.value,(e,t)=>(u(),m(`div`,{key:`${e.verb}:${e.kind}:${e.name}`,class:`relation-item`},[D(`span`,Je,[D(`strong`,null,r(e.verb),1),g(` → `+r(e.kind)+`: `,1),D(`em`,null,r(e.name),1)]),D(`button`,{class:`btn-remove`,type:`button`,title:`Remove`,onClick:e=>ee(t)},[...n[2]||=[D(`i`,{class:`iconoir-xmark`},null,-1)]],8,Ye)]))),128))]),D(`div`,Xe,[d(D(`select`,{"onUpdate:modelValue":n[0]||=e=>a.value=e},[n[3]||=D(`option`,{value:``},`Select relation...`,-1),(u(!0),m(s,null,y(e.relationOptions,e=>(u(),m(`option`,{key:e.combo,value:e.combo},r(e.verb)+` → `+r(e.target_kind),9,Ze))),128))],512),[[v,a.value]]),d(D(`select`,{"onUpdate:modelValue":n[1]||=e=>o.value=e},[n[4]||=D(`option`,{value:``},`Select instance...`,-1),(u(!0),m(s,null,y(p.value,e=>(u(),m(`option`,{key:e,value:e},r(e),9,Qe))),128))],512),[[v,o.value]]),D(`button`,{class:`secondary btn-add`,type:`button`,onClick:_},[...n[5]||=[D(`i`,{class:`iconoir-plus`},null,-1),g(` Add `,-1)]])])],64))]))}},[[`__scopeId`,`data-v-a987a6fe`]]),et={class:`yaml-output-container`},tt={key:0,class:`conflict-error`},nt={class:`yaml-success`},rt={id:`yaml-content`},it={key:0,class:`yaml-file-info`},at={key:1,class:`yaml-instructions`},ot={class:`yaml-actions`},st=[`disabled`],ct=ae({__name:`EditorYamlOutput`,props:{yaml:String,format:{type:String,default:`yaml`},kind:String,name:String,contentHash:String,pathRef:String,inlineEditEnabled:Boolean},emits:[`editAgain`],setup(e,{emit:t}){let i=e,o=S(null),c=S(`idle`),l=S(`idle`),d=S(null),p=h(()=>i.format===`markdown`),v=h(()=>p.value?`Markdown`:`YAML`),ee=h(()=>p.value?`.md`:`.yaml`);a(()=>{o.value&&n(o.value)}),f(()=>i.yaml,async()=>{await _(),o.value&&n(o.value)});async function y(){try{await navigator.clipboard.writeText(i.yaml),c.value=`copied`,setTimeout(()=>{c.value=`idle`},2e3)}catch{let e=document.createElement(`textarea`);e.value=i.yaml,e.style.position=`fixed`,e.style.opacity=`0`,document.body.appendChild(e),e.select(),document.execCommand(`copy`),document.body.removeChild(e),c.value=`copied`,setTimeout(()=>{c.value=`idle`},2e3)}}async function b(){l.value=`saving`,d.value=null;try{let e=await oe(i.kind,i.name,i.yaml,i.contentHash);e.success?(l.value=`saved`,setTimeout(()=>{l.value=`idle`},2e3)):e.conflict?(d.value=e.error,l.value=`idle`):(alert(`Save failed: `+e.error),l.value=`idle`)}catch(e){alert(`Save failed: `+e.message),l.value=`idle`}}return(t,n)=>(u(),m(`div`,et,[d.value?(u(),m(`div`,tt,[n[1]||=D(`i`,{class:`iconoir-warning-triangle`},null,-1),D(`span`,null,r(d.value),1)])):E(``,!0),D(`p`,nt,[n[2]||=D(`i`,{class:`iconoir-check-circle`},null,-1),g(` Generated `+r(v.value),1)]),D(`div`,{ref_key:`codeEl`,ref:o},[D(`pre`,rt,[D(`code`,{class:C(`language-${e.format}`)},r(e.yaml),3)])],512),D(`footer`,null,[e.pathRef?(u(),m(`p`,it,[n[3]||=D(`i`,{class:`iconoir-folder`},null,-1),D(`span`,null,`Source: `+r(e.pathRef),1)])):(u(),m(`p`,at,[n[10]||=D(`i`,{class:`iconoir-info-circle`},null,-1),D(`span`,null,[g(` Copy this `+r(v.value)+` and save it to a `,1),D(`code`,null,r(ee.value),1),n[6]||=g(` file in your resources directory`,-1),p.value?(u(),m(s,{key:0},[n[4]||=g(` (named `,-1),D(`code`,null,r(e.name)+`.md`,1),n[5]||=g(`)`,-1)],64)):E(``,!0),n[7]||=g(`, `,-1),n[8]||=D(`br`,null,null,-1),n[9]||=g(`then reload the application. `,-1)])])),D(`div`,ot,[e.pathRef&&e.inlineEditEnabled?(u(),m(`button`,{key:0,type:`button`,onClick:b,disabled:l.value===`saving`,class:C({saved:l.value===`saved`})},[D(`i`,{class:C(l.value===`saving`?`iconoir-refresh`:l.value===`saved`?`iconoir-check`:`iconoir-check-circle`)},null,2),g(` `+r(l.value===`saving`?`Saving...`:l.value===`saved`?`Saved!`:`Save to File`),1)],10,st)):E(``,!0),D(`button`,{type:`button`,onClick:y,class:C({copied:c.value===`copied`})},[D(`i`,{class:C(c.value===`copied`?`iconoir-check`:`iconoir-copy`)},null,2),g(` `+r(c.value===`copied`?`Copied!`:`Copy to Clipboard`),1)],2),D(`button`,{class:`secondary`,type:`button`,onClick:n[0]||=e=>t.$emit(`editAgain`)},[...n[11]||=[D(`i`,{class:`iconoir-edit-pencil`},null,-1),g(` Edit Again `,-1)]])])])]))}},[[`__scopeId`,`data-v-b5ea938f`]]);function O(e,...t){let n=new URL(`https://lexical.dev/docs/error`),r=new URLSearchParams;r.append(`code`,e);for(let e of t)r.append(`v`,e);throw n.search=r.toString(),Error(`Minified Lexical error #${e}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}function lt(e,...t){let n=new URL(`https://lexical.dev/docs/error`),r=new URLSearchParams;r.append(`code`,e);for(let e of t)r.append(`v`,e);n.search=r.toString(),console.warn(`Minified Lexical warning #${e}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}var ut=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0,dt=ut&&`documentMode`in document?document.documentMode:null,ft=ut&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),pt=ut&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent),mt=!(!ut||!(`InputEvent`in window)||dt)&&`getTargetRanges`in new window.InputEvent(`input`),ht=ut&&/Version\/[\d.]+.*Safari/.test(navigator.userAgent),gt=ut&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,_t=ut&&/Android/.test(navigator.userAgent),vt=ut&&/^(?=.*Chrome).*/i.test(navigator.userAgent),yt=ut&&_t&&vt,bt=ut&&/AppleWebKit\/[\d.]+/.test(navigator.userAgent)&&ft&&!vt,xt=0,St=1,Ct=2,wt=1,Tt=2,Et=3,Dt=4,Ot=5,kt=6,At=ht||gt||bt?`\xA0`:``,jt=`
|
|
1
|
+
import{i as e,n as t,t as n}from"./useHighlight-D5Gf8DLl.js";import{$ as r,A as i,B as a,C as o,E as s,F as c,G as l,H as u,J as d,K as f,L as p,M as m,O as h,P as g,R as _,S as v,T as ee,U as y,V as b,X as x,Y as S,Z as C,_ as w,a as T,c as te,j as E,k as D,l as ne,o as re,q as ie,t as ae,v as oe,x as se,z as ce}from"./index-D0Q5GZRs.js";var le=`archsight.diagramPreview.layout`,ue=[`bottom`,`right`,`full`,`hidden`],de=`(min-width: 1400px)`;function fe(){try{let e=localStorage.getItem(le);return ue.includes(e)?e:null}catch{return null}}var pe=S(fe()),me=S(typeof matchMedia==`function`&&matchMedia(de).matches);typeof matchMedia==`function`&&matchMedia(de).addEventListener(`change`,e=>{me.value=e.matches});var he=h(()=>pe.value||(me.value?`right`:`bottom`));function ge(e){if(ue.includes(e)){pe.value=e;try{localStorage.setItem(le,e)}catch{}}}function _e(){return{layout:he,setLayout:ge}}var ve={class:`preview-head`},ye={class:`preview-tools`},be={key:0,class:`preview-state`},xe={class:`preview-layout`,role:`group`,"aria-label":`Preview layout`},Se=[`aria-pressed`,`title`,`aria-label`,`onClick`],Ce={key:0,class:`preview-error`,role:`alert`},we=[`innerHTML`],Te={key:2,class:`preview-empty`},Ee=300,De=ae({__name:`DiagramPreview`,props:{source:String},setup(e){let t=e,{layout:n,setLayout:i}=_e(),a=h(()=>n.value===`hidden`),o=[{value:`bottom`,icon:`iconoir-table-rows`,label:`Below the editor`},{value:`right`,icon:`iconoir-view-columns-2`,label:`Right of the editor`},{value:`full`,icon:`iconoir-expand`,label:`Preview only`},{value:`hidden`,icon:`iconoir-eye-closed`,label:`Hide preview`}],c=S(``),l=S(null),d=S(!1),p=null,_=null;function v(){clearTimeout(p),p=null,_?.abort(),_=null}async function ee(e){_=new AbortController;let t=_;d.value=!0;try{let n=await w(e,{signal:t.signal});if(t!==_)return;n.html&&(c.value=n.html),l.value=n.error}catch(e){if(e.name===`AbortError`||t!==_)return;l.value=e.message}finally{t===_&&(d.value=!1)}}f([()=>t.source,a],([e,t],[,n])=>{if(v(),t){d.value=!1;return}if(!e||!e.trim()){c.value=``,l.value=null,d.value=!1;return}d.value=!0,p=setTimeout(()=>ee(e),n?0:Ee)},{immediate:!0}),ce(v);function b(e){e.target.closest(`a`)&&e.preventDefault()}return(e,t)=>(u(),m(`div`,{class:C([`diagram-preview`,`layout-${x(n)}`])},[D(`div`,ve,[D(`span`,null,[t[0]||=D(`i`,{class:`iconoir-eye`},null,-1),t[1]||=g(` Preview`,-1),a.value?(u(),m(s,{key:0},[g(` hidden`)],64)):E(``,!0)]),D(`span`,ye,[d.value&&!a.value?(u(),m(`span`,be,`Rendering…`)):E(``,!0),D(`span`,xe,[(u(!0),m(s,null,y(o.filter(e=>!a.value||e.value!==`hidden`),e=>(u(),m(`button`,{key:e.value,type:`button`,class:C({active:x(n)===e.value}),"aria-pressed":x(n)===e.value,title:e.label,"aria-label":e.label,onClick:t=>x(i)(e.value)},[D(`i`,{class:C(e.icon)},null,2)],10,Se))),128))])])]),a.value?E(``,!0):(u(),m(s,{key:0},[l.value?(u(),m(`div`,Ce,[t[2]||=D(`i`,{class:`iconoir-warning-triangle`},null,-1),g(` `+r(l.value),1)])):E(``,!0),c.value?(u(),m(`div`,{key:1,class:C([`preview-body`,{stale:!!l.value}]),title:`Links are disabled in the preview`,onClick:b,innerHTML:c.value},null,10,we)):!l.value&&!d.value?(u(),m(`p`,Te,`Nothing to preview yet.`)):E(``,!0)],64))],2))}},[[`__scopeId`,`data-v-11568657`]]),Oe={class:`label-row`},ke=[`for`,`title`],Ae={key:0,class:`required`},je=[`id`,`aria-invalid`],Me=[`value`],Ne=[`id`,`aria-invalid`,`placeholder`],Pe={key:0,class:`future-hint`},Fe={class:`code-source`},Ie=[`id`,`aria-invalid`,`placeholder`],Le={class:`future-hint`},Re=[`id`,`step`,`aria-invalid`],ze=[`id`,`aria-invalid`],Be=[`id`,`aria-invalid`],Ve=[`id`,`aria-invalid`],He={key:7,class:`field-description`},Ue={key:8,class:`field-error`},We=ae({__name:`EditorField`,props:{field:Object,modelValue:[String,Number,null],error:[Array,null]},emits:[`update:modelValue`,`openMarkdown`],setup(e,{emit:t}){let n=e,a=t,c=h({get:()=>n.modelValue??``,set:e=>a(`update:modelValue`,e)}),l=h(()=>[`textarea`,`markdown`,`code`].includes(n.field.input_type)),f=h(()=>n.field.key===`page/content`),p=h(()=>n.field.code_language===`asd`),{layout:_}=_e(),ee={asd:`Archsight Diagram`},b=h(()=>{let e=n.field.code_language||``;return ee[e]||e.charAt(0).toUpperCase()+e.slice(1)}),S=h(()=>n.error&&n.error.length>0);return(t,n)=>(u(),m(`div`,{class:C([`field-group`,{"field-full-width":l.value}])},[D(`div`,Oe,[D(`label`,{for:e.field.key,title:e.field.description},[g(r(e.field.title)+` `,1),e.field.required?(u(),m(`span`,Ae,`*`)):E(``,!0)],8,ke),e.field.input_type===`markdown`?(u(),m(`button`,{key:0,type:`button`,class:`btn-edit-markdown`,title:`Open rich text editor`,onClick:n[0]||=n=>t.$emit(`openMarkdown`,e.field.key)},[...n[8]||=[D(`i`,{class:`iconoir-edit-pencil`},null,-1),g(` Edit `,-1)]])):E(``,!0)]),e.field.input_type===`select`?d((u(),m(`select`,{key:0,id:e.field.key,"onUpdate:modelValue":n[1]||=e=>c.value=e,"aria-invalid":S.value?`true`:void 0},[n[9]||=D(`option`,{value:``},`Select...`,-1),(u(!0),m(s,null,y(e.field.options,e=>(u(),m(`option`,{key:e,value:e},r(e),9,Me))),128))],8,je)),[[v,c.value]]):e.field.input_type===`textarea`||e.field.input_type===`markdown`?(u(),m(`div`,{key:1,class:C([`markdown-field`,{"page-body":f.value}])},[d(D(`textarea`,{id:e.field.key,"onUpdate:modelValue":n[2]||=e=>c.value=e,"aria-invalid":S.value?`true`:void 0,placeholder:e.field.input_type===`markdown`?`Enter markdown content...`:`One entry per line...`},null,8,Ne),[[o,c.value]]),e.field.input_type===`markdown`?(u(),m(`small`,Pe,[...n[10]||=[D(`i`,{class:`iconoir-info-circle`},null,-1),g(` Markdown, `,-1),D(`code`,null,`[[links]]`,-1),g(` and `,-1),D(`code`,null,"```asd",-1),g(` diagrams. Use Edit for the rich text editor `,-1)]])):E(``,!0)],2)):e.field.input_type===`code`?(u(),m(`div`,{key:2,class:C([`code-field`,p.value&&[`with-preview`,`layout-${x(_)}`]])},[D(`div`,Fe,[d(D(`textarea`,{id:e.field.key,"onUpdate:modelValue":n[3]||=e=>c.value=e,"aria-invalid":S.value?`true`:void 0,placeholder:`Enter ${e.field.code_language||``} code...`,spellcheck:`false`},null,8,Ie),[[o,c.value]]),D(`small`,Le,[n[11]||=D(`i`,{class:`iconoir-code`},null,-1),g(` `+r(b.value)+` code `,1)])]),p.value?(u(),i(De,{key:0,class:`field-diagram-preview`,source:String(c.value)},null,8,[`source`])):E(``,!0)],2)):e.field.input_type===`number`?d((u(),m(`input`,{key:3,id:e.field.key,type:`number`,"onUpdate:modelValue":n[4]||=e=>c.value=e,step:e.field.step,"aria-invalid":S.value?`true`:void 0},null,8,Re)),[[o,c.value]]):e.field.input_type===`url`?d((u(),m(`input`,{key:4,id:e.field.key,type:`url`,"onUpdate:modelValue":n[5]||=e=>c.value=e,placeholder:`https://...`,"aria-invalid":S.value?`true`:void 0},null,8,ze)),[[o,c.value]]):e.field.input_type===`list`?d((u(),m(`input`,{key:5,id:e.field.key,type:`text`,"onUpdate:modelValue":n[6]||=e=>c.value=e,placeholder:`Comma-separated values`,"aria-invalid":S.value?`true`:void 0},null,8,Be)),[[o,c.value]]):d((u(),m(`input`,{key:6,id:e.field.key,type:`text`,"onUpdate:modelValue":n[7]||=e=>c.value=e,"aria-invalid":S.value?`true`:void 0},null,8,Ve)),[[o,c.value]]),e.field.description&&![`textarea`,`markdown`,`code`].includes(e.field.input_type)?(u(),m(`small`,He,r(e.field.description),1)):E(``,!0),S.value?(u(),m(`div`,Ue,r(e.error.join(`, `)),1)):E(``,!0)],2))}},[[`__scopeId`,`data-v-fe1221de`]]),Ge={class:`relations-editor`},Ke={key:0,class:`no-relations`},qe={id:`relations-list`},Je={class:`relation-text`},Ye=[`onClick`],Xe={class:`add-relation-row`},Ze=[`value`],Qe=[`value`],$e=ae({__name:`EditorRelations`,props:{relations:Array,relationOptions:Array,instancesByKind:Object},emits:[`update:relations`],setup(e,{emit:t}){let n=e,i=t,a=S(``),o=S(``),c=h(()=>[...n.relations].sort((e,t)=>(e.verb+e.kind+e.name).localeCompare(t.verb+t.kind+t.name))),l=h(()=>a.value?n.relationOptions.find(e=>e.combo===a.value)?.target_kind:null),p=h(()=>l.value&&n.instancesByKind[l.value]||[]);f(a,()=>{o.value=``});function _(){if(!a.value||!o.value)return;let e=n.relationOptions.find(e=>e.combo===a.value);if(!e||n.relations.some(t=>t.verb===e.verb&&t.kind===e.target_kind&&t.name===o.value))return;let t=[...n.relations,{verb:e.verb,kind:e.target_kind,name:o.value}];i(`update:relations`,t),a.value=``,o.value=``}function ee(e){let t=n.relations.filter((t,n)=>n!==e);i(`update:relations`,t)}return(t,n)=>(u(),m(`div`,Ge,[!e.relationOptions||e.relationOptions.length===0?(u(),m(`p`,Ke,` This resource type has no defined relations. `)):(u(),m(s,{key:1},[D(`div`,qe,[(u(!0),m(s,null,y(c.value,(e,t)=>(u(),m(`div`,{key:`${e.verb}:${e.kind}:${e.name}`,class:`relation-item`},[D(`span`,Je,[D(`strong`,null,r(e.verb),1),g(` → `+r(e.kind)+`: `,1),D(`em`,null,r(e.name),1)]),D(`button`,{class:`btn-remove`,type:`button`,title:`Remove`,onClick:e=>ee(t)},[...n[2]||=[D(`i`,{class:`iconoir-xmark`},null,-1)]],8,Ye)]))),128))]),D(`div`,Xe,[d(D(`select`,{"onUpdate:modelValue":n[0]||=e=>a.value=e},[n[3]||=D(`option`,{value:``},`Select relation...`,-1),(u(!0),m(s,null,y(e.relationOptions,e=>(u(),m(`option`,{key:e.combo,value:e.combo},r(e.verb)+` → `+r(e.target_kind),9,Ze))),128))],512),[[v,a.value]]),d(D(`select`,{"onUpdate:modelValue":n[1]||=e=>o.value=e},[n[4]||=D(`option`,{value:``},`Select instance...`,-1),(u(!0),m(s,null,y(p.value,e=>(u(),m(`option`,{key:e,value:e},r(e),9,Qe))),128))],512),[[v,o.value]]),D(`button`,{class:`secondary btn-add`,type:`button`,onClick:_},[...n[5]||=[D(`i`,{class:`iconoir-plus`},null,-1),g(` Add `,-1)]])])],64))]))}},[[`__scopeId`,`data-v-a987a6fe`]]),et={class:`yaml-output-container`},tt={key:0,class:`conflict-error`},nt={class:`yaml-success`},rt={id:`yaml-content`},it={key:0,class:`yaml-file-info`},at={key:1,class:`yaml-instructions`},ot={class:`yaml-actions`},st=[`disabled`],ct=ae({__name:`EditorYamlOutput`,props:{yaml:String,format:{type:String,default:`yaml`},kind:String,name:String,contentHash:String,pathRef:String,inlineEditEnabled:Boolean},emits:[`editAgain`],setup(e,{emit:t}){let i=e,o=S(null),c=S(`idle`),l=S(`idle`),d=S(null),p=h(()=>i.format===`markdown`),v=h(()=>p.value?`Markdown`:`YAML`),ee=h(()=>p.value?`.md`:`.yaml`);a(()=>{o.value&&n(o.value)}),f(()=>i.yaml,async()=>{await _(),o.value&&n(o.value)});async function y(){try{await navigator.clipboard.writeText(i.yaml),c.value=`copied`,setTimeout(()=>{c.value=`idle`},2e3)}catch{let e=document.createElement(`textarea`);e.value=i.yaml,e.style.position=`fixed`,e.style.opacity=`0`,document.body.appendChild(e),e.select(),document.execCommand(`copy`),document.body.removeChild(e),c.value=`copied`,setTimeout(()=>{c.value=`idle`},2e3)}}async function b(){l.value=`saving`,d.value=null;try{let e=await oe(i.kind,i.name,i.yaml,i.contentHash);e.success?(l.value=`saved`,setTimeout(()=>{l.value=`idle`},2e3)):e.conflict?(d.value=e.error,l.value=`idle`):(alert(`Save failed: `+e.error),l.value=`idle`)}catch(e){alert(`Save failed: `+e.message),l.value=`idle`}}return(t,n)=>(u(),m(`div`,et,[d.value?(u(),m(`div`,tt,[n[1]||=D(`i`,{class:`iconoir-warning-triangle`},null,-1),D(`span`,null,r(d.value),1)])):E(``,!0),D(`p`,nt,[n[2]||=D(`i`,{class:`iconoir-check-circle`},null,-1),g(` Generated `+r(v.value),1)]),D(`div`,{ref_key:`codeEl`,ref:o},[D(`pre`,rt,[D(`code`,{class:C(`language-${e.format}`)},r(e.yaml),3)])],512),D(`footer`,null,[e.pathRef?(u(),m(`p`,it,[n[3]||=D(`i`,{class:`iconoir-folder`},null,-1),D(`span`,null,`Source: `+r(e.pathRef),1)])):(u(),m(`p`,at,[n[10]||=D(`i`,{class:`iconoir-info-circle`},null,-1),D(`span`,null,[g(` Copy this `+r(v.value)+` and save it to a `,1),D(`code`,null,r(ee.value),1),n[6]||=g(` file in your resources directory`,-1),p.value?(u(),m(s,{key:0},[n[4]||=g(` (named `,-1),D(`code`,null,r(e.name)+`.md`,1),n[5]||=g(`)`,-1)],64)):E(``,!0),n[7]||=g(`, `,-1),n[8]||=D(`br`,null,null,-1),n[9]||=g(`then reload the application. `,-1)])])),D(`div`,ot,[e.pathRef&&e.inlineEditEnabled?(u(),m(`button`,{key:0,type:`button`,onClick:b,disabled:l.value===`saving`,class:C({saved:l.value===`saved`})},[D(`i`,{class:C(l.value===`saving`?`iconoir-refresh`:l.value===`saved`?`iconoir-check`:`iconoir-check-circle`)},null,2),g(` `+r(l.value===`saving`?`Saving...`:l.value===`saved`?`Saved!`:`Save to File`),1)],10,st)):E(``,!0),D(`button`,{type:`button`,onClick:y,class:C({copied:c.value===`copied`})},[D(`i`,{class:C(c.value===`copied`?`iconoir-check`:`iconoir-copy`)},null,2),g(` `+r(c.value===`copied`?`Copied!`:`Copy to Clipboard`),1)],2),D(`button`,{class:`secondary`,type:`button`,onClick:n[0]||=e=>t.$emit(`editAgain`)},[...n[11]||=[D(`i`,{class:`iconoir-edit-pencil`},null,-1),g(` Edit Again `,-1)]])])])]))}},[[`__scopeId`,`data-v-b5ea938f`]]);function O(e,...t){let n=new URL(`https://lexical.dev/docs/error`),r=new URLSearchParams;r.append(`code`,e);for(let e of t)r.append(`v`,e);throw n.search=r.toString(),Error(`Minified Lexical error #${e}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}function lt(e,...t){let n=new URL(`https://lexical.dev/docs/error`),r=new URLSearchParams;r.append(`code`,e);for(let e of t)r.append(`v`,e);n.search=r.toString(),console.warn(`Minified Lexical warning #${e}; visit ${n.toString()} for the full message or use the non-minified dev environment for full errors and additional helpful warnings.`)}var ut=typeof window<`u`&&window.document!==void 0&&window.document.createElement!==void 0,dt=ut&&`documentMode`in document?document.documentMode:null,ft=ut&&/Mac|iPod|iPhone|iPad/.test(navigator.platform),pt=ut&&/^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent),mt=!(!ut||!(`InputEvent`in window)||dt)&&`getTargetRanges`in new window.InputEvent(`input`),ht=ut&&/Version\/[\d.]+.*Safari/.test(navigator.userAgent),gt=ut&&/iPad|iPhone|iPod/.test(navigator.userAgent)&&!window.MSStream,_t=ut&&/Android/.test(navigator.userAgent),vt=ut&&/^(?=.*Chrome).*/i.test(navigator.userAgent),yt=ut&&_t&&vt,bt=ut&&/AppleWebKit\/[\d.]+/.test(navigator.userAgent)&&ft&&!vt,xt=0,St=1,Ct=2,wt=1,Tt=2,Et=3,Dt=4,Ot=5,kt=6,At=ht||gt||bt?`\xA0`:``,jt=`
|
|
2
2
|
|
|
3
3
|
`,Mt=pt?`\xA0`:At,Nt=RegExp(`^[^A-Za-zÀ-ÖØ-öø-ʸ̀-ࠀ-Ⰰ-︀--]*[֑-߿יִ-﷽ﹰ-ﻼ]`),Pt=RegExp(`^[^֑-߿יִ-﷽ﹰ-ﻼ]*[A-Za-zÀ-ÖØ-öø-ʸ̀-ࠀ-Ⰰ-︀--]`),Ft={bold:1,capitalize:1024,code:16,highlight:128,italic:2,lowercase:256,strikethrough:4,subscript:32,superscript:64,underline:8,uppercase:512},It={directionless:1,unmergeable:2},Lt={center:2,end:6,justify:4,left:1,right:3,start:5},Rt={[Tt]:`center`,[kt]:`end`,[Dt]:`justify`,[wt]:`left`,[Et]:`right`,[Ot]:`start`},zt={normal:0,segmented:2,token:1},Bt={[xt]:`normal`,[Ct]:`segmented`,[St]:`token`},Vt=`$config`;function Ht(e,t,n,r,i,a){let o=e.getFirstChild();for(;o!==null;){let e=o.__key;o.__parent===t&&(B(o)&&Ht(o,e,n,r,i,a),n.has(e)||a.delete(e),i.push(e)),o=o.getNextSibling()}}var Ut=!1,Wt=0;function Gt(e){Wt=e.timeStamp}function Kt(e,t,n){let r=e.nodeName===`BR`,i=t.__lexicalLineBreak;return i&&(e===i||r&&e.previousSibling===i)||r&&Jo(e,n)!==void 0}function qt(e,t,n){let r=Fs(Ds(n)),i=null,a=null;r!==null&&r.anchorNode===e&&(i=r.anchorOffset,a=r.focusOffset);let o=e.nodeValue;o!==null&&os(t,o,i,a,!1)}function Jt(e,t,n){if(P(e)){let t=e.anchor.getNode();if(t.is(n)&&e.format!==t.getFormat())return!1}return Lo(t)&&n.isAttached()}function Yt(e,t,n,r){for(let i=e;i&&!Xs(i);i=xs(i)){let e=Jo(i,t);if(e!==void 0){let t=W(e,n);if(t)return V(t)||!J(i)?void 0:[i,t]}else if(i===r)return[r,Qo(n)]}}function Xt(e,t,n){Ut=!0;let r=performance.now()-Wt>100;try{no(e,()=>{let i=F()||function(e){return e.getEditorState().read(()=>{let e=F();return e===null?null:e.clone()})}(e),a=new Map,o=e.getRootElement(),s=e._editorState,c=e._blockCursorElement,l=!1,u=``;for(let n=0;n<t.length;n++){let d=t[n],f=d.type,p=d.target,m=Yt(p,e,s,o);if(!m)continue;let[h,g]=m;if(f===`characterData`)r&&N(g)&&Lo(p)&&Jt(i,p,g)&&qt(p,g,e);else if(f===`childList`){l=!0;let t=d.addedNodes;for(let n=0;n<t.length;n++){let r=t[n],i=qo(r),a=r.parentNode;if(a!=null&&r!==c&&i===null&&!Kt(r,a,e)){if(pt){let e=(J(r)?r.innerText:null)||r.nodeValue;e&&(u+=e)}a.removeChild(r)}}let n=d.removedNodes,r=n.length;if(r>0){let t=0;for(let i=0;i<r;i++){let r=n[i];(Kt(r,p,e)||c===r)&&(p.appendChild(r),t++)}r!==t&&a.set(h,g)}}}if(a.size>0)for(let[t,n]of a)n.reconcileObservedMutation(t,e);let d=n.takeRecords();if(d.length>0){for(let t=0;t<d.length;t++){let n=d[t],r=n.addedNodes,i=n.target;for(let t=0;t<r.length;t++){let n=r[t],a=n.parentNode;a==null||n.nodeName!==`BR`||Kt(n,i,e)||a.removeChild(n)}}n.takeRecords()}i!==null&&(l&&$o(i),pt&&ys(e)&&i.insertRawText(u))})}finally{Ut=!1}}function Zt(e){let t=e._observer;t!==null&&Xt(e,t.takeRecords(),t)}function Qt(e){(function(e){Wt===0&&Ds(e).addEventListener(`textInput`,Gt,!0)})(e),e._observer=new MutationObserver((t,n)=>{Xt(e,t,n)})}var $t=class{key;parse;unparse;isEqual;defaultValue;constructor(e,t){this.key=e,this.parse=t.parse.bind(t),this.unparse=(t.unparse||ln).bind(t),this.isEqual=(t.isEqual||Object.is).bind(t),this.defaultValue=this.parse(void 0)}};function en(e,t){return new $t(e,t)}function tn(e,t,n=`latest`){let r=(n===`latest`?e.getLatest():e).__state;return r?r.getValue(t):t.defaultValue}function nn(e,t,n){let r;if(R(),typeof n==`function`){let i=e.getLatest(),a=tn(i,t);if(r=n(a),t.isEqual(a,r))return i}else r=n;let i=e.getWritable();return on(i).updateFromKnown(t,r),i}function rn(e){let t=new Map,n=new Set;for(let r=typeof e==`function`?e:e.replace;r.prototype&&r.prototype.getType!==void 0;r=Object.getPrototypeOf(r)){let{ownNodeConfig:e}=Qs(r);if(e&&e.stateConfigs)for(let r of e.stateConfigs){let e;`stateConfig`in r?(e=r.stateConfig,r.flat&&n.add(e.key)):e=r,t.set(e.key,e)}}return{flatKeys:n,sharedConfigMap:t}}var an=class e{node;knownState;unknownState;sharedNodeState;size;constructor(e,t,n=void 0,r=new Map,i=void 0){this.node=e,this.sharedNodeState=t,this.unknownState=n,this.knownState=r;let{sharedConfigMap:a}=this.sharedNodeState,o=i===void 0?function(e,t,n){let r=n.size;if(t)for(let i in t){let t=e.get(i);t&&n.has(t)||r++}return r}(a,n,r):i;this.size=o}getValue(e){let t=this.knownState.get(e);if(t!==void 0)return t;this.sharedNodeState.sharedConfigMap.set(e.key,e);let n=e.defaultValue;if(this.unknownState&&e.key in this.unknownState){let t=this.unknownState[e.key];t!==void 0&&(n=e.parse(t)),this.updateFromKnown(e,n)}return n}getInternalState(){return[this.unknownState,this.knownState]}toJSON(){let e={...this.unknownState},t={};for(let[t,n]of this.knownState)t.isEqual(n,t.defaultValue)?delete e[t.key]:e[t.key]=t.unparse(n);for(let n of this.sharedNodeState.flatKeys)n in e&&(t[n]=e[n],delete e[n]);return cn(e)&&(t.$=e),t}getWritable(t){if(this.node===t)return this;let{sharedNodeState:n,unknownState:r}=this,i=new Map(this.knownState);return new e(t,n,function(e,t,n){let r;if(n)for(let[i,a]of Object.entries(n)){let n=e.get(i);n?t.has(n)||t.set(n,n.parse(a)):(r||={},r[i]=a)}return r}(n.sharedConfigMap,i,r),i,this.size)}updateFromKnown(e,t){let n=e.key;this.sharedNodeState.sharedConfigMap.set(n,e);let{knownState:r,unknownState:i}=this;r.has(e)||i&&n in i||(i&&(delete i[n],this.unknownState=cn(i)),this.size++),r.set(e,t)}updateFromUnknown(e,t){let n=this.sharedNodeState.sharedConfigMap.get(e);n?this.updateFromKnown(n,n.parse(t)):(this.unknownState=this.unknownState||{},e in this.unknownState||this.size++,this.unknownState[e]=t)}updateFromJSON(e){let{knownState:t}=this;for(let e of t.keys())t.set(e,e.defaultValue);if(this.size=t.size,this.unknownState=void 0,e)for(let[t,n]of Object.entries(e))this.updateFromUnknown(t,n)}};function on(e){let t=e.getWritable(),n=t.__state?t.__state.getWritable(t):new an(t,sn(t));return t.__state=n,n}function sn(e){return e.__state?e.__state.sharedNodeState:To(Us(),e.getType()).sharedNodeState}function cn(e){if(e)for(let t in e)return e}function ln(e){return e}function un(e,t,n){for(let[r,i]of t.knownState){if(e.has(r.key))continue;e.add(r.key);let t=n?n.getValue(r):r.defaultValue;if(t!==i&&!r.isEqual(t,i))return!0}return!1}function dn(e,t,n){let{unknownState:r}=t,i=n?n.unknownState:void 0;if(r){for(let[t,n]of Object.entries(r))if(!e.has(t)&&(e.add(t),n!==(i?i[t]:void 0)))return!0}return!1}function fn(e,t){let n=e.__state;return n&&n.node===e?n.getWritable(t):n}function pn(e,t){let n=e.__mode,r=e.__format,i=e.__style,a=t.__mode,o=t.__format,s=t.__style,c=e.__state,l=t.__state;return(n===null||n===a)&&(r===null||r===o)&&(i===null||i===s)&&(e.__state===null||c===l||function(e,t){if(e===t)return!0;if(e&&t&&e.size!==t.size)return!1;let n=new Set;return!(e&&un(n,e,t)||t&&un(n,t,e)||e&&dn(n,e,t)||t&&dn(n,t,e))}(c,l))}function mn(e,t){let n=e.mergeWithSibling(t),r=z()._normalizedNodes;return r.add(e.__key),r.add(t.__key),n}function hn(e){let t,n,r=e;if(r.__text!==``||!r.isSimpleText()||r.isUnmergeable()){for(;(t=r.getPreviousSibling())!==null&&N(t)&&t.isSimpleText()&&!t.isUnmergeable();){if(t.__text!==``){if(pn(t,r)){r=mn(t,r);break}break}t.remove()}for(;(n=r.getNextSibling())!==null&&N(n)&&n.isSimpleText()&&!n.isUnmergeable();){if(n.__text!==``){if(pn(r,n)){r=mn(r,n);break}break}n.remove()}}else r.remove()}function gn(e){return _n(e.anchor),_n(e.focus),e}function _n(e){for(;e.type===`element`;){let t=e.getNode(),n=e.offset,r,i;if(n===t.getChildrenSize()?(r=t.getChildAtIndex(n-1),i=!0):(r=t.getChildAtIndex(n),i=!1),N(r)){e.set(r.__key,i?r.getTextContentSize():0,`text`,!0);break}if(!B(r))break;e.set(r.__key,i?r.getChildrenSize():0,`element`,!0)}}var vn,yn,bn,xn,Sn,Cn,wn,Tn,En,Dn,k=``,On=null,kn=null,An=!1,jn=!1;function Mn(e,t){let n=wn.get(e);if(t!==null){let n=Xn(e);n.parentNode===t&&t.removeChild(n)}if(Tn.has(e)||yn._keyToDOMMap.delete(e),B(n)){let e=Wn(n,wn);Nn(e,0,e.length-1,null)}n!==void 0&&gs(Dn,bn,xn,n,`destroyed`)}function Nn(e,t,n,r){for(let i=t;i<=n;++i){let t=e[i];t!==void 0&&Mn(t,r)}}function Pn(e,t){e.setProperty(`text-align`,t)}var Fn=`40px`;function In(e,t){let n=vn.theme.indent;if(typeof n==`string`){let r=e.classList.contains(n);t>0&&!r?e.classList.add(n):t<1&&r&&e.classList.remove(n)}if(t===0)return void e.style.setProperty(`padding-inline-start`,``);let r=getComputedStyle(yn._rootElement||e).getPropertyValue(`--lexical-indent-base-value`)||Fn;e.style.setProperty(`padding-inline-start`,`calc(${t} * ${r})`)}function Ln(e,t){let n=e.style;t===0?Pn(n,``):t===1?Pn(n,`left`):t===2?Pn(n,`center`):t===3?Pn(n,`right`):t===4?Pn(n,`justify`):t===5?Pn(n,`start`):t===6&&Pn(n,`end`)}function Rn(e,t){let n=function(e){let t=e.__dir;if(t!==null)return t;if(H(e))return null;let n=e.getParentOrThrow();return H(n)&&n.__dir===null?`auto`:null}(t);n===null?e.removeAttribute(`dir`):e.dir=n}function zn(e,t){let n=Tn.get(e);n===void 0&&O(60);let r=n.createDOM(vn,yn);if(function(e,t,n){let r=n._keyToDOMMap;(function(e,t,n){let r=`__lexicalKey_${t._key}`;e[r]=n})(t,n,e),r.set(e,t)}(e,r,yn),N(n)?r.setAttribute(`data-lexical-text`,`true`):V(n)&&r.setAttribute(`data-lexical-decorator`,`true`),B(n)){let e=n.__indent,t=n.__size;if(Rn(r,n),e!==0&&In(r,e),t!==0){let e=t-1;Bn(Wn(n,Tn),n,0,e,n.getDOMSlot(r))}let i=n.__format;i!==0&&Ln(r,i),n.isInline()||Hn(null,n,r)}else{let t=n.getTextContent();if(V(n)){let t=n.decorate(yn,vn);t!==null&&Kn(e,t),r.contentEditable=`false`}k+=t}return t!==null&&t.insertChild(r),gs(Dn,bn,xn,n,`created`),r}function Bn(e,t,n,r,i){let a=k;k=``;let o=n;for(;o<=r;++o){zn(e[o],i);let t=Tn.get(e[o]);t!==null&&N(t)?On===null&&(On=t.getFormat(),kn=t.getStyle()):B(t)&&o<r&&!t.isInline()&&(k+=jt)}i.element.__lexicalTextContent=k,k=a+k}function Vn(e,t){if(e){let n=e.__last;if(n){let e=t.get(n);if(e)return j(e)?`line-break`:V(e)&&e.isInline()?`decorator`:null}return`empty`}return null}function Hn(e,t,n){let r=Vn(e,wn),i=Vn(t,Tn);r!==i&&t.getDOMSlot(n).setManagedLineBreak(i)}function Un(e,t,n){var r;On=null,kn=null,function(e,t,n){let r=k,i=e.__size,a=t.__size;k=``;let o=n.element;if(i===1&&a===1){let n=e.__first,r=t.__first;if(n===r)Gn(n,o);else{let e=Xn(n),t=zn(r,null);try{o.replaceChild(t,e)}catch(i){if(typeof i==`object`&&i){let a=`${i.toString()} Parent: ${o.tagName}, new child: {tag: ${t.tagName} key: ${r}}, old child: {tag: ${e.tagName}, key: ${n}}.`;throw Error(a)}throw i}Mn(n,null)}let i=Tn.get(r);N(i)&&On===null&&(On=i.getFormat(),kn=i.getStyle())}else{let r=Wn(e,wn),s=Wn(t,Tn);if(r.length!==i&&O(227),s.length!==a&&O(228),i===0)a!==0&&Bn(s,0,0,a-1,n);else if(a===0){if(i!==0){let e=n.after==null&&n.before==null&&n.element.__lexicalLineBreak==null;Nn(r,0,i-1,e?null:o),e&&(o.textContent=``)}}else(function(e,t,n,r,i,a){let o=r-1,s=i-1,c,l,u=a.getFirstChild(),d=0,f=0;for(;d<=o&&f<=s;){let e=t[d],r=n[f];if(e===r)u=qn(Gn(r,a.element)),d++,f++;else{if(l===void 0&&(l=Jn(n,f)),c===void 0)c=Jn(t,d);else if(!c.has(e)){d++;continue}if(!l.has(e)){u=qn(Xn(e)),Mn(e,a.element),d++,c.delete(e);continue}if(c.has(r)){let e=bs(yn,r);e!==u&&a.withBefore(u).insertChild(e),u=qn(Gn(r,a.element)),d++,f++}else zn(r,a.withBefore(u)),f++}let i=Tn.get(r);i!==null&&N(i)?On===null&&(On=i.getFormat(),kn=i.getStyle()):B(i)&&f<=s&&!i.isInline()&&(k+=jt)}let p=d>o,m=f>s;if(p&&!m){let e=n[s+1],t=e===void 0?null:yn.getElementByKey(e);Bn(n,0,f,s,a.withBefore(t))}else m&&!p&&Nn(t,d,o,a.element)})(0,r,s,i,a,n)}o.__lexicalTextContent=k,k=r+k}(e,t,t.getDOMSlot(n)),r=t,On==null||On===r.__textFormat||jn||r.setTextFormat(On),function(e){kn==null||kn===e.__textStyle||jn||e.setTextStyle(kn)}(t)}function Wn(e,t){let n=[],r=e.__first;for(;r!==null;){let e=t.get(r);e===void 0&&O(101),n.push(r),r=e.__next}return n}function Gn(e,t){let n=wn.get(e),r=Tn.get(e);n!==void 0&&r!==void 0||O(61);let i=An||Cn.has(e)||Sn.has(e),a=bs(yn,e);if(n===r&&!i){let e;if(B(n)){let t=a.__lexicalTextContent;typeof t==`string`?e=t:(e=n.getTextContent(),a.__lexicalTextContent=e)}else e=n.getTextContent();return k+=e,a}if(n!==r&&i&&gs(Dn,bn,xn,r,`updated`),r.updateDOM(n,a,vn)){let n=zn(e,null);return t===null&&O(62),t.replaceChild(n,a),Mn(e,null),n}if(B(n)){B(r)||O(334,e);let t=r.__indent;(An||t!==n.__indent)&&In(a,t);let o=r.__format;if((An||o!==n.__format)&&Ln(a,o),i)Un(n,r,a),H(r)||r.isInline()||Hn(n,r,a);else{let e=a.__lexicalTextContent,t;typeof e==`string`?t=e:(t=n.getTextContent(),a.__lexicalTextContent=t),k+=t}if((An||r.__dir!==n.__dir)&&(Rn(a,r),H(r)&&!An))for(let e of r.getChildren())B(e)&&Rn(bs(yn,e.getKey()),e)}else{let t=r.getTextContent();if(V(r)){let t=r.decorate(yn,vn);t!==null&&Kn(e,t)}k+=t}if(!jn&&H(r)&&r.__cachedText!==k){let e=r.getWritable();e.__cachedText=k,r=e}return a}function Kn(e,t){let n=yn._pendingDecorators,r=yn._decorators;if(n===null){if(r[e]===t)return;n=Xo(yn)}n[e]=t}function qn(e){let t=e.nextSibling;return t!==null&&t===yn._blockCursorElement&&(t=t.nextSibling),t}function Jn(e,t){let n=new Set;for(let r=t;r<e.length;r++)n.add(e[r]);return n}function Yn(e,t,n,r,i,a){k=``,An=r===2,yn=n,vn=n._config,bn=n._nodes,xn=yn._listeners.mutation,Sn=i,Cn=a,wn=e._nodeMap,Tn=t._nodeMap,jn=t._readOnly,En=new Map(n._keyToDOMMap);let o=new Map;return Dn=o,Gn(`root`,null),yn=void 0,bn=void 0,Sn=void 0,Cn=void 0,wn=void 0,Tn=void 0,vn=void 0,En=void 0,Dn=void 0,o}function Xn(e){let t=En.get(e);return t===void 0&&O(75,e),t}function A(e){return{type:e}}var Zn=A(`SELECTION_CHANGE_COMMAND`),Qn=A(`SELECTION_INSERT_CLIPBOARD_NODES_COMMAND`),$n=A(`CLICK_COMMAND`),er=A(`BEFORE_INPUT_COMMAND`),tr=A(`INPUT_COMMAND`),nr=A(`COMPOSITION_START_COMMAND`),rr=A(`COMPOSITION_END_COMMAND`),ir=A(`DELETE_CHARACTER_COMMAND`),ar=A(`INSERT_LINE_BREAK_COMMAND`),or=A(`INSERT_PARAGRAPH_COMMAND`),sr=A(`CONTROLLED_TEXT_INSERTION_COMMAND`),cr=A(`PASTE_COMMAND`),lr=A(`REMOVE_TEXT_COMMAND`),ur=A(`DELETE_WORD_COMMAND`),dr=A(`DELETE_LINE_COMMAND`),fr=A(`FORMAT_TEXT_COMMAND`),pr=A(`UNDO_COMMAND`),mr=A(`REDO_COMMAND`),hr=A(`KEYDOWN_COMMAND`),gr=A(`KEY_ARROW_RIGHT_COMMAND`),_r=A(`MOVE_TO_END`),vr=A(`KEY_ARROW_LEFT_COMMAND`),yr=A(`MOVE_TO_START`),br=A(`KEY_ARROW_UP_COMMAND`),xr=A(`KEY_ARROW_DOWN_COMMAND`),Sr=A(`KEY_ENTER_COMMAND`),Cr=A(`KEY_SPACE_COMMAND`),wr=A(`KEY_BACKSPACE_COMMAND`),Tr=A(`KEY_ESCAPE_COMMAND`),Er=A(`KEY_DELETE_COMMAND`),Dr=A(`KEY_TAB_COMMAND`),Or=A(`INSERT_TAB_COMMAND`),kr=A(`INDENT_CONTENT_COMMAND`),Ar=A(`OUTDENT_CONTENT_COMMAND`),jr=A(`DROP_COMMAND`),Mr=A(`FORMAT_ELEMENT_COMMAND`),Nr=A(`DRAGSTART_COMMAND`),Pr=A(`DRAGOVER_COMMAND`),Fr=A(`DRAGEND_COMMAND`),Ir=A(`COPY_COMMAND`),Lr=A(`CUT_COMMAND`),Rr=A(`SELECT_ALL_COMMAND`),zr=A(`CLEAR_EDITOR_COMMAND`),Br=A(`CLEAR_HISTORY_COMMAND`),Vr=A(`CAN_REDO_COMMAND`),Hr=A(`CAN_UNDO_COMMAND`),Ur=A(`FOCUS_COMMAND`),Wr=A(`BLUR_COMMAND`),Gr=A(`KEY_MODIFIER_COMMAND`),Kr=Object.freeze({}),qr=[[`keydown`,function(e,t){Jr=e.timeStamp,Yr=e.key,!t.isComposing()&&q(t,hr,e)}],[`pointerdown`,function(e,t){let n=e.target,r=e.pointerType;Rs(n)&&r!==`touch`&&r!==`pen`&&e.button===0&&no(t,()=>{Oo(n)||(ti=!0)})}],[`compositionstart`,function(e,t){q(t,nr,e)}],[`compositionend`,function(e,t){pt?ri=!0:gt||!ht&&!bt?q(t,rr,e):(ii=!0,ai=e.data)}],[`input`,function(e,t){e.stopPropagation(),no(t,()=>{t.dispatchCommand(tr,e)},{event:e}),Zr=null}],[`click`,function(e,t){no(t,()=>{let n=F(),r=Fs(Ds(t)),i=Ta();if(r){if(P(n)){let t=n.anchor,a=t.getNode();if(t.type===`element`&&t.offset===0&&n.isCollapsed()&&!H(a)&&G().getChildrenSize()===1&&a.getTopLevelElementOrThrow().isEmpty()&&i!==null&&n.is(i))r.removeAllRanges(),n.dirty=!0;else if(e.detail===3&&!n.isCollapsed()&&a!==n.focus.getNode()){let e=ec(a,e=>B(e)&&!e.isInline());B(e)&&e.select(0)}}else if(e.pointerType===`touch`||e.pointerType===`pen`){let n=r.anchorNode;(J(n)||Lo(n))&&$o(wa(i,r,t,e))}}q(t,$n,e)})}],[`cut`,Kr],[`copy`,Kr],[`dragstart`,Kr],[`dragover`,Kr],[`dragend`,Kr],[`paste`,Kr],[`focus`,Kr],[`blur`,Kr],[`drop`,Kr]];mt&&qr.push([`beforeinput`,(e,t)=>function(e,t){let n=e.inputType;n===`deleteCompositionText`||pt&&ys(t)||n!==`insertCompositionText`&&q(t,er,e)}(e,t)]);var Jr=0,Yr=null,Xr=0,Zr=null,Qr=new WeakMap,$r=new WeakMap,ei=!1,ti=!1,ni=!1,ri=!1,ii=!1,ai=``,oi=null,si=[0,``,0,`root`,0];function ci(e,t,n,r,i){let a=e.anchor,o=e.focus,s=a.getNode(),c=z(),l=Fs(Ds(c)),u=l===null?null:l.anchorNode,d=a.key,f=c.getElementByKey(d),p=n.length;return d!==o.key||!N(s)||(!i&&(!mt||Xr<r+50)||s.isDirty()&&p<2||ts(n))&&a.offset!==o.offset&&!s.isComposing()||Io(s)||s.isDirty()&&p>1||(i||!mt)&&f!==null&&!s.isComposing()&&u!==zo(f)||l!==null&&t!==null&&(!t.collapsed||t.startContainer!==l.anchorNode||t.startOffset!==l.anchorOffset)||!s.isComposing()&&(s.getFormat()!==e.format||s.getStyle()!==e.style)||function(e,t){if(t.isSegmented())return!0;if(!e.isCollapsed())return!1;let n=e.anchor.offset,r=t.getParentOrThrow(),i=Fo(t);return n===0?!t.canInsertTextBefore()||!r.canInsertTextBefore()&&!t.isComposing()||i||function(e){let t=e.getPreviousSibling();return(N(t)||B(t)&&t.isInline())&&!t.canInsertTextAfter()}(t):n===t.getTextContentSize()&&(!t.canInsertTextAfter()||!r.canInsertTextAfter()&&!t.isComposing()||i)}(e,s)}function li(e,t){return Lo(e)&&e.nodeValue!==null&&t!==0&&t!==e.nodeValue.length}function ui(e,t,n){let{anchorNode:r,anchorOffset:i,focusNode:a,focusOffset:o}=e;ei&&(ei=!1,li(r,i)&&li(a,o)&&!oi)||no(t,()=>{if(!n)return void $o(null);if(!Ao(t,r,a))return;let s=F();if(oi&&P(s)&&s.isCollapsed()){let e=s.anchor,t=oi.anchor;(e.key===t.key&&e.offset===t.offset+1||e.offset===1&&t.getNode().is(e.getNode().getPreviousSibling()))&&(s=oi.clone(),$o(s))}if(oi=null,P(s)){let n=s.anchor,r=n.getNode();if(s.isCollapsed()){e.type===`Range`&&e.anchorNode===e.focusNode&&(s.dirty=!0);let i=Ds(t).event,a=i?i.timeStamp:performance.now(),[o,c,l,u,d]=si,f=G(),p=!1===t.isComposing()&&f.getTextContent()===``;if(a<d+200&&n.offset===l&&n.key===u)di(s,o,c);else if(n.type===`text`)N(r)||O(141),fi(s,r);else if(n.type===`element`&&!p){B(r)||O(259);let e=n.getNode();e.isEmpty()?function(e,t){di(e,t.getTextFormat(),t.getTextStyle())}(s,e):di(s,0,``)}}else{let e=n.key,t=s.focus.key,r=s.getNodes(),a=r.length,c=s.isBackward(),l=c?o:i,u=c?i:o,d=c?t:e,f=c?e:t,p=2047,m=!1;for(let e=0;e<a;e++){let t=r[e],n=t.getTextContentSize();if(N(t)&&n!==0&&!(e===0&&t.__key===d&&l===n||e===a-1&&t.__key===f&&u===0)&&(m=!0,p&=t.getFormat(),p===0))break}s.format=m?p:0}}q(t,Zn,void 0)})}function di(e,t,n){e.format===t&&e.style===n||(e.format=t,e.style=n,e.dirty=!0)}function fi(e,t){di(e,t.getFormat(),t.getStyle())}function pi(e){if(!e.getTargetRanges)return null;let t=e.getTargetRanges();return t.length===0?null:t[0]}function mi(e){let t=e.inputType,n=pi(e),r=z(),i=F();if(t===`deleteContentBackward`){if(i===null){let e=Ta();if(!P(e))return!0;$o(e.clone())}if(P(i)){let t=i.anchor.key===i.focus.key;if(a=e.timeStamp,Yr===`MediaLast`&&a<Jr+30&&r.isComposing()&&t){if(Go(null),Jr=0,setTimeout(()=>{no(r,()=>{Go(null)})},30),P(i)){let e=i.anchor.getNode();e.markDirty(),N(e)||O(142),fi(i,e)}}else{Go(null),e.preventDefault();let n=i.anchor.getNode(),a=n.getTextContent(),o=n.canInsertTextAfter(),s=i.anchor.offset===0&&i.focus.offset===a.length,c=yt&&t&&!s&&o;if(c&&i.isCollapsed()&&(c=!V(vs(i.anchor,!0))),!c){q(r,ir,!0);let e=F();yt&&P(e)&&e.isCollapsed()&&(oi=e,setTimeout(()=>oi=null))}}return!0}}var a;if(!P(i))return!0;let o=e.data;Zr!==null&&as(!1,r,Zr),i.dirty&&Zr===null||!i.isCollapsed()||H(i.anchor.getNode())||n===null||i.applyDOMRange(n),Zr=null;let s=i.anchor,c=i.focus,l=s.getNode(),u=c.getNode();if(t===`insertText`||t===`insertTranspose`){if(o===`
|
|
4
4
|
`)e.preventDefault(),q(r,ar,!1);else if(o===jt)e.preventDefault(),q(r,or,void 0);else if(o==null&&e.dataTransfer){let t=e.dataTransfer.getData(`text/plain`);e.preventDefault(),i.insertRawText(t)}else o!=null&&ci(i,n,o,e.timeStamp,!0)?(e.preventDefault(),q(r,sr,o)):Zr=o;return Xr=e.timeStamp,!0}switch(e.preventDefault(),t){case`insertFromYank`:case`insertFromDrop`:case`insertReplacementText`:q(r,sr,e);break;case`insertFromComposition`:Go(null),q(r,sr,e);break;case`insertLineBreak`:Go(null),q(r,ar,!1);break;case`insertParagraph`:Go(null),ni&&!gt?(ni=!1,q(r,ar,!1)):q(r,or,void 0);break;case`insertFromPaste`:case`insertFromPasteAsQuotation`:q(r,cr,e);break;case`deleteByComposition`:(function(e,t){return e!==t||B(e)||B(t)||!Fo(e)||!Fo(t)})(l,u)&&q(r,lr,e);break;case`deleteByDrag`:case`deleteByCut`:q(r,lr,e);break;case`deleteContent`:q(r,ir,!1);break;case`deleteWordBackward`:q(r,ur,!0);break;case`deleteWordForward`:q(r,ur,!1);break;case`deleteHardLineBackward`:case`deleteSoftLineBackward`:q(r,dr,!0);break;case`deleteContentForward`:case`deleteHardLineForward`:case`deleteSoftLineForward`:q(r,dr,!1);break;case`formatStrikeThrough`:q(r,fr,`strikethrough`);break;case`formatBold`:q(r,fr,`bold`);break;case`formatItalic`:q(r,fr,`italic`);break;case`formatUnderline`:q(r,fr,`underline`);break;case`historyUndo`:q(r,pr,void 0);break;case`historyRedo`:q(r,mr,void 0)}return!0}function hi(e){if(J(e.target)&&Oo(e.target))return!0;let t=z(),n=F(),r=e.data,i=pi(e);if(r!=null&&P(n)&&ci(n,i,r,e.timeStamp,!1)){ri&&=(vi(t,r),!1);let i=n.anchor.getNode(),a=Fs(Ds(t));if(a===null)return!0;let o=n.isBackward(),s=o?n.anchor.offset:n.focus.offset,c=o?n.focus.offset:n.anchor.offset;mt&&!n.isCollapsed()&&N(i)&&a.anchorNode!==null&&i.getTextContent().slice(0,s)+r+i.getTextContent().slice(s+c)===is(a.anchorNode)||q(t,sr,r);let l=r.length;pt&&l>1&&e.inputType===`insertCompositionText`&&!t.isComposing()&&(n.anchor.offset-=l),yt&&t.isComposing()&&(Jr=0,Go(null))}else as(!1,t,r===null?void 0:r),ri&&=(vi(t,r||void 0),!1);return function(){R(),Zt(z())}(),!0}function gi(e){let t=z(),n=F();if(P(n)&&!t.isComposing()){let r=n.anchor,i=n.anchor.getNode();Go(r.key),Cs(Ni),(e.timeStamp<Jr+30||r.type===`element`||!n.isCollapsed()||i.getFormat()!==n.format||N(i)&&i.getStyle()!==n.style)&&q(t,sr,Mt)}return!0}function _i(e){return vi(z(),e.data),Cs(Pi),!0}function vi(e,t){let n=e._compositionKey;if(Go(null),n!==null&&t!=null){if(t===``){let t=W(n),r=zo(e.getElementByKey(n));if(r!==null&&r.nodeValue!==null&&N(t)){let n=Fs(Ds(e)),i=null,a=null;n!==null&&n.anchorNode===r&&(i=n.anchorOffset,a=n.focusOffset),os(t,r.nodeValue,i,a,!0)}return}if(t[t.length-1]===`
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{$ as e,E as t,F as n,G as r,H as i,M as a,O as o,P as s,T as c,U as l,Z as u,b as d,g as f,j as p,k as m,q as h,t as g,x as _}from"./index-
|
|
1
|
+
import{$ as e,E as t,F as n,G as r,H as i,M as a,O as o,P as s,T as c,U as l,Z as u,b as d,g as f,j as p,k as m,q as h,t as g,x as _}from"./index-D0Q5GZRs.js";var v={key:0},y={class:`error-header`},b={class:`error-message`},x={class:`error-location`},S={class:`error-line-badge`},C={key:0,class:`error-code-block`},w={class:`line-number`},T={key:1},E=g({__name:`ErrorPage`,setup(g){let E=d(),D=_(),O=o(()=>{try{return E.query.data?JSON.parse(E.query.data):null}catch{return null}});async function k(){let e=await f();e.error?D.replace({name:`error`,query:{data:JSON.stringify(e.error)}}):(D.push(`/`),window.location.reload())}return(o,d)=>{let f=r(`router-link`);return O.value?(i(),a(`div`,v,[m(`header`,null,[m(`article`,y,[d[1]||=m(`h3`,null,[m(`i`,{class:`iconoir-warning-triangle`}),s(` Error `)],-1),m(`p`,b,e(O.value.error),1),m(`p`,x,[d[0]||=m(`i`,{class:`iconoir-page`},null,-1),s(` `+e(O.value.path)+` `,1),m(`span`,S,`Line `+e(O.value.line_no),1)])]),m(`a`,{href:`#`,class:`reload-btn`,onClick:c(k,[`prevent`])},[...d[2]||=[m(`i`,{class:`iconoir-refresh`},null,-1),s(` Reload `,-1)]])]),O.value.context?(i(),a(`div`,C,[m(`pre`,null,[m(`code`,null,[(i(!0),a(t,null,l(O.value.context,t=>(i(),a(`span`,{key:t.line_no,class:u(t.selected?`error-line`:`code-line`)},[m(`span`,w,e(String(t.line_no).padStart(4,` `)),1),s(e(t.content)+`
|
|
2
2
|
`,1)],2))),128))])])])):p(``,!0)])):(i(),a(`div`,T,[d[4]||=m(`p`,null,`No error data available.`,-1),n(f,{to:`/`},{default:h(()=>[...d[3]||=[s(`Back to home`,-1)]]),_:1})]))}}},[[`__scopeId`,`data-v-cb96d9d5`]]);export{E as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{B as e,H as t,M as n,R as r,V as i,Y as a,k as o,t as s,u as c}from"./index-
|
|
1
|
+
import{B as e,H as t,M as n,R as r,V as i,Y as a,k as o,t as s,u as c}from"./index-D0Q5GZRs.js";import{t as l}from"./useGraphviz-DweKV7Kg.js";import{d as u}from"./WikiPage-DrvCHwJ7.js";var d={key:0},f={key:1,class:`graph-container graph-expand`},p=[`innerHTML`],m=s({__name:`GraphView`,setup(s){let m=a(``),h=a(!0),g=a(null),_=null;e(async()=>{let e=await c();m.value=e?await l(e):``,h.value=!1,await r(),v()}),i(()=>{_?.destroy()});function v(){if(!g.value)return;let e=g.value.querySelector(`svg`);e&&(_=u(e,g.value))}return(e,r)=>(t(),n(`article`,null,[r[1]||=o(`header`,null,[o(`h2`,null,`Architecture Overview`)],-1),h.value?(t(),n(`div`,d,[...r[0]||=[o(`p`,null,`Loading graph...`,-1)]])):(t(),n(`div`,f,[o(`div`,{id:`graphviz`,ref_key:`graphEl`,ref:g,class:`fullcanvas`,innerHTML:m.value},null,8,p)]))]))}},[[`__scopeId`,`data-v-dbc5bc1f`]]);export{m as default};
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["vue/GraphView-CBq6oFRV.js","vue/index-D0Q5GZRs.js","vue/mermaid-BjEi5URd.js","vue/useHighlight-D5Gf8DLl.js","vue/index-oF-iyZvk.css","vue/useGraphviz-DweKV7Kg.js","vue/WikiPage-DrvCHwJ7.js","vue/ResourceList-Df_0e0qt.js","vue/ResourceList-B0FLaFR3.css","vue/QueryError-kg6Yf-pW.js","vue/QueryError-3EqjpbyV.css","vue/WikiPage-DoFJ0dbW.css","vue/GraphView-BvWAbUAl.css"])))=>i.map(i=>d[i]);
|
|
2
|
+
import{M as e}from"./mermaid-BjEi5URd.js";import{A as t,H as n,I as r,L as i,M as a,O as o,X as s,k as c}from"./index-D0Q5GZRs.js";import{n as l}from"./PageView-DzeGnvoS.js";var u={key:2},d={__name:`HomePage`,setup(d){let f=r(()=>e(()=>import(`./GraphView-CBq6oFRV.js`),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]))),p=i(`pages`,null),m=i(`pageHome`,null),h=o(()=>p?.value!=null),g=o(()=>m?.value);return(e,r)=>g.value?(n(),t(l,{key:0,name:g.value.name},null,8,[`name`])):h.value?(n(),t(s(f),{key:1})):(n(),a(`article`,u,[...r[0]||=[c(`p`,null,`Loading...`,-1)]]))}};export{d as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{$ as e,A as t,B as n,D as r,E as i,F as a,G as o,H as s,J as c,K as l,L as u,M as d,O as f,P as p,Q as m,R as h,U as g,V as _,X as v,Y as y,Z as b,d as x,f as S,j as C,k as w,q as T,t as E,w as D,x as O}from"./index-D0Q5GZRs.js";import{t as k}from"./useGraphviz-DweKV7Kg.js";import{a as A,c as j,d as M,i as N,l as P,n as F,o as I,r as L,s as R,u as z}from"./WikiPage-DrvCHwJ7.js";import{a as B,c as V,d as H,i as U,l as W,n as G,r as K,s as q,u as ee}from"./ResourceList-Df_0e0qt.js";import{n as J}from"./PageView-DzeGnvoS.js";var Y={key:0,class:`relations-section`},te={class:`relations-grid`},ne={class:`relations-column relations-outgoing`},re={class:`relation-kind`},ie={class:`relation-verb`},ae={class:`instance-badges`},oe={key:1,class:`relations-empty`},X={class:`relations-column relations-incoming`},Z={class:`relation-kind`},se={class:`relation-verb`},ce={class:`instance-badges`},le={key:1,class:`relations-empty`},Q=E({__name:`RelationsGrid`,props:{data:Object},setup(n){let r=n,a=u(`kinds`),c=f(()=>r.data.relations||{}),l=f(()=>r.data.references||{}),m=f(()=>Object.keys(c.value).length>0||Object.keys(l.value).length>0);function h(e){return a?.value?.kinds?a.value.kinds.find(t=>t.kind===e):null}function _(e){return h(e)?.icon||`cube`}function v(e){return h(e)?.layer||`technology`}let y=f(()=>{let e=[];for(let[t,n]of Object.entries(c.value))for(let[r,i]of Object.entries(n))e.push({verb:t,kind:r,names:[...i].sort()});return e}),x=f(()=>{let e=[];for(let[t,n]of Object.entries(l.value))for(let[r,i]of Object.entries(n))e.push({verb:r||`references`,kind:t,names:[...i].sort()});return e});return(n,r)=>{let a=o(`router-link`);return m.value?(s(),d(`article`,Y,[r[2]||=w(`header`,null,[w(`h2`,null,`Relations`)],-1),w(`div`,te,[w(`div`,ne,[r[0]||=w(`h3`,null,[p(`Outgoing `),w(`i`,{class:`iconoir-arrow-right`})],-1),y.value.length?(s(!0),d(i,{key:0},g(y.value,(n,r)=>(s(),d(`div`,{key:`out-`+r,class:`relation-group`},[w(`div`,re,[w(`i`,{class:b(`iconoir-${_(n.kind)} icon-${v(n.kind)}`)},null,2),w(`span`,null,e(n.kind)+` (`+e(n.names.length)+`)`,1)]),w(`div`,ie,e(n.verb)+` (`+e(n.names.length)+`)`,1),w(`div`,ae,[(s(!0),d(i,null,g(n.names,r=>(s(),t(a,{key:r,class:`badge badge-info`,to:{name:`instance`,params:{kind:n.kind,instance:r}}},{default:T(()=>[p(e(r),1)]),_:2},1032,[`to`]))),128))])]))),128)):(s(),d(`div`,oe,`None`))]),w(`div`,X,[r[1]||=w(`h3`,null,[w(`i`,{class:`iconoir-arrow-right`}),p(` Incoming`)],-1),x.value.length?(s(!0),d(i,{key:0},g(x.value,(n,r)=>(s(),d(`div`,{key:`in-`+r,class:`relation-group`},[w(`div`,Z,[w(`i`,{class:b(`iconoir-${_(n.kind)} icon-${v(n.kind)}`)},null,2),w(`span`,null,e(n.kind)+` (`+e(n.names.length)+`)`,1)]),w(`div`,se,e(n.verb)+` (`+e(n.names.length)+`)`,1),w(`div`,ce,[(s(!0),d(i,null,g(n.names,r=>(s(),t(a,{key:r,class:`badge badge-info`,to:{name:`instance`,params:{kind:n.kind,instance:r}}},{default:T(()=>[p(e(r),1)]),_:2},1032,[`to`]))),128))])]))),128)):(s(),d(`div`,le,`None`))])])])):C(``,!0)}}},[[`__scopeId`,`data-v-2fa43570`]]),ue={key:0},de={key:1,class:`graph-error`},fe={key:2,class:`graph-container`},pe=[`innerHTML`],me=E({__name:`ModuleGraph`,props:{dot:String,label:{type:String,default:`Module Structure`}},setup(t){let r=t,i=y(``),a=y(!0),o=y(null),c=y(null),u=null;async function f(e){if(!e){a.value=!1;return}u?.destroy(),u=null,a.value=!0,o.value=null;try{i.value=await k(e)}catch(e){o.value=e?.message||`Failed to render module graph`,i.value=``}finally{if(a.value=!1,await h(),c.value){let e=c.value.querySelector(`svg`);e&&(u=M(e,c.value))}}}return n(()=>f(r.dot)),l(()=>r.dot,f),_(()=>{u?.destroy()}),(n,r)=>(s(),d(`article`,null,[w(`header`,null,[w(`h2`,null,e(t.label),1)]),a.value?(s(),d(`div`,ue,[...r[0]||=[w(`p`,null,`Loading graph...`,-1)]])):o.value?(s(),d(`p`,de,[r[1]||=w(`i`,{class:`iconoir-warning-triangle`},null,-1),p(` `+e(o.value),1)])):i.value?(s(),d(`div`,fe,[w(`div`,{ref_key:`graphEl`,ref:c,class:`canvas`,innerHTML:i.value},null,8,pe)])):C(``,!0)]))}},[[`__scopeId`,`data-v-c3280c1e`]]),he={key:0,class:`requirements-section`},ge={__name:`RequirementsSection`,props:{data:Object},setup(e){let t=e,n=f(()=>{let e=t.data.relations||{},n=[];for(let[t,r]of Object.entries({realizes:`implemented`,partiallyRealizes:`partial`,plans:`planned`})){let i=e[t]||{},a=i.MotivationRequirement||i.motivationRequirements||[];for(let e of a)n.push({name:e,status:r,verb:t})}return n}),r=y([]);l(n,async e=>{if(!e.length){r.value=[];return}let t=await Promise.all(e.map(async e=>{try{let t=(await x(`MotivationRequirement`,e.name)).metadata?.annotations||{};return{...e,priority:t[`requirement/priority`]||null,story:t[`requirement/story`]||null}}catch{return{...e,priority:null,story:null}}}));r.value=t},{immediate:!0});function i(e){let n=t.data.name;return`/search?q=${encodeURIComponent(`MotivationRequirement: <- "${n}" & requirement/priority == "${e}"`)}`}return(e,t)=>n.value.length?(s(),d(`article`,he,[t[0]||=w(`header`,null,[w(`h2`,null,`Requirements`)],-1),a(L,{items:r.value,"priority-link":i},null,8,[`items`])])):C(``,!0)}},_e={key:0},ve=[`title`],ye=[`href`],be={class:`git-info`},xe={class:`git-item`},Se={class:`git-clone-command`},Ce=E({__name:`GitInfo`,props:{annotations:Object},setup(t){let n=t,r=f(()=>n.annotations[`repository/git`]),i=f(()=>r.value?q(r.value):null);function a(){navigator.clipboard.writeText(`git clone ${r.value}`)}return(t,n)=>r.value?(s(),d(`tr`,_e,[w(`th`,{scope:`row`,title:v(G)(`repository/git`)},[w(`a`,{class:`git-link`,href:i.value,target:`_blank`},`Git Repo`,8,ye)],8,ve),w(`td`,null,[w(`div`,be,[w(`div`,xe,[n[0]||=w(`i`,{class:`iconoir-git-branch`},null,-1),w(`code`,Se,`git clone `+e(r.value),1)]),w(`button`,{class:`copy-button`,onClick:a,title:`Copy to clipboard`},[...n[1]||=[w(`i`,{class:`iconoir-copy`},null,-1)]])])])])):C(``,!0)}},[[`__scopeId`,`data-v-808bbe74`]]),we={key:0},Te=[`title`],Ee={class:`language-distribution`},De={class:`language-total`},Oe={class:`language-count`},ke={class:`language-bar`},Ae=[`title`],je={class:`language-legend`},Me={class:`other-languages`},Ne=E({__name:`LanguageStats`,props:{annotations:Object,kind:String},setup(n){let r=n,c=f(()=>{let e=r.annotations[`scc/languages`];if(!e)return null;let t=e.split(`,`).map(e=>{let t=`scc/language/${e.trim()}/loc`;return{name:e.trim(),loc:parseInt(r.annotations[t]||`0`,10)}}).sort((e,t)=>t.loc-e.loc),n=t.reduce((e,t)=>e+t.loc,0);if(n<=0)return null;let i=t.filter(e=>e.loc/n*100>=.1),a=i.slice(0,10),o=[...i.slice(10),...t.filter(e=>e.loc/n*100<.1)],s=o.reduce((e,t)=>e+t.loc,0),c=[...a];return s>0&&c.push({name:`Other`,loc:s,isOther:!0,otherNames:o.map(e=>e.name)}),{display:c,total:n}});function l(e){return(e/c.value.total*100).toFixed(1)}function u(e,t){return t.isOther?`lang-other`:`lang-${e}`}function h(e,t){return{name:`search`,query:{q:`${e} == "${t}"`}}}return(n,r)=>{let f=o(`router-link`);return c.value?(s(),d(`tr`,we,[w(`th`,{scope:`row`,title:v(G)(`scc/languages`,`scc/language/<Language>/loc`)},`Languages`,8,Te),w(`td`,null,[w(`div`,Ee,[w(`div`,De,[w(`span`,Oe,e(v(W)(c.value.total)),1),r[0]||=w(`span`,{class:`language-label`},`lines of code`,-1)]),w(`div`,ke,[(s(!0),d(i,null,g(c.value.display,(e,t)=>(s(),d(`div`,{key:e.name,class:b([`language-bar-segment`,u(t,e)]),style:m({width:l(e.loc)+`%`}),title:`${e.name}: ${v(W)(e.loc)} (${l(e.loc)}%)`},null,14,Ae))),128))]),w(`div`,je,[(s(!0),d(i,null,g(c.value.display,(n,o)=>(s(),d(`div`,{key:n.name,class:`language-legend-item`},[w(`div`,{class:b([`language-legend-dot`,u(o,n)])},null,2),n.isOther?(s(),d(i,{key:0},[w(`span`,null,`Other `+e(l(n.loc))+`%`,1),w(`span`,Me,[r[1]||=p(` (`,-1),(s(!0),d(i,null,g(n.otherNames,(t,r)=>(s(),d(i,{key:t},[a(f,{to:h(`scc/languages`,t)},{default:T(()=>[p(e(t),1)]),_:2},1032,[`to`]),r<n.otherNames.length-1?(s(),d(i,{key:0},[p(`, `)],64)):C(``,!0)],64))),128)),r[2]||=p(`) `,-1)])],64)):(s(),t(f,{key:1,to:h(`scc/languages`,n.name)},{default:T(()=>[p(e(n.name)+` `+e(l(n.loc))+`% `,1)]),_:2},1032,[`to`]))]))),128))])])])])):C(``,!0)}}},[[`__scopeId`,`data-v-c1202fdd`]]),Pe={key:0},Fe=[`title`],Ie={class:`project-estimate`},Le={key:0,class:`estimate-item`},Re={class:`estimate-value`},ze={key:1,class:`estimate-item`},Be={class:`estimate-value`},Ve={key:2,class:`estimate-item`},He={class:`estimate-value`},Ue=E({__name:`ProjectEstimate`,props:{annotations:Object},setup(t){let n=t,r=f(()=>K(`cost`,n.annotations[`scc/estimatedCost`])),i=f(()=>K(`schedule`,n.annotations[`scc/estimatedScheduleMonths`])),a=f(()=>K(`team`,n.annotations[`scc/estimatedPeople`])),o=f(()=>r.value!=null||i.value!=null||a.value!=null);return(t,n)=>o.value?(s(),d(`tr`,Pe,[w(`th`,{scope:`row`,title:v(G)(`scc/estimatedCost`,`scc/estimatedScheduleMonths`,`scc/estimatedPeople`)},[...n[0]||=[p(` Project Estimate `,-1),w(`span`,{class:`estimate-note`,title:`Estimates adjusted for €80k salary and AI-assisted development (3x productivity)`},[w(`i`,{class:`iconoir-info-circle`})],-1)]],8,Fe),w(`td`,null,[w(`div`,Ie,[r.value==null?C(``,!0):(s(),d(`div`,Le,[n[1]||=w(`i`,{class:`iconoir-euro`},null,-1),n[2]||=w(`span`,{class:`estimate-label`},`Cost:`,-1),w(`span`,Re,e(v(H)(r.value)),1)])),i.value==null?C(``,!0):(s(),d(`div`,ze,[n[3]||=w(`i`,{class:`iconoir-calendar`},null,-1),n[4]||=w(`span`,{class:`estimate-label`},`Schedule:`,-1),w(`span`,Be,e(i.value.toFixed(1))+` months`,1)])),a.value==null?C(``,!0):(s(),d(`div`,Ve,[n[5]||=w(`i`,{class:`iconoir-group`},null,-1),n[6]||=w(`span`,{class:`estimate-label`},`Team:`,-1),w(`span`,He,e(a.value)+` people`,1)]))])])])):C(``,!0)}},[[`__scopeId`,`data-v-d97600d8`]]),We={key:0},Ge=[`title`],Ke={class:`repository-distribution`},qe={class:`repository-total`},Je={class:`repository-count`},Ye={class:`repository-bar`},Xe=[`title`],Ze={class:`repository-legend`},Qe=E({__name:`RepositoriesBar`,props:{annotations:Object},setup(t){let n=t,r=f(()=>parseInt(n.annotations[`repository/artifacts/total`]||`0`,10)),a=f(()=>parseInt(n.annotations[`repository/artifacts/active`]||`0`,10)),o=f(()=>parseInt(n.annotations[`repository/artifacts/abandoned`]||`0`,10)),c=f(()=>parseInt(n.annotations[`repository/artifacts/archived`]||`0`,10)),l=f(()=>parseInt(n.annotations[`repository/artifacts/highBusFactor`]||`0`,10)),u=f(()=>r.value>0),p=f(()=>a.value-l.value),h=f(()=>r.value-a.value-o.value-c.value);function _(e){return(e/r.value*100).toFixed(1)}let y=f(()=>{let e=[];return p.value>0&&e.push({cls:`status-active`,value:p.value,label:`Active (healthy)`}),l.value>0&&e.push({cls:`status-high-bus-factor`,value:l.value,label:`Active (high bus factor)`}),c.value>0&&e.push({cls:`status-archived`,value:c.value,label:`Archived`}),h.value>0&&e.push({cls:`status-other`,value:h.value,label:`Other`}),o.value>0&&e.push({cls:`status-abandoned`,value:o.value,label:`Abandoned`}),e});return(t,n)=>u.value?(s(),d(`tr`,We,[w(`th`,{scope:`row`,title:v(G)(`repository/artifacts/total`,`repository/artifacts/active`,`repository/artifacts/abandoned`,`repository/artifacts/archived`,`repository/artifacts/highBusFactor`)},`Repositories`,8,Ge),w(`td`,null,[w(`div`,Ke,[w(`div`,qe,[w(`span`,Je,e(r.value),1),n[0]||=w(`span`,{class:`repository-label`},`repositories`,-1)]),w(`div`,Ye,[(s(!0),d(i,null,g(y.value,e=>(s(),d(`div`,{key:e.cls,class:b([`repository-bar-segment`,e.cls]),style:m({width:_(e.value)+`%`}),title:`${e.label}: ${e.value} (${_(e.value)}%)`},null,14,Xe))),128))]),w(`div`,Ze,[(s(!0),d(i,null,g(y.value,t=>(s(),d(`div`,{key:t.cls,class:`repository-legend-item`},[w(`div`,{class:b([`repository-legend-dot`,t.cls])},null,2),w(`span`,null,e(t.value)+` `+e(t.label.toLowerCase()),1)]))),128))])])])])):C(``,!0)}},[[`__scopeId`,`data-v-6c3e5f7d`]]),$e=[`title`],$=E({__name:`SparklineChart`,props:{values:{type:String,required:!0},type:{type:String,default:`commits`},maxHeight:{type:Number,default:16},colorClass:{type:String,default:null}},setup(e){let t=e,n=f(()=>!t.values||t.values.trim()===``?[]:t.values.split(`,`).map(e=>parseInt(e,10)||0)),r=f(()=>{let e=Math.max(...n.value);return e===0?1:e});function a(e){return e===0?0:Math.max(2,Math.round(e/r.value*t.maxHeight))}let o=f(()=>{switch(t.type){case`created`:return` issues created`;case`resolved`:return` issues resolved`;default:return` commits`}});return(t,r)=>(s(),d(`div`,{class:b([`activity-sparkline`,e.colorClass])},[(s(!0),d(i,null,g(n.value,(e,t)=>(s(),d(`div`,{key:t,class:b([`activity-sparkline-bar`,{empty:e===0}]),style:m({height:a(e)+`px`}),title:e+o.value},null,14,$e))),128))],2))}},[[`__scopeId`,`data-v-33cc84bd`]]),et={key:0},tt=[`title`],nt={class:`activity-summary`},rt={key:0,class:`activity-item`},it=[`title`],at={class:`activity-value sparkline-total`},ot={key:1,class:`activity-item`},st=[`title`],ct={key:0,class:`activity-value sparkline-total`},lt={key:1,class:`activity-value contributors-total`},ut={key:2,class:`activity-item`},dt=[`title`],ft={class:`activity-value`},pt={key:3,class:`activity-item`},mt=[`title`],ht={key:4,class:`activity-item`},gt=[`title`],_t=E({__name:`ActivityInfo`,props:{annotations:Object,kind:String},setup(t){let n=t,r=f(()=>n.annotations[`activity/commits`]),i=f(()=>n.annotations[`activity/contributors`]),c=f(()=>n.annotations[`activity/contributors/6m`]),l=f(()=>n.annotations[`activity/contributors/total`]),u=f(()=>n.annotations[`activity/status`]),m=f(()=>n.annotations[`activity/busFactor`]),h=f(()=>n.annotations[`activity/createdAt`]),g=f(()=>r.value||i.value||u.value||m.value||h.value),_=f(()=>r.value?r.value.split(`,`).map(Number).reduce((e,t)=>e+t,0):0),y=f(()=>h.value?new Date(h.value).toLocaleDateString(`en`,{month:`short`,year:`numeric`}):null),x=f(()=>{let e=m.value,t=``;switch(e){case`high`:t=`High risk: One contributor accounts for >75% of commits in the last 6 months`;break;case`medium`:t=`Medium risk: One contributor accounts for 50-75% of commits in the last 6 months`;break;case`low`:t=`Low risk: No single contributor dominates the codebase`;break;default:t=`Unknown: Not enough recent activity to assess`}return c.value&&(t+=` (${c.value} unique contributors)`),t});function S(e,t){return{name:`search`,query:{q:`${e} == "${t}"`}}}return(t,n)=>{let f=o(`router-link`);return g.value?(s(),d(`tr`,et,[w(`th`,{scope:`row`,title:v(G)(`activity/commits`,`activity/contributors`,`activity/contributors/6m`,`activity/contributors/total`,`activity/status`,`activity/busFactor`,`activity/createdAt`)},`Activity`,8,tt),w(`td`,null,[w(`div`,nt,[r.value?(s(),d(`div`,rt,[n[0]||=w(`i`,{class:`iconoir-git-commit`},null,-1),w(`span`,{class:`activity-label`,title:v(G)(`activity/commits`)},`Commits:`,8,it),a($,{values:r.value},null,8,[`values`]),w(`span`,at,e(_.value),1)])):C(``,!0),i.value?(s(),d(`div`,ot,[n[1]||=w(`i`,{class:`iconoir-community`},null,-1),w(`span`,{class:`activity-label`,title:v(G)(`activity/contributors`,`activity/contributors/6m`,`activity/contributors/total`)},`Contributors:`,8,st),a($,{values:i.value,"color-class":`contributors-sparkline`},null,8,[`values`]),c.value?(s(),d(`span`,ct,e(c.value),1)):C(``,!0),l.value?(s(),d(`span`,lt,`(`+e(l.value)+` total)`,1)):C(``,!0)])):C(``,!0),h.value?(s(),d(`div`,ut,[n[2]||=w(`i`,{class:`iconoir-calendar`},null,-1),w(`span`,{class:`activity-label`,title:v(G)(`activity/createdAt`)},`Created:`,8,dt),w(`span`,ft,e(y.value),1)])):C(``,!0),u.value?(s(),d(`div`,pt,[n[3]||=w(`i`,{class:`iconoir-info-circle`},null,-1),w(`span`,{class:`activity-label`,title:v(G)(`activity/status`)},`Status:`,8,mt),a(f,{class:b(`activity-value status-${u.value}`),to:S(`activity/status`,u.value)},{default:T(()=>[p(e(u.value),1)]),_:1},8,[`class`,`to`])])):C(``,!0),m.value?(s(),d(`div`,ht,[n[4]||=w(`i`,{class:`iconoir-warning-triangle`},null,-1),w(`span`,{class:`activity-label`,title:v(G)(`activity/busFactor`)},`Bus Factor:`,8,gt),a(f,{class:b(`activity-value bus-factor-${m.value}`),to:S(`activity/busFactor`,m.value),title:x.value},{default:T(()=>[p(e(m.value),1)]),_:1},8,[`class`,`to`,`title`])])):C(``,!0)])])])):C(``,!0)}}},[[`__scopeId`,`data-v-a2e60c62`]]),vt={key:0},yt={key:1},bt=[`title`],xt={class:`jira-info`},St=[`href`],Ct={class:`jira-metric`},wt={class:`jira-metric-total`},Tt={class:`jira-metric`},Et={class:`jira-metric-total`},Dt={key:0,class:`iconoir-arrow-down-circle`},Ot={key:1,class:`iconoir-arrow-up-circle`},kt={key:2,class:`iconoir-minus-circle`},At={class:`jira-trend-text`},jt={key:2},Mt=[`title`],Nt=[`href`],Pt={key:1,class:`team-value`},Ft={key:3},It=[`title`],Lt={class:`team-stats`},Rt={key:0,class:`team-stat-item`},zt={class:`team-stat-value`},Bt={key:1,class:`team-stat-item`},Vt={class:`team-stat-value`},Ht={key:4},Ut=[`title`],Wt={class:`team-members`},Gt=[`href`],Kt={key:1,class:`team-member`},qt=E({__name:`TeamInfo`,props:{annotations:Object,instance:Object},setup(t){let n=t,r=f(()=>n.annotations[`team/lead`]),c=f(()=>n.annotations[`team/members`]),l=f(()=>n.annotations[`team/size`]),u=f(()=>n.annotations[`team/lead/size`]),m=f(()=>n.annotations[`team/jira`]),h=f(()=>n.annotations[`jira/projectUrl`]),_=f(()=>n.annotations[`jira/issues/created`]),y=f(()=>n.annotations[`jira/issues/resolved`]),x=f(()=>n.instance?.kind===`BusinessActor`),S=f(()=>`kind in ("ApplicationService", "ApplicationComponent") & ~> $(TechnologyArtifact: -{maintainedBy}> "${n.instance?.name||``}")`),E=f(()=>c.value?c.value.split(/,|\n/).map(e=>e.trim()).filter(Boolean):[]);function D(e){let t=e.match(/<([^>]+@[^>]+)>/);return t?t[1]:null}function O(e){return{name:`search`,query:{q:e}}}let k=f(()=>_.value?_.value.split(`,`).map(Number).reduce((e,t)=>e+t,0):0),A=f(()=>y.value?y.value.split(`,`).map(Number).reduce((e,t)=>e+t,0):0),j=f(()=>_.value?_.value.split(`,`).map(Number):[]),M=f(()=>y.value?y.value.split(`,`).map(Number):[]),N=f(()=>(j.value.length?k.value/j.value.length:0)-(M.value.length?A.value/M.value.length:0)),P=f(()=>{let e=N.value;return e<-1?`positive`:e>1?`negative`:`neutral`});return(t,n)=>{let f=o(`router-link`);return s(),d(i,null,[x.value?(s(),d(`tr`,vt,[n[1]||=w(`th`,{scope:`row`},`Owned Services`,-1),w(`td`,null,[a(f,{class:`badge badge-info`,to:O(S.value)},{default:T(()=>[...n[0]||=[p(` Show ApplicationServices & Components `,-1)]]),_:1},8,[`to`])])])):C(``,!0),m.value&&h.value?(s(),d(`tr`,yt,[w(`th`,{scope:`row`,title:v(G)(`team/jira`,`jira/projectUrl`,`jira/issues/created`,`jira/issues/resolved`)},`Jira Project`,8,bt),w(`td`,null,[w(`div`,xt,[w(`a`,{class:`badge badge-info`,href:h.value,target:`_blank`},e(m.value),9,St),_.value||y.value?(s(),d(i,{key:0},[w(`div`,Ct,[n[2]||=w(`span`,{class:`jira-metric-label`},`Created (6m):`,-1),a($,{values:_.value,type:`created`,"color-class":`jira-created-sparkline`},null,8,[`values`]),w(`span`,wt,e(k.value),1)]),w(`div`,Tt,[n[3]||=w(`span`,{class:`jira-metric-label`},`Resolved (6m):`,-1),a($,{values:y.value,type:`resolved`,"color-class":`jira-resolved-sparkline`},null,8,[`values`]),w(`span`,Et,e(A.value),1)]),w(`div`,{class:b([`jira-trend`,`jira-trend-${P.value}`])},[P.value===`positive`?(s(),d(`i`,Dt)):P.value===`negative`?(s(),d(`i`,Ot)):(s(),d(`i`,kt)),w(`span`,At,e(N.value>0?`+`:``)+e(N.value.toFixed(1))+`/mo`,1)],2)],64)):C(``,!0)])])])):C(``,!0),r.value?(s(),d(`tr`,jt,[w(`th`,{scope:`row`,title:v(G)(`team/lead`)},`Team Lead`,8,Mt),w(`td`,null,[D(r.value)?(s(),d(`a`,{key:0,class:`team-value`,href:`mailto:${D(r.value)}`},e(r.value),9,Nt)):(s(),d(`span`,Pt,e(r.value),1))])])):C(``,!0),l.value||u.value?(s(),d(`tr`,Ft,[w(`th`,{scope:`row`,title:v(G)(`team/size`,`team/lead/size`)},`Team Stats`,8,It),w(`td`,null,[w(`div`,Lt,[u.value?(s(),d(`div`,Rt,[w(`span`,zt,e(u.value),1),n[4]||=w(`span`,{class:`team-stat-label`},`leads`,-1)])):C(``,!0),l.value?(s(),d(`div`,Bt,[w(`span`,Vt,e(l.value),1),n[5]||=w(`span`,{class:`team-stat-label`},`members`,-1)])):C(``,!0)])])])):C(``,!0),c.value?(s(),d(`tr`,Ht,[w(`th`,{scope:`row`,title:v(G)(`team/members`)},`Team Members`,8,Ut),w(`td`,null,[w(`div`,Wt,[(s(!0),d(i,null,g(E.value,t=>(s(),d(i,{key:t},[D(t)?(s(),d(`a`,{key:0,class:`team-member`,href:`mailto:${D(t)}`},e(t),9,Gt)):(s(),d(`span`,Kt,e(t),1))],64))),128))])])])):C(``,!0)],64)}}},[[`__scopeId`,`data-v-ddf2e61d`]]),Jt={key:0},Yt=[`title`],Xt={class:`deployment-types`},Zt=E({__name:`DeploymentInfo`,props:{annotations:Object,kind:String},setup(n){let r=n,a=f(()=>(r.annotations[`repository/artifacts`]||`none`).split(`,`).map(e=>e.trim())),c=f(()=>a.value[0]!==`none`),l=[{key:`container`,icon:`iconoir-box`,label:`Container Image`},{key:`chart`,icon:`iconoir-packages`,label:`Helm Chart`},{key:`binary`,icon:`iconoir-terminal`,label:`Binary`},{key:`debian`,icon:`iconoir-package`,label:`Debian Package`},{key:`rpm`,icon:`iconoir-package`,label:`RPM Package`}];function u(e,t){return{name:`search`,query:{q:`${e} == "${t}"`}}}return(n,r)=>{let f=o(`router-link`);return c.value?(s(),d(`tr`,Jt,[w(`th`,{scope:`row`,title:v(G)(`repository/artifacts`)},`Deployment Artifacts`,8,Yt),w(`td`,null,[w(`div`,Xt,[(s(),d(i,null,g(l,n=>(s(),d(i,{key:n.key},[a.value.includes(n.key)?(s(),t(f,{key:0,class:`deployment-item`,to:u(`repository/artifacts`,n.key)},{default:T(()=>[w(`i`,{class:b(n.icon)},null,2),w(`strong`,null,e(n.label),1)]),_:2},1032,[`to`])):C(``,!0)],64))),64))])])])):C(``,!0)}}},[[`__scopeId`,`data-v-c57237c3`]]),Qt=[`title`],$t={class:`workflow-platforms`},en=[`checked`],tn=[`checked`],nn=[`checked`],rn={class:`info-section-cell`,colspan:`2`},an={open:``},on=[`title`],sn={class:`workflow-types`},cn={class:`workflow-category`},ln=[`checked`],un=[`checked`],dn={class:`workflow-category`},fn=[`checked`],pn=[`checked`],mn=[`checked`],hn=[`checked`],gn={class:`workflow-category`},_n=[`checked`],vn=[`checked`],yn={class:`workflow-category`},bn=[`checked`],xn=[`checked`],Sn=E({__name:`WorkflowInfo`,props:{annotations:Object,kind:String},setup(e){let t=e,n=f(()=>(t.annotations[`workflow/platforms`]||`none`).split(`,`).map(e=>e.trim())),r=f(()=>(t.annotations[`workflow/types`]||`none`).split(`,`).map(e=>e.trim())),c=f(()=>n.value[0]!==`none`||r.value[0]!==`none`),l=f(()=>r.value.includes(`test`));function u(e,t){return{name:`search`,query:{q:`${e} == "${t}"`}}}function m(e,t){return e.includes(t)}return(e,t)=>{let f=o(`router-link`);return c.value?(s(),d(i,{key:0},[w(`tr`,null,[w(`th`,{scope:`row`,title:v(G)(`workflow/platforms`)},`CI/CD Platforms`,8,Qt),w(`td`,null,[w(`div`,$t,[a(f,{class:`workflow-platform-item`,to:u(`workflow/platforms`,`github-actions`)},{default:T(()=>[w(`input`,{type:`checkbox`,disabled:``,checked:m(n.value,`github-actions`)},null,8,en),t[0]||=w(`label`,null,`GitHub Actions`,-1)]),_:1},8,[`to`]),a(f,{class:`workflow-platform-item`,to:u(`workflow/platforms`,`gitlab-ci`)},{default:T(()=>[w(`input`,{type:`checkbox`,disabled:``,checked:m(n.value,`gitlab-ci`)},null,8,tn),t[1]||=w(`label`,null,`GitLab CI`,-1)]),_:1},8,[`to`]),a(f,{class:`workflow-platform-item`,to:u(`workflow/platforms`,`makefile`)},{default:T(()=>[w(`input`,{type:`checkbox`,disabled:``,checked:m(n.value,`makefile`)},null,8,nn),t[2]||=w(`label`,null,`Makefile`,-1)]),_:1},8,[`to`])])])]),w(`tr`,null,[w(`td`,rn,[w(`details`,an,[w(`summary`,{title:v(G)(`workflow/types`)},[...t[3]||=[w(`strong`,null,`Workflow Types`,-1)]],8,on),w(`div`,sn,[w(`div`,null,[w(`div`,cn,[t[6]||=w(`strong`,null,`Build & Deploy`,-1),w(`ul`,null,[w(`li`,null,[w(`input`,{type:`checkbox`,disabled:``,checked:m(r.value,`build`)},null,8,ln),a(f,{to:u(`workflow/types`,`build`)},{default:T(()=>[...t[4]||=[p(`Build`,-1)]]),_:1},8,[`to`])]),w(`li`,null,[w(`input`,{type:`checkbox`,disabled:``,checked:m(r.value,`deploy`)},null,8,un),a(f,{to:u(`workflow/types`,`deploy`)},{default:T(()=>[...t[5]||=[p(`Deploy`,-1)]]),_:1},8,[`to`])])])]),w(`div`,dn,[t[11]||=w(`strong`,null,`Testing`,-1),w(`ul`,null,[w(`li`,null,[w(`input`,{type:`checkbox`,disabled:``,checked:m(r.value,`test`)},null,8,fn),a(f,{to:u(`workflow/types`,`test`)},{default:T(()=>[...t[7]||=[p(`Test (generic)`,-1)]]),_:1},8,[`to`])]),w(`li`,{class:b({"grayed-out":l.value})},[w(`input`,{type:`checkbox`,disabled:``,checked:m(r.value,`unit-test`)},null,8,pn),a(f,{to:u(`workflow/types`,`unit-test`)},{default:T(()=>[...t[8]||=[p(`Unit Tests`,-1)]]),_:1},8,[`to`])],2),w(`li`,{class:b({"grayed-out":l.value})},[w(`input`,{type:`checkbox`,disabled:``,checked:m(r.value,`integration-test`)},null,8,mn),a(f,{to:u(`workflow/types`,`integration-test`)},{default:T(()=>[...t[9]||=[p(`Integration Tests`,-1)]]),_:1},8,[`to`])],2),w(`li`,{class:b({"grayed-out":l.value})},[w(`input`,{type:`checkbox`,disabled:``,checked:m(r.value,`smoke-test`)},null,8,hn),a(f,{to:u(`workflow/types`,`smoke-test`)},{default:T(()=>[...t[10]||=[p(`Smoke Tests`,-1)]]),_:1},8,[`to`])],2)])]),w(`div`,gn,[t[14]||=w(`strong`,null,`Quality & Security`,-1),w(`ul`,null,[w(`li`,null,[w(`input`,{type:`checkbox`,disabled:``,checked:m(r.value,`lint`)},null,8,_n),a(f,{to:u(`workflow/types`,`lint`)},{default:T(()=>[...t[12]||=[p(`Linting`,-1)]]),_:1},8,[`to`])]),w(`li`,null,[w(`input`,{type:`checkbox`,disabled:``,checked:m(r.value,`security-scan`)},null,8,vn),a(f,{to:u(`workflow/types`,`security-scan`)},{default:T(()=>[...t[13]||=[p(`Security Scan`,-1)]]),_:1},8,[`to`])])])]),w(`div`,yn,[t[17]||=w(`strong`,null,`Automation`,-1),w(`ul`,null,[w(`li`,null,[w(`input`,{type:`checkbox`,disabled:``,checked:m(r.value,`dependency-update`)},null,8,bn),a(f,{to:u(`workflow/types`,`dependency-update`)},{default:T(()=>[...t[15]||=[p(`Dependency Updates`,-1)]]),_:1},8,[`to`])]),w(`li`,null,[w(`input`,{type:`checkbox`,disabled:``,checked:m(r.value,`ticket-creation`)},null,8,xn),a(f,{to:u(`workflow/types`,`ticket-creation`)},{default:T(()=>[...t[16]||=[p(`Ticket Creation`,-1)]]),_:1},8,[`to`])])])])])])])])])],64)):C(``,!0)}}},[[`__scopeId`,`data-v-5e906c49`]]),Cn=[`title`],wn={class:`info-section-cell`,colspan:`2`},Tn={class:`agentic-tools`},En={class:`tool-item-header`},Dn=[`checked`],On={class:`tool-item-description`},kn=E({__name:`AgenticTools`,props:{annotations:Object,kind:String},setup(t){let n=t,r=f(()=>(n.annotations[`agentic/tools`]||`none`).split(`,`).map(e=>e.trim())),c=f(()=>r.value[0]!==`none`),l=[{key:`claude`,icon:`iconoir-brain`,name:`Claude`,description:`Anthropic Claude API`},{key:`cursor`,icon:`iconoir-edit-pencil`,name:`Cursor`,description:`AI code editor`},{key:`aider`,icon:`iconoir-terminal`,name:`Aider`,description:`CLI pair programmer`},{key:`github-copilot`,icon:`iconoir-github`,name:`GitHub Copilot`,description:`GitHub AI assistant`},{key:`agents`,icon:`iconoir-cpu-warning`,name:`Custom Agents`,description:`Custom AI agents`}];function u(e,t){return{name:`search`,query:{q:`${e} == "${t}"`}}}return(t,n)=>{let f=o(`router-link`);return c.value?(s(),d(i,{key:0},[w(`tr`,null,[w(`th`,{scope:`row`,colspan:`2`,title:v(G)(`agentic/tools`)},[...n[0]||=[w(`i`,{class:`iconoir-cpu`},null,-1),p(` AI Coding Assistants `,-1)]],8,Cn)]),w(`tr`,null,[w(`td`,wn,[w(`div`,Tn,[(s(),d(i,null,g(l,t=>a(f,{key:t.key,class:b([`tool-item`,{"not-implemented":!r.value.includes(t.key)}]),to:u(`agentic/tools`,t.key)},{default:T(()=>[w(`div`,En,[w(`input`,{type:`checkbox`,checked:r.value.includes(t.key),disabled:``},null,8,Dn),w(`i`,{class:b([t.icon,r.value.includes(t.key)?`implemented`:`not-implemented`])},null,2),w(`strong`,null,e(t.name),1)]),w(`div`,On,e(t.description),1)]),_:2},1032,[`class`,`to`])),64))])])])],64)):C(``,!0)}}},[[`__scopeId`,`data-v-52b7b17d`]]),An={key:0},jn=[`title`],Mn={class:`activity-summary`},Nn={class:`activity-item`},Pn={key:0,class:`activity-item`},Fn={class:`activity-value`},In={key:1,class:`activity-item`},Ln={key:0,class:`license-details-inline`},Rn={class:`badge badge-secondary`},zn={class:`license-overflow`},Bn=E({__name:`LicenseInfo`,props:{annotations:Object,kind:String},setup(n){let r=n,c=f(()=>r.annotations[`license/spdx`]),l=f(()=>r.annotations[`license/category`]||`unknown`),u=f(()=>r.annotations[`license/dependencies/count`]),m=f(()=>(r.annotations[`license/dependencies/ecosystems`]||``).split(`,`).map(e=>e.trim()).filter(Boolean)),h=f(()=>r.annotations[`license/dependencies/risk`]||`unknown`),_=f(()=>r.annotations[`license/dependencies/copyleft`]||`unknown`),y=f(()=>(r.annotations[`license/dependencies/licenses`]||``).split(`,`).map(e=>e.trim()).filter(Boolean)),x=f(()=>{switch(l.value){case`permissive`:return`badge-success`;case`weak-copyleft`:return`badge-warning`;case`source-available`:return`badge-warning`;case`copyleft`:return`badge-danger`;default:return`badge-secondary`}}),S=f(()=>{switch(h.value){case`low`:return`badge-success`;case`weak-copyleft`:return`badge-warning`;case`copyleft`:return`badge-danger`;default:return`badge-secondary`}}),E=f(()=>{switch(h.value){case`copyleft`:return`Copyleft dependencies (GPL, AGPL) or >50% unknown licenses`;case`weak-copyleft`:return`Weak-copyleft dependencies (LGPL, MPL) present`;case`low`:return`All dependencies have known permissive licenses`;default:return`No dependency license data available`}}),D=f(()=>y.value.filter(e=>e!==`unknown`).map(e=>({name:e,count:parseInt(r.annotations[`license/dependencies/${e}/count`]||`0`,10)})).sort((e,t)=>t.count-e.count));function O(e,t){return{name:`search`,query:{q:`${e} == "${t}"`}}}return(n,r)=>{let f=o(`router-link`);return c.value?(s(),d(`tr`,An,[w(`th`,{scope:`row`,title:v(G)(`license/spdx`,`license/category`,`license/dependencies/count`,`license/dependencies/ecosystems`,`license/dependencies/risk`,`license/dependencies/copyleft`,`license/dependencies/licenses`)},`License`,8,jn),w(`td`,null,[w(`div`,Mn,[w(`div`,Nn,[r[0]||=w(`i`,{class:`iconoir-shield-check`},null,-1),a(f,{class:b([`badge`,x.value]),to:O(`license/spdx`,c.value)},{default:T(()=>[p(e(c.value),1)]),_:1},8,[`class`,`to`]),l.value===`unknown`?C(``,!0):(s(),t(f,{key:0,class:`badge badge-outline`,to:O(`license/category`,l.value)},{default:T(()=>[p(e(l.value),1)]),_:1},8,[`to`]))]),u.value&&parseInt(u.value)>0?(s(),d(`div`,Pn,[r[2]||=w(`i`,{class:`iconoir-box`},null,-1),r[3]||=w(`span`,{class:`activity-label`},`Dependencies:`,-1),w(`span`,Fn,e(u.value),1),(s(!0),d(i,null,g(m.value,n=>(s(),t(f,{key:n,class:`badge badge-info`,to:O(`license/dependencies/ecosystems`,n)},{default:T(()=>[p(e(n),1)]),_:2},1032,[`to`]))),128)),a(f,{class:b([`badge`,S.value]),title:E.value,to:O(`license/dependencies/risk`,h.value)},{default:T(()=>[p(`Risk: `+e(h.value),1)]),_:1},8,[`class`,`title`,`to`]),_.value===`true`?(s(),t(f,{key:0,class:`badge badge-warning`,to:O(`license/dependencies/copyleft`,`true`)},{default:T(()=>[...r[1]||=[p(`Copyleft present`,-1)]]),_:1},8,[`to`])):C(``,!0)])):C(``,!0),D.value.length?(s(),d(`div`,In,[r[4]||=w(`i`,{class:`iconoir-list`},null,-1),r[5]||=w(`span`,{class:`activity-label`},`Types:`,-1),(s(!0),d(i,null,g(D.value.slice(0,5),n=>(s(),t(f,{key:n.name,class:`badge badge-outline`,to:O(`license/dependencies/licenses`,n.name)},{default:T(()=>[p(e(n.count>0?`${n.name} (${n.count})`:n.name),1)]),_:2},1032,[`to`]))),128)),D.value.length>5?(s(),d(`details`,Ln,[w(`summary`,Rn,`+`+e(D.value.length-5)+` more`,1),w(`div`,zn,[(s(!0),d(i,null,g(D.value.slice(5),n=>(s(),t(f,{key:n.name,class:`badge badge-outline`,to:O(`license/dependencies/licenses`,n.name)},{default:T(()=>[p(e(n.count>0?`${n.name} (${n.count})`:n.name),1)]),_:2},1032,[`to`]))),128))])])):C(``,!0)])):C(``,!0)])])])):C(``,!0)}}},[[`__scopeId`,`data-v-126f0fee`]]),Vn={key:0},Hn=[`title`],Un=[`href`,`title`],Wn=[`href`],Gn={__name:`ExternalLinks`,props:{annotations:Object},setup(t){let n=t,r=f(()=>Object.entries(n.annotations).filter(([e])=>e.startsWith(`link/`)).sort(([e],[t])=>e.localeCompare(t))),a=f(()=>r.value.length>0),o=f(()=>{if(r.value.length<=10)return null;let e={};for(let[t,n]of r.value){let r=U(n);e[r]||(e[r]=[]),e[r].push({key:t,url:n,name:t.replace(`link/`,``)})}return Object.entries(e).sort(([e],[t])=>e.localeCompare(t))});return(t,n)=>a.value?(s(),d(`tr`,Vn,[w(`th`,{scope:`row`,title:v(G)(`link/<name>`)},`Links`,8,Hn),w(`td`,null,[o.value?(s(!0),d(i,{key:0},g(o.value,([t,r])=>(s(),d(i,{key:t},[w(`strong`,null,e(t),1),n[1]||=w(`br`,null,null,-1),(s(!0),d(i,null,g(r,t=>(s(),d(i,{key:t.key},[w(`a`,{href:t.url,title:v(G)(t.key),target:`_blank`,rel:`noopener noreferrer`},[w(`span`,{class:b(v(V)(t.url))},null,2),p(` `+e(t.name),1)],8,Un),n[0]||=w(`br`,null,null,-1)],64))),128)),n[2]||=w(`br`,null,null,-1)],64))),128)):(s(!0),d(i,{key:1},g(r.value,([t,r])=>(s(),d(i,{key:t},[w(`a`,{href:r,target:`_blank`,rel:`noopener noreferrer`},[w(`span`,{class:b(v(V)(r))},null,2),p(` `+e(t.replace(`link/`,``)),1)],8,Wn),n[3]||=w(`br`,null,null,-1)],64))),128))])])):C(``,!0)}},Kn=[`title`],qn=[`innerHTML`],Jn={key:1,class:`instance-badges`},Yn=[`href`],Xn={__name:`AnnotationRow`,props:{annotationKey:String,value:[String,Number,Boolean],kind:String,format:{type:String,default:null}},setup(n){let r=n,a=y(null);z(a);let c=f(()=>{let e=r.annotationKey.split(`/`);return e[e.length-1].replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/^./,e=>e.toUpperCase())}),l=f(()=>typeof r.value==`string`&&/^https?:\/\//.test(r.value)),u=f(()=>r.format!==`tag_list`||typeof r.value!=`string`?[]:r.value.split(`,`).map(e=>e.trim()).filter(Boolean));function m(e){return`/search?q=${encodeURIComponent(`${r.kind}: ${r.annotationKey} == "${e}"`)}`}return(r,f)=>{let h=o(`router-link`);return s(),d(`tr`,null,[w(`th`,{scope:`row`,title:v(G)(n.annotationKey)},e(c.value),9,Kn),w(`td`,null,[n.format===`markdown`?(s(),d(`div`,{key:0,ref_key:`mdEl`,ref:a,innerHTML:n.value},null,8,qn)):n.format===`tag_list`?(s(),d(`div`,Jn,[(s(!0),d(i,null,g(u.value,n=>(s(),t(h,{key:n,class:`badge badge-info`,to:m(n)},{default:T(()=>[p(e(n),1)]),_:2},1032,[`to`]))),128))])):n.format===`tag_word`?(s(),t(h,{key:2,class:`badge badge-info`,to:m(n.value)},{default:T(()=>[p(e(n.value),1)]),_:1},8,[`to`])):(s(),d(i,{key:3},[l.value?(s(),d(`a`,{key:0,href:n.value,target:`_blank`},e(n.value),9,Yn)):(s(),d(i,{key:1},[p(e(n.value),1)],64))],64))])])}}},Zn={class:`instance-title-text`},Qn={class:`instance-name`},$n={class:`instance-kind-subtitle`},er={key:0,class:`generated-badge`},tr={class:`generated-script`},nr={key:0,class:`generated-time`},rr={key:0,class:`view-pager`,role:`group`,"aria-label":`Diagram view`},ir=[`aria-pressed`],ar=[`aria-pressed`],or=[`innerHTML`],sr={key:2,class:`graph-container`},cr=[`innerHTML`],lr={key:3,class:`graph-too-large`},ur=[`innerHTML`],dr={class:`documentation`},fr=E({__name:`InstanceDetail`,props:{data:Object,kind:String,kindMeta:Object},setup(u){let m=u,x=y(``),E=y(null),O=!1,A=null,N=y(null);z(N);let{embeds:L,scanEmbeds:R}=I(),V=y(null);z(V);let H=f(()=>m.data.metadata?.annotations||{}),U=f(()=>Object.keys(m.data.relations||{}).length>0),W=f(()=>{let e=m.data.references||{};return U.value||Object.keys(e).length>0}),G=f(()=>H.value[`generated/script`]),K=f(()=>H.value[`generated/at`]),q=f(()=>H.value[`architecture/description`]),J=f(()=>m.data.diagram||``),Y=y(m.data.diagram?`diagram`:`graph`),te=[[`go`,`Go`],[`python`,`Python`],[`java`,`Java`],[`typescript`,`TypeScript`],[`javascript`,`JavaScript`],[`rust`,`Rust`],[`ruby`,`Ruby`],[`crystal`,`Crystal`],[`cpp`,`C++`],[`csharp`,`C#`],[`zig`,`Zig`],[`elixir`,`Elixir`]],ne=f(()=>{let e=te.filter(([e])=>H.value[`architecture/${e}/modules`]).map(([e,t])=>({label:`${t} Module Structure`,dot:H.value[`architecture/${e}/modules`]}));return!e.length&&H.value[`architecture/modules`]&&e.push({label:`Module Structure`,dot:H.value[`architecture/modules`]}),e}),re=[`scc/language/`,`repository/artifacts/`,`link/`,`team/`,`jira/`,`generated/`,`license/`],ie=new Set([`scc/languages`,`architecture/description`,`architecture/diagram`,`architecture/modules`,`workflow/platforms`,`workflow/types`,`agentic/tools`,`repository/artifacts`,`repository/git`,`repository/visibility`]),ae=[/^scc\/estimated(Cost|ScheduleMonths|People)$/,/^activity\/(commits|contributors(\/.*)?|status|busFactor|createdAt)$/,/^scc\/language\/.+\/loc$/,/^repository\/$/,/^architecture\/.+\/modules$/],oe=f(()=>Object.entries(H.value).filter(([e])=>!(ie.has(e)||re.some(t=>e.startsWith(t))||ae.some(t=>t.test(e)))));async function X(){if(O||!U.value)return;O=!0;let e=await S(m.kind,m.data.name);x.value=e?await k(e):``,await h(),se()}async function Z(e){Y.value=e,e===`graph`&&await X()}n(async()=>{Y.value===`graph`&&await X(),await h(),N.value&&(P(N.value),j(N.value),R(N.value))}),l(q,async()=>{await h(),N.value&&(P(N.value),j(N.value),R(N.value))}),_(()=>{A?.destroy()});function se(){if(!E.value)return;let e=E.value.querySelector(`svg`);e&&(A=M(e,E.value))}return(n,l)=>{let f=o(`router-link`);return s(),d(i,null,[w(`article`,null,[w(`header`,null,[w(`h2`,null,[u.kindMeta?(s(),d(`i`,{key:0,class:b(`iconoir-${u.kindMeta.icon} icon-${u.kindMeta.layer}`)},null,2)):C(``,!0),w(`div`,Zn,[w(`span`,Qn,e(v(B)(u.data.name,u.kind)),1),w(`span`,$n,e(u.kind),1)])]),G.value?(s(),d(`div`,er,[w(`span`,tr,[l[2]||=p(` by `,-1),a(f,{to:{name:`instance`,params:{kind:`Import`,instance:G.value}}},{default:T(()=>[p(e(G.value),1)]),_:1},8,[`to`])]),K.value?(s(),d(`span`,nr,` generated `+e(v(ee)(K.value)),1)):C(``,!0)])):(s(),t(f,{key:1,class:`btn-header`,to:`/kinds/${u.kind}/instances/${u.data.name}/edit`,title:`Edit this resource`},{default:T(()=>[...l[3]||=[w(`i`,{class:`iconoir-edit-pencil`},null,-1),p(` Edit `,-1)]]),_:1},8,[`to`]))]),J.value&&U.value?(s(),d(`div`,rr,[w(`button`,{type:`button`,class:b([`outline`,{secondary:Y.value!==`diagram`}]),"aria-pressed":Y.value===`diagram`,onClick:l[0]||=e=>Z(`diagram`)},[...l[4]||=[w(`i`,{class:`iconoir-developer`},null,-1),p(` Diagram `,-1)]],10,ir),w(`button`,{type:`button`,class:b([`outline`,{secondary:Y.value!==`graph`}]),"aria-pressed":Y.value===`graph`,onClick:l[1]||=e=>Z(`graph`)},[...l[5]||=[w(`i`,{class:`iconoir-graph-up`},null,-1),p(` Dependencies `,-1)]],10,ar)])):C(``,!0),J.value?c((s(),d(`div`,{key:1,ref_key:`diagramEl`,ref:V,class:`asd-diagram-wrap`,innerHTML:J.value},null,8,or)),[[D,Y.value===`diagram`]]):C(``,!0),U.value&&x.value?c((s(),d(`div`,sr,[w(`div`,{id:`graphviz`,ref_key:`graphEl`,ref:E,class:`canvas`,innerHTML:x.value},null,8,cr)],512)),[[D,Y.value===`graph`]]):W.value&&!U.value&&!J.value?(s(),d(`p`,lr,[...l[6]||=[w(`i`,{class:`iconoir-graph-up`},null,-1),p(` No outgoing dependencies — graph omitted `,-1)]])):C(``,!0),q.value?(s(),d(`div`,{key:4,ref_key:`descEl`,ref:N,innerHTML:q.value,class:b([`prose`,{footer:W.value}])},null,10,ur)):C(``,!0),(s(!0),d(i,null,g(v(L),e=>(s(),t(r,{key:e.key,to:e.el},[a(F,{kind:e.kind,name:e.name,spec:e.spec},null,8,[`kind`,`name`,`spec`])],8,[`to`]))),128))]),(s(!0),d(i,null,g(ne.value,e=>(s(),t(me,{key:e.label,dot:e.dot,label:e.label},null,8,[`dot`,`label`]))),128)),a(ge,{data:u.data},null,8,[`data`]),w(`article`,dr,[l[7]||=w(`header`,null,[w(`h2`,null,`Details`)],-1),w(`table`,null,[w(`tbody`,null,[a(Ce,{annotations:H.value},null,8,[`annotations`]),a(Ne,{annotations:H.value,kind:u.kind},null,8,[`annotations`,`kind`]),a(Ue,{annotations:H.value},null,8,[`annotations`]),a(Qe,{annotations:H.value},null,8,[`annotations`]),a(_t,{annotations:H.value,kind:u.kind},null,8,[`annotations`,`kind`]),a(qt,{annotations:H.value,instance:u.data},null,8,[`annotations`,`instance`]),a(Zt,{annotations:H.value,kind:u.kind},null,8,[`annotations`,`kind`]),a(Sn,{annotations:H.value,kind:u.kind},null,8,[`annotations`,`kind`]),a(kn,{annotations:H.value,kind:u.kind},null,8,[`annotations`,`kind`]),a(Bn,{annotations:H.value,kind:u.kind},null,8,[`annotations`,`kind`]),a(Gn,{annotations:H.value},null,8,[`annotations`]),(s(!0),d(i,null,g(oe.value,([e,n])=>(s(),t(Xn,{key:e,"annotation-key":e,value:n,kind:u.kind,format:u.data.annotation_formats?.[e]===`markdown`?`markdown`:null},null,8,[`annotation-key`,`value`,`kind`,`format`]))),128))])])]),a(Q,{data:u.data},null,8,[`data`])],64)}}},[[`__scopeId`,`data-v-83a233a2`]]),pr={class:`view-header`},mr={class:`instance-title-text`},hr={class:`instance-name`},gr=[`innerHTML`],_r={key:1,class:`view-query-display`},vr={class:`query-item`},yr={class:`query-value`},br={key:1},xr=E({__name:`ViewDetail`,props:{data:Object,kindMeta:Object},setup(n){let r=n,a=f(()=>r.data.metadata?.annotations||{}),o=f(()=>R(a.value)),c=f(()=>o.value.query),l=f(()=>a.value[`architecture/description`]),u=f(()=>o.value.fields),p=f(()=>o.value.sort),m=f(()=>o.value.showKind),h=y(null);return z(h),(r,a)=>(s(),d(i,null,[w(`article`,pr,[w(`header`,null,[w(`h2`,null,[n.kindMeta?(s(),d(`i`,{key:0,class:b(`iconoir-${n.kindMeta.icon} icon-${n.kindMeta.layer}`)},null,2)):C(``,!0),w(`div`,mr,[w(`span`,hr,e(v(B)(n.data.name,`View`)),1),a[0]||=w(`span`,{class:`instance-kind-subtitle`},`View`,-1)])])]),l.value?(s(),d(`div`,{key:0,ref_key:`descEl`,ref:h,class:`description-box prose`,innerHTML:l.value},null,8,gr)):C(``,!0),c.value?(s(),d(`div`,_r,[w(`p`,vr,[a[1]||=w(`span`,{class:`label`},`Query:`,-1),w(`code`,yr,e(c.value),1)])])):C(``,!0)]),c.value?(s(),t(A,{key:0,query:c.value,fields:u.value,sort:p.value,"show-kind":m.value},null,8,[`query`,`fields`,`sort`,`show-kind`])):C(``,!0),c.value?C(``,!0):(s(),d(`article`,br,[...a[2]||=[w(`p`,{class:`view-empty-state`},[w(`em`,null,`No query defined`)],-1)]]))],64))}},[[`__scopeId`,`data-v-42cbbc1c`]]),Sr={components:{RelationsGrid:Q,AnalysisResults:N},props:{data:Object,kindMeta:Object},setup(e){let t=f(()=>e.data.metadata?.annotations||{}),n=f(()=>t.value[`analysis/description`]),r=f(()=>t.value[`architecture/description`]),i=f(()=>t.value[`analysis/script`]),a=y(null);return z(a),{annotations:t,summary:n,description:r,analysisScript:i,descEl:a,displayName:B}}},Cr={class:`analysis-header`},wr={class:`instance-title-text`},Tr={class:`instance-name`},Er={class:`header-actions`},Dr={key:0,class:`analysis-summary`},Or=[`innerHTML`],kr={key:1};function Ar(n,r,c,l,u,f){let m=o(`router-link`),h=o(`AnalysisResults`),g=o(`RelationsGrid`);return s(),d(i,null,[w(`article`,Cr,[w(`header`,null,[w(`h2`,null,[c.kindMeta?(s(),d(`i`,{key:0,class:b(`iconoir-${c.kindMeta.icon} icon-${c.kindMeta.layer}`)},null,2)):C(``,!0),w(`div`,wr,[w(`span`,Tr,e(l.displayName(c.data.name,`Analysis`)),1),r[0]||=w(`span`,{class:`instance-kind-subtitle`},`Analysis`,-1)])]),w(`div`,Er,[a(m,{class:`btn-header`,to:`/kinds/Analysis/instances/${c.data.name}/edit`,title:`Edit this resource`},{default:T(()=>[...r[1]||=[w(`i`,{class:`iconoir-edit-pencil`},null,-1),p(` Edit `,-1)]]),_:1},8,[`to`])])]),l.summary?(s(),d(`p`,Dr,e(l.summary),1)):C(``,!0),l.description?(s(),d(`div`,{key:1,ref:`descEl`,class:`description-box prose`,innerHTML:l.description},null,8,Or)):C(``,!0)]),l.analysisScript?(s(),t(h,{key:0,name:c.data.name},null,8,[`name`])):(s(),d(`article`,kr,[...r[2]||=[w(`p`,{class:`analysis-empty-state`},[w(`i`,{class:`iconoir-warning-triangle`}),p(` No script defined for this analysis. `)],-1)]])),a(g,{data:c.data},null,8,[`data`])],64)}var jr=E(Sr,[[`render`,Ar],[`__scopeId`,`data-v-17b37dd1`]]),Mr={class:`import-header`},Nr={class:`instance-title-text`},Pr={class:`instance-name`},Fr={class:`header-actions`},Ir={key:0,class:`badge badge-primary`},Lr={key:1,class:`badge badge-warning`},Rr=[`innerHTML`],zr={key:0,class:`graph-container`},Br=[`innerHTML`],Vr={key:1,class:`graph-too-large`},Hr={key:2,class:`graph-too-large`},Ur={class:`import-configuration`},Wr={class:`import-metadata`},Gr={key:0,class:`import-meta-item`},Kr={key:1,class:`import-meta-item`},qr={key:2,class:`import-meta-item`},Jr={key:3,class:`import-meta-item status-enabled`},Yr={key:4,class:`import-meta-item status-disabled`},Xr={key:0,class:`import-output-path`},Zr={key:1,class:`import-config-section`,open:``},Qr={class:`import-config-table`},$r={scope:`row`},ei={key:0},ti=E({__name:`ImportDetail`,props:{data:Object,kindMeta:Object},setup(t){let r=t,c=y(``),l=y(null),u=null,m=y(null);z(m);let x=f(()=>r.data.metadata?.annotations||{}),E=f(()=>x.value[`import/handler`]),D=f(()=>x.value[`import/enabled`]!==`false`),O=f(()=>x.value[`import/cacheTime`]),A=f(()=>x.value[`import/priority`]),j=f(()=>x.value[`import/outputPath`]),N=f(()=>x.value[`architecture/description`]),P=f(()=>Object.entries(x.value).filter(([e])=>e.startsWith(`import/config/`)).map(([e,t])=>[e.replace(`import/config/`,``),t])),F=f(()=>{let e=r.data.relations||{};return Object.values(e).reduce((e,t)=>typeof t==`object`?e+Object.values(t).reduce((e,t)=>e+(Array.isArray(t)?t.length:0),0):e,0)}),I=f(()=>Object.keys(r.data.relations||{}).length>0),L=f(()=>{let e=r.data.references||{};return I.value||Object.keys(e).length>0}),R=f(()=>F.value>=50);n(async()=>{if(I.value&&!R.value){let e=await S(`Import`,r.data.name);c.value=e?await k(e):``,await h(),V()}}),_(()=>{u?.destroy()});function V(){if(!l.value)return;let e=l.value.querySelector(`svg`);e&&(u=M(e,l.value))}function H(e){return typeof e==`string`?e.startsWith(`http`)||e.startsWith(`git@`)||e.startsWith(`file://`):!1}return(n,r)=>{let u=o(`router-link`);return s(),d(i,null,[w(`article`,Mr,[w(`header`,null,[w(`h2`,null,[t.kindMeta?(s(),d(`i`,{key:0,class:b(`iconoir-${t.kindMeta.icon} icon-${t.kindMeta.layer}`)},null,2)):C(``,!0),w(`div`,Nr,[w(`span`,Pr,e(v(B)(t.data.name,`Import`)),1),r[0]||=w(`span`,{class:`instance-kind-subtitle`},`Import`,-1)])]),w(`div`,Fr,[E.value?(s(),d(`span`,Ir,e(E.value),1)):C(``,!0),D.value?C(``,!0):(s(),d(`span`,Lr,`Disabled`)),a(u,{class:`btn-header`,to:`/kinds/Import/instances/${t.data.name}/edit`,title:`Edit this resource`},{default:T(()=>[...r[1]||=[w(`i`,{class:`iconoir-edit-pencil`},null,-1),p(` Edit `,-1)]]),_:1},8,[`to`])])]),N.value?(s(),d(`div`,{key:0,ref_key:`descEl`,ref:m,class:`description-box prose`,innerHTML:N.value},null,8,Rr)):C(``,!0),L.value?(s(),d(i,{key:1},[I.value&&!R.value&&c.value?(s(),d(`div`,zr,[w(`div`,{id:`graphviz`,ref_key:`graphEl`,ref:l,class:`canvas`,innerHTML:c.value},null,8,Br)])):R.value?(s(),d(`p`,Vr,[r[2]||=w(`i`,{class:`iconoir-warning-triangle`},null,-1),p(` Graph too large to display (`+e(F.value)+` relations) `,1)])):I.value?C(``,!0):(s(),d(`p`,Hr,[...r[3]||=[w(`i`,{class:`iconoir-graph-up`},null,-1),p(` No outgoing dependencies — graph omitted `,-1)]]))],64)):C(``,!0)]),w(`article`,Ur,[r[11]||=w(`header`,null,[w(`h3`,null,[w(`i`,{class:`iconoir-settings`}),p(` Configuration`)])],-1),w(`div`,Wr,[E.value?(s(),d(`span`,Gr,[r[4]||=w(`i`,{class:`iconoir-code`},null,-1),p(` `+e(E.value),1)])):C(``,!0),O.value?(s(),d(`span`,Kr,[r[5]||=w(`i`,{class:`iconoir-timer`},null,-1),p(` `+e(O.value),1)])):C(``,!0),A.value?(s(),d(`span`,qr,[r[6]||=w(`i`,{class:`iconoir-sort-down`},null,-1),p(` Priority: `+e(A.value),1)])):C(``,!0),D.value?(s(),d(`span`,Jr,[...r[7]||=[w(`i`,{class:`iconoir-check-circle`},null,-1),p(` Enabled `,-1)]])):(s(),d(`span`,Yr,[...r[8]||=[w(`i`,{class:`iconoir-xmark-circle`},null,-1),p(` Disabled `,-1)]]))]),j.value?(s(),d(`div`,Xr,[r[9]||=w(`strong`,null,`Output:`,-1),w(`code`,null,e(j.value),1)])):C(``,!0),P.value.length?(s(),d(`details`,Zr,[r[10]||=w(`summary`,null,[w(`i`,{class:`iconoir-list`}),p(` Handler Settings `)],-1),w(`table`,Qr,[w(`tbody`,null,[(s(!0),d(i,null,g(P.value,([t,n])=>(s(),d(`tr`,{key:t},[w(`th`,$r,e(t),1),w(`td`,null,[H(n)?(s(),d(`code`,ei,e(n),1)):(s(),d(i,{key:1},[p(e(n),1)],64))])]))),128))])])])):C(``,!0)]),a(Q,{data:t.data},null,8,[`data`])],64)}}},[[`__scopeId`,`data-v-f0340aef`]]),ni={class:`page-actions`},ri={class:`page-resource`},ii={__name:`PageDetail`,props:{data:Object,kindMeta:Object},setup(t){return(n,r)=>{let c=o(`router-link`);return s(),d(i,null,[a(J,{name:t.data.name},{actions:T(()=>[w(`div`,ni,[w(`span`,ri,[t.kindMeta?(s(),d(`i`,{key:0,class:b(`iconoir-${t.kindMeta.icon} icon-${t.kindMeta.layer}`)},null,2)):C(``,!0),r[0]||=p(` Page `,-1),w(`code`,null,e(v(B)(t.data.name,`Page`)),1)]),a(c,{class:`btn-header`,to:{name:`page`,params:{name:t.data.name}},title:`Open in the handbook tree`},{default:T(()=>[...r[1]||=[w(`i`,{class:`iconoir-book`},null,-1),p(` Open in handbook `,-1)]]),_:1},8,[`to`]),a(c,{class:`btn-header`,to:`/kinds/Page/instances/${encodeURIComponent(t.data.name)}/edit`,title:`Edit this page`},{default:T(()=>[...r[2]||=[w(`i`,{class:`iconoir-edit-pencil`},null,-1),p(` Edit `,-1)]]),_:1},8,[`to`])])]),_:1},8,[`name`]),a(Q,{data:t.data},null,8,[`data`])],64)}}},ai={key:0},oi={key:1},si={__name:`InstanceRouter`,props:{kind:String,instance:String},setup(n){let r=n,a=O(),o=u(`kinds`),c=y(null),f=y(!0),m=y(null);async function h(){f.value=!0,m.value=null;try{c.value=await x(r.kind,r.instance),c.value.kind&&c.value.kind!==r.kind&&a.replace({name:`instance`,params:{kind:c.value.kind,instance:r.instance}})}catch(e){m.value=e.message}finally{f.value=!1}}l(()=>[r.kind,r.instance],h,{immediate:!0});function g(){return o.value?o.value.kinds.find(e=>e.kind===r.kind):null}return(r,a)=>f.value?(s(),d(`article`,ai,[...a[0]||=[w(`p`,null,`Loading...`,-1)]])):m.value?(s(),d(`article`,oi,[a[4]||=w(`header`,null,[w(`h2`,null,`Not Found`)],-1),w(`p`,null,[a[1]||=p(`Instance `,-1),w(`strong`,null,e(n.instance),1),a[2]||=p(` of kind `,-1),w(`strong`,null,e(n.kind),1),a[3]||=p(` was not found.`,-1)])])):c.value?(s(),d(i,{key:2},[n.kind===`View`?(s(),t(xr,{key:0,data:c.value,"kind-meta":g()},null,8,[`data`,`kind-meta`])):n.kind===`Analysis`?(s(),t(jr,{key:1,data:c.value,"kind-meta":g()},null,8,[`data`,`kind-meta`])):n.kind===`Import`?(s(),t(ti,{key:2,data:c.value,"kind-meta":g()},null,8,[`data`,`kind-meta`])):n.kind===`Page`?(s(),t(ii,{key:3,data:c.value,"kind-meta":g()},null,8,[`data`,`kind-meta`])):(s(),t(fr,{key:4,data:c.value,kind:n.kind,"kind-meta":g()},null,8,[`data`,`kind`,`kind-meta`]))],64)):C(``,!0)}};export{si as default};
|