@typespec/playground 0.1.0-alpha.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -0
- package/dist/src/browser-host.d.ts +11 -0
- package/dist/src/browser-host.d.ts.map +1 -0
- package/dist/src/browser-host.js +129 -0
- package/dist/src/browser-host.js.map +1 -0
- package/dist/src/core.d.ts +7 -0
- package/dist/src/core.d.ts.map +1 -0
- package/dist/src/core.js +17 -0
- package/dist/src/core.js.map +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/manifest.d.ts +3 -0
- package/dist/src/manifest.d.ts.map +1 -0
- package/dist/src/manifest.js +5 -0
- package/dist/src/manifest.js.map +1 -0
- package/dist/src/monaco-worker.d.ts +2 -0
- package/dist/src/monaco-worker.d.ts.map +1 -0
- package/dist/src/monaco-worker.js +18 -0
- package/dist/src/monaco-worker.js.map +1 -0
- package/dist/src/react/diagnostic-list.d.ts +11 -0
- package/dist/src/react/diagnostic-list.d.ts.map +1 -0
- package/dist/src/react/diagnostic-list.js +16 -0
- package/dist/src/react/diagnostic-list.js.map +1 -0
- package/dist/src/react/editor-command-bar.d.ts +19 -0
- package/dist/src/react/editor-command-bar.d.ts.map +1 -0
- package/dist/src/react/editor-command-bar.js +15 -0
- package/dist/src/react/editor-command-bar.js.map +1 -0
- package/dist/src/react/editor.d.ts +14 -0
- package/dist/src/react/editor.d.ts.map +1 -0
- package/dist/src/react/editor.js +37 -0
- package/dist/src/react/editor.js.map +1 -0
- package/dist/src/react/emitter-dropdown.d.ts +8 -0
- package/dist/src/react/emitter-dropdown.d.ts.map +1 -0
- package/dist/src/react/emitter-dropdown.js +13 -0
- package/dist/src/react/emitter-dropdown.js.map +1 -0
- package/dist/src/react/error-tab.d.ts +12 -0
- package/dist/src/react/error-tab.d.ts.map +1 -0
- package/dist/src/react/error-tab.js +20 -0
- package/dist/src/react/error-tab.js.map +1 -0
- package/dist/src/react/file-output.d.ts +12 -0
- package/dist/src/react/file-output.d.ts.map +1 -0
- package/dist/src/react/file-output.js +31 -0
- package/dist/src/react/file-output.js.map +1 -0
- package/dist/src/react/footer.d.ts +3 -0
- package/dist/src/react/footer.d.ts.map +1 -0
- package/dist/src/react/footer.js +29 -0
- package/dist/src/react/footer.js.map +1 -0
- package/dist/src/react/hooks.d.ts +15 -0
- package/dist/src/react/hooks.d.ts.map +1 -0
- package/dist/src/react/hooks.js +50 -0
- package/dist/src/react/hooks.js.map +1 -0
- package/dist/src/react/index.d.ts +4 -0
- package/dist/src/react/index.d.ts.map +1 -0
- package/dist/src/react/index.js +4 -0
- package/dist/src/react/index.js.map +1 -0
- package/dist/src/react/output-tabs.d.ts +19 -0
- package/dist/src/react/output-tabs.d.ts.map +1 -0
- package/dist/src/react/output-tabs.js +38 -0
- package/dist/src/react/output-tabs.js.map +1 -0
- package/dist/src/react/output-view.d.ts +9 -0
- package/dist/src/react/output-view.d.ts.map +1 -0
- package/dist/src/react/output-view.js +99 -0
- package/dist/src/react/output-view.js.map +1 -0
- package/dist/src/react/playground.d.ts +56 -0
- package/dist/src/react/playground.d.ts.map +1 -0
- package/dist/src/react/playground.js +186 -0
- package/dist/src/react/playground.js.map +1 -0
- package/dist/src/react/samples-dropdown.d.ts +9 -0
- package/dist/src/react/samples-dropdown.d.ts.map +1 -0
- package/dist/src/react/samples-dropdown.js +15 -0
- package/dist/src/react/samples-dropdown.js.map +1 -0
- package/dist/src/react/settings/compiler-settings.d.ts +11 -0
- package/dist/src/react/settings/compiler-settings.d.ts.map +1 -0
- package/dist/src/react/settings/compiler-settings.js +42 -0
- package/dist/src/react/settings/compiler-settings.js.map +1 -0
- package/dist/src/react/settings/emitter-options-form.d.ts +10 -0
- package/dist/src/react/settings/emitter-options-form.d.ts.map +1 -0
- package/dist/src/react/settings/emitter-options-form.js +39 -0
- package/dist/src/react/settings/emitter-options-form.js.map +1 -0
- package/dist/src/react/settings/linter-form.d.ts +10 -0
- package/dist/src/react/settings/linter-form.d.ts.map +1 -0
- package/dist/src/react/settings/linter-form.js +33 -0
- package/dist/src/react/settings/linter-form.js.map +1 -0
- package/dist/src/react/standalone.d.ts +9 -0
- package/dist/src/react/standalone.d.ts.map +1 -0
- package/dist/src/react/standalone.js +63 -0
- package/dist/src/react/standalone.js.map +1 -0
- package/dist/src/react/swagger-ui.d.ts +6 -0
- package/dist/src/react/swagger-ui.d.ts.map +1 -0
- package/dist/src/react/swagger-ui.js +19 -0
- package/dist/src/react/swagger-ui.js.map +1 -0
- package/dist/src/react/types.d.ts +26 -0
- package/dist/src/react/types.d.ts.map +1 -0
- package/dist/src/react/types.js +2 -0
- package/dist/src/react/types.js.map +1 -0
- package/dist/src/react/typespec-editor.d.ts +12 -0
- package/dist/src/react/typespec-editor.d.ts.map +1 -0
- package/dist/src/react/typespec-editor.js +30 -0
- package/dist/src/react/typespec-editor.js.map +1 -0
- package/dist/src/react/viewers.d.ts +3 -0
- package/dist/src/react/viewers.d.ts.map +1 -0
- package/dist/src/react/viewers.js +8 -0
- package/dist/src/react/viewers.js.map +1 -0
- package/dist/src/services.d.ts +6 -0
- package/dist/src/services.d.ts.map +1 -0
- package/dist/src/services.js +323 -0
- package/dist/src/services.js.map +1 -0
- package/dist/src/state-storage.d.ts +21 -0
- package/dist/src/state-storage.d.ts.map +1 -0
- package/dist/src/state-storage.js +81 -0
- package/dist/src/state-storage.js.map +1 -0
- package/dist/src/types.d.ts +11 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +2 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/utils.d.ts +8 -0
- package/dist/src/utils.d.ts.map +1 -0
- package/dist/src/utils.js +14 -0
- package/dist/src/utils.js.map +1 -0
- package/dist/src/vite/index.d.ts +4 -0
- package/dist/src/vite/index.d.ts.map +1 -0
- package/dist/src/vite/index.js +92 -0
- package/dist/src/vite/index.js.map +1 -0
- package/dist/src/vite/types.d.ts +15 -0
- package/dist/src/vite/types.d.ts.map +1 -0
- package/dist/src/vite/types.js +2 -0
- package/dist/src/vite/types.js.map +1 -0
- package/dist/vite.config.d.ts +3 -0
- package/dist/vite.config.d.ts.map +1 -0
- package/dist/vite.config.js +38 -0
- package/dist/vite.config.js.map +1 -0
- package/package.json +96 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"footer.d.ts","sourceRoot":"","sources":["../../../src/react/footer.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,iBAAiB,EAAqB,MAAM,OAAO,CAAC;AAE7D,eAAO,MAAM,MAAM,EAAE,iBAiCpB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "@emotion/react/jsx-runtime";
|
|
2
|
+
import { css } from "@emotion/react";
|
|
3
|
+
import { MANIFEST } from "@typespec/compiler";
|
|
4
|
+
export const Footer = () => {
|
|
5
|
+
const prItem = MANIFEST.pr ? (_jsxs(FooterItem, { link: `https://github.com/microsoft/typespec/pull/${MANIFEST.pr}`, children: [_jsx("span", { children: "PR " }), _jsx("span", { children: MANIFEST.pr })] })) : (_jsx(_Fragment, {}));
|
|
6
|
+
return (_jsxs("div", { css: [
|
|
7
|
+
{
|
|
8
|
+
gridArea: "footer",
|
|
9
|
+
gridRow: "3",
|
|
10
|
+
backgroundColor: "#007acc",
|
|
11
|
+
display: "flex",
|
|
12
|
+
fontSize: "14px",
|
|
13
|
+
},
|
|
14
|
+
MANIFEST.pr ? { backgroundColor: "#ce662a" } : {},
|
|
15
|
+
], children: [prItem, _jsxs(FooterItem, { children: [_jsx("span", { children: "TypeSpec Version " }), _jsx("span", { children: MANIFEST.version })] }), _jsxs(FooterItem, { link: `https://github.com/microsoft/typespec/commit/${MANIFEST.commit}`, children: [_jsx("span", { children: "Commit " }), _jsx("span", { children: MANIFEST.commit.slice(0, 6) })] })] }));
|
|
16
|
+
};
|
|
17
|
+
const FooterItem = ({ children, link }) => {
|
|
18
|
+
return link ? (_jsx("a", { css: FooterItemStyles, href: link, target: "_blank", children: children })) : (_jsx("div", { css: FooterItemStyles, children: children }));
|
|
19
|
+
};
|
|
20
|
+
const FooterItemStyles = css({
|
|
21
|
+
textDecoration: "none",
|
|
22
|
+
color: "#fefefe",
|
|
23
|
+
borderRight: "1px solid #d5d5d5",
|
|
24
|
+
padding: "0 5px",
|
|
25
|
+
"&:hover": {
|
|
26
|
+
backgroundColor: "#063a5c",
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
//# sourceMappingURL=footer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"footer.js","sourceRoot":"","sources":["../../../src/react/footer.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAG9C,MAAM,CAAC,MAAM,MAAM,GAAsB,GAAG,EAAE;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,CAC3B,MAAC,UAAU,IAAC,IAAI,EAAE,8CAA8C,QAAQ,CAAC,EAAE,EAAE,aAC3E,iCAAgB,EAChB,yBAAO,QAAQ,CAAC,EAAE,GAAQ,IACf,CACd,CAAC,CAAC,CAAC,CACF,mBAAK,CACN,CAAC;IACF,OAAO,CACL,eACE,GAAG,EAAE;YACH;gBACE,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,GAAG;gBACZ,eAAe,EAAE,SAAS;gBAC1B,OAAO,EAAE,MAAM;gBACf,QAAQ,EAAE,MAAM;aACjB;YACD,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE;SAClD,aAEA,MAAM,EACP,MAAC,UAAU,eACT,+CAA8B,EAC9B,yBAAO,QAAQ,CAAC,OAAO,GAAQ,IACpB,EACb,MAAC,UAAU,IAAC,IAAI,EAAE,gDAAgD,QAAQ,CAAC,MAAM,EAAE,aACjF,qCAAoB,EACpB,yBAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GAAQ,IAC/B,IACT,CACP,CAAC;AACJ,CAAC,CAAC;AAKF,MAAM,UAAU,GAA0D,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;IAC/F,OAAO,IAAI,CAAC,CAAC,CAAC,CACZ,YAAG,GAAG,EAAE,gBAAgB,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAC,QAAQ,YAClD,QAAQ,GACP,CACL,CAAC,CAAC,CAAC,CACF,cAAK,GAAG,EAAE,gBAAgB,YAAG,QAAQ,GAAO,CAC7C,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,GAAG,CAAC;IAC3B,cAAc,EAAE,MAAM;IACtB,KAAK,EAAE,SAAS;IAChB,WAAW,EAAE,mBAAmB;IAChC,OAAO,EAAE,OAAO;IAChB,SAAS,EAAE;QACT,eAAe,EAAE,SAAS;KAC3B;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="react" resolution-mode="require"/>
|
|
2
|
+
/**
|
|
3
|
+
* Hook to manage a value that could be either controlled or uncontrolled, such as a checked state or
|
|
4
|
+
* text box string.
|
|
5
|
+
* @param controlledValue - The controlled value passed in the props. This value will always be used if provided,
|
|
6
|
+
* and the internal state will be updated to reflect it.
|
|
7
|
+
* @param defaultUncontrolledValue - Initial value for the internal state in the uncontrolled case.
|
|
8
|
+
* @returns An array of the current value and an updater callback. Like `React.useState`, the updater
|
|
9
|
+
* callback always has the same identity, and it can take either a new value, or a function which
|
|
10
|
+
* is passed the previous value and returns the new value.
|
|
11
|
+
* @see https://reactjs.org/docs/uncontrolled-components.html
|
|
12
|
+
*/
|
|
13
|
+
export declare function useControllableValue<TValue>(controlledValue: TValue | undefined, defaultUncontrolledValue: TValue | undefined, onChange?: (value: TValue) => void | undefined): readonly [TValue, (update: TValue) => void];
|
|
14
|
+
export declare function useAsyncMemo<T>(callback: () => Promise<T>, defaultValue: T, deps?: React.DependencyList): T;
|
|
15
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../../src/react/hooks.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EACzC,eAAe,EAAE,MAAM,GAAG,SAAS,EACnC,wBAAwB,EAAE,MAAM,GAAG,SAAS,EAC5C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,GAC7C,SAAS,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,CAkC7C;AAED,wBAAgB,YAAY,CAAC,CAAC,EAC5B,QAAQ,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC1B,YAAY,EAAE,CAAC,EACf,IAAI,CAAC,EAAE,KAAK,CAAC,cAAc,GAC1B,CAAC,CASH"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { useEffect, useMemo, useRef, useState } from "react";
|
|
2
|
+
/**
|
|
3
|
+
* Hook to manage a value that could be either controlled or uncontrolled, such as a checked state or
|
|
4
|
+
* text box string.
|
|
5
|
+
* @param controlledValue - The controlled value passed in the props. This value will always be used if provided,
|
|
6
|
+
* and the internal state will be updated to reflect it.
|
|
7
|
+
* @param defaultUncontrolledValue - Initial value for the internal state in the uncontrolled case.
|
|
8
|
+
* @returns An array of the current value and an updater callback. Like `React.useState`, the updater
|
|
9
|
+
* callback always has the same identity, and it can take either a new value, or a function which
|
|
10
|
+
* is passed the previous value and returns the new value.
|
|
11
|
+
* @see https://reactjs.org/docs/uncontrolled-components.html
|
|
12
|
+
*/
|
|
13
|
+
export function useControllableValue(controlledValue, defaultUncontrolledValue, onChange) {
|
|
14
|
+
const [value, setValue] = useState(defaultUncontrolledValue);
|
|
15
|
+
const isControlled = useMemo(() => controlledValue !== undefined, []);
|
|
16
|
+
const currentValue = isControlled ? controlledValue : value;
|
|
17
|
+
// Duplicate the current value and onChange in refs so they're accessible from
|
|
18
|
+
// setValueOrCallOnChange without creating a new callback every time
|
|
19
|
+
const valueRef = useRef(currentValue);
|
|
20
|
+
const onChangeRef = useRef(onChange);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
valueRef.current = currentValue;
|
|
23
|
+
onChangeRef.current = onChange;
|
|
24
|
+
});
|
|
25
|
+
// To match the behavior of the setter returned by React.useState, this callback's identity
|
|
26
|
+
// should never change. This means it MUST NOT directly reference variables that can change.
|
|
27
|
+
const setValueOrCallOnChange = useMemo(() => (update) => {
|
|
28
|
+
// Assuming here that TValue is not a function, because a controllable value will typically
|
|
29
|
+
// be something a user can enter as input
|
|
30
|
+
const newValue = typeof update === "function" ? update(valueRef.current) : update;
|
|
31
|
+
if (onChangeRef.current) {
|
|
32
|
+
onChangeRef.current(newValue);
|
|
33
|
+
}
|
|
34
|
+
if (!isControlled) {
|
|
35
|
+
setValue(newValue);
|
|
36
|
+
}
|
|
37
|
+
}, []);
|
|
38
|
+
return [currentValue, setValueOrCallOnChange];
|
|
39
|
+
}
|
|
40
|
+
export function useAsyncMemo(callback, defaultValue, deps) {
|
|
41
|
+
const [value, setValue] = useState(defaultValue);
|
|
42
|
+
useEffect(() => {
|
|
43
|
+
callback()
|
|
44
|
+
.then(setValue)
|
|
45
|
+
// eslint-disable-next-line no-console
|
|
46
|
+
.catch(() => console.error("Failed to load async memo"));
|
|
47
|
+
}, deps);
|
|
48
|
+
return value;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=hooks.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/react/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE7D;;;;;;;;;;GAUG;AACH,MAAM,UAAU,oBAAoB,CAClC,eAAmC,EACnC,wBAA4C,EAC5C,QAA8C;IAE9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAqB,wBAAwB,CAAC,CAAC;IACjF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,eAAe,KAAK,SAAS,EAAE,EAAE,CAAC,CAAC;IACtE,MAAM,YAAY,GAAG,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,KAAK,CAAC;IAE5D,8EAA8E;IAC9E,oEAAoE;IACpE,MAAM,QAAQ,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;IACrC,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,CAAC,OAAO,GAAG,YAAY,CAAC;QAChC,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;IACjC,CAAC,CAAC,CAAC;IAEH,2FAA2F;IAC3F,4FAA4F;IAC5F,MAAM,sBAAsB,GAAG,OAAO,CACpC,GAAG,EAAE,CAAC,CAAC,MAAgD,EAAE,EAAE;QACzD,2FAA2F;QAC3F,yCAAyC;QACzC,MAAM,QAAQ,GAAG,OAAO,MAAM,KAAK,UAAU,CAAC,CAAC,CAAE,MAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAE3F,IAAI,WAAW,CAAC,OAAO,EAAE;YACvB,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;SAC/B;QAED,IAAI,CAAC,YAAY,EAAE;YACjB,QAAQ,CAAC,QAAQ,CAAC,CAAC;SACpB;IACH,CAAC,EACD,EAAE,CACH,CAAC;IAEF,OAAO,CAAC,YAAY,EAAE,sBAAsB,CAAQ,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,QAA0B,EAC1B,YAAe,EACf,IAA2B;IAE3B,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAI,YAAY,CAAC,CAAC;IACpD,SAAS,CAAC,GAAG,EAAE;QACb,QAAQ,EAAE;aACP,IAAI,CAAC,QAAQ,CAAC;YACf,sCAAsC;aACrC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC,CAAC;IAC7D,CAAC,EAAE,IAAI,CAAC,CAAC;IACT,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/react/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAC/E,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { FunctionComponent, ReactElement } from "react";
|
|
2
|
+
export interface Tab {
|
|
3
|
+
id: string;
|
|
4
|
+
name: string | ReactElement<any, any>;
|
|
5
|
+
align: "left" | "right";
|
|
6
|
+
}
|
|
7
|
+
export interface OutputTabsProps {
|
|
8
|
+
tabs: Tab[];
|
|
9
|
+
selected: string;
|
|
10
|
+
onSelect: (file: string) => void;
|
|
11
|
+
}
|
|
12
|
+
export declare const OutputTabs: FunctionComponent<OutputTabsProps>;
|
|
13
|
+
export interface OutputTabProps {
|
|
14
|
+
tab: Tab;
|
|
15
|
+
selected: boolean;
|
|
16
|
+
onSelect: (id: string) => void;
|
|
17
|
+
}
|
|
18
|
+
export declare const OutputTab: FunctionComponent<OutputTabProps>;
|
|
19
|
+
//# sourceMappingURL=output-tabs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-tabs.d.ts","sourceRoot":"","sources":["../../../src/react/output-tabs.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAExD,MAAM,WAAW,GAAG;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IACtC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AACD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAClC;AAED,eAAO,MAAM,UAAU,EAAE,iBAAiB,CAAC,eAAe,CAiBzD,CAAC;AACF,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,GAAG,CAAC;IACT,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;CAChC;AACD,eAAO,MAAM,SAAS,EAAE,iBAAiB,CAAC,cAAc,CAqBvD,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
|
+
export const OutputTabs = ({ tabs, selected, onSelect }) => {
|
|
3
|
+
const [leftTabs, rightTabs] = chunk(tabs, (x) => x.align === "left");
|
|
4
|
+
return (_jsxs("div", { css: { display: "flex", borderBottom: "1px solid #c5c5c5" }, children: [leftTabs.map((tab) => {
|
|
5
|
+
return (_jsx(OutputTab, { tab: tab, selected: selected === tab.id, onSelect: onSelect }, tab.id));
|
|
6
|
+
}), _jsx("span", { css: { flex: 1, borderRight: "1px solid #ccc" } }), rightTabs.map((tab) => {
|
|
7
|
+
return (_jsx(OutputTab, { tab: tab, selected: selected === tab.id, onSelect: onSelect }, tab.id));
|
|
8
|
+
})] }));
|
|
9
|
+
};
|
|
10
|
+
export const OutputTab = ({ tab, selected, onSelect }) => {
|
|
11
|
+
return (_jsx("a", { css: [
|
|
12
|
+
{
|
|
13
|
+
height: "26px",
|
|
14
|
+
padding: "0 5px",
|
|
15
|
+
borderRight: "1px solid #ccc",
|
|
16
|
+
borderTop: "none",
|
|
17
|
+
borderBottom: "none",
|
|
18
|
+
color: "#000",
|
|
19
|
+
textDecoration: "none",
|
|
20
|
+
cursor: "pointer",
|
|
21
|
+
},
|
|
22
|
+
selected ? { fontWeight: "bold", backgroundColor: "#eee" } : {},
|
|
23
|
+
], onClick: () => onSelect(tab.id), children: tab.name }));
|
|
24
|
+
};
|
|
25
|
+
function chunk(items, condition) {
|
|
26
|
+
const match = [];
|
|
27
|
+
const unMatch = [];
|
|
28
|
+
for (const item of items) {
|
|
29
|
+
if (condition(item)) {
|
|
30
|
+
match.push(item);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
unMatch.push(item);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return [match, unMatch];
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=output-tabs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-tabs.js","sourceRoot":"","sources":["../../../src/react/output-tabs.tsx"],"names":[],"mappings":";AAaA,MAAM,CAAC,MAAM,UAAU,GAAuC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC7F,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,CAAC;IACrE,OAAO,CACL,eAAK,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,mBAAmB,EAAE,aAC7D,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACpB,OAAO,CACL,KAAC,SAAS,IAAc,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,KAAK,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAnE,GAAG,CAAC,EAAE,CAAiE,CACxF,CAAC;YACJ,CAAC,CAAC,EACF,eAAM,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE,GAAS,EAC7D,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;gBACrB,OAAO,CACL,KAAC,SAAS,IAAc,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,KAAK,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,QAAQ,IAAnE,GAAG,CAAC,EAAE,CAAiE,CACxF,CAAC;YACJ,CAAC,CAAC,IACE,CACP,CAAC;AACJ,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,SAAS,GAAsC,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE;IAC1F,OAAO,CACL,YACE,GAAG,EAAE;YACH;gBACE,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,OAAO;gBAChB,WAAW,EAAE,gBAAgB;gBAC7B,SAAS,EAAE,MAAM;gBACjB,YAAY,EAAE,MAAM;gBACpB,KAAK,EAAE,MAAM;gBACb,cAAc,EAAE,MAAM;gBACtB,MAAM,EAAE,SAAS;aAClB;YACD,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE;SAChE,EACD,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,YAE9B,GAAG,CAAC,IAAI,GACP,CACL,CAAC;AACJ,CAAC,CAAC;AAEF,SAAS,KAAK,CAAI,KAAU,EAAE,SAA+B;IAC3D,MAAM,KAAK,GAAG,EAAE,CAAC;IACjB,MAAM,OAAO,GAAG,EAAE,CAAC;IACnB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;QACxB,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;YACnB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAClB;aAAM;YACL,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACpB;KACF;IACD,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FunctionComponent } from "react";
|
|
2
|
+
import "swagger-ui/dist/swagger-ui.css";
|
|
3
|
+
import { CompilationState, FileOutputViewer } from "./types.js";
|
|
4
|
+
export interface OutputViewProps {
|
|
5
|
+
compilationState: CompilationState | undefined;
|
|
6
|
+
viewers?: FileOutputViewer[];
|
|
7
|
+
}
|
|
8
|
+
export declare const OutputView: FunctionComponent<OutputViewProps>;
|
|
9
|
+
//# sourceMappingURL=output-view.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-view.d.ts","sourceRoot":"","sources":["../../../src/react/output-view.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,iBAAiB,EAA6C,MAAM,OAAO,CAAC;AACrF,OAAO,gCAAgC,CAAC;AAIxC,OAAO,EAAE,gBAAgB,EAAiB,gBAAgB,EAAe,MAAM,YAAY,CAAC;AAG5F,MAAM,WAAW,eAAe;IAC9B,gBAAgB,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC/C,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,UAAU,EAAE,iBAAiB,CAAC,eAAe,CAQzD,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
|
+
import { css } from "@emotion/react";
|
|
3
|
+
import { TypeSpecProgramViewer } from "@typespec/html-program-viewer";
|
|
4
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
5
|
+
import "swagger-ui/dist/swagger-ui.css";
|
|
6
|
+
import { ErrorTab, InternalCompilerError } from "./error-tab.js";
|
|
7
|
+
import { FileOutput } from "./file-output.js";
|
|
8
|
+
import { OutputTabs } from "./output-tabs.js";
|
|
9
|
+
import { OutputEditor } from "./typespec-editor.js";
|
|
10
|
+
export const OutputView = ({ compilationState, viewers }) => {
|
|
11
|
+
if (compilationState === undefined) {
|
|
12
|
+
return _jsx(_Fragment, {});
|
|
13
|
+
}
|
|
14
|
+
if ("internalCompilerError" in compilationState) {
|
|
15
|
+
return _jsx(InternalCompilerError, { error: compilationState.internalCompilerError });
|
|
16
|
+
}
|
|
17
|
+
return _jsx(OutputViewInternal, { compilationResult: compilationState, viewers: viewers });
|
|
18
|
+
};
|
|
19
|
+
const OutputViewInternal = ({ compilationResult, viewers }) => {
|
|
20
|
+
const { program, outputFiles } = compilationResult;
|
|
21
|
+
const [viewSelection, setViewSelection] = useState({
|
|
22
|
+
type: "file",
|
|
23
|
+
filename: "",
|
|
24
|
+
content: "",
|
|
25
|
+
});
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (viewSelection.type === "file") {
|
|
28
|
+
if (outputFiles.length > 0) {
|
|
29
|
+
const fileStillThere = outputFiles.find((x) => x === viewSelection.filename);
|
|
30
|
+
void loadOutputFile(fileStillThere !== null && fileStillThere !== void 0 ? fileStillThere : outputFiles[0]);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
setViewSelection({ type: "file", filename: viewSelection.filename, content: "" });
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}, [program, outputFiles]);
|
|
37
|
+
async function loadOutputFile(path) {
|
|
38
|
+
const contents = await program.host.readFile("./tsp-output/" + path);
|
|
39
|
+
setViewSelection({ type: "file", filename: path, content: contents.text });
|
|
40
|
+
}
|
|
41
|
+
const diagnostics = program.diagnostics;
|
|
42
|
+
const tabs = useMemo(() => {
|
|
43
|
+
return [
|
|
44
|
+
...outputFiles.map((x) => ({
|
|
45
|
+
align: "left",
|
|
46
|
+
name: x,
|
|
47
|
+
id: x,
|
|
48
|
+
})),
|
|
49
|
+
{ id: "type-graph", name: "Type Graph", align: "right" },
|
|
50
|
+
{
|
|
51
|
+
id: "errors",
|
|
52
|
+
name: _jsx(ErrorTabLabel, { diagnostics: diagnostics }),
|
|
53
|
+
align: "right",
|
|
54
|
+
},
|
|
55
|
+
];
|
|
56
|
+
}, [outputFiles, diagnostics]);
|
|
57
|
+
const handleTabSelection = useCallback((tabId) => {
|
|
58
|
+
if (tabId === "type-graph") {
|
|
59
|
+
setViewSelection({ type: "type-graph" });
|
|
60
|
+
}
|
|
61
|
+
else if (tabId === "errors") {
|
|
62
|
+
setViewSelection({ type: "errors" });
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
void loadOutputFile(tabId);
|
|
66
|
+
}
|
|
67
|
+
}, []);
|
|
68
|
+
return (_jsxs(_Fragment, { children: [_jsx(OutputTabs, { tabs: tabs, selected: viewSelection.type === "file" ? viewSelection.filename : viewSelection.type, onSelect: handleTabSelection }), _jsx("div", { className: "output-content", css: { width: "100%", height: "100%", overflow: "hidden" }, children: _jsx(OutputContent, { viewSelection: viewSelection, program: program, viewers: viewers }) })] }));
|
|
69
|
+
};
|
|
70
|
+
const rawFileViewer = {
|
|
71
|
+
key: "raw",
|
|
72
|
+
label: "File",
|
|
73
|
+
render: ({ filename, content }) => (_jsx(OutputEditor, { filename: filename, value: content })),
|
|
74
|
+
};
|
|
75
|
+
const OutputContent = ({ viewSelection, program, viewers, }) => {
|
|
76
|
+
const resolvedViewers = useMemo(() => [rawFileViewer, ...(viewers !== null && viewers !== void 0 ? viewers : [])], [viewers]);
|
|
77
|
+
switch (viewSelection.type) {
|
|
78
|
+
case "file":
|
|
79
|
+
return (_jsx(FileOutput, { filename: viewSelection.filename, content: viewSelection.content, viewers: resolvedViewers }));
|
|
80
|
+
case "errors":
|
|
81
|
+
return _jsx(ErrorTab, { diagnostics: program === null || program === void 0 ? void 0 : program.diagnostics });
|
|
82
|
+
default:
|
|
83
|
+
return (_jsx("div", { css: {
|
|
84
|
+
height: "100%",
|
|
85
|
+
overflow: "scroll",
|
|
86
|
+
}, children: program && _jsx(TypeSpecProgramViewer, { program: program }) }));
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
const ErrorTabLabel = ({ diagnostics }) => {
|
|
90
|
+
const errorCount = diagnostics ? diagnostics.length : 0;
|
|
91
|
+
return (_jsxs("div", { children: ["Errors ", errorCount > 0 ? _jsx("span", { css: ErrorTabCountStyles, children: errorCount }) : ""] }));
|
|
92
|
+
};
|
|
93
|
+
const ErrorTabCountStyles = css({
|
|
94
|
+
backgroundColor: "#cc2222",
|
|
95
|
+
color: "#f5f5f5",
|
|
96
|
+
padding: "0 5px",
|
|
97
|
+
borderRadius: "20px",
|
|
98
|
+
});
|
|
99
|
+
//# sourceMappingURL=output-view.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"output-view.js","sourceRoot":"","sources":["../../../src/react/output-view.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AAErC,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAqB,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAAE,QAAQ,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAO,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAOpD,MAAM,CAAC,MAAM,UAAU,GAAuC,CAAC,EAAE,gBAAgB,EAAE,OAAO,EAAE,EAAE,EAAE;IAC9F,IAAI,gBAAgB,KAAK,SAAS,EAAE;QAClC,OAAO,mBAAK,CAAC;KACd;IACD,IAAI,uBAAuB,IAAI,gBAAgB,EAAE;QAC/C,OAAO,KAAC,qBAAqB,IAAC,KAAK,EAAE,gBAAgB,CAAC,qBAAqB,GAAI,CAAC;KACjF;IACD,OAAO,KAAC,kBAAkB,IAAC,iBAAiB,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,GAAI,CAAC;AACvF,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAGnB,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE,EAAE,EAAE;IACtC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,iBAAiB,CAAC;IAEnD,MAAM,CAAC,aAAa,EAAE,gBAAgB,CAAC,GAAG,QAAQ,CAAgB;QAChE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,EAAE;QACZ,OAAO,EAAE,EAAE;KACZ,CAAC,CAAC;IAEH,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,aAAa,CAAC,IAAI,KAAK,MAAM,EAAE;YACjC,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC1B,MAAM,cAAc,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,aAAa,CAAC,QAAQ,CAAC,CAAC;gBAC7E,KAAK,cAAc,CAAC,cAAc,aAAd,cAAc,cAAd,cAAc,GAAI,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;aACvD;iBAAM;gBACL,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;aACnF;SACF;IACH,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC;IAE3B,KAAK,UAAU,cAAc,CAAC,IAAY;QACxC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;QACrE,gBAAgB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,MAAM,IAAI,GAAU,OAAO,CAAC,GAAG,EAAE;QAC/B,OAAO;YACL,GAAG,WAAW,CAAC,GAAG,CAChB,CAAC,CAAC,EAAO,EAAE,CAAC,CAAC;gBACX,KAAK,EAAE,MAAM;gBACb,IAAI,EAAE,CAAC;gBACP,EAAE,EAAE,CAAC;aACN,CAAC,CACH;YACD,EAAE,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE;YACxD;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,KAAC,aAAa,IAAC,WAAW,EAAE,WAAW,GAAI;gBACjD,KAAK,EAAE,OAAO;aACf;SACF,CAAC;IACJ,CAAC,EAAE,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC;IAC/B,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QACvD,IAAI,KAAK,KAAK,YAAY,EAAE;YAC1B,gBAAgB,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;SAC1C;aAAM,IAAI,KAAK,KAAK,QAAQ,EAAE;YAC7B,gBAAgB,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;SACtC;aAAM;YACL,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC;SAC5B;IACH,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,CACL,8BACE,KAAC,UAAU,IACT,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,aAAa,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,IAAI,EACrF,QAAQ,EAAE,kBAAkB,GAC5B,EACF,cAAK,SAAS,EAAC,gBAAgB,EAAC,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,YACxF,KAAC,aAAa,IAAC,aAAa,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,GAAI,GAC/E,IACL,CACJ,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG;IACpB,GAAG,EAAE,KAAK;IACV,KAAK,EAAE,MAAM;IACb,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAe,EAAE,EAAE,CAAC,CAC9C,KAAC,YAAY,IAAC,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,GAAI,CACrD;CACF,CAAC;AASF,MAAM,aAAa,GAA0C,CAAC,EAC5D,aAAa,EACb,OAAO,EACP,OAAO,GACR,EAAE,EAAE;IACH,MAAM,eAAe,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,aAAa,EAAE,GAAG,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;IACtF,QAAQ,aAAa,CAAC,IAAI,EAAE;QAC1B,KAAK,MAAM;YACT,OAAO,CACL,KAAC,UAAU,IACT,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAChC,OAAO,EAAE,aAAa,CAAC,OAAO,EAC9B,OAAO,EAAE,eAAe,GACxB,CACH,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO,KAAC,QAAQ,IAAC,WAAW,EAAE,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,WAAW,GAAI,CAAC;QACzD;YACE,OAAO,CACL,cACE,GAAG,EAAE;oBACH,MAAM,EAAE,MAAM;oBACd,QAAQ,EAAE,QAAQ;iBACnB,YAEA,OAAO,IAAI,KAAC,qBAAqB,IAAC,OAAO,EAAE,OAAO,GAAI,GACnD,CACP,CAAC;KACL;AACH,CAAC,CAAC;AAOF,MAAM,aAAa,GAEd,CAAC,EAAE,WAAW,EAAE,EAAE,EAAE;IACvB,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,OAAO,CACL,qCAAa,UAAU,GAAG,CAAC,CAAC,CAAC,CAAC,eAAM,GAAG,EAAE,mBAAmB,YAAG,UAAU,GAAQ,CAAC,CAAC,CAAC,EAAE,IAAO,CAC9F,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,GAAG,CAAC;IAC9B,eAAe,EAAE,SAAS;IAC1B,KAAK,EAAE,SAAS;IAChB,OAAO,EAAE,OAAO;IAChB,YAAY,EAAE,MAAM;CACrB,CAAC,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { CompilerOptions } from "@typespec/compiler";
|
|
2
|
+
import { FunctionComponent } from "react";
|
|
3
|
+
import "swagger-ui/dist/swagger-ui.css";
|
|
4
|
+
import { BrowserHost } from "../browser-host.js";
|
|
5
|
+
import { PlaygroundSample } from "../types.js";
|
|
6
|
+
import { FileOutputViewer } from "./types.js";
|
|
7
|
+
export interface PlaygroundProps {
|
|
8
|
+
host: BrowserHost;
|
|
9
|
+
/** Default emitter if leaving this unmanaged. */
|
|
10
|
+
defaultContent?: string;
|
|
11
|
+
/** List of available libraries */
|
|
12
|
+
libraries: string[];
|
|
13
|
+
/** Emitter to use */
|
|
14
|
+
emitter?: string;
|
|
15
|
+
/** Default emitter if leaving this unmanaged. */
|
|
16
|
+
defaultEmitter?: string;
|
|
17
|
+
/** Callback when emitter change */
|
|
18
|
+
onEmitterChange?: (emitter: string) => void;
|
|
19
|
+
/** Emitter options */
|
|
20
|
+
compilerOptions?: CompilerOptions;
|
|
21
|
+
/** Default emitter options if leaving this unmanaged. */
|
|
22
|
+
defaultCompilerOptions?: CompilerOptions;
|
|
23
|
+
/** Callback when emitter options change */
|
|
24
|
+
onCompilerOptionsChange?: (emitter: CompilerOptions) => void;
|
|
25
|
+
/** Samples available */
|
|
26
|
+
samples?: Record<string, PlaygroundSample>;
|
|
27
|
+
/** Sample to use */
|
|
28
|
+
sampleName?: string;
|
|
29
|
+
/** Default sample if leaving this unmanaged. */
|
|
30
|
+
defaultSampleName?: string;
|
|
31
|
+
/** Callback when sample change */
|
|
32
|
+
onSampleNameChange?: (sampleName: string) => void;
|
|
33
|
+
/** Playground links */
|
|
34
|
+
links?: PlaygroundLinks;
|
|
35
|
+
/** Custom viewers that enabled for certain emitters. Key of the map is emitter name */
|
|
36
|
+
emitterViewers?: Record<string, FileOutputViewer[]>;
|
|
37
|
+
onSave?: (value: PlaygroundSaveData) => void;
|
|
38
|
+
}
|
|
39
|
+
export interface PlaygroundSaveData {
|
|
40
|
+
/** Current content of the playground. */
|
|
41
|
+
content: string;
|
|
42
|
+
/** Emitter name. */
|
|
43
|
+
emitter: string;
|
|
44
|
+
/** Emitter options. */
|
|
45
|
+
options?: CompilerOptions;
|
|
46
|
+
/** If a sample is selected and the content hasn't changed since. */
|
|
47
|
+
sampleName?: string;
|
|
48
|
+
}
|
|
49
|
+
export interface PlaygroundLinks {
|
|
50
|
+
/** Link to documentation */
|
|
51
|
+
documentationUrl?: string;
|
|
52
|
+
/** Issue to github issue to open a new issue. */
|
|
53
|
+
githubIssueUrl?: string;
|
|
54
|
+
}
|
|
55
|
+
export declare const Playground: FunctionComponent<PlaygroundProps>;
|
|
56
|
+
//# sourceMappingURL=playground.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playground.d.ts","sourceRoot":"","sources":["../../../src/react/playground.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,EAAE,iBAAiB,EAA6C,MAAM,OAAO,CAAC;AACrF,OAAO,gCAAgC,CAAC;AAExC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAO/C,OAAO,EAAoB,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGhE,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,WAAW,CAAC;IAElB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,kCAAkC;IAClC,SAAS,EAAE,MAAM,EAAE,CAAC;IAEpB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,mCAAmC;IACnC,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAE5C,sBAAsB;IACtB,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,yDAAyD;IACzD,sBAAsB,CAAC,EAAE,eAAe,CAAC;IACzC,2CAA2C;IAC3C,uBAAuB,CAAC,EAAE,CAAC,OAAO,EAAE,eAAe,KAAK,IAAI,CAAC;IAE7D,wBAAwB;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAE3C,oBAAoB;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gDAAgD;IAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,kCAAkC;IAClC,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAElD,uBAAuB;IACvB,KAAK,CAAC,EAAE,eAAe,CAAC;IAExB,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;IAEpD,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,kBAAkB;IACjC,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAEhB,oBAAoB;IACpB,OAAO,EAAE,MAAM,CAAC;IAEhB,uBAAuB;IACvB,OAAO,CAAC,EAAE,eAAe,CAAC;IAE1B,oEAAoE;IACpE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,4BAA4B;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iDAAiD;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,UAAU,EAAE,iBAAiB,CAAC,eAAe,CA0KzD,CAAC"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
|
+
import debounce from "debounce";
|
|
3
|
+
import { KeyCode, KeyMod, MarkerSeverity, Uri, editor } from "monaco-editor";
|
|
4
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
5
|
+
import "swagger-ui/dist/swagger-ui.css";
|
|
6
|
+
import { CompletionItemTag } from "vscode-languageserver";
|
|
7
|
+
import { importTypeSpecCompiler } from "../core.js";
|
|
8
|
+
import { getMarkerLocation } from "../services.js";
|
|
9
|
+
import { resolveLibraries } from "../utils.js";
|
|
10
|
+
import { EditorCommandBar } from "./editor-command-bar.js";
|
|
11
|
+
import { useMonacoModel } from "./editor.js";
|
|
12
|
+
import { Footer } from "./footer.js";
|
|
13
|
+
import { useAsyncMemo, useControllableValue } from "./hooks.js";
|
|
14
|
+
import { OutputView } from "./output-view.js";
|
|
15
|
+
import { TypeSpecEditor } from "./typespec-editor.js";
|
|
16
|
+
export const Playground = (props) => {
|
|
17
|
+
var _a, _b, _c, _d;
|
|
18
|
+
const { host, onSave } = props;
|
|
19
|
+
const [selectedEmitter, onSelectedEmitterChange] = useControllableValue(props.emitter, props.defaultEmitter, props.onEmitterChange);
|
|
20
|
+
const [compilerOptions, onCompilerOptionsChange] = useControllableValue(props.compilerOptions, (_a = props.defaultCompilerOptions) !== null && _a !== void 0 ? _a : {}, props.onCompilerOptionsChange);
|
|
21
|
+
const [selectedSampleName, onSelectedSampleNameChange] = useControllableValue(props.sampleName, props.defaultSampleName, props.onSampleNameChange);
|
|
22
|
+
const [content, setContent] = useState(props.defaultContent);
|
|
23
|
+
const isSampleUntouched = useMemo(() => {
|
|
24
|
+
var _a, _b;
|
|
25
|
+
return Boolean(selectedSampleName && content === ((_b = (_a = props.samples) === null || _a === void 0 ? void 0 : _a[selectedSampleName]) === null || _b === void 0 ? void 0 : _b.content));
|
|
26
|
+
}, [content, selectedSampleName, props.samples]);
|
|
27
|
+
const typespecModel = useMonacoModel("inmemory://test/main.tsp", "typespec");
|
|
28
|
+
const [compilationState, setCompilationState] = useState(undefined);
|
|
29
|
+
const doCompile = useCallback(async () => {
|
|
30
|
+
const content = typespecModel.getValue();
|
|
31
|
+
setContent(content);
|
|
32
|
+
const typespecCompiler = await importTypeSpecCompiler();
|
|
33
|
+
const state = await compile(host, content, selectedEmitter, compilerOptions);
|
|
34
|
+
setCompilationState(state);
|
|
35
|
+
if ("program" in state) {
|
|
36
|
+
const markers = state.program.diagnostics.map((diag) => ({
|
|
37
|
+
...getMarkerLocation(typespecCompiler, diag.target),
|
|
38
|
+
message: diag.message,
|
|
39
|
+
severity: diag.severity === "error" ? MarkerSeverity.Error : MarkerSeverity.Warning,
|
|
40
|
+
tags: diag.code === "deprecated" ? [CompletionItemTag.Deprecated] : undefined,
|
|
41
|
+
}));
|
|
42
|
+
editor.setModelMarkers(typespecModel, "owner", markers !== null && markers !== void 0 ? markers : []);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
editor.setModelMarkers(typespecModel, "owner", []);
|
|
46
|
+
}
|
|
47
|
+
}, [host, selectedEmitter, compilerOptions, typespecModel, setContent]);
|
|
48
|
+
const updateTypeSpec = useCallback((value) => {
|
|
49
|
+
if (typespecModel.getValue() !== value) {
|
|
50
|
+
typespecModel.setValue(value);
|
|
51
|
+
}
|
|
52
|
+
}, [typespecModel]);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
var _a;
|
|
55
|
+
updateTypeSpec((_a = props.defaultContent) !== null && _a !== void 0 ? _a : "");
|
|
56
|
+
}, []);
|
|
57
|
+
useEffect(() => {
|
|
58
|
+
if (selectedSampleName && props.samples) {
|
|
59
|
+
const config = props.samples[selectedSampleName];
|
|
60
|
+
if (config.content) {
|
|
61
|
+
updateTypeSpec(config.content);
|
|
62
|
+
if (config.preferredEmitter) {
|
|
63
|
+
onSelectedEmitterChange(config.preferredEmitter);
|
|
64
|
+
}
|
|
65
|
+
if (config.compilerOptions) {
|
|
66
|
+
onCompilerOptionsChange(config.compilerOptions);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}, [updateTypeSpec, selectedSampleName]);
|
|
71
|
+
useEffect(() => {
|
|
72
|
+
const debouncer = debounce(() => doCompile(), 200);
|
|
73
|
+
const disposable = typespecModel.onDidChangeContent(debouncer);
|
|
74
|
+
return () => {
|
|
75
|
+
debouncer.clear();
|
|
76
|
+
disposable.dispose();
|
|
77
|
+
};
|
|
78
|
+
}, [typespecModel, doCompile]);
|
|
79
|
+
useEffect(() => {
|
|
80
|
+
void doCompile();
|
|
81
|
+
}, [doCompile]);
|
|
82
|
+
const saveCode = useCallback(() => {
|
|
83
|
+
if (onSave) {
|
|
84
|
+
onSave({
|
|
85
|
+
content: typespecModel.getValue(),
|
|
86
|
+
emitter: selectedEmitter,
|
|
87
|
+
options: compilerOptions,
|
|
88
|
+
sampleName: isSampleUntouched ? selectedSampleName : undefined,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}, [
|
|
92
|
+
typespecModel,
|
|
93
|
+
onSave,
|
|
94
|
+
selectedEmitter,
|
|
95
|
+
compilerOptions,
|
|
96
|
+
selectedSampleName,
|
|
97
|
+
isSampleUntouched,
|
|
98
|
+
]);
|
|
99
|
+
const newIssue = useCallback(async () => {
|
|
100
|
+
var _a;
|
|
101
|
+
saveCode();
|
|
102
|
+
const bodyPayload = encodeURIComponent(`\n\n\n[Playground Link](${document.location.href})`);
|
|
103
|
+
const url = `${(_a = props === null || props === void 0 ? void 0 : props.links) === null || _a === void 0 ? void 0 : _a.githubIssueUrl}?body=${bodyPayload}`;
|
|
104
|
+
window.open(url, "_blank");
|
|
105
|
+
}, [saveCode, typespecModel]);
|
|
106
|
+
const typespecEditorActions = useMemo(() => [
|
|
107
|
+
// ctrl/cmd+S => save
|
|
108
|
+
{ id: "save", label: "Save", keybindings: [KeyMod.CtrlCmd | KeyCode.KeyS], run: saveCode },
|
|
109
|
+
], [saveCode]);
|
|
110
|
+
const libraries = useAsyncMemo(async () => resolveLibraries(props.libraries), [], [props.libraries]);
|
|
111
|
+
return (_jsxs("div", { css: {
|
|
112
|
+
display: "grid",
|
|
113
|
+
gridTemplateColumns: "repeat(2, 1fr)",
|
|
114
|
+
gridTemplateRows: "1fr auto",
|
|
115
|
+
gridTemplateAreas: '"typespeceditor output"\n "footer footer"',
|
|
116
|
+
width: "100%",
|
|
117
|
+
height: "100%",
|
|
118
|
+
overflow: "hidden",
|
|
119
|
+
fontFamily: `"Segoe UI", Tahoma, Geneva, Verdana, sans-serif`,
|
|
120
|
+
}, children: [_jsxs("div", { css: { gridArea: "typespeceditor", width: "100%", height: "100%", overflow: "hidden" }, children: [_jsx(EditorCommandBar, { libraries: libraries, selectedEmitter: selectedEmitter, onSelectedEmitterChange: onSelectedEmitterChange, compilerOptions: compilerOptions, onCompilerOptionsChange: onCompilerOptionsChange, samples: props.samples, selectedSampleName: selectedSampleName, onSelectedSampleNameChange: onSelectedSampleNameChange, saveCode: saveCode, newIssue: ((_b = props === null || props === void 0 ? void 0 : props.links) === null || _b === void 0 ? void 0 : _b.githubIssueUrl) ? newIssue : undefined, documentationUrl: (_c = props.links) === null || _c === void 0 ? void 0 : _c.documentationUrl }), _jsx(TypeSpecEditor, { model: typespecModel, actions: typespecEditorActions })] }), _jsx("div", { css: {
|
|
121
|
+
gridArea: "output",
|
|
122
|
+
overflow: "hidden",
|
|
123
|
+
display: "flex",
|
|
124
|
+
flexDirection: "column",
|
|
125
|
+
borderLeft: "1px solid #c5c5c5",
|
|
126
|
+
}, children: _jsx(OutputView, { compilationState: compilationState, viewers: (_d = props.emitterViewers) === null || _d === void 0 ? void 0 : _d[selectedEmitter] }) }), _jsx(Footer, {})] }));
|
|
127
|
+
};
|
|
128
|
+
const outputDir = "./tsp-output";
|
|
129
|
+
async function compile(host, content, selectedEmitter, options) {
|
|
130
|
+
var _a;
|
|
131
|
+
await host.writeFile("main.tsp", content);
|
|
132
|
+
await emptyOutputDir(host);
|
|
133
|
+
try {
|
|
134
|
+
const typespecCompiler = await importTypeSpecCompiler();
|
|
135
|
+
const program = await typespecCompiler.compile(host, "main.tsp", {
|
|
136
|
+
...options,
|
|
137
|
+
options: {
|
|
138
|
+
...options.options,
|
|
139
|
+
[selectedEmitter]: {
|
|
140
|
+
...(_a = options.options) === null || _a === void 0 ? void 0 : _a[selectedEmitter],
|
|
141
|
+
"emitter-output-dir": "tsp-output",
|
|
142
|
+
},
|
|
143
|
+
},
|
|
144
|
+
outputDir: "tsp-output",
|
|
145
|
+
emit: [selectedEmitter],
|
|
146
|
+
});
|
|
147
|
+
const outputFiles = await findOutputFiles(host);
|
|
148
|
+
return { program, outputFiles };
|
|
149
|
+
}
|
|
150
|
+
catch (error) {
|
|
151
|
+
// eslint-disable-next-line no-console
|
|
152
|
+
console.error("Internal compiler error", error);
|
|
153
|
+
return { internalCompilerError: error };
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async function findOutputFiles(host) {
|
|
157
|
+
const files = [];
|
|
158
|
+
async function addFiles(dir) {
|
|
159
|
+
const items = await host.readDir(outputDir + dir);
|
|
160
|
+
for (const item of items) {
|
|
161
|
+
const itemPath = `${dir}/${item}`;
|
|
162
|
+
if ((await host.stat(outputDir + itemPath)).isDirectory()) {
|
|
163
|
+
await addFiles(itemPath);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
files.push(dir === "" ? item : `${dir}/${item}`);
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
await addFiles("");
|
|
171
|
+
return files;
|
|
172
|
+
}
|
|
173
|
+
async function emptyOutputDir(host) {
|
|
174
|
+
// empty output directory
|
|
175
|
+
const dirs = await host.readDir("./tsp-output");
|
|
176
|
+
for (const file of dirs) {
|
|
177
|
+
const path = "./tsp-output/" + file;
|
|
178
|
+
const uri = Uri.parse(host.pathToFileURL(path));
|
|
179
|
+
const model = editor.getModel(uri);
|
|
180
|
+
if (model) {
|
|
181
|
+
model.dispose();
|
|
182
|
+
}
|
|
183
|
+
await host.rm(path, { recursive: true });
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=playground.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playground.js","sourceRoot":"","sources":["../../../src/react/playground.tsx"],"names":[],"mappings":";AACA,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EAAqB,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACrF,OAAO,gCAAgC,CAAC;AACxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAEnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAiEtD,MAAM,CAAC,MAAM,UAAU,GAAuC,CAAC,KAAK,EAAE,EAAE;;IACtE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;IAC/B,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC,GAAG,oBAAoB,CACrE,KAAK,CAAC,OAAO,EACb,KAAK,CAAC,cAAc,EACpB,KAAK,CAAC,eAAe,CACtB,CAAC;IACF,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC,GAAG,oBAAoB,CACrE,KAAK,CAAC,eAAe,EACrB,MAAA,KAAK,CAAC,sBAAsB,mCAAI,EAAE,EAClC,KAAK,CAAC,uBAAuB,CAC9B,CAAC;IACF,MAAM,CAAC,kBAAkB,EAAE,0BAA0B,CAAC,GAAG,oBAAoB,CAC3E,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,kBAAkB,CACzB,CAAC;IACF,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC7D,MAAM,iBAAiB,GAAG,OAAO,CAAC,GAAG,EAAE;;QACrC,OAAO,OAAO,CAAC,kBAAkB,IAAI,OAAO,MAAK,MAAA,MAAA,KAAK,CAAC,OAAO,0CAAG,kBAAkB,CAAC,0CAAE,OAAO,CAAA,CAAC,CAAC;IACjG,CAAC,EAAE,CAAC,OAAO,EAAE,kBAAkB,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,cAAc,CAAC,0BAA0B,EAAE,UAAU,CAAC,CAAC;IAC7E,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAA+B,SAAS,CAAC,CAAC;IAElG,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACvC,MAAM,OAAO,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;QACzC,UAAU,CAAC,OAAO,CAAC,CAAC;QACpB,MAAM,gBAAgB,GAAG,MAAM,sBAAsB,EAAE,CAAC;QAExD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,OAAO,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;QAC7E,mBAAmB,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,SAAS,IAAI,KAAK,EAAE;YACtB,MAAM,OAAO,GAAyB,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC7E,GAAG,iBAAiB,CAAC,gBAAgB,EAAE,IAAI,CAAC,MAAM,CAAC;gBACnD,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,QAAQ,EAAE,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,OAAO;gBACnF,IAAI,EAAE,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS;aAC9E,CAAC,CAAC,CAAC;YAEJ,MAAM,CAAC,eAAe,CAAC,aAAa,EAAE,OAAO,EAAE,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC,CAAC;SAC/D;aAAM;YACL,MAAM,CAAC,eAAe,CAAC,aAAa,EAAE,OAAO,EAAE,EAAE,CAAC,CAAC;SACpD;IACH,CAAC,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,eAAe,EAAE,aAAa,EAAE,UAAU,CAAC,CAAC,CAAC;IAExE,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,KAAa,EAAE,EAAE;QAChB,IAAI,aAAa,CAAC,QAAQ,EAAE,KAAK,KAAK,EAAE;YACtC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAC/B;IACH,CAAC,EACD,CAAC,aAAa,CAAC,CAChB,CAAC;IACF,SAAS,CAAC,GAAG,EAAE;;QACb,cAAc,CAAC,MAAA,KAAK,CAAC,cAAc,mCAAI,EAAE,CAAC,CAAC;IAC7C,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,kBAAkB,IAAI,KAAK,CAAC,OAAO,EAAE;YACvC,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,OAAO,EAAE;gBAClB,cAAc,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC/B,IAAI,MAAM,CAAC,gBAAgB,EAAE;oBAC3B,uBAAuB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;iBAClD;gBACD,IAAI,MAAM,CAAC,eAAe,EAAE;oBAC1B,uBAAuB,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;iBACjD;aACF;SACF;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,kBAAkB,CAAC,CAAC,CAAC;IAEzC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,SAAS,EAAE,EAAE,GAAG,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,aAAa,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;QAC/D,OAAO,GAAG,EAAE;YACV,SAAS,CAAC,KAAK,EAAE,CAAC;YAClB,UAAU,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC,CAAC;IAE/B,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,SAAS,EAAE,CAAC;IACnB,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;IAEhB,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE;QAChC,IAAI,MAAM,EAAE;YACV,MAAM,CAAC;gBACL,OAAO,EAAE,aAAa,CAAC,QAAQ,EAAE;gBACjC,OAAO,EAAE,eAAe;gBACxB,OAAO,EAAE,eAAe;gBACxB,UAAU,EAAE,iBAAiB,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,SAAS;aAC/D,CAAC,CAAC;SACJ;IACH,CAAC,EAAE;QACD,aAAa;QACb,MAAM;QACN,eAAe;QACf,eAAe;QACf,kBAAkB;QAClB,iBAAiB;KAClB,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;;QACtC,QAAQ,EAAE,CAAC;QACX,MAAM,WAAW,GAAG,kBAAkB,CAAC,2BAA2B,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7F,MAAM,GAAG,GAAG,GAAG,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAE,cAAc,SAAS,WAAW,EAAE,CAAC;QAClE,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC7B,CAAC,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;IAE9B,MAAM,qBAAqB,GAAG,OAAO,CACnC,GAA+B,EAAE,CAAC;QAChC,qBAAqB;QACrB,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE;KAC3F,EACD,CAAC,QAAQ,CAAC,CACX,CAAC;IAEF,MAAM,SAAS,GAAG,YAAY,CAC5B,KAAK,IAAI,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,EAC7C,EAAE,EACF,CAAC,KAAK,CAAC,SAAS,CAAC,CAClB,CAAC;IAEF,OAAO,CACL,eACE,GAAG,EAAE;YACH,OAAO,EAAE,MAAM;YACf,mBAAmB,EAAE,gBAAgB;YACrC,gBAAgB,EAAE,UAAU;YAC5B,iBAAiB,EAAE,8CAA8C;YACjE,KAAK,EAAE,MAAM;YACb,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,QAAQ;YAClB,UAAU,EAAE,iDAAiD;SAC9D,aAED,eAAK,GAAG,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,aACzF,KAAC,gBAAgB,IACf,SAAS,EAAE,SAAS,EACpB,eAAe,EAAE,eAAe,EAChC,uBAAuB,EAAE,uBAAuB,EAChD,eAAe,EAAE,eAAe,EAChC,uBAAuB,EAAE,uBAAuB,EAChD,OAAO,EAAE,KAAK,CAAC,OAAO,EACtB,kBAAkB,EAAE,kBAAkB,EACtC,0BAA0B,EAAE,0BAA0B,EACtD,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,CAAA,MAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,0CAAE,cAAc,EAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,EAC7D,gBAAgB,EAAE,MAAA,KAAK,CAAC,KAAK,0CAAE,gBAAgB,GAC/C,EACF,KAAC,cAAc,IAAC,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,qBAAqB,GAAI,IACpE,EACN,cACE,GAAG,EAAE;oBACH,QAAQ,EAAE,QAAQ;oBAClB,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,MAAM;oBACf,aAAa,EAAE,QAAQ;oBACvB,UAAU,EAAE,mBAAmB;iBAChC,YAED,KAAC,UAAU,IACT,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,MAAA,KAAK,CAAC,cAAc,0CAAG,eAAe,CAAC,GAChD,GACE,EACN,KAAC,MAAM,KAAG,IACN,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,cAAc,CAAC;AAEjC,KAAK,UAAU,OAAO,CACpB,IAAiB,EACjB,OAAe,EACf,eAAuB,EACvB,OAAwB;;IAExB,MAAM,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,cAAc,CAAC,IAAI,CAAC,CAAC;IAC3B,IAAI;QACF,MAAM,gBAAgB,GAAG,MAAM,sBAAsB,EAAE,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,IAAI,EAAE,UAAU,EAAE;YAC/D,GAAG,OAAO;YACV,OAAO,EAAE;gBACP,GAAG,OAAO,CAAC,OAAO;gBAClB,CAAC,eAAe,CAAC,EAAE;oBACjB,GAAG,MAAA,OAAO,CAAC,OAAO,0CAAG,eAAe,CAAC;oBACrC,oBAAoB,EAAE,YAAY;iBACnC;aACF;YACD,SAAS,EAAE,YAAY;YACvB,IAAI,EAAE,CAAC,eAAe,CAAC;SACxB,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,CAAC;QAChD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC;KACjC;IAAC,OAAO,KAAK,EAAE;QACd,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,CAAC,CAAC;QAChD,OAAO,EAAE,qBAAqB,EAAE,KAAK,EAAE,CAAC;KACzC;AACH,CAAC;AACD,KAAK,UAAU,eAAe,CAAC,IAAiB;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,UAAU,QAAQ,CAAC,GAAW;QACjC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC;QAClD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE;YACxB,MAAM,QAAQ,GAAG,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,EAAE;gBACzD,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;aAC1B;iBAAM;gBACL,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,CAAC;aAClD;SACF;IACH,CAAC;IACD,MAAM,QAAQ,CAAC,EAAE,CAAC,CAAC;IACnB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,IAAiB;IAC7C,yBAAyB;IACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAChD,KAAK,MAAM,IAAI,IAAI,IAAI,EAAE;QACvB,MAAM,IAAI,GAAG,eAAe,GAAG,IAAI,CAAC;QACpC,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;QACnC,IAAI,KAAK,EAAE;YACT,KAAK,CAAC,OAAO,EAAE,CAAC;SACjB;QACD,MAAM,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;KAC1C;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { FunctionComponent } from "react";
|
|
2
|
+
import { PlaygroundSample } from "../types.js";
|
|
3
|
+
export interface SamplesDropdownProps {
|
|
4
|
+
samples: Record<string, PlaygroundSample>;
|
|
5
|
+
selectedSampleName: string;
|
|
6
|
+
onSelectedSampleNameChange: (sampleName: string) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const SamplesDropdown: FunctionComponent<SamplesDropdownProps>;
|
|
9
|
+
//# sourceMappingURL=samples-dropdown.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"samples-dropdown.d.ts","sourceRoot":"","sources":["../../../src/react/samples-dropdown.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAe,MAAM,OAAO,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0BAA0B,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;CAC1D;AAED,eAAO,MAAM,eAAe,EAAE,iBAAiB,CAAC,oBAAoB,CAyBnE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
2
|
+
import { Select } from "@fluentui/react-components";
|
|
3
|
+
import { useCallback } from "react";
|
|
4
|
+
export const SamplesDropdown = ({ samples, selectedSampleName, onSelectedSampleNameChange, }) => {
|
|
5
|
+
const options = Object.keys(samples).map((sample) => {
|
|
6
|
+
return _jsx("option", { children: sample }, sample);
|
|
7
|
+
});
|
|
8
|
+
const handleSelected = useCallback((evt) => {
|
|
9
|
+
if (samples[evt.target.value]) {
|
|
10
|
+
onSelectedSampleNameChange(evt.target.value);
|
|
11
|
+
}
|
|
12
|
+
}, [onSelectedSampleNameChange]);
|
|
13
|
+
return (_jsxs(Select, { className: "sample-dropdown", onChange: handleSelected, value: selectedSampleName !== null && selectedSampleName !== void 0 ? selectedSampleName : "", children: [_jsx("option", { value: "", disabled: true, children: "Select sample..." }), options] }));
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=samples-dropdown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"samples-dropdown.js","sourceRoot":"","sources":["../../../src/react/samples-dropdown.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAqB,WAAW,EAAE,MAAM,OAAO,CAAC;AASvD,MAAM,CAAC,MAAM,eAAe,GAA4C,CAAC,EACvE,OAAO,EACP,kBAAkB,EAClB,0BAA0B,GAC3B,EAAE,EAAE;IACH,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAClD,OAAO,2BAAsB,MAAM,IAAf,MAAM,CAAmB,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG,WAAW,CAChC,CAAC,GAAQ,EAAE,EAAE;QACX,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;YAC7B,0BAA0B,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;SAC9C;IACH,CAAC,EACD,CAAC,0BAA0B,CAAC,CAC7B,CAAC;IACF,OAAO,CACL,MAAC,MAAM,IAAC,SAAS,EAAC,iBAAiB,EAAC,QAAQ,EAAE,cAAc,EAAE,KAAK,EAAE,kBAAkB,aAAlB,kBAAkB,cAAlB,kBAAkB,GAAI,EAAE,aAC3F,iBAAQ,KAAK,EAAC,EAAE,EAAC,QAAQ,uCAEhB,EACR,OAAO,IACD,CACV,CAAC;AACJ,CAAC,CAAC"}
|