@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.
Files changed (134) hide show
  1. package/README.md +64 -0
  2. package/dist/src/browser-host.d.ts +11 -0
  3. package/dist/src/browser-host.d.ts.map +1 -0
  4. package/dist/src/browser-host.js +129 -0
  5. package/dist/src/browser-host.js.map +1 -0
  6. package/dist/src/core.d.ts +7 -0
  7. package/dist/src/core.d.ts.map +1 -0
  8. package/dist/src/core.js +17 -0
  9. package/dist/src/core.js.map +1 -0
  10. package/dist/src/index.d.ts +7 -0
  11. package/dist/src/index.d.ts.map +1 -0
  12. package/dist/src/index.js +6 -0
  13. package/dist/src/index.js.map +1 -0
  14. package/dist/src/manifest.d.ts +3 -0
  15. package/dist/src/manifest.d.ts.map +1 -0
  16. package/dist/src/manifest.js +5 -0
  17. package/dist/src/manifest.js.map +1 -0
  18. package/dist/src/monaco-worker.d.ts +2 -0
  19. package/dist/src/monaco-worker.d.ts.map +1 -0
  20. package/dist/src/monaco-worker.js +18 -0
  21. package/dist/src/monaco-worker.js.map +1 -0
  22. package/dist/src/react/diagnostic-list.d.ts +11 -0
  23. package/dist/src/react/diagnostic-list.d.ts.map +1 -0
  24. package/dist/src/react/diagnostic-list.js +16 -0
  25. package/dist/src/react/diagnostic-list.js.map +1 -0
  26. package/dist/src/react/editor-command-bar.d.ts +19 -0
  27. package/dist/src/react/editor-command-bar.d.ts.map +1 -0
  28. package/dist/src/react/editor-command-bar.js +15 -0
  29. package/dist/src/react/editor-command-bar.js.map +1 -0
  30. package/dist/src/react/editor.d.ts +14 -0
  31. package/dist/src/react/editor.d.ts.map +1 -0
  32. package/dist/src/react/editor.js +37 -0
  33. package/dist/src/react/editor.js.map +1 -0
  34. package/dist/src/react/emitter-dropdown.d.ts +8 -0
  35. package/dist/src/react/emitter-dropdown.d.ts.map +1 -0
  36. package/dist/src/react/emitter-dropdown.js +13 -0
  37. package/dist/src/react/emitter-dropdown.js.map +1 -0
  38. package/dist/src/react/error-tab.d.ts +12 -0
  39. package/dist/src/react/error-tab.d.ts.map +1 -0
  40. package/dist/src/react/error-tab.js +20 -0
  41. package/dist/src/react/error-tab.js.map +1 -0
  42. package/dist/src/react/file-output.d.ts +12 -0
  43. package/dist/src/react/file-output.d.ts.map +1 -0
  44. package/dist/src/react/file-output.js +31 -0
  45. package/dist/src/react/file-output.js.map +1 -0
  46. package/dist/src/react/footer.d.ts +3 -0
  47. package/dist/src/react/footer.d.ts.map +1 -0
  48. package/dist/src/react/footer.js +29 -0
  49. package/dist/src/react/footer.js.map +1 -0
  50. package/dist/src/react/hooks.d.ts +15 -0
  51. package/dist/src/react/hooks.d.ts.map +1 -0
  52. package/dist/src/react/hooks.js +50 -0
  53. package/dist/src/react/hooks.js.map +1 -0
  54. package/dist/src/react/index.d.ts +4 -0
  55. package/dist/src/react/index.d.ts.map +1 -0
  56. package/dist/src/react/index.js +4 -0
  57. package/dist/src/react/index.js.map +1 -0
  58. package/dist/src/react/output-tabs.d.ts +19 -0
  59. package/dist/src/react/output-tabs.d.ts.map +1 -0
  60. package/dist/src/react/output-tabs.js +38 -0
  61. package/dist/src/react/output-tabs.js.map +1 -0
  62. package/dist/src/react/output-view.d.ts +9 -0
  63. package/dist/src/react/output-view.d.ts.map +1 -0
  64. package/dist/src/react/output-view.js +99 -0
  65. package/dist/src/react/output-view.js.map +1 -0
  66. package/dist/src/react/playground.d.ts +56 -0
  67. package/dist/src/react/playground.d.ts.map +1 -0
  68. package/dist/src/react/playground.js +186 -0
  69. package/dist/src/react/playground.js.map +1 -0
  70. package/dist/src/react/samples-dropdown.d.ts +9 -0
  71. package/dist/src/react/samples-dropdown.d.ts.map +1 -0
  72. package/dist/src/react/samples-dropdown.js +15 -0
  73. package/dist/src/react/samples-dropdown.js.map +1 -0
  74. package/dist/src/react/settings/compiler-settings.d.ts +11 -0
  75. package/dist/src/react/settings/compiler-settings.d.ts.map +1 -0
  76. package/dist/src/react/settings/compiler-settings.js +42 -0
  77. package/dist/src/react/settings/compiler-settings.js.map +1 -0
  78. package/dist/src/react/settings/emitter-options-form.d.ts +10 -0
  79. package/dist/src/react/settings/emitter-options-form.d.ts.map +1 -0
  80. package/dist/src/react/settings/emitter-options-form.js +39 -0
  81. package/dist/src/react/settings/emitter-options-form.js.map +1 -0
  82. package/dist/src/react/settings/linter-form.d.ts +10 -0
  83. package/dist/src/react/settings/linter-form.d.ts.map +1 -0
  84. package/dist/src/react/settings/linter-form.js +33 -0
  85. package/dist/src/react/settings/linter-form.js.map +1 -0
  86. package/dist/src/react/standalone.d.ts +9 -0
  87. package/dist/src/react/standalone.d.ts.map +1 -0
  88. package/dist/src/react/standalone.js +63 -0
  89. package/dist/src/react/standalone.js.map +1 -0
  90. package/dist/src/react/swagger-ui.d.ts +6 -0
  91. package/dist/src/react/swagger-ui.d.ts.map +1 -0
  92. package/dist/src/react/swagger-ui.js +19 -0
  93. package/dist/src/react/swagger-ui.js.map +1 -0
  94. package/dist/src/react/types.d.ts +26 -0
  95. package/dist/src/react/types.d.ts.map +1 -0
  96. package/dist/src/react/types.js +2 -0
  97. package/dist/src/react/types.js.map +1 -0
  98. package/dist/src/react/typespec-editor.d.ts +12 -0
  99. package/dist/src/react/typespec-editor.d.ts.map +1 -0
  100. package/dist/src/react/typespec-editor.js +30 -0
  101. package/dist/src/react/typespec-editor.js.map +1 -0
  102. package/dist/src/react/viewers.d.ts +3 -0
  103. package/dist/src/react/viewers.d.ts.map +1 -0
  104. package/dist/src/react/viewers.js +8 -0
  105. package/dist/src/react/viewers.js.map +1 -0
  106. package/dist/src/services.d.ts +6 -0
  107. package/dist/src/services.d.ts.map +1 -0
  108. package/dist/src/services.js +323 -0
  109. package/dist/src/services.js.map +1 -0
  110. package/dist/src/state-storage.d.ts +21 -0
  111. package/dist/src/state-storage.d.ts.map +1 -0
  112. package/dist/src/state-storage.js +81 -0
  113. package/dist/src/state-storage.js.map +1 -0
  114. package/dist/src/types.d.ts +11 -0
  115. package/dist/src/types.d.ts.map +1 -0
  116. package/dist/src/types.js +2 -0
  117. package/dist/src/types.js.map +1 -0
  118. package/dist/src/utils.d.ts +8 -0
  119. package/dist/src/utils.d.ts.map +1 -0
  120. package/dist/src/utils.js +14 -0
  121. package/dist/src/utils.js.map +1 -0
  122. package/dist/src/vite/index.d.ts +4 -0
  123. package/dist/src/vite/index.d.ts.map +1 -0
  124. package/dist/src/vite/index.js +92 -0
  125. package/dist/src/vite/index.js.map +1 -0
  126. package/dist/src/vite/types.d.ts +15 -0
  127. package/dist/src/vite/types.d.ts.map +1 -0
  128. package/dist/src/vite/types.js +2 -0
  129. package/dist/src/vite/types.js.map +1 -0
  130. package/dist/vite.config.d.ts +3 -0
  131. package/dist/vite.config.d.ts.map +1 -0
  132. package/dist/vite.config.js +38 -0
  133. package/dist/vite.config.js.map +1 -0
  134. 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,4 @@
1
+ export { Playground, PlaygroundProps } from "./playground.js";
2
+ export { createReactPlayground, renderReactPlayground } from "./standalone.js";
3
+ export * from "./types.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -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,4 @@
1
+ export { Playground } from "./playground.js";
2
+ export { createReactPlayground, renderReactPlayground } from "./standalone.js";
3
+ export * from "./types.js";
4
+ //# sourceMappingURL=index.js.map
@@ -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":"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"}
@@ -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"}