@stoplight/elements-core 9.0.8 → 9.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -136,6 +136,8 @@ const isResolvedObjectProxy = (someObject) => {
136
136
  return !!someObject[originalObjectSymbol];
137
137
  };
138
138
  const getOriginalObject = (resolvedObject) => {
139
+ if (!resolvedObject)
140
+ return resolvedObject;
139
141
  const originalObject = resolvedObject[originalObjectSymbol] || resolvedObject;
140
142
  if (!originalObject) {
141
143
  return resolvedObject;
@@ -728,7 +730,12 @@ const convertRequestToSample = (language, library, request) => tslib.__awaiter(v
728
730
  converted = converted || null;
729
731
  }
730
732
  if (typeof converted === 'string') {
731
- converted = converted.replace(/%7B/g, '{').replace(/%7D/g, '}');
733
+ const urlRegex = /(https?:\/\/[^\s'"]+)/g;
734
+ converted = converted.replace(urlRegex, url => {
735
+ const [pathPart, queryPart] = url.split('?', 2);
736
+ const decodedPath = pathPart.replace(/%7B/g, '{').replace(/%7D/g, '}');
737
+ return queryPart ? `${decodedPath}?${queryPart}` : decodedPath;
738
+ });
732
739
  if (language === 'shell' && library === 'curl') {
733
740
  const isUrlEncoded = (_a = request === null || request === void 0 ? void 0 : request.headers) === null || _a === void 0 ? void 0 : _a.some(header => header.name.toLowerCase() === 'content-type' && header.value === 'application/x-www-form-urlencoded');
734
741
  if (isUrlEncoded) {
@@ -2756,13 +2763,358 @@ const PanelContent = ({ schemes }) => {
2756
2763
  })));
2757
2764
  };
2758
2765
 
2766
+ const TYPES = ['string', 'integer', 'boolean', 'any', 'number'];
2767
+ function resolvePointer(obj, pointer) {
2768
+ const parts = pointer.replace(/^#\//, '').split('/');
2769
+ return parts.reduce((acc, key) => acc && acc[key], obj);
2770
+ }
2771
+ function detectCircularPath(path) {
2772
+ const ignored = ['properties', 'items'];
2773
+ const parts = path.split('/').filter(part => !ignored.includes(part));
2774
+ for (let i = 0; i < parts.length - 1; i++) {
2775
+ const current = parts[i];
2776
+ const rest = parts.slice(i + 1);
2777
+ if (rest.includes(current)) {
2778
+ return true;
2779
+ }
2780
+ }
2781
+ return false;
2782
+ }
2783
+ function dereference(node, root, visited = new WeakSet(), depth = 0, maxDepth = 10) {
2784
+ if (!node || typeof node !== 'object')
2785
+ return node;
2786
+ if (depth > maxDepth)
2787
+ return node;
2788
+ if (node.$ref || node['x-iata-$ref']) {
2789
+ let refPath = node.$ref || node['x-iata-$ref'];
2790
+ if (refPath.includes('#/%24defs')) {
2791
+ refPath = refPath.replace('#/%24defs', '$defs');
2792
+ }
2793
+ else {
2794
+ refPath = refPath.replace('__bundled__', 'definitions');
2795
+ }
2796
+ if (visited.has(node))
2797
+ return { circular: true, $ref: refPath, title: node.title, type: 'any', description: node.description };
2798
+ visited.add(node);
2799
+ const target = resolvePointer(root, refPath);
2800
+ if (!target)
2801
+ return node;
2802
+ const result = Object.assign({}, target);
2803
+ if ('description' in node)
2804
+ result.description = node.description;
2805
+ if ('title' in node)
2806
+ result.title = node.title;
2807
+ return dereference(result, root, visited, depth + 1, maxDepth);
2808
+ }
2809
+ if (Array.isArray(node)) {
2810
+ return node.map(item => dereference(item, root, visited, depth + 1, maxDepth));
2811
+ }
2812
+ const result = {};
2813
+ for (const key in node) {
2814
+ result[key] = dereference(node[key], root, visited, depth + 1, maxDepth);
2815
+ }
2816
+ return result;
2817
+ }
2818
+ const trimSlashes = (str) => {
2819
+ return str.replace(/^\/|\/$/g, '');
2820
+ };
2821
+ function isPropertiesAllHidden(path, hideData) {
2822
+ const current = trimSlashes(path);
2823
+ const parts = current.split('/');
2824
+ for (let i = parts.length; i >= 2; i--) {
2825
+ if (parts[i - 1] === 'properties') {
2826
+ const ancestorPropPath = parts.slice(0, i).join('/');
2827
+ const block = hideData.find(h => trimSlashes(h.path) === ancestorPropPath && ancestorPropPath.endsWith('/properties'));
2828
+ if (block && block.required === undefined) {
2829
+ return true;
2830
+ }
2831
+ }
2832
+ }
2833
+ return false;
2834
+ }
2835
+ function isRequiredOverride(path, hideData) {
2836
+ const entry = hideData.find(h => trimSlashes(h.path) === trimSlashes(path));
2837
+ return entry && typeof entry.required === 'boolean' ? entry.required : undefined;
2838
+ }
2839
+ function isPathHidden(path, hideData, complexData) {
2840
+ const isComplex = checkIfIsComplex(path, complexData);
2841
+ if (isComplex === null) {
2842
+ return false;
2843
+ }
2844
+ else if (isComplex) {
2845
+ const normalizedPath = trimSlashes(path);
2846
+ const direct = hideData.find(h => trimSlashes(h.path) === normalizedPath);
2847
+ if (direct && direct.required === undefined)
2848
+ return true;
2849
+ if (isPropertiesAllHidden(path, hideData))
2850
+ return true;
2851
+ for (const h of hideData) {
2852
+ const hPath = trimSlashes(h.path);
2853
+ if (h.required !== undefined)
2854
+ continue;
2855
+ if (normalizedPath.length > hPath.length &&
2856
+ normalizedPath.startsWith(hPath) &&
2857
+ (hPath.endsWith('/items') || (hPath.match(/\/items\/[^\/]+$/) && normalizedPath.startsWith(hPath + '/')))) {
2858
+ return true;
2859
+ }
2860
+ }
2861
+ return false;
2862
+ }
2863
+ else {
2864
+ return !hideData.some(h => h.path === path || h.path.startsWith(path + '/'));
2865
+ }
2866
+ }
2867
+ const checkIfIsComplex = (path, complexData) => {
2868
+ let isComplex = null;
2869
+ for (const complex of complexData) {
2870
+ if (path.startsWith(complex.location)) {
2871
+ isComplex = complex === null || complex === void 0 ? void 0 : complex.isComplex;
2872
+ break;
2873
+ }
2874
+ }
2875
+ return isComplex;
2876
+ };
2877
+ const LazySchemaTreePreviewer = ({ schema, root = schema, title, level = 1, path = '', hideData = [], complexData = [], parentRequired, propertyKey, _subType, }) => {
2878
+ var _a, _b, _c, _d;
2879
+ const [expanded, setExpanded] = React.useState(false);
2880
+ const [selectedSchemaIndex, setSelectedSchemaIndex] = React.useState(0);
2881
+ const [showSchemaDropdown, setShowSchemaDropdown] = React.useState(false);
2882
+ const [isHoveringSelector, setIsHoveringSelector] = React.useState(false);
2883
+ const isRoot = level === 1 && (title === undefined || path === '');
2884
+ React.useEffect(() => {
2885
+ setSelectedSchemaIndex(0);
2886
+ }, [schema === null || schema === void 0 ? void 0 : schema.anyOf, schema === null || schema === void 0 ? void 0 : schema.oneOf]);
2887
+ const thisNodeRequiredOverride = isRequiredOverride(path, hideData);
2888
+ const shouldHideAllChildren = (isRoot && hideData.some(h => trimSlashes(h.path) === 'properties' && h.required === undefined)) ||
2889
+ (!isRoot && isPropertiesAllHidden(path, hideData));
2890
+ const shouldHideNode = React.useMemo(() => {
2891
+ if (isRoot)
2892
+ return false;
2893
+ if (isPathHidden(path, hideData, complexData) && thisNodeRequiredOverride === undefined)
2894
+ return true;
2895
+ return false;
2896
+ }, [path, hideData, isRoot, thisNodeRequiredOverride, complexData]);
2897
+ if (!schema || shouldHideNode) {
2898
+ return null;
2899
+ }
2900
+ const displayTitle = level === 1 && (title === undefined || path === '') ? '' : (_a = title !== null && title !== void 0 ? title : schema === null || schema === void 0 ? void 0 : schema.title) !== null && _a !== void 0 ? _a : 'Node';
2901
+ const handleToggle = () => {
2902
+ const circular = detectCircularPath(path);
2903
+ if (!circular) {
2904
+ setExpanded(prev => !prev);
2905
+ }
2906
+ };
2907
+ const renderChildren = () => {
2908
+ var _a, _b, _c, _d;
2909
+ if (shouldHideAllChildren)
2910
+ return null;
2911
+ if (!expanded && !isRoot)
2912
+ return null;
2913
+ const children = [];
2914
+ if ((schema === null || schema === void 0 ? void 0 : schema.type) === 'object' && ((schema === null || schema === void 0 ? void 0 : schema.properties) || (schema === null || schema === void 0 ? void 0 : schema.allOf) || (schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf))) {
2915
+ let props = schema === null || schema === void 0 ? void 0 : schema.properties;
2916
+ if (schema === null || schema === void 0 ? void 0 : schema.allOf) {
2917
+ schema === null || schema === void 0 ? void 0 : schema.allOf.forEach((item) => {
2918
+ props = Object.assign(Object.assign({}, props), item.properties);
2919
+ });
2920
+ }
2921
+ if ((schema === null || schema === void 0 ? void 0 : schema.anyOf) && (schema === null || schema === void 0 ? void 0 : schema.anyOf.length) > 0) {
2922
+ const selectedSchema = (schema === null || schema === void 0 ? void 0 : schema.anyOf[selectedSchemaIndex]) || (schema === null || schema === void 0 ? void 0 : schema.anyOf[0]);
2923
+ props = Object.assign(Object.assign({}, props), selectedSchema.properties);
2924
+ }
2925
+ if ((schema === null || schema === void 0 ? void 0 : schema.oneOf) && (schema === null || schema === void 0 ? void 0 : schema.oneOf.length) > 0) {
2926
+ const selectedSchema = (schema === null || schema === void 0 ? void 0 : schema.oneOf[selectedSchemaIndex]) || (schema === null || schema === void 0 ? void 0 : schema.oneOf[0]);
2927
+ props = Object.assign(Object.assign({}, props), selectedSchema.properties);
2928
+ }
2929
+ for (const [key, child] of Object.entries(props || {})) {
2930
+ const childPath = `${path}/properties/${key}`;
2931
+ const childRequiredOverride = isRequiredOverride(childPath, hideData);
2932
+ const shouldHideChild = isPathHidden(childPath, hideData, complexData) && childRequiredOverride === undefined;
2933
+ const resolved = dereference(child, root);
2934
+ if (!shouldHideChild) {
2935
+ children.push(React.createElement("li", { key: key },
2936
+ React.createElement(LazySchemaTreePreviewer, { schema: resolved, root: root, title: key, level: level + 1, path: childPath, hideData: hideData, complexData: complexData, parentRequired: schema === null || schema === void 0 ? void 0 : schema.required, propertyKey: key, _subType: (_a = resolved === null || resolved === void 0 ? void 0 : resolved.items) === null || _a === void 0 ? void 0 : _a.type })));
2937
+ }
2938
+ }
2939
+ }
2940
+ else if ((schema === null || schema === void 0 ? void 0 : schema.type) === 'array' &&
2941
+ (schema === null || schema === void 0 ? void 0 : schema.items) &&
2942
+ Object.keys(schema === null || schema === void 0 ? void 0 : schema.items).length > 0 &&
2943
+ !((_b = schema === null || schema === void 0 ? void 0 : schema.items) === null || _b === void 0 ? void 0 : _b.circular)) {
2944
+ const resolvedItems = dereference(schema === null || schema === void 0 ? void 0 : schema.items, root);
2945
+ const itemsPath = `${path}/items`;
2946
+ if (resolvedItems && resolvedItems.type === 'object' && resolvedItems.properties) {
2947
+ for (const [key, child] of Object.entries(resolvedItems.properties)) {
2948
+ const childPath = `${itemsPath}/properties/${key}`;
2949
+ const childRequiredOverride = isRequiredOverride(childPath, hideData);
2950
+ const shouldHideChild = isPathHidden(childPath, hideData, complexData) && childRequiredOverride === undefined;
2951
+ const resolved = dereference(child, root);
2952
+ if (!shouldHideChild) {
2953
+ children.push(React.createElement("li", { key: key },
2954
+ React.createElement(LazySchemaTreePreviewer, { schema: resolved, root: root, title: key, level: level + 2, path: childPath, hideData: hideData, complexData: complexData, parentRequired: resolvedItems.required, propertyKey: key, _subType: (_c = resolvedItems === null || resolvedItems === void 0 ? void 0 : resolvedItems.items) === null || _c === void 0 ? void 0 : _c.type })));
2955
+ }
2956
+ }
2957
+ }
2958
+ else if (resolvedItems && resolvedItems.type === 'array' && resolvedItems.items.length > 0) {
2959
+ const childPath = `${path}/items`;
2960
+ const childRequiredOverride = isRequiredOverride(childPath, hideData);
2961
+ const shouldHideChild = isPathHidden(childPath, hideData, complexData) && childRequiredOverride === undefined;
2962
+ if (!shouldHideChild) {
2963
+ children.push(React.createElement("li", { key: "items" },
2964
+ React.createElement(LazySchemaTreePreviewer, { schema: resolvedItems, root: root, title: "items", level: level + 1, path: childPath, hideData: hideData, complexData: complexData, parentRequired: schema === null || schema === void 0 ? void 0 : schema.required, propertyKey: "items", _subType: (_d = resolvedItems === null || resolvedItems === void 0 ? void 0 : resolvedItems.items) === null || _d === void 0 ? void 0 : _d.type })));
2965
+ }
2966
+ }
2967
+ }
2968
+ return children.length > 0 ? React.createElement("ul", { className: "ml-6 border-l border-gray-200 pl-2" }, children) : null;
2969
+ };
2970
+ const combinedSchemaSelector = () => {
2971
+ var _a;
2972
+ return (React.createElement(React.Fragment, null,
2973
+ React.createElement(mosaic.Box, { pos: "fixed", top: 0, left: 0, right: 0, bottom: 0, bg: "transparent", style: { zIndex: 999 }, onClick: () => setShowSchemaDropdown(false) }),
2974
+ React.createElement(mosaic.Box, { pos: "absolute", bg: "canvas", rounded: true, boxShadow: "md", style: {
2975
+ zIndex: 1000,
2976
+ top: '100%',
2977
+ left: 0,
2978
+ minWidth: '150px',
2979
+ maxWidth: '200px',
2980
+ marginTop: '2px',
2981
+ border: '1px solid rgba(0, 0, 0, 0.1)',
2982
+ }, fontSize: "sm", onClick: (e) => e.stopPropagation() }, (_a = ((schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf))) === null || _a === void 0 ? void 0 : _a.map((schemaOption, index) => (React.createElement(mosaic.Box, { key: index, px: 3, py: 2, cursor: "pointer", bg: selectedSchemaIndex === index ? 'primary-tint' : 'canvas', fontSize: "xs", display: "flex", alignItems: "center", style: {
2983
+ borderBottom: index < ((schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf)).length - 1 ? '1px solid rgba(0, 0, 0, 0.1)' : 'none',
2984
+ gap: '8px',
2985
+ }, onMouseEnter: (e) => {
2986
+ if (selectedSchemaIndex !== index) {
2987
+ e.currentTarget.style.backgroundColor = 'var(--sl-color-canvas-tint)';
2988
+ }
2989
+ }, onMouseLeave: (e) => {
2990
+ if (selectedSchemaIndex !== index) {
2991
+ e.currentTarget.style.backgroundColor = 'var(--sl-color-canvas)';
2992
+ }
2993
+ }, onClick: () => {
2994
+ setSelectedSchemaIndex(index);
2995
+ setShowSchemaDropdown(false);
2996
+ } },
2997
+ React.createElement(mosaic.Box, { flex: 1, color: "body" }, schemaOption.type || 'object'),
2998
+ selectedSchemaIndex === index && (React.createElement(mosaic.Box, { color: "primary", fontSize: "xs" }, "\u2713"))))))));
2999
+ };
3000
+ const renderMinEnums = (schema) => {
3001
+ if (!schema || typeof schema !== 'object')
3002
+ return null;
3003
+ const boxStyle = {
3004
+ background: 'rgba(245, 247, 250, 0.5)',
3005
+ border: '1px solid #a0aec0',
3006
+ borderRadius: '4px',
3007
+ padding: '0px 2px',
3008
+ display: 'inline-block',
3009
+ overflowWrap: 'break-word',
3010
+ textAlign: 'left',
3011
+ maxWidth: 'fit-content',
3012
+ maxHeight: 'fit-content',
3013
+ };
3014
+ if ('minItems' in schema) {
3015
+ const schemaWithMinItems = schema;
3016
+ if (typeof schemaWithMinItems.minItems === 'number') {
3017
+ return (React.createElement(mosaic.Box, { className: "sl-text-muted", fontFamily: "ui", fontWeight: "normal", mr: 2, style: boxStyle }, `>=${schemaWithMinItems.minItems} items`));
3018
+ }
3019
+ }
3020
+ if ('enum' in schema && Array.isArray(schema.enum)) {
3021
+ return (React.createElement("div", null,
3022
+ "Allowed values:",
3023
+ ' ',
3024
+ schema.enum.map((val, idx) => (React.createElement(mosaic.Box, { key: idx, className: "sl-text-muted", fontFamily: "ui", fontWeight: "normal", mr: 2, style: boxStyle }, val)))));
3025
+ }
3026
+ return null;
3027
+ };
3028
+ const isRequired = parentRequired && propertyKey && parentRequired.includes(propertyKey);
3029
+ let showRequiredLabel = false;
3030
+ const hideDataEntry = hideData.find(hideEntry => trimSlashes(hideEntry.path) === trimSlashes(path));
3031
+ if ((hideDataEntry === null || hideDataEntry === void 0 ? void 0 : hideDataEntry.required) === true || ((hideDataEntry === null || hideDataEntry === void 0 ? void 0 : hideDataEntry.required) === undefined && isRequired)) {
3032
+ showRequiredLabel = true;
3033
+ }
3034
+ if (schema === null || schema === void 0 ? void 0 : schema.$ref) {
3035
+ schema = dereference(schema, root);
3036
+ }
3037
+ return (React.createElement("div", { className: "mb-1" },
3038
+ React.createElement(mosaic.Flex, { maxW: "full", pl: 3, py: 2, "data-test": "schema-row", pos: "relative" },
3039
+ React.createElement(mosaic.VStack, { spacing: 1, maxW: "full", className: "w-full" },
3040
+ React.createElement(mosaic.Flex, { onClick: !isRoot ? handleToggle : undefined, className: `w-full ${isRoot ? '' : 'cursor-pointer'}` },
3041
+ !isRoot ? (React.createElement(mosaic.Box, { mr: 2, className: "sl-font-mono sl-font-semibold sl-mr-2" },
3042
+ !TYPES.includes(schema === null || schema === void 0 ? void 0 : schema.type) &&
3043
+ !detectCircularPath(path) &&
3044
+ !((_b = schema === null || schema === void 0 ? void 0 : schema.items) === null || _b === void 0 ? void 0 : _b.circular) &&
3045
+ !(schema === null || schema === void 0 ? void 0 : schema.circular) ? (React.createElement("i", { role: "img", "aria-hidden": "true", className: `sl-icon fal ${expanded ? 'fa-chevron-down' : 'fa-chevron-right'} fa-fw fa-sm` })) : (React.createElement("span", { className: "sl-icon fal fa-fw fa-sm", "aria-hidden": "true" })),
3046
+ ' ' + displayTitle)) : null,
3047
+ !isRoot ? (React.createElement(mosaic.Box, { mr: 2, pos: "relative" },
3048
+ React.createElement(mosaic.Box, { display: "inline-flex", alignItems: "center", onMouseEnter: () => {
3049
+ if ((schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf)) {
3050
+ setIsHoveringSelector(true);
3051
+ }
3052
+ }, onMouseLeave: () => {
3053
+ if (!showSchemaDropdown) {
3054
+ setIsHoveringSelector(false);
3055
+ }
3056
+ }, onClick: (e) => {
3057
+ if ((schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf)) {
3058
+ e.stopPropagation();
3059
+ setShowSchemaDropdown(prev => !prev);
3060
+ }
3061
+ }, style: {
3062
+ cursor: (schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf) ? 'pointer' : 'default',
3063
+ } },
3064
+ React.createElement("span", { className: "sl-truncate sl-text-muted" },
3065
+ (() => {
3066
+ let typeDisplay = (schema === null || schema === void 0 ? void 0 : schema.type) === 'object' && (schema === null || schema === void 0 ? void 0 : schema.title) ? schema === null || schema === void 0 ? void 0 : schema.title : (schema === null || schema === void 0 ? void 0 : schema.type) || (root === null || root === void 0 ? void 0 : root.title);
3067
+ if ((schema === null || schema === void 0 ? void 0 : schema.anyOf) && (schema === null || schema === void 0 ? void 0 : schema.anyOf.length) > 0) {
3068
+ return `any of ${typeDisplay}`;
3069
+ }
3070
+ else if ((schema === null || schema === void 0 ? void 0 : schema.oneOf) && (schema === null || schema === void 0 ? void 0 : schema.oneOf.length) > 0) {
3071
+ return `one of ${typeDisplay}`;
3072
+ }
3073
+ return typeDisplay;
3074
+ })(),
3075
+ (schema === null || schema === void 0 ? void 0 : schema.items) && ((_c = schema === null || schema === void 0 ? void 0 : schema.items) === null || _c === void 0 ? void 0 : _c.title) !== undefined ? ` [${(_d = schema === null || schema === void 0 ? void 0 : schema.items) === null || _d === void 0 ? void 0 : _d.title}] ` : null),
3076
+ ((schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf)) && (React.createElement(mosaic.Box, { display: "inline-flex", alignItems: "center", ml: 1, style: {
3077
+ opacity: isHoveringSelector ? 1 : 0.6,
3078
+ transition: 'opacity 0.2s',
3079
+ } },
3080
+ React.createElement("i", { className: "sl-icon fas fa-chevron-down", style: {
3081
+ fontSize: '10px',
3082
+ opacity: 0.6,
3083
+ } })))),
3084
+ React.createElement("span", { className: "text-gray-500" }, (schema === null || schema === void 0 ? void 0 : schema.format) !== undefined ? `<${schema === null || schema === void 0 ? void 0 : schema.format}>` : null),
3085
+ ((schema === null || schema === void 0 ? void 0 : schema.anyOf) || (schema === null || schema === void 0 ? void 0 : schema.oneOf)) && showSchemaDropdown && combinedSchemaSelector())) : null),
3086
+ React.createElement(mosaic.Flex, { pl: 1, w: "full", align: "start", direction: "col", style: { overflow: 'visible', paddingLeft: '20px' } },
3087
+ (schema === null || schema === void 0 ? void 0 : schema.description) && (React.createElement(mosaic.Box, { fontFamily: "ui", fontWeight: "light" },
3088
+ React.createElement("span", { className: "sl-prose sl-markdown-viewer", style: { fontSize: '12px' } }, schema === null || schema === void 0 ? void 0 : schema.description))),
3089
+ !isRoot && (schema === null || schema === void 0 ? void 0 : schema.examples) !== undefined && (React.createElement(mosaic.Flex, { align: "center", mb: 1, style: { flexWrap: 'wrap' } },
3090
+ React.createElement("span", { className: "text-gray-500", style: { marginRight: 8, flexShrink: 0 } }, "Example"),
3091
+ React.createElement(mosaic.Box, { className: "sl-text-muted", fontFamily: "ui", fontWeight: "normal", mr: 2, style: {
3092
+ background: 'rgba(245, 247, 250, 0.5)',
3093
+ border: '1px solid #a0aec0',
3094
+ borderRadius: '4px',
3095
+ padding: '4px 8px',
3096
+ display: 'inline-block',
3097
+ overflowWrap: 'break-word',
3098
+ textAlign: 'left',
3099
+ maxWidth: '530px',
3100
+ } }, JSON.stringify(schema === null || schema === void 0 ? void 0 : schema.examples))))),
3101
+ React.createElement(mosaic.Flex, { pl: 1, w: "full", align: "start", direction: "col", style: { overflow: 'visible', paddingLeft: '20px' } }, schema &&
3102
+ typeof schema === 'object' &&
3103
+ ('minItems' in schema || 'enum' in schema) &&
3104
+ renderMinEnums(schema))),
3105
+ !isRoot && (React.createElement("label", { className: "inline-flex items-top ml-2" },
3106
+ React.createElement(mosaic.Box, { mr: 2, fontFamily: "ui", fontWeight: "normal" }, showRequiredLabel && (React.createElement("div", { className: "sl-ml-2 sl-text-warning" },
3107
+ React.createElement("span", { style: { marginLeft: '10px' } }, "required"))))))),
3108
+ renderChildren()));
3109
+ };
3110
+
2759
3111
  const isBodyEmpty = (body) => {
2760
3112
  if (!body)
2761
3113
  return true;
2762
3114
  const { contents = [], description } = body;
2763
3115
  return contents.length === 0 && !(description === null || description === void 0 ? void 0 : description.trim());
2764
3116
  };
2765
- const Body = ({ body, onChange, isHttpWebhookOperation = false }) => {
3117
+ const Body = ({ body, onChange, isHttpWebhookOperation = false, disableProps }) => {
2766
3118
  var _a;
2767
3119
  const [refResolver, maxRefDepth] = useSchemaInlineRefResolver();
2768
3120
  const [chosenContent, setChosenContent] = React__namespace.useState(0);
@@ -2775,13 +3127,36 @@ const Body = ({ body, onChange, isHttpWebhookOperation = false }) => {
2775
3127
  const { contents = [], description } = body;
2776
3128
  const schema = (_a = contents[chosenContent]) === null || _a === void 0 ? void 0 : _a.schema;
2777
3129
  const descriptionChanged = nodeHasChanged === null || nodeHasChanged === void 0 ? void 0 : nodeHasChanged({ nodeId: body.id, attr: 'description' });
3130
+ const getMaskProperties = () => {
3131
+ const disablePropsConfig = disableProps || [];
3132
+ const absolutePathsToHide = [];
3133
+ disablePropsConfig.forEach(configEntry => {
3134
+ const { location, paths, isComplex } = configEntry;
3135
+ if (paths.length === 0 && !isComplex) {
3136
+ absolutePathsToHide.push({ path: location });
3137
+ }
3138
+ else {
3139
+ paths.forEach((item) => {
3140
+ const fullPath = location === '#' ? item === null || item === void 0 ? void 0 : item.path : `${location}/${item.path}`;
3141
+ let object = { path: fullPath };
3142
+ if (item.hasOwnProperty('required')) {
3143
+ object = Object.assign(Object.assign({}, object), { required: item === null || item === void 0 ? void 0 : item.required });
3144
+ }
3145
+ absolutePathsToHide.push(object);
3146
+ });
3147
+ }
3148
+ });
3149
+ return absolutePathsToHide;
3150
+ };
3151
+ const shouldUseLazySchema = disableProps === null || disableProps === void 0 ? void 0 : disableProps.some(entry => entry.isComplex === true);
3152
+ console.log('!!!!! shouldUseLazySchema body!!!!', shouldUseLazySchema);
2778
3153
  return (React__namespace.createElement(mosaic.VStack, { spacing: 6 },
2779
3154
  React__namespace.createElement(SectionSubtitle, { title: "Body", id: "request-body" }, contents.length > 0 && (React__namespace.createElement(mosaic.Flex, { flex: 1, justify: "end" },
2780
3155
  React__namespace.createElement(mosaic.Select, { "aria-label": "Request Body Content Type", value: String(chosenContent), onChange: value => setChosenContent(parseInt(String(value), 10)), options: contents.map((content, index) => ({ label: content.mediaType, value: index })), size: "sm" })))),
2781
3156
  description && (React__namespace.createElement(mosaic.Box, { pos: "relative" },
2782
3157
  React__namespace.createElement(MarkdownViewer, { markdown: description }),
2783
3158
  React__namespace.createElement(mosaic.NodeAnnotation, { change: descriptionChanged }))),
2784
- isJSONSchema(schema) && (React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { resolveRef: refResolver, maxRefDepth: maxRefDepth, schema: getOriginalObject(schema), viewMode: isHttpWebhookOperation ? 'standalone' : 'write', renderRootTreeLines: true, nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }))));
3159
+ schema && shouldUseLazySchema ? (React__namespace.createElement(LazySchemaTreePreviewer, { schema: schema, hideData: getMaskProperties(), complexData: disableProps })) : (isJSONSchema(schema) && (React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { resolveRef: refResolver, maxRefDepth: maxRefDepth, schema: getOriginalObject(schema), viewMode: isHttpWebhookOperation ? 'standalone' : 'write', renderRootTreeLines: true, nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon })))));
2785
3160
  };
2786
3161
  Body.displayName = 'HttpOperation.Body';
2787
3162
 
@@ -2848,7 +3223,7 @@ const httpOperationParamsToSchema = ({ parameters, parameterType }) => {
2848
3223
  return schema;
2849
3224
  };
2850
3225
 
2851
- const Request = ({ operation: { request, request: { path: pathParams = [], headers: headerParams = [], cookie: cookieParams = [], body, query: queryParams = [], } = {}, security, }, hideSecurityInfo, onChange, isHttpWebhookOperation = false, }) => {
3226
+ const Request = ({ operation: { request, request: { path: pathParams = [], headers: headerParams = [], cookie: cookieParams = [], body, query: queryParams = [], } = {}, security, }, hideSecurityInfo, onChange, isHttpWebhookOperation = false, disableProps, }) => {
2852
3227
  if (!request || typeof request !== 'object')
2853
3228
  return null;
2854
3229
  const bodyIsEmpty = isBodyEmpty(body);
@@ -2876,7 +3251,7 @@ const Request = ({ operation: { request, request: { path: pathParams = [], heade
2876
3251
  cookieParams.length > 0 && (React__namespace.createElement(mosaic.VStack, { spacing: 5 },
2877
3252
  React__namespace.createElement(SectionSubtitle, { title: "Cookies", id: "request-cookies" }),
2878
3253
  React__namespace.createElement(Parameters, { parameterType: "cookie", parameters: cookieParams }))),
2879
- body && React__namespace.createElement(Body, { onChange: onChange, body: body, isHttpWebhookOperation: isHttpWebhookOperation })));
3254
+ body && (React__namespace.createElement(Body, { onChange: onChange, body: body, isHttpWebhookOperation: isHttpWebhookOperation, disableProps: disableProps }))));
2880
3255
  };
2881
3256
  Request.displayName = 'HttpOperation.Request';
2882
3257
  const schemeExpandedState = utils.atomWithStorage('HttpOperation_security_expanded', {});
@@ -2907,7 +3282,7 @@ const OptionalMessage$1 = () => {
2907
3282
  return React__namespace.createElement(mosaic.Callout, { appearance: "outline" }, OptionalSecurityMessage);
2908
3283
  };
2909
3284
 
2910
- const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTypeChange, isCompact, }) => {
3285
+ const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTypeChange, isCompact, disableProps, }) => {
2911
3286
  var _a, _b;
2912
3287
  const responses = sortBy(uniqBy(unsortedResponses, r => r.code), r => r.code);
2913
3288
  const [activeResponseId, setActiveResponseId] = React__namespace.useState((_b = (_a = responses[0]) === null || _a === void 0 ? void 0 : _a.code) !== null && _b !== void 0 ? _b : '');
@@ -2940,11 +3315,12 @@ const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTy
2940
3315
  const tabResponses = (React__namespace.createElement(mosaic.TabList, { density: "compact" }, responses.map(({ code }) => (React__namespace.createElement(mosaic.Tab, { key: code, id: code, intent: codeToIntentVal(code) }, code)))));
2941
3316
  return (React__namespace.createElement(mosaic.VStack, { spacing: 8, as: mosaic.Tabs, selectedId: activeResponseId, onChange: setActiveResponseId, appearance: "pill" },
2942
3317
  React__namespace.createElement(SectionTitle, { title: "Responses", isCompact: isCompact }, isCompact ? compactResponses : tabResponses),
2943
- isCompact ? (React__namespace.createElement(Response, { response: response, onMediaTypeChange: onMediaTypeChange })) : (React__namespace.createElement(mosaic.TabPanels, { p: 0 }, responses.map(response => (React__namespace.createElement(mosaic.TabPanel, { key: response.code, id: response.code },
2944
- React__namespace.createElement(Response, { response: response, onMediaTypeChange: onMediaTypeChange }))))))));
3318
+ isCompact ? (React__namespace.createElement(Response, { response: response, onMediaTypeChange: onMediaTypeChange, disableProps: disableProps, statusCode: activeResponseId })) : (React__namespace.createElement(mosaic.TabPanels, { p: 0 }, responses.map(response => (React__namespace.createElement(mosaic.TabPanel, { key: response.code, id: response.code },
3319
+ React__namespace.createElement(Response, { response: response, onMediaTypeChange: onMediaTypeChange, disableProps: disableProps, statusCode: response.code }))))))));
2945
3320
  };
2946
3321
  Responses.displayName = 'HttpOperation.Responses';
2947
- const Response = ({ response, onMediaTypeChange }) => {
3322
+ const Response = ({ response, onMediaTypeChange, disableProps, statusCode }) => {
3323
+ var _a, _b;
2948
3324
  const { contents = [], headers = [], description } = response;
2949
3325
  const [chosenContent, setChosenContent] = React__namespace.useState(0);
2950
3326
  const [refResolver, maxRefDepth] = useSchemaInlineRefResolver();
@@ -2955,6 +3331,29 @@ const Response = ({ response, onMediaTypeChange }) => {
2955
3331
  responseContent && (onMediaTypeChange === null || onMediaTypeChange === void 0 ? void 0 : onMediaTypeChange(responseContent.mediaType));
2956
3332
  }, [responseContent]);
2957
3333
  const descriptionChanged = nodeHasChanged === null || nodeHasChanged === void 0 ? void 0 : nodeHasChanged({ nodeId: response.id, attr: 'description' });
3334
+ const getMaskProperties = () => {
3335
+ if (!disableProps || !statusCode)
3336
+ return [];
3337
+ const configEntries = disableProps[statusCode] || [];
3338
+ const absolutePathsToHide = [];
3339
+ configEntries.forEach(({ location, paths, isComplex }) => {
3340
+ if (paths.length === 0 && !isComplex) {
3341
+ absolutePathsToHide.push({ path: location });
3342
+ }
3343
+ else {
3344
+ paths.forEach((item) => {
3345
+ const fullPath = location === '#' ? item === null || item === void 0 ? void 0 : item.path : `${location}/${item.path}`;
3346
+ let object = { path: fullPath };
3347
+ if (item.hasOwnProperty('required')) {
3348
+ object = Object.assign(Object.assign({}, object), { required: item === null || item === void 0 ? void 0 : item.required });
3349
+ }
3350
+ absolutePathsToHide.push(object);
3351
+ });
3352
+ }
3353
+ });
3354
+ return absolutePathsToHide;
3355
+ };
3356
+ const shouldUseLazySchema = (_b = (statusCode && ((_a = disableProps === null || disableProps === void 0 ? void 0 : disableProps[statusCode]) === null || _a === void 0 ? void 0 : _a.some(entry => entry.isComplex)))) !== null && _b !== void 0 ? _b : false;
2958
3357
  return (React__namespace.createElement(mosaic.VStack, { spacing: 8, pt: 8 },
2959
3358
  description && (React__namespace.createElement(mosaic.Box, { pos: "relative" },
2960
3359
  React__namespace.createElement(MarkdownViewer, { markdown: description }),
@@ -2966,7 +3365,7 @@ const Response = ({ response, onMediaTypeChange }) => {
2966
3365
  React__namespace.createElement(SectionSubtitle, { title: "Body", id: "response-body" },
2967
3366
  React__namespace.createElement(mosaic.Flex, { flex: 1, justify: "end" },
2968
3367
  React__namespace.createElement(mosaic.Select, { "aria-label": "Response Body Content Type", value: String(chosenContent), onChange: value => setChosenContent(parseInt(String(value), 10)), options: contents.map((content, index) => ({ label: content.mediaType, value: index })), size: "sm" }))),
2969
- schema && (React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { schema: getOriginalObject(schema), resolveRef: refResolver, maxRefDepth: maxRefDepth, viewMode: "read", parentCrumbs: ['responses', response.code], renderRootTreeLines: true, nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }))))));
3368
+ schema && shouldUseLazySchema ? (React__namespace.createElement(LazySchemaTreePreviewer, { schema: schema, path: "", hideData: getMaskProperties(), complexData: disableProps && statusCode ? disableProps[statusCode] : [] })) : (React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { schema: getOriginalObject(schema), resolveRef: refResolver, maxRefDepth: maxRefDepth, viewMode: "read", parentCrumbs: ['responses', response.code], renderRootTreeLines: true, nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }))))));
2970
3369
  };
2971
3370
  Response.displayName = 'HttpOperation.Response';
2972
3371
  const codeToIntentVal = (code) => {
@@ -3015,7 +3414,7 @@ const Callback = ({ data, isCompact }) => {
3015
3414
  };
3016
3415
  Callbacks.displayName = 'HttpOperation.Callback';
3017
3416
 
3018
- const HttpOperationComponent = React__namespace.memo(({ className, data: unresolvedData, layoutOptions, tryItCredentialsPolicy, tryItCorsProxy }) => {
3417
+ const HttpOperationComponent = React__namespace.memo(({ className, data: unresolvedData, layoutOptions, tryItCredentialsPolicy, tryItCorsProxy, disableProps }) => {
3019
3418
  var _a;
3020
3419
  const { nodeHasChanged } = useOptionsCtx();
3021
3420
  const data = useResolvedObject(unresolvedData);
@@ -3046,11 +3445,11 @@ const HttpOperationComponent = React__namespace.memo(({ className, data: unresol
3046
3445
  React__namespace.createElement(MarkdownViewer, { className: "HttpOperation__Description", markdown: data.description }),
3047
3446
  React__namespace.createElement(mosaic.NodeAnnotation, { change: descriptionChanged }))),
3048
3447
  React__namespace.createElement(NodeVendorExtensions, { data: data }),
3049
- React__namespace.createElement(Request, { onChange: setTextRequestBodyIndex, operation: data, hideSecurityInfo: layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideSecurityInfo, isHttpWebhookOperation: isHttpWebhookOperation(data) }),
3050
- data.responses && (React__namespace.createElement(Responses, { responses: data.responses, onMediaTypeChange: setResponseMediaType, onStatusCodeChange: setResponseStatusCode, isCompact: isCompact })),
3448
+ React__namespace.createElement(Request, { onChange: setTextRequestBodyIndex, operation: data, hideSecurityInfo: layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideSecurityInfo, isHttpWebhookOperation: isHttpWebhookOperation(data), disableProps: disableProps === null || disableProps === void 0 ? void 0 : disableProps.request }),
3449
+ data.responses && (React__namespace.createElement(Responses, { responses: data.responses, onMediaTypeChange: setResponseMediaType, onStatusCodeChange: setResponseStatusCode, isCompact: isCompact, disableProps: disableProps === null || disableProps === void 0 ? void 0 : disableProps.response })),
3051
3450
  ((_a = data.callbacks) === null || _a === void 0 ? void 0 : _a.length) ? React__namespace.createElement(Callbacks, { callbacks: data.callbacks, isCompact: isCompact }) : null,
3052
3451
  isCompact && tryItPanel));
3053
- return (React__namespace.createElement(TwoColumnLayout, { ref: layoutRef, className: cn('HttpOperation', className), header: header, left: description, right: !isCompact && tryItPanel }));
3452
+ return (React__namespace.createElement(TwoColumnLayout, { ref: layoutRef, className: cn('HttpOperation', className), header: header, left: description, right: !(disableProps === null || disableProps === void 0 ? void 0 : disableProps.hideOperationTryIt) && !isCompact && tryItPanel }));
3054
3453
  });
3055
3454
  HttpOperationComponent.displayName = 'HttpOperation.Component';
3056
3455
  const HttpOperation = reactErrorBoundary.withErrorBoundary(HttpOperationComponent, {
@@ -3301,7 +3700,7 @@ const HttpServiceComponent = React__namespace.memo(({ data: unresolvedData, loca
3301
3700
  HttpServiceComponent.displayName = 'HttpService.Component';
3302
3701
  const HttpService = reactErrorBoundary.withErrorBoundary(HttpServiceComponent, { recoverableProps: ['data'] });
3303
3702
 
3304
- const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOptions, exportProps, }) => {
3703
+ const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOptions, exportProps, disableProps, }) => {
3305
3704
  var _a, _b;
3306
3705
  const [resolveRef, maxRefDepth] = useSchemaInlineRefResolver();
3307
3706
  const data = useResolvedObject(unresolvedData);
@@ -3324,14 +3723,40 @@ const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOpti
3324
3723
  exportProps && !(layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideExport) && !isCompact && React__namespace.createElement(ExportButton, Object.assign({}, exportProps))));
3325
3724
  const modelExamples = !(layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideModelExamples) && React__namespace.createElement(ModelExamples, { data: data, isCollapsible: isCompact });
3326
3725
  const descriptionChanged = nodeHasChanged === null || nodeHasChanged === void 0 ? void 0 : nodeHasChanged({ nodeId, attr: 'description' });
3726
+ const getMaskProperties = () => {
3727
+ const disablePropsConfig = disableProps === null || disableProps === void 0 ? void 0 : disableProps.models;
3728
+ const absolutePathsToHide = [];
3729
+ if (disableProps === null || disableProps === void 0 ? void 0 : disableProps.models) {
3730
+ disablePropsConfig.forEach((configEntry) => {
3731
+ const { location, paths, isComplex } = configEntry;
3732
+ if (paths.length === 0 && !isComplex) {
3733
+ absolutePathsToHide.push({ path: location });
3734
+ }
3735
+ else {
3736
+ paths.forEach((item) => {
3737
+ const fullPath = location === '#' ? item === null || item === void 0 ? void 0 : item.path : `${location}/${item.path}`;
3738
+ let object = { path: fullPath };
3739
+ if (item.hasOwnProperty('required')) {
3740
+ object = Object.assign(Object.assign({}, object), { required: item === null || item === void 0 ? void 0 : item.required });
3741
+ }
3742
+ absolutePathsToHide.push(object);
3743
+ });
3744
+ }
3745
+ });
3746
+ }
3747
+ return absolutePathsToHide;
3748
+ };
3749
+ const shouldUseLazySchema = disableProps && (disableProps === null || disableProps === void 0 ? void 0 : disableProps.models)
3750
+ ? disableProps.models.some((entry) => entry.isComplex === true)
3751
+ : false;
3327
3752
  const description = (React__namespace.createElement(mosaic.VStack, { spacing: 10 },
3328
3753
  data.description && data.type === 'object' && (React__namespace.createElement(mosaic.Box, { pos: "relative" },
3329
3754
  React__namespace.createElement(MarkdownViewer, { role: "textbox", markdown: data.description }),
3330
3755
  React__namespace.createElement(mosaic.NodeAnnotation, { change: descriptionChanged }))),
3331
3756
  React__namespace.createElement(NodeVendorExtensions, { data: data }),
3332
- isCompact && modelExamples,
3333
- React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { resolveRef: resolveRef, maxRefDepth: maxRefDepth, schema: getOriginalObject(data), nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon, skipTopLevelDescription: true })));
3334
- return (React__namespace.createElement(TwoColumnLayout, { ref: layoutRef, className: cn('Model', className), header: header, left: description, right: !isCompact && modelExamples }));
3757
+ !(disableProps === null || disableProps === void 0 ? void 0 : disableProps.hideModelTryIt) && isCompact && modelExamples,
3758
+ data && shouldUseLazySchema ? (React__namespace.createElement(LazySchemaTreePreviewer, { schema: data, hideData: getMaskProperties(), complexData: disableProps === null || disableProps === void 0 ? void 0 : disableProps.models })) : (React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { resolveRef: resolveRef, maxRefDepth: maxRefDepth, schema: getOriginalObject(data), nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon, skipTopLevelDescription: true }))));
3759
+ return (React__namespace.createElement(TwoColumnLayout, { ref: layoutRef, className: cn('Model', className), header: header, left: description, right: !(disableProps === null || disableProps === void 0 ? void 0 : disableProps.hideModelTryIt) && !isCompact && modelExamples }));
3335
3760
  };
3336
3761
  const ModelExamples = React__namespace.memo(({ data, isCollapsible = false }) => {
3337
3762
  var _a;
@@ -3353,30 +3778,41 @@ const Model = reactErrorBoundary.withErrorBoundary(ModelComponent, { recoverable
3353
3778
 
3354
3779
  const Docs = React__namespace.memo((_a) => {
3355
3780
  var _b;
3356
- var { nodeType, nodeData, useNodeForRefResolving = false, refResolver, maxRefDepth, nodeHasChanged, renderExtensionAddon } = _a, commonProps = tslib.__rest(_a, ["nodeType", "nodeData", "useNodeForRefResolving", "refResolver", "maxRefDepth", "nodeHasChanged", "renderExtensionAddon"]);
3781
+ var { nodeType, nodeData, disableProps, useNodeForRefResolving = false, refResolver, maxRefDepth, nodeHasChanged, renderExtensionAddon } = _a, commonProps = tslib.__rest(_a, ["nodeType", "nodeData", "disableProps", "useNodeForRefResolving", "refResolver", "maxRefDepth", "nodeHasChanged", "renderExtensionAddon"]);
3357
3782
  const parsedNode = useParsedData(nodeType, nodeData);
3358
3783
  if (!parsedNode) {
3359
3784
  (_b = commonProps.nodeUnsupported) === null || _b === void 0 ? void 0 : _b.call(commonProps, 'dataEmpty');
3360
3785
  return null;
3361
3786
  }
3362
- let elem = React__namespace.createElement(ParsedDocs, Object.assign({ node: parsedNode }, commonProps));
3787
+ let elem = React__namespace.createElement(ParsedDocs, Object.assign({ node: parsedNode, disableProps: disableProps }, commonProps));
3363
3788
  if (useNodeForRefResolving) {
3364
3789
  elem = (React__namespace.createElement(InlineRefResolverProvider, { document: parsedNode.data, resolver: refResolver, maxRefDepth: maxRefDepth }, elem));
3365
3790
  }
3366
3791
  return (React__namespace.createElement(ElementsOptionsProvider, { nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }, elem));
3367
3792
  });
3793
+ const getTryItVisibility = (disableProps) => {
3794
+ var _a, _b, _c, _d;
3795
+ if (!disableProps)
3796
+ return { hideOperationTryIt: false, hideModelTryIt: false };
3797
+ const requestHasComplex = (_b = (_a = disableProps.request) === null || _a === void 0 ? void 0 : _a.some(item => item.isComplex)) !== null && _b !== void 0 ? _b : false;
3798
+ const responseHasComplex = Object.values(disableProps.response || {}).some(arr => arr.some(item => item.isComplex));
3799
+ const hideOperationTryIt = requestHasComplex || responseHasComplex;
3800
+ const hideModelTryIt = (_d = (_c = disableProps.models) === null || _c === void 0 ? void 0 : _c.some(item => item.isComplex)) !== null && _d !== void 0 ? _d : false;
3801
+ return { hideOperationTryIt, hideModelTryIt };
3802
+ };
3368
3803
  const ParsedDocs = (_a) => {
3369
- var { node, nodeUnsupported } = _a, commonProps = tslib.__rest(_a, ["node", "nodeUnsupported"]);
3804
+ var { node, nodeUnsupported, disableProps } = _a, commonProps = tslib.__rest(_a, ["node", "nodeUnsupported", "disableProps"]);
3805
+ const { hideOperationTryIt, hideModelTryIt } = getTryItVisibility(disableProps);
3370
3806
  switch (node.type) {
3371
3807
  case 'article':
3372
3808
  return React__namespace.createElement(Article, Object.assign({ data: node.data }, commonProps));
3373
3809
  case 'http_operation':
3374
3810
  case 'http_webhook':
3375
- return React__namespace.createElement(HttpOperation, Object.assign({ data: node.data }, commonProps));
3811
+ return React__namespace.createElement(HttpOperation, Object.assign({ data: node.data, disableProps: Object.assign(Object.assign({}, disableProps), { hideOperationTryIt }) }, commonProps));
3376
3812
  case 'http_service':
3377
3813
  return React__namespace.createElement(HttpService, Object.assign({ data: node.data }, commonProps));
3378
3814
  case 'model':
3379
- return React__namespace.createElement(Model, Object.assign({ data: node.data }, commonProps));
3815
+ return React__namespace.createElement(Model, Object.assign({ data: node.data, disableProps: Object.assign(Object.assign({}, disableProps), { hideModelTryIt }) }, commonProps));
3380
3816
  default:
3381
3817
  nodeUnsupported === null || nodeUnsupported === void 0 ? void 0 : nodeUnsupported('invalidType');
3382
3818
  return null;