From 0868bd25d1e7aeb7d9ef08768964da533771f6b1 Mon Sep 17 00:00:00 2001 From: quobix Date: Sat, 11 Jul 2026 18:09:14 -0400 Subject: [PATCH 1/3] add AsyncAPI support to printing press with schema diagrams and multi-spec rendering Introduce AsyncAPI spec handling across the printing press pipeline: new AsyncAPI collector, developer diagnostics, included-spec support, spec kind model, and action templates. Add mermaid schema diagram generation in diagramatron. Update aggregation, cross-referencing, HTML writing, rendering templates, and UI components (nav, ref list, model pages) with accompanying tests. --- diagramatron/mermaid_config.go | 8 +- diagramatron/mermaid_diagram.go | 32 +- diagramatron/schema_mermaid.go | 600 + diagramatron/schema_mermaid_test.go | 462 + go.mod | 6 +- go.sum | 12 +- printingpress/activity.go | 9 +- printingpress/agent_writer.go | 494 +- printingpress/agent_writer_test.go | 56 + printingpress/aggregate_api.go | 2 + printingpress/aggregate_discovery.go | 121 +- printingpress/aggregate_state_sqlite.go | 21 +- printingpress/aggregate_test.go | 183 + printingpress/aggregate_writer.go | 47 + printingpress/api.go | 198 +- printingpress/api_test.go | 1639 ++ printingpress/artifact_manifest_test.go | 6 + printingpress/collector.go | 86 +- printingpress/collector_asyncapi.go | 1538 ++ printingpress/collector_test.go | 88 + printingpress/config/config.go | 1 + printingpress/config/config_test.go | 2 + printingpress/crossref.go | 176 +- printingpress/developer_diagnostics.go | 2 + .../developer_diagnostics_asyncapi.go | 280 + printingpress/errors.go | 10 + printingpress/graph_builder.go | 226 + printingpress/html_hydration.go | 17 +- printingpress/html_writer.go | 50 +- printingpress/included_spec.go | 100 + printingpress/included_spec_test.go | 270 + printingpress/internal/pppaths/constants.go | 13 +- printingpress/json_artifacts.go | 41 +- printingpress/model/catalog.go | 2 + printingpress/model/models.go | 113 +- printingpress/model/spec_kind.go | 49 + printingpress/press.go | 141 +- printingpress/press_test.go | 29 + .../bootstrap_scripts/shared_nav_cache.js | 52 +- printingpress/render/helpers.go | 235 +- printingpress/render/helpers_test.go | 228 +- printingpress/render/layout_page_test.go | 15 + .../render/templ_asyncapi_action.templ | 10 + .../render/templ_asyncapi_action_templ.go | 127 + printingpress/render/templ_diagnostics.templ | 12 +- .../render/templ_diagnostics_templ.go | 25 +- printingpress/render/templ_model.templ | 281 +- printingpress/render/templ_model_templ.go | 1453 +- printingpress/render/templ_model_test.go | 33 + .../render/templ_model_type_index.templ | 15 +- .../render/templ_model_type_index_templ.go | 119 +- printingpress/render/templ_models_index.templ | 15 +- .../render/templ_models_index_templ.go | 121 +- printingpress/render/templ_nav.templ | 19 +- printingpress/render/templ_nav_templ.go | 126 +- printingpress/render/templ_operation.templ | 136 +- printingpress/render/templ_operation_templ.go | 1026 +- printingpress/render/templ_root.templ | 42 +- printingpress/render/templ_root_templ.go | 470 +- printingpress/render/templ_root_test.go | 57 + printingpress/serve/render.go | 2 + printingpress/serve/render_test.go | 36 + printingpress/spec_detection.go | 272 + printingpress/spec_detection_test.go | 104 + printingpress/spec_kind.go | 25 + printingpress/static/printing-press-lite.js | 1544 +- printingpress/static/printing-press.css | 264 +- printingpress/static/printing-press.js | 12448 ++++++++-------- .../class-diagram/class-diagram.css.ts | 1 + .../explorer/focused-explorer.css.ts | 1 + .../src/components/models/model-page.css.ts | 2 +- .../ui/src/components/models/model-page.ts | 30 + .../src/components/nav/nav-model-group.css.ts | 10 + .../ui/src/components/nav/nav-model-group.ts | 19 +- .../ui/src/components/nav/nav-operation.ts | 6 +- .../ui/src/components/nav/nav-tag.css.ts | 13 +- .../ui/src/components/nav/nav-tag.ts | 29 +- printingpress/ui/src/components/nav/nav.ts | 4 + .../operations/operation-responses.css.ts | 1 + .../components/shared/asyncapi-action.css.ts | 42 + .../src/components/shared/asyncapi-action.ts | 60 + .../shared/asyncapi-protocol.css.ts | 166 + .../components/shared/asyncapi-protocol.ts | 175 + .../shared/media-type-selector.css.ts | 10 + .../components/shared/media-type-selector.ts | 32 +- .../ui/src/components/shared/ref-list.css.ts | 2 +- .../ui/src/components/shared/ref-list.ts | 85 +- printingpress/ui/src/index.ts | 4 + printingpress/ui/src/styles/details.css.ts | 1 + printingpress/ui/src/utils/schema.ts | 4 + .../ui/test/pp-asyncapi-protocol.test.ts | 81 + .../ui/test/pp-media-type-selector.test.ts | 30 + printingpress/ui/test/pp-model-page.test.ts | 28 + printingpress/ui/test/pp-nav.test.ts | 110 + printingpress/ui/test/pp-ref-list.test.ts | 131 + 95 files changed, 19750 insertions(+), 7769 deletions(-) create mode 100644 diagramatron/schema_mermaid.go create mode 100644 diagramatron/schema_mermaid_test.go create mode 100644 printingpress/collector_asyncapi.go create mode 100644 printingpress/developer_diagnostics_asyncapi.go create mode 100644 printingpress/included_spec.go create mode 100644 printingpress/included_spec_test.go create mode 100644 printingpress/model/spec_kind.go create mode 100644 printingpress/render/templ_asyncapi_action.templ create mode 100644 printingpress/render/templ_asyncapi_action_templ.go create mode 100644 printingpress/render/templ_root_test.go create mode 100644 printingpress/serve/render_test.go create mode 100644 printingpress/spec_detection.go create mode 100644 printingpress/spec_detection_test.go create mode 100644 printingpress/spec_kind.go create mode 100644 printingpress/ui/src/components/shared/asyncapi-action.css.ts create mode 100644 printingpress/ui/src/components/shared/asyncapi-action.ts create mode 100644 printingpress/ui/src/components/shared/asyncapi-protocol.css.ts create mode 100644 printingpress/ui/src/components/shared/asyncapi-protocol.ts create mode 100644 printingpress/ui/test/pp-asyncapi-protocol.test.ts create mode 100644 printingpress/ui/test/pp-ref-list.test.ts diff --git a/diagramatron/mermaid_config.go b/diagramatron/mermaid_config.go index 33c37d4..34b3eb0 100644 --- a/diagramatron/mermaid_config.go +++ b/diagramatron/mermaid_config.go @@ -6,6 +6,9 @@ package diagramatron // MermaidConfig configures the mermaid diagram generation type MermaidConfig struct { MaxProperties int // max properties to show per class (default 20) + MaxSchemas int // max unique schemas traversed (default 500) + MaxRelationships int // max relationships retained (default 2000) + MaxDepth int // max recursive schema depth (default 100) IncludePrivate bool // include private members IncludeOperations bool // include operations/methods ShowCardinality bool // show relationship cardinality @@ -17,6 +20,9 @@ type MermaidConfig struct { func DefaultMermaidConfig() *MermaidConfig { return &MermaidConfig{ MaxProperties: 20, + MaxSchemas: 500, + MaxRelationships: 2000, + MaxDepth: 100, IncludePrivate: true, IncludeOperations: true, ShowCardinality: true, @@ -24,4 +30,4 @@ func DefaultMermaidConfig() *MermaidConfig { SimplifyNames: true, RenderTitledInlineSchema: true, // show inline schemas with titles as separate classes by default } -} \ No newline at end of file +} diff --git a/diagramatron/mermaid_diagram.go b/diagramatron/mermaid_diagram.go index 8c369c0..78846ae 100644 --- a/diagramatron/mermaid_diagram.go +++ b/diagramatron/mermaid_diagram.go @@ -12,6 +12,7 @@ import ( type MermaidDiagram struct { Classes map[string]*MermaidClass Relationships []*MermaidRelationship + Warnings []error Config *MermaidConfig classOrder []string // maintain insertion order } @@ -24,6 +25,7 @@ func NewMermaidDiagram(config *MermaidConfig) *MermaidDiagram { return &MermaidDiagram{ Classes: make(map[string]*MermaidClass), Relationships: []*MermaidRelationship{}, + Warnings: []error{}, Config: config, classOrder: []string{}, } @@ -81,6 +83,7 @@ func (md *MermaidDiagram) Render() string { type MermaidClass struct { ID string Name string + DisplayName string Type string // class, interface, abstract Annotations []string Properties []*MermaidMember @@ -113,7 +116,18 @@ func (mc *MermaidClass) AddMethod(member *MermaidMember) { func (mc *MermaidClass) Render(config *MermaidConfig) string { var sb strings.Builder - sb.WriteString(fmt.Sprintf(" class %s {\n", mc.ID)) + if mc.DisplayName != "" { + label := strings.NewReplacer( + `\`, `\\`, + `"`, `'`, + "]", "]", + "\r", " ", + "\n", " ", + ).Replace(mc.DisplayName) + sb.WriteString(fmt.Sprintf(" class %s[\"%s\"] {\n", mc.ID, label)) + } else { + sb.WriteString(fmt.Sprintf(" class %s {\n", mc.ID)) + } for _, annotation := range mc.Annotations { sb.WriteString(fmt.Sprintf(" <<%s>>\n", annotation)) @@ -173,13 +187,13 @@ type MermaidRelationship struct { type RelationType string const ( - RelationInheritance RelationType = "<|--" // inheritance - RelationComposition RelationType = "*--" // composition - RelationAggregation RelationType = "o--" // aggregation - RelationAssociation RelationType = "-->" // association - RelationDependency RelationType = "..>" // dependency - RelationRealization RelationType = "..|>" // realization - RelationNegation RelationType = "-.x" // negation (A is NOT B) + RelationInheritance RelationType = "<|--" // inheritance + RelationComposition RelationType = "*--" // composition + RelationAggregation RelationType = "o--" // aggregation + RelationAssociation RelationType = "-->" // association + RelationDependency RelationType = "..>" // dependency + RelationRealization RelationType = "..|>" // realization + RelationNegation RelationType = "-.x" // negation (A is NOT B) ) // Render generates the mermaid syntax for this relationship @@ -228,4 +242,4 @@ func sanitizeID(id string) string { } return string(result) -} \ No newline at end of file +} diff --git a/diagramatron/schema_mermaid.go b/diagramatron/schema_mermaid.go new file mode 100644 index 0000000..bfec735 --- /dev/null +++ b/diagramatron/schema_mermaid.go @@ -0,0 +1,600 @@ +// Copyright 2023-2026 Princess Beef Heavy Industries, LLC / Dave Shanley +// https://pb33f.io + +package diagramatron + +import ( + "context" + "fmt" + "hash/fnv" + "net/url" + "path/filepath" + "strings" + + "github.com/pb33f/libopenapi/datamodel/high/base" +) + +// SchemaIdentity is the stable name and location of a schema in an API contract. +// CanonicalPath must remain stable across aliases so recursive schemas terminate. +type SchemaIdentity struct { + CanonicalPath string + SourceLocation string + Name string + ClassID string +} + +// SchemaIdentityProvider identifies resolved schema proxies without resolving refs itself. +type SchemaIdentityProvider interface { + Identify(ctx context.Context, proxy *base.SchemaProxy, fallback SchemaIdentity) (SchemaIdentity, error) +} + +// SchemaDiagramInput contains the protocol-neutral inputs required to diagram a schema. +type SchemaDiagramInput struct { + Root *base.SchemaProxy + Identity SchemaIdentity + Identities SchemaIdentityProvider +} + +// MermaidifySchema creates a class diagram directly from a libopenapi schema proxy. +// It does not depend on Doctor parent chains or an OpenAPI document model. +func MermaidifySchema(ctx context.Context, input SchemaDiagramInput, config *MermaidConfig) *MermaidDiagram { + w := &schemaMermaidWalker{ + diagram: NewMermaidDiagram(config), + identities: input.Identities, + identityByPath: make(map[string]SchemaIdentity), + classIDOwner: make(map[string]string), + classIDByName: make(map[string]string), + classIDByRef: make(map[string]string), + active: make(map[string]struct{}), + completed: make(map[string]struct{}), + properties: NewPropertyAnalyzer(), + enums: NewEnumAnalyzer(EnumInline, 5), + } + if input.Root == nil { + return w.diagram + } + w.visit(ctx, input.Root, normalizeSchemaIdentity(input.Identity, "Schema")) + return w.diagram +} + +type schemaMermaidWalker struct { + diagram *MermaidDiagram + identities SchemaIdentityProvider + identityByPath map[string]SchemaIdentity + classIDOwner map[string]string + classIDByName map[string]string + classIDByRef map[string]string + active map[string]struct{} + completed map[string]struct{} + properties *PropertyAnalyzer + enums *EnumAnalyzer + depth int + relationships int +} + +func (w *schemaMermaidWalker) visit(ctx context.Context, proxy *base.SchemaProxy, fallback SchemaIdentity) SchemaIdentity { + if proxy == nil || ctx.Err() != nil { + return SchemaIdentity{} + } + referenceSource := fallback.SourceLocation + identity := w.identify(ctx, proxy, fallback) + known, exists := w.identityByPath[identity.CanonicalPath] + if exists { + identity = known + } + if _, ok := w.completed[identity.CanonicalPath]; ok { + return identity + } + if _, ok := w.active[identity.CanonicalPath]; ok { + return identity + } + if w.depth > 0 && w.relationshipBudgetReached() { + return SchemaIdentity{} + } + if w.diagram.Config.MaxDepth > 0 && w.depth >= w.diagram.Config.MaxDepth { + return SchemaIdentity{} + } + if w.diagram.Config.MaxSchemas > 0 && len(w.active)+len(w.completed) >= w.diagram.Config.MaxSchemas { + return SchemaIdentity{} + } + if !exists { + identity.ClassID = w.assignClassID(identity) + w.identityByPath[identity.CanonicalPath] = identity + w.recordClassName(identity.Name, identity.ClassID) + } + w.recordClassReference(referenceSource, proxy.GetReference(), identity.ClassID) + + schema := proxy.Schema() + if schema == nil { + w.diagram.AddClass(newSchemaMermaidClass(identity)) + w.completed[identity.CanonicalPath] = struct{}{} + return identity + } + w.active[identity.CanonicalPath] = struct{}{} + w.depth++ + defer delete(w.active, identity.CanonicalPath) + defer func() { w.depth-- }() + + class := newSchemaMermaidClass(identity) + if len(schema.Type) > 0 { + class.Annotations = append(class.Annotations, strings.Join(schema.Type, " | ")) + } + // Materialize the class before descending so recursive relationships never + // create implicit Mermaid classes outside the traversal budget. + w.diagram.AddClass(class) + w.addProperties(ctx, class, identity, schema) + w.addComposition(ctx, identity, schema) + w.addAdditionalProperties(ctx, identity, schema) + w.addSchemaKeywords(ctx, identity, schema) + w.addDiscriminatorMappings(ctx, identity, schema) + w.completed[identity.CanonicalPath] = struct{}{} + return identity +} + +func (w *schemaMermaidWalker) addProperties(ctx context.Context, class *MermaidClass, parent SchemaIdentity, schema *base.Schema) { + if schema.Properties == nil { + return + } + required := CreateRequiredMap(schema.Required) + count := 0 + for pair := schema.Properties.First(); pair != nil; pair = pair.Next() { + if w.traversalBudgetReached(ctx) { + break + } + if w.diagram.Config.MaxProperties > 0 && count >= w.diagram.Config.MaxProperties { + break + } + name, proxy := pair.Key(), pair.Value() + if proxy == nil { + continue + } + propertySchema := proxy.Schema() + typeName, target, cardinality := "", SchemaIdentity{}, "" + if !proxy.IsReference() && propertySchema != nil && (len(propertySchema.OneOf) > 0 || len(propertySchema.AnyOf) > 0 || len(propertySchema.AllOf) > 0) { + typeName = w.propertyComposition(ctx, parent, name, propertySchema, required[name]) + } else { + typeName, target, cardinality = w.propertyType(ctx, parent, name, proxy, propertySchema, required[name]) + } + displayName := name + if schema.Discriminator != nil && schema.Discriminator.PropertyName == name { + displayName += " (discriminator)" + } + if propertySchema != nil { + if enum := w.enums.AnalyzeEnum(propertySchema, name); enum != nil { + if value := w.enums.FormatEnumForInline(enum); value != "" { + displayName += fmt.Sprintf(" (enum:%s)", value) + } + } + if propertySchema.Format != "" { + displayName += fmt.Sprintf(" (format:%s)", propertySchema.Format) + } + } + class.AddProperty(&MermaidMember{ + Name: displayName, + Type: typeName, + Visibility: string(w.properties.DetermineVisibility(name, propertySchema, required)), + }) + count++ + if target.Name != "" { + w.addRelationship(&MermaidRelationship{ + Source: parent.ClassID, + Target: target.ClassID, + Type: RelationComposition, + Label: name, + Cardinality: cardinality, + }) + } + } +} + +func (w *schemaMermaidWalker) propertyComposition(ctx context.Context, parent SchemaIdentity, propertyName string, schema *base.Schema, required bool) string { + variants, relation, role := schema.OneOf, RelationAssociation, "oneOf" + if len(variants) == 0 { + variants, role = schema.AnyOf, "anyOf" + } + if len(variants) == 0 { + variants, relation, role = schema.AllOf, RelationComposition, "allOf" + } + types := make([]string, 0, len(variants)) + for i, proxy := range variants { + if w.traversalBudgetReached(ctx) { + break + } + if proxy == nil { + continue + } + if isSimplePrimitiveSchema(proxy.Schema()) { + typeName := "any" + if variant := proxy.Schema(); variant != nil && len(variant.Type) > 0 { + typeName = variant.Type[0] + } + types = append(types, typeName) + continue + } + fallback := childIdentity(parent, fmt.Sprintf("%s_%s%d", propertyName, role, i+1), referenceName(proxy.GetReference())) + target := w.visit(ctx, proxy, fallback) + if target.Name == "" { + types = append(types, sanitizeID(fallback.Name)) + break + } + types = append(types, sanitizeID(target.Name)) + w.addRelationship(&MermaidRelationship{Source: parent.ClassID, Target: target.ClassID, Type: relation, Label: propertyName}) + } + if len(types) == 0 { + types = append(types, "any") + } + result := strings.Join(types, " | ") + if !required { + result += "?" + } + return result +} + +func (w *schemaMermaidWalker) propertyType(ctx context.Context, parent SchemaIdentity, name string, proxy *base.SchemaProxy, schema *base.Schema, required bool) (string, SchemaIdentity, string) { + optional := "" + if !required { + optional = "?" + } + if proxy.IsReference() { + fallback := childIdentity(parent, name, referenceName(proxy.GetReference())) + target := w.visit(ctx, proxy, fallback) + return sanitizeID(firstNonEmptyString(target.Name, fallback.Name, "any")) + optional, target, "" + } + if schema == nil { + return "any" + optional, SchemaIdentity{}, "" + } + if schema.Items != nil && schema.Items.IsA() && schema.Items.A != nil { + item := schema.Items.A + if item.IsReference() || isRelationalSchema(item.Schema()) { + fallback := childIdentity(parent, name+"Item", referenceName(item.GetReference())) + target := w.visit(ctx, item, fallback) + return sanitizeID(firstNonEmptyString(target.Name, fallback.Name, "any")) + "[]" + optional, target, w.collectionCardinality(schema) + } + } + if isRelationalSchema(schema) && schema.Properties != nil && schema.Properties.Len() > 0 { + fallback := childIdentity(parent, name, firstNonEmptyString(schema.Title, parent.Name+"_"+name)) + target := w.visit(ctx, proxy, fallback) + return sanitizeID(firstNonEmptyString(target.Name, fallback.Name, "any")) + optional, target, "" + } + typeName := w.properties.GenerateTypeString(schema, name, map[string]bool{name: required}) + return typeName, SchemaIdentity{}, "" +} + +func (w *schemaMermaidWalker) addComposition(ctx context.Context, parent SchemaIdentity, schema *base.Schema) { + w.addCompositionMembers(ctx, parent, schema.AllOf, RelationInheritance, "extends", "allOf") + w.addCompositionMembers(ctx, parent, schema.OneOf, RelationRealization, "oneOf", "oneOf") + w.addCompositionMembers(ctx, parent, schema.AnyOf, RelationRealization, "anyOf", "anyOf") + for i, proxy := range schema.PrefixItems { + if w.traversalBudgetReached(ctx) { + break + } + w.addRelatedProxy(ctx, parent, proxy, RelationComposition, fmt.Sprintf("prefixItems[%d]", i), "") + } +} + +func (w *schemaMermaidWalker) addCompositionMembers(ctx context.Context, parent SchemaIdentity, proxies []*base.SchemaProxy, relation RelationType, label, role string) { + for i, proxy := range proxies { + if w.traversalBudgetReached(ctx) { + break + } + if proxy == nil || isSimplePrimitiveSchema(proxy.Schema()) { + continue + } + fallback := childIdentity(parent, fmt.Sprintf("%s%d", role, i+1), referenceName(proxy.GetReference())) + target := w.visit(ctx, proxy, fallback) + if target.Name == "" { + continue + } + source, destination := parent.ClassID, target.ClassID + if relation == RelationInheritance { + source, destination = target.ClassID, parent.ClassID + } + w.addRelationship(&MermaidRelationship{Source: source, Target: destination, Type: relation, Label: label}) + } +} + +func (w *schemaMermaidWalker) addAdditionalProperties(ctx context.Context, parent SchemaIdentity, schema *base.Schema) { + if schema.AdditionalProperties == nil || !schema.AdditionalProperties.IsA() || schema.AdditionalProperties.A == nil { + return + } + w.addRelatedProxy(ctx, parent, schema.AdditionalProperties.A, RelationComposition, "additionalProperties", "0..*") +} + +func (w *schemaMermaidWalker) addSchemaKeywords(ctx context.Context, parent SchemaIdentity, schema *base.Schema) { + if schema.Items != nil && schema.Items.IsA() { + w.addRelatedProxy(ctx, parent, schema.Items.A, RelationComposition, "items", w.collectionCardinality(schema)) + } + w.addRelatedProxy(ctx, parent, schema.Contains, RelationComposition, "contains", "") + w.addRelatedProxy(ctx, parent, schema.If, RelationDependency, "if", "") + w.addRelatedProxy(ctx, parent, schema.Then, RelationDependency, "then", "") + w.addRelatedProxy(ctx, parent, schema.Else, RelationDependency, "else", "") + w.addRelatedProxy(ctx, parent, schema.Not, RelationNegation, "not", "") + w.addRelatedProxy(ctx, parent, schema.PropertyNames, RelationDependency, "propertyNames", "") + w.addRelatedProxy(ctx, parent, schema.UnevaluatedItems, RelationComposition, "unevaluatedItems", "") + w.addRelatedProxy(ctx, parent, schema.ContentSchema, RelationComposition, "contentSchema", "") + if schema.UnevaluatedProperties != nil && schema.UnevaluatedProperties.IsA() { + w.addRelatedProxy(ctx, parent, schema.UnevaluatedProperties.A, RelationComposition, "unevaluatedProperties", "0..*") + } + if schema.DependentSchemas != nil { + for pair := schema.DependentSchemas.First(); pair != nil; pair = pair.Next() { + if w.traversalBudgetReached(ctx) { + break + } + w.addRelatedProxy(ctx, parent, pair.Value(), RelationDependency, "dependentSchemas."+pair.Key(), "") + } + } + if schema.PatternProperties != nil { + for pair := schema.PatternProperties.First(); pair != nil; pair = pair.Next() { + if w.traversalBudgetReached(ctx) { + break + } + w.addRelatedProxy(ctx, parent, pair.Value(), RelationComposition, "patternProperties."+pair.Key(), "0..*") + } + } +} + +func (w *schemaMermaidWalker) addDiscriminatorMappings(ctx context.Context, parent SchemaIdentity, schema *base.Schema) { + if schema.Discriminator == nil || schema.Discriminator.Mapping == nil { + return + } + for pair := schema.Discriminator.Mapping.First(); pair != nil; pair = pair.Next() { + ref := pair.Value() + if ref == "" { + continue + } + // Mappings are normally also represented by oneOf/anyOf proxies. Add a + // relationship only when the mapped class has already been materialized. + classID := w.classIDByRef[schemaReferenceKey(parent.SourceLocation, ref)] + if classID == "" { + classID = w.classIDByName[referenceName(ref)] + } + if classID != "" && w.diagram.HasClass(classID) { + w.addRelationship(&MermaidRelationship{Source: parent.ClassID, Target: classID, Type: RelationRealization, Label: pair.Key()}) + } + } +} + +func (w *schemaMermaidWalker) addRelatedProxy(ctx context.Context, parent SchemaIdentity, proxy *base.SchemaProxy, relation RelationType, label, cardinality string) { + if proxy == nil || w.traversalBudgetReached(ctx) || (!proxy.IsReference() && isSimplePrimitiveSchema(proxy.Schema())) { + return + } + target := w.visit(ctx, proxy, childIdentity(parent, label, referenceName(proxy.GetReference()))) + if target.Name != "" { + w.addRelationship(&MermaidRelationship{Source: parent.ClassID, Target: target.ClassID, Type: relation, Label: label, Cardinality: cardinality}) + } +} + +func (w *schemaMermaidWalker) addRelationship(relationship *MermaidRelationship) { + if relationship == nil || relationship.Source == "" || relationship.Target == "" { + return + } + if w.diagram.Config.MaxRelationships > 0 && w.relationships >= w.diagram.Config.MaxRelationships { + return + } + before := len(w.diagram.Relationships) + w.diagram.AddRelationship(relationship) + if len(w.diagram.Relationships) > before { + w.relationships++ + } +} + +func (w *schemaMermaidWalker) relationshipBudgetReached() bool { + return w.diagram.Config.MaxRelationships > 0 && w.relationships >= w.diagram.Config.MaxRelationships +} + +func (w *schemaMermaidWalker) traversalBudgetReached(ctx context.Context) bool { + if ctx.Err() != nil || w.relationshipBudgetReached() { + return true + } + if w.diagram.Config.MaxDepth > 0 && w.depth >= w.diagram.Config.MaxDepth { + return true + } + return w.diagram.Config.MaxSchemas > 0 && len(w.active)+len(w.completed) >= w.diagram.Config.MaxSchemas +} + +func (w *schemaMermaidWalker) assignClassID(identity SchemaIdentity) string { + baseID := sanitizeID(firstNonEmptyString(identity.ClassID, identity.Name, "Schema")) + if owner := w.classIDOwner[baseID]; owner == "" || owner == identity.CanonicalPath { + w.classIDOwner[baseID] = identity.CanonicalPath + return baseID + } + hash := fnv.New32a() + _, _ = hash.Write([]byte(identity.CanonicalPath)) + classID := fmt.Sprintf("%s_%08x", baseID, hash.Sum32()) + for w.classIDOwner[classID] != "" && w.classIDOwner[classID] != identity.CanonicalPath { + _, _ = hash.Write([]byte("_")) + classID = fmt.Sprintf("%s_%08x", baseID, hash.Sum32()) + } + w.classIDOwner[classID] = identity.CanonicalPath + return classID +} + +func (w *schemaMermaidWalker) recordClassName(name, classID string) { + if name == "" || classID == "" { + return + } + if existing, ok := w.classIDByName[name]; ok && existing != classID { + w.classIDByName[name] = "" + return + } + w.classIDByName[name] = classID +} + +func (w *schemaMermaidWalker) recordClassReference(source, ref, classID string) { + key := schemaReferenceKey(source, ref) + if key == "" || classID == "" { + return + } + if existing, ok := w.classIDByRef[key]; ok && existing != classID { + w.classIDByRef[key] = "" + return + } + w.classIDByRef[key] = classID +} + +func newSchemaMermaidClass(identity SchemaIdentity) *MermaidClass { + class := NewMermaidClass(identity.ClassID, identity.Name) + if identity.Name != "" && class.ID != identity.Name { + class.DisplayName = identity.Name + } + return class +} + +func schemaReferenceKey(source, ref string) string { + source = strings.TrimSpace(source) + ref = strings.TrimSpace(ref) + if ref == "" { + return "" + } + if sourceURL, err := url.Parse(source); err == nil && sourceURL.Scheme != "" { + if refURL, parseErr := url.Parse(ref); parseErr == nil { + return sourceURL.ResolveReference(refURL).String() + } + } + refPath, fragment, hasFragment := strings.Cut(ref, "#") + target := source + if refPath != "" { + if filepath.IsAbs(refPath) { + target = filepath.Clean(refPath) + } else if source != "" { + target = filepath.Join(filepath.Dir(source), filepath.FromSlash(refPath)) + } else { + target = filepath.Clean(filepath.FromSlash(refPath)) + } + } + target = filepath.ToSlash(filepath.Clean(target)) + if hasFragment { + return target + "#" + fragment + } + return target +} + +func (w *schemaMermaidWalker) identify(ctx context.Context, proxy *base.SchemaProxy, fallback SchemaIdentity) SchemaIdentity { + fallback = normalizeSchemaIdentity(fallback, "Schema") + if w.identities != nil { + if identity, err := w.identities.Identify(ctx, proxy, fallback); err == nil { + return normalizeSchemaIdentity(identity, fallback.Name) + } else { + w.diagram.Warnings = append(w.diagram.Warnings, fmt.Errorf("identify schema %q: %w", fallback.Name, err)) + } + } + if proxy == nil { + return fallback + } + ref := proxy.GetReference() + if name := referenceName(ref); name != "" { + fallback.Name = name + } + resolvedSchema := proxy.Schema() + if resolvedSchema != nil && fallback.Name == "Schema" && resolvedSchema.Title != "" { + fallback.Name = resolvedSchema.Title + } + if resolvedSchema != nil && resolvedSchema.GoLow() != nil { + resolved := resolvedSchema.GoLow() + if idx := resolved.GetIndex(); idx != nil { + fallback.SourceLocation = idx.GetSpecAbsolutePath() + } + if root := resolved.GetRootNode(); root != nil { + fallback.CanonicalPath = fmt.Sprintf("%s#L%dC%d", fallback.SourceLocation, root.Line, root.Column) + } + return normalizeSchemaIdentity(fallback, "Schema") + } + if origin := proxy.GetReferenceOrigin(); origin != nil { + location := firstNonEmptyString(origin.AbsoluteLocationValue, origin.AbsoluteLocation) + line := origin.LineValue + if line == 0 { + line = origin.Line + } + fallback.SourceLocation = location + if !strings.HasPrefix(ref, "#") && location != "" && line > 0 { + fallback.CanonicalPath = fmt.Sprintf("%s#L%d", location, line) + } + } + if strings.HasPrefix(ref, "#") { + fallback.CanonicalPath = fallback.SourceLocation + "|" + ref + } else if ref != "" && fallback.CanonicalPath == "" { + fallback.CanonicalPath = fallback.SourceLocation + "|" + ref + } + if low := proxy.GoLow(); low != nil { + if idx := low.GetIndex(); idx != nil { + if fallback.SourceLocation == "" { + fallback.SourceLocation = idx.GetSpecAbsolutePath() + } + } + if node := low.GetValueNode(); node != nil && ref == "" { + fallback.CanonicalPath = fmt.Sprintf("%s#L%dC%d", fallback.SourceLocation, node.Line, node.Column) + } + } + return normalizeSchemaIdentity(fallback, "Schema") +} + +func (w *schemaMermaidWalker) collectionCardinality(schema *base.Schema) string { + if !w.diagram.Config.ShowCardinality { + return "" + } + min, max := "0", "*" + if schema.MinItems != nil { + min = fmt.Sprintf("%d", *schema.MinItems) + } + if schema.MaxItems != nil { + max = fmt.Sprintf("%d", *schema.MaxItems) + } + return min + ".." + max +} + +func childIdentity(parent SchemaIdentity, role, preferredName string) SchemaIdentity { + name := firstNonEmptyString(preferredName, parent.Name+"_"+role) + return SchemaIdentity{ + CanonicalPath: strings.TrimSuffix(parent.CanonicalPath, "/") + "/" + role, + SourceLocation: parent.SourceLocation, + Name: name, + } +} + +func normalizeSchemaIdentity(identity SchemaIdentity, fallbackName string) SchemaIdentity { + identity.Name = firstNonEmptyString(identity.Name, fallbackName, "Schema") + if identity.CanonicalPath == "" { + identity.CanonicalPath = identity.SourceLocation + "#" + identity.Name + } + return identity +} + +func referenceName(ref string) string { + if ref == "" { + return "" + } + return ExtractSchemaNameFromReference(ref) +} + +func isRelationalSchema(schema *base.Schema) bool { + if schema == nil { + return false + } + return (schema.Properties != nil && schema.Properties.Len() > 0) || len(schema.AllOf) > 0 || len(schema.OneOf) > 0 || len(schema.AnyOf) > 0 || + (schema.Items != nil && schema.Items.IsA() && schema.Items.A != nil) || + (schema.AdditionalProperties != nil && schema.AdditionalProperties.IsA() && schema.AdditionalProperties.A != nil) +} + +func isSimplePrimitiveSchema(schema *base.Schema) bool { + if schema == nil || isRelationalSchema(schema) || schema.Title != "" { + return false + } + if len(schema.Type) == 0 { + return false + } + switch schema.Type[0] { + case "string", "number", "integer", "boolean", "null": + return true + default: + return false + } +} + +func firstNonEmptyString(values ...string) string { + for _, value := range values { + if value != "" { + return value + } + } + return "" +} diff --git a/diagramatron/schema_mermaid_test.go b/diagramatron/schema_mermaid_test.go new file mode 100644 index 0000000..2e6dfb6 --- /dev/null +++ b/diagramatron/schema_mermaid_test.go @@ -0,0 +1,462 @@ +// Copyright 2023-2026 Princess Beef Heavy Industries, LLC / Dave Shanley +// https://pb33f.io + +package diagramatron + +import ( + "context" + "errors" + "fmt" + "os" + "path/filepath" + "testing" + + "github.com/pb33f/libopenapi" + "github.com/pb33f/libopenapi/datamodel" + "github.com/pb33f/libopenapi/datamodel/high/base" + "github.com/pb33f/libopenapi/orderedmap" + "github.com/pb33f/testify/assert" + "github.com/pb33f/testify/require" +) + +func TestMermaidifySchema_ReferencesCollectionsAndInlineObjects(t *testing.T) { + root := neutralSchemaFromSpec(t, ` +openapi: 3.1.0 +info: {title: Test, version: 1.0.0} +paths: {} +components: + schemas: + Event: + type: object + required: [sentAt, readings] + properties: + sentAt: + $ref: '#/components/schemas/SentAt' + readings: + type: array + minItems: 1 + items: + $ref: '#/components/schemas/Reading' + details: + type: object + properties: + source: + type: string + additionalProperties: + $ref: '#/components/schemas/Metadata' + SentAt: + type: string + format: date-time + Reading: + type: object + properties: + lumens: + type: integer + Metadata: + type: object + properties: + value: + type: string +`, "Event") + + diagram := MermaidifySchema(context.Background(), SchemaDiagramInput{ + Root: root, + Identity: SchemaIdentity{ + CanonicalPath: "#/components/schemas/Event", + Name: "Event", + }, + }, DefaultMermaidConfig()) + + result := diagram.Render() + assert.Contains(t, result, "class Event") + assert.Contains(t, result, "class SentAt") + assert.Contains(t, result, "class Reading") + assert.Contains(t, result, "class Event_details") + assert.Contains(t, result, "class Metadata") + assert.Contains(t, result, "#SentAt sentAt (format:date-time)") + assert.Contains(t, result, "#Reading[] readings") + assert.Contains(t, result, "Event *-- SentAt : sentAt") + assert.Contains(t, result, "Event *-- Reading : readings 1..*") + assert.Contains(t, result, "Event *-- Event_details : details") + assert.Contains(t, result, "Event *-- Metadata : additionalProperties 0..*") +} + +func TestMermaidifySchema_CompositionAndCycles(t *testing.T) { + root := neutralSchemaFromSpec(t, ` +openapi: 3.1.0 +info: {title: Test, version: 1.0.0} +paths: {} +components: + schemas: + Envelope: + allOf: + - $ref: '#/components/schemas/Base' + - type: object + properties: + payload: + oneOf: + - $ref: '#/components/schemas/TextPayload' + - $ref: '#/components/schemas/BinaryPayload' + Base: + type: object + properties: + parent: + $ref: '#/components/schemas/Envelope' + TextPayload: + type: object + properties: + text: {type: string} + BinaryPayload: + type: object + properties: + data: {type: string, format: byte} +`, "Envelope") + + diagram := MermaidifySchema(context.Background(), SchemaDiagramInput{ + Root: root, + Identity: SchemaIdentity{CanonicalPath: "#/components/schemas/Envelope", Name: "Envelope"}, + }, DefaultMermaidConfig()) + + result := diagram.Render() + assert.Contains(t, result, "Base <|-- Envelope : extends") + assert.Contains(t, result, "Base *-- Envelope : parent") + assert.Contains(t, result, "TextPayload | BinaryPayload? payload") + assert.Contains(t, result, "Envelope_allOf2 --> TextPayload : payload") + assert.Contains(t, result, "Envelope_allOf2 --> BinaryPayload : payload") + assert.LessOrEqual(t, len(diagram.Classes), 5, "cycle traversal must not duplicate classes") +} + +func TestMermaidifySchema_EmptyAndPrimitive(t *testing.T) { + assert.Empty(t, MermaidifySchema(context.Background(), SchemaDiagramInput{}, nil).Relationships) + primitive := base.CreateSchemaProxy(&base.Schema{Type: []string{"string"}}) + diagram := MermaidifySchema(context.Background(), SchemaDiagramInput{ + Root: primitive, + Identity: SchemaIdentity{CanonicalPath: "#/components/schemas/ID", Name: "ID"}, + }, nil) + assert.Empty(t, diagram.Relationships) + assert.Contains(t, diagram.Render(), "class ID") +} + +func TestMermaidifySchema_UnresolvedReferenceProducesPartialDiagram(t *testing.T) { + properties := orderedmap.New[string, *base.SchemaProxy]() + properties.Set("missing", base.CreateSchemaProxyRef("#/components/schemas/Missing")) + root := base.CreateSchemaProxy(&base.Schema{Type: []string{"object"}, Properties: properties}) + + diagram := MermaidifySchema(context.Background(), SchemaDiagramInput{ + Root: root, + Identity: SchemaIdentity{CanonicalPath: "#/components/schemas/Root", Name: "Root"}, + }, nil) + + assert.Contains(t, diagram.Render(), "Root *-- Missing : missing") + assert.Contains(t, diagram.Render(), "class Root") + assert.Contains(t, diagram.Render(), "class Missing") +} + +func TestMermaidifySchema_AliasesShareResolvedIdentity(t *testing.T) { + root := neutralSchemaFromSpec(t, ` +openapi: 3.1.0 +info: {title: Test, version: 1.0.0} +paths: {} +components: + schemas: + Root: + type: object + properties: + first: {$ref: '#/components/schemas/AliasA'} + second: {$ref: '#/components/schemas/AliasB'} + AliasA: {$ref: '#/components/schemas/Target'} + AliasB: {$ref: '#/components/schemas/Target'} + Target: + type: object + properties: + value: {type: string} +`, "Root") + + diagram := MermaidifySchema(context.Background(), SchemaDiagramInput{ + Root: root, + Identity: SchemaIdentity{CanonicalPath: "#/components/schemas/Root", Name: "Root"}, + }, nil) + + result := diagram.Render() + assert.Contains(t, result, "Root *-- AliasA : first") + assert.Contains(t, result, "Root *-- AliasA : second") + assert.Equal(t, 2, len(diagram.Classes), "aliases of one resolved schema must not duplicate classes") +} + +func TestMermaidifySchema_SanitizedNameCollisionsRemainDistinct(t *testing.T) { + root := neutralSchemaFromSpec(t, ` +openapi: 3.1.0 +info: {title: Test, version: 1.0.0} +paths: {} +components: + schemas: + Root: + type: object + properties: + dash: {$ref: '#/components/schemas/foo-bar'} + underscore: {$ref: '#/components/schemas/foo_bar'} + foo-bar: + type: object + properties: {a: {type: string}} + foo_bar: + type: object + properties: {b: {type: string}} +`, "Root") + + diagram := MermaidifySchema(context.Background(), SchemaDiagramInput{ + Root: root, + Identity: SchemaIdentity{CanonicalPath: "#/components/schemas/Root", Name: "Root"}, + }, nil) + result := diagram.Render() + + assert.Contains(t, result, `class foo_bar["foo-bar"] {`) + assert.Contains(t, result, `class foo_bar_`) + assert.Contains(t, result, `["foo_bar"]`) + assert.Equal(t, 3, len(diagram.Classes)) + assert.Len(t, diagram.Relationships, 2) + assert.NotEqual(t, diagram.Relationships[0].Target, diagram.Relationships[1].Target) +} + +func TestMermaidClass_LabelEscaping(t *testing.T) { + class := NewMermaidClass("safe_id", "unsafe\nname]\\\"quoted") + class.DisplayName = class.Name + result := class.Render(DefaultMermaidConfig()) + + assert.Contains(t, result, `class safe_id["unsafe name]\\'quoted"] {`) + assert.NotContains(t, result, "\nname") +} + +func TestMermaidClass_LegacyNameDoesNotBecomeDisplayLabel(t *testing.T) { + class := NewMermaidClass("BookingPayment", "schemas_BookingPayment") + + result := class.Render(DefaultMermaidConfig()) + + assert.Contains(t, result, "class BookingPayment {") + assert.NotContains(t, result, "schemas_BookingPayment") +} + +func TestNewSchemaMermaidClass_PreservesNameWhenIDSanitizes(t *testing.T) { + class := newSchemaMermaidClass(SchemaIdentity{ClassID: "Order Item", Name: "Order Item"}) + + assert.Equal(t, "Order_Item", class.ID) + assert.Equal(t, "Order Item", class.DisplayName) + assert.Contains(t, class.Render(DefaultMermaidConfig()), `class Order_Item["Order Item"] {`) +} + +func TestMermaidifySchema_TraversalBudgets(t *testing.T) { + properties := orderedmap.New[string, *base.SchemaProxy]() + for _, name := range []string{"one", "two", "three"} { + childProperties := orderedmap.New[string, *base.SchemaProxy]() + childProperties.Set("value", base.CreateSchemaProxy(&base.Schema{Type: []string{"string"}})) + properties.Set(name, base.CreateSchemaProxy(&base.Schema{Type: []string{"object"}, Title: name, Properties: childProperties})) + } + root := base.CreateSchemaProxy(&base.Schema{Type: []string{"object"}, Properties: properties}) + config := DefaultMermaidConfig() + config.MaxProperties = 1 + config.MaxSchemas = 2 + config.MaxRelationships = 1 + config.MaxDepth = 2 + + diagram := MermaidifySchema(context.Background(), SchemaDiagramInput{ + Root: root, + Identity: SchemaIdentity{CanonicalPath: "root", Name: "Root"}, + }, config) + + assert.LessOrEqual(t, len(diagram.Classes), 2) + assert.LessOrEqual(t, len(diagram.Relationships), 1) + require.NotNil(t, diagram.Classes["Root"]) + assert.Len(t, diagram.Classes["Root"].Properties, 1) + for _, relationship := range diagram.Relationships { + assert.True(t, diagram.HasClass(relationship.Source)) + assert.True(t, diagram.HasClass(relationship.Target)) + } +} + +func TestMermaidifySchema_RelationshipBudgetStopsWideTraversal(t *testing.T) { + variants := make([]*base.SchemaProxy, 0, 100) + for i := 0; i < 100; i++ { + properties := orderedmap.New[string, *base.SchemaProxy]() + properties.Set("value", base.CreateSchemaProxy(&base.Schema{Type: []string{"string"}})) + variants = append(variants, base.CreateSchemaProxy(&base.Schema{Type: []string{"object"}, Title: fmt.Sprintf("Variant%d", i), Properties: properties})) + } + root := base.CreateSchemaProxy(&base.Schema{Type: []string{"object"}, OneOf: variants}) + config := DefaultMermaidConfig() + config.MaxSchemas = 10 + config.MaxRelationships = 2 + + diagram := MermaidifySchema(context.Background(), SchemaDiagramInput{ + Root: root, + Identity: SchemaIdentity{CanonicalPath: "root", Name: "Root"}, + }, config) + + assert.LessOrEqual(t, len(diagram.Classes), 3) + assert.Len(t, diagram.Relationships, 2) + for _, relationship := range diagram.Relationships { + assert.True(t, diagram.HasClass(relationship.Source)) + assert.True(t, diagram.HasClass(relationship.Target)) + } +} + +func TestMermaidifySchema_BudgetedReferenceKeepsPropertyType(t *testing.T) { + config := DefaultMermaidConfig() + config.MaxSchemas = 1 + w := &schemaMermaidWalker{ + diagram: NewMermaidDiagram(config), + identityByPath: make(map[string]SchemaIdentity), + classIDOwner: make(map[string]string), + classIDByName: make(map[string]string), + active: map[string]struct{}{"root": {}}, + completed: make(map[string]struct{}), + } + + typeName, target, _ := w.propertyType( + context.Background(), + SchemaIdentity{CanonicalPath: "root", Name: "Root"}, + "child", + base.CreateSchemaProxyRef("#/components/schemas/Child"), + nil, + false, + ) + + assert.Equal(t, "Child?", typeName) + assert.Empty(t, target.Name) +} + +func TestMermaidifySchema_MultiFileFragmentsRemainDistinct(t *testing.T) { + dir := t.TempDir() + external := func(property string) []byte { + return []byte("components:\n schemas:\n Shared:\n type: object\n properties:\n " + property + ": {type: string}\n") + } + require.NoError(t, os.WriteFile(filepath.Join(dir, "a.yaml"), external("fromA"), 0o600)) + require.NoError(t, os.WriteFile(filepath.Join(dir, "b.yaml"), external("fromB"), 0o600)) + main := []byte(`openapi: 3.1.0 +info: {title: Test, version: 1.0.0} +paths: {} +components: + schemas: + Root: + type: object + properties: + a: {$ref: 'a.yaml#/components/schemas/Shared'} + b: {$ref: 'b.yaml#/components/schemas/Shared'} +`) + config := datamodel.NewDocumentConfiguration() + config.BasePath = dir + config.SpecFilePath = "root.yaml" + config.AllowFileReferences = true + doc, err := libopenapi.NewDocumentWithConfiguration(main, config) + require.NoError(t, err) + model, buildErr := doc.BuildV3Model() + require.NoError(t, buildErr) + root := model.Model.Components.Schemas.GetOrZero("Root") + require.NotNil(t, root) + + diagram := MermaidifySchema(context.Background(), SchemaDiagramInput{ + Root: root, + Identity: SchemaIdentity{CanonicalPath: "#/components/schemas/Root", Name: "Root"}, + }, nil) + + assert.Equal(t, 3, len(diagram.Classes)) + assert.Len(t, diagram.Relationships, 2) + assert.NotEqual(t, diagram.Relationships[0].Target, diagram.Relationships[1].Target) + assert.Contains(t, diagram.Render(), "fromA") + assert.Contains(t, diagram.Render(), "fromB") +} + +func TestMermaidifySchema_DiscriminatorMappingsUseSourceQualifiedReferences(t *testing.T) { + dir := t.TempDir() + external := func(property string) []byte { + return []byte("components:\n schemas:\n Shared:\n type: object\n properties:\n " + property + ": {type: string}\n") + } + require.NoError(t, os.WriteFile(filepath.Join(dir, "a.yaml"), external("fromA"), 0o600)) + require.NoError(t, os.WriteFile(filepath.Join(dir, "b.yaml"), external("fromB"), 0o600)) + main := []byte(`openapi: 3.1.0 +info: {title: Test, version: 1.0.0} +paths: {} +components: + schemas: + Root: + oneOf: + - $ref: './a.yaml#/components/schemas/Shared' + - $ref: 'b.yaml#/components/schemas/Shared' + discriminator: + propertyName: kind + mapping: + a: 'a.yaml#/components/schemas/Shared' + b: 'b.yaml#/components/schemas/Shared' +`) + config := datamodel.NewDocumentConfiguration() + config.BasePath = dir + config.SpecFilePath = "root.yaml" + config.AllowFileReferences = true + doc, err := libopenapi.NewDocumentWithConfiguration(main, config) + require.NoError(t, err) + model, buildErr := doc.BuildV3Model() + require.NoError(t, buildErr) + root := model.Model.Components.Schemas.GetOrZero("Root") + require.NotNil(t, root) + + diagram := MermaidifySchema(context.Background(), SchemaDiagramInput{ + Root: root, + Identity: SchemaIdentity{ + CanonicalPath: "#/components/schemas/Root", + SourceLocation: filepath.Join(dir, "root.yaml"), + Name: "Root", + }, + }, nil) + + var mappingTargets = make(map[string]string) + for _, relationship := range diagram.Relationships { + if relationship.Label == "a" || relationship.Label == "b" { + mappingTargets[relationship.Label] = relationship.Target + } + } + require.NotEmpty(t, mappingTargets["a"]) + require.NotEmpty(t, mappingTargets["b"]) + assert.NotEqual(t, mappingTargets["a"], mappingTargets["b"]) + assert.True(t, mermaidClassHasProperty(diagram.Classes[mappingTargets["a"]], "fromA")) + assert.True(t, mermaidClassHasProperty(diagram.Classes[mappingTargets["b"]], "fromB")) +} + +func TestMermaidifySchema_IdentityProviderWarningsFallBack(t *testing.T) { + root := base.CreateSchemaProxy(&base.Schema{Type: []string{"object"}}) + diagram := MermaidifySchema(context.Background(), SchemaDiagramInput{ + Root: root, + Identity: SchemaIdentity{CanonicalPath: "root", Name: "Root"}, + Identities: failingSchemaIdentityProvider{}, + }, nil) + + assert.Contains(t, diagram.Render(), "class Root") + require.Len(t, diagram.Warnings, 1) + assert.Contains(t, diagram.Warnings[0].Error(), "identity unavailable") +} + +type failingSchemaIdentityProvider struct{} + +func (failingSchemaIdentityProvider) Identify(context.Context, *base.SchemaProxy, SchemaIdentity) (SchemaIdentity, error) { + return SchemaIdentity{}, errors.New("identity unavailable") +} + +func mermaidClassHasProperty(class *MermaidClass, name string) bool { + if class == nil { + return false + } + for _, property := range class.Properties { + if property != nil && property.Name == name { + return true + } + } + return false +} + +func neutralSchemaFromSpec(t *testing.T, spec, name string) *base.SchemaProxy { + t.Helper() + doc, err := libopenapi.NewDocument([]byte(spec)) + require.NoError(t, err) + model, buildErr := doc.BuildV3Model() + require.NoError(t, buildErr) + require.NotNil(t, model.Model.Components) + proxy := model.Model.Components.Schemas.GetOrZero(name) + require.NotNil(t, proxy) + return proxy +} diff --git a/go.mod b/go.mod index e8af477..7bb4936 100644 --- a/go.mod +++ b/go.mod @@ -7,13 +7,14 @@ require ( charm.land/bubbletea/v2 v2.0.7 charm.land/lipgloss/v2 v2.0.4 github.com/a-h/templ v0.3.1020 - github.com/alecthomas/chroma/v2 v2.26.1 + github.com/alecthomas/chroma/v2 v2.27.0 github.com/cespare/xxhash/v2 v2.3.0 github.com/charmbracelet/colorprofile v0.4.3 github.com/charmbracelet/x/term v0.2.2 github.com/google/go-github/v72 v72.0.0 github.com/google/uuid v1.6.0 github.com/mitchellh/mapstructure v1.5.0 + github.com/pb33f/libasyncapi v0.0.1 github.com/pb33f/libopenapi v0.38.1 github.com/pb33f/ordered-map/v2 v2.3.1 github.com/pb33f/testify v0.1.0 @@ -28,6 +29,7 @@ require ( ) require ( + github.com/Masterminds/semver/v3 v3.2.1 // indirect github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/buger/jsonparser v1.1.2 // indirect github.com/charmbracelet/harmonica v0.2.0 // indirect @@ -38,7 +40,7 @@ require ( github.com/clipperhouse/displaywidth v0.11.0 // indirect github.com/clipperhouse/uax29/v2 v2.7.0 // indirect github.com/dlclark/regexp2 v1.11.5 // indirect - github.com/dlclark/regexp2/v2 v2.1.1 // indirect + github.com/dlclark/regexp2/v2 v2.2.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/lucasb-eyer/go-colorful v1.4.0 // indirect diff --git a/go.sum b/go.sum index ad61bc6..7fd1d0f 100644 --- a/go.sum +++ b/go.sum @@ -4,13 +4,15 @@ charm.land/bubbletea/v2 v2.0.7 h1:7qw2tTAVar7m7klOPBYfTB0mniv/RuexsYwMRNxSeL0= charm.land/bubbletea/v2 v2.0.7/go.mod h1:DGW2q8gvzHnOpMpZTORs0aySVHCox5C+2Svk0fci1qs= charm.land/lipgloss/v2 v2.0.4 h1:lcPeVtcp23SNra7lHy8iYE4UC2aIipVQ47sbGyyxR5Q= charm.land/lipgloss/v2 v2.0.4/go.mod h1:0653x8epbZSzdDfO/XPS1a/uYPOBeSsCssOpJOqDzik= +github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= +github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/a-h/templ v0.3.1020 h1:ypAT/L5ySWEnZ6Zft/5yfoWXYYkhFNvEFOeeqecg4tw= github.com/a-h/templ v0.3.1020/go.mod h1:A2DlK61v+K+NRoGnhmYbNYVmtYHcFO5/AisMvBdDxTM= github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0= github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k= github.com/alecthomas/chroma/v2 v2.2.0/go.mod h1:vf4zrexSH54oEjJ7EdB65tGNHmH3pGZmVkgTP5RHvAs= -github.com/alecthomas/chroma/v2 v2.26.1 h1:2X21EdxGZNv5GF9mG5u+uzc02GCFyGxbcBm3Grd9A78= -github.com/alecthomas/chroma/v2 v2.26.1/go.mod h1:lxhRRa9H4hPmRLOOdYga4zkQIQjq3dtrrdwQeCfu78Y= +github.com/alecthomas/chroma/v2 v2.27.0 h1:FodwmyOBgJULFYmDqibcp9pvfDLWdtPRh9v/r5BXYZs= +github.com/alecthomas/chroma/v2 v2.27.0/go.mod h1:NjJ3ciIgrqBNeIkWZ4e46nseoLDslxU1LmfCoL+wcY8= github.com/alecthomas/repr v0.0.0-20220113201626-b1b626ac65ae/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8= github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs= github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4= @@ -49,8 +51,8 @@ github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55k github.com/dlclark/regexp2 v1.7.0/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/dlclark/regexp2/v2 v2.1.1 h1:LCUGyd9Wf+r+VVOl8Ny38JTpWJcAsdVnCIuhhtthmKw= -github.com/dlclark/regexp2/v2 v2.1.1/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU= +github.com/dlclark/regexp2/v2 v2.2.1 h1:mf4KkFUj0gJuarK8P+LgiS+Lit7m9N1yAwEfPbee7R0= +github.com/dlclark/regexp2/v2 v2.2.1/go.mod h1:avUrQvPaLz2DrFNHJF0taWAFFX2C1GMSSoeiqFjcBmU= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -84,6 +86,8 @@ github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOF github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/pb33f/jsonpath v0.8.2 h1:Ou4C7zjYClBm97dfZjDCjdZGusJoynv/vrtiEKNfj2Y= github.com/pb33f/jsonpath v0.8.2/go.mod h1:zBV5LJW4OQOPatmQE2QdKpGQJvhDTlE5IEj6ASaRNTo= +github.com/pb33f/libasyncapi v0.0.1 h1:dy0FYKaHBJvxszFYkJ1Wr8n57Ocg0i7r6LjSYTjCtD8= +github.com/pb33f/libasyncapi v0.0.1/go.mod h1:BTOAuvd1BfDpu/xA2sSynmREy6gh9uyTilalCVozehw= github.com/pb33f/libopenapi v0.38.1 h1:F4mlPaex6MugO1DoGjIy8lnevyzclfGX5lWZrT9LszE= github.com/pb33f/libopenapi v0.38.1/go.mod h1:OIh31Zxvw3z0OnLGKqhnVlSQ80swwddph1+xedWZjdU= github.com/pb33f/ordered-map/v2 v2.3.1 h1:5319HDO0aw4DA4gzi+zv4FXU9UlSs3xGZ40wcP1nBjY= diff --git a/printingpress/activity.go b/printingpress/activity.go index febefc1..45f4dde 100644 --- a/printingpress/activity.go +++ b/printingpress/activity.go @@ -17,9 +17,12 @@ const ( jobTypeHTML = "html" jobTypeLLM = "llm" - sourceKindBytes = "bytes" - sourceKindV3Model = "v3-model" - sourceKindDrModel = "dr-model" + sourceKindBytes = "bytes" + sourceKindOpenAPIBytes = "openapi-bytes" + sourceKindAsyncAPIBytes = "asyncapi-bytes" + sourceKindV3Model = "v3-model" + sourceKindDrModel = "dr-model" + sourceKindAsyncAPIDocument = "asyncapi-document" ) type activityManager struct { diff --git a/printingpress/agent_writer.go b/printingpress/agent_writer.go index 73441e1..574a7f6 100644 --- a/printingpress/agent_writer.go +++ b/printingpress/agent_writer.go @@ -643,8 +643,13 @@ func renderAgentsGuide(site *Site, plans ...llmWritePlan) string { b.WriteString("## Artifact Map\n\n") writeLLMFileMap(&b, plan) - b.WriteString("- `operations/*.md` - One Markdown page per operation or webhook with parameters, security, request/response details, and related links.\n") - b.WriteString("- `operations/*.json` - One machine-readable JSON artifact per operation or webhook for structured traversal and code generation.\n") + if site.SpecKind.IsAsyncAPI() { + b.WriteString("- `operations/*.md` - One Markdown page per AsyncAPI operation with action, channel, messages, replies, security, bindings, traits, and related links.\n") + b.WriteString("- `operations/*.json` - One machine-readable JSON artifact per AsyncAPI operation for structured traversal and code generation.\n") + } else { + b.WriteString("- `operations/*.md` - One Markdown page per operation or webhook with parameters, security, request/response details, and related links.\n") + b.WriteString("- `operations/*.json` - One machine-readable JSON artifact per operation or webhook for structured traversal and code generation.\n") + } b.WriteString("- `models//*.md` - One Markdown page per model or component with schema summaries and cross-links.\n") b.WriteString("- `models//*.json` - One machine-readable JSON artifact per model or component.\n") b.WriteString("- `bundle.json`, `index.json`, `nav.json`, `manifest.json` - Top-level machine-readable artifacts for structured traversal of the rendered docs set.\n") @@ -652,8 +657,13 @@ func renderAgentsGuide(site *Site, plans ...llmWritePlan) string { b.WriteString("## Recommended Workflow\n\n") b.WriteString("1. Read [llms.txt](llms.txt) to find the most relevant tag, operation, or model family.\n") - b.WriteString("2. Open the matching `operations/.md` page for concrete endpoint details and usage guidance.\n") - b.WriteString("3. Follow links into `models//.md` for request and response shapes.\n") + if site.SpecKind.IsAsyncAPI() { + b.WriteString("2. Open the matching `operations/.md` page for action, channel, message, reply, and protocol context.\n") + b.WriteString("3. Follow links into `models//.md` for channel, message, payload, header, schema, and security details.\n") + } else { + b.WriteString("2. Open the matching `operations/.md` page for concrete endpoint details and usage guidance.\n") + b.WriteString("3. Follow links into `models//.md` for request and response shapes.\n") + } if plan.generateMonoliths { b.WriteString("4. Use [llms-full.txt](llms-full.txt) only when you need broad one-file retrieval or cross-cutting summaries.\n") } else { @@ -942,9 +952,13 @@ func renderQuickStart(site *Site) string { var b strings.Builder b.WriteString("## Quick Start\n\n") - // Base URL if len(site.Root.Servers) > 0 { - b.WriteString("**Base URL:** `" + site.Root.Servers[0].URL + "`\n\n") + label := "Base URL" + if site.SpecKind.IsAsyncAPI() { + label = "Primary server" + } + b.WriteString("**" + label + ":** `" + site.Root.Servers[0].URL + "`") + b.WriteString("\n\n") } // Auth scheme names @@ -964,6 +978,14 @@ func renderQuickStart(site *Site) string { if len(site.Operations) > 0 { stats = append(stats, fmt.Sprintf("%d operations", len(site.Operations))) } + if site.SpecKind.IsAsyncAPI() { + if channelCount := len(site.Models["channels"]); channelCount > 0 { + stats = append(stats, fmt.Sprintf("%d channels", channelCount)) + } + if messageCount := len(site.Models["messages"]); messageCount > 0 { + stats = append(stats, fmt.Sprintf("%d messages", messageCount)) + } + } schemaCount := len(site.Models["schemas"]) if schemaCount > 0 { stats = append(stats, fmt.Sprintf("%d schemas", schemaCount)) @@ -1021,8 +1043,8 @@ func renderOperationsIndex(site *Site) string { if navOp.Summary != "" { summary = " — " + singleLine(navOp.Summary) } - b.WriteString(fmt.Sprintf("- [%s %s](operations/%s.md)%s\n", - navOp.Method, navOp.Path, navOp.Slug, summary)) + b.WriteString(fmt.Sprintf("- [%s](operations/%s.md)%s\n", + operationNavLLMLabel(navOp), navOp.Slug, summary)) } if len(tag.Operations) > 0 { b.WriteString("\n") @@ -1046,7 +1068,7 @@ func renderOperationsIndex(site *Site) string { if op.Summary != "" { summary = " — " + singleLine(op.Summary) } - b.WriteString(fmt.Sprintf("- [%s %s](operations/%s.md)%s\n", op.Method, op.Path, op.Slug, summary)) + b.WriteString(fmt.Sprintf("- [%s](operations/%s.md)%s\n", operationPageLLMLabel(op), op.Slug, summary)) } b.WriteString("\n") } @@ -1068,6 +1090,9 @@ func renderHowToUse(site *Site) string { if site.Root == nil { return "" } + if site.SpecKind.IsAsyncAPI() { + return renderAsyncAPIHowToUse(site) + } var b strings.Builder b.WriteString("## How to Use This API\n\n") @@ -1141,6 +1166,68 @@ func renderHowToUse(site *Site) string { // Removed: renderSecuritySchemeInfo — replaced by SecurityRequirement.SchemeType/Scheme/In fields +func renderAsyncAPIHowToUse(site *Site) string { + var b strings.Builder + b.WriteString("## How to Use This AsyncAPI\n\n") + + if len(site.Root.Servers) > 0 { + b.WriteString("### Servers\n\n") + for _, srv := range site.Root.Servers { + if srv == nil { + continue + } + label := strings.TrimSpace(srv.URL) + if label == "" { + continue + } + b.WriteString("- `" + label + "`") + if srv.Description != "" { + b.WriteString(": " + singleLine(srv.Description)) + } + b.WriteString("\n") + } + b.WriteString("\n") + } + + if len(site.Root.Security) > 0 { + b.WriteString("### Security\n\n") + for _, secReq := range site.Root.Security { + b.WriteString("- **" + secReq.Name + "**") + details := make([]string, 0, 3) + if secReq.SchemeType != "" { + details = append(details, secReq.SchemeType) + } + if secReq.Scheme != "" { + details = append(details, secReq.Scheme) + } + if secReq.In != "" { + details = append(details, "in "+secReq.In) + } + if len(details) > 0 { + b.WriteString(" — " + strings.Join(details, "; ")) + } + b.WriteString("\n") + } + b.WriteString("\n") + } + + if len(site.Operations) > 0 { + b.WriteString("### Operation Flow\n\n") + for _, op := range site.Operations { + b.WriteString("- ") + b.WriteString(operationPageLLMLabel(op)) + if op.Summary != "" { + b.WriteString(" — " + singleLine(op.Summary)) + } + b.WriteString("\n") + } + b.WriteString("\n") + } + + b.WriteString("---\n\n") + return b.String() +} + // buildResourceTable derives a resources summary table from NavTags. func buildResourceTable(site *Site) string { if len(site.NavTags) == 0 { @@ -1356,6 +1443,9 @@ func writeModelsSection(ctx llmRenderContext, w io.StringWriter) (bool, error) { // renderOperationMD renders a single operation as markdown. func renderOperationMD(ctx llmRenderContext, op *OperationPage) string { + if op != nil && op.SpecKind.IsAsyncAPI() { + return renderAsyncAPIOperationMD(ctx, op) + } var b strings.Builder b.WriteString("### " + op.Method + " " + op.Path + "\n\n") @@ -1424,14 +1514,7 @@ func renderOperationMD(ctx llmRenderContext, op *OperationPage) string { b.WriteString(renderResponsesMD(ctx, op.Responses)) } - // Cross-references - if op.CrossRefs != nil && len(op.CrossRefs.ReferencesModels) > 0 { - var names []string - for _, ref := range op.CrossRefs.ReferencesModels { - names = append(names, componentRefLabel(ctx, ref)) - } - b.WriteString("**Models referenced:** " + strings.Join(names, ", ") + "\n\n") - } + b.WriteString(renderOperationCrossRefsMD(ctx, op)) if related := renderRelatedOperationsMD(ctx, op); related != "" { b.WriteString(related) @@ -1446,8 +1529,127 @@ func renderOperationMD(ctx llmRenderContext, op *OperationPage) string { return b.String() } +func renderAsyncAPIOperationMD(ctx llmRenderContext, op *OperationPage) string { + var b strings.Builder + info := op.AsyncAPI + + b.WriteString("### " + operationPageLLMLabel(op) + "\n\n") + + if op.Summary != "" { + b.WriteString(op.Summary + "\n\n") + } + + var meta []string + if op.OperationID != "" { + meta = append(meta, "**Operation ID:** `"+op.OperationID+"`") + } + if info != nil && info.Action != "" { + meta = append(meta, "**Action:** `"+info.Action+"`") + } + if len(op.Tags) > 0 { + meta = append(meta, "**Tags:** "+strings.Join(op.Tags, ", ")) + } + if op.Deprecated { + meta = append(meta, "**Deprecated**") + } + if len(meta) > 0 { + b.WriteString(strings.Join(meta, " \n") + "\n\n") + } + + if src := renderSourceMetadataRef(op.Source); src != "" { + b.WriteString(src) + b.WriteString("\n") + } + + if op.Description != "" && op.Description != op.Summary { + b.WriteString(op.Description + "\n\n") + } + + if sec := renderOperationSecurityMD(ctx, op); sec != "" { + b.WriteString(sec) + } + + if info == nil { + return b.String() + } + + if info.Channel != nil { + b.WriteString("#### Channel\n\n") + b.WriteString("- " + asyncAPIChannelLink(ctx, info.Channel) + "\n") + if info.Channel.Address != "" { + b.WriteString("- Address: `" + info.Channel.Address + "`\n") + } + b.WriteString("\n") + } + + if len(info.Messages) > 0 { + b.WriteString("#### Messages\n\n") + for _, msg := range info.Messages { + if msg == nil { + continue + } + b.WriteString("- " + asyncAPIMessageLink(ctx, msg)) + details := make([]string, 0, 2) + if msg.ContentType != "" { + details = append(details, msg.ContentType) + } + if msg.Summary != "" { + details = append(details, singleLine(msg.Summary)) + } + if len(details) > 0 { + b.WriteString(" — " + strings.Join(details, "; ")) + } + b.WriteString("\n") + } + b.WriteString("\n") + } + + if info.Reply != nil { + b.WriteString("#### Reply\n\n") + if info.Reply.Address != "" { + b.WriteString("- Address: `" + info.Reply.Address + "`\n") + } + if info.Reply.Channel != nil { + b.WriteString("- Channel: " + asyncAPIChannelLink(ctx, info.Reply.Channel) + "\n") + } + for _, msg := range info.Reply.Messages { + if msg == nil { + continue + } + b.WriteString("- Message: " + asyncAPIMessageLink(ctx, msg) + "\n") + } + b.WriteString("\n") + } + + if len(info.Bindings) > 0 { + b.WriteString("#### Bindings\n\n") + for _, binding := range info.Bindings { + b.WriteString("- `" + binding + "`\n") + } + b.WriteString("\n") + } + if len(info.Traits) > 0 { + b.WriteString("#### Traits\n\n") + for _, trait := range info.Traits { + b.WriteString("- `" + trait + "`\n") + } + b.WriteString("\n") + } + if len(info.Extensions) > 0 { + b.WriteString("#### Extensions\n\n") + b.WriteString(renderExtensionsMD(info.Extensions)) + b.WriteString("\n") + } + b.WriteString(renderOperationCrossRefsMD(ctx, op)) + + return b.String() +} + // renderModelMD renders a single model/component as markdown. func renderModelMD(ctx llmRenderContext, page *ModelPage) string { + if page != nil && page.SpecKind.IsAsyncAPI() { + return renderAsyncAPIModelMD(ctx, page) + } var b strings.Builder b.WriteString("### " + page.Name + "\n\n") @@ -1478,34 +1680,179 @@ func renderModelMD(ctx llmRenderContext, page *ModelPage) string { b.WriteString("\n") } - // Cross-references - if page.CrossRefs != nil { - if len(page.CrossRefs.UsedByOperations) > 0 { - var refs []string - for _, ref := range page.CrossRefs.UsedByOperations { - refs = append(refs, operationRefLabel(ctx, ref)) + b.WriteString(renderModelCrossRefsMD(ctx, page)) + + return b.String() +} + +func renderAsyncAPIModelMD(ctx llmRenderContext, page *ModelPage) string { + var b strings.Builder + info := page.AsyncAPI + + b.WriteString("### " + page.Name + "\n\n") + + if info != nil && info.Kind != "" { + b.WriteString("**AsyncAPI model:** `" + info.Kind + "`\n\n") + } + if page.Description != "" { + b.WriteString(page.Description + "\n\n") + } + if src := renderSourceMetadataRef(page.Source); src != "" { + b.WriteString(src) + b.WriteString("\n") + } + if info == nil { + return b.String() + } + + var details []string + if info.Address != "" { + details = append(details, "**Address:** `"+info.Address+"`") + } + if info.Protocol != "" { + details = append(details, "**Protocol:** `"+info.Protocol+"`") + } + if info.ContentType != "" { + details = append(details, "**Content type:** `"+info.ContentType+"`") + } + if len(details) > 0 { + b.WriteString(strings.Join(details, " \n") + "\n\n") + } + + if info.Channel != nil { + b.WriteString("#### Channel\n\n") + b.WriteString("- " + asyncAPIChannelLink(ctx, info.Channel) + "\n\n") + } + if len(info.Messages) > 0 { + b.WriteString("#### Messages\n\n") + for _, msg := range info.Messages { + if msg == nil { + continue } - b.WriteString("**Used by:** " + strings.Join(refs, ", ") + "\n\n") - } - if len(page.CrossRefs.UsesModels) > 0 { - var refs []string - for _, ref := range page.CrossRefs.UsesModels { - refs = append(refs, componentRefLabel(ctx, ref)) + b.WriteString("- " + asyncAPIMessageLink(ctx, msg)) + if msg.Summary != "" { + b.WriteString(" — " + singleLine(msg.Summary)) } - b.WriteString("**References:** " + strings.Join(refs, ", ") + "\n\n") + b.WriteString("\n") + } + b.WriteString("\n") + } + if len(info.Schemas) > 0 { + b.WriteString("#### Schemas\n\n") + for _, surface := range info.Schemas { + b.WriteString(renderAsyncAPISchemaSurfaceMD(ctx, surface)) } - if len(page.CrossRefs.UsedByModels) > 0 { - var refs []string - for _, ref := range page.CrossRefs.UsedByModels { - refs = append(refs, componentRefLabel(ctx, ref)) + } + if len(info.Examples) > 0 { + b.WriteString("#### Examples\n\n") + for _, example := range info.Examples { + if example == nil { + continue + } + name := firstNonEmpty(example.Name, "example") + b.WriteString("##### " + name + "\n\n") + if example.Summary != "" { + b.WriteString(example.Summary + "\n\n") + } + if strings.TrimSpace(example.Payload) != "" { + b.WriteString("Payload:\n\n") + b.WriteString(renderSchemaBlock(example.Payload)) + b.WriteString("\n") + } + if strings.TrimSpace(example.Headers) != "" { + b.WriteString("Headers:\n\n") + b.WriteString(renderSchemaBlock(example.Headers)) + b.WriteString("\n") } - b.WriteString("**Referenced by:** " + strings.Join(refs, ", ") + "\n\n") } } + if len(info.Bindings) > 0 { + b.WriteString("#### Bindings\n\n") + for _, binding := range info.Bindings { + b.WriteString("- `" + binding + "`\n") + } + b.WriteString("\n") + } + if len(page.Extensions) > 0 { + b.WriteString("#### Extensions\n\n") + b.WriteString(renderExtensionsMD(page.Extensions)) + b.WriteString("\n") + } + b.WriteString(renderModelCrossRefsMD(ctx, page)) return b.String() } +func renderOperationCrossRefsMD(ctx llmRenderContext, op *OperationPage) string { + if op == nil || op.CrossRefs == nil || len(op.CrossRefs.ReferencesModels) == 0 { + return "" + } + var names []string + for _, ref := range op.CrossRefs.ReferencesModels { + names = append(names, componentRefLabel(ctx, ref)) + } + return "**Models referenced:** " + strings.Join(names, ", ") + "\n\n" +} + +func renderModelCrossRefsMD(ctx llmRenderContext, page *ModelPage) string { + if page == nil || page.CrossRefs == nil { + return "" + } + var b strings.Builder + if len(page.CrossRefs.UsedByOperations) > 0 { + var refs []string + for _, ref := range page.CrossRefs.UsedByOperations { + refs = append(refs, operationRefLabel(ctx, ref)) + } + b.WriteString("**Used by:** " + strings.Join(refs, ", ") + "\n\n") + } + if len(page.CrossRefs.UsesModels) > 0 { + var refs []string + for _, ref := range page.CrossRefs.UsesModels { + refs = append(refs, componentRefLabel(ctx, ref)) + } + b.WriteString("**References:** " + strings.Join(refs, ", ") + "\n\n") + } + if len(page.CrossRefs.UsedByModels) > 0 { + var refs []string + for _, ref := range page.CrossRefs.UsedByModels { + refs = append(refs, componentRefLabel(ctx, ref)) + } + b.WriteString("**Referenced by:** " + strings.Join(refs, ", ") + "\n\n") + } + return b.String() +} + +func renderAsyncAPISchemaSurfaceMD(ctx llmRenderContext, surface *AsyncAPISchemaSurface) string { + if surface == nil { + return "" + } + var b strings.Builder + title := firstNonEmpty(surface.Name, surface.Role, "schema") + b.WriteString("##### " + title + "\n\n") + if surface.Role != "" { + b.WriteString("**Role:** `" + surface.Role + "`\n\n") + } + if surface.Ref != nil { + b.WriteString("**Schema ref:** " + componentLinkLabel(ctx, surface.Ref) + "\n\n") + return b.String() + } + summary := renderSchemaSummaryMD(ctx, surface.SchemaJSON, nil, nil) + if summary != "" { + b.WriteString(summary) + } + if shouldRenderRawSchemaWithContext(ctx, surface.SchemaJSON, summary != "", surface.MockJSON != "", false) { + b.WriteString(renderSchemaBlock(surface.SchemaJSON)) + b.WriteString("\n") + } + if surface.MockJSON != "" { + b.WriteString("Mock payload:\n\n") + b.WriteString(renderSchemaBlock(surface.MockJSON)) + b.WriteString("\n") + } + return b.String() +} + // renderParamsTable renders a markdown table of operation parameters. func renderParamsTable(params []*ParameterInfo) string { var b strings.Builder @@ -2628,6 +2975,77 @@ func operationLink(ctx llmRenderContext, slug, label string) string { return "[" + label + "](" + ctx.operationLinkPrefix + slug + ".md)" } +func operationNavLLMLabel(op *NavOperation) string { + if op == nil { + return "" + } + if op.SpecKind.IsAsyncAPI() { + action := strings.ToUpper(strings.TrimSpace(op.Method)) + channel := strings.TrimSpace(op.Path) + if action == "" { + action = "OPERATION" + } + if channel == "" { + return action + } + return action + " " + channel + } + return strings.TrimSpace(strings.TrimSpace(op.Method) + " " + strings.TrimSpace(op.Path)) +} + +func operationPageLLMLabel(op *OperationPage) string { + if op == nil { + return "" + } + if op.SpecKind.IsAsyncAPI() { + info := op.AsyncAPI + action := strings.ToUpper(strings.TrimSpace(op.Method)) + channel := strings.TrimSpace(op.Path) + if info != nil { + action = strings.ToUpper(firstNonEmpty(info.Action, action)) + if info.Channel != nil { + channel = firstNonEmpty(info.Channel.Name, info.Channel.Address, channel) + } + } + if action == "" { + action = "OPERATION" + } + if op.OperationID != "" && channel != "" { + return action + " " + op.OperationID + " (" + channel + ")" + } + if op.OperationID != "" { + return action + " " + op.OperationID + } + if channel != "" { + return action + " " + channel + } + return action + } + return strings.TrimSpace(strings.TrimSpace(op.Method) + " " + strings.TrimSpace(op.Path)) +} + +func asyncAPIChannelLink(ctx llmRenderContext, channel *AsyncAPIChannelRef) string { + if channel == nil { + return "" + } + label := firstNonEmpty(channel.Name, channel.Address, "channel") + if channel.Slug == "" { + return "`" + label + "`" + } + return "[" + label + "](" + ctx.modelLinkPrefix + "channels/" + channel.Slug + ".md)" +} + +func asyncAPIMessageLink(ctx llmRenderContext, message *AsyncAPIMessageRef) string { + if message == nil { + return "" + } + label := firstNonEmpty(message.Title, message.Name, "message") + if message.Slug == "" { + return "`" + label + "`" + } + return "[" + label + "](" + ctx.modelLinkPrefix + "messages/" + message.Slug + ".md)" +} + func componentLinkLabel(ctx llmRenderContext, ref *ComponentLink) string { if ref == nil { return "" @@ -2646,7 +3064,11 @@ func operationRefLabel(ctx llmRenderContext, ref *OperationRef) string { if ref == nil { return "" } - return operationLink(ctx, ref.Slug, ref.Method+" "+ref.Path) + label := strings.TrimSpace(ref.Method + " " + ref.Path) + if ref.OperationID != "" && ref.Path != "" && !strings.HasPrefix(ref.Path, "/") { + label = strings.TrimSpace(ref.Method + " " + ref.OperationID) + } + return operationLink(ctx, ref.Slug, label) } func lookupOperationByID(site *Site, operationID string) *OperationPage { diff --git a/printingpress/agent_writer_test.go b/printingpress/agent_writer_test.go index eb1406c..5c486d1 100644 --- a/printingpress/agent_writer_test.go +++ b/printingpress/agent_writer_test.go @@ -116,6 +116,62 @@ func TestWriteLLMSite_BurgerShop(t *testing.T) { } } +func TestWriteLLMSite_AsyncAPIStreetlights(t *testing.T) { + pp, err := CreatePrintingPressFromBytes(streetlightsAsyncAPISpec(), &PrintingPressConfig{ + SpecPath: "streetlights.yaml", + }) + require.NoError(t, err) + site, err := pp.PressModel() + require.NoError(t, err) + outputDir := t.TempDir() + + err = WriteLLMSite(site, outputDir) + require.NoError(t, err) + + agentsBytes, err := os.ReadFile(filepath.Join(outputDir, "AGENTS.md")) + require.NoError(t, err) + agents := string(agentsBytes) + assert.Contains(t, agents, "action, channel, message, reply, and protocol context") + assert.NotContains(t, agents, "request and response shapes") + + fullBytes, err := os.ReadFile(filepath.Join(outputDir, "llms-full.txt")) + require.NoError(t, err) + full := string(fullBytes) + assert.Contains(t, full, "## How to Use This AsyncAPI") + assert.Contains(t, full, "### SEND turnOn") + assert.Contains(t, full, "#### Messages") + assert.Contains(t, full, "turnOnOff") + assert.NotContains(t, full, "#### cURL") + assert.NotContains(t, full, "#### Request Body") + assert.NotContains(t, full, "#### Responses") + assert.NotContains(t, full, "Primary Resources") + + opBytes, err := os.ReadFile(filepath.Join(outputDir, "operations", "turn-on.md")) + require.NoError(t, err) + op := string(opBytes) + assert.Contains(t, op, "### SEND turnOn") + assert.Contains(t, op, "#### Channel") + assert.Contains(t, op, "smartylighting.streetlights.1.0.action.{streetlightId}.turn.on") + assert.Contains(t, op, "#### Bindings") + assert.Contains(t, op, "`kafka`") + assert.Contains(t, op, "**Models referenced:**") + assert.Contains(t, op, "turnOnOff") + assert.Contains(t, op, "turnOnOffPayload") + assert.Contains(t, op, "saslScram") + assert.NotContains(t, op, "curl ") + + msgBytes, err := os.ReadFile(filepath.Join(outputDir, "models", "messages", "turn-on-off.md")) + require.NoError(t, err) + msg := string(msgBytes) + assert.Contains(t, msg, "**AsyncAPI model:** `message`") + assert.Contains(t, msg, "#### Schemas") + assert.Contains(t, msg, "**Schema ref:**") + assert.Contains(t, msg, "turnOnOffPayload") + assert.Contains(t, msg, "**Used by:**") + assert.Contains(t, msg, "turnOn") + assert.Contains(t, msg, "**References:**") +} + func TestWriteLLMSite_PetStore(t *testing.T) { site := buildTestSite(t, "../test_specs/petstorev3.json") outputDir := t.TempDir() diff --git a/printingpress/aggregate_api.go b/printingpress/aggregate_api.go index a1d8d63..65f7947 100644 --- a/printingpress/aggregate_api.go +++ b/printingpress/aggregate_api.go @@ -40,6 +40,7 @@ type AggregatePrintingPressConfig struct { AssetMode string BuildMode string DisableSkippedRendering bool + IncludeSpec bool Include []string IgnoreRules []string NoiseSegments []string @@ -127,6 +128,7 @@ type SpecStateRecord struct { Hash string ConfigHash string MetadataVersion int + SpecKind SpecKind Title string Summary string ContactName string diff --git a/printingpress/aggregate_discovery.go b/printingpress/aggregate_discovery.go index 1e11fba..120e75f 100644 --- a/printingpress/aggregate_discovery.go +++ b/printingpress/aggregate_discovery.go @@ -7,6 +7,7 @@ package printingpress import ( "encoding/binary" "encoding/json" + "errors" "fmt" "hash" "io/fs" @@ -53,6 +54,7 @@ type aggregateDiscoveredSpec struct { Format string OutputSubdir string EntrySlug string + SpecKind SpecKind Changed bool RenderSkipped bool Warnings []string @@ -61,11 +63,12 @@ type aggregateDiscoveredSpec struct { } type aggregateSpecMetadata struct { - Title string - Summary string - Contact *ppmodel.ContactInfo - Version string - Valid bool + Title string + Summary string + Contact *ppmodel.ContactInfo + Version string + SpecKind SpecKind + Valid bool } type aggregateServiceGroup struct { @@ -103,7 +106,7 @@ func (ap *AggregatePrintingPress) buildPlan() (*aggregateBuildPlan, error) { if err != nil { return nil, err } - discovered, err := ap.discoverSpecs(existing) + discovered, discoveryWarnings, err := ap.discoverSpecs(existing) if err != nil { return nil, err } @@ -114,6 +117,7 @@ func (ap *AggregatePrintingPress) buildPlan() (*aggregateBuildPlan, error) { } plan.removed = aggregateRemovedRecords(existing, discovered) plan.catalog = ap.buildCatalog(discovered) + plan.catalog.Warnings = append(plan.catalog.Warnings, discoveryWarnings...) plan.catalog.ContentPages = ap.collectCatalogContentPages() for _, spec := range discovered { if spec.Changed || ap.config.BuildMode == AggregateBuildModeFull { @@ -126,7 +130,7 @@ func (ap *AggregatePrintingPress) buildPlan() (*aggregateBuildPlan, error) { return plan, nil } -func (ap *AggregatePrintingPress) discoverSpecs(existing map[string]*SpecStateRecord) ([]*aggregateDiscoveredSpec, error) { +func (ap *AggregatePrintingPress) discoverSpecs(existing map[string]*SpecStateRecord) ([]*aggregateDiscoveredSpec, []*ppmodel.BuildWarning, error) { root := ap.config.ScanRoot outputDir := ap.config.OutputDir baseConfigHash := aggregateEntryConfigHash(ap.config) @@ -137,6 +141,7 @@ func (ap *AggregatePrintingPress) discoverSpecs(existing map[string]*SpecStateRe } var discovered []*aggregateDiscoveredSpec + var discoveryWarnings []*ppmodel.BuildWarning err := filepath.WalkDir(root, func(filePath string, d fs.DirEntry, walkErr error) error { if walkErr != nil { return walkErr @@ -166,14 +171,22 @@ func (ap *AggregatePrintingPress) discoverSpecs(existing map[string]*SpecStateRe if err != nil { return err } - if !containsOpenAPIMarkers(string(content), relPath) { + identity, err := DetectSpecIdentity(content) + if err != nil { + if errors.Is(err, ErrUnsupportedAsyncAPI2) { + discoveryWarnings = append(discoveryWarnings, &ppmodel.BuildWarning{ + Message: "unsupported AsyncAPI 2.x spec omitted from aggregate catalog", + Context: relPath, + }) + ap.config.Logger.Warn("printingpress: omitting unsupported AsyncAPI 2.x aggregate candidate", "path", relPath) + } return nil } hash := hashSpecBytes(content) record := existing[relPath] metadata := aggregateSpecMetadata{} - if record == nil || record.Hash != hash || record.Summary == "" || record.MetadataVersion < aggregateMetadataVersion || ap.config.BuildMode == AggregateBuildModeFull { + if record == nil || record.Hash != hash || record.Summary == "" || record.MetadataVersion < aggregateMetadataVersion || record.SpecKind != identity.Kind || ap.config.BuildMode == AggregateBuildModeFull { metadata, err = parseAggregateSpecMetadata(content) if err != nil { ap.config.Logger.Warn("printingpress: skipping candidate that failed metadata parse", "path", relPath, "error", err) @@ -181,16 +194,20 @@ func (ap *AggregatePrintingPress) discoverSpecs(existing map[string]*SpecStateRe } } else { metadata = aggregateSpecMetadata{ - Title: record.Title, - Summary: record.Summary, - Contact: catalogContactFromFields(record.ContactName, record.ContactEmail), - Version: record.Version, - Valid: true, + Title: record.Title, + Summary: record.Summary, + Contact: catalogContactFromFields(record.ContactName, record.ContactEmail), + Version: record.Version, + SpecKind: record.SpecKind, + Valid: true, } } if !metadata.Valid { return nil } + if !metadata.SpecKind.IsKnown() { + metadata.SpecKind = identity.Kind + } specDir := filepath.Dir(filePath) // Fast mode must resolve service-local content during discovery so it can @@ -202,7 +219,7 @@ func (ap *AggregatePrintingPress) discoverSpecs(existing map[string]*SpecStateRe contentHash = ap.aggregateEntryContentFingerprint(filePath) contentHashBySpecDir[specDir] = contentHash } - configHash := aggregateEntryRenderConfigHash(baseConfigHash, ap.developerMode, ap.specLintResults[relPath], contentHash) + configHash := aggregateEntryRenderConfigHash(baseConfigHash, ap.developerMode, ap.specLintResults[relPath], contentHash, metadata.SpecKind) serviceKey := ap.resolveServiceKey(relPath, metadata.Title, noise) displayName := ap.resolveDisplayName(relPath, serviceKey, metadata.Title) version := ap.resolveVersion(relPath, metadata.Version) @@ -221,7 +238,8 @@ func (ap *AggregatePrintingPress) discoverSpecs(existing map[string]*SpecStateRe Version: version, VersionSlug: slugpkg.Sanitize(version), Format: DetectSpecFormat(content), - Changed: record == nil || record.Hash != hash || record.ConfigHash != configHash || ap.config.BuildMode == AggregateBuildModeFull, + SpecKind: metadata.SpecKind, + Changed: record == nil || record.Hash != hash || record.ConfigHash != configHash || record.SpecKind != metadata.SpecKind || ap.config.BuildMode == AggregateBuildModeFull, Source: &ppmodel.SourceRef{ Path: relPath, Href: relPath, @@ -232,12 +250,12 @@ func (ap *AggregatePrintingPress) discoverSpecs(existing map[string]*SpecStateRe return nil }) if err != nil { - return nil, err + return nil, nil, err } sort.Slice(discovered, func(i, j int) bool { return discovered[i].RelativePath < discovered[j].RelativePath }) - return discovered, nil + return discovered, discoveryWarnings, nil } func (ap *AggregatePrintingPress) buildCatalog(discovered []*aggregateDiscoveredSpec) *ppmodel.CatalogSite { @@ -333,22 +351,24 @@ func (ap *AggregatePrintingPress) buildCatalog(discovered []*aggregateDiscovered spec.OutputSubdir = pppaths.AggregateSpecDir(group.slug, versionGroup.slug, spec.EntrySlug) spec.Source.Href = spec.RelativePath versionModel.Entries = append(versionModel.Entries, &ppmodel.CatalogSpecEntry{ - ID: spec.RelativePath, - Slug: spec.EntrySlug, - Title: spec.Title, - Summary: spec.Summary, - Contact: cloneCatalogContact(spec.Contact), - ServiceKey: spec.ServiceKey, - ServiceSlug: spec.ServiceSlug, - Version: spec.Version, - VersionSlug: spec.VersionSlug, - Format: spec.Format, - RelativePath: spec.RelativePath, - OutputSubdir: spec.OutputSubdir, - OverviewHref: pppaths.AggregateSpecIndexHTML(group.slug, versionGroup.slug, spec.EntrySlug), - Warnings: append([]string(nil), spec.Warnings...), - Source: spec.Source, - Counts: aggregateLintResultCounts(ap.specLintResults[spec.RelativePath]), + ID: spec.RelativePath, + Slug: spec.EntrySlug, + SpecKind: spec.SpecKind, + SpecKindLabel: spec.SpecKind.DisplayLabel(), + Title: spec.Title, + Summary: spec.Summary, + Contact: cloneCatalogContact(spec.Contact), + ServiceKey: spec.ServiceKey, + ServiceSlug: spec.ServiceSlug, + Version: spec.Version, + VersionSlug: spec.VersionSlug, + Format: spec.Format, + RelativePath: spec.RelativePath, + OutputSubdir: spec.OutputSubdir, + OverviewHref: pppaths.AggregateSpecIndexHTML(group.slug, versionGroup.slug, spec.EntrySlug), + Warnings: append([]string(nil), spec.Warnings...), + Source: spec.Source, + Counts: aggregateLintResultCounts(ap.specLintResults[spec.RelativePath]), }) versionModel.SpecCount++ serviceModel.SpecCount++ @@ -519,6 +539,7 @@ func aggregateEntryConfigHash(config *AggregatePrintingPressConfig) string { payload := struct { BaseURL string `json:"baseURL,omitempty"` AssetMode string `json:"assetMode,omitempty"` + IncludeSpec bool `json:"includeSpec,omitempty"` EntryConfigFingerprint string `json:"entryConfigFingerprint,omitempty"` NoiseSegments []string `json:"noiseSegments,omitempty"` ServiceOverrides []AggregatePathOverride `json:"serviceOverrides,omitempty"` @@ -539,6 +560,7 @@ func aggregateEntryConfigHash(config *AggregatePrintingPressConfig) string { }{ BaseURL: config.BaseURL, AssetMode: config.AssetMode, + IncludeSpec: config.IncludeSpec, EntryConfigFingerprint: config.EntryConfigFingerprint, NoiseSegments: append([]string(nil), config.NoiseSegments...), ServiceOverrides: append([]AggregatePathOverride(nil), config.ServiceOverrides...), @@ -564,19 +586,21 @@ func aggregateEntryConfigHash(config *AggregatePrintingPressConfig) string { return fmt.Sprintf("%x", xxhash.Sum64(b)) } -func aggregateEntryRenderConfigHash(baseConfigHash string, developerMode bool, lintResults []*drV3.RuleFunctionResult, contentHash string) string { - if !developerMode && contentHash == "" { - return baseConfigHash +func aggregateEntryRenderConfigHash(baseConfigHash string, developerMode bool, lintResults []*drV3.RuleFunctionResult, contentHash string, specKind SpecKind) string { + if !specKind.IsKnown() { + specKind = SpecKindOpenAPI } payload := struct { BaseConfigHash string `json:"baseConfigHash"` DeveloperMode bool `json:"developerMode,omitempty"` ContentHash string `json:"contentHash,omitempty"` + SpecKind SpecKind `json:"specKind,omitempty"` LintResults []aggregateLintResultFingerprint `json:"lintResults,omitempty"` }{ BaseConfigHash: baseConfigHash, DeveloperMode: developerMode, ContentHash: contentHash, + SpecKind: specKind, LintResults: aggregateLintResultFingerprints(lintResults), } b, err := json.Marshal(payload) @@ -825,9 +849,10 @@ func hashSpecBytes(content []byte) string { func parseAggregateSpecMetadata(content []byte) (aggregateSpecMetadata, error) { var parsed struct { - OpenAPI string `yaml:"openapi"` - Swagger string `yaml:"swagger"` - Info struct { + OpenAPI string `yaml:"openapi"` + Swagger string `yaml:"swagger"` + AsyncAPI string `yaml:"asyncapi"` + Info struct { Title string `yaml:"title"` Summary string `yaml:"summary"` Description string `yaml:"description"` @@ -841,15 +866,19 @@ func parseAggregateSpecMetadata(content []byte) (aggregateSpecMetadata, error) { if err := yaml.Unmarshal(content, &parsed); err != nil { return aggregateSpecMetadata{}, err } - if strings.TrimSpace(parsed.OpenAPI) == "" && strings.TrimSpace(parsed.Swagger) == "" { + specKind := SpecKindOpenAPI + if strings.TrimSpace(parsed.AsyncAPI) != "" { + specKind = SpecKindAsyncAPI + } else if strings.TrimSpace(parsed.OpenAPI) == "" && strings.TrimSpace(parsed.Swagger) == "" { return aggregateSpecMetadata{}, nil } return aggregateSpecMetadata{ - Title: strings.TrimSpace(parsed.Info.Title), - Summary: chooseCatalogSummary(parsed.Info.Summary, parsed.Info.Description), - Contact: catalogContactFromFields(parsed.Info.Contact.Name, parsed.Info.Contact.Email), - Version: strings.TrimSpace(parsed.Info.Version), - Valid: true, + Title: strings.TrimSpace(parsed.Info.Title), + Summary: chooseCatalogSummary(parsed.Info.Summary, parsed.Info.Description), + Contact: catalogContactFromFields(parsed.Info.Contact.Name, parsed.Info.Contact.Email), + Version: strings.TrimSpace(parsed.Info.Version), + SpecKind: specKind, + Valid: true, }, nil } diff --git a/printingpress/aggregate_state_sqlite.go b/printingpress/aggregate_state_sqlite.go index 2cd75eb..ecefbe6 100644 --- a/printingpress/aggregate_state_sqlite.go +++ b/printingpress/aggregate_state_sqlite.go @@ -51,6 +51,7 @@ func (s *sqliteSpecStateStore) init() error { hash TEXT NOT NULL, config_hash TEXT, metadata_version INTEGER, + spec_kind TEXT, title TEXT, summary TEXT, contact_name TEXT, @@ -78,6 +79,9 @@ func (s *sqliteSpecStateStore) init() error { if _, err := s.db.Exec(`ALTER TABLE spec_state ADD COLUMN metadata_version INTEGER`); err != nil && !strings.Contains(err.Error(), "duplicate column name") { return fmt.Errorf("printingpress: migrating sqlite state store: %w", err) } + if _, err := s.db.Exec(`ALTER TABLE spec_state ADD COLUMN spec_kind TEXT`); err != nil && !strings.Contains(err.Error(), "duplicate column name") { + return fmt.Errorf("printingpress: migrating sqlite state store: %w", err) + } if _, err := s.db.Exec(`ALTER TABLE spec_state ADD COLUMN contact_name TEXT`); err != nil && !strings.Contains(err.Error(), "duplicate column name") { return fmt.Errorf("printingpress: migrating sqlite state store: %w", err) } @@ -93,6 +97,9 @@ func (s *sqliteSpecStateStore) init() error { if _, err := s.db.Exec(`UPDATE spec_state SET metadata_version = 0 WHERE metadata_version IS NULL`); err != nil { return fmt.Errorf("printingpress: normalizing sqlite state store: %w", err) } + if _, err := s.db.Exec(`UPDATE spec_state SET spec_kind = 'openapi' WHERE spec_kind IS NULL OR spec_kind = ''`); err != nil { + return fmt.Errorf("printingpress: normalizing sqlite state store: %w", err) + } if _, err := s.db.Exec(`UPDATE spec_state SET contact_name = '' WHERE contact_name IS NULL`); err != nil { return fmt.Errorf("printingpress: normalizing sqlite state store: %w", err) } @@ -104,7 +111,7 @@ func (s *sqliteSpecStateStore) init() error { func (s *sqliteSpecStateStore) Load(namespace string) (map[string]*SpecStateRecord, error) { rows, err := s.db.Query( - `SELECT relative_path, hash, config_hash, metadata_version, title, summary, contact_name, contact_email, service_key, display_name, version, format, output_subdir, updated_at + `SELECT relative_path, hash, config_hash, metadata_version, spec_kind, title, summary, contact_name, contact_email, service_key, display_name, version, format, output_subdir, updated_at FROM spec_state WHERE namespace = ?`, namespace, ) @@ -119,6 +126,7 @@ func (s *sqliteSpecStateStore) Load(namespace string) (map[string]*SpecStateReco var updatedAt string var configHash sql.NullString var metadataVersion sql.NullInt64 + var specKind sql.NullString var title sql.NullString var summary sql.NullString var contactName sql.NullString @@ -133,6 +141,7 @@ func (s *sqliteSpecStateStore) Load(namespace string) (map[string]*SpecStateReco &record.Hash, &configHash, &metadataVersion, + &specKind, &title, &summary, &contactName, @@ -148,6 +157,10 @@ func (s *sqliteSpecStateStore) Load(namespace string) (map[string]*SpecStateReco } record.ConfigHash = configHash.String record.MetadataVersion = int(metadataVersion.Int64) + record.SpecKind = SpecKind(specKind.String) + if !record.SpecKind.IsKnown() { + record.SpecKind = SpecKindOpenAPI + } record.Title = title.String record.Summary = summary.String record.ContactName = contactName.String @@ -182,12 +195,13 @@ func (s *sqliteSpecStateStore) Upsert(namespace string, records []*SpecStateReco statement, err := tx.Prepare(` INSERT INTO spec_state ( - namespace, relative_path, hash, config_hash, metadata_version, title, summary, contact_name, contact_email, service_key, display_name, version, format, output_subdir, updated_at - ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) + namespace, relative_path, hash, config_hash, metadata_version, spec_kind, title, summary, contact_name, contact_email, service_key, display_name, version, format, output_subdir, updated_at + ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON CONFLICT(namespace, relative_path) DO UPDATE SET hash=excluded.hash, config_hash=excluded.config_hash, metadata_version=excluded.metadata_version, + spec_kind=excluded.spec_kind, title=excluded.title, summary=excluded.summary, contact_name=excluded.contact_name, @@ -217,6 +231,7 @@ func (s *sqliteSpecStateStore) Upsert(namespace string, records []*SpecStateReco record.Hash, record.ConfigHash, record.MetadataVersion, + record.SpecKind.MachineValue(), record.Title, record.Summary, record.ContactName, diff --git a/printingpress/aggregate_test.go b/printingpress/aggregate_test.go index b7d50e6..5aea398 100644 --- a/printingpress/aggregate_test.go +++ b/printingpress/aggregate_test.go @@ -60,6 +60,82 @@ func TestAggregatePrintingPress_PressModel_GroupsServicesAndVersions(t *testing. assert.Equal(t, "services/shipping/versions/2024-06-01/index.html", shipping.LatestVersion.OverviewHref) } +func TestAggregatePrintingPress_PressModel_DiscoversMixedOpenAPIAndAsyncAPIEntries(t *testing.T) { + root := t.TempDir() + writeAggregateSpec(t, root, "services/events/specs/openapi.yaml", "Events API", "v1") + writeAggregateAsyncAPISpec(t, root, "services/events/specs/asyncapi.yaml", "Events Stream", "v1") + outputDir := filepath.Join(root, "site") + + ap, err := CreateAggregatePrintingPressFromPath(root, &AggregatePrintingPressConfig{ + OutputDir: outputDir, + BuildMode: AggregateBuildModeFull, + StateStore: NewMemorySpecStateStore(), + }) + require.NoError(t, err) + + catalog, err := ap.PressModel() + require.NoError(t, err) + events := findCatalogService(t, catalog, "events") + require.NotNil(t, events.LatestVersion) + require.Len(t, events.LatestVersion.Entries, 2) + + kinds := map[string]string{} + for _, entry := range events.LatestVersion.Entries { + kinds[entry.SpecKind.MachineValue()] = entry.SpecKindLabel + } + assert.Equal(t, "OpenAPI", kinds["openapi"]) + assert.Equal(t, "AsyncAPI", kinds["asyncapi"]) + + stats, err := ap.PrintSelectedOutputs(AggregateRenderOptions{HTML: true, LLM: true, JSON: true}) + require.NoError(t, err) + assert.Equal(t, 2, stats.Specs) + + versionHTML, err := os.ReadFile(filepath.Join(outputDir, "services", "events", "versions", "v1", "index.html")) + require.NoError(t, err) + assert.Contains(t, string(versionHTML), `data-spec-kind="openapi"`) + assert.Contains(t, string(versionHTML), `data-spec-kind="asyncapi"`) + assert.Contains(t, string(versionHTML), `>AsyncAPI<`) + + catalogJSON, err := os.ReadFile(filepath.Join(outputDir, pppaths.FileBundleJSON)) + require.NoError(t, err) + assert.Contains(t, string(catalogJSON), `"specKind":"openapi"`) + assert.Contains(t, string(catalogJSON), `"specKind":"asyncapi"`) + + llms, err := os.ReadFile(filepath.Join(outputDir, pppaths.FileLLMIndex)) + require.NoError(t, err) + assert.Contains(t, string(llms), "Events Stream") + assert.Contains(t, string(llms), "AsyncAPI") +} + +func TestAggregatePrintingPress_IncludesSourceSpecPerEntry(t *testing.T) { + root := t.TempDir() + relativePath := "services/users/specs/openapi.yaml" + writeAggregateSpec(t, root, relativePath, "Users API", "v1") + outputDir := filepath.Join(root, "site") + + ap, err := CreateAggregatePrintingPressFromPath(root, &AggregatePrintingPressConfig{ + OutputDir: outputDir, + BuildMode: AggregateBuildModeFull, + IncludeSpec: true, + StateStore: NewMemorySpecStateStore(), + }) + require.NoError(t, err) + catalog, err := ap.PressModel() + require.NoError(t, err) + users := findCatalogService(t, catalog, "users") + require.NotNil(t, users.LatestVersion) + require.Len(t, users.LatestVersion.Entries, 1) + entry := users.LatestVersion.Entries[0] + + _, err = ap.PrintSelectedOutputs(AggregateRenderOptions{HTML: true, JSON: true}) + require.NoError(t, err) + assert.FileExists(t, filepath.Join(outputDir, filepath.FromSlash(entry.OutputSubdir), "spec", "openapi.yaml")) + + bundleBytes, err := os.ReadFile(filepath.Join(outputDir, filepath.FromSlash(entry.OutputSubdir), pppaths.FileBundleJSON)) + require.NoError(t, err) + assert.Contains(t, string(bundleBytes), `"href":"spec/openapi.yaml"`) +} + func TestAggregatePrintingPress_PressModel_GroupsAPIsGuruStyleVersionFolders(t *testing.T) { root := t.TempDir() writeAggregateSpec(t, root, "APIs/adyen.com/AccountService/5/openapi.yaml", "Account API", "5") @@ -1365,6 +1441,40 @@ func TestAggregatePrintingPress_PrintHTML_SkipsUnsupportedSpecsAndContinues(t *t assert.Equal(t, 1, stats.Specs) } +func TestAggregatePrintingPress_PressModel_OmitsUnsupportedAsyncAPI2FromCatalogAndState(t *testing.T) { + root := t.TempDir() + writeAggregateSpec(t, root, "services/users/src/specs/usersv1.yaml", "Users API", "v1") + writeAggregateAsyncAPI2Spec(t, root, "services/events/specs/asyncapi.yaml", "Legacy Events", "v1") + outputDir := filepath.Join(root, "site") + store := NewMemorySpecStateStore() + + ap, err := CreateAggregatePrintingPressFromPath(root, &AggregatePrintingPressConfig{ + OutputDir: outputDir, + BuildMode: AggregateBuildModeFull, + StateStore: store, + StateNamespace: "test", + NoiseSegments: []string{"src", "specs"}, + DisableSkippedRendering: false, + }) + require.NoError(t, err) + + catalog, err := ap.PressModel() + require.NoError(t, err) + require.Len(t, catalog.Warnings, 1) + assert.Contains(t, catalog.Warnings[0].Message, "unsupported AsyncAPI 2.x") + assert.Contains(t, catalog.Warnings[0].Context, "services/events/specs/asyncapi.yaml") + assert.NotContains(t, catalogServiceKeys(catalog), "events") + + stats, err := ap.PrintSelectedOutputs(AggregateRenderOptions{HTML: true}) + require.NoError(t, err) + assert.Equal(t, 1, stats.Specs) + + loaded, err := store.Load("test") + require.NoError(t, err) + assert.Contains(t, loaded, "services/users/src/specs/usersv1.yaml") + assert.NotContains(t, loaded, "services/events/specs/asyncapi.yaml") +} + func TestAggregatePrintingPress_PrintHTML_HidesSkippedVersionsFromHeaderSwitchers(t *testing.T) { root := t.TempDir() writeAggregateSpec(t, root, "services/users/specs/usersv1.yaml", "Users API", "v1") @@ -1507,6 +1617,7 @@ func TestAggregateEntryConfigHashIncludesEntryOutputOptions(t *testing.T) { {name: "llm aggregate threshold", config: &AggregatePrintingPressConfig{LLMAggregateSpecSizeThresholdBytes: 4096}}, {name: "llm shard size", config: &AggregatePrintingPressConfig{LLMMaxAggregateFileBytes: 8192}}, {name: "llm monolith mode", config: &AggregatePrintingPressConfig{LLMGenerateMonoliths: LLMGenerateMonolithsNever}}, + {name: "include spec", config: &AggregatePrintingPressConfig{IncludeSpec: true}}, {name: "entry config fingerprint", config: &AggregatePrintingPressConfig{EntryConfigFingerprint: "diagnostics-v1"}}, } @@ -1517,6 +1628,16 @@ func TestAggregateEntryConfigHashIncludesEntryOutputOptions(t *testing.T) { } } +func TestAggregateEntryRenderConfigHashIncludesSpecKind(t *testing.T) { + baseHash := normalizedAggregateEntryConfigHash(t, &AggregatePrintingPressConfig{}) + + openapiHash := aggregateEntryRenderConfigHash(baseHash, false, nil, "", SpecKindOpenAPI) + asyncapiHash := aggregateEntryRenderConfigHash(baseHash, false, nil, "", SpecKindAsyncAPI) + + assert.NotEqual(t, baseHash, openapiHash, "spec kind should invalidate legacy aggregate render/config hashes once") + assert.NotEqual(t, openapiHash, asyncapiHash) +} + func TestAggregatePrintingPress_BuildEntrySiteUsesSpecLintResults(t *testing.T) { root := t.TempDir() relPath := "services/users/openapi.yaml" @@ -1568,6 +1689,7 @@ func TestSQLiteSpecStateStore_RoundTripsRecords(t *testing.T) { Hash: "abc123", ConfigHash: "cfg-123", MetadataVersion: aggregateMetadataVersion, + SpecKind: SpecKindAsyncAPI, Title: "Users API", Summary: "Core account resources.", ContactName: "API Support", @@ -1587,6 +1709,7 @@ func TestSQLiteSpecStateStore_RoundTripsRecords(t *testing.T) { assert.Equal(t, record.Hash, loaded[record.RelativePath].Hash) assert.Equal(t, record.ConfigHash, loaded[record.RelativePath].ConfigHash) assert.Equal(t, record.MetadataVersion, loaded[record.RelativePath].MetadataVersion) + assert.Equal(t, record.SpecKind, loaded[record.RelativePath].SpecKind) assert.Equal(t, record.Summary, loaded[record.RelativePath].Summary) assert.Equal(t, record.ContactName, loaded[record.RelativePath].ContactName) assert.Equal(t, record.ContactEmail, loaded[record.RelativePath].ContactEmail) @@ -1636,6 +1759,7 @@ func TestSQLiteSpecStateStore_LoadsLegacyRowsWithNullSummary(t *testing.T) { require.Contains(t, loaded, "services/users/spec.yaml") assert.Equal(t, "", loaded["services/users/spec.yaml"].ConfigHash) assert.Equal(t, 0, loaded["services/users/spec.yaml"].MetadataVersion) + assert.Equal(t, SpecKindOpenAPI, loaded["services/users/spec.yaml"].SpecKind) assert.Equal(t, "", loaded["services/users/spec.yaml"].Summary) assert.Equal(t, "", loaded["services/users/spec.yaml"].ContactName) assert.Equal(t, "", loaded["services/users/spec.yaml"].ContactEmail) @@ -1791,6 +1915,51 @@ paths: return absPath } +func writeAggregateAsyncAPISpec(t *testing.T, root, relPath, title, version string) string { + t.Helper() + spec := strings.TrimSpace(` +asyncapi: 3.0.0 +info: + title: `+strconv.Quote(title)+` + version: `+strconv.Quote(version)+` +channels: + events: + address: events.{id} +operations: + publishEvent: + action: send + channel: + $ref: '#/channels/events' + messages: + - $ref: '#/components/messages/EventMessage' +components: + messages: + EventMessage: + name: EventMessage + payload: + $ref: '#/components/schemas/Event' + schemas: + Event: + type: object + properties: + id: + type: string +`) + "\n" + return writeAggregateSpecDocument(t, root, relPath, spec) +} + +func writeAggregateAsyncAPI2Spec(t *testing.T, root, relPath, title, version string) string { + t.Helper() + spec := strings.TrimSpace(` +asyncapi: 2.6.0 +info: + title: `+strconv.Quote(title)+` + version: `+strconv.Quote(version)+` +channels: {} +`) + "\n" + return writeAggregateSpecDocument(t, root, relPath, spec) +} + func aggregateSpecDocument(title, version string, paths []string, schemas []string) string { var b strings.Builder b.WriteString("openapi: 3.1.0\n") @@ -1826,6 +1995,20 @@ func findCatalogService(t *testing.T, catalog *ppmodel.CatalogSite, key string) return nil } +func catalogServiceKeys(catalog *ppmodel.CatalogSite) []string { + if catalog == nil { + return nil + } + keys := make([]string, 0, len(catalog.Services)) + for _, service := range catalog.Services { + if service == nil { + continue + } + keys = append(keys, service.Key) + } + return keys +} + func findCatalogEntry(t *testing.T, service *ppmodel.CatalogService, versionLabel string) *ppmodel.CatalogSpecEntry { t.Helper() for _, version := range service.Versions { diff --git a/printingpress/aggregate_writer.go b/printingpress/aggregate_writer.go index 490815b..cdc3c00 100644 --- a/printingpress/aggregate_writer.go +++ b/printingpress/aggregate_writer.go @@ -70,6 +70,7 @@ func (ap *AggregatePrintingPress) buildEntrySite(spec *aggregateDiscoveredSpec, SpecPath: spec.AbsolutePath, OutputDir: entryOutput, AssetMode: ap.config.AssetMode, + IncludeSpec: ap.config.IncludeSpec, SharedAssetBaseURL: ap.entrySharedAssetBaseURL(spec), Footer: cloneFooterConfig(ap.config.Footer), MaxPatternRepeatBudget: ap.config.MaxPatternRepeatBudget, @@ -101,7 +102,14 @@ func (ap *AggregatePrintingPress) buildEntrySite(spec *aggregateDiscoveredSpec, return nil, err } site.HeaderContext = entry.HeaderContext + renderedSource := site.Source site.Source = entry.Source + if ap.config.IncludeSpec && entry.Source != nil && renderedSource != nil { + includedSource := *entry.Source + includedSource.Href = renderedSource.Href + includedSource.LinkEnabled = renderedSource.LinkEnabled + site.Source = &includedSource + } return site, nil } @@ -321,6 +329,7 @@ func (ap *AggregatePrintingPress) persistState(plan *aggregateBuildPlan) error { Hash: spec.Hash, ConfigHash: spec.ConfigHash, MetadataVersion: aggregateMetadataVersion, + SpecKind: spec.SpecKind, Title: spec.Title, Summary: spec.Summary, ContactName: catalogContactName(spec.Contact), @@ -1209,6 +1218,9 @@ func catalogVersionEntriesContent(service *ppmodel.CatalogService, version *ppmo if _, err := io.WriteString(w, `

`+templ.EscapeString(entry.Title)+`

`); err != nil { return err } + if _, err := io.WriteString(w, catalogSpecKindBadgeHTML(entry)); err != nil { + return err + } if _, err := io.WriteString(w, catalogSummaryHTML(entry.Summary)); err != nil { return err } @@ -1422,6 +1434,25 @@ func catalogSummaryHTML(value string) string { return builder.String() } +func catalogSpecKindBadgeHTML(entry *ppmodel.CatalogSpecEntry) string { + label := catalogEntrySpecKindLabel(entry) + if label == "" { + return "" + } + return `

` + templ.EscapeString(label) + `

` +} + +func catalogEntrySpecKindLabel(entry *ppmodel.CatalogSpecEntry) string { + if entry == nil { + return "" + } + if strings.TrimSpace(entry.SpecKindLabel) != "" { + return strings.TrimSpace(entry.SpecKindLabel) + } + return entry.SpecKind.DisplayLabel() +} + func catalogServiceDiagnosticsHref(fromDir string, service *ppmodel.CatalogService) string { entries := visibleCatalogServiceEntries(service) if len(entries) != 1 { @@ -1646,6 +1677,10 @@ func buildCatalogAgentsGuide(catalog *ppmodel.CatalogSite) string { builder.WriteString(" | [AGENTS.md](") builder.WriteString(catalogEntryAgentsPath(entry)) builder.WriteString(")") + if label := catalogEntrySpecKindLabel(entry); label != "" { + builder.WriteString(" — ") + builder.WriteString(label) + } if strings.TrimSpace(entry.RelativePath) != "" { builder.WriteString(" — ") builder.WriteString(entry.RelativePath) @@ -1697,6 +1732,10 @@ func buildCatalogLLMIndex(catalog *ppmodel.CatalogSite) string { builder.WriteString("](") builder.WriteString(catalogEntryLLMPath(entry)) builder.WriteString(")") + if label := catalogEntrySpecKindLabel(entry); label != "" { + builder.WriteString(" — ") + builder.WriteString(label) + } if strings.TrimSpace(entry.RelativePath) != "" { builder.WriteString(" — ") builder.WriteString(entry.RelativePath) @@ -1749,6 +1788,10 @@ func buildServiceLLMIndex(service *ppmodel.CatalogService) string { builder.WriteString("](") builder.WriteString(relativeMarkdownLink(current, catalogEntryLLMPath(entry))) builder.WriteString(")") + if label := catalogEntrySpecKindLabel(entry); label != "" { + builder.WriteString(" — ") + builder.WriteString(label) + } if strings.TrimSpace(entry.RelativePath) != "" { builder.WriteString(" — ") builder.WriteString(entry.RelativePath) @@ -1794,6 +1837,10 @@ func buildVersionLLMIndex(service *ppmodel.CatalogService, version *ppmodel.Cata builder.WriteString(" | [AGENTS.md](") builder.WriteString(relativeMarkdownLink(current, catalogEntryAgentsPath(entry))) builder.WriteString(")") + if label := catalogEntrySpecKindLabel(entry); label != "" { + builder.WriteString(" — ") + builder.WriteString(label) + } if strings.TrimSpace(entry.RelativePath) != "" { builder.WriteString(" — ") builder.WriteString(entry.RelativePath) diff --git a/printingpress/api.go b/printingpress/api.go index b20cdc5..917e1c9 100644 --- a/printingpress/api.go +++ b/printingpress/api.go @@ -15,6 +15,7 @@ import ( doctormodel "github.com/pb33f/doctor/model" v3 "github.com/pb33f/doctor/model/high/v3" ppmodel "github.com/pb33f/doctor/printingpress/model" + "github.com/pb33f/libasyncapi" "github.com/pb33f/libopenapi" "github.com/pb33f/libopenapi/bundler" "github.com/pb33f/libopenapi/datamodel" @@ -36,9 +37,13 @@ type PrintingPressConfig struct { DeveloperMode bool ExpiresAt *time.Time ArchiveExportURL string - LintResults []*v3.RuleFunctionResult - Footer *ppmodel.FooterConfig - Artifact *ArtifactManifestConfig + // IncludeSpec copies the input OpenAPI or AsyncAPI document into the HTML + // artifact and links rendered source locations to that copy. It is disabled + // by default because specifications may contain sensitive information. + IncludeSpec bool + LintResults []*v3.RuleFunctionResult + Footer *ppmodel.FooterConfig + Artifact *ArtifactManifestConfig // EnableContentPages discovers Markdown files next to the local spec or under // docs/ and renders them as guide pages. Conventional names such as about.md // and docs/guide.md keep built-in defaults, and front matter can override @@ -140,9 +145,12 @@ type PressStatistics struct { } type pressSource struct { - specBytes []byte - v3Model *libopenapi.DocumentModel[highv3.Document] - drModel *doctormodel.DrDocument + specBytes []byte + v3Model *libopenapi.DocumentModel[highv3.Document] + drModel *doctormodel.DrDocument + asyncDoc libasyncapi.Document + specKind SpecKind + specVersion string } var bundleBytesWithOrigins = bundler.BundleBytesComposedWithOrigins @@ -159,7 +167,7 @@ func createPrintingPress(config *PrintingPressConfig, source pressSource) (*Prin }, nil } -// CreatePrintingPressFromBytes creates a printing press from raw OpenAPI bytes. +// CreatePrintingPressFromBytes creates a printing press from raw OpenAPI or AsyncAPI bytes. // // BasePath is used to resolve file references when the source spans multiple files. // A nil config uses the default options. @@ -170,13 +178,23 @@ func CreatePrintingPressFromBytes(specBytes []byte, config *PrintingPressConfig) // CreatePrintingPressFromV3Model creates a printing press from an existing libopenapi v3 model. // A nil config uses the default options. func CreatePrintingPressFromV3Model(v3Model *libopenapi.DocumentModel[highv3.Document], config *PrintingPressConfig) (*PrintingPress, error) { - return createPrintingPress(clonePrintingPressConfig(config), pressSource{v3Model: v3Model}) + return createPrintingPress(clonePrintingPressConfig(config), pressSource{v3Model: v3Model, specKind: SpecKindOpenAPI}) } // CreatePrintingPressFromDrModel creates a printing press from an existing doctor model. // A nil config uses the default options. func CreatePrintingPressFromDrModel(drModel *doctormodel.DrDocument, config *PrintingPressConfig) (*PrintingPress, error) { - return createPrintingPress(clonePrintingPressConfig(config), pressSource{drModel: drModel}) + return createPrintingPress(clonePrintingPressConfig(config), pressSource{drModel: drModel, specKind: SpecKindOpenAPI}) +} + +// CreatePrintingPressFromAsyncAPIDocument creates a printing press from an existing AsyncAPI document. +// A nil config uses the default options. +func CreatePrintingPressFromAsyncAPIDocument(asyncDoc libasyncapi.Document, config *PrintingPressConfig) (*PrintingPress, error) { + source := pressSource{asyncDoc: asyncDoc, specKind: SpecKindAsyncAPI} + if asyncDoc != nil { + source.specVersion = asyncDoc.GetVersion() + } + return createPrintingPress(clonePrintingPressConfig(config), source) } // ActivityStream returns a best-effort live stream of activity snapshots for the @@ -373,6 +391,8 @@ func (pp *PrintingPress) prepareEngineConfig(job *activityJob) (*pressEngineConf } cfg := &pressEngineConfig{ + SpecKind: pp.source.specKind, + SpecVersion: pp.source.specVersion, OutputDir: outputDir, BaseURL: pp.config.BaseURL, AssetMode: pp.config.AssetMode, @@ -387,6 +407,7 @@ func (pp *PrintingPress) prepareEngineConfig(job *activityJob) (*pressEngineConf DeveloperMode: pp.config.DeveloperMode, DocsExpiresAt: printingPressExpiryString(pp.config.ExpiresAt), ArchiveExportURL: pp.config.ArchiveExportURL, + IncludeSpec: pp.config.IncludeSpec, LintResults: pp.config.LintResults, Footer: cloneFooterConfig(pp.config.Footer), MaxPatternRepeatBudget: pp.config.MaxPatternRepeatBudget, @@ -406,19 +427,41 @@ func (pp *PrintingPress) prepareEngineConfig(job *activityJob) (*pressEngineConf MinOperations: 25, }, } - switch { case pp.source.drModel != nil: job.snapshot("using existing doctor model", 1, 1, 0) + cfg.SpecKind = SpecKindOpenAPI cfg.DrDoc = pp.source.drModel + cfg.SpecVersion = openAPIDocumentVersion(cfg.DrDoc) case pp.source.v3Model != nil: job.snapshot("building doctor model", 0, 1, 0) + cfg.SpecKind = SpecKindOpenAPI cfg.DrDoc = buildDrDocument(pp.source.v3Model) + cfg.SpecVersion = openAPIDocumentVersion(cfg.DrDoc) job.snapshot("doctor model built", 1, 1, 0) + case pp.source.asyncDoc != nil: + job.snapshot("using existing AsyncAPI document", 1, 1, 0) + cfg.SpecKind = SpecKindAsyncAPI + cfg.SpecVersion = pp.source.asyncDoc.GetVersion() + cfg.AsyncDoc = pp.source.asyncDoc + if pp.source.asyncDoc.IsPartial() { + for _, parseErr := range pp.source.asyncDoc.Errors() { + cfg.BuildWarnings = append(cfg.BuildWarnings, &ppmodel.BuildWarning{ + Message: "AsyncAPI document parse issue", + Err: parseErr, + }) + } + } case len(pp.source.specBytes) > 0: specBytes := pp.source.specBytes cfg.SourceSizeBytes = int64(len(specBytes)) cfg.SpecFormat = DetectSpecFormat(specBytes) + identity, err := DetectSpecIdentity(specBytes) + if err != nil { + return nil, err + } + cfg.SpecKind = identity.Kind + cfg.SpecVersion = identity.Version basePath, err := pp.resolveBasePath() if err != nil { return nil, err @@ -427,6 +470,27 @@ func (pp *PrintingPress) prepareEngineConfig(job *activityJob) (*pressEngineConf cfg.SpecLocation = formatSpecLocation(pp.config.SpecPath, basePath) cfg.SpecPath = pp.config.SpecPath + if identity.Kind.IsAsyncAPI() { + asyncConfig := newPrintingPressAsyncAPIDocumentConfiguration(basePath, cfg.Logger) + job.snapshot("building libasyncapi document", 0, 1, 0) + asyncDoc, err := libasyncapi.NewDocumentWithConfiguration(specBytes, asyncConfig) + if err != nil { + return nil, fmt.Errorf("building AsyncAPI document from source bytes: %w", err) + } + cfg.AsyncDoc = asyncDoc + if asyncDoc.IsPartial() { + for _, parseErr := range asyncDoc.Errors() { + cfg.BuildWarnings = append(cfg.BuildWarnings, &ppmodel.BuildWarning{ + Message: "AsyncAPI document parse issue", + Context: basePath, + Err: parseErr, + }) + } + } + job.snapshot("libasyncapi document built", 1, 1, 0) + break + } + docConfig := newPrintingPressDocumentConfiguration(basePath, cfg.Logger) job.snapshot("building libopenapi document", 0, 4, 0) doc, err := libopenapi.NewDocumentWithConfiguration(specBytes, docConfig) @@ -476,9 +540,24 @@ func (pp *PrintingPress) prepareEngineConfig(job *activityJob) (*pressEngineConf } cfg.DrDoc = buildDrDocument(v3Model) + cfg.SpecVersion = openAPIDocumentVersion(cfg.DrDoc) job.snapshot("doctor model built", 4, 4, 0) } + if len(pp.source.specBytes) == 0 { + if err := pp.prepareModelSourceConfig(cfg); err != nil { + return nil, err + } + } + if err := pp.prepareIncludedSpec(cfg); err != nil { + return nil, err + } + if cfg.SpecKind.IsAsyncAPI() { + if cfg.AsyncDoc == nil { + return nil, ErrNoAsyncAPIDocument + } + return cfg, nil + } if cfg.DrDoc == nil { return nil, ErrNoDrDocument } @@ -488,6 +567,24 @@ func (pp *PrintingPress) prepareEngineConfig(job *activityJob) (*pressEngineConf return cfg, nil } +func (pp *PrintingPress) prepareModelSourceConfig(config *pressEngineConfig) error { + if pp == nil || pp.config == nil || config == nil { + return nil + } + basePath, err := pp.resolveBasePath() + if err != nil { + return err + } + config.SpecRoot = basePath + specPath := strings.TrimSpace(pp.config.SpecPath) + if specPath != "" && !isURLString(specPath) && !filepath.IsAbs(specPath) { + specPath = filepath.Join(basePath, specPath) + } + config.SpecPath = specPath + config.SpecLocation = formatSpecLocation(specPath, basePath) + return nil +} + func printingPressExpiryString(expiresAt *time.Time) string { if expiresAt == nil || expiresAt.IsZero() { return "" @@ -506,6 +603,16 @@ func newPrintingPressDocumentConfiguration(basePath string, logger *slog.Logger) return docConfig } +// newPrintingPressAsyncAPIDocumentConfiguration returns the libasyncapi settings +// used for local Printing Press source builds. +func newPrintingPressAsyncAPIDocumentConfiguration(basePath string, logger *slog.Logger) *libasyncapi.DocumentConfiguration { + docConfig := libasyncapi.NewDocumentConfiguration() + docConfig.AllowFileReferences = true + docConfig.BasePath = basePath + docConfig.Logger = logger + return docConfig +} + func shouldBundleModel(v3Model *libopenapi.DocumentModel[highv3.Document]) bool { if v3Model == nil || v3Model.Index == nil { return false @@ -524,6 +631,13 @@ func buildDrDocument(v3Model *libopenapi.DocumentModel[highv3.Document]) *doctor }) } +func openAPIDocumentVersion(doc *doctormodel.DrDocument) string { + if doc == nil || doc.V3Document == nil || doc.V3Document.Document == nil { + return "" + } + return doc.V3Document.Document.Version +} + func clonePrintingPressConfig(config *PrintingPressConfig) *PrintingPressConfig { if config == nil { return nil @@ -562,6 +676,9 @@ func validateSource(source pressSource) error { if source.drModel != nil { count++ } + if source.asyncDoc != nil { + count++ + } switch count { case 0: return ErrNoSourceInput @@ -739,7 +856,7 @@ func validateAndNormalizeConfig(config *PrintingPressConfig, source pressSource) } } } else { - filename := defaultSpecFilename(DetectSpecFormat(source.specBytes)) + filename := defaultSpecFilename(defaultSpecKindForBytes(source.specBytes), DetectSpecFormat(source.specBytes)) base := normalized.BasePath if base == "" { if wd, err := os.Getwd(); err == nil { @@ -772,6 +889,13 @@ func validateAndNormalizeConfig(config *PrintingPressConfig, source pressSource) Message: ErrNoV3Document.Error(), }) } + if source.asyncDoc != nil && source.asyncDoc.Model() == nil { + issues = append(issues, ValidationIssue{ + Field: "asyncDoc", + Err: ErrNoAsyncAPIDocument, + Message: ErrNoAsyncAPIDocument.Error(), + }) + } if len(issues) > 0 { return nil, &ValidationError{Issues: issues} @@ -779,13 +903,23 @@ func validateAndNormalizeConfig(config *PrintingPressConfig, source pressSource) return &normalized, nil } -func defaultSpecFilename(specFormat string) string { - switch specFormat { - case "json": - return "openapi.json" - default: - return "openapi.yaml" +func defaultSpecKindForBytes(specBytes []byte) SpecKind { + identity, err := DetectSpecIdentity(specBytes) + if err != nil { + return SpecKindOpenAPI + } + return identity.Kind +} + +func defaultSpecFilename(specKind SpecKind, specFormat string) string { + prefix := "openapi" + if specKind.IsAsyncAPI() { + prefix = "asyncapi" } + if specFormat == "json" { + return prefix + ".json" + } + return prefix + ".yaml" } func formatSpecLocation(specPath, specRoot string) string { @@ -844,7 +978,18 @@ func (pp *PrintingPress) sourceKind() string { return sourceKindDrModel case pp.source.v3Model != nil: return sourceKindV3Model + case pp.source.asyncDoc != nil: + return sourceKindAsyncAPIDocument case len(pp.source.specBytes) > 0: + identity, err := DetectSpecIdentity(pp.source.specBytes) + if err == nil { + switch { + case identity.Kind.IsAsyncAPI(): + return sourceKindAsyncAPIBytes + case identity.Kind.IsOpenAPI(): + return sourceKindOpenAPIBytes + } + } return sourceKindBytes default: return "" @@ -918,6 +1063,25 @@ func countClassDiagrams(site *ppmodel.Site) int { if page.MermaidDiagram != "" { total++ } + if page.AsyncAPI != nil { + total += countMediaTypeDiagrams(page.AsyncAPI.Content) + } + } + } + for _, page := range site.Operations { + if page == nil || page.RequestBody == nil { + continue + } + total += countMediaTypeDiagrams(page.RequestBody.Content) + } + return total +} + +func countMediaTypeDiagrams(content []*ppmodel.MediaTypeInfo) int { + total := 0 + for _, mediaType := range content { + if mediaType != nil && mediaType.MermaidDiagram != "" { + total++ } } return total diff --git a/printingpress/api_test.go b/printingpress/api_test.go index f3056cd..f420a41 100644 --- a/printingpress/api_test.go +++ b/printingpress/api_test.go @@ -14,9 +14,14 @@ import ( "time" "github.com/pb33f/doctor/model" + drV3 "github.com/pb33f/doctor/model/high/v3" + ppmodel "github.com/pb33f/doctor/printingpress/model" + slugpkg "github.com/pb33f/doctor/printingpress/slug" + "github.com/pb33f/libasyncapi" "github.com/pb33f/libopenapi" "github.com/pb33f/libopenapi/bundler" "github.com/pb33f/libopenapi/datamodel" + "github.com/pb33f/libopenapi/index" "github.com/pb33f/testify/assert" "github.com/pb33f/testify/require" ) @@ -290,6 +295,1640 @@ func TestCreatePrintingPress_DefaultSpecPathMatchesDetectedFormat(t *testing.T) assert.True(t, strings.HasSuffix(jsonPP.config.SpecPath, "openapi.json")) } +func TestCreatePrintingPress_DefaultSpecPathMatchesDetectedKind(t *testing.T) { + yamlPP, err := CreatePrintingPressFromBytes(minimalAsyncAPISpec(), &PrintingPressConfig{}) + require.NoError(t, err) + require.NotNil(t, yamlPP.config) + assert.True(t, strings.HasSuffix(yamlPP.config.SpecPath, "asyncapi.yaml")) + + jsonPP, err := CreatePrintingPressFromBytes([]byte(`{"asyncapi":"3.0.0","info":{"title":"Streetlights","version":"1.0.0"}}`), &PrintingPressConfig{}) + require.NoError(t, err) + require.NotNil(t, jsonPP.config) + assert.True(t, strings.HasSuffix(jsonPP.config.SpecPath, "asyncapi.json")) +} + +func TestCreatePrintingPress_PrepareEngineConfigRoutesAsyncAPIBytes(t *testing.T) { + pp, err := CreatePrintingPressFromBytes(minimalAsyncAPISpec(), &PrintingPressConfig{ + BasePath: t.TempDir(), + OutputDir: t.TempDir(), + }) + require.NoError(t, err) + + job := pp.activity.startJob(jobTypeModel, "", pp.resolveConfiguredOutputDir(), pp.sourceKind()) + cfg, err := pp.prepareEngineConfig(job) + require.NoError(t, err) + require.NotNil(t, cfg) + + assert.Equal(t, SpecKindAsyncAPI, cfg.SpecKind) + assert.Equal(t, "3.0.0", cfg.SpecVersion) + assert.NotNil(t, cfg.AsyncDoc) + assert.Nil(t, cfg.DrDoc) + assert.Equal(t, sourceKindAsyncAPIBytes, pp.sourceKind()) +} + +func TestCreatePrintingPress_PressModelFromAsyncAPIStreetlights(t *testing.T) { + pp, err := CreatePrintingPressFromBytes(streetlightsAsyncAPISpec(), &PrintingPressConfig{ + BasePath: t.TempDir(), + SpecPath: "streetlights-kafka.yaml", + OutputDir: t.TempDir(), + }) + require.NoError(t, err) + + site, err := pp.PressModel() + require.NoError(t, err) + require.NotNil(t, site) + require.NotNil(t, site.Root) + + assert.Equal(t, SpecKindAsyncAPI, site.SpecKind) + assert.Equal(t, "3.0.0", site.SpecVersion) + assert.Equal(t, SpecKindAsyncAPI, site.Root.SpecKind) + assert.Equal(t, "Streetlights Kafka API", site.Root.Title) + assert.Len(t, site.Operations, 3) + require.NotEmpty(t, site.Models["schemas"]) + require.NotEmpty(t, site.Models["messages"]) + require.NotEmpty(t, site.Models["channels"]) + require.NotEmpty(t, site.Models["replies"]) + require.NotEmpty(t, site.Models["reply-addresses"]) + require.NotEmpty(t, site.Models["correlation-ids"]) + require.NotEmpty(t, site.Root.Security) + assert.Equal(t, "saslScram", site.Root.Security[0].Name) + assert.Equal(t, "scramSha256", site.Root.Security[0].SchemeType) + require.NotNil(t, site.Root.Security[0].Ref) + + receive := findOperationByID(site.Operations, "receiveLightMeasurement") + require.NotNil(t, receive) + require.NotNil(t, receive.AsyncAPI) + assert.Equal(t, "receive", receive.AsyncAPI.Action) + require.Len(t, receive.AsyncAPI.Messages, 2) + assert.Equal(t, "lightMeasured", receive.AsyncAPI.Messages[0].Name) + assert.Equal(t, "lightMeasuredAvro", receive.AsyncAPI.Messages[1].Name) + assert.NotEmpty(t, receive.ExtensionsJSON) + assert.Contains(t, receive.ExtensionsJSON, "telemetry") + + turnOn := findOperationByID(site.Operations, "turnOn") + require.NotNil(t, turnOn) + require.NotNil(t, turnOn.AsyncAPI) + assert.Equal(t, "send", turnOn.AsyncAPI.Action) + require.NotNil(t, turnOn.AsyncAPI.Channel) + assert.Equal(t, "lightTurnOn", turnOn.AsyncAPI.Channel.Name) + require.Len(t, turnOn.AsyncAPI.Messages, 1) + assert.Equal(t, "turnOnOff", turnOn.AsyncAPI.Messages[0].Name) + assert.NotEmpty(t, turnOn.AsyncAPI.Messages[0].Href) + assert.Contains(t, turnOn.AsyncAPI.Bindings, "kafka") + assert.Contains(t, turnOn.AsyncAPI.Traits, "kafka") + assert.Contains(t, turnOn.Tags, "kafka") + require.NotEmpty(t, turnOn.Security) + assert.Equal(t, "saslScram", turnOn.Security[0].Name) + assert.Equal(t, "scramSha256", turnOn.Security[0].SchemeType) + require.NotNil(t, turnOn.Security[0].Ref) + assert.Empty(t, turnOn.CurlJSON) + require.NotNil(t, turnOn.CrossRefs) + turnOnRefs := componentRefNames(turnOn.CrossRefs.ReferencesModels) + assert.Contains(t, turnOnRefs, "lightTurnOn") + assert.Contains(t, turnOnRefs, "turnOnOff") + assert.Contains(t, turnOnRefs, "turnOnOffPayload") + assert.Contains(t, turnOnRefs, "turnOnAccepted") + assert.Contains(t, turnOnRefs, "lightingMeasured") + assert.Contains(t, turnOnRefs, "lightMeasured") + assert.Contains(t, turnOnRefs, "saslScram") + require.NotNil(t, turnOn.AsyncAPI.Reply) + require.NotNil(t, turnOn.AsyncAPI.Reply.Ref) + assert.Equal(t, "turnOnAccepted", turnOn.AsyncAPI.Reply.Ref.Name) + assert.Equal(t, "$message.header#/replyTo", turnOn.AsyncAPI.Reply.Address) + require.NotNil(t, turnOn.AsyncAPI.Reply.Channel) + assert.Equal(t, "lightingMeasured", turnOn.AsyncAPI.Reply.Channel.Name) + require.Len(t, turnOn.AsyncAPI.Reply.Messages, 1) + assert.Equal(t, "lightMeasured", turnOn.AsyncAPI.Reply.Messages[0].Name) + + reply := findModelByName(site.Models["replies"], "turnOnAccepted") + require.NotNil(t, reply) + require.NotNil(t, reply.AsyncAPI) + assert.Equal(t, "$message.header#/replyTo", reply.AsyncAPI.Address) + require.NotNil(t, reply.AsyncAPI.Channel) + assert.Equal(t, "lightingMeasured", reply.AsyncAPI.Channel.Name) + require.Len(t, reply.AsyncAPI.Messages, 1) + assert.Equal(t, "lightMeasured", reply.AsyncAPI.Messages[0].Name) + + turnOff := findOperationByID(site.Operations, "turnOff") + require.NotNil(t, turnOff) + require.NotNil(t, turnOff.AsyncAPI) + require.NotNil(t, turnOff.AsyncAPI.Channel) + assert.Equal(t, "lightTurnOffComponent", turnOff.AsyncAPI.Channel.Name) + assert.Equal(t, "smartylighting.streetlights.1.0.action.{streetlightId}.turn.off", turnOff.AsyncAPI.Channel.Address) + + message := findModelByName(site.Models["messages"], "lightMeasured") + require.NotNil(t, message) + require.NotNil(t, message.AsyncAPI) + assert.Equal(t, "message", message.AsyncAPI.Kind) + require.NotEmpty(t, message.AsyncAPI.Schemas) + assert.Equal(t, "payload", message.AsyncAPI.Schemas[0].Role) + require.NotNil(t, message.AsyncAPI.Schemas[0].Ref) + assert.Equal(t, "lightMeasuredPayload", message.AsyncAPI.Schemas[0].Ref.Name) + assert.Empty(t, message.AsyncAPI.Schemas[0].SchemaJSON) + assert.Empty(t, message.AsyncAPI.Schemas[0].MockJSON) + require.Len(t, message.AsyncAPI.Content, 1) + messageContent := message.AsyncAPI.Content[0] + assert.Equal(t, "application/json", messageContent.MediaType) + require.NotNil(t, messageContent.SchemaRef) + assert.Equal(t, "lightMeasuredPayload", messageContent.SchemaRef.Name) + assert.NotEmpty(t, messageContent.SchemaJSON) + assert.NotEmpty(t, messageContent.MockJSON) + require.Contains(t, messageContent.Examples, "Nominal twilight reading") + assert.NotEmpty(t, message.ExtensionsJSON) + assert.Contains(t, message.ExtensionsJSON, "telemetry") + require.NotNil(t, receive.RequestBody) + require.NotEmpty(t, receive.RequestBody.Content) + assert.Same(t, messageContent, receive.RequestBody.Content[0], "shared messages must reuse immutable media artifacts") + + lightMeasuredAvroMessage := findModelByName(site.Models["messages"], "lightMeasuredAvro") + require.NotNil(t, lightMeasuredAvroMessage) + require.NotNil(t, lightMeasuredAvroMessage.AsyncAPI) + assert.Equal(t, "application/cloudevents+json", lightMeasuredAvroMessage.AsyncAPI.ContentType) + + turnOnOffMessage := findModelByName(site.Models["messages"], "turnOnOff") + require.NotNil(t, turnOnOffMessage) + require.NotNil(t, turnOnOffMessage.CrossRefs) + assert.Contains(t, operationRefSlugs(turnOnOffMessage.CrossRefs.UsedByOperations), "turn-on") + assert.Contains(t, componentRefNames(turnOnOffMessage.CrossRefs.UsesModels), "turnOnOffPayload") + assert.NotEmpty(t, turnOnOffMessage.CrossRefsJSON) + assert.NotEmpty(t, turnOnOffMessage.GraphJSON) + assert.Equal(t, SchemaNodeID("messages", "turnOnOff"), turnOnOffMessage.GraphNodeID) + + schema := findModelByName(site.Models["schemas"], "lightMeasuredPayload") + require.NotNil(t, schema) + assert.NotEmpty(t, schema.SchemaJSON) + assert.NotEmpty(t, schema.MockJSON) + assert.Contains(t, schema.MermaidDiagram, "class lightMeasuredPayload") + assert.Contains(t, schema.MermaidDiagram, "class sentAt") + assert.Contains(t, schema.MermaidDiagram, "lightMeasuredPayload *-- sentAt : sentAt") + + primitiveSchema := findModelByName(site.Models["schemas"], "sentAt") + require.NotNil(t, primitiveSchema) + assert.Empty(t, primitiveSchema.MermaidDiagram) + + turnOnOffPayload := findModelByName(site.Models["schemas"], "turnOnOffPayload") + require.NotNil(t, turnOnOffPayload) + require.NotNil(t, turnOnOffPayload.CrossRefs) + assert.Contains(t, operationRefSlugs(turnOnOffPayload.CrossRefs.UsedByOperations), "turn-on") + assert.Contains(t, componentRefNames(turnOnOffPayload.CrossRefs.UsedByModels), "turnOnOff") + assert.NotEmpty(t, turnOnOffPayload.GraphJSON) + assert.Contains(t, turnOnOffPayload.GraphJSON, "turn-on") + + componentChannel := findModelByName(site.Models["channels"], "lightTurnOffComponent") + require.NotNil(t, componentChannel) + require.NotNil(t, componentChannel.AsyncAPI) + require.Len(t, componentChannel.AsyncAPI.Messages, 1) + + lightTurnOnChannel := findModelByName(site.Models["channels"], "lightTurnOn") + require.NotNil(t, lightTurnOnChannel) + require.NotNil(t, lightTurnOnChannel.CrossRefs) + assert.Contains(t, operationRefSlugs(lightTurnOnChannel.CrossRefs.UsedByOperations), "turn-on") + assert.Contains(t, componentRefNames(lightTurnOnChannel.CrossRefs.UsesModels), "turnOnOff") +} + +func TestCreatePrintingPress_AsyncAPIProtocolsFromChannelServers(t *testing.T) { + pp, err := CreatePrintingPressFromBytes(asyncAPIServerProtocolSpec(), &PrintingPressConfig{ + BasePath: t.TempDir(), + SpecPath: "provider-protocols.yaml", + OutputDir: t.TempDir(), + }) + require.NoError(t, err) + + site, err := pp.PressModel() + require.NoError(t, err) + + natsOperation := findOperationByID(site.Operations, "receiveNatsEvent") + require.NotNil(t, natsOperation) + require.NotNil(t, natsOperation.AsyncAPI) + assert.Equal(t, []string{"pulsar", "nats"}, natsOperation.AsyncAPI.Bindings) + + pubsubOperation := findOperationByID(site.Operations, "sendPubSubEvent") + require.NotNil(t, pubsubOperation) + require.NotNil(t, pubsubOperation.AsyncAPI) + assert.Equal(t, []string{"googlepubsub"}, pubsubOperation.AsyncAPI.Bindings) + + natsChannel := findModelByName(site.Models["channels"], "natsEvents") + require.NotNil(t, natsChannel) + assert.Equal(t, []string{"nats"}, natsChannel.AsyncAPI.Bindings) + + pubsubChannel := findModelByName(site.Models["channels"], "pubsubEvents") + require.NotNil(t, pubsubChannel) + assert.Equal(t, []string{"googlepubsub"}, pubsubChannel.AsyncAPI.Bindings) + + natsNav := findNavOperationByID(site.NavTags, "receiveNatsEvent") + require.NotNil(t, natsNav) + assert.Equal(t, []string{"pulsar", "nats"}, natsNav.Protocols) + pubsubNav := findNavOperationByID(site.NavTags, "sendPubSubEvent") + require.NotNil(t, pubsubNav) + assert.Equal(t, []string{"googlepubsub"}, pubsubNav.Protocols) + + message := findModelByName(site.Models["messages"], "event") + require.NotNil(t, message) + require.NotNil(t, message.AsyncAPI) + assert.Equal(t, []string{"sns"}, message.AsyncAPI.Bindings) +} + +func TestCreatePrintingPress_PrintHTMLAndJSONFromAsyncAPIStreetlights(t *testing.T) { + outputDir := t.TempDir() + pp, err := CreatePrintingPressFromBytes(streetlightsAsyncAPISpec(), &PrintingPressConfig{ + BasePath: t.TempDir(), + SpecPath: "streetlights-kafka.yaml", + OutputDir: outputDir, + }) + require.NoError(t, err) + + site, err := pp.PressModel() + require.NoError(t, err) + turnOn := findOperationByID(site.Operations, "turnOn") + require.NotNil(t, turnOn) + receive := findOperationByID(site.Operations, "receiveLightMeasurement") + require.NotNil(t, receive) + lightMeasuredMessage := findModelByName(site.Models["messages"], "lightMeasured") + require.NotNil(t, lightMeasuredMessage) + lightMeasuredAvroMessage := findModelByName(site.Models["messages"], "lightMeasuredAvro") + require.NotNil(t, lightMeasuredAvroMessage) + lightTurnOnChannel := findModelByName(site.Models["channels"], "lightTurnOn") + require.NotNil(t, lightTurnOnChannel) + require.NotNil(t, receive.RequestBody) + require.NotNil(t, receive.RequestBody.Ref) + assert.Equal(t, "lightMeasured", receive.RequestBody.Ref.Name) + require.Len(t, receive.RequestBody.Refs, 2) + assert.Equal(t, "lightMeasuredAvro", receive.RequestBody.Refs[1].Name) + require.Len(t, receive.RequestBody.Content, 2) + receiveMessageContent := receive.RequestBody.Content[0] + assert.Equal(t, "application/json", receiveMessageContent.MediaType) + require.NotNil(t, receiveMessageContent.SchemaRef) + assert.Equal(t, "lightMeasuredPayload", receiveMessageContent.SchemaRef.Name) + assert.NotEmpty(t, receiveMessageContent.SchemaJSON) + assert.NotEmpty(t, receiveMessageContent.MockJSON) + require.Contains(t, receiveMessageContent.Examples, "Nominal twilight reading") + receiveCloudEventsContent := receive.RequestBody.Content[1] + assert.Equal(t, "application/cloudevents+json", receiveCloudEventsContent.MediaType) + require.NotNil(t, receiveCloudEventsContent.SchemaRef) + assert.Equal(t, "lightMeasuredCloudEventPayload", receiveCloudEventsContent.SchemaRef.Name) + receiveHydration := buildOperationHydrationPayload(receive, nil) + require.NotNil(t, receiveHydration) + require.NotNil(t, receiveHydration.Attributes) + require.Contains(t, receiveHydration.Attributes, "pp-request-body-content") + receiveContentJSON := receiveHydration.Attributes["pp-request-body-content"]["content-json"] + assert.Contains(t, receiveContentJSON, "application/json") + assert.Contains(t, receiveContentJSON, "application/cloudevents+json") + assert.Contains(t, receiveContentJSON, "lightMeasuredPayload") + assert.Contains(t, receiveContentJSON, "lightMeasuredCloudEventPayload") + assert.Contains(t, receiveContentJSON, "lumens") + assert.Contains(t, receiveContentJSON, "Nominal twilight reading") + assert.Contains(t, receiveContentJSON, "mockJson") + messageHydration := buildModelHydrationPayload(lightMeasuredMessage, nil) + require.NotNil(t, messageHydration) + require.NotNil(t, messageHydration.Attributes) + require.Contains(t, messageHydration.Attributes, "pp-message-content") + assert.Nil(t, messageHydration.Model) + messageContentJSON := messageHydration.Attributes["pp-message-content"]["content-json"] + assert.Contains(t, messageContentJSON, "application/json") + assert.Contains(t, messageContentJSON, "lightMeasuredPayload") + assert.Contains(t, messageContentJSON, "Nominal twilight reading") + assert.Contains(t, messageContentJSON, "mockJson") + + stats, err := pp.PrintHTML() + require.NoError(t, err) + require.NotNil(t, stats) + assert.GreaterOrEqual(t, stats.ClassDiagrams, 3) + indexPath := filepath.Join(outputDir, "index.html") + assert.FileExists(t, indexPath) + operationPath := filepath.Join(outputDir, "operations", turnOn.Slug+".html") + assert.FileExists(t, operationPath) + assert.FileExists(t, filepath.Join(outputDir, "models", "messages", lightMeasuredMessage.Slug+".html")) + assert.FileExists(t, filepath.Join(outputDir, "models", "messages", lightMeasuredAvroMessage.Slug+".html")) + assert.FileExists(t, filepath.Join(outputDir, "models", "channels", lightTurnOnChannel.Slug+".html")) + assert.FileExists(t, filepath.Join(outputDir, "models", "security", "sasl-scram.html")) + assert.FileExists(t, filepath.Join(outputDir, "models", "replies", "turn-on-accepted.html")) + assert.FileExists(t, filepath.Join(outputDir, "models", "reply-addresses", "reply-to-header.html")) + assert.FileExists(t, filepath.Join(outputDir, "models", "correlation-ids", "streetlight-command.html")) + assert.FileExists(t, filepath.Join(outputDir, "models", "operation-traits", "kafka.html")) + assert.FileExists(t, filepath.Join(outputDir, "models", "message-traits", "common-headers.html")) + assert.FileExists(t, filepath.Join(outputDir, "data", "viz", "models", "schemas", "light-measured-payload-diagram.js")) + + indexHTML, err := os.ReadFile(indexPath) + require.NoError(t, err) + assert.Contains(t, string(indexHTML), "SECURITY") + assert.Contains(t, string(indexHTML), "saslScram") + assert.Contains(t, string(indexHTML), "scramSha256") + assert.Contains(t, string(indexHTML), ``) + assert.Contains(t, string(indexHTML), ``) + + operationHTML, err := os.ReadFile(operationPath) + require.NoError(t, err) + operationRendered := string(operationHTML) + assert.NotContains(t, operationRendered, "MESSAGE FLOW") + assert.Contains(t, operationRendered, `id="section-asyncapi" data-nav-label="Channel"`) + assert.Contains(t, operationRendered, `id="section-request-body" data-nav-label="Message"`) + assert.Contains(t, operationRendered, "smartylighting.streetlights.1.0.action.{streetlightId}.turn.on") + assert.Contains(t, operationRendered, "$message.header#/replyTo") + assert.Contains(t, operationRendered, "turnOnOff") + assert.Contains(t, operationRendered, `href="models/messages/turn-on-off.html"`) + assert.Contains(t, operationRendered, ` lightingMeasured`) + assert.Contains(t, operationRendered, ` lightMeasured`) + assert.NotContains(t, operationRendered, ``) + assert.NotContains(t, operationRendered, ``) + assert.Contains(t, operationRendered, "SECURITY") + assert.Contains(t, operationRendered, "saslScram") + assert.Contains(t, operationRendered, "scramSha256") + assert.Contains(t, operationRendered, ``) + assert.Contains(t, operationRendered, `class="pp-asyncapi-meta-row pp-asyncapi-bindings-row"`) + + receiveHTML, err := os.ReadFile(filepath.Join(outputDir, "operations", receive.Slug+".html")) + require.NoError(t, err) + receiveRendered := string(receiveHTML) + assert.Contains(t, receiveRendered, `heading="Receive information about environmental lighting conditions of a streetlight."`) + assert.NotContains(t, receiveRendered, `
`) + assert.Contains(t, receiveRendered, `
`) + assert.Contains(t, receiveRendered, ``) + assert.Contains(t, receiveRendered, ``) + assert.Contains(t, receiveRendered, `RCV`) + assert.Contains(t, receiveRendered, ``) + assert.NotContains(t, receiveRendered, ``) + assert.Contains(t, receiveRendered, "Receive information about environmental lighting conditions of a streetlight.") + assert.Contains(t, receiveRendered, `

CHANNEL

`) + assert.Contains(t, receiveRendered, `href="models/channels/lighting-measured.html"`) + assert.Contains(t, receiveRendered, `href="models/messages/light-measured.html"`) + assert.Contains(t, receiveRendered, `href="models/messages/light-measured-avro.html"`) + assert.Contains(t, receiveRendered, `id="section-request-body" data-nav-label="Messages"`) + assert.Contains(t, receiveRendered, ``) + assert.Contains(t, receiveRendered, `class="pp-security pp-dotted-section" id="section-security"`) + assert.Contains(t, receiveRendered, "Operation Extensions") + assert.Contains(t, receiveRendered, "telemetry") + assert.Contains(t, receiveRendered, `class="pp-external-docs pp-dotted-section" id="section-external-docs"`) + assert.NotContains(t, receiveRendered, `pp-asyncapi-card`) + assert.NotContains(t, receiveRendered, `pp-asyncapi-field`) + + messageHTML, err := os.ReadFile(filepath.Join(outputDir, "models", "messages", lightMeasuredMessage.Slug+".html")) + require.NoError(t, err) + messageRendered := string(messageHTML) + assert.Contains(t, messageRendered, `id="section-message-content" data-nav-label="Content"`) + assert.Contains(t, messageRendered, ``) + assert.NotContains(t, messageRendered, `id="section-message" data-nav-label="Message"`) + assert.NotContains(t, messageRendered, `

MESSAGE

`) + assert.NotContains(t, messageRendered, "Content Type") + assert.NotContains(t, messageRendered, "Message Examples") + assert.NotContains(t, messageRendered, `parameter`) + + channelHTML, err := os.ReadFile(filepath.Join(outputDir, "models", "channels", lightTurnOnChannel.Slug+".html")) + require.NoError(t, err) + channelRendered := string(channelHTML) + assert.Contains(t, channelRendered, `id="section-channel" data-nav-label="Channel"`) + assert.Contains(t, channelRendered, ``) + assert.Contains(t, channelRendered, ``) + assert.Contains(t, channelRendered, `class="pp-asyncapi-meta-row pp-asyncapi-bindings-row"`) + assert.Contains(t, channelRendered, `href="models/messages/turn-on-off.html"`) + assert.NotContains(t, channelRendered, `channel`) + assert.NotContains(t, channelRendered, ``) + assert.NotContains(t, securityRendered, `class="pp-asyncapi-model"`) + assert.NotContains(t, securityRendered, `securityScheme`) + + replyHTML, err := os.ReadFile(filepath.Join(outputDir, "models", "replies", "turn-on-accepted.html")) + require.NoError(t, err) + replyRendered := string(replyHTML) + assert.Contains(t, replyRendered, `id="section-reply" data-nav-label="Reply"`) + assert.Contains(t, replyRendered, `

REPLY

`) + assert.Contains(t, replyRendered, ``) + assert.Contains(t, replyRendered, ``) + assert.Contains(t, replyRendered, ``) + assert.Contains(t, replyRendered, `class="pp-component-ref-link"`) + assert.Contains(t, replyRendered, `href="models/channels/lighting-measured.html"`) + assert.Contains(t, replyRendered, `href="models/messages/light-measured.html"`) + assert.Contains(t, replyRendered, `lightMeasured`) + assert.NotContains(t, replyRendered, `reply`) + assert.NotContains(t, replyRendered, `pp-security-scope`) + assert.NotContains(t, replyRendered, `REPLY ADDRESS`) + assert.Contains(t, replyAddressRendered, `Address`) + assert.Contains(t, replyAddressRendered, `$message.header#/replyTo`) + assert.NotContains(t, replyAddressRendered, `replyAddress`) + assert.NotContains(t, replyAddressRendered, `
`) + assert.NotContains(t, replyAddressRendered, ``) + + correlationIDHTML, err := os.ReadFile(filepath.Join(outputDir, "models", "correlation-ids", "streetlight-command.html")) + require.NoError(t, err) + correlationIDRendered := string(correlationIDHTML) + assert.Contains(t, correlationIDRendered, `id="section-correlation-id" data-nav-label="Correlation ID"`) + assert.Contains(t, correlationIDRendered, `

CORRELATION ID

`) + assert.Contains(t, correlationIDRendered, `Location`) + assert.Contains(t, correlationIDRendered, `$message.header#/correlationId`) + assert.NotContains(t, correlationIDRendered, `correlationId`) + assert.NotContains(t, correlationIDRendered, `
`) + assert.NotContains(t, correlationIDRendered, ``) + + operationTraitHTML, err := os.ReadFile(filepath.Join(outputDir, "models", "operation-traits", "kafka.html")) + require.NoError(t, err) + operationTraitRendered := string(operationTraitHTML) + assert.Contains(t, operationTraitRendered, ``) + assert.NotContains(t, operationTraitRendered, ``) + assert.NotContains(t, operationTraitRendered, `operationTrait`) + assert.NotContains(t, operationTraitRendered, `
`) + assert.NotContains(t, operationTraitRendered, `class="pp-asyncapi-model"`) + + messageTraitHTML, err := os.ReadFile(filepath.Join(outputDir, "models", "message-traits", "common-headers.html")) + require.NoError(t, err) + messageTraitRendered := string(messageTraitHTML) + assert.Contains(t, messageTraitRendered, `messageTrait`) + assert.NotContains(t, messageTraitRendered, `
`) + assert.NotContains(t, messageTraitRendered, `class="pp-asyncapi-model"`) + + navTags := readNavTagsFromOutput(t, outputDir) + require.NotEmpty(t, navTags) + assert.Equal(t, "kafka", navTags[0].Name) + assert.Equal(t, "kafka", navTags[0].Protocol) + receiveNav := findNavOperationByID(navTags, "receiveLightMeasurement") + require.NotNil(t, receiveNav) + assert.Equal(t, "receive", receiveNav.Method) + assert.Equal(t, "Receive information about environmental lighting conditions of a streetlight.", receiveNav.Summary) + turnOnNav := findNavOperationByID(navTags, "turnOn") + require.NotNil(t, turnOnNav) + assert.Equal(t, "turnOn", turnOnNav.Summary) + + err = PrintJSONArtifacts(site, "") + require.NoError(t, err) + bundleBytes, err := os.ReadFile(filepath.Join(outputDir, "bundle.json")) + require.NoError(t, err) + var bundle JSONBundle + require.NoError(t, json.Unmarshal(bundleBytes, &bundle)) + assert.Equal(t, SpecKindAsyncAPI, bundle.SpecKind) + assert.Equal(t, "3.0.0", bundle.SpecVersion) + require.NotEmpty(t, bundle.Operations) + assert.Equal(t, SpecKindAsyncAPI, bundle.Operations[0].SpecKind) +} + +func TestCreatePrintingPress_AsyncAPIInlinePayloadDiagram(t *testing.T) { + spec := []byte(`asyncapi: 3.0.0 +info: + title: Inline payload + version: 1.0.0 +channels: {} +operations: {} +components: + messages: + inlineEvent: + name: inlineEvent + contentType: application/json + payload: + type: object + properties: + sentAt: + $ref: '#/components/schemas/sentAt' + details: + type: object + properties: + source: + type: string + schemas: + sentAt: + type: string + format: date-time +`) + pp, err := CreatePrintingPressFromBytes(spec, &PrintingPressConfig{ + BasePath: t.TempDir(), + SpecPath: "inline-asyncapi.yaml", + OutputDir: t.TempDir(), + }) + require.NoError(t, err) + site, err := pp.PressModel() + require.NoError(t, err) + + message := findModelByName(site.Models["messages"], "inlineEvent") + require.NotNil(t, message) + require.NotNil(t, message.AsyncAPI) + require.Len(t, message.AsyncAPI.Content, 1) + content := message.AsyncAPI.Content[0] + assert.Contains(t, content.MermaidDiagram, "class inlineEventPayload") + assert.Contains(t, content.MermaidDiagram, "inlineEventPayload *-- sentAt : sentAt") + assert.Contains(t, content.MermaidDiagram, "inlineEventPayload *-- inlineEventPayload_details : details") + + hydration := buildModelHydrationPayload(message, nil) + require.NotNil(t, hydration) + assert.Contains(t, hydration.Attributes["pp-message-content"]["content-json"], "mermaidDiagram") + assert.Equal(t, 1, countClassDiagrams(site)) + +} + +func TestCreatePrintingPress_AsyncAPIMultiFormatPayloads(t *testing.T) { + spec := []byte(`asyncapi: 3.0.0 +info: + title: Multi format payloads + version: 1.0.0 +channels: {} +operations: {} +components: + messages: + avroEvent: + name: avroEvent + contentType: application/avro + payload: + schemaFormat: application/vnd.apache.avro;version=1.9.0 + schema: + type: record + name: Event + fields: + - name: id + type: string + jsonEvent: + name: jsonEvent + contentType: application/json + payload: + schemaFormat: application/schema+json + schema: + type: object + properties: + sentAt: + $ref: '#/components/schemas/sentAt' + malformedJsonEvent: + name: malformedJsonEvent + contentType: application/json + payload: + schemaFormat: application/schema+json + schema: definitely-not-a-schema + schemas: + sentAt: + type: string + format: date-time +`) + pp, err := CreatePrintingPressFromBytes(spec, &PrintingPressConfig{ + BasePath: t.TempDir(), + SpecPath: "multi-format-asyncapi.yaml", + OutputDir: t.TempDir(), + }) + require.NoError(t, err) + site, err := pp.PressModel() + require.NoError(t, err) + + avro := findModelByName(site.Models["messages"], "avroEvent") + require.NotNil(t, avro) + require.Len(t, avro.AsyncAPI.Content, 1) + avroContent := avro.AsyncAPI.Content[0] + assert.Equal(t, "application/vnd.apache.avro;version=1.9.0", avroContent.SchemaFormat) + assert.Contains(t, avroContent.RawSchemaJSON, `"type": "record"`) + assert.Contains(t, avroContent.RawSchemaJSON, `"fields"`) + assert.Empty(t, avroContent.RawSchemaYAML) + assert.Empty(t, avroContent.SchemaJSON) + assert.Empty(t, avroContent.MockJSON) + assert.Empty(t, avroContent.MermaidDiagram) + + jsonMessage := findModelByName(site.Models["messages"], "jsonEvent") + require.NotNil(t, jsonMessage) + require.Len(t, jsonMessage.AsyncAPI.Content, 1) + jsonContent := jsonMessage.AsyncAPI.Content[0] + assert.Equal(t, "application/schema+json", jsonContent.SchemaFormat) + assert.Contains(t, jsonContent.SchemaJSON, `"sentAt"`) + assert.Contains(t, jsonContent.MermaidDiagram, "jsonEventPayload *-- sentAt : sentAt") + + malformed := findModelByName(site.Models["messages"], "malformedJsonEvent") + require.NotNil(t, malformed) + require.Len(t, malformed.AsyncAPI.Content, 1) + malformedContent := malformed.AsyncAPI.Content[0] + assert.Equal(t, "application/schema+json", malformedContent.SchemaFormat) + assert.Contains(t, malformedContent.RawSchemaJSON, "definitely-not-a-schema") + assert.Empty(t, malformedContent.SchemaJSON) + assert.Empty(t, malformedContent.MockJSON) + assert.Empty(t, malformedContent.MermaidDiagram) +} + +func TestCreatePrintingPress_AsyncAPITaglessOperationsPopulateNav(t *testing.T) { + outputDir := t.TempDir() + pp, err := CreatePrintingPressFromBytes(taglessOperationAsyncAPISpec(), &PrintingPressConfig{ + BasePath: t.TempDir(), + SpecPath: "asyncapi.yaml", + OutputDir: outputDir, + }) + require.NoError(t, err) + + site, err := pp.PressModel() + require.NoError(t, err) + require.NotNil(t, site.Root) + require.Empty(t, site.Root.UntaggedOperations) + require.Len(t, site.NavTags, 1) + require.Equal(t, "Operations", site.NavTags[0].Name) + require.Len(t, site.NavTags[0].Operations, 1) + assert.Equal(t, SpecKindAsyncAPI, site.NavTags[0].Operations[0].SpecKind) + assert.Equal(t, "turnOn", site.NavTags[0].Operations[0].OperationID) + + _, err = pp.PrintHTML() + require.NoError(t, err) + + navTags := readNavTagsFromOutput(t, outputDir) + require.Len(t, navTags, 1) + assert.Equal(t, "Operations", navTags[0].Name) + require.Len(t, navTags[0].Operations, 1) + assert.Equal(t, "turn-on", navTags[0].Operations[0].Slug) + assert.Equal(t, "turnOn", navTags[0].Operations[0].Summary) +} + +func TestCreatePrintingPress_AsyncAPIDiagnosticsAttachByPath(t *testing.T) { + outputDir := t.TempDir() + pp, err := CreatePrintingPressFromBytes(streetlightsAsyncAPISpec(), &PrintingPressConfig{ + BasePath: t.TempDir(), + SpecPath: "streetlights-kafka.yaml", + OutputDir: outputDir, + DeveloperMode: true, + LintResults: []*drV3.RuleFunctionResult{ + { + Message: "message should define examples", + Path: "$.operations.turnOn.messages[0]", + RuleId: "asyncapi-message-examples", + RuleSeverity: "warn", + Rule: &drV3.Rule{Id: "asyncapi-message-examples", Severity: "warn"}, + }, + }, + }) + require.NoError(t, err) + + site, err := pp.PressModel() + require.NoError(t, err) + require.NotNil(t, site.Diagnostics) + assert.Equal(t, SpecKindAsyncAPI, site.Diagnostics.SpecKind) + assert.Equal(t, "AsyncAPI", site.Diagnostics.SpecLabel) + assert.Equal(t, 1, site.Diagnostics.SiteCounts.Total()) + turnOn := findOperationByID(site.Operations, "turnOn") + require.NotNil(t, turnOn) + require.Len(t, turnOn.Problems, 1) + assert.Equal(t, "message should define examples", turnOn.Problems[0].Message) + + _, err = pp.PrintHTML() + require.NoError(t, err) + + diagnosticsHTML, err := os.ReadFile(filepath.Join(outputDir, "diagnostics.html")) + require.NoError(t, err) + assert.Contains(t, string(diagnosticsHTML), "AsyncAPI contract") + assert.NotContains(t, string(diagnosticsHTML), "OpenAPI Contract") +} + +func TestCreatePrintingPress_AsyncAPIDiagnosticsUseExactPathKeys(t *testing.T) { + pp, err := CreatePrintingPressFromBytes(overlappingAsyncAPISpec(), &PrintingPressConfig{ + BasePath: t.TempDir(), + OutputDir: t.TempDir(), + DeveloperMode: true, + LintResults: []*drV3.RuleFunctionResult{ + { + Message: "operation should define traits", + Path: "$.operations.turnOnOff.messages[0]", + RuleId: "asyncapi-operation-traits", + RuleSeverity: "warn", + Rule: &drV3.Rule{Id: "asyncapi-operation-traits", Severity: "warn"}, + }, + }, + }) + require.NoError(t, err) + + site, err := pp.PressModel() + require.NoError(t, err) + turnOn := findOperationByID(site.Operations, "turnOn") + require.NotNil(t, turnOn) + turnOnOff := findOperationByID(site.Operations, "turnOnOff") + require.NotNil(t, turnOnOff) + + assert.Empty(t, turnOn.Problems) + require.Len(t, turnOnOff.Problems, 1) + assert.Equal(t, "operation should define traits", turnOnOff.Problems[0].Message) +} + +func TestCreatePrintingPress_AsyncAPIDiagnosticsFallbackToSourceLine(t *testing.T) { + spec := transitiveAsyncAPISpec() + line := specLineNumber(spec, " $ref: '#/components/schemas/schemaC'") + require.NotZero(t, line) + pp, err := CreatePrintingPressFromBytes(spec, &PrintingPressConfig{ + BasePath: t.TempDir(), + OutputDir: t.TempDir(), + DeveloperMode: true, + LintResults: []*drV3.RuleFunctionResult{ + { + Message: "schema should define examples", + RuleId: "asyncapi-schema-examples", + RuleSeverity: "warn", + Origin: &index.NodeOrigin{Line: line}, + Rule: &drV3.Rule{Id: "asyncapi-schema-examples", Severity: "warn"}, + }, + }, + }) + require.NoError(t, err) + + site, err := pp.PressModel() + require.NoError(t, err) + schemaB := findModelByName(site.Models["schemas"], "schemaB") + require.NotNil(t, schemaB) + require.Len(t, schemaB.Problems, 1) + assert.Equal(t, "schema should define examples", schemaB.Problems[0].Message) +} + +func TestCreatePrintingPress_AsyncAPIDiagnosticsUnescapeJSONPointerKeys(t *testing.T) { + pp, err := CreatePrintingPressFromBytes(escapedPointerAsyncAPISpec(), &PrintingPressConfig{ + BasePath: t.TempDir(), + OutputDir: t.TempDir(), + DeveloperMode: true, + LintResults: []*drV3.RuleFunctionResult{ + { + Message: "message should define examples", + Path: "#/components/messages/foo~1bar/payload", + RuleId: "asyncapi-message-examples", + RuleSeverity: "warn", + Rule: &drV3.Rule{Id: "asyncapi-message-examples", Severity: "warn"}, + }, + }, + }) + require.NoError(t, err) + + site, err := pp.PressModel() + require.NoError(t, err) + message := findModelByName(site.Models["messages"], "foo/bar") + require.NotNil(t, message) + require.Len(t, message.Problems, 1) + assert.Equal(t, "message should define examples", message.Problems[0].Message) +} + +func TestExtractRefsFromJSON_DecodesJSONPointerTokens(t *testing.T) { + lookup := map[string]*ppmodel.ModelPage{ + slugpkg.ComponentKey("schemas", "foo/bar~baz"): { + Name: "foo/bar~baz", + ComponentType: "schemas", + TypeSlug: "schemas", + Slug: "foo-bar-baz", + }, + } + + refs := extractRefsFromJSON(`{"$ref":"#/components/schemas/foo~1bar~0baz"}`, lookup) + + require.Len(t, refs, 1) + assert.Equal(t, "foo/bar~baz", refs[0].Name) +} + +func TestCreatePrintingPress_AsyncAPIFocusedGraphsIncludeTransitiveModels(t *testing.T) { + pp, err := CreatePrintingPressFromBytes(transitiveAsyncAPISpec(), &PrintingPressConfig{ + BasePath: t.TempDir(), + OutputDir: t.TempDir(), + }) + require.NoError(t, err) + + site, err := pp.PressModel() + require.NoError(t, err) + schemaA := findModelByName(site.Models["schemas"], "schemaA") + require.NotNil(t, schemaA) + require.NotNil(t, schemaA.CrossRefs) + assert.Contains(t, componentRefNames(schemaA.CrossRefs.UsesModels), "schemaB") + require.NotEmpty(t, schemaA.GraphJSON) + assert.Contains(t, schemaA.GraphJSON, "schemaB") + assert.Contains(t, schemaA.GraphJSON, "schemaC") + + schemaB := findModelByName(site.Models["schemas"], "schemaB") + require.NotNil(t, schemaB) + require.NotEmpty(t, schemaB.GraphJSON) + nodes := parseGraphNodes(t, schemaB.GraphJSON) + schemaAID := SchemaNodeID("schemas", "schemaA") + schemaBID := SchemaNodeID("schemas", "schemaB") + schemaCID := SchemaNodeID("schemas", "schemaC") + assert.Equal(t, true, nodes[schemaAID]["dependency"], "incoming model referrer should be dimmed") + _, schemaCDependency := nodes[schemaCID]["dependency"] + assert.False(t, schemaCDependency, "outgoing model referent should not be dimmed") + + graph := parseGraphResult(t, schemaB.GraphJSON) + var incomingEdges, outgoingEdges int + for _, edge := range graph.Edges { + if len(edge.Sources) != 1 || len(edge.Targets) != 1 { + continue + } + if edge.Sources[0] == schemaAID && edge.Targets[0] == schemaBID { + incomingEdges++ + assert.True(t, edge.Dependency, "incoming model edge should be dimmed") + } + if edge.Sources[0] == schemaBID && edge.Targets[0] == schemaCID { + outgoingEdges++ + assert.False(t, edge.Dependency, "outgoing model edge should not be dimmed") + } + } + assert.Equal(t, 1, incomingEdges) + assert.Equal(t, 1, outgoingEdges) +} + +func TestCreatePrintingPress_AsyncAPIOperationCrossRefsUseUniqueOperationIdentity(t *testing.T) { + pp, err := CreatePrintingPressFromBytes(sharedOperationSurfaceAsyncAPISpec(), &PrintingPressConfig{ + BasePath: t.TempDir(), + OutputDir: t.TempDir(), + }) + require.NoError(t, err) + + site, err := pp.PressModel() + require.NoError(t, err) + alpha := findOperationByID(site.Operations, "publishAlpha") + require.NotNil(t, alpha) + beta := findOperationByID(site.Operations, "publishBeta") + require.NotNil(t, beta) + + alphaRefs := componentRefNames(alpha.CrossRefs.ReferencesModels) + assert.Contains(t, alphaRefs, "alphaMessage") + assert.NotContains(t, alphaRefs, "betaMessage") + betaRefs := componentRefNames(beta.CrossRefs.ReferencesModels) + assert.Contains(t, betaRefs, "betaMessage") + assert.NotContains(t, betaRefs, "alphaMessage") + + alphaMessage := findModelByName(site.Models["messages"], "alphaMessage") + require.NotNil(t, alphaMessage) + assert.Contains(t, operationRefSlugs(alphaMessage.CrossRefs.UsedByOperations), alpha.Slug) + assert.NotContains(t, operationRefSlugs(alphaMessage.CrossRefs.UsedByOperations), beta.Slug) + betaMessage := findModelByName(site.Models["messages"], "betaMessage") + require.NotNil(t, betaMessage) + assert.Contains(t, operationRefSlugs(betaMessage.CrossRefs.UsedByOperations), beta.Slug) + assert.NotContains(t, operationRefSlugs(betaMessage.CrossRefs.UsedByOperations), alpha.Slug) +} + +func TestCreatePrintingPress_AsyncAPIExplicitEmptySecurityDoesNotInherit(t *testing.T) { + pp, err := CreatePrintingPressFromBytes(explicitEmptySecurityAsyncAPISpec(), &PrintingPressConfig{ + BasePath: t.TempDir(), + OutputDir: t.TempDir(), + }) + require.NoError(t, err) + + site, err := pp.PressModel() + require.NoError(t, err) + require.NotEmpty(t, site.Root.Security) + assert.Equal(t, "saslScram", site.Root.Security[0].Name) + + publicOp := findOperationByID(site.Operations, "publicPing") + require.NotNil(t, publicOp) + assert.True(t, publicOp.HasSecurityOverride) + assert.Empty(t, publicOp.Security) + assert.NotContains(t, componentRefNames(publicOp.CrossRefs.ReferencesModels), "saslScram") + securityMD := renderOperationSecurityMD(llmRenderContext{site: site}, publicOp) + assert.Contains(t, securityMD, "No authentication required.") + + privateOp := findOperationByID(site.Operations, "privatePing") + require.NotNil(t, privateOp) + assert.False(t, privateOp.HasSecurityOverride) + assert.Contains(t, componentRefNames(privateOp.CrossRefs.ReferencesModels), "saslScram") +} + +func TestCreatePrintingPress_PrepareEngineConfigRejectsAsyncAPI2BeforeOpenAPIParse(t *testing.T) { + pp, err := CreatePrintingPressFromBytes([]byte(`asyncapi: 2.6.0 +info: + title: Legacy Events + version: 1.0.0 +`), &PrintingPressConfig{ + BasePath: t.TempDir(), + OutputDir: t.TempDir(), + }) + require.NoError(t, err) + + job := pp.activity.startJob(jobTypeModel, "", pp.resolveConfiguredOutputDir(), pp.sourceKind()) + _, err = pp.prepareEngineConfig(job) + require.Error(t, err) + assert.ErrorIs(t, err, ErrUnsupportedAsyncAPI2) +} + +func TestCreatePrintingPressFromAsyncAPIDocument(t *testing.T) { + doc, err := libasyncapi.NewDocument(minimalAsyncAPISpec()) + require.NoError(t, err) + + pp, err := CreatePrintingPressFromAsyncAPIDocument(doc, &PrintingPressConfig{ + OutputDir: t.TempDir(), + }) + require.NoError(t, err) + + assert.Equal(t, sourceKindAsyncAPIDocument, pp.sourceKind()) + job := pp.activity.startJob(jobTypeModel, "", pp.resolveConfiguredOutputDir(), pp.sourceKind()) + cfg, err := pp.prepareEngineConfig(job) + require.NoError(t, err) + assert.Equal(t, SpecKindAsyncAPI, cfg.SpecKind) + assert.Equal(t, "3.0.0", cfg.SpecVersion) + assert.Same(t, doc, cfg.AsyncDoc) +} + +func minimalAsyncAPISpec() []byte { + return []byte(`asyncapi: 3.0.0 +info: + title: Streetlights + version: 1.0.0 +channels: {} +operations: {} +`) +} + +func taglessOperationAsyncAPISpec() []byte { + return []byte(`asyncapi: 3.0.0 +info: + title: Tagless Operations + version: 1.0.0 +channels: + turnOn: + address: lighting.turn.on + messages: + turnOn: + $ref: '#/components/messages/turnOn' +operations: + turnOn: + action: send + channel: + $ref: '#/channels/turnOn' + messages: + - $ref: '#/components/messages/turnOn' +components: + messages: + turnOn: + payload: + type: object + properties: + command: + type: string +`) +} + +func overlappingAsyncAPISpec() []byte { + return []byte(`asyncapi: 3.0.0 +info: + title: Overlapping Operations + version: 1.0.0 +channels: + turnChannel: + address: lighting.turn + messages: + - $ref: '#/components/messages/turnMessage' +operations: + turnOn: + action: send + channel: + $ref: '#/channels/turnChannel' + messages: + - $ref: '#/components/messages/turnMessage' + turnOnOff: + action: send + channel: + $ref: '#/channels/turnChannel' + messages: + - $ref: '#/components/messages/turnMessage' +components: + messages: + turnMessage: + payload: + type: object + properties: + state: + type: string +`) +} + +func transitiveAsyncAPISpec() []byte { + return []byte(`asyncapi: 3.0.0 +info: + title: Transitive Events + version: 1.0.0 +channels: + schemaChannel: + address: schema.events + messages: + - $ref: '#/components/messages/schemaMessage' +operations: + publishSchema: + action: send + channel: + $ref: '#/channels/schemaChannel' + messages: + - $ref: '#/components/messages/schemaMessage' +components: + messages: + schemaMessage: + payload: + $ref: '#/components/schemas/schemaA' + schemas: + schemaA: + type: object + properties: + b: + $ref: '#/components/schemas/schemaB' + schemaB: + type: object + properties: + c: + $ref: '#/components/schemas/schemaC' + schemaC: + type: object + properties: + id: + type: string +`) +} + +func escapedPointerAsyncAPISpec() []byte { + return []byte(`asyncapi: 3.0.0 +info: + title: Escaped Pointer Events + version: 1.0.0 +channels: + escaped: + address: escaped.events + messages: + - $ref: '#/components/messages/foo~1bar' +operations: + publishEscaped: + action: send + channel: + $ref: '#/channels/escaped' + messages: + - $ref: '#/components/messages/foo~1bar' +components: + messages: + foo/bar: + payload: + type: object + properties: + id: + type: string +`) +} + +func sharedOperationSurfaceAsyncAPISpec() []byte { + return []byte(`asyncapi: 3.0.0 +info: + title: Shared Surface Events + version: 1.0.0 +channels: + shared: + address: shared.events + messages: + - $ref: '#/components/messages/alphaMessage' + - $ref: '#/components/messages/betaMessage' +operations: + publishAlpha: + action: send + channel: + $ref: '#/channels/shared' + messages: + - $ref: '#/components/messages/alphaMessage' + publishBeta: + action: send + channel: + $ref: '#/channels/shared' + messages: + - $ref: '#/components/messages/betaMessage' +components: + messages: + alphaMessage: + payload: + type: object + properties: + alpha: + type: string + betaMessage: + payload: + type: object + properties: + beta: + type: string +`) +} + +func explicitEmptySecurityAsyncAPISpec() []byte { + return []byte(`asyncapi: 3.0.0 +info: + title: Security Override Events + version: 1.0.0 +servers: + secure: + host: broker.example.com + protocol: kafka-secure + security: + - $ref: '#/components/securitySchemes/saslScram' +channels: + pings: + address: ping.events + messages: + - $ref: '#/components/messages/pingMessage' +operations: + publicPing: + action: send + channel: + $ref: '#/channels/pings' + security: [] + messages: + - $ref: '#/components/messages/pingMessage' + privatePing: + action: send + channel: + $ref: '#/channels/pings' + messages: + - $ref: '#/components/messages/pingMessage' +components: + messages: + pingMessage: + payload: + type: object + properties: + id: + type: string + securitySchemes: + saslScram: + type: scramSha256 + description: SASL/SCRAM authentication +`) +} + +func asyncAPIServerProtocolSpec() []byte { + return []byte(`asyncapi: 3.0.0 +info: + title: Provider Protocols + version: 1.0.0 + tags: + - name: nats + - name: googlepubsub +servers: + nats-main: + host: nats.example.com + protocol: nats +channels: + natsEvents: + address: events.nats + messages: + event: + $ref: '#/components/messages/event' + pubsubEvents: + address: projects/example/topics/events + servers: + - $ref: '#/components/servers/pubsub-main' + messages: + event: + $ref: '#/components/messages/event' +operations: + receiveNatsEvent: + action: receive + channel: + $ref: '#/channels/natsEvents' + tags: + - name: nats + bindings: + pulsar: {} + messages: + - $ref: '#/components/messages/event' + sendPubSubEvent: + action: send + channel: + $ref: '#/channels/pubsubEvents' + tags: + - name: googlepubsub + messages: + - $ref: '#/components/messages/event' +components: + servers: + pubsub-main: + host: pubsub.googleapis.com + protocol: googlepubsub + messages: + event: + contentType: application/json + bindings: + sns: {} + payload: + type: object + properties: + id: + type: string +`) +} + +func streetlightsAsyncAPISpec() []byte { + return []byte(`asyncapi: 3.0.0 +info: + title: Streetlights Kafka API + version: 1.0.0 + description: The Smartylighting Streetlights API allows you to remotely manage the city lights. + contact: + name: API Support + url: https://www.asyncapi.org/support + email: support@asyncapi.org + license: + name: Apache 2.0 + url: https://www.apache.org/licenses/LICENSE-2.0.html + tags: + - name: streetlights + description: Streetlight related operations + - name: kafka + description: Kafka specific + +defaultContentType: application/json + +servers: + scram-connections: + host: test.mykafkacluster.org:18092 + protocol: kafka-secure + description: Test broker secured with SASL/SCRAM + security: + - $ref: '#/components/securitySchemes/saslScram' + tags: + - name: env:test-scram + description: This environment is a SCRAM test broker + bindings: + kafka: + schemaRegistryUrl: https://my-schema-registry.com + schemaRegistryVendor: confluent + bindingVersion: 0.4.0 + +channels: + lightingMeasured: + address: smartylighting.streetlights.1.0.event.{streetlightId}.lighting.measured + messages: + lightMeasured: + $ref: '#/components/messages/lightMeasured' + lightMeasuredAvro: + $ref: '#/components/messages/lightMeasuredAvro' + description: The topic on which measured values may be produced and consumed. + parameters: + streetlightId: + $ref: '#/components/parameters/streetlightId' + bindings: + kafka: + topic: streetlights-lighting + partitions: 3 + replicas: 2 + bindingVersion: 0.4.0 + x-channel-tier: telemetry + + lightTurnOn: + address: smartylighting.streetlights.1.0.action.{streetlightId}.turn.on + messages: + turnOn: + $ref: '#/components/messages/turnOnOff' + parameters: + streetlightId: + $ref: '#/components/parameters/streetlightId' + + lightTurnOff: + address: smartylighting.streetlights.1.0.action.{streetlightId}.turn.off + messages: + turnOff: + $ref: '#/components/messages/turnOnOff' + parameters: + streetlightId: + $ref: '#/components/parameters/streetlightId' + +operations: + receiveLightMeasurement: + action: receive + channel: + $ref: '#/channels/lightingMeasured' + summary: Receive information about environmental lighting conditions of a streetlight. + traits: + - $ref: '#/components/operationTraits/kafka' + messages: + - $ref: '#/channels/lightingMeasured/messages/lightMeasured' + - $ref: '#/channels/lightingMeasured/messages/lightMeasuredAvro' + externalDocs: + description: Streetlight telemetry guide + url: https://example.com/docs/streetlights/telemetry + x-operation-tier: telemetry + x-owner: city-lighting-platform + + turnOn: + action: send + channel: + $ref: '#/channels/lightTurnOn' + traits: + - $ref: '#/components/operationTraits/kafka' + security: + - $ref: '#/components/securitySchemes/saslScram' + messages: + - $ref: '#/channels/lightTurnOn/messages/turnOn' + reply: + $ref: '#/components/replies/turnOnAccepted' + + turnOff: + action: send + channel: + $ref: '#/components/channels/lightTurnOffComponent' + traits: + - $ref: '#/components/operationTraits/kafka' + messages: + - $ref: '#/components/channels/lightTurnOffComponent/messages/turnOff' + +components: + channels: + lightTurnOffComponent: + address: smartylighting.streetlights.1.0.action.{streetlightId}.turn.off + messages: + turnOff: + $ref: '#/components/messages/turnOnOff' + parameters: + streetlightId: + $ref: '#/components/parameters/streetlightId' + + messages: + lightMeasured: + name: lightMeasured + title: Light measured + summary: Inform about environmental lighting conditions for a particular streetlight. + contentType: application/json + traits: + - $ref: '#/components/messageTraits/commonHeaders' + payload: + $ref: '#/components/schemas/lightMeasuredPayload' + examples: + - name: Nominal twilight reading + summary: A normal light measurement received during twilight. + headers: + my-app-header: 42 + correlationId: light-evt-0001 + payload: + lumens: 1200 + sentAt: '2026-07-09T12:00:00Z' + sensorId: sensor-a7 + - name: Low light alert + summary: A measurement that falls below the city threshold. + headers: + my-app-header: 7 + correlationId: light-evt-0002 + payload: + lumens: 12 + sentAt: '2026-07-09T12:05:00Z' + sensorId: sensor-a7 + x-message-family: telemetry + + lightMeasuredAvro: + name: lightMeasuredAvro + title: Light measured CloudEvent + summary: Inform about environmental lighting conditions using the CloudEvents envelope. + contentType: application/cloudevents+json + traits: + - $ref: '#/components/messageTraits/commonHeaders' + payload: + $ref: '#/components/schemas/lightMeasuredCloudEventPayload' + examples: + - name: CloudEvents measurement + summary: A measured light event wrapped in CloudEvents fields. + headers: + my-app-header: 88 + payload: + specversion: '1.0' + type: io.pb33f.streetlights.light.measured + source: smartylighting.streetlights + id: evt-9000 + time: '2026-07-09T12:00:00Z' + data: + lumens: 1200 + sentAt: '2026-07-09T12:00:00Z' + sensorId: sensor-a7 + x-message-family: telemetry + + turnOnOff: + name: turnOnOff + title: Turn on/off + summary: Command a particular streetlight to turn on or off. + contentType: application/json + traits: + - $ref: '#/components/messageTraits/commonHeaders' + payload: + $ref: '#/components/schemas/turnOnOffPayload' + examples: + - name: Turn on + summary: Ask a streetlight to turn on. + headers: + my-app-header: 11 + replyTo: smartylighting.streetlights.1.0.reply.commands + correlationId: cmd-0001 + payload: + command: on + sentAt: '2026-07-09T12:10:00Z' + - name: Turn off + summary: Ask a streetlight to turn off. + headers: + my-app-header: 12 + replyTo: smartylighting.streetlights.1.0.reply.commands + correlationId: cmd-0002 + payload: + command: off + sentAt: '2026-07-09T12:20:00Z' + + schemas: + lightMeasuredPayload: + type: object + required: + - lumens + - sentAt + - sensorId + properties: + lumens: + type: integer + minimum: 0 + description: Light intensity measured in lumens. + sentAt: + $ref: '#/components/schemas/sentAt' + sensorId: + type: string + description: Identifier of the reporting streetlight sensor. + examples: + - lumens: 1200 + sentAt: '2026-07-09T12:00:00Z' + sensorId: sensor-a7 + + lightMeasuredCloudEventPayload: + type: object + required: + - specversion + - type + - source + - id + - data + properties: + specversion: + type: string + const: '1.0' + type: + type: string + examples: + - io.pb33f.streetlights.light.measured + source: + type: string + id: + type: string + time: + $ref: '#/components/schemas/sentAt' + data: + $ref: '#/components/schemas/lightMeasuredPayload' + + turnOnOffPayload: + type: object + required: + - command + - sentAt + properties: + command: + type: string + enum: + - on + - off + description: Whether to turn on or off the light. + sentAt: + $ref: '#/components/schemas/sentAt' + + sentAt: + type: string + format: date-time + description: Date and time when the message was sent. + + securitySchemes: + saslScram: + type: scramSha256 + description: Provide your username and password for SASL/SCRAM authentication + + parameters: + streetlightId: + description: The ID of the streetlight. + examples: + - '1' + - '2' + - '100' + + replies: + turnOnAccepted: + address: + $ref: '#/components/replyAddresses/replyToHeader' + channel: + $ref: '#/channels/lightingMeasured' + messages: + - $ref: '#/channels/lightingMeasured/messages/lightMeasured' + + replyAddresses: + replyToHeader: + location: $message.header#/replyTo + description: Reply-to header supplied by the command producer. + + correlationIds: + streetlightCommand: + location: $message.header#/correlationId + description: Correlates command replies with the original command message. + + operationTraits: + kafka: + tags: + - name: kafka + security: + - $ref: '#/components/securitySchemes/saslScram' + bindings: + kafka: + groupId: + type: string + description: Consumer group ID + clientId: + type: string + description: Client ID + bindingVersion: 0.4.0 + + messageTraits: + commonHeaders: + headers: + type: object + properties: + my-app-header: + type: integer + minimum: 0 + maximum: 100 +`) +} + +func findOperationByID(operations []*ppmodel.OperationPage, operationID string) *ppmodel.OperationPage { + for _, operation := range operations { + if operation != nil && operation.OperationID == operationID { + return operation + } + } + return nil +} + +func findNavOperationByID(tags []*ppmodel.NavTag, operationID string) *ppmodel.NavOperation { + for _, tag := range tags { + if tag == nil { + continue + } + for _, operation := range tag.Operations { + if operation != nil && operation.OperationID == operationID { + return operation + } + } + if operation := findNavOperationByID(tag.Children, operationID); operation != nil { + return operation + } + } + return nil +} + +func readNavTagsFromOutput(t *testing.T, outputDir string) []*ppmodel.NavTag { + t.Helper() + + navBytes, err := os.ReadFile(filepath.Join(outputDir, "data", "nav.js")) + require.NoError(t, err) + navPayload := strings.TrimPrefix(string(navBytes), "globalThis.__PP_SHARED_DATA__ = ") + navPayload = strings.TrimSuffix(strings.TrimSpace(navPayload), ";") + var shared struct { + Attributes map[string]map[string]string `json:"attributes"` + } + require.NoError(t, json.Unmarshal([]byte(navPayload), &shared)) + navJSON := shared.Attributes["pp-nav"]["data-nav"] + require.NotEmpty(t, navJSON) + require.NotEqual(t, "null", navJSON) + + var navTags []*ppmodel.NavTag + require.NoError(t, json.Unmarshal([]byte(navJSON), &navTags)) + return navTags +} + +func findModelByName(models []*ppmodel.ModelPage, name string) *ppmodel.ModelPage { + for _, model := range models { + if model != nil && model.Name == name { + return model + } + } + return nil +} + +func componentRefNames(refs []*ppmodel.ComponentRef) []string { + names := make([]string, 0, len(refs)) + for _, ref := range refs { + if ref == nil { + continue + } + names = append(names, ref.Name) + } + return names +} + +func operationRefSlugs(refs []*ppmodel.OperationRef) []string { + slugs := make([]string, 0, len(refs)) + for _, ref := range refs { + if ref == nil { + continue + } + slugs = append(slugs, ref.Slug) + } + return slugs +} + +func specLineNumber(spec []byte, needle string) int { + for idx, line := range strings.Split(string(spec), "\n") { + if line == needle { + return idx + 1 + } + } + return 0 +} + func TestCreatePrintingPress_BundlingFallbackWarningExposed(t *testing.T) { specPath := filepath.Join("..", "test_specs", "test-relative", "spec.yaml") specBytes, err := os.ReadFile(specPath) diff --git a/printingpress/artifact_manifest_test.go b/printingpress/artifact_manifest_test.go index 5f933e1..a3b6ed7 100644 --- a/printingpress/artifact_manifest_test.go +++ b/printingpress/artifact_manifest_test.go @@ -30,6 +30,7 @@ func TestPrintingPress_WritesHostedArtifactManifestWhenEnabled(t *testing.T) { Embedded: true, ExpiresAt: &expiresAt, SharedAssetBaseURL: "/ppress/static/v1", + IncludeSpec: true, Artifact: &ArtifactManifestConfig{ Enabled: true, DocumentID: "doc-123", @@ -86,6 +87,11 @@ func TestPrintingPress_WritesHostedArtifactManifestWhenEnabled(t *testing.T) { assert.NotEmpty(t, indexMeta.ETag) assert.True(t, indexMeta.Gzip) assert.FileExists(t, filepath.Join(outputDir, "index.html.gz")) + specMeta, ok := manifest.Files["spec/openapi.yaml"] + require.True(t, ok) + assert.Equal(t, ArtifactAccessProtected, specMeta.Access) + assert.True(t, specMeta.Gzip) + assert.FileExists(t, filepath.Join(outputDir, "spec", "openapi.yaml.gz")) // shared assets live at the host's shared URL — they must not appear in // the per-artifact manifest or on disk under the artifact root. diff --git a/printingpress/collector.go b/printingpress/collector.go index e739422..0937481 100644 --- a/printingpress/collector.go +++ b/printingpress/collector.go @@ -51,6 +51,14 @@ var refSegmentToTypeSlug = map[string]string{ "links": "links", "callbacks": "callbacks", "pathItems": typeSlugPathItems, + "messages": "messages", + "channels": "channels", + "servers": "servers", + "replies": "replies", + "replyAddresses": "reply-addresses", + "correlationIds": "correlation-ids", + "operationTraits": "operation-traits", + "messageTraits": "message-traits", } // resolveComponentLink parses a $ref string and looks up the model page. @@ -178,7 +186,10 @@ func (pp *PrintingPress) buildModelIndex() { // visitDocument collects all top-level document data: info, tags, servers, components, webhooks. func (pp *PrintingPress) visitDocument(ctx context.Context, doc *v3.Document) { - root := &RootPage{} + root := &RootPage{ + SpecKind: pp.engineConfig.SpecKind, + SpecVersion: pp.engineConfig.SpecVersion, + } root.Source = pp.site.Source if doc.Document != nil { @@ -366,6 +377,8 @@ func (pp *PrintingPress) collectOperation(method, path string, op *v3.Operation, slug := pp.slugs.Register("operations", preferred) page := &OperationPage{ + SpecKind: pp.engineConfig.SpecKind, + SpecVersion: pp.engineConfig.SpecVersion, Method: strings.ToUpper(method), Path: path, OperationID: operationID, @@ -910,6 +923,8 @@ func (pp *PrintingPress) collectSchemaComponents(schemas *orderedmap.Map[string, slug := pp.slugs.Register("schemas", preferred) page := &ModelPage{ + SpecKind: pp.engineConfig.SpecKind, + SpecVersion: pp.engineConfig.SpecVersion, Name: name, ComponentType: "schemas", TypeSlug: "schemas", @@ -1156,6 +1171,8 @@ func collectRenderable[V interface{ GetValue() any }]( slug := pp.slugs.Register(typeSlug, preferred) page := &ModelPage{ + SpecKind: pp.engineConfig.SpecKind, + SpecVersion: pp.engineConfig.SpecVersion, Name: name, ComponentType: componentType, TypeSlug: typeSlug, @@ -1257,6 +1274,7 @@ func (pp *PrintingPress) collectWebhooks(webhooks *orderedmap.Map[string, *v3.Pa // Build webhook nav entries from all collected webhooks for _, wh := range pp.site.Webhooks { pp.site.NavWebhooks = append(pp.site.NavWebhooks, &NavOperation{ + SpecKind: wh.SpecKind, Method: wh.Method, Path: wh.Path, OperationID: wh.OperationID, @@ -1448,12 +1466,14 @@ func (pp *PrintingPress) assignOperationsToTags(forceSynthetic bool) { pp.site.Root.TagTree = nil for _, op := range pp.site.Operations { pp.site.Root.UntaggedOperations = append(pp.site.Root.UntaggedOperations, &NavOperation{ + SpecKind: op.SpecKind, Method: op.Method, Path: op.Path, OperationID: op.OperationID, - Summary: op.Summary, + Summary: navOperationSummary(op), Slug: op.Slug, Deprecated: op.Deprecated, + Protocols: operationNavProtocols(op), }) } return @@ -1463,12 +1483,14 @@ func (pp *PrintingPress) assignOperationsToTags(forceSynthetic bool) { for _, op := range pp.site.Operations { navOp := &NavOperation{ + SpecKind: op.SpecKind, Method: op.Method, Path: op.Path, OperationID: op.OperationID, - Summary: op.Summary, + Summary: navOperationSummary(op), Slug: op.Slug, Deprecated: op.Deprecated, + Protocols: operationNavProtocols(op), } if len(op.Tags) == 0 { pp.site.Root.UntaggedOperations = append(pp.site.Root.UntaggedOperations, navOp) @@ -1482,6 +1504,23 @@ func (pp *PrintingPress) assignOperationsToTags(forceSynthetic bool) { } } +func operationNavProtocols(op *OperationPage) []string { + if op == nil || !op.SpecKind.IsAsyncAPI() || op.AsyncAPI == nil { + return nil + } + return append([]string(nil), op.AsyncAPI.Bindings...) +} + +func navOperationSummary(op *OperationPage) string { + if op == nil { + return "" + } + if op.SpecKind.IsAsyncAPI() { + return firstNonEmpty(op.Summary, op.OperationID, op.Path) + } + return op.Summary +} + // populateTagPaths sets TagPath on each OperationPage by walking the NavTag tree // to find the full hierarchy from root to the operation's matched tag. func (pp *PrintingPress) populateTagPaths() { @@ -1536,6 +1575,9 @@ func (pp *PrintingPress) buildNavModelGroups() { } order := []groupDef{ {"Schemas", "schemas"}, + {"Messages", "messages"}, + {"Channels", "channels"}, + {"Servers", "servers"}, {"Responses", "responses"}, {"Parameters", "parameters"}, {"Request Bodies", "request-bodies"}, @@ -1544,6 +1586,11 @@ func (pp *PrintingPress) buildNavModelGroups() { {"Examples", "examples"}, {"Links", "links"}, {"Callbacks", "callbacks"}, + {"Replies", "replies"}, + {"Reply Addresses", "reply-addresses"}, + {"Correlation IDs", "correlation-ids"}, + {"Operation Traits", "operation-traits"}, + {"Message Traits", "message-traits"}, // path-items omitted from nav — after bundling they duplicate operation pages } for _, def := range order { @@ -1557,11 +1604,20 @@ func (pp *PrintingPress) buildNavModelGroups() { CardMinWidth: computeNavModelGroupCardMinWidth(pages), } for _, p := range pages { + protocol := "" + var protocols []string + if p.AsyncAPI != nil && (p.AsyncAPI.Kind == "operationTrait" || p.AsyncAPI.Kind == "messageTrait") { + protocol = p.AsyncAPI.Protocol + protocols = p.AsyncAPI.Bindings + } group.Models = append(group.Models, &NavModel{ + SpecKind: p.SpecKind, Name: p.Name, Slug: p.Slug, TypeSlug: p.TypeSlug, Description: p.Description, + Protocol: protocol, + Protocols: protocols, }) } pp.site.NavModelGroups = append(pp.site.NavModelGroups, group) @@ -1839,13 +1895,15 @@ func (pp *PrintingPress) buildSourceRef(location, target string, line int) *Sour path = target } href := strings.TrimSpace(target) - if url := pp.sourceURLForLocation(location, line); url != "" { - href = url + linkedHref := pp.sourceURLForLocation(location, target, line) + if linkedHref != "" { + href = linkedHref } return &SourceRef{ - Path: path, - Line: line, - Href: href, + Path: path, + Line: line, + Href: href, + LinkEnabled: pp.engineConfig != nil && pp.engineConfig.IncludeSpec && linkedHref != "", } } @@ -1878,7 +1936,7 @@ func (pp *PrintingPress) buildModelSourceRef(origin *bundler.ComponentOrigin) *S return pp.buildSourceRef(location, target, line) } -func (pp *PrintingPress) sourceURLForLocation(location string, line int) string { +func (pp *PrintingPress) sourceURLForLocation(location, target string, line int) string { if pp == nil || pp.engineConfig == nil { return "" } @@ -1886,8 +1944,16 @@ func (pp *PrintingPress) sourceURLForLocation(location string, line int) string if base == "" { return "" } + if pp.engineConfig.IncludeSpec && pp.engineConfig.SpecLocation != "" && location != "" && location != pp.engineConfig.SpecLocation { + base = pp.includeReferencedSpec(target) + if base == "" { + return "" + } + } if pp.engineConfig.SpecLocation != "" && location != "" && location != pp.engineConfig.SpecLocation { - return "" + if !pp.engineConfig.IncludeSpec { + return "" + } } if line > 0 && !strings.Contains(base, "#") { return fmt.Sprintf("%s#L%d", base, line) diff --git a/printingpress/collector_asyncapi.go b/printingpress/collector_asyncapi.go new file mode 100644 index 0000000..ed6e5aa --- /dev/null +++ b/printingpress/collector_asyncapi.go @@ -0,0 +1,1538 @@ +// Copyright 2024-2026 Princess Beef Heavy Industries, LLC / Dave Shanley +// https://pb33f.io +// SPDX-License-Identifier: Apache-2.0 + +package printingpress + +import ( + "context" + "fmt" + "strings" + + "github.com/pb33f/doctor/diagramatron" + "github.com/pb33f/doctor/printingpress/internal/pppaths" + . "github.com/pb33f/doctor/printingpress/model" + "github.com/pb33f/doctor/printingpress/render" + slugpkg "github.com/pb33f/doctor/printingpress/slug" + highasync "github.com/pb33f/libasyncapi/datamodel/high/asyncapi" + "github.com/pb33f/libopenapi/bundler" + highbase "github.com/pb33f/libopenapi/datamodel/high/base" + "github.com/pb33f/libopenapi/datamodel/low" + lowbase "github.com/pb33f/libopenapi/datamodel/low/base" + "github.com/pb33f/libopenapi/index" + "go.yaml.in/yaml/v4" +) + +type asyncAPIIndex struct { + channels map[string]*asyncAPIChannelEntry + messages map[string]*asyncAPIMessageEntry + replies map[string]*asyncAPIReplyEntry + replyAddresses map[string]*asyncAPIReplyAddressEntry + servers map[string]*highasync.Server + rootProtocols []string +} + +type asyncAPIChannelEntry struct { + key string + channel *highasync.Channel + page *ModelPage + ref *AsyncAPIChannelRef +} + +type asyncAPIMessageEntry struct { + key string + message *highasync.Message + page *ModelPage + ref *AsyncAPIMessageRef +} + +type asyncAPIReplyEntry struct { + key string + reply *highasync.OperationReply + page *ModelPage +} + +type asyncAPIReplyAddressEntry struct { + key string + address *highasync.OperationReplyAddress + page *ModelPage +} + +func (pp *PrintingPress) visitAsyncAPIDocument(_ context.Context, doc *highasync.AsyncAPI) { + root := &RootPage{ + SpecKind: SpecKindAsyncAPI, + SpecVersion: pp.engineConfig.SpecVersion, + Source: pp.site.Source, + } + pp.site.Root = root + if doc == nil { + return + } + if root.SpecVersion == "" { + root.SpecVersion = doc.AsyncAPI + } + if doc.Info != nil { + root.Title = doc.Info.Title + if pp.engineConfig.Title != "" { + root.Title = pp.engineConfig.Title + } + root.Description = doc.Info.Description + root.DescHTML = pp.renderMarkdown(doc.Info.Description) + root.Version = doc.Info.Version + if doc.Info.Contact != nil { + root.Contact = &ContactInfo{ + Name: doc.Info.Contact.Name, + URL: doc.Info.Contact.URL, + Email: doc.Info.Contact.Email, + } + } + if doc.Info.License != nil { + root.License = &LicenseInfo{ + Name: doc.Info.License.Name, + URL: doc.Info.License.URL, + } + } + if doc.Info.ExternalDocs != nil { + root.ExternalDoc = asyncExternalDoc(doc.Info.ExternalDocs) + } + root.TagTree = pp.buildAsyncAPITagTree(doc.Info.Tags) + pp.site.NavTags = root.TagTree + } + + if doc.Servers != nil { + for pair := doc.Servers.First(); pair != nil; pair = pair.Next() { + if server := pair.Value(); server != nil { + root.Servers = append(root.Servers, asyncServerInfo(server)) + } + } + } + + idx := &asyncAPIIndex{ + channels: make(map[string]*asyncAPIChannelEntry), + messages: make(map[string]*asyncAPIMessageEntry), + replies: make(map[string]*asyncAPIReplyEntry), + replyAddresses: make(map[string]*asyncAPIReplyAddressEntry), + servers: make(map[string]*highasync.Server), + } + indexAsyncAPIServers(doc, idx) + + pp.collectAsyncAPIComponents(doc, idx) + pp.buildModelIndex() + pp.collectAsyncAPIRootSecurity(doc, root) + pp.collectAsyncAPIChannels(doc, idx) + pp.refreshAsyncAPIReplyModelInfo(idx) + pp.buildModelIndex() + pp.collectAsyncAPIOperations(doc, idx) + pp.assignOperationsToTags(false) + pp.groupAsyncAPIUntaggedOperations() + assignAsyncAPINavTagProtocols(pp.site.NavTags) + pp.pruneEmptyTagGroups() + pp.populateTagPaths() + pp.buildNavModelGroups() +} + +func (pp *PrintingPress) buildAsyncAPITagTree(tags []*highasync.Tag) []*NavTag { + if len(tags) == 0 { + return nil + } + result := make([]*NavTag, 0, len(tags)) + for _, tag := range tags { + if tag == nil || tag.Name == "" { + continue + } + result = append(result, &NavTag{ + Name: tag.Name, + Summary: tag.Name, + Slug: pp.slugs.Register("tags", slugpkg.Sanitize(tag.Name)), + Description: tag.Description, + DescHTML: pp.renderMarkdown(tag.Description), + }) + } + return result +} + +func (pp *PrintingPress) groupAsyncAPIUntaggedOperations() { + if pp == nil || pp.site == nil || pp.site.Root == nil || len(pp.site.Root.UntaggedOperations) == 0 { + return + } + + operations := append([]*NavOperation(nil), pp.site.Root.UntaggedOperations...) + tag := &NavTag{ + Name: "Operations", + Summary: "Operations", + Slug: pp.slugs.Register("tags", "operations"), + Operations: operations, + } + pp.site.NavTags = append(pp.site.NavTags, tag) + pp.site.Root.TagTree = append(pp.site.Root.TagTree, tag) + pp.site.Root.UntaggedOperations = nil +} + +func (pp *PrintingPress) collectAsyncAPIComponents(doc *highasync.AsyncAPI, idx *asyncAPIIndex) { + if doc.Components == nil { + return + } + if doc.Components.Schemas != nil { + for pair := doc.Components.Schemas.First(); pair != nil; pair = pair.Next() { + pp.collectAsyncAPISchemaModel(pair.Key(), pair.Value()) + } + } + pp.buildModelIndex() + if doc.Components.Messages != nil { + for pair := doc.Components.Messages.First(); pair != nil; pair = pair.Next() { + entry := pp.collectAsyncAPIMessageModel(pair.Key(), pair.Value(), true, idx) + if entry != nil { + idx.messages["#/components/messages/"+escapeJSONPointerToken(pair.Key())] = entry + } + } + } + if doc.Components.Channels != nil { + for pair := doc.Components.Channels.First(); pair != nil; pair = pair.Next() { + entry := pp.collectAsyncAPIChannelModel(pair.Key(), pair.Value(), idx, true) + if entry != nil { + idx.channels["#/components/channels/"+escapeJSONPointerToken(pair.Key())] = entry + } + } + } + if doc.Components.Servers != nil { + for pair := doc.Components.Servers.First(); pair != nil; pair = pair.Next() { + pp.collectAsyncAPIRenderableModel(pair.Key(), "servers", "servers", pair.Value(), asyncServerDescription(pair.Value()), &AsyncAPIModelInfo{ + Kind: "server", + Protocol: asyncServerProtocol(pair.Value()), + }) + } + } + if doc.Components.SecuritySchemes != nil { + for pair := doc.Components.SecuritySchemes.First(); pair != nil; pair = pair.Next() { + security := pair.Value() + info := &AsyncAPIModelInfo{Kind: "securityScheme"} + if security != nil { + info.Protocol = security.Type + } + pp.collectAsyncAPIRenderableModel(pair.Key(), "securitySchemes", "security", security, asyncSecurityDescription(security), info) + } + } + if doc.Components.Parameters != nil { + for pair := doc.Components.Parameters.First(); pair != nil; pair = pair.Next() { + pp.collectAsyncAPIRenderableModel(pair.Key(), "parameters", "parameters", pair.Value(), asyncParameterDescription(pair.Value()), &AsyncAPIModelInfo{Kind: "parameter"}) + } + } + if doc.Components.ReplyAddresses != nil { + for pair := doc.Components.ReplyAddresses.First(); pair != nil; pair = pair.Next() { + idx.replyAddresses["#/components/replyAddresses/"+escapeJSONPointerToken(pair.Key())] = &asyncAPIReplyAddressEntry{ + key: pair.Key(), + address: pair.Value(), + } + } + } + if doc.Components.Replies != nil { + for pair := doc.Components.Replies.First(); pair != nil; pair = pair.Next() { + page := pp.collectAsyncAPIRawModel(pair.Key(), "replies", "replies", pair.Value(), asyncReplyDescription(pair.Value(), idx), pp.asyncReplyModelInfo(pair.Value(), idx)) + if page != nil { + idx.replies["#/components/replies/"+escapeJSONPointerToken(pair.Key())] = &asyncAPIReplyEntry{ + key: pair.Key(), + reply: pair.Value(), + page: page, + } + } + } + } + if doc.Components.ReplyAddresses != nil { + for pair := doc.Components.ReplyAddresses.First(); pair != nil; pair = pair.Next() { + page := pp.collectAsyncAPIRawModel(pair.Key(), "replyAddresses", "reply-addresses", pair.Value(), asyncReplyAddressDescription(pair.Value()), &AsyncAPIModelInfo{ + Kind: "replyAddress", + Address: asyncReplyAddressLocation(pair.Value()), + }) + if entry := idx.replyAddresses["#/components/replyAddresses/"+escapeJSONPointerToken(pair.Key())]; entry != nil { + entry.page = page + } + } + } + if doc.Components.CorrelationIDs != nil { + for pair := doc.Components.CorrelationIDs.First(); pair != nil; pair = pair.Next() { + pp.collectAsyncAPIRawModel(pair.Key(), "correlationIds", "correlation-ids", pair.Value(), asyncCorrelationIDDescription(pair.Value()), &AsyncAPIModelInfo{ + Kind: "correlationId", + Address: asyncCorrelationIDLocation(pair.Value()), + }) + } + } + if doc.Components.OperationTraits != nil { + for pair := doc.Components.OperationTraits.First(); pair != nil; pair = pair.Next() { + bindings := asyncOperationBindingNamesFromBindings(pair.Value().Bindings) + pp.collectAsyncAPIRawModel(pair.Key(), "operationTraits", "operation-traits", pair.Value(), asyncOperationTraitDescription(pair.Value()), &AsyncAPIModelInfo{ + Kind: "operationTrait", + Protocol: canonicalAsyncAPIProtocol(pair.Key(), bindings), + Bindings: bindings, + }) + } + } + if doc.Components.MessageTraits != nil { + for pair := doc.Components.MessageTraits.First(); pair != nil; pair = pair.Next() { + bindings := asyncMessageBindingNamesFromBindings(pair.Value().Bindings) + pp.collectAsyncAPIRawModel(pair.Key(), "messageTraits", "message-traits", pair.Value(), asyncMessageTraitDescription(pair.Value()), &AsyncAPIModelInfo{ + Kind: "messageTrait", + Protocol: canonicalAsyncAPIProtocol(pair.Key(), bindings), + Bindings: bindings, + }) + } + } +} + +func (pp *PrintingPress) collectAsyncAPISchemaModel(name string, proxy *highbase.SchemaProxy) *ModelPage { + if proxy == nil { + return nil + } + slug := pp.slugs.Register("schemas", slugpkg.Sanitize(name)) + page := &ModelPage{ + SpecKind: SpecKindAsyncAPI, + SpecVersion: pp.engineConfig.SpecVersion, + Name: name, + ComponentType: "schemas", + TypeSlug: "schemas", + Slug: slug, + AsyncAPI: &AsyncAPIModelInfo{Kind: "schema"}, + } + if schema := proxy.Schema(); schema != nil { + page.Description = schema.Description + page.DescHTML = pp.renderMarkdown(schema.Description) + pp.captureRawData(schema, "asyncapi/components/schemas/"+name, &page.RawYAML, &page.SchemaJSON, nil) + page.SchemaHighlightedHTML = pp.captureSchemaHighlight(schema) + if isComplexSchema(schema) { + page.MockJSON = pp.generateMockWithLabel(schema, "asyncapi/components/schemas/"+name) + if !pp.engineConfig.NoMermaid { + diagram := diagramatron.MermaidifySchema(context.Background(), diagramatron.SchemaDiagramInput{ + Root: proxy, + Identity: diagramatron.SchemaIdentity{ + CanonicalPath: "#/components/schemas/" + escapeJSONPointerToken(name), + SourceLocation: pp.engineConfig.SpecLocation, + Name: name, + }, + }, diagramatron.DefaultMermaidConfig()) + if len(diagram.Relationships) > 0 { + page.MermaidDiagram = diagram.Render() + } + } + } + if schema.Example != nil || len(schema.Examples) > 0 { + page.Examples = make(map[string]string) + if schema.Example != nil { + if s := yamlNodeToJSON(schema.Example); s != "" { + page.Examples["Example"] = s + } + } + for i, ex := range schema.Examples { + if s := yamlNodeToJSON(ex); s != "" { + page.Examples[fmt.Sprintf("Example %d", i+1)] = s + } + } + } + if schema.Extensions != nil { + page.Extensions = collectExtensions(schema.Extensions) + if page.Extensions != nil { + page.ExtensionsJSON = render.MustJSON(page.Extensions) + } + } + } + if page.MockJSON != "" || len(page.Examples) > 0 { + page.HasExamplePayload = true + page.ExamplesJSON = render.MustJSON(struct { + MockJSON string `json:"mockJson,omitempty"` + Examples map[string]string `json:"examples,omitempty"` + }{page.MockJSON, page.Examples}) + } + page.Origin = pp.asyncOrigin(proxy) + page.Source = pp.buildModelSourceRef(page.Origin) + applyModelLayoutHints(page) + pp.site.Models["schemas"] = append(pp.site.Models["schemas"], page) + return page +} + +func (pp *PrintingPress) collectAsyncAPIChannels(doc *highasync.AsyncAPI, idx *asyncAPIIndex) { + if doc == nil || doc.Channels == nil { + return + } + for pair := doc.Channels.First(); pair != nil; pair = pair.Next() { + key := pair.Key() + channel := pair.Value() + if channel == nil { + continue + } + entry := pp.collectAsyncAPIChannelModel(key, channel, idx, false) + if entry != nil { + idx.channels["#/channels/"+escapeJSONPointerToken(key)] = entry + } + } +} + +func (pp *PrintingPress) refreshAsyncAPIReplyModelInfo(idx *asyncAPIIndex) { + if idx == nil { + return + } + for _, entry := range idx.replies { + if entry == nil || entry.page == nil || entry.reply == nil { + continue + } + entry.page.AsyncAPI = pp.asyncReplyModelInfo(entry.reply, idx) + if description := asyncReplyDescription(entry.reply, idx); description != "" { + entry.page.Description = description + entry.page.DescHTML = pp.renderMarkdown(description) + } + } +} + +func (pp *PrintingPress) collectAsyncAPIChannelModel(key string, channel *highasync.Channel, idx *asyncAPIIndex, component bool) *asyncAPIChannelEntry { + slug := pp.slugs.Register("channels", slugpkg.Sanitize(firstNonEmpty(key, asyncChannelAddress(channel), "channel"))) + ref := &AsyncAPIChannelRef{ + Name: key, + Address: asyncChannelAddress(channel), + Slug: slug, + Href: pppaths.ModelHTML("channels", slug), + } + page := &ModelPage{ + SpecKind: SpecKindAsyncAPI, + SpecVersion: pp.engineConfig.SpecVersion, + Name: key, + ComponentType: "channels", + TypeSlug: "channels", + Slug: slug, + Description: asyncChannelDescription(channel), + DescHTML: pp.renderMarkdown(asyncChannelDescription(channel)), + AsyncAPI: &AsyncAPIModelInfo{ + Kind: "channel", + Address: ref.Address, + Bindings: asyncChannelProtocols(channel, idx), + }, + } + contextPath := "asyncapi/channels/" + key + refBase := "#/channels/" + escapeJSONPointerToken(key) + if component { + contextPath = "asyncapi/components/channels/" + key + refBase = "#/components/channels/" + escapeJSONPointerToken(key) + } + pp.captureRawData(channel, contextPath, &page.RawYAML, &page.SchemaJSON, nil) + page.Origin = pp.asyncOrigin(channel) + page.Source = pp.buildModelSourceRef(page.Origin) + if channel != nil && channel.Extensions != nil { + page.Extensions = collectExtensions(channel.Extensions) + if page.Extensions != nil { + page.ExtensionsJSON = render.MustJSON(page.Extensions) + } + } + entry := &asyncAPIChannelEntry{key: key, channel: channel, page: page, ref: ref} + if channel != nil && channel.Messages != nil { + for pair := channel.Messages.First(); pair != nil; pair = pair.Next() { + msg := pair.Value() + msgRef := pp.asyncMessageRef(pair.Key(), msg, idx) + if msgRef != nil { + page.AsyncAPI.Messages = append(page.AsyncAPI.Messages, msgRef) + idx.messages[refBase+"/messages/"+escapeJSONPointerToken(pair.Key())] = &asyncAPIMessageEntry{ + key: pair.Key(), + message: msg, + ref: msgRef, + } + } + } + } + pp.site.Models["channels"] = append(pp.site.Models["channels"], page) + return entry +} + +func (pp *PrintingPress) collectAsyncAPIMessageModel(key string, msg *highasync.Message, component bool, idx *asyncAPIIndex) *asyncAPIMessageEntry { + if msg == nil { + return nil + } + slug := pp.slugs.Register("messages", slugpkg.Sanitize(firstNonEmpty(key, msg.Name, msg.Title, "message"))) + ref := &AsyncAPIMessageRef{ + Name: firstNonEmpty(msg.Name, key), + Title: msg.Title, + Summary: msg.Summary, + Slug: slug, + Href: pppaths.ModelHTML("messages", slug), + ContentType: msg.ContentType, + } + page := &ModelPage{ + SpecKind: SpecKindAsyncAPI, + SpecVersion: pp.engineConfig.SpecVersion, + Name: firstNonEmpty(msg.Name, key), + ComponentType: "messages", + TypeSlug: "messages", + Slug: slug, + Description: firstNonEmpty(msg.Description, msg.Summary), + DescHTML: pp.renderMarkdown(firstNonEmpty(msg.Description, msg.Summary)), + AsyncAPI: &AsyncAPIModelInfo{ + Kind: "message", + ContentType: msg.ContentType, + Bindings: asyncMessageBindingNames(msg), + }, + } + if component { + pp.captureRawData(msg, "asyncapi/components/messages/"+key, &page.RawYAML, &page.SchemaJSON, nil) + page.Origin = pp.asyncOrigin(msg) + page.Source = pp.buildModelSourceRef(page.Origin) + } + if surface := pp.asyncSchemaSurface(firstNonEmpty(msg.Name, key)+" payload", "payload", msg.Payload); surface != nil { + page.AsyncAPI.Schemas = append(page.AsyncAPI.Schemas, surface) + } + if mt := pp.asyncMessageMediaType(key, msg); mt != nil { + page.AsyncAPI.Content = []*MediaTypeInfo{mt} + } + if surface := pp.asyncSchemaSurface(firstNonEmpty(msg.Name, key)+" headers", "headers", msg.Headers); surface != nil { + page.AsyncAPI.Schemas = append(page.AsyncAPI.Schemas, surface) + } + if msg.Extensions != nil { + page.Extensions = collectExtensions(msg.Extensions) + if page.Extensions != nil { + page.ExtensionsJSON = render.MustJSON(page.Extensions) + } + } + if component { + pp.site.Models["messages"] = append(pp.site.Models["messages"], page) + } + return &asyncAPIMessageEntry{key: key, message: msg, page: page, ref: ref} +} + +func (pp *PrintingPress) collectAsyncAPIOperations(doc *highasync.AsyncAPI, idx *asyncAPIIndex) { + if doc == nil || doc.Operations == nil { + return + } + for pair := doc.Operations.First(); pair != nil; pair = pair.Next() { + op := pair.Value() + if op == nil { + continue + } + operationID := pair.Key() + channelRef := pp.asyncOperationChannelRef(op, idx) + pathLabel := asyncOperationPathLabel(operationID, op, channelRef) + description := firstNonEmpty(op.Description, op.Summary) + slug := pp.slugs.Register("operations", slugpkg.Sanitize(firstNonEmpty(operationID, op.Action+"-"+pathLabel, "operation"))) + page := &OperationPage{ + SpecKind: SpecKindAsyncAPI, + SpecVersion: pp.engineConfig.SpecVersion, + Method: strings.ToLower(strings.TrimSpace(op.Action)), + Path: pathLabel, + OperationID: operationID, + Summary: firstNonEmpty(op.Summary, op.Title), + Description: description, + DescHTML: pp.renderMarkdown(description), + Slug: slug, + AsyncAPI: &AsyncAPIOperationInfo{ + Action: op.Action, + Channel: channelRef, + Bindings: asyncOperationProtocols(op, idx), + Traits: asyncOperationTraitLabels(op), + Extensions: collectExtensions(op.Extensions), + }, + } + page.Tags = asyncOperationTagNames(op) + if groups, flat := pp.collectAsyncAPISecurityGroups(asyncOperationSecuritySchemes(op)); len(flat) > 0 || asyncOperationHasSecurityField(op) { + page.HasSecurityOverride = true + page.SecurityGroups = groups + page.Security = flat + } + for _, msgRef := range op.Messages { + if entry := pp.asyncMessageEntryFromReference(msgRef, idx); entry != nil { + if entry.ref != nil { + page.AsyncAPI.Messages = append(page.AsyncAPI.Messages, entry.ref) + } + if mt := pp.asyncMessageMediaType(entry.key, entry.message); mt != nil { + if page.RequestBody == nil { + page.RequestBody = &RequestBodyInfo{} + } + page.RequestBody.Content = append(page.RequestBody.Content, mt) + if page.RequestBody.Ref == nil && entry.ref != nil { + page.RequestBody.Ref = &ComponentLink{ + Name: entry.ref.Name, + ComponentType: "messages", + TypeSlug: "messages", + Slug: entry.ref.Slug, + } + } + if entry.ref != nil { + page.RequestBody.Refs = append(page.RequestBody.Refs, &ComponentLink{ + Name: entry.ref.Name, + ComponentType: "messages", + TypeSlug: "messages", + Slug: entry.ref.Slug, + }) + } + if page.RequestBody.Description == "" && entry.ref != nil { + page.RequestBody.Description = firstNonEmpty(entry.ref.Summary, entry.ref.Title) + page.RequestBody.DescHTML = pp.renderMarkdown(page.RequestBody.Description) + } + } + } + } + page.AsyncAPI.Reply = pp.asyncReplyInfo(op.Reply, idx) + if op.ExternalDocs != nil { + page.ExternalDoc = asyncExternalDoc(op.ExternalDocs) + } + pp.captureRawData(op, "asyncapi/operations/"+operationID, &page.RawYAML, &page.SchemaJSON, nil) + if rootNode := asyncRootNode(op); rootNode != nil { + page.SourceLine = rootNode.Line + } + page.Location = pp.engineConfig.SpecLocation + page.Source = pp.buildSourceRef(page.Location, pp.sourceTargetForLocation(page.Location, nil), page.SourceLine) + if page.AsyncAPI.Extensions != nil { + page.Extensions = page.AsyncAPI.Extensions + page.ExtensionsJSON = render.MustJSON(page.Extensions) + } + pp.site.Operations = append(pp.site.Operations, page) + } +} + +func (pp *PrintingPress) collectAsyncAPIRenderableModel(name, componentType, typeSlug string, renderable interface{ Render() ([]byte, error) }, description string, info *AsyncAPIModelInfo) *ModelPage { + if renderable == nil { + return nil + } + slug := pp.slugs.Register(typeSlug, slugpkg.Sanitize(name)) + page := &ModelPage{ + SpecKind: SpecKindAsyncAPI, + SpecVersion: pp.engineConfig.SpecVersion, + Name: name, + ComponentType: componentType, + TypeSlug: typeSlug, + Slug: slug, + Description: description, + DescHTML: pp.renderMarkdown(description), + AsyncAPI: info, + } + pp.captureRawData(renderable, "asyncapi/components/"+componentType+"/"+name, &page.RawYAML, &page.SchemaJSON, nil) + page.Origin = pp.asyncOrigin(renderable) + page.Source = pp.buildModelSourceRef(page.Origin) + pp.site.Models[typeSlug] = append(pp.site.Models[typeSlug], page) + return page +} + +func (pp *PrintingPress) collectAsyncAPIRawModel(name, componentType, typeSlug string, value any, description string, info *AsyncAPIModelInfo) *ModelPage { + if value == nil { + return nil + } + slug := pp.slugs.Register(typeSlug, slugpkg.Sanitize(name)) + page := &ModelPage{ + SpecKind: SpecKindAsyncAPI, + SpecVersion: pp.engineConfig.SpecVersion, + Name: name, + ComponentType: componentType, + TypeSlug: typeSlug, + Slug: slug, + Description: description, + DescHTML: pp.renderMarkdown(description), + AsyncAPI: info, + } + if yamlBytes, err := yaml.Marshal(value); err == nil { + page.RawYAML = normalizeArtifactYAML(yamlBytes) + if jsonStr, jsonErr := yamlToJSON(yamlBytes); jsonErr == nil { + page.SchemaJSON = jsonStr + } + } else { + pp.warn("failed to render AsyncAPI model to YAML", componentType+"/"+name, err) + } + page.Origin = pp.asyncOrigin(value) + page.Source = pp.buildModelSourceRef(page.Origin) + pp.site.Models[typeSlug] = append(pp.site.Models[typeSlug], page) + return page +} + +func (pp *PrintingPress) asyncSchemaSurface(name, role string, proxy *highbase.SchemaProxy) *AsyncAPISchemaSurface { + if proxy == nil { + return nil + } + surface := &AsyncAPISchemaSurface{Name: name, Role: role} + if proxy.IsReference() { + surface.Ref = pp.resolveComponentLink(proxy.GetReference()) + if surface.Ref != nil { + return surface + } + } + schema := proxy.Schema() + if schema == nil { + return surface + } + surface.SchemaJSON = pp.captureSchemaJSON(schema) + if isComplexSchema(schema) { + surface.MockJSON = pp.generateMockWithLabel(schema, "asyncapi/"+role+"/"+name) + } + return surface +} + +func (pp *PrintingPress) asyncMessageMediaType(key string, msg *highasync.Message) *MediaTypeInfo { + if msg == nil || msg.Payload == nil { + return nil + } + cacheKey := asyncMessageMediaTypeCacheKey(msg) + if cacheKey != "" { + if cached := pp.asyncMediaArtifacts[cacheKey]; cached != nil { + return cached + } + } + contentType := strings.TrimSpace(msg.ContentType) + if contentType == "" { + contentType = "application/json" + } + mt := &MediaTypeInfo{ + MediaType: contentType, + } + payloadProxy, schemaFormat, rawSchema, compatible := asyncMessagePayloadSchema(msg) + mt.SchemaFormat = schemaFormat + if !compatible { + mt.RawSchemaJSON = yamlNodeToJSON(rawSchema) + if mt.RawSchemaJSON == "" { + if rawYAML, err := yaml.Marshal(rawSchema); err == nil { + mt.RawSchemaYAML = normalizeArtifactYAML(rawYAML) + } + } + mt.Examples = asyncMessagePayloadExamples(msg) + return pp.storeAsyncMessageMediaType(cacheKey, mt) + } + if msg.Payload.IsReference() { + mt.SchemaRef = pp.resolveComponentLink(msg.Payload.GetReference()) + } + if payloadProxy == nil { + mt.Examples = asyncMessagePayloadExamples(msg) + return pp.storeAsyncMessageMediaType(cacheKey, mt) + } + schema := payloadProxy.Schema() + if schema != nil { + if len(schema.Type) > 0 && schema.Type[0] == "array" && schema.Items != nil && schema.Items.IsA() { + mt.IsArray = true + if schema.Items.A.IsReference() { + mt.ItemsRef = pp.resolveComponentLink(schema.Items.A.GetReference()) + } + if itemsSchema := schema.Items.A.Schema(); itemsSchema != nil { + mt.ItemsSchemaJSON = pp.captureSchemaJSON(itemsSchema) + } + } + mt.SchemaJSON = pp.captureSchemaJSON(schema) + if isComplexSchema(schema) { + mt.MockJSON = pp.generateMockWithLabel(schema, "asyncapi/messages/"+firstNonEmpty(msg.Name, key, "message")+"/payload") + if !payloadProxy.IsReference() && !pp.engineConfig.NoMermaid { + owner := firstNonEmpty(msg.Name, key, "message") + diagram := diagramatron.MermaidifySchema(context.Background(), diagramatron.SchemaDiagramInput{ + Root: payloadProxy, + Identity: diagramatron.SchemaIdentity{ + CanonicalPath: "#/messages/" + escapeJSONPointerToken(owner) + "/payload", + SourceLocation: pp.engineConfig.SpecLocation, + Name: owner + "Payload", + }, + }, diagramatron.DefaultMermaidConfig()) + if len(diagram.Relationships) > 0 { + mt.MermaidDiagram = diagram.Render() + } + } + } + } + mt.Examples = asyncMessagePayloadExamples(msg) + return pp.storeAsyncMessageMediaType(cacheKey, mt) +} + +func (pp *PrintingPress) storeAsyncMessageMediaType(key string, mediaType *MediaTypeInfo) *MediaTypeInfo { + if key != "" && mediaType != nil { + if pp.asyncMediaArtifacts == nil { + pp.asyncMediaArtifacts = make(map[string]*MediaTypeInfo) + } + pp.asyncMediaArtifacts[key] = mediaType + } + return mediaType +} + +func asyncMessageMediaTypeCacheKey(msg *highasync.Message) string { + if msg == nil || msg.GoLow() == nil { + return "" + } + lowMessage := msg.GoLow() + location := "" + if idx := lowMessage.GetIndex(); idx != nil { + location = idx.GetSpecAbsolutePath() + } + if root := lowMessage.GetRootNode(); root != nil { + return fmt.Sprintf("%s#L%dC%d", location, root.Line, root.Column) + } + if ref := asyncReference(msg); ref != "" { + return location + "|" + ref + } + return "" +} + +func asyncMessagePayloadSchema(msg *highasync.Message) (*highbase.SchemaProxy, string, *yaml.Node, bool) { + if msg == nil || msg.Payload == nil || msg.GoLow() == nil { + return nil, "", nil, true + } + payloadNode := msg.GoLow().Payload.ValueNode + formatNode := yamlMappingValue(payloadNode, "schemaFormat") + if formatNode == nil { + return msg.Payload, "", payloadNode, true + } + format := yamlScalarString(formatNode) + schemaNode := yamlMappingValue(payloadNode, "schema") + if schemaNode == nil || schemaNode.Kind != yaml.MappingNode || !isJSONCompatibleAsyncSchemaFormat(format) { + return nil, format, firstNonNilYAMLNode(schemaNode, payloadNode), false + } + lowProxy := new(lowbase.SchemaProxy) + if err := lowProxy.Build(msg.GoLow().GetContext(), nil, schemaNode, msg.GoLow().GetIndex()); err != nil { + return nil, format, schemaNode, false + } + highProxy := highbase.NewSchemaProxy(&low.NodeReference[*lowbase.SchemaProxy]{ + Value: lowProxy, + ValueNode: schemaNode, + }) + if highProxy.Schema() == nil { + return nil, format, schemaNode, false + } + return highProxy, format, schemaNode, true +} + +func isJSONCompatibleAsyncSchemaFormat(format string) bool { + mediaType := strings.ToLower(strings.TrimSpace(strings.SplitN(format, ";", 2)[0])) + switch mediaType { + case "", "application/json", "application/schema+json", "application/schema+yaml", + "application/vnd.aai.asyncapi", "application/vnd.aai.asyncapi+json", "application/vnd.aai.asyncapi+yaml", + "application/vnd.oai.openapi", "application/vnd.oai.openapi+json", "application/vnd.oai.openapi+yaml": + return true + default: + return false + } +} + +func firstNonNilYAMLNode(nodes ...*yaml.Node) *yaml.Node { + for _, node := range nodes { + if node != nil { + return node + } + } + return nil +} + +func asyncMessagePayloadExamples(message *highasync.Message) map[string]string { + if message == nil || len(message.Examples) == 0 { + return nil + } + examples := make(map[string]string, len(message.Examples)) + for i, example := range message.Examples { + if example == nil || example.Payload == nil { + continue + } + payload := yamlNodeToJSON(example.Payload) + if payload == "" { + continue + } + name := firstNonEmpty(example.Name, fmt.Sprintf("Example %d", i+1)) + examples[name] = payload + } + if len(examples) == 0 { + return nil + } + return examples +} + +func (pp *PrintingPress) asyncMessageRef(key string, msg *highasync.Message, idx *asyncAPIIndex) *AsyncAPIMessageRef { + if msg == nil { + return nil + } + if idx != nil { + if ref := asyncReference(msg); ref != "" { + if entry, ok := idx.messages[ref]; ok && entry != nil && entry.ref != nil { + return entry.ref + } + } + if entry, ok := idx.messages["#/components/messages/"+escapeJSONPointerToken(key)]; ok && entry != nil && entry.ref != nil { + return entry.ref + } + } + return &AsyncAPIMessageRef{ + Name: firstNonEmpty(msg.Name, key), + Title: msg.Title, + Summary: msg.Summary, + ContentType: msg.ContentType, + } +} + +func (pp *PrintingPress) asyncMessageRefFromReference(ref *low.Reference, idx *asyncAPIIndex) *AsyncAPIMessageRef { + if entry := pp.asyncMessageEntryFromReference(ref, idx); entry != nil { + return entry.ref + } + return nil +} + +func (pp *PrintingPress) asyncMessageEntryFromReference(ref *low.Reference, idx *asyncAPIIndex) *asyncAPIMessageEntry { + if ref == nil || idx == nil { + return nil + } + key := ref.GetReference() + if entry, ok := idx.messages[key]; ok && entry != nil { + return entry + } + return nil +} + +func (pp *PrintingPress) asyncOperationChannelRef(op *highasync.Operation, idx *asyncAPIIndex) *AsyncAPIChannelRef { + if op == nil || op.Channel == nil || idx == nil { + return nil + } + if entry, ok := idx.channels[op.Channel.GetReference()]; ok && entry != nil { + return entry.ref + } + return nil +} + +func (pp *PrintingPress) asyncReplyInfo(reply *highasync.OperationReply, idx *asyncAPIIndex) *AsyncAPIReplyInfo { + if reply == nil { + return nil + } + var componentRef *ComponentLink + if ref := asyncReference(reply); ref != "" && idx != nil { + if entry, ok := idx.replies[ref]; ok && entry != nil && entry.reply != nil { + if entry.page != nil { + componentRef = &ComponentLink{ + Name: entry.page.Name, + ComponentType: entry.page.ComponentType, + TypeSlug: entry.page.TypeSlug, + Slug: entry.page.Slug, + } + } + reply = entry.reply + } + } + info := &AsyncAPIReplyInfo{Ref: componentRef} + if address := asyncReplyAddress(reply, idx); address != nil { + info.Address = address.Location + } + if reply.Channel != nil && idx != nil { + if entry, ok := idx.channels[reply.Channel.GetReference()]; ok && entry != nil { + info.Channel = entry.ref + } + } + for _, ref := range reply.Messages { + if msg := pp.asyncMessageRefFromReference(ref, idx); msg != nil { + info.Messages = append(info.Messages, msg) + } + } + if info.Ref == nil && info.Address == "" && info.Channel == nil && len(info.Messages) == 0 { + return nil + } + return info +} + +func (pp *PrintingPress) asyncReplyModelInfo(reply *highasync.OperationReply, idx *asyncAPIIndex) *AsyncAPIModelInfo { + info := &AsyncAPIModelInfo{Kind: "reply"} + replyInfo := pp.asyncReplyInfo(reply, idx) + if replyInfo == nil { + return info + } + info.Address = replyInfo.Address + info.Channel = replyInfo.Channel + info.Messages = replyInfo.Messages + return info +} + +func asyncReplyAddress(reply *highasync.OperationReply, idx *asyncAPIIndex) *highasync.OperationReplyAddress { + if reply == nil || reply.Address == nil { + return nil + } + if ref := asyncReference(reply.Address); ref != "" && idx != nil { + if entry, ok := idx.replyAddresses[ref]; ok && entry != nil && entry.address != nil { + return entry.address + } + } + return reply.Address +} + +func (pp *PrintingPress) asyncOrigin(value any) *bundler.ComponentOrigin { + line := 0 + if node := asyncRootNode(value); node != nil { + line = node.Line + } + location := pp.engineConfig.SpecLocation + type lowGetter interface { + GoLowUntyped() any + } + type indexGetter interface { + GetIndex() *index.SpecIndex + } + lowValue := value + if proxy, ok := value.(*highbase.SchemaProxy); ok && proxy.Schema() != nil { + lowValue = proxy.Schema().GoLow() + } else if high, ok := value.(lowGetter); ok { + lowValue = high.GoLowUntyped() + } + if indexed, ok := lowValue.(indexGetter); ok && indexed.GetIndex() != nil { + objectIndex := indexed.GetIndex() + rootIndex := pp.engineConfig.AsyncDoc.Index() + if objectIndex != rootIndex { + if resolved := objectIndex.GetSpecAbsolutePath(); resolved != "" { + location = resolved + } + } else if location == "" { + location = objectIndex.GetSpecAbsolutePath() + } + } + if location == "" && line == 0 { + return nil + } + return &bundler.ComponentOrigin{ + OriginalFile: location, + Line: line, + } +} + +func (pp *PrintingPress) collectAsyncAPIRootSecurity(doc *highasync.AsyncAPI, root *RootPage) { + if doc == nil || doc.Servers == nil || root == nil { + return + } + var schemes []*highasync.SecurityScheme + for pair := doc.Servers.First(); pair != nil; pair = pair.Next() { + if server := pair.Value(); server != nil { + schemes = append(schemes, server.Security...) + } + } + root.SecurityGroups, root.Security = pp.collectAsyncAPISecurityGroups(schemes) +} + +func (pp *PrintingPress) collectAsyncAPISecurityGroups(schemes []*highasync.SecurityScheme) ([]*SecurityRequirementGroup, []*SecurityRequirement) { + if len(schemes) == 0 { + return nil, nil + } + groups := make([]*SecurityRequirementGroup, 0, len(schemes)) + flat := make([]*SecurityRequirement, 0, len(schemes)) + seen := make(map[string]struct{}, len(schemes)) + for _, scheme := range schemes { + req := pp.asyncSecurityRequirement(scheme) + if req == nil { + continue + } + key := asyncSecurityRequirementKey(req) + if _, ok := seen[key]; ok { + continue + } + seen[key] = struct{}{} + groups = append(groups, &SecurityRequirementGroup{Requirements: []*SecurityRequirement{req}}) + flat = append(flat, req) + } + return groups, flat +} + +func (pp *PrintingPress) asyncSecurityRequirement(scheme *highasync.SecurityScheme) *SecurityRequirement { + if scheme == nil { + return nil + } + ref := asyncReference(scheme) + link := pp.resolveComponentLink(ref) + name := firstNonEmpty(asyncReferenceName(ref), scheme.Type, scheme.Scheme, "security") + if link != nil { + name = link.Name + } + return &SecurityRequirement{ + Name: name, + Scopes: append([]string(nil), scheme.Scopes...), + SchemeType: scheme.Type, + In: scheme.In, + Scheme: scheme.Scheme, + ParameterName: scheme.Name, + Ref: link, + } +} + +func asyncSecurityRequirementKey(req *SecurityRequirement) string { + if req == nil { + return "" + } + return req.Name + "|" + req.SchemeType + "|" + req.In + "|" + req.Scheme + "|" + req.ParameterName +} + +func asyncRootNode(value any) *yaml.Node { + type rootNoder interface { + GoLowUntyped() any + } + type lowRootNoder interface { + GetRootNode() *yaml.Node + } + if value == nil { + return nil + } + if rn, ok := value.(lowRootNoder); ok { + return rn.GetRootNode() + } + if high, ok := value.(rootNoder); ok { + if lowValue, ok := high.GoLowUntyped().(lowRootNoder); ok { + return lowValue.GetRootNode() + } + } + if proxy, ok := value.(*highbase.SchemaProxy); ok { + return proxy.GetValueNode() + } + return nil +} + +func asyncServerInfo(server *highasync.Server) *ServerInfo { + if server == nil { + return nil + } + return &ServerInfo{ + URL: asyncServerURL(server), + Description: firstNonEmpty(server.Description, server.Summary, server.Title, server.Protocol), + Variables: asyncServerVariables(server), + } +} + +func asyncServerVariables(server *highasync.Server) []*ServerVariableInfo { + if server == nil || server.Variables == nil { + return nil + } + var result []*ServerVariableInfo + for pair := server.Variables.First(); pair != nil; pair = pair.Next() { + variable := pair.Value() + if variable == nil { + continue + } + result = append(result, &ServerVariableInfo{ + Name: pair.Key(), + Default: variable.Default, + Enum: append([]string(nil), variable.Enum...), + Description: variable.Description, + }) + } + return result +} + +func asyncServerURL(server *highasync.Server) string { + if server == nil { + return "" + } + host := strings.TrimSpace(server.Host) + if host == "" { + return "" + } + pathname := strings.TrimSpace(server.Pathname) + protocol := strings.TrimSpace(server.Protocol) + if protocol == "" { + return host + pathname + } + return protocol + "://" + host + pathname +} + +func asyncExternalDoc(doc *highasync.ExternalDoc) *ExternalDocInfo { + if doc == nil { + return nil + } + return &ExternalDocInfo{URL: doc.URL, Description: doc.Description} +} + +func asyncChannelAddress(channel *highasync.Channel) string { + if channel == nil || channel.Address == nil { + return "" + } + return *channel.Address +} + +func asyncChannelDescription(channel *highasync.Channel) string { + if channel == nil { + return "" + } + return firstNonEmpty(channel.Description, channel.Summary, channel.Title) +} + +func asyncServerDescription(server *highasync.Server) string { + if server == nil { + return "" + } + return firstNonEmpty(server.Description, server.Summary, server.Title, server.Protocol) +} + +func asyncServerProtocol(server *highasync.Server) string { + if server == nil { + return "" + } + return server.Protocol +} + +func asyncSecurityDescription(security *highasync.SecurityScheme) string { + if security == nil { + return "" + } + return security.Description +} + +func asyncParameterDescription(parameter *highasync.Parameter) string { + if parameter == nil { + return "" + } + return parameter.Description +} + +func asyncReplyDescription(reply *highasync.OperationReply, idx *asyncAPIIndex) string { + address := asyncReplyAddress(reply, idx) + if address == nil { + return "" + } + return firstNonEmpty(address.Description, address.Location) +} + +func asyncReplyAddressDescription(address *highasync.OperationReplyAddress) string { + if address == nil { + return "" + } + return firstNonEmpty(address.Description, address.Location) +} + +func asyncReplyAddressLocation(address *highasync.OperationReplyAddress) string { + if address == nil { + return "" + } + return address.Location +} + +func asyncCorrelationIDDescription(correlationID *highasync.CorrelationID) string { + if correlationID == nil { + return "" + } + return firstNonEmpty(correlationID.Description, correlationID.Location) +} + +func asyncCorrelationIDLocation(correlationID *highasync.CorrelationID) string { + if correlationID == nil { + return "" + } + return correlationID.Location +} + +func asyncOperationTraitDescription(trait *highasync.OperationTrait) string { + if trait == nil { + return "" + } + return firstNonEmpty(trait.Description, trait.Summary, trait.Title) +} + +func asyncMessageTraitDescription(trait *highasync.MessageTrait) string { + if trait == nil { + return "" + } + return firstNonEmpty(trait.Description, trait.Summary, trait.Title) +} + +func asyncOperationPathLabel(operationID string, op *highasync.Operation, channel *AsyncAPIChannelRef) string { + if channel != nil { + return firstNonEmpty(channel.Address, channel.Name, operationID) + } + if op != nil { + return firstNonEmpty(operationID, op.Action) + } + return operationID +} + +func asyncOperationBindingNames(op *highasync.Operation) []string { + if op == nil { + return nil + } + var names []string + names = appendOperationBindingNames(names, op.Bindings) + for _, trait := range op.Traits { + if trait != nil { + names = appendOperationBindingNames(names, trait.Bindings) + } + } + return uniqueAsyncAPIProtocols(names) +} + +func appendOperationBindingNames(names []string, bindings *highasync.OperationBindings) []string { + if bindings == nil { + return names + } + return append(names, bindings.BindingNames()...) +} + +func asyncOperationBindingNamesFromBindings(bindings *highasync.OperationBindings) []string { + return uniqueAsyncAPIProtocols(appendOperationBindingNames(nil, bindings)) +} + +func indexAsyncAPIServers(doc *highasync.AsyncAPI, idx *asyncAPIIndex) { + if doc == nil || idx == nil { + return + } + if idx.servers == nil { + idx.servers = make(map[string]*highasync.Server) + } + if doc.Servers != nil { + for name, server := range doc.Servers.FromOldest() { + idx.servers["#/servers/"+escapeJSONPointerToken(name)] = server + if server != nil { + idx.rootProtocols = append(idx.rootProtocols, server.Protocol) + } + } + idx.rootProtocols = uniqueAsyncAPIProtocols(idx.rootProtocols) + } + if doc.Components != nil && doc.Components.Servers != nil { + for name, server := range doc.Components.Servers.FromOldest() { + idx.servers["#/components/servers/"+escapeJSONPointerToken(name)] = server + } + } +} + +func asyncOperationProtocols(op *highasync.Operation, idx *asyncAPIIndex) []string { + names := asyncOperationBindingNames(op) + if op == nil || op.Channel == nil || idx == nil { + return names + } + if entry := idx.channels[op.Channel.GetReference()]; entry != nil { + names = append(names, asyncChannelProtocols(entry.channel, idx)...) + } + return uniqueAsyncAPIProtocols(names) +} + +func asyncChannelProtocols(channel *highasync.Channel, idx *asyncAPIIndex) []string { + names := asyncChannelBindingNames(channel) + if channel == nil || idx == nil { + return names + } + if len(channel.Servers) == 0 { + names = append(names, idx.rootProtocols...) + } + for _, ref := range channel.Servers { + if ref == nil { + continue + } + if server := idx.servers[ref.GetReference()]; server != nil { + names = append(names, server.Protocol) + } + } + return uniqueAsyncAPIProtocols(names) +} + +func asyncMessageBindingNamesFromBindings(bindings *highasync.MessageBindings) []string { + if bindings == nil { + return nil + } + return uniqueAsyncAPIProtocols(bindings.BindingNames()) +} + +func canonicalAsyncAPIProtocol(name string, protocols []string) string { + unique := uniqueAsyncAPIProtocols(protocols) + if len(unique) == 1 && asyncAPIProtocolFamily(name) == asyncAPIProtocolFamily(unique[0]) { + return unique[0] + } + return "" +} + +func asyncAPIProtocolFamily(protocol string) string { + normalized := strings.NewReplacer("-", "", "_", "", ".", "", " ", "").Replace(strings.ToLower(strings.TrimSpace(protocol))) + switch normalized { + case "ws", "wss", "websocket", "websockets": + return "websocket" + case "kafkasecure": + return "kafka" + case "amqps": + return "amqp" + case "amqp1": + return "amqp" + case "mqtts", "securemqtt", "mqttsecure": + return "mqtt" + case "mqtt5": + return "mqtt" + case "stomps": + return "stomp" + case "https": + return "http" + case "googlepubsub", "gcppubsub": + return "googlepubsub" + default: + return normalized + } +} + +func uniqueAsyncAPIProtocols(protocols []string) []string { + seen := make(map[string]struct{}, len(protocols)) + result := make([]string, 0, len(protocols)) + for _, protocol := range protocols { + protocol = strings.TrimSpace(protocol) + if protocol == "" { + continue + } + family := asyncAPIProtocolFamily(protocol) + if _, ok := seen[family]; ok { + continue + } + seen[family] = struct{}{} + result = append(result, protocol) + } + return result +} + +func assignAsyncAPINavTagProtocols(tags []*NavTag) []string { + var collected []string + for _, tag := range tags { + if tag == nil { + continue + } + var protocols []string + for _, operation := range tag.Operations { + if operation != nil { + protocols = append(protocols, operation.Protocols...) + } + } + protocols = append(protocols, assignAsyncAPINavTagProtocols(tag.Children)...) + tag.Protocols = uniqueAsyncAPIProtocols(protocols) + tag.Protocol = canonicalAsyncAPIProtocol(tag.Name, tag.Protocols) + collected = append(collected, tag.Protocols...) + } + return uniqueAsyncAPIProtocols(collected) +} + +func asyncChannelBindingNames(channel *highasync.Channel) []string { + if channel == nil || channel.Bindings == nil { + return nil + } + return uniqueAsyncAPIProtocols(channel.Bindings.BindingNames()) +} + +func asyncMessageBindingNames(message *highasync.Message) []string { + if message == nil || message.Bindings == nil { + return nil + } + return uniqueAsyncAPIProtocols(message.Bindings.BindingNames()) +} + +func asyncOperationTraitLabels(op *highasync.Operation) []string { + if op == nil || len(op.Traits) == 0 { + return nil + } + result := make([]string, 0, len(op.Traits)) + for _, trait := range op.Traits { + if trait == nil { + continue + } + result = append(result, firstNonEmpty(asyncReferenceName(asyncReference(trait)), trait.Title, trait.Summary, trait.Description, "trait")) + } + return uniqueNonEmptyStrings(result) +} + +func asyncOperationTagNames(op *highasync.Operation) []string { + if op == nil { + return nil + } + var names []string + for _, tag := range op.Tags { + if tag != nil { + names = append(names, tag.Name) + } + } + for _, trait := range op.Traits { + if trait == nil { + continue + } + for _, tag := range trait.Tags { + if tag != nil { + names = append(names, tag.Name) + } + } + } + return uniqueNonEmptyStrings(names) +} + +func asyncOperationSecuritySchemes(op *highasync.Operation) []*highasync.SecurityScheme { + if op == nil { + return nil + } + var schemes []*highasync.SecurityScheme + schemes = append(schemes, op.Security...) + for _, trait := range op.Traits { + if trait != nil { + schemes = append(schemes, trait.Security...) + } + } + return schemes +} + +func asyncOperationHasSecurityField(op *highasync.Operation) bool { + if op == nil || op.GoLow() == nil { + return false + } + if op.GoLow().Security.Value != nil || op.GoLow().Security.KeyNode != nil || op.GoLow().Security.ValueNode != nil { + return true + } + return yamlMappingValue(asyncRootNode(op), "security") != nil +} + +func asyncMessageExamples(message *highasync.Message) []*AsyncAPIMessageExample { + if message == nil || len(message.Examples) == 0 { + return nil + } + result := make([]*AsyncAPIMessageExample, 0, len(message.Examples)) + for _, example := range message.Examples { + if example == nil { + continue + } + result = append(result, &AsyncAPIMessageExample{ + Name: example.Name, + Summary: example.Summary, + Payload: yamlNodeToJSON(example.Payload), + Headers: yamlNodeToJSON(example.Headers), + }) + } + return result +} + +func escapeJSONPointerToken(token string) string { + token = strings.ReplaceAll(token, "~", "~0") + return strings.ReplaceAll(token, "/", "~1") +} + +func asyncReference(value any) string { + type referencer interface { + IsReference() bool + GetReference() string + } + type lowGetter interface { + GoLowUntyped() any + } + if value == nil { + return "" + } + if ref, ok := value.(referencer); ok && ref.IsReference() { + return ref.GetReference() + } + if high, ok := value.(lowGetter); ok { + if ref, ok := high.GoLowUntyped().(referencer); ok && ref.IsReference() { + return ref.GetReference() + } + } + return "" +} + +func asyncReferenceName(ref string) string { + if idx := strings.Index(ref, "#"); idx >= 0 { + ref = ref[idx:] + } + ref = strings.Trim(ref, "/") + if ref == "" { + return "" + } + parts := strings.Split(ref, "/") + return decodeJSONPointerToken(parts[len(parts)-1]) +} + +func uniqueNonEmptyStrings(values []string) []string { + if len(values) == 0 { + return nil + } + result := make([]string, 0, len(values)) + seen := make(map[string]struct{}, len(values)) + for _, value := range values { + value = strings.TrimSpace(value) + if value == "" { + continue + } + if _, ok := seen[value]; ok { + continue + } + seen[value] = struct{}{} + result = append(result, value) + } + return result +} + +func firstNonEmpty(values ...string) string { + for _, value := range values { + if trimmed := strings.TrimSpace(value); trimmed != "" { + return trimmed + } + } + return "" +} diff --git a/printingpress/collector_test.go b/printingpress/collector_test.go index ec98d0a..5c2322b 100644 --- a/printingpress/collector_test.go +++ b/printingpress/collector_test.go @@ -351,6 +351,94 @@ func TestBuildNavModelGroups_AssignsAdaptiveCardWidth(t *testing.T) { assert.Contains(t, group.CardGridStyle(), "--pp-model-card-min:") } +func TestBuildNavModelGroups_CarriesAsyncAPIProtocol(t *testing.T) { + pp := newPressEngine(&pressEngineConfig{}) + pp.site.Models = map[string][]*ModelPage{ + "operation-traits": { + { + Name: "kafka", + Slug: "kafka", + TypeSlug: "operation-traits", + SpecKind: SpecKindAsyncAPI, + AsyncAPI: &AsyncAPIModelInfo{Kind: "operationTrait", Protocol: "kafka", Bindings: []string{"kafka"}}, + }, + }, + } + + pp.buildNavModelGroups() + require.Len(t, pp.site.NavModelGroups, 1) + require.Len(t, pp.site.NavModelGroups[0].Models, 1) + assert.Equal(t, "kafka", pp.site.NavModelGroups[0].Models[0].Protocol) + assert.Equal(t, []string{"kafka"}, pp.site.NavModelGroups[0].Models[0].Protocols) +} + +func TestCanonicalAsyncAPIProtocol(t *testing.T) { + tests := []struct { + name string + component string + protocols []string + want string + }{ + {name: "canonical kafka component", component: "kafka", protocols: []string{"kafka"}, want: "kafka"}, + {name: "case insensitive", component: "KAFKA", protocols: []string{"kafka"}, want: "kafka"}, + {name: "secure kafka alias", component: "kafka", protocols: []string{"kafka", "kafka-secure"}, want: "kafka"}, + {name: "websocket alias", component: "websocket", protocols: []string{"ws"}, want: "ws"}, + {name: "websocket plural alias", component: "websocket", protocols: []string{"websockets"}, want: "websockets"}, + {name: "google pubsub alias", component: "googlepubsub", protocols: []string{"gcp-pubsub"}, want: "gcp-pubsub"}, + {name: "amqp version alias", component: "amqp", protocols: []string{"amqp", "amqp1"}, want: "amqp"}, + {name: "secure mqtt alias", component: "mqtt", protocols: []string{"mqtt", "mqtts"}, want: "mqtt"}, + {name: "mqtt version alias", component: "mqtt", protocols: []string{"mqtt", "mqtt5"}, want: "mqtt"}, + {name: "named trait preserves identity", component: "kafkaProducer", protocols: []string{"kafka"}, want: ""}, + {name: "multi protocol preserves identity", component: "transport", protocols: []string{"kafka", "amqp"}, want: ""}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equal(t, tt.want, canonicalAsyncAPIProtocol(tt.component, tt.protocols)) + }) + } +} + +func TestAssignAsyncAPINavTagProtocols(t *testing.T) { + tags := []*NavTag{ + { + Name: "kafka", + Operations: []*NavOperation{ + {Protocols: []string{"kafka"}}, + {Protocols: []string{"kafka"}}, + }, + }, + { + Name: "lighting", + Operations: []*NavOperation{ + {Protocols: []string{"kafka"}}, + }, + }, + { + Name: "transport", + Operations: []*NavOperation{ + {Protocols: []string{"kafka"}}, + {Protocols: []string{"amqp"}}, + }, + }, + { + Name: "kafka", + Operations: []*NavOperation{ + {Protocols: []string{"amqp"}}, + }, + }, + } + + assignAsyncAPINavTagProtocols(tags) + assert.Equal(t, "kafka", tags[0].Protocol) + assert.Equal(t, []string{"kafka"}, tags[0].Protocols) + assert.Empty(t, tags[1].Protocol) + assert.Equal(t, []string{"kafka"}, tags[1].Protocols) + assert.Empty(t, tags[2].Protocol) + assert.ElementsMatch(t, []string{"kafka", "amqp"}, tags[2].Protocols) + assert.Empty(t, tags[3].Protocol) +} + func TestCaptureRawData_UsesIdentityCacheAndLazyHighlight(t *testing.T) { pp := newPressEngine(&pressEngineConfig{}) renderable := &countingRenderable{ diff --git a/printingpress/config/config.go b/printingpress/config/config.go index e95cc5a..b1d36b1 100644 --- a/printingpress/config/config.go +++ b/printingpress/config/config.go @@ -25,6 +25,7 @@ type File struct { Theme string `mapstructure:"theme" yaml:"theme"` NoLogo bool `mapstructure:"noLogo" yaml:"noLogo"` DisableExport bool `mapstructure:"disableExport" yaml:"disableExport"` + IncludeSpec bool `mapstructure:"includeSpec" yaml:"includeSpec"` NoHTML bool `mapstructure:"noHTML" yaml:"noHTML"` NoLLM bool `mapstructure:"noLLM" yaml:"noLLM"` NoJSON bool `mapstructure:"noJSON" yaml:"noJSON"` diff --git a/printingpress/config/config_test.go b/printingpress/config/config_test.go index 9436192..3714b17 100644 --- a/printingpress/config/config_test.go +++ b/printingpress/config/config_test.go @@ -18,6 +18,7 @@ func TestLoadDiscoversAndResolvesRelativePaths(t *testing.T) { require.NoError(t, os.WriteFile(filepath.Join(projectDir, "printing-press.yaml"), []byte(` output: ./site basePath: ./specs +includeSpec: true scan: root: ./apis state: @@ -30,6 +31,7 @@ state: require.NotNil(t, cfg) require.Equal(t, filepath.Join(projectDir, "site"), cfg.Output) require.Equal(t, filepath.Join(projectDir, "specs"), cfg.BasePath) + require.True(t, cfg.IncludeSpec) require.Equal(t, filepath.Join(projectDir, "apis"), cfg.Scan.Root) require.Equal(t, filepath.Join(projectDir, "state", "cache.db"), cfg.State.SQLite.Path) } diff --git a/printingpress/crossref.go b/printingpress/crossref.go index b68b368..c8b9ef2 100644 --- a/printingpress/crossref.go +++ b/printingpress/crossref.go @@ -47,13 +47,13 @@ func (pp *PrintingPress) buildCrossRefs() { // Apply cross-refs to each operation page opCrossRefs := pp.buildOperationCrossRefs(opRefsCache) for _, op := range pp.site.Operations { - key := op.Method + " " + op.Path + key := operationCrossRefKey(op) if refs, ok := opCrossRefs[key]; ok { op.CrossRefs = refs } } for _, wh := range pp.site.Webhooks { - key := wh.Method + " " + wh.Path + key := operationCrossRefKey(wh) if refs, ok := opCrossRefs[key]; ok { wh.CrossRefs = refs } @@ -62,7 +62,7 @@ func (pp *PrintingPress) buildCrossRefs() { // getCrossRefIndex builds the cross-reference index by scanning SchemaJSON content. func (pp *PrintingPress) getCrossRefIndex() (*CrossRefIndex, map[string]*ModelPage, map[string][]*ComponentRef) { - if pp.engineConfig == nil || pp.engineConfig.DrDoc == nil { + if pp == nil || pp.site == nil { return nil, nil, nil } @@ -111,6 +111,14 @@ func (pp *PrintingPress) getCrossRefIndex() (*CrossRefIndex, map[string]*ModelPa Slug: srcPage.Slug, }) } + for _, compRef := range pp.extractAsyncAPIModelRefs(srcPage, modelSlugLookup) { + targetKey := slugpkg.ComponentKey(compRef.ComponentType, compRef.Name) + if targetKey == srcKey { + continue + } + addComponentRefUnique(&idx.ComponentUsesModels, srcKey, compRef) + addComponentRefUnique(&idx.ComponentToComponent, targetKey, modelPageComponentRef(srcPage)) + } } } @@ -120,12 +128,13 @@ func (pp *PrintingPress) getCrossRefIndex() (*CrossRefIndex, map[string]*ModelPa opRefsCache := make(map[string][]*ComponentRef, len(allOps)) for _, op := range allOps { opRef := &OperationRef{ - Method: op.Method, - Path: op.Path, - Slug: op.Slug, + Method: op.Method, + Path: op.Path, + Slug: op.Slug, + OperationID: op.OperationID, } - key := op.Method + " " + op.Path + key := operationCrossRefKey(op) referencedModels := pp.extractOperationModelRefs(op, modelSlugLookup) opRefsCache[key] = referencedModels for _, compRef := range referencedModels { @@ -162,13 +171,28 @@ func (pp *PrintingPress) extractOperationModelRefs(op *OperationPage, modelSlugL seen := make(map[string]bool) var refs []*ComponentRef + addComponentRef := func(compRef *ComponentRef) { + if compRef == nil { + return + } + key := slugpkg.ComponentKey(compRef.ComponentType, compRef.Name) + if seen[key] { + return + } + seen[key] = true + refs = append(refs, compRef) + } + addNamedModel := func(componentType, name string) { + if name == "" { + return + } + if page := modelSlugLookup[slugpkg.ComponentKey(componentType, name)]; page != nil { + addComponentRef(modelPageComponentRef(page)) + } + } addRef := func(schemaJSON string) { for _, compRef := range extractRefsFromJSON(schemaJSON, modelSlugLookup) { - key := slugpkg.ComponentKey(compRef.ComponentType, compRef.Name) - if !seen[key] { - seen[key] = true - refs = append(refs, compRef) - } + addComponentRef(compRef) } } @@ -220,16 +244,130 @@ func (pp *PrintingPress) extractOperationModelRefs(op *OperationPage, modelSlugL addLink(p.Ref) } - // Scan security requirements - for _, sec := range op.Security { - if sec.Ref != nil { + // Scan the same effective security requirements rendered on the operation page. + if groups, explicitNone, ok := effectiveSecurityGroups(pp.site, op); ok && !explicitNone { + for _, group := range groups { + for _, sec := range group.Requirements { + addLink(sec.Ref) + } + } + } else { + for _, sec := range op.Security { addLink(sec.Ref) } } + if op.SpecKind.IsAsyncAPI() && op.AsyncAPI != nil { + addAsyncChannel := func(channel *AsyncAPIChannelRef) { + if channel == nil { + return + } + addNamedModel("channels", channel.Name) + } + addAsyncMessage := func(message *AsyncAPIMessageRef) { + if message == nil { + return + } + addNamedModel("messages", message.Name) + if page := modelSlugLookup[slugpkg.ComponentKey("messages", message.Name)]; page != nil { + for _, compRef := range pp.extractAsyncAPIModelRefs(page, modelSlugLookup) { + addComponentRef(compRef) + } + } + } + addAsyncChannel(op.AsyncAPI.Channel) + for _, message := range op.AsyncAPI.Messages { + addAsyncMessage(message) + } + if op.AsyncAPI.Reply != nil { + addLink(op.AsyncAPI.Reply.Ref) + addAsyncChannel(op.AsyncAPI.Reply.Channel) + for _, message := range op.AsyncAPI.Reply.Messages { + addAsyncMessage(message) + } + } + } + + return refs +} + +func operationCrossRefKey(op *OperationPage) string { + if op == nil { + return "" + } + if op.Slug != "" { + return op.Slug + } + return op.Method + " " + op.Path +} + +func (pp *PrintingPress) extractAsyncAPIModelRefs(page *ModelPage, modelSlugLookup map[string]*ModelPage) []*ComponentRef { + if page == nil || page.AsyncAPI == nil { + return nil + } + seen := make(map[string]bool) + var refs []*ComponentRef + add := func(ref *ComponentRef) { + if ref == nil { + return + } + key := slugpkg.ComponentKey(ref.ComponentType, ref.Name) + if seen[key] { + return + } + seen[key] = true + refs = append(refs, ref) + } + addNamed := func(componentType, name string) { + if name == "" { + return + } + if target := modelSlugLookup[slugpkg.ComponentKey(componentType, name)]; target != nil { + add(modelPageComponentRef(target)) + } + } + addLink := func(link *ComponentLink) { + if link == nil { + return + } + addNamed(link.ComponentType, link.Name) + } + + if page.AsyncAPI.Channel != nil { + addNamed("channels", page.AsyncAPI.Channel.Name) + } + for _, message := range page.AsyncAPI.Messages { + if message != nil { + addNamed("messages", message.Name) + } + } + for _, surface := range page.AsyncAPI.Schemas { + if surface == nil { + continue + } + addLink(surface.Ref) + for _, compRef := range extractRefsFromJSON(surface.SchemaJSON, modelSlugLookup) { + add(compRef) + } + } + for _, compRef := range extractRefsFromJSON(page.SchemaJSON, modelSlugLookup) { + add(compRef) + } return refs } +func modelPageComponentRef(page *ModelPage) *ComponentRef { + if page == nil { + return nil + } + return &ComponentRef{ + Name: page.Name, + ComponentType: page.ComponentType, + TypeSlug: page.TypeSlug, + Slug: page.Slug, + } +} + var refPattern = regexp.MustCompile(`"\$ref"\s*:\s*"#/components/([^"]+)/([^"]+)"`) // extractRefsFromJSON finds $ref component references in a JSON schema string @@ -245,7 +383,7 @@ func extractRefsFromJSON(jsonStr string, lookup map[string]*ModelPage) []*Compon var refs []*ComponentRef seen := make(map[string]bool) for _, m := range matches { - compType, compName := m[1], m[2] + compType, compName := decodeJSONPointerToken(m[1]), decodeJSONPointerToken(m[2]) key := slugpkg.ComponentKey(compType, compName) if seen[key] { continue @@ -274,6 +412,12 @@ func addComponentRefUnique(m *map[string][]*ComponentRef, key string, ref *Compo func addOperationRefUnique(m *map[string][]*OperationRef, key string, ref *OperationRef) { for _, existing := range (*m)[key] { + if existing.Slug != "" || ref.Slug != "" { + if existing.Slug == ref.Slug { + return + } + continue + } if existing.Method == ref.Method && existing.Path == ref.Path { return } diff --git a/printingpress/developer_diagnostics.go b/printingpress/developer_diagnostics.go index dbb55c1..00d75e8 100644 --- a/printingpress/developer_diagnostics.go +++ b/printingpress/developer_diagnostics.go @@ -70,6 +70,8 @@ func (pp *PrintingPress) collectDeveloperDiagnostics() { pp.site.Diagnostics = &ppmodel.DiagnosticsPage{ Title: "Diagnostics", Slug: pppaths.DiagnosticsSlug, + SpecKind: pp.site.SpecKind, + SpecLabel: pp.site.SpecKind.DisplayLabel(), SiteCounts: siteCounts, Problems: diagnosticProblems, OrphanCount: len(pp.engineConfig.OrphanResults), diff --git a/printingpress/developer_diagnostics_asyncapi.go b/printingpress/developer_diagnostics_asyncapi.go new file mode 100644 index 0000000..2913634 --- /dev/null +++ b/printingpress/developer_diagnostics_asyncapi.go @@ -0,0 +1,280 @@ +// Copyright 2024-2026 Princess Beef Heavy Industries, LLC / Dave Shanley +// https://pb33f.io +// SPDX-License-Identifier: Apache-2.0 + +package printingpress + +import ( + "strings" + "unicode" + + drV3 "github.com/pb33f/doctor/model/high/v3" + "github.com/pb33f/doctor/printingpress/internal/pppaths" + ppmodel "github.com/pb33f/doctor/printingpress/model" +) + +type asyncAPIDiagnosticMatch struct { + target developerPageTarget + op *ppmodel.OperationPage + model *ppmodel.ModelPage +} + +func (pp *PrintingPress) collectAsyncAPIDeveloperDiagnostics() { + if !pp.developerModeEnabled() || pp.site == nil || !pp.site.SpecKind.IsAsyncAPI() { + return + } + pp.site.DeveloperMode = true + pp.site.OrphanResults = pp.engineConfig.OrphanResults + if len(pp.engineConfig.LintResults) == 0 { + pp.warn("developer mode enabled without lint results; diagnostics will be empty", "", nil) + } + + nextID := 0 + cache := newDiagnosticBuildCache() + opCounts := make(map[string]ppmodel.ViolationCounts) + modelCounts := make(map[string]ppmodel.ViolationCounts) + var diagnosticProblems []*ppmodel.PageProblem + + for _, result := range pp.engineConfig.LintResults { + template := pp.problemTemplateFromResult(result, cache) + if template == nil { + continue + } + match := pp.matchAsyncAPIDiagnosticResult(result) + problem := cloneProblemForTarget(template, match.target, &nextID) + if problem == nil { + continue + } + diagnosticProblems = append(diagnosticProblems, problem) + switch { + case match.op != nil: + match.op.Problems = append(match.op.Problems, problem) + case match.model != nil: + match.model.Problems = append(match.model.Problems, problem) + } + } + + for _, op := range pp.site.Operations { + if len(op.Problems) == 0 { + continue + } + sortProblems(op.Problems) + op.Counts = countProblems(op.Problems) + op.Slices = pp.buildProblemSlicesWithCache(op.Problems, cache) + opCounts[op.Slug] = op.Counts + } + for _, pages := range pp.site.Models { + for _, page := range pages { + if len(page.Problems) == 0 { + continue + } + sortProblems(page.Problems) + page.Counts = countProblems(page.Problems) + page.Slices = pp.buildProblemSlicesWithCache(page.Problems, cache) + modelCounts[page.TypeSlug+"/"+page.Slug] = page.Counts + } + } + + sortProblems(diagnosticProblems) + siteCounts := countProblems(diagnosticProblems) + if pp.site.Root != nil { + pp.site.Root.Counts = siteCounts + pp.site.Root.Problems = cloneProblemsForPage(diagnosticProblems, pppaths.FileIndexHTML, pp.site.Root.Title) + pp.site.Root.Slices = pp.buildProblemSlicesWithCache(pp.site.Root.Problems, cache) + } + pp.site.Diagnostics = &ppmodel.DiagnosticsPage{ + Title: "Diagnostics", + Slug: pppaths.DiagnosticsSlug, + SpecKind: pp.site.SpecKind, + SpecLabel: pp.site.SpecKind.DisplayLabel(), + SiteCounts: siteCounts, + Problems: diagnosticProblems, + OrphanCount: len(pp.engineConfig.OrphanResults), + } + pp.applyDeveloperNavCounts(opCounts, modelCounts) +} + +func (pp *PrintingPress) matchAsyncAPIDiagnosticResult(result *drV3.RuleFunctionResult) asyncAPIDiagnosticMatch { + target := pp.rootDeveloperTarget() + match := asyncAPIDiagnosticMatch{target: target} + keys := asyncAPIDiagnosticKeysForResult(result) + for _, op := range pp.site.Operations { + if op == nil || op.OperationID == "" { + continue + } + if _, ok := keys.operations[asyncAPIDiagnosticKey(op.OperationID)]; ok { + match.op = op + match.target = asyncAPIDiagnosticOperationTarget(op) + return match + } + } + for _, pages := range pp.site.Models { + for _, page := range pages { + if page == nil || page.Name == "" { + continue + } + if !asyncAPIDiagnosticHasModelKey(keys.models, page) { + continue + } + match.model = page + match.target = asyncAPIDiagnosticModelTarget(page) + return match + } + } + if line := asyncAPIDiagnosticSourceLine(result); line > 0 { + return pp.matchAsyncAPIDiagnosticByLine(line, match) + } + return match +} + +type asyncAPIDiagnosticKeys struct { + operations map[string]struct{} + models map[string]struct{} +} + +func asyncAPIDiagnosticKeysForResult(result *drV3.RuleFunctionResult) asyncAPIDiagnosticKeys { + keys := asyncAPIDiagnosticKeys{ + operations: make(map[string]struct{}), + models: make(map[string]struct{}), + } + if result == nil { + return keys + } + parts := []string{result.Path, result.Message, result.RuleId, result.RuleSeverity} + if result.Rule != nil { + parts = append(parts, result.Rule.Id, result.Rule.Message, result.Rule.Severity) + } + if result.Origin != nil { + parts = append(parts, result.Origin.AbsoluteLocation, result.Origin.AbsoluteLocationValue) + } + tokens := asyncAPIDiagnosticTokens(parts...) + for i, token := range tokens { + switch token { + case "operations": + if i+1 < len(tokens) { + keys.operations[asyncAPIDiagnosticKey(tokens[i+1])] = struct{}{} + } + case "components": + if i+2 < len(tokens) { + componentType := asyncAPIDiagnosticKey(tokens[i+1]) + name := asyncAPIDiagnosticKey(tokens[i+2]) + if componentType != "" && name != "" { + keys.models[componentType+":"+name] = struct{}{} + } + } + case "channels": + if i+1 < len(tokens) { + name := asyncAPIDiagnosticKey(tokens[i+1]) + if name != "" { + keys.models["channels:"+name] = struct{}{} + } + } + } + } + return keys +} + +func asyncAPIDiagnosticTokens(parts ...string) []string { + var tokens []string + for _, part := range parts { + tokens = append(tokens, strings.FieldsFunc(part, func(r rune) bool { + switch r { + case '.', '/', '[', ']', '\'', '"', '#', '$': + return true + default: + return unicode.IsSpace(r) + } + })...) + } + return tokens +} + +func asyncAPIDiagnosticKey(value string) string { + value = strings.ReplaceAll(value, "~1", "/") + value = strings.ReplaceAll(value, "~0", "~") + return strings.ToLower(strings.TrimSpace(value)) +} + +func asyncAPIDiagnosticHasModelKey(keys map[string]struct{}, page *ppmodel.ModelPage) bool { + if page == nil || page.Name == "" { + return false + } + name := asyncAPIDiagnosticKey(page.Name) + for _, componentType := range []string{page.ComponentType, page.TypeSlug} { + componentType = asyncAPIDiagnosticKey(componentType) + if componentType == "" { + continue + } + if _, ok := keys[componentType+":"+name]; ok { + return true + } + } + return false +} + +func asyncAPIDiagnosticSourceLine(result *drV3.RuleFunctionResult) int { + if result == nil { + return 0 + } + if result.StartNode != nil && result.StartNode.Line > 0 { + return result.StartNode.Line + } + if result.Origin != nil { + if result.Origin.LineValue > 0 { + return result.Origin.LineValue + } + if result.Origin.Line > 0 { + return result.Origin.Line + } + } + if result.EndNode != nil && result.EndNode.Line > 0 { + return result.EndNode.Line + } + return 0 +} + +func (pp *PrintingPress) matchAsyncAPIDiagnosticByLine(line int, fallback asyncAPIDiagnosticMatch) asyncAPIDiagnosticMatch { + bestLine := 0 + best := fallback + for _, op := range pp.site.Operations { + if op == nil || op.Source.Line <= 0 || op.Source.Line > line || op.Source.Line < bestLine { + continue + } + bestLine = op.Source.Line + best.op = op + best.model = nil + best.target = asyncAPIDiagnosticOperationTarget(op) + } + for _, pages := range pp.site.Models { + for _, page := range pages { + if page == nil || page.Source.Line <= 0 || page.Source.Line > line || page.Source.Line < bestLine { + continue + } + bestLine = page.Source.Line + best.op = nil + best.model = page + best.target = asyncAPIDiagnosticModelTarget(page) + } + } + return best +} + +func asyncAPIDiagnosticOperationTarget(op *ppmodel.OperationPage) developerPageTarget { + return developerPageTarget{ + href: pppaths.OperationHTML(op.Slug), + title: operationPageLLMLabel(op), + kind: "operation", + method: op.Method, + path: op.Path, + operation: op.OperationID, + } +} + +func asyncAPIDiagnosticModelTarget(page *ppmodel.ModelPage) developerPageTarget { + return developerPageTarget{ + href: pppaths.ModelHTML(page.TypeSlug, page.Slug), + title: page.Name, + kind: "model", + component: page.ComponentType, + } +} diff --git a/printingpress/errors.go b/printingpress/errors.go index 7c0a0ff..fac6aac 100644 --- a/printingpress/errors.go +++ b/printingpress/errors.go @@ -7,6 +7,8 @@ package printingpress import ( "errors" "strings" + + "github.com/pb33f/libasyncapi" ) var ( @@ -26,8 +28,16 @@ var ( ErrNoV3Document = errors.New("printingpress: doctor model has no V3 document") // ErrNoOutputDir is returned when no output directory can be resolved. ErrNoOutputDir = errors.New("printingpress: output directory is required") + // ErrIncludedSpecUnavailable is returned when IncludeSpec is enabled but source bytes cannot be obtained. + ErrIncludedSpecUnavailable = errors.New("printingpress: included specification bytes are unavailable") // ErrNilSite is returned when a writer is called without a rendered site model. ErrNilSite = errors.New("printingpress: site is required") + // ErrUnknownSpecKind is returned when raw bytes do not contain a supported root marker. + ErrUnknownSpecKind = errors.New("printingpress: unsupported or missing specification marker") + // ErrUnsupportedAsyncAPI2 is returned when an AsyncAPI 2.x source is supplied. + ErrUnsupportedAsyncAPI2 = libasyncapi.ErrAsyncAPI2NotSupported + // ErrNoAsyncAPIDocument is returned when an AsyncAPI document could not be produced. + ErrNoAsyncAPIDocument = errors.New("printingpress: AsyncAPI document is required") ) // ValidationIssue describes one configuration validation problem. diff --git a/printingpress/graph_builder.go b/printingpress/graph_builder.go index 9ad27d6..8f48b3a 100644 --- a/printingpress/graph_builder.go +++ b/printingpress/graph_builder.go @@ -496,6 +496,232 @@ func BuildFocusedGraph(allNodes []*v3.Node, allEdges []*v3.Edge, targetNodeID st return idx.buildFocusedGraph(targetNodeID, maxDepth) } +// BuildAsyncAPIFocusedModelGraph builds a focused dependency graph for an +// AsyncAPI model page from Printing Press cross-reference data. +func BuildAsyncAPIFocusedModelGraph(page *ModelPage, pagesByID map[string]*ModelPage, maxDepth int) (string, error) { + if page == nil || page.CrossRefs == nil { + return "", nil + } + if maxDepth <= 0 { + maxDepth = defaultMaxDepth + } + targetID := SchemaNodeID(page.ComponentType, page.Name) + result := &focusedGraphResult{ + Mode: drModel.GraphModeStandard, + } + if pagesByID == nil { + pagesByID = buildAsyncAPIModelGraphPages(page, nil) + } + pagesByID[targetID] = page + seenNodes := make(map[string]bool) + nodeIndexes := make(map[string]int) + isDependency := make(map[string]bool) + seenEdges := make(map[string]bool) + + addModelPageNode := func(page *ModelPage, dependency bool) (string, error) { + if page == nil { + return "", nil + } + nodeID := SchemaNodeID(page.ComponentType, page.Name) + if nodeID != targetID && dependency { + isDependency[nodeID] = true + } + if !seenNodes[nodeID] { + node, err := buildSyntheticModelPageNode(nodeID, page.Name, page.TypeSlug, page.Slug, page.ComponentType, isDependency[nodeID]) + if err != nil { + return "", err + } + nodeIndexes[nodeID] = len(result.Nodes) + result.Nodes = append(result.Nodes, node) + seenNodes[nodeID] = true + } else if isDependency[nodeID] { + if idx, ok := nodeIndexes[nodeID]; ok { + node, err := buildSyntheticModelPageNode(nodeID, page.Name, page.TypeSlug, page.Slug, page.ComponentType, true) + if err != nil { + return "", err + } + result.Nodes[idx] = node + } + } + return nodeID, nil + } + addModelRefNode := func(ref *ComponentRef, dependency bool) (string, error) { + if ref == nil { + return "", nil + } + nodeID := SchemaNodeID(ref.ComponentType, ref.Name) + if modelPage := pagesByID[nodeID]; modelPage != nil { + return addModelPageNode(modelPage, dependency) + } + if nodeID != targetID && dependency { + isDependency[nodeID] = true + } + if !seenNodes[nodeID] { + node, err := buildSyntheticModelPageNode(nodeID, ref.Name, ref.TypeSlug, ref.Slug, ref.ComponentType, isDependency[nodeID]) + if err != nil { + return "", err + } + nodeIndexes[nodeID] = len(result.Nodes) + result.Nodes = append(result.Nodes, node) + seenNodes[nodeID] = true + } else if isDependency[nodeID] { + if idx, ok := nodeIndexes[nodeID]; ok { + node, err := buildSyntheticModelPageNode(nodeID, ref.Name, ref.TypeSlug, ref.Slug, ref.ComponentType, true) + if err != nil { + return "", err + } + result.Nodes[idx] = node + } + } + return nodeID, nil + } + addEdge := func(sourceID, targetID, ref string, dependency bool) { + if sourceID == "" || targetID == "" { + return + } + edgeID := sourceID + "->" + targetID + "|" + ref + if seenEdges[edgeID] { + return + } + result.Edges = append(result.Edges, &focusedEdge{ + Id: edgeID, + Sources: []string{sourceID}, + Targets: []string{targetID}, + Ref: ref, + Dependency: dependency, + }) + seenEdges[edgeID] = true + } + + if _, err := addModelPageNode(page, false); err != nil { + return "", err + } + + type queueItem struct { + nodeID string + depth int + } + queue := []queueItem{{nodeID: targetID}} + seenDepth := map[string]int{targetID: 0} + for len(queue) > 0 { + item := queue[0] + queue = queue[1:] + if item.depth >= maxDepth { + continue + } + currentPage := pagesByID[item.nodeID] + if currentPage == nil || currentPage.CrossRefs == nil { + continue + } + nextDepth := item.depth + 1 + for _, ref := range currentPage.CrossRefs.UsesModels { + nodeID, err := addModelRefNode(ref, false) + if err != nil { + return "", err + } + addEdge(item.nodeID, nodeID, "asyncapi-model-ref:"+ref.ComponentType+"/"+ref.Name, isDependency[item.nodeID]) + if _, ok := pagesByID[nodeID]; ok { + if depth, seen := seenDepth[nodeID]; !seen || nextDepth < depth { + seenDepth[nodeID] = nextDepth + queue = append(queue, queueItem{nodeID: nodeID, depth: nextDepth}) + } + } + } + for _, ref := range currentPage.CrossRefs.UsedByModels { + nodeID, err := addModelRefNode(ref, SchemaNodeID(ref.ComponentType, ref.Name) != targetID) + if err != nil { + return "", err + } + currentRef := "asyncapi-model-ref:" + currentPage.ComponentType + "/" + currentPage.Name + addEdge(nodeID, item.nodeID, currentRef, nodeID != targetID) + if _, ok := pagesByID[nodeID]; ok { + if depth, seen := seenDepth[nodeID]; !seen || nextDepth < depth { + seenDepth[nodeID] = nextDepth + queue = append(queue, queueItem{nodeID: nodeID, depth: nextDepth}) + } + } + } + } + + for nodeID := range seenNodes { + modelPage := pagesByID[nodeID] + if modelPage == nil || modelPage.CrossRefs == nil { + continue + } + for _, op := range modelPage.CrossRefs.UsedByOperations { + if op == nil { + continue + } + opNodeID := syntheticOperationConsumerNodeID(op) + if !seenNodes[opNodeID] { + node, err := buildSyntheticOperationConsumerNode(op) + if err != nil { + return "", err + } + result.Nodes = append(result.Nodes, node) + seenNodes[opNodeID] = true + } + addEdge(opNodeID, nodeID, syntheticOperationConsumerRef(op), true) + } + } + + if len(result.Nodes) <= 1 { + return "", nil + } + b, err := json.Marshal(result) + if err != nil { + return "", fmt.Errorf("marshaling asyncapi focused graph: %w", err) + } + return string(b), nil +} + +func buildAsyncAPIModelGraphPages(target *ModelPage, models map[string][]*ModelPage) map[string]*ModelPage { + pagesByID := make(map[string]*ModelPage) + if target != nil { + pagesByID[SchemaNodeID(target.ComponentType, target.Name)] = target + } + for _, pages := range models { + for _, page := range pages { + if page == nil { + continue + } + pagesByID[SchemaNodeID(page.ComponentType, page.Name)] = page + } + } + return pagesByID +} + +func buildSyntheticModelPageNode(nodeID, name, typeSlug, slug, componentType string, dependency bool) (json.RawMessage, error) { + parentID := "$.components." + componentType + node := v3.NewSyntheticNode(nodeID, parentID, name, "schema") + node.RenderProps = true + node.IsArray = false + node.ArrayValues = 0 + width := len(name)*10 + 120 + if width < 320 { + width = 320 + } + if width > 720 { + width = 720 + } + node.Width = width + nodeBytes, err := json.Marshal(node) + if err != nil { + return nil, fmt.Errorf("marshaling synthetic model node: %w", err) + } + attrs := map[string]any{ + "href": pppaths.ModelHTML(firstNonEmpty(typeSlug, componentType), slug), + } + if dependency { + attrs["dependency"] = true + } + nodeBytes, err = injectNodeAttrs(nodeBytes, attrs) + if err != nil { + return nil, fmt.Errorf("injecting synthetic model node attrs: %w", err) + } + return nodeBytes, nil +} + func marshalFocusedNodeJSON(node *v3.Node, href string) ([]byte, error) { nodeCopy := node.CloneShallow() nodeCopy.RenderProps = true diff --git a/printingpress/html_hydration.go b/printingpress/html_hydration.go index af69e23..146b541 100644 --- a/printingpress/html_hydration.go +++ b/printingpress/html_hydration.go @@ -165,7 +165,7 @@ func buildModelHydrationPayload(page *ppmodel.ModelPage, sourceCache *yamlSliceH } } - if page.SchemaJSON != "" { + if page.SchemaJSON != "" && !isAsyncAPIMessageModel(page) && !isAsyncAPIReplyModel(page) { payload.Model = &htmlModelAssetData{ Name: page.Name, ComponentType: page.ComponentType, @@ -179,6 +179,11 @@ func buildModelHydrationPayload(page *ppmodel.ModelPage, sourceCache *yamlSliceH SchemaRawJSON: page.SchemaRawJSON, } } + if page.AsyncAPI != nil && len(page.AsyncAPI.Content) > 0 { + payload.Attributes["pp-message-content"] = map[string]string{ + "content-json": render.MustJSON(page.AsyncAPI.Content), + } + } payload.Developer = buildDeveloperHydrationPayloadWithCache(page.Counts, page.Problems, page.Slices, ppmodel.ViolationCounts{}, 0, sourceCache) if len(payload.Attributes) == 0 { @@ -187,6 +192,14 @@ func buildModelHydrationPayload(page *ppmodel.ModelPage, sourceCache *yamlSliceH return payload } +func isAsyncAPIMessageModel(page *ppmodel.ModelPage) bool { + return page != nil && page.AsyncAPI != nil && page.AsyncAPI.Kind == "message" +} + +func isAsyncAPIReplyModel(page *ppmodel.ModelPage) bool { + return page != nil && page.AsyncAPI != nil && page.AsyncAPI.Kind == "reply" +} + func buildOperationHydrationPayload(page *ppmodel.OperationPage, sourceCache *yamlSliceHydrationCache) *htmlHydrationPayload { payload := &htmlHydrationPayload{ Attributes: make(map[string]map[string]string), @@ -206,7 +219,7 @@ func buildOperationHydrationPayload(page *ppmodel.OperationPage, sourceCache *ya "raw-yaml": page.RequestBody.RawYAML, } } - if page.RequestBody.Ref == nil && len(page.RequestBody.Content) > 0 { + if len(page.RequestBody.Content) > 0 { payload.Attributes["pp-request-body-content"] = map[string]string{ "content-json": render.MustJSON(page.RequestBody.Content), } diff --git a/printingpress/html_writer.go b/printingpress/html_writer.go index e197949..53a0036 100644 --- a/printingpress/html_writer.go +++ b/printingpress/html_writer.go @@ -92,6 +92,9 @@ func estimateHTMLProgressWork(site *ppmodel.Site) int { if site.SharedAssetBaseURL == "" { total++ } + if len(site.IncludedSpecs) > 0 { + total++ + } if site.DeveloperMode && site.Diagnostics != nil && len(site.OrphanResults) > 0 { total++ } @@ -200,6 +203,9 @@ func writeHTMLSiteDetailed(site *ppmodel.Site, outputDir, baseURL string, progre if err := os.MkdirAll(resolvedOutputDir, 0o755); err != nil { return nil, fmt.Errorf("creating output directory: %w", err) } + if err := os.RemoveAll(filepath.Join(resolvedOutputDir, pppaths.DirSpec)); err != nil { + return nil, fmt.Errorf("cleaning included specification: %w", err) + } if err := cleanGeneratedHydrationAssets(resolvedOutputDir, site.SharedAssetBaseURL != ""); err != nil { return nil, fmt.Errorf("cleaning generated hydration assets: %w", err) } @@ -210,6 +216,23 @@ func writeHTMLSiteDetailed(site *ppmodel.Site, outputDir, baseURL string, progre // renderer emits absolute references at that prefix and never writes the // shared bundle into the artifact. var staticPaths []string + if len(site.IncludedSpecs) > 0 { + for _, includedSpec := range site.IncludedSpecs { + if includedSpec == nil || len(includedSpec.Data) == 0 { + continue + } + includedPath := pppaths.IncludedSpec(includedSpec.Path) + absolutePath := filepath.Join(resolvedOutputDir, filepath.FromSlash(includedPath)) + if err := os.MkdirAll(filepath.Dir(absolutePath), 0o755); err != nil { + return nil, fmt.Errorf("creating included specification directory: %w", err) + } + if err := os.WriteFile(absolutePath, includedSpec.Data, 0o644); err != nil { + return nil, fmt.Errorf("writing included specification: %w", err) + } + staticPaths = append(staticPaths, absolutePath) + } + progressTracker.advance("including source specification") + } if site.SharedAssetBaseURL == "" { for _, dir := range pppaths.StaticDirs() { if err := os.MkdirAll(filepath.Join(resolvedOutputDir, dir), 0o755); err != nil { @@ -220,7 +243,7 @@ func writeHTMLSiteDetailed(site *ppmodel.Site, outputDir, baseURL string, progre if copyErr != nil { return nil, fmt.Errorf("copying static assets: %w", copyErr) } - staticPaths = copied + staticPaths = append(staticPaths, copied...) progressTracker.advance("copying static assets") } assetMode := resolveHTMLAssetMode(site) @@ -276,7 +299,7 @@ func writeHTMLSiteDetailed(site *ppmodel.Site, outputDir, baseURL string, progre payload: buildRootHydrationPayload(site.Root, sourceCache), } } - rootContent := render.RootPageTempl(site.Root, p.BaseURL) + rootContent := render.RootPageTempl(site.Root, templateDocBaseURL(p.AssetMode, p.BaseURL)) staticPaths, jobs, err = appendHydratedHTMLJob(resolvedOutputDir, staticPaths, jobs, assetMode, p, hydration, htmlWriteJob{ path: filepath.Join(resolvedOutputDir, pppaths.FileIndexHTML), pageTitle: title, @@ -301,7 +324,7 @@ func writeHTMLSiteDetailed(site *ppmodel.Site, outputDir, baseURL string, progre p := *params p.BaseURL = resolveBase(resolvedBaseURL, contentPageDepth(page.Href)) p.ExtraCSS = []string{pppaths.StaticAsset(pppaths.FilePrintingPressIndexCSS)} - content := render.ContentPageTempl(page, p.BaseURL) + content := render.ContentPageTempl(page, templateDocBaseURL(p.AssetMode, p.BaseURL)) jobs = append(jobs, htmlWriteJob{ path: filepath.Join(resolvedOutputDir, filepath.FromSlash(page.Href)), pageTitle: fmt.Sprintf("%s - %s", page.Title, title), @@ -317,7 +340,7 @@ func writeHTMLSiteDetailed(site *ppmodel.Site, outputDir, baseURL string, progre p := *params p.BaseURL = resolvedBaseURL p.ExtraCSS = []string{pppaths.StaticAsset(pppaths.FilePrintingPressIndexCSS)} - content := render.ContentIndexTempl(site.ContentPages, render.GuidesIndexBreadcrumb(), p.BaseURL) + content := render.ContentIndexTempl(site.ContentPages, render.GuidesIndexBreadcrumb(), templateDocBaseURL(p.AssetMode, p.BaseURL)) jobs = append(jobs, htmlWriteJob{ path: filepath.Join(resolvedOutputDir, filepath.FromSlash(pppaths.GuidesIndexHTML())), pageTitle: "Guides - " + title, @@ -334,7 +357,7 @@ func writeHTMLSiteDetailed(site *ppmodel.Site, outputDir, baseURL string, progre p.BaseURL = resolveBase(resolvedBaseURL, 1) p.ExtraCSS = []string{pppaths.StaticAsset(pppaths.FilePrintingPressOperationCSS)} highlightCodeSamplesForHTML(op) - opContent := render.OperationPageTempl(op, p.BaseURL) + opContent := render.OperationPageTempl(op, templateDocBaseURL(p.AssetMode, p.BaseURL)) pageTitle := fmt.Sprintf("%s %s - %s", op.Method, op.Path, title) path := filepath.Join(resolvedOutputDir, filepath.FromSlash(pppaths.OperationHTML(op.Slug))) staticPaths, jobs, err = appendHydratedHTMLJob(resolvedOutputDir, staticPaths, jobs, assetMode, p, htmlHydrationJob{ @@ -385,7 +408,7 @@ func writeHTMLSiteDetailed(site *ppmodel.Site, outputDir, baseURL string, progre } staticPaths = append(staticPaths, graphAssetPaths...) } - modelContent := render.ModelPageTempl(page, p.BaseURL) + modelContent := render.ModelPageTempl(page, templateDocBaseURL(p.AssetMode, p.BaseURL)) pageTitle := fmt.Sprintf("%s - %s", page.Name, title) path := filepath.Join(resolvedOutputDir, filepath.FromSlash(pppaths.ModelHTML(typeSlug, page.Slug))) activeModelSlug := page.TypeSlug + "/" + page.Slug @@ -411,7 +434,7 @@ func writeHTMLSiteDetailed(site *ppmodel.Site, outputDir, baseURL string, progre p := *params p.BaseURL = resolveBase(resolvedBaseURL, 1) p.ExtraCSS = []string{pppaths.StaticAsset(pppaths.FilePrintingPressIndexCSS)} - indexContent := render.ModelsIndexTempl(site.NavModelGroups, render.ModelsIndexBreadcrumb(), p.BaseURL) + indexContent := render.ModelsIndexTempl(site.NavModelGroups, render.ModelsIndexBreadcrumb(), templateDocBaseURL(p.AssetMode, p.BaseURL)) jobs = append(jobs, htmlWriteJob{ path: filepath.Join(resolvedOutputDir, filepath.FromSlash(pppaths.ModelsIndexHTML())), pageTitle: "Models - " + title, @@ -427,7 +450,7 @@ func writeHTMLSiteDetailed(site *ppmodel.Site, outputDir, baseURL string, progre p.BaseURL = resolveBase(resolvedBaseURL, 2) p.ExtraCSS = []string{pppaths.StaticAsset(pppaths.FilePrintingPressIndexCSS)} bc := render.ModelTypeIndexBreadcrumb(group.Name) - content := render.ModelTypeIndexTempl(group, bc, p.BaseURL) + content := render.ModelTypeIndexTempl(group, bc, templateDocBaseURL(p.AssetMode, p.BaseURL)) pageTitle := fmt.Sprintf("%s - %s", group.Name, title) path := filepath.Join(resolvedOutputDir, filepath.FromSlash(pppaths.ModelTypeIndexHTML(group.TypeSlug))) jobs = append(jobs, htmlWriteJob{ @@ -484,7 +507,7 @@ func writeHTMLSiteDetailed(site *ppmodel.Site, outputDir, baseURL string, progre p.BaseURL = resolveBase(resolvedBaseURL, 1) p.ExtraCSS = []string{pppaths.StaticAsset(pppaths.FilePrintingPressIndexCSS)} bc := render.TagIndexBreadcrumb(tag, tagParentMap) - content := render.TagIndexTempl(tag, bc, p.BaseURL) + content := render.TagIndexTempl(tag, bc, templateDocBaseURL(p.AssetMode, p.BaseURL)) pageTitle := fmt.Sprintf("%s - %s", tag.DisplayName(), title) path := filepath.Join(resolvedOutputDir, filepath.FromSlash(pppaths.TagHTML(tag.Slug))) jobs = append(jobs, htmlWriteJob{ @@ -505,7 +528,7 @@ func writeHTMLSiteDetailed(site *ppmodel.Site, outputDir, baseURL string, progre p.BaseURL = resolveBase(resolvedBaseURL, 1) p.ExtraCSS = []string{pppaths.StaticAsset(pppaths.FilePrintingPressOperationCSS)} highlightCodeSamplesForHTML(wh) - whContent := render.OperationPageTempl(wh, p.BaseURL) + whContent := render.OperationPageTempl(wh, templateDocBaseURL(p.AssetMode, p.BaseURL)) pageTitle := fmt.Sprintf("Webhook: %s %s - %s", wh.Method, wh.Path, title) path := filepath.Join(resolvedOutputDir, filepath.FromSlash(pppaths.OperationHTML(wh.Slug))) staticPaths, jobs, err = appendHydratedHTMLJob(resolvedOutputDir, staticPaths, jobs, assetMode, p, htmlHydrationJob{ @@ -759,6 +782,13 @@ func shouldEmitBaseHref(assetMode string, baseURL string) bool { return parsed.Scheme == "" && parsed.Host == "" && !strings.HasPrefix(parsed.Path, "/") } +func templateDocBaseURL(assetMode string, baseURL string) string { + if shouldEmitBaseHref(assetMode, baseURL) { + return "" + } + return baseURL +} + func staticAssetBaseURLForPage(assetMode string, baseURL string, assetBaseURL string) string { if strings.TrimSpace(assetBaseURL) != "" || shouldEmitBaseHref(assetMode, baseURL) { return assetBaseURL diff --git a/printingpress/included_spec.go b/printingpress/included_spec.go new file mode 100644 index 0000000..7a43168 --- /dev/null +++ b/printingpress/included_spec.go @@ -0,0 +1,100 @@ +// Copyright 2024-2026 Princess Beef Heavy Industries, LLC / Dave Shanley +// https://pb33f.io +// SPDX-License-Identifier: Apache-2.0 + +package printingpress + +import ( + "fmt" + "net/url" + "os" + "path/filepath" + "strings" + + "github.com/pb33f/doctor/printingpress/internal/pppaths" + ppmodel "github.com/pb33f/doctor/printingpress/model" +) + +func (pp *PrintingPress) prepareIncludedSpec(config *pressEngineConfig) error { + if config == nil || !config.IncludeSpec { + return nil + } + + specBytes := pp.source.specBytes + if len(specBytes) == 0 && strings.TrimSpace(config.SpecPath) != "" { + var err error + specBytes, err = os.ReadFile(config.SpecPath) + if err != nil { + return fmt.Errorf("%w: %v", ErrIncludedSpecUnavailable, err) + } + } + if len(specBytes) == 0 { + return ErrIncludedSpecUnavailable + } + + fileName := includedSpecFileName(config.SpecPath, config.SpecKind, config.SpecFormat) + includedPath := pppaths.IncludedSpec(fileName) + config.IncludedSpecs = []*ppmodel.IncludedSpecAsset{{Path: fileName, Data: specBytes}} + config.SpecURL = includedPath + return nil +} + +func includedSpecFileName(specPath string, kind SpecKind, format string) string { + candidate := strings.TrimSpace(specPath) + if parsed, err := url.Parse(candidate); err == nil && parsed.Path != "" { + candidate = parsed.Path + } + candidate = filepath.Base(filepath.Clean(candidate)) + if candidate != "." && candidate != string(filepath.Separator) && candidate != "" { + ext := strings.ToLower(filepath.Ext(candidate)) + if ext == ".yaml" || ext == ".yml" || ext == ".json" { + return candidate + } + } + return defaultSpecFilename(kind, format) +} + +func (pp *PrintingPress) includeReferencedSpec(target string) string { + if pp == nil || pp.engineConfig == nil || pp.site == nil || !pp.engineConfig.IncludeSpec { + return "" + } + parsed, err := url.Parse(strings.TrimSpace(target)) + if err != nil || parsed.Scheme != "" || pp.engineConfig.SpecRoot == "" { + return "" + } + + root, err := filepath.EvalSymlinks(pp.engineConfig.SpecRoot) + if err != nil { + return "" + } + localTarget := target + if !filepath.IsAbs(localTarget) { + localTarget = filepath.Join(pp.engineConfig.SpecRoot, filepath.FromSlash(localTarget)) + } + absoluteTarget, err := filepath.Abs(localTarget) + if err != nil { + return "" + } + resolvedTarget, err := filepath.EvalSymlinks(absoluteTarget) + if err != nil { + return "" + } + relativeTarget, err := filepath.Rel(root, resolvedTarget) + if err != nil || relativeTarget == ".." || strings.HasPrefix(relativeTarget, ".."+string(filepath.Separator)) { + return "" + } + + relativePath := filepath.ToSlash(relativeTarget) + includedPath := pppaths.IncludedSpec(relativePath) + for _, asset := range pp.site.IncludedSpecs { + if asset != nil && asset.Path == relativePath { + return includedPath + } + } + data, err := os.ReadFile(resolvedTarget) + if err != nil { + return "" + } + pp.site.IncludedSpecs = append(pp.site.IncludedSpecs, &ppmodel.IncludedSpecAsset{Path: relativePath, Data: data}) + return includedPath +} diff --git a/printingpress/included_spec_test.go b/printingpress/included_spec_test.go new file mode 100644 index 0000000..766542c --- /dev/null +++ b/printingpress/included_spec_test.go @@ -0,0 +1,270 @@ +// Copyright 2024-2026 Princess Beef Heavy Industries, LLC / Dave Shanley +// https://pb33f.io +// SPDX-License-Identifier: Apache-2.0 + +package printingpress + +import ( + "os" + "path/filepath" + "testing" + + ppmodel "github.com/pb33f/doctor/printingpress/model" + "github.com/pb33f/libasyncapi" + "github.com/pb33f/libopenapi" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestPrintHTMLIncludesOpenAPISpecAndSourceLinks(t *testing.T) { + specBytes := []byte(`openapi: 3.1.0 +info: + title: Included OpenAPI + version: 1.0.0 +paths: + /things: + get: + operationId: listThings + responses: + '200': + description: OK +`) + outputDir := t.TempDir() + pp, err := CreatePrintingPressFromBytes(specBytes, &PrintingPressConfig{ + BasePath: t.TempDir(), + SpecPath: "openapi.yaml", + OutputDir: outputDir, + IncludeSpec: true, + }) + require.NoError(t, err) + _, err = pp.PrintHTML() + require.NoError(t, err) + + included, err := os.ReadFile(filepath.Join(outputDir, "spec", "openapi.yaml")) + require.NoError(t, err) + assert.Equal(t, specBytes, included) + + operationHTML, err := os.ReadFile(filepath.Join(outputDir, "operations", "list-things.html")) + require.NoError(t, err) + assert.Contains(t, string(operationHTML), `class="pp-ref-link pp-source-link" href="spec/openapi.yaml#L`) + + rootHTML, err := os.ReadFile(filepath.Join(outputDir, "index.html")) + require.NoError(t, err) + assert.Contains(t, string(rootHTML), `class="pp-ref-link pp-source-link" href="spec/openapi.yaml"`) +} + +func TestPrintHTMLIncludesAsyncAPISpecAndNestedModelLink(t *testing.T) { + specBytes := streetlightsAsyncAPISpec() + outputDir := t.TempDir() + pp, err := CreatePrintingPressFromBytes(specBytes, &PrintingPressConfig{ + BasePath: t.TempDir(), + SpecPath: "streetlights-asyncapi.yaml", + OutputDir: outputDir, + AssetMode: HTMLAssetModeServed, + IncludeSpec: true, + }) + require.NoError(t, err) + _, err = pp.PrintHTML() + require.NoError(t, err) + + included, err := os.ReadFile(filepath.Join(outputDir, "spec", "streetlights-asyncapi.yaml")) + require.NoError(t, err) + assert.Equal(t, specBytes, included) + + modelHTML, err := os.ReadFile(filepath.Join(outputDir, "models", "parameters", "streetlight-id.html")) + require.NoError(t, err) + assert.Contains(t, string(modelHTML), `class="pp-ref-link pp-source-link" href="../../spec/streetlights-asyncapi.yaml#L`) +} + +func TestPrintHTMLDisabledRemovesStaleIncludedSpec(t *testing.T) { + outputDir := t.TempDir() + staleDir := filepath.Join(outputDir, "spec") + require.NoError(t, os.MkdirAll(staleDir, 0o755)) + require.NoError(t, os.WriteFile(filepath.Join(staleDir, "stale.yaml"), []byte("stale"), 0o644)) + + pp, err := CreatePrintingPressFromBytes([]byte(`openapi: 3.1.0 +info: + title: Disabled + version: 1.0.0 +paths: {} +`), &PrintingPressConfig{ + BasePath: t.TempDir(), + SpecPath: "openapi.yaml", + OutputDir: outputDir, + }) + require.NoError(t, err) + _, err = pp.PrintHTML() + require.NoError(t, err) + + _, err = os.Stat(staleDir) + assert.ErrorIs(t, err, os.ErrNotExist) + rootHTML, err := os.ReadFile(filepath.Join(outputDir, "index.html")) + require.NoError(t, err) + assert.NotContains(t, string(rootHTML), "pp-source-link") +} + +func TestPrintHTMLIncludesContainedReferencedSpecFiles(t *testing.T) { + root := t.TempDir() + rootPath := filepath.Join(root, "openapi.yaml") + schemaPath := filepath.Join(root, "schemas", "pet.yaml") + pathItemPath := filepath.Join(root, "paths", "pets.yaml") + require.NoError(t, os.MkdirAll(filepath.Dir(schemaPath), 0o755)) + require.NoError(t, os.MkdirAll(filepath.Dir(pathItemPath), 0o755)) + schemaBytes := []byte("type: object\nproperties:\n name:\n type: string\n") + pathItemBytes := []byte("get:\n operationId: listPets\n responses:\n '200':\n description: OK\n") + require.NoError(t, os.WriteFile(schemaPath, schemaBytes, 0o644)) + require.NoError(t, os.WriteFile(pathItemPath, pathItemBytes, 0o644)) + specBytes := []byte(`openapi: 3.1.0 +info: + title: Exploded + version: 1.0.0 +paths: + /pets: + $ref: './paths/pets.yaml' +components: + schemas: + Pet: + $ref: './schemas/pet.yaml' +`) + require.NoError(t, os.WriteFile(rootPath, specBytes, 0o644)) + outputDir := t.TempDir() + + pp, err := CreatePrintingPressFromBytes(specBytes, &PrintingPressConfig{ + BasePath: root, + SpecPath: rootPath, + OutputDir: outputDir, + AssetMode: HTMLAssetModeServed, + IncludeSpec: true, + }) + require.NoError(t, err) + _, err = pp.PrintHTML() + require.NoError(t, err) + + included, err := os.ReadFile(filepath.Join(outputDir, "spec", "schemas", "pet.yaml")) + require.NoError(t, err) + assert.Equal(t, schemaBytes, included) + includedPathItem, err := os.ReadFile(filepath.Join(outputDir, "spec", "paths", "pets.yaml")) + require.NoError(t, err) + assert.Equal(t, pathItemBytes, includedPathItem) + operationHTML, err := os.ReadFile(filepath.Join(outputDir, "operations", "list-pets.html")) + require.NoError(t, err) + assert.Contains(t, string(operationHTML), `href="../spec/paths/pets.yaml#L`) +} + +func TestIncludeReferencedSpecRejectsSymlinkOutsideSpecRoot(t *testing.T) { + root := t.TempDir() + outside := filepath.Join(t.TempDir(), "secret.yaml") + require.NoError(t, os.WriteFile(outside, []byte("secret"), 0o644)) + link := filepath.Join(root, "linked.yaml") + require.NoError(t, os.Symlink(outside, link)) + + pp := &PrintingPress{ + engineConfig: &pressEngineConfig{IncludeSpec: true, SpecRoot: root}, + site: &ppmodel.Site{}, + } + assert.Empty(t, pp.includeReferencedSpec(link)) + assert.Empty(t, pp.site.IncludedSpecs) +} + +func TestPrintHTMLIncludesSpecForModelConstructors(t *testing.T) { + openAPIBytes := []byte(`openapi: 3.1.0 +info: {title: Model OpenAPI, version: 1.0.0} +paths: {} +components: + schemas: + Thing: {type: object, properties: {id: {type: string}}} +`) + asyncAPIBytes := []byte(`asyncapi: 3.0.0 +info: {title: Model AsyncAPI, version: 1.0.0} +channels: {} +operations: {} +components: + schemas: + Thing: {type: object, properties: {id: {type: string}}} +`) + + openAPIDoc, err := libopenapi.NewDocument(openAPIBytes) + require.NoError(t, err) + v3Model, err := openAPIDoc.BuildV3Model() + require.NoError(t, err) + asyncDoc, err := libasyncapi.NewDocument(asyncAPIBytes) + require.NoError(t, err) + + tests := []struct { + name string + specData []byte + create func(*PrintingPressConfig) (*PrintingPress, error) + }{ + {name: "v3 model", specData: openAPIBytes, create: func(config *PrintingPressConfig) (*PrintingPress, error) { + return CreatePrintingPressFromV3Model(v3Model, config) + }}, + {name: "doctor model", specData: openAPIBytes, create: func(config *PrintingPressConfig) (*PrintingPress, error) { + return CreatePrintingPressFromDrModel(buildDrDocument(v3Model), config) + }}, + {name: "asyncapi document", specData: asyncAPIBytes, create: func(config *PrintingPressConfig) (*PrintingPress, error) { + return CreatePrintingPressFromAsyncAPIDocument(asyncDoc, config) + }}, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + root := t.TempDir() + require.NoError(t, os.WriteFile(filepath.Join(root, "contract.yaml"), tt.specData, 0o600)) + outputDir := t.TempDir() + pp, err := tt.create(&PrintingPressConfig{ + BasePath: root, + SpecPath: "contract.yaml", + OutputDir: outputDir, + AssetMode: HTMLAssetModeServed, + IncludeSpec: true, + }) + require.NoError(t, err) + _, err = pp.PrintHTML() + require.NoError(t, err) + + included, err := os.ReadFile(filepath.Join(outputDir, "spec", "contract.yaml")) + require.NoError(t, err) + assert.Equal(t, tt.specData, included) + modelHTML, err := os.ReadFile(filepath.Join(outputDir, "models", "schemas", "thing.html")) + require.NoError(t, err) + assert.Contains(t, string(modelHTML), `href="../../spec/contract.yaml`) + }) + } +} + +func TestPrintHTMLIncludesExternalAsyncAPISchemaSource(t *testing.T) { + root := t.TempDir() + externalDir := filepath.Join(root, "schemas") + require.NoError(t, os.MkdirAll(externalDir, 0o755)) + externalBytes := []byte("type: object\nproperties:\n id: {type: string}\n") + require.NoError(t, os.WriteFile(filepath.Join(externalDir, "external.yaml"), externalBytes, 0o600)) + rootBytes := []byte(`asyncapi: 3.0.0 +info: {title: External AsyncAPI, version: 1.0.0} +channels: {} +operations: {} +components: + schemas: + External: + $ref: './schemas/external.yaml' +`) + rootPath := filepath.Join(root, "asyncapi.yaml") + require.NoError(t, os.WriteFile(rootPath, rootBytes, 0o600)) + outputDir := t.TempDir() + pp, err := CreatePrintingPressFromBytes(rootBytes, &PrintingPressConfig{ + BasePath: root, + SpecPath: rootPath, + OutputDir: outputDir, + AssetMode: HTMLAssetModeServed, + IncludeSpec: true, + }) + require.NoError(t, err) + _, err = pp.PrintHTML() + require.NoError(t, err) + + included, err := os.ReadFile(filepath.Join(outputDir, "spec", "schemas", "external.yaml")) + require.NoError(t, err) + assert.Equal(t, externalBytes, included) + modelHTML, err := os.ReadFile(filepath.Join(outputDir, "models", "schemas", "external.html")) + require.NoError(t, err) + assert.Contains(t, string(modelHTML), `href="../../spec/schemas/external.yaml#L1"`) +} diff --git a/printingpress/internal/pppaths/constants.go b/printingpress/internal/pppaths/constants.go index 4de13d0..8d827d5 100644 --- a/printingpress/internal/pppaths/constants.go +++ b/printingpress/internal/pppaths/constants.go @@ -4,7 +4,11 @@ package pppaths -import "path" +import ( + "path" + "path/filepath" + "strings" +) const ( ExtHTML = ".html" @@ -28,6 +32,7 @@ const ( DirServices = "services" DirVersions = "versions" DirSpecs = "specs" + DirSpec = "spec" // DirData is the per-artifact namespace for hydration JSON. Everything // under DirData contains rendered spec content for the document and is @@ -159,6 +164,12 @@ func ContentAsset(pageSlug, assetName string) string { return path.Join(DirAssets, "docs", path.Clean(pageSlug), assetName) } +// IncludedSpec returns the generated path for an included source specification. +func IncludedSpec(fileName string) string { + cleaned := strings.TrimPrefix(path.Clean("/"+filepath.ToSlash(fileName)), "/") + return path.Join(DirSpec, cleaned) +} + func OperationPageDataBase(slug string) string { return path.Join(PageDataDir(), DirOperations, slug) } diff --git a/printingpress/json_artifacts.go b/printingpress/json_artifacts.go index 11577dc..3104a43 100644 --- a/printingpress/json_artifacts.go +++ b/printingpress/json_artifacts.go @@ -19,6 +19,8 @@ const ( // JSONBundle is the top-level public JSON entrypoint written by PrintJSONArtifacts. type JSONBundle struct { Format string `json:"format"` + SpecKind ppmodel.SpecKindValue `json:"specKind,omitempty"` + SpecVersion string `json:"specVersion,omitempty"` Root *JSONRootPage `json:"root,omitempty"` Source *ppmodel.SourceRef `json:"source,omitempty"` Nav []*ppmodel.NavTag `json:"nav,omitempty"` @@ -35,6 +37,8 @@ type JSONBundle struct { // JSONRootPage is the root page content embedded in bundle.json. type JSONRootPage struct { + SpecKind ppmodel.SpecKindValue `json:"specKind,omitempty"` + SpecVersion string `json:"specVersion,omitempty"` Title string `json:"title,omitempty"` Description string `json:"description,omitempty"` DescHTML string `json:"descHtml,omitempty"` @@ -104,11 +108,12 @@ type SiteManifest = ArtifactManifest // JSONArtifactEntry describes a single emitted JSON artifact. type JSONArtifactEntry struct { - Kind string `json:"kind"` - Path string `json:"path"` - Name string `json:"name,omitempty"` - Slug string `json:"slug,omitempty"` - TypeSlug string `json:"typeSlug,omitempty"` + Kind string `json:"kind"` + SpecKind ppmodel.SpecKindValue `json:"specKind,omitempty"` + Path string `json:"path"` + Name string `json:"name,omitempty"` + Slug string `json:"slug,omitempty"` + TypeSlug string `json:"typeSlug,omitempty"` } // ManifestEntry is kept as a compatibility alias for JSONArtifactEntry. @@ -121,6 +126,8 @@ func buildJSONBundle(site *ppmodel.Site) *JSONBundle { bundle := &JSONBundle{ Format: jsonBundleFormat, + SpecKind: site.SpecKind, + SpecVersion: site.SpecVersion, Root: buildJSONRootPage(site.Root), Source: site.Source, Nav: site.NavTags, @@ -143,6 +150,8 @@ func buildJSONRootPage(root *ppmodel.RootPage) *JSONRootPage { } return &JSONRootPage{ + SpecKind: root.SpecKind, + SpecVersion: root.SpecVersion, Title: root.Title, Description: root.Description, DescHTML: root.DescHTML, @@ -260,10 +269,11 @@ func buildOperationArtifactEntries(operations []*ppmodel.OperationPage, kind str continue } result = append(result, JSONArtifactEntry{ - Kind: kind, - Path: pppaths.OperationJSON(operation.Slug), - Name: operation.Method + " " + operation.Path, - Slug: operation.Slug, + Kind: kind, + SpecKind: operation.SpecKind, + Path: pppaths.OperationJSON(operation.Slug), + Name: operation.Method + " " + operation.Path, + Slug: operation.Slug, }) } return result @@ -290,6 +300,7 @@ func buildModelArtifactEntries(models map[string][]*ppmodel.ModelPage) map[strin } entries = append(entries, JSONArtifactEntry{ Kind: "model", + SpecKind: page.SpecKind, Path: pppaths.ModelJSON(typeSlug, page.Slug), Name: page.Name, Slug: page.Slug, @@ -302,16 +313,20 @@ func buildModelArtifactEntries(models map[string][]*ppmodel.ModelPage) map[strin } func buildArtifactManifest(site *ppmodel.Site) *ArtifactManifest { + specKind := ppmodel.SpecKindValueUnknown + if site != nil { + specKind = site.SpecKind + } artifacts := []JSONArtifactEntry{ - {Kind: "bundle", Path: pppaths.FileBundleJSON, Name: "JSON bundle"}, + {Kind: "bundle", SpecKind: specKind, Path: pppaths.FileBundleJSON, Name: "JSON bundle"}, } if site != nil && site.Root != nil { - artifacts = append(artifacts, JSONArtifactEntry{Kind: "root", Path: pppaths.FileIndexJSON, Name: "Root page"}) + artifacts = append(artifacts, JSONArtifactEntry{Kind: "root", SpecKind: specKind, Path: pppaths.FileIndexJSON, Name: "Root page"}) } if site != nil && site.NavTags != nil { - artifacts = append(artifacts, JSONArtifactEntry{Kind: "nav", Path: pppaths.FileNavJSON, Name: "Navigation"}) + artifacts = append(artifacts, JSONArtifactEntry{Kind: "nav", SpecKind: specKind, Path: pppaths.FileNavJSON, Name: "Navigation"}) } - artifacts = append(artifacts, JSONArtifactEntry{Kind: "manifest", Path: pppaths.FileManifestJSON, Name: "JSON artifact manifest"}) + artifacts = append(artifacts, JSONArtifactEntry{Kind: "manifest", SpecKind: specKind, Path: pppaths.FileManifestJSON, Name: "JSON artifact manifest"}) artifacts = append(artifacts, buildOperationArtifactEntries(site.Operations, "operation")...) artifacts = append(artifacts, buildOperationArtifactEntries(site.Webhooks, "webhook")...) diff --git a/printingpress/model/catalog.go b/printingpress/model/catalog.go index ac620e1..349875e 100644 --- a/printingpress/model/catalog.go +++ b/printingpress/model/catalog.go @@ -66,6 +66,8 @@ type CatalogVersion struct { type CatalogSpecEntry struct { ID string `json:"id"` Slug string `json:"slug"` + SpecKind SpecKindValue `json:"specKind,omitempty"` + SpecKindLabel string `json:"specKindLabel,omitempty"` Title string `json:"title,omitempty"` Summary string `json:"summary,omitempty"` Contact *ContactInfo `json:"contact,omitempty"` diff --git a/printingpress/model/models.go b/printingpress/model/models.go index 5164adf..ca5a30b 100644 --- a/printingpress/model/models.go +++ b/printingpress/model/models.go @@ -18,6 +18,8 @@ import ( // PrintHTML and PrintLLM, so caller mutations affect subsequent print output. type Site struct { Root *RootPage + SpecKind SpecKindValue `json:"specKind,omitempty"` + SpecVersion string `json:"specVersion,omitempty"` Operations []*OperationPage ContentPages []*ContentPage Models map[string][]*ModelPage // keyed by component type slug (e.g. "schemas") @@ -45,9 +47,16 @@ type Site struct { LLM LLMOutputConfig `json:"-"` // resolved LLM writer policy Footer *FooterConfig `json:"footer,omitempty"` Source *SourceRef `json:"source,omitempty"` + IncludedSpecs []*IncludedSpecAsset `json:"-"` HeaderContext *SiteHeaderContext `json:"headerContext,omitempty"` } +// IncludedSpecAsset is a source specification file emitted with HTML docs. +type IncludedSpecAsset struct { + Path string + Data []byte +} + // ContentPage is a convention-discovered Markdown page rendered alongside the // generated API reference. type ContentPage struct { @@ -130,6 +139,8 @@ type PageProblem struct { type DiagnosticsPage struct { Title string `json:"title"` Slug string `json:"slug"` + SpecKind SpecKindValue `json:"specKind,omitempty"` + SpecLabel string `json:"specLabel,omitempty"` SiteCounts ViolationCounts `json:"siteCounts"` Problems []*PageProblem `json:"problems"` OrphanCount int `json:"orphanCount"` @@ -156,6 +167,8 @@ type SchemaRegistryEntry struct { // RootPage is the landing page data for the generated documentation. type RootPage struct { + SpecKind SpecKindValue `json:"specKind,omitempty"` + SpecVersion string `json:"specVersion,omitempty"` Title string Description string DescHTML string @@ -178,9 +191,10 @@ type RootPage struct { // SourceRef points back to the originating specification file for a rendered page or object. type SourceRef struct { - Path string `json:"path,omitempty"` - Line int `json:"line,omitempty"` - Href string `json:"href,omitempty"` + Path string `json:"path,omitempty"` + Line int `json:"line,omitempty"` + Href string `json:"href,omitempty"` + LinkEnabled bool `json:"-"` } // ContactInfo holds API contact metadata. @@ -220,6 +234,8 @@ type ExternalDocInfo struct { // NavTag represents a tag node in the hierarchical navigation tree. type NavTag struct { Name string `json:"name"` + Protocol string `json:"protocol,omitempty"` + Protocols []string `json:"protocols,omitempty"` Summary string `json:"summary"` Slug string `json:"slug"` Description string `json:"description,omitempty"` @@ -240,12 +256,14 @@ func (t *NavTag) DisplayName() string { // NavOperation is a lightweight reference to an operation for navigation. type NavOperation struct { + SpecKind SpecKindValue `json:"specKind,omitempty"` Method string `json:"method"` Path string `json:"path"` OperationID string `json:"operationId"` Summary string `json:"summary"` Slug string `json:"slug"` Deprecated bool `json:"deprecated"` + Protocols []string `json:"protocols,omitempty"` Counts *ViolationCounts `json:"counts,omitempty"` } @@ -267,15 +285,20 @@ func (g *NavModelGroup) CardGridStyle() string { // NavModel is a lightweight reference to a model for navigation. type NavModel struct { + SpecKind SpecKindValue `json:"specKind,omitempty"` Name string `json:"name"` Slug string `json:"slug"` TypeSlug string `json:"typeSlug"` Description string `json:"description,omitempty"` + Protocol string `json:"protocol,omitempty"` + Protocols []string `json:"protocols,omitempty"` Counts *ViolationCounts `json:"counts,omitempty"` } // OperationPage is the full data for rendering an operation detail page. type OperationPage struct { + SpecKind SpecKindValue `json:"specKind,omitempty"` + SpecVersion string `json:"specVersion,omitempty"` Method string Path string OperationID string @@ -317,6 +340,7 @@ type OperationPage struct { Counts ViolationCounts Problems []*PageProblem Slices map[string]*YamlSlice + AsyncAPI *AsyncAPIOperationInfo `json:"asyncapi,omitempty"` } // OperationCrossRefs holds cross-reference information for an operation. @@ -324,6 +348,74 @@ type OperationCrossRefs struct { ReferencesModels []*ComponentRef `json:"referencesModels,omitempty"` // components this operation uses } +// AsyncAPIOperationInfo holds AsyncAPI-specific operation context. +type AsyncAPIOperationInfo struct { + Action string `json:"action,omitempty"` + Channel *AsyncAPIChannelRef `json:"channel,omitempty"` + Messages []*AsyncAPIMessageRef `json:"messages,omitempty"` + Reply *AsyncAPIReplyInfo `json:"reply,omitempty"` + Bindings []string `json:"bindings,omitempty"` + Traits []string `json:"traits,omitempty"` + Extensions []*ExtensionEntry `json:"extensions,omitempty"` +} + +// AsyncAPIChannelRef identifies an AsyncAPI channel rendered or referenced by a page. +type AsyncAPIChannelRef struct { + Name string `json:"name,omitempty"` + Address string `json:"address,omitempty"` + Slug string `json:"slug,omitempty"` + Href string `json:"href,omitempty"` +} + +// AsyncAPIMessageRef identifies an AsyncAPI message rendered or referenced by a page. +type AsyncAPIMessageRef struct { + Name string `json:"name,omitempty"` + Title string `json:"title,omitempty"` + Summary string `json:"summary,omitempty"` + Slug string `json:"slug,omitempty"` + Href string `json:"href,omitempty"` + ContentType string `json:"contentType,omitempty"` +} + +// AsyncAPIReplyInfo holds AsyncAPI operation reply context. +type AsyncAPIReplyInfo struct { + Ref *ComponentLink `json:"ref,omitempty"` + Channel *AsyncAPIChannelRef `json:"channel,omitempty"` + Messages []*AsyncAPIMessageRef `json:"messages,omitempty"` + Address string `json:"address,omitempty"` +} + +// AsyncAPIModelInfo holds AsyncAPI-specific metadata for model pages. +type AsyncAPIModelInfo struct { + Kind string `json:"kind,omitempty"` + Address string `json:"address,omitempty"` + Protocol string `json:"protocol,omitempty"` + ContentType string `json:"contentType,omitempty"` + Messages []*AsyncAPIMessageRef `json:"messages,omitempty"` + Channel *AsyncAPIChannelRef `json:"channel,omitempty"` + Content []*MediaTypeInfo `json:"content,omitempty"` + Schemas []*AsyncAPISchemaSurface `json:"schemas,omitempty"` + Bindings []string `json:"bindings,omitempty"` + Examples []*AsyncAPIMessageExample `json:"examples,omitempty"` +} + +// AsyncAPISchemaSurface describes a payload or headers schema rendered on an AsyncAPI page. +type AsyncAPISchemaSurface struct { + Name string `json:"name,omitempty"` + Role string `json:"role,omitempty"` + SchemaJSON string `json:"schemaJson,omitempty"` + MockJSON string `json:"mockJson,omitempty"` + Ref *ComponentLink `json:"ref,omitempty"` +} + +// AsyncAPIMessageExample holds AsyncAPI message-example payload/header data. +type AsyncAPIMessageExample struct { + Name string `json:"name,omitempty"` + Summary string `json:"summary,omitempty"` + Payload string `json:"payload,omitempty"` + Headers string `json:"headers,omitempty"` +} + // ParameterInfo holds operation parameter data. type ParameterInfo struct { Name string `json:"name"` @@ -350,6 +442,7 @@ type RequestBodyInfo struct { Required bool `json:"required,omitempty"` Content []*MediaTypeInfo `json:"content,omitempty"` Ref *ComponentLink `json:"ref,omitempty"` + Refs []*ComponentLink `json:"refs,omitempty"` RawJSON string `json:"rawJson,omitempty"` RawYAML string `json:"rawYaml,omitempty"` SourceLine int `json:"sourceLine,omitempty"` @@ -364,6 +457,10 @@ type MediaTypeInfo struct { MediaType string `json:"mediaType"` SchemaJSON string `json:"schemaJson"` SchemaHighlightedHTML string `json:"-"` // chroma output, templ only + MermaidDiagram string `json:"mermaidDiagram,omitempty"` + SchemaFormat string `json:"schemaFormat,omitempty"` + RawSchemaJSON string `json:"rawSchemaJson,omitempty"` + RawSchemaYAML string `json:"rawSchemaYaml,omitempty"` MockJSON string `json:"mockJson,omitempty"` MockYAML string `json:"mockYaml,omitempty"` MockXML string `json:"mockXml,omitempty"` @@ -436,6 +533,8 @@ type HeaderInfo struct { // ModelPage is the full data for rendering a component detail page. type ModelPage struct { + SpecKind SpecKindValue `json:"specKind,omitempty"` + SpecVersion string `json:"specVersion,omitempty"` Name string ComponentType string // "schemas", "responses", "parameters", etc. TypeSlug string // URL path segment for the component type @@ -470,6 +569,7 @@ type ModelPage struct { Counts ViolationCounts Problems []*PageProblem Slices map[string]*YamlSlice + AsyncAPI *AsyncAPIModelInfo `json:"asyncapi,omitempty"` } // ModelCrossRefs holds cross-reference information for a model. @@ -481,9 +581,10 @@ type ModelCrossRefs struct { // OperationRef is a lightweight reference to an operation from a cross-ref. type OperationRef struct { - Method string `json:"method"` - Path string `json:"path"` - Slug string `json:"slug"` + Method string `json:"method"` + Path string `json:"path"` + Slug string `json:"slug"` + OperationID string `json:"operationId,omitempty"` } // ComponentRef is a lightweight reference to a component from a cross-ref. diff --git a/printingpress/model/spec_kind.go b/printingpress/model/spec_kind.go new file mode 100644 index 0000000..116c9d7 --- /dev/null +++ b/printingpress/model/spec_kind.go @@ -0,0 +1,49 @@ +// Copyright 2024-2026 Princess Beef Heavy Industries, LLC / Dave Shanley +// https://pb33f.io +// SPDX-License-Identifier: Apache-2.0 + +package model + +// SpecKindValue identifies the specification family rendered by Printing Press. +type SpecKindValue string + +const ( + // SpecKindValueUnknown represents a source whose specification family is not known. + SpecKindValueUnknown SpecKindValue = "" + // SpecKindValueOpenAPI identifies an OpenAPI or Swagger source document. + SpecKindValueOpenAPI SpecKindValue = "openapi" + // SpecKindValueAsyncAPI identifies an AsyncAPI source document. + SpecKindValueAsyncAPI SpecKindValue = "asyncapi" +) + +// MachineValue returns the stable lowercase value used in JSON and persisted state. +func (k SpecKindValue) MachineValue() string { + return string(k) +} + +// DisplayLabel returns the human-facing label for a specification kind. +func (k SpecKindValue) DisplayLabel() string { + switch k { + case SpecKindValueOpenAPI: + return "OpenAPI" + case SpecKindValueAsyncAPI: + return "AsyncAPI" + default: + return "" + } +} + +// IsOpenAPI reports whether k identifies an OpenAPI or Swagger source. +func (k SpecKindValue) IsOpenAPI() bool { + return k == SpecKindValueOpenAPI +} + +// IsAsyncAPI reports whether k identifies an AsyncAPI source. +func (k SpecKindValue) IsAsyncAPI() bool { + return k == SpecKindValueAsyncAPI +} + +// IsKnown reports whether k is one of the supported specification kinds. +func (k SpecKindValue) IsKnown() bool { + return k == SpecKindValueOpenAPI || k == SpecKindValueAsyncAPI +} diff --git a/printingpress/press.go b/printingpress/press.go index 6b66402..562696f 100644 --- a/printingpress/press.go +++ b/printingpress/press.go @@ -20,6 +20,7 @@ import ( . "github.com/pb33f/doctor/printingpress/model" "github.com/pb33f/doctor/printingpress/render" slugpkg "github.com/pb33f/doctor/printingpress/slug" + "github.com/pb33f/libasyncapi" "github.com/pb33f/libopenapi/bundler" "github.com/pb33f/libopenapi/renderer" "golang.org/x/sync/errgroup" @@ -27,6 +28,9 @@ import ( type pressEngineConfig struct { DrDoc *doctormodel.DrDocument + AsyncDoc libasyncapi.Document + SpecKind SpecKind + SpecVersion string Origins bundler.ComponentOriginMap OutputDir string BaseURL string @@ -51,6 +55,8 @@ type pressEngineConfig struct { DeveloperMode bool DocsExpiresAt string ArchiveExportURL string + IncludeSpec bool + IncludedSpecs []*IncludedSpecAsset LintResults []*v3.RuleFunctionResult OrphanResults []*v3.RuleFunctionResult Footer *FooterConfig @@ -82,30 +88,31 @@ type resolvedSyntheticTagFallbackConfig struct { MinOperations int } -// PrintingPress generates documentation from an OpenAPI source. +// PrintingPress generates documentation from an OpenAPI or AsyncAPI source. type PrintingPress struct { - mu sync.Mutex - config *PrintingPressConfig - source pressSource - engineConfig *pressEngineConfig - slugs *slugpkg.SlugRegistry - site *Site - mockGen *renderer.MockGenerator - mockGenYAML *renderer.MockGenerator - mockGenXML *renderer.MockGenerator - rawArtifacts *rawArtifactCache - schemaArtifacts *schemaArtifactCache - warnings []*BuildWarning - modelIndex map[string]*ModelPage // keyed by "typeSlug/name" for O(1) ref resolution - devOperationPages []*developerOperationPage - devModelPages []*developerModelPage - devPageIndex *developerPageIndex - syntheticTags resolvedSyntheticTagFallbackConfig - modelBuilt bool - modelBuildDuration time.Duration - resolvedOutputDir string - activity *activityManager - currentJob *activityJob + mu sync.Mutex + config *PrintingPressConfig + source pressSource + engineConfig *pressEngineConfig + slugs *slugpkg.SlugRegistry + site *Site + mockGen *renderer.MockGenerator + mockGenYAML *renderer.MockGenerator + mockGenXML *renderer.MockGenerator + rawArtifacts *rawArtifactCache + schemaArtifacts *schemaArtifactCache + asyncMediaArtifacts map[string]*MediaTypeInfo + warnings []*BuildWarning + modelIndex map[string]*ModelPage // keyed by "typeSlug/name" for O(1) ref resolution + devOperationPages []*developerOperationPage + devModelPages []*developerModelPage + devPageIndex *developerPageIndex + syntheticTags resolvedSyntheticTagFallbackConfig + modelBuilt bool + modelBuildDuration time.Duration + resolvedOutputDir string + activity *activityManager + currentJob *activityJob } func newPressEngine(config *pressEngineConfig) *PrintingPress { @@ -161,7 +168,10 @@ func (pp *PrintingPress) initEngine(config *pressEngineConfig) { pp.mockGenXML = mgXML pp.rawArtifacts = newRawArtifactCache() pp.schemaArtifacts = newSchemaArtifactCache() + pp.asyncMediaArtifacts = make(map[string]*MediaTypeInfo) pp.site = &Site{ + SpecKind: config.SpecKind, + SpecVersion: config.SpecVersion, Models: make(map[string][]*ModelPage), Embedded: config.Embedded, SharedAssetBaseURL: config.SharedAssetBaseURL, @@ -170,6 +180,7 @@ func (pp *PrintingPress) initEngine(config *pressEngineConfig) { DeveloperMode: config.DeveloperMode, DocsExpiresAt: config.DocsExpiresAt, ArchiveExportURL: config.ArchiveExportURL, + IncludedSpecs: append([]*IncludedSpecAsset(nil), config.IncludedSpecs...), } pp.devOperationPages = nil pp.devModelPages = nil @@ -198,8 +209,9 @@ func buildRootSourceRef(config *pressEngineConfig) *SourceRef { return nil } return &SourceRef{ - Path: path, - Href: href, + Path: path, + Href: href, + LinkEnabled: config.IncludeSpec, } } @@ -232,6 +244,10 @@ func resolveSyntheticTagFallbackConfig(config *pressEngineConfig) resolvedSynthe func (pp *PrintingPress) pressSite() (*Site, error) { ctx := context.Background() + if pp.engineConfig != nil && pp.engineConfig.SpecKind.IsAsyncAPI() { + return pp.pressAsyncAPISite(ctx) + } + if pp.engineConfig == nil || pp.engineConfig.DrDoc == nil { return nil, ErrNoDrDocument } @@ -360,6 +376,80 @@ func (pp *PrintingPress) pressSite() (*Site, error) { } } + return pp.finalizeSite() +} + +func (pp *PrintingPress) pressAsyncAPISite(ctx context.Context) (*Site, error) { + if pp.engineConfig == nil || pp.engineConfig.AsyncDoc == nil { + return nil, ErrNoAsyncAPIDocument + } + doc := pp.engineConfig.AsyncDoc.Model() + if doc == nil { + return nil, ErrNoAsyncAPIDocument + } + if pp.currentJob != nil { + pp.currentJob.snapshot("collecting AsyncAPI document model", 0, 1, 0) + } + pp.visitAsyncAPIDocument(ctx, doc) + if pp.currentJob != nil { + pp.currentJob.snapshot("AsyncAPI document model collected", 1, 1, 0) + } + pp.buildCrossRefs() + pp.encodeAsyncAPIModelCrossRefs() + if !pp.engineConfig.NoExplorer { + if err := pp.buildAsyncAPIDependencyGraphs(); err != nil { + return nil, err + } + } + pp.collectAsyncAPIDeveloperDiagnostics() + return pp.finalizeSite() +} + +func (pp *PrintingPress) encodeAsyncAPIModelCrossRefs() { + if pp == nil || pp.site == nil { + return + } + for _, pages := range pp.site.Models { + for _, page := range pages { + if page == nil || page.CrossRefs == nil { + continue + } + if len(page.CrossRefs.UsedByOperations) == 0 && + len(page.CrossRefs.UsedByModels) == 0 && + len(page.CrossRefs.UsesModels) == 0 { + continue + } + page.CrossRefsJSON = render.MustJSON(page.CrossRefs) + applyModelCrossRefHints(page) + } + } +} + +func (pp *PrintingPress) buildAsyncAPIDependencyGraphs() error { + if pp == nil || pp.site == nil { + return nil + } + modelGraphPages := buildAsyncAPIModelGraphPages(nil, pp.site.Models) + for _, pages := range pp.site.Models { + for _, page := range pages { + if page == nil || page.CrossRefs == nil { + continue + } + graphJSON, err := BuildAsyncAPIFocusedModelGraph(page, modelGraphPages, defaultMaxDepth) + if err != nil { + return err + } + if graphJSON == "" { + continue + } + page.GraphJSON = graphJSON + page.GraphNodeID = SchemaNodeID(page.ComponentType, page.Name) + } + } + return nil +} + +func (pp *PrintingPress) finalizeSite() (*Site, error) { for _, warning := range pp.engineConfig.BuildWarnings { if warning == nil { continue @@ -390,7 +480,6 @@ func (pp *PrintingPress) pressSite() (*Site, error) { pp.site.NoMermaid = pp.engineConfig.NoMermaid pp.site.Lite = pp.engineConfig.NoMermaid && pp.engineConfig.NoExplorer pp.collectContentPages() - return pp.site, nil } diff --git a/printingpress/press_test.go b/printingpress/press_test.go index eb22d29..bb3e1f8 100644 --- a/printingpress/press_test.go +++ b/printingpress/press_test.go @@ -239,6 +239,35 @@ func TestPrintingPressStylesheet_InsetsBlockquoteChildren(t *testing.T) { assert.Contains(t, css, `padding-left: 0;`) } +func TestPrintingPressStylesheet_UsesSharedSectionHeadingSize(t *testing.T) { + stylesheet, err := os.ReadFile(filepath.Join("static", "printing-press.css")) + require.NoError(t, err) + + css := string(stylesheet) + assert.Contains(t, css, `--pp-section-heading-size: var(--h3-size);`) + for _, selector := range []string{ + `.pp-asyncapi-operation > h3`, + `.pp-dotted-section > h3`, + `.pp-details-summary h2,`, + `.pp-request-body > h3`, + `.pp-operations-overview > h2,`, + `.pp-operation > h2`, + `.pp-common-headers h3`, + `.pp-servers > h2,`, + } { + assert.Regexp(t, + regexp.MustCompile(`(?s)`+regexp.QuoteMeta(selector)+`[^\{]*\{[^\}]*font-size:\s*var\(--pp-section-heading-size\);`), + css, + ) + } + + for _, bundle := range []string{"printing-press.js", "printing-press-lite.js"} { + asset, readErr := os.ReadFile(filepath.Join("static", bundle)) + require.NoError(t, readErr) + assert.Contains(t, string(asset), `--pp-section-heading-size`) + } +} + func TestPrintingPress_PrintJSONArtifacts_BundleAndManifest(t *testing.T) { specBytes, err := os.ReadFile("../test_specs/burgershop.openapi.yaml") require.NoError(t, err) diff --git a/printingpress/render/bootstrap_scripts/shared_nav_cache.js b/printingpress/render/bootstrap_scripts/shared_nav_cache.js index 548654b..cfe2f13 100644 --- a/printingpress/render/bootstrap_scripts/shared_nav_cache.js +++ b/printingpress/render/bootstrap_scripts/shared_nav_cache.js @@ -205,6 +205,46 @@ ); } + function protocolLabel(protocol) { + const normalized = String(protocol || '').trim().toLowerCase().replace(/[-_.\s]+/g, ''); + const labels = { + amqp: 'AMQP', amqp1: 'AMQP 1.0', anypointmq: 'ANYPOINT MQ', googlepubsub: 'GOOGLE PUB/SUB', + http: 'HTTP', https: 'HTTPS', ibmmq: 'IBM MQ', jms: 'JMS', kafka: 'KAFKA', + kafkasecure: 'KAFKA', mercure: 'MERCURE', mqtt: 'MQTT', mqtt5: 'MQTT 5', nats: 'NATS', + pulsar: 'PULSAR', redis: 'REDIS', sns: 'SNS', solace: 'SOLACE', sqs: 'SQS', stomp: 'STOMP', + websocket: 'WEBSOCKET', ws: 'WEBSOCKET', wss: 'WEBSOCKET', + }; + return labels[normalized] || String(protocol || '').trim().toUpperCase(); + } + + function renderProtocol(protocol) { + if (!protocol) { + return ''; + } + return ( + "" + + escapeHtml(protocolLabel(protocol)) + + '' + ); + } + + function renderOperationBadge(op) { + if (op && op.specKind === 'asyncapi') { + const action = String(op.method || '').toLowerCase(); + const receive = action === 'receive'; + return ( + "" + + (receive ? '← RCV' : 'SND →') + + '' + ); + } + return renderMethodBadge(op && op.method); + } + function renderOperationItem(op, activeSlug) { if (!op) { return ''; @@ -224,7 +264,7 @@ "'>" + escapeHtml(op.summary || op.path || op.slug || 'Untitled') + '' + - renderMethodBadge(op.method) + + renderOperationBadge(op) + '' ); } @@ -244,7 +284,10 @@ "'>" + renderPreviewChevron(open) + "" + - escapeHtml(tag.summary || tag.name || 'Untitled') + + (tag.protocol + ? renderProtocol(tag.protocol) + : escapeHtml(tag.summary || tag.name || 'Untitled') + + (Array.isArray(tag.protocols) ? tag.protocols.map(renderProtocol).join('') : '')) + '
'; if (!open) { return html; @@ -311,7 +354,10 @@ "' class='" + classes.join(' ') + "'>" + - escapeHtml(model.name || model.slug || 'Untitled') + + (model.protocol + ? renderProtocol(model.protocol) + : escapeHtml(model.name || model.slug || 'Untitled') + + (Array.isArray(model.protocols) ? model.protocols.map(renderProtocol).join('') : '')) + ''; } html += '
'; diff --git a/printingpress/render/helpers.go b/printingpress/render/helpers.go index 56d72a5..dccf13f 100644 --- a/printingpress/render/helpers.go +++ b/printingpress/render/helpers.go @@ -36,6 +36,59 @@ func modelExtensionsSummary(page *ppmodel.ModelPage) string { return fmt.Sprintf("Extensions (%d)", len(page.Extensions)) } +func sourceDisplayPath(source *ppmodel.SourceRef, fallback string) string { + if source != nil && strings.TrimSpace(source.Path) != "" { + return source.Path + } + return fallback +} + +func sourceDisplayLine(source *ppmodel.SourceRef, fallback int) int { + if source != nil && source.Line > 0 { + return source.Line + } + return fallback +} + +func isAsyncAPIMessagePage(page *ppmodel.ModelPage) bool { + return page != nil && page.AsyncAPI != nil && page.AsyncAPI.Kind == "message" +} + +func isAsyncAPIReplyPage(page *ppmodel.ModelPage) bool { + return page != nil && page.AsyncAPI != nil && page.AsyncAPI.Kind == "reply" +} + +func isAsyncAPIChannelPage(page *ppmodel.ModelPage) bool { + return page != nil && page.AsyncAPI != nil && page.AsyncAPI.Kind == "channel" +} + +func shouldRenderAsyncAPIModelSection(page *ppmodel.ModelPage) bool { + if page == nil || page.AsyncAPI == nil || page.ComponentType == "securitySchemes" { + return false + } + switch page.AsyncAPI.Kind { + case "schema", "parameter", "operationTrait", "messageTrait": + return false + default: + return true + } +} + +func asyncAPIModelProtocol(page *ppmodel.ModelPage) string { + if page == nil || page.AsyncAPI == nil { + return "" + } + if page.AsyncAPI.Kind != "operationTrait" && page.AsyncAPI.Kind != "messageTrait" { + return "" + } + return page.AsyncAPI.Protocol +} + +func shouldRenderAsyncAPITraitProtocols(page *ppmodel.ModelPage) bool { + return asyncAPIModelProtocol(page) == "" && page != nil && page.AsyncAPI != nil && + (page.AsyncAPI.Kind == "operationTrait" || page.AsyncAPI.Kind == "messageTrait") && len(page.AsyncAPI.Bindings) > 0 +} + func operationBreadcrumb(page *ppmodel.OperationPage) []BreadcrumbItem { items := []BreadcrumbItem{ {Label: "HOME", Href: pppaths.FileIndexHTML}, @@ -51,6 +104,132 @@ func operationBreadcrumb(page *ppmodel.OperationPage) []BreadcrumbItem { return items } +func operationPageTitle(page *ppmodel.OperationPage) string { + if page == nil { + return "" + } + if page.SpecKind.IsAsyncAPI() { + if page.Summary != "" { + return page.Summary + } + if page.OperationID != "" { + return page.OperationID + } + if page.AsyncAPI != nil && page.AsyncAPI.Channel != nil { + return firstNonEmpty(page.AsyncAPI.Channel.Address, page.AsyncAPI.Channel.Name) + } + } + if page.Summary != "" { + return page.Summary + } + return page.Path +} + +func operationRawTitle(page *ppmodel.OperationPage) string { + if page == nil { + return "" + } + if page.SpecKind.IsAsyncAPI() { + action := "" + if page.AsyncAPI != nil { + action = page.AsyncAPI.Action + } + return strings.TrimSpace(firstNonEmpty(strings.ToUpper(action)+" "+page.Path, page.OperationID, page.Path)) + } + return strings.TrimSpace(page.Method + " " + page.Path) +} + +func operationPathClass(page *ppmodel.OperationPage) string { + if page != nil && page.SpecKind.IsAsyncAPI() { + return "pp-operation-path pp-operation-path-asyncapi" + } + return "pp-operation-path" +} + +func operationNavPathLabel(op *ppmodel.NavOperation) string { + if op == nil { + return "" + } + if op.SpecKind.IsAsyncAPI() { + return firstNonEmpty(op.Path, op.OperationID, op.Summary) + } + return op.Path +} + +func operationNavActionLabel(op *ppmodel.NavOperation) string { + if op == nil { + return "" + } + if op.SpecKind.IsAsyncAPI() { + return op.Method + } + return op.Method +} + +func operationRootIDLabel(op *ppmodel.NavOperation) string { + if op != nil && op.SpecKind.IsAsyncAPI() { + return "OPERATION:" + } + return "OPERATION ID:" +} + +func asyncAPIActionName(action string) string { + return strings.ToLower(strings.TrimSpace(action)) +} + +func asyncAPIActionSize(size string) string { + switch strings.ToLower(strings.TrimSpace(size)) { + case "small": + return "small" + default: + return "large" + } +} + +func asyncAPIActionCode(action string) string { + switch asyncAPIActionName(action) { + case "receive": + return "RCV" + case "send": + return "SND" + default: + return strings.ToUpper(strings.TrimSpace(action)) + } +} + +func asyncAPIActionIcon(action string) string { + switch asyncAPIActionName(action) { + case "receive": + return "arrow-left" + case "send": + return "arrow-right" + default: + return "arrow-right" + } +} + +func asyncAPIActionLabel(action string) string { + switch asyncAPIActionName(action) { + case "receive": + return "Receive" + case "send": + return "Send" + default: + return strings.TrimSpace(action) + } +} + +func asyncAPIActionFallbackClass(action string, size string) string { + classes := []string{ + "pp-asyncapi-action", + "pp-asyncapi-action-" + asyncAPIActionSize(size), + } + if name := asyncAPIActionName(action); name != "" { + classes = append(classes, "pp-asyncapi-action-"+name) + } + return strings.Join(classes, " ") +} + func contentPageBreadcrumb(page *ppmodel.ContentPage) []BreadcrumbItem { label := "PAGE" if page != nil { @@ -73,7 +252,7 @@ func contentPageBreadcrumb(page *ppmodel.ContentPage) []BreadcrumbItem { // AssetHref resolves a relative asset reference against the configured hosted docs root. // When no hosted docs root is configured, the original relative asset path is preserved. func AssetHref(assetBaseURL, href string) string { - return resolveDocHref(assetBaseURL, href) + return resolveDocHref(assetBaseURL, href, false) } // SharedAssetHref resolves an asset reference, preferring sharedAssetBaseURL @@ -94,14 +273,17 @@ func SharedAssetHref(sharedAssetBaseURL, assetBaseURL, href string) string { return AssetHref(assetBaseURL, href) } -// DocHref resolves a document link against the configured hosted docs root. -// Portable pages preserve the original relative href so the page's -// continues to handle nested file:// navigation correctly. +// DocHref resolves a document link against the configured docs root. +// Empty bases preserve hrefs for callers that rely on a page-level . func DocHref(baseURL, href string) string { - return resolveDocHref(baseURL, href) + return resolveDocHref(baseURL, href, true) +} + +func OperationDocHref(baseURL, href string) string { + return DocHref(baseURL, href) } -func resolveDocHref(baseURL, href string) string { +func resolveDocHref(baseURL, href string, resolveRelativeBase bool) string { if baseURL == "" || href == "" || isLiteralHref(href) { return href } @@ -112,6 +294,9 @@ func resolveDocHref(baseURL, href string) string { if isHostedAssetBase(base) { return base.ResolveReference(ref).String() } + if resolveRelativeBase && isRelativePathBase(base) { + return strings.TrimRight(base.Path, "/") + "/" + strings.TrimLeft(href, "/") + } return href } @@ -145,6 +330,16 @@ func isHostedAssetBase(base *url.URL) bool { return strings.HasPrefix(base.Path, "/") } +func isRelativePathBase(base *url.URL) bool { + return base != nil && + base.Scheme == "" && + base.Host == "" && + base.Path != "" && + !strings.HasPrefix(base.Path, "/") && + base.RawQuery == "" && + base.Fragment == "" +} + // ModelsIndexBreadcrumb builds the breadcrumb for the models index page. func ModelsIndexBreadcrumb() []BreadcrumbItem { return []BreadcrumbItem{ @@ -236,6 +431,9 @@ func operationNavSections(page *ppmodel.OperationPage) string { if page.DescHTML != "" { sections = append(sections, navSection{"Description", "section-description"}) } + if page != nil && asyncAPIOperationSectionVisible(page.AsyncAPI) { + sections = append(sections, navSection{"Channel", "section-asyncapi"}) + } if len(page.Security) > 0 { sections = append(sections, navSection{"Security", "section-security"}) } @@ -243,7 +441,7 @@ func operationNavSections(page *ppmodel.OperationPage) string { sections = append(sections, navSection{"Servers", "section-servers"}) } if page.RequestBody != nil { - sections = append(sections, navSection{"Request Body", "section-request-body"}) + sections = append(sections, navSection{operationContentSectionTitle(page), "section-request-body"}) } if page.ResponsesJSON != "" { sections = append(sections, navSection{"Responses", "section-responses"}) @@ -272,6 +470,20 @@ func operationNavSections(page *ppmodel.OperationPage) string { return MustJSON(sections) } +func asyncAPIOperationSectionVisible(info *ppmodel.AsyncAPIOperationInfo) bool { + return info != nil && (info.Channel != nil || info.Reply != nil || len(info.Bindings) > 0) +} + +func operationContentSectionTitle(page *ppmodel.OperationPage) string { + if page != nil && page.SpecKind.IsAsyncAPI() { + if page.AsyncAPI != nil && len(page.AsyncAPI.Messages) > 1 { + return "Messages" + } + return "Message" + } + return "Request Body" +} + func codeSampleTabLabel(sample *ppmodel.CodeSample, index int) string { return sample.DisplayLabel(index) } @@ -302,3 +514,12 @@ func singleLine(s string) string { s = strings.ReplaceAll(s, "\r", " ") return strings.Join(strings.Fields(s), " ") } + +func firstNonEmpty(values ...string) string { + for _, value := range values { + if trimmed := strings.TrimSpace(value); trimmed != "" { + return trimmed + } + } + return "" +} diff --git a/printingpress/render/helpers_test.go b/printingpress/render/helpers_test.go index 273a998..85f1013 100644 --- a/printingpress/render/helpers_test.go +++ b/printingpress/render/helpers_test.go @@ -1,6 +1,10 @@ package render -import "testing" +import ( + "testing" + + ppmodel "github.com/pb33f/doctor/printingpress/model" +) func TestAssetHref(t *testing.T) { tests := []struct { @@ -118,6 +122,169 @@ func TestSharedAssetHref(t *testing.T) { } } +func TestShouldRenderAsyncAPIModelSection(t *testing.T) { + tests := []struct { + name string + page *ppmodel.ModelPage + want bool + }{ + { + name: "nil page", + page: nil, + want: false, + }, + { + name: "non asyncapi model", + page: &ppmodel.ModelPage{}, + want: false, + }, + { + name: "security scheme uses dedicated renderer", + page: &ppmodel.ModelPage{ + ComponentType: "securitySchemes", + AsyncAPI: &ppmodel.AsyncAPIModelInfo{Kind: "securityScheme"}, + }, + want: false, + }, + { + name: "schema uses the shared schema renderer", + page: &ppmodel.ModelPage{ + ComponentType: "schemas", + AsyncAPI: &ppmodel.AsyncAPIModelInfo{Kind: "schema"}, + }, + want: false, + }, + { + name: "parameter uses the shared parameter renderer", + page: &ppmodel.ModelPage{ + ComponentType: "parameters", + AsyncAPI: &ppmodel.AsyncAPIModelInfo{Kind: "parameter"}, + }, + want: false, + }, + { + name: "channel uses the dedicated channel renderer", + page: &ppmodel.ModelPage{ + ComponentType: "channels", + AsyncAPI: &ppmodel.AsyncAPIModelInfo{Kind: "channel"}, + }, + want: true, + }, + { + name: "message trait uses model page content only", + page: &ppmodel.ModelPage{ + ComponentType: "messageTraits", + AsyncAPI: &ppmodel.AsyncAPIModelInfo{Kind: "messageTrait"}, + }, + want: false, + }, + { + name: "operation trait uses model page content only", + page: &ppmodel.ModelPage{ + ComponentType: "operationTraits", + AsyncAPI: &ppmodel.AsyncAPIModelInfo{Kind: "operationTrait"}, + }, + want: false, + }, + { + name: "reply address uses dedicated asyncapi section", + page: &ppmodel.ModelPage{ + ComponentType: "replyAddresses", + AsyncAPI: &ppmodel.AsyncAPIModelInfo{Kind: "replyAddress"}, + }, + want: true, + }, + { + name: "correlation id uses dedicated asyncapi section", + page: &ppmodel.ModelPage{ + ComponentType: "correlationIds", + AsyncAPI: &ppmodel.AsyncAPIModelInfo{Kind: "correlationId"}, + }, + want: true, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := shouldRenderAsyncAPIModelSection(tt.page); got != tt.want { + t.Fatalf("shouldRenderAsyncAPIModelSection() = %v, want %v", got, tt.want) + } + }) + } +} + +func TestAsyncAPIModelProtocol(t *testing.T) { + tests := []struct { + name string + page *ppmodel.ModelPage + want string + }{ + {name: "nil page", want: ""}, + { + name: "operation trait protocol", + page: &ppmodel.ModelPage{AsyncAPI: &ppmodel.AsyncAPIModelInfo{Kind: "operationTrait", Protocol: "kafka"}}, + want: "kafka", + }, + { + name: "message trait protocol", + page: &ppmodel.ModelPage{AsyncAPI: &ppmodel.AsyncAPIModelInfo{Kind: "messageTrait", Protocol: "mqtt"}}, + want: "mqtt", + }, + { + name: "server keeps its own title", + page: &ppmodel.ModelPage{AsyncAPI: &ppmodel.AsyncAPIModelInfo{Kind: "server", Protocol: "kafka"}}, + want: "", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := asyncAPIModelProtocol(tt.page); got != tt.want { + t.Fatalf("asyncAPIModelProtocol() = %q, want %q", got, tt.want) + } + }) + } +} + +func TestShouldRenderAsyncAPITraitProtocols(t *testing.T) { + assertions := []struct { + name string + page *ppmodel.ModelPage + want bool + }{ + {name: "nil page", want: false}, + { + name: "canonical protocol title does not duplicate protocol section", + page: &ppmodel.ModelPage{AsyncAPI: &ppmodel.AsyncAPIModelInfo{ + Kind: "operationTrait", Protocol: "kafka", Bindings: []string{"kafka"}, + }}, + want: false, + }, + { + name: "named trait gets additive protocol section", + page: &ppmodel.ModelPage{AsyncAPI: &ppmodel.AsyncAPIModelInfo{ + Kind: "operationTrait", Bindings: []string{"kafka"}, + }}, + want: true, + }, + { + name: "multi protocol trait gets additive protocol section", + page: &ppmodel.ModelPage{AsyncAPI: &ppmodel.AsyncAPIModelInfo{ + Kind: "operationTrait", Bindings: []string{"kafka", "amqp"}, + }}, + want: true, + }, + } + + for _, assertion := range assertions { + t.Run(assertion.name, func(t *testing.T) { + if got := shouldRenderAsyncAPITraitProtocols(assertion.page); got != assertion.want { + t.Fatalf("shouldRenderAsyncAPITraitProtocols() = %v, want %v", got, assertion.want) + } + }) + } +} + func TestDocHref(t *testing.T) { tests := []struct { name string @@ -132,16 +299,16 @@ func TestDocHref(t *testing.T) { want: "index.html", }, { - name: "portable base preserves href", + name: "relative page base prefixes href", baseURL: "../", href: "index.html", - want: "index.html", + want: "../index.html", }, { - name: "portable nested base preserves model href", + name: "nested relative page base prefixes model href", baseURL: "../../", href: "models/schemas/finding.html", - want: "models/schemas/finding.html", + want: "../../models/schemas/finding.html", }, { name: "absolute path base resolves from docs root", @@ -183,3 +350,54 @@ func TestDocHref(t *testing.T) { }) } } + +func TestOperationDocHref(t *testing.T) { + tests := []struct { + name string + baseURL string + href string + want string + }{ + { + name: "empty base preserves document href", + href: "models/messages/light-measured.html", + want: "models/messages/light-measured.html", + }, + { + name: "relative operation page base prefixes document href", + baseURL: "../", + href: "models/messages/light-measured.html", + want: "../models/messages/light-measured.html", + }, + { + name: "hosted base resolves from docs root", + baseURL: "/docs/", + href: "models/messages/light-measured.html", + want: "/docs/models/messages/light-measured.html", + }, + { + name: "nested relative operation page base prefixes document href", + baseURL: "../../", + href: "models/messages/light-measured.html", + want: "../../models/messages/light-measured.html", + }, + { + name: "absolute path href is unchanged", + href: "/models/messages/light-measured.html", + want: "/models/messages/light-measured.html", + }, + { + name: "anchor href is unchanged", + href: "#message", + want: "#message", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := OperationDocHref(tt.baseURL, tt.href); got != tt.want { + t.Fatalf("OperationDocHref(%q, %q) = %q, want %q", tt.baseURL, tt.href, got, tt.want) + } + }) + } +} diff --git a/printingpress/render/layout_page_test.go b/printingpress/render/layout_page_test.go index 5f64512..95360ad 100644 --- a/printingpress/render/layout_page_test.go +++ b/printingpress/render/layout_page_test.go @@ -149,6 +149,21 @@ func TestSharedNavPreviewUsesConsistentChevrons(t *testing.T) { } } +func TestSharedNavPreviewSupportsAsyncAPIComponents(t *testing.T) { + for _, expected := range []string{ + `function renderProtocol(protocol)`, + `()=>(t||e((t={exports:{}}).exports,t),t.exports),c=(e,t,a,s)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=i(t),l=0,u=c.length,d;lt[e]).bind(null,d),enumerable:!(s=r(t,d))||s.enumerable});return e},l=(e,r,i)=>(i=e==null?{}:t(a(e)),c(r||!e||!e.__esModule?n(i,`default`,{value:e,enumerable:!0}):i,e)),u=/^[a-zA-Z][a-zA-Z\d+.-]*:/;function d(e){return document.body?.dataset?.[e]||``}function f(){return d(`ppAssetMode`)===`served`?`served`:`portable`}function p(e,t){let n=`${e}${t}`,r=d(`ppBaseUrl`);if(!r||n.startsWith(`#`)||n.startsWith(`data:`)||u.test(n))return n;try{return new URL(n,new URL(r,window.location.href)).toString()}catch{return n}}async function m(e,t,n=f()){return e?n===`portable`?h(e,t):g(e):null}async function h(e,t){await new Promise((t,n)=>{let r=document.createElement(`script`);r.src=p(e,`.js`),r.async=!1,r.onload=()=>{r.remove(),t()},r.onerror=()=>{r.remove(),n(Error(`unable to load script asset: ${e}.js`))},document.head.appendChild(r)});let n=globalThis[t];return delete globalThis[t],n||null}async function g(e){let t=p(e,`.json`),n=await fetch(t);if(!n.ok)throw Error(`unable to fetch asset: ${t} (${n.status})`);return await n.json()}var _=new Map,ee=new Map,te=`__PP_PAGE_DATA__`;function ne(e){_.clear();for(let[t,n]of Object.entries(e))_.set(t,n)}function re(e){return _.get(e)}function v(e){if(e?.startsWith(`#/components/`))return re(e.replace(`#/components/`,``))}function y(e){return ee.get(e)}function ie(e){if(e?.startsWith(`#/components/`))return y(e.replace(`#/components/`,``))}async function ae(e){let t=ee.get(e);if(t)return t;let n=re(e);if(!n?.pageDataBase)return;let r=await m(n.pageDataBase,te);if(r?.model)return ee.set(e,r.model),r.model}async function oe(e){if(e?.startsWith(`#/components/`))return ae(e.replace(`#/components/`,``))}async function se(e,t=new Set){let n=ce(e);for(let e of n){if(t.has(e))continue;t.add(e);let n=await oe(e);if(n?.schemaJson)try{await se(JSON.parse(n.schemaJson),t)}catch{}}}function ce(e,t=new Set){if(!e||typeof e!=`object`)return t;if(Array.isArray(e)){for(let n of e)ce(n,t);return t}typeof e.$ref==`string`&&t.add(e.$ref);for(let n of Object.values(e))ce(n,t);return t}var le=`bags`,ue=`saddlebag`,de=class{_bags;_stateful;_db;constructor(e){this._bags=new Map,this._stateful=e}loadStatefulBags(){return new Promise(e=>{let t=indexedDB.open(ue,1);t.onupgradeneeded=()=>{this._db=t.result,this._db.createObjectStore(le)},t.onsuccess=()=>{if(this._db=t.result,this._db){this._bags.forEach(e=>{e.db||=this._db});let t=this._db.transaction(le).objectStore(le).openCursor();t.onsuccess=t=>{let n=t.target.result;if(n){let e=n.primaryKey,t=n.value,r=this.getBag(e);r&&!r.db&&(r.db=this._db),r?.populate(t),r&&this._bags.set(e,r),n.continue()}else e({db:this._db})}}}})}get db(){return this._db?this._db:null}createBag(e){if(this._bags.has(e))return this._bags.get(e);let t=me(e,this._stateful);return t.db=this._db,this._bags.set(e,t),t}getBag(e){return this._bags.has(e)?this._bags.get(e):this.createBag(e)}resetBags(){this._bags.forEach(e=>{e.reset()})}},fe;function pe(e){return fe||=new de(e||!1),fe}function me(e,t){return new ge(e,t)}var he=class{_allChangesBit;_key;_subFunction;_allChangesFunction;_populatedFunction;_bag;constructor(e,t){this._bag=e,this._allChangesBit=t,this._key=``,this._subFunction=void 0,this._allChangesFunction=void 0,this._populatedFunction=void 0}set allChangeFunction(e){this._allChangesFunction=e}set populatedFunction(e){this._populatedFunction=e}set subscriptionFunction(e){this._subFunction=e}set key(e){this._key=e}unsubscribe(){switch(this._allChangesBit){case 0:let e=this._bag._subscriptions.get(this._key);e&&this._bag._subscriptions.set(this._key,e.filter(e=>e!==this._subFunction));break;case 1:this._bag._allChangesSubscriptions=this._bag._allChangesSubscriptions.filter(e=>e!==this._allChangesFunction);break;case 2:this._bag._storePopulatedSubscriptions=this._bag._storePopulatedSubscriptions.filter(e=>e!==this._populatedFunction)}}},ge=class{_id;_stateful;_values;_db;_subscriptions;_allChangesSubscriptions;_storePopulatedSubscriptions;constructor(e,t){this._values=new Map,this._subscriptions=new Map,this._allChangesSubscriptions=[],this._storePopulatedSubscriptions=[],this._stateful=t||!1,this._id=e}set(e,t){this._values.set(e,structuredClone(t)),this.alertSubscribers(e,t),this._stateful&&this._db&&this._db.transaction([`bags`],`readwrite`).objectStore(`bags`).put(this._values,this._id),this._stateful&&!this._db&&console.error(`db not available, cannot write to db for key:`,e)}get id(){return this._id}get db(){return this._db}set db(e){this._db=e}reset(){this._values.forEach((e,t)=>{this.alertSubscribers(t,void 0)}),this._values=new Map,this._stateful&&this._db&&this._db.transaction([`bags`],`readwrite`).objectStore(`bags`).delete(this._id)}alertSubscribers(e,t){this._subscriptions.has(e)&&this._subscriptions.get(e)?.forEach(e=>e(t)),this._allChangesSubscriptions.length>0&&this._allChangesSubscriptions.forEach(n=>n(e,t))}get(e){return this._values.get(e)}populate(e){e&&e.size>0&&(this._values=structuredClone(e),this._storePopulatedSubscriptions.length>0&&this._storePopulatedSubscriptions.forEach(t=>t(e)))}export(){return this._values}subscribe(e,t){if(!this._subscriptions.has(e))this._subscriptions.set(e,[t]);else{let n=this._subscriptions.get(e);n&&this._subscriptions.set(e,[...n,t])}let n=new he(this,0);return n.key=e,n.subscriptionFunction=t,n}onAllChanges(e){this._allChangesSubscriptions.push(e);let t=new he(this,1);return t.allChangeFunction=e,t}onPopulated(e){this._storePopulatedSubscriptions.push(e);let t=new he(this,2);return t.populatedFunction=e,t}},_e=`__PP_SHARED_DATA__`,ve=`__PP_PAGE_DATA__`,ye=`shared-payload`,be=`printing-press:shared:`,xe=`saddlebag`,Se=`bags`,Ce=null,we=null;function b(e,t){let n=globalThis.__PP_LOG;typeof n==`function`&&n(e,t)}function Te(){return globalThis.__PP_BOOTSTRAP__||null}function Ee(){let e=globalThis,t=e.__PP_BOOTSTRAP__;if(t)return t;let n={};return e.__PP_BOOTSTRAP__=n,n}function De(){return Te()?.stopAtPreview===!0}async function Oe(e,t,n){let r=Te(),i=n===`shared`?r?.sharedPromise:r?.pagePromise;if(i){b(`${n}-payload:await-bootstrap-promise`,{assetBase:e});try{let t=await i;if(t)return b(`${n}-payload:resolved-from-bootstrap-promise`,{assetBase:e,hasPayload:!0}),t;b(`${n}-payload:bootstrap-promise-empty`,{assetBase:e})}catch{let t=r?.[n];if(t)return b(`${n}-payload:bootstrap-promise-failed-using-store`,{assetBase:e}),t||null;b(`${n}-payload:bootstrap-promise-failed`,{assetBase:e})}}if(r?.[n])return b(`${n}-payload:resolved-from-store`,{assetBase:e}),r[n]||null;b(`${n}-payload:load-asset:start`,{assetBase:e});let a=await m(e,t);return b(`${n}-payload:load-asset:done`,{assetBase:e,hasPayload:!!a}),a}function ke(e){try{return`${be}${new URL(p(e,``),document.baseURI).href}`}catch{return`${be}${e}`}}function Ae(){return new Promise(e=>{try{let t=indexedDB.open(xe,1);t.onerror=()=>e(null),t.onupgradeneeded=()=>{let e=t.result;e.objectStoreNames.contains(Se)||e.createObjectStore(Se)},t.onsuccess=()=>e(t.result)}catch{e(null)}})}function je(){return new Promise(e=>{try{let t=indexedDB.deleteDatabase(xe);t.onsuccess=()=>e(),t.onerror=()=>e(),t.onblocked=()=>e()}catch{e()}})}async function Me(){if(typeof indexedDB>`u`)return b(`shared-cache:indexeddb-unavailable`),!1;we||=(async()=>{let e=await Ae();if(!e)return b(`shared-cache:db-open-failed`),!1;if(e.objectStoreNames.contains(Se))return e.close(),b(`shared-cache:db-ready`),!0;if(e.close(),b(`shared-cache:missing-store-reset`),await je(),e=await Ae(),!e)return b(`shared-cache:db-reopen-failed`),!1;let t=e.objectStoreNames.contains(Se);return e.close(),b(`shared-cache:db-reset-result`,{ready:t}),t})();let e=await we;return e||(we=null),e}async function Ne(e){return!e||!await Me()?(b(`shared-cache:bag-unavailable`,{assetBase:e}),null):(Ce||=(async()=>{try{let e=pe(!0);return await e.loadStatefulBags(),b(`shared-cache:bag-manager-ready`),e}catch{return b(`shared-cache:bag-manager-failed`),null}})(),(await Ce)?.getBag(ke(e))??null)}async function Pe(e,t){if(!e||!t)return null;let n=await Ne(e),r=n?.get(ye);return r?r.hash===t?(b(`shared-cache:hit`,{assetBase:e}),r.payload??null):(n?.reset(),b(`shared-cache:stale`,{assetBase:e,cachedHash:r.hash,expectedHash:t}),null):(b(`shared-cache:miss`,{assetBase:e}),null)}async function Fe(e,t,n){!e||!t||!n||((await Ne(e))?.set(ye,{hash:t,payload:n}),b(`shared-cache:write`,{assetBase:e,expectedHash:t}))}function Ie(e){for(let[t,n]of Object.entries(e)){let e=document.getElementById(t);if(e){for(let[t,r]of Object.entries(n))e.setAttribute(t,r);t===`pp-nav`&&b(`nav-attributes:applied`,{nav:!!n[`data-nav`],models:!!n[`data-models`],webhooks:!!n[`data-webhooks`]})}}}function Le(e){e.querySelectorAll(`:scope > [data-pp-hydrated="true"]`).forEach(e=>e.remove())}function Re(e){let t=document.createElement(e.tag);return t.setAttribute(`data-pp-hydrated`,`true`),e.id&&(t.id=e.id),e.class&&(t.className=e.class),e.type&&e.tag===`script`&&(t.type=e.type),e.tag===`template`?t.innerHTML=e.html||``:t.textContent=e.text||``,t}function ze(e){for(let[t,n]of Object.entries(e)){let e=document.getElementById(t);if(e){Le(e);for(let t of n)e.appendChild(Re(t))}}}function Be(e,t={}){if(!e)return;let n=t.includeModel??!0;e.schemaRegistry&&ne(e.schemaRegistry),e.attributes&&Ie(e.attributes),e.children&&ze(e.children),n&&e.model&&Ve(e.model)}function Ve(e){let t=document.getElementById(`pp-model-page`);t&&(t.setAttribute(`model-json`,e.schemaJson),e.mockJson&&t.setAttribute(`mock-json`,e.mockJson),e.rawYaml&&t.setAttribute(`raw-yaml`,e.rawYaml),e.schemaRawYaml&&t.setAttribute(`schema-raw-yaml`,e.schemaRawYaml),e.schemaRawJson&&t.setAttribute(`schema-raw-json`,e.schemaRawJson));let n=document.getElementById(`pp-model-security-scheme`);n&&n.setAttribute(`scheme-json`,e.schemaJson)}function He(){document.body&&(document.body.dataset.ppHydrated=`true`),document.dispatchEvent(new CustomEvent(`pp:hydrated`))}async function Ue(){if(De()){b(`hydrate:skipped`,{reason:`preview-hold`});return}let e=d(`ppShared`),t=d(`ppSharedHash`),n=d(`ppPage`),r=Te();b(`hydrate:start`,{sharedAssetBase:e,pageAssetBase:n,hasBootstrapShared:!!r?.shared,hasBootstrapSharedPromise:!!r?.sharedPromise});let i=r?.shared||(r?.sharedPromise?null:await Pe(e,t));i&&!r?.shared&&(Ee().shared=i,b(`shared-cache:seeded-bootstrap-store`));let a=Oe(e,_e,`shared`).then(async n=>(i||await Fe(e,t,n),Be(n),b(`shared-payload:applied`,{hasPayload:!!n}),n)),o=Oe(n,ve,`page`).then(async e=>{try{await a}catch{}return Be(e,{includeModel:!1}),b(`page-payload:applied`,{hasPayload:!!e}),e}),[s,c]=await Promise.allSettled([a,o]),l=[s,c];for(let e of l)e.status===`rejected`&&console.error(`printing-press hydration failed`,e.reason);c.status===`fulfilled`&&c.value?.model&&(Ve(c.value.model),b(`model-payload:applied`)),b(`hydrate:complete`),He()}var We={"info-square":``,"exclamation-triangle":``,"exclamation-square":``,"check-square":``,"question-square":``},Ge=`.pp-content-page-markdown pre`,Ke=`data-pp-copy-ready`;function qe(e,t){e.setAttribute(`aria-label`,t),e.setAttribute(`label`,t),e.setAttribute(`title`,t)}function Je(e){if(typeof document.execCommand!=`function`)throw Error(`copy command unavailable`);let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.left=`-9999px`,document.body.appendChild(t),t.select();let n=t=>{t.clipboardData?.setData(`text/plain`,e),t.preventDefault()};document.addEventListener(`copy`,n,{once:!0});let r=document.execCommand(`copy`);if(document.removeEventListener(`copy`,n),t.remove(),!r)throw Error(`copy command failed`)}async function Ye(e){if(navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(e);return}catch{}Je(e)}async function Xe(e,t){let n=`Copy code to clipboard`;try{await Ye(e.textContent||``),qe(t,`Copied`),window.setTimeout(()=>qe(t,n),1200)}catch{qe(t,`Copy failed`),window.setTimeout(()=>qe(t,n),1200)}}function Ze(e=document){let t=Array.from(e.querySelectorAll(Ge));for(let e of t){if(e.hasAttribute(Ke)||(e.setAttribute(Ke,`true`),e.closest(`.pp-content-code-block`)))continue;let t=e.parentNode;if(!t)continue;let n=document.createElement(`div`);n.className=`pp-content-code-block`,t.insertBefore(n,e),n.appendChild(e);let r=document.createElement(`button`);r.className=`pp-content-code-copy`,r.type=`button`,qe(r,`Copy code to clipboard`),r.addEventListener(`click`,()=>{Xe(e,r)});let i=document.createElement(`sl-icon`);i.setAttribute(`name`,`copy`),i.setAttribute(`aria-hidden`,`true`),r.appendChild(i),n.appendChild(r)}}var Qe=`data-pp-shared-asset-base-url`;function $e(e){let t=(e??``).trim();return t?t.replace(/\/+$/,``)||`/`:``}function et(){if(typeof document>`u`)return``;let e=document.documentElement.getAttribute(Qe);return e&&e.trim()?$e(e):$e(document.body?.getAttribute(Qe))}function tt(e,t=et()){let n=e.replace(/^\/+/,``),r=$e(t);return r===`/`?`/${n}`:r?`${r}/${n}`:`static/${n}`}var nt=globalThis,rt=nt.ShadowRoot&&(nt.ShadyCSS===void 0||nt.ShadyCSS.nativeShadow)&&`adoptedStyleSheets`in Document.prototype&&`replace`in CSSStyleSheet.prototype,it=Symbol(),at=new WeakMap,ot=class{constructor(e,t,n){if(this._$cssResult$=!0,n!==it)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o,t=this.t;if(rt&&e===void 0){let n=t!==void 0&&t.length===1;n&&(e=at.get(t)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),n&&at.set(t,e))}return e}toString(){return this.cssText}},st=e=>new ot(typeof e==`string`?e:e+``,void 0,it),x=(e,...t)=>new ot(e.length===1?e[0]:t.reduce((t,n,r)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if(typeof e==`number`)return e;throw Error(`Value passed to 'css' function must be a 'css' function result: `+e+`. Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.`)})(n)+e[r+1],e[0]),e,it),ct=(e,t)=>{if(rt)e.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let n of t){let t=document.createElement(`style`),r=nt.litNonce;r!==void 0&&t.setAttribute(`nonce`,r),t.textContent=n.cssText,e.appendChild(t)}},lt=rt?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t=``;for(let n of e.cssRules)t+=n.cssText;return st(t)})(e):e,{is:ut,defineProperty:dt,getOwnPropertyDescriptor:ft,getOwnPropertyNames:pt,getOwnPropertySymbols:mt,getPrototypeOf:ht}=Object,gt=globalThis,_t=gt.trustedTypes,vt=_t?_t.emptyScript:``,yt=gt.reactiveElementPolyfillSupport,bt=(e,t)=>e,xt={toAttribute(e,t){switch(t){case Boolean:e=e?vt:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let n=e;switch(t){case Boolean:n=e!==null;break;case Number:n=e===null?null:Number(e);break;case Object:case Array:try{n=JSON.parse(e)}catch{n=null}}return n}},St=(e,t)=>!ut(e,t),Ct={attribute:!0,type:String,converter:xt,reflect:!1,useDefault:!1,hasChanged:St};Symbol.metadata??=Symbol(`metadata`),gt.litPropertyMetadata??=new WeakMap;var wt=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=Ct){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){let n=Symbol(),r=this.getPropertyDescriptor(e,n,t);r!==void 0&&dt(this.prototype,e,r)}}static getPropertyDescriptor(e,t,n){let{get:r,set:i}=ft(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:r,set(t){let a=r?.call(this);i?.call(this,t),this.requestUpdate(e,a,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??Ct}static _$Ei(){if(this.hasOwnProperty(bt(`elementProperties`)))return;let e=ht(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(bt(`finalized`)))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(bt(`properties`))){let e=this.properties,t=[...pt(e),...mt(e)];for(let n of t)this.createProperty(n,e[n])}let e=this[Symbol.metadata];if(e!==null){let t=litPropertyMetadata.get(e);if(t!==void 0)for(let[e,n]of t)this.elementProperties.set(e,n)}this._$Eh=new Map;for(let[e,t]of this.elementProperties){let n=this._$Eu(e,t);n!==void 0&&this._$Eh.set(n,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){let t=[];if(Array.isArray(e)){let n=new Set(e.flat(1/0).reverse());for(let e of n)t.unshift(lt(e))}else e!==void 0&&t.push(lt(e));return t}static _$Eu(e,t){let n=t.attribute;return!1===n?void 0:typeof n==`string`?n:typeof e==`string`?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),this.renderRoot!==void 0&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){let e=new Map,t=this.constructor.elementProperties;for(let n of t.keys())this.hasOwnProperty(n)&&(e.set(n,this[n]),delete this[n]);e.size>0&&(this._$Ep=e)}createRenderRoot(){let e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return ct(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,n){this._$AK(e,n)}_$ET(e,t){let n=this.constructor.elementProperties.get(e),r=this.constructor._$Eu(e,n);if(r!==void 0&&!0===n.reflect){let i=(n.converter?.toAttribute===void 0?xt:n.converter).toAttribute(t,n.type);this._$Em=e,i==null?this.removeAttribute(r):this.setAttribute(r,i),this._$Em=null}}_$AK(e,t){let n=this.constructor,r=n._$Eh.get(e);if(r!==void 0&&this._$Em!==r){let e=n.getPropertyOptions(r),i=typeof e.converter==`function`?{fromAttribute:e.converter}:e.converter?.fromAttribute===void 0?xt:e.converter;this._$Em=r;let a=i.fromAttribute(t,e.type);this[r]=a??this._$Ej?.get(r)??a,this._$Em=null}}requestUpdate(e,t,n,r=!1,i){if(e!==void 0){let a=this.constructor;if(!1===r&&(i=this[e]),n??=a.getPropertyOptions(e),!((n.hasChanged??St)(i,t)||n.useDefault&&n.reflect&&i===this._$Ej?.get(e)&&!this.hasAttribute(a._$Eu(e,n))))return;this.C(e,t,n)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:n,reflect:r,wrapped:i},a){n&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,a??t??this[e]),!0!==i||a!==void 0)||(this._$AL.has(e)||(this.hasUpdated||n||(t=void 0),this._$AL.set(e,t)),!0===r&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}let e=this.constructor.elementProperties;if(e.size>0)for(let[t,n]of e){let{wrapped:e}=n,r=this[t];!0!==e||this._$AL.has(t)||r===void 0||this.C(t,void 0,n,r)}}let e=!1,t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};wt.elementStyles=[],wt.shadowRootOptions={mode:`open`},wt[bt(`elementProperties`)]=new Map,wt[bt(`finalized`)]=new Map,yt?.({ReactiveElement:wt}),(gt.reactiveElementVersions??=[]).push(`2.1.2`);var Tt=globalThis,Et=e=>e,Dt=Tt.trustedTypes,Ot=Dt?Dt.createPolicy(`lit-html`,{createHTML:e=>e}):void 0,kt=`$lit$`,At=`lit$${Math.random().toFixed(9).slice(2)}$`,jt=`?`+At,Mt=`<${jt}>`,Nt=document,Pt=()=>Nt.createComment(``),Ft=e=>e===null||typeof e!=`object`&&typeof e!=`function`,It=Array.isArray,Lt=e=>It(e)||typeof e?.[Symbol.iterator]==`function`,Rt=`[ -\f\r]`,zt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,Bt=/-->/g,Vt=/>/g,Ht=RegExp(`>|${Rt}(?:([^\\s"'>=/]+)(${Rt}*=${Rt}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,`g`),Ut=/'/g,Wt=/"/g,Gt=/^(?:script|style|textarea|title)$/i,S=(e=>(t,...n)=>({_$litType$:e,strings:t,values:n}))(1),Kt=Symbol.for(`lit-noChange`),C=Symbol.for(`lit-nothing`),qt=new WeakMap,Jt=Nt.createTreeWalker(Nt,129);function Yt(e,t){if(!It(e)||!e.hasOwnProperty(`raw`))throw Error(`invalid template strings array`);return Ot===void 0?t:Ot.createHTML(t)}var Xt=(e,t)=>{let n=e.length-1,r=[],i,a=t===2?``:t===3?``:``,o=zt;for(let t=0;t`?(o=i??zt,l=-1):c[1]===void 0?l=-2:(l=o.lastIndex-c[2].length,s=c[1],o=c[3]===void 0?Ht:c[3]===`"`?Wt:Ut):o===Wt||o===Ut?o=Ht:o===Bt||o===Vt?o=zt:(o=Ht,i=void 0);let d=o===Ht&&e[t+1].startsWith(`/>`)?` `:``;a+=o===zt?n+Mt:l>=0?(r.push(s),n.slice(0,l)+kt+n.slice(l)+At+d):n+At+(l===-2?t:d)}return[Yt(e,a+(e[n]||``)+(t===2?``:t===3?``:``)),r]},Zt=class e{constructor({strings:t,_$litType$:n},r){let i;this.parts=[];let a=0,o=0,s=t.length-1,c=this.parts,[l,u]=Xt(t,n);if(this.el=e.createElement(l,r),Jt.currentNode=this.el.content,n===2||n===3){let e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;(i=Jt.nextNode())!==null&&c.length0){i.textContent=Dt?Dt.emptyScript:``;for(let n=0;n2||n[0]!==``||n[1]!==``?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=C}_$AI(e,t=this,n,r){let i=this.strings,a=!1;if(i===void 0)e=Qt(this,e,t,0),a=!Ft(e)||e!==this._$AH&&e!==Kt,a&&(this._$AH=e);else{let r=e,o,s;for(e=i[0],o=0;o{let r=n?.renderBefore??t,i=r._$litPart$;if(i===void 0){let e=n?.renderBefore??null;r._$litPart$=i=new en(t.insertBefore(Pt(),e),e,void 0,n??{})}return i._$AI(e),i},un=globalThis,w=class extends wt{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){let t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=ln(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Kt}};w._$litElement$=!0,w.finalized=!0,un.litElementHydrateSupport?.({LitElement:w});var dn=un.litElementPolyfillSupport;dn?.({LitElement:w}),(un.litElementVersions??=[]).push(`4.2.2`);var fn=x` +var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});var t=Object.create,n=Object.defineProperty,r=Object.getOwnPropertyDescriptor,i=Object.getOwnPropertyNames,a=Object.getPrototypeOf,o=Object.prototype.hasOwnProperty,s=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),c=(e,t,a,s)=>{if(t&&typeof t==`object`||typeof t==`function`)for(var c=i(t),l=0,u=c.length,d;lt[e]).bind(null,d),enumerable:!(s=r(t,d))||s.enumerable});return e},l=(e,r,i)=>(i=e==null?{}:t(a(e)),c(r||!e||!e.__esModule?n(i,`default`,{value:e,enumerable:!0}):i,e)),u=/^[a-zA-Z][a-zA-Z\d+.-]*:/;function d(e){return document.body?.dataset?.[e]||``}function f(){return d(`ppAssetMode`)===`served`?`served`:`portable`}function p(e,t){let n=`${e}${t}`,r=d(`ppBaseUrl`);if(!r||n.startsWith(`#`)||n.startsWith(`data:`)||u.test(n))return n;try{return new URL(n,new URL(r,window.location.href)).toString()}catch{return n}}async function m(e,t,n=f()){return e?n===`portable`?h(e,t):g(e):null}async function h(e,t){await new Promise((t,n)=>{let r=document.createElement(`script`);r.src=p(e,`.js`),r.async=!1,r.onload=()=>{r.remove(),t()},r.onerror=()=>{r.remove(),n(Error(`unable to load script asset: ${e}.js`))},document.head.appendChild(r)});let n=globalThis[t];return delete globalThis[t],n||null}async function g(e){let t=p(e,`.json`),n=await fetch(t);if(!n.ok)throw Error(`unable to fetch asset: ${t} (${n.status})`);return await n.json()}var _=new Map,v=new Map,ee=`__PP_PAGE_DATA__`;function te(e){_.clear();for(let[t,n]of Object.entries(e))_.set(t,n)}function ne(e){return _.get(e)}function y(e){if(e?.startsWith(`#/components/`))return ne(e.replace(`#/components/`,``))}function b(e){return v.get(e)}function re(e){if(e?.startsWith(`#/components/`))return b(e.replace(`#/components/`,``))}async function ie(e){let t=v.get(e);if(t)return t;let n=ne(e);if(!n?.pageDataBase)return;let r=await m(n.pageDataBase,ee);if(r?.model)return v.set(e,r.model),r.model}async function ae(e){if(e?.startsWith(`#/components/`))return ie(e.replace(`#/components/`,``))}async function oe(e,t=new Set){let n=se(e);for(let e of n){if(t.has(e))continue;t.add(e);let n=await ae(e);if(n?.schemaJson)try{await oe(JSON.parse(n.schemaJson),t)}catch{}}}function se(e,t=new Set){if(!e||typeof e!=`object`)return t;if(Array.isArray(e)){for(let n of e)se(n,t);return t}typeof e.$ref==`string`&&t.add(e.$ref);for(let n of Object.values(e))se(n,t);return t}var ce=`bags`,le=`saddlebag`,ue=class{_bags;_stateful;_db;constructor(e){this._bags=new Map,this._stateful=e}loadStatefulBags(){return new Promise(e=>{let t=indexedDB.open(le,1);t.onupgradeneeded=()=>{this._db=t.result,this._db.createObjectStore(ce)},t.onsuccess=()=>{if(this._db=t.result,this._db){this._bags.forEach(e=>{e.db||=this._db});let t=this._db.transaction(ce).objectStore(ce).openCursor();t.onsuccess=t=>{let n=t.target.result;if(n){let e=n.primaryKey,t=n.value,r=this.getBag(e);r&&!r.db&&(r.db=this._db),r?.populate(t),r&&this._bags.set(e,r),n.continue()}else e({db:this._db})}}}})}get db(){return this._db?this._db:null}createBag(e){if(this._bags.has(e))return this._bags.get(e);let t=pe(e,this._stateful);return t.db=this._db,this._bags.set(e,t),t}getBag(e){return this._bags.has(e)?this._bags.get(e):this.createBag(e)}resetBags(){this._bags.forEach(e=>{e.reset()})}},de;function fe(e){return de||=new ue(e||!1),de}function pe(e,t){return new he(e,t)}var me=class{_allChangesBit;_key;_subFunction;_allChangesFunction;_populatedFunction;_bag;constructor(e,t){this._bag=e,this._allChangesBit=t,this._key=``,this._subFunction=void 0,this._allChangesFunction=void 0,this._populatedFunction=void 0}set allChangeFunction(e){this._allChangesFunction=e}set populatedFunction(e){this._populatedFunction=e}set subscriptionFunction(e){this._subFunction=e}set key(e){this._key=e}unsubscribe(){switch(this._allChangesBit){case 0:let e=this._bag._subscriptions.get(this._key);e&&this._bag._subscriptions.set(this._key,e.filter(e=>e!==this._subFunction));break;case 1:this._bag._allChangesSubscriptions=this._bag._allChangesSubscriptions.filter(e=>e!==this._allChangesFunction);break;case 2:this._bag._storePopulatedSubscriptions=this._bag._storePopulatedSubscriptions.filter(e=>e!==this._populatedFunction)}}},he=class{_id;_stateful;_values;_db;_subscriptions;_allChangesSubscriptions;_storePopulatedSubscriptions;constructor(e,t){this._values=new Map,this._subscriptions=new Map,this._allChangesSubscriptions=[],this._storePopulatedSubscriptions=[],this._stateful=t||!1,this._id=e}set(e,t){this._values.set(e,structuredClone(t)),this.alertSubscribers(e,t),this._stateful&&this._db&&this._db.transaction([`bags`],`readwrite`).objectStore(`bags`).put(this._values,this._id),this._stateful&&!this._db&&console.error(`db not available, cannot write to db for key:`,e)}get id(){return this._id}get db(){return this._db}set db(e){this._db=e}reset(){this._values.forEach((e,t)=>{this.alertSubscribers(t,void 0)}),this._values=new Map,this._stateful&&this._db&&this._db.transaction([`bags`],`readwrite`).objectStore(`bags`).delete(this._id)}alertSubscribers(e,t){this._subscriptions.has(e)&&this._subscriptions.get(e)?.forEach(e=>e(t)),this._allChangesSubscriptions.length>0&&this._allChangesSubscriptions.forEach(n=>n(e,t))}get(e){return this._values.get(e)}populate(e){e&&e.size>0&&(this._values=structuredClone(e),this._storePopulatedSubscriptions.length>0&&this._storePopulatedSubscriptions.forEach(t=>t(e)))}export(){return this._values}subscribe(e,t){if(!this._subscriptions.has(e))this._subscriptions.set(e,[t]);else{let n=this._subscriptions.get(e);n&&this._subscriptions.set(e,[...n,t])}let n=new me(this,0);return n.key=e,n.subscriptionFunction=t,n}onAllChanges(e){this._allChangesSubscriptions.push(e);let t=new me(this,1);return t.allChangeFunction=e,t}onPopulated(e){this._storePopulatedSubscriptions.push(e);let t=new me(this,2);return t.populatedFunction=e,t}},ge=`__PP_SHARED_DATA__`,_e=`__PP_PAGE_DATA__`,ve=`shared-payload`,ye=`printing-press:shared:`,be=`saddlebag`,xe=`bags`,Se=null,Ce=null;function x(e,t){let n=globalThis.__PP_LOG;typeof n==`function`&&n(e,t)}function we(){return globalThis.__PP_BOOTSTRAP__||null}function Te(){let e=globalThis,t=e.__PP_BOOTSTRAP__;if(t)return t;let n={};return e.__PP_BOOTSTRAP__=n,n}function Ee(){return we()?.stopAtPreview===!0}async function De(e,t,n){let r=we(),i=n===`shared`?r?.sharedPromise:r?.pagePromise;if(i){x(`${n}-payload:await-bootstrap-promise`,{assetBase:e});try{let t=await i;if(t)return x(`${n}-payload:resolved-from-bootstrap-promise`,{assetBase:e,hasPayload:!0}),t;x(`${n}-payload:bootstrap-promise-empty`,{assetBase:e})}catch{let t=r?.[n];if(t)return x(`${n}-payload:bootstrap-promise-failed-using-store`,{assetBase:e}),t||null;x(`${n}-payload:bootstrap-promise-failed`,{assetBase:e})}}if(r?.[n])return x(`${n}-payload:resolved-from-store`,{assetBase:e}),r[n]||null;x(`${n}-payload:load-asset:start`,{assetBase:e});let a=await m(e,t);return x(`${n}-payload:load-asset:done`,{assetBase:e,hasPayload:!!a}),a}function Oe(e){try{return`${ye}${new URL(p(e,``),document.baseURI).href}`}catch{return`${ye}${e}`}}function ke(){return new Promise(e=>{try{let t=indexedDB.open(be,1);t.onerror=()=>e(null),t.onupgradeneeded=()=>{let e=t.result;e.objectStoreNames.contains(xe)||e.createObjectStore(xe)},t.onsuccess=()=>e(t.result)}catch{e(null)}})}function Ae(){return new Promise(e=>{try{let t=indexedDB.deleteDatabase(be);t.onsuccess=()=>e(),t.onerror=()=>e(),t.onblocked=()=>e()}catch{e()}})}async function je(){if(typeof indexedDB>`u`)return x(`shared-cache:indexeddb-unavailable`),!1;Ce||=(async()=>{let e=await ke();if(!e)return x(`shared-cache:db-open-failed`),!1;if(e.objectStoreNames.contains(xe))return e.close(),x(`shared-cache:db-ready`),!0;if(e.close(),x(`shared-cache:missing-store-reset`),await Ae(),e=await ke(),!e)return x(`shared-cache:db-reopen-failed`),!1;let t=e.objectStoreNames.contains(xe);return e.close(),x(`shared-cache:db-reset-result`,{ready:t}),t})();let e=await Ce;return e||(Ce=null),e}async function Me(e){return!e||!await je()?(x(`shared-cache:bag-unavailable`,{assetBase:e}),null):(Se||=(async()=>{try{let e=fe(!0);return await e.loadStatefulBags(),x(`shared-cache:bag-manager-ready`),e}catch{return x(`shared-cache:bag-manager-failed`),null}})(),(await Se)?.getBag(Oe(e))??null)}async function Ne(e,t){if(!e||!t)return null;let n=await Me(e),r=n?.get(ve);return r?r.hash===t?(x(`shared-cache:hit`,{assetBase:e}),r.payload??null):(n?.reset(),x(`shared-cache:stale`,{assetBase:e,cachedHash:r.hash,expectedHash:t}),null):(x(`shared-cache:miss`,{assetBase:e}),null)}async function Pe(e,t,n){!e||!t||!n||((await Me(e))?.set(ve,{hash:t,payload:n}),x(`shared-cache:write`,{assetBase:e,expectedHash:t}))}function Fe(e){for(let[t,n]of Object.entries(e)){let e=document.getElementById(t);if(e){for(let[t,r]of Object.entries(n))e.setAttribute(t,r);t===`pp-nav`&&x(`nav-attributes:applied`,{nav:!!n[`data-nav`],models:!!n[`data-models`],webhooks:!!n[`data-webhooks`]})}}}function Ie(e){e.querySelectorAll(`:scope > [data-pp-hydrated="true"]`).forEach(e=>e.remove())}function Le(e){let t=document.createElement(e.tag);return t.setAttribute(`data-pp-hydrated`,`true`),e.id&&(t.id=e.id),e.class&&(t.className=e.class),e.type&&e.tag===`script`&&(t.type=e.type),e.tag===`template`?t.innerHTML=e.html||``:t.textContent=e.text||``,t}function Re(e){for(let[t,n]of Object.entries(e)){let e=document.getElementById(t);if(e){Ie(e);for(let t of n)e.appendChild(Le(t))}}}function ze(e,t={}){if(!e)return;let n=t.includeModel??!0;e.schemaRegistry&&te(e.schemaRegistry),e.attributes&&Fe(e.attributes),e.children&&Re(e.children),n&&e.model&&Be(e.model)}function Be(e){let t=document.getElementById(`pp-model-page`);t&&(t.setAttribute(`model-json`,e.schemaJson),e.mockJson&&t.setAttribute(`mock-json`,e.mockJson),e.rawYaml&&t.setAttribute(`raw-yaml`,e.rawYaml),e.schemaRawYaml&&t.setAttribute(`schema-raw-yaml`,e.schemaRawYaml),e.schemaRawJson&&t.setAttribute(`schema-raw-json`,e.schemaRawJson));let n=document.getElementById(`pp-model-security-scheme`);n&&n.setAttribute(`scheme-json`,e.schemaJson)}function Ve(){document.body&&(document.body.dataset.ppHydrated=`true`),document.dispatchEvent(new CustomEvent(`pp:hydrated`))}async function He(){if(Ee()){x(`hydrate:skipped`,{reason:`preview-hold`});return}let e=d(`ppShared`),t=d(`ppSharedHash`),n=d(`ppPage`),r=we();x(`hydrate:start`,{sharedAssetBase:e,pageAssetBase:n,hasBootstrapShared:!!r?.shared,hasBootstrapSharedPromise:!!r?.sharedPromise});let i=r?.shared||(r?.sharedPromise?null:await Ne(e,t));i&&!r?.shared&&(Te().shared=i,x(`shared-cache:seeded-bootstrap-store`));let a=De(e,ge,`shared`).then(async n=>(i||await Pe(e,t,n),ze(n),x(`shared-payload:applied`,{hasPayload:!!n}),n)),o=De(n,_e,`page`).then(async e=>{try{await a}catch{}return ze(e,{includeModel:!1}),x(`page-payload:applied`,{hasPayload:!!e}),e}),[s,c]=await Promise.allSettled([a,o]),l=[s,c];for(let e of l)e.status===`rejected`&&console.error(`printing-press hydration failed`,e.reason);c.status===`fulfilled`&&c.value?.model&&(Be(c.value.model),x(`model-payload:applied`)),x(`hydrate:complete`),Ve()}var Ue={"info-square":``,"exclamation-triangle":``,"exclamation-square":``,"check-square":``,"question-square":``},We=`.pp-content-page-markdown pre`,Ge=`data-pp-copy-ready`;function Ke(e,t){e.setAttribute(`aria-label`,t),e.setAttribute(`label`,t),e.setAttribute(`title`,t)}function qe(e){if(typeof document.execCommand!=`function`)throw Error(`copy command unavailable`);let t=document.createElement(`textarea`);t.value=e,t.setAttribute(`readonly`,``),t.style.position=`fixed`,t.style.left=`-9999px`,document.body.appendChild(t),t.select();let n=t=>{t.clipboardData?.setData(`text/plain`,e),t.preventDefault()};document.addEventListener(`copy`,n,{once:!0});let r=document.execCommand(`copy`);if(document.removeEventListener(`copy`,n),t.remove(),!r)throw Error(`copy command failed`)}async function Je(e){if(navigator.clipboard?.writeText)try{await navigator.clipboard.writeText(e);return}catch{}qe(e)}async function Ye(e,t){let n=`Copy code to clipboard`;try{await Je(e.textContent||``),Ke(t,`Copied`),window.setTimeout(()=>Ke(t,n),1200)}catch{Ke(t,`Copy failed`),window.setTimeout(()=>Ke(t,n),1200)}}function Xe(e=document){let t=Array.from(e.querySelectorAll(We));for(let e of t){if(e.hasAttribute(Ge)||(e.setAttribute(Ge,`true`),e.closest(`.pp-content-code-block`)))continue;let t=e.parentNode;if(!t)continue;let n=document.createElement(`div`);n.className=`pp-content-code-block`,t.insertBefore(n,e),n.appendChild(e);let r=document.createElement(`button`);r.className=`pp-content-code-copy`,r.type=`button`,Ke(r,`Copy code to clipboard`),r.addEventListener(`click`,()=>{Ye(e,r)});let i=document.createElement(`sl-icon`);i.setAttribute(`name`,`copy`),i.setAttribute(`aria-hidden`,`true`),r.appendChild(i),n.appendChild(r)}}var Ze=`data-pp-shared-asset-base-url`;function Qe(e){let t=(e??``).trim();return t?t.replace(/\/+$/,``)||`/`:``}function $e(){if(typeof document>`u`)return``;let e=document.documentElement.getAttribute(Ze);return e&&e.trim()?Qe(e):Qe(document.body?.getAttribute(Ze))}function et(e,t=$e()){let n=e.replace(/^\/+/,``),r=Qe(t);return r===`/`?`/${n}`:r?`${r}/${n}`:`static/${n}`}var tt=globalThis,nt=tt.ShadowRoot&&(tt.ShadyCSS===void 0||tt.ShadyCSS.nativeShadow)&&`adoptedStyleSheets`in Document.prototype&&`replace`in CSSStyleSheet.prototype,rt=Symbol(),it=new WeakMap,at=class{constructor(e,t,n){if(this._$cssResult$=!0,n!==rt)throw Error("CSSResult is not constructable. Use `unsafeCSS` or `css` instead.");this.cssText=e,this.t=t}get styleSheet(){let e=this.o,t=this.t;if(nt&&e===void 0){let n=t!==void 0&&t.length===1;n&&(e=it.get(t)),e===void 0&&((this.o=e=new CSSStyleSheet).replaceSync(this.cssText),n&&it.set(t,e))}return e}toString(){return this.cssText}},ot=e=>new at(typeof e==`string`?e:e+``,void 0,rt),S=(e,...t)=>new at(e.length===1?e[0]:t.reduce((t,n,r)=>t+(e=>{if(!0===e._$cssResult$)return e.cssText;if(typeof e==`number`)return e;throw Error(`Value passed to 'css' function must be a 'css' function result: `+e+`. Use 'unsafeCSS' to pass non-literal values, but take care to ensure page security.`)})(n)+e[r+1],e[0]),e,rt),st=(e,t)=>{if(nt)e.adoptedStyleSheets=t.map(e=>e instanceof CSSStyleSheet?e:e.styleSheet);else for(let n of t){let t=document.createElement(`style`),r=tt.litNonce;r!==void 0&&t.setAttribute(`nonce`,r),t.textContent=n.cssText,e.appendChild(t)}},ct=nt?e=>e:e=>e instanceof CSSStyleSheet?(e=>{let t=``;for(let n of e.cssRules)t+=n.cssText;return ot(t)})(e):e,{is:lt,defineProperty:ut,getOwnPropertyDescriptor:dt,getOwnPropertyNames:ft,getOwnPropertySymbols:pt,getPrototypeOf:mt}=Object,ht=globalThis,gt=ht.trustedTypes,_t=gt?gt.emptyScript:``,vt=ht.reactiveElementPolyfillSupport,yt=(e,t)=>e,bt={toAttribute(e,t){switch(t){case Boolean:e=e?_t:null;break;case Object:case Array:e=e==null?e:JSON.stringify(e)}return e},fromAttribute(e,t){let n=e;switch(t){case Boolean:n=e!==null;break;case Number:n=e===null?null:Number(e);break;case Object:case Array:try{n=JSON.parse(e)}catch{n=null}}return n}},xt=(e,t)=>!lt(e,t),St={attribute:!0,type:String,converter:bt,reflect:!1,useDefault:!1,hasChanged:xt};Symbol.metadata??=Symbol(`metadata`),ht.litPropertyMetadata??=new WeakMap;var Ct=class extends HTMLElement{static addInitializer(e){this._$Ei(),(this.l??=[]).push(e)}static get observedAttributes(){return this.finalize(),this._$Eh&&[...this._$Eh.keys()]}static createProperty(e,t=St){if(t.state&&(t.attribute=!1),this._$Ei(),this.prototype.hasOwnProperty(e)&&((t=Object.create(t)).wrapped=!0),this.elementProperties.set(e,t),!t.noAccessor){let n=Symbol(),r=this.getPropertyDescriptor(e,n,t);r!==void 0&&ut(this.prototype,e,r)}}static getPropertyDescriptor(e,t,n){let{get:r,set:i}=dt(this.prototype,e)??{get(){return this[t]},set(e){this[t]=e}};return{get:r,set(t){let a=r?.call(this);i?.call(this,t),this.requestUpdate(e,a,n)},configurable:!0,enumerable:!0}}static getPropertyOptions(e){return this.elementProperties.get(e)??St}static _$Ei(){if(this.hasOwnProperty(yt(`elementProperties`)))return;let e=mt(this);e.finalize(),e.l!==void 0&&(this.l=[...e.l]),this.elementProperties=new Map(e.elementProperties)}static finalize(){if(this.hasOwnProperty(yt(`finalized`)))return;if(this.finalized=!0,this._$Ei(),this.hasOwnProperty(yt(`properties`))){let e=this.properties,t=[...ft(e),...pt(e)];for(let n of t)this.createProperty(n,e[n])}let e=this[Symbol.metadata];if(e!==null){let t=litPropertyMetadata.get(e);if(t!==void 0)for(let[e,n]of t)this.elementProperties.set(e,n)}this._$Eh=new Map;for(let[e,t]of this.elementProperties){let n=this._$Eu(e,t);n!==void 0&&this._$Eh.set(n,e)}this.elementStyles=this.finalizeStyles(this.styles)}static finalizeStyles(e){let t=[];if(Array.isArray(e)){let n=new Set(e.flat(1/0).reverse());for(let e of n)t.unshift(ct(e))}else e!==void 0&&t.push(ct(e));return t}static _$Eu(e,t){let n=t.attribute;return!1===n?void 0:typeof n==`string`?n:typeof e==`string`?e.toLowerCase():void 0}constructor(){super(),this._$Ep=void 0,this.isUpdatePending=!1,this.hasUpdated=!1,this._$Em=null,this._$Ev()}_$Ev(){this._$ES=new Promise(e=>this.enableUpdating=e),this._$AL=new Map,this._$E_(),this.requestUpdate(),this.constructor.l?.forEach(e=>e(this))}addController(e){(this._$EO??=new Set).add(e),this.renderRoot!==void 0&&this.isConnected&&e.hostConnected?.()}removeController(e){this._$EO?.delete(e)}_$E_(){let e=new Map,t=this.constructor.elementProperties;for(let n of t.keys())this.hasOwnProperty(n)&&(e.set(n,this[n]),delete this[n]);e.size>0&&(this._$Ep=e)}createRenderRoot(){let e=this.shadowRoot??this.attachShadow(this.constructor.shadowRootOptions);return st(e,this.constructor.elementStyles),e}connectedCallback(){this.renderRoot??=this.createRenderRoot(),this.enableUpdating(!0),this._$EO?.forEach(e=>e.hostConnected?.())}enableUpdating(e){}disconnectedCallback(){this._$EO?.forEach(e=>e.hostDisconnected?.())}attributeChangedCallback(e,t,n){this._$AK(e,n)}_$ET(e,t){let n=this.constructor.elementProperties.get(e),r=this.constructor._$Eu(e,n);if(r!==void 0&&!0===n.reflect){let i=(n.converter?.toAttribute===void 0?bt:n.converter).toAttribute(t,n.type);this._$Em=e,i==null?this.removeAttribute(r):this.setAttribute(r,i),this._$Em=null}}_$AK(e,t){let n=this.constructor,r=n._$Eh.get(e);if(r!==void 0&&this._$Em!==r){let e=n.getPropertyOptions(r),i=typeof e.converter==`function`?{fromAttribute:e.converter}:e.converter?.fromAttribute===void 0?bt:e.converter;this._$Em=r;let a=i.fromAttribute(t,e.type);this[r]=a??this._$Ej?.get(r)??a,this._$Em=null}}requestUpdate(e,t,n,r=!1,i){if(e!==void 0){let a=this.constructor;if(!1===r&&(i=this[e]),n??=a.getPropertyOptions(e),!((n.hasChanged??xt)(i,t)||n.useDefault&&n.reflect&&i===this._$Ej?.get(e)&&!this.hasAttribute(a._$Eu(e,n))))return;this.C(e,t,n)}!1===this.isUpdatePending&&(this._$ES=this._$EP())}C(e,t,{useDefault:n,reflect:r,wrapped:i},a){n&&!(this._$Ej??=new Map).has(e)&&(this._$Ej.set(e,a??t??this[e]),!0!==i||a!==void 0)||(this._$AL.has(e)||(this.hasUpdated||n||(t=void 0),this._$AL.set(e,t)),!0===r&&this._$Em!==e&&(this._$Eq??=new Set).add(e))}async _$EP(){this.isUpdatePending=!0;try{await this._$ES}catch(e){Promise.reject(e)}let e=this.scheduleUpdate();return e!=null&&await e,!this.isUpdatePending}scheduleUpdate(){return this.performUpdate()}performUpdate(){if(!this.isUpdatePending)return;if(!this.hasUpdated){if(this.renderRoot??=this.createRenderRoot(),this._$Ep){for(let[e,t]of this._$Ep)this[e]=t;this._$Ep=void 0}let e=this.constructor.elementProperties;if(e.size>0)for(let[t,n]of e){let{wrapped:e}=n,r=this[t];!0!==e||this._$AL.has(t)||r===void 0||this.C(t,void 0,n,r)}}let e=!1,t=this._$AL;try{e=this.shouldUpdate(t),e?(this.willUpdate(t),this._$EO?.forEach(e=>e.hostUpdate?.()),this.update(t)):this._$EM()}catch(t){throw e=!1,this._$EM(),t}e&&this._$AE(t)}willUpdate(e){}_$AE(e){this._$EO?.forEach(e=>e.hostUpdated?.()),this.hasUpdated||(this.hasUpdated=!0,this.firstUpdated(e)),this.updated(e)}_$EM(){this._$AL=new Map,this.isUpdatePending=!1}get updateComplete(){return this.getUpdateComplete()}getUpdateComplete(){return this._$ES}shouldUpdate(e){return!0}update(e){this._$Eq&&=this._$Eq.forEach(e=>this._$ET(e,this[e])),this._$EM()}updated(e){}firstUpdated(e){}};Ct.elementStyles=[],Ct.shadowRootOptions={mode:`open`},Ct[yt(`elementProperties`)]=new Map,Ct[yt(`finalized`)]=new Map,vt?.({ReactiveElement:Ct}),(ht.reactiveElementVersions??=[]).push(`2.1.2`);var wt=globalThis,Tt=e=>e,Et=wt.trustedTypes,Dt=Et?Et.createPolicy(`lit-html`,{createHTML:e=>e}):void 0,Ot=`$lit$`,kt=`lit$${Math.random().toFixed(9).slice(2)}$`,At=`?`+kt,jt=`<${At}>`,Mt=document,Nt=()=>Mt.createComment(``),Pt=e=>e===null||typeof e!=`object`&&typeof e!=`function`,Ft=Array.isArray,It=e=>Ft(e)||typeof e?.[Symbol.iterator]==`function`,Lt=`[ +\f\r]`,Rt=/<(?:(!--|\/[^a-zA-Z])|(\/?[a-zA-Z][^>\s]*)|(\/?$))/g,zt=/-->/g,Bt=/>/g,Vt=RegExp(`>|${Lt}(?:([^\\s"'>=/]+)(${Lt}*=${Lt}*(?:[^ \t\n\f\r"'\`<>=]|("|')|))|$)`,`g`),Ht=/'/g,Ut=/"/g,Wt=/^(?:script|style|textarea|title)$/i,C=(e=>(t,...n)=>({_$litType$:e,strings:t,values:n}))(1),Gt=Symbol.for(`lit-noChange`),w=Symbol.for(`lit-nothing`),Kt=new WeakMap,qt=Mt.createTreeWalker(Mt,129);function Jt(e,t){if(!Ft(e)||!e.hasOwnProperty(`raw`))throw Error(`invalid template strings array`);return Dt===void 0?t:Dt.createHTML(t)}var Yt=(e,t)=>{let n=e.length-1,r=[],i,a=t===2?``:t===3?``:``,o=Rt;for(let t=0;t`?(o=i??Rt,l=-1):c[1]===void 0?l=-2:(l=o.lastIndex-c[2].length,s=c[1],o=c[3]===void 0?Vt:c[3]===`"`?Ut:Ht):o===Ut||o===Ht?o=Vt:o===zt||o===Bt?o=Rt:(o=Vt,i=void 0);let d=o===Vt&&e[t+1].startsWith(`/>`)?` `:``;a+=o===Rt?n+jt:l>=0?(r.push(s),n.slice(0,l)+Ot+n.slice(l)+kt+d):n+kt+(l===-2?t:d)}return[Jt(e,a+(e[n]||``)+(t===2?``:t===3?``:``)),r]},Xt=class e{constructor({strings:t,_$litType$:n},r){let i;this.parts=[];let a=0,o=0,s=t.length-1,c=this.parts,[l,u]=Yt(t,n);if(this.el=e.createElement(l,r),qt.currentNode=this.el.content,n===2||n===3){let e=this.el.content.firstChild;e.replaceWith(...e.childNodes)}for(;(i=qt.nextNode())!==null&&c.length0){i.textContent=Et?Et.emptyScript:``;for(let n=0;n2||n[0]!==``||n[1]!==``?(this._$AH=Array(n.length-1).fill(new String),this.strings=n):this._$AH=w}_$AI(e,t=this,n,r){let i=this.strings,a=!1;if(i===void 0)e=Zt(this,e,t,0),a=!Pt(e)||e!==this._$AH&&e!==Gt,a&&(this._$AH=e);else{let r=e,o,s;for(e=i[0],o=0;o{let r=n?.renderBefore??t,i=r._$litPart$;if(i===void 0){let e=n?.renderBefore??null;r._$litPart$=i=new $t(t.insertBefore(Nt(),e),e,void 0,n??{})}return i._$AI(e),i},ln=globalThis,T=class extends Ct{constructor(){super(...arguments),this.renderOptions={host:this},this._$Do=void 0}createRenderRoot(){let e=super.createRenderRoot();return this.renderOptions.renderBefore??=e.firstChild,e}update(e){let t=this.render();this.hasUpdated||(this.renderOptions.isConnected=this.isConnected),super.update(e),this._$Do=cn(t,this.renderRoot,this.renderOptions)}connectedCallback(){super.connectedCallback(),this._$Do?.setConnected(!0)}disconnectedCallback(){super.disconnectedCallback(),this._$Do?.setConnected(!1)}render(){return Gt}};T._$litElement$=!0,T.finalized=!0,ln.litElementHydrateSupport?.({LitElement:T});var un=ln.litElementPolyfillSupport;un?.({LitElement:T}),(ln.litElementVersions??=[]).push(`4.2.2`);var dn=S` :host { display: inline-block; } @@ -112,7 +112,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value .tag--pill { border-radius: var(--sl-border-radius-pill); } -`,pn=x` +`,fn=S` :host { display: inline-block; color: var(--sl-color-neutral-600); @@ -159,7 +159,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value .icon-button__icon { pointer-events: none; } -`,mn=``;function hn(e){mn=e}function gn(e=``){if(!mn){let e=[...document.getElementsByTagName(`script`)],t=e.find(e=>e.hasAttribute(`data-shoelace`));if(t)hn(t.getAttribute(`data-shoelace`));else{let t=e.find(e=>/shoelace(\.min)?\.js($|\?)/.test(e.src)||/shoelace-autoloader(\.min)?\.js($|\?)/.test(e.src)),n=``;t&&(n=t.getAttribute(`src`)),hn(n.split(`/`).slice(0,-1).join(`/`))}}return mn.replace(/\/$/,``)+(e?`/${e.replace(/^\//,``)}`:``)}var _n={name:`default`,resolver:e=>gn(`assets/icons/${e}.svg`)},vn={caret:` +`,pn=``;function mn(e){pn=e}function hn(e=``){if(!pn){let e=[...document.getElementsByTagName(`script`)],t=e.find(e=>e.hasAttribute(`data-shoelace`));if(t)mn(t.getAttribute(`data-shoelace`));else{let t=e.find(e=>/shoelace(\.min)?\.js($|\?)/.test(e.src)||/shoelace-autoloader(\.min)?\.js($|\?)/.test(e.src)),n=``;t&&(n=t.getAttribute(`src`)),mn(n.split(`/`).slice(0,-1).join(`/`))}}return pn.replace(/\/$/,``)+(e?`/${e.replace(/^\//,``)}`:``)}var gn={name:`default`,resolver:e=>hn(`assets/icons/${e}.svg`)},_n={caret:` @@ -251,7 +251,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value - `},yn=[_n,{name:`system`,resolver:e=>e in vn?`data:image/svg+xml,${encodeURIComponent(vn[e])}`:``}],bn=[];function xn(e){bn.push(e)}function Sn(e){bn=bn.filter(t=>t!==e)}function Cn(e){return yn.find(t=>t.name===e)}function wn(e,t){Tn(e),yn.push({name:e,resolver:t.resolver,mutator:t.mutator,spriteSheet:t.spriteSheet}),bn.forEach(t=>{t.library===e&&t.setIcon()})}function Tn(e){yn=yn.filter(t=>t.name!==e)}var En=x` + `},vn=[gn,{name:`system`,resolver:e=>e in _n?`data:image/svg+xml,${encodeURIComponent(_n[e])}`:``}],yn=[];function bn(e){yn.push(e)}function xn(e){yn=yn.filter(t=>t!==e)}function Sn(e){return vn.find(t=>t.name===e)}function Cn(e,t){wn(e),vn.push({name:e,resolver:t.resolver,mutator:t.mutator,spriteSheet:t.spriteSheet}),yn.forEach(t=>{t.library===e&&t.setIcon()})}function wn(e){vn=vn.filter(t=>t.name!==e)}var Tn=S` :host { display: inline-block; width: 1em; @@ -264,7 +264,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value height: 100%; width: 100%; } -`,Dn=Object.defineProperty,On=Object.defineProperties,kn=Object.getOwnPropertyDescriptor,An=Object.getOwnPropertyDescriptors,jn=Object.getOwnPropertySymbols,Mn=Object.prototype.hasOwnProperty,Nn=Object.prototype.propertyIsEnumerable,Pn=(e,t)=>(t=Symbol[e])?t:Symbol.for(`Symbol.`+e),Fn=e=>{throw TypeError(e)},In=(e,t,n)=>t in e?Dn(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Ln=(e,t)=>{for(var n in t||={})Mn.call(t,n)&&In(e,n,t[n]);if(jn)for(var n of jn(t))Nn.call(t,n)&&In(e,n,t[n]);return e},Rn=(e,t)=>On(e,An(t)),T=(e,t,n,r)=>{for(var i=r>1?void 0:r?kn(t,n):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(i=(r?o(t,n,i):o(i))||i);return r&&i&&Dn(t,n,i),i},zn=(e,t,n)=>t.has(e)||Fn(`Cannot `+n),Bn=(e,t,n)=>(zn(e,t,`read from private field`),n?n.call(e):t.get(e)),Vn=(e,t,n)=>t.has(e)?Fn(`Cannot add the same private member more than once`):t instanceof WeakSet?t.add(e):t.set(e,n),Hn=(e,t,n,r)=>(zn(e,t,`write to private field`),r?r.call(e,n):t.set(e,n),n),Un=function(e,t){this[0]=e,this[1]=t},Wn=e=>{var t=e[Pn(`asyncIterator`)],n=!1,r,i={};return t==null?(t=e[Pn(`iterator`)](),r=e=>i[e]=n=>t[e](n)):(t=t.call(e),r=e=>i[e]=r=>{if(n){if(n=!1,e===`throw`)throw r;return r}return n=!0,{done:!1,value:new Un(new Promise(n=>{var i=t[e](r);i instanceof Object||Fn(`Object expected`),n(i)}),1)}}),i[Pn(`iterator`)]=()=>i,r(`next`),`throw`in t?r(`throw`):i.throw=e=>{throw e},`return`in t&&r(`return`),i};function E(e,t){let n=Ln({waitUntilFirstUpdate:!1},t);return(t,r)=>{let{update:i}=t,a=Array.isArray(e)?e:[e];t.update=function(e){a.forEach(t=>{let i=t;if(e.has(i)){let t=e.get(i),a=this[i];t!==a&&(!n.waitUntilFirstUpdate||this.hasUpdated)&&this[r](t,a)}}),i.call(this,e)}}}var D=x` +`,En=Object.defineProperty,Dn=Object.defineProperties,On=Object.getOwnPropertyDescriptor,kn=Object.getOwnPropertyDescriptors,An=Object.getOwnPropertySymbols,jn=Object.prototype.hasOwnProperty,Mn=Object.prototype.propertyIsEnumerable,Nn=(e,t)=>(t=Symbol[e])?t:Symbol.for(`Symbol.`+e),Pn=e=>{throw TypeError(e)},Fn=(e,t,n)=>t in e?En(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,In=(e,t)=>{for(var n in t||={})jn.call(t,n)&&Fn(e,n,t[n]);if(An)for(var n of An(t))Mn.call(t,n)&&Fn(e,n,t[n]);return e},Ln=(e,t)=>Dn(e,kn(t)),E=(e,t,n,r)=>{for(var i=r>1?void 0:r?On(t,n):t,a=e.length-1,o;a>=0;a--)(o=e[a])&&(i=(r?o(t,n,i):o(i))||i);return r&&i&&En(t,n,i),i},Rn=(e,t,n)=>t.has(e)||Pn(`Cannot `+n),zn=(e,t,n)=>(Rn(e,t,`read from private field`),n?n.call(e):t.get(e)),Bn=(e,t,n)=>t.has(e)?Pn(`Cannot add the same private member more than once`):t instanceof WeakSet?t.add(e):t.set(e,n),Vn=(e,t,n,r)=>(Rn(e,t,`write to private field`),r?r.call(e,n):t.set(e,n),n),Hn=function(e,t){this[0]=e,this[1]=t},Un=e=>{var t=e[Nn(`asyncIterator`)],n=!1,r,i={};return t==null?(t=e[Nn(`iterator`)](),r=e=>i[e]=n=>t[e](n)):(t=t.call(e),r=e=>i[e]=r=>{if(n){if(n=!1,e===`throw`)throw r;return r}return n=!0,{done:!1,value:new Hn(new Promise(n=>{var i=t[e](r);i instanceof Object||Pn(`Object expected`),n(i)}),1)}}),i[Nn(`iterator`)]=()=>i,r(`next`),`throw`in t?r(`throw`):i.throw=e=>{throw e},`return`in t&&r(`return`),i};function D(e,t){let n=In({waitUntilFirstUpdate:!1},t);return(t,r)=>{let{update:i}=t,a=Array.isArray(e)?e:[e];t.update=function(e){a.forEach(t=>{let i=t;if(e.has(i)){let t=e.get(i),a=this[i];t!==a&&(!n.waitUntilFirstUpdate||this.hasUpdated)&&this[r](t,a)}}),i.call(this,e)}}}var O=S` :host { box-sizing: border-box; } @@ -278,19 +278,19 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value [hidden] { display: none !important; } -`,O=e=>(t,n)=>{n===void 0?customElements.define(e,t):n.addInitializer(()=>{customElements.define(e,t)})},Gn={attribute:!0,type:String,converter:xt,reflect:!1,hasChanged:St},Kn=(e=Gn,t,n)=>{let{kind:r,metadata:i}=n,a=globalThis.litPropertyMetadata.get(i);if(a===void 0&&globalThis.litPropertyMetadata.set(i,a=new Map),r===`setter`&&((e=Object.create(e)).wrapped=!0),a.set(n.name,e),r===`accessor`){let{name:r}=n;return{set(n){let i=t.get.call(this);t.set.call(this,n),this.requestUpdate(r,i,e,!0,n)},init(t){return t!==void 0&&this.C(r,void 0,e,t),t}}}if(r===`setter`){let{name:r}=n;return function(n){let i=this[r];t.call(this,n),this.requestUpdate(r,i,e,!0,n)}}throw Error(`Unsupported decorator location: `+r)};function k(e){return(t,n)=>typeof n==`object`?Kn(e,t,n):((e,t,n)=>{let r=t.hasOwnProperty(n);return t.constructor.createProperty(n,e),r?Object.getOwnPropertyDescriptor(t,n):void 0})(e,t,n)}function A(e){return k({...e,state:!0,attribute:!1})}function qn(e){return(t,n)=>{let r=typeof t==`function`?t:t[n];Object.assign(r,e)}}var Jn=(e,t,n)=>(n.configurable=!0,n.enumerable=!0,Reflect.decorate&&typeof t!=`object`&&Object.defineProperty(e,t,n),n);function j(e,t){return(n,r,i)=>{let a=t=>t.renderRoot?.querySelector(e)??null;if(t){let{get:e,set:t}=typeof r==`object`?n:i??(()=>{let e=Symbol();return{get(){return this[e]},set(t){this[e]=t}}})();return Jn(n,r,{get(){let n=e.call(this);return n===void 0&&(n=a(this),(n!==null||this.hasUpdated)&&t.call(this,n)),n}})}return Jn(n,r,{get(){return a(this)}})}}var Yn,M=class extends w{constructor(){super(),Vn(this,Yn,!1),this.initialReflectedProperties=new Map,Object.entries(this.constructor.dependencies).forEach(([e,t])=>{this.constructor.define(e,t)})}emit(e,t){let n=new CustomEvent(e,Ln({bubbles:!0,cancelable:!1,composed:!0,detail:{}},t));return this.dispatchEvent(n),n}static define(e,t=this,n={}){let r=customElements.get(e);if(!r){try{customElements.define(e,t,n)}catch{customElements.define(e,class extends t{},n)}return}let i=` (unknown version)`,a=i;`version`in t&&t.version&&(i=` v`+t.version),`version`in r&&r.version&&(a=` v`+r.version),!(i&&a&&i===a)&&console.warn(`Attempted to register <${e}>${i}, but <${e}>${a} has already been registered.`)}attributeChangedCallback(e,t,n){Bn(this,Yn)||(this.constructor.elementProperties.forEach((e,t)=>{e.reflect&&this[t]!=null&&this.initialReflectedProperties.set(t,this[t])}),Hn(this,Yn,!0)),super.attributeChangedCallback(e,t,n)}willUpdate(e){super.willUpdate(e),this.initialReflectedProperties.forEach((t,n)=>{e.has(n)&&this[n]==null&&(this[n]=t)})}};Yn=new WeakMap,M.version=`2.20.1`,M.dependencies={},T([k()],M.prototype,`dir`,2),T([k()],M.prototype,`lang`,2);var{I:Xn}=sn,Zn=(e,t)=>t===void 0?e?._$litType$!==void 0:e?._$litType$===t,Qn=e=>e.strings===void 0,$n={},er=(e,t=$n)=>e._$AH=t,tr=Symbol(),nr=Symbol(),rr,ir=new Map,ar=class extends M{constructor(){super(...arguments),this.initialRender=!1,this.svg=null,this.label=``,this.library=`default`}async resolveIcon(e,t){let n;if(t?.spriteSheet)return this.svg=S` +`,k=e=>(t,n)=>{n===void 0?customElements.define(e,t):n.addInitializer(()=>{customElements.define(e,t)})},Wn={attribute:!0,type:String,converter:bt,reflect:!1,hasChanged:xt},Gn=(e=Wn,t,n)=>{let{kind:r,metadata:i}=n,a=globalThis.litPropertyMetadata.get(i);if(a===void 0&&globalThis.litPropertyMetadata.set(i,a=new Map),r===`setter`&&((e=Object.create(e)).wrapped=!0),a.set(n.name,e),r===`accessor`){let{name:r}=n;return{set(n){let i=t.get.call(this);t.set.call(this,n),this.requestUpdate(r,i,e,!0,n)},init(t){return t!==void 0&&this.C(r,void 0,e,t),t}}}if(r===`setter`){let{name:r}=n;return function(n){let i=this[r];t.call(this,n),this.requestUpdate(r,i,e,!0,n)}}throw Error(`Unsupported decorator location: `+r)};function A(e){return(t,n)=>typeof n==`object`?Gn(e,t,n):((e,t,n)=>{let r=t.hasOwnProperty(n);return t.constructor.createProperty(n,e),r?Object.getOwnPropertyDescriptor(t,n):void 0})(e,t,n)}function j(e){return A({...e,state:!0,attribute:!1})}function Kn(e){return(t,n)=>{let r=typeof t==`function`?t:t[n];Object.assign(r,e)}}var qn=(e,t,n)=>(n.configurable=!0,n.enumerable=!0,Reflect.decorate&&typeof t!=`object`&&Object.defineProperty(e,t,n),n);function M(e,t){return(n,r,i)=>{let a=t=>t.renderRoot?.querySelector(e)??null;if(t){let{get:e,set:t}=typeof r==`object`?n:i??(()=>{let e=Symbol();return{get(){return this[e]},set(t){this[e]=t}}})();return qn(n,r,{get(){let n=e.call(this);return n===void 0&&(n=a(this),(n!==null||this.hasUpdated)&&t.call(this,n)),n}})}return qn(n,r,{get(){return a(this)}})}}var Jn,N=class extends T{constructor(){super(),Bn(this,Jn,!1),this.initialReflectedProperties=new Map,Object.entries(this.constructor.dependencies).forEach(([e,t])=>{this.constructor.define(e,t)})}emit(e,t){let n=new CustomEvent(e,In({bubbles:!0,cancelable:!1,composed:!0,detail:{}},t));return this.dispatchEvent(n),n}static define(e,t=this,n={}){let r=customElements.get(e);if(!r){try{customElements.define(e,t,n)}catch{customElements.define(e,class extends t{},n)}return}let i=` (unknown version)`,a=i;`version`in t&&t.version&&(i=` v`+t.version),`version`in r&&r.version&&(a=` v`+r.version),!(i&&a&&i===a)&&console.warn(`Attempted to register <${e}>${i}, but <${e}>${a} has already been registered.`)}attributeChangedCallback(e,t,n){zn(this,Jn)||(this.constructor.elementProperties.forEach((e,t)=>{e.reflect&&this[t]!=null&&this.initialReflectedProperties.set(t,this[t])}),Vn(this,Jn,!0)),super.attributeChangedCallback(e,t,n)}willUpdate(e){super.willUpdate(e),this.initialReflectedProperties.forEach((t,n)=>{e.has(n)&&this[n]==null&&(this[n]=t)})}};Jn=new WeakMap,N.version=`2.20.1`,N.dependencies={},E([A()],N.prototype,`dir`,2),E([A()],N.prototype,`lang`,2);var{I:Yn}=on,Xn=(e,t)=>t===void 0?e?._$litType$!==void 0:e?._$litType$===t,Zn=e=>e.strings===void 0,Qn={},$n=(e,t=Qn)=>e._$AH=t,er=Symbol(),tr=Symbol(),nr,rr=new Map,ir=class extends N{constructor(){super(...arguments),this.initialRender=!1,this.svg=null,this.label=``,this.library=`default`}async resolveIcon(e,t){let n;if(t?.spriteSheet)return this.svg=C` - `,this.svg;try{if(n=await fetch(e,{mode:`cors`}),!n.ok)return n.status===410?tr:nr}catch{return nr}try{let e=document.createElement(`div`);e.innerHTML=await n.text();let t=e.firstElementChild;if((t?.tagName)?.toLowerCase()!==`svg`)return tr;rr||=new DOMParser;let r=rr.parseFromString(t.outerHTML,`text/html`).body.querySelector(`svg`);return r?(r.part.add(`svg`),document.adoptNode(r)):tr}catch{return tr}}connectedCallback(){super.connectedCallback(),xn(this)}firstUpdated(){this.initialRender=!0,this.setIcon()}disconnectedCallback(){super.disconnectedCallback(),Sn(this)}getIconSource(){let e=Cn(this.library);return this.name&&e?{url:e.resolver(this.name),fromLibrary:!0}:{url:this.src,fromLibrary:!1}}handleLabelChange(){typeof this.label==`string`&&this.label.length>0?(this.setAttribute(`role`,`img`),this.setAttribute(`aria-label`,this.label),this.removeAttribute(`aria-hidden`)):(this.removeAttribute(`role`),this.removeAttribute(`aria-label`),this.setAttribute(`aria-hidden`,`true`))}async setIcon(){var e;let{url:t,fromLibrary:n}=this.getIconSource(),r=n?Cn(this.library):void 0;if(!t){this.svg=null;return}let i=ir.get(t);if(i||(i=this.resolveIcon(t,r),ir.set(t,i)),!this.initialRender)return;let a=await i;if(a===nr&&ir.delete(t),t===this.getIconSource().url){if(Zn(a)){if(this.svg=a,r){await this.updateComplete;let e=this.shadowRoot.querySelector(`[part='svg']`);typeof r.mutator==`function`&&e&&r.mutator(e)}return}switch(a){case nr:case tr:this.svg=null,this.emit(`sl-error`);break;default:this.svg=a.cloneNode(!0),(e=r?.mutator)==null||e.call(r,this.svg),this.emit(`sl-load`)}}}render(){return this.svg}};ar.styles=[D,En],T([A()],ar.prototype,`svg`,2),T([k({reflect:!0})],ar.prototype,`name`,2),T([k()],ar.prototype,`src`,2),T([k()],ar.prototype,`label`,2),T([k({reflect:!0})],ar.prototype,`library`,2),T([E(`label`)],ar.prototype,`handleLabelChange`,1),T([E([`name`,`src`,`library`])],ar.prototype,`setIcon`,1);var or={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},sr=e=>(...t)=>({_$litDirective$:e,values:t}),cr=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,n){this._$Ct=e,this._$AM=t,this._$Ci=n}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}},N=sr(class extends cr{constructor(e){if(super(e),e.type!==or.ATTRIBUTE||e.name!==`class`||e.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(e){return` `+Object.keys(e).filter(t=>e[t]).join(` `)+` `}update(e,[t]){if(this.st===void 0){this.st=new Set,e.strings!==void 0&&(this.nt=new Set(e.strings.join(` `).split(/\s/).filter(e=>e!==``)));for(let e in t)t[e]&&!this.nt?.has(e)&&this.st.add(e);return this.render(t)}let n=e.element.classList;for(let e of this.st)e in t||(n.remove(e),this.st.delete(e));for(let e in t){let r=!!t[e];r===this.st.has(e)||this.nt?.has(e)||(r?(n.add(e),this.st.add(e)):(n.remove(e),this.st.delete(e)))}return Kt}}),lr=Symbol.for(``),ur=e=>{if(e?.r===lr)return e?._$litStatic$},dr=e=>({_$litStatic$:e,r:lr}),fr=(e,...t)=>({_$litStatic$:t.reduce((t,n,r)=>t+(e=>{if(e._$litStatic$!==void 0)return e._$litStatic$;throw Error(`Value passed to 'literal' function must be a 'literal' result: ${e}. Use 'unsafeStatic' to pass non-literal values, but\n take care to ensure page security.`)})(n)+e[r+1],e[0]),r:lr}),pr=new Map,mr=(e=>(t,...n)=>{let r=n.length,i,a,o=[],s=[],c,l=0,u=!1;for(;le??C,F=class extends M{constructor(){super(...arguments),this.hasFocus=!1,this.label=``,this.disabled=!1}handleBlur(){this.hasFocus=!1,this.emit(`sl-blur`)}handleFocus(){this.hasFocus=!0,this.emit(`sl-focus`)}handleClick(e){this.disabled&&(e.preventDefault(),e.stopPropagation())}click(){this.button.click()}focus(e){this.button.focus(e)}blur(){this.button.blur()}render(){let e=!!this.href,t=e?fr`a`:fr`button`;return mr` + `,this.svg;try{if(n=await fetch(e,{mode:`cors`}),!n.ok)return n.status===410?er:tr}catch{return tr}try{let e=document.createElement(`div`);e.innerHTML=await n.text();let t=e.firstElementChild;if((t?.tagName)?.toLowerCase()!==`svg`)return er;nr||=new DOMParser;let r=nr.parseFromString(t.outerHTML,`text/html`).body.querySelector(`svg`);return r?(r.part.add(`svg`),document.adoptNode(r)):er}catch{return er}}connectedCallback(){super.connectedCallback(),bn(this)}firstUpdated(){this.initialRender=!0,this.setIcon()}disconnectedCallback(){super.disconnectedCallback(),xn(this)}getIconSource(){let e=Sn(this.library);return this.name&&e?{url:e.resolver(this.name),fromLibrary:!0}:{url:this.src,fromLibrary:!1}}handleLabelChange(){typeof this.label==`string`&&this.label.length>0?(this.setAttribute(`role`,`img`),this.setAttribute(`aria-label`,this.label),this.removeAttribute(`aria-hidden`)):(this.removeAttribute(`role`),this.removeAttribute(`aria-label`),this.setAttribute(`aria-hidden`,`true`))}async setIcon(){var e;let{url:t,fromLibrary:n}=this.getIconSource(),r=n?Sn(this.library):void 0;if(!t){this.svg=null;return}let i=rr.get(t);if(i||(i=this.resolveIcon(t,r),rr.set(t,i)),!this.initialRender)return;let a=await i;if(a===tr&&rr.delete(t),t===this.getIconSource().url){if(Xn(a)){if(this.svg=a,r){await this.updateComplete;let e=this.shadowRoot.querySelector(`[part='svg']`);typeof r.mutator==`function`&&e&&r.mutator(e)}return}switch(a){case tr:case er:this.svg=null,this.emit(`sl-error`);break;default:this.svg=a.cloneNode(!0),(e=r?.mutator)==null||e.call(r,this.svg),this.emit(`sl-load`)}}}render(){return this.svg}};ir.styles=[O,Tn],E([j()],ir.prototype,`svg`,2),E([A({reflect:!0})],ir.prototype,`name`,2),E([A()],ir.prototype,`src`,2),E([A()],ir.prototype,`label`,2),E([A({reflect:!0})],ir.prototype,`library`,2),E([D(`label`)],ir.prototype,`handleLabelChange`,1),E([D([`name`,`src`,`library`])],ir.prototype,`setIcon`,1);var ar={ATTRIBUTE:1,CHILD:2,PROPERTY:3,BOOLEAN_ATTRIBUTE:4,EVENT:5,ELEMENT:6},or=e=>(...t)=>({_$litDirective$:e,values:t}),sr=class{constructor(e){}get _$AU(){return this._$AM._$AU}_$AT(e,t,n){this._$Ct=e,this._$AM=t,this._$Ci=n}_$AS(e,t){return this.update(e,t)}update(e,t){return this.render(...t)}},P=or(class extends sr{constructor(e){if(super(e),e.type!==ar.ATTRIBUTE||e.name!==`class`||e.strings?.length>2)throw Error("`classMap()` can only be used in the `class` attribute and must be the only part in the attribute.")}render(e){return` `+Object.keys(e).filter(t=>e[t]).join(` `)+` `}update(e,[t]){if(this.st===void 0){this.st=new Set,e.strings!==void 0&&(this.nt=new Set(e.strings.join(` `).split(/\s/).filter(e=>e!==``)));for(let e in t)t[e]&&!this.nt?.has(e)&&this.st.add(e);return this.render(t)}let n=e.element.classList;for(let e of this.st)e in t||(n.remove(e),this.st.delete(e));for(let e in t){let r=!!t[e];r===this.st.has(e)||this.nt?.has(e)||(r?(n.add(e),this.st.add(e)):(n.remove(e),this.st.delete(e)))}return Gt}}),cr=Symbol.for(``),lr=e=>{if(e?.r===cr)return e?._$litStatic$},ur=e=>({_$litStatic$:e,r:cr}),dr=(e,...t)=>({_$litStatic$:t.reduce((t,n,r)=>t+(e=>{if(e._$litStatic$!==void 0)return e._$litStatic$;throw Error(`Value passed to 'literal' function must be a 'literal' result: ${e}. Use 'unsafeStatic' to pass non-literal values, but\n take care to ensure page security.`)})(n)+e[r+1],e[0]),r:cr}),fr=new Map,pr=(e=>(t,...n)=>{let r=n.length,i,a,o=[],s=[],c,l=0,u=!1;for(;le??w,I=class extends N{constructor(){super(...arguments),this.hasFocus=!1,this.label=``,this.disabled=!1}handleBlur(){this.hasFocus=!1,this.emit(`sl-blur`)}handleFocus(){this.hasFocus=!0,this.emit(`sl-focus`)}handleClick(e){this.disabled&&(e.preventDefault(),e.stopPropagation())}click(){this.button.click()}focus(e){this.button.focus(e)}blur(){this.button.blur()}render(){let e=!!this.href,t=e?dr`a`:dr`button`;return pr` <${t} part="base" - class=${N({"icon-button":!0,"icon-button--disabled":!e&&this.disabled,"icon-button--focused":this.hasFocus})} - ?disabled=${P(e?void 0:this.disabled)} - type=${P(e?void 0:`button`)} - href=${P(e?this.href:void 0)} - target=${P(e?this.target:void 0)} - download=${P(e?this.download:void 0)} - rel=${P(e&&this.target?`noreferrer noopener`:void 0)} - role=${P(e?void 0:`button`)} + class=${P({"icon-button":!0,"icon-button--disabled":!e&&this.disabled,"icon-button--focused":this.hasFocus})} + ?disabled=${F(e?void 0:this.disabled)} + type=${F(e?void 0:`button`)} + href=${F(e?this.href:void 0)} + target=${F(e?this.target:void 0)} + download=${F(e?this.download:void 0)} + rel=${F(e&&this.target?`noreferrer noopener`:void 0)} + role=${F(e?void 0:`button`)} aria-disabled=${this.disabled?`true`:`false`} aria-label="${this.label}" tabindex=${this.disabled?`-1`:`0`} @@ -300,20 +300,20 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value > - `}};F.styles=[D,pn],F.dependencies={"sl-icon":ar},T([j(`.icon-button`)],F.prototype,`button`,2),T([A()],F.prototype,`hasFocus`,2),T([k()],F.prototype,`name`,2),T([k()],F.prototype,`library`,2),T([k()],F.prototype,`src`,2),T([k()],F.prototype,`href`,2),T([k()],F.prototype,`target`,2),T([k()],F.prototype,`download`,2),T([k()],F.prototype,`label`,2),T([k({type:Boolean,reflect:!0})],F.prototype,`disabled`,2);var hr=new Set,gr=new Map,_r,vr=`ltr`,yr=`en`,br=typeof MutationObserver<`u`&&typeof document<`u`&&document.documentElement!==void 0;if(br){let e=new MutationObserver(Sr);vr=document.documentElement.dir||`ltr`,yr=document.documentElement.lang||navigator.language,e.observe(document.documentElement,{attributes:!0,attributeFilter:[`dir`,`lang`]})}function xr(...e){e.map(e=>{let t=e.$code.toLowerCase();gr.has(t)?gr.set(t,Object.assign(Object.assign({},gr.get(t)),e)):gr.set(t,e),_r||=e}),Sr()}function Sr(){br&&(vr=document.documentElement.dir||`ltr`,yr=document.documentElement.lang||navigator.language),[...hr.keys()].map(e=>{typeof e.requestUpdate==`function`&&e.requestUpdate()})}var Cr=class{constructor(e){this.host=e,this.host.addController(this)}hostConnected(){hr.add(this.host)}hostDisconnected(){hr.delete(this.host)}dir(){return`${this.host.dir||vr}`.toLowerCase()}lang(){return`${this.host.lang||yr}`.toLowerCase()}getTranslationData(e){let t=new Intl.Locale(e.replace(/_/g,`-`)),n=t?.language.toLowerCase(),r=(t?.region)?.toLowerCase()??``;return{locale:t,language:n,region:r,primary:gr.get(`${n}-${r}`),secondary:gr.get(n)}}exists(e,t){let{primary:n,secondary:r}=this.getTranslationData(t.lang??this.lang());return t=Object.assign({includeFallback:!1},t),!!(n&&n[e]||r&&r[e]||t.includeFallback&&_r&&_r[e])}term(e,...t){let{primary:n,secondary:r}=this.getTranslationData(this.lang()),i;if(n&&n[e])i=n[e];else if(r&&r[e])i=r[e];else if(_r&&_r[e])i=_r[e];else return console.error(`No translation found for: ${String(e)}`),String(e);return typeof i==`function`?i(...t):i}date(e,t){return e=new Date(e),new Intl.DateTimeFormat(this.lang(),t).format(e)}number(e,t){return e=Number(e),isNaN(e)?``:new Intl.NumberFormat(this.lang(),t).format(e)}relativeTime(e,t,n){return new Intl.RelativeTimeFormat(this.lang(),n).format(e,t)}},wr={$code:`en`,$name:`English`,$dir:`ltr`,carousel:`Carousel`,clearEntry:`Clear entry`,close:`Close`,copied:`Copied`,copy:`Copy`,currentValue:`Current value`,error:`Error`,goToSlide:(e,t)=>`Go to slide ${e} of ${t}`,hidePassword:`Hide password`,loading:`Loading`,nextSlide:`Next slide`,numOptionsSelected:e=>e===0?`No options selected`:e===1?`1 option selected`:`${e} options selected`,previousSlide:`Previous slide`,progress:`Progress`,remove:`Remove`,resize:`Resize`,scrollToEnd:`Scroll to end`,scrollToStart:`Scroll to start`,selectAColorFromTheScreen:`Select a color from the screen`,showPassword:`Show password`,slideNum:e=>`Slide ${e}`,toggleColorFormat:`Toggle color format`};xr(wr);var Tr=wr,I=class extends Cr{};xr(Tr);var Er=class extends M{constructor(){super(...arguments),this.localize=new I(this),this.variant=`neutral`,this.size=`medium`,this.pill=!1,this.removable=!1}handleRemoveClick(){this.emit(`sl-remove`)}render(){return S` + `}};I.styles=[O,fn],I.dependencies={"sl-icon":ir},E([M(`.icon-button`)],I.prototype,`button`,2),E([j()],I.prototype,`hasFocus`,2),E([A()],I.prototype,`name`,2),E([A()],I.prototype,`library`,2),E([A()],I.prototype,`src`,2),E([A()],I.prototype,`href`,2),E([A()],I.prototype,`target`,2),E([A()],I.prototype,`download`,2),E([A()],I.prototype,`label`,2),E([A({type:Boolean,reflect:!0})],I.prototype,`disabled`,2);var mr=new Set,hr=new Map,gr,_r=`ltr`,vr=`en`,yr=typeof MutationObserver<`u`&&typeof document<`u`&&document.documentElement!==void 0;if(yr){let e=new MutationObserver(xr);_r=document.documentElement.dir||`ltr`,vr=document.documentElement.lang||navigator.language,e.observe(document.documentElement,{attributes:!0,attributeFilter:[`dir`,`lang`]})}function br(...e){e.map(e=>{let t=e.$code.toLowerCase();hr.has(t)?hr.set(t,Object.assign(Object.assign({},hr.get(t)),e)):hr.set(t,e),gr||=e}),xr()}function xr(){yr&&(_r=document.documentElement.dir||`ltr`,vr=document.documentElement.lang||navigator.language),[...mr.keys()].map(e=>{typeof e.requestUpdate==`function`&&e.requestUpdate()})}var Sr=class{constructor(e){this.host=e,this.host.addController(this)}hostConnected(){mr.add(this.host)}hostDisconnected(){mr.delete(this.host)}dir(){return`${this.host.dir||_r}`.toLowerCase()}lang(){return`${this.host.lang||vr}`.toLowerCase()}getTranslationData(e){let t=new Intl.Locale(e.replace(/_/g,`-`)),n=t?.language.toLowerCase(),r=(t?.region)?.toLowerCase()??``;return{locale:t,language:n,region:r,primary:hr.get(`${n}-${r}`),secondary:hr.get(n)}}exists(e,t){let{primary:n,secondary:r}=this.getTranslationData(t.lang??this.lang());return t=Object.assign({includeFallback:!1},t),!!(n&&n[e]||r&&r[e]||t.includeFallback&&gr&&gr[e])}term(e,...t){let{primary:n,secondary:r}=this.getTranslationData(this.lang()),i;if(n&&n[e])i=n[e];else if(r&&r[e])i=r[e];else if(gr&&gr[e])i=gr[e];else return console.error(`No translation found for: ${String(e)}`),String(e);return typeof i==`function`?i(...t):i}date(e,t){return e=new Date(e),new Intl.DateTimeFormat(this.lang(),t).format(e)}number(e,t){return e=Number(e),isNaN(e)?``:new Intl.NumberFormat(this.lang(),t).format(e)}relativeTime(e,t,n){return new Intl.RelativeTimeFormat(this.lang(),n).format(e,t)}},Cr={$code:`en`,$name:`English`,$dir:`ltr`,carousel:`Carousel`,clearEntry:`Clear entry`,close:`Close`,copied:`Copied`,copy:`Copy`,currentValue:`Current value`,error:`Error`,goToSlide:(e,t)=>`Go to slide ${e} of ${t}`,hidePassword:`Hide password`,loading:`Loading`,nextSlide:`Next slide`,numOptionsSelected:e=>e===0?`No options selected`:e===1?`1 option selected`:`${e} options selected`,previousSlide:`Previous slide`,progress:`Progress`,remove:`Remove`,resize:`Resize`,scrollToEnd:`Scroll to end`,scrollToStart:`Scroll to start`,selectAColorFromTheScreen:`Select a color from the screen`,showPassword:`Show password`,slideNum:e=>`Slide ${e}`,toggleColorFormat:`Toggle color format`};br(Cr);var wr=Cr,L=class extends Sr{};br(wr);var Tr=class extends N{constructor(){super(...arguments),this.localize=new L(this),this.variant=`neutral`,this.size=`medium`,this.pill=!1,this.removable=!1}handleRemoveClick(){this.emit(`sl-remove`)}render(){return C` - ${this.removable?S` + ${this.removable?C` `:``} - `}};Er.styles=[D,fn],Er.dependencies={"sl-icon-button":F},T([k({reflect:!0})],Er.prototype,`variant`,2),T([k({reflect:!0})],Er.prototype,`size`,2),T([k({type:Boolean,reflect:!0})],Er.prototype,`pill`,2),T([k({type:Boolean})],Er.prototype,`removable`,2),Er.define(`sl-tag`),F.define(`sl-icon-button`);var Dr=x` + `}};Tr.styles=[O,dn],Tr.dependencies={"sl-icon-button":I},E([A({reflect:!0})],Tr.prototype,`variant`,2),E([A({reflect:!0})],Tr.prototype,`size`,2),E([A({type:Boolean,reflect:!0})],Tr.prototype,`pill`,2),E([A({type:Boolean})],Tr.prototype,`removable`,2),Tr.define(`sl-tag`),I.define(`sl-icon-button`);var Er=S` :host { --max-width: 20rem; --hide-delay: 0ms; @@ -378,7 +378,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value user-select: none; -webkit-user-select: none; } -`,Or=x` +`,Dr=S` :host { --arrow-color: var(--sl-color-neutral-1000); --arrow-size: 6px; @@ -436,29 +436,29 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value var(--hover-bridge-bottom-left-x, 0) var(--hover-bridge-bottom-left-y, 0) ); } -`,kr=Math.min,Ar=Math.max,jr=Math.round,Mr=Math.floor,Nr=e=>({x:e,y:e}),Pr={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function Fr(e,t,n){return Ar(e,kr(t,n))}function Ir(e,t){return typeof e==`function`?e(t):e}function Lr(e){return e.split(`-`)[0]}function Rr(e){return e.split(`-`)[1]}function zr(e){return e===`x`?`y`:`x`}function Br(e){return e===`y`?`height`:`width`}function Vr(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function Hr(e){return zr(Vr(e))}function Ur(e,t,n){n===void 0&&(n=!1);let r=Rr(e),i=Hr(e),a=Br(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=Qr(o)),[o,Qr(o)]}function Wr(e){let t=Qr(e);return[Gr(e),t,Gr(t)]}function Gr(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var Kr=[`left`,`right`],qr=[`right`,`left`],Jr=[`top`,`bottom`],Yr=[`bottom`,`top`];function Xr(e,t,n){switch(e){case`top`:case`bottom`:return n?t?qr:Kr:t?Kr:qr;case`left`:case`right`:return t?Jr:Yr;default:return[]}}function Zr(e,t,n,r){let i=Rr(e),a=Xr(Lr(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(Gr)))),a}function Qr(e){let t=Lr(e);return Pr[t]+e.slice(t.length)}function $r(e){return{top:0,right:0,bottom:0,left:0,...e}}function ei(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:$r(e)}function ti(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function ni(e,t,n){let{reference:r,floating:i}=e,a=Vr(t),o=Hr(t),s=Br(o),c=Lr(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}switch(Rr(t)){case`start`:p[o]-=f*(n&&l?-1:1);break;case`end`:p[o]+=f*(n&&l?-1:1);break}return p}async function ri(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=Ir(t,e),p=ei(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=ti(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),ee=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},te=ti(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-te.top+p.top)/ee.y,bottom:(te.bottom-h.bottom+p.bottom)/ee.y,left:(h.left-te.left+p.left)/ee.x,right:(te.right-h.right+p.right)/ee.x}}var ii=50,ai=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:ri},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=ni(l,r,c),f=r,p=0,m={};for(let n=0;n({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0}=Ir(e,t)||{};if(l==null)return{};let d=ei(u),f={x:n,y:r},p=Hr(i),m=Br(p),h=await o.getDimensions(l),g=p===`y`,_=g?`top`:`left`,ee=g?`bottom`:`right`,te=g?`clientHeight`:`clientWidth`,ne=a.reference[m]+a.reference[p]-f[p]-a.floating[m],re=f[p]-a.reference[p],v=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l)),y=v?v[te]:0;(!y||!await(o.isElement==null?void 0:o.isElement(v)))&&(y=s.floating[te]||a.floating[m]);let ie=ne/2-re/2,ae=y/2-h[m]/2-1,oe=kr(d[_],ae),se=kr(d[ee],ae),ce=oe,le=y-h[m]-se,ue=y/2-h[m]/2+ie,de=Fr(ce,ue,le),fe=!c.arrow&&Rr(i)!=null&&ue!==de&&a.reference[m]/2-(uee<=0)){let e=(i.flip?.index||0)+1,t=v[e];if(t&&(!(u===`alignment`&&_!==Vr(t))||ae.every(e=>Vr(e.placement)===_?e.overflows[0]>0:!0)))return{data:{index:e,overflows:ae},reset:{placement:t}};let n=ae.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=ae.filter(e=>{if(re){let t=Vr(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o;break}if(r!==n)return{reset:{placement:n}}}return{}}}},ci=new Set([`left`,`top`]);async function li(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=Lr(n),s=Rr(n),c=Vr(n)===`y`,l=ci.has(o)?-1:1,u=a&&c?-1:1,d=Ir(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var ui=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await li(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},di=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=Ir(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=Vr(Lr(i)),p=zr(f),m=u[p],h=u[f];if(o){let e=p===`y`?`top`:`left`,t=p===`y`?`bottom`:`right`,n=m+d[e],r=m-d[t];m=Fr(n,m,r)}if(s){let e=f===`y`?`top`:`left`,t=f===`y`?`bottom`:`right`,n=h+d[e],r=h-d[t];h=Fr(n,h,r)}let g=c.fn({...t,[p]:m,[f]:h});return{...g,data:{x:g.x-n,y:g.y-r,enabled:{[p]:o,[f]:s}}}}}},fi=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){var n,r;let{placement:i,rects:a,platform:o,elements:s}=t,{apply:c=()=>{},...l}=Ir(e,t),u=await o.detectOverflow(t,l),d=Lr(i),f=Rr(i),p=Vr(i)===`y`,{width:m,height:h}=a.floating,g,_;d===`top`||d===`bottom`?(g=d,_=f===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?`start`:`end`)?`left`:`right`):(_=d,g=f===`end`?`top`:`bottom`);let ee=h-u.top-u.bottom,te=m-u.left-u.right,ne=kr(h-u[g],ee),re=kr(m-u[_],te),v=!t.middlewareData.shift,y=ne,ie=re;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(ie=te),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(y=ee),v&&!f){let e=Ar(u.left,0),t=Ar(u.right,0),n=Ar(u.top,0),r=Ar(u.bottom,0);p?ie=m-2*(e!==0||t!==0?e+t:Ar(u.left,u.right)):y=h-2*(n!==0||r!==0?n+r:Ar(u.top,u.bottom))}await c({...t,availableWidth:ie,availableHeight:y});let ae=await o.getDimensions(s.floating);return m!==ae.width||h!==ae.height?{reset:{rects:!0}}:{}}}};function pi(){return typeof window<`u`}function mi(e){return _i(e)?(e.nodeName||``).toLowerCase():`#document`}function hi(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function gi(e){return((_i(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function _i(e){return pi()?e instanceof Node||e instanceof hi(e).Node:!1}function vi(e){return pi()?e instanceof Element||e instanceof hi(e).Element:!1}function yi(e){return pi()?e instanceof HTMLElement||e instanceof hi(e).HTMLElement:!1}function bi(e){return!pi()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof hi(e).ShadowRoot}function xi(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=Mi(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function Si(e){return/^(table|td|th)$/.test(mi(e))}function Ci(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var wi=/transform|translate|scale|rotate|perspective|filter/,Ti=/paint|layout|strict|content/,Ei=e=>!!e&&e!==`none`,Di;function Oi(e){let t=vi(e)?Mi(e):e;return Ei(t.transform)||Ei(t.translate)||Ei(t.scale)||Ei(t.rotate)||Ei(t.perspective)||!Ai()&&(Ei(t.backdropFilter)||Ei(t.filter))||wi.test(t.willChange||``)||Ti.test(t.contain||``)}function ki(e){let t=Pi(e);for(;yi(t)&&!ji(t);){if(Oi(t))return t;if(Ci(t))return null;t=Pi(t)}return null}function Ai(){return Di??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),Di}function ji(e){return/^(html|body|#document)$/.test(mi(e))}function Mi(e){return hi(e).getComputedStyle(e)}function Ni(e){return vi(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Pi(e){if(mi(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||bi(e)&&e.host||gi(e);return bi(t)?t.host:t}function Fi(e){let t=Pi(e);return ji(t)?e.ownerDocument?e.ownerDocument.body:e.body:yi(t)&&xi(t)?t:Fi(t)}function Ii(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=Fi(e),i=r===e.ownerDocument?.body,a=hi(r);if(i){let e=Li(a);return t.concat(a,a.visualViewport||[],xi(r)?r:[],e&&n?Ii(e):[])}else return t.concat(r,Ii(r,[],n))}function Li(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Ri(e){let t=Mi(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=yi(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=jr(n)!==a||jr(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function zi(e){return vi(e)?e:e.contextElement}function Bi(e){let t=zi(e);if(!yi(t))return Nr(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=Ri(t),o=(a?jr(n.width):n.width)/r,s=(a?jr(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var Vi=Nr(0);function Hi(e){let t=hi(e);return!Ai()||!t.visualViewport?Vi:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Ui(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==hi(e)?!1:t}function Wi(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=zi(e),o=Nr(1);t&&(r?vi(r)&&(o=Bi(r)):o=Bi(e));let s=Ui(a,n,r)?Hi(a):Nr(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a){let e=hi(a),t=r&&vi(r)?hi(r):r,n=e,i=Li(n);for(;i&&r&&t!==n;){let e=Bi(i),t=i.getBoundingClientRect(),r=Mi(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=hi(i),i=Li(n)}}return ti({width:u,height:d,x:c,y:l})}function Gi(e,t){let n=Ni(e).scrollLeft;return t?t.left+n:Wi(gi(e)).left+n}function Ki(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-Gi(e,n),y:n.top+t.scrollTop}}function qi(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=gi(r),s=t?Ci(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=Nr(1),u=Nr(0),d=yi(r);if((d||!d&&!a)&&((mi(r)!==`body`||xi(o))&&(c=Ni(r)),d)){let e=Wi(r);l=Bi(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?Ki(o,c):Nr(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function Ji(e){return Array.from(e.getClientRects())}function Yi(e){let t=gi(e),n=Ni(e),r=e.ownerDocument.body,i=Ar(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=Ar(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),o=-n.scrollLeft+Gi(e),s=-n.scrollTop;return Mi(r).direction===`rtl`&&(o+=Ar(t.clientWidth,r.clientWidth)-i),{width:i,height:a,x:o,y:s}}var Xi=25;function Zi(e,t){let n=hi(e),r=gi(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;let e=Ai();(!e||e&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}let l=Gi(r);if(l<=0){let e=r.ownerDocument,t=e.body,n=getComputedStyle(t),i=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,o=Math.abs(r.clientWidth-t.clientWidth-i);o<=Xi&&(a-=o)}else l<=Xi&&(a+=l);return{width:a,height:o,x:s,y:c}}function Qi(e,t){let n=Wi(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=yi(e)?Bi(e):Nr(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function $i(e,t,n){let r;if(t===`viewport`)r=Zi(e,n);else if(t===`document`)r=Yi(gi(e));else if(vi(t))r=Qi(t,n);else{let n=Hi(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return ti(r)}function ea(e,t){let n=Pi(e);return n===t||!vi(n)||ji(n)?!1:Mi(n).position===`fixed`||ea(n,t)}function ta(e,t){let n=t.get(e);if(n)return n;let r=Ii(e,[],!1).filter(e=>vi(e)&&mi(e)!==`body`),i=null,a=Mi(e).position===`fixed`,o=a?Pi(e):e;for(;vi(o)&&!ji(o);){let t=Mi(o),n=Oi(o);!n&&t.position===`fixed`&&(i=null),(a?!n&&!i:!n&&t.position===`static`&&i&&(i.position===`absolute`||i.position===`fixed`)||xi(o)&&!n&&ea(e,o))?r=r.filter(e=>e!==o):i=t,o=Pi(o)}return t.set(e,r),r}function na(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?Ci(t)?[]:ta(t,this._c):[].concat(n),r],o=$i(t,a[0],i),s=o.top,c=o.right,l=o.bottom,u=o.left;for(let e=1;e{o(!1,1e-7)},1e3)}n===1&&!da(l,e.getBoundingClientRect())&&o(),te=!1}try{n=new IntersectionObserver(ne,{...ee,root:i.ownerDocument})}catch{n=new IntersectionObserver(ne,ee)}n.observe(e)}return o(!0),a}function pa(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=zi(e),u=i||a?[...l?Ii(l):[],...t?Ii(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n,{passive:!0}),a&&e.addEventListener(`resize`,n)});let d=l&&s?fa(l,n):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?Wi(e):null;c&&g();function g(){let t=Wi(e);h&&!da(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var ma=ui,ha=di,ga=si,_a=fi,va=oi,ya=(e,t,n)=>{let r=new Map,i={platform:ua,...n},a={...i.platform,_c:r};return ai(e,t,{...i,platform:a})};function ba(e){return Sa(e)}function xa(e){return e.assignedSlot?e.assignedSlot:e.parentNode instanceof ShadowRoot?e.parentNode.host:e.parentNode}function Sa(e){for(let t=e;t;t=xa(t))if(t instanceof Element&&getComputedStyle(t).display===`none`)return null;for(let t=xa(e);t;t=xa(t)){if(!(t instanceof Element))continue;let e=getComputedStyle(t);if(e.display!==`contents`&&(e.position!==`static`||Oi(e)||t.tagName===`BODY`))return t}return null}function Ca(e){return typeof e==`object`&&!!e&&`getBoundingClientRect`in e&&(`contextElement`in e?e.contextElement instanceof Element:!0)}var L=class extends M{constructor(){super(...arguments),this.localize=new I(this),this.active=!1,this.placement=`top`,this.strategy=`absolute`,this.distance=0,this.skidding=0,this.arrow=!1,this.arrowPlacement=`anchor`,this.arrowPadding=10,this.flip=!1,this.flipFallbackPlacements=``,this.flipFallbackStrategy=`best-fit`,this.flipPadding=0,this.shift=!1,this.shiftPadding=0,this.autoSizePadding=0,this.hoverBridge=!1,this.updateHoverBridge=()=>{if(this.hoverBridge&&this.anchorEl){let e=this.anchorEl.getBoundingClientRect(),t=this.popup.getBoundingClientRect(),n=this.placement.includes(`top`)||this.placement.includes(`bottom`),r=0,i=0,a=0,o=0,s=0,c=0,l=0,u=0;n?e.top{this.reposition()}))}async stop(){return new Promise(e=>{this.cleanup?(this.cleanup(),this.cleanup=void 0,this.removeAttribute(`data-current-placement`),this.style.removeProperty(`--auto-size-available-width`),this.style.removeProperty(`--auto-size-available-height`),requestAnimationFrame(()=>e())):e()})}reposition(){if(!this.active||!this.anchorEl)return;let e=[ma({mainAxis:this.distance,crossAxis:this.skidding})];this.sync?e.push(_a({apply:({rects:e})=>{let t=this.sync===`width`||this.sync===`both`,n=this.sync===`height`||this.sync===`both`;this.popup.style.width=t?`${e.reference.width}px`:``,this.popup.style.height=n?`${e.reference.height}px`:``}})):(this.popup.style.width=``,this.popup.style.height=``),this.flip&&e.push(ga({boundary:this.flipBoundary,fallbackPlacements:this.flipFallbackPlacements,fallbackStrategy:this.flipFallbackStrategy===`best-fit`?`bestFit`:`initialPlacement`,padding:this.flipPadding})),this.shift&&e.push(ha({boundary:this.shiftBoundary,padding:this.shiftPadding})),this.autoSize?e.push(_a({boundary:this.autoSizeBoundary,padding:this.autoSizePadding,apply:({availableWidth:e,availableHeight:t})=>{this.autoSize===`vertical`||this.autoSize===`both`?this.style.setProperty(`--auto-size-available-height`,`${t}px`):this.style.removeProperty(`--auto-size-available-height`),this.autoSize===`horizontal`||this.autoSize===`both`?this.style.setProperty(`--auto-size-available-width`,`${e}px`):this.style.removeProperty(`--auto-size-available-width`)}})):(this.style.removeProperty(`--auto-size-available-width`),this.style.removeProperty(`--auto-size-available-height`)),this.arrow&&e.push(va({element:this.arrowEl,padding:this.arrowPadding}));let t=this.strategy===`absolute`?e=>ua.getOffsetParent(e,ba):ua.getOffsetParent;ya(this.anchorEl,this.popup,{placement:this.placement,middleware:e,strategy:this.strategy,platform:Rn(Ln({},ua),{getOffsetParent:t})}).then(({x:e,y:t,middlewareData:n,placement:r})=>{let i=this.localize.dir()===`rtl`,a={top:`bottom`,right:`left`,bottom:`top`,left:`right`}[r.split(`-`)[0]];if(this.setAttribute(`data-current-placement`,r),Object.assign(this.popup.style,{left:`${e}px`,top:`${t}px`}),this.arrow){let e=n.arrow.x,t=n.arrow.y,r=``,o=``,s=``,c=``;if(this.arrowPlacement===`start`){let n=typeof e==`number`?`calc(${this.arrowPadding}px - var(--arrow-padding-offset))`:``;r=typeof t==`number`?`calc(${this.arrowPadding}px - var(--arrow-padding-offset))`:``,o=i?n:``,c=i?``:n}else if(this.arrowPlacement===`end`){let n=typeof e==`number`?`calc(${this.arrowPadding}px - var(--arrow-padding-offset))`:``;o=i?``:n,c=i?n:``,s=typeof t==`number`?`calc(${this.arrowPadding}px - var(--arrow-padding-offset))`:``}else this.arrowPlacement===`center`?(c=typeof e==`number`?`calc(50% - var(--arrow-size-diagonal))`:``,r=typeof t==`number`?`calc(50% - var(--arrow-size-diagonal))`:``):(c=typeof e==`number`?`${e}px`:``,r=typeof t==`number`?`${t}px`:``);Object.assign(this.arrowEl.style,{top:r,right:o,bottom:s,left:c,[a]:`calc(var(--arrow-size-diagonal) * -1)`})}}),requestAnimationFrame(()=>this.updateHoverBridge()),this.emit(`sl-reposition`)}render(){return S` +`,Or=Math.min,kr=Math.max,Ar=Math.round,jr=Math.floor,Mr=e=>({x:e,y:e}),Nr={left:`right`,right:`left`,bottom:`top`,top:`bottom`};function Pr(e,t,n){return kr(e,Or(t,n))}function Fr(e,t){return typeof e==`function`?e(t):e}function Ir(e){return e.split(`-`)[0]}function Lr(e){return e.split(`-`)[1]}function Rr(e){return e===`x`?`y`:`x`}function zr(e){return e===`y`?`height`:`width`}function Br(e){let t=e[0];return t===`t`||t===`b`?`y`:`x`}function Vr(e){return Rr(Br(e))}function Hr(e,t,n){n===void 0&&(n=!1);let r=Lr(e),i=Vr(e),a=zr(i),o=i===`x`?r===(n?`end`:`start`)?`right`:`left`:r===`start`?`bottom`:`top`;return t.reference[a]>t.floating[a]&&(o=Zr(o)),[o,Zr(o)]}function Ur(e){let t=Zr(e);return[Wr(e),t,Wr(t)]}function Wr(e){return e.includes(`start`)?e.replace(`start`,`end`):e.replace(`end`,`start`)}var Gr=[`left`,`right`],Kr=[`right`,`left`],qr=[`top`,`bottom`],Jr=[`bottom`,`top`];function Yr(e,t,n){switch(e){case`top`:case`bottom`:return n?t?Kr:Gr:t?Gr:Kr;case`left`:case`right`:return t?qr:Jr;default:return[]}}function Xr(e,t,n,r){let i=Lr(e),a=Yr(Ir(e),n===`start`,r);return i&&(a=a.map(e=>e+`-`+i),t&&(a=a.concat(a.map(Wr)))),a}function Zr(e){let t=Ir(e);return Nr[t]+e.slice(t.length)}function Qr(e){return{top:0,right:0,bottom:0,left:0,...e}}function $r(e){return typeof e==`number`?{top:e,right:e,bottom:e,left:e}:Qr(e)}function ei(e){let{x:t,y:n,width:r,height:i}=e;return{width:r,height:i,top:n,left:t,right:t+r,bottom:n+i,x:t,y:n}}function ti(e,t,n){let{reference:r,floating:i}=e,a=Br(t),o=Vr(t),s=zr(o),c=Ir(t),l=a===`y`,u=r.x+r.width/2-i.width/2,d=r.y+r.height/2-i.height/2,f=r[s]/2-i[s]/2,p;switch(c){case`top`:p={x:u,y:r.y-i.height};break;case`bottom`:p={x:u,y:r.y+r.height};break;case`right`:p={x:r.x+r.width,y:d};break;case`left`:p={x:r.x-i.width,y:d};break;default:p={x:r.x,y:r.y}}switch(Lr(t)){case`start`:p[o]-=f*(n&&l?-1:1);break;case`end`:p[o]+=f*(n&&l?-1:1);break}return p}async function ni(e,t){t===void 0&&(t={});let{x:n,y:r,platform:i,rects:a,elements:o,strategy:s}=e,{boundary:c=`clippingAncestors`,rootBoundary:l=`viewport`,elementContext:u=`floating`,altBoundary:d=!1,padding:f=0}=Fr(t,e),p=$r(f),m=o[d?u===`floating`?`reference`:`floating`:u],h=ei(await i.getClippingRect({element:await(i.isElement==null?void 0:i.isElement(m))??!0?m:m.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(o.floating)),boundary:c,rootBoundary:l,strategy:s})),g=u===`floating`?{x:n,y:r,width:a.floating.width,height:a.floating.height}:a.reference,_=await(i.getOffsetParent==null?void 0:i.getOffsetParent(o.floating)),v=await(i.isElement==null?void 0:i.isElement(_))&&await(i.getScale==null?void 0:i.getScale(_))||{x:1,y:1},ee=ei(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:o,rect:g,offsetParent:_,strategy:s}):g);return{top:(h.top-ee.top+p.top)/v.y,bottom:(ee.bottom-h.bottom+p.bottom)/v.y,left:(h.left-ee.left+p.left)/v.x,right:(ee.right-h.right+p.right)/v.x}}var ri=50,ii=async(e,t,n)=>{let{placement:r=`bottom`,strategy:i=`absolute`,middleware:a=[],platform:o}=n,s=o.detectOverflow?o:{...o,detectOverflow:ni},c=await(o.isRTL==null?void 0:o.isRTL(t)),l=await o.getElementRects({reference:e,floating:t,strategy:i}),{x:u,y:d}=ti(l,r,c),f=r,p=0,m={};for(let n=0;n({name:`arrow`,options:e,async fn(t){let{x:n,y:r,placement:i,rects:a,platform:o,elements:s,middlewareData:c}=t,{element:l,padding:u=0}=Fr(e,t)||{};if(l==null)return{};let d=$r(u),f={x:n,y:r},p=Vr(i),m=zr(p),h=await o.getDimensions(l),g=p===`y`,_=g?`top`:`left`,v=g?`bottom`:`right`,ee=g?`clientHeight`:`clientWidth`,te=a.reference[m]+a.reference[p]-f[p]-a.floating[m],ne=f[p]-a.reference[p],y=await(o.getOffsetParent==null?void 0:o.getOffsetParent(l)),b=y?y[ee]:0;(!b||!await(o.isElement==null?void 0:o.isElement(y)))&&(b=s.floating[ee]||a.floating[m]);let re=te/2-ne/2,ie=b/2-h[m]/2-1,ae=Or(d[_],ie),oe=Or(d[v],ie),se=ae,ce=b-h[m]-oe,le=b/2-h[m]/2+re,ue=Pr(se,le,ce),de=!c.arrow&&Lr(i)!=null&&le!==ue&&a.reference[m]/2-(lee<=0)){let e=(i.flip?.index||0)+1,t=y[e];if(t&&(!(u===`alignment`&&_!==Br(t))||ie.every(e=>Br(e.placement)===_?e.overflows[0]>0:!0)))return{data:{index:e,overflows:ie},reset:{placement:t}};let n=ie.filter(e=>e.overflows[0]<=0).sort((e,t)=>e.overflows[1]-t.overflows[1])[0]?.placement;if(!n)switch(f){case`bestFit`:{let e=ie.filter(e=>{if(ne){let t=Br(e.placement);return t===_||t===`y`}return!0}).map(e=>[e.placement,e.overflows.filter(e=>e>0).reduce((e,t)=>e+t,0)]).sort((e,t)=>e[1]-t[1])[0]?.[0];e&&(n=e);break}case`initialPlacement`:n=o;break}if(r!==n)return{reset:{placement:n}}}return{}}}},si=new Set([`left`,`top`]);async function ci(e,t){let{placement:n,platform:r,elements:i}=e,a=await(r.isRTL==null?void 0:r.isRTL(i.floating)),o=Ir(n),s=Lr(n),c=Br(n)===`y`,l=si.has(o)?-1:1,u=a&&c?-1:1,d=Fr(t,e),{mainAxis:f,crossAxis:p,alignmentAxis:m}=typeof d==`number`?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return s&&typeof m==`number`&&(p=s===`end`?m*-1:m),c?{x:p*u,y:f*l}:{x:f*l,y:p*u}}var li=function(e){return e===void 0&&(e=0),{name:`offset`,options:e,async fn(t){var n;let{x:r,y:i,placement:a,middlewareData:o}=t,s=await ci(t,e);return a===o.offset?.placement&&(n=o.arrow)!=null&&n.alignmentOffset?{}:{x:r+s.x,y:i+s.y,data:{...s,placement:a}}}}},ui=function(e){return e===void 0&&(e={}),{name:`shift`,options:e,async fn(t){let{x:n,y:r,placement:i,platform:a}=t,{mainAxis:o=!0,crossAxis:s=!1,limiter:c={fn:e=>{let{x:t,y:n}=e;return{x:t,y:n}}},...l}=Fr(e,t),u={x:n,y:r},d=await a.detectOverflow(t,l),f=Br(Ir(i)),p=Rr(f),m=u[p],h=u[f];if(o){let e=p===`y`?`top`:`left`,t=p===`y`?`bottom`:`right`,n=m+d[e],r=m-d[t];m=Pr(n,m,r)}if(s){let e=f===`y`?`top`:`left`,t=f===`y`?`bottom`:`right`,n=h+d[e],r=h-d[t];h=Pr(n,h,r)}let g=c.fn({...t,[p]:m,[f]:h});return{...g,data:{x:g.x-n,y:g.y-r,enabled:{[p]:o,[f]:s}}}}}},di=function(e){return e===void 0&&(e={}),{name:`size`,options:e,async fn(t){var n,r;let{placement:i,rects:a,platform:o,elements:s}=t,{apply:c=()=>{},...l}=Fr(e,t),u=await o.detectOverflow(t,l),d=Ir(i),f=Lr(i),p=Br(i)===`y`,{width:m,height:h}=a.floating,g,_;d===`top`||d===`bottom`?(g=d,_=f===(await(o.isRTL==null?void 0:o.isRTL(s.floating))?`start`:`end`)?`left`:`right`):(_=d,g=f===`end`?`top`:`bottom`);let v=h-u.top-u.bottom,ee=m-u.left-u.right,te=Or(h-u[g],v),ne=Or(m-u[_],ee),y=!t.middlewareData.shift,b=te,re=ne;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(re=ee),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(b=v),y&&!f){let e=kr(u.left,0),t=kr(u.right,0),n=kr(u.top,0),r=kr(u.bottom,0);p?re=m-2*(e!==0||t!==0?e+t:kr(u.left,u.right)):b=h-2*(n!==0||r!==0?n+r:kr(u.top,u.bottom))}await c({...t,availableWidth:re,availableHeight:b});let ie=await o.getDimensions(s.floating);return m!==ie.width||h!==ie.height?{reset:{rects:!0}}:{}}}};function fi(){return typeof window<`u`}function pi(e){return gi(e)?(e.nodeName||``).toLowerCase():`#document`}function mi(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function hi(e){return((gi(e)?e.ownerDocument:e.document)||window.document)?.documentElement}function gi(e){return fi()?e instanceof Node||e instanceof mi(e).Node:!1}function _i(e){return fi()?e instanceof Element||e instanceof mi(e).Element:!1}function vi(e){return fi()?e instanceof HTMLElement||e instanceof mi(e).HTMLElement:!1}function yi(e){return!fi()||typeof ShadowRoot>`u`?!1:e instanceof ShadowRoot||e instanceof mi(e).ShadowRoot}function bi(e){let{overflow:t,overflowX:n,overflowY:r,display:i}=ji(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&i!==`inline`&&i!==`contents`}function xi(e){return/^(table|td|th)$/.test(pi(e))}function Si(e){try{if(e.matches(`:popover-open`))return!0}catch{}try{return e.matches(`:modal`)}catch{return!1}}var Ci=/transform|translate|scale|rotate|perspective|filter/,wi=/paint|layout|strict|content/,Ti=e=>!!e&&e!==`none`,Ei;function Di(e){let t=_i(e)?ji(e):e;return Ti(t.transform)||Ti(t.translate)||Ti(t.scale)||Ti(t.rotate)||Ti(t.perspective)||!ki()&&(Ti(t.backdropFilter)||Ti(t.filter))||Ci.test(t.willChange||``)||wi.test(t.contain||``)}function Oi(e){let t=Ni(e);for(;vi(t)&&!Ai(t);){if(Di(t))return t;if(Si(t))return null;t=Ni(t)}return null}function ki(){return Ei??=typeof CSS<`u`&&CSS.supports&&CSS.supports(`-webkit-backdrop-filter`,`none`),Ei}function Ai(e){return/^(html|body|#document)$/.test(pi(e))}function ji(e){return mi(e).getComputedStyle(e)}function Mi(e){return _i(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ni(e){if(pi(e)===`html`)return e;let t=e.assignedSlot||e.parentNode||yi(e)&&e.host||hi(e);return yi(t)?t.host:t}function Pi(e){let t=Ni(e);return Ai(t)?e.ownerDocument?e.ownerDocument.body:e.body:vi(t)&&bi(t)?t:Pi(t)}function Fi(e,t,n){t===void 0&&(t=[]),n===void 0&&(n=!0);let r=Pi(e),i=r===e.ownerDocument?.body,a=mi(r);if(i){let e=Ii(a);return t.concat(a,a.visualViewport||[],bi(r)?r:[],e&&n?Fi(e):[])}else return t.concat(r,Fi(r,[],n))}function Ii(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Li(e){let t=ji(e),n=parseFloat(t.width)||0,r=parseFloat(t.height)||0,i=vi(e),a=i?e.offsetWidth:n,o=i?e.offsetHeight:r,s=Ar(n)!==a||Ar(r)!==o;return s&&(n=a,r=o),{width:n,height:r,$:s}}function Ri(e){return _i(e)?e:e.contextElement}function zi(e){let t=Ri(e);if(!vi(t))return Mr(1);let n=t.getBoundingClientRect(),{width:r,height:i,$:a}=Li(t),o=(a?Ar(n.width):n.width)/r,s=(a?Ar(n.height):n.height)/i;return(!o||!Number.isFinite(o))&&(o=1),(!s||!Number.isFinite(s))&&(s=1),{x:o,y:s}}var Bi=Mr(0);function Vi(e){let t=mi(e);return!ki()||!t.visualViewport?Bi:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function Hi(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==mi(e)?!1:t}function Ui(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);let i=e.getBoundingClientRect(),a=Ri(e),o=Mr(1);t&&(r?_i(r)&&(o=zi(r)):o=zi(e));let s=Hi(a,n,r)?Vi(a):Mr(0),c=(i.left+s.x)/o.x,l=(i.top+s.y)/o.y,u=i.width/o.x,d=i.height/o.y;if(a){let e=mi(a),t=r&&_i(r)?mi(r):r,n=e,i=Ii(n);for(;i&&r&&t!==n;){let e=zi(i),t=i.getBoundingClientRect(),r=ji(i),a=t.left+(i.clientLeft+parseFloat(r.paddingLeft))*e.x,o=t.top+(i.clientTop+parseFloat(r.paddingTop))*e.y;c*=e.x,l*=e.y,u*=e.x,d*=e.y,c+=a,l+=o,n=mi(i),i=Ii(n)}}return ei({width:u,height:d,x:c,y:l})}function Wi(e,t){let n=Mi(e).scrollLeft;return t?t.left+n:Ui(hi(e)).left+n}function Gi(e,t){let n=e.getBoundingClientRect();return{x:n.left+t.scrollLeft-Wi(e,n),y:n.top+t.scrollTop}}function Ki(e){let{elements:t,rect:n,offsetParent:r,strategy:i}=e,a=i===`fixed`,o=hi(r),s=t?Si(t.floating):!1;if(r===o||s&&a)return n;let c={scrollLeft:0,scrollTop:0},l=Mr(1),u=Mr(0),d=vi(r);if((d||!d&&!a)&&((pi(r)!==`body`||bi(o))&&(c=Mi(r)),d)){let e=Ui(r);l=zi(r),u.x=e.x+r.clientLeft,u.y=e.y+r.clientTop}let f=o&&!d&&!a?Gi(o,c):Mr(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-c.scrollLeft*l.x+u.x+f.x,y:n.y*l.y-c.scrollTop*l.y+u.y+f.y}}function qi(e){return Array.from(e.getClientRects())}function Ji(e){let t=hi(e),n=Mi(e),r=e.ownerDocument.body,i=kr(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),a=kr(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight),o=-n.scrollLeft+Wi(e),s=-n.scrollTop;return ji(r).direction===`rtl`&&(o+=kr(t.clientWidth,r.clientWidth)-i),{width:i,height:a,x:o,y:s}}var Yi=25;function Xi(e,t){let n=mi(e),r=hi(e),i=n.visualViewport,a=r.clientWidth,o=r.clientHeight,s=0,c=0;if(i){a=i.width,o=i.height;let e=ki();(!e||e&&t===`fixed`)&&(s=i.offsetLeft,c=i.offsetTop)}let l=Wi(r);if(l<=0){let e=r.ownerDocument,t=e.body,n=getComputedStyle(t),i=e.compatMode===`CSS1Compat`&&parseFloat(n.marginLeft)+parseFloat(n.marginRight)||0,o=Math.abs(r.clientWidth-t.clientWidth-i);o<=Yi&&(a-=o)}else l<=Yi&&(a+=l);return{width:a,height:o,x:s,y:c}}function Zi(e,t){let n=Ui(e,!0,t===`fixed`),r=n.top+e.clientTop,i=n.left+e.clientLeft,a=vi(e)?zi(e):Mr(1);return{width:e.clientWidth*a.x,height:e.clientHeight*a.y,x:i*a.x,y:r*a.y}}function Qi(e,t,n){let r;if(t===`viewport`)r=Xi(e,n);else if(t===`document`)r=Ji(hi(e));else if(_i(t))r=Zi(t,n);else{let n=Vi(e);r={x:t.x-n.x,y:t.y-n.y,width:t.width,height:t.height}}return ei(r)}function $i(e,t){let n=Ni(e);return n===t||!_i(n)||Ai(n)?!1:ji(n).position===`fixed`||$i(n,t)}function ea(e,t){let n=t.get(e);if(n)return n;let r=Fi(e,[],!1).filter(e=>_i(e)&&pi(e)!==`body`),i=null,a=ji(e).position===`fixed`,o=a?Ni(e):e;for(;_i(o)&&!Ai(o);){let t=ji(o),n=Di(o);!n&&t.position===`fixed`&&(i=null),(a?!n&&!i:!n&&t.position===`static`&&i&&(i.position===`absolute`||i.position===`fixed`)||bi(o)&&!n&&$i(e,o))?r=r.filter(e=>e!==o):i=t,o=Ni(o)}return t.set(e,r),r}function ta(e){let{element:t,boundary:n,rootBoundary:r,strategy:i}=e,a=[...n===`clippingAncestors`?Si(t)?[]:ea(t,this._c):[].concat(n),r],o=Qi(t,a[0],i),s=o.top,c=o.right,l=o.bottom,u=o.left;for(let e=1;e{o(!1,1e-7)},1e3)}n===1&&!ua(l,e.getBoundingClientRect())&&o(),ee=!1}try{n=new IntersectionObserver(te,{...v,root:i.ownerDocument})}catch{n=new IntersectionObserver(te,v)}n.observe(e)}return o(!0),a}function fa(e,t,n,r){r===void 0&&(r={});let{ancestorScroll:i=!0,ancestorResize:a=!0,elementResize:o=typeof ResizeObserver==`function`,layoutShift:s=typeof IntersectionObserver==`function`,animationFrame:c=!1}=r,l=Ri(e),u=i||a?[...l?Fi(l):[],...t?Fi(t):[]]:[];u.forEach(e=>{i&&e.addEventListener(`scroll`,n,{passive:!0}),a&&e.addEventListener(`resize`,n)});let d=l&&s?da(l,n):null,f=-1,p=null;o&&(p=new ResizeObserver(e=>{let[r]=e;r&&r.target===l&&p&&t&&(p.unobserve(t),cancelAnimationFrame(f),f=requestAnimationFrame(()=>{var e;(e=p)==null||e.observe(t)})),n()}),l&&!c&&p.observe(l),t&&p.observe(t));let m,h=c?Ui(e):null;c&&g();function g(){let t=Ui(e);h&&!ua(h,t)&&n(),h=t,m=requestAnimationFrame(g)}return n(),()=>{var e;u.forEach(e=>{i&&e.removeEventListener(`scroll`,n),a&&e.removeEventListener(`resize`,n)}),d?.(),(e=p)==null||e.disconnect(),p=null,c&&cancelAnimationFrame(m)}}var pa=li,ma=ui,ha=oi,ga=di,_a=ai,va=(e,t,n)=>{let r=new Map,i={platform:la,...n},a={...i.platform,_c:r};return ii(e,t,{...i,platform:a})};function ya(e){return xa(e)}function ba(e){return e.assignedSlot?e.assignedSlot:e.parentNode instanceof ShadowRoot?e.parentNode.host:e.parentNode}function xa(e){for(let t=e;t;t=ba(t))if(t instanceof Element&&getComputedStyle(t).display===`none`)return null;for(let t=ba(e);t;t=ba(t)){if(!(t instanceof Element))continue;let e=getComputedStyle(t);if(e.display!==`contents`&&(e.position!==`static`||Di(e)||t.tagName===`BODY`))return t}return null}function Sa(e){return typeof e==`object`&&!!e&&`getBoundingClientRect`in e&&(`contextElement`in e?e.contextElement instanceof Element:!0)}var R=class extends N{constructor(){super(...arguments),this.localize=new L(this),this.active=!1,this.placement=`top`,this.strategy=`absolute`,this.distance=0,this.skidding=0,this.arrow=!1,this.arrowPlacement=`anchor`,this.arrowPadding=10,this.flip=!1,this.flipFallbackPlacements=``,this.flipFallbackStrategy=`best-fit`,this.flipPadding=0,this.shift=!1,this.shiftPadding=0,this.autoSizePadding=0,this.hoverBridge=!1,this.updateHoverBridge=()=>{if(this.hoverBridge&&this.anchorEl){let e=this.anchorEl.getBoundingClientRect(),t=this.popup.getBoundingClientRect(),n=this.placement.includes(`top`)||this.placement.includes(`bottom`),r=0,i=0,a=0,o=0,s=0,c=0,l=0,u=0;n?e.top{this.reposition()}))}async stop(){return new Promise(e=>{this.cleanup?(this.cleanup(),this.cleanup=void 0,this.removeAttribute(`data-current-placement`),this.style.removeProperty(`--auto-size-available-width`),this.style.removeProperty(`--auto-size-available-height`),requestAnimationFrame(()=>e())):e()})}reposition(){if(!this.active||!this.anchorEl)return;let e=[pa({mainAxis:this.distance,crossAxis:this.skidding})];this.sync?e.push(ga({apply:({rects:e})=>{let t=this.sync===`width`||this.sync===`both`,n=this.sync===`height`||this.sync===`both`;this.popup.style.width=t?`${e.reference.width}px`:``,this.popup.style.height=n?`${e.reference.height}px`:``}})):(this.popup.style.width=``,this.popup.style.height=``),this.flip&&e.push(ha({boundary:this.flipBoundary,fallbackPlacements:this.flipFallbackPlacements,fallbackStrategy:this.flipFallbackStrategy===`best-fit`?`bestFit`:`initialPlacement`,padding:this.flipPadding})),this.shift&&e.push(ma({boundary:this.shiftBoundary,padding:this.shiftPadding})),this.autoSize?e.push(ga({boundary:this.autoSizeBoundary,padding:this.autoSizePadding,apply:({availableWidth:e,availableHeight:t})=>{this.autoSize===`vertical`||this.autoSize===`both`?this.style.setProperty(`--auto-size-available-height`,`${t}px`):this.style.removeProperty(`--auto-size-available-height`),this.autoSize===`horizontal`||this.autoSize===`both`?this.style.setProperty(`--auto-size-available-width`,`${e}px`):this.style.removeProperty(`--auto-size-available-width`)}})):(this.style.removeProperty(`--auto-size-available-width`),this.style.removeProperty(`--auto-size-available-height`)),this.arrow&&e.push(_a({element:this.arrowEl,padding:this.arrowPadding}));let t=this.strategy===`absolute`?e=>la.getOffsetParent(e,ya):la.getOffsetParent;va(this.anchorEl,this.popup,{placement:this.placement,middleware:e,strategy:this.strategy,platform:Ln(In({},la),{getOffsetParent:t})}).then(({x:e,y:t,middlewareData:n,placement:r})=>{let i=this.localize.dir()===`rtl`,a={top:`bottom`,right:`left`,bottom:`top`,left:`right`}[r.split(`-`)[0]];if(this.setAttribute(`data-current-placement`,r),Object.assign(this.popup.style,{left:`${e}px`,top:`${t}px`}),this.arrow){let e=n.arrow.x,t=n.arrow.y,r=``,o=``,s=``,c=``;if(this.arrowPlacement===`start`){let n=typeof e==`number`?`calc(${this.arrowPadding}px - var(--arrow-padding-offset))`:``;r=typeof t==`number`?`calc(${this.arrowPadding}px - var(--arrow-padding-offset))`:``,o=i?n:``,c=i?``:n}else if(this.arrowPlacement===`end`){let n=typeof e==`number`?`calc(${this.arrowPadding}px - var(--arrow-padding-offset))`:``;o=i?``:n,c=i?n:``,s=typeof t==`number`?`calc(${this.arrowPadding}px - var(--arrow-padding-offset))`:``}else this.arrowPlacement===`center`?(c=typeof e==`number`?`calc(50% - var(--arrow-size-diagonal))`:``,r=typeof t==`number`?`calc(50% - var(--arrow-size-diagonal))`:``):(c=typeof e==`number`?`${e}px`:``,r=typeof t==`number`?`${t}px`:``);Object.assign(this.arrowEl.style,{top:r,right:o,bottom:s,left:c,[a]:`calc(var(--arrow-size-diagonal) * -1)`})}}),requestAnimationFrame(()=>this.updateHoverBridge()),this.emit(`sl-reposition`)}render(){return C`
- ${this.arrow?S``:``} + ${this.arrow?C``:``}
- `}};L.styles=[D,Or],T([j(`.popup`)],L.prototype,`popup`,2),T([j(`.popup__arrow`)],L.prototype,`arrowEl`,2),T([k()],L.prototype,`anchor`,2),T([k({type:Boolean,reflect:!0})],L.prototype,`active`,2),T([k({reflect:!0})],L.prototype,`placement`,2),T([k({reflect:!0})],L.prototype,`strategy`,2),T([k({type:Number})],L.prototype,`distance`,2),T([k({type:Number})],L.prototype,`skidding`,2),T([k({type:Boolean})],L.prototype,`arrow`,2),T([k({attribute:`arrow-placement`})],L.prototype,`arrowPlacement`,2),T([k({attribute:`arrow-padding`,type:Number})],L.prototype,`arrowPadding`,2),T([k({type:Boolean})],L.prototype,`flip`,2),T([k({attribute:`flip-fallback-placements`,converter:{fromAttribute:e=>e.split(` `).map(e=>e.trim()).filter(e=>e!==``),toAttribute:e=>e.join(` `)}})],L.prototype,`flipFallbackPlacements`,2),T([k({attribute:`flip-fallback-strategy`})],L.prototype,`flipFallbackStrategy`,2),T([k({type:Object})],L.prototype,`flipBoundary`,2),T([k({attribute:`flip-padding`,type:Number})],L.prototype,`flipPadding`,2),T([k({type:Boolean})],L.prototype,`shift`,2),T([k({type:Object})],L.prototype,`shiftBoundary`,2),T([k({attribute:`shift-padding`,type:Number})],L.prototype,`shiftPadding`,2),T([k({attribute:`auto-size`})],L.prototype,`autoSize`,2),T([k()],L.prototype,`sync`,2),T([k({type:Object})],L.prototype,`autoSizeBoundary`,2),T([k({attribute:`auto-size-padding`,type:Number})],L.prototype,`autoSizePadding`,2),T([k({attribute:`hover-bridge`,type:Boolean})],L.prototype,`hoverBridge`,2);var wa=new Map,Ta=new WeakMap;function Ea(e){return e??{keyframes:[],options:{duration:0}}}function Da(e,t){return t.toLowerCase()===`rtl`?{keyframes:e.rtlKeyframes||e.keyframes,options:e.options}:e}function R(e,t){wa.set(e,Ea(t))}function z(e,t,n){let r=Ta.get(e);if(r?.[t])return Da(r[t],n.dir);let i=wa.get(t);return i?Da(i,n.dir):{keyframes:[],options:{duration:0}}}function Oa(e,t){return new Promise(n=>{function r(i){i.target===e&&(e.removeEventListener(t,r),n())}e.addEventListener(t,r)})}function B(e,t,n){return new Promise(r=>{if(n?.duration===1/0)throw Error(`Promise-based animations must be finite.`);let i=e.animate(t,Rn(Ln({},n),{duration:Aa()?0:n.duration}));i.addEventListener(`cancel`,r,{once:!0}),i.addEventListener(`finish`,r,{once:!0})})}function ka(e){return e=e.toString().toLowerCase(),e.indexOf(`ms`)>-1?parseFloat(e):e.indexOf(`s`)>-1?parseFloat(e)*1e3:parseFloat(e)}function Aa(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}function ja(e){return Promise.all(e.getAnimations().map(e=>new Promise(t=>{e.cancel(),requestAnimationFrame(t)})))}function Ma(e,t){return e.map(e=>Rn(Ln({},e),{height:e.height===`auto`?`${t}px`:e.height}))}var V=class extends M{constructor(){super(),this.localize=new I(this),this.content=``,this.placement=`top`,this.disabled=!1,this.distance=8,this.open=!1,this.skidding=0,this.trigger=`hover focus`,this.hoist=!1,this.handleBlur=()=>{this.hasTrigger(`focus`)&&this.hide()},this.handleClick=()=>{this.hasTrigger(`click`)&&(this.open?this.hide():this.show())},this.handleFocus=()=>{this.hasTrigger(`focus`)&&this.show()},this.handleDocumentKeyDown=e=>{e.key===`Escape`&&(e.stopPropagation(),this.hide())},this.handleMouseOver=()=>{if(this.hasTrigger(`hover`)){let e=ka(getComputedStyle(this).getPropertyValue(`--show-delay`));clearTimeout(this.hoverTimeout),this.hoverTimeout=window.setTimeout(()=>this.show(),e)}},this.handleMouseOut=()=>{if(this.hasTrigger(`hover`)){let e=ka(getComputedStyle(this).getPropertyValue(`--hide-delay`));clearTimeout(this.hoverTimeout),this.hoverTimeout=window.setTimeout(()=>this.hide(),e)}},this.addEventListener(`blur`,this.handleBlur,!0),this.addEventListener(`focus`,this.handleFocus,!0),this.addEventListener(`click`,this.handleClick),this.addEventListener(`mouseover`,this.handleMouseOver),this.addEventListener(`mouseout`,this.handleMouseOut)}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this.closeWatcher)==null||e.destroy(),document.removeEventListener(`keydown`,this.handleDocumentKeyDown)}firstUpdated(){this.body.hidden=!this.open,this.open&&(this.popup.active=!0,this.popup.reposition())}hasTrigger(e){return this.trigger.split(` `).includes(e)}async handleOpenChange(){var e,t;if(this.open){if(this.disabled)return;this.emit(`sl-show`),`CloseWatcher`in window?((e=this.closeWatcher)==null||e.destroy(),this.closeWatcher=new CloseWatcher,this.closeWatcher.onclose=()=>{this.hide()}):document.addEventListener(`keydown`,this.handleDocumentKeyDown),await ja(this.body),this.body.hidden=!1,this.popup.active=!0;let{keyframes:t,options:n}=z(this,`tooltip.show`,{dir:this.localize.dir()});await B(this.popup.popup,t,n),this.popup.reposition(),this.emit(`sl-after-show`)}else{this.emit(`sl-hide`),(t=this.closeWatcher)==null||t.destroy(),document.removeEventListener(`keydown`,this.handleDocumentKeyDown),await ja(this.body);let{keyframes:e,options:n}=z(this,`tooltip.hide`,{dir:this.localize.dir()});await B(this.popup.popup,e,n),this.popup.active=!1,this.body.hidden=!0,this.emit(`sl-after-hide`)}}async handleOptionsChange(){this.hasUpdated&&(await this.updateComplete,this.popup.reposition())}handleDisabledChange(){this.disabled&&this.open&&this.hide()}async show(){if(!this.open)return this.open=!0,Oa(this,`sl-after-show`)}async hide(){if(this.open)return this.open=!1,Oa(this,`sl-after-hide`)}render(){return S` + `}};R.styles=[O,Dr],E([M(`.popup`)],R.prototype,`popup`,2),E([M(`.popup__arrow`)],R.prototype,`arrowEl`,2),E([A()],R.prototype,`anchor`,2),E([A({type:Boolean,reflect:!0})],R.prototype,`active`,2),E([A({reflect:!0})],R.prototype,`placement`,2),E([A({reflect:!0})],R.prototype,`strategy`,2),E([A({type:Number})],R.prototype,`distance`,2),E([A({type:Number})],R.prototype,`skidding`,2),E([A({type:Boolean})],R.prototype,`arrow`,2),E([A({attribute:`arrow-placement`})],R.prototype,`arrowPlacement`,2),E([A({attribute:`arrow-padding`,type:Number})],R.prototype,`arrowPadding`,2),E([A({type:Boolean})],R.prototype,`flip`,2),E([A({attribute:`flip-fallback-placements`,converter:{fromAttribute:e=>e.split(` `).map(e=>e.trim()).filter(e=>e!==``),toAttribute:e=>e.join(` `)}})],R.prototype,`flipFallbackPlacements`,2),E([A({attribute:`flip-fallback-strategy`})],R.prototype,`flipFallbackStrategy`,2),E([A({type:Object})],R.prototype,`flipBoundary`,2),E([A({attribute:`flip-padding`,type:Number})],R.prototype,`flipPadding`,2),E([A({type:Boolean})],R.prototype,`shift`,2),E([A({type:Object})],R.prototype,`shiftBoundary`,2),E([A({attribute:`shift-padding`,type:Number})],R.prototype,`shiftPadding`,2),E([A({attribute:`auto-size`})],R.prototype,`autoSize`,2),E([A()],R.prototype,`sync`,2),E([A({type:Object})],R.prototype,`autoSizeBoundary`,2),E([A({attribute:`auto-size-padding`,type:Number})],R.prototype,`autoSizePadding`,2),E([A({attribute:`hover-bridge`,type:Boolean})],R.prototype,`hoverBridge`,2);var Ca=new Map,wa=new WeakMap;function Ta(e){return e??{keyframes:[],options:{duration:0}}}function Ea(e,t){return t.toLowerCase()===`rtl`?{keyframes:e.rtlKeyframes||e.keyframes,options:e.options}:e}function z(e,t){Ca.set(e,Ta(t))}function B(e,t,n){let r=wa.get(e);if(r?.[t])return Ea(r[t],n.dir);let i=Ca.get(t);return i?Ea(i,n.dir):{keyframes:[],options:{duration:0}}}function Da(e,t){return new Promise(n=>{function r(i){i.target===e&&(e.removeEventListener(t,r),n())}e.addEventListener(t,r)})}function V(e,t,n){return new Promise(r=>{if(n?.duration===1/0)throw Error(`Promise-based animations must be finite.`);let i=e.animate(t,Ln(In({},n),{duration:ka()?0:n.duration}));i.addEventListener(`cancel`,r,{once:!0}),i.addEventListener(`finish`,r,{once:!0})})}function Oa(e){return e=e.toString().toLowerCase(),e.indexOf(`ms`)>-1?parseFloat(e):e.indexOf(`s`)>-1?parseFloat(e)*1e3:parseFloat(e)}function ka(){return window.matchMedia(`(prefers-reduced-motion: reduce)`).matches}function Aa(e){return Promise.all(e.getAnimations().map(e=>new Promise(t=>{e.cancel(),requestAnimationFrame(t)})))}function ja(e,t){return e.map(e=>Ln(In({},e),{height:e.height===`auto`?`${t}px`:e.height}))}var H=class extends N{constructor(){super(),this.localize=new L(this),this.content=``,this.placement=`top`,this.disabled=!1,this.distance=8,this.open=!1,this.skidding=0,this.trigger=`hover focus`,this.hoist=!1,this.handleBlur=()=>{this.hasTrigger(`focus`)&&this.hide()},this.handleClick=()=>{this.hasTrigger(`click`)&&(this.open?this.hide():this.show())},this.handleFocus=()=>{this.hasTrigger(`focus`)&&this.show()},this.handleDocumentKeyDown=e=>{e.key===`Escape`&&(e.stopPropagation(),this.hide())},this.handleMouseOver=()=>{if(this.hasTrigger(`hover`)){let e=Oa(getComputedStyle(this).getPropertyValue(`--show-delay`));clearTimeout(this.hoverTimeout),this.hoverTimeout=window.setTimeout(()=>this.show(),e)}},this.handleMouseOut=()=>{if(this.hasTrigger(`hover`)){let e=Oa(getComputedStyle(this).getPropertyValue(`--hide-delay`));clearTimeout(this.hoverTimeout),this.hoverTimeout=window.setTimeout(()=>this.hide(),e)}},this.addEventListener(`blur`,this.handleBlur,!0),this.addEventListener(`focus`,this.handleFocus,!0),this.addEventListener(`click`,this.handleClick),this.addEventListener(`mouseover`,this.handleMouseOver),this.addEventListener(`mouseout`,this.handleMouseOut)}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this.closeWatcher)==null||e.destroy(),document.removeEventListener(`keydown`,this.handleDocumentKeyDown)}firstUpdated(){this.body.hidden=!this.open,this.open&&(this.popup.active=!0,this.popup.reposition())}hasTrigger(e){return this.trigger.split(` `).includes(e)}async handleOpenChange(){var e,t;if(this.open){if(this.disabled)return;this.emit(`sl-show`),`CloseWatcher`in window?((e=this.closeWatcher)==null||e.destroy(),this.closeWatcher=new CloseWatcher,this.closeWatcher.onclose=()=>{this.hide()}):document.addEventListener(`keydown`,this.handleDocumentKeyDown),await Aa(this.body),this.body.hidden=!1,this.popup.active=!0;let{keyframes:t,options:n}=B(this,`tooltip.show`,{dir:this.localize.dir()});await V(this.popup.popup,t,n),this.popup.reposition(),this.emit(`sl-after-show`)}else{this.emit(`sl-hide`),(t=this.closeWatcher)==null||t.destroy(),document.removeEventListener(`keydown`,this.handleDocumentKeyDown),await Aa(this.body);let{keyframes:e,options:n}=B(this,`tooltip.hide`,{dir:this.localize.dir()});await V(this.popup.popup,e,n),this.popup.active=!1,this.body.hidden=!0,this.emit(`sl-after-hide`)}}async handleOptionsChange(){this.hasUpdated&&(await this.updateComplete,this.popup.reposition())}handleDisabledChange(){this.disabled&&this.open&&this.hide()}async show(){if(!this.open)return this.open=!0,Da(this,`sl-after-show`)}async hide(){if(this.open)return this.open=!1,Da(this,`sl-after-hide`)}render(){return C` ${this.content}
- `}};V.styles=[D,Dr],V.dependencies={"sl-popup":L},T([j(`slot:not([name])`)],V.prototype,`defaultSlot`,2),T([j(`.tooltip__body`)],V.prototype,`body`,2),T([j(`sl-popup`)],V.prototype,`popup`,2),T([k()],V.prototype,`content`,2),T([k()],V.prototype,`placement`,2),T([k({type:Boolean,reflect:!0})],V.prototype,`disabled`,2),T([k({type:Number})],V.prototype,`distance`,2),T([k({type:Boolean,reflect:!0})],V.prototype,`open`,2),T([k({type:Number})],V.prototype,`skidding`,2),T([k()],V.prototype,`trigger`,2),T([k({type:Boolean})],V.prototype,`hoist`,2),T([E(`open`,{waitUntilFirstUpdate:!0})],V.prototype,`handleOpenChange`,1),T([E([`content`,`distance`,`hoist`,`placement`,`skidding`])],V.prototype,`handleOptionsChange`,1),T([E(`disabled`)],V.prototype,`handleDisabledChange`,1),R(`tooltip.show`,{keyframes:[{opacity:0,scale:.8},{opacity:1,scale:1}],options:{duration:150,easing:`ease`}}),R(`tooltip.hide`,{keyframes:[{opacity:1,scale:1},{opacity:0,scale:.8}],options:{duration:150,easing:`ease`}}),V.define(`sl-tooltip`),ar.define(`sl-icon`);var Na=x` + `}};H.styles=[O,Er],H.dependencies={"sl-popup":R},E([M(`slot:not([name])`)],H.prototype,`defaultSlot`,2),E([M(`.tooltip__body`)],H.prototype,`body`,2),E([M(`sl-popup`)],H.prototype,`popup`,2),E([A()],H.prototype,`content`,2),E([A()],H.prototype,`placement`,2),E([A({type:Boolean,reflect:!0})],H.prototype,`disabled`,2),E([A({type:Number})],H.prototype,`distance`,2),E([A({type:Boolean,reflect:!0})],H.prototype,`open`,2),E([A({type:Number})],H.prototype,`skidding`,2),E([A()],H.prototype,`trigger`,2),E([A({type:Boolean})],H.prototype,`hoist`,2),E([D(`open`,{waitUntilFirstUpdate:!0})],H.prototype,`handleOpenChange`,1),E([D([`content`,`distance`,`hoist`,`placement`,`skidding`])],H.prototype,`handleOptionsChange`,1),E([D(`disabled`)],H.prototype,`handleDisabledChange`,1),z(`tooltip.show`,{keyframes:[{opacity:0,scale:.8},{opacity:1,scale:1}],options:{duration:150,easing:`ease`}}),z(`tooltip.hide`,{keyframes:[{opacity:1,scale:1},{opacity:0,scale:.8}],options:{duration:150,easing:`ease`}}),H.define(`sl-tooltip`),ir.define(`sl-icon`);var Ma=S` :host { --divider-width: 4px; --divider-hit-area: 12px; @@ -551,7 +551,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value outline: solid 1px transparent; } } -`;function Pa(e,t){function n(n){let r=e.getBoundingClientRect(),i=e.ownerDocument.defaultView,a=r.left+i.scrollX,o=r.top+i.scrollY,s=n.pageX-a,c=n.pageY-o;t?.onMove&&t.onMove(s,c)}function r(){document.removeEventListener(`pointermove`,n),document.removeEventListener(`pointerup`,r),t?.onStop&&t.onStop()}document.addEventListener(`pointermove`,n,{passive:!0}),document.addEventListener(`pointerup`,r),t?.initialEvent instanceof PointerEvent&&n(t.initialEvent)}function Fa(e,t,n){return(e=>Object.is(e,-0)?0:e)(en?n:e)}var Ia=()=>null,La=class extends M{constructor(){super(...arguments),this.isCollapsed=!1,this.localize=new I(this),this.positionBeforeCollapsing=0,this.position=50,this.vertical=!1,this.disabled=!1,this.snapValue=``,this.snapFunction=Ia,this.snapThreshold=12}toSnapFunction(e){let t=e.split(` `);return({pos:n,size:r,snapThreshold:i,isRtl:a,vertical:o})=>{let s=n,c=1/0;return t.forEach(t=>{let l;if(t.startsWith(`repeat(`)){let t=e.substring(7,e.length-1),i=t.endsWith(`%`),s=Number.parseFloat(t),c=i?s/100*r:s;l=Math.round((a&&!o?r-n:n)/c)*c}else l=t.endsWith(`%`)?Number.parseFloat(t)/100*r:Number.parseFloat(t);a&&!o&&(l=r-l);let u=Math.abs(n-l);u<=i&&uthis.handleResize(e)),this.updateComplete.then(()=>this.resizeObserver.observe(this)),this.detectSize(),this.cachedPositionInPixels=this.percentageToPixels(this.position)}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this.resizeObserver)==null||e.unobserve(this)}detectSize(){let{width:e,height:t}=this.getBoundingClientRect();this.size=this.vertical?t:e}percentageToPixels(e){return this.size*(e/100)}pixelsToPercentage(e){return e/this.size*100}handleDrag(e){let t=this.localize.dir()===`rtl`;this.disabled||(e.cancelable&&e.preventDefault(),Pa(this,{onMove:(e,n)=>{let r=this.vertical?n:e;this.primary===`end`&&(r=this.size-r),r=this.snapFunction({pos:r,size:this.size,snapThreshold:this.snapThreshold,isRtl:t,vertical:this.vertical})??r,this.position=Fa(this.pixelsToPercentage(r),0,100)},initialEvent:e}))}handleKeyDown(e){if(!this.disabled&&[`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`,`Home`,`End`,`Enter`].includes(e.key)){let t=this.position,n=(e.shiftKey?10:1)*(this.primary===`end`?-1:1);if(e.preventDefault(),(e.key===`ArrowLeft`&&!this.vertical||e.key===`ArrowUp`&&this.vertical)&&(t-=n),(e.key===`ArrowRight`&&!this.vertical||e.key===`ArrowDown`&&this.vertical)&&(t+=n),e.key===`Home`&&(t=this.primary===`end`?100:0),e.key===`End`&&(t=this.primary===`end`?0:100),e.key===`Enter`)if(this.isCollapsed)t=this.positionBeforeCollapsing,this.isCollapsed=!1;else{let e=this.position;t=0,requestAnimationFrame(()=>{this.isCollapsed=!0,this.positionBeforeCollapsing=e})}this.position=Fa(t,0,100)}}handleResize(e){let{width:t,height:n}=e[0].contentRect;this.size=this.vertical?n:t,(isNaN(this.cachedPositionInPixels)||this.position===1/0)&&(this.cachedPositionInPixels=Number(this.getAttribute(`position-in-pixels`)),this.positionInPixels=Number(this.getAttribute(`position-in-pixels`)),this.position=this.pixelsToPercentage(this.positionInPixels)),this.primary&&(this.position=this.pixelsToPercentage(this.cachedPositionInPixels))}handlePositionChange(){this.cachedPositionInPixels=this.percentageToPixels(this.position),this.isCollapsed=!1,this.positionBeforeCollapsing=0,this.positionInPixels=this.percentageToPixels(this.position),this.emit(`sl-reposition`)}handlePositionInPixelsChange(){this.position=this.pixelsToPercentage(this.positionInPixels)}handleVerticalChange(){this.detectSize()}render(){let e=this.vertical?`gridTemplateRows`:`gridTemplateColumns`,t=this.vertical?`gridTemplateColumns`:`gridTemplateRows`,n=this.localize.dir()===`rtl`,r=` +`;function Na(e,t){function n(n){let r=e.getBoundingClientRect(),i=e.ownerDocument.defaultView,a=r.left+i.scrollX,o=r.top+i.scrollY,s=n.pageX-a,c=n.pageY-o;t?.onMove&&t.onMove(s,c)}function r(){document.removeEventListener(`pointermove`,n),document.removeEventListener(`pointerup`,r),t?.onStop&&t.onStop()}document.addEventListener(`pointermove`,n,{passive:!0}),document.addEventListener(`pointerup`,r),t?.initialEvent instanceof PointerEvent&&n(t.initialEvent)}function Pa(e,t,n){return(e=>Object.is(e,-0)?0:e)(en?n:e)}var Fa=()=>null,Ia=class extends N{constructor(){super(...arguments),this.isCollapsed=!1,this.localize=new L(this),this.positionBeforeCollapsing=0,this.position=50,this.vertical=!1,this.disabled=!1,this.snapValue=``,this.snapFunction=Fa,this.snapThreshold=12}toSnapFunction(e){let t=e.split(` `);return({pos:n,size:r,snapThreshold:i,isRtl:a,vertical:o})=>{let s=n,c=1/0;return t.forEach(t=>{let l;if(t.startsWith(`repeat(`)){let t=e.substring(7,e.length-1),i=t.endsWith(`%`),s=Number.parseFloat(t),c=i?s/100*r:s;l=Math.round((a&&!o?r-n:n)/c)*c}else l=t.endsWith(`%`)?Number.parseFloat(t)/100*r:Number.parseFloat(t);a&&!o&&(l=r-l);let u=Math.abs(n-l);u<=i&&uthis.handleResize(e)),this.updateComplete.then(()=>this.resizeObserver.observe(this)),this.detectSize(),this.cachedPositionInPixels=this.percentageToPixels(this.position)}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this.resizeObserver)==null||e.unobserve(this)}detectSize(){let{width:e,height:t}=this.getBoundingClientRect();this.size=this.vertical?t:e}percentageToPixels(e){return this.size*(e/100)}pixelsToPercentage(e){return e/this.size*100}handleDrag(e){let t=this.localize.dir()===`rtl`;this.disabled||(e.cancelable&&e.preventDefault(),Na(this,{onMove:(e,n)=>{let r=this.vertical?n:e;this.primary===`end`&&(r=this.size-r),r=this.snapFunction({pos:r,size:this.size,snapThreshold:this.snapThreshold,isRtl:t,vertical:this.vertical})??r,this.position=Pa(this.pixelsToPercentage(r),0,100)},initialEvent:e}))}handleKeyDown(e){if(!this.disabled&&[`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`,`Home`,`End`,`Enter`].includes(e.key)){let t=this.position,n=(e.shiftKey?10:1)*(this.primary===`end`?-1:1);if(e.preventDefault(),(e.key===`ArrowLeft`&&!this.vertical||e.key===`ArrowUp`&&this.vertical)&&(t-=n),(e.key===`ArrowRight`&&!this.vertical||e.key===`ArrowDown`&&this.vertical)&&(t+=n),e.key===`Home`&&(t=this.primary===`end`?100:0),e.key===`End`&&(t=this.primary===`end`?0:100),e.key===`Enter`)if(this.isCollapsed)t=this.positionBeforeCollapsing,this.isCollapsed=!1;else{let e=this.position;t=0,requestAnimationFrame(()=>{this.isCollapsed=!0,this.positionBeforeCollapsing=e})}this.position=Pa(t,0,100)}}handleResize(e){let{width:t,height:n}=e[0].contentRect;this.size=this.vertical?n:t,(isNaN(this.cachedPositionInPixels)||this.position===1/0)&&(this.cachedPositionInPixels=Number(this.getAttribute(`position-in-pixels`)),this.positionInPixels=Number(this.getAttribute(`position-in-pixels`)),this.position=this.pixelsToPercentage(this.positionInPixels)),this.primary&&(this.position=this.pixelsToPercentage(this.cachedPositionInPixels))}handlePositionChange(){this.cachedPositionInPixels=this.percentageToPixels(this.position),this.isCollapsed=!1,this.positionBeforeCollapsing=0,this.positionInPixels=this.percentageToPixels(this.position),this.emit(`sl-reposition`)}handlePositionInPixelsChange(){this.position=this.pixelsToPercentage(this.positionInPixels)}handleVerticalChange(){this.detectSize()}render(){let e=this.vertical?`gridTemplateRows`:`gridTemplateColumns`,t=this.vertical?`gridTemplateColumns`:`gridTemplateRows`,n=this.localize.dir()===`rtl`,r=` clamp( 0%, clamp( @@ -561,13 +561,13 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value ), calc(100% - var(--divider-width)) ) - `,i=`auto`;return this.primary===`end`?n&&!this.vertical?this.style[e]=`${r} var(--divider-width) ${i}`:this.style[e]=`${i} var(--divider-width) ${r}`:n&&!this.vertical?this.style[e]=`${i} var(--divider-width) ${r}`:this.style[e]=`${r} var(--divider-width) ${i}`,this.style[t]=``,S` + `,i=`auto`;return this.primary===`end`?n&&!this.vertical?this.style[e]=`${r} var(--divider-width) ${i}`:this.style[e]=`${i} var(--divider-width) ${r}`:n&&!this.vertical?this.style[e]=`${i} var(--divider-width) ${r}`:this.style[e]=`${r} var(--divider-width) ${i}`,this.style[t]=``,C` - `}};co.styles=[D,Ra],co.dependencies={"sl-icon-button":F},T([j(`.drawer`)],co.prototype,`drawer`,2),T([j(`.drawer__panel`)],co.prototype,`panel`,2),T([j(`.drawer__overlay`)],co.prototype,`overlay`,2),T([k({type:Boolean,reflect:!0})],co.prototype,`open`,2),T([k({reflect:!0})],co.prototype,`label`,2),T([k({reflect:!0})],co.prototype,`placement`,2),T([k({type:Boolean,reflect:!0})],co.prototype,`contained`,2),T([k({attribute:`no-header`,type:Boolean,reflect:!0})],co.prototype,`noHeader`,2),T([E(`open`,{waitUntilFirstUpdate:!0})],co.prototype,`handleOpenChange`,1),T([E(`contained`,{waitUntilFirstUpdate:!0})],co.prototype,`handleNoModalChange`,1),R(`drawer.showTop`,{keyframes:[{opacity:0,translate:`0 -100%`},{opacity:1,translate:`0 0`}],options:{duration:250,easing:`ease`}}),R(`drawer.hideTop`,{keyframes:[{opacity:1,translate:`0 0`},{opacity:0,translate:`0 -100%`}],options:{duration:250,easing:`ease`}}),R(`drawer.showEnd`,{keyframes:[{opacity:0,translate:`100%`},{opacity:1,translate:`0`}],rtlKeyframes:[{opacity:0,translate:`-100%`},{opacity:1,translate:`0`}],options:{duration:250,easing:`ease`}}),R(`drawer.hideEnd`,{keyframes:[{opacity:1,translate:`0`},{opacity:0,translate:`100%`}],rtlKeyframes:[{opacity:1,translate:`0`},{opacity:0,translate:`-100%`}],options:{duration:250,easing:`ease`}}),R(`drawer.showBottom`,{keyframes:[{opacity:0,translate:`0 100%`},{opacity:1,translate:`0 0`}],options:{duration:250,easing:`ease`}}),R(`drawer.hideBottom`,{keyframes:[{opacity:1,translate:`0 0`},{opacity:0,translate:`0 100%`}],options:{duration:250,easing:`ease`}}),R(`drawer.showStart`,{keyframes:[{opacity:0,translate:`-100%`},{opacity:1,translate:`0`}],rtlKeyframes:[{opacity:0,translate:`100%`},{opacity:1,translate:`0`}],options:{duration:250,easing:`ease`}}),R(`drawer.hideStart`,{keyframes:[{opacity:1,translate:`0`},{opacity:0,translate:`-100%`}],rtlKeyframes:[{opacity:1,translate:`0`},{opacity:0,translate:`100%`}],options:{duration:250,easing:`ease`}}),R(`drawer.denyClose`,{keyframes:[{scale:1},{scale:1.01},{scale:1}],options:{duration:250}}),R(`drawer.overlay.show`,{keyframes:[{opacity:0},{opacity:1}],options:{duration:250}}),R(`drawer.overlay.hide`,{keyframes:[{opacity:1},{opacity:0}],options:{duration:250}}),co.define(`sl-drawer`);var lo=x` + `}};so.styles=[O,La],so.dependencies={"sl-icon-button":I},E([M(`.drawer`)],so.prototype,`drawer`,2),E([M(`.drawer__panel`)],so.prototype,`panel`,2),E([M(`.drawer__overlay`)],so.prototype,`overlay`,2),E([A({type:Boolean,reflect:!0})],so.prototype,`open`,2),E([A({reflect:!0})],so.prototype,`label`,2),E([A({reflect:!0})],so.prototype,`placement`,2),E([A({type:Boolean,reflect:!0})],so.prototype,`contained`,2),E([A({attribute:`no-header`,type:Boolean,reflect:!0})],so.prototype,`noHeader`,2),E([D(`open`,{waitUntilFirstUpdate:!0})],so.prototype,`handleOpenChange`,1),E([D(`contained`,{waitUntilFirstUpdate:!0})],so.prototype,`handleNoModalChange`,1),z(`drawer.showTop`,{keyframes:[{opacity:0,translate:`0 -100%`},{opacity:1,translate:`0 0`}],options:{duration:250,easing:`ease`}}),z(`drawer.hideTop`,{keyframes:[{opacity:1,translate:`0 0`},{opacity:0,translate:`0 -100%`}],options:{duration:250,easing:`ease`}}),z(`drawer.showEnd`,{keyframes:[{opacity:0,translate:`100%`},{opacity:1,translate:`0`}],rtlKeyframes:[{opacity:0,translate:`-100%`},{opacity:1,translate:`0`}],options:{duration:250,easing:`ease`}}),z(`drawer.hideEnd`,{keyframes:[{opacity:1,translate:`0`},{opacity:0,translate:`100%`}],rtlKeyframes:[{opacity:1,translate:`0`},{opacity:0,translate:`-100%`}],options:{duration:250,easing:`ease`}}),z(`drawer.showBottom`,{keyframes:[{opacity:0,translate:`0 100%`},{opacity:1,translate:`0 0`}],options:{duration:250,easing:`ease`}}),z(`drawer.hideBottom`,{keyframes:[{opacity:1,translate:`0 0`},{opacity:0,translate:`0 100%`}],options:{duration:250,easing:`ease`}}),z(`drawer.showStart`,{keyframes:[{opacity:0,translate:`-100%`},{opacity:1,translate:`0`}],rtlKeyframes:[{opacity:0,translate:`100%`},{opacity:1,translate:`0`}],options:{duration:250,easing:`ease`}}),z(`drawer.hideStart`,{keyframes:[{opacity:1,translate:`0`},{opacity:0,translate:`-100%`}],rtlKeyframes:[{opacity:1,translate:`0`},{opacity:0,translate:`100%`}],options:{duration:250,easing:`ease`}}),z(`drawer.denyClose`,{keyframes:[{scale:1},{scale:1.01},{scale:1}],options:{duration:250}}),z(`drawer.overlay.show`,{keyframes:[{opacity:0},{opacity:1}],options:{duration:250}}),z(`drawer.overlay.hide`,{keyframes:[{opacity:1},{opacity:0}],options:{duration:250}}),so.define(`sl-drawer`);var co=S` :host { display: block; } @@ -861,10 +861,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value display: block; padding: var(--sl-spacing-medium); } -`,uo=class extends M{constructor(){super(...arguments),this.localize=new I(this),this.open=!1,this.disabled=!1}firstUpdated(){this.body.style.height=this.open?`auto`:`0`,this.open&&(this.details.open=!0),this.detailsObserver=new MutationObserver(e=>{for(let t of e)t.type===`attributes`&&t.attributeName===`open`&&(this.details.open?this.show():this.hide())}),this.detailsObserver.observe(this.details,{attributes:!0})}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this.detailsObserver)==null||e.disconnect()}handleSummaryClick(e){e.preventDefault(),this.disabled||(this.open?this.hide():this.show(),this.header.focus())}handleSummaryKeyDown(e){(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),this.open?this.hide():this.show()),(e.key===`ArrowUp`||e.key===`ArrowLeft`)&&(e.preventDefault(),this.hide()),(e.key===`ArrowDown`||e.key===`ArrowRight`)&&(e.preventDefault(),this.show())}async handleOpenChange(){if(this.open){if(this.details.open=!0,this.emit(`sl-show`,{cancelable:!0}).defaultPrevented){this.open=!1,this.details.open=!1;return}await ja(this.body);let{keyframes:e,options:t}=z(this,`details.show`,{dir:this.localize.dir()});await B(this.body,Ma(e,this.body.scrollHeight),t),this.body.style.height=`auto`,this.emit(`sl-after-show`)}else{if(this.emit(`sl-hide`,{cancelable:!0}).defaultPrevented){this.details.open=!0,this.open=!0;return}await ja(this.body);let{keyframes:e,options:t}=z(this,`details.hide`,{dir:this.localize.dir()});await B(this.body,Ma(e,this.body.scrollHeight),t),this.body.style.height=`auto`,this.details.open=!1,this.emit(`sl-after-hide`)}}async show(){if(!(this.open||this.disabled))return this.open=!0,Oa(this,`sl-after-show`)}async hide(){if(!(!this.open||this.disabled))return this.open=!1,Oa(this,`sl-after-hide`)}render(){let e=this.localize.dir()===`rtl`;return S` +`,lo=class extends N{constructor(){super(...arguments),this.localize=new L(this),this.open=!1,this.disabled=!1}firstUpdated(){this.body.style.height=this.open?`auto`:`0`,this.open&&(this.details.open=!0),this.detailsObserver=new MutationObserver(e=>{for(let t of e)t.type===`attributes`&&t.attributeName===`open`&&(this.details.open?this.show():this.hide())}),this.detailsObserver.observe(this.details,{attributes:!0})}disconnectedCallback(){var e;super.disconnectedCallback(),(e=this.detailsObserver)==null||e.disconnect()}handleSummaryClick(e){e.preventDefault(),this.disabled||(this.open?this.hide():this.show(),this.header.focus())}handleSummaryKeyDown(e){(e.key===`Enter`||e.key===` `)&&(e.preventDefault(),this.open?this.hide():this.show()),(e.key===`ArrowUp`||e.key===`ArrowLeft`)&&(e.preventDefault(),this.hide()),(e.key===`ArrowDown`||e.key===`ArrowRight`)&&(e.preventDefault(),this.show())}async handleOpenChange(){if(this.open){if(this.details.open=!0,this.emit(`sl-show`,{cancelable:!0}).defaultPrevented){this.open=!1,this.details.open=!1;return}await Aa(this.body);let{keyframes:e,options:t}=B(this,`details.show`,{dir:this.localize.dir()});await V(this.body,ja(e,this.body.scrollHeight),t),this.body.style.height=`auto`,this.emit(`sl-after-show`)}else{if(this.emit(`sl-hide`,{cancelable:!0}).defaultPrevented){this.details.open=!0,this.open=!0;return}await Aa(this.body);let{keyframes:e,options:t}=B(this,`details.hide`,{dir:this.localize.dir()});await V(this.body,ja(e,this.body.scrollHeight),t),this.body.style.height=`auto`,this.details.open=!1,this.emit(`sl-after-hide`)}}async show(){if(!(this.open||this.disabled))return this.open=!0,Da(this,`sl-after-show`)}async hide(){if(!(!this.open||this.disabled))return this.open=!1,Da(this,`sl-after-hide`)}render(){let e=this.localize.dir()===`rtl`;return C`
- `}};uo.styles=[D,lo],uo.dependencies={"sl-icon":ar},T([j(`.details`)],uo.prototype,`details`,2),T([j(`.details__header`)],uo.prototype,`header`,2),T([j(`.details__body`)],uo.prototype,`body`,2),T([j(`.details__expand-icon-slot`)],uo.prototype,`expandIconSlot`,2),T([k({type:Boolean,reflect:!0})],uo.prototype,`open`,2),T([k()],uo.prototype,`summary`,2),T([k({type:Boolean,reflect:!0})],uo.prototype,`disabled`,2),T([E(`open`,{waitUntilFirstUpdate:!0})],uo.prototype,`handleOpenChange`,1),R(`details.show`,{keyframes:[{height:`0`,opacity:`0`},{height:`auto`,opacity:`1`}],options:{duration:250,easing:`linear`}}),R(`details.hide`,{keyframes:[{height:`auto`,opacity:`1`},{height:`0`,opacity:`0`}],options:{duration:250,easing:`linear`}}),uo.define(`sl-details`),L.define(`sl-popup`);var fo=x` + `}};lo.styles=[O,co],lo.dependencies={"sl-icon":ir},E([M(`.details`)],lo.prototype,`details`,2),E([M(`.details__header`)],lo.prototype,`header`,2),E([M(`.details__body`)],lo.prototype,`body`,2),E([M(`.details__expand-icon-slot`)],lo.prototype,`expandIconSlot`,2),E([A({type:Boolean,reflect:!0})],lo.prototype,`open`,2),E([A()],lo.prototype,`summary`,2),E([A({type:Boolean,reflect:!0})],lo.prototype,`disabled`,2),E([D(`open`,{waitUntilFirstUpdate:!0})],lo.prototype,`handleOpenChange`,1),z(`details.show`,{keyframes:[{height:`0`,opacity:`0`},{height:`auto`,opacity:`1`}],options:{duration:250,easing:`linear`}}),z(`details.hide`,{keyframes:[{height:`auto`,opacity:`1`},{height:`0`,opacity:`0`}],options:{duration:250,easing:`linear`}}),lo.define(`sl-details`),R.define(`sl-popup`);var uo=S` .breadcrumb { display: flex; align-items: center; flex-wrap: wrap; } -`,po=class extends M{constructor(){super(...arguments),this.localize=new I(this),this.separatorDir=this.localize.dir(),this.label=``}getSeparator(){let e=this.separatorSlot.assignedElements({flatten:!0})[0].cloneNode(!0);return[e,...e.querySelectorAll(`[id]`)].forEach(e=>e.removeAttribute(`id`)),e.setAttribute(`data-default`,``),e.slot=`separator`,e}handleSlotChange(){let e=[...this.defaultSlot.assignedElements({flatten:!0})].filter(e=>e.tagName.toLowerCase()===`sl-breadcrumb-item`);e.forEach((t,n)=>{let r=t.querySelector(`[slot="separator"]`);r===null?t.append(this.getSeparator()):r.hasAttribute(`data-default`)&&r.replaceWith(this.getSeparator()),n===e.length-1?t.setAttribute(`aria-current`,`page`):t.removeAttribute(`aria-current`)})}render(){return this.separatorDir!==this.localize.dir()&&(this.separatorDir=this.localize.dir(),this.updateComplete.then(()=>this.handleSlotChange())),S` +`,fo=class extends N{constructor(){super(...arguments),this.localize=new L(this),this.separatorDir=this.localize.dir(),this.label=``}getSeparator(){let e=this.separatorSlot.assignedElements({flatten:!0})[0].cloneNode(!0);return[e,...e.querySelectorAll(`[id]`)].forEach(e=>e.removeAttribute(`id`)),e.setAttribute(`data-default`,``),e.slot=`separator`,e}handleSlotChange(){let e=[...this.defaultSlot.assignedElements({flatten:!0})].filter(e=>e.tagName.toLowerCase()===`sl-breadcrumb-item`);e.forEach((t,n)=>{let r=t.querySelector(`[slot="separator"]`);r===null?t.append(this.getSeparator()):r.hasAttribute(`data-default`)&&r.replaceWith(this.getSeparator()),n===e.length-1?t.setAttribute(`aria-current`,`page`):t.removeAttribute(`aria-current`)})}render(){return this.separatorDir!==this.localize.dir()&&(this.separatorDir=this.localize.dir(),this.updateComplete.then(()=>this.handleSlotChange())),C` @@ -910,7 +910,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value - `}};po.styles=[D,fo],po.dependencies={"sl-icon":ar},T([j(`slot`)],po.prototype,`defaultSlot`,2),T([j(`slot[name="separator"]`)],po.prototype,`separatorSlot`,2),T([k()],po.prototype,`label`,2),po.define(`sl-breadcrumb`);var mo=x` + `}};fo.styles=[O,uo],fo.dependencies={"sl-icon":ir},E([M(`slot`)],fo.prototype,`defaultSlot`,2),E([M(`slot[name="separator"]`)],fo.prototype,`separatorSlot`,2),E([A()],fo.prototype,`label`,2),fo.define(`sl-breadcrumb`);var po=S` :host { display: inline-flex; } @@ -993,32 +993,32 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value user-select: none; -webkit-user-select: none; } -`,ho=class extends M{constructor(){super(...arguments),this.hasSlotController=new ao(this,`prefix`,`suffix`),this.renderType=`button`,this.rel=`noreferrer noopener`}setRenderType(){let e=this.defaultSlot.assignedElements({flatten:!0}).filter(e=>e.tagName.toLowerCase()===`sl-dropdown`).length>0;if(this.href){this.renderType=`link`;return}if(e){this.renderType=`dropdown`;return}this.renderType=`button`}hrefChanged(){this.setRenderType()}handleSlotChange(){this.setRenderType()}render(){return S` +`,mo=class extends N{constructor(){super(...arguments),this.hasSlotController=new io(this,`prefix`,`suffix`),this.renderType=`button`,this.rel=`noreferrer noopener`}setRenderType(){let e=this.defaultSlot.assignedElements({flatten:!0}).filter(e=>e.tagName.toLowerCase()===`sl-dropdown`).length>0;if(this.href){this.renderType=`link`;return}if(e){this.renderType=`dropdown`;return}this.renderType=`button`}hrefChanged(){this.setRenderType()}handleSlotChange(){this.setRenderType()}render(){return C`
- ${this.renderType===`link`?S` + ${this.renderType===`link`?C` `:``} - ${this.renderType===`button`?S` + ${this.renderType===`button`?C` `:``} - ${this.renderType===`dropdown`?S` + ${this.renderType===`dropdown`?C` @@ -1032,7 +1032,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value
- `}};ho.styles=[D,mo],T([j(`slot:not([name])`)],ho.prototype,`defaultSlot`,2),T([A()],ho.prototype,`renderType`,2),T([k()],ho.prototype,`href`,2),T([k()],ho.prototype,`target`,2),T([k()],ho.prototype,`rel`,2),T([E(`href`,{waitUntilFirstUpdate:!0})],ho.prototype,`hrefChanged`,1),ho.define(`sl-breadcrumb-item`);var go=x` + `}};mo.styles=[O,po],E([M(`slot:not([name])`)],mo.prototype,`defaultSlot`,2),E([j()],mo.prototype,`renderType`,2),E([A()],mo.prototype,`href`,2),E([A()],mo.prototype,`target`,2),E([A()],mo.prototype,`rel`,2),E([D(`href`,{waitUntilFirstUpdate:!0})],mo.prototype,`hrefChanged`,1),mo.define(`sl-breadcrumb-item`);var ho=S` :host { --track-width: 2px; --track-color: rgb(128 128 128 / 25%); @@ -1089,12 +1089,12 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value stroke-dasharray: 0.05em, 3em; } } -`,_o=class extends M{constructor(){super(...arguments),this.localize=new I(this)}render(){return S` +`,go=class extends N{constructor(){super(...arguments),this.localize=new L(this)}render(){return C` - `}};_o.styles=[D,go],_o.define(`sl-spinner`);var vo=new WeakMap,yo=new WeakMap,bo=new WeakMap,xo=new WeakSet,So=new WeakMap,Co=class{constructor(e,t){this.handleFormData=e=>{let t=this.options.disabled(this.host),n=this.options.name(this.host),r=this.options.value(this.host),i=this.host.tagName.toLowerCase()===`sl-button`;this.host.isConnected&&!t&&!i&&typeof n==`string`&&n.length>0&&r!==void 0&&(Array.isArray(r)?r.forEach(t=>{e.formData.append(n,t.toString())}):e.formData.append(n,r.toString()))},this.handleFormSubmit=e=>{var t;let n=this.options.disabled(this.host),r=this.options.reportValidity;this.form&&!this.form.noValidate&&((t=vo.get(this.form))==null||t.forEach(e=>{this.setUserInteracted(e,!0)})),this.form&&!this.form.noValidate&&!n&&!r(this.host)&&(e.preventDefault(),e.stopImmediatePropagation())},this.handleFormReset=()=>{this.options.setValue(this.host,this.options.defaultValue(this.host)),this.setUserInteracted(this.host,!1),So.set(this.host,[])},this.handleInteraction=e=>{let t=So.get(this.host);t.includes(e.type)||t.push(e.type),t.length===this.options.assumeInteractionOn.length&&this.setUserInteracted(this.host,!0)},this.checkFormValidity=()=>{if(this.form&&!this.form.noValidate){let e=this.form.querySelectorAll(`*`);for(let t of e)if(typeof t.checkValidity==`function`&&!t.checkValidity())return!1}return!0},this.reportFormValidity=()=>{if(this.form&&!this.form.noValidate){let e=this.form.querySelectorAll(`*`);for(let t of e)if(typeof t.reportValidity==`function`&&!t.reportValidity())return!1}return!0},(this.host=e).addController(this),this.options=Ln({form:e=>{let t=e.form;if(t){let n=e.getRootNode().querySelector(`#${t}`);if(n)return n}return e.closest(`form`)},name:e=>e.name,value:e=>e.value,defaultValue:e=>e.defaultValue,disabled:e=>e.disabled??!1,reportValidity:e=>typeof e.reportValidity==`function`?e.reportValidity():!0,checkValidity:e=>typeof e.checkValidity==`function`?e.checkValidity():!0,setValue:(e,t)=>e.value=t,assumeInteractionOn:[`sl-input`]},t)}hostConnected(){let e=this.options.form(this.host);e&&this.attachForm(e),So.set(this.host,[]),this.options.assumeInteractionOn.forEach(e=>{this.host.addEventListener(e,this.handleInteraction)})}hostDisconnected(){this.detachForm(),So.delete(this.host),this.options.assumeInteractionOn.forEach(e=>{this.host.removeEventListener(e,this.handleInteraction)})}hostUpdated(){let e=this.options.form(this.host);e||this.detachForm(),e&&this.form!==e&&(this.detachForm(),this.attachForm(e)),this.host.hasUpdated&&this.setValidity(this.host.validity.valid)}attachForm(e){e?(this.form=e,vo.has(this.form)?vo.get(this.form).add(this.host):vo.set(this.form,new Set([this.host])),this.form.addEventListener(`formdata`,this.handleFormData),this.form.addEventListener(`submit`,this.handleFormSubmit),this.form.addEventListener(`reset`,this.handleFormReset),yo.has(this.form)||(yo.set(this.form,this.form.reportValidity),this.form.reportValidity=()=>this.reportFormValidity()),bo.has(this.form)||(bo.set(this.form,this.form.checkValidity),this.form.checkValidity=()=>this.checkFormValidity())):this.form=void 0}detachForm(){if(!this.form)return;let e=vo.get(this.form);e&&(e.delete(this.host),e.size<=0&&(this.form.removeEventListener(`formdata`,this.handleFormData),this.form.removeEventListener(`submit`,this.handleFormSubmit),this.form.removeEventListener(`reset`,this.handleFormReset),yo.has(this.form)&&(this.form.reportValidity=yo.get(this.form),yo.delete(this.form)),bo.has(this.form)&&(this.form.checkValidity=bo.get(this.form),bo.delete(this.form)),this.form=void 0))}setUserInteracted(e,t){t?xo.add(e):xo.delete(e),e.requestUpdate()}doAction(e,t){if(this.form){let n=document.createElement(`button`);n.type=e,n.style.position=`absolute`,n.style.width=`0`,n.style.height=`0`,n.style.clipPath=`inset(50%)`,n.style.overflow=`hidden`,n.style.whiteSpace=`nowrap`,t&&(n.name=t.name,n.value=t.value,[`formaction`,`formenctype`,`formmethod`,`formnovalidate`,`formtarget`].forEach(e=>{t.hasAttribute(e)&&n.setAttribute(e,t.getAttribute(e))})),this.form.append(n),n.click(),n.remove()}}getForm(){return this.form??null}reset(e){this.doAction(`reset`,e)}submit(e){this.doAction(`submit`,e)}setValidity(e){let t=this.host,n=!!xo.has(t),r=!!t.required;t.toggleAttribute(`data-required`,r),t.toggleAttribute(`data-optional`,!r),t.toggleAttribute(`data-invalid`,!e),t.toggleAttribute(`data-valid`,e),t.toggleAttribute(`data-user-invalid`,!e&&n),t.toggleAttribute(`data-user-valid`,e&&n)}updateValidity(){let e=this.host;this.setValidity(e.validity.valid)}emitInvalidEvent(e){let t=new CustomEvent(`sl-invalid`,{bubbles:!1,composed:!1,cancelable:!0,detail:{}});e||t.preventDefault(),this.host.dispatchEvent(t)||e?.preventDefault()}},wo=Object.freeze({badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:!0,valueMissing:!1});Object.freeze(Rn(Ln({},wo),{valid:!1,valueMissing:!0})),Object.freeze(Rn(Ln({},wo),{valid:!1,customError:!0}));var To=x` + `}};go.styles=[O,ho],go.define(`sl-spinner`);var _o=new WeakMap,vo=new WeakMap,yo=new WeakMap,bo=new WeakSet,xo=new WeakMap,So=class{constructor(e,t){this.handleFormData=e=>{let t=this.options.disabled(this.host),n=this.options.name(this.host),r=this.options.value(this.host),i=this.host.tagName.toLowerCase()===`sl-button`;this.host.isConnected&&!t&&!i&&typeof n==`string`&&n.length>0&&r!==void 0&&(Array.isArray(r)?r.forEach(t=>{e.formData.append(n,t.toString())}):e.formData.append(n,r.toString()))},this.handleFormSubmit=e=>{var t;let n=this.options.disabled(this.host),r=this.options.reportValidity;this.form&&!this.form.noValidate&&((t=_o.get(this.form))==null||t.forEach(e=>{this.setUserInteracted(e,!0)})),this.form&&!this.form.noValidate&&!n&&!r(this.host)&&(e.preventDefault(),e.stopImmediatePropagation())},this.handleFormReset=()=>{this.options.setValue(this.host,this.options.defaultValue(this.host)),this.setUserInteracted(this.host,!1),xo.set(this.host,[])},this.handleInteraction=e=>{let t=xo.get(this.host);t.includes(e.type)||t.push(e.type),t.length===this.options.assumeInteractionOn.length&&this.setUserInteracted(this.host,!0)},this.checkFormValidity=()=>{if(this.form&&!this.form.noValidate){let e=this.form.querySelectorAll(`*`);for(let t of e)if(typeof t.checkValidity==`function`&&!t.checkValidity())return!1}return!0},this.reportFormValidity=()=>{if(this.form&&!this.form.noValidate){let e=this.form.querySelectorAll(`*`);for(let t of e)if(typeof t.reportValidity==`function`&&!t.reportValidity())return!1}return!0},(this.host=e).addController(this),this.options=In({form:e=>{let t=e.form;if(t){let n=e.getRootNode().querySelector(`#${t}`);if(n)return n}return e.closest(`form`)},name:e=>e.name,value:e=>e.value,defaultValue:e=>e.defaultValue,disabled:e=>e.disabled??!1,reportValidity:e=>typeof e.reportValidity==`function`?e.reportValidity():!0,checkValidity:e=>typeof e.checkValidity==`function`?e.checkValidity():!0,setValue:(e,t)=>e.value=t,assumeInteractionOn:[`sl-input`]},t)}hostConnected(){let e=this.options.form(this.host);e&&this.attachForm(e),xo.set(this.host,[]),this.options.assumeInteractionOn.forEach(e=>{this.host.addEventListener(e,this.handleInteraction)})}hostDisconnected(){this.detachForm(),xo.delete(this.host),this.options.assumeInteractionOn.forEach(e=>{this.host.removeEventListener(e,this.handleInteraction)})}hostUpdated(){let e=this.options.form(this.host);e||this.detachForm(),e&&this.form!==e&&(this.detachForm(),this.attachForm(e)),this.host.hasUpdated&&this.setValidity(this.host.validity.valid)}attachForm(e){e?(this.form=e,_o.has(this.form)?_o.get(this.form).add(this.host):_o.set(this.form,new Set([this.host])),this.form.addEventListener(`formdata`,this.handleFormData),this.form.addEventListener(`submit`,this.handleFormSubmit),this.form.addEventListener(`reset`,this.handleFormReset),vo.has(this.form)||(vo.set(this.form,this.form.reportValidity),this.form.reportValidity=()=>this.reportFormValidity()),yo.has(this.form)||(yo.set(this.form,this.form.checkValidity),this.form.checkValidity=()=>this.checkFormValidity())):this.form=void 0}detachForm(){if(!this.form)return;let e=_o.get(this.form);e&&(e.delete(this.host),e.size<=0&&(this.form.removeEventListener(`formdata`,this.handleFormData),this.form.removeEventListener(`submit`,this.handleFormSubmit),this.form.removeEventListener(`reset`,this.handleFormReset),vo.has(this.form)&&(this.form.reportValidity=vo.get(this.form),vo.delete(this.form)),yo.has(this.form)&&(this.form.checkValidity=yo.get(this.form),yo.delete(this.form)),this.form=void 0))}setUserInteracted(e,t){t?bo.add(e):bo.delete(e),e.requestUpdate()}doAction(e,t){if(this.form){let n=document.createElement(`button`);n.type=e,n.style.position=`absolute`,n.style.width=`0`,n.style.height=`0`,n.style.clipPath=`inset(50%)`,n.style.overflow=`hidden`,n.style.whiteSpace=`nowrap`,t&&(n.name=t.name,n.value=t.value,[`formaction`,`formenctype`,`formmethod`,`formnovalidate`,`formtarget`].forEach(e=>{t.hasAttribute(e)&&n.setAttribute(e,t.getAttribute(e))})),this.form.append(n),n.click(),n.remove()}}getForm(){return this.form??null}reset(e){this.doAction(`reset`,e)}submit(e){this.doAction(`submit`,e)}setValidity(e){let t=this.host,n=!!bo.has(t),r=!!t.required;t.toggleAttribute(`data-required`,r),t.toggleAttribute(`data-optional`,!r),t.toggleAttribute(`data-invalid`,!e),t.toggleAttribute(`data-valid`,e),t.toggleAttribute(`data-user-invalid`,!e&&n),t.toggleAttribute(`data-user-valid`,e&&n)}updateValidity(){let e=this.host;this.setValidity(e.validity.valid)}emitInvalidEvent(e){let t=new CustomEvent(`sl-invalid`,{bubbles:!1,composed:!1,cancelable:!0,detail:{}});e||t.preventDefault(),this.host.dispatchEvent(t)||e?.preventDefault()}},Co=Object.freeze({badInput:!1,customError:!1,patternMismatch:!1,rangeOverflow:!1,rangeUnderflow:!1,stepMismatch:!1,tooLong:!1,tooShort:!1,typeMismatch:!1,valid:!0,valueMissing:!1});Object.freeze(Ln(In({},Co),{valid:!1,valueMissing:!0})),Object.freeze(Ln(In({},Co),{valid:!1,customError:!0}));var wo=S` :host { display: inline-block; position: relative; @@ -1687,20 +1687,20 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value :host([data-sl-button-group__button][checked]) { z-index: 2; } -`,H=class extends M{constructor(){super(...arguments),this.formControlController=new Co(this,{assumeInteractionOn:[`click`]}),this.hasSlotController=new ao(this,`[default]`,`prefix`,`suffix`),this.localize=new I(this),this.hasFocus=!1,this.invalid=!1,this.title=``,this.variant=`default`,this.size=`medium`,this.caret=!1,this.disabled=!1,this.loading=!1,this.outline=!1,this.pill=!1,this.circle=!1,this.type=`button`,this.name=``,this.value=``,this.href=``,this.rel=`noreferrer noopener`}get validity(){return this.isButton()?this.button.validity:wo}get validationMessage(){return this.isButton()?this.button.validationMessage:``}firstUpdated(){this.isButton()&&this.formControlController.updateValidity()}handleBlur(){this.hasFocus=!1,this.emit(`sl-blur`)}handleFocus(){this.hasFocus=!0,this.emit(`sl-focus`)}handleClick(){this.type===`submit`&&this.formControlController.submit(this),this.type===`reset`&&this.formControlController.reset(this)}handleInvalid(e){this.formControlController.setValidity(!1),this.formControlController.emitInvalidEvent(e)}isButton(){return!this.href}isLink(){return!!this.href}handleDisabledChange(){this.isButton()&&this.formControlController.setValidity(this.disabled)}click(){this.button.click()}focus(e){this.button.focus(e)}blur(){this.button.blur()}checkValidity(){return this.isButton()?this.button.checkValidity():!0}getForm(){return this.formControlController.getForm()}reportValidity(){return this.isButton()?this.button.reportValidity():!0}setCustomValidity(e){this.isButton()&&(this.button.setCustomValidity(e),this.formControlController.updateValidity())}render(){let e=this.isLink(),t=e?fr`a`:fr`button`;return mr` +`,U=class extends N{constructor(){super(...arguments),this.formControlController=new So(this,{assumeInteractionOn:[`click`]}),this.hasSlotController=new io(this,`[default]`,`prefix`,`suffix`),this.localize=new L(this),this.hasFocus=!1,this.invalid=!1,this.title=``,this.variant=`default`,this.size=`medium`,this.caret=!1,this.disabled=!1,this.loading=!1,this.outline=!1,this.pill=!1,this.circle=!1,this.type=`button`,this.name=``,this.value=``,this.href=``,this.rel=`noreferrer noopener`}get validity(){return this.isButton()?this.button.validity:Co}get validationMessage(){return this.isButton()?this.button.validationMessage:``}firstUpdated(){this.isButton()&&this.formControlController.updateValidity()}handleBlur(){this.hasFocus=!1,this.emit(`sl-blur`)}handleFocus(){this.hasFocus=!0,this.emit(`sl-focus`)}handleClick(){this.type===`submit`&&this.formControlController.submit(this),this.type===`reset`&&this.formControlController.reset(this)}handleInvalid(e){this.formControlController.setValidity(!1),this.formControlController.emitInvalidEvent(e)}isButton(){return!this.href}isLink(){return!!this.href}handleDisabledChange(){this.isButton()&&this.formControlController.setValidity(this.disabled)}click(){this.button.click()}focus(e){this.button.focus(e)}blur(){this.button.blur()}checkValidity(){return this.isButton()?this.button.checkValidity():!0}getForm(){return this.formControlController.getForm()}reportValidity(){return this.isButton()?this.button.reportValidity():!0}setCustomValidity(e){this.isButton()&&(this.button.setCustomValidity(e),this.formControlController.updateValidity())}render(){let e=this.isLink(),t=e?dr`a`:dr`button`;return pr` <${t} part="base" - class=${N({button:!0,"button--default":this.variant===`default`,"button--primary":this.variant===`primary`,"button--success":this.variant===`success`,"button--neutral":this.variant===`neutral`,"button--warning":this.variant===`warning`,"button--danger":this.variant===`danger`,"button--text":this.variant===`text`,"button--small":this.size===`small`,"button--medium":this.size===`medium`,"button--large":this.size===`large`,"button--caret":this.caret,"button--circle":this.circle,"button--disabled":this.disabled,"button--focused":this.hasFocus,"button--loading":this.loading,"button--standard":!this.outline,"button--outline":this.outline,"button--pill":this.pill,"button--rtl":this.localize.dir()===`rtl`,"button--has-label":this.hasSlotController.test(`[default]`),"button--has-prefix":this.hasSlotController.test(`prefix`),"button--has-suffix":this.hasSlotController.test(`suffix`)})} - ?disabled=${P(e?void 0:this.disabled)} - type=${P(e?void 0:this.type)} + class=${P({button:!0,"button--default":this.variant===`default`,"button--primary":this.variant===`primary`,"button--success":this.variant===`success`,"button--neutral":this.variant===`neutral`,"button--warning":this.variant===`warning`,"button--danger":this.variant===`danger`,"button--text":this.variant===`text`,"button--small":this.size===`small`,"button--medium":this.size===`medium`,"button--large":this.size===`large`,"button--caret":this.caret,"button--circle":this.circle,"button--disabled":this.disabled,"button--focused":this.hasFocus,"button--loading":this.loading,"button--standard":!this.outline,"button--outline":this.outline,"button--pill":this.pill,"button--rtl":this.localize.dir()===`rtl`,"button--has-label":this.hasSlotController.test(`[default]`),"button--has-prefix":this.hasSlotController.test(`prefix`),"button--has-suffix":this.hasSlotController.test(`suffix`)})} + ?disabled=${F(e?void 0:this.disabled)} + type=${F(e?void 0:this.type)} title=${this.title} - name=${P(e?void 0:this.name)} - value=${P(e?void 0:this.value)} - href=${P(e&&!this.disabled?this.href:void 0)} - target=${P(e?this.target:void 0)} - download=${P(e?this.download:void 0)} - rel=${P(e?this.rel:void 0)} - role=${P(e?void 0:`button`)} + name=${F(e?void 0:this.name)} + value=${F(e?void 0:this.value)} + href=${F(e&&!this.disabled?this.href:void 0)} + target=${F(e?this.target:void 0)} + download=${F(e?this.download:void 0)} + rel=${F(e?this.rel:void 0)} + role=${F(e?void 0:`button`)} aria-disabled=${this.disabled?`true`:`false`} tabindex=${this.disabled?`-1`:`0`} @blur=${this.handleBlur} @@ -1711,10 +1711,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value - ${this.caret?mr` `:``} - ${this.loading?mr``:``} + ${this.caret?pr` `:``} + ${this.loading?pr``:``} - `}};H.styles=[D,To],H.dependencies={"sl-icon":ar,"sl-spinner":_o},T([j(`.button`)],H.prototype,`button`,2),T([A()],H.prototype,`hasFocus`,2),T([A()],H.prototype,`invalid`,2),T([k()],H.prototype,`title`,2),T([k({reflect:!0})],H.prototype,`variant`,2),T([k({reflect:!0})],H.prototype,`size`,2),T([k({type:Boolean,reflect:!0})],H.prototype,`caret`,2),T([k({type:Boolean,reflect:!0})],H.prototype,`disabled`,2),T([k({type:Boolean,reflect:!0})],H.prototype,`loading`,2),T([k({type:Boolean,reflect:!0})],H.prototype,`outline`,2),T([k({type:Boolean,reflect:!0})],H.prototype,`pill`,2),T([k({type:Boolean,reflect:!0})],H.prototype,`circle`,2),T([k()],H.prototype,`type`,2),T([k()],H.prototype,`name`,2),T([k()],H.prototype,`value`,2),T([k()],H.prototype,`href`,2),T([k()],H.prototype,`target`,2),T([k()],H.prototype,`rel`,2),T([k()],H.prototype,`download`,2),T([k()],H.prototype,`form`,2),T([k({attribute:`formaction`})],H.prototype,`formAction`,2),T([k({attribute:`formenctype`})],H.prototype,`formEnctype`,2),T([k({attribute:`formmethod`})],H.prototype,`formMethod`,2),T([k({attribute:`formnovalidate`,type:Boolean})],H.prototype,`formNoValidate`,2),T([k({attribute:`formtarget`})],H.prototype,`formTarget`,2),T([E(`disabled`,{waitUntilFirstUpdate:!0})],H.prototype,`handleDisabledChange`,1),H.define(`sl-button`);var Eo=x` + `}};U.styles=[O,wo],U.dependencies={"sl-icon":ir,"sl-spinner":go},E([M(`.button`)],U.prototype,`button`,2),E([j()],U.prototype,`hasFocus`,2),E([j()],U.prototype,`invalid`,2),E([A()],U.prototype,`title`,2),E([A({reflect:!0})],U.prototype,`variant`,2),E([A({reflect:!0})],U.prototype,`size`,2),E([A({type:Boolean,reflect:!0})],U.prototype,`caret`,2),E([A({type:Boolean,reflect:!0})],U.prototype,`disabled`,2),E([A({type:Boolean,reflect:!0})],U.prototype,`loading`,2),E([A({type:Boolean,reflect:!0})],U.prototype,`outline`,2),E([A({type:Boolean,reflect:!0})],U.prototype,`pill`,2),E([A({type:Boolean,reflect:!0})],U.prototype,`circle`,2),E([A()],U.prototype,`type`,2),E([A()],U.prototype,`name`,2),E([A()],U.prototype,`value`,2),E([A()],U.prototype,`href`,2),E([A()],U.prototype,`target`,2),E([A()],U.prototype,`rel`,2),E([A()],U.prototype,`download`,2),E([A()],U.prototype,`form`,2),E([A({attribute:`formaction`})],U.prototype,`formAction`,2),E([A({attribute:`formenctype`})],U.prototype,`formEnctype`,2),E([A({attribute:`formmethod`})],U.prototype,`formMethod`,2),E([A({attribute:`formnovalidate`,type:Boolean})],U.prototype,`formNoValidate`,2),E([A({attribute:`formtarget`})],U.prototype,`formTarget`,2),E([D(`disabled`,{waitUntilFirstUpdate:!0})],U.prototype,`handleDisabledChange`,1),U.define(`sl-button`);var To=S` :host { --width: 31rem; --header-spacing: var(--sl-spacing-large); @@ -1831,10 +1831,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value border: solid 1px var(--sl-color-neutral-0); } } -`,Do=class extends M{constructor(){super(...arguments),this.hasSlotController=new ao(this,`footer`),this.localize=new I(this),this.modal=new Xa(this),this.open=!1,this.label=``,this.noHeader=!1,this.handleDocumentKeyDown=e=>{e.key===`Escape`&&this.modal.isActive()&&this.open&&(e.stopPropagation(),this.requestClose(`keyboard`))}}firstUpdated(){this.dialog.hidden=!this.open,this.open&&(this.addOpenListeners(),this.modal.activate(),to(this))}disconnectedCallback(){super.disconnectedCallback(),this.modal.deactivate(),no(this),this.removeOpenListeners()}requestClose(e){if(this.emit(`sl-request-close`,{cancelable:!0,detail:{source:e}}).defaultPrevented){let e=z(this,`dialog.denyClose`,{dir:this.localize.dir()});B(this.panel,e.keyframes,e.options);return}this.hide()}addOpenListeners(){var e;`CloseWatcher`in window?((e=this.closeWatcher)==null||e.destroy(),this.closeWatcher=new CloseWatcher,this.closeWatcher.onclose=()=>this.requestClose(`keyboard`)):document.addEventListener(`keydown`,this.handleDocumentKeyDown)}removeOpenListeners(){var e;(e=this.closeWatcher)==null||e.destroy(),document.removeEventListener(`keydown`,this.handleDocumentKeyDown)}async handleOpenChange(){if(this.open){this.emit(`sl-show`),this.addOpenListeners(),this.originalTrigger=document.activeElement,this.modal.activate(),to(this);let e=this.querySelector(`[autofocus]`);e&&e.removeAttribute(`autofocus`),await Promise.all([ja(this.dialog),ja(this.overlay)]),this.dialog.hidden=!1,requestAnimationFrame(()=>{this.emit(`sl-initial-focus`,{cancelable:!0}).defaultPrevented||(e?e.focus({preventScroll:!0}):this.panel.focus({preventScroll:!0})),e&&e.setAttribute(`autofocus`,``)});let t=z(this,`dialog.show`,{dir:this.localize.dir()}),n=z(this,`dialog.overlay.show`,{dir:this.localize.dir()});await Promise.all([B(this.panel,t.keyframes,t.options),B(this.overlay,n.keyframes,n.options)]),this.emit(`sl-after-show`)}else{io(this),this.emit(`sl-hide`),this.removeOpenListeners(),this.modal.deactivate(),await Promise.all([ja(this.dialog),ja(this.overlay)]);let e=z(this,`dialog.hide`,{dir:this.localize.dir()}),t=z(this,`dialog.overlay.hide`,{dir:this.localize.dir()});await Promise.all([B(this.overlay,t.keyframes,t.options).then(()=>{this.overlay.hidden=!0}),B(this.panel,e.keyframes,e.options).then(()=>{this.panel.hidden=!0})]),this.dialog.hidden=!0,this.overlay.hidden=!1,this.panel.hidden=!1,no(this);let n=this.originalTrigger;typeof n?.focus==`function`&&setTimeout(()=>n.focus()),this.emit(`sl-after-hide`)}}async show(){if(!this.open)return this.open=!0,Oa(this,`sl-after-show`)}async hide(){if(this.open)return this.open=!1,Oa(this,`sl-after-hide`)}render(){return S` +`,Eo=class extends N{constructor(){super(...arguments),this.hasSlotController=new io(this,`footer`),this.localize=new L(this),this.modal=new Ya(this),this.open=!1,this.label=``,this.noHeader=!1,this.handleDocumentKeyDown=e=>{e.key===`Escape`&&this.modal.isActive()&&this.open&&(e.stopPropagation(),this.requestClose(`keyboard`))}}firstUpdated(){this.dialog.hidden=!this.open,this.open&&(this.addOpenListeners(),this.modal.activate(),eo(this))}disconnectedCallback(){super.disconnectedCallback(),this.modal.deactivate(),to(this),this.removeOpenListeners()}requestClose(e){if(this.emit(`sl-request-close`,{cancelable:!0,detail:{source:e}}).defaultPrevented){let e=B(this,`dialog.denyClose`,{dir:this.localize.dir()});V(this.panel,e.keyframes,e.options);return}this.hide()}addOpenListeners(){var e;`CloseWatcher`in window?((e=this.closeWatcher)==null||e.destroy(),this.closeWatcher=new CloseWatcher,this.closeWatcher.onclose=()=>this.requestClose(`keyboard`)):document.addEventListener(`keydown`,this.handleDocumentKeyDown)}removeOpenListeners(){var e;(e=this.closeWatcher)==null||e.destroy(),document.removeEventListener(`keydown`,this.handleDocumentKeyDown)}async handleOpenChange(){if(this.open){this.emit(`sl-show`),this.addOpenListeners(),this.originalTrigger=document.activeElement,this.modal.activate(),eo(this);let e=this.querySelector(`[autofocus]`);e&&e.removeAttribute(`autofocus`),await Promise.all([Aa(this.dialog),Aa(this.overlay)]),this.dialog.hidden=!1,requestAnimationFrame(()=>{this.emit(`sl-initial-focus`,{cancelable:!0}).defaultPrevented||(e?e.focus({preventScroll:!0}):this.panel.focus({preventScroll:!0})),e&&e.setAttribute(`autofocus`,``)});let t=B(this,`dialog.show`,{dir:this.localize.dir()}),n=B(this,`dialog.overlay.show`,{dir:this.localize.dir()});await Promise.all([V(this.panel,t.keyframes,t.options),V(this.overlay,n.keyframes,n.options)]),this.emit(`sl-after-show`)}else{ro(this),this.emit(`sl-hide`),this.removeOpenListeners(),this.modal.deactivate(),await Promise.all([Aa(this.dialog),Aa(this.overlay)]);let e=B(this,`dialog.hide`,{dir:this.localize.dir()}),t=B(this,`dialog.overlay.hide`,{dir:this.localize.dir()});await Promise.all([V(this.overlay,t.keyframes,t.options).then(()=>{this.overlay.hidden=!0}),V(this.panel,e.keyframes,e.options).then(()=>{this.panel.hidden=!0})]),this.dialog.hidden=!0,this.overlay.hidden=!1,this.panel.hidden=!1,to(this);let n=this.originalTrigger;typeof n?.focus==`function`&&setTimeout(()=>n.focus()),this.emit(`sl-after-hide`)}}async show(){if(!this.open)return this.open=!0,Da(this,`sl-after-show`)}async hide(){if(this.open)return this.open=!1,Da(this,`sl-after-hide`)}render(){return C`
this.requestClose(`overlay`)} tabindex="-1">
@@ -1844,11 +1844,11 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value role="dialog" aria-modal="true" aria-hidden=${this.open?`false`:`true`} - aria-label=${P(this.noHeader?this.label:void 0)} - aria-labelledby=${P(this.noHeader?void 0:`title`)} + aria-label=${F(this.noHeader?this.label:void 0)} + aria-labelledby=${F(this.noHeader?void 0:`title`)} tabindex="-1" > - ${this.noHeader?``:S` + ${this.noHeader?``:C`

${this.label.length>0?this.label:``} @@ -1875,7 +1875,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value

- `}};Do.styles=[D,Eo],Do.dependencies={"sl-icon-button":F},T([j(`.dialog`)],Do.prototype,`dialog`,2),T([j(`.dialog__panel`)],Do.prototype,`panel`,2),T([j(`.dialog__overlay`)],Do.prototype,`overlay`,2),T([k({type:Boolean,reflect:!0})],Do.prototype,`open`,2),T([k({reflect:!0})],Do.prototype,`label`,2),T([k({attribute:`no-header`,type:Boolean,reflect:!0})],Do.prototype,`noHeader`,2),T([E(`open`,{waitUntilFirstUpdate:!0})],Do.prototype,`handleOpenChange`,1),R(`dialog.show`,{keyframes:[{opacity:0,scale:.8},{opacity:1,scale:1}],options:{duration:250,easing:`ease`}}),R(`dialog.hide`,{keyframes:[{opacity:1,scale:1},{opacity:0,scale:.8}],options:{duration:250,easing:`ease`}}),R(`dialog.denyClose`,{keyframes:[{scale:1},{scale:1.02},{scale:1}],options:{duration:250}}),R(`dialog.overlay.show`,{keyframes:[{opacity:0},{opacity:1}],options:{duration:250}}),R(`dialog.overlay.hide`,{keyframes:[{opacity:1},{opacity:0}],options:{duration:250}}),Do.define(`sl-dialog`);var Oo=x` + `}};Eo.styles=[O,To],Eo.dependencies={"sl-icon-button":I},E([M(`.dialog`)],Eo.prototype,`dialog`,2),E([M(`.dialog__panel`)],Eo.prototype,`panel`,2),E([M(`.dialog__overlay`)],Eo.prototype,`overlay`,2),E([A({type:Boolean,reflect:!0})],Eo.prototype,`open`,2),E([A({reflect:!0})],Eo.prototype,`label`,2),E([A({attribute:`no-header`,type:Boolean,reflect:!0})],Eo.prototype,`noHeader`,2),E([D(`open`,{waitUntilFirstUpdate:!0})],Eo.prototype,`handleOpenChange`,1),z(`dialog.show`,{keyframes:[{opacity:0,scale:.8},{opacity:1,scale:1}],options:{duration:250,easing:`ease`}}),z(`dialog.hide`,{keyframes:[{opacity:1,scale:1},{opacity:0,scale:.8}],options:{duration:250,easing:`ease`}}),z(`dialog.denyClose`,{keyframes:[{scale:1},{scale:1.02},{scale:1}],options:{duration:250}}),z(`dialog.overlay.show`,{keyframes:[{opacity:0},{opacity:1}],options:{duration:250}}),z(`dialog.overlay.hide`,{keyframes:[{opacity:1},{opacity:0}],options:{duration:250}}),Eo.define(`sl-dialog`);var Do=S` :host { display: contents; @@ -2015,10 +2015,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value .alert__timer { display: none; } -`,ko=class e extends M{constructor(){super(...arguments),this.hasSlotController=new ao(this,`icon`,`suffix`),this.localize=new I(this),this.open=!1,this.closable=!1,this.variant=`primary`,this.duration=1/0,this.remainingTime=this.duration}static get toastStack(){return this.currentToastStack||=Object.assign(document.createElement(`div`),{className:`sl-toast-stack`}),this.currentToastStack}firstUpdated(){this.base.hidden=!this.open}restartAutoHide(){this.handleCountdownChange(),clearTimeout(this.autoHideTimeout),clearInterval(this.remainingTimeInterval),this.open&&this.duration<1/0&&(this.autoHideTimeout=window.setTimeout(()=>this.hide(),this.duration),this.remainingTime=this.duration,this.remainingTimeInterval=window.setInterval(()=>{this.remainingTime-=100},100))}pauseAutoHide(){var e;(e=this.countdownAnimation)==null||e.pause(),clearTimeout(this.autoHideTimeout),clearInterval(this.remainingTimeInterval)}resumeAutoHide(){var e;this.duration<1/0&&(this.autoHideTimeout=window.setTimeout(()=>this.hide(),this.remainingTime),this.remainingTimeInterval=window.setInterval(()=>{this.remainingTime-=100},100),(e=this.countdownAnimation)==null||e.play())}handleCountdownChange(){if(this.open&&this.duration<1/0&&this.countdown){let{countdownElement:e}=this;this.countdownAnimation=e.animate([{width:`100%`},{width:`0`}],{duration:this.duration,easing:`linear`})}}handleCloseClick(){this.hide()}async handleOpenChange(){if(this.open){this.emit(`sl-show`),this.duration<1/0&&this.restartAutoHide(),await ja(this.base),this.base.hidden=!1;let{keyframes:e,options:t}=z(this,`alert.show`,{dir:this.localize.dir()});await B(this.base,e,t),this.emit(`sl-after-show`)}else{io(this),this.emit(`sl-hide`),clearTimeout(this.autoHideTimeout),clearInterval(this.remainingTimeInterval),await ja(this.base);let{keyframes:e,options:t}=z(this,`alert.hide`,{dir:this.localize.dir()});await B(this.base,e,t),this.base.hidden=!0,this.emit(`sl-after-hide`)}}handleDurationChange(){this.restartAutoHide()}async show(){if(!this.open)return this.open=!0,Oa(this,`sl-after-show`)}async hide(){if(this.open)return this.open=!1,Oa(this,`sl-after-hide`)}async toast(){return new Promise(t=>{this.handleCountdownChange(),e.toastStack.parentElement===null&&document.body.append(e.toastStack),e.toastStack.appendChild(this),requestAnimationFrame(()=>{this.clientWidth,this.show()}),this.addEventListener(`sl-after-hide`,()=>{e.toastStack.removeChild(this),t(),e.toastStack.querySelector(`sl-alert`)===null&&e.toastStack.remove()},{once:!0})})}render(){return S` +`,Oo=class e extends N{constructor(){super(...arguments),this.hasSlotController=new io(this,`icon`,`suffix`),this.localize=new L(this),this.open=!1,this.closable=!1,this.variant=`primary`,this.duration=1/0,this.remainingTime=this.duration}static get toastStack(){return this.currentToastStack||=Object.assign(document.createElement(`div`),{className:`sl-toast-stack`}),this.currentToastStack}firstUpdated(){this.base.hidden=!this.open}restartAutoHide(){this.handleCountdownChange(),clearTimeout(this.autoHideTimeout),clearInterval(this.remainingTimeInterval),this.open&&this.duration<1/0&&(this.autoHideTimeout=window.setTimeout(()=>this.hide(),this.duration),this.remainingTime=this.duration,this.remainingTimeInterval=window.setInterval(()=>{this.remainingTime-=100},100))}pauseAutoHide(){var e;(e=this.countdownAnimation)==null||e.pause(),clearTimeout(this.autoHideTimeout),clearInterval(this.remainingTimeInterval)}resumeAutoHide(){var e;this.duration<1/0&&(this.autoHideTimeout=window.setTimeout(()=>this.hide(),this.remainingTime),this.remainingTimeInterval=window.setInterval(()=>{this.remainingTime-=100},100),(e=this.countdownAnimation)==null||e.play())}handleCountdownChange(){if(this.open&&this.duration<1/0&&this.countdown){let{countdownElement:e}=this;this.countdownAnimation=e.animate([{width:`100%`},{width:`0`}],{duration:this.duration,easing:`linear`})}}handleCloseClick(){this.hide()}async handleOpenChange(){if(this.open){this.emit(`sl-show`),this.duration<1/0&&this.restartAutoHide(),await Aa(this.base),this.base.hidden=!1;let{keyframes:e,options:t}=B(this,`alert.show`,{dir:this.localize.dir()});await V(this.base,e,t),this.emit(`sl-after-show`)}else{ro(this),this.emit(`sl-hide`),clearTimeout(this.autoHideTimeout),clearInterval(this.remainingTimeInterval),await Aa(this.base);let{keyframes:e,options:t}=B(this,`alert.hide`,{dir:this.localize.dir()});await V(this.base,e,t),this.base.hidden=!0,this.emit(`sl-after-hide`)}}handleDurationChange(){this.restartAutoHide()}async show(){if(!this.open)return this.open=!0,Da(this,`sl-after-show`)}async hide(){if(this.open)return this.open=!1,Da(this,`sl-after-hide`)}async toast(){return new Promise(t=>{this.handleCountdownChange(),e.toastStack.parentElement===null&&document.body.append(e.toastStack),e.toastStack.appendChild(this),requestAnimationFrame(()=>{this.clientWidth,this.show()}),this.addEventListener(`sl-after-hide`,()=>{e.toastStack.removeChild(this),t(),e.toastStack.querySelector(`sl-alert`)===null&&e.toastStack.remove()},{once:!0})})}render(){return C` - ${this.closable?S` + ${this.closable?C` ${this.remainingTime}
- ${this.countdown?S` + ${this.countdown?C`
`:``} - `}};ko.styles=[D,Oo],ko.dependencies={"sl-icon-button":F},T([j(`[part~="base"]`)],ko.prototype,`base`,2),T([j(`.alert__countdown-elapsed`)],ko.prototype,`countdownElement`,2),T([k({type:Boolean,reflect:!0})],ko.prototype,`open`,2),T([k({type:Boolean,reflect:!0})],ko.prototype,`closable`,2),T([k({reflect:!0})],ko.prototype,`variant`,2),T([k({type:Number})],ko.prototype,`duration`,2),T([k({type:String,reflect:!0})],ko.prototype,`countdown`,2),T([A()],ko.prototype,`remainingTime`,2),T([E(`open`,{waitUntilFirstUpdate:!0})],ko.prototype,`handleOpenChange`,1),T([E(`duration`)],ko.prototype,`handleDurationChange`,1);var Ao=ko;R(`alert.show`,{keyframes:[{opacity:0,scale:.8},{opacity:1,scale:1}],options:{duration:250,easing:`ease`}}),R(`alert.hide`,{keyframes:[{opacity:1,scale:1},{opacity:0,scale:.8}],options:{duration:250,easing:`ease`}}),Ao.define(`sl-alert`);var jo=x` + `}};Oo.styles=[O,Do],Oo.dependencies={"sl-icon-button":I},E([M(`[part~="base"]`)],Oo.prototype,`base`,2),E([M(`.alert__countdown-elapsed`)],Oo.prototype,`countdownElement`,2),E([A({type:Boolean,reflect:!0})],Oo.prototype,`open`,2),E([A({type:Boolean,reflect:!0})],Oo.prototype,`closable`,2),E([A({reflect:!0})],Oo.prototype,`variant`,2),E([A({type:Number})],Oo.prototype,`duration`,2),E([A({type:String,reflect:!0})],Oo.prototype,`countdown`,2),E([j()],Oo.prototype,`remainingTime`,2),E([D(`open`,{waitUntilFirstUpdate:!0})],Oo.prototype,`handleOpenChange`,1),E([D(`duration`)],Oo.prototype,`handleDurationChange`,1);var ko=Oo;z(`alert.show`,{keyframes:[{opacity:0,scale:.8},{opacity:1,scale:1}],options:{duration:250,easing:`ease`}}),z(`alert.hide`,{keyframes:[{opacity:1,scale:1},{opacity:0,scale:.8}],options:{duration:250,easing:`ease`}}),ko.define(`sl-alert`);var Ao=S` :host { display: inline-flex; } @@ -2143,15 +2143,15 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value box-shadow: 0 0 0 0 transparent; } } -`,Mo=class extends M{constructor(){super(...arguments),this.variant=`primary`,this.pill=!1,this.pulse=!1}render(){return S` +`,jo=class extends N{constructor(){super(...arguments),this.variant=`primary`,this.pill=!1,this.pulse=!1}render(){return C` - `}};Mo.styles=[D,jo],T([k({reflect:!0})],Mo.prototype,`variant`,2),T([k({type:Boolean,reflect:!0})],Mo.prototype,`pill`,2),T([k({type:Boolean,reflect:!0})],Mo.prototype,`pulse`,2),Mo.define(`sl-badge`);var No=class extends M{constructor(){super(...arguments),this.localize=new I(this),this.value=0,this.type=`decimal`,this.noGrouping=!1,this.currency=`USD`,this.currencyDisplay=`symbol`}render(){return isNaN(this.value)?``:this.localize.number(this.value,{style:this.type,currency:this.currency,currencyDisplay:this.currencyDisplay,useGrouping:!this.noGrouping,minimumIntegerDigits:this.minimumIntegerDigits,minimumFractionDigits:this.minimumFractionDigits,maximumFractionDigits:this.maximumFractionDigits,minimumSignificantDigits:this.minimumSignificantDigits,maximumSignificantDigits:this.maximumSignificantDigits})}};T([k({type:Number})],No.prototype,`value`,2),T([k()],No.prototype,`type`,2),T([k({attribute:`no-grouping`,type:Boolean})],No.prototype,`noGrouping`,2),T([k()],No.prototype,`currency`,2),T([k({attribute:`currency-display`})],No.prototype,`currencyDisplay`,2),T([k({attribute:`minimum-integer-digits`,type:Number})],No.prototype,`minimumIntegerDigits`,2),T([k({attribute:`minimum-fraction-digits`,type:Number})],No.prototype,`minimumFractionDigits`,2),T([k({attribute:`maximum-fraction-digits`,type:Number})],No.prototype,`maximumFractionDigits`,2),T([k({attribute:`minimum-significant-digits`,type:Number})],No.prototype,`minimumSignificantDigits`,2),T([k({attribute:`maximum-significant-digits`,type:Number})],No.prototype,`maximumSignificantDigits`,2),No.define(`sl-format-number`);function Po(e){switch(e.toLowerCase()){case`get`:return`success`;case`post`:return`primary`;case`put`:return`primary`;case`delete`:return`danger`;case`patch`:return`warning`;case`query`:return`primary`;default:return`neutral`}}var Fo=x` + `}};jo.styles=[O,Ao],E([A({reflect:!0})],jo.prototype,`variant`,2),E([A({type:Boolean,reflect:!0})],jo.prototype,`pill`,2),E([A({type:Boolean,reflect:!0})],jo.prototype,`pulse`,2),jo.define(`sl-badge`);var Mo=class extends N{constructor(){super(...arguments),this.localize=new L(this),this.value=0,this.type=`decimal`,this.noGrouping=!1,this.currency=`USD`,this.currencyDisplay=`symbol`}render(){return isNaN(this.value)?``:this.localize.number(this.value,{style:this.type,currency:this.currency,currencyDisplay:this.currencyDisplay,useGrouping:!this.noGrouping,minimumIntegerDigits:this.minimumIntegerDigits,minimumFractionDigits:this.minimumFractionDigits,maximumFractionDigits:this.maximumFractionDigits,minimumSignificantDigits:this.minimumSignificantDigits,maximumSignificantDigits:this.maximumSignificantDigits})}};E([A({type:Number})],Mo.prototype,`value`,2),E([A()],Mo.prototype,`type`,2),E([A({attribute:`no-grouping`,type:Boolean})],Mo.prototype,`noGrouping`,2),E([A()],Mo.prototype,`currency`,2),E([A({attribute:`currency-display`})],Mo.prototype,`currencyDisplay`,2),E([A({attribute:`minimum-integer-digits`,type:Number})],Mo.prototype,`minimumIntegerDigits`,2),E([A({attribute:`minimum-fraction-digits`,type:Number})],Mo.prototype,`minimumFractionDigits`,2),E([A({attribute:`maximum-fraction-digits`,type:Number})],Mo.prototype,`maximumFractionDigits`,2),E([A({attribute:`minimum-significant-digits`,type:Number})],Mo.prototype,`minimumSignificantDigits`,2),E([A({attribute:`maximum-significant-digits`,type:Number})],Mo.prototype,`maximumSignificantDigits`,2),Mo.define(`sl-format-number`);function No(e){switch(e.toLowerCase()){case`get`:return`success`;case`post`:return`primary`;case`put`:return`primary`;case`delete`:return`danger`;case`patch`:return`warning`;case`query`:return`primary`;default:return`neutral`}}var Po=S` :host { --http-get-color: var(--terminal-text); --http-get-border-color: var(--ok-color-lowalpha); @@ -2287,11 +2287,11 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value --http-trace-color: #6b7280; --http-query-color: #2563eb; } -`,Io=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Lo={GET:`GET`,POST:`POST`,PUT:`PUT`,DELETE:`DEL`,PATCH:`PAT`,OPTIONS:`OPT`,HEAD:`HEAD`,TRACE:`TRC`,QUERY:`QRY`},Ro=class extends w{constructor(){super(),this.mode=``,this.lower=!1,this.method=`GET`}render(){if(this.mode===`nav-naked`){let e=this.method.toUpperCase(),t=Lo[e]??e;return S`${t}`}let e=`medium`;this.large&&(e=`large`),this.tiny&&(e=`small`),this.micro&&(e=`small`);let t=this.method.toLowerCase(),n=this.micro?`method ${e} micro ${t}`:`method ${e} ${t}`;return S` - =0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Io={GET:`GET`,POST:`POST`,PUT:`PUT`,DELETE:`DEL`,PATCH:`PAT`,OPTIONS:`OPT`,HEAD:`HEAD`,TRACE:`TRC`,QUERY:`QRY`},Lo=class extends T{constructor(){super(),this.mode=``,this.lower=!1,this.method=`GET`}render(){if(this.mode===`nav-naked`){let e=this.method.toUpperCase(),t=Io[e]??e;return C`${t}`}let e=`medium`;this.large&&(e=`large`),this.tiny&&(e=`small`),this.micro&&(e=`small`);let t=this.method.toLowerCase(),n=this.micro?`method ${e} micro ${t}`:`method ${e} ${t}`;return C` + ${this.lower?this.method.toLowerCase():this.method.toUpperCase()} - `}};Ro.styles=Fo,Io([k()],Ro.prototype,`method`,void 0),Io([k({type:Boolean})],Ro.prototype,`lower`,void 0),Io([k({type:Boolean})],Ro.prototype,`large`,void 0),Io([k({type:Boolean})],Ro.prototype,`tiny`,void 0),Io([k({type:Boolean})],Ro.prototype,`micro`,void 0),Io([k({reflect:!0})],Ro.prototype,`mode`,void 0),Ro=Io([O(`pb33f-http-method`)],Ro);var zo=class extends cr{constructor(e){if(super(e),this.it=C,e.type!==or.CHILD)throw Error(this.constructor.directiveName+`() can only be used in child bindings`)}render(e){if(e===C||e==null)return this._t=void 0,this.it=e;if(e===Kt)return e;if(typeof e!=`string`)throw Error(this.constructor.directiveName+`() called with a non-string value`);if(e===this.it)return this._t;this.it=e;let t=[e];return t.raw=t,this._t={_$litType$:this.constructor.resultType,strings:t,values:[]}}};zo.directiveName=`unsafeHTML`,zo.resultType=1;var Bo=sr(zo),Vo=x` + `}};Lo.styles=Po,Fo([A()],Lo.prototype,`method`,void 0),Fo([A({type:Boolean})],Lo.prototype,`lower`,void 0),Fo([A({type:Boolean})],Lo.prototype,`large`,void 0),Fo([A({type:Boolean})],Lo.prototype,`tiny`,void 0),Fo([A({type:Boolean})],Lo.prototype,`micro`,void 0),Fo([A({reflect:!0})],Lo.prototype,`mode`,void 0),Lo=Fo([k(`pb33f-http-method`)],Lo);var Ro=class extends sr{constructor(e){if(super(e),this.it=w,e.type!==ar.CHILD)throw Error(this.constructor.directiveName+`() can only be used in child bindings`)}render(e){if(e===w||e==null)return this._t=void 0,this.it=e;if(e===Gt)return e;if(typeof e!=`string`)throw Error(this.constructor.directiveName+`() called with a non-string value`);if(e===this.it)return this._t;this.it=e;let t=[e];return t.raw=t,this._t={_$litType$:this.constructor.resultType,strings:t,values:[]}}};Ro.directiveName=`unsafeHTML`,Ro.resultType=1;var zo=or(Ro),Bo=S` :host { color: var(--font-color); font-family: var(--font-stack), monospace; @@ -2330,7 +2330,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value .nowrap { display: inline-block; } -`,Ho=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Uo=class extends w{constructor(){super(),this.path=`/`,this.nowrap=!1}replaceBrackets(){let e=/\{([\w$.#/]+)\}/g,t=this.nowrap?` nowrap`:``,n=this.formatSlashes(this.path).replace(e,(e,n)=>`{${n}}`);return this.nowrap?S`
${Bo(n)}
`:S`${Bo(n)}`}formatSlashes(e){return e.replaceAll(`/`,`/`)}render(){return S`${this.replaceBrackets()}`}};Uo.styles=Vo,Ho([k()],Uo.prototype,`path`,void 0),Ho([k({type:Boolean})],Uo.prototype,`nowrap`,void 0),Uo=Ho([O(`pb33f-render-operation-path`)],Uo);var Wo=x` +`,Vo=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ho=class extends T{constructor(){super(),this.path=`/`,this.nowrap=!1}replaceBrackets(){let e=/\{([\w$.#/]+)\}/g,t=this.nowrap?` nowrap`:``,n=this.formatSlashes(this.path).replace(e,(e,n)=>`{${n}}`);return this.nowrap?C`
${zo(n)}
`:C`${zo(n)}`}formatSlashes(e){return e.replaceAll(`/`,`/`)}render(){return C`${this.replaceBrackets()}`}};Ho.styles=Bo,Vo([A()],Ho.prototype,`path`,void 0),Vo([A({type:Boolean})],Ho.prototype,`nowrap`,void 0),Ho=Vo([k(`pb33f-render-operation-path`)],Ho);var Uo=S` a, a:visited, a:active { text-decoration: none; color: var(--primary-color); @@ -2453,7 +2453,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value to { opacity: 0; } - }`,Go=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ko=class extends w{constructor(){super(),this.name=`pb33f`,this.url=`https://pb33f.io`,this.wide=!1,this.fluid=!1}render(){return S` + }`,Wo=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Go=class extends T{constructor(){super(),this.name=`pb33f`,this.url=`https://pb33f.io`,this.wide=!1,this.fluid=!1}render(){return C`
`}};Ko.styles=Wo,Go([k()],Ko.prototype,`name`,void 0),Go([k()],Ko.prototype,`url`,void 0),Go([k({type:Boolean})],Ko.prototype,`wide`,void 0),Go([k({type:Boolean})],Ko.prototype,`fluid`,void 0),Ko=Go([O(`pb33f-header`)],Ko);var qo=x` + `}};Go.styles=Uo,Wo([A()],Go.prototype,`name`,void 0),Wo([A()],Go.prototype,`url`,void 0),Wo([A({type:Boolean})],Go.prototype,`wide`,void 0),Wo([A({type:Boolean})],Go.prototype,`fluid`,void 0),Go=Wo([k(`pb33f-header`)],Go);var Ko=S` :host { display: inline-flex; @@ -2480,7 +2480,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value text-shadow: 0 0 8px rgba(51, 255, 51, 0.6); } -`,Jo=x` +`,qo=S` sl-tooltip::part(base){ font-family: var(--font-stack), monospace; @@ -2503,7 +2503,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value sl-tooltip::part(base__arrow){ background-color: var(--secondary-color); } - `,Yo=`pb33f-theme-change`,Xo=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Zo=`tektronix`,Qo=`pb33f-theme`,$o=`pb33f-base-theme`,es=class extends w{constructor(){super(...arguments),this.baseTheme=`dark`,this.tektronixActive=!1}get activeTheme(){return this.tektronixActive?Zo:this.baseTheme}connectedCallback(){super.connectedCallback();let e=localStorage.getItem(Qo);e===`tektronix`?(this.tektronixActive=!0,this.baseTheme=localStorage.getItem($o)===`light`?`light`:`dark`):(this.tektronixActive=!1,this.baseTheme=e===`light`?`light`:`dark`),this.applyTheme()}applyTheme(){let e=this.activeTheme;localStorage.setItem(Qo,e),localStorage.setItem($o,this.baseTheme);let t=document.querySelector(`html`);t&&(t.setAttribute(`theme`,e),e===`light`?t.classList.remove(`sl-theme-dark`):t.classList.add(`sl-theme-dark`))}dispatchThemeChange(){window.dispatchEvent(new CustomEvent(Yo,{detail:{theme:this.activeTheme}}))}toggleTheme(){this.baseTheme=this.baseTheme===`dark`?`light`:`dark`,this.tektronixActive&&=!1,this.applyTheme(),this.dispatchThemeChange()}toggleTektronix(){this.tektronixActive=!this.tektronixActive,this.applyTheme(),this.dispatchThemeChange()}render(){let e=this.baseTheme===`dark`?`sun`:`moon`,t=this.baseTheme===`dark`?`Switch to Roger Mode (light)`:`Switch to PB33F Mode (dark)`,n=this.tektronixActive?`Disable Tektronix 4010 Mode`:`Enable Tektronix 4010 Mode`;return S` + `,Jo=`pb33f-theme-change`,Yo=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Xo=`tektronix`,Zo=`pb33f-theme`,Qo=`pb33f-base-theme`,$o=class extends T{constructor(){super(...arguments),this.baseTheme=`dark`,this.tektronixActive=!1}get activeTheme(){return this.tektronixActive?Xo:this.baseTheme}connectedCallback(){super.connectedCallback();let e=localStorage.getItem(Zo);e===`tektronix`?(this.tektronixActive=!0,this.baseTheme=localStorage.getItem(Qo)===`light`?`light`:`dark`):(this.tektronixActive=!1,this.baseTheme=e===`light`?`light`:`dark`),this.applyTheme()}applyTheme(){let e=this.activeTheme;localStorage.setItem(Zo,e),localStorage.setItem(Qo,this.baseTheme);let t=document.querySelector(`html`);t&&(t.setAttribute(`theme`,e),e===`light`?t.classList.remove(`sl-theme-dark`):t.classList.add(`sl-theme-dark`))}dispatchThemeChange(){window.dispatchEvent(new CustomEvent(Jo,{detail:{theme:this.activeTheme}}))}toggleTheme(){this.baseTheme=this.baseTheme===`dark`?`light`:`dark`,this.tektronixActive&&=!1,this.applyTheme(),this.dispatchThemeChange()}toggleTektronix(){this.tektronixActive=!this.tektronixActive,this.applyTheme(),this.dispatchThemeChange()}render(){let e=this.baseTheme===`dark`?`sun`:`moon`,t=this.baseTheme===`dark`?`Switch to Roger Mode (light)`:`Switch to PB33F Mode (dark)`,n=this.tektronixActive?`Disable Tektronix 4010 Mode`:`Enable Tektronix 4010 Mode`;return C` - `}};es.styles=[qo,Jo],Xo([A()],es.prototype,`baseTheme`,void 0),Xo([A()],es.prototype,`tektronixActive`,void 0),es=Xo([O(`pb33f-theme-switcher`)],es);var ts=x` + `}};$o.styles=[Ko,qo],Yo([j()],$o.prototype,`baseTheme`,void 0),Yo([j()],$o.prototype,`tektronixActive`,void 0),$o=Yo([k(`pb33f-theme-switcher`)],$o);var es=S` a, a:visited, a:active { text-decoration: none; @@ -2638,7 +2638,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value } } -`,ns=x` +`,ts=S` code { font-size: 0.7rem; vertical-align: top; @@ -2957,7 +2957,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value padding-left: 20px; margin-bottom: 10px; } -`,rs=x` +`,ns=S` em, i { font-style: normal; @@ -2970,10 +2970,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value } -`,U;(function(e){e.VERSION=`version`,e.SCHEMA=`schema`,e.SCHEMAS=`schemas`,e.SCHEMA_TYPES=`types`,e.MEDIA_TYPE=`mediaType`,e.HEADER=`header`,e.EXAMPLE=`example`,e.EXAMPLES=`examples`,e.ENCODING=`encoding`,e.REQUEST_BODY=`requestBody`,e.REQUEST_BODIES=`requestBodies`,e.PARAMETER=`parameter`,e.PARAMETER_QUERY=`query`,e.COOKIE=`cookie`,e.PARAMETERS=`parameters`,e.LINK=`link`,e.LINKS=`links`,e.RESPONSE=`response`,e.RESPONSES=`responses`,e.OPERATION=`operation`,e.OPERATIONS=`operations`,e.SECURITY_SCHEME=`securityScheme`,e.SECURITY_SCHEMES=`securitySchemes`,e.EXTERNAL_DOCS=`externalDocs`,e.SECURITY=`security`,e.CALLBACK=`callback`,e.CALLBACKS=`callbacks`,e.PATH_ITEM=`pathItem`,e.PATH_ITEMS=`pathItems`,e.XML=`xml`,e.HEADERS=`headers`,e.SERVER=`server`,e.SERVERS=`servers`,e.SERVER_VARIABLE=`serverVariable`,e.PATHS=`paths`,e.COMPONENTS=`components`,e.CONTACT=`contact`,e.LICENSE=`license`,e.INFO=`info`,e.TAG=`tag`,e.TAGS=`tags`,e.DOCUMENT=`document`,e.WEBHOOK=`webhook`,e.WEBHOOKS=`webhooks`,e.EXTENSIONS=`extensions`,e.EXTENSION=`extension`,e.NO_EXAMPLE=`noExample`,e.POLYMORPHIC=`polymorphic`,e.ERROR=`error`,e.WARNING=`warning`,e.ROLODEX_FILE=`rolodex-file`,e.ROLODEX_FOLDER=`rolodex-dir`,e.OPENAPI=`openapi`,e.UPLOAD=`upload`,e.ADD=`add`,e.UNKNOWN=`unknown`,e.EXPAND_NODE=`expand-node`,e.POV_MODE=`pov-mode`,e.JS=`js`,e.GO=`go`,e.TS=`ts`,e.CS=`cs`,e.C=`c`,e.CPP=`cpp`,e.PHP=`php`,e.PY=`py`,e.HTML=`html`,e.MD=`md`,e.JAVA=`java`,e.RS=`rs`,e.ZIG=`zig`,e.RB=`rb`,e.YAML=`yaml`,e.JSON=`json`})(U||={});var is=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},as,os;(function(e){e.tiny=`tiny`,e.small=`small`,e.smaller=`smaller`,e.medium=`medium`,e.large=`large`,e.huge=`huge`})(os||={});var ss;(function(e){e.primary=`primary`,e.secondary=`secondary`,e.inverse=`inverse`,e.font=`font`,e.warning=`warning`,e.polymorphic=`polymorphic`,e.error=`error`,e.filtered=`filtered`})(ss||={});var cs=as=class extends w{getSize(){switch(this.size){case os.tiny:return`0.8rem`;case os.smaller:return`1.2rem`;case os.medium:return`1.4rem`;case os.large:return`1.8rem`;case os.huge:return`2rem`;default:return`1rem`}}getIconColor(){switch(this.color){case ss.primary:return`var(--primary-color)`;case ss.secondary:return`var(--secondary-color)`;case ss.warning:return`var(--warn-color)`;case ss.polymorphic:return`var(--warn-color)`;case ss.error:return`var(--error-color)`;case ss.inverse:return`var(--background-color)`;case ss.filtered:return`var(--font-color-sub2)`;case ss.font:default:return`var(--font-color)`}}constructor(){super(),this._themeHandler=()=>this.requestUpdate(),this.size=os.medium,this.color=ss.primary}connectedCallback(){super.connectedCallback(),window.addEventListener(Yo,this._themeHandler)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(Yo,this._themeHandler)}isLightMode(){return document.documentElement.getAttribute(`theme`)===`light`}getNodeTypeFromIcon(e){return Object.values(U).includes(e)?e:U.SCHEMA}static getIconForType(e){switch(e){case U.DOCUMENT:return`stars`;case U.SCHEMA:return`box`;case U.SCHEMA_TYPES:return`diagram-3`;case U.MEDIA_TYPE:case U.XML:return`code-slash`;case U.HEADER:case U.HEADERS:return`envelope`;case U.EXAMPLE:case U.EXAMPLES:return`chat-left-quote`;case U.ENCODING:return`box-seam`;case U.REQUEST_BODY:case U.REQUEST_BODIES:return`box-arrow-in-right`;case U.PARAMETER:case U.PARAMETERS:case U.SERVER_VARIABLE:return`braces-asterisk`;case U.PARAMETER_QUERY:return`question-lg`;case U.COOKIE:return`cookie`;case U.LINK:case U.LINKS:return`link`;case U.RESPONSE:case U.RESPONSES:return`box-arrow-left`;case U.OPERATION:case U.OPERATIONS:return`gear-wide-connected`;case U.SECURITY_SCHEME:case U.SECURITY_SCHEMES:case U.SECURITY:return`shield-lock`;case U.CALLBACK:case U.CALLBACKS:return`telephone-outbound`;case U.PATH_ITEM:case U.PATH_ITEMS:return`geo`;case U.SERVER:case U.SERVERS:return`hdd-network`;case U.PATHS:return`compass`;case U.COMPONENTS:return`boxes`;case U.CONTACT:return`person-circle`;case U.LICENSE:return`patch-check`;case U.UPLOAD:return`upload`;case U.INFO:return`info-square`;case U.TAG:return`tag`;case U.TAGS:return`tags`;case U.VERSION:return`award`;case U.EXTENSIONS:case U.EXTENSION:return`plug`;case U.WEBHOOK:case U.WEBHOOKS:return`arrow-clockwise`;case U.NO_EXAMPLE:return`exclamation-circle`;case U.POLYMORPHIC:return`diagram-3`;case U.ERROR:return`x-square`;case U.WARNING:return`exclamation-triangle`;case U.ROLODEX_FOLDER:return`folder`;case U.ROLODEX_FILE:return`journal-code`;case U.JS:return`filetype-js`;case U.PHP:return`filetype-php`;case U.PY:return`filetype-py`;case U.HTML:return`filetype-html`;case U.MD:return`markdown`;case U.JAVA:return`filetype-java`;case U.EXTERNAL_DOCS:return`journals`;case U.RB:return`filetype-rb`;case U.EXPAND_NODE:return`node-plus`;case U.POV_MODE:return`binoculars`;default:return`box`}}openapiIcon(){return this.isLightMode()?`PHN2ZyBpZD0icGIzM2Zfb3BlbmFwaSIgZGF0YS1uYW1lPSJwYjMzZl9vcGVuYXBpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3ODQuMzcgNzg0LjI5Ij4KICA8cGF0aCBkPSJNMjA3LjI4LDQ1MC45N0guMzFjLjA0LDEuMDIuMDcsMi4wMy4xMiwzLjAzLjA4LDEuOTUuMjIsMy44OC4zNCw1LjgzLjA1Ljg0LjA5LDEuNjcuMTYsMi41LjE2LDIuMjUuMzUsNC41LjU2LDYuNzMuMDUuNTEuMDksMS4wMi4xNCwxLjUuMjQsMi41LjUxLDQuOTkuOCw3LjQ3LjAxLjI0LjA0LjQ4LjA4LjcyLjMzLDIuNjcuNjcsNS4zNSwxLjA2LDgsMCwuMDQsMCwuMDguMDEuMSwyLjM5LDE2LjU0LDUuOTYsMzIuODgsMTAuNyw0OC45LjAzLjA3LjA1LjEzLjA3LjIuNzUsMi41NCwxLjUzLDUuMDUsMi4zMyw3LjU0LjA1LjE0LjEuMy4xNC40NHMuMDkuMjkuMTQuNDRjLjczLDIuMjYsMS41LDQuNTEsMi4yOCw2Ljc3LjIuNTYuMzksMS4xNC42LDEuNzEuNjksMS45NSwxLjQsMy45LDIuMTMsNS44Ni4zNC44OC42NywxLjc1Ljk5LDIuNjQuNjQsMS42MiwxLjI2LDMuMjMsMS45LDQuODQuNDgsMS4yMi45OCwyLjQzLDEuNDksMy42My41MiwxLjI3LDEuMDUsMi41MSwxLjU4LDMuNzguNjUsMS41NCwxLjM1LDMuMDcsMi4wMyw0LjYyLjQxLjkyLjgyLDEuODIsMS4yMywyLjczLjg0LDEuODQsMS43LDMuNjksMi41OCw1LjUyLjI5LjU5LjU2LDEuMTguODUsMS43NSwxLjAyLDIuMTIsMi4wNSw0LjIsMy4xLDYuMjguMTguMzEuMzMuNjQuNS45NSwxLjE4LDIuMywyLjM4LDQuNTksMy42Miw2Ljg2LjA1LjEuMTIuMi4xNi4zMS4yNi40Ny41NS45My44MSwxLjRsMTc2Ljc2LTEwNi40Ny42NS0uMzljLTYuOTctMTQuNy0xMS4zMS0zMC4zMy0xMi45My00Ni4yMmgwWiIgc3R5bGU9ImZpbGw6ICMzNTllZDM7Ii8+CiAgPHBhdGggZD0iTTI1OC4xNSw1NDUuOTlsLS41LjUtMTQ1Ljc5LDE0NS43N2MuNzUuNjksMS40OSwxLjQxLDIuMjYsMi4wOCwxLjM2LDEuMjQsMi43NSwyLjQ2LDQuMTIsMy42Ny43Mi42MywxLjQxLDEuMjYsMi4xMywxLjg4LDEuNjUsMS40MywzLjMyLDIuODEsNC45OCw0LjIxLjQ2LjM4Ljg5Ljc1LDEuMzUsMS4xMiwyLjEyLDEuNzQsNC4yNiwzLjQ2LDYuNDIsNS4xNSwyLjA3LDEuNjMsNC4xNCwzLjIyLDYuMjYsNC44MS4wOS4wNS4xNi4xLjI0LjE3LDguOCw2LjU3LDE3LjksMTIuNzIsMjcuMjcsMTguNDQuMzEuMjEuNjQuMzkuOTcuNiwxLjc5LDEuMDYsMy41NywyLjEyLDUuMzcsMy4xNmwzLjI5LDEuODhjMS4wNS42LDIuMDgsMS4xOCwzLjEyLDEuNzUsMS45LDEuMDMsMy43OSwyLjA3LDUuNywzLjA3LjI2LjE0LjUyLjI5LjguNDIsNS4zLDIuNzcsMTAuNjgsNS4zNSwxNi4xMiw3LjgzbDUuMTgtMTIuNTcsNzMuMzMtMTc4LjA0LjI2LS42NWMtOC00LjI5LTE1LjY4LTkuMzYtMjIuODktMTUuMjdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik0yNDIuOTcsNTMxLjQ2Yy0xLjU3LTEuNzQtMy4wOC0zLjUzLTQuNTUtNS4zNi0xLjMxLTEuNjEtMi41Ni0zLjIzLTMuNzgtNC44OC0xLjQtMS44OC0yLjc2LTMuNzktNC4wNS01LjczLTEuMjktMS45NS0yLjU4LTMuOTEtMy43OC01LjlsLTE3Ni45OCwxMDYuNmMyLjcyLDQuNTIsNS41NCw4LjkyLDguNDUsMTMuMjYuMDkuMTYuMTguMzEuMjkuNDYuMDMuMDcuMDcuMS4xLjE3LjA5LjEzLjE4LjI5LjI3LjQzLjAxLjAxLjAzLjAzLjAzLjA1LjI0LjM0LjQ3LjY4LjcxLDEuMDMuMDEuMDEuMDMuMDQuMDUuMDdzLjAxLjAxLjAxLjAzYzMuMDcsNC41NCw2LjI0LDkuMDEsOS40OSwxMy4zOC4wNy4wOS4xNC4xOC4yMS4yNy4wOC4wOS4xNC4xOC4yMS4yNywxLjQzLDEuODcsMi44NCwzLjc0LDQuMyw1LjYuMi4yNS4zOC40OC41OS43MiwxLjQ5LDEuOTIsMy4wMiwzLjgyLDQuNTgsNS42OS4zNy40NC43NS44OSwxLjExLDEuMzUsMS40LDEuNjcsMi44LDMuMzMsNC4yMiw0Ljk4LjYxLjcxLDEuMjQsMS40MywxLjg3LDIuMTIsMS4yMiwxLjM5LDIuNDIsMi43NywzLjY2LDQuMTMuNjguNzUsMS4zOSwxLjUsMi4wOCwyLjI1LjMxLjM1LjYzLjY4Ljk1LDEuMDMuOS45OCwxLjgsMS45NiwyLjcyLDIuOTMuMzcuMzguNzYuNzYsMS4xMiwxLjE1LDEuNjEsMS42NywzLjI0LDMuMzYsNC44OSw1LjAxbDE0Ni4wMS0xNDUuOThjLTEuNjctMS42Ny0zLjI0LTMuNC00Ljc5LTUuMTNoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik00MzYuNSw1NDUuOTFjLTEuNjEsMS4yOS0zLjIzLDIuNTYtNC44OCwzLjc4bC4zNS42MSwxMDYuNDYsMTc2LjY4YzQuOTMtMy4yMiw5LjgxLTYuNTQsMTQuNTctMTAuMDMsMTAuMy03LjYsMjAuMjctMTUuODMsMjkuODgtMjQuN2wtMTQ1LjgtMTQ1Ljc3LS41OC0uNThaIiBzdHlsZT0iZmlsbDogIzYyYzRmZjsiLz4KICA8cGF0aCBkPSJNNTIyLjk2LDcyOC40NGwtMy42MS02LTk5LjM3LTE2NC45MmMtMi4wMSwxLjItNC4wNywyLjMtNi4xMiwzLjQtMi4wOCwxLjEyLTQuMTYsMi4xNi02LjI4LDMuMTYtMTkuMDksOS4wNS0zOS43NSwxMy42OC02MC40NSwxMy42OC0xMy41NiwwLTI3LjEtMS45Ni00MC4yMS01Ljg3LTIuMjQtLjY3LTQuNDItMS41NC02LjYyLTIuMzMtMi4yMS0uNzctNC40NS0xLjQ1LTYuNjItMi4zNGwtNzMuMjcsMTc3LjkzLTIuODYsNi45Ny0yLjQ2LDUuOTh2LjAzYy4xNy4wOC4zNy4xNC41NS4yMi4yMS4wOC40MS4xNC42LjI0aC4wM2MuMDUuMDMuMS4wNC4xNC4wNSwxLjczLjcyLDMuNDYsMS4zMiw1LjIsMiwyLjE4Ljg1LDQuMzUsMS43MSw2LjU0LDIuNTEsMS4xMi40MSwyLjIyLjg4LDMuMzMsMS4yN2guMDFjMjIuOTYsOC4xLDQ2LjcxLDEzLjc5LDcwLjg1LDE2Ljk2Ljk1LjEyLDEuODguMjUsMi44NC4zOC45OC4xMiwxLjk3LjIxLDIuOTcuMzMsMS44Ni4yMSwzLjcxLjQyLDUuNTguNmwxLjM5LjEyYzIuMjkuMjIsNC41OC40Miw2Ljg1LjU4Ljc4LjA3LDEuNTcuMDksMi4zNC4xNiwyLC4xMyw0LC4yNSw2LC4zNCwxLjIzLjA4LDIuNDYuMSwzLjY5LjE2LDEuNi4wNSwzLjE4LjEyLDQuNzcuMTcsMi4yOS4wNSw0LjYuMDcsNi45LjA4LjU1LDAsMS4wOS4wMSwxLjYzLjAzLDE5LjI5LDAsMzguNTctMS42MSw1Ny42NS00LjgxLjMxLS4wNS42NC0uMS45Ny0uMTQsMi4wMS0uMzUsNC4wMy0uNzMsNi4wNC0xLjEsMS4xNS0uMjIsMi4zMS0uNDQsMy40NC0uNjcsMS4xOC0uMjUsMi4zNy0uNDgsMy41NC0uNzUsMS45Ni0uNDEsMy45Mi0uODQsNS45LTEuMjkuMzUtLjA4LjcxLS4xNCwxLjA2LS4yNSwyOS02Ljc1LDU3LjAxLTE3LjIxLDgzLjMxLTMxLjA1aDBjMS43My0uOTIsMy40MS0xLjk1LDUuMTMtMi44OSwyLjA0LTEuMTEsNC4wNy0yLjI4LDYuMTEtMy40NCwxLjQtLjgsMi44Mi0xLjU0LDQuMjItMi4zOC4wMS0uMDEuMDMtLjAzLjA0LS4wM2guMDFzLjA0LS4wMy4wNy0uMDRsLjAzLS4wMy0uMjYtLjQzLjI2LjQzcy4wMy0uMDEuMDQtLjAxYy4wMy0uMDEuMDQtLjAzLjA3LS4wNC4wOC0uMDUuMTYtLjA5LjI0LS4xNC40NC0uMjcuOS0uNTQsMS4zNi0uODFsLTMuNTgtNS45OVpNMjU4LjIzLDMyOC4wNWMxLjYxLTEuMzEsMy4yNC0yLjU2LDQuODgtMy43OWwtLjM1LS42LTEwNi40Ni0xNzYuN2MtNC45NCwzLjIzLTkuODIsNi41Ni0xNC41OSwxMC4wNS0xMC4yOSw3LjU4LTIwLjI3LDE1LjgxLTI5Ljg1LDI0LjY2bDE0NS44LDE0NS43OS41OC41OVoiIHN0eWxlPSJmaWxsOiAjMzU5ZWQzOyIvPgogIDxwYXRoIGQ9Ik0xMDEuNzUsMTkxLjM5Yy0xLjY2LDEuNjYtMy4yMywzLjM3LTQuODUsNS4wNS0xLjYxLDEuNjktMy4yNiwzLjM2LTQuODQsNS4wNi0xMC42NCwxMS41MS0yMC41LDIzLjcyLTI5LjUsMzYuNTYtLjQzLjU5LS44NSwxLjIyLTEuMjgsMS44Mi0uOTksMS40Ni0xLjk5LDIuOTItMi45NSw0LjM4LTEuMDIsMS41Mi0yLjAzLDMuMDYtMy4wMSw0LjU5LS4zNy41Ni0uNzMsMS4xNC0xLjA5LDEuN0MyMC43LDMwMy4xNCwyLjczLDM2Mi44LjMxLDQyMi45NmMtLjA5LDIuMzQtLjE0LDQuNjgtLjIsNy4wMS0uMDQsMi4zMy0uMTIsNC42Ny0uMTIsN2gyMDYuNDljMC0yLjMzLjIxLTQuNjUuMzQtNywuMTItMi4zNC4xNC00LjY4LjM4LTcuMDEsMi42Ny0yNi44OCwxMy4wNS01My4xNCwzMS4xNC03NS4xOCwxLjQ2LTEuNzksMy4xMi0zLjQ4LDQuNzEtNS4yLDEuNTYtMS43NCwzLjAyLTMuNTMsNC42OS01LjJMMTAxLjc1LDE5MS4zOVpNNTI3LjgsMTQwLjE0Yy0uMjctLjE3LS41OC0uMzQtLjg1LS41MS0xLjgyLTEuMTEtMy42NS0yLjE4LTUuNDktMy4yNi0xLjA2LS42MS0yLjEzLTEuMjItMy4xOS0xLjgyLTEuMDktLjYtMi4xNC0xLjItMy4yMy0xLjc5LTEuODctMS4wMi0zLjc0LTIuMDMtNS42MS0zLjAzLS4zLS4xNC0uNTktLjMtLjg5LS40Ni0xMi4xMS02LjMzLTI0LjU0LTExLjktMzcuMjQtMTYuNzQtLjMzLS4xMy0uNjUtLjI2LS45OC0uMzgtMi43Ny0xLjAzLTUuNTQtMi4wNy04LjM0LTMuMDMtMjIuNTYtNy44Ny00NS44OC0xMy40LTY5LjU3LTE2LjUxbC0yLjktLjM5Yy0uOTgtLjEyLTEuOTUtLjIxLTIuOTItLjMxLTEuODctLjIyLTMuNzMtLjQzLTUuNjEtLjYxLS41MS0uMDUtMS4wMy0uMDgtMS41Ny0uMTQtMi4yMS0uMi00LjQ1LS4zOS02LjY3LS41NmwtMi42LS4xNmMtMS45LS4xMi0zLjgzLS4yNi01LjczLS4zNC0xLjAyLS4wNS0yLjA0LS4wOS0zLjA1LS4xMnYyMDYuOTdjMTAuNjIsMS4xLDIxLjE0LDMuMzYsMzEuMzUsNi44M2wxNTIuMzQtMTUyLjMxYy01LjY2LTMuOTItMTEuMzgtNy43NC0xNy4yNi0xMS4zMWgwWiIgc3R5bGU9ImZpbGw6ICM2MmM0ZmY7Ii8+CiAgPHBhdGggZD0iTTM0MC4zNyw4OS44Yy0yLjM0LjA1LTQuNjguMDUtNy4wMS4xNC0xNC42LjU5LTI5LjE4LDIuMDgtNDMuNjQsNC41MS0uMzEuMDUtLjYzLjEtLjk1LjE2LTIuMDMuMzUtNC4wNC43Mi02LjA1LDEuMS0xLjE0LjIyLTIuMjkuNDMtMy40NC42NS0xLjE5LjI0LTIuMzcuNDgtMy41Ni43NS0xLjk2LjQxLTMuOTIuODQtNS44NywxLjI5LS4zNy4wNy0uNzIuMTYtMS4wNy4yNC0yOC45OCw2Ljc3LTU2Ljk5LDE3LjIxLTgzLjMzLDMxLjA3LTEuNzEuOTItMy4zOSwxLjk1LTUuMSwyLjg4LTIuMDQsMS4xMi00LjA4LDIuMjgtNi4xMSwzLjQ0LTEuNS44OC0zLjAzLDEuNjctNC41NCwyLjU2LS4wMS4wMS0uMDQuMDMtLjA1LjAzLS4xLjA3LS4yMS4xMy0uMzEuMTgtLjM5LjI1LS44LjQ0LTEuMTkuNjh2LjAzczMuNjMsNiwzLjYzLDZsMTAyLjk3LDE3MC45M2MyLjAxLTEuMiw0LjA3LTIuMzEsNi4xMi0zLjQxLDIuMDctMS4xMSw0LjE2LTIuMTYsNi4yNi0zLjE1LDE0LjU1LTYuOTUsMzAuMTktMTEuMzMsNDYuMjMtMTIuOTYsMi4zMy0uMjQsNC42NS0uNDMsNy0uNTUsMi4zMy0uMTIsNC42Ny0uMjQsNy4wMS0uMjRWODkuNjVjLTIuMzQsMC00LjY3LjEtNywuMTRoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik02OTQuMyw0MTkuOWMtLjEtMS44Ni0uMjEtMy43LS4zNC01LjU3LS4wNS0uOTItLjExLTEuODUtLjE4LTIuNzctLjE0LTIuMTgtLjMzLTQuMzctLjU0LTYuNTUtLjA0LS41Ni0uMDktMS4xMi0uMTQtMS42OS0uMjQtMi40NS0uNS00Ljg4LS43OC03LjMxLS4wMy0uMi0uMDQtLjM5LS4wNy0uNTlsLS4wNC0uMjdjLS4zMS0yLjYzLS42Ny01LjI2LTEuMDMtNy44N2wtLjA0LS4yNWMtMi4zOC0xNi41LTUuOTUtMzIuODItMTAuNjctNDguODEtLjA0LS4xMi0uMDctLjIxLS4xLS4zMS0uNzUtMi41LTEuNTItNC45Ny0yLjI5LTcuNDQtLjEyLS4zMy0uMjItLjY1LS4zMy0uOTgtLjczLTIuMjQtMS40OC00LjQ2LTIuMjUtNi42OGwtLjYzLTEuOGMtLjY4LTEuOTItMS4zOS0zLjg0LTIuMDktNS43Ny0uMzUtLjkyLS42OS0xLjgzLTEuMDYtMi43My0uNi0xLjYtMS4yMi0zLjE4LTEuODYtNC43NS0uNS0xLjI3LTEuMDEtMi41MS0xLjUyLTMuNzQtLjUxLTEuMjQtMS4wMy0yLjQ2LTEuNTQtMy42OS0uNjgtMS41Ny0xLjM3LTMuMTQtMi4wNy00LjY5LS4zOS0uODgtLjc4LTEuNzctMS4xOS0yLjY1LS44NS0xLjg2LTEuNzMtMy43My0yLjYtNS41OC0uMjctLjU1LS41NS0xLjEyLS44Mi0xLjY5LTEuMDItMi4xMi0yLjA3LTQuMjUtMy4xNC02LjM0LS4xNC0uMjktLjMtLjU5LS40NC0uODgtMS4xOS0yLjMxLTIuNDItNC42NC0zLjY1LTYuOTMtLjA1LS4wOC0uMDktLjE3LS4xNC0uMjUtNi0xMS4wMy0xMi42LTIxLjc0LTE5Ljc2LTMyLjA2bC0xNTIuMzgsMTUyLjM4YzMuNDYsMTAuMjEsNS43MSwyMC43NCw2LjgxLDMxLjM0aDIwN2MtLjA1LTEuMDMtLjA4LTIuMDctLjEzLTMuMDdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik00ODguMjQsNDM2Ljk3YzAsMi4zNC0uMjIsNC42Ny0uMzQsNy4wMXMtLjE2LDQuNjgtLjM5LDdjLTIuNjcsMjYuOS0xMy4wNCw1My4xNS0zMS4xMyw3NS4yMS0xLjQ2LDEuNzktMy4xMiwzLjQ2LTQuNzEsNS4yLTEuNTcsMS43My0zLjAyLDMuNTItNC42OSw1LjE5bDE0Ni4wMSwxNDUuOThjMS42Ni0xLjY2LDMuMjItMy4zNyw0Ljg0LTUuMDZzMy4yNy0zLjM1LDQuODQtNS4wNmMxMC44LTExLjcsMjAuNjgtMjMuOTQsMjkuNTgtMzYuNjYuMzctLjUxLjY5LTEuMDEsMS4wNS0xLjUsMS4wOS0xLjU2LDIuMTMtMy4xNCwzLjItNC43MS45My0xLjQxLDEuODYtMi44MSwyLjc2LTQuMjQuNDYtLjY4LjktMS4zOSwxLjMzLTIuMDcsMzMuNDktNTIuNTcsNTEuNDEtMTEyLjE3LDUzLjgyLTE3Mi4yOS4wOS0yLjMzLjE0LTQuNjcuMTgtNy4wMS4wNS0yLjMzLjEyLTQuNjUuMTItN2gtMjA2LjQ2WiIgc3R5bGU9ImZpbGw6ICNmNmY7Ii8+CiAgPHBhdGggZD0iTTc1Ni4wNCwyOC4zM2MtMzcuNzctMzcuNzctOTkuMDItMzcuNzctMTM2Ljc5LDAtMzAuMTQsMzAuMTItMzYuMTcsNzUuMTctMTguMjEsMTExLjMzbC0yMTAuNzIsMjEwLjdjLTM2LjE3LTE3Ljk0LTgxLjIyLTExLjkyLTExMS4zNiwxOC4yLTM3Ljc3LDM3Ljc3LTM3Ljc2LDk5LjAyLDAsMTM2Ljc5LDM3Ljc5LDM3Ljc3LDk5LjA0LDM3Ljc2LDEzNi44MiwwLDMwLjE0LTMwLjE0LDM2LjE1LTc1LjE4LDE4LjItMTExLjM1bDIxMC43Mi0yMTAuNjljMzYuMTgsMTcuOTQsODEuMjEsMTEuOTIsMTExLjM1LTE4LjIxLDM3Ljc3LTM3Ljc2LDM3Ljc3LTk5LDAtMTM2Ljc4aDBaIiBzdHlsZT0iZmlsbDogIzAwMDsiLz4KPC9zdmc+`:`PHN2ZyBpZD0icGIzM2Zfb3BlbmFwaSIgZGF0YS1uYW1lPSJwYjMzZl9vcGVuYXBpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3ODQuMzcgNzg0LjI5Ij4KICA8cGF0aCBkPSJNMjA3LjI4LDQ1MC45N0guMzFjLjA0LDEuMDIuMDcsMi4wMy4xMiwzLjAzLjA4LDEuOTUuMjIsMy44OC4zNCw1LjgzLjA1Ljg0LjA5LDEuNjcuMTYsMi41LjE2LDIuMjUuMzUsNC41LjU2LDYuNzMuMDUuNTEuMDksMS4wMi4xNCwxLjUuMjQsMi41LjUxLDQuOTkuOCw3LjQ3LjAxLjI0LjA0LjQ4LjA4LjcyLjMzLDIuNjcuNjcsNS4zNSwxLjA2LDgsMCwuMDQsMCwuMDguMDEuMSwyLjM5LDE2LjU0LDUuOTYsMzIuODgsMTAuNyw0OC45LjAzLjA3LjA1LjEzLjA3LjIuNzUsMi41NCwxLjUzLDUuMDUsMi4zMyw3LjU0LjA1LjE0LjEuMy4xNC40NHMuMDkuMjkuMTQuNDRjLjczLDIuMjYsMS41LDQuNTEsMi4yOCw2Ljc3LjIuNTYuMzksMS4xNC42LDEuNzEuNjksMS45NSwxLjQsMy45LDIuMTMsNS44Ni4zNC44OC42NywxLjc1Ljk5LDIuNjQuNjQsMS42MiwxLjI2LDMuMjMsMS45LDQuODQuNDgsMS4yMi45OCwyLjQzLDEuNDksMy42My41MiwxLjI3LDEuMDUsMi41MSwxLjU4LDMuNzguNjUsMS41NCwxLjM1LDMuMDcsMi4wMyw0LjYyLjQxLjkyLjgyLDEuODIsMS4yMywyLjczLjg0LDEuODQsMS43LDMuNjksMi41OCw1LjUyLjI5LjU5LjU2LDEuMTguODUsMS43NSwxLjAyLDIuMTIsMi4wNSw0LjIsMy4xLDYuMjguMTguMzEuMzMuNjQuNS45NSwxLjE4LDIuMywyLjM4LDQuNTksMy42Miw2Ljg2LjA1LjEuMTIuMi4xNi4zMS4yNi40Ny41NS45My44MSwxLjRsMTc2Ljc2LTEwNi40Ny42NS0uMzljLTYuOTctMTQuNy0xMS4zMS0zMC4zMy0xMi45My00Ni4yMmgwWiIgc3R5bGU9ImZpbGw6ICMzNTllZDM7Ii8+CiAgPHBhdGggZD0iTTI1OC4xNSw1NDUuOTlsLS41LjUtMTQ1Ljc5LDE0NS43N2MuNzUuNjksMS40OSwxLjQxLDIuMjYsMi4wOCwxLjM2LDEuMjQsMi43NSwyLjQ2LDQuMTIsMy42Ny43Mi42MywxLjQxLDEuMjYsMi4xMywxLjg4LDEuNjUsMS40MywzLjMyLDIuODEsNC45OCw0LjIxLjQ2LjM4Ljg5Ljc1LDEuMzUsMS4xMiwyLjEyLDEuNzQsNC4yNiwzLjQ2LDYuNDIsNS4xNSwyLjA3LDEuNjMsNC4xNCwzLjIyLDYuMjYsNC44MS4wOS4wNS4xNi4xLjI0LjE3LDguOCw2LjU3LDE3LjksMTIuNzIsMjcuMjcsMTguNDQuMzEuMjEuNjQuMzkuOTcuNiwxLjc5LDEuMDYsMy41NywyLjEyLDUuMzcsMy4xNmwzLjI5LDEuODhjMS4wNS42LDIuMDgsMS4xOCwzLjEyLDEuNzUsMS45LDEuMDMsMy43OSwyLjA3LDUuNywzLjA3LjI2LjE0LjUyLjI5LjguNDIsNS4zLDIuNzcsMTAuNjgsNS4zNSwxNi4xMiw3LjgzbDUuMTgtMTIuNTcsNzMuMzMtMTc4LjA0LjI2LS42NWMtOC00LjI5LTE1LjY4LTkuMzYtMjIuODktMTUuMjdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik0yNDIuOTcsNTMxLjQ2Yy0xLjU3LTEuNzQtMy4wOC0zLjUzLTQuNTUtNS4zNi0xLjMxLTEuNjEtMi41Ni0zLjIzLTMuNzgtNC44OC0xLjQtMS44OC0yLjc2LTMuNzktNC4wNS01LjczLTEuMjktMS45NS0yLjU4LTMuOTEtMy43OC01LjlsLTE3Ni45OCwxMDYuNmMyLjcyLDQuNTIsNS41NCw4LjkyLDguNDUsMTMuMjYuMDkuMTYuMTguMzEuMjkuNDYuMDMuMDcuMDcuMS4xLjE3LjA5LjEzLjE4LjI5LjI3LjQzLjAxLjAxLjAzLjAzLjAzLjA1LjI0LjM0LjQ3LjY4LjcxLDEuMDMuMDEuMDEuMDMuMDQuMDUuMDdzLjAxLjAxLjAxLjAzYzMuMDcsNC41NCw2LjI0LDkuMDEsOS40OSwxMy4zOC4wNy4wOS4xNC4xOC4yMS4yNy4wOC4wOS4xNC4xOC4yMS4yNywxLjQzLDEuODcsMi44NCwzLjc0LDQuMyw1LjYuMi4yNS4zOC40OC41OS43MiwxLjQ5LDEuOTIsMy4wMiwzLjgyLDQuNTgsNS42OS4zNy40NC43NS44OSwxLjExLDEuMzUsMS40LDEuNjcsMi44LDMuMzMsNC4yMiw0Ljk4LjYxLjcxLDEuMjQsMS40MywxLjg3LDIuMTIsMS4yMiwxLjM5LDIuNDIsMi43NywzLjY2LDQuMTMuNjguNzUsMS4zOSwxLjUsMi4wOCwyLjI1LjMxLjM1LjYzLjY4Ljk1LDEuMDMuOS45OCwxLjgsMS45NiwyLjcyLDIuOTMuMzcuMzguNzYuNzYsMS4xMiwxLjE1LDEuNjEsMS42NywzLjI0LDMuMzYsNC44OSw1LjAxbDE0Ni4wMS0xNDUuOThjLTEuNjctMS42Ny0zLjI0LTMuNC00Ljc5LTUuMTNoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik00MzYuNSw1NDUuOTFjLTEuNjEsMS4yOS0zLjIzLDIuNTYtNC44OCwzLjc4bC4zNS42MSwxMDYuNDYsMTc2LjY4YzQuOTMtMy4yMiw5LjgxLTYuNTQsMTQuNTctMTAuMDMsMTAuMy03LjYsMjAuMjctMTUuODMsMjkuODgtMjQuN2wtMTQ1LjgtMTQ1Ljc3LS41OC0uNThaIiBzdHlsZT0iZmlsbDogIzYyYzRmZjsiLz4KICA8cGF0aCBkPSJNNTIyLjk2LDcyOC40NGwtMy42MS02LTk5LjM3LTE2NC45MmMtMi4wMSwxLjItNC4wNywyLjMtNi4xMiwzLjQtMi4wOCwxLjEyLTQuMTYsMi4xNi02LjI4LDMuMTYtMTkuMDksOS4wNS0zOS43NSwxMy42OC02MC40NSwxMy42OC0xMy41NiwwLTI3LjEtMS45Ni00MC4yMS01Ljg3LTIuMjQtLjY3LTQuNDItMS41NC02LjYyLTIuMzMtMi4yMS0uNzctNC40NS0xLjQ1LTYuNjItMi4zNGwtNzMuMjcsMTc3LjkzLTIuODYsNi45Ny0yLjQ2LDUuOTh2LjAzYy4xNy4wOC4zNy4xNC41NS4yMi4yMS4wOC40MS4xNC42LjI0aC4wM2MuMDUuMDMuMS4wNC4xNC4wNSwxLjczLjcyLDMuNDYsMS4zMiw1LjIsMiwyLjE4Ljg1LDQuMzUsMS43MSw2LjU0LDIuNTEsMS4xMi40MSwyLjIyLjg4LDMuMzMsMS4yN2guMDFjMjIuOTYsOC4xLDQ2LjcxLDEzLjc5LDcwLjg1LDE2Ljk2Ljk1LjEyLDEuODguMjUsMi44NC4zOC45OC4xMiwxLjk3LjIxLDIuOTcuMzMsMS44Ni4yMSwzLjcxLjQyLDUuNTguNmwxLjM5LjEyYzIuMjkuMjIsNC41OC40Miw2Ljg1LjU4Ljc4LjA3LDEuNTcuMDksMi4zNC4xNiwyLC4xMyw0LC4yNSw2LC4zNCwxLjIzLjA4LDIuNDYuMSwzLjY5LjE2LDEuNi4wNSwzLjE4LjEyLDQuNzcuMTcsMi4yOS4wNSw0LjYuMDcsNi45LjA4LjU1LDAsMS4wOS4wMSwxLjYzLjAzLDE5LjI5LDAsMzguNTctMS42MSw1Ny42NS00LjgxLjMxLS4wNS42NC0uMS45Ny0uMTQsMi4wMS0uMzUsNC4wMy0uNzMsNi4wNC0xLjEsMS4xNS0uMjIsMi4zMS0uNDQsMy40NC0uNjcsMS4xOC0uMjUsMi4zNy0uNDgsMy41NC0uNzUsMS45Ni0uNDEsMy45Mi0uODQsNS45LTEuMjkuMzUtLjA4LjcxLS4xNCwxLjA2LS4yNSwyOS02Ljc1LDU3LjAxLTE3LjIxLDgzLjMxLTMxLjA1aDBjMS43My0uOTIsMy40MS0xLjk1LDUuMTMtMi44OSwyLjA0LTEuMTEsNC4wNy0yLjI4LDYuMTEtMy40NCwxLjQtLjgsMi44Mi0xLjU0LDQuMjItMi4zOC4wMS0uMDEuMDMtLjAzLjA0LS4wM2guMDFzLjA0LS4wMy4wNy0uMDRsLjAzLS4wMy0uMjYtLjQzLjI2LjQzcy4wMy0uMDEuMDQtLjAxYy4wMy0uMDEuMDQtLjAzLjA3LS4wNC4wOC0uMDUuMTYtLjA5LjI0LS4xNC40NC0uMjcuOS0uNTQsMS4zNi0uODFsLTMuNTgtNS45OVpNMjU4LjIzLDMyOC4wNWMxLjYxLTEuMzEsMy4yNC0yLjU2LDQuODgtMy43OWwtLjM1LS42LTEwNi40Ni0xNzYuN2MtNC45NCwzLjIzLTkuODIsNi41Ni0xNC41OSwxMC4wNS0xMC4yOSw3LjU4LTIwLjI3LDE1LjgxLTI5Ljg1LDI0LjY2bDE0NS44LDE0NS43OS41OC41OVoiIHN0eWxlPSJmaWxsOiAjMzU5ZWQzOyIvPgogIDxwYXRoIGQ9Ik0xMDEuNzUsMTkxLjM5Yy0xLjY2LDEuNjYtMy4yMywzLjM3LTQuODUsNS4wNS0xLjYxLDEuNjktMy4yNiwzLjM2LTQuODQsNS4wNi0xMC42NCwxMS41MS0yMC41LDIzLjcyLTI5LjUsMzYuNTYtLjQzLjU5LS44NSwxLjIyLTEuMjgsMS44Mi0uOTksMS40Ni0xLjk5LDIuOTItMi45NSw0LjM4LTEuMDIsMS41Mi0yLjAzLDMuMDYtMy4wMSw0LjU5LS4zNy41Ni0uNzMsMS4xNC0xLjA5LDEuN0MyMC43LDMwMy4xNCwyLjczLDM2Mi44LjMxLDQyMi45NmMtLjA5LDIuMzQtLjE0LDQuNjgtLjIsNy4wMS0uMDQsMi4zMy0uMTIsNC42Ny0uMTIsN2gyMDYuNDljMC0yLjMzLjIxLTQuNjUuMzQtNywuMTItMi4zNC4xNC00LjY4LjM4LTcuMDEsMi42Ny0yNi44OCwxMy4wNS01My4xNCwzMS4xNC03NS4xOCwxLjQ2LTEuNzksMy4xMi0zLjQ4LDQuNzEtNS4yLDEuNTYtMS43NCwzLjAyLTMuNTMsNC42OS01LjJMMTAxLjc1LDE5MS4zOVpNNTI3LjgsMTQwLjE0Yy0uMjctLjE3LS41OC0uMzQtLjg1LS41MS0xLjgyLTEuMTEtMy42NS0yLjE4LTUuNDktMy4yNi0xLjA2LS42MS0yLjEzLTEuMjItMy4xOS0xLjgyLTEuMDktLjYtMi4xNC0xLjItMy4yMy0xLjc5LTEuODctMS4wMi0zLjc0LTIuMDMtNS42MS0zLjAzLS4zLS4xNC0uNTktLjMtLjg5LS40Ni0xMi4xMS02LjMzLTI0LjU0LTExLjktMzcuMjQtMTYuNzQtLjMzLS4xMy0uNjUtLjI2LS45OC0uMzgtMi43Ny0xLjAzLTUuNTQtMi4wNy04LjM0LTMuMDMtMjIuNTYtNy44Ny00NS44OC0xMy40LTY5LjU3LTE2LjUxbC0yLjktLjM5Yy0uOTgtLjEyLTEuOTUtLjIxLTIuOTItLjMxLTEuODctLjIyLTMuNzMtLjQzLTUuNjEtLjYxLS41MS0uMDUtMS4wMy0uMDgtMS41Ny0uMTQtMi4yMS0uMi00LjQ1LS4zOS02LjY3LS41NmwtMi42LS4xNmMtMS45LS4xMi0zLjgzLS4yNi01LjczLS4zNC0xLjAyLS4wNS0yLjA0LS4wOS0zLjA1LS4xMnYyMDYuOTdjMTAuNjIsMS4xLDIxLjE0LDMuMzYsMzEuMzUsNi44M2wxNTIuMzQtMTUyLjMxYy01LjY2LTMuOTItMTEuMzgtNy43NC0xNy4yNi0xMS4zMWgwWiIgc3R5bGU9ImZpbGw6ICM2MmM0ZmY7Ii8+CiAgPHBhdGggZD0iTTM0MC4zNyw4OS44Yy0yLjM0LjA1LTQuNjguMDUtNy4wMS4xNC0xNC42LjU5LTI5LjE4LDIuMDgtNDMuNjQsNC41MS0uMzEuMDUtLjYzLjEtLjk1LjE2LTIuMDMuMzUtNC4wNC43Mi02LjA1LDEuMS0xLjE0LjIyLTIuMjkuNDMtMy40NC42NS0xLjE5LjI0LTIuMzcuNDgtMy41Ni43NS0xLjk2LjQxLTMuOTIuODQtNS44NywxLjI5LS4zNy4wNy0uNzIuMTYtMS4wNy4yNC0yOC45OCw2Ljc3LTU2Ljk5LDE3LjIxLTgzLjMzLDMxLjA3LTEuNzEuOTItMy4zOSwxLjk1LTUuMSwyLjg4LTIuMDQsMS4xMi00LjA4LDIuMjgtNi4xMSwzLjQ0LTEuNS44OC0zLjAzLDEuNjctNC41NCwyLjU2LS4wMS4wMS0uMDQuMDMtLjA1LjAzLS4xLjA3LS4yMS4xMy0uMzEuMTgtLjM5LjI1LS44LjQ0LTEuMTkuNjh2LjAzczMuNjMsNiwzLjYzLDZsMTAyLjk3LDE3MC45M2MyLjAxLTEuMiw0LjA3LTIuMzEsNi4xMi0zLjQxLDIuMDctMS4xMSw0LjE2LTIuMTYsNi4yNi0zLjE1LDE0LjU1LTYuOTUsMzAuMTktMTEuMzMsNDYuMjMtMTIuOTYsMi4zMy0uMjQsNC42NS0uNDMsNy0uNTUsMi4zMy0uMTIsNC42Ny0uMjQsNy4wMS0uMjRWODkuNjVjLTIuMzQsMC00LjY3LjEtNywuMTRoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik02OTQuMyw0MTkuOWMtLjEtMS44Ni0uMjEtMy43LS4zNC01LjU3LS4wNS0uOTItLjExLTEuODUtLjE4LTIuNzctLjE0LTIuMTgtLjMzLTQuMzctLjU0LTYuNTUtLjA0LS41Ni0uMDktMS4xMi0uMTQtMS42OS0uMjQtMi40NS0uNS00Ljg4LS43OC03LjMxLS4wMy0uMi0uMDQtLjM5LS4wNy0uNTlsLS4wNC0uMjdjLS4zMS0yLjYzLS42Ny01LjI2LTEuMDMtNy44N2wtLjA0LS4yNWMtMi4zOC0xNi41LTUuOTUtMzIuODItMTAuNjctNDguODEtLjA0LS4xMi0uMDctLjIxLS4xLS4zMS0uNzUtMi41LTEuNTItNC45Ny0yLjI5LTcuNDQtLjEyLS4zMy0uMjItLjY1LS4zMy0uOTgtLjczLTIuMjQtMS40OC00LjQ2LTIuMjUtNi42OGwtLjYzLTEuOGMtLjY4LTEuOTItMS4zOS0zLjg0LTIuMDktNS43Ny0uMzUtLjkyLS42OS0xLjgzLTEuMDYtMi43My0uNi0xLjYtMS4yMi0zLjE4LTEuODYtNC43NS0uNS0xLjI3LTEuMDEtMi41MS0xLjUyLTMuNzQtLjUxLTEuMjQtMS4wMy0yLjQ2LTEuNTQtMy42OS0uNjgtMS41Ny0xLjM3LTMuMTQtMi4wNy00LjY5LS4zOS0uODgtLjc4LTEuNzctMS4xOS0yLjY1LS44NS0xLjg2LTEuNzMtMy43My0yLjYtNS41OC0uMjctLjU1LS41NS0xLjEyLS44Mi0xLjY5LTEuMDItMi4xMi0yLjA3LTQuMjUtMy4xNC02LjM0LS4xNC0uMjktLjMtLjU5LS40NC0uODgtMS4xOS0yLjMxLTIuNDItNC42NC0zLjY1LTYuOTMtLjA1LS4wOC0uMDktLjE3LS4xNC0uMjUtNi0xMS4wMy0xMi42LTIxLjc0LTE5Ljc2LTMyLjA2bC0xNTIuMzgsMTUyLjM4YzMuNDYsMTAuMjEsNS43MSwyMC43NCw2LjgxLDMxLjM0aDIwN2MtLjA1LTEuMDMtLjA4LTIuMDctLjEzLTMuMDdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik00ODguMjQsNDM2Ljk3YzAsMi4zNC0uMjIsNC42Ny0uMzQsNy4wMXMtLjE2LDQuNjgtLjM5LDdjLTIuNjcsMjYuOS0xMy4wNCw1My4xNS0zMS4xMyw3NS4yMS0xLjQ2LDEuNzktMy4xMiwzLjQ2LTQuNzEsNS4yLTEuNTcsMS43My0zLjAyLDMuNTItNC42OSw1LjE5bDE0Ni4wMSwxNDUuOThjMS42Ni0xLjY2LDMuMjItMy4zNyw0Ljg0LTUuMDZzMy4yNy0zLjM1LDQuODQtNS4wNmMxMC44LTExLjcsMjAuNjgtMjMuOTQsMjkuNTgtMzYuNjYuMzctLjUxLjY5LTEuMDEsMS4wNS0xLjUsMS4wOS0xLjU2LDIuMTMtMy4xNCwzLjItNC43MS45My0xLjQxLDEuODYtMi44MSwyLjc2LTQuMjQuNDYtLjY4LjktMS4zOSwxLjMzLTIuMDcsMzMuNDktNTIuNTcsNTEuNDEtMTEyLjE3LDUzLjgyLTE3Mi4yOS4wOS0yLjMzLjE0LTQuNjcuMTgtNy4wMS4wNS0yLjMzLjEyLTQuNjUuMTItN2gtMjA2LjQ2WiIgc3R5bGU9ImZpbGw6ICNmNmY7Ii8+CiAgPHBhdGggZD0iTTc1Ni4wNCwyOC4zM2MtMzcuNzctMzcuNzctOTkuMDItMzcuNzctMTM2Ljc5LDAtMzAuMTQsMzAuMTItMzYuMTcsNzUuMTctMTguMjEsMTExLjMzbC0yMTAuNzIsMjEwLjdjLTM2LjE3LTE3Ljk0LTgxLjIyLTExLjkyLTExMS4zNiwxOC4yLTM3Ljc3LDM3Ljc3LTM3Ljc2LDk5LjAyLDAsMTM2Ljc5LDM3Ljc5LDM3Ljc3LDk5LjA0LDM3Ljc2LDEzNi44MiwwLDMwLjE0LTMwLjE0LDM2LjE1LTc1LjE4LDE4LjItMTExLjM1bDIxMC43Mi0yMTAuNjljMzYuMTgsMTcuOTQsODEuMjEsMTEuOTIsMTExLjM1LTE4LjIxLDM3Ljc3LTM3Ljc2LDM3Ljc3LTk5LDAtMTM2Ljc4aDBaIiBzdHlsZT0iZmlsbDogI2ZmZjsiLz4KPC9zdmc+`}goIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiB2aWV3Qm94PSIwIDAgMzIgMzIuMDAwMDAxIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0xMDIwLjM2MjIpIj4KICAgIDxlbGxpcHNlIGN4PSItOTA3LjM1NjU3IiBjeT0iNDc5LjkwMDA5IiBmaWxsPSIjMzg0ZTU0IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHJ4PSIzLjU3OTM5OTYiIHJ5PSIzLjgyMDc5NTMiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiIHRyYW5zZm9ybT0ic2NhbGUoLTEgMSkgcm90YXRlKC02MC41NDgpIi8+CiAgICA8ZWxsaXBzZSBjeD0iLTg5MS41NzY1NCIgY3k9IjUwNy44NDYxIiBmaWxsPSIjMzg0ZTU0IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHJ4PSIzLjU3OTM5OTYiIHJ5PSIzLjgyMDc5NTMiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiIHRyYW5zZm9ybT0icm90YXRlKC02MC41NDgpIi8+CiAgICA8cGF0aCBmaWxsPSIjMzg0ZTU0IiBkPSJNMTYuMDkxNjkzIDEwMjEuMzY0MmMtMS4xMDU3NDkuMDEtMi4yMTAzNDEuMDQ5LTMuMzE2MDkuMDlDNi44NDIyNTU4IDEwMjEuNjczOCAyIDEwMjYuMzk0MiAyIDEwMzIuMzYyMnYyMGgyOHYtMjBjMC01Ljk2ODMtNC42NjczNDUtMTAuNDkxMi0xMC41OTAyMy0xMC45MDgtMS4xMDU3NS0uMDc4LTIuMjEyMzI4LS4wOTktMy4zMTgwNzctLjA5eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjNzZlMWZlIiBkPSJNNC42MDc4ODY3IDEwMjUuMDQ2MmMuNDU5NTY0LjI1OTUgMS44MTgyNjIgMS4yMDEzIDEuOTgwOTgzIDEuNjQ4LjE4MzQwMS41MDM1LjE1OTM4NSAxLjA2NTctLjExNDYxNCAxLjU1MS0uMzQ2NjI3LjYxMzgtMS4wMDUzNDEuOTQ4Ny0xLjY5NjQyMS45MzY1LS4zMzk4ODYtLjAxLTEuNzIwMjgzLS42MzcyLTIuMDQyNTYxLS44MTkyLS45Nzc1NC0uNTUxOS0xLjM1MDc5NS0xLjc0MTgtLjgzMzY4Ni0yLjY1NzYuNTE3MTA5LS45MTU4IDEuNzI4NzQ5LTEuMjEwNyAyLjcwNjI5OS0uNjU4N3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtzb2xpZC1jb2xvcjojMDAwO3NvbGlkLW9wYWNpdHk6MSIvPgogICAgPHJlY3Qgd2lkdGg9IjMuMDg2NjY1OSIgaGVpZ2h0PSIzLjUzMTM2NjMiIHg9IjE0LjQwNjIxMyIgeT0iMTAzNS42ODQyIiBmaWxsLW9wYWNpdHk9Ii4zMjg1MDI0NiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiByeT0iLjYyNDI2MzI5IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjNzZlMWZlIiBkPSJNMTYgMTAyMy4zNjIyYy05IDAtMTIgMy43MTUzLTEyIDl2MjBoMjRjLS4wNDg4OS03LjM1NjIgMC0xOCAwLTIwIDAtNS4yODQ4LTMtOS0xMi05eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjNzZlMWZlIiBkPSJNMjcuMDc0MDczIDEwMjUuMDQ2MmMtLjQ1OTU3LjI1OTUtMS44MTgyNTcgMS4yMDEzLTEuOTgwOTc5IDEuNjQ4LS4xODM0MDEuNTAzNS0uMTU5Mzg0IDEuMDY1Ny4xMTQ2MTQgMS41NTEuMzQ2NjI3LjYxMzggMS4wMDUzMzUuOTQ4NyAxLjY5NjQxNS45MzY1LjMzOTg4LS4wMSAxLjcyMDI5LS42MzcyIDIuMDQyNTYtLjgxOTIuOTc3NTQtLjU1MTkgMS4zNTA3OS0xLjc0MTguODMzNjktMi42NTc2LS41MTcxMS0uOTE1OC0xLjcyODc2LTEuMjEwNy0yLjcwNjMtLjY1ODd6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxjaXJjbGUgY3g9IjIxLjE3NTczNCIgY3k9IjEwMzAuMzU0MiIgcj0iNC42NTM3NTQyIiBmaWxsPSIjZmZmIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxjaXJjbGUgY3g9IjEwLjMzOTQ4NiIgY3k9IjEwMzAuMzU0MiIgcj0iNC44MzE2MzQ1IiBmaWxsPSIjZmZmIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxyZWN0IHdpZHRoPSIzLjY2NzM2ODciIGhlaWdodD0iNC4xMDYzNDA5IiB4PSIxNC4xMTU4NjMiIHk9IjEwMzUuOTE3NCIgZmlsbC1vcGFjaXR5PSIuMzI5NDExNzYiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgcnk9Ii43MjU5MDUzNiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtzb2xpZC1jb2xvcjojMDAwO3NvbGlkLW9wYWNpdHk6MSIvPgogICAgPHJlY3Qgd2lkdGg9IjMuNjY3MzY4NyIgaGVpZ2h0PSI0LjEwNjM0MDkiIHg9IjE0LjExNTg2MyIgeT0iMTAzNS4yMjUzIiBmaWxsPSIjZmZmY2ZiIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHJ5PSIuNzI1OTA1MzYiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxwYXRoIGZpbGwtb3BhY2l0eT0iLjMyOTQxMTc2IiBkPSJNMTkuOTk5NzM1IDEwMzYuNTI4OWMwIC44MzgtLjg3MTIyOCAxLjI2ODItMi4xNDQ3NjYgMS4xNjU5LS4wMjM2NiAwLS4wNDc5NS0uNjAwNC0uMjU0MTQ3LS41ODMyLS41MDM2NjkuMDQyLTEuMDk1OTAyLS4wMi0xLjY4NTk2NC0uMDItLjYxMjkzOSAwLTEuMjA2MzQyLjE4MjYtMS42ODU0OS4wMTctLjExMDIzMy0uMDM4LS4xNzgyOTguNTgzOC0uMjYxNTMyLjU4MTYtMS4yNDM2ODUtLjAzMy0yLjA3ODgwMy0uMzM4My0yLjA3ODgwMy0xLjE2MTggMC0xLjIxMTggMS44MTU2MzUtMi4xOTQxIDQuMDU1MzUxLTIuMTk0MSAyLjIzOTcwNCAwIDQuMDU1MzUxLjk4MjMgNC4wNTUzNTEgMi4xOTQxeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjYzM4Yzc0IiBkPSJNMTkuOTc3NDE0IDEwMzUuNzAwNGMwIC41Njg1LS40MzM2NTkuODU1NC0xLjEzODA5MSAxLjAwMDEtLjI5MTkzMy4wNi0uNjMwMzcxLjA5Ni0xLjAwMzcxOS4xMTY2LS41NjQwNS4wMzItMS4yMDc3ODIuMDMxLTEuODkxMjIuMDMxLS42NzI4MzQgMC0xLjMwNzE4MiAwLTEuODY0OTA0LS4wMjktLjMwNjI2OC0uMDE3LS41ODk0MjktLjA0My0uODQzMTY0LS4wODQtLjgxMzgzMy0uMTMxOC0xLjMyNDk2Mi0uNDE3LTEuMzI0OTYyLTEuMDM0NCAwLTEuMTYwMSAxLjgwNTY0Mi0yLjEwMDYgNC4wMzMwMy0yLjEwMDYgMi4yMjczNzcgMCA0LjAzMzAzLjk0MDUgNC4wMzMwMyAyLjEwMDZ6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxlbGxpcHNlIGN4PSIxNS45NDQzODIiIGN5PSIxMDMzLjg1MDEiIGZpbGw9IiMyMzIwMWYiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgcng9IjIuMDgwMTczMyIgcnk9IjEuMzQzNzQ3IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8Y2lyY2xlIGN4PSIxMi40MTQyMDEiIGN5PSIxMDMwLjM1NDIiIHI9IjEuOTYzMDYzNCIgZmlsbD0iIzE3MTMxMSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8Y2lyY2xlIGN4PSIyMy4xMTAxMjEiIGN5PSIxMDMwLjM1NDIiIHI9IjEuOTYzMDYzNCIgZmlsbD0iIzE3MTMxMSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMzODRlNTQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIuMzk3MzA4NzQiIGQ9Ik01LjAwNTUzNzcgMTAyNy4yNzI3Yy0xLjE3MDQzNS0xLjA4MzUtMi4wMjY5NzMtLjc3MjEtMi4wNDQxNzItLjc0NjMiLz4KICAgIDxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzM4NGU1NCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTczMDg3NCIgZD0iTTQuMzg1MjQ1NyAxMDI2LjkxNTJjLTEuMTU4NTU3LjAzNi0xLjM0NjcwNC42MzAzLTEuMzM4ODEuNjUyM20yMy41ODQwOTczLS4zOTUxYzEuMTcwNDMtMS4wODM1IDIuMDI2OTctLjc3MjEgMi4wNDQxNy0uNzQ2MyIvPgogICAgPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMzg0ZTU0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NzMwODc0IiBkPSJNMjcuMzIxNzczIDEwMjYuNjczYzEuMTU4NTYuMDM2IDEuMzQ2Ny42MzAyIDEuMzM4OC42NTIyIi8+CiAgPC9nPgo8L3N2Zz4=`}typescriptIcon(){return`CjxzdmcgZmlsbD0ibm9uZSIgaGVpZ2h0PSI1MTIiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB3aWR0aD0iNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IGZpbGw9IiMzMTc4YzYiIGhlaWdodD0iNTEyIiByeD0iNTAiIHdpZHRoPSI1MTIiLz48cmVjdCBmaWxsPSIjMzE3OGM2IiBoZWlnaHQ9IjUxMiIgcng9IjUwIiB3aWR0aD0iNTEyIi8+PHBhdGggY2xpcC1ydWxlPSJldmVub2RkIiBkPSJtMzE2LjkzOSA0MDcuNDI0djUwLjA2MWM4LjEzOCA0LjE3MiAxNy43NjMgNy4zIDI4Ljg3NSA5LjM4NnMyMi44MjMgMy4xMjkgMzUuMTM1IDMuMTI5YzExLjk5OSAwIDIzLjM5Ny0xLjE0NyAzNC4xOTYtMy40NDIgMTAuNzk5LTIuMjk0IDIwLjI2OC02LjA3NSAyOC40MDYtMTEuMzQyIDguMTM4LTUuMjY2IDE0LjU4MS0xMi4xNSAxOS4zMjgtMjAuNjVzNy4xMjEtMTkuMDA3IDcuMTIxLTMxLjUyMmMwLTkuMDc0LTEuMzU2LTE3LjAyNi00LjA2OS0yMy44NTdzLTYuNjI1LTEyLjkwNi0xMS43MzgtMTguMjI1Yy01LjExMi01LjMxOS0xMS4yNDItMTAuMDkxLTE4LjM4OS0xNC4zMTVzLTE1LjIwNy04LjIxMy0yNC4xOC0xMS45NjdjLTYuNTczLTIuNzEyLTEyLjQ2OC01LjM0NS0xNy42ODUtNy45LTUuMjE3LTIuNTU2LTkuNjUxLTUuMTYzLTEzLjMwMy03LjgyMi0zLjY1Mi0yLjY2LTYuNDY5LTUuNDc2LTguNDUxLTguNDQ4LTEuOTgyLTIuOTczLTIuOTc0LTYuMzM2LTIuOTc0LTEwLjA5MSAwLTMuNDQxLjg4Ny02LjU0NCAyLjY2MS05LjMwOHM0LjI3OC01LjEzNiA3LjUxMi03LjExOGMzLjIzNS0xLjk4MSA3LjE5OS0zLjUyIDExLjg5NC00LjYxNSA0LjY5Ni0xLjA5NSA5LjkxMi0xLjY0MiAxNS42NTEtMS42NDIgNC4xNzMgMCA4LjU4MS4zMTMgMTMuMjI0LjkzOCA0LjY0My42MjYgOS4zMTIgMS41OTEgMTQuMDA4IDIuODk0IDQuNjk1IDEuMzA0IDkuMjU5IDIuOTQ3IDEzLjY5NCA0LjkyOCA0LjQzNCAxLjk4MiA4LjUyOSA0LjI3NiAxMi4yODUgNi44ODR2LTQ2Ljc3NmMtNy42MTYtMi45Mi0xNS45MzctNS4wODQtMjQuOTYyLTYuNDkycy0xOS4zODEtMi4xMTItMzEuMDY2LTIuMTEyYy0xMS44OTUgMC0yMy4xNjMgMS4yNzgtMzMuODA1IDMuODMzcy0yMC4wMDYgNi41NDQtMjguMDkzIDExLjk2N2MtOC4wODYgNS40MjQtMTQuNDc2IDEyLjMzMy0xOS4xNzEgMjAuNzI5LTQuNjk1IDguMzk1LTcuMDQzIDE4LjQzMy03LjA0MyAzMC4xMTQgMCAxNC45MTQgNC4zMDQgMjcuNjM4IDEyLjkxMiAzOC4xNzIgOC42MDcgMTAuNTMzIDIxLjY3NSAxOS40NSAzOS4yMDQgMjYuNzUxIDYuODg2IDIuODE2IDEzLjMwMyA1LjU3OSAxOS4yNSA4LjI5MXMxMS4wODYgNS41MjggMTUuNDE1IDguNDQ4YzQuMzMgMi45MiA3Ljc0NyA2LjEwMSAxMC4yNTIgOS41NDMgMi41MDQgMy40NDEgMy43NTYgNy4zNTIgMy43NTYgMTEuNzMzIDAgMy4yMzMtLjc4MyA2LjIzMS0yLjM0OCA4Ljk5NXMtMy45MzkgNS4xNjItNy4xMjEgNy4xOTYtNy4xNDcgMy42MjQtMTEuODk0IDQuNzcxYy00Ljc0OCAxLjE0OC0xMC4zMDMgMS43MjEtMTYuNjY4IDEuNzIxLTEwLjg1MSAwLTIxLjU5Ny0xLjkwMy0zMi4yNC01LjcxLTEwLjY0Mi0zLjgwNi0yMC41MDItOS41MTYtMjkuNTc5LTE3LjEzem0tODQuMTU5LTEyMy4zNDJoNjQuMjJ2LTQxLjA4MmgtMTc5djQxLjA4Mmg2My45MDZ2MTgyLjkxOGg1MC44NzR6IiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=`}csIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnCiAgIHdpZHRoPSIyMDQuOCIKICAgaGVpZ2h0PSIyMDQuOCIKICAgdmlld0JveD0iMCAwIDU0LjE4NjY2NiA1NC4xODY2NjciCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczEyIj4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImEiCiAgICAgICB4MT0iNDYuNzczIgogICAgICAgeDI9IjY5LjkwNyIKICAgICAgIHkxPSI4Ni40NjIiCiAgICAgICB5Mj0iMTI2LjczMiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzMy45ODMgLTUxOC45NzQpIHNjYWxlKDguNzg5OTYpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjOTI3QkU1IgogICAgICAgICBpZD0ic3RvcDEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3RvcC1jb2xvcj0iIzUxMkJENCIKICAgICAgICAgaWQ9InN0b3AyIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxmaWx0ZXIKICAgICAgIGlkPSJiIgogICAgICAgd2lkdGg9IjQyLjg0NSIKICAgICAgIGhlaWdodD0iMzkuMTM2IgogICAgICAgeD0iNDQuNjI5IgogICAgICAgeT0iOTEuODkiCiAgICAgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiCiAgICAgICBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8ZmVGbG9vZAogICAgICAgICBmbG9vZC1vcGFjaXR5PSIwIgogICAgICAgICByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIKICAgICAgICAgaWQ9ImZlRmxvb2QyIiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICBpbj0iU291cmNlQWxwaGEiCiAgICAgICAgIHJlc3VsdD0iaGFyZEFscGhhIgogICAgICAgICB0eXBlPSJtYXRyaXgiCiAgICAgICAgIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4MiIgLz4KICAgICAgPGZlT2Zmc2V0CiAgICAgICAgIGlkPSJmZU9mZnNldDIiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXgzIiAvPgogICAgICA8ZmVCbGVuZAogICAgICAgICBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIKICAgICAgICAgbW9kZT0ibm9ybWFsIgogICAgICAgICByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18yMDM3XzI4MDAiCiAgICAgICAgIGlkPSJmZUJsZW5kMyIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgaW49IlNvdXJjZUFscGhhIgogICAgICAgICByZXN1bHQ9ImhhcmRBbHBoYSIKICAgICAgICAgdHlwZT0ibWF0cml4IgogICAgICAgICB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIgogICAgICAgICBpZD0iZmVDb2xvck1hdHJpeDQiIC8+CiAgICAgIDxmZU9mZnNldAogICAgICAgICBkeT0iMSIKICAgICAgICAgaWQ9ImZlT2Zmc2V0NCIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMi40OTkiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXg1IiAvPgogICAgICA8ZmVCbGVuZAogICAgICAgICBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd18yMDM3XzI4MDAiCiAgICAgICAgIG1vZGU9Im5vcm1hbCIKICAgICAgICAgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBpZD0iZmVCbGVuZDUiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIGluPSJTb3VyY2VBbHBoYSIKICAgICAgICAgcmVzdWx0PSJoYXJkQWxwaGEiCiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXg2IiAvPgogICAgICA8ZmVPZmZzZXQKICAgICAgICAgZHk9IjQiCiAgICAgICAgIGlkPSJmZU9mZnNldDYiIC8+CiAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjYiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjA5IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4NyIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBtb2RlPSJub3JtYWwiCiAgICAgICAgIHJlc3VsdD0iZWZmZWN0M19kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgaWQ9ImZlQmxlbmQ3IiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICBpbj0iU291cmNlQWxwaGEiCiAgICAgICAgIHJlc3VsdD0iaGFyZEFscGhhIgogICAgICAgICB0eXBlPSJtYXRyaXgiCiAgICAgICAgIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4OCIgLz4KICAgICAgPGZlT2Zmc2V0CiAgICAgICAgIGR5PSI5IgogICAgICAgICBpZD0iZmVPZmZzZXQ4IiAvPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIyLjUiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjgiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjA1IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4OSIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW4yPSJlZmZlY3QzX2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBtb2RlPSJub3JtYWwiCiAgICAgICAgIHJlc3VsdD0iZWZmZWN0NF9kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgaWQ9ImZlQmxlbmQ5IiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICBpbj0iU291cmNlQWxwaGEiCiAgICAgICAgIHJlc3VsdD0iaGFyZEFscGhhIgogICAgICAgICB0eXBlPSJtYXRyaXgiCiAgICAgICAgIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4MTAiIC8+CiAgICAgIDxmZU9mZnNldAogICAgICAgICBkeT0iMTUiCiAgICAgICAgIGlkPSJmZU9mZnNldDEwIiAvPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIzIgogICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXIxMCIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgdHlwZT0ibWF0cml4IgogICAgICAgICB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMDEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXgxMSIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW4yPSJlZmZlY3Q0X2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBtb2RlPSJub3JtYWwiCiAgICAgICAgIHJlc3VsdD0iZWZmZWN0NV9kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgaWQ9ImZlQmxlbmQxMSIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW49IlNvdXJjZUdyYXBoaWMiCiAgICAgICAgIGluMj0iZWZmZWN0NV9kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgbW9kZT0ibm9ybWFsIgogICAgICAgICByZXN1bHQ9InNoYXBlIgogICAgICAgICBpZD0iZmVCbGVuZDEyIiAvPgogICAgPC9maWx0ZXI+CiAgPC9kZWZzPgogIDxwYXRoCiAgICAgZD0iTTEzNS43MzEgMjg1Ljg1djE3My45M2MwIDIxLjUxNyAxMS40NzggNDEuNDE4IDMwLjEyNSA1Mi4xNjhsMTUwLjYyNCA4Ni45NzZhNjAuMjIzIDYwLjIyMyAwIDAgMCA2MC4yNSAwbDE1MC42MjMtODYuOTc2YTYwLjIzNyA2MC4yMzcgMCAwIDAgMzAuMTI0LTUyLjE2OVYyODUuODUxYzAtMjEuNTI1LTExLjQ3Ny00MS40MjMtMzAuMTI0LTUyLjE3N0wzNzYuNzI5IDE0Ni43MmE2MC4yMSA2MC4yMSAwIDAgMC02MC4yNDkgMGwtMTUwLjYyNCA4Ni45NTRhNjAuMjQ1IDYwLjI0NSAwIDAgMC0zMC4xMjUgNTIuMTc3eiIKICAgICBmaWxsPSJ1cmwoI2EpIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KC4xIDAgMCAuMSAtNy41NjcgLTEwLjE4OSkiCiAgICAgaWQ9InBhdGgxMiIgLz4KICA8cGF0aAogICAgIGQ9Ik01NC4wNTYgOTguMDN2Ni44NTVhMS43MTEgMS43MTEgMCAwIDAgMS43MTQgMS43MTQgMS43MTMgMS43MTMgMCAwIDAgMS43MTQtMS43MTQgMS43MTMgMS43MTMgMCAxIDEgMy40MjcgMCA1LjE0IDUuMTQgMCAxIDEtMTAuMjgyIDB2LTYuODU0YTUuMTQgNS4xNCAwIDEgMSAxMC4yODIgMCAxLjcxMiAxLjcxMiAwIDEgMS0zLjQyNyAwIDEuNzEyIDEuNzEyIDAgMSAwLTMuNDI3IDB6bTI3LjQxOCA2Ljg1NWExLjcxMiAxLjcxMiAwIDAgMS0xLjcxNCAxLjcxNGgtMS43MTR2MS43MTNjMCAuNDU1LS4xOC44OTEtLjUwMiAxLjIxMmExLjcxIDEuNzEgMCAwIDEtMi40MjMgMCAxLjcxOSAxLjcxOSAwIDAgMS0uNTAyLTEuMjEydi0xLjcxM2gtMy40Mjd2MS43MTNhMS43MSAxLjcxIDAgMCAxLTEuNzE0IDEuNzE0IDEuNzEgMS43MSAwIDAgMS0xLjcxMy0xLjcxNHYtMS43MTNINjYuMDVhMS43MTMgMS43MTMgMCAxIDEgMC0zLjQyN2gxLjcxNHYtMy40MjdINjYuMDVhMS43MTIgMS43MTIgMCAxIDEgMC0zLjQyN2gxLjcxNHYtMS43MTRhMS43MTMgMS43MTMgMCAxIDEgMy40MjcgMHYxLjcxM2gzLjQyN3YtMS43MTNhMS43MTIgMS43MTIgMCAxIDEgMy40MjcgMHYxLjcxM2gxLjcxNGMuNDU0IDAgLjg5LjE4IDEuMjExLjUwMmExLjcxIDEuNzEgMCAwIDEgMCAyLjQyMyAxLjcxMiAxLjcxMiAwIDAgMS0xLjIxMS41MDNoLTEuNzE0djMuNDI3aDEuNzE0YTEuNzE4IDEuNzE4IDAgMCAxIDEuNzE0IDEuNzEzem0tNi44NTUtNS4xNGgtMy40Mjd2My40MjdoMy40Mjd6IgogICAgIGZpbGw9IiNmZmYiCiAgICAgZmlsdGVyPSJ1cmwoI2IpIgogICAgIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLjg3OSAwIDAgLjg3OSAtMzAuOTY1IC02Mi4wODYpIgogICAgIGlkPSJwYXRoMTMiIC8+Cjwvc3ZnPgo=`}cIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHZpZXdCb3g9IjAgMCAzOC4wMDAwODkgNDIuMDAwMDMxIgogICB3aWR0aD0iMzgwLjAwMDg5IgogICBoZWlnaHQ9IjQyMC4wMDAzMSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMTAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Imljb25zOC1jLXByb2dyYW1taW5nLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wLjEgKDNiYzJlODEzZjUsIDIwMjAtMDktMDcpIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGExNiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczE0IiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDU2IgogICAgIGlkPSJuYW1lZHZpZXcxMiIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6em9vbT0iMS40ODk1ODMzIgogICAgIGlua3NjYXBlOmN4PSIxOTAiCiAgICAgaW5rc2NhcGU6Y3k9IjIxMC4wMDI4MiIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzEwIiAvPgogIDxwYXRoCiAgICAgZmlsbD0iIzI4MzU5MyIKICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgZD0ibSAxNy45MDMsMC4yODYyODE2NiBjIDAuNjc5LC0wLjM4MSAxLjUxNSwtMC4zODEgMi4xOTMsMCBDIDIzLjQ1MSwyLjE2OTI4MTcgMzMuNTQ3LDcuODM3MjgxNyAzNi45MDMsOS43MjAyODE3IDM3LjU4MiwxMC4xMDAyODIgMzgsMTAuODA0MjgyIDM4LDExLjU2NjI4MiBjIDAsMy43NjYgMCwxNS4xMDEgMCwxOC44NjcgMCwwLjc2MiAtMC40MTgsMS40NjYgLTEuMDk3LDEuODQ3IC0zLjM1NSwxLjg4MyAtMTMuNDUxLDcuNTUxIC0xNi44MDcsOS40MzQgLTAuNjc5LDAuMzgxIC0xLjUxNSwwLjM4MSAtMi4xOTMsMCAtMy4zNTUsLTEuODgzIC0xMy40NTEsLTcuNTUxIC0xNi44MDcsLTkuNDM0IC0wLjY3OCwtMC4zODEgLTEuMDk2LC0xLjA4NCAtMS4wOTYsLTEuODQ2IDAsLTMuNzY2IDAsLTE1LjEwMSAwLC0xOC44NjcgMCwtMC43NjIgMC40MTgsLTEuNDY2IDEuMDk3LC0xLjg0NzAwMDMgMy4zNTQsLTEuODgzIDEzLjQ1MiwtNy41NTEgMTYuODA2LC05LjQzNDAwMDA0IHoiCiAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgIGlkPSJwYXRoMiIKICAgICBzdHlsZT0iZmlsbDojMDA0NDgyO2ZpbGwtb3BhY2l0eToxIiAvPgogIDxwYXRoCiAgICAgZmlsbD0iIzVjNmJjMCIKICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgZD0ibSAwLjMwNCwzMS40MDQyODIgYyAtMC4yNjYsLTAuMzU2IC0wLjMwNCwtMC42OTQgLTAuMzA0LC0xLjE0OSAwLC0zLjc0NCAwLC0xNS4wMTQgMCwtMTguNzU5IDAsLTAuNzU4IDAuNDE3LC0xLjQ1OCAxLjA5NCwtMS44MzYwMDAzIDMuMzQzLC0xLjg3MiAxMy40MDUsLTcuNTA3IDE2Ljc0OCwtOS4zODAwMDAwNCAwLjY3NywtMC4zNzkgMS41OTQsLTAuMzcxIDIuMjcxLDAuMDA4IDMuMzQzLDEuODcyMDAwMDQgMTMuMzcxLDcuNDU5MDAwMDQgMTYuNzE0LDkuMzMxMDAwMDQgMC4yNywwLjE1MiAwLjQ3NiwwLjMzNSAwLjY2LDAuNTc2MDAwMyB6IgogICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICBpZD0icGF0aDQiCiAgICAgc3R5bGU9ImZpbGw6IzY1OWFkMjtmaWxsLW9wYWNpdHk6MSIgLz4KICA8cGF0aAogICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgIGQ9Im0gMTksNy4wMDAyODE3IGMgNy43MjcsMCAxNCw2LjI3MzAwMDMgMTQsMTQuMDAwMDAwMyAwLDcuNzI3IC02LjI3MywxNCAtMTQsMTQgLTcuNzI3LDAgLTE0LC02LjI3MyAtMTQsLTE0IDAsLTcuNzI3IDYuMjczLC0xNC4wMDAwMDAzIDE0LC0xNC4wMDAwMDAzIHogbSAwLDcuMDAwMDAwMyBjIDMuODYzLDAgNywzLjEzNiA3LDcgMCwzLjg2MyAtMy4xMzcsNyAtNyw3IC0zLjg2MywwIC03LC0zLjEzNyAtNywtNyAwLC0zLjg2NCAzLjEzNiwtNyA3LC03IHoiCiAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgIGlkPSJwYXRoNiIgLz4KICA8cGF0aAogICAgIGZpbGw9IiMzOTQ5YWIiCiAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgIGQ9Im0gMzcuNDg1LDEwLjIwNTI4MiBjIDAuNTE2LDAuNDgzIDAuNTA2LDEuMjExIDAuNTA2LDEuNzg0IDAsMy43OTUgLTAuMDMyLDE0LjU4OSAwLjAwOSwxOC4zODQgMC4wMDQsMC4zOTYgLTAuMTI3LDAuODEzIC0wLjMyMywxLjEyNyBsIC0xOS4wODQsLTEwLjUgeiIKICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgaWQ9InBhdGg4IgogICAgIHN0eWxlPSJmaWxsOiMwMDU5OWM7ZmlsbC1vcGFjaXR5OjEiIC8+Cjwvc3ZnPgo=`}cppIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjQsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iMzA2cHgiIGhlaWdodD0iMzQ0LjM1cHgiIHZpZXdCb3g9IjAgMCAzMDYgMzQ0LjM1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAzMDYgMzQ0LjM1IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggZmlsbD0iIzAwNTk5QyIgZD0iTTMwMi4xMDcsMjU4LjI2MmMyLjQwMS00LjE1OSwzLjg5My04Ljg0NSwzLjg5My0xMy4wNTNWOTkuMTRjMC00LjIwOC0xLjQ5LTguODkzLTMuODkyLTEzLjA1MkwxNTMsMTcyLjE3NQoJTDMwMi4xMDcsMjU4LjI2MnoiLz4KPHBhdGggZmlsbD0iIzAwNDQ4MiIgZD0iTTE2Ni4yNSwzNDEuMTkzbDEyNi41LTczLjAzNGMzLjY0NC0yLjEwNCw2Ljk1Ni01LjczNyw5LjM1Ny05Ljg5N0wxNTMsMTcyLjE3NUwzLjg5MywyNTguMjYzCgljMi40MDEsNC4xNTksNS43MTQsNy43OTMsOS4zNTcsOS44OTZsMTI2LjUsNzMuMDM0QzE0Ny4wMzcsMzQ1LjQwMSwxNTguOTYzLDM0NS40MDEsMTY2LjI1LDM0MS4xOTN6Ii8+CjxwYXRoIGZpbGw9IiM2NTlBRDIiIGQ9Ik0zMDIuMTA4LDg2LjA4N2MtMi40MDItNC4xNi01LjcxNS03Ljc5My05LjM1OC05Ljg5N0wxNjYuMjUsMy4xNTZjLTcuMjg3LTQuMjA4LTE5LjIxMy00LjIwOC0yNi41LDAKCUwxMy4yNSw3Ni4xOUM1Ljk2Miw4MC4zOTcsMCw5MC43MjUsMCw5OS4xNHYxNDYuMDY5YzAsNC4yMDgsMS40OTEsOC44OTQsMy44OTMsMTMuMDUzTDE1MywxNzIuMTc1TDMwMi4xMDgsODYuMDg3eiIvPgo8Zz4KCTxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0xNTMsMjc0LjE3NWMtNTYuMjQzLDAtMTAyLTQ1Ljc1Ny0xMDItMTAyczQ1Ljc1Ny0xMDIsMTAyLTEwMmMzNi4yOTIsMCw3MC4xMzksMTkuNTMsODguMzMxLDUwLjk2OAoJCWwtNDQuMTQzLDI1LjU0NGMtOS4xMDUtMTUuNzM2LTI2LjAzOC0yNS41MTItNDQuMTg4LTI1LjUxMmMtMjguMTIyLDAtNTEsMjIuODc4LTUxLDUxYzAsMjguMTIxLDIyLjg3OCw1MSw1MSw1MQoJCWMxOC4xNTIsMCwzNS4wODUtOS43NzYsNDQuMTkxLTI1LjUxNWw0NC4xNDMsMjUuNTQzQzIyMy4xNDIsMjU0LjY0NCwxODkuMjk0LDI3NC4xNzUsMTUzLDI3NC4xNzV6Ii8+CjwvZz4KPGc+Cgk8cG9seWdvbiBmaWxsPSIjRkZGRkZGIiBwb2ludHM9IjI1NSwxNjYuNTA4IDI0My42NjYsMTY2LjUwOCAyNDMuNjY2LDE1NS4xNzUgMjMyLjMzNCwxNTUuMTc1IDIzMi4zMzQsMTY2LjUwOCAyMjEsMTY2LjUwOCAKCQkyMjEsMTc3Ljg0MSAyMzIuMzM0LDE3Ny44NDEgMjMyLjMzNCwxODkuMTc1IDI0My42NjYsMTg5LjE3NSAyNDMuNjY2LDE3Ny44NDEgMjU1LDE3Ny44NDEgCSIvPgo8L2c+CjxnPgoJPHBvbHlnb24gZmlsbD0iI0ZGRkZGRiIgcG9pbnRzPSIyOTcuNSwxNjYuNTA4IDI4Ni4xNjYsMTY2LjUwOCAyODYuMTY2LDE1NS4xNzUgMjc0LjgzNCwxNTUuMTc1IDI3NC44MzQsMTY2LjUwOCAyNjMuNSwxNjYuNTA4IAoJCTI2My41LDE3Ny44NDEgMjc0LjgzNCwxNzcuODQxIDI3NC44MzQsMTg5LjE3NSAyODYuMTY2LDE4OS4xNzUgMjg2LjE2NiwxNzcuODQxIDI5Ny41LDE3Ny44NDEgCSIvPgo8L2c+Cjwvc3ZnPgo=`}zigLogo(){return`CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTUzIDE0MCI+CjxnIGZpbGw9IiNmN2E0MWQiPgoJPGc+CgkJPHBvbHlnb24gcG9pbnRzPSI0NiwyMiAyOCw0NCAxOSwzMCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iNDYsMjIgMzMsMzMgMjgsNDQgMjIsNDQgMjIsOTUgMzEsOTUgMjAsMTAwIDEyLDExNyAwLDExNyAwLDIyIiBzaGFwZS1yZW5kZXJpbmc9ImNyaXNwRWRnZXMiLz4KCQk8cG9seWdvbiBwb2ludHM9IjMxLDk1IDEyLDExNyA0LDEwNiIvPgoJPC9nPgoJPGc+CgkJPHBvbHlnb24gcG9pbnRzPSI1NiwyMiA2MiwzNiAzNyw0NCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iNTYsMjIgMTExLDIyIDExMSw0NCAzNyw0NCA1NiwzMiIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIi8+CgkJPHBvbHlnb24gcG9pbnRzPSIxMTYsOTUgOTcsMTE3IDkwLDEwNCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iMTE2LDk1IDEwMCwxMDQgOTcsMTE3IDQyLDExNyA0Miw5NSIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIi8+CgkJPHBvbHlnb24gcG9pbnRzPSIxNTAsMCA1MiwxMTcgMywxNDAgMTAxLDIyIi8+Cgk8L2c+Cgk8Zz4KCQk8cG9seWdvbiBwb2ludHM9IjE0MSwyMiAxNDAsNDAgMTIyLDQ1Ii8+CgkJPHBvbHlnb24gcG9pbnRzPSIxNTMsMjIgMTUzLDExNyAxMDYsMTE3IDEyMCwxMDUgMTI1LDk1IDEzMSw5NSAxMzEsNDUgMTIyLDQ1IDEzMiwzNiAxNDEsMjIiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgoJCTxwb2x5Z29uIHBvaW50cz0iMTI1LDk1IDEzMCwxMTAgMTA2LDExNyIvPgoJPC9nPgo8L2c+Cjwvc3ZnPgo=`}render(){let e=as.getIconForType(this.getNodeTypeFromIcon(this.icon));switch(this.icon){case U.OPENAPI:return S``;case U.GO:return S``;case U.TS:return S``;case U.CS:return S``;case U.C:return S``;case U.CPP:return S``;case U.ZIG:return S``}return S` +`,W;(function(e){e.VERSION=`version`,e.SCHEMA=`schema`,e.SCHEMAS=`schemas`,e.SCHEMA_TYPES=`types`,e.MEDIA_TYPE=`mediaType`,e.HEADER=`header`,e.EXAMPLE=`example`,e.EXAMPLES=`examples`,e.ENCODING=`encoding`,e.REQUEST_BODY=`requestBody`,e.REQUEST_BODIES=`requestBodies`,e.PARAMETER=`parameter`,e.PARAMETER_QUERY=`query`,e.COOKIE=`cookie`,e.PARAMETERS=`parameters`,e.LINK=`link`,e.LINKS=`links`,e.RESPONSE=`response`,e.RESPONSES=`responses`,e.OPERATION=`operation`,e.OPERATIONS=`operations`,e.SECURITY_SCHEME=`securityScheme`,e.SECURITY_SCHEMES=`securitySchemes`,e.EXTERNAL_DOCS=`externalDocs`,e.SECURITY=`security`,e.CALLBACK=`callback`,e.CALLBACKS=`callbacks`,e.PATH_ITEM=`pathItem`,e.PATH_ITEMS=`pathItems`,e.XML=`xml`,e.HEADERS=`headers`,e.SERVER=`server`,e.SERVERS=`servers`,e.SERVER_VARIABLE=`serverVariable`,e.PATHS=`paths`,e.COMPONENTS=`components`,e.CONTACT=`contact`,e.LICENSE=`license`,e.INFO=`info`,e.TAG=`tag`,e.TAGS=`tags`,e.DOCUMENT=`document`,e.WEBHOOK=`webhook`,e.WEBHOOKS=`webhooks`,e.EXTENSIONS=`extensions`,e.EXTENSION=`extension`,e.NO_EXAMPLE=`noExample`,e.POLYMORPHIC=`polymorphic`,e.ERROR=`error`,e.WARNING=`warning`,e.ROLODEX_FILE=`rolodex-file`,e.ROLODEX_FOLDER=`rolodex-dir`,e.OPENAPI=`openapi`,e.UPLOAD=`upload`,e.ADD=`add`,e.UNKNOWN=`unknown`,e.EXPAND_NODE=`expand-node`,e.POV_MODE=`pov-mode`,e.JS=`js`,e.GO=`go`,e.TS=`ts`,e.CS=`cs`,e.C=`c`,e.CPP=`cpp`,e.PHP=`php`,e.PY=`py`,e.HTML=`html`,e.MD=`md`,e.JAVA=`java`,e.RS=`rs`,e.ZIG=`zig`,e.RB=`rb`,e.YAML=`yaml`,e.JSON=`json`})(W||={});var rs=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},is,as;(function(e){e.tiny=`tiny`,e.small=`small`,e.smaller=`smaller`,e.medium=`medium`,e.large=`large`,e.huge=`huge`})(as||={});var os;(function(e){e.primary=`primary`,e.secondary=`secondary`,e.inverse=`inverse`,e.font=`font`,e.warning=`warning`,e.polymorphic=`polymorphic`,e.error=`error`,e.filtered=`filtered`})(os||={});var ss=is=class extends T{getSize(){switch(this.size){case as.tiny:return`0.8rem`;case as.smaller:return`1.2rem`;case as.medium:return`1.4rem`;case as.large:return`1.8rem`;case as.huge:return`2rem`;default:return`1rem`}}getIconColor(){switch(this.color){case os.primary:return`var(--primary-color)`;case os.secondary:return`var(--secondary-color)`;case os.warning:return`var(--warn-color)`;case os.polymorphic:return`var(--warn-color)`;case os.error:return`var(--error-color)`;case os.inverse:return`var(--background-color)`;case os.filtered:return`var(--font-color-sub2)`;case os.font:default:return`var(--font-color)`}}constructor(){super(),this._themeHandler=()=>this.requestUpdate(),this.size=as.medium,this.color=os.primary}connectedCallback(){super.connectedCallback(),window.addEventListener(Jo,this._themeHandler)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(Jo,this._themeHandler)}isLightMode(){return document.documentElement.getAttribute(`theme`)===`light`}getNodeTypeFromIcon(e){return Object.values(W).includes(e)?e:W.SCHEMA}static getIconForType(e){switch(e){case W.DOCUMENT:return`stars`;case W.SCHEMA:return`box`;case W.SCHEMA_TYPES:return`diagram-3`;case W.MEDIA_TYPE:case W.XML:return`code-slash`;case W.HEADER:case W.HEADERS:return`envelope`;case W.EXAMPLE:case W.EXAMPLES:return`chat-left-quote`;case W.ENCODING:return`box-seam`;case W.REQUEST_BODY:case W.REQUEST_BODIES:return`box-arrow-in-right`;case W.PARAMETER:case W.PARAMETERS:case W.SERVER_VARIABLE:return`braces-asterisk`;case W.PARAMETER_QUERY:return`question-lg`;case W.COOKIE:return`cookie`;case W.LINK:case W.LINKS:return`link`;case W.RESPONSE:case W.RESPONSES:return`box-arrow-left`;case W.OPERATION:case W.OPERATIONS:return`gear-wide-connected`;case W.SECURITY_SCHEME:case W.SECURITY_SCHEMES:case W.SECURITY:return`shield-lock`;case W.CALLBACK:case W.CALLBACKS:return`telephone-outbound`;case W.PATH_ITEM:case W.PATH_ITEMS:return`geo`;case W.SERVER:case W.SERVERS:return`hdd-network`;case W.PATHS:return`compass`;case W.COMPONENTS:return`boxes`;case W.CONTACT:return`person-circle`;case W.LICENSE:return`patch-check`;case W.UPLOAD:return`upload`;case W.INFO:return`info-square`;case W.TAG:return`tag`;case W.TAGS:return`tags`;case W.VERSION:return`award`;case W.EXTENSIONS:case W.EXTENSION:return`plug`;case W.WEBHOOK:case W.WEBHOOKS:return`arrow-clockwise`;case W.NO_EXAMPLE:return`exclamation-circle`;case W.POLYMORPHIC:return`diagram-3`;case W.ERROR:return`x-square`;case W.WARNING:return`exclamation-triangle`;case W.ROLODEX_FOLDER:return`folder`;case W.ROLODEX_FILE:return`journal-code`;case W.JS:return`filetype-js`;case W.PHP:return`filetype-php`;case W.PY:return`filetype-py`;case W.HTML:return`filetype-html`;case W.MD:return`markdown`;case W.JAVA:return`filetype-java`;case W.EXTERNAL_DOCS:return`journals`;case W.RB:return`filetype-rb`;case W.EXPAND_NODE:return`node-plus`;case W.POV_MODE:return`binoculars`;default:return`box`}}openapiIcon(){return this.isLightMode()?`PHN2ZyBpZD0icGIzM2Zfb3BlbmFwaSIgZGF0YS1uYW1lPSJwYjMzZl9vcGVuYXBpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3ODQuMzcgNzg0LjI5Ij4KICA8cGF0aCBkPSJNMjA3LjI4LDQ1MC45N0guMzFjLjA0LDEuMDIuMDcsMi4wMy4xMiwzLjAzLjA4LDEuOTUuMjIsMy44OC4zNCw1LjgzLjA1Ljg0LjA5LDEuNjcuMTYsMi41LjE2LDIuMjUuMzUsNC41LjU2LDYuNzMuMDUuNTEuMDksMS4wMi4xNCwxLjUuMjQsMi41LjUxLDQuOTkuOCw3LjQ3LjAxLjI0LjA0LjQ4LjA4LjcyLjMzLDIuNjcuNjcsNS4zNSwxLjA2LDgsMCwuMDQsMCwuMDguMDEuMSwyLjM5LDE2LjU0LDUuOTYsMzIuODgsMTAuNyw0OC45LjAzLjA3LjA1LjEzLjA3LjIuNzUsMi41NCwxLjUzLDUuMDUsMi4zMyw3LjU0LjA1LjE0LjEuMy4xNC40NHMuMDkuMjkuMTQuNDRjLjczLDIuMjYsMS41LDQuNTEsMi4yOCw2Ljc3LjIuNTYuMzksMS4xNC42LDEuNzEuNjksMS45NSwxLjQsMy45LDIuMTMsNS44Ni4zNC44OC42NywxLjc1Ljk5LDIuNjQuNjQsMS42MiwxLjI2LDMuMjMsMS45LDQuODQuNDgsMS4yMi45OCwyLjQzLDEuNDksMy42My41MiwxLjI3LDEuMDUsMi41MSwxLjU4LDMuNzguNjUsMS41NCwxLjM1LDMuMDcsMi4wMyw0LjYyLjQxLjkyLjgyLDEuODIsMS4yMywyLjczLjg0LDEuODQsMS43LDMuNjksMi41OCw1LjUyLjI5LjU5LjU2LDEuMTguODUsMS43NSwxLjAyLDIuMTIsMi4wNSw0LjIsMy4xLDYuMjguMTguMzEuMzMuNjQuNS45NSwxLjE4LDIuMywyLjM4LDQuNTksMy42Miw2Ljg2LjA1LjEuMTIuMi4xNi4zMS4yNi40Ny41NS45My44MSwxLjRsMTc2Ljc2LTEwNi40Ny42NS0uMzljLTYuOTctMTQuNy0xMS4zMS0zMC4zMy0xMi45My00Ni4yMmgwWiIgc3R5bGU9ImZpbGw6ICMzNTllZDM7Ii8+CiAgPHBhdGggZD0iTTI1OC4xNSw1NDUuOTlsLS41LjUtMTQ1Ljc5LDE0NS43N2MuNzUuNjksMS40OSwxLjQxLDIuMjYsMi4wOCwxLjM2LDEuMjQsMi43NSwyLjQ2LDQuMTIsMy42Ny43Mi42MywxLjQxLDEuMjYsMi4xMywxLjg4LDEuNjUsMS40MywzLjMyLDIuODEsNC45OCw0LjIxLjQ2LjM4Ljg5Ljc1LDEuMzUsMS4xMiwyLjEyLDEuNzQsNC4yNiwzLjQ2LDYuNDIsNS4xNSwyLjA3LDEuNjMsNC4xNCwzLjIyLDYuMjYsNC44MS4wOS4wNS4xNi4xLjI0LjE3LDguOCw2LjU3LDE3LjksMTIuNzIsMjcuMjcsMTguNDQuMzEuMjEuNjQuMzkuOTcuNiwxLjc5LDEuMDYsMy41NywyLjEyLDUuMzcsMy4xNmwzLjI5LDEuODhjMS4wNS42LDIuMDgsMS4xOCwzLjEyLDEuNzUsMS45LDEuMDMsMy43OSwyLjA3LDUuNywzLjA3LjI2LjE0LjUyLjI5LjguNDIsNS4zLDIuNzcsMTAuNjgsNS4zNSwxNi4xMiw3LjgzbDUuMTgtMTIuNTcsNzMuMzMtMTc4LjA0LjI2LS42NWMtOC00LjI5LTE1LjY4LTkuMzYtMjIuODktMTUuMjdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik0yNDIuOTcsNTMxLjQ2Yy0xLjU3LTEuNzQtMy4wOC0zLjUzLTQuNTUtNS4zNi0xLjMxLTEuNjEtMi41Ni0zLjIzLTMuNzgtNC44OC0xLjQtMS44OC0yLjc2LTMuNzktNC4wNS01LjczLTEuMjktMS45NS0yLjU4LTMuOTEtMy43OC01LjlsLTE3Ni45OCwxMDYuNmMyLjcyLDQuNTIsNS41NCw4LjkyLDguNDUsMTMuMjYuMDkuMTYuMTguMzEuMjkuNDYuMDMuMDcuMDcuMS4xLjE3LjA5LjEzLjE4LjI5LjI3LjQzLjAxLjAxLjAzLjAzLjAzLjA1LjI0LjM0LjQ3LjY4LjcxLDEuMDMuMDEuMDEuMDMuMDQuMDUuMDdzLjAxLjAxLjAxLjAzYzMuMDcsNC41NCw2LjI0LDkuMDEsOS40OSwxMy4zOC4wNy4wOS4xNC4xOC4yMS4yNy4wOC4wOS4xNC4xOC4yMS4yNywxLjQzLDEuODcsMi44NCwzLjc0LDQuMyw1LjYuMi4yNS4zOC40OC41OS43MiwxLjQ5LDEuOTIsMy4wMiwzLjgyLDQuNTgsNS42OS4zNy40NC43NS44OSwxLjExLDEuMzUsMS40LDEuNjcsMi44LDMuMzMsNC4yMiw0Ljk4LjYxLjcxLDEuMjQsMS40MywxLjg3LDIuMTIsMS4yMiwxLjM5LDIuNDIsMi43NywzLjY2LDQuMTMuNjguNzUsMS4zOSwxLjUsMi4wOCwyLjI1LjMxLjM1LjYzLjY4Ljk1LDEuMDMuOS45OCwxLjgsMS45NiwyLjcyLDIuOTMuMzcuMzguNzYuNzYsMS4xMiwxLjE1LDEuNjEsMS42NywzLjI0LDMuMzYsNC44OSw1LjAxbDE0Ni4wMS0xNDUuOThjLTEuNjctMS42Ny0zLjI0LTMuNC00Ljc5LTUuMTNoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik00MzYuNSw1NDUuOTFjLTEuNjEsMS4yOS0zLjIzLDIuNTYtNC44OCwzLjc4bC4zNS42MSwxMDYuNDYsMTc2LjY4YzQuOTMtMy4yMiw5LjgxLTYuNTQsMTQuNTctMTAuMDMsMTAuMy03LjYsMjAuMjctMTUuODMsMjkuODgtMjQuN2wtMTQ1LjgtMTQ1Ljc3LS41OC0uNThaIiBzdHlsZT0iZmlsbDogIzYyYzRmZjsiLz4KICA8cGF0aCBkPSJNNTIyLjk2LDcyOC40NGwtMy42MS02LTk5LjM3LTE2NC45MmMtMi4wMSwxLjItNC4wNywyLjMtNi4xMiwzLjQtMi4wOCwxLjEyLTQuMTYsMi4xNi02LjI4LDMuMTYtMTkuMDksOS4wNS0zOS43NSwxMy42OC02MC40NSwxMy42OC0xMy41NiwwLTI3LjEtMS45Ni00MC4yMS01Ljg3LTIuMjQtLjY3LTQuNDItMS41NC02LjYyLTIuMzMtMi4yMS0uNzctNC40NS0xLjQ1LTYuNjItMi4zNGwtNzMuMjcsMTc3LjkzLTIuODYsNi45Ny0yLjQ2LDUuOTh2LjAzYy4xNy4wOC4zNy4xNC41NS4yMi4yMS4wOC40MS4xNC42LjI0aC4wM2MuMDUuMDMuMS4wNC4xNC4wNSwxLjczLjcyLDMuNDYsMS4zMiw1LjIsMiwyLjE4Ljg1LDQuMzUsMS43MSw2LjU0LDIuNTEsMS4xMi40MSwyLjIyLjg4LDMuMzMsMS4yN2guMDFjMjIuOTYsOC4xLDQ2LjcxLDEzLjc5LDcwLjg1LDE2Ljk2Ljk1LjEyLDEuODguMjUsMi44NC4zOC45OC4xMiwxLjk3LjIxLDIuOTcuMzMsMS44Ni4yMSwzLjcxLjQyLDUuNTguNmwxLjM5LjEyYzIuMjkuMjIsNC41OC40Miw2Ljg1LjU4Ljc4LjA3LDEuNTcuMDksMi4zNC4xNiwyLC4xMyw0LC4yNSw2LC4zNCwxLjIzLjA4LDIuNDYuMSwzLjY5LjE2LDEuNi4wNSwzLjE4LjEyLDQuNzcuMTcsMi4yOS4wNSw0LjYuMDcsNi45LjA4LjU1LDAsMS4wOS4wMSwxLjYzLjAzLDE5LjI5LDAsMzguNTctMS42MSw1Ny42NS00LjgxLjMxLS4wNS42NC0uMS45Ny0uMTQsMi4wMS0uMzUsNC4wMy0uNzMsNi4wNC0xLjEsMS4xNS0uMjIsMi4zMS0uNDQsMy40NC0uNjcsMS4xOC0uMjUsMi4zNy0uNDgsMy41NC0uNzUsMS45Ni0uNDEsMy45Mi0uODQsNS45LTEuMjkuMzUtLjA4LjcxLS4xNCwxLjA2LS4yNSwyOS02Ljc1LDU3LjAxLTE3LjIxLDgzLjMxLTMxLjA1aDBjMS43My0uOTIsMy40MS0xLjk1LDUuMTMtMi44OSwyLjA0LTEuMTEsNC4wNy0yLjI4LDYuMTEtMy40NCwxLjQtLjgsMi44Mi0xLjU0LDQuMjItMi4zOC4wMS0uMDEuMDMtLjAzLjA0LS4wM2guMDFzLjA0LS4wMy4wNy0uMDRsLjAzLS4wMy0uMjYtLjQzLjI2LjQzcy4wMy0uMDEuMDQtLjAxYy4wMy0uMDEuMDQtLjAzLjA3LS4wNC4wOC0uMDUuMTYtLjA5LjI0LS4xNC40NC0uMjcuOS0uNTQsMS4zNi0uODFsLTMuNTgtNS45OVpNMjU4LjIzLDMyOC4wNWMxLjYxLTEuMzEsMy4yNC0yLjU2LDQuODgtMy43OWwtLjM1LS42LTEwNi40Ni0xNzYuN2MtNC45NCwzLjIzLTkuODIsNi41Ni0xNC41OSwxMC4wNS0xMC4yOSw3LjU4LTIwLjI3LDE1LjgxLTI5Ljg1LDI0LjY2bDE0NS44LDE0NS43OS41OC41OVoiIHN0eWxlPSJmaWxsOiAjMzU5ZWQzOyIvPgogIDxwYXRoIGQ9Ik0xMDEuNzUsMTkxLjM5Yy0xLjY2LDEuNjYtMy4yMywzLjM3LTQuODUsNS4wNS0xLjYxLDEuNjktMy4yNiwzLjM2LTQuODQsNS4wNi0xMC42NCwxMS41MS0yMC41LDIzLjcyLTI5LjUsMzYuNTYtLjQzLjU5LS44NSwxLjIyLTEuMjgsMS44Mi0uOTksMS40Ni0xLjk5LDIuOTItMi45NSw0LjM4LTEuMDIsMS41Mi0yLjAzLDMuMDYtMy4wMSw0LjU5LS4zNy41Ni0uNzMsMS4xNC0xLjA5LDEuN0MyMC43LDMwMy4xNCwyLjczLDM2Mi44LjMxLDQyMi45NmMtLjA5LDIuMzQtLjE0LDQuNjgtLjIsNy4wMS0uMDQsMi4zMy0uMTIsNC42Ny0uMTIsN2gyMDYuNDljMC0yLjMzLjIxLTQuNjUuMzQtNywuMTItMi4zNC4xNC00LjY4LjM4LTcuMDEsMi42Ny0yNi44OCwxMy4wNS01My4xNCwzMS4xNC03NS4xOCwxLjQ2LTEuNzksMy4xMi0zLjQ4LDQuNzEtNS4yLDEuNTYtMS43NCwzLjAyLTMuNTMsNC42OS01LjJMMTAxLjc1LDE5MS4zOVpNNTI3LjgsMTQwLjE0Yy0uMjctLjE3LS41OC0uMzQtLjg1LS41MS0xLjgyLTEuMTEtMy42NS0yLjE4LTUuNDktMy4yNi0xLjA2LS42MS0yLjEzLTEuMjItMy4xOS0xLjgyLTEuMDktLjYtMi4xNC0xLjItMy4yMy0xLjc5LTEuODctMS4wMi0zLjc0LTIuMDMtNS42MS0zLjAzLS4zLS4xNC0uNTktLjMtLjg5LS40Ni0xMi4xMS02LjMzLTI0LjU0LTExLjktMzcuMjQtMTYuNzQtLjMzLS4xMy0uNjUtLjI2LS45OC0uMzgtMi43Ny0xLjAzLTUuNTQtMi4wNy04LjM0LTMuMDMtMjIuNTYtNy44Ny00NS44OC0xMy40LTY5LjU3LTE2LjUxbC0yLjktLjM5Yy0uOTgtLjEyLTEuOTUtLjIxLTIuOTItLjMxLTEuODctLjIyLTMuNzMtLjQzLTUuNjEtLjYxLS41MS0uMDUtMS4wMy0uMDgtMS41Ny0uMTQtMi4yMS0uMi00LjQ1LS4zOS02LjY3LS41NmwtMi42LS4xNmMtMS45LS4xMi0zLjgzLS4yNi01LjczLS4zNC0xLjAyLS4wNS0yLjA0LS4wOS0zLjA1LS4xMnYyMDYuOTdjMTAuNjIsMS4xLDIxLjE0LDMuMzYsMzEuMzUsNi44M2wxNTIuMzQtMTUyLjMxYy01LjY2LTMuOTItMTEuMzgtNy43NC0xNy4yNi0xMS4zMWgwWiIgc3R5bGU9ImZpbGw6ICM2MmM0ZmY7Ii8+CiAgPHBhdGggZD0iTTM0MC4zNyw4OS44Yy0yLjM0LjA1LTQuNjguMDUtNy4wMS4xNC0xNC42LjU5LTI5LjE4LDIuMDgtNDMuNjQsNC41MS0uMzEuMDUtLjYzLjEtLjk1LjE2LTIuMDMuMzUtNC4wNC43Mi02LjA1LDEuMS0xLjE0LjIyLTIuMjkuNDMtMy40NC42NS0xLjE5LjI0LTIuMzcuNDgtMy41Ni43NS0xLjk2LjQxLTMuOTIuODQtNS44NywxLjI5LS4zNy4wNy0uNzIuMTYtMS4wNy4yNC0yOC45OCw2Ljc3LTU2Ljk5LDE3LjIxLTgzLjMzLDMxLjA3LTEuNzEuOTItMy4zOSwxLjk1LTUuMSwyLjg4LTIuMDQsMS4xMi00LjA4LDIuMjgtNi4xMSwzLjQ0LTEuNS44OC0zLjAzLDEuNjctNC41NCwyLjU2LS4wMS4wMS0uMDQuMDMtLjA1LjAzLS4xLjA3LS4yMS4xMy0uMzEuMTgtLjM5LjI1LS44LjQ0LTEuMTkuNjh2LjAzczMuNjMsNiwzLjYzLDZsMTAyLjk3LDE3MC45M2MyLjAxLTEuMiw0LjA3LTIuMzEsNi4xMi0zLjQxLDIuMDctMS4xMSw0LjE2LTIuMTYsNi4yNi0zLjE1LDE0LjU1LTYuOTUsMzAuMTktMTEuMzMsNDYuMjMtMTIuOTYsMi4zMy0uMjQsNC42NS0uNDMsNy0uNTUsMi4zMy0uMTIsNC42Ny0uMjQsNy4wMS0uMjRWODkuNjVjLTIuMzQsMC00LjY3LjEtNywuMTRoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik02OTQuMyw0MTkuOWMtLjEtMS44Ni0uMjEtMy43LS4zNC01LjU3LS4wNS0uOTItLjExLTEuODUtLjE4LTIuNzctLjE0LTIuMTgtLjMzLTQuMzctLjU0LTYuNTUtLjA0LS41Ni0uMDktMS4xMi0uMTQtMS42OS0uMjQtMi40NS0uNS00Ljg4LS43OC03LjMxLS4wMy0uMi0uMDQtLjM5LS4wNy0uNTlsLS4wNC0uMjdjLS4zMS0yLjYzLS42Ny01LjI2LTEuMDMtNy44N2wtLjA0LS4yNWMtMi4zOC0xNi41LTUuOTUtMzIuODItMTAuNjctNDguODEtLjA0LS4xMi0uMDctLjIxLS4xLS4zMS0uNzUtMi41LTEuNTItNC45Ny0yLjI5LTcuNDQtLjEyLS4zMy0uMjItLjY1LS4zMy0uOTgtLjczLTIuMjQtMS40OC00LjQ2LTIuMjUtNi42OGwtLjYzLTEuOGMtLjY4LTEuOTItMS4zOS0zLjg0LTIuMDktNS43Ny0uMzUtLjkyLS42OS0xLjgzLTEuMDYtMi43My0uNi0xLjYtMS4yMi0zLjE4LTEuODYtNC43NS0uNS0xLjI3LTEuMDEtMi41MS0xLjUyLTMuNzQtLjUxLTEuMjQtMS4wMy0yLjQ2LTEuNTQtMy42OS0uNjgtMS41Ny0xLjM3LTMuMTQtMi4wNy00LjY5LS4zOS0uODgtLjc4LTEuNzctMS4xOS0yLjY1LS44NS0xLjg2LTEuNzMtMy43My0yLjYtNS41OC0uMjctLjU1LS41NS0xLjEyLS44Mi0xLjY5LTEuMDItMi4xMi0yLjA3LTQuMjUtMy4xNC02LjM0LS4xNC0uMjktLjMtLjU5LS40NC0uODgtMS4xOS0yLjMxLTIuNDItNC42NC0zLjY1LTYuOTMtLjA1LS4wOC0uMDktLjE3LS4xNC0uMjUtNi0xMS4wMy0xMi42LTIxLjc0LTE5Ljc2LTMyLjA2bC0xNTIuMzgsMTUyLjM4YzMuNDYsMTAuMjEsNS43MSwyMC43NCw2LjgxLDMxLjM0aDIwN2MtLjA1LTEuMDMtLjA4LTIuMDctLjEzLTMuMDdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik00ODguMjQsNDM2Ljk3YzAsMi4zNC0uMjIsNC42Ny0uMzQsNy4wMXMtLjE2LDQuNjgtLjM5LDdjLTIuNjcsMjYuOS0xMy4wNCw1My4xNS0zMS4xMyw3NS4yMS0xLjQ2LDEuNzktMy4xMiwzLjQ2LTQuNzEsNS4yLTEuNTcsMS43My0zLjAyLDMuNTItNC42OSw1LjE5bDE0Ni4wMSwxNDUuOThjMS42Ni0xLjY2LDMuMjItMy4zNyw0Ljg0LTUuMDZzMy4yNy0zLjM1LDQuODQtNS4wNmMxMC44LTExLjcsMjAuNjgtMjMuOTQsMjkuNTgtMzYuNjYuMzctLjUxLjY5LTEuMDEsMS4wNS0xLjUsMS4wOS0xLjU2LDIuMTMtMy4xNCwzLjItNC43MS45My0xLjQxLDEuODYtMi44MSwyLjc2LTQuMjQuNDYtLjY4LjktMS4zOSwxLjMzLTIuMDcsMzMuNDktNTIuNTcsNTEuNDEtMTEyLjE3LDUzLjgyLTE3Mi4yOS4wOS0yLjMzLjE0LTQuNjcuMTgtNy4wMS4wNS0yLjMzLjEyLTQuNjUuMTItN2gtMjA2LjQ2WiIgc3R5bGU9ImZpbGw6ICNmNmY7Ii8+CiAgPHBhdGggZD0iTTc1Ni4wNCwyOC4zM2MtMzcuNzctMzcuNzctOTkuMDItMzcuNzctMTM2Ljc5LDAtMzAuMTQsMzAuMTItMzYuMTcsNzUuMTctMTguMjEsMTExLjMzbC0yMTAuNzIsMjEwLjdjLTM2LjE3LTE3Ljk0LTgxLjIyLTExLjkyLTExMS4zNiwxOC4yLTM3Ljc3LDM3Ljc3LTM3Ljc2LDk5LjAyLDAsMTM2Ljc5LDM3Ljc5LDM3Ljc3LDk5LjA0LDM3Ljc2LDEzNi44MiwwLDMwLjE0LTMwLjE0LDM2LjE1LTc1LjE4LDE4LjItMTExLjM1bDIxMC43Mi0yMTAuNjljMzYuMTgsMTcuOTQsODEuMjEsMTEuOTIsMTExLjM1LTE4LjIxLDM3Ljc3LTM3Ljc2LDM3Ljc3LTk5LDAtMTM2Ljc4aDBaIiBzdHlsZT0iZmlsbDogIzAwMDsiLz4KPC9zdmc+`:`PHN2ZyBpZD0icGIzM2Zfb3BlbmFwaSIgZGF0YS1uYW1lPSJwYjMzZl9vcGVuYXBpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3ODQuMzcgNzg0LjI5Ij4KICA8cGF0aCBkPSJNMjA3LjI4LDQ1MC45N0guMzFjLjA0LDEuMDIuMDcsMi4wMy4xMiwzLjAzLjA4LDEuOTUuMjIsMy44OC4zNCw1LjgzLjA1Ljg0LjA5LDEuNjcuMTYsMi41LjE2LDIuMjUuMzUsNC41LjU2LDYuNzMuMDUuNTEuMDksMS4wMi4xNCwxLjUuMjQsMi41LjUxLDQuOTkuOCw3LjQ3LjAxLjI0LjA0LjQ4LjA4LjcyLjMzLDIuNjcuNjcsNS4zNSwxLjA2LDgsMCwuMDQsMCwuMDguMDEuMSwyLjM5LDE2LjU0LDUuOTYsMzIuODgsMTAuNyw0OC45LjAzLjA3LjA1LjEzLjA3LjIuNzUsMi41NCwxLjUzLDUuMDUsMi4zMyw3LjU0LjA1LjE0LjEuMy4xNC40NHMuMDkuMjkuMTQuNDRjLjczLDIuMjYsMS41LDQuNTEsMi4yOCw2Ljc3LjIuNTYuMzksMS4xNC42LDEuNzEuNjksMS45NSwxLjQsMy45LDIuMTMsNS44Ni4zNC44OC42NywxLjc1Ljk5LDIuNjQuNjQsMS42MiwxLjI2LDMuMjMsMS45LDQuODQuNDgsMS4yMi45OCwyLjQzLDEuNDksMy42My41MiwxLjI3LDEuMDUsMi41MSwxLjU4LDMuNzguNjUsMS41NCwxLjM1LDMuMDcsMi4wMyw0LjYyLjQxLjkyLjgyLDEuODIsMS4yMywyLjczLjg0LDEuODQsMS43LDMuNjksMi41OCw1LjUyLjI5LjU5LjU2LDEuMTguODUsMS43NSwxLjAyLDIuMTIsMi4wNSw0LjIsMy4xLDYuMjguMTguMzEuMzMuNjQuNS45NSwxLjE4LDIuMywyLjM4LDQuNTksMy42Miw2Ljg2LjA1LjEuMTIuMi4xNi4zMS4yNi40Ny41NS45My44MSwxLjRsMTc2Ljc2LTEwNi40Ny42NS0uMzljLTYuOTctMTQuNy0xMS4zMS0zMC4zMy0xMi45My00Ni4yMmgwWiIgc3R5bGU9ImZpbGw6ICMzNTllZDM7Ii8+CiAgPHBhdGggZD0iTTI1OC4xNSw1NDUuOTlsLS41LjUtMTQ1Ljc5LDE0NS43N2MuNzUuNjksMS40OSwxLjQxLDIuMjYsMi4wOCwxLjM2LDEuMjQsMi43NSwyLjQ2LDQuMTIsMy42Ny43Mi42MywxLjQxLDEuMjYsMi4xMywxLjg4LDEuNjUsMS40MywzLjMyLDIuODEsNC45OCw0LjIxLjQ2LjM4Ljg5Ljc1LDEuMzUsMS4xMiwyLjEyLDEuNzQsNC4yNiwzLjQ2LDYuNDIsNS4xNSwyLjA3LDEuNjMsNC4xNCwzLjIyLDYuMjYsNC44MS4wOS4wNS4xNi4xLjI0LjE3LDguOCw2LjU3LDE3LjksMTIuNzIsMjcuMjcsMTguNDQuMzEuMjEuNjQuMzkuOTcuNiwxLjc5LDEuMDYsMy41NywyLjEyLDUuMzcsMy4xNmwzLjI5LDEuODhjMS4wNS42LDIuMDgsMS4xOCwzLjEyLDEuNzUsMS45LDEuMDMsMy43OSwyLjA3LDUuNywzLjA3LjI2LjE0LjUyLjI5LjguNDIsNS4zLDIuNzcsMTAuNjgsNS4zNSwxNi4xMiw3LjgzbDUuMTgtMTIuNTcsNzMuMzMtMTc4LjA0LjI2LS42NWMtOC00LjI5LTE1LjY4LTkuMzYtMjIuODktMTUuMjdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik0yNDIuOTcsNTMxLjQ2Yy0xLjU3LTEuNzQtMy4wOC0zLjUzLTQuNTUtNS4zNi0xLjMxLTEuNjEtMi41Ni0zLjIzLTMuNzgtNC44OC0xLjQtMS44OC0yLjc2LTMuNzktNC4wNS01LjczLTEuMjktMS45NS0yLjU4LTMuOTEtMy43OC01LjlsLTE3Ni45OCwxMDYuNmMyLjcyLDQuNTIsNS41NCw4LjkyLDguNDUsMTMuMjYuMDkuMTYuMTguMzEuMjkuNDYuMDMuMDcuMDcuMS4xLjE3LjA5LjEzLjE4LjI5LjI3LjQzLjAxLjAxLjAzLjAzLjAzLjA1LjI0LjM0LjQ3LjY4LjcxLDEuMDMuMDEuMDEuMDMuMDQuMDUuMDdzLjAxLjAxLjAxLjAzYzMuMDcsNC41NCw2LjI0LDkuMDEsOS40OSwxMy4zOC4wNy4wOS4xNC4xOC4yMS4yNy4wOC4wOS4xNC4xOC4yMS4yNywxLjQzLDEuODcsMi44NCwzLjc0LDQuMyw1LjYuMi4yNS4zOC40OC41OS43MiwxLjQ5LDEuOTIsMy4wMiwzLjgyLDQuNTgsNS42OS4zNy40NC43NS44OSwxLjExLDEuMzUsMS40LDEuNjcsMi44LDMuMzMsNC4yMiw0Ljk4LjYxLjcxLDEuMjQsMS40MywxLjg3LDIuMTIsMS4yMiwxLjM5LDIuNDIsMi43NywzLjY2LDQuMTMuNjguNzUsMS4zOSwxLjUsMi4wOCwyLjI1LjMxLjM1LjYzLjY4Ljk1LDEuMDMuOS45OCwxLjgsMS45NiwyLjcyLDIuOTMuMzcuMzguNzYuNzYsMS4xMiwxLjE1LDEuNjEsMS42NywzLjI0LDMuMzYsNC44OSw1LjAxbDE0Ni4wMS0xNDUuOThjLTEuNjctMS42Ny0zLjI0LTMuNC00Ljc5LTUuMTNoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik00MzYuNSw1NDUuOTFjLTEuNjEsMS4yOS0zLjIzLDIuNTYtNC44OCwzLjc4bC4zNS42MSwxMDYuNDYsMTc2LjY4YzQuOTMtMy4yMiw5LjgxLTYuNTQsMTQuNTctMTAuMDMsMTAuMy03LjYsMjAuMjctMTUuODMsMjkuODgtMjQuN2wtMTQ1LjgtMTQ1Ljc3LS41OC0uNThaIiBzdHlsZT0iZmlsbDogIzYyYzRmZjsiLz4KICA8cGF0aCBkPSJNNTIyLjk2LDcyOC40NGwtMy42MS02LTk5LjM3LTE2NC45MmMtMi4wMSwxLjItNC4wNywyLjMtNi4xMiwzLjQtMi4wOCwxLjEyLTQuMTYsMi4xNi02LjI4LDMuMTYtMTkuMDksOS4wNS0zOS43NSwxMy42OC02MC40NSwxMy42OC0xMy41NiwwLTI3LjEtMS45Ni00MC4yMS01Ljg3LTIuMjQtLjY3LTQuNDItMS41NC02LjYyLTIuMzMtMi4yMS0uNzctNC40NS0xLjQ1LTYuNjItMi4zNGwtNzMuMjcsMTc3LjkzLTIuODYsNi45Ny0yLjQ2LDUuOTh2LjAzYy4xNy4wOC4zNy4xNC41NS4yMi4yMS4wOC40MS4xNC42LjI0aC4wM2MuMDUuMDMuMS4wNC4xNC4wNSwxLjczLjcyLDMuNDYsMS4zMiw1LjIsMiwyLjE4Ljg1LDQuMzUsMS43MSw2LjU0LDIuNTEsMS4xMi40MSwyLjIyLjg4LDMuMzMsMS4yN2guMDFjMjIuOTYsOC4xLDQ2LjcxLDEzLjc5LDcwLjg1LDE2Ljk2Ljk1LjEyLDEuODguMjUsMi44NC4zOC45OC4xMiwxLjk3LjIxLDIuOTcuMzMsMS44Ni4yMSwzLjcxLjQyLDUuNTguNmwxLjM5LjEyYzIuMjkuMjIsNC41OC40Miw2Ljg1LjU4Ljc4LjA3LDEuNTcuMDksMi4zNC4xNiwyLC4xMyw0LC4yNSw2LC4zNCwxLjIzLjA4LDIuNDYuMSwzLjY5LjE2LDEuNi4wNSwzLjE4LjEyLDQuNzcuMTcsMi4yOS4wNSw0LjYuMDcsNi45LjA4LjU1LDAsMS4wOS4wMSwxLjYzLjAzLDE5LjI5LDAsMzguNTctMS42MSw1Ny42NS00LjgxLjMxLS4wNS42NC0uMS45Ny0uMTQsMi4wMS0uMzUsNC4wMy0uNzMsNi4wNC0xLjEsMS4xNS0uMjIsMi4zMS0uNDQsMy40NC0uNjcsMS4xOC0uMjUsMi4zNy0uNDgsMy41NC0uNzUsMS45Ni0uNDEsMy45Mi0uODQsNS45LTEuMjkuMzUtLjA4LjcxLS4xNCwxLjA2LS4yNSwyOS02Ljc1LDU3LjAxLTE3LjIxLDgzLjMxLTMxLjA1aDBjMS43My0uOTIsMy40MS0xLjk1LDUuMTMtMi44OSwyLjA0LTEuMTEsNC4wNy0yLjI4LDYuMTEtMy40NCwxLjQtLjgsMi44Mi0xLjU0LDQuMjItMi4zOC4wMS0uMDEuMDMtLjAzLjA0LS4wM2guMDFzLjA0LS4wMy4wNy0uMDRsLjAzLS4wMy0uMjYtLjQzLjI2LjQzcy4wMy0uMDEuMDQtLjAxYy4wMy0uMDEuMDQtLjAzLjA3LS4wNC4wOC0uMDUuMTYtLjA5LjI0LS4xNC40NC0uMjcuOS0uNTQsMS4zNi0uODFsLTMuNTgtNS45OVpNMjU4LjIzLDMyOC4wNWMxLjYxLTEuMzEsMy4yNC0yLjU2LDQuODgtMy43OWwtLjM1LS42LTEwNi40Ni0xNzYuN2MtNC45NCwzLjIzLTkuODIsNi41Ni0xNC41OSwxMC4wNS0xMC4yOSw3LjU4LTIwLjI3LDE1LjgxLTI5Ljg1LDI0LjY2bDE0NS44LDE0NS43OS41OC41OVoiIHN0eWxlPSJmaWxsOiAjMzU5ZWQzOyIvPgogIDxwYXRoIGQ9Ik0xMDEuNzUsMTkxLjM5Yy0xLjY2LDEuNjYtMy4yMywzLjM3LTQuODUsNS4wNS0xLjYxLDEuNjktMy4yNiwzLjM2LTQuODQsNS4wNi0xMC42NCwxMS41MS0yMC41LDIzLjcyLTI5LjUsMzYuNTYtLjQzLjU5LS44NSwxLjIyLTEuMjgsMS44Mi0uOTksMS40Ni0xLjk5LDIuOTItMi45NSw0LjM4LTEuMDIsMS41Mi0yLjAzLDMuMDYtMy4wMSw0LjU5LS4zNy41Ni0uNzMsMS4xNC0xLjA5LDEuN0MyMC43LDMwMy4xNCwyLjczLDM2Mi44LjMxLDQyMi45NmMtLjA5LDIuMzQtLjE0LDQuNjgtLjIsNy4wMS0uMDQsMi4zMy0uMTIsNC42Ny0uMTIsN2gyMDYuNDljMC0yLjMzLjIxLTQuNjUuMzQtNywuMTItMi4zNC4xNC00LjY4LjM4LTcuMDEsMi42Ny0yNi44OCwxMy4wNS01My4xNCwzMS4xNC03NS4xOCwxLjQ2LTEuNzksMy4xMi0zLjQ4LDQuNzEtNS4yLDEuNTYtMS43NCwzLjAyLTMuNTMsNC42OS01LjJMMTAxLjc1LDE5MS4zOVpNNTI3LjgsMTQwLjE0Yy0uMjctLjE3LS41OC0uMzQtLjg1LS41MS0xLjgyLTEuMTEtMy42NS0yLjE4LTUuNDktMy4yNi0xLjA2LS42MS0yLjEzLTEuMjItMy4xOS0xLjgyLTEuMDktLjYtMi4xNC0xLjItMy4yMy0xLjc5LTEuODctMS4wMi0zLjc0LTIuMDMtNS42MS0zLjAzLS4zLS4xNC0uNTktLjMtLjg5LS40Ni0xMi4xMS02LjMzLTI0LjU0LTExLjktMzcuMjQtMTYuNzQtLjMzLS4xMy0uNjUtLjI2LS45OC0uMzgtMi43Ny0xLjAzLTUuNTQtMi4wNy04LjM0LTMuMDMtMjIuNTYtNy44Ny00NS44OC0xMy40LTY5LjU3LTE2LjUxbC0yLjktLjM5Yy0uOTgtLjEyLTEuOTUtLjIxLTIuOTItLjMxLTEuODctLjIyLTMuNzMtLjQzLTUuNjEtLjYxLS41MS0uMDUtMS4wMy0uMDgtMS41Ny0uMTQtMi4yMS0uMi00LjQ1LS4zOS02LjY3LS41NmwtMi42LS4xNmMtMS45LS4xMi0zLjgzLS4yNi01LjczLS4zNC0xLjAyLS4wNS0yLjA0LS4wOS0zLjA1LS4xMnYyMDYuOTdjMTAuNjIsMS4xLDIxLjE0LDMuMzYsMzEuMzUsNi44M2wxNTIuMzQtMTUyLjMxYy01LjY2LTMuOTItMTEuMzgtNy43NC0xNy4yNi0xMS4zMWgwWiIgc3R5bGU9ImZpbGw6ICM2MmM0ZmY7Ii8+CiAgPHBhdGggZD0iTTM0MC4zNyw4OS44Yy0yLjM0LjA1LTQuNjguMDUtNy4wMS4xNC0xNC42LjU5LTI5LjE4LDIuMDgtNDMuNjQsNC41MS0uMzEuMDUtLjYzLjEtLjk1LjE2LTIuMDMuMzUtNC4wNC43Mi02LjA1LDEuMS0xLjE0LjIyLTIuMjkuNDMtMy40NC42NS0xLjE5LjI0LTIuMzcuNDgtMy41Ni43NS0xLjk2LjQxLTMuOTIuODQtNS44NywxLjI5LS4zNy4wNy0uNzIuMTYtMS4wNy4yNC0yOC45OCw2Ljc3LTU2Ljk5LDE3LjIxLTgzLjMzLDMxLjA3LTEuNzEuOTItMy4zOSwxLjk1LTUuMSwyLjg4LTIuMDQsMS4xMi00LjA4LDIuMjgtNi4xMSwzLjQ0LTEuNS44OC0zLjAzLDEuNjctNC41NCwyLjU2LS4wMS4wMS0uMDQuMDMtLjA1LjAzLS4xLjA3LS4yMS4xMy0uMzEuMTgtLjM5LjI1LS44LjQ0LTEuMTkuNjh2LjAzczMuNjMsNiwzLjYzLDZsMTAyLjk3LDE3MC45M2MyLjAxLTEuMiw0LjA3LTIuMzEsNi4xMi0zLjQxLDIuMDctMS4xMSw0LjE2LTIuMTYsNi4yNi0zLjE1LDE0LjU1LTYuOTUsMzAuMTktMTEuMzMsNDYuMjMtMTIuOTYsMi4zMy0uMjQsNC42NS0uNDMsNy0uNTUsMi4zMy0uMTIsNC42Ny0uMjQsNy4wMS0uMjRWODkuNjVjLTIuMzQsMC00LjY3LjEtNywuMTRoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik02OTQuMyw0MTkuOWMtLjEtMS44Ni0uMjEtMy43LS4zNC01LjU3LS4wNS0uOTItLjExLTEuODUtLjE4LTIuNzctLjE0LTIuMTgtLjMzLTQuMzctLjU0LTYuNTUtLjA0LS41Ni0uMDktMS4xMi0uMTQtMS42OS0uMjQtMi40NS0uNS00Ljg4LS43OC03LjMxLS4wMy0uMi0uMDQtLjM5LS4wNy0uNTlsLS4wNC0uMjdjLS4zMS0yLjYzLS42Ny01LjI2LTEuMDMtNy44N2wtLjA0LS4yNWMtMi4zOC0xNi41LTUuOTUtMzIuODItMTAuNjctNDguODEtLjA0LS4xMi0uMDctLjIxLS4xLS4zMS0uNzUtMi41LTEuNTItNC45Ny0yLjI5LTcuNDQtLjEyLS4zMy0uMjItLjY1LS4zMy0uOTgtLjczLTIuMjQtMS40OC00LjQ2LTIuMjUtNi42OGwtLjYzLTEuOGMtLjY4LTEuOTItMS4zOS0zLjg0LTIuMDktNS43Ny0uMzUtLjkyLS42OS0xLjgzLTEuMDYtMi43My0uNi0xLjYtMS4yMi0zLjE4LTEuODYtNC43NS0uNS0xLjI3LTEuMDEtMi41MS0xLjUyLTMuNzQtLjUxLTEuMjQtMS4wMy0yLjQ2LTEuNTQtMy42OS0uNjgtMS41Ny0xLjM3LTMuMTQtMi4wNy00LjY5LS4zOS0uODgtLjc4LTEuNzctMS4xOS0yLjY1LS44NS0xLjg2LTEuNzMtMy43My0yLjYtNS41OC0uMjctLjU1LS41NS0xLjEyLS44Mi0xLjY5LTEuMDItMi4xMi0yLjA3LTQuMjUtMy4xNC02LjM0LS4xNC0uMjktLjMtLjU5LS40NC0uODgtMS4xOS0yLjMxLTIuNDItNC42NC0zLjY1LTYuOTMtLjA1LS4wOC0uMDktLjE3LS4xNC0uMjUtNi0xMS4wMy0xMi42LTIxLjc0LTE5Ljc2LTMyLjA2bC0xNTIuMzgsMTUyLjM4YzMuNDYsMTAuMjEsNS43MSwyMC43NCw2LjgxLDMxLjM0aDIwN2MtLjA1LTEuMDMtLjA4LTIuMDctLjEzLTMuMDdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik00ODguMjQsNDM2Ljk3YzAsMi4zNC0uMjIsNC42Ny0uMzQsNy4wMXMtLjE2LDQuNjgtLjM5LDdjLTIuNjcsMjYuOS0xMy4wNCw1My4xNS0zMS4xMyw3NS4yMS0xLjQ2LDEuNzktMy4xMiwzLjQ2LTQuNzEsNS4yLTEuNTcsMS43My0zLjAyLDMuNTItNC42OSw1LjE5bDE0Ni4wMSwxNDUuOThjMS42Ni0xLjY2LDMuMjItMy4zNyw0Ljg0LTUuMDZzMy4yNy0zLjM1LDQuODQtNS4wNmMxMC44LTExLjcsMjAuNjgtMjMuOTQsMjkuNTgtMzYuNjYuMzctLjUxLjY5LTEuMDEsMS4wNS0xLjUsMS4wOS0xLjU2LDIuMTMtMy4xNCwzLjItNC43MS45My0xLjQxLDEuODYtMi44MSwyLjc2LTQuMjQuNDYtLjY4LjktMS4zOSwxLjMzLTIuMDcsMzMuNDktNTIuNTcsNTEuNDEtMTEyLjE3LDUzLjgyLTE3Mi4yOS4wOS0yLjMzLjE0LTQuNjcuMTgtNy4wMS4wNS0yLjMzLjEyLTQuNjUuMTItN2gtMjA2LjQ2WiIgc3R5bGU9ImZpbGw6ICNmNmY7Ii8+CiAgPHBhdGggZD0iTTc1Ni4wNCwyOC4zM2MtMzcuNzctMzcuNzctOTkuMDItMzcuNzctMTM2Ljc5LDAtMzAuMTQsMzAuMTItMzYuMTcsNzUuMTctMTguMjEsMTExLjMzbC0yMTAuNzIsMjEwLjdjLTM2LjE3LTE3Ljk0LTgxLjIyLTExLjkyLTExMS4zNiwxOC4yLTM3Ljc3LDM3Ljc3LTM3Ljc2LDk5LjAyLDAsMTM2Ljc5LDM3Ljc5LDM3Ljc3LDk5LjA0LDM3Ljc2LDEzNi44MiwwLDMwLjE0LTMwLjE0LDM2LjE1LTc1LjE4LDE4LjItMTExLjM1bDIxMC43Mi0yMTAuNjljMzYuMTgsMTcuOTQsODEuMjEsMTEuOTIsMTExLjM1LTE4LjIxLDM3Ljc3LTM3Ljc2LDM3Ljc3LTk5LDAtMTM2Ljc4aDBaIiBzdHlsZT0iZmlsbDogI2ZmZjsiLz4KPC9zdmc+`}goIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiB2aWV3Qm94PSIwIDAgMzIgMzIuMDAwMDAxIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0xMDIwLjM2MjIpIj4KICAgIDxlbGxpcHNlIGN4PSItOTA3LjM1NjU3IiBjeT0iNDc5LjkwMDA5IiBmaWxsPSIjMzg0ZTU0IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHJ4PSIzLjU3OTM5OTYiIHJ5PSIzLjgyMDc5NTMiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiIHRyYW5zZm9ybT0ic2NhbGUoLTEgMSkgcm90YXRlKC02MC41NDgpIi8+CiAgICA8ZWxsaXBzZSBjeD0iLTg5MS41NzY1NCIgY3k9IjUwNy44NDYxIiBmaWxsPSIjMzg0ZTU0IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHJ4PSIzLjU3OTM5OTYiIHJ5PSIzLjgyMDc5NTMiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiIHRyYW5zZm9ybT0icm90YXRlKC02MC41NDgpIi8+CiAgICA8cGF0aCBmaWxsPSIjMzg0ZTU0IiBkPSJNMTYuMDkxNjkzIDEwMjEuMzY0MmMtMS4xMDU3NDkuMDEtMi4yMTAzNDEuMDQ5LTMuMzE2MDkuMDlDNi44NDIyNTU4IDEwMjEuNjczOCAyIDEwMjYuMzk0MiAyIDEwMzIuMzYyMnYyMGgyOHYtMjBjMC01Ljk2ODMtNC42NjczNDUtMTAuNDkxMi0xMC41OTAyMy0xMC45MDgtMS4xMDU3NS0uMDc4LTIuMjEyMzI4LS4wOTktMy4zMTgwNzctLjA5eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjNzZlMWZlIiBkPSJNNC42MDc4ODY3IDEwMjUuMDQ2MmMuNDU5NTY0LjI1OTUgMS44MTgyNjIgMS4yMDEzIDEuOTgwOTgzIDEuNjQ4LjE4MzQwMS41MDM1LjE1OTM4NSAxLjA2NTctLjExNDYxNCAxLjU1MS0uMzQ2NjI3LjYxMzgtMS4wMDUzNDEuOTQ4Ny0xLjY5NjQyMS45MzY1LS4zMzk4ODYtLjAxLTEuNzIwMjgzLS42MzcyLTIuMDQyNTYxLS44MTkyLS45Nzc1NC0uNTUxOS0xLjM1MDc5NS0xLjc0MTgtLjgzMzY4Ni0yLjY1NzYuNTE3MTA5LS45MTU4IDEuNzI4NzQ5LTEuMjEwNyAyLjcwNjI5OS0uNjU4N3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtzb2xpZC1jb2xvcjojMDAwO3NvbGlkLW9wYWNpdHk6MSIvPgogICAgPHJlY3Qgd2lkdGg9IjMuMDg2NjY1OSIgaGVpZ2h0PSIzLjUzMTM2NjMiIHg9IjE0LjQwNjIxMyIgeT0iMTAzNS42ODQyIiBmaWxsLW9wYWNpdHk9Ii4zMjg1MDI0NiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiByeT0iLjYyNDI2MzI5IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjNzZlMWZlIiBkPSJNMTYgMTAyMy4zNjIyYy05IDAtMTIgMy43MTUzLTEyIDl2MjBoMjRjLS4wNDg4OS03LjM1NjIgMC0xOCAwLTIwIDAtNS4yODQ4LTMtOS0xMi05eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjNzZlMWZlIiBkPSJNMjcuMDc0MDczIDEwMjUuMDQ2MmMtLjQ1OTU3LjI1OTUtMS44MTgyNTcgMS4yMDEzLTEuOTgwOTc5IDEuNjQ4LS4xODM0MDEuNTAzNS0uMTU5Mzg0IDEuMDY1Ny4xMTQ2MTQgMS41NTEuMzQ2NjI3LjYxMzggMS4wMDUzMzUuOTQ4NyAxLjY5NjQxNS45MzY1LjMzOTg4LS4wMSAxLjcyMDI5LS42MzcyIDIuMDQyNTYtLjgxOTIuOTc3NTQtLjU1MTkgMS4zNTA3OS0xLjc0MTguODMzNjktMi42NTc2LS41MTcxMS0uOTE1OC0xLjcyODc2LTEuMjEwNy0yLjcwNjMtLjY1ODd6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxjaXJjbGUgY3g9IjIxLjE3NTczNCIgY3k9IjEwMzAuMzU0MiIgcj0iNC42NTM3NTQyIiBmaWxsPSIjZmZmIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxjaXJjbGUgY3g9IjEwLjMzOTQ4NiIgY3k9IjEwMzAuMzU0MiIgcj0iNC44MzE2MzQ1IiBmaWxsPSIjZmZmIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxyZWN0IHdpZHRoPSIzLjY2NzM2ODciIGhlaWdodD0iNC4xMDYzNDA5IiB4PSIxNC4xMTU4NjMiIHk9IjEwMzUuOTE3NCIgZmlsbC1vcGFjaXR5PSIuMzI5NDExNzYiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgcnk9Ii43MjU5MDUzNiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtzb2xpZC1jb2xvcjojMDAwO3NvbGlkLW9wYWNpdHk6MSIvPgogICAgPHJlY3Qgd2lkdGg9IjMuNjY3MzY4NyIgaGVpZ2h0PSI0LjEwNjM0MDkiIHg9IjE0LjExNTg2MyIgeT0iMTAzNS4yMjUzIiBmaWxsPSIjZmZmY2ZiIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHJ5PSIuNzI1OTA1MzYiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxwYXRoIGZpbGwtb3BhY2l0eT0iLjMyOTQxMTc2IiBkPSJNMTkuOTk5NzM1IDEwMzYuNTI4OWMwIC44MzgtLjg3MTIyOCAxLjI2ODItMi4xNDQ3NjYgMS4xNjU5LS4wMjM2NiAwLS4wNDc5NS0uNjAwNC0uMjU0MTQ3LS41ODMyLS41MDM2NjkuMDQyLTEuMDk1OTAyLS4wMi0xLjY4NTk2NC0uMDItLjYxMjkzOSAwLTEuMjA2MzQyLjE4MjYtMS42ODU0OS4wMTctLjExMDIzMy0uMDM4LS4xNzgyOTguNTgzOC0uMjYxNTMyLjU4MTYtMS4yNDM2ODUtLjAzMy0yLjA3ODgwMy0uMzM4My0yLjA3ODgwMy0xLjE2MTggMC0xLjIxMTggMS44MTU2MzUtMi4xOTQxIDQuMDU1MzUxLTIuMTk0MSAyLjIzOTcwNCAwIDQuMDU1MzUxLjk4MjMgNC4wNTUzNTEgMi4xOTQxeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjYzM4Yzc0IiBkPSJNMTkuOTc3NDE0IDEwMzUuNzAwNGMwIC41Njg1LS40MzM2NTkuODU1NC0xLjEzODA5MSAxLjAwMDEtLjI5MTkzMy4wNi0uNjMwMzcxLjA5Ni0xLjAwMzcxOS4xMTY2LS41NjQwNS4wMzItMS4yMDc3ODIuMDMxLTEuODkxMjIuMDMxLS42NzI4MzQgMC0xLjMwNzE4MiAwLTEuODY0OTA0LS4wMjktLjMwNjI2OC0uMDE3LS41ODk0MjktLjA0My0uODQzMTY0LS4wODQtLjgxMzgzMy0uMTMxOC0xLjMyNDk2Mi0uNDE3LTEuMzI0OTYyLTEuMDM0NCAwLTEuMTYwMSAxLjgwNTY0Mi0yLjEwMDYgNC4wMzMwMy0yLjEwMDYgMi4yMjczNzcgMCA0LjAzMzAzLjk0MDUgNC4wMzMwMyAyLjEwMDZ6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxlbGxpcHNlIGN4PSIxNS45NDQzODIiIGN5PSIxMDMzLjg1MDEiIGZpbGw9IiMyMzIwMWYiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgcng9IjIuMDgwMTczMyIgcnk9IjEuMzQzNzQ3IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8Y2lyY2xlIGN4PSIxMi40MTQyMDEiIGN5PSIxMDMwLjM1NDIiIHI9IjEuOTYzMDYzNCIgZmlsbD0iIzE3MTMxMSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8Y2lyY2xlIGN4PSIyMy4xMTAxMjEiIGN5PSIxMDMwLjM1NDIiIHI9IjEuOTYzMDYzNCIgZmlsbD0iIzE3MTMxMSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMzODRlNTQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIuMzk3MzA4NzQiIGQ9Ik01LjAwNTUzNzcgMTAyNy4yNzI3Yy0xLjE3MDQzNS0xLjA4MzUtMi4wMjY5NzMtLjc3MjEtMi4wNDQxNzItLjc0NjMiLz4KICAgIDxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzM4NGU1NCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTczMDg3NCIgZD0iTTQuMzg1MjQ1NyAxMDI2LjkxNTJjLTEuMTU4NTU3LjAzNi0xLjM0NjcwNC42MzAzLTEuMzM4ODEuNjUyM20yMy41ODQwOTczLS4zOTUxYzEuMTcwNDMtMS4wODM1IDIuMDI2OTctLjc3MjEgMi4wNDQxNy0uNzQ2MyIvPgogICAgPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMzg0ZTU0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NzMwODc0IiBkPSJNMjcuMzIxNzczIDEwMjYuNjczYzEuMTU4NTYuMDM2IDEuMzQ2Ny42MzAyIDEuMzM4OC42NTIyIi8+CiAgPC9nPgo8L3N2Zz4=`}typescriptIcon(){return`CjxzdmcgZmlsbD0ibm9uZSIgaGVpZ2h0PSI1MTIiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB3aWR0aD0iNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IGZpbGw9IiMzMTc4YzYiIGhlaWdodD0iNTEyIiByeD0iNTAiIHdpZHRoPSI1MTIiLz48cmVjdCBmaWxsPSIjMzE3OGM2IiBoZWlnaHQ9IjUxMiIgcng9IjUwIiB3aWR0aD0iNTEyIi8+PHBhdGggY2xpcC1ydWxlPSJldmVub2RkIiBkPSJtMzE2LjkzOSA0MDcuNDI0djUwLjA2MWM4LjEzOCA0LjE3MiAxNy43NjMgNy4zIDI4Ljg3NSA5LjM4NnMyMi44MjMgMy4xMjkgMzUuMTM1IDMuMTI5YzExLjk5OSAwIDIzLjM5Ny0xLjE0NyAzNC4xOTYtMy40NDIgMTAuNzk5LTIuMjk0IDIwLjI2OC02LjA3NSAyOC40MDYtMTEuMzQyIDguMTM4LTUuMjY2IDE0LjU4MS0xMi4xNSAxOS4zMjgtMjAuNjVzNy4xMjEtMTkuMDA3IDcuMTIxLTMxLjUyMmMwLTkuMDc0LTEuMzU2LTE3LjAyNi00LjA2OS0yMy44NTdzLTYuNjI1LTEyLjkwNi0xMS43MzgtMTguMjI1Yy01LjExMi01LjMxOS0xMS4yNDItMTAuMDkxLTE4LjM4OS0xNC4zMTVzLTE1LjIwNy04LjIxMy0yNC4xOC0xMS45NjdjLTYuNTczLTIuNzEyLTEyLjQ2OC01LjM0NS0xNy42ODUtNy45LTUuMjE3LTIuNTU2LTkuNjUxLTUuMTYzLTEzLjMwMy03LjgyMi0zLjY1Mi0yLjY2LTYuNDY5LTUuNDc2LTguNDUxLTguNDQ4LTEuOTgyLTIuOTczLTIuOTc0LTYuMzM2LTIuOTc0LTEwLjA5MSAwLTMuNDQxLjg4Ny02LjU0NCAyLjY2MS05LjMwOHM0LjI3OC01LjEzNiA3LjUxMi03LjExOGMzLjIzNS0xLjk4MSA3LjE5OS0zLjUyIDExLjg5NC00LjYxNSA0LjY5Ni0xLjA5NSA5LjkxMi0xLjY0MiAxNS42NTEtMS42NDIgNC4xNzMgMCA4LjU4MS4zMTMgMTMuMjI0LjkzOCA0LjY0My42MjYgOS4zMTIgMS41OTEgMTQuMDA4IDIuODk0IDQuNjk1IDEuMzA0IDkuMjU5IDIuOTQ3IDEzLjY5NCA0LjkyOCA0LjQzNCAxLjk4MiA4LjUyOSA0LjI3NiAxMi4yODUgNi44ODR2LTQ2Ljc3NmMtNy42MTYtMi45Mi0xNS45MzctNS4wODQtMjQuOTYyLTYuNDkycy0xOS4zODEtMi4xMTItMzEuMDY2LTIuMTEyYy0xMS44OTUgMC0yMy4xNjMgMS4yNzgtMzMuODA1IDMuODMzcy0yMC4wMDYgNi41NDQtMjguMDkzIDExLjk2N2MtOC4wODYgNS40MjQtMTQuNDc2IDEyLjMzMy0xOS4xNzEgMjAuNzI5LTQuNjk1IDguMzk1LTcuMDQzIDE4LjQzMy03LjA0MyAzMC4xMTQgMCAxNC45MTQgNC4zMDQgMjcuNjM4IDEyLjkxMiAzOC4xNzIgOC42MDcgMTAuNTMzIDIxLjY3NSAxOS40NSAzOS4yMDQgMjYuNzUxIDYuODg2IDIuODE2IDEzLjMwMyA1LjU3OSAxOS4yNSA4LjI5MXMxMS4wODYgNS41MjggMTUuNDE1IDguNDQ4YzQuMzMgMi45MiA3Ljc0NyA2LjEwMSAxMC4yNTIgOS41NDMgMi41MDQgMy40NDEgMy43NTYgNy4zNTIgMy43NTYgMTEuNzMzIDAgMy4yMzMtLjc4MyA2LjIzMS0yLjM0OCA4Ljk5NXMtMy45MzkgNS4xNjItNy4xMjEgNy4xOTYtNy4xNDcgMy42MjQtMTEuODk0IDQuNzcxYy00Ljc0OCAxLjE0OC0xMC4zMDMgMS43MjEtMTYuNjY4IDEuNzIxLTEwLjg1MSAwLTIxLjU5Ny0xLjkwMy0zMi4yNC01LjcxLTEwLjY0Mi0zLjgwNi0yMC41MDItOS41MTYtMjkuNTc5LTE3LjEzem0tODQuMTU5LTEyMy4zNDJoNjQuMjJ2LTQxLjA4MmgtMTc5djQxLjA4Mmg2My45MDZ2MTgyLjkxOGg1MC44NzR6IiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=`}csIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnCiAgIHdpZHRoPSIyMDQuOCIKICAgaGVpZ2h0PSIyMDQuOCIKICAgdmlld0JveD0iMCAwIDU0LjE4NjY2NiA1NC4xODY2NjciCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczEyIj4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImEiCiAgICAgICB4MT0iNDYuNzczIgogICAgICAgeDI9IjY5LjkwNyIKICAgICAgIHkxPSI4Ni40NjIiCiAgICAgICB5Mj0iMTI2LjczMiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzMy45ODMgLTUxOC45NzQpIHNjYWxlKDguNzg5OTYpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjOTI3QkU1IgogICAgICAgICBpZD0ic3RvcDEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3RvcC1jb2xvcj0iIzUxMkJENCIKICAgICAgICAgaWQ9InN0b3AyIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxmaWx0ZXIKICAgICAgIGlkPSJiIgogICAgICAgd2lkdGg9IjQyLjg0NSIKICAgICAgIGhlaWdodD0iMzkuMTM2IgogICAgICAgeD0iNDQuNjI5IgogICAgICAgeT0iOTEuODkiCiAgICAgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiCiAgICAgICBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8ZmVGbG9vZAogICAgICAgICBmbG9vZC1vcGFjaXR5PSIwIgogICAgICAgICByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIKICAgICAgICAgaWQ9ImZlRmxvb2QyIiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICBpbj0iU291cmNlQWxwaGEiCiAgICAgICAgIHJlc3VsdD0iaGFyZEFscGhhIgogICAgICAgICB0eXBlPSJtYXRyaXgiCiAgICAgICAgIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4MiIgLz4KICAgICAgPGZlT2Zmc2V0CiAgICAgICAgIGlkPSJmZU9mZnNldDIiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXgzIiAvPgogICAgICA8ZmVCbGVuZAogICAgICAgICBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIKICAgICAgICAgbW9kZT0ibm9ybWFsIgogICAgICAgICByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18yMDM3XzI4MDAiCiAgICAgICAgIGlkPSJmZUJsZW5kMyIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgaW49IlNvdXJjZUFscGhhIgogICAgICAgICByZXN1bHQ9ImhhcmRBbHBoYSIKICAgICAgICAgdHlwZT0ibWF0cml4IgogICAgICAgICB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIgogICAgICAgICBpZD0iZmVDb2xvck1hdHJpeDQiIC8+CiAgICAgIDxmZU9mZnNldAogICAgICAgICBkeT0iMSIKICAgICAgICAgaWQ9ImZlT2Zmc2V0NCIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMi40OTkiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXg1IiAvPgogICAgICA8ZmVCbGVuZAogICAgICAgICBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd18yMDM3XzI4MDAiCiAgICAgICAgIG1vZGU9Im5vcm1hbCIKICAgICAgICAgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBpZD0iZmVCbGVuZDUiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIGluPSJTb3VyY2VBbHBoYSIKICAgICAgICAgcmVzdWx0PSJoYXJkQWxwaGEiCiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXg2IiAvPgogICAgICA8ZmVPZmZzZXQKICAgICAgICAgZHk9IjQiCiAgICAgICAgIGlkPSJmZU9mZnNldDYiIC8+CiAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjYiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjA5IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4NyIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBtb2RlPSJub3JtYWwiCiAgICAgICAgIHJlc3VsdD0iZWZmZWN0M19kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgaWQ9ImZlQmxlbmQ3IiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICBpbj0iU291cmNlQWxwaGEiCiAgICAgICAgIHJlc3VsdD0iaGFyZEFscGhhIgogICAgICAgICB0eXBlPSJtYXRyaXgiCiAgICAgICAgIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4OCIgLz4KICAgICAgPGZlT2Zmc2V0CiAgICAgICAgIGR5PSI5IgogICAgICAgICBpZD0iZmVPZmZzZXQ4IiAvPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIyLjUiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjgiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjA1IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4OSIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW4yPSJlZmZlY3QzX2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBtb2RlPSJub3JtYWwiCiAgICAgICAgIHJlc3VsdD0iZWZmZWN0NF9kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgaWQ9ImZlQmxlbmQ5IiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICBpbj0iU291cmNlQWxwaGEiCiAgICAgICAgIHJlc3VsdD0iaGFyZEFscGhhIgogICAgICAgICB0eXBlPSJtYXRyaXgiCiAgICAgICAgIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4MTAiIC8+CiAgICAgIDxmZU9mZnNldAogICAgICAgICBkeT0iMTUiCiAgICAgICAgIGlkPSJmZU9mZnNldDEwIiAvPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIzIgogICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXIxMCIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgdHlwZT0ibWF0cml4IgogICAgICAgICB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMDEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXgxMSIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW4yPSJlZmZlY3Q0X2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBtb2RlPSJub3JtYWwiCiAgICAgICAgIHJlc3VsdD0iZWZmZWN0NV9kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgaWQ9ImZlQmxlbmQxMSIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW49IlNvdXJjZUdyYXBoaWMiCiAgICAgICAgIGluMj0iZWZmZWN0NV9kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgbW9kZT0ibm9ybWFsIgogICAgICAgICByZXN1bHQ9InNoYXBlIgogICAgICAgICBpZD0iZmVCbGVuZDEyIiAvPgogICAgPC9maWx0ZXI+CiAgPC9kZWZzPgogIDxwYXRoCiAgICAgZD0iTTEzNS43MzEgMjg1Ljg1djE3My45M2MwIDIxLjUxNyAxMS40NzggNDEuNDE4IDMwLjEyNSA1Mi4xNjhsMTUwLjYyNCA4Ni45NzZhNjAuMjIzIDYwLjIyMyAwIDAgMCA2MC4yNSAwbDE1MC42MjMtODYuOTc2YTYwLjIzNyA2MC4yMzcgMCAwIDAgMzAuMTI0LTUyLjE2OVYyODUuODUxYzAtMjEuNTI1LTExLjQ3Ny00MS40MjMtMzAuMTI0LTUyLjE3N0wzNzYuNzI5IDE0Ni43MmE2MC4yMSA2MC4yMSAwIDAgMC02MC4yNDkgMGwtMTUwLjYyNCA4Ni45NTRhNjAuMjQ1IDYwLjI0NSAwIDAgMC0zMC4xMjUgNTIuMTc3eiIKICAgICBmaWxsPSJ1cmwoI2EpIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KC4xIDAgMCAuMSAtNy41NjcgLTEwLjE4OSkiCiAgICAgaWQ9InBhdGgxMiIgLz4KICA8cGF0aAogICAgIGQ9Ik01NC4wNTYgOTguMDN2Ni44NTVhMS43MTEgMS43MTEgMCAwIDAgMS43MTQgMS43MTQgMS43MTMgMS43MTMgMCAwIDAgMS43MTQtMS43MTQgMS43MTMgMS43MTMgMCAxIDEgMy40MjcgMCA1LjE0IDUuMTQgMCAxIDEtMTAuMjgyIDB2LTYuODU0YTUuMTQgNS4xNCAwIDEgMSAxMC4yODIgMCAxLjcxMiAxLjcxMiAwIDEgMS0zLjQyNyAwIDEuNzEyIDEuNzEyIDAgMSAwLTMuNDI3IDB6bTI3LjQxOCA2Ljg1NWExLjcxMiAxLjcxMiAwIDAgMS0xLjcxNCAxLjcxNGgtMS43MTR2MS43MTNjMCAuNDU1LS4xOC44OTEtLjUwMiAxLjIxMmExLjcxIDEuNzEgMCAwIDEtMi40MjMgMCAxLjcxOSAxLjcxOSAwIDAgMS0uNTAyLTEuMjEydi0xLjcxM2gtMy40Mjd2MS43MTNhMS43MSAxLjcxIDAgMCAxLTEuNzE0IDEuNzE0IDEuNzEgMS43MSAwIDAgMS0xLjcxMy0xLjcxNHYtMS43MTNINjYuMDVhMS43MTMgMS43MTMgMCAxIDEgMC0zLjQyN2gxLjcxNHYtMy40MjdINjYuMDVhMS43MTIgMS43MTIgMCAxIDEgMC0zLjQyN2gxLjcxNHYtMS43MTRhMS43MTMgMS43MTMgMCAxIDEgMy40MjcgMHYxLjcxM2gzLjQyN3YtMS43MTNhMS43MTIgMS43MTIgMCAxIDEgMy40MjcgMHYxLjcxM2gxLjcxNGMuNDU0IDAgLjg5LjE4IDEuMjExLjUwMmExLjcxIDEuNzEgMCAwIDEgMCAyLjQyMyAxLjcxMiAxLjcxMiAwIDAgMS0xLjIxMS41MDNoLTEuNzE0djMuNDI3aDEuNzE0YTEuNzE4IDEuNzE4IDAgMCAxIDEuNzE0IDEuNzEzem0tNi44NTUtNS4xNGgtMy40Mjd2My40MjdoMy40Mjd6IgogICAgIGZpbGw9IiNmZmYiCiAgICAgZmlsdGVyPSJ1cmwoI2IpIgogICAgIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLjg3OSAwIDAgLjg3OSAtMzAuOTY1IC02Mi4wODYpIgogICAgIGlkPSJwYXRoMTMiIC8+Cjwvc3ZnPgo=`}cIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHZpZXdCb3g9IjAgMCAzOC4wMDAwODkgNDIuMDAwMDMxIgogICB3aWR0aD0iMzgwLjAwMDg5IgogICBoZWlnaHQ9IjQyMC4wMDAzMSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMTAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Imljb25zOC1jLXByb2dyYW1taW5nLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wLjEgKDNiYzJlODEzZjUsIDIwMjAtMDktMDcpIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGExNiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczE0IiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDU2IgogICAgIGlkPSJuYW1lZHZpZXcxMiIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6em9vbT0iMS40ODk1ODMzIgogICAgIGlua3NjYXBlOmN4PSIxOTAiCiAgICAgaW5rc2NhcGU6Y3k9IjIxMC4wMDI4MiIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzEwIiAvPgogIDxwYXRoCiAgICAgZmlsbD0iIzI4MzU5MyIKICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgZD0ibSAxNy45MDMsMC4yODYyODE2NiBjIDAuNjc5LC0wLjM4MSAxLjUxNSwtMC4zODEgMi4xOTMsMCBDIDIzLjQ1MSwyLjE2OTI4MTcgMzMuNTQ3LDcuODM3MjgxNyAzNi45MDMsOS43MjAyODE3IDM3LjU4MiwxMC4xMDAyODIgMzgsMTAuODA0MjgyIDM4LDExLjU2NjI4MiBjIDAsMy43NjYgMCwxNS4xMDEgMCwxOC44NjcgMCwwLjc2MiAtMC40MTgsMS40NjYgLTEuMDk3LDEuODQ3IC0zLjM1NSwxLjg4MyAtMTMuNDUxLDcuNTUxIC0xNi44MDcsOS40MzQgLTAuNjc5LDAuMzgxIC0xLjUxNSwwLjM4MSAtMi4xOTMsMCAtMy4zNTUsLTEuODgzIC0xMy40NTEsLTcuNTUxIC0xNi44MDcsLTkuNDM0IC0wLjY3OCwtMC4zODEgLTEuMDk2LC0xLjA4NCAtMS4wOTYsLTEuODQ2IDAsLTMuNzY2IDAsLTE1LjEwMSAwLC0xOC44NjcgMCwtMC43NjIgMC40MTgsLTEuNDY2IDEuMDk3LC0xLjg0NzAwMDMgMy4zNTQsLTEuODgzIDEzLjQ1MiwtNy41NTEgMTYuODA2LC05LjQzNDAwMDA0IHoiCiAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgIGlkPSJwYXRoMiIKICAgICBzdHlsZT0iZmlsbDojMDA0NDgyO2ZpbGwtb3BhY2l0eToxIiAvPgogIDxwYXRoCiAgICAgZmlsbD0iIzVjNmJjMCIKICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgZD0ibSAwLjMwNCwzMS40MDQyODIgYyAtMC4yNjYsLTAuMzU2IC0wLjMwNCwtMC42OTQgLTAuMzA0LC0xLjE0OSAwLC0zLjc0NCAwLC0xNS4wMTQgMCwtMTguNzU5IDAsLTAuNzU4IDAuNDE3LC0xLjQ1OCAxLjA5NCwtMS44MzYwMDAzIDMuMzQzLC0xLjg3MiAxMy40MDUsLTcuNTA3IDE2Ljc0OCwtOS4zODAwMDAwNCAwLjY3NywtMC4zNzkgMS41OTQsLTAuMzcxIDIuMjcxLDAuMDA4IDMuMzQzLDEuODcyMDAwMDQgMTMuMzcxLDcuNDU5MDAwMDQgMTYuNzE0LDkuMzMxMDAwMDQgMC4yNywwLjE1MiAwLjQ3NiwwLjMzNSAwLjY2LDAuNTc2MDAwMyB6IgogICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICBpZD0icGF0aDQiCiAgICAgc3R5bGU9ImZpbGw6IzY1OWFkMjtmaWxsLW9wYWNpdHk6MSIgLz4KICA8cGF0aAogICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgIGQ9Im0gMTksNy4wMDAyODE3IGMgNy43MjcsMCAxNCw2LjI3MzAwMDMgMTQsMTQuMDAwMDAwMyAwLDcuNzI3IC02LjI3MywxNCAtMTQsMTQgLTcuNzI3LDAgLTE0LC02LjI3MyAtMTQsLTE0IDAsLTcuNzI3IDYuMjczLC0xNC4wMDAwMDAzIDE0LC0xNC4wMDAwMDAzIHogbSAwLDcuMDAwMDAwMyBjIDMuODYzLDAgNywzLjEzNiA3LDcgMCwzLjg2MyAtMy4xMzcsNyAtNyw3IC0zLjg2MywwIC03LC0zLjEzNyAtNywtNyAwLC0zLjg2NCAzLjEzNiwtNyA3LC03IHoiCiAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgIGlkPSJwYXRoNiIgLz4KICA8cGF0aAogICAgIGZpbGw9IiMzOTQ5YWIiCiAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgIGQ9Im0gMzcuNDg1LDEwLjIwNTI4MiBjIDAuNTE2LDAuNDgzIDAuNTA2LDEuMjExIDAuNTA2LDEuNzg0IDAsMy43OTUgLTAuMDMyLDE0LjU4OSAwLjAwOSwxOC4zODQgMC4wMDQsMC4zOTYgLTAuMTI3LDAuODEzIC0wLjMyMywxLjEyNyBsIC0xOS4wODQsLTEwLjUgeiIKICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgaWQ9InBhdGg4IgogICAgIHN0eWxlPSJmaWxsOiMwMDU5OWM7ZmlsbC1vcGFjaXR5OjEiIC8+Cjwvc3ZnPgo=`}cppIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjQsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iMzA2cHgiIGhlaWdodD0iMzQ0LjM1cHgiIHZpZXdCb3g9IjAgMCAzMDYgMzQ0LjM1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAzMDYgMzQ0LjM1IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggZmlsbD0iIzAwNTk5QyIgZD0iTTMwMi4xMDcsMjU4LjI2MmMyLjQwMS00LjE1OSwzLjg5My04Ljg0NSwzLjg5My0xMy4wNTNWOTkuMTRjMC00LjIwOC0xLjQ5LTguODkzLTMuODkyLTEzLjA1MkwxNTMsMTcyLjE3NQoJTDMwMi4xMDcsMjU4LjI2MnoiLz4KPHBhdGggZmlsbD0iIzAwNDQ4MiIgZD0iTTE2Ni4yNSwzNDEuMTkzbDEyNi41LTczLjAzNGMzLjY0NC0yLjEwNCw2Ljk1Ni01LjczNyw5LjM1Ny05Ljg5N0wxNTMsMTcyLjE3NUwzLjg5MywyNTguMjYzCgljMi40MDEsNC4xNTksNS43MTQsNy43OTMsOS4zNTcsOS44OTZsMTI2LjUsNzMuMDM0QzE0Ny4wMzcsMzQ1LjQwMSwxNTguOTYzLDM0NS40MDEsMTY2LjI1LDM0MS4xOTN6Ii8+CjxwYXRoIGZpbGw9IiM2NTlBRDIiIGQ9Ik0zMDIuMTA4LDg2LjA4N2MtMi40MDItNC4xNi01LjcxNS03Ljc5My05LjM1OC05Ljg5N0wxNjYuMjUsMy4xNTZjLTcuMjg3LTQuMjA4LTE5LjIxMy00LjIwOC0yNi41LDAKCUwxMy4yNSw3Ni4xOUM1Ljk2Miw4MC4zOTcsMCw5MC43MjUsMCw5OS4xNHYxNDYuMDY5YzAsNC4yMDgsMS40OTEsOC44OTQsMy44OTMsMTMuMDUzTDE1MywxNzIuMTc1TDMwMi4xMDgsODYuMDg3eiIvPgo8Zz4KCTxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0xNTMsMjc0LjE3NWMtNTYuMjQzLDAtMTAyLTQ1Ljc1Ny0xMDItMTAyczQ1Ljc1Ny0xMDIsMTAyLTEwMmMzNi4yOTIsMCw3MC4xMzksMTkuNTMsODguMzMxLDUwLjk2OAoJCWwtNDQuMTQzLDI1LjU0NGMtOS4xMDUtMTUuNzM2LTI2LjAzOC0yNS41MTItNDQuMTg4LTI1LjUxMmMtMjguMTIyLDAtNTEsMjIuODc4LTUxLDUxYzAsMjguMTIxLDIyLjg3OCw1MSw1MSw1MQoJCWMxOC4xNTIsMCwzNS4wODUtOS43NzYsNDQuMTkxLTI1LjUxNWw0NC4xNDMsMjUuNTQzQzIyMy4xNDIsMjU0LjY0NCwxODkuMjk0LDI3NC4xNzUsMTUzLDI3NC4xNzV6Ii8+CjwvZz4KPGc+Cgk8cG9seWdvbiBmaWxsPSIjRkZGRkZGIiBwb2ludHM9IjI1NSwxNjYuNTA4IDI0My42NjYsMTY2LjUwOCAyNDMuNjY2LDE1NS4xNzUgMjMyLjMzNCwxNTUuMTc1IDIzMi4zMzQsMTY2LjUwOCAyMjEsMTY2LjUwOCAKCQkyMjEsMTc3Ljg0MSAyMzIuMzM0LDE3Ny44NDEgMjMyLjMzNCwxODkuMTc1IDI0My42NjYsMTg5LjE3NSAyNDMuNjY2LDE3Ny44NDEgMjU1LDE3Ny44NDEgCSIvPgo8L2c+CjxnPgoJPHBvbHlnb24gZmlsbD0iI0ZGRkZGRiIgcG9pbnRzPSIyOTcuNSwxNjYuNTA4IDI4Ni4xNjYsMTY2LjUwOCAyODYuMTY2LDE1NS4xNzUgMjc0LjgzNCwxNTUuMTc1IDI3NC44MzQsMTY2LjUwOCAyNjMuNSwxNjYuNTA4IAoJCTI2My41LDE3Ny44NDEgMjc0LjgzNCwxNzcuODQxIDI3NC44MzQsMTg5LjE3NSAyODYuMTY2LDE4OS4xNzUgMjg2LjE2NiwxNzcuODQxIDI5Ny41LDE3Ny44NDEgCSIvPgo8L2c+Cjwvc3ZnPgo=`}zigLogo(){return`CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTUzIDE0MCI+CjxnIGZpbGw9IiNmN2E0MWQiPgoJPGc+CgkJPHBvbHlnb24gcG9pbnRzPSI0NiwyMiAyOCw0NCAxOSwzMCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iNDYsMjIgMzMsMzMgMjgsNDQgMjIsNDQgMjIsOTUgMzEsOTUgMjAsMTAwIDEyLDExNyAwLDExNyAwLDIyIiBzaGFwZS1yZW5kZXJpbmc9ImNyaXNwRWRnZXMiLz4KCQk8cG9seWdvbiBwb2ludHM9IjMxLDk1IDEyLDExNyA0LDEwNiIvPgoJPC9nPgoJPGc+CgkJPHBvbHlnb24gcG9pbnRzPSI1NiwyMiA2MiwzNiAzNyw0NCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iNTYsMjIgMTExLDIyIDExMSw0NCAzNyw0NCA1NiwzMiIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIi8+CgkJPHBvbHlnb24gcG9pbnRzPSIxMTYsOTUgOTcsMTE3IDkwLDEwNCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iMTE2LDk1IDEwMCwxMDQgOTcsMTE3IDQyLDExNyA0Miw5NSIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIi8+CgkJPHBvbHlnb24gcG9pbnRzPSIxNTAsMCA1MiwxMTcgMywxNDAgMTAxLDIyIi8+Cgk8L2c+Cgk8Zz4KCQk8cG9seWdvbiBwb2ludHM9IjE0MSwyMiAxNDAsNDAgMTIyLDQ1Ii8+CgkJPHBvbHlnb24gcG9pbnRzPSIxNTMsMjIgMTUzLDExNyAxMDYsMTE3IDEyMCwxMDUgMTI1LDk1IDEzMSw5NSAxMzEsNDUgMTIyLDQ1IDEzMiwzNiAxNDEsMjIiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgoJCTxwb2x5Z29uIHBvaW50cz0iMTI1LDk1IDEzMCwxMTAgMTA2LDExNyIvPgoJPC9nPgo8L2c+Cjwvc3ZnPgo=`}render(){let e=is.getIconForType(this.getNodeTypeFromIcon(this.icon));switch(this.icon){case W.OPENAPI:return C``;case W.GO:return C``;case W.TS:return C``;case W.CS:return C``;case W.C:return C``;case W.CPP:return C``;case W.ZIG:return C``}return C` `}};cs.styles=[ts,ns,rs,Jo],is([k()],cs.prototype,`icon`,void 0),is([k({type:os})],cs.prototype,`size`,void 0),is([k({type:ss})],cs.prototype,`color`,void 0),is([k()],cs.prototype,`tooltip`,void 0),cs=as=is([O(`pb33f-model-icon`)],cs);var ls=x` + style="font-size: ${this.getSize()}; color: ${this.getIconColor()}">`}};ss.styles=[es,ts,ns,qo],rs([A()],ss.prototype,`icon`,void 0),rs([A({type:as})],ss.prototype,`size`,void 0),rs([A({type:os})],ss.prototype,`color`,void 0),rs([A()],ss.prototype,`tooltip`,void 0),ss=is=rs([k(`pb33f-model-icon`)],ss);var cs=S` sl-alert::part(message) { padding-bottom: var(--global-padding); color: var(--font-color); @@ -3076,7 +3076,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value box-shadow: 0 0 8px var(--warn-200); } } -`,us=x` +`,ls=S` strong { display: block; @@ -3179,21 +3179,21 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value padding-bottom: var(--global-padding); } -`,ds=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},fs;(function(e){e.Context=`context`,e.Info=`info`,e.Success=`success`,e.Question=`question`,e.Warning=`warning`,e.Error=`error`,e.Danger=`danger`})(fs||={});var ps=class extends w{constructor(){super(),this.type=fs.Context,this.closeable=!1}hide(){this.alert.hide()}show(){this.alert.show()}getIcon(){switch(this.type){case fs.Context:return`braces-asterisk`;case fs.Info:return`info-square`;case fs.Warning:return`exclamation-triangle`;case fs.Error:return`exclamation-square`;case fs.Danger:return`exclamation-square`;case fs.Success:return`check-square`;case fs.Question:return`question-square`}}render(){this.type||=fs.Context,this.type===fs.Danger&&(this.type=fs.Error);let e=S``;this.headerText?.length>0&&(e=S`${this.headerText}`);let t=S` +`,us=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ds;(function(e){e.Context=`context`,e.Info=`info`,e.Success=`success`,e.Question=`question`,e.Warning=`warning`,e.Error=`error`,e.Danger=`danger`})(ds||={});var fs=class extends T{constructor(){super(),this.type=ds.Context,this.closeable=!1}hide(){this.alert.hide()}show(){this.alert.show()}getIcon(){switch(this.type){case ds.Context:return`braces-asterisk`;case ds.Info:return`info-square`;case ds.Warning:return`exclamation-triangle`;case ds.Error:return`exclamation-square`;case ds.Danger:return`exclamation-square`;case ds.Success:return`check-square`;case ds.Question:return`question-square`}}render(){this.type||=ds.Context,this.type===ds.Danger&&(this.type=ds.Error);let e=C``;this.headerText?.length>0&&(e=C`${this.headerText}`);let t=C` ${e} - `;return this.closeable&&(t=S` + `;return this.closeable&&(t=C` ${e} - `),S` + `),C`
${t}
- `}};ps.styles=[us,ls],ds([k()],ps.prototype,`type`,void 0),ds([k()],ps.prototype,`headerText`,void 0),ds([k({type:Boolean})],ps.prototype,`closeable`,void 0),ds([j(`sl-alert`)],ps.prototype,`alert`,void 0),ps=ds([O(`pb33f-attention-box`)],ps);var ms=x` + `}};fs.styles=[ls,cs],us([A()],fs.prototype,`type`,void 0),us([A()],fs.prototype,`headerText`,void 0),us([A({type:Boolean})],fs.prototype,`closeable`,void 0),us([M(`sl-alert`)],fs.prototype,`alert`,void 0),fs=us([k(`pb33f-attention-box`)],fs);var ps=S` .paginator-navigation { display: flex; justify-content: space-between; @@ -3230,7 +3230,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value display: none; } -`,hs=`paginatorFirstPage`,gs=`paginatorLastPage`,_s=`paginatorNextPage`,vs=`paginatorPreviousPage`,ys=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},bs=class extends w{get hide(){return this.totalItems<=this.itemsPerPage}constructor(){super(),this.currentPage=1,this.totalPages=0,this.totalItems=0,this.itemsPerPage=20,this.label=`Problems`}getRangeStart(){let e=this.currentPage*this.itemsPerPage-this.itemsPerPage;return e==0?0:e>0?e:0}getPagesRemaining(){let e=this.totalItems-this.currentPage*this.itemsPerPage;return e>0?e:0}getRangeEnd(){let e=this.getRangeStart();e==1&&(e=0);let t=e+this.itemsPerPage;return t>this.totalItems?this.totalItems:t>=0?t:0}nextPage(){this.currentPage1&&this.dispatchEvent(new CustomEvent(vs,{composed:!0}))}lastPage(){this.currentPage1&&this.dispatchEvent(new CustomEvent(hs,{composed:!0}))}togglePrev(e){this.homeButton&&(this.prevButton.disabled=e,this.homeButton.disabled=e)}toggleNext(e){this.endButton&&(this.nextButton.disabled=e,this.endButton.disabled=e)}updated(){this.togglePrev(this.currentPage===1),this.toggleNext(this.currentPage===this.totalPages)}render(){return this.totalItems==0?S``:S` +`,ms=`paginatorFirstPage`,hs=`paginatorLastPage`,gs=`paginatorNextPage`,_s=`paginatorPreviousPage`,vs=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},ys=class extends T{get hide(){return this.totalItems<=this.itemsPerPage}constructor(){super(),this.currentPage=1,this.totalPages=0,this.totalItems=0,this.itemsPerPage=20,this.label=`Problems`}getRangeStart(){let e=this.currentPage*this.itemsPerPage-this.itemsPerPage;return e==0?0:e>0?e:0}getPagesRemaining(){let e=this.totalItems-this.currentPage*this.itemsPerPage;return e>0?e:0}getRangeEnd(){let e=this.getRangeStart();e==1&&(e=0);let t=e+this.itemsPerPage;return t>this.totalItems?this.totalItems:t>=0?t:0}nextPage(){this.currentPage1&&this.dispatchEvent(new CustomEvent(_s,{composed:!0}))}lastPage(){this.currentPage1&&this.dispatchEvent(new CustomEvent(ms,{composed:!0}))}togglePrev(e){this.homeButton&&(this.prevButton.disabled=e,this.homeButton.disabled=e)}toggleNext(e){this.endButton&&(this.nextButton.disabled=e,this.endButton.disabled=e)}updated(){this.togglePrev(this.currentPage===1),this.toggleNext(this.currentPage===this.totalPages)}render(){return this.totalItems==0?C``:C`
@@ -3253,7 +3253,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value
- `}};bs.styles=[ms],ys([A()],bs.prototype,`currentPage`,void 0),ys([A()],bs.prototype,`totalPages`,void 0),ys([A()],bs.prototype,`totalItems`,void 0),ys([A()],bs.prototype,`itemsPerPage`,void 0),ys([j(`.home`)],bs.prototype,`homeButton`,void 0),ys([j(`.previous`)],bs.prototype,`prevButton`,void 0),ys([j(`.next`)],bs.prototype,`nextButton`,void 0),ys([j(`.end`)],bs.prototype,`endButton`,void 0),ys([k()],bs.prototype,`label`,void 0),bs=ys([O(`pb33f-paginator`)],bs);var xs=x` + `}};ys.styles=[ps],vs([j()],ys.prototype,`currentPage`,void 0),vs([j()],ys.prototype,`totalPages`,void 0),vs([j()],ys.prototype,`totalItems`,void 0),vs([j()],ys.prototype,`itemsPerPage`,void 0),vs([M(`.home`)],ys.prototype,`homeButton`,void 0),vs([M(`.previous`)],ys.prototype,`prevButton`,void 0),vs([M(`.next`)],ys.prototype,`nextButton`,void 0),vs([M(`.end`)],ys.prototype,`endButton`,void 0),vs([A()],ys.prototype,`label`,void 0),ys=vs([k(`pb33f-paginator`)],ys);var bs=S` .paginator-values { overflow-y: auto; @@ -3301,29 +3301,29 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value } -`,Ss={size:15,family:`BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`normal`,style:`normal`},Cs={size:10,family:`BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`normal`,style:`normal`},ws={size:12,family:`BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`normal`,style:`normal`},Ts={size:15,family:`BerkeleyMono-Bold, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`bold`,style:`normal`},Es={size:25,family:`BerkeleyMono-Bold, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,weight:`bold`,style:`normal`,lineHeight:3},Ds=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Os=class extends w{constructor(){super(),this.currentTheme=`dark`,this._themeHandler=()=>{this.readColors(),this.currentTheme=ks()}}readColors(){let e=getComputedStyle(this);this.primary=e.getPropertyValue(`--primary-color`).trim(),this.secondary=e.getPropertyValue(`--secondary-color`).trim(),this.tertiary=e.getPropertyValue(`--tertiary-color`).trim(),this.background=e.getPropertyValue(`--background-color`).trim(),this.error=e.getPropertyValue(`--error-color`).trim(),this.ok=e.getPropertyValue(`--terminal-text`).trim(),this.warn=e.getPropertyValue(`--warn-color`).trim(),this.color1=e.getPropertyValue(`--chart-color1`).trim(),this.color2=e.getPropertyValue(`--chart-color2`).trim(),this.color3=e.getPropertyValue(`--chart-color3`).trim(),this.color4=e.getPropertyValue(`--chart-color4`).trim(),this.color5=e.getPropertyValue(`--chart-color5`).trim()}firstUpdated(){this.readColors(),this.currentTheme=ks(),this.font=Ss,this.smallFont=Cs,this.mediumFont=ws,this.titleFont=Es,this.fontBold=Ts,window.addEventListener(Yo,this._themeHandler)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(Yo,this._themeHandler)}};Ds([A()],Os.prototype,`currentTheme`,void 0);function ks(){let e=document.documentElement.getAttribute(`theme`);return e===`light`?`light`:e===`tektronix`?`tektronix`:`dark`}var As=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},js=class extends w{constructor(){super(),this.animationFrameId=null,this._currentTheme=`dark`,this._themeHandler=()=>{this._currentTheme=ks()},this.sparkArray=[],this.gravity=.005,this.spawnRate=50,this.isError=!1,this.animating=!1}firstUpdated(){this._currentTheme=ks(),window.addEventListener(Yo,this._themeHandler);let e=this.renderRoot.querySelector(`canvas`);if(e){this.canvas=e;let t=this.canvas?.getContext(`2d`);t&&(this.ctx=t)}}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(Yo,this._themeHandler)}startAnimation(){this.animating||(this.animationTimer=setInterval(()=>this.spawnSpark(),1e3/this.spawnRate),this.animating=!0,this.animateSparks())}stopAnimation(){this.animating=!1,clearInterval(this.animationTimer),this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.sparkArray=[],this.ctx&&this.canvas&&this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)}getRandomBetween(e,t){return Math.random()*(t-e)+e}spawnSpark(){if(this.animating){let e;e=this._currentTheme===`light`?this.isError?Math.random()>.5?`rgb(60, 60, 60)`:`rgb(120, 120, 120)`:Math.random()>.5?`rgb(80, 80, 80)`:`rgb(160, 160, 160)`:this._currentTheme===`tektronix`?this.isError?Math.random()>.5?`rgb(102, 255, 102)`:`rgb(34, 204, 34)`:Math.random()>.5?`rgb(51, 255, 51)`:`rgb(26, 153, 26)`:this.isError?Math.random()>.5?`rgb(255, 60, 116)`:`rgb(157, 26, 65)`:Math.random()>.5?`rgb(248, 58, 255)`:`rgb(98, 196, 255)`,this.sparkArray.push({x:Math.random()*this.canvas.width,y:-2,size:1,color:e,velocityY:this.getRandomBetween(.05,.3),lifetime:150,initialLifetime:150,opacity:1})}}animateSparks(){if(this.animating){this.ctx?.clearRect(0,0,this.canvas?.width,this.canvas?.height),this.sparkArray=this.sparkArray.filter(e=>e.lifetime>0);for(let e of this.sparkArray)this.drawSpark(e),e.y+=e.velocityY,e.velocityY+=this.gravity,e.lifetime--,e.opacity=e.lifetime/e.initialLifetime;this.animationFrameId=requestAnimationFrame(()=>this.animateSparks())}}drawSpark(e){this.ctx.globalAlpha=e.opacity,this.ctx.fillStyle=e.color,/Safari/.test(navigator.userAgent)||(this.ctx.shadowColor=e.color,this.ctx.shadowBlur=8),this.ctx.fillRect(e.x,e.y,e.size,e.size),this.ctx.globalAlpha=1}render(){return S` - `}};js.styles=x` +`,xs={size:15,family:`BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`normal`,style:`normal`},Ss={size:10,family:`BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`normal`,style:`normal`},Cs={size:12,family:`BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`normal`,style:`normal`},ws={size:15,family:`BerkeleyMono-Bold, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`bold`,style:`normal`},Ts={size:25,family:`BerkeleyMono-Bold, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,weight:`bold`,style:`normal`,lineHeight:3},Es=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ds=class extends T{constructor(){super(),this.currentTheme=`dark`,this._themeHandler=()=>{this.readColors(),this.currentTheme=Os()}}readColors(){let e=getComputedStyle(this);this.primary=e.getPropertyValue(`--primary-color`).trim(),this.secondary=e.getPropertyValue(`--secondary-color`).trim(),this.tertiary=e.getPropertyValue(`--tertiary-color`).trim(),this.background=e.getPropertyValue(`--background-color`).trim(),this.error=e.getPropertyValue(`--error-color`).trim(),this.ok=e.getPropertyValue(`--terminal-text`).trim(),this.warn=e.getPropertyValue(`--warn-color`).trim(),this.color1=e.getPropertyValue(`--chart-color1`).trim(),this.color2=e.getPropertyValue(`--chart-color2`).trim(),this.color3=e.getPropertyValue(`--chart-color3`).trim(),this.color4=e.getPropertyValue(`--chart-color4`).trim(),this.color5=e.getPropertyValue(`--chart-color5`).trim()}firstUpdated(){this.readColors(),this.currentTheme=Os(),this.font=xs,this.smallFont=Ss,this.mediumFont=Cs,this.titleFont=Ts,this.fontBold=ws,window.addEventListener(Jo,this._themeHandler)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(Jo,this._themeHandler)}};Es([j()],Ds.prototype,`currentTheme`,void 0);function Os(){let e=document.documentElement.getAttribute(`theme`);return e===`light`?`light`:e===`tektronix`?`tektronix`:`dark`}var ks=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},As=class extends T{constructor(){super(),this.animationFrameId=null,this._currentTheme=`dark`,this._themeHandler=()=>{this._currentTheme=Os()},this.sparkArray=[],this.gravity=.005,this.spawnRate=50,this.isError=!1,this.animating=!1}firstUpdated(){this._currentTheme=Os(),window.addEventListener(Jo,this._themeHandler);let e=this.renderRoot.querySelector(`canvas`);if(e){this.canvas=e;let t=this.canvas?.getContext(`2d`);t&&(this.ctx=t)}}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(Jo,this._themeHandler)}startAnimation(){this.animating||(this.animationTimer=setInterval(()=>this.spawnSpark(),1e3/this.spawnRate),this.animating=!0,this.animateSparks())}stopAnimation(){this.animating=!1,clearInterval(this.animationTimer),this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.sparkArray=[],this.ctx&&this.canvas&&this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)}getRandomBetween(e,t){return Math.random()*(t-e)+e}spawnSpark(){if(this.animating){let e;e=this._currentTheme===`light`?this.isError?Math.random()>.5?`rgb(60, 60, 60)`:`rgb(120, 120, 120)`:Math.random()>.5?`rgb(80, 80, 80)`:`rgb(160, 160, 160)`:this._currentTheme===`tektronix`?this.isError?Math.random()>.5?`rgb(102, 255, 102)`:`rgb(34, 204, 34)`:Math.random()>.5?`rgb(51, 255, 51)`:`rgb(26, 153, 26)`:this.isError?Math.random()>.5?`rgb(255, 60, 116)`:`rgb(157, 26, 65)`:Math.random()>.5?`rgb(248, 58, 255)`:`rgb(98, 196, 255)`,this.sparkArray.push({x:Math.random()*this.canvas.width,y:-2,size:1,color:e,velocityY:this.getRandomBetween(.05,.3),lifetime:150,initialLifetime:150,opacity:1})}}animateSparks(){if(this.animating){this.ctx?.clearRect(0,0,this.canvas?.width,this.canvas?.height),this.sparkArray=this.sparkArray.filter(e=>e.lifetime>0);for(let e of this.sparkArray)this.drawSpark(e),e.y+=e.velocityY,e.velocityY+=this.gravity,e.lifetime--,e.opacity=e.lifetime/e.initialLifetime;this.animationFrameId=requestAnimationFrame(()=>this.animateSparks())}}drawSpark(e){this.ctx.globalAlpha=e.opacity,this.ctx.fillStyle=e.color,/Safari/.test(navigator.userAgent)||(this.ctx.shadowColor=e.color,this.ctx.shadowBlur=8),this.ctx.fillRect(e.x,e.y,e.size,e.size),this.ctx.globalAlpha=1}render(){return C` + `}};As.styles=S` canvas { width: 100%; height: 100%; image-rendering: pixelated; /* Ensures pixelated appearance */ } - `,As([k({type:Boolean})],js.prototype,`isError`,void 0),js=As([O(`pb33f-pixel-sparks`)],js);function Ms(e){return e}var Ns=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ps=class extends w{constructor(){super(),this.sparks=new js,this.currentPage=1,this.totalPages=1,this.totalItems=0,this.itemsPerPage=20,this.activeIndex=0,this.invalid=!1,this.hideSparks=!1,this.paginatorNavigator=new bs,this.paginatorNavigator.currentPage=this.currentPage,this.paginatorNavigator.totalPages=this.totalPages,this.paginatorNavigator.totalItems=this.totalItems,this.paginatorNavigator.itemsPerPage=this.itemsPerPage,this.addEventListener(hs,Ms(this.firstPage.bind(this))),this.addEventListener(gs,Ms(this.lastPage.bind(this))),this.addEventListener(_s,Ms(this.nextPage.bind(this))),this.addEventListener(vs,Ms(this.previousPage.bind(this)))}nextPage(e){e.stopPropagation(),this.currentPage1&&(this.currentPage=1)}setPage(e){this.currentPage=Math.ceil(e/this.itemsPerPage),this.activeIndex=e}previousPage(e){e.stopPropagation(),this.currentPage>1&&this.currentPage--}calcTotalPages(){return Math.ceil(this.totalItems/this.itemsPerPage)}willUpdate(){this.totalItems=this.values?.length,this.totalPages=this.calcTotalPages(),this.currentPage>this.totalPages&&(this.currentPage=Math.max(1,this.totalPages)),this.sparks.isError=this.invalid,this.paginatorNavigator.currentPage=this.currentPage,this.paginatorNavigator.totalItems=this.values?.length,this.paginatorNavigator.itemsPerPage=this.itemsPerPage,this.paginatorNavigator.totalPages=this.totalPages,this.label&&(this.paginatorNavigator.label=this.label),this.renderValues=this.values?.slice(this.paginatorNavigator.getRangeStart(),this.paginatorNavigator.getRangeEnd())}startSparks(){this.sparks.startAnimation()}stopSparks(){this.sparks.stopAnimation()}render(){return this.renderValues?.length===0||!this.renderValues?this.hideSparks?S` + `,ks([A({type:Boolean})],As.prototype,`isError`,void 0),As=ks([k(`pb33f-pixel-sparks`)],As);function js(e){return e}var Ms=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ns=class extends T{constructor(){super(),this.sparks=new As,this.currentPage=1,this.totalPages=1,this.totalItems=0,this.itemsPerPage=20,this.activeIndex=0,this.invalid=!1,this.hideSparks=!1,this.paginatorNavigator=new ys,this.paginatorNavigator.currentPage=this.currentPage,this.paginatorNavigator.totalPages=this.totalPages,this.paginatorNavigator.totalItems=this.totalItems,this.paginatorNavigator.itemsPerPage=this.itemsPerPage,this.addEventListener(ms,js(this.firstPage.bind(this))),this.addEventListener(hs,js(this.lastPage.bind(this))),this.addEventListener(gs,js(this.nextPage.bind(this))),this.addEventListener(_s,js(this.previousPage.bind(this)))}nextPage(e){e.stopPropagation(),this.currentPage1&&(this.currentPage=1)}setPage(e){this.currentPage=Math.ceil(e/this.itemsPerPage),this.activeIndex=e}previousPage(e){e.stopPropagation(),this.currentPage>1&&this.currentPage--}calcTotalPages(){return Math.ceil(this.totalItems/this.itemsPerPage)}willUpdate(){this.totalItems=this.values?.length,this.totalPages=this.calcTotalPages(),this.currentPage>this.totalPages&&(this.currentPage=Math.max(1,this.totalPages)),this.sparks.isError=this.invalid,this.paginatorNavigator.currentPage=this.currentPage,this.paginatorNavigator.totalItems=this.values?.length,this.paginatorNavigator.itemsPerPage=this.itemsPerPage,this.paginatorNavigator.totalPages=this.totalPages,this.label&&(this.paginatorNavigator.label=this.label),this.renderValues=this.values?.slice(this.paginatorNavigator.getRangeStart(),this.paginatorNavigator.getRangeEnd())}startSparks(){this.sparks.startAnimation()}stopSparks(){this.sparks.stopAnimation()}render(){return this.renderValues?.length===0||!this.renderValues?this.hideSparks?C`
- `:S` + `:C`
${this.sparks}

${this.invalid?`invalid / error`:`healthy!`}
- `:S` + `:C` ${this.paginatorNavigator}
${this.renderValues}
- `}};Ps.styles=[xs],Ns([k({type:w})],Ps.prototype,`values`,void 0),Ns([k({type:Number})],Ps.prototype,`currentPage`,void 0),Ns([k({type:Number})],Ps.prototype,`totalPages`,void 0),Ns([k({type:Number})],Ps.prototype,`totalItems`,void 0),Ns([k({type:Number})],Ps.prototype,`itemsPerPage`,void 0),Ns([k()],Ps.prototype,`label`,void 0),Ns([k()],Ps.prototype,`activeIndex`,void 0),Ns([k({type:Boolean})],Ps.prototype,`invalid`,void 0),Ns([k({type:Boolean})],Ps.prototype,`hideSparks`,void 0),Ps=Ns([O(`pb33f-paginator-navigation`)],Ps);var Fs=x` + `}};Ns.styles=[bs],Ms([A({type:T})],Ns.prototype,`values`,void 0),Ms([A({type:Number})],Ns.prototype,`currentPage`,void 0),Ms([A({type:Number})],Ns.prototype,`totalPages`,void 0),Ms([A({type:Number})],Ns.prototype,`totalItems`,void 0),Ms([A({type:Number})],Ns.prototype,`itemsPerPage`,void 0),Ms([A()],Ns.prototype,`label`,void 0),Ms([A()],Ns.prototype,`activeIndex`,void 0),Ms([A({type:Boolean})],Ns.prototype,`invalid`,void 0),Ms([A({type:Boolean})],Ns.prototype,`hideSparks`,void 0),Ns=Ms([k(`pb33f-paginator-navigation`)],Ns);var Ps=S` :host { display: flex; column-gap: 10px; @@ -3376,10 +3376,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value } } -`,Is=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Ls=class extends w{getValue(){let e=(this.shadowRoot?.querySelector(`slot.command`))?.assignedNodes({flatten:!0});return e&&e[0]?e[0].data?.trim()??``:``}copyToClipboard(){navigator.clipboard.writeText(this.getValue())}render(){return S` +`,Fs=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Is=class extends T{getValue(){let e=(this.shadowRoot?.querySelector(`slot.command`))?.assignedNodes({flatten:!0});return e&&e[0]?e[0].data?.trim()??``:``}copyToClipboard(){navigator.clipboard.writeText(this.getValue())}render(){return C` copy
- `}};Ls.styles=Fs,Ls=Is([O(`terminal-example`)],Ls);var Rs=x` + `}};Is.styles=Ps,Is=Fs([k(`terminal-example`)],Is);var Ls=S` footer { padding: var(--footer-padding); width: 100vw; @@ -3404,7 +3404,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value font-weight: normal; color: var(--font-color-sub2); } -`,zs=x` +`,Rs=S` a { color: var(--primary-color); text-decoration: none; @@ -3419,11 +3419,11 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value a:active { color: var(--primary-color); } -`,Bs=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Vs=class extends w{constructor(){super(),this.url=`https://pb33f.io`,this.build=``,this.fluid=!1}render(){return S` +`,zs=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Bs=class extends T{constructor(){super(),this.url=`https://pb33f.io`,this.build=``,this.fluid=!1}render(){return C` `}};Vs.styles=[Rs,zs],Bs([k()],Vs.prototype,`build`,void 0),Bs([k()],Vs.prototype,`url`,void 0),Bs([k({type:Boolean,reflect:!0})],Vs.prototype,`fluid`,void 0),Vs=Bs([O(`pb33f-footer`)],Vs);var Hs=x` + `}};Bs.styles=[Ls,Rs],zs([A()],Bs.prototype,`build`,void 0),zs([A()],Bs.prototype,`url`,void 0),zs([A({type:Boolean,reflect:!0})],Bs.prototype,`fluid`,void 0),Bs=zs([k(`pb33f-footer`)],Bs);var Vs=S` sl-button::part(base) { border: 1px solid var(--primary-color); border-radius: 0; @@ -3458,7 +3458,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value text-transform: uppercase; letter-spacing: var(--label-spacing); } -`,Us=[Hs,x` +`,Hs=[Vs,S` :host { display: flex; flex-direction: column; @@ -3760,7 +3760,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value justify-content: flex-end; } } -`],Ws=x` +`],Us=S` :host { display: block; font-family: var(--font-stack, BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, monospace); @@ -3788,7 +3788,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value text-decoration: underline; color: var(--primary-color); } -`,Gs=/^[a-zA-Z][a-zA-Z\d+.-]*:/;function Ks(e){return!e||e.startsWith(`/`)||e.startsWith(`#`)||e.startsWith(`data:`)||Gs.test(e)}function qs(){let e=document.body?.dataset.ppBaseUrl;if(!e)return document.baseURI;try{return new URL(e,window.location.href).toString()}catch{return document.baseURI}}function Js(e){if(Ks(e))return e;try{return new URL(e,qs()).toString()}catch{return e}}function Ys(){let e=document.body?.dataset.ppOverviewHref;return Js(e||`index.html`)}function Xs(){let e=document.body?.dataset.ppCatalogHref;return e?Js(e):Ys()}function Zs(e){return Js(`operations/${e}.html`)}function Qs(e,t){return Js(`models/${e}/${t}.html`)}var $s=x` +`,Ws=/^[a-zA-Z][a-zA-Z\d+.-]*:/;function Gs(e){return!e||e.startsWith(`/`)||e.startsWith(`#`)||e.startsWith(`data:`)||Ws.test(e)}function Ks(){let e=document.body?.dataset.ppBaseUrl;if(!e)return document.baseURI;try{return new URL(e,window.location.href).toString()}catch{return document.baseURI}}function qs(e){if(Gs(e))return e;try{return new URL(e,Ks()).toString()}catch{return e}}function Js(){let e=document.body?.dataset.ppOverviewHref;return qs(e||`index.html`)}function Ys(){let e=document.body?.dataset.ppCatalogHref;return e?qs(e):Js()}function Xs(e){return qs(`operations/${e}.html`)}function Zs(e,t){return qs(`models/${e}/${t}.html`)}var Qs=S` :host { display: inline-block; } @@ -3836,7 +3836,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value max-width: var(--auto-size-available-width) !important; max-height: var(--auto-size-available-height) !important; } -`,ec=class extends M{constructor(){super(...arguments),this.localize=new I(this),this.open=!1,this.placement=`bottom-start`,this.disabled=!1,this.stayOpenOnSelect=!1,this.distance=0,this.skidding=0,this.hoist=!1,this.sync=void 0,this.handleKeyDown=e=>{this.open&&e.key===`Escape`&&(e.stopPropagation(),this.hide(),this.focusOnTrigger())},this.handleDocumentKeyDown=e=>{if(e.key===`Escape`&&this.open&&!this.closeWatcher){e.stopPropagation(),this.focusOnTrigger(),this.hide();return}if(e.key===`Tab`){if(this.open&&document.activeElement?.tagName.toLowerCase()===`sl-menu-item`){e.preventDefault(),this.hide(),this.focusOnTrigger();return}let t=(e,n)=>{if(!e)return null;let r=e.closest(n);if(r)return r;let i=e.getRootNode();return i instanceof ShadowRoot?t(i.host,n):null};setTimeout(()=>{let e=this.containingElement?.getRootNode()instanceof ShadowRoot?Ba():document.activeElement;(!this.containingElement||t(e,this.containingElement.tagName.toLowerCase())!==this.containingElement)&&this.hide()})}},this.handleDocumentMouseDown=e=>{let t=e.composedPath();this.containingElement&&!t.includes(this.containingElement)&&this.hide()},this.handlePanelSelect=e=>{let t=e.target;!this.stayOpenOnSelect&&t.tagName.toLowerCase()===`sl-menu`&&(this.hide(),this.focusOnTrigger())}}connectedCallback(){super.connectedCallback(),this.containingElement||=this}firstUpdated(){this.panel.hidden=!this.open,this.open&&(this.addOpenListeners(),this.popup.active=!0)}disconnectedCallback(){super.disconnectedCallback(),this.removeOpenListeners(),this.hide()}focusOnTrigger(){let e=this.trigger.assignedElements({flatten:!0})[0];typeof e?.focus==`function`&&e.focus()}getMenu(){return this.panel.assignedElements({flatten:!0}).find(e=>e.tagName.toLowerCase()===`sl-menu`)}handleTriggerClick(){this.open?this.hide():(this.show(),this.focusOnTrigger())}async handleTriggerKeyDown(e){if([` `,`Enter`].includes(e.key)){e.preventDefault(),this.handleTriggerClick();return}let t=this.getMenu();if(t){let n=t.getAllItems(),r=n[0],i=n[n.length-1];[`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)&&(e.preventDefault(),this.open||(this.show(),await this.updateComplete),n.length>0&&this.updateComplete.then(()=>{(e.key===`ArrowDown`||e.key===`Home`)&&(t.setCurrentItem(r),r.focus()),(e.key===`ArrowUp`||e.key===`End`)&&(t.setCurrentItem(i),i.focus())}))}}handleTriggerKeyUp(e){e.key===` `&&e.preventDefault()}handleTriggerSlotChange(){this.updateAccessibleTrigger()}updateAccessibleTrigger(){let e=this.trigger.assignedElements({flatten:!0}).find(e=>Ka(e).start),t;if(e){switch(e.tagName.toLowerCase()){case`sl-button`:case`sl-icon-button`:t=e.button;break;default:t=e}t.setAttribute(`aria-haspopup`,`true`),t.setAttribute(`aria-expanded`,this.open?`true`:`false`)}}async show(){if(!this.open)return this.open=!0,Oa(this,`sl-after-show`)}async hide(){if(this.open)return this.open=!1,Oa(this,`sl-after-hide`)}reposition(){this.popup.reposition()}addOpenListeners(){var e;this.panel.addEventListener(`sl-select`,this.handlePanelSelect),`CloseWatcher`in window?((e=this.closeWatcher)==null||e.destroy(),this.closeWatcher=new CloseWatcher,this.closeWatcher.onclose=()=>{this.hide(),this.focusOnTrigger()}):this.panel.addEventListener(`keydown`,this.handleKeyDown),document.addEventListener(`keydown`,this.handleDocumentKeyDown),document.addEventListener(`mousedown`,this.handleDocumentMouseDown)}removeOpenListeners(){var e;this.panel&&(this.panel.removeEventListener(`sl-select`,this.handlePanelSelect),this.panel.removeEventListener(`keydown`,this.handleKeyDown)),document.removeEventListener(`keydown`,this.handleDocumentKeyDown),document.removeEventListener(`mousedown`,this.handleDocumentMouseDown),(e=this.closeWatcher)==null||e.destroy()}async handleOpenChange(){if(this.disabled){this.open=!1;return}if(this.updateAccessibleTrigger(),this.open){this.emit(`sl-show`),this.addOpenListeners(),await ja(this),this.panel.hidden=!1,this.popup.active=!0;let{keyframes:e,options:t}=z(this,`dropdown.show`,{dir:this.localize.dir()});await B(this.popup.popup,e,t),this.emit(`sl-after-show`)}else{this.emit(`sl-hide`),this.removeOpenListeners(),await ja(this);let{keyframes:e,options:t}=z(this,`dropdown.hide`,{dir:this.localize.dir()});await B(this.popup.popup,e,t),this.panel.hidden=!0,this.popup.active=!1,this.emit(`sl-after-hide`)}}render(){return S` +`,$s=class extends N{constructor(){super(...arguments),this.localize=new L(this),this.open=!1,this.placement=`bottom-start`,this.disabled=!1,this.stayOpenOnSelect=!1,this.distance=0,this.skidding=0,this.hoist=!1,this.sync=void 0,this.handleKeyDown=e=>{this.open&&e.key===`Escape`&&(e.stopPropagation(),this.hide(),this.focusOnTrigger())},this.handleDocumentKeyDown=e=>{if(e.key===`Escape`&&this.open&&!this.closeWatcher){e.stopPropagation(),this.focusOnTrigger(),this.hide();return}if(e.key===`Tab`){if(this.open&&document.activeElement?.tagName.toLowerCase()===`sl-menu-item`){e.preventDefault(),this.hide(),this.focusOnTrigger();return}let t=(e,n)=>{if(!e)return null;let r=e.closest(n);if(r)return r;let i=e.getRootNode();return i instanceof ShadowRoot?t(i.host,n):null};setTimeout(()=>{let e=this.containingElement?.getRootNode()instanceof ShadowRoot?za():document.activeElement;(!this.containingElement||t(e,this.containingElement.tagName.toLowerCase())!==this.containingElement)&&this.hide()})}},this.handleDocumentMouseDown=e=>{let t=e.composedPath();this.containingElement&&!t.includes(this.containingElement)&&this.hide()},this.handlePanelSelect=e=>{let t=e.target;!this.stayOpenOnSelect&&t.tagName.toLowerCase()===`sl-menu`&&(this.hide(),this.focusOnTrigger())}}connectedCallback(){super.connectedCallback(),this.containingElement||=this}firstUpdated(){this.panel.hidden=!this.open,this.open&&(this.addOpenListeners(),this.popup.active=!0)}disconnectedCallback(){super.disconnectedCallback(),this.removeOpenListeners(),this.hide()}focusOnTrigger(){let e=this.trigger.assignedElements({flatten:!0})[0];typeof e?.focus==`function`&&e.focus()}getMenu(){return this.panel.assignedElements({flatten:!0}).find(e=>e.tagName.toLowerCase()===`sl-menu`)}handleTriggerClick(){this.open?this.hide():(this.show(),this.focusOnTrigger())}async handleTriggerKeyDown(e){if([` `,`Enter`].includes(e.key)){e.preventDefault(),this.handleTriggerClick();return}let t=this.getMenu();if(t){let n=t.getAllItems(),r=n[0],i=n[n.length-1];[`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)&&(e.preventDefault(),this.open||(this.show(),await this.updateComplete),n.length>0&&this.updateComplete.then(()=>{(e.key===`ArrowDown`||e.key===`Home`)&&(t.setCurrentItem(r),r.focus()),(e.key===`ArrowUp`||e.key===`End`)&&(t.setCurrentItem(i),i.focus())}))}}handleTriggerKeyUp(e){e.key===` `&&e.preventDefault()}handleTriggerSlotChange(){this.updateAccessibleTrigger()}updateAccessibleTrigger(){let e=this.trigger.assignedElements({flatten:!0}).find(e=>Ga(e).start),t;if(e){switch(e.tagName.toLowerCase()){case`sl-button`:case`sl-icon-button`:t=e.button;break;default:t=e}t.setAttribute(`aria-haspopup`,`true`),t.setAttribute(`aria-expanded`,this.open?`true`:`false`)}}async show(){if(!this.open)return this.open=!0,Da(this,`sl-after-show`)}async hide(){if(this.open)return this.open=!1,Da(this,`sl-after-hide`)}reposition(){this.popup.reposition()}addOpenListeners(){var e;this.panel.addEventListener(`sl-select`,this.handlePanelSelect),`CloseWatcher`in window?((e=this.closeWatcher)==null||e.destroy(),this.closeWatcher=new CloseWatcher,this.closeWatcher.onclose=()=>{this.hide(),this.focusOnTrigger()}):this.panel.addEventListener(`keydown`,this.handleKeyDown),document.addEventListener(`keydown`,this.handleDocumentKeyDown),document.addEventListener(`mousedown`,this.handleDocumentMouseDown)}removeOpenListeners(){var e;this.panel&&(this.panel.removeEventListener(`sl-select`,this.handlePanelSelect),this.panel.removeEventListener(`keydown`,this.handleKeyDown)),document.removeEventListener(`keydown`,this.handleDocumentKeyDown),document.removeEventListener(`mousedown`,this.handleDocumentMouseDown),(e=this.closeWatcher)==null||e.destroy()}async handleOpenChange(){if(this.disabled){this.open=!1;return}if(this.updateAccessibleTrigger(),this.open){this.emit(`sl-show`),this.addOpenListeners(),await Aa(this),this.panel.hidden=!1,this.popup.active=!0;let{keyframes:e,options:t}=B(this,`dropdown.show`,{dir:this.localize.dir()});await V(this.popup.popup,e,t),this.emit(`sl-after-show`)}else{this.emit(`sl-hide`),this.removeOpenListeners(),await Aa(this);let{keyframes:e,options:t}=B(this,`dropdown.hide`,{dir:this.localize.dir()});await V(this.popup.popup,e,t),this.panel.hidden=!0,this.popup.active=!1,this.emit(`sl-after-hide`)}}render(){return C` - `}};ec.styles=[D,$s],ec.dependencies={"sl-popup":L},T([j(`.dropdown`)],ec.prototype,`popup`,2),T([j(`.dropdown__trigger`)],ec.prototype,`trigger`,2),T([j(`.dropdown__panel`)],ec.prototype,`panel`,2),T([k({type:Boolean,reflect:!0})],ec.prototype,`open`,2),T([k({reflect:!0})],ec.prototype,`placement`,2),T([k({type:Boolean,reflect:!0})],ec.prototype,`disabled`,2),T([k({attribute:`stay-open-on-select`,type:Boolean,reflect:!0})],ec.prototype,`stayOpenOnSelect`,2),T([k({attribute:!1})],ec.prototype,`containingElement`,2),T([k({type:Number})],ec.prototype,`distance`,2),T([k({type:Number})],ec.prototype,`skidding`,2),T([k({type:Boolean})],ec.prototype,`hoist`,2),T([k({reflect:!0})],ec.prototype,`sync`,2),T([E(`open`,{waitUntilFirstUpdate:!0})],ec.prototype,`handleOpenChange`,1),R(`dropdown.show`,{keyframes:[{opacity:0,scale:.9},{opacity:1,scale:1}],options:{duration:100,easing:`ease`}}),R(`dropdown.hide`,{keyframes:[{opacity:1,scale:1},{opacity:0,scale:.9}],options:{duration:100,easing:`ease`}}),ec.define(`sl-dropdown`);var tc=x` + `}};$s.styles=[O,Qs],$s.dependencies={"sl-popup":R},E([M(`.dropdown`)],$s.prototype,`popup`,2),E([M(`.dropdown__trigger`)],$s.prototype,`trigger`,2),E([M(`.dropdown__panel`)],$s.prototype,`panel`,2),E([A({type:Boolean,reflect:!0})],$s.prototype,`open`,2),E([A({reflect:!0})],$s.prototype,`placement`,2),E([A({type:Boolean,reflect:!0})],$s.prototype,`disabled`,2),E([A({attribute:`stay-open-on-select`,type:Boolean,reflect:!0})],$s.prototype,`stayOpenOnSelect`,2),E([A({attribute:!1})],$s.prototype,`containingElement`,2),E([A({type:Number})],$s.prototype,`distance`,2),E([A({type:Number})],$s.prototype,`skidding`,2),E([A({type:Boolean})],$s.prototype,`hoist`,2),E([A({reflect:!0})],$s.prototype,`sync`,2),E([D(`open`,{waitUntilFirstUpdate:!0})],$s.prototype,`handleOpenChange`,1),z(`dropdown.show`,{keyframes:[{opacity:0,scale:.9},{opacity:1,scale:1}],options:{duration:100,easing:`ease`}}),z(`dropdown.hide`,{keyframes:[{opacity:1,scale:1},{opacity:0,scale:.9}],options:{duration:100,easing:`ease`}}),$s.define(`sl-dropdown`);var ec=S` :host { display: block; position: relative; @@ -3882,14 +3882,14 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value ::slotted(sl-divider) { --spacing: var(--sl-spacing-x-small); } -`,nc=class extends M{connectedCallback(){super.connectedCallback(),this.setAttribute(`role`,`menu`)}handleClick(e){let t=[`menuitem`,`menuitemcheckbox`],n=e.composedPath(),r=n.find(e=>t.includes((e?.getAttribute)?.call(e,`role`)||``));if(!r||n.find(e=>(e?.getAttribute)?.call(e,`role`)===`menu`)!==this)return;let i=r;i.type===`checkbox`&&(i.checked=!i.checked),this.emit(`sl-select`,{detail:{item:i}})}handleKeyDown(e){if(e.key===`Enter`||e.key===` `){let t=this.getCurrentItem();e.preventDefault(),e.stopPropagation(),t?.click()}else if([`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){let t=this.getAllItems(),n=this.getCurrentItem(),r=n?t.indexOf(n):0;t.length>0&&(e.preventDefault(),e.stopPropagation(),e.key===`ArrowDown`?r++:e.key===`ArrowUp`?r--:e.key===`Home`?r=0:e.key===`End`&&(r=t.length-1),r<0&&(r=t.length-1),r>t.length-1&&(r=0),this.setCurrentItem(t[r]),t[r].focus())}}handleMouseDown(e){let t=e.target;this.isMenuItem(t)&&this.setCurrentItem(t)}handleSlotChange(){let e=this.getAllItems();e.length>0&&this.setCurrentItem(e[0])}isMenuItem(e){return e.tagName.toLowerCase()===`sl-menu-item`||[`menuitem`,`menuitemcheckbox`,`menuitemradio`].includes(e.getAttribute(`role`)??``)}getAllItems(){return[...this.defaultSlot.assignedElements({flatten:!0})].filter(e=>!(e.inert||!this.isMenuItem(e)))}getCurrentItem(){return this.getAllItems().find(e=>e.getAttribute(`tabindex`)===`0`)}setCurrentItem(e){this.getAllItems().forEach(t=>{t.setAttribute(`tabindex`,t===e?`0`:`-1`)})}render(){return S` +`,tc=class extends N{connectedCallback(){super.connectedCallback(),this.setAttribute(`role`,`menu`)}handleClick(e){let t=[`menuitem`,`menuitemcheckbox`],n=e.composedPath(),r=n.find(e=>t.includes((e?.getAttribute)?.call(e,`role`)||``));if(!r||n.find(e=>(e?.getAttribute)?.call(e,`role`)===`menu`)!==this)return;let i=r;i.type===`checkbox`&&(i.checked=!i.checked),this.emit(`sl-select`,{detail:{item:i}})}handleKeyDown(e){if(e.key===`Enter`||e.key===` `){let t=this.getCurrentItem();e.preventDefault(),e.stopPropagation(),t?.click()}else if([`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){let t=this.getAllItems(),n=this.getCurrentItem(),r=n?t.indexOf(n):0;t.length>0&&(e.preventDefault(),e.stopPropagation(),e.key===`ArrowDown`?r++:e.key===`ArrowUp`?r--:e.key===`Home`?r=0:e.key===`End`&&(r=t.length-1),r<0&&(r=t.length-1),r>t.length-1&&(r=0),this.setCurrentItem(t[r]),t[r].focus())}}handleMouseDown(e){let t=e.target;this.isMenuItem(t)&&this.setCurrentItem(t)}handleSlotChange(){let e=this.getAllItems();e.length>0&&this.setCurrentItem(e[0])}isMenuItem(e){return e.tagName.toLowerCase()===`sl-menu-item`||[`menuitem`,`menuitemcheckbox`,`menuitemradio`].includes(e.getAttribute(`role`)??``)}getAllItems(){return[...this.defaultSlot.assignedElements({flatten:!0})].filter(e=>!(e.inert||!this.isMenuItem(e)))}getCurrentItem(){return this.getAllItems().find(e=>e.getAttribute(`tabindex`)===`0`)}setCurrentItem(e){this.getAllItems().forEach(t=>{t.setAttribute(`tabindex`,t===e?`0`:`-1`)})}render(){return C` - `}};nc.styles=[D,tc],T([j(`slot`)],nc.prototype,`defaultSlot`,2),nc.define(`sl-menu`);var rc=x` + `}};tc.styles=[O,ec],E([M(`slot`)],tc.prototype,`defaultSlot`,2),tc.define(`sl-menu`);var nc=S` :host { --submenu-offset: -2px; @@ -4041,9 +4041,9 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value max-width: var(--auto-size-available-width) !important; max-height: var(--auto-size-available-height) !important; } -`,ic=(e,t)=>{let n=e._$AN;if(n===void 0)return!1;for(let e of n)e._$AO?.(t,!1),ic(e,t);return!0},ac=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},oc=e=>{for(let t;t=e._$AM;e=t){let n=t._$AN;if(n===void 0)t._$AN=n=new Set;else if(n.has(e))break;n.add(e),lc(t)}};function sc(e){this._$AN===void 0?this._$AM=e:(ac(this),this._$AM=e,oc(this))}function cc(e,t=!1,n=0){let r=this._$AH,i=this._$AN;if(i!==void 0&&i.size!==0)if(t)if(Array.isArray(r))for(let e=n;e{e.type==or.CHILD&&(e._$AP??=cc,e._$AQ??=sc)},uc=class extends cr{constructor(){super(...arguments),this._$AN=void 0}_$AT(e,t,n){super._$AT(e,t,n),oc(this),this.isConnected=e._$AU}_$AO(e,t=!0){e!==this.isConnected&&(this.isConnected=e,e?this.reconnected?.():this.disconnected?.()),t&&(ic(this,e),ac(this))}setValue(e){if(Qn(this._$Ct))this._$Ct._$AI(e,this);else{let t=[...this._$Ct._$AH];t[this._$Ci]=e,this._$Ct._$AI(t,this,0)}}disconnected(){}reconnected(){}},dc=()=>new fc,fc=class{},pc=new WeakMap,mc=sr(class extends uc{render(e){return C}update(e,[t]){let n=t!==this.G;return n&&this.G!==void 0&&this.rt(void 0),(n||this.lt!==this.ct)&&(this.G=t,this.ht=e.options?.host,this.rt(this.ct=e.element)),C}rt(e){if(this.isConnected||(e=void 0),typeof this.G==`function`){let t=this.ht??globalThis,n=pc.get(t);n===void 0&&(n=new WeakMap,pc.set(t,n)),n.get(this.G)!==void 0&&this.G.call(this.ht,void 0),n.set(this.G,e),e!==void 0&&this.G.call(this.ht,e)}else this.G.value=e}get lt(){return typeof this.G==`function`?pc.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}}),hc=class{constructor(e,t){this.popupRef=dc(),this.enableSubmenuTimer=-1,this.isConnected=!1,this.isPopupConnected=!1,this.skidding=0,this.submenuOpenDelay=100,this.handleMouseMove=e=>{this.host.style.setProperty(`--safe-triangle-cursor-x`,`${e.clientX}px`),this.host.style.setProperty(`--safe-triangle-cursor-y`,`${e.clientY}px`)},this.handleMouseOver=()=>{this.hasSlotController.test(`submenu`)&&this.enableSubmenu()},this.handleKeyDown=e=>{switch(e.key){case`Escape`:case`Tab`:this.disableSubmenu();break;case`ArrowLeft`:e.target!==this.host&&(e.preventDefault(),e.stopPropagation(),this.host.focus(),this.disableSubmenu());break;case`ArrowRight`:case`Enter`:case` `:this.handleSubmenuEntry(e);break;default:break}},this.handleClick=e=>{e.target===this.host?(e.preventDefault(),e.stopPropagation()):e.target instanceof Element&&(e.target.tagName===`sl-menu-item`||e.target.role?.startsWith(`menuitem`))&&this.disableSubmenu()},this.handleFocusOut=e=>{e.relatedTarget&&e.relatedTarget instanceof Element&&this.host.contains(e.relatedTarget)||this.disableSubmenu()},this.handlePopupMouseover=e=>{e.stopPropagation()},this.handlePopupReposition=()=>{let e=this.host.renderRoot.querySelector(`slot[name='submenu']`)?.assignedElements({flatten:!0}).filter(e=>e.localName===`sl-menu`)[0],t=getComputedStyle(this.host).direction===`rtl`;if(!e)return;let{left:n,top:r,width:i,height:a}=e.getBoundingClientRect();this.host.style.setProperty(`--safe-triangle-submenu-start-x`,`${t?n+i:n}px`),this.host.style.setProperty(`--safe-triangle-submenu-start-y`,`${r}px`),this.host.style.setProperty(`--safe-triangle-submenu-end-x`,`${t?n+i:n}px`),this.host.style.setProperty(`--safe-triangle-submenu-end-y`,`${r+a}px`)},(this.host=e).addController(this),this.hasSlotController=t}hostConnected(){this.hasSlotController.test(`submenu`)&&!this.host.disabled&&this.addListeners()}hostDisconnected(){this.removeListeners()}hostUpdated(){this.hasSlotController.test(`submenu`)&&!this.host.disabled?(this.addListeners(),this.updateSkidding()):this.removeListeners()}addListeners(){this.isConnected||=(this.host.addEventListener(`mousemove`,this.handleMouseMove),this.host.addEventListener(`mouseover`,this.handleMouseOver),this.host.addEventListener(`keydown`,this.handleKeyDown),this.host.addEventListener(`click`,this.handleClick),this.host.addEventListener(`focusout`,this.handleFocusOut),!0),this.isPopupConnected||this.popupRef.value&&(this.popupRef.value.addEventListener(`mouseover`,this.handlePopupMouseover),this.popupRef.value.addEventListener(`sl-reposition`,this.handlePopupReposition),this.isPopupConnected=!0)}removeListeners(){this.isConnected&&=(this.host.removeEventListener(`mousemove`,this.handleMouseMove),this.host.removeEventListener(`mouseover`,this.handleMouseOver),this.host.removeEventListener(`keydown`,this.handleKeyDown),this.host.removeEventListener(`click`,this.handleClick),this.host.removeEventListener(`focusout`,this.handleFocusOut),!1),this.isPopupConnected&&this.popupRef.value&&(this.popupRef.value.removeEventListener(`mouseover`,this.handlePopupMouseover),this.popupRef.value.removeEventListener(`sl-reposition`,this.handlePopupReposition),this.isPopupConnected=!1)}handleSubmenuEntry(e){let t=this.host.renderRoot.querySelector(`slot[name='submenu']`);if(!t){console.error(`Cannot activate a submenu if no corresponding menuitem can be found.`,this);return}let n=null;for(let e of t.assignedElements())if(n=e.querySelectorAll(`sl-menu-item, [role^='menuitem']`),n.length!==0)break;if(!(!n||n.length===0)){n[0].setAttribute(`tabindex`,`0`);for(let e=1;e!==n.length;++e)n[e].setAttribute(`tabindex`,`-1`);this.popupRef.value&&(e.preventDefault(),e.stopPropagation(),this.popupRef.value.active?n[0]instanceof HTMLElement&&n[0].focus():(this.enableSubmenu(!1),this.host.updateComplete.then(()=>{n[0]instanceof HTMLElement&&n[0].focus()}),this.host.requestUpdate()))}}setSubmenuState(e){this.popupRef.value&&this.popupRef.value.active!==e&&(this.popupRef.value.active=e,this.host.requestUpdate())}enableSubmenu(e=!0){e?(window.clearTimeout(this.enableSubmenuTimer),this.enableSubmenuTimer=window.setTimeout(()=>{this.setSubmenuState(!0)},this.submenuOpenDelay)):this.setSubmenuState(!0)}disableSubmenu(){window.clearTimeout(this.enableSubmenuTimer),this.setSubmenuState(!1)}updateSkidding(){if(!this.host.parentElement?.computedStyleMap)return;let e=this.host.parentElement.computedStyleMap();this.skidding=[`padding-top`,`border-top-width`,`margin-top`].reduce((t,n)=>{let r=e.get(n)??new CSSUnitValue(0,`px`);return t-(r instanceof CSSUnitValue?r:new CSSUnitValue(0,`px`)).to(`px`).value},0)}isExpanded(){return this.popupRef.value?this.popupRef.value.active:!1}renderSubmenu(){let e=getComputedStyle(this.host).direction===`rtl`;return this.isConnected?S` +`,rc=(e,t)=>{let n=e._$AN;if(n===void 0)return!1;for(let e of n)e._$AO?.(t,!1),rc(e,t);return!0},ic=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},ac=e=>{for(let t;t=e._$AM;e=t){let n=t._$AN;if(n===void 0)t._$AN=n=new Set;else if(n.has(e))break;n.add(e),cc(t)}};function oc(e){this._$AN===void 0?this._$AM=e:(ic(this),this._$AM=e,ac(this))}function sc(e,t=!1,n=0){let r=this._$AH,i=this._$AN;if(i!==void 0&&i.size!==0)if(t)if(Array.isArray(r))for(let e=n;e{e.type==ar.CHILD&&(e._$AP??=sc,e._$AQ??=oc)},lc=class extends sr{constructor(){super(...arguments),this._$AN=void 0}_$AT(e,t,n){super._$AT(e,t,n),ac(this),this.isConnected=e._$AU}_$AO(e,t=!0){e!==this.isConnected&&(this.isConnected=e,e?this.reconnected?.():this.disconnected?.()),t&&(rc(this,e),ic(this))}setValue(e){if(Zn(this._$Ct))this._$Ct._$AI(e,this);else{let t=[...this._$Ct._$AH];t[this._$Ci]=e,this._$Ct._$AI(t,this,0)}}disconnected(){}reconnected(){}},uc=()=>new dc,dc=class{},fc=new WeakMap,pc=or(class extends lc{render(e){return w}update(e,[t]){let n=t!==this.G;return n&&this.G!==void 0&&this.rt(void 0),(n||this.lt!==this.ct)&&(this.G=t,this.ht=e.options?.host,this.rt(this.ct=e.element)),w}rt(e){if(this.isConnected||(e=void 0),typeof this.G==`function`){let t=this.ht??globalThis,n=fc.get(t);n===void 0&&(n=new WeakMap,fc.set(t,n)),n.get(this.G)!==void 0&&this.G.call(this.ht,void 0),n.set(this.G,e),e!==void 0&&this.G.call(this.ht,e)}else this.G.value=e}get lt(){return typeof this.G==`function`?fc.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}}),mc=class{constructor(e,t){this.popupRef=uc(),this.enableSubmenuTimer=-1,this.isConnected=!1,this.isPopupConnected=!1,this.skidding=0,this.submenuOpenDelay=100,this.handleMouseMove=e=>{this.host.style.setProperty(`--safe-triangle-cursor-x`,`${e.clientX}px`),this.host.style.setProperty(`--safe-triangle-cursor-y`,`${e.clientY}px`)},this.handleMouseOver=()=>{this.hasSlotController.test(`submenu`)&&this.enableSubmenu()},this.handleKeyDown=e=>{switch(e.key){case`Escape`:case`Tab`:this.disableSubmenu();break;case`ArrowLeft`:e.target!==this.host&&(e.preventDefault(),e.stopPropagation(),this.host.focus(),this.disableSubmenu());break;case`ArrowRight`:case`Enter`:case` `:this.handleSubmenuEntry(e);break;default:break}},this.handleClick=e=>{e.target===this.host?(e.preventDefault(),e.stopPropagation()):e.target instanceof Element&&(e.target.tagName===`sl-menu-item`||e.target.role?.startsWith(`menuitem`))&&this.disableSubmenu()},this.handleFocusOut=e=>{e.relatedTarget&&e.relatedTarget instanceof Element&&this.host.contains(e.relatedTarget)||this.disableSubmenu()},this.handlePopupMouseover=e=>{e.stopPropagation()},this.handlePopupReposition=()=>{let e=this.host.renderRoot.querySelector(`slot[name='submenu']`)?.assignedElements({flatten:!0}).filter(e=>e.localName===`sl-menu`)[0],t=getComputedStyle(this.host).direction===`rtl`;if(!e)return;let{left:n,top:r,width:i,height:a}=e.getBoundingClientRect();this.host.style.setProperty(`--safe-triangle-submenu-start-x`,`${t?n+i:n}px`),this.host.style.setProperty(`--safe-triangle-submenu-start-y`,`${r}px`),this.host.style.setProperty(`--safe-triangle-submenu-end-x`,`${t?n+i:n}px`),this.host.style.setProperty(`--safe-triangle-submenu-end-y`,`${r+a}px`)},(this.host=e).addController(this),this.hasSlotController=t}hostConnected(){this.hasSlotController.test(`submenu`)&&!this.host.disabled&&this.addListeners()}hostDisconnected(){this.removeListeners()}hostUpdated(){this.hasSlotController.test(`submenu`)&&!this.host.disabled?(this.addListeners(),this.updateSkidding()):this.removeListeners()}addListeners(){this.isConnected||=(this.host.addEventListener(`mousemove`,this.handleMouseMove),this.host.addEventListener(`mouseover`,this.handleMouseOver),this.host.addEventListener(`keydown`,this.handleKeyDown),this.host.addEventListener(`click`,this.handleClick),this.host.addEventListener(`focusout`,this.handleFocusOut),!0),this.isPopupConnected||this.popupRef.value&&(this.popupRef.value.addEventListener(`mouseover`,this.handlePopupMouseover),this.popupRef.value.addEventListener(`sl-reposition`,this.handlePopupReposition),this.isPopupConnected=!0)}removeListeners(){this.isConnected&&=(this.host.removeEventListener(`mousemove`,this.handleMouseMove),this.host.removeEventListener(`mouseover`,this.handleMouseOver),this.host.removeEventListener(`keydown`,this.handleKeyDown),this.host.removeEventListener(`click`,this.handleClick),this.host.removeEventListener(`focusout`,this.handleFocusOut),!1),this.isPopupConnected&&this.popupRef.value&&(this.popupRef.value.removeEventListener(`mouseover`,this.handlePopupMouseover),this.popupRef.value.removeEventListener(`sl-reposition`,this.handlePopupReposition),this.isPopupConnected=!1)}handleSubmenuEntry(e){let t=this.host.renderRoot.querySelector(`slot[name='submenu']`);if(!t){console.error(`Cannot activate a submenu if no corresponding menuitem can be found.`,this);return}let n=null;for(let e of t.assignedElements())if(n=e.querySelectorAll(`sl-menu-item, [role^='menuitem']`),n.length!==0)break;if(!(!n||n.length===0)){n[0].setAttribute(`tabindex`,`0`);for(let e=1;e!==n.length;++e)n[e].setAttribute(`tabindex`,`-1`);this.popupRef.value&&(e.preventDefault(),e.stopPropagation(),this.popupRef.value.active?n[0]instanceof HTMLElement&&n[0].focus():(this.enableSubmenu(!1),this.host.updateComplete.then(()=>{n[0]instanceof HTMLElement&&n[0].focus()}),this.host.requestUpdate()))}}setSubmenuState(e){this.popupRef.value&&this.popupRef.value.active!==e&&(this.popupRef.value.active=e,this.host.requestUpdate())}enableSubmenu(e=!0){e?(window.clearTimeout(this.enableSubmenuTimer),this.enableSubmenuTimer=window.setTimeout(()=>{this.setSubmenuState(!0)},this.submenuOpenDelay)):this.setSubmenuState(!0)}disableSubmenu(){window.clearTimeout(this.enableSubmenuTimer),this.setSubmenuState(!1)}updateSkidding(){if(!this.host.parentElement?.computedStyleMap)return;let e=this.host.parentElement.computedStyleMap();this.skidding=[`padding-top`,`border-top-width`,`margin-top`].reduce((t,n)=>{let r=e.get(n)??new CSSUnitValue(0,`px`);return t-(r instanceof CSSUnitValue?r:new CSSUnitValue(0,`px`)).to(`px`).value},0)}isExpanded(){return this.popupRef.value?this.popupRef.value.active:!1}renderSubmenu(){let e=getComputedStyle(this.host).direction===`rtl`;return this.isConnected?C` - `:S` `}},gc=class extends M{constructor(){super(...arguments),this.localize=new I(this),this.type=`normal`,this.checked=!1,this.value=``,this.loading=!1,this.disabled=!1,this.hasSlotController=new ao(this,`submenu`),this.submenuController=new hc(this,this.hasSlotController),this.handleHostClick=e=>{this.disabled&&(e.preventDefault(),e.stopImmediatePropagation())},this.handleMouseOver=e=>{this.focus(),e.stopPropagation()}}connectedCallback(){super.connectedCallback(),this.addEventListener(`click`,this.handleHostClick),this.addEventListener(`mouseover`,this.handleMouseOver)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`click`,this.handleHostClick),this.removeEventListener(`mouseover`,this.handleMouseOver)}handleDefaultSlotChange(){let e=this.getTextLabel();if(this.cachedTextLabel===void 0){this.cachedTextLabel=e;return}e!==this.cachedTextLabel&&(this.cachedTextLabel=e,this.emit(`slotchange`,{bubbles:!0,composed:!1,cancelable:!1}))}handleCheckedChange(){if(this.checked&&this.type!==`checkbox`){this.checked=!1,console.error(`The checked attribute can only be used on menu items with type="checkbox"`,this);return}this.type===`checkbox`?this.setAttribute(`aria-checked`,this.checked?`true`:`false`):this.removeAttribute(`aria-checked`)}handleDisabledChange(){this.setAttribute(`aria-disabled`,this.disabled?`true`:`false`)}handleTypeChange(){this.type===`checkbox`?(this.setAttribute(`role`,`menuitemcheckbox`),this.setAttribute(`aria-checked`,this.checked?`true`:`false`)):(this.setAttribute(`role`,`menuitem`),this.removeAttribute(`aria-checked`))}getTextLabel(){return oo(this.defaultSlot)}isSubmenu(){return this.hasSlotController.test(`submenu`)}render(){let e=this.localize.dir()===`rtl`,t=this.submenuController.isExpanded();return S` + `:C` `}},hc=class extends N{constructor(){super(...arguments),this.localize=new L(this),this.type=`normal`,this.checked=!1,this.value=``,this.loading=!1,this.disabled=!1,this.hasSlotController=new io(this,`submenu`),this.submenuController=new mc(this,this.hasSlotController),this.handleHostClick=e=>{this.disabled&&(e.preventDefault(),e.stopImmediatePropagation())},this.handleMouseOver=e=>{this.focus(),e.stopPropagation()}}connectedCallback(){super.connectedCallback(),this.addEventListener(`click`,this.handleHostClick),this.addEventListener(`mouseover`,this.handleMouseOver)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`click`,this.handleHostClick),this.removeEventListener(`mouseover`,this.handleMouseOver)}handleDefaultSlotChange(){let e=this.getTextLabel();if(this.cachedTextLabel===void 0){this.cachedTextLabel=e;return}e!==this.cachedTextLabel&&(this.cachedTextLabel=e,this.emit(`slotchange`,{bubbles:!0,composed:!1,cancelable:!1}))}handleCheckedChange(){if(this.checked&&this.type!==`checkbox`){this.checked=!1,console.error(`The checked attribute can only be used on menu items with type="checkbox"`,this);return}this.type===`checkbox`?this.setAttribute(`aria-checked`,this.checked?`true`:`false`):this.removeAttribute(`aria-checked`)}handleDisabledChange(){this.setAttribute(`aria-disabled`,this.disabled?`true`:`false`)}handleTypeChange(){this.type===`checkbox`?(this.setAttribute(`role`,`menuitemcheckbox`),this.setAttribute(`aria-checked`,this.checked?`true`:`false`)):(this.setAttribute(`role`,`menuitem`),this.removeAttribute(`aria-checked`))}getTextLabel(){return ao(this.defaultSlot)}isSubmenu(){return this.hasSlotController.test(`submenu`)}render(){let e=this.localize.dir()===`rtl`,t=this.submenuController.isExpanded();return C`
@@ -4078,10 +4078,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value ${this.submenuController.renderSubmenu()} - ${this.loading?S` `:``} + ${this.loading?C` `:``}
- `}};gc.styles=[D,rc],gc.dependencies={"sl-icon":ar,"sl-popup":L,"sl-spinner":_o},T([j(`slot:not([name])`)],gc.prototype,`defaultSlot`,2),T([j(`.menu-item`)],gc.prototype,`menuItem`,2),T([k()],gc.prototype,`type`,2),T([k({type:Boolean,reflect:!0})],gc.prototype,`checked`,2),T([k()],gc.prototype,`value`,2),T([k({type:Boolean,reflect:!0})],gc.prototype,`loading`,2),T([k({type:Boolean,reflect:!0})],gc.prototype,`disabled`,2),T([E(`checked`)],gc.prototype,`handleCheckedChange`,1),T([E(`disabled`)],gc.prototype,`handleDisabledChange`,1),T([E(`type`)],gc.prototype,`handleTypeChange`,1),gc.define(`sl-menu-item`);function W(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var _c=`pp-split-position`,vc=20,yc=1,bc=`pb33f-theme`,xc=`pb33f-base-theme`,Sc=`pb33f-theme-change`;function Cc(e){try{return localStorage.getItem(e)}catch{return null}}function wc(e,t){try{localStorage.setItem(e,t)}catch{}}function Tc(e,t){e.setAttribute(`label`,t),e.setAttribute(`title`,t),e.setAttribute(`aria-label`,t)}function Ec(){try{let e=sessionStorage.getItem(_c);return Oc(e?parseFloat(e):vc)}catch{return vc}}function Dc(e){try{sessionStorage.setItem(_c,String(e))}catch{}}function Oc(e){return!Number.isFinite(e)||e100?vc:e}function kc(e){return Number.isFinite(e)?Math.min(100,Math.max(yc,e)):vc}var Ac=class extends w{constructor(...e){super(...e),this.title=``,this.splitPos=vc,this.currentVersion=``,this.versions=[],this.embedded=!1,this.splitPanel=null,this.splitDivider=null,this.splitHandle=null,this.handleSplitReposition=e=>this.onReposition(e),this.handleSplitHostPointerDown=e=>this.startHostPointerSplitDrag(e),this.handleSplitHostMouseDown=e=>this.startHostMouseSplitDrag(e),this.handleSplitPointerDown=e=>this.startPointerSplitDrag(e),this.handleSplitMouseDown=e=>this.startMouseSplitDrag(e),this.handleSplitTouchStart=e=>this.startTouchSplitDrag(e)}static{this.styles=[Us,Ws]}connectedCallback(){super.connectedCallback(),this.title=this.getAttribute(`data-title`)||document.title||`API Documentation`,this.currentVersion=document.body?.dataset.ppCurrentVersion||``,this.versions=this.parseVersions(document.body?.dataset.ppVersions),this.embedded=document.documentElement.hasAttribute(`data-pp-embedded-docs`)||document.body?.dataset.ppEmbeddedDocs===`true`,this.toggleAttribute(`embedded`,this.embedded),this.splitPos=Ec()}disconnectedCallback(){this.splitPanel?.removeEventListener(`sl-reposition`,this.handleSplitReposition),this.splitPanel?.removeEventListener(`pointerdown`,this.handleSplitHostPointerDown),this.splitPanel?.removeEventListener(`mousedown`,this.handleSplitHostMouseDown),this.detachSplitDragTarget(this.splitDivider),this.detachSplitDragTarget(this.splitHandle),this.splitPanel=null,this.splitDivider=null,this.splitHandle=null,super.disconnectedCallback()}updated(){this.syncHeader(),this.syncThemeControls(),this.syncSplitPanel()}syncHeader(){let e=this.renderRoot?.querySelector(`.doc-logo-link`);e&&(e.href=Xs())}activeTheme(){let e=Cc(bc);if(e===`light`||e===`tektronix`)return e;let t=document.documentElement.getAttribute(`theme`);return t===`light`||t===`tektronix`?t:`dark`}baseTheme(){let e=Cc(xc);return e===`light`?`light`:e===`dark`?`dark`:this.activeTheme()===`light`?`light`:`dark`}applyTheme(e,t=this.baseTheme()){let n=e===`tektronix`?t:e;wc(bc,e),wc(xc,n),document.documentElement.setAttribute(`theme`,e),e===`light`?document.documentElement.classList.remove(`sl-theme-dark`):document.documentElement.classList.add(`sl-theme-dark`),window.dispatchEvent(new CustomEvent(Sc,{detail:{theme:e}})),this.syncThemeControls()}toggleBaseTheme(){let e=this.baseTheme()===`dark`?`light`:`dark`;this.applyTheme(e,e)}toggleTektronix(){let e=this.baseTheme();this.applyTheme(this.activeTheme()===`tektronix`?e:`tektronix`,e)}syncThemeControls(){let e=this.renderRoot?.querySelector(`.theme-mode-toggle`),t=this.renderRoot?.querySelector(`.theme-tektronix-toggle`),n=this.baseTheme(),r=this.activeTheme();if(e){let t=n===`dark`?`Switch to Roger Mode (light)`:`Switch to PB33F Mode (dark)`;e.querySelector(`sl-icon`)?.setAttribute(`name`,n===`dark`?`sun`:`moon`),Tc(e,t),e.onclick=()=>this.toggleBaseTheme()}t&&(Tc(t,r===`tektronix`?`Disable Tektronix 4010 Mode`:`Enable Tektronix 4010 Mode`),t.classList.toggle(`tek-active`,r===`tektronix`),t.onclick=()=>this.toggleTektronix())}syncSplitPanel(){let e=this.renderRoot?.querySelector(`sl-split-panel`);e&&(this.splitPanel!==e&&(this.splitPanel?.removeEventListener(`sl-reposition`,this.handleSplitReposition),this.splitPanel?.removeEventListener(`pointerdown`,this.handleSplitHostPointerDown),this.splitPanel?.removeEventListener(`mousedown`,this.handleSplitHostMouseDown),e.addEventListener(`sl-reposition`,this.handleSplitReposition),e.addEventListener(`pointerdown`,this.handleSplitHostPointerDown),e.addEventListener(`mousedown`,this.handleSplitHostMouseDown),this.splitPanel=e),e.position!==this.splitPos&&(e.position=this.splitPos),e.getAttribute(`position`)!==String(this.splitPos)&&e.setAttribute(`position`,String(this.splitPos)),this.syncSplitDivider(e),e.updateComplete?.then(()=>this.syncSplitDivider(e)),this.syncSplitHandle())}syncSplitDivider(e){let t=e.shadowRoot?.querySelector(`.divider`);!t||this.splitDivider===t||(this.detachSplitDragTarget(this.splitDivider),this.attachSplitDragTarget(t),this.splitDivider=t)}syncSplitHandle(){let e=this.renderRoot?.querySelector(`sl-icon.divider-vert`);!e||this.splitHandle===e||(this.detachSplitDragTarget(this.splitHandle),this.attachSplitDragTarget(e),this.splitHandle=e)}attachSplitDragTarget(e){e.addEventListener(`pointerdown`,this.handleSplitPointerDown),e.addEventListener(`mousedown`,this.handleSplitMouseDown),e.addEventListener(`touchstart`,this.handleSplitTouchStart,{passive:!1}),e.setAttribute(`data-pp-resize-ready`,`true`)}detachSplitDragTarget(e){e?.removeEventListener(`pointerdown`,this.handleSplitPointerDown),e?.removeEventListener(`mousedown`,this.handleSplitMouseDown),e?.removeEventListener(`touchstart`,this.handleSplitTouchStart),e?.removeAttribute(`data-pp-resize-ready`)}isNearSplitDivider(e){let t=this.splitDivider?.getBoundingClientRect()||this.splitHandle?.getBoundingClientRect();return t?e>=t.left-8&&e<=t.right+8:!1}startHostPointerSplitDrag(e){this.isNearSplitDivider(e.clientX)&&this.startPointerSplitDrag(e)}startHostMouseSplitDrag(e){this.isNearSplitDivider(e.clientX)&&this.startMouseSplitDrag(e)}startPointerSplitDrag(e){if(e.button!==0)return;e.preventDefault(),e.stopPropagation(),e.currentTarget?.setPointerCapture?.(e.pointerId),this.setSplitPositionFromClientX(e.clientX);let t=e=>{e.preventDefault(),this.setSplitPositionFromClientX(e.clientX)},n=()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n),document.removeEventListener(`pointercancel`,n)};document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n),document.addEventListener(`pointercancel`,n)}startMouseSplitDrag(e){if(e.button!==0)return;e.preventDefault(),e.stopPropagation(),this.setSplitPositionFromClientX(e.clientX);let t=e=>{e.preventDefault(),this.setSplitPositionFromClientX(e.clientX)},n=()=>{document.removeEventListener(`mousemove`,t),document.removeEventListener(`mouseup`,n)};document.addEventListener(`mousemove`,t),document.addEventListener(`mouseup`,n)}startTouchSplitDrag(e){let t=e.touches[0];if(!t)return;e.preventDefault(),e.stopPropagation(),this.setSplitPositionFromClientX(t.clientX);let n=e=>{let t=e.touches[0];t&&(e.preventDefault(),this.setSplitPositionFromClientX(t.clientX))},r=()=>{document.removeEventListener(`touchmove`,n),document.removeEventListener(`touchend`,r),document.removeEventListener(`touchcancel`,r)};document.addEventListener(`touchmove`,n,{passive:!1}),document.addEventListener(`touchend`,r),document.addEventListener(`touchcancel`,r)}setSplitPositionFromClientX(e){if(!this.splitPanel)return;let t=this.splitPanel.getBoundingClientRect();if(t.width<=0)return;let n=kc((e-t.left)/t.width*100);this.splitPos=n,this.splitPanel.position=n,this.splitPanel.setAttribute(`position`,String(n)),Dc(n)}onReposition(e){let t=kc(e.target.position??vc);typeof t==`number`&&(this.splitPos=t,Dc(t))}parseVersions(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>!!e&&typeof e.label==`string`&&typeof e.href==`string`):[]}catch{return[]}}onVersionChange(e){let t=e.detail?.item;t?.value&&(window.location.href=t.value)}currentVersionLabel(){return this.versions.find(e=>e.active||e.label===this.currentVersion)?.label||this.currentVersion||this.versions[0]?.label||`Version`}currentVersionTriggerLabel(){return`Version: ${this.currentVersionLabel()}`}render(){return S` - ${this.embedded?null:S` + `}};hc.styles=[O,nc],hc.dependencies={"sl-icon":ir,"sl-popup":R,"sl-spinner":go},E([M(`slot:not([name])`)],hc.prototype,`defaultSlot`,2),E([M(`.menu-item`)],hc.prototype,`menuItem`,2),E([A()],hc.prototype,`type`,2),E([A({type:Boolean,reflect:!0})],hc.prototype,`checked`,2),E([A()],hc.prototype,`value`,2),E([A({type:Boolean,reflect:!0})],hc.prototype,`loading`,2),E([A({type:Boolean,reflect:!0})],hc.prototype,`disabled`,2),E([D(`checked`)],hc.prototype,`handleCheckedChange`,1),E([D(`disabled`)],hc.prototype,`handleDisabledChange`,1),E([D(`type`)],hc.prototype,`handleTypeChange`,1),hc.define(`sl-menu-item`);function G(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var gc=`pp-split-position`,_c=20,vc=1,yc=`pb33f-theme`,bc=`pb33f-base-theme`,xc=`pb33f-theme-change`;function Sc(e){try{return localStorage.getItem(e)}catch{return null}}function Cc(e,t){try{localStorage.setItem(e,t)}catch{}}function wc(e,t){e.setAttribute(`label`,t),e.setAttribute(`title`,t),e.setAttribute(`aria-label`,t)}function Tc(){try{let e=sessionStorage.getItem(gc);return Dc(e?parseFloat(e):_c)}catch{return _c}}function Ec(e){try{sessionStorage.setItem(gc,String(e))}catch{}}function Dc(e){return!Number.isFinite(e)||e100?_c:e}function Oc(e){return Number.isFinite(e)?Math.min(100,Math.max(vc,e)):_c}var kc=class extends T{constructor(...e){super(...e),this.title=``,this.splitPos=_c,this.currentVersion=``,this.versions=[],this.embedded=!1,this.splitPanel=null,this.splitDivider=null,this.splitHandle=null,this.handleSplitReposition=e=>this.onReposition(e),this.handleSplitHostPointerDown=e=>this.startHostPointerSplitDrag(e),this.handleSplitHostMouseDown=e=>this.startHostMouseSplitDrag(e),this.handleSplitPointerDown=e=>this.startPointerSplitDrag(e),this.handleSplitMouseDown=e=>this.startMouseSplitDrag(e),this.handleSplitTouchStart=e=>this.startTouchSplitDrag(e)}static{this.styles=[Hs,Us]}connectedCallback(){super.connectedCallback(),this.title=this.getAttribute(`data-title`)||document.title||`API Documentation`,this.currentVersion=document.body?.dataset.ppCurrentVersion||``,this.versions=this.parseVersions(document.body?.dataset.ppVersions),this.embedded=document.documentElement.hasAttribute(`data-pp-embedded-docs`)||document.body?.dataset.ppEmbeddedDocs===`true`,this.toggleAttribute(`embedded`,this.embedded),this.splitPos=Tc()}disconnectedCallback(){this.splitPanel?.removeEventListener(`sl-reposition`,this.handleSplitReposition),this.splitPanel?.removeEventListener(`pointerdown`,this.handleSplitHostPointerDown),this.splitPanel?.removeEventListener(`mousedown`,this.handleSplitHostMouseDown),this.detachSplitDragTarget(this.splitDivider),this.detachSplitDragTarget(this.splitHandle),this.splitPanel=null,this.splitDivider=null,this.splitHandle=null,super.disconnectedCallback()}updated(){this.syncHeader(),this.syncThemeControls(),this.syncSplitPanel()}syncHeader(){let e=this.renderRoot?.querySelector(`.doc-logo-link`);e&&(e.href=Ys())}activeTheme(){let e=Sc(yc);if(e===`light`||e===`tektronix`)return e;let t=document.documentElement.getAttribute(`theme`);return t===`light`||t===`tektronix`?t:`dark`}baseTheme(){let e=Sc(bc);return e===`light`?`light`:e===`dark`?`dark`:this.activeTheme()===`light`?`light`:`dark`}applyTheme(e,t=this.baseTheme()){let n=e===`tektronix`?t:e;Cc(yc,e),Cc(bc,n),document.documentElement.setAttribute(`theme`,e),e===`light`?document.documentElement.classList.remove(`sl-theme-dark`):document.documentElement.classList.add(`sl-theme-dark`),window.dispatchEvent(new CustomEvent(xc,{detail:{theme:e}})),this.syncThemeControls()}toggleBaseTheme(){let e=this.baseTheme()===`dark`?`light`:`dark`;this.applyTheme(e,e)}toggleTektronix(){let e=this.baseTheme();this.applyTheme(this.activeTheme()===`tektronix`?e:`tektronix`,e)}syncThemeControls(){let e=this.renderRoot?.querySelector(`.theme-mode-toggle`),t=this.renderRoot?.querySelector(`.theme-tektronix-toggle`),n=this.baseTheme(),r=this.activeTheme();if(e){let t=n===`dark`?`Switch to Roger Mode (light)`:`Switch to PB33F Mode (dark)`;e.querySelector(`sl-icon`)?.setAttribute(`name`,n===`dark`?`sun`:`moon`),wc(e,t),e.onclick=()=>this.toggleBaseTheme()}t&&(wc(t,r===`tektronix`?`Disable Tektronix 4010 Mode`:`Enable Tektronix 4010 Mode`),t.classList.toggle(`tek-active`,r===`tektronix`),t.onclick=()=>this.toggleTektronix())}syncSplitPanel(){let e=this.renderRoot?.querySelector(`sl-split-panel`);e&&(this.splitPanel!==e&&(this.splitPanel?.removeEventListener(`sl-reposition`,this.handleSplitReposition),this.splitPanel?.removeEventListener(`pointerdown`,this.handleSplitHostPointerDown),this.splitPanel?.removeEventListener(`mousedown`,this.handleSplitHostMouseDown),e.addEventListener(`sl-reposition`,this.handleSplitReposition),e.addEventListener(`pointerdown`,this.handleSplitHostPointerDown),e.addEventListener(`mousedown`,this.handleSplitHostMouseDown),this.splitPanel=e),e.position!==this.splitPos&&(e.position=this.splitPos),e.getAttribute(`position`)!==String(this.splitPos)&&e.setAttribute(`position`,String(this.splitPos)),this.syncSplitDivider(e),e.updateComplete?.then(()=>this.syncSplitDivider(e)),this.syncSplitHandle())}syncSplitDivider(e){let t=e.shadowRoot?.querySelector(`.divider`);!t||this.splitDivider===t||(this.detachSplitDragTarget(this.splitDivider),this.attachSplitDragTarget(t),this.splitDivider=t)}syncSplitHandle(){let e=this.renderRoot?.querySelector(`sl-icon.divider-vert`);!e||this.splitHandle===e||(this.detachSplitDragTarget(this.splitHandle),this.attachSplitDragTarget(e),this.splitHandle=e)}attachSplitDragTarget(e){e.addEventListener(`pointerdown`,this.handleSplitPointerDown),e.addEventListener(`mousedown`,this.handleSplitMouseDown),e.addEventListener(`touchstart`,this.handleSplitTouchStart,{passive:!1}),e.setAttribute(`data-pp-resize-ready`,`true`)}detachSplitDragTarget(e){e?.removeEventListener(`pointerdown`,this.handleSplitPointerDown),e?.removeEventListener(`mousedown`,this.handleSplitMouseDown),e?.removeEventListener(`touchstart`,this.handleSplitTouchStart),e?.removeAttribute(`data-pp-resize-ready`)}isNearSplitDivider(e){let t=this.splitDivider?.getBoundingClientRect()||this.splitHandle?.getBoundingClientRect();return t?e>=t.left-8&&e<=t.right+8:!1}startHostPointerSplitDrag(e){this.isNearSplitDivider(e.clientX)&&this.startPointerSplitDrag(e)}startHostMouseSplitDrag(e){this.isNearSplitDivider(e.clientX)&&this.startMouseSplitDrag(e)}startPointerSplitDrag(e){if(e.button!==0)return;e.preventDefault(),e.stopPropagation(),e.currentTarget?.setPointerCapture?.(e.pointerId),this.setSplitPositionFromClientX(e.clientX);let t=e=>{e.preventDefault(),this.setSplitPositionFromClientX(e.clientX)},n=()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n),document.removeEventListener(`pointercancel`,n)};document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n),document.addEventListener(`pointercancel`,n)}startMouseSplitDrag(e){if(e.button!==0)return;e.preventDefault(),e.stopPropagation(),this.setSplitPositionFromClientX(e.clientX);let t=e=>{e.preventDefault(),this.setSplitPositionFromClientX(e.clientX)},n=()=>{document.removeEventListener(`mousemove`,t),document.removeEventListener(`mouseup`,n)};document.addEventListener(`mousemove`,t),document.addEventListener(`mouseup`,n)}startTouchSplitDrag(e){let t=e.touches[0];if(!t)return;e.preventDefault(),e.stopPropagation(),this.setSplitPositionFromClientX(t.clientX);let n=e=>{let t=e.touches[0];t&&(e.preventDefault(),this.setSplitPositionFromClientX(t.clientX))},r=()=>{document.removeEventListener(`touchmove`,n),document.removeEventListener(`touchend`,r),document.removeEventListener(`touchcancel`,r)};document.addEventListener(`touchmove`,n,{passive:!1}),document.addEventListener(`touchend`,r),document.addEventListener(`touchcancel`,r)}setSplitPositionFromClientX(e){if(!this.splitPanel)return;let t=this.splitPanel.getBoundingClientRect();if(t.width<=0)return;let n=Oc((e-t.left)/t.width*100);this.splitPos=n,this.splitPanel.position=n,this.splitPanel.setAttribute(`position`,String(n)),Ec(n)}onReposition(e){let t=Oc(e.target.position??_c);typeof t==`number`&&(this.splitPos=t,Ec(t))}parseVersions(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>!!e&&typeof e.label==`string`&&typeof e.href==`string`):[]}catch{return[]}}onVersionChange(e){let t=e.detail?.item;t?.value&&(window.location.href=t.value)}currentVersionLabel(){return this.versions.find(e=>e.active||e.label===this.currentVersion)?.label||this.currentVersion||this.versions[0]?.label||`Version`}currentVersionTriggerLabel(){return`Version: ${this.currentVersionLabel()}`}render(){return C` + ${this.embedded?null:C`
- ${this.versions.length?S` + ${this.versions.length?C`
${this.currentVersionTriggerLabel()} - ${this.versions.map(e=>S` - + ${this.versions.map(e=>C` + ${e.label} `)} @@ -4126,7 +4126,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value
- `}};W([A()],Ac.prototype,`title`,void 0),W([A()],Ac.prototype,`splitPos`,void 0),W([A()],Ac.prototype,`currentVersion`,void 0),W([A()],Ac.prototype,`versions`,void 0),W([A()],Ac.prototype,`embedded`,void 0),Ac=W([O(`pp-layout`)],Ac);var jc=x` + `}};G([j()],kc.prototype,`title`,void 0),G([j()],kc.prototype,`splitPos`,void 0),G([j()],kc.prototype,`currentVersion`,void 0),G([j()],kc.prototype,`versions`,void 0),G([j()],kc.prototype,`embedded`,void 0),kc=G([k(`pp-layout`)],kc);var Ac=S` :host { display: inline-block; } @@ -4244,7 +4244,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value color: var(--sl-input-required-content-color); margin-inline-start: var(--sl-input-required-content-offset); } -`,Mc=(e=`value`)=>(t,n)=>{let r=t.constructor,i=r.prototype.attributeChangedCallback;r.prototype.attributeChangedCallback=function(t,a,o){let s=r.getPropertyOptions(e);if(t===(typeof s.attribute==`string`?s.attribute:e)){let t=s.converter||xt,r=(typeof t==`function`?t:t?.fromAttribute??xt.fromAttribute)(o,s.type);this[e]!==r&&(this[n]=r)}i.call(this,t,a,o)}},Nc=x` +`,jc=(e=`value`)=>(t,n)=>{let r=t.constructor,i=r.prototype.attributeChangedCallback;r.prototype.attributeChangedCallback=function(t,a,o){let s=r.getPropertyOptions(e);if(t===(typeof s.attribute==`string`?s.attribute:e)){let t=s.converter||bt,r=(typeof t==`function`?t:t?.fromAttribute??bt.fromAttribute)(o,s.type);this[e]!==r&&(this[n]=r)}i.call(this,t,a,o)}},Mc=S` .form-control .form-control__label { display: none; } @@ -4300,22 +4300,22 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value .form-control--has-help-text.form-control--radio-group .form-control__help-text { margin-top: var(--sl-spacing-2x-small); } -`,Pc=sr(class extends cr{constructor(e){if(super(e),e.type!==or.PROPERTY&&e.type!==or.ATTRIBUTE&&e.type!==or.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!Qn(e))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(e,[t]){if(t===Kt||t===C)return t;let n=e.element,r=e.name;if(e.type===or.PROPERTY){if(t===n[r])return Kt}else if(e.type===or.BOOLEAN_ATTRIBUTE){if(!!t===n.hasAttribute(r))return Kt}else if(e.type===or.ATTRIBUTE&&n.getAttribute(r)===t+``)return Kt;return er(e),t}}),G=class extends M{constructor(){super(...arguments),this.formControlController=new Co(this,{value:e=>e.checked?e.value||`on`:void 0,defaultValue:e=>e.defaultChecked,setValue:(e,t)=>e.checked=t}),this.hasSlotController=new ao(this,`help-text`),this.hasFocus=!1,this.title=``,this.name=``,this.size=`medium`,this.disabled=!1,this.checked=!1,this.indeterminate=!1,this.defaultChecked=!1,this.form=``,this.required=!1,this.helpText=``}get validity(){return this.input.validity}get validationMessage(){return this.input.validationMessage}firstUpdated(){this.formControlController.updateValidity()}handleClick(){this.checked=!this.checked,this.indeterminate=!1,this.emit(`sl-change`)}handleBlur(){this.hasFocus=!1,this.emit(`sl-blur`)}handleInput(){this.emit(`sl-input`)}handleInvalid(e){this.formControlController.setValidity(!1),this.formControlController.emitInvalidEvent(e)}handleFocus(){this.hasFocus=!0,this.emit(`sl-focus`)}handleDisabledChange(){this.formControlController.setValidity(this.disabled)}handleStateChange(){this.input.checked=this.checked,this.input.indeterminate=this.indeterminate,this.formControlController.updateValidity()}click(){this.input.click()}focus(e){this.input.focus(e)}blur(){this.input.blur()}checkValidity(){return this.input.checkValidity()}getForm(){return this.formControlController.getForm()}reportValidity(){return this.input.reportValidity()}setCustomValidity(e){this.input.setCustomValidity(e),this.formControlController.updateValidity()}render(){let e=this.hasSlotController.test(`help-text`),t=this.helpText?!0:!!e;return S` +`,Nc=or(class extends sr{constructor(e){if(super(e),e.type!==ar.PROPERTY&&e.type!==ar.ATTRIBUTE&&e.type!==ar.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!Zn(e))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(e,[t]){if(t===Gt||t===w)return t;let n=e.element,r=e.name;if(e.type===ar.PROPERTY){if(t===n[r])return Gt}else if(e.type===ar.BOOLEAN_ATTRIBUTE){if(!!t===n.hasAttribute(r))return Gt}else if(e.type===ar.ATTRIBUTE&&n.getAttribute(r)===t+``)return Gt;return $n(e),t}}),K=class extends N{constructor(){super(...arguments),this.formControlController=new So(this,{value:e=>e.checked?e.value||`on`:void 0,defaultValue:e=>e.defaultChecked,setValue:(e,t)=>e.checked=t}),this.hasSlotController=new io(this,`help-text`),this.hasFocus=!1,this.title=``,this.name=``,this.size=`medium`,this.disabled=!1,this.checked=!1,this.indeterminate=!1,this.defaultChecked=!1,this.form=``,this.required=!1,this.helpText=``}get validity(){return this.input.validity}get validationMessage(){return this.input.validationMessage}firstUpdated(){this.formControlController.updateValidity()}handleClick(){this.checked=!this.checked,this.indeterminate=!1,this.emit(`sl-change`)}handleBlur(){this.hasFocus=!1,this.emit(`sl-blur`)}handleInput(){this.emit(`sl-input`)}handleInvalid(e){this.formControlController.setValidity(!1),this.formControlController.emitInvalidEvent(e)}handleFocus(){this.hasFocus=!0,this.emit(`sl-focus`)}handleDisabledChange(){this.formControlController.setValidity(this.disabled)}handleStateChange(){this.input.checked=this.checked,this.input.indeterminate=this.indeterminate,this.formControlController.updateValidity()}click(){this.input.click()}focus(e){this.input.focus(e)}blur(){this.input.blur()}checkValidity(){return this.input.checkValidity()}getForm(){return this.formControlController.getForm()}reportValidity(){return this.input.reportValidity()}setCustomValidity(e){this.input.setCustomValidity(e),this.formControlController.updateValidity()}render(){let e=this.hasSlotController.test(`help-text`),t=this.helpText?!0:!!e;return C`
- `}};G.styles=[D,Nc,jc],G.dependencies={"sl-icon":ar},T([j(`input[type="checkbox"]`)],G.prototype,`input`,2),T([A()],G.prototype,`hasFocus`,2),T([k()],G.prototype,`title`,2),T([k()],G.prototype,`name`,2),T([k()],G.prototype,`value`,2),T([k({reflect:!0})],G.prototype,`size`,2),T([k({type:Boolean,reflect:!0})],G.prototype,`disabled`,2),T([k({type:Boolean,reflect:!0})],G.prototype,`checked`,2),T([k({type:Boolean,reflect:!0})],G.prototype,`indeterminate`,2),T([Mc(`checked`)],G.prototype,`defaultChecked`,2),T([k({reflect:!0})],G.prototype,`form`,2),T([k({type:Boolean,reflect:!0})],G.prototype,`required`,2),T([k({attribute:`help-text`})],G.prototype,`helpText`,2),T([E(`disabled`,{waitUntilFirstUpdate:!0})],G.prototype,`handleDisabledChange`,1),T([E([`checked`,`indeterminate`],{waitUntilFirstUpdate:!0})],G.prototype,`handleStateChange`,1),G.define(`sl-checkbox`);var Fc=x` + `}};K.styles=[O,Mc,Ac],K.dependencies={"sl-icon":ir},E([M(`input[type="checkbox"]`)],K.prototype,`input`,2),E([j()],K.prototype,`hasFocus`,2),E([A()],K.prototype,`title`,2),E([A()],K.prototype,`name`,2),E([A()],K.prototype,`value`,2),E([A({reflect:!0})],K.prototype,`size`,2),E([A({type:Boolean,reflect:!0})],K.prototype,`disabled`,2),E([A({type:Boolean,reflect:!0})],K.prototype,`checked`,2),E([A({type:Boolean,reflect:!0})],K.prototype,`indeterminate`,2),E([jc(`checked`)],K.prototype,`defaultChecked`,2),E([A({reflect:!0})],K.prototype,`form`,2),E([A({type:Boolean,reflect:!0})],K.prototype,`required`,2),E([A({attribute:`help-text`})],K.prototype,`helpText`,2),E([D(`disabled`,{waitUntilFirstUpdate:!0})],K.prototype,`handleDisabledChange`,1),E([D([`checked`,`indeterminate`],{waitUntilFirstUpdate:!0})],K.prototype,`handleStateChange`,1),K.define(`sl-checkbox`);var Pc=S` :host { display: block; padding: var(--global-padding); @@ -4720,7 +4720,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value text-decoration: none; } -`,Ic=x` +`,Fc=S` /* Direct sl-tooltip styling (used by pp-raw-viewer-btn etc.) */ sl-tooltip::part(base){ font-family: var(--font-stack), monospace; @@ -4743,8 +4743,8 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value sl-tooltip::part(base__arrow){ background-color: var(--secondary-color); } -`,K=class extends w{constructor(...e){super(...e),this.navJson=``,this.pagesJson=``,this.modelsJson=``,this.webhooksJson=``,this.activeSlug=``,this.docsExpiresAt=``,this.archiveExportUrl=``,this.hasContentPagesFallback=!1,this.tags=[],this.pages=[],this.modelGroups=[],this.webhooks=[],this.expiryTick=0,this.hostedArchiveControls=!1,this.archiveFormat=`zip`,this.includeDiagnostics=!1,this.includeAIDocs=!1,this.archiveExporting=!1,this.archiveExportTargetOrigin=``,this.archiveExportRequestId=0,this.activeArchiveExportRequestId=0,this.loggedEmptyState=!1,this.loggedContentState=!1,this.hostMessageHandler=e=>this.handleHostMessage(e)}static{this.styles=[Fc,Ic]}logPerf(e,t){let n=globalThis.__PP_LOG;typeof n==`function`&&n(e,t)}previewHoldEnabled(){return this.getAttribute(`data-pp-preview-hold`)===`true`}developerMode(){return document.body?.dataset.ppDeveloperMode===`true`}hasHydratedNav(){return this.hasAttribute(`data-nav`)||this.hasAttribute(`data-pages`)||this.hasAttribute(`data-models`)||this.hasAttribute(`data-webhooks`)||this.hasAttribute(`data-pp-nav-cached`)}hasNavContent(){return this.tags.length>0||this.pages.length>0||this.modelGroups.length>0||this.webhooks.length>0}archiveControlsEnabled(){return this.hostedArchiveControls||this.archiveExportUrl.trim()!==``}ensureExpiryTimer(){let e=Date.parse(this.docsExpiresAt);if(Number.isNaN(e)){this.stopExpiryTimer();return}if(Date.now()>=e){this.stopExpiryTimer();return}this.expiryTimer===void 0&&(this.expiryTimer=window.setInterval(()=>{this.expiryTick++,Date.now()>=e&&this.stopExpiryTimer()},1e3))}stopExpiryTimer(){this.expiryTimer!==void 0&&(window.clearInterval(this.expiryTimer),this.expiryTimer=void 0)}docsExpiryLabel(e){this.expiryTick;let t=Math.floor(Math.max(0,e-Date.now())/1e3);if(t<=0)return S`docs expired!`;let n=Math.floor(t/60);return n>=2?S`docs expire in ${n} minutes`:n===1?S`docs expire in under two minutes`:S`docs expiring in ${t} second${t===1?``:`s`}`}renderDocsExpiry(){let e=Date.parse(this.docsExpiresAt);if(Number.isNaN(e))return C;let t=this.docsExpiryLabel(e),n=e-Date.now(),r=n<=0;return S` -
${t}
`}renderHostedArchiveControls(){return this.archiveControlsEnabled()?S` +`,q=class extends T{constructor(...e){super(...e),this.navJson=``,this.pagesJson=``,this.modelsJson=``,this.webhooksJson=``,this.activeSlug=``,this.docsExpiresAt=``,this.archiveExportUrl=``,this.hasContentPagesFallback=!1,this.tags=[],this.pages=[],this.modelGroups=[],this.webhooks=[],this.expiryTick=0,this.hostedArchiveControls=!1,this.archiveFormat=`zip`,this.includeDiagnostics=!1,this.includeAIDocs=!1,this.archiveExporting=!1,this.archiveExportTargetOrigin=``,this.archiveExportRequestId=0,this.activeArchiveExportRequestId=0,this.loggedEmptyState=!1,this.loggedContentState=!1,this.hostMessageHandler=e=>this.handleHostMessage(e)}static{this.styles=[Pc,Fc]}logPerf(e,t){let n=globalThis.__PP_LOG;typeof n==`function`&&n(e,t)}previewHoldEnabled(){return this.getAttribute(`data-pp-preview-hold`)===`true`}developerMode(){return document.body?.dataset.ppDeveloperMode===`true`}hasHydratedNav(){return this.hasAttribute(`data-nav`)||this.hasAttribute(`data-pages`)||this.hasAttribute(`data-models`)||this.hasAttribute(`data-webhooks`)||this.hasAttribute(`data-pp-nav-cached`)}hasNavContent(){return this.tags.length>0||this.pages.length>0||this.modelGroups.length>0||this.webhooks.length>0}archiveControlsEnabled(){return this.hostedArchiveControls||this.archiveExportUrl.trim()!==``}ensureExpiryTimer(){let e=Date.parse(this.docsExpiresAt);if(Number.isNaN(e)){this.stopExpiryTimer();return}if(Date.now()>=e){this.stopExpiryTimer();return}this.expiryTimer===void 0&&(this.expiryTimer=window.setInterval(()=>{this.expiryTick++,Date.now()>=e&&this.stopExpiryTimer()},1e3))}stopExpiryTimer(){this.expiryTimer!==void 0&&(window.clearInterval(this.expiryTimer),this.expiryTimer=void 0)}docsExpiryLabel(e){this.expiryTick;let t=Math.floor(Math.max(0,e-Date.now())/1e3);if(t<=0)return C`docs expired!`;let n=Math.floor(t/60);return n>=2?C`docs expire in ${n} minutes`:n===1?C`docs expire in under two minutes`:C`docs expiring in ${t} second${t===1?``:`s`}`}renderDocsExpiry(){let e=Date.parse(this.docsExpiresAt);if(Number.isNaN(e))return w;let t=this.docsExpiryLabel(e),n=e-Date.now(),r=n<=0;return C` +
${t}
`}renderHostedArchiveControls(){return this.archiveControlsEnabled()?C`
export documentation
@@ -4788,62 +4788,62 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value aria-busy=${this.archiveExporting?`true`:`false`} @click=${this.requestArchiveExport} aria-label=${this.archiveExporting?`Exporting documentation archive`:`Download documentation archive`}> - ${this.archiveExporting?S``:`export`} + ${this.archiveExporting?C``:`export`}
- `:C}handleArchiveFormatSelect(e){let t=e.detail?.item?.value;(t===`zip`||t===`tar.gz`)&&(this.archiveFormat=t)}handleIncludeDiagnosticsChange(e){this.includeDiagnostics=!!e.target?.checked}handleIncludeAIDocsChange(e){this.includeAIDocs=!!e.target?.checked}canRequestHostedArchiveExport(){return this.hostedArchiveControls&&this.archiveExportTargetOrigin!==``&&!!window.parent}isEmbeddedInHost(){return!!(window.parent&&window.parent!==window)}postHostedArchiveExport(e){return this.canRequestHostedArchiveExport()?(window.parent.postMessage({type:`ppress:export`,requestId:e,format:this.archiveFormat,diagnostics:this.includeDiagnostics,llm:this.includeAIDocs},this.archiveExportTargetOrigin),!0):!1}archiveExportURL(e){let t=new URL(e,window.location.href);return t.searchParams.set(`format`,this.archiveFormat),this.includeDiagnostics&&t.searchParams.set(`diagnostics`,`1`),this.includeAIDocs&&t.searchParams.set(`llm`,`1`),t}archiveFilenameFromResponse(e,t){let n=e.headers.get(`content-disposition`)||``,r=n.match(/filename\*=UTF-8''([^;]+)/i);if(r?.[1])try{return decodeURIComponent(r[1].replace(/^"|"$/g,``))}catch{return r[1].replace(/^"|"$/g,``)}let i=n.match(/filename="?([^";]+)"?/i);return i?.[1]?i[1]:`printing-press-docs.${t}`}async archiveErrorFromResponse(e){let t=await e.text();try{return JSON.parse(t)}catch{return Error(t||e.statusText||`Unable to export documentation archive.`)}}downloadArchiveBlob(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),window.setTimeout(()=>URL.revokeObjectURL(n),500)}async requestDirectArchiveExport(e){let t=this.archiveFormat,n=this.archiveExportURL(e),r=await fetch(n.toString(),{method:`GET`,credentials:`include`});if(!r.ok)throw await this.archiveErrorFromResponse(r);let i=await r.blob();this.downloadArchiveBlob(i,this.archiveFilenameFromResponse(r,t))}beginArchiveExport(){return this.archiveExporting=!0,this.activeArchiveExportRequestId=++this.archiveExportRequestId,this.activeArchiveExportRequestId}completeArchiveExport(e){e!==void 0&&this.activeArchiveExportRequestId!==e||(this.archiveExporting=!1,this.activeArchiveExportRequestId=0)}async requestArchiveExport(){if(this.archiveExporting)return;if(this.canRequestHostedArchiveExport()){let e=this.beginArchiveExport();this.postHostedArchiveExport(e)||this.completeArchiveExport(e);return}let e=this.archiveExportUrl.trim();if(e&&!this.isEmbeddedInHost()){let t=this.beginArchiveExport();try{await this.requestDirectArchiveExport(e)}catch(e){console.error(`Unable to export documentation archive:`,e)}finally{this.completeArchiveExport(t)}}}handleHostMessage(e){if(e.source!==window.parent)return;let t=e.data;if(!(!t||typeof t!=`object`)){if(t.type===`doctor:archive-controls`){this.hostedArchiveControls=t.enabled===!0,this.archiveExportTargetOrigin=this.hostedArchiveControls?e.origin:``;return}if(t.type===`doctor:archive-export-complete`||t.type===`doctor:archive-export-error`){if(this.archiveExportTargetOrigin&&e.origin!==this.archiveExportTargetOrigin)return;this.completeArchiveExport(typeof t.requestId==`number`?t.requestId:void 0),t.type===`doctor:archive-export-error`&&t.message&&console.error(`Unable to export documentation archive:`,t.message)}}}renderFallbackNav(){return S` + `:w}handleArchiveFormatSelect(e){let t=e.detail?.item?.value;(t===`zip`||t===`tar.gz`)&&(this.archiveFormat=t)}handleIncludeDiagnosticsChange(e){this.includeDiagnostics=!!e.target?.checked}handleIncludeAIDocsChange(e){this.includeAIDocs=!!e.target?.checked}canRequestHostedArchiveExport(){return this.hostedArchiveControls&&this.archiveExportTargetOrigin!==``&&!!window.parent}isEmbeddedInHost(){return!!(window.parent&&window.parent!==window)}postHostedArchiveExport(e){return this.canRequestHostedArchiveExport()?(window.parent.postMessage({type:`ppress:export`,requestId:e,format:this.archiveFormat,diagnostics:this.includeDiagnostics,llm:this.includeAIDocs},this.archiveExportTargetOrigin),!0):!1}archiveExportURL(e){let t=new URL(e,window.location.href);return t.searchParams.set(`format`,this.archiveFormat),this.includeDiagnostics&&t.searchParams.set(`diagnostics`,`1`),this.includeAIDocs&&t.searchParams.set(`llm`,`1`),t}archiveFilenameFromResponse(e,t){let n=e.headers.get(`content-disposition`)||``,r=n.match(/filename\*=UTF-8''([^;]+)/i);if(r?.[1])try{return decodeURIComponent(r[1].replace(/^"|"$/g,``))}catch{return r[1].replace(/^"|"$/g,``)}let i=n.match(/filename="?([^";]+)"?/i);return i?.[1]?i[1]:`printing-press-docs.${t}`}async archiveErrorFromResponse(e){let t=await e.text();try{return JSON.parse(t)}catch{return Error(t||e.statusText||`Unable to export documentation archive.`)}}downloadArchiveBlob(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),window.setTimeout(()=>URL.revokeObjectURL(n),500)}async requestDirectArchiveExport(e){let t=this.archiveFormat,n=this.archiveExportURL(e),r=await fetch(n.toString(),{method:`GET`,credentials:`include`});if(!r.ok)throw await this.archiveErrorFromResponse(r);let i=await r.blob();this.downloadArchiveBlob(i,this.archiveFilenameFromResponse(r,t))}beginArchiveExport(){return this.archiveExporting=!0,this.activeArchiveExportRequestId=++this.archiveExportRequestId,this.activeArchiveExportRequestId}completeArchiveExport(e){e!==void 0&&this.activeArchiveExportRequestId!==e||(this.archiveExporting=!1,this.activeArchiveExportRequestId=0)}async requestArchiveExport(){if(this.archiveExporting)return;if(this.canRequestHostedArchiveExport()){let e=this.beginArchiveExport();this.postHostedArchiveExport(e)||this.completeArchiveExport(e);return}let e=this.archiveExportUrl.trim();if(e&&!this.isEmbeddedInHost()){let t=this.beginArchiveExport();try{await this.requestDirectArchiveExport(e)}catch(e){console.error(`Unable to export documentation archive:`,e)}finally{this.completeArchiveExport(t)}}}handleHostMessage(e){if(e.source!==window.parent)return;let t=e.data;if(!(!t||typeof t!=`object`)){if(t.type===`doctor:archive-controls`){this.hostedArchiveControls=t.enabled===!0,this.archiveExportTargetOrigin=this.hostedArchiveControls?e.origin:``;return}if(t.type===`doctor:archive-export-complete`||t.type===`doctor:archive-export-error`){if(this.archiveExportTargetOrigin&&e.origin!==this.archiveExportTargetOrigin)return;this.completeArchiveExport(typeof t.requestId==`number`?t.requestId:void 0),t.type===`doctor:archive-export-error`&&t.message&&console.error(`Unable to export documentation archive:`,t.message)}}}renderFallbackNav(){return C` - `}connectedCallback(){super.connectedCallback(),window.addEventListener(`message`,this.hostMessageHandler),this.ensureExpiryTimer();let e=this.querySelector(`.pp-nav-preview`);this.logPerf(`nav:connected`,{activeSlug:this.activeSlug,cached:this.hasAttribute(`data-pp-nav-cached`),preview:!!e,previewHold:this.previewHoldEnabled()})}disconnectedCallback(){window.removeEventListener(`message`,this.hostMessageHandler),this.stopExpiryTimer(),super.disconnectedCallback()}willUpdate(e){if(e.has(`navJson`))try{this.tags=this.navJson&&JSON.parse(this.navJson)||[]}catch{this.tags=[]}if(e.has(`pagesJson`))try{this.pages=this.pagesJson&&JSON.parse(this.pagesJson)||[]}catch{this.pages=[]}if(e.has(`modelsJson`))try{this.modelGroups=this.modelsJson&&JSON.parse(this.modelsJson)||[]}catch{this.modelGroups=[]}if(e.has(`webhooksJson`))try{this.webhooks=this.webhooksJson&&JSON.parse(this.webhooksJson)||[]}catch{this.webhooks=[]}e.has(`docsExpiresAt`)&&this.ensureExpiryTimer()}updated(){let e=this.tags.length>0||this.pages.length>0||this.modelGroups.length>0||this.webhooks.length>0;if(!e&&!this.loggedEmptyState&&(this.loggedEmptyState=!0,this.logPerf(`nav:empty-render`)),e&&!this.loggedContentState){if(this.loggedContentState=!0,this.logPerf(`nav:content-render`,{tags:this.tags.length,pages:this.pages.length,modelGroups:this.modelGroups.length,webhooks:this.webhooks.length}),this.previewHoldEnabled()){this.logPerf(`nav-preview:hold-active`,{source:`shadow-nav`});return}let e=this.querySelector(`.pp-nav-preview`);e&&(e.remove(),this.logPerf(`nav-preview:removed`,{source:`shadow-nav`}))}}render(){return this.previewHoldEnabled()?S` - `:!this.hasNavContent()&&!this.hasHydratedNav()?this.renderFallbackNav():S` + `}connectedCallback(){super.connectedCallback(),window.addEventListener(`message`,this.hostMessageHandler),this.ensureExpiryTimer();let e=this.querySelector(`.pp-nav-preview`);this.logPerf(`nav:connected`,{activeSlug:this.activeSlug,cached:this.hasAttribute(`data-pp-nav-cached`),preview:!!e,previewHold:this.previewHoldEnabled()})}disconnectedCallback(){window.removeEventListener(`message`,this.hostMessageHandler),this.stopExpiryTimer(),super.disconnectedCallback()}willUpdate(e){if(e.has(`navJson`))try{this.tags=this.navJson&&JSON.parse(this.navJson)||[]}catch{this.tags=[]}if(e.has(`pagesJson`))try{this.pages=this.pagesJson&&JSON.parse(this.pagesJson)||[]}catch{this.pages=[]}if(e.has(`modelsJson`))try{this.modelGroups=this.modelsJson&&JSON.parse(this.modelsJson)||[]}catch{this.modelGroups=[]}if(e.has(`webhooksJson`))try{this.webhooks=this.webhooksJson&&JSON.parse(this.webhooksJson)||[]}catch{this.webhooks=[]}e.has(`docsExpiresAt`)&&this.ensureExpiryTimer()}updated(){let e=this.tags.length>0||this.pages.length>0||this.modelGroups.length>0||this.webhooks.length>0;if(!e&&!this.loggedEmptyState&&(this.loggedEmptyState=!0,this.logPerf(`nav:empty-render`)),e&&!this.loggedContentState){if(this.loggedContentState=!0,this.logPerf(`nav:content-render`,{tags:this.tags.length,pages:this.pages.length,modelGroups:this.modelGroups.length,webhooks:this.webhooks.length}),this.previewHoldEnabled()){this.logPerf(`nav-preview:hold-active`,{source:`shadow-nav`});return}let e=this.querySelector(`.pp-nav-preview`);e&&(e.remove(),this.logPerf(`nav-preview:removed`,{source:`shadow-nav`}))}}render(){return this.previewHoldEnabled()?C` + `:!this.hasNavContent()&&!this.hasHydratedNav()?this.renderFallbackNav():C` ${this.renderHostedArchiveControls()} ${this.renderDocsExpiry()} - + API OVERVIEW - ${this.developerMode()?S` + ${this.developerMode()?C` + href=${qs(`diagnostics.html`)}> DIAGNOSTICS - `:C} - ${this.pages.length?S` + `:w} + ${this.pages.length?C` - `:C} - ${this.tags.length?S` + `:w} + ${this.tags.length?C` - `:C} - ${this.modelGroups.length?S` + `:w} + ${this.modelGroups.length?C` - `:C} - ${this.webhooks.length?S` + `:w} + ${this.webhooks.length?C` - `:C} - `}};W([k({attribute:`data-nav`})],K.prototype,`navJson`,void 0),W([k({attribute:`data-pages`})],K.prototype,`pagesJson`,void 0),W([k({attribute:`data-models`})],K.prototype,`modelsJson`,void 0),W([k({attribute:`data-webhooks`})],K.prototype,`webhooksJson`,void 0),W([k({attribute:`data-active`})],K.prototype,`activeSlug`,void 0),W([k({attribute:`data-docs-expires-at`})],K.prototype,`docsExpiresAt`,void 0),W([k({attribute:`data-archive-export-url`})],K.prototype,`archiveExportUrl`,void 0),W([k({attribute:`data-has-content-pages`,type:Boolean})],K.prototype,`hasContentPagesFallback`,void 0),W([A()],K.prototype,`tags`,void 0),W([A()],K.prototype,`pages`,void 0),W([A()],K.prototype,`modelGroups`,void 0),W([A()],K.prototype,`webhooks`,void 0),W([A()],K.prototype,`expiryTick`,void 0),W([A()],K.prototype,`hostedArchiveControls`,void 0),W([A()],K.prototype,`archiveFormat`,void 0),W([A()],K.prototype,`includeDiagnostics`,void 0),W([A()],K.prototype,`includeAIDocs`,void 0),W([A()],K.prototype,`archiveExporting`,void 0),K=W([O(`pp-nav`)],K);var Lc=x` + `:w} + `}};G([A({attribute:`data-nav`})],q.prototype,`navJson`,void 0),G([A({attribute:`data-pages`})],q.prototype,`pagesJson`,void 0),G([A({attribute:`data-models`})],q.prototype,`modelsJson`,void 0),G([A({attribute:`data-webhooks`})],q.prototype,`webhooksJson`,void 0),G([A({attribute:`data-active`})],q.prototype,`activeSlug`,void 0),G([A({attribute:`data-docs-expires-at`})],q.prototype,`docsExpiresAt`,void 0),G([A({attribute:`data-archive-export-url`})],q.prototype,`archiveExportUrl`,void 0),G([A({attribute:`data-has-content-pages`,type:Boolean})],q.prototype,`hasContentPagesFallback`,void 0),G([j()],q.prototype,`tags`,void 0),G([j()],q.prototype,`pages`,void 0),G([j()],q.prototype,`modelGroups`,void 0),G([j()],q.prototype,`webhooks`,void 0),G([j()],q.prototype,`expiryTick`,void 0),G([j()],q.prototype,`hostedArchiveControls`,void 0),G([j()],q.prototype,`archiveFormat`,void 0),G([j()],q.prototype,`includeDiagnostics`,void 0),G([j()],q.prototype,`includeAIDocs`,void 0),G([j()],q.prototype,`archiveExporting`,void 0),q=G([k(`pp-nav`)],q);var Ic=S` :host { display: block; margin: 0; @@ -4904,9 +4904,19 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value .tag-name { min-width: 0; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.35rem; overflow-wrap: anywhere; } + .tag-protocols { + display: inline-flex; + flex-wrap: wrap; + gap: 0.35rem; + } + .tag-header:hover { background: var(--primary-color-verylowalpha); color: var(--primary-color); @@ -4986,7 +4996,8 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value white-space: normal; } - pb33f-http-method { + pb33f-http-method, + pp-asyncapi-action { justify-self: end; } @@ -5076,44 +5087,303 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value text-decoration: line-through; opacity: 0.5; } -`;function Rc(e){return e?(e.errors||0)+(e.warns||0)+(e.infos||0):0}function zc(e,t,n=`${t}s`){return e===1?t:n}function Bc(e){return e===8?`err`:e===4?`warn`:`info`}function Vc(e){return e===8?`exclamation-square`:e===4?`exclamation-triangle`:`info-square`}function Hc(e){return e===8?`Error`:e===4?`Warning`:`Info`}function Uc(e){return!e||Rc(e)<=0?C:S` +`;function Lc(e){return e?(e.errors||0)+(e.warns||0)+(e.infos||0):0}function Rc(e,t,n=`${t}s`){return e===1?t:n}function zc(e){return e===8?`err`:e===4?`warn`:`info`}function Bc(e){return e===8?`exclamation-square`:e===4?`exclamation-triangle`:`info-square`}function Vc(e){return e===8?`Error`:e===4?`Warning`:`Info`}function Hc(e){return!e||Lc(e)<=0?w:C` - ${[{severity:`error`,count:e.errors||0,noun:`error`},{severity:`warn`,count:e.warns||0,noun:`warning`},{severity:`info`,count:e.infos||0,noun:`info`}].map(({severity:e,count:t,noun:n})=>{if(t<=0)return C;let r=t>99?`99+`:String(t),i=`${t} ${n}${t===1?``:`s`}`;return S` + ${[{severity:`error`,count:e.errors||0,noun:`error`},{severity:`warn`,count:e.warns||0,noun:`warning`},{severity:`info`,count:e.infos||0,noun:`info`}].map(({severity:e,count:t,noun:n})=>{if(t<=0)return w;let r=t>99?`99+`:String(t),i=`${t} ${n}${t===1?``:`s`}`;return C` ${r} ${i} `})} - `}function Wc(e,t){return t?!!(e.operations?.some(e=>e.slug===t)||e.children?.some(e=>Wc(e,t))):!1}var Gc=class extends w{constructor(...e){super(...e),this.tag={name:``,summary:``,children:null,operations:null,isNavOnly:!1},this.activeSlug=``,this.open=!1}static{this.styles=Lc}willUpdate(e){(e.has(`tag`)||e.has(`activeSlug`))&&Wc(this.tag,this.activeSlug)&&(this.open=!0)}toggle(){this.open=!this.open}developerMode(){return document.body?.dataset.ppDeveloperMode===`true`}render(){let{tag:e,activeSlug:t,open:n}=this,r=Wc(e,t),i=this.developerMode();return S` + `}var Uc=S` + :host { + display: inline-flex; + justify-self: end; + align-items: center; + color: var(--font-color); + font-family: var(--font-stack), monospace; + font-size: inherit; + line-height: 1; + } + + :host([action='receive']) { + color: var(--primary-color); + } + + :host([action='send']) { + color: var(--secondary-color); + } + + .action { + display: inline-flex; + align-items: center; + gap: 0.35rem; + line-height: 1; + } + + .action.receive { + color: var(--primary-color); + } + + .action.send { + color: var(--secondary-color); + } + + sl-icon { + width: 0.9em; + height: 0.9em; + font-size: 0.9em; + } +`;function Wc(e){return e.trim().toLowerCase()}function Gc(e){switch(Wc(e)){case`receive`:return`RCV`;case`send`:return`SND`;default:return e.trim().toUpperCase()}}function Kc(e){switch(Wc(e)){case`receive`:return`arrow-left`;case`send`:return`arrow-right`;default:return`arrow-right`}}function qc(e){switch(Wc(e)){case`receive`:return`Receive`;case`send`:return`Send`;default:return e.trim()}}var Jc=class extends T{constructor(...e){super(...e),this.action=``,this.size=`small`}static{this.styles=Uc}render(){let e=Wc(this.action);return C` + + + ${Gc(this.action)} + + `}};G([A({reflect:!0})],Jc.prototype,`action`,void 0),G([A({reflect:!0})],Jc.prototype,`size`,void 0),Jc=G([k(`pp-asyncapi-action`)],Jc);var Yc=S` + :host { + display: inline-flex; + min-width: 0; + vertical-align: middle; + } + + .protocol, + h1 { + display: inline-flex; + align-items: center; + min-width: 0; + margin: 0; + padding: 0; + gap: 0.45em; + color: var(--primary-color); + font-family: var(--font-stack-bold), monospace; + font-weight: normal; + letter-spacing: 0; + line-height: 1; + } + + h1 { + color: var(--font-color); + font-size: 2em; + overflow-wrap: anywhere; + } + + .mark { + display: inline-grid; + place-items: center; + flex: 0 0 auto; + width: 1.45em; + height: 1.45em; + border: 0.08em solid currentColor; + border-radius: 50%; + color: var(--primary-color); + box-sizing: border-box; + } + + .mark svg { + width: 72%; + height: 72%; + overflow: visible; + } + + .mark.amqp, + .mark.anypointmq, + .mark.googlepubsub, + .mark.ibmmq, + .mark.kafka, + .mark.mqtt, + .mark.nats, + .mark.pulsar, + .mark.redis, + .mark.sns, + .mark.solace, + .mark.sqs, + .mark.websocket { + width: 1.25em; + height: 1.25em; + border: 0; + border-radius: 0; + } + + .mark.amqp svg, + .mark.anypointmq svg, + .mark.googlepubsub svg, + .mark.ibmmq svg, + .mark.kafka svg, + .mark.mqtt svg, + .mark.nats svg, + .mark.pulsar svg, + .mark.redis svg, + .mark.sns svg, + .mark.solace svg, + .mark.sqs svg, + .mark.websocket svg { + width: 100%; + height: 100%; + } + + .mark.kafka { + height: 1.55em; + } + + .label { + min-width: 0; + overflow-wrap: anywhere; + } + + .small { + gap: 0.35em; + font-size: 0.78em; + } + + .medium { + font-size: 0.92em; + } + + .nav { + gap: 0.4em; + font-size: 1em; + } + + .nav .mark { + width: 1.2em; + height: 1.2em; + } + + .nav .mark.amqp, + .nav .mark.anypointmq, + .nav .mark.googlepubsub, + .nav .mark.ibmmq, + .nav .mark.kafka, + .nav .mark.mqtt, + .nav .mark.nats, + .nav .mark.pulsar, + .nav .mark.redis, + .nav .mark.sns, + .nav .mark.solace, + .nav .mark.sqs, + .nav .mark.websocket { + width: 0.9em; + height: 0.9em; + border: 0; + } + + .nav .mark.kafka { + height: 1.15em; + } + + .large { + gap: 0.4em; + } + + .large .mark { + width: 1.25em; + height: 1.25em; + border-width: 0.06em; + } + + .large .mark.amqp, + .large .mark.anypointmq, + .large .mark.googlepubsub, + .large .mark.ibmmq, + .large .mark.kafka, + .large .mark.mqtt, + .large .mark.nats, + .large .mark.pulsar, + .large .mark.redis, + .large .mark.sns, + .large .mark.solace, + .large .mark.sqs, + .large .mark.websocket { + width: 1.05em; + height: 1.05em; + border: 0; + } + + .large .mark.kafka { + height: 1.3em; + } +`,Xc={amqp:{label:`AMQP`,mark:`amqp`},amqp1:{label:`AMQP 1.0`,mark:`amqp`},amqps:{label:`AMQPS`,mark:`amqp`},anypointmq:{label:`ANYPOINT MQ`,mark:`anypointmq`},gcppubsub:{label:`GOOGLE PUB/SUB`,mark:`googlepubsub`},googlepubsub:{label:`GOOGLE PUB/SUB`,mark:`googlepubsub`},http:{label:`HTTP`,mark:`globe`},https:{label:`HTTPS`,mark:`globe`},ibmmq:{label:`IBM MQ`,mark:`ibmmq`},jms:{label:`JMS`,mark:`queue`},kafka:{label:`KAFKA`,mark:`kafka`},kafkasecure:{label:`KAFKA`,mark:`kafka`},mercure:{label:`MERCURE`,mark:`broadcast`},mqtt:{label:`MQTT`,mark:`mqtt`},mqtt5:{label:`MQTT 5`,mark:`mqtt`},mqtts:{label:`MQTTS`,mark:`mqtt`},mqttsecure:{label:`MQTT`,mark:`mqtt`},securemqtt:{label:`MQTT`,mark:`mqtt`},nats:{label:`NATS`,mark:`nats`},pulsar:{label:`PULSAR`,mark:`pulsar`},redis:{label:`REDIS`,mark:`redis`},sns:{label:`SNS`,mark:`sns`},solace:{label:`SOLACE`,mark:`solace`},sqs:{label:`SQS`,mark:`sqs`},stomp:{label:`STOMP`,mark:`stomp`},stomps:{label:`STOMPS`,mark:`stomp`},websocket:{label:`WEBSOCKET`,mark:`websocket`},websockets:{label:`WEBSOCKET`,mark:`websocket`},ws:{label:`WEBSOCKET`,mark:`websocket`},wss:{label:`WEBSOCKET`,mark:`websocket`}};function Zc(e){return e.trim().toLowerCase().replace(/[-_.\s]+/g,``)}function Qc(e){return Xc[Zc(e)]??{label:e.trim().toUpperCase(),mark:`topology`}}var $c=class extends T{constructor(...e){super(...e),this.protocol=``,this.size=`medium`,this.heading=!1}static{this.styles=Yc}renderMark(e){switch(e){case`amqp`:return C``;case`anypointmq`:return C``;case`broadcast`:return C` + + + `;case`globe`:return C` + + + `;case`kafka`:return C``;case`googlepubsub`:return C``;case`ibmmq`:return C``;case`mqtt`:return C``;case`nats`:return C``;case`pulsar`:return C``;case`queue`:return C` + + `;case`redis`:return C``;case`sns`:return C``;case`solace`:return C``;case`sqs`:return C``;case`stomp`:return C` + + `;case`websocket`:return C``;default:return C` + + + + + `}}render(){let e=Qc(this.protocol),t=C` + + ${e.label} + `;return this.heading?C`

${t}

`:C`${t}`}};G([A()],$c.prototype,`protocol`,void 0),G([A()],$c.prototype,`size`,void 0),G([A({type:Boolean})],$c.prototype,`heading`,void 0),$c=G([k(`pp-asyncapi-protocol`)],$c);function el(e){return e.specKind===`asyncapi`}function tl(e,t){return t?!!(e.operations?.some(e=>e.slug===t)||e.children?.some(e=>tl(e,t))):!1}var nl=class extends T{constructor(...e){super(...e),this.tag={name:``,summary:``,children:null,operations:null,isNavOnly:!1},this.activeSlug=``,this.open=!1}static{this.styles=Ic}willUpdate(e){(e.has(`tag`)||e.has(`activeSlug`))&&tl(this.tag,this.activeSlug)&&(this.open=!0)}toggle(){this.open=!this.open}developerMode(){return document.body?.dataset.ppDeveloperMode===`true`}render(){let{tag:e,activeSlug:t,open:n}=this,r=tl(e,t),i=this.developerMode();return C`
- ${e.summary||e.name} - ${i?Uc(e.counts):C} + + ${e.protocol?C``:C` + ${e.summary||e.name} + ${e.protocols?.length?C` + ${e.protocols.map(e=>C` + `)} + `:w} + `} + + ${i?Hc(e.counts):w}
- ${n?S` + ${n?C`
- ${e.operations?.length?S` + ${e.operations?.length?C` - `:C} - ${e.children?.length?S` + `:w} + ${e.children?.length?C`
- ${e.children.map(e=>S` + ${e.children.map(e=>C` `)}
- `:C} + `:w}
- `:C} - `}};W([k({type:Object})],Gc.prototype,`tag`,void 0),W([k()],Gc.prototype,`activeSlug`,void 0),W([A()],Gc.prototype,`open`,void 0),Gc=W([O(`pp-nav-tag`)],Gc);var Kc=x` + `:w} + `}};G([A({type:Object})],nl.prototype,`tag`,void 0),G([A()],nl.prototype,`activeSlug`,void 0),G([j()],nl.prototype,`open`,void 0),nl=G([k(`pp-nav-tag`)],nl);var rl=S` :host { display: block; margin: 0; @@ -5209,12 +5479,22 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value .model-name { min-width: 0; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.35rem; font-family: var(--font-stack), monospace; word-wrap: break-word; overflow-wrap: break-word; white-space: normal; } + .model-protocols { + display: inline-flex; + flex-wrap: wrap; + gap: 0.35rem; + } + .violation-badges { display: inline-flex; justify-self: end; @@ -5270,28 +5550,36 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value li a.active .model-name { font-family: var(--font-stack-bold), monospace; } -`;function qc(e,t){return t?e.models?.some(e=>e.typeSlug+`/`+e.slug===t)??!1:!1}var Jc=class extends w{constructor(...e){super(...e),this.group={name:``,typeSlug:``,models:null},this.activeSlug=``,this.open=!1}static{this.styles=Kc}willUpdate(e){(e.has(`group`)||e.has(`activeSlug`))&&qc(this.group,this.activeSlug)&&(this.open=!0)}updated(e){(e.has(`activeSlug`)||e.has(`group`))&&this.open&&this.activeSlug&&requestAnimationFrame(()=>{this.renderRoot.querySelector(`a.active`)?.scrollIntoView({block:`center`,behavior:`auto`})})}toggle(){this.open=!this.open}developerMode(){return document.body?.dataset.ppDeveloperMode===`true`}render(){let{group:e,activeSlug:t,open:n}=this,r=qc(e,t),i=this.developerMode();return S` +`;function il(e,t){return t?e.models?.some(e=>e.typeSlug+`/`+e.slug===t)??!1:!1}var al=class extends T{constructor(...e){super(...e),this.group={name:``,typeSlug:``,models:null},this.activeSlug=``,this.open=!1}static{this.styles=rl}willUpdate(e){(e.has(`group`)||e.has(`activeSlug`))&&il(this.group,this.activeSlug)&&(this.open=!0)}updated(e){(e.has(`activeSlug`)||e.has(`group`))&&this.open&&this.activeSlug&&requestAnimationFrame(()=>{this.renderRoot.querySelector(`a.active`)?.scrollIntoView?.({block:`center`,behavior:`auto`})})}toggle(){this.open=!this.open}developerMode(){return document.body?.dataset.ppDeveloperMode===`true`}render(){let{group:e,activeSlug:t,open:n}=this,r=il(e,t),i=this.developerMode();return C`
${e.name} - ${i?Uc(e.counts):C} + ${i?Hc(e.counts):w}
- ${n&&e.models?.length?S` + ${n&&e.models?.length?C`
- `:C} - `}};W([k({type:Object})],Jc.prototype,`group`,void 0),W([k()],Jc.prototype,`activeSlug`,void 0),W([A()],Jc.prototype,`open`,void 0),Jc=W([O(`pp-nav-model-group`)],Jc);var Yc=x` + `:w} + `}};G([A({type:Object})],al.prototype,`group`,void 0),G([A()],al.prototype,`activeSlug`,void 0),G([j()],al.prototype,`open`,void 0),al=G([k(`pp-nav-model-group`)],al);var ol=S` :host { display: block; } @@ -5317,15 +5605,15 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value text-decoration: line-through; opacity: 0.5; } -`,Xc=class extends w{constructor(...e){super(...e),this.method=``,this.path=``,this.slug=``,this.deprecated=!1}static{this.styles=Yc}render(){return S` +`,sl=class extends T{constructor(...e){super(...e),this.specKind=``,this.method=``,this.path=``,this.slug=``,this.deprecated=!1}static{this.styles=ol}render(){return C` - + ${this.specKind===`asyncapi`?C``:C``} ${this.path} - `}};W([k()],Xc.prototype,`method`,void 0),W([k()],Xc.prototype,`path`,void 0),W([k()],Xc.prototype,`slug`,void 0),W([k({type:Boolean})],Xc.prototype,`deprecated`,void 0),Xc=W([O(`pp-nav-operation`)],Xc);var Zc=[Hs,x` + `}};G([A()],sl.prototype,`specKind`,void 0),G([A()],sl.prototype,`method`,void 0),G([A()],sl.prototype,`path`,void 0),G([A()],sl.prototype,`slug`,void 0),G([A({type:Boolean})],sl.prototype,`deprecated`,void 0),sl=G([k(`pp-nav-operation`)],sl);var cl=[Vs,S` :host { display: block; min-height: 156px; @@ -5384,20 +5672,20 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value width: 74%; } -`],Qc=class extends w{constructor(...e){super(...e),this.curlJson=``,this.variants=[],this.selectedIndex=0}static{this.styles=[Zc]}willUpdate(e){if(e.has(`curlJson`)){try{let e=JSON.parse(this.curlJson);this.variants=Array.isArray(e)?e:[]}catch{this.variants=[]}this.selectedIndex=0}}renderSelector(){if(this.variants.length<=1)return C;let e=this.variants[this.selectedIndex]||this.variants[0];return e?S` +`],ll=class extends T{constructor(...e){super(...e),this.curlJson=``,this.variants=[],this.selectedIndex=0}static{this.styles=[cl]}willUpdate(e){if(e.has(`curlJson`)){try{let e=JSON.parse(this.curlJson);this.variants=Array.isArray(e)?e:[]}catch{this.variants=[]}this.selectedIndex=0}}renderSelector(){if(this.variants.length<=1)return w;let e=this.variants[this.selectedIndex]||this.variants[0];return e?C`
${e.label||`Variant ${this.selectedIndex+1}`} - ${this.variants.map((e,t)=>S` + ${this.variants.map((e,t)=>C` ${e.label||`Variant ${t+1}`} `)}
- `:C}handleSelect(e){let t=e.detail?.item?.value;if(t===void 0)return;let n=parseInt(t,10);n>=0&&n=0&&n
@@ -5406,10 +5694,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value
- `}render(){if(this.variants.length===0)return this.renderSkeleton();let e=this.variants[this.selectedIndex]||this.variants[0];return e?S` + `}render(){if(this.variants.length===0)return this.renderSkeleton();let e=this.variants[this.selectedIndex]||this.variants[0];return e?C` ${this.renderSelector()} ${e.command} - `:C}};W([k({attribute:`curl-json`})],Qc.prototype,`curlJson`,void 0),W([A()],Qc.prototype,`variants`,void 0),W([A()],Qc.prototype,`selectedIndex`,void 0),Qc=W([O(`pp-curl-command`)],Qc);var $c=x` + `:w}};G([A({attribute:`curl-json`})],ll.prototype,`curlJson`,void 0),G([j()],ll.prototype,`variants`,void 0),G([j()],ll.prototype,`selectedIndex`,void 0),ll=G([k(`pp-curl-command`)],ll);var ul=S` .constraints { display: grid; grid-template-columns: auto 1fr; @@ -5450,7 +5738,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value padding: 0 var(--global-padding-half); white-space: nowrap; } -`,el=x` +`,dl=S` .pp-markdown, .pp-markdown-inline { color: var(--font-color-sub1); @@ -5529,7 +5817,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value display: inline; margin: 0; } -`,tl=x` +`,fl=S` a.ref-link, a.ref-link:hover { color: var(--terminal-text); @@ -5543,7 +5831,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value a.ref-link:hover { text-decoration: underline; } -`,nl=x` +`,pl=S` :host { display: block; margin-top: 0; @@ -5712,10 +6000,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value .parameter-skeleton-in { width: 58%; } -`,rl=`path-items`,il={schemas:`schemas`,responses:`responses`,parameters:`parameters`,requestBodies:`request-bodies`,headers:`headers`,securitySchemes:`security`,examples:`examples`,links:`links`,callbacks:`callbacks`,pathItems:rl};function al(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`);return t=t.toLowerCase(),t=t.replace(/[/]/g,`-`).replace(/[{}_.]/g,`-`).replace(/ /g,`-`),t=t.replace(/[^a-z0-9-]/g,``),t=t.replace(/-{2,}/g,`-`),t=t.replace(/^-|-$/g,``),t||`unnamed`}function ol(e){if(!e||!e.startsWith(`#/components/`))return null;let t=e.replace(`#/components/`,``).split(`/`);if(t.length!==2)return null;let[n,r]=t,i=il[n];return i?{name:r,href:Qs(i,al(r))}:null}function sl(e,t){if(!e)return[];let n=[];return t?.includeExample&&(e.example!==void 0&&n.push({label:`example`,value:JSON.stringify(e.example)}),e.default!==void 0&&n.push({label:`default`,value:JSON.stringify(e.default)})),e.minimum!==void 0&&n.push({label:`min`,value:e.minimum}),e.maximum!==void 0&&n.push({label:`max`,value:e.maximum}),e.exclusiveMinimum!==void 0&&n.push({label:`exclusiveMin`,value:e.exclusiveMinimum}),e.exclusiveMaximum!==void 0&&n.push({label:`exclusiveMax`,value:e.exclusiveMaximum}),e.minLength!==void 0&&n.push({label:`minLength`,value:e.minLength}),e.maxLength!==void 0&&n.push({label:`maxLength`,value:e.maxLength}),e.minItems!==void 0&&n.push({label:`minItems`,value:e.minItems}),e.maxItems!==void 0&&n.push({label:`maxItems`,value:e.maxItems}),e.uniqueItems&&n.push({label:`uniqueItems`,value:`true`}),e.pattern&&n.push({label:`pattern`,value:e.pattern,isCode:!0}),e.multipleOf!==void 0&&n.push({label:`multipleOf`,value:e.multipleOf}),n}function cl(e){if(!e)return``;if(e.type===`array`&&e.items)return`Array<${e.items.type||e.items.$ref?.split(`/`).pop()||`any`}>`;if(e.type){let t=Array.isArray(e.type)?e.type.join(` | `):e.type;return e.format&&(t+=` (${e.format})`),t}return e.oneOf?`oneOf`:e.anyOf?`anyOf`:e.allOf?`allOf`:e.$ref?e.$ref.split(`/`).pop()??``:``}function ll(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var ul=ll();function dl(e){ul=e}var fl=/[&<>"']/,pl=new RegExp(fl.source,`g`),ml=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,hl=new RegExp(ml.source,`g`),gl={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},_l=e=>gl[e];function vl(e,t){if(t){if(fl.test(e))return e.replace(pl,_l)}else if(ml.test(e))return e.replace(hl,_l);return e}var yl=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function bl(e){return e.replace(yl,(e,t)=>(t=t.toLowerCase(),t===`colon`?`:`:t.charAt(0)===`#`?t.charAt(1)===`x`?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):``))}var xl=/(^|[^\[])\^/g;function q(e,t){let n=typeof e==`string`?e:e.source;t||=``;let r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(xl,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}function Sl(e){try{e=encodeURI(e).replace(/%25/g,`%`)}catch{return null}return e}var Cl={exec:()=>null};function wl(e,t){let n=e.replace(/\|/g,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(/ \|/),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length`;if(e.type){let t=Array.isArray(e.type)?e.type.join(` | `):e.type;return e.format&&(t+=` (${e.format})`),t}return e.oneOf?`oneOf`:e.anyOf?`anyOf`:e.allOf?`allOf`:e.$ref?e.$ref.split(`/`).pop()??``:``}function bl(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var xl=bl();function Sl(e){xl=e}var Cl=/[&<>"']/,wl=new RegExp(Cl.source,`g`),Tl=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,El=new RegExp(Tl.source,`g`),Dl={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},Ol=e=>Dl[e];function kl(e,t){if(t){if(Cl.test(e))return e.replace(wl,Ol)}else if(Tl.test(e))return e.replace(El,Ol);return e}var Al=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function jl(e){return e.replace(Al,(e,t)=>(t=t.toLowerCase(),t===`colon`?`:`:t.charAt(0)===`#`?t.charAt(1)===`x`?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):``))}var Ml=/(^|[^\[])\^/g;function J(e,t){let n=typeof e==`string`?e:e.source;t||=``;let r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(Ml,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}function Nl(e){try{e=encodeURI(e).replace(/%25/g,`%`)}catch{return null}return e}var Pl={exec:()=>null};function Fl(e,t){let n=e.replace(/\|/g,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(/ \|/),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length{let t=e.match(/^\s+/);if(t===null)return e;let[n]=t;return n.length>=r.length?e.slice(r.length):e}).join(` -`)}var kl=class{options;rules;lexer;constructor(e){this.options=e||ul}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:`space`,raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let e=t[0].replace(/^ {1,4}/gm,``);return{type:`code`,raw:t[0],codeBlockStyle:`indented`,text:this.options.pedantic?e:Tl(e,` -`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let e=t[0],n=Ol(e,t[3]||``);return{type:`code`,raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,`$1`):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){let t=Tl(e,`#`);(this.options.pedantic||!t||/ $/.test(t))&&(e=t.trim())}return{type:`heading`,raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:`hr`,raw:t[0]}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=Tl(t[0].replace(/^ *>[ \t]?/gm,``),` +`)}var Bl=class{options;rules;lexer;constructor(e){this.options=e||xl}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:`space`,raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let e=t[0].replace(/^ {1,4}/gm,``);return{type:`code`,raw:t[0],codeBlockStyle:`indented`,text:this.options.pedantic?e:Il(e,` +`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let e=t[0],n=zl(e,t[3]||``);return{type:`code`,raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,`$1`):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){let t=Il(e,`#`);(this.options.pedantic||!t||/ $/.test(t))&&(e=t.trim())}return{type:`heading`,raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:`hr`,raw:t[0]}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=Il(t[0].replace(/^ *>[ \t]?/gm,``),` `),n=this.lexer.state.top;this.lexer.state.top=!0;let r=this.lexer.blockTokens(e);return this.lexer.state.top=n,{type:`blockquote`,raw:t[0],tokens:r,text:e}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:`list`,raw:``,ordered:r,start:r?+n.slice(0,-1):``,loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:`[*+-]`);let a=RegExp(`^( {0,3}${n})((?:[\t ][^\\n]*)?(?:\\n|$))`),o=``,s=``,c=!1;for(;e;){let n=!1;if(!(t=a.exec(e))||this.rules.block.hr.test(e))break;o=t[0],e=e.substring(o.length);let r=t[2].split(` `,1)[0].replace(/^\t+/,e=>` `.repeat(3*e.length)),l=e.split(` `,1)[0],u=0;this.options.pedantic?(u=2,s=r.trimStart()):(u=t[2].search(/[^ ]/),u=u>4?1:u,s=r.slice(u),u+=t[1].length);let d=!1;if(!r&&/^ *$/.test(l)&&(o+=l+` @@ -5723,10 +6011,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value `,1)[0];if(l=c,this.options.pedantic&&(l=l.replace(/^ {1,4}(?=( {4})*[^ ])/g,` `)),i.test(l)||a.test(l)||t.test(l)||n.test(e))break;if(l.search(/[^ ]/)>=u||!l.trim())s+=` `+l.slice(u);else{if(d||r.search(/[^ ]/)>=4||i.test(r)||a.test(r)||n.test(r))break;s+=` `+l}!d&&!l.trim()&&(d=!0),o+=c+` -`,e=e.substring(c.length+1),r=l.slice(u)}}i.loose||(c?i.loose=!0:/\n *\n *$/.test(o)&&(c=!0));let f=null,p;this.options.gfm&&(f=/^\[[ xX]\] /.exec(s),f&&(p=f[0]!==`[ ] `,s=s.replace(/^\[[ xX]\] +/,``))),i.items.push({type:`list_item`,raw:o,task:!!f,checked:p,loose:!1,text:s,tokens:[]}),i.raw+=o}i.items[i.items.length-1].raw=o.trimEnd(),i.items[i.items.length-1].text=s.trimEnd(),i.raw=i.raw.trimEnd();for(let e=0;ee.type===`space`);i.loose=t.length>0&&t.some(e=>/\n.*\n/.test(e.raw))}if(i.loose)for(let e=0;e$/,`$1`).replace(this.rules.inline.anyPunctuation,`$1`):``,r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,`$1`):t[3];return{type:`def`,tag:e,raw:t[0],href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!/[:|]/.test(t[2]))return;let n=wl(t[1]),r=t[2].replace(/^\||\| *$/g,``).split(`|`),i=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,``).split(` -`):[],a={type:`table`,raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let e of r)/^ *-+: *$/.test(e)?a.align.push(`right`):/^ *:-+: *$/.test(e)?a.align.push(`center`):/^ *:-+ *$/.test(e)?a.align.push(`left`):a.align.push(null);for(let e of n)a.header.push({text:e,tokens:this.lexer.inline(e)});for(let e of i)a.rows.push(wl(e,a.header.length).map(e=>({text:e,tokens:this.lexer.inline(e)})));return a}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:`heading`,raw:t[0],depth:t[2].charAt(0)===`=`?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let e=t[1].charAt(t[1].length-1)===` -`?t[1].slice(0,-1):t[1];return{type:`paragraph`,raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:`text`,raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:`escape`,raw:t[0],text:vl(t[1])}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:`html`,raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;let t=Tl(e.slice(0,-1),`\\`);if((e.length-t.length)%2==0)return}else{let e=El(t[2],`()`);if(e>-1){let n=(t[0].indexOf(`!`)===0?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=``}}let n=t[2],r=``;if(this.options.pedantic){let e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):``;return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),Dl(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,`$1`),title:r&&r.replace(this.rules.inline.anyPunctuation,`$1`)},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=t[(n[2]||n[1]).replace(/\s+/g,` `).toLowerCase()];if(!e){let e=n[0].charAt(0);return{type:`text`,raw:e,text:e}}return Dl(n,e,n[0],this.lexer)}}emStrong(e,t,n=``){let r=this.rules.inline.emStrongLDelim.exec(e);if(r&&!(r[3]&&n.match(/[\p{L}\p{N}]/u))&&(!(r[1]||r[2])||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=0,c=r[0][0]===`*`?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+n);(r=c.exec(t))!=null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i)continue;if(a=[...i].length,r[3]||r[4]){o+=a;continue}else if((r[5]||r[6])&&n%3&&!((n+a)%3)){s+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o+s);let t=[...r[0]][0].length,c=e.slice(0,n+r.index+t+a);if(Math.min(n,a)%2){let e=c.slice(1,-1);return{type:`em`,raw:c,text:e,tokens:this.lexer.inlineTokens(e)}}let l=c.slice(2,-2);return{type:`strong`,raw:c,text:l,tokens:this.lexer.inlineTokens(l)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g,` `),n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=vl(e,!0),{type:`codespan`,raw:t[0],text:e}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:`br`,raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:`del`,raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let e,n;return t[2]===`@`?(e=vl(t[1]),n=`mailto:`+e):(e=vl(t[1]),n=e),{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if(t[2]===`@`)e=vl(t[0]),n=`mailto:`+e;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??``;while(r!==t[0]);e=vl(t[0]),n=t[1]===`www.`?`http://`+t[0]:t[0]}return{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:vl(t[0]),{type:`text`,raw:t[0],text:e}}}},Al=/^(?: *(?:\n|$))+/,jl=/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,Ml=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Nl=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Pl=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Fl=/(?:[*+-]|\d{1,9}[.)])/,Il=q(/^(?!bull )((?:.|\n(?!\s*?\n|bull ))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,Fl).getRegex(),Ll=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Rl=/^[^\n]+/,zl=/(?!\s*\])(?:\\.|[^\[\]\\])+/,Bl=q(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace(`label`,zl).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Vl=q(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Fl).getRegex(),Hl=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,Ul=/|$)/,Wl=q(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))`,`i`).replace(`comment`,Ul).replace(`tag`,Hl).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),Gl=q(Ll).replace(`hr`,Nl).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,Hl).getRegex(),Kl={blockquote:q(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,Gl).getRegex(),code:jl,def:Bl,fences:Ml,heading:Pl,hr:Nl,html:Wl,lheading:Il,list:Vl,newline:Al,paragraph:Gl,table:Cl,text:Rl},ql=q(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,Nl).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,` {4}[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,Hl).getRegex(),Jl={...Kl,table:ql,paragraph:q(Ll).replace(`hr`,Nl).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,ql).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,Hl).getRegex()},Yl={...Kl,html:q(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,Ul).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Cl,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:q(Ll).replace(`hr`,Nl).replace(`heading`,` *#{1,6} *[^ -]`).replace(`lheading`,Il).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},Xl=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,Zl=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,Ql=/^( {2,}|\\)\n(?!\s*$)/,$l=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`^|~",tu=q(/^((?![*_])[\spunctuation])/,`u`).replace(/punctuation/g,eu).getRegex(),nu=/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,ru=q(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,`u`).replace(/punct/g,eu).getRegex(),iu=q(`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])`,`gu`).replace(/punct/g,eu).getRegex(),au=q(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])`,`gu`).replace(/punct/g,eu).getRegex(),ou=q(/\\([punct])/,`gu`).replace(/punct/g,eu).getRegex(),su=q(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),cu=q(Ul).replace(`(?:-->|$)`,`-->`).getRegex(),lu=q(`^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^`).replace(`comment`,cu).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),uu=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,du=q(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace(`label`,uu).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),fu=q(/^!?\[(label)\]\[(ref)\]/).replace(`label`,uu).replace(`ref`,zl).getRegex(),pu=q(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,zl).getRegex(),mu={_backpedal:Cl,anyPunctuation:ou,autolink:su,blockSkip:nu,br:Ql,code:Zl,del:Cl,emStrongLDelim:ru,emStrongRDelimAst:iu,emStrongRDelimUnd:au,escape:Xl,link:du,nolink:pu,punctuation:tu,reflink:fu,reflinkSearch:q(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,fu).replace(`nolink`,pu).getRegex(),tag:lu,text:$l,url:Cl},hu={...mu,link:q(/^!?\[(label)\]\((.*?)\)/).replace(`label`,uu).getRegex(),reflink:q(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,uu).getRegex()},gu={...mu,escape:q(Xl).replace(`])`,`~|])`).getRegex(),url:q(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,`i`).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\e.type===`space`);i.loose=t.length>0&&t.some(e=>/\n.*\n/.test(e.raw))}if(i.loose)for(let e=0;e$/,`$1`).replace(this.rules.inline.anyPunctuation,`$1`):``,r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,`$1`):t[3];return{type:`def`,tag:e,raw:t[0],href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!/[:|]/.test(t[2]))return;let n=Fl(t[1]),r=t[2].replace(/^\||\| *$/g,``).split(`|`),i=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,``).split(` +`):[],a={type:`table`,raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let e of r)/^ *-+: *$/.test(e)?a.align.push(`right`):/^ *:-+: *$/.test(e)?a.align.push(`center`):/^ *:-+ *$/.test(e)?a.align.push(`left`):a.align.push(null);for(let e of n)a.header.push({text:e,tokens:this.lexer.inline(e)});for(let e of i)a.rows.push(Fl(e,a.header.length).map(e=>({text:e,tokens:this.lexer.inline(e)})));return a}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:`heading`,raw:t[0],depth:t[2].charAt(0)===`=`?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let e=t[1].charAt(t[1].length-1)===` +`?t[1].slice(0,-1):t[1];return{type:`paragraph`,raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:`text`,raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:`escape`,raw:t[0],text:kl(t[1])}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:`html`,raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;let t=Il(e.slice(0,-1),`\\`);if((e.length-t.length)%2==0)return}else{let e=Ll(t[2],`()`);if(e>-1){let n=(t[0].indexOf(`!`)===0?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=``}}let n=t[2],r=``;if(this.options.pedantic){let e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):``;return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),Rl(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,`$1`),title:r&&r.replace(this.rules.inline.anyPunctuation,`$1`)},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=t[(n[2]||n[1]).replace(/\s+/g,` `).toLowerCase()];if(!e){let e=n[0].charAt(0);return{type:`text`,raw:e,text:e}}return Rl(n,e,n[0],this.lexer)}}emStrong(e,t,n=``){let r=this.rules.inline.emStrongLDelim.exec(e);if(r&&!(r[3]&&n.match(/[\p{L}\p{N}]/u))&&(!(r[1]||r[2])||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=0,c=r[0][0]===`*`?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+n);(r=c.exec(t))!=null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i)continue;if(a=[...i].length,r[3]||r[4]){o+=a;continue}else if((r[5]||r[6])&&n%3&&!((n+a)%3)){s+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o+s);let t=[...r[0]][0].length,c=e.slice(0,n+r.index+t+a);if(Math.min(n,a)%2){let e=c.slice(1,-1);return{type:`em`,raw:c,text:e,tokens:this.lexer.inlineTokens(e)}}let l=c.slice(2,-2);return{type:`strong`,raw:c,text:l,tokens:this.lexer.inlineTokens(l)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g,` `),n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=kl(e,!0),{type:`codespan`,raw:t[0],text:e}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:`br`,raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:`del`,raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let e,n;return t[2]===`@`?(e=kl(t[1]),n=`mailto:`+e):(e=kl(t[1]),n=e),{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if(t[2]===`@`)e=kl(t[0]),n=`mailto:`+e;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??``;while(r!==t[0]);e=kl(t[0]),n=t[1]===`www.`?`http://`+t[0]:t[0]}return{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:kl(t[0]),{type:`text`,raw:t[0],text:e}}}},Vl=/^(?: *(?:\n|$))+/,Hl=/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,Ul=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,Wl=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Gl=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,Kl=/(?:[*+-]|\d{1,9}[.)])/,ql=J(/^(?!bull )((?:.|\n(?!\s*?\n|bull ))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,Kl).getRegex(),Jl=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Yl=/^[^\n]+/,Xl=/(?!\s*\])(?:\\.|[^\[\]\\])+/,Zl=J(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace(`label`,Xl).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),Ql=J(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,Kl).getRegex(),$l=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,eu=/|$)/,tu=J(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))`,`i`).replace(`comment`,eu).replace(`tag`,$l).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),nu=J(Jl).replace(`hr`,Wl).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,$l).getRegex(),ru={blockquote:J(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,nu).getRegex(),code:Hl,def:Zl,fences:Ul,heading:Gl,hr:Wl,html:tu,lheading:ql,list:Ql,newline:Vl,paragraph:nu,table:Pl,text:Yl},iu=J(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,Wl).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,` {4}[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,$l).getRegex(),au={...ru,table:iu,paragraph:J(Jl).replace(`hr`,Wl).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,iu).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,$l).getRegex()},ou={...ru,html:J(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,eu).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:Pl,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:J(Jl).replace(`hr`,Wl).replace(`heading`,` *#{1,6} *[^ +]`).replace(`lheading`,ql).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},su=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,cu=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,lu=/^( {2,}|\\)\n(?!\s*$)/,uu=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`^|~",fu=J(/^((?![*_])[\spunctuation])/,`u`).replace(/punctuation/g,du).getRegex(),pu=/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,mu=J(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,`u`).replace(/punct/g,du).getRegex(),hu=J(`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])`,`gu`).replace(/punct/g,du).getRegex(),gu=J(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])`,`gu`).replace(/punct/g,du).getRegex(),_u=J(/\\([punct])/,`gu`).replace(/punct/g,du).getRegex(),vu=J(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),yu=J(eu).replace(`(?:-->|$)`,`-->`).getRegex(),bu=J(`^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^`).replace(`comment`,yu).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),xu=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Su=J(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace(`label`,xu).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),Cu=J(/^!?\[(label)\]\[(ref)\]/).replace(`label`,xu).replace(`ref`,Xl).getRegex(),wu=J(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,Xl).getRegex(),Tu={_backpedal:Pl,anyPunctuation:_u,autolink:vu,blockSkip:pu,br:lu,code:cu,del:Pl,emStrongLDelim:mu,emStrongRDelimAst:hu,emStrongRDelimUnd:gu,escape:su,link:Su,nolink:wu,punctuation:fu,reflink:Cu,reflinkSearch:J(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,Cu).replace(`nolink`,wu).getRegex(),tag:bu,text:uu,url:Pl},Eu={...Tu,link:J(/^!?\[(label)\]\((.*?)\)/).replace(`label`,xu).getRegex(),reflink:J(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,xu).getRegex()},Du={...Tu,escape:J(su).replace(`])`,`~|])`).getRegex(),url:J(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,`i`).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\t+` `.repeat(n.length));let n,r,i,a;for(;e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(r=>(n=r.call({lexer:this},e,t))?(e=e.substring(n.raw.length),t.push(n),!0):!1))){if(n=this.tokenizer.space(e)){e=e.substring(n.raw.length),n.raw.length===1&&t.length>0?t[t.length-1].raw+=` `:t.push(n);continue}if(n=this.tokenizer.code(e)){e=e.substring(n.raw.length),r=t[t.length-1],r&&(r.type===`paragraph`||r.type===`text`)?(r.raw+=` `+n.raw,r.text+=` @@ -5736,9 +6024,9 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value `+n.raw,r.text+=` `+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=r.text):t.push(n),a=i.length!==e.length,e=e.substring(n.raw.length);continue}if(n=this.tokenizer.text(e)){e=e.substring(n.raw.length),r=t[t.length-1],r&&r.type===`text`?(r.raw+=` `+n.raw,r.text+=` -`+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=r.text):t.push(n);continue}if(e){let t=`Infinite loop on byte: `+e.charCodeAt(0);if(this.options.silent){console.error(t);break}else throw Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n,r,i,a=e,o,s,c;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(e.length>0)for(;(o=this.tokenizer.rules.inline.reflinkSearch.exec(a))!=null;)e.includes(o[0].slice(o[0].lastIndexOf(`[`)+1,-1))&&(a=a.slice(0,o.index)+`[`+`a`.repeat(o[0].length-2)+`]`+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(o=this.tokenizer.rules.inline.blockSkip.exec(a))!=null;)a=a.slice(0,o.index)+`[`+`a`.repeat(o[0].length-2)+`]`+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(o=this.tokenizer.rules.inline.anyPunctuation.exec(a))!=null;)a=a.slice(0,o.index)+`++`+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(s||(c=``),s=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(r=>(n=r.call({lexer:this},e,t))?(e=e.substring(n.raw.length),t.push(n),!0):!1))){if(n=this.tokenizer.escape(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.tag(e)){e=e.substring(n.raw.length),r=t[t.length-1],r&&n.type===`text`&&r.type===`text`?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(n=this.tokenizer.link(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(n.raw.length),r=t[t.length-1],r&&n.type===`text`&&r.type===`text`?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(n=this.tokenizer.emStrong(e,a,c)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.codespan(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.br(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.del(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.autolink(e)){e=e.substring(n.raw.length),t.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(e))){e=e.substring(n.raw.length),t.push(n);continue}if(i=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0,n=e.slice(1),r;this.options.extensions.startInline.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(i=e.substring(0,t+1))}if(n=this.tokenizer.inlineText(i)){e=e.substring(n.raw.length),n.raw.slice(-1)!==`_`&&(c=n.raw.slice(-1)),s=!0,r=t[t.length-1],r&&r.type===`text`?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(e){let t=`Infinite loop on byte: `+e.charCodeAt(0);if(this.options.silent){console.error(t);break}else throw Error(t)}}return t}},xu=class{options;constructor(e){this.options=e||ul}code(e,t,n){let r=(t||``).match(/^\S*/)?.[0];return e=e.replace(/\n$/,``)+` -`,r?`
`+(n?e:vl(e,!0))+`
-`:`
`+(n?e:vl(e,!0))+`
+`+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=r.text):t.push(n);continue}if(e){let t=`Infinite loop on byte: `+e.charCodeAt(0);if(this.options.silent){console.error(t);break}else throw Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n,r,i,a=e,o,s,c;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(e.length>0)for(;(o=this.tokenizer.rules.inline.reflinkSearch.exec(a))!=null;)e.includes(o[0].slice(o[0].lastIndexOf(`[`)+1,-1))&&(a=a.slice(0,o.index)+`[`+`a`.repeat(o[0].length-2)+`]`+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(o=this.tokenizer.rules.inline.blockSkip.exec(a))!=null;)a=a.slice(0,o.index)+`[`+`a`.repeat(o[0].length-2)+`]`+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(o=this.tokenizer.rules.inline.anyPunctuation.exec(a))!=null;)a=a.slice(0,o.index)+`++`+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(s||(c=``),s=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(r=>(n=r.call({lexer:this},e,t))?(e=e.substring(n.raw.length),t.push(n),!0):!1))){if(n=this.tokenizer.escape(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.tag(e)){e=e.substring(n.raw.length),r=t[t.length-1],r&&n.type===`text`&&r.type===`text`?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(n=this.tokenizer.link(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(n.raw.length),r=t[t.length-1],r&&n.type===`text`&&r.type===`text`?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(n=this.tokenizer.emStrong(e,a,c)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.codespan(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.br(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.del(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.autolink(e)){e=e.substring(n.raw.length),t.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(e))){e=e.substring(n.raw.length),t.push(n);continue}if(i=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0,n=e.slice(1),r;this.options.extensions.startInline.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(i=e.substring(0,t+1))}if(n=this.tokenizer.inlineText(i)){e=e.substring(n.raw.length),n.raw.slice(-1)!==`_`&&(c=n.raw.slice(-1)),s=!0,r=t[t.length-1],r&&r.type===`text`?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(e){let t=`Infinite loop on byte: `+e.charCodeAt(0);if(this.options.silent){console.error(t);break}else throw Error(t)}}return t}},Mu=class{options;constructor(e){this.options=e||xl}code(e,t,n){let r=(t||``).match(/^\S*/)?.[0];return e=e.replace(/\n$/,``)+` +`,r?`
`+(n?e:kl(e,!0))+`
+`:`
`+(n?e:kl(e,!0))+`
`}blockquote(e){return`
\n${e}
\n`}html(e,t){return e}heading(e,t,n){return`${e}\n`}hr(){return`
`}list(e,t,n){let r=t?`ol`:`ul`,i=t&&n!==1?` start="`+n+`"`:``;return`<`+r+i+`> `+e+` @@ -5746,35 +6034,35 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value `+e+` `+t+` -`}tablerow(e){return`\n${e}\n`}tablecell(e,t){let n=t.header?`th`:`td`;return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`\n`}strong(e){return`${e}`}em(e){return`${e}`}codespan(e){return`${e}`}br(){return`
`}del(e){return`${e}`}link(e,t,n){let r=Sl(e);if(r===null)return n;e=r;let i=`
`+n+``,i}image(e,t,n){let r=Sl(e);if(r===null)return n;e=r;let i=`${n}`,i}text(e){return e}},Su=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return``+n}image(e,t,n){return``+n}br(){return``}},Cu=class e{options;renderer;textRenderer;constructor(e){this.options=e||ul,this.options.renderer=this.options.renderer||new xu,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Su}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n=``;for(let r=0;r0&&n.tokens[0].type===`paragraph`?(n.tokens[0].text=e+` `+n.tokens[0].text,n.tokens[0].tokens&&n.tokens[0].tokens.length>0&&n.tokens[0].tokens[0].type===`text`&&(n.tokens[0].tokens[0].text=e+` `+n.tokens[0].tokens[0].text)):n.tokens.unshift({type:`text`,text:e+` `}):s+=e+` `}s+=this.parse(n.tokens,a),o+=this.renderer.listitem(s,i,!!r)}n+=this.renderer.list(o,t,r);continue}case`html`:{let e=i;n+=this.renderer.html(e.text,e.block);continue}case`paragraph`:{let e=i;n+=this.renderer.paragraph(this.parseInline(e.tokens));continue}case`text`:{let a=i,o=a.tokens?this.parseInline(a.tokens):a.text;for(;r+1{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new xu(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if(n===`options`)continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new kl(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new wu;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if(n===`options`)continue;let r=n,i=e.hooks[r],a=t[r];wu.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async)return Promise.resolve(i.call(t,e)).then(e=>a.call(t,e));let n=i.call(t,e);return a.call(t,n)}:t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return bu.lex(e,t??this.defaults)}parser(e,t){return Cu.parse(e,t??this.defaults)}#e(e,t){return(n,r)=>{let i={...r},a={...this.defaults,...i};this.defaults.async===!0&&i.async===!1&&(a.silent||console.warn(`marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.`),a.async=!0);let o=this.#t(!!a.silent,!!a.async);if(n==null)return o(Error(`marked(): input parameter is undefined or null`));if(typeof n!=`string`)return o(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(n)+`, string expected`));if(a.hooks&&(a.hooks.options=a),a.async)return Promise.resolve(a.hooks?a.hooks.preprocess(n):n).then(t=>e(t,a)).then(e=>a.hooks?a.hooks.processAllTokens(e):e).then(e=>a.walkTokens?Promise.all(this.walkTokens(e,a.walkTokens)).then(()=>e):e).then(e=>t(e,a)).then(e=>a.hooks?a.hooks.postprocess(e):e).catch(o);try{a.hooks&&(n=a.hooks.preprocess(n));let r=e(n,a);a.hooks&&(r=a.hooks.processAllTokens(r)),a.walkTokens&&this.walkTokens(r,a.walkTokens);let i=t(r,a);return a.hooks&&(i=a.hooks.postprocess(i)),i}catch(e){return o(e)}}}#t(e,t){return n=>{if(n.message+=` -Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error occurred:

`+vl(n.message+``,!0)+`
`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function J(e,t){return Tu.parse(e,t)}J.options=J.setOptions=function(e){return Tu.setOptions(e),J.defaults=Tu.defaults,dl(J.defaults),J},J.getDefaults=ll,J.defaults=ul,J.use=function(...e){return Tu.use(...e),J.defaults=Tu.defaults,dl(J.defaults),J},J.walkTokens=function(e,t){return Tu.walkTokens(e,t)},J.parseInline=Tu.parseInline,J.Parser=Cu,J.parser=Cu.parse,J.Renderer=xu,J.TextRenderer=Su,J.Lexer=bu,J.lexer=bu.lex,J.Tokenizer=kl,J.Hooks=wu,J.parse=J,J.options,J.setOptions,J.use,J.walkTokens,J.parseInline,Cu.parse,bu.lex,J.use({gfm:!0,breaks:!1,renderer:void 0});function Y(e,t={}){if(!e)return C;let n=t.inline?J.parseInline(e,{async:!1}):J.parse(e,{async:!1}),r=t.className??(t.inline?`pp-markdown-inline`:`pp-markdown`);return t.inline?S`${Bo(String(n))}`:S`
${Bo(String(n))}
`}function Eu(e,t=!1){let n=S`\u279c ${e.name}`;return t?S`${n}`:n}function Du(e,t){if(!e)return C;if(e.allOf&&Array.isArray(e.allOf)){let n=[],r=!0;for(let t of e.allOf){if(!t.$ref){r=!1;continue}let e=ol(t.$ref);e&&n.push({ref:t.$ref,link:e})}if(r&&n.length>0)return S` - ${n.map((e,n)=>S` - ${n>0?S` + `:C} +`}tablerow(e){return`\n${e}\n`}tablecell(e,t){let n=t.header?`th`:`td`;return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`\n`}strong(e){return`${e}`}em(e){return`${e}`}codespan(e){return`${e}`}br(){return`
`}del(e){return`${e}`}link(e,t,n){let r=Nl(e);if(r===null)return n;e=r;let i=``+n+``,i}image(e,t,n){let r=Nl(e);if(r===null)return n;e=r;let i=`${n}`,i}text(e){return e}},Nu=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return``+n}image(e,t,n){return``+n}br(){return``}},Pu=class e{options;renderer;textRenderer;constructor(e){this.options=e||xl,this.options.renderer=this.options.renderer||new Mu,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Nu}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n=``;for(let r=0;r0&&n.tokens[0].type===`paragraph`?(n.tokens[0].text=e+` `+n.tokens[0].text,n.tokens[0].tokens&&n.tokens[0].tokens.length>0&&n.tokens[0].tokens[0].type===`text`&&(n.tokens[0].tokens[0].text=e+` `+n.tokens[0].tokens[0].text)):n.tokens.unshift({type:`text`,text:e+` `}):s+=e+` `}s+=this.parse(n.tokens,a),o+=this.renderer.listitem(s,i,!!r)}n+=this.renderer.list(o,t,r);continue}case`html`:{let e=i;n+=this.renderer.html(e.text,e.block);continue}case`paragraph`:{let e=i;n+=this.renderer.paragraph(this.parseInline(e.tokens));continue}case`text`:{let a=i,o=a.tokens?this.parseInline(a.tokens):a.text;for(;r+1{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new Mu(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if(n===`options`)continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new Bl(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new Fu;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if(n===`options`)continue;let r=n,i=e.hooks[r],a=t[r];Fu.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async)return Promise.resolve(i.call(t,e)).then(e=>a.call(t,e));let n=i.call(t,e);return a.call(t,n)}:t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return ju.lex(e,t??this.defaults)}parser(e,t){return Pu.parse(e,t??this.defaults)}#e(e,t){return(n,r)=>{let i={...r},a={...this.defaults,...i};this.defaults.async===!0&&i.async===!1&&(a.silent||console.warn(`marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.`),a.async=!0);let o=this.#t(!!a.silent,!!a.async);if(n==null)return o(Error(`marked(): input parameter is undefined or null`));if(typeof n!=`string`)return o(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(n)+`, string expected`));if(a.hooks&&(a.hooks.options=a),a.async)return Promise.resolve(a.hooks?a.hooks.preprocess(n):n).then(t=>e(t,a)).then(e=>a.hooks?a.hooks.processAllTokens(e):e).then(e=>a.walkTokens?Promise.all(this.walkTokens(e,a.walkTokens)).then(()=>e):e).then(e=>t(e,a)).then(e=>a.hooks?a.hooks.postprocess(e):e).catch(o);try{a.hooks&&(n=a.hooks.preprocess(n));let r=e(n,a);a.hooks&&(r=a.hooks.processAllTokens(r)),a.walkTokens&&this.walkTokens(r,a.walkTokens);let i=t(r,a);return a.hooks&&(i=a.hooks.postprocess(i)),i}catch(e){return o(e)}}}#t(e,t){return n=>{if(n.message+=` +Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error occurred:

`+kl(n.message+``,!0)+`
`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function Y(e,t){return Iu.parse(e,t)}Y.options=Y.setOptions=function(e){return Iu.setOptions(e),Y.defaults=Iu.defaults,Sl(Y.defaults),Y},Y.getDefaults=bl,Y.defaults=xl,Y.use=function(...e){return Iu.use(...e),Y.defaults=Iu.defaults,Sl(Y.defaults),Y},Y.walkTokens=function(e,t){return Iu.walkTokens(e,t)},Y.parseInline=Iu.parseInline,Y.Parser=Pu,Y.parser=Pu.parse,Y.Renderer=Mu,Y.TextRenderer=Nu,Y.Lexer=ju,Y.lexer=ju.lex,Y.Tokenizer=Bl,Y.Hooks=Fu,Y.parse=Y,Y.options,Y.setOptions,Y.use,Y.walkTokens,Y.parseInline,Pu.parse,ju.lex,Y.use({gfm:!0,breaks:!1,renderer:void 0});function X(e,t={}){if(!e)return w;let n=t.inline?Y.parseInline(e,{async:!1}):Y.parse(e,{async:!1}),r=t.className??(t.inline?`pp-markdown-inline`:`pp-markdown`);return t.inline?C`${zo(String(n))}`:C`
${zo(String(n))}
`}function Lu(e,t=!1){let n=C`\u279c ${e.name}`;return t?C`${n}`:n}function Ru(e,t){if(!e)return w;if(e.allOf&&Array.isArray(e.allOf)){let n=[],r=!0;for(let t of e.allOf){if(!t.$ref){r=!1;continue}let e=_l(t.$ref);e&&n.push({ref:t.$ref,link:e})}if(r&&n.length>0)return C` + ${n.map((e,n)=>C` + ${n>0?C` + `:w} ${t(e.ref,e.link)} `)} - `}if(e.type===`array`&&e.items?.allOf&&Array.isArray(e.items.allOf)){let n=[],r=!0;for(let t of e.items.allOf){if(!t.$ref){r=!1;continue}let e=ol(t.$ref);e&&n.push({ref:t.$ref,link:e})}if(r&&n.length>0)return S`Array<${n.map((e,n)=>S` - ${n>0?S` + `:C} + `}if(e.type===`array`&&e.items?.allOf&&Array.isArray(e.items.allOf)){let n=[],r=!0;for(let t of e.items.allOf){if(!t.$ref){r=!1;continue}let e=_l(t.$ref);e&&n.push({ref:t.$ref,link:e})}if(r&&n.length>0)return C`Array<${n.map((e,n)=>C` + ${n>0?C` + `:w} ${t(e.ref,e.link)} - `)}>`}if(e.type===`array`&&e.items?.$ref){let n=ol(e.items.$ref);if(n)return S`Array<${t(e.items.$ref,n)}>`}let n=e.oneOf??e.anyOf;if(n&&Array.isArray(n)){let e=[],r=!0;for(let t of n){if(!t.$ref){r=!1;break}let n=ol(t.$ref);n&&e.push({ref:t.$ref,link:n})}if(r&&e.length>0)return S` - ${e.map((e,n)=>S` - ${n>0?S` | `:C} + `)}>`}if(e.type===`array`&&e.items?.$ref){let n=_l(e.items.$ref);if(n)return C`Array<${t(e.items.$ref,n)}>`}let n=e.oneOf??e.anyOf;if(n&&Array.isArray(n)){let e=[],r=!0;for(let t of n){if(!t.$ref){r=!1;break}let n=_l(t.$ref);n&&e.push({ref:t.$ref,link:n})}if(r&&e.length>0)return C` + ${e.map((e,n)=>C` + ${n>0?C` | `:w} ${t(e.ref,e.link)} `)} - `;let i=n.map(e=>e.title).filter(Boolean);if(i.length===n.length)return S`${i.join(` | `)}`}if(e.$ref){let n=ol(e.$ref);if(n)return S`${t(e.$ref,n)}`}let r=cl(e);return r?S`${r}`:C}function Ou(e,t){if(!e)return C;let n=sl(e,{includeExample:t?.includeExample});if(!n.length&&!e.enum?.length)return C;let r=t?.labelSuffix??``;return S` +
`;let i=n.map(e=>e.title).filter(Boolean);if(i.length===n.length)return C`${i.join(` | `)}`}if(e.$ref){let n=_l(e.$ref);if(n)return C`${t(e.$ref,n)}`}let r=yl(e);return r?C`${r}`:w}function zu(e,t){if(!e)return w;let n=vl(e,{includeExample:t?.includeExample});if(!n.length&&!e.enum?.length)return w;let r=t?.labelSuffix??``;return C`
- ${n.map(e=>S` + ${n.map(e=>C` ${e.label}${r} - ${e.isCode?S`${e.value}`:e.value} + ${e.isCode?C`${e.value}`:e.value} `)} - ${e.enum?.length?S` + ${e.enum?.length?C`
enum${r} -
${e.enum.map(e=>S`${JSON.stringify(e)}`)}
+
${e.enum.map(e=>C`${JSON.stringify(e)}`)}
- `:C} + `:w}
- `}var ku=x` + `}var Bu=S` :host { display: inline; position: relative; @@ -5841,7 +6129,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error margin-bottom: var(--global-padding); text-align: left; } -`,Au=x` +`,Vu=S` :host { --indicator-color: var(--sl-color-primary-600); --track-color: var(--sl-color-neutral-200); @@ -6075,23 +6363,23 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error .tab-group--end ::slotted(sl-tab-panel) { --padding: 0 var(--sl-spacing-medium); } -`,ju=x` +`,Hu=S` :host { display: contents; } -`,Mu=class extends M{constructor(){super(...arguments),this.observedElements=[],this.disabled=!1}connectedCallback(){super.connectedCallback(),this.resizeObserver=new ResizeObserver(e=>{this.emit(`sl-resize`,{detail:{entries:e}})}),this.disabled||this.startObserver()}disconnectedCallback(){super.disconnectedCallback(),this.stopObserver()}handleSlotChange(){this.disabled||this.startObserver()}startObserver(){let e=this.shadowRoot.querySelector(`slot`);if(e!==null){let t=e.assignedElements({flatten:!0});this.observedElements.forEach(e=>this.resizeObserver.unobserve(e)),this.observedElements=[],t.forEach(e=>{this.resizeObserver.observe(e),this.observedElements.push(e)})}}stopObserver(){this.resizeObserver.disconnect()}handleDisabledChange(){this.disabled?this.stopObserver():this.startObserver()}render(){return S` `}};Mu.styles=[D,ju],T([k({type:Boolean,reflect:!0})],Mu.prototype,`disabled`,2),T([E(`disabled`,{waitUntilFirstUpdate:!0})],Mu.prototype,`handleDisabledChange`,1);var X=class extends M{constructor(){super(...arguments),this.tabs=[],this.focusableTabs=[],this.panels=[],this.localize=new I(this),this.hasScrollControls=!1,this.shouldHideScrollStartButton=!1,this.shouldHideScrollEndButton=!1,this.placement=`top`,this.activation=`auto`,this.noScrollControls=!1,this.fixedScrollControls=!1,this.scrollOffset=1}connectedCallback(){let e=Promise.all([customElements.whenDefined(`sl-tab`),customElements.whenDefined(`sl-tab-panel`)]);super.connectedCallback(),this.resizeObserver=new ResizeObserver(()=>{this.repositionIndicator(),this.updateScrollControls()}),this.mutationObserver=new MutationObserver(e=>{let t=e.filter(({target:e})=>{if(e===this)return!0;if(e.closest(`sl-tab-group`)!==this)return!1;let t=e.tagName.toLowerCase();return t===`sl-tab`||t===`sl-tab-panel`});if(t.length!==0){if(t.some(e=>![`aria-labelledby`,`aria-controls`].includes(e.attributeName))&&setTimeout(()=>this.setAriaLabels()),t.some(e=>e.attributeName===`disabled`))this.syncTabsAndPanels();else if(t.some(e=>e.attributeName===`active`)){let e=t.filter(e=>e.attributeName===`active`&&e.target.tagName.toLowerCase()===`sl-tab`).map(e=>e.target).find(e=>e.active);e&&this.setActiveTab(e)}}}),this.updateComplete.then(()=>{this.syncTabsAndPanels(),this.mutationObserver.observe(this,{attributes:!0,attributeFilter:[`active`,`disabled`,`name`,`panel`],childList:!0,subtree:!0}),this.resizeObserver.observe(this.nav),e.then(()=>{new IntersectionObserver((e,t)=>{e[0].intersectionRatio>0&&(this.setAriaLabels(),this.setActiveTab(this.getActiveTab()??this.tabs[0],{emitEvents:!1}),t.unobserve(e[0].target))}).observe(this.tabGroup)})})}disconnectedCallback(){var e,t;super.disconnectedCallback(),(e=this.mutationObserver)==null||e.disconnect(),this.nav&&((t=this.resizeObserver)==null||t.unobserve(this.nav))}getAllTabs(){return this.shadowRoot.querySelector(`slot[name="nav"]`).assignedElements()}getAllPanels(){return[...this.body.assignedElements()].filter(e=>e.tagName.toLowerCase()===`sl-tab-panel`)}getActiveTab(){return this.tabs.find(e=>e.active)}handleClick(e){let t=e.target.closest(`sl-tab`);t?.closest(`sl-tab-group`)===this&&t!==null&&this.setActiveTab(t,{scrollBehavior:`smooth`})}handleKeyDown(e){let t=e.target.closest(`sl-tab`);if(t?.closest(`sl-tab-group`)===this&&([`Enter`,` `].includes(e.key)&&t!==null&&(this.setActiveTab(t,{scrollBehavior:`smooth`}),e.preventDefault()),[`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key))){let t=this.tabs.find(e=>e.matches(`:focus`)),n=this.localize.dir()===`rtl`,r=null;if(t?.tagName.toLowerCase()===`sl-tab`){if(e.key===`Home`)r=this.focusableTabs[0];else if(e.key===`End`)r=this.focusableTabs[this.focusableTabs.length-1];else if([`top`,`bottom`].includes(this.placement)&&e.key===(n?`ArrowRight`:`ArrowLeft`)||[`start`,`end`].includes(this.placement)&&e.key===`ArrowUp`){let e=this.tabs.findIndex(e=>e===t);r=this.findNextFocusableTab(e,`backward`)}else if([`top`,`bottom`].includes(this.placement)&&e.key===(n?`ArrowLeft`:`ArrowRight`)||[`start`,`end`].includes(this.placement)&&e.key===`ArrowDown`){let e=this.tabs.findIndex(e=>e===t);r=this.findNextFocusableTab(e,`forward`)}if(!r)return;r.tabIndex=0,r.focus({preventScroll:!0}),this.activation===`auto`?this.setActiveTab(r,{scrollBehavior:`smooth`}):this.tabs.forEach(e=>{e.tabIndex=e===r?0:-1}),[`top`,`bottom`].includes(this.placement)&&ro(r,this.nav,`horizontal`),e.preventDefault()}}}handleScrollToStart(){this.nav.scroll({left:this.localize.dir()===`rtl`?this.nav.scrollLeft+this.nav.clientWidth:this.nav.scrollLeft-this.nav.clientWidth,behavior:`smooth`})}handleScrollToEnd(){this.nav.scroll({left:this.localize.dir()===`rtl`?this.nav.scrollLeft-this.nav.clientWidth:this.nav.scrollLeft+this.nav.clientWidth,behavior:`smooth`})}setActiveTab(e,t){if(t=Ln({emitEvents:!0,scrollBehavior:`auto`},t),e!==this.activeTab&&!e.disabled){let n=this.activeTab;this.activeTab=e,this.tabs.forEach(e=>{e.active=e===this.activeTab,e.tabIndex=e===this.activeTab?0:-1}),this.panels.forEach(e=>e.active=e.name===this.activeTab?.panel),this.syncIndicator(),[`top`,`bottom`].includes(this.placement)&&ro(this.activeTab,this.nav,`horizontal`,t.scrollBehavior),t.emitEvents&&(n&&this.emit(`sl-tab-hide`,{detail:{name:n.panel}}),this.emit(`sl-tab-show`,{detail:{name:this.activeTab.panel}}))}}setAriaLabels(){this.tabs.forEach(e=>{let t=this.panels.find(t=>t.name===e.panel);t&&(e.setAttribute(`aria-controls`,t.getAttribute(`id`)),t.setAttribute(`aria-labelledby`,e.getAttribute(`id`)))})}repositionIndicator(){let e=this.getActiveTab();if(!e)return;let t=e.clientWidth,n=e.clientHeight,r=this.localize.dir()===`rtl`,i=this.getAllTabs(),a=i.slice(0,i.indexOf(e)).reduce((e,t)=>({left:e.left+t.clientWidth,top:e.top+t.clientHeight}),{left:0,top:0});switch(this.placement){case`top`:case`bottom`:this.indicator.style.width=`${t}px`,this.indicator.style.height=`auto`,this.indicator.style.translate=r?`${-1*a.left}px`:`${a.left}px`;break;case`start`:case`end`:this.indicator.style.width=`auto`,this.indicator.style.height=`${n}px`,this.indicator.style.translate=`0 ${a.top}px`;break}}syncTabsAndPanels(){this.tabs=this.getAllTabs(),this.focusableTabs=this.tabs.filter(e=>!e.disabled),this.panels=this.getAllPanels(),this.syncIndicator(),this.updateComplete.then(()=>this.updateScrollControls())}findNextFocusableTab(e,t){let n=null,r=t===`forward`?1:-1,i=e+r;for(;e=this.nav.scrollWidth-this.scrollOffset}scrollFromStart(){return this.localize.dir()===`rtl`?-this.nav.scrollLeft:this.nav.scrollLeft}updateScrollControls(){this.noScrollControls?this.hasScrollControls=!1:this.hasScrollControls=[`top`,`bottom`].includes(this.placement)&&this.nav.scrollWidth>this.nav.clientWidth+1,this.updateScrollButtons()}syncIndicator(){this.getActiveTab()?(this.indicator.style.display=`block`,this.repositionIndicator()):this.indicator.style.display=`none`}show(e){let t=this.tabs.find(t=>t.panel===e);t&&this.setActiveTab(t,{scrollBehavior:`smooth`})}render(){let e=this.localize.dir()===`rtl`;return S` +`,Uu=class extends N{constructor(){super(...arguments),this.observedElements=[],this.disabled=!1}connectedCallback(){super.connectedCallback(),this.resizeObserver=new ResizeObserver(e=>{this.emit(`sl-resize`,{detail:{entries:e}})}),this.disabled||this.startObserver()}disconnectedCallback(){super.disconnectedCallback(),this.stopObserver()}handleSlotChange(){this.disabled||this.startObserver()}startObserver(){let e=this.shadowRoot.querySelector(`slot`);if(e!==null){let t=e.assignedElements({flatten:!0});this.observedElements.forEach(e=>this.resizeObserver.unobserve(e)),this.observedElements=[],t.forEach(e=>{this.resizeObserver.observe(e),this.observedElements.push(e)})}}stopObserver(){this.resizeObserver.disconnect()}handleDisabledChange(){this.disabled?this.stopObserver():this.startObserver()}render(){return C` `}};Uu.styles=[O,Hu],E([A({type:Boolean,reflect:!0})],Uu.prototype,`disabled`,2),E([D(`disabled`,{waitUntilFirstUpdate:!0})],Uu.prototype,`handleDisabledChange`,1);var Z=class extends N{constructor(){super(...arguments),this.tabs=[],this.focusableTabs=[],this.panels=[],this.localize=new L(this),this.hasScrollControls=!1,this.shouldHideScrollStartButton=!1,this.shouldHideScrollEndButton=!1,this.placement=`top`,this.activation=`auto`,this.noScrollControls=!1,this.fixedScrollControls=!1,this.scrollOffset=1}connectedCallback(){let e=Promise.all([customElements.whenDefined(`sl-tab`),customElements.whenDefined(`sl-tab-panel`)]);super.connectedCallback(),this.resizeObserver=new ResizeObserver(()=>{this.repositionIndicator(),this.updateScrollControls()}),this.mutationObserver=new MutationObserver(e=>{let t=e.filter(({target:e})=>{if(e===this)return!0;if(e.closest(`sl-tab-group`)!==this)return!1;let t=e.tagName.toLowerCase();return t===`sl-tab`||t===`sl-tab-panel`});if(t.length!==0){if(t.some(e=>![`aria-labelledby`,`aria-controls`].includes(e.attributeName))&&setTimeout(()=>this.setAriaLabels()),t.some(e=>e.attributeName===`disabled`))this.syncTabsAndPanels();else if(t.some(e=>e.attributeName===`active`)){let e=t.filter(e=>e.attributeName===`active`&&e.target.tagName.toLowerCase()===`sl-tab`).map(e=>e.target).find(e=>e.active);e&&this.setActiveTab(e)}}}),this.updateComplete.then(()=>{this.syncTabsAndPanels(),this.mutationObserver.observe(this,{attributes:!0,attributeFilter:[`active`,`disabled`,`name`,`panel`],childList:!0,subtree:!0}),this.resizeObserver.observe(this.nav),e.then(()=>{new IntersectionObserver((e,t)=>{e[0].intersectionRatio>0&&(this.setAriaLabels(),this.setActiveTab(this.getActiveTab()??this.tabs[0],{emitEvents:!1}),t.unobserve(e[0].target))}).observe(this.tabGroup)})})}disconnectedCallback(){var e,t;super.disconnectedCallback(),(e=this.mutationObserver)==null||e.disconnect(),this.nav&&((t=this.resizeObserver)==null||t.unobserve(this.nav))}getAllTabs(){return this.shadowRoot.querySelector(`slot[name="nav"]`).assignedElements()}getAllPanels(){return[...this.body.assignedElements()].filter(e=>e.tagName.toLowerCase()===`sl-tab-panel`)}getActiveTab(){return this.tabs.find(e=>e.active)}handleClick(e){let t=e.target.closest(`sl-tab`);t?.closest(`sl-tab-group`)===this&&t!==null&&this.setActiveTab(t,{scrollBehavior:`smooth`})}handleKeyDown(e){let t=e.target.closest(`sl-tab`);if(t?.closest(`sl-tab-group`)===this&&([`Enter`,` `].includes(e.key)&&t!==null&&(this.setActiveTab(t,{scrollBehavior:`smooth`}),e.preventDefault()),[`ArrowLeft`,`ArrowRight`,`ArrowUp`,`ArrowDown`,`Home`,`End`].includes(e.key))){let t=this.tabs.find(e=>e.matches(`:focus`)),n=this.localize.dir()===`rtl`,r=null;if(t?.tagName.toLowerCase()===`sl-tab`){if(e.key===`Home`)r=this.focusableTabs[0];else if(e.key===`End`)r=this.focusableTabs[this.focusableTabs.length-1];else if([`top`,`bottom`].includes(this.placement)&&e.key===(n?`ArrowRight`:`ArrowLeft`)||[`start`,`end`].includes(this.placement)&&e.key===`ArrowUp`){let e=this.tabs.findIndex(e=>e===t);r=this.findNextFocusableTab(e,`backward`)}else if([`top`,`bottom`].includes(this.placement)&&e.key===(n?`ArrowLeft`:`ArrowRight`)||[`start`,`end`].includes(this.placement)&&e.key===`ArrowDown`){let e=this.tabs.findIndex(e=>e===t);r=this.findNextFocusableTab(e,`forward`)}if(!r)return;r.tabIndex=0,r.focus({preventScroll:!0}),this.activation===`auto`?this.setActiveTab(r,{scrollBehavior:`smooth`}):this.tabs.forEach(e=>{e.tabIndex=e===r?0:-1}),[`top`,`bottom`].includes(this.placement)&&no(r,this.nav,`horizontal`),e.preventDefault()}}}handleScrollToStart(){this.nav.scroll({left:this.localize.dir()===`rtl`?this.nav.scrollLeft+this.nav.clientWidth:this.nav.scrollLeft-this.nav.clientWidth,behavior:`smooth`})}handleScrollToEnd(){this.nav.scroll({left:this.localize.dir()===`rtl`?this.nav.scrollLeft-this.nav.clientWidth:this.nav.scrollLeft+this.nav.clientWidth,behavior:`smooth`})}setActiveTab(e,t){if(t=In({emitEvents:!0,scrollBehavior:`auto`},t),e!==this.activeTab&&!e.disabled){let n=this.activeTab;this.activeTab=e,this.tabs.forEach(e=>{e.active=e===this.activeTab,e.tabIndex=e===this.activeTab?0:-1}),this.panels.forEach(e=>e.active=e.name===this.activeTab?.panel),this.syncIndicator(),[`top`,`bottom`].includes(this.placement)&&no(this.activeTab,this.nav,`horizontal`,t.scrollBehavior),t.emitEvents&&(n&&this.emit(`sl-tab-hide`,{detail:{name:n.panel}}),this.emit(`sl-tab-show`,{detail:{name:this.activeTab.panel}}))}}setAriaLabels(){this.tabs.forEach(e=>{let t=this.panels.find(t=>t.name===e.panel);t&&(e.setAttribute(`aria-controls`,t.getAttribute(`id`)),t.setAttribute(`aria-labelledby`,e.getAttribute(`id`)))})}repositionIndicator(){let e=this.getActiveTab();if(!e)return;let t=e.clientWidth,n=e.clientHeight,r=this.localize.dir()===`rtl`,i=this.getAllTabs(),a=i.slice(0,i.indexOf(e)).reduce((e,t)=>({left:e.left+t.clientWidth,top:e.top+t.clientHeight}),{left:0,top:0});switch(this.placement){case`top`:case`bottom`:this.indicator.style.width=`${t}px`,this.indicator.style.height=`auto`,this.indicator.style.translate=r?`${-1*a.left}px`:`${a.left}px`;break;case`start`:case`end`:this.indicator.style.width=`auto`,this.indicator.style.height=`${n}px`,this.indicator.style.translate=`0 ${a.top}px`;break}}syncTabsAndPanels(){this.tabs=this.getAllTabs(),this.focusableTabs=this.tabs.filter(e=>!e.disabled),this.panels=this.getAllPanels(),this.syncIndicator(),this.updateComplete.then(()=>this.updateScrollControls())}findNextFocusableTab(e,t){let n=null,r=t===`forward`?1:-1,i=e+r;for(;e=this.nav.scrollWidth-this.scrollOffset}scrollFromStart(){return this.localize.dir()===`rtl`?-this.nav.scrollLeft:this.nav.scrollLeft}updateScrollControls(){this.noScrollControls?this.hasScrollControls=!1:this.hasScrollControls=[`top`,`bottom`].includes(this.placement)&&this.nav.scrollWidth>this.nav.clientWidth+1,this.updateScrollButtons()}syncIndicator(){this.getActiveTab()?(this.indicator.style.display=`block`,this.repositionIndicator()):this.indicator.style.display=`none`}show(e){let t=this.tabs.find(t=>t.panel===e);t&&this.setActiveTab(t,{scrollBehavior:`smooth`})}render(){let e=this.localize.dir()===`rtl`;return C`

- ${this.hasScrollControls?S` + ${this.hasScrollControls?C` An error
- ${this.hasScrollControls?S` + ${this.hasScrollControls?C` An error - `}};X.styles=[D,Au],X.dependencies={"sl-icon-button":F,"sl-resize-observer":Mu},T([j(`.tab-group`)],X.prototype,`tabGroup`,2),T([j(`.tab-group__body`)],X.prototype,`body`,2),T([j(`.tab-group__nav`)],X.prototype,`nav`,2),T([j(`.tab-group__indicator`)],X.prototype,`indicator`,2),T([A()],X.prototype,`hasScrollControls`,2),T([A()],X.prototype,`shouldHideScrollStartButton`,2),T([A()],X.prototype,`shouldHideScrollEndButton`,2),T([k()],X.prototype,`placement`,2),T([k()],X.prototype,`activation`,2),T([k({attribute:`no-scroll-controls`,type:Boolean})],X.prototype,`noScrollControls`,2),T([k({attribute:`fixed-scroll-controls`,type:Boolean})],X.prototype,`fixedScrollControls`,2),T([qn({passive:!0})],X.prototype,`updateScrollButtons`,1),T([E(`noScrollControls`,{waitUntilFirstUpdate:!0})],X.prototype,`updateScrollControls`,1),T([E(`placement`,{waitUntilFirstUpdate:!0})],X.prototype,`syncIndicator`,1),X.define(`sl-tab-group`);var Nu=(e,t)=>{let n=0;return function(...r){window.clearTimeout(n),n=window.setTimeout(()=>{e.call(this,...r)},t)}},Pu=(e,t,n)=>{let r=e[t];e[t]=function(...e){r.call(this,...e),n.call(this,r,...e)}};(()=>{if(!(typeof window>`u`)&&!(`onscrollend`in window)){let e=new Set,t=new WeakMap,n=t=>{for(let n of t.changedTouches)e.add(n.identifier)},r=t=>{for(let n of t.changedTouches)e.delete(n.identifier)};document.addEventListener(`touchstart`,n,!0),document.addEventListener(`touchend`,r,!0),document.addEventListener(`touchcancel`,r,!0),Pu(EventTarget.prototype,`addEventListener`,function(n,r){if(r!==`scrollend`)return;let i=Nu(()=>{e.size?i():this.dispatchEvent(new Event(`scrollend`))},100);n.call(this,`scroll`,i,{passive:!0}),t.set(this,i)}),Pu(EventTarget.prototype,`removeEventListener`,function(e,n){if(n!==`scrollend`)return;let r=t.get(this);r&&e.call(this,`scroll`,r,{passive:!0})})}})();var Fu=x` + `}};Z.styles=[O,Vu],Z.dependencies={"sl-icon-button":I,"sl-resize-observer":Uu},E([M(`.tab-group`)],Z.prototype,`tabGroup`,2),E([M(`.tab-group__body`)],Z.prototype,`body`,2),E([M(`.tab-group__nav`)],Z.prototype,`nav`,2),E([M(`.tab-group__indicator`)],Z.prototype,`indicator`,2),E([j()],Z.prototype,`hasScrollControls`,2),E([j()],Z.prototype,`shouldHideScrollStartButton`,2),E([j()],Z.prototype,`shouldHideScrollEndButton`,2),E([A()],Z.prototype,`placement`,2),E([A()],Z.prototype,`activation`,2),E([A({attribute:`no-scroll-controls`,type:Boolean})],Z.prototype,`noScrollControls`,2),E([A({attribute:`fixed-scroll-controls`,type:Boolean})],Z.prototype,`fixedScrollControls`,2),E([Kn({passive:!0})],Z.prototype,`updateScrollButtons`,1),E([D(`noScrollControls`,{waitUntilFirstUpdate:!0})],Z.prototype,`updateScrollControls`,1),E([D(`placement`,{waitUntilFirstUpdate:!0})],Z.prototype,`syncIndicator`,1),Z.define(`sl-tab-group`);var Wu=(e,t)=>{let n=0;return function(...r){window.clearTimeout(n),n=window.setTimeout(()=>{e.call(this,...r)},t)}},Gu=(e,t,n)=>{let r=e[t];e[t]=function(...e){r.call(this,...e),n.call(this,r,...e)}};(()=>{if(!(typeof window>`u`)&&!(`onscrollend`in window)){let e=new Set,t=new WeakMap,n=t=>{for(let n of t.changedTouches)e.add(n.identifier)},r=t=>{for(let n of t.changedTouches)e.delete(n.identifier)};document.addEventListener(`touchstart`,n,!0),document.addEventListener(`touchend`,r,!0),document.addEventListener(`touchcancel`,r,!0),Gu(EventTarget.prototype,`addEventListener`,function(n,r){if(r!==`scrollend`)return;let i=Wu(()=>{e.size?i():this.dispatchEvent(new Event(`scrollend`))},100);n.call(this,`scroll`,i,{passive:!0}),t.set(this,i)}),Gu(EventTarget.prototype,`removeEventListener`,function(e,n){if(n!==`scrollend`)return;let r=t.get(this);r&&e.call(this,`scroll`,r,{passive:!0})})}})();var Ku=S` :host { display: inline-block; } @@ -6192,13 +6480,13 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error outline-offset: -3px; } } -`,Iu=0,Lu=class extends M{constructor(){super(...arguments),this.localize=new I(this),this.attrId=++Iu,this.componentId=`sl-tab-${this.attrId}`,this.panel=``,this.active=!1,this.closable=!1,this.disabled=!1,this.tabIndex=0}connectedCallback(){super.connectedCallback(),this.setAttribute(`role`,`tab`)}handleCloseClick(e){e.stopPropagation(),this.emit(`sl-close`)}handleActiveChange(){this.setAttribute(`aria-selected`,this.active?`true`:`false`)}handleDisabledChange(){this.setAttribute(`aria-disabled`,this.disabled?`true`:`false`),this.disabled&&!this.active?this.tabIndex=-1:this.tabIndex=0}render(){return this.id=this.id.length>0?this.id:this.componentId,S` +`,qu=0,Ju=class extends N{constructor(){super(...arguments),this.localize=new L(this),this.attrId=++qu,this.componentId=`sl-tab-${this.attrId}`,this.panel=``,this.active=!1,this.closable=!1,this.disabled=!1,this.tabIndex=0}connectedCallback(){super.connectedCallback(),this.setAttribute(`role`,`tab`)}handleCloseClick(e){e.stopPropagation(),this.emit(`sl-close`)}handleActiveChange(){this.setAttribute(`aria-selected`,this.active?`true`:`false`)}handleDisabledChange(){this.setAttribute(`aria-disabled`,this.disabled?`true`:`false`),this.disabled&&!this.active?this.tabIndex=-1:this.tabIndex=0}render(){return this.id=this.id.length>0?this.id:this.componentId,C`

- ${this.closable?S` + ${this.closable?C` An error > `:``}
- `}};Lu.styles=[D,Fu],Lu.dependencies={"sl-icon-button":F},T([j(`.tab`)],Lu.prototype,`tab`,2),T([k({reflect:!0})],Lu.prototype,`panel`,2),T([k({type:Boolean,reflect:!0})],Lu.prototype,`active`,2),T([k({type:Boolean,reflect:!0})],Lu.prototype,`closable`,2),T([k({type:Boolean,reflect:!0})],Lu.prototype,`disabled`,2),T([k({type:Number,reflect:!0})],Lu.prototype,`tabIndex`,2),T([E(`active`)],Lu.prototype,`handleActiveChange`,1),T([E(`disabled`)],Lu.prototype,`handleDisabledChange`,1),Lu.define(`sl-tab`);var Ru=x` + `}};Ju.styles=[O,Ku],Ju.dependencies={"sl-icon-button":I},E([M(`.tab`)],Ju.prototype,`tab`,2),E([A({reflect:!0})],Ju.prototype,`panel`,2),E([A({type:Boolean,reflect:!0})],Ju.prototype,`active`,2),E([A({type:Boolean,reflect:!0})],Ju.prototype,`closable`,2),E([A({type:Boolean,reflect:!0})],Ju.prototype,`disabled`,2),E([A({type:Number,reflect:!0})],Ju.prototype,`tabIndex`,2),E([D(`active`)],Ju.prototype,`handleActiveChange`,1),E([D(`disabled`)],Ju.prototype,`handleDisabledChange`,1),Ju.define(`sl-tab`);var Yu=S` :host { --padding: 0; @@ -6226,12 +6514,12 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error display: block; padding: var(--padding); } -`,zu=0,Bu=class extends M{constructor(){super(...arguments),this.attrId=++zu,this.componentId=`sl-tab-panel-${this.attrId}`,this.name=``,this.active=!1}connectedCallback(){super.connectedCallback(),this.id=this.id.length>0?this.id:this.componentId,this.setAttribute(`role`,`tabpanel`)}handleActiveChange(){this.setAttribute(`aria-hidden`,this.active?`false`:`true`)}render(){return S` +`,Xu=0,Zu=class extends N{constructor(){super(...arguments),this.attrId=++Xu,this.componentId=`sl-tab-panel-${this.attrId}`,this.name=``,this.active=!1}connectedCallback(){super.connectedCallback(),this.id=this.id.length>0?this.id:this.componentId,this.setAttribute(`role`,`tabpanel`)}handleActiveChange(){this.setAttribute(`aria-hidden`,this.active?`false`:`true`)}render(){return C` - `}};Bu.styles=[D,Ru],T([k({reflect:!0})],Bu.prototype,`name`,2),T([k({type:Boolean,reflect:!0})],Bu.prototype,`active`,2),T([E(`active`)],Bu.prototype,`handleActiveChange`,1),Bu.define(`sl-tab-panel`);var Vu=[Hs,x` + `}};Zu.styles=[O,Yu],E([A({reflect:!0})],Zu.prototype,`name`,2),E([A({type:Boolean,reflect:!0})],Zu.prototype,`active`,2),E([D(`active`)],Zu.prototype,`handleActiveChange`,1),Zu.define(`sl-tab-panel`);var Qu=[Vs,S` :host { display: block; margin-top: var(--global-padding); @@ -6705,8 +6993,8 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error :host([compact]) .oneof-container { display: block; } -`],Hu=200,Uu=180,Wu=52,Gu=10,Ku=20,qu=10.5,Ju=16,Yu=224,Xu=160,Zu=260,Qu=340,$u=56,ed=9.5,td=32,nd=340,rd=40,id=72,ad=250,od=170,sd=208,cd=class extends w{constructor(...e){super(...e),this.schemaJson=``,this.compact=!1,this.condensed=!1,this.constrained=!1,this.popoverContext=!1,this.schema=null,this.availableWidth=0,this.polymorphicSelections={},this.resizeObserver=null}static{this.styles=[$c,el,...Vu]}connectedCallback(){super.connectedCallback(),this.updateAvailableWidth(),!(typeof ResizeObserver>`u`)&&(this.resizeObserver=new ResizeObserver(e=>{let t=e[0]?.contentRect?.width??this.getBoundingClientRect().width;this.setAvailableWidth(t)}),this.resizeObserver.observe(this))}disconnectedCallback(){super.disconnectedCallback(),this.resizeObserver?.disconnect(),this.resizeObserver=null}willUpdate(e){if(e.has(`schemaJson`)&&this.schemaJson)try{this.schema=JSON.parse(this.schemaJson),this.polymorphicSelections={},this.computeNameColumnWidth(),this.primeReferencedSchemas(this.schema)}catch{this.schema=null}}updateAvailableWidth(){this.setAvailableWidth(this.getBoundingClientRect().width)}setAvailableWidth(e){if(!Number.isFinite(e))return;let t=Math.round(e);t!==this.availableWidth&&(this.availableWidth=t)}async primeReferencedSchemas(e){await se(e),this.requestUpdate()}parseRegistrySchema(e,t){if(t.has(e))return null;let n=ie(e);if(!n?.schemaJson)return null;try{return t.add(e),JSON.parse(n.schemaJson)}catch{return null}}resolveRenderableTarget(e,t=new Set){return e?.$ref?this.parseRegistrySchema(e.$ref,t)??e:e}collectRenderedNameMetrics(e,t=new Set){if(!e||typeof e!=`object`)return{maxLen:0,hasRequired:!1};let n=0,r=!1,i=e.properties,a=new Set(e.required??[]);if(i&&typeof i==`object`)for(let[e,o]of Object.entries(i)){n=Math.max(n,e.length),a.has(e)&&(r=!0);let i=this.collectRenderedNameMetrics(o,t);n=Math.max(n,i.maxLen),r||=i.hasRequired}for(let i of[`allOf`,`oneOf`,`anyOf`]){let a=e[i];if(Array.isArray(a))for(let e of a){if(e?.$ref){if(i!==`allOf`)continue;let a=this.parseRegistrySchema(e.$ref,t);if(!a)continue;let o=this.collectRenderedNameMetrics(a,t);n=Math.max(n,o.maxLen),r||=o.hasRequired;continue}let a=this.collectRenderedNameMetrics(e,t);n=Math.max(n,a.maxLen),r||=a.hasRequired}}if(e.items){let i=e.items;if(i.$ref){let e=this.parseRegistrySchema(i.$ref,t);if(e){let i=this.collectRenderedNameMetrics(e,t);n=Math.max(n,i.maxLen),r||=i.hasRequired}}else{let e=this.collectRenderedNameMetrics(i,t);n=Math.max(n,e.maxLen),r||=e.hasRequired}}return{maxLen:n,hasRequired:r}}computeNameColumnWidth(){if(!this.schema)return;let{maxLen:e}=this.collectRenderedNameMetrics(this.schema),t=e*qu,n=Math.max(Uu,Wu+Gu+t+Ku);this.style.setProperty(`--compact-name-width`,`${Math.round(n)}px`)}renderRefAnchor(e,t){return S` - ${S`\u279c ${t.name}`}`}renderType(e){return Du(e,(e,t)=>this.renderRefAnchor(e,t))}renderPropertyRow(e,t,n){let r=n.has(e);return S` +`],$u=200,ed=180,td=52,nd=10,rd=20,id=10.5,ad=16,od=224,sd=160,cd=260,ld=340,ud=56,dd=9.5,fd=32,pd=340,md=40,hd=72,gd=250,_d=170,vd=208,yd=class extends T{constructor(...e){super(...e),this.schemaJson=``,this.compact=!1,this.condensed=!1,this.constrained=!1,this.popoverContext=!1,this.schema=null,this.availableWidth=0,this.polymorphicSelections={},this.resizeObserver=null}static{this.styles=[ul,dl,...Qu]}connectedCallback(){super.connectedCallback(),this.updateAvailableWidth(),!(typeof ResizeObserver>`u`)&&(this.resizeObserver=new ResizeObserver(e=>{let t=e[0]?.contentRect?.width??this.getBoundingClientRect().width;this.setAvailableWidth(t)}),this.resizeObserver.observe(this))}disconnectedCallback(){super.disconnectedCallback(),this.resizeObserver?.disconnect(),this.resizeObserver=null}willUpdate(e){if(e.has(`schemaJson`)&&this.schemaJson)try{this.schema=JSON.parse(this.schemaJson),this.polymorphicSelections={},this.computeNameColumnWidth(),this.primeReferencedSchemas(this.schema)}catch{this.schema=null}}updateAvailableWidth(){this.setAvailableWidth(this.getBoundingClientRect().width)}setAvailableWidth(e){if(!Number.isFinite(e))return;let t=Math.round(e);t!==this.availableWidth&&(this.availableWidth=t)}async primeReferencedSchemas(e){await oe(e),this.requestUpdate()}parseRegistrySchema(e,t){if(t.has(e))return null;let n=re(e);if(!n?.schemaJson)return null;try{return t.add(e),JSON.parse(n.schemaJson)}catch{return null}}resolveRenderableTarget(e,t=new Set){return e?.$ref?this.parseRegistrySchema(e.$ref,t)??e:e}collectRenderedNameMetrics(e,t=new Set){if(!e||typeof e!=`object`)return{maxLen:0,hasRequired:!1};let n=0,r=!1,i=e.properties,a=new Set(e.required??[]);if(i&&typeof i==`object`)for(let[e,o]of Object.entries(i)){n=Math.max(n,e.length),a.has(e)&&(r=!0);let i=this.collectRenderedNameMetrics(o,t);n=Math.max(n,i.maxLen),r||=i.hasRequired}for(let i of[`allOf`,`oneOf`,`anyOf`]){let a=e[i];if(Array.isArray(a))for(let e of a){if(e?.$ref){if(i!==`allOf`)continue;let a=this.parseRegistrySchema(e.$ref,t);if(!a)continue;let o=this.collectRenderedNameMetrics(a,t);n=Math.max(n,o.maxLen),r||=o.hasRequired;continue}let a=this.collectRenderedNameMetrics(e,t);n=Math.max(n,a.maxLen),r||=a.hasRequired}}if(e.items){let i=e.items;if(i.$ref){let e=this.parseRegistrySchema(i.$ref,t);if(e){let i=this.collectRenderedNameMetrics(e,t);n=Math.max(n,i.maxLen),r||=i.hasRequired}}else{let e=this.collectRenderedNameMetrics(i,t);n=Math.max(n,e.maxLen),r||=e.hasRequired}}return{maxLen:n,hasRequired:r}}computeNameColumnWidth(){if(!this.schema)return;let{maxLen:e}=this.collectRenderedNameMetrics(this.schema),t=e*id,n=Math.max(ed,td+nd+t+rd);this.style.setProperty(`--compact-name-width`,`${Math.round(n)}px`)}renderRefAnchor(e,t){return C` + ${C`\u279c ${t.name}`}`}renderType(e){return Ru(e,(e,t)=>this.renderRefAnchor(e,t))}renderPropertyRow(e,t,n){let r=n.has(e);return C`

${`req`} @@ -6714,49 +7002,49 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error

${this.renderType(t)} - ${Ou(t,{labelSuffix:`:`})} + ${zu(t,{labelSuffix:`:`})}
- ${Y(t.description)} + ${X(t.description)}
- `}renderPropertyTable(e,t,n=`$.properties`){let r=Object.entries(e);return r.length?r.map(([e,r])=>{let i=r.oneOf??r.anyOf;return i&&Array.isArray(i)?S` + `}renderPropertyTable(e,t,n=`$.properties`){let r=Object.entries(e);return r.length?r.map(([e,r])=>{let i=r.oneOf??r.anyOf;return i&&Array.isArray(i)?C`
${this.renderOneOf(i,e,r.description,t.has(e),`polymorphic`,`${n}.${e}`)}
- `:this.renderPropertyRow(e,r,t)}):C}renderCompositionRefs(e){return S` + `:this.renderPropertyRow(e,r,t)}):w}renderCompositionRefs(e){return C`
Composed from - ${e.map(e=>{let t=ol(e.$ref);if(!t)return C;let n=v(e.$ref)?.description??``;return S` + ${e.map(e=>{let t=_l(e.$ref);if(!t)return w;let n=y(e.$ref)?.description??``;return C`
${this.renderRefAnchor(e.$ref,t)} - ${n?Y(n,{className:`composition-ref-desc pp-markdown`}):C} + ${n?X(n,{className:`composition-ref-desc pp-markdown`}):w}
`})}
- `}mergePropertyMaps(e,t){for(let[n,r]of Object.entries(t))e[n]=r}collectCompositionData(e,t=new Set){let n=[],r=new Set(e?.required||[]),i={};e?.properties&&this.mergePropertyMaps(i,e.properties);let a=Array.isArray(e?.allOf)?e.allOf:[];for(let e of a){if(e?.$ref){n.push(e);let a=this.parseRegistrySchema(e.$ref,t);if(!a)continue;let o=this.collectCompositionData(a,t);o.refEntries.length&&n.push(...o.refEntries),this.mergePropertyMaps(i,o.mergedProperties);for(let e of o.mergedRequired)r.add(e);continue}if(e?.allOf&&Array.isArray(e.allOf)){let a=this.collectCompositionData(e,t);a.refEntries.length&&n.push(...a.refEntries),this.mergePropertyMaps(i,a.mergedProperties);for(let e of a.mergedRequired)r.add(e);continue}if(e?.properties&&this.mergePropertyMaps(i,e.properties),e?.required)for(let t of e.required)r.add(t)}return{refEntries:n,mergedRequired:r,mergedProperties:i}}renderComposition(e){let{refEntries:t,mergedRequired:n,mergedProperties:r}=this.collectCompositionData(e),i=t.filter((e,n)=>e?.$ref&&t.findIndex(t=>t?.$ref===e.$ref)===n);return S` - ${i.length?this.renderCompositionRefs(i):C} - ${Object.keys(r).length?this.renderPropertyTable(r,n,`$.allOf.properties`):C} - `}renderOneOf(e,t,n,r,i,a=`$.oneOf`){if(!e.length)return C;let o=this.getPolymorphicSelectionKey(a,e),s=this.getSelectedPolymorphicIndex(o,e),c=e[s],l=this.getPolymorphicOptionLabel(c,s),u=this.shouldUsePolymorphicDropdown(e,t),d=e.length>1;return S` + `}mergePropertyMaps(e,t){for(let[n,r]of Object.entries(t))e[n]=r}collectCompositionData(e,t=new Set){let n=[],r=new Set(e?.required||[]),i={};e?.properties&&this.mergePropertyMaps(i,e.properties);let a=Array.isArray(e?.allOf)?e.allOf:[];for(let e of a){if(e?.$ref){n.push(e);let a=this.parseRegistrySchema(e.$ref,t);if(!a)continue;let o=this.collectCompositionData(a,t);o.refEntries.length&&n.push(...o.refEntries),this.mergePropertyMaps(i,o.mergedProperties);for(let e of o.mergedRequired)r.add(e);continue}if(e?.allOf&&Array.isArray(e.allOf)){let a=this.collectCompositionData(e,t);a.refEntries.length&&n.push(...a.refEntries),this.mergePropertyMaps(i,a.mergedProperties);for(let e of a.mergedRequired)r.add(e);continue}if(e?.properties&&this.mergePropertyMaps(i,e.properties),e?.required)for(let t of e.required)r.add(t)}return{refEntries:n,mergedRequired:r,mergedProperties:i}}renderComposition(e){let{refEntries:t,mergedRequired:n,mergedProperties:r}=this.collectCompositionData(e),i=t.filter((e,n)=>e?.$ref&&t.findIndex(t=>t?.$ref===e.$ref)===n);return C` + ${i.length?this.renderCompositionRefs(i):w} + ${Object.keys(r).length?this.renderPropertyTable(r,n,`$.allOf.properties`):w} + `}renderOneOf(e,t,n,r,i,a=`$.oneOf`){if(!e.length)return w;let o=this.getPolymorphicSelectionKey(a,e),s=this.getSelectedPolymorphicIndex(o,e),c=e[s],l=this.getPolymorphicOptionLabel(c,s),u=this.shouldUsePolymorphicDropdown(e,t),d=e.length>1;return C`
- ${t?S` + ${t?C`
req ${t} - ${i?S`
(${i})
`:C} + ${i?C`
(${i})
`:w}
- `:C} - ${n?Y(n,{className:`oneof-prop-desc pp-markdown`}):C} + `:w} + ${n?X(n,{className:`oneof-prop-desc pp-markdown`}):w}
- ${d?S` + ${d?C`
- ${u?S` + ${u?C`
${l} this.handlePolymorphicSelect(t,o,e.length)}> - ${e.map((e,t)=>S` + ${e.map((e,t)=>C` ${this.getPolymorphicOptionLabel(e,t)} `)} @@ -6765,14 +7053,14 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error

${this.renderOneOfOption(c,`${a}[${s}]`)}
- `:S` + `:C` - ${e.map((e,t)=>S` + ${e.map((e,t)=>C` \u203A ${this.getPolymorphicOptionLabel(e,t)} `)} - ${e.map((e,t)=>S` + ${e.map((e,t)=>C` ${this.renderOneOfOption(e,`${a}[${t}]`)} @@ -6780,41 +7068,41 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error `}

- `:S` + `:C`
${this.renderOneOfSingleValue(c)}
${this.renderOneOfSingleBody(c,`${a}[${s}]`)} `}
- `}getPolymorphicOptionLabel(e,t){return e?.title||e?.$ref?.split(`/`).pop()||`Option ${t+1}`}getPolymorphicSelectionKey(e,t){return`${e}:${t.map((e,t)=>this.getPolymorphicOptionLabel(e,t)).join(`|`)}`}getSelectedPolymorphicIndex(e,t){let n=this.polymorphicSelections[e]??0;return n>=0&&n=n||(this.polymorphicSelections={...this.polymorphicSelections,[t]:i})}getCompactNameWidth(){let e=parseFloat(this.style.getPropertyValue(`--compact-name-width`));return Number.isFinite(e)?e:Hu}getCssLengthPx(e,t){let n=e.trim(),r=parseFloat(n);if(!Number.isFinite(r))return t;if(n.endsWith(`rem`)){let e=parseFloat(getComputedStyle(document.documentElement).fontSize);return r*(Number.isFinite(e)?e:Ju)}if(n.endsWith(`em`)){let e=parseFloat(getComputedStyle(this).fontSize);return r*(Number.isFinite(e)?e:Ju)}return r}getPolymorphicConstrainedLeftWidth(){return this.getCssLengthPx(getComputedStyle(this).getPropertyValue(`--polymorphic-constrained-left-width`),Yu)}getPolymorphicVerticalTabRailWidth(){let e=getComputedStyle(this);return this.compact?this.getCssLengthPx(e.getPropertyValue(`--polymorphic-compact-tab-rail-width`),sd):this.condensed?this.getCssLengthPx(e.getPropertyValue(`--polymorphic-condensed-tab-rail-width`),od):this.getCssLengthPx(e.getPropertyValue(`--polymorphic-tab-rail-width`),ad)}getPolymorphicLeftWidth(e){if(!e)return 0;let t=Wu+e.length*qu,n=Math.max(this.getCompactNameWidth(),t);return this.constrained?Math.min(n,this.getPolymorphicConstrainedLeftWidth()):n}shouldUsePolymorphicDropdown(e,t){if(this.popoverContext)return!0;let n=this.availableWidth||this.getBoundingClientRect().width||this.offsetWidth;if(!n)return!1;let r=e.reduce((e,t,n)=>Math.max(e,this.getPolymorphicOptionLabel(t,n).length),0),i=this.condensed?Zu:Qu,a=Math.max(Xu,Math.min(i,$u+r*ed)),o=this.getPolymorphicVerticalTabRailWidth();if(a>o)return!0;let s=this.getPolymorphicLeftWidth(t),c=this.constrained?rd:id;return this.constrained?s+o+td+c>n:s+a+nd+c>n}renderOneOfSingleValue(e){return S` + `}getPolymorphicOptionLabel(e,t){return e?.title||e?.$ref?.split(`/`).pop()||`Option ${t+1}`}getPolymorphicSelectionKey(e,t){return`${e}:${t.map((e,t)=>this.getPolymorphicOptionLabel(e,t)).join(`|`)}`}getSelectedPolymorphicIndex(e,t){let n=this.polymorphicSelections[e]??0;return n>=0&&n=n||(this.polymorphicSelections={...this.polymorphicSelections,[t]:i})}getCompactNameWidth(){let e=parseFloat(this.style.getPropertyValue(`--compact-name-width`));return Number.isFinite(e)?e:$u}getCssLengthPx(e,t){let n=e.trim(),r=parseFloat(n);if(!Number.isFinite(r))return t;if(n.endsWith(`rem`)){let e=parseFloat(getComputedStyle(document.documentElement).fontSize);return r*(Number.isFinite(e)?e:ad)}if(n.endsWith(`em`)){let e=parseFloat(getComputedStyle(this).fontSize);return r*(Number.isFinite(e)?e:ad)}return r}getPolymorphicConstrainedLeftWidth(){return this.getCssLengthPx(getComputedStyle(this).getPropertyValue(`--polymorphic-constrained-left-width`),od)}getPolymorphicVerticalTabRailWidth(){let e=getComputedStyle(this);return this.compact?this.getCssLengthPx(e.getPropertyValue(`--polymorphic-compact-tab-rail-width`),vd):this.condensed?this.getCssLengthPx(e.getPropertyValue(`--polymorphic-condensed-tab-rail-width`),_d):this.getCssLengthPx(e.getPropertyValue(`--polymorphic-tab-rail-width`),gd)}getPolymorphicLeftWidth(e){if(!e)return 0;let t=td+e.length*id,n=Math.max(this.getCompactNameWidth(),t);return this.constrained?Math.min(n,this.getPolymorphicConstrainedLeftWidth()):n}shouldUsePolymorphicDropdown(e,t){if(this.popoverContext)return!0;let n=this.availableWidth||this.getBoundingClientRect().width||this.offsetWidth;if(!n)return!1;let r=e.reduce((e,t,n)=>Math.max(e,this.getPolymorphicOptionLabel(t,n).length),0),i=this.condensed?cd:ld,a=Math.max(sd,Math.min(i,ud+r*dd)),o=this.getPolymorphicVerticalTabRailWidth();if(a>o)return!0;let s=this.getPolymorphicLeftWidth(t),c=this.constrained?md:hd;return this.constrained?s+o+fd+c>n:s+a+pd+c>n}renderOneOfSingleValue(e){return C` ${this.renderType(e)} - ${Ou(e,{labelSuffix:`:`})} - `}renderOneOfSingleBody(e,t=`$.oneOf[0]`){if(e.$ref)return C;let n=new Set(e.required||[]);return!e.description&&!e.properties?C:S` + ${zu(e,{labelSuffix:`:`})} + `}renderOneOfSingleBody(e,t=`$.oneOf[0]`){if(e.$ref)return w;let n=new Set(e.required||[]);return!e.description&&!e.properties?w:C`
- ${e.description?Y(e.description,{className:`oneof-option-desc pp-markdown`}):C} - ${e.properties?this.renderPropertyTable(e.properties,n,`${t}.properties`):C} + ${e.description?X(e.description,{className:`oneof-option-desc pp-markdown`}):w} + ${e.properties?this.renderPropertyTable(e.properties,n,`${t}.properties`):w}
- `}renderOneOfOption(e,t=`$.oneOf[0]`){if(e.$ref){let t=ol(e.$ref);if(!t)return C;let n=v(e.$ref);return S` + `}renderOneOfOption(e,t=`$.oneOf[0]`){if(e.$ref){let t=_l(e.$ref);if(!t)return w;let n=y(e.$ref);return C`
${this.renderRefAnchor(e.$ref,t)} - ${n?.description?Y(n.description,{className:`oneof-option-desc pp-markdown`}):C} + ${n?.description?X(n.description,{className:`oneof-option-desc pp-markdown`}):w}
- `}let n=new Set(e.required||[]),r=cl(e);return S` - ${e.description?Y(e.description,{className:`oneof-option-desc pp-markdown`}):C} - ${e.properties?this.renderPropertyTable(e.properties,n,`${t}.properties`):r?S`
${r}${Ou(e,{labelSuffix:`:`})}
`:C} - `}render(){if(!this.schema)return C;let e=this.schema.type===`array`&&(this.schema.items?.properties||this.schema.items?.allOf||this.schema.items?.oneOf||this.schema.items?.anyOf)?this.schema.items:this.schema,t=this.resolveRenderableTarget(e);if(t.allOf&&Array.isArray(t.allOf))return this.renderComposition(t);if(t.oneOf&&Array.isArray(t.oneOf))return this.renderOneOf(t.oneOf,`ONE OF`,void 0,void 0,`polymorphic`,`$.oneOf`);if(t.anyOf&&Array.isArray(t.anyOf))return this.renderOneOf(t.anyOf,`ANY OF`,void 0,void 0,`polymorphic`,`$.anyOf`);let n=t.properties||{},r=new Set(t.required||[]);if(!Object.entries(n).length){let e=cl(t);return!e&&!t.description?C:S` + `}let n=new Set(e.required||[]),r=yl(e);return C` + ${e.description?X(e.description,{className:`oneof-option-desc pp-markdown`}):w} + ${e.properties?this.renderPropertyTable(e.properties,n,`${t}.properties`):r?C`
${r}${zu(e,{labelSuffix:`:`})}
`:w} + `}render(){if(!this.schema)return w;let e=this.schema.type===`array`&&(this.schema.items?.properties||this.schema.items?.allOf||this.schema.items?.oneOf||this.schema.items?.anyOf)?this.schema.items:this.schema,t=this.resolveRenderableTarget(e);if(t.allOf&&Array.isArray(t.allOf))return this.renderComposition(t);if(t.oneOf&&Array.isArray(t.oneOf))return this.renderOneOf(t.oneOf,`ONE OF`,void 0,void 0,`polymorphic`,`$.oneOf`);if(t.anyOf&&Array.isArray(t.anyOf))return this.renderOneOf(t.anyOf,`ANY OF`,void 0,void 0,`polymorphic`,`$.anyOf`);let n=t.properties||{},r=new Set(t.required||[]);if(!Object.entries(n).length){let e=yl(t);return!e&&!t.description?w:C`
- ${e?S`${e}`:C} - ${Ou(t,{labelSuffix:`:`})} + ${e?C`${e}`:w} + ${zu(t,{labelSuffix:`:`})}
- ${Y(t.description)} + ${X(t.description)}
- `}return this.renderPropertyTable(n,r)}};W([k({attribute:`schema-json`})],cd.prototype,`schemaJson`,void 0),W([k({type:Boolean,reflect:!0})],cd.prototype,`compact`,void 0),W([k({type:Boolean,reflect:!0})],cd.prototype,`condensed`,void 0),W([k({type:Boolean,reflect:!0})],cd.prototype,`constrained`,void 0),W([k({attribute:`popover-context`,type:Boolean,reflect:!0})],cd.prototype,`popoverContext`,void 0),W([A()],cd.prototype,`schema`,void 0),W([A()],cd.prototype,`availableWidth`,void 0),W([A()],cd.prototype,`polymorphicSelections`,void 0),cd=W([O(`pp-schema-properties`)],cd);var ld=l(s(((e,t)=>{var n=function(e){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,r={},i={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,`&`).replace(/`u`)return null;if(document.currentScript&&document.currentScript.tagName===`SCRIPT`)return document.currentScript;try{throw Error()}catch(r){var e=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(r.stack)||[])[1];if(e){var t=document.getElementsByTagName(`script`);for(var n in t)if(t[n].src==e)return t[n]}return null}},isActive:function(e,t,n){for(var r=`no-`+t;e;){var i=e.classList;if(i.contains(t))return!0;if(i.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:r,plaintext:r,text:r,txt:r,extend:function(e,t){var n=i.util.clone(i.languages[e]);for(var r in t)n[r]=t[r];return n},insertBefore:function(e,t,n,r){r||=i.languages;var a=r[e],o={};for(var s in a)if(a.hasOwnProperty(s)){if(s==t)for(var c in n)n.hasOwnProperty(c)&&(o[c]=n[c]);n.hasOwnProperty(s)||(o[s]=a[s])}var l=r[e];return r[e]=o,i.languages.DFS(i.languages,function(t,n){n===l&&t!=e&&(this[t]=o)}),o},DFS:function e(t,n,r,a){a||={};var o=i.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],r||s);var c=t[s],l=i.util.type(c);l===`Object`&&!a[o(c)]?(a[o(c)]=!0,e(c,n,null,a)):l===`Array`&&!a[o(c)]&&(a[o(c)]=!0,e(c,n,s,a))}}},plugins:{},highlightAll:function(e,t){i.highlightAllUnder(document,e,t)},highlightAllUnder:function(e,t,n){var r={callback:n,container:e,selector:`code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code`};i.hooks.run(`before-highlightall`,r),r.elements=Array.prototype.slice.apply(r.container.querySelectorAll(r.selector)),i.hooks.run(`before-all-elements-highlight`,r);for(var a=0,o;o=r.elements[a++];)i.highlightElement(o,t===!0,r.callback)},highlightElement:function(t,n,r){var a=i.util.getLanguage(t),o=i.languages[a];i.util.setLanguage(t,a);var s=t.parentElement;s&&s.nodeName.toLowerCase()===`pre`&&i.util.setLanguage(s,a);var c={element:t,language:a,grammar:o,code:t.textContent};function l(e){c.highlightedCode=e,i.hooks.run(`before-insert`,c),c.element.innerHTML=c.highlightedCode,i.hooks.run(`after-highlight`,c),i.hooks.run(`complete`,c),r&&r.call(c.element)}if(i.hooks.run(`before-sanity-check`,c),s=c.element.parentElement,s&&s.nodeName.toLowerCase()===`pre`&&!s.hasAttribute(`tabindex`)&&s.setAttribute(`tabindex`,`0`),!c.code){i.hooks.run(`complete`,c),r&&r.call(c.element);return}if(i.hooks.run(`before-highlight`,c),!c.grammar){l(i.util.encode(c.code));return}if(n&&e.Worker){var u=new Worker(i.filename);u.onmessage=function(e){l(e.data)},u.postMessage(JSON.stringify({language:c.language,code:c.code,immediateClose:!0}))}else l(i.highlight(c.code,c.grammar,c.language))},highlight:function(e,t,n){var r={code:e,grammar:t,language:n};if(i.hooks.run(`before-tokenize`,r),!r.grammar)throw Error(`The language "`+r.language+`" has no grammar.`);return r.tokens=i.tokenize(r.code,r.grammar),i.hooks.run(`after-tokenize`,r),a.stringify(i.util.encode(r.tokens),r.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var i=new c;return l(i,i.head,e),s(e,i,t,i.head,0),d(i)},hooks:{all:{},add:function(e,t){var n=i.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=i.hooks.all[e];if(!(!n||!n.length))for(var r=0,a;a=n[r++];)a(t)}},Token:a};e.Prism=i;function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=(r||``).length|0}a.stringify=function e(t,n){if(typeof t==`string`)return t;if(Array.isArray(t)){var r=``;return t.forEach(function(t){r+=e(t,n)}),r}var a={type:t.type,content:e(t.content,n),tag:`span`,classes:[`token`,t.type],attributes:{},language:n},o=t.alias;o&&(Array.isArray(o)?Array.prototype.push.apply(a.classes,o):a.classes.push(o)),i.hooks.run(`wrap`,a);var s=``;for(var c in a.attributes)s+=` `+c+`="`+(a.attributes[c]||``).replace(/"/g,`"`)+`"`;return`<`+a.tag+` class="`+a.classes.join(` `)+`"`+s+`>`+a.content+``};function o(e,t,n,r){e.lastIndex=t;var i=e.exec(n);if(i&&r&&i[1]){var a=i[1].length;i.index+=a,i[0]=i[0].slice(a)}return i}function s(e,t,n,r,c,d){for(var f in n)if(!(!n.hasOwnProperty(f)||!n[f])){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m=d.reach);y+=v.value.length,v=v.next){var ie=v.value;if(t.length>e.length)return;if(!(ie instanceof a)){var ae=1,oe;if(ee){if(oe=o(re,y,e,_),!oe||oe.index>=e.length)break;var se=oe.index,ce=oe.index+oe[0].length,le=y;for(le+=v.value.length;se>=le;)v=v.next,le+=v.value.length;if(le-=v.value.length,y=le,v.value instanceof a)continue;for(var ue=v;ue!==t.tail&&(led.reach&&(d.reach=me);var he=v.prev;fe&&(he=l(t,he,fe),y+=fe.length),u(t,he,ae);var ge=new a(f,g?i.tokenize(de,g):de,te,de);if(v=l(t,he,ge),pe&&l(t,v,pe),ae>1){var _e={cause:f+`,`+m,reach:me};s(e,t,n,v.prev,y,_e),d&&_e.reach>d.reach&&(d.reach=_e.reach)}}}}}}function c(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,i={value:n,prev:t,next:r};return t.next=i,r.prev=i,e.length++,i}function u(e,t,n){for(var r=t.next,i=0;i/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:`attr-equals`},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:`named-entity`},/&#x?[\da-f]{1,8};/i]},n.languages.markup.tag.inside[`attr-value`].inside.entity=n.languages.markup.entity,n.languages.markup.doctype.inside[`internal-subset`].inside=n.languages.markup,n.hooks.add(`wrap`,function(e){e.type===`entity`&&(e.attributes.title=e.content.replace(/&/,`&`))}),Object.defineProperty(n.languages.markup.tag,`addInlined`,{value:function(e,t){var r={};r[`language-`+t]={pattern:/(^$)/i,lookbehind:!0,inside:n.languages[t]},r.cdata=/^$/i;var i={"included-cdata":{pattern://i,inside:r}};i[`language-`+t]={pattern:/[\s\S]+/,inside:n.languages[t]};var a={};a[e]={pattern:RegExp(`(<__[^>]*>)(?:))*\\]\\]>|(?!)`.replace(/__/g,function(){return e}),`i`),lookbehind:!0,greedy:!0,inside:i},n.languages.insertBefore(`markup`,`cdata`,a)}}),Object.defineProperty(n.languages.markup.tag,`addAttribute`,{value:function(e,t){n.languages.markup.tag.inside[`special-attr`].push({pattern:RegExp(`(^|["'\\s])(?:`+e+`)\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s'">=]+(?=[\\s>]))`,`i`),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,`language-`+t],inside:n.languages[t]},punctuation:[{pattern:/^=/,alias:`attr-equals`},/"|'/]}}}})}}),n.languages.html=n.languages.markup,n.languages.mathml=n.languages.markup,n.languages.svg=n.languages.markup,n.languages.xml=n.languages.extend(`markup`,{}),n.languages.ssml=n.languages.xml,n.languages.atom=n.languages.xml,n.languages.rss=n.languages.xml,(function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp(`@[\\w-](?:[^;{\\s"']|\\s+(?!\\s)|`+t.source+`)*?(?:;|(?=\\s*\\{))`),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:`selector`},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp(`\\burl\\((?:`+t.source+`|(?:[^\\\\\\r\\n()"']|\\\\[\\s\\S])*)\\)`,`i`),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp(`^`+t.source+`$`),alias:`url`}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+t.source+`)*(?=\\s*\\{)`),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined(`style`,`css`),n.tag.addAttribute(`style`,`css`))})(n),n.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},n.languages.javascript=n.languages.extend(`clike`,{"class-name":[n.languages.clike[`class-name`],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(`(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])`),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),n.languages.javascript[`class-name`][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,n.languages.insertBefore(`javascript`,`keyword`,{regex:{pattern:RegExp(`((?:^|[^$\\w\\xA0-\\uFFFF."'\\])\\s]|\\b(?:return|yield))\\s*)\\/(?:(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))`),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:`language-regex`,inside:n.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:`function`},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:n.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:n.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:n.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:n.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),n.languages.insertBefore(`javascript`,`string`,{hashbang:{pattern:/^#!.*/,greedy:!0,alias:`comment`},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:`string`},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:`punctuation`},rest:n.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:`property`}}),n.languages.insertBefore(`javascript`,`operator`,{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:`property`}}),n.languages.markup&&(n.languages.markup.tag.addInlined(`script`,`javascript`),n.languages.markup.tag.addAttribute(`on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)`,`javascript`)),n.languages.js=n.languages.javascript,(function(){if(n===void 0||typeof document>`u`)return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var e=`Loading…`,t=function(e,t){return`✖ Error `+e+` while fetching file: `+t},r=`✖ Error: File does not exist or is empty`,i={js:`javascript`,py:`python`,rb:`ruby`,ps1:`powershell`,psm1:`powershell`,sh:`bash`,bat:`batch`,h:`c`,tex:`latex`},a=`data-src-status`,o=`loading`,s=`loaded`,c=`failed`,l=`pre[data-src]:not([`+a+`="`+s+`"]):not([`+a+`="`+o+`"])`;function u(e,n,i){var a=new XMLHttpRequest;a.open(`GET`,e,!0),a.onreadystatechange=function(){a.readyState==4&&(a.status<400&&a.responseText?n(a.responseText):a.status>=400?i(t(a.status,a.statusText)):i(r))},a.send(null)}function d(e){var t=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(e||``);if(t){var n=Number(t[1]),r=t[2],i=t[3];return r?i?[n,Number(i)]:[n,void 0]:[n,n]}}n.hooks.add(`before-highlightall`,function(e){e.selector+=`, `+l}),n.hooks.add(`before-sanity-check`,function(t){var r=t.element;if(r.matches(l)){t.code=``,r.setAttribute(a,o);var f=r.appendChild(document.createElement(`CODE`));f.textContent=e;var p=r.getAttribute(`data-src`),m=t.language;if(m===`none`){var h=(/\.(\w+)$/.exec(p)||[,`none`])[1];m=i[h]||h}n.util.setLanguage(f,m),n.util.setLanguage(r,m);var g=n.plugins.autoloader;g&&g.loadLanguages(m),u(p,function(e){r.setAttribute(a,s);var t=d(r.getAttribute(`data-range`));if(t){var i=e.split(/\r\n?|\n/g),o=t[0],c=t[1]==null?i.length:t[1];o<0&&(o+=i.length),o=Math.max(0,Math.min(o-1,i.length)),c<0&&(c+=i.length),c=Math.max(0,Math.min(c,i.length)),e=i.slice(o,c).join(` -`),r.hasAttribute(`data-start`)||r.setAttribute(`data-start`,String(o+1))}f.textContent=e,n.highlightElement(f)},function(e){r.setAttribute(a,c),f.textContent=e})}}),n.plugins.fileHighlight={highlight:function(e){for(var t=(e||document).querySelectorAll(l),r=0,i;i=t[r++];)n.highlightElement(i)}};var f=!1;n.fileHighlight=function(){f||=(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),!0),n.plugins.fileHighlight.highlight.apply(this,arguments)}})()}))(),1);Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:`keyword`}},Prism.languages.webmanifest=Prism.languages.json,(function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r=`(?:`+n.source+`(?:[ ]+`+t.source+`)?|`+t.source+`(?:[ ]+`+n.source+`)?)`,i=`(?:[^\\s\\x00-\\x08\\x0e-\\x1f!"#%&'*,\\-:>?@[\\]\`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \\t]*(?:(?![#:])|:))*`.replace(//g,function(){return`[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]`}),a=`"(?:[^"\\\\\\r\\n]|\\\\.)*"|'(?:[^'\\\\\\r\\n]|\\\\.)*'`;function o(e,t){t=(t||``).replace(/m/g,``)+`m`;var n=`([:\\-,[{]\\s*(?:\\s<>[ \\t]+)?)(?:<>)(?=[ \\t]*(?:$|,|\\]|\\}|(?:[\\r\\n]\\s*)?#))`.replace(/<>/g,function(){return r}).replace(/<>/g,function(){return e});return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(`([\\-:]\\s*(?:\\s<>[ \\t]+)?[|>])[ \\t]*(?:((?:\\r?\\n|\\r)[ \\t]+)\\S[^\\r\\n]*(?:\\2[^\\r\\n]+)*)`.replace(/<>/g,function(){return r})),lookbehind:!0,alias:`string`},comment:/#.*/,key:{pattern:RegExp(`((?:^|[:\\-,[{\\r\\n?])[ \\t]*(?:<>[ \\t]+)?)<>(?=\\s*:\\s)`.replace(/<>/g,function(){return r}).replace(/<>/g,function(){return`(?:`+i+`|`+a+`)`})),lookbehind:!0,greedy:!0,alias:`atrule`},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:`important`},datetime:{pattern:o(`\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \\t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \\t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?`),lookbehind:!0,alias:`number`},boolean:{pattern:o(`false|true`,`i`),lookbehind:!0,alias:`important`},null:{pattern:o(`null|~`,`i`),lookbehind:!0,alias:`important`},string:{pattern:o(a),lookbehind:!0,greedy:!0},number:{pattern:o(`[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)`,`i`),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml})(Prism),Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:`attr-equals`},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:`named-entity`},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside[`attr-value`].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside[`internal-subset`].inside=Prism.languages.markup,Prism.hooks.add(`wrap`,function(e){e.type===`entity`&&(e.attributes.title=e.content.replace(/&/,`&`))}),Object.defineProperty(Prism.languages.markup.tag,`addInlined`,{value:function(e,t){var n={};n[`language-`+t]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r[`language-`+t]={pattern:/[\s\S]+/,inside:Prism.languages[t]};var i={};i[e]={pattern:RegExp(`(<__[^>]*>)(?:))*\\]\\]>|(?!)`.replace(/__/g,function(){return e}),`i`),lookbehind:!0,greedy:!0,inside:r},Prism.languages.insertBefore(`markup`,`cdata`,i)}}),Object.defineProperty(Prism.languages.markup.tag,`addAttribute`,{value:function(e,t){Prism.languages.markup.tag.inside[`special-attr`].push({pattern:RegExp(`(^|["'\\s])(?:`+e+`)\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s'">=]+(?=[\\s>]))`,`i`),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,`language-`+t],inside:Prism.languages[t]},punctuation:[{pattern:/^=/,alias:`attr-equals`},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend(`markup`,{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml,Prism.languages.mermaid={comment:{pattern:/%%.*/,greedy:!0},style:{pattern:/^([ \t]*(?:classDef|linkStyle|style)[ \t]+[\w$-]+[ \t]+)\w.*[^\s;]/m,lookbehind:!0,inside:{property:/\b\w[\w-]*(?=[ \t]*:)/,operator:/:/,punctuation:/,/}},"inter-arrow-label":{pattern:/([^<>ox.=-])(?:-[-.]|==)(?![<>ox.=-])[ \t]*(?:"[^"\r\n]*"|[^\s".=-](?:[^\r\n.=-]*[^\s.=-])?)[ \t]*(?:\.+->?|--+[->]|==+[=>])(?![<>ox.=-])/,lookbehind:!0,greedy:!0,inside:{arrow:{pattern:/(?:\.+->?|--+[->]|==+[=>])$/,alias:`operator`},label:{pattern:/^([\s\S]{2}[ \t]*)\S(?:[\s\S]*\S)?/,lookbehind:!0,alias:`property`},"arrow-head":{pattern:/^\S+/,alias:[`arrow`,`operator`]}}},arrow:[{pattern:/(^|[^{}|o.-])[|}][|o](?:--|\.\.)[|o][|{](?![{}|o.-])/,lookbehind:!0,alias:`operator`},{pattern:/(^|[^<>ox.=-])(?:[ox]?|(?:==+|--+|-\.*-)[>ox]|===+|---+|-\.+-)(?![<>ox.=-])/,lookbehind:!0,alias:`operator`},{pattern:/(^|[^<>()x-])(?:--?(?:>>|[x>)])(?![<>()x])|(?:<<|[x<(])--?(?!-))/,lookbehind:!0,alias:`operator`},{pattern:/(^|[^<>|*o.-])(?:[*o]--|--[*o]|<\|?(?:--|\.\.)|(?:--|\.\.)\|?>|--|\.\.)(?![<>|*o.-])/,lookbehind:!0,alias:`operator`}],label:{pattern:/(^|[^|<])\|(?:[^\r\n"|]|"[^"\r\n]*")+\|/,lookbehind:!0,greedy:!0,alias:`property`},text:{pattern:/(?:[(\[{]+|\b>)(?:[^\r\n"()\[\]{}]|"[^"\r\n]*")+(?:[)\]}]+|>)/,alias:`string`},string:{pattern:/"[^"\r\n]*"/,greedy:!0},annotation:{pattern:/<<(?:abstract|choice|enumeration|fork|interface|join|service)>>|\[\[(?:choice|fork|join)\]\]/i,alias:`important`},keyword:[{pattern:/(^[ \t]*)(?:action|callback|class|classDef|classDiagram|click|direction|erDiagram|flowchart|gantt|gitGraph|graph|journey|link|linkStyle|pie|requirementDiagram|sequenceDiagram|stateDiagram|stateDiagram-v2|style|subgraph)(?![\w$-])/m,lookbehind:!0,greedy:!0},{pattern:/(^[ \t]*)(?:activate|alt|and|as|autonumber|deactivate|else|end(?:[ \t]+note)?|loop|opt|par|participant|rect|state|note[ \t]+(?:over|(?:left|right)[ \t]+of))(?![\w$-])/im,lookbehind:!0,greedy:!0}],entity:/#[a-z0-9]+;/,operator:{pattern:/(\w[ \t]*)&(?=[ \t]*\w)|:::|:/,lookbehind:!0},punctuation:/[(){};]/};var ud=x` + `}return this.renderPropertyTable(n,r)}};G([A({attribute:`schema-json`})],yd.prototype,`schemaJson`,void 0),G([A({type:Boolean,reflect:!0})],yd.prototype,`compact`,void 0),G([A({type:Boolean,reflect:!0})],yd.prototype,`condensed`,void 0),G([A({type:Boolean,reflect:!0})],yd.prototype,`constrained`,void 0),G([A({attribute:`popover-context`,type:Boolean,reflect:!0})],yd.prototype,`popoverContext`,void 0),G([j()],yd.prototype,`schema`,void 0),G([j()],yd.prototype,`availableWidth`,void 0),G([j()],yd.prototype,`polymorphicSelections`,void 0),yd=G([k(`pp-schema-properties`)],yd);var bd=l(s(((e,t)=>{var n=function(e){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,r={},i={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof a?new a(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,`&`).replace(/`u`)return null;if(document.currentScript&&document.currentScript.tagName===`SCRIPT`)return document.currentScript;try{throw Error()}catch(r){var e=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(r.stack)||[])[1];if(e){var t=document.getElementsByTagName(`script`);for(var n in t)if(t[n].src==e)return t[n]}return null}},isActive:function(e,t,n){for(var r=`no-`+t;e;){var i=e.classList;if(i.contains(t))return!0;if(i.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:r,plaintext:r,text:r,txt:r,extend:function(e,t){var n=i.util.clone(i.languages[e]);for(var r in t)n[r]=t[r];return n},insertBefore:function(e,t,n,r){r||=i.languages;var a=r[e],o={};for(var s in a)if(a.hasOwnProperty(s)){if(s==t)for(var c in n)n.hasOwnProperty(c)&&(o[c]=n[c]);n.hasOwnProperty(s)||(o[s]=a[s])}var l=r[e];return r[e]=o,i.languages.DFS(i.languages,function(t,n){n===l&&t!=e&&(this[t]=o)}),o},DFS:function e(t,n,r,a){a||={};var o=i.util.objId;for(var s in t)if(t.hasOwnProperty(s)){n.call(t,s,t[s],r||s);var c=t[s],l=i.util.type(c);l===`Object`&&!a[o(c)]?(a[o(c)]=!0,e(c,n,null,a)):l===`Array`&&!a[o(c)]&&(a[o(c)]=!0,e(c,n,s,a))}}},plugins:{},highlightAll:function(e,t){i.highlightAllUnder(document,e,t)},highlightAllUnder:function(e,t,n){var r={callback:n,container:e,selector:`code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code`};i.hooks.run(`before-highlightall`,r),r.elements=Array.prototype.slice.apply(r.container.querySelectorAll(r.selector)),i.hooks.run(`before-all-elements-highlight`,r);for(var a=0,o;o=r.elements[a++];)i.highlightElement(o,t===!0,r.callback)},highlightElement:function(t,n,r){var a=i.util.getLanguage(t),o=i.languages[a];i.util.setLanguage(t,a);var s=t.parentElement;s&&s.nodeName.toLowerCase()===`pre`&&i.util.setLanguage(s,a);var c={element:t,language:a,grammar:o,code:t.textContent};function l(e){c.highlightedCode=e,i.hooks.run(`before-insert`,c),c.element.innerHTML=c.highlightedCode,i.hooks.run(`after-highlight`,c),i.hooks.run(`complete`,c),r&&r.call(c.element)}if(i.hooks.run(`before-sanity-check`,c),s=c.element.parentElement,s&&s.nodeName.toLowerCase()===`pre`&&!s.hasAttribute(`tabindex`)&&s.setAttribute(`tabindex`,`0`),!c.code){i.hooks.run(`complete`,c),r&&r.call(c.element);return}if(i.hooks.run(`before-highlight`,c),!c.grammar){l(i.util.encode(c.code));return}if(n&&e.Worker){var u=new Worker(i.filename);u.onmessage=function(e){l(e.data)},u.postMessage(JSON.stringify({language:c.language,code:c.code,immediateClose:!0}))}else l(i.highlight(c.code,c.grammar,c.language))},highlight:function(e,t,n){var r={code:e,grammar:t,language:n};if(i.hooks.run(`before-tokenize`,r),!r.grammar)throw Error(`The language "`+r.language+`" has no grammar.`);return r.tokens=i.tokenize(r.code,r.grammar),i.hooks.run(`after-tokenize`,r),a.stringify(i.util.encode(r.tokens),r.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var i=new c;return l(i,i.head,e),s(e,i,t,i.head,0),d(i)},hooks:{all:{},add:function(e,t){var n=i.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=i.hooks.all[e];if(!(!n||!n.length))for(var r=0,a;a=n[r++];)a(t)}},Token:a};e.Prism=i;function a(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=(r||``).length|0}a.stringify=function e(t,n){if(typeof t==`string`)return t;if(Array.isArray(t)){var r=``;return t.forEach(function(t){r+=e(t,n)}),r}var a={type:t.type,content:e(t.content,n),tag:`span`,classes:[`token`,t.type],attributes:{},language:n},o=t.alias;o&&(Array.isArray(o)?Array.prototype.push.apply(a.classes,o):a.classes.push(o)),i.hooks.run(`wrap`,a);var s=``;for(var c in a.attributes)s+=` `+c+`="`+(a.attributes[c]||``).replace(/"/g,`"`)+`"`;return`<`+a.tag+` class="`+a.classes.join(` `)+`"`+s+`>`+a.content+``};function o(e,t,n,r){e.lastIndex=t;var i=e.exec(n);if(i&&r&&i[1]){var a=i[1].length;i.index+=a,i[0]=i[0].slice(a)}return i}function s(e,t,n,r,c,d){for(var f in n)if(!(!n.hasOwnProperty(f)||!n[f])){var p=n[f];p=Array.isArray(p)?p:[p];for(var m=0;m=d.reach);b+=y.value.length,y=y.next){var re=y.value;if(t.length>e.length)return;if(!(re instanceof a)){var ie=1,ae;if(v){if(ae=o(ne,b,e,_),!ae||ae.index>=e.length)break;var oe=ae.index,se=ae.index+ae[0].length,ce=b;for(ce+=y.value.length;oe>=ce;)y=y.next,ce+=y.value.length;if(ce-=y.value.length,b=ce,y.value instanceof a)continue;for(var le=y;le!==t.tail&&(ced.reach&&(d.reach=pe);var me=y.prev;de&&(me=l(t,me,de),b+=de.length),u(t,me,ie);var he=new a(f,g?i.tokenize(ue,g):ue,ee,ue);if(y=l(t,me,he),fe&&l(t,y,fe),ie>1){var ge={cause:f+`,`+m,reach:pe};s(e,t,n,y.prev,b,ge),d&&ge.reach>d.reach&&(d.reach=ge.reach)}}}}}}function c(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function l(e,t,n){var r=t.next,i={value:n,prev:t,next:r};return t.next=i,r.prev=i,e.length++,i}function u(e,t,n){for(var r=t.next,i=0;i/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:`attr-equals`},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:`named-entity`},/&#x?[\da-f]{1,8};/i]},n.languages.markup.tag.inside[`attr-value`].inside.entity=n.languages.markup.entity,n.languages.markup.doctype.inside[`internal-subset`].inside=n.languages.markup,n.hooks.add(`wrap`,function(e){e.type===`entity`&&(e.attributes.title=e.content.replace(/&/,`&`))}),Object.defineProperty(n.languages.markup.tag,`addInlined`,{value:function(e,t){var r={};r[`language-`+t]={pattern:/(^$)/i,lookbehind:!0,inside:n.languages[t]},r.cdata=/^$/i;var i={"included-cdata":{pattern://i,inside:r}};i[`language-`+t]={pattern:/[\s\S]+/,inside:n.languages[t]};var a={};a[e]={pattern:RegExp(`(<__[^>]*>)(?:))*\\]\\]>|(?!)`.replace(/__/g,function(){return e}),`i`),lookbehind:!0,greedy:!0,inside:i},n.languages.insertBefore(`markup`,`cdata`,a)}}),Object.defineProperty(n.languages.markup.tag,`addAttribute`,{value:function(e,t){n.languages.markup.tag.inside[`special-attr`].push({pattern:RegExp(`(^|["'\\s])(?:`+e+`)\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s'">=]+(?=[\\s>]))`,`i`),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,`language-`+t],inside:n.languages[t]},punctuation:[{pattern:/^=/,alias:`attr-equals`},/"|'/]}}}})}}),n.languages.html=n.languages.markup,n.languages.mathml=n.languages.markup,n.languages.svg=n.languages.markup,n.languages.xml=n.languages.extend(`markup`,{}),n.languages.ssml=n.languages.xml,n.languages.atom=n.languages.xml,n.languages.rss=n.languages.xml,(function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp(`@[\\w-](?:[^;{\\s"']|\\s+(?!\\s)|`+t.source+`)*?(?:;|(?=\\s*\\{))`),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:`selector`},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp(`\\burl\\((?:`+t.source+`|(?:[^\\\\\\r\\n()"']|\\\\[\\s\\S])*)\\)`,`i`),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp(`^`+t.source+`$`),alias:`url`}}},selector:{pattern:RegExp(`(^|[{}\\s])[^{}\\s](?:[^{};"'\\s]|\\s+(?![\\s{])|`+t.source+`)*(?=\\s*\\{)`),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined(`style`,`css`),n.tag.addAttribute(`style`,`css`))})(n),n.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},n.languages.javascript=n.languages.extend(`clike`,{"class-name":[n.languages.clike[`class-name`],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(`(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])`),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),n.languages.javascript[`class-name`][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,n.languages.insertBefore(`javascript`,`keyword`,{regex:{pattern:RegExp(`((?:^|[^$\\w\\xA0-\\uFFFF."'\\])\\s]|\\b(?:return|yield))\\s*)\\/(?:(?:\\[(?:[^\\]\\\\\\r\\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.|\\[(?:[^[\\]\\\\\\r\\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\\r\\n])+\\/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|\\/\\*(?:[^*]|\\*(?!\\/))*\\*\\/)*(?:$|[\\r\\n,.;:})\\]]|\\/\\/))`),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:`language-regex`,inside:n.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:`function`},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:n.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:n.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:n.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:n.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),n.languages.insertBefore(`javascript`,`string`,{hashbang:{pattern:/^#!.*/,greedy:!0,alias:`comment`},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:`string`},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:`punctuation`},rest:n.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:`property`}}),n.languages.insertBefore(`javascript`,`operator`,{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:`property`}}),n.languages.markup&&(n.languages.markup.tag.addInlined(`script`,`javascript`),n.languages.markup.tag.addAttribute(`on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)`,`javascript`)),n.languages.js=n.languages.javascript,(function(){if(n===void 0||typeof document>`u`)return;Element.prototype.matches||(Element.prototype.matches=Element.prototype.msMatchesSelector||Element.prototype.webkitMatchesSelector);var e=`Loading…`,t=function(e,t){return`✖ Error `+e+` while fetching file: `+t},r=`✖ Error: File does not exist or is empty`,i={js:`javascript`,py:`python`,rb:`ruby`,ps1:`powershell`,psm1:`powershell`,sh:`bash`,bat:`batch`,h:`c`,tex:`latex`},a=`data-src-status`,o=`loading`,s=`loaded`,c=`failed`,l=`pre[data-src]:not([`+a+`="`+s+`"]):not([`+a+`="`+o+`"])`;function u(e,n,i){var a=new XMLHttpRequest;a.open(`GET`,e,!0),a.onreadystatechange=function(){a.readyState==4&&(a.status<400&&a.responseText?n(a.responseText):a.status>=400?i(t(a.status,a.statusText)):i(r))},a.send(null)}function d(e){var t=/^\s*(\d+)\s*(?:(,)\s*(?:(\d+)\s*)?)?$/.exec(e||``);if(t){var n=Number(t[1]),r=t[2],i=t[3];return r?i?[n,Number(i)]:[n,void 0]:[n,n]}}n.hooks.add(`before-highlightall`,function(e){e.selector+=`, `+l}),n.hooks.add(`before-sanity-check`,function(t){var r=t.element;if(r.matches(l)){t.code=``,r.setAttribute(a,o);var f=r.appendChild(document.createElement(`CODE`));f.textContent=e;var p=r.getAttribute(`data-src`),m=t.language;if(m===`none`){var h=(/\.(\w+)$/.exec(p)||[,`none`])[1];m=i[h]||h}n.util.setLanguage(f,m),n.util.setLanguage(r,m);var g=n.plugins.autoloader;g&&g.loadLanguages(m),u(p,function(e){r.setAttribute(a,s);var t=d(r.getAttribute(`data-range`));if(t){var i=e.split(/\r\n?|\n/g),o=t[0],c=t[1]==null?i.length:t[1];o<0&&(o+=i.length),o=Math.max(0,Math.min(o-1,i.length)),c<0&&(c+=i.length),c=Math.max(0,Math.min(c,i.length)),e=i.slice(o,c).join(` +`),r.hasAttribute(`data-start`)||r.setAttribute(`data-start`,String(o+1))}f.textContent=e,n.highlightElement(f)},function(e){r.setAttribute(a,c),f.textContent=e})}}),n.plugins.fileHighlight={highlight:function(e){for(var t=(e||document).querySelectorAll(l),r=0,i;i=t[r++];)n.highlightElement(i)}};var f=!1;n.fileHighlight=function(){f||=(console.warn("Prism.fileHighlight is deprecated. Use `Prism.plugins.fileHighlight.highlight` instead."),!0),n.plugins.fileHighlight.highlight.apply(this,arguments)}})()}))(),1);Prism.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:`keyword`}},Prism.languages.webmanifest=Prism.languages.json,(function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r=`(?:`+n.source+`(?:[ ]+`+t.source+`)?|`+t.source+`(?:[ ]+`+n.source+`)?)`,i=`(?:[^\\s\\x00-\\x08\\x0e-\\x1f!"#%&'*,\\-:>?@[\\]\`{|}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]|[?:-])(?:[ \\t]*(?:(?![#:])|:))*`.replace(//g,function(){return`[^\\s\\x00-\\x08\\x0e-\\x1f,[\\]{}\\x7f-\\x84\\x86-\\x9f\\ud800-\\udfff\\ufffe\\uffff]`}),a=`"(?:[^"\\\\\\r\\n]|\\\\.)*"|'(?:[^'\\\\\\r\\n]|\\\\.)*'`;function o(e,t){t=(t||``).replace(/m/g,``)+`m`;var n=`([:\\-,[{]\\s*(?:\\s<>[ \\t]+)?)(?:<>)(?=[ \\t]*(?:$|,|\\]|\\}|(?:[\\r\\n]\\s*)?#))`.replace(/<>/g,function(){return r}).replace(/<>/g,function(){return e});return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(`([\\-:]\\s*(?:\\s<>[ \\t]+)?[|>])[ \\t]*(?:((?:\\r?\\n|\\r)[ \\t]+)\\S[^\\r\\n]*(?:\\2[^\\r\\n]+)*)`.replace(/<>/g,function(){return r})),lookbehind:!0,alias:`string`},comment:/#.*/,key:{pattern:RegExp(`((?:^|[:\\-,[{\\r\\n?])[ \\t]*(?:<>[ \\t]+)?)<>(?=\\s*:\\s)`.replace(/<>/g,function(){return r}).replace(/<>/g,function(){return`(?:`+i+`|`+a+`)`})),lookbehind:!0,greedy:!0,alias:`atrule`},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:`important`},datetime:{pattern:o(`\\d{4}-\\d\\d?-\\d\\d?(?:[tT]|[ \\t]+)\\d\\d?:\\d{2}:\\d{2}(?:\\.\\d*)?(?:[ \\t]*(?:Z|[-+]\\d\\d?(?::\\d{2})?))?|\\d{4}-\\d{2}-\\d{2}|\\d\\d?:\\d{2}(?::\\d{2}(?:\\.\\d*)?)?`),lookbehind:!0,alias:`number`},boolean:{pattern:o(`false|true`,`i`),lookbehind:!0,alias:`important`},null:{pattern:o(`null|~`,`i`),lookbehind:!0,alias:`important`},string:{pattern:o(a),lookbehind:!0,greedy:!0},number:{pattern:o(`[+-]?(?:0x[\\da-f]+|0o[0-7]+|(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:e[+-]?\\d+)?|\\.inf|\\.nan)`,`i`),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml})(Prism),Prism.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:`attr-equals`},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:`named-entity`},/&#x?[\da-f]{1,8};/i]},Prism.languages.markup.tag.inside[`attr-value`].inside.entity=Prism.languages.markup.entity,Prism.languages.markup.doctype.inside[`internal-subset`].inside=Prism.languages.markup,Prism.hooks.add(`wrap`,function(e){e.type===`entity`&&(e.attributes.title=e.content.replace(/&/,`&`))}),Object.defineProperty(Prism.languages.markup.tag,`addInlined`,{value:function(e,t){var n={};n[`language-`+t]={pattern:/(^$)/i,lookbehind:!0,inside:Prism.languages[t]},n.cdata=/^$/i;var r={"included-cdata":{pattern://i,inside:n}};r[`language-`+t]={pattern:/[\s\S]+/,inside:Prism.languages[t]};var i={};i[e]={pattern:RegExp(`(<__[^>]*>)(?:))*\\]\\]>|(?!)`.replace(/__/g,function(){return e}),`i`),lookbehind:!0,greedy:!0,inside:r},Prism.languages.insertBefore(`markup`,`cdata`,i)}}),Object.defineProperty(Prism.languages.markup.tag,`addAttribute`,{value:function(e,t){Prism.languages.markup.tag.inside[`special-attr`].push({pattern:RegExp(`(^|["'\\s])(?:`+e+`)\\s*=\\s*(?:"[^"]*"|'[^']*'|[^\\s'">=]+(?=[\\s>]))`,`i`),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,`language-`+t],inside:Prism.languages[t]},punctuation:[{pattern:/^=/,alias:`attr-equals`},/"|'/]}}}})}}),Prism.languages.html=Prism.languages.markup,Prism.languages.mathml=Prism.languages.markup,Prism.languages.svg=Prism.languages.markup,Prism.languages.xml=Prism.languages.extend(`markup`,{}),Prism.languages.ssml=Prism.languages.xml,Prism.languages.atom=Prism.languages.xml,Prism.languages.rss=Prism.languages.xml,Prism.languages.mermaid={comment:{pattern:/%%.*/,greedy:!0},style:{pattern:/^([ \t]*(?:classDef|linkStyle|style)[ \t]+[\w$-]+[ \t]+)\w.*[^\s;]/m,lookbehind:!0,inside:{property:/\b\w[\w-]*(?=[ \t]*:)/,operator:/:/,punctuation:/,/}},"inter-arrow-label":{pattern:/([^<>ox.=-])(?:-[-.]|==)(?![<>ox.=-])[ \t]*(?:"[^"\r\n]*"|[^\s".=-](?:[^\r\n.=-]*[^\s.=-])?)[ \t]*(?:\.+->?|--+[->]|==+[=>])(?![<>ox.=-])/,lookbehind:!0,greedy:!0,inside:{arrow:{pattern:/(?:\.+->?|--+[->]|==+[=>])$/,alias:`operator`},label:{pattern:/^([\s\S]{2}[ \t]*)\S(?:[\s\S]*\S)?/,lookbehind:!0,alias:`property`},"arrow-head":{pattern:/^\S+/,alias:[`arrow`,`operator`]}}},arrow:[{pattern:/(^|[^{}|o.-])[|}][|o](?:--|\.\.)[|o][|{](?![{}|o.-])/,lookbehind:!0,alias:`operator`},{pattern:/(^|[^<>ox.=-])(?:[ox]?|(?:==+|--+|-\.*-)[>ox]|===+|---+|-\.+-)(?![<>ox.=-])/,lookbehind:!0,alias:`operator`},{pattern:/(^|[^<>()x-])(?:--?(?:>>|[x>)])(?![<>()x])|(?:<<|[x<(])--?(?!-))/,lookbehind:!0,alias:`operator`},{pattern:/(^|[^<>|*o.-])(?:[*o]--|--[*o]|<\|?(?:--|\.\.)|(?:--|\.\.)\|?>|--|\.\.)(?![<>|*o.-])/,lookbehind:!0,alias:`operator`}],label:{pattern:/(^|[^|<])\|(?:[^\r\n"|]|"[^"\r\n]*")+\|/,lookbehind:!0,greedy:!0,alias:`property`},text:{pattern:/(?:[(\[{]+|\b>)(?:[^\r\n"()\[\]{}]|"[^"\r\n]*")+(?:[)\]}]+|>)/,alias:`string`},string:{pattern:/"[^"\r\n]*"/,greedy:!0},annotation:{pattern:/<<(?:abstract|choice|enumeration|fork|interface|join|service)>>|\[\[(?:choice|fork|join)\]\]/i,alias:`important`},keyword:[{pattern:/(^[ \t]*)(?:action|callback|class|classDef|classDiagram|click|direction|erDiagram|flowchart|gantt|gitGraph|graph|journey|link|linkStyle|pie|requirementDiagram|sequenceDiagram|stateDiagram|stateDiagram-v2|style|subgraph)(?![\w$-])/m,lookbehind:!0,greedy:!0},{pattern:/(^[ \t]*)(?:activate|alt|and|as|autonumber|deactivate|else|end(?:[ \t]+note)?|loop|opt|par|participant|rect|state|note[ \t]+(?:over|(?:left|right)[ \t]+of))(?![\w$-])/im,lookbehind:!0,greedy:!0}],entity:/#[a-z0-9]+;/,operator:{pattern:/(\w[ \t]*)&(?=[ \t]*\w)|:::|:/,lookbehind:!0},punctuation:/[(){};]/};var xd=S` :host { display: block; } @@ -7093,20 +7381,20 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error color: transparent; user-select: none; } -`;ld.default.manual=!0,ld.default.languages.mermaid&&!ld.default.languages.mermaid[`class-declaration`]&&(ld.default.languages.insertBefore(`mermaid`,`keyword`,{"class-declaration":{pattern:/(^[ \t]*)class[ \t]+[\w$-]+/m,lookbehind:!0,inside:{keyword:/^class/,"class-name":/[\w$-]+$/}}}),ld.default.languages.insertBefore(`mermaid`,`punctuation`,{"class-member":{pattern:/^[ \t]*[+\-#~][\w$-]+\??(?:[ \t]+[\w$-]+)?/m,inside:{builtin:{pattern:/(^[ \t]*[+\-#~])[\w$-]+\??/,lookbehind:!0},property:{pattern:/(\s)[\w$-]+$/,lookbehind:!0},operator:/^[ \t]*[+\-#~]/}},annotation:{pattern:/<<[^>\r\n]+>>/,alias:`comment`}}));var dd=class extends w{constructor(...e){super(...e),this.code=``,this.language=`json`,this.pretty=!1,this.lineNumbers=!1,this.highlightLines=``,this.startLine=1,this.location=``,this.embedded=!1,this.reserveLocation=!1,this.selectedLines=new Set,this.lastClickedLine=null,this._segmentCache={code:``,language:``,segments:[]},this._highlightCache={spec:``,parsed:new Set}}static{this.styles=[ud]}get displayCode(){if(!this.code)return``;if(this.pretty&&this.language===`json`)try{return JSON.stringify(JSON.parse(this.code),null,2)}catch{return this.code}return this.code}parseHighlightSpec(e){let t=new Set;if(!e)return t;for(let n of e.split(`,`)){let e=n.trim().match(/^(\d+)(?:-(\d+))?$/);if(!e)continue;let r=parseInt(e[1],10),i=e[2]?parseInt(e[2],10):r;for(let e=Math.min(r,i);e<=Math.max(r,i);e++)t.add(e)}return t}highlightCode(){let e=this.displayCode;if(!e)return``;try{let t=this.language===`xml`?`markup`:this.language;return ld.default.highlight(e,ld.default.languages[t],t)}catch{return e}}splitHighlightedLines(e){let t=[],n=``,r=[],i=0;for(;i=0;e--)n+=``;t.push(n),n=r.join(``),i++}else if(e[i]===`<`)if(e.startsWith(``,i))n+=``,r.pop(),i+=7;else{let t=e.indexOf(`>`,i);if(t===-1){n+=e[i],i++;continue}let a=e.slice(i,t+1);n+=a,a.startsWith(`=0;e--)n+=``;return n&&t.push(n),t}getLineSegments(){let e=this.displayCode;if(e===this._segmentCache.code&&this.language===this._segmentCache.language)return this._segmentCache.segments;let t=this.highlightCode(),n=t?this.splitHighlightedLines(t):[];return this._segmentCache={code:e,language:this.language,segments:n},n}get parsedHighlights(){return this._highlightCache.spec!==this.highlightLines&&(this._highlightCache={spec:this.highlightLines,parsed:this.parseHighlightSpec(this.highlightLines)}),this._highlightCache.parsed}get effectiveHighlights(){let e=this.parsedHighlights;return e.size>0?e:this.selectedLines}get isLocked(){return this.parsedHighlights.size>0}scrollToLine(e){this.renderRoot.querySelector(`[data-line="${e}"]`)?.scrollIntoView({block:`center`,behavior:`auto`})}handleLineClick(e,t){if(this.isLocked)return;let n=new Set;if(t.shiftKey&&this.lastClickedLine!==null){let t=Math.min(this.lastClickedLine,e),r=Math.max(this.lastClickedLine,e);for(let e=t;e<=r;e++)n.add(e)}else this.selectedLines.size===1&&this.selectedLines.has(e)||n.add(e);this.selectedLines=n,this.lastClickedLine=e}willUpdate(e){(e.has(`code`)||e.has(`language`))&&(this.selectedLines=new Set,this.lastClickedLine=null)}renderLocation(){return!this.location&&!this.reserveLocation?C:S`

${this.location||`\xA0`}
`}render(){if(!this.lineNumbers)return S` +`;bd.default.manual=!0,bd.default.languages.mermaid&&!bd.default.languages.mermaid[`class-declaration`]&&(bd.default.languages.insertBefore(`mermaid`,`keyword`,{"class-declaration":{pattern:/(^[ \t]*)class[ \t]+[\w$-]+/m,lookbehind:!0,inside:{keyword:/^class/,"class-name":/[\w$-]+$/}}}),bd.default.languages.insertBefore(`mermaid`,`punctuation`,{"class-member":{pattern:/^[ \t]*[+\-#~][\w$-]+\??(?:[ \t]+[\w$-]+)?/m,inside:{builtin:{pattern:/(^[ \t]*[+\-#~])[\w$-]+\??/,lookbehind:!0},property:{pattern:/(\s)[\w$-]+$/,lookbehind:!0},operator:/^[ \t]*[+\-#~]/}},annotation:{pattern:/<<[^>\r\n]+>>/,alias:`comment`}}));var Sd=class extends T{constructor(...e){super(...e),this.code=``,this.language=`json`,this.pretty=!1,this.lineNumbers=!1,this.highlightLines=``,this.startLine=1,this.location=``,this.embedded=!1,this.reserveLocation=!1,this.selectedLines=new Set,this.lastClickedLine=null,this._segmentCache={code:``,language:``,segments:[]},this._highlightCache={spec:``,parsed:new Set}}static{this.styles=[xd]}get displayCode(){if(!this.code)return``;if(this.pretty&&this.language===`json`)try{return JSON.stringify(JSON.parse(this.code),null,2)}catch{return this.code}return this.code}parseHighlightSpec(e){let t=new Set;if(!e)return t;for(let n of e.split(`,`)){let e=n.trim().match(/^(\d+)(?:-(\d+))?$/);if(!e)continue;let r=parseInt(e[1],10),i=e[2]?parseInt(e[2],10):r;for(let e=Math.min(r,i);e<=Math.max(r,i);e++)t.add(e)}return t}highlightCode(){let e=this.displayCode;if(!e)return``;try{let t=this.language===`xml`?`markup`:this.language;return bd.default.highlight(e,bd.default.languages[t],t)}catch{return e}}splitHighlightedLines(e){let t=[],n=``,r=[],i=0;for(;i=0;e--)n+=``;t.push(n),n=r.join(``),i++}else if(e[i]===`<`)if(e.startsWith(``,i))n+=``,r.pop(),i+=7;else{let t=e.indexOf(`>`,i);if(t===-1){n+=e[i],i++;continue}let a=e.slice(i,t+1);n+=a,a.startsWith(`=0;e--)n+=``;return n&&t.push(n),t}getLineSegments(){let e=this.displayCode;if(e===this._segmentCache.code&&this.language===this._segmentCache.language)return this._segmentCache.segments;let t=this.highlightCode(),n=t?this.splitHighlightedLines(t):[];return this._segmentCache={code:e,language:this.language,segments:n},n}get parsedHighlights(){return this._highlightCache.spec!==this.highlightLines&&(this._highlightCache={spec:this.highlightLines,parsed:this.parseHighlightSpec(this.highlightLines)}),this._highlightCache.parsed}get effectiveHighlights(){let e=this.parsedHighlights;return e.size>0?e:this.selectedLines}get isLocked(){return this.parsedHighlights.size>0}scrollToLine(e){this.renderRoot.querySelector(`[data-line="${e}"]`)?.scrollIntoView({block:`center`,behavior:`auto`})}handleLineClick(e,t){if(this.isLocked)return;let n=new Set;if(t.shiftKey&&this.lastClickedLine!==null){let t=Math.min(this.lastClickedLine,e),r=Math.max(this.lastClickedLine,e);for(let e=t;e<=r;e++)n.add(e)}else this.selectedLines.size===1&&this.selectedLines.has(e)||n.add(e);this.selectedLines=n,this.lastClickedLine=e}willUpdate(e){(e.has(`code`)||e.has(`language`))&&(this.selectedLines=new Set,this.lastClickedLine=null)}renderLocation(){return!this.location&&!this.reserveLocation?w:C`
${this.location||`\xA0`}
`}render(){if(!this.lineNumbers)return C` ${this.renderLocation()} -
${Bo(this.highlightCode())}
- `;let e=this.getLineSegments(),t=Math.max(this.startLine,1),n=t+e.length-1,r=n>0?Math.floor(Math.log10(n))+1:1,i=this.effectiveHighlights,a=this.isLocked;return S` +
${zo(this.highlightCode())}
+ `;let e=this.getLineSegments(),t=Math.max(this.startLine,1),n=t+e.length-1,r=n>0?Math.floor(Math.log10(n))+1:1,i=this.effectiveHighlights,a=this.isLocked;return C` ${this.renderLocation()}
-
${e.map((e,n)=>{let r=t+n;return S`${e.map((e,n)=>{let r=t+n;return C`this.handleLineClick(r,e)}
-                >${r}${Bo(e||` `)}
+                >${r}${zo(e||` `)}
 `})}
- `}};W([k()],dd.prototype,`code`,void 0),W([k()],dd.prototype,`language`,void 0),W([k({type:Boolean})],dd.prototype,`pretty`,void 0),W([k({attribute:`line-numbers`,type:Boolean})],dd.prototype,`lineNumbers`,void 0),W([k({attribute:`highlight-lines`})],dd.prototype,`highlightLines`,void 0),W([k({attribute:`start-line`,type:Number})],dd.prototype,`startLine`,void 0),W([k()],dd.prototype,`location`,void 0),W([k({type:Boolean,reflect:!0})],dd.prototype,`embedded`,void 0),W([k({attribute:`reserve-location`,type:Boolean})],dd.prototype,`reserveLocation`,void 0),W([A()],dd.prototype,`selectedLines`,void 0),W([A()],dd.prototype,`lastClickedLine`,void 0),dd=W([O(`pp-code-viewer`)],dd);var fd=x` + `}};G([A()],Sd.prototype,`code`,void 0),G([A()],Sd.prototype,`language`,void 0),G([A({type:Boolean})],Sd.prototype,`pretty`,void 0),G([A({attribute:`line-numbers`,type:Boolean})],Sd.prototype,`lineNumbers`,void 0),G([A({attribute:`highlight-lines`})],Sd.prototype,`highlightLines`,void 0),G([A({attribute:`start-line`,type:Number})],Sd.prototype,`startLine`,void 0),G([A()],Sd.prototype,`location`,void 0),G([A({type:Boolean,reflect:!0})],Sd.prototype,`embedded`,void 0),G([A({attribute:`reserve-location`,type:Boolean})],Sd.prototype,`reserveLocation`,void 0),G([j()],Sd.prototype,`selectedLines`,void 0),G([j()],Sd.prototype,`lastClickedLine`,void 0),Sd=G([k(`pp-code-viewer`)],Sd);var Cd=S` :host { display: flex; align-items: flex-start; @@ -7126,14 +7414,14 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error overflow-wrap: anywhere; min-width: 0; } -`,pd=class extends w{constructor(...e){super(...e),this.icon=``,this.heading=``,this.level=1,this.size=`huge`}static{this.styles=[fd]}render(){if(!this.heading)return C;let e=dr(`h${Math.min(Math.max(this.level,1),6)}`);return mr` +`,wd=class extends T{constructor(...e){super(...e),this.icon=``,this.heading=``,this.level=1,this.size=`huge`}static{this.styles=[Cd]}render(){if(!this.heading)return w;let e=ur(`h${Math.min(Math.max(this.level,1),6)}`);return pr` <${e}>${this.heading} - `}};W([k()],pd.prototype,`icon`,void 0),W([k()],pd.prototype,`heading`,void 0),W([k({type:Number})],pd.prototype,`level`,void 0),W([k()],pd.prototype,`size`,void 0),pd=W([O(`pp-icon-title`)],pd);var md,hd=class extends w{static{md=this}constructor(...e){super(...e),this.registryKey=``,this.schemaRef=``,this.active=!1,this.entry=null,this.model=null,this.parsedData=null,this.popoverWidth=0,this.showRequestId=0,this.popoverMeasureAttempts=0,this.triggerTargets=new Set,this.pointerWithinTrigger=!1,this.pointerWithinPopup=!1,this.focusWithinPopup=!1,this.onTriggerEnter=()=>{this.pointerWithinTrigger=!0,this.show()},this.onTriggerLeave=e=>{this.pointerWithinTrigger=!1;let t=e.relatedTarget;this.containsInteractiveNode(t)||this.scheduleHide()},this.onSlotChange=()=>{this.syncTriggerTargets()},this.onPopupEnter=()=>{this.pointerWithinPopup=!0,this.cancelHide()},this.onPopupLeave=e=>{this.pointerWithinPopup=!1;let t=e.relatedTarget;this.containsInteractiveNode(t)||this.scheduleHide()},this.onPopupFocusIn=()=>{this.focusWithinPopup=!0,this.cancelHide()},this.onPopupFocusOut=e=>{let t=e.relatedTarget;this.containsInteractiveNode(t)||(this.focusWithinPopup=!1,this.scheduleHide())},this.onPopupInteraction=()=>{this.pointerWithinPopup=!0,this.cancelHide()}}static{this.styles=ku}static{this.showDelayMs=300}static{this.hideDelayMs=400}static{this.popoverWidthTolerancePx=2}static{this.maxPopoverMeasureAttempts=6}firstUpdated(){this.syncTriggerTargets(),this.triggerSlot?.addEventListener(`slotchange`,this.onSlotChange)}disconnectedCallback(){super.disconnectedCallback(),clearTimeout(this.showTimeout),clearTimeout(this.hideTimeout),this.showRequestId++,this.measureFrame&&cancelAnimationFrame(this.measureFrame),this.triggerSlot?.removeEventListener(`slotchange`,this.onSlotChange),this.clearTriggerTargets(),this.pointerWithinTrigger=!1,this.pointerWithinPopup=!1,this.focusWithinPopup=!1,this.active=!1,this.popoverWidth=0}updated(e){if(e.has(`active`)||e.has(`model`)||e.has(`parsedData`)){this.schedulePopoverMeasure(!0);return}e.has(`popoverWidth`)&&this.schedulePopoverMeasure()}containsInteractiveNode(e){return e?this.contains(e)||this.renderRoot.contains(e):!1}isInteractivelyActive(){return this.pointerWithinTrigger||this.pointerWithinPopup||this.focusWithinPopup}clearTriggerTargets(){for(let e of this.triggerTargets)e.removeEventListener(`mouseenter`,this.onTriggerEnter),e.removeEventListener(`mouseleave`,this.onTriggerLeave),e.removeEventListener(`focusin`,this.onTriggerEnter),e.removeEventListener(`focusout`,this.onTriggerLeave);this.triggerTargets.clear()}syncTriggerTargets(){this.clearTriggerTargets();let e=new Set;this.trigger&&e.add(this.trigger);for(let t of this.triggerSlot?.assignedElements({flatten:!0})??[])t instanceof HTMLElement&&e.add(t);for(let t of e)t.addEventListener(`mouseenter`,this.onTriggerEnter),t.addEventListener(`mouseleave`,this.onTriggerLeave),t.addEventListener(`focusin`,this.onTriggerEnter),t.addEventListener(`focusout`,this.onTriggerLeave),this.triggerTargets.add(t)}show(){clearTimeout(this.hideTimeout);let e=++this.showRequestId;this.showTimeout=window.setTimeout(async()=>{if(this.entry=(this.registryKey?re(this.registryKey):v(this.schemaRef))??null,!(!this.entry||e!==this.showRequestId||!this.isInteractivelyActive())&&(this.model=(this.registryKey?await ae(this.registryKey):await oe(this.schemaRef))??null,!(!this.model||e!==this.showRequestId||!this.isInteractivelyActive()))){try{this.parsedData=JSON.parse(this.model.schemaJson)}catch{this.parsedData=null}this.popoverWidth=0,this.popoverMeasureAttempts=0,this.active=!0}},md.showDelayMs)}scheduleHide(){clearTimeout(this.showTimeout),this.hideTimeout=window.setTimeout(()=>{this.isInteractivelyActive()||(this.active=!1,this.popoverWidth=0,this.popoverMeasureAttempts=0)},md.hideDelayMs)}cancelHide(){clearTimeout(this.hideTimeout)}resolveExample(){if(this.model?.mockJson)return this.model.mockJson;let e=this.parsedData;return e?e.schema?.example===void 0?e.example===void 0?Array.isArray(e.examples)&&e.examples.length>0?JSON.stringify(e.examples[0]):null:JSON.stringify(e.example):JSON.stringify(e.schema.example):null}getSchemaJson(){if(!this.model)return``;let e=this.parsedData;return e&&e.schema?JSON.stringify(e.schema):this.model.schemaJson}formatJson(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}schedulePopoverMeasure(e=!1){if(this.active){if(e)this.popoverMeasureAttempts=0;else if(this.popoverMeasureAttempts>=md.maxPopoverMeasureAttempts)return;this.measureFrame&&cancelAnimationFrame(this.measureFrame),this.measureFrame=requestAnimationFrame(()=>{this.measureFrame=requestAnimationFrame(()=>{this.measureFrame=void 0,this.measurePopoverWidth()})})}}getCssLengthPx(e,t=0){let n=e.trim(),r=parseFloat(n);if(!Number.isFinite(r))return t;if(n.endsWith(`rem`)){let e=parseFloat(getComputedStyle(document.documentElement).fontSize);return r*(Number.isFinite(e)?e:16)}if(n.endsWith(`em`)){let e=parseFloat(getComputedStyle(this).fontSize);return r*(Number.isFinite(e)?e:16)}return r}getPopoverViewportWidth(){let e=getComputedStyle(this),t=this.getCssLengthPx(e.getPropertyValue(`--global-padding-double`));return Math.max(0,window.innerWidth-t)}collectRenderedWidth(e,t){let n=e.getBoundingClientRect().left-t+e.scrollWidth,r=e=>{for(let i of Array.from(e.children)){if(!(i instanceof HTMLElement))continue;let e=i.getBoundingClientRect();n=Math.max(n,e.left-t+i.scrollWidth),i.shadowRoot&&r(i.shadowRoot),r(i)}};return e.shadowRoot&&r(e.shadowRoot),r(e),Math.ceil(n)}measurePopoverWidth(){let e=this.popoverContent;if(!e)return;this.popoverMeasureAttempts++;let t=e.getBoundingClientRect(),n=Math.min(this.collectRenderedWidth(e,t.left),this.getPopoverViewportWidth());!Number.isFinite(n)||n<=0||Math.abs(n-t.width)<=md.popoverWidthTolerancePx||(this.popoverWidth=n)}render(){let e=this.resolveExample(),t=this.getSchemaJson(),n=this.popoverWidth>0?`--ref-popover-width: ${this.popoverWidth}px`:``;return S` + `}};G([A()],wd.prototype,`icon`,void 0),G([A()],wd.prototype,`heading`,void 0),G([A({type:Number})],wd.prototype,`level`,void 0),G([A()],wd.prototype,`size`,void 0),wd=G([k(`pp-icon-title`)],wd);var Td,Ed=class extends T{static{Td=this}constructor(...e){super(...e),this.registryKey=``,this.schemaRef=``,this.active=!1,this.entry=null,this.model=null,this.parsedData=null,this.popoverWidth=0,this.showRequestId=0,this.popoverMeasureAttempts=0,this.triggerTargets=new Set,this.pointerWithinTrigger=!1,this.pointerWithinPopup=!1,this.focusWithinPopup=!1,this.onTriggerEnter=()=>{this.pointerWithinTrigger=!0,this.show()},this.onTriggerLeave=e=>{this.pointerWithinTrigger=!1;let t=e.relatedTarget;this.containsInteractiveNode(t)||this.scheduleHide()},this.onSlotChange=()=>{this.syncTriggerTargets()},this.onPopupEnter=()=>{this.pointerWithinPopup=!0,this.cancelHide()},this.onPopupLeave=e=>{this.pointerWithinPopup=!1;let t=e.relatedTarget;this.containsInteractiveNode(t)||this.scheduleHide()},this.onPopupFocusIn=()=>{this.focusWithinPopup=!0,this.cancelHide()},this.onPopupFocusOut=e=>{let t=e.relatedTarget;this.containsInteractiveNode(t)||(this.focusWithinPopup=!1,this.scheduleHide())},this.onPopupInteraction=()=>{this.pointerWithinPopup=!0,this.cancelHide()}}static{this.styles=Bu}static{this.showDelayMs=300}static{this.hideDelayMs=400}static{this.popoverWidthTolerancePx=2}static{this.maxPopoverMeasureAttempts=6}firstUpdated(){this.syncTriggerTargets(),this.triggerSlot?.addEventListener(`slotchange`,this.onSlotChange)}disconnectedCallback(){super.disconnectedCallback(),clearTimeout(this.showTimeout),clearTimeout(this.hideTimeout),this.showRequestId++,this.measureFrame&&cancelAnimationFrame(this.measureFrame),this.triggerSlot?.removeEventListener(`slotchange`,this.onSlotChange),this.clearTriggerTargets(),this.pointerWithinTrigger=!1,this.pointerWithinPopup=!1,this.focusWithinPopup=!1,this.active=!1,this.popoverWidth=0}updated(e){if(e.has(`active`)||e.has(`model`)||e.has(`parsedData`)){this.schedulePopoverMeasure(!0);return}e.has(`popoverWidth`)&&this.schedulePopoverMeasure()}containsInteractiveNode(e){return e?this.contains(e)||this.renderRoot.contains(e):!1}isInteractivelyActive(){return this.pointerWithinTrigger||this.pointerWithinPopup||this.focusWithinPopup}clearTriggerTargets(){for(let e of this.triggerTargets)e.removeEventListener(`mouseenter`,this.onTriggerEnter),e.removeEventListener(`mouseleave`,this.onTriggerLeave),e.removeEventListener(`focusin`,this.onTriggerEnter),e.removeEventListener(`focusout`,this.onTriggerLeave);this.triggerTargets.clear()}syncTriggerTargets(){this.clearTriggerTargets();let e=new Set;this.trigger&&e.add(this.trigger);for(let t of this.triggerSlot?.assignedElements({flatten:!0})??[])t instanceof HTMLElement&&e.add(t);for(let t of e)t.addEventListener(`mouseenter`,this.onTriggerEnter),t.addEventListener(`mouseleave`,this.onTriggerLeave),t.addEventListener(`focusin`,this.onTriggerEnter),t.addEventListener(`focusout`,this.onTriggerLeave),this.triggerTargets.add(t)}show(){clearTimeout(this.hideTimeout);let e=++this.showRequestId;this.showTimeout=window.setTimeout(async()=>{if(this.entry=(this.registryKey?ne(this.registryKey):y(this.schemaRef))??null,!(!this.entry||e!==this.showRequestId||!this.isInteractivelyActive())&&(this.model=(this.registryKey?await ie(this.registryKey):await ae(this.schemaRef))??null,!(!this.model||e!==this.showRequestId||!this.isInteractivelyActive()))){try{this.parsedData=JSON.parse(this.model.schemaJson)}catch{this.parsedData=null}this.popoverWidth=0,this.popoverMeasureAttempts=0,this.active=!0}},Td.showDelayMs)}scheduleHide(){clearTimeout(this.showTimeout),this.hideTimeout=window.setTimeout(()=>{this.isInteractivelyActive()||(this.active=!1,this.popoverWidth=0,this.popoverMeasureAttempts=0)},Td.hideDelayMs)}cancelHide(){clearTimeout(this.hideTimeout)}resolveExample(){if(this.model?.mockJson)return this.model.mockJson;let e=this.parsedData;return e?e.schema?.example===void 0?e.example===void 0?Array.isArray(e.examples)&&e.examples.length>0?JSON.stringify(e.examples[0]):null:JSON.stringify(e.example):JSON.stringify(e.schema.example):null}getSchemaJson(){if(!this.model)return``;let e=this.parsedData;return e&&e.schema?JSON.stringify(e.schema):this.model.schemaJson}formatJson(e){try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}schedulePopoverMeasure(e=!1){if(this.active){if(e)this.popoverMeasureAttempts=0;else if(this.popoverMeasureAttempts>=Td.maxPopoverMeasureAttempts)return;this.measureFrame&&cancelAnimationFrame(this.measureFrame),this.measureFrame=requestAnimationFrame(()=>{this.measureFrame=requestAnimationFrame(()=>{this.measureFrame=void 0,this.measurePopoverWidth()})})}}getCssLengthPx(e,t=0){let n=e.trim(),r=parseFloat(n);if(!Number.isFinite(r))return t;if(n.endsWith(`rem`)){let e=parseFloat(getComputedStyle(document.documentElement).fontSize);return r*(Number.isFinite(e)?e:16)}if(n.endsWith(`em`)){let e=parseFloat(getComputedStyle(this).fontSize);return r*(Number.isFinite(e)?e:16)}return r}getPopoverViewportWidth(){let e=getComputedStyle(this),t=this.getCssLengthPx(e.getPropertyValue(`--global-padding-double`));return Math.max(0,window.innerWidth-t)}collectRenderedWidth(e,t){let n=e.getBoundingClientRect().left-t+e.scrollWidth,r=e=>{for(let i of Array.from(e.children)){if(!(i instanceof HTMLElement))continue;let e=i.getBoundingClientRect();n=Math.max(n,e.left-t+i.scrollWidth),i.shadowRoot&&r(i.shadowRoot),r(i)}};return e.shadowRoot&&r(e.shadowRoot),r(e),Math.ceil(n)}measurePopoverWidth(){let e=this.popoverContent;if(!e)return;this.popoverMeasureAttempts++;let t=e.getBoundingClientRect(),n=Math.min(this.collectRenderedWidth(e,t.left),this.getPopoverViewportWidth());!Number.isFinite(n)||n<=0||Math.abs(n-t.width)<=Td.popoverWidthTolerancePx||(this.popoverWidth=n)}render(){let e=this.resolveExample(),t=this.getSchemaJson(),n=this.popoverWidth>0?`--ref-popover-width: ${this.popoverWidth}px`:``;return C` {this.active=!1}}> - ${this.active&&this.entry?S` + ${this.active&&this.entry?C` An error

- ${e?S` + ${e?C`
Example
An error language="json">
- `:C} + `:w}
- `:C} - `}};W([k({attribute:`registry-key`})],hd.prototype,`registryKey`,void 0),W([k({attribute:`schema-ref`})],hd.prototype,`schemaRef`,void 0),W([A()],hd.prototype,`active`,void 0),W([A()],hd.prototype,`entry`,void 0),W([A()],hd.prototype,`model`,void 0),W([A()],hd.prototype,`parsedData`,void 0),W([A()],hd.prototype,`popoverWidth`,void 0),W([j(`.trigger`)],hd.prototype,`trigger`,void 0),W([j(`slot`)],hd.prototype,`triggerSlot`,void 0),W([j(`.pp-ref-popover-content`)],hd.prototype,`popoverContent`,void 0),hd=md=W([O(`pp-ref-popover`)],hd);var gd=x` + `:w} + `}};G([A({attribute:`registry-key`})],Ed.prototype,`registryKey`,void 0),G([A({attribute:`schema-ref`})],Ed.prototype,`schemaRef`,void 0),G([j()],Ed.prototype,`active`,void 0),G([j()],Ed.prototype,`entry`,void 0),G([j()],Ed.prototype,`model`,void 0),G([j()],Ed.prototype,`parsedData`,void 0),G([j()],Ed.prototype,`popoverWidth`,void 0),G([M(`.trigger`)],Ed.prototype,`trigger`,void 0),G([M(`slot`)],Ed.prototype,`triggerSlot`,void 0),G([M(`.pp-ref-popover-content`)],Ed.prototype,`popoverContent`,void 0),Ed=Td=G([k(`pp-ref-popover`)],Ed);var Dd=S` :host { display: block; } @@ -7203,14 +7491,14 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error font-family: var(--font-stack), monospace; color: var(--font-color); } -`,_d=class extends w{constructor(...e){super(...e),this.extensionsJson=``,this.extensions=[]}static{this.styles=gd}willUpdate(e){if(e.has(`extensionsJson`))if(this.extensionsJson)try{this.extensions=JSON.parse(this.extensionsJson)}catch{this.extensions=[]}else this.extensions=[]}renderValue(e){return e==null?C:typeof e==`object`?S``:S`${String(e)}`}render(){return this.extensions.length?S`

- ${this.extensions.map(e=>S` +`,Od=class extends T{constructor(...e){super(...e),this.extensionsJson=``,this.extensions=[]}static{this.styles=Dd}willUpdate(e){if(e.has(`extensionsJson`))if(this.extensionsJson)try{this.extensions=JSON.parse(this.extensionsJson)}catch{this.extensions=[]}else this.extensions=[]}renderValue(e){return e==null?w:typeof e==`object`?C``:C`${String(e)}`}render(){return this.extensions.length?C`
+ ${this.extensions.map(e=>C`
${e.key}
${this.renderValue(e.value)}
`)} -
`:C}};W([k({attribute:`extensions-json`})],_d.prototype,`extensionsJson`,void 0),W([A()],_d.prototype,`extensions`,void 0),_d=W([O(`pp-extensions`)],_d);var vd=class extends w{constructor(...e){super(...e),this.parametersJson=``,this.params=[]}static{this.styles=[Ws,$c,el,tl,nl]}willUpdate(e){if(e.has(`parametersJson`)&&this.parametersJson)try{this.params=JSON.parse(this.parametersJson)}catch{this.params=[]}}hasPayload(){return this.parametersJson!==``||this.hasAttribute(`parameters-json`)}renderSkeleton(){return S` +
`:w}};G([A({attribute:`extensions-json`})],Od.prototype,`extensionsJson`,void 0),G([j()],Od.prototype,`extensions`,void 0),Od=G([k(`pp-extensions`)],Od);var kd=class extends T{constructor(...e){super(...e),this.parametersJson=``,this.params=[]}static{this.styles=[Us,ul,dl,fl,pl]}willUpdate(e){if(e.has(`parametersJson`)&&this.parametersJson)try{this.params=JSON.parse(this.parametersJson)}catch{this.params=[]}}hasPayload(){return this.parametersJson!==``||this.hasAttribute(`parameters-json`)}renderSkeleton(){return C` - `}inIcon(e){switch(e){case`cookie`:return`cookie`;case`header`:return`envelope`;case`path`:return`signpost`;case`query`:return`question-diamond`;default:return`question-diamond`}}parseSchema(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}render(){return this.params.length?S` - ${this.params.map(e=>{let t=this.parseSchema(e.schemaJson),n=cl(t);return S` + `}inIcon(e){switch(e){case`cookie`:return`cookie`;case`header`:return`envelope`;case`path`:return`signpost`;case`query`:return`question-diamond`;default:return`question-diamond`}}parseSchema(e){if(!e)return null;try{return JSON.parse(e)}catch{return null}}render(){return this.params.length?C` + ${this.params.map(e=>{let t=this.parseSchema(e.schemaJson),n=yl(t);return C`
- ${e.required?S`req`:C} - ${e.ref?S` + ${e.required?C`req`:w} + ${e.ref?C` \u279c - ${e.name}`:S`${e.name}`} + class="ref-link param-name" href=${Zs(e.ref.typeSlug,e.ref.slug)}>\u279c + ${e.name}`:C`${e.name}`} - ${e.deprecated?S`deprecated`:C} + ${e.deprecated?C`deprecated`:w}
- ${n?S`${n}`:C} - ${Ou(t,{labelSuffix:`:`})} + ${n?C`${n}`:w} + ${zu(t,{labelSuffix:`:`})}
${e.in}
- ${!e.ref&&(e.rawJson||e.rawYaml)?S` + ${!e.ref&&(e.rawJson||e.rawYaml)?C`
An error start-line=${e.sourceLine||1} location=${e.location||``}> -
`:C} +
`:w}
- ${Y(e.description)} + ${X(e.description)}
- ${!e.ref&&(e.rawJson||e.rawYaml)||e.mockJson||e.examples&&Object.keys(e.examples).length>0?S` + ${!e.ref&&(e.rawJson||e.rawYaml)||e.mockJson||e.examples&&Object.keys(e.examples).length>0?C`
- ${e.mockJson||e.examples&&Object.keys(e.examples).length>0?S` + ${e.mockJson||e.examples&&Object.keys(e.examples).length>0?C` - `:C} + `:w}
- `:C} + `:w} - ${e.extensions?.length?S` + ${e.extensions?.length?C`
  @@ -7279,10 +7567,10 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error

${e.name} Extensions

-
`:C} + `:w} `})} - `:this.hasPayload()?C:this.renderSkeleton()}};W([k({attribute:`parameters-json`})],vd.prototype,`parametersJson`,void 0),W([A()],vd.prototype,`params`,void 0),vd=W([O(`pp-operation-parameters`)],vd);var yd=x` + `:this.hasPayload()?w:this.renderSkeleton()}};G([A({attribute:`parameters-json`})],kd.prototype,`parametersJson`,void 0),G([j()],kd.prototype,`params`,void 0),kd=G([k(`pp-operation-parameters`)],kd);var Ad=S` .status-ok { color: var(--primary-color); font-family: var(--font-stack-bold), monospace; @@ -7297,7 +7585,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error color: var(--error-color); font-family: var(--font-stack-bold), monospace; } -`,bd=x` +`,jd=S` :host { display: block; margin-top: var(--global-padding); @@ -7306,6 +7594,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error h2 { border-bottom: 1px dashed var(--hrcolor); font-family: var(--font-stack), monospace; + font-size: var(--pp-section-heading-size, var(--h3-size)); padding-bottom: var(--global-padding); margin-top: 40px; text-transform: uppercase; @@ -7615,7 +7904,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error height: 1.35rem; margin-bottom: var(--global-padding); } -`,xd=x` +`,Md=S` sl-details.pp-details { display: block; min-height: 64px; @@ -7665,8 +7954,9 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error margin: 0; border-bottom: none; padding: 0; + font-size: var(--pp-section-heading-size, var(--h3-size)); } -`;function Sd(e){let t=parseInt(e,10);return t>=500?`status-error`:t>=400?`status-warn`:`status-ok`}var Cd={100:`Continue`,101:`Switching Protocols`,102:`Processing`,103:`Early Hints`,200:`OK`,201:`Created`,202:`Accepted`,203:`Non-Authoritative Information`,204:`No Content`,205:`Reset Content`,206:`Partial Content`,207:`Multi-Status`,208:`Already Reported`,226:`IM Used`,300:`Multiple Choices`,301:`Moved Permanently`,302:`Found`,303:`See Other`,304:`Not Modified`,305:`Use Proxy`,307:`Temporary Redirect`,308:`Permanent Redirect`,400:`Bad Request`,401:`Unauthorized`,402:`Payment Required`,403:`Forbidden`,404:`Not Found`,405:`Method Not Allowed`,406:`Not Acceptable`,407:`Proxy Authentication Required`,408:`Request Timeout`,409:`Conflict`,410:`Gone`,411:`Length Required`,412:`Precondition Failed`,413:`Content Too Large`,414:`URI Too Long`,415:`Unsupported Media Type`,416:`Range Not Satisfiable`,417:`Expectation Failed`,418:`I'm a Teapot`,421:`Misdirected Request`,422:`Unprocessable Entity`,423:`Locked`,424:`Failed Dependency`,425:`Too Early`,426:`Upgrade Required`,428:`Precondition Required`,429:`Too Many Requests`,431:`Request Header Fields Too Large`,451:`Unavailable For Legal Reasons`,500:`Internal Server Error`,501:`Not Implemented`,502:`Bad Gateway`,503:`Service Unavailable`,504:`Gateway Timeout`,505:`HTTP Version Not Supported`,506:`Variant Also Negotiates`,507:`Insufficient Storage`,508:`Loop Detected`,510:`Not Extended`,511:`Network Authentication Required`},wd=x` +`;function Nd(e){let t=parseInt(e,10);return t>=500?`status-error`:t>=400?`status-warn`:`status-ok`}var Pd={100:`Continue`,101:`Switching Protocols`,102:`Processing`,103:`Early Hints`,200:`OK`,201:`Created`,202:`Accepted`,203:`Non-Authoritative Information`,204:`No Content`,205:`Reset Content`,206:`Partial Content`,207:`Multi-Status`,208:`Already Reported`,226:`IM Used`,300:`Multiple Choices`,301:`Moved Permanently`,302:`Found`,303:`See Other`,304:`Not Modified`,305:`Use Proxy`,307:`Temporary Redirect`,308:`Permanent Redirect`,400:`Bad Request`,401:`Unauthorized`,402:`Payment Required`,403:`Forbidden`,404:`Not Found`,405:`Method Not Allowed`,406:`Not Acceptable`,407:`Proxy Authentication Required`,408:`Request Timeout`,409:`Conflict`,410:`Gone`,411:`Length Required`,412:`Precondition Failed`,413:`Content Too Large`,414:`URI Too Long`,415:`Unsupported Media Type`,416:`Range Not Satisfiable`,417:`Expectation Failed`,418:`I'm a Teapot`,421:`Misdirected Request`,422:`Unprocessable Entity`,423:`Locked`,424:`Failed Dependency`,425:`Too Early`,426:`Upgrade Required`,428:`Precondition Required`,429:`Too Many Requests`,431:`Request Header Fields Too Large`,451:`Unavailable For Legal Reasons`,500:`Internal Server Error`,501:`Not Implemented`,502:`Bad Gateway`,503:`Service Unavailable`,504:`Gateway Timeout`,505:`HTTP Version Not Supported`,506:`Variant Also Negotiates`,507:`Insufficient Storage`,508:`Loop Detected`,510:`Not Extended`,511:`Network Authentication Required`},Fd=S` .code-container { position: relative; } @@ -7729,7 +8019,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error text-transform: uppercase; letter-spacing: var(--label-spacing); } -`,Td=[Hs,wd,x` +`,Id=[Vs,Fd,S` :host { display: inline-block; margin: var(--example-margin, var(--global-padding) 0 var(--global-padding) 0); @@ -7794,37 +8084,37 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error pp-code-viewer { margin-top: var(--code-viewer-margin-top, var(--global-padding)); } -`],Z=class extends w{constructor(...e){super(...e),this.examplesData=``,this.mockJson=``,this.examplesJson=``,this.descriptionsJson=``,this.mode=`drawer`,this.codeLanguage=`json`,this.hideLabel=!1,this.showExpand=!1,this.showVisibilityToggle=!1,this.exampleTitle=`Example`,this.entries=[],this.descriptions={},this.selectedIndex=0}static{this.styles=[...Td,el,Ic]}willUpdate(e){(e.has(`examplesData`)||e.has(`mockJson`)||e.has(`examplesJson`)||e.has(`descriptionsJson`))&&this.buildEntries()}buildEntries(){let e=[],t=this.mockJson,n={};if(this.examplesData)try{let e=JSON.parse(this.examplesData);e.mockJson&&(t=e.mockJson),e.examples&&(n=e.examples)}catch{}if(this.examplesJson)try{n={...n,...JSON.parse(this.examplesJson)}}catch{}for(let[t,r]of Object.entries(n))r&&e.push({key:t,json:r});if(t&&e.push({key:``,json:t}),this.entries=e,this.selectedIndex=0,this.descriptionsJson)try{this.descriptions=JSON.parse(this.descriptionsJson)}catch{this.descriptions={}}else this.descriptions={}}showExample(e){let t=e.json;if(this.codeLanguage===`json`)try{t=JSON.stringify(JSON.parse(e.json),null,2)}catch{}let n=new CustomEvent(`pp-show-example`,{bubbles:!0,composed:!0,detail:{title:e.key,json:t,language:this.codeLanguage}});this.dispatchEvent(n)}handleSelect(e){let t=e.detail?.item?.value;if(t===void 0)return;let n=parseInt(t,10);n>=0&&n=0&&n - `}return S` + `}return C`

View Example... - ${this.entries.map((e,t)=>S` + ${this.entries.map((e,t)=>C` ${e.key} `)}
- `}inlineLabel(e){return e.toLowerCase().includes(`example`)?e:`${e} Example`}expandToDrawer(e){this.dispatchEvent(new CustomEvent(`pp-show-example`,{bubbles:!0,composed:!0,detail:{title:this.exampleTitle,json:e,language:this.codeLanguage}}))}requestHideExample(){this.dispatchEvent(new CustomEvent(`pp-hide-example`,{bubbles:!0,composed:!0}))}renderCodeBlock(e){return S` + `}inlineLabel(e){return e.toLowerCase().includes(`example`)?e:`${e} Example`}expandToDrawer(e){this.dispatchEvent(new CustomEvent(`pp-show-example`,{bubbles:!0,composed:!0,detail:{title:this.exampleTitle,json:e,language:this.codeLanguage}}))}requestHideExample(){this.dispatchEvent(new CustomEvent(`pp-hide-example`,{bubbles:!0,composed:!0}))}renderCodeBlock(e){return C`
- ${this.showVisibilityToggle?S` + ${this.showVisibilityToggle?C` - `:C} - ${this.showExpand?S` + `:w} + ${this.showExpand?C` this.expandToDrawer(e)}> - `:C} + `:w} An error
- `}renderInline(){let e=this.entries[this.selectedIndex];if(this.entries.length===1)return S` - ${this.hideLabel?C:S`
${this.inlineLabel(e.key)}
`} + `}renderInline(){let e=this.entries[this.selectedIndex];if(this.entries.length===1)return C` + ${this.hideLabel?w:C`
${this.inlineLabel(e.key)}
`} ${this.renderCodeBlock(e.json)} - `;let t=this.descriptions[e.key];return S` - ${this.hideLabel?C:S`
Example
`} + `;let t=this.descriptions[e.key];return C` + ${this.hideLabel?w:C`
Example
`} ${this.renderCodeBlock(e.json)}
${this.inlineLabel(e.key)} - ${this.entries.map((e,t)=>S` + ${this.entries.map((e,t)=>C` ${this.inlineLabel(e.key)} `)} - ${t?Y(t,{className:`inline-example-desc pp-markdown`}):C} + ${t?X(t,{className:`inline-example-desc pp-markdown`}):w}
- `}handleInlineSelect(e){let t=e.detail?.item?.value;t!==void 0&&(this.selectedIndex=parseInt(t,10))}};W([k({attribute:`examples-data`})],Z.prototype,`examplesData`,void 0),W([k({attribute:`mock-json`})],Z.prototype,`mockJson`,void 0),W([k({attribute:`examples-json`})],Z.prototype,`examplesJson`,void 0),W([k({attribute:`descriptions-json`})],Z.prototype,`descriptionsJson`,void 0),W([k()],Z.prototype,`mode`,void 0),W([k({attribute:`code-language`})],Z.prototype,`codeLanguage`,void 0),W([k({type:Boolean,attribute:`hide-label`})],Z.prototype,`hideLabel`,void 0),W([k({type:Boolean,attribute:`show-expand`})],Z.prototype,`showExpand`,void 0),W([k({type:Boolean,attribute:`show-visibility-toggle`})],Z.prototype,`showVisibilityToggle`,void 0),W([k({attribute:`example-title`})],Z.prototype,`exampleTitle`,void 0),W([A()],Z.prototype,`entries`,void 0),W([A()],Z.prototype,`descriptions`,void 0),W([A()],Z.prototype,`selectedIndex`,void 0),Z=W([O(`pp-example-selector`)],Z);var Ed=[Hs,x` + `}handleInlineSelect(e){let t=e.detail?.item?.value;t!==void 0&&(this.selectedIndex=parseInt(t,10))}};G([A({attribute:`examples-data`})],Ld.prototype,`examplesData`,void 0),G([A({attribute:`mock-json`})],Ld.prototype,`mockJson`,void 0),G([A({attribute:`examples-json`})],Ld.prototype,`examplesJson`,void 0),G([A({attribute:`descriptions-json`})],Ld.prototype,`descriptionsJson`,void 0),G([A()],Ld.prototype,`mode`,void 0),G([A({attribute:`code-language`})],Ld.prototype,`codeLanguage`,void 0),G([A({type:Boolean,attribute:`hide-label`})],Ld.prototype,`hideLabel`,void 0),G([A({type:Boolean,attribute:`show-expand`})],Ld.prototype,`showExpand`,void 0),G([A({type:Boolean,attribute:`show-visibility-toggle`})],Ld.prototype,`showVisibilityToggle`,void 0),G([A({attribute:`example-title`})],Ld.prototype,`exampleTitle`,void 0),G([j()],Ld.prototype,`entries`,void 0),G([j()],Ld.prototype,`descriptions`,void 0),G([j()],Ld.prototype,`selectedIndex`,void 0),Ld=G([k(`pp-example-selector`)],Ld);var Rd=[Vs,S` :host { display: block; } @@ -7972,44 +8262,58 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error .example-restore::part(base):hover { color: var(--primary-color); } -`],Dd=class extends w{constructor(...e){super(...e),this.contentJson=``,this.hideRefLinks=!1,this.mediaTypes=[],this.selectedIndex=0,this.schemasIdentical=!1,this.wide=!1,this.exampleHidden=!1,this.resizeObserver=null,this.paneResizeObserver=null,this._sizePending=!1,this._rafId=0,this._splitRepositioning=!1,this._splitRepositionTimer=0,this.observedPropsPane=null,this.observedExamplePane=null,this.observedPropsContent=null,this.observedExampleContent=null}static{this.styles=[Ws,tl,Ed]}connectedCallback(){super.connectedCallback(),setTimeout(()=>{this.wide=this.offsetWidth>=900,!(typeof ResizeObserver>`u`)&&(this.resizeObserver=new ResizeObserver(e=>{for(let t of e)this.wide=t.contentRect.width>=900}),this.resizeObserver.observe(this),this.paneResizeObserver=new ResizeObserver(()=>{this.sizeSplitPanel()}))},0)}disconnectedCallback(){super.disconnectedCallback(),cancelAnimationFrame(this._rafId),window.clearTimeout(this._splitRepositionTimer),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.paneResizeObserver?.disconnect(),this.paneResizeObserver=null,this.observedPropsPane=null,this.observedExamplePane=null,this.observedPropsContent=null,this.observedExampleContent=null}updated(e){(e.has(`wide`)||e.has(`selectedIndex`)||e.has(`mediaTypes`)||e.has(`exampleHidden`))&&this.sizeSplitPanel(),this.syncPaneObservers()}sizeSplitPanel(){!this.splitPanel||!this.propsPane||!this.examplePane||this._sizePending||this._splitRepositioning||(this._sizePending=!0,this._rafId=requestAnimationFrame(()=>{if(this._sizePending=!1,!this.splitPanel||!this.propsPane||!this.examplePane||this._splitRepositioning)return;let e=this.measurePaneContentHeight(this.propsPane),t=this.exampleHidden?0:this.measurePaneContentHeight(this.examplePane),n=document.documentElement.clientHeight||800,r=this.mediaTypes[this.selectedIndex],i=this.getPropCount(r),a=this.exampleHidden?e:Math.max(e,t),o=i>=6?300:220,s=n*.75,c=Math.max(o,Math.min(a,s)),l=getComputedStyle(this.splitPanel),u=parseFloat(l.paddingTop)+parseFloat(l.paddingBottom),d=Math.round(c+u),f=parseFloat(this.splitPanel.style.height);(!Number.isFinite(f)||Math.abs(f-d)>=1)&&(this.splitPanel.style.height=`${d}px`)}))}handleSplitReposition(){this._splitRepositioning=!0,this._rafId&&(cancelAnimationFrame(this._rafId),this._rafId=0,this._sizePending=!1),window.clearTimeout(this._splitRepositionTimer),this._splitRepositionTimer=window.setTimeout(()=>{this._splitRepositioning=!1,this.sizeSplitPanel()},120)}measurePaneContentHeight(e){let t=Array.from(e.children).reduce((e,t)=>e+Math.max(t.offsetHeight,t.scrollHeight),0),n=getComputedStyle(e);return t+(parseFloat(n.paddingTop)+parseFloat(n.paddingBottom))}syncPaneObservers(){if(!this.paneResizeObserver||typeof ResizeObserver>`u`)return;let e=this.propsPane??null,t=this.examplePane??null,n=e?.firstElementChild??null,r=t?.firstElementChild??null;this.observedPropsPane!==e&&(this.observedPropsPane&&this.paneResizeObserver.unobserve(this.observedPropsPane),e&&this.paneResizeObserver.observe(e),this.observedPropsPane=e),this.observedExamplePane!==t&&(this.observedExamplePane&&this.paneResizeObserver.unobserve(this.observedExamplePane),t&&this.paneResizeObserver.observe(t),this.observedExamplePane=t),this.observedPropsContent!==n&&(this.observedPropsContent&&this.paneResizeObserver.unobserve(this.observedPropsContent),n instanceof Element&&this.paneResizeObserver.observe(n),this.observedPropsContent=n),this.observedExampleContent!==r&&(this.observedExampleContent&&this.paneResizeObserver.unobserve(this.observedExampleContent),r instanceof Element&&this.paneResizeObserver.observe(r),this.observedExampleContent=r)}getPropCount(e){let t=e?.isArray&&e?.itemsSchemaJson?e.itemsSchemaJson:e?.schemaJson;if(!t)return 0;try{let e=JSON.parse(t);return e.properties?Object.keys(e.properties).length:0}catch{return 0}}isComplexWithExample(e){if(!e.schemaJson&&!(e.isArray&&e.itemsSchemaJson))return!1;let t=e.isArray&&e.itemsSchemaJson?e.itemsSchemaJson:e.schemaJson;if(!t)return!1;try{let n=JSON.parse(t),r=n.properties||n.allOf||n.oneOf||n.anyOf,i=!!(e.mockJson||e.mockYaml||e.mockXml||e.examples&&Object.keys(e.examples).length);return!!r&&i}catch{return!1}}willUpdate(e){if(e.has(`contentJson`)&&this.contentJson){try{this.mediaTypes=JSON.parse(this.contentJson)}catch{this.mediaTypes=[]}let e=this.mediaTypes.findIndex(e=>e.mediaType.toLowerCase()===`application/json`);this.selectedIndex=e>=0?e:0,this.schemasIdentical=this.mediaTypes.length>1&&new Set(this.mediaTypes.map(e=>this.schemaFingerprint(e))).size===1}}schemaFingerprint(e){return e.isArray&&e.itemsRef?`array:${e.itemsRef.slug}:${e.itemsSchemaJson||e.schemaJson}`:e.schemaRef?`ref:${e.schemaRef.componentType}/${e.schemaRef.slug}`:`inline:${e.schemaJson}`}getMockAndLanguage(e){let t=e.mediaType.toLowerCase();return(t.includes(`yaml`)||t.includes(`x-yaml`))&&e.mockYaml?{mock:e.mockYaml,language:`yaml`}:t.includes(`xml`)&&e.mockXml?{mock:e.mockXml,language:`xml`}:{mock:e.mockJson||``,language:`json`}}renderSchemaHeader(e){return e.isArray&&e.itemsRef?S` + .multi-format-schema { + margin-top: var(--global-padding); + } + .schema-format-label { + margin-bottom: var(--global-padding-half); + color: var(--secondary-color); + font-size: var(--font-size-small); + text-transform: uppercase; + overflow-wrap: anywhere; + } +`],zd=class extends T{constructor(...e){super(...e),this.contentJson=``,this.hideRefLinks=!1,this.mediaTypes=[],this.selectedIndex=0,this.schemasIdentical=!1,this.wide=!1,this.exampleHidden=!1,this.resizeObserver=null,this.paneResizeObserver=null,this._sizePending=!1,this._rafId=0,this._splitRepositioning=!1,this._splitRepositionTimer=0,this.observedPropsPane=null,this.observedExamplePane=null,this.observedPropsContent=null,this.observedExampleContent=null}static{this.styles=[Us,fl,Rd]}connectedCallback(){super.connectedCallback(),setTimeout(()=>{this.wide=this.offsetWidth>=900,!(typeof ResizeObserver>`u`)&&(this.resizeObserver=new ResizeObserver(e=>{for(let t of e)this.wide=t.contentRect.width>=900}),this.resizeObserver.observe(this),this.paneResizeObserver=new ResizeObserver(()=>{this.sizeSplitPanel()}))},0)}disconnectedCallback(){super.disconnectedCallback(),cancelAnimationFrame(this._rafId),window.clearTimeout(this._splitRepositionTimer),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.paneResizeObserver?.disconnect(),this.paneResizeObserver=null,this.observedPropsPane=null,this.observedExamplePane=null,this.observedPropsContent=null,this.observedExampleContent=null}updated(e){(e.has(`wide`)||e.has(`selectedIndex`)||e.has(`mediaTypes`)||e.has(`exampleHidden`))&&this.sizeSplitPanel(),this.syncPaneObservers()}sizeSplitPanel(){!this.splitPanel||!this.propsPane||!this.examplePane||this._sizePending||this._splitRepositioning||(this._sizePending=!0,this._rafId=requestAnimationFrame(()=>{if(this._sizePending=!1,!this.splitPanel||!this.propsPane||!this.examplePane||this._splitRepositioning)return;let e=this.measurePaneContentHeight(this.propsPane),t=this.exampleHidden?0:this.measurePaneContentHeight(this.examplePane),n=document.documentElement.clientHeight||800,r=this.mediaTypes[this.selectedIndex],i=this.getPropCount(r),a=this.exampleHidden?e:Math.max(e,t),o=i>=6?300:220,s=n*.75,c=Math.max(o,Math.min(a,s)),l=getComputedStyle(this.splitPanel),u=parseFloat(l.paddingTop)+parseFloat(l.paddingBottom),d=Math.round(c+u),f=parseFloat(this.splitPanel.style.height);(!Number.isFinite(f)||Math.abs(f-d)>=1)&&(this.splitPanel.style.height=`${d}px`)}))}handleSplitReposition(){this._splitRepositioning=!0,this._rafId&&(cancelAnimationFrame(this._rafId),this._rafId=0,this._sizePending=!1),window.clearTimeout(this._splitRepositionTimer),this._splitRepositionTimer=window.setTimeout(()=>{this._splitRepositioning=!1,this.sizeSplitPanel()},120)}measurePaneContentHeight(e){let t=Array.from(e.children).reduce((e,t)=>e+Math.max(t.offsetHeight,t.scrollHeight),0),n=getComputedStyle(e);return t+(parseFloat(n.paddingTop)+parseFloat(n.paddingBottom))}syncPaneObservers(){if(!this.paneResizeObserver||typeof ResizeObserver>`u`)return;let e=this.propsPane??null,t=this.examplePane??null,n=e?.firstElementChild??null,r=t?.firstElementChild??null;this.observedPropsPane!==e&&(this.observedPropsPane&&this.paneResizeObserver.unobserve(this.observedPropsPane),e&&this.paneResizeObserver.observe(e),this.observedPropsPane=e),this.observedExamplePane!==t&&(this.observedExamplePane&&this.paneResizeObserver.unobserve(this.observedExamplePane),t&&this.paneResizeObserver.observe(t),this.observedExamplePane=t),this.observedPropsContent!==n&&(this.observedPropsContent&&this.paneResizeObserver.unobserve(this.observedPropsContent),n instanceof Element&&this.paneResizeObserver.observe(n),this.observedPropsContent=n),this.observedExampleContent!==r&&(this.observedExampleContent&&this.paneResizeObserver.unobserve(this.observedExampleContent),r instanceof Element&&this.paneResizeObserver.observe(r),this.observedExampleContent=r)}getPropCount(e){let t=e?.isArray&&e?.itemsSchemaJson?e.itemsSchemaJson:e?.schemaJson;if(!t)return 0;try{let e=JSON.parse(t);return e.properties?Object.keys(e.properties).length:0}catch{return 0}}isComplexWithExample(e){if(!e.schemaJson&&!(e.isArray&&e.itemsSchemaJson))return!1;let t=e.isArray&&e.itemsSchemaJson?e.itemsSchemaJson:e.schemaJson;if(!t)return!1;try{let n=JSON.parse(t),r=n.properties||n.allOf||n.oneOf||n.anyOf,i=!!(e.mockJson||e.mockYaml||e.mockXml||e.examples&&Object.keys(e.examples).length);return!!r&&i}catch{return!1}}willUpdate(e){if(e.has(`contentJson`)&&this.contentJson){try{this.mediaTypes=JSON.parse(this.contentJson)}catch{this.mediaTypes=[]}let e=this.mediaTypes.findIndex(e=>e.mediaType.toLowerCase()===`application/json`);this.selectedIndex=e>=0?e:0,this.schemasIdentical=this.mediaTypes.length>1&&new Set(this.mediaTypes.map(e=>this.schemaFingerprint(e))).size===1}}schemaFingerprint(e){return e.isArray&&e.itemsRef?`array:${e.itemsRef.slug}:${e.itemsSchemaJson||e.schemaJson}`:e.schemaRef?`ref:${e.schemaRef.componentType}/${e.schemaRef.slug}`:`inline:${e.schemaJson}`}getMockAndLanguage(e){let t=e.mediaType.toLowerCase();return(t.includes(`yaml`)||t.includes(`x-yaml`))&&e.mockYaml?{mock:e.mockYaml,language:`yaml`}:t.includes(`xml`)&&e.mockXml?{mock:e.mockXml,language:`xml`}:{mock:e.mockJson||``,language:`json`}}renderSchemaHeader(e){return e.isArray&&e.itemsRef?C`

${e.mediaType} - ${this.hideRefLinks?S`Array`:S`Array<${Eu(e.itemsRef)}>`} -
`:e.schemaRef?S` + ${this.hideRefLinks?C`Array`:C`Array<${Lu(e.itemsRef)}>`} +
`:e.schemaRef?C`
${e.mediaType} - ${this.hideRefLinks?C:Eu(e.schemaRef)} -
`:e.schemaJson?S`
${e.mediaType}
`:C}renderSchemaProperties(e){if(e.isArray&&e.itemsRef){let t=e.itemsSchemaJson||e.schemaJson;return t?S``:C}return e.schemaRef,e.schemaJson?S``:C}renderInlineExamples(e,t,n){let r=e.examples&&Object.keys(e.examples).length>0;return!r&&!n?C:S` + ${this.hideRefLinks?w:Lu(e.schemaRef)} + `:!e.schemaJson&&!e.rawSchemaJson&&!e.rawSchemaYaml?w:C`
${e.mediaType}
`}renderSchemaProperties(e){if(e.isArray&&e.itemsRef){let t=e.itemsSchemaJson||e.schemaJson;return t?C``:w}return e.schemaRef,e.schemaJson?C``:w}renderInlineExamples(e,t,n){let r=e.examples&&Object.keys(e.examples).length>0;return!r&&!n?w:C` - `}renderExtensions(e){return e.extensions?.length?S` + `}renderExtensions(e){return e.extensions?.length?C`

${e.mediaType} Extensions

- `:C}renderRefInfo(e){return this.hideRefLinks?C:e.isArray&&e.itemsRef?S`Array<${Eu(e.itemsRef)}>`:e.schemaRef?Eu(e.schemaRef):C}renderDropdown(e){return S` + `:w}renderDiagram(e){return e.mermaidDiagram?C``:w}renderRawSchema(e){let t=e.rawSchemaJson||e.rawSchemaYaml||``;if(!t)return w;let n=e.rawSchemaJson?`json`:`yaml`;return C` +
+ ${e.schemaFormat?C`
${e.schemaFormat}
`:w} + +
`}renderRefInfo(e){return this.hideRefLinks?w:e.isArray&&e.itemsRef?C`Array<${Lu(e.itemsRef)}>`:e.schemaRef?Lu(e.schemaRef):w}renderDropdown(e){return C`
${e.mediaType} - ${this.mediaTypes.map((e,t)=>S` + ${this.mediaTypes.map((e,t)=>C` ${e.mediaType} `)} ${this.renderRefInfo(e)}
- `}handleSelect(e){let t=e.detail?.item?.value;if(t===void 0)return;let n=parseInt(t,10);n>=0&&n0,a=e.mediaType||`Example`;return S` + `}handleSelect(e){let t=e.detail?.item?.value;if(t===void 0)return;let n=parseInt(t,10);n>=0&&n0,a=e.mediaType||`Example`;return C`
- ${this.exampleHidden?this.renderExampleRestore():S` + ${this.exampleHidden?this.renderExampleRestore():C` An error `}
- `}hideExamplePane(){this.exampleHidden=!0}showExamplePane(){this.exampleHidden=!1}renderExampleRestore(){return S` + `}hideExamplePane(){this.exampleHidden=!0}showExamplePane(){this.exampleHidden=!1}renderExampleRestore(){return C` - `}render(){if(!this.mediaTypes.length)return C;if(this.mediaTypes.length===1){let e=this.mediaTypes[0];if(this.wide&&this.isComplexWithExample(e))return S` + `}render(){if(!this.mediaTypes.length)return w;if(this.mediaTypes.length===1){let e=this.mediaTypes[0];if(this.wide&&this.isComplexWithExample(e))return C` ${this.renderSchemaHeader(e)} ${this.renderSplit(e)} + ${this.renderRawSchema(e)} + ${this.renderDiagram(e)} ${this.renderExtensions(e)} - `;let{mock:t,language:n}=this.getMockAndLanguage(e);return S` + `;let{mock:t,language:n}=this.getMockAndLanguage(e);return C` ${this.renderSchemaHeader(e)} ${this.renderInlineExamples(e,n,t)} ${this.renderSchemaProperties(e)} + ${this.renderRawSchema(e)} + ${this.renderDiagram(e)} ${this.renderExtensions(e)} - `}let e=this.mediaTypes[this.selectedIndex];if(this.schemasIdentical){let t=this.mediaTypes[0];if(this.wide&&this.isComplexWithExample(e))return S` + `}let e=this.mediaTypes[this.selectedIndex];if(this.schemasIdentical){let t=this.mediaTypes[0];if(this.wide&&this.isComplexWithExample(e))return C` ${this.renderDropdown(e)} ${this.renderSplit(e)} + ${this.renderRawSchema(e)} + ${this.renderDiagram(e)} ${this.renderExtensions(e)} - `;let{mock:n,language:r}=this.getMockAndLanguage(e);return S` + `;let{mock:n,language:r}=this.getMockAndLanguage(e);return C` ${this.renderDropdown(e)} ${this.renderInlineExamples(e,r,n)} ${this.renderSchemaProperties(t)} + ${this.renderRawSchema(e)} + ${this.renderDiagram(e)} ${this.renderExtensions(e)} - `}if(this.wide&&this.isComplexWithExample(e))return S` + `}if(this.wide&&this.isComplexWithExample(e))return C` ${this.renderDropdown(e)} ${this.renderSplit(e)} + ${this.renderRawSchema(e)} + ${this.renderDiagram(e)} ${this.renderExtensions(e)} - `;let{mock:t,language:n}=this.getMockAndLanguage(e);return S` + `;let{mock:t,language:n}=this.getMockAndLanguage(e);return C` ${this.renderDropdown(e)} ${this.renderInlineExamples(e,n,t)} ${this.renderSchemaProperties(e)} + ${this.renderRawSchema(e)} + ${this.renderDiagram(e)} ${this.renderExtensions(e)} - `}};W([k({attribute:`content-json`})],Dd.prototype,`contentJson`,void 0),W([k({attribute:`hide-ref-links`,type:Boolean})],Dd.prototype,`hideRefLinks`,void 0),W([A()],Dd.prototype,`mediaTypes`,void 0),W([A()],Dd.prototype,`selectedIndex`,void 0),W([A()],Dd.prototype,`schemasIdentical`,void 0),W([A()],Dd.prototype,`wide`,void 0),W([A()],Dd.prototype,`exampleHidden`,void 0),W([j(`.schema-split`)],Dd.prototype,`splitPanel`,void 0),W([j(`.schema-props-pane`)],Dd.prototype,`propsPane`,void 0),W([j(`.schema-example-pane`)],Dd.prototype,`examplePane`,void 0),Dd=W([O(`pp-media-type-selector`)],Dd);var Od=class extends w{constructor(...e){super(...e),this.responsesJson=``,this.commonHeadersJson=``,this.responses=[],this.commonResponseHeaders=[],this.commonHeaderNames=new Set,this.commonErrorKeys=new Set,this.commonErrorResponses=new Map,this.successResponses=[],this.redirectResponses=[],this.errorResponses=[]}static{this.styles=[Ws,$c,el,tl,yd,bd,xd]}willUpdate(e){if(e.has(`responsesJson`)&&this.responsesJson){try{this.responses=JSON.parse(this.responsesJson)}catch{this.responses=[]}let e=[...this.responses].sort((e,t)=>parseInt(e.statusCode,10)-parseInt(t.statusCode,10)),t=[],n=[],r=[];for(let i of e){let e=parseInt(i.statusCode,10);e>=400?r.push(i):e>=300?n.push(i):t.push(i)}this.successResponses=t,this.redirectResponses=n,this.errorResponses=r;let{commonKeys:i,commonResponses:a}=this.computeCommonErrors(r);this.commonErrorKeys=i,this.commonErrorResponses=a}if(e.has(`commonHeadersJson`)&&this.commonHeadersJson){try{this.commonResponseHeaders=JSON.parse(this.commonHeadersJson)}catch{this.commonResponseHeaders=[]}this.commonHeaderNames=new Set(this.commonResponseHeaders.map(e=>e.name))}}getResponseNavItems(){let e=[];for(let t of[...this.successResponses,...this.redirectResponses,...this.errorResponses])e.push({label:`${t.statusCode} ${Cd[t.statusCode]||``}`.trim(),id:`response-${t.statusCode}`});return e}scrollToHeader(e){let t=this.shadowRoot?.getElementById(`header-`+e);if(!t)return;let n=t.closest(`sl-details`);n&&!n.open?(n.open=!0,n.updateComplete?.then(()=>{t.scrollIntoView({behavior:`auto`,block:`center`})})):t.scrollIntoView({behavior:`auto`,block:`center`})}renderHeaderEntry(e){return S` + `}};G([A({attribute:`content-json`})],zd.prototype,`contentJson`,void 0),G([A({attribute:`hide-ref-links`,type:Boolean})],zd.prototype,`hideRefLinks`,void 0),G([j()],zd.prototype,`mediaTypes`,void 0),G([j()],zd.prototype,`selectedIndex`,void 0),G([j()],zd.prototype,`schemasIdentical`,void 0),G([j()],zd.prototype,`wide`,void 0),G([j()],zd.prototype,`exampleHidden`,void 0),G([M(`.schema-split`)],zd.prototype,`splitPanel`,void 0),G([M(`.schema-props-pane`)],zd.prototype,`propsPane`,void 0),G([M(`.schema-example-pane`)],zd.prototype,`examplePane`,void 0),zd=G([k(`pp-media-type-selector`)],zd);var Bd=class extends T{constructor(...e){super(...e),this.responsesJson=``,this.commonHeadersJson=``,this.responses=[],this.commonResponseHeaders=[],this.commonHeaderNames=new Set,this.commonErrorKeys=new Set,this.commonErrorResponses=new Map,this.successResponses=[],this.redirectResponses=[],this.errorResponses=[]}static{this.styles=[Us,ul,dl,fl,Ad,jd,Md]}willUpdate(e){if(e.has(`responsesJson`)&&this.responsesJson){try{this.responses=JSON.parse(this.responsesJson)}catch{this.responses=[]}let e=[...this.responses].sort((e,t)=>parseInt(e.statusCode,10)-parseInt(t.statusCode,10)),t=[],n=[],r=[];for(let i of e){let e=parseInt(i.statusCode,10);e>=400?r.push(i):e>=300?n.push(i):t.push(i)}this.successResponses=t,this.redirectResponses=n,this.errorResponses=r;let{commonKeys:i,commonResponses:a}=this.computeCommonErrors(r);this.commonErrorKeys=i,this.commonErrorResponses=a}if(e.has(`commonHeadersJson`)&&this.commonHeadersJson){try{this.commonResponseHeaders=JSON.parse(this.commonHeadersJson)}catch{this.commonResponseHeaders=[]}this.commonHeaderNames=new Set(this.commonResponseHeaders.map(e=>e.name))}}getResponseNavItems(){let e=[];for(let t of[...this.successResponses,...this.redirectResponses,...this.errorResponses])e.push({label:`${t.statusCode} ${Pd[t.statusCode]||``}`.trim(),id:`response-${t.statusCode}`});return e}scrollToHeader(e){let t=this.shadowRoot?.getElementById(`header-`+e);if(!t)return;let n=t.closest(`sl-details`);n&&!n.open?(n.open=!0,n.updateComplete?.then(()=>{t.scrollIntoView({behavior:`auto`,block:`center`})})):t.scrollIntoView({behavior:`auto`,block:`center`})}renderHeaderEntry(e){return C`
- ${e.ref?S` + ${e.ref?C` \u279c - ${e.name}`:S`${e.name}`} + class="ref-link header-name" href=${Zs(e.ref.typeSlug,e.ref.slug)}>\u279c + ${e.name}`:C`${e.name}`}
- ${e.schemaType?S`${e.schemaType}`:C} - ${Ou(e,{includeExample:!0})} + ${e.schemaType?C`${e.schemaType}`:w} + ${zu(e,{includeExample:!0})}
- ${Y(e.description)} + ${X(e.description)}
- ${e.extensions?.length?S` + ${e.extensions?.length?C`
  @@ -8084,116 +8400,116 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error

- `:C} - `}renderHeaders(e,t){if(!e||!e.length)return C;let n=e.filter(e=>!t.has(e.name)),r=e.filter(e=>t.has(e.name));return!n.length&&!r.length?C:S` + `:w} + `}renderHeaders(e,t){if(!e||!e.length)return w;let n=e.filter(e=>!t.has(e.name)),r=e.filter(e=>t.has(e.name));return!n.length&&!r.length?w:C`

Response Headers

- ${n.length?S` + ${n.length?C`
${n.map(e=>this.renderHeaderEntry(e))} -
`:C} - ${r.length?S` +
`:w} + ${r.length?C` - `:C} + `:w} - `}renderLinks(e){return e?.length?S` + `}renderLinks(e){return e?.length?C` - `:C}errorRefKey(e){if(e.ref)return`ref:${e.ref.slug}`;if(e.content?.length){let t=e.content[0];if(t.schemaRef)return`schema:${t.schemaRef.slug}`;if(t.isArray&&t.itemsRef)return`items:${t.itemsRef.slug}`}return null}computeCommonErrors(e){let t=new Map;for(let n of e){let e=this.errorRefKey(n);if(!e)continue;let r=t.get(e);r?r.codeDescs.push({code:n.statusCode,description:n.description}):t.set(e,{resp:n,codeDescs:[{code:n.statusCode,description:n.description}]})}let n=new Set,r=new Map;for(let[e,i]of t)i.codeDescs.length>=2&&(n.add(e),r.set(e,i));return{commonKeys:n,commonResponses:r}}scrollToCommonError(e){(this.shadowRoot?.getElementById(`common-error-`+e))?.scrollIntoView({behavior:`auto`,block:`nearest`})}renderResponse(e,t,n){let r=n?this.errorRefKey(e):null,i=r!=null&&n?.has(r);return S` + `:w}errorRefKey(e){if(e.ref)return`ref:${e.ref.slug}`;if(e.content?.length){let t=e.content[0];if(t.schemaRef)return`schema:${t.schemaRef.slug}`;if(t.isArray&&t.itemsRef)return`items:${t.itemsRef.slug}`}return null}computeCommonErrors(e){let t=new Map;for(let n of e){let e=this.errorRefKey(n);if(!e)continue;let r=t.get(e);r?r.codeDescs.push({code:n.statusCode,description:n.description}):t.set(e,{resp:n,codeDescs:[{code:n.statusCode,description:n.description}]})}let n=new Set,r=new Map;for(let[e,i]of t)i.codeDescs.length>=2&&(n.add(e),r.set(e,i));return{commonKeys:n,commonResponses:r}}scrollToCommonError(e){(this.shadowRoot?.getElementById(`common-error-`+e))?.scrollIntoView({behavior:`auto`,block:`nearest`})}renderResponse(e,t,n){let r=n?this.errorRefKey(e):null,i=r!=null&&n?.has(r);return C`
-

${e.statusCode} ${Cd[e.statusCode]||``} - ${e.rawJson||e.rawYaml?S` +

${e.statusCode} ${Pd[e.statusCode]||``} + ${e.rawJson||e.rawYaml?C` - `:C} + `:w}

- ${e.descHtml?S`
${Bo(e.descHtml)}
`:Y(e.description,{className:`response-desc pp-markdown`})} + ${e.descHtml?C`
${zo(e.descHtml)}
`:X(e.description,{className:`response-desc pp-markdown`})} - ${i?S` + ${i?C` `:e.ref?Eu(e.ref,!0):e.content?.length?S``:C} +
`:e.ref?Lu(e.ref,!0):e.content?.length?C``:w} ${this.renderHeaders(e.headers??[],t)} ${this.renderLinks(e.links??[])} - ${e.extensions?.length?S` + ${e.extensions?.length?C`

Response ${e.statusCode} Extensions

-
`:C} + `:w} - `}renderMediaTypeHeader(e){return e.isArray&&e.itemsRef?S` + `}renderMediaTypeHeader(e){return e.isArray&&e.itemsRef?C` ${e.mediaType} - Array<${Eu(e.itemsRef)}> - `:e.schemaRef?S` + Array<${Lu(e.itemsRef)}> + `:e.schemaRef?C` ${e.mediaType} - ${Eu(e.schemaRef)} - `:C}renderCommonErrors(e,t){return e.size?S` + ${Lu(e.schemaRef)} + `:w}renderCommonErrors(e,t){return e.size?C`

Common Error Responses

- ${[...e.entries()].map(([e,{resp:n,codeDescs:r}])=>S` + ${[...e.entries()].map(([e,{resp:n,codeDescs:r}])=>C`
- ${r.map(({code:e,description:t})=>S` -
${e} ${Cd[e]||``}
- ${Y(t,{className:`common-error-desc pp-markdown`})} + ${r.map(({code:e,description:t})=>C` +
${e} ${Pd[e]||``}
+ ${X(t,{className:`common-error-desc pp-markdown`})} `)}
- ${n.ref?Eu(n.ref,!0):n.content?.length?S``:C} + ${n.ref?Lu(n.ref,!0):n.content?.length?C``:w} ${this.renderHeaders(n.headers??[],t)}
`)} - `:C}hasPayload(){return this.responsesJson!==``||this.commonHeadersJson!==``||this.hasAttribute(`responses-json`)||this.hasAttribute(`common-headers-json`)}renderSkeleton(){return S` + `:w}hasPayload(){return this.responsesJson!==``||this.commonHeadersJson!==``||this.hasAttribute(`responses-json`)||this.hasAttribute(`common-headers-json`)}renderSkeleton(){return C`

Responses

- `}render(){if(!this.responses.length)return this.hasPayload()?C:this.renderSkeleton();let e=this.commonHeaderNames,t=this.commonErrorKeys,n=this.commonErrorResponses;return S` + `}render(){if(!this.responses.length)return this.hasPayload()?w:this.renderSkeleton();let e=this.commonHeaderNames,t=this.commonErrorKeys,n=this.commonErrorResponses;return C`

Responses

${this.successResponses.map(t=>this.renderResponse(t,e))} - ${this.redirectResponses.length?S` + ${this.redirectResponses.length?C`

Redirect Responses

${this.redirectResponses.map(t=>this.renderResponse(t,e))}
- `:C} - ${this.commonResponseHeaders.length?S` + `:w} + ${this.commonResponseHeaders.length?C`

Common Response Headers

- ${this.commonResponseHeaders.map(e=>S` + ${this.commonResponseHeaders.map(e=>C`
${this.renderHeaderEntry(e)}
`)}
- `:C} - ${this.errorResponses.length||n.size?S` + `:w} + ${this.errorResponses.length||n.size?C`

Error Responses

${this.renderCommonErrors(n,e)} ${this.errorResponses.map(n=>this.renderResponse(n,e,t))}
- `:C} - `}};W([k({attribute:`responses-json`})],Od.prototype,`responsesJson`,void 0),W([k({attribute:`common-headers-json`})],Od.prototype,`commonHeadersJson`,void 0),W([A()],Od.prototype,`responses`,void 0),W([A()],Od.prototype,`commonResponseHeaders`,void 0),W([A()],Od.prototype,`commonHeaderNames`,void 0),W([A()],Od.prototype,`commonErrorKeys`,void 0),W([A()],Od.prototype,`commonErrorResponses`,void 0),W([A()],Od.prototype,`successResponses`,void 0),W([A()],Od.prototype,`redirectResponses`,void 0),W([A()],Od.prototype,`errorResponses`,void 0),Od=W([O(`pp-operation-responses`)],Od);var kd=x` + `:w} + `}};G([A({attribute:`responses-json`})],Bd.prototype,`responsesJson`,void 0),G([A({attribute:`common-headers-json`})],Bd.prototype,`commonHeadersJson`,void 0),G([j()],Bd.prototype,`responses`,void 0),G([j()],Bd.prototype,`commonResponseHeaders`,void 0),G([j()],Bd.prototype,`commonHeaderNames`,void 0),G([j()],Bd.prototype,`commonErrorKeys`,void 0),G([j()],Bd.prototype,`commonErrorResponses`,void 0),G([j()],Bd.prototype,`successResponses`,void 0),G([j()],Bd.prototype,`redirectResponses`,void 0),G([j()],Bd.prototype,`errorResponses`,void 0),Bd=G([k(`pp-operation-responses`)],Bd);var Vd=S` :host { display: block; } @@ -8295,48 +8611,48 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error width: 220px; } -`,Ad=class extends w{constructor(...e){super(...e),this.callbacksJson=``,this.callbacks=[]}static{this.styles=[Ws,el,tl,yd,kd]}willUpdate(e){if(e.has(`callbacksJson`)&&this.callbacksJson)try{this.callbacks=JSON.parse(this.callbacksJson)}catch{this.callbacks=[]}}renderRequestBody(e){return e.ref?S`

${Eu(e.ref,!0)}`:e.content?.length?S` +`,Hd=class extends T{constructor(...e){super(...e),this.callbacksJson=``,this.callbacks=[]}static{this.styles=[Us,dl,fl,Ad,Vd]}willUpdate(e){if(e.has(`callbacksJson`)&&this.callbacksJson)try{this.callbacks=JSON.parse(this.callbacksJson)}catch{this.callbacks=[]}}renderRequestBody(e){return e.ref?C`${Lu(e.ref,!0)}`:e.content?.length?C` - ${e.descHtml?S`
${Bo(e.descHtml)}
`:Y(e.description,{className:`callback-desc pp-markdown`})} + ${e.descHtml?C`
${zo(e.descHtml)}
`:X(e.description,{className:`callback-desc pp-markdown`})} - `:C}renderResponses(e){return e?.length?S` + `:w}renderResponses(e){return e?.length?C` - ${e.map(e=>S` + ${e.map(e=>C`
- ${e.statusCode} - ${Cd[e.statusCode]||``} - ${e.descHtml?S`${Bo(e.descHtml)}`:e.description?Y(e.description,{className:`callback-response-desc pp-markdown-inline`,inline:!0}):C} + ${e.statusCode} + ${Pd[e.statusCode]||``} + ${e.descHtml?C`${zo(e.descHtml)}`:e.description?X(e.description,{className:`callback-response-desc pp-markdown-inline`,inline:!0}):w}
- ${e.ref?Eu(e.ref,!0):C} - ${!e.ref&&e.content?.length?S``:C} + ${e.ref?Lu(e.ref,!0):w} + ${!e.ref&&e.content?.length?C``:w} `)} - `:C}renderCallbackOperation(e){return S` + `:w}renderCallbackOperation(e){return C`
${e.expression}
- ${e.descHtml?S`
${Bo(e.descHtml)}
`:Y(e.description,{className:`callback-desc pp-markdown`})} - ${e.requestBody?this.renderRequestBody(e.requestBody):C} + ${e.descHtml?C`
${zo(e.descHtml)}
`:X(e.description,{className:`callback-desc pp-markdown`})} + ${e.requestBody?this.renderRequestBody(e.requestBody):w} ${this.renderResponses(e.responses??[])}
- `}hasPayload(){return this.callbacksJson!==``||this.hasAttribute(`callbacks-json`)}renderSkeleton(){return S` + `}hasPayload(){return this.callbacksJson!==``||this.hasAttribute(`callbacks-json`)}renderSkeleton(){return C` - `}render(){return this.callbacks.length?S` - ${this.callbacks.map(e=>S` + `}render(){return this.callbacks.length?C` + ${this.callbacks.map(e=>C`
- ${e.ref?Eu(e.ref,!0):C} + ${e.ref?Lu(e.ref,!0):w} ${e.name}
${e.operations.map(e=>this.renderCallbackOperation(e))}
`)} - `:this.hasPayload()?C:this.renderSkeleton()}};W([k({attribute:`callbacks-json`})],Ad.prototype,`callbacksJson`,void 0),W([A()],Ad.prototype,`callbacks`,void 0),Ad=W([O(`pp-operation-callbacks`)],Ad);var jd=x` + `:this.hasPayload()?w:this.renderSkeleton()}};G([A({attribute:`callbacks-json`})],Hd.prototype,`callbacksJson`,void 0),G([j()],Hd.prototype,`callbacks`,void 0),Hd=G([k(`pp-operation-callbacks`)],Hd);var Ud=S` :host { display: block; margin-top: var(--global-padding-double); @@ -8350,7 +8666,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error margin-top: var(--subheader-margin-top); margin-bottom: 0; padding-bottom: var(--subheader-padding-bottom); - font-size: var(--h2-size); + font-size: var(--pp-section-heading-size, var(--h3-size)); font-family: var(--font-stack-bold), monospace; font-weight: normal; text-transform: uppercase; @@ -8684,7 +9000,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error opacity: 0.55; } -`,Md=[wd,x` +`,Wd=[Fd,S` :host { display: block; margin-top: var(--global-padding-double); @@ -8741,20 +9057,20 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error color: var(--font-color-sub1); } -`],Nd=class extends w{constructor(...e){super(...e),this.rawJson=``,this.rawYaml=``,this.startLine=1,this.title=`Schema`,this.location=``,this.noLineNumbers=!1,this.mode=`yaml`}static{this.styles=[Md,Ic]}connectedCallback(){super.connectedCallback();let e=document.body.getAttribute(`data-spec-format`);(e===`json`||e===`yaml`)&&(this.mode=e)}render(){if(!this.rawJson&&!this.rawYaml)return C;let e=!!this.rawJson,t=!!this.rawYaml,n=this.mode===`yaml`&&t?this.rawYaml:this.rawJson,r=this.mode===`yaml`&&t?`yaml`:`json`,i=e&&t;return S` - ${this.title||i?S` +`],Gd=class extends T{constructor(...e){super(...e),this.rawJson=``,this.rawYaml=``,this.startLine=1,this.title=`Schema`,this.location=``,this.noLineNumbers=!1,this.mode=`yaml`}static{this.styles=[Wd,Fc]}connectedCallback(){super.connectedCallback();let e=document.body.getAttribute(`data-spec-format`);(e===`json`||e===`yaml`)&&(this.mode=e)}render(){if(!this.rawJson&&!this.rawYaml)return w;let e=!!this.rawJson,t=!!this.rawYaml,n=this.mode===`yaml`&&t?this.rawYaml:this.rawJson,r=this.mode===`yaml`&&t?`yaml`:`json`,i=e&&t;return C` + ${this.title||i?C`

- ${this.title?S`

${this.title}

`:C} - ${i?S` + ${this.title?C`

${this.title}

`:w} + ${i?C`
- `:C} + `:w}
- `:C} + `:w}
An error location=${this.location}>
- `}};W([k({attribute:`raw-json`})],Nd.prototype,`rawJson`,void 0),W([k({attribute:`raw-yaml`})],Nd.prototype,`rawYaml`,void 0),W([k({attribute:`start-line`,type:Number})],Nd.prototype,`startLine`,void 0),W([k()],Nd.prototype,`title`,void 0),W([k()],Nd.prototype,`location`,void 0),W([k({attribute:`no-line-numbers`,type:Boolean})],Nd.prototype,`noLineNumbers`,void 0),W([A()],Nd.prototype,`mode`,void 0),Nd=W([O(`pp-inline-code`)],Nd);var Pd={schemas:`schemas`,responses:`responses`,parameters:`parameters`,requestBodies:`request-bodies`,headers:`headers`,securitySchemes:`security`,examples:`examples`,links:`links`,callbacks:`callbacks`,pathItems:rl},Q=class extends w{constructor(...e){super(...e),this.modelJson=``,this.name=``,this.layoutMode=`stacked`,this.estimatedBodyHeight=0,this.estimatedSplitHeight=0,this.propertyCount=0,this.requiredCount=0,this.hasExample=!1,this.rawYaml=``,this.schemaRawYaml=``,this.schemaRawJson=``,this.schemaStartLine=1,this.startLine=1,this.location=``,this.mockJson=``,this.parsed=null,this.wide=typeof window<`u`?window.innerWidth>=900:!1,this.exampleJson=``,this.exampleHidden=!1,this.resizeObserver=null,this.paneResizeObserver=null,this._sizePending=!1,this._rafId=0,this._splitRepositioning=!1,this._splitRepositionTimer=0,this.observedPropsPane=null,this.observedExamplePane=null,this.observedPropsContent=null,this.observedExampleContent=null}static{this.styles=[Ws,$c,jd]}connectedCallback(){super.connectedCallback(),this.wide=this.offsetWidth>=900,!(typeof ResizeObserver>`u`)&&(this.resizeObserver=new ResizeObserver(e=>{for(let t of e)this.wide=t.contentRect.width>=900}),this.resizeObserver.observe(this),this.paneResizeObserver=new ResizeObserver(()=>{this.sizeSplitPanel()}))}disconnectedCallback(){super.disconnectedCallback(),cancelAnimationFrame(this._rafId),window.clearTimeout(this._splitRepositionTimer),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.paneResizeObserver?.disconnect(),this.paneResizeObserver=null,this.observedPropsPane=null,this.observedExamplePane=null,this.observedPropsContent=null,this.observedExampleContent=null}updated(e){(e.has(`wide`)||e.has(`parsed`)||e.has(`exampleJson`)||e.has(`exampleHidden`))&&this.sizeSplitPanel(),this.syncPaneObservers()}sizeSplitPanel(){!this.splitPanel||!this.propsPane||!this.examplePane||this._sizePending||this._splitRepositioning||(this._sizePending=!0,this._rafId=requestAnimationFrame(()=>{if(this._sizePending=!1,!this.splitPanel||!this.propsPane||!this.examplePane||this._splitRepositioning)return;let e=this.measurePaneContentHeight(this.propsPane),t=this.exampleHidden?0:this.measurePaneContentHeight(this.examplePane),n=document.documentElement.clientHeight||800,r=this.parsed?.properties?Object.keys(this.parsed.properties).length:0,i=this.exampleHidden?e:Math.max(e,t),a=(this.estimatedSplitHeight>0?this.estimatedSplitHeight:0)||(r>=6?300:220),o=Math.max(a,Math.min(i,n*.75)),s=getComputedStyle(this.splitPanel),c=parseFloat(s.paddingTop)+parseFloat(s.paddingBottom),l=Math.round(o+c),u=parseFloat(this.splitPanel.style.height);(!Number.isFinite(u)||Math.abs(u-l)>=1)&&(this.splitPanel.style.height=`${l}px`)}))}handleSplitReposition(){this._splitRepositioning=!0,this._rafId&&(cancelAnimationFrame(this._rafId),this._rafId=0,this._sizePending=!1),window.clearTimeout(this._splitRepositionTimer),this._splitRepositionTimer=window.setTimeout(()=>{this._splitRepositioning=!1,this.sizeSplitPanel()},120)}measurePaneContentHeight(e){let t=Array.from(e.children).reduce((e,t)=>e+Math.max(t.offsetHeight,t.scrollHeight),0),n=getComputedStyle(e);return t+(parseFloat(n.paddingTop)+parseFloat(n.paddingBottom))}syncPaneObservers(){if(!this.paneResizeObserver||typeof ResizeObserver>`u`)return;let e=this.propsPane??null,t=this.examplePane??null,n=e?.firstElementChild??null,r=t?.firstElementChild??null;this.observedPropsPane!==e&&(this.observedPropsPane&&this.paneResizeObserver.unobserve(this.observedPropsPane),e&&this.paneResizeObserver.observe(e),this.observedPropsPane=e),this.observedExamplePane!==t&&(this.observedExamplePane&&this.paneResizeObserver.unobserve(this.observedExamplePane),t&&this.paneResizeObserver.observe(t),this.observedExamplePane=t),this.observedPropsContent!==n&&(this.observedPropsContent&&this.paneResizeObserver.unobserve(this.observedPropsContent),n instanceof Element&&this.paneResizeObserver.observe(n),this.observedPropsContent=n),this.observedExampleContent!==r&&(this.observedExampleContent&&this.paneResizeObserver.unobserve(this.observedExampleContent),r instanceof Element&&this.paneResizeObserver.observe(r),this.observedExampleContent=r)}willUpdate(e){if(e.has(`modelJson`)&&this.modelJson)try{this.parsed=JSON.parse(this.modelJson)}catch{this.parsed=null}if(e.has(`parsed`)||e.has(`mockJson`)){let e=this.parsed;e?.example===void 0?this.exampleJson=this.mockJson||``:this.exampleJson=JSON.stringify(e.example,null,2)}}renderExamples(e,t){if(e.examples){let t={},n={};for(let[r,i]of Object.entries(e.examples)){i.value!==void 0&&(t[r]=JSON.stringify(i.value,null,2));let e=i.description||i.summary||``;e&&(n[r]=e)}if(!Object.keys(t).length)return C;let r=Object.keys(n).length?JSON.stringify(n):``;return S`=900:!1,this.exampleJson=``,this.exampleHidden=!1,this.resizeObserver=null,this.paneResizeObserver=null,this._sizePending=!1,this._rafId=0,this._splitRepositioning=!1,this._splitRepositionTimer=0,this.observedPropsPane=null,this.observedExamplePane=null,this.observedPropsContent=null,this.observedExampleContent=null}static{this.styles=[Us,ul,Ud]}connectedCallback(){super.connectedCallback(),this.wide=this.offsetWidth>=900,!(typeof ResizeObserver>`u`)&&(this.resizeObserver=new ResizeObserver(e=>{for(let t of e)this.wide=t.contentRect.width>=900}),this.resizeObserver.observe(this),this.paneResizeObserver=new ResizeObserver(()=>{this.sizeSplitPanel()}))}disconnectedCallback(){super.disconnectedCallback(),cancelAnimationFrame(this._rafId),window.clearTimeout(this._splitRepositionTimer),this.resizeObserver?.disconnect(),this.resizeObserver=null,this.paneResizeObserver?.disconnect(),this.paneResizeObserver=null,this.observedPropsPane=null,this.observedExamplePane=null,this.observedPropsContent=null,this.observedExampleContent=null}updated(e){(e.has(`wide`)||e.has(`parsed`)||e.has(`exampleJson`)||e.has(`exampleHidden`))&&this.sizeSplitPanel(),this.syncPaneObservers()}sizeSplitPanel(){!this.splitPanel||!this.propsPane||!this.examplePane||this._sizePending||this._splitRepositioning||(this._sizePending=!0,this._rafId=requestAnimationFrame(()=>{if(this._sizePending=!1,!this.splitPanel||!this.propsPane||!this.examplePane||this._splitRepositioning)return;let e=this.measurePaneContentHeight(this.propsPane),t=this.exampleHidden?0:this.measurePaneContentHeight(this.examplePane),n=document.documentElement.clientHeight||800,r=this.parsed?.properties?Object.keys(this.parsed.properties).length:0,i=this.exampleHidden?e:Math.max(e,t),a=(this.estimatedSplitHeight>0?this.estimatedSplitHeight:0)||(r>=6?300:220),o=Math.max(a,Math.min(i,n*.75)),s=getComputedStyle(this.splitPanel),c=parseFloat(s.paddingTop)+parseFloat(s.paddingBottom),l=Math.round(o+c),u=parseFloat(this.splitPanel.style.height);(!Number.isFinite(u)||Math.abs(u-l)>=1)&&(this.splitPanel.style.height=`${l}px`)}))}handleSplitReposition(){this._splitRepositioning=!0,this._rafId&&(cancelAnimationFrame(this._rafId),this._rafId=0,this._sizePending=!1),window.clearTimeout(this._splitRepositionTimer),this._splitRepositionTimer=window.setTimeout(()=>{this._splitRepositioning=!1,this.sizeSplitPanel()},120)}measurePaneContentHeight(e){let t=Array.from(e.children).reduce((e,t)=>e+Math.max(t.offsetHeight,t.scrollHeight),0),n=getComputedStyle(e);return t+(parseFloat(n.paddingTop)+parseFloat(n.paddingBottom))}syncPaneObservers(){if(!this.paneResizeObserver||typeof ResizeObserver>`u`)return;let e=this.propsPane??null,t=this.examplePane??null,n=e?.firstElementChild??null,r=t?.firstElementChild??null;this.observedPropsPane!==e&&(this.observedPropsPane&&this.paneResizeObserver.unobserve(this.observedPropsPane),e&&this.paneResizeObserver.observe(e),this.observedPropsPane=e),this.observedExamplePane!==t&&(this.observedExamplePane&&this.paneResizeObserver.unobserve(this.observedExamplePane),t&&this.paneResizeObserver.observe(t),this.observedExamplePane=t),this.observedPropsContent!==n&&(this.observedPropsContent&&this.paneResizeObserver.unobserve(this.observedPropsContent),n instanceof Element&&this.paneResizeObserver.observe(n),this.observedPropsContent=n),this.observedExampleContent!==r&&(this.observedExampleContent&&this.paneResizeObserver.unobserve(this.observedExampleContent),r instanceof Element&&this.paneResizeObserver.observe(r),this.observedExampleContent=r)}willUpdate(e){if(e.has(`modelJson`)&&this.modelJson)try{this.parsed=JSON.parse(this.modelJson)}catch{this.parsed=null}if(e.has(`parsed`)||e.has(`mockJson`)){let e=this.parsed;e?.example===void 0?this.exampleJson=this.mockJson||``:this.exampleJson=JSON.stringify(e.example,null,2)}}renderExamples(e,t){if(e.examples){let t={},n={};for(let[r,i]of Object.entries(e.examples)){i.value!==void 0&&(t[r]=JSON.stringify(i.value,null,2));let e=i.description||i.summary||``;e&&(n[r]=e)}if(!Object.keys(t).length)return w;let r=Object.keys(n).length?JSON.stringify(n):``;return C``}let n=e.example??t?.example;return n===void 0?C:S``}collectSchemaEntries(e){let t=[];e.type&&t.push({label:`type`,value:e.type+(e.format?` (${e.format})`:``),isCode:!0}),e.default!==void 0&&t.push({label:`default`,value:JSON.stringify(e.default),isCode:!0});for(let n of sl(e))t.push(n);return e.enum?.length&&t.push({label:`enum`,value:S`
${e.enum.map(e=>S`${JSON.stringify(e)}`)}
`}),t}renderPropertyGrid(e){return e.length?S` + descriptions-json=${r}>
`}let n=e.example??t?.example;return n===void 0?w:C``}collectSchemaEntries(e){let t=[];e.type&&t.push({label:`type`,value:e.type+(e.format?` (${e.format})`:``),isCode:!0}),e.default!==void 0&&t.push({label:`default`,value:JSON.stringify(e.default),isCode:!0});for(let n of vl(e))t.push(n);return e.enum?.length&&t.push({label:`enum`,value:C`
${e.enum.map(e=>C`${JSON.stringify(e)}`)}
`}),t}renderPropertyGrid(e){return e.length?C`
- ${e.map(e=>S` + ${e.map(e=>C`
${e.label} - ${e.isCode?S`${e.value}`:e.value} + ${e.isCode?C`${e.value}`:e.value}
`)}
- `:C}renderParameter(e){let t=e.schema||{},n=[{label:`name`,value:e.name},{label:`in`,value:e.in}];return e.required!==void 0&&n.push({label:`required`,value:String(e.required)}),e.deprecated&&n.push({label:`deprecated`,value:`true`}),n.push(...this.collectSchemaEntries(t)),S` - ${t.type===`boolean`?C:this.renderExamples(e,t)} + `:w}renderParameter(e){let t=e.schema||{},n=[{label:`name`,value:e.name},{label:`in`,value:e.in}];return e.required!==void 0&&n.push({label:`required`,value:String(e.required)}),e.deprecated&&n.push({label:`deprecated`,value:`true`}),n.push(...this.collectSchemaEntries(t)),C` + ${t.type===`boolean`?w:this.renderExamples(e,t)} ${this.renderPropertyGrid(n)} - `}renderHeader(e){let t=e.schema||{},n=[];return e.required&&n.push({label:`required`,value:`true`}),e.deprecated&&n.push({label:`deprecated`,value:`true`}),n.push(...this.collectSchemaEntries(t)),S` + `}renderAsyncAPIParameter(e){let t=[];e.location&&t.push({label:`location`,value:e.location,isCode:!0}),e.default!==void 0&&t.push({label:`default`,value:JSON.stringify(e.default),isCode:!0}),Array.isArray(e.enum)&&e.enum.length&&t.push({label:`enum`,value:C`
${e.enum.map(e=>C`${JSON.stringify(e)}`)}
`});let n={};return Array.isArray(e.examples)&&e.examples.forEach((e,t)=>{n[`Example ${t+1}`]=JSON.stringify(e,null,2)}),C` + ${Object.keys(n).length?C``:w} + ${this.renderPropertyGrid(t)} + `}renderHeader(e){let t=e.schema||{},n=[];return e.required&&n.push({label:`required`,value:`true`}),e.deprecated&&n.push({label:`deprecated`,value:`true`}),n.push(...this.collectSchemaEntries(t)),C` ${this.renderExamples(e,t)} ${this.renderPropertyGrid(n)} - `}renderContent(e){let t=Array.isArray(e.content)?e.content:this.normalizeRawContent(e.content);return t.length?S``:C}normalizeRawContent(e){return!e||typeof e!=`object`||Array.isArray(e)?[]:Object.entries(e).map(([e,t])=>{let n=t?.schema??{},r=this.normalizeRawExamples(t),i={mediaType:e,schemaJson:n?JSON.stringify(n):``};if(n?.$ref){let e=this.resolveComponentLink(n.$ref);e&&(i.schemaRef=e)}if(n?.type===`array`&&n.items&&(i.isArray=!0,i.itemsSchemaJson=JSON.stringify(n.items),n.items.$ref)){let e=this.resolveComponentLink(n.items.$ref);e&&(i.itemsRef=e)}return Object.keys(r).length&&(i.examples=r),i}).filter(e=>!!(e.schemaJson||e.schemaRef||e.itemsRef||e.examples&&Object.keys(e.examples).length))}normalizeRawExamples(e){let t={};if(e?.examples&&typeof e.examples==`object`&&!Array.isArray(e.examples))for(let[n,r]of Object.entries(e.examples))r?.value!==void 0&&(t[n]=JSON.stringify(r.value,null,2));return!Object.keys(t).length&&e?.example!==void 0&&(t.Example=JSON.stringify(e.example,null,2)),t}resolveComponentLink(e){if(!e||!e.startsWith(`#/components/`))return null;let t=e.replace(`#/components/`,``).split(`/`);if(t.length!==2)return null;let[n,r]=t,i=Pd[n];return i?{name:r,componentType:n,typeSlug:i,slug:this.slugify(r)}:null}slugify(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`);return t=t.toLowerCase(),t=t.replace(/[/]/g,`-`).replace(/[{}_.]/g,`-`).replace(/ /g,`-`),t=t.replace(/[^a-z0-9-]/g,``),t=t.replace(/-{2,}/g,`-`),t=t.replace(/^-|-$/g,``),t||`unnamed`}renderExampleModel(e){let t=[];return e.summary&&t.push({label:`summary`,value:e.summary}),e.externalValue&&t.push({label:`externalValue`,value:S` + `}renderContent(e){let t=Array.isArray(e.content)?e.content:this.normalizeRawContent(e.content);return t.length?C``:w}normalizeRawContent(e){return!e||typeof e!=`object`||Array.isArray(e)?[]:Object.entries(e).map(([e,t])=>{let n=t?.schema??{},r=this.normalizeRawExamples(t),i={mediaType:e,schemaJson:n?JSON.stringify(n):``};if(n?.$ref){let e=this.resolveComponentLink(n.$ref);e&&(i.schemaRef=e)}if(n?.type===`array`&&n.items&&(i.isArray=!0,i.itemsSchemaJson=JSON.stringify(n.items),n.items.$ref)){let e=this.resolveComponentLink(n.items.$ref);e&&(i.itemsRef=e)}return Object.keys(r).length&&(i.examples=r),i}).filter(e=>!!(e.schemaJson||e.schemaRef||e.itemsRef||e.examples&&Object.keys(e.examples).length))}normalizeRawExamples(e){let t={};if(e?.examples&&typeof e.examples==`object`&&!Array.isArray(e.examples))for(let[n,r]of Object.entries(e.examples))r?.value!==void 0&&(t[n]=JSON.stringify(r.value,null,2));return!Object.keys(t).length&&e?.example!==void 0&&(t.Example=JSON.stringify(e.example,null,2)),t}resolveComponentLink(e){if(!e||!e.startsWith(`#/components/`))return null;let t=e.replace(`#/components/`,``).split(`/`);if(t.length!==2)return null;let[n,r]=t,i=Kd[n];return i?{name:r,componentType:n,typeSlug:i,slug:this.slugify(r)}:null}slugify(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`);return t=t.toLowerCase(),t=t.replace(/[/]/g,`-`).replace(/[{}_.]/g,`-`).replace(/ /g,`-`),t=t.replace(/[^a-z0-9-]/g,``),t=t.replace(/-{2,}/g,`-`),t=t.replace(/^-|-$/g,``),t||`unnamed`}renderExampleModel(e){let t=[];return e.summary&&t.push({label:`summary`,value:e.summary}),e.externalValue&&t.push({label:`externalValue`,value:C` ${e.externalValue} - `}),S` - ${e.value===void 0?C:S``} + `}),C` + ${e.value===void 0?w:C``} ${this.renderPropertyGrid(t)} - `}renderSchema(e){if(!(e.properties||e.allOf||e.oneOf||e.anyOf)){let t=this.collectSchemaEntries(e);return S` - ${e.type!==`boolean`&&this.exampleJson?S``:C} + `}renderSchema(e){if(!(e.properties||e.allOf||e.oneOf||e.anyOf)){let t=this.collectSchemaEntries(e);return C` + ${e.type!==`boolean`&&this.exampleJson?C``:w} ${this.renderPropertyGrid(t)} - `}let t=e.properties?`Properties`:e.allOf?`Composition`:`Variants`;return this.wide&&this.exampleJson?this.renderSchemaSplit(t):this.renderSchemaStacked(t)}renderSchemaSplit(e){let t=this.estimatedSplitHeight>0?`height: ${this.estimatedSplitHeight}px;`:``;return S` + `}let t=e.properties?`Properties`:e.allOf?`Composition`:`Variants`;return this.wide&&this.exampleJson?this.renderSchemaSplit(t):this.renderSchemaStacked(t)}renderSchemaSplit(e){let t=this.estimatedSplitHeight>0?`height: ${this.estimatedSplitHeight}px;`:``;return C`

${e}

@@ -8809,7 +9128,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error

- ${this.exampleHidden?this.renderExampleRestore():S` + ${this.exampleHidden?this.renderExampleRestore():C` An error `}
- `}hideExamplePane(){this.exampleHidden=!0}showExamplePane(){this.exampleHidden=!1}renderExampleRestore(){return S` + `}hideExamplePane(){this.exampleHidden=!0}showExamplePane(){this.exampleHidden=!1}renderExampleRestore(){return C` - `}renderSchemaStacked(e){return S` + `}renderSchemaStacked(e){return C`
0?`min-height: ${this.estimatedBodyHeight}px;`:``}> - ${this.exampleJson?S``:C} + ${this.exampleJson?C``:w}

${e}

- `}getReservedHeight(){return this.wide&&this.layoutMode===`split`&&this.estimatedSplitHeight>0?this.estimatedSplitHeight:this.estimatedBodyHeight>0?this.estimatedBodyHeight:this.propertyCount>0?Math.min(640,Math.max(220,160+this.propertyCount*40)):this.hasExample?360:240}renderSkeletonRows(e){return Array.from({length:Math.max(3,e||4)},(e,t)=>S` + `}getReservedHeight(){return this.wide&&this.layoutMode===`split`&&this.estimatedSplitHeight>0?this.estimatedSplitHeight:this.estimatedBodyHeight>0?this.estimatedBodyHeight:this.propertyCount>0?Math.min(640,Math.max(220,160+this.propertyCount*40)):this.hasExample?360:240}renderSkeletonRows(e){return Array.from({length:Math.max(3,e||4)},(e,t)=>C`
- `)}renderSkeleton(){let e=`min-height: ${this.getReservedHeight()}px;`;return this.wide&&this.layoutMode===`split`?S` + `)}renderSkeleton(){let e=`min-height: ${this.getReservedHeight()}px;`;return this.wide&&this.layoutMode===`split`?C`
@@ -8841,26 +9160,26 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error

- ${this.hasExample?S` + ${this.hasExample?C`
- `:S` + `:C`
`}
- `:S` + `:C`
- ${this.hasExample?S` + ${this.hasExample?C`
- `:C} + `:w}
${this.renderSkeletonRows(this.propertyCount)}
- `}render(){if(!this.parsed)return this.renderSkeleton();let e=this.parsed;return e.in?this.renderParameter(e):e.schema&&!e.properties&&!e.in?this.renderHeader(e):e.value!==void 0||e.externalValue!==void 0?this.renderExampleModel(e):e.content?this.renderContent(e):this.renderSchema(e)}};W([k({attribute:`model-json`})],Q.prototype,`modelJson`,void 0),W([k()],Q.prototype,`name`,void 0),W([k({attribute:`layout-mode`})],Q.prototype,`layoutMode`,void 0),W([k({attribute:`estimated-body-height`,type:Number})],Q.prototype,`estimatedBodyHeight`,void 0),W([k({attribute:`estimated-split-height`,type:Number})],Q.prototype,`estimatedSplitHeight`,void 0),W([k({attribute:`property-count`,type:Number})],Q.prototype,`propertyCount`,void 0),W([k({attribute:`required-count`,type:Number})],Q.prototype,`requiredCount`,void 0),W([k({attribute:`has-example`,type:Boolean})],Q.prototype,`hasExample`,void 0),W([k({attribute:`raw-yaml`})],Q.prototype,`rawYaml`,void 0),W([k({attribute:`schema-raw-yaml`})],Q.prototype,`schemaRawYaml`,void 0),W([k({attribute:`schema-raw-json`})],Q.prototype,`schemaRawJson`,void 0),W([k({attribute:`schema-start-line`,type:Number})],Q.prototype,`schemaStartLine`,void 0),W([k({attribute:`start-line`,type:Number})],Q.prototype,`startLine`,void 0),W([k()],Q.prototype,`location`,void 0),W([k({attribute:`mock-json`})],Q.prototype,`mockJson`,void 0),W([A()],Q.prototype,`parsed`,void 0),W([A()],Q.prototype,`wide`,void 0),W([A()],Q.prototype,`exampleJson`,void 0),W([A()],Q.prototype,`exampleHidden`,void 0),W([j(`.schema-split`)],Q.prototype,`splitPanel`,void 0),W([j(`.schema-props-pane`)],Q.prototype,`propsPane`,void 0),W([j(`.schema-example-pane`)],Q.prototype,`examplePane`,void 0),Q=W([O(`pp-model-page`)],Q);var Fd=x` + `}render(){if(!this.parsed)return this.renderSkeleton();let e=this.parsed;return e.in?this.renderParameter(e):this.componentType===`parameters`?this.renderAsyncAPIParameter(e):e.schema&&!e.properties&&!e.in?this.renderHeader(e):e.value!==void 0||e.externalValue!==void 0?this.renderExampleModel(e):e.content?this.renderContent(e):this.renderSchema(e)}};G([A({attribute:`model-json`})],Q.prototype,`modelJson`,void 0),G([A()],Q.prototype,`name`,void 0),G([A({attribute:`component-type`})],Q.prototype,`componentType`,void 0),G([A({attribute:`layout-mode`})],Q.prototype,`layoutMode`,void 0),G([A({attribute:`estimated-body-height`,type:Number})],Q.prototype,`estimatedBodyHeight`,void 0),G([A({attribute:`estimated-split-height`,type:Number})],Q.prototype,`estimatedSplitHeight`,void 0),G([A({attribute:`property-count`,type:Number})],Q.prototype,`propertyCount`,void 0),G([A({attribute:`required-count`,type:Number})],Q.prototype,`requiredCount`,void 0),G([A({attribute:`has-example`,type:Boolean})],Q.prototype,`hasExample`,void 0),G([A({attribute:`raw-yaml`})],Q.prototype,`rawYaml`,void 0),G([A({attribute:`schema-raw-yaml`})],Q.prototype,`schemaRawYaml`,void 0),G([A({attribute:`schema-raw-json`})],Q.prototype,`schemaRawJson`,void 0),G([A({attribute:`schema-start-line`,type:Number})],Q.prototype,`schemaStartLine`,void 0),G([A({attribute:`start-line`,type:Number})],Q.prototype,`startLine`,void 0),G([A()],Q.prototype,`location`,void 0),G([A({attribute:`mock-json`})],Q.prototype,`mockJson`,void 0),G([j()],Q.prototype,`parsed`,void 0),G([j()],Q.prototype,`wide`,void 0),G([j()],Q.prototype,`exampleJson`,void 0),G([j()],Q.prototype,`exampleHidden`,void 0),G([M(`.schema-split`)],Q.prototype,`splitPanel`,void 0),G([M(`.schema-props-pane`)],Q.prototype,`propsPane`,void 0),G([M(`.schema-example-pane`)],Q.prototype,`examplePane`,void 0),Q=G([k(`pp-model-page`)],Q);var qd=S` :host { display: block; } @@ -8896,19 +9215,19 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error margin: 0; overflow-wrap: break-word; } -`,Id=class extends w{constructor(...e){super(...e),this.name=``,this.href=``,this.description=``}static{this.styles=[el,Fd]}render(){return S` +`,Jd=class extends T{constructor(...e){super(...e),this.name=``,this.href=``,this.description=``}static{this.styles=[dl,qd]}render(){return C` ${this.name} - ${Y(this.description)} + ${X(this.description)} - `}};W([k()],Id.prototype,`name`,void 0),W([k()],Id.prototype,`href`,void 0),W([k()],Id.prototype,`description`,void 0),Id=W([O(`pp-model-card`)],Id);var Ld=x` + `}};G([A()],Jd.prototype,`name`,void 0),G([A()],Jd.prototype,`href`,void 0),G([A()],Jd.prototype,`description`,void 0),Jd=G([k(`pp-model-card`)],Jd);var Yd=S` :host { display: block; margin-top: var(--global-padding); padding-top: var(--global-padding); border-top: 1px dashed var(--secondary-color-dimmer); } -`,Rd=x` +`,Xd=S` :host { display: block; margin-bottom: var(--global-padding); @@ -8919,7 +9238,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error margin-top: var(--global-padding); margin-bottom: var(--global-padding); padding-bottom: var(--global-padding); - font-size: var(--h2-size); + font-size: var(--pp-section-heading-size, var(--h3-size)); font-family: var(--font-stack-bold), monospace; font-weight: normal; text-transform: uppercase; @@ -8994,7 +9313,7 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error .filter-btn::part(label) { font-family: var(--font-stack), monospace; } -`,zd=x` +`,Zd=S` :host { display: block; } @@ -9280,10 +9599,10 @@ Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error .input--no-spin-buttons input[type='number'] { -moz-appearance: textfield; } -`,$=class extends M{constructor(){super(...arguments),this.formControlController=new Co(this,{assumeInteractionOn:[`sl-blur`,`sl-input`]}),this.hasSlotController=new ao(this,`help-text`,`label`),this.localize=new I(this),this.hasFocus=!1,this.title=``,this.__numberInput=Object.assign(document.createElement(`input`),{type:`number`}),this.__dateInput=Object.assign(document.createElement(`input`),{type:`date`}),this.type=`text`,this.name=``,this.value=``,this.defaultValue=``,this.size=`medium`,this.filled=!1,this.pill=!1,this.label=``,this.helpText=``,this.clearable=!1,this.disabled=!1,this.placeholder=``,this.readonly=!1,this.passwordToggle=!1,this.passwordVisible=!1,this.noSpinButtons=!1,this.form=``,this.required=!1,this.spellcheck=!0}get valueAsDate(){return this.__dateInput.type=this.type,this.__dateInput.value=this.value,this.input?.valueAsDate||this.__dateInput.valueAsDate}set valueAsDate(e){this.__dateInput.type=this.type,this.__dateInput.valueAsDate=e,this.value=this.__dateInput.value}get valueAsNumber(){return this.__numberInput.value=this.value,this.input?.valueAsNumber||this.__numberInput.valueAsNumber}set valueAsNumber(e){this.__numberInput.valueAsNumber=e,this.value=this.__numberInput.value}get validity(){return this.input.validity}get validationMessage(){return this.input.validationMessage}firstUpdated(){this.formControlController.updateValidity()}handleBlur(){this.hasFocus=!1,this.emit(`sl-blur`)}handleChange(){this.value=this.input.value,this.emit(`sl-change`)}handleClearClick(e){e.preventDefault(),this.value!==``&&(this.value=``,this.emit(`sl-clear`),this.emit(`sl-input`),this.emit(`sl-change`)),this.input.focus()}handleFocus(){this.hasFocus=!0,this.emit(`sl-focus`)}handleInput(){this.value=this.input.value,this.formControlController.updateValidity(),this.emit(`sl-input`)}handleInvalid(e){this.formControlController.setValidity(!1),this.formControlController.emitInvalidEvent(e)}handleKeyDown(e){let t=e.metaKey||e.ctrlKey||e.shiftKey||e.altKey;e.key===`Enter`&&!t&&setTimeout(()=>{!e.defaultPrevented&&!e.isComposing&&this.formControlController.submit()})}handlePasswordToggle(){this.passwordVisible=!this.passwordVisible}handleDisabledChange(){this.formControlController.setValidity(this.disabled)}handleStepChange(){this.input.step=String(this.step),this.formControlController.updateValidity()}async handleValueChange(){await this.updateComplete,this.formControlController.updateValidity()}focus(e){this.input.focus(e)}blur(){this.input.blur()}select(){this.input.select()}setSelectionRange(e,t,n=`none`){this.input.setSelectionRange(e,t,n)}setRangeText(e,t,n,r=`preserve`){let i=t??this.input.selectionStart,a=n??this.input.selectionEnd;this.input.setRangeText(e,i,a,r),this.value!==this.input.value&&(this.value=this.input.value)}showPicker(){`showPicker`in HTMLInputElement.prototype&&this.input.showPicker()}stepUp(){this.input.stepUp(),this.value!==this.input.value&&(this.value=this.input.value)}stepDown(){this.input.stepDown(),this.value!==this.input.value&&(this.value=this.input.value)}checkValidity(){return this.input.checkValidity()}getForm(){return this.formControlController.getForm()}reportValidity(){return this.input.reportValidity()}setCustomValidity(e){this.input.setCustomValidity(e),this.formControlController.updateValidity()}render(){let e=this.hasSlotController.test(`label`),t=this.hasSlotController.test(`help-text`),n=this.label?!0:!!e,r=this.helpText?!0:!!t,i=this.clearable&&!this.disabled&&!this.readonly&&(typeof this.value==`number`||this.value.length>0);return S` +`,$=class extends N{constructor(){super(...arguments),this.formControlController=new So(this,{assumeInteractionOn:[`sl-blur`,`sl-input`]}),this.hasSlotController=new io(this,`help-text`,`label`),this.localize=new L(this),this.hasFocus=!1,this.title=``,this.__numberInput=Object.assign(document.createElement(`input`),{type:`number`}),this.__dateInput=Object.assign(document.createElement(`input`),{type:`date`}),this.type=`text`,this.name=``,this.value=``,this.defaultValue=``,this.size=`medium`,this.filled=!1,this.pill=!1,this.label=``,this.helpText=``,this.clearable=!1,this.disabled=!1,this.placeholder=``,this.readonly=!1,this.passwordToggle=!1,this.passwordVisible=!1,this.noSpinButtons=!1,this.form=``,this.required=!1,this.spellcheck=!0}get valueAsDate(){return this.__dateInput.type=this.type,this.__dateInput.value=this.value,this.input?.valueAsDate||this.__dateInput.valueAsDate}set valueAsDate(e){this.__dateInput.type=this.type,this.__dateInput.valueAsDate=e,this.value=this.__dateInput.value}get valueAsNumber(){return this.__numberInput.value=this.value,this.input?.valueAsNumber||this.__numberInput.valueAsNumber}set valueAsNumber(e){this.__numberInput.valueAsNumber=e,this.value=this.__numberInput.value}get validity(){return this.input.validity}get validationMessage(){return this.input.validationMessage}firstUpdated(){this.formControlController.updateValidity()}handleBlur(){this.hasFocus=!1,this.emit(`sl-blur`)}handleChange(){this.value=this.input.value,this.emit(`sl-change`)}handleClearClick(e){e.preventDefault(),this.value!==``&&(this.value=``,this.emit(`sl-clear`),this.emit(`sl-input`),this.emit(`sl-change`)),this.input.focus()}handleFocus(){this.hasFocus=!0,this.emit(`sl-focus`)}handleInput(){this.value=this.input.value,this.formControlController.updateValidity(),this.emit(`sl-input`)}handleInvalid(e){this.formControlController.setValidity(!1),this.formControlController.emitInvalidEvent(e)}handleKeyDown(e){let t=e.metaKey||e.ctrlKey||e.shiftKey||e.altKey;e.key===`Enter`&&!t&&setTimeout(()=>{!e.defaultPrevented&&!e.isComposing&&this.formControlController.submit()})}handlePasswordToggle(){this.passwordVisible=!this.passwordVisible}handleDisabledChange(){this.formControlController.setValidity(this.disabled)}handleStepChange(){this.input.step=String(this.step),this.formControlController.updateValidity()}async handleValueChange(){await this.updateComplete,this.formControlController.updateValidity()}focus(e){this.input.focus(e)}blur(){this.input.blur()}select(){this.input.select()}setSelectionRange(e,t,n=`none`){this.input.setSelectionRange(e,t,n)}setRangeText(e,t,n,r=`preserve`){let i=t??this.input.selectionStart,a=n??this.input.selectionEnd;this.input.setRangeText(e,i,a,r),this.value!==this.input.value&&(this.value=this.input.value)}showPicker(){`showPicker`in HTMLInputElement.prototype&&this.input.showPicker()}stepUp(){this.input.stepUp(),this.value!==this.input.value&&(this.value=this.input.value)}stepDown(){this.input.stepDown(),this.value!==this.input.value&&(this.value=this.input.value)}checkValidity(){return this.input.checkValidity()}getForm(){return this.formControlController.getForm()}reportValidity(){return this.input.reportValidity()}setCustomValidity(e){this.input.setCustomValidity(e),this.formControlController.updateValidity()}render(){let e=this.hasSlotController.test(`label`),t=this.hasSlotController.test(`help-text`),n=this.label?!0:!!e,r=this.helpText?!0:!!t,i=this.clearable&&!this.disabled&&!this.readonly&&(typeof this.value==`number`||this.value.length>0);return C`

`}};yr.styles=Xre,vr([qt()],yr.prototype,`name`,void 0),vr([qt()],yr.prototype,`url`,void 0),vr([qt({type:Boolean})],yr.prototype,`wide`,void 0),vr([qt({type:Boolean})],yr.prototype,`fluid`,void 0),yr=vr([Kt(`pb33f-header`)],yr);var Zre=nt` :host { display: inline-flex; @@ -2480,7 +2480,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value text-shadow: 0 0 8px rgba(51, 255, 51, 0.6); } -`,fr=nt` +`,br=nt` sl-tooltip::part(base){ font-family: var(--font-stack), monospace; @@ -2503,7 +2503,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value sl-tooltip::part(base__arrow){ background-color: var(--secondary-color); } - `,pr=`pb33f-theme-change`,oie=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},sie=`tektronix`,cie=`pb33f-theme`,lie=`pb33f-base-theme`,mr=class extends zt{constructor(){super(...arguments),this.baseTheme=`dark`,this.tektronixActive=!1}get activeTheme(){return this.tektronixActive?sie:this.baseTheme}connectedCallback(){super.connectedCallback();let e=localStorage.getItem(cie);e===`tektronix`?(this.tektronixActive=!0,this.baseTheme=localStorage.getItem(lie)===`light`?`light`:`dark`):(this.tektronixActive=!1,this.baseTheme=e===`light`?`light`:`dark`),this.applyTheme()}applyTheme(){let e=this.activeTheme;localStorage.setItem(cie,e),localStorage.setItem(lie,this.baseTheme);let t=document.querySelector(`html`);t&&(t.setAttribute(`theme`,e),e===`light`?t.classList.remove(`sl-theme-dark`):t.classList.add(`sl-theme-dark`))}dispatchThemeChange(){window.dispatchEvent(new CustomEvent(pr,{detail:{theme:this.activeTheme}}))}toggleTheme(){this.baseTheme=this.baseTheme===`dark`?`light`:`dark`,this.tektronixActive&&=!1,this.applyTheme(),this.dispatchThemeChange()}toggleTektronix(){this.tektronixActive=!this.tektronixActive,this.applyTheme(),this.dispatchThemeChange()}render(){let e=this.baseTheme===`dark`?`sun`:`moon`,t=this.baseTheme===`dark`?`Switch to Roger Mode (light)`:`Switch to PB33F Mode (dark)`,n=this.tektronixActive?`Disable Tektronix 4010 Mode`:`Enable Tektronix 4010 Mode`;return M` + `,xr=`pb33f-theme-change`,Qre=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},$re=`tektronix`,eie=`pb33f-theme`,tie=`pb33f-base-theme`,Sr=class extends Bt{constructor(){super(...arguments),this.baseTheme=`dark`,this.tektronixActive=!1}get activeTheme(){return this.tektronixActive?$re:this.baseTheme}connectedCallback(){super.connectedCallback();let e=localStorage.getItem(eie);e===`tektronix`?(this.tektronixActive=!0,this.baseTheme=localStorage.getItem(tie)===`light`?`light`:`dark`):(this.tektronixActive=!1,this.baseTheme=e===`light`?`light`:`dark`),this.applyTheme()}applyTheme(){let e=this.activeTheme;localStorage.setItem(eie,e),localStorage.setItem(tie,this.baseTheme);let t=document.querySelector(`html`);t&&(t.setAttribute(`theme`,e),e===`light`?t.classList.remove(`sl-theme-dark`):t.classList.add(`sl-theme-dark`))}dispatchThemeChange(){window.dispatchEvent(new CustomEvent(xr,{detail:{theme:this.activeTheme}}))}toggleTheme(){this.baseTheme=this.baseTheme===`dark`?`light`:`dark`,this.tektronixActive&&=!1,this.applyTheme(),this.dispatchThemeChange()}toggleTektronix(){this.tektronixActive=!this.tektronixActive,this.applyTheme(),this.dispatchThemeChange()}render(){let e=this.baseTheme===`dark`?`sun`:`moon`,t=this.baseTheme===`dark`?`Switch to Roger Mode (light)`:`Switch to PB33F Mode (dark)`,n=this.tektronixActive?`Disable Tektronix 4010 Mode`:`Enable Tektronix 4010 Mode`;return M` - `}};mr.styles=[aie,fr],oie([qt()],mr.prototype,`baseTheme`,void 0),oie([qt()],mr.prototype,`tektronixActive`,void 0),mr=oie([Gt(`pb33f-theme-switcher`)],mr);var uie=nt` + `}};Sr.styles=[Zre,br],Qre([Jt()],Sr.prototype,`baseTheme`,void 0),Qre([Jt()],Sr.prototype,`tektronixActive`,void 0),Sr=Qre([Kt(`pb33f-theme-switcher`)],Sr);var nie=nt` a, a:visited, a:active { text-decoration: none; @@ -2638,7 +2638,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value } } -`,die=nt` +`,rie=nt` code { font-size: 0.7rem; vertical-align: top; @@ -2957,7 +2957,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value padding-left: 20px; margin-bottom: 10px; } -`,fie=nt` +`,iie=nt` em, i { font-style: normal; @@ -2970,10 +2970,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value } -`,hr;(function(e){e.VERSION=`version`,e.SCHEMA=`schema`,e.SCHEMAS=`schemas`,e.SCHEMA_TYPES=`types`,e.MEDIA_TYPE=`mediaType`,e.HEADER=`header`,e.EXAMPLE=`example`,e.EXAMPLES=`examples`,e.ENCODING=`encoding`,e.REQUEST_BODY=`requestBody`,e.REQUEST_BODIES=`requestBodies`,e.PARAMETER=`parameter`,e.PARAMETER_QUERY=`query`,e.COOKIE=`cookie`,e.PARAMETERS=`parameters`,e.LINK=`link`,e.LINKS=`links`,e.RESPONSE=`response`,e.RESPONSES=`responses`,e.OPERATION=`operation`,e.OPERATIONS=`operations`,e.SECURITY_SCHEME=`securityScheme`,e.SECURITY_SCHEMES=`securitySchemes`,e.EXTERNAL_DOCS=`externalDocs`,e.SECURITY=`security`,e.CALLBACK=`callback`,e.CALLBACKS=`callbacks`,e.PATH_ITEM=`pathItem`,e.PATH_ITEMS=`pathItems`,e.XML=`xml`,e.HEADERS=`headers`,e.SERVER=`server`,e.SERVERS=`servers`,e.SERVER_VARIABLE=`serverVariable`,e.PATHS=`paths`,e.COMPONENTS=`components`,e.CONTACT=`contact`,e.LICENSE=`license`,e.INFO=`info`,e.TAG=`tag`,e.TAGS=`tags`,e.DOCUMENT=`document`,e.WEBHOOK=`webhook`,e.WEBHOOKS=`webhooks`,e.EXTENSIONS=`extensions`,e.EXTENSION=`extension`,e.NO_EXAMPLE=`noExample`,e.POLYMORPHIC=`polymorphic`,e.ERROR=`error`,e.WARNING=`warning`,e.ROLODEX_FILE=`rolodex-file`,e.ROLODEX_FOLDER=`rolodex-dir`,e.OPENAPI=`openapi`,e.UPLOAD=`upload`,e.ADD=`add`,e.UNKNOWN=`unknown`,e.EXPAND_NODE=`expand-node`,e.POV_MODE=`pov-mode`,e.JS=`js`,e.GO=`go`,e.TS=`ts`,e.CS=`cs`,e.C=`c`,e.CPP=`cpp`,e.PHP=`php`,e.PY=`py`,e.HTML=`html`,e.MD=`md`,e.JAVA=`java`,e.RS=`rs`,e.ZIG=`zig`,e.RB=`rb`,e.YAML=`yaml`,e.JSON=`json`})(hr||={});var gr=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},pie,_r;(function(e){e.tiny=`tiny`,e.small=`small`,e.smaller=`smaller`,e.medium=`medium`,e.large=`large`,e.huge=`huge`})(_r||={});var vr;(function(e){e.primary=`primary`,e.secondary=`secondary`,e.inverse=`inverse`,e.font=`font`,e.warning=`warning`,e.polymorphic=`polymorphic`,e.error=`error`,e.filtered=`filtered`})(vr||={});var yr=pie=class extends zt{getSize(){switch(this.size){case _r.tiny:return`0.8rem`;case _r.smaller:return`1.2rem`;case _r.medium:return`1.4rem`;case _r.large:return`1.8rem`;case _r.huge:return`2rem`;default:return`1rem`}}getIconColor(){switch(this.color){case vr.primary:return`var(--primary-color)`;case vr.secondary:return`var(--secondary-color)`;case vr.warning:return`var(--warn-color)`;case vr.polymorphic:return`var(--warn-color)`;case vr.error:return`var(--error-color)`;case vr.inverse:return`var(--background-color)`;case vr.filtered:return`var(--font-color-sub2)`;case vr.font:default:return`var(--font-color)`}}constructor(){super(),this._themeHandler=()=>this.requestUpdate(),this.size=_r.medium,this.color=vr.primary}connectedCallback(){super.connectedCallback(),window.addEventListener(pr,this._themeHandler)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(pr,this._themeHandler)}isLightMode(){return document.documentElement.getAttribute(`theme`)===`light`}getNodeTypeFromIcon(e){return Object.values(hr).includes(e)?e:hr.SCHEMA}static getIconForType(e){switch(e){case hr.DOCUMENT:return`stars`;case hr.SCHEMA:return`box`;case hr.SCHEMA_TYPES:return`diagram-3`;case hr.MEDIA_TYPE:case hr.XML:return`code-slash`;case hr.HEADER:case hr.HEADERS:return`envelope`;case hr.EXAMPLE:case hr.EXAMPLES:return`chat-left-quote`;case hr.ENCODING:return`box-seam`;case hr.REQUEST_BODY:case hr.REQUEST_BODIES:return`box-arrow-in-right`;case hr.PARAMETER:case hr.PARAMETERS:case hr.SERVER_VARIABLE:return`braces-asterisk`;case hr.PARAMETER_QUERY:return`question-lg`;case hr.COOKIE:return`cookie`;case hr.LINK:case hr.LINKS:return`link`;case hr.RESPONSE:case hr.RESPONSES:return`box-arrow-left`;case hr.OPERATION:case hr.OPERATIONS:return`gear-wide-connected`;case hr.SECURITY_SCHEME:case hr.SECURITY_SCHEMES:case hr.SECURITY:return`shield-lock`;case hr.CALLBACK:case hr.CALLBACKS:return`telephone-outbound`;case hr.PATH_ITEM:case hr.PATH_ITEMS:return`geo`;case hr.SERVER:case hr.SERVERS:return`hdd-network`;case hr.PATHS:return`compass`;case hr.COMPONENTS:return`boxes`;case hr.CONTACT:return`person-circle`;case hr.LICENSE:return`patch-check`;case hr.UPLOAD:return`upload`;case hr.INFO:return`info-square`;case hr.TAG:return`tag`;case hr.TAGS:return`tags`;case hr.VERSION:return`award`;case hr.EXTENSIONS:case hr.EXTENSION:return`plug`;case hr.WEBHOOK:case hr.WEBHOOKS:return`arrow-clockwise`;case hr.NO_EXAMPLE:return`exclamation-circle`;case hr.POLYMORPHIC:return`diagram-3`;case hr.ERROR:return`x-square`;case hr.WARNING:return`exclamation-triangle`;case hr.ROLODEX_FOLDER:return`folder`;case hr.ROLODEX_FILE:return`journal-code`;case hr.JS:return`filetype-js`;case hr.PHP:return`filetype-php`;case hr.PY:return`filetype-py`;case hr.HTML:return`filetype-html`;case hr.MD:return`markdown`;case hr.JAVA:return`filetype-java`;case hr.EXTERNAL_DOCS:return`journals`;case hr.RB:return`filetype-rb`;case hr.EXPAND_NODE:return`node-plus`;case hr.POV_MODE:return`binoculars`;default:return`box`}}openapiIcon(){return this.isLightMode()?`PHN2ZyBpZD0icGIzM2Zfb3BlbmFwaSIgZGF0YS1uYW1lPSJwYjMzZl9vcGVuYXBpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3ODQuMzcgNzg0LjI5Ij4KICA8cGF0aCBkPSJNMjA3LjI4LDQ1MC45N0guMzFjLjA0LDEuMDIuMDcsMi4wMy4xMiwzLjAzLjA4LDEuOTUuMjIsMy44OC4zNCw1LjgzLjA1Ljg0LjA5LDEuNjcuMTYsMi41LjE2LDIuMjUuMzUsNC41LjU2LDYuNzMuMDUuNTEuMDksMS4wMi4xNCwxLjUuMjQsMi41LjUxLDQuOTkuOCw3LjQ3LjAxLjI0LjA0LjQ4LjA4LjcyLjMzLDIuNjcuNjcsNS4zNSwxLjA2LDgsMCwuMDQsMCwuMDguMDEuMSwyLjM5LDE2LjU0LDUuOTYsMzIuODgsMTAuNyw0OC45LjAzLjA3LjA1LjEzLjA3LjIuNzUsMi41NCwxLjUzLDUuMDUsMi4zMyw3LjU0LjA1LjE0LjEuMy4xNC40NHMuMDkuMjkuMTQuNDRjLjczLDIuMjYsMS41LDQuNTEsMi4yOCw2Ljc3LjIuNTYuMzksMS4xNC42LDEuNzEuNjksMS45NSwxLjQsMy45LDIuMTMsNS44Ni4zNC44OC42NywxLjc1Ljk5LDIuNjQuNjQsMS42MiwxLjI2LDMuMjMsMS45LDQuODQuNDgsMS4yMi45OCwyLjQzLDEuNDksMy42My41MiwxLjI3LDEuMDUsMi41MSwxLjU4LDMuNzguNjUsMS41NCwxLjM1LDMuMDcsMi4wMyw0LjYyLjQxLjkyLjgyLDEuODIsMS4yMywyLjczLjg0LDEuODQsMS43LDMuNjksMi41OCw1LjUyLjI5LjU5LjU2LDEuMTguODUsMS43NSwxLjAyLDIuMTIsMi4wNSw0LjIsMy4xLDYuMjguMTguMzEuMzMuNjQuNS45NSwxLjE4LDIuMywyLjM4LDQuNTksMy42Miw2Ljg2LjA1LjEuMTIuMi4xNi4zMS4yNi40Ny41NS45My44MSwxLjRsMTc2Ljc2LTEwNi40Ny42NS0uMzljLTYuOTctMTQuNy0xMS4zMS0zMC4zMy0xMi45My00Ni4yMmgwWiIgc3R5bGU9ImZpbGw6ICMzNTllZDM7Ii8+CiAgPHBhdGggZD0iTTI1OC4xNSw1NDUuOTlsLS41LjUtMTQ1Ljc5LDE0NS43N2MuNzUuNjksMS40OSwxLjQxLDIuMjYsMi4wOCwxLjM2LDEuMjQsMi43NSwyLjQ2LDQuMTIsMy42Ny43Mi42MywxLjQxLDEuMjYsMi4xMywxLjg4LDEuNjUsMS40MywzLjMyLDIuODEsNC45OCw0LjIxLjQ2LjM4Ljg5Ljc1LDEuMzUsMS4xMiwyLjEyLDEuNzQsNC4yNiwzLjQ2LDYuNDIsNS4xNSwyLjA3LDEuNjMsNC4xNCwzLjIyLDYuMjYsNC44MS4wOS4wNS4xNi4xLjI0LjE3LDguOCw2LjU3LDE3LjksMTIuNzIsMjcuMjcsMTguNDQuMzEuMjEuNjQuMzkuOTcuNiwxLjc5LDEuMDYsMy41NywyLjEyLDUuMzcsMy4xNmwzLjI5LDEuODhjMS4wNS42LDIuMDgsMS4xOCwzLjEyLDEuNzUsMS45LDEuMDMsMy43OSwyLjA3LDUuNywzLjA3LjI2LjE0LjUyLjI5LjguNDIsNS4zLDIuNzcsMTAuNjgsNS4zNSwxNi4xMiw3LjgzbDUuMTgtMTIuNTcsNzMuMzMtMTc4LjA0LjI2LS42NWMtOC00LjI5LTE1LjY4LTkuMzYtMjIuODktMTUuMjdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik0yNDIuOTcsNTMxLjQ2Yy0xLjU3LTEuNzQtMy4wOC0zLjUzLTQuNTUtNS4zNi0xLjMxLTEuNjEtMi41Ni0zLjIzLTMuNzgtNC44OC0xLjQtMS44OC0yLjc2LTMuNzktNC4wNS01LjczLTEuMjktMS45NS0yLjU4LTMuOTEtMy43OC01LjlsLTE3Ni45OCwxMDYuNmMyLjcyLDQuNTIsNS41NCw4LjkyLDguNDUsMTMuMjYuMDkuMTYuMTguMzEuMjkuNDYuMDMuMDcuMDcuMS4xLjE3LjA5LjEzLjE4LjI5LjI3LjQzLjAxLjAxLjAzLjAzLjAzLjA1LjI0LjM0LjQ3LjY4LjcxLDEuMDMuMDEuMDEuMDMuMDQuMDUuMDdzLjAxLjAxLjAxLjAzYzMuMDcsNC41NCw2LjI0LDkuMDEsOS40OSwxMy4zOC4wNy4wOS4xNC4xOC4yMS4yNy4wOC4wOS4xNC4xOC4yMS4yNywxLjQzLDEuODcsMi44NCwzLjc0LDQuMyw1LjYuMi4yNS4zOC40OC41OS43MiwxLjQ5LDEuOTIsMy4wMiwzLjgyLDQuNTgsNS42OS4zNy40NC43NS44OSwxLjExLDEuMzUsMS40LDEuNjcsMi44LDMuMzMsNC4yMiw0Ljk4LjYxLjcxLDEuMjQsMS40MywxLjg3LDIuMTIsMS4yMiwxLjM5LDIuNDIsMi43NywzLjY2LDQuMTMuNjguNzUsMS4zOSwxLjUsMi4wOCwyLjI1LjMxLjM1LjYzLjY4Ljk1LDEuMDMuOS45OCwxLjgsMS45NiwyLjcyLDIuOTMuMzcuMzguNzYuNzYsMS4xMiwxLjE1LDEuNjEsMS42NywzLjI0LDMuMzYsNC44OSw1LjAxbDE0Ni4wMS0xNDUuOThjLTEuNjctMS42Ny0zLjI0LTMuNC00Ljc5LTUuMTNoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik00MzYuNSw1NDUuOTFjLTEuNjEsMS4yOS0zLjIzLDIuNTYtNC44OCwzLjc4bC4zNS42MSwxMDYuNDYsMTc2LjY4YzQuOTMtMy4yMiw5LjgxLTYuNTQsMTQuNTctMTAuMDMsMTAuMy03LjYsMjAuMjctMTUuODMsMjkuODgtMjQuN2wtMTQ1LjgtMTQ1Ljc3LS41OC0uNThaIiBzdHlsZT0iZmlsbDogIzYyYzRmZjsiLz4KICA8cGF0aCBkPSJNNTIyLjk2LDcyOC40NGwtMy42MS02LTk5LjM3LTE2NC45MmMtMi4wMSwxLjItNC4wNywyLjMtNi4xMiwzLjQtMi4wOCwxLjEyLTQuMTYsMi4xNi02LjI4LDMuMTYtMTkuMDksOS4wNS0zOS43NSwxMy42OC02MC40NSwxMy42OC0xMy41NiwwLTI3LjEtMS45Ni00MC4yMS01Ljg3LTIuMjQtLjY3LTQuNDItMS41NC02LjYyLTIuMzMtMi4yMS0uNzctNC40NS0xLjQ1LTYuNjItMi4zNGwtNzMuMjcsMTc3LjkzLTIuODYsNi45Ny0yLjQ2LDUuOTh2LjAzYy4xNy4wOC4zNy4xNC41NS4yMi4yMS4wOC40MS4xNC42LjI0aC4wM2MuMDUuMDMuMS4wNC4xNC4wNSwxLjczLjcyLDMuNDYsMS4zMiw1LjIsMiwyLjE4Ljg1LDQuMzUsMS43MSw2LjU0LDIuNTEsMS4xMi40MSwyLjIyLjg4LDMuMzMsMS4yN2guMDFjMjIuOTYsOC4xLDQ2LjcxLDEzLjc5LDcwLjg1LDE2Ljk2Ljk1LjEyLDEuODguMjUsMi44NC4zOC45OC4xMiwxLjk3LjIxLDIuOTcuMzMsMS44Ni4yMSwzLjcxLjQyLDUuNTguNmwxLjM5LjEyYzIuMjkuMjIsNC41OC40Miw2Ljg1LjU4Ljc4LjA3LDEuNTcuMDksMi4zNC4xNiwyLC4xMyw0LC4yNSw2LC4zNCwxLjIzLjA4LDIuNDYuMSwzLjY5LjE2LDEuNi4wNSwzLjE4LjEyLDQuNzcuMTcsMi4yOS4wNSw0LjYuMDcsNi45LjA4LjU1LDAsMS4wOS4wMSwxLjYzLjAzLDE5LjI5LDAsMzguNTctMS42MSw1Ny42NS00LjgxLjMxLS4wNS42NC0uMS45Ny0uMTQsMi4wMS0uMzUsNC4wMy0uNzMsNi4wNC0xLjEsMS4xNS0uMjIsMi4zMS0uNDQsMy40NC0uNjcsMS4xOC0uMjUsMi4zNy0uNDgsMy41NC0uNzUsMS45Ni0uNDEsMy45Mi0uODQsNS45LTEuMjkuMzUtLjA4LjcxLS4xNCwxLjA2LS4yNSwyOS02Ljc1LDU3LjAxLTE3LjIxLDgzLjMxLTMxLjA1aDBjMS43My0uOTIsMy40MS0xLjk1LDUuMTMtMi44OSwyLjA0LTEuMTEsNC4wNy0yLjI4LDYuMTEtMy40NCwxLjQtLjgsMi44Mi0xLjU0LDQuMjItMi4zOC4wMS0uMDEuMDMtLjAzLjA0LS4wM2guMDFzLjA0LS4wMy4wNy0uMDRsLjAzLS4wMy0uMjYtLjQzLjI2LjQzcy4wMy0uMDEuMDQtLjAxYy4wMy0uMDEuMDQtLjAzLjA3LS4wNC4wOC0uMDUuMTYtLjA5LjI0LS4xNC40NC0uMjcuOS0uNTQsMS4zNi0uODFsLTMuNTgtNS45OVpNMjU4LjIzLDMyOC4wNWMxLjYxLTEuMzEsMy4yNC0yLjU2LDQuODgtMy43OWwtLjM1LS42LTEwNi40Ni0xNzYuN2MtNC45NCwzLjIzLTkuODIsNi41Ni0xNC41OSwxMC4wNS0xMC4yOSw3LjU4LTIwLjI3LDE1LjgxLTI5Ljg1LDI0LjY2bDE0NS44LDE0NS43OS41OC41OVoiIHN0eWxlPSJmaWxsOiAjMzU5ZWQzOyIvPgogIDxwYXRoIGQ9Ik0xMDEuNzUsMTkxLjM5Yy0xLjY2LDEuNjYtMy4yMywzLjM3LTQuODUsNS4wNS0xLjYxLDEuNjktMy4yNiwzLjM2LTQuODQsNS4wNi0xMC42NCwxMS41MS0yMC41LDIzLjcyLTI5LjUsMzYuNTYtLjQzLjU5LS44NSwxLjIyLTEuMjgsMS44Mi0uOTksMS40Ni0xLjk5LDIuOTItMi45NSw0LjM4LTEuMDIsMS41Mi0yLjAzLDMuMDYtMy4wMSw0LjU5LS4zNy41Ni0uNzMsMS4xNC0xLjA5LDEuN0MyMC43LDMwMy4xNCwyLjczLDM2Mi44LjMxLDQyMi45NmMtLjA5LDIuMzQtLjE0LDQuNjgtLjIsNy4wMS0uMDQsMi4zMy0uMTIsNC42Ny0uMTIsN2gyMDYuNDljMC0yLjMzLjIxLTQuNjUuMzQtNywuMTItMi4zNC4xNC00LjY4LjM4LTcuMDEsMi42Ny0yNi44OCwxMy4wNS01My4xNCwzMS4xNC03NS4xOCwxLjQ2LTEuNzksMy4xMi0zLjQ4LDQuNzEtNS4yLDEuNTYtMS43NCwzLjAyLTMuNTMsNC42OS01LjJMMTAxLjc1LDE5MS4zOVpNNTI3LjgsMTQwLjE0Yy0uMjctLjE3LS41OC0uMzQtLjg1LS41MS0xLjgyLTEuMTEtMy42NS0yLjE4LTUuNDktMy4yNi0xLjA2LS42MS0yLjEzLTEuMjItMy4xOS0xLjgyLTEuMDktLjYtMi4xNC0xLjItMy4yMy0xLjc5LTEuODctMS4wMi0zLjc0LTIuMDMtNS42MS0zLjAzLS4zLS4xNC0uNTktLjMtLjg5LS40Ni0xMi4xMS02LjMzLTI0LjU0LTExLjktMzcuMjQtMTYuNzQtLjMzLS4xMy0uNjUtLjI2LS45OC0uMzgtMi43Ny0xLjAzLTUuNTQtMi4wNy04LjM0LTMuMDMtMjIuNTYtNy44Ny00NS44OC0xMy40LTY5LjU3LTE2LjUxbC0yLjktLjM5Yy0uOTgtLjEyLTEuOTUtLjIxLTIuOTItLjMxLTEuODctLjIyLTMuNzMtLjQzLTUuNjEtLjYxLS41MS0uMDUtMS4wMy0uMDgtMS41Ny0uMTQtMi4yMS0uMi00LjQ1LS4zOS02LjY3LS41NmwtMi42LS4xNmMtMS45LS4xMi0zLjgzLS4yNi01LjczLS4zNC0xLjAyLS4wNS0yLjA0LS4wOS0zLjA1LS4xMnYyMDYuOTdjMTAuNjIsMS4xLDIxLjE0LDMuMzYsMzEuMzUsNi44M2wxNTIuMzQtMTUyLjMxYy01LjY2LTMuOTItMTEuMzgtNy43NC0xNy4yNi0xMS4zMWgwWiIgc3R5bGU9ImZpbGw6ICM2MmM0ZmY7Ii8+CiAgPHBhdGggZD0iTTM0MC4zNyw4OS44Yy0yLjM0LjA1LTQuNjguMDUtNy4wMS4xNC0xNC42LjU5LTI5LjE4LDIuMDgtNDMuNjQsNC41MS0uMzEuMDUtLjYzLjEtLjk1LjE2LTIuMDMuMzUtNC4wNC43Mi02LjA1LDEuMS0xLjE0LjIyLTIuMjkuNDMtMy40NC42NS0xLjE5LjI0LTIuMzcuNDgtMy41Ni43NS0xLjk2LjQxLTMuOTIuODQtNS44NywxLjI5LS4zNy4wNy0uNzIuMTYtMS4wNy4yNC0yOC45OCw2Ljc3LTU2Ljk5LDE3LjIxLTgzLjMzLDMxLjA3LTEuNzEuOTItMy4zOSwxLjk1LTUuMSwyLjg4LTIuMDQsMS4xMi00LjA4LDIuMjgtNi4xMSwzLjQ0LTEuNS44OC0zLjAzLDEuNjctNC41NCwyLjU2LS4wMS4wMS0uMDQuMDMtLjA1LjAzLS4xLjA3LS4yMS4xMy0uMzEuMTgtLjM5LjI1LS44LjQ0LTEuMTkuNjh2LjAzczMuNjMsNiwzLjYzLDZsMTAyLjk3LDE3MC45M2MyLjAxLTEuMiw0LjA3LTIuMzEsNi4xMi0zLjQxLDIuMDctMS4xMSw0LjE2LTIuMTYsNi4yNi0zLjE1LDE0LjU1LTYuOTUsMzAuMTktMTEuMzMsNDYuMjMtMTIuOTYsMi4zMy0uMjQsNC42NS0uNDMsNy0uNTUsMi4zMy0uMTIsNC42Ny0uMjQsNy4wMS0uMjRWODkuNjVjLTIuMzQsMC00LjY3LjEtNywuMTRoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik02OTQuMyw0MTkuOWMtLjEtMS44Ni0uMjEtMy43LS4zNC01LjU3LS4wNS0uOTItLjExLTEuODUtLjE4LTIuNzctLjE0LTIuMTgtLjMzLTQuMzctLjU0LTYuNTUtLjA0LS41Ni0uMDktMS4xMi0uMTQtMS42OS0uMjQtMi40NS0uNS00Ljg4LS43OC03LjMxLS4wMy0uMi0uMDQtLjM5LS4wNy0uNTlsLS4wNC0uMjdjLS4zMS0yLjYzLS42Ny01LjI2LTEuMDMtNy44N2wtLjA0LS4yNWMtMi4zOC0xNi41LTUuOTUtMzIuODItMTAuNjctNDguODEtLjA0LS4xMi0uMDctLjIxLS4xLS4zMS0uNzUtMi41LTEuNTItNC45Ny0yLjI5LTcuNDQtLjEyLS4zMy0uMjItLjY1LS4zMy0uOTgtLjczLTIuMjQtMS40OC00LjQ2LTIuMjUtNi42OGwtLjYzLTEuOGMtLjY4LTEuOTItMS4zOS0zLjg0LTIuMDktNS43Ny0uMzUtLjkyLS42OS0xLjgzLTEuMDYtMi43My0uNi0xLjYtMS4yMi0zLjE4LTEuODYtNC43NS0uNS0xLjI3LTEuMDEtMi41MS0xLjUyLTMuNzQtLjUxLTEuMjQtMS4wMy0yLjQ2LTEuNTQtMy42OS0uNjgtMS41Ny0xLjM3LTMuMTQtMi4wNy00LjY5LS4zOS0uODgtLjc4LTEuNzctMS4xOS0yLjY1LS44NS0xLjg2LTEuNzMtMy43My0yLjYtNS41OC0uMjctLjU1LS41NS0xLjEyLS44Mi0xLjY5LTEuMDItMi4xMi0yLjA3LTQuMjUtMy4xNC02LjM0LS4xNC0uMjktLjMtLjU5LS40NC0uODgtMS4xOS0yLjMxLTIuNDItNC42NC0zLjY1LTYuOTMtLjA1LS4wOC0uMDktLjE3LS4xNC0uMjUtNi0xMS4wMy0xMi42LTIxLjc0LTE5Ljc2LTMyLjA2bC0xNTIuMzgsMTUyLjM4YzMuNDYsMTAuMjEsNS43MSwyMC43NCw2LjgxLDMxLjM0aDIwN2MtLjA1LTEuMDMtLjA4LTIuMDctLjEzLTMuMDdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik00ODguMjQsNDM2Ljk3YzAsMi4zNC0uMjIsNC42Ny0uMzQsNy4wMXMtLjE2LDQuNjgtLjM5LDdjLTIuNjcsMjYuOS0xMy4wNCw1My4xNS0zMS4xMyw3NS4yMS0xLjQ2LDEuNzktMy4xMiwzLjQ2LTQuNzEsNS4yLTEuNTcsMS43My0zLjAyLDMuNTItNC42OSw1LjE5bDE0Ni4wMSwxNDUuOThjMS42Ni0xLjY2LDMuMjItMy4zNyw0Ljg0LTUuMDZzMy4yNy0zLjM1LDQuODQtNS4wNmMxMC44LTExLjcsMjAuNjgtMjMuOTQsMjkuNTgtMzYuNjYuMzctLjUxLjY5LTEuMDEsMS4wNS0xLjUsMS4wOS0xLjU2LDIuMTMtMy4xNCwzLjItNC43MS45My0xLjQxLDEuODYtMi44MSwyLjc2LTQuMjQuNDYtLjY4LjktMS4zOSwxLjMzLTIuMDcsMzMuNDktNTIuNTcsNTEuNDEtMTEyLjE3LDUzLjgyLTE3Mi4yOS4wOS0yLjMzLjE0LTQuNjcuMTgtNy4wMS4wNS0yLjMzLjEyLTQuNjUuMTItN2gtMjA2LjQ2WiIgc3R5bGU9ImZpbGw6ICNmNmY7Ii8+CiAgPHBhdGggZD0iTTc1Ni4wNCwyOC4zM2MtMzcuNzctMzcuNzctOTkuMDItMzcuNzctMTM2Ljc5LDAtMzAuMTQsMzAuMTItMzYuMTcsNzUuMTctMTguMjEsMTExLjMzbC0yMTAuNzIsMjEwLjdjLTM2LjE3LTE3Ljk0LTgxLjIyLTExLjkyLTExMS4zNiwxOC4yLTM3Ljc3LDM3Ljc3LTM3Ljc2LDk5LjAyLDAsMTM2Ljc5LDM3Ljc5LDM3Ljc3LDk5LjA0LDM3Ljc2LDEzNi44MiwwLDMwLjE0LTMwLjE0LDM2LjE1LTc1LjE4LDE4LjItMTExLjM1bDIxMC43Mi0yMTAuNjljMzYuMTgsMTcuOTQsODEuMjEsMTEuOTIsMTExLjM1LTE4LjIxLDM3Ljc3LTM3Ljc2LDM3Ljc3LTk5LDAtMTM2Ljc4aDBaIiBzdHlsZT0iZmlsbDogIzAwMDsiLz4KPC9zdmc+`:`PHN2ZyBpZD0icGIzM2Zfb3BlbmFwaSIgZGF0YS1uYW1lPSJwYjMzZl9vcGVuYXBpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3ODQuMzcgNzg0LjI5Ij4KICA8cGF0aCBkPSJNMjA3LjI4LDQ1MC45N0guMzFjLjA0LDEuMDIuMDcsMi4wMy4xMiwzLjAzLjA4LDEuOTUuMjIsMy44OC4zNCw1LjgzLjA1Ljg0LjA5LDEuNjcuMTYsMi41LjE2LDIuMjUuMzUsNC41LjU2LDYuNzMuMDUuNTEuMDksMS4wMi4xNCwxLjUuMjQsMi41LjUxLDQuOTkuOCw3LjQ3LjAxLjI0LjA0LjQ4LjA4LjcyLjMzLDIuNjcuNjcsNS4zNSwxLjA2LDgsMCwuMDQsMCwuMDguMDEuMSwyLjM5LDE2LjU0LDUuOTYsMzIuODgsMTAuNyw0OC45LjAzLjA3LjA1LjEzLjA3LjIuNzUsMi41NCwxLjUzLDUuMDUsMi4zMyw3LjU0LjA1LjE0LjEuMy4xNC40NHMuMDkuMjkuMTQuNDRjLjczLDIuMjYsMS41LDQuNTEsMi4yOCw2Ljc3LjIuNTYuMzksMS4xNC42LDEuNzEuNjksMS45NSwxLjQsMy45LDIuMTMsNS44Ni4zNC44OC42NywxLjc1Ljk5LDIuNjQuNjQsMS42MiwxLjI2LDMuMjMsMS45LDQuODQuNDgsMS4yMi45OCwyLjQzLDEuNDksMy42My41MiwxLjI3LDEuMDUsMi41MSwxLjU4LDMuNzguNjUsMS41NCwxLjM1LDMuMDcsMi4wMyw0LjYyLjQxLjkyLjgyLDEuODIsMS4yMywyLjczLjg0LDEuODQsMS43LDMuNjksMi41OCw1LjUyLjI5LjU5LjU2LDEuMTguODUsMS43NSwxLjAyLDIuMTIsMi4wNSw0LjIsMy4xLDYuMjguMTguMzEuMzMuNjQuNS45NSwxLjE4LDIuMywyLjM4LDQuNTksMy42Miw2Ljg2LjA1LjEuMTIuMi4xNi4zMS4yNi40Ny41NS45My44MSwxLjRsMTc2Ljc2LTEwNi40Ny42NS0uMzljLTYuOTctMTQuNy0xMS4zMS0zMC4zMy0xMi45My00Ni4yMmgwWiIgc3R5bGU9ImZpbGw6ICMzNTllZDM7Ii8+CiAgPHBhdGggZD0iTTI1OC4xNSw1NDUuOTlsLS41LjUtMTQ1Ljc5LDE0NS43N2MuNzUuNjksMS40OSwxLjQxLDIuMjYsMi4wOCwxLjM2LDEuMjQsMi43NSwyLjQ2LDQuMTIsMy42Ny43Mi42MywxLjQxLDEuMjYsMi4xMywxLjg4LDEuNjUsMS40MywzLjMyLDIuODEsNC45OCw0LjIxLjQ2LjM4Ljg5Ljc1LDEuMzUsMS4xMiwyLjEyLDEuNzQsNC4yNiwzLjQ2LDYuNDIsNS4xNSwyLjA3LDEuNjMsNC4xNCwzLjIyLDYuMjYsNC44MS4wOS4wNS4xNi4xLjI0LjE3LDguOCw2LjU3LDE3LjksMTIuNzIsMjcuMjcsMTguNDQuMzEuMjEuNjQuMzkuOTcuNiwxLjc5LDEuMDYsMy41NywyLjEyLDUuMzcsMy4xNmwzLjI5LDEuODhjMS4wNS42LDIuMDgsMS4xOCwzLjEyLDEuNzUsMS45LDEuMDMsMy43OSwyLjA3LDUuNywzLjA3LjI2LjE0LjUyLjI5LjguNDIsNS4zLDIuNzcsMTAuNjgsNS4zNSwxNi4xMiw3LjgzbDUuMTgtMTIuNTcsNzMuMzMtMTc4LjA0LjI2LS42NWMtOC00LjI5LTE1LjY4LTkuMzYtMjIuODktMTUuMjdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik0yNDIuOTcsNTMxLjQ2Yy0xLjU3LTEuNzQtMy4wOC0zLjUzLTQuNTUtNS4zNi0xLjMxLTEuNjEtMi41Ni0zLjIzLTMuNzgtNC44OC0xLjQtMS44OC0yLjc2LTMuNzktNC4wNS01LjczLTEuMjktMS45NS0yLjU4LTMuOTEtMy43OC01LjlsLTE3Ni45OCwxMDYuNmMyLjcyLDQuNTIsNS41NCw4LjkyLDguNDUsMTMuMjYuMDkuMTYuMTguMzEuMjkuNDYuMDMuMDcuMDcuMS4xLjE3LjA5LjEzLjE4LjI5LjI3LjQzLjAxLjAxLjAzLjAzLjAzLjA1LjI0LjM0LjQ3LjY4LjcxLDEuMDMuMDEuMDEuMDMuMDQuMDUuMDdzLjAxLjAxLjAxLjAzYzMuMDcsNC41NCw2LjI0LDkuMDEsOS40OSwxMy4zOC4wNy4wOS4xNC4xOC4yMS4yNy4wOC4wOS4xNC4xOC4yMS4yNywxLjQzLDEuODcsMi44NCwzLjc0LDQuMyw1LjYuMi4yNS4zOC40OC41OS43MiwxLjQ5LDEuOTIsMy4wMiwzLjgyLDQuNTgsNS42OS4zNy40NC43NS44OSwxLjExLDEuMzUsMS40LDEuNjcsMi44LDMuMzMsNC4yMiw0Ljk4LjYxLjcxLDEuMjQsMS40MywxLjg3LDIuMTIsMS4yMiwxLjM5LDIuNDIsMi43NywzLjY2LDQuMTMuNjguNzUsMS4zOSwxLjUsMi4wOCwyLjI1LjMxLjM1LjYzLjY4Ljk1LDEuMDMuOS45OCwxLjgsMS45NiwyLjcyLDIuOTMuMzcuMzguNzYuNzYsMS4xMiwxLjE1LDEuNjEsMS42NywzLjI0LDMuMzYsNC44OSw1LjAxbDE0Ni4wMS0xNDUuOThjLTEuNjctMS42Ny0zLjI0LTMuNC00Ljc5LTUuMTNoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik00MzYuNSw1NDUuOTFjLTEuNjEsMS4yOS0zLjIzLDIuNTYtNC44OCwzLjc4bC4zNS42MSwxMDYuNDYsMTc2LjY4YzQuOTMtMy4yMiw5LjgxLTYuNTQsMTQuNTctMTAuMDMsMTAuMy03LjYsMjAuMjctMTUuODMsMjkuODgtMjQuN2wtMTQ1LjgtMTQ1Ljc3LS41OC0uNThaIiBzdHlsZT0iZmlsbDogIzYyYzRmZjsiLz4KICA8cGF0aCBkPSJNNTIyLjk2LDcyOC40NGwtMy42MS02LTk5LjM3LTE2NC45MmMtMi4wMSwxLjItNC4wNywyLjMtNi4xMiwzLjQtMi4wOCwxLjEyLTQuMTYsMi4xNi02LjI4LDMuMTYtMTkuMDksOS4wNS0zOS43NSwxMy42OC02MC40NSwxMy42OC0xMy41NiwwLTI3LjEtMS45Ni00MC4yMS01Ljg3LTIuMjQtLjY3LTQuNDItMS41NC02LjYyLTIuMzMtMi4yMS0uNzctNC40NS0xLjQ1LTYuNjItMi4zNGwtNzMuMjcsMTc3LjkzLTIuODYsNi45Ny0yLjQ2LDUuOTh2LjAzYy4xNy4wOC4zNy4xNC41NS4yMi4yMS4wOC40MS4xNC42LjI0aC4wM2MuMDUuMDMuMS4wNC4xNC4wNSwxLjczLjcyLDMuNDYsMS4zMiw1LjIsMiwyLjE4Ljg1LDQuMzUsMS43MSw2LjU0LDIuNTEsMS4xMi40MSwyLjIyLjg4LDMuMzMsMS4yN2guMDFjMjIuOTYsOC4xLDQ2LjcxLDEzLjc5LDcwLjg1LDE2Ljk2Ljk1LjEyLDEuODguMjUsMi44NC4zOC45OC4xMiwxLjk3LjIxLDIuOTcuMzMsMS44Ni4yMSwzLjcxLjQyLDUuNTguNmwxLjM5LjEyYzIuMjkuMjIsNC41OC40Miw2Ljg1LjU4Ljc4LjA3LDEuNTcuMDksMi4zNC4xNiwyLC4xMyw0LC4yNSw2LC4zNCwxLjIzLjA4LDIuNDYuMSwzLjY5LjE2LDEuNi4wNSwzLjE4LjEyLDQuNzcuMTcsMi4yOS4wNSw0LjYuMDcsNi45LjA4LjU1LDAsMS4wOS4wMSwxLjYzLjAzLDE5LjI5LDAsMzguNTctMS42MSw1Ny42NS00LjgxLjMxLS4wNS42NC0uMS45Ny0uMTQsMi4wMS0uMzUsNC4wMy0uNzMsNi4wNC0xLjEsMS4xNS0uMjIsMi4zMS0uNDQsMy40NC0uNjcsMS4xOC0uMjUsMi4zNy0uNDgsMy41NC0uNzUsMS45Ni0uNDEsMy45Mi0uODQsNS45LTEuMjkuMzUtLjA4LjcxLS4xNCwxLjA2LS4yNSwyOS02Ljc1LDU3LjAxLTE3LjIxLDgzLjMxLTMxLjA1aDBjMS43My0uOTIsMy40MS0xLjk1LDUuMTMtMi44OSwyLjA0LTEuMTEsNC4wNy0yLjI4LDYuMTEtMy40NCwxLjQtLjgsMi44Mi0xLjU0LDQuMjItMi4zOC4wMS0uMDEuMDMtLjAzLjA0LS4wM2guMDFzLjA0LS4wMy4wNy0uMDRsLjAzLS4wMy0uMjYtLjQzLjI2LjQzcy4wMy0uMDEuMDQtLjAxYy4wMy0uMDEuMDQtLjAzLjA3LS4wNC4wOC0uMDUuMTYtLjA5LjI0LS4xNC40NC0uMjcuOS0uNTQsMS4zNi0uODFsLTMuNTgtNS45OVpNMjU4LjIzLDMyOC4wNWMxLjYxLTEuMzEsMy4yNC0yLjU2LDQuODgtMy43OWwtLjM1LS42LTEwNi40Ni0xNzYuN2MtNC45NCwzLjIzLTkuODIsNi41Ni0xNC41OSwxMC4wNS0xMC4yOSw3LjU4LTIwLjI3LDE1LjgxLTI5Ljg1LDI0LjY2bDE0NS44LDE0NS43OS41OC41OVoiIHN0eWxlPSJmaWxsOiAjMzU5ZWQzOyIvPgogIDxwYXRoIGQ9Ik0xMDEuNzUsMTkxLjM5Yy0xLjY2LDEuNjYtMy4yMywzLjM3LTQuODUsNS4wNS0xLjYxLDEuNjktMy4yNiwzLjM2LTQuODQsNS4wNi0xMC42NCwxMS41MS0yMC41LDIzLjcyLTI5LjUsMzYuNTYtLjQzLjU5LS44NSwxLjIyLTEuMjgsMS44Mi0uOTksMS40Ni0xLjk5LDIuOTItMi45NSw0LjM4LTEuMDIsMS41Mi0yLjAzLDMuMDYtMy4wMSw0LjU5LS4zNy41Ni0uNzMsMS4xNC0xLjA5LDEuN0MyMC43LDMwMy4xNCwyLjczLDM2Mi44LjMxLDQyMi45NmMtLjA5LDIuMzQtLjE0LDQuNjgtLjIsNy4wMS0uMDQsMi4zMy0uMTIsNC42Ny0uMTIsN2gyMDYuNDljMC0yLjMzLjIxLTQuNjUuMzQtNywuMTItMi4zNC4xNC00LjY4LjM4LTcuMDEsMi42Ny0yNi44OCwxMy4wNS01My4xNCwzMS4xNC03NS4xOCwxLjQ2LTEuNzksMy4xMi0zLjQ4LDQuNzEtNS4yLDEuNTYtMS43NCwzLjAyLTMuNTMsNC42OS01LjJMMTAxLjc1LDE5MS4zOVpNNTI3LjgsMTQwLjE0Yy0uMjctLjE3LS41OC0uMzQtLjg1LS41MS0xLjgyLTEuMTEtMy42NS0yLjE4LTUuNDktMy4yNi0xLjA2LS42MS0yLjEzLTEuMjItMy4xOS0xLjgyLTEuMDktLjYtMi4xNC0xLjItMy4yMy0xLjc5LTEuODctMS4wMi0zLjc0LTIuMDMtNS42MS0zLjAzLS4zLS4xNC0uNTktLjMtLjg5LS40Ni0xMi4xMS02LjMzLTI0LjU0LTExLjktMzcuMjQtMTYuNzQtLjMzLS4xMy0uNjUtLjI2LS45OC0uMzgtMi43Ny0xLjAzLTUuNTQtMi4wNy04LjM0LTMuMDMtMjIuNTYtNy44Ny00NS44OC0xMy40LTY5LjU3LTE2LjUxbC0yLjktLjM5Yy0uOTgtLjEyLTEuOTUtLjIxLTIuOTItLjMxLTEuODctLjIyLTMuNzMtLjQzLTUuNjEtLjYxLS41MS0uMDUtMS4wMy0uMDgtMS41Ny0uMTQtMi4yMS0uMi00LjQ1LS4zOS02LjY3LS41NmwtMi42LS4xNmMtMS45LS4xMi0zLjgzLS4yNi01LjczLS4zNC0xLjAyLS4wNS0yLjA0LS4wOS0zLjA1LS4xMnYyMDYuOTdjMTAuNjIsMS4xLDIxLjE0LDMuMzYsMzEuMzUsNi44M2wxNTIuMzQtMTUyLjMxYy01LjY2LTMuOTItMTEuMzgtNy43NC0xNy4yNi0xMS4zMWgwWiIgc3R5bGU9ImZpbGw6ICM2MmM0ZmY7Ii8+CiAgPHBhdGggZD0iTTM0MC4zNyw4OS44Yy0yLjM0LjA1LTQuNjguMDUtNy4wMS4xNC0xNC42LjU5LTI5LjE4LDIuMDgtNDMuNjQsNC41MS0uMzEuMDUtLjYzLjEtLjk1LjE2LTIuMDMuMzUtNC4wNC43Mi02LjA1LDEuMS0xLjE0LjIyLTIuMjkuNDMtMy40NC42NS0xLjE5LjI0LTIuMzcuNDgtMy41Ni43NS0xLjk2LjQxLTMuOTIuODQtNS44NywxLjI5LS4zNy4wNy0uNzIuMTYtMS4wNy4yNC0yOC45OCw2Ljc3LTU2Ljk5LDE3LjIxLTgzLjMzLDMxLjA3LTEuNzEuOTItMy4zOSwxLjk1LTUuMSwyLjg4LTIuMDQsMS4xMi00LjA4LDIuMjgtNi4xMSwzLjQ0LTEuNS44OC0zLjAzLDEuNjctNC41NCwyLjU2LS4wMS4wMS0uMDQuMDMtLjA1LjAzLS4xLjA3LS4yMS4xMy0uMzEuMTgtLjM5LjI1LS44LjQ0LTEuMTkuNjh2LjAzczMuNjMsNiwzLjYzLDZsMTAyLjk3LDE3MC45M2MyLjAxLTEuMiw0LjA3LTIuMzEsNi4xMi0zLjQxLDIuMDctMS4xMSw0LjE2LTIuMTYsNi4yNi0zLjE1LDE0LjU1LTYuOTUsMzAuMTktMTEuMzMsNDYuMjMtMTIuOTYsMi4zMy0uMjQsNC42NS0uNDMsNy0uNTUsMi4zMy0uMTIsNC42Ny0uMjQsNy4wMS0uMjRWODkuNjVjLTIuMzQsMC00LjY3LjEtNywuMTRoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik02OTQuMyw0MTkuOWMtLjEtMS44Ni0uMjEtMy43LS4zNC01LjU3LS4wNS0uOTItLjExLTEuODUtLjE4LTIuNzctLjE0LTIuMTgtLjMzLTQuMzctLjU0LTYuNTUtLjA0LS41Ni0uMDktMS4xMi0uMTQtMS42OS0uMjQtMi40NS0uNS00Ljg4LS43OC03LjMxLS4wMy0uMi0uMDQtLjM5LS4wNy0uNTlsLS4wNC0uMjdjLS4zMS0yLjYzLS42Ny01LjI2LTEuMDMtNy44N2wtLjA0LS4yNWMtMi4zOC0xNi41LTUuOTUtMzIuODItMTAuNjctNDguODEtLjA0LS4xMi0uMDctLjIxLS4xLS4zMS0uNzUtMi41LTEuNTItNC45Ny0yLjI5LTcuNDQtLjEyLS4zMy0uMjItLjY1LS4zMy0uOTgtLjczLTIuMjQtMS40OC00LjQ2LTIuMjUtNi42OGwtLjYzLTEuOGMtLjY4LTEuOTItMS4zOS0zLjg0LTIuMDktNS43Ny0uMzUtLjkyLS42OS0xLjgzLTEuMDYtMi43My0uNi0xLjYtMS4yMi0zLjE4LTEuODYtNC43NS0uNS0xLjI3LTEuMDEtMi41MS0xLjUyLTMuNzQtLjUxLTEuMjQtMS4wMy0yLjQ2LTEuNTQtMy42OS0uNjgtMS41Ny0xLjM3LTMuMTQtMi4wNy00LjY5LS4zOS0uODgtLjc4LTEuNzctMS4xOS0yLjY1LS44NS0xLjg2LTEuNzMtMy43My0yLjYtNS41OC0uMjctLjU1LS41NS0xLjEyLS44Mi0xLjY5LTEuMDItMi4xMi0yLjA3LTQuMjUtMy4xNC02LjM0LS4xNC0uMjktLjMtLjU5LS40NC0uODgtMS4xOS0yLjMxLTIuNDItNC42NC0zLjY1LTYuOTMtLjA1LS4wOC0uMDktLjE3LS4xNC0uMjUtNi0xMS4wMy0xMi42LTIxLjc0LTE5Ljc2LTMyLjA2bC0xNTIuMzgsMTUyLjM4YzMuNDYsMTAuMjEsNS43MSwyMC43NCw2LjgxLDMxLjM0aDIwN2MtLjA1LTEuMDMtLjA4LTIuMDctLjEzLTMuMDdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik00ODguMjQsNDM2Ljk3YzAsMi4zNC0uMjIsNC42Ny0uMzQsNy4wMXMtLjE2LDQuNjgtLjM5LDdjLTIuNjcsMjYuOS0xMy4wNCw1My4xNS0zMS4xMyw3NS4yMS0xLjQ2LDEuNzktMy4xMiwzLjQ2LTQuNzEsNS4yLTEuNTcsMS43My0zLjAyLDMuNTItNC42OSw1LjE5bDE0Ni4wMSwxNDUuOThjMS42Ni0xLjY2LDMuMjItMy4zNyw0Ljg0LTUuMDZzMy4yNy0zLjM1LDQuODQtNS4wNmMxMC44LTExLjcsMjAuNjgtMjMuOTQsMjkuNTgtMzYuNjYuMzctLjUxLjY5LTEuMDEsMS4wNS0xLjUsMS4wOS0xLjU2LDIuMTMtMy4xNCwzLjItNC43MS45My0xLjQxLDEuODYtMi44MSwyLjc2LTQuMjQuNDYtLjY4LjktMS4zOSwxLjMzLTIuMDcsMzMuNDktNTIuNTcsNTEuNDEtMTEyLjE3LDUzLjgyLTE3Mi4yOS4wOS0yLjMzLjE0LTQuNjcuMTgtNy4wMS4wNS0yLjMzLjEyLTQuNjUuMTItN2gtMjA2LjQ2WiIgc3R5bGU9ImZpbGw6ICNmNmY7Ii8+CiAgPHBhdGggZD0iTTc1Ni4wNCwyOC4zM2MtMzcuNzctMzcuNzctOTkuMDItMzcuNzctMTM2Ljc5LDAtMzAuMTQsMzAuMTItMzYuMTcsNzUuMTctMTguMjEsMTExLjMzbC0yMTAuNzIsMjEwLjdjLTM2LjE3LTE3Ljk0LTgxLjIyLTExLjkyLTExMS4zNiwxOC4yLTM3Ljc3LDM3Ljc3LTM3Ljc2LDk5LjAyLDAsMTM2Ljc5LDM3Ljc5LDM3Ljc3LDk5LjA0LDM3Ljc2LDEzNi44MiwwLDMwLjE0LTMwLjE0LDM2LjE1LTc1LjE4LDE4LjItMTExLjM1bDIxMC43Mi0yMTAuNjljMzYuMTgsMTcuOTQsODEuMjEsMTEuOTIsMTExLjM1LTE4LjIxLDM3Ljc3LTM3Ljc2LDM3Ljc3LTk5LDAtMTM2Ljc4aDBaIiBzdHlsZT0iZmlsbDogI2ZmZjsiLz4KPC9zdmc+`}goIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiB2aWV3Qm94PSIwIDAgMzIgMzIuMDAwMDAxIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0xMDIwLjM2MjIpIj4KICAgIDxlbGxpcHNlIGN4PSItOTA3LjM1NjU3IiBjeT0iNDc5LjkwMDA5IiBmaWxsPSIjMzg0ZTU0IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHJ4PSIzLjU3OTM5OTYiIHJ5PSIzLjgyMDc5NTMiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiIHRyYW5zZm9ybT0ic2NhbGUoLTEgMSkgcm90YXRlKC02MC41NDgpIi8+CiAgICA8ZWxsaXBzZSBjeD0iLTg5MS41NzY1NCIgY3k9IjUwNy44NDYxIiBmaWxsPSIjMzg0ZTU0IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHJ4PSIzLjU3OTM5OTYiIHJ5PSIzLjgyMDc5NTMiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiIHRyYW5zZm9ybT0icm90YXRlKC02MC41NDgpIi8+CiAgICA8cGF0aCBmaWxsPSIjMzg0ZTU0IiBkPSJNMTYuMDkxNjkzIDEwMjEuMzY0MmMtMS4xMDU3NDkuMDEtMi4yMTAzNDEuMDQ5LTMuMzE2MDkuMDlDNi44NDIyNTU4IDEwMjEuNjczOCAyIDEwMjYuMzk0MiAyIDEwMzIuMzYyMnYyMGgyOHYtMjBjMC01Ljk2ODMtNC42NjczNDUtMTAuNDkxMi0xMC41OTAyMy0xMC45MDgtMS4xMDU3NS0uMDc4LTIuMjEyMzI4LS4wOTktMy4zMTgwNzctLjA5eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjNzZlMWZlIiBkPSJNNC42MDc4ODY3IDEwMjUuMDQ2MmMuNDU5NTY0LjI1OTUgMS44MTgyNjIgMS4yMDEzIDEuOTgwOTgzIDEuNjQ4LjE4MzQwMS41MDM1LjE1OTM4NSAxLjA2NTctLjExNDYxNCAxLjU1MS0uMzQ2NjI3LjYxMzgtMS4wMDUzNDEuOTQ4Ny0xLjY5NjQyMS45MzY1LS4zMzk4ODYtLjAxLTEuNzIwMjgzLS42MzcyLTIuMDQyNTYxLS44MTkyLS45Nzc1NC0uNTUxOS0xLjM1MDc5NS0xLjc0MTgtLjgzMzY4Ni0yLjY1NzYuNTE3MTA5LS45MTU4IDEuNzI4NzQ5LTEuMjEwNyAyLjcwNjI5OS0uNjU4N3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtzb2xpZC1jb2xvcjojMDAwO3NvbGlkLW9wYWNpdHk6MSIvPgogICAgPHJlY3Qgd2lkdGg9IjMuMDg2NjY1OSIgaGVpZ2h0PSIzLjUzMTM2NjMiIHg9IjE0LjQwNjIxMyIgeT0iMTAzNS42ODQyIiBmaWxsLW9wYWNpdHk9Ii4zMjg1MDI0NiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiByeT0iLjYyNDI2MzI5IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjNzZlMWZlIiBkPSJNMTYgMTAyMy4zNjIyYy05IDAtMTIgMy43MTUzLTEyIDl2MjBoMjRjLS4wNDg4OS03LjM1NjIgMC0xOCAwLTIwIDAtNS4yODQ4LTMtOS0xMi05eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjNzZlMWZlIiBkPSJNMjcuMDc0MDczIDEwMjUuMDQ2MmMtLjQ1OTU3LjI1OTUtMS44MTgyNTcgMS4yMDEzLTEuOTgwOTc5IDEuNjQ4LS4xODM0MDEuNTAzNS0uMTU5Mzg0IDEuMDY1Ny4xMTQ2MTQgMS41NTEuMzQ2NjI3LjYxMzggMS4wMDUzMzUuOTQ4NyAxLjY5NjQxNS45MzY1LjMzOTg4LS4wMSAxLjcyMDI5LS42MzcyIDIuMDQyNTYtLjgxOTIuOTc3NTQtLjU1MTkgMS4zNTA3OS0xLjc0MTguODMzNjktMi42NTc2LS41MTcxMS0uOTE1OC0xLjcyODc2LTEuMjEwNy0yLjcwNjMtLjY1ODd6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxjaXJjbGUgY3g9IjIxLjE3NTczNCIgY3k9IjEwMzAuMzU0MiIgcj0iNC42NTM3NTQyIiBmaWxsPSIjZmZmIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxjaXJjbGUgY3g9IjEwLjMzOTQ4NiIgY3k9IjEwMzAuMzU0MiIgcj0iNC44MzE2MzQ1IiBmaWxsPSIjZmZmIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxyZWN0IHdpZHRoPSIzLjY2NzM2ODciIGhlaWdodD0iNC4xMDYzNDA5IiB4PSIxNC4xMTU4NjMiIHk9IjEwMzUuOTE3NCIgZmlsbC1vcGFjaXR5PSIuMzI5NDExNzYiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgcnk9Ii43MjU5MDUzNiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtzb2xpZC1jb2xvcjojMDAwO3NvbGlkLW9wYWNpdHk6MSIvPgogICAgPHJlY3Qgd2lkdGg9IjMuNjY3MzY4NyIgaGVpZ2h0PSI0LjEwNjM0MDkiIHg9IjE0LjExNTg2MyIgeT0iMTAzNS4yMjUzIiBmaWxsPSIjZmZmY2ZiIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHJ5PSIuNzI1OTA1MzYiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxwYXRoIGZpbGwtb3BhY2l0eT0iLjMyOTQxMTc2IiBkPSJNMTkuOTk5NzM1IDEwMzYuNTI4OWMwIC44MzgtLjg3MTIyOCAxLjI2ODItMi4xNDQ3NjYgMS4xNjU5LS4wMjM2NiAwLS4wNDc5NS0uNjAwNC0uMjU0MTQ3LS41ODMyLS41MDM2NjkuMDQyLTEuMDk1OTAyLS4wMi0xLjY4NTk2NC0uMDItLjYxMjkzOSAwLTEuMjA2MzQyLjE4MjYtMS42ODU0OS4wMTctLjExMDIzMy0uMDM4LS4xNzgyOTguNTgzOC0uMjYxNTMyLjU4MTYtMS4yNDM2ODUtLjAzMy0yLjA3ODgwMy0uMzM4My0yLjA3ODgwMy0xLjE2MTggMC0xLjIxMTggMS44MTU2MzUtMi4xOTQxIDQuMDU1MzUxLTIuMTk0MSAyLjIzOTcwNCAwIDQuMDU1MzUxLjk4MjMgNC4wNTUzNTEgMi4xOTQxeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjYzM4Yzc0IiBkPSJNMTkuOTc3NDE0IDEwMzUuNzAwNGMwIC41Njg1LS40MzM2NTkuODU1NC0xLjEzODA5MSAxLjAwMDEtLjI5MTkzMy4wNi0uNjMwMzcxLjA5Ni0xLjAwMzcxOS4xMTY2LS41NjQwNS4wMzItMS4yMDc3ODIuMDMxLTEuODkxMjIuMDMxLS42NzI4MzQgMC0xLjMwNzE4MiAwLTEuODY0OTA0LS4wMjktLjMwNjI2OC0uMDE3LS41ODk0MjktLjA0My0uODQzMTY0LS4wODQtLjgxMzgzMy0uMTMxOC0xLjMyNDk2Mi0uNDE3LTEuMzI0OTYyLTEuMDM0NCAwLTEuMTYwMSAxLjgwNTY0Mi0yLjEwMDYgNC4wMzMwMy0yLjEwMDYgMi4yMjczNzcgMCA0LjAzMzAzLjk0MDUgNC4wMzMwMyAyLjEwMDZ6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxlbGxpcHNlIGN4PSIxNS45NDQzODIiIGN5PSIxMDMzLjg1MDEiIGZpbGw9IiMyMzIwMWYiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgcng9IjIuMDgwMTczMyIgcnk9IjEuMzQzNzQ3IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8Y2lyY2xlIGN4PSIxMi40MTQyMDEiIGN5PSIxMDMwLjM1NDIiIHI9IjEuOTYzMDYzNCIgZmlsbD0iIzE3MTMxMSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8Y2lyY2xlIGN4PSIyMy4xMTAxMjEiIGN5PSIxMDMwLjM1NDIiIHI9IjEuOTYzMDYzNCIgZmlsbD0iIzE3MTMxMSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMzODRlNTQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIuMzk3MzA4NzQiIGQ9Ik01LjAwNTUzNzcgMTAyNy4yNzI3Yy0xLjE3MDQzNS0xLjA4MzUtMi4wMjY5NzMtLjc3MjEtMi4wNDQxNzItLjc0NjMiLz4KICAgIDxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzM4NGU1NCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTczMDg3NCIgZD0iTTQuMzg1MjQ1NyAxMDI2LjkxNTJjLTEuMTU4NTU3LjAzNi0xLjM0NjcwNC42MzAzLTEuMzM4ODEuNjUyM20yMy41ODQwOTczLS4zOTUxYzEuMTcwNDMtMS4wODM1IDIuMDI2OTctLjc3MjEgMi4wNDQxNy0uNzQ2MyIvPgogICAgPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMzg0ZTU0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NzMwODc0IiBkPSJNMjcuMzIxNzczIDEwMjYuNjczYzEuMTU4NTYuMDM2IDEuMzQ2Ny42MzAyIDEuMzM4OC42NTIyIi8+CiAgPC9nPgo8L3N2Zz4=`}typescriptIcon(){return`CjxzdmcgZmlsbD0ibm9uZSIgaGVpZ2h0PSI1MTIiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB3aWR0aD0iNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IGZpbGw9IiMzMTc4YzYiIGhlaWdodD0iNTEyIiByeD0iNTAiIHdpZHRoPSI1MTIiLz48cmVjdCBmaWxsPSIjMzE3OGM2IiBoZWlnaHQ9IjUxMiIgcng9IjUwIiB3aWR0aD0iNTEyIi8+PHBhdGggY2xpcC1ydWxlPSJldmVub2RkIiBkPSJtMzE2LjkzOSA0MDcuNDI0djUwLjA2MWM4LjEzOCA0LjE3MiAxNy43NjMgNy4zIDI4Ljg3NSA5LjM4NnMyMi44MjMgMy4xMjkgMzUuMTM1IDMuMTI5YzExLjk5OSAwIDIzLjM5Ny0xLjE0NyAzNC4xOTYtMy40NDIgMTAuNzk5LTIuMjk0IDIwLjI2OC02LjA3NSAyOC40MDYtMTEuMzQyIDguMTM4LTUuMjY2IDE0LjU4MS0xMi4xNSAxOS4zMjgtMjAuNjVzNy4xMjEtMTkuMDA3IDcuMTIxLTMxLjUyMmMwLTkuMDc0LTEuMzU2LTE3LjAyNi00LjA2OS0yMy44NTdzLTYuNjI1LTEyLjkwNi0xMS43MzgtMTguMjI1Yy01LjExMi01LjMxOS0xMS4yNDItMTAuMDkxLTE4LjM4OS0xNC4zMTVzLTE1LjIwNy04LjIxMy0yNC4xOC0xMS45NjdjLTYuNTczLTIuNzEyLTEyLjQ2OC01LjM0NS0xNy42ODUtNy45LTUuMjE3LTIuNTU2LTkuNjUxLTUuMTYzLTEzLjMwMy03LjgyMi0zLjY1Mi0yLjY2LTYuNDY5LTUuNDc2LTguNDUxLTguNDQ4LTEuOTgyLTIuOTczLTIuOTc0LTYuMzM2LTIuOTc0LTEwLjA5MSAwLTMuNDQxLjg4Ny02LjU0NCAyLjY2MS05LjMwOHM0LjI3OC01LjEzNiA3LjUxMi03LjExOGMzLjIzNS0xLjk4MSA3LjE5OS0zLjUyIDExLjg5NC00LjYxNSA0LjY5Ni0xLjA5NSA5LjkxMi0xLjY0MiAxNS42NTEtMS42NDIgNC4xNzMgMCA4LjU4MS4zMTMgMTMuMjI0LjkzOCA0LjY0My42MjYgOS4zMTIgMS41OTEgMTQuMDA4IDIuODk0IDQuNjk1IDEuMzA0IDkuMjU5IDIuOTQ3IDEzLjY5NCA0LjkyOCA0LjQzNCAxLjk4MiA4LjUyOSA0LjI3NiAxMi4yODUgNi44ODR2LTQ2Ljc3NmMtNy42MTYtMi45Mi0xNS45MzctNS4wODQtMjQuOTYyLTYuNDkycy0xOS4zODEtMi4xMTItMzEuMDY2LTIuMTEyYy0xMS44OTUgMC0yMy4xNjMgMS4yNzgtMzMuODA1IDMuODMzcy0yMC4wMDYgNi41NDQtMjguMDkzIDExLjk2N2MtOC4wODYgNS40MjQtMTQuNDc2IDEyLjMzMy0xOS4xNzEgMjAuNzI5LTQuNjk1IDguMzk1LTcuMDQzIDE4LjQzMy03LjA0MyAzMC4xMTQgMCAxNC45MTQgNC4zMDQgMjcuNjM4IDEyLjkxMiAzOC4xNzIgOC42MDcgMTAuNTMzIDIxLjY3NSAxOS40NSAzOS4yMDQgMjYuNzUxIDYuODg2IDIuODE2IDEzLjMwMyA1LjU3OSAxOS4yNSA4LjI5MXMxMS4wODYgNS41MjggMTUuNDE1IDguNDQ4YzQuMzMgMi45MiA3Ljc0NyA2LjEwMSAxMC4yNTIgOS41NDMgMi41MDQgMy40NDEgMy43NTYgNy4zNTIgMy43NTYgMTEuNzMzIDAgMy4yMzMtLjc4MyA2LjIzMS0yLjM0OCA4Ljk5NXMtMy45MzkgNS4xNjItNy4xMjEgNy4xOTYtNy4xNDcgMy42MjQtMTEuODk0IDQuNzcxYy00Ljc0OCAxLjE0OC0xMC4zMDMgMS43MjEtMTYuNjY4IDEuNzIxLTEwLjg1MSAwLTIxLjU5Ny0xLjkwMy0zMi4yNC01LjcxLTEwLjY0Mi0zLjgwNi0yMC41MDItOS41MTYtMjkuNTc5LTE3LjEzem0tODQuMTU5LTEyMy4zNDJoNjQuMjJ2LTQxLjA4MmgtMTc5djQxLjA4Mmg2My45MDZ2MTgyLjkxOGg1MC44NzR6IiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=`}csIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnCiAgIHdpZHRoPSIyMDQuOCIKICAgaGVpZ2h0PSIyMDQuOCIKICAgdmlld0JveD0iMCAwIDU0LjE4NjY2NiA1NC4xODY2NjciCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczEyIj4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImEiCiAgICAgICB4MT0iNDYuNzczIgogICAgICAgeDI9IjY5LjkwNyIKICAgICAgIHkxPSI4Ni40NjIiCiAgICAgICB5Mj0iMTI2LjczMiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzMy45ODMgLTUxOC45NzQpIHNjYWxlKDguNzg5OTYpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjOTI3QkU1IgogICAgICAgICBpZD0ic3RvcDEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3RvcC1jb2xvcj0iIzUxMkJENCIKICAgICAgICAgaWQ9InN0b3AyIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxmaWx0ZXIKICAgICAgIGlkPSJiIgogICAgICAgd2lkdGg9IjQyLjg0NSIKICAgICAgIGhlaWdodD0iMzkuMTM2IgogICAgICAgeD0iNDQuNjI5IgogICAgICAgeT0iOTEuODkiCiAgICAgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiCiAgICAgICBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8ZmVGbG9vZAogICAgICAgICBmbG9vZC1vcGFjaXR5PSIwIgogICAgICAgICByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIKICAgICAgICAgaWQ9ImZlRmxvb2QyIiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICBpbj0iU291cmNlQWxwaGEiCiAgICAgICAgIHJlc3VsdD0iaGFyZEFscGhhIgogICAgICAgICB0eXBlPSJtYXRyaXgiCiAgICAgICAgIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4MiIgLz4KICAgICAgPGZlT2Zmc2V0CiAgICAgICAgIGlkPSJmZU9mZnNldDIiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXgzIiAvPgogICAgICA8ZmVCbGVuZAogICAgICAgICBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIKICAgICAgICAgbW9kZT0ibm9ybWFsIgogICAgICAgICByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18yMDM3XzI4MDAiCiAgICAgICAgIGlkPSJmZUJsZW5kMyIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgaW49IlNvdXJjZUFscGhhIgogICAgICAgICByZXN1bHQ9ImhhcmRBbHBoYSIKICAgICAgICAgdHlwZT0ibWF0cml4IgogICAgICAgICB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIgogICAgICAgICBpZD0iZmVDb2xvck1hdHJpeDQiIC8+CiAgICAgIDxmZU9mZnNldAogICAgICAgICBkeT0iMSIKICAgICAgICAgaWQ9ImZlT2Zmc2V0NCIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMi40OTkiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXg1IiAvPgogICAgICA8ZmVCbGVuZAogICAgICAgICBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd18yMDM3XzI4MDAiCiAgICAgICAgIG1vZGU9Im5vcm1hbCIKICAgICAgICAgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBpZD0iZmVCbGVuZDUiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIGluPSJTb3VyY2VBbHBoYSIKICAgICAgICAgcmVzdWx0PSJoYXJkQWxwaGEiCiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXg2IiAvPgogICAgICA8ZmVPZmZzZXQKICAgICAgICAgZHk9IjQiCiAgICAgICAgIGlkPSJmZU9mZnNldDYiIC8+CiAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjYiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjA5IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4NyIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBtb2RlPSJub3JtYWwiCiAgICAgICAgIHJlc3VsdD0iZWZmZWN0M19kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgaWQ9ImZlQmxlbmQ3IiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICBpbj0iU291cmNlQWxwaGEiCiAgICAgICAgIHJlc3VsdD0iaGFyZEFscGhhIgogICAgICAgICB0eXBlPSJtYXRyaXgiCiAgICAgICAgIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4OCIgLz4KICAgICAgPGZlT2Zmc2V0CiAgICAgICAgIGR5PSI5IgogICAgICAgICBpZD0iZmVPZmZzZXQ4IiAvPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIyLjUiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjgiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjA1IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4OSIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW4yPSJlZmZlY3QzX2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBtb2RlPSJub3JtYWwiCiAgICAgICAgIHJlc3VsdD0iZWZmZWN0NF9kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgaWQ9ImZlQmxlbmQ5IiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICBpbj0iU291cmNlQWxwaGEiCiAgICAgICAgIHJlc3VsdD0iaGFyZEFscGhhIgogICAgICAgICB0eXBlPSJtYXRyaXgiCiAgICAgICAgIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4MTAiIC8+CiAgICAgIDxmZU9mZnNldAogICAgICAgICBkeT0iMTUiCiAgICAgICAgIGlkPSJmZU9mZnNldDEwIiAvPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIzIgogICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXIxMCIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgdHlwZT0ibWF0cml4IgogICAgICAgICB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMDEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXgxMSIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW4yPSJlZmZlY3Q0X2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBtb2RlPSJub3JtYWwiCiAgICAgICAgIHJlc3VsdD0iZWZmZWN0NV9kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgaWQ9ImZlQmxlbmQxMSIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW49IlNvdXJjZUdyYXBoaWMiCiAgICAgICAgIGluMj0iZWZmZWN0NV9kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgbW9kZT0ibm9ybWFsIgogICAgICAgICByZXN1bHQ9InNoYXBlIgogICAgICAgICBpZD0iZmVCbGVuZDEyIiAvPgogICAgPC9maWx0ZXI+CiAgPC9kZWZzPgogIDxwYXRoCiAgICAgZD0iTTEzNS43MzEgMjg1Ljg1djE3My45M2MwIDIxLjUxNyAxMS40NzggNDEuNDE4IDMwLjEyNSA1Mi4xNjhsMTUwLjYyNCA4Ni45NzZhNjAuMjIzIDYwLjIyMyAwIDAgMCA2MC4yNSAwbDE1MC42MjMtODYuOTc2YTYwLjIzNyA2MC4yMzcgMCAwIDAgMzAuMTI0LTUyLjE2OVYyODUuODUxYzAtMjEuNTI1LTExLjQ3Ny00MS40MjMtMzAuMTI0LTUyLjE3N0wzNzYuNzI5IDE0Ni43MmE2MC4yMSA2MC4yMSAwIDAgMC02MC4yNDkgMGwtMTUwLjYyNCA4Ni45NTRhNjAuMjQ1IDYwLjI0NSAwIDAgMC0zMC4xMjUgNTIuMTc3eiIKICAgICBmaWxsPSJ1cmwoI2EpIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KC4xIDAgMCAuMSAtNy41NjcgLTEwLjE4OSkiCiAgICAgaWQ9InBhdGgxMiIgLz4KICA8cGF0aAogICAgIGQ9Ik01NC4wNTYgOTguMDN2Ni44NTVhMS43MTEgMS43MTEgMCAwIDAgMS43MTQgMS43MTQgMS43MTMgMS43MTMgMCAwIDAgMS43MTQtMS43MTQgMS43MTMgMS43MTMgMCAxIDEgMy40MjcgMCA1LjE0IDUuMTQgMCAxIDEtMTAuMjgyIDB2LTYuODU0YTUuMTQgNS4xNCAwIDEgMSAxMC4yODIgMCAxLjcxMiAxLjcxMiAwIDEgMS0zLjQyNyAwIDEuNzEyIDEuNzEyIDAgMSAwLTMuNDI3IDB6bTI3LjQxOCA2Ljg1NWExLjcxMiAxLjcxMiAwIDAgMS0xLjcxNCAxLjcxNGgtMS43MTR2MS43MTNjMCAuNDU1LS4xOC44OTEtLjUwMiAxLjIxMmExLjcxIDEuNzEgMCAwIDEtMi40MjMgMCAxLjcxOSAxLjcxOSAwIDAgMS0uNTAyLTEuMjEydi0xLjcxM2gtMy40Mjd2MS43MTNhMS43MSAxLjcxIDAgMCAxLTEuNzE0IDEuNzE0IDEuNzEgMS43MSAwIDAgMS0xLjcxMy0xLjcxNHYtMS43MTNINjYuMDVhMS43MTMgMS43MTMgMCAxIDEgMC0zLjQyN2gxLjcxNHYtMy40MjdINjYuMDVhMS43MTIgMS43MTIgMCAxIDEgMC0zLjQyN2gxLjcxNHYtMS43MTRhMS43MTMgMS43MTMgMCAxIDEgMy40MjcgMHYxLjcxM2gzLjQyN3YtMS43MTNhMS43MTIgMS43MTIgMCAxIDEgMy40MjcgMHYxLjcxM2gxLjcxNGMuNDU0IDAgLjg5LjE4IDEuMjExLjUwMmExLjcxIDEuNzEgMCAwIDEgMCAyLjQyMyAxLjcxMiAxLjcxMiAwIDAgMS0xLjIxMS41MDNoLTEuNzE0djMuNDI3aDEuNzE0YTEuNzE4IDEuNzE4IDAgMCAxIDEuNzE0IDEuNzEzem0tNi44NTUtNS4xNGgtMy40Mjd2My40MjdoMy40Mjd6IgogICAgIGZpbGw9IiNmZmYiCiAgICAgZmlsdGVyPSJ1cmwoI2IpIgogICAgIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLjg3OSAwIDAgLjg3OSAtMzAuOTY1IC02Mi4wODYpIgogICAgIGlkPSJwYXRoMTMiIC8+Cjwvc3ZnPgo=`}cIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHZpZXdCb3g9IjAgMCAzOC4wMDAwODkgNDIuMDAwMDMxIgogICB3aWR0aD0iMzgwLjAwMDg5IgogICBoZWlnaHQ9IjQyMC4wMDAzMSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMTAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Imljb25zOC1jLXByb2dyYW1taW5nLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wLjEgKDNiYzJlODEzZjUsIDIwMjAtMDktMDcpIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGExNiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczE0IiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDU2IgogICAgIGlkPSJuYW1lZHZpZXcxMiIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6em9vbT0iMS40ODk1ODMzIgogICAgIGlua3NjYXBlOmN4PSIxOTAiCiAgICAgaW5rc2NhcGU6Y3k9IjIxMC4wMDI4MiIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzEwIiAvPgogIDxwYXRoCiAgICAgZmlsbD0iIzI4MzU5MyIKICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgZD0ibSAxNy45MDMsMC4yODYyODE2NiBjIDAuNjc5LC0wLjM4MSAxLjUxNSwtMC4zODEgMi4xOTMsMCBDIDIzLjQ1MSwyLjE2OTI4MTcgMzMuNTQ3LDcuODM3MjgxNyAzNi45MDMsOS43MjAyODE3IDM3LjU4MiwxMC4xMDAyODIgMzgsMTAuODA0MjgyIDM4LDExLjU2NjI4MiBjIDAsMy43NjYgMCwxNS4xMDEgMCwxOC44NjcgMCwwLjc2MiAtMC40MTgsMS40NjYgLTEuMDk3LDEuODQ3IC0zLjM1NSwxLjg4MyAtMTMuNDUxLDcuNTUxIC0xNi44MDcsOS40MzQgLTAuNjc5LDAuMzgxIC0xLjUxNSwwLjM4MSAtMi4xOTMsMCAtMy4zNTUsLTEuODgzIC0xMy40NTEsLTcuNTUxIC0xNi44MDcsLTkuNDM0IC0wLjY3OCwtMC4zODEgLTEuMDk2LC0xLjA4NCAtMS4wOTYsLTEuODQ2IDAsLTMuNzY2IDAsLTE1LjEwMSAwLC0xOC44NjcgMCwtMC43NjIgMC40MTgsLTEuNDY2IDEuMDk3LC0xLjg0NzAwMDMgMy4zNTQsLTEuODgzIDEzLjQ1MiwtNy41NTEgMTYuODA2LC05LjQzNDAwMDA0IHoiCiAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgIGlkPSJwYXRoMiIKICAgICBzdHlsZT0iZmlsbDojMDA0NDgyO2ZpbGwtb3BhY2l0eToxIiAvPgogIDxwYXRoCiAgICAgZmlsbD0iIzVjNmJjMCIKICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgZD0ibSAwLjMwNCwzMS40MDQyODIgYyAtMC4yNjYsLTAuMzU2IC0wLjMwNCwtMC42OTQgLTAuMzA0LC0xLjE0OSAwLC0zLjc0NCAwLC0xNS4wMTQgMCwtMTguNzU5IDAsLTAuNzU4IDAuNDE3LC0xLjQ1OCAxLjA5NCwtMS44MzYwMDAzIDMuMzQzLC0xLjg3MiAxMy40MDUsLTcuNTA3IDE2Ljc0OCwtOS4zODAwMDAwNCAwLjY3NywtMC4zNzkgMS41OTQsLTAuMzcxIDIuMjcxLDAuMDA4IDMuMzQzLDEuODcyMDAwMDQgMTMuMzcxLDcuNDU5MDAwMDQgMTYuNzE0LDkuMzMxMDAwMDQgMC4yNywwLjE1MiAwLjQ3NiwwLjMzNSAwLjY2LDAuNTc2MDAwMyB6IgogICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICBpZD0icGF0aDQiCiAgICAgc3R5bGU9ImZpbGw6IzY1OWFkMjtmaWxsLW9wYWNpdHk6MSIgLz4KICA8cGF0aAogICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgIGQ9Im0gMTksNy4wMDAyODE3IGMgNy43MjcsMCAxNCw2LjI3MzAwMDMgMTQsMTQuMDAwMDAwMyAwLDcuNzI3IC02LjI3MywxNCAtMTQsMTQgLTcuNzI3LDAgLTE0LC02LjI3MyAtMTQsLTE0IDAsLTcuNzI3IDYuMjczLC0xNC4wMDAwMDAzIDE0LC0xNC4wMDAwMDAzIHogbSAwLDcuMDAwMDAwMyBjIDMuODYzLDAgNywzLjEzNiA3LDcgMCwzLjg2MyAtMy4xMzcsNyAtNyw3IC0zLjg2MywwIC03LC0zLjEzNyAtNywtNyAwLC0zLjg2NCAzLjEzNiwtNyA3LC03IHoiCiAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgIGlkPSJwYXRoNiIgLz4KICA8cGF0aAogICAgIGZpbGw9IiMzOTQ5YWIiCiAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgIGQ9Im0gMzcuNDg1LDEwLjIwNTI4MiBjIDAuNTE2LDAuNDgzIDAuNTA2LDEuMjExIDAuNTA2LDEuNzg0IDAsMy43OTUgLTAuMDMyLDE0LjU4OSAwLjAwOSwxOC4zODQgMC4wMDQsMC4zOTYgLTAuMTI3LDAuODEzIC0wLjMyMywxLjEyNyBsIC0xOS4wODQsLTEwLjUgeiIKICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgaWQ9InBhdGg4IgogICAgIHN0eWxlPSJmaWxsOiMwMDU5OWM7ZmlsbC1vcGFjaXR5OjEiIC8+Cjwvc3ZnPgo=`}cppIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjQsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iMzA2cHgiIGhlaWdodD0iMzQ0LjM1cHgiIHZpZXdCb3g9IjAgMCAzMDYgMzQ0LjM1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAzMDYgMzQ0LjM1IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggZmlsbD0iIzAwNTk5QyIgZD0iTTMwMi4xMDcsMjU4LjI2MmMyLjQwMS00LjE1OSwzLjg5My04Ljg0NSwzLjg5My0xMy4wNTNWOTkuMTRjMC00LjIwOC0xLjQ5LTguODkzLTMuODkyLTEzLjA1MkwxNTMsMTcyLjE3NQoJTDMwMi4xMDcsMjU4LjI2MnoiLz4KPHBhdGggZmlsbD0iIzAwNDQ4MiIgZD0iTTE2Ni4yNSwzNDEuMTkzbDEyNi41LTczLjAzNGMzLjY0NC0yLjEwNCw2Ljk1Ni01LjczNyw5LjM1Ny05Ljg5N0wxNTMsMTcyLjE3NUwzLjg5MywyNTguMjYzCgljMi40MDEsNC4xNTksNS43MTQsNy43OTMsOS4zNTcsOS44OTZsMTI2LjUsNzMuMDM0QzE0Ny4wMzcsMzQ1LjQwMSwxNTguOTYzLDM0NS40MDEsMTY2LjI1LDM0MS4xOTN6Ii8+CjxwYXRoIGZpbGw9IiM2NTlBRDIiIGQ9Ik0zMDIuMTA4LDg2LjA4N2MtMi40MDItNC4xNi01LjcxNS03Ljc5My05LjM1OC05Ljg5N0wxNjYuMjUsMy4xNTZjLTcuMjg3LTQuMjA4LTE5LjIxMy00LjIwOC0yNi41LDAKCUwxMy4yNSw3Ni4xOUM1Ljk2Miw4MC4zOTcsMCw5MC43MjUsMCw5OS4xNHYxNDYuMDY5YzAsNC4yMDgsMS40OTEsOC44OTQsMy44OTMsMTMuMDUzTDE1MywxNzIuMTc1TDMwMi4xMDgsODYuMDg3eiIvPgo8Zz4KCTxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0xNTMsMjc0LjE3NWMtNTYuMjQzLDAtMTAyLTQ1Ljc1Ny0xMDItMTAyczQ1Ljc1Ny0xMDIsMTAyLTEwMmMzNi4yOTIsMCw3MC4xMzksMTkuNTMsODguMzMxLDUwLjk2OAoJCWwtNDQuMTQzLDI1LjU0NGMtOS4xMDUtMTUuNzM2LTI2LjAzOC0yNS41MTItNDQuMTg4LTI1LjUxMmMtMjguMTIyLDAtNTEsMjIuODc4LTUxLDUxYzAsMjguMTIxLDIyLjg3OCw1MSw1MSw1MQoJCWMxOC4xNTIsMCwzNS4wODUtOS43NzYsNDQuMTkxLTI1LjUxNWw0NC4xNDMsMjUuNTQzQzIyMy4xNDIsMjU0LjY0NCwxODkuMjk0LDI3NC4xNzUsMTUzLDI3NC4xNzV6Ii8+CjwvZz4KPGc+Cgk8cG9seWdvbiBmaWxsPSIjRkZGRkZGIiBwb2ludHM9IjI1NSwxNjYuNTA4IDI0My42NjYsMTY2LjUwOCAyNDMuNjY2LDE1NS4xNzUgMjMyLjMzNCwxNTUuMTc1IDIzMi4zMzQsMTY2LjUwOCAyMjEsMTY2LjUwOCAKCQkyMjEsMTc3Ljg0MSAyMzIuMzM0LDE3Ny44NDEgMjMyLjMzNCwxODkuMTc1IDI0My42NjYsMTg5LjE3NSAyNDMuNjY2LDE3Ny44NDEgMjU1LDE3Ny44NDEgCSIvPgo8L2c+CjxnPgoJPHBvbHlnb24gZmlsbD0iI0ZGRkZGRiIgcG9pbnRzPSIyOTcuNSwxNjYuNTA4IDI4Ni4xNjYsMTY2LjUwOCAyODYuMTY2LDE1NS4xNzUgMjc0LjgzNCwxNTUuMTc1IDI3NC44MzQsMTY2LjUwOCAyNjMuNSwxNjYuNTA4IAoJCTI2My41LDE3Ny44NDEgMjc0LjgzNCwxNzcuODQxIDI3NC44MzQsMTg5LjE3NSAyODYuMTY2LDE4OS4xNzUgMjg2LjE2NiwxNzcuODQxIDI5Ny41LDE3Ny44NDEgCSIvPgo8L2c+Cjwvc3ZnPgo=`}zigLogo(){return`CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTUzIDE0MCI+CjxnIGZpbGw9IiNmN2E0MWQiPgoJPGc+CgkJPHBvbHlnb24gcG9pbnRzPSI0NiwyMiAyOCw0NCAxOSwzMCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iNDYsMjIgMzMsMzMgMjgsNDQgMjIsNDQgMjIsOTUgMzEsOTUgMjAsMTAwIDEyLDExNyAwLDExNyAwLDIyIiBzaGFwZS1yZW5kZXJpbmc9ImNyaXNwRWRnZXMiLz4KCQk8cG9seWdvbiBwb2ludHM9IjMxLDk1IDEyLDExNyA0LDEwNiIvPgoJPC9nPgoJPGc+CgkJPHBvbHlnb24gcG9pbnRzPSI1NiwyMiA2MiwzNiAzNyw0NCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iNTYsMjIgMTExLDIyIDExMSw0NCAzNyw0NCA1NiwzMiIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIi8+CgkJPHBvbHlnb24gcG9pbnRzPSIxMTYsOTUgOTcsMTE3IDkwLDEwNCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iMTE2LDk1IDEwMCwxMDQgOTcsMTE3IDQyLDExNyA0Miw5NSIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIi8+CgkJPHBvbHlnb24gcG9pbnRzPSIxNTAsMCA1MiwxMTcgMywxNDAgMTAxLDIyIi8+Cgk8L2c+Cgk8Zz4KCQk8cG9seWdvbiBwb2ludHM9IjE0MSwyMiAxNDAsNDAgMTIyLDQ1Ii8+CgkJPHBvbHlnb24gcG9pbnRzPSIxNTMsMjIgMTUzLDExNyAxMDYsMTE3IDEyMCwxMDUgMTI1LDk1IDEzMSw5NSAxMzEsNDUgMTIyLDQ1IDEzMiwzNiAxNDEsMjIiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgoJCTxwb2x5Z29uIHBvaW50cz0iMTI1LDk1IDEzMCwxMTAgMTA2LDExNyIvPgoJPC9nPgo8L2c+Cjwvc3ZnPgo=`}render(){let e=pie.getIconForType(this.getNodeTypeFromIcon(this.icon));switch(this.icon){case hr.OPENAPI:return M``;case hr.GO:return M``;case hr.TS:return M``;case hr.CS:return M``;case hr.C:return M``;case hr.CPP:return M``;case hr.ZIG:return M``}return M` +`,Cr;(function(e){e.VERSION=`version`,e.SCHEMA=`schema`,e.SCHEMAS=`schemas`,e.SCHEMA_TYPES=`types`,e.MEDIA_TYPE=`mediaType`,e.HEADER=`header`,e.EXAMPLE=`example`,e.EXAMPLES=`examples`,e.ENCODING=`encoding`,e.REQUEST_BODY=`requestBody`,e.REQUEST_BODIES=`requestBodies`,e.PARAMETER=`parameter`,e.PARAMETER_QUERY=`query`,e.COOKIE=`cookie`,e.PARAMETERS=`parameters`,e.LINK=`link`,e.LINKS=`links`,e.RESPONSE=`response`,e.RESPONSES=`responses`,e.OPERATION=`operation`,e.OPERATIONS=`operations`,e.SECURITY_SCHEME=`securityScheme`,e.SECURITY_SCHEMES=`securitySchemes`,e.EXTERNAL_DOCS=`externalDocs`,e.SECURITY=`security`,e.CALLBACK=`callback`,e.CALLBACKS=`callbacks`,e.PATH_ITEM=`pathItem`,e.PATH_ITEMS=`pathItems`,e.XML=`xml`,e.HEADERS=`headers`,e.SERVER=`server`,e.SERVERS=`servers`,e.SERVER_VARIABLE=`serverVariable`,e.PATHS=`paths`,e.COMPONENTS=`components`,e.CONTACT=`contact`,e.LICENSE=`license`,e.INFO=`info`,e.TAG=`tag`,e.TAGS=`tags`,e.DOCUMENT=`document`,e.WEBHOOK=`webhook`,e.WEBHOOKS=`webhooks`,e.EXTENSIONS=`extensions`,e.EXTENSION=`extension`,e.NO_EXAMPLE=`noExample`,e.POLYMORPHIC=`polymorphic`,e.ERROR=`error`,e.WARNING=`warning`,e.ROLODEX_FILE=`rolodex-file`,e.ROLODEX_FOLDER=`rolodex-dir`,e.OPENAPI=`openapi`,e.UPLOAD=`upload`,e.ADD=`add`,e.UNKNOWN=`unknown`,e.EXPAND_NODE=`expand-node`,e.POV_MODE=`pov-mode`,e.JS=`js`,e.GO=`go`,e.TS=`ts`,e.CS=`cs`,e.C=`c`,e.CPP=`cpp`,e.PHP=`php`,e.PY=`py`,e.HTML=`html`,e.MD=`md`,e.JAVA=`java`,e.RS=`rs`,e.ZIG=`zig`,e.RB=`rb`,e.YAML=`yaml`,e.JSON=`json`})(Cr||={});var wr=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},aie,Tr;(function(e){e.tiny=`tiny`,e.small=`small`,e.smaller=`smaller`,e.medium=`medium`,e.large=`large`,e.huge=`huge`})(Tr||={});var Er;(function(e){e.primary=`primary`,e.secondary=`secondary`,e.inverse=`inverse`,e.font=`font`,e.warning=`warning`,e.polymorphic=`polymorphic`,e.error=`error`,e.filtered=`filtered`})(Er||={});var Dr=aie=class extends Bt{getSize(){switch(this.size){case Tr.tiny:return`0.8rem`;case Tr.smaller:return`1.2rem`;case Tr.medium:return`1.4rem`;case Tr.large:return`1.8rem`;case Tr.huge:return`2rem`;default:return`1rem`}}getIconColor(){switch(this.color){case Er.primary:return`var(--primary-color)`;case Er.secondary:return`var(--secondary-color)`;case Er.warning:return`var(--warn-color)`;case Er.polymorphic:return`var(--warn-color)`;case Er.error:return`var(--error-color)`;case Er.inverse:return`var(--background-color)`;case Er.filtered:return`var(--font-color-sub2)`;case Er.font:default:return`var(--font-color)`}}constructor(){super(),this._themeHandler=()=>this.requestUpdate(),this.size=Tr.medium,this.color=Er.primary}connectedCallback(){super.connectedCallback(),window.addEventListener(xr,this._themeHandler)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(xr,this._themeHandler)}isLightMode(){return document.documentElement.getAttribute(`theme`)===`light`}getNodeTypeFromIcon(e){return Object.values(Cr).includes(e)?e:Cr.SCHEMA}static getIconForType(e){switch(e){case Cr.DOCUMENT:return`stars`;case Cr.SCHEMA:return`box`;case Cr.SCHEMA_TYPES:return`diagram-3`;case Cr.MEDIA_TYPE:case Cr.XML:return`code-slash`;case Cr.HEADER:case Cr.HEADERS:return`envelope`;case Cr.EXAMPLE:case Cr.EXAMPLES:return`chat-left-quote`;case Cr.ENCODING:return`box-seam`;case Cr.REQUEST_BODY:case Cr.REQUEST_BODIES:return`box-arrow-in-right`;case Cr.PARAMETER:case Cr.PARAMETERS:case Cr.SERVER_VARIABLE:return`braces-asterisk`;case Cr.PARAMETER_QUERY:return`question-lg`;case Cr.COOKIE:return`cookie`;case Cr.LINK:case Cr.LINKS:return`link`;case Cr.RESPONSE:case Cr.RESPONSES:return`box-arrow-left`;case Cr.OPERATION:case Cr.OPERATIONS:return`gear-wide-connected`;case Cr.SECURITY_SCHEME:case Cr.SECURITY_SCHEMES:case Cr.SECURITY:return`shield-lock`;case Cr.CALLBACK:case Cr.CALLBACKS:return`telephone-outbound`;case Cr.PATH_ITEM:case Cr.PATH_ITEMS:return`geo`;case Cr.SERVER:case Cr.SERVERS:return`hdd-network`;case Cr.PATHS:return`compass`;case Cr.COMPONENTS:return`boxes`;case Cr.CONTACT:return`person-circle`;case Cr.LICENSE:return`patch-check`;case Cr.UPLOAD:return`upload`;case Cr.INFO:return`info-square`;case Cr.TAG:return`tag`;case Cr.TAGS:return`tags`;case Cr.VERSION:return`award`;case Cr.EXTENSIONS:case Cr.EXTENSION:return`plug`;case Cr.WEBHOOK:case Cr.WEBHOOKS:return`arrow-clockwise`;case Cr.NO_EXAMPLE:return`exclamation-circle`;case Cr.POLYMORPHIC:return`diagram-3`;case Cr.ERROR:return`x-square`;case Cr.WARNING:return`exclamation-triangle`;case Cr.ROLODEX_FOLDER:return`folder`;case Cr.ROLODEX_FILE:return`journal-code`;case Cr.JS:return`filetype-js`;case Cr.PHP:return`filetype-php`;case Cr.PY:return`filetype-py`;case Cr.HTML:return`filetype-html`;case Cr.MD:return`markdown`;case Cr.JAVA:return`filetype-java`;case Cr.EXTERNAL_DOCS:return`journals`;case Cr.RB:return`filetype-rb`;case Cr.EXPAND_NODE:return`node-plus`;case Cr.POV_MODE:return`binoculars`;default:return`box`}}openapiIcon(){return this.isLightMode()?`PHN2ZyBpZD0icGIzM2Zfb3BlbmFwaSIgZGF0YS1uYW1lPSJwYjMzZl9vcGVuYXBpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3ODQuMzcgNzg0LjI5Ij4KICA8cGF0aCBkPSJNMjA3LjI4LDQ1MC45N0guMzFjLjA0LDEuMDIuMDcsMi4wMy4xMiwzLjAzLjA4LDEuOTUuMjIsMy44OC4zNCw1LjgzLjA1Ljg0LjA5LDEuNjcuMTYsMi41LjE2LDIuMjUuMzUsNC41LjU2LDYuNzMuMDUuNTEuMDksMS4wMi4xNCwxLjUuMjQsMi41LjUxLDQuOTkuOCw3LjQ3LjAxLjI0LjA0LjQ4LjA4LjcyLjMzLDIuNjcuNjcsNS4zNSwxLjA2LDgsMCwuMDQsMCwuMDguMDEuMSwyLjM5LDE2LjU0LDUuOTYsMzIuODgsMTAuNyw0OC45LjAzLjA3LjA1LjEzLjA3LjIuNzUsMi41NCwxLjUzLDUuMDUsMi4zMyw3LjU0LjA1LjE0LjEuMy4xNC40NHMuMDkuMjkuMTQuNDRjLjczLDIuMjYsMS41LDQuNTEsMi4yOCw2Ljc3LjIuNTYuMzksMS4xNC42LDEuNzEuNjksMS45NSwxLjQsMy45LDIuMTMsNS44Ni4zNC44OC42NywxLjc1Ljk5LDIuNjQuNjQsMS42MiwxLjI2LDMuMjMsMS45LDQuODQuNDgsMS4yMi45OCwyLjQzLDEuNDksMy42My41MiwxLjI3LDEuMDUsMi41MSwxLjU4LDMuNzguNjUsMS41NCwxLjM1LDMuMDcsMi4wMyw0LjYyLjQxLjkyLjgyLDEuODIsMS4yMywyLjczLjg0LDEuODQsMS43LDMuNjksMi41OCw1LjUyLjI5LjU5LjU2LDEuMTguODUsMS43NSwxLjAyLDIuMTIsMi4wNSw0LjIsMy4xLDYuMjguMTguMzEuMzMuNjQuNS45NSwxLjE4LDIuMywyLjM4LDQuNTksMy42Miw2Ljg2LjA1LjEuMTIuMi4xNi4zMS4yNi40Ny41NS45My44MSwxLjRsMTc2Ljc2LTEwNi40Ny42NS0uMzljLTYuOTctMTQuNy0xMS4zMS0zMC4zMy0xMi45My00Ni4yMmgwWiIgc3R5bGU9ImZpbGw6ICMzNTllZDM7Ii8+CiAgPHBhdGggZD0iTTI1OC4xNSw1NDUuOTlsLS41LjUtMTQ1Ljc5LDE0NS43N2MuNzUuNjksMS40OSwxLjQxLDIuMjYsMi4wOCwxLjM2LDEuMjQsMi43NSwyLjQ2LDQuMTIsMy42Ny43Mi42MywxLjQxLDEuMjYsMi4xMywxLjg4LDEuNjUsMS40MywzLjMyLDIuODEsNC45OCw0LjIxLjQ2LjM4Ljg5Ljc1LDEuMzUsMS4xMiwyLjEyLDEuNzQsNC4yNiwzLjQ2LDYuNDIsNS4xNSwyLjA3LDEuNjMsNC4xNCwzLjIyLDYuMjYsNC44MS4wOS4wNS4xNi4xLjI0LjE3LDguOCw2LjU3LDE3LjksMTIuNzIsMjcuMjcsMTguNDQuMzEuMjEuNjQuMzkuOTcuNiwxLjc5LDEuMDYsMy41NywyLjEyLDUuMzcsMy4xNmwzLjI5LDEuODhjMS4wNS42LDIuMDgsMS4xOCwzLjEyLDEuNzUsMS45LDEuMDMsMy43OSwyLjA3LDUuNywzLjA3LjI2LjE0LjUyLjI5LjguNDIsNS4zLDIuNzcsMTAuNjgsNS4zNSwxNi4xMiw3LjgzbDUuMTgtMTIuNTcsNzMuMzMtMTc4LjA0LjI2LS42NWMtOC00LjI5LTE1LjY4LTkuMzYtMjIuODktMTUuMjdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik0yNDIuOTcsNTMxLjQ2Yy0xLjU3LTEuNzQtMy4wOC0zLjUzLTQuNTUtNS4zNi0xLjMxLTEuNjEtMi41Ni0zLjIzLTMuNzgtNC44OC0xLjQtMS44OC0yLjc2LTMuNzktNC4wNS01LjczLTEuMjktMS45NS0yLjU4LTMuOTEtMy43OC01LjlsLTE3Ni45OCwxMDYuNmMyLjcyLDQuNTIsNS41NCw4LjkyLDguNDUsMTMuMjYuMDkuMTYuMTguMzEuMjkuNDYuMDMuMDcuMDcuMS4xLjE3LjA5LjEzLjE4LjI5LjI3LjQzLjAxLjAxLjAzLjAzLjAzLjA1LjI0LjM0LjQ3LjY4LjcxLDEuMDMuMDEuMDEuMDMuMDQuMDUuMDdzLjAxLjAxLjAxLjAzYzMuMDcsNC41NCw2LjI0LDkuMDEsOS40OSwxMy4zOC4wNy4wOS4xNC4xOC4yMS4yNy4wOC4wOS4xNC4xOC4yMS4yNywxLjQzLDEuODcsMi44NCwzLjc0LDQuMyw1LjYuMi4yNS4zOC40OC41OS43MiwxLjQ5LDEuOTIsMy4wMiwzLjgyLDQuNTgsNS42OS4zNy40NC43NS44OSwxLjExLDEuMzUsMS40LDEuNjcsMi44LDMuMzMsNC4yMiw0Ljk4LjYxLjcxLDEuMjQsMS40MywxLjg3LDIuMTIsMS4yMiwxLjM5LDIuNDIsMi43NywzLjY2LDQuMTMuNjguNzUsMS4zOSwxLjUsMi4wOCwyLjI1LjMxLjM1LjYzLjY4Ljk1LDEuMDMuOS45OCwxLjgsMS45NiwyLjcyLDIuOTMuMzcuMzguNzYuNzYsMS4xMiwxLjE1LDEuNjEsMS42NywzLjI0LDMuMzYsNC44OSw1LjAxbDE0Ni4wMS0xNDUuOThjLTEuNjctMS42Ny0zLjI0LTMuNC00Ljc5LTUuMTNoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik00MzYuNSw1NDUuOTFjLTEuNjEsMS4yOS0zLjIzLDIuNTYtNC44OCwzLjc4bC4zNS42MSwxMDYuNDYsMTc2LjY4YzQuOTMtMy4yMiw5LjgxLTYuNTQsMTQuNTctMTAuMDMsMTAuMy03LjYsMjAuMjctMTUuODMsMjkuODgtMjQuN2wtMTQ1LjgtMTQ1Ljc3LS41OC0uNThaIiBzdHlsZT0iZmlsbDogIzYyYzRmZjsiLz4KICA8cGF0aCBkPSJNNTIyLjk2LDcyOC40NGwtMy42MS02LTk5LjM3LTE2NC45MmMtMi4wMSwxLjItNC4wNywyLjMtNi4xMiwzLjQtMi4wOCwxLjEyLTQuMTYsMi4xNi02LjI4LDMuMTYtMTkuMDksOS4wNS0zOS43NSwxMy42OC02MC40NSwxMy42OC0xMy41NiwwLTI3LjEtMS45Ni00MC4yMS01Ljg3LTIuMjQtLjY3LTQuNDItMS41NC02LjYyLTIuMzMtMi4yMS0uNzctNC40NS0xLjQ1LTYuNjItMi4zNGwtNzMuMjcsMTc3LjkzLTIuODYsNi45Ny0yLjQ2LDUuOTh2LjAzYy4xNy4wOC4zNy4xNC41NS4yMi4yMS4wOC40MS4xNC42LjI0aC4wM2MuMDUuMDMuMS4wNC4xNC4wNSwxLjczLjcyLDMuNDYsMS4zMiw1LjIsMiwyLjE4Ljg1LDQuMzUsMS43MSw2LjU0LDIuNTEsMS4xMi40MSwyLjIyLjg4LDMuMzMsMS4yN2guMDFjMjIuOTYsOC4xLDQ2LjcxLDEzLjc5LDcwLjg1LDE2Ljk2Ljk1LjEyLDEuODguMjUsMi44NC4zOC45OC4xMiwxLjk3LjIxLDIuOTcuMzMsMS44Ni4yMSwzLjcxLjQyLDUuNTguNmwxLjM5LjEyYzIuMjkuMjIsNC41OC40Miw2Ljg1LjU4Ljc4LjA3LDEuNTcuMDksMi4zNC4xNiwyLC4xMyw0LC4yNSw2LC4zNCwxLjIzLjA4LDIuNDYuMSwzLjY5LjE2LDEuNi4wNSwzLjE4LjEyLDQuNzcuMTcsMi4yOS4wNSw0LjYuMDcsNi45LjA4LjU1LDAsMS4wOS4wMSwxLjYzLjAzLDE5LjI5LDAsMzguNTctMS42MSw1Ny42NS00LjgxLjMxLS4wNS42NC0uMS45Ny0uMTQsMi4wMS0uMzUsNC4wMy0uNzMsNi4wNC0xLjEsMS4xNS0uMjIsMi4zMS0uNDQsMy40NC0uNjcsMS4xOC0uMjUsMi4zNy0uNDgsMy41NC0uNzUsMS45Ni0uNDEsMy45Mi0uODQsNS45LTEuMjkuMzUtLjA4LjcxLS4xNCwxLjA2LS4yNSwyOS02Ljc1LDU3LjAxLTE3LjIxLDgzLjMxLTMxLjA1aDBjMS43My0uOTIsMy40MS0xLjk1LDUuMTMtMi44OSwyLjA0LTEuMTEsNC4wNy0yLjI4LDYuMTEtMy40NCwxLjQtLjgsMi44Mi0xLjU0LDQuMjItMi4zOC4wMS0uMDEuMDMtLjAzLjA0LS4wM2guMDFzLjA0LS4wMy4wNy0uMDRsLjAzLS4wMy0uMjYtLjQzLjI2LjQzcy4wMy0uMDEuMDQtLjAxYy4wMy0uMDEuMDQtLjAzLjA3LS4wNC4wOC0uMDUuMTYtLjA5LjI0LS4xNC40NC0uMjcuOS0uNTQsMS4zNi0uODFsLTMuNTgtNS45OVpNMjU4LjIzLDMyOC4wNWMxLjYxLTEuMzEsMy4yNC0yLjU2LDQuODgtMy43OWwtLjM1LS42LTEwNi40Ni0xNzYuN2MtNC45NCwzLjIzLTkuODIsNi41Ni0xNC41OSwxMC4wNS0xMC4yOSw3LjU4LTIwLjI3LDE1LjgxLTI5Ljg1LDI0LjY2bDE0NS44LDE0NS43OS41OC41OVoiIHN0eWxlPSJmaWxsOiAjMzU5ZWQzOyIvPgogIDxwYXRoIGQ9Ik0xMDEuNzUsMTkxLjM5Yy0xLjY2LDEuNjYtMy4yMywzLjM3LTQuODUsNS4wNS0xLjYxLDEuNjktMy4yNiwzLjM2LTQuODQsNS4wNi0xMC42NCwxMS41MS0yMC41LDIzLjcyLTI5LjUsMzYuNTYtLjQzLjU5LS44NSwxLjIyLTEuMjgsMS44Mi0uOTksMS40Ni0xLjk5LDIuOTItMi45NSw0LjM4LTEuMDIsMS41Mi0yLjAzLDMuMDYtMy4wMSw0LjU5LS4zNy41Ni0uNzMsMS4xNC0xLjA5LDEuN0MyMC43LDMwMy4xNCwyLjczLDM2Mi44LjMxLDQyMi45NmMtLjA5LDIuMzQtLjE0LDQuNjgtLjIsNy4wMS0uMDQsMi4zMy0uMTIsNC42Ny0uMTIsN2gyMDYuNDljMC0yLjMzLjIxLTQuNjUuMzQtNywuMTItMi4zNC4xNC00LjY4LjM4LTcuMDEsMi42Ny0yNi44OCwxMy4wNS01My4xNCwzMS4xNC03NS4xOCwxLjQ2LTEuNzksMy4xMi0zLjQ4LDQuNzEtNS4yLDEuNTYtMS43NCwzLjAyLTMuNTMsNC42OS01LjJMMTAxLjc1LDE5MS4zOVpNNTI3LjgsMTQwLjE0Yy0uMjctLjE3LS41OC0uMzQtLjg1LS41MS0xLjgyLTEuMTEtMy42NS0yLjE4LTUuNDktMy4yNi0xLjA2LS42MS0yLjEzLTEuMjItMy4xOS0xLjgyLTEuMDktLjYtMi4xNC0xLjItMy4yMy0xLjc5LTEuODctMS4wMi0zLjc0LTIuMDMtNS42MS0zLjAzLS4zLS4xNC0uNTktLjMtLjg5LS40Ni0xMi4xMS02LjMzLTI0LjU0LTExLjktMzcuMjQtMTYuNzQtLjMzLS4xMy0uNjUtLjI2LS45OC0uMzgtMi43Ny0xLjAzLTUuNTQtMi4wNy04LjM0LTMuMDMtMjIuNTYtNy44Ny00NS44OC0xMy40LTY5LjU3LTE2LjUxbC0yLjktLjM5Yy0uOTgtLjEyLTEuOTUtLjIxLTIuOTItLjMxLTEuODctLjIyLTMuNzMtLjQzLTUuNjEtLjYxLS41MS0uMDUtMS4wMy0uMDgtMS41Ny0uMTQtMi4yMS0uMi00LjQ1LS4zOS02LjY3LS41NmwtMi42LS4xNmMtMS45LS4xMi0zLjgzLS4yNi01LjczLS4zNC0xLjAyLS4wNS0yLjA0LS4wOS0zLjA1LS4xMnYyMDYuOTdjMTAuNjIsMS4xLDIxLjE0LDMuMzYsMzEuMzUsNi44M2wxNTIuMzQtMTUyLjMxYy01LjY2LTMuOTItMTEuMzgtNy43NC0xNy4yNi0xMS4zMWgwWiIgc3R5bGU9ImZpbGw6ICM2MmM0ZmY7Ii8+CiAgPHBhdGggZD0iTTM0MC4zNyw4OS44Yy0yLjM0LjA1LTQuNjguMDUtNy4wMS4xNC0xNC42LjU5LTI5LjE4LDIuMDgtNDMuNjQsNC41MS0uMzEuMDUtLjYzLjEtLjk1LjE2LTIuMDMuMzUtNC4wNC43Mi02LjA1LDEuMS0xLjE0LjIyLTIuMjkuNDMtMy40NC42NS0xLjE5LjI0LTIuMzcuNDgtMy41Ni43NS0xLjk2LjQxLTMuOTIuODQtNS44NywxLjI5LS4zNy4wNy0uNzIuMTYtMS4wNy4yNC0yOC45OCw2Ljc3LTU2Ljk5LDE3LjIxLTgzLjMzLDMxLjA3LTEuNzEuOTItMy4zOSwxLjk1LTUuMSwyLjg4LTIuMDQsMS4xMi00LjA4LDIuMjgtNi4xMSwzLjQ0LTEuNS44OC0zLjAzLDEuNjctNC41NCwyLjU2LS4wMS4wMS0uMDQuMDMtLjA1LjAzLS4xLjA3LS4yMS4xMy0uMzEuMTgtLjM5LjI1LS44LjQ0LTEuMTkuNjh2LjAzczMuNjMsNiwzLjYzLDZsMTAyLjk3LDE3MC45M2MyLjAxLTEuMiw0LjA3LTIuMzEsNi4xMi0zLjQxLDIuMDctMS4xMSw0LjE2LTIuMTYsNi4yNi0zLjE1LDE0LjU1LTYuOTUsMzAuMTktMTEuMzMsNDYuMjMtMTIuOTYsMi4zMy0uMjQsNC42NS0uNDMsNy0uNTUsMi4zMy0uMTIsNC42Ny0uMjQsNy4wMS0uMjRWODkuNjVjLTIuMzQsMC00LjY3LjEtNywuMTRoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik02OTQuMyw0MTkuOWMtLjEtMS44Ni0uMjEtMy43LS4zNC01LjU3LS4wNS0uOTItLjExLTEuODUtLjE4LTIuNzctLjE0LTIuMTgtLjMzLTQuMzctLjU0LTYuNTUtLjA0LS41Ni0uMDktMS4xMi0uMTQtMS42OS0uMjQtMi40NS0uNS00Ljg4LS43OC03LjMxLS4wMy0uMi0uMDQtLjM5LS4wNy0uNTlsLS4wNC0uMjdjLS4zMS0yLjYzLS42Ny01LjI2LTEuMDMtNy44N2wtLjA0LS4yNWMtMi4zOC0xNi41LTUuOTUtMzIuODItMTAuNjctNDguODEtLjA0LS4xMi0uMDctLjIxLS4xLS4zMS0uNzUtMi41LTEuNTItNC45Ny0yLjI5LTcuNDQtLjEyLS4zMy0uMjItLjY1LS4zMy0uOTgtLjczLTIuMjQtMS40OC00LjQ2LTIuMjUtNi42OGwtLjYzLTEuOGMtLjY4LTEuOTItMS4zOS0zLjg0LTIuMDktNS43Ny0uMzUtLjkyLS42OS0xLjgzLTEuMDYtMi43My0uNi0xLjYtMS4yMi0zLjE4LTEuODYtNC43NS0uNS0xLjI3LTEuMDEtMi41MS0xLjUyLTMuNzQtLjUxLTEuMjQtMS4wMy0yLjQ2LTEuNTQtMy42OS0uNjgtMS41Ny0xLjM3LTMuMTQtMi4wNy00LjY5LS4zOS0uODgtLjc4LTEuNzctMS4xOS0yLjY1LS44NS0xLjg2LTEuNzMtMy43My0yLjYtNS41OC0uMjctLjU1LS41NS0xLjEyLS44Mi0xLjY5LTEuMDItMi4xMi0yLjA3LTQuMjUtMy4xNC02LjM0LS4xNC0uMjktLjMtLjU5LS40NC0uODgtMS4xOS0yLjMxLTIuNDItNC42NC0zLjY1LTYuOTMtLjA1LS4wOC0uMDktLjE3LS4xNC0uMjUtNi0xMS4wMy0xMi42LTIxLjc0LTE5Ljc2LTMyLjA2bC0xNTIuMzgsMTUyLjM4YzMuNDYsMTAuMjEsNS43MSwyMC43NCw2LjgxLDMxLjM0aDIwN2MtLjA1LTEuMDMtLjA4LTIuMDctLjEzLTMuMDdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik00ODguMjQsNDM2Ljk3YzAsMi4zNC0uMjIsNC42Ny0uMzQsNy4wMXMtLjE2LDQuNjgtLjM5LDdjLTIuNjcsMjYuOS0xMy4wNCw1My4xNS0zMS4xMyw3NS4yMS0xLjQ2LDEuNzktMy4xMiwzLjQ2LTQuNzEsNS4yLTEuNTcsMS43My0zLjAyLDMuNTItNC42OSw1LjE5bDE0Ni4wMSwxNDUuOThjMS42Ni0xLjY2LDMuMjItMy4zNyw0Ljg0LTUuMDZzMy4yNy0zLjM1LDQuODQtNS4wNmMxMC44LTExLjcsMjAuNjgtMjMuOTQsMjkuNTgtMzYuNjYuMzctLjUxLjY5LTEuMDEsMS4wNS0xLjUsMS4wOS0xLjU2LDIuMTMtMy4xNCwzLjItNC43MS45My0xLjQxLDEuODYtMi44MSwyLjc2LTQuMjQuNDYtLjY4LjktMS4zOSwxLjMzLTIuMDcsMzMuNDktNTIuNTcsNTEuNDEtMTEyLjE3LDUzLjgyLTE3Mi4yOS4wOS0yLjMzLjE0LTQuNjcuMTgtNy4wMS4wNS0yLjMzLjEyLTQuNjUuMTItN2gtMjA2LjQ2WiIgc3R5bGU9ImZpbGw6ICNmNmY7Ii8+CiAgPHBhdGggZD0iTTc1Ni4wNCwyOC4zM2MtMzcuNzctMzcuNzctOTkuMDItMzcuNzctMTM2Ljc5LDAtMzAuMTQsMzAuMTItMzYuMTcsNzUuMTctMTguMjEsMTExLjMzbC0yMTAuNzIsMjEwLjdjLTM2LjE3LTE3Ljk0LTgxLjIyLTExLjkyLTExMS4zNiwxOC4yLTM3Ljc3LDM3Ljc3LTM3Ljc2LDk5LjAyLDAsMTM2Ljc5LDM3Ljc5LDM3Ljc3LDk5LjA0LDM3Ljc2LDEzNi44MiwwLDMwLjE0LTMwLjE0LDM2LjE1LTc1LjE4LDE4LjItMTExLjM1bDIxMC43Mi0yMTAuNjljMzYuMTgsMTcuOTQsODEuMjEsMTEuOTIsMTExLjM1LTE4LjIxLDM3Ljc3LTM3Ljc2LDM3Ljc3LTk5LDAtMTM2Ljc4aDBaIiBzdHlsZT0iZmlsbDogIzAwMDsiLz4KPC9zdmc+`:`PHN2ZyBpZD0icGIzM2Zfb3BlbmFwaSIgZGF0YS1uYW1lPSJwYjMzZl9vcGVuYXBpIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA3ODQuMzcgNzg0LjI5Ij4KICA8cGF0aCBkPSJNMjA3LjI4LDQ1MC45N0guMzFjLjA0LDEuMDIuMDcsMi4wMy4xMiwzLjAzLjA4LDEuOTUuMjIsMy44OC4zNCw1LjgzLjA1Ljg0LjA5LDEuNjcuMTYsMi41LjE2LDIuMjUuMzUsNC41LjU2LDYuNzMuMDUuNTEuMDksMS4wMi4xNCwxLjUuMjQsMi41LjUxLDQuOTkuOCw3LjQ3LjAxLjI0LjA0LjQ4LjA4LjcyLjMzLDIuNjcuNjcsNS4zNSwxLjA2LDgsMCwuMDQsMCwuMDguMDEuMSwyLjM5LDE2LjU0LDUuOTYsMzIuODgsMTAuNyw0OC45LjAzLjA3LjA1LjEzLjA3LjIuNzUsMi41NCwxLjUzLDUuMDUsMi4zMyw3LjU0LjA1LjE0LjEuMy4xNC40NHMuMDkuMjkuMTQuNDRjLjczLDIuMjYsMS41LDQuNTEsMi4yOCw2Ljc3LjIuNTYuMzksMS4xNC42LDEuNzEuNjksMS45NSwxLjQsMy45LDIuMTMsNS44Ni4zNC44OC42NywxLjc1Ljk5LDIuNjQuNjQsMS42MiwxLjI2LDMuMjMsMS45LDQuODQuNDgsMS4yMi45OCwyLjQzLDEuNDksMy42My41MiwxLjI3LDEuMDUsMi41MSwxLjU4LDMuNzguNjUsMS41NCwxLjM1LDMuMDcsMi4wMyw0LjYyLjQxLjkyLjgyLDEuODIsMS4yMywyLjczLjg0LDEuODQsMS43LDMuNjksMi41OCw1LjUyLjI5LjU5LjU2LDEuMTguODUsMS43NSwxLjAyLDIuMTIsMi4wNSw0LjIsMy4xLDYuMjguMTguMzEuMzMuNjQuNS45NSwxLjE4LDIuMywyLjM4LDQuNTksMy42Miw2Ljg2LjA1LjEuMTIuMi4xNi4zMS4yNi40Ny41NS45My44MSwxLjRsMTc2Ljc2LTEwNi40Ny42NS0uMzljLTYuOTctMTQuNy0xMS4zMS0zMC4zMy0xMi45My00Ni4yMmgwWiIgc3R5bGU9ImZpbGw6ICMzNTllZDM7Ii8+CiAgPHBhdGggZD0iTTI1OC4xNSw1NDUuOTlsLS41LjUtMTQ1Ljc5LDE0NS43N2MuNzUuNjksMS40OSwxLjQxLDIuMjYsMi4wOCwxLjM2LDEuMjQsMi43NSwyLjQ2LDQuMTIsMy42Ny43Mi42MywxLjQxLDEuMjYsMi4xMywxLjg4LDEuNjUsMS40MywzLjMyLDIuODEsNC45OCw0LjIxLjQ2LjM4Ljg5Ljc1LDEuMzUsMS4xMiwyLjEyLDEuNzQsNC4yNiwzLjQ2LDYuNDIsNS4xNSwyLjA3LDEuNjMsNC4xNCwzLjIyLDYuMjYsNC44MS4wOS4wNS4xNi4xLjI0LjE3LDguOCw2LjU3LDE3LjksMTIuNzIsMjcuMjcsMTguNDQuMzEuMjEuNjQuMzkuOTcuNiwxLjc5LDEuMDYsMy41NywyLjEyLDUuMzcsMy4xNmwzLjI5LDEuODhjMS4wNS42LDIuMDgsMS4xOCwzLjEyLDEuNzUsMS45LDEuMDMsMy43OSwyLjA3LDUuNywzLjA3LjI2LjE0LjUyLjI5LjguNDIsNS4zLDIuNzcsMTAuNjgsNS4zNSwxNi4xMiw3LjgzbDUuMTgtMTIuNTcsNzMuMzMtMTc4LjA0LjI2LS42NWMtOC00LjI5LTE1LjY4LTkuMzYtMjIuODktMTUuMjdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik0yNDIuOTcsNTMxLjQ2Yy0xLjU3LTEuNzQtMy4wOC0zLjUzLTQuNTUtNS4zNi0xLjMxLTEuNjEtMi41Ni0zLjIzLTMuNzgtNC44OC0xLjQtMS44OC0yLjc2LTMuNzktNC4wNS01LjczLTEuMjktMS45NS0yLjU4LTMuOTEtMy43OC01LjlsLTE3Ni45OCwxMDYuNmMyLjcyLDQuNTIsNS41NCw4LjkyLDguNDUsMTMuMjYuMDkuMTYuMTguMzEuMjkuNDYuMDMuMDcuMDcuMS4xLjE3LjA5LjEzLjE4LjI5LjI3LjQzLjAxLjAxLjAzLjAzLjAzLjA1LjI0LjM0LjQ3LjY4LjcxLDEuMDMuMDEuMDEuMDMuMDQuMDUuMDdzLjAxLjAxLjAxLjAzYzMuMDcsNC41NCw2LjI0LDkuMDEsOS40OSwxMy4zOC4wNy4wOS4xNC4xOC4yMS4yNy4wOC4wOS4xNC4xOC4yMS4yNywxLjQzLDEuODcsMi44NCwzLjc0LDQuMyw1LjYuMi4yNS4zOC40OC41OS43MiwxLjQ5LDEuOTIsMy4wMiwzLjgyLDQuNTgsNS42OS4zNy40NC43NS44OSwxLjExLDEuMzUsMS40LDEuNjcsMi44LDMuMzMsNC4yMiw0Ljk4LjYxLjcxLDEuMjQsMS40MywxLjg3LDIuMTIsMS4yMiwxLjM5LDIuNDIsMi43NywzLjY2LDQuMTMuNjguNzUsMS4zOSwxLjUsMi4wOCwyLjI1LjMxLjM1LjYzLjY4Ljk1LDEuMDMuOS45OCwxLjgsMS45NiwyLjcyLDIuOTMuMzcuMzguNzYuNzYsMS4xMiwxLjE1LDEuNjEsMS42NywzLjI0LDMuMzYsNC44OSw1LjAxbDE0Ni4wMS0xNDUuOThjLTEuNjctMS42Ny0zLjI0LTMuNC00Ljc5LTUuMTNoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik00MzYuNSw1NDUuOTFjLTEuNjEsMS4yOS0zLjIzLDIuNTYtNC44OCwzLjc4bC4zNS42MSwxMDYuNDYsMTc2LjY4YzQuOTMtMy4yMiw5LjgxLTYuNTQsMTQuNTctMTAuMDMsMTAuMy03LjYsMjAuMjctMTUuODMsMjkuODgtMjQuN2wtMTQ1LjgtMTQ1Ljc3LS41OC0uNThaIiBzdHlsZT0iZmlsbDogIzYyYzRmZjsiLz4KICA8cGF0aCBkPSJNNTIyLjk2LDcyOC40NGwtMy42MS02LTk5LjM3LTE2NC45MmMtMi4wMSwxLjItNC4wNywyLjMtNi4xMiwzLjQtMi4wOCwxLjEyLTQuMTYsMi4xNi02LjI4LDMuMTYtMTkuMDksOS4wNS0zOS43NSwxMy42OC02MC40NSwxMy42OC0xMy41NiwwLTI3LjEtMS45Ni00MC4yMS01Ljg3LTIuMjQtLjY3LTQuNDItMS41NC02LjYyLTIuMzMtMi4yMS0uNzctNC40NS0xLjQ1LTYuNjItMi4zNGwtNzMuMjcsMTc3LjkzLTIuODYsNi45Ny0yLjQ2LDUuOTh2LjAzYy4xNy4wOC4zNy4xNC41NS4yMi4yMS4wOC40MS4xNC42LjI0aC4wM2MuMDUuMDMuMS4wNC4xNC4wNSwxLjczLjcyLDMuNDYsMS4zMiw1LjIsMiwyLjE4Ljg1LDQuMzUsMS43MSw2LjU0LDIuNTEsMS4xMi40MSwyLjIyLjg4LDMuMzMsMS4yN2guMDFjMjIuOTYsOC4xLDQ2LjcxLDEzLjc5LDcwLjg1LDE2Ljk2Ljk1LjEyLDEuODguMjUsMi44NC4zOC45OC4xMiwxLjk3LjIxLDIuOTcuMzMsMS44Ni4yMSwzLjcxLjQyLDUuNTguNmwxLjM5LjEyYzIuMjkuMjIsNC41OC40Miw2Ljg1LjU4Ljc4LjA3LDEuNTcuMDksMi4zNC4xNiwyLC4xMyw0LC4yNSw2LC4zNCwxLjIzLjA4LDIuNDYuMSwzLjY5LjE2LDEuNi4wNSwzLjE4LjEyLDQuNzcuMTcsMi4yOS4wNSw0LjYuMDcsNi45LjA4LjU1LDAsMS4wOS4wMSwxLjYzLjAzLDE5LjI5LDAsMzguNTctMS42MSw1Ny42NS00LjgxLjMxLS4wNS42NC0uMS45Ny0uMTQsMi4wMS0uMzUsNC4wMy0uNzMsNi4wNC0xLjEsMS4xNS0uMjIsMi4zMS0uNDQsMy40NC0uNjcsMS4xOC0uMjUsMi4zNy0uNDgsMy41NC0uNzUsMS45Ni0uNDEsMy45Mi0uODQsNS45LTEuMjkuMzUtLjA4LjcxLS4xNCwxLjA2LS4yNSwyOS02Ljc1LDU3LjAxLTE3LjIxLDgzLjMxLTMxLjA1aDBjMS43My0uOTIsMy40MS0xLjk1LDUuMTMtMi44OSwyLjA0LTEuMTEsNC4wNy0yLjI4LDYuMTEtMy40NCwxLjQtLjgsMi44Mi0xLjU0LDQuMjItMi4zOC4wMS0uMDEuMDMtLjAzLjA0LS4wM2guMDFzLjA0LS4wMy4wNy0uMDRsLjAzLS4wMy0uMjYtLjQzLjI2LjQzcy4wMy0uMDEuMDQtLjAxYy4wMy0uMDEuMDQtLjAzLjA3LS4wNC4wOC0uMDUuMTYtLjA5LjI0LS4xNC40NC0uMjcuOS0uNTQsMS4zNi0uODFsLTMuNTgtNS45OVpNMjU4LjIzLDMyOC4wNWMxLjYxLTEuMzEsMy4yNC0yLjU2LDQuODgtMy43OWwtLjM1LS42LTEwNi40Ni0xNzYuN2MtNC45NCwzLjIzLTkuODIsNi41Ni0xNC41OSwxMC4wNS0xMC4yOSw3LjU4LTIwLjI3LDE1LjgxLTI5Ljg1LDI0LjY2bDE0NS44LDE0NS43OS41OC41OVoiIHN0eWxlPSJmaWxsOiAjMzU5ZWQzOyIvPgogIDxwYXRoIGQ9Ik0xMDEuNzUsMTkxLjM5Yy0xLjY2LDEuNjYtMy4yMywzLjM3LTQuODUsNS4wNS0xLjYxLDEuNjktMy4yNiwzLjM2LTQuODQsNS4wNi0xMC42NCwxMS41MS0yMC41LDIzLjcyLTI5LjUsMzYuNTYtLjQzLjU5LS44NSwxLjIyLTEuMjgsMS44Mi0uOTksMS40Ni0xLjk5LDIuOTItMi45NSw0LjM4LTEuMDIsMS41Mi0yLjAzLDMuMDYtMy4wMSw0LjU5LS4zNy41Ni0uNzMsMS4xNC0xLjA5LDEuN0MyMC43LDMwMy4xNCwyLjczLDM2Mi44LjMxLDQyMi45NmMtLjA5LDIuMzQtLjE0LDQuNjgtLjIsNy4wMS0uMDQsMi4zMy0uMTIsNC42Ny0uMTIsN2gyMDYuNDljMC0yLjMzLjIxLTQuNjUuMzQtNywuMTItMi4zNC4xNC00LjY4LjM4LTcuMDEsMi42Ny0yNi44OCwxMy4wNS01My4xNCwzMS4xNC03NS4xOCwxLjQ2LTEuNzksMy4xMi0zLjQ4LDQuNzEtNS4yLDEuNTYtMS43NCwzLjAyLTMuNTMsNC42OS01LjJMMTAxLjc1LDE5MS4zOVpNNTI3LjgsMTQwLjE0Yy0uMjctLjE3LS41OC0uMzQtLjg1LS41MS0xLjgyLTEuMTEtMy42NS0yLjE4LTUuNDktMy4yNi0xLjA2LS42MS0yLjEzLTEuMjItMy4xOS0xLjgyLTEuMDktLjYtMi4xNC0xLjItMy4yMy0xLjc5LTEuODctMS4wMi0zLjc0LTIuMDMtNS42MS0zLjAzLS4zLS4xNC0uNTktLjMtLjg5LS40Ni0xMi4xMS02LjMzLTI0LjU0LTExLjktMzcuMjQtMTYuNzQtLjMzLS4xMy0uNjUtLjI2LS45OC0uMzgtMi43Ny0xLjAzLTUuNTQtMi4wNy04LjM0LTMuMDMtMjIuNTYtNy44Ny00NS44OC0xMy40LTY5LjU3LTE2LjUxbC0yLjktLjM5Yy0uOTgtLjEyLTEuOTUtLjIxLTIuOTItLjMxLTEuODctLjIyLTMuNzMtLjQzLTUuNjEtLjYxLS41MS0uMDUtMS4wMy0uMDgtMS41Ny0uMTQtMi4yMS0uMi00LjQ1LS4zOS02LjY3LS41NmwtMi42LS4xNmMtMS45LS4xMi0zLjgzLS4yNi01LjczLS4zNC0xLjAyLS4wNS0yLjA0LS4wOS0zLjA1LS4xMnYyMDYuOTdjMTAuNjIsMS4xLDIxLjE0LDMuMzYsMzEuMzUsNi44M2wxNTIuMzQtMTUyLjMxYy01LjY2LTMuOTItMTEuMzgtNy43NC0xNy4yNi0xMS4zMWgwWiIgc3R5bGU9ImZpbGw6ICM2MmM0ZmY7Ii8+CiAgPHBhdGggZD0iTTM0MC4zNyw4OS44Yy0yLjM0LjA1LTQuNjguMDUtNy4wMS4xNC0xNC42LjU5LTI5LjE4LDIuMDgtNDMuNjQsNC41MS0uMzEuMDUtLjYzLjEtLjk1LjE2LTIuMDMuMzUtNC4wNC43Mi02LjA1LDEuMS0xLjE0LjIyLTIuMjkuNDMtMy40NC42NS0xLjE5LjI0LTIuMzcuNDgtMy41Ni43NS0xLjk2LjQxLTMuOTIuODQtNS44NywxLjI5LS4zNy4wNy0uNzIuMTYtMS4wNy4yNC0yOC45OCw2Ljc3LTU2Ljk5LDE3LjIxLTgzLjMzLDMxLjA3LTEuNzEuOTItMy4zOSwxLjk1LTUuMSwyLjg4LTIuMDQsMS4xMi00LjA4LDIuMjgtNi4xMSwzLjQ0LTEuNS44OC0zLjAzLDEuNjctNC41NCwyLjU2LS4wMS4wMS0uMDQuMDMtLjA1LjAzLS4xLjA3LS4yMS4xMy0uMzEuMTgtLjM5LjI1LS44LjQ0LTEuMTkuNjh2LjAzczMuNjMsNiwzLjYzLDZsMTAyLjk3LDE3MC45M2MyLjAxLTEuMiw0LjA3LTIuMzEsNi4xMi0zLjQxLDIuMDctMS4xMSw0LjE2LTIuMTYsNi4yNi0zLjE1LDE0LjU1LTYuOTUsMzAuMTktMTEuMzMsNDYuMjMtMTIuOTYsMi4zMy0uMjQsNC42NS0uNDMsNy0uNTUsMi4zMy0uMTIsNC42Ny0uMjQsNy4wMS0uMjRWODkuNjVjLTIuMzQsMC00LjY3LjEtNywuMTRoMFoiIHN0eWxlPSJmaWxsOiAjZjZmOyIvPgogIDxwYXRoIGQ9Ik02OTQuMyw0MTkuOWMtLjEtMS44Ni0uMjEtMy43LS4zNC01LjU3LS4wNS0uOTItLjExLTEuODUtLjE4LTIuNzctLjE0LTIuMTgtLjMzLTQuMzctLjU0LTYuNTUtLjA0LS41Ni0uMDktMS4xMi0uMTQtMS42OS0uMjQtMi40NS0uNS00Ljg4LS43OC03LjMxLS4wMy0uMi0uMDQtLjM5LS4wNy0uNTlsLS4wNC0uMjdjLS4zMS0yLjYzLS42Ny01LjI2LTEuMDMtNy44N2wtLjA0LS4yNWMtMi4zOC0xNi41LTUuOTUtMzIuODItMTAuNjctNDguODEtLjA0LS4xMi0uMDctLjIxLS4xLS4zMS0uNzUtMi41LTEuNTItNC45Ny0yLjI5LTcuNDQtLjEyLS4zMy0uMjItLjY1LS4zMy0uOTgtLjczLTIuMjQtMS40OC00LjQ2LTIuMjUtNi42OGwtLjYzLTEuOGMtLjY4LTEuOTItMS4zOS0zLjg0LTIuMDktNS43Ny0uMzUtLjkyLS42OS0xLjgzLTEuMDYtMi43My0uNi0xLjYtMS4yMi0zLjE4LTEuODYtNC43NS0uNS0xLjI3LTEuMDEtMi41MS0xLjUyLTMuNzQtLjUxLTEuMjQtMS4wMy0yLjQ2LTEuNTQtMy42OS0uNjgtMS41Ny0xLjM3LTMuMTQtMi4wNy00LjY5LS4zOS0uODgtLjc4LTEuNzctMS4xOS0yLjY1LS44NS0xLjg2LTEuNzMtMy43My0yLjYtNS41OC0uMjctLjU1LS41NS0xLjEyLS44Mi0xLjY5LTEuMDItMi4xMi0yLjA3LTQuMjUtMy4xNC02LjM0LS4xNC0uMjktLjMtLjU5LS40NC0uODgtMS4xOS0yLjMxLTIuNDItNC42NC0zLjY1LTYuOTMtLjA1LS4wOC0uMDktLjE3LS4xNC0uMjUtNi0xMS4wMy0xMi42LTIxLjc0LTE5Ljc2LTMyLjA2bC0xNTIuMzgsMTUyLjM4YzMuNDYsMTAuMjEsNS43MSwyMC43NCw2LjgxLDMxLjM0aDIwN2MtLjA1LTEuMDMtLjA4LTIuMDctLjEzLTMuMDdoMFoiIHN0eWxlPSJmaWxsOiAjNjJjNGZmOyIvPgogIDxwYXRoIGQ9Ik00ODguMjQsNDM2Ljk3YzAsMi4zNC0uMjIsNC42Ny0uMzQsNy4wMXMtLjE2LDQuNjgtLjM5LDdjLTIuNjcsMjYuOS0xMy4wNCw1My4xNS0zMS4xMyw3NS4yMS0xLjQ2LDEuNzktMy4xMiwzLjQ2LTQuNzEsNS4yLTEuNTcsMS43My0zLjAyLDMuNTItNC42OSw1LjE5bDE0Ni4wMSwxNDUuOThjMS42Ni0xLjY2LDMuMjItMy4zNyw0Ljg0LTUuMDZzMy4yNy0zLjM1LDQuODQtNS4wNmMxMC44LTExLjcsMjAuNjgtMjMuOTQsMjkuNTgtMzYuNjYuMzctLjUxLjY5LTEuMDEsMS4wNS0xLjUsMS4wOS0xLjU2LDIuMTMtMy4xNCwzLjItNC43MS45My0xLjQxLDEuODYtMi44MSwyLjc2LTQuMjQuNDYtLjY4LjktMS4zOSwxLjMzLTIuMDcsMzMuNDktNTIuNTcsNTEuNDEtMTEyLjE3LDUzLjgyLTE3Mi4yOS4wOS0yLjMzLjE0LTQuNjcuMTgtNy4wMS4wNS0yLjMzLjEyLTQuNjUuMTItN2gtMjA2LjQ2WiIgc3R5bGU9ImZpbGw6ICNmNmY7Ii8+CiAgPHBhdGggZD0iTTc1Ni4wNCwyOC4zM2MtMzcuNzctMzcuNzctOTkuMDItMzcuNzctMTM2Ljc5LDAtMzAuMTQsMzAuMTItMzYuMTcsNzUuMTctMTguMjEsMTExLjMzbC0yMTAuNzIsMjEwLjdjLTM2LjE3LTE3Ljk0LTgxLjIyLTExLjkyLTExMS4zNiwxOC4yLTM3Ljc3LDM3Ljc3LTM3Ljc2LDk5LjAyLDAsMTM2Ljc5LDM3Ljc5LDM3Ljc3LDk5LjA0LDM3Ljc2LDEzNi44MiwwLDMwLjE0LTMwLjE0LDM2LjE1LTc1LjE4LDE4LjItMTExLjM1bDIxMC43Mi0yMTAuNjljMzYuMTgsMTcuOTQsODEuMjEsMTEuOTIsMTExLjM1LTE4LjIxLDM3Ljc3LTM3Ljc2LDM3Ljc3LTk5LDAtMTM2Ljc4aDBaIiBzdHlsZT0iZmlsbDogI2ZmZjsiLz4KPC9zdmc+`}goIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiB2aWV3Qm94PSIwIDAgMzIgMzIuMDAwMDAxIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSgwIC0xMDIwLjM2MjIpIj4KICAgIDxlbGxpcHNlIGN4PSItOTA3LjM1NjU3IiBjeT0iNDc5LjkwMDA5IiBmaWxsPSIjMzg0ZTU0IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHJ4PSIzLjU3OTM5OTYiIHJ5PSIzLjgyMDc5NTMiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiIHRyYW5zZm9ybT0ic2NhbGUoLTEgMSkgcm90YXRlKC02MC41NDgpIi8+CiAgICA8ZWxsaXBzZSBjeD0iLTg5MS41NzY1NCIgY3k9IjUwNy44NDYxIiBmaWxsPSIjMzg0ZTU0IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHJ4PSIzLjU3OTM5OTYiIHJ5PSIzLjgyMDc5NTMiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiIHRyYW5zZm9ybT0icm90YXRlKC02MC41NDgpIi8+CiAgICA8cGF0aCBmaWxsPSIjMzg0ZTU0IiBkPSJNMTYuMDkxNjkzIDEwMjEuMzY0MmMtMS4xMDU3NDkuMDEtMi4yMTAzNDEuMDQ5LTMuMzE2MDkuMDlDNi44NDIyNTU4IDEwMjEuNjczOCAyIDEwMjYuMzk0MiAyIDEwMzIuMzYyMnYyMGgyOHYtMjBjMC01Ljk2ODMtNC42NjczNDUtMTAuNDkxMi0xMC41OTAyMy0xMC45MDgtMS4xMDU3NS0uMDc4LTIuMjEyMzI4LS4wOTktMy4zMTgwNzctLjA5eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjNzZlMWZlIiBkPSJNNC42MDc4ODY3IDEwMjUuMDQ2MmMuNDU5NTY0LjI1OTUgMS44MTgyNjIgMS4yMDEzIDEuOTgwOTgzIDEuNjQ4LjE4MzQwMS41MDM1LjE1OTM4NSAxLjA2NTctLjExNDYxNCAxLjU1MS0uMzQ2NjI3LjYxMzgtMS4wMDUzNDEuOTQ4Ny0xLjY5NjQyMS45MzY1LS4zMzk4ODYtLjAxLTEuNzIwMjgzLS42MzcyLTIuMDQyNTYxLS44MTkyLS45Nzc1NC0uNTUxOS0xLjM1MDc5NS0xLjc0MTgtLjgzMzY4Ni0yLjY1NzYuNTE3MTA5LS45MTU4IDEuNzI4NzQ5LTEuMjEwNyAyLjcwNjI5OS0uNjU4N3oiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtzb2xpZC1jb2xvcjojMDAwO3NvbGlkLW9wYWNpdHk6MSIvPgogICAgPHJlY3Qgd2lkdGg9IjMuMDg2NjY1OSIgaGVpZ2h0PSIzLjUzMTM2NjMiIHg9IjE0LjQwNjIxMyIgeT0iMTAzNS42ODQyIiBmaWxsLW9wYWNpdHk9Ii4zMjg1MDI0NiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiByeT0iLjYyNDI2MzI5IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjNzZlMWZlIiBkPSJNMTYgMTAyMy4zNjIyYy05IDAtMTIgMy43MTUzLTEyIDl2MjBoMjRjLS4wNDg4OS03LjM1NjIgMC0xOCAwLTIwIDAtNS4yODQ4LTMtOS0xMi05eiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjNzZlMWZlIiBkPSJNMjcuMDc0MDczIDEwMjUuMDQ2MmMtLjQ1OTU3LjI1OTUtMS44MTgyNTcgMS4yMDEzLTEuOTgwOTc5IDEuNjQ4LS4xODM0MDEuNTAzNS0uMTU5Mzg0IDEuMDY1Ny4xMTQ2MTQgMS41NTEuMzQ2NjI3LjYxMzggMS4wMDUzMzUuOTQ4NyAxLjY5NjQxNS45MzY1LjMzOTg4LS4wMSAxLjcyMDI5LS42MzcyIDIuMDQyNTYtLjgxOTIuOTc3NTQtLjU1MTkgMS4zNTA3OS0xLjc0MTguODMzNjktMi42NTc2LS41MTcxMS0uOTE1OC0xLjcyODc2LTEuMjEwNy0yLjcwNjMtLjY1ODd6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxjaXJjbGUgY3g9IjIxLjE3NTczNCIgY3k9IjEwMzAuMzU0MiIgcj0iNC42NTM3NTQyIiBmaWxsPSIjZmZmIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxjaXJjbGUgY3g9IjEwLjMzOTQ4NiIgY3k9IjEwMzAuMzU0MiIgcj0iNC44MzE2MzQ1IiBmaWxsPSIjZmZmIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxyZWN0IHdpZHRoPSIzLjY2NzM2ODciIGhlaWdodD0iNC4xMDYzNDA5IiB4PSIxNC4xMTU4NjMiIHk9IjEwMzUuOTE3NCIgZmlsbC1vcGFjaXR5PSIuMzI5NDExNzYiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgcnk9Ii43MjU5MDUzNiIgc3R5bGU9Imlzb2xhdGlvbjphdXRvO21peC1ibGVuZC1tb2RlOm5vcm1hbDtzb2xpZC1jb2xvcjojMDAwO3NvbGlkLW9wYWNpdHk6MSIvPgogICAgPHJlY3Qgd2lkdGg9IjMuNjY3MzY4NyIgaGVpZ2h0PSI0LjEwNjM0MDkiIHg9IjE0LjExNTg2MyIgeT0iMTAzNS4yMjUzIiBmaWxsPSIjZmZmY2ZiIiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHJ5PSIuNzI1OTA1MzYiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxwYXRoIGZpbGwtb3BhY2l0eT0iLjMyOTQxMTc2IiBkPSJNMTkuOTk5NzM1IDEwMzYuNTI4OWMwIC44MzgtLjg3MTIyOCAxLjI2ODItMi4xNDQ3NjYgMS4xNjU5LS4wMjM2NiAwLS4wNDc5NS0uNjAwNC0uMjU0MTQ3LS41ODMyLS41MDM2NjkuMDQyLTEuMDk1OTAyLS4wMi0xLjY4NTk2NC0uMDItLjYxMjkzOSAwLTEuMjA2MzQyLjE4MjYtMS42ODU0OS4wMTctLjExMDIzMy0uMDM4LS4xNzgyOTguNTgzOC0uMjYxNTMyLjU4MTYtMS4yNDM2ODUtLjAzMy0yLjA3ODgwMy0uMzM4My0yLjA3ODgwMy0xLjE2MTggMC0xLjIxMTggMS44MTU2MzUtMi4xOTQxIDQuMDU1MzUxLTIuMTk0MSAyLjIzOTcwNCAwIDQuMDU1MzUxLjk4MjMgNC4wNTUzNTEgMi4xOTQxeiIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSIjYzM4Yzc0IiBkPSJNMTkuOTc3NDE0IDEwMzUuNzAwNGMwIC41Njg1LS40MzM2NTkuODU1NC0xLjEzODA5MSAxLjAwMDEtLjI5MTkzMy4wNi0uNjMwMzcxLjA5Ni0xLjAwMzcxOS4xMTY2LS41NjQwNS4wMzItMS4yMDc3ODIuMDMxLTEuODkxMjIuMDMxLS42NzI4MzQgMC0xLjMwNzE4MiAwLTEuODY0OTA0LS4wMjktLjMwNjI2OC0uMDE3LS41ODk0MjktLjA0My0uODQzMTY0LS4wODQtLjgxMzgzMy0uMTMxOC0xLjMyNDk2Mi0uNDE3LTEuMzI0OTYyLTEuMDM0NCAwLTEuMTYwMSAxLjgwNTY0Mi0yLjEwMDYgNC4wMzMwMy0yLjEwMDYgMi4yMjczNzcgMCA0LjAzMzAzLjk0MDUgNC4wMzMwMyAyLjEwMDZ6IiBjb2xvcj0iIzAwMCIgb3ZlcmZsb3c9InZpc2libGUiIHN0eWxlPSJpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7c29saWQtY29sb3I6IzAwMDtzb2xpZC1vcGFjaXR5OjEiLz4KICAgIDxlbGxpcHNlIGN4PSIxNS45NDQzODIiIGN5PSIxMDMzLjg1MDEiIGZpbGw9IiMyMzIwMWYiIGNvbG9yPSIjMDAwIiBvdmVyZmxvdz0idmlzaWJsZSIgcng9IjIuMDgwMTczMyIgcnk9IjEuMzQzNzQ3IiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8Y2lyY2xlIGN4PSIxMi40MTQyMDEiIGN5PSIxMDMwLjM1NDIiIHI9IjEuOTYzMDYzNCIgZmlsbD0iIzE3MTMxMSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8Y2lyY2xlIGN4PSIyMy4xMTAxMjEiIGN5PSIxMDMwLjM1NDIiIHI9IjEuOTYzMDYzNCIgZmlsbD0iIzE3MTMxMSIgY29sb3I9IiMwMDAiIG92ZXJmbG93PSJ2aXNpYmxlIiBzdHlsZT0iaXNvbGF0aW9uOmF1dG87bWl4LWJsZW5kLW1vZGU6bm9ybWFsO3NvbGlkLWNvbG9yOiMwMDA7c29saWQtb3BhY2l0eToxIi8+CiAgICA8cGF0aCBmaWxsPSJub25lIiBzdHJva2U9IiMzODRlNTQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLXdpZHRoPSIuMzk3MzA4NzQiIGQ9Ik01LjAwNTUzNzcgMTAyNy4yNzI3Yy0xLjE3MDQzNS0xLjA4MzUtMi4wMjY5NzMtLjc3MjEtMi4wNDQxNzItLjc0NjMiLz4KICAgIDxwYXRoIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzM4NGU1NCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2Utd2lkdGg9Ii4zOTczMDg3NCIgZD0iTTQuMzg1MjQ1NyAxMDI2LjkxNTJjLTEuMTU4NTU3LjAzNi0xLjM0NjcwNC42MzAzLTEuMzM4ODEuNjUyM20yMy41ODQwOTczLS4zOTUxYzEuMTcwNDMtMS4wODM1IDIuMDI2OTctLjc3MjEgMi4wNDQxNy0uNzQ2MyIvPgogICAgPHBhdGggZmlsbD0ibm9uZSIgc3Ryb2tlPSIjMzg0ZTU0IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS13aWR0aD0iLjM5NzMwODc0IiBkPSJNMjcuMzIxNzczIDEwMjYuNjczYzEuMTU4NTYuMDM2IDEuMzQ2Ny42MzAyIDEuMzM4OC42NTIyIi8+CiAgPC9nPgo8L3N2Zz4=`}typescriptIcon(){return`CjxzdmcgZmlsbD0ibm9uZSIgaGVpZ2h0PSI1MTIiIHZpZXdCb3g9IjAgMCA1MTIgNTEyIiB3aWR0aD0iNTEyIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjxyZWN0IGZpbGw9IiMzMTc4YzYiIGhlaWdodD0iNTEyIiByeD0iNTAiIHdpZHRoPSI1MTIiLz48cmVjdCBmaWxsPSIjMzE3OGM2IiBoZWlnaHQ9IjUxMiIgcng9IjUwIiB3aWR0aD0iNTEyIi8+PHBhdGggY2xpcC1ydWxlPSJldmVub2RkIiBkPSJtMzE2LjkzOSA0MDcuNDI0djUwLjA2MWM4LjEzOCA0LjE3MiAxNy43NjMgNy4zIDI4Ljg3NSA5LjM4NnMyMi44MjMgMy4xMjkgMzUuMTM1IDMuMTI5YzExLjk5OSAwIDIzLjM5Ny0xLjE0NyAzNC4xOTYtMy40NDIgMTAuNzk5LTIuMjk0IDIwLjI2OC02LjA3NSAyOC40MDYtMTEuMzQyIDguMTM4LTUuMjY2IDE0LjU4MS0xMi4xNSAxOS4zMjgtMjAuNjVzNy4xMjEtMTkuMDA3IDcuMTIxLTMxLjUyMmMwLTkuMDc0LTEuMzU2LTE3LjAyNi00LjA2OS0yMy44NTdzLTYuNjI1LTEyLjkwNi0xMS43MzgtMTguMjI1Yy01LjExMi01LjMxOS0xMS4yNDItMTAuMDkxLTE4LjM4OS0xNC4zMTVzLTE1LjIwNy04LjIxMy0yNC4xOC0xMS45NjdjLTYuNTczLTIuNzEyLTEyLjQ2OC01LjM0NS0xNy42ODUtNy45LTUuMjE3LTIuNTU2LTkuNjUxLTUuMTYzLTEzLjMwMy03LjgyMi0zLjY1Mi0yLjY2LTYuNDY5LTUuNDc2LTguNDUxLTguNDQ4LTEuOTgyLTIuOTczLTIuOTc0LTYuMzM2LTIuOTc0LTEwLjA5MSAwLTMuNDQxLjg4Ny02LjU0NCAyLjY2MS05LjMwOHM0LjI3OC01LjEzNiA3LjUxMi03LjExOGMzLjIzNS0xLjk4MSA3LjE5OS0zLjUyIDExLjg5NC00LjYxNSA0LjY5Ni0xLjA5NSA5LjkxMi0xLjY0MiAxNS42NTEtMS42NDIgNC4xNzMgMCA4LjU4MS4zMTMgMTMuMjI0LjkzOCA0LjY0My42MjYgOS4zMTIgMS41OTEgMTQuMDA4IDIuODk0IDQuNjk1IDEuMzA0IDkuMjU5IDIuOTQ3IDEzLjY5NCA0LjkyOCA0LjQzNCAxLjk4MiA4LjUyOSA0LjI3NiAxMi4yODUgNi44ODR2LTQ2Ljc3NmMtNy42MTYtMi45Mi0xNS45MzctNS4wODQtMjQuOTYyLTYuNDkycy0xOS4zODEtMi4xMTItMzEuMDY2LTIuMTEyYy0xMS44OTUgMC0yMy4xNjMgMS4yNzgtMzMuODA1IDMuODMzcy0yMC4wMDYgNi41NDQtMjguMDkzIDExLjk2N2MtOC4wODYgNS40MjQtMTQuNDc2IDEyLjMzMy0xOS4xNzEgMjAuNzI5LTQuNjk1IDguMzk1LTcuMDQzIDE4LjQzMy03LjA0MyAzMC4xMTQgMCAxNC45MTQgNC4zMDQgMjcuNjM4IDEyLjkxMiAzOC4xNzIgOC42MDcgMTAuNTMzIDIxLjY3NSAxOS40NSAzOS4yMDQgMjYuNzUxIDYuODg2IDIuODE2IDEzLjMwMyA1LjU3OSAxOS4yNSA4LjI5MXMxMS4wODYgNS41MjggMTUuNDE1IDguNDQ4YzQuMzMgMi45MiA3Ljc0NyA2LjEwMSAxMC4yNTIgOS41NDMgMi41MDQgMy40NDEgMy43NTYgNy4zNTIgMy43NTYgMTEuNzMzIDAgMy4yMzMtLjc4MyA2LjIzMS0yLjM0OCA4Ljk5NXMtMy45MzkgNS4xNjItNy4xMjEgNy4xOTYtNy4xNDcgMy42MjQtMTEuODk0IDQuNzcxYy00Ljc0OCAxLjE0OC0xMC4zMDMgMS43MjEtMTYuNjY4IDEuNzIxLTEwLjg1MSAwLTIxLjU5Ny0xLjkwMy0zMi4yNC01LjcxLTEwLjY0Mi0zLjgwNi0yMC41MDItOS41MTYtMjkuNTc5LTE3LjEzem0tODQuMTU5LTEyMy4zNDJoNjQuMjJ2LTQxLjA4MmgtMTc5djQxLjA4Mmg2My45MDZ2MTgyLjkxOGg1MC44NzR6IiBmaWxsPSIjZmZmIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiLz48L3N2Zz4=`}csIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnCiAgIHdpZHRoPSIyMDQuOCIKICAgaGVpZ2h0PSIyMDQuOCIKICAgdmlld0JveD0iMCAwIDU0LjE4NjY2NiA1NC4xODY2NjciCiAgIHZlcnNpb249IjEuMSIKICAgaWQ9InN2ZzEiCiAgIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICAgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPGRlZnMKICAgICBpZD0iZGVmczEyIj4KICAgIDxsaW5lYXJHcmFkaWVudAogICAgICAgaWQ9ImEiCiAgICAgICB4MT0iNDYuNzczIgogICAgICAgeDI9IjY5LjkwNyIKICAgICAgIHkxPSI4Ni40NjIiCiAgICAgICB5Mj0iMTI2LjczMiIKICAgICAgIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoLTIzMy45ODMgLTUxOC45NzQpIHNjYWxlKDguNzg5OTYpIgogICAgICAgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8c3RvcAogICAgICAgICBzdG9wLWNvbG9yPSIjOTI3QkU1IgogICAgICAgICBpZD0ic3RvcDEiIC8+CiAgICAgIDxzdG9wCiAgICAgICAgIG9mZnNldD0iMSIKICAgICAgICAgc3RvcC1jb2xvcj0iIzUxMkJENCIKICAgICAgICAgaWQ9InN0b3AyIiAvPgogICAgPC9saW5lYXJHcmFkaWVudD4KICAgIDxmaWx0ZXIKICAgICAgIGlkPSJiIgogICAgICAgd2lkdGg9IjQyLjg0NSIKICAgICAgIGhlaWdodD0iMzkuMTM2IgogICAgICAgeD0iNDQuNjI5IgogICAgICAgeT0iOTEuODkiCiAgICAgICBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiCiAgICAgICBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiPgogICAgICA8ZmVGbG9vZAogICAgICAgICBmbG9vZC1vcGFjaXR5PSIwIgogICAgICAgICByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIKICAgICAgICAgaWQ9ImZlRmxvb2QyIiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICBpbj0iU291cmNlQWxwaGEiCiAgICAgICAgIHJlc3VsdD0iaGFyZEFscGhhIgogICAgICAgICB0eXBlPSJtYXRyaXgiCiAgICAgICAgIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4MiIgLz4KICAgICAgPGZlT2Zmc2V0CiAgICAgICAgIGlkPSJmZU9mZnNldDIiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXgzIiAvPgogICAgICA8ZmVCbGVuZAogICAgICAgICBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIKICAgICAgICAgbW9kZT0ibm9ybWFsIgogICAgICAgICByZXN1bHQ9ImVmZmVjdDFfZHJvcFNoYWRvd18yMDM3XzI4MDAiCiAgICAgICAgIGlkPSJmZUJsZW5kMyIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgaW49IlNvdXJjZUFscGhhIgogICAgICAgICByZXN1bHQ9ImhhcmRBbHBoYSIKICAgICAgICAgdHlwZT0ibWF0cml4IgogICAgICAgICB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDEyNyAwIgogICAgICAgICBpZD0iZmVDb2xvck1hdHJpeDQiIC8+CiAgICAgIDxmZU9mZnNldAogICAgICAgICBkeT0iMSIKICAgICAgICAgaWQ9ImZlT2Zmc2V0NCIgLz4KICAgICAgPGZlR2F1c3NpYW5CbHVyCiAgICAgICAgIHN0ZERldmlhdGlvbj0iMi40OTkiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjQiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXg1IiAvPgogICAgICA8ZmVCbGVuZAogICAgICAgICBpbjI9ImVmZmVjdDFfZHJvcFNoYWRvd18yMDM3XzI4MDAiCiAgICAgICAgIG1vZGU9Im5vcm1hbCIKICAgICAgICAgcmVzdWx0PSJlZmZlY3QyX2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBpZD0iZmVCbGVuZDUiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIGluPSJTb3VyY2VBbHBoYSIKICAgICAgICAgcmVzdWx0PSJoYXJkQWxwaGEiCiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAxMjcgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXg2IiAvPgogICAgICA8ZmVPZmZzZXQKICAgICAgICAgZHk9IjQiCiAgICAgICAgIGlkPSJmZU9mZnNldDYiIC8+CiAgICAgIDxmZUdhdXNzaWFuQmx1cgogICAgICAgICBzdGREZXZpYXRpb249IjIiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjYiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjA5IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4NyIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW4yPSJlZmZlY3QyX2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBtb2RlPSJub3JtYWwiCiAgICAgICAgIHJlc3VsdD0iZWZmZWN0M19kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgaWQ9ImZlQmxlbmQ3IiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICBpbj0iU291cmNlQWxwaGEiCiAgICAgICAgIHJlc3VsdD0iaGFyZEFscGhhIgogICAgICAgICB0eXBlPSJtYXRyaXgiCiAgICAgICAgIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4OCIgLz4KICAgICAgPGZlT2Zmc2V0CiAgICAgICAgIGR5PSI5IgogICAgICAgICBpZD0iZmVPZmZzZXQ4IiAvPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIyLjUiCiAgICAgICAgIGlkPSJmZUdhdXNzaWFuQmx1cjgiIC8+CiAgICAgIDxmZUNvbG9yTWF0cml4CiAgICAgICAgIHR5cGU9Im1hdHJpeCIKICAgICAgICAgdmFsdWVzPSIwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwLjA1IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4OSIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW4yPSJlZmZlY3QzX2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBtb2RlPSJub3JtYWwiCiAgICAgICAgIHJlc3VsdD0iZWZmZWN0NF9kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgaWQ9ImZlQmxlbmQ5IiAvPgogICAgICA8ZmVDb2xvck1hdHJpeAogICAgICAgICBpbj0iU291cmNlQWxwaGEiCiAgICAgICAgIHJlc3VsdD0iaGFyZEFscGhhIgogICAgICAgICB0eXBlPSJtYXRyaXgiCiAgICAgICAgIHZhbHVlcz0iMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMTI3IDAiCiAgICAgICAgIGlkPSJmZUNvbG9yTWF0cml4MTAiIC8+CiAgICAgIDxmZU9mZnNldAogICAgICAgICBkeT0iMTUiCiAgICAgICAgIGlkPSJmZU9mZnNldDEwIiAvPgogICAgICA8ZmVHYXVzc2lhbkJsdXIKICAgICAgICAgc3RkRGV2aWF0aW9uPSIzIgogICAgICAgICBpZD0iZmVHYXVzc2lhbkJsdXIxMCIgLz4KICAgICAgPGZlQ29sb3JNYXRyaXgKICAgICAgICAgdHlwZT0ibWF0cml4IgogICAgICAgICB2YWx1ZXM9IjAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAuMDEgMCIKICAgICAgICAgaWQ9ImZlQ29sb3JNYXRyaXgxMSIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW4yPSJlZmZlY3Q0X2Ryb3BTaGFkb3dfMjAzN18yODAwIgogICAgICAgICBtb2RlPSJub3JtYWwiCiAgICAgICAgIHJlc3VsdD0iZWZmZWN0NV9kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgaWQ9ImZlQmxlbmQxMSIgLz4KICAgICAgPGZlQmxlbmQKICAgICAgICAgaW49IlNvdXJjZUdyYXBoaWMiCiAgICAgICAgIGluMj0iZWZmZWN0NV9kcm9wU2hhZG93XzIwMzdfMjgwMCIKICAgICAgICAgbW9kZT0ibm9ybWFsIgogICAgICAgICByZXN1bHQ9InNoYXBlIgogICAgICAgICBpZD0iZmVCbGVuZDEyIiAvPgogICAgPC9maWx0ZXI+CiAgPC9kZWZzPgogIDxwYXRoCiAgICAgZD0iTTEzNS43MzEgMjg1Ljg1djE3My45M2MwIDIxLjUxNyAxMS40NzggNDEuNDE4IDMwLjEyNSA1Mi4xNjhsMTUwLjYyNCA4Ni45NzZhNjAuMjIzIDYwLjIyMyAwIDAgMCA2MC4yNSAwbDE1MC42MjMtODYuOTc2YTYwLjIzNyA2MC4yMzcgMCAwIDAgMzAuMTI0LTUyLjE2OVYyODUuODUxYzAtMjEuNTI1LTExLjQ3Ny00MS40MjMtMzAuMTI0LTUyLjE3N0wzNzYuNzI5IDE0Ni43MmE2MC4yMSA2MC4yMSAwIDAgMC02MC4yNDkgMGwtMTUwLjYyNCA4Ni45NTRhNjAuMjQ1IDYwLjI0NSAwIDAgMC0zMC4xMjUgNTIuMTc3eiIKICAgICBmaWxsPSJ1cmwoI2EpIgogICAgIHRyYW5zZm9ybT0ibWF0cml4KC4xIDAgMCAuMSAtNy41NjcgLTEwLjE4OSkiCiAgICAgaWQ9InBhdGgxMiIgLz4KICA8cGF0aAogICAgIGQ9Ik01NC4wNTYgOTguMDN2Ni44NTVhMS43MTEgMS43MTEgMCAwIDAgMS43MTQgMS43MTQgMS43MTMgMS43MTMgMCAwIDAgMS43MTQtMS43MTQgMS43MTMgMS43MTMgMCAxIDEgMy40MjcgMCA1LjE0IDUuMTQgMCAxIDEtMTAuMjgyIDB2LTYuODU0YTUuMTQgNS4xNCAwIDEgMSAxMC4yODIgMCAxLjcxMiAxLjcxMiAwIDEgMS0zLjQyNyAwIDEuNzEyIDEuNzEyIDAgMSAwLTMuNDI3IDB6bTI3LjQxOCA2Ljg1NWExLjcxMiAxLjcxMiAwIDAgMS0xLjcxNCAxLjcxNGgtMS43MTR2MS43MTNjMCAuNDU1LS4xOC44OTEtLjUwMiAxLjIxMmExLjcxIDEuNzEgMCAwIDEtMi40MjMgMCAxLjcxOSAxLjcxOSAwIDAgMS0uNTAyLTEuMjEydi0xLjcxM2gtMy40Mjd2MS43MTNhMS43MSAxLjcxIDAgMCAxLTEuNzE0IDEuNzE0IDEuNzEgMS43MSAwIDAgMS0xLjcxMy0xLjcxNHYtMS43MTNINjYuMDVhMS43MTMgMS43MTMgMCAxIDEgMC0zLjQyN2gxLjcxNHYtMy40MjdINjYuMDVhMS43MTIgMS43MTIgMCAxIDEgMC0zLjQyN2gxLjcxNHYtMS43MTRhMS43MTMgMS43MTMgMCAxIDEgMy40MjcgMHYxLjcxM2gzLjQyN3YtMS43MTNhMS43MTIgMS43MTIgMCAxIDEgMy40MjcgMHYxLjcxM2gxLjcxNGMuNDU0IDAgLjg5LjE4IDEuMjExLjUwMmExLjcxIDEuNzEgMCAwIDEgMCAyLjQyMyAxLjcxMiAxLjcxMiAwIDAgMS0xLjIxMS41MDNoLTEuNzE0djMuNDI3aDEuNzE0YTEuNzE4IDEuNzE4IDAgMCAxIDEuNzE0IDEuNzEzem0tNi44NTUtNS4xNGgtMy40Mjd2My40MjdoMy40Mjd6IgogICAgIGZpbGw9IiNmZmYiCiAgICAgZmlsdGVyPSJ1cmwoI2IpIgogICAgIHN0eWxlPSJtaXgtYmxlbmQtbW9kZTpzY3JlZW4iCiAgICAgdHJhbnNmb3JtPSJtYXRyaXgoLjg3OSAwIDAgLjg3OSAtMzAuOTY1IC02Mi4wODYpIgogICAgIGlkPSJwYXRoMTMiIC8+Cjwvc3ZnPgo=`}cIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJubyI/Pgo8c3ZnCiAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgeG1sbnM6Y2M9Imh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL25zIyIKICAgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIgogICB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIgogICB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciCiAgIHhtbG5zOnNvZGlwb2RpPSJodHRwOi8vc29kaXBvZGkuc291cmNlZm9yZ2UubmV0L0RURC9zb2RpcG9kaS0wLmR0ZCIKICAgeG1sbnM6aW5rc2NhcGU9Imh0dHA6Ly93d3cuaW5rc2NhcGUub3JnL25hbWVzcGFjZXMvaW5rc2NhcGUiCiAgIHZpZXdCb3g9IjAgMCAzOC4wMDAwODkgNDIuMDAwMDMxIgogICB3aWR0aD0iMzgwLjAwMDg5IgogICBoZWlnaHQ9IjQyMC4wMDAzMSIKICAgdmVyc2lvbj0iMS4xIgogICBpZD0ic3ZnMTAiCiAgIHNvZGlwb2RpOmRvY25hbWU9Imljb25zOC1jLXByb2dyYW1taW5nLnN2ZyIKICAgaW5rc2NhcGU6dmVyc2lvbj0iMS4wLjEgKDNiYzJlODEzZjUsIDIwMjAtMDktMDcpIj4KICA8bWV0YWRhdGEKICAgICBpZD0ibWV0YWRhdGExNiI+CiAgICA8cmRmOlJERj4KICAgICAgPGNjOldvcmsKICAgICAgICAgcmRmOmFib3V0PSIiPgogICAgICAgIDxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PgogICAgICAgIDxkYzp0eXBlCiAgICAgICAgICAgcmRmOnJlc291cmNlPSJodHRwOi8vcHVybC5vcmcvZGMvZGNtaXR5cGUvU3RpbGxJbWFnZSIgLz4KICAgICAgICA8ZGM6dGl0bGU+PC9kYzp0aXRsZT4KICAgICAgPC9jYzpXb3JrPgogICAgPC9yZGY6UkRGPgogIDwvbWV0YWRhdGE+CiAgPGRlZnMKICAgICBpZD0iZGVmczE0IiAvPgogIDxzb2RpcG9kaTpuYW1lZHZpZXcKICAgICBwYWdlY29sb3I9IiNmZmZmZmYiCiAgICAgYm9yZGVyY29sb3I9IiM2NjY2NjYiCiAgICAgYm9yZGVyb3BhY2l0eT0iMSIKICAgICBvYmplY3R0b2xlcmFuY2U9IjEwIgogICAgIGdyaWR0b2xlcmFuY2U9IjEwIgogICAgIGd1aWRldG9sZXJhbmNlPSIxMCIKICAgICBpbmtzY2FwZTpwYWdlb3BhY2l0eT0iMCIKICAgICBpbmtzY2FwZTpwYWdlc2hhZG93PSIyIgogICAgIGlua3NjYXBlOndpbmRvdy13aWR0aD0iMTkyMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctaGVpZ2h0PSIxMDU2IgogICAgIGlkPSJuYW1lZHZpZXcxMiIKICAgICBzaG93Z3JpZD0iZmFsc2UiCiAgICAgZml0LW1hcmdpbi10b3A9IjAiCiAgICAgZml0LW1hcmdpbi1sZWZ0PSIwIgogICAgIGZpdC1tYXJnaW4tcmlnaHQ9IjAiCiAgICAgZml0LW1hcmdpbi1ib3R0b209IjAiCiAgICAgaW5rc2NhcGU6em9vbT0iMS40ODk1ODMzIgogICAgIGlua3NjYXBlOmN4PSIxOTAiCiAgICAgaW5rc2NhcGU6Y3k9IjIxMC4wMDI4MiIKICAgICBpbmtzY2FwZTp3aW5kb3cteD0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3cteT0iMCIKICAgICBpbmtzY2FwZTp3aW5kb3ctbWF4aW1pemVkPSIxIgogICAgIGlua3NjYXBlOmN1cnJlbnQtbGF5ZXI9InN2ZzEwIiAvPgogIDxwYXRoCiAgICAgZmlsbD0iIzI4MzU5MyIKICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgZD0ibSAxNy45MDMsMC4yODYyODE2NiBjIDAuNjc5LC0wLjM4MSAxLjUxNSwtMC4zODEgMi4xOTMsMCBDIDIzLjQ1MSwyLjE2OTI4MTcgMzMuNTQ3LDcuODM3MjgxNyAzNi45MDMsOS43MjAyODE3IDM3LjU4MiwxMC4xMDAyODIgMzgsMTAuODA0MjgyIDM4LDExLjU2NjI4MiBjIDAsMy43NjYgMCwxNS4xMDEgMCwxOC44NjcgMCwwLjc2MiAtMC40MTgsMS40NjYgLTEuMDk3LDEuODQ3IC0zLjM1NSwxLjg4MyAtMTMuNDUxLDcuNTUxIC0xNi44MDcsOS40MzQgLTAuNjc5LDAuMzgxIC0xLjUxNSwwLjM4MSAtMi4xOTMsMCAtMy4zNTUsLTEuODgzIC0xMy40NTEsLTcuNTUxIC0xNi44MDcsLTkuNDM0IC0wLjY3OCwtMC4zODEgLTEuMDk2LC0xLjA4NCAtMS4wOTYsLTEuODQ2IDAsLTMuNzY2IDAsLTE1LjEwMSAwLC0xOC44NjcgMCwtMC43NjIgMC40MTgsLTEuNDY2IDEuMDk3LC0xLjg0NzAwMDMgMy4zNTQsLTEuODgzIDEzLjQ1MiwtNy41NTEgMTYuODA2LC05LjQzNDAwMDA0IHoiCiAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgIGlkPSJwYXRoMiIKICAgICBzdHlsZT0iZmlsbDojMDA0NDgyO2ZpbGwtb3BhY2l0eToxIiAvPgogIDxwYXRoCiAgICAgZmlsbD0iIzVjNmJjMCIKICAgICBmaWxsLXJ1bGU9ImV2ZW5vZGQiCiAgICAgZD0ibSAwLjMwNCwzMS40MDQyODIgYyAtMC4yNjYsLTAuMzU2IC0wLjMwNCwtMC42OTQgLTAuMzA0LC0xLjE0OSAwLC0zLjc0NCAwLC0xNS4wMTQgMCwtMTguNzU5IDAsLTAuNzU4IDAuNDE3LC0xLjQ1OCAxLjA5NCwtMS44MzYwMDAzIDMuMzQzLC0xLjg3MiAxMy40MDUsLTcuNTA3IDE2Ljc0OCwtOS4zODAwMDAwNCAwLjY3NywtMC4zNzkgMS41OTQsLTAuMzcxIDIuMjcxLDAuMDA4IDMuMzQzLDEuODcyMDAwMDQgMTMuMzcxLDcuNDU5MDAwMDQgMTYuNzE0LDkuMzMxMDAwMDQgMC4yNywwLjE1MiAwLjQ3NiwwLjMzNSAwLjY2LDAuNTc2MDAwMyB6IgogICAgIGNsaXAtcnVsZT0iZXZlbm9kZCIKICAgICBpZD0icGF0aDQiCiAgICAgc3R5bGU9ImZpbGw6IzY1OWFkMjtmaWxsLW9wYWNpdHk6MSIgLz4KICA8cGF0aAogICAgIGZpbGw9IiNmZmZmZmYiCiAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgIGQ9Im0gMTksNy4wMDAyODE3IGMgNy43MjcsMCAxNCw2LjI3MzAwMDMgMTQsMTQuMDAwMDAwMyAwLDcuNzI3IC02LjI3MywxNCAtMTQsMTQgLTcuNzI3LDAgLTE0LC02LjI3MyAtMTQsLTE0IDAsLTcuNzI3IDYuMjczLC0xNC4wMDAwMDAzIDE0LC0xNC4wMDAwMDAzIHogbSAwLDcuMDAwMDAwMyBjIDMuODYzLDAgNywzLjEzNiA3LDcgMCwzLjg2MyAtMy4xMzcsNyAtNyw3IC0zLjg2MywwIC03LC0zLjEzNyAtNywtNyAwLC0zLjg2NCAzLjEzNiwtNyA3LC03IHoiCiAgICAgY2xpcC1ydWxlPSJldmVub2RkIgogICAgIGlkPSJwYXRoNiIgLz4KICA8cGF0aAogICAgIGZpbGw9IiMzOTQ5YWIiCiAgICAgZmlsbC1ydWxlPSJldmVub2RkIgogICAgIGQ9Im0gMzcuNDg1LDEwLjIwNTI4MiBjIDAuNTE2LDAuNDgzIDAuNTA2LDEuMjExIDAuNTA2LDEuNzg0IDAsMy43OTUgLTAuMDMyLDE0LjU4OSAwLjAwOSwxOC4zODQgMC4wMDQsMC4zOTYgLTAuMTI3LDAuODEzIC0wLjMyMywxLjEyNyBsIC0xOS4wODQsLTEwLjUgeiIKICAgICBjbGlwLXJ1bGU9ImV2ZW5vZGQiCiAgICAgaWQ9InBhdGg4IgogICAgIHN0eWxlPSJmaWxsOiMwMDU5OWM7ZmlsbC1vcGFjaXR5OjEiIC8+Cjwvc3ZnPgo=`}cppIcon(){return`Cjw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9InV0Zi04Ij8+CjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAxNi4wLjQsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4KPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KPHN2ZyB2ZXJzaW9uPSIxLjEiIGlkPSJMYXllcl8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB3aWR0aD0iMzA2cHgiIGhlaWdodD0iMzQ0LjM1cHgiIHZpZXdCb3g9IjAgMCAzMDYgMzQ0LjM1IiBlbmFibGUtYmFja2dyb3VuZD0ibmV3IDAgMCAzMDYgMzQ0LjM1IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHBhdGggZmlsbD0iIzAwNTk5QyIgZD0iTTMwMi4xMDcsMjU4LjI2MmMyLjQwMS00LjE1OSwzLjg5My04Ljg0NSwzLjg5My0xMy4wNTNWOTkuMTRjMC00LjIwOC0xLjQ5LTguODkzLTMuODkyLTEzLjA1MkwxNTMsMTcyLjE3NQoJTDMwMi4xMDcsMjU4LjI2MnoiLz4KPHBhdGggZmlsbD0iIzAwNDQ4MiIgZD0iTTE2Ni4yNSwzNDEuMTkzbDEyNi41LTczLjAzNGMzLjY0NC0yLjEwNCw2Ljk1Ni01LjczNyw5LjM1Ny05Ljg5N0wxNTMsMTcyLjE3NUwzLjg5MywyNTguMjYzCgljMi40MDEsNC4xNTksNS43MTQsNy43OTMsOS4zNTcsOS44OTZsMTI2LjUsNzMuMDM0QzE0Ny4wMzcsMzQ1LjQwMSwxNTguOTYzLDM0NS40MDEsMTY2LjI1LDM0MS4xOTN6Ii8+CjxwYXRoIGZpbGw9IiM2NTlBRDIiIGQ9Ik0zMDIuMTA4LDg2LjA4N2MtMi40MDItNC4xNi01LjcxNS03Ljc5My05LjM1OC05Ljg5N0wxNjYuMjUsMy4xNTZjLTcuMjg3LTQuMjA4LTE5LjIxMy00LjIwOC0yNi41LDAKCUwxMy4yNSw3Ni4xOUM1Ljk2Miw4MC4zOTcsMCw5MC43MjUsMCw5OS4xNHYxNDYuMDY5YzAsNC4yMDgsMS40OTEsOC44OTQsMy44OTMsMTMuMDUzTDE1MywxNzIuMTc1TDMwMi4xMDgsODYuMDg3eiIvPgo8Zz4KCTxwYXRoIGZpbGw9IiNGRkZGRkYiIGQ9Ik0xNTMsMjc0LjE3NWMtNTYuMjQzLDAtMTAyLTQ1Ljc1Ny0xMDItMTAyczQ1Ljc1Ny0xMDIsMTAyLTEwMmMzNi4yOTIsMCw3MC4xMzksMTkuNTMsODguMzMxLDUwLjk2OAoJCWwtNDQuMTQzLDI1LjU0NGMtOS4xMDUtMTUuNzM2LTI2LjAzOC0yNS41MTItNDQuMTg4LTI1LjUxMmMtMjguMTIyLDAtNTEsMjIuODc4LTUxLDUxYzAsMjguMTIxLDIyLjg3OCw1MSw1MSw1MQoJCWMxOC4xNTIsMCwzNS4wODUtOS43NzYsNDQuMTkxLTI1LjUxNWw0NC4xNDMsMjUuNTQzQzIyMy4xNDIsMjU0LjY0NCwxODkuMjk0LDI3NC4xNzUsMTUzLDI3NC4xNzV6Ii8+CjwvZz4KPGc+Cgk8cG9seWdvbiBmaWxsPSIjRkZGRkZGIiBwb2ludHM9IjI1NSwxNjYuNTA4IDI0My42NjYsMTY2LjUwOCAyNDMuNjY2LDE1NS4xNzUgMjMyLjMzNCwxNTUuMTc1IDIzMi4zMzQsMTY2LjUwOCAyMjEsMTY2LjUwOCAKCQkyMjEsMTc3Ljg0MSAyMzIuMzM0LDE3Ny44NDEgMjMyLjMzNCwxODkuMTc1IDI0My42NjYsMTg5LjE3NSAyNDMuNjY2LDE3Ny44NDEgMjU1LDE3Ny44NDEgCSIvPgo8L2c+CjxnPgoJPHBvbHlnb24gZmlsbD0iI0ZGRkZGRiIgcG9pbnRzPSIyOTcuNSwxNjYuNTA4IDI4Ni4xNjYsMTY2LjUwOCAyODYuMTY2LDE1NS4xNzUgMjc0LjgzNCwxNTUuMTc1IDI3NC44MzQsMTY2LjUwOCAyNjMuNSwxNjYuNTA4IAoJCTI2My41LDE3Ny44NDEgMjc0LjgzNCwxNzcuODQxIDI3NC44MzQsMTg5LjE3NSAyODYuMTY2LDE4OS4xNzUgMjg2LjE2NiwxNzcuODQxIDI5Ny41LDE3Ny44NDEgCSIvPgo8L2c+Cjwvc3ZnPgo=`}zigLogo(){return`CjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2aWV3Qm94PSIwIDAgMTUzIDE0MCI+CjxnIGZpbGw9IiNmN2E0MWQiPgoJPGc+CgkJPHBvbHlnb24gcG9pbnRzPSI0NiwyMiAyOCw0NCAxOSwzMCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iNDYsMjIgMzMsMzMgMjgsNDQgMjIsNDQgMjIsOTUgMzEsOTUgMjAsMTAwIDEyLDExNyAwLDExNyAwLDIyIiBzaGFwZS1yZW5kZXJpbmc9ImNyaXNwRWRnZXMiLz4KCQk8cG9seWdvbiBwb2ludHM9IjMxLDk1IDEyLDExNyA0LDEwNiIvPgoJPC9nPgoJPGc+CgkJPHBvbHlnb24gcG9pbnRzPSI1NiwyMiA2MiwzNiAzNyw0NCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iNTYsMjIgMTExLDIyIDExMSw0NCAzNyw0NCA1NiwzMiIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIi8+CgkJPHBvbHlnb24gcG9pbnRzPSIxMTYsOTUgOTcsMTE3IDkwLDEwNCIvPgoJCTxwb2x5Z29uIHBvaW50cz0iMTE2LDk1IDEwMCwxMDQgOTcsMTE3IDQyLDExNyA0Miw5NSIgc2hhcGUtcmVuZGVyaW5nPSJjcmlzcEVkZ2VzIi8+CgkJPHBvbHlnb24gcG9pbnRzPSIxNTAsMCA1MiwxMTcgMywxNDAgMTAxLDIyIi8+Cgk8L2c+Cgk8Zz4KCQk8cG9seWdvbiBwb2ludHM9IjE0MSwyMiAxNDAsNDAgMTIyLDQ1Ii8+CgkJPHBvbHlnb24gcG9pbnRzPSIxNTMsMjIgMTUzLDExNyAxMDYsMTE3IDEyMCwxMDUgMTI1LDk1IDEzMSw5NSAxMzEsNDUgMTIyLDQ1IDEzMiwzNiAxNDEsMjIiIHNoYXBlLXJlbmRlcmluZz0iY3Jpc3BFZGdlcyIvPgoJCTxwb2x5Z29uIHBvaW50cz0iMTI1LDk1IDEzMCwxMTAgMTA2LDExNyIvPgoJPC9nPgo8L2c+Cjwvc3ZnPgo=`}render(){let e=aie.getIconForType(this.getNodeTypeFromIcon(this.icon));switch(this.icon){case Cr.OPENAPI:return M``;case Cr.GO:return M``;case Cr.TS:return M``;case Cr.CS:return M``;case Cr.C:return M``;case Cr.CPP:return M``;case Cr.ZIG:return M``}return M` `}};yr.styles=[uie,die,fie,fr],gr([Kt()],yr.prototype,`icon`,void 0),gr([Kt({type:_r})],yr.prototype,`size`,void 0),gr([Kt({type:vr})],yr.prototype,`color`,void 0),gr([Kt()],yr.prototype,`tooltip`,void 0),yr=pie=gr([Gt(`pb33f-model-icon`)],yr);var mie=nt` + style="font-size: ${this.getSize()}; color: ${this.getIconColor()}">`}};Dr.styles=[nie,rie,iie,br],wr([qt()],Dr.prototype,`icon`,void 0),wr([qt({type:Tr})],Dr.prototype,`size`,void 0),wr([qt({type:Er})],Dr.prototype,`color`,void 0),wr([qt()],Dr.prototype,`tooltip`,void 0),Dr=aie=wr([Kt(`pb33f-model-icon`)],Dr);var oie=nt` sl-alert::part(message) { padding-bottom: var(--global-padding); color: var(--font-color); @@ -3076,7 +3076,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value box-shadow: 0 0 8px var(--warn-200); } } -`,hie=nt` +`,sie=nt` strong { display: block; @@ -3179,7 +3179,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value padding-bottom: var(--global-padding); } -`,br=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},xr;(function(e){e.Context=`context`,e.Info=`info`,e.Success=`success`,e.Question=`question`,e.Warning=`warning`,e.Error=`error`,e.Danger=`danger`})(xr||={});var Sr=class extends zt{constructor(){super(),this.type=xr.Context,this.closeable=!1}hide(){this.alert.hide()}show(){this.alert.show()}getIcon(){switch(this.type){case xr.Context:return`braces-asterisk`;case xr.Info:return`info-square`;case xr.Warning:return`exclamation-triangle`;case xr.Error:return`exclamation-square`;case xr.Danger:return`exclamation-square`;case xr.Success:return`check-square`;case xr.Question:return`question-square`}}render(){this.type||=xr.Context,this.type===xr.Danger&&(this.type=xr.Error);let e=M``;this.headerText?.length>0&&(e=M`${this.headerText}`);let t=M` +`,Or=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},kr;(function(e){e.Context=`context`,e.Info=`info`,e.Success=`success`,e.Question=`question`,e.Warning=`warning`,e.Error=`error`,e.Danger=`danger`})(kr||={});var Ar=class extends Bt{constructor(){super(),this.type=kr.Context,this.closeable=!1}hide(){this.alert.hide()}show(){this.alert.show()}getIcon(){switch(this.type){case kr.Context:return`braces-asterisk`;case kr.Info:return`info-square`;case kr.Warning:return`exclamation-triangle`;case kr.Error:return`exclamation-square`;case kr.Danger:return`exclamation-square`;case kr.Success:return`check-square`;case kr.Question:return`question-square`}}render(){this.type||=kr.Context,this.type===kr.Danger&&(this.type=kr.Error);let e=M``;this.headerText?.length>0&&(e=M`${this.headerText}`);let t=M` ${e} @@ -3193,7 +3193,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value
${t}
- `}};Sr.styles=[hie,mie],br([Kt()],Sr.prototype,`type`,void 0),br([Kt()],Sr.prototype,`headerText`,void 0),br([Kt({type:Boolean})],Sr.prototype,`closeable`,void 0),br([Jt(`sl-alert`)],Sr.prototype,`alert`,void 0),Sr=br([Gt(`pb33f-attention-box`)],Sr);var gie=nt` + `}};Ar.styles=[sie,oie],Or([qt()],Ar.prototype,`type`,void 0),Or([qt()],Ar.prototype,`headerText`,void 0),Or([qt({type:Boolean})],Ar.prototype,`closeable`,void 0),Or([Yt(`sl-alert`)],Ar.prototype,`alert`,void 0),Ar=Or([Kt(`pb33f-attention-box`)],Ar);var cie=nt` .paginator-navigation { display: flex; justify-content: space-between; @@ -3230,7 +3230,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value display: none; } -`,_ie=`paginatorFirstPage`,vie=`paginatorLastPage`,yie=`paginatorNextPage`,bie=`paginatorPreviousPage`,Cr=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},wr=class extends zt{get hide(){return this.totalItems<=this.itemsPerPage}constructor(){super(),this.currentPage=1,this.totalPages=0,this.totalItems=0,this.itemsPerPage=20,this.label=`Problems`}getRangeStart(){let e=this.currentPage*this.itemsPerPage-this.itemsPerPage;return e==0?0:e>0?e:0}getPagesRemaining(){let e=this.totalItems-this.currentPage*this.itemsPerPage;return e>0?e:0}getRangeEnd(){let e=this.getRangeStart();e==1&&(e=0);let t=e+this.itemsPerPage;return t>this.totalItems?this.totalItems:t>=0?t:0}nextPage(){this.currentPage1&&this.dispatchEvent(new CustomEvent(bie,{composed:!0}))}lastPage(){this.currentPage1&&this.dispatchEvent(new CustomEvent(_ie,{composed:!0}))}togglePrev(e){this.homeButton&&(this.prevButton.disabled=e,this.homeButton.disabled=e)}toggleNext(e){this.endButton&&(this.nextButton.disabled=e,this.endButton.disabled=e)}updated(){this.togglePrev(this.currentPage===1),this.toggleNext(this.currentPage===this.totalPages)}render(){return this.totalItems==0?M``:M` +`,lie=`paginatorFirstPage`,uie=`paginatorLastPage`,die=`paginatorNextPage`,fie=`paginatorPreviousPage`,jr=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Mr=class extends Bt{get hide(){return this.totalItems<=this.itemsPerPage}constructor(){super(),this.currentPage=1,this.totalPages=0,this.totalItems=0,this.itemsPerPage=20,this.label=`Problems`}getRangeStart(){let e=this.currentPage*this.itemsPerPage-this.itemsPerPage;return e==0?0:e>0?e:0}getPagesRemaining(){let e=this.totalItems-this.currentPage*this.itemsPerPage;return e>0?e:0}getRangeEnd(){let e=this.getRangeStart();e==1&&(e=0);let t=e+this.itemsPerPage;return t>this.totalItems?this.totalItems:t>=0?t:0}nextPage(){this.currentPage1&&this.dispatchEvent(new CustomEvent(fie,{composed:!0}))}lastPage(){this.currentPage1&&this.dispatchEvent(new CustomEvent(lie,{composed:!0}))}togglePrev(e){this.homeButton&&(this.prevButton.disabled=e,this.homeButton.disabled=e)}toggleNext(e){this.endButton&&(this.nextButton.disabled=e,this.endButton.disabled=e)}updated(){this.togglePrev(this.currentPage===1),this.toggleNext(this.currentPage===this.totalPages)}render(){return this.totalItems==0?M``:M`
@@ -3253,7 +3253,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value
- `}};wr.styles=[gie],Cr([qt()],wr.prototype,`currentPage`,void 0),Cr([qt()],wr.prototype,`totalPages`,void 0),Cr([qt()],wr.prototype,`totalItems`,void 0),Cr([qt()],wr.prototype,`itemsPerPage`,void 0),Cr([Jt(`.home`)],wr.prototype,`homeButton`,void 0),Cr([Jt(`.previous`)],wr.prototype,`prevButton`,void 0),Cr([Jt(`.next`)],wr.prototype,`nextButton`,void 0),Cr([Jt(`.end`)],wr.prototype,`endButton`,void 0),Cr([Kt()],wr.prototype,`label`,void 0),wr=Cr([Gt(`pb33f-paginator`)],wr);var xie=nt` + `}};Mr.styles=[cie],jr([Jt()],Mr.prototype,`currentPage`,void 0),jr([Jt()],Mr.prototype,`totalPages`,void 0),jr([Jt()],Mr.prototype,`totalItems`,void 0),jr([Jt()],Mr.prototype,`itemsPerPage`,void 0),jr([Yt(`.home`)],Mr.prototype,`homeButton`,void 0),jr([Yt(`.previous`)],Mr.prototype,`prevButton`,void 0),jr([Yt(`.next`)],Mr.prototype,`nextButton`,void 0),jr([Yt(`.end`)],Mr.prototype,`endButton`,void 0),jr([qt()],Mr.prototype,`label`,void 0),Mr=jr([Kt(`pb33f-paginator`)],Mr);var pie=nt` .paginator-values { overflow-y: auto; @@ -3301,14 +3301,14 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value } -`,Sie={size:15,family:`BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`normal`,style:`normal`},Cie={size:10,family:`BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`normal`,style:`normal`},wie={size:12,family:`BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`normal`,style:`normal`},Tie={size:15,family:`BerkeleyMono-Bold, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`bold`,style:`normal`},Eie={size:25,family:`BerkeleyMono-Bold, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,weight:`bold`,style:`normal`,lineHeight:3},Die=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Oie=class extends zt{constructor(){super(),this.currentTheme=`dark`,this._themeHandler=()=>{this.readColors(),this.currentTheme=Tr()}}readColors(){let e=getComputedStyle(this);this.primary=e.getPropertyValue(`--primary-color`).trim(),this.secondary=e.getPropertyValue(`--secondary-color`).trim(),this.tertiary=e.getPropertyValue(`--tertiary-color`).trim(),this.background=e.getPropertyValue(`--background-color`).trim(),this.error=e.getPropertyValue(`--error-color`).trim(),this.ok=e.getPropertyValue(`--terminal-text`).trim(),this.warn=e.getPropertyValue(`--warn-color`).trim(),this.color1=e.getPropertyValue(`--chart-color1`).trim(),this.color2=e.getPropertyValue(`--chart-color2`).trim(),this.color3=e.getPropertyValue(`--chart-color3`).trim(),this.color4=e.getPropertyValue(`--chart-color4`).trim(),this.color5=e.getPropertyValue(`--chart-color5`).trim()}firstUpdated(){this.readColors(),this.currentTheme=Tr(),this.font=Sie,this.smallFont=Cie,this.mediumFont=wie,this.titleFont=Eie,this.fontBold=Tie,window.addEventListener(pr,this._themeHandler)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(pr,this._themeHandler)}};Die([qt()],Oie.prototype,`currentTheme`,void 0);function Tr(){let e=document.documentElement.getAttribute(`theme`);return e===`light`?`light`:e===`tektronix`?`tektronix`:`dark`}var kie=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Er=class extends zt{constructor(){super(),this.animationFrameId=null,this._currentTheme=`dark`,this._themeHandler=()=>{this._currentTheme=Tr()},this.sparkArray=[],this.gravity=.005,this.spawnRate=50,this.isError=!1,this.animating=!1}firstUpdated(){this._currentTheme=Tr(),window.addEventListener(pr,this._themeHandler);let e=this.renderRoot.querySelector(`canvas`);if(e){this.canvas=e;let t=this.canvas?.getContext(`2d`);t&&(this.ctx=t)}}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(pr,this._themeHandler)}startAnimation(){this.animating||(this.animationTimer=setInterval(()=>this.spawnSpark(),1e3/this.spawnRate),this.animating=!0,this.animateSparks())}stopAnimation(){this.animating=!1,clearInterval(this.animationTimer),this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.sparkArray=[],this.ctx&&this.canvas&&this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)}getRandomBetween(e,t){return Math.random()*(t-e)+e}spawnSpark(){if(this.animating){let e;e=this._currentTheme===`light`?this.isError?Math.random()>.5?`rgb(60, 60, 60)`:`rgb(120, 120, 120)`:Math.random()>.5?`rgb(80, 80, 80)`:`rgb(160, 160, 160)`:this._currentTheme===`tektronix`?this.isError?Math.random()>.5?`rgb(102, 255, 102)`:`rgb(34, 204, 34)`:Math.random()>.5?`rgb(51, 255, 51)`:`rgb(26, 153, 26)`:this.isError?Math.random()>.5?`rgb(255, 60, 116)`:`rgb(157, 26, 65)`:Math.random()>.5?`rgb(248, 58, 255)`:`rgb(98, 196, 255)`,this.sparkArray.push({x:Math.random()*this.canvas.width,y:-2,size:1,color:e,velocityY:this.getRandomBetween(.05,.3),lifetime:150,initialLifetime:150,opacity:1})}}animateSparks(){if(this.animating){this.ctx?.clearRect(0,0,this.canvas?.width,this.canvas?.height),this.sparkArray=this.sparkArray.filter(e=>e.lifetime>0);for(let e of this.sparkArray)this.drawSpark(e),e.y+=e.velocityY,e.velocityY+=this.gravity,e.lifetime--,e.opacity=e.lifetime/e.initialLifetime;this.animationFrameId=requestAnimationFrame(()=>this.animateSparks())}}drawSpark(e){this.ctx.globalAlpha=e.opacity,this.ctx.fillStyle=e.color,/Safari/.test(navigator.userAgent)||(this.ctx.shadowColor=e.color,this.ctx.shadowBlur=8),this.ctx.fillRect(e.x,e.y,e.size,e.size),this.ctx.globalAlpha=1}render(){return M` - `}};Er.styles=nt` +`,mie={size:15,family:`BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`normal`,style:`normal`},hie={size:10,family:`BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`normal`,style:`normal`},gie={size:12,family:`BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`normal`,style:`normal`},_ie={size:15,family:`BerkeleyMono-Bold, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,lineHeight:2,weight:`bold`,style:`normal`},vie={size:25,family:`BerkeleyMono-Bold, Roboto Mono, Monaco, Menlo, Helvetica Neue,Helvetica,Verdana,Tahoma, Arial`,weight:`bold`,style:`normal`,lineHeight:3},yie=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},bie=class extends Bt{constructor(){super(),this.currentTheme=`dark`,this._themeHandler=()=>{this.readColors(),this.currentTheme=xie()}}readColors(){let e=getComputedStyle(this);this.primary=e.getPropertyValue(`--primary-color`).trim(),this.secondary=e.getPropertyValue(`--secondary-color`).trim(),this.tertiary=e.getPropertyValue(`--tertiary-color`).trim(),this.background=e.getPropertyValue(`--background-color`).trim(),this.error=e.getPropertyValue(`--error-color`).trim(),this.ok=e.getPropertyValue(`--terminal-text`).trim(),this.warn=e.getPropertyValue(`--warn-color`).trim(),this.color1=e.getPropertyValue(`--chart-color1`).trim(),this.color2=e.getPropertyValue(`--chart-color2`).trim(),this.color3=e.getPropertyValue(`--chart-color3`).trim(),this.color4=e.getPropertyValue(`--chart-color4`).trim(),this.color5=e.getPropertyValue(`--chart-color5`).trim()}firstUpdated(){this.readColors(),this.currentTheme=xie(),this.font=mie,this.smallFont=hie,this.mediumFont=gie,this.titleFont=vie,this.fontBold=_ie,window.addEventListener(xr,this._themeHandler)}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(xr,this._themeHandler)}};yie([Jt()],bie.prototype,`currentTheme`,void 0);function xie(){let e=document.documentElement.getAttribute(`theme`);return e===`light`?`light`:e===`tektronix`?`tektronix`:`dark`}var Sie=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Nr=class extends Bt{constructor(){super(),this.animationFrameId=null,this._currentTheme=`dark`,this._themeHandler=()=>{this._currentTheme=xie()},this.sparkArray=[],this.gravity=.005,this.spawnRate=50,this.isError=!1,this.animating=!1}firstUpdated(){this._currentTheme=xie(),window.addEventListener(xr,this._themeHandler);let e=this.renderRoot.querySelector(`canvas`);if(e){this.canvas=e;let t=this.canvas?.getContext(`2d`);t&&(this.ctx=t)}}disconnectedCallback(){super.disconnectedCallback(),window.removeEventListener(xr,this._themeHandler)}startAnimation(){this.animating||(this.animationTimer=setInterval(()=>this.spawnSpark(),1e3/this.spawnRate),this.animating=!0,this.animateSparks())}stopAnimation(){this.animating=!1,clearInterval(this.animationTimer),this.animationFrameId!==null&&(cancelAnimationFrame(this.animationFrameId),this.animationFrameId=null),this.sparkArray=[],this.ctx&&this.canvas&&this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)}getRandomBetween(e,t){return Math.random()*(t-e)+e}spawnSpark(){if(this.animating){let e;e=this._currentTheme===`light`?this.isError?Math.random()>.5?`rgb(60, 60, 60)`:`rgb(120, 120, 120)`:Math.random()>.5?`rgb(80, 80, 80)`:`rgb(160, 160, 160)`:this._currentTheme===`tektronix`?this.isError?Math.random()>.5?`rgb(102, 255, 102)`:`rgb(34, 204, 34)`:Math.random()>.5?`rgb(51, 255, 51)`:`rgb(26, 153, 26)`:this.isError?Math.random()>.5?`rgb(255, 60, 116)`:`rgb(157, 26, 65)`:Math.random()>.5?`rgb(248, 58, 255)`:`rgb(98, 196, 255)`,this.sparkArray.push({x:Math.random()*this.canvas.width,y:-2,size:1,color:e,velocityY:this.getRandomBetween(.05,.3),lifetime:150,initialLifetime:150,opacity:1})}}animateSparks(){if(this.animating){this.ctx?.clearRect(0,0,this.canvas?.width,this.canvas?.height),this.sparkArray=this.sparkArray.filter(e=>e.lifetime>0);for(let e of this.sparkArray)this.drawSpark(e),e.y+=e.velocityY,e.velocityY+=this.gravity,e.lifetime--,e.opacity=e.lifetime/e.initialLifetime;this.animationFrameId=requestAnimationFrame(()=>this.animateSparks())}}drawSpark(e){this.ctx.globalAlpha=e.opacity,this.ctx.fillStyle=e.color,/Safari/.test(navigator.userAgent)||(this.ctx.shadowColor=e.color,this.ctx.shadowBlur=8),this.ctx.fillRect(e.x,e.y,e.size,e.size),this.ctx.globalAlpha=1}render(){return M` + `}};Nr.styles=nt` canvas { width: 100%; height: 100%; image-rendering: pixelated; /* Ensures pixelated appearance */ } - `,kie([Kt({type:Boolean})],Er.prototype,`isError`,void 0),Er=kie([Gt(`pb33f-pixel-sparks`)],Er);function Dr(e){return e}var Or=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},kr=class extends zt{constructor(){super(),this.sparks=new Er,this.currentPage=1,this.totalPages=1,this.totalItems=0,this.itemsPerPage=20,this.activeIndex=0,this.invalid=!1,this.hideSparks=!1,this.paginatorNavigator=new wr,this.paginatorNavigator.currentPage=this.currentPage,this.paginatorNavigator.totalPages=this.totalPages,this.paginatorNavigator.totalItems=this.totalItems,this.paginatorNavigator.itemsPerPage=this.itemsPerPage,this.addEventListener(_ie,Dr(this.firstPage.bind(this))),this.addEventListener(vie,Dr(this.lastPage.bind(this))),this.addEventListener(yie,Dr(this.nextPage.bind(this))),this.addEventListener(bie,Dr(this.previousPage.bind(this)))}nextPage(e){e.stopPropagation(),this.currentPage1&&(this.currentPage=1)}setPage(e){this.currentPage=Math.ceil(e/this.itemsPerPage),this.activeIndex=e}previousPage(e){e.stopPropagation(),this.currentPage>1&&this.currentPage--}calcTotalPages(){return Math.ceil(this.totalItems/this.itemsPerPage)}willUpdate(){this.totalItems=this.values?.length,this.totalPages=this.calcTotalPages(),this.currentPage>this.totalPages&&(this.currentPage=Math.max(1,this.totalPages)),this.sparks.isError=this.invalid,this.paginatorNavigator.currentPage=this.currentPage,this.paginatorNavigator.totalItems=this.values?.length,this.paginatorNavigator.itemsPerPage=this.itemsPerPage,this.paginatorNavigator.totalPages=this.totalPages,this.label&&(this.paginatorNavigator.label=this.label),this.renderValues=this.values?.slice(this.paginatorNavigator.getRangeStart(),this.paginatorNavigator.getRangeEnd())}startSparks(){this.sparks.startAnimation()}stopSparks(){this.sparks.stopAnimation()}render(){return this.renderValues?.length===0||!this.renderValues?this.hideSparks?M` + `,Sie([qt({type:Boolean})],Nr.prototype,`isError`,void 0),Nr=Sie([Kt(`pb33f-pixel-sparks`)],Nr);function Cie(e){return e}var Pr=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Fr=class extends Bt{constructor(){super(),this.sparks=new Nr,this.currentPage=1,this.totalPages=1,this.totalItems=0,this.itemsPerPage=20,this.activeIndex=0,this.invalid=!1,this.hideSparks=!1,this.paginatorNavigator=new Mr,this.paginatorNavigator.currentPage=this.currentPage,this.paginatorNavigator.totalPages=this.totalPages,this.paginatorNavigator.totalItems=this.totalItems,this.paginatorNavigator.itemsPerPage=this.itemsPerPage,this.addEventListener(lie,Cie(this.firstPage.bind(this))),this.addEventListener(uie,Cie(this.lastPage.bind(this))),this.addEventListener(die,Cie(this.nextPage.bind(this))),this.addEventListener(fie,Cie(this.previousPage.bind(this)))}nextPage(e){e.stopPropagation(),this.currentPage1&&(this.currentPage=1)}setPage(e){this.currentPage=Math.ceil(e/this.itemsPerPage),this.activeIndex=e}previousPage(e){e.stopPropagation(),this.currentPage>1&&this.currentPage--}calcTotalPages(){return Math.ceil(this.totalItems/this.itemsPerPage)}willUpdate(){this.totalItems=this.values?.length,this.totalPages=this.calcTotalPages(),this.currentPage>this.totalPages&&(this.currentPage=Math.max(1,this.totalPages)),this.sparks.isError=this.invalid,this.paginatorNavigator.currentPage=this.currentPage,this.paginatorNavigator.totalItems=this.values?.length,this.paginatorNavigator.itemsPerPage=this.itemsPerPage,this.paginatorNavigator.totalPages=this.totalPages,this.label&&(this.paginatorNavigator.label=this.label),this.renderValues=this.values?.slice(this.paginatorNavigator.getRangeStart(),this.paginatorNavigator.getRangeEnd())}startSparks(){this.sparks.startAnimation()}stopSparks(){this.sparks.stopAnimation()}render(){return this.renderValues?.length===0||!this.renderValues?this.hideSparks?M`
`:M` @@ -3323,7 +3323,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value
${this.renderValues}
- `}};kr.styles=[xie],Or([Kt({type:zt})],kr.prototype,`values`,void 0),Or([Kt({type:Number})],kr.prototype,`currentPage`,void 0),Or([Kt({type:Number})],kr.prototype,`totalPages`,void 0),Or([Kt({type:Number})],kr.prototype,`totalItems`,void 0),Or([Kt({type:Number})],kr.prototype,`itemsPerPage`,void 0),Or([Kt()],kr.prototype,`label`,void 0),Or([Kt()],kr.prototype,`activeIndex`,void 0),Or([Kt({type:Boolean})],kr.prototype,`invalid`,void 0),Or([Kt({type:Boolean})],kr.prototype,`hideSparks`,void 0),kr=Or([Gt(`pb33f-paginator-navigation`)],kr);var Aie=nt` + `}};Fr.styles=[pie],Pr([qt({type:Bt})],Fr.prototype,`values`,void 0),Pr([qt({type:Number})],Fr.prototype,`currentPage`,void 0),Pr([qt({type:Number})],Fr.prototype,`totalPages`,void 0),Pr([qt({type:Number})],Fr.prototype,`totalItems`,void 0),Pr([qt({type:Number})],Fr.prototype,`itemsPerPage`,void 0),Pr([qt()],Fr.prototype,`label`,void 0),Pr([qt()],Fr.prototype,`activeIndex`,void 0),Pr([qt({type:Boolean})],Fr.prototype,`invalid`,void 0),Pr([qt({type:Boolean})],Fr.prototype,`hideSparks`,void 0),Fr=Pr([Kt(`pb33f-paginator-navigation`)],Fr);var wie=nt` :host { display: flex; column-gap: 10px; @@ -3376,10 +3376,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value } } -`,jie=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Mie=class extends zt{getValue(){let e=(this.shadowRoot?.querySelector(`slot.command`))?.assignedNodes({flatten:!0});return e&&e[0]?e[0].data?.trim()??``:``}copyToClipboard(){navigator.clipboard.writeText(this.getValue())}render(){return M` +`,Tie=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Eie=class extends Bt{getValue(){let e=(this.shadowRoot?.querySelector(`slot.command`))?.assignedNodes({flatten:!0});return e&&e[0]?e[0].data?.trim()??``:``}copyToClipboard(){navigator.clipboard.writeText(this.getValue())}render(){return M` copy
- `}};Mie.styles=Aie,Mie=jie([Gt(`terminal-example`)],Mie);var Nie=nt` + `}};Eie.styles=wie,Eie=Tie([Kt(`terminal-example`)],Eie);var Die=nt` footer { padding: var(--footer-padding); width: 100vw; @@ -3404,7 +3404,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value font-weight: normal; color: var(--font-color-sub2); } -`,Ar=nt` +`,Ir=nt` a { color: var(--primary-color); text-decoration: none; @@ -3419,11 +3419,11 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value a:active { color: var(--primary-color); } -`,jr=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Mr=class extends zt{constructor(){super(),this.url=`https://pb33f.io`,this.build=``,this.fluid=!1}render(){return M` +`,Oie=function(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a},Lr=class extends Bt{constructor(){super(),this.url=`https://pb33f.io`,this.build=``,this.fluid=!1}render(){return M` `}};Mr.styles=[Nie,Ar],jr([Kt()],Mr.prototype,`build`,void 0),jr([Kt()],Mr.prototype,`url`,void 0),jr([Kt({type:Boolean,reflect:!0})],Mr.prototype,`fluid`,void 0),Mr=jr([Gt(`pb33f-footer`)],Mr);var Nr=nt` + `}};Lr.styles=[Die,Ir],Oie([qt()],Lr.prototype,`build`,void 0),Oie([qt()],Lr.prototype,`url`,void 0),Oie([qt({type:Boolean,reflect:!0})],Lr.prototype,`fluid`,void 0),Lr=Oie([Kt(`pb33f-footer`)],Lr);var Rr=nt` sl-button::part(base) { border: 1px solid var(--primary-color); border-radius: 0; @@ -3458,7 +3458,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value text-transform: uppercase; letter-spacing: var(--label-spacing); } -`,Pie=[Nr,nt` +`,kie=[Rr,nt` :host { display: flex; flex-direction: column; @@ -3760,7 +3760,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value justify-content: flex-end; } } -`],Pr=nt` +`],zr=nt` :host { display: block; font-family: var(--font-stack, BerkeleyMono-Regular, Roboto Mono, Monaco, Menlo, monospace); @@ -3788,7 +3788,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value text-decoration: underline; color: var(--primary-color); } -`,Fie=/^[a-zA-Z][a-zA-Z\d+.-]*:/;function Iie(e){return!e||e.startsWith(`/`)||e.startsWith(`#`)||e.startsWith(`data:`)||Fie.test(e)}function Lie(){let e=document.body?.dataset.ppBaseUrl;if(!e)return document.baseURI;try{return new URL(e,window.location.href).toString()}catch{return document.baseURI}}function Fr(e){if(Iie(e))return e;try{return new URL(e,Lie()).toString()}catch{return e}}function Rie(){let e=document.body?.dataset.ppOverviewHref;return Fr(e||`index.html`)}function zie(){let e=document.body?.dataset.ppCatalogHref;return e?Fr(e):Rie()}function Ir(e){return Fr(`operations/${e}.html`)}function Lr(e,t){return Fr(`models/${e}/${t}.html`)}var Bie=nt` +`,Aie=/^[a-zA-Z][a-zA-Z\d+.-]*:/;function jie(e){return!e||e.startsWith(`/`)||e.startsWith(`#`)||e.startsWith(`data:`)||Aie.test(e)}function Mie(){let e=document.body?.dataset.ppBaseUrl;if(!e)return document.baseURI;try{return new URL(e,window.location.href).toString()}catch{return document.baseURI}}function Br(e){if(jie(e))return e;try{return new URL(e,Mie()).toString()}catch{return e}}function Nie(){let e=document.body?.dataset.ppOverviewHref;return Br(e||`index.html`)}function Pie(){let e=document.body?.dataset.ppCatalogHref;return e?Br(e):Nie()}function Fie(e){return Br(`operations/${e}.html`)}function Vr(e,t){return Br(`models/${e}/${t}.html`)}var Iie=nt` :host { display: inline-block; } @@ -3836,7 +3836,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value max-width: var(--auto-size-available-width) !important; max-height: var(--auto-size-available-height) !important; } -`,Rr=class extends Yt{constructor(){super(...arguments),this.localize=new dn(this),this.open=!1,this.placement=`bottom-start`,this.disabled=!1,this.stayOpenOnSelect=!1,this.distance=0,this.skidding=0,this.hoist=!1,this.sync=void 0,this.handleKeyDown=e=>{this.open&&e.key===`Escape`&&(e.stopPropagation(),this.hide(),this.focusOnTrigger())},this.handleDocumentKeyDown=e=>{if(e.key===`Escape`&&this.open&&!this.closeWatcher){e.stopPropagation(),this.focusOnTrigger(),this.hide();return}if(e.key===`Tab`){if(this.open&&document.activeElement?.tagName.toLowerCase()===`sl-menu-item`){e.preventDefault(),this.hide(),this.focusOnTrigger();return}let t=(e,n)=>{if(!e)return null;let r=e.closest(n);if(r)return r;let i=e.getRootNode();return i instanceof ShadowRoot?t(i.host,n):null};setTimeout(()=>{let e=this.containingElement?.getRootNode()instanceof ShadowRoot?Sre():document.activeElement;(!this.containingElement||t(e,this.containingElement.tagName.toLowerCase())!==this.containingElement)&&this.hide()})}},this.handleDocumentMouseDown=e=>{let t=e.composedPath();this.containingElement&&!t.includes(this.containingElement)&&this.hide()},this.handlePanelSelect=e=>{let t=e.target;!this.stayOpenOnSelect&&t.tagName.toLowerCase()===`sl-menu`&&(this.hide(),this.focusOnTrigger())}}connectedCallback(){super.connectedCallback(),this.containingElement||=this}firstUpdated(){this.panel.hidden=!this.open,this.open&&(this.addOpenListeners(),this.popup.active=!0)}disconnectedCallback(){super.disconnectedCallback(),this.removeOpenListeners(),this.hide()}focusOnTrigger(){let e=this.trigger.assignedElements({flatten:!0})[0];typeof e?.focus==`function`&&e.focus()}getMenu(){return this.panel.assignedElements({flatten:!0}).find(e=>e.tagName.toLowerCase()===`sl-menu`)}handleTriggerClick(){this.open?this.hide():(this.show(),this.focusOnTrigger())}async handleTriggerKeyDown(e){if([` `,`Enter`].includes(e.key)){e.preventDefault(),this.handleTriggerClick();return}let t=this.getMenu();if(t){let n=t.getAllItems(),r=n[0],i=n[n.length-1];[`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)&&(e.preventDefault(),this.open||(this.show(),await this.updateComplete),n.length>0&&this.updateComplete.then(()=>{(e.key===`ArrowDown`||e.key===`Home`)&&(t.setCurrentItem(r),r.focus()),(e.key===`ArrowUp`||e.key===`End`)&&(t.setCurrentItem(i),i.focus())}))}}handleTriggerKeyUp(e){e.key===` `&&e.preventDefault()}handleTriggerSlotChange(){this.updateAccessibleTrigger()}updateAccessibleTrigger(){let e=this.trigger.assignedElements({flatten:!0}).find(e=>Ore(e).start),t;if(e){switch(e.tagName.toLowerCase()){case`sl-button`:case`sl-icon-button`:t=e.button;break;default:t=e}t.setAttribute(`aria-haspopup`,`true`),t.setAttribute(`aria-expanded`,this.open?`true`:`false`)}}async show(){if(!this.open)return this.open=!0,Ln(this,`sl-after-show`)}async hide(){if(this.open)return this.open=!1,Ln(this,`sl-after-hide`)}reposition(){this.popup.reposition()}addOpenListeners(){var e;this.panel.addEventListener(`sl-select`,this.handlePanelSelect),`CloseWatcher`in window?((e=this.closeWatcher)==null||e.destroy(),this.closeWatcher=new CloseWatcher,this.closeWatcher.onclose=()=>{this.hide(),this.focusOnTrigger()}):this.panel.addEventListener(`keydown`,this.handleKeyDown),document.addEventListener(`keydown`,this.handleDocumentKeyDown),document.addEventListener(`mousedown`,this.handleDocumentMouseDown)}removeOpenListeners(){var e;this.panel&&(this.panel.removeEventListener(`sl-select`,this.handlePanelSelect),this.panel.removeEventListener(`keydown`,this.handleKeyDown)),document.removeEventListener(`keydown`,this.handleDocumentKeyDown),document.removeEventListener(`mousedown`,this.handleDocumentMouseDown),(e=this.closeWatcher)==null||e.destroy()}async handleOpenChange(){if(this.disabled){this.open=!1;return}if(this.updateAccessibleTrigger(),this.open){this.emit(`sl-show`),this.addOpenListeners(),await zn(this),this.panel.hidden=!1,this.popup.active=!0;let{keyframes:e,options:t}=In(this,`dropdown.show`,{dir:this.localize.dir()});await Rn(this.popup.popup,e,t),this.emit(`sl-after-show`)}else{this.emit(`sl-hide`),this.removeOpenListeners(),await zn(this);let{keyframes:e,options:t}=In(this,`dropdown.hide`,{dir:this.localize.dir()});await Rn(this.popup.popup,e,t),this.panel.hidden=!0,this.popup.active=!1,this.emit(`sl-after-hide`)}}render(){return M` +`,Hr=class extends Xt{constructor(){super(...arguments),this.localize=new pn(this),this.open=!1,this.placement=`bottom-start`,this.disabled=!1,this.stayOpenOnSelect=!1,this.distance=0,this.skidding=0,this.hoist=!1,this.sync=void 0,this.handleKeyDown=e=>{this.open&&e.key===`Escape`&&(e.stopPropagation(),this.hide(),this.focusOnTrigger())},this.handleDocumentKeyDown=e=>{if(e.key===`Escape`&&this.open&&!this.closeWatcher){e.stopPropagation(),this.focusOnTrigger(),this.hide();return}if(e.key===`Tab`){if(this.open&&document.activeElement?.tagName.toLowerCase()===`sl-menu-item`){e.preventDefault(),this.hide(),this.focusOnTrigger();return}let t=(e,n)=>{if(!e)return null;let r=e.closest(n);if(r)return r;let i=e.getRootNode();return i instanceof ShadowRoot?t(i.host,n):null};setTimeout(()=>{let e=this.containingElement?.getRootNode()instanceof ShadowRoot?hre():document.activeElement;(!this.containingElement||t(e,this.containingElement.tagName.toLowerCase())!==this.containingElement)&&this.hide()})}},this.handleDocumentMouseDown=e=>{let t=e.composedPath();this.containingElement&&!t.includes(this.containingElement)&&this.hide()},this.handlePanelSelect=e=>{let t=e.target;!this.stayOpenOnSelect&&t.tagName.toLowerCase()===`sl-menu`&&(this.hide(),this.focusOnTrigger())}}connectedCallback(){super.connectedCallback(),this.containingElement||=this}firstUpdated(){this.panel.hidden=!this.open,this.open&&(this.addOpenListeners(),this.popup.active=!0)}disconnectedCallback(){super.disconnectedCallback(),this.removeOpenListeners(),this.hide()}focusOnTrigger(){let e=this.trigger.assignedElements({flatten:!0})[0];typeof e?.focus==`function`&&e.focus()}getMenu(){return this.panel.assignedElements({flatten:!0}).find(e=>e.tagName.toLowerCase()===`sl-menu`)}handleTriggerClick(){this.open?this.hide():(this.show(),this.focusOnTrigger())}async handleTriggerKeyDown(e){if([` `,`Enter`].includes(e.key)){e.preventDefault(),this.handleTriggerClick();return}let t=this.getMenu();if(t){let n=t.getAllItems(),r=n[0],i=n[n.length-1];[`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)&&(e.preventDefault(),this.open||(this.show(),await this.updateComplete),n.length>0&&this.updateComplete.then(()=>{(e.key===`ArrowDown`||e.key===`Home`)&&(t.setCurrentItem(r),r.focus()),(e.key===`ArrowUp`||e.key===`End`)&&(t.setCurrentItem(i),i.focus())}))}}handleTriggerKeyUp(e){e.key===` `&&e.preventDefault()}handleTriggerSlotChange(){this.updateAccessibleTrigger()}updateAccessibleTrigger(){let e=this.trigger.assignedElements({flatten:!0}).find(e=>xre(e).start),t;if(e){switch(e.tagName.toLowerCase()){case`sl-button`:case`sl-icon-button`:t=e.button;break;default:t=e}t.setAttribute(`aria-haspopup`,`true`),t.setAttribute(`aria-expanded`,this.open?`true`:`false`)}}async show(){if(!this.open)return this.open=!0,Wn(this,`sl-after-show`)}async hide(){if(this.open)return this.open=!1,Wn(this,`sl-after-hide`)}reposition(){this.popup.reposition()}addOpenListeners(){var e;this.panel.addEventListener(`sl-select`,this.handlePanelSelect),`CloseWatcher`in window?((e=this.closeWatcher)==null||e.destroy(),this.closeWatcher=new CloseWatcher,this.closeWatcher.onclose=()=>{this.hide(),this.focusOnTrigger()}):this.panel.addEventListener(`keydown`,this.handleKeyDown),document.addEventListener(`keydown`,this.handleDocumentKeyDown),document.addEventListener(`mousedown`,this.handleDocumentMouseDown)}removeOpenListeners(){var e;this.panel&&(this.panel.removeEventListener(`sl-select`,this.handlePanelSelect),this.panel.removeEventListener(`keydown`,this.handleKeyDown)),document.removeEventListener(`keydown`,this.handleDocumentKeyDown),document.removeEventListener(`mousedown`,this.handleDocumentMouseDown),(e=this.closeWatcher)==null||e.destroy()}async handleOpenChange(){if(this.disabled){this.open=!1;return}if(this.updateAccessibleTrigger(),this.open){this.emit(`sl-show`),this.addOpenListeners(),await Kn(this),this.panel.hidden=!1,this.popup.active=!0;let{keyframes:e,options:t}=Un(this,`dropdown.show`,{dir:this.localize.dir()});await Gn(this.popup.popup,e,t),this.emit(`sl-after-show`)}else{this.emit(`sl-hide`),this.removeOpenListeners(),await Kn(this);let{keyframes:e,options:t}=Un(this,`dropdown.hide`,{dir:this.localize.dir()});await Gn(this.popup.popup,e,t),this.panel.hidden=!0,this.popup.active=!1,this.emit(`sl-after-hide`)}}render(){return M` - `}};Rr.styles=[Wt,Bie],Rr.dependencies={"sl-popup":Pn},Ht([Jt(`.dropdown`)],Rr.prototype,`popup`,2),Ht([Jt(`.dropdown__trigger`)],Rr.prototype,`trigger`,2),Ht([Jt(`.dropdown__panel`)],Rr.prototype,`panel`,2),Ht([Kt({type:Boolean,reflect:!0})],Rr.prototype,`open`,2),Ht([Kt({reflect:!0})],Rr.prototype,`placement`,2),Ht([Kt({type:Boolean,reflect:!0})],Rr.prototype,`disabled`,2),Ht([Kt({attribute:`stay-open-on-select`,type:Boolean,reflect:!0})],Rr.prototype,`stayOpenOnSelect`,2),Ht([Kt({attribute:!1})],Rr.prototype,`containingElement`,2),Ht([Kt({type:Number})],Rr.prototype,`distance`,2),Ht([Kt({type:Number})],Rr.prototype,`skidding`,2),Ht([Kt({type:Boolean})],Rr.prototype,`hoist`,2),Ht([Kt({reflect:!0})],Rr.prototype,`sync`,2),Ht([Ut(`open`,{waitUntilFirstUpdate:!0})],Rr.prototype,`handleOpenChange`,1),Fn(`dropdown.show`,{keyframes:[{opacity:0,scale:.9},{opacity:1,scale:1}],options:{duration:100,easing:`ease`}}),Fn(`dropdown.hide`,{keyframes:[{opacity:1,scale:1},{opacity:0,scale:.9}],options:{duration:100,easing:`ease`}}),Rr.define(`sl-dropdown`);var Vie=nt` + `}};Hr.styles=[Gt,Iie],Hr.dependencies={"sl-popup":Vn},Ut([Yt(`.dropdown`)],Hr.prototype,`popup`,2),Ut([Yt(`.dropdown__trigger`)],Hr.prototype,`trigger`,2),Ut([Yt(`.dropdown__panel`)],Hr.prototype,`panel`,2),Ut([qt({type:Boolean,reflect:!0})],Hr.prototype,`open`,2),Ut([qt({reflect:!0})],Hr.prototype,`placement`,2),Ut([qt({type:Boolean,reflect:!0})],Hr.prototype,`disabled`,2),Ut([qt({attribute:`stay-open-on-select`,type:Boolean,reflect:!0})],Hr.prototype,`stayOpenOnSelect`,2),Ut([qt({attribute:!1})],Hr.prototype,`containingElement`,2),Ut([qt({type:Number})],Hr.prototype,`distance`,2),Ut([qt({type:Number})],Hr.prototype,`skidding`,2),Ut([qt({type:Boolean})],Hr.prototype,`hoist`,2),Ut([qt({reflect:!0})],Hr.prototype,`sync`,2),Ut([Wt(`open`,{waitUntilFirstUpdate:!0})],Hr.prototype,`handleOpenChange`,1),Hn(`dropdown.show`,{keyframes:[{opacity:0,scale:.9},{opacity:1,scale:1}],options:{duration:100,easing:`ease`}}),Hn(`dropdown.hide`,{keyframes:[{opacity:1,scale:1},{opacity:0,scale:.9}],options:{duration:100,easing:`ease`}}),Hr.define(`sl-dropdown`);var Lie=nt` :host { display: block; position: relative; @@ -3882,14 +3882,14 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value ::slotted(sl-divider) { --spacing: var(--sl-spacing-x-small); } -`,Hie=class extends Yt{connectedCallback(){super.connectedCallback(),this.setAttribute(`role`,`menu`)}handleClick(e){let t=[`menuitem`,`menuitemcheckbox`],n=e.composedPath(),r=n.find(e=>t.includes((e?.getAttribute)?.call(e,`role`)||``));if(!r||n.find(e=>(e?.getAttribute)?.call(e,`role`)===`menu`)!==this)return;let i=r;i.type===`checkbox`&&(i.checked=!i.checked),this.emit(`sl-select`,{detail:{item:i}})}handleKeyDown(e){if(e.key===`Enter`||e.key===` `){let t=this.getCurrentItem();e.preventDefault(),e.stopPropagation(),t?.click()}else if([`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){let t=this.getAllItems(),n=this.getCurrentItem(),r=n?t.indexOf(n):0;t.length>0&&(e.preventDefault(),e.stopPropagation(),e.key===`ArrowDown`?r++:e.key===`ArrowUp`?r--:e.key===`Home`?r=0:e.key===`End`&&(r=t.length-1),r<0&&(r=t.length-1),r>t.length-1&&(r=0),this.setCurrentItem(t[r]),t[r].focus())}}handleMouseDown(e){let t=e.target;this.isMenuItem(t)&&this.setCurrentItem(t)}handleSlotChange(){let e=this.getAllItems();e.length>0&&this.setCurrentItem(e[0])}isMenuItem(e){return e.tagName.toLowerCase()===`sl-menu-item`||[`menuitem`,`menuitemcheckbox`,`menuitemradio`].includes(e.getAttribute(`role`)??``)}getAllItems(){return[...this.defaultSlot.assignedElements({flatten:!0})].filter(e=>!(e.inert||!this.isMenuItem(e)))}getCurrentItem(){return this.getAllItems().find(e=>e.getAttribute(`tabindex`)===`0`)}setCurrentItem(e){this.getAllItems().forEach(t=>{t.setAttribute(`tabindex`,t===e?`0`:`-1`)})}render(){return M` +`,Rie=class extends Xt{connectedCallback(){super.connectedCallback(),this.setAttribute(`role`,`menu`)}handleClick(e){let t=[`menuitem`,`menuitemcheckbox`],n=e.composedPath(),r=n.find(e=>t.includes((e?.getAttribute)?.call(e,`role`)||``));if(!r||n.find(e=>(e?.getAttribute)?.call(e,`role`)===`menu`)!==this)return;let i=r;i.type===`checkbox`&&(i.checked=!i.checked),this.emit(`sl-select`,{detail:{item:i}})}handleKeyDown(e){if(e.key===`Enter`||e.key===` `){let t=this.getCurrentItem();e.preventDefault(),e.stopPropagation(),t?.click()}else if([`ArrowDown`,`ArrowUp`,`Home`,`End`].includes(e.key)){let t=this.getAllItems(),n=this.getCurrentItem(),r=n?t.indexOf(n):0;t.length>0&&(e.preventDefault(),e.stopPropagation(),e.key===`ArrowDown`?r++:e.key===`ArrowUp`?r--:e.key===`Home`?r=0:e.key===`End`&&(r=t.length-1),r<0&&(r=t.length-1),r>t.length-1&&(r=0),this.setCurrentItem(t[r]),t[r].focus())}}handleMouseDown(e){let t=e.target;this.isMenuItem(t)&&this.setCurrentItem(t)}handleSlotChange(){let e=this.getAllItems();e.length>0&&this.setCurrentItem(e[0])}isMenuItem(e){return e.tagName.toLowerCase()===`sl-menu-item`||[`menuitem`,`menuitemcheckbox`,`menuitemradio`].includes(e.getAttribute(`role`)??``)}getAllItems(){return[...this.defaultSlot.assignedElements({flatten:!0})].filter(e=>!(e.inert||!this.isMenuItem(e)))}getCurrentItem(){return this.getAllItems().find(e=>e.getAttribute(`tabindex`)===`0`)}setCurrentItem(e){this.getAllItems().forEach(t=>{t.setAttribute(`tabindex`,t===e?`0`:`-1`)})}render(){return M` - `}};Hie.styles=[Wt,Vie],Ht([Jt(`slot`)],Hie.prototype,`defaultSlot`,2),Hie.define(`sl-menu`);var Uie=nt` + `}};Rie.styles=[Gt,Lie],Ut([Yt(`slot`)],Rie.prototype,`defaultSlot`,2),Rie.define(`sl-menu`);var zie=nt` :host { --submenu-offset: -2px; @@ -4041,9 +4041,9 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value max-width: var(--auto-size-available-width) !important; max-height: var(--auto-size-available-height) !important; } -`,zr=(e,t)=>{let n=e._$AN;if(n===void 0)return!1;for(let e of n)e._$AO?.(t,!1),zr(e,t);return!0},Wie=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},Gie=e=>{for(let t;t=e._$AM;e=t){let n=t._$AN;if(n===void 0)t._$AN=n=new Set;else if(n.has(e))break;n.add(e),Jie(t)}};function Kie(e){this._$AN===void 0?this._$AM=e:(Wie(this),this._$AM=e,Gie(this))}function qie(e,t=!1,n=0){let r=this._$AH,i=this._$AN;if(i!==void 0&&i.size!==0)if(t)if(Array.isArray(r))for(let e=n;e{e.type==en.CHILD&&(e._$AP??=qie,e._$AQ??=Kie)},Br=class extends nn{constructor(){super(...arguments),this._$AN=void 0}_$AT(e,t,n){super._$AT(e,t,n),Gie(this),this.isConnected=e._$AU}_$AO(e,t=!0){e!==this.isConnected&&(this.isConnected=e,e?this.reconnected?.():this.disconnected?.()),t&&(zr(this,e),Wie(this))}setValue(e){if(dte(this._$Ct))this._$Ct._$AI(e,this);else{let t=[...this._$Ct._$AH];t[this._$Ci]=e,this._$Ct._$AI(t,this,0)}}disconnected(){}reconnected(){}},Yie=()=>new Vr,Vr=class{},Xie=new WeakMap,Zie=tn(class extends Br{render(e){return Pt}update(e,[t]){let n=t!==this.G;return n&&this.G!==void 0&&this.rt(void 0),(n||this.lt!==this.ct)&&(this.G=t,this.ht=e.options?.host,this.rt(this.ct=e.element)),Pt}rt(e){if(this.isConnected||(e=void 0),typeof this.G==`function`){let t=this.ht??globalThis,n=Xie.get(t);n===void 0&&(n=new WeakMap,Xie.set(t,n)),n.get(this.G)!==void 0&&this.G.call(this.ht,void 0),n.set(this.G,e),e!==void 0&&this.G.call(this.ht,e)}else this.G.value=e}get lt(){return typeof this.G==`function`?Xie.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}}),Qie=class{constructor(e,t){this.popupRef=Yie(),this.enableSubmenuTimer=-1,this.isConnected=!1,this.isPopupConnected=!1,this.skidding=0,this.submenuOpenDelay=100,this.handleMouseMove=e=>{this.host.style.setProperty(`--safe-triangle-cursor-x`,`${e.clientX}px`),this.host.style.setProperty(`--safe-triangle-cursor-y`,`${e.clientY}px`)},this.handleMouseOver=()=>{this.hasSlotController.test(`submenu`)&&this.enableSubmenu()},this.handleKeyDown=e=>{switch(e.key){case`Escape`:case`Tab`:this.disableSubmenu();break;case`ArrowLeft`:e.target!==this.host&&(e.preventDefault(),e.stopPropagation(),this.host.focus(),this.disableSubmenu());break;case`ArrowRight`:case`Enter`:case` `:this.handleSubmenuEntry(e);break;default:break}},this.handleClick=e=>{e.target===this.host?(e.preventDefault(),e.stopPropagation()):e.target instanceof Element&&(e.target.tagName===`sl-menu-item`||e.target.role?.startsWith(`menuitem`))&&this.disableSubmenu()},this.handleFocusOut=e=>{e.relatedTarget&&e.relatedTarget instanceof Element&&this.host.contains(e.relatedTarget)||this.disableSubmenu()},this.handlePopupMouseover=e=>{e.stopPropagation()},this.handlePopupReposition=()=>{let e=this.host.renderRoot.querySelector(`slot[name='submenu']`)?.assignedElements({flatten:!0}).filter(e=>e.localName===`sl-menu`)[0],t=getComputedStyle(this.host).direction===`rtl`;if(!e)return;let{left:n,top:r,width:i,height:a}=e.getBoundingClientRect();this.host.style.setProperty(`--safe-triangle-submenu-start-x`,`${t?n+i:n}px`),this.host.style.setProperty(`--safe-triangle-submenu-start-y`,`${r}px`),this.host.style.setProperty(`--safe-triangle-submenu-end-x`,`${t?n+i:n}px`),this.host.style.setProperty(`--safe-triangle-submenu-end-y`,`${r+a}px`)},(this.host=e).addController(this),this.hasSlotController=t}hostConnected(){this.hasSlotController.test(`submenu`)&&!this.host.disabled&&this.addListeners()}hostDisconnected(){this.removeListeners()}hostUpdated(){this.hasSlotController.test(`submenu`)&&!this.host.disabled?(this.addListeners(),this.updateSkidding()):this.removeListeners()}addListeners(){this.isConnected||=(this.host.addEventListener(`mousemove`,this.handleMouseMove),this.host.addEventListener(`mouseover`,this.handleMouseOver),this.host.addEventListener(`keydown`,this.handleKeyDown),this.host.addEventListener(`click`,this.handleClick),this.host.addEventListener(`focusout`,this.handleFocusOut),!0),this.isPopupConnected||this.popupRef.value&&(this.popupRef.value.addEventListener(`mouseover`,this.handlePopupMouseover),this.popupRef.value.addEventListener(`sl-reposition`,this.handlePopupReposition),this.isPopupConnected=!0)}removeListeners(){this.isConnected&&=(this.host.removeEventListener(`mousemove`,this.handleMouseMove),this.host.removeEventListener(`mouseover`,this.handleMouseOver),this.host.removeEventListener(`keydown`,this.handleKeyDown),this.host.removeEventListener(`click`,this.handleClick),this.host.removeEventListener(`focusout`,this.handleFocusOut),!1),this.isPopupConnected&&this.popupRef.value&&(this.popupRef.value.removeEventListener(`mouseover`,this.handlePopupMouseover),this.popupRef.value.removeEventListener(`sl-reposition`,this.handlePopupReposition),this.isPopupConnected=!1)}handleSubmenuEntry(e){let t=this.host.renderRoot.querySelector(`slot[name='submenu']`);if(!t){console.error(`Cannot activate a submenu if no corresponding menuitem can be found.`,this);return}let n=null;for(let e of t.assignedElements())if(n=e.querySelectorAll(`sl-menu-item, [role^='menuitem']`),n.length!==0)break;if(!(!n||n.length===0)){n[0].setAttribute(`tabindex`,`0`);for(let e=1;e!==n.length;++e)n[e].setAttribute(`tabindex`,`-1`);this.popupRef.value&&(e.preventDefault(),e.stopPropagation(),this.popupRef.value.active?n[0]instanceof HTMLElement&&n[0].focus():(this.enableSubmenu(!1),this.host.updateComplete.then(()=>{n[0]instanceof HTMLElement&&n[0].focus()}),this.host.requestUpdate()))}}setSubmenuState(e){this.popupRef.value&&this.popupRef.value.active!==e&&(this.popupRef.value.active=e,this.host.requestUpdate())}enableSubmenu(e=!0){e?(window.clearTimeout(this.enableSubmenuTimer),this.enableSubmenuTimer=window.setTimeout(()=>{this.setSubmenuState(!0)},this.submenuOpenDelay)):this.setSubmenuState(!0)}disableSubmenu(){window.clearTimeout(this.enableSubmenuTimer),this.setSubmenuState(!1)}updateSkidding(){if(!this.host.parentElement?.computedStyleMap)return;let e=this.host.parentElement.computedStyleMap();this.skidding=[`padding-top`,`border-top-width`,`margin-top`].reduce((t,n)=>{let r=e.get(n)??new CSSUnitValue(0,`px`);return t-(r instanceof CSSUnitValue?r:new CSSUnitValue(0,`px`)).to(`px`).value},0)}isExpanded(){return this.popupRef.value?this.popupRef.value.active:!1}renderSubmenu(){let e=getComputedStyle(this.host).direction===`rtl`;return this.isConnected?M` +`,Ur=(e,t)=>{let n=e._$AN;if(n===void 0)return!1;for(let e of n)e._$AO?.(t,!1),Ur(e,t);return!0},Bie=e=>{let t,n;do{if((t=e._$AM)===void 0)break;n=t._$AN,n.delete(e),e=t}while(n?.size===0)},Vie=e=>{for(let t;t=e._$AM;e=t){let n=t._$AN;if(n===void 0)t._$AN=n=new Set;else if(n.has(e))break;n.add(e),Wie(t)}};function Hie(e){this._$AN===void 0?this._$AM=e:(Bie(this),this._$AM=e,Vie(this))}function Uie(e,t=!1,n=0){let r=this._$AH,i=this._$AN;if(i!==void 0&&i.size!==0)if(t)if(Array.isArray(r))for(let e=n;e{e.type==nn.CHILD&&(e._$AP??=Uie,e._$AQ??=Hie)},Wr=class extends an{constructor(){super(...arguments),this._$AN=void 0}_$AT(e,t,n){super._$AT(e,t,n),Vie(this),this.isConnected=e._$AU}_$AO(e,t=!0){e!==this.isConnected&&(this.isConnected=e,e?this.reconnected?.():this.disconnected?.()),t&&(Ur(this,e),Bie(this))}setValue(e){if(ute(this._$Ct))this._$Ct._$AI(e,this);else{let t=[...this._$Ct._$AH];t[this._$Ci]=e,this._$Ct._$AI(t,this,0)}}disconnected(){}reconnected(){}},Gie=()=>new Gr,Gr=class{},Kie=new WeakMap,qie=rn(class extends Wr{render(e){return Pt}update(e,[t]){let n=t!==this.G;return n&&this.G!==void 0&&this.rt(void 0),(n||this.lt!==this.ct)&&(this.G=t,this.ht=e.options?.host,this.rt(this.ct=e.element)),Pt}rt(e){if(this.isConnected||(e=void 0),typeof this.G==`function`){let t=this.ht??globalThis,n=Kie.get(t);n===void 0&&(n=new WeakMap,Kie.set(t,n)),n.get(this.G)!==void 0&&this.G.call(this.ht,void 0),n.set(this.G,e),e!==void 0&&this.G.call(this.ht,e)}else this.G.value=e}get lt(){return typeof this.G==`function`?Kie.get(this.ht??globalThis)?.get(this.G):this.G?.value}disconnected(){this.lt===this.ct&&this.rt(void 0)}reconnected(){this.rt(this.ct)}}),Jie=class{constructor(e,t){this.popupRef=Gie(),this.enableSubmenuTimer=-1,this.isConnected=!1,this.isPopupConnected=!1,this.skidding=0,this.submenuOpenDelay=100,this.handleMouseMove=e=>{this.host.style.setProperty(`--safe-triangle-cursor-x`,`${e.clientX}px`),this.host.style.setProperty(`--safe-triangle-cursor-y`,`${e.clientY}px`)},this.handleMouseOver=()=>{this.hasSlotController.test(`submenu`)&&this.enableSubmenu()},this.handleKeyDown=e=>{switch(e.key){case`Escape`:case`Tab`:this.disableSubmenu();break;case`ArrowLeft`:e.target!==this.host&&(e.preventDefault(),e.stopPropagation(),this.host.focus(),this.disableSubmenu());break;case`ArrowRight`:case`Enter`:case` `:this.handleSubmenuEntry(e);break;default:break}},this.handleClick=e=>{e.target===this.host?(e.preventDefault(),e.stopPropagation()):e.target instanceof Element&&(e.target.tagName===`sl-menu-item`||e.target.role?.startsWith(`menuitem`))&&this.disableSubmenu()},this.handleFocusOut=e=>{e.relatedTarget&&e.relatedTarget instanceof Element&&this.host.contains(e.relatedTarget)||this.disableSubmenu()},this.handlePopupMouseover=e=>{e.stopPropagation()},this.handlePopupReposition=()=>{let e=this.host.renderRoot.querySelector(`slot[name='submenu']`)?.assignedElements({flatten:!0}).filter(e=>e.localName===`sl-menu`)[0],t=getComputedStyle(this.host).direction===`rtl`;if(!e)return;let{left:n,top:r,width:i,height:a}=e.getBoundingClientRect();this.host.style.setProperty(`--safe-triangle-submenu-start-x`,`${t?n+i:n}px`),this.host.style.setProperty(`--safe-triangle-submenu-start-y`,`${r}px`),this.host.style.setProperty(`--safe-triangle-submenu-end-x`,`${t?n+i:n}px`),this.host.style.setProperty(`--safe-triangle-submenu-end-y`,`${r+a}px`)},(this.host=e).addController(this),this.hasSlotController=t}hostConnected(){this.hasSlotController.test(`submenu`)&&!this.host.disabled&&this.addListeners()}hostDisconnected(){this.removeListeners()}hostUpdated(){this.hasSlotController.test(`submenu`)&&!this.host.disabled?(this.addListeners(),this.updateSkidding()):this.removeListeners()}addListeners(){this.isConnected||=(this.host.addEventListener(`mousemove`,this.handleMouseMove),this.host.addEventListener(`mouseover`,this.handleMouseOver),this.host.addEventListener(`keydown`,this.handleKeyDown),this.host.addEventListener(`click`,this.handleClick),this.host.addEventListener(`focusout`,this.handleFocusOut),!0),this.isPopupConnected||this.popupRef.value&&(this.popupRef.value.addEventListener(`mouseover`,this.handlePopupMouseover),this.popupRef.value.addEventListener(`sl-reposition`,this.handlePopupReposition),this.isPopupConnected=!0)}removeListeners(){this.isConnected&&=(this.host.removeEventListener(`mousemove`,this.handleMouseMove),this.host.removeEventListener(`mouseover`,this.handleMouseOver),this.host.removeEventListener(`keydown`,this.handleKeyDown),this.host.removeEventListener(`click`,this.handleClick),this.host.removeEventListener(`focusout`,this.handleFocusOut),!1),this.isPopupConnected&&this.popupRef.value&&(this.popupRef.value.removeEventListener(`mouseover`,this.handlePopupMouseover),this.popupRef.value.removeEventListener(`sl-reposition`,this.handlePopupReposition),this.isPopupConnected=!1)}handleSubmenuEntry(e){let t=this.host.renderRoot.querySelector(`slot[name='submenu']`);if(!t){console.error(`Cannot activate a submenu if no corresponding menuitem can be found.`,this);return}let n=null;for(let e of t.assignedElements())if(n=e.querySelectorAll(`sl-menu-item, [role^='menuitem']`),n.length!==0)break;if(!(!n||n.length===0)){n[0].setAttribute(`tabindex`,`0`);for(let e=1;e!==n.length;++e)n[e].setAttribute(`tabindex`,`-1`);this.popupRef.value&&(e.preventDefault(),e.stopPropagation(),this.popupRef.value.active?n[0]instanceof HTMLElement&&n[0].focus():(this.enableSubmenu(!1),this.host.updateComplete.then(()=>{n[0]instanceof HTMLElement&&n[0].focus()}),this.host.requestUpdate()))}}setSubmenuState(e){this.popupRef.value&&this.popupRef.value.active!==e&&(this.popupRef.value.active=e,this.host.requestUpdate())}enableSubmenu(e=!0){e?(window.clearTimeout(this.enableSubmenuTimer),this.enableSubmenuTimer=window.setTimeout(()=>{this.setSubmenuState(!0)},this.submenuOpenDelay)):this.setSubmenuState(!0)}disableSubmenu(){window.clearTimeout(this.enableSubmenuTimer),this.setSubmenuState(!1)}updateSkidding(){if(!this.host.parentElement?.computedStyleMap)return;let e=this.host.parentElement.computedStyleMap();this.skidding=[`padding-top`,`border-top-width`,`margin-top`].reduce((t,n)=>{let r=e.get(n)??new CSSUnitValue(0,`px`);return t-(r instanceof CSSUnitValue?r:new CSSUnitValue(0,`px`)).to(`px`).value},0)}isExpanded(){return this.popupRef.value?this.popupRef.value.active:!1}renderSubmenu(){let e=getComputedStyle(this.host).direction===`rtl`;return this.isConnected?M` - `:M` `}},Hr=class extends Yt{constructor(){super(...arguments),this.localize=new dn(this),this.type=`normal`,this.checked=!1,this.value=``,this.loading=!1,this.disabled=!1,this.hasSlotController=new Gn(this,`submenu`),this.submenuController=new Qie(this,this.hasSlotController),this.handleHostClick=e=>{this.disabled&&(e.preventDefault(),e.stopImmediatePropagation())},this.handleMouseOver=e=>{this.focus(),e.stopPropagation()}}connectedCallback(){super.connectedCallback(),this.addEventListener(`click`,this.handleHostClick),this.addEventListener(`mouseover`,this.handleMouseOver)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`click`,this.handleHostClick),this.removeEventListener(`mouseover`,this.handleMouseOver)}handleDefaultSlotChange(){let e=this.getTextLabel();if(this.cachedTextLabel===void 0){this.cachedTextLabel=e;return}e!==this.cachedTextLabel&&(this.cachedTextLabel=e,this.emit(`slotchange`,{bubbles:!0,composed:!1,cancelable:!1}))}handleCheckedChange(){if(this.checked&&this.type!==`checkbox`){this.checked=!1,console.error(`The checked attribute can only be used on menu items with type="checkbox"`,this);return}this.type===`checkbox`?this.setAttribute(`aria-checked`,this.checked?`true`:`false`):this.removeAttribute(`aria-checked`)}handleDisabledChange(){this.setAttribute(`aria-disabled`,this.disabled?`true`:`false`)}handleTypeChange(){this.type===`checkbox`?(this.setAttribute(`role`,`menuitemcheckbox`),this.setAttribute(`aria-checked`,this.checked?`true`:`false`)):(this.setAttribute(`role`,`menuitem`),this.removeAttribute(`aria-checked`))}getTextLabel(){return Rre(this.defaultSlot)}isSubmenu(){return this.hasSlotController.test(`submenu`)}render(){let e=this.localize.dir()===`rtl`,t=this.submenuController.isExpanded();return M` + `:M` `}},Kr=class extends Xt{constructor(){super(...arguments),this.localize=new pn(this),this.type=`normal`,this.checked=!1,this.value=``,this.loading=!1,this.disabled=!1,this.hasSlotController=new Qn(this,`submenu`),this.submenuController=new Jie(this,this.hasSlotController),this.handleHostClick=e=>{this.disabled&&(e.preventDefault(),e.stopImmediatePropagation())},this.handleMouseOver=e=>{this.focus(),e.stopPropagation()}}connectedCallback(){super.connectedCallback(),this.addEventListener(`click`,this.handleHostClick),this.addEventListener(`mouseover`,this.handleMouseOver)}disconnectedCallback(){super.disconnectedCallback(),this.removeEventListener(`click`,this.handleHostClick),this.removeEventListener(`mouseover`,this.handleMouseOver)}handleDefaultSlotChange(){let e=this.getTextLabel();if(this.cachedTextLabel===void 0){this.cachedTextLabel=e;return}e!==this.cachedTextLabel&&(this.cachedTextLabel=e,this.emit(`slotchange`,{bubbles:!0,composed:!1,cancelable:!1}))}handleCheckedChange(){if(this.checked&&this.type!==`checkbox`){this.checked=!1,console.error(`The checked attribute can only be used on menu items with type="checkbox"`,this);return}this.type===`checkbox`?this.setAttribute(`aria-checked`,this.checked?`true`:`false`):this.removeAttribute(`aria-checked`)}handleDisabledChange(){this.setAttribute(`aria-disabled`,this.disabled?`true`:`false`)}handleTypeChange(){this.type===`checkbox`?(this.setAttribute(`role`,`menuitemcheckbox`),this.setAttribute(`aria-checked`,this.checked?`true`:`false`)):(this.setAttribute(`role`,`menuitem`),this.removeAttribute(`aria-checked`))}getTextLabel(){return jre(this.defaultSlot)}isSubmenu(){return this.hasSlotController.test(`submenu`)}render(){let e=this.localize.dir()===`rtl`,t=this.submenuController.isExpanded();return M`
@@ -4080,7 +4080,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value ${this.submenuController.renderSubmenu()} ${this.loading?M` `:``}
- `}};Hr.styles=[Wt,Uie],Hr.dependencies={"sl-icon":$t,"sl-popup":Pn,"sl-spinner":Xn},Ht([Jt(`slot:not([name])`)],Hr.prototype,`defaultSlot`,2),Ht([Jt(`.menu-item`)],Hr.prototype,`menuItem`,2),Ht([Kt()],Hr.prototype,`type`,2),Ht([Kt({type:Boolean,reflect:!0})],Hr.prototype,`checked`,2),Ht([Kt()],Hr.prototype,`value`,2),Ht([Kt({type:Boolean,reflect:!0})],Hr.prototype,`loading`,2),Ht([Kt({type:Boolean,reflect:!0})],Hr.prototype,`disabled`,2),Ht([Ut(`checked`)],Hr.prototype,`handleCheckedChange`,1),Ht([Ut(`disabled`)],Hr.prototype,`handleDisabledChange`,1),Ht([Ut(`type`)],Hr.prototype,`handleTypeChange`,1),Hr.define(`sl-menu-item`);function Ur(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var $ie=`pp-split-position`,Wr=20,eae=1,tae=`pb33f-theme`,nae=`pb33f-base-theme`,rae=`pb33f-theme-change`;function iae(e){try{return localStorage.getItem(e)}catch{return null}}function aae(e,t){try{localStorage.setItem(e,t)}catch{}}function oae(e,t){e.setAttribute(`label`,t),e.setAttribute(`title`,t),e.setAttribute(`aria-label`,t)}function sae(){try{let e=sessionStorage.getItem($ie);return lae(e?parseFloat(e):Wr)}catch{return Wr}}function cae(e){try{sessionStorage.setItem($ie,String(e))}catch{}}function lae(e){return!Number.isFinite(e)||e100?Wr:e}function uae(e){return Number.isFinite(e)?Math.min(100,Math.max(eae,e)):Wr}var Gr=class extends zt{constructor(...e){super(...e),this.title=``,this.splitPos=Wr,this.currentVersion=``,this.versions=[],this.embedded=!1,this.splitPanel=null,this.splitDivider=null,this.splitHandle=null,this.handleSplitReposition=e=>this.onReposition(e),this.handleSplitHostPointerDown=e=>this.startHostPointerSplitDrag(e),this.handleSplitHostMouseDown=e=>this.startHostMouseSplitDrag(e),this.handleSplitPointerDown=e=>this.startPointerSplitDrag(e),this.handleSplitMouseDown=e=>this.startMouseSplitDrag(e),this.handleSplitTouchStart=e=>this.startTouchSplitDrag(e)}static{this.styles=[Pie,Pr]}connectedCallback(){super.connectedCallback(),this.title=this.getAttribute(`data-title`)||document.title||`API Documentation`,this.currentVersion=document.body?.dataset.ppCurrentVersion||``,this.versions=this.parseVersions(document.body?.dataset.ppVersions),this.embedded=document.documentElement.hasAttribute(`data-pp-embedded-docs`)||document.body?.dataset.ppEmbeddedDocs===`true`,this.toggleAttribute(`embedded`,this.embedded),this.splitPos=sae()}disconnectedCallback(){this.splitPanel?.removeEventListener(`sl-reposition`,this.handleSplitReposition),this.splitPanel?.removeEventListener(`pointerdown`,this.handleSplitHostPointerDown),this.splitPanel?.removeEventListener(`mousedown`,this.handleSplitHostMouseDown),this.detachSplitDragTarget(this.splitDivider),this.detachSplitDragTarget(this.splitHandle),this.splitPanel=null,this.splitDivider=null,this.splitHandle=null,super.disconnectedCallback()}updated(){this.syncHeader(),this.syncThemeControls(),this.syncSplitPanel()}syncHeader(){let e=this.renderRoot?.querySelector(`.doc-logo-link`);e&&(e.href=zie())}activeTheme(){let e=iae(tae);if(e===`light`||e===`tektronix`)return e;let t=document.documentElement.getAttribute(`theme`);return t===`light`||t===`tektronix`?t:`dark`}baseTheme(){let e=iae(nae);return e===`light`?`light`:e===`dark`?`dark`:this.activeTheme()===`light`?`light`:`dark`}applyTheme(e,t=this.baseTheme()){let n=e===`tektronix`?t:e;aae(tae,e),aae(nae,n),document.documentElement.setAttribute(`theme`,e),e===`light`?document.documentElement.classList.remove(`sl-theme-dark`):document.documentElement.classList.add(`sl-theme-dark`),window.dispatchEvent(new CustomEvent(rae,{detail:{theme:e}})),this.syncThemeControls()}toggleBaseTheme(){let e=this.baseTheme()===`dark`?`light`:`dark`;this.applyTheme(e,e)}toggleTektronix(){let e=this.baseTheme();this.applyTheme(this.activeTheme()===`tektronix`?e:`tektronix`,e)}syncThemeControls(){let e=this.renderRoot?.querySelector(`.theme-mode-toggle`),t=this.renderRoot?.querySelector(`.theme-tektronix-toggle`),n=this.baseTheme(),r=this.activeTheme();if(e){let t=n===`dark`?`Switch to Roger Mode (light)`:`Switch to PB33F Mode (dark)`;e.querySelector(`sl-icon`)?.setAttribute(`name`,n===`dark`?`sun`:`moon`),oae(e,t),e.onclick=()=>this.toggleBaseTheme()}t&&(oae(t,r===`tektronix`?`Disable Tektronix 4010 Mode`:`Enable Tektronix 4010 Mode`),t.classList.toggle(`tek-active`,r===`tektronix`),t.onclick=()=>this.toggleTektronix())}syncSplitPanel(){let e=this.renderRoot?.querySelector(`sl-split-panel`);e&&(this.splitPanel!==e&&(this.splitPanel?.removeEventListener(`sl-reposition`,this.handleSplitReposition),this.splitPanel?.removeEventListener(`pointerdown`,this.handleSplitHostPointerDown),this.splitPanel?.removeEventListener(`mousedown`,this.handleSplitHostMouseDown),e.addEventListener(`sl-reposition`,this.handleSplitReposition),e.addEventListener(`pointerdown`,this.handleSplitHostPointerDown),e.addEventListener(`mousedown`,this.handleSplitHostMouseDown),this.splitPanel=e),e.position!==this.splitPos&&(e.position=this.splitPos),e.getAttribute(`position`)!==String(this.splitPos)&&e.setAttribute(`position`,String(this.splitPos)),this.syncSplitDivider(e),e.updateComplete?.then(()=>this.syncSplitDivider(e)),this.syncSplitHandle())}syncSplitDivider(e){let t=e.shadowRoot?.querySelector(`.divider`);!t||this.splitDivider===t||(this.detachSplitDragTarget(this.splitDivider),this.attachSplitDragTarget(t),this.splitDivider=t)}syncSplitHandle(){let e=this.renderRoot?.querySelector(`sl-icon.divider-vert`);!e||this.splitHandle===e||(this.detachSplitDragTarget(this.splitHandle),this.attachSplitDragTarget(e),this.splitHandle=e)}attachSplitDragTarget(e){e.addEventListener(`pointerdown`,this.handleSplitPointerDown),e.addEventListener(`mousedown`,this.handleSplitMouseDown),e.addEventListener(`touchstart`,this.handleSplitTouchStart,{passive:!1}),e.setAttribute(`data-pp-resize-ready`,`true`)}detachSplitDragTarget(e){e?.removeEventListener(`pointerdown`,this.handleSplitPointerDown),e?.removeEventListener(`mousedown`,this.handleSplitMouseDown),e?.removeEventListener(`touchstart`,this.handleSplitTouchStart),e?.removeAttribute(`data-pp-resize-ready`)}isNearSplitDivider(e){let t=this.splitDivider?.getBoundingClientRect()||this.splitHandle?.getBoundingClientRect();return t?e>=t.left-8&&e<=t.right+8:!1}startHostPointerSplitDrag(e){this.isNearSplitDivider(e.clientX)&&this.startPointerSplitDrag(e)}startHostMouseSplitDrag(e){this.isNearSplitDivider(e.clientX)&&this.startMouseSplitDrag(e)}startPointerSplitDrag(e){if(e.button!==0)return;e.preventDefault(),e.stopPropagation(),e.currentTarget?.setPointerCapture?.(e.pointerId),this.setSplitPositionFromClientX(e.clientX);let t=e=>{e.preventDefault(),this.setSplitPositionFromClientX(e.clientX)},n=()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n),document.removeEventListener(`pointercancel`,n)};document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n),document.addEventListener(`pointercancel`,n)}startMouseSplitDrag(e){if(e.button!==0)return;e.preventDefault(),e.stopPropagation(),this.setSplitPositionFromClientX(e.clientX);let t=e=>{e.preventDefault(),this.setSplitPositionFromClientX(e.clientX)},n=()=>{document.removeEventListener(`mousemove`,t),document.removeEventListener(`mouseup`,n)};document.addEventListener(`mousemove`,t),document.addEventListener(`mouseup`,n)}startTouchSplitDrag(e){let t=e.touches[0];if(!t)return;e.preventDefault(),e.stopPropagation(),this.setSplitPositionFromClientX(t.clientX);let n=e=>{let t=e.touches[0];t&&(e.preventDefault(),this.setSplitPositionFromClientX(t.clientX))},r=()=>{document.removeEventListener(`touchmove`,n),document.removeEventListener(`touchend`,r),document.removeEventListener(`touchcancel`,r)};document.addEventListener(`touchmove`,n,{passive:!1}),document.addEventListener(`touchend`,r),document.addEventListener(`touchcancel`,r)}setSplitPositionFromClientX(e){if(!this.splitPanel)return;let t=this.splitPanel.getBoundingClientRect();if(t.width<=0)return;let n=uae((e-t.left)/t.width*100);this.splitPos=n,this.splitPanel.position=n,this.splitPanel.setAttribute(`position`,String(n)),cae(n)}onReposition(e){let t=uae(e.target.position??Wr);typeof t==`number`&&(this.splitPos=t,cae(t))}parseVersions(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>!!e&&typeof e.label==`string`&&typeof e.href==`string`):[]}catch{return[]}}onVersionChange(e){let t=e.detail?.item;t?.value&&(window.location.href=t.value)}currentVersionLabel(){return this.versions.find(e=>e.active||e.label===this.currentVersion)?.label||this.currentVersion||this.versions[0]?.label||`Version`}currentVersionTriggerLabel(){return`Version: ${this.currentVersionLabel()}`}render(){return M` + `}};Kr.styles=[Gt,zie],Kr.dependencies={"sl-icon":tn,"sl-popup":Vn,"sl-spinner":rr},Ut([Yt(`slot:not([name])`)],Kr.prototype,`defaultSlot`,2),Ut([Yt(`.menu-item`)],Kr.prototype,`menuItem`,2),Ut([qt()],Kr.prototype,`type`,2),Ut([qt({type:Boolean,reflect:!0})],Kr.prototype,`checked`,2),Ut([qt()],Kr.prototype,`value`,2),Ut([qt({type:Boolean,reflect:!0})],Kr.prototype,`loading`,2),Ut([qt({type:Boolean,reflect:!0})],Kr.prototype,`disabled`,2),Ut([Wt(`checked`)],Kr.prototype,`handleCheckedChange`,1),Ut([Wt(`disabled`)],Kr.prototype,`handleDisabledChange`,1),Ut([Wt(`type`)],Kr.prototype,`handleTypeChange`,1),Kr.define(`sl-menu-item`);function qr(e,t,n,r){var i=arguments.length,a=i<3?t:r===null?r=Object.getOwnPropertyDescriptor(t,n):r,o;if(typeof Reflect==`object`&&typeof Reflect.decorate==`function`)a=Reflect.decorate(e,t,n,r);else for(var s=e.length-1;s>=0;s--)(o=e[s])&&(a=(i<3?o(a):i>3?o(t,n,a):o(t,n))||a);return i>3&&a&&Object.defineProperty(t,n,a),a}var Yie=`pp-split-position`,Jr=20,Xie=1,Zie=`pb33f-theme`,Qie=`pb33f-base-theme`,$ie=`pb33f-theme-change`;function eae(e){try{return localStorage.getItem(e)}catch{return null}}function tae(e,t){try{localStorage.setItem(e,t)}catch{}}function nae(e,t){e.setAttribute(`label`,t),e.setAttribute(`title`,t),e.setAttribute(`aria-label`,t)}function rae(){try{let e=sessionStorage.getItem(Yie);return aae(e?parseFloat(e):Jr)}catch{return Jr}}function iae(e){try{sessionStorage.setItem(Yie,String(e))}catch{}}function aae(e){return!Number.isFinite(e)||e100?Jr:e}function oae(e){return Number.isFinite(e)?Math.min(100,Math.max(Xie,e)):Jr}var Yr=class extends Bt{constructor(...e){super(...e),this.title=``,this.splitPos=Jr,this.currentVersion=``,this.versions=[],this.embedded=!1,this.splitPanel=null,this.splitDivider=null,this.splitHandle=null,this.handleSplitReposition=e=>this.onReposition(e),this.handleSplitHostPointerDown=e=>this.startHostPointerSplitDrag(e),this.handleSplitHostMouseDown=e=>this.startHostMouseSplitDrag(e),this.handleSplitPointerDown=e=>this.startPointerSplitDrag(e),this.handleSplitMouseDown=e=>this.startMouseSplitDrag(e),this.handleSplitTouchStart=e=>this.startTouchSplitDrag(e)}static{this.styles=[kie,zr]}connectedCallback(){super.connectedCallback(),this.title=this.getAttribute(`data-title`)||document.title||`API Documentation`,this.currentVersion=document.body?.dataset.ppCurrentVersion||``,this.versions=this.parseVersions(document.body?.dataset.ppVersions),this.embedded=document.documentElement.hasAttribute(`data-pp-embedded-docs`)||document.body?.dataset.ppEmbeddedDocs===`true`,this.toggleAttribute(`embedded`,this.embedded),this.splitPos=rae()}disconnectedCallback(){this.splitPanel?.removeEventListener(`sl-reposition`,this.handleSplitReposition),this.splitPanel?.removeEventListener(`pointerdown`,this.handleSplitHostPointerDown),this.splitPanel?.removeEventListener(`mousedown`,this.handleSplitHostMouseDown),this.detachSplitDragTarget(this.splitDivider),this.detachSplitDragTarget(this.splitHandle),this.splitPanel=null,this.splitDivider=null,this.splitHandle=null,super.disconnectedCallback()}updated(){this.syncHeader(),this.syncThemeControls(),this.syncSplitPanel()}syncHeader(){let e=this.renderRoot?.querySelector(`.doc-logo-link`);e&&(e.href=Pie())}activeTheme(){let e=eae(Zie);if(e===`light`||e===`tektronix`)return e;let t=document.documentElement.getAttribute(`theme`);return t===`light`||t===`tektronix`?t:`dark`}baseTheme(){let e=eae(Qie);return e===`light`?`light`:e===`dark`?`dark`:this.activeTheme()===`light`?`light`:`dark`}applyTheme(e,t=this.baseTheme()){let n=e===`tektronix`?t:e;tae(Zie,e),tae(Qie,n),document.documentElement.setAttribute(`theme`,e),e===`light`?document.documentElement.classList.remove(`sl-theme-dark`):document.documentElement.classList.add(`sl-theme-dark`),window.dispatchEvent(new CustomEvent($ie,{detail:{theme:e}})),this.syncThemeControls()}toggleBaseTheme(){let e=this.baseTheme()===`dark`?`light`:`dark`;this.applyTheme(e,e)}toggleTektronix(){let e=this.baseTheme();this.applyTheme(this.activeTheme()===`tektronix`?e:`tektronix`,e)}syncThemeControls(){let e=this.renderRoot?.querySelector(`.theme-mode-toggle`),t=this.renderRoot?.querySelector(`.theme-tektronix-toggle`),n=this.baseTheme(),r=this.activeTheme();if(e){let t=n===`dark`?`Switch to Roger Mode (light)`:`Switch to PB33F Mode (dark)`;e.querySelector(`sl-icon`)?.setAttribute(`name`,n===`dark`?`sun`:`moon`),nae(e,t),e.onclick=()=>this.toggleBaseTheme()}t&&(nae(t,r===`tektronix`?`Disable Tektronix 4010 Mode`:`Enable Tektronix 4010 Mode`),t.classList.toggle(`tek-active`,r===`tektronix`),t.onclick=()=>this.toggleTektronix())}syncSplitPanel(){let e=this.renderRoot?.querySelector(`sl-split-panel`);e&&(this.splitPanel!==e&&(this.splitPanel?.removeEventListener(`sl-reposition`,this.handleSplitReposition),this.splitPanel?.removeEventListener(`pointerdown`,this.handleSplitHostPointerDown),this.splitPanel?.removeEventListener(`mousedown`,this.handleSplitHostMouseDown),e.addEventListener(`sl-reposition`,this.handleSplitReposition),e.addEventListener(`pointerdown`,this.handleSplitHostPointerDown),e.addEventListener(`mousedown`,this.handleSplitHostMouseDown),this.splitPanel=e),e.position!==this.splitPos&&(e.position=this.splitPos),e.getAttribute(`position`)!==String(this.splitPos)&&e.setAttribute(`position`,String(this.splitPos)),this.syncSplitDivider(e),e.updateComplete?.then(()=>this.syncSplitDivider(e)),this.syncSplitHandle())}syncSplitDivider(e){let t=e.shadowRoot?.querySelector(`.divider`);!t||this.splitDivider===t||(this.detachSplitDragTarget(this.splitDivider),this.attachSplitDragTarget(t),this.splitDivider=t)}syncSplitHandle(){let e=this.renderRoot?.querySelector(`sl-icon.divider-vert`);!e||this.splitHandle===e||(this.detachSplitDragTarget(this.splitHandle),this.attachSplitDragTarget(e),this.splitHandle=e)}attachSplitDragTarget(e){e.addEventListener(`pointerdown`,this.handleSplitPointerDown),e.addEventListener(`mousedown`,this.handleSplitMouseDown),e.addEventListener(`touchstart`,this.handleSplitTouchStart,{passive:!1}),e.setAttribute(`data-pp-resize-ready`,`true`)}detachSplitDragTarget(e){e?.removeEventListener(`pointerdown`,this.handleSplitPointerDown),e?.removeEventListener(`mousedown`,this.handleSplitMouseDown),e?.removeEventListener(`touchstart`,this.handleSplitTouchStart),e?.removeAttribute(`data-pp-resize-ready`)}isNearSplitDivider(e){let t=this.splitDivider?.getBoundingClientRect()||this.splitHandle?.getBoundingClientRect();return t?e>=t.left-8&&e<=t.right+8:!1}startHostPointerSplitDrag(e){this.isNearSplitDivider(e.clientX)&&this.startPointerSplitDrag(e)}startHostMouseSplitDrag(e){this.isNearSplitDivider(e.clientX)&&this.startMouseSplitDrag(e)}startPointerSplitDrag(e){if(e.button!==0)return;e.preventDefault(),e.stopPropagation(),e.currentTarget?.setPointerCapture?.(e.pointerId),this.setSplitPositionFromClientX(e.clientX);let t=e=>{e.preventDefault(),this.setSplitPositionFromClientX(e.clientX)},n=()=>{document.removeEventListener(`pointermove`,t),document.removeEventListener(`pointerup`,n),document.removeEventListener(`pointercancel`,n)};document.addEventListener(`pointermove`,t),document.addEventListener(`pointerup`,n),document.addEventListener(`pointercancel`,n)}startMouseSplitDrag(e){if(e.button!==0)return;e.preventDefault(),e.stopPropagation(),this.setSplitPositionFromClientX(e.clientX);let t=e=>{e.preventDefault(),this.setSplitPositionFromClientX(e.clientX)},n=()=>{document.removeEventListener(`mousemove`,t),document.removeEventListener(`mouseup`,n)};document.addEventListener(`mousemove`,t),document.addEventListener(`mouseup`,n)}startTouchSplitDrag(e){let t=e.touches[0];if(!t)return;e.preventDefault(),e.stopPropagation(),this.setSplitPositionFromClientX(t.clientX);let n=e=>{let t=e.touches[0];t&&(e.preventDefault(),this.setSplitPositionFromClientX(t.clientX))},r=()=>{document.removeEventListener(`touchmove`,n),document.removeEventListener(`touchend`,r),document.removeEventListener(`touchcancel`,r)};document.addEventListener(`touchmove`,n,{passive:!1}),document.addEventListener(`touchend`,r),document.addEventListener(`touchcancel`,r)}setSplitPositionFromClientX(e){if(!this.splitPanel)return;let t=this.splitPanel.getBoundingClientRect();if(t.width<=0)return;let n=oae((e-t.left)/t.width*100);this.splitPos=n,this.splitPanel.position=n,this.splitPanel.setAttribute(`position`,String(n)),iae(n)}onReposition(e){let t=oae(e.target.position??Jr);typeof t==`number`&&(this.splitPos=t,iae(t))}parseVersions(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t.filter(e=>!!e&&typeof e.label==`string`&&typeof e.href==`string`):[]}catch{return[]}}onVersionChange(e){let t=e.detail?.item;t?.value&&(window.location.href=t.value)}currentVersionLabel(){return this.versions.find(e=>e.active||e.label===this.currentVersion)?.label||this.currentVersion||this.versions[0]?.label||`Version`}currentVersionTriggerLabel(){return`Version: ${this.currentVersionLabel()}`}render(){return M` ${this.embedded?null:M`
- `}};Ur([qt()],Gr.prototype,`title`,void 0),Ur([qt()],Gr.prototype,`splitPos`,void 0),Ur([qt()],Gr.prototype,`currentVersion`,void 0),Ur([qt()],Gr.prototype,`versions`,void 0),Ur([qt()],Gr.prototype,`embedded`,void 0),Gr=Ur([Gt(`pp-layout`)],Gr);var dae=nt` + `}};qr([Jt()],Yr.prototype,`title`,void 0),qr([Jt()],Yr.prototype,`splitPos`,void 0),qr([Jt()],Yr.prototype,`currentVersion`,void 0),qr([Jt()],Yr.prototype,`versions`,void 0),qr([Jt()],Yr.prototype,`embedded`,void 0),Yr=qr([Kt(`pp-layout`)],Yr);var sae=nt` :host { display: inline-block; } @@ -4244,7 +4244,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value color: var(--sl-input-required-content-color); margin-inline-start: var(--sl-input-required-content-offset); } -`,Kr=(e=`value`)=>(t,n)=>{let r=t.constructor,i=r.prototype.attributeChangedCallback;r.prototype.attributeChangedCallback=function(t,a,o){let s=r.getPropertyOptions(e);if(t===(typeof s.attribute==`string`?s.attribute:e)){let t=s.converter||gt,r=(typeof t==`function`?t:t?.fromAttribute??gt.fromAttribute)(o,s.type);this[e]!==r&&(this[n]=r)}i.call(this,t,a,o)}},fae=nt` +`,Xr=(e=`value`)=>(t,n)=>{let r=t.constructor,i=r.prototype.attributeChangedCallback;r.prototype.attributeChangedCallback=function(t,a,o){let s=r.getPropertyOptions(e);if(t===(typeof s.attribute==`string`?s.attribute:e)){let t=s.converter||gt,r=(typeof t==`function`?t:t?.fromAttribute??gt.fromAttribute)(o,s.type);this[e]!==r&&(this[n]=r)}i.call(this,t,a,o)}},cae=nt` .form-control .form-control__label { display: none; } @@ -4300,22 +4300,22 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value .form-control--has-help-text.form-control--radio-group .form-control__help-text { margin-top: var(--sl-spacing-2x-small); } -`,pae=tn(class extends nn{constructor(e){if(super(e),e.type!==en.PROPERTY&&e.type!==en.ATTRIBUTE&&e.type!==en.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!dte(e))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(e,[t]){if(t===Nt||t===Pt)return t;let n=e.element,r=e.name;if(e.type===en.PROPERTY){if(t===n[r])return Nt}else if(e.type===en.BOOLEAN_ATTRIBUTE){if(!!t===n.hasAttribute(r))return Nt}else if(e.type===en.ATTRIBUTE&&n.getAttribute(r)===t+``)return Nt;return mte(e),t}}),qr=class extends Yt{constructor(){super(...arguments),this.formControlController=new Gre(this,{value:e=>e.checked?e.value||`on`:void 0,defaultValue:e=>e.defaultChecked,setValue:(e,t)=>e.checked=t}),this.hasSlotController=new Gn(this,`help-text`),this.hasFocus=!1,this.title=``,this.name=``,this.size=`medium`,this.disabled=!1,this.checked=!1,this.indeterminate=!1,this.defaultChecked=!1,this.form=``,this.required=!1,this.helpText=``}get validity(){return this.input.validity}get validationMessage(){return this.input.validationMessage}firstUpdated(){this.formControlController.updateValidity()}handleClick(){this.checked=!this.checked,this.indeterminate=!1,this.emit(`sl-change`)}handleBlur(){this.hasFocus=!1,this.emit(`sl-blur`)}handleInput(){this.emit(`sl-input`)}handleInvalid(e){this.formControlController.setValidity(!1),this.formControlController.emitInvalidEvent(e)}handleFocus(){this.hasFocus=!0,this.emit(`sl-focus`)}handleDisabledChange(){this.formControlController.setValidity(this.disabled)}handleStateChange(){this.input.checked=this.checked,this.input.indeterminate=this.indeterminate,this.formControlController.updateValidity()}click(){this.input.click()}focus(e){this.input.focus(e)}blur(){this.input.blur()}checkValidity(){return this.input.checkValidity()}getForm(){return this.formControlController.getForm()}reportValidity(){return this.input.reportValidity()}setCustomValidity(e){this.input.setCustomValidity(e),this.formControlController.updateValidity()}render(){let e=this.hasSlotController.test(`help-text`),t=this.helpText?!0:!!e;return M` +`,lae=rn(class extends an{constructor(e){if(super(e),e.type!==nn.PROPERTY&&e.type!==nn.ATTRIBUTE&&e.type!==nn.BOOLEAN_ATTRIBUTE)throw Error("The `live` directive is not allowed on child or event bindings");if(!ute(e))throw Error("`live` bindings can only contain a single expression")}render(e){return e}update(e,[t]){if(t===Nt||t===Pt)return t;let n=e.element,r=e.name;if(e.type===nn.PROPERTY){if(t===n[r])return Nt}else if(e.type===nn.BOOLEAN_ATTRIBUTE){if(!!t===n.hasAttribute(r))return Nt}else if(e.type===nn.ATTRIBUTE&&n.getAttribute(r)===t+``)return Nt;return pte(e),t}}),Zr=class extends Xt{constructor(){super(...arguments),this.formControlController=new cr(this,{value:e=>e.checked?e.value||`on`:void 0,defaultValue:e=>e.defaultChecked,setValue:(e,t)=>e.checked=t}),this.hasSlotController=new Qn(this,`help-text`),this.hasFocus=!1,this.title=``,this.name=``,this.size=`medium`,this.disabled=!1,this.checked=!1,this.indeterminate=!1,this.defaultChecked=!1,this.form=``,this.required=!1,this.helpText=``}get validity(){return this.input.validity}get validationMessage(){return this.input.validationMessage}firstUpdated(){this.formControlController.updateValidity()}handleClick(){this.checked=!this.checked,this.indeterminate=!1,this.emit(`sl-change`)}handleBlur(){this.hasFocus=!1,this.emit(`sl-blur`)}handleInput(){this.emit(`sl-input`)}handleInvalid(e){this.formControlController.setValidity(!1),this.formControlController.emitInvalidEvent(e)}handleFocus(){this.hasFocus=!0,this.emit(`sl-focus`)}handleDisabledChange(){this.formControlController.setValidity(this.disabled)}handleStateChange(){this.input.checked=this.checked,this.input.indeterminate=this.indeterminate,this.formControlController.updateValidity()}click(){this.input.click()}focus(e){this.input.focus(e)}blur(){this.input.blur()}checkValidity(){return this.input.checkValidity()}getForm(){return this.formControlController.getForm()}reportValidity(){return this.input.reportValidity()}setCustomValidity(e){this.input.setCustomValidity(e),this.formControlController.updateValidity()}render(){let e=this.hasSlotController.test(`help-text`),t=this.helpText?!0:!!e;return M`
- `}};qr.styles=[Wt,fae,dae],qr.dependencies={"sl-icon":$t},Ht([Jt(`input[type="checkbox"]`)],qr.prototype,`input`,2),Ht([qt()],qr.prototype,`hasFocus`,2),Ht([Kt()],qr.prototype,`title`,2),Ht([Kt()],qr.prototype,`name`,2),Ht([Kt()],qr.prototype,`value`,2),Ht([Kt({reflect:!0})],qr.prototype,`size`,2),Ht([Kt({type:Boolean,reflect:!0})],qr.prototype,`disabled`,2),Ht([Kt({type:Boolean,reflect:!0})],qr.prototype,`checked`,2),Ht([Kt({type:Boolean,reflect:!0})],qr.prototype,`indeterminate`,2),Ht([Kr(`checked`)],qr.prototype,`defaultChecked`,2),Ht([Kt({reflect:!0})],qr.prototype,`form`,2),Ht([Kt({type:Boolean,reflect:!0})],qr.prototype,`required`,2),Ht([Kt({attribute:`help-text`})],qr.prototype,`helpText`,2),Ht([Ut(`disabled`,{waitUntilFirstUpdate:!0})],qr.prototype,`handleDisabledChange`,1),Ht([Ut([`checked`,`indeterminate`],{waitUntilFirstUpdate:!0})],qr.prototype,`handleStateChange`,1),qr.define(`sl-checkbox`);var mae=nt` + `}};Zr.styles=[Gt,cae,sae],Zr.dependencies={"sl-icon":tn},Ut([Yt(`input[type="checkbox"]`)],Zr.prototype,`input`,2),Ut([Jt()],Zr.prototype,`hasFocus`,2),Ut([qt()],Zr.prototype,`title`,2),Ut([qt()],Zr.prototype,`name`,2),Ut([qt()],Zr.prototype,`value`,2),Ut([qt({reflect:!0})],Zr.prototype,`size`,2),Ut([qt({type:Boolean,reflect:!0})],Zr.prototype,`disabled`,2),Ut([qt({type:Boolean,reflect:!0})],Zr.prototype,`checked`,2),Ut([qt({type:Boolean,reflect:!0})],Zr.prototype,`indeterminate`,2),Ut([Xr(`checked`)],Zr.prototype,`defaultChecked`,2),Ut([qt({reflect:!0})],Zr.prototype,`form`,2),Ut([qt({type:Boolean,reflect:!0})],Zr.prototype,`required`,2),Ut([qt({attribute:`help-text`})],Zr.prototype,`helpText`,2),Ut([Wt(`disabled`,{waitUntilFirstUpdate:!0})],Zr.prototype,`handleDisabledChange`,1),Ut([Wt([`checked`,`indeterminate`],{waitUntilFirstUpdate:!0})],Zr.prototype,`handleStateChange`,1),Zr.define(`sl-checkbox`);var uae=nt` :host { display: block; padding: var(--global-padding); @@ -4720,7 +4720,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value text-decoration: none; } -`,Jr=nt` +`,Qr=nt` /* Direct sl-tooltip styling (used by pp-raw-viewer-btn etc.) */ sl-tooltip::part(base){ font-family: var(--font-stack), monospace; @@ -4743,7 +4743,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value sl-tooltip::part(base__arrow){ background-color: var(--secondary-color); } -`,Yr=class extends zt{constructor(...e){super(...e),this.navJson=``,this.pagesJson=``,this.modelsJson=``,this.webhooksJson=``,this.activeSlug=``,this.docsExpiresAt=``,this.archiveExportUrl=``,this.hasContentPagesFallback=!1,this.tags=[],this.pages=[],this.modelGroups=[],this.webhooks=[],this.expiryTick=0,this.hostedArchiveControls=!1,this.archiveFormat=`zip`,this.includeDiagnostics=!1,this.includeAIDocs=!1,this.archiveExporting=!1,this.archiveExportTargetOrigin=``,this.archiveExportRequestId=0,this.activeArchiveExportRequestId=0,this.loggedEmptyState=!1,this.loggedContentState=!1,this.hostMessageHandler=e=>this.handleHostMessage(e)}static{this.styles=[mae,Jr]}logPerf(e,t){let n=globalThis.__PP_LOG;typeof n==`function`&&n(e,t)}previewHoldEnabled(){return this.getAttribute(`data-pp-preview-hold`)===`true`}developerMode(){return document.body?.dataset.ppDeveloperMode===`true`}hasHydratedNav(){return this.hasAttribute(`data-nav`)||this.hasAttribute(`data-pages`)||this.hasAttribute(`data-models`)||this.hasAttribute(`data-webhooks`)||this.hasAttribute(`data-pp-nav-cached`)}hasNavContent(){return this.tags.length>0||this.pages.length>0||this.modelGroups.length>0||this.webhooks.length>0}archiveControlsEnabled(){return this.hostedArchiveControls||this.archiveExportUrl.trim()!==``}ensureExpiryTimer(){let e=Date.parse(this.docsExpiresAt);if(Number.isNaN(e)){this.stopExpiryTimer();return}if(Date.now()>=e){this.stopExpiryTimer();return}this.expiryTimer===void 0&&(this.expiryTimer=window.setInterval(()=>{this.expiryTick++,Date.now()>=e&&this.stopExpiryTimer()},1e3))}stopExpiryTimer(){this.expiryTimer!==void 0&&(window.clearInterval(this.expiryTimer),this.expiryTimer=void 0)}docsExpiryLabel(e){this.expiryTick;let t=Math.floor(Math.max(0,e-Date.now())/1e3);if(t<=0)return M`docs expired!`;let n=Math.floor(t/60);return n>=2?M`docs expire in ${n} minutes`:n===1?M`docs expire in under two minutes`:M`docs expiring in ${t} second${t===1?``:`s`}`}renderDocsExpiry(){let e=Date.parse(this.docsExpiresAt);if(Number.isNaN(e))return Pt;let t=this.docsExpiryLabel(e),n=e-Date.now(),r=n<=0;return M` +`,$r=class extends Bt{constructor(...e){super(...e),this.navJson=``,this.pagesJson=``,this.modelsJson=``,this.webhooksJson=``,this.activeSlug=``,this.docsExpiresAt=``,this.archiveExportUrl=``,this.hasContentPagesFallback=!1,this.tags=[],this.pages=[],this.modelGroups=[],this.webhooks=[],this.expiryTick=0,this.hostedArchiveControls=!1,this.archiveFormat=`zip`,this.includeDiagnostics=!1,this.includeAIDocs=!1,this.archiveExporting=!1,this.archiveExportTargetOrigin=``,this.archiveExportRequestId=0,this.activeArchiveExportRequestId=0,this.loggedEmptyState=!1,this.loggedContentState=!1,this.hostMessageHandler=e=>this.handleHostMessage(e)}static{this.styles=[uae,Qr]}logPerf(e,t){let n=globalThis.__PP_LOG;typeof n==`function`&&n(e,t)}previewHoldEnabled(){return this.getAttribute(`data-pp-preview-hold`)===`true`}developerMode(){return document.body?.dataset.ppDeveloperMode===`true`}hasHydratedNav(){return this.hasAttribute(`data-nav`)||this.hasAttribute(`data-pages`)||this.hasAttribute(`data-models`)||this.hasAttribute(`data-webhooks`)||this.hasAttribute(`data-pp-nav-cached`)}hasNavContent(){return this.tags.length>0||this.pages.length>0||this.modelGroups.length>0||this.webhooks.length>0}archiveControlsEnabled(){return this.hostedArchiveControls||this.archiveExportUrl.trim()!==``}ensureExpiryTimer(){let e=Date.parse(this.docsExpiresAt);if(Number.isNaN(e)){this.stopExpiryTimer();return}if(Date.now()>=e){this.stopExpiryTimer();return}this.expiryTimer===void 0&&(this.expiryTimer=window.setInterval(()=>{this.expiryTick++,Date.now()>=e&&this.stopExpiryTimer()},1e3))}stopExpiryTimer(){this.expiryTimer!==void 0&&(window.clearInterval(this.expiryTimer),this.expiryTimer=void 0)}docsExpiryLabel(e){this.expiryTick;let t=Math.floor(Math.max(0,e-Date.now())/1e3);if(t<=0)return M`docs expired!`;let n=Math.floor(t/60);return n>=2?M`docs expire in ${n} minutes`:n===1?M`docs expire in under two minutes`:M`docs expiring in ${t} second${t===1?``:`s`}`}renderDocsExpiry(){let e=Date.parse(this.docsExpiresAt);if(Number.isNaN(e))return Pt;let t=this.docsExpiryLabel(e),n=e-Date.now(),r=n<=0;return M`
${t}
`}renderHostedArchiveControls(){return this.archiveControlsEnabled()?M`
export documentation
@@ -4826,13 +4826,13 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value `:!this.hasNavContent()&&!this.hasHydratedNav()?this.renderFallbackNav():M` ${this.renderHostedArchiveControls()} ${this.renderDocsExpiry()} - + API OVERVIEW ${this.developerMode()?M` + href=${Br(`diagnostics.html`)}> DIAGNOSTICS @@ -4843,7 +4843,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value
`:Pt} - `}};Ur([Kt({attribute:`data-nav`})],Yr.prototype,`navJson`,void 0),Ur([Kt({attribute:`data-pages`})],Yr.prototype,`pagesJson`,void 0),Ur([Kt({attribute:`data-models`})],Yr.prototype,`modelsJson`,void 0),Ur([Kt({attribute:`data-webhooks`})],Yr.prototype,`webhooksJson`,void 0),Ur([Kt({attribute:`data-active`})],Yr.prototype,`activeSlug`,void 0),Ur([Kt({attribute:`data-docs-expires-at`})],Yr.prototype,`docsExpiresAt`,void 0),Ur([Kt({attribute:`data-archive-export-url`})],Yr.prototype,`archiveExportUrl`,void 0),Ur([Kt({attribute:`data-has-content-pages`,type:Boolean})],Yr.prototype,`hasContentPagesFallback`,void 0),Ur([qt()],Yr.prototype,`tags`,void 0),Ur([qt()],Yr.prototype,`pages`,void 0),Ur([qt()],Yr.prototype,`modelGroups`,void 0),Ur([qt()],Yr.prototype,`webhooks`,void 0),Ur([qt()],Yr.prototype,`expiryTick`,void 0),Ur([qt()],Yr.prototype,`hostedArchiveControls`,void 0),Ur([qt()],Yr.prototype,`archiveFormat`,void 0),Ur([qt()],Yr.prototype,`includeDiagnostics`,void 0),Ur([qt()],Yr.prototype,`includeAIDocs`,void 0),Ur([qt()],Yr.prototype,`archiveExporting`,void 0),Yr=Ur([Gt(`pp-nav`)],Yr);var hae=nt` + `}};qr([qt({attribute:`data-nav`})],$r.prototype,`navJson`,void 0),qr([qt({attribute:`data-pages`})],$r.prototype,`pagesJson`,void 0),qr([qt({attribute:`data-models`})],$r.prototype,`modelsJson`,void 0),qr([qt({attribute:`data-webhooks`})],$r.prototype,`webhooksJson`,void 0),qr([qt({attribute:`data-active`})],$r.prototype,`activeSlug`,void 0),qr([qt({attribute:`data-docs-expires-at`})],$r.prototype,`docsExpiresAt`,void 0),qr([qt({attribute:`data-archive-export-url`})],$r.prototype,`archiveExportUrl`,void 0),qr([qt({attribute:`data-has-content-pages`,type:Boolean})],$r.prototype,`hasContentPagesFallback`,void 0),qr([Jt()],$r.prototype,`tags`,void 0),qr([Jt()],$r.prototype,`pages`,void 0),qr([Jt()],$r.prototype,`modelGroups`,void 0),qr([Jt()],$r.prototype,`webhooks`,void 0),qr([Jt()],$r.prototype,`expiryTick`,void 0),qr([Jt()],$r.prototype,`hostedArchiveControls`,void 0),qr([Jt()],$r.prototype,`archiveFormat`,void 0),qr([Jt()],$r.prototype,`includeDiagnostics`,void 0),qr([Jt()],$r.prototype,`includeAIDocs`,void 0),qr([Jt()],$r.prototype,`archiveExporting`,void 0),$r=qr([Kt(`pp-nav`)],$r);var dae=nt` :host { display: block; margin: 0; @@ -4904,9 +4904,19 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value .tag-name { min-width: 0; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.35rem; overflow-wrap: anywhere; } + .tag-protocols { + display: inline-flex; + flex-wrap: wrap; + gap: 0.35rem; + } + .tag-header:hover { background: var(--primary-color-verylowalpha); color: var(--primary-color); @@ -4986,7 +4996,8 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value white-space: normal; } - pb33f-http-method { + pb33f-http-method, + pp-asyncapi-action { justify-self: end; } @@ -5076,17 +5087,276 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value text-decoration: line-through; opacity: 0.5; } -`;function gae(e){return e?(e.errors||0)+(e.warns||0)+(e.infos||0):0}function _ae(e,t,n=`${t}s`){return e===1?t:n}function vae(e){return e===8?`err`:e===4?`warn`:`info`}function yae(e){return e===8?`exclamation-square`:e===4?`exclamation-triangle`:`info-square`}function bae(e){return e===8?`Error`:e===4?`Warning`:`Info`}function xae(e){return!e||gae(e)<=0?Pt:M` +`;function fae(e){return e?(e.errors||0)+(e.warns||0)+(e.infos||0):0}function pae(e,t,n=`${t}s`){return e===1?t:n}function mae(e){return e===8?`err`:e===4?`warn`:`info`}function hae(e){return e===8?`exclamation-square`:e===4?`exclamation-triangle`:`info-square`}function gae(e){return e===8?`Error`:e===4?`Warning`:`Info`}function _ae(e){return!e||fae(e)<=0?Pt:M` ${[{severity:`error`,count:e.errors||0,noun:`error`},{severity:`warn`,count:e.warns||0,noun:`warning`},{severity:`info`,count:e.infos||0,noun:`info`}].map(({severity:e,count:t,noun:n})=>{if(t<=0)return Pt;let r=t>99?`99+`:String(t),i=`${t} ${n}${t===1?``:`s`}`;return M` ${r} ${i} `})} - `}function Xr(e,t){return t?!!(e.operations?.some(e=>e.slug===t)||e.children?.some(e=>Xr(e,t))):!1}var Zr=class extends zt{constructor(...e){super(...e),this.tag={name:``,summary:``,children:null,operations:null,isNavOnly:!1},this.activeSlug=``,this.open=!1}static{this.styles=hae}willUpdate(e){(e.has(`tag`)||e.has(`activeSlug`))&&Xr(this.tag,this.activeSlug)&&(this.open=!0)}toggle(){this.open=!this.open}developerMode(){return document.body?.dataset.ppDeveloperMode===`true`}render(){let{tag:e,activeSlug:t,open:n}=this,r=Xr(e,t),i=this.developerMode();return M` + `}var vae=nt` + :host { + display: inline-flex; + justify-self: end; + align-items: center; + color: var(--font-color); + font-family: var(--font-stack), monospace; + font-size: inherit; + line-height: 1; + } + + :host([action='receive']) { + color: var(--primary-color); + } + + :host([action='send']) { + color: var(--secondary-color); + } + + .action { + display: inline-flex; + align-items: center; + gap: 0.35rem; + line-height: 1; + } + + .action.receive { + color: var(--primary-color); + } + + .action.send { + color: var(--secondary-color); + } + + sl-icon { + width: 0.9em; + height: 0.9em; + font-size: 0.9em; + } +`;function yae(e){return e.trim().toLowerCase()}function bae(e){switch(yae(e)){case`receive`:return`RCV`;case`send`:return`SND`;default:return e.trim().toUpperCase()}}function xae(e){switch(yae(e)){case`receive`:return`arrow-left`;case`send`:return`arrow-right`;default:return`arrow-right`}}function Sae(e){switch(yae(e)){case`receive`:return`Receive`;case`send`:return`Send`;default:return e.trim()}}var ei=class extends Bt{constructor(...e){super(...e),this.action=``,this.size=`small`}static{this.styles=vae}render(){let e=yae(this.action);return M` + + + ${bae(this.action)} + + `}};qr([qt({reflect:!0})],ei.prototype,`action`,void 0),qr([qt({reflect:!0})],ei.prototype,`size`,void 0),ei=qr([Kt(`pp-asyncapi-action`)],ei);var Cae=nt` + :host { + display: inline-flex; + min-width: 0; + vertical-align: middle; + } + + .protocol, + h1 { + display: inline-flex; + align-items: center; + min-width: 0; + margin: 0; + padding: 0; + gap: 0.45em; + color: var(--primary-color); + font-family: var(--font-stack-bold), monospace; + font-weight: normal; + letter-spacing: 0; + line-height: 1; + } + + h1 { + color: var(--font-color); + font-size: 2em; + overflow-wrap: anywhere; + } + + .mark { + display: inline-grid; + place-items: center; + flex: 0 0 auto; + width: 1.45em; + height: 1.45em; + border: 0.08em solid currentColor; + border-radius: 50%; + color: var(--primary-color); + box-sizing: border-box; + } + + .mark svg { + width: 72%; + height: 72%; + overflow: visible; + } + + .mark.amqp, + .mark.anypointmq, + .mark.googlepubsub, + .mark.ibmmq, + .mark.kafka, + .mark.mqtt, + .mark.nats, + .mark.pulsar, + .mark.redis, + .mark.sns, + .mark.solace, + .mark.sqs, + .mark.websocket { + width: 1.25em; + height: 1.25em; + border: 0; + border-radius: 0; + } + + .mark.amqp svg, + .mark.anypointmq svg, + .mark.googlepubsub svg, + .mark.ibmmq svg, + .mark.kafka svg, + .mark.mqtt svg, + .mark.nats svg, + .mark.pulsar svg, + .mark.redis svg, + .mark.sns svg, + .mark.solace svg, + .mark.sqs svg, + .mark.websocket svg { + width: 100%; + height: 100%; + } + + .mark.kafka { + height: 1.55em; + } + + .label { + min-width: 0; + overflow-wrap: anywhere; + } + + .small { + gap: 0.35em; + font-size: 0.78em; + } + + .medium { + font-size: 0.92em; + } + + .nav { + gap: 0.4em; + font-size: 1em; + } + + .nav .mark { + width: 1.2em; + height: 1.2em; + } + + .nav .mark.amqp, + .nav .mark.anypointmq, + .nav .mark.googlepubsub, + .nav .mark.ibmmq, + .nav .mark.kafka, + .nav .mark.mqtt, + .nav .mark.nats, + .nav .mark.pulsar, + .nav .mark.redis, + .nav .mark.sns, + .nav .mark.solace, + .nav .mark.sqs, + .nav .mark.websocket { + width: 0.9em; + height: 0.9em; + border: 0; + } + + .nav .mark.kafka { + height: 1.15em; + } + + .large { + gap: 0.4em; + } + + .large .mark { + width: 1.25em; + height: 1.25em; + border-width: 0.06em; + } + + .large .mark.amqp, + .large .mark.anypointmq, + .large .mark.googlepubsub, + .large .mark.ibmmq, + .large .mark.kafka, + .large .mark.mqtt, + .large .mark.nats, + .large .mark.pulsar, + .large .mark.redis, + .large .mark.sns, + .large .mark.solace, + .large .mark.sqs, + .large .mark.websocket { + width: 1.05em; + height: 1.05em; + border: 0; + } + + .large .mark.kafka { + height: 1.3em; + } +`,wae={amqp:{label:`AMQP`,mark:`amqp`},amqp1:{label:`AMQP 1.0`,mark:`amqp`},amqps:{label:`AMQPS`,mark:`amqp`},anypointmq:{label:`ANYPOINT MQ`,mark:`anypointmq`},gcppubsub:{label:`GOOGLE PUB/SUB`,mark:`googlepubsub`},googlepubsub:{label:`GOOGLE PUB/SUB`,mark:`googlepubsub`},http:{label:`HTTP`,mark:`globe`},https:{label:`HTTPS`,mark:`globe`},ibmmq:{label:`IBM MQ`,mark:`ibmmq`},jms:{label:`JMS`,mark:`queue`},kafka:{label:`KAFKA`,mark:`kafka`},kafkasecure:{label:`KAFKA`,mark:`kafka`},mercure:{label:`MERCURE`,mark:`broadcast`},mqtt:{label:`MQTT`,mark:`mqtt`},mqtt5:{label:`MQTT 5`,mark:`mqtt`},mqtts:{label:`MQTTS`,mark:`mqtt`},mqttsecure:{label:`MQTT`,mark:`mqtt`},securemqtt:{label:`MQTT`,mark:`mqtt`},nats:{label:`NATS`,mark:`nats`},pulsar:{label:`PULSAR`,mark:`pulsar`},redis:{label:`REDIS`,mark:`redis`},sns:{label:`SNS`,mark:`sns`},solace:{label:`SOLACE`,mark:`solace`},sqs:{label:`SQS`,mark:`sqs`},stomp:{label:`STOMP`,mark:`stomp`},stomps:{label:`STOMPS`,mark:`stomp`},websocket:{label:`WEBSOCKET`,mark:`websocket`},websockets:{label:`WEBSOCKET`,mark:`websocket`},ws:{label:`WEBSOCKET`,mark:`websocket`},wss:{label:`WEBSOCKET`,mark:`websocket`}};function Tae(e){return e.trim().toLowerCase().replace(/[-_.\s]+/g,``)}function Eae(e){return wae[Tae(e)]??{label:e.trim().toUpperCase(),mark:`topology`}}var ti=class extends Bt{constructor(...e){super(...e),this.protocol=``,this.size=`medium`,this.heading=!1}static{this.styles=Cae}renderMark(e){switch(e){case`amqp`:return M``;case`anypointmq`:return M``;case`broadcast`:return M` + + + `;case`globe`:return M` + + + `;case`kafka`:return M``;case`googlepubsub`:return M``;case`ibmmq`:return M``;case`mqtt`:return M``;case`nats`:return M``;case`pulsar`:return M``;case`queue`:return M` + + `;case`redis`:return M``;case`sns`:return M``;case`solace`:return M``;case`sqs`:return M``;case`stomp`:return M` + + `;case`websocket`:return M``;default:return M` + + + + + `}}render(){let e=Eae(this.protocol),t=M` + + ${e.label} + `;return this.heading?M`

${t}

`:M`${t}`}};qr([qt()],ti.prototype,`protocol`,void 0),qr([qt()],ti.prototype,`size`,void 0),qr([qt({type:Boolean})],ti.prototype,`heading`,void 0),ti=qr([Kt(`pp-asyncapi-protocol`)],ti);function Dae(e){return e.specKind===`asyncapi`}function Oae(e,t){return t?!!(e.operations?.some(e=>e.slug===t)||e.children?.some(e=>Oae(e,t))):!1}var ni=class extends Bt{constructor(...e){super(...e),this.tag={name:``,summary:``,children:null,operations:null,isNavOnly:!1},this.activeSlug=``,this.open=!1}static{this.styles=dae}willUpdate(e){(e.has(`tag`)||e.has(`activeSlug`))&&Oae(this.tag,this.activeSlug)&&(this.open=!0)}toggle(){this.open=!this.open}developerMode(){return document.body?.dataset.ppDeveloperMode===`true`}render(){let{tag:e,activeSlug:t,open:n}=this,r=Oae(e,t),i=this.developerMode();return M`
- ${e.summary||e.name} - ${i?xae(e.counts):Pt} + + ${e.protocol?M``:M` + ${e.summary||e.name} + ${e.protocols?.length?M` + ${e.protocols.map(e=>M` + `)} + `:Pt} + `} + + ${i?_ae(e.counts):Pt}
${n?M`
@@ -5094,11 +5364,11 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value
`:Pt} - `}};Ur([Kt({type:Object})],Zr.prototype,`tag`,void 0),Ur([Kt()],Zr.prototype,`activeSlug`,void 0),Ur([qt()],Zr.prototype,`open`,void 0),Zr=Ur([Gt(`pp-nav-tag`)],Zr);var Sae=nt` + `}};qr([qt({type:Object})],ni.prototype,`tag`,void 0),qr([qt()],ni.prototype,`activeSlug`,void 0),qr([Jt()],ni.prototype,`open`,void 0),ni=qr([Kt(`pp-nav-tag`)],ni);var kae=nt` :host { display: block; margin: 0; @@ -5209,12 +5479,22 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value .model-name { min-width: 0; + display: flex; + flex-wrap: wrap; + align-items: center; + gap: 0.35rem; font-family: var(--font-stack), monospace; word-wrap: break-word; overflow-wrap: break-word; white-space: normal; } + .model-protocols { + display: inline-flex; + flex-wrap: wrap; + gap: 0.35rem; + } + .violation-badges { display: inline-flex; justify-self: end; @@ -5270,28 +5550,36 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value li a.active .model-name { font-family: var(--font-stack-bold), monospace; } -`;function Cae(e,t){return t?e.models?.some(e=>e.typeSlug+`/`+e.slug===t)??!1:!1}var Qr=class extends zt{constructor(...e){super(...e),this.group={name:``,typeSlug:``,models:null},this.activeSlug=``,this.open=!1}static{this.styles=Sae}willUpdate(e){(e.has(`group`)||e.has(`activeSlug`))&&Cae(this.group,this.activeSlug)&&(this.open=!0)}updated(e){(e.has(`activeSlug`)||e.has(`group`))&&this.open&&this.activeSlug&&requestAnimationFrame(()=>{this.renderRoot.querySelector(`a.active`)?.scrollIntoView({block:`center`,behavior:`auto`})})}toggle(){this.open=!this.open}developerMode(){return document.body?.dataset.ppDeveloperMode===`true`}render(){let{group:e,activeSlug:t,open:n}=this,r=Cae(e,t),i=this.developerMode();return M` +`;function Aae(e,t){return t?e.models?.some(e=>e.typeSlug+`/`+e.slug===t)??!1:!1}var ri=class extends Bt{constructor(...e){super(...e),this.group={name:``,typeSlug:``,models:null},this.activeSlug=``,this.open=!1}static{this.styles=kae}willUpdate(e){(e.has(`group`)||e.has(`activeSlug`))&&Aae(this.group,this.activeSlug)&&(this.open=!0)}updated(e){(e.has(`activeSlug`)||e.has(`group`))&&this.open&&this.activeSlug&&requestAnimationFrame(()=>{this.renderRoot.querySelector(`a.active`)?.scrollIntoView?.({block:`center`,behavior:`auto`})})}toggle(){this.open=!this.open}developerMode(){return document.body?.dataset.ppDeveloperMode===`true`}render(){let{group:e,activeSlug:t,open:n}=this,r=Aae(e,t),i=this.developerMode();return M`
${e.name} - ${i?xae(e.counts):Pt} + ${i?_ae(e.counts):Pt}
${n&&e.models?.length?M` `:Pt} - `}};Ur([Kt({type:Object})],Qr.prototype,`group`,void 0),Ur([Kt()],Qr.prototype,`activeSlug`,void 0),Ur([qt()],Qr.prototype,`open`,void 0),Qr=Ur([Gt(`pp-nav-model-group`)],Qr);var wae=nt` + `}};qr([qt({type:Object})],ri.prototype,`group`,void 0),qr([qt()],ri.prototype,`activeSlug`,void 0),qr([Jt()],ri.prototype,`open`,void 0),ri=qr([Kt(`pp-nav-model-group`)],ri);var jae=nt` :host { display: block; } @@ -5317,15 +5605,15 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value text-decoration: line-through; opacity: 0.5; } -`,$r=class extends zt{constructor(...e){super(...e),this.method=``,this.path=``,this.slug=``,this.deprecated=!1}static{this.styles=wae}render(){return M` +`,ii=class extends Bt{constructor(...e){super(...e),this.specKind=``,this.method=``,this.path=``,this.slug=``,this.deprecated=!1}static{this.styles=jae}render(){return M` - + ${this.specKind===`asyncapi`?M``:M``} ${this.path} - `}};Ur([Kt()],$r.prototype,`method`,void 0),Ur([Kt()],$r.prototype,`path`,void 0),Ur([Kt()],$r.prototype,`slug`,void 0),Ur([Kt({type:Boolean})],$r.prototype,`deprecated`,void 0),$r=Ur([Gt(`pp-nav-operation`)],$r);var ei=[Nr,nt` + `}};qr([qt()],ii.prototype,`specKind`,void 0),qr([qt()],ii.prototype,`method`,void 0),qr([qt()],ii.prototype,`path`,void 0),qr([qt()],ii.prototype,`slug`,void 0),qr([qt({type:Boolean})],ii.prototype,`deprecated`,void 0),ii=qr([Kt(`pp-nav-operation`)],ii);var ai=[Rr,nt` :host { display: block; min-height: 156px; @@ -5384,7 +5672,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value width: 74%; } -`],ti=class extends zt{constructor(...e){super(...e),this.curlJson=``,this.variants=[],this.selectedIndex=0}static{this.styles=[ei]}willUpdate(e){if(e.has(`curlJson`)){try{let e=JSON.parse(this.curlJson);this.variants=Array.isArray(e)?e:[]}catch{this.variants=[]}this.selectedIndex=0}}renderSelector(){if(this.variants.length<=1)return Pt;let e=this.variants[this.selectedIndex]||this.variants[0];return e?M` +`],oi=class extends Bt{constructor(...e){super(...e),this.curlJson=``,this.variants=[],this.selectedIndex=0}static{this.styles=[ai]}willUpdate(e){if(e.has(`curlJson`)){try{let e=JSON.parse(this.curlJson);this.variants=Array.isArray(e)?e:[]}catch{this.variants=[]}this.selectedIndex=0}}renderSelector(){if(this.variants.length<=1)return Pt;let e=this.variants[this.selectedIndex]||this.variants[0];return e?M`
@@ -5409,7 +5697,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value `}render(){if(this.variants.length===0)return this.renderSkeleton();let e=this.variants[this.selectedIndex]||this.variants[0];return e?M` ${this.renderSelector()} ${e.command} - `:Pt}};Ur([Kt({attribute:`curl-json`})],ti.prototype,`curlJson`,void 0),Ur([qt()],ti.prototype,`variants`,void 0),Ur([qt()],ti.prototype,`selectedIndex`,void 0),ti=Ur([Gt(`pp-curl-command`)],ti);var ni=nt` + `:Pt}};qr([qt({attribute:`curl-json`})],oi.prototype,`curlJson`,void 0),qr([Jt()],oi.prototype,`variants`,void 0),qr([Jt()],oi.prototype,`selectedIndex`,void 0),oi=qr([Kt(`pp-curl-command`)],oi);var si=nt` .constraints { display: grid; grid-template-columns: auto 1fr; @@ -5450,7 +5738,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value padding: 0 var(--global-padding-half); white-space: nowrap; } -`,ri=nt` +`,ci=nt` .pp-markdown, .pp-markdown-inline { color: var(--font-color-sub1); @@ -5529,7 +5817,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value display: inline; margin: 0; } -`,ii=nt` +`,li=nt` a.ref-link, a.ref-link:hover { color: var(--terminal-text); @@ -5543,7 +5831,7 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value a.ref-link:hover { text-decoration: underline; } -`,Tae=nt` +`,Mae=nt` :host { display: block; margin-top: 0; @@ -5712,10 +6000,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value .parameter-skeleton-in { width: 58%; } -`,Eae=`path-items`,Dae={schemas:`schemas`,responses:`responses`,parameters:`parameters`,requestBodies:`request-bodies`,headers:`headers`,securitySchemes:`security`,examples:`examples`,links:`links`,callbacks:`callbacks`,pathItems:Eae};function Oae(e){let t=e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`);return t=t.toLowerCase(),t=t.replace(/[/]/g,`-`).replace(/[{}_.]/g,`-`).replace(/ /g,`-`),t=t.replace(/[^a-z0-9-]/g,``),t=t.replace(/-{2,}/g,`-`),t=t.replace(/^-|-$/g,``),t||`unnamed`}function ai(e){if(!e||!e.startsWith(`#/components/`))return null;let t=e.replace(`#/components/`,``).split(`/`);if(t.length!==2)return null;let[n,r]=t,i=Dae[n];return i?{name:r,href:Lr(i,Oae(r))}:null}function kae(e,t){if(!e)return[];let n=[];return t?.includeExample&&(e.example!==void 0&&n.push({label:`example`,value:JSON.stringify(e.example)}),e.default!==void 0&&n.push({label:`default`,value:JSON.stringify(e.default)})),e.minimum!==void 0&&n.push({label:`min`,value:e.minimum}),e.maximum!==void 0&&n.push({label:`max`,value:e.maximum}),e.exclusiveMinimum!==void 0&&n.push({label:`exclusiveMin`,value:e.exclusiveMinimum}),e.exclusiveMaximum!==void 0&&n.push({label:`exclusiveMax`,value:e.exclusiveMaximum}),e.minLength!==void 0&&n.push({label:`minLength`,value:e.minLength}),e.maxLength!==void 0&&n.push({label:`maxLength`,value:e.maxLength}),e.minItems!==void 0&&n.push({label:`minItems`,value:e.minItems}),e.maxItems!==void 0&&n.push({label:`maxItems`,value:e.maxItems}),e.uniqueItems&&n.push({label:`uniqueItems`,value:`true`}),e.pattern&&n.push({label:`pattern`,value:e.pattern,isCode:!0}),e.multipleOf!==void 0&&n.push({label:`multipleOf`,value:e.multipleOf}),n}function oi(e){if(!e)return``;if(e.type===`array`&&e.items)return`Array<${e.items.type||e.items.$ref?.split(`/`).pop()||`any`}>`;if(e.type){let t=Array.isArray(e.type)?e.type.join(` | `):e.type;return e.format&&(t+=` (${e.format})`),t}return e.oneOf?`oneOf`:e.anyOf?`anyOf`:e.allOf?`allOf`:e.$ref?e.$ref.split(`/`).pop()??``:``}function si(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var ci=si();function li(e){ci=e}var Aae=/[&<>"']/,jae=new RegExp(Aae.source,`g`),Mae=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,Nae=new RegExp(Mae.source,`g`),Pae={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},Fae=e=>Pae[e];function ui(e,t){if(t){if(Aae.test(e))return e.replace(jae,Fae)}else if(Mae.test(e))return e.replace(Nae,Fae);return e}var Iae=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function Lae(e){return e.replace(Iae,(e,t)=>(t=t.toLowerCase(),t===`colon`?`:`:t.charAt(0)===`#`?t.charAt(1)===`x`?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):``))}var Rae=/(^|[^\[])\^/g;function di(e,t){let n=typeof e==`string`?e:e.source;t||=``;let r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(Rae,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}function zae(e){try{e=encodeURI(e).replace(/%25/g,`%`)}catch{return null}return e}var fi={exec:()=>null};function Bae(e,t){let n=e.replace(/\|/g,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(/ \|/),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length`;if(e.type){let t=Array.isArray(e.type)?e.type.join(` | `):e.type;return e.format&&(t+=` (${e.format})`),t}return e.oneOf?`oneOf`:e.anyOf?`anyOf`:e.allOf?`allOf`:e.$ref?e.$ref.split(`/`).pop()??``:``}function Iae(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var pi=Iae();function Lae(e){pi=e}var Rae=/[&<>"']/,zae=new RegExp(Rae.source,`g`),Bae=/[<>"']|&(?!(#\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\w+);)/,Vae=new RegExp(Bae.source,`g`),Hae={"&":`&`,"<":`<`,">":`>`,'"':`"`,"'":`'`},Uae=e=>Hae[e];function mi(e,t){if(t){if(Rae.test(e))return e.replace(zae,Uae)}else if(Bae.test(e))return e.replace(Vae,Uae);return e}var Wae=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function hi(e){return e.replace(Wae,(e,t)=>(t=t.toLowerCase(),t===`colon`?`:`:t.charAt(0)===`#`?t.charAt(1)===`x`?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):``))}var Gae=/(^|[^\[])\^/g;function gi(e,t){let n=typeof e==`string`?e:e.source;t||=``;let r={replace:(e,t)=>{let i=typeof t==`string`?t:t.source;return i=i.replace(Gae,`$1`),n=n.replace(e,i),r},getRegex:()=>new RegExp(n,t)};return r}function Kae(e){try{e=encodeURI(e).replace(/%25/g,`%`)}catch{return null}return e}var _i={exec:()=>null};function qae(e,t){let n=e.replace(/\|/g,(e,t,n)=>{let r=!1,i=t;for(;--i>=0&&n[i]===`\\`;)r=!r;return r?`|`:` |`}).split(/ \|/),r=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),t)if(n.length>t)n.splice(t);else for(;n.length{let t=e.match(/^\s+/);if(t===null)return e;let[n]=t;return n.length>=r.length?e.slice(r.length):e}).join(` -`)}var mi=class{options;rules;lexer;constructor(e){this.options=e||ci}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:`space`,raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let e=t[0].replace(/^ {1,4}/gm,``);return{type:`code`,raw:t[0],codeBlockStyle:`indented`,text:this.options.pedantic?e:pi(e,` -`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let e=t[0],n=Uae(e,t[3]||``);return{type:`code`,raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,`$1`):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){let t=pi(e,`#`);(this.options.pedantic||!t||/ $/.test(t))&&(e=t.trim())}return{type:`heading`,raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:`hr`,raw:t[0]}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=pi(t[0].replace(/^ *>[ \t]?/gm,``),` +`)}var yi=class{options;rules;lexer;constructor(e){this.options=e||pi}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:`space`,raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let e=t[0].replace(/^ {1,4}/gm,``);return{type:`code`,raw:t[0],codeBlockStyle:`indented`,text:this.options.pedantic?e:vi(e,` +`)}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let e=t[0],n=Xae(e,t[3]||``);return{type:`code`,raw:e,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,`$1`):t[2],text:n}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let e=t[2].trim();if(/#$/.test(e)){let t=vi(e,`#`);(this.options.pedantic||!t||/ $/.test(t))&&(e=t.trim())}return{type:`heading`,raw:t[0],depth:t[1].length,text:e,tokens:this.lexer.inline(e)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:`hr`,raw:t[0]}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let e=vi(t[0].replace(/^ *>[ \t]?/gm,``),` `),n=this.lexer.state.top;this.lexer.state.top=!0;let r=this.lexer.blockTokens(e);return this.lexer.state.top=n,{type:`blockquote`,raw:t[0],tokens:r,text:e}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),r=n.length>1,i={type:`list`,raw:``,ordered:r,start:r?+n.slice(0,-1):``,loose:!1,items:[]};n=r?`\\d{1,9}\\${n.slice(-1)}`:`\\${n}`,this.options.pedantic&&(n=r?n:`[*+-]`);let a=RegExp(`^( {0,3}${n})((?:[\t ][^\\n]*)?(?:\\n|$))`),o=``,s=``,l=!1;for(;e;){let n=!1;if(!(t=a.exec(e))||this.rules.block.hr.test(e))break;o=t[0],e=e.substring(o.length);let r=t[2].split(` `,1)[0].replace(/^\t+/,e=>` `.repeat(3*e.length)),u=e.split(` `,1)[0],d=0;this.options.pedantic?(d=2,s=r.trimStart()):(d=t[2].search(/[^ ]/),d=d>4?1:d,s=r.slice(d),d+=t[1].length);let f=!1;if(!r&&/^ *$/.test(u)&&(o+=u+` @@ -5723,10 +6011,10 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value `,1)[0];if(u=l,this.options.pedantic&&(u=u.replace(/^ {1,4}(?=( {4})*[^ ])/g,` `)),i.test(u)||a.test(u)||t.test(u)||n.test(e))break;if(u.search(/[^ ]/)>=d||!u.trim())s+=` `+u.slice(d);else{if(f||r.search(/[^ ]/)>=4||i.test(r)||a.test(r)||n.test(r))break;s+=` `+u}!f&&!u.trim()&&(f=!0),o+=l+` -`,e=e.substring(l.length+1),r=u.slice(d)}}i.loose||(l?i.loose=!0:/\n *\n *$/.test(o)&&(l=!0));let p=null,m;this.options.gfm&&(p=/^\[[ xX]\] /.exec(s),p&&(m=p[0]!==`[ ] `,s=s.replace(/^\[[ xX]\] +/,``))),i.items.push({type:`list_item`,raw:o,task:!!p,checked:m,loose:!1,text:s,tokens:[]}),i.raw+=o}i.items[i.items.length-1].raw=o.trimEnd(),i.items[i.items.length-1].text=s.trimEnd(),i.raw=i.raw.trimEnd();for(let e=0;ee.type===`space`);i.loose=t.length>0&&t.some(e=>/\n.*\n/.test(e.raw))}if(i.loose)for(let e=0;e$/,`$1`).replace(this.rules.inline.anyPunctuation,`$1`):``,r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,`$1`):t[3];return{type:`def`,tag:e,raw:t[0],href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!/[:|]/.test(t[2]))return;let n=Bae(t[1]),r=t[2].replace(/^\||\| *$/g,``).split(`|`),i=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,``).split(` -`):[],a={type:`table`,raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let e of r)/^ *-+: *$/.test(e)?a.align.push(`right`):/^ *:-+: *$/.test(e)?a.align.push(`center`):/^ *:-+ *$/.test(e)?a.align.push(`left`):a.align.push(null);for(let e of n)a.header.push({text:e,tokens:this.lexer.inline(e)});for(let e of i)a.rows.push(Bae(e,a.header.length).map(e=>({text:e,tokens:this.lexer.inline(e)})));return a}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:`heading`,raw:t[0],depth:t[2].charAt(0)===`=`?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let e=t[1].charAt(t[1].length-1)===` -`?t[1].slice(0,-1):t[1];return{type:`paragraph`,raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:`text`,raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:`escape`,raw:t[0],text:ui(t[1])}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:`html`,raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;let t=pi(e.slice(0,-1),`\\`);if((e.length-t.length)%2==0)return}else{let e=Vae(t[2],`()`);if(e>-1){let n=(t[0].indexOf(`!`)===0?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=``}}let n=t[2],r=``;if(this.options.pedantic){let e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):``;return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),Hae(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,`$1`),title:r&&r.replace(this.rules.inline.anyPunctuation,`$1`)},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=t[(n[2]||n[1]).replace(/\s+/g,` `).toLowerCase()];if(!e){let e=n[0].charAt(0);return{type:`text`,raw:e,text:e}}return Hae(n,e,n[0],this.lexer)}}emStrong(e,t,n=``){let r=this.rules.inline.emStrongLDelim.exec(e);if(r&&!(r[3]&&n.match(/[\p{L}\p{N}]/u))&&(!(r[1]||r[2])||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=0,l=r[0][0]===`*`?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+n);(r=l.exec(t))!=null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i)continue;if(a=[...i].length,r[3]||r[4]){o+=a;continue}else if((r[5]||r[6])&&n%3&&!((n+a)%3)){s+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o+s);let t=[...r[0]][0].length,l=e.slice(0,n+r.index+t+a);if(Math.min(n,a)%2){let e=l.slice(1,-1);return{type:`em`,raw:l,text:e,tokens:this.lexer.inlineTokens(e)}}let u=l.slice(2,-2);return{type:`strong`,raw:l,text:u,tokens:this.lexer.inlineTokens(u)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g,` `),n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=ui(e,!0),{type:`codespan`,raw:t[0],text:e}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:`br`,raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:`del`,raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let e,n;return t[2]===`@`?(e=ui(t[1]),n=`mailto:`+e):(e=ui(t[1]),n=e),{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if(t[2]===`@`)e=ui(t[0]),n=`mailto:`+e;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??``;while(r!==t[0]);e=ui(t[0]),n=t[1]===`www.`?`http://`+t[0]:t[0]}return{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:ui(t[0]),{type:`text`,raw:t[0],text:e}}}},Wae=/^(?: *(?:\n|$))+/,hi=/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,Gae=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,gi=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,Kae=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,qae=/(?:[*+-]|\d{1,9}[.)])/,Jae=di(/^(?!bull )((?:.|\n(?!\s*?\n|bull ))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,qae).getRegex(),Yae=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,Xae=/^[^\n]+/,Zae=/(?!\s*\])(?:\\.|[^\[\]\\])+/,Qae=di(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace(`label`,Zae).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),$ae=di(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,qae).getRegex(),_i=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,eoe=/|$)/,toe=di(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))`,`i`).replace(`comment`,eoe).replace(`tag`,_i).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),noe=di(Yae).replace(`hr`,gi).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,_i).getRegex(),roe={blockquote:di(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,noe).getRegex(),code:hi,def:Qae,fences:Gae,heading:Kae,hr:gi,html:toe,lheading:Jae,list:$ae,newline:Wae,paragraph:noe,table:fi,text:Xae},ioe=di(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,gi).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,` {4}[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,_i).getRegex(),aoe={...roe,table:ioe,paragraph:di(Yae).replace(`hr`,gi).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,ioe).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,_i).getRegex()},ooe={...roe,html:di(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,eoe).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:fi,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:di(Yae).replace(`hr`,gi).replace(`heading`,` *#{1,6} *[^ -]`).replace(`lheading`,Jae).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},soe=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,coe=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,loe=/^( {2,}|\\)\n(?!\s*$)/,uoe=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`^|~",doe=di(/^((?![*_])[\spunctuation])/,`u`).replace(/punctuation/g,vi).getRegex(),foe=/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,poe=di(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,`u`).replace(/punct/g,vi).getRegex(),moe=di(`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])`,`gu`).replace(/punct/g,vi).getRegex(),hoe=di(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])`,`gu`).replace(/punct/g,vi).getRegex(),goe=di(/\\([punct])/,`gu`).replace(/punct/g,vi).getRegex(),_oe=di(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),voe=di(eoe).replace(`(?:-->|$)`,`-->`).getRegex(),yoe=di(`^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^`).replace(`comment`,voe).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),yi=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,boe=di(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace(`label`,yi).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),xoe=di(/^!?\[(label)\]\[(ref)\]/).replace(`label`,yi).replace(`ref`,Zae).getRegex(),Soe=di(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,Zae).getRegex(),Coe={_backpedal:fi,anyPunctuation:goe,autolink:_oe,blockSkip:foe,br:loe,code:coe,del:fi,emStrongLDelim:poe,emStrongRDelimAst:moe,emStrongRDelimUnd:hoe,escape:soe,link:boe,nolink:Soe,punctuation:doe,reflink:xoe,reflinkSearch:di(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,xoe).replace(`nolink`,Soe).getRegex(),tag:yoe,text:uoe,url:fi},woe={...Coe,link:di(/^!?\[(label)\]\((.*?)\)/).replace(`label`,yi).getRegex(),reflink:di(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,yi).getRegex()},Toe={...Coe,escape:di(soe).replace(`])`,`~|])`).getRegex(),url:di(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,`i`).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\e.type===`space`);i.loose=t.length>0&&t.some(e=>/\n.*\n/.test(e.raw))}if(i.loose)for(let e=0;e$/,`$1`).replace(this.rules.inline.anyPunctuation,`$1`):``,r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,`$1`):t[3];return{type:`def`,tag:e,raw:t[0],href:n,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!/[:|]/.test(t[2]))return;let n=qae(t[1]),r=t[2].replace(/^\||\| *$/g,``).split(`|`),i=t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,``).split(` +`):[],a={type:`table`,raw:t[0],header:[],align:[],rows:[]};if(n.length===r.length){for(let e of r)/^ *-+: *$/.test(e)?a.align.push(`right`):/^ *:-+: *$/.test(e)?a.align.push(`center`):/^ *:-+ *$/.test(e)?a.align.push(`left`):a.align.push(null);for(let e of n)a.header.push({text:e,tokens:this.lexer.inline(e)});for(let e of i)a.rows.push(qae(e,a.header.length).map(e=>({text:e,tokens:this.lexer.inline(e)})));return a}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t)return{type:`heading`,raw:t[0],depth:t[2].charAt(0)===`=`?1:2,text:t[1],tokens:this.lexer.inline(t[1])}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let e=t[1].charAt(t[1].length-1)===` +`?t[1].slice(0,-1):t[1];return{type:`paragraph`,raw:t[0],text:e,tokens:this.lexer.inline(e)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:`text`,raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:`escape`,raw:t[0],text:mi(t[1])}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&/^/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:`html`,raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let e=t[2].trim();if(!this.options.pedantic&&/^$/.test(e))return;let t=vi(e.slice(0,-1),`\\`);if((e.length-t.length)%2==0)return}else{let e=Jae(t[2],`()`);if(e>-1){let n=(t[0].indexOf(`!`)===0?5:4)+t[1].length+e;t[2]=t[2].substring(0,e),t[0]=t[0].substring(0,n).trim(),t[3]=``}}let n=t[2],r=``;if(this.options.pedantic){let e=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(n);e&&(n=e[1],r=e[3])}else r=t[3]?t[3].slice(1,-1):``;return n=n.trim(),/^$/.test(e)?n.slice(1):n.slice(1,-1)),Yae(t,{href:n&&n.replace(this.rules.inline.anyPunctuation,`$1`),title:r&&r.replace(this.rules.inline.anyPunctuation,`$1`)},t[0],this.lexer)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let e=t[(n[2]||n[1]).replace(/\s+/g,` `).toLowerCase()];if(!e){let e=n[0].charAt(0);return{type:`text`,raw:e,text:e}}return Yae(n,e,n[0],this.lexer)}}emStrong(e,t,n=``){let r=this.rules.inline.emStrongLDelim.exec(e);if(r&&!(r[3]&&n.match(/[\p{L}\p{N}]/u))&&(!(r[1]||r[2])||!n||this.rules.inline.punctuation.exec(n))){let n=[...r[0]].length-1,i,a,o=n,s=0,l=r[0][0]===`*`?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(l.lastIndex=0,t=t.slice(-1*e.length+n);(r=l.exec(t))!=null;){if(i=r[1]||r[2]||r[3]||r[4]||r[5]||r[6],!i)continue;if(a=[...i].length,r[3]||r[4]){o+=a;continue}else if((r[5]||r[6])&&n%3&&!((n+a)%3)){s+=a;continue}if(o-=a,o>0)continue;a=Math.min(a,a+o+s);let t=[...r[0]][0].length,l=e.slice(0,n+r.index+t+a);if(Math.min(n,a)%2){let e=l.slice(1,-1);return{type:`em`,raw:l,text:e,tokens:this.lexer.inlineTokens(e)}}let u=l.slice(2,-2);return{type:`strong`,raw:l,text:u,tokens:this.lexer.inlineTokens(u)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let e=t[2].replace(/\n/g,` `),n=/[^ ]/.test(e),r=/^ /.test(e)&&/ $/.test(e);return n&&r&&(e=e.substring(1,e.length-1)),e=mi(e,!0),{type:`codespan`,raw:t[0],text:e}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:`br`,raw:t[0]}}del(e){let t=this.rules.inline.del.exec(e);if(t)return{type:`del`,raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let e,n;return t[2]===`@`?(e=mi(t[1]),n=`mailto:`+e):(e=mi(t[1]),n=e),{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let e,n;if(t[2]===`@`)e=mi(t[0]),n=`mailto:`+e;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??``;while(r!==t[0]);e=mi(t[0]),n=t[1]===`www.`?`http://`+t[0]:t[0]}return{type:`link`,raw:t[0],text:e,href:n,tokens:[{type:`text`,raw:e,text:e}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let e;return e=this.lexer.state.inRawBlock?t[0]:mi(t[0]),{type:`text`,raw:t[0],text:e}}}},Zae=/^(?: *(?:\n|$))+/,Qae=/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,$ae=/^ {0,3}(`{3,}(?=[^`\n]*(?:\n|$))|~{3,})([^\n]*)(?:\n|$)(?:|([\s\S]*?)(?:\n|$))(?: {0,3}\1[~`]* *(?=\n|$)|$)/,bi=/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,eoe=/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,toe=/(?:[*+-]|\d{1,9}[.)])/,noe=gi(/^(?!bull )((?:.|\n(?!\s*?\n|bull ))+?)\n {0,3}(=+|-+) *(?:\n+|$)/).replace(/bull/g,toe).getRegex(),roe=/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,ioe=/^[^\n]+/,aoe=/(?!\s*\])(?:\\.|[^\[\]\\])+/,ooe=gi(/^ {0,3}\[(label)\]: *(?:\n *)?([^<\s][^\s]*|<.*?>)(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/).replace(`label`,aoe).replace(`title`,/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/).getRegex(),soe=gi(/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/).replace(/bull/g,toe).getRegex(),xi=`address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul`,coe=/|$)/,loe=gi(`^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))`,`i`).replace(`comment`,coe).replace(`tag`,xi).replace(`attribute`,/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),uoe=gi(roe).replace(`hr`,bi).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,xi).getRegex(),doe={blockquote:gi(/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/).replace(`paragraph`,uoe).getRegex(),code:Qae,def:ooe,fences:$ae,heading:eoe,hr:bi,html:loe,lheading:noe,list:soe,newline:Zae,paragraph:uoe,table:_i,text:ioe},foe=gi(`^ *([^\\n ].*)\\n {0,3}((?:\\| *)?:?-+:? *(?:\\| *:?-+:? *)*(?:\\| *)?)(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)`).replace(`hr`,bi).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`blockquote`,` {0,3}>`).replace(`code`,` {4}[^\\n]`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,xi).getRegex(),poe={...doe,table:foe,paragraph:gi(roe).replace(`hr`,bi).replace(`heading`,` {0,3}#{1,6}(?:\\s|$)`).replace(`|lheading`,``).replace(`table`,foe).replace(`blockquote`,` {0,3}>`).replace(`fences`," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace(`list`,` {0,3}(?:[*+-]|1[.)]) `).replace(`html`,`)|<(?:script|pre|style|textarea|!--)`).replace(`tag`,xi).getRegex()},moe={...doe,html:gi(`^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))`).replace(`comment`,coe).replace(/tag/g,`(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b`).getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:_i,lheading:/^(.+?)\n {0,3}(=+|-+) *(?:\n+|$)/,paragraph:gi(roe).replace(`hr`,bi).replace(`heading`,` *#{1,6} *[^ +]`).replace(`lheading`,noe).replace(`|table`,``).replace(`blockquote`,` {0,3}>`).replace(`|fences`,``).replace(`|list`,``).replace(`|html`,``).replace(`|tag`,``).getRegex()},hoe=/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,goe=/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,_oe=/^( {2,}|\\)\n(?!\s*$)/,voe=/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\`^|~",yoe=gi(/^((?![*_])[\spunctuation])/,`u`).replace(/punctuation/g,Si).getRegex(),boe=/\[[^[\]]*?\]\([^\(\)]*?\)|`[^`]*?`|<[^<>]*?>/g,xoe=gi(/^(?:\*+(?:((?!\*)[punct])|[^\s*]))|^_+(?:((?!_)[punct])|([^\s_]))/,`u`).replace(/punct/g,Si).getRegex(),Soe=gi(`^[^_*]*?__[^_*]*?\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\*)[punct](\\*+)(?=[\\s]|$)|[^punct\\s](\\*+)(?!\\*)(?=[punct\\s]|$)|(?!\\*)[punct\\s](\\*+)(?=[^punct\\s])|[\\s](\\*+)(?!\\*)(?=[punct])|(?!\\*)[punct](\\*+)(?!\\*)(?=[punct])|[^punct\\s](\\*+)(?=[^punct\\s])`,`gu`).replace(/punct/g,Si).getRegex(),Coe=gi(`^[^_*]*?\\*\\*[^_*]*?_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|(?!_)[punct](_+)(?=[\\s]|$)|[^punct\\s](_+)(?!_)(?=[punct\\s]|$)|(?!_)[punct\\s](_+)(?=[^punct\\s])|[\\s](_+)(?!_)(?=[punct])|(?!_)[punct](_+)(?!_)(?=[punct])`,`gu`).replace(/punct/g,Si).getRegex(),woe=gi(/\\([punct])/,`gu`).replace(/punct/g,Si).getRegex(),Toe=gi(/^<(scheme:[^\s\x00-\x1f<>]*|email)>/).replace(`scheme`,/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(`email`,/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Eoe=gi(coe).replace(`(?:-->|$)`,`-->`).getRegex(),Doe=gi(`^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^`).replace(`comment`,Eoe).replace(`attribute`,/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/).getRegex(),Ci=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,Ooe=gi(/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/).replace(`label`,Ci).replace(`href`,/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/).replace(`title`,/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/).getRegex(),koe=gi(/^!?\[(label)\]\[(ref)\]/).replace(`label`,Ci).replace(`ref`,aoe).getRegex(),Aoe=gi(/^!?\[(ref)\](?:\[\])?/).replace(`ref`,aoe).getRegex(),joe={_backpedal:_i,anyPunctuation:woe,autolink:Toe,blockSkip:boe,br:_oe,code:goe,del:_i,emStrongLDelim:xoe,emStrongRDelimAst:Soe,emStrongRDelimUnd:Coe,escape:hoe,link:Ooe,nolink:Aoe,punctuation:yoe,reflink:koe,reflinkSearch:gi(`reflink|nolink(?!\\()`,`g`).replace(`reflink`,koe).replace(`nolink`,Aoe).getRegex(),tag:Doe,text:voe,url:_i},Moe={...joe,link:gi(/^!?\[(label)\]\((.*?)\)/).replace(`label`,Ci).getRegex(),reflink:gi(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace(`label`,Ci).getRegex()},Noe={...joe,escape:gi(hoe).replace(`])`,`~|])`).getRegex(),url:gi(/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,`i`).replace(`email`,/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'"~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'"~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\t+` `.repeat(n.length));let n,r,i,a;for(;e;)if(!(this.options.extensions&&this.options.extensions.block&&this.options.extensions.block.some(r=>(n=r.call({lexer:this},e,t))?(e=e.substring(n.raw.length),t.push(n),!0):!1))){if(n=this.tokenizer.space(e)){e=e.substring(n.raw.length),n.raw.length===1&&t.length>0?t[t.length-1].raw+=` `:t.push(n);continue}if(n=this.tokenizer.code(e)){e=e.substring(n.raw.length),r=t[t.length-1],r&&(r.type===`paragraph`||r.type===`text`)?(r.raw+=` `+n.raw,r.text+=` @@ -5736,9 +6024,9 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value `+n.raw,r.text+=` `+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=r.text):t.push(n),a=i.length!==e.length,e=e.substring(n.raw.length);continue}if(n=this.tokenizer.text(e)){e=e.substring(n.raw.length),r=t[t.length-1],r&&r.type===`text`?(r.raw+=` `+n.raw,r.text+=` -`+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=r.text):t.push(n);continue}if(e){let t=`Infinite loop on byte: `+e.charCodeAt(0);if(this.options.silent){console.error(t);break}else throw Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n,r,i,a=e,o,s,l;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(e.length>0)for(;(o=this.tokenizer.rules.inline.reflinkSearch.exec(a))!=null;)e.includes(o[0].slice(o[0].lastIndexOf(`[`)+1,-1))&&(a=a.slice(0,o.index)+`[`+`a`.repeat(o[0].length-2)+`]`+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(o=this.tokenizer.rules.inline.blockSkip.exec(a))!=null;)a=a.slice(0,o.index)+`[`+`a`.repeat(o[0].length-2)+`]`+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(o=this.tokenizer.rules.inline.anyPunctuation.exec(a))!=null;)a=a.slice(0,o.index)+`++`+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(s||(l=``),s=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(r=>(n=r.call({lexer:this},e,t))?(e=e.substring(n.raw.length),t.push(n),!0):!1))){if(n=this.tokenizer.escape(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.tag(e)){e=e.substring(n.raw.length),r=t[t.length-1],r&&n.type===`text`&&r.type===`text`?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(n=this.tokenizer.link(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(n.raw.length),r=t[t.length-1],r&&n.type===`text`&&r.type===`text`?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(n=this.tokenizer.emStrong(e,a,l)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.codespan(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.br(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.del(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.autolink(e)){e=e.substring(n.raw.length),t.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(e))){e=e.substring(n.raw.length),t.push(n);continue}if(i=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0,n=e.slice(1),r;this.options.extensions.startInline.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(i=e.substring(0,t+1))}if(n=this.tokenizer.inlineText(i)){e=e.substring(n.raw.length),n.raw.slice(-1)!==`_`&&(l=n.raw.slice(-1)),s=!0,r=t[t.length-1],r&&r.type===`text`?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(e){let t=`Infinite loop on byte: `+e.charCodeAt(0);if(this.options.silent){console.error(t);break}else throw Error(t)}}return t}},Doe=class{options;constructor(e){this.options=e||ci}code(e,t,n){let r=(t||``).match(/^\S*/)?.[0];return e=e.replace(/\n$/,``)+` -`,r?`
`+(n?e:ui(e,!0))+`
-`:`
`+(n?e:ui(e,!0))+`
+`+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=r.text):t.push(n);continue}if(e){let t=`Infinite loop on byte: `+e.charCodeAt(0);if(this.options.silent){console.error(t);break}else throw Error(t)}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){let n,r,i,a=e,o,s,l;if(this.tokens.links){let e=Object.keys(this.tokens.links);if(e.length>0)for(;(o=this.tokenizer.rules.inline.reflinkSearch.exec(a))!=null;)e.includes(o[0].slice(o[0].lastIndexOf(`[`)+1,-1))&&(a=a.slice(0,o.index)+`[`+`a`.repeat(o[0].length-2)+`]`+a.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(o=this.tokenizer.rules.inline.blockSkip.exec(a))!=null;)a=a.slice(0,o.index)+`[`+`a`.repeat(o[0].length-2)+`]`+a.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;(o=this.tokenizer.rules.inline.anyPunctuation.exec(a))!=null;)a=a.slice(0,o.index)+`++`+a.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);for(;e;)if(s||(l=``),s=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some(r=>(n=r.call({lexer:this},e,t))?(e=e.substring(n.raw.length),t.push(n),!0):!1))){if(n=this.tokenizer.escape(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.tag(e)){e=e.substring(n.raw.length),r=t[t.length-1],r&&n.type===`text`&&r.type===`text`?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(n=this.tokenizer.link(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(n.raw.length),r=t[t.length-1],r&&n.type===`text`&&r.type===`text`?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(n=this.tokenizer.emStrong(e,a,l)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.codespan(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.br(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.del(e)){e=e.substring(n.raw.length),t.push(n);continue}if(n=this.tokenizer.autolink(e)){e=e.substring(n.raw.length),t.push(n);continue}if(!this.state.inLink&&(n=this.tokenizer.url(e))){e=e.substring(n.raw.length),t.push(n);continue}if(i=e,this.options.extensions&&this.options.extensions.startInline){let t=1/0,n=e.slice(1),r;this.options.extensions.startInline.forEach(e=>{r=e.call({lexer:this},n),typeof r==`number`&&r>=0&&(t=Math.min(t,r))}),t<1/0&&t>=0&&(i=e.substring(0,t+1))}if(n=this.tokenizer.inlineText(i)){e=e.substring(n.raw.length),n.raw.slice(-1)!==`_`&&(l=n.raw.slice(-1)),s=!0,r=t[t.length-1],r&&r.type===`text`?(r.raw+=n.raw,r.text+=n.text):t.push(n);continue}if(e){let t=`Infinite loop on byte: `+e.charCodeAt(0);if(this.options.silent){console.error(t);break}else throw Error(t)}}return t}},Di=class{options;constructor(e){this.options=e||pi}code(e,t,n){let r=(t||``).match(/^\S*/)?.[0];return e=e.replace(/\n$/,``)+` +`,r?`
`+(n?e:mi(e,!0))+`
+`:`
`+(n?e:mi(e,!0))+`
`}blockquote(e){return`
\n${e}
\n`}html(e,t){return e}heading(e,t,n){return`${e}\n`}hr(){return`
`}list(e,t,n){let r=t?`ol`:`ul`,i=t&&n!==1?` start="`+n+`"`:``;return`<`+r+i+`> `+e+` @@ -5746,22 +6034,22 @@ var PrintingPress=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value `+e+` `+t+` -`}tablerow(e){return`\n${e}\n`}tablecell(e,t){let n=t.header?`th`:`td`;return(t.align?`<${n} align="${t.align}">`:`<${n}>`)+e+`\n`}strong(e){return`${e}`}em(e){return`${e}`}codespan(e){return`${e}`}br(){return`
`}del(e){return`${e}`}link(e,t,n){let r=zae(e);if(r===null)return n;e=r;let i=`
`+n+``,i}image(e,t,n){let r=zae(e);if(r===null)return n;e=r;let i=`${n}`,i}text(e){return e}},Ooe=class{strong(e){return e}em(e){return e}codespan(e){return e}del(e){return e}html(e){return e}text(e){return e}link(e,t,n){return``+n}image(e,t,n){return``+n}br(){return``}},Ci=class e{options;renderer;textRenderer;constructor(e){this.options=e||ci,this.options.renderer=this.options.renderer||new Doe,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new Ooe}static parse(t,n){return new e(n).parse(t)}static parseInline(t,n){return new e(n).parseInline(t)}parse(e,t=!0){let n=``;for(let r=0;r0&&n.tokens[0].type===`paragraph`?(n.tokens[0].text=e+` `+n.tokens[0].text,n.tokens[0].tokens&&n.tokens[0].tokens.length>0&&n.tokens[0].tokens[0].type===`text`&&(n.tokens[0].tokens[0].text=e+` `+n.tokens[0].tokens[0].text)):n.tokens.unshift({type:`text`,text:e+` `}):s+=e+` `}s+=this.parse(n.tokens,a),o+=this.renderer.listitem(s,i,!!r)}n+=this.renderer.list(o,t,r);continue}case`html`:{let e=i;n+=this.renderer.html(e.text,e.block);continue}case`paragraph`:{let e=i;n+=this.renderer.paragraph(this.parseInline(e.tokens));continue}case`text`:{let a=i,o=a.tokens?this.parseInline(a.tokens):a.text;for(;r+1{let i=e[r].flat(1/0);n=n.concat(this.walkTokens(i,t))}):e.tokens&&(n=n.concat(this.walkTokens(e.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(e=>{let n={...e};if(n.async=this.defaults.async||n.async||!1,e.extensions&&(e.extensions.forEach(e=>{if(!e.name)throw Error(`extension name required`);if(`renderer`in e){let n=t.renderers[e.name];n?t.renderers[e.name]=function(...t){let r=e.renderer.apply(this,t);return r===!1&&(r=n.apply(this,t)),r}:t.renderers[e.name]=e.renderer}if(`tokenizer`in e){if(!e.level||e.level!==`block`&&e.level!==`inline`)throw Error(`extension level must be 'block' or 'inline'`);let n=t[e.level];n?n.unshift(e.tokenizer):t[e.level]=[e.tokenizer],e.start&&(e.level===`block`?t.startBlock?t.startBlock.push(e.start):t.startBlock=[e.start]:e.level===`inline`&&(t.startInline?t.startInline.push(e.start):t.startInline=[e.start]))}`childTokens`in e&&e.childTokens&&(t.childTokens[e.name]=e.childTokens)}),n.extensions=t),e.renderer){let t=this.defaults.renderer||new Doe(this.defaults);for(let n in e.renderer){if(!(n in t))throw Error(`renderer '${n}' does not exist`);if(n===`options`)continue;let r=n,i=e.renderer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n||``}}n.renderer=t}if(e.tokenizer){let t=this.defaults.tokenizer||new mi(this.defaults);for(let n in e.tokenizer){if(!(n in t))throw Error(`tokenizer '${n}' does not exist`);if([`options`,`rules`,`lexer`].includes(n))continue;let r=n,i=e.tokenizer[r],a=t[r];t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.tokenizer=t}if(e.hooks){let t=this.defaults.hooks||new koe;for(let n in e.hooks){if(!(n in t))throw Error(`hook '${n}' does not exist`);if(n===`options`)continue;let r=n,i=e.hooks[r],a=t[r];koe.passThroughHooks.has(n)?t[r]=e=>{if(this.defaults.async)return Promise.resolve(i.call(t,e)).then(e=>a.call(t,e));let n=i.call(t,e);return a.call(t,n)}:t[r]=(...e)=>{let n=i.apply(t,e);return n===!1&&(n=a.apply(t,e)),n}}n.hooks=t}if(e.walkTokens){let t=this.defaults.walkTokens,r=e.walkTokens;n.walkTokens=function(e){let n=[];return n.push(r.call(this,e)),t&&(n=n.concat(t.call(this,e))),n}}this.defaults={...this.defaults,...n}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return Si.lex(e,t??this.defaults)}parser(e,t){return Ci.parse(e,t??this.defaults)}#e(e,t){return(n,r)=>{let i={...r},a={...this.defaults,...i};this.defaults.async===!0&&i.async===!1&&(a.silent||console.warn(`marked(): The async option was set to true by an extension. The async: false option sent to parse will be ignored.`),a.async=!0);let o=this.#t(!!a.silent,!!a.async);if(n==null)return o(Error(`marked(): input parameter is undefined or null`));if(typeof n!=`string`)return o(Error(`marked(): input parameter is of type `+Object.prototype.toString.call(n)+`, string expected`));if(a.hooks&&(a.hooks.options=a),a.async)return Promise.resolve(a.hooks?a.hooks.preprocess(n):n).then(t=>e(t,a)).then(e=>a.hooks?a.hooks.processAllTokens(e):e).then(e=>a.walkTokens?Promise.all(this.walkTokens(e,a.walkTokens)).then(()=>e):e).then(e=>t(e,a)).then(e=>a.hooks?a.hooks.postprocess(e):e).catch(o);try{a.hooks&&(n=a.hooks.preprocess(n));let r=e(n,a);a.hooks&&(r=a.hooks.processAllTokens(r)),a.walkTokens&&this.walkTokens(r,a.walkTokens);let i=t(r,a);return a.hooks&&(i=a.hooks.postprocess(i)),i}catch(e){return o(e)}}}#t(e,t){return n=>{if(n.message+=` -Please report this to https://github.com/markedjs/marked.`,e){let e=`

An error occurred:

`+ui(n.message+``,!0)+`
`;return t?Promise.resolve(e):e}if(t)return Promise.reject(n);throw n}}};function Ti(e,t){return wi.parse(e,t)}Ti.options=Ti.setOptions=function(e){return wi.setOptions(e),Ti.defaults=wi.defaults,li(Ti.defaults),Ti},Ti.getDefaults=si,Ti.defaults=ci,Ti.use=function(...e){return wi.use(...e),Ti.defaults=wi.defaults,li(Ti.defaults),Ti},Ti.walkTokens=function(e,t){return wi.walkTokens(e,t)},Ti.parseInline=wi.parseInline,Ti.Parser=Ci,Ti.parser=Ci.parse,Ti.Renderer=Doe,Ti.TextRenderer=Ooe,Ti.Lexer=Si,Ti.lexer=Si.lex,Ti.Tokenizer=mi,Ti.Hooks=koe,Ti.parse=Ti,Ti.options,Ti.setOptions,Ti.use,Ti.walkTokens,Ti.parseInline,Ci.parse,Si.lex;function Aoe(e){return e.replaceAll(`&`,`&`).replaceAll(`<`,`<`).replaceAll(`>`,`>`)}function joe(e){return JSON.stringify(e).replaceAll(`<`,`\\u003c`).replaceAll(`>`,`\\u003e`).replaceAll(`&`,`\\u0026`)}function Moe(e){return e.trim()?`