@scalar/api-reference 1.49.3 → 1.49.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +9 -0
- package/dist/_virtual/_plugin-vue_export-helper.js +8 -0
- package/dist/blocks/index.js +4 -2
- package/dist/blocks/scalar-client-selector-block/components/ClientDropdown.vue.d.ts.map +1 -1
- package/dist/blocks/scalar-client-selector-block/components/ClientDropdown.vue.js +9 -0
- package/dist/blocks/scalar-client-selector-block/components/ClientDropdown.vue.js.map +1 -0
- package/dist/blocks/scalar-client-selector-block/components/ClientDropdown.vue.script.js +106 -0
- package/dist/blocks/scalar-client-selector-block/components/ClientDropdown.vue.script.js.map +1 -0
- package/dist/blocks/scalar-client-selector-block/components/ClientSelector.vue.js +9 -0
- package/dist/blocks/scalar-client-selector-block/components/ClientSelector.vue.js.map +1 -0
- package/dist/blocks/scalar-client-selector-block/components/ClientSelector.vue.script.js +121 -0
- package/dist/blocks/scalar-client-selector-block/components/ClientSelector.vue.script.js.map +1 -0
- package/dist/blocks/scalar-client-selector-block/helpers/featured-clients.js +27 -0
- package/dist/blocks/scalar-client-selector-block/helpers/featured-clients.js.map +1 -0
- package/dist/blocks/scalar-client-selector-block/index.d.ts +1 -1
- package/dist/blocks/scalar-info-block/components/DownloadLink.vue.js +9 -0
- package/dist/blocks/scalar-info-block/components/DownloadLink.vue.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/DownloadLink.vue.script.js +55 -0
- package/dist/blocks/scalar-info-block/components/DownloadLink.vue.script.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/InfoBlock.vue.js +7 -0
- package/dist/blocks/scalar-info-block/components/InfoBlock.vue.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/InfoBlock.vue.script.js +69 -0
- package/dist/blocks/scalar-info-block/components/InfoBlock.vue.script.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/InfoDescription.vue.js +9 -0
- package/dist/blocks/scalar-info-block/components/InfoDescription.vue.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/InfoDescription.vue.script.js +68 -0
- package/dist/blocks/scalar-info-block/components/InfoDescription.vue.script.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/InfoLinks.vue.js +7 -0
- package/dist/blocks/scalar-info-block/components/InfoLinks.vue.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/InfoLinks.vue.script.js +40 -0
- package/dist/blocks/scalar-info-block/components/InfoLinks.vue.script.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/InfoMarkdownSection.vue.js +7 -0
- package/dist/blocks/scalar-info-block/components/InfoMarkdownSection.vue.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/InfoMarkdownSection.vue.script.js +35 -0
- package/dist/blocks/scalar-info-block/components/InfoMarkdownSection.vue.script.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/InfoVersion.vue.js +7 -0
- package/dist/blocks/scalar-info-block/components/InfoVersion.vue.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/InfoVersion.vue.script.js +25 -0
- package/dist/blocks/scalar-info-block/components/InfoVersion.vue.script.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/IntroductionCard.vue.js +9 -0
- package/dist/blocks/scalar-info-block/components/IntroductionCard.vue.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/IntroductionCard.vue.script.js +15 -0
- package/dist/blocks/scalar-info-block/components/IntroductionCard.vue.script.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/IntroductionCardItem.vue.js +14 -0
- package/dist/blocks/scalar-info-block/components/IntroductionCardItem.vue.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/IntroductionLayout.vue.js +9 -0
- package/dist/blocks/scalar-info-block/components/IntroductionLayout.vue.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/IntroductionLayout.vue.script.js +92 -0
- package/dist/blocks/scalar-info-block/components/IntroductionLayout.vue.script.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/OpenApiVersion.vue.js +7 -0
- package/dist/blocks/scalar-info-block/components/OpenApiVersion.vue.js.map +1 -0
- package/dist/blocks/scalar-info-block/components/OpenApiVersion.vue.script.js +19 -0
- package/dist/blocks/scalar-info-block/components/OpenApiVersion.vue.script.js.map +1 -0
- package/dist/blocks/scalar-info-block/index.d.ts +2 -2
- package/dist/blocks/scalar-server-selector-block/components/Selector.vue.js +7 -0
- package/dist/blocks/scalar-server-selector-block/components/Selector.vue.js.map +1 -0
- package/dist/blocks/scalar-server-selector-block/components/Selector.vue.script.js +71 -0
- package/dist/blocks/scalar-server-selector-block/components/Selector.vue.script.js.map +1 -0
- package/dist/blocks/scalar-server-selector-block/components/ServerSelector.vue.js +7 -0
- package/dist/blocks/scalar-server-selector-block/components/ServerSelector.vue.js.map +1 -0
- package/dist/blocks/scalar-server-selector-block/components/ServerSelector.vue.script.js +69 -0
- package/dist/blocks/scalar-server-selector-block/components/ServerSelector.vue.script.js.map +1 -0
- package/dist/blocks/scalar-server-selector-block/index.d.ts +1 -1
- package/dist/browser/standalone.js +35377 -34973
- package/dist/browser/webpack-stats.json +1 -1
- package/dist/components/AgentScalar/AgentScalarButton.vue.js +7 -0
- package/dist/components/AgentScalar/AgentScalarButton.vue.js.map +1 -0
- package/dist/components/AgentScalar/AgentScalarButton.vue.script.js +21 -0
- package/dist/components/AgentScalar/AgentScalarButton.vue.script.js.map +1 -0
- package/dist/components/AgentScalar/AgentScalarChatInterface.vue.js +7 -0
- package/dist/components/AgentScalar/AgentScalarChatInterface.vue.js.map +1 -0
- package/dist/{AgentScalarChatInterface-MUbtSqMw.js → components/AgentScalar/AgentScalarChatInterface.vue.script.js} +5 -6
- package/dist/components/AgentScalar/AgentScalarChatInterface.vue.script.js.map +1 -0
- package/dist/components/AgentScalar/AgentScalarDrawer.vue.d.ts +0 -1
- package/dist/components/AgentScalar/AgentScalarDrawer.vue.d.ts.map +1 -1
- package/dist/components/AgentScalar/AgentScalarDrawer.vue.js +9 -0
- package/dist/components/AgentScalar/AgentScalarDrawer.vue.js.map +1 -0
- package/dist/components/AgentScalar/AgentScalarDrawer.vue.script.js +65 -0
- package/dist/components/AgentScalar/AgentScalarDrawer.vue.script.js.map +1 -0
- package/dist/components/AgentScalar/OpenMCPButton.vue.js +9 -0
- package/dist/components/AgentScalar/OpenMCPButton.vue.js.map +1 -0
- package/dist/components/AgentScalar/OpenMCPButton.vue.script.js +184 -0
- package/dist/components/AgentScalar/OpenMCPButton.vue.script.js.map +1 -0
- package/dist/components/AgentScalar/index.d.ts +3 -3
- package/dist/components/Anchor/Anchor.vue.js +7 -0
- package/dist/components/Anchor/Anchor.vue.js.map +1 -0
- package/dist/components/Anchor/Anchor.vue.script.js +40 -0
- package/dist/components/Anchor/Anchor.vue.script.js.map +1 -0
- package/dist/components/Anchor/WithBreadcrumb.vue.js +7 -0
- package/dist/components/Anchor/WithBreadcrumb.vue.js.map +1 -0
- package/dist/components/Anchor/WithBreadcrumb.vue.script.js +32 -0
- package/dist/components/Anchor/WithBreadcrumb.vue.script.js.map +1 -0
- package/dist/components/Anchor/index.d.ts +2 -2
- package/dist/components/ApiReference.vue.d.ts.map +1 -1
- package/dist/components/ApiReference.vue.js +12 -0
- package/dist/components/ApiReference.vue.js.map +1 -0
- package/dist/components/ApiReference.vue.script.js +662 -0
- package/dist/components/ApiReference.vue.script.js.map +1 -0
- package/dist/components/Badge/Badge.vue.js +9 -0
- package/dist/components/Badge/Badge.vue.js.map +1 -0
- package/dist/components/Badge/Badge.vue.script.js +22 -0
- package/dist/components/Badge/Badge.vue.script.js.map +1 -0
- package/dist/components/Badge/index.d.ts +1 -1
- package/dist/components/ClassicHeader.vue.js +16 -0
- package/dist/components/ClassicHeader.vue.js.map +1 -0
- package/dist/components/Content/Auth/Auth.vue.js +7 -0
- package/dist/components/Content/Auth/Auth.vue.js.map +1 -0
- package/dist/components/Content/Auth/Auth.vue.script.js +70 -0
- package/dist/components/Content/Auth/Auth.vue.script.js.map +1 -0
- package/dist/components/Content/Auth/helpers/get-default-security.js +64 -0
- package/dist/components/Content/Auth/helpers/get-default-security.js.map +1 -0
- package/dist/components/Content/Auth/index.d.ts +1 -1
- package/dist/components/Content/Content.vue.js +8 -0
- package/dist/components/Content/Content.vue.js.map +1 -0
- package/dist/components/Content/Content.vue.script.js +192 -0
- package/dist/components/Content/Content.vue.script.js.map +1 -0
- package/dist/components/Content/Models/Model.vue.js +7 -0
- package/dist/components/Content/Models/Model.vue.js.map +1 -0
- package/dist/components/Content/Models/Model.vue.script.js +61 -0
- package/dist/components/Content/Models/Model.vue.script.js.map +1 -0
- package/dist/components/Content/Models/ModelTag.vue.js +7 -0
- package/dist/components/Content/Models/ModelTag.vue.js.map +1 -0
- package/dist/components/Content/Models/ModelTag.vue.script.js +69 -0
- package/dist/components/Content/Models/ModelTag.vue.script.js.map +1 -0
- package/dist/components/Content/Models/components/ClassicLayout.vue.js +9 -0
- package/dist/components/Content/Models/components/ClassicLayout.vue.js.map +1 -0
- package/dist/components/Content/Models/components/ClassicLayout.vue.script.js +81 -0
- package/dist/components/Content/Models/components/ClassicLayout.vue.script.js.map +1 -0
- package/dist/components/Content/Models/components/ModernLayout.vue.js +7 -0
- package/dist/components/Content/Models/components/ModernLayout.vue.js.map +1 -0
- package/dist/components/Content/Models/components/ModernLayout.vue.script.js +66 -0
- package/dist/components/Content/Models/components/ModernLayout.vue.script.js.map +1 -0
- package/dist/components/Content/Models/index.d.ts +2 -2
- package/dist/components/Content/Operations/TraversedEntry.vue.js +7 -0
- package/dist/components/Content/Operations/TraversedEntry.vue.js.map +1 -0
- package/dist/components/Content/Operations/TraversedEntry.vue.script.js +213 -0
- package/dist/components/Content/Operations/TraversedEntry.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/RenderString.vue.js +7 -0
- package/dist/components/Content/Schema/RenderString.vue.js.map +1 -0
- package/dist/components/Content/Schema/RenderString.vue.script.js +36 -0
- package/dist/components/Content/Schema/RenderString.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/Schema.vue.js +9 -0
- package/dist/components/Content/Schema/Schema.vue.js.map +1 -0
- package/dist/components/Content/Schema/Schema.vue.script.js +184 -0
- package/dist/components/Content/Schema/Schema.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/SchemaComposition.vue.d.ts +1 -1
- package/dist/components/Content/Schema/SchemaComposition.vue.js +7 -0
- package/dist/components/Content/Schema/SchemaComposition.vue.js.map +1 -0
- package/dist/components/Content/Schema/SchemaComposition.vue.script.js +146 -0
- package/dist/components/Content/Schema/SchemaComposition.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/SchemaEnumPropertyItem.vue.js +9 -0
- package/dist/components/Content/Schema/SchemaEnumPropertyItem.vue.js.map +1 -0
- package/dist/components/Content/Schema/SchemaEnumPropertyItem.vue.script.js +29 -0
- package/dist/components/Content/Schema/SchemaEnumPropertyItem.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/SchemaEnums.vue.js +9 -0
- package/dist/components/Content/Schema/SchemaEnums.vue.js.map +1 -0
- package/dist/components/Content/Schema/SchemaEnums.vue.script.js +108 -0
- package/dist/components/Content/Schema/SchemaEnums.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/SchemaHeading.vue.js +9 -0
- package/dist/components/Content/Schema/SchemaHeading.vue.js.map +1 -0
- package/dist/components/Content/Schema/SchemaHeading.vue.script.js +45 -0
- package/dist/components/Content/Schema/SchemaHeading.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/SchemaObjectExampleCodeBlock.vue.js +7 -0
- package/dist/components/Content/Schema/SchemaObjectExampleCodeBlock.vue.js.map +1 -0
- package/dist/components/Content/Schema/SchemaObjectExampleCodeBlock.vue.script.js +55 -0
- package/dist/components/Content/Schema/SchemaObjectExampleCodeBlock.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/SchemaObjectProperties.vue.js +7 -0
- package/dist/components/Content/Schema/SchemaObjectProperties.vue.js.map +1 -0
- package/dist/components/Content/Schema/SchemaObjectProperties.vue.script.js +161 -0
- package/dist/components/Content/Schema/SchemaObjectProperties.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/SchemaProperty.vue.js +9 -0
- package/dist/components/Content/Schema/SchemaProperty.vue.js.map +1 -0
- package/dist/components/Content/Schema/SchemaProperty.vue.script.js +256 -0
- package/dist/components/Content/Schema/SchemaProperty.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/SchemaPropertyDefault.vue.js +9 -0
- package/dist/components/Content/Schema/SchemaPropertyDefault.vue.js.map +1 -0
- package/dist/components/Content/Schema/SchemaPropertyDefault.vue.script.js +35 -0
- package/dist/components/Content/Schema/SchemaPropertyDefault.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/SchemaPropertyDetail.vue.js +9 -0
- package/dist/components/Content/Schema/SchemaPropertyDetail.vue.js.map +1 -0
- package/dist/components/Content/Schema/SchemaPropertyDetail.vue.script.js +30 -0
- package/dist/components/Content/Schema/SchemaPropertyDetail.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/SchemaPropertyExamples.vue.js +9 -0
- package/dist/components/Content/Schema/SchemaPropertyExamples.vue.js.map +1 -0
- package/dist/components/Content/Schema/SchemaPropertyExamples.vue.script.js +67 -0
- package/dist/components/Content/Schema/SchemaPropertyExamples.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/SchemaPropertyHeading.vue.js +9 -0
- package/dist/components/Content/Schema/SchemaPropertyHeading.vue.js.map +1 -0
- package/dist/components/Content/Schema/SchemaPropertyHeading.vue.script.js +251 -0
- package/dist/components/Content/Schema/SchemaPropertyHeading.vue.script.js.map +1 -0
- package/dist/components/Content/Schema/helpers/format-example.js +26 -0
- package/dist/components/Content/Schema/helpers/format-example.js.map +1 -0
- package/dist/components/Content/Schema/helpers/format-value.js +22 -0
- package/dist/components/Content/Schema/helpers/format-value.js.map +1 -0
- package/dist/components/Content/Schema/helpers/get-compositions-to-render.d.ts +1 -1
- package/dist/components/Content/Schema/helpers/get-compositions-to-render.js +32 -0
- package/dist/components/Content/Schema/helpers/get-compositions-to-render.js.map +1 -0
- package/dist/components/Content/Schema/helpers/get-enum-values.js +22 -0
- package/dist/components/Content/Schema/helpers/get-enum-values.js.map +1 -0
- package/dist/components/Content/Schema/helpers/get-property-description.js +36 -0
- package/dist/components/Content/Schema/helpers/get-property-description.js.map +1 -0
- package/dist/components/Content/Schema/helpers/get-ref-name.js +19 -0
- package/dist/components/Content/Schema/helpers/get-ref-name.js.map +1 -0
- package/dist/components/Content/Schema/helpers/get-schema-type.js +49 -0
- package/dist/components/Content/Schema/helpers/get-schema-type.js.map +1 -0
- package/dist/components/Content/Schema/helpers/has-complex-array-items.js +53 -0
- package/dist/components/Content/Schema/helpers/has-complex-array-items.js.map +1 -0
- package/dist/components/Content/Schema/helpers/is-empty-schema-object.js +18 -0
- package/dist/components/Content/Schema/helpers/is-empty-schema-object.js.map +1 -0
- package/dist/components/Content/Schema/helpers/is-type-object.js +18 -0
- package/dist/components/Content/Schema/helpers/is-type-object.js.map +1 -0
- package/dist/components/Content/Schema/helpers/merge-all-of-schemas.js +175 -0
- package/dist/components/Content/Schema/helpers/merge-all-of-schemas.js.map +1 -0
- package/dist/components/Content/Schema/helpers/optimize-value-for-display.js +68 -0
- package/dist/components/Content/Schema/helpers/optimize-value-for-display.js.map +1 -0
- package/dist/components/Content/Schema/helpers/schema-composition.js +11 -0
- package/dist/components/Content/Schema/helpers/schema-composition.js.map +1 -0
- package/dist/components/Content/Schema/helpers/schema-name.js +23 -0
- package/dist/components/Content/Schema/helpers/schema-name.js.map +1 -0
- package/dist/components/Content/Schema/helpers/should-display-description.js +17 -0
- package/dist/components/Content/Schema/helpers/should-display-description.js.map +1 -0
- package/dist/components/Content/Schema/helpers/should-display-heading.js +18 -0
- package/dist/components/Content/Schema/helpers/should-display-heading.js.map +1 -0
- package/dist/components/Content/Schema/helpers/should-render-array-item-composition.js +20 -0
- package/dist/components/Content/Schema/helpers/should-render-array-item-composition.js.map +1 -0
- package/dist/components/Content/Schema/helpers/sort-property-names.js +45 -0
- package/dist/components/Content/Schema/helpers/sort-property-names.js.map +1 -0
- package/dist/components/Content/Schema/index.d.ts +4 -4
- package/dist/components/Content/Tags/Tag.vue.js +7 -0
- package/dist/components/Content/Tags/Tag.vue.js.map +1 -0
- package/dist/components/Content/Tags/Tag.vue.script.js +56 -0
- package/dist/components/Content/Tags/Tag.vue.script.js.map +1 -0
- package/dist/components/Content/Tags/components/ClassicLayout.vue.js +9 -0
- package/dist/components/Content/Tags/components/ClassicLayout.vue.js.map +1 -0
- package/dist/components/Content/Tags/components/ClassicLayout.vue.script.js +49 -0
- package/dist/components/Content/Tags/components/ClassicLayout.vue.script.js.map +1 -0
- package/dist/components/Content/Tags/components/ModernLayout.vue.js +9 -0
- package/dist/components/Content/Tags/components/ModernLayout.vue.js.map +1 -0
- package/dist/components/Content/Tags/components/ModernLayout.vue.script.js +63 -0
- package/dist/components/Content/Tags/components/ModernLayout.vue.script.js.map +1 -0
- package/dist/components/Content/Tags/components/TagSection.vue.js +7 -0
- package/dist/components/Content/Tags/components/TagSection.vue.js.map +1 -0
- package/dist/components/Content/Tags/components/TagSection.vue.script.js +78 -0
- package/dist/components/Content/Tags/components/TagSection.vue.script.js.map +1 -0
- package/dist/components/Content/Tags/index.d.ts +1 -1
- package/dist/components/Content/index.d.ts +2 -2
- package/dist/components/GettingStarted.vue.js +9 -0
- package/dist/components/GettingStarted.vue.js.map +1 -0
- package/dist/components/GettingStarted.vue.script.js +71 -0
- package/dist/components/GettingStarted.vue.script.js.map +1 -0
- package/dist/components/HttpMethod/HttpMethod.vue.js +7 -0
- package/dist/components/HttpMethod/HttpMethod.vue.js.map +1 -0
- package/dist/components/HttpMethod/HttpMethod.vue.script.js +33 -0
- package/dist/components/HttpMethod/HttpMethod.vue.script.js.map +1 -0
- package/dist/components/HttpMethod/index.d.ts +1 -1
- package/dist/components/IntersectionObserver.vue.js +7 -0
- package/dist/components/IntersectionObserver.vue.js.map +1 -0
- package/dist/components/IntersectionObserver.vue.script.js +45 -0
- package/dist/components/IntersectionObserver.vue.script.js.map +1 -0
- package/dist/components/Lazy/Lazy.vue.js +7 -0
- package/dist/components/Lazy/Lazy.vue.js.map +1 -0
- package/dist/components/Lazy/Lazy.vue.script.js +101 -0
- package/dist/components/Lazy/Lazy.vue.script.js.map +1 -0
- package/dist/components/LinkList/LinkList.vue.js +9 -0
- package/dist/components/LinkList/LinkList.vue.js.map +1 -0
- package/dist/components/LinkList/LinkList.vue.script.js +53 -0
- package/dist/components/LinkList/LinkList.vue.script.js.map +1 -0
- package/dist/components/LinkList/index.d.ts +1 -1
- package/dist/components/LoadingSkeleton.vue.js +9 -0
- package/dist/components/LoadingSkeleton.vue.js.map +1 -0
- package/dist/components/LoadingSkeleton.vue.script.js +20 -0
- package/dist/components/LoadingSkeleton.vue.script.js.map +1 -0
- package/dist/components/MobileHeader.vue.d.ts.map +1 -1
- package/dist/components/MobileHeader.vue.js +7 -0
- package/dist/components/MobileHeader.vue.js.map +1 -0
- package/dist/components/MobileHeader.vue.script.js +43 -0
- package/dist/components/MobileHeader.vue.script.js.map +1 -0
- package/dist/components/OperationPath.vue.js +9 -0
- package/dist/components/OperationPath.vue.js.map +1 -0
- package/dist/components/OperationPath.vue.script.js +24 -0
- package/dist/components/OperationPath.vue.script.js.map +1 -0
- package/dist/components/OperationsList/OperationsList.vue.js +9 -0
- package/dist/components/OperationsList/OperationsList.vue.js.map +1 -0
- package/dist/components/OperationsList/OperationsList.vue.script.js +49 -0
- package/dist/components/OperationsList/OperationsList.vue.script.js.map +1 -0
- package/dist/components/OperationsList/OperationsListItem.vue.js +9 -0
- package/dist/components/OperationsList/OperationsListItem.vue.js.map +1 -0
- package/dist/components/OperationsList/OperationsListItem.vue.script.js +51 -0
- package/dist/components/OperationsList/OperationsListItem.vue.script.js.map +1 -0
- package/dist/components/OperationsList/index.d.ts +1 -1
- package/dist/components/RenderPlugins/RenderPlugins.vue.js +7 -0
- package/dist/components/RenderPlugins/RenderPlugins.vue.js.map +1 -0
- package/dist/components/RenderPlugins/RenderPlugins.vue.script.js +44 -0
- package/dist/components/RenderPlugins/RenderPlugins.vue.script.js.map +1 -0
- package/dist/components/RenderPlugins/index.d.ts +1 -1
- package/dist/components/ScreenReader.vue.js +9 -0
- package/dist/components/ScreenReader.vue.js.map +1 -0
- package/dist/components/ScreenReader.vue.script.js +22 -0
- package/dist/components/ScreenReader.vue.script.js.map +1 -0
- package/dist/components/Section/CompactSection.vue.js +9 -0
- package/dist/components/Section/CompactSection.vue.js.map +1 -0
- package/dist/components/Section/CompactSection.vue.script.js +56 -0
- package/dist/components/Section/CompactSection.vue.script.js.map +1 -0
- package/dist/components/Section/Section.vue.js +9 -0
- package/dist/components/Section/Section.vue.js.map +1 -0
- package/dist/components/Section/Section.vue.script.js +23 -0
- package/dist/components/Section/Section.vue.script.js.map +1 -0
- package/dist/components/Section/SectionAccordion.vue.js +9 -0
- package/dist/components/Section/SectionAccordion.vue.js.map +1 -0
- package/dist/components/Section/SectionAccordion.vue.script.js +60 -0
- package/dist/components/Section/SectionAccordion.vue.script.js.map +1 -0
- package/dist/components/Section/SectionColumn.vue.js +14 -0
- package/dist/components/Section/SectionColumn.vue.js.map +1 -0
- package/dist/components/Section/SectionColumns.vue.js +14 -0
- package/dist/components/Section/SectionColumns.vue.js.map +1 -0
- package/dist/components/Section/SectionContainer.vue.js +9 -0
- package/dist/components/Section/SectionContainer.vue.js.map +1 -0
- package/dist/components/Section/SectionContainer.vue.script.js +19 -0
- package/dist/components/Section/SectionContainer.vue.script.js.map +1 -0
- package/dist/components/Section/SectionContainerAccordion.vue.js +9 -0
- package/dist/components/Section/SectionContainerAccordion.vue.js.map +1 -0
- package/dist/components/Section/SectionContainerAccordion.vue.script.js +40 -0
- package/dist/components/Section/SectionContainerAccordion.vue.script.js.map +1 -0
- package/dist/components/Section/SectionContent.vue.js +9 -0
- package/dist/components/Section/SectionContent.vue.js.map +1 -0
- package/dist/components/Section/SectionContent.vue.script.js +23 -0
- package/dist/components/Section/SectionContent.vue.script.js.map +1 -0
- package/dist/components/Section/SectionHeader.vue.js +9 -0
- package/dist/components/Section/SectionHeader.vue.js.map +1 -0
- package/dist/components/Section/SectionHeader.vue.script.js +23 -0
- package/dist/components/Section/SectionHeader.vue.script.js.map +1 -0
- package/dist/components/Section/SectionHeaderTag.vue.js +9 -0
- package/dist/components/Section/SectionHeaderTag.vue.js.map +1 -0
- package/dist/components/Section/SectionHeaderTag.vue.script.js +18 -0
- package/dist/components/Section/SectionHeaderTag.vue.script.js.map +1 -0
- package/dist/components/Section/index.d.ts +10 -10
- package/dist/components/SectionFlare/SectionFlare.vue.js +14 -0
- package/dist/components/SectionFlare/SectionFlare.vue.js.map +1 -0
- package/dist/components/SectionFlare/index.d.ts +1 -1
- package/dist/components/ShowMoreButton.vue.js +9 -0
- package/dist/components/ShowMoreButton.vue.js.map +1 -0
- package/dist/components/ShowMoreButton.vue.script.js +22 -0
- package/dist/components/ShowMoreButton.vue.script.js.map +1 -0
- package/dist/components/index.d.ts +5 -5
- package/dist/components/index.js +20 -102
- package/dist/{urls-gPTXGgbj.js → consts/urls.js} +2 -2
- package/dist/consts/urls.js.map +1 -0
- package/dist/features/Operation/Operation.vue.js +7 -0
- package/dist/features/Operation/Operation.vue.js.map +1 -0
- package/dist/features/Operation/Operation.vue.script.js +115 -0
- package/dist/features/Operation/Operation.vue.script.js.map +1 -0
- package/dist/features/Operation/components/ContentTypeSelect.vue.js +7 -0
- package/dist/features/Operation/components/ContentTypeSelect.vue.js.map +1 -0
- package/dist/features/Operation/components/ContentTypeSelect.vue.script.js +75 -0
- package/dist/features/Operation/components/ContentTypeSelect.vue.script.js.map +1 -0
- package/dist/features/Operation/components/Header.vue.js +7 -0
- package/dist/features/Operation/components/Header.vue.js.map +1 -0
- package/dist/features/Operation/components/Header.vue.script.js +42 -0
- package/dist/features/Operation/components/Header.vue.script.js.map +1 -0
- package/dist/features/Operation/components/Headers.vue.js +9 -0
- package/dist/features/Operation/components/Headers.vue.js.map +1 -0
- package/dist/features/Operation/components/Headers.vue.script.js +58 -0
- package/dist/features/Operation/components/Headers.vue.script.js.map +1 -0
- package/dist/features/Operation/components/OperationParameters.vue.d.ts +1 -1
- package/dist/features/Operation/components/OperationParameters.vue.js +7 -0
- package/dist/features/Operation/components/OperationParameters.vue.js.map +1 -0
- package/dist/features/Operation/components/OperationParameters.vue.script.js +108 -0
- package/dist/features/Operation/components/OperationParameters.vue.script.js.map +1 -0
- package/dist/features/Operation/components/OperationResponses.vue.d.ts +1 -1
- package/dist/features/Operation/components/OperationResponses.vue.js +7 -0
- package/dist/features/Operation/components/OperationResponses.vue.js.map +1 -0
- package/dist/features/Operation/components/OperationResponses.vue.script.js +48 -0
- package/dist/features/Operation/components/OperationResponses.vue.script.js.map +1 -0
- package/dist/features/Operation/components/ParameterList.vue.d.ts +1 -1
- package/dist/features/Operation/components/ParameterList.vue.js +7 -0
- package/dist/features/Operation/components/ParameterList.vue.js.map +1 -0
- package/dist/features/Operation/components/ParameterList.vue.script.js +53 -0
- package/dist/features/Operation/components/ParameterList.vue.script.js.map +1 -0
- package/dist/features/Operation/components/ParameterListItem.vue.d.ts +1 -1
- package/dist/features/Operation/components/ParameterListItem.vue.js +9 -0
- package/dist/features/Operation/components/ParameterListItem.vue.js.map +1 -0
- package/dist/features/Operation/components/ParameterListItem.vue.script.js +161 -0
- package/dist/features/Operation/components/ParameterListItem.vue.script.js.map +1 -0
- package/dist/features/Operation/components/RequestBody.vue.js +9 -0
- package/dist/features/Operation/components/RequestBody.vue.js.map +1 -0
- package/dist/features/Operation/components/RequestBody.vue.script.js +154 -0
- package/dist/features/Operation/components/RequestBody.vue.script.js.map +1 -0
- package/dist/features/Operation/components/callbacks/Callback.vue.d.ts +1 -1
- package/dist/features/Operation/components/callbacks/Callback.vue.js +9 -0
- package/dist/features/Operation/components/callbacks/Callback.vue.js.map +1 -0
- package/dist/features/Operation/components/callbacks/Callback.vue.script.js +62 -0
- package/dist/features/Operation/components/callbacks/Callback.vue.script.js.map +1 -0
- package/dist/features/Operation/components/callbacks/Callbacks.vue.d.ts +1 -1
- package/dist/features/Operation/components/callbacks/Callbacks.vue.js +7 -0
- package/dist/features/Operation/components/callbacks/Callbacks.vue.js.map +1 -0
- package/dist/features/Operation/components/callbacks/Callbacks.vue.script.js +67 -0
- package/dist/features/Operation/components/callbacks/Callbacks.vue.script.js.map +1 -0
- package/dist/features/Operation/helpers/filter-selected-security.js +30 -0
- package/dist/features/Operation/helpers/filter-selected-security.js.map +1 -0
- package/dist/features/Operation/helpers/get-first-server.js +27 -0
- package/dist/features/Operation/helpers/get-first-server.js.map +1 -0
- package/dist/features/Operation/index.d.ts +1 -1
- package/dist/features/Operation/layouts/ClassicLayout.vue.d.ts +1 -1
- package/dist/features/Operation/layouts/ClassicLayout.vue.js +9 -0
- package/dist/features/Operation/layouts/ClassicLayout.vue.js.map +1 -0
- package/dist/features/Operation/layouts/ClassicLayout.vue.script.js +243 -0
- package/dist/features/Operation/layouts/ClassicLayout.vue.script.js.map +1 -0
- package/dist/features/Operation/layouts/ModernLayout.vue.d.ts +1 -1
- package/dist/features/Operation/layouts/ModernLayout.vue.js +9 -0
- package/dist/features/Operation/layouts/ModernLayout.vue.js.map +1 -0
- package/dist/features/Operation/layouts/ModernLayout.vue.script.js +243 -0
- package/dist/features/Operation/layouts/ModernLayout.vue.script.js.map +1 -0
- package/dist/features/Search/components/SearchButton.vue.js +7 -0
- package/dist/features/Search/components/SearchButton.vue.js.map +1 -0
- package/dist/features/Search/components/SearchButton.vue.script.js +77 -0
- package/dist/features/Search/components/SearchButton.vue.script.js.map +1 -0
- package/dist/features/Search/components/SearchModal.vue.js +9 -0
- package/dist/features/Search/components/SearchModal.vue.js.map +1 -0
- package/dist/features/Search/components/SearchModal.vue.script.js +115 -0
- package/dist/features/Search/components/SearchModal.vue.script.js.map +1 -0
- package/dist/features/Search/components/SearchResult.vue.js +7 -0
- package/dist/features/Search/components/SearchResult.vue.js.map +1 -0
- package/dist/features/Search/components/SearchResult.vue.script.js +69 -0
- package/dist/features/Search/components/SearchResult.vue.script.js.map +1 -0
- package/dist/features/Search/helpers/create-fuse-instance.js +52 -0
- package/dist/features/Search/helpers/create-fuse-instance.js.map +1 -0
- package/dist/features/Search/helpers/create-search-index.js +127 -0
- package/dist/features/Search/helpers/create-search-index.js.map +1 -0
- package/dist/features/Search/hooks/useSearchIndex.js +31 -0
- package/dist/features/Search/hooks/useSearchIndex.js.map +1 -0
- package/dist/features/Search/index.d.ts +2 -2
- package/dist/features/Search/types.d.ts +1 -1
- package/dist/features/ask-agent-button/AskAgentButton.vue.js +9 -0
- package/dist/features/ask-agent-button/AskAgentButton.vue.js.map +1 -0
- package/dist/features/ask-agent-button/AskAgentButton.vue.script.js +49 -0
- package/dist/features/ask-agent-button/AskAgentButton.vue.script.js.map +1 -0
- package/dist/features/developer-tools/DeveloperTools.vue.js +7 -0
- package/dist/features/developer-tools/DeveloperTools.vue.js.map +1 -0
- package/dist/features/developer-tools/DeveloperTools.vue.script.js +49 -0
- package/dist/features/developer-tools/DeveloperTools.vue.script.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarBlurb.vue.js +13 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarBlurb.vue.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayout.vue.js +7 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayout.vue.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayout.vue.script.js +38 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayout.vue.script.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayoutOptions.vue.js +7 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayoutOptions.vue.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayoutOptions.vue.script.js +112 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayoutOptions.vue.script.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarConfigTheme.vue.js +7 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarConfigTheme.vue.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarConfigTheme.vue.script.js +60 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarConfigTheme.vue.script.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarPopover.vue.js +7 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarPopover.vue.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarPopover.vue.script.js +35 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarPopover.vue.script.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarRegisterButton.vue.js +7 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarRegisterButton.vue.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarRegisterButton.vue.script.js +68 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarRegisterButton.vue.script.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarShareRegister.vue.js +7 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarShareRegister.vue.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarShareRegister.vue.script.js +80 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarShareRegister.vue.script.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarShareTemporary.vue.js +7 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarShareTemporary.vue.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarShareTemporary.vue.script.js +66 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarShareTemporary.vue.script.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarTitle.vue.js +7 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarTitle.vue.js.map +1 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarTitle.vue.script.js +44 -0
- package/dist/features/developer-tools/components/ApiReferenceToolbarTitle.vue.script.js.map +1 -0
- package/dist/features/developer-tools/components/DeployApiReference.vue.js +7 -0
- package/dist/features/developer-tools/components/DeployApiReference.vue.js.map +1 -0
- package/dist/features/developer-tools/components/DeployApiReference.vue.script.js +26 -0
- package/dist/features/developer-tools/components/DeployApiReference.vue.script.js.map +1 -0
- package/dist/features/developer-tools/components/ModifyConfiguration.vue.js +7 -0
- package/dist/features/developer-tools/components/ModifyConfiguration.vue.js.map +1 -0
- package/dist/features/developer-tools/components/ModifyConfiguration.vue.script.js +86 -0
- package/dist/features/developer-tools/components/ModifyConfiguration.vue.script.js.map +1 -0
- package/dist/features/developer-tools/components/ShareApiReference.vue.js +7 -0
- package/dist/features/developer-tools/components/ShareApiReference.vue.js.map +1 -0
- package/dist/features/developer-tools/components/ShareApiReference.vue.script.js +26 -0
- package/dist/features/developer-tools/components/ShareApiReference.vue.script.js.map +1 -0
- package/dist/features/developer-tools/index.d.ts +1 -1
- package/dist/features/example-responses/ExampleResponse.vue.js +9 -0
- package/dist/features/example-responses/ExampleResponse.vue.js.map +1 -0
- package/dist/features/example-responses/ExampleResponse.vue.script.js +56 -0
- package/dist/features/example-responses/ExampleResponse.vue.script.js.map +1 -0
- package/dist/features/example-responses/ExampleResponseTab.vue.js +9 -0
- package/dist/features/example-responses/ExampleResponseTab.vue.js.map +1 -0
- package/dist/features/example-responses/ExampleResponseTab.vue.script.js +21 -0
- package/dist/features/example-responses/ExampleResponseTab.vue.script.js.map +1 -0
- package/dist/features/example-responses/ExampleResponseTabList.vue.js +9 -0
- package/dist/features/example-responses/ExampleResponseTabList.vue.js.map +1 -0
- package/dist/features/example-responses/ExampleResponseTabList.vue.script.js +31 -0
- package/dist/features/example-responses/ExampleResponseTabList.vue.script.js.map +1 -0
- package/dist/features/example-responses/ExampleResponses.vue.js +9 -0
- package/dist/features/example-responses/ExampleResponses.vue.js.map +1 -0
- package/dist/features/example-responses/ExampleResponses.vue.script.js +157 -0
- package/dist/features/example-responses/ExampleResponses.vue.script.js.map +1 -0
- package/dist/features/example-responses/ExampleSchema.vue.js +7 -0
- package/dist/features/example-responses/ExampleSchema.vue.js.map +1 -0
- package/dist/features/example-responses/ExampleSchema.vue.script.js +42 -0
- package/dist/features/example-responses/ExampleSchema.vue.script.js.map +1 -0
- package/dist/features/example-responses/has-response-content.js +37 -0
- package/dist/features/example-responses/has-response-content.js.map +1 -0
- package/dist/features/example-responses/index.d.ts +1 -1
- package/dist/features/external-docs/ExternalDocs.vue.js +7 -0
- package/dist/features/external-docs/ExternalDocs.vue.js.map +1 -0
- package/dist/features/external-docs/ExternalDocs.vue.script.js +37 -0
- package/dist/features/external-docs/ExternalDocs.vue.script.js.map +1 -0
- package/dist/features/external-docs/index.d.ts +1 -1
- package/dist/features/index.d.ts +2 -2
- package/dist/features/index.js +4 -3
- package/dist/features/info-object/Contact.vue.js +7 -0
- package/dist/features/info-object/Contact.vue.js.map +1 -0
- package/dist/features/info-object/Contact.vue.script.js +37 -0
- package/dist/features/info-object/Contact.vue.script.js.map +1 -0
- package/dist/features/info-object/License.vue.js +7 -0
- package/dist/features/info-object/License.vue.js.map +1 -0
- package/dist/features/info-object/License.vue.script.js +32 -0
- package/dist/features/info-object/License.vue.script.js.map +1 -0
- package/dist/features/info-object/TermsOfService.vue.js +7 -0
- package/dist/features/info-object/TermsOfService.vue.js.map +1 -0
- package/dist/features/info-object/TermsOfService.vue.script.js +29 -0
- package/dist/features/info-object/TermsOfService.vue.script.js.map +1 -0
- package/dist/features/info-object/index.d.ts +3 -3
- package/dist/features/multiple-documents/DocumentSelector.vue.js +7 -0
- package/dist/features/multiple-documents/DocumentSelector.vue.js.map +1 -0
- package/dist/features/multiple-documents/DocumentSelector.vue.script.js +48 -0
- package/dist/features/multiple-documents/DocumentSelector.vue.script.js.map +1 -0
- package/dist/features/specification-extension/SpecificationExtension.vue.js +7 -0
- package/dist/features/specification-extension/SpecificationExtension.vue.js.map +1 -0
- package/dist/features/specification-extension/SpecificationExtension.vue.script.js +56 -0
- package/dist/features/specification-extension/SpecificationExtension.vue.script.js.map +1 -0
- package/dist/features/specification-extension/helpers.js +15 -0
- package/dist/features/specification-extension/helpers.js.map +1 -0
- package/dist/features/specification-extension/index.d.ts +2 -2
- package/dist/features/test-request-button/TestRequestButton.vue.js +9 -0
- package/dist/features/test-request-button/TestRequestButton.vue.js.map +1 -0
- package/dist/features/test-request-button/TestRequestButton.vue.script.js +47 -0
- package/dist/features/test-request-button/TestRequestButton.vue.script.js.map +1 -0
- package/dist/features/test-request-button/index.d.ts +1 -1
- package/dist/features/x-badges/XBadges.vue.js +7 -0
- package/dist/features/x-badges/XBadges.vue.js.map +1 -0
- package/dist/features/x-badges/XBadges.vue.script.js +31 -0
- package/dist/features/x-badges/XBadges.vue.script.js.map +1 -0
- package/dist/features/x-badges/index.d.ts +1 -1
- package/dist/helpers/color-mode.js +15 -0
- package/dist/helpers/color-mode.js.map +1 -0
- package/dist/helpers/download.js +77 -0
- package/dist/helpers/download.js.map +1 -0
- package/dist/helpers/id-routing.js +107 -0
- package/dist/helpers/id-routing.js.map +1 -0
- package/dist/helpers/index.d.ts +8 -8
- package/dist/helpers/index.js +8 -2
- package/dist/{lazy-bus-CV8Ox5hD.js → helpers/lazy-bus.js} +3 -106
- package/dist/helpers/lazy-bus.js.map +1 -0
- package/dist/helpers/load-from-perssistance.js +23 -0
- package/dist/helpers/load-from-perssistance.js.map +1 -0
- package/dist/helpers/map-config-plugins.js +44 -0
- package/dist/helpers/map-config-plugins.js.map +1 -0
- package/dist/helpers/map-config-to-workspace-store.js +24 -0
- package/dist/helpers/map-config-to-workspace-store.js.map +1 -0
- package/dist/helpers/normalize-configurations.js +66 -0
- package/dist/helpers/normalize-configurations.js.map +1 -0
- package/dist/helpers/openapi.js +132 -0
- package/dist/helpers/openapi.js.map +1 -0
- package/dist/{storage--3JuzjCI.js → helpers/storage.js} +2 -2
- package/dist/helpers/storage.js.map +1 -0
- package/dist/helpers/upload-temp-document.js +24 -0
- package/dist/helpers/upload-temp-document.js.map +1 -0
- package/dist/hooks/index.d.ts +2 -2
- package/dist/hooks/index.js +2 -2
- package/dist/{use-agent-Bnm1de0n.js → hooks/use-agent.js} +2 -2
- package/dist/hooks/use-agent.js.map +1 -0
- package/dist/{use-intersection-8QqPi2O-.js → hooks/use-intersection.js} +2 -2
- package/dist/hooks/use-intersection.js.map +1 -0
- package/dist/index.d.ts +4 -4
- package/dist/index.js +6 -6
- package/dist/plugins/hooks/usePluginManager.d.ts +1 -1
- package/dist/plugins/hooks/usePluginManager.js +16 -0
- package/dist/plugins/hooks/usePluginManager.js.map +1 -0
- package/dist/plugins/index.d.ts +3 -3
- package/dist/plugins/index.js +3 -1
- package/dist/plugins/persistance-plugin.js +39 -0
- package/dist/plugins/persistance-plugin.js.map +1 -0
- package/dist/plugins/plugin-manager.js +32 -0
- package/dist/plugins/plugin-manager.js.map +1 -0
- package/dist/ssr.js +6 -6
- package/dist/standalone/lib/html-api.js +73 -0
- package/dist/standalone/lib/html-api.js.map +1 -0
- package/dist/style.css +7878 -6432
- package/package.json +11 -11
- package/dist/AgentScalarChatInterface-MUbtSqMw.js.map +0 -1
- package/dist/ExternalDocs-phu7GxpZ.js +0 -272
- package/dist/ExternalDocs-phu7GxpZ.js.map +0 -1
- package/dist/MobileHeader-DAm6yQX0.js +0 -1373
- package/dist/MobileHeader-DAm6yQX0.js.map +0 -1
- package/dist/Operation-CvpVIkc3.js +0 -3829
- package/dist/Operation-CvpVIkc3.js.map +0 -1
- package/dist/SearchButton-xzhIpMCZ.js +0 -621
- package/dist/SearchButton-xzhIpMCZ.js.map +0 -1
- package/dist/ServerSelector-5y29y2BJ.js +0 -852
- package/dist/ServerSelector-5y29y2BJ.js.map +0 -1
- package/dist/components/index.js.map +0 -1
- package/dist/lazy-bus-CV8Ox5hD.js.map +0 -1
- package/dist/normalize-configurations-DcVpOEjD.js +0 -232
- package/dist/normalize-configurations-DcVpOEjD.js.map +0 -1
- package/dist/plugins-4EyiUD_A.js +0 -80
- package/dist/plugins-4EyiUD_A.js.map +0 -1
- package/dist/src-DJwsRvMU.js +0 -1686
- package/dist/src-DJwsRvMU.js.map +0 -1
- package/dist/storage--3JuzjCI.js.map +0 -1
- package/dist/urls-gPTXGgbj.js.map +0 -1
- package/dist/use-agent-Bnm1de0n.js.map +0 -1
- package/dist/use-intersection-8QqPi2O-.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Operation-CvpVIkc3.js","names":["$slots","$props","$slots","$slots","$attrs"],"sources":["../src/components/Section/SectionAccordion.vue","../src/components/Section/SectionAccordion.vue","../src/components/ScreenReader.vue","../src/components/ScreenReader.vue","../src/components/Anchor/Anchor.vue","../src/components/Anchor/Anchor.vue","../src/components/Anchor/WithBreadcrumb.vue","../src/components/Anchor/WithBreadcrumb.vue","../src/features/specification-extension/helpers.ts","../src/components/Content/Schema/helpers/is-type-object.ts","../src/components/Content/Schema/helpers/is-empty-schema-object.ts","../src/components/Content/Schema/SchemaHeading.vue","../src/components/Content/Schema/SchemaHeading.vue","../src/components/Content/Schema/helpers/sort-property-names.ts","../src/components/Content/Schema/helpers/schema-composition.ts","../src/components/Content/Schema/helpers/has-complex-array-items.ts","../src/components/Content/Schema/helpers/should-render-array-item-composition.ts","../src/components/Content/Schema/helpers/get-compositions-to-render.ts","../src/components/Content/Schema/helpers/get-enum-values.ts","../src/components/Content/Schema/helpers/get-property-description.ts","../src/components/Content/Schema/helpers/optimize-value-for-display.ts","../src/components/Content/Schema/helpers/should-display-description.ts","../src/components/Content/Schema/helpers/should-display-heading.ts","../src/components/Content/Schema/helpers/get-schema-type.ts","../src/components/Content/Schema/helpers/merge-all-of-schemas.ts","../src/components/Content/Schema/helpers/get-ref-name.ts","../src/components/Content/Schema/helpers/schema-name.ts","../src/components/Content/Schema/SchemaComposition.vue","../src/components/Content/Schema/SchemaComposition.vue","../src/components/Content/Schema/SchemaEnumPropertyItem.vue","../src/components/Content/Schema/SchemaEnumPropertyItem.vue","../src/components/Content/Schema/SchemaEnums.vue","../src/components/Content/Schema/SchemaEnums.vue","../src/components/Content/Schema/RenderString.vue","../src/components/Content/Schema/RenderString.vue","../src/components/Content/Schema/helpers/format-value.ts","../src/components/Content/Schema/SchemaPropertyDefault.vue","../src/components/Content/Schema/SchemaPropertyDefault.vue","../src/components/Content/Schema/SchemaPropertyDetail.vue","../src/components/Content/Schema/SchemaPropertyDetail.vue","../src/components/Content/Schema/helpers/format-example.ts","../src/components/Content/Schema/SchemaPropertyExamples.vue","../src/components/Content/Schema/SchemaPropertyExamples.vue","../src/components/Content/Schema/SchemaPropertyHeading.vue","../src/components/Content/Schema/SchemaPropertyHeading.vue","../src/components/Content/Schema/SchemaProperty.vue","../src/components/Content/Schema/SchemaProperty.vue","../src/components/Content/Schema/SchemaObjectProperties.vue","../src/components/Content/Schema/SchemaObjectProperties.vue","../src/components/Content/Schema/Schema.vue","../src/components/Content/Schema/Schema.vue","../src/components/HttpMethod/HttpMethod.vue","../src/components/HttpMethod/HttpMethod.vue","../src/features/Operation/helpers/filter-selected-security.ts","../src/features/Operation/helpers/get-first-server.ts","../src/components/OperationPath.vue","../src/components/OperationPath.vue","../src/features/example-responses/ExampleSchema.vue","../src/features/example-responses/ExampleSchema.vue","../src/features/example-responses/ExampleResponse.vue","../src/features/example-responses/ExampleResponse.vue","../src/features/example-responses/ExampleResponseTab.vue","../src/features/example-responses/ExampleResponseTab.vue","../src/features/example-responses/ExampleResponseTabList.vue","../src/features/example-responses/ExampleResponseTabList.vue","../src/features/example-responses/has-response-content.ts","../src/features/example-responses/ExampleResponses.vue","../src/features/example-responses/ExampleResponses.vue","../src/features/Operation/components/ContentTypeSelect.vue","../src/features/Operation/components/ContentTypeSelect.vue","../src/features/Operation/components/Header.vue","../src/features/Operation/components/Header.vue","../src/features/Operation/components/Headers.vue","../src/features/Operation/components/Headers.vue","../src/features/Operation/components/ParameterListItem.vue","../src/features/Operation/components/ParameterListItem.vue","../src/features/Operation/components/ParameterList.vue","../src/features/Operation/components/ParameterList.vue","../src/features/Operation/components/RequestBody.vue","../src/features/Operation/components/RequestBody.vue","../src/features/Operation/components/OperationParameters.vue","../src/features/Operation/components/OperationParameters.vue","../src/features/Operation/components/OperationResponses.vue","../src/features/Operation/components/OperationResponses.vue","../src/features/Operation/components/callbacks/Callback.vue","../src/features/Operation/components/callbacks/Callback.vue","../src/features/Operation/components/callbacks/Callbacks.vue","../src/features/Operation/components/callbacks/Callbacks.vue","../src/features/test-request-button/TestRequestButton.vue","../src/features/test-request-button/TestRequestButton.vue","../src/features/x-badges/XBadges.vue","../src/features/x-badges/XBadges.vue","../src/features/Operation/layouts/ClassicLayout.vue","../src/features/Operation/layouts/ClassicLayout.vue","../src/features/ask-agent-button/AskAgentButton.vue","../src/features/ask-agent-button/AskAgentButton.vue","../src/features/Operation/layouts/ModernLayout.vue","../src/features/Operation/layouts/ModernLayout.vue","../src/features/Operation/Operation.vue","../src/features/Operation/Operation.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'\nimport { ScalarIconCaretRight } from '@scalar/icons'\nimport { useElementHover } from '@vueuse/core'\nimport { ref } from 'vue'\n\ndefineProps<{\n transparent?: boolean\n modelValue: boolean\n}>()\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nconst button = ref()\nconst isHovered = useElementHover(button)\n</script>\n<template>\n <Disclosure\n as=\"section\"\n class=\"section-accordion\"\n :class=\"{ 'section-accordion-transparent': transparent }\">\n <DisclosureButton\n ref=\"button\"\n class=\"section-accordion-button\"\n @click=\"() => emit('update:modelValue', !modelValue)\">\n <div class=\"section-accordion-button-content\">\n <slot name=\"title\" />\n </div>\n <div\n v-if=\"$slots.actions\"\n class=\"section-accordion-button-actions\">\n <slot\n :active=\"isHovered || modelValue\"\n name=\"actions\" />\n </div>\n <ScalarIconCaretRight\n class=\"section-accordion-chevron size-4.5 transition-transform\"\n :class=\"{ 'rotate-90': modelValue }\" />\n </DisclosureButton>\n <DisclosurePanel\n v-if=\"modelValue\"\n class=\"section-accordion-content\"\n static>\n <div\n v-if=\"$slots.description\"\n class=\"section-accordion-description\">\n <slot name=\"description\" />\n </div>\n <div class=\"section-accordion-content-card\">\n <slot />\n </div>\n </DisclosurePanel>\n </Disclosure>\n</template>\n<style scoped>\n.section-wrapper {\n color: var(--scalar-color-1);\n\n padding-top: 12px;\n margin-top: -12px;\n}\n.section-accordion {\n display: flex;\n flex-direction: column;\n\n border-radius: var(--scalar-radius-lg);\n background: var(--scalar-background-2);\n\n /* Offset by header height to line up scroll position */\n scroll-margin-top: var(--refs-viewport-offset);\n}\n\n.section-accordion-transparent {\n background: transparent;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.section-accordion-button {\n padding: 6px;\n}\n.section-accordion-button {\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n}\n\n.section-accordion-button-content {\n flex: 1;\n min-width: 0;\n}\n.section-accordion-button-actions {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--scalar-color-3);\n}\n\n.section-accordion-chevron {\n margin-right: 4px;\n cursor: pointer;\n opacity: 1;\n color: var(--scalar-color-3);\n}\n.section-accordion-button:hover .section-accordion-chevron {\n color: var(--scalar-color-1);\n}\n.section-accordion-content {\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n display: flex;\n flex-direction: column;\n}\n\n.section-accordion-description {\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-mini);\n color: var(--scalar-color--1);\n padding: 10px 12px 0px 12px;\n}\n.section-accordion-content-card :deep(.property:last-of-type) {\n padding-bottom: 9px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'\nimport { ScalarIconCaretRight } from '@scalar/icons'\nimport { useElementHover } from '@vueuse/core'\nimport { ref } from 'vue'\n\ndefineProps<{\n transparent?: boolean\n modelValue: boolean\n}>()\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: boolean): void\n}>()\n\nconst button = ref()\nconst isHovered = useElementHover(button)\n</script>\n<template>\n <Disclosure\n as=\"section\"\n class=\"section-accordion\"\n :class=\"{ 'section-accordion-transparent': transparent }\">\n <DisclosureButton\n ref=\"button\"\n class=\"section-accordion-button\"\n @click=\"() => emit('update:modelValue', !modelValue)\">\n <div class=\"section-accordion-button-content\">\n <slot name=\"title\" />\n </div>\n <div\n v-if=\"$slots.actions\"\n class=\"section-accordion-button-actions\">\n <slot\n :active=\"isHovered || modelValue\"\n name=\"actions\" />\n </div>\n <ScalarIconCaretRight\n class=\"section-accordion-chevron size-4.5 transition-transform\"\n :class=\"{ 'rotate-90': modelValue }\" />\n </DisclosureButton>\n <DisclosurePanel\n v-if=\"modelValue\"\n class=\"section-accordion-content\"\n static>\n <div\n v-if=\"$slots.description\"\n class=\"section-accordion-description\">\n <slot name=\"description\" />\n </div>\n <div class=\"section-accordion-content-card\">\n <slot />\n </div>\n </DisclosurePanel>\n </Disclosure>\n</template>\n<style scoped>\n.section-wrapper {\n color: var(--scalar-color-1);\n\n padding-top: 12px;\n margin-top: -12px;\n}\n.section-accordion {\n display: flex;\n flex-direction: column;\n\n border-radius: var(--scalar-radius-lg);\n background: var(--scalar-background-2);\n\n /* Offset by header height to line up scroll position */\n scroll-margin-top: var(--refs-viewport-offset);\n}\n\n.section-accordion-transparent {\n background: transparent;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.section-accordion-button {\n padding: 6px;\n}\n.section-accordion-button {\n display: flex;\n align-items: center;\n gap: 6px;\n cursor: pointer;\n}\n\n.section-accordion-button-content {\n flex: 1;\n min-width: 0;\n}\n.section-accordion-button-actions {\n display: flex;\n align-items: center;\n gap: 6px;\n color: var(--scalar-color-3);\n}\n\n.section-accordion-chevron {\n margin-right: 4px;\n cursor: pointer;\n opacity: 1;\n color: var(--scalar-color-3);\n}\n.section-accordion-button:hover .section-accordion-chevron {\n color: var(--scalar-color-1);\n}\n.section-accordion-content {\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n display: flex;\n flex-direction: column;\n}\n\n.section-accordion-description {\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-mini);\n color: var(--scalar-color--1);\n padding: 10px 12px 0px 12px;\n}\n.section-accordion-content-card :deep(.property:last-of-type) {\n padding-bottom: 9px;\n}\n</style>\n","<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{\n if?: boolean\n }>(),\n {\n if: true,\n },\n)\n</script>\n<template>\n <span\n v-if=\"$props.if\"\n class=\"screenreader-only\">\n <slot />\n </span>\n <slot v-else />\n</template>\n<style scoped>\n.screenreader-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nwithDefaults(\n defineProps<{\n if?: boolean\n }>(),\n {\n if: true,\n },\n)\n</script>\n<template>\n <span\n v-if=\"$props.if\"\n class=\"screenreader-only\">\n <slot />\n </span>\n <slot v-else />\n</template>\n<style scoped>\n.screenreader-only {\n position: absolute;\n width: 1px;\n height: 1px;\n padding: 0;\n margin: -1px;\n overflow: hidden;\n clip: rect(0, 0, 0, 0);\n border: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ScalarButton, useBindCx } from '@scalar/components'\nimport { ScalarIconHash } from '@scalar/icons'\nimport { useId } from 'vue'\n\nimport ScreenReader from '../ScreenReader.vue'\n\nconst emit = defineEmits<{\n (e: 'copyAnchorUrl'): void\n}>()\n\nconst labelId = useId()\n\nconst { cx } = useBindCx()\n</script>\n<template>\n <span v-bind=\"cx('group/heading word-break-all relative')\">\n <span\n :id=\"labelId\"\n class=\"contents\">\n <slot />\n </span>\n <span class=\"relative\">\n <!-- Position anchor to align the copy button to the last line of text -->\n <span>​</span>\n <ScalarButton\n :aria-describedby=\"labelId\"\n class=\"absolute top-1/2 left-0 inline-block h-fit -translate-y-1/2 px-1.5 py-1 opacity-0 group-hover/heading:opacity-100 group-has-focus-visible/heading:opacity-100\"\n variant=\"ghost\"\n @click.stop=\"() => emit('copyAnchorUrl')\">\n <ScalarIconHash\n aria-hidden=\"true\"\n class=\"size-4.5\" />\n <ScreenReader>Copy link</ScreenReader>\n </ScalarButton>\n </span>\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarButton, useBindCx } from '@scalar/components'\nimport { ScalarIconHash } from '@scalar/icons'\nimport { useId } from 'vue'\n\nimport ScreenReader from '../ScreenReader.vue'\n\nconst emit = defineEmits<{\n (e: 'copyAnchorUrl'): void\n}>()\n\nconst labelId = useId()\n\nconst { cx } = useBindCx()\n</script>\n<template>\n <span v-bind=\"cx('group/heading word-break-all relative')\">\n <span\n :id=\"labelId\"\n class=\"contents\">\n <slot />\n </span>\n <span class=\"relative\">\n <!-- Position anchor to align the copy button to the last line of text -->\n <span>​</span>\n <ScalarButton\n :aria-describedby=\"labelId\"\n class=\"absolute top-1/2 left-0 inline-block h-fit -translate-y-1/2 px-1.5 py-1 opacity-0 group-hover/heading:opacity-100 group-has-focus-visible/heading:opacity-100\"\n variant=\"ghost\"\n @click.stop=\"() => emit('copyAnchorUrl')\">\n <ScalarIconHash\n aria-hidden=\"true\"\n class=\"size-4.5\" />\n <ScreenReader>Copy link</ScreenReader>\n </ScalarButton>\n </span>\n </span>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarIconLink } from '@scalar/icons'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\n\nconst { breadcrumb } = defineProps<{\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n}>()\n</script>\n\n<template>\n <template v-if=\"breadcrumb && breadcrumb.length > 0\">\n <div\n :id=\"breadcrumb.join('.')\"\n class=\"relative scroll-mt-24\">\n <!-- Content -->\n <slot />\n <button\n class=\"text-c-3 hover:text-c-1 absolute -top-2 -left-4.5 flex h-[calc(100%+16px)] w-4.5 cursor-pointer items-center justify-center pr-1.5 opacity-0 group-hover:opacity-100 focus-visible:opacity-100\"\n type=\"button\"\n @click=\"\n () =>\n eventBus?.emit('copy-url:nav-item', { id: breadcrumb.join('.') })\n \">\n <!-- Copy button -->\n <ScalarIconLink\n class=\"size-3\"\n weight=\"bold\" />\n <span class=\"sr-only\">\n <slot name=\"sr-label\">Copy link to <slot /></slot>\n </span>\n </button>\n </div>\n </template>\n <template v-else>\n <slot />\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarIconLink } from '@scalar/icons'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\n\nconst { breadcrumb } = defineProps<{\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n}>()\n</script>\n\n<template>\n <template v-if=\"breadcrumb && breadcrumb.length > 0\">\n <div\n :id=\"breadcrumb.join('.')\"\n class=\"relative scroll-mt-24\">\n <!-- Content -->\n <slot />\n <button\n class=\"text-c-3 hover:text-c-1 absolute -top-2 -left-4.5 flex h-[calc(100%+16px)] w-4.5 cursor-pointer items-center justify-center pr-1.5 opacity-0 group-hover:opacity-100 focus-visible:opacity-100\"\n type=\"button\"\n @click=\"\n () =>\n eventBus?.emit('copy-url:nav-item', { id: breadcrumb.join('.') })\n \">\n <!-- Copy button -->\n <ScalarIconLink\n class=\"size-3\"\n weight=\"bold\" />\n <span class=\"sr-only\">\n <slot name=\"sr-label\">Copy link to <slot /></slot>\n </span>\n </button>\n </div>\n </template>\n <template v-else>\n <slot />\n </template>\n</template>\n","/**\n * Utility function to extract all keys starting with 'x-' (OpenAPI extensions) from an object.\n *\n * @param object - The object from which to extract extension keys.\n * @returns An object containing only the entries whose keys start with 'x-'.\n */\nexport const getXKeysFromObject = (object?: Record<string, unknown>) => {\n if (!object) {\n // Return an empty object if input is undefined or null\n return {}\n }\n // Filter and return only the entries whose keys start with 'x-'\n return Object.fromEntries(Object.entries(object).filter(([key]) => key.startsWith('x-')))\n}\n","import type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\n/*\n * Checks whether a JSON schema is of type object\n */\nexport const isTypeObject = (schema: unknown): schema is Extract<SchemaObject, { type: 'object' }> => {\n // null, primitive types, arrays\n if (schema === null || typeof schema !== 'object' || Array.isArray(schema)) {\n return false\n }\n\n // Check for composition keywords - if present, this should be handled by composition logic\n const hasComposition = 'oneOf' in schema || 'anyOf' in schema || 'allOf' in schema || 'not' in schema\n\n // If it has composition keywords, it should not be treated as a simple object schema\n if (hasComposition) {\n return false\n }\n\n const hasType = 'type' in schema\n\n // Handle union types (type: ['object', 'null'])\n if (hasType && Array.isArray(schema.type)) {\n return schema.type.includes('object')\n }\n\n const hasTypeObject = hasType && schema.type === 'object'\n\n // type: object\n if (hasTypeObject) {\n return true\n }\n\n // type: string, number, boolean, array, etc.\n if (hasType && !hasTypeObject) {\n return false\n }\n\n const hasProperties = 'properties' in schema\n const hasAdditionalProperties = 'additionalProperties' in schema\n const hasPatternProperties = 'patternProperties' in schema\n\n return hasProperties || hasAdditionalProperties || hasPatternProperties\n}\n","import type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nimport { isTypeObject } from '@/components/Content/Schema/helpers/is-type-object'\n\n/**\n * Determines if the given schema is an empty object schema.\n * An empty object schema is defined as a schema with type 'object'\n * and no defined properties, no additionalProperties (or set to false), and no patternProperties.\n */\nexport const isEmptySchemaObject = (schema: SchemaObject | undefined): boolean => {\n if (!isTypeObject(schema)) {\n return false\n }\n\n const hasNoProperties = Object.keys(schema.properties ?? {}).length === 0\n const hasNoAdditionalProperties = schema.additionalProperties === undefined || schema.additionalProperties === false\n const hasNoPatternProperties = Object.keys(schema.patternProperties ?? {}).length === 0\n\n return hasNoProperties && hasNoAdditionalProperties && hasNoPatternProperties\n}\n","<script lang=\"ts\" setup>\nimport { ScalarWrappingText } from '@scalar/components'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isArraySchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\nimport { computed } from 'vue'\n\nimport { isTypeObject } from '@/components/Content/Schema/helpers/is-type-object'\n\nconst { value } = defineProps<{\n value: SchemaObject\n name?: string\n}>()\n\n/** Generate a failsafe type from the properties when we don't have one */\nconst failsafeType = computed(() => {\n if ('type' in value) {\n return value.type\n }\n\n if (value.enum) {\n return 'enum'\n }\n\n if (isArraySchema(value) && value.items) {\n return 'array'\n }\n\n if (isTypeObject(value) && (value.properties || value.additionalProperties)) {\n return 'object'\n }\n\n return 'unknown'\n})\n</script>\n\n<template>\n <span\n v-if=\"typeof value === 'object'\"\n class=\"schema-type\">\n <span\n class=\"schema-type-icon\"\n :title=\"\n 'type' in value && typeof value.type === 'string'\n ? value.type\n : 'type' in value && Array.isArray(value.type)\n ? value.type.join(' | ')\n : 'unknown type'\n \">\n <template v-if=\"isTypeObject(value)\"> {} </template>\n <template v-if=\"isArraySchema(value)\"> [] </template>\n <template v-if=\"value.enum\"> enum </template>\n </span>\n <template v-if=\"name\">\n <ScalarWrappingText\n :text=\"name\"\n preset=\"property\" />\n </template>\n <template v-else>\n {{ failsafeType }}\n </template>\n </span>\n</template>\n<style scoped>\n/* Style the \"icon\" */\n.schema-type-icon {\n color: var(--scalar-color-1);\n display: none;\n}\n.schema-type {\n font-family: var(--scalar-font-code);\n color: var(--scalar-color-1);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { ScalarWrappingText } from '@scalar/components'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isArraySchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\nimport { computed } from 'vue'\n\nimport { isTypeObject } from '@/components/Content/Schema/helpers/is-type-object'\n\nconst { value } = defineProps<{\n value: SchemaObject\n name?: string\n}>()\n\n/** Generate a failsafe type from the properties when we don't have one */\nconst failsafeType = computed(() => {\n if ('type' in value) {\n return value.type\n }\n\n if (value.enum) {\n return 'enum'\n }\n\n if (isArraySchema(value) && value.items) {\n return 'array'\n }\n\n if (isTypeObject(value) && (value.properties || value.additionalProperties)) {\n return 'object'\n }\n\n return 'unknown'\n})\n</script>\n\n<template>\n <span\n v-if=\"typeof value === 'object'\"\n class=\"schema-type\">\n <span\n class=\"schema-type-icon\"\n :title=\"\n 'type' in value && typeof value.type === 'string'\n ? value.type\n : 'type' in value && Array.isArray(value.type)\n ? value.type.join(' | ')\n : 'unknown type'\n \">\n <template v-if=\"isTypeObject(value)\"> {} </template>\n <template v-if=\"isArraySchema(value)\"> [] </template>\n <template v-if=\"value.enum\"> enum </template>\n </span>\n <template v-if=\"name\">\n <ScalarWrappingText\n :text=\"name\"\n preset=\"property\" />\n </template>\n <template v-else>\n {{ failsafeType }}\n </template>\n </span>\n</template>\n<style scoped>\n/* Style the \"icon\" */\n.schema-type-icon {\n color: var(--scalar-color-1);\n display: none;\n}\n.schema-type {\n font-family: var(--scalar-font-code);\n color: var(--scalar-color-1);\n}\n</style>\n","import type { ApiReferenceConfiguration } from '@scalar/types/api-reference'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { DiscriminatorObject, SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nimport { isTypeObject } from './is-type-object'\n\n/** Extract the type of properties */\ntype Properties = NonNullable<Extract<SchemaObject, { type: 'object' }>['properties']>\n\ntype Options = Partial<\n Pick<ApiReferenceConfiguration, 'orderSchemaPropertiesBy' | 'orderRequiredPropertiesFirst'> & {\n hideReadOnly: boolean\n hideWriteOnly: boolean\n }\n>\n\n/** Take a list of property names and reduce it back into an object */\nexport const reduceNamesToObject = (names: string[], properties: Properties): Properties =>\n names.reduce((acc, name) => {\n const prop = properties?.[name]\n if (prop) {\n acc[name] = prop\n }\n return acc\n }, {} as Properties)\n\n/** Sort property names in an object schema */\nexport const sortPropertyNames = (\n schema: SchemaObject,\n discriminator?: DiscriminatorObject,\n {\n hideReadOnly = false,\n hideWriteOnly = false,\n orderSchemaPropertiesBy = 'alpha',\n orderRequiredPropertiesFirst = true,\n }: Options = {},\n): string[] => {\n if (!isTypeObject(schema) || !schema.properties) {\n return []\n }\n\n const propertyNames = Object.keys(schema.properties)\n const requiredPropertiesSet = new Set(schema.required || [])\n\n return propertyNames\n .sort((a, b) => {\n const aDiscriminator = a === discriminator?.propertyName\n const bDiscriminator = b === discriminator?.propertyName\n\n const aRequired = requiredPropertiesSet.has(a)\n const bRequired = requiredPropertiesSet.has(b)\n\n // Discriminator comes first always\n if (aDiscriminator && !bDiscriminator) {\n return -1\n }\n if (!aDiscriminator && bDiscriminator) {\n return 1\n }\n\n // Sort by x-order specification extension when present\n const aSchema = schema.properties?.[a]\n const bSchema = schema.properties?.[b]\n const aOrder =\n aSchema && typeof aSchema === 'object' && 'x-order' in aSchema\n ? (aSchema as Record<string, unknown>)['x-order']\n : undefined\n const bOrder =\n bSchema && typeof bSchema === 'object' && 'x-order' in bSchema\n ? (bSchema as Record<string, unknown>)['x-order']\n : undefined\n\n if (aOrder !== undefined && bOrder !== undefined) {\n return Number(aOrder) - Number(bOrder)\n }\n if (aOrder !== undefined && bOrder === undefined) {\n return -1\n }\n if (aOrder === undefined && bOrder !== undefined) {\n return 1\n }\n\n // Order required properties first\n if (orderRequiredPropertiesFirst) {\n // If one is required and the other isn't, required comes first\n if (aRequired && !bRequired) {\n return -1\n }\n if (!aRequired && bRequired) {\n return 1\n }\n }\n\n // If both have the same required status, sort alphabetically\n if (orderSchemaPropertiesBy === 'alpha') {\n return a.localeCompare(b)\n }\n\n return 0\n })\n .filter((property) => {\n const resolved = schema.properties && resolve.schema(schema.properties[property])\n\n // If hideReadOnly is true, filter out properties that are readOnly\n if (hideReadOnly && resolved?.readOnly === true) {\n return false\n }\n // If hideWriteOnly is true, filter out properties that are writeOnly\n if (hideWriteOnly && resolved?.writeOnly === true) {\n return false\n }\n return true\n })\n}\n","/** Composition */\nexport type CompositionKeyword = 'oneOf' | 'anyOf' | 'allOf' | 'not'\n\nexport const compositions: CompositionKeyword[] = ['oneOf', 'anyOf', 'allOf', 'not']\n","import { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isArraySchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\n\n/** Composition keywords that indicate complex schema structure */\nconst COMPOSITION_KEYWORDS = ['allOf', 'oneOf', 'anyOf'] as const\n\n/**\n * Checks if a schema has object type (either explicit type: 'object' or has properties)\n */\nconst isObjectType = (schema: SchemaObject): boolean => {\n // Check for explicit object type\n if ('type' in schema && schema.type) {\n if (Array.isArray(schema.type)) {\n return schema.type.includes('object')\n }\n return schema.type === 'object'\n }\n\n // Check for properties (implicit object type)\n return 'properties' in schema\n}\n\n/**\n * Checks if a schema has complex features (refs, compositions, discriminators)\n */\nconst hasComplexFeatures = (schema: SchemaObject): boolean =>\n '$ref' in schema || 'discriminator' in schema || COMPOSITION_KEYWORDS.some((keyword) => keyword in schema)\n\n/**\n * Checks if nested array items are complex\n */\nconst hasComplexNestedArrayItems = (items: SchemaObject): boolean => {\n if (!isArraySchema(items) || typeof items.items !== 'object') {\n return false\n }\n\n // Check for $ref in original nested items before resolving\n if ('$ref' in items.items) {\n return true\n }\n\n const nestedItems = getResolvedRef(items.items)\n if (!nestedItems) {\n return false\n }\n\n // Check if nested items are complex (objects, refs, compositions, or further nested arrays)\n return isObjectType(nestedItems) || hasComplexFeatures(nestedItems) || isArraySchema(nestedItems)\n}\n\n/**\n * Checks if array items have complex structure\n * like: objects, references, discriminators, compositions, or nested arrays with complex items\n *\n * @param value - The schema object to check\n * @returns true if the array has complex items, false otherwise\n */\nexport const hasComplexArrayItems = (value: SchemaObject | undefined): boolean => {\n // Early return for invalid inputs\n if (!value || !isArraySchema(value) || typeof value.items !== 'object') {\n return false\n }\n\n // Check for $ref in original items before resolving (in case ref can't be resolved)\n if ('$ref' in value.items) {\n return true\n }\n\n const items = getResolvedRef(value.items)\n if (!items) {\n return false\n }\n\n // Check for complex features (refs, compositions, discriminators)\n if (hasComplexFeatures(items)) {\n return true\n }\n\n // Check if items are objects\n if (isObjectType(items)) {\n return true\n }\n\n // Check if items are nested arrays with complex items\n return hasComplexNestedArrayItems(items)\n}\n","import type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isArraySchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\n\nimport { hasComplexArrayItems } from './has-complex-array-items'\n\n/**\n * Check if array item composition should be rendered\n *\n * @param schema - The schema object to check\n * @param composition - The composition keyword to check for\n * @returns true if array item composition should be rendered, false otherwise\n */\nexport const shouldRenderArrayItemComposition = (schema: SchemaObject | undefined, composition: string): boolean => {\n // Early return if schema is invalid or not an array\n if (!schema || !isArraySchema(schema)) {\n return false\n }\n\n // Check if items exist and have the composition keyword\n const items = schema.items\n if (!items || typeof items !== 'object' || !(composition in items)) {\n return false\n }\n\n // Only render if items are not complex (complex items are handled differently)\n return !hasComplexArrayItems(schema)\n}\n","import { isDefined } from '@scalar/helpers/array/is-defined'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isArraySchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\n\nimport { type CompositionKeyword, compositions } from './schema-composition'\nimport { shouldRenderArrayItemComposition } from './should-render-array-item-composition'\n\ntype CompositionToRender = {\n composition: CompositionKeyword\n value: SchemaObject\n}\n\n/**\n * Computes which compositions should be rendered and with which values\n *\n * @param value - The schema object to check for compositions\n * @returns Array of compositions to render with their values\n */\nexport const getCompositionsToRender = (value: SchemaObject | undefined): CompositionToRender[] => {\n if (!value) {\n return []\n }\n\n return compositions\n .map((composition) => {\n // Check for array item-level composition first (more specific case)\n if (shouldRenderArrayItemComposition(value, composition) && isArraySchema(value) && value.items) {\n return {\n composition,\n value: resolve.schema(value.items),\n }\n }\n\n // Check for property-level composition\n if (value[composition]) {\n // Skip if array items have this composition (even if complex/not rendered)\n const hasArrayItemComposition =\n isArraySchema(value) && value.items && typeof value.items === 'object' && composition in value.items\n\n if (!hasArrayItemComposition) {\n return {\n composition,\n value: resolve.schema(value),\n }\n }\n }\n\n return null\n })\n .filter(isDefined)\n}\n","import { resolve } from '@scalar/workspace-store/resolve'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isArraySchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\n\n/**\n * Extract enum values from schema or array items\n *\n * @param value - The schema object to extract enum values from\n * @returns Array of enum values, or empty array if no enum found\n */\nexport const getEnumValues = (value: SchemaObject | undefined): unknown[] => {\n if (!value) {\n return []\n }\n\n // Check for enum directly on the schema\n if (value.enum) {\n return value.enum\n }\n\n // Check for enum in array items (resolving $ref if present)\n if (isArraySchema(value) && typeof value.items === 'object') {\n const resolvedItems = resolve.schema(value.items)\n if (resolvedItems && 'enum' in resolvedItems && resolvedItems.enum) {\n return resolvedItems.enum\n }\n }\n\n return []\n}\n","import type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isSchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\n\n// Type descriptions for built-in types\nconst TYPE_DESCRIPTIONS: Record<string, Record<string, string>> = {\n integer: {\n _default: 'Integer numbers.',\n int32: 'Signed 32-bit integers (commonly used integer type).',\n int64: 'Signed 64-bit integers (long type).',\n },\n string: {\n 'date': 'full-date notation as defined by RFC 3339, section 5.6, for example, 2017-07-21',\n 'date-time': 'the date-time notation as defined by RFC 3339, section 5.6, for example, 2017-07-21T17:32:28Z',\n 'password': 'a hint to UIs to mask the input',\n 'base64': 'base64-encoded characters, for example, U3dhZ2dlciByb2Nrcw==',\n 'byte': 'base64-encoded characters, for example, U3dhZ2dlciByb2Nrcw==',\n 'binary': 'binary data, used to describe files',\n },\n} as const\n\n/**\n * Generate property description from type/format\n *\n * @param value - The schema object to generate description from\n * @returns Description string or null if no description available\n */\nexport const getPropertyDescription = (value: SchemaObject | undefined): string | null => {\n if (!isSchema(value)) {\n return null\n }\n /** Just grab the first type from the array if it's an array */\n const type = Array.isArray(value.type) ? value.type[0] : value.type\n if (!type) {\n return null\n }\n\n const typeDescriptions = TYPE_DESCRIPTIONS[type]\n if (!typeDescriptions) {\n return null\n }\n\n const format =\n ('format' in value && value.format) || ('contentEncoding' in value && value.contentEncoding) || '_default'\n return typeDescriptions[format] ?? null\n}\n","import { resolve } from '@scalar/workspace-store/resolve'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nimport { compositions } from './schema-composition'\n\n/**\n * Optimize the value by removing nulls from compositions and merging root properties.\n *\n * TODO: figure out what this does\n */\nexport function optimizeValueForDisplay(value: SchemaObject | undefined): SchemaObject | undefined {\n if (!value || typeof value !== 'object') {\n return value\n }\n\n // Find the composition keyword early to avoid unnecessary work\n const composition = compositions.find((keyword) => keyword in value && keyword !== 'not')\n\n // If there's no relevant composition keyword, return a shallow copy\n if (!composition) {\n return { ...value }\n }\n\n const schemas = value[composition]\n if (!Array.isArray(schemas)) {\n return { ...value }\n }\n\n // Extract root properties efficiently (excluding composition and nullable)\n const { [composition]: _, nullable: originalNullable, ...rootProperties } = value as any\n const hasRootProperties = Object.keys(rootProperties).length > 0\n\n // Check for null schemas and filter them out in one pass\n const { filteredSchemas, hasNullSchema } = schemas.reduce(\n (acc, _schema) => {\n const schema = resolve.schema(_schema)\n\n if ('type' in schema && schema.type === 'null') {\n acc.hasNullSchema = true\n } else {\n acc.filteredSchemas.push(schema)\n }\n return acc\n },\n { filteredSchemas: [] as SchemaObject[], hasNullSchema: false },\n )\n\n // Determine if nullable should be set\n const shouldBeNullable = hasNullSchema || originalNullable === true\n\n // If only one schema remains after filtering, merge with root properties\n if (filteredSchemas.length === 1) {\n const mergedSchema = { ...rootProperties, ...filteredSchemas[0] }\n if (shouldBeNullable) {\n mergedSchema.nullable = true\n }\n return mergedSchema\n }\n\n // Check if root properties should be merged into schemas\n const shouldMergeRootProperties =\n (composition === 'oneOf' || composition === 'anyOf') &&\n (hasRootProperties || filteredSchemas.some((schema) => schema.allOf))\n\n if (shouldMergeRootProperties) {\n const mergedSchemas = filteredSchemas.map((_schema) => {\n const schema = resolve.schema(_schema)\n\n // Flatten single-item allOf and merge with root properties\n if (schema.allOf?.length === 1) {\n const { allOf, ...otherProps } = schema\n return { ...rootProperties, ...otherProps, ...resolve.schema(allOf[0]) }\n }\n return { ...rootProperties, ...schema }\n })\n\n // @ts-expect-error - We avoid using coerceValue here as it may be dangerous, so we type cast\n const result = { [composition]: mergedSchemas } as SchemaObject\n if (shouldBeNullable) {\n // @ts-expect-error We use nullable\n result.nullable = true\n }\n return result\n }\n\n // Return with filtered schemas if any nulls were removed\n if (filteredSchemas.length !== schemas.length) {\n const result: SchemaObject = { ...value, [composition]: filteredSchemas }\n if (shouldBeNullable) {\n // @ts-expect-error We use nullable\n result.nullable = true\n }\n return result\n }\n\n return { ...value }\n}\n","import type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\n/**\n * Determine if description should be displayed\n *\n * @param schema - The schema object to check\n * @param propDescription - Optional description from props\n * @returns Description string to display, or null if should not be displayed\n */\nexport const shouldDisplayDescription = (schema: SchemaObject | undefined, propDescription?: string): string | null => {\n if (!schema) {\n return null\n }\n\n // Don't show description for schemas with compositions to avoid duplicate descriptions\n if (schema.allOf) {\n return null\n }\n\n return propDescription || schema.description || null\n}\n","import type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\n/**\n * Determine if property heading should be displayed\n *\n * @param schema - The schema object to check\n * @param name - Optional property name\n * @param required - Whether the property is required\n * @returns true if heading should be displayed, false otherwise\n */\nexport const shouldDisplayHeading = (schema: SchemaObject | undefined, name?: string, required = false): boolean => {\n // Early return for simple cases\n if (name || required) {\n return true\n }\n\n // If schema is undefined, return false\n if (!schema) {\n return false\n }\n\n // Check schema properties that warrant a heading\n return (\n schema.deprecated === true ||\n schema.const !== undefined ||\n schema.enum?.length === 1 ||\n ('type' in schema && schema.type !== undefined) ||\n ('nullable' in schema && schema.nullable === true) ||\n schema.writeOnly === true ||\n schema.readOnly === true\n )\n}\n","import { resolve } from '@scalar/workspace-store/resolve'\nimport type { ReferenceType, SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isArraySchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\n\n/**\n * Formats an array type string with proper wrapping for union types.\n */\nconst formatArrayType = (itemType: string): string => {\n if (!itemType) {\n return 'array'\n }\n\n const wrappedItemType = itemType.includes(' | ') ? `(${itemType})` : itemType\n return `array ${wrappedItemType}[]`\n}\n\n/**\n * Handles array type processing for both single array types and union types containing array.\n */\nconst processArrayType = (value: Extract<SchemaObject, { type: 'array' }>, isUnionType: boolean = false): string => {\n if (!value.items) {\n return 'array'\n }\n\n const itemType = getSchemaType(resolve.schema(value.items))\n const baseType = formatArrayType(itemType)\n\n if (isUnionType) {\n return baseType\n }\n\n // Handle nullable arrays for non-union types\n return (value as any).nullable ? `${baseType} | null` : baseType\n}\n\n/**\n * Computes the structural type for a schema.\n * This helper always returns type information, never schema titles or ref names.\n *\n * Priority order:\n * 1. const values\n * 2. Array types (with special handling for items)\n * 3. type with contentEncoding\n * 4. raw type\n */\nexport const getSchemaType = (valueOrRef: SchemaObject | ReferenceType<SchemaObject>): string => {\n // Early return for falsy values\n if (!valueOrRef) {\n return ''\n }\n\n const value = resolve.schema(valueOrRef)\n\n // Handle const values first (highest priority)\n if (value.const !== undefined) {\n return 'const'\n }\n\n // Handle union types (array of types)\n if ('type' in value && Array.isArray(value.type)) {\n // Special case: union types containing 'array'\n // TODO: Correctly type array of types in SchemaObject\n if (value.type.includes('array') && (value as Extract<SchemaObject, { type: 'array' }>).items) {\n const arrayType = processArrayType(value as Extract<SchemaObject, { type: 'array' }>, true)\n const otherTypes = value.type.filter((t) => t !== 'array')\n\n return otherTypes.length > 0 ? `${arrayType} | ${otherTypes.join(' | ')}` : arrayType\n }\n\n // Regular union types\n return value.type.join(' | ')\n }\n\n // Handle single array type\n if (isArraySchema(value)) {\n return processArrayType(value, false)\n }\n\n // Handle type with content encoding\n if ('type' in value && value.type && value.contentEncoding) {\n return `${value.type} • ${value.contentEncoding}`\n }\n\n // Fallback to raw type\n return 'type' in value ? (value.type as string) : ''\n}\n","import { objectKeys } from '@scalar/helpers/object/object-keys'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isArraySchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\n\n/**\n * Merges multiple OpenAPI schema objects into a single schema object.\n * Handles nested allOf compositions and merges properties recursively.\n *\n * @param schemas - Array of OpenAPI schema objects to merge\n * @param rootSchema - Optional root schema to merge with the result\n * @returns Merged schema object\n */\nexport const mergeAllOfSchemas = (schemas: SchemaObject | undefined, rootSchema?: SchemaObject): SchemaObject => {\n // Handle max depth, empty or invalid input\n if (!schemas?.allOf?.length || !Array.isArray(schemas.allOf)) {\n return rootSchema || ({} as SchemaObject)\n }\n\n // Initialize result object once\n const result = {} as SchemaObject\n\n // Extract base schema properties (everything except allOf)\n const { allOf: _, ...baseSchema } = schemas\n\n // Process allOf schemas first\n for (const _schema of schemas.allOf) {\n if (!_schema || typeof _schema !== 'object') {\n continue\n }\n\n // Resolve ref if present\n const schema = resolve.schema(_schema)\n\n // Handle nested allOf recursively\n if (schema.allOf) {\n const nestedMerged = mergeAllOfSchemas(schema)\n mergeSchemaIntoResult(result, nestedMerged)\n continue\n }\n\n mergeSchemaIntoResult(result, schema)\n }\n\n // Apply base schema properties with precedence over allOf properties\n if (Object.keys(baseSchema).length > 0) {\n mergeSchemaIntoResult(result, baseSchema, true)\n }\n\n // Process root schema last if provided\n if (rootSchema && typeof rootSchema === 'object') {\n if (rootSchema.allOf) {\n const nestedMerged = mergeAllOfSchemas(rootSchema)\n mergeSchemaIntoResult(result, nestedMerged, true)\n } else {\n mergeSchemaIntoResult(result, rootSchema, true)\n }\n }\n\n return result\n}\n\n/**\n * Efficiently merges a source schema into a target result object.\n * Handles all schema merging logic in a single optimized function.\n *\n * @param result - The target schema object to merge into\n * @param schema - The source schema object to merge from\n * @param override - Whether to override existing properties (default: false)\n */\nconst mergeSchemaIntoResult = (result: SchemaObject, schema: SchemaObject, override: boolean = false): void => {\n // Early return if schema is empty\n const schemaKeys = objectKeys(schema)\n if (schemaKeys.length === 0) {\n return\n }\n\n // Loop through all schema properties and handle them appropriately\n for (const key of schemaKeys) {\n const value = getResolvedRef(schema[key]) as any\n\n if (value === undefined) {\n continue\n }\n\n // Required\n if ((key as string) === 'required') {\n // Merge required fields with deduplication\n if (Array.isArray(value) && value.length > 0) {\n // @ts-expect-error\n if (result.required?.length) {\n // @ts-expect-error\n result.required = [...new Set([...result.required, ...value])]\n } else {\n // @ts-expect-error\n result.required = value.slice()\n }\n }\n }\n // Properties\n else if ((key as string) === 'properties') {\n // Merge properties recursively\n if (value && typeof value === 'object') {\n // @ts-expect-error\n if (!result.properties) {\n // @ts-expect-error\n result.properties = {}\n }\n\n // @ts-expect-error\n mergePropertiesIntoResult(result.properties, value)\n }\n }\n // Items\n else if ((key as string) === 'items') {\n // Handle items (for both arrays and objects with items)\n const items = resolve.schema(value)\n if (items) {\n if (isArraySchema(schema)) {\n // @ts-expect-error\n if (!result.items) {\n // @ts-expect-error\n result.items = {}\n }\n\n // Handle allOf within array items\n if (items.allOf) {\n const mergedItems = mergeAllOfSchemas(items)\n // @ts-expect-error\n Object.assign(result.items, mergedItems)\n } else {\n // @ts-expect-error\n mergeItemsIntoResult(getResolvedRef(result.items), items)\n }\n }\n // For non-array types with items.allOf, merge into properties\n else if (items.allOf) {\n const mergedItems = mergeAllOfSchemas(items)\n if ('properties' in mergedItems) {\n if (!('properties' in result)) {\n // @ts-expect-error\n result.properties = {}\n }\n\n 'properties' in result && mergePropertiesIntoResult(result.properties, mergedItems.properties)\n }\n }\n // For non-array types without allOf, still set items if not already set\n else if (!('items' in result)) {\n // @ts-expect-error\n result.items = items\n }\n }\n }\n // Enum\n else if (key === 'enum') {\n if (Array.isArray(value) && value.length > 0) {\n result.enum = [...new Set([...(result.enum || []), ...value])]\n }\n }\n // OneOf/AnyOf\n else if (key === 'oneOf' || key === 'anyOf') {\n // Merge oneOf/anyOf subschema\n if (Array.isArray(value)) {\n if (!('properties' in result)) {\n // @ts-expect-error\n result.properties = {}\n }\n for (const _option of value) {\n const option = resolve.schema(_option)\n if (option && 'properties' in option && 'properties' in result) {\n mergePropertiesIntoResult(result.properties, option.properties)\n }\n }\n }\n }\n // Skip allOf as it's handled at a higher level\n else if (key === 'allOf') {\n continue\n }\n // For all other properties, preserve the first occurrence or override if specified\n else {\n if (override || result[key] === undefined) {\n result[key] = value\n }\n }\n }\n}\n\n/**\n * Efficiently merges properties into a result object without creating new objects.\n */\nconst mergePropertiesIntoResult = (\n result: Extract<SchemaObject, { type: 'object' }>['properties'],\n properties: Extract<SchemaObject, { type: 'object' }>['properties'],\n): void => {\n const propertyKeys = Object.keys(properties ?? {})\n if (!properties || !result || propertyKeys.length === 0) {\n return\n }\n\n for (const key of propertyKeys) {\n const schema = resolve.schema(properties[key])\n if (!schema) {\n delete result[key]\n continue\n }\n\n if (typeof schema !== 'object') {\n result[key] = schema\n continue\n }\n\n if (!result[key]) {\n // Handle new property with allOf\n if (schema.allOf) {\n result[key] = mergeAllOfSchemas(schema)\n } else if (isArraySchema(schema) && resolve.schema(schema.items)?.allOf) {\n result[key] = {\n ...schema,\n items: mergeAllOfSchemas(resolve.schema(schema.items)),\n }\n } else if (properties[key]) {\n result[key] = properties[key]\n }\n continue\n }\n\n // Merge existing property\n const existing = resolve.schema(result[key])\n\n if (schema.allOf) {\n result[key] = mergeAllOfSchemas({ allOf: [existing, ...schema.allOf] } as SchemaObject)\n } else if (isArraySchema(schema) && isArraySchema(existing) && schema.items) {\n const existingItems = resolve.schema(existing.items)\n result[key] = {\n ...existing,\n type: 'array',\n items: existingItems ? mergeItems(existingItems, resolve.schema(schema.items)) : resolve.schema(schema.items),\n }\n } else {\n // Create merged object with properties handled separately\n if ('properties' in existing && 'properties' in schema) {\n const merged = { ...existing, ...schema }\n merged.properties = { ...existing.properties }\n mergePropertiesIntoResult(merged.properties, schema.properties)\n result[key] = merged\n }\n // Simple merge without property recursion\n else {\n result[key] = { ...schema, ...existing }\n }\n }\n }\n}\n\n/**\n * Efficiently merges array items into a result object.\n */\nconst mergeItemsIntoResult = (result: SchemaObject, items: SchemaObject): void => {\n // Handle allOf in items\n if (items.allOf || result.allOf) {\n // Build array without spreads for better performance\n const allOfSchemas: SchemaObject[] = []\n\n if (result.allOf) {\n for (const schema of result.allOf) {\n allOfSchemas.push(resolve.schema(schema))\n }\n } else {\n allOfSchemas.push(result)\n }\n\n if (items.allOf) {\n for (const schema of items.allOf) {\n allOfSchemas.push(resolve.schema(schema))\n }\n } else {\n allOfSchemas.push(items)\n }\n\n const merged = mergeAllOfSchemas({ allOf: allOfSchemas } as SchemaObject)\n Object.assign(result, merged)\n return\n }\n\n // Regular merge\n Object.assign(result, items)\n\n // Merge properties if both have them\n if ('properties' in result && 'properties' in items) {\n mergePropertiesIntoResult(result.properties, items.properties)\n }\n}\n\n/**\n * Helper function for merging items that returns a new object.\n */\nconst mergeItems = (existing: SchemaObject, incoming: SchemaObject): SchemaObject => {\n // Handle allOf in either schema\n if (existing.allOf || incoming.allOf) {\n // Build array without spreads for better performance\n const allOfSchemas: SchemaObject[] = []\n\n if (existing.allOf) {\n for (const schema of existing.allOf) {\n allOfSchemas.push(resolve.schema(schema))\n }\n } else {\n allOfSchemas.push(existing)\n }\n\n if (incoming.allOf) {\n for (const schema of incoming.allOf) {\n allOfSchemas.push(resolve.schema(schema))\n }\n } else {\n allOfSchemas.push(incoming)\n }\n\n return mergeAllOfSchemas({ allOf: allOfSchemas } as SchemaObject)\n }\n\n const merged = { ...existing, ...incoming }\n\n // Recursively merge properties if both have properties\n if ('properties' in existing && 'properties' in incoming) {\n // @ts-expect-error\n merged.properties = { ...existing.properties }\n // @ts-expect-error\n mergePropertiesIntoResult(merged.properties, incoming.properties)\n }\n\n return merged as SchemaObject\n}\n","import { REGEX } from '@scalar/helpers/regex/regex-helpers'\n\n/**\n * Gets the \"name\" of the schema from the ref path\n * TODO: this will change so fix it when the new refs are out\n * Then add tests\n *\n * @example SchemaName from #/components/schemas/SchemaName\n */\nexport const getRefName = (ref: string) => {\n if (!ref) {\n return null\n }\n\n const match = ref.match(REGEX.REF_NAME)\n if (match) {\n return match[1]\n }\n\n return null\n}\n","import { resolve } from '@scalar/workspace-store/resolve'\nimport type { SchemaObject, SchemaReferenceType } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nimport { getRefName } from './get-ref-name'\n\n/**\n * Extract schema name from various schema formats\n *\n * Handles $ref, title, name, type, and schema dictionary lookup\n */\nexport const getModelNameFromSchema = (\n schemaOrRef: SchemaObject | SchemaReferenceType<SchemaObject>,\n): string | null => {\n if (!schemaOrRef) {\n return null\n }\n\n const schema = resolve.schema(schemaOrRef)\n\n // Direct title/name properties - use direct property access for better performance\n if (schema.title) {\n return schema.title\n }\n\n if (schema.name) {\n return schema.name\n }\n\n if ('$ref' in schemaOrRef) {\n // Fall back to the schema key when the referenced schema has no human-friendly name.\n const refName = getRefName(schemaOrRef.$ref)\n if (refName) {\n return refName\n }\n }\n\n return null\n}\n","<script lang=\"ts\" setup>\nimport { ScalarListbox, type ScalarListboxOption } from '@scalar/components'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport { ScalarIconCaretDown } from '@scalar/icons'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type {\n DiscriminatorObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, ref } from 'vue'\n\nimport type { SchemaOptions } from '@/components/Content/Schema/types'\n\nimport { getSchemaType } from './helpers/get-schema-type'\nimport { mergeAllOfSchemas } from './helpers/merge-all-of-schemas'\nimport { type CompositionKeyword } from './helpers/schema-composition'\nimport { getModelNameFromSchema } from './helpers/schema-name'\nimport Schema from './Schema.vue'\n\nconst props = withDefaults(\n defineProps<{\n /** The composition keyword (oneOf, anyOf, allOf) */\n composition: CompositionKeyword\n /** Optional discriminator object for polymorphic schemas */\n discriminator?: DiscriminatorObject\n /** Optional name for the schema */\n name?: string\n /** The schema value containing the composition */\n schema: SchemaObject\n /** Nesting level for proper indentation */\n level: number\n /** Whether to use compact layout */\n compact?: boolean\n /** Whether to hide the heading */\n hideHeading?: boolean\n /** Breadcrumb for navigation */\n breadcrumb?: string[]\n /** Event bus emitting actions */\n eventBus: WorkspaceEventBus | null\n /** Move the options into single prop so they are easy to pass around */\n options: SchemaOptions\n }>(),\n {\n compact: false,\n hideHeading: false,\n },\n)\n\n/** The current composition */\nconst composition = computed(() =>\n [props.schema[props.composition]]\n .flat()\n .map((schema) => ({ value: resolve.schema(schema), original: schema }))\n .filter((it) => isDefined(it.value)),\n)\n\n/**\n * Generate listbox options for the composition selector.\n * Each option represents a schema in the composition with a human-readable label.\n * Prefers schema title/name over structural type when present.\n */\nconst listboxOptions = computed((): ScalarListboxOption[] =>\n composition.value.map((schema, index: number) => {\n const resolved = resolve.schema(schema.original!)\n const label =\n (getModelNameFromSchema(resolved) ?? getSchemaType(resolved)) || 'Schema'\n return { id: String(index), label }\n }),\n)\n\n/**\n * Two-way computed property for the selected option.\n * Handles conversion between the selected index and the listbox option format.\n */\nconst selectedOption = ref<ScalarListboxOption | undefined>(\n listboxOptions.value[0],\n)\n\n/**\n * Humanize composition keyword name for display.\n * Converts camelCase to Title Case (e.g., oneOf -> One of).\n */\nconst humanizeType = (type: CompositionKeyword): string =>\n type\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (str) => str.toUpperCase())\n .toLowerCase()\n .replace(/^(\\w)/, (c) => c.toUpperCase())\n\n/** Inside the currently selected composition */\nconst selectedComposition = computed(\n () => composition.value[Number(selectedOption.value?.id ?? '0')]?.value,\n)\n\n/** Controls whether the nested schema is displayed */\nconst showNestedSchema = ref(false)\n</script>\n\n<template>\n <div class=\"property-rule\">\n <!-- We merge allOf schemas into a single schema -->\n <Schema\n v-if=\"props.composition === 'allOf'\"\n :breadcrumb=\"breadcrumb\"\n :compact=\"compact\"\n :discriminator=\"discriminator\"\n :eventBus=\"eventBus\"\n :hideHeading=\"hideHeading\"\n :level=\"level + 1\"\n :name=\"name\"\n :noncollapsible=\"true\"\n :options=\"options\"\n :schema=\"mergeAllOfSchemas(schema)\" />\n\n <template v-else>\n <!-- Composition selector and panel for nested compositions -->\n <ScalarListbox\n v-model=\"selectedOption\"\n :options=\"listboxOptions\"\n resize>\n <button\n class=\"composition-selector bg-b-1.5 hover:bg-b-2 flex w-full cursor-pointer items-center gap-1 rounded-t-lg border px-2.5 py-2.5 pr-3 text-left\"\n type=\"button\">\n <span class=\"text-c-2\">{{ humanizeType(props.composition) }}</span>\n <span\n class=\"composition-selector-label text-c-1\"\n :class=\"{\n 'line-through': selectedComposition?.deprecated,\n }\">\n {{ selectedOption?.label || 'Schema' }}\n </span>\n <div\n v-if=\"selectedComposition?.deprecated\"\n class=\"text-red\">\n deprecated\n </div>\n <ScalarIconCaretDown />\n </button>\n </ScalarListbox>\n\n <div class=\"composition-panel\">\n <!-- Button to toggle nested schema display -->\n <button\n v-if=\"!showNestedSchema && level > 2\"\n class=\"bg-b-1 hover:bg-b-2 text-c-1 flex w-full items-center justify-center gap-2 rounded-b-lg border border-t-0 px-2 py-2 text-sm font-medium transition-colors\"\n type=\"button\"\n @click=\"showNestedSchema = true\">\n Show Schema Details\n <ScalarIconCaretDown class=\"h-3 w-3\" />\n </button>\n\n <!-- Render the selected schema if it has content to display -->\n <Schema\n v-else\n :breadcrumb=\"breadcrumb\"\n :compact=\"compact\"\n :discriminator=\"discriminator\"\n :eventBus=\"eventBus\"\n :hideHeading=\"hideHeading\"\n :level=\"level + 1\"\n :name=\"name\"\n :noncollapsible=\"true\"\n :options=\"options\"\n :schema=\"selectedComposition\" />\n </div>\n </template>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ScalarListbox, type ScalarListboxOption } from '@scalar/components'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport { ScalarIconCaretDown } from '@scalar/icons'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type {\n DiscriminatorObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, ref } from 'vue'\n\nimport type { SchemaOptions } from '@/components/Content/Schema/types'\n\nimport { getSchemaType } from './helpers/get-schema-type'\nimport { mergeAllOfSchemas } from './helpers/merge-all-of-schemas'\nimport { type CompositionKeyword } from './helpers/schema-composition'\nimport { getModelNameFromSchema } from './helpers/schema-name'\nimport Schema from './Schema.vue'\n\nconst props = withDefaults(\n defineProps<{\n /** The composition keyword (oneOf, anyOf, allOf) */\n composition: CompositionKeyword\n /** Optional discriminator object for polymorphic schemas */\n discriminator?: DiscriminatorObject\n /** Optional name for the schema */\n name?: string\n /** The schema value containing the composition */\n schema: SchemaObject\n /** Nesting level for proper indentation */\n level: number\n /** Whether to use compact layout */\n compact?: boolean\n /** Whether to hide the heading */\n hideHeading?: boolean\n /** Breadcrumb for navigation */\n breadcrumb?: string[]\n /** Event bus emitting actions */\n eventBus: WorkspaceEventBus | null\n /** Move the options into single prop so they are easy to pass around */\n options: SchemaOptions\n }>(),\n {\n compact: false,\n hideHeading: false,\n },\n)\n\n/** The current composition */\nconst composition = computed(() =>\n [props.schema[props.composition]]\n .flat()\n .map((schema) => ({ value: resolve.schema(schema), original: schema }))\n .filter((it) => isDefined(it.value)),\n)\n\n/**\n * Generate listbox options for the composition selector.\n * Each option represents a schema in the composition with a human-readable label.\n * Prefers schema title/name over structural type when present.\n */\nconst listboxOptions = computed((): ScalarListboxOption[] =>\n composition.value.map((schema, index: number) => {\n const resolved = resolve.schema(schema.original!)\n const label =\n (getModelNameFromSchema(resolved) ?? getSchemaType(resolved)) || 'Schema'\n return { id: String(index), label }\n }),\n)\n\n/**\n * Two-way computed property for the selected option.\n * Handles conversion between the selected index and the listbox option format.\n */\nconst selectedOption = ref<ScalarListboxOption | undefined>(\n listboxOptions.value[0],\n)\n\n/**\n * Humanize composition keyword name for display.\n * Converts camelCase to Title Case (e.g., oneOf -> One of).\n */\nconst humanizeType = (type: CompositionKeyword): string =>\n type\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (str) => str.toUpperCase())\n .toLowerCase()\n .replace(/^(\\w)/, (c) => c.toUpperCase())\n\n/** Inside the currently selected composition */\nconst selectedComposition = computed(\n () => composition.value[Number(selectedOption.value?.id ?? '0')]?.value,\n)\n\n/** Controls whether the nested schema is displayed */\nconst showNestedSchema = ref(false)\n</script>\n\n<template>\n <div class=\"property-rule\">\n <!-- We merge allOf schemas into a single schema -->\n <Schema\n v-if=\"props.composition === 'allOf'\"\n :breadcrumb=\"breadcrumb\"\n :compact=\"compact\"\n :discriminator=\"discriminator\"\n :eventBus=\"eventBus\"\n :hideHeading=\"hideHeading\"\n :level=\"level + 1\"\n :name=\"name\"\n :noncollapsible=\"true\"\n :options=\"options\"\n :schema=\"mergeAllOfSchemas(schema)\" />\n\n <template v-else>\n <!-- Composition selector and panel for nested compositions -->\n <ScalarListbox\n v-model=\"selectedOption\"\n :options=\"listboxOptions\"\n resize>\n <button\n class=\"composition-selector bg-b-1.5 hover:bg-b-2 flex w-full cursor-pointer items-center gap-1 rounded-t-lg border px-2.5 py-2.5 pr-3 text-left\"\n type=\"button\">\n <span class=\"text-c-2\">{{ humanizeType(props.composition) }}</span>\n <span\n class=\"composition-selector-label text-c-1\"\n :class=\"{\n 'line-through': selectedComposition?.deprecated,\n }\">\n {{ selectedOption?.label || 'Schema' }}\n </span>\n <div\n v-if=\"selectedComposition?.deprecated\"\n class=\"text-red\">\n deprecated\n </div>\n <ScalarIconCaretDown />\n </button>\n </ScalarListbox>\n\n <div class=\"composition-panel\">\n <!-- Button to toggle nested schema display -->\n <button\n v-if=\"!showNestedSchema && level > 2\"\n class=\"bg-b-1 hover:bg-b-2 text-c-1 flex w-full items-center justify-center gap-2 rounded-b-lg border border-t-0 px-2 py-2 text-sm font-medium transition-colors\"\n type=\"button\"\n @click=\"showNestedSchema = true\">\n Show Schema Details\n <ScalarIconCaretDown class=\"h-3 w-3\" />\n </button>\n\n <!-- Render the selected schema if it has content to display -->\n <Schema\n v-else\n :breadcrumb=\"breadcrumb\"\n :compact=\"compact\"\n :discriminator=\"discriminator\"\n :eventBus=\"eventBus\"\n :hideHeading=\"hideHeading\"\n :level=\"level + 1\"\n :name=\"name\"\n :noncollapsible=\"true\"\n :options=\"options\"\n :schema=\"selectedComposition\" />\n </div>\n </template>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { ScalarMarkdown, ScalarWrappingText } from '@scalar/components'\n\ndefineProps<{\n label: string\n description?: string\n}>()\n</script>\n\n<template>\n <li class=\"property-enum-value\">\n <div class=\"property-enum-value-content\">\n <span class=\"property-enum-value-label\">\n <ScalarWrappingText\n :text=\"label\"\n preset=\"property\" />\n </span>\n <span\n v-if=\"description\"\n class=\"property-enum-value-description\">\n <ScalarMarkdown :value=\"description\" />\n </span>\n </div>\n </li>\n</template>\n\n<style scoped>\n.property-enum-value {\n color: var(--scalar-color-3);\n line-height: 1.5;\n overflow-wrap: break-word;\n display: flex;\n align-items: stretch;\n position: relative;\n\n --decorator-width: 1px;\n --decorator-color: color-mix(\n in srgb,\n var(--scalar-background-1),\n var(--scalar-color-1) 25%\n );\n}\n\n.property-enum-value-content {\n display: flex;\n flex-direction: column;\n padding: 3px 0;\n}\n\n.property-enum-value-label {\n font-family: var(--scalar-font-code);\n color: var(--scalar-color-1);\n font-size: var(--scalar-font-size-4);\n position: relative;\n}\n\n.property-enum-value:last-of-type .property-enum-value-label {\n padding-bottom: 0;\n}\n\n.property-enum-value::before {\n content: '';\n margin-right: 12px;\n width: var(--decorator-width);\n display: block;\n background-color: var(--decorator-color);\n}\n\n.property-enum-value:last-of-type::before,\n.property-enum-values:has(.enum-toggle-button)\n .property-enum-value:nth-last-child(2)::before {\n height: calc(0.5lh + 4px);\n}\n\n.property-enum-value-label::after {\n content: '';\n position: absolute;\n top: calc(0.5lh);\n left: -12px;\n width: 8px;\n height: var(--decorator-width);\n background-color: var(--decorator-color);\n}\n\n.property-enum-value:last-of-type::after {\n bottom: 0;\n height: 50%;\n background: var(--scalar-background-1);\n border-top: var(--scalar-border-width) solid var(--decorator-color);\n}\n\n.property-enum-value-description {\n color: var(--scalar-color-3);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { ScalarMarkdown, ScalarWrappingText } from '@scalar/components'\n\ndefineProps<{\n label: string\n description?: string\n}>()\n</script>\n\n<template>\n <li class=\"property-enum-value\">\n <div class=\"property-enum-value-content\">\n <span class=\"property-enum-value-label\">\n <ScalarWrappingText\n :text=\"label\"\n preset=\"property\" />\n </span>\n <span\n v-if=\"description\"\n class=\"property-enum-value-description\">\n <ScalarMarkdown :value=\"description\" />\n </span>\n </div>\n </li>\n</template>\n\n<style scoped>\n.property-enum-value {\n color: var(--scalar-color-3);\n line-height: 1.5;\n overflow-wrap: break-word;\n display: flex;\n align-items: stretch;\n position: relative;\n\n --decorator-width: 1px;\n --decorator-color: color-mix(\n in srgb,\n var(--scalar-background-1),\n var(--scalar-color-1) 25%\n );\n}\n\n.property-enum-value-content {\n display: flex;\n flex-direction: column;\n padding: 3px 0;\n}\n\n.property-enum-value-label {\n font-family: var(--scalar-font-code);\n color: var(--scalar-color-1);\n font-size: var(--scalar-font-size-4);\n position: relative;\n}\n\n.property-enum-value:last-of-type .property-enum-value-label {\n padding-bottom: 0;\n}\n\n.property-enum-value::before {\n content: '';\n margin-right: 12px;\n width: var(--decorator-width);\n display: block;\n background-color: var(--decorator-color);\n}\n\n.property-enum-value:last-of-type::before,\n.property-enum-values:has(.enum-toggle-button)\n .property-enum-value:nth-last-child(2)::before {\n height: calc(0.5lh + 4px);\n}\n\n.property-enum-value-label::after {\n content: '';\n position: absolute;\n top: calc(0.5lh);\n left: -12px;\n width: 8px;\n height: var(--decorator-width);\n background-color: var(--decorator-color);\n}\n\n.property-enum-value:last-of-type::after {\n bottom: 0;\n height: 50%;\n background: var(--scalar-background-1);\n border-top: var(--scalar-border-width) solid var(--decorator-color);\n}\n\n.property-enum-value-description {\n color: var(--scalar-color-3);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components'\nimport { ScalarIconPlus } from '@scalar/icons'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isArraySchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\nimport { computed, ref } from 'vue'\n\nimport SchemaEnumPropertyItem from './SchemaEnumPropertyItem.vue'\n\nconst { value } = defineProps<{\n /** The schema object containing enum values and metadata */\n value: SchemaObject | undefined\n /** Whether to display the enum for property names */\n propertyNames?: boolean\n}>()\n\nconst ENUM_DISPLAY_THRESHOLD = 9\nconst INITIAL_VISIBLE_COUNT = 5\nconst THIN_SPACE = '\\u2009'\n\n/**\n * Extracts enum values from the schema object.\n * Handles both direct enum values and nested enum arrays.\n */\nconst enumValues = computed(() => {\n if (!value) {\n return []\n }\n return (\n value.enum ||\n (isArraySchema(value) && resolve.schema(value.items)?.enum) ||\n []\n )\n})\n\n/**\n * Determines if we should show the long enum list UI.\n * When there are many enum values, we initially show only a subset.\n */\nconst shouldUseLongListDisplay = computed(\n () => enumValues.value.length > ENUM_DISPLAY_THRESHOLD,\n)\n\nconst initialVisibleCount = computed(() =>\n shouldUseLongListDisplay.value\n ? INITIAL_VISIBLE_COUNT\n : enumValues.value.length,\n)\n\nconst visibleEnumValues = computed(() =>\n enumValues.value.slice(0, initialVisibleCount.value),\n)\n\nconst hiddenEnumValues = computed(() =>\n enumValues.value.slice(initialVisibleCount.value),\n)\n\n/**\n * Gets the description for an enum value.\n * Supports both array and object formats for x-enumDescriptions.\n */\nconst getEnumValueDescription = (\n enumValue: any,\n index: number,\n): string | undefined => {\n const descriptions =\n value?.['x-enumDescriptions'] ?? value?.['x-enum-descriptions']\n\n if (!descriptions) {\n return undefined\n }\n\n if (Array.isArray(descriptions)) {\n return descriptions[index]\n }\n\n if (typeof descriptions === 'object' && descriptions !== null) {\n return (descriptions as Record<string, string>)[String(enumValue)]\n }\n\n return undefined\n}\n\n/**\n * Formats an enum value with its variable name if available.\n * This supports both x-enum-varnames and x-enumNames extensions.\n */\nconst formatEnumValueWithName = (enumValue: any, index: number): string => {\n const varNames = value?.['x-enum-varnames'] ?? value?.['x-enumNames']\n const varName = Array.isArray(varNames) ? varNames[index] : undefined\n return varName\n ? `${enumValue}${THIN_SPACE}=${THIN_SPACE}${varName}`\n : String(enumValue)\n}\n\n/**\n * Controls whether the hidden enum values are visible.\n */\nconst isExpanded = ref(false)\n\nconst toggleExpanded = () => {\n isExpanded.value = !isExpanded.value\n}\n</script>\n\n<template>\n <div\n v-if=\"enumValues.length > 0\"\n class=\"property-enum\">\n <div\n v-if=\"propertyNames\"\n class=\"property-enum-property-names\">\n property names\n </div>\n <div\n v-else\n class=\"property-enum-property-names\">\n values\n </div>\n <ul class=\"property-enum-values\">\n <!-- Visible enum values -->\n <SchemaEnumPropertyItem\n v-for=\"(enumValue, index) in visibleEnumValues\"\n :key=\"String(enumValue)\"\n :description=\"getEnumValueDescription(enumValue, index)\"\n :label=\"formatEnumValueWithName(enumValue, index)\" />\n\n <!-- Hidden enum values (when expanded) -->\n <template v-if=\"shouldUseLongListDisplay && isExpanded\">\n <SchemaEnumPropertyItem\n v-for=\"(enumValue, index) in hiddenEnumValues\"\n :key=\"String(enumValue)\"\n :description=\"\n getEnumValueDescription(enumValue, initialVisibleCount + index)\n \"\n :label=\"\n formatEnumValueWithName(enumValue, initialVisibleCount + index)\n \" />\n </template>\n\n <!-- Toggle button for long lists -->\n <li v-if=\"shouldUseLongListDisplay\">\n <ScalarButton\n class=\"enum-toggle-button my-2 flex h-fit gap-1 rounded-full border py-1.5 pr-2.5 pl-2 leading-none\"\n variant=\"ghost\"\n @click=\"toggleExpanded\">\n <ScalarIconPlus\n :class=\"{ 'rotate-45': isExpanded }\"\n weight=\"bold\" />\n {{ isExpanded ? 'Hide values' : 'Show all values' }}\n </ScalarButton>\n </li>\n </ul>\n </div>\n</template>\n\n<style scoped>\n.property-heading:empty + .property-description:last-of-type,\n.property-description:first-of-type:last-of-type {\n margin-top: 0;\n}\n\n.property-list {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius);\n margin-top: 10px;\n}\n\n.property-list .property:last-of-type {\n padding-bottom: 10px;\n}\n\n.property-enum-values {\n font-size: var(--scalar-font-size-3);\n list-style: none;\n margin-top: 8px;\n padding-left: 2px;\n}\n\n.enum-toggle-button:hover {\n color: var(--scalar-color-1);\n}\n\n.property-enum-property-names {\n font-size: var(--scalar-font-size-4);\n color: var(--scalar-color-2);\n display: inline-block;\n padding: 0 2px;\n margin-top: 8px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components'\nimport { ScalarIconPlus } from '@scalar/icons'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isArraySchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\nimport { computed, ref } from 'vue'\n\nimport SchemaEnumPropertyItem from './SchemaEnumPropertyItem.vue'\n\nconst { value } = defineProps<{\n /** The schema object containing enum values and metadata */\n value: SchemaObject | undefined\n /** Whether to display the enum for property names */\n propertyNames?: boolean\n}>()\n\nconst ENUM_DISPLAY_THRESHOLD = 9\nconst INITIAL_VISIBLE_COUNT = 5\nconst THIN_SPACE = '\\u2009'\n\n/**\n * Extracts enum values from the schema object.\n * Handles both direct enum values and nested enum arrays.\n */\nconst enumValues = computed(() => {\n if (!value) {\n return []\n }\n return (\n value.enum ||\n (isArraySchema(value) && resolve.schema(value.items)?.enum) ||\n []\n )\n})\n\n/**\n * Determines if we should show the long enum list UI.\n * When there are many enum values, we initially show only a subset.\n */\nconst shouldUseLongListDisplay = computed(\n () => enumValues.value.length > ENUM_DISPLAY_THRESHOLD,\n)\n\nconst initialVisibleCount = computed(() =>\n shouldUseLongListDisplay.value\n ? INITIAL_VISIBLE_COUNT\n : enumValues.value.length,\n)\n\nconst visibleEnumValues = computed(() =>\n enumValues.value.slice(0, initialVisibleCount.value),\n)\n\nconst hiddenEnumValues = computed(() =>\n enumValues.value.slice(initialVisibleCount.value),\n)\n\n/**\n * Gets the description for an enum value.\n * Supports both array and object formats for x-enumDescriptions.\n */\nconst getEnumValueDescription = (\n enumValue: any,\n index: number,\n): string | undefined => {\n const descriptions =\n value?.['x-enumDescriptions'] ?? value?.['x-enum-descriptions']\n\n if (!descriptions) {\n return undefined\n }\n\n if (Array.isArray(descriptions)) {\n return descriptions[index]\n }\n\n if (typeof descriptions === 'object' && descriptions !== null) {\n return (descriptions as Record<string, string>)[String(enumValue)]\n }\n\n return undefined\n}\n\n/**\n * Formats an enum value with its variable name if available.\n * This supports both x-enum-varnames and x-enumNames extensions.\n */\nconst formatEnumValueWithName = (enumValue: any, index: number): string => {\n const varNames = value?.['x-enum-varnames'] ?? value?.['x-enumNames']\n const varName = Array.isArray(varNames) ? varNames[index] : undefined\n return varName\n ? `${enumValue}${THIN_SPACE}=${THIN_SPACE}${varName}`\n : String(enumValue)\n}\n\n/**\n * Controls whether the hidden enum values are visible.\n */\nconst isExpanded = ref(false)\n\nconst toggleExpanded = () => {\n isExpanded.value = !isExpanded.value\n}\n</script>\n\n<template>\n <div\n v-if=\"enumValues.length > 0\"\n class=\"property-enum\">\n <div\n v-if=\"propertyNames\"\n class=\"property-enum-property-names\">\n property names\n </div>\n <div\n v-else\n class=\"property-enum-property-names\">\n values\n </div>\n <ul class=\"property-enum-values\">\n <!-- Visible enum values -->\n <SchemaEnumPropertyItem\n v-for=\"(enumValue, index) in visibleEnumValues\"\n :key=\"String(enumValue)\"\n :description=\"getEnumValueDescription(enumValue, index)\"\n :label=\"formatEnumValueWithName(enumValue, index)\" />\n\n <!-- Hidden enum values (when expanded) -->\n <template v-if=\"shouldUseLongListDisplay && isExpanded\">\n <SchemaEnumPropertyItem\n v-for=\"(enumValue, index) in hiddenEnumValues\"\n :key=\"String(enumValue)\"\n :description=\"\n getEnumValueDescription(enumValue, initialVisibleCount + index)\n \"\n :label=\"\n formatEnumValueWithName(enumValue, initialVisibleCount + index)\n \" />\n </template>\n\n <!-- Toggle button for long lists -->\n <li v-if=\"shouldUseLongListDisplay\">\n <ScalarButton\n class=\"enum-toggle-button my-2 flex h-fit gap-1 rounded-full border py-1.5 pr-2.5 pl-2 leading-none\"\n variant=\"ghost\"\n @click=\"toggleExpanded\">\n <ScalarIconPlus\n :class=\"{ 'rotate-45': isExpanded }\"\n weight=\"bold\" />\n {{ isExpanded ? 'Hide values' : 'Show all values' }}\n </ScalarButton>\n </li>\n </ul>\n </div>\n</template>\n\n<style scoped>\n.property-heading:empty + .property-description:last-of-type,\n.property-description:first-of-type:last-of-type {\n margin-top: 0;\n}\n\n.property-list {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius);\n margin-top: 10px;\n}\n\n.property-list .property:last-of-type {\n padding-bottom: 10px;\n}\n\n.property-enum-values {\n font-size: var(--scalar-font-size-3);\n list-style: none;\n margin-top: 8px;\n padding-left: 2px;\n}\n\n.enum-toggle-button:hover {\n color: var(--scalar-color-1);\n}\n\n.property-enum-property-names {\n font-size: var(--scalar-font-size-4);\n color: var(--scalar-color-2);\n display: inline-block;\n padding: 0 2px;\n margin-top: 8px;\n}\n</style>\n","<script setup lang=\"ts\">\n/**\n * Give this component any data, and it tries to render a meaningful string.\n *\n * @example\n * <RenderString :value=\"1\" /> => \"1\"\n * <RenderString :value=\"true\" /> => \"true\"\n * <RenderString :value=\"false\" /> => \"false\"\n * <RenderString :value=\"null\" /> => \"null\"\n * <RenderString :value=\"undefined\" /> => \"undefined\"\n * <RenderString :value=\"{}\" /> => \"{}\"\n * <RenderString :value=\"[]\" /> => \"[]\"\n * <RenderString :value=\"['a', 'b', 'c']\" /> => \"['a', 'b', 'c']\"\n * <RenderString :value=\"() => 'hello'\" /> => \"() => 'hello'\"\n * <RenderString :value=\"Symbol('test')\" /> => \"Symbol(test)\"\n **/\nimport { computed } from 'vue'\n\nconst { value } = defineProps<{\n value: any\n}>()\n\nconst valueAsString = computed(() => {\n if (value === '') {\n return `''`\n }\n\n if (value === null) {\n return 'null'\n }\n\n if (value === undefined) {\n return 'undefined'\n }\n\n // We don't need to cover all cases, Vue does a good job of rendering objects, arrays and functions.\n return value\n})\n</script>\n\n<template>\n {{ valueAsString }}\n</template>\n","<script setup lang=\"ts\">\n/**\n * Give this component any data, and it tries to render a meaningful string.\n *\n * @example\n * <RenderString :value=\"1\" /> => \"1\"\n * <RenderString :value=\"true\" /> => \"true\"\n * <RenderString :value=\"false\" /> => \"false\"\n * <RenderString :value=\"null\" /> => \"null\"\n * <RenderString :value=\"undefined\" /> => \"undefined\"\n * <RenderString :value=\"{}\" /> => \"{}\"\n * <RenderString :value=\"[]\" /> => \"[]\"\n * <RenderString :value=\"['a', 'b', 'c']\" /> => \"['a', 'b', 'c']\"\n * <RenderString :value=\"() => 'hello'\" /> => \"() => 'hello'\"\n * <RenderString :value=\"Symbol('test')\" /> => \"Symbol(test)\"\n **/\nimport { computed } from 'vue'\n\nconst { value } = defineProps<{\n value: any\n}>()\n\nconst valueAsString = computed(() => {\n if (value === '') {\n return `''`\n }\n\n if (value === null) {\n return 'null'\n }\n\n if (value === undefined) {\n return 'undefined'\n }\n\n // We don't need to cover all cases, Vue does a good job of rendering objects, arrays and functions.\n return value\n})\n</script>\n\n<template>\n {{ valueAsString }}\n</template>\n","/**\n * Converts a value to a string that can be displayed in the UI.\n */\nexport function formatValue(value: unknown): string | number {\n if (Array.isArray(value)) {\n return `[${value\n .map((item) => {\n if (typeof item === 'string') {\n return `\"${item.toString().trim()}\"`\n }\n\n if (typeof item === 'object') {\n return JSON.stringify(item)\n }\n\n if (item === undefined) {\n return 'undefined'\n }\n\n if (item === null) {\n return 'null'\n }\n\n return item\n })\n .join(', ')}]`\n }\n\n if (value === null) {\n return 'null'\n }\n\n if (typeof value === 'object') {\n return JSON.stringify(value)\n }\n\n if (value === undefined) {\n return 'undefined'\n }\n\n if (typeof value === 'string') {\n return value.trim()\n }\n\n return value.toString().trim()\n}\n","<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\n\nimport { formatValue } from './helpers/format-value'\n\ndefineProps<{\n value?: unknown\n}>()\n\nconst { copyToClipboard } = useClipboard()\n</script>\n<template>\n <template v-if=\"value !== undefined\">\n <div class=\"property-default\">\n <button\n class=\"property-default-label\"\n type=\"button\">\n <span>Default</span>\n </button>\n <div class=\"property-default-value-list\">\n <button\n class=\"property-default-value group\"\n type=\"button\"\n @click=\"copyToClipboard(formatValue(value))\">\n <span>\n {{ formatValue(value) }}\n </span>\n <ScalarIcon\n class=\"group-hover:text-c-1 text-c-3 ml-auto min-h-3 min-w-3\"\n icon=\"Clipboard\"\n size=\"xs\" />\n </button>\n </div>\n </div>\n </template>\n</template>\n\n<style scoped>\n.property-default {\n display: flex;\n flex-direction: column;\n font-size: var(--scalar-mini);\n position: relative;\n}\n.property-default:hover:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 20px;\n border-radius: var(--scalar-radius);\n}\n.property-default:hover .property-default-label span {\n color: var(--scalar-color-1);\n}\n.property-default-label span {\n color: var(--scalar-color-3);\n position: relative;\n border-bottom: var(--scalar-border-width) dotted currentColor;\n}\n.property-default-value {\n font-family: var(--scalar-font-code);\n display: flex;\n gap: 8px;\n align-items: center;\n width: 100%;\n padding: 6px;\n}\n.property-default-value span {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.property-default-value :deep(svg) {\n color: var(--scalar-color-3);\n}\n\n.property-default-value:hover :deep(svg) {\n color: var(--scalar-color-1);\n}\n\n.property-default-value {\n background: var(--scalar-background-2);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius);\n}\n.property-default-value-list {\n position: absolute;\n top: 18px;\n left: 50%;\n transform: translate3d(-50%, 0, 0);\n overflow: auto;\n background-color: var(--scalar-background-1);\n box-shadow: var(--scalar-shadow-1);\n border-radius: var(--scalar-radius-lg);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n padding: 9px;\n min-width: 200px;\n max-width: 300px;\n flex-direction: column;\n gap: 3px;\n display: none;\n z-index: 2;\n}\n.property-default:hover .property-default-value-list,\n.property-default:focus-within .property-default-value-list {\n display: flex;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\n\nimport { formatValue } from './helpers/format-value'\n\ndefineProps<{\n value?: unknown\n}>()\n\nconst { copyToClipboard } = useClipboard()\n</script>\n<template>\n <template v-if=\"value !== undefined\">\n <div class=\"property-default\">\n <button\n class=\"property-default-label\"\n type=\"button\">\n <span>Default</span>\n </button>\n <div class=\"property-default-value-list\">\n <button\n class=\"property-default-value group\"\n type=\"button\"\n @click=\"copyToClipboard(formatValue(value))\">\n <span>\n {{ formatValue(value) }}\n </span>\n <ScalarIcon\n class=\"group-hover:text-c-1 text-c-3 ml-auto min-h-3 min-w-3\"\n icon=\"Clipboard\"\n size=\"xs\" />\n </button>\n </div>\n </div>\n </template>\n</template>\n\n<style scoped>\n.property-default {\n display: flex;\n flex-direction: column;\n font-size: var(--scalar-mini);\n position: relative;\n}\n.property-default:hover:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 20px;\n border-radius: var(--scalar-radius);\n}\n.property-default:hover .property-default-label span {\n color: var(--scalar-color-1);\n}\n.property-default-label span {\n color: var(--scalar-color-3);\n position: relative;\n border-bottom: var(--scalar-border-width) dotted currentColor;\n}\n.property-default-value {\n font-family: var(--scalar-font-code);\n display: flex;\n gap: 8px;\n align-items: center;\n width: 100%;\n padding: 6px;\n}\n.property-default-value span {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.property-default-value :deep(svg) {\n color: var(--scalar-color-3);\n}\n\n.property-default-value:hover :deep(svg) {\n color: var(--scalar-color-1);\n}\n\n.property-default-value {\n background: var(--scalar-background-2);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius);\n}\n.property-default-value-list {\n position: absolute;\n top: 18px;\n left: 50%;\n transform: translate3d(-50%, 0, 0);\n overflow: auto;\n background-color: var(--scalar-background-1);\n box-shadow: var(--scalar-shadow-1);\n border-radius: var(--scalar-radius-lg);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n padding: 9px;\n min-width: 200px;\n max-width: 300px;\n flex-direction: column;\n gap: 3px;\n display: none;\n z-index: 2;\n}\n.property-default:hover .property-default-value-list,\n.property-default:focus-within .property-default-value-list {\n display: flex;\n}\n</style>\n","<script lang=\"ts\" setup>\ndefineProps<{\n truncate?: boolean\n code?: boolean\n}>()\n</script>\n<template>\n <span\n class=\"property-detail\"\n :class=\"{ 'property-detail-truncate': truncate }\">\n <div\n v-if=\"$slots.prefix\"\n class=\"property-detail-prefix\">\n <slot name=\"prefix\" /> \n </div>\n <code\n v-if=\"code\"\n class=\"property-detail-value\">\n <slot />\n </code>\n <span\n v-else\n class=\"property-detail-value\">\n <slot />\n </span>\n </span>\n</template>\n<style scoped>\n.property-detail {\n display: inline-flex;\n}\n.property-detail + .property-detail:before {\n display: block;\n content: '·';\n margin: 0 0.5ch;\n}\n.property-detail-truncate {\n overflow: hidden;\n}\n\n.property-detail-truncate > .property-detail-value {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.property-detail-prefix {\n color: var(--scalar-color-2);\n}\n\ncode.property-detail-value {\n font-family: var(--scalar-font-code);\n font-size: var(--scalar-font-size-3);\n color: var(--scalar-color-2);\n background: color-mix(\n in srgb,\n var(--scalar-background-2),\n var(--scalar-background-1)\n );\n padding: 0 4px;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius);\n}\n</style>\n","<script lang=\"ts\" setup>\ndefineProps<{\n truncate?: boolean\n code?: boolean\n}>()\n</script>\n<template>\n <span\n class=\"property-detail\"\n :class=\"{ 'property-detail-truncate': truncate }\">\n <div\n v-if=\"$slots.prefix\"\n class=\"property-detail-prefix\">\n <slot name=\"prefix\" /> \n </div>\n <code\n v-if=\"code\"\n class=\"property-detail-value\">\n <slot />\n </code>\n <span\n v-else\n class=\"property-detail-value\">\n <slot />\n </span>\n </span>\n</template>\n<style scoped>\n.property-detail {\n display: inline-flex;\n}\n.property-detail + .property-detail:before {\n display: block;\n content: '·';\n margin: 0 0.5ch;\n}\n.property-detail-truncate {\n overflow: hidden;\n}\n\n.property-detail-truncate > .property-detail-value {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.property-detail-prefix {\n color: var(--scalar-color-2);\n}\n\ncode.property-detail-value {\n font-family: var(--scalar-font-code);\n font-size: var(--scalar-font-size-3);\n color: var(--scalar-color-2);\n background: color-mix(\n in srgb,\n var(--scalar-background-2),\n var(--scalar-background-1)\n );\n padding: 0 4px;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius);\n}\n</style>\n","/**\n * Converts an example value to a string that can be displayed in the UI.\n */\nexport function formatExample(example: unknown): string | number {\n if (Array.isArray(example)) {\n return `[${example\n .map((item) => {\n if (typeof item === 'string') {\n return `\"${item.toString().trim()}\"`\n }\n\n if (typeof item === 'object') {\n return JSON.stringify(item)\n }\n\n if (item === undefined) {\n return 'undefined'\n }\n\n if (item === null) {\n return 'null'\n }\n\n return item\n })\n .join(', ')}]`\n }\n\n if (example === null) {\n return 'null'\n }\n\n if (typeof example === 'object') {\n if ('value' in example) {\n return example.value as string | number\n }\n\n if ('externalValue' in example) {\n return example.externalValue as string | number\n }\n\n return JSON.stringify(example)\n }\n\n if (example === undefined) {\n return 'undefined'\n }\n\n if (typeof example === 'string') {\n return example.trim()\n }\n\n return example.toString().trim()\n}\n","<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { computed } from 'vue'\n\nimport { formatExample } from './helpers/format-example'\n\nconst { examples, example } = defineProps<{\n examples?: unknown\n example?: unknown\n}>()\n\nconst { copyToClipboard } = useClipboard()\n\nconst hasSingleExample = computed(() => isDefined(example))\n\nconst normalizedExamples = computed<Record<string, unknown>>(() => {\n if (examples && typeof examples === 'object') {\n return examples as Record<string, unknown>\n }\n\n return {}\n})\n\nconst hasMultipleExamples = computed(\n () => Object.keys(normalizedExamples.value).length > 0,\n)\n\nconst multipleExamplesLabel = computed(() =>\n Object.keys(normalizedExamples.value).length === 1 ? 'Example' : 'Examples',\n)\n</script>\n<template>\n <!-- single example (deprecated) -->\n <template v-if=\"hasSingleExample\">\n <div class=\"property-example\">\n <button\n class=\"property-example-label\"\n type=\"button\">\n <span>Example</span>\n </button>\n <div class=\"property-example-value-list\">\n <button\n class=\"property-example-value group\"\n type=\"button\"\n @click=\"copyToClipboard(formatExample(example))\">\n <span>\n {{ formatExample(example) }}\n </span>\n <ScalarIcon\n class=\"group-hover:text-c-1 text-c-3 ml-auto min-h-3 min-w-3\"\n icon=\"Clipboard\"\n size=\"xs\" />\n </button>\n </div>\n </div>\n </template>\n\n <!-- multiple examples -->\n <template v-if=\"hasMultipleExamples\">\n <div class=\"property-example\">\n <button\n class=\"property-example-label\"\n type=\"button\">\n <span>\n {{ multipleExamplesLabel }}\n </span>\n </button>\n <div class=\"property-example-value-list\">\n <button\n v-for=\"(ex, key) in normalizedExamples\"\n :key=\"key\"\n class=\"property-example-value group\"\n type=\"button\"\n @click=\"copyToClipboard(formatExample(ex))\">\n <span>{{ formatExample(ex) }} </span>\n <ScalarIcon\n class=\"text-c-3 group-hover:text-c-1 ml-auto min-h-3 min-w-3\"\n icon=\"Clipboard\"\n size=\"xs\" />\n </button>\n </div>\n </div>\n </template>\n</template>\n\n<style scoped>\n.property-example {\n display: flex;\n flex-direction: column;\n font-size: var(--scalar-mini);\n position: relative;\n}\n.property-example:hover:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 20px;\n border-radius: var(--scalar-radius);\n}\n.property-example:hover .property-example-label span {\n color: var(--scalar-color-1);\n}\n.property-example-label span {\n color: var(--scalar-color-3);\n position: relative;\n border-bottom: var(--scalar-border-width) dotted currentColor;\n}\n.property-example-value {\n font-family: var(--scalar-font-code);\n display: flex;\n gap: 8px;\n align-items: center;\n width: 100%;\n padding: 6px;\n}\n.property-example-value span {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.property-example-value :deep(svg) {\n color: var(--scalar-color-3);\n}\n\n.property-example-value:hover :deep(svg) {\n color: var(--scalar-color-1);\n}\n\n.property-example-value {\n background: var(--scalar-background-2);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius);\n}\n.property-example-value-list {\n position: absolute;\n top: 18px;\n left: 50%;\n transform: translate3d(-50%, 0, 0);\n overflow: auto;\n background-color: var(--scalar-background-1);\n box-shadow: var(--scalar-shadow-1);\n border-radius: var(--scalar-radius-lg);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n padding: 9px;\n min-width: 200px;\n max-width: 300px;\n flex-direction: column;\n gap: 3px;\n display: none;\n z-index: 2;\n}\n.property-example:hover .property-example-value-list,\n.property-example:focus-within .property-example-value-list {\n display: flex;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components'\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { computed } from 'vue'\n\nimport { formatExample } from './helpers/format-example'\n\nconst { examples, example } = defineProps<{\n examples?: unknown\n example?: unknown\n}>()\n\nconst { copyToClipboard } = useClipboard()\n\nconst hasSingleExample = computed(() => isDefined(example))\n\nconst normalizedExamples = computed<Record<string, unknown>>(() => {\n if (examples && typeof examples === 'object') {\n return examples as Record<string, unknown>\n }\n\n return {}\n})\n\nconst hasMultipleExamples = computed(\n () => Object.keys(normalizedExamples.value).length > 0,\n)\n\nconst multipleExamplesLabel = computed(() =>\n Object.keys(normalizedExamples.value).length === 1 ? 'Example' : 'Examples',\n)\n</script>\n<template>\n <!-- single example (deprecated) -->\n <template v-if=\"hasSingleExample\">\n <div class=\"property-example\">\n <button\n class=\"property-example-label\"\n type=\"button\">\n <span>Example</span>\n </button>\n <div class=\"property-example-value-list\">\n <button\n class=\"property-example-value group\"\n type=\"button\"\n @click=\"copyToClipboard(formatExample(example))\">\n <span>\n {{ formatExample(example) }}\n </span>\n <ScalarIcon\n class=\"group-hover:text-c-1 text-c-3 ml-auto min-h-3 min-w-3\"\n icon=\"Clipboard\"\n size=\"xs\" />\n </button>\n </div>\n </div>\n </template>\n\n <!-- multiple examples -->\n <template v-if=\"hasMultipleExamples\">\n <div class=\"property-example\">\n <button\n class=\"property-example-label\"\n type=\"button\">\n <span>\n {{ multipleExamplesLabel }}\n </span>\n </button>\n <div class=\"property-example-value-list\">\n <button\n v-for=\"(ex, key) in normalizedExamples\"\n :key=\"key\"\n class=\"property-example-value group\"\n type=\"button\"\n @click=\"copyToClipboard(formatExample(ex))\">\n <span>{{ formatExample(ex) }} </span>\n <ScalarIcon\n class=\"text-c-3 group-hover:text-c-1 ml-auto min-h-3 min-w-3\"\n icon=\"Clipboard\"\n size=\"xs\" />\n </button>\n </div>\n </div>\n </template>\n</template>\n\n<style scoped>\n.property-example {\n display: flex;\n flex-direction: column;\n font-size: var(--scalar-mini);\n position: relative;\n}\n.property-example:hover:before {\n content: '';\n position: absolute;\n top: 0;\n left: 0;\n width: 100%;\n height: 20px;\n border-radius: var(--scalar-radius);\n}\n.property-example:hover .property-example-label span {\n color: var(--scalar-color-1);\n}\n.property-example-label span {\n color: var(--scalar-color-3);\n position: relative;\n border-bottom: var(--scalar-border-width) dotted currentColor;\n}\n.property-example-value {\n font-family: var(--scalar-font-code);\n display: flex;\n gap: 8px;\n align-items: center;\n width: 100%;\n padding: 6px;\n}\n.property-example-value span {\n display: block;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n.property-example-value :deep(svg) {\n color: var(--scalar-color-3);\n}\n\n.property-example-value:hover :deep(svg) {\n color: var(--scalar-color-1);\n}\n\n.property-example-value {\n background: var(--scalar-background-2);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius);\n}\n.property-example-value-list {\n position: absolute;\n top: 18px;\n left: 50%;\n transform: translate3d(-50%, 0, 0);\n overflow: auto;\n background-color: var(--scalar-background-1);\n box-shadow: var(--scalar-shadow-1);\n border-radius: var(--scalar-radius-lg);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n padding: 9px;\n min-width: 200px;\n max-width: 300px;\n flex-direction: column;\n gap: 3px;\n display: none;\n z-index: 2;\n}\n.property-example:hover .property-example-value-list,\n.property-example:focus-within .property-example-value-list {\n display: flex;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport {\n isArraySchema,\n isNumberSchema,\n isStringSchema,\n} from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\nimport { computed, toRef } from 'vue'\n\nimport { Badge } from '@/components/Badge'\nimport ScreenReader from '@/components/ScreenReader.vue'\n\nimport { getSchemaType } from './helpers/get-schema-type'\nimport { getModelNameFromSchema } from './helpers/schema-name'\nimport RenderString from './RenderString.vue'\nimport SchemaPropertyDefault from './SchemaPropertyDefault.vue'\nimport SchemaPropertyDetail from './SchemaPropertyDetail.vue'\nimport SchemaPropertyExamples from './SchemaPropertyExamples.vue'\n\nconst props = withDefaults(\n defineProps<{\n value: SchemaObject | undefined\n enum?: boolean\n isDiscriminator?: boolean\n required?: boolean\n additional?: boolean\n withExamples?: boolean\n hideModelNames?: boolean\n /** When the schema was resolved from a $ref, pass the ref name so it displays as e.g. \"Data\" instead of \"object\". */\n modelName?: string | null\n }>(),\n {\n isDiscriminator: false,\n required: false,\n withExamples: true,\n hideModelNames: false,\n },\n)\n\n// Convert to reactive refs for composables\nconst valueRef = toRef(props, 'value')\n\nconst constValue = computed(() => {\n if (!valueRef.value) {\n return undefined\n }\n\n const schema = valueRef.value\n\n // Direct const value\n if (schema.const !== undefined) {\n return schema.const\n }\n\n // Single-item enum acts as const\n if (schema.enum?.length === 1) {\n return schema.enum[0]\n }\n\n // Check items for const values (for arrays)\n if (isArraySchema(schema) && schema.items) {\n const items = resolve.schema(schema.items)\n\n if (isDefined(items.const)) {\n return items.const\n }\n\n if (items.enum?.length === 1) {\n return items.enum[0]\n }\n }\n\n return undefined\n})\n\nconst validationProperties = computed(() => {\n if (!valueRef.value) {\n return []\n }\n\n const schema = valueRef.value\n const properties = []\n\n // Array validation properties\n if (isArraySchema(schema)) {\n if (schema.minItems || schema.maxItems) {\n properties.push({\n key: 'array-range',\n value: `${schema.minItems || ''}…${schema.maxItems || ''}`,\n })\n }\n\n // Unique items\n if (schema.uniqueItems) {\n properties.push({\n key: 'unique-items',\n value: 'unique!',\n })\n }\n }\n\n // String length properties\n if (isStringSchema(schema)) {\n if (schema.minLength) {\n properties.push({\n key: 'min-length',\n prefix: 'min length: ',\n value: schema.minLength,\n })\n }\n\n if (schema.maxLength) {\n properties.push({\n key: 'max-length',\n prefix: 'max length: ',\n value: schema.maxLength,\n })\n }\n\n // Pattern\n if (schema.pattern) {\n properties.push({\n key: 'pattern',\n value: schema.pattern,\n code: true,\n truncate: true,\n })\n }\n }\n\n // Format\n if (isStringSchema(schema) || isNumberSchema(schema)) {\n if (schema.format) {\n properties.push({\n key: 'format',\n value: schema.format,\n truncate: true,\n })\n }\n }\n\n // Numeric validation properties\n if (isNumberSchema(schema)) {\n if (isDefined(schema.exclusiveMinimum)) {\n properties.push({\n key: 'exclusive-minimum',\n prefix: 'greater than: ',\n value: schema.exclusiveMinimum,\n })\n }\n\n if (isDefined(schema.minimum)) {\n properties.push({\n key: 'minimum',\n prefix: 'min: ',\n value: schema.minimum,\n })\n }\n\n if (isDefined(schema.exclusiveMaximum)) {\n properties.push({\n key: 'exclusive-maximum',\n prefix: 'less than: ',\n value: schema.exclusiveMaximum,\n })\n }\n\n if (isDefined(schema.maximum)) {\n properties.push({\n key: 'maximum',\n prefix: 'max: ',\n value: schema.maximum,\n })\n }\n\n if (isDefined(schema.multipleOf)) {\n properties.push({\n key: 'multiple-of',\n prefix: 'multiple of: ',\n value: schema.multipleOf,\n })\n }\n }\n\n return properties\n})\n\n/** Optional schema title/name shown in addition to structural type. */\nconst displayTitle = computed(() => {\n if (!props.value) {\n return null\n }\n\n if (props.hideModelNames) {\n return null\n }\n\n // Use explicit model name when schema was resolved from a $ref (e.g. in response/param body).\n if (props.modelName) {\n return props.modelName\n }\n\n const modelName = getModelNameFromSchema(props.value)\n if (modelName) {\n return modelName\n }\n\n if (isArraySchema(props.value) && props.value.items) {\n const itemName = getModelNameFromSchema(props.value.items)\n return itemName ? `${itemName}[]` : null\n }\n\n return null\n})\n\n/** Check if we should show the type information */\nconst shouldShowType = computed(() => {\n if (!props.value || !('type' in props.value)) {\n return false\n }\n\n // Always show type for arrays, even when items have const values\n if (props.value.type === 'array') {\n return true\n }\n\n // For non-arrays, only show if no const value at the schema level\n return !constValue.value\n})\n\n/** Get the display type */\nconst displayType = computed(() => {\n if (!props.value) {\n return ''\n }\n return getSchemaType(props.value)\n})\n\nconst exampleValue = computed(() => {\n if (isDefined(props.value?.example)) {\n return props.value.example\n }\n\n if (props.value && isArraySchema(props.value)) {\n const itemsExample = resolve.schema(props.value.items)?.example\n return isDefined(itemsExample) ? itemsExample : undefined\n }\n\n return undefined\n})\n</script>\n<template>\n <div class=\"property-heading\">\n <div\n v-if=\"$slots.name\"\n class=\"property-name\"\n :class=\"{ deprecated: props.value?.deprecated }\">\n <slot name=\"name\" />\n </div>\n <div\n v-if=\"props.isDiscriminator\"\n class=\"property-discriminator\">\n Discriminator\n </div>\n <template v-if=\"props.value\">\n <!-- Type information -->\n <SchemaPropertyDetail\n v-if=\"shouldShowType\"\n truncate>\n <ScreenReader>Type: </ScreenReader>{{ displayType\n }}{{ displayTitle ? ` · ${displayTitle}` : '' }}\n </SchemaPropertyDetail>\n\n <!-- Dynamic validation properties from composable -->\n <SchemaPropertyDetail\n v-for=\"property in validationProperties\"\n :key=\"property.key\"\n :code=\"property.code\"\n :truncate=\"property.truncate\">\n <ScreenReader v-if=\"property.key === 'format'\">Format:</ScreenReader>\n <ScreenReader v-else-if=\"property.key === 'pattern'\">\n Pattern:\n </ScreenReader>\n <template\n v-if=\"property.prefix\"\n #prefix>\n {{ property.prefix }}\n </template>\n {{ property.value }}\n </SchemaPropertyDetail>\n\n <!-- Enum indicator -->\n <SchemaPropertyDetail v-if=\"props.enum\">enum</SchemaPropertyDetail>\n </template>\n <div\n v-if=\"props.additional\"\n class=\"property-additional\">\n <template v-if=\"props.value?.['x-additionalPropertiesName']\">\n {{ props.value['x-additionalPropertiesName'] }}\n </template>\n <template v-else>additional properties</template>\n </div>\n <div\n v-if=\"props.value?.deprecated\"\n class=\"property-deprecated\">\n <Badge>deprecated</Badge>\n </div>\n <!-- Don't use `isDefined` here, we want to show `const` when the value is `null` -->\n <div\n v-if=\"constValue !== undefined\"\n class=\"property-const\">\n <SchemaPropertyDetail truncate>\n <template #prefix>const: </template>\n <RenderString :value=\"constValue\" />\n </SchemaPropertyDetail>\n </div>\n <template v-else>\n <!-- Shows only when a composition is used (so props.value?.type is undefined) -->\n <SchemaPropertyDetail v-if=\"(props.value as any)?.nullable === true\">\n nullable\n </SchemaPropertyDetail>\n </template>\n <div\n v-if=\"props.value?.writeOnly\"\n class=\"property-write-only\">\n write-only\n </div>\n <div\n v-else-if=\"props.value?.readOnly\"\n class=\"property-read-only\">\n read-only\n </div>\n <div\n v-if=\"props.required\"\n class=\"property-required\">\n required\n </div>\n <SchemaPropertyDefault :value=\"props.value?.default\" />\n <SchemaPropertyExamples\n v-if=\"props.withExamples\"\n :example=\"exampleValue\"\n :examples=\"props.value?.examples\" />\n </div>\n</template>\n<style scoped>\n.property-heading {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n row-gap: 9px;\n white-space: nowrap;\n}\n\n.property-heading:has(+ .children),\n.property-heading:has(+ .property-rule) {\n margin-bottom: 9px;\n}\n\n.property-heading > * {\n margin-right: 9px;\n}\n\n.property-heading:last-child {\n margin-right: 0;\n}\n\n.property-heading > .property-detail:not(:last-of-type) {\n margin-right: 0;\n}\n\n.property-name {\n max-width: 100%;\n font-family: var(--scalar-font-code);\n font-weight: var(--scalar-bold);\n font-size: var(--scalar-font-size-4);\n white-space: normal;\n overflow-wrap: break-word;\n}\n\n.property-additional {\n font-family: var(--scalar-font-code);\n}\n\n.property-required,\n.property-optional {\n color: var(--scalar-color-2);\n}\n\n.property-required {\n font-size: var(--scalar-mini);\n color: var(--scalar-color-orange);\n}\n\n.property-read-only {\n font-size: var(--scalar-mini);\n color: var(--scalar-color-blue);\n}\n\n.property-write-only {\n font-size: var(--scalar-mini);\n color: var(--scalar-color-green);\n}\n\n.property-discriminator {\n font-size: var(--scalar-mini);\n color: var(--scalar-color-purple);\n}\n\n.property-detail {\n font-size: var(--scalar-mini);\n color: var(--scalar-color-2);\n display: flex;\n align-items: center;\n\n min-width: 0;\n}\n\n.property-const {\n color: var(--scalar-color-1);\n}\n\n.deprecated {\n text-decoration: line-through;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport {\n isArraySchema,\n isNumberSchema,\n isStringSchema,\n} from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\nimport { computed, toRef } from 'vue'\n\nimport { Badge } from '@/components/Badge'\nimport ScreenReader from '@/components/ScreenReader.vue'\n\nimport { getSchemaType } from './helpers/get-schema-type'\nimport { getModelNameFromSchema } from './helpers/schema-name'\nimport RenderString from './RenderString.vue'\nimport SchemaPropertyDefault from './SchemaPropertyDefault.vue'\nimport SchemaPropertyDetail from './SchemaPropertyDetail.vue'\nimport SchemaPropertyExamples from './SchemaPropertyExamples.vue'\n\nconst props = withDefaults(\n defineProps<{\n value: SchemaObject | undefined\n enum?: boolean\n isDiscriminator?: boolean\n required?: boolean\n additional?: boolean\n withExamples?: boolean\n hideModelNames?: boolean\n /** When the schema was resolved from a $ref, pass the ref name so it displays as e.g. \"Data\" instead of \"object\". */\n modelName?: string | null\n }>(),\n {\n isDiscriminator: false,\n required: false,\n withExamples: true,\n hideModelNames: false,\n },\n)\n\n// Convert to reactive refs for composables\nconst valueRef = toRef(props, 'value')\n\nconst constValue = computed(() => {\n if (!valueRef.value) {\n return undefined\n }\n\n const schema = valueRef.value\n\n // Direct const value\n if (schema.const !== undefined) {\n return schema.const\n }\n\n // Single-item enum acts as const\n if (schema.enum?.length === 1) {\n return schema.enum[0]\n }\n\n // Check items for const values (for arrays)\n if (isArraySchema(schema) && schema.items) {\n const items = resolve.schema(schema.items)\n\n if (isDefined(items.const)) {\n return items.const\n }\n\n if (items.enum?.length === 1) {\n return items.enum[0]\n }\n }\n\n return undefined\n})\n\nconst validationProperties = computed(() => {\n if (!valueRef.value) {\n return []\n }\n\n const schema = valueRef.value\n const properties = []\n\n // Array validation properties\n if (isArraySchema(schema)) {\n if (schema.minItems || schema.maxItems) {\n properties.push({\n key: 'array-range',\n value: `${schema.minItems || ''}…${schema.maxItems || ''}`,\n })\n }\n\n // Unique items\n if (schema.uniqueItems) {\n properties.push({\n key: 'unique-items',\n value: 'unique!',\n })\n }\n }\n\n // String length properties\n if (isStringSchema(schema)) {\n if (schema.minLength) {\n properties.push({\n key: 'min-length',\n prefix: 'min length: ',\n value: schema.minLength,\n })\n }\n\n if (schema.maxLength) {\n properties.push({\n key: 'max-length',\n prefix: 'max length: ',\n value: schema.maxLength,\n })\n }\n\n // Pattern\n if (schema.pattern) {\n properties.push({\n key: 'pattern',\n value: schema.pattern,\n code: true,\n truncate: true,\n })\n }\n }\n\n // Format\n if (isStringSchema(schema) || isNumberSchema(schema)) {\n if (schema.format) {\n properties.push({\n key: 'format',\n value: schema.format,\n truncate: true,\n })\n }\n }\n\n // Numeric validation properties\n if (isNumberSchema(schema)) {\n if (isDefined(schema.exclusiveMinimum)) {\n properties.push({\n key: 'exclusive-minimum',\n prefix: 'greater than: ',\n value: schema.exclusiveMinimum,\n })\n }\n\n if (isDefined(schema.minimum)) {\n properties.push({\n key: 'minimum',\n prefix: 'min: ',\n value: schema.minimum,\n })\n }\n\n if (isDefined(schema.exclusiveMaximum)) {\n properties.push({\n key: 'exclusive-maximum',\n prefix: 'less than: ',\n value: schema.exclusiveMaximum,\n })\n }\n\n if (isDefined(schema.maximum)) {\n properties.push({\n key: 'maximum',\n prefix: 'max: ',\n value: schema.maximum,\n })\n }\n\n if (isDefined(schema.multipleOf)) {\n properties.push({\n key: 'multiple-of',\n prefix: 'multiple of: ',\n value: schema.multipleOf,\n })\n }\n }\n\n return properties\n})\n\n/** Optional schema title/name shown in addition to structural type. */\nconst displayTitle = computed(() => {\n if (!props.value) {\n return null\n }\n\n if (props.hideModelNames) {\n return null\n }\n\n // Use explicit model name when schema was resolved from a $ref (e.g. in response/param body).\n if (props.modelName) {\n return props.modelName\n }\n\n const modelName = getModelNameFromSchema(props.value)\n if (modelName) {\n return modelName\n }\n\n if (isArraySchema(props.value) && props.value.items) {\n const itemName = getModelNameFromSchema(props.value.items)\n return itemName ? `${itemName}[]` : null\n }\n\n return null\n})\n\n/** Check if we should show the type information */\nconst shouldShowType = computed(() => {\n if (!props.value || !('type' in props.value)) {\n return false\n }\n\n // Always show type for arrays, even when items have const values\n if (props.value.type === 'array') {\n return true\n }\n\n // For non-arrays, only show if no const value at the schema level\n return !constValue.value\n})\n\n/** Get the display type */\nconst displayType = computed(() => {\n if (!props.value) {\n return ''\n }\n return getSchemaType(props.value)\n})\n\nconst exampleValue = computed(() => {\n if (isDefined(props.value?.example)) {\n return props.value.example\n }\n\n if (props.value && isArraySchema(props.value)) {\n const itemsExample = resolve.schema(props.value.items)?.example\n return isDefined(itemsExample) ? itemsExample : undefined\n }\n\n return undefined\n})\n</script>\n<template>\n <div class=\"property-heading\">\n <div\n v-if=\"$slots.name\"\n class=\"property-name\"\n :class=\"{ deprecated: props.value?.deprecated }\">\n <slot name=\"name\" />\n </div>\n <div\n v-if=\"props.isDiscriminator\"\n class=\"property-discriminator\">\n Discriminator\n </div>\n <template v-if=\"props.value\">\n <!-- Type information -->\n <SchemaPropertyDetail\n v-if=\"shouldShowType\"\n truncate>\n <ScreenReader>Type: </ScreenReader>{{ displayType\n }}{{ displayTitle ? ` · ${displayTitle}` : '' }}\n </SchemaPropertyDetail>\n\n <!-- Dynamic validation properties from composable -->\n <SchemaPropertyDetail\n v-for=\"property in validationProperties\"\n :key=\"property.key\"\n :code=\"property.code\"\n :truncate=\"property.truncate\">\n <ScreenReader v-if=\"property.key === 'format'\">Format:</ScreenReader>\n <ScreenReader v-else-if=\"property.key === 'pattern'\">\n Pattern:\n </ScreenReader>\n <template\n v-if=\"property.prefix\"\n #prefix>\n {{ property.prefix }}\n </template>\n {{ property.value }}\n </SchemaPropertyDetail>\n\n <!-- Enum indicator -->\n <SchemaPropertyDetail v-if=\"props.enum\">enum</SchemaPropertyDetail>\n </template>\n <div\n v-if=\"props.additional\"\n class=\"property-additional\">\n <template v-if=\"props.value?.['x-additionalPropertiesName']\">\n {{ props.value['x-additionalPropertiesName'] }}\n </template>\n <template v-else>additional properties</template>\n </div>\n <div\n v-if=\"props.value?.deprecated\"\n class=\"property-deprecated\">\n <Badge>deprecated</Badge>\n </div>\n <!-- Don't use `isDefined` here, we want to show `const` when the value is `null` -->\n <div\n v-if=\"constValue !== undefined\"\n class=\"property-const\">\n <SchemaPropertyDetail truncate>\n <template #prefix>const: </template>\n <RenderString :value=\"constValue\" />\n </SchemaPropertyDetail>\n </div>\n <template v-else>\n <!-- Shows only when a composition is used (so props.value?.type is undefined) -->\n <SchemaPropertyDetail v-if=\"(props.value as any)?.nullable === true\">\n nullable\n </SchemaPropertyDetail>\n </template>\n <div\n v-if=\"props.value?.writeOnly\"\n class=\"property-write-only\">\n write-only\n </div>\n <div\n v-else-if=\"props.value?.readOnly\"\n class=\"property-read-only\">\n read-only\n </div>\n <div\n v-if=\"props.required\"\n class=\"property-required\">\n required\n </div>\n <SchemaPropertyDefault :value=\"props.value?.default\" />\n <SchemaPropertyExamples\n v-if=\"props.withExamples\"\n :example=\"exampleValue\"\n :examples=\"props.value?.examples\" />\n </div>\n</template>\n<style scoped>\n.property-heading {\n display: flex;\n flex-wrap: wrap;\n align-items: baseline;\n row-gap: 9px;\n white-space: nowrap;\n}\n\n.property-heading:has(+ .children),\n.property-heading:has(+ .property-rule) {\n margin-bottom: 9px;\n}\n\n.property-heading > * {\n margin-right: 9px;\n}\n\n.property-heading:last-child {\n margin-right: 0;\n}\n\n.property-heading > .property-detail:not(:last-of-type) {\n margin-right: 0;\n}\n\n.property-name {\n max-width: 100%;\n font-family: var(--scalar-font-code);\n font-weight: var(--scalar-bold);\n font-size: var(--scalar-font-size-4);\n white-space: normal;\n overflow-wrap: break-word;\n}\n\n.property-additional {\n font-family: var(--scalar-font-code);\n}\n\n.property-required,\n.property-optional {\n color: var(--scalar-color-2);\n}\n\n.property-required {\n font-size: var(--scalar-mini);\n color: var(--scalar-color-orange);\n}\n\n.property-read-only {\n font-size: var(--scalar-mini);\n color: var(--scalar-color-blue);\n}\n\n.property-write-only {\n font-size: var(--scalar-mini);\n color: var(--scalar-color-green);\n}\n\n.property-discriminator {\n font-size: var(--scalar-mini);\n color: var(--scalar-color-purple);\n}\n\n.property-detail {\n font-size: var(--scalar-mini);\n color: var(--scalar-color-2);\n display: flex;\n align-items: center;\n\n min-width: 0;\n}\n\n.property-const {\n color: var(--scalar-color-1);\n}\n\n.deprecated {\n text-decoration: line-through;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { ScalarMarkdown, ScalarWrappingText } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type {\n DiscriminatorObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isArraySchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\nimport { computed, type Component } from 'vue'\n\nimport { WithBreadcrumb } from '@/components/Anchor'\nimport { isTypeObject } from '@/components/Content/Schema/helpers/is-type-object'\nimport type { SchemaOptions } from '@/components/Content/Schema/types'\nimport { SpecificationExtension } from '@/features/specification-extension'\n\nimport { getCompositionsToRender } from './helpers/get-compositions-to-render'\nimport { getEnumValues } from './helpers/get-enum-values'\nimport { getPropertyDescription } from './helpers/get-property-description'\nimport { hasComplexArrayItems } from './helpers/has-complex-array-items'\nimport { optimizeValueForDisplay } from './helpers/optimize-value-for-display'\nimport { shouldDisplayDescription } from './helpers/should-display-description'\nimport { shouldDisplayHeading } from './helpers/should-display-heading'\nimport Schema from './Schema.vue'\nimport SchemaComposition from './SchemaComposition.vue'\nimport SchemaEnums from './SchemaEnums.vue'\nimport SchemaPropertyHeading from './SchemaPropertyHeading.vue'\n\n/**\n * Note: We're taking in a prop called `value` which should be a JSON Schema.\n *\n * We're using `optimizeValueForDisplay` to merge null types in compositions (anyOf, allOf, oneOf, not).\n * So you should basically use the optimizedValue everywhere in the component.\n */\n\nconst props = withDefaults(\n defineProps<{\n is?: string | Component\n schema: SchemaObject | undefined\n noncollapsible?: boolean\n level?: number\n name?: string\n required?: boolean\n compact?: boolean\n discriminator?: DiscriminatorObject\n description?: string\n hideModelNames?: boolean\n hideHeading?: boolean\n /** When the root schema was resolved from a $ref, pass the ref name for display (e.g. \"Data\"). */\n modelName?: string | null\n variant?: 'additionalProperties' | 'patternProperties'\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n options: SchemaOptions\n /** Enum values for property names (from JSON Schema propertyNames keyword). */\n propertyNamesEnum?: string[]\n }>(),\n {\n level: 0,\n required: false,\n compact: false,\n hideModelNames: false,\n },\n)\n\n/** Simplified composition with `null` type. */\nconst optimizedValue = computed(() => optimizeValueForDisplay(props.schema))\n\nconst childBreadcrumb = computed<string[] | undefined>(() =>\n props.breadcrumb && props.name\n ? [...props.breadcrumb, props.name]\n : undefined,\n)\n\nconst shouldHaveLink = computed(() => props.level <= 1)\n\n/** Checks if array items have complex structure */\nconst hasComplexArrayItemsComputed = computed(() =>\n hasComplexArrayItems(optimizedValue.value),\n)\n\n/** Check if enum should be displayed (from value schema or from propertyNames) */\nconst hasEnum = computed(() => enumValues.value.length > 0)\n\n/** Determine if object properties should be displayed */\nconst shouldRenderObjectProperties = computed(() => {\n const value = optimizedValue.value\n if (!value) {\n return false\n }\n\n return (\n isTypeObject(value) &&\n ('properties' in value || 'additionalProperties' in value)\n )\n})\n\n/** Determine if array of objects should be rendered */\nconst shouldRenderArrayOfObjects = computed(() => {\n const value = optimizedValue.value\n if (!value || !isArraySchema(value) || typeof value.items !== 'object') {\n return false\n }\n\n return hasComplexArrayItemsComputed.value\n})\n\n/** Extract enum values from schema or array items */\nconst enumValues = computed(() => getEnumValues(optimizedValue.value))\n\n/** Generate property description from type/format */\nconst propertyDescription = computed(() =>\n getPropertyDescription(optimizedValue.value),\n)\n\n/** Determine if description should be displayed */\nconst displayDescription = computed(() =>\n shouldDisplayDescription(optimizedValue.value, props.description),\n)\n\n/**\n * When the property already renders the description, avoid repeating it in the nested object schema card.\n */\nconst objectSchemaForChildren = computed(() => {\n const value = optimizedValue.value\n if (!value || !displayDescription.value || !('description' in value)) {\n return value\n }\n\n const { description: _description, ...schemaWithoutDescription } = value\n return schemaWithoutDescription as SchemaObject\n})\n\n/** Determine if property heading should be displayed */\nconst shouldDisplayHeadingComputed = computed(() =>\n shouldDisplayHeading(optimizedValue.value, props.name, props.required),\n)\n\n/** Computes which compositions should be rendered and with which values */\nconst compositionsToRender = computed(() =>\n getCompositionsToRender(optimizedValue.value),\n)\n\n/** Get resolved array items for rendering */\nconst resolvedArrayItems = computed(() => {\n const value = optimizedValue.value\n if (!value || !isArraySchema(value) || typeof value.items !== 'object') {\n return undefined\n }\n return resolve.schema(value.items)\n})\n\n/** Check if discriminator matches current property */\nconst isDiscriminatorProperty = computed(() =>\n Boolean(props.name && props.discriminator?.propertyName === props.name),\n)\n</script>\n<template>\n <component\n :is=\"is ?? 'li'\"\n class=\"property\"\n :class=\"[\n `property--level-${level}`,\n {\n 'property--compact': compact,\n 'property--deprecated': optimizedValue?.deprecated,\n },\n ]\">\n <SchemaPropertyHeading\n v-if=\"shouldDisplayHeadingComputed\"\n class=\"group\"\n :enum=\"hasEnum\"\n :hideModelNames\n :isDiscriminator=\"isDiscriminatorProperty\"\n :modelName=\"modelName\"\n :required\n :value=\"optimizedValue\">\n <template\n v-if=\"name\"\n #name>\n <WithBreadcrumb\n :breadcrumb=\"shouldHaveLink ? childBreadcrumb : undefined\"\n :eventBus=\"eventBus\">\n <span\n v-if=\"variant === 'patternProperties'\"\n class=\"property-name-pattern-properties\">\n <ScalarWrappingText\n preset=\"property\"\n :text=\"name\" />\n </span>\n <span\n v-else-if=\"variant === 'additionalProperties'\"\n class=\"property-name-additional-properties\">\n <ScalarWrappingText\n preset=\"property\"\n :text=\"name\" />\n </span>\n <ScalarWrappingText\n v-else\n preset=\"property\"\n :text=\"name\" />\n </WithBreadcrumb>\n </template>\n <template\n v-if=\"optimizedValue?.example !== undefined\"\n #example>\n Example:\n {{ optimizedValue.example }}\n </template>\n </SchemaPropertyHeading>\n\n <!-- Description -->\n <div\n v-if=\"displayDescription || propertyDescription\"\n class=\"property-description\">\n <ScalarMarkdown\n :value=\"displayDescription || propertyDescription || ''\" />\n </div>\n\n <!-- Enum for property names -->\n <SchemaEnums\n v-if=\"propertyNamesEnum && propertyNamesEnum.length > 0\"\n propertyNames\n :value=\"{ enum: propertyNamesEnum } as SchemaObject\" />\n\n <!-- Enum values -->\n <SchemaEnums\n v-if=\"enumValues.length > 0\"\n :value=\"optimizedValue\" />\n\n <!-- Object -->\n <div\n v-if=\"shouldRenderObjectProperties\"\n class=\"children\">\n <Schema\n :breadcrumb=\"childBreadcrumb\"\n :compact=\"compact\"\n :eventBus=\"eventBus\"\n :level=\"level + 1\"\n :name=\"name\"\n :noncollapsible=\"noncollapsible\"\n :options=\"options\"\n :schema=\"objectSchemaForChildren\" />\n </div>\n\n <!-- Array of objects or nested arrays -->\n <div\n v-if=\"shouldRenderArrayOfObjects && resolvedArrayItems\"\n class=\"children\">\n <Schema\n :compact=\"compact\"\n :eventBus=\"eventBus\"\n :level=\"level + 1\"\n :name=\"name\"\n :noncollapsible=\"noncollapsible\"\n :options=\"options\"\n :schema=\"resolve.schema(resolvedArrayItems)\" />\n </div>\n\n <!-- Compositions -->\n <SchemaComposition\n v-for=\"compositionData in compositionsToRender\"\n :key=\"compositionData.composition\"\n :breadcrumb=\"breadcrumb\"\n :compact=\"compact\"\n :composition=\"compositionData.composition\"\n :discriminator=\"schema?.discriminator\"\n :eventBus=\"eventBus\"\n :hideHeading=\"hideHeading\"\n :level=\"level\"\n :name=\"name\"\n :noncollapsible=\"noncollapsible\"\n :options=\"options\"\n :schema=\"compositionData.value\" />\n <SpecificationExtension :value=\"optimizedValue\" />\n </component>\n</template>\n\n<style scoped>\n.property {\n color: var(--scalar-color-1);\n display: flex;\n flex-direction: column;\n padding: 10px;\n font-size: var(--scalar-small);\n position: relative;\n}\n\n/** Remove top padding for top level schema card */\n.property.property--level-0:has(\n > .property-rule\n > .schema-card\n > .schema-properties.schema-properties-open\n > ul\n > li.property\n ) {\n padding-top: 0;\n}\n\n.property--compact.property--level-0,\n.property--compact.property--level-1 {\n padding: 10px 0;\n}\n\n.composition-panel .property.property.property.property--level-0 {\n padding: 0px;\n}\n\n.property--compact.property--level-0\n .composition-panel\n .property--compact.property--level-1 {\n padding: 8px;\n}\n\n/* if a property doesn't have a heading, remove the top padding */\n.property:has(> .property-rule:nth-of-type(1)):not(.property--compact) {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n\n.property--deprecated {\n background: repeating-linear-gradient(\n -45deg,\n var(--scalar-background-2) 0,\n var(--scalar-background-2) 2px,\n transparent 2px,\n transparent 5px\n );\n background-size: 100%;\n}\n\n.property--deprecated > * {\n opacity: 0.75;\n}\n\n.property-description {\n margin-top: 6px;\n line-height: 1.4;\n font-size: var(--scalar-small);\n}\n\n.property-description:has(+ .property-rule) {\n margin-bottom: 9px;\n}\n\n:deep(.property-description) * {\n color: var(--scalar-color-2) !important;\n}\n\n.property:not(:last-of-type) {\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.property-description + .children,\n.children + .property-rule {\n margin-top: 9px;\n}\n\n.children {\n display: flex;\n flex-direction: column;\n}\n\n.children .property--compact.property--level-1 {\n padding: 12px;\n}\n\n.property-example-value {\n all: unset;\n font-family: var(--scalar-font-code);\n padding: 6px;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.property-rule {\n border-radius: var(--scalar-radius-lg);\n display: flex;\n flex-direction: column;\n}\n\n.property-rule\n :deep(\n .composition-panel\n .schema-card--level-1\n > .schema-properties.schema-properties-open\n ) {\n border-radius: 0 0 var(--scalar-radius-lg) var(--scalar-radius-lg);\n}\n\n.property-rule\n :deep(.composition-panel > .schema-card > .schema-card-description) {\n padding: 10px;\n border-left: var(--scalar-border-width) solid var(--scalar-border-color);\n border-right: var(--scalar-border-width) solid var(--scalar-border-color);\n\n & + .schema-properties {\n margin-top: 0;\n }\n}\n\n.property-example {\n background: transparent;\n border: none;\n display: flex;\n flex-direction: row;\n gap: 8px;\n}\n\n.property-example-label,\n.property-example-value {\n padding: 3px 0 0 0;\n}\n\n.property-example-value {\n background: var(--scalar-background-2);\n border-top: 0;\n border-radius: var(--scalar-radius);\n padding: 3px 4px;\n}\n\n.property-name {\n font-family: var(--scalar-font-code);\n font-weight: var(--scalar-semibold);\n}\n\n.property-name-additional-properties::before,\n.property-name-pattern-properties::before {\n text-transform: uppercase;\n font-size: var(--scalar-micro);\n display: inline-block;\n padding: 2px 4px;\n border-radius: var(--scalar-radius);\n color: var(--scalar-color-1);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n background-color: var(--scalar-background-2);\n margin-right: 4px;\n}\n\n.property-name-pattern-properties::before {\n content: 'regex';\n}\n\n.property-name-additional-properties,\n.property-name-pattern-properties {\n border: 1px dashed var(--scalar-border-color);\n color: var(--scalar-color-accent);\n display: inline-block;\n padding: 2px;\n border-radius: var(--scalar-radius);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { ScalarMarkdown, ScalarWrappingText } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type {\n DiscriminatorObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { isArraySchema } from '@scalar/workspace-store/schemas/v3.1/strict/type-guards'\nimport { computed, type Component } from 'vue'\n\nimport { WithBreadcrumb } from '@/components/Anchor'\nimport { isTypeObject } from '@/components/Content/Schema/helpers/is-type-object'\nimport type { SchemaOptions } from '@/components/Content/Schema/types'\nimport { SpecificationExtension } from '@/features/specification-extension'\n\nimport { getCompositionsToRender } from './helpers/get-compositions-to-render'\nimport { getEnumValues } from './helpers/get-enum-values'\nimport { getPropertyDescription } from './helpers/get-property-description'\nimport { hasComplexArrayItems } from './helpers/has-complex-array-items'\nimport { optimizeValueForDisplay } from './helpers/optimize-value-for-display'\nimport { shouldDisplayDescription } from './helpers/should-display-description'\nimport { shouldDisplayHeading } from './helpers/should-display-heading'\nimport Schema from './Schema.vue'\nimport SchemaComposition from './SchemaComposition.vue'\nimport SchemaEnums from './SchemaEnums.vue'\nimport SchemaPropertyHeading from './SchemaPropertyHeading.vue'\n\n/**\n * Note: We're taking in a prop called `value` which should be a JSON Schema.\n *\n * We're using `optimizeValueForDisplay` to merge null types in compositions (anyOf, allOf, oneOf, not).\n * So you should basically use the optimizedValue everywhere in the component.\n */\n\nconst props = withDefaults(\n defineProps<{\n is?: string | Component\n schema: SchemaObject | undefined\n noncollapsible?: boolean\n level?: number\n name?: string\n required?: boolean\n compact?: boolean\n discriminator?: DiscriminatorObject\n description?: string\n hideModelNames?: boolean\n hideHeading?: boolean\n /** When the root schema was resolved from a $ref, pass the ref name for display (e.g. \"Data\"). */\n modelName?: string | null\n variant?: 'additionalProperties' | 'patternProperties'\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n options: SchemaOptions\n /** Enum values for property names (from JSON Schema propertyNames keyword). */\n propertyNamesEnum?: string[]\n }>(),\n {\n level: 0,\n required: false,\n compact: false,\n hideModelNames: false,\n },\n)\n\n/** Simplified composition with `null` type. */\nconst optimizedValue = computed(() => optimizeValueForDisplay(props.schema))\n\nconst childBreadcrumb = computed<string[] | undefined>(() =>\n props.breadcrumb && props.name\n ? [...props.breadcrumb, props.name]\n : undefined,\n)\n\nconst shouldHaveLink = computed(() => props.level <= 1)\n\n/** Checks if array items have complex structure */\nconst hasComplexArrayItemsComputed = computed(() =>\n hasComplexArrayItems(optimizedValue.value),\n)\n\n/** Check if enum should be displayed (from value schema or from propertyNames) */\nconst hasEnum = computed(() => enumValues.value.length > 0)\n\n/** Determine if object properties should be displayed */\nconst shouldRenderObjectProperties = computed(() => {\n const value = optimizedValue.value\n if (!value) {\n return false\n }\n\n return (\n isTypeObject(value) &&\n ('properties' in value || 'additionalProperties' in value)\n )\n})\n\n/** Determine if array of objects should be rendered */\nconst shouldRenderArrayOfObjects = computed(() => {\n const value = optimizedValue.value\n if (!value || !isArraySchema(value) || typeof value.items !== 'object') {\n return false\n }\n\n return hasComplexArrayItemsComputed.value\n})\n\n/** Extract enum values from schema or array items */\nconst enumValues = computed(() => getEnumValues(optimizedValue.value))\n\n/** Generate property description from type/format */\nconst propertyDescription = computed(() =>\n getPropertyDescription(optimizedValue.value),\n)\n\n/** Determine if description should be displayed */\nconst displayDescription = computed(() =>\n shouldDisplayDescription(optimizedValue.value, props.description),\n)\n\n/**\n * When the property already renders the description, avoid repeating it in the nested object schema card.\n */\nconst objectSchemaForChildren = computed(() => {\n const value = optimizedValue.value\n if (!value || !displayDescription.value || !('description' in value)) {\n return value\n }\n\n const { description: _description, ...schemaWithoutDescription } = value\n return schemaWithoutDescription as SchemaObject\n})\n\n/** Determine if property heading should be displayed */\nconst shouldDisplayHeadingComputed = computed(() =>\n shouldDisplayHeading(optimizedValue.value, props.name, props.required),\n)\n\n/** Computes which compositions should be rendered and with which values */\nconst compositionsToRender = computed(() =>\n getCompositionsToRender(optimizedValue.value),\n)\n\n/** Get resolved array items for rendering */\nconst resolvedArrayItems = computed(() => {\n const value = optimizedValue.value\n if (!value || !isArraySchema(value) || typeof value.items !== 'object') {\n return undefined\n }\n return resolve.schema(value.items)\n})\n\n/** Check if discriminator matches current property */\nconst isDiscriminatorProperty = computed(() =>\n Boolean(props.name && props.discriminator?.propertyName === props.name),\n)\n</script>\n<template>\n <component\n :is=\"is ?? 'li'\"\n class=\"property\"\n :class=\"[\n `property--level-${level}`,\n {\n 'property--compact': compact,\n 'property--deprecated': optimizedValue?.deprecated,\n },\n ]\">\n <SchemaPropertyHeading\n v-if=\"shouldDisplayHeadingComputed\"\n class=\"group\"\n :enum=\"hasEnum\"\n :hideModelNames\n :isDiscriminator=\"isDiscriminatorProperty\"\n :modelName=\"modelName\"\n :required\n :value=\"optimizedValue\">\n <template\n v-if=\"name\"\n #name>\n <WithBreadcrumb\n :breadcrumb=\"shouldHaveLink ? childBreadcrumb : undefined\"\n :eventBus=\"eventBus\">\n <span\n v-if=\"variant === 'patternProperties'\"\n class=\"property-name-pattern-properties\">\n <ScalarWrappingText\n preset=\"property\"\n :text=\"name\" />\n </span>\n <span\n v-else-if=\"variant === 'additionalProperties'\"\n class=\"property-name-additional-properties\">\n <ScalarWrappingText\n preset=\"property\"\n :text=\"name\" />\n </span>\n <ScalarWrappingText\n v-else\n preset=\"property\"\n :text=\"name\" />\n </WithBreadcrumb>\n </template>\n <template\n v-if=\"optimizedValue?.example !== undefined\"\n #example>\n Example:\n {{ optimizedValue.example }}\n </template>\n </SchemaPropertyHeading>\n\n <!-- Description -->\n <div\n v-if=\"displayDescription || propertyDescription\"\n class=\"property-description\">\n <ScalarMarkdown\n :value=\"displayDescription || propertyDescription || ''\" />\n </div>\n\n <!-- Enum for property names -->\n <SchemaEnums\n v-if=\"propertyNamesEnum && propertyNamesEnum.length > 0\"\n propertyNames\n :value=\"{ enum: propertyNamesEnum } as SchemaObject\" />\n\n <!-- Enum values -->\n <SchemaEnums\n v-if=\"enumValues.length > 0\"\n :value=\"optimizedValue\" />\n\n <!-- Object -->\n <div\n v-if=\"shouldRenderObjectProperties\"\n class=\"children\">\n <Schema\n :breadcrumb=\"childBreadcrumb\"\n :compact=\"compact\"\n :eventBus=\"eventBus\"\n :level=\"level + 1\"\n :name=\"name\"\n :noncollapsible=\"noncollapsible\"\n :options=\"options\"\n :schema=\"objectSchemaForChildren\" />\n </div>\n\n <!-- Array of objects or nested arrays -->\n <div\n v-if=\"shouldRenderArrayOfObjects && resolvedArrayItems\"\n class=\"children\">\n <Schema\n :compact=\"compact\"\n :eventBus=\"eventBus\"\n :level=\"level + 1\"\n :name=\"name\"\n :noncollapsible=\"noncollapsible\"\n :options=\"options\"\n :schema=\"resolve.schema(resolvedArrayItems)\" />\n </div>\n\n <!-- Compositions -->\n <SchemaComposition\n v-for=\"compositionData in compositionsToRender\"\n :key=\"compositionData.composition\"\n :breadcrumb=\"breadcrumb\"\n :compact=\"compact\"\n :composition=\"compositionData.composition\"\n :discriminator=\"schema?.discriminator\"\n :eventBus=\"eventBus\"\n :hideHeading=\"hideHeading\"\n :level=\"level\"\n :name=\"name\"\n :noncollapsible=\"noncollapsible\"\n :options=\"options\"\n :schema=\"compositionData.value\" />\n <SpecificationExtension :value=\"optimizedValue\" />\n </component>\n</template>\n\n<style scoped>\n.property {\n color: var(--scalar-color-1);\n display: flex;\n flex-direction: column;\n padding: 10px;\n font-size: var(--scalar-small);\n position: relative;\n}\n\n/** Remove top padding for top level schema card */\n.property.property--level-0:has(\n > .property-rule\n > .schema-card\n > .schema-properties.schema-properties-open\n > ul\n > li.property\n ) {\n padding-top: 0;\n}\n\n.property--compact.property--level-0,\n.property--compact.property--level-1 {\n padding: 10px 0;\n}\n\n.composition-panel .property.property.property.property--level-0 {\n padding: 0px;\n}\n\n.property--compact.property--level-0\n .composition-panel\n .property--compact.property--level-1 {\n padding: 8px;\n}\n\n/* if a property doesn't have a heading, remove the top padding */\n.property:has(> .property-rule:nth-of-type(1)):not(.property--compact) {\n padding-top: 8px;\n padding-bottom: 8px;\n}\n\n.property--deprecated {\n background: repeating-linear-gradient(\n -45deg,\n var(--scalar-background-2) 0,\n var(--scalar-background-2) 2px,\n transparent 2px,\n transparent 5px\n );\n background-size: 100%;\n}\n\n.property--deprecated > * {\n opacity: 0.75;\n}\n\n.property-description {\n margin-top: 6px;\n line-height: 1.4;\n font-size: var(--scalar-small);\n}\n\n.property-description:has(+ .property-rule) {\n margin-bottom: 9px;\n}\n\n:deep(.property-description) * {\n color: var(--scalar-color-2) !important;\n}\n\n.property:not(:last-of-type) {\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.property-description + .children,\n.children + .property-rule {\n margin-top: 9px;\n}\n\n.children {\n display: flex;\n flex-direction: column;\n}\n\n.children .property--compact.property--level-1 {\n padding: 12px;\n}\n\n.property-example-value {\n all: unset;\n font-family: var(--scalar-font-code);\n padding: 6px;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.property-rule {\n border-radius: var(--scalar-radius-lg);\n display: flex;\n flex-direction: column;\n}\n\n.property-rule\n :deep(\n .composition-panel\n .schema-card--level-1\n > .schema-properties.schema-properties-open\n ) {\n border-radius: 0 0 var(--scalar-radius-lg) var(--scalar-radius-lg);\n}\n\n.property-rule\n :deep(.composition-panel > .schema-card > .schema-card-description) {\n padding: 10px;\n border-left: var(--scalar-border-width) solid var(--scalar-border-color);\n border-right: var(--scalar-border-width) solid var(--scalar-border-color);\n\n & + .schema-properties {\n margin-top: 0;\n }\n}\n\n.property-example {\n background: transparent;\n border: none;\n display: flex;\n flex-direction: row;\n gap: 8px;\n}\n\n.property-example-label,\n.property-example-value {\n padding: 3px 0 0 0;\n}\n\n.property-example-value {\n background: var(--scalar-background-2);\n border-top: 0;\n border-radius: var(--scalar-radius);\n padding: 3px 4px;\n}\n\n.property-name {\n font-family: var(--scalar-font-code);\n font-weight: var(--scalar-semibold);\n}\n\n.property-name-additional-properties::before,\n.property-name-pattern-properties::before {\n text-transform: uppercase;\n font-size: var(--scalar-micro);\n display: inline-block;\n padding: 2px 4px;\n border-radius: var(--scalar-radius);\n color: var(--scalar-color-1);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n background-color: var(--scalar-background-2);\n margin-right: 4px;\n}\n\n.property-name-pattern-properties::before {\n content: 'regex';\n}\n\n.property-name-additional-properties,\n.property-name-pattern-properties {\n border: 1px dashed var(--scalar-border-color);\n color: var(--scalar-color-accent);\n display: inline-block;\n padding: 2px;\n border-radius: var(--scalar-radius);\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type {\n DiscriminatorObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport { isTypeObject } from '@/components/Content/Schema/helpers/is-type-object'\nimport { sortPropertyNames } from '@/components/Content/Schema/helpers/sort-property-names'\nimport type { SchemaOptions } from '@/components/Content/Schema/types'\n\nimport SchemaProperty from './SchemaProperty.vue'\n\nconst { schema, discriminator, options } = defineProps<{\n schema: SchemaObject\n discriminator?: DiscriminatorObject\n compact?: boolean\n hideHeading?: boolean\n level?: number\n hideModelNames?: boolean\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n options: SchemaOptions\n}>()\n\n/**\n * Sorts properties by required status first, then alphabetically.\n * Required properties appear first, followed by optional properties.\n */\nconst sortedProperties = computed(() =>\n sortPropertyNames(schema, discriminator, options),\n)\n\n/**\n * Get the display name for additional properties.\n *\n * Checks x-additionalPropertiesName extension first, then falls back to the\n * propertyNames schema title if available.\n */\nconst getAdditionalPropertiesName = (\n _additionalProperties: Extract<\n SchemaObject,\n { type: 'object' }\n >['additionalProperties'],\n _propertyNames?: Extract<SchemaObject, { type: 'object' }>['propertyNames'],\n) => {\n const additionalProperties =\n typeof _additionalProperties === 'boolean'\n ? _additionalProperties\n : resolve.schema(_additionalProperties)\n\n if (\n typeof additionalProperties === 'object' &&\n typeof additionalProperties['x-additionalPropertiesName'] === 'string' &&\n additionalProperties['x-additionalPropertiesName'].trim().length > 0\n ) {\n return `${additionalProperties['x-additionalPropertiesName'].trim()}`\n }\n\n // Fall back to the propertyNames title when available\n if (_propertyNames) {\n const resolved = resolve.schema(_propertyNames)\n if (resolved?.title) {\n return resolved.title\n }\n }\n\n return 'propertyName'\n}\n\n/**\n * Extract enum values from the propertyNames schema.\n *\n * JSON Schema's propertyNames keyword constrains which keys are valid\n * in an object with additionalProperties. When it contains an enum,\n * these are the allowed key names.\n */\nconst getPropertyNamesEnum = (\n _propertyNames?: Extract<SchemaObject, { type: 'object' }>['propertyNames'],\n): string[] | undefined => {\n if (!_propertyNames) {\n return undefined\n }\n\n const resolved = resolve.schema(_propertyNames)\n if (\n resolved &&\n 'enum' in resolved &&\n Array.isArray(resolved.enum) &&\n resolved.enum.length > 0\n ) {\n return resolved.enum as string[]\n }\n\n return undefined\n}\n\n/** Enum values for the property keys, derived from propertyNames if present. */\nconst additionalPropertiesEnum = computed(() => {\n if (!isTypeObject(schema) || !schema.additionalProperties) {\n return undefined\n }\n return getPropertyNamesEnum(schema.propertyNames)\n})\n\n/**\n * Get the value for additional properties.\n *\n * When additionalProperties is true or an empty object, it should render as { type: 'anything' }.\n */\nconst getAdditionalPropertiesValue = (\n additionalProperties: Extract<\n SchemaObject,\n { type: 'object' }\n >['additionalProperties'],\n): SchemaObject => {\n if (\n additionalProperties === true ||\n (typeof additionalProperties === 'object' &&\n Object.keys(additionalProperties).length === 0) ||\n typeof additionalProperties !== 'object' ||\n !('type' in additionalProperties)\n ) {\n return {\n // @ts-expect-error - ask hans\n type: 'anything',\n ...(typeof additionalProperties === 'object' ? additionalProperties : {}),\n }\n }\n\n return additionalProperties\n}\n</script>\n\n<template>\n <!-- Properties -->\n <template v-if=\"isTypeObject(schema) && schema.properties\">\n <SchemaProperty\n v-for=\"property in sortedProperties\"\n :key=\"property\"\n :breadcrumb\n :compact\n :discriminator\n :eventBus=\"eventBus\"\n :hideHeading\n :hideModelNames\n :level\n :name=\"property\"\n :options=\"options\"\n :required=\"schema.required?.includes(property)\"\n :schema=\"resolve.schema(schema.properties[property])\" />\n </template>\n\n <!-- patternProperties -->\n <template v-if=\"isTypeObject(schema) && schema.patternProperties\">\n <SchemaProperty\n v-for=\"[key, property] in Object.entries(schema.patternProperties)\"\n :key=\"key\"\n :breadcrumb\n :compact\n :discriminator\n :eventBus=\"eventBus\"\n :hideHeading\n :hideModelNames=\"hideModelNames\"\n :level\n :name=\"key\"\n :options=\"options\"\n :schema=\"resolve.schema(property)\" />\n </template>\n\n <!-- additionalProperties -->\n <template v-if=\"isTypeObject(schema) && schema.additionalProperties\">\n <SchemaProperty\n :breadcrumb\n :compact\n :discriminator\n :eventBus=\"eventBus\"\n :hideHeading\n :hideModelNames\n :level\n :name=\"\n getAdditionalPropertiesName(\n schema.additionalProperties,\n schema.propertyNames,\n )\n \"\n noncollapsible\n :options=\"options\"\n :propertyNamesEnum=\"additionalPropertiesEnum\"\n :schema=\"getAdditionalPropertiesValue(schema.additionalProperties)\"\n variant=\"additionalProperties\" />\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { resolve } from '@scalar/workspace-store/resolve'\nimport type {\n DiscriminatorObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport { isTypeObject } from '@/components/Content/Schema/helpers/is-type-object'\nimport { sortPropertyNames } from '@/components/Content/Schema/helpers/sort-property-names'\nimport type { SchemaOptions } from '@/components/Content/Schema/types'\n\nimport SchemaProperty from './SchemaProperty.vue'\n\nconst { schema, discriminator, options } = defineProps<{\n schema: SchemaObject\n discriminator?: DiscriminatorObject\n compact?: boolean\n hideHeading?: boolean\n level?: number\n hideModelNames?: boolean\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n options: SchemaOptions\n}>()\n\n/**\n * Sorts properties by required status first, then alphabetically.\n * Required properties appear first, followed by optional properties.\n */\nconst sortedProperties = computed(() =>\n sortPropertyNames(schema, discriminator, options),\n)\n\n/**\n * Get the display name for additional properties.\n *\n * Checks x-additionalPropertiesName extension first, then falls back to the\n * propertyNames schema title if available.\n */\nconst getAdditionalPropertiesName = (\n _additionalProperties: Extract<\n SchemaObject,\n { type: 'object' }\n >['additionalProperties'],\n _propertyNames?: Extract<SchemaObject, { type: 'object' }>['propertyNames'],\n) => {\n const additionalProperties =\n typeof _additionalProperties === 'boolean'\n ? _additionalProperties\n : resolve.schema(_additionalProperties)\n\n if (\n typeof additionalProperties === 'object' &&\n typeof additionalProperties['x-additionalPropertiesName'] === 'string' &&\n additionalProperties['x-additionalPropertiesName'].trim().length > 0\n ) {\n return `${additionalProperties['x-additionalPropertiesName'].trim()}`\n }\n\n // Fall back to the propertyNames title when available\n if (_propertyNames) {\n const resolved = resolve.schema(_propertyNames)\n if (resolved?.title) {\n return resolved.title\n }\n }\n\n return 'propertyName'\n}\n\n/**\n * Extract enum values from the propertyNames schema.\n *\n * JSON Schema's propertyNames keyword constrains which keys are valid\n * in an object with additionalProperties. When it contains an enum,\n * these are the allowed key names.\n */\nconst getPropertyNamesEnum = (\n _propertyNames?: Extract<SchemaObject, { type: 'object' }>['propertyNames'],\n): string[] | undefined => {\n if (!_propertyNames) {\n return undefined\n }\n\n const resolved = resolve.schema(_propertyNames)\n if (\n resolved &&\n 'enum' in resolved &&\n Array.isArray(resolved.enum) &&\n resolved.enum.length > 0\n ) {\n return resolved.enum as string[]\n }\n\n return undefined\n}\n\n/** Enum values for the property keys, derived from propertyNames if present. */\nconst additionalPropertiesEnum = computed(() => {\n if (!isTypeObject(schema) || !schema.additionalProperties) {\n return undefined\n }\n return getPropertyNamesEnum(schema.propertyNames)\n})\n\n/**\n * Get the value for additional properties.\n *\n * When additionalProperties is true or an empty object, it should render as { type: 'anything' }.\n */\nconst getAdditionalPropertiesValue = (\n additionalProperties: Extract<\n SchemaObject,\n { type: 'object' }\n >['additionalProperties'],\n): SchemaObject => {\n if (\n additionalProperties === true ||\n (typeof additionalProperties === 'object' &&\n Object.keys(additionalProperties).length === 0) ||\n typeof additionalProperties !== 'object' ||\n !('type' in additionalProperties)\n ) {\n return {\n // @ts-expect-error - ask hans\n type: 'anything',\n ...(typeof additionalProperties === 'object' ? additionalProperties : {}),\n }\n }\n\n return additionalProperties\n}\n</script>\n\n<template>\n <!-- Properties -->\n <template v-if=\"isTypeObject(schema) && schema.properties\">\n <SchemaProperty\n v-for=\"property in sortedProperties\"\n :key=\"property\"\n :breadcrumb\n :compact\n :discriminator\n :eventBus=\"eventBus\"\n :hideHeading\n :hideModelNames\n :level\n :name=\"property\"\n :options=\"options\"\n :required=\"schema.required?.includes(property)\"\n :schema=\"resolve.schema(schema.properties[property])\" />\n </template>\n\n <!-- patternProperties -->\n <template v-if=\"isTypeObject(schema) && schema.patternProperties\">\n <SchemaProperty\n v-for=\"[key, property] in Object.entries(schema.patternProperties)\"\n :key=\"key\"\n :breadcrumb\n :compact\n :discriminator\n :eventBus=\"eventBus\"\n :hideHeading\n :hideModelNames=\"hideModelNames\"\n :level\n :name=\"key\"\n :options=\"options\"\n :schema=\"resolve.schema(property)\" />\n </template>\n\n <!-- additionalProperties -->\n <template v-if=\"isTypeObject(schema) && schema.additionalProperties\">\n <SchemaProperty\n :breadcrumb\n :compact\n :discriminator\n :eventBus=\"eventBus\"\n :hideHeading\n :hideModelNames\n :level\n :name=\"\n getAdditionalPropertiesName(\n schema.additionalProperties,\n schema.propertyNames,\n )\n \"\n noncollapsible\n :options=\"options\"\n :propertyNamesEnum=\"additionalPropertiesEnum\"\n :schema=\"getAdditionalPropertiesValue(schema.additionalProperties)\"\n variant=\"additionalProperties\" />\n </template>\n</template>\n","<script lang=\"ts\" setup>\nimport { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'\nimport { ScalarIcon, ScalarMarkdown } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type {\n DiscriminatorObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport type { SchemaOptions } from '@/components/Content/Schema/types'\nimport ScreenReader from '@/components/ScreenReader.vue'\n\nimport { isEmptySchemaObject } from './helpers/is-empty-schema-object'\nimport { isTypeObject } from './helpers/is-type-object'\nimport SchemaHeading from './SchemaHeading.vue'\nimport SchemaObjectProperties from './SchemaObjectProperties.vue'\nimport SchemaProperty from './SchemaProperty.vue'\n\nconst {\n schema,\n level = 0,\n name,\n compact,\n noncollapsible = false,\n hideHeading,\n additionalProperties,\n discriminator,\n breadcrumb,\n hideModelNames = false,\n options,\n} = defineProps<{\n schema?: SchemaObject\n /** Track how deep we've gone */\n level?: number\n /* Show as a heading */\n name?: string\n /** A tighter layout with less borders and without a heading */\n compact?: boolean\n /** Shows a toggle to hide/show children */\n noncollapsible?: boolean\n /** Hide the heading */\n hideHeading?: boolean\n /** Show a special one way toggle for additional properties, also has a top border when open */\n additionalProperties?: boolean\n /** Hide model names in type display */\n hideModelNames?: boolean\n /** Discriminator object */\n discriminator?: DiscriminatorObject\n /** Breadcrumb for the schema */\n breadcrumb?: string[]\n /** Event bus emitting actions */\n eventBus: WorkspaceEventBus | null\n /** Move the options into a single prop so they are easy to pass around */\n options: SchemaOptions\n}>()\n\n/**\n * Determines whether to show the collapse/expand toggle button.\n * We hide the toggle for non-collapsible schemas and root-level schemas.\n */\nconst shouldShowToggle = computed((): boolean => {\n return !noncollapsible && level > 0\n})\n\n/** Gets the description to show for the schema */\nconst schemaDescription = computed(() => {\n // For the request body we want to show the base description or the first allOf schema description\n if (schema?.allOf && schema.allOf.length > 0 && name === 'Request Body') {\n return schema.description || schema.allOf[0]?.description || null\n }\n\n // Don't show description if there's no description or it's not a string\n if (!schema?.description || typeof schema.description !== 'string') {\n return null\n }\n\n // Don't show description if the schema has other composition keywords\n // This prevents duplicate descriptions when individual schemas are part of compositions\n if (schema.oneOf || schema.anyOf) {\n return null\n }\n\n // Don't show description for enum schemas (they have special handling)\n if (schema.enum) {\n return null\n }\n\n // Will be shown in the properties anyway\n if (\n !('properties' in schema) &&\n !('patternProperties' in schema) &&\n !('additionalProperties' in schema)\n ) {\n return null\n }\n\n // Return the schema's own description\n return schema.description\n})\n\n// Prevent click action if noncollapsible\nconst handleClick = (e: MouseEvent) => noncollapsible && e.stopPropagation()\n</script>\n<template>\n <Disclosure\n v-if=\"typeof schema === 'object' && Object.keys(schema).length\"\n v-slot=\"{ open }\"\n :defaultOpen=\"noncollapsible\">\n <div\n class=\"schema-card\"\n :class=\"[\n `schema-card--level-${level}`,\n { 'schema-card--compact': compact, 'schema-card--open': open },\n { 'border-t': additionalProperties && open },\n ]\">\n <!-- Schema description -->\n <div\n v-if=\"schemaDescription\"\n class=\"schema-card-description\">\n <ScalarMarkdown :value=\"schemaDescription\" />\n </div>\n <div\n v-if=\"isEmptySchemaObject(schema)\"\n class=\"pt-2\">\n Empty object\n </div>\n <div\n class=\"schema-properties\"\n :class=\"{\n 'schema-properties-open': open,\n }\">\n <!-- Toggle to collapse/expand long lists of properties -->\n <div\n v-if=\"additionalProperties\"\n v-show=\"!open\"\n class=\"schema-properties\">\n <DisclosureButton\n as=\"button\"\n class=\"schema-card-title schema-card-title--compact\"\n @click.capture=\"handleClick\">\n <ScalarIcon\n class=\"schema-card-title-icon\"\n icon=\"Add\"\n size=\"sm\" />\n Show additional properties\n <ScreenReader v-if=\"name\">for {{ name }}</ScreenReader>\n </DisclosureButton>\n </div>\n\n <DisclosureButton\n v-else-if=\"shouldShowToggle\"\n v-show=\"!hideHeading && !(noncollapsible && compact)\"\n :as=\"noncollapsible ? 'div' : 'button'\"\n class=\"schema-card-title\"\n :class=\"{ 'schema-card-title--compact': compact }\"\n :style=\"{\n top: `calc(var(--refs-viewport-offset) + calc(var(--schema-title-height) * ${level}))`,\n }\"\n @click.capture=\"handleClick\">\n <template v-if=\"compact\">\n <ScalarIcon\n class=\"schema-card-title-icon\"\n :class=\"{ 'schema-card-title-icon--open': open }\"\n icon=\"Add\"\n size=\"sm\" />\n <template v-if=\"open\">\n Hide {{ schema?.title ?? 'Child Attributes' }}\n </template>\n <template v-else>\n Show {{ schema?.title ?? 'Child Attributes' }}\n </template>\n <ScreenReader v-if=\"name\">for {{ name }}</ScreenReader>\n </template>\n <template v-else>\n <ScalarIcon\n class=\"schema-card-title-icon\"\n :class=\"{ 'schema-card-title-icon--open': open }\"\n icon=\"Add\"\n size=\"sm\" />\n <SchemaHeading\n :name=\"schema?.title ?? name\"\n :value=\"schema\" />\n </template>\n </DisclosureButton>\n <DisclosurePanel\n v-if=\"!additionalProperties || open\"\n as=\"ul\"\n :static=\"!shouldShowToggle\">\n <!-- Object properties -->\n <SchemaObjectProperties\n v-if=\"isTypeObject(schema)\"\n :breadcrumb\n :compact\n :discriminator\n :eventBus=\"eventBus\"\n :hideHeading\n :hideModelNames\n :level=\"level + 1\"\n :options\n :schema />\n <!-- Not an object -->\n <template v-else>\n <SchemaProperty\n v-if=\"schema\"\n :breadcrumb\n :compact\n :eventBus=\"eventBus\"\n :hideHeading\n :hideModelNames\n :level\n :options\n :schema />\n </template>\n </DisclosurePanel>\n </div>\n </div>\n </Disclosure>\n</template>\n<style scoped>\n.error {\n background-color: var(--scalar-color-red);\n}\n.schema-card {\n font-size: var(--scalar-font-size-4);\n color: var(--scalar-color-1);\n}\n.schema-card-title {\n height: var(--schema-title-height);\n\n padding: 6px 8px;\n\n display: flex;\n align-items: center;\n gap: 4px;\n\n color: var(--scalar-color-2);\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-mini);\n border-bottom: var(--scalar-border-width) solid transparent;\n}\nbutton.schema-card-title {\n cursor: pointer;\n}\nbutton.schema-card-title:hover {\n color: var(--scalar-color-1);\n}\n.schema-card-title-icon--open {\n transform: rotate(45deg);\n}\n.schema-properties-open > .schema-card-title {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n.schema-properties-open > .schema-properties {\n width: fit-content;\n}\n.schema-card-description {\n color: var(--scalar-color-2);\n}\n.schema-card-description + .schema-properties {\n width: fit-content;\n}\n.schema-card-description + .schema-properties {\n margin-top: 8px;\n}\n.schema-card--level-0:nth-of-type(1)\n > .schema-card-description:has(+ .schema-properties) {\n margin-bottom: -8px;\n padding-bottom: 8px;\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n.schema-card--level-0\n ~ .schema-card--level-0\n > .schema-card-description:has(+ .schema-properties) {\n padding-top: 8px;\n}\n\n.schema-properties-open.schema-properties,\n.schema-properties-open > .schema-card--open {\n width: 100%;\n}\n.schema-properties {\n display: flex;\n flex-direction: column;\n\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n width: fit-content;\n}\n.schema-properties-name {\n width: 100%;\n}\n.schema-properties .schema-properties {\n border-radius: 13.5px;\n}\n.schema-properties .schema-properties.schema-properties-open {\n border-radius: var(--scalar-radius-lg);\n}\n.schema-properties-open {\n width: 100%;\n}\n.schema-card--compact {\n align-self: flex-start;\n}\n.schema-card--compact.schema-card--open {\n align-self: initial;\n}\n.schema-card-title--compact {\n color: var(--scalar-color-2);\n padding: 6px 10px 6px 8px;\n height: auto;\n border-bottom: none;\n}\n.schema-card-title--compact > .schema-card-title-icon {\n margin: 0;\n}\n.schema-card-title--compact > .schema-card-title-icon--open {\n transform: rotate(45deg);\n}\n.schema-properties-open > .schema-card-title--compact {\n position: static;\n}\n.property--level-0\n > .schema-properties\n > .schema-card--level-0\n > .schema-properties {\n border: none;\n}\n.property--level-0\n .schema-card--level-0:not(.schema-card--compact)\n .property--level-1 {\n padding: 0 0 8px;\n}\n:not(.composition-panel)\n > .schema-card--compact.schema-card--level-0\n > .schema-properties {\n border: none;\n}\n:deep(.schema-card-description) p {\n font-size: var(--scalar-small, var(--scalar-paragraph));\n color: var(--scalar-color-2);\n line-height: 1.5;\n margin-bottom: 0;\n display: block;\n margin-bottom: 6px;\n}\n.children .schema-card-description:first-of-type {\n padding-top: 0;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'\nimport { ScalarIcon, ScalarMarkdown } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type {\n DiscriminatorObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport type { SchemaOptions } from '@/components/Content/Schema/types'\nimport ScreenReader from '@/components/ScreenReader.vue'\n\nimport { isEmptySchemaObject } from './helpers/is-empty-schema-object'\nimport { isTypeObject } from './helpers/is-type-object'\nimport SchemaHeading from './SchemaHeading.vue'\nimport SchemaObjectProperties from './SchemaObjectProperties.vue'\nimport SchemaProperty from './SchemaProperty.vue'\n\nconst {\n schema,\n level = 0,\n name,\n compact,\n noncollapsible = false,\n hideHeading,\n additionalProperties,\n discriminator,\n breadcrumb,\n hideModelNames = false,\n options,\n} = defineProps<{\n schema?: SchemaObject\n /** Track how deep we've gone */\n level?: number\n /* Show as a heading */\n name?: string\n /** A tighter layout with less borders and without a heading */\n compact?: boolean\n /** Shows a toggle to hide/show children */\n noncollapsible?: boolean\n /** Hide the heading */\n hideHeading?: boolean\n /** Show a special one way toggle for additional properties, also has a top border when open */\n additionalProperties?: boolean\n /** Hide model names in type display */\n hideModelNames?: boolean\n /** Discriminator object */\n discriminator?: DiscriminatorObject\n /** Breadcrumb for the schema */\n breadcrumb?: string[]\n /** Event bus emitting actions */\n eventBus: WorkspaceEventBus | null\n /** Move the options into a single prop so they are easy to pass around */\n options: SchemaOptions\n}>()\n\n/**\n * Determines whether to show the collapse/expand toggle button.\n * We hide the toggle for non-collapsible schemas and root-level schemas.\n */\nconst shouldShowToggle = computed((): boolean => {\n return !noncollapsible && level > 0\n})\n\n/** Gets the description to show for the schema */\nconst schemaDescription = computed(() => {\n // For the request body we want to show the base description or the first allOf schema description\n if (schema?.allOf && schema.allOf.length > 0 && name === 'Request Body') {\n return schema.description || schema.allOf[0]?.description || null\n }\n\n // Don't show description if there's no description or it's not a string\n if (!schema?.description || typeof schema.description !== 'string') {\n return null\n }\n\n // Don't show description if the schema has other composition keywords\n // This prevents duplicate descriptions when individual schemas are part of compositions\n if (schema.oneOf || schema.anyOf) {\n return null\n }\n\n // Don't show description for enum schemas (they have special handling)\n if (schema.enum) {\n return null\n }\n\n // Will be shown in the properties anyway\n if (\n !('properties' in schema) &&\n !('patternProperties' in schema) &&\n !('additionalProperties' in schema)\n ) {\n return null\n }\n\n // Return the schema's own description\n return schema.description\n})\n\n// Prevent click action if noncollapsible\nconst handleClick = (e: MouseEvent) => noncollapsible && e.stopPropagation()\n</script>\n<template>\n <Disclosure\n v-if=\"typeof schema === 'object' && Object.keys(schema).length\"\n v-slot=\"{ open }\"\n :defaultOpen=\"noncollapsible\">\n <div\n class=\"schema-card\"\n :class=\"[\n `schema-card--level-${level}`,\n { 'schema-card--compact': compact, 'schema-card--open': open },\n { 'border-t': additionalProperties && open },\n ]\">\n <!-- Schema description -->\n <div\n v-if=\"schemaDescription\"\n class=\"schema-card-description\">\n <ScalarMarkdown :value=\"schemaDescription\" />\n </div>\n <div\n v-if=\"isEmptySchemaObject(schema)\"\n class=\"pt-2\">\n Empty object\n </div>\n <div\n class=\"schema-properties\"\n :class=\"{\n 'schema-properties-open': open,\n }\">\n <!-- Toggle to collapse/expand long lists of properties -->\n <div\n v-if=\"additionalProperties\"\n v-show=\"!open\"\n class=\"schema-properties\">\n <DisclosureButton\n as=\"button\"\n class=\"schema-card-title schema-card-title--compact\"\n @click.capture=\"handleClick\">\n <ScalarIcon\n class=\"schema-card-title-icon\"\n icon=\"Add\"\n size=\"sm\" />\n Show additional properties\n <ScreenReader v-if=\"name\">for {{ name }}</ScreenReader>\n </DisclosureButton>\n </div>\n\n <DisclosureButton\n v-else-if=\"shouldShowToggle\"\n v-show=\"!hideHeading && !(noncollapsible && compact)\"\n :as=\"noncollapsible ? 'div' : 'button'\"\n class=\"schema-card-title\"\n :class=\"{ 'schema-card-title--compact': compact }\"\n :style=\"{\n top: `calc(var(--refs-viewport-offset) + calc(var(--schema-title-height) * ${level}))`,\n }\"\n @click.capture=\"handleClick\">\n <template v-if=\"compact\">\n <ScalarIcon\n class=\"schema-card-title-icon\"\n :class=\"{ 'schema-card-title-icon--open': open }\"\n icon=\"Add\"\n size=\"sm\" />\n <template v-if=\"open\">\n Hide {{ schema?.title ?? 'Child Attributes' }}\n </template>\n <template v-else>\n Show {{ schema?.title ?? 'Child Attributes' }}\n </template>\n <ScreenReader v-if=\"name\">for {{ name }}</ScreenReader>\n </template>\n <template v-else>\n <ScalarIcon\n class=\"schema-card-title-icon\"\n :class=\"{ 'schema-card-title-icon--open': open }\"\n icon=\"Add\"\n size=\"sm\" />\n <SchemaHeading\n :name=\"schema?.title ?? name\"\n :value=\"schema\" />\n </template>\n </DisclosureButton>\n <DisclosurePanel\n v-if=\"!additionalProperties || open\"\n as=\"ul\"\n :static=\"!shouldShowToggle\">\n <!-- Object properties -->\n <SchemaObjectProperties\n v-if=\"isTypeObject(schema)\"\n :breadcrumb\n :compact\n :discriminator\n :eventBus=\"eventBus\"\n :hideHeading\n :hideModelNames\n :level=\"level + 1\"\n :options\n :schema />\n <!-- Not an object -->\n <template v-else>\n <SchemaProperty\n v-if=\"schema\"\n :breadcrumb\n :compact\n :eventBus=\"eventBus\"\n :hideHeading\n :hideModelNames\n :level\n :options\n :schema />\n </template>\n </DisclosurePanel>\n </div>\n </div>\n </Disclosure>\n</template>\n<style scoped>\n.error {\n background-color: var(--scalar-color-red);\n}\n.schema-card {\n font-size: var(--scalar-font-size-4);\n color: var(--scalar-color-1);\n}\n.schema-card-title {\n height: var(--schema-title-height);\n\n padding: 6px 8px;\n\n display: flex;\n align-items: center;\n gap: 4px;\n\n color: var(--scalar-color-2);\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-mini);\n border-bottom: var(--scalar-border-width) solid transparent;\n}\nbutton.schema-card-title {\n cursor: pointer;\n}\nbutton.schema-card-title:hover {\n color: var(--scalar-color-1);\n}\n.schema-card-title-icon--open {\n transform: rotate(45deg);\n}\n.schema-properties-open > .schema-card-title {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n.schema-properties-open > .schema-properties {\n width: fit-content;\n}\n.schema-card-description {\n color: var(--scalar-color-2);\n}\n.schema-card-description + .schema-properties {\n width: fit-content;\n}\n.schema-card-description + .schema-properties {\n margin-top: 8px;\n}\n.schema-card--level-0:nth-of-type(1)\n > .schema-card-description:has(+ .schema-properties) {\n margin-bottom: -8px;\n padding-bottom: 8px;\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n.schema-card--level-0\n ~ .schema-card--level-0\n > .schema-card-description:has(+ .schema-properties) {\n padding-top: 8px;\n}\n\n.schema-properties-open.schema-properties,\n.schema-properties-open > .schema-card--open {\n width: 100%;\n}\n.schema-properties {\n display: flex;\n flex-direction: column;\n\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n width: fit-content;\n}\n.schema-properties-name {\n width: 100%;\n}\n.schema-properties .schema-properties {\n border-radius: 13.5px;\n}\n.schema-properties .schema-properties.schema-properties-open {\n border-radius: var(--scalar-radius-lg);\n}\n.schema-properties-open {\n width: 100%;\n}\n.schema-card--compact {\n align-self: flex-start;\n}\n.schema-card--compact.schema-card--open {\n align-self: initial;\n}\n.schema-card-title--compact {\n color: var(--scalar-color-2);\n padding: 6px 10px 6px 8px;\n height: auto;\n border-bottom: none;\n}\n.schema-card-title--compact > .schema-card-title-icon {\n margin: 0;\n}\n.schema-card-title--compact > .schema-card-title-icon--open {\n transform: rotate(45deg);\n}\n.schema-properties-open > .schema-card-title--compact {\n position: static;\n}\n.property--level-0\n > .schema-properties\n > .schema-card--level-0\n > .schema-properties {\n border: none;\n}\n.property--level-0\n .schema-card--level-0:not(.schema-card--compact)\n .property--level-1 {\n padding: 0 0 8px;\n}\n:not(.composition-panel)\n > .schema-card--compact.schema-card--level-0\n > .schema-properties {\n border: none;\n}\n:deep(.schema-card-description) p {\n font-size: var(--scalar-small, var(--scalar-paragraph));\n color: var(--scalar-color-2);\n line-height: 1.5;\n margin-bottom: 0;\n display: block;\n margin-bottom: 6px;\n}\n.children .schema-card-description:first-of-type {\n padding-top: 0;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { getHttpMethodInfo } from '@scalar/helpers/http/http-info'\nimport type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport { normalizeHttpMethod } from '@scalar/helpers/http/normalize-http-method'\nimport { computed, type Component } from 'vue'\n\nconst props = defineProps<{\n /** The type of element to render as, defaults to `span` */\n as?: Component | string\n /** The css style property or variable that will be set to the request method color, defaults to `color` */\n property?: string\n /** Whether or not to abbreviated the slot content */\n short?: boolean\n /** The HTTP method to show */\n method: HttpMethod | string\n}>()\n\n/** Grabs the method info object which contains abbreviation, color, and background color etc */\nconst httpMethodInfo = computed(() =>\n getHttpMethodInfo(String(props.method || '')),\n)\n\n/** Full method name */\nconst normalized = computed(() => normalizeHttpMethod(props.method))\n</script>\n\n<template>\n <component\n :is=\"as ?? 'span'\"\n class=\"uppercase\"\n :style=\"{ [property || 'color']: httpMethodInfo.colorVar }\">\n <slot />\n {{ short ? httpMethodInfo.short : normalized }}\n </component>\n</template>\n","<script setup lang=\"ts\">\nimport { getHttpMethodInfo } from '@scalar/helpers/http/http-info'\nimport type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport { normalizeHttpMethod } from '@scalar/helpers/http/normalize-http-method'\nimport { computed, type Component } from 'vue'\n\nconst props = defineProps<{\n /** The type of element to render as, defaults to `span` */\n as?: Component | string\n /** The css style property or variable that will be set to the request method color, defaults to `color` */\n property?: string\n /** Whether or not to abbreviated the slot content */\n short?: boolean\n /** The HTTP method to show */\n method: HttpMethod | string\n}>()\n\n/** Grabs the method info object which contains abbreviation, color, and background color etc */\nconst httpMethodInfo = computed(() =>\n getHttpMethodInfo(String(props.method || '')),\n)\n\n/** Full method name */\nconst normalized = computed(() => normalizeHttpMethod(props.method))\n</script>\n\n<template>\n <component\n :is=\"as ?? 'span'\"\n class=\"uppercase\"\n :style=\"{ [property || 'color']: httpMethodInfo.colorVar }\">\n <slot />\n {{ short ? httpMethodInfo.short : normalized }}\n </component>\n</template>\n","import { getSecuritySchemes } from '@scalar/api-client/v2/blocks/operation-block'\nimport type {\n MergedSecuritySchemes,\n SecuritySchemeObjectSecret,\n} from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport { getSelectedSecurity } from '@scalar/api-client/v2/features/operation'\nimport type { SelectedSecurity } from '@scalar/workspace-store/entities/auth'\nimport type {\n OpenApiDocument,\n OperationObject,\n SecurityRequirementObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\n/** Builds a quick cache key from the sorted object keys */\nconst getKey = (requirement: SecurityRequirementObject) => Object.keys(requirement).sort().join(',')\n\n/**\n * Find the intersection between which security is selected on the document and what this operation requires\n *\n * If there is no overlap, we return the first requirement\n */\nexport const filterSelectedSecurity = (\n document: OpenApiDocument,\n operation: OperationObject | null,\n selectedSecurityDocument?: SelectedSecurity,\n selectedSecurityOperation?: SelectedSecurity,\n securitySchemes: MergedSecuritySchemes = {},\n): SecuritySchemeObjectSecret[] => {\n const securityRequirements = operation?.security ?? document.security ?? []\n\n /** The selected security keys for the document */\n const selectedSecurity = getSelectedSecurity(\n selectedSecurityDocument,\n selectedSecurityOperation,\n securityRequirements,\n )\n\n /** Build a set for O(1) lookup */\n const requirementSet = new Set(securityRequirements.map((r) => getKey(r)))\n\n // Lets check the selectedIndex first\n const selectedRequirement = selectedSecurity.selectedSchemes[selectedSecurity.selectedIndex]\n if (selectedRequirement && requirementSet.has(getKey(selectedRequirement))) {\n return getSecuritySchemes(securitySchemes, [selectedRequirement])\n }\n\n // Otherwise lets loop over all selected\n for (const selected of selectedSecurity.selectedSchemes) {\n if (requirementSet.has(getKey(selected))) {\n return getSecuritySchemes(securitySchemes, [selected])\n }\n }\n\n /**\n * If we are selected security on the document,\n * we should show the first requirement of the operation to show auth is required\n */\n if (operation?.security?.length) {\n return getSecuritySchemes(securitySchemes, securityRequirements.slice(0, 1))\n }\n\n return []\n}\n","import { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\n/**\n * Iterate through all available servers and pick the first one\n *\n * @example\n * getFirstServer([operation.servers, pathItem.servers, server])\n */\nexport const getFirstServer = (...availableServers: (ServerObject[] | ServerObject | null)[]): ServerObject | null => {\n for (const serverSource of availableServers) {\n if (!serverSource) {\n continue\n }\n\n // Handle single server object\n if (!Array.isArray(serverSource)) {\n const resolvedServer = getResolvedRef(serverSource) as ServerObject\n if (resolvedServer?.url) {\n return resolvedServer\n }\n continue\n }\n\n // Handle array of servers, pick the first one with a URL\n for (const server of serverSource) {\n const resolvedServer = getResolvedRef(server) as ServerObject\n if (resolvedServer?.url) {\n return resolvedServer\n }\n }\n }\n\n return null\n}\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n path: string\n deprecated?: boolean\n}>()\n\nconst isVariable = (part: string) => part.startsWith('{') && part.endsWith('}')\n\n// Split on the path variables\nconst pathParts = computed<string[]>(() => props.path.split(/({[^}]+})/))\n</script>\n<template>\n <span\n class=\"operation-path\"\n :class=\"{ deprecated: deprecated }\">\n <template\n v-for=\"(part, i) in pathParts\"\n :key=\"i\">\n <em v-if=\"isVariable(part)\">{{ part }}</em>\n <template v-else>{{ part }}</template>\n </template>\n </span>\n</template>\n<style scoped>\n.operation-path {\n overflow: hidden;\n word-wrap: break-word;\n font-weight: var(--scalar-semibold);\n line-break: anywhere;\n}\n.deprecated {\n text-decoration: line-through;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { computed } from 'vue'\n\nconst props = defineProps<{\n path: string\n deprecated?: boolean\n}>()\n\nconst isVariable = (part: string) => part.startsWith('{') && part.endsWith('}')\n\n// Split on the path variables\nconst pathParts = computed<string[]>(() => props.path.split(/({[^}]+})/))\n</script>\n<template>\n <span\n class=\"operation-path\"\n :class=\"{ deprecated: deprecated }\">\n <template\n v-for=\"(part, i) in pathParts\"\n :key=\"i\">\n <em v-if=\"isVariable(part)\">{{ part }}</em>\n <template v-else>{{ part }}</template>\n </template>\n </span>\n</template>\n<style scoped>\n.operation-path {\n overflow: hidden;\n word-wrap: break-word;\n font-weight: var(--scalar-semibold);\n line-break: anywhere;\n}\n.deprecated {\n text-decoration: line-through;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { getResolvedRefDeep } from '@scalar/api-client/v2/blocks/operation-code-sample'\nimport { ScalarCodeBlock, ScalarVirtualText } from '@scalar/components'\nimport { prettyPrintJson } from '@scalar/helpers/json/pretty-print-json'\nimport type { ReferenceType } from '@scalar/workspace-store/schemas/v3.1/strict/reference'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/schema'\nimport { computed } from 'vue'\n\nconst { id, schema } = defineProps<{\n id: string\n schema: ReferenceType<SchemaObject>\n}>()\n\nconst schemaContent = computed(() => {\n if (!schema) {\n return undefined\n }\n\n return prettyPrintJson(getResolvedRefDeep(schema))\n})\n\nconst VIRTUALIZATION_THRESHOLD = 20_000\n\nconst shouldVirtualizeSchema = computed(() => {\n return (schemaContent.value?.length ?? 0) > VIRTUALIZATION_THRESHOLD\n})\n</script>\n\n<template>\n <ScalarCodeBlock\n v-if=\"!shouldVirtualizeSchema\"\n :id=\"id\"\n class=\"bg-b-2\"\n lang=\"json\"\n :prettyPrintedContent=\"schemaContent ?? ''\" />\n <ScalarVirtualText\n v-else\n :id=\"id\"\n containerClass=\"custom-scroll scalar-code-block border rounded-b flex flex-1 max-h-screen\"\n contentClass=\"language-plaintext whitespace-pre font-code text-base\"\n :lineHeight=\"20\"\n :text=\"schemaContent ?? ''\" />\n</template>\n","<script setup lang=\"ts\">\nimport { getResolvedRefDeep } from '@scalar/api-client/v2/blocks/operation-code-sample'\nimport { ScalarCodeBlock, ScalarVirtualText } from '@scalar/components'\nimport { prettyPrintJson } from '@scalar/helpers/json/pretty-print-json'\nimport type { ReferenceType } from '@scalar/workspace-store/schemas/v3.1/strict/reference'\nimport type { SchemaObject } from '@scalar/workspace-store/schemas/v3.1/strict/schema'\nimport { computed } from 'vue'\n\nconst { id, schema } = defineProps<{\n id: string\n schema: ReferenceType<SchemaObject>\n}>()\n\nconst schemaContent = computed(() => {\n if (!schema) {\n return undefined\n }\n\n return prettyPrintJson(getResolvedRefDeep(schema))\n})\n\nconst VIRTUALIZATION_THRESHOLD = 20_000\n\nconst shouldVirtualizeSchema = computed(() => {\n return (schemaContent.value?.length ?? 0) > VIRTUALIZATION_THRESHOLD\n})\n</script>\n\n<template>\n <ScalarCodeBlock\n v-if=\"!shouldVirtualizeSchema\"\n :id=\"id\"\n class=\"bg-b-2\"\n lang=\"json\"\n :prettyPrintedContent=\"schemaContent ?? ''\" />\n <ScalarVirtualText\n v-else\n :id=\"id\"\n containerClass=\"custom-scroll scalar-code-block border rounded-b flex flex-1 max-h-screen\"\n contentClass=\"language-plaintext whitespace-pre font-code text-base\"\n :lineHeight=\"20\"\n :text=\"schemaContent ?? ''\" />\n</template>\n","<script lang=\"ts\" setup>\nimport {\n getExampleFromSchema,\n getResolvedRefDeep,\n} from '@scalar/api-client/v2/blocks/operation-code-sample'\nimport { ScalarCodeBlock, ScalarVirtualText } from '@scalar/components'\nimport { prettyPrintJson } from '@scalar/helpers/json/pretty-print-json'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n ExampleObject,\n MediaTypeObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nconst { example, response } = defineProps<{\n response: MediaTypeObject | undefined\n example: ExampleObject | undefined\n}>()\n\n/** Get content from the appropriate source */\nconst getContent = () => {\n if (example !== undefined) {\n return getResolvedRefDeep(example)?.value ?? ''\n }\n\n if (response?.schema) {\n return getExampleFromSchema(getResolvedRef(response.schema), {\n emptyString: 'string',\n mode: 'read',\n })\n }\n\n return undefined\n}\n\n/** Pre-pretty printed content string, avoids multiple pretty prints*/\nconst prettyPrintedContent = computed(() => {\n const content = getContent()\n if (content === undefined) {\n return undefined\n }\n return prettyPrintJson(content)\n})\n\nconst VIRTUALIZATION_THRESHOLD = 20_000\n\n// Virtualize the code block if it's too large\nconst shouldVirtualize = computed(() => {\n if (prettyPrintedContent.value === undefined) {\n return false\n }\n return prettyPrintedContent.value.length > VIRTUALIZATION_THRESHOLD\n})\n</script>\n<template>\n <!-- Example -->\n <ScalarCodeBlock\n v-if=\"prettyPrintedContent !== undefined && !shouldVirtualize\"\n class=\"bg-b-2\"\n lang=\"json\"\n :prettyPrintedContent=\"prettyPrintedContent\" />\n\n <ScalarVirtualText\n v-else-if=\"prettyPrintedContent !== undefined && shouldVirtualize\"\n containerClass=\"custom-scroll scalar-code-block border rounded-b flex flex-1 max-h-screen\"\n contentClass=\"language-plaintext whitespace-pre font-code text-base\"\n :lineHeight=\"20\"\n :text=\"prettyPrintedContent\" />\n\n <div\n v-else\n class=\"empty-state\">\n No Body\n </div>\n</template>\n\n<style scoped>\n.empty-state {\n margin: 10px 0 10px 12px;\n text-align: center;\n font-size: var(--scalar-mini);\n min-height: 56px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--scalar-radius-lg);\n color: var(--scalar-color-2);\n}\n\n.rule-title {\n font-family: var(--scalar-font-code);\n color: var(--scalar-color-1);\n display: inline-block;\n margin: 12px 0 6px;\n border-radius: var(--scalar-radius);\n}\n\n.rule {\n margin: 0 12px 0;\n border-radius: var(--scalar-radius-lg);\n}\n\n.rule-items {\n counter-reset: list-number;\n display: flex;\n flex-direction: column;\n gap: 12px;\n border-left: 1px solid var(--scalar-border-color);\n padding: 12px 0 12px;\n}\n.rule-item {\n counter-increment: list-number;\n border: 1px solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n overflow: hidden;\n margin-left: 24px;\n}\n.rule-item:before {\n /* content: counter(list-number); */\n border: 1px solid var(--scalar-border-color);\n border-top: 0;\n border-right: 0;\n content: ' ';\n display: block;\n width: 24px;\n height: 6px;\n border-radius: 0 0 0 var(--scalar-radius-lg);\n margin-top: 6px;\n color: var(--scalar-color-2);\n transform: translateX(-25px);\n color: var(--scalar-color-1);\n position: absolute;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport {\n getExampleFromSchema,\n getResolvedRefDeep,\n} from '@scalar/api-client/v2/blocks/operation-code-sample'\nimport { ScalarCodeBlock, ScalarVirtualText } from '@scalar/components'\nimport { prettyPrintJson } from '@scalar/helpers/json/pretty-print-json'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n ExampleObject,\n MediaTypeObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nconst { example, response } = defineProps<{\n response: MediaTypeObject | undefined\n example: ExampleObject | undefined\n}>()\n\n/** Get content from the appropriate source */\nconst getContent = () => {\n if (example !== undefined) {\n return getResolvedRefDeep(example)?.value ?? ''\n }\n\n if (response?.schema) {\n return getExampleFromSchema(getResolvedRef(response.schema), {\n emptyString: 'string',\n mode: 'read',\n })\n }\n\n return undefined\n}\n\n/** Pre-pretty printed content string, avoids multiple pretty prints*/\nconst prettyPrintedContent = computed(() => {\n const content = getContent()\n if (content === undefined) {\n return undefined\n }\n return prettyPrintJson(content)\n})\n\nconst VIRTUALIZATION_THRESHOLD = 20_000\n\n// Virtualize the code block if it's too large\nconst shouldVirtualize = computed(() => {\n if (prettyPrintedContent.value === undefined) {\n return false\n }\n return prettyPrintedContent.value.length > VIRTUALIZATION_THRESHOLD\n})\n</script>\n<template>\n <!-- Example -->\n <ScalarCodeBlock\n v-if=\"prettyPrintedContent !== undefined && !shouldVirtualize\"\n class=\"bg-b-2\"\n lang=\"json\"\n :prettyPrintedContent=\"prettyPrintedContent\" />\n\n <ScalarVirtualText\n v-else-if=\"prettyPrintedContent !== undefined && shouldVirtualize\"\n containerClass=\"custom-scroll scalar-code-block border rounded-b flex flex-1 max-h-screen\"\n contentClass=\"language-plaintext whitespace-pre font-code text-base\"\n :lineHeight=\"20\"\n :text=\"prettyPrintedContent\" />\n\n <div\n v-else\n class=\"empty-state\">\n No Body\n </div>\n</template>\n\n<style scoped>\n.empty-state {\n margin: 10px 0 10px 12px;\n text-align: center;\n font-size: var(--scalar-mini);\n min-height: 56px;\n display: flex;\n align-items: center;\n justify-content: center;\n border-radius: var(--scalar-radius-lg);\n color: var(--scalar-color-2);\n}\n\n.rule-title {\n font-family: var(--scalar-font-code);\n color: var(--scalar-color-1);\n display: inline-block;\n margin: 12px 0 6px;\n border-radius: var(--scalar-radius);\n}\n\n.rule {\n margin: 0 12px 0;\n border-radius: var(--scalar-radius-lg);\n}\n\n.rule-items {\n counter-reset: list-number;\n display: flex;\n flex-direction: column;\n gap: 12px;\n border-left: 1px solid var(--scalar-border-color);\n padding: 12px 0 12px;\n}\n.rule-item {\n counter-increment: list-number;\n border: 1px solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n overflow: hidden;\n margin-left: 24px;\n}\n.rule-item:before {\n /* content: counter(list-number); */\n border: 1px solid var(--scalar-border-color);\n border-top: 0;\n border-right: 0;\n content: ' ';\n display: block;\n width: 24px;\n height: 6px;\n border-radius: 0 0 0 var(--scalar-radius-lg);\n margin-top: 6px;\n color: var(--scalar-color-2);\n transform: translateX(-25px);\n color: var(--scalar-color-1);\n position: absolute;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { Tab } from '@headlessui/vue'\n</script>\n<template>\n <Tab\n v-slot=\"{ selected }\"\n as=\"template\">\n <button\n class=\"tab\"\n :class=\"{ 'tab-selected': selected }\"\n type=\"button\">\n <span>\n <slot />\n </span>\n </button>\n </Tab>\n</template>\n<style scoped>\n.tab {\n background: none;\n border: none;\n font-size: var(--scalar-small);\n font-family: var(--scalar-font);\n font-weight: var(--scalar-font-normal);\n color: var(--scalar-color-2);\n line-height: calc(var(--scalar-small) + 2px);\n white-space: nowrap;\n cursor: pointer;\n padding: 0;\n margin-right: 3px;\n text-transform: uppercase;\n position: relative;\n line-height: 22px;\n}\n.tab:before {\n content: '';\n position: absolute;\n z-index: 0;\n left: -6px;\n top: -2px;\n width: calc(100% + 12px);\n height: calc(100% + 4px);\n border-radius: var(--scalar-radius);\n background: var(--scalar-background-3);\n opacity: 0;\n}\n.tab:hover:before,\n.tab:focus-visible:before {\n opacity: 1;\n}\n.tab:focus-visible:before {\n outline: 1px solid var(--scalar-color-accent);\n}\n.tab span {\n z-index: 1;\n position: relative;\n}\n.tab-selected {\n color: var(--scalar-color-1);\n font-weight: var(--scalar-semibold);\n}\n.tab-selected:after {\n content: '';\n position: absolute;\n background: currentColor;\n width: 100%;\n left: 0;\n height: 1px;\n bottom: calc(var(--tab-list-padding-y) * -1);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { Tab } from '@headlessui/vue'\n</script>\n<template>\n <Tab\n v-slot=\"{ selected }\"\n as=\"template\">\n <button\n class=\"tab\"\n :class=\"{ 'tab-selected': selected }\"\n type=\"button\">\n <span>\n <slot />\n </span>\n </button>\n </Tab>\n</template>\n<style scoped>\n.tab {\n background: none;\n border: none;\n font-size: var(--scalar-small);\n font-family: var(--scalar-font);\n font-weight: var(--scalar-font-normal);\n color: var(--scalar-color-2);\n line-height: calc(var(--scalar-small) + 2px);\n white-space: nowrap;\n cursor: pointer;\n padding: 0;\n margin-right: 3px;\n text-transform: uppercase;\n position: relative;\n line-height: 22px;\n}\n.tab:before {\n content: '';\n position: absolute;\n z-index: 0;\n left: -6px;\n top: -2px;\n width: calc(100% + 12px);\n height: calc(100% + 4px);\n border-radius: var(--scalar-radius);\n background: var(--scalar-background-3);\n opacity: 0;\n}\n.tab:hover:before,\n.tab:focus-visible:before {\n opacity: 1;\n}\n.tab:focus-visible:before {\n outline: 1px solid var(--scalar-color-accent);\n}\n.tab span {\n z-index: 1;\n position: relative;\n}\n.tab-selected {\n color: var(--scalar-color-1);\n font-weight: var(--scalar-semibold);\n}\n.tab-selected:after {\n content: '';\n position: absolute;\n background: currentColor;\n width: 100%;\n left: 0;\n height: 1px;\n bottom: calc(var(--tab-list-padding-y) * -1);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { TabGroup, TabList } from '@headlessui/vue'\nimport { ScalarCardHeader } from '@scalar/components'\n\nconst emit = defineEmits<{\n (e: 'change', index: number): void\n}>()\n\nconst changeTab = (index: number) => {\n emit('change', index)\n}\n</script>\n<template>\n <ScalarCardHeader class=\"scalar-card-header scalar-card-header-tabs\">\n <TabGroup @change=\"changeTab\">\n <TabList class=\"tab-list custom-scroll\">\n <slot />\n </TabList>\n </TabGroup>\n <template #actions>\n <slot name=\"actions\" />\n </template>\n </ScalarCardHeader>\n</template>\n<style scoped>\n.tab-list {\n display: flex;\n gap: 6px;\n position: relative;\n flex: 1;\n --tab-list-padding-y: 7px;\n --tab-list-padding-x: 12px;\n padding: var(--tab-list-padding-y) var(--tab-list-padding-x);\n overflow: auto;\n}\n.scalar-card-header.scalar-card-header-tabs {\n padding: 0;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { TabGroup, TabList } from '@headlessui/vue'\nimport { ScalarCardHeader } from '@scalar/components'\n\nconst emit = defineEmits<{\n (e: 'change', index: number): void\n}>()\n\nconst changeTab = (index: number) => {\n emit('change', index)\n}\n</script>\n<template>\n <ScalarCardHeader class=\"scalar-card-header scalar-card-header-tabs\">\n <TabGroup @change=\"changeTab\">\n <TabList class=\"tab-list custom-scroll\">\n <slot />\n </TabList>\n </TabGroup>\n <template #actions>\n <slot name=\"actions\" />\n </template>\n </ScalarCardHeader>\n</template>\n<style scoped>\n.tab-list {\n display: flex;\n gap: 6px;\n position: relative;\n flex: 1;\n --tab-list-padding-y: 7px;\n --tab-list-padding-x: 12px;\n padding: var(--tab-list-padding-y) var(--tab-list-padding-x);\n overflow: auto;\n}\n.scalar-card-header.scalar-card-header-tabs {\n padding: 0;\n}\n</style>\n","import { getObjectKeys, normalizeMimeTypeObject } from '@scalar/oas-utils/helpers'\nimport type { MediaTypeObject, ResponseObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\n/**\n * Checks if a media type object has any displayable content.\n * This includes having a schema, a single example, or multiple examples.\n *\n * Note: We use explicit property checks for `example` because falsy values\n * like `0`, `false`, and `\"\"` are valid JSON examples that should be displayed.\n * We still treat `null` as \"no content\" since it explicitly indicates absence.\n */\nfunction hasMediaTypeContent(mediaType: MediaTypeObject | undefined): boolean {\n if (!mediaType) {\n return false\n }\n\n const hasSchema = Boolean(mediaType.schema)\n const hasExample = 'example' in mediaType && mediaType.example !== null\n const hasExamples = Boolean(mediaType.examples)\n\n return hasSchema || hasExample || hasExamples\n}\n\nfunction isResponseKey(responseKey: string): boolean {\n return responseKey === 'default' || /^[1-5][0-9]{2}$/.test(responseKey) || /^[1-5]XX$/.test(responseKey)\n}\n\n/**\n * Checks if a response object has body content (schema, example, or examples).\n * Looks through common media types in priority order.\n */\nexport function hasResponseContent(response: ResponseObject | undefined, responseKey?: string): boolean {\n if (responseKey !== undefined) {\n if (!isResponseKey(responseKey)) {\n return false\n }\n\n return Boolean(response)\n }\n\n const normalizedContent = normalizeMimeTypeObject(response?.content)\n const keys = getObjectKeys(normalizedContent ?? {})\n\n const mediaType =\n normalizedContent?.['application/json'] ??\n normalizedContent?.['application/xml'] ??\n normalizedContent?.['text/plain'] ??\n normalizedContent?.['text/html'] ??\n normalizedContent?.['*/*'] ??\n normalizedContent?.[keys[0] ?? '']\n\n return hasMediaTypeContent(mediaType)\n}\n","<script lang=\"ts\" setup>\nimport { getExample } from '@scalar/api-client/v2/blocks/operation-block'\nimport { ExamplePicker } from '@scalar/api-client/v2/blocks/operation-code-sample'\nimport {\n ScalarCard,\n ScalarCardFooter,\n ScalarCardSection,\n ScalarIcon,\n ScalarMarkdown,\n} from '@scalar/components'\nimport {\n getObjectKeys,\n normalizeMimeTypeObject,\n} from '@scalar/oas-utils/helpers'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n MediaTypeObject,\n ResponsesObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, ref, toValue, useId, watch } from 'vue'\n\nimport ScreenReader from '@/components/ScreenReader.vue'\nimport ExampleSchema from '@/features/example-responses/ExampleSchema.vue'\n\nimport ExampleResponse from './ExampleResponse.vue'\nimport ExampleResponseTab from './ExampleResponseTab.vue'\nimport ExampleResponseTabList from './ExampleResponseTabList.vue'\nimport { hasResponseContent } from './has-response-content'\n\n/**\n * TODO: copyToClipboard isn't using the right content if there are multiple examples\n */\n\nconst { responses } = defineProps<{\n responses: ResponsesObject\n}>()\n\nconst id = useId()\nconst { copyToClipboard } = useClipboard()\n\n// Bring the status codes in the right order.\nconst orderedStatusCodes = computed<string[]>(() =>\n Object.keys(responses ?? {}).sort(),\n)\n\n// Filter to only valid response keys that should render in the example responses panel\nconst statusCodesWithContent = computed<string[]>(() =>\n orderedStatusCodes.value.filter((statusCode) =>\n hasResponseContent(getResolvedRef(responses?.[statusCode]), statusCode),\n ),\n)\n\n// Keep track of the current selected tab\nconst selectedResponseIndex = ref<number>(0)\n\n/**\n * Clamp the selected index when the filtered list shrinks.\n * Without this, the index can become out of bounds and cause a mismatch\n * between the visible tabs and the displayed content.\n *\n * We also reset `selectedExampleKey` to match the behavior of `changeTab`,\n * since the new response may not have the same example keys.\n */\nwatch(statusCodesWithContent, (codes) => {\n if (codes.length === 0) {\n selectedResponseIndex.value = 0\n selectedExampleKey.value = ''\n } else if (selectedResponseIndex.value >= codes.length) {\n selectedResponseIndex.value = codes.length - 1\n selectedExampleKey.value = ''\n }\n})\n\n// Return the whole response object\nconst currentResponse = computed(() => {\n const currentStatusCode =\n toValue(statusCodesWithContent)[toValue(selectedResponseIndex)] ?? ''\n\n return getResolvedRef(responses?.[currentStatusCode])\n})\n\nconst currentResponseContent = computed<MediaTypeObject | undefined>(() => {\n const normalizedContent = normalizeMimeTypeObject(\n currentResponse.value?.content,\n )\n\n /** All the keys of the normalized content */\n const keys = getObjectKeys(normalizedContent ?? {})\n\n return (\n // OpenAPI 3.x\n normalizedContent?.['application/json'] ??\n normalizedContent?.['application/xml'] ??\n normalizedContent?.['text/plain'] ??\n normalizedContent?.['text/html'] ??\n normalizedContent?.['*/*'] ??\n // Take the first key - in the future we may want to use the selected content type\n normalizedContent?.[keys[0] ?? ''] ??\n undefined\n )\n})\n\nconst hasMultipleExamples = computed<boolean>(\n () =>\n !!currentResponseContent.value?.examples &&\n Object.keys(currentResponseContent.value?.examples ?? {}).length > 1,\n)\n\nconst selectedExampleKey = ref<string>(\n Object.keys(currentResponseContent.value?.examples ?? {})[0] ?? '',\n)\n\n/** Get the current example to display */\nconst currentExample = computed(() => {\n if (!currentResponseContent.value) {\n return undefined\n }\n\n // When multiple examples exist and one is selected, we access it directly\n if (hasMultipleExamples.value && selectedExampleKey.value) {\n return currentResponseContent.value.examples?.[selectedExampleKey.value]\n }\n\n // Otherwise, we use getExample with an undefined exampleKey to handle fallbacks\n return getExample(currentResponseContent.value, undefined, undefined)\n})\n\nconst changeTab = (index: number) => {\n selectedResponseIndex.value = index\n selectedExampleKey.value = ''\n}\n\nconst showSchema = ref(false)\n</script>\n<template>\n <ScalarCard\n v-if=\"statusCodesWithContent.length\"\n aria-label=\"Example Responses\"\n class=\"response-card\"\n role=\"region\">\n <ExampleResponseTabList @change=\"changeTab\">\n <ExampleResponseTab\n v-for=\"statusCode in statusCodesWithContent\"\n :key=\"statusCode\"\n :aria-controls=\"id\">\n <ScreenReader>Status:</ScreenReader>\n {{ statusCode }}\n </ExampleResponseTab>\n\n <template #actions>\n <button\n v-if=\"currentResponseContent?.example\"\n class=\"code-copy\"\n type=\"button\"\n @click=\"() => copyToClipboard(currentResponseContent?.example)\">\n <ScalarIcon\n icon=\"Clipboard\"\n width=\"12px\" />\n </button>\n <label\n v-if=\"currentResponseContent?.schema\"\n class=\"scalar-card-checkbox\">\n Show Schema\n <input\n v-model=\"showSchema\"\n :aria-controls=\"id\"\n class=\"scalar-card-checkbox-input\"\n type=\"checkbox\" />\n <span class=\"scalar-card-checkbox-checkmark\" />\n </label>\n </template>\n </ExampleResponseTabList>\n <ScalarCardSection class=\"grid flex-1\">\n <!-- Schema -->\n <ExampleSchema\n v-if=\"currentResponseContent?.schema && showSchema\"\n :id=\"id\"\n :schema=\"currentResponseContent?.schema\" />\n\n <!-- Example -->\n <ExampleResponse\n v-else\n :id=\"id\"\n :example=\"currentExample\"\n :response=\"currentResponseContent\" />\n </ScalarCardSection>\n <ScalarCardFooter\n v-if=\"currentResponse?.description || hasMultipleExamples\"\n class=\"response-card-footer\">\n <ExamplePicker\n v-if=\"hasMultipleExamples\"\n v-model=\"selectedExampleKey\"\n class=\"response-example-selector px-0\"\n :examples=\"currentResponseContent?.examples\" />\n <div class=\"response-description\">\n <ScalarMarkdown\n v-if=\"currentResponse?.description\"\n class=\"response-description-markdown\"\n :value=\"currentResponse.description\" />\n </div>\n </ScalarCardFooter>\n </ScalarCard>\n</template>\n\n<style scoped>\n.response-card {\n font-size: var(--scalar-font-size-3);\n}\n\n.code-copy {\n display: flex;\n align-items: center;\n justify-content: center;\n appearance: none;\n -webkit-appearance: none;\n outline: none;\n background: transparent;\n cursor: pointer;\n color: var(--scalar-color-3);\n border: none;\n padding: 0;\n margin-right: 12px;\n}\n.code-copy:hover {\n color: var(--scalar-color-1);\n}\n.code-copy svg {\n width: 13px;\n height: 13px;\n}\n.response-card-footer {\n display: flex;\n flex-direction: row-reverse;\n flex-wrap: wrap;\n justify-content: start;\n flex-shrink: 0;\n padding: 7px 12px;\n column-gap: 8px;\n}\n.response-example-selector {\n flex-shrink: 0;\n margin: -4px;\n}\n.response-description {\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-small);\n color: var(--scalar-color--1);\n\n box-sizing: border-box;\n\n flex-grow: 1;\n}\n.response-description-markdown {\n max-height: 3lh;\n}\n\n.response-description-markdown :deep(*) {\n margin: 0;\n}\n.schema-type {\n font-size: var(--scalar-micro);\n color: var(--scalar-color-2);\n font-weight: var(--scalar-semibold);\n background: var(--scalar-background-3);\n padding: 2px 4px;\n border-radius: 4px;\n margin-right: 4px;\n}\n.schema-example {\n font-size: var(--scalar-micro);\n color: var(--scalar-color-2);\n font-weight: var(--scalar-semibold);\n}\n\n.example-response-tab {\n display: block;\n margin: 6px;\n}\n\n.scalar-card-checkbox {\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n min-height: 17px;\n cursor: pointer;\n user-select: none;\n font-size: var(--scalar-small);\n font-weight: var(--scalar-font-normal);\n color: var(--scalar-color-2);\n width: fit-content;\n white-space: nowrap;\n gap: 6px;\n padding: 7px 6px;\n}\n.scalar-card-checkbox:has(.scalar-card-checkbox-input:focus-visible)\n .scalar-card-checkbox-checkmark {\n outline: 1px solid var(--scalar-color-accent);\n}\n.scalar-card-checkbox:hover {\n color: var(--scalar-color--1);\n}\n.scalar-card-checkbox .scalar-card-checkbox-input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n}\n\n.scalar-card-checkbox-checkmark {\n height: 16px;\n width: 16px;\n border-radius: var(--scalar-radius);\n background-color: transparent;\n background-color: var(--scalar-background-3);\n box-shadow: inset 0 0 0 var(--scalar-border-width) var(--scalar-border-color);\n}\n.scalar-card-checkbox:has(.scalar-card-checkbox-input:checked) {\n color: var(--scalar-color-1);\n font-weight: var(--scalar-semibold);\n}\n\n.scalar-card-checkbox\n .scalar-card-checkbox-input:checked\n ~ .scalar-card-checkbox-checkmark {\n background-color: var(--scalar-button-1);\n box-shadow: none;\n}\n\n.scalar-card-checkbox-checkmark:after {\n content: '';\n position: absolute;\n display: none;\n}\n\n.scalar-card-checkbox\n .scalar-card-checkbox-input:checked\n ~ .scalar-card-checkbox-checkmark:after {\n display: block;\n}\n\n.scalar-card-checkbox .scalar-card-checkbox-checkmark:after {\n right: 11.5px;\n top: 12.5px;\n width: 5px;\n height: 9px;\n border: solid 1px var(--scalar-button-1-color);\n border-width: 0 1.5px 1.5px 0;\n transform: rotate(45deg);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { getExample } from '@scalar/api-client/v2/blocks/operation-block'\nimport { ExamplePicker } from '@scalar/api-client/v2/blocks/operation-code-sample'\nimport {\n ScalarCard,\n ScalarCardFooter,\n ScalarCardSection,\n ScalarIcon,\n ScalarMarkdown,\n} from '@scalar/components'\nimport {\n getObjectKeys,\n normalizeMimeTypeObject,\n} from '@scalar/oas-utils/helpers'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n MediaTypeObject,\n ResponsesObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, ref, toValue, useId, watch } from 'vue'\n\nimport ScreenReader from '@/components/ScreenReader.vue'\nimport ExampleSchema from '@/features/example-responses/ExampleSchema.vue'\n\nimport ExampleResponse from './ExampleResponse.vue'\nimport ExampleResponseTab from './ExampleResponseTab.vue'\nimport ExampleResponseTabList from './ExampleResponseTabList.vue'\nimport { hasResponseContent } from './has-response-content'\n\n/**\n * TODO: copyToClipboard isn't using the right content if there are multiple examples\n */\n\nconst { responses } = defineProps<{\n responses: ResponsesObject\n}>()\n\nconst id = useId()\nconst { copyToClipboard } = useClipboard()\n\n// Bring the status codes in the right order.\nconst orderedStatusCodes = computed<string[]>(() =>\n Object.keys(responses ?? {}).sort(),\n)\n\n// Filter to only valid response keys that should render in the example responses panel\nconst statusCodesWithContent = computed<string[]>(() =>\n orderedStatusCodes.value.filter((statusCode) =>\n hasResponseContent(getResolvedRef(responses?.[statusCode]), statusCode),\n ),\n)\n\n// Keep track of the current selected tab\nconst selectedResponseIndex = ref<number>(0)\n\n/**\n * Clamp the selected index when the filtered list shrinks.\n * Without this, the index can become out of bounds and cause a mismatch\n * between the visible tabs and the displayed content.\n *\n * We also reset `selectedExampleKey` to match the behavior of `changeTab`,\n * since the new response may not have the same example keys.\n */\nwatch(statusCodesWithContent, (codes) => {\n if (codes.length === 0) {\n selectedResponseIndex.value = 0\n selectedExampleKey.value = ''\n } else if (selectedResponseIndex.value >= codes.length) {\n selectedResponseIndex.value = codes.length - 1\n selectedExampleKey.value = ''\n }\n})\n\n// Return the whole response object\nconst currentResponse = computed(() => {\n const currentStatusCode =\n toValue(statusCodesWithContent)[toValue(selectedResponseIndex)] ?? ''\n\n return getResolvedRef(responses?.[currentStatusCode])\n})\n\nconst currentResponseContent = computed<MediaTypeObject | undefined>(() => {\n const normalizedContent = normalizeMimeTypeObject(\n currentResponse.value?.content,\n )\n\n /** All the keys of the normalized content */\n const keys = getObjectKeys(normalizedContent ?? {})\n\n return (\n // OpenAPI 3.x\n normalizedContent?.['application/json'] ??\n normalizedContent?.['application/xml'] ??\n normalizedContent?.['text/plain'] ??\n normalizedContent?.['text/html'] ??\n normalizedContent?.['*/*'] ??\n // Take the first key - in the future we may want to use the selected content type\n normalizedContent?.[keys[0] ?? ''] ??\n undefined\n )\n})\n\nconst hasMultipleExamples = computed<boolean>(\n () =>\n !!currentResponseContent.value?.examples &&\n Object.keys(currentResponseContent.value?.examples ?? {}).length > 1,\n)\n\nconst selectedExampleKey = ref<string>(\n Object.keys(currentResponseContent.value?.examples ?? {})[0] ?? '',\n)\n\n/** Get the current example to display */\nconst currentExample = computed(() => {\n if (!currentResponseContent.value) {\n return undefined\n }\n\n // When multiple examples exist and one is selected, we access it directly\n if (hasMultipleExamples.value && selectedExampleKey.value) {\n return currentResponseContent.value.examples?.[selectedExampleKey.value]\n }\n\n // Otherwise, we use getExample with an undefined exampleKey to handle fallbacks\n return getExample(currentResponseContent.value, undefined, undefined)\n})\n\nconst changeTab = (index: number) => {\n selectedResponseIndex.value = index\n selectedExampleKey.value = ''\n}\n\nconst showSchema = ref(false)\n</script>\n<template>\n <ScalarCard\n v-if=\"statusCodesWithContent.length\"\n aria-label=\"Example Responses\"\n class=\"response-card\"\n role=\"region\">\n <ExampleResponseTabList @change=\"changeTab\">\n <ExampleResponseTab\n v-for=\"statusCode in statusCodesWithContent\"\n :key=\"statusCode\"\n :aria-controls=\"id\">\n <ScreenReader>Status:</ScreenReader>\n {{ statusCode }}\n </ExampleResponseTab>\n\n <template #actions>\n <button\n v-if=\"currentResponseContent?.example\"\n class=\"code-copy\"\n type=\"button\"\n @click=\"() => copyToClipboard(currentResponseContent?.example)\">\n <ScalarIcon\n icon=\"Clipboard\"\n width=\"12px\" />\n </button>\n <label\n v-if=\"currentResponseContent?.schema\"\n class=\"scalar-card-checkbox\">\n Show Schema\n <input\n v-model=\"showSchema\"\n :aria-controls=\"id\"\n class=\"scalar-card-checkbox-input\"\n type=\"checkbox\" />\n <span class=\"scalar-card-checkbox-checkmark\" />\n </label>\n </template>\n </ExampleResponseTabList>\n <ScalarCardSection class=\"grid flex-1\">\n <!-- Schema -->\n <ExampleSchema\n v-if=\"currentResponseContent?.schema && showSchema\"\n :id=\"id\"\n :schema=\"currentResponseContent?.schema\" />\n\n <!-- Example -->\n <ExampleResponse\n v-else\n :id=\"id\"\n :example=\"currentExample\"\n :response=\"currentResponseContent\" />\n </ScalarCardSection>\n <ScalarCardFooter\n v-if=\"currentResponse?.description || hasMultipleExamples\"\n class=\"response-card-footer\">\n <ExamplePicker\n v-if=\"hasMultipleExamples\"\n v-model=\"selectedExampleKey\"\n class=\"response-example-selector px-0\"\n :examples=\"currentResponseContent?.examples\" />\n <div class=\"response-description\">\n <ScalarMarkdown\n v-if=\"currentResponse?.description\"\n class=\"response-description-markdown\"\n :value=\"currentResponse.description\" />\n </div>\n </ScalarCardFooter>\n </ScalarCard>\n</template>\n\n<style scoped>\n.response-card {\n font-size: var(--scalar-font-size-3);\n}\n\n.code-copy {\n display: flex;\n align-items: center;\n justify-content: center;\n appearance: none;\n -webkit-appearance: none;\n outline: none;\n background: transparent;\n cursor: pointer;\n color: var(--scalar-color-3);\n border: none;\n padding: 0;\n margin-right: 12px;\n}\n.code-copy:hover {\n color: var(--scalar-color-1);\n}\n.code-copy svg {\n width: 13px;\n height: 13px;\n}\n.response-card-footer {\n display: flex;\n flex-direction: row-reverse;\n flex-wrap: wrap;\n justify-content: start;\n flex-shrink: 0;\n padding: 7px 12px;\n column-gap: 8px;\n}\n.response-example-selector {\n flex-shrink: 0;\n margin: -4px;\n}\n.response-description {\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-small);\n color: var(--scalar-color--1);\n\n box-sizing: border-box;\n\n flex-grow: 1;\n}\n.response-description-markdown {\n max-height: 3lh;\n}\n\n.response-description-markdown :deep(*) {\n margin: 0;\n}\n.schema-type {\n font-size: var(--scalar-micro);\n color: var(--scalar-color-2);\n font-weight: var(--scalar-semibold);\n background: var(--scalar-background-3);\n padding: 2px 4px;\n border-radius: 4px;\n margin-right: 4px;\n}\n.schema-example {\n font-size: var(--scalar-micro);\n color: var(--scalar-color-2);\n font-weight: var(--scalar-semibold);\n}\n\n.example-response-tab {\n display: block;\n margin: 6px;\n}\n\n.scalar-card-checkbox {\n display: flex;\n align-items: center;\n justify-content: center;\n position: relative;\n min-height: 17px;\n cursor: pointer;\n user-select: none;\n font-size: var(--scalar-small);\n font-weight: var(--scalar-font-normal);\n color: var(--scalar-color-2);\n width: fit-content;\n white-space: nowrap;\n gap: 6px;\n padding: 7px 6px;\n}\n.scalar-card-checkbox:has(.scalar-card-checkbox-input:focus-visible)\n .scalar-card-checkbox-checkmark {\n outline: 1px solid var(--scalar-color-accent);\n}\n.scalar-card-checkbox:hover {\n color: var(--scalar-color--1);\n}\n.scalar-card-checkbox .scalar-card-checkbox-input {\n position: absolute;\n opacity: 0;\n cursor: pointer;\n height: 0;\n width: 0;\n}\n\n.scalar-card-checkbox-checkmark {\n height: 16px;\n width: 16px;\n border-radius: var(--scalar-radius);\n background-color: transparent;\n background-color: var(--scalar-background-3);\n box-shadow: inset 0 0 0 var(--scalar-border-width) var(--scalar-border-color);\n}\n.scalar-card-checkbox:has(.scalar-card-checkbox-input:checked) {\n color: var(--scalar-color-1);\n font-weight: var(--scalar-semibold);\n}\n\n.scalar-card-checkbox\n .scalar-card-checkbox-input:checked\n ~ .scalar-card-checkbox-checkmark {\n background-color: var(--scalar-button-1);\n box-shadow: none;\n}\n\n.scalar-card-checkbox-checkmark:after {\n content: '';\n position: absolute;\n display: none;\n}\n\n.scalar-card-checkbox\n .scalar-card-checkbox-input:checked\n ~ .scalar-card-checkbox-checkmark:after {\n display: block;\n}\n\n.scalar-card-checkbox .scalar-card-checkbox-checkmark:after {\n right: 11.5px;\n top: 12.5px;\n width: 5px;\n height: 9px;\n border: solid 1px var(--scalar-button-1-color);\n border-width: 0 1.5px 1.5px 0;\n transform: rotate(45deg);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { cva, ScalarButton, ScalarListbox } from '@scalar/components'\nimport { ScalarIconCaretDown } from '@scalar/icons'\nimport type { MediaTypeObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport ScreenReader from '@/components/ScreenReader.vue'\n\nconst { content } = defineProps<{\n content: Record<string, MediaTypeObject> | undefined\n}>()\n\n/** The selected content type with two-way binding */\nconst selectedContentType = defineModel<string>({ required: true })\n\ndefineOptions({ inheritAttrs: false })\n\nconst contentTypes = computed(() => Object.keys(content ?? {}))\n\nconst selectedOption = computed({\n get: () =>\n options.value.find((option) => option.id === selectedContentType.value),\n set: (option) => {\n if (option) {\n selectedContentType.value = option.id\n }\n },\n})\n\nconst options = computed(() => {\n return contentTypes.value.map((type) => ({\n id: type,\n label: type,\n }))\n})\n\n// Content type select style variant based on dropdown availability\nconst contentTypeSelect = cva({\n base: 'font-normal text-c-2 bg-b-1 py-1 flex items-center gap-1 rounded-full text-xs leading-none border',\n variants: {\n dropdown: {\n true: 'hover:text-c-1 pl-2 pr-1.5 font-medium cursor-pointer',\n false: 'px-2',\n },\n },\n})\n</script>\n<template>\n <ScalarListbox\n v-if=\"contentTypes.length > 1\"\n v-slot=\"{ open }\"\n v-model=\"selectedOption\"\n :options=\"options\"\n placement=\"bottom-end\"\n teleport\n @click.stop>\n <ScalarButton\n class=\"h-fit\"\n :class=\"contentTypeSelect({ dropdown: true })\"\n variant=\"ghost\"\n v-bind=\"$attrs\"\n @click.stop>\n <ScreenReader>Selected Content Type:</ScreenReader>\n <span>{{ selectedContentType }}</span>\n <ScalarIconCaretDown\n class=\"size-2.75 transition-transform duration-100\"\n :class=\"{ 'rotate-180': open }\"\n weight=\"bold\" />\n </ScalarButton>\n </ScalarListbox>\n <div\n v-else\n class=\"selected-content-type\"\n :class=\"contentTypeSelect({ dropdown: false })\"\n v-bind=\"$attrs\"\n tabindex=\"0\">\n <span>{{ selectedContentType }}</span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { cva, ScalarButton, ScalarListbox } from '@scalar/components'\nimport { ScalarIconCaretDown } from '@scalar/icons'\nimport type { MediaTypeObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport ScreenReader from '@/components/ScreenReader.vue'\n\nconst { content } = defineProps<{\n content: Record<string, MediaTypeObject> | undefined\n}>()\n\n/** The selected content type with two-way binding */\nconst selectedContentType = defineModel<string>({ required: true })\n\ndefineOptions({ inheritAttrs: false })\n\nconst contentTypes = computed(() => Object.keys(content ?? {}))\n\nconst selectedOption = computed({\n get: () =>\n options.value.find((option) => option.id === selectedContentType.value),\n set: (option) => {\n if (option) {\n selectedContentType.value = option.id\n }\n },\n})\n\nconst options = computed(() => {\n return contentTypes.value.map((type) => ({\n id: type,\n label: type,\n }))\n})\n\n// Content type select style variant based on dropdown availability\nconst contentTypeSelect = cva({\n base: 'font-normal text-c-2 bg-b-1 py-1 flex items-center gap-1 rounded-full text-xs leading-none border',\n variants: {\n dropdown: {\n true: 'hover:text-c-1 pl-2 pr-1.5 font-medium cursor-pointer',\n false: 'px-2',\n },\n },\n})\n</script>\n<template>\n <ScalarListbox\n v-if=\"contentTypes.length > 1\"\n v-slot=\"{ open }\"\n v-model=\"selectedOption\"\n :options=\"options\"\n placement=\"bottom-end\"\n teleport\n @click.stop>\n <ScalarButton\n class=\"h-fit\"\n :class=\"contentTypeSelect({ dropdown: true })\"\n variant=\"ghost\"\n v-bind=\"$attrs\"\n @click.stop>\n <ScreenReader>Selected Content Type:</ScreenReader>\n <span>{{ selectedContentType }}</span>\n <ScalarIconCaretDown\n class=\"size-2.75 transition-transform duration-100\"\n :class=\"{ 'rotate-180': open }\"\n weight=\"bold\" />\n </ScalarButton>\n </ScalarListbox>\n <div\n v-else\n class=\"selected-content-type\"\n :class=\"contentTypeSelect({ dropdown: false })\"\n v-bind=\"$attrs\"\n tabindex=\"0\">\n <span>{{ selectedContentType }}</span>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type { HeaderObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nimport SchemaProperty from '@/components/Content/Schema/SchemaProperty.vue'\n\nconst { name, header, breadcrumb } = defineProps<{\n header: HeaderObject\n name: string\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n orderSchemaPropertiesBy: 'alpha' | 'preserve' | undefined\n orderRequiredPropertiesFirst: boolean | undefined\n}>()\n</script>\n<template>\n <SchemaProperty\n v-if=\"'schema' in header && header.schema\"\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'headers'] : undefined\"\n :description=\"header.description\"\n :eventBus=\"eventBus\"\n :name=\"name\"\n :options=\"{\n orderRequiredPropertiesFirst: orderRequiredPropertiesFirst,\n orderSchemaPropertiesBy: orderSchemaPropertiesBy,\n }\"\n :schema=\"getResolvedRef(header.schema)\" />\n</template>\n","<script setup lang=\"ts\">\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type { HeaderObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nimport SchemaProperty from '@/components/Content/Schema/SchemaProperty.vue'\n\nconst { name, header, breadcrumb } = defineProps<{\n header: HeaderObject\n name: string\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n orderSchemaPropertiesBy: 'alpha' | 'preserve' | undefined\n orderRequiredPropertiesFirst: boolean | undefined\n}>()\n</script>\n<template>\n <SchemaProperty\n v-if=\"'schema' in header && header.schema\"\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'headers'] : undefined\"\n :description=\"header.description\"\n :eventBus=\"eventBus\"\n :name=\"name\"\n :options=\"{\n orderRequiredPropertiesFirst: orderRequiredPropertiesFirst,\n orderSchemaPropertiesBy: orderSchemaPropertiesBy,\n }\"\n :schema=\"getResolvedRef(header.schema)\" />\n</template>\n","<script lang=\"ts\" setup>\nimport { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'\nimport { ScalarIcon } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type { HeaderObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nimport Header from './Header.vue'\n\nconst { headers, breadcrumb } = defineProps<{\n headers: Record<string, HeaderObject>\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n orderRequiredPropertiesFirst: boolean | undefined\n orderSchemaPropertiesBy: 'alpha' | 'preserve' | undefined\n}>()\n</script>\n<template>\n <Disclosure v-slot=\"{ open }\">\n <div\n class=\"headers-card headers-card--compact\"\n :class=\"[{ 'headers-card--open': open }]\">\n <div\n class=\"headers-properties\"\n :class=\"{ 'headers-properties-open': open }\">\n <DisclosureButton\n class=\"headers-card-title headers-card-title--compact\"\n :style=\"{\n top: `calc(var(--refs-viewport-offset)))`,\n }\">\n <ScalarIcon\n class=\"headers-card-title-icon\"\n :class=\"{ 'headers-card-title-icon--open': open }\"\n icon=\"Add\"\n size=\"sm\" />\n <template v-if=\"open\"> Hide Headers </template>\n <template v-else> Show Headers </template>\n </DisclosureButton>\n <DisclosurePanel>\n <template\n v-for=\"(header, key) in headers\"\n :key=\"key\">\n <Header\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'headers'] : undefined\"\n :eventBus=\"eventBus\"\n :header=\"getResolvedRef(header)\"\n :name=\"key\"\n :orderRequiredPropertiesFirst=\"orderRequiredPropertiesFirst\"\n :orderSchemaPropertiesBy=\"orderSchemaPropertiesBy\" />\n </template>\n </DisclosurePanel>\n </div>\n </div>\n </Disclosure>\n</template>\n<style scoped>\n.headers-card {\n z-index: 0;\n margin-top: 12px;\n margin-bottom: 6px;\n position: relative;\n font-size: var(--scalar-font-size-4);\n color: var(--scalar-color-1);\n\n align-self: flex-start;\n}\n.headers-card.headers-card--open {\n align-self: initial;\n}\n.headers-card-title {\n padding: 6px 10px;\n\n display: flex;\n align-items: center;\n gap: 4px;\n\n color: var(--scalar-color-3);\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-micro);\n\n border-radius: 13.5px;\n}\nbutton.headers-card-title {\n cursor: pointer;\n}\nbutton.headers-card-title:hover {\n color: var(--scalar-color-1);\n}\n.headers-card-title-icon--open {\n transform: rotate(45deg);\n}\n.headers-properties {\n display: flex;\n flex-direction: column;\n\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n\n border-radius: 13.5px;\n width: fit-content;\n}\n.headers-properties-open > .headers-card-title {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n.headers-properties-open {\n border-radius: var(--scalar-radius-lg);\n width: 100%;\n}\n.headers-card .property:last-of-type {\n padding-bottom: 10px;\n}\n.headers-card-title > .headers-card-title-icon {\n width: 14px;\n height: 14px;\n margin: 0;\n}\n.headers-card-title > .headers-card-title-icon--open {\n transform: rotate(45deg);\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'\nimport { ScalarIcon } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type { HeaderObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nimport Header from './Header.vue'\n\nconst { headers, breadcrumb } = defineProps<{\n headers: Record<string, HeaderObject>\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n orderRequiredPropertiesFirst: boolean | undefined\n orderSchemaPropertiesBy: 'alpha' | 'preserve' | undefined\n}>()\n</script>\n<template>\n <Disclosure v-slot=\"{ open }\">\n <div\n class=\"headers-card headers-card--compact\"\n :class=\"[{ 'headers-card--open': open }]\">\n <div\n class=\"headers-properties\"\n :class=\"{ 'headers-properties-open': open }\">\n <DisclosureButton\n class=\"headers-card-title headers-card-title--compact\"\n :style=\"{\n top: `calc(var(--refs-viewport-offset)))`,\n }\">\n <ScalarIcon\n class=\"headers-card-title-icon\"\n :class=\"{ 'headers-card-title-icon--open': open }\"\n icon=\"Add\"\n size=\"sm\" />\n <template v-if=\"open\"> Hide Headers </template>\n <template v-else> Show Headers </template>\n </DisclosureButton>\n <DisclosurePanel>\n <template\n v-for=\"(header, key) in headers\"\n :key=\"key\">\n <Header\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'headers'] : undefined\"\n :eventBus=\"eventBus\"\n :header=\"getResolvedRef(header)\"\n :name=\"key\"\n :orderRequiredPropertiesFirst=\"orderRequiredPropertiesFirst\"\n :orderSchemaPropertiesBy=\"orderSchemaPropertiesBy\" />\n </template>\n </DisclosurePanel>\n </div>\n </div>\n </Disclosure>\n</template>\n<style scoped>\n.headers-card {\n z-index: 0;\n margin-top: 12px;\n margin-bottom: 6px;\n position: relative;\n font-size: var(--scalar-font-size-4);\n color: var(--scalar-color-1);\n\n align-self: flex-start;\n}\n.headers-card.headers-card--open {\n align-self: initial;\n}\n.headers-card-title {\n padding: 6px 10px;\n\n display: flex;\n align-items: center;\n gap: 4px;\n\n color: var(--scalar-color-3);\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-micro);\n\n border-radius: 13.5px;\n}\nbutton.headers-card-title {\n cursor: pointer;\n}\nbutton.headers-card-title:hover {\n color: var(--scalar-color-1);\n}\n.headers-card-title-icon--open {\n transform: rotate(45deg);\n}\n.headers-properties {\n display: flex;\n flex-direction: column;\n\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n\n border-radius: 13.5px;\n width: fit-content;\n}\n.headers-properties-open > .headers-card-title {\n border-bottom-left-radius: 0;\n border-bottom-right-radius: 0;\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n.headers-properties-open {\n border-radius: var(--scalar-radius-lg);\n width: 100%;\n}\n.headers-card .property:last-of-type {\n padding-bottom: 10px;\n}\n.headers-card-title > .headers-card-title-icon {\n width: 14px;\n height: 14px;\n margin: 0;\n}\n.headers-card-title > .headers-card-title-icon--open {\n transform: rotate(45deg);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'\nimport {\n ScalarMarkdown,\n ScalarMarkdownSummary,\n ScalarWrappingText,\n} from '@scalar/components'\nimport { ScalarIconCaretRight } from '@scalar/icons'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n ParameterObject,\n ResponseObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, ref } from 'vue'\n\nimport { getRefName } from '@/components/Content/Schema/helpers/get-ref-name'\nimport SchemaProperty from '@/components/Content/Schema/SchemaProperty.vue'\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\n\nimport ContentTypeSelect from './ContentTypeSelect.vue'\nimport Headers from './Headers.vue'\n\nconst { name, parameter, options, collapsableItems } = defineProps<{\n parameter: ParameterObject | ResponseObject\n name: string\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n collapsableItems?: boolean\n options: Pick<\n OperationProps['options'],\n 'orderRequiredPropertiesFirst' | 'orderSchemaPropertiesBy'\n >\n}>()\n\n/** Responses and params may both have a schema */\nconst schema = computed<SchemaObject | null>(() =>\n 'schema' in parameter && parameter.schema\n ? getResolvedRef(parameter.schema)\n : null,\n)\n\n/** Response and params may both have content */\nconst content = computed(() =>\n 'content' in parameter && parameter.content ? parameter.content : null,\n)\n\nconst selectedContentType = ref<string>(\n Object.keys(content.value || {})[0] ?? '',\n)\n\n/** Response headers */\nconst headers = computed<ResponseObject['headers'] | null>(() =>\n 'headers' in parameter && parameter.headers ? parameter.headers : null,\n)\n\n/** Raw schema (possibly with $ref) for the selected content type or param. */\nconst baseSchema = computed(() =>\n content.value\n ? content.value?.[selectedContentType.value]?.schema\n : 'schema' in parameter && parameter.schema\n ? parameter.schema\n : null,\n)\n\n/** When the schema is a $ref, preserve its name so the UI can show the ref name instead of just the type. */\nconst schemaModelName = computed(() => {\n const raw = baseSchema.value\n if (!raw) {\n return null\n }\n\n if ('$ref' in raw) {\n return getRefName(raw.$ref)\n }\n\n return null\n})\n\n/** Computed value from the combined schema param and content param */\nconst value = computed(() => {\n const base = baseSchema.value\n const resolvedBase = content.value ? getResolvedRef(base) : schema.value\n\n const deprecated =\n 'deprecated' in parameter ? parameter.deprecated : schema.value?.deprecated\n\n // Convert examples to schema examples which is an array\n const paramExamples = 'examples' in parameter ? parameter.examples : {}\n const recordExamples = Object.values({\n ...paramExamples,\n ...content.value?.[selectedContentType.value]?.examples,\n })\n\n // Only use parameter.example as fallback if no other examples exist\n const arrayExamples =\n schema.value?.examples ??\n (recordExamples.length === 0 && 'example' in parameter\n ? [parameter.example]\n : [])\n\n /** Combine param examples with content ones */\n const examples = [...recordExamples, ...arrayExamples]\n\n return {\n ...resolvedBase,\n deprecated: deprecated,\n examples,\n } as SchemaObject\n})\n\n/**\n * Determines whether this parameter item should be rendered as a collapsible disclosure.\n * Only collapses when collapsableItems is enabled and the parameter has additional\n * content to display (content types, headers, or schema details).\n */\nconst shouldCollapse = computed<boolean>(() =>\n Boolean(collapsableItems && (content.value || headers.value || schema.value)),\n)\n</script>\n<template>\n <li class=\"parameter-item group/parameter-item\">\n <Disclosure v-slot=\"{ open }\">\n <DisclosureButton\n v-if=\"shouldCollapse\"\n class=\"parameter-item-trigger\"\n :class=\"{ 'parameter-item-trigger-open': open }\">\n <div class=\"parameter-item-name min-w-0\">\n <ScalarIconCaretRight\n class=\"parameter-item-icon size-3 transition-transform duration-100\"\n :class=\"{ 'rotate-90': open }\"\n weight=\"bold\" />\n <div>\n <ScalarWrappingText\n preset=\"property\"\n :text=\"name\" />\n </div>\n </div>\n <ScalarMarkdownSummary\n v-if=\"!open && parameter.description\"\n class=\"parameter-item-description-summary min-w-0 flex-1\"\n controlled\n :value=\"parameter.description\" />\n <div\n v-else\n class=\"flex-1\" />\n </DisclosureButton>\n <div\n v-if=\"shouldCollapse && content\"\n class=\"absolute top-[calc(10px+0.5lh)] right-0 z-0 flex -translate-y-1/2 items-center text-base\"\n :class=\"{\n 'opacity-0 group-focus-within/parameter-item:opacity-100 group-hover/parameter-item:opacity-100':\n !open,\n }\">\n <div\n class=\"from-b-1 absolute inset-y-0 -left-6 -z-1 w-8 bg-linear-to-l from-40% to-transparent\" />\n <ContentTypeSelect\n v-model=\"selectedContentType\"\n :content=\"content\" />\n </div>\n <DisclosurePanel\n class=\"parameter-item-container parameter-item-container-markdown\"\n :static=\"!shouldCollapse\">\n <ScalarMarkdown\n v-if=\"shouldCollapse && parameter.description\"\n class=\"parameter-item-description\"\n :value=\"parameter.description\" />\n <!-- Headers -->\n <Headers\n v-if=\"headers\"\n :breadcrumb=\"breadcrumb\"\n :eventBus=\"eventBus\"\n :headers=\"headers\"\n :orderRequiredPropertiesFirst=\"options.orderRequiredPropertiesFirst\"\n :orderSchemaPropertiesBy=\"options.orderSchemaPropertiesBy\" />\n\n <!-- Schema -->\n <SchemaProperty\n is=\"div\"\n :breadcrumb=\"breadcrumb\"\n compact\n :description=\"shouldCollapse ? '' : parameter.description\"\n :eventBus=\"eventBus\"\n :hideWriteOnly=\"true\"\n :modelName=\"schemaModelName\"\n :name=\"shouldCollapse ? '' : name\"\n :noncollapsible=\"true\"\n :options=\"{\n hideWriteOnly: true,\n orderRequiredPropertiesFirst: options.orderRequiredPropertiesFirst,\n orderSchemaPropertiesBy: options.orderSchemaPropertiesBy,\n }\"\n :required=\"'required' in parameter && parameter.required\"\n :schema=\"value\" />\n </DisclosurePanel>\n </Disclosure>\n </li>\n</template>\n\n<style scoped>\n.parameter-item {\n display: flex;\n flex-direction: column;\n position: relative;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.parameter-item:last-of-type .parameter-schema {\n padding-bottom: 0;\n}\n\n.parameter-item-container {\n padding: 0;\n}\n\n.parameter-item-headers {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.parameter-item-name {\n position: relative;\n font-weight: var(--scalar-bold);\n font-size: var(--scalar-font-size-4);\n font-family: var(--scalar-font-code);\n color: var(--scalar-color-1);\n overflow-wrap: break-word;\n}\n\n.parameter-item-description,\n.parameter-item-description-summary {\n font-size: var(--scalar-mini);\n color: var(--scalar-color-2);\n}\n\n.parameter-item-description-summary.parameter-item-description-summary > * {\n --markdown-line-height: 1;\n}\n\n/* Match font size of markdown for property-detail-value since first child within accordian is displayed as if it were in the markdown section */\n.parameter-item-trigger\n ~ .parameter-item-container\n :deep(.property--level-0 > .property-heading .property-detail-value) {\n font-size: var(--scalar-micro);\n}\n\n.parameter-item-required-optional {\n color: var(--scalar-color-2);\n font-weight: var(--scalar-semibold);\n margin-right: 6px;\n position: relative;\n}\n\n.parameter-item--required {\n text-transform: uppercase;\n font-size: var(--scalar-micro);\n font-weight: var(--scalar-semibold);\n color: var(--scalar-color-orange);\n}\n\n.parameter-item-description {\n margin-top: 6px;\n font-size: var(--scalar-small);\n color: var(--scalar-color-2);\n line-height: 1.4;\n}\n\n.parameter-item-description :deep(p) {\n margin-top: 4px;\n font-size: var(--scalar-small);\n color: var(--scalar-color-2);\n line-height: 1.4;\n}\n\n.parameter-schema {\n padding-bottom: 9px;\n margin-top: 3px;\n}\n\n.parameter-item-trigger {\n display: flex;\n align-items: baseline;\n line-height: var(--scalar-line-height-5);\n gap: 6px;\n flex-wrap: wrap;\n padding: 10px 0;\n outline: none;\n}\n\n.parameter-item-trigger-open {\n padding-bottom: 0;\n}\n\n.parameter-item-icon {\n color: var(--scalar-color-3);\n left: -19px;\n top: 0.5lh;\n translate: 0 -50%;\n position: absolute;\n}\n\n.parameter-item-trigger:hover .parameter-item-icon,\n.parameter-item-trigger:focus-visible .parameter-item-icon {\n color: var(--scalar-color-1);\n}\n\n.parameter-item-trigger:focus-visible .parameter-item-icon {\n outline: 1px solid var(--scalar-color-accent);\n outline-offset: 2px;\n border-radius: var(--scalar-radius);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { Disclosure, DisclosureButton, DisclosurePanel } from '@headlessui/vue'\nimport {\n ScalarMarkdown,\n ScalarMarkdownSummary,\n ScalarWrappingText,\n} from '@scalar/components'\nimport { ScalarIconCaretRight } from '@scalar/icons'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n ParameterObject,\n ResponseObject,\n SchemaObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, ref } from 'vue'\n\nimport { getRefName } from '@/components/Content/Schema/helpers/get-ref-name'\nimport SchemaProperty from '@/components/Content/Schema/SchemaProperty.vue'\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\n\nimport ContentTypeSelect from './ContentTypeSelect.vue'\nimport Headers from './Headers.vue'\n\nconst { name, parameter, options, collapsableItems } = defineProps<{\n parameter: ParameterObject | ResponseObject\n name: string\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n collapsableItems?: boolean\n options: Pick<\n OperationProps['options'],\n 'orderRequiredPropertiesFirst' | 'orderSchemaPropertiesBy'\n >\n}>()\n\n/** Responses and params may both have a schema */\nconst schema = computed<SchemaObject | null>(() =>\n 'schema' in parameter && parameter.schema\n ? getResolvedRef(parameter.schema)\n : null,\n)\n\n/** Response and params may both have content */\nconst content = computed(() =>\n 'content' in parameter && parameter.content ? parameter.content : null,\n)\n\nconst selectedContentType = ref<string>(\n Object.keys(content.value || {})[0] ?? '',\n)\n\n/** Response headers */\nconst headers = computed<ResponseObject['headers'] | null>(() =>\n 'headers' in parameter && parameter.headers ? parameter.headers : null,\n)\n\n/** Raw schema (possibly with $ref) for the selected content type or param. */\nconst baseSchema = computed(() =>\n content.value\n ? content.value?.[selectedContentType.value]?.schema\n : 'schema' in parameter && parameter.schema\n ? parameter.schema\n : null,\n)\n\n/** When the schema is a $ref, preserve its name so the UI can show the ref name instead of just the type. */\nconst schemaModelName = computed(() => {\n const raw = baseSchema.value\n if (!raw) {\n return null\n }\n\n if ('$ref' in raw) {\n return getRefName(raw.$ref)\n }\n\n return null\n})\n\n/** Computed value from the combined schema param and content param */\nconst value = computed(() => {\n const base = baseSchema.value\n const resolvedBase = content.value ? getResolvedRef(base) : schema.value\n\n const deprecated =\n 'deprecated' in parameter ? parameter.deprecated : schema.value?.deprecated\n\n // Convert examples to schema examples which is an array\n const paramExamples = 'examples' in parameter ? parameter.examples : {}\n const recordExamples = Object.values({\n ...paramExamples,\n ...content.value?.[selectedContentType.value]?.examples,\n })\n\n // Only use parameter.example as fallback if no other examples exist\n const arrayExamples =\n schema.value?.examples ??\n (recordExamples.length === 0 && 'example' in parameter\n ? [parameter.example]\n : [])\n\n /** Combine param examples with content ones */\n const examples = [...recordExamples, ...arrayExamples]\n\n return {\n ...resolvedBase,\n deprecated: deprecated,\n examples,\n } as SchemaObject\n})\n\n/**\n * Determines whether this parameter item should be rendered as a collapsible disclosure.\n * Only collapses when collapsableItems is enabled and the parameter has additional\n * content to display (content types, headers, or schema details).\n */\nconst shouldCollapse = computed<boolean>(() =>\n Boolean(collapsableItems && (content.value || headers.value || schema.value)),\n)\n</script>\n<template>\n <li class=\"parameter-item group/parameter-item\">\n <Disclosure v-slot=\"{ open }\">\n <DisclosureButton\n v-if=\"shouldCollapse\"\n class=\"parameter-item-trigger\"\n :class=\"{ 'parameter-item-trigger-open': open }\">\n <div class=\"parameter-item-name min-w-0\">\n <ScalarIconCaretRight\n class=\"parameter-item-icon size-3 transition-transform duration-100\"\n :class=\"{ 'rotate-90': open }\"\n weight=\"bold\" />\n <div>\n <ScalarWrappingText\n preset=\"property\"\n :text=\"name\" />\n </div>\n </div>\n <ScalarMarkdownSummary\n v-if=\"!open && parameter.description\"\n class=\"parameter-item-description-summary min-w-0 flex-1\"\n controlled\n :value=\"parameter.description\" />\n <div\n v-else\n class=\"flex-1\" />\n </DisclosureButton>\n <div\n v-if=\"shouldCollapse && content\"\n class=\"absolute top-[calc(10px+0.5lh)] right-0 z-0 flex -translate-y-1/2 items-center text-base\"\n :class=\"{\n 'opacity-0 group-focus-within/parameter-item:opacity-100 group-hover/parameter-item:opacity-100':\n !open,\n }\">\n <div\n class=\"from-b-1 absolute inset-y-0 -left-6 -z-1 w-8 bg-linear-to-l from-40% to-transparent\" />\n <ContentTypeSelect\n v-model=\"selectedContentType\"\n :content=\"content\" />\n </div>\n <DisclosurePanel\n class=\"parameter-item-container parameter-item-container-markdown\"\n :static=\"!shouldCollapse\">\n <ScalarMarkdown\n v-if=\"shouldCollapse && parameter.description\"\n class=\"parameter-item-description\"\n :value=\"parameter.description\" />\n <!-- Headers -->\n <Headers\n v-if=\"headers\"\n :breadcrumb=\"breadcrumb\"\n :eventBus=\"eventBus\"\n :headers=\"headers\"\n :orderRequiredPropertiesFirst=\"options.orderRequiredPropertiesFirst\"\n :orderSchemaPropertiesBy=\"options.orderSchemaPropertiesBy\" />\n\n <!-- Schema -->\n <SchemaProperty\n is=\"div\"\n :breadcrumb=\"breadcrumb\"\n compact\n :description=\"shouldCollapse ? '' : parameter.description\"\n :eventBus=\"eventBus\"\n :hideWriteOnly=\"true\"\n :modelName=\"schemaModelName\"\n :name=\"shouldCollapse ? '' : name\"\n :noncollapsible=\"true\"\n :options=\"{\n hideWriteOnly: true,\n orderRequiredPropertiesFirst: options.orderRequiredPropertiesFirst,\n orderSchemaPropertiesBy: options.orderSchemaPropertiesBy,\n }\"\n :required=\"'required' in parameter && parameter.required\"\n :schema=\"value\" />\n </DisclosurePanel>\n </Disclosure>\n </li>\n</template>\n\n<style scoped>\n.parameter-item {\n display: flex;\n flex-direction: column;\n position: relative;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.parameter-item:last-of-type .parameter-schema {\n padding-bottom: 0;\n}\n\n.parameter-item-container {\n padding: 0;\n}\n\n.parameter-item-headers {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.parameter-item-name {\n position: relative;\n font-weight: var(--scalar-bold);\n font-size: var(--scalar-font-size-4);\n font-family: var(--scalar-font-code);\n color: var(--scalar-color-1);\n overflow-wrap: break-word;\n}\n\n.parameter-item-description,\n.parameter-item-description-summary {\n font-size: var(--scalar-mini);\n color: var(--scalar-color-2);\n}\n\n.parameter-item-description-summary.parameter-item-description-summary > * {\n --markdown-line-height: 1;\n}\n\n/* Match font size of markdown for property-detail-value since first child within accordian is displayed as if it were in the markdown section */\n.parameter-item-trigger\n ~ .parameter-item-container\n :deep(.property--level-0 > .property-heading .property-detail-value) {\n font-size: var(--scalar-micro);\n}\n\n.parameter-item-required-optional {\n color: var(--scalar-color-2);\n font-weight: var(--scalar-semibold);\n margin-right: 6px;\n position: relative;\n}\n\n.parameter-item--required {\n text-transform: uppercase;\n font-size: var(--scalar-micro);\n font-weight: var(--scalar-semibold);\n color: var(--scalar-color-orange);\n}\n\n.parameter-item-description {\n margin-top: 6px;\n font-size: var(--scalar-small);\n color: var(--scalar-color-2);\n line-height: 1.4;\n}\n\n.parameter-item-description :deep(p) {\n margin-top: 4px;\n font-size: var(--scalar-small);\n color: var(--scalar-color-2);\n line-height: 1.4;\n}\n\n.parameter-schema {\n padding-bottom: 9px;\n margin-top: 3px;\n}\n\n.parameter-item-trigger {\n display: flex;\n align-items: baseline;\n line-height: var(--scalar-line-height-5);\n gap: 6px;\n flex-wrap: wrap;\n padding: 10px 0;\n outline: none;\n}\n\n.parameter-item-trigger-open {\n padding-bottom: 0;\n}\n\n.parameter-item-icon {\n color: var(--scalar-color-3);\n left: -19px;\n top: 0.5lh;\n translate: 0 -50%;\n position: absolute;\n}\n\n.parameter-item-trigger:hover .parameter-item-icon,\n.parameter-item-trigger:focus-visible .parameter-item-icon {\n color: var(--scalar-color-1);\n}\n\n.parameter-item-trigger:focus-visible .parameter-item-icon {\n outline: 1px solid var(--scalar-color-accent);\n outline-offset: 2px;\n border-radius: var(--scalar-radius);\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { ParameterObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { useId } from 'vue'\n\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\n\nimport ParameterListItem from './ParameterListItem.vue'\n\nconst { parameters } = defineProps<{\n parameters: ParameterObject[]\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n collapsableItems?: boolean\n options: Pick<\n OperationProps['options'],\n 'orderRequiredPropertiesFirst' | 'orderSchemaPropertiesBy'\n >\n}>()\n\n/** Accessible id for the heading */\nconst id = useId()\n</script>\n<template>\n <div\n v-if=\"parameters?.length\"\n class=\"mt-6\">\n <div\n :id\n class=\"text-c-1 mt-3 mb-3 text-lg leading-[1.45] font-medium\">\n <slot name=\"title\" />\n </div>\n <ul\n :aria-labelledby=\"id\"\n class=\"mb-3 list-none p-0 text-sm\">\n <ParameterListItem\n v-for=\"item in parameters\"\n :key=\"item.name\"\n :breadcrumb=\"breadcrumb\"\n :collapsableItems\n :eventBus=\"eventBus\"\n :name=\"item.name\"\n :options=\"options\"\n :parameter=\"item\" />\n </ul>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { ParameterObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { useId } from 'vue'\n\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\n\nimport ParameterListItem from './ParameterListItem.vue'\n\nconst { parameters } = defineProps<{\n parameters: ParameterObject[]\n breadcrumb?: string[]\n eventBus: WorkspaceEventBus | null\n collapsableItems?: boolean\n options: Pick<\n OperationProps['options'],\n 'orderRequiredPropertiesFirst' | 'orderSchemaPropertiesBy'\n >\n}>()\n\n/** Accessible id for the heading */\nconst id = useId()\n</script>\n<template>\n <div\n v-if=\"parameters?.length\"\n class=\"mt-6\">\n <div\n :id\n class=\"text-c-1 mt-3 mb-3 text-lg leading-[1.45] font-medium\">\n <slot name=\"title\" />\n </div>\n <ul\n :aria-labelledby=\"id\"\n class=\"mb-3 list-none p-0 text-sm\">\n <ParameterListItem\n v-for=\"item in parameters\"\n :key=\"item.name\"\n :breadcrumb=\"breadcrumb\"\n :collapsableItems\n :eventBus=\"eventBus\"\n :name=\"item.name\"\n :options=\"options\"\n :parameter=\"item\" />\n </ul>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport { ScalarMarkdown } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type { RequestBodyObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, ref } from 'vue'\n\nimport { Schema } from '@/components/Content/Schema'\nimport { isTypeObject } from '@/components/Content/Schema/helpers/is-type-object'\nimport {\n reduceNamesToObject,\n sortPropertyNames,\n} from '@/components/Content/Schema/helpers/sort-property-names'\n\nimport ContentTypeSelect from './ContentTypeSelect.vue'\n\nconst { requestBody, options } = defineProps<{\n breadcrumb?: string[]\n requestBody?: RequestBodyObject\n eventBus: WorkspaceEventBus | null\n options: {\n orderRequiredPropertiesFirst: boolean | undefined\n orderSchemaPropertiesBy: 'alpha' | 'preserve' | undefined\n }\n}>()\n\n/**\n * The maximum number of properties to show in the request body schema.\n */\nconst MAX_VISIBLE_PROPERTIES = 12\n\nconst availableContentTypes = computed(() =>\n Object.keys(requestBody?.content ?? {}),\n)\n\nconst selectedContentType = ref<string>('application/json')\n\nif (requestBody?.content) {\n if (availableContentTypes.value[0]) {\n selectedContentType.value = availableContentTypes.value[0]\n }\n}\n\nconst schema = computed(() =>\n getResolvedRef(requestBody?.content?.[selectedContentType.value]?.schema),\n)\n\n/**\n * Splits schema properties into visible and collapsed sections when there are more than 12 properties.\n * Returns null for schemas with fewer properties or non-object schemas.\n */\nconst partitionedSchema = computed(() => {\n // Early return if not an object schema\n if (!schema.value || !isTypeObject(schema.value)) {\n return null\n }\n\n // Lets sort the names first\n const sortedNames = sortPropertyNames(\n schema.value,\n schema.value.discriminator,\n {\n hideReadOnly: true,\n orderSchemaPropertiesBy: options.orderSchemaPropertiesBy,\n orderRequiredPropertiesFirst: options.orderRequiredPropertiesFirst,\n },\n )\n\n if (sortedNames.length <= MAX_VISIBLE_PROPERTIES) {\n return null\n }\n\n // Destructure everything except properties\n const { properties, ...schemaMetadata } = schema.value\n if (!properties) {\n return null\n }\n\n return {\n visibleProperties: {\n ...schemaMetadata,\n properties: reduceNamesToObject(\n sortedNames.slice(0, MAX_VISIBLE_PROPERTIES),\n properties,\n ),\n },\n collapsedProperties: {\n ...schemaMetadata,\n properties: reduceNamesToObject(\n sortedNames.slice(MAX_VISIBLE_PROPERTIES),\n properties,\n ),\n },\n }\n})\n\n/**\n * We don't want to render the request body if its completely empty\n * @example\n * {\n * \"content\": {},\n * }\n */\nconst shouldRenderRequestBody = computed(\n () =>\n Object.keys(requestBody?.content ?? {}).length > 0 ||\n requestBody?.description ||\n requestBody?.required,\n)\n</script>\n<template>\n <div\n v-if=\"requestBody && shouldRenderRequestBody\"\n aria-label=\"Request Body\"\n class=\"request-body\"\n role=\"group\">\n <div class=\"request-body-header\">\n <div class=\"request-body-title\">\n <slot name=\"title\" />\n </div>\n <div class=\"flex items-center gap-2\">\n <div\n v-if=\"requestBody.required\"\n class=\"request-body-required\">\n required\n </div>\n <ContentTypeSelect\n v-model=\"selectedContentType\"\n :content=\"requestBody.content\" />\n </div>\n <div\n v-if=\"requestBody.description\"\n class=\"request-body-description\">\n <ScalarMarkdown :value=\"requestBody.description\" />\n </div>\n </div>\n\n <!-- For over 12 properties we want to show 12 and collapse the rest -->\n <div\n v-if=\"partitionedSchema\"\n class=\"request-body-schema\">\n <Schema\n :breadcrumb\n compact\n :eventBus=\"eventBus\"\n name=\"Request Body\"\n noncollapsible\n :options=\"{\n hideReadOnly: true,\n orderRequiredPropertiesFirst: options.orderRequiredPropertiesFirst,\n orderSchemaPropertiesBy: options.orderSchemaPropertiesBy,\n }\"\n :schema=\"partitionedSchema.visibleProperties\" />\n\n <Schema\n additionalProperties\n :breadcrumb\n compact\n :eventBus=\"eventBus\"\n name=\"Request Body\"\n :options=\"{\n hideReadOnly: true,\n orderRequiredPropertiesFirst: options.orderRequiredPropertiesFirst,\n orderSchemaPropertiesBy: options.orderSchemaPropertiesBy,\n }\"\n :schema=\"partitionedSchema.collapsedProperties\" />\n </div>\n\n <!-- Show em all 12 and under -->\n <div\n v-else-if=\"schema\"\n class=\"request-body-schema\">\n <Schema\n :breadcrumb\n compact\n :eventBus=\"eventBus\"\n :hideReadOnly=\"true\"\n name=\"Request Body\"\n noncollapsible\n :options=\"{\n hideReadOnly: true,\n orderRequiredPropertiesFirst: options.orderRequiredPropertiesFirst,\n orderSchemaPropertiesBy: options.orderSchemaPropertiesBy,\n }\"\n :schema=\"schema\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.request-body {\n margin-top: 24px;\n}\n.request-body-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-bottom: 12px;\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n flex-flow: wrap;\n}\n.request-body-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: var(--scalar-font-size-2);\n font-weight: var(--scalar-semibold);\n color: var(--scalar-color-1);\n}\n.request-body-required {\n font-size: var(--scalar-micro);\n color: var(--scalar-color-orange);\n font-weight: normal;\n border-radius: 16px;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n padding: 2px 8px;\n height: 20px;\n}\n.request-body-description {\n margin-top: 6px;\n font-size: var(--scalar-small);\n width: 100%;\n}\n\n.request-body-header\n + .request-body-schema:has(> .schema-card > .schema-card-description),\n.request-body-header\n + .request-body-schema:has(\n > .schema-card > .schema-properties > * > .property--level-0\n ) {\n /** Add a bit of space between the heading border and the schema description or properties */\n padding-top: 8px;\n}\n.request-body-description :deep(.markdown) * {\n color: var(--scalar-color-2) !important;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ScalarMarkdown } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type { RequestBodyObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, ref } from 'vue'\n\nimport { Schema } from '@/components/Content/Schema'\nimport { isTypeObject } from '@/components/Content/Schema/helpers/is-type-object'\nimport {\n reduceNamesToObject,\n sortPropertyNames,\n} from '@/components/Content/Schema/helpers/sort-property-names'\n\nimport ContentTypeSelect from './ContentTypeSelect.vue'\n\nconst { requestBody, options } = defineProps<{\n breadcrumb?: string[]\n requestBody?: RequestBodyObject\n eventBus: WorkspaceEventBus | null\n options: {\n orderRequiredPropertiesFirst: boolean | undefined\n orderSchemaPropertiesBy: 'alpha' | 'preserve' | undefined\n }\n}>()\n\n/**\n * The maximum number of properties to show in the request body schema.\n */\nconst MAX_VISIBLE_PROPERTIES = 12\n\nconst availableContentTypes = computed(() =>\n Object.keys(requestBody?.content ?? {}),\n)\n\nconst selectedContentType = ref<string>('application/json')\n\nif (requestBody?.content) {\n if (availableContentTypes.value[0]) {\n selectedContentType.value = availableContentTypes.value[0]\n }\n}\n\nconst schema = computed(() =>\n getResolvedRef(requestBody?.content?.[selectedContentType.value]?.schema),\n)\n\n/**\n * Splits schema properties into visible and collapsed sections when there are more than 12 properties.\n * Returns null for schemas with fewer properties or non-object schemas.\n */\nconst partitionedSchema = computed(() => {\n // Early return if not an object schema\n if (!schema.value || !isTypeObject(schema.value)) {\n return null\n }\n\n // Lets sort the names first\n const sortedNames = sortPropertyNames(\n schema.value,\n schema.value.discriminator,\n {\n hideReadOnly: true,\n orderSchemaPropertiesBy: options.orderSchemaPropertiesBy,\n orderRequiredPropertiesFirst: options.orderRequiredPropertiesFirst,\n },\n )\n\n if (sortedNames.length <= MAX_VISIBLE_PROPERTIES) {\n return null\n }\n\n // Destructure everything except properties\n const { properties, ...schemaMetadata } = schema.value\n if (!properties) {\n return null\n }\n\n return {\n visibleProperties: {\n ...schemaMetadata,\n properties: reduceNamesToObject(\n sortedNames.slice(0, MAX_VISIBLE_PROPERTIES),\n properties,\n ),\n },\n collapsedProperties: {\n ...schemaMetadata,\n properties: reduceNamesToObject(\n sortedNames.slice(MAX_VISIBLE_PROPERTIES),\n properties,\n ),\n },\n }\n})\n\n/**\n * We don't want to render the request body if its completely empty\n * @example\n * {\n * \"content\": {},\n * }\n */\nconst shouldRenderRequestBody = computed(\n () =>\n Object.keys(requestBody?.content ?? {}).length > 0 ||\n requestBody?.description ||\n requestBody?.required,\n)\n</script>\n<template>\n <div\n v-if=\"requestBody && shouldRenderRequestBody\"\n aria-label=\"Request Body\"\n class=\"request-body\"\n role=\"group\">\n <div class=\"request-body-header\">\n <div class=\"request-body-title\">\n <slot name=\"title\" />\n </div>\n <div class=\"flex items-center gap-2\">\n <div\n v-if=\"requestBody.required\"\n class=\"request-body-required\">\n required\n </div>\n <ContentTypeSelect\n v-model=\"selectedContentType\"\n :content=\"requestBody.content\" />\n </div>\n <div\n v-if=\"requestBody.description\"\n class=\"request-body-description\">\n <ScalarMarkdown :value=\"requestBody.description\" />\n </div>\n </div>\n\n <!-- For over 12 properties we want to show 12 and collapse the rest -->\n <div\n v-if=\"partitionedSchema\"\n class=\"request-body-schema\">\n <Schema\n :breadcrumb\n compact\n :eventBus=\"eventBus\"\n name=\"Request Body\"\n noncollapsible\n :options=\"{\n hideReadOnly: true,\n orderRequiredPropertiesFirst: options.orderRequiredPropertiesFirst,\n orderSchemaPropertiesBy: options.orderSchemaPropertiesBy,\n }\"\n :schema=\"partitionedSchema.visibleProperties\" />\n\n <Schema\n additionalProperties\n :breadcrumb\n compact\n :eventBus=\"eventBus\"\n name=\"Request Body\"\n :options=\"{\n hideReadOnly: true,\n orderRequiredPropertiesFirst: options.orderRequiredPropertiesFirst,\n orderSchemaPropertiesBy: options.orderSchemaPropertiesBy,\n }\"\n :schema=\"partitionedSchema.collapsedProperties\" />\n </div>\n\n <!-- Show em all 12 and under -->\n <div\n v-else-if=\"schema\"\n class=\"request-body-schema\">\n <Schema\n :breadcrumb\n compact\n :eventBus=\"eventBus\"\n :hideReadOnly=\"true\"\n name=\"Request Body\"\n noncollapsible\n :options=\"{\n hideReadOnly: true,\n orderRequiredPropertiesFirst: options.orderRequiredPropertiesFirst,\n orderSchemaPropertiesBy: options.orderSchemaPropertiesBy,\n }\"\n :schema=\"schema\" />\n </div>\n </div>\n</template>\n\n<style scoped>\n.request-body {\n margin-top: 24px;\n}\n.request-body-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding-bottom: 12px;\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n flex-flow: wrap;\n}\n.request-body-title {\n display: flex;\n align-items: center;\n gap: 8px;\n font-size: var(--scalar-font-size-2);\n font-weight: var(--scalar-semibold);\n color: var(--scalar-color-1);\n}\n.request-body-required {\n font-size: var(--scalar-micro);\n color: var(--scalar-color-orange);\n font-weight: normal;\n border-radius: 16px;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n padding: 2px 8px;\n height: 20px;\n}\n.request-body-description {\n margin-top: 6px;\n font-size: var(--scalar-small);\n width: 100%;\n}\n\n.request-body-header\n + .request-body-schema:has(> .schema-card > .schema-card-description),\n.request-body-header\n + .request-body-schema:has(\n > .schema-card > .schema-properties > * > .property--level-0\n ) {\n /** Add a bit of space between the heading border and the schema description or properties */\n padding-top: 8px;\n}\n.request-body-description :deep(.markdown) * {\n color: var(--scalar-color-2) !important;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { shouldIgnoreEntity } from '@scalar/oas-utils/helpers'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n ParameterObject,\n ReferenceType,\n RequestBodyObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\n\nimport ParameterList from './ParameterList.vue'\nimport RequestBody from './RequestBody.vue'\n\nconst { parameters = [], requestBody } = defineProps<{\n breadcrumb?: string[]\n parameters?: ReferenceType<ParameterObject>[]\n requestBody?: RequestBodyObject | undefined\n eventBus: WorkspaceEventBus | null\n options: Pick<\n OperationProps['options'],\n 'orderRequiredPropertiesFirst' | 'orderSchemaPropertiesBy'\n >\n}>()\n\n/** Use a single loop to reduce parameters by type(in) */\nconst splitParameters = computed(() =>\n (parameters ?? []).reduce(\n (acc, p) => {\n const parameter = getResolvedRef(p)\n // Filter out ignored parameters\n if (!shouldIgnoreEntity(parameter)) {\n acc[parameter.in].push(parameter)\n }\n return acc\n },\n { cookie: [], header: [], path: [], query: [] } as Record<\n 'cookie' | 'header' | 'path' | 'query',\n ParameterObject[]\n >,\n ),\n)\n</script>\n<template>\n <!-- Path parameters-->\n <ParameterList\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'path'] : undefined\"\n :eventBus=\"eventBus\"\n :options=\"options\"\n :parameters=\"splitParameters['path']\">\n <template #title>Path Parameters</template>\n </ParameterList>\n\n <!-- Query parameters -->\n <ParameterList\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'query'] : undefined\"\n :eventBus=\"eventBus\"\n :options=\"options\"\n :parameters=\"splitParameters['query']\">\n <template #title>Query Parameters</template>\n </ParameterList>\n\n <!-- Headers -->\n <ParameterList\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'headers'] : undefined\"\n :eventBus=\"eventBus\"\n :options=\"options\"\n :parameters=\"splitParameters['header']\">\n <template #title>Headers</template>\n </ParameterList>\n\n <!-- Cookies -->\n <ParameterList\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'cookies'] : undefined\"\n :eventBus=\"eventBus\"\n :options=\"options\"\n :parameters=\"splitParameters['cookie']\">\n <template #title>Cookies</template>\n </ParameterList>\n\n <!-- Request body -->\n <RequestBody\n v-if=\"requestBody\"\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'body'] : undefined\"\n :eventBus=\"eventBus\"\n :options=\"options\"\n :requestBody=\"requestBody\">\n <template #title>Body</template>\n </RequestBody>\n</template>\n","<script setup lang=\"ts\">\nimport { shouldIgnoreEntity } from '@scalar/oas-utils/helpers'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n ParameterObject,\n ReferenceType,\n RequestBodyObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\n\nimport ParameterList from './ParameterList.vue'\nimport RequestBody from './RequestBody.vue'\n\nconst { parameters = [], requestBody } = defineProps<{\n breadcrumb?: string[]\n parameters?: ReferenceType<ParameterObject>[]\n requestBody?: RequestBodyObject | undefined\n eventBus: WorkspaceEventBus | null\n options: Pick<\n OperationProps['options'],\n 'orderRequiredPropertiesFirst' | 'orderSchemaPropertiesBy'\n >\n}>()\n\n/** Use a single loop to reduce parameters by type(in) */\nconst splitParameters = computed(() =>\n (parameters ?? []).reduce(\n (acc, p) => {\n const parameter = getResolvedRef(p)\n // Filter out ignored parameters\n if (!shouldIgnoreEntity(parameter)) {\n acc[parameter.in].push(parameter)\n }\n return acc\n },\n { cookie: [], header: [], path: [], query: [] } as Record<\n 'cookie' | 'header' | 'path' | 'query',\n ParameterObject[]\n >,\n ),\n)\n</script>\n<template>\n <!-- Path parameters-->\n <ParameterList\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'path'] : undefined\"\n :eventBus=\"eventBus\"\n :options=\"options\"\n :parameters=\"splitParameters['path']\">\n <template #title>Path Parameters</template>\n </ParameterList>\n\n <!-- Query parameters -->\n <ParameterList\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'query'] : undefined\"\n :eventBus=\"eventBus\"\n :options=\"options\"\n :parameters=\"splitParameters['query']\">\n <template #title>Query Parameters</template>\n </ParameterList>\n\n <!-- Headers -->\n <ParameterList\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'headers'] : undefined\"\n :eventBus=\"eventBus\"\n :options=\"options\"\n :parameters=\"splitParameters['header']\">\n <template #title>Headers</template>\n </ParameterList>\n\n <!-- Cookies -->\n <ParameterList\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'cookies'] : undefined\"\n :eventBus=\"eventBus\"\n :options=\"options\"\n :parameters=\"splitParameters['cookie']\">\n <template #title>Cookies</template>\n </ParameterList>\n\n <!-- Request body -->\n <RequestBody\n v-if=\"requestBody\"\n :breadcrumb=\"breadcrumb ? [...breadcrumb, 'body'] : undefined\"\n :eventBus=\"eventBus\"\n :options=\"options\"\n :requestBody=\"requestBody\">\n <template #title>Body</template>\n </RequestBody>\n</template>\n","<script setup lang=\"ts\">\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type { OperationObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\n\nimport ParameterListItem from './ParameterListItem.vue'\n\nconst { responses } = defineProps<{\n responses: OperationObject['responses']\n breadcrumb?: string[]\n collapsableItems?: boolean\n eventBus: WorkspaceEventBus | null\n options: Pick<\n OperationProps['options'],\n 'orderRequiredPropertiesFirst' | 'orderSchemaPropertiesBy'\n >\n}>()\n</script>\n<template>\n <div\n v-if=\"Object.keys(responses ?? {}).length\"\n class=\"mt-6\">\n <div class=\"text-c-1 mt-3 mb-3 leading-[1.45] font-medium\">Responses</div>\n <ul\n aria-label=\"Responses\"\n class=\"mb-3 list-none p-0 text-sm\">\n <ParameterListItem\n v-for=\"(response, status) in responses\"\n :key=\"status\"\n :breadcrumb\n :collapsableItems\n :eventBus\n :name=\"status\"\n :options\n :parameter=\"getResolvedRef(response)\" />\n </ul>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type { OperationObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\n\nimport ParameterListItem from './ParameterListItem.vue'\n\nconst { responses } = defineProps<{\n responses: OperationObject['responses']\n breadcrumb?: string[]\n collapsableItems?: boolean\n eventBus: WorkspaceEventBus | null\n options: Pick<\n OperationProps['options'],\n 'orderRequiredPropertiesFirst' | 'orderSchemaPropertiesBy'\n >\n}>()\n</script>\n<template>\n <div\n v-if=\"Object.keys(responses ?? {}).length\"\n class=\"mt-6\">\n <div class=\"text-c-1 mt-3 mb-3 leading-[1.45] font-medium\">Responses</div>\n <ul\n aria-label=\"Responses\"\n class=\"mb-3 list-none p-0 text-sm\">\n <ParameterListItem\n v-for=\"(response, status) in responses\"\n :key=\"status\"\n :breadcrumb\n :collapsableItems\n :eventBus\n :name=\"status\"\n :options\n :parameter=\"getResolvedRef(response)\" />\n </ul>\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HttpMethod as HttpMethodType } from '@scalar/helpers/http/http-methods'\nimport { ScalarIconCaretRight } from '@scalar/icons'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport { type OperationObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nimport { HttpMethod } from '@/components/HttpMethod'\nimport OperationParameters from '@/features/Operation/components/OperationParameters.vue'\nimport OperationResponses from '@/features/Operation/components/OperationResponses.vue'\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\n\nconst { method, name, url, options } = defineProps<{\n callback: OperationObject\n method: HttpMethodType\n name: string\n url: string\n eventBus: WorkspaceEventBus | null\n options: Pick<\n OperationProps['options'],\n 'orderRequiredPropertiesFirst' | 'orderSchemaPropertiesBy'\n >\n}>()\n</script>\n\n<template>\n <details class=\"group callback-list-item\">\n <!-- Title -->\n <summary\n class=\"font-code bg-b-1 callback-sticky-offset callback-list-item-title sticky flex cursor-pointer flex-row items-start gap-2 border-t py-2.5 text-sm group-open:flex-wrap\">\n <ScalarIconCaretRight\n class=\"callback-list-item-icon text-c-3 group-hover:text-c-1 absolute top-3.5 -left-5 size-3 transition-transform duration-100 group-open:rotate-90\"\n weight=\"bold\" />\n <HttpMethod\n as=\"span\"\n class=\"request-method py-0.75 font-bold\"\n :method=\"method\" />\n <div\n class=\"text-c-1 min-w-0 flex-1 truncate text-sm leading-5 font-bold group-open:whitespace-normal\">\n {{ name }}\n <span class=\"text-c-2 font-normal\">\n {{ url }}\n </span>\n </div>\n </summary>\n\n <!-- Body -->\n <div class=\"callback-operation-container flex flex-col gap-2\">\n <OperationParameters\n :eventBus=\"eventBus\"\n :options=\"options\"\n :parameters=\"\n callback.parameters?.map((param) => getResolvedRef(param)) ?? []\n \"\n :requestBody=\"getResolvedRef(callback.requestBody)\" />\n\n <!-- Responses -->\n <OperationResponses\n :collapsableItems=\"false\"\n :eventBus\n :options\n :responses=\"callback.responses\" />\n </div>\n </details>\n</template>\n<style scoped>\n.callback-sticky-offset {\n top: var(--refs-viewport-offset, 0px);\n z-index: 1;\n}\n.callback-operation-container :deep(.request-body),\n.callback-operation-container :deep(.request-body-description),\n.callback-operation-container :deep(.request-body-header) {\n margin-top: 0;\n}\n.callback-operation-container :deep(.request-body-header) {\n --scalar-font-size-2: var(--scalar-font-size-4);\n padding: 10px;\n border-bottom: none;\n border: 0.5px solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg) var(--scalar-radius-lg) 0 0;\n background: color-mix(in srgb, var(--scalar-background-2) 50%, transparent);\n}\n.callback-operation-container\n :deep(.request-body-schema > .schema-card > .schema-card-description) {\n padding-inline: 8px;\n}\n.callback-operation-container :deep(ul li.property.property--level-1) {\n padding: 10px;\n}\n.callback-operation-container :deep(.request-body-schema) {\n background-color: var(--scalar-background-1);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-top: none;\n overflow: hidden;\n border-radius: 0 0 var(--scalar-radius-lg) var(--scalar-radius-lg);\n}\n.callback-operation-container :deep(.parameter-list) {\n margin-top: 0;\n}\n.callback-operation-container :deep(.parameter-list-title) {\n background: color-mix(in srgb, var(--scalar-background-2) 50%, transparent);\n border-radius: var(--scalar-radius-lg) var(--scalar-radius-lg) 0 0;\n padding: 10px;\n margin-bottom: 0;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-bottom: none;\n --scalar-font-size-2: var(--scalar-font-size-4);\n}\n.callback-operation-container :deep(.parameter-list-items) {\n /* background: pink; */\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: 0 0 var(--scalar-radius-lg) var(--scalar-radius-lg);\n}\n.callback-operation-container :deep(.parameter-list-items > li:first-of-type) {\n border-top: none;\n}\n.callback-operation-container :deep(.parameter-list-items > li) {\n padding: 0 8px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { HttpMethod as HttpMethodType } from '@scalar/helpers/http/http-methods'\nimport { ScalarIconCaretRight } from '@scalar/icons'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport { type OperationObject } from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\n\nimport { HttpMethod } from '@/components/HttpMethod'\nimport OperationParameters from '@/features/Operation/components/OperationParameters.vue'\nimport OperationResponses from '@/features/Operation/components/OperationResponses.vue'\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\n\nconst { method, name, url, options } = defineProps<{\n callback: OperationObject\n method: HttpMethodType\n name: string\n url: string\n eventBus: WorkspaceEventBus | null\n options: Pick<\n OperationProps['options'],\n 'orderRequiredPropertiesFirst' | 'orderSchemaPropertiesBy'\n >\n}>()\n</script>\n\n<template>\n <details class=\"group callback-list-item\">\n <!-- Title -->\n <summary\n class=\"font-code bg-b-1 callback-sticky-offset callback-list-item-title sticky flex cursor-pointer flex-row items-start gap-2 border-t py-2.5 text-sm group-open:flex-wrap\">\n <ScalarIconCaretRight\n class=\"callback-list-item-icon text-c-3 group-hover:text-c-1 absolute top-3.5 -left-5 size-3 transition-transform duration-100 group-open:rotate-90\"\n weight=\"bold\" />\n <HttpMethod\n as=\"span\"\n class=\"request-method py-0.75 font-bold\"\n :method=\"method\" />\n <div\n class=\"text-c-1 min-w-0 flex-1 truncate text-sm leading-5 font-bold group-open:whitespace-normal\">\n {{ name }}\n <span class=\"text-c-2 font-normal\">\n {{ url }}\n </span>\n </div>\n </summary>\n\n <!-- Body -->\n <div class=\"callback-operation-container flex flex-col gap-2\">\n <OperationParameters\n :eventBus=\"eventBus\"\n :options=\"options\"\n :parameters=\"\n callback.parameters?.map((param) => getResolvedRef(param)) ?? []\n \"\n :requestBody=\"getResolvedRef(callback.requestBody)\" />\n\n <!-- Responses -->\n <OperationResponses\n :collapsableItems=\"false\"\n :eventBus\n :options\n :responses=\"callback.responses\" />\n </div>\n </details>\n</template>\n<style scoped>\n.callback-sticky-offset {\n top: var(--refs-viewport-offset, 0px);\n z-index: 1;\n}\n.callback-operation-container :deep(.request-body),\n.callback-operation-container :deep(.request-body-description),\n.callback-operation-container :deep(.request-body-header) {\n margin-top: 0;\n}\n.callback-operation-container :deep(.request-body-header) {\n --scalar-font-size-2: var(--scalar-font-size-4);\n padding: 10px;\n border-bottom: none;\n border: 0.5px solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg) var(--scalar-radius-lg) 0 0;\n background: color-mix(in srgb, var(--scalar-background-2) 50%, transparent);\n}\n.callback-operation-container\n :deep(.request-body-schema > .schema-card > .schema-card-description) {\n padding-inline: 8px;\n}\n.callback-operation-container :deep(ul li.property.property--level-1) {\n padding: 10px;\n}\n.callback-operation-container :deep(.request-body-schema) {\n background-color: var(--scalar-background-1);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-top: none;\n overflow: hidden;\n border-radius: 0 0 var(--scalar-radius-lg) var(--scalar-radius-lg);\n}\n.callback-operation-container :deep(.parameter-list) {\n margin-top: 0;\n}\n.callback-operation-container :deep(.parameter-list-title) {\n background: color-mix(in srgb, var(--scalar-background-2) 50%, transparent);\n border-radius: var(--scalar-radius-lg) var(--scalar-radius-lg) 0 0;\n padding: 10px;\n margin-bottom: 0;\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-bottom: none;\n --scalar-font-size-2: var(--scalar-font-size-4);\n}\n.callback-operation-container :deep(.parameter-list-items) {\n /* background: pink; */\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: 0 0 var(--scalar-radius-lg) var(--scalar-radius-lg);\n}\n.callback-operation-container :deep(.parameter-list-items > li:first-of-type) {\n border-top: none;\n}\n.callback-operation-container :deep(.parameter-list-items > li) {\n padding: 0 8px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport { isHttpMethod } from '@scalar/helpers/http/is-http-method'\nimport { objectEntries } from '@scalar/helpers/object/object-entries'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n CallbackObject,\n OperationObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\n\nimport Callback from './Callback.vue'\n\nconst { path, callbacks, options } = defineProps<{\n path: string\n callbacks: CallbackObject\n eventBus: WorkspaceEventBus | null\n options: Pick<\n OperationProps['options'],\n 'orderRequiredPropertiesFirst' | 'orderSchemaPropertiesBy'\n >\n}>()\n\ntype CallbackType = {\n name: string\n url: string\n method: HttpMethod\n callback: OperationObject\n}\n\n/** Extract the callbacks with method, url, and name */\nconst flattenedCallbacks = computed<CallbackType[]>(() => {\n const _callbacks: CallbackType[] = []\n\n // Loop over the name level\n objectEntries(callbacks).forEach(([name, pathItem]) => {\n // Loop over the url level\n objectEntries(getResolvedRef(pathItem)).forEach(([url, methods]) => {\n if (typeof methods !== 'object' || !methods) {\n return\n }\n\n // Loop over the method level\n objectEntries(methods).forEach(([callbackMethod, callback]) => {\n if (!isHttpMethod(callbackMethod)) {\n return\n }\n\n _callbacks.push({\n name,\n url,\n method: callbackMethod,\n callback: callback,\n })\n })\n })\n })\n\n return _callbacks\n})\n</script>\n\n<template>\n <div\n aria-label=\"Callbacks\"\n class=\"callbacks-list gap-3\"\n role=\"group\">\n <div class=\"callbacks-title text-c-1 my-3 text-lg font-medium\">\n Callbacks\n </div>\n <Callback\n v-for=\"{ callback, method, name, url } in flattenedCallbacks\"\n :key=\"`${name}-${url}-${method}`\"\n :callback\n :eventBus\n :method\n :name\n :options\n :path\n :url />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport { isHttpMethod } from '@scalar/helpers/http/is-http-method'\nimport { objectEntries } from '@scalar/helpers/object/object-entries'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n CallbackObject,\n OperationObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\n\nimport Callback from './Callback.vue'\n\nconst { path, callbacks, options } = defineProps<{\n path: string\n callbacks: CallbackObject\n eventBus: WorkspaceEventBus | null\n options: Pick<\n OperationProps['options'],\n 'orderRequiredPropertiesFirst' | 'orderSchemaPropertiesBy'\n >\n}>()\n\ntype CallbackType = {\n name: string\n url: string\n method: HttpMethod\n callback: OperationObject\n}\n\n/** Extract the callbacks with method, url, and name */\nconst flattenedCallbacks = computed<CallbackType[]>(() => {\n const _callbacks: CallbackType[] = []\n\n // Loop over the name level\n objectEntries(callbacks).forEach(([name, pathItem]) => {\n // Loop over the url level\n objectEntries(getResolvedRef(pathItem)).forEach(([url, methods]) => {\n if (typeof methods !== 'object' || !methods) {\n return\n }\n\n // Loop over the method level\n objectEntries(methods).forEach(([callbackMethod, callback]) => {\n if (!isHttpMethod(callbackMethod)) {\n return\n }\n\n _callbacks.push({\n name,\n url,\n method: callbackMethod,\n callback: callback,\n })\n })\n })\n })\n\n return _callbacks\n})\n</script>\n\n<template>\n <div\n aria-label=\"Callbacks\"\n class=\"callbacks-list gap-3\"\n role=\"group\">\n <div class=\"callbacks-title text-c-1 my-3 text-lg font-medium\">\n Callbacks\n </div>\n <Callback\n v-for=\"{ callback, method, name, url } in flattenedCallbacks\"\n :key=\"`${name}-${url}-${method}`\"\n :callback\n :eventBus\n :method\n :name\n :options\n :path\n :url />\n </div>\n</template>\n","<script setup lang=\"ts\">\nimport type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport { ScalarIconPlay } from '@scalar/icons'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\n\nimport ScreenReader from '@/components/ScreenReader.vue'\n\nconst { id, method, path, eventBus, exampleName } = defineProps<{\n id: string\n method: HttpMethod\n path: string\n eventBus: WorkspaceEventBus\n exampleName?: string\n}>()\n\n/** Route via ID and optionally with example name */\nconst handleClick = () => {\n // Include exampleName in payload if provided\n const payload = {\n id,\n ...(exampleName && { exampleName }),\n }\n eventBus.emit('ui:open:client-modal', payload)\n}\n</script>\n<template>\n <!-- Render the Test Request Button -->\n <button\n class=\"show-api-client-button\"\n :method=\"method\"\n type=\"button\"\n @click.stop=\"handleClick\">\n <ScalarIconPlay\n class=\"size-3\"\n weight=\"fill\" />\n <span>Test Request</span>\n <ScreenReader>({{ method }} {{ path }})</ScreenReader>\n </button>\n</template>\n<style scoped>\n.show-api-client-button {\n appearance: none;\n border: none;\n padding: 1px 6px;\n white-space: nowrap;\n border-radius: var(--scalar-radius);\n display: flex;\n justify-content: center;\n align-items: center;\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-small);\n line-height: 22px;\n color: var(--scalar-background-2);\n font-family: var(--scalar-font);\n background: var(--scalar-button-1);\n position: relative;\n cursor: pointer;\n box-sizing: border-box;\n box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);\n\n outline-offset: 2px;\n}\n.show-api-client-button span,\n.show-api-client-button svg {\n fill: currentColor;\n color: var(--scalar-button-1-color);\n z-index: 1;\n}\n.show-api-client-button:hover {\n background: var(--scalar-button-1-hover);\n}\n.show-api-client-button svg {\n margin-right: 4px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport { ScalarIconPlay } from '@scalar/icons'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\n\nimport ScreenReader from '@/components/ScreenReader.vue'\n\nconst { id, method, path, eventBus, exampleName } = defineProps<{\n id: string\n method: HttpMethod\n path: string\n eventBus: WorkspaceEventBus\n exampleName?: string\n}>()\n\n/** Route via ID and optionally with example name */\nconst handleClick = () => {\n // Include exampleName in payload if provided\n const payload = {\n id,\n ...(exampleName && { exampleName }),\n }\n eventBus.emit('ui:open:client-modal', payload)\n}\n</script>\n<template>\n <!-- Render the Test Request Button -->\n <button\n class=\"show-api-client-button\"\n :method=\"method\"\n type=\"button\"\n @click.stop=\"handleClick\">\n <ScalarIconPlay\n class=\"size-3\"\n weight=\"fill\" />\n <span>Test Request</span>\n <ScreenReader>({{ method }} {{ path }})</ScreenReader>\n </button>\n</template>\n<style scoped>\n.show-api-client-button {\n appearance: none;\n border: none;\n padding: 1px 6px;\n white-space: nowrap;\n border-radius: var(--scalar-radius);\n display: flex;\n justify-content: center;\n align-items: center;\n font-weight: var(--scalar-semibold);\n font-size: var(--scalar-small);\n line-height: 22px;\n color: var(--scalar-background-2);\n font-family: var(--scalar-font);\n background: var(--scalar-button-1);\n position: relative;\n cursor: pointer;\n box-sizing: border-box;\n box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.1);\n\n outline-offset: 2px;\n}\n.show-api-client-button span,\n.show-api-client-button svg {\n fill: currentColor;\n color: var(--scalar-button-1-color);\n z-index: 1;\n}\n.show-api-client-button:hover {\n background: var(--scalar-button-1-hover);\n}\n.show-api-client-button svg {\n margin-right: 4px;\n}\n</style>\n","<script setup lang=\"ts\">\nimport type { XBadge } from '@scalar/workspace-store/schemas/extensions/operation'\nimport { computed } from 'vue'\n\nimport { Badge } from '@/components/Badge'\n\nconst { position, badges } = defineProps<{\n position: 'before' | 'after'\n badges: XBadge[] | unknown\n}>()\n\nconst filteredBadges = computed<XBadge[]>(() => {\n if (Array.isArray(badges)) {\n return badges.filter(\n (badge) =>\n badge.position === position ||\n (position === 'after' && !badge.position),\n )\n }\n\n return []\n})\n</script>\n\n<template>\n <template v-if=\"filteredBadges.length\">\n <template\n v-for=\"badge in filteredBadges\"\n :key=\"badge.name\">\n <Badge :color=\"badge.color\">\n {{ badge.name }}\n </Badge>\n </template>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport type { XBadge } from '@scalar/workspace-store/schemas/extensions/operation'\nimport { computed } from 'vue'\n\nimport { Badge } from '@/components/Badge'\n\nconst { position, badges } = defineProps<{\n position: 'before' | 'after'\n badges: XBadge[] | unknown\n}>()\n\nconst filteredBadges = computed<XBadge[]>(() => {\n if (Array.isArray(badges)) {\n return badges.filter(\n (badge) =>\n badge.position === position ||\n (position === 'after' && !badge.position),\n )\n }\n\n return []\n})\n</script>\n\n<template>\n <template v-if=\"filteredBadges.length\">\n <template\n v-for=\"badge in filteredBadges\"\n :key=\"badge.name\">\n <Badge :color=\"badge.color\">\n {{ badge.name }}\n </Badge>\n </template>\n </template>\n</template>\n","<script setup lang=\"ts\">\nimport { OperationCodeSample } from '@scalar/api-client/v2/blocks/operation-code-sample'\nimport type { SecuritySchemeObjectSecret } from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport {\n ScalarErrorBoundary,\n ScalarIconButton,\n ScalarMarkdown,\n} from '@scalar/components'\nimport {\n ScalarIconCopy,\n ScalarIconPlay,\n ScalarIconWebhooksLogo,\n} from '@scalar/icons'\nimport {\n getOperationStability,\n getOperationStabilityColor,\n isOperationDeprecated,\n} from '@scalar/oas-utils/helpers'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n OperationObject,\n ServerObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, ref } from 'vue'\n\nimport { Anchor } from '@/components/Anchor'\nimport { Badge } from '@/components/Badge'\nimport { HttpMethod } from '@/components/HttpMethod'\nimport { LinkList } from '@/components/LinkList'\nimport OperationPath from '@/components/OperationPath.vue'\nimport { SectionAccordion } from '@/components/Section'\nimport { ExampleResponses } from '@/features/example-responses'\nimport { ExternalDocs } from '@/features/external-docs'\nimport Callbacks from '@/features/Operation/components/callbacks/Callbacks.vue'\nimport OperationParameters from '@/features/Operation/components/OperationParameters.vue'\nimport OperationResponses from '@/features/Operation/components/OperationResponses.vue'\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\nimport { getXKeysFromObject } from '@/features/specification-extension'\nimport SpecificationExtension from '@/features/specification-extension/SpecificationExtension.vue'\nimport { TestRequestButton } from '@/features/test-request-button'\nimport { XBadges } from '@/features/x-badges'\n\nconst {\n clientOptions,\n eventBus,\n isWebhook,\n method,\n operation,\n options,\n path,\n selectedServer,\n selectedSecuritySchemes,\n selectedClient,\n} = defineProps<\n Omit<\n OperationProps,\n 'document' | 'pathValue' | 'server' | 'securitySchemes' | 'authStore'\n > & {\n /** Operation object with path params */\n operation: OperationObject\n /** The selected server for the operation */\n selectedServer: ServerObject | null\n /** The selected security schemes for the operation */\n selectedSecuritySchemes: SecuritySchemeObjectSecret[]\n }\n>()\n\nconst operationTitle = computed(() => operation.summary || path || '')\nconst operationExtensions = computed(() => getXKeysFromObject(operation))\n\n/** Track the currently selected example for passing to the modal */\nconst selectedExampleKey = ref<string>('')\n\nconst { copyToClipboard } = useClipboard()\n</script>\n<template>\n <SectionAccordion\n :id=\"id\"\n :aria-label=\"operationTitle\"\n class=\"reference-endpoint\"\n :modelValue=\"!isCollapsed\"\n transparent\n @update:modelValue=\"\n (value) => eventBus?.emit('toggle:nav-item', { id, open: value })\n \">\n <template #title>\n <div class=\"operation-title\">\n <div class=\"operation-details\">\n <HttpMethod\n class=\"endpoint-type\"\n :method=\"method\"\n short />\n <Anchor\n class=\"endpoint-anchor\"\n @copyAnchorUrl=\"() => eventBus?.emit('copy-url:nav-item', { id })\">\n <h3 class=\"endpoint-label\">\n <div class=\"endpoint-label-path\">\n <OperationPath\n :deprecated=\"isOperationDeprecated(operation)\"\n :path=\"path\" />\n </div>\n <div class=\"endpoint-label-name\">\n {{ operationTitle }}\n </div>\n <!-- Stability badge -->\n <Badge\n v-if=\"getOperationStability(operation)\"\n class=\"capitalize\"\n :class=\"getOperationStabilityColor(operation)\">\n {{ getOperationStability(operation) }}\n </Badge>\n\n <!-- Webhook badge -->\n <Badge\n v-if=\"isWebhook\"\n class=\"font-code text-green flex w-fit items-center justify-center gap-1\">\n <ScalarIconWebhooksLogo weight=\"bold\" />Webhook\n </Badge>\n\n <!-- x-badges before -->\n <XBadges\n :badges=\"operation['x-badges']\"\n position=\"before\" />\n </h3>\n </Anchor>\n </div>\n </div>\n </template>\n <template #actions=\"{ active }\">\n <!-- x-badges after -->\n <XBadges\n :badges=\"operation['x-badges']\"\n position=\"after\" />\n <template v-if=\"!options.hideTestRequestButton\">\n <TestRequestButton\n v-if=\"active && !isWebhook\"\n :id\n :eventBus\n :exampleName=\"selectedExampleKey\"\n :method\n :path />\n <ScalarIconPlay\n v-else\n class=\"endpoint-try-hint size-4.5\" />\n </template>\n <span\n v-if=\"options.showOperationId && operation.operationId\"\n class=\"font-code text-sm\">\n {{ operation.operationId }}\n </span>\n <ScalarIconButton\n class=\"endpoint-copy p-0.5\"\n :icon=\"ScalarIconCopy\"\n label=\"Copy endpoint URL\"\n size=\"xs\"\n variant=\"ghost\"\n @click.stop=\"copyToClipboard(path)\" />\n </template>\n <template\n v-if=\"operation.description\"\n #description>\n <ScalarMarkdown\n :anchorPrefix=\"id\"\n aria-label=\"Operation Description\"\n role=\"group\"\n transformType=\"heading\"\n :value=\"operation.description\"\n withAnchors\n withImages />\n </template>\n <div class=\"endpoint-content\">\n <div class=\"operation-details-card\">\n <div\n v-if=\"Object.keys(operationExtensions).length > 0\"\n class=\"operation-details-card-item\">\n <SpecificationExtension :value=\"operationExtensions\" />\n </div>\n <div class=\"operation-details-card-item\">\n <OperationParameters\n :eventBus\n :options\n :parameters=\"operation.parameters\"\n :requestBody=\"getResolvedRef(operation.requestBody)\" />\n </div>\n <div class=\"operation-details-card-item\">\n <OperationResponses\n :eventBus\n :options\n :responses=\"operation.responses\" />\n </div>\n\n <!-- Callbacks -->\n <div\n v-if=\"operation?.callbacks\"\n class=\"operation-details-card-item\">\n <Callbacks\n :callbacks=\"operation.callbacks\"\n :eventBus\n :options\n :path />\n </div>\n </div>\n\n <ExampleResponses\n v-if=\"operation.responses\"\n class=\"operation-example-card\"\n :responses=\"operation.responses\" />\n\n <!-- New Example Request -->\n <div>\n <!-- External Docs -->\n <LinkList v-if=\"operation.externalDocs\">\n <ExternalDocs :value=\"operation.externalDocs\" />\n </LinkList>\n <!-- Request Example -->\n <ScalarErrorBoundary>\n <OperationCodeSample\n v-model:selectedExample=\"selectedExampleKey\"\n class=\"operation-example-card\"\n :clientOptions\n :eventBus\n fallback\n :isWebhook\n :method\n :operation\n :path\n :securitySchemes=\"selectedSecuritySchemes\"\n :selectedClient\n :selectedServer />\n </ScalarErrorBoundary>\n </div>\n </div>\n </SectionAccordion>\n</template>\n\n<style scoped>\n@reference \"@/style.css\";\n\n.operation-title {\n display: flex;\n justify-content: space-between;\n}\n.operation-details {\n display: flex;\n align-items: center;\n margin-top: 0;\n gap: 9px;\n\n min-width: 0;\n flex-shrink: 1;\n}\n.operation-details :deep(.endpoint-anchor .scalar-button svg) {\n width: 16px;\n height: 16px;\n}\n.endpoint-type {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n\n position: relative;\n z-index: 0;\n\n width: 60px;\n padding: 6px;\n flex-shrink: 0;\n\n font-size: var(--scalar-small);\n\n text-transform: uppercase;\n font-weight: var(--scalar-bold);\n font-family: var(--scalar-font);\n}\n.endpoint-type::after {\n content: '';\n position: absolute;\n inset: 0;\n z-index: -1;\n\n background: currentColor;\n opacity: 0.15;\n\n border-radius: var(--scalar-radius);\n}\n\n.endpoint-anchor {\n display: flex;\n align-items: center;\n min-width: 0;\n flex-shrink: 1;\n}\n.endpoint-anchor.label {\n display: flex;\n}\n.endpoint-label {\n display: flex;\n align-items: baseline;\n gap: 9px;\n\n min-width: 0;\n flex-shrink: 1;\n\n color: var(--scalar-color-1);\n}\n\n.endpoint-label-path {\n font-family: var(--scalar-font-code);\n font-size: var(--scalar-mini);\n\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n.endpoint-label-path :deep(em) {\n color: var(--scalar-color-2);\n}\n.endpoint-label-name {\n color: var(--scalar-color-2);\n font-size: var(--scalar-small);\n\n /* Concatenate the name before we shrink the path */\n flex-shrink: 1000000000;\n\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.endpoint-try-hint {\n padding: 2px;\n flex-shrink: 0;\n}\n.endpoint-copy {\n color: currentColor;\n}\n.endpoint-copy :deep(svg) {\n stroke-width: 2px;\n}\n\n.endpoint-content {\n display: grid;\n grid-auto-columns: 1fr;\n grid-auto-flow: row;\n gap: 9px;\n padding: 9px;\n}\n\n@variant lg {\n .endpoint-content {\n grid-auto-flow: column;\n }\n}\n\n@container (max-width: 900px) {\n .endpoint-content {\n grid-template-columns: 1fr;\n }\n}\n\n.endpoint-content > * {\n min-width: 0;\n}\n\n.operation-details-card {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n}\n.operation-details-card-item :deep(.parameter-list),\n.operation-details-card-item :deep(.callbacks-list) {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n margin-top: 0;\n}\n\n.operation-details-card-item {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.operation-details-card-item :deep(.parameter-list-items) {\n margin-bottom: 0;\n}\n.operation-details-card :deep(.parameter-item:last-of-type .parameter-schema) {\n padding-bottom: 12px;\n}\n.operation-details-card :deep(.parameter-list .parameter-list) {\n margin-bottom: 12px;\n}\n.operation-details-card :deep(.parameter-item) {\n margin: 0;\n padding: 0;\n}\n.operation-details-card :deep(.property) {\n padding: 9px;\n margin: 0;\n}\n.operation-details-card :deep(.parameter-list-title),\n.operation-details-card :deep(.request-body-title),\n.operation-details-card :deep(.callbacks-title) {\n text-transform: uppercase;\n font-weight: var(--scalar-bold);\n font-size: var(--scalar-mini);\n color: var(--scalar-color-2);\n line-height: 1.33;\n padding: 9px;\n margin: 0;\n}\n\n.operation-details-card :deep(.callback-list-item-title) {\n padding-left: 28px;\n padding-right: 12px;\n}\n\n.operation-details-card :deep(.callback-list-item-icon) {\n left: 6px;\n}\n\n.operation-details-card :deep(.callback-operation-container) {\n padding-inline: 9px;\n padding-bottom: 9px;\n}\n\n.operation-details-card :deep(.callback-operation-container > .request-body),\n.operation-details-card :deep(.callback-operation-container > .parameter-list) {\n border: none;\n}\n\n.operation-details-card\n :deep(.callback-operation-container > .request-body > .request-body-header) {\n padding: 0;\n padding-bottom: 9px;\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.operation-details-card :deep(.request-body-description) {\n margin-top: 0;\n padding: 9px 9px 0 9px;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.operation-details-card :deep(.request-body) {\n margin-top: 0;\n border-radius: var(--scalar-radius-lg);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n.operation-details-card\n :deep(.request-body .schema-card--level-0 > .schema-card-description) {\n padding-inline: 9px;\n}\n\n.operation-details-card :deep(.request-body-header) {\n padding-bottom: 0;\n border-bottom: 0;\n}\n\n.operation-details-card :deep(.contents button) {\n margin-right: 9px;\n}\n\n.operation-details-card\n :deep(.schema-card--open + .schema-card:not(.schema-card--open)) {\n margin-inline: 9px;\n margin-bottom: 9px;\n}\n.operation-details-card :deep(.request-body-schema .property--level-0) {\n padding: 0;\n}\n.operation-details-card :deep(.request-body-schema .property--level-0) {\n padding: 0;\n}\n\n.operation-details-card :deep(.selected-content-type) {\n margin-right: 9px;\n}\n\n.operation-example-card {\n position: sticky;\n top: calc(var(--refs-viewport-offset) + 24px);\n max-height: calc(var(--refs-viewport-height) - 48px);\n}\n\n@media (max-width: 600px) {\n .operation-example-card {\n max-height: unset;\n position: static;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { OperationCodeSample } from '@scalar/api-client/v2/blocks/operation-code-sample'\nimport type { SecuritySchemeObjectSecret } from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport {\n ScalarErrorBoundary,\n ScalarIconButton,\n ScalarMarkdown,\n} from '@scalar/components'\nimport {\n ScalarIconCopy,\n ScalarIconPlay,\n ScalarIconWebhooksLogo,\n} from '@scalar/icons'\nimport {\n getOperationStability,\n getOperationStabilityColor,\n isOperationDeprecated,\n} from '@scalar/oas-utils/helpers'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n OperationObject,\n ServerObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, ref } from 'vue'\n\nimport { Anchor } from '@/components/Anchor'\nimport { Badge } from '@/components/Badge'\nimport { HttpMethod } from '@/components/HttpMethod'\nimport { LinkList } from '@/components/LinkList'\nimport OperationPath from '@/components/OperationPath.vue'\nimport { SectionAccordion } from '@/components/Section'\nimport { ExampleResponses } from '@/features/example-responses'\nimport { ExternalDocs } from '@/features/external-docs'\nimport Callbacks from '@/features/Operation/components/callbacks/Callbacks.vue'\nimport OperationParameters from '@/features/Operation/components/OperationParameters.vue'\nimport OperationResponses from '@/features/Operation/components/OperationResponses.vue'\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\nimport { getXKeysFromObject } from '@/features/specification-extension'\nimport SpecificationExtension from '@/features/specification-extension/SpecificationExtension.vue'\nimport { TestRequestButton } from '@/features/test-request-button'\nimport { XBadges } from '@/features/x-badges'\n\nconst {\n clientOptions,\n eventBus,\n isWebhook,\n method,\n operation,\n options,\n path,\n selectedServer,\n selectedSecuritySchemes,\n selectedClient,\n} = defineProps<\n Omit<\n OperationProps,\n 'document' | 'pathValue' | 'server' | 'securitySchemes' | 'authStore'\n > & {\n /** Operation object with path params */\n operation: OperationObject\n /** The selected server for the operation */\n selectedServer: ServerObject | null\n /** The selected security schemes for the operation */\n selectedSecuritySchemes: SecuritySchemeObjectSecret[]\n }\n>()\n\nconst operationTitle = computed(() => operation.summary || path || '')\nconst operationExtensions = computed(() => getXKeysFromObject(operation))\n\n/** Track the currently selected example for passing to the modal */\nconst selectedExampleKey = ref<string>('')\n\nconst { copyToClipboard } = useClipboard()\n</script>\n<template>\n <SectionAccordion\n :id=\"id\"\n :aria-label=\"operationTitle\"\n class=\"reference-endpoint\"\n :modelValue=\"!isCollapsed\"\n transparent\n @update:modelValue=\"\n (value) => eventBus?.emit('toggle:nav-item', { id, open: value })\n \">\n <template #title>\n <div class=\"operation-title\">\n <div class=\"operation-details\">\n <HttpMethod\n class=\"endpoint-type\"\n :method=\"method\"\n short />\n <Anchor\n class=\"endpoint-anchor\"\n @copyAnchorUrl=\"() => eventBus?.emit('copy-url:nav-item', { id })\">\n <h3 class=\"endpoint-label\">\n <div class=\"endpoint-label-path\">\n <OperationPath\n :deprecated=\"isOperationDeprecated(operation)\"\n :path=\"path\" />\n </div>\n <div class=\"endpoint-label-name\">\n {{ operationTitle }}\n </div>\n <!-- Stability badge -->\n <Badge\n v-if=\"getOperationStability(operation)\"\n class=\"capitalize\"\n :class=\"getOperationStabilityColor(operation)\">\n {{ getOperationStability(operation) }}\n </Badge>\n\n <!-- Webhook badge -->\n <Badge\n v-if=\"isWebhook\"\n class=\"font-code text-green flex w-fit items-center justify-center gap-1\">\n <ScalarIconWebhooksLogo weight=\"bold\" />Webhook\n </Badge>\n\n <!-- x-badges before -->\n <XBadges\n :badges=\"operation['x-badges']\"\n position=\"before\" />\n </h3>\n </Anchor>\n </div>\n </div>\n </template>\n <template #actions=\"{ active }\">\n <!-- x-badges after -->\n <XBadges\n :badges=\"operation['x-badges']\"\n position=\"after\" />\n <template v-if=\"!options.hideTestRequestButton\">\n <TestRequestButton\n v-if=\"active && !isWebhook\"\n :id\n :eventBus\n :exampleName=\"selectedExampleKey\"\n :method\n :path />\n <ScalarIconPlay\n v-else\n class=\"endpoint-try-hint size-4.5\" />\n </template>\n <span\n v-if=\"options.showOperationId && operation.operationId\"\n class=\"font-code text-sm\">\n {{ operation.operationId }}\n </span>\n <ScalarIconButton\n class=\"endpoint-copy p-0.5\"\n :icon=\"ScalarIconCopy\"\n label=\"Copy endpoint URL\"\n size=\"xs\"\n variant=\"ghost\"\n @click.stop=\"copyToClipboard(path)\" />\n </template>\n <template\n v-if=\"operation.description\"\n #description>\n <ScalarMarkdown\n :anchorPrefix=\"id\"\n aria-label=\"Operation Description\"\n role=\"group\"\n transformType=\"heading\"\n :value=\"operation.description\"\n withAnchors\n withImages />\n </template>\n <div class=\"endpoint-content\">\n <div class=\"operation-details-card\">\n <div\n v-if=\"Object.keys(operationExtensions).length > 0\"\n class=\"operation-details-card-item\">\n <SpecificationExtension :value=\"operationExtensions\" />\n </div>\n <div class=\"operation-details-card-item\">\n <OperationParameters\n :eventBus\n :options\n :parameters=\"operation.parameters\"\n :requestBody=\"getResolvedRef(operation.requestBody)\" />\n </div>\n <div class=\"operation-details-card-item\">\n <OperationResponses\n :eventBus\n :options\n :responses=\"operation.responses\" />\n </div>\n\n <!-- Callbacks -->\n <div\n v-if=\"operation?.callbacks\"\n class=\"operation-details-card-item\">\n <Callbacks\n :callbacks=\"operation.callbacks\"\n :eventBus\n :options\n :path />\n </div>\n </div>\n\n <ExampleResponses\n v-if=\"operation.responses\"\n class=\"operation-example-card\"\n :responses=\"operation.responses\" />\n\n <!-- New Example Request -->\n <div>\n <!-- External Docs -->\n <LinkList v-if=\"operation.externalDocs\">\n <ExternalDocs :value=\"operation.externalDocs\" />\n </LinkList>\n <!-- Request Example -->\n <ScalarErrorBoundary>\n <OperationCodeSample\n v-model:selectedExample=\"selectedExampleKey\"\n class=\"operation-example-card\"\n :clientOptions\n :eventBus\n fallback\n :isWebhook\n :method\n :operation\n :path\n :securitySchemes=\"selectedSecuritySchemes\"\n :selectedClient\n :selectedServer />\n </ScalarErrorBoundary>\n </div>\n </div>\n </SectionAccordion>\n</template>\n\n<style scoped>\n@reference \"@/style.css\";\n\n.operation-title {\n display: flex;\n justify-content: space-between;\n}\n.operation-details {\n display: flex;\n align-items: center;\n margin-top: 0;\n gap: 9px;\n\n min-width: 0;\n flex-shrink: 1;\n}\n.operation-details :deep(.endpoint-anchor .scalar-button svg) {\n width: 16px;\n height: 16px;\n}\n.endpoint-type {\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n\n position: relative;\n z-index: 0;\n\n width: 60px;\n padding: 6px;\n flex-shrink: 0;\n\n font-size: var(--scalar-small);\n\n text-transform: uppercase;\n font-weight: var(--scalar-bold);\n font-family: var(--scalar-font);\n}\n.endpoint-type::after {\n content: '';\n position: absolute;\n inset: 0;\n z-index: -1;\n\n background: currentColor;\n opacity: 0.15;\n\n border-radius: var(--scalar-radius);\n}\n\n.endpoint-anchor {\n display: flex;\n align-items: center;\n min-width: 0;\n flex-shrink: 1;\n}\n.endpoint-anchor.label {\n display: flex;\n}\n.endpoint-label {\n display: flex;\n align-items: baseline;\n gap: 9px;\n\n min-width: 0;\n flex-shrink: 1;\n\n color: var(--scalar-color-1);\n}\n\n.endpoint-label-path {\n font-family: var(--scalar-font-code);\n font-size: var(--scalar-mini);\n\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n.endpoint-label-path :deep(em) {\n color: var(--scalar-color-2);\n}\n.endpoint-label-name {\n color: var(--scalar-color-2);\n font-size: var(--scalar-small);\n\n /* Concatenate the name before we shrink the path */\n flex-shrink: 1000000000;\n\n text-overflow: ellipsis;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.endpoint-try-hint {\n padding: 2px;\n flex-shrink: 0;\n}\n.endpoint-copy {\n color: currentColor;\n}\n.endpoint-copy :deep(svg) {\n stroke-width: 2px;\n}\n\n.endpoint-content {\n display: grid;\n grid-auto-columns: 1fr;\n grid-auto-flow: row;\n gap: 9px;\n padding: 9px;\n}\n\n@variant lg {\n .endpoint-content {\n grid-auto-flow: column;\n }\n}\n\n@container (max-width: 900px) {\n .endpoint-content {\n grid-template-columns: 1fr;\n }\n}\n\n.endpoint-content > * {\n min-width: 0;\n}\n\n.operation-details-card {\n display: flex;\n flex-direction: column;\n gap: 12px;\n min-width: 0;\n}\n.operation-details-card-item :deep(.parameter-list),\n.operation-details-card-item :deep(.callbacks-list) {\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n border-radius: var(--scalar-radius-lg);\n margin-top: 0;\n}\n\n.operation-details-card-item {\n display: flex;\n flex-direction: column;\n gap: 12px;\n}\n\n.operation-details-card-item :deep(.parameter-list-items) {\n margin-bottom: 0;\n}\n.operation-details-card :deep(.parameter-item:last-of-type .parameter-schema) {\n padding-bottom: 12px;\n}\n.operation-details-card :deep(.parameter-list .parameter-list) {\n margin-bottom: 12px;\n}\n.operation-details-card :deep(.parameter-item) {\n margin: 0;\n padding: 0;\n}\n.operation-details-card :deep(.property) {\n padding: 9px;\n margin: 0;\n}\n.operation-details-card :deep(.parameter-list-title),\n.operation-details-card :deep(.request-body-title),\n.operation-details-card :deep(.callbacks-title) {\n text-transform: uppercase;\n font-weight: var(--scalar-bold);\n font-size: var(--scalar-mini);\n color: var(--scalar-color-2);\n line-height: 1.33;\n padding: 9px;\n margin: 0;\n}\n\n.operation-details-card :deep(.callback-list-item-title) {\n padding-left: 28px;\n padding-right: 12px;\n}\n\n.operation-details-card :deep(.callback-list-item-icon) {\n left: 6px;\n}\n\n.operation-details-card :deep(.callback-operation-container) {\n padding-inline: 9px;\n padding-bottom: 9px;\n}\n\n.operation-details-card :deep(.callback-operation-container > .request-body),\n.operation-details-card :deep(.callback-operation-container > .parameter-list) {\n border: none;\n}\n\n.operation-details-card\n :deep(.callback-operation-container > .request-body > .request-body-header) {\n padding: 0;\n padding-bottom: 9px;\n border-bottom: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.operation-details-card :deep(.request-body-description) {\n margin-top: 0;\n padding: 9px 9px 0 9px;\n border-top: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n\n.operation-details-card :deep(.request-body) {\n margin-top: 0;\n border-radius: var(--scalar-radius-lg);\n border: var(--scalar-border-width) solid var(--scalar-border-color);\n}\n.operation-details-card\n :deep(.request-body .schema-card--level-0 > .schema-card-description) {\n padding-inline: 9px;\n}\n\n.operation-details-card :deep(.request-body-header) {\n padding-bottom: 0;\n border-bottom: 0;\n}\n\n.operation-details-card :deep(.contents button) {\n margin-right: 9px;\n}\n\n.operation-details-card\n :deep(.schema-card--open + .schema-card:not(.schema-card--open)) {\n margin-inline: 9px;\n margin-bottom: 9px;\n}\n.operation-details-card :deep(.request-body-schema .property--level-0) {\n padding: 0;\n}\n.operation-details-card :deep(.request-body-schema .property--level-0) {\n padding: 0;\n}\n\n.operation-details-card :deep(.selected-content-type) {\n margin-right: 9px;\n}\n\n.operation-example-card {\n position: sticky;\n top: calc(var(--refs-viewport-offset) + 24px);\n max-height: calc(var(--refs-viewport-height) - 48px);\n}\n\n@media (max-width: 600px) {\n .operation-example-card {\n max-height: unset;\n position: static;\n }\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ScalarIconArrowUp, ScalarIconSparkle } from '@scalar/icons'\nimport { ref } from 'vue'\n\nimport { useAgentContext } from '@/hooks/use-agent'\n\nconst agentContext = useAgentContext()\n\nconst message = ref('')\nconst inputRef = ref<HTMLInputElement>()\n\nfunction handleSubmit() {\n agentContext.value?.openAgent(message.value)\n message.value = ''\n}\n</script>\n<template>\n <form\n v-if=\"agentContext?.agentEnabled.value\"\n class=\"agent-button-container\"\n @click=\"inputRef?.focus()\"\n @submit.prevent=\"handleSubmit()\">\n <ScalarIconSparkle\n class=\"size-3 shrink-0\"\n weight=\"fill\" />\n <div class=\"ask-agent-scalar-input-label\">Ask AI Agent</div>\n <input\n ref=\"inputRef\"\n v-model=\"message\"\n class=\"ask-agent-scalar-input\"\n :class=\"{ 'ask-agent-scalar-input-not-empty': message.length > 0 }\"\n placeholder=\"Ask AI Agent\" />\n <button\n class=\"ask-agent-scalar-send\"\n type=\"submit\">\n <ScalarIconArrowUp\n class=\"size-3\"\n weight=\"bold\" />\n </button>\n </form>\n</template>\n<style scoped>\n/** Container */\n.agent-button-container {\n position: relative;\n color: var(--scalar-color-1);\n background: color-mix(in srgb, var(--scalar-background-3), white 15%);\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: 1px 6px;\n margin-right: 4px;\n border-radius: var(--scalar-radius);\n z-index: 2;\n height: 100%;\n}\n.agent-button-container:hover:not(:focus-within) {\n background: color-mix(in srgb, var(--scalar-background-3), white 20%);\n}\n.agent-button-container:has(.ask-agent-scalar-input-not-empty),\n.agent-button-container:focus-within {\n position: absolute;\n inset: 2px;\n border-radius: var(--scalar-radius-lg);\n margin-right: 0;\n height: auto;\n}\n.agent-button-container:has(.ask-agent-scalar-input:focus-visible) {\n outline-style: solid;\n}\n/** Input */\n.ask-agent-scalar-input {\n width: 0px;\n opacity: 0;\n font-size: 0px;\n border: none;\n}\n.agent-button-container:has(.ask-agent-scalar-input-not-empty)\n .ask-agent-scalar-input,\n.agent-button-container:focus-within .ask-agent-scalar-input {\n width: 100%;\n font-size: inherit;\n opacity: 1;\n line-height: 20px;\n outline: none;\n padding-inline: 4px;\n}\n.ask-agent-scalar-input::placeholder {\n color: var(--scalar-color-2);\n font-family: inherit;\n}\n/** Input label */\n.ask-agent-scalar-input-label {\n /** Shown by default */\n color: var(--scalar-color-1);\n font-weight: var(--scalar-semibold);\n margin-left: 4px;\n}\n.agent-button-container:has(.ask-agent-scalar-input-not-empty)\n .ask-agent-scalar-input-label,\n.agent-button-container:focus-within .ask-agent-scalar-input-label {\n /** Hidden when input is focused */\n display: none;\n}\n/** Send button */\n.ask-agent-scalar-send {\n background: var(--scalar-color-blue);\n color: #fff;\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: var(--scalar-radius);\n outline-offset: 1px;\n /* Hidden by default */\n display: none;\n}\n.agent-button-container:has(.ask-agent-scalar-input-not-empty)\n .ask-agent-scalar-send {\n /** Show when input is not empty */\n display: flex;\n}\n.ask-agent-scalar-send:hover {\n background: color-mix(in srgb, var(--scalar-color-blue), transparent 10%);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { ScalarIconArrowUp, ScalarIconSparkle } from '@scalar/icons'\nimport { ref } from 'vue'\n\nimport { useAgentContext } from '@/hooks/use-agent'\n\nconst agentContext = useAgentContext()\n\nconst message = ref('')\nconst inputRef = ref<HTMLInputElement>()\n\nfunction handleSubmit() {\n agentContext.value?.openAgent(message.value)\n message.value = ''\n}\n</script>\n<template>\n <form\n v-if=\"agentContext?.agentEnabled.value\"\n class=\"agent-button-container\"\n @click=\"inputRef?.focus()\"\n @submit.prevent=\"handleSubmit()\">\n <ScalarIconSparkle\n class=\"size-3 shrink-0\"\n weight=\"fill\" />\n <div class=\"ask-agent-scalar-input-label\">Ask AI Agent</div>\n <input\n ref=\"inputRef\"\n v-model=\"message\"\n class=\"ask-agent-scalar-input\"\n :class=\"{ 'ask-agent-scalar-input-not-empty': message.length > 0 }\"\n placeholder=\"Ask AI Agent\" />\n <button\n class=\"ask-agent-scalar-send\"\n type=\"submit\">\n <ScalarIconArrowUp\n class=\"size-3\"\n weight=\"bold\" />\n </button>\n </form>\n</template>\n<style scoped>\n/** Container */\n.agent-button-container {\n position: relative;\n color: var(--scalar-color-1);\n background: color-mix(in srgb, var(--scalar-background-3), white 15%);\n display: flex;\n align-items: center;\n cursor: pointer;\n padding: 1px 6px;\n margin-right: 4px;\n border-radius: var(--scalar-radius);\n z-index: 2;\n height: 100%;\n}\n.agent-button-container:hover:not(:focus-within) {\n background: color-mix(in srgb, var(--scalar-background-3), white 20%);\n}\n.agent-button-container:has(.ask-agent-scalar-input-not-empty),\n.agent-button-container:focus-within {\n position: absolute;\n inset: 2px;\n border-radius: var(--scalar-radius-lg);\n margin-right: 0;\n height: auto;\n}\n.agent-button-container:has(.ask-agent-scalar-input:focus-visible) {\n outline-style: solid;\n}\n/** Input */\n.ask-agent-scalar-input {\n width: 0px;\n opacity: 0;\n font-size: 0px;\n border: none;\n}\n.agent-button-container:has(.ask-agent-scalar-input-not-empty)\n .ask-agent-scalar-input,\n.agent-button-container:focus-within .ask-agent-scalar-input {\n width: 100%;\n font-size: inherit;\n opacity: 1;\n line-height: 20px;\n outline: none;\n padding-inline: 4px;\n}\n.ask-agent-scalar-input::placeholder {\n color: var(--scalar-color-2);\n font-family: inherit;\n}\n/** Input label */\n.ask-agent-scalar-input-label {\n /** Shown by default */\n color: var(--scalar-color-1);\n font-weight: var(--scalar-semibold);\n margin-left: 4px;\n}\n.agent-button-container:has(.ask-agent-scalar-input-not-empty)\n .ask-agent-scalar-input-label,\n.agent-button-container:focus-within .ask-agent-scalar-input-label {\n /** Hidden when input is focused */\n display: none;\n}\n/** Send button */\n.ask-agent-scalar-send {\n background: var(--scalar-color-blue);\n color: #fff;\n width: 24px;\n height: 24px;\n flex-shrink: 0;\n display: flex;\n justify-content: center;\n align-items: center;\n border-radius: var(--scalar-radius);\n outline-offset: 1px;\n /* Hidden by default */\n display: none;\n}\n.agent-button-container:has(.ask-agent-scalar-input-not-empty)\n .ask-agent-scalar-send {\n /** Show when input is not empty */\n display: flex;\n}\n.ask-agent-scalar-send:hover {\n background: color-mix(in srgb, var(--scalar-color-blue), transparent 10%);\n}\n</style>\n","<script setup lang=\"ts\">\nimport { OperationCodeSample } from '@scalar/api-client/v2/blocks/operation-code-sample'\nimport type { SecuritySchemeObjectSecret } from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport { ScalarErrorBoundary, ScalarMarkdown } from '@scalar/components'\nimport { ScalarIconWebhooksLogo } from '@scalar/icons'\nimport {\n getOperationStability,\n getOperationStabilityColor,\n isOperationDeprecated,\n} from '@scalar/oas-utils/helpers'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n OperationObject,\n ServerObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, useId } from 'vue'\n\nimport { Anchor } from '@/components/Anchor'\nimport { Badge } from '@/components/Badge'\nimport { LinkList } from '@/components/LinkList'\nimport OperationPath from '@/components/OperationPath.vue'\nimport {\n Section,\n SectionColumn,\n SectionColumns,\n SectionContent,\n SectionHeader,\n SectionHeaderTag,\n} from '@/components/Section'\nimport AskAgentButton from '@/features/ask-agent-button/AskAgentButton.vue'\nimport { ExampleResponses } from '@/features/example-responses'\nimport { ExternalDocs } from '@/features/external-docs'\nimport Callbacks from '@/features/Operation/components/callbacks/Callbacks.vue'\nimport OperationParameters from '@/features/Operation/components/OperationParameters.vue'\nimport OperationResponses from '@/features/Operation/components/OperationResponses.vue'\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\nimport { getXKeysFromObject } from '@/features/specification-extension'\nimport SpecificationExtension from '@/features/specification-extension/SpecificationExtension.vue'\nimport { TestRequestButton } from '@/features/test-request-button'\nimport { XBadges } from '@/features/x-badges'\n\nconst {\n clientOptions,\n eventBus,\n isWebhook,\n method,\n operation,\n options,\n path,\n selectedServer,\n selectedSecuritySchemes,\n selectedClient,\n} = defineProps<\n Omit<\n OperationProps,\n | 'document'\n | 'pathValue'\n | 'server'\n | 'isCollapsed'\n | 'securitySchemes'\n | 'authStore'\n > & {\n /** Operation object with path params */\n operation: OperationObject\n /** The selected server for the operation */\n selectedServer: ServerObject | null\n /** The selected security schemes for the operation */\n selectedSecuritySchemes: SecuritySchemeObjectSecret[]\n }\n>()\n\nconst operationTitle = computed(() => operation.summary || path || '')\n\nconst labelId = useId()\n\nconst operationExtensions = computed(() => getXKeysFromObject(operation))\n</script>\n\n<template>\n <Section\n :id=\"id\"\n :aria-labelledby=\"labelId\"\n :label=\"operationTitle\"\n tabindex=\"-1\"\n @intersecting=\"() => eventBus?.emit('intersecting:nav-item', { id })\">\n <SectionContent>\n <div class=\"flex flex-row justify-between gap-1\">\n <!-- Left -->\n <div class=\"flex gap-1\">\n <!-- Operation ID -->\n <Badge v-if=\"options?.showOperationId && operation.operationId\">\n {{ operation.operationId }}\n </Badge>\n <!-- Stability badge -->\n <Badge\n v-if=\"getOperationStability(operation)\"\n class=\"capitalize\"\n :class=\"getOperationStabilityColor(operation)\">\n {{ getOperationStability(operation) }}\n </Badge>\n <!-- Webhook badge -->\n <Badge\n v-if=\"isWebhook\"\n class=\"font-code text-green flex w-fit items-center justify-center gap-1\">\n <ScalarIconWebhooksLogo weight=\"bold\" />Webhook\n </Badge>\n <!-- x-badges before -->\n <XBadges\n :badges=\"operation['x-badges']\"\n position=\"before\" />\n </div>\n <!-- Right -->\n <div class=\"flex gap-1\">\n <!-- x-badges after -->\n <XBadges\n :badges=\"operation['x-badges']\"\n position=\"after\" />\n </div>\n </div>\n <div :class=\"isOperationDeprecated(operation) ? 'deprecated' : ''\">\n <SectionHeader>\n <Anchor\n @copyAnchorUrl=\"() => eventBus?.emit('copy-url:nav-item', { id })\">\n <SectionHeaderTag\n :id=\"labelId\"\n :level=\"3\">\n {{ operationTitle }}\n </SectionHeaderTag>\n </Anchor>\n </SectionHeader>\n </div>\n <SectionColumns>\n <SectionColumn>\n <div class=\"operation-details\">\n <SpecificationExtension :value=\"operationExtensions\" />\n <ScalarMarkdown\n :anchorPrefix=\"id\"\n aria-label=\"Operation Description\"\n role=\"group\"\n transformType=\"heading\"\n :value=\"operation.description\"\n withAnchors\n withImages />\n <OperationParameters\n :breadcrumb=\"[id]\"\n :eventBus\n :options\n :parameters=\"operation.parameters\"\n :requestBody=\"getResolvedRef(operation.requestBody)\" />\n <OperationResponses\n :breadcrumb=\"[id]\"\n :collapsableItems=\"!options.expandAllResponses\"\n :eventBus\n :options\n :responses=\"operation.responses\" />\n\n <!-- Callbacks -->\n <ScalarErrorBoundary>\n <Callbacks\n v-if=\"operation.callbacks\"\n :callbacks=\"operation.callbacks\"\n class=\"mt-6\"\n :eventBus\n :options\n :path />\n </ScalarErrorBoundary>\n </div>\n </SectionColumn>\n <SectionColumn>\n <div class=\"examples\">\n <!-- External Docs -->\n <LinkList v-if=\"operation.externalDocs\">\n <ExternalDocs :value=\"operation.externalDocs\" />\n </LinkList>\n\n <!-- New Example Request -->\n <ScalarErrorBoundary>\n <OperationCodeSample\n :clientOptions\n :eventBus\n fallback\n :isWebhook\n :method\n :operation\n :path\n :securitySchemes=\"selectedSecuritySchemes\"\n :selectedClient\n :selectedServer>\n <template #header>\n <OperationPath\n class=\"font-code text-c-2 [&_em]:text-c-1 [&_em]:not-italic\"\n :deprecated=\"operation?.deprecated\"\n :path=\"path\" />\n </template>\n <template\n v-if=\"!isWebhook\"\n #footer=\"{ exampleName }\">\n <div class=\"flex\">\n <AskAgentButton />\n <TestRequestButton\n v-if=\"!options.hideTestRequestButton\"\n :id\n :eventBus\n :exampleName\n :method\n :path />\n </div>\n </template>\n </OperationCodeSample>\n </ScalarErrorBoundary>\n\n <ScalarErrorBoundary>\n <ExampleResponses\n v-if=\"operation.responses\"\n :responses=\"operation.responses\"\n style=\"margin-top: 12px\" />\n </ScalarErrorBoundary>\n </div>\n </SectionColumn>\n </SectionColumns>\n </SectionContent>\n </Section>\n</template>\n\n<style scoped>\n.examples {\n position: sticky;\n top: calc(var(--refs-viewport-offset) + 24px);\n}\n\n.examples > * {\n max-height: calc((var(--refs-viewport-height) - 60px) / 2);\n position: relative;\n}\n\n.examples > *:first-of-type:last-of-type {\n max-height: calc((var(--refs-viewport-height) - 60px));\n}\n\n/*\n * Don't constrain card height on mobile\n * (or zoomed in screens)\n */\n@media (max-width: 600px) {\n .examples > * {\n max-height: unset;\n }\n}\n.deprecated * {\n text-decoration: line-through;\n}\n</style>\n","<script setup lang=\"ts\">\nimport { OperationCodeSample } from '@scalar/api-client/v2/blocks/operation-code-sample'\nimport type { SecuritySchemeObjectSecret } from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport { ScalarErrorBoundary, ScalarMarkdown } from '@scalar/components'\nimport { ScalarIconWebhooksLogo } from '@scalar/icons'\nimport {\n getOperationStability,\n getOperationStabilityColor,\n isOperationDeprecated,\n} from '@scalar/oas-utils/helpers'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n OperationObject,\n ServerObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed, useId } from 'vue'\n\nimport { Anchor } from '@/components/Anchor'\nimport { Badge } from '@/components/Badge'\nimport { LinkList } from '@/components/LinkList'\nimport OperationPath from '@/components/OperationPath.vue'\nimport {\n Section,\n SectionColumn,\n SectionColumns,\n SectionContent,\n SectionHeader,\n SectionHeaderTag,\n} from '@/components/Section'\nimport AskAgentButton from '@/features/ask-agent-button/AskAgentButton.vue'\nimport { ExampleResponses } from '@/features/example-responses'\nimport { ExternalDocs } from '@/features/external-docs'\nimport Callbacks from '@/features/Operation/components/callbacks/Callbacks.vue'\nimport OperationParameters from '@/features/Operation/components/OperationParameters.vue'\nimport OperationResponses from '@/features/Operation/components/OperationResponses.vue'\nimport type { OperationProps } from '@/features/Operation/Operation.vue'\nimport { getXKeysFromObject } from '@/features/specification-extension'\nimport SpecificationExtension from '@/features/specification-extension/SpecificationExtension.vue'\nimport { TestRequestButton } from '@/features/test-request-button'\nimport { XBadges } from '@/features/x-badges'\n\nconst {\n clientOptions,\n eventBus,\n isWebhook,\n method,\n operation,\n options,\n path,\n selectedServer,\n selectedSecuritySchemes,\n selectedClient,\n} = defineProps<\n Omit<\n OperationProps,\n | 'document'\n | 'pathValue'\n | 'server'\n | 'isCollapsed'\n | 'securitySchemes'\n | 'authStore'\n > & {\n /** Operation object with path params */\n operation: OperationObject\n /** The selected server for the operation */\n selectedServer: ServerObject | null\n /** The selected security schemes for the operation */\n selectedSecuritySchemes: SecuritySchemeObjectSecret[]\n }\n>()\n\nconst operationTitle = computed(() => operation.summary || path || '')\n\nconst labelId = useId()\n\nconst operationExtensions = computed(() => getXKeysFromObject(operation))\n</script>\n\n<template>\n <Section\n :id=\"id\"\n :aria-labelledby=\"labelId\"\n :label=\"operationTitle\"\n tabindex=\"-1\"\n @intersecting=\"() => eventBus?.emit('intersecting:nav-item', { id })\">\n <SectionContent>\n <div class=\"flex flex-row justify-between gap-1\">\n <!-- Left -->\n <div class=\"flex gap-1\">\n <!-- Operation ID -->\n <Badge v-if=\"options?.showOperationId && operation.operationId\">\n {{ operation.operationId }}\n </Badge>\n <!-- Stability badge -->\n <Badge\n v-if=\"getOperationStability(operation)\"\n class=\"capitalize\"\n :class=\"getOperationStabilityColor(operation)\">\n {{ getOperationStability(operation) }}\n </Badge>\n <!-- Webhook badge -->\n <Badge\n v-if=\"isWebhook\"\n class=\"font-code text-green flex w-fit items-center justify-center gap-1\">\n <ScalarIconWebhooksLogo weight=\"bold\" />Webhook\n </Badge>\n <!-- x-badges before -->\n <XBadges\n :badges=\"operation['x-badges']\"\n position=\"before\" />\n </div>\n <!-- Right -->\n <div class=\"flex gap-1\">\n <!-- x-badges after -->\n <XBadges\n :badges=\"operation['x-badges']\"\n position=\"after\" />\n </div>\n </div>\n <div :class=\"isOperationDeprecated(operation) ? 'deprecated' : ''\">\n <SectionHeader>\n <Anchor\n @copyAnchorUrl=\"() => eventBus?.emit('copy-url:nav-item', { id })\">\n <SectionHeaderTag\n :id=\"labelId\"\n :level=\"3\">\n {{ operationTitle }}\n </SectionHeaderTag>\n </Anchor>\n </SectionHeader>\n </div>\n <SectionColumns>\n <SectionColumn>\n <div class=\"operation-details\">\n <SpecificationExtension :value=\"operationExtensions\" />\n <ScalarMarkdown\n :anchorPrefix=\"id\"\n aria-label=\"Operation Description\"\n role=\"group\"\n transformType=\"heading\"\n :value=\"operation.description\"\n withAnchors\n withImages />\n <OperationParameters\n :breadcrumb=\"[id]\"\n :eventBus\n :options\n :parameters=\"operation.parameters\"\n :requestBody=\"getResolvedRef(operation.requestBody)\" />\n <OperationResponses\n :breadcrumb=\"[id]\"\n :collapsableItems=\"!options.expandAllResponses\"\n :eventBus\n :options\n :responses=\"operation.responses\" />\n\n <!-- Callbacks -->\n <ScalarErrorBoundary>\n <Callbacks\n v-if=\"operation.callbacks\"\n :callbacks=\"operation.callbacks\"\n class=\"mt-6\"\n :eventBus\n :options\n :path />\n </ScalarErrorBoundary>\n </div>\n </SectionColumn>\n <SectionColumn>\n <div class=\"examples\">\n <!-- External Docs -->\n <LinkList v-if=\"operation.externalDocs\">\n <ExternalDocs :value=\"operation.externalDocs\" />\n </LinkList>\n\n <!-- New Example Request -->\n <ScalarErrorBoundary>\n <OperationCodeSample\n :clientOptions\n :eventBus\n fallback\n :isWebhook\n :method\n :operation\n :path\n :securitySchemes=\"selectedSecuritySchemes\"\n :selectedClient\n :selectedServer>\n <template #header>\n <OperationPath\n class=\"font-code text-c-2 [&_em]:text-c-1 [&_em]:not-italic\"\n :deprecated=\"operation?.deprecated\"\n :path=\"path\" />\n </template>\n <template\n v-if=\"!isWebhook\"\n #footer=\"{ exampleName }\">\n <div class=\"flex\">\n <AskAgentButton />\n <TestRequestButton\n v-if=\"!options.hideTestRequestButton\"\n :id\n :eventBus\n :exampleName\n :method\n :path />\n </div>\n </template>\n </OperationCodeSample>\n </ScalarErrorBoundary>\n\n <ScalarErrorBoundary>\n <ExampleResponses\n v-if=\"operation.responses\"\n :responses=\"operation.responses\"\n style=\"margin-top: 12px\" />\n </ScalarErrorBoundary>\n </div>\n </SectionColumn>\n </SectionColumns>\n </SectionContent>\n </Section>\n</template>\n\n<style scoped>\n.examples {\n position: sticky;\n top: calc(var(--refs-viewport-offset) + 24px);\n}\n\n.examples > * {\n max-height: calc((var(--refs-viewport-height) - 60px) / 2);\n position: relative;\n}\n\n.examples > *:first-of-type:last-of-type {\n max-height: calc((var(--refs-viewport-height) - 60px));\n}\n\n/*\n * Don't constrain card height on mobile\n * (or zoomed in screens)\n */\n@media (max-width: 600px) {\n .examples > * {\n max-height: unset;\n }\n}\n.deprecated * {\n text-decoration: line-through;\n}\n</style>\n","<script lang=\"ts\">\n/**\n * References Operation \"block\"\n */\nexport default {}\n\nexport type OperationProps = {\n id: string\n method: HttpMethod\n /** The subset of the configuration object required for the operation component */\n options: Pick<\n ApiReferenceConfigurationRaw,\n | 'expandAllResponses'\n | 'hideTestRequestButton'\n | 'layout'\n | 'orderRequiredPropertiesFirst'\n | 'orderSchemaPropertiesBy'\n | 'showOperationId'\n >\n /** Document object */\n document: OpenApiDocument\n /** Key of the operations path in the document.paths object */\n path: string\n /** OpenAPI path object that will include the operation */\n pathValue: PathItemObject | undefined\n /** Currently selected server for the document */\n server: ServerObject | null\n /** The merged security schemes for the document and the authentication configuration */\n securitySchemes: MergedSecuritySchemes\n /** The http client options for the dropdown */\n clientOptions: ClientOptionGroup[]\n /** Whether the Classic layout operation is collapsed */\n isCollapsed: boolean\n /** Whether the operation is a webhook */\n isWebhook: boolean\n /** The currently selected client for the document */\n selectedClient: WorkspaceStore['workspace']['x-scalar-default-client']\n /** The event bus */\n eventBus: WorkspaceEventBus\n /** The auth store */\n authStore: AuthStore\n}\n</script>\n\n<script lang=\"ts\" setup>\nimport type { ClientOptionGroup } from '@scalar/api-client/v2/blocks/operation-code-sample'\nimport type { MergedSecuritySchemes } from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport { combineParams } from '@scalar/api-client/v2/features/operation'\nimport type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport type { ApiReferenceConfigurationRaw } from '@scalar/types/api-reference'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { AuthStore } from '@scalar/workspace-store/entities/auth'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n OpenApiDocument,\n PathItemObject,\n ServerObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport { filterSelectedSecurity } from '@/features/Operation/helpers/filter-selected-security'\n\nimport { getFirstServer } from './helpers/get-first-server'\nimport ClassicLayout from './layouts/ClassicLayout.vue'\nimport ModernLayout from './layouts/ModernLayout.vue'\n\nconst {\n authStore,\n clientOptions,\n document,\n eventBus,\n isCollapsed,\n isWebhook,\n method,\n options,\n path,\n pathValue,\n securitySchemes,\n server,\n} = defineProps<OperationProps>()\n\n/**\n * Operation from the new workspace store, ensure we are de-reference\n *\n * Also adds in params from the pathItemObject\n */\nconst operation = computed(() => {\n const entity = getResolvedRef(pathValue?.[method])\n\n if (!entity) {\n return null\n }\n\n // Combine params from the pathItem and the operation\n const parameters = combineParams(pathValue?.parameters, entity.parameters)\n return { ...entity, parameters }\n})\n\n/**\n * Determine the effective server for the code examples.\n */\nconst selectedServer = computed<ServerObject | null>(() =>\n getFirstServer(\n // 1) Operation\n operation.value?.servers ?? null,\n // 2) Path Item\n pathValue?.servers ?? null,\n // 3) Document\n server,\n ),\n)\n\n/** We must ensure the selected security schemes are required on this operation */\nconst selectedSecuritySchemes = computed(() =>\n filterSelectedSecurity(\n document,\n operation.value,\n authStore.getAuthSelectedSchemas({\n type: 'document',\n documentName: document?.['x-scalar-navigation']?.name ?? '',\n }),\n authStore.getAuthSelectedSchemas({\n type: 'operation',\n documentName: document?.['x-scalar-navigation']?.name ?? '',\n path,\n method,\n }),\n securitySchemes,\n ),\n)\n</script>\n\n<template>\n <template v-if=\"operation\">\n <ClassicLayout\n v-if=\"options.layout === 'classic'\"\n :id\n :clientOptions\n :eventBus\n :isCollapsed\n :isWebhook\n :method\n :operation\n :options\n :path\n :selectedClient\n :selectedSecuritySchemes\n :selectedServer />\n <ModernLayout\n v-else\n :id\n :clientOptions\n :eventBus\n :isWebhook\n :method\n :operation\n :options\n :path\n :selectedClient\n :selectedSecuritySchemes\n :selectedServer />\n </template>\n</template>\n","<script lang=\"ts\">\n/**\n * References Operation \"block\"\n */\nexport default {}\n\nexport type OperationProps = {\n id: string\n method: HttpMethod\n /** The subset of the configuration object required for the operation component */\n options: Pick<\n ApiReferenceConfigurationRaw,\n | 'expandAllResponses'\n | 'hideTestRequestButton'\n | 'layout'\n | 'orderRequiredPropertiesFirst'\n | 'orderSchemaPropertiesBy'\n | 'showOperationId'\n >\n /** Document object */\n document: OpenApiDocument\n /** Key of the operations path in the document.paths object */\n path: string\n /** OpenAPI path object that will include the operation */\n pathValue: PathItemObject | undefined\n /** Currently selected server for the document */\n server: ServerObject | null\n /** The merged security schemes for the document and the authentication configuration */\n securitySchemes: MergedSecuritySchemes\n /** The http client options for the dropdown */\n clientOptions: ClientOptionGroup[]\n /** Whether the Classic layout operation is collapsed */\n isCollapsed: boolean\n /** Whether the operation is a webhook */\n isWebhook: boolean\n /** The currently selected client for the document */\n selectedClient: WorkspaceStore['workspace']['x-scalar-default-client']\n /** The event bus */\n eventBus: WorkspaceEventBus\n /** The auth store */\n authStore: AuthStore\n}\n</script>\n\n<script lang=\"ts\" setup>\nimport type { ClientOptionGroup } from '@scalar/api-client/v2/blocks/operation-code-sample'\nimport type { MergedSecuritySchemes } from '@scalar/api-client/v2/blocks/scalar-auth-selector-block'\nimport { combineParams } from '@scalar/api-client/v2/features/operation'\nimport type { HttpMethod } from '@scalar/helpers/http/http-methods'\nimport type { ApiReferenceConfigurationRaw } from '@scalar/types/api-reference'\nimport type { WorkspaceStore } from '@scalar/workspace-store/client'\nimport type { AuthStore } from '@scalar/workspace-store/entities/auth'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport { getResolvedRef } from '@scalar/workspace-store/helpers/get-resolved-ref'\nimport type {\n OpenApiDocument,\n PathItemObject,\n ServerObject,\n} from '@scalar/workspace-store/schemas/v3.1/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport { filterSelectedSecurity } from '@/features/Operation/helpers/filter-selected-security'\n\nimport { getFirstServer } from './helpers/get-first-server'\nimport ClassicLayout from './layouts/ClassicLayout.vue'\nimport ModernLayout from './layouts/ModernLayout.vue'\n\nconst {\n authStore,\n clientOptions,\n document,\n eventBus,\n isCollapsed,\n isWebhook,\n method,\n options,\n path,\n pathValue,\n securitySchemes,\n server,\n} = defineProps<OperationProps>()\n\n/**\n * Operation from the new workspace store, ensure we are de-reference\n *\n * Also adds in params from the pathItemObject\n */\nconst operation = computed(() => {\n const entity = getResolvedRef(pathValue?.[method])\n\n if (!entity) {\n return null\n }\n\n // Combine params from the pathItem and the operation\n const parameters = combineParams(pathValue?.parameters, entity.parameters)\n return { ...entity, parameters }\n})\n\n/**\n * Determine the effective server for the code examples.\n */\nconst selectedServer = computed<ServerObject | null>(() =>\n getFirstServer(\n // 1) Operation\n operation.value?.servers ?? null,\n // 2) Path Item\n pathValue?.servers ?? null,\n // 3) Document\n server,\n ),\n)\n\n/** We must ensure the selected security schemes are required on this operation */\nconst selectedSecuritySchemes = computed(() =>\n filterSelectedSecurity(\n document,\n operation.value,\n authStore.getAuthSelectedSchemas({\n type: 'document',\n documentName: document?.['x-scalar-navigation']?.name ?? '',\n }),\n authStore.getAuthSelectedSchemas({\n type: 'operation',\n documentName: document?.['x-scalar-navigation']?.name ?? '',\n path,\n method,\n }),\n securitySchemes,\n ),\n)\n</script>\n\n<template>\n <template v-if=\"operation\">\n <ClassicLayout\n v-if=\"options.layout === 'classic'\"\n :id\n :clientOptions\n :eventBus\n :isCollapsed\n :isWebhook\n :method\n :operation\n :options\n :path\n :selectedClient\n :selectedSecuritySchemes\n :selectedServer />\n <ModernLayout\n v-else\n :id\n :clientOptions\n :eventBus\n :isWebhook\n :method\n :operation\n :options\n :path\n :selectedClient\n :selectedSecuritySchemes\n :selectedServer />\n </template>\n</template>\n"],"mappings":"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"}
|