@scalar/api-client 3.21.4 → 3.22.0

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 (108) hide show
  1. package/CHANGELOG.md +22 -0
  2. package/dist/plugins/posthog/sanitize-event-payload.d.ts.map +1 -1
  3. package/dist/plugins/posthog/sanitize-event-payload.js +1 -0
  4. package/dist/plugins/posthog/sanitize-event-payload.js.map +1 -1
  5. package/dist/style.css +1204 -51
  6. package/dist/styles/tailwind.config.css +1 -0
  7. package/dist/v2/blocks/operation-block/OperationBlock.vue.d.ts.map +1 -1
  8. package/dist/v2/blocks/operation-block/OperationBlock.vue.js.map +1 -1
  9. package/dist/v2/blocks/operation-block/OperationBlock.vue.script.js +1 -1
  10. package/dist/v2/blocks/operation-block/OperationBlock.vue.script.js.map +1 -1
  11. package/dist/v2/blocks/request-block/components/RequestBody.vue.d.ts.map +1 -1
  12. package/dist/v2/blocks/request-block/components/RequestBody.vue.js +1 -1
  13. package/dist/v2/blocks/request-block/components/RequestBody.vue.js.map +1 -1
  14. package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js +62 -13
  15. package/dist/v2/blocks/request-block/components/RequestBody.vue.script.js.map +1 -1
  16. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.d.ts +2 -0
  17. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.d.ts.map +1 -1
  18. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.js.map +1 -1
  19. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.script.js +5 -3
  20. package/dist/v2/blocks/request-block/components/RequestBodyForm.vue.script.js.map +1 -1
  21. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.d.ts +9 -3
  22. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.d.ts.map +1 -1
  23. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.js.map +1 -1
  24. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.script.js +44 -16
  25. package/dist/v2/blocks/request-block/components/RequestBodyViewToggle.vue.script.js.map +1 -1
  26. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.d.ts +3 -2
  27. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.d.ts.map +1 -1
  28. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js +13 -10
  29. package/dist/v2/blocks/request-block/helpers/get-form-body-rows.js.map +1 -1
  30. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.d.ts.map +1 -1
  31. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.js +1 -1
  32. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.js.map +1 -1
  33. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.script.js +3 -3
  34. package/dist/v2/blocks/scalar-address-bar-block/components/AddressBarHistory.vue.script.js.map +1 -1
  35. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.d.ts.map +1 -1
  36. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.js.map +1 -1
  37. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js +53 -22
  38. package/dist/v2/blocks/scalar-auth-selector-block/components/OAuth2.vue.script.js.map +1 -1
  39. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.d.ts +4 -0
  40. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.d.ts.map +1 -1
  41. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.js.map +1 -1
  42. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js +23 -12
  43. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthDataTableInput.vue.script.js.map +1 -1
  44. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.d.ts.map +1 -1
  45. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.js.map +1 -1
  46. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js +30 -6
  47. package/dist/v2/blocks/scalar-auth-selector-block/components/RequestAuthTab.vue.script.js.map +1 -1
  48. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-device-authorization.d.ts.map +1 -1
  49. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-device-authorization.js +3 -1
  50. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth-device-authorization.js.map +1 -1
  51. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.d.ts.map +1 -1
  52. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js +9 -3
  53. package/dist/v2/blocks/scalar-auth-selector-block/helpers/oauth.js.map +1 -1
  54. package/dist/v2/components/code-input/CodeInput.vue.d.ts.map +1 -1
  55. package/dist/v2/components/code-input/CodeInput.vue.js +1 -1
  56. package/dist/v2/components/code-input/CodeInput.vue.js.map +1 -1
  57. package/dist/v2/components/code-input/CodeInput.vue.script.js.map +1 -1
  58. package/dist/v2/components/data-table/DataTableInput.vue.d.ts.map +1 -1
  59. package/dist/v2/components/data-table/DataTableInput.vue.js +1 -1
  60. package/dist/v2/components/data-table/DataTableInput.vue.js.map +1 -1
  61. package/dist/v2/components/data-table/DataTableInput.vue.script.js +15 -11
  62. package/dist/v2/components/data-table/DataTableInput.vue.script.js.map +1 -1
  63. package/dist/v2/components/server/ServerDropdown.vue.d.ts.map +1 -1
  64. package/dist/v2/components/server/ServerDropdown.vue.js.map +1 -1
  65. package/dist/v2/components/server/ServerDropdown.vue.script.js +7 -9
  66. package/dist/v2/components/server/ServerDropdown.vue.script.js.map +1 -1
  67. package/dist/v2/constants.js +1 -1
  68. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.d.ts.map +1 -1
  69. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.js.map +1 -1
  70. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.script.js +27 -31
  71. package/dist/v2/features/environments/components/EnvironmentVariablesDropdown.vue.script.js.map +1 -1
  72. package/dist/v2/features/localization/locales/ar.d.ts +4 -0
  73. package/dist/v2/features/localization/locales/ar.d.ts.map +1 -1
  74. package/dist/v2/features/localization/locales/ar.js +5 -1
  75. package/dist/v2/features/localization/locales/ar.js.map +1 -1
  76. package/dist/v2/features/localization/locales/de.d.ts +4 -0
  77. package/dist/v2/features/localization/locales/de.d.ts.map +1 -1
  78. package/dist/v2/features/localization/locales/de.js +5 -1
  79. package/dist/v2/features/localization/locales/de.js.map +1 -1
  80. package/dist/v2/features/localization/locales/es.d.ts +4 -0
  81. package/dist/v2/features/localization/locales/es.d.ts.map +1 -1
  82. package/dist/v2/features/localization/locales/es.js +5 -1
  83. package/dist/v2/features/localization/locales/es.js.map +1 -1
  84. package/dist/v2/features/localization/locales/fr.d.ts +4 -0
  85. package/dist/v2/features/localization/locales/fr.d.ts.map +1 -1
  86. package/dist/v2/features/localization/locales/fr.js +5 -1
  87. package/dist/v2/features/localization/locales/fr.js.map +1 -1
  88. package/dist/v2/features/localization/locales/pt.d.ts +4 -0
  89. package/dist/v2/features/localization/locales/pt.d.ts.map +1 -1
  90. package/dist/v2/features/localization/locales/pt.js +5 -1
  91. package/dist/v2/features/localization/locales/pt.js.map +1 -1
  92. package/dist/v2/features/localization/locales/ru.d.ts +4 -0
  93. package/dist/v2/features/localization/locales/ru.d.ts.map +1 -1
  94. package/dist/v2/features/localization/locales/ru.js +5 -1
  95. package/dist/v2/features/localization/locales/ru.js.map +1 -1
  96. package/dist/v2/features/localization/locales/zh-cn.d.ts +4 -0
  97. package/dist/v2/features/localization/locales/zh-cn.d.ts.map +1 -1
  98. package/dist/v2/features/localization/locales/zh-cn.js +5 -1
  99. package/dist/v2/features/localization/locales/zh-cn.js.map +1 -1
  100. package/dist/v2/features/localization/translations.d.ts +4 -0
  101. package/dist/v2/features/localization/translations.d.ts.map +1 -1
  102. package/dist/v2/features/localization/translations.js +5 -1
  103. package/dist/v2/features/localization/translations.js.map +1 -1
  104. package/dist/v2/workspace-events.d.ts.map +1 -1
  105. package/dist/v2/workspace-events.js +1 -0
  106. package/dist/v2/workspace-events.js.map +1 -1
  107. package/dist/vue-styles.css +30 -33
  108. package/package.json +12 -12
@@ -1 +1 @@
1
- {"version":3,"file":"DataTableInput.vue.script.js","names":["$slots","$attrs"],"sources":["../../../../src/v2/components/data-table/DataTableInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIconButton } from '@scalar/components/icon-button'\nimport { ScalarIconEye, ScalarIconEyeSlash, ScalarIconX } from '@scalar/icons'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { computed, ref, useTemplateRef } from 'vue'\n\nimport type { VueClassProp } from '@/types/vue'\nimport { CodeInputLite } from '@/v2/components/code-input'\nimport { useLocalization } from '@/v2/features/localization'\n\nimport DataTableCell from './DataTableCell.vue'\nimport DataTableInputSelect from './DataTableInputSelect.vue'\n\nconst props = withDefaults(\n defineProps<{\n id?: string\n type?: string | undefined\n /** Class for the wrapping cell because attrs is bound to the input */\n containerClass?: VueClassProp | undefined\n required?: boolean\n modelValue: string\n /** Allows adding a custom value to the enum dropdown, defaults to true */\n canAddCustomEnumValue?: boolean\n readOnly?: boolean\n enum?: string[]\n environment: XScalarEnvironment\n description?: string | undefined\n /** Whether to show context function suggestions like $guid, $timestamp. Defaults to true */\n withFakeData?: boolean\n }>(),\n {\n canAddCustomEnumValue: true,\n required: false,\n readOnly: false,\n withFakeData: true,\n },\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: string | number): void\n (e: 'inputFocus'): void\n (e: 'inputBlur'): void\n (e: 'selectVariable', value: string): void\n}>()\n\nconst { translate } = useLocalization()\n\ndefineOptions({ inheritAttrs: false })\n\nconst mask = ref(true)\nconst interactingWithDropdown = ref(false)\nconst codeInput = useTemplateRef('codeInput')\n\nconst handleBlur = () => !interactingWithDropdown.value && emit('inputBlur')\n\nconst inputType = computed(() =>\n props.type === 'password' ? 'text' : (props.type ?? 'text'),\n)\n\n// If not an enum nor read only, focus the code input\nconst handleLabelClick = () => {\n if (!props.enum?.length && !props.readOnly) {\n codeInput.value?.focus()\n }\n}\n</script>\n<template>\n <DataTableCell\n class=\"relative flex\"\n :class=\"containerClass\">\n <div\n v-if=\"$slots.default\"\n class=\"text-c-1 flex items-center pr-0 pl-3\"\n :for=\"id ?? ''\"\n @click=\"handleLabelClick\">\n <slot />:\n </div>\n <div class=\"relative flex min-w-0 flex-1\">\n <template v-if=\"props.enum && props.enum.length\">\n <DataTableInputSelect\n :canAddCustomValue=\"props.canAddCustomEnumValue\"\n :modelValue=\"props.modelValue\"\n :value=\"props.enum\"\n @update:modelValue=\"emit('update:modelValue', $event)\" />\n </template>\n <template v-else>\n <input\n v-if=\"mask && type === 'password'\"\n v-bind=\"id ? { ...$attrs, id: id } : $attrs\"\n autocomplete=\"off\"\n class=\"text-c-1 disabled:text-c-2 peer w-full min-w-0 border-none px-2 py-1.25 -outline-offset-1\"\n :class=\"{ 'scalar-password-input': type === 'password' }\"\n data-1p-ignore\n :readOnly=\"readOnly\"\n spellcheck=\"false\"\n :type=\"inputType\"\n :value=\"modelValue\"\n @input=\"\n emit(\n 'update:modelValue',\n ($event.target as HTMLInputElement).value ?? '',\n )\n \" />\n <CodeInputLite\n v-else\n v-bind=\"$attrs\"\n :id=\"id\"\n ref=\"codeInput\"\n class=\"text-c-1 disabled:text-c-2 peer w-full min-w-0 border-none -outline-offset-1\"\n :class=\"[\n type === 'password' && description && 'pr-12',\n description && 'pr-8',\n type === 'password' && 'scalar-password-input',\n ]\"\n :environment=\"environment\"\n :modelValue=\"modelValue ?? ''\"\n :readOnly=\"readOnly\"\n :required=\"Boolean(required)\"\n :type=\"inputType\"\n :withFakeData=\"withFakeData\"\n @blur=\"handleBlur\"\n @focus=\"emit('inputFocus')\"\n @update:modelValue=\"(value) => emit('update:modelValue', value)\" />\n </template>\n </div>\n <div\n v-if=\"$slots.warning\"\n class=\"centered-y text-orange absolute right-7 text-xs\">\n <slot name=\"warning\" />\n </div>\n <slot name=\"icon\" />\n <!-- Clear -->\n <ScalarIconButton\n v-if=\"modelValue\"\n class=\"-ml-.25 h-6 w-6 self-center p-1.25\"\n :icon=\"ScalarIconX\"\n :label=\"translate('apiClient.dataTableInput.clearValue')\"\n @click=\"emit('update:modelValue', '')\" />\n <!-- Toggle Visibility -->\n <!-- A toggle button keeps one name and reports its state, so the label\n stays \"Show Password\" while `aria-pressed` says whether the value is\n revealed. Flipping the name instead leaves screen readers silent,\n because activating a button does not re-announce its name. -->\n <ScalarIconButton\n v-if=\"type === 'password'\"\n :aria-pressed=\"!mask\"\n class=\"-ml-.5 mr-1.25 h-6 w-6 self-center p-1.25\"\n data-testid=\"data-table-password-toggle\"\n :icon=\"mask ? ScalarIconEye : ScalarIconEyeSlash\"\n :label=\"translate('apiClient.dataTableInput.showPassword')\"\n @click=\"mask = !mask\" />\n </DataTableCell>\n</template>\n\n<style scoped>\n:deep(.code-input-lite__editor) {\n background-color: transparent;\n font-family: var(--scalar-font);\n font-size: var(--scalar-small);\n padding: 5px 8px;\n}\n:deep(.scalar-pill:not(:last-of-type)) {\n margin-right: 0.15em;\n}\n:deep(.scalar-pill:not(:first-of-type)) {\n margin-left: 0.5px;\n}\n/* Tailwind placeholder is busted */\ninput::placeholder {\n color: var(--scalar-color-3);\n}\n/* we want our inputs to look like a password input but not be one */\n.scalar-password-input {\n text-security: disc;\n -webkit-text-security: disc;\n -moz-text-security: disc;\n}\n</style>\n"],"mappings":"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"}
1
+ {"version":3,"file":"DataTableInput.vue.script.js","names":["$slots","$attrs"],"sources":["../../../../src/v2/components/data-table/DataTableInput.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarIconButton } from '@scalar/components/icon-button'\nimport { ScalarIconEye, ScalarIconEyeSlash, ScalarIconX } from '@scalar/icons'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { computed, ref, useTemplateRef } from 'vue'\n\nimport type { VueClassProp } from '@/types/vue'\nimport { CodeInputLite } from '@/v2/components/code-input'\nimport { useLocalization } from '@/v2/features/localization'\n\nimport DataTableCell from './DataTableCell.vue'\nimport DataTableInputSelect from './DataTableInputSelect.vue'\n\nconst props = withDefaults(\n defineProps<{\n id?: string\n type?: string | undefined\n /** Class for the wrapping cell because attrs is bound to the input */\n containerClass?: VueClassProp | undefined\n required?: boolean\n modelValue: string\n /** Allows adding a custom value to the enum dropdown, defaults to true */\n canAddCustomEnumValue?: boolean\n readOnly?: boolean\n enum?: string[]\n environment: XScalarEnvironment\n description?: string | undefined\n /** Whether to show context function suggestions like $guid, $timestamp. Defaults to true */\n withFakeData?: boolean\n }>(),\n {\n canAddCustomEnumValue: true,\n required: false,\n readOnly: false,\n withFakeData: true,\n },\n)\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', v: string | number): void\n (e: 'inputFocus'): void\n (e: 'inputBlur'): void\n (e: 'selectVariable', value: string): void\n}>()\n\nconst { translate } = useLocalization()\n\ndefineOptions({ inheritAttrs: false })\n\nconst mask = ref(true)\nconst interactingWithDropdown = ref(false)\nconst codeInput = useTemplateRef('codeInput')\nconst maskedInput = useTemplateRef('maskedInput')\n\nconst handleBlur = () => !interactingWithDropdown.value && emit('inputBlur')\n\nconst inputType = computed(() =>\n props.type === 'password' ? 'text' : (props.type ?? 'text'),\n)\n\n// If not an enum nor read only, focus the code input or masked input\nconst handleLabelClick = () => {\n if (!props.enum?.length && !props.readOnly) {\n codeInput.value?.focus()\n maskedInput.value?.focus()\n }\n}\n</script>\n<template>\n <DataTableCell\n class=\"relative flex\"\n :class=\"containerClass\">\n <div\n v-if=\"$slots.default\"\n class=\"text-c-1 flex items-center pr-0 pl-3\"\n @click=\"handleLabelClick\">\n <slot />:\n </div>\n <div class=\"relative flex min-w-0 flex-1\">\n <template v-if=\"props.enum && props.enum.length\">\n <DataTableInputSelect\n :canAddCustomValue=\"props.canAddCustomEnumValue\"\n :modelValue=\"props.modelValue\"\n :value=\"props.enum\"\n @update:modelValue=\"emit('update:modelValue', $event)\" />\n </template>\n <template v-else>\n <input\n v-if=\"mask && type === 'password'\"\n v-bind=\"id ? { ...$attrs, id: id } : $attrs\"\n ref=\"maskedInput\"\n autocomplete=\"off\"\n class=\"text-c-1 disabled:text-c-2 peer w-full min-w-0 border-none px-2 py-1.25 -outline-offset-1\"\n :class=\"{ 'scalar-password-input': type === 'password' }\"\n data-1p-ignore\n :readOnly=\"readOnly\"\n spellcheck=\"false\"\n :type=\"inputType\"\n :value=\"modelValue\"\n @input=\"\n emit(\n 'update:modelValue',\n ($event.target as HTMLInputElement).value ?? '',\n )\n \" />\n <CodeInputLite\n v-else\n v-bind=\"$attrs\"\n :id=\"id\"\n ref=\"codeInput\"\n class=\"text-c-1 disabled:text-c-2 peer w-full min-w-0 border-none -outline-offset-1\"\n :class=\"[\n type === 'password' && description && 'pr-12',\n description && 'pr-8',\n type === 'password' && 'scalar-password-input',\n ]\"\n :environment=\"environment\"\n :modelValue=\"modelValue ?? ''\"\n :readOnly=\"readOnly\"\n :required=\"Boolean(required)\"\n :type=\"inputType\"\n :withFakeData=\"withFakeData\"\n @blur=\"handleBlur\"\n @focus=\"emit('inputFocus')\"\n @update:modelValue=\"(value) => emit('update:modelValue', value)\" />\n </template>\n </div>\n <div\n v-if=\"$slots.warning\"\n class=\"centered-y text-orange absolute right-7 text-xs\">\n <slot name=\"warning\" />\n </div>\n <slot name=\"icon\" />\n <!-- Clear -->\n <ScalarIconButton\n v-if=\"modelValue && !readOnly\"\n class=\"-ml-.25 h-6 w-6 self-center p-1.25\"\n :icon=\"ScalarIconX\"\n :label=\"translate('apiClient.dataTableInput.clearValue')\"\n @click=\"emit('update:modelValue', '')\" />\n <!-- Toggle Visibility -->\n <!-- A toggle button keeps one name and reports its state, so the label\n stays \"Show Password\" while `aria-pressed` says whether the value is\n revealed. Flipping the name instead leaves screen readers silent,\n because activating a button does not re-announce its name. -->\n <ScalarIconButton\n v-if=\"type === 'password'\"\n :aria-pressed=\"!mask\"\n class=\"-ml-.5 mr-1.25 h-6 w-6 self-center p-1.25\"\n data-testid=\"data-table-password-toggle\"\n :icon=\"mask ? ScalarIconEye : ScalarIconEyeSlash\"\n :label=\"translate('apiClient.dataTableInput.showPassword')\"\n @click=\"mask = !mask\" />\n </DataTableCell>\n</template>\n\n<style scoped>\n:deep(.code-input-lite__editor) {\n background-color: transparent;\n font-family: var(--scalar-font);\n font-size: var(--scalar-small);\n padding: 5px 8px;\n}\n:deep(.scalar-pill:not(:last-of-type)) {\n margin-right: 0.15em;\n}\n:deep(.scalar-pill:not(:first-of-type)) {\n margin-left: 0.5px;\n}\n/* Tailwind placeholder is busted */\ninput::placeholder {\n color: var(--scalar-color-3);\n}\n/* we want our inputs to look like a password input but not be one */\n.scalar-password-input {\n text-security: disc;\n -webkit-text-security: disc;\n -moz-text-security: disc;\n}\n</style>\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ServerDropdown.vue.d.ts","sourceRoot":"","sources":["../../../../src/v2/components/server/ServerDropdown.vue"],"names":[],"mappings":"AAyJA,OAAO,KAAK,EAEV,UAAU,EACX,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAKhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKrD;;;GAGG;wBACkB,OAAO,YAAY;AAAxC,wBAAyC;AAMzC,MAAM,MAAM,mBAAmB,GAAG;IAChC,0CAA0C;IAC1C,IAAI,EAAE,UAAU,CAAA;IAChB,0EAA0E;IAC1E,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,gCAAgC;IAChC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAA;IACd,oBAAoB;IACpB,MAAM,EAAE,YAAY,CAAA;CACrB,CAAA;AACD,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;kFAkTd,CAAC"}
1
+ {"version":3,"file":"ServerDropdown.vue.d.ts","sourceRoot":"","sources":["../../../../src/v2/components/server/ServerDropdown.vue"],"names":[],"mappings":"AAmJA,OAAO,KAAK,EAEV,UAAU,EACX,MAAM,gCAAgC,CAAA;AACvC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8DAA8D,CAAA;AAKhG,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAKrD;;;GAGG;wBACkB,OAAO,YAAY;AAAxC,wBAAyC;AAMzC,MAAM,MAAM,mBAAmB,GAAG;IAChC,0CAA0C;IAC1C,IAAI,EAAE,UAAU,CAAA;IAChB,0EAA0E;IAC1E,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,gCAAgC;IAChC,MAAM,EAAE,YAAY,GAAG,IAAI,CAAA;IAC3B,qEAAqE;IACrE,MAAM,EAAE,MAAM,CAAA;IACd,oBAAoB;IACpB,MAAM,EAAE,YAAY,CAAA;CACrB,CAAA;AACD,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;kFAmSd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ServerDropdown.vue.js","names":[],"sources":["../../../../src/v2/components/server/ServerDropdown.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * ServerDropdown component\n * This component is used to display the server dropdown for the operation block\n */\nexport default {\n name: 'ServerDropdown',\n}\n\nexport type ServerDropdownProps = {\n /** The meta information for the server */\n meta: ServerMeta\n /** List of servers that are available for the operation/document level */\n servers: ServerObject[]\n /** Currently selected server */\n server: ServerObject | null\n /** The id of the target to use for the popover (e.g. address bar) */\n target: string\n /** Client layout */\n layout: ClientLayout\n}\n</script>\n<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarFloatingBackdrop } from '@scalar/components/floating'\nimport { ScalarPopover } from '@scalar/components/popover'\nimport { ScalarIconPencilSimple, ScalarIconPlus } from '@scalar/icons'\nimport type {\n ApiReferenceEvents,\n ServerMeta,\n} from '@scalar/workspace-store/events'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport ValueEmitter from '@/v2/components/layout/ValueEmitter.vue'\nimport { useLocalization } from '@/v2/features/localization'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nimport ServerDropdownItem from './ServerDropdownItem.vue'\n\nconst { target, server, servers, meta } = defineProps<ServerDropdownProps>()\n\nconst emit = defineEmits<{\n /** Update a server variable for the selected server */\n (\n e: 'update:selectedServer',\n payload: ApiReferenceEvents['server:update:selected'],\n ): void\n (\n e: 'update:variable',\n payload: ApiReferenceEvents['server:update:variables'],\n ): void\n (e: 'update:servers'): void\n /** Update the open state of the server dropdown */\n (e: 'update:open', value: boolean): void\n}>()\n\nconst { translate } = useLocalization()\n\nconst requestServerOptions = computed(() =>\n servers.map((s) => ({\n id: s.url,\n // Prefer the server name (OpenAPI 3.2) as a friendly label, falling back to the URL\n label:\n s.name || s.url || translate('apiClient.serverDropdown.unknownServer'),\n })),\n)\n\nconst serverUrlWithoutTrailingSlash = computed(() => {\n if (server?.url?.endsWith('/')) {\n return server.url.slice(0, -1)\n }\n return server?.url || ''\n})\n</script>\n<template>\n <ScalarPopover\n class=\"max-h-[inherit] p-0 text-base\"\n focus\n :offset=\"0\"\n placement=\"bottom\"\n resize\n :target=\"target\"\n :teleport=\"`#${target}`\">\n <ScalarButton\n class=\"hover:bg-b-2 font-code text-c-2 h-auto gap-0.75 rounded border px-1.5 text-base whitespace-nowrap @3xl:ml-0.75\"\n variant=\"ghost\">\n <template v-if=\"server\">\n <span class=\"sr-only\">{{\n translate('apiClient.serverDropdown.server')\n }}</span>\n {{ serverUrlWithoutTrailingSlash }}\n </template>\n <template v-else>\n <span class=\"sr-only\">{{\n translate('apiClient.serverDropdown.addServer')\n }}</span>\n <ScalarIconPlus class=\"size-3\" />\n </template>\n </ScalarButton>\n\n <template #popover=\"{ close }\">\n <div\n class=\"custom-scroll flex max-h-[inherit] flex-col gap-1 p-1\"\n @click=\"close\">\n <!-- Request -->\n <ServerDropdownItem\n v-for=\"(serverOption, index) in requestServerOptions\"\n :key=\"serverOption.id\"\n :server=\"server\"\n :serverOption=\"serverOption\"\n type=\"request\"\n @update:selectedServer=\"\n emit('update:selectedServer', { url: serverOption.id, meta })\n \"\n @update:variable=\"\n (key, value) => emit('update:variable', { index, key, value, meta })\n \" />\n\n <!-- Add Server -->\n <template v-if=\"layout !== 'modal'\">\n <button\n class=\"text-xxs hover:bg-b-2 flex cursor-pointer items-center gap-1.5 rounded p-1.75\"\n type=\"button\"\n @click=\"emit('update:servers')\">\n <div class=\"flex items-center justify-center\">\n <ScalarIconPencilSimple class=\"size-4\" />\n </div>\n <span>{{\n translate('apiClient.serverDropdown.updateServers')\n }}</span>\n </button>\n </template>\n </div>\n </template>\n <template #backdrop=\"{ open }\">\n <!-- Emit the slot value back out the parent -->\n <ValueEmitter\n :value=\"open\"\n @change=\"(value) => emit('update:open', value)\"\n @unmount=\"emit('update:open', false)\" />\n\n <ScalarFloatingBackdrop class=\"inset-x-px rounded-none rounded-b-lg\" />\n </template>\n </ScalarPopover>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"ServerDropdown.vue.js","names":[],"sources":["../../../../src/v2/components/server/ServerDropdown.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * ServerDropdown component\n * This component is used to display the server dropdown for the operation block\n */\nexport default {\n name: 'ServerDropdown',\n}\n\nexport type ServerDropdownProps = {\n /** The meta information for the server */\n meta: ServerMeta\n /** List of servers that are available for the operation/document level */\n servers: ServerObject[]\n /** Currently selected server */\n server: ServerObject | null\n /** The id of the target to use for the popover (e.g. address bar) */\n target: string\n /** Client layout */\n layout: ClientLayout\n}\n</script>\n<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarPopover } from '@scalar/components/popover'\nimport { ScalarIconPencilSimple, ScalarIconPlus } from '@scalar/icons'\nimport type {\n ApiReferenceEvents,\n ServerMeta,\n} from '@scalar/workspace-store/events'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport ValueEmitter from '@/v2/components/layout/ValueEmitter.vue'\nimport { useLocalization } from '@/v2/features/localization'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nimport ServerDropdownItem from './ServerDropdownItem.vue'\n\nconst { target, server, servers, meta } = defineProps<ServerDropdownProps>()\n\nconst emit = defineEmits<{\n /** Update a server variable for the selected server */\n (\n e: 'update:selectedServer',\n payload: ApiReferenceEvents['server:update:selected'],\n ): void\n (\n e: 'update:variable',\n payload: ApiReferenceEvents['server:update:variables'],\n ): void\n (e: 'update:servers'): void\n /** Update the open state of the server dropdown */\n (e: 'update:open', value: boolean): void\n}>()\n\nconst { translate } = useLocalization()\n\nconst requestServerOptions = computed(() =>\n servers.map((s) => ({\n id: s.url,\n // Prefer the server name (OpenAPI 3.2) as a friendly label, falling back to the URL\n label:\n s.name || s.url || translate('apiClient.serverDropdown.unknownServer'),\n })),\n)\n\nconst serverUrlWithoutTrailingSlash = computed(() => {\n if (server?.url?.endsWith('/')) {\n return server.url.slice(0, -1)\n }\n return server?.url || ''\n})\n</script>\n<template>\n <ScalarPopover\n class=\"max-h-[inherit] rounded-none rounded-b-lg border border-t-0 p-0 text-base inset-shadow-none\"\n focus\n :offset=\"0\"\n placement=\"bottom\"\n resize\n :target=\"target\"\n :teleport=\"`#${target}`\">\n <ScalarButton\n class=\"hover:bg-b-2 font-code text-c-2 h-auto gap-0.75 rounded border px-1.5 text-base whitespace-nowrap @3xl:ml-0.75\"\n variant=\"ghost\">\n <template v-if=\"server\">\n <span class=\"sr-only\">{{\n translate('apiClient.serverDropdown.server')\n }}</span>\n {{ serverUrlWithoutTrailingSlash }}\n </template>\n <template v-else>\n <span class=\"sr-only\">{{\n translate('apiClient.serverDropdown.addServer')\n }}</span>\n <ScalarIconPlus class=\"size-3\" />\n </template>\n </ScalarButton>\n\n <template #popover=\"{ close, open }\">\n <!-- Emit the slot value back out the parent -->\n <ValueEmitter\n :value=\"open\"\n @change=\"(value) => emit('update:open', value)\"\n @unmount=\"emit('update:open', false)\" />\n <div\n class=\"custom-scroll flex max-h-[inherit] flex-col gap-1 p-1\"\n @click=\"close\">\n <!-- Request -->\n <ServerDropdownItem\n v-for=\"(serverOption, index) in requestServerOptions\"\n :key=\"serverOption.id\"\n :server=\"server\"\n :serverOption=\"serverOption\"\n type=\"request\"\n @update:selectedServer=\"\n emit('update:selectedServer', { url: serverOption.id, meta })\n \"\n @update:variable=\"\n (key, value) => emit('update:variable', { index, key, value, meta })\n \" />\n\n <!-- Add Server -->\n <template v-if=\"layout !== 'modal'\">\n <button\n class=\"text-xxs hover:bg-b-2 flex cursor-pointer items-center gap-1.5 rounded p-1.75\"\n type=\"button\"\n @click=\"emit('update:servers')\">\n <div class=\"flex items-center justify-center\">\n <ScalarIconPencilSimple class=\"size-4\" />\n </div>\n <span>{{\n translate('apiClient.serverDropdown.updateServers')\n }}</span>\n </button>\n </template>\n </div>\n </template>\n </ScalarPopover>\n</template>\n"],"mappings":""}
@@ -5,7 +5,6 @@ import { Fragment, computed, createBlock, createCommentVNode, createElementBlock
5
5
  import { ScalarButton } from "@scalar/components/button";
6
6
  import { ScalarIconPencilSimple, ScalarIconPlus } from "@scalar/icons";
7
7
  import { ScalarPopover } from "@scalar/components/popover";
8
- import { ScalarFloatingBackdrop } from "@scalar/components/floating";
9
8
  //#region src/v2/components/server/ServerDropdown.vue?vue&type=script&setup=true&lang.ts
10
9
  var _hoisted_1 = { class: "sr-only" };
11
10
  var _hoisted_2 = { class: "sr-only" };
@@ -39,7 +38,7 @@ var ServerDropdown_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
39
38
  });
40
39
  return (_ctx, _cache) => {
41
40
  return openBlock(), createBlock(unref(ScalarPopover), {
42
- class: "max-h-[inherit] p-0 text-base",
41
+ class: "max-h-[inherit] rounded-none rounded-b-lg border border-t-0 p-0 text-base inset-shadow-none",
43
42
  focus: "",
44
43
  offset: 0,
45
44
  placement: "bottom",
@@ -47,7 +46,11 @@ var ServerDropdown_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
47
46
  target: __props.target,
48
47
  teleport: `#${__props.target}`
49
48
  }, {
50
- popover: withCtx(({ close }) => [createElementVNode("div", {
49
+ popover: withCtx(({ close, open }) => [createVNode(ValueEmitter_default, {
50
+ value: open,
51
+ onChange: _cache[0] || (_cache[0] = (value) => emit("update:open", value)),
52
+ onUnmount: _cache[1] || (_cache[1] = ($event) => emit("update:open", false))
53
+ }, null, 8, ["value"]), createElementVNode("div", {
51
54
  class: "custom-scroll flex max-h-[inherit] flex-col gap-1 p-1",
52
55
  onClick: close
53
56
  }, [(openBlock(true), createElementBlock(Fragment, null, renderList(requestServerOptions.value, (serverOption, index) => {
@@ -76,13 +79,8 @@ var ServerDropdown_vue_vue_type_script_setup_true_lang_default = /*@__PURE__*/ d
76
79
  key: 0,
77
80
  class: "text-xxs hover:bg-b-2 flex cursor-pointer items-center gap-1.5 rounded p-1.75",
78
81
  type: "button",
79
- onClick: _cache[0] || (_cache[0] = ($event) => emit("update:servers"))
82
+ onClick: _cache[2] || (_cache[2] = ($event) => emit("update:servers"))
80
83
  }, [createElementVNode("div", _hoisted_4, [createVNode(unref(ScalarIconPencilSimple), { class: "size-4" })]), createElementVNode("span", null, toDisplayString(unref(translate)("apiClient.serverDropdown.updateServers")), 1)])) : createCommentVNode("", true)], 8, _hoisted_3)]),
81
- backdrop: withCtx(({ open }) => [createVNode(ValueEmitter_default, {
82
- value: open,
83
- onChange: _cache[1] || (_cache[1] = (value) => emit("update:open", value)),
84
- onUnmount: _cache[2] || (_cache[2] = ($event) => emit("update:open", false))
85
- }, null, 8, ["value"]), createVNode(unref(ScalarFloatingBackdrop), { class: "inset-x-px rounded-none rounded-b-lg" })]),
86
84
  default: withCtx(() => [createVNode(unref(ScalarButton), {
87
85
  class: "hover:bg-b-2 font-code text-c-2 h-auto gap-0.75 rounded border px-1.5 text-base whitespace-nowrap @3xl:ml-0.75",
88
86
  variant: "ghost"
@@ -1 +1 @@
1
- {"version":3,"file":"ServerDropdown.vue.script.js","names":[],"sources":["../../../../src/v2/components/server/ServerDropdown.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * ServerDropdown component\n * This component is used to display the server dropdown for the operation block\n */\nexport default {\n name: 'ServerDropdown',\n}\n\nexport type ServerDropdownProps = {\n /** The meta information for the server */\n meta: ServerMeta\n /** List of servers that are available for the operation/document level */\n servers: ServerObject[]\n /** Currently selected server */\n server: ServerObject | null\n /** The id of the target to use for the popover (e.g. address bar) */\n target: string\n /** Client layout */\n layout: ClientLayout\n}\n</script>\n<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarFloatingBackdrop } from '@scalar/components/floating'\nimport { ScalarPopover } from '@scalar/components/popover'\nimport { ScalarIconPencilSimple, ScalarIconPlus } from '@scalar/icons'\nimport type {\n ApiReferenceEvents,\n ServerMeta,\n} from '@scalar/workspace-store/events'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport ValueEmitter from '@/v2/components/layout/ValueEmitter.vue'\nimport { useLocalization } from '@/v2/features/localization'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nimport ServerDropdownItem from './ServerDropdownItem.vue'\n\nconst { target, server, servers, meta } = defineProps<ServerDropdownProps>()\n\nconst emit = defineEmits<{\n /** Update a server variable for the selected server */\n (\n e: 'update:selectedServer',\n payload: ApiReferenceEvents['server:update:selected'],\n ): void\n (\n e: 'update:variable',\n payload: ApiReferenceEvents['server:update:variables'],\n ): void\n (e: 'update:servers'): void\n /** Update the open state of the server dropdown */\n (e: 'update:open', value: boolean): void\n}>()\n\nconst { translate } = useLocalization()\n\nconst requestServerOptions = computed(() =>\n servers.map((s) => ({\n id: s.url,\n // Prefer the server name (OpenAPI 3.2) as a friendly label, falling back to the URL\n label:\n s.name || s.url || translate('apiClient.serverDropdown.unknownServer'),\n })),\n)\n\nconst serverUrlWithoutTrailingSlash = computed(() => {\n if (server?.url?.endsWith('/')) {\n return server.url.slice(0, -1)\n }\n return server?.url || ''\n})\n</script>\n<template>\n <ScalarPopover\n class=\"max-h-[inherit] p-0 text-base\"\n focus\n :offset=\"0\"\n placement=\"bottom\"\n resize\n :target=\"target\"\n :teleport=\"`#${target}`\">\n <ScalarButton\n class=\"hover:bg-b-2 font-code text-c-2 h-auto gap-0.75 rounded border px-1.5 text-base whitespace-nowrap @3xl:ml-0.75\"\n variant=\"ghost\">\n <template v-if=\"server\">\n <span class=\"sr-only\">{{\n translate('apiClient.serverDropdown.server')\n }}</span>\n {{ serverUrlWithoutTrailingSlash }}\n </template>\n <template v-else>\n <span class=\"sr-only\">{{\n translate('apiClient.serverDropdown.addServer')\n }}</span>\n <ScalarIconPlus class=\"size-3\" />\n </template>\n </ScalarButton>\n\n <template #popover=\"{ close }\">\n <div\n class=\"custom-scroll flex max-h-[inherit] flex-col gap-1 p-1\"\n @click=\"close\">\n <!-- Request -->\n <ServerDropdownItem\n v-for=\"(serverOption, index) in requestServerOptions\"\n :key=\"serverOption.id\"\n :server=\"server\"\n :serverOption=\"serverOption\"\n type=\"request\"\n @update:selectedServer=\"\n emit('update:selectedServer', { url: serverOption.id, meta })\n \"\n @update:variable=\"\n (key, value) => emit('update:variable', { index, key, value, meta })\n \" />\n\n <!-- Add Server -->\n <template v-if=\"layout !== 'modal'\">\n <button\n class=\"text-xxs hover:bg-b-2 flex cursor-pointer items-center gap-1.5 rounded p-1.75\"\n type=\"button\"\n @click=\"emit('update:servers')\">\n <div class=\"flex items-center justify-center\">\n <ScalarIconPencilSimple class=\"size-4\" />\n </div>\n <span>{{\n translate('apiClient.serverDropdown.updateServers')\n }}</span>\n </button>\n </template>\n </div>\n </template>\n <template #backdrop=\"{ open }\">\n <!-- Emit the slot value back out the parent -->\n <ValueEmitter\n :value=\"open\"\n @change=\"(value) => emit('update:open', value)\"\n @unmount=\"emit('update:open', false)\" />\n\n <ScalarFloatingBackdrop class=\"inset-x-px rounded-none rounded-b-lg\" />\n </template>\n </ScalarPopover>\n</template>\n"],"mappings":";;;;;;;;;;;;;;CAME,MAAM;;;;;;;;;;;;;;;EAoCR,MAAM,OAAO;EAeb,MAAM,EAAE,cAAc,gBAAgB;EAEtC,MAAM,uBAAuB,eAC3B,QAAA,QAAQ,KAAK,OAAO;GAClB,IAAI,EAAE;GAEN,OACE,EAAE,QAAQ,EAAE,OAAO,UAAU,wCAAwC;EACzE,EAAE,CACJ;EAEA,MAAM,gCAAgC,eAAe;GACnD,IAAI,QAAA,QAAQ,KAAK,SAAS,GAAG,GAC3B,OAAO,QAAA,OAAO,IAAI,MAAM,GAAG,EAAE;GAE/B,OAAO,QAAA,QAAQ,OAAO;EACxB,CAAC;;uBAGC,YAoEgB,MAAA,aAAA,GAAA;IAnEd,OAAM;IACN,OAAA;IACC,QAAQ;IACT,WAAU;IACV,QAAA;IACC,QAAQ,QAAA;IACR,UAAQ,IAAM,QAAA;;IAkBJ,SAAO,SAgCV,EAhCc,YAAK,CACzB,mBA+BM,OAAA;KA9BJ,OAAM;KACL,SAAO;0BAER,mBAWM,UAAA,MAAA,WAV4B,qBAAA,QAAxB,cAAc,UAAK;yBAD7B,YAWM,4BAAA;MATH,KAAK,aAAa;MAClB,QAAQ,QAAA;MACM;MACf,MAAK;MACJ,4BAAqB,WAAe,KAAI,yBAAA;OAAA,KAAiC,aAAa;OAAE,MAAE,QAAA;MAAI,CAAA;MAG9F,sBAA+B,KAAK,UAAU,KAAI,mBAAA;OAAsB;OAAO;OAAK;OAAK,MAAE,QAAA;MAAI,CAAA;;;;;;;eAKlF,QAAA,WAAM,WAAA,UAAA,GACpB,mBAUS,UAAA;;KATP,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,gBAAA;QACZ,mBAEM,OAFN,YAEM,CADJ,YAAyC,MAAA,sBAAA,GAAA,EAAjB,OAAM,SAAQ,CAAA,CAAA,CAAA,GAExC,mBAES,QAAA,MAAA,gBADP,MAAA,SAAA,CAAS,CAAA,wCAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,GAAA,GAAA,UAAA,CAAA,CAAA;IAMR,UAAQ,SAKyB,EALrB,WAAI,CAEzB,YAG0C,sBAAA;KAFvC,OAAO;KACP,UAAM,OAAA,OAAA,OAAA,MAAG,UAAU,KAAI,eAAgB,KAAK;KAC5C,WAAO,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,eAAA,KAAA;4BAEhB,YAAuE,MAAA,sBAAA,GAAA,EAA/C,OAAM,uCAAsC,CAAA,CAAA,CAAA;2BA3CvD,CAff,YAee,MAAA,YAAA,GAAA;KAdb,OAAM;KACN,SAAQ;;4BAMG,CALK,QAAA,UAAA,UAAA,GAAhB,mBAKW,UAAA,EAAA,KAAA,EAAA,GAAA,CAJT,mBAES,QAFT,YAES,gBADP,MAAA,SAAA,CAAS,CAAA,iCAAA,CAAA,GAAA,CAAA,GAAA,gBACF,MACT,gBAAG,8BAAA,KAA6B,GAAA,CAAA,CAAA,GAAA,EAAA,MAAA,UAAA,GAElC,mBAKW,UAAA,EAAA,KAAA,EAAA,GAAA,CAJT,mBAES,QAFT,YAES,gBADP,MAAA,SAAA,CAAS,CAAA,oCAAA,CAAA,GAAA,CAAA,GAEX,YAAiC,MAAA,cAAA,GAAA,EAAjB,OAAM,SAAQ,CAAA,CAAA,GAAA,EAAA,EAAA,CAAA"}
1
+ {"version":3,"file":"ServerDropdown.vue.script.js","names":[],"sources":["../../../../src/v2/components/server/ServerDropdown.vue"],"sourcesContent":["<script lang=\"ts\">\n/**\n * ServerDropdown component\n * This component is used to display the server dropdown for the operation block\n */\nexport default {\n name: 'ServerDropdown',\n}\n\nexport type ServerDropdownProps = {\n /** The meta information for the server */\n meta: ServerMeta\n /** List of servers that are available for the operation/document level */\n servers: ServerObject[]\n /** Currently selected server */\n server: ServerObject | null\n /** The id of the target to use for the popover (e.g. address bar) */\n target: string\n /** Client layout */\n layout: ClientLayout\n}\n</script>\n<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarPopover } from '@scalar/components/popover'\nimport { ScalarIconPencilSimple, ScalarIconPlus } from '@scalar/icons'\nimport type {\n ApiReferenceEvents,\n ServerMeta,\n} from '@scalar/workspace-store/events'\nimport type { ServerObject } from '@scalar/workspace-store/schemas/v3.2/strict/openapi-document'\nimport { computed } from 'vue'\n\nimport ValueEmitter from '@/v2/components/layout/ValueEmitter.vue'\nimport { useLocalization } from '@/v2/features/localization'\nimport type { ClientLayout } from '@/v2/types/layout'\n\nimport ServerDropdownItem from './ServerDropdownItem.vue'\n\nconst { target, server, servers, meta } = defineProps<ServerDropdownProps>()\n\nconst emit = defineEmits<{\n /** Update a server variable for the selected server */\n (\n e: 'update:selectedServer',\n payload: ApiReferenceEvents['server:update:selected'],\n ): void\n (\n e: 'update:variable',\n payload: ApiReferenceEvents['server:update:variables'],\n ): void\n (e: 'update:servers'): void\n /** Update the open state of the server dropdown */\n (e: 'update:open', value: boolean): void\n}>()\n\nconst { translate } = useLocalization()\n\nconst requestServerOptions = computed(() =>\n servers.map((s) => ({\n id: s.url,\n // Prefer the server name (OpenAPI 3.2) as a friendly label, falling back to the URL\n label:\n s.name || s.url || translate('apiClient.serverDropdown.unknownServer'),\n })),\n)\n\nconst serverUrlWithoutTrailingSlash = computed(() => {\n if (server?.url?.endsWith('/')) {\n return server.url.slice(0, -1)\n }\n return server?.url || ''\n})\n</script>\n<template>\n <ScalarPopover\n class=\"max-h-[inherit] rounded-none rounded-b-lg border border-t-0 p-0 text-base inset-shadow-none\"\n focus\n :offset=\"0\"\n placement=\"bottom\"\n resize\n :target=\"target\"\n :teleport=\"`#${target}`\">\n <ScalarButton\n class=\"hover:bg-b-2 font-code text-c-2 h-auto gap-0.75 rounded border px-1.5 text-base whitespace-nowrap @3xl:ml-0.75\"\n variant=\"ghost\">\n <template v-if=\"server\">\n <span class=\"sr-only\">{{\n translate('apiClient.serverDropdown.server')\n }}</span>\n {{ serverUrlWithoutTrailingSlash }}\n </template>\n <template v-else>\n <span class=\"sr-only\">{{\n translate('apiClient.serverDropdown.addServer')\n }}</span>\n <ScalarIconPlus class=\"size-3\" />\n </template>\n </ScalarButton>\n\n <template #popover=\"{ close, open }\">\n <!-- Emit the slot value back out the parent -->\n <ValueEmitter\n :value=\"open\"\n @change=\"(value) => emit('update:open', value)\"\n @unmount=\"emit('update:open', false)\" />\n <div\n class=\"custom-scroll flex max-h-[inherit] flex-col gap-1 p-1\"\n @click=\"close\">\n <!-- Request -->\n <ServerDropdownItem\n v-for=\"(serverOption, index) in requestServerOptions\"\n :key=\"serverOption.id\"\n :server=\"server\"\n :serverOption=\"serverOption\"\n type=\"request\"\n @update:selectedServer=\"\n emit('update:selectedServer', { url: serverOption.id, meta })\n \"\n @update:variable=\"\n (key, value) => emit('update:variable', { index, key, value, meta })\n \" />\n\n <!-- Add Server -->\n <template v-if=\"layout !== 'modal'\">\n <button\n class=\"text-xxs hover:bg-b-2 flex cursor-pointer items-center gap-1.5 rounded p-1.75\"\n type=\"button\"\n @click=\"emit('update:servers')\">\n <div class=\"flex items-center justify-center\">\n <ScalarIconPencilSimple class=\"size-4\" />\n </div>\n <span>{{\n translate('apiClient.serverDropdown.updateServers')\n }}</span>\n </button>\n </template>\n </div>\n </template>\n </ScalarPopover>\n</template>\n"],"mappings":";;;;;;;;;;;;;CAME,MAAM;;;;;;;;;;;;;;;EAmCR,MAAM,OAAO;EAeb,MAAM,EAAE,cAAc,gBAAgB;EAEtC,MAAM,uBAAuB,eAC3B,QAAA,QAAQ,KAAK,OAAO;GAClB,IAAI,EAAE;GAEN,OACE,EAAE,QAAQ,EAAE,OAAO,UAAU,wCAAwC;EACzE,EAAE,CACJ;EAEA,MAAM,gCAAgC,eAAe;GACnD,IAAI,QAAA,QAAQ,KAAK,SAAS,GAAG,GAC3B,OAAO,QAAA,OAAO,IAAI,MAAM,GAAG,EAAE;GAE/B,OAAO,QAAA,QAAQ,OAAO;EACxB,CAAC;;uBAGC,YAgEgB,MAAA,aAAA,GAAA;IA/Dd,OAAM;IACN,OAAA;IACC,QAAQ;IACT,WAAU;IACV,QAAA;IACC,QAAQ,QAAA;IACR,UAAQ,IAAM,QAAA;;IAkBJ,SAAO,SAK0B,EALtB,OAAO,WAAI,CAE/B,YAG0C,sBAAA;KAFvC,OAAO;KACP,UAAM,OAAA,OAAA,OAAA,MAAG,UAAU,KAAI,eAAgB,KAAK;KAC5C,WAAO,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,eAAA,KAAA;4BAChB,mBA+BM,OAAA;KA9BJ,OAAM;KACL,SAAO;0BAER,mBAWM,UAAA,MAAA,WAV4B,qBAAA,QAAxB,cAAc,UAAK;yBAD7B,YAWM,4BAAA;MATH,KAAK,aAAa;MAClB,QAAQ,QAAA;MACM;MACf,MAAK;MACJ,4BAAqB,WAAe,KAAI,yBAAA;OAAA,KAAiC,aAAa;OAAE,MAAE,QAAA;MAAI,CAAA;MAG9F,sBAA+B,KAAK,UAAU,KAAI,mBAAA;OAAsB;OAAO;OAAK;OAAK,MAAE,QAAA;MAAI,CAAA;;;;;;;eAKlF,QAAA,WAAM,WAAA,UAAA,GACpB,mBAUS,UAAA;;KATP,OAAM;KACN,MAAK;KACJ,SAAK,OAAA,OAAA,OAAA,MAAA,WAAE,KAAI,gBAAA;QACZ,mBAEM,OAFN,YAEM,CADJ,YAAyC,MAAA,sBAAA,GAAA,EAAjB,OAAM,SAAQ,CAAA,CAAA,CAAA,GAExC,mBAES,QAAA,MAAA,gBADP,MAAA,SAAA,CAAS,CAAA,wCAAA,CAAA,GAAA,CAAA,CAAA,CAAA,KAAA,mBAAA,IAAA,IAAA,CAAA,GAAA,GAAA,UAAA,CAAA,CAAA;2BAnCJ,CAff,YAee,MAAA,YAAA,GAAA;KAdb,OAAM;KACN,SAAQ;;4BAMG,CALK,QAAA,UAAA,UAAA,GAAhB,mBAKW,UAAA,EAAA,KAAA,EAAA,GAAA,CAJT,mBAES,QAFT,YAES,gBADP,MAAA,SAAA,CAAS,CAAA,iCAAA,CAAA,GAAA,CAAA,GAAA,gBACF,MACT,gBAAG,8BAAA,KAA6B,GAAA,CAAA,CAAA,GAAA,EAAA,MAAA,UAAA,GAElC,mBAKW,UAAA,EAAA,KAAA,EAAA,GAAA,CAJT,mBAES,QAFT,YAES,gBADP,MAAA,SAAA,CAAS,CAAA,oCAAA,CAAA,GAAA,CAAA,GAEX,YAAiC,MAAA,cAAA,GAAA,EAAjB,OAAM,SAAQ,CAAA,CAAA,GAAA,EAAA,EAAA,CAAA"}
@@ -1,6 +1,6 @@
1
1
  //#region src/v2/constants.ts
2
2
  /** The version number taken from the package.json. Consumers can override at build time via define (e.g. OVERRIDE_PACKAGE_VERSION: JSON.stringify('1.2.3')). */
3
- var APP_VERSION = typeof OVERRIDE_PACKAGE_VERSION !== "undefined" ? OVERRIDE_PACKAGE_VERSION : "3.21.4";
3
+ var APP_VERSION = typeof OVERRIDE_PACKAGE_VERSION !== "undefined" ? OVERRIDE_PACKAGE_VERSION : "3.22.0";
4
4
  //#endregion
5
5
  export { APP_VERSION };
6
6
 
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentVariablesDropdown.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/features/environments/components/EnvironmentVariablesDropdown.vue"],"names":[],"mappings":"AA4TA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AAOnH,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAChD,iFAAiF;IACjF,oBAAoB,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC7D;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAC;AA+bF,QAAA,MAAM,YAAY;gCArRiB,IAAI,GAAG,MAAM;;;;;;;;;;;kFAyR9C,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
1
+ {"version":3,"file":"EnvironmentVariablesDropdown.vue.d.ts","sourceRoot":"","sources":["../../../../../src/v2/features/environments/components/EnvironmentVariablesDropdown.vue"],"names":[],"mappings":"AAyTA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2EAA2E,CAAA;AAOnH,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,CAAC,EAAE,kBAAkB,CAAA;IAChC,gBAAgB,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAA;IAChD,iFAAiF;IACjF,oBAAoB,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC7D;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAC;AAwbF,QAAA,MAAM,YAAY;gCA9QiB,IAAI,GAAG,MAAM;;;;;;;;;;;kFAkR9C,CAAC;wBACkB,OAAO,YAAY;AAAxC,wBAAyC"}
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentVariablesDropdown.vue.js","names":[],"sources":["../../../../../src/v2/features/environments/components/EnvironmentVariablesDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarTeleport } from '@scalar/components/teleport'\nimport { ScalarIconPlus } from '@scalar/icons'\nimport { POPULAR_CONTEXT_FUNCTION_KEYS } from '@scalar/workspace-store/request-example'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { onClickOutside } from '@vueuse/core'\nimport Fuse from 'fuse.js'\nimport { computed, onMounted, ref, watch, type CSSProperties } from 'vue'\n\nimport { useLocalization } from '@/v2/features/localization'\n\nconst {\n query,\n environment,\n dropdownPosition,\n contextFunctionItems = [],\n listboxId,\n} = defineProps<{\n query: string\n environment?: XScalarEnvironment\n dropdownPosition?: { left: number; top: number }\n /** Runtime placeholders such as `{{$guid}}`, shown with environment variables */\n contextFunctionItems?: { key: string; description: string }[]\n /**\n * Id for the `role=\"listbox\"` element. When set, each option also receives a\n * stable id so the owning combobox input can reference the active option via\n * `aria-activedescendant` (W3C combobox pattern).\n */\n listboxId?: string\n}>()\n\nconst emit = defineEmits<{\n (e: 'select', variable: string): void\n (e: 'redirect'): void\n /**\n * Fired when the user dismisses the panel by clicking outside. The owning\n * combobox needs this to clear its `aria-expanded`/`aria-controls` state,\n * which would otherwise keep pointing at a listbox that is no longer mounted.\n */\n (e: 'close'): void\n}>()\n\nconst { translate } = useLocalization()\n\ntype DropdownRow =\n | { kind: 'env'; key: string; secondary: string }\n | { kind: 'context'; key: string; secondary: string }\n\nconst isOpen = ref(true)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst selectedVariableIndex = ref(0)\n\nconst redirectToEnvironment = () => {\n emit('redirect')\n isOpen.value = false\n // The panel is gone, so tell the combobox to drop its aria-expanded /\n // aria-controls — otherwise they keep pointing at a dismissed listbox.\n emit('close')\n}\n\n/** Normalize the variables to have a name and value */\nconst normalizedVariables = computed(() =>\n (environment?.variables ?? []).map((v) => ({\n key: v.name,\n value: typeof v.value === 'string' ? v.value : v.value.default,\n })),\n)\n\nconst contextRows = computed((): DropdownRow[] =>\n contextFunctionItems.map((item) => ({\n kind: 'context',\n key: item.key,\n secondary: item.description,\n })),\n)\n\nconst envRows = computed((): DropdownRow[] =>\n normalizedVariables.value\n .filter(({ key, value }) => key !== '' || value !== '')\n .map(({ key, value }) => ({\n kind: 'env' as const,\n key,\n secondary: value,\n })),\n)\n\ntype FuseRow = DropdownRow & { fuseText: string }\n\nconst envFuseSource = computed((): FuseRow[] =>\n envRows.value.map((row) => ({\n ...row,\n fuseText: `${row.key} ${row.secondary}`,\n })),\n)\n\nconst contextFuseSource = computed((): FuseRow[] =>\n contextRows.value.map((row) => ({\n ...row,\n fuseText: `${row.key} ${row.secondary}`,\n })),\n)\n\nconst fuseEnv = computed(\n () =>\n new Fuse(envFuseSource.value, {\n keys: ['fuseText'],\n threshold: 0.35,\n }),\n)\n\nconst fuseContext = computed(\n () =>\n new Fuse(contextFuseSource.value, {\n keys: ['fuseText'],\n threshold: 0.35,\n }),\n)\n\nconst popularContextRows = computed((): DropdownRow[] => {\n const byKey = new Map(contextFunctionItems.map((c) => [c.key, c]))\n return POPULAR_CONTEXT_FUNCTION_KEYS.flatMap((key) => {\n const item = byKey.get(key)\n return item\n ? [\n {\n kind: 'context' as const,\n key: item.key,\n secondary: item.description,\n },\n ]\n : []\n })\n})\n\nconst DROPDOWN_LIMIT = 12\n\nconst filteredVariables = computed((): DropdownRow[] => {\n if (!query.trim()) {\n const envSlice = envRows.value.slice(-4)\n return [...envSlice, ...popularContextRows.value]\n }\n\n const q = query.trim()\n const envMatches = fuseEnv.value\n .search(q, { limit: DROPDOWN_LIMIT })\n .map((res) => {\n const { kind, key, secondary } = res.item\n return { kind, key, secondary }\n })\n\n const remaining = DROPDOWN_LIMIT - envMatches.length\n const contextMatches =\n remaining > 0\n ? fuseContext.value.search(q, { limit: remaining }).map((res) => {\n const { kind, key, secondary } = res.item\n return { kind, key, secondary }\n })\n : []\n\n return [...envMatches, ...contextMatches]\n})\n\nconst optionId = (index: number): string | undefined =>\n listboxId ? `${listboxId}-option-${index}` : undefined\n\n/**\n * Id of the currently highlighted option, for the combobox's\n * `aria-activedescendant`. Undefined when there is no list to point at.\n */\nconst activeOptionId = computed((): string | undefined =>\n filteredVariables.value.length\n ? optionId(selectedVariableIndex.value)\n : undefined,\n)\n\nconst selectVariable = (variableKey: string): void => {\n emit('select', variableKey)\n}\n\n// Narrowing the query shrinks the list; keep the highlight in range so both the\n// visible selection and `aria-activedescendant` never reference a dropped option.\nwatch(\n () => filteredVariables.value.length,\n (length) => {\n if (selectedVariableIndex.value > length - 1) {\n selectedVariableIndex.value = Math.max(0, length - 1)\n }\n },\n)\n\nconst handleArrowKey = (direction: 'up' | 'down') => {\n const offset = direction === 'up' ? -1 : 1\n const length = filteredVariables.value.length\n\n if (length === 0) {\n return\n }\n\n selectedVariableIndex.value =\n (selectedVariableIndex.value + offset + length) % length\n}\n\nconst handleSelect = () => {\n if (selectedVariableIndex.value >= 0) {\n const selectedVariable =\n filteredVariables.value[selectedVariableIndex.value]\n if (selectedVariable) {\n selectVariable(selectedVariable.key)\n }\n }\n}\n\ndefineExpose({\n handleArrowKey,\n handleSelect,\n activeOptionId,\n})\n\nonMounted(() => {\n // Reset selected index to the first item when dropdown opens\n selectedVariableIndex.value = 0\n})\n\nconst dropdownStyle = computed<CSSProperties>(() => {\n return {\n left: (dropdownPosition?.left ?? 0) + 'px',\n // Add a 5px offset from the editor\n top: (dropdownPosition?.top ?? 0) + 5 + 'px',\n }\n})\n\nonClickOutside(\n dropdownRef,\n () => {\n isOpen.value = false\n emit('close')\n },\n { ignore: [dropdownRef] },\n)\n</script>\n<template>\n <ScalarTeleport\n v-if=\"isOpen\"\n class=\"scalar-client\">\n <div\n ref=\"dropdownRef\"\n class=\"custom-scroll z-context fixed top-0 left-0 flex max-h-[60svh] w-56 flex-col rounded border p-0.75\"\n :style=\"dropdownStyle\"\n @mousedown.prevent>\n <!--\n Always rendered (even with no matches) so the combobox's `aria-controls`\n always resolves to a real listbox; an empty list simply has no options.\n -->\n <ul\n :id=\"listboxId\"\n :aria-label=\"\n translate(\n 'apiClient.environmentVariablesDropdown.variableSuggestions',\n )\n \"\n class=\"gap-1/2 flex flex-col\"\n role=\"listbox\">\n <template\n v-for=\"(item, index) in filteredVariables\"\n :key=\"`${item.kind}-${item.key}`\">\n <li\n :id=\"optionId(index)\"\n :aria-selected=\"index === selectedVariableIndex\"\n class=\"font-code text-xxs hover:bg-b-3 flex h-8 cursor-pointer items-center justify-between gap-1.5 rounded p-1.5 transition-colors duration-150\"\n :class=\"{ 'bg-b-3': index === selectedVariableIndex }\"\n role=\"option\"\n @click=\"selectVariable(item.key)\">\n <div class=\"flex items-center gap-2 whitespace-nowrap\">\n <span\n v-if=\"item.kind === 'env'\"\n class=\"h-2.25 w-2.25 min-w-2.25 rounded-full\"\n :style=\"{\n backgroundColor: environment?.color,\n }\" />\n <span\n v-else\n class=\"text-c-3 bg-b-3 flex h-4.5 min-w-4.5 items-center justify-center rounded px-0.5 font-sans text-[9px] font-semibold\">\n fn\n </span>\n {{ item.key }}\n </div>\n <span\n class=\"max-w-[9rem] overflow-hidden text-right text-ellipsis whitespace-nowrap\">\n {{ item.secondary }}\n </span>\n </li>\n </template>\n </ul>\n <ScalarButton\n v-if=\"!filteredVariables.length\"\n class=\"font-code text-xxs bg-b-inherit hover:bg-b-3 flex h-8 w-full justify-start gap-2 px-1.5 transition-colors duration-150\"\n variant=\"outlined\"\n @click=\"redirectToEnvironment\">\n <ScalarIconPlus class=\"size-3\" />{{\n translate('apiClient.environmentVariablesDropdown.addVariable')\n }}\n </ScalarButton>\n <!-- Backdrop for the dropdown -->\n <div\n class=\"bg-b-1 brightness-lifted absolute inset-0 -z-1 rounded shadow-lg\" />\n </div>\n </ScalarTeleport>\n</template>\n"],"mappings":""}
1
+ {"version":3,"file":"EnvironmentVariablesDropdown.vue.js","names":[],"sources":["../../../../../src/v2/features/environments/components/EnvironmentVariablesDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarTeleport } from '@scalar/components/teleport'\nimport { ScalarIconPlus } from '@scalar/icons'\nimport { POPULAR_CONTEXT_FUNCTION_KEYS } from '@scalar/workspace-store/request-example'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { onClickOutside } from '@vueuse/core'\nimport Fuse from 'fuse.js'\nimport { computed, onMounted, ref, watch, type CSSProperties } from 'vue'\n\nimport { useLocalization } from '@/v2/features/localization'\n\nconst {\n query,\n environment,\n dropdownPosition,\n contextFunctionItems = [],\n listboxId,\n} = defineProps<{\n query: string\n environment?: XScalarEnvironment\n dropdownPosition?: { left: number; top: number }\n /** Runtime placeholders such as `{{$guid}}`, shown with environment variables */\n contextFunctionItems?: { key: string; description: string }[]\n /**\n * Id for the `role=\"listbox\"` element. When set, each option also receives a\n * stable id so the owning combobox input can reference the active option via\n * `aria-activedescendant` (W3C combobox pattern).\n */\n listboxId?: string\n}>()\n\nconst emit = defineEmits<{\n (e: 'select', variable: string): void\n (e: 'redirect'): void\n /**\n * Fired when the user dismisses the panel by clicking outside. The owning\n * combobox needs this to clear its `aria-expanded`/`aria-controls` state,\n * which would otherwise keep pointing at a listbox that is no longer mounted.\n */\n (e: 'close'): void\n}>()\n\nconst { translate } = useLocalization()\n\ntype DropdownRow =\n | { kind: 'env'; key: string; secondary: string }\n | { kind: 'context'; key: string; secondary: string }\n\nconst isOpen = ref(true)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst selectedVariableIndex = ref(0)\n\nconst redirectToEnvironment = () => {\n emit('redirect')\n isOpen.value = false\n // The panel is gone, so tell the combobox to drop its aria-expanded /\n // aria-controls — otherwise they keep pointing at a dismissed listbox.\n emit('close')\n}\n\n/** Normalize the variables to have a name and value */\nconst normalizedVariables = computed(() =>\n (environment?.variables ?? []).map((v) => ({\n key: v.name,\n value: typeof v.value === 'string' ? v.value : v.value.default,\n })),\n)\n\nconst contextRows = computed((): DropdownRow[] =>\n contextFunctionItems.map((item) => ({\n kind: 'context',\n key: item.key,\n secondary: item.description,\n })),\n)\n\nconst envRows = computed((): DropdownRow[] =>\n normalizedVariables.value\n .filter(({ key, value }) => key !== '' || value !== '')\n .map(({ key, value }) => ({\n kind: 'env' as const,\n key,\n secondary: value,\n })),\n)\n\ntype FuseRow = DropdownRow & { fuseText: string }\n\nconst envFuseSource = computed((): FuseRow[] =>\n envRows.value.map((row) => ({\n ...row,\n fuseText: `${row.key} ${row.secondary}`,\n })),\n)\n\nconst contextFuseSource = computed((): FuseRow[] =>\n contextRows.value.map((row) => ({\n ...row,\n fuseText: `${row.key} ${row.secondary}`,\n })),\n)\n\nconst fuseEnv = computed(\n () =>\n new Fuse(envFuseSource.value, {\n keys: ['fuseText'],\n threshold: 0.35,\n }),\n)\n\nconst fuseContext = computed(\n () =>\n new Fuse(contextFuseSource.value, {\n keys: ['fuseText'],\n threshold: 0.35,\n }),\n)\n\nconst popularContextRows = computed((): DropdownRow[] => {\n const byKey = new Map(contextFunctionItems.map((c) => [c.key, c]))\n return POPULAR_CONTEXT_FUNCTION_KEYS.flatMap((key) => {\n const item = byKey.get(key)\n return item\n ? [\n {\n kind: 'context' as const,\n key: item.key,\n secondary: item.description,\n },\n ]\n : []\n })\n})\n\nconst DROPDOWN_LIMIT = 12\n\nconst filteredVariables = computed((): DropdownRow[] => {\n if (!query.trim()) {\n const envSlice = envRows.value.slice(-4)\n return [...envSlice, ...popularContextRows.value]\n }\n\n const q = query.trim()\n const envMatches = fuseEnv.value\n .search(q, { limit: DROPDOWN_LIMIT })\n .map((res) => {\n const { kind, key, secondary } = res.item\n return { kind, key, secondary }\n })\n\n const remaining = DROPDOWN_LIMIT - envMatches.length\n const contextMatches =\n remaining > 0\n ? fuseContext.value.search(q, { limit: remaining }).map((res) => {\n const { kind, key, secondary } = res.item\n return { kind, key, secondary }\n })\n : []\n\n return [...envMatches, ...contextMatches]\n})\n\nconst optionId = (index: number): string | undefined =>\n listboxId ? `${listboxId}-option-${index}` : undefined\n\n/**\n * Id of the currently highlighted option, for the combobox's\n * `aria-activedescendant`. Undefined when there is no list to point at.\n */\nconst activeOptionId = computed((): string | undefined =>\n filteredVariables.value.length\n ? optionId(selectedVariableIndex.value)\n : undefined,\n)\n\nconst selectVariable = (variableKey: string): void => {\n emit('select', variableKey)\n}\n\n// Narrowing the query shrinks the list; keep the highlight in range so both the\n// visible selection and `aria-activedescendant` never reference a dropped option.\nwatch(\n () => filteredVariables.value.length,\n (length) => {\n if (selectedVariableIndex.value > length - 1) {\n selectedVariableIndex.value = Math.max(0, length - 1)\n }\n },\n)\n\nconst handleArrowKey = (direction: 'up' | 'down') => {\n const offset = direction === 'up' ? -1 : 1\n const length = filteredVariables.value.length\n\n if (length === 0) {\n return\n }\n\n selectedVariableIndex.value =\n (selectedVariableIndex.value + offset + length) % length\n}\n\nconst handleSelect = () => {\n if (selectedVariableIndex.value >= 0) {\n const selectedVariable =\n filteredVariables.value[selectedVariableIndex.value]\n if (selectedVariable) {\n selectVariable(selectedVariable.key)\n }\n }\n}\n\ndefineExpose({\n handleArrowKey,\n handleSelect,\n activeOptionId,\n})\n\nonMounted(() => {\n // Reset selected index to the first item when dropdown opens\n selectedVariableIndex.value = 0\n})\n\nconst dropdownStyle = computed<CSSProperties>(() => {\n return {\n left: (dropdownPosition?.left ?? 0) + 'px',\n // Add a 5px offset from the editor\n top: (dropdownPosition?.top ?? 0) + 5 + 'px',\n }\n})\n\nonClickOutside(\n dropdownRef,\n () => {\n isOpen.value = false\n emit('close')\n },\n { ignore: [dropdownRef] },\n)\n</script>\n<template>\n <ScalarTeleport\n v-if=\"isOpen\"\n class=\"scalar-client\">\n <div\n ref=\"dropdownRef\"\n class=\"custom-scroll z-context bg-b-1 dark:bg-b-1.5 fixed top-0 left-0 flex max-h-[60svh] w-56 flex-col rounded border p-0.75 shadow-lg\"\n :style=\"dropdownStyle\"\n @mousedown.prevent>\n <!--\n Always rendered (even with no matches) so the combobox's `aria-controls`\n always resolves to a real listbox; an empty list simply has no options.\n -->\n <ul\n :id=\"listboxId\"\n :aria-label=\"\n translate(\n 'apiClient.environmentVariablesDropdown.variableSuggestions',\n )\n \"\n class=\"gap-1/2 flex flex-col\"\n role=\"listbox\">\n <template\n v-for=\"(item, index) in filteredVariables\"\n :key=\"`${item.kind}-${item.key}`\">\n <li\n :id=\"optionId(index)\"\n :aria-selected=\"index === selectedVariableIndex\"\n class=\"font-code text-xxs hover:bg-b-3 flex h-8 cursor-pointer items-center justify-between gap-1.5 rounded p-1.5 transition-colors duration-150\"\n :class=\"{ 'bg-b-3': index === selectedVariableIndex }\"\n role=\"option\"\n @click=\"selectVariable(item.key)\">\n <div class=\"flex items-center gap-2 whitespace-nowrap\">\n <span\n v-if=\"item.kind === 'env'\"\n class=\"h-2.25 w-2.25 min-w-2.25 rounded-full\"\n :style=\"{\n backgroundColor: environment?.color,\n }\" />\n <span\n v-else\n class=\"text-c-3 bg-b-3 flex h-4.5 min-w-4.5 items-center justify-center rounded px-0.5 font-sans text-[9px] font-semibold\">\n fn\n </span>\n {{ item.key }}\n </div>\n <span\n class=\"max-w-[9rem] overflow-hidden text-right text-ellipsis whitespace-nowrap\">\n {{ item.secondary }}\n </span>\n </li>\n </template>\n </ul>\n <ScalarButton\n v-if=\"!filteredVariables.length\"\n class=\"font-code text-xxs bg-b-inherit hover:bg-b-3 flex h-8 w-full justify-start gap-2 px-1.5 transition-colors duration-150\"\n variant=\"outlined\"\n @click=\"redirectToEnvironment\">\n <ScalarIconPlus class=\"size-3\" />{{\n translate('apiClient.environmentVariablesDropdown.addVariable')\n }}\n </ScalarButton>\n </div>\n </ScalarTeleport>\n</template>\n"],"mappings":""}
@@ -159,40 +159,36 @@ var EnvironmentVariablesDropdown_vue_vue_type_script_setup_true_lang_default = /
159
159
  default: withCtx(() => [createElementVNode("div", {
160
160
  ref_key: "dropdownRef",
161
161
  ref: dropdownRef,
162
- class: "custom-scroll z-context fixed top-0 left-0 flex max-h-[60svh] w-56 flex-col rounded border p-0.75",
162
+ class: "custom-scroll z-context bg-b-1 dark:bg-b-1.5 fixed top-0 left-0 flex max-h-[60svh] w-56 flex-col rounded border p-0.75 shadow-lg",
163
163
  style: normalizeStyle(dropdownStyle.value),
164
164
  onMousedown: _cache[0] || (_cache[0] = withModifiers(() => {}, ["prevent"]))
165
- }, [
166
- createElementVNode("ul", {
167
- id: __props.listboxId,
168
- "aria-label": unref(translate)("apiClient.environmentVariablesDropdown.variableSuggestions"),
169
- class: "gap-1/2 flex flex-col",
170
- role: "listbox"
171
- }, [(openBlock(true), createElementBlock(Fragment, null, renderList(filteredVariables.value, (item, index) => {
172
- return openBlock(), createElementBlock("li", {
173
- key: `${item.kind}-${item.key}`,
174
- id: optionId(index),
175
- "aria-selected": index === selectedVariableIndex.value,
176
- class: normalizeClass(["font-code text-xxs hover:bg-b-3 flex h-8 cursor-pointer items-center justify-between gap-1.5 rounded p-1.5 transition-colors duration-150", { "bg-b-3": index === selectedVariableIndex.value }]),
177
- role: "option",
178
- onClick: ($event) => selectVariable(item.key)
179
- }, [createElementVNode("div", _hoisted_3, [item.kind === "env" ? (openBlock(), createElementBlock("span", {
180
- key: 0,
181
- class: "h-2.25 w-2.25 min-w-2.25 rounded-full",
182
- style: normalizeStyle({ backgroundColor: __props.environment?.color })
183
- }, null, 4)) : (openBlock(), createElementBlock("span", _hoisted_4, " fn ")), createTextVNode(" " + toDisplayString(item.key), 1)]), createElementVNode("span", _hoisted_5, toDisplayString(item.secondary), 1)], 10, _hoisted_2);
184
- }), 128))], 8, _hoisted_1),
185
- !filteredVariables.value.length ? (openBlock(), createBlock(unref(ScalarButton), {
165
+ }, [createElementVNode("ul", {
166
+ id: __props.listboxId,
167
+ "aria-label": unref(translate)("apiClient.environmentVariablesDropdown.variableSuggestions"),
168
+ class: "gap-1/2 flex flex-col",
169
+ role: "listbox"
170
+ }, [(openBlock(true), createElementBlock(Fragment, null, renderList(filteredVariables.value, (item, index) => {
171
+ return openBlock(), createElementBlock("li", {
172
+ key: `${item.kind}-${item.key}`,
173
+ id: optionId(index),
174
+ "aria-selected": index === selectedVariableIndex.value,
175
+ class: normalizeClass(["font-code text-xxs hover:bg-b-3 flex h-8 cursor-pointer items-center justify-between gap-1.5 rounded p-1.5 transition-colors duration-150", { "bg-b-3": index === selectedVariableIndex.value }]),
176
+ role: "option",
177
+ onClick: ($event) => selectVariable(item.key)
178
+ }, [createElementVNode("div", _hoisted_3, [item.kind === "env" ? (openBlock(), createElementBlock("span", {
186
179
  key: 0,
187
- class: "font-code text-xxs bg-b-inherit hover:bg-b-3 flex h-8 w-full justify-start gap-2 px-1.5 transition-colors duration-150",
188
- variant: "outlined",
189
- onClick: redirectToEnvironment
190
- }, {
191
- default: withCtx(() => [createVNode(unref(ScalarIconPlus), { class: "size-3" }), createTextVNode(toDisplayString(unref(translate)("apiClient.environmentVariablesDropdown.addVariable")), 1)]),
192
- _: 1
193
- })) : createCommentVNode("", true),
194
- _cache[1] || (_cache[1] = createElementVNode("div", { class: "bg-b-1 brightness-lifted absolute inset-0 -z-1 rounded shadow-lg" }, null, -1))
195
- ], 36)]),
180
+ class: "h-2.25 w-2.25 min-w-2.25 rounded-full",
181
+ style: normalizeStyle({ backgroundColor: __props.environment?.color })
182
+ }, null, 4)) : (openBlock(), createElementBlock("span", _hoisted_4, " fn ")), createTextVNode(" " + toDisplayString(item.key), 1)]), createElementVNode("span", _hoisted_5, toDisplayString(item.secondary), 1)], 10, _hoisted_2);
183
+ }), 128))], 8, _hoisted_1), !filteredVariables.value.length ? (openBlock(), createBlock(unref(ScalarButton), {
184
+ key: 0,
185
+ class: "font-code text-xxs bg-b-inherit hover:bg-b-3 flex h-8 w-full justify-start gap-2 px-1.5 transition-colors duration-150",
186
+ variant: "outlined",
187
+ onClick: redirectToEnvironment
188
+ }, {
189
+ default: withCtx(() => [createVNode(unref(ScalarIconPlus), { class: "size-3" }), createTextVNode(toDisplayString(unref(translate)("apiClient.environmentVariablesDropdown.addVariable")), 1)]),
190
+ _: 1
191
+ })) : createCommentVNode("", true)], 36)]),
196
192
  _: 1
197
193
  })) : createCommentVNode("", true);
198
194
  };
@@ -1 +1 @@
1
- {"version":3,"file":"EnvironmentVariablesDropdown.vue.script.js","names":[],"sources":["../../../../../src/v2/features/environments/components/EnvironmentVariablesDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarTeleport } from '@scalar/components/teleport'\nimport { ScalarIconPlus } from '@scalar/icons'\nimport { POPULAR_CONTEXT_FUNCTION_KEYS } from '@scalar/workspace-store/request-example'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { onClickOutside } from '@vueuse/core'\nimport Fuse from 'fuse.js'\nimport { computed, onMounted, ref, watch, type CSSProperties } from 'vue'\n\nimport { useLocalization } from '@/v2/features/localization'\n\nconst {\n query,\n environment,\n dropdownPosition,\n contextFunctionItems = [],\n listboxId,\n} = defineProps<{\n query: string\n environment?: XScalarEnvironment\n dropdownPosition?: { left: number; top: number }\n /** Runtime placeholders such as `{{$guid}}`, shown with environment variables */\n contextFunctionItems?: { key: string; description: string }[]\n /**\n * Id for the `role=\"listbox\"` element. When set, each option also receives a\n * stable id so the owning combobox input can reference the active option via\n * `aria-activedescendant` (W3C combobox pattern).\n */\n listboxId?: string\n}>()\n\nconst emit = defineEmits<{\n (e: 'select', variable: string): void\n (e: 'redirect'): void\n /**\n * Fired when the user dismisses the panel by clicking outside. The owning\n * combobox needs this to clear its `aria-expanded`/`aria-controls` state,\n * which would otherwise keep pointing at a listbox that is no longer mounted.\n */\n (e: 'close'): void\n}>()\n\nconst { translate } = useLocalization()\n\ntype DropdownRow =\n | { kind: 'env'; key: string; secondary: string }\n | { kind: 'context'; key: string; secondary: string }\n\nconst isOpen = ref(true)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst selectedVariableIndex = ref(0)\n\nconst redirectToEnvironment = () => {\n emit('redirect')\n isOpen.value = false\n // The panel is gone, so tell the combobox to drop its aria-expanded /\n // aria-controls — otherwise they keep pointing at a dismissed listbox.\n emit('close')\n}\n\n/** Normalize the variables to have a name and value */\nconst normalizedVariables = computed(() =>\n (environment?.variables ?? []).map((v) => ({\n key: v.name,\n value: typeof v.value === 'string' ? v.value : v.value.default,\n })),\n)\n\nconst contextRows = computed((): DropdownRow[] =>\n contextFunctionItems.map((item) => ({\n kind: 'context',\n key: item.key,\n secondary: item.description,\n })),\n)\n\nconst envRows = computed((): DropdownRow[] =>\n normalizedVariables.value\n .filter(({ key, value }) => key !== '' || value !== '')\n .map(({ key, value }) => ({\n kind: 'env' as const,\n key,\n secondary: value,\n })),\n)\n\ntype FuseRow = DropdownRow & { fuseText: string }\n\nconst envFuseSource = computed((): FuseRow[] =>\n envRows.value.map((row) => ({\n ...row,\n fuseText: `${row.key} ${row.secondary}`,\n })),\n)\n\nconst contextFuseSource = computed((): FuseRow[] =>\n contextRows.value.map((row) => ({\n ...row,\n fuseText: `${row.key} ${row.secondary}`,\n })),\n)\n\nconst fuseEnv = computed(\n () =>\n new Fuse(envFuseSource.value, {\n keys: ['fuseText'],\n threshold: 0.35,\n }),\n)\n\nconst fuseContext = computed(\n () =>\n new Fuse(contextFuseSource.value, {\n keys: ['fuseText'],\n threshold: 0.35,\n }),\n)\n\nconst popularContextRows = computed((): DropdownRow[] => {\n const byKey = new Map(contextFunctionItems.map((c) => [c.key, c]))\n return POPULAR_CONTEXT_FUNCTION_KEYS.flatMap((key) => {\n const item = byKey.get(key)\n return item\n ? [\n {\n kind: 'context' as const,\n key: item.key,\n secondary: item.description,\n },\n ]\n : []\n })\n})\n\nconst DROPDOWN_LIMIT = 12\n\nconst filteredVariables = computed((): DropdownRow[] => {\n if (!query.trim()) {\n const envSlice = envRows.value.slice(-4)\n return [...envSlice, ...popularContextRows.value]\n }\n\n const q = query.trim()\n const envMatches = fuseEnv.value\n .search(q, { limit: DROPDOWN_LIMIT })\n .map((res) => {\n const { kind, key, secondary } = res.item\n return { kind, key, secondary }\n })\n\n const remaining = DROPDOWN_LIMIT - envMatches.length\n const contextMatches =\n remaining > 0\n ? fuseContext.value.search(q, { limit: remaining }).map((res) => {\n const { kind, key, secondary } = res.item\n return { kind, key, secondary }\n })\n : []\n\n return [...envMatches, ...contextMatches]\n})\n\nconst optionId = (index: number): string | undefined =>\n listboxId ? `${listboxId}-option-${index}` : undefined\n\n/**\n * Id of the currently highlighted option, for the combobox's\n * `aria-activedescendant`. Undefined when there is no list to point at.\n */\nconst activeOptionId = computed((): string | undefined =>\n filteredVariables.value.length\n ? optionId(selectedVariableIndex.value)\n : undefined,\n)\n\nconst selectVariable = (variableKey: string): void => {\n emit('select', variableKey)\n}\n\n// Narrowing the query shrinks the list; keep the highlight in range so both the\n// visible selection and `aria-activedescendant` never reference a dropped option.\nwatch(\n () => filteredVariables.value.length,\n (length) => {\n if (selectedVariableIndex.value > length - 1) {\n selectedVariableIndex.value = Math.max(0, length - 1)\n }\n },\n)\n\nconst handleArrowKey = (direction: 'up' | 'down') => {\n const offset = direction === 'up' ? -1 : 1\n const length = filteredVariables.value.length\n\n if (length === 0) {\n return\n }\n\n selectedVariableIndex.value =\n (selectedVariableIndex.value + offset + length) % length\n}\n\nconst handleSelect = () => {\n if (selectedVariableIndex.value >= 0) {\n const selectedVariable =\n filteredVariables.value[selectedVariableIndex.value]\n if (selectedVariable) {\n selectVariable(selectedVariable.key)\n }\n }\n}\n\ndefineExpose({\n handleArrowKey,\n handleSelect,\n activeOptionId,\n})\n\nonMounted(() => {\n // Reset selected index to the first item when dropdown opens\n selectedVariableIndex.value = 0\n})\n\nconst dropdownStyle = computed<CSSProperties>(() => {\n return {\n left: (dropdownPosition?.left ?? 0) + 'px',\n // Add a 5px offset from the editor\n top: (dropdownPosition?.top ?? 0) + 5 + 'px',\n }\n})\n\nonClickOutside(\n dropdownRef,\n () => {\n isOpen.value = false\n emit('close')\n },\n { ignore: [dropdownRef] },\n)\n</script>\n<template>\n <ScalarTeleport\n v-if=\"isOpen\"\n class=\"scalar-client\">\n <div\n ref=\"dropdownRef\"\n class=\"custom-scroll z-context fixed top-0 left-0 flex max-h-[60svh] w-56 flex-col rounded border p-0.75\"\n :style=\"dropdownStyle\"\n @mousedown.prevent>\n <!--\n Always rendered (even with no matches) so the combobox's `aria-controls`\n always resolves to a real listbox; an empty list simply has no options.\n -->\n <ul\n :id=\"listboxId\"\n :aria-label=\"\n translate(\n 'apiClient.environmentVariablesDropdown.variableSuggestions',\n )\n \"\n class=\"gap-1/2 flex flex-col\"\n role=\"listbox\">\n <template\n v-for=\"(item, index) in filteredVariables\"\n :key=\"`${item.kind}-${item.key}`\">\n <li\n :id=\"optionId(index)\"\n :aria-selected=\"index === selectedVariableIndex\"\n class=\"font-code text-xxs hover:bg-b-3 flex h-8 cursor-pointer items-center justify-between gap-1.5 rounded p-1.5 transition-colors duration-150\"\n :class=\"{ 'bg-b-3': index === selectedVariableIndex }\"\n role=\"option\"\n @click=\"selectVariable(item.key)\">\n <div class=\"flex items-center gap-2 whitespace-nowrap\">\n <span\n v-if=\"item.kind === 'env'\"\n class=\"h-2.25 w-2.25 min-w-2.25 rounded-full\"\n :style=\"{\n backgroundColor: environment?.color,\n }\" />\n <span\n v-else\n class=\"text-c-3 bg-b-3 flex h-4.5 min-w-4.5 items-center justify-center rounded px-0.5 font-sans text-[9px] font-semibold\">\n fn\n </span>\n {{ item.key }}\n </div>\n <span\n class=\"max-w-[9rem] overflow-hidden text-right text-ellipsis whitespace-nowrap\">\n {{ item.secondary }}\n </span>\n </li>\n </template>\n </ul>\n <ScalarButton\n v-if=\"!filteredVariables.length\"\n class=\"font-code text-xxs bg-b-inherit hover:bg-b-3 flex h-8 w-full justify-start gap-2 px-1.5 transition-colors duration-150\"\n variant=\"outlined\"\n @click=\"redirectToEnvironment\">\n <ScalarIconPlus class=\"size-3\" />{{\n translate('apiClient.environmentVariablesDropdown.addVariable')\n }}\n </ScalarButton>\n <!-- Backdrop for the dropdown -->\n <div\n class=\"bg-b-1 brightness-lifted absolute inset-0 -z-1 rounded shadow-lg\" />\n </div>\n </ScalarTeleport>\n</template>\n"],"mappings":"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"}
1
+ {"version":3,"file":"EnvironmentVariablesDropdown.vue.script.js","names":[],"sources":["../../../../../src/v2/features/environments/components/EnvironmentVariablesDropdown.vue"],"sourcesContent":["<script setup lang=\"ts\">\nimport { ScalarButton } from '@scalar/components/button'\nimport { ScalarTeleport } from '@scalar/components/teleport'\nimport { ScalarIconPlus } from '@scalar/icons'\nimport { POPULAR_CONTEXT_FUNCTION_KEYS } from '@scalar/workspace-store/request-example'\nimport type { XScalarEnvironment } from '@scalar/workspace-store/schemas/extensions/document/x-scalar-environments'\nimport { onClickOutside } from '@vueuse/core'\nimport Fuse from 'fuse.js'\nimport { computed, onMounted, ref, watch, type CSSProperties } from 'vue'\n\nimport { useLocalization } from '@/v2/features/localization'\n\nconst {\n query,\n environment,\n dropdownPosition,\n contextFunctionItems = [],\n listboxId,\n} = defineProps<{\n query: string\n environment?: XScalarEnvironment\n dropdownPosition?: { left: number; top: number }\n /** Runtime placeholders such as `{{$guid}}`, shown with environment variables */\n contextFunctionItems?: { key: string; description: string }[]\n /**\n * Id for the `role=\"listbox\"` element. When set, each option also receives a\n * stable id so the owning combobox input can reference the active option via\n * `aria-activedescendant` (W3C combobox pattern).\n */\n listboxId?: string\n}>()\n\nconst emit = defineEmits<{\n (e: 'select', variable: string): void\n (e: 'redirect'): void\n /**\n * Fired when the user dismisses the panel by clicking outside. The owning\n * combobox needs this to clear its `aria-expanded`/`aria-controls` state,\n * which would otherwise keep pointing at a listbox that is no longer mounted.\n */\n (e: 'close'): void\n}>()\n\nconst { translate } = useLocalization()\n\ntype DropdownRow =\n | { kind: 'env'; key: string; secondary: string }\n | { kind: 'context'; key: string; secondary: string }\n\nconst isOpen = ref(true)\nconst dropdownRef = ref<HTMLElement | null>(null)\nconst selectedVariableIndex = ref(0)\n\nconst redirectToEnvironment = () => {\n emit('redirect')\n isOpen.value = false\n // The panel is gone, so tell the combobox to drop its aria-expanded /\n // aria-controls — otherwise they keep pointing at a dismissed listbox.\n emit('close')\n}\n\n/** Normalize the variables to have a name and value */\nconst normalizedVariables = computed(() =>\n (environment?.variables ?? []).map((v) => ({\n key: v.name,\n value: typeof v.value === 'string' ? v.value : v.value.default,\n })),\n)\n\nconst contextRows = computed((): DropdownRow[] =>\n contextFunctionItems.map((item) => ({\n kind: 'context',\n key: item.key,\n secondary: item.description,\n })),\n)\n\nconst envRows = computed((): DropdownRow[] =>\n normalizedVariables.value\n .filter(({ key, value }) => key !== '' || value !== '')\n .map(({ key, value }) => ({\n kind: 'env' as const,\n key,\n secondary: value,\n })),\n)\n\ntype FuseRow = DropdownRow & { fuseText: string }\n\nconst envFuseSource = computed((): FuseRow[] =>\n envRows.value.map((row) => ({\n ...row,\n fuseText: `${row.key} ${row.secondary}`,\n })),\n)\n\nconst contextFuseSource = computed((): FuseRow[] =>\n contextRows.value.map((row) => ({\n ...row,\n fuseText: `${row.key} ${row.secondary}`,\n })),\n)\n\nconst fuseEnv = computed(\n () =>\n new Fuse(envFuseSource.value, {\n keys: ['fuseText'],\n threshold: 0.35,\n }),\n)\n\nconst fuseContext = computed(\n () =>\n new Fuse(contextFuseSource.value, {\n keys: ['fuseText'],\n threshold: 0.35,\n }),\n)\n\nconst popularContextRows = computed((): DropdownRow[] => {\n const byKey = new Map(contextFunctionItems.map((c) => [c.key, c]))\n return POPULAR_CONTEXT_FUNCTION_KEYS.flatMap((key) => {\n const item = byKey.get(key)\n return item\n ? [\n {\n kind: 'context' as const,\n key: item.key,\n secondary: item.description,\n },\n ]\n : []\n })\n})\n\nconst DROPDOWN_LIMIT = 12\n\nconst filteredVariables = computed((): DropdownRow[] => {\n if (!query.trim()) {\n const envSlice = envRows.value.slice(-4)\n return [...envSlice, ...popularContextRows.value]\n }\n\n const q = query.trim()\n const envMatches = fuseEnv.value\n .search(q, { limit: DROPDOWN_LIMIT })\n .map((res) => {\n const { kind, key, secondary } = res.item\n return { kind, key, secondary }\n })\n\n const remaining = DROPDOWN_LIMIT - envMatches.length\n const contextMatches =\n remaining > 0\n ? fuseContext.value.search(q, { limit: remaining }).map((res) => {\n const { kind, key, secondary } = res.item\n return { kind, key, secondary }\n })\n : []\n\n return [...envMatches, ...contextMatches]\n})\n\nconst optionId = (index: number): string | undefined =>\n listboxId ? `${listboxId}-option-${index}` : undefined\n\n/**\n * Id of the currently highlighted option, for the combobox's\n * `aria-activedescendant`. Undefined when there is no list to point at.\n */\nconst activeOptionId = computed((): string | undefined =>\n filteredVariables.value.length\n ? optionId(selectedVariableIndex.value)\n : undefined,\n)\n\nconst selectVariable = (variableKey: string): void => {\n emit('select', variableKey)\n}\n\n// Narrowing the query shrinks the list; keep the highlight in range so both the\n// visible selection and `aria-activedescendant` never reference a dropped option.\nwatch(\n () => filteredVariables.value.length,\n (length) => {\n if (selectedVariableIndex.value > length - 1) {\n selectedVariableIndex.value = Math.max(0, length - 1)\n }\n },\n)\n\nconst handleArrowKey = (direction: 'up' | 'down') => {\n const offset = direction === 'up' ? -1 : 1\n const length = filteredVariables.value.length\n\n if (length === 0) {\n return\n }\n\n selectedVariableIndex.value =\n (selectedVariableIndex.value + offset + length) % length\n}\n\nconst handleSelect = () => {\n if (selectedVariableIndex.value >= 0) {\n const selectedVariable =\n filteredVariables.value[selectedVariableIndex.value]\n if (selectedVariable) {\n selectVariable(selectedVariable.key)\n }\n }\n}\n\ndefineExpose({\n handleArrowKey,\n handleSelect,\n activeOptionId,\n})\n\nonMounted(() => {\n // Reset selected index to the first item when dropdown opens\n selectedVariableIndex.value = 0\n})\n\nconst dropdownStyle = computed<CSSProperties>(() => {\n return {\n left: (dropdownPosition?.left ?? 0) + 'px',\n // Add a 5px offset from the editor\n top: (dropdownPosition?.top ?? 0) + 5 + 'px',\n }\n})\n\nonClickOutside(\n dropdownRef,\n () => {\n isOpen.value = false\n emit('close')\n },\n { ignore: [dropdownRef] },\n)\n</script>\n<template>\n <ScalarTeleport\n v-if=\"isOpen\"\n class=\"scalar-client\">\n <div\n ref=\"dropdownRef\"\n class=\"custom-scroll z-context bg-b-1 dark:bg-b-1.5 fixed top-0 left-0 flex max-h-[60svh] w-56 flex-col rounded border p-0.75 shadow-lg\"\n :style=\"dropdownStyle\"\n @mousedown.prevent>\n <!--\n Always rendered (even with no matches) so the combobox's `aria-controls`\n always resolves to a real listbox; an empty list simply has no options.\n -->\n <ul\n :id=\"listboxId\"\n :aria-label=\"\n translate(\n 'apiClient.environmentVariablesDropdown.variableSuggestions',\n )\n \"\n class=\"gap-1/2 flex flex-col\"\n role=\"listbox\">\n <template\n v-for=\"(item, index) in filteredVariables\"\n :key=\"`${item.kind}-${item.key}`\">\n <li\n :id=\"optionId(index)\"\n :aria-selected=\"index === selectedVariableIndex\"\n class=\"font-code text-xxs hover:bg-b-3 flex h-8 cursor-pointer items-center justify-between gap-1.5 rounded p-1.5 transition-colors duration-150\"\n :class=\"{ 'bg-b-3': index === selectedVariableIndex }\"\n role=\"option\"\n @click=\"selectVariable(item.key)\">\n <div class=\"flex items-center gap-2 whitespace-nowrap\">\n <span\n v-if=\"item.kind === 'env'\"\n class=\"h-2.25 w-2.25 min-w-2.25 rounded-full\"\n :style=\"{\n backgroundColor: environment?.color,\n }\" />\n <span\n v-else\n class=\"text-c-3 bg-b-3 flex h-4.5 min-w-4.5 items-center justify-center rounded px-0.5 font-sans text-[9px] font-semibold\">\n fn\n </span>\n {{ item.key }}\n </div>\n <span\n class=\"max-w-[9rem] overflow-hidden text-right text-ellipsis whitespace-nowrap\">\n {{ item.secondary }}\n </span>\n </li>\n </template>\n </ul>\n <ScalarButton\n v-if=\"!filteredVariables.length\"\n class=\"font-code text-xxs bg-b-inherit hover:bg-b-3 flex h-8 w-full justify-start gap-2 px-1.5 transition-colors duration-150\"\n variant=\"outlined\"\n @click=\"redirectToEnvironment\">\n <ScalarIconPlus class=\"size-3\" />{{\n translate('apiClient.environmentVariablesDropdown.addVariable')\n }}\n </ScalarButton>\n </div>\n </ScalarTeleport>\n</template>\n"],"mappings":"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"}
@@ -38,6 +38,7 @@ export declare const ar: {
38
38
  };
39
39
  dataTableInput: {
40
40
  clearValue: string;
41
+ resetValue: string;
41
42
  showPassword: string;
42
43
  hidePassword: string;
43
44
  };
@@ -103,6 +104,7 @@ export declare const ar: {
103
104
  body: string;
104
105
  };
105
106
  requestBodyViewToggle: {
107
+ schema: string;
106
108
  form: string;
107
109
  raw: string;
108
110
  fixBody: string;
@@ -226,6 +228,8 @@ export declare const ar: {
226
228
  failedToauthorize: string;
227
229
  failedToRefreshToken: string;
228
230
  optionalRedirectUrl: string;
231
+ clearTokens: string;
232
+ resetDiscovery: string;
229
233
  };
230
234
  oauthScopesAddModal: {
231
235
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../../../src/v2/features/localization/locales/ar.ts"],"names":[],"mappings":"AAEA,+CAA+C;AAC/C,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuYkB,CAAA"}
1
+ {"version":3,"file":"ar.d.ts","sourceRoot":"","sources":["../../../../../src/v2/features/localization/locales/ar.ts"],"names":[],"mappings":"AAEA,+CAA+C;AAC/C,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2YkB,CAAA"}
@@ -31,6 +31,7 @@ var ar = {
31
31
  "codeInputLite": { "required": "مطلوب" },
32
32
  "dataTableInput": {
33
33
  "clearValue": "مسح القيمة",
34
+ "resetValue": "إعادة التعيين إلى القيمة الافتراضية",
34
35
  "showPassword": "إظهار كلمة المرور",
35
36
  "hidePassword": "إخفاء كلمة المرور"
36
37
  },
@@ -80,6 +81,7 @@ var ar = {
80
81
  },
81
82
  "requestBodyStructured": { "body": "الجسم" },
82
83
  "requestBodyViewToggle": {
84
+ "schema": "المخطط",
83
85
  "form": "نموذج",
84
86
  "raw": "خام",
85
87
  "fixBody": "صحح الجسم للتبديل إلى عرض النموذج"
@@ -194,7 +196,9 @@ var ar = {
194
196
  "clear": "مسح",
195
197
  "failedToauthorize": "فشل التخويل",
196
198
  "failedToRefreshToken": "فشل تجديد الرمز",
197
- "optionalRedirectUrl": "رابط إعادة توجيه اختياري"
199
+ "optionalRedirectUrl": "رابط إعادة توجيه اختياري",
200
+ "clearTokens": "مسح الرموز",
201
+ "resetDiscovery": "إعادة تعيين الاكتشاف"
198
202
  },
199
203
  "oauthScopesAddModal": {
200
204
  "name": "الاسم:",
@@ -1 +1 @@
1
- {"version":3,"file":"ar.js","names":[],"sources":["../../../../../src/v2/features/localization/locales/ar.ts"],"sourcesContent":["import type { ApiClientTranslations } from '@scalar/types/api-reference'\n\n/** Built-in API Client translations for ar. */\nexport const ar = {\n 'serverVariablesSelect': {\n 'selected': 'المحدد:',\n },\n 'serverVariablesTextbox': {\n 'value': 'قيمة',\n },\n 'sidebarListElementForm': {\n 'cancel': 'إلغاء',\n },\n 'requestBlock': {\n 'authentication': 'المصادقة',\n 'variables': 'المتغيرات',\n 'cookies': 'ملفات تعريف الارتباط',\n 'headers': 'الترويسات',\n 'queryParameters': 'معاملات الاستعلام',\n 'queryString': 'سلسلة الاستعلام',\n 'queryStringDescription':\n 'يوفر هذا المعامل سلسلة الاستعلام بأكملها، لذلك لا يمكن إضافة معاملات مسماة أخرى. تُرسل المعاملات المسماة الحالية بعده؛ وتُحفظ المفاتيح المكررة.',\n 'requestBody': 'جسم الطلب',\n 'requestName': 'اسم الطلب',\n 'label': 'الطلب: {name}',\n },\n 'responseBlock': {\n 'requestFailed': 'فشل الطلب',\n 'networkErrorHelp':\n 'تشمل الأسباب المحتملة قيود CORS أو مشكلة في الاتصال بالشبكة. راجع وحدة تحكم المتصفح للحصول على التفاصيل. إذا كانت CORS تمنع الطلب، فاضبط خادم API للسماح بهذا المصدر أو استخدم وكيلاً موثوقاً.',\n 'response': 'الاستجابة',\n 'requestHeaders': 'ترويسات الطلب',\n 'responseHeaders': 'ترويسات الاستجابة',\n 'body': 'الجسم',\n },\n 'codeInput': {\n 'required': 'مطلوب',\n 'exitHint': 'اضغط على {escape} ثم {tab} للخروج',\n },\n 'codeInputLite': {\n 'required': 'مطلوب',\n },\n 'dataTableInput': {\n 'clearValue': 'مسح القيمة',\n 'showPassword': 'إظهار كلمة المرور',\n 'hidePassword': 'إخفاء كلمة المرور',\n },\n 'dataTableInputSelect': {\n 'value': 'القيمة',\n 'addValue': 'إضافة قيمة',\n },\n 'confirmationForm': {\n 'cancel': 'إلغاء',\n 'save': 'حفظ',\n },\n 'collapsibleSection': {\n 'collapsed': '(مطوي)',\n 'item': 'عنصر',\n 'items': 'عناصر',\n },\n 'modalClientContainer': {\n 'label': 'عميل API',\n },\n 'serverDropdown': {\n 'server': 'الخادم:',\n 'addServer': 'إضافة خادم',\n 'updateServers': 'تحديث الخوادم',\n 'unknownServer': 'خادم غير معروف',\n },\n 'sidebar': {\n 'search': 'بحث',\n },\n 'sidebarMenu': {\n 'settings': 'الإعدادات',\n },\n 'sidebarToggle': {\n 'hide': 'إخفاء الشريط الجانبي',\n 'show': 'إظهار الشريط الجانبي',\n },\n 'environmentsList': {\n 'addEnvironment': 'إضافة بيئة',\n },\n 'modal': {\n 'noDocumentSelected': 'لم يتم تحديد مستند',\n },\n 'operation': {\n 'selectAnOperationToViewDetails': 'حدد عملية لعرض التفاصيل',\n },\n 'header': {\n 'operationSettings': 'إعدادات العملية',\n 'closeClient': 'إغلاق العميل',\n },\n 'openApiClientButton': {\n 'openAPIClient': 'فتح عميل API',\n },\n 'requestBody': {\n 'noBody': 'بدون جسم',\n 'delete': 'حذف',\n 'selectFile': 'اختيار ملف',\n 'multipartForm': 'نموذج متعدد الأجزاء',\n 'formUrlEncoded': 'نموذج بترميز URL',\n 'binaryFile': 'ملف ثنائي',\n 'other': 'آخر',\n 'none': 'لا شيء',\n },\n 'requestBodyStructured': {\n 'body': 'الجسم',\n },\n 'requestBodyViewToggle': {\n 'form': 'نموذج',\n 'raw': 'خام',\n 'fixBody': 'صحح الجسم للتبديل إلى عرض النموذج',\n },\n 'requestCodeSnippet': {\n unavailable: 'لا يوجد نموذج تعليمات برمجية متاح لهذا المثال.',\n 'codeSnippet': 'مقتطف برمجي',\n },\n 'requestTable': {\n 'enabled': 'مفعّل',\n 'key': 'المفتاح',\n 'value': 'القيمة',\n },\n 'requestTableRow': {\n 'key': 'المفتاح',\n 'value': 'القيمة',\n 'delete': 'حذف',\n 'selectFile': 'اختيار ملف',\n 'globalCookieHint': 'تتم مشاركة ملفات تعريف الارتباط العامة عبر مساحة العمل بأكملها. انقر للانتقال إليها.',\n 'readOnlyHint': 'هذه الخاصية للقراءة فقط. لتغييرها، يجب تجاوز قيمتها أو تعطيلها باستخدام مربع الاختيار.',\n 'include': 'تضمين {name} في الطلب',\n 'keyLabel': 'مفتاح {name}',\n 'valueLabel': 'قيمة {name}',\n 'deleteRow': 'حذف {name}',\n 'row': 'صف',\n },\n 'requestTableTooltip': {\n 'min': 'الحد الأدنى:',\n 'max': 'الحد الأقصى:',\n 'default': 'الافتراضي:',\n 'invalid': 'الإدخال غير صالح',\n 'moreInformation': 'مزيد من المعلومات',\n },\n 'headers': {\n 'headerKey': 'مفتاح الترويسة',\n 'headerValue': 'قيمة الترويسة',\n 'noHeaders': 'لا توجد ترويسات',\n },\n 'responseBody': {\n 'binaryFile': 'ملف ثنائي',\n },\n 'responseBodyPreview': {\n 'previewUnavailable': 'المعاينة غير متاحة',\n },\n 'responseBodyStreaming': {\n 'body': 'الجسم',\n 'listening': 'جارٍ الاستماع…',\n 'cancel': 'إلغاء',\n },\n 'responseBodyToggle': {\n 'preview': 'معاينة',\n 'raw': 'خام',\n },\n 'responseBodyVirtual': {\n 'body': 'الجسم',\n 'largeBodyHint': 'جسم هذه الاستجابة كبير جدًا ولا يمكن تمييز بنيته البرمجية.',\n },\n 'responseCookies': {\n 'cookies': 'ملفات تعريف الارتباط',\n 'cookieName': 'اسم ملف تعريف الارتباط',\n 'cookieValue': 'قيمة ملف تعريف الارتباط',\n 'noCookies': 'لا توجد ملفات تعريف ارتباط',\n },\n 'responseEmpty': {\n 'roadmap': 'خارطة الطريق',\n 'poweredByScalarcom': 'بدعم من Scalar.com',\n 'getStarted': 'البدء',\n 'newRequest': 'طلب جديد',\n 'sendRequest': 'إرسال الطلب',\n 'version': 'تطبيق Scalar V{version} التجريبي',\n },\n 'responseLoadingOverlay': {\n 'cancel': 'إلغاء',\n },\n 'addressBar': {\n 'path': 'المسار',\n 'copyUrl': 'نسخ الرابط',\n 'send': 'إرسال',\n 'sendRequest': 'إرسال طلب {method} إلى {url}',\n 'duplicateRequest': 'يوجد بالفعل طلب {method} إلى {path} في هذا المستند',\n 'urlPlaceholder': 'أدخل رابطًا',\n 'webhookUrlPlaceholder': 'أدخل رابط Webhook الكامل، مثل https://example.com/hook',\n },\n 'addressBarHistory': {\n 'requestHistory': 'سجل الطلبات',\n },\n 'environmentSelector': {\n 'noEnvironment': 'بدون بيئة',\n 'notAvailableInThisContext': 'غير متاح في هذا السياق',\n 'environmentHint': 'تتيح لك البيئات إدارة متغيرات مثل مفاتيح API والروابط الأساسية عبر سياقات مختلفة.',\n 'add': 'إضافة بيئة',\n 'select': 'اختيار بيئة',\n 'unavailable': '{name} (غير متاح)',\n 'current': 'البيئة الحالية: {name}',\n },\n 'deleteRequestAuthModal': {\n 'deleteSecurityScheme': 'حذف مخطط الأمان',\n 'cancel': 'إلغاء',\n 'delete': 'حذف',\n 'confirmation': 'لا يمكن التراجع عن هذا الإجراء. أنت على وشك حذف مخطط الأمان {name} من المجموعة.',\n },\n 'oauth2': {\n deviceAuthorizationUrl: 'رابط تفويض الجهاز',\n deviceVerificationPrompt: 'افتح صفحة التحقق وأدخل هذا الرمز:',\n waitingForAuthorization: 'في انتظار التفويض…',\n cancelDeviceAuthorization: 'إلغاء',\n\n 'accessToken': 'رمز الوصول',\n 'refreshUrl': 'رابط التجديد',\n 'refresh': 'تحديث',\n 'authUrl': 'رابط المصادقة',\n 'tokenUrl': 'رابط الرمز',\n 'redirectUrl': 'رابط إعادة التوجيه',\n 'username': 'اسم المستخدم',\n 'password': 'كلمة المرور',\n 'clientID': 'معرّف العميل',\n 'clientSecret': 'سر العميل',\n 'usePKCE': 'استخدام PKCE',\n 'credentialsLocation': 'موضع بيانات الاعتماد',\n 'authorize': 'تخويل',\n 'clear': 'مسح',\n 'failedToauthorize': 'فشل التخويل',\n 'failedToRefreshToken': 'فشل تجديد الرمز',\n 'optionalRedirectUrl': 'رابط إعادة توجيه اختياري',\n },\n 'oauthScopesAddModal': {\n 'name': 'الاسم:',\n 'description': 'الوصف:',\n 'readUserData': 'قراءة بيانات المستخدم',\n 'edit': 'تعديل النطاق',\n 'add': 'إضافة نطاق',\n 'save': 'حفظ',\n 'required': 'اسم النطاق مطلوب.',\n 'duplicate': 'يوجد بالفعل نطاق باسم «{name}».',\n },\n 'oauthScopesInput': {\n 'noScopesDefined': 'لم يتم تحديد نطاقات',\n 'addScope': 'إضافة نطاق',\n 'deselectAll': 'إلغاء تحديد الكل',\n 'selectAll': 'تحديد الكل',\n 'selectedScopes': 'النطاقات المحددة: {count} / {total}',\n 'editScope': 'تعديل {name}',\n 'deleteScope': 'حذف {name}',\n 'selectScope': 'تحديد النطاق {name}',\n },\n 'openIdConnect': {\n 'discoveryUrl': 'رابط الاكتشاف',\n 'fetchConfiguration': 'جلب الإعدادات',\n 'failedToFetchConfiguration': 'فشل جلب إعدادات OpenID Connect',\n },\n 'requestAuthDataTable': {\n 'noauthenticationSelected': 'لم يتم اختيار طريقة مصادقة',\n },\n 'requestAuthTab': {\n 'token': 'الرمز',\n 'bearerToken': 'رمز Bearer',\n 'getAToken': 'الحصول على رمز',\n 'refresh': 'تحديث',\n 'username': 'اسم المستخدم',\n 'password': 'كلمة المرور',\n 'name': 'الاسم',\n 'value': 'القيمة',\n 'cancel': 'إلغاء',\n 'authorize': 'تخويل',\n 'unsupportedCredentials': 'لا يرسل عميل المتصفح بيانات الاعتماد لمخطط أمان AsyncAPI هذا.',\n 'authorizeVia': 'التخويل عبر {name}',\n 'unsupportedType': 'نوع مخطط الأمان {type} غير مدعوم بعد.',\n 'missingType': 'لم يتم تحديد نوع مخطط الأمان. تحقق من مستند {type} أو إعدادات المصادقة.',\n 'failedToauthorize': 'فشل التخويل',\n 'failedToRefresh': 'فشل التحديث',\n 'configure': 'إعداد {name}',\n 'mutualTlsHint': 'تستخدم مصادقة TLS المتبادلة شهادة عميل تُقدَّم أثناء مصافحة TLS، لذلك لا يلزم إدخال أي شيء هنا.',\n },\n 'commandActionForm': {\n 'continue': 'متابعة',\n },\n 'environment': {\n 'thisIsTheActiveEnvironment': 'هذه هي البيئة النشطة',\n 'active': 'نشط',\n 'editEnvironment': 'تعديل البيئة',\n 'deleteEnvironment': 'حذف البيئة',\n },\n 'environmentCreateModal': {\n 'environmentName': 'اسم البيئة',\n 'thisEnvironmentNameIsAlreadyInUse': 'اسم البيئة هذا مستخدم بالفعل.',\n 'update': 'تحديث البيئة',\n 'add': 'إضافة بيئة',\n },\n 'environmentDeleteModal': {\n 'cancel': 'إلغاء',\n 'deleteEnvironment': 'حذف البيئة',\n 'deleteConfirmation': 'هل أنت متأكد من حذف هذه البيئة؟ لا يمكن التراجع عن هذا الإجراء.',\n 'title': 'حذف {name}',\n },\n 'environmentVariablesDropdown': {\n 'variableSuggestions': 'اقتراحات المتغيرات',\n 'addVariable': 'إضافة متغير',\n },\n 'environmentVariablesTable': {\n 'name': 'الاسم',\n 'value': 'القيمة',\n 'actions': 'الإجراءات',\n 'environmentVariableName': 'اسم متغير البيئة',\n 'environmentVariableValue': 'قيمة متغير البيئة',\n },\n 'documentSearchModal': {\n 'documentSearch': 'البحث في المستند',\n 'documentSearchResults': 'نتائج البحث في المستند',\n 'navigate': '↑↓ تنقّل',\n 'select': '⏎ تحديد',\n 'keyboardInstructions': 'اضغط على السهم لأعلى أو لأسفل للتنقل، وعلى Enter للتحديد، واكتب لتصفية النتائج',\n },\n 'searchResult': {\n 'httpMethod': 'طريقة HTTP:',\n 'path': 'المسار:',\n 'description': 'الوصف:',\n 'heading': 'عنوان',\n 'operation': 'عملية',\n 'tag': 'وسم',\n },\n 'sectionFilter': {\n 'all': 'الكل',\n 'auth': 'المصادقة',\n 'variables': 'المتغيرات',\n 'cookies': 'ملفات تعريف الارتباط',\n 'headers': 'الترويسات',\n 'query': 'الاستعلام',\n 'body': 'الجسم',\n },\n 'requestParams': {\n 'clearAll': 'مسح الكل: {title}',\n 'clear': 'مسح',\n 'clearOptionalParameters': 'مسح المعاملات الاختيارية',\n },\n 'responseBodyDownload': {\n 'download': 'تنزيل جسم الاستجابة',\n 'label': 'تنزيل',\n 'body': 'جسم الاستجابة',\n },\n 'responseMetaInformation': {\n 'duration': 'معلومات الاستجابة، المدة:',\n 'size': '، الحجم:',\n 'status': '، الحالة:',\n },\n 'authSelector': {\n 'selectedType': 'نوع المصادقة المحدد: {type}',\n 'multipleTypes': 'تم تحديد عدة أنواع مصادقة',\n 'selectType': 'اختيار نوع المصادقة',\n 'optional': 'اختياري',\n 'required': 'مطلوب',\n 'deleteScheme': 'حذف {name}',\n 'requiredGroup': 'المصادقة المطلوبة',\n 'availableGroup': 'المصادقة المتاحة',\n 'addGroup': 'إضافة مصادقة جديدة',\n },\n 'operationBlock': {\n 'webhookUrlRequired': 'رابط Webhook مطلوب. أدخل وجهة أولًا.',\n 'pathParametersRequired': 'يجب أن تكون لمعاملات المسار قيم.',\n 'forbiddenMethod': 'لا يمكن لواجهة Fetch API إرسال طلبات {method}.',\n },\n 'dataTableCheckbox': {\n 'toggle': 'تبديل',\n },\n 'pillTooltipHost': {\n 'computedAtExecution': 'تُحسب عند تنفيذ الطلب',\n 'noValue': 'لا توجد قيمة',\n },\n 'authOptions': {\n oauth2DeviceAuthorization: 'تفويض الجهاز عبر OAuth2',\n 'apiKeyCookie': 'مفتاح API في ملفات تعريف الارتباط',\n 'apiKeyHeader': 'مفتاح API في الترويسات',\n 'apiKeyQuery': 'مفتاح API في معاملات الاستعلام',\n 'httpBasic': 'HTTP Basic',\n 'httpBearer': 'HTTP Bearer',\n 'oauth2Implicit': 'التدفق الضمني لـ OAuth2',\n 'oauth2Password': 'تدفق كلمة المرور لـ OAuth2',\n 'oauth2ClientCredentials': 'بيانات اعتماد العميل لـ OAuth2',\n 'oauth2AuthorizationFlow': 'رمز تخويل OAuth2',\n },\n 'deleteSidebarListElement': {\n 'delete': 'حذف {name}',\n },\n 'deleteModal': {\n 'delete': 'حذف {name}',\n },\n} satisfies ApiClientTranslations\n"],"mappings":";;AAGA,IAAa,KAAK;CAChB,yBAAyB,EACvB,YAAY,UACd;CACA,0BAA0B,EACxB,SAAS,OACX;CACA,0BAA0B,EACxB,UAAU,QACZ;CACA,gBAAgB;EACd,kBAAkB;EAClB,aAAa;EACb,WAAW;EACX,WAAW;EACX,mBAAmB;EACnB,eAAe;EACf,0BACE;EACF,eAAe;EACf,eAAe;EACf,SAAS;CACX;CACA,iBAAiB;EACf,iBAAiB;EACjB,oBACE;EACF,YAAY;EACZ,kBAAkB;EAClB,mBAAmB;EACnB,QAAQ;CACV;CACA,aAAa;EACX,YAAY;EACZ,YAAY;CACd;CACA,iBAAiB,EACf,YAAY,QACd;CACA,kBAAkB;EAChB,cAAc;EACd,gBAAgB;EAChB,gBAAgB;CAClB;CACA,wBAAwB;EACtB,SAAS;EACT,YAAY;CACd;CACA,oBAAoB;EAClB,UAAU;EACV,QAAQ;CACV;CACA,sBAAsB;EACpB,aAAa;EACb,QAAQ;EACR,SAAS;CACX;CACA,wBAAwB,EACtB,SAAS,WACX;CACA,kBAAkB;EAChB,UAAU;EACV,aAAa;EACb,iBAAiB;EACjB,iBAAiB;CACnB;CACA,WAAW,EACT,UAAU,MACZ;CACA,eAAe,EACb,YAAY,YACd;CACA,iBAAiB;EACf,QAAQ;EACR,QAAQ;CACV;CACA,oBAAoB,EAClB,kBAAkB,aACpB;CACA,SAAS,EACP,sBAAsB,qBACxB;CACA,aAAa,EACX,kCAAkC,0BACpC;CACA,UAAU;EACR,qBAAqB;EACrB,eAAe;CACjB;CACA,uBAAuB,EACrB,iBAAiB,eACnB;CACA,eAAe;EACb,UAAU;EACV,UAAU;EACV,cAAc;EACd,iBAAiB;EACjB,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,QAAQ;CACV;CACA,yBAAyB,EACvB,QAAQ,QACV;CACA,yBAAyB;EACvB,QAAQ;EACR,OAAO;EACP,WAAW;CACb;CACA,sBAAsB;EACpB,aAAa;EACb,eAAe;CACjB;CACA,gBAAgB;EACd,WAAW;EACX,OAAO;EACP,SAAS;CACX;CACA,mBAAmB;EACjB,OAAO;EACP,SAAS;EACT,UAAU;EAC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"}
1
+ {"version":3,"file":"ar.js","names":[],"sources":["../../../../../src/v2/features/localization/locales/ar.ts"],"sourcesContent":["import type { ApiClientTranslations } from '@scalar/types/api-reference'\n\n/** Built-in API Client translations for ar. */\nexport const ar = {\n 'serverVariablesSelect': {\n 'selected': 'المحدد:',\n },\n 'serverVariablesTextbox': {\n 'value': 'قيمة',\n },\n 'sidebarListElementForm': {\n 'cancel': 'إلغاء',\n },\n 'requestBlock': {\n 'authentication': 'المصادقة',\n 'variables': 'المتغيرات',\n 'cookies': 'ملفات تعريف الارتباط',\n 'headers': 'الترويسات',\n 'queryParameters': 'معاملات الاستعلام',\n 'queryString': 'سلسلة الاستعلام',\n 'queryStringDescription':\n 'يوفر هذا المعامل سلسلة الاستعلام بأكملها، لذلك لا يمكن إضافة معاملات مسماة أخرى. تُرسل المعاملات المسماة الحالية بعده؛ وتُحفظ المفاتيح المكررة.',\n 'requestBody': 'جسم الطلب',\n 'requestName': 'اسم الطلب',\n 'label': 'الطلب: {name}',\n },\n 'responseBlock': {\n 'requestFailed': 'فشل الطلب',\n 'networkErrorHelp':\n 'تشمل الأسباب المحتملة قيود CORS أو مشكلة في الاتصال بالشبكة. راجع وحدة تحكم المتصفح للحصول على التفاصيل. إذا كانت CORS تمنع الطلب، فاضبط خادم API للسماح بهذا المصدر أو استخدم وكيلاً موثوقاً.',\n 'response': 'الاستجابة',\n 'requestHeaders': 'ترويسات الطلب',\n 'responseHeaders': 'ترويسات الاستجابة',\n 'body': 'الجسم',\n },\n 'codeInput': {\n 'required': 'مطلوب',\n 'exitHint': 'اضغط على {escape} ثم {tab} للخروج',\n },\n 'codeInputLite': {\n 'required': 'مطلوب',\n },\n 'dataTableInput': {\n 'clearValue': 'مسح القيمة',\n 'resetValue': 'إعادة التعيين إلى القيمة الافتراضية',\n 'showPassword': 'إظهار كلمة المرور',\n 'hidePassword': 'إخفاء كلمة المرور',\n },\n 'dataTableInputSelect': {\n 'value': 'القيمة',\n 'addValue': 'إضافة قيمة',\n },\n 'confirmationForm': {\n 'cancel': 'إلغاء',\n 'save': 'حفظ',\n },\n 'collapsibleSection': {\n 'collapsed': '(مطوي)',\n 'item': 'عنصر',\n 'items': 'عناصر',\n },\n 'modalClientContainer': {\n 'label': 'عميل API',\n },\n 'serverDropdown': {\n 'server': 'الخادم:',\n 'addServer': 'إضافة خادم',\n 'updateServers': 'تحديث الخوادم',\n 'unknownServer': 'خادم غير معروف',\n },\n 'sidebar': {\n 'search': 'بحث',\n },\n 'sidebarMenu': {\n 'settings': 'الإعدادات',\n },\n 'sidebarToggle': {\n 'hide': 'إخفاء الشريط الجانبي',\n 'show': 'إظهار الشريط الجانبي',\n },\n 'environmentsList': {\n 'addEnvironment': 'إضافة بيئة',\n },\n 'modal': {\n 'noDocumentSelected': 'لم يتم تحديد مستند',\n },\n 'operation': {\n 'selectAnOperationToViewDetails': 'حدد عملية لعرض التفاصيل',\n },\n 'header': {\n 'operationSettings': 'إعدادات العملية',\n 'closeClient': 'إغلاق العميل',\n },\n 'openApiClientButton': {\n 'openAPIClient': 'فتح عميل API',\n },\n 'requestBody': {\n 'noBody': 'بدون جسم',\n 'delete': 'حذف',\n 'selectFile': 'اختيار ملف',\n 'multipartForm': 'نموذج متعدد الأجزاء',\n 'formUrlEncoded': 'نموذج بترميز URL',\n 'binaryFile': 'ملف ثنائي',\n 'other': 'آخر',\n 'none': 'لا شيء',\n },\n 'requestBodyStructured': {\n 'body': 'الجسم',\n },\n 'requestBodyViewToggle': {\n 'schema': 'المخطط',\n 'form': 'نموذج',\n 'raw': 'خام',\n 'fixBody': 'صحح الجسم للتبديل إلى عرض النموذج',\n },\n 'requestCodeSnippet': {\n unavailable: 'لا يوجد نموذج تعليمات برمجية متاح لهذا المثال.',\n 'codeSnippet': 'مقتطف برمجي',\n },\n 'requestTable': {\n 'enabled': 'مفعّل',\n 'key': 'المفتاح',\n 'value': 'القيمة',\n },\n 'requestTableRow': {\n 'key': 'المفتاح',\n 'value': 'القيمة',\n 'delete': 'حذف',\n 'selectFile': 'اختيار ملف',\n 'globalCookieHint': 'تتم مشاركة ملفات تعريف الارتباط العامة عبر مساحة العمل بأكملها. انقر للانتقال إليها.',\n 'readOnlyHint': 'هذه الخاصية للقراءة فقط. لتغييرها، يجب تجاوز قيمتها أو تعطيلها باستخدام مربع الاختيار.',\n 'include': 'تضمين {name} في الطلب',\n 'keyLabel': 'مفتاح {name}',\n 'valueLabel': 'قيمة {name}',\n 'deleteRow': 'حذف {name}',\n 'row': 'صف',\n },\n 'requestTableTooltip': {\n 'min': 'الحد الأدنى:',\n 'max': 'الحد الأقصى:',\n 'default': 'الافتراضي:',\n 'invalid': 'الإدخال غير صالح',\n 'moreInformation': 'مزيد من المعلومات',\n },\n 'headers': {\n 'headerKey': 'مفتاح الترويسة',\n 'headerValue': 'قيمة الترويسة',\n 'noHeaders': 'لا توجد ترويسات',\n },\n 'responseBody': {\n 'binaryFile': 'ملف ثنائي',\n },\n 'responseBodyPreview': {\n 'previewUnavailable': 'المعاينة غير متاحة',\n },\n 'responseBodyStreaming': {\n 'body': 'الجسم',\n 'listening': 'جارٍ الاستماع…',\n 'cancel': 'إلغاء',\n },\n 'responseBodyToggle': {\n 'preview': 'معاينة',\n 'raw': 'خام',\n },\n 'responseBodyVirtual': {\n 'body': 'الجسم',\n 'largeBodyHint': 'جسم هذه الاستجابة كبير جدًا ولا يمكن تمييز بنيته البرمجية.',\n },\n 'responseCookies': {\n 'cookies': 'ملفات تعريف الارتباط',\n 'cookieName': 'اسم ملف تعريف الارتباط',\n 'cookieValue': 'قيمة ملف تعريف الارتباط',\n 'noCookies': 'لا توجد ملفات تعريف ارتباط',\n },\n 'responseEmpty': {\n 'roadmap': 'خارطة الطريق',\n 'poweredByScalarcom': 'بدعم من Scalar.com',\n 'getStarted': 'البدء',\n 'newRequest': 'طلب جديد',\n 'sendRequest': 'إرسال الطلب',\n 'version': 'تطبيق Scalar V{version} التجريبي',\n },\n 'responseLoadingOverlay': {\n 'cancel': 'إلغاء',\n },\n 'addressBar': {\n 'path': 'المسار',\n 'copyUrl': 'نسخ الرابط',\n 'send': 'إرسال',\n 'sendRequest': 'إرسال طلب {method} إلى {url}',\n 'duplicateRequest': 'يوجد بالفعل طلب {method} إلى {path} في هذا المستند',\n 'urlPlaceholder': 'أدخل رابطًا',\n 'webhookUrlPlaceholder': 'أدخل رابط Webhook الكامل، مثل https://example.com/hook',\n },\n 'addressBarHistory': {\n 'requestHistory': 'سجل الطلبات',\n },\n 'environmentSelector': {\n 'noEnvironment': 'بدون بيئة',\n 'notAvailableInThisContext': 'غير متاح في هذا السياق',\n 'environmentHint': 'تتيح لك البيئات إدارة متغيرات مثل مفاتيح API والروابط الأساسية عبر سياقات مختلفة.',\n 'add': 'إضافة بيئة',\n 'select': 'اختيار بيئة',\n 'unavailable': '{name} (غير متاح)',\n 'current': 'البيئة الحالية: {name}',\n },\n 'deleteRequestAuthModal': {\n 'deleteSecurityScheme': 'حذف مخطط الأمان',\n 'cancel': 'إلغاء',\n 'delete': 'حذف',\n 'confirmation': 'لا يمكن التراجع عن هذا الإجراء. أنت على وشك حذف مخطط الأمان {name} من المجموعة.',\n },\n 'oauth2': {\n deviceAuthorizationUrl: 'رابط تفويض الجهاز',\n deviceVerificationPrompt: 'افتح صفحة التحقق وأدخل هذا الرمز:',\n waitingForAuthorization: 'في انتظار التفويض…',\n cancelDeviceAuthorization: 'إلغاء',\n\n 'accessToken': 'رمز الوصول',\n 'refreshUrl': 'رابط التجديد',\n 'refresh': 'تحديث',\n 'authUrl': 'رابط المصادقة',\n 'tokenUrl': 'رابط الرمز',\n 'redirectUrl': 'رابط إعادة التوجيه',\n 'username': 'اسم المستخدم',\n 'password': 'كلمة المرور',\n 'clientID': 'معرّف العميل',\n 'clientSecret': 'سر العميل',\n 'usePKCE': 'استخدام PKCE',\n 'credentialsLocation': 'موضع بيانات الاعتماد',\n 'authorize': 'تخويل',\n 'clear': 'مسح',\n 'failedToauthorize': 'فشل التخويل',\n 'failedToRefreshToken': 'فشل تجديد الرمز',\n 'optionalRedirectUrl': 'رابط إعادة توجيه اختياري',\n 'clearTokens': 'مسح الرموز',\n 'resetDiscovery': 'إعادة تعيين الاكتشاف',\n },\n 'oauthScopesAddModal': {\n 'name': 'الاسم:',\n 'description': 'الوصف:',\n 'readUserData': 'قراءة بيانات المستخدم',\n 'edit': 'تعديل النطاق',\n 'add': 'إضافة نطاق',\n 'save': 'حفظ',\n 'required': 'اسم النطاق مطلوب.',\n 'duplicate': 'يوجد بالفعل نطاق باسم «{name}».',\n },\n 'oauthScopesInput': {\n 'noScopesDefined': 'لم يتم تحديد نطاقات',\n 'addScope': 'إضافة نطاق',\n 'deselectAll': 'إلغاء تحديد الكل',\n 'selectAll': 'تحديد الكل',\n 'selectedScopes': 'النطاقات المحددة: {count} / {total}',\n 'editScope': 'تعديل {name}',\n 'deleteScope': 'حذف {name}',\n 'selectScope': 'تحديد النطاق {name}',\n },\n 'openIdConnect': {\n 'discoveryUrl': 'رابط الاكتشاف',\n 'fetchConfiguration': 'جلب الإعدادات',\n 'failedToFetchConfiguration': 'فشل جلب إعدادات OpenID Connect',\n },\n 'requestAuthDataTable': {\n 'noauthenticationSelected': 'لم يتم اختيار طريقة مصادقة',\n },\n 'requestAuthTab': {\n 'token': 'الرمز',\n 'bearerToken': 'رمز Bearer',\n 'getAToken': 'الحصول على رمز',\n 'refresh': 'تحديث',\n 'username': 'اسم المستخدم',\n 'password': 'كلمة المرور',\n 'name': 'الاسم',\n 'value': 'القيمة',\n 'cancel': 'إلغاء',\n 'authorize': 'تخويل',\n 'unsupportedCredentials': 'لا يرسل عميل المتصفح بيانات الاعتماد لمخطط أمان AsyncAPI هذا.',\n 'authorizeVia': 'التخويل عبر {name}',\n 'unsupportedType': 'نوع مخطط الأمان {type} غير مدعوم بعد.',\n 'missingType': 'لم يتم تحديد نوع مخطط الأمان. تحقق من مستند {type} أو إعدادات المصادقة.',\n 'failedToauthorize': 'فشل التخويل',\n 'failedToRefresh': 'فشل التحديث',\n 'configure': 'إعداد {name}',\n 'mutualTlsHint': 'تستخدم مصادقة TLS المتبادلة شهادة عميل تُقدَّم أثناء مصافحة TLS، لذلك لا يلزم إدخال أي شيء هنا.',\n },\n 'commandActionForm': {\n 'continue': 'متابعة',\n },\n 'environment': {\n 'thisIsTheActiveEnvironment': 'هذه هي البيئة النشطة',\n 'active': 'نشط',\n 'editEnvironment': 'تعديل البيئة',\n 'deleteEnvironment': 'حذف البيئة',\n },\n 'environmentCreateModal': {\n 'environmentName': 'اسم البيئة',\n 'thisEnvironmentNameIsAlreadyInUse': 'اسم البيئة هذا مستخدم بالفعل.',\n 'update': 'تحديث البيئة',\n 'add': 'إضافة بيئة',\n },\n 'environmentDeleteModal': {\n 'cancel': 'إلغاء',\n 'deleteEnvironment': 'حذف البيئة',\n 'deleteConfirmation': 'هل أنت متأكد من حذف هذه البيئة؟ لا يمكن التراجع عن هذا الإجراء.',\n 'title': 'حذف {name}',\n },\n 'environmentVariablesDropdown': {\n 'variableSuggestions': 'اقتراحات المتغيرات',\n 'addVariable': 'إضافة متغير',\n },\n 'environmentVariablesTable': {\n 'name': 'الاسم',\n 'value': 'القيمة',\n 'actions': 'الإجراءات',\n 'environmentVariableName': 'اسم متغير البيئة',\n 'environmentVariableValue': 'قيمة متغير البيئة',\n },\n 'documentSearchModal': {\n 'documentSearch': 'البحث في المستند',\n 'documentSearchResults': 'نتائج البحث في المستند',\n 'navigate': '↑↓ تنقّل',\n 'select': '⏎ تحديد',\n 'keyboardInstructions': 'اضغط على السهم لأعلى أو لأسفل للتنقل، وعلى Enter للتحديد، واكتب لتصفية النتائج',\n },\n 'searchResult': {\n 'httpMethod': 'طريقة HTTP:',\n 'path': 'المسار:',\n 'description': 'الوصف:',\n 'heading': 'عنوان',\n 'operation': 'عملية',\n 'tag': 'وسم',\n },\n 'sectionFilter': {\n 'all': 'الكل',\n 'auth': 'المصادقة',\n 'variables': 'المتغيرات',\n 'cookies': 'ملفات تعريف الارتباط',\n 'headers': 'الترويسات',\n 'query': 'الاستعلام',\n 'body': 'الجسم',\n },\n 'requestParams': {\n 'clearAll': 'مسح الكل: {title}',\n 'clear': 'مسح',\n 'clearOptionalParameters': 'مسح المعاملات الاختيارية',\n },\n 'responseBodyDownload': {\n 'download': 'تنزيل جسم الاستجابة',\n 'label': 'تنزيل',\n 'body': 'جسم الاستجابة',\n },\n 'responseMetaInformation': {\n 'duration': 'معلومات الاستجابة، المدة:',\n 'size': '، الحجم:',\n 'status': '، الحالة:',\n },\n 'authSelector': {\n 'selectedType': 'نوع المصادقة المحدد: {type}',\n 'multipleTypes': 'تم تحديد عدة أنواع مصادقة',\n 'selectType': 'اختيار نوع المصادقة',\n 'optional': 'اختياري',\n 'required': 'مطلوب',\n 'deleteScheme': 'حذف {name}',\n 'requiredGroup': 'المصادقة المطلوبة',\n 'availableGroup': 'المصادقة المتاحة',\n 'addGroup': 'إضافة مصادقة جديدة',\n },\n 'operationBlock': {\n 'webhookUrlRequired': 'رابط Webhook مطلوب. أدخل وجهة أولًا.',\n 'pathParametersRequired': 'يجب أن تكون لمعاملات المسار قيم.',\n 'forbiddenMethod': 'لا يمكن لواجهة Fetch API إرسال طلبات {method}.',\n },\n 'dataTableCheckbox': {\n 'toggle': 'تبديل',\n },\n 'pillTooltipHost': {\n 'computedAtExecution': 'تُحسب عند تنفيذ الطلب',\n 'noValue': 'لا توجد قيمة',\n },\n 'authOptions': {\n oauth2DeviceAuthorization: 'تفويض الجهاز عبر OAuth2',\n 'apiKeyCookie': 'مفتاح API في ملفات تعريف الارتباط',\n 'apiKeyHeader': 'مفتاح API في الترويسات',\n 'apiKeyQuery': 'مفتاح API في معاملات الاستعلام',\n 'httpBasic': 'HTTP Basic',\n 'httpBearer': 'HTTP Bearer',\n 'oauth2Implicit': 'التدفق الضمني لـ OAuth2',\n 'oauth2Password': 'تدفق كلمة المرور لـ OAuth2',\n 'oauth2ClientCredentials': 'بيانات اعتماد العميل لـ OAuth2',\n 'oauth2AuthorizationFlow': 'رمز تخويل OAuth2',\n },\n 'deleteSidebarListElement': {\n 'delete': 'حذف {name}',\n },\n 'deleteModal': {\n 'delete': 'حذف {name}',\n },\n} satisfies ApiClientTranslations\n"],"mappings":";;AAGA,IAAa,KAAK;CAChB,yBAAyB,EACvB,YAAY,UACd;CACA,0BAA0B,EACxB,SAAS,OACX;CACA,0BAA0B,EACxB,UAAU,QACZ;CACA,gBAAgB;EACd,kBAAkB;EAClB,aAAa;EACb,WAAW;EACX,WAAW;EACX,mBAAmB;EACnB,eAAe;EACf,0BACE;EACF,eAAe;EACf,eAAe;EACf,SAAS;CACX;CACA,iBAAiB;EACf,iBAAiB;EACjB,oBACE;EACF,YAAY;EACZ,kBAAkB;EAClB,mBAAmB;EACnB,QAAQ;CACV;CACA,aAAa;EACX,YAAY;EACZ,YAAY;CACd;CACA,iBAAiB,EACf,YAAY,QACd;CACA,kBAAkB;EAChB,cAAc;EACd,cAAc;EACd,gBAAgB;EAChB,gBAAgB;CAClB;CACA,wBAAwB;EACtB,SAAS;EACT,YAAY;CACd;CACA,oBAAoB;EAClB,UAAU;EACV,QAAQ;CACV;CACA,sBAAsB;EACpB,aAAa;EACb,QAAQ;EACR,SAAS;CACX;CACA,wBAAwB,EACtB,SAAS,WACX;CACA,kBAAkB;EAChB,UAAU;EACV,aAAa;EACb,iBAAiB;EACjB,iBAAiB;CACnB;CACA,WAAW,EACT,UAAU,MACZ;CACA,eAAe,EACb,YAAY,YACd;CACA,iBAAiB;EACf,QAAQ;EACR,QAAQ;CACV;CACA,oBAAoB,EAClB,kBAAkB,aACpB;CACA,SAAS,EACP,sBAAsB,qBACxB;CACA,aAAa,EACX,kCAAkC,0BACpC;CACA,UAAU;EACR,qBAAqB;EACrB,eAAe;CACjB;CACA,uBAAuB,EACrB,iBAAiB,eACnB;CACA,eAAe;EACb,UAAU;EACV,UAAU;EACV,cAAc;EACd,iBAAiB;EACjB,kBAAkB;EAClB,cAAc;EACd,SAAS;EACT,QAAQ;CACV;CACA,yBAAyB,EACvB,QAAQ,QACV;CACA,yBAAyB;EACvB,UAAU;EACV,QAAQ;EACR,OAAO;EACP,WAAW;CACb;CACA,sBAAsB;EACpB,aAAa;EACb,eAAe;CACjB;CACA,gBAAgB;EACd,WAAW;EACX,OAAO;EACP,SAAS;CACX;CACA,mBAAmB;EACjB,OAAO;EAC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"}
@@ -38,6 +38,7 @@ export declare const de: {
38
38
  };
39
39
  dataTableInput: {
40
40
  clearValue: string;
41
+ resetValue: string;
41
42
  showPassword: string;
42
43
  hidePassword: string;
43
44
  };
@@ -103,6 +104,7 @@ export declare const de: {
103
104
  body: string;
104
105
  };
105
106
  requestBodyViewToggle: {
107
+ schema: string;
106
108
  form: string;
107
109
  raw: string;
108
110
  fixBody: string;
@@ -226,6 +228,8 @@ export declare const de: {
226
228
  failedToauthorize: string;
227
229
  failedToRefreshToken: string;
228
230
  optionalRedirectUrl: string;
231
+ clearTokens: string;
232
+ resetDiscovery: string;
229
233
  };
230
234
  oauthScopesAddModal: {
231
235
  name: string;