@stoplight/elements-core 9.0.2 → 9.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -47,6 +47,7 @@ export interface DocsProps extends BaseDocsProps {
47
47
  }
48
48
  export interface DocsComponentProps<T = unknown> extends BaseDocsProps {
49
49
  data: T;
50
+ disableProps?: any;
50
51
  }
51
52
  export declare const Docs: React.NamedExoticComponent<DocsProps>;
52
53
  export interface ParsedDocsProps extends BaseDocsProps {
@@ -3,9 +3,15 @@ export interface BodyProps {
3
3
  body: IHttpOperationRequestBody;
4
4
  onChange?: (requestBodyIndex: number) => void;
5
5
  isHttpWebhookOperation?: boolean;
6
+ disableProps?: Array<{
7
+ location: string;
8
+ paths: Array<{
9
+ path: string;
10
+ }>;
11
+ }>;
6
12
  }
7
13
  export declare const isBodyEmpty: (body?: BodyProps['body']) => boolean;
8
14
  export declare const Body: {
9
- ({ body, onChange, isHttpWebhookOperation }: BodyProps): JSX.Element | null;
15
+ ({ body, onChange, isHttpWebhookOperation, disableProps }: BodyProps): JSX.Element | null;
10
16
  displayName: string;
11
17
  };
@@ -1,7 +1,11 @@
1
1
  import { IHttpEndpointOperation } from '@stoplight/types';
2
2
  import { DocsComponentProps } from '..';
3
- export declare type HttpOperationProps = DocsComponentProps<IHttpEndpointOperation>;
4
- export declare const HttpOperation: import("react").FunctionComponent<HttpOperationProps & import("@stoplight/react-error-boundary").ErrorBoundaryProps<{}>>;
3
+ export declare type HttpOperationProps = DocsComponentProps<IHttpEndpointOperation> & {
4
+ disableProps?: Record<string, any>;
5
+ };
6
+ export declare const HttpOperation: import("react").FunctionComponent<DocsComponentProps<IHttpEndpointOperation<false>> & {
7
+ disableProps?: Record<string, any> | undefined;
8
+ } & import("@stoplight/react-error-boundary").ErrorBoundaryProps<{}>>;
5
9
  export declare function OperationHeader({ id, noHeading, hasBadges, name, isDeprecated, isInternal, hideServerUrl, method, path, }: {
6
10
  id: string;
7
11
  noHeading?: boolean;
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ interface LazySchemaTreePreviewerProps {
3
+ schema: any;
4
+ root?: any;
5
+ title?: string;
6
+ level?: number;
7
+ path?: string;
8
+ maskState?: Record<string, {
9
+ checked: boolean;
10
+ required: 0 | 1 | 2;
11
+ }>;
12
+ setMaskState?: React.Dispatch<React.SetStateAction<Record<string, {
13
+ checked: boolean;
14
+ required: 0 | 1 | 2;
15
+ }>>>;
16
+ hideData?: Array<{
17
+ path: string;
18
+ required?: boolean;
19
+ }>;
20
+ parentRequired?: string[];
21
+ propertyKey?: string;
22
+ subType?: string;
23
+ }
24
+ declare const LazySchemaTreePreviewer: React.FC<LazySchemaTreePreviewerProps>;
25
+ export default LazySchemaTreePreviewer;
@@ -5,6 +5,12 @@ interface IRequestProps {
5
5
  hideSecurityInfo?: boolean;
6
6
  onChange?: (requestBodyIndex: number) => void;
7
7
  isHttpWebhookOperation?: boolean;
8
+ disableProps?: Array<{
9
+ location: string;
10
+ paths: Array<{
11
+ path: string;
12
+ }>;
13
+ }>;
8
14
  }
9
15
  export declare const Request: React.FunctionComponent<IRequestProps>;
10
16
  export {};
@@ -1,12 +1,22 @@
1
1
  import { IHttpOperationResponse } from '@stoplight/types';
2
+ interface DisablePropEntry {
3
+ location: string;
4
+ paths: Array<{
5
+ path: string;
6
+ }>;
7
+ }
8
+ interface DisablePropsByStatus {
9
+ [statusCode: string]: DisablePropEntry[];
10
+ }
2
11
  interface ResponsesProps {
3
12
  responses: IHttpOperationResponse[];
4
13
  onMediaTypeChange?: (mediaType: string) => void;
5
14
  onStatusCodeChange?: (statusCode: string) => void;
6
15
  isCompact?: boolean;
16
+ disableProps?: DisablePropsByStatus;
7
17
  }
8
18
  export declare const Responses: {
9
- ({ responses: unsortedResponses, onStatusCodeChange, onMediaTypeChange, isCompact, }: ResponsesProps): JSX.Element | null;
19
+ ({ responses: unsortedResponses, onStatusCodeChange, onMediaTypeChange, isCompact, disableProps, }: ResponsesProps): JSX.Element | null;
10
20
  displayName: string;
11
21
  };
12
22
  export {};
package/index.esm.js CHANGED
@@ -114,6 +114,8 @@ const isResolvedObjectProxy = (someObject) => {
114
114
  return !!someObject[originalObjectSymbol];
115
115
  };
116
116
  const getOriginalObject = (resolvedObject) => {
117
+ if (!resolvedObject)
118
+ return resolvedObject;
117
119
  const originalObject = resolvedObject[originalObjectSymbol] || resolvedObject;
118
120
  if (!originalObject) {
119
121
  return resolvedObject;
@@ -2734,13 +2736,214 @@ const PanelContent = ({ schemes }) => {
2734
2736
  })));
2735
2737
  };
2736
2738
 
2739
+ const TYPES = ['string', 'integer', 'boolean', 'any', 'number'];
2740
+ function resolvePointer(obj, pointer) {
2741
+ const parts = pointer.replace(/^#\//, '').split('/');
2742
+ return parts.reduce((acc, key) => acc && acc[key], obj);
2743
+ }
2744
+ function detectCircularPath(path) {
2745
+ const ignored = ['properties', 'items'];
2746
+ const parts = path.split('/').filter(part => !ignored.includes(part));
2747
+ for (let i = 0; i < parts.length - 1; i++) {
2748
+ const current = parts[i];
2749
+ const rest = parts.slice(i + 1);
2750
+ if (rest.includes(current)) {
2751
+ return true;
2752
+ }
2753
+ }
2754
+ return false;
2755
+ }
2756
+ function dereference(node, root, visited = new WeakSet(), depth = 0, maxDepth = 10) {
2757
+ if (!node || typeof node !== 'object')
2758
+ return node;
2759
+ if (depth > maxDepth)
2760
+ return node;
2761
+ if (node.$ref || node['x-iata-$ref']) {
2762
+ let refPath = node.$ref || node['x-iata-$ref'];
2763
+ refPath = refPath.replace('__bundled__', 'definitions');
2764
+ if (visited.has(node))
2765
+ return { circular: true, $ref: refPath, title: node.title, type: 'any', description: node.description };
2766
+ visited.add(node);
2767
+ const target = resolvePointer(root, refPath);
2768
+ if (!target)
2769
+ return node;
2770
+ const result = Object.assign({}, target);
2771
+ if ('description' in node)
2772
+ result.description = node.description;
2773
+ if ('title' in node)
2774
+ result.title = node.title;
2775
+ return dereference(result, root, visited, depth + 1, maxDepth);
2776
+ }
2777
+ if (Array.isArray(node)) {
2778
+ return node.map(item => dereference(item, root, visited, depth + 1, maxDepth));
2779
+ }
2780
+ const result = {};
2781
+ for (const key in node) {
2782
+ result[key] = dereference(node[key], root, visited, depth + 1, maxDepth);
2783
+ }
2784
+ return result;
2785
+ }
2786
+ const trimSlashes = (str) => {
2787
+ return str.replace(/^\/|\/$/g, '');
2788
+ };
2789
+ const LazySchemaTreePreviewer = ({ schema, root = schema, title, level = 1, path = '', hideData = [], parentRequired, propertyKey, subType, }) => {
2790
+ var _a, _b, _c, _d;
2791
+ const [expanded, setExpanded] = useState(false);
2792
+ const isRoot = level === 1 && (title === undefined || path === '');
2793
+ useState(() => {
2794
+ const disabledPaths = hideData || [];
2795
+ const initialState = {};
2796
+ if (disabledPaths) {
2797
+ for (const p of disabledPaths) {
2798
+ const { path } = p;
2799
+ initialState[path] = { checked: false, required: 0 };
2800
+ }
2801
+ }
2802
+ return initialState;
2803
+ });
2804
+ const shouldHideNode = useMemo(() => {
2805
+ const currentPath = trimSlashes(path);
2806
+ const data = hideData.some(hideEntry => {
2807
+ const hideEntryPath = trimSlashes(hideEntry.path);
2808
+ return hideEntryPath === currentPath;
2809
+ });
2810
+ return data;
2811
+ }, [path, hideData]);
2812
+ if (!schema || shouldHideNode) {
2813
+ return null;
2814
+ }
2815
+ 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';
2816
+ const handleToggle = () => {
2817
+ const circular = detectCircularPath(path);
2818
+ if (!circular) {
2819
+ setExpanded(prev => !prev);
2820
+ }
2821
+ };
2822
+ const renderChildren = () => {
2823
+ var _a, _b, _c, _d;
2824
+ if (!expanded && !isRoot)
2825
+ return null;
2826
+ const children = [];
2827
+ if ((schema === null || schema === void 0 ? void 0 : schema.type) === 'object' && (schema === null || schema === void 0 ? void 0 : schema.properties)) {
2828
+ for (const [key, child] of Object.entries(schema === null || schema === void 0 ? void 0 : schema.properties)) {
2829
+ const childPath = `${path}/properties/${key}`;
2830
+ const shouldHideChild = hideData.some(hideEntry => trimSlashes(hideEntry.path) === trimSlashes(childPath));
2831
+ const resolved = dereference(child, root);
2832
+ if (!shouldHideChild) {
2833
+ children.push(React__default.createElement("li", { key: key },
2834
+ React__default.createElement(LazySchemaTreePreviewer, { schema: resolved, root: root, title: key, level: level + 1, path: childPath, hideData: hideData, 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 })));
2835
+ }
2836
+ }
2837
+ }
2838
+ else if ((schema === null || schema === void 0 ? void 0 : schema.type) === 'array' &&
2839
+ (schema === null || schema === void 0 ? void 0 : schema.items) &&
2840
+ Object.keys(schema === null || schema === void 0 ? void 0 : schema.items).length > 0 &&
2841
+ !((_b = schema === null || schema === void 0 ? void 0 : schema.items) === null || _b === void 0 ? void 0 : _b.circular)) {
2842
+ const resolvedItems = dereference(schema === null || schema === void 0 ? void 0 : schema.items, root);
2843
+ const itemsPath = `${path}/items`;
2844
+ if (resolvedItems && resolvedItems.type === 'object' && resolvedItems.properties) {
2845
+ for (const [key, child] of Object.entries(resolvedItems.properties)) {
2846
+ const childPath = `${itemsPath}/properties/${key}`;
2847
+ const shouldHideChild = hideData.some(hideEntry => trimSlashes(hideEntry.path) === trimSlashes(childPath));
2848
+ if (!shouldHideChild) {
2849
+ children.push(React__default.createElement("li", { key: key },
2850
+ React__default.createElement(LazySchemaTreePreviewer, { schema: dereference(child, root), root: root, title: key, level: level + 2, path: childPath, hideData: hideData, parentRequired: resolvedItems.required, propertyKey: key, subType: (_c = resolvedItems === null || resolvedItems === void 0 ? void 0 : resolvedItems.items) === null || _c === void 0 ? void 0 : _c.type })));
2851
+ }
2852
+ }
2853
+ }
2854
+ else if (resolvedItems && resolvedItems.type === 'array' && resolvedItems.items.length > 0) {
2855
+ const childPath = `${path}/items`;
2856
+ const shouldHideChild = hideData.some(hideEntry => trimSlashes(hideEntry.path) === trimSlashes(childPath));
2857
+ if (!shouldHideChild) {
2858
+ children.push(React__default.createElement("li", { key: "items" },
2859
+ React__default.createElement(LazySchemaTreePreviewer, { schema: resolvedItems, root: root, title: "items", level: level + 1, path: childPath, hideData: hideData, 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 })));
2860
+ }
2861
+ }
2862
+ }
2863
+ return children.length > 0 ? React__default.createElement("ul", { className: "ml-6 border-l border-gray-200 pl-2" }, children) : null;
2864
+ };
2865
+ const renderMinEnums = (schema) => {
2866
+ if (!schema || typeof schema !== 'object')
2867
+ return null;
2868
+ const boxStyle = {
2869
+ background: 'rgba(245, 247, 250, 0.5)',
2870
+ border: '1px solid #a0aec0',
2871
+ borderRadius: '4px',
2872
+ padding: '0px 2px',
2873
+ display: 'inline-block',
2874
+ overflowWrap: 'break-word',
2875
+ textAlign: 'left',
2876
+ maxWidth: 'fit-content',
2877
+ maxHeight: 'fit-content',
2878
+ };
2879
+ if ('minItems' in schema) {
2880
+ const schemaWithMinItems = schema;
2881
+ if (typeof schemaWithMinItems.minItems === 'number') {
2882
+ return (React__default.createElement(Box, { className: "sl-text-muted", fontFamily: "ui", fontWeight: "normal", mr: 2, style: boxStyle }, `>=${schemaWithMinItems.minItems} items`));
2883
+ }
2884
+ }
2885
+ if ('enum' in schema && Array.isArray(schema.enum)) {
2886
+ return (React__default.createElement("div", null,
2887
+ "Allowed values:",
2888
+ ' ',
2889
+ schema.enum.map((val, idx) => (React__default.createElement(Box, { key: idx, className: "sl-text-muted", fontFamily: "ui", fontWeight: "normal", mr: 2, style: boxStyle }, val)))));
2890
+ }
2891
+ return null;
2892
+ };
2893
+ const isRequired = parentRequired && propertyKey && parentRequired.includes(propertyKey);
2894
+ let showRequiredLabel = false;
2895
+ const hideDataEntry = hideData.find(hideEntry => trimSlashes(hideEntry.path) === trimSlashes(path));
2896
+ if ((hideDataEntry === null || hideDataEntry === void 0 ? void 0 : hideDataEntry.required) === true || ((hideDataEntry === null || hideDataEntry === void 0 ? void 0 : hideDataEntry.required) === undefined && isRequired)) {
2897
+ showRequiredLabel = true;
2898
+ }
2899
+ return (React__default.createElement("div", { className: "mb-1" },
2900
+ React__default.createElement(Flex, { maxW: "full", pl: 3, py: 2, "data-test": "schema-row", pos: "relative" },
2901
+ React__default.createElement(VStack, { spacing: 1, maxW: "full", className: "w-full" },
2902
+ React__default.createElement(Flex, { onClick: !isRoot ? handleToggle : undefined, className: `w-full ${isRoot ? '' : 'cursor-pointer'}` },
2903
+ !isRoot ? (React__default.createElement(Box, { mr: 2, className: "sl-font-mono sl-font-semibold sl-mr-2" },
2904
+ !TYPES.includes(schema === null || schema === void 0 ? void 0 : schema.type) &&
2905
+ !detectCircularPath(path) &&
2906
+ !((_b = schema === null || schema === void 0 ? void 0 : schema.items) === null || _b === void 0 ? void 0 : _b.circular) &&
2907
+ !(schema === null || schema === void 0 ? void 0 : schema.circular) ? (React__default.createElement("i", { role: "img", "aria-hidden": "true", className: `sl-icon fal ${expanded ? 'fa-chevron-down' : 'fa-chevron-right'} fa-fw fa-sm` })) : (React__default.createElement("span", { className: "sl-icon fal fa-fw fa-sm", "aria-hidden": "true" })),
2908
+ ' ' + displayTitle)) : null,
2909
+ !isRoot ? (React__default.createElement(Box, { mr: 2 },
2910
+ React__default.createElement("span", { className: "sl-truncate sl-text-muted" },
2911
+ (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.type) || (root === null || root === void 0 ? void 0 : root.title),
2912
+ (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,
2913
+ subType ? `[${subType}]` : ''),
2914
+ React__default.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))) : null),
2915
+ React__default.createElement(Flex, { pl: 1, w: "full", align: "start", direction: "col", style: { overflow: 'visible', paddingLeft: '20px' } },
2916
+ (schema === null || schema === void 0 ? void 0 : schema.description) && (React__default.createElement(Box, { fontFamily: "ui", fontWeight: "light" },
2917
+ React__default.createElement("span", { className: "sl-prose sl-markdown-viewer", style: { fontSize: '12px' } }, schema === null || schema === void 0 ? void 0 : schema.description))),
2918
+ !isRoot && (schema === null || schema === void 0 ? void 0 : schema.examples) !== undefined && (React__default.createElement(Flex, { align: "center", mb: 1, style: { flexWrap: 'wrap' } },
2919
+ React__default.createElement("span", { className: "text-gray-500", style: { marginRight: 8, flexShrink: 0 } }, "Example"),
2920
+ React__default.createElement(Box, { className: "sl-text-muted", fontFamily: "ui", fontWeight: "normal", mr: 2, style: {
2921
+ background: 'rgba(245, 247, 250, 0.5)',
2922
+ border: '1px solid #a0aec0',
2923
+ borderRadius: '4px',
2924
+ padding: '4px 8px',
2925
+ display: 'inline-block',
2926
+ overflowWrap: 'break-word',
2927
+ textAlign: 'left',
2928
+ maxWidth: '530px',
2929
+ } }, JSON.stringify(schema === null || schema === void 0 ? void 0 : schema.examples))))),
2930
+ React__default.createElement(Flex, { pl: 1, w: "full", align: "start", direction: "col", style: { overflow: 'visible', paddingLeft: '20px' } }, schema &&
2931
+ typeof schema === 'object' &&
2932
+ ('minItems' in schema || 'enum' in schema) &&
2933
+ renderMinEnums(schema))),
2934
+ !isRoot && (React__default.createElement("label", { className: "inline-flex items-top ml-2" },
2935
+ React__default.createElement(Box, { mr: 2, fontFamily: "ui", fontWeight: "normal" }, showRequiredLabel && (React__default.createElement("div", { className: "sl-ml-2 sl-text-warning" },
2936
+ React__default.createElement("span", { style: { marginLeft: '10px' } }, "required"))))))),
2937
+ renderChildren()));
2938
+ };
2939
+
2737
2940
  const isBodyEmpty = (body) => {
2738
2941
  if (!body)
2739
2942
  return true;
2740
2943
  const { contents = [], description } = body;
2741
2944
  return contents.length === 0 && !(description === null || description === void 0 ? void 0 : description.trim());
2742
2945
  };
2743
- const Body = ({ body, onChange, isHttpWebhookOperation = false }) => {
2946
+ const Body = ({ body, onChange, isHttpWebhookOperation = false, disableProps }) => {
2744
2947
  var _a;
2745
2948
  const [refResolver, maxRefDepth] = useSchemaInlineRefResolver();
2746
2949
  const [chosenContent, setChosenContent] = React.useState(0);
@@ -2753,13 +2956,25 @@ const Body = ({ body, onChange, isHttpWebhookOperation = false }) => {
2753
2956
  const { contents = [], description } = body;
2754
2957
  const schema = (_a = contents[chosenContent]) === null || _a === void 0 ? void 0 : _a.schema;
2755
2958
  const descriptionChanged = nodeHasChanged === null || nodeHasChanged === void 0 ? void 0 : nodeHasChanged({ nodeId: body.id, attr: 'description' });
2959
+ const getMaskProperties = () => {
2960
+ const disablePropsConfig = disableProps || [];
2961
+ const absolutePathsToHide = [];
2962
+ disablePropsConfig.forEach(configEntry => {
2963
+ const { location, paths } = configEntry;
2964
+ paths.forEach(item => {
2965
+ const fullPath = `${location}/${item.path}`;
2966
+ absolutePathsToHide.push({ path: fullPath });
2967
+ });
2968
+ });
2969
+ return absolutePathsToHide;
2970
+ };
2756
2971
  return (React.createElement(VStack, { spacing: 6 },
2757
2972
  React.createElement(SectionSubtitle, { title: "Body", id: "request-body" }, contents.length > 0 && (React.createElement(Flex, { flex: 1, justify: "end" },
2758
2973
  React.createElement(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" })))),
2759
2974
  description && (React.createElement(Box, { pos: "relative" },
2760
2975
  React.createElement(MarkdownViewer, { markdown: description }),
2761
2976
  React.createElement(NodeAnnotation, { change: descriptionChanged }))),
2762
- isJSONSchema(schema) && (React.createElement(JsonSchemaViewer, { resolveRef: refResolver, maxRefDepth: maxRefDepth, schema: getOriginalObject(schema), viewMode: isHttpWebhookOperation ? 'standalone' : 'write', renderRootTreeLines: true, nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }))));
2977
+ schema && localStorage.getItem('use_new_mask_workflow') === 'true' ? (React.createElement(LazySchemaTreePreviewer, { schema: schema, hideData: getMaskProperties() })) : (isJSONSchema(schema) && (React.createElement(JsonSchemaViewer, { resolveRef: refResolver, maxRefDepth: maxRefDepth, schema: getOriginalObject(schema), viewMode: isHttpWebhookOperation ? 'standalone' : 'write', renderRootTreeLines: true, nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon })))));
2763
2978
  };
2764
2979
  Body.displayName = 'HttpOperation.Body';
2765
2980
 
@@ -2826,7 +3041,7 @@ const httpOperationParamsToSchema = ({ parameters, parameterType }) => {
2826
3041
  return schema;
2827
3042
  };
2828
3043
 
2829
- const Request = ({ operation: { request, request: { path: pathParams = [], headers: headerParams = [], cookie: cookieParams = [], body, query: queryParams = [], } = {}, security, }, hideSecurityInfo, onChange, isHttpWebhookOperation = false, }) => {
3044
+ const Request = ({ operation: { request, request: { path: pathParams = [], headers: headerParams = [], cookie: cookieParams = [], body, query: queryParams = [], } = {}, security, }, hideSecurityInfo, onChange, isHttpWebhookOperation = false, disableProps, }) => {
2830
3045
  if (!request || typeof request !== 'object')
2831
3046
  return null;
2832
3047
  const bodyIsEmpty = isBodyEmpty(body);
@@ -2854,7 +3069,7 @@ const Request = ({ operation: { request, request: { path: pathParams = [], heade
2854
3069
  cookieParams.length > 0 && (React.createElement(VStack, { spacing: 5 },
2855
3070
  React.createElement(SectionSubtitle, { title: "Cookies", id: "request-cookies" }),
2856
3071
  React.createElement(Parameters, { parameterType: "cookie", parameters: cookieParams }))),
2857
- body && React.createElement(Body, { onChange: onChange, body: body, isHttpWebhookOperation: isHttpWebhookOperation })));
3072
+ body && (React.createElement(Body, { onChange: onChange, body: body, isHttpWebhookOperation: isHttpWebhookOperation, disableProps: disableProps }))));
2858
3073
  };
2859
3074
  Request.displayName = 'HttpOperation.Request';
2860
3075
  const schemeExpandedState = atomWithStorage('HttpOperation_security_expanded', {});
@@ -2885,7 +3100,7 @@ const OptionalMessage$1 = () => {
2885
3100
  return React.createElement(Callout, { appearance: "outline" }, OptionalSecurityMessage);
2886
3101
  };
2887
3102
 
2888
- const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTypeChange, isCompact, }) => {
3103
+ const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTypeChange, isCompact, disableProps, }) => {
2889
3104
  var _a, _b;
2890
3105
  const responses = sortBy(uniqBy(unsortedResponses, r => r.code), r => r.code);
2891
3106
  const [activeResponseId, setActiveResponseId] = React.useState((_b = (_a = responses[0]) === null || _a === void 0 ? void 0 : _a.code) !== null && _b !== void 0 ? _b : '');
@@ -2918,11 +3133,11 @@ const Responses = ({ responses: unsortedResponses, onStatusCodeChange, onMediaTy
2918
3133
  const tabResponses = (React.createElement(TabList, { density: "compact" }, responses.map(({ code }) => (React.createElement(Tab, { key: code, id: code, intent: codeToIntentVal(code) }, code)))));
2919
3134
  return (React.createElement(VStack, { spacing: 8, as: Tabs, selectedId: activeResponseId, onChange: setActiveResponseId, appearance: "pill" },
2920
3135
  React.createElement(SectionTitle, { title: "Responses", isCompact: isCompact }, isCompact ? compactResponses : tabResponses),
2921
- isCompact ? (React.createElement(Response, { response: response, onMediaTypeChange: onMediaTypeChange })) : (React.createElement(TabPanels, { p: 0 }, responses.map(response => (React.createElement(TabPanel, { key: response.code, id: response.code },
2922
- React.createElement(Response, { response: response, onMediaTypeChange: onMediaTypeChange }))))))));
3136
+ isCompact ? (React.createElement(Response, { response: response, onMediaTypeChange: onMediaTypeChange, disableProps: disableProps, statusCode: activeResponseId })) : (React.createElement(TabPanels, { p: 0 }, responses.map(response => (React.createElement(TabPanel, { key: response.code, id: response.code },
3137
+ React.createElement(Response, { response: response, onMediaTypeChange: onMediaTypeChange, disableProps: disableProps, statusCode: response.code }))))))));
2923
3138
  };
2924
3139
  Responses.displayName = 'HttpOperation.Responses';
2925
- const Response = ({ response, onMediaTypeChange }) => {
3140
+ const Response = ({ response, onMediaTypeChange, disableProps, statusCode }) => {
2926
3141
  const { contents = [], headers = [], description } = response;
2927
3142
  const [chosenContent, setChosenContent] = React.useState(0);
2928
3143
  const [refResolver, maxRefDepth] = useSchemaInlineRefResolver();
@@ -2933,6 +3148,18 @@ const Response = ({ response, onMediaTypeChange }) => {
2933
3148
  responseContent && (onMediaTypeChange === null || onMediaTypeChange === void 0 ? void 0 : onMediaTypeChange(responseContent.mediaType));
2934
3149
  }, [responseContent]);
2935
3150
  const descriptionChanged = nodeHasChanged === null || nodeHasChanged === void 0 ? void 0 : nodeHasChanged({ nodeId: response.id, attr: 'description' });
3151
+ const getMaskProperties = () => {
3152
+ if (!disableProps || !statusCode)
3153
+ return [];
3154
+ const configEntries = disableProps[statusCode] || [];
3155
+ const absolutePathsToHide = [];
3156
+ configEntries.forEach(({ location, paths }) => {
3157
+ paths.forEach(item => {
3158
+ absolutePathsToHide.push({ path: `${location}/${item.path}` });
3159
+ });
3160
+ });
3161
+ return absolutePathsToHide;
3162
+ };
2936
3163
  return (React.createElement(VStack, { spacing: 8, pt: 8 },
2937
3164
  description && (React.createElement(Box, { pos: "relative" },
2938
3165
  React.createElement(MarkdownViewer, { markdown: description }),
@@ -2944,7 +3171,7 @@ const Response = ({ response, onMediaTypeChange }) => {
2944
3171
  React.createElement(SectionSubtitle, { title: "Body", id: "response-body" },
2945
3172
  React.createElement(Flex, { flex: 1, justify: "end" },
2946
3173
  React.createElement(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" }))),
2947
- schema && (React.createElement(JsonSchemaViewer, { schema: getOriginalObject(schema), resolveRef: refResolver, maxRefDepth: maxRefDepth, viewMode: "read", parentCrumbs: ['responses', response.code], renderRootTreeLines: true, nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }))))));
3174
+ schema && localStorage.getItem('use_new_mask_workflow') === 'true' ? (React.createElement(LazySchemaTreePreviewer, { schema: schema, path: "", hideData: getMaskProperties() })) : (React.createElement(JsonSchemaViewer, { schema: getOriginalObject(schema), resolveRef: refResolver, maxRefDepth: maxRefDepth, viewMode: "read", parentCrumbs: ['responses', response.code], renderRootTreeLines: true, nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }))))));
2948
3175
  };
2949
3176
  Response.displayName = 'HttpOperation.Response';
2950
3177
  const codeToIntentVal = (code) => {
@@ -2990,7 +3217,7 @@ const Callback = ({ data, isCompact }) => {
2990
3217
  };
2991
3218
  Callbacks.displayName = 'HttpOperation.Callback';
2992
3219
 
2993
- const HttpOperationComponent = React.memo(({ className, data: unresolvedData, layoutOptions, tryItCredentialsPolicy, tryItCorsProxy }) => {
3220
+ const HttpOperationComponent = React.memo(({ className, data: unresolvedData, layoutOptions, tryItCredentialsPolicy, tryItCorsProxy, disableProps }) => {
2994
3221
  var _a;
2995
3222
  const { nodeHasChanged } = useOptionsCtx();
2996
3223
  const data = useResolvedObject(unresolvedData);
@@ -3021,8 +3248,8 @@ const HttpOperationComponent = React.memo(({ className, data: unresolvedData, la
3021
3248
  React.createElement(MarkdownViewer, { className: "HttpOperation__Description", markdown: data.description }),
3022
3249
  React.createElement(NodeAnnotation, { change: descriptionChanged }))),
3023
3250
  React.createElement(NodeVendorExtensions, { data: data }),
3024
- React.createElement(Request, { onChange: setTextRequestBodyIndex, operation: data, hideSecurityInfo: layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideSecurityInfo, isHttpWebhookOperation: isHttpWebhookOperation(data) }),
3025
- data.responses && (React.createElement(Responses, { responses: data.responses, onMediaTypeChange: setResponseMediaType, onStatusCodeChange: setResponseStatusCode, isCompact: isCompact })),
3251
+ React.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 }),
3252
+ data.responses && (React.createElement(Responses, { responses: data.responses, onMediaTypeChange: setResponseMediaType, onStatusCodeChange: setResponseStatusCode, isCompact: isCompact, disableProps: disableProps === null || disableProps === void 0 ? void 0 : disableProps.response })),
3026
3253
  ((_a = data.callbacks) === null || _a === void 0 ? void 0 : _a.length) ? React.createElement(Callbacks, { callbacks: data.callbacks, isCompact: isCompact }) : null,
3027
3254
  isCompact && tryItPanel));
3028
3255
  return (React.createElement(TwoColumnLayout, { ref: layoutRef, className: cn('HttpOperation', className), header: header, left: description, right: !isCompact && tryItPanel }));
@@ -3276,7 +3503,7 @@ const HttpServiceComponent = React.memo(({ data: unresolvedData, location = {},
3276
3503
  HttpServiceComponent.displayName = 'HttpService.Component';
3277
3504
  const HttpService = withErrorBoundary(HttpServiceComponent, { recoverableProps: ['data'] });
3278
3505
 
3279
- const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOptions, exportProps, }) => {
3506
+ const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOptions, exportProps, disableProps, }) => {
3280
3507
  var _a, _b;
3281
3508
  const [resolveRef, maxRefDepth] = useSchemaInlineRefResolver();
3282
3509
  const data = useResolvedObject(unresolvedData);
@@ -3299,13 +3526,27 @@ const ModelComponent = ({ data: unresolvedData, className, nodeTitle, layoutOpti
3299
3526
  exportProps && !(layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideExport) && !isCompact && React.createElement(ExportButton, Object.assign({}, exportProps))));
3300
3527
  const modelExamples = !(layoutOptions === null || layoutOptions === void 0 ? void 0 : layoutOptions.hideModelExamples) && React.createElement(ModelExamples, { data: data, isCollapsible: isCompact });
3301
3528
  const descriptionChanged = nodeHasChanged === null || nodeHasChanged === void 0 ? void 0 : nodeHasChanged({ nodeId, attr: 'description' });
3529
+ const getMaskProperties = () => {
3530
+ const disablePropsConfig = disableProps === null || disableProps === void 0 ? void 0 : disableProps.models;
3531
+ const absolutePathsToHide = [];
3532
+ if (disableProps === null || disableProps === void 0 ? void 0 : disableProps.models) {
3533
+ disablePropsConfig.forEach((configEntry) => {
3534
+ const { location, paths } = configEntry;
3535
+ paths.forEach((item) => {
3536
+ const fullPath = `${location}/${item.path}`;
3537
+ absolutePathsToHide.push({ path: fullPath });
3538
+ });
3539
+ });
3540
+ }
3541
+ return absolutePathsToHide;
3542
+ };
3302
3543
  const description = (React.createElement(VStack, { spacing: 10 },
3303
3544
  data.description && data.type === 'object' && (React.createElement(Box, { pos: "relative" },
3304
3545
  React.createElement(MarkdownViewer, { role: "textbox", markdown: data.description }),
3305
3546
  React.createElement(NodeAnnotation, { change: descriptionChanged }))),
3306
3547
  React.createElement(NodeVendorExtensions, { data: data }),
3307
- isCompact && modelExamples,
3308
- React.createElement(JsonSchemaViewer, { resolveRef: resolveRef, maxRefDepth: maxRefDepth, schema: getOriginalObject(data), nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon, skipTopLevelDescription: true })));
3548
+ localStorage.getItem('use_new_mask_workflow') !== 'true' && isCompact && modelExamples,
3549
+ data && localStorage.getItem('use_new_mask_workflow') === 'true' ? (React.createElement(LazySchemaTreePreviewer, { schema: data, hideData: getMaskProperties() })) : (React.createElement(JsonSchemaViewer, { resolveRef: resolveRef, maxRefDepth: maxRefDepth, schema: getOriginalObject(data), nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon, skipTopLevelDescription: true }))));
3309
3550
  return (React.createElement(TwoColumnLayout, { ref: layoutRef, className: cn('Model', className), header: header, left: description, right: !isCompact && modelExamples }));
3310
3551
  };
3311
3552
  const ModelExamples = React.memo(({ data, isCollapsible = false }) => {
@@ -3341,17 +3582,19 @@ const Docs = React.memo((_a) => {
3341
3582
  return (React.createElement(ElementsOptionsProvider, { nodeHasChanged: nodeHasChanged, renderExtensionAddon: renderExtensionAddon }, elem));
3342
3583
  });
3343
3584
  const ParsedDocs = (_a) => {
3585
+ var _b;
3344
3586
  var { node, nodeUnsupported } = _a, commonProps = __rest(_a, ["node", "nodeUnsupported"]);
3587
+ const disableProps = (_b = node.data) === null || _b === void 0 ? void 0 : _b.disableProps;
3345
3588
  switch (node.type) {
3346
3589
  case 'article':
3347
3590
  return React.createElement(Article, Object.assign({ data: node.data }, commonProps));
3348
3591
  case 'http_operation':
3349
3592
  case 'http_webhook':
3350
- return React.createElement(HttpOperation, Object.assign({ data: node.data }, commonProps));
3593
+ return React.createElement(HttpOperation, Object.assign({ data: node.data, disableProps: disableProps }, commonProps));
3351
3594
  case 'http_service':
3352
3595
  return React.createElement(HttpService, Object.assign({ data: node.data }, commonProps));
3353
3596
  case 'model':
3354
- return React.createElement(Model, Object.assign({ data: node.data }, commonProps));
3597
+ return React.createElement(Model, Object.assign({ data: node.data, disableProps: disableProps }, commonProps));
3355
3598
  default:
3356
3599
  nodeUnsupported === null || nodeUnsupported === void 0 ? void 0 : nodeUnsupported('invalidType');
3357
3600
  return null;