@scalar/api-reference 1.57.2 → 1.57.3

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.
Files changed (240) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/dist/blocks/scalar-client-selector-block/components/ClientDropdown.vue.d.ts.map +1 -1
  3. package/dist/blocks/scalar-client-selector-block/components/ClientDropdown.vue.js +1 -1
  4. package/dist/blocks/scalar-client-selector-block/components/ClientDropdown.vue.js.map +1 -1
  5. package/dist/blocks/scalar-client-selector-block/components/ClientDropdown.vue.script.js +2 -1
  6. package/dist/blocks/scalar-client-selector-block/components/ClientDropdown.vue.script.js.map +1 -1
  7. package/dist/blocks/scalar-client-selector-block/components/ClientSelector.vue.d.ts.map +1 -1
  8. package/dist/blocks/scalar-client-selector-block/components/ClientSelector.vue.js +1 -1
  9. package/dist/blocks/scalar-client-selector-block/components/ClientSelector.vue.js.map +1 -1
  10. package/dist/blocks/scalar-client-selector-block/components/ClientSelector.vue.script.js +2 -1
  11. package/dist/blocks/scalar-client-selector-block/components/ClientSelector.vue.script.js.map +1 -1
  12. package/dist/blocks/scalar-info-block/components/InfoBlock.vue.d.ts +2 -1
  13. package/dist/blocks/scalar-info-block/components/InfoBlock.vue.d.ts.map +1 -1
  14. package/dist/blocks/scalar-info-block/components/InfoBlock.vue.js.map +1 -1
  15. package/dist/blocks/scalar-info-block/components/InfoBlock.vue.script.js.map +1 -1
  16. package/dist/blocks/scalar-info-block/components/InfoLinks.vue.d.ts +2 -1
  17. package/dist/blocks/scalar-info-block/components/InfoLinks.vue.d.ts.map +1 -1
  18. package/dist/blocks/scalar-info-block/components/InfoLinks.vue.js.map +1 -1
  19. package/dist/blocks/scalar-info-block/components/InfoLinks.vue.script.js +2 -1
  20. package/dist/blocks/scalar-info-block/components/InfoLinks.vue.script.js.map +1 -1
  21. package/dist/blocks/scalar-info-block/components/InfoMarkdownSection.vue.js.map +1 -1
  22. package/dist/blocks/scalar-info-block/components/InfoMarkdownSection.vue.script.js +1 -1
  23. package/dist/blocks/scalar-info-block/components/InfoMarkdownSection.vue.script.js.map +1 -1
  24. package/dist/blocks/scalar-info-block/components/IntroductionLayout.vue.d.ts +2 -1
  25. package/dist/blocks/scalar-info-block/components/IntroductionLayout.vue.d.ts.map +1 -1
  26. package/dist/blocks/scalar-info-block/components/IntroductionLayout.vue.js +1 -1
  27. package/dist/blocks/scalar-info-block/components/IntroductionLayout.vue.js.map +1 -1
  28. package/dist/blocks/scalar-info-block/components/IntroductionLayout.vue.script.js.map +1 -1
  29. package/dist/blocks/scalar-server-selector-block/components/Selector.vue.d.ts.map +1 -1
  30. package/dist/blocks/scalar-server-selector-block/components/Selector.vue.js.map +1 -1
  31. package/dist/blocks/scalar-server-selector-block/components/Selector.vue.script.js +2 -1
  32. package/dist/blocks/scalar-server-selector-block/components/Selector.vue.script.js.map +1 -1
  33. package/dist/blocks/scalar-server-selector-block/components/ServerSelector.vue.js.map +1 -1
  34. package/dist/blocks/scalar-server-selector-block/components/ServerSelector.vue.script.js +1 -1
  35. package/dist/blocks/scalar-server-selector-block/components/ServerSelector.vue.script.js.map +1 -1
  36. package/dist/browser/standalone.js +282 -268
  37. package/dist/browser/webpack-stats.json +1 -1
  38. package/dist/components/AgentScalar/AgentScalarDrawer.vue.js +1 -1
  39. package/dist/components/AgentScalar/AgentScalarDrawer.vue.js.map +1 -1
  40. package/dist/components/AgentScalar/AgentScalarDrawer.vue.script.js +1 -1
  41. package/dist/components/AgentScalar/AgentScalarDrawer.vue.script.js.map +1 -1
  42. package/dist/components/AgentScalar/OpenMCPButton.vue.js +1 -1
  43. package/dist/components/AgentScalar/OpenMCPButton.vue.js.map +1 -1
  44. package/dist/components/AgentScalar/OpenMCPButton.vue.script.js +1 -1
  45. package/dist/components/AgentScalar/OpenMCPButton.vue.script.js.map +1 -1
  46. package/dist/components/Anchor/Anchor.vue.d.ts.map +1 -1
  47. package/dist/components/Anchor/Anchor.vue.js.map +1 -1
  48. package/dist/components/Anchor/Anchor.vue.script.js +2 -1
  49. package/dist/components/Anchor/Anchor.vue.script.js.map +1 -1
  50. package/dist/components/ApiReference.vue.js +1 -1
  51. package/dist/components/ApiReference.vue.js.map +1 -1
  52. package/dist/components/ApiReference.vue.script.js +6 -4
  53. package/dist/components/ApiReference.vue.script.js.map +1 -1
  54. package/dist/components/Content/Content.vue.js.map +1 -1
  55. package/dist/components/Content/Content.vue.script.js +1 -1
  56. package/dist/components/Content/Content.vue.script.js.map +1 -1
  57. package/dist/components/Content/Models/components/ModernLayout.vue.js.map +1 -1
  58. package/dist/components/Content/Models/components/ModernLayout.vue.script.js +1 -1
  59. package/dist/components/Content/Models/components/ModernLayout.vue.script.js.map +1 -1
  60. package/dist/components/Content/Schema/Schema.vue.d.ts.map +1 -1
  61. package/dist/components/Content/Schema/Schema.vue.js +1 -1
  62. package/dist/components/Content/Schema/Schema.vue.js.map +1 -1
  63. package/dist/components/Content/Schema/Schema.vue.script.js +2 -1
  64. package/dist/components/Content/Schema/Schema.vue.script.js.map +1 -1
  65. package/dist/components/Content/Schema/SchemaComposition.vue.d.ts.map +1 -1
  66. package/dist/components/Content/Schema/SchemaComposition.vue.js.map +1 -1
  67. package/dist/components/Content/Schema/SchemaComposition.vue.script.js +1 -1
  68. package/dist/components/Content/Schema/SchemaComposition.vue.script.js.map +1 -1
  69. package/dist/components/Content/Schema/SchemaEnumPropertyItem.vue.d.ts.map +1 -1
  70. package/dist/components/Content/Schema/SchemaEnumPropertyItem.vue.js +1 -1
  71. package/dist/components/Content/Schema/SchemaEnumPropertyItem.vue.js.map +1 -1
  72. package/dist/components/Content/Schema/SchemaEnumPropertyItem.vue.script.js +2 -1
  73. package/dist/components/Content/Schema/SchemaEnumPropertyItem.vue.script.js.map +1 -1
  74. package/dist/components/Content/Schema/SchemaEnums.vue.js +1 -1
  75. package/dist/components/Content/Schema/SchemaEnums.vue.js.map +1 -1
  76. package/dist/components/Content/Schema/SchemaEnums.vue.script.js +1 -1
  77. package/dist/components/Content/Schema/SchemaEnums.vue.script.js.map +1 -1
  78. package/dist/components/Content/Schema/SchemaHeading.vue.js +1 -1
  79. package/dist/components/Content/Schema/SchemaHeading.vue.js.map +1 -1
  80. package/dist/components/Content/Schema/SchemaHeading.vue.script.js +1 -1
  81. package/dist/components/Content/Schema/SchemaHeading.vue.script.js.map +1 -1
  82. package/dist/components/Content/Schema/SchemaObjectExampleCodeBlock.vue.js.map +1 -1
  83. package/dist/components/Content/Schema/SchemaObjectExampleCodeBlock.vue.script.js +2 -1
  84. package/dist/components/Content/Schema/SchemaObjectExampleCodeBlock.vue.script.js.map +1 -1
  85. package/dist/components/Content/Schema/SchemaProperty.vue.d.ts.map +1 -1
  86. package/dist/components/Content/Schema/SchemaProperty.vue.js +1 -1
  87. package/dist/components/Content/Schema/SchemaProperty.vue.js.map +1 -1
  88. package/dist/components/Content/Schema/SchemaProperty.vue.script.js +2 -1
  89. package/dist/components/Content/Schema/SchemaProperty.vue.script.js.map +1 -1
  90. package/dist/components/Content/Schema/SchemaPropertyDefault.vue.js +1 -1
  91. package/dist/components/Content/Schema/SchemaPropertyDefault.vue.js.map +1 -1
  92. package/dist/components/Content/Schema/SchemaPropertyDefault.vue.script.js +1 -1
  93. package/dist/components/Content/Schema/SchemaPropertyDefault.vue.script.js.map +1 -1
  94. package/dist/components/Content/Schema/SchemaPropertyExamples.vue.d.ts.map +1 -1
  95. package/dist/components/Content/Schema/SchemaPropertyExamples.vue.js +1 -1
  96. package/dist/components/Content/Schema/SchemaPropertyExamples.vue.js.map +1 -1
  97. package/dist/components/Content/Schema/SchemaPropertyExamples.vue.script.js +16 -5
  98. package/dist/components/Content/Schema/SchemaPropertyExamples.vue.script.js.map +1 -1
  99. package/dist/components/Content/Schema/SchemaPropertyHeading.vue.d.ts.map +1 -1
  100. package/dist/components/Content/Schema/SchemaPropertyHeading.vue.js +1 -1
  101. package/dist/components/Content/Schema/SchemaPropertyHeading.vue.js.map +1 -1
  102. package/dist/components/Content/Schema/SchemaPropertyHeading.vue.script.js +3 -3
  103. package/dist/components/Content/Schema/SchemaPropertyHeading.vue.script.js.map +1 -1
  104. package/dist/components/Content/Schema/helpers/format-example.d.ts.map +1 -1
  105. package/dist/components/Content/Schema/helpers/format-example.js +12 -8
  106. package/dist/components/Content/Schema/helpers/format-example.js.map +1 -1
  107. package/dist/components/Content/Tags/components/ClassicLayout.vue.js +1 -1
  108. package/dist/components/Content/Tags/components/ClassicLayout.vue.js.map +1 -1
  109. package/dist/components/Content/Tags/components/ClassicLayout.vue.script.js +1 -1
  110. package/dist/components/Content/Tags/components/ClassicLayout.vue.script.js.map +1 -1
  111. package/dist/components/Content/Tags/components/TagSection.vue.js.map +1 -1
  112. package/dist/components/Content/Tags/components/TagSection.vue.script.js +1 -1
  113. package/dist/components/Content/Tags/components/TagSection.vue.script.js.map +1 -1
  114. package/dist/components/GettingStarted.vue.js +1 -1
  115. package/dist/components/GettingStarted.vue.js.map +1 -1
  116. package/dist/components/GettingStarted.vue.script.js +4 -4
  117. package/dist/components/GettingStarted.vue.script.js.map +1 -1
  118. package/dist/components/MobileHeader.vue.d.ts.map +1 -1
  119. package/dist/components/MobileHeader.vue.js.map +1 -1
  120. package/dist/components/MobileHeader.vue.script.js +2 -1
  121. package/dist/components/MobileHeader.vue.script.js.map +1 -1
  122. package/dist/components/OperationsList/OperationsList.vue.js +1 -1
  123. package/dist/components/OperationsList/OperationsList.vue.js.map +1 -1
  124. package/dist/components/OperationsList/OperationsList.vue.script.js +1 -1
  125. package/dist/components/OperationsList/OperationsList.vue.script.js.map +1 -1
  126. package/dist/components/RenderPlugins/RenderPlugins.vue.js.map +1 -1
  127. package/dist/components/RenderPlugins/RenderPlugins.vue.script.js +1 -1
  128. package/dist/components/RenderPlugins/RenderPlugins.vue.script.js.map +1 -1
  129. package/dist/features/Operation/components/ContentTypeSelect.vue.d.ts.map +1 -1
  130. package/dist/features/Operation/components/ContentTypeSelect.vue.js.map +1 -1
  131. package/dist/features/Operation/components/ContentTypeSelect.vue.script.js +3 -1
  132. package/dist/features/Operation/components/ContentTypeSelect.vue.script.js.map +1 -1
  133. package/dist/features/Operation/components/Headers.vue.js +1 -1
  134. package/dist/features/Operation/components/Headers.vue.js.map +1 -1
  135. package/dist/features/Operation/components/Headers.vue.script.js +1 -1
  136. package/dist/features/Operation/components/Headers.vue.script.js.map +1 -1
  137. package/dist/features/Operation/components/ParameterListItem.vue.js +1 -1
  138. package/dist/features/Operation/components/ParameterListItem.vue.js.map +1 -1
  139. package/dist/features/Operation/components/ParameterListItem.vue.script.js +2 -1
  140. package/dist/features/Operation/components/ParameterListItem.vue.script.js.map +1 -1
  141. package/dist/features/Operation/components/RequestBody.vue.js +1 -1
  142. package/dist/features/Operation/components/RequestBody.vue.js.map +1 -1
  143. package/dist/features/Operation/components/RequestBody.vue.script.js +1 -1
  144. package/dist/features/Operation/components/RequestBody.vue.script.js.map +1 -1
  145. package/dist/features/Operation/components/SecurityRequirementBadge.vue.js.map +1 -1
  146. package/dist/features/Operation/components/SecurityRequirementBadge.vue.script.js +1 -1
  147. package/dist/features/Operation/components/SecurityRequirementBadge.vue.script.js.map +1 -1
  148. package/dist/features/Operation/layouts/ClassicLayout.vue.d.ts.map +1 -1
  149. package/dist/features/Operation/layouts/ClassicLayout.vue.js +1 -1
  150. package/dist/features/Operation/layouts/ClassicLayout.vue.js.map +1 -1
  151. package/dist/features/Operation/layouts/ClassicLayout.vue.script.js +3 -1
  152. package/dist/features/Operation/layouts/ClassicLayout.vue.script.js.map +1 -1
  153. package/dist/features/Operation/layouts/ModernLayout.vue.d.ts.map +1 -1
  154. package/dist/features/Operation/layouts/ModernLayout.vue.js +1 -1
  155. package/dist/features/Operation/layouts/ModernLayout.vue.js.map +1 -1
  156. package/dist/features/Operation/layouts/ModernLayout.vue.script.js +2 -1
  157. package/dist/features/Operation/layouts/ModernLayout.vue.script.js.map +1 -1
  158. package/dist/features/Search/components/SearchButton.vue.d.ts.map +1 -1
  159. package/dist/features/Search/components/SearchButton.vue.js.map +1 -1
  160. package/dist/features/Search/components/SearchButton.vue.script.js +3 -1
  161. package/dist/features/Search/components/SearchButton.vue.script.js.map +1 -1
  162. package/dist/features/Search/components/SearchModal.vue.d.ts +1 -1
  163. package/dist/features/Search/components/SearchModal.vue.d.ts.map +1 -1
  164. package/dist/features/Search/components/SearchModal.vue.js +1 -1
  165. package/dist/features/Search/components/SearchModal.vue.js.map +1 -1
  166. package/dist/features/Search/components/SearchModal.vue.script.js +3 -1
  167. package/dist/features/Search/components/SearchModal.vue.script.js.map +1 -1
  168. package/dist/features/Search/components/SearchResult.vue.js.map +1 -1
  169. package/dist/features/Search/components/SearchResult.vue.script.js +1 -1
  170. package/dist/features/Search/components/SearchResult.vue.script.js.map +1 -1
  171. package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayout.vue.js.map +1 -1
  172. package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayout.vue.script.js +1 -1
  173. package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayout.vue.script.js.map +1 -1
  174. package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayoutOptions.vue.d.ts.map +1 -1
  175. package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayoutOptions.vue.js.map +1 -1
  176. package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayoutOptions.vue.script.js +2 -1
  177. package/dist/features/developer-tools/components/ApiReferenceToolbarConfigLayoutOptions.vue.script.js.map +1 -1
  178. package/dist/features/developer-tools/components/ApiReferenceToolbarConfigTheme.vue.d.ts.map +1 -1
  179. package/dist/features/developer-tools/components/ApiReferenceToolbarConfigTheme.vue.js.map +1 -1
  180. package/dist/features/developer-tools/components/ApiReferenceToolbarConfigTheme.vue.script.js +4 -1
  181. package/dist/features/developer-tools/components/ApiReferenceToolbarConfigTheme.vue.script.js.map +1 -1
  182. package/dist/features/developer-tools/components/ApiReferenceToolbarPopover.vue.d.ts.map +1 -1
  183. package/dist/features/developer-tools/components/ApiReferenceToolbarPopover.vue.js.map +1 -1
  184. package/dist/features/developer-tools/components/ApiReferenceToolbarPopover.vue.script.js +2 -1
  185. package/dist/features/developer-tools/components/ApiReferenceToolbarPopover.vue.script.js.map +1 -1
  186. package/dist/features/developer-tools/components/ApiReferenceToolbarRegisterButton.vue.d.ts.map +1 -1
  187. package/dist/features/developer-tools/components/ApiReferenceToolbarRegisterButton.vue.js.map +1 -1
  188. package/dist/features/developer-tools/components/ApiReferenceToolbarRegisterButton.vue.script.js +2 -1
  189. package/dist/features/developer-tools/components/ApiReferenceToolbarRegisterButton.vue.script.js.map +1 -1
  190. package/dist/features/developer-tools/components/ApiReferenceToolbarShareTemporary.vue.d.ts.map +1 -1
  191. package/dist/features/developer-tools/components/ApiReferenceToolbarShareTemporary.vue.js.map +1 -1
  192. package/dist/features/developer-tools/components/ApiReferenceToolbarShareTemporary.vue.script.js +3 -1
  193. package/dist/features/developer-tools/components/ApiReferenceToolbarShareTemporary.vue.script.js.map +1 -1
  194. package/dist/features/developer-tools/components/ApiReferenceToolbarTitle.vue.js.map +1 -1
  195. package/dist/features/developer-tools/components/ApiReferenceToolbarTitle.vue.script.js +1 -1
  196. package/dist/features/developer-tools/components/ApiReferenceToolbarTitle.vue.script.js.map +1 -1
  197. package/dist/features/developer-tools/components/DeployApiReference.vue.js.map +1 -1
  198. package/dist/features/developer-tools/components/DeployApiReference.vue.script.js +1 -1
  199. package/dist/features/developer-tools/components/DeployApiReference.vue.script.js.map +1 -1
  200. package/dist/features/developer-tools/components/ModifyConfiguration.vue.d.ts.map +1 -1
  201. package/dist/features/developer-tools/components/ModifyConfiguration.vue.js.map +1 -1
  202. package/dist/features/developer-tools/components/ModifyConfiguration.vue.script.js +2 -1
  203. package/dist/features/developer-tools/components/ModifyConfiguration.vue.script.js.map +1 -1
  204. package/dist/features/developer-tools/components/ShareApiReference.vue.js.map +1 -1
  205. package/dist/features/developer-tools/components/ShareApiReference.vue.script.js +1 -1
  206. package/dist/features/developer-tools/components/ShareApiReference.vue.script.js.map +1 -1
  207. package/dist/features/example-responses/ExampleResponse.vue.d.ts.map +1 -1
  208. package/dist/features/example-responses/ExampleResponse.vue.js +1 -1
  209. package/dist/features/example-responses/ExampleResponse.vue.js.map +1 -1
  210. package/dist/features/example-responses/ExampleResponse.vue.script.js +2 -1
  211. package/dist/features/example-responses/ExampleResponse.vue.script.js.map +1 -1
  212. package/dist/features/example-responses/ExampleResponseTabList.vue.js +1 -1
  213. package/dist/features/example-responses/ExampleResponseTabList.vue.js.map +1 -1
  214. package/dist/features/example-responses/ExampleResponseTabList.vue.script.js +1 -1
  215. package/dist/features/example-responses/ExampleResponseTabList.vue.script.js.map +1 -1
  216. package/dist/features/example-responses/ExampleResponses.vue.js +1 -1
  217. package/dist/features/example-responses/ExampleResponses.vue.js.map +1 -1
  218. package/dist/features/example-responses/ExampleResponses.vue.script.js +3 -1
  219. package/dist/features/example-responses/ExampleResponses.vue.script.js.map +1 -1
  220. package/dist/features/example-responses/ExampleSchema.vue.d.ts.map +1 -1
  221. package/dist/features/example-responses/ExampleSchema.vue.js.map +1 -1
  222. package/dist/features/example-responses/ExampleSchema.vue.script.js +2 -1
  223. package/dist/features/example-responses/ExampleSchema.vue.script.js.map +1 -1
  224. package/dist/features/info-object/Contact.vue.js.map +1 -1
  225. package/dist/features/info-object/Contact.vue.script.js +1 -1
  226. package/dist/features/info-object/Contact.vue.script.js.map +1 -1
  227. package/dist/features/info-object/License.vue.d.ts +2 -1
  228. package/dist/features/info-object/License.vue.d.ts.map +1 -1
  229. package/dist/features/info-object/License.vue.js.map +1 -1
  230. package/dist/features/info-object/License.vue.script.js +7 -7
  231. package/dist/features/info-object/License.vue.script.js.map +1 -1
  232. package/dist/features/multiple-documents/DocumentSelector.vue.js.map +1 -1
  233. package/dist/features/multiple-documents/DocumentSelector.vue.script.js +1 -1
  234. package/dist/features/multiple-documents/DocumentSelector.vue.script.js.map +1 -1
  235. package/dist/features/specification-extension/SpecificationExtension.vue.js.map +1 -1
  236. package/dist/features/specification-extension/SpecificationExtension.vue.script.js +1 -1
  237. package/dist/features/specification-extension/SpecificationExtension.vue.script.js.map +1 -1
  238. package/dist/style.css +567 -567
  239. package/dist/vue-styles.css +350 -350
  240. package/package.json +15 -15
@@ -13,8 +13,9 @@ import SchemaEnums_default from "./SchemaEnums.vue.js";
13
13
  import SchemaPropertyHeading_default from "./SchemaPropertyHeading.vue.js";
14
14
  import Schema_default from "./Schema.vue.js";
15
15
  import { Fragment, computed, createBlock, createCommentVNode, createElementBlock, createSlots, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, renderList, resolveDynamicComponent, toDisplayString, unref, withCtx } from "vue";
16
- import { ScalarMarkdown, ScalarWrappingText } from "@scalar/components";
16
+ import { ScalarMarkdown } from "@scalar/components/markdown";
17
17
  import { resolve } from "@scalar/workspace-store/resolve";
18
+ import { ScalarWrappingText } from "@scalar/components/wrapping-text";
18
19
  import { isArraySchema } from "@scalar/workspace-store/schemas/v3.1/strict/type-guards";
19
20
  //#region src/components/Content/Schema/SchemaProperty.vue?vue&type=script&setup=true&lang.ts
20
21
  var _hoisted_1 = {
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaProperty.vue.script.js","names":[],"sources":["../../../../src/components/Content/Schema/SchemaProperty.vue"],"sourcesContent":["<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 /** When \"requestBody\", composition selection is synced with the example snippet */\n schemaContext?: string\n /** Internal path used to sync nested request body compositions with the code sample */\n compositionPath?: string[]\n /** Internal path segment for this property when building nested composition keys */\n compositionPathSegment?: 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 currentCompositionPath = computed<string[]>(() =>\n props.compositionPathSegment\n ? [...(props.compositionPath ?? []), props.compositionPathSegment]\n : (props.compositionPath ?? []),\n)\n\nconst arrayItemsCompositionPath = computed<string[]>(() => [\n ...currentCompositionPath.value,\n 'items',\n])\n\nconst shouldHaveLink = computed(() => props.level <= 2)\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 :eventBus=\"eventBus\"\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 :compositionPath=\"currentCompositionPath\"\n :eventBus=\"eventBus\"\n :hideModelNames\n :level=\"level + 1\"\n :name=\"name\"\n :noncollapsible=\"noncollapsible\"\n :options=\"options\"\n :schema=\"objectSchemaForChildren\"\n :schemaContext=\"schemaContext\" />\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 :compositionPath=\"arrayItemsCompositionPath\"\n :eventBus=\"eventBus\"\n :hideModelNames\n :level=\"level + 1\"\n :name=\"name\"\n :noncollapsible=\"noncollapsible\"\n :options=\"options\"\n :schema=\"resolve.schema(resolvedArrayItems)\"\n :schemaContext=\"schemaContext\" />\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 :compositionPath=\"currentCompositionPath\"\n :discriminator=\"schema?.discriminator\"\n :eventBus=\"eventBus\"\n :hideHeading=\"hideHeading\"\n :hideModelNames\n :level=\"level\"\n :name=\"name\"\n :noncollapsible=\"noncollapsible\"\n :options=\"options\"\n :schema=\"compositionData.value\"\n :schemaContext=\"schemaContext\" />\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--level-2 :deep(.relative > button) {\n left: -2rem;\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"],"mappings":"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"}
1
+ {"version":3,"file":"SchemaProperty.vue.script.js","names":[],"sources":["../../../../src/components/Content/Schema/SchemaProperty.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { ScalarMarkdown } from '@scalar/components/markdown'\nimport { ScalarWrappingText } from '@scalar/components/wrapping-text'\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 /** When \"requestBody\", composition selection is synced with the example snippet */\n schemaContext?: string\n /** Internal path used to sync nested request body compositions with the code sample */\n compositionPath?: string[]\n /** Internal path segment for this property when building nested composition keys */\n compositionPathSegment?: 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 currentCompositionPath = computed<string[]>(() =>\n props.compositionPathSegment\n ? [...(props.compositionPath ?? []), props.compositionPathSegment]\n : (props.compositionPath ?? []),\n)\n\nconst arrayItemsCompositionPath = computed<string[]>(() => [\n ...currentCompositionPath.value,\n 'items',\n])\n\nconst shouldHaveLink = computed(() => props.level <= 2)\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 :eventBus=\"eventBus\"\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 :compositionPath=\"currentCompositionPath\"\n :eventBus=\"eventBus\"\n :hideModelNames\n :level=\"level + 1\"\n :name=\"name\"\n :noncollapsible=\"noncollapsible\"\n :options=\"options\"\n :schema=\"objectSchemaForChildren\"\n :schemaContext=\"schemaContext\" />\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 :compositionPath=\"arrayItemsCompositionPath\"\n :eventBus=\"eventBus\"\n :hideModelNames\n :level=\"level + 1\"\n :name=\"name\"\n :noncollapsible=\"noncollapsible\"\n :options=\"options\"\n :schema=\"resolve.schema(resolvedArrayItems)\"\n :schemaContext=\"schemaContext\" />\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 :compositionPath=\"currentCompositionPath\"\n :discriminator=\"schema?.discriminator\"\n :eventBus=\"eventBus\"\n :hideHeading=\"hideHeading\"\n :hideModelNames\n :level=\"level\"\n :name=\"name\"\n :noncollapsible=\"noncollapsible\"\n :options=\"options\"\n :schema=\"compositionData.value\"\n :schemaContext=\"schemaContext\" />\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--level-2 :deep(.relative > button) {\n left: -2rem;\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"],"mappings":"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"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
2
2
  import SchemaPropertyDefault_vue_vue_type_script_setup_true_lang_default from "./SchemaPropertyDefault.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/components/Content/Schema/SchemaPropertyDefault.vue
5
- var SchemaPropertyDefault_default = /* @__PURE__ */ _plugin_vue_export_helper_default(SchemaPropertyDefault_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-4da5c70a"]]);
5
+ var SchemaPropertyDefault_default = /* @__PURE__ */ _plugin_vue_export_helper_default(SchemaPropertyDefault_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-5f65dcf4"]]);
6
6
  //#endregion
7
7
  export { SchemaPropertyDefault_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaPropertyDefault.vue.js","names":[],"sources":["../../../../src/components/Content/Schema/SchemaPropertyDefault.vue"],"sourcesContent":["<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"],"mappings":""}
1
+ {"version":3,"file":"SchemaPropertyDefault.vue.js","names":[],"sources":["../../../../src/components/Content/Schema/SchemaPropertyDefault.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components/icon'\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"],"mappings":""}
@@ -1,7 +1,7 @@
1
1
  import { formatValue } from "./helpers/format-value.js";
2
2
  import { createCommentVNode, createElementBlock, createElementVNode, createVNode, defineComponent, openBlock, toDisplayString, unref } from "vue";
3
- import { ScalarIcon } from "@scalar/components";
4
3
  import { useClipboard } from "@scalar/use-hooks/useClipboard";
4
+ import { ScalarIcon } from "@scalar/components/icon";
5
5
  //#region src/components/Content/Schema/SchemaPropertyDefault.vue?vue&type=script&setup=true&lang.ts
6
6
  var _hoisted_1 = {
7
7
  key: 0,
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaPropertyDefault.vue.script.js","names":[],"sources":["../../../../src/components/Content/Schema/SchemaPropertyDefault.vue"],"sourcesContent":["<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"],"mappings":";;;;;;;;;;;;;;EAUA,MAAM,EAAE,oBAAoB,cAAa;;UAGvB,QAAA,UAAU,KAAA,KAAA,WAAA,EACxB,mBAoBM,OApBN,YAoBM,CAAA,OAAA,OAAA,OAAA,KAnBJ,mBAIS,UAAA;IAHP,OAAM;IACN,MAAK;OACL,mBAAoB,QAAA,MAAd,UAAO,CAAA,EAAA,GAAA,GAEf,mBAaM,OAbN,YAaM,CAZJ,mBAWS,UAAA;IAVP,OAAM;IACN,MAAK;IACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,gBAAe,CAAC,MAAA,YAAW,CAAC,QAAA,MAAK,CAAA;OACzC,mBAEO,QAAA,MAAA,gBADF,MAAA,YAAW,CAAC,QAAA,MAAK,CAAA,EAAA,EAAA,EAEtB,YAGc,MAAA,WAAA,EAAA;IAFZ,OAAM;IACN,MAAK;IACL,MAAK"}
1
+ {"version":3,"file":"SchemaPropertyDefault.vue.script.js","names":[],"sources":["../../../../src/components/Content/Schema/SchemaPropertyDefault.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components/icon'\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"],"mappings":";;;;;;;;;;;;;;EAUA,MAAM,EAAE,oBAAoB,cAAa;;UAGvB,QAAA,UAAU,KAAA,KAAA,WAAA,EACxB,mBAoBM,OApBN,YAoBM,CAAA,OAAA,OAAA,OAAA,KAnBJ,mBAIS,UAAA;IAHP,OAAM;IACN,MAAK;OACL,mBAAoB,QAAA,MAAd,UAAO,CAAA,EAAA,GAAA,GAEf,mBAaM,OAbN,YAaM,CAZJ,mBAWS,UAAA;IAVP,OAAM;IACN,MAAK;IACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,gBAAe,CAAC,MAAA,YAAW,CAAC,QAAA,MAAK,CAAA;OACzC,mBAEO,QAAA,MAAA,gBADF,MAAA,YAAW,CAAC,QAAA,MAAK,CAAA,EAAA,EAAA,EAEtB,YAGc,MAAA,WAAA,EAAA;IAFZ,OAAM;IACN,MAAK;IACL,MAAK"}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaPropertyExamples.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/Content/Schema/SchemaPropertyExamples.vue"],"names":[],"mappings":"AAiKA,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAC;AAsLF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"SchemaPropertyExamples.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/Content/Schema/SchemaPropertyExamples.vue"],"names":[],"mappings":"AAmLA,KAAK,WAAW,GAAG;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,OAAO,CAAC,EAAE,OAAO,CAAA;CAClB,CAAC;AAyMF,QAAA,MAAM,YAAY,kSAEhB,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
2
2
  import SchemaPropertyExamples_vue_vue_type_script_setup_true_lang_default from "./SchemaPropertyExamples.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/components/Content/Schema/SchemaPropertyExamples.vue
5
- var SchemaPropertyExamples_default = /* @__PURE__ */ _plugin_vue_export_helper_default(SchemaPropertyExamples_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-77f8279d"]]);
5
+ var SchemaPropertyExamples_default = /* @__PURE__ */ _plugin_vue_export_helper_default(SchemaPropertyExamples_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-6952a15a"]]);
6
6
  //#endregion
7
7
  export { SchemaPropertyExamples_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaPropertyExamples.vue.js","names":[],"sources":["../../../../src/components/Content/Schema/SchemaPropertyExamples.vue"],"sourcesContent":["<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 LinkButton from '@/components/Content/Schema/LinkButton.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 <LinkButton class=\"decoration-dotted\">Example</LinkButton>\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 <LinkButton class=\"decoration-dotted\">\n {{ multipleExamplesLabel }}\n </LinkButton>\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@reference \"../../../style.css\";\n\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-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 @apply z-context;\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"],"mappings":""}
1
+ {"version":3,"file":"SchemaPropertyExamples.vue.js","names":[],"sources":["../../../../src/components/Content/Schema/SchemaPropertyExamples.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components/icon'\nimport { isObject } from '@scalar/helpers/object/is-object'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { computed } from 'vue'\n\nimport LinkButton from '@/components/Content/Schema/LinkButton.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\n// `null` is a meaningful example value for nullable schemas, so only treat\n// `undefined` as \"not provided\".\nconst hasSingleExample = computed(() => example !== undefined)\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\n/**\n * Unwrap an OpenAPI 3 Example Object (`{ value, externalValue, summary, description }`)\n * to the actual sample. Plain values pass through untouched.\n */\nfunction unwrapExampleObject(value: unknown): unknown {\n if (isObject(value)) {\n if ('value' in value) {\n return value.value\n }\n if ('externalValue' in value) {\n return (value as { externalValue: unknown }).externalValue\n }\n }\n return value\n}\n</script>\n<template>\n <!-- single example (deprecated) -->\n <template v-if=\"hasSingleExample\">\n <div class=\"property-example\">\n <LinkButton class=\"decoration-dotted\">Example</LinkButton>\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 <LinkButton class=\"decoration-dotted\">\n {{ multipleExamplesLabel }}\n </LinkButton>\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(unwrapExampleObject(ex)))\">\n <span>{{ formatExample(unwrapExampleObject(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@reference \"../../../style.css\";\n\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-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 @apply z-context;\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"],"mappings":""}
@@ -1,9 +1,9 @@
1
1
  import LinkButton_default from "./LinkButton.vue.js";
2
2
  import { formatExample } from "./helpers/format-example.js";
3
3
  import { Fragment, computed, createCommentVNode, createElementBlock, createElementVNode, createTextVNode, createVNode, defineComponent, openBlock, renderList, toDisplayString, unref, withCtx } from "vue";
4
- import { ScalarIcon } from "@scalar/components";
5
4
  import { useClipboard } from "@scalar/use-hooks/useClipboard";
6
- import { isDefined } from "@scalar/helpers/array/is-defined";
5
+ import { ScalarIcon } from "@scalar/components/icon";
6
+ import { isObject } from "@scalar/helpers/object/is-object";
7
7
  //#region src/components/Content/Schema/SchemaPropertyExamples.vue?vue&type=script&setup=true&lang.ts
8
8
  var _hoisted_1 = {
9
9
  key: 0,
@@ -24,13 +24,24 @@ var SchemaPropertyExamples_vue_vue_type_script_setup_true_lang_default = /* @__P
24
24
  },
25
25
  setup(__props) {
26
26
  const { copyToClipboard } = useClipboard();
27
- const hasSingleExample = computed(() => isDefined(__props.example));
27
+ const hasSingleExample = computed(() => __props.example !== void 0);
28
28
  const normalizedExamples = computed(() => {
29
29
  if (__props.examples && typeof __props.examples === "object") return __props.examples;
30
30
  return {};
31
31
  });
32
32
  const hasMultipleExamples = computed(() => Object.keys(normalizedExamples.value).length > 0);
33
33
  const multipleExamplesLabel = computed(() => Object.keys(normalizedExamples.value).length === 1 ? "Example" : "Examples");
34
+ /**
35
+ * Unwrap an OpenAPI 3 Example Object (`{ value, externalValue, summary, description }`)
36
+ * to the actual sample. Plain values pass through untouched.
37
+ */
38
+ function unwrapExampleObject(value) {
39
+ if (isObject(value)) {
40
+ if ("value" in value) return value.value;
41
+ if ("externalValue" in value) return value.externalValue;
42
+ }
43
+ return value;
44
+ }
34
45
  return (_ctx, _cache) => {
35
46
  return openBlock(), createElementBlock(Fragment, null, [hasSingleExample.value ? (openBlock(), createElementBlock("div", _hoisted_1, [createVNode(LinkButton_default, { class: "decoration-dotted" }, {
36
47
  default: withCtx(() => [..._cache[1] || (_cache[1] = [createTextVNode("Example", -1)])]),
@@ -51,8 +62,8 @@ var SchemaPropertyExamples_vue_vue_type_script_setup_true_lang_default = /* @__P
51
62
  key,
52
63
  class: "property-example-value group",
53
64
  type: "button",
54
- onClick: ($event) => unref(copyToClipboard)(unref(formatExample)(ex))
55
- }, [createElementVNode("span", null, toDisplayString(unref(formatExample)(ex)), 1), createVNode(unref(ScalarIcon), {
65
+ onClick: ($event) => unref(copyToClipboard)(unref(formatExample)(unwrapExampleObject(ex)))
66
+ }, [createElementVNode("span", null, toDisplayString(unref(formatExample)(unwrapExampleObject(ex))), 1), createVNode(unref(ScalarIcon), {
56
67
  class: "text-c-3 group-hover:text-c-1 ml-auto min-h-3 min-w-3",
57
68
  icon: "Clipboard",
58
69
  size: "xs"
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaPropertyExamples.vue.script.js","names":[],"sources":["../../../../src/components/Content/Schema/SchemaPropertyExamples.vue"],"sourcesContent":["<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 LinkButton from '@/components/Content/Schema/LinkButton.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 <LinkButton class=\"decoration-dotted\">Example</LinkButton>\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 <LinkButton class=\"decoration-dotted\">\n {{ multipleExamplesLabel }}\n </LinkButton>\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@reference \"../../../style.css\";\n\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-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 @apply z-context;\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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAeA,MAAM,EAAE,oBAAoB,cAAa;EAEzC,MAAM,mBAAmB,eAAe,UAAU,QAAA,QAAQ,CAAA;EAE1D,MAAM,qBAAqB,eAAwC;AACjE,OAAI,QAAA,YAAY,OAAO,QAAA,aAAa,SAClC,QAAO,QAAA;AAGT,UAAO,EAAC;IACT;EAED,MAAM,sBAAsB,eACpB,OAAO,KAAK,mBAAmB,MAAM,CAAC,SAAS,EACvD;EAEA,MAAM,wBAAwB,eAC5B,OAAO,KAAK,mBAAmB,MAAM,CAAC,WAAW,IAAI,YAAY,WACnE;;2DAIkB,iBAAA,SAAA,WAAA,EACd,mBAgBM,OAhBN,YAgBM,CAfJ,YAA0D,oBAAA,EAA9C,OAAM,qBAAmB,EAAA;2BAAQ,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAP,WAAO,GAAA,CAAA,EAAA,CAAA;;OAC7C,mBAaM,OAbN,YAaM,CAZJ,mBAWS,UAAA;IAVP,OAAM;IACN,MAAK;IACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,gBAAe,CAAC,MAAA,cAAa,CAAC,QAAA,QAAO,CAAA;OAC7C,mBAEO,QAAA,MAAA,gBADF,MAAA,cAAa,CAAC,QAAA,QAAO,CAAA,EAAA,EAAA,EAE1B,YAGc,MAAA,WAAA,EAAA;IAFZ,OAAM;IACN,MAAK;IACL,MAAK;6CAOC,oBAAA,SAAA,WAAA,EACd,mBAkBM,OAlBN,YAkBM,CAjBJ,YAEa,oBAAA,EAFD,OAAM,qBAAmB,EAAA;2BACR,CAAA,gBAAA,gBAAxB,sBAAA,MAAqB,EAAA,EAAA,CAAA,CAAA;;OAE1B,mBAaM,OAbN,YAaM,EAAA,UAAA,KAAA,EAZJ,mBAWS,UAAA,MAAA,WAVa,mBAAA,QAAZ,IAAI,QAAG;wBADjB,mBAWS,UAAA;KATD;KACN,OAAM;KACN,MAAK;KACJ,UAAK,WAAE,MAAA,gBAAe,CAAC,MAAA,cAAa,CAAC,GAAE,CAAA;QACxC,mBAAqC,QAAA,MAAA,gBAA5B,MAAA,cAAa,CAAC,GAAE,CAAA,EAAA,EAAA,EACzB,YAGc,MAAA,WAAA,EAAA;KAFZ,OAAM;KACN,MAAK;KACL,MAAK"}
1
+ {"version":3,"file":"SchemaPropertyExamples.vue.script.js","names":[],"sources":["../../../../src/components/Content/Schema/SchemaPropertyExamples.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIcon } from '@scalar/components/icon'\nimport { isObject } from '@scalar/helpers/object/is-object'\nimport { useClipboard } from '@scalar/use-hooks/useClipboard'\nimport { computed } from 'vue'\n\nimport LinkButton from '@/components/Content/Schema/LinkButton.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\n// `null` is a meaningful example value for nullable schemas, so only treat\n// `undefined` as \"not provided\".\nconst hasSingleExample = computed(() => example !== undefined)\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\n/**\n * Unwrap an OpenAPI 3 Example Object (`{ value, externalValue, summary, description }`)\n * to the actual sample. Plain values pass through untouched.\n */\nfunction unwrapExampleObject(value: unknown): unknown {\n if (isObject(value)) {\n if ('value' in value) {\n return value.value\n }\n if ('externalValue' in value) {\n return (value as { externalValue: unknown }).externalValue\n }\n }\n return value\n}\n</script>\n<template>\n <!-- single example (deprecated) -->\n <template v-if=\"hasSingleExample\">\n <div class=\"property-example\">\n <LinkButton class=\"decoration-dotted\">Example</LinkButton>\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 <LinkButton class=\"decoration-dotted\">\n {{ multipleExamplesLabel }}\n </LinkButton>\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(unwrapExampleObject(ex)))\">\n <span>{{ formatExample(unwrapExampleObject(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@reference \"../../../style.css\";\n\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-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 @apply z-context;\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"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;EAeA,MAAM,EAAE,oBAAoB,cAAa;EAIzC,MAAM,mBAAmB,eAAe,QAAA,YAAY,KAAA,EAAS;EAE7D,MAAM,qBAAqB,eAAwC;AACjE,OAAI,QAAA,YAAY,OAAO,QAAA,aAAa,SAClC,QAAO,QAAA;AAGT,UAAO,EAAC;IACT;EAED,MAAM,sBAAsB,eACpB,OAAO,KAAK,mBAAmB,MAAM,CAAC,SAAS,EACvD;EAEA,MAAM,wBAAwB,eAC5B,OAAO,KAAK,mBAAmB,MAAM,CAAC,WAAW,IAAI,YAAY,WACnE;;;;;EAMA,SAAS,oBAAoB,OAAyB;AACpD,OAAI,SAAS,MAAM,EAAE;AACnB,QAAI,WAAW,MACb,QAAO,MAAM;AAEf,QAAI,mBAAmB,MACrB,QAAQ,MAAqC;;AAGjD,UAAO;;;2DAKS,iBAAA,SAAA,WAAA,EACd,mBAgBM,OAhBN,YAgBM,CAfJ,YAA0D,oBAAA,EAA9C,OAAM,qBAAmB,EAAA;2BAAQ,CAAA,GAAA,OAAA,OAAA,OAAA,KAAA,CAAA,gBAAP,WAAO,GAAA,CAAA,EAAA,CAAA;;OAC7C,mBAaM,OAbN,YAaM,CAZJ,mBAWS,UAAA;IAVP,OAAM;IACN,MAAK;IACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,MAAA,gBAAe,CAAC,MAAA,cAAa,CAAC,QAAA,QAAO,CAAA;OAC7C,mBAEO,QAAA,MAAA,gBADF,MAAA,cAAa,CAAC,QAAA,QAAO,CAAA,EAAA,EAAA,EAE1B,YAGc,MAAA,WAAA,EAAA;IAFZ,OAAM;IACN,MAAK;IACL,MAAK;6CAOC,oBAAA,SAAA,WAAA,EACd,mBAkBM,OAlBN,YAkBM,CAjBJ,YAEa,oBAAA,EAFD,OAAM,qBAAmB,EAAA;2BACR,CAAA,gBAAA,gBAAxB,sBAAA,MAAqB,EAAA,EAAA,CAAA,CAAA;;OAE1B,mBAaM,OAbN,YAaM,EAAA,UAAA,KAAA,EAZJ,mBAWS,UAAA,MAAA,WAVa,mBAAA,QAAZ,IAAI,QAAG;wBADjB,mBAWS,UAAA;KATD;KACN,OAAM;KACN,MAAK;KACJ,UAAK,WAAE,MAAA,gBAAe,CAAC,MAAA,cAAa,CAAC,oBAAoB,GAAE,CAAA,CAAA;QAC5D,mBAA0D,QAAA,MAAA,gBAAjD,MAAA,cAAa,CAAC,oBAAoB,GAAE,CAAA,CAAA,EAAA,EAAA,EAC7C,YAGc,MAAA,WAAA,EAAA;KAFZ,OAAM;KACN,MAAK;KACL,MAAK"}
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaPropertyHeading.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/Content/Schema/SchemaPropertyHeading.vue"],"names":[],"mappings":"AAgcA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAEvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAmBhG,KAAK,WAAW,GAAG;IACf,KAAK,EAAE,YAAY,GAAG,SAAS,CAAA;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,qHAAqH;IACrH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;CACpC,CAAC;AA2hBJ,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAK5C,QAAA,MAAM,UAAU;cAniBD,iBAAiB,GAAG,IAAI;cANxB,OAAO;oBAGD,OAAO;qBAJN,OAAO;kBAGV,OAAO;6EA0iBxB,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
1
+ {"version":3,"file":"SchemaPropertyHeading.vue.d.ts","sourceRoot":"","sources":["../../../../src/components/Content/Schema/SchemaPropertyHeading.vue"],"names":[],"mappings":"AA2cA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAA;AAEvE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAmBhG,KAAK,WAAW,GAAG;IACf,KAAK,EAAE,YAAY,GAAG,SAAS,CAAA;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,qHAAqH;IACrH,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzB,QAAQ,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;CACpC,CAAC;AAsiBJ,QAAA,IAAI,OAAO,IAAW,CAAE;AACxB,KAAK,WAAW,GAAG,EAAE,GACnB;IAAE,IAAI,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,OAAO,KAAK,GAAG,CAAA;CAAE,CAAC;AAK5C,QAAA,MAAM,UAAU;cA9iBD,iBAAiB,GAAG,IAAI;cANxB,OAAO;oBAGD,OAAO;qBAJN,OAAO;kBAGV,OAAO;6EAqjBxB,CAAC;AACH,QAAA,MAAM,YAAY,EAAS,eAAe,CAAC,OAAO,UAAU,EAAE,WAAW,CAAC,CAAC;wBACtD,OAAO,YAAY;AAAxC,wBAAyC;AAWzC,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG;IAChC,QAAO;QACN,MAAM,EAAE,CAAC,CAAC;KACV,CAAA;CACD,CAAC"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../../_virtual/_plugin-vue_exp
2
2
  import SchemaPropertyHeading_vue_vue_type_script_setup_true_lang_default from "./SchemaPropertyHeading.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/components/Content/Schema/SchemaPropertyHeading.vue
5
- var SchemaPropertyHeading_default = /* @__PURE__ */ _plugin_vue_export_helper_default(SchemaPropertyHeading_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-3264097c"]]);
5
+ var SchemaPropertyHeading_default = /* @__PURE__ */ _plugin_vue_export_helper_default(SchemaPropertyHeading_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-e4c4fffd"]]);
6
6
  //#endregion
7
7
  export { SchemaPropertyHeading_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaPropertyHeading.vue.js","names":[],"sources":["../../../../src/components/Content/Schema/SchemaPropertyHeading.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\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 LinkButton from '@/components/Content/Schema/LinkButton.vue'\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 eventBus?: WorkspaceEventBus | null\n }>(),\n {\n isDiscriminator: false,\n required: false,\n withExamples: true,\n hideModelNames: false,\n eventBus: null,\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/** Link data for navigating to the referenced model in the sidebar. */\nconst modelLink = computed(() => {\n if (!props.value) {\n return null\n }\n\n if (props.hideModelNames) {\n return null\n }\n\n if (props.modelName) {\n return { schemaKey: props.modelName, label: props.modelName }\n }\n\n const modelName = getModelNameFromSchema(props.value)\n if (modelName) {\n return { schemaKey: modelName.schemaKey, label: modelName.label }\n }\n\n if (isArraySchema(props.value) && props.value.items) {\n const itemName = getModelNameFromSchema(props.value.items)\n return itemName\n ? { schemaKey: itemName.schemaKey, label: `${itemName.label}[]` }\n : 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 }}<template v-if=\"modelLink\">\n ·\n <LinkButton\n v-if=\"props.eventBus && modelLink.schemaKey\"\n @click=\"\n props.eventBus.emit('scroll-to:model-by-name', {\n name: modelLink.schemaKey,\n })\n \">\n {{ modelLink.label }}\n </LinkButton>\n <template v-else>{{ modelLink.label }}</template>\n </template>\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"],"mappings":""}
1
+ {"version":3,"file":"SchemaPropertyHeading.vue.js","names":[],"sources":["../../../../src/components/Content/Schema/SchemaPropertyHeading.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\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 LinkButton from '@/components/Content/Schema/LinkButton.vue'\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 eventBus?: WorkspaceEventBus | null\n }>(),\n {\n isDiscriminator: false,\n required: false,\n withExamples: true,\n hideModelNames: false,\n eventBus: null,\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/** Link data for navigating to the referenced model in the sidebar. */\nconst modelLink = computed(() => {\n if (!props.value) {\n return null\n }\n\n if (props.hideModelNames) {\n return null\n }\n\n if (props.modelName) {\n return { schemaKey: props.modelName, label: props.modelName }\n }\n\n const modelName = getModelNameFromSchema(props.value)\n if (modelName) {\n return { schemaKey: modelName.schemaKey, label: modelName.label }\n }\n\n if (isArraySchema(props.value) && props.value.items) {\n const itemName = getModelNameFromSchema(props.value.items)\n return itemName\n ? { schemaKey: itemName.schemaKey, label: `${itemName.label}[]` }\n : 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 // Treat only `undefined` as \"not set\" — `null` is a valid example value on a nullable schema.\n if (\n props.value &&\n 'example' in props.value &&\n props.value.example !== undefined\n ) {\n return props.value.example\n }\n\n if (props.value && isArraySchema(props.value)) {\n const itemsSchema = resolve.schema(props.value.items)\n if (\n itemsSchema &&\n 'example' in itemsSchema &&\n itemsSchema.example !== undefined\n ) {\n return itemsSchema.example\n }\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 }}<template v-if=\"modelLink\">\n ·\n <LinkButton\n v-if=\"props.eventBus && modelLink.schemaKey\"\n @click=\"\n props.eventBus.emit('scroll-to:model-by-name', {\n name: modelLink.schemaKey,\n })\n \">\n {{ modelLink.label }}\n </LinkButton>\n <template v-else>{{ modelLink.label }}</template>\n </template>\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"],"mappings":""}
@@ -182,10 +182,10 @@ var SchemaPropertyHeading_vue_vue_type_script_setup_true_lang_default = /* @__PU
182
182
  return getSchemaType(props.value);
183
183
  });
184
184
  const exampleValue = computed(() => {
185
- if (isDefined(props.value?.example)) return props.value.example;
185
+ if (props.value && "example" in props.value && props.value.example !== void 0) return props.value.example;
186
186
  if (props.value && isArraySchema(props.value)) {
187
- const itemsExample = resolve.schema(props.value.items)?.example;
188
- return isDefined(itemsExample) ? itemsExample : void 0;
187
+ const itemsSchema = resolve.schema(props.value.items);
188
+ if (itemsSchema && "example" in itemsSchema && itemsSchema.example !== void 0) return itemsSchema.example;
189
189
  }
190
190
  });
191
191
  return (_ctx, _cache) => {
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaPropertyHeading.vue.script.js","names":["$slots"],"sources":["../../../../src/components/Content/Schema/SchemaPropertyHeading.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\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 LinkButton from '@/components/Content/Schema/LinkButton.vue'\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 eventBus?: WorkspaceEventBus | null\n }>(),\n {\n isDiscriminator: false,\n required: false,\n withExamples: true,\n hideModelNames: false,\n eventBus: null,\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/** Link data for navigating to the referenced model in the sidebar. */\nconst modelLink = computed(() => {\n if (!props.value) {\n return null\n }\n\n if (props.hideModelNames) {\n return null\n }\n\n if (props.modelName) {\n return { schemaKey: props.modelName, label: props.modelName }\n }\n\n const modelName = getModelNameFromSchema(props.value)\n if (modelName) {\n return { schemaKey: modelName.schemaKey, label: modelName.label }\n }\n\n if (isArraySchema(props.value) && props.value.items) {\n const itemName = getModelNameFromSchema(props.value.items)\n return itemName\n ? { schemaKey: itemName.schemaKey, label: `${itemName.label}[]` }\n : 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 }}<template v-if=\"modelLink\">\n ·\n <LinkButton\n v-if=\"props.eventBus && modelLink.schemaKey\"\n @click=\"\n props.eventBus.emit('scroll-to:model-by-name', {\n name: modelLink.schemaKey,\n })\n \">\n {{ modelLink.label }}\n </LinkButton>\n <template v-else>{{ modelLink.label }}</template>\n </template>\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"],"mappings":"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"}
1
+ {"version":3,"file":"SchemaPropertyHeading.vue.script.js","names":["$slots"],"sources":["../../../../src/components/Content/Schema/SchemaPropertyHeading.vue"],"sourcesContent":["<script lang=\"ts\" setup>\nimport { isDefined } from '@scalar/helpers/array/is-defined'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\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 LinkButton from '@/components/Content/Schema/LinkButton.vue'\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 eventBus?: WorkspaceEventBus | null\n }>(),\n {\n isDiscriminator: false,\n required: false,\n withExamples: true,\n hideModelNames: false,\n eventBus: null,\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/** Link data for navigating to the referenced model in the sidebar. */\nconst modelLink = computed(() => {\n if (!props.value) {\n return null\n }\n\n if (props.hideModelNames) {\n return null\n }\n\n if (props.modelName) {\n return { schemaKey: props.modelName, label: props.modelName }\n }\n\n const modelName = getModelNameFromSchema(props.value)\n if (modelName) {\n return { schemaKey: modelName.schemaKey, label: modelName.label }\n }\n\n if (isArraySchema(props.value) && props.value.items) {\n const itemName = getModelNameFromSchema(props.value.items)\n return itemName\n ? { schemaKey: itemName.schemaKey, label: `${itemName.label}[]` }\n : 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 // Treat only `undefined` as \"not set\" — `null` is a valid example value on a nullable schema.\n if (\n props.value &&\n 'example' in props.value &&\n props.value.example !== undefined\n ) {\n return props.value.example\n }\n\n if (props.value && isArraySchema(props.value)) {\n const itemsSchema = resolve.schema(props.value.items)\n if (\n itemsSchema &&\n 'example' in itemsSchema &&\n itemsSchema.example !== undefined\n ) {\n return itemsSchema.example\n }\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 }}<template v-if=\"modelLink\">\n ·\n <LinkButton\n v-if=\"props.eventBus && modelLink.schemaKey\"\n @click=\"\n props.eventBus.emit('scroll-to:model-by-name', {\n name: modelLink.schemaKey,\n })\n \">\n {{ modelLink.label }}\n </LinkButton>\n <template v-else>{{ modelLink.label }}</template>\n </template>\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"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"format-example.d.ts","sourceRoot":"","sources":["../../../../../src/components/Content/Schema/helpers/format-example.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAkD/D"}
1
+ {"version":3,"file":"format-example.d.ts","sourceRoot":"","sources":["../../../../../src/components/Content/Schema/helpers/format-example.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CA0C/D"}
@@ -1,24 +1,28 @@
1
1
  //#region src/components/Content/Schema/helpers/format-example.ts
2
2
  /**
3
+ * Trims surrounding whitespace, but keeps the original string when trimming would empty it
4
+ * (so an intentional " " example is not silently turned into "").
5
+ */
6
+ function preserveOrTrim(value) {
7
+ const trimmed = value.trim();
8
+ return trimmed === "" ? value : trimmed;
9
+ }
10
+ /**
3
11
  * Converts an example value to a string that can be displayed in the UI.
4
12
  */
5
13
  function formatExample(example) {
6
14
  if (Array.isArray(example)) return `[${example.map((item) => {
7
- if (typeof item === "string") return `"${item.toString().trim()}"`;
15
+ if (typeof item === "string") return `"${preserveOrTrim(item)}"`;
8
16
  if (typeof item === "object") return JSON.stringify(item);
9
17
  if (item === void 0) return "undefined";
10
18
  if (item === null) return "null";
11
19
  return item;
12
20
  }).join(", ")}]`;
13
21
  if (example === null) return "null";
14
- if (typeof example === "object") {
15
- if ("value" in example) return example.value;
16
- if ("externalValue" in example) return example.externalValue;
17
- return JSON.stringify(example);
18
- }
22
+ if (typeof example === "object") return JSON.stringify(example);
19
23
  if (example === void 0) return "undefined";
20
- if (typeof example === "string") return example.trim();
21
- return example.toString().trim();
24
+ if (typeof example === "string") return preserveOrTrim(example);
25
+ return preserveOrTrim(example.toString());
22
26
  }
23
27
  //#endregion
24
28
  export { formatExample };
@@ -1 +1 @@
1
- {"version":3,"file":"format-example.js","names":[],"sources":["../../../../../src/components/Content/Schema/helpers/format-example.ts"],"sourcesContent":["/**\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"],"mappings":";;;;AAGA,SAAgB,cAAc,SAAmC;AAC/D,KAAI,MAAM,QAAQ,QAAQ,CACxB,QAAO,IAAI,QACR,KAAK,SAAS;AACb,MAAI,OAAO,SAAS,SAClB,QAAO,IAAI,KAAK,UAAU,CAAC,MAAM,CAAC;AAGpC,MAAI,OAAO,SAAS,SAClB,QAAO,KAAK,UAAU,KAAK;AAG7B,MAAI,SAAS,KAAA,EACX,QAAO;AAGT,MAAI,SAAS,KACX,QAAO;AAGT,SAAO;GACP,CACD,KAAK,KAAK,CAAC;AAGhB,KAAI,YAAY,KACd,QAAO;AAGT,KAAI,OAAO,YAAY,UAAU;AAC/B,MAAI,WAAW,QACb,QAAO,QAAQ;AAGjB,MAAI,mBAAmB,QACrB,QAAO,QAAQ;AAGjB,SAAO,KAAK,UAAU,QAAQ;;AAGhC,KAAI,YAAY,KAAA,EACd,QAAO;AAGT,KAAI,OAAO,YAAY,SACrB,QAAO,QAAQ,MAAM;AAGvB,QAAO,QAAQ,UAAU,CAAC,MAAM"}
1
+ {"version":3,"file":"format-example.js","names":[],"sources":["../../../../../src/components/Content/Schema/helpers/format-example.ts"],"sourcesContent":["/**\n * Trims surrounding whitespace, but keeps the original string when trimming would empty it\n * (so an intentional \" \" example is not silently turned into \"\").\n */\nfunction preserveOrTrim(value: string): string {\n const trimmed = value.trim()\n return trimmed === '' ? value : trimmed\n}\n\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 `\"${preserveOrTrim(item)}\"`\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 return JSON.stringify(example)\n }\n\n if (example === undefined) {\n return 'undefined'\n }\n\n if (typeof example === 'string') {\n return preserveOrTrim(example)\n }\n\n return preserveOrTrim(example.toString())\n}\n"],"mappings":";;;;;AAIA,SAAS,eAAe,OAAuB;CAC7C,MAAM,UAAU,MAAM,MAAM;AAC5B,QAAO,YAAY,KAAK,QAAQ;;;;;AAMlC,SAAgB,cAAc,SAAmC;AAC/D,KAAI,MAAM,QAAQ,QAAQ,CACxB,QAAO,IAAI,QACR,KAAK,SAAS;AACb,MAAI,OAAO,SAAS,SAClB,QAAO,IAAI,eAAe,KAAK,CAAC;AAGlC,MAAI,OAAO,SAAS,SAClB,QAAO,KAAK,UAAU,KAAK;AAG7B,MAAI,SAAS,KAAA,EACX,QAAO;AAGT,MAAI,SAAS,KACX,QAAO;AAGT,SAAO;GACP,CACD,KAAK,KAAK,CAAC;AAGhB,KAAI,YAAY,KACd,QAAO;AAGT,KAAI,OAAO,YAAY,SACrB,QAAO,KAAK,UAAU,QAAQ;AAGhC,KAAI,YAAY,KAAA,EACd,QAAO;AAGT,KAAI,OAAO,YAAY,SACrB,QAAO,eAAe,QAAQ;AAGhC,QAAO,eAAe,QAAQ,UAAU,CAAC"}
@@ -2,7 +2,7 @@ import _plugin_vue_export_helper_default from "../../../../_virtual/_plugin-vue_
2
2
  import ClassicLayout_vue_vue_type_script_setup_true_lang_default from "./ClassicLayout.vue.script.js";
3
3
  /* empty css */
4
4
  //#region src/components/Content/Tags/components/ClassicLayout.vue
5
- var ClassicLayout_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ClassicLayout_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-d4f47ce7"]]);
5
+ var ClassicLayout_default = /* @__PURE__ */ _plugin_vue_export_helper_default(ClassicLayout_vue_vue_type_script_setup_true_lang_default, [["__scopeId", "data-v-ee09ae3d"]]);
6
6
  //#endregion
7
7
  export { ClassicLayout_default as default };
8
8
 
@@ -1 +1 @@
1
- {"version":3,"file":"ClassicLayout.vue.js","names":[],"sources":["../../../../../src/components/Content/Tags/components/ClassicLayout.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarMarkdown } from '@scalar/components'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { TraversedTag } from '@scalar/workspace-store/schemas/navigation'\n\nimport { Anchor } from '@/components/Anchor'\nimport {\n SectionContainerAccordion,\n SectionHeader,\n SectionHeaderTag,\n} from '@/components/Section'\n\nconst { tag, isCollapsed } = defineProps<{\n tag: TraversedTag\n isCollapsed: boolean\n eventBus: WorkspaceEventBus | null\n}>()\n</script>\n\n<template>\n <SectionContainerAccordion\n :aria-label=\"tag.title\"\n class=\"tag-section\"\n :class=\"{ 'tag-section-group': tag.isGroup }\"\n :modelValue=\"!isCollapsed\"\n @update:modelValue=\"\n (value) => eventBus?.emit('toggle:nav-item', { id: tag.id, open: value })\n \">\n <template #title>\n <SectionHeader\n class=\"tag-name\"\n :class=\"{ 'tag-group-name': tag.isGroup }\">\n <Anchor\n @copyAnchorUrl=\"\n () => eventBus?.emit('copy-url:nav-item', { id: tag.id })\n \">\n <SectionHeaderTag :level=\"2\">\n {{ tag.title }}\n </SectionHeaderTag>\n </Anchor>\n </SectionHeader>\n <ScalarMarkdown\n class=\"tag-description\"\n :value=\"tag?.description\"\n withImages />\n </template>\n <slot />\n </SectionContainerAccordion>\n</template>\n\n<style scoped>\n.tag-section {\n margin-bottom: 48px;\n}\n.tag-name {\n text-transform: capitalize;\n}\n.tag-description {\n padding-bottom: 4px;\n text-align: left;\n}\n\n/* Tag Groups */\n.tag-section-group .tag-group-name {\n gap: 12px;\n align-self: stretch;\n grid-template-columns: auto 1fr;\n}\n.tag-group-name:after {\n content: '';\n display: block;\n height: 1px;\n align-self: center;\n background: var(--scalar-border-color);\n}\n.tag-group-name:has(* > *:hover),\n.tag-group-name:has(:focus-visible) {\n gap: 32px;\n}\n.tag-section-group .tag-section {\n padding-inline: 0;\n margin-bottom: 24px;\n}\n.tag-section-group .tag-section:last-of-type {\n margin-bottom: 0;\n}\n</style>\n"],"mappings":""}
1
+ {"version":3,"file":"ClassicLayout.vue.js","names":[],"sources":["../../../../../src/components/Content/Tags/components/ClassicLayout.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarMarkdown } from '@scalar/components/markdown'\nimport type { WorkspaceEventBus } from '@scalar/workspace-store/events'\nimport type { TraversedTag } from '@scalar/workspace-store/schemas/navigation'\n\nimport { Anchor } from '@/components/Anchor'\nimport {\n SectionContainerAccordion,\n SectionHeader,\n SectionHeaderTag,\n} from '@/components/Section'\n\nconst { tag, isCollapsed } = defineProps<{\n tag: TraversedTag\n isCollapsed: boolean\n eventBus: WorkspaceEventBus | null\n}>()\n</script>\n\n<template>\n <SectionContainerAccordion\n :aria-label=\"tag.title\"\n class=\"tag-section\"\n :class=\"{ 'tag-section-group': tag.isGroup }\"\n :modelValue=\"!isCollapsed\"\n @update:modelValue=\"\n (value) => eventBus?.emit('toggle:nav-item', { id: tag.id, open: value })\n \">\n <template #title>\n <SectionHeader\n class=\"tag-name\"\n :class=\"{ 'tag-group-name': tag.isGroup }\">\n <Anchor\n @copyAnchorUrl=\"\n () => eventBus?.emit('copy-url:nav-item', { id: tag.id })\n \">\n <SectionHeaderTag :level=\"2\">\n {{ tag.title }}\n </SectionHeaderTag>\n </Anchor>\n </SectionHeader>\n <ScalarMarkdown\n class=\"tag-description\"\n :value=\"tag?.description\"\n withImages />\n </template>\n <slot />\n </SectionContainerAccordion>\n</template>\n\n<style scoped>\n.tag-section {\n margin-bottom: 48px;\n}\n.tag-name {\n text-transform: capitalize;\n}\n.tag-description {\n padding-bottom: 4px;\n text-align: left;\n}\n\n/* Tag Groups */\n.tag-section-group .tag-group-name {\n gap: 12px;\n align-self: stretch;\n grid-template-columns: auto 1fr;\n}\n.tag-group-name:after {\n content: '';\n display: block;\n height: 1px;\n align-self: center;\n background: var(--scalar-border-color);\n}\n.tag-group-name:has(* > *:hover),\n.tag-group-name:has(:focus-visible) {\n gap: 32px;\n}\n.tag-section-group .tag-section {\n padding-inline: 0;\n margin-bottom: 24px;\n}\n.tag-section-group .tag-section:last-of-type {\n margin-bottom: 0;\n}\n</style>\n"],"mappings":""}
@@ -3,7 +3,7 @@ import SectionHeader_default from "../../../Section/SectionHeader.vue.js";
3
3
  import SectionHeaderTag_default from "../../../Section/SectionHeaderTag.vue.js";
4
4
  import Anchor_default from "../../../Anchor/Anchor.vue.js";
5
5
  import { createBlock, createTextVNode, createVNode, defineComponent, normalizeClass, openBlock, renderSlot, toDisplayString, unref, withCtx } from "vue";
6
- import { ScalarMarkdown } from "@scalar/components";
6
+ import { ScalarMarkdown } from "@scalar/components/markdown";
7
7
  //#region src/components/Content/Tags/components/ClassicLayout.vue?vue&type=script&setup=true&lang.ts
8
8
  var ClassicLayout_vue_vue_type_script_setup_true_lang_default = /* @__PURE__ */ defineComponent({
9
9
  __name: "ClassicLayout",