@stoplight/elements-core 9.0.12 → 9.0.13-beta-0.1

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
@@ -54,6 +54,7 @@ var omitBy = require('lodash/omitBy.js');
54
54
  var reactQuery = require('react-query');
55
55
  var server_js = require('react-router-dom/server.js');
56
56
  var $RefParser = require('@stoplight/json-schema-ref-parser');
57
+ var PropTypes = require('prop-types');
57
58
  var isEqual = require('lodash/isEqual.js');
58
59
  var ReactDOM = require('react-dom');
59
60
 
@@ -76,6 +77,7 @@ function _interopNamespaceDefault(e) {
76
77
 
77
78
  var React__namespace = /*#__PURE__*/_interopNamespaceDefault(React);
78
79
  var Sampler__namespace = /*#__PURE__*/_interopNamespaceDefault(Sampler);
80
+ var PropTypes__namespace = /*#__PURE__*/_interopNamespaceDefault(PropTypes);
79
81
  var ReactDOM__namespace = /*#__PURE__*/_interopNamespaceDefault(ReactDOM);
80
82
 
81
83
  const defaultResolver = (contextObject) => ({ pointer }, _, currentObject) => {
@@ -134,6 +136,8 @@ const isResolvedObjectProxy = (someObject) => {
134
136
  return !!someObject[originalObjectSymbol];
135
137
  };
136
138
  const getOriginalObject = (resolvedObject) => {
139
+ if (!resolvedObject)
140
+ return resolvedObject;
137
141
  const originalObject = resolvedObject[originalObjectSymbol] || resolvedObject;
138
142
  if (!originalObject) {
139
143
  return resolvedObject;
@@ -2759,13 +2763,358 @@ const PanelContent = ({ schemes }) => {
2759
2763
  })));
2760
2764
  };
2761
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
+
2762
3111
  const isBodyEmpty = (body) => {
2763
3112
  if (!body)
2764
3113
  return true;
2765
3114
  const { contents = [], description } = body;
2766
3115
  return contents.length === 0 && !(description === null || description === void 0 ? void 0 : description.trim());
2767
3116
  };
2768
- const Body = ({ body, onChange, isHttpWebhookOperation = false }) => {
3117
+ const Body = ({ body, onChange, isHttpWebhookOperation = false, disableProps }) => {
2769
3118
  var _a;
2770
3119
  const [refResolver, maxRefDepth] = useSchemaInlineRefResolver();
2771
3120
  const [chosenContent, setChosenContent] = React__namespace.useState(0);
@@ -2778,13 +3127,36 @@ const Body = ({ body, onChange, isHttpWebhookOperation = false }) => {
2778
3127
  const { contents = [], description } = body;
2779
3128
  const schema = (_a = contents[chosenContent]) === null || _a === void 0 ? void 0 : _a.schema;
2780
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);
2781
3153
  return (React__namespace.createElement(mosaic.VStack, { spacing: 6 },
2782
3154
  React__namespace.createElement(SectionSubtitle, { title: "Body", id: "request-body" }, contents.length > 0 && (React__namespace.createElement(mosaic.Flex, { flex: 1, justify: "end" },
2783
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" })))),
2784
3156
  description && (React__namespace.createElement(mosaic.Box, { pos: "relative" },
2785
3157
  React__namespace.createElement(MarkdownViewer, { markdown: description }),
2786
3158
  React__namespace.createElement(mosaic.NodeAnnotation, { change: descriptionChanged }))),
2787
- 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 })))));
2788
3160
  };
2789
3161
  Body.displayName = 'HttpOperation.Body';
2790
3162
 
@@ -2851,7 +3223,7 @@ const httpOperationParamsToSchema = ({ parameters, parameterType }) => {
2851
3223
  return schema;
2852
3224
  };
2853
3225
 
2854
- 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, }) => {
2855
3227
  if (!request || typeof request !== 'object')
2856
3228
  return null;
2857
3229
  const bodyIsEmpty = isBodyEmpty(body);
@@ -2879,7 +3251,7 @@ const Request = ({ operation: { request, request: { path: pathParams = [], heade
2879
3251
  cookieParams.length > 0 && (React__namespace.createElement(mosaic.VStack, { spacing: 5 },
2880
3252
  React__namespace.createElement(SectionSubtitle, { title: "Cookies", id: "request-cookies" }),
2881
3253
  React__namespace.createElement(Parameters, { parameterType: "cookie", parameters: cookieParams }))),
2882
- 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 }))));
2883
3255
  };
2884
3256
  Request.displayName = 'HttpOperation.Request';
2885
3257
  const schemeExpandedState = utils.atomWithStorage('HttpOperation_security_expanded', {});
@@ -2910,7 +3282,7 @@ const OptionalMessage$1 = () => {
2910
3282
  return React__namespace.createElement(mosaic.Callout, { appearance: "outline" }, OptionalSecurityMessage);
2911
3283
  };
2912
3284
 
2913
- const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTypeChange, isCompact, }) => {
3285
+ const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTypeChange, isCompact, disableProps, }) => {
2914
3286
  var _a, _b;
2915
3287
  const responses = sortBy(uniqBy(unsortedResponses, r => r.code), r => r.code);
2916
3288
  const [activeResponseId, setActiveResponseId] = React__namespace.useState((_b = (_a = responses[0]) === null || _a === void 0 ? void 0 : _a.code) !== null && _b !== void 0 ? _b : '');
@@ -2943,11 +3315,12 @@ const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTy
2943
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)))));
2944
3316
  return (React__namespace.createElement(mosaic.VStack, { spacing: 8, as: mosaic.Tabs, selectedId: activeResponseId, onChange: setActiveResponseId, appearance: "pill" },
2945
3317
  React__namespace.createElement(SectionTitle, { title: "Responses", isCompact: isCompact }, isCompact ? compactResponses : tabResponses),
2946
- 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 },
2947
- 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 }))))))));
2948
3320
  };
2949
3321
  Responses.displayName = 'HttpOperation.Responses';
2950
- const Response = ({ response, onMediaTypeChange }) => {
3322
+ const Response = ({ response, onMediaTypeChange, disableProps, statusCode }) => {
3323
+ var _a, _b;
2951
3324
  const { contents = [], headers = [], description } = response;
2952
3325
  const [chosenContent, setChosenContent] = React__namespace.useState(0);
2953
3326
  const [refResolver, maxRefDepth] = useSchemaInlineRefResolver();
@@ -2958,6 +3331,29 @@ const Response = ({ response, onMediaTypeChange }) => {
2958
3331
  responseContent && (onMediaTypeChange === null || onMediaTypeChange === void 0 ? void 0 : onMediaTypeChange(responseContent.mediaType));
2959
3332
  }, [responseContent]);
2960
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;
2961
3357
  return (React__namespace.createElement(mosaic.VStack, { spacing: 8, pt: 8 },
2962
3358
  description && (React__namespace.createElement(mosaic.Box, { pos: "relative" },
2963
3359
  React__namespace.createElement(MarkdownViewer, { markdown: description }),
@@ -2969,7 +3365,7 @@ const Response = ({ response, onMediaTypeChange }) => {
2969
3365
  React__namespace.createElement(SectionSubtitle, { title: "Body", id: "response-body" },
2970
3366
  React__namespace.createElement(mosaic.Flex, { flex: 1, justify: "end" },
2971
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" }))),
2972
- 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 }))))));
2973
3369
  };
2974
3370
  Response.displayName = 'HttpOperation.Response';
2975
3371
  const codeToIntentVal = (code) => {
@@ -3018,7 +3414,7 @@ const Callback = ({ data, isCompact }) => {
3018
3414
  };
3019
3415
  Callbacks.displayName = 'HttpOperation.Callback';
3020
3416
 
3021
- const HttpOperationComponent = React__namespace.memo(({ className, data: unresolvedData, layoutOptions, tryItCredentialsPolicy, tryItCorsProxy }) => {
3417
+ const HttpOperationComponent = React__namespace.memo(({ className, data: unresolvedData, layoutOptions, tryItCredentialsPolicy, tryItCorsProxy, disableProps }) => {
3022
3418
  var _a;
3023
3419
  const { nodeHasChanged } = useOptionsCtx();
3024
3420
  const data = useResolvedObject(unresolvedData);
@@ -3049,11 +3445,11 @@ const HttpOperationComponent = React__namespace.memo(({ className, data: unresol
3049
3445
  React__namespace.createElement(MarkdownViewer, { className: "HttpOperation__Description", markdown: data.description }),
3050
3446
  React__namespace.createElement(mosaic.NodeAnnotation, { change: descriptionChanged }))),
3051
3447
  React__namespace.createElement(NodeVendorExtensions, { data: data }),
3052
- React__namespace.createElement(Request, { onChange: setTextRequestBodyIndex, operation: data, hideSecurityInfo: layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideSecurityInfo, isHttpWebhookOperation: isHttpWebhookOperation(data) }),
3053
- 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 })),
3054
3450
  ((_a = data.callbacks) === null || _a === void 0 ? void 0 : _a.length) ? React__namespace.createElement(Callbacks, { callbacks: data.callbacks, isCompact: isCompact }) : null,
3055
3451
  isCompact && tryItPanel));
3056
- 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 }));
3057
3453
  });
3058
3454
  HttpOperationComponent.displayName = 'HttpOperation.Component';
3059
3455
  const HttpOperation = reactErrorBoundary.withErrorBoundary(HttpOperationComponent, {
@@ -3304,7 +3700,7 @@ const HttpServiceComponent = React__namespace.memo(({ data: unresolvedData, loca
3304
3700
  HttpServiceComponent.displayName = 'HttpService.Component';
3305
3701
  const HttpService = reactErrorBoundary.withErrorBoundary(HttpServiceComponent, { recoverableProps: ['data'] });
3306
3702
 
3307
- const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOptions, exportProps, }) => {
3703
+ const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOptions, exportProps, disableProps, }) => {
3308
3704
  var _a, _b;
3309
3705
  const [resolveRef, maxRefDepth] = useSchemaInlineRefResolver();
3310
3706
  const data = useResolvedObject(unresolvedData);
@@ -3327,14 +3723,40 @@ const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOpti
3327
3723
  exportProps && !(layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideExport) && !isCompact && React__namespace.createElement(ExportButton, Object.assign({}, exportProps))));
3328
3724
  const modelExamples = !(layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideModelExamples) && React__namespace.createElement(ModelExamples, { data: data, isCollapsible: isCompact });
3329
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;
3330
3752
  const description = (React__namespace.createElement(mosaic.VStack, { spacing: 10 },
3331
3753
  data.description && data.type === 'object' && (React__namespace.createElement(mosaic.Box, { pos: "relative" },
3332
3754
  React__namespace.createElement(MarkdownViewer, { role: "textbox", markdown: data.description }),
3333
3755
  React__namespace.createElement(mosaic.NodeAnnotation, { change: descriptionChanged }))),
3334
3756
  React__namespace.createElement(NodeVendorExtensions, { data: data }),
3335
- isCompact && modelExamples,
3336
- React__namespace.createElement(jsonSchemaViewer.JsonSchemaViewer, { resolveRef: resolveRef, maxRefDepth: maxRefDepth, schema: getOriginalObject(data), nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon, skipTopLevelDescription: true })));
3337
- 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 }));
3338
3760
  };
3339
3761
  const ModelExamples = React__namespace.memo(({ data, isCollapsible = false }) => {
3340
3762
  var _a;
@@ -3356,30 +3778,41 @@ const Model = reactErrorBoundary.withErrorBoundary(ModelComponent, { recoverable
3356
3778
 
3357
3779
  const Docs = React__namespace.memo((_a) => {
3358
3780
  var _b;
3359
- 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"]);
3360
3782
  const parsedNode = useParsedData(nodeType, nodeData);
3361
3783
  if (!parsedNode) {
3362
3784
  (_b = commonProps.nodeUnsupported) === null || _b === void 0 ? void 0 : _b.call(commonProps, 'dataEmpty');
3363
3785
  return null;
3364
3786
  }
3365
- 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));
3366
3788
  if (useNodeForRefResolving) {
3367
3789
  elem = (React__namespace.createElement(InlineRefResolverProvider, { document: parsedNode.data, resolver: refResolver, maxRefDepth: maxRefDepth }, elem));
3368
3790
  }
3369
3791
  return (React__namespace.createElement(ElementsOptionsProvider, { nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }, elem));
3370
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
+ };
3371
3803
  const ParsedDocs = (_a) => {
3372
- 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);
3373
3806
  switch (node.type) {
3374
3807
  case 'article':
3375
3808
  return React__namespace.createElement(Article, Object.assign({ data: node.data }, commonProps));
3376
3809
  case 'http_operation':
3377
3810
  case 'http_webhook':
3378
- 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));
3379
3812
  case 'http_service':
3380
3813
  return React__namespace.createElement(HttpService, Object.assign({ data: node.data }, commonProps));
3381
3814
  case 'model':
3382
- 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));
3383
3816
  default:
3384
3817
  nodeUnsupported === null || nodeUnsupported === void 0 ? void 0 : nodeUnsupported('invalidType');
3385
3818
  return null;
@@ -4125,12 +4558,25 @@ const doBundle = (data, baseUrl) => {
4125
4558
  }
4126
4559
  };
4127
4560
 
4128
- const Styled = ({ children }) => {
4129
- return (React__namespace.createElement(mosaic.Box, { className: "sl-elements sl-antialiased", fontFamily: "ui", fontSize: "base", color: "body", h: "full" }, children));
4561
+ const scopeClassName = 'sl-elements';
4562
+ class Styled extends React__namespace.Component {
4563
+ getChildContext() {
4564
+ return {
4565
+ blueprintPortalClassName: scopeClassName,
4566
+ };
4567
+ }
4568
+ render() {
4569
+ return (React__namespace.createElement(mosaic.Box, { className: "sl-elements sl-antialiased", fontFamily: "ui", fontSize: "base", color: "body", h: "full" }, this.props.children));
4570
+ }
4571
+ }
4572
+ Styled.childContextTypes = {
4573
+ blueprintPortalClassName: PropTypes__namespace.string,
4130
4574
  };
4131
4575
  function withStyles(Component) {
4132
- const Inner = props => (React__namespace.createElement(Styled, null,
4133
- React__namespace.createElement(Component, Object.assign({}, props))));
4576
+ const Inner = props => {
4577
+ return (React__namespace.createElement(Styled, null,
4578
+ React__namespace.createElement(Component, Object.assign({}, props))));
4579
+ };
4134
4580
  Inner.displayName = `withStyles(${getDisplayName(Component)})`;
4135
4581
  return Inner;
4136
4582
  }
@@ -4180,7 +4626,7 @@ const createElementClass = (Component, propDescriptors) => {
4180
4626
  }
4181
4627
  disconnectedCallback() {
4182
4628
  if (this._mountPoint) {
4183
- ReactDOM__namespace.render(null, this._mountPoint);
4629
+ ReactDOM__namespace.unmountComponentAtNode(this._mountPoint);
4184
4630
  this.removeChild(this._mountPoint);
4185
4631
  this._mountPoint = undefined;
4186
4632
  }