From f1442a72cd2aaacc9fb1437d4726de76ceaf1e1d Mon Sep 17 00:00:00 2001 From: Vyacheslav Matyukhin Date: Sat, 19 Aug 2023 21:22:29 -0600 Subject: [PATCH 01/39] version picker in the playground --- packages/components/package.json | 2 +- packages/prettier-plugin/package.json | 2 +- packages/squiggle-lang/package.json | 2 +- packages/squiggle-lang/src/library/version.ts | 2 +- packages/ui/package.json | 2 +- .../src/SquigglePlaygroundVersionPicker.d.ts | 8 ++ .../SquigglePlaygroundVersionPicker.d.ts.map | 1 + .../src/SquigglePlaygroundVersionPicker.js | 15 +++ .../SquigglePlaygroundVersionPicker.js.map | 1 + .../dist/src/VersionedSquigglePlayground.d.ts | 27 +++++ .../src/VersionedSquigglePlayground.d.ts.map | 1 + .../dist/src/VersionedSquigglePlayground.js | 24 ++++ .../src/VersionedSquigglePlayground.js.map | 1 + .../versioned-playground/dist/src/index.d.ts | 4 + .../dist/src/index.d.ts.map | 1 + .../versioned-playground/dist/src/index.js | 4 + .../dist/src/index.js.map | 1 + .../dist/src/playgroundByVersion.js | 11 ++ .../dist/src/playgroundByVersion.js.map | 1 + .../dist/src/versions.d.ts | 5 + .../dist/src/versions.d.ts.map | 1 + .../versioned-playground/dist/src/versions.js | 6 + .../dist/src/versions.js.map | 1 + .../dist/tsconfig.tsbuildinfo | 1 + packages/vscode-ext/package.json | 2 +- packages/website/package.json | 1 + .../website/src/components/PlaygroundPage.tsx | 73 ------------ .../{ => PlaygroundPage}/ShareButton.tsx | 0 .../PlaygroundPage/VersionedPlayground.tsx | 57 +++++++++ .../src/components/PlaygroundPage/index.tsx | 109 ++++++++++++++++++ pnpm-lock.yaml | 86 ++++++++++++++ 31 files changed, 373 insertions(+), 79 deletions(-) create mode 100644 packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.d.ts create mode 100644 packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.d.ts.map create mode 100644 packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.js create mode 100644 packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.js.map create mode 100644 packages/versioned-playground/dist/src/VersionedSquigglePlayground.d.ts create mode 100644 packages/versioned-playground/dist/src/VersionedSquigglePlayground.d.ts.map create mode 100644 packages/versioned-playground/dist/src/VersionedSquigglePlayground.js create mode 100644 packages/versioned-playground/dist/src/VersionedSquigglePlayground.js.map create mode 100644 packages/versioned-playground/dist/src/index.d.ts create mode 100644 packages/versioned-playground/dist/src/index.d.ts.map create mode 100644 packages/versioned-playground/dist/src/index.js create mode 100644 packages/versioned-playground/dist/src/index.js.map create mode 100644 packages/versioned-playground/dist/src/playgroundByVersion.js create mode 100644 packages/versioned-playground/dist/src/playgroundByVersion.js.map create mode 100644 packages/versioned-playground/dist/src/versions.d.ts create mode 100644 packages/versioned-playground/dist/src/versions.d.ts.map create mode 100644 packages/versioned-playground/dist/src/versions.js create mode 100644 packages/versioned-playground/dist/src/versions.js.map create mode 100644 packages/versioned-playground/dist/tsconfig.tsbuildinfo delete mode 100644 packages/website/src/components/PlaygroundPage.tsx rename packages/website/src/components/{ => PlaygroundPage}/ShareButton.tsx (100%) create mode 100644 packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx create mode 100644 packages/website/src/components/PlaygroundPage/index.tsx diff --git a/packages/components/package.json b/packages/components/package.json index 83d4010403..ab2b7e7741 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,6 +1,6 @@ { "name": "@quri/squiggle-components", - "version": "0.8.5", + "version": "0.8.6-dev", "license": "MIT", "repository": { "type": "git", diff --git a/packages/prettier-plugin/package.json b/packages/prettier-plugin/package.json index b5d189d6a1..5477cfae49 100644 --- a/packages/prettier-plugin/package.json +++ b/packages/prettier-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@quri/prettier-plugin-squiggle", - "version": "0.8.5", + "version": "0.8.6-dev", "license": "MIT", "homepage": "https://squiggle-language.com", "author": "Quantified Uncertainty Research Institute", diff --git a/packages/squiggle-lang/package.json b/packages/squiggle-lang/package.json index 91d09091f9..4feaa8fc72 100644 --- a/packages/squiggle-lang/package.json +++ b/packages/squiggle-lang/package.json @@ -1,6 +1,6 @@ { "name": "@quri/squiggle-lang", - "version": "0.8.5", + "version": "0.8.6-dev", "license": "MIT", "homepage": "https://squiggle-language.com", "author": "Quantified Uncertainty Research Institute", diff --git a/packages/squiggle-lang/src/library/version.ts b/packages/squiggle-lang/src/library/version.ts index 8258fb76fa..55beea217f 100644 --- a/packages/squiggle-lang/src/library/version.ts +++ b/packages/squiggle-lang/src/library/version.ts @@ -3,5 +3,5 @@ import { Value, vString } from "../value/index.js"; export function makeVersionConstant(): ImmutableMap { // TODO - generate during build based on package.json - return ImmutableMap([["System.version", vString("0.8.5")]]); + return ImmutableMap([["System.version", vString("0.8.6-dev")]]); } diff --git a/packages/ui/package.json b/packages/ui/package.json index 06eb9db52a..4a1213f2cd 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@quri/ui", - "version": "0.1.4", + "version": "0.1.5-dev", "license": "MIT", "repository": { "type": "git", diff --git a/packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.d.ts b/packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.d.ts new file mode 100644 index 0000000000..4a16268677 --- /dev/null +++ b/packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.d.ts @@ -0,0 +1,8 @@ +import { FC } from "react"; +import { SquiggleVersion } from "./versions.js"; +export declare const SquigglePlaygroundVersionPicker: FC<{ + version: string; + onChange: (newVersion: SquiggleVersion) => void; + size: "small" | "medium"; +}>; +//# sourceMappingURL=SquigglePlaygroundVersionPicker.d.ts.map \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.d.ts.map b/packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.d.ts.map new file mode 100644 index 0000000000..823c4e4dca --- /dev/null +++ b/packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"SquigglePlaygroundVersionPicker.d.ts","sourceRoot":"","sources":["../../src/SquigglePlaygroundVersionPicker.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC;AAa3B,OAAO,EACL,eAAe,EAGhB,MAAM,eAAe,CAAC;AAEvB,eAAO,MAAM,+BAA+B,EAAE,EAAE,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,CAAC,UAAU,EAAE,eAAe,KAAK,IAAI,CAAC;IAChD,IAAI,EAAE,OAAO,GAAG,QAAQ,CAAC;CAC1B,CA+CA,CAAC"} \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.js b/packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.js new file mode 100644 index 0000000000..3015c88694 --- /dev/null +++ b/packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.js @@ -0,0 +1,15 @@ +"use client"; +import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime"; +import { Button, CodeBracketIcon, Dropdown, DropdownMenu, DropdownMenuActionItem, DropdownMenuLinkItem, DropdownMenuSeparator, WrenchIcon, } from "@quri/ui"; +import { checkSquiggleVersion, squiggleVersions, } from "./versions.js"; +export const SquigglePlaygroundVersionPicker = ({ version, onChange, size }) => { + const versionIsValid = checkSquiggleVersion(version); + const versionTitle = (version) => version === "dev" ? "Dev" : version; + const versionIcon = (version) => version === "dev" ? WrenchIcon : CodeBracketIcon; + const CurrentIcon = versionIcon(version); + return (_jsx("div", { className: "flex", children: _jsx(Dropdown, { render: ({ close }) => (_jsxs(DropdownMenu, { children: [squiggleVersions.map((version) => (_jsx(DropdownMenuActionItem, { title: versionTitle(version), icon: versionIcon(version), onClick: () => { + onChange(version); + close(); + } }, version))), _jsx(DropdownMenuSeparator, {}), _jsx(DropdownMenuLinkItem, { href: "https://www.squiggle-language.com/docs/Changelog", newTab: true, title: "Changelog", close: close })] })), children: _jsx(Button, { size: size, children: _jsxs("div", { className: "flex items-center gap-2", children: [_jsx(CurrentIcon, { size: 14, className: "text-slate-500" }), versionTitle(version), versionIsValid ? "" : ` (unknown)`] }) }) }) })); +}; +//# sourceMappingURL=SquigglePlaygroundVersionPicker.js.map \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.js.map b/packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.js.map new file mode 100644 index 0000000000..24062beb94 --- /dev/null +++ b/packages/versioned-playground/dist/src/SquigglePlaygroundVersionPicker.js.map @@ -0,0 +1 @@ +{"version":3,"file":"SquigglePlaygroundVersionPicker.js","sourceRoot":"","sources":["../../src/SquigglePlaygroundVersionPicker.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AAGb,OAAO,EACL,MAAM,EACN,eAAe,EACf,QAAQ,EACR,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,EACpB,qBAAqB,EACrB,UAAU,GACX,MAAM,UAAU,CAAC;AAElB,OAAO,EAEL,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,eAAe,CAAC;AAEvB,MAAM,CAAC,MAAM,+BAA+B,GAIvC,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE;IACnC,MAAM,cAAc,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAErD,MAAM,YAAY,GAAG,CAAC,OAAe,EAAE,EAAE,CACvC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;IAEtC,MAAM,WAAW,GAAG,CAAC,OAAe,EAAE,EAAE,CACtC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,CAAC;IAEnD,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAEzC,OAAO,CACL,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,QAAQ,IACP,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CACrB,MAAC,YAAY,eACV,gBAAgB,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CACjC,KAAC,sBAAsB,IAErB,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAC5B,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,EAC1B,OAAO,EAAE,GAAG,EAAE;4BACZ,QAAQ,CAAC,OAAO,CAAC,CAAC;4BAClB,KAAK,EAAE,CAAC;wBACV,CAAC,IANI,OAAO,CAOZ,CACH,CAAC,EACF,KAAC,qBAAqB,KAAG,EACzB,KAAC,oBAAoB,IACnB,IAAI,EAAC,kDAAkD,EACvD,MAAM,EAAE,IAAI,EACZ,KAAK,EAAC,WAAW,EACjB,KAAK,EAAE,KAAK,GACZ,IACW,CAChB,YAED,KAAC,MAAM,IAAC,IAAI,EAAE,IAAI,YAChB,eAAK,SAAS,EAAC,yBAAyB,aACtC,KAAC,WAAW,IAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAC,gBAAgB,GAAG,EACnD,YAAY,CAAC,OAAO,CAAC,EACrB,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,YAAY,IAC/B,GACC,GACA,GACP,CACP,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/VersionedSquigglePlayground.d.ts b/packages/versioned-playground/dist/src/VersionedSquigglePlayground.d.ts new file mode 100644 index 0000000000..bdee24b388 --- /dev/null +++ b/packages/versioned-playground/dist/src/VersionedSquigglePlayground.d.ts @@ -0,0 +1,27 @@ +import { FC, ReactNode } from "react"; +type CommonProps = { + defaultCode?: string; + distributionChartSettings?: { + showSummary?: boolean; + }; + renderExtraControls?: (options: { + openModal: (name: string) => void; + }) => ReactNode; + renderExtraModal?: (name: string) => { + title: string; + body: ReactNode; + } | undefined; + onCodeChange?: (code: string) => void; + onSettingsChange?: (settings: { + distributionChartSettings: { + showSummary: boolean; + }; + }) => void; + height?: string | number; +}; +type Props = CommonProps & { + version: string; +}; +export declare const VersionedSquigglePlayground: FC; +export {}; +//# sourceMappingURL=VersionedSquigglePlayground.d.ts.map \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/VersionedSquigglePlayground.d.ts.map b/packages/versioned-playground/dist/src/VersionedSquigglePlayground.d.ts.map new file mode 100644 index 0000000000..937e793204 --- /dev/null +++ b/packages/versioned-playground/dist/src/VersionedSquigglePlayground.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"VersionedSquigglePlayground.d.ts","sourceRoot":"","sources":["../../src/VersionedSquigglePlayground.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,EAAE,EAAE,SAAS,EAA2B,MAAM,OAAO,CAAC;AAqB/D,KAAK,WAAW,GAAG;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IACtD,mBAAmB,CAAC,EAAE,CAAC,OAAO,EAAE;QAC9B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;KACnC,KAAK,SAAS,CAAC;IAChB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAC5B;QACE,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,SAAS,CAAC;KACjB,GACD,SAAS,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC,gBAAgB,CAAC,EAAE,CAAC,QAAQ,EAAE;QAC5B,yBAAyB,EAAE;YAAE,WAAW,EAAE,OAAO,CAAA;SAAE,CAAC;KACrD,KAAK,IAAI,CAAC;IACX,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CAC1B,CAAC;AAEF,KAAK,KAAK,GAAG,WAAW,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,2BAA2B,EAAE,EAAE,CAAC,KAAK,CAoCjD,CAAC"} \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/VersionedSquigglePlayground.js b/packages/versioned-playground/dist/src/VersionedSquigglePlayground.js new file mode 100644 index 0000000000..da7d750e27 --- /dev/null +++ b/packages/versioned-playground/dist/src/VersionedSquigglePlayground.js @@ -0,0 +1,24 @@ +"use client"; +import { jsx as _jsx } from "react/jsx-runtime"; +import { useMemo, lazy, Suspense } from "react"; +import { useToast } from "@quri/ui"; +import { checkSquiggleVersion, defaultSquiggleVersion, } from "./versions.js"; +const playgroundByVersion = { + dev: lazy(async () => ({ + default: (await import("@quri/squiggle-components")).SquigglePlayground, + })), +}; +export const VersionedSquigglePlayground = ({ version, ...props }) => { + const toast = useToast(); + const usedVersion = useMemo(() => { + if (!checkSquiggleVersion(version)) { + toast(`Playground for version ${version} is not available. Rendering with + ${defaultSquiggleVersion} instead.`, "error"); + return defaultSquiggleVersion; + } + return version; + }, [version, toast]); + const Playground = playgroundByVersion[usedVersion]; + return (_jsx(Suspense, { fallback: null, children: _jsx(Playground, { defaultCode: props.defaultCode, distributionChartSettings: props.distributionChartSettings, renderExtraControls: props.renderExtraControls, renderExtraModal: props.renderExtraModal, onCodeChange: props.onCodeChange, onSettingsChange: props.onSettingsChange, height: props.height }) })); +}; +//# sourceMappingURL=VersionedSquigglePlayground.js.map \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/VersionedSquigglePlayground.js.map b/packages/versioned-playground/dist/src/VersionedSquigglePlayground.js.map new file mode 100644 index 0000000000..018fb04ac7 --- /dev/null +++ b/packages/versioned-playground/dist/src/VersionedSquigglePlayground.js.map @@ -0,0 +1 @@ +{"version":3,"file":"VersionedSquigglePlayground.js","sourceRoot":"","sources":["../../src/VersionedSquigglePlayground.tsx"],"names":[],"mappings":"AAAA,YAAY,CAAC;;AACb,OAAO,EAAiB,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAE/D,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAEpC,OAAO,EAEL,oBAAoB,EACpB,sBAAsB,GACvB,MAAM,eAAe,CAAC;AAMvB,MAAM,mBAAmB,GAAG;IAC1B,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACrB,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,kBAAkB;KACxE,CAAC,CAAC;CACJ,CAAC;AA0BF,MAAM,CAAC,MAAM,2BAA2B,GAAc,CAAC,EACrD,OAAO,EACP,GAAG,KAAK,EACT,EAAE,EAAE;IACH,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IAEzB,MAAM,WAAW,GAAG,OAAO,CAAkB,GAAG,EAAE;QAChD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,EAAE;YAClC,KAAK,CACH,0BAA0B,OAAO;YAC7B,sBAAsB,WAAW,EACrC,OAAO,CACR,CAAC;YACF,OAAO,sBAAsB,CAAC;SAC/B;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;IAErB,MAAM,UAAU,GAAG,mBAAmB,CAAC,WAAW,CAAC,CAAC;IAGpD,OAAO,CACL,KAAC,QAAQ,IAAC,QAAQ,EAAE,IAAI,YACtB,KAAC,UAAU,IAGT,WAAW,EAAE,KAAK,CAAC,WAAW,EAC9B,yBAAyB,EAAE,KAAK,CAAC,yBAAyB,EAC1D,mBAAmB,EAAE,KAAK,CAAC,mBAAmB,EAC9C,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,YAAY,EAAE,KAAK,CAAC,YAAY,EAChC,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EACxC,MAAM,EAAE,KAAK,CAAC,MAAM,GACpB,GACO,CACZ,CAAC;AACJ,CAAC,CAAC"} \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/index.d.ts b/packages/versioned-playground/dist/src/index.d.ts new file mode 100644 index 0000000000..067f4087fd --- /dev/null +++ b/packages/versioned-playground/dist/src/index.d.ts @@ -0,0 +1,4 @@ +export { VersionedSquigglePlayground } from "./VersionedSquigglePlayground.js"; +export { SquigglePlaygroundVersionPicker } from "./SquigglePlaygroundVersionPicker.js"; +export { squiggleVersions, type SquiggleVersion, defaultSquiggleVersion, checkSquiggleVersion, } from "./versions.js"; +//# sourceMappingURL=index.d.ts.map \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/index.d.ts.map b/packages/versioned-playground/dist/src/index.d.ts.map new file mode 100644 index 0000000000..50e95a7261 --- /dev/null +++ b/packages/versioned-playground/dist/src/index.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAEvF,OAAO,EACL,gBAAgB,EAChB,KAAK,eAAe,EACpB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,eAAe,CAAC"} \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/index.js b/packages/versioned-playground/dist/src/index.js new file mode 100644 index 0000000000..8c95ed81b1 --- /dev/null +++ b/packages/versioned-playground/dist/src/index.js @@ -0,0 +1,4 @@ +export { VersionedSquigglePlayground } from "./VersionedSquigglePlayground.js"; +export { SquigglePlaygroundVersionPicker } from "./SquigglePlaygroundVersionPicker.js"; +export { squiggleVersions, defaultSquiggleVersion, checkSquiggleVersion, } from "./versions.js"; +//# sourceMappingURL=index.js.map \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/index.js.map b/packages/versioned-playground/dist/src/index.js.map new file mode 100644 index 0000000000..bbb42ceb41 --- /dev/null +++ b/packages/versioned-playground/dist/src/index.js.map @@ -0,0 +1 @@ +{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,2BAA2B,EAAE,MAAM,kCAAkC,CAAC;AAC/E,OAAO,EAAE,+BAA+B,EAAE,MAAM,sCAAsC,CAAC;AAEvF,OAAO,EACL,gBAAgB,EAEhB,sBAAsB,EACtB,oBAAoB,GACrB,MAAM,eAAe,CAAC"} \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/playgroundByVersion.js b/packages/versioned-playground/dist/src/playgroundByVersion.js new file mode 100644 index 0000000000..51043c0a9e --- /dev/null +++ b/packages/versioned-playground/dist/src/playgroundByVersion.js @@ -0,0 +1,11 @@ +"use client"; +import { lazy } from "react"; +export const playgroundByVersion = { + "0.8.5": lazy(async () => ({ + default: (await import("squiggle-components-0.8.5")).SquigglePlayground, + })), + dev: lazy(async () => ({ + default: (await import("@quri/squiggle-components")).SquigglePlayground, + })), +}; +//# sourceMappingURL=playgroundByVersion.js.map \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/playgroundByVersion.js.map b/packages/versioned-playground/dist/src/playgroundByVersion.js.map new file mode 100644 index 0000000000..941f3a45c0 --- /dev/null +++ b/packages/versioned-playground/dist/src/playgroundByVersion.js.map @@ -0,0 +1 @@ +{"version":3,"file":"playgroundByVersion.js","sourceRoot":"","sources":["../../src/playgroundByVersion.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAK7B,MAAM,CAAC,MAAM,mBAAmB,GAAG;IACjC,OAAO,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACzB,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,kBAAkB;KACxE,CAAC,CAAC;IACH,GAAG,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;QACrB,OAAO,EAAE,CAAC,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,kBAAkB;KACxE,CAAC,CAAC;CACJ,CAAC"} \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/versions.d.ts b/packages/versioned-playground/dist/src/versions.d.ts new file mode 100644 index 0000000000..1ee01af66c --- /dev/null +++ b/packages/versioned-playground/dist/src/versions.d.ts @@ -0,0 +1,5 @@ +export declare const squiggleVersions: readonly ["dev"]; +export type SquiggleVersion = (typeof squiggleVersions)[number]; +export declare const defaultSquiggleVersion: SquiggleVersion; +export declare function checkSquiggleVersion(version: string): version is SquiggleVersion; +//# sourceMappingURL=versions.d.ts.map \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/versions.d.ts.map b/packages/versioned-playground/dist/src/versions.d.ts.map new file mode 100644 index 0000000000..b8f3f3370e --- /dev/null +++ b/packages/versioned-playground/dist/src/versions.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../../src/versions.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,gBAAgB,kBAAmB,CAAC;AAEjD,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAGhE,eAAO,MAAM,sBAAsB,EAAE,eAAuB,CAAC;AAE7D,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,GACd,OAAO,IAAI,eAAe,CAE5B"} \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/versions.js b/packages/versioned-playground/dist/src/versions.js new file mode 100644 index 0000000000..4230d2a0e1 --- /dev/null +++ b/packages/versioned-playground/dist/src/versions.js @@ -0,0 +1,6 @@ +export const squiggleVersions = ["dev"]; +export const defaultSquiggleVersion = "dev"; +export function checkSquiggleVersion(version) { + return squiggleVersions.includes(version); +} +//# sourceMappingURL=versions.js.map \ No newline at end of file diff --git a/packages/versioned-playground/dist/src/versions.js.map b/packages/versioned-playground/dist/src/versions.js.map new file mode 100644 index 0000000000..b1128c828b --- /dev/null +++ b/packages/versioned-playground/dist/src/versions.js.map @@ -0,0 +1 @@ +{"version":3,"file":"versions.js","sourceRoot":"","sources":["../../src/versions.ts"],"names":[],"mappings":"AACA,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAK,CAAU,CAAC;AAKjD,MAAM,CAAC,MAAM,sBAAsB,GAAoB,KAAK,CAAC;AAE7D,MAAM,UAAU,oBAAoB,CAClC,OAAe;IAEf,OAAQ,gBAAsC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACnE,CAAC"} \ No newline at end of file diff --git a/packages/versioned-playground/dist/tsconfig.tsbuildinfo b/packages/versioned-playground/dist/tsconfig.tsbuildinfo new file mode 100644 index 0000000000..07e2d4ae5c --- /dev/null +++ b/packages/versioned-playground/dist/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"program":{"fileNames":["../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2021.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.scripthost.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2021.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.array.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.error.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.object.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.string.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/typescript@5.1.6/node_modules/typescript/lib/lib.es2022.full.d.ts","../../../node_modules/.pnpm/@types+react@18.2.18/node_modules/@types/react/global.d.ts","../../../node_modules/.pnpm/csstype@3.1.2/node_modules/csstype/index.d.ts","../../../node_modules/.pnpm/@types+prop-types@15.7.5/node_modules/@types/prop-types/index.d.ts","../../../node_modules/.pnpm/@types+scheduler@0.16.3/node_modules/@types/scheduler/tracing.d.ts","../../../node_modules/.pnpm/@types+react@18.2.18/node_modules/@types/react/index.d.ts","../../../node_modules/.pnpm/@types+react@18.2.18/node_modules/@types/react/jsx-runtime.d.ts","../../ui/dist/components/button.d.ts","../../ui/dist/components/modal.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/types.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/utils/render.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/combobox/combobox.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/description/description.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/dialog/dialog.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/disclosure/disclosure.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/focus-trap/focus-trap.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/listbox/listbox.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/menu/menu.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/popover/popover.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/label/label.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/radio-group/radio-group.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/switch/switch.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/tabs/tabs.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/transitions/transition.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/components/portal/portal.d.ts","../../../node_modules/.pnpm/@headlessui+react@1.7.15_react-dom@18.2.0_react@18.2.0/node_modules/@headlessui/react/dist/index.d.ts","../../ui/dist/components/styledtab.d.ts","../../ui/dist/components/dropdown/dropdownmenu.d.ts","../../ui/dist/icons/icon.d.ts","../../ui/dist/components/dropdown/dropdownmenuactioniteminternal.d.ts","../../ui/dist/components/dropdown/dropdownmenuactionitem.d.ts","../../ui/dist/components/dropdown/dropdownmenulinkitem.d.ts","../../ui/dist/components/dropdown/dropdownmenuasyncactionitem.d.ts","../../ui/dist/components/dropdown/dropdownmenuheader.d.ts","../../ui/dist/components/dropdown/dropdownmenuseparator.d.ts","../../ui/dist/components/dropdown/index.d.ts","../../ui/dist/components/mousetooltip.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/src/computeposition.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/src/detectoverflow.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/src/middleware/arrow.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/src/middleware/autoplacement.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/src/middleware/flip.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/src/middleware/hide.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/src/middleware/inline.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/src/middleware/offset.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/src/middleware/shift.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/src/middleware/size.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/src/utils/recttoclientrect.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/src/types.d.ts","../../../node_modules/.pnpm/@floating-ui+core@1.3.0/node_modules/@floating-ui/core/index.d.ts","../../../node_modules/.pnpm/@floating-ui+dom@1.3.0/node_modules/@floating-ui/dom/src/autoupdate.d.ts","../../../node_modules/.pnpm/@floating-ui+dom@1.3.0/node_modules/@floating-ui/dom/src/platform.d.ts","../../../node_modules/.pnpm/@floating-ui+dom@1.3.0/node_modules/@floating-ui/dom/src/utils/getoverflowancestors.d.ts","../../../node_modules/.pnpm/@floating-ui+dom@1.3.0/node_modules/@floating-ui/dom/src/index.d.ts","../../../node_modules/.pnpm/@floating-ui+dom@1.3.0/node_modules/@floating-ui/dom/src/types.d.ts","../../../node_modules/.pnpm/@floating-ui+dom@1.3.0/node_modules/@floating-ui/dom/index.d.ts","../../../node_modules/.pnpm/@floating-ui+react-dom@2.0.1_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react-dom/src/arrow.d.ts","../../../node_modules/.pnpm/@floating-ui+react-dom@2.0.1_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react-dom/src/usefloating.d.ts","../../../node_modules/.pnpm/@floating-ui+react-dom@2.0.1_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react-dom/src/types.d.ts","../../../node_modules/.pnpm/@floating-ui+react-dom@2.0.1_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react-dom/index.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/usedismiss.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/components/floatingarrow.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/components/floatingdelaygroup.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/components/floatingfocusmanager.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/components/floatinglist.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/components/floatingoverlay.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/components/floatingportal.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/components/floatingtree.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/useclick.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/useclientpoint.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/usefloating.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/usefocus.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/usehover.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/useid.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/useinteractions.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/uselistnavigation.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/usemergerefs.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/userole.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/usetransition.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/hooks/usetypeahead.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/inner.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/safepolygon.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/index.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/src/types.d.ts","../../../node_modules/.pnpm/@floating-ui+react@0.24.3_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/@floating-ui/react/index.d.ts","../../ui/dist/components/texttooltip.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/utils/createsubject.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/events.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/path/common.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/path/eager.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/path/index.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/fieldarray.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/resolvers.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/form.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/utils.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/fields.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/errors.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/validator.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/controller.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/types/index.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/controller.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/form.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/logic/appenderrors.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/logic/index.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/usecontroller.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/usefieldarray.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/useform.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/useformcontext.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/useformstate.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/usewatch.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/utils/get.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/utils/set.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/utils/index.d.ts","../../../node_modules/.pnpm/react-hook-form@7.45.2_react@18.2.0/node_modules/react-hook-form/dist/index.d.ts","../../ui/dist/forms/common/formfieldlayout.d.ts","../../ui/dist/forms/common/types.d.ts","../../ui/dist/forms/fields/checkboxformfield.d.ts","../../ui/dist/forms/fields/colorformfield.d.ts","../../ui/dist/forms/styled/styledinput.d.ts","../../ui/dist/forms/fields/numberformfield.d.ts","../../ui/dist/forms/styled/styledradio.d.ts","../../ui/dist/forms/fields/radioformfield.d.ts","../../ui/dist/forms/styled/styledtextarea.d.ts","../../ui/dist/forms/fields/textareaformfield.d.ts","../../ui/dist/forms/fields/textformfield.d.ts","../../ui/dist/forms/fields/selectstringformfield.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/filters.d.ts","../../../node_modules/.pnpm/@emotion+utils@1.2.1/node_modules/@emotion/utils/dist/declarations/types/index.d.ts","../../../node_modules/.pnpm/@emotion+utils@1.2.1/node_modules/@emotion/utils/dist/declarations/src/index.d.ts","../../../node_modules/.pnpm/@emotion+utils@1.2.1/node_modules/@emotion/utils/dist/emotion-utils.cjs.d.ts","../../../node_modules/.pnpm/@emotion+cache@11.11.0/node_modules/@emotion/cache/dist/declarations/types/index.d.ts","../../../node_modules/.pnpm/@emotion+cache@11.11.0/node_modules/@emotion/cache/dist/declarations/src/index.d.ts","../../../node_modules/.pnpm/@emotion+cache@11.11.0/node_modules/@emotion/cache/dist/emotion-cache.cjs.d.ts","../../../node_modules/.pnpm/@emotion+serialize@1.1.2/node_modules/@emotion/serialize/dist/declarations/types/index.d.ts","../../../node_modules/.pnpm/@emotion+serialize@1.1.2/node_modules/@emotion/serialize/dist/declarations/src/index.d.ts","../../../node_modules/.pnpm/@emotion+serialize@1.1.2/node_modules/@emotion/serialize/dist/emotion-serialize.cjs.d.ts","../../../node_modules/.pnpm/@emotion+react@11.11.0_@types+react@18.2.18_react@18.2.0/node_modules/@emotion/react/dist/declarations/types/jsx-namespace.d.ts","../../../node_modules/.pnpm/@emotion+react@11.11.0_@types+react@18.2.18_react@18.2.0/node_modules/@emotion/react/dist/declarations/types/helper.d.ts","../../../node_modules/.pnpm/@emotion+react@11.11.0_@types+react@18.2.18_react@18.2.0/node_modules/@emotion/react/dist/declarations/types/theming.d.ts","../../../node_modules/.pnpm/@emotion+react@11.11.0_@types+react@18.2.18_react@18.2.0/node_modules/@emotion/react/dist/declarations/types/index.d.ts","../../../node_modules/.pnpm/@emotion+react@11.11.0_@types+react@18.2.18_react@18.2.0/node_modules/@emotion/react/dist/declarations/src/index.d.ts","../../../node_modules/.pnpm/@emotion+react@11.11.0_@types+react@18.2.18_react@18.2.0/node_modules/@emotion/react/dist/emotion-react.cjs.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/components/containers.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/components/control.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/components/group.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/components/indicators.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/components/input.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/components/placeholder.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/components/option.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/components/menu.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/components/singlevalue.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/components/multivalue.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/styles.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/types.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/accessibility/index.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/components/index.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/theme.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/select.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/usestatemanager.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/statemanager.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/nonceprovider.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/declarations/src/index.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/react-select.cjs.default.d.ts","../../../node_modules/.pnpm/react-select@5.7.4_@types+react@18.2.18_react-dom@18.2.0_react@18.2.0/node_modules/react-select/dist/react-select.cjs.d.mts","../../ui/dist/forms/fields/selectformfield.d.ts","../../ui/dist/forms/common/controlledformfield.d.ts","../../ui/dist/forms/common/controlledforminput.d.ts","../../ui/dist/forms/common/formfield.d.ts","../../ui/dist/forms/common/forminput.d.ts","../../ui/dist/forms/styled/styledcheckbox.d.ts","../../ui/dist/forms/styled/styledcolorinput.d.ts","../../ui/dist/icons/dotshorizontalicon.d.ts","../../ui/dist/icons/editicon.d.ts","../../ui/dist/icons/emptyicon.d.ts","../../ui/dist/icons/externallinkicon.d.ts","../../ui/dist/icons/focusicon.d.ts","../../ui/dist/icons/heroicons.d.ts","../../ui/dist/icons/refreshicon.d.ts","../../ui/dist/icons/signouticon.d.ts","../../ui/dist/icons/trashicon.d.ts","../../ui/dist/icons/triangleicon.d.ts","../../ui/dist/icons/xicon.d.ts","../../ui/dist/components/withtoasts/index.d.ts","../../ui/dist/components/tailwindprovider.d.ts","../../ui/dist/index.d.ts","../src/versions.ts","../src/squiggleplaygroundversionpicker.tsx","../../squiggle-lang/dist/dist/env.d.ts","../../../node_modules/.pnpm/immutable@4.3.1/node_modules/immutable/dist/immutable.d.ts","../../squiggle-lang/dist/utility/immutablemap.d.ts","../../squiggle-lang/dist/utility/result.d.ts","../../squiggle-lang/dist/operationerror.d.ts","../../squiggle-lang/dist/xyshape.d.ts","../../squiggle-lang/dist/dist/disterror.d.ts","../../squiggle-lang/dist/pointset/mixedpoint.d.ts","../../squiggle-lang/dist/pointset/pointset.d.ts","../../squiggle-lang/dist/pointset/discrete.d.ts","../../squiggle-lang/dist/pointset/mixed.d.ts","../../squiggle-lang/dist/pointset/algebraicshapecombination.d.ts","../../squiggle-lang/dist/pointset/continuous.d.ts","../../squiggle-lang/dist/dist/pointsetdist.d.ts","../../squiggle-lang/dist/dist/basedist.d.ts","../../../node_modules/.pnpm/source-map-generator@0.8.0/node_modules/source-map-generator/source-map.d.ts","../../../node_modules/.pnpm/peggy@3.0.2/node_modules/peggy/lib/peg.d.ts","../../squiggle-lang/dist/ast/peggyhelpers.d.ts","../../squiggle-lang/dist/reducer/framestack.d.ts","../../squiggle-lang/dist/errors/messages.d.ts","../../squiggle-lang/dist/errors/ierror.d.ts","../../squiggle-lang/dist/ast/parse.d.ts","../../squiggle-lang/dist/expression/index.d.ts","../../squiggle-lang/dist/reducer/index.d.ts","../../squiggle-lang/dist/reducer/context.d.ts","../../squiggle-lang/dist/reducer/lambda.d.ts","../../squiggle-lang/dist/value/domain.d.ts","../../squiggle-lang/dist/value/index.d.ts","../../squiggle-lang/dist/reducer/stack.d.ts","../../squiggle-lang/dist/public/sqerror.d.ts","../../squiggle-lang/dist/public/sqvaluepath.d.ts","../../squiggle-lang/dist/public/sqvaluecontext.d.ts","../../squiggle-lang/dist/public/sqvalue/sqarray.d.ts","../../squiggle-lang/dist/dist/samplesetdist/index.d.ts","../../squiggle-lang/dist/operation.d.ts","../../squiggle-lang/dist/dist/symbolicdist.d.ts","../../squiggle-lang/dist/public/sqvalue/sqdistribution/sqdistributionerror.d.ts","../../squiggle-lang/dist/public/sqvalue/sqdistribution/sqpointset.d.ts","../../squiggle-lang/dist/public/sqvalue/sqdistribution/index.d.ts","../../squiggle-lang/dist/public/sqvalue/sqdomain.d.ts","../../squiggle-lang/dist/public/sqvalue/sqlambda.d.ts","../../squiggle-lang/dist/public/sqvalue/sqscale.d.ts","../../squiggle-lang/dist/public/sqvalue/sqplot.d.ts","../../squiggle-lang/dist/public/sqvalue/sqtablechart.d.ts","../../squiggle-lang/dist/public/sqvalue/index.d.ts","../../squiggle-lang/dist/public/sqvalue/sqdict.d.ts","../../squiggle-lang/dist/public/sqproject/resolver.d.ts","../../squiggle-lang/dist/public/sqproject/projectitem.d.ts","../../squiggle-lang/dist/public/types.d.ts","../../squiggle-lang/dist/public/sqproject/index.d.ts","../../squiggle-lang/dist/public/parse.d.ts","../../squiggle-lang/dist/index.d.ts","../../components/dist/src/lib/hooks/usesquiggle.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/typealiases.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/util.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/zoderror.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/locales/en.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/errors.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/parseutil.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/enumutil.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/errorutil.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/helpers/partialutil.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/types.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/external.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/lib/index.d.ts","../../../node_modules/.pnpm/zod@3.21.4/node_modules/zod/index.d.ts","../../components/dist/src/components/playgroundsettings.d.ts","../../components/dist/src/components/squigglechart.d.ts","../../components/dist/src/components/codeeditor.d.ts","../../components/dist/src/components/squiggleviewer/index.d.ts","../../components/dist/src/components/types.d.ts","../../components/dist/src/components/squiggleeditor.d.ts","../../components/dist/src/lib/hooks/usecanvas.d.ts","../../components/dist/src/lib/draw/types.d.ts","../../components/dist/src/lib/hooks/usecanvascursor.d.ts","../../components/dist/src/lib/hooks/useinitialwidth.d.ts","../../components/dist/src/lib/hooks/userunnerstate.d.ts","../../components/dist/src/lib/hooks/useuncontrolledcode.d.ts","../../components/dist/src/lib/hooks/index.d.ts","../../components/dist/src/components/ui/panelwithtoolbar/index.d.ts","../../components/dist/src/components/squiggleplayground/leftplaygroundpanel/index.d.ts","../../components/dist/src/components/squiggleplayground/index.d.ts","../../components/dist/src/components/numbershower.d.ts","../../components/dist/src/components/ui/panelwithtoolbar/toolbaritem.d.ts","../../components/dist/src/components/relativevaluesgridchart/types.d.ts","../../components/dist/src/components/relativevaluesgridchart/relativevaluecell.d.ts","../../../node_modules/.pnpm/@types+d3-array@3.0.4/node_modules/@types/d3-array/index.d.ts","../../../node_modules/.pnpm/@types+d3-selection@3.0.4/node_modules/@types/d3-selection/index.d.ts","../../../node_modules/.pnpm/@types+d3-axis@3.0.2/node_modules/@types/d3-axis/index.d.ts","../../../node_modules/.pnpm/@types+d3-brush@3.0.2/node_modules/@types/d3-brush/index.d.ts","../../../node_modules/.pnpm/@types+d3-chord@3.0.2/node_modules/@types/d3-chord/index.d.ts","../../../node_modules/.pnpm/@types+d3-color@3.1.0/node_modules/@types/d3-color/index.d.ts","../../../node_modules/.pnpm/@types+geojson@7946.0.10/node_modules/@types/geojson/index.d.ts","../../../node_modules/.pnpm/@types+d3-contour@3.0.2/node_modules/@types/d3-contour/index.d.ts","../../../node_modules/.pnpm/@types+d3-delaunay@6.0.1/node_modules/@types/d3-delaunay/index.d.ts","../../../node_modules/.pnpm/@types+d3-dispatch@3.0.2/node_modules/@types/d3-dispatch/index.d.ts","../../../node_modules/.pnpm/@types+d3-drag@3.0.2/node_modules/@types/d3-drag/index.d.ts","../../../node_modules/.pnpm/@types+d3-dsv@3.0.1/node_modules/@types/d3-dsv/index.d.ts","../../../node_modules/.pnpm/@types+d3-ease@3.0.0/node_modules/@types/d3-ease/index.d.ts","../../../node_modules/.pnpm/@types+d3-fetch@3.0.2/node_modules/@types/d3-fetch/index.d.ts","../../../node_modules/.pnpm/@types+d3-force@3.0.4/node_modules/@types/d3-force/index.d.ts","../../../node_modules/.pnpm/@types+d3-format@3.0.1/node_modules/@types/d3-format/index.d.ts","../../../node_modules/.pnpm/@types+d3-geo@3.0.3/node_modules/@types/d3-geo/index.d.ts","../../../node_modules/.pnpm/@types+d3-hierarchy@3.1.2/node_modules/@types/d3-hierarchy/index.d.ts","../../../node_modules/.pnpm/@types+d3-interpolate@3.0.1/node_modules/@types/d3-interpolate/index.d.ts","../../../node_modules/.pnpm/@types+d3-path@3.0.0/node_modules/@types/d3-path/index.d.ts","../../../node_modules/.pnpm/@types+d3-polygon@3.0.0/node_modules/@types/d3-polygon/index.d.ts","../../../node_modules/.pnpm/@types+d3-quadtree@3.0.2/node_modules/@types/d3-quadtree/index.d.ts","../../../node_modules/.pnpm/@types+d3-random@3.0.1/node_modules/@types/d3-random/index.d.ts","../../../node_modules/.pnpm/@types+d3-time@3.0.0/node_modules/@types/d3-time/index.d.ts","../../../node_modules/.pnpm/@types+d3-scale@4.0.3/node_modules/@types/d3-scale/index.d.ts","../../../node_modules/.pnpm/@types+d3-scale-chromatic@3.0.0/node_modules/@types/d3-scale-chromatic/index.d.ts","../../../node_modules/.pnpm/@types+d3-shape@3.1.1/node_modules/@types/d3-shape/index.d.ts","../../../node_modules/.pnpm/@types+d3-time-format@4.0.0/node_modules/@types/d3-time-format/index.d.ts","../../../node_modules/.pnpm/@types+d3-timer@3.0.0/node_modules/@types/d3-timer/index.d.ts","../../../node_modules/.pnpm/@types+d3-transition@3.0.3/node_modules/@types/d3-transition/index.d.ts","../../../node_modules/.pnpm/@types+d3-zoom@3.0.2/node_modules/@types/d3-zoom/index.d.ts","../../../node_modules/.pnpm/@types+d3@7.4.0/node_modules/@types/d3/index.d.ts","../../components/dist/src/lib/draw/cartesianframe.d.ts","../../components/dist/src/lib/draw/index.d.ts","../../components/dist/src/lib/d3/patchedscales.d.ts","../../components/dist/src/index.d.ts","../src/versionedsquiggleplayground.tsx","../src/index.ts","../../../node_modules/.pnpm/@types+eslint@8.4.10/node_modules/@types/eslint/helpers.d.ts","../../../node_modules/.pnpm/@types+estree@1.0.1/node_modules/@types/estree/index.d.ts","../../../node_modules/.pnpm/@types+json-schema@7.0.12/node_modules/@types/json-schema/index.d.ts","../../../node_modules/.pnpm/@types+eslint@8.4.10/node_modules/@types/eslint/index.d.ts","../../../node_modules/.pnpm/@types+eslint-scope@3.7.4/node_modules/@types/eslint-scope/index.d.ts"],"fileInfos":[{"version":"f59215c5f1d886b05395ee7aca73e0ac69ddfad2843aa88530e797879d511bad","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"dc48272d7c333ccf58034c0026162576b7d50ea0e69c3b9292f803fc20720fd5","impliedFormat":1},{"version":"27147504487dc1159369da4f4da8a26406364624fa9bc3db632f7d94a5bae2c3","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","impliedFormat":1},{"version":"3dda5344576193a4ae48b8d03f105c86f20b2f2aff0a1d1fd7935f5d68649654","affectsGlobalScope":true,"impliedFormat":1},{"version":"35299ae4a62086698444a5aaee27fc7aa377c68cbb90b441c9ace246ffd05c97","affectsGlobalScope":true,"impliedFormat":1},{"version":"c5c5565225fce2ede835725a92a28ece149f83542aa4866cfb10290bff7b8996","affectsGlobalScope":true,"impliedFormat":1},{"version":"7d2dbc2a0250400af0809b0ad5f84686e84c73526de931f84560e483eb16b03c","affectsGlobalScope":true,"impliedFormat":1},{"version":"9d9885c728913c1d16e0d2831b40341d6ad9a0ceecaabc55209b306ad9c736a5","affectsGlobalScope":true,"impliedFormat":1},{"version":"17bea081b9c0541f39dd1ae9bc8c78bdd561879a682e60e2f25f688c0ecab248","affectsGlobalScope":true,"impliedFormat":1},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab22100fdd0d24cfc2cc59d0a00fc8cf449830d9c4030dc54390a46bd562e929","affectsGlobalScope":true,"impliedFormat":1},{"version":"f7bd636ae3a4623c503359ada74510c4005df5b36de7f23e1db8a5c543fd176b","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"0c20f4d2358eb679e4ae8a4432bdd96c857a2960fd6800b21ec4008ec59d60ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"36ae84ccc0633f7c0787bc6108386c8b773e95d3b052d9464a99cd9b8795fbec","affectsGlobalScope":true,"impliedFormat":1},{"version":"82d0d8e269b9eeac02c3bd1c9e884e85d483fcb2cd168bccd6bc54df663da031","affectsGlobalScope":true,"impliedFormat":1},{"version":"b8deab98702588840be73d67f02412a2d45a417a3c097b2e96f7f3a42ac483d1","affectsGlobalScope":true,"impliedFormat":1},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"376d554d042fb409cb55b5cbaf0b2b4b7e669619493c5d18d5fa8bd67273f82a","affectsGlobalScope":true,"impliedFormat":1},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true,"impliedFormat":1},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true,"impliedFormat":1},{"version":"c4138a3dd7cd6cf1f363ca0f905554e8d81b45844feea17786cdf1626cb8ea06","affectsGlobalScope":true,"impliedFormat":1},{"version":"6ff3e2452b055d8f0ec026511c6582b55d935675af67cdb67dd1dc671e8065df","affectsGlobalScope":true,"impliedFormat":1},{"version":"03de17b810f426a2f47396b0b99b53a82c1b60e9cba7a7edda47f9bb077882f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"8184c6ddf48f0c98429326b428478ecc6143c27f79b79e85740f17e6feb090f1","affectsGlobalScope":true,"impliedFormat":1},{"version":"261c4d2cf86ac5a89ad3fb3fafed74cbb6f2f7c1d139b0540933df567d64a6ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"6af1425e9973f4924fca986636ac19a0cf9909a7e0d9d3009c349e6244e957b6","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"15a630d6817718a2ddd7088c4f83e4673fde19fa992d2eae2cf51132a302a5d3","affectsGlobalScope":true,"impliedFormat":1},{"version":"f06948deb2a51aae25184561c9640fb66afeddb34531a9212d011792b1d19e0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"01e0ee7e1f661acedb08b51f8a9b7d7f959e9cdb6441360f06522cc3aea1bf2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac17a97f816d53d9dd79b0d235e1c0ed54a8cc6a0677e9a3d61efb480b2a3e4e","affectsGlobalScope":true,"impliedFormat":1},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true,"impliedFormat":1},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true,"impliedFormat":1},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true,"impliedFormat":1},{"version":"9cc66b0513ad41cb5f5372cca86ef83a0d37d1c1017580b7dace3ea5661836df","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"709efdae0cb5df5f49376cde61daacc95cdd44ae4671da13a540da5088bf3f30","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"61ed9b6d07af959e745fb11f9593ecd743b279418cc8a99448ea3cd5f3b3eb22","affectsGlobalScope":true,"impliedFormat":1},{"version":"038a2f66a34ee7a9c2fbc3584c8ab43dff2995f8c68e3f566f4c300d2175e31e","affectsGlobalScope":true,"impliedFormat":1},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true,"impliedFormat":1},{"version":"f5c92f2c27b06c1a41b88f6db8299205aee52c2a2943f7ed29bd585977f254e8","affectsGlobalScope":true,"impliedFormat":1},{"version":"930b0e15811f84e203d3c23508674d5ded88266df4b10abee7b31b2ac77632d2","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"b9ea5778ff8b50d7c04c9890170db34c26a5358cccba36844fe319f50a43a61a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true,"impliedFormat":1},{"version":"189c0703923150aa30673fa3de411346d727cc44a11c75d05d7cf9ef095daa22","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"1df2366de6650547b3dc1d7c4147355c0f6b4729c964e3839636fa418982d131","impliedFormat":1},{"version":"549df62b64a71004aee17685b445a8289013daf96246ce4d9b087d13d7a27a61","affectsGlobalScope":true,"impliedFormat":1},{"version":"4c68749a564a6facdf675416d75789ee5a557afda8960e0803cf6711fa569288","impliedFormat":1},{"version":"6a386ff939f180ae8ef064699d8b7b6e62bc2731a62d7fbf5e02589383838dea","impliedFormat":1},{"version":"f5a8b384f182b3851cec3596ccc96cb7464f8d3469f48c74bf2befb782a19de5","impliedFormat":1},{"version":"40a1b33c67109be18a961127873e8ba198429eacf11a468b4a052cddc9a73f8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"de618fec44f70765cc7bbc30c9049b1c31f3cfb3824e7a7731121ca1785998e4","impliedFormat":1},{"version":"e525550c8c7336e8b4800e00f30145b246f27ae1c0731e5e1369d4cc438bbcc8","impliedFormat":99},{"version":"5e3d8768635a03cb0f78c698a51b4dfe7a4926b56c4f89e8de9c2b14a61443f0","impliedFormat":99},{"version":"91abf7588ddcb2d8db61667a4b847b74cb0b176f7fa185bd9a19c9c8a7feaa29","impliedFormat":99},{"version":"0f364877296493dc3a6e555ee42fb4f6bc92581062d3ccf4c3db683ab41f77f6","impliedFormat":99},{"version":"3a8acfc4feb8f66c54abbca3aebcb6e74118a44d40e023008e76ecafdaff8ef4","impliedFormat":99},{"version":"42bad430c32e1102c7be93eb7edde2bea1515442dc27da002f4a98fa0dbaf48b","impliedFormat":99},{"version":"6859e5ec9c22393f2e26402e486cf66d1827273e544c1b41fc79d180ef315d2d","impliedFormat":99},{"version":"1d5021e72a927fc238ee35d3b921c3a99cdbaad9b6fff6d35a9a5bf30ccb6952","impliedFormat":99},{"version":"3af343b35829dd6cca35d57a4f17012c007f04e03269f6c73ecf1ac2309b48e2","impliedFormat":99},{"version":"1d7bb144264966ca671c6f1fc63227b191494c78ca38b46dd85592799aae6a12","impliedFormat":99},{"version":"f5c5be381d04c746ce0b360102359c1ecf2569ef12ba325473f3c64bf37e08c1","impliedFormat":99},{"version":"329e2f287c6d3f5603309b536e9fb8c03af43a0fb31b9c97ba22376bbf50b677","impliedFormat":99},{"version":"3d5ca31daec9984e2f1c2b612b2d46e471f2df3d4750bea0b8f257aff44ba60e","impliedFormat":99},{"version":"c34000ff372bf51a3f5bd9a1e0aaf5c3c2433c5dcd429340233076f559465b37","impliedFormat":99},{"version":"b75af34c501d360f3d9a77d7f61d8d247bbdfeee0ee97f411247e8bfdb55131b","impliedFormat":99},{"version":"4a35960f91350a6951b7acd156b96ff0eeb5d89ed4c98cf2f247396b79227f46","impliedFormat":99},{"version":"5d0b04156ea6d7b741945e92a0be9e25936d97943df84ecb7e7893084d5ceed9","impliedFormat":99},{"version":"d2170eb4cab9d40b6559acb82dd9a2e6e09a937069bd86c4ce563fde90fb7a63","impliedFormat":99},{"version":"e53d978362d41e4328e357964e5a2d2c89d1705385fdca10772749a0f501b908","impliedFormat":99},{"version":"498fd1ee39953545f7ad334961c1a27dbfa44c433fa3d1c28f9730cfa1edbb78","impliedFormat":99},{"version":"348ac6428b05fe0b5f40041e8cc0000f93ede409f51466bb0e47015096af4d57","impliedFormat":99},{"version":"97948f3fa6d390f6e8f2868e4fba98a85704e9c202006e292e2798b2a61a63bb","impliedFormat":99},{"version":"1d909bf1d8e60107b7f79cd0c92981a02985a8f9bcb2b8e82f60173e96ab92cd","impliedFormat":99},{"version":"5ef222048ab8121101576645c28a2c8c4d0b557a2777e1c66f69609e0abcdd62","impliedFormat":99},{"version":"934ea62d70ba8796955b7d6cc5399b035247d9a7b2e5cd63dae78a0dfc90ae3c","impliedFormat":99},{"version":"76d16c21fa42e9eae8f3c154dd7f9c148aef5ff52b6fd06b9a1793f41995f712","impliedFormat":99},{"version":"e61bcc621191a004ea09d63cdc684ec05e1649c12285e6e351227364be52eecc","impliedFormat":99},{"version":"a0790b44dbf2dc773e496bb7bca269980006f85f54de7e588732497ba4d73a1a","impliedFormat":99},{"version":"4918938baeddd4c875a0c2761ee5b9d8e42cc98cdb6addcc768f717321c7cccc","impliedFormat":99},{"version":"908f651a3e9c3097615843226cee6ac563562a6bd0f11c9e8431fa536534b0cd","impliedFormat":99},{"version":"8dc56f817d20cf0717842ac1dcf3ac1a450ac3c667f1285754901e4af97bbe47","impliedFormat":1},{"version":"72156b7624d678a2686a22a45014218be4da7147f1058a5a5072fe981c492dd5","impliedFormat":1},{"version":"a20d054b8be41316bcc29752c5b9b42fab727b887a076a3af3bee18813d6e8c2","impliedFormat":1},{"version":"2eba4ddfbd6837ef33e58644f7dffbfe465d7222f9a9101789f02427f9541488","impliedFormat":1},{"version":"bb82c16e8371bfc6ee2ffd0095fd321d6acfa57c6c6445019567fec1b6b5e92a","impliedFormat":1},{"version":"6c65126b657a275259c4759b2b2f7b04879e61bc6c51df025b3748f87652a9eb","impliedFormat":1},{"version":"a5ad75d3dd3d3df0f62cb7a8ea12e76e0b4a3143ecde9e29c9cc0586b88365c0","impliedFormat":1},{"version":"03cd482c80ad0b724ca7d55cef7e3823d593b7cced98d7ef9d1bf757c5055b77","impliedFormat":1},{"version":"e93f395b0d6e68525181a6ecb3e7b81b1c5bf551f32f6cebbdffdef354fbe4a3","impliedFormat":1},{"version":"b881b069efb9d55b4b4b98de76d8c3920a29254e24f8f0c38557186e38cf6955","impliedFormat":1},{"version":"115825b28cb924401622fcab8676c3bab7ceebd9062a14229efe9c02bb8db8fb","impliedFormat":1},{"version":"2fa33b23888562c8111e9e10238eb26499c26616499446ac975263e41e0dc4af","impliedFormat":1},{"version":"b42d535c794251030828022716b5c1d526014d71a1b868679ecbe6599bb3fea1","impliedFormat":1},{"version":"5efde0f399fe69b9579605199bb12ab7d4f9c9f51621b14fbf83f1fdcc930004","impliedFormat":1},{"version":"b0ed00813c153e350a56faa8c15668bf21375928e9b88bcc482d20f1f8415179","impliedFormat":1},{"version":"d0608ff924f53fee147c937c04efaa1e9010d44134d6f376b2fd5939dcc32a8d","impliedFormat":1},{"version":"3c8a75014278db57b6fe929a8877d60abee9ca84b8cdcc6df4f7da21cf06854c","impliedFormat":1},{"version":"b1b8f88d8704effc053062568916a6bd7b7bc6b24b411a53de383e888bf36144","impliedFormat":1},{"version":"b42d535c794251030828022716b5c1d526014d71a1b868679ecbe6599bb3fea1","impliedFormat":1},{"version":"e9776ac2df959fdf527098d0a3b9a5bdced97a6e71f1987ea83a51ab1d6e35ef","impliedFormat":1},{"version":"85a3930c87a4275e3b39c760eb21472309b58135e9c624a872869e0f9bd08d23","impliedFormat":1},{"version":"4ab32839b87ba4bf87ac0169d65d02af289536b1ce1b7e8da3eefdc282dc030d","impliedFormat":1},{"version":"b42d535c794251030828022716b5c1d526014d71a1b868679ecbe6599bb3fea1","impliedFormat":1},{"version":"3fa8c502adfd1e125e658501fe9001b934cbeb71bb912fb940d69ce570f3345f","impliedFormat":1},{"version":"5584821a824aee88a06f29bde309aa1f52933bf3450681c820d0c713bc5d1dd1","impliedFormat":1},{"version":"6216c65f72d2f0db713e7b5e483c95c937bc779a18f9e52afa72702f01f83b89","impliedFormat":1},{"version":"b3b50e2aec3ac45369921cb5d22dc3f0a12794c37e6fd634c41200578837834a","impliedFormat":1},{"version":"d4b5b7028959c3e1e8847c71b7e845604ff49ffe6e3edf57af07d838d69668c7","impliedFormat":1},{"version":"db3f4c30a1c61447687dab0185608906e9e69212c2120f19a947b2078573ca41","impliedFormat":1},{"version":"2620ae8d40746db60eaf02e7763005199e6cdfafd49b0a42db839671a72fda22","impliedFormat":1},{"version":"d17718ff094281efa9a20798eec185815ecd4f5affa1f479d954880cc89758b4","impliedFormat":1},{"version":"52740032b2d8c0ef763fe40bbf9a6c6b7e215f59cd218b9a4912b377580d3856","impliedFormat":1},{"version":"205eeb1efdf796604cc543cb81894f598345555c4b1f89450dcceda768e61076","impliedFormat":1},{"version":"e9c213e0c278ba15ef2446c365c12e78e87a6240df1d2a6e80abcc04f3860512","impliedFormat":1},{"version":"a8bd7d44ffda53ff0d543c5133b073c6735b935f1ef535d59a81d28e81f4569f","impliedFormat":1},{"version":"73191fd675953c2aa8b757b38d347fe803bf0faefe3b3f6c2f662d9216806f7b","impliedFormat":1},{"version":"56c90a2b4699433a11ee09e068e59e0135340213a41046a4c11cfc9ed5ccef77","impliedFormat":1},{"version":"da3c82549a428acb82afe8032f31d0ab992e382fc12dd65d526a422ac5a2d865","impliedFormat":1},{"version":"d46eaae8ff0d8524aa4ded96bdc4abebcc77376085317b3419b2741b387ab59a","impliedFormat":1},{"version":"57bdc185ea37eb09202ca4d5b4ae2c660a3bdeb572dec8ce9bac05922c85f1ef","impliedFormat":1},{"version":"a75962251edcd1f1e949fe2828558d235cc81f6523cdf05c179c552e16df556d","impliedFormat":1},{"version":"583c4f3f1c233ecfd273f1bb315699aed9eeae4bc40b1a1398f56de889309e7f","impliedFormat":1},{"version":"b82185269794856a51705d86ad34a31c1b0d51a19d158e42f0208cc906478c85","impliedFormat":1},{"version":"f2a2be315c3df9ef66b167785a4fdac194268411af71e71489f3767dbc2ef8fa","impliedFormat":1},{"version":"e58682765ca9ad05163a6545719ba16e9a70011fb6d60f3b808c6d22df4a22e1","impliedFormat":1},{"version":"7b5f2ea430a0848f93b8b132e4f51349401c4aee6fcb27659bae1d2c66e53258","impliedFormat":1},{"version":"0ea151dd43ff32afa8f431b12d944e7d7131c11dab5f25df653d61f2b80d8c80","impliedFormat":1},{"version":"b42d535c794251030828022716b5c1d526014d71a1b868679ecbe6599bb3fea1","impliedFormat":1},{"version":"975815cb82af052484692a6c62170c5b46489655d8497e3681c6dbb5dc237bde","impliedFormat":99},{"version":"a9850fdea01fcdc97238ee28c2cb1ec3ff602fff788751fae2e43ee52889a5ac","impliedFormat":1},{"version":"e348f128032c4807ad9359a1fff29fcbc5f551c81be807bfa86db5a45649b7ba","impliedFormat":1},{"version":"0fba40d7d3d779a84c39aed52884def98a8cd032242c7eb86bd6dc0989759c3a","impliedFormat":1},{"version":"ad4d2c881a46db2a93346d760aa4e5e9f7d79a87e4b443055f5416b10dbe748c","impliedFormat":1},{"version":"c2fc483dea0580d1266c1500f17e49a739ca6cfe408691da638ddc211dfffad0","impliedFormat":1},{"version":"7c31a2b77ae042fb1f057c21367e730f364849ae8fa1d72f5a9936cef963a8b2","impliedFormat":1},{"version":"650d4007870fee41b86182e7965c6fb80283388d0ba8882ce664cc311a2840b5","impliedFormat":1},{"version":"0e0a1a2629d513a295eaac94dea5c4a5ca862aa2f4bc3b4797d1697f916cc144","impliedFormat":1},{"version":"eaea587951c3baf79d914f467c3bc03ba7d3d4fcd379080ec9de846b9ac9a0da","impliedFormat":1},{"version":"be735498bd7f6821e3abc81a7e3fb6733b9862524424b44ac8d96624a7b5a611","impliedFormat":1},{"version":"0d1ddfb95dda0ce7eda89ace9da352a0b817a78549def0551d543af9e1a733aa","impliedFormat":1},{"version":"a9e04fbe6b596ebc38647c5f8ba13e23629cb752b6c3e8d3e209b2b97916a16f","impliedFormat":1},{"version":"d14099daf5bde257f5bd2fd9f8067a66475ece7be210831ce5874528a4344843","impliedFormat":1},{"version":"21575cdeaca6a2c2a0beb8c2ecbc981d9deb95f879f82dc7d6e325fe8737b5ba","impliedFormat":1},{"version":"832c2f78ec29728aca9c84998182993b8b27fff904e7622e73194d6d34154a0c","impliedFormat":1},{"version":"faba53dda443d501f30e2d92ed33a8d11f88b420b0e2f03c5d7d62ebe9e7c389","impliedFormat":1},{"version":"3eb7d541136cd8b66020417086e4f481fb1ae0e2b916846d43cbf0b540371954","impliedFormat":1},{"version":"9ff4b9f562c6b70f750ca1c7a88d460442f55007843531f233ab827c102ac855","impliedFormat":1},{"version":"4f4cbbada4295ab9497999bec19bd2eea1ede9212eb5b4d0d6e529df533c5a4b","impliedFormat":1},{"version":"cf81fae6e5447acb74958bc8353b0d50b6700d4b3a220c9e483f42ca7a7041aa","impliedFormat":1},{"version":"92f6f02b25b107a282f27fde90a78cbd46e21f38c0d7fc1b67aea3fff35f083e","impliedFormat":1},{"version":"45549cd5b06284d2a91b5e1e740a1d8ab2988e713374dc11266baf4b1cd1ffa8","impliedFormat":1},{"version":"27c37f4535447fb3191a4c1bd9a5fcab1922bec4e730f13bace2cfa25f8d7367","impliedFormat":1},{"version":"0766c88a74d91d7ee8d3bc27cd42bfffae937a4febda9ca74d969c1326048da0","impliedFormat":1},{"version":"f1f965b7bd1accfb8dbbba923d1748d8862e12db48b59b77953960b36db62511","impliedFormat":1},{"version":"b13a0516ada72b784c0ab499bdf6e14cb782f9f26b14ec7e6de327b0ac379b06","impliedFormat":1},{"version":"039bd8d1e0d151570b66e75ee152877fb0e2f42eca43718632ac195e6884be34","impliedFormat":1},{"version":"89fb1e22c3c98cbb86dc3e5949012bdae217f2b5d768a2cc74e1c4b413c25ad2","impliedFormat":1},{"version":"138628fbc7400c1609e19bc779b820e3e2c6b61142fe772f4440b4168cef4575","impliedFormat":99},{"version":"9a8d2f3599bc6e116cddcb344fd5af048bbb4cf7f6a5a058d0ca26cac57ea6ea","impliedFormat":99},{"version":"2d4815f9a3451940967f19cbe8ec5da4e170515bc986f7f6a9a2a8a8de6af596","impliedFormat":99},{"version":"381b08a3356db8a3a60109d35e784bae8c234e1c7c30ee7b01549b8d45261a06","impliedFormat":99},{"version":"80e54a6868c9e07bd4cb4cf2d06a65824bcdb1afab4405c7470f11504352b0c2","impliedFormat":99},{"version":"ecbf9e4eb53f7dedd29d524d3a730f4b1c79eeb4f052b2b3c905f4091bd205f1","impliedFormat":99},{"version":"08ff331d33eb35224fd6a441776abd9e274a72f7c3d6330400f952cd9913bd2d","impliedFormat":99},{"version":"0d0791bac3aa41a27909876ab56ddd704184ada6b8629865a415a476a0561238","impliedFormat":99},{"version":"e2cbcefbb64c01b05d9e84061a9ee3b7ef704e6a640b1b31fc11478126972435","impliedFormat":99},{"version":"efa7d4c33a217e91aec3d7004433fd81acc427ddee504f2282d5d878058f3036","impliedFormat":99},{"version":"c5614344e27c973f4ec937ab2e192e567924231c70cbffb050c20ee4c7b89d02","impliedFormat":99},{"version":"ac3ec882925aa9b68c6784bd49cb969f8fef14960f3c1abcb3ba25985d7a3063","impliedFormat":99},{"version":"9ef3463398bac78b932ecb19ab4a9820199d24d5dca832d8dead30d17d5afffd","impliedFormat":1},{"version":"531cd80e4dba2620d86844a50e7d21b89436e56a14e66d6774e99b3759ac69ad","impliedFormat":1},{"version":"838666c15dbf3c21f4fc498f067af86e878c58ccc99a01a1dda04658ae2590d8","impliedFormat":1},{"version":"b4fbfaa34aacd768965b0135a0c4e7dbaa055a8a4d6ffe7bedf1786d3dc614de","impliedFormat":1},{"version":"c83a76ad0bf69b0176042adfc65f8c6be7dd1141b66cfa20954520315dcf2c1a","impliedFormat":1},{"version":"0e368299469f75293d1cfe67446205f58851706f44ebcd2d301d21930b023ff7","impliedFormat":1},{"version":"e38d5bb0f0d07c2105b55ae8845df8c8271822186005469796be48c68058ef33","impliedFormat":1},{"version":"af99fcbddd1d45ac4b1ab3d21ef6665c3a4c78003f3dcf2855f406e0d41f5545","impliedFormat":1},{"version":"0e368299469f75293d1cfe67446205f58851706f44ebcd2d301d21930b023ff7","impliedFormat":1},{"version":"b4fbfaa34aacd768965b0135a0c4e7dbaa055a8a4d6ffe7bedf1786d3dc614de","impliedFormat":1},{"version":"ecfa9ce3a5a37d15b813065e8a7cdf677a0f493018e47ce59815443dfbb9c910","impliedFormat":1},{"version":"83e56d3337e1a6dbafdbe5a2502a84c330b1a328ed2860d689b2ded82b1f5c95","impliedFormat":1},{"version":"f186de91b1c50640e4d2bef41307ee06446d7ec76f787d4384ef808981025546","impliedFormat":1},{"version":"909bac92983e542dd29efcf9eedf4ab5a330767c70c505a52326f7f5ee4b288d","impliedFormat":1},{"version":"3288d226aeef7a603df43231c9df0f951b00e9137114edfd9832480bfd1a047c","impliedFormat":1},{"version":"b4fbfaa34aacd768965b0135a0c4e7dbaa055a8a4d6ffe7bedf1786d3dc614de","impliedFormat":1},{"version":"54b02365008778dd11d0a231fa83fddcf16c8e0f59641fd18f61a167bb31d692","impliedFormat":1},{"version":"d7d7ca7546a0f11f81501f2c6091d4f23c8a5cd4206038d738c0845a749b549f","impliedFormat":1},{"version":"855f5f20e17d4ab6b0738d9869af473f90ae33a02b56b4bbf16f0d315c5caa18","impliedFormat":1},{"version":"8076896dacb7bad20f4575a83629da98833e84d9acb90ace85f6c14043e27f8d","impliedFormat":1},{"version":"5717d899bd25adfcf4639b36991a76917eb8a7922cdbf5a549c810f605780144","impliedFormat":1},{"version":"e074f251c5f1f93504d9dc3a1579892a0e749dd9c635ee17a798ecf6a71ab245","impliedFormat":1},{"version":"a08b0c5f1b56aaf0dcdcf067700b7b39e064f29105f2b4ce0188a6560018c0e5","impliedFormat":1},{"version":"6366102a6af06097a130e5d0ec190a4bff998a7531a6c346171c978e4aeea79c","impliedFormat":1},{"version":"2d78fd0ad30dde468060318380beb50f5e9e0e42751b661c9c2bb90be106d283","impliedFormat":1},{"version":"eee7bd2ec082b75a4b2408dd98613ec4296fe04216bed6604c1c5e0a661dfd85","impliedFormat":1},{"version":"04ffd65cd3e602f6b03472c0e12eff2cd969e5f4141f142f44d05dbac3b6686b","impliedFormat":1},{"version":"d747268dd5f760f55765c74b8cb9bd505808c9494f00aa89f37a7153cef32afb","impliedFormat":1},{"version":"59a49b5fd96799ef66cdcd0fca3b8b13986c147f243a46d81c980834da0ddf83","impliedFormat":1},{"version":"49168b9877e436103e4ae793de8a1645911134a7a05ce45322966914c07c24a3","impliedFormat":1},{"version":"e01f2da71e54a1cd22982d63d3473f42c6eb5140c8e94fe309b1f739b7d24bd8","impliedFormat":1},{"version":"597657cc30925582ee37037b7ed846f13ea6b850b204ddfda4ffdd71cdf54665","impliedFormat":1},{"version":"1e6f83f746b7cd4987335905f4c339ffc9d71dddf19f309cb40c5052e1667608","impliedFormat":1},{"version":"dfd5a5761262563b1b102019fc3f72510e68efe1e4731d89c8e55bde0c03e321","impliedFormat":1},{"version":"93283b859c4429b9776c16fedb459722b156c99057e037f63ba74cfdc91b0e42","impliedFormat":1},{"version":"7698c020193a21574ef24f01fcfe087e538f5a290eee859a9fa325b2112773e8","impliedFormat":1},{"version":"ea7b47bc357858506e6161065b1a8997cfbc5d1dcdf233966da9d01d74721ef8","impliedFormat":1},{"version":"3828da0c7b9bda13f3959a68b658b059b155952bda9c49a025937867bea5a081","impliedFormat":99},{"version":"b38823bebb2c31e35bd5f6d7dc7fb085afbfa0ed0cd00974b4a9870dc145ff87","impliedFormat":99},{"version":"80343551ab9fe6d118d101438b051c93e01d08a02c44d5a64699f8c15aa8f5ed","impliedFormat":99},{"version":"99c09ac70869565558d77b80b3d5e16957c9dbd64a14323669eed0e7358c6534","impliedFormat":99},{"version":"7cc1140cc3c6fb1bdbb128421ed5fc4e9be9d502be65b3d4f9359b6818bc4c29","impliedFormat":99},{"version":"c47333d9bf9f8dfa5fe05b5eaa0a877d6f4c634ba3bb4e4cd3ffb14a8fb732d5","impliedFormat":99},{"version":"155aa023e1098e771b9f095400b04a4f9cba47051080225b1216be7443b107a3","impliedFormat":99},{"version":"cea7b4d44997b83a2de1880c3723da5000a08ae8a242f825e66d07588540711d","impliedFormat":99},{"version":"cf26c207bc0e3eb48c5acde057dce69cf222caca2c9cf6ef4f2d09a7fdcbe7b9","impliedFormat":99},{"version":"32582292f7c10ea4490b6e93833678ec7d5a5ea39a993fbd55dc83ae20b2d4d8","impliedFormat":99},{"version":"f4fb96aec1486fbf07feb60df30193065964f2b4f2aff7b045b38417c623f1b9","impliedFormat":99},{"version":"4982d32ed383e804f92b9987435e3cba22d8e74439b05dc4e2b156d54e64d463","impliedFormat":99},{"version":"5c5a2dbe76ca929cbdf27ff12d76a86e31b902cfeed778673655627d2d342909","impliedFormat":99},{"version":"05c66a3f72f4d0e9b5a4f3b7abe68bb518ae8ecf01f20090256f5d3ac93ba984","impliedFormat":99},{"version":"2243270595f10bc40de923685169f7049092ee4791bea0ed1196e70301bd0a7d","impliedFormat":99},{"version":"c298664ffd834667244d34e54102281ee22ab88f7c1f8a0651dd023e903ce312","impliedFormat":99},{"version":"bd3f3f5bac03b0aa3c3ff066b4c2556e5ab63671ee973a51130ee994018af00a","impliedFormat":99},{"version":"fef0c2dd81b409169f6f43cdfbbc585f7344580574afaeec808fb9977b1b11fd","impliedFormat":99},{"version":"f034731183e8128e8a06ad64f62a1ae70c4cb3b747432bf5f038e51415bdd720","impliedFormat":99},{"version":"011a6408bc14d458a584dd8fc2e77c2288622ac810aca49efa5cc793565409cf","impliedFormat":99},{"version":"a193ef9f1f8a3fda9e65613658585a63096325de647a30a2cf4e26d975bf6e17","impliedFormat":99},{"version":"97f264c186d290683bf16c1a1dac0ce4948e7bbca2a1f688a0181f50a775df20","impliedFormat":99},{"version":"b8bb81d8204d1ef89b491aacdcd001063409a274e3bd1aeae2bc8137eb19b4d0","signature":"4e54feb13aa260c7c813553e926bf2b4d4448fd27565a099e0ccf787765ca06a","impliedFormat":99},{"version":"dec0ad67b147df2753a051acd0e1a2991811ee52e545f997924ddafc740902d8","signature":"aa98cd0d9ce632b6d7fa3e941fa934da48fb5fb3a66bf7246629091dcc7a403c","impliedFormat":99},{"version":"1c7ed1426666a6faa096770f6ef86b564012a7636c758ce13c939a5a10881172","impliedFormat":99},{"version":"e873e8fdeb9295f02b58188c8992a87d403708fc03d12fe8a11bdd79c400189f","impliedFormat":1},{"version":"90efb637eaf9cdc66f481f4834b0de7d50781940bea2f758d4ac63552aabe5d8","impliedFormat":99},{"version":"92024983c97d3be35eca72f1bb9b56ddb0a0a95fe3b813297f82ccf22f97b58e","impliedFormat":99},{"version":"dd4f5b98ee6826f93504c99a757b6144fae1247811003d093d12cc5dab97b3ff","impliedFormat":99},{"version":"0882df22a993833fedb4e0cd24b212e9652ca0efe486b280c3c8e16d9fa8a6e9","impliedFormat":99},{"version":"e3df5de4915e5bc672c8bcec126713961348b7737dd62f9dc54d40339d4de469","impliedFormat":99},{"version":"b212364d14102b7ee3e138ca3424b07e4c88f59745459f40fd45335706574c2c","impliedFormat":99},{"version":"da23bd890752eb6d308f2724e6beee8c3a2f18b19d1d947ade83af4f458b8d20","impliedFormat":99},{"version":"a2870692d8b4eb64086b80aa2afbde5a38fb671dafd641801e9d99847167edf0","impliedFormat":99},{"version":"9c7ff06aaddd15f6e5734a7e8d4b3bfd8acf6f1df91499b50c775f1820465858","impliedFormat":99},{"version":"8238a3546aac3b7a19d0d282a3f2a214b4c7ca4dab5aada807c4a404df182f6b","impliedFormat":99},{"version":"3a82e69e0b1e5dbc665d73aa1db8b9aeafb945f9813a32e326e601132bde3057","impliedFormat":99},{"version":"565d4dc9320cc94a2d9fac229e1423a3eda3759de9128ef39fbd514610cbcf24","impliedFormat":99},{"version":"a717c822c7396debf39cb42aa3765d624e39a5bbbbc581ae2a50719c246d489c","impliedFormat":99},{"version":"a18360c6928d4d17f5315609558a6d8fe9b30bd129f7f4730a20a9e0a97e78ce","impliedFormat":1},{"version":"34c802e03a1ed5addbda41132b37f30b76e6873d8616f81bfbb83833b5b41ba7","impliedFormat":1},{"version":"d9ecd6161d209dda34099e102eee86c436307f6daad988012a26f9988f2a8acf","impliedFormat":99},{"version":"68eaa407de16f0294006b4a76ef171bd2ce588d0c67af8a66585abad119a5036","impliedFormat":99},{"version":"232cacd18c27bd9d51853dc914b36c3683fee5926b5dc6a1def284e39e0c4a44","impliedFormat":99},{"version":"d492a63d520e103faa678545a794a745afba7037d7d2555b05eeb6f728dc1dc7","impliedFormat":99},{"version":"7970a66bbcef9fc2eae58a0b644017f89815bdd6fcfa84a70f45bbf195cdf980","impliedFormat":99},{"version":"ce76a0dd680a613f3b18fed586019b4bb33ccda4d82c373d926e66d457e5fb24","impliedFormat":99},{"version":"7f8be669b35d68868c65daf114a24b2131fb5fcf19b3af267b3e8c33876ad909","impliedFormat":99},{"version":"63ab5a4e200fa9c205753a08c5d4eba94bc50293363af85cab1112ac18f2959c","impliedFormat":99},{"version":"fbfff043a554bc5362bcf76b49cc5106aeb3b4411468f456068863ae1b23be37","impliedFormat":99},{"version":"90c512f34d46999e5dd4cc581c8be490c1085ff38add4c932224157b8ce8f683","impliedFormat":99},{"version":"8044a304a46561564dd70b0644e5f85257086f865e92a6dfef1b7802a6535207","impliedFormat":99},{"version":"b265762c5a29056fefb3d52dad4bad65e11f61cdf6af4abb02d47a4601ab3f13","impliedFormat":99},{"version":"cccca937c583b96c8b843e68b6375446cb6cdd236cee482f7dfe783fdfd57725","impliedFormat":99},{"version":"fb5f19df251ec6f419e3cde6a005cf17676cd4e93a9c67c5ecba5c568da52687","impliedFormat":99},{"version":"8ebaaa3465aae3d112791a08c17f1c37e453609a03939b02dc0f6feb96a381f8","impliedFormat":99},{"version":"ae4cc2629412fa3a889740cb4561ba55b8338e3f25a0803baa0022c600fe3904","impliedFormat":99},{"version":"9d96788d258d5feed816f70d677e6ba66d75c3de838e57dee66bc0ccd4bad2e2","impliedFormat":99},{"version":"058c5341f7488c6c012830716694f6aa4b19a7bae3c92c2cdeaabb76f9d9876c","impliedFormat":99},{"version":"6d0731258d182d33d1f8ec81165ab2d544c80bf844806ab5356a63ca4f60b3b9","impliedFormat":99},{"version":"64f5c01b6d0b98a9f09ffe9524001e3f96b55962c4f03b9d18f6e483430bcf08","impliedFormat":99},{"version":"b7b555aad02c935d0d68fc4a683abee9fb3ef3f350ca365352d5d6d3926d46a4","impliedFormat":99},{"version":"f5d50ec76d99b3886493887ae12753ffdcf995d1486ba5c3303f8fd0f140829e","impliedFormat":99},{"version":"11c56d99e1526c942f480cc4c50df198bd18839be00cdfe8a0727c726686e5e1","impliedFormat":99},{"version":"5c9d7888cfd847737f564d7722b7e447780f43d25ddb7b8cb5d91e4c999c1fd9","impliedFormat":99},{"version":"add9937eb0bbba800c75c483c029e0dee147cefc5c71ee34b41d47bf43862a89","impliedFormat":99},{"version":"cdae38c55220c4419add0dc101e6ebd7bf8432cfc36df5a5cda29a8aa4f6efd4","impliedFormat":99},{"version":"3b6c37a2e4030f637da8ab04960e5df6cd761e5693b3471a2cd58b0e30a872d6","impliedFormat":99},{"version":"4adbe4599071a6c94cfa93a541fbacedb41d5cc93cd49b949b7e136f1261bcb9","impliedFormat":99},{"version":"4cd133ad889bd0226eafb223ac6fab71649c56367cc8048bf94a2b19a17f82c9","impliedFormat":99},{"version":"a66840bf8d56f3bf5f8ea8f35bf9ed184f53536972d198591acc7e9d4f6e01a2","impliedFormat":99},{"version":"a91dd8de4cae6477d584e501b3843412c895348430e73a1d9862ef4f3256e447","impliedFormat":99},{"version":"08ec813f1f44c78c373a8fc9842817c022b4e9b629dd690b54ff7f037eb09bff","impliedFormat":99},{"version":"b66ada1fa2a5213cfd2a1000bb2a0156e5c81ec2418f968210134abd0e582c50","impliedFormat":99},{"version":"95679937c4eeece193371611db961cf3c00387dda80358ed3c09cfb48d6e0e71","impliedFormat":99},{"version":"f382b163662571e6c271bafdd6f043a09da427f65f14fbf77ce2c633e12a952b","impliedFormat":99},{"version":"6d7208a955e5845504aac7085aa996293f84a473a5b34ef36b86aee193227114","impliedFormat":99},{"version":"5487b97cfa28b26b4a9ef0770f872bdbebd4c46124858de00f242c3eed7519f4","impliedFormat":1},{"version":"7a01f546ace66019156e4232a1bee2fabc2f8eabeb052473d926ee1693956265","impliedFormat":1},{"version":"fb53b1c6a6c799b7e3cc2de3fb5c9a1c04a1c60d4380a37792d84c5f8b33933b","impliedFormat":1},{"version":"8485b6da53ec35637d072e516631d25dae53984500de70a6989058f24354666f","impliedFormat":1},{"version":"ebe80346928736532e4a822154eb77f57ef3389dbe2b3ba4e571366a15448ef2","impliedFormat":1},{"version":"c2cb3c8ff388781258ea9ddbcd8a947f751bddd6886e1d3b3ea09ddaa895df80","impliedFormat":1},{"version":"f672c876c1a04a223cf2023b3d91e8a52bb1544c576b81bf64a8fec82be9969c","impliedFormat":1},{"version":"98a9cc18f661d28e6bd31c436e1984f3980f35e0f0aa9cf795c54f8ccb667ffe","impliedFormat":1},{"version":"c76b0c5727302341d0bdfa2cc2cee4b19ff185b554edb6e8543f0661d8487116","impliedFormat":1},{"version":"19903057d0249e45c579bef2b771c37609e4853a8b88adbb0b6b63f9e1d1f372","impliedFormat":1},{"version":"f5ef066942e4f0bd98200aa6a6694b831e73200c9b3ade77ad0aa2409e8fe1b1","impliedFormat":1},{"version":"b9e99cd94f4166a245f5158f7286c05406e2a4c694619bceb7a4f3519d1d768e","impliedFormat":1},{"version":"5568d7c32e5cf5f35e092649f4e5e168c3114c800b1d7545b7ae5e0415704802","impliedFormat":1},{"version":"e08365528d7219ada97b9c1abdb5ab41a53f7567d59d4d26e6de02afbd0dd9b9","impliedFormat":99},{"version":"49ee07c472a8b8bd4f2c79b5d13c5bfe5b41d53725405901b680b0dbb079ab49","impliedFormat":99},{"version":"1c09f1fb590467159906e063e1f81e362bf40e01838d593b236a430a4100bb7d","impliedFormat":99},{"version":"a15f7c610ec65df6601e47778d82eefd6e604b5807ebab78e7c7247f50e68ec8","impliedFormat":99},{"version":"e35e00c8cef24474346dca68e808398ef1e94319b771b732d465d03646376433","impliedFormat":99},{"version":"547dc7d68506ab560e7c36b6cdbff4395ef75c34a4091348bed9df38845f7571","impliedFormat":99},{"version":"a2c8834c1f898d87ae19aa63a2036cd4ebd421b89df64a99e3586712febe3829","impliedFormat":99},{"version":"9da0ee3c41e5fb5885112b02beddd925173048cef5ac952d103a04d193c98c33","impliedFormat":99},{"version":"9695c5e6e6ca7bd8d34fc392ad03cba9cdc39feaea5b5c59f6ab2d3c0e7742f8","impliedFormat":99},{"version":"2a26b1079f6cf755871dc191a67ab54cf5215f3ad496cf3a468564c2a7caefae","impliedFormat":99},{"version":"abae68a6878dbe1c1132c2780de411b8eea4e003ca00e54d342edd40bf77d3d1","impliedFormat":99},{"version":"e273174d9fa5ee7ad27b2ebb98b6a84c486fcaea8f9f4e1f43a5c72bfccf55e6","impliedFormat":99},{"version":"a6333368086ecf2b84aa8a2f645582df5471ee2bcf0a835f615204191c699006","impliedFormat":99},{"version":"79520accc00735dd1c9ed669ad8de6a88acd229c5a5db633164fdeed7e88d560","impliedFormat":99},{"version":"130b7b4e35aa35744b572909c7277eca31e9e4e6d33a7f830ff425eb36d925b7","impliedFormat":99},{"version":"b0a6f7c04e6b089b8c565fac3b22ce1901b5d8b328d32abb3e9348a86f5077f9","impliedFormat":99},{"version":"36874d7579e755d660ccff44dbb23725fc956c8172785cc44543dc2678f8a650","impliedFormat":99},{"version":"ae859e36c1e7f2c0e4aeae2070b1720f6db5d4436d13ed0c4c63213c7e1135f0","impliedFormat":99},{"version":"8e524fc5a30d39272ee95de7bdd8afa3b5fc3b434e781118a10159ad97b7dbbd","impliedFormat":99},{"version":"34d10acd311908e962c2dfdcc3c2d1038e121d948277450112018a07c518d7ef","impliedFormat":99},{"version":"2afeb23d507491e4cbb583e79c1e79df8f8d1d0a17a0dc4c7188316a31a86ccb","impliedFormat":1},{"version":"8fa23941c85a8ec6217072a2a96d83d78978a40ca100f968cbd502fb8db8741a","impliedFormat":1},{"version":"8fddb452bfcb60c598245e997aa9c9dce14b85a4c2e02489a50d97ab49e9b622","impliedFormat":1},{"version":"25d505ffc43befd205d780441b0a16e752ec1028f383a55cadd41841d1c7f153","impliedFormat":1},{"version":"39cb5be3f5302e759253b89f11bd3e885930b5649b840f4d5a81a763a5dd6c40","impliedFormat":1},{"version":"8a460dcdabe873ab0a85e421a7f339ad74445f60917bf67deed7d15d836b0247","impliedFormat":1},{"version":"a3b6c93a9838b8c94c6998e85646d6f2d07c20ecfe1e235dba62158b29451391","impliedFormat":1},{"version":"8f2d349c69976569d4c32e0e4e66598c9688159cac28cde38bbe0039dd1cadfa","impliedFormat":1},{"version":"6adc0305186bd1f72ca64adbd054b8e5e71f93b1d0623e90ebabf153541c06c0","impliedFormat":1},{"version":"c85a93f216df4ebb6dfea7ad46c8d6161a0f1948a20967ba0c85f0fff3f9edcd","impliedFormat":1},{"version":"0df330f74158aee4ce076b0bb15eb53fab95f615d26ccbd6ec6f5c4273110047","impliedFormat":1},{"version":"7b2ff705f3c3358807afce85ef146b7f7cdc882a79442630b034ec24d6a3906e","impliedFormat":1},{"version":"344ac2d6764eaa6b23b2e8e736c9bf0ae06a53479c6a1371d3d89ac964022692","impliedFormat":1},{"version":"e5907221fa3198e26f294ad77bf8f2996990b40484fe6781b65e099b1fe57933","impliedFormat":1},{"version":"ada362e162ad90df10c921c845546d911a6ad648a641a6945bf08c3ef1a09a17","impliedFormat":1},{"version":"f156602a8527c97f898fc96a33b7e025eed27870c2a63842c0c9ed506d7203ea","impliedFormat":1},{"version":"a8c34714c5da0bb0d2f74d31a44c9fb8b3b87efe6d8a0891182f9f6077723e69","impliedFormat":1},{"version":"4b51be04eb5bd9b929448380b3ced483ef1f6c3bbfaf7d3425bdbfa3b8eab11f","impliedFormat":1},{"version":"c24944ff5879b91478b153cf16802b9c6a10cfa3b7d85855813a08431ec2d36a","impliedFormat":1},{"version":"f1ba7a42f644ba5a281dd41b4bfc813d1f4a59e9c99227315cf778284d1e0b22","impliedFormat":1},{"version":"7adc301a699032ffd6d57e9ce97b2507e2ad652771cda558cb7ebb49a06e7696","impliedFormat":1},{"version":"f6319ead2de997fe24e6acc3594942d6819a4570f40e42cb979f5b078f3da1ca","impliedFormat":1},{"version":"4d3ae1585844151755e9d76cc41d82a6770b150559cb318c5366c869d487e01f","impliedFormat":1},{"version":"589cbf58df97db61280be456952054f5d54070e87a2c371303844a4bb288d8fa","impliedFormat":1},{"version":"c4e910182d6de2fcb3922631733faafdecd593370248adc1013be93352a8cc78","impliedFormat":1},{"version":"6bbf574c575a0491388f32aaa69c648140f24637b1d98ea6f3c97074c339f9e9","impliedFormat":1},{"version":"07104ffff8802481908f08b4a220e399cc692d5edcfaaa7e6632156fc267be35","affectsGlobalScope":true,"impliedFormat":1},{"version":"3e135eeb6a6be4b07c1d2a170c105dde5f8b5c705f9be4e0f01166259724f125","impliedFormat":1},{"version":"f6c30cfb96957bb21586996d7c5d5861c236417f31b5f790055624c7df07e944","impliedFormat":1},{"version":"be04184c354d4b7207e68298ea4e0539cd3e55889778f3bad120c71593ad408e","impliedFormat":1},{"version":"738dc97de0b62052a691a229d848e248f5c0a8fc1ba13ed74f041f35a379726f","impliedFormat":1},{"version":"32e5beeefac1493f9dbf2498eb4de6b5ef69a411eb1b9321cdf25a6f37086361","impliedFormat":1},{"version":"319e5d3323959c89b13a44cbc76f2994d95952ad8938d03853429a380d63a96f","impliedFormat":99},{"version":"a02d0c2206e38750d83aebf513afd6b6a7f2c811c802d08329c2c634409e34d7","impliedFormat":99},{"version":"fc43f4a23650b9720d260a6bb0d03332d63cf439a8e1b5ca3bc6650b0e7b80c8","impliedFormat":99},{"version":"815f62a46808e8a700a3cc2124bd2bff07b82fb0457208df41d1fd793baeb87f","impliedFormat":99},{"version":"d6d722f6f1240227124055c3df15198b78939e1868eb8ce96888fc5de9ebbc6d","signature":"ff4d62666a83e6fff04acb495f92c6c32183d2c8e4f987b5d15fbbbd5eadcc9a","impliedFormat":99},{"version":"8e7fdd6194057309b3d503ff19adb5d1d19aeb4bb3e64e595ca4351a3625374a","signature":"2a34e3c62f9957bf05dabc775fc82d4fc4babb2f43fc5666dd5f62f1c2e1c35a","impliedFormat":99},{"version":"64d4b35c5456adf258d2cf56c341e203a073253f229ef3208fc0d5020253b241","affectsGlobalScope":true,"impliedFormat":1},{"version":"bee89e1eb6425eb49894f3f25e4562dc2564e84e5aa7610b7e13d8ecddf8f5db","impliedFormat":1},{"version":"dca41e86e89dfb2e85e6935260250f02eb6683b86c2fa16bec729ddd1bcd9b4b","impliedFormat":1},{"version":"3adc8ac088388fd10b0e9cd3fa08abbebed9172577807394a241466ccb98f411","impliedFormat":1},{"version":"e050a0afcdbb269720a900c85076d18e0c1ab73e580202a2bf6964978181222a","impliedFormat":1}],"root":[245,246,369,370],"options":{"composite":true,"declarationMap":true,"esModuleInterop":true,"jsx":4,"module":6,"outDir":"./","preserveConstEnums":true,"removeComments":true,"skipLibCheck":true,"sourceMap":true,"strict":true,"target":9},"fileIdsList":[[190],[189],[191],[199],[65],[65,192,195,196,197,198],[65,195,199],[65,197,201],[200],[193],[62,189],[194],[187],[188],[108],[98,108],[97,98,99,100,101,102,103,104,105,106,107],[114],[109,110,111,112,114],[109,110,111,112,113],[118],[65,109,115],[65,115,116,117],[143],[65,143],[119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141],[132,143],[65,119,120,121,128,129,131,132,135,137,138,139,140,142],[65,69,70],[65,69,70,72],[65,69,70,72,79],[71,73,74,75,76,77,78,80,81,82,83,84],[65,69],[334,362],[333,339],[344],[339],[338],[356],[352],[334,351,362],[333,334,335,336,337,338,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,356,357,358,359,360,361,362,363],[372,374],[371,372,373],[61,62,63,64],[262],[65,159],[159,160,161,163,164,165,166,167,168,169,172],[159],[162],[65,157,159],[154,155,157],[150,153,155,157],[154,157],[65,146,147,150,151,152,154,155,156,157],[147,150,151,152,153,154,155,156,157,158],[154],[148,154,155],[148,149],[153,155,156],[153],[150,155,156],[170,171],[65,213],[65,201,213],[65,201,213,217],[65,201,202,203,204,205,206,207,208,209,210,211,213],[186,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220],[65,186,201,205,209,211,212,213,214,215,216,221],[65,213,217,218],[202,203,204,205,206,207,208,209,210,211,213],[213],[201,212,217],[213,217],[221,222],[221],[311],[302,303],[300,301,302,304,305,309],[301,302],[310],[302],[300,301,302,305,306,307,308],[300,301,311],[65,298],[65,298,312],[65,331],[65,299,313],[65,313,317],[65,313,327],[65,298,313,315,325,326],[65,298,313,315],[299],[65,66],[298,314,316,318,325,328,329,330,332,366,367],[364],[320],[320,364,365],[299,319,321,322,323,324],[319,320],[298],[317],[250,263,264,267],[263],[247,250,253,260],[251,252],[250,253,255,257,259,261],[247,250,251,253,260,261],[247,250,251,253,260,261,281],[263,265,266],[251,253,274],[268,274],[247,250,263,264,268,276,277,283,284,285,286,287,288,289,290,291,292,295,296,297],[250,251],[252,255],[250,252,254,255,256,257,258],[250,252,254,255,257,259],[250,254,255,256,259],[250,254,256,257,259],[250,268,276],[263,265,267],[247,250,275,276,277,291,292,293,294,295],[249,250,268,271,274,275,276,293],[250,273,274,276,278,279,285,286,287,288,289,290,292],[274,278,291],[247,250,253,260,261,280,282,283,284],[253],[255,256,257,259,285],[273],[247,250,272,273,276,278,291],[247,250,274,276,278,285,287,288,291],[274],[247,250,274,276,278,291],[263,268,277,296],[268],[250,276,291,292],[247,265,270,272,275],[250,267,269,271,274],[263,268,269,271,274,275],[249,274],[248],[249,261,272,273],[250],[65,89],[65,88],[65,85,244],[65,144],[65,66,173,174,175],[65,66,173,175],[65,66,173,174],[65,66,173],[173,174],[66,173,175],[66,173,175,178],[66,173,175,180],[65,66,173,174,223],[66,173,174],[66,173,175,182],[66],[67,68,86,87,88,89,90,91,92,93,94,95,96,145,176,177,178,179,181,182,183,184,185,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243],[66,245,246,369],[65,66,244,245],[65,66,244,245,368],[245,246,369],[65,245]],"referencedMap":[[191,1],[190,2],[192,3],[200,4],[197,5],[199,6],[196,7],[198,8],[201,9],[194,10],[193,11],[195,12],[188,13],[189,14],[109,15],[97,15],[98,15],[99,15],[100,16],[101,15],[102,16],[103,15],[104,15],[105,16],[106,16],[108,17],[107,15],[115,18],[110,18],[113,19],[111,18],[114,20],[119,21],[116,22],[118,23],[117,21],[144,24],[121,25],[122,25],[123,25],[124,5],[125,5],[126,25],[127,25],[128,24],[129,24],[120,24],[130,24],[131,24],[132,24],[134,25],[135,25],[136,5],[137,24],[138,25],[139,25],[142,26],[140,25],[141,27],[143,28],[71,29],[72,29],[73,30],[74,29],[75,29],[79,29],[76,29],[77,29],[78,29],[84,29],[80,31],[81,31],[82,29],[83,29],[85,32],[69,5],[70,33],[335,34],[336,34],[340,35],[343,34],[346,36],[349,37],[351,38],[357,39],[359,40],[362,34],[363,41],[364,42],[375,43],[374,44],[65,45],[66,5],[263,46],[160,47],[161,47],[173,48],[162,49],[163,50],[158,51],[156,52],[151,53],[155,54],[153,55],[159,56],[148,57],[149,58],[150,59],[152,60],[154,61],[157,62],[164,49],[165,49],[166,49],[167,47],[168,49],[169,49],[146,49],[172,63],[171,49],[214,64],[202,65],[203,65],[204,66],[215,67],[205,65],[206,65],[209,65],[211,66],[208,65],[207,65],[210,65],[221,68],[220,5],[217,69],[219,70],[212,71],[216,72],[213,73],[218,74],[223,75],[222,76],[312,77],[304,78],[310,79],[305,80],[308,77],[311,81],[303,82],[309,83],[302,84],[315,85],[329,5],[313,86],[332,87],[314,88],[318,89],[328,90],[327,91],[316,92],[317,93],[326,94],[330,5],[368,95],[367,96],[365,97],[366,98],[325,99],[321,100],[322,5],[299,101],[324,102],[268,103],[264,104],[261,105],[253,106],[260,107],[280,108],[282,109],[267,110],[266,111],[269,112],[298,113],[281,114],[258,115],[259,116],[256,117],[257,118],[255,119],[297,120],[276,121],[296,122],[294,123],[291,124],[279,125],[292,125],[285,126],[283,127],[284,128],[286,129],[287,130],[289,131],[288,132],[290,133],[278,134],[277,135],[295,136],[271,137],[265,104],[270,138],[272,139],[275,140],[249,141],[273,132],[274,142],[252,143],[67,5],[87,5],[90,144],[89,145],[92,145],[93,5],[91,145],[94,5],[95,5],[68,5],[96,5],[86,146],[243,5],[145,147],[242,5],[225,148],[226,149],[227,150],[174,5],[228,151],[175,152],[176,153],[177,153],[179,154],[181,155],[224,156],[185,157],[183,158],[184,154],[229,5],[230,159],[178,5],[180,159],[182,5],[231,145],[232,145],[233,145],[234,145],[235,145],[236,145],[88,5],[237,145],[238,145],[239,145],[240,145],[241,145],[244,160],[370,161],[246,162],[369,163],[245,159]],"exportedModulesMap":[[191,1],[190,2],[192,3],[200,4],[197,5],[199,6],[196,7],[198,8],[201,9],[194,10],[193,11],[195,12],[188,13],[189,14],[109,15],[97,15],[98,15],[99,15],[100,16],[101,15],[102,16],[103,15],[104,15],[105,16],[106,16],[108,17],[107,15],[115,18],[110,18],[113,19],[111,18],[114,20],[119,21],[116,22],[118,23],[117,21],[144,24],[121,25],[122,25],[123,25],[124,5],[125,5],[126,25],[127,25],[128,24],[129,24],[120,24],[130,24],[131,24],[132,24],[134,25],[135,25],[136,5],[137,24],[138,25],[139,25],[142,26],[140,25],[141,27],[143,28],[71,29],[72,29],[73,30],[74,29],[75,29],[79,29],[76,29],[77,29],[78,29],[84,29],[80,31],[81,31],[82,29],[83,29],[85,32],[69,5],[70,33],[335,34],[336,34],[340,35],[343,34],[346,36],[349,37],[351,38],[357,39],[359,40],[362,34],[363,41],[364,42],[375,43],[374,44],[65,45],[66,5],[263,46],[160,47],[161,47],[173,48],[162,49],[163,50],[158,51],[156,52],[151,53],[155,54],[153,55],[159,56],[148,57],[149,58],[150,59],[152,60],[154,61],[157,62],[164,49],[165,49],[166,49],[167,47],[168,49],[169,49],[146,49],[172,63],[171,49],[214,64],[202,65],[203,65],[204,66],[215,67],[205,65],[206,65],[209,65],[211,66],[208,65],[207,65],[210,65],[221,68],[220,5],[217,69],[219,70],[212,71],[216,72],[213,73],[218,74],[223,75],[222,76],[312,77],[304,78],[310,79],[305,80],[308,77],[311,81],[303,82],[309,83],[302,84],[315,85],[329,5],[313,86],[332,87],[314,88],[318,89],[328,90],[327,91],[316,92],[317,93],[326,94],[330,5],[368,95],[367,96],[365,97],[366,98],[325,99],[321,100],[322,5],[299,101],[324,102],[268,103],[264,104],[261,105],[253,106],[260,107],[280,108],[282,109],[267,110],[266,111],[269,112],[298,113],[281,114],[258,115],[259,116],[256,117],[257,118],[255,119],[297,120],[276,121],[296,122],[294,123],[291,124],[279,125],[292,125],[285,126],[283,127],[284,128],[286,129],[287,130],[289,131],[288,132],[290,133],[278,134],[277,135],[295,136],[271,137],[265,104],[270,138],[272,139],[275,140],[249,141],[273,132],[274,142],[252,143],[67,5],[87,5],[90,144],[89,145],[92,145],[93,5],[91,145],[94,5],[95,5],[68,5],[96,5],[86,146],[243,5],[145,147],[242,5],[225,148],[226,149],[227,150],[174,5],[228,151],[175,152],[176,153],[177,153],[179,154],[181,155],[224,156],[185,157],[183,158],[184,154],[229,5],[230,159],[178,5],[180,159],[182,5],[231,145],[232,145],[233,145],[234,145],[235,145],[236,145],[88,5],[237,145],[238,145],[239,145],[240,145],[241,145],[244,160],[370,164],[246,165],[369,5]],"semanticDiagnosticsPerFile":[191,190,192,200,197,199,196,198,201,194,193,195,188,187,189,109,97,98,99,100,101,102,103,104,105,106,108,107,115,110,113,111,114,112,119,116,118,117,144,121,122,123,124,125,126,127,128,129,120,130,131,132,133,134,135,136,137,138,139,142,140,141,143,71,72,73,74,75,79,76,77,78,84,80,81,82,83,85,69,70,333,335,336,337,338,340,341,342,343,344,345,346,347,348,349,350,351,352,353,354,355,358,357,334,359,360,356,361,362,363,364,375,371,374,372,339,373,63,61,65,66,64,62,248,263,160,161,173,162,163,158,156,147,151,155,153,159,148,149,150,152,154,157,164,165,166,167,168,169,146,170,172,171,214,202,203,204,215,205,206,209,211,208,207,210,186,221,220,217,219,212,216,213,218,223,222,262,58,59,10,11,15,14,2,16,17,18,19,20,21,22,23,3,4,27,24,25,26,28,29,30,5,31,32,33,34,6,38,35,36,37,39,7,40,45,46,41,42,43,44,8,50,47,48,49,51,9,52,60,53,54,57,55,56,1,13,12,312,304,310,306,307,305,308,300,301,311,303,309,302,315,329,313,332,331,314,318,328,327,316,317,326,330,368,367,365,366,320,325,319,321,322,323,299,324,268,264,261,253,247,260,280,282,267,266,269,298,281,251,258,259,256,257,254,255,297,276,296,294,293,291,279,292,285,283,284,286,287,289,288,290,278,277,295,271,265,270,272,275,249,250,273,274,252,67,87,90,89,92,93,91,94,95,68,96,86,243,145,242,225,226,227,174,228,175,176,177,179,181,224,185,183,184,229,230,178,180,182,231,232,233,234,235,236,88,237,238,239,240,241,244,370,246,369,245],"latestChangedDtsFile":"./src/versions.d.ts"},"version":"5.1.6"} \ No newline at end of file diff --git a/packages/vscode-ext/package.json b/packages/vscode-ext/package.json index 606cef3cdd..b727b63029 100644 --- a/packages/vscode-ext/package.json +++ b/packages/vscode-ext/package.json @@ -3,7 +3,7 @@ "displayName": "Squiggle", "description": "Squiggle language support", "license": "MIT", - "version": "0.8.5", + "version": "0.8.6-dev", "private": true, "publisher": "QURI", "repository": { diff --git a/packages/website/package.json b/packages/website/package.json index 4a8e489742..8726465630 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -16,6 +16,7 @@ "@tailwindcss/typography": "^0.5.9", "base64-js": "^1.5.1", "clsx": "^2.0.0", + "components-0.8.4": "npm:@quri/squiggle-components@0.8.4", "next": "^13.5.2", "nextra": "^2.10.0", "nextra-theme-docs": "^2.10.0", diff --git a/packages/website/src/components/PlaygroundPage.tsx b/packages/website/src/components/PlaygroundPage.tsx deleted file mode 100644 index 010b243d4a..0000000000 --- a/packages/website/src/components/PlaygroundPage.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { fromByteArray, toByteArray } from "base64-js"; -import { deflate, inflate } from "pako"; -import React, { FC } from "react"; - -import { SquigglePlayground } from "@quri/squiggle-components"; - -import { ShareButton } from "./ShareButton"; -import { useAvailableHeight } from "../utils/useAvailableHeight"; - -const HASH_PREFIX = "#code="; -function getHashData() { - if (typeof window === "undefined") { - return {}; - } - const hash = window.location.hash; - if (!hash.startsWith(HASH_PREFIX)) { - return {}; - } - try { - const compressed = toByteArray( - decodeURIComponent(hash.slice(HASH_PREFIX.length)) - ); - const text = inflate(compressed, { to: "string" }); - return JSON.parse(text); - } catch (err) { - console.error(err); - return {}; - } -} - -function setHashData(data) { - const text = JSON.stringify({ ...getHashData(), ...data }); - const compressed = deflate(text, { level: 9 }); - window.history.replaceState( - undefined, - "", - HASH_PREFIX + encodeURIComponent(fromByteArray(compressed)) - ); -} - -export const PlaygroundPage: FC = () => { - const hashData = getHashData(); - if (hashData.initialSquiggleString) { - hashData.defaultCode = String(hashData.initialSquiggleString); - delete hashData.initialSquiggleString; - } - const { height, ref } = useAvailableHeight(); - - return ( -
- ( -
- -
- )} - onCodeChange={(code) => setHashData({ defaultCode: code })} - onSettingsChange={(settings) => { - const showSummary = settings.distributionChartSettings?.showSummary; - setHashData({ showSummary }); - }} - /> -
- ); -}; diff --git a/packages/website/src/components/ShareButton.tsx b/packages/website/src/components/PlaygroundPage/ShareButton.tsx similarity index 100% rename from packages/website/src/components/ShareButton.tsx rename to packages/website/src/components/PlaygroundPage/ShareButton.tsx diff --git a/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx b/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx new file mode 100644 index 0000000000..2c6a00397e --- /dev/null +++ b/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx @@ -0,0 +1,57 @@ +import { ComponentType, FC } from "react"; +import dynamic from "next/dynamic"; +import { useAvailableHeight } from "../../utils/useAvailableHeight"; + +export const versions = ["0.8.4", "latest"] as const; + +export type Version = (typeof versions)[number]; + +type CommonProps = { + defaultCode?: string; + distributionChartSettings?: { showSummary?: boolean }; // simplified + renderExtraControls?: (options: { + openModal: (name: string) => void; + }) => React.ReactNode; + onCodeChange?: (code: string) => void; + onSettingsChange?: (settings: { + distributionChartSettings: { showSummary: boolean }; + }) => void; + height?: string | number; +}; + +const PlaygroundLatest = dynamic(() => + import("@quri/squiggle-components").then((mod) => mod.SquigglePlayground) +); + +const Playground084 = dynamic(() => + import("components-0.8.4").then((mod) => mod.SquigglePlayground) +); + +const playgroundByVersion: { + // checking that all versions are compatible with props that we plan to pass + [k in Version]: ComponentType; +} = { + "0.8.4": Playground084, + latest: PlaygroundLatest, +}; + +type Props = Omit & { version: Version }; + +export const VersionedPlayground: FC = ({ version, ...props }) => { + const { height, ref } = useAvailableHeight(); + + const Playground = playgroundByVersion[version]; + if (!Playground) { + return
Version not found
; + } + + return ( +
+ {Playground ? ( + + ) : ( +
Failed to load playground components for version {version}
+ )} +
+ ); +}; diff --git a/packages/website/src/components/PlaygroundPage/index.tsx b/packages/website/src/components/PlaygroundPage/index.tsx new file mode 100644 index 0000000000..eddca38940 --- /dev/null +++ b/packages/website/src/components/PlaygroundPage/index.tsx @@ -0,0 +1,109 @@ +import { fromByteArray, toByteArray } from "base64-js"; +import { deflate, inflate } from "pako"; +import { FC, useState } from "react"; + +import { + Button, + Dropdown, + DropdownMenu, + DropdownMenuActionItem, +} from "@quri/ui"; + +import { ShareButton } from "./ShareButton"; +import { Version, VersionedPlayground, versions } from "./VersionedPlayground"; + +const HASH_PREFIX = "#code="; +function getHashData() { + if (typeof window === "undefined") { + return {}; + } + const hash = window.location.hash; + if (!hash.startsWith(HASH_PREFIX)) { + return {}; + } + try { + const compressed = toByteArray( + decodeURIComponent(hash.slice(HASH_PREFIX.length)) + ); + const text = inflate(compressed, { to: "string" }); + return JSON.parse(text); + } catch (err) { + console.error(err); + return {}; + } +} + +type Data = { + initialSquiggleCode?: string; // legacy + defaultCode?: string; + showSummary?: boolean; +}; + +function setHashData(data: Partial) { + const text = JSON.stringify({ ...getHashData(), ...data }); + const compressed = deflate(text, { level: 9 }); + window.history.replaceState( + undefined, + "", + HASH_PREFIX + encodeURIComponent(fromByteArray(compressed)) + ); +} + +const VersionPicker: FC<{ + version: Version; + onChange: (newVersion: Version) => void; +}> = ({ version, onChange }) => { + return ( +
+ ( + + {versions.map((version) => ( + { + onChange(version); + close(); + }} + /> + ))} + + )} + > + + +
+ ); +}; + +export const PlaygroundPage: FC = () => { + const hashData = getHashData(); + if (hashData.initialSquiggleString) { + hashData.defaultCode = String(hashData.initialSquiggleString); + delete hashData.initialSquiggleString; + } + + const [version, setVersion] = useState("latest"); + + return ( + ( +
+ + +
+ )} + onCodeChange={(code) => setHashData({ defaultCode: code })} + onSettingsChange={(settings) => { + const showSummary = settings.distributionChartSettings?.showSummary; + setHashData({ showSummary }); + }} + /> + ); +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bd1ad7df32..25a3a1c61a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -793,6 +793,9 @@ importers: clsx: specifier: ^2.0.0 version: 2.0.0 + components-0.8.4: + specifier: npm:@quri/squiggle-components@0.8.4 + version: /@quri/squiggle-components@0.8.4(@lezer/common@1.0.3)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.3.2) next: specifier: ^13.5.2 version: 13.5.2(@babel/core@7.22.19)(react-dom@18.2.0)(react@18.2.0) @@ -5510,6 +5513,89 @@ packages: - supports-color dev: false + /@quri/prettier-plugin-squiggle@0.8.4: + resolution: {integrity: sha512-dmEDQhqfWHr6ScpczmBpIJjhM916O5UlvmMS1Xpw398iDxen7stITzWW9utaAK2Lv6jHuf+H99ologE5QpPOIg==} + dependencies: + '@quri/squiggle-lang': 0.8.4 + prettier: 3.0.0 + dev: false + + /@quri/squiggle-components@0.8.4(@lezer/common@1.0.3)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.3.2): + resolution: {integrity: sha512-5CpkLkQuMlpCJVN6YXof5SDR0qeoBejqnkfxAgtGMDlbFVonSxWtFulsS7S/1oXn16mHMiVl54Rd9bv7IkaQMA==} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + react-dom: ^16.8.0 || ^17 || ^18 + dependencies: + '@codemirror/autocomplete': 6.9.0(@codemirror/language@6.8.0)(@codemirror/state@6.2.1)(@codemirror/view@6.16.0)(@lezer/common@1.0.3) + '@codemirror/commands': 6.2.4 + '@codemirror/language': 6.8.0 + '@codemirror/lint': 6.4.0 + '@codemirror/search': 6.5.0 + '@codemirror/state': 6.2.1 + '@codemirror/theme-one-dark': 6.1.2 + '@codemirror/view': 6.16.0 + '@floating-ui/react': 0.24.3(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@heroicons/react': 1.0.6(react@18.2.0) + '@hookform/resolvers': 3.1.1(react-hook-form@7.45.2) + '@quri/prettier-plugin-squiggle': 0.8.4 + '@quri/squiggle-lang': 0.8.4 + '@quri/ui': 0.1.3(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@react-hook/size': 2.1.2(react@18.2.0) + '@tailwindcss/typography': 0.5.9(tailwindcss@3.3.2) + '@types/d3': 7.4.0 + clsx: 2.0.0 + codemirror: 6.0.1(@lezer/common@1.0.3) + d3: 7.8.5 + framer-motion: 10.12.18(react-dom@18.2.0)(react@18.2.0) + lodash: 4.17.21 + prettier: 3.0.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-error-boundary: 4.0.10(react@18.2.0) + react-hook-form: 7.45.2(react@18.2.0) + react-markdown: 8.0.7(@types/react@18.2.18)(react@18.2.0) + react-resizable: 3.0.5(react-dom@18.2.0)(react@18.2.0) + vscode-uri: 3.0.7 + zod: 3.21.4 + transitivePeerDependencies: + - '@lezer/common' + - '@types/react' + - supports-color + - tailwindcss + dev: false + + /@quri/squiggle-lang@0.8.4: + resolution: {integrity: sha512-bM0HhXGXtHjrHchR1HtfRdSqZ8EE5HC3CHogvDMYCvBklIT/Mwsu8hVGFvvtvY8uvzebietnRiEtcdU1kJcrYw==} + hasBin: true + dependencies: + '@commander-js/extra-typings': 11.0.0(commander@11.0.0) + commander: 11.0.0 + immutable: 4.3.1 + jstat: 1.9.6 + lodash: 4.17.21 + open: 9.1.0 + dev: false + + /@quri/ui@0.1.3(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-817llwCF5eNNhCLmzZeYd6Anr/vTSg94IzsbhCfYfK3WUttKJgbFv84FZMjaqEMJw9d0a8z6QxAo8gOhYC0JBA==} + peerDependencies: + react: ^17 || ^18 + react-dom: ^17 || ^18 + dependencies: + '@floating-ui/react': 0.24.3(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@headlessui/react': 1.7.15(react-dom@18.2.0)(react@18.2.0) + clsx: 2.0.0 + framer-motion: 10.12.18(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-colorful: 5.6.1(react-dom@18.2.0)(react@18.2.0) + react-dom: 18.2.0(react@18.2.0) + react-hook-form: 7.45.2(react@18.2.0) + react-textarea-autosize: 8.5.2(@types/react@18.2.18)(react@18.2.0) + react-use: 17.4.0(react-dom@18.2.0)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /@radix-ui/number@1.0.1: resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} dependencies: From 37509c4894c532edf155df30f845c14cae743a5c Mon Sep 17 00:00:00 2001 From: Vyacheslav Matyukhin Date: Sat, 19 Aug 2023 21:23:38 -0600 Subject: [PATCH 02/39] defaultVersion --- .../components/PlaygroundPage/VersionedPlayground.tsx | 6 ++++-- packages/website/src/components/PlaygroundPage/index.tsx | 9 +++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx b/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx index 2c6a00397e..72538dd85f 100644 --- a/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx +++ b/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx @@ -2,10 +2,12 @@ import { ComponentType, FC } from "react"; import dynamic from "next/dynamic"; import { useAvailableHeight } from "../../utils/useAvailableHeight"; -export const versions = ["0.8.4", "latest"] as const; +export const versions = ["0.8.4", "0.8.5-dev"] as const; export type Version = (typeof versions)[number]; +export const defaultVersion: Version = "0.8.4"; + type CommonProps = { defaultCode?: string; distributionChartSettings?: { showSummary?: boolean }; // simplified @@ -32,7 +34,7 @@ const playgroundByVersion: { [k in Version]: ComponentType; } = { "0.8.4": Playground084, - latest: PlaygroundLatest, + "0.8.5-dev": PlaygroundLatest, }; type Props = Omit & { version: Version }; diff --git a/packages/website/src/components/PlaygroundPage/index.tsx b/packages/website/src/components/PlaygroundPage/index.tsx index eddca38940..54277fc462 100644 --- a/packages/website/src/components/PlaygroundPage/index.tsx +++ b/packages/website/src/components/PlaygroundPage/index.tsx @@ -10,7 +10,12 @@ import { } from "@quri/ui"; import { ShareButton } from "./ShareButton"; -import { Version, VersionedPlayground, versions } from "./VersionedPlayground"; +import { + Version, + VersionedPlayground, + defaultVersion, + versions, +} from "./VersionedPlayground"; const HASH_PREFIX = "#code="; function getHashData() { @@ -84,7 +89,7 @@ export const PlaygroundPage: FC = () => { delete hashData.initialSquiggleString; } - const [version, setVersion] = useState("latest"); + const [version, setVersion] = useState(defaultVersion); return ( Date: Sat, 19 Aug 2023 22:44:37 -0600 Subject: [PATCH 03/39] v=... query param, SSR --- .../components/PlaygroundPage/ShareButton.tsx | 4 +-- .../src/components/PlaygroundPage/index.tsx | 34 ++++++++++++++----- packages/website/src/pages/playground.mdx | 6 +++- 3 files changed, 33 insertions(+), 11 deletions(-) diff --git a/packages/website/src/components/PlaygroundPage/ShareButton.tsx b/packages/website/src/components/PlaygroundPage/ShareButton.tsx index 786456a129..e2b52681e5 100644 --- a/packages/website/src/components/PlaygroundPage/ShareButton.tsx +++ b/packages/website/src/components/PlaygroundPage/ShareButton.tsx @@ -11,14 +11,14 @@ export const ShareButton = () => { }; return ( -
+
diff --git a/packages/website/src/components/PlaygroundPage/index.tsx b/packages/website/src/components/PlaygroundPage/index.tsx index 54277fc462..7d742d51b9 100644 --- a/packages/website/src/components/PlaygroundPage/index.tsx +++ b/packages/website/src/components/PlaygroundPage/index.tsx @@ -44,13 +44,15 @@ type Data = { showSummary?: boolean; }; -function setHashData(data: Partial) { +function updateUrl(data: Partial, version: Version) { const text = JSON.stringify({ ...getHashData(), ...data }); const compressed = deflate(text, { level: 9 }); window.history.replaceState( undefined, "", - HASH_PREFIX + encodeURIComponent(fromByteArray(compressed)) + `/playground?v=${version}` + + HASH_PREFIX + + encodeURIComponent(fromByteArray(compressed)) ); } @@ -82,14 +84,30 @@ const VersionPicker: FC<{ ); }; -export const PlaygroundPage: FC = () => { +export const PlaygroundPage: FC<{ version: string | null }> = (props) => { const hashData = getHashData(); if (hashData.initialSquiggleString) { hashData.defaultCode = String(hashData.initialSquiggleString); delete hashData.initialSquiggleString; } - const [version, setVersion] = useState(defaultVersion); + const [version, setVersion] = useState(() => { + for (const version of versions) { + if (props.version === version) { + return version; + } + } + if (props.version && typeof window !== "undefined") { + // wrong version, let's replace it + updateUrl({}, defaultVersion); + } + return defaultVersion; + }); + + const onVersionChange = (version: Version) => { + setVersion(version); + updateUrl({}, version); + }; return ( { showSummary: hashData.showSummary ?? true, }} renderExtraControls={() => ( -
+
- +
)} - onCodeChange={(code) => setHashData({ defaultCode: code })} + onCodeChange={(code) => updateUrl({ defaultCode: code }, version)} onSettingsChange={(settings) => { const showSummary = settings.distributionChartSettings?.showSummary; - setHashData({ showSummary }); + updateUrl({ showSummary }, version); }} /> ); diff --git a/packages/website/src/pages/playground.mdx b/packages/website/src/pages/playground.mdx index 1f506023ea..069f980337 100644 --- a/packages/website/src/pages/playground.mdx +++ b/packages/website/src/pages/playground.mdx @@ -4,4 +4,8 @@ description: Squiggle Playground import { PlaygroundPage } from "../components/PlaygroundPage"; - + + +export async function getServerSideProps({ query }) { + return { props: { version: query.v ?? null } }; +} From 67c8edeff00edc7551ce29bf1fdf5add0e9e456a Mon Sep 17 00:00:00 2001 From: Vyacheslav Matyukhin Date: Sat, 19 Aug 2023 23:27:42 -0600 Subject: [PATCH 04/39] fix next build; import 0.8.4 statically --- .../PlaygroundPage/VersionedPlayground.tsx | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx b/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx index 72538dd85f..9b606a6455 100644 --- a/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx +++ b/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx @@ -2,6 +2,11 @@ import { ComponentType, FC } from "react"; import dynamic from "next/dynamic"; import { useAvailableHeight } from "../../utils/useAvailableHeight"; +// Imported non-dynamically as a demo of version pinning. +// 0.8.4 had `exports` configuration in its `package.json` which wasn't compatible with Next.js resolutions. +// For this reason, support for 0.8.4 should be removed later (preferably before the PR is merged). +import { SquigglePlayground as Playground084 } from "components-0.8.4"; + export const versions = ["0.8.4", "0.8.5-dev"] as const; export type Version = (typeof versions)[number]; @@ -25,16 +30,14 @@ const PlaygroundLatest = dynamic(() => import("@quri/squiggle-components").then((mod) => mod.SquigglePlayground) ); -const Playground084 = dynamic(() => - import("components-0.8.4").then((mod) => mod.SquigglePlayground) -); - const playgroundByVersion: { // checking that all versions are compatible with props that we plan to pass [k in Version]: ComponentType; } = { "0.8.4": Playground084, - "0.8.5-dev": PlaygroundLatest, + "0.8.5-dev": dynamic(() => + import("@quri/squiggle-components").then((mod) => mod.SquigglePlayground) + ), }; type Props = Omit & { version: Version }; From 9a5976a7e9c2d550a6bff5811d3ef1b36943d033 Mon Sep 17 00:00:00 2001 From: Vyacheslav Matyukhin Date: Sat, 19 Aug 2023 23:30:12 -0600 Subject: [PATCH 05/39] remove dead code --- .../src/components/PlaygroundPage/VersionedPlayground.tsx | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx b/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx index 9b606a6455..a74e6df8cf 100644 --- a/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx +++ b/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx @@ -26,10 +26,6 @@ type CommonProps = { height?: string | number; }; -const PlaygroundLatest = dynamic(() => - import("@quri/squiggle-components").then((mod) => mod.SquigglePlayground) -); - const playgroundByVersion: { // checking that all versions are compatible with props that we plan to pass [k in Version]: ComponentType; From d59603ec99dbeff44ea253865b279b9e4ea90543 Mon Sep 17 00:00:00 2001 From: Vyacheslav Matyukhin Date: Mon, 21 Aug 2023 14:43:24 -0600 Subject: [PATCH 06/39] enable strict mode, refactor types --- .../PlaygroundPage/VersionedPlayground.tsx | 34 ++++++++++++------- packages/website/tsconfig.json | 8 ++--- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx b/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx index a74e6df8cf..58c3d00106 100644 --- a/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx +++ b/packages/website/src/components/PlaygroundPage/VersionedPlayground.tsx @@ -1,5 +1,6 @@ -import { ComponentType, FC } from "react"; import dynamic from "next/dynamic"; +import { FC } from "react"; + import { useAvailableHeight } from "../../utils/useAvailableHeight"; // Imported non-dynamically as a demo of version pinning. @@ -13,6 +14,16 @@ export type Version = (typeof versions)[number]; export const defaultVersion: Version = "0.8.4"; +// Note: typing this with `{ [k in Version]: ComponentType }` won't work because of contravariance issues. +// Instead, we pass all props explicitly to the playground component when it's instantiated to check that all props are compatible. +const playgroundByVersion = { + "0.8.4": Playground084, + "0.8.5-dev": dynamic(() => + import("@quri/squiggle-components").then((mod) => mod.SquigglePlayground) + ), +}; + +// We expect all playground components to be a subtype of this type. type CommonProps = { defaultCode?: string; distributionChartSettings?: { showSummary?: boolean }; // simplified @@ -26,16 +37,6 @@ type CommonProps = { height?: string | number; }; -const playgroundByVersion: { - // checking that all versions are compatible with props that we plan to pass - [k in Version]: ComponentType; -} = { - "0.8.4": Playground084, - "0.8.5-dev": dynamic(() => - import("@quri/squiggle-components").then((mod) => mod.SquigglePlayground) - ), -}; - type Props = Omit & { version: Version }; export const VersionedPlayground: FC = ({ version, ...props }) => { @@ -49,7 +50,16 @@ export const VersionedPlayground: FC = ({ version, ...props }) => { return (
{Playground ? ( - + ) : (
Failed to load playground components for version {version}
)} diff --git a/packages/website/tsconfig.json b/packages/website/tsconfig.json index 093985aafb..713eced6b3 100644 --- a/packages/website/tsconfig.json +++ b/packages/website/tsconfig.json @@ -1,15 +1,15 @@ { "compilerOptions": { + "module": "esnext", + "moduleResolution": "node", + "target": "es2022", "lib": ["dom", "dom.iterable", "esnext"], - "allowJs": true, "skipLibCheck": true, - "strict": false, + "strict": true, "forceConsistentCasingInFileNames": true, "noEmit": true, "incremental": true, "esModuleInterop": true, - "module": "esnext", - "moduleResolution": "node", "resolveJsonModule": true, "isolatedModules": true, "jsx": "preserve" From d6deb0254379e88eec13c18ada79f785336889f8 Mon Sep 17 00:00:00 2001 From: Vyacheslav Matyukhin Date: Wed, 23 Aug 2023 15:08:45 -0600 Subject: [PATCH 07/39] VersionedSquigglePlayground in hub --- packages/hub/package.json | 1 + .../[slug]/EditSquiggleSnippetModel.tsx | 51 +++++-- .../VersionedSquigglePlayground.tsx | 104 ++++++++++++++ pnpm-lock.yaml | 132 +++++++++++++++--- 4 files changed, 250 insertions(+), 38 deletions(-) create mode 100644 packages/hub/src/squiggle/components/VersionedSquigglePlayground.tsx diff --git a/packages/hub/package.json b/packages/hub/package.json index 4ac4c44a7c..a19ee21180 100644 --- a/packages/hub/package.json +++ b/packages/hub/package.json @@ -54,6 +54,7 @@ "relay-runtime": "^15.0.0", "remark-breaks": "^3.0.3", "remark-gfm": "^3.0.1", + "squiggle-components-0.8.5": "npm:@quri/squiggle-components@0.8.5", "typescript": "^5.1.6", "zod": "^3.21.4" }, diff --git a/packages/hub/src/app/models/[owner]/[slug]/EditSquiggleSnippetModel.tsx b/packages/hub/src/app/models/[owner]/[slug]/EditSquiggleSnippetModel.tsx index cd4a955359..25f70ceb03 100644 --- a/packages/hub/src/app/models/[owner]/[slug]/EditSquiggleSnippetModel.tsx +++ b/packages/hub/src/app/models/[owner]/[slug]/EditSquiggleSnippetModel.tsx @@ -1,11 +1,8 @@ -import { FC, useMemo } from "react"; +import { FC, useMemo, useState } from "react"; import { FormProvider, useFieldArray, useForm } from "react-hook-form"; import { graphql, useFragment } from "react-relay"; -import { - PlaygroundToolbarItem, - SquigglePlayground, -} from "@quri/squiggle-components"; +import { PlaygroundToolbarItem } from "@quri/squiggle-components"; import { Button, LinkIcon, useToast } from "@quri/ui"; import { EditSquiggleSnippetModel$key } from "@/__generated__/EditSquiggleSnippetModel.graphql"; @@ -17,6 +14,12 @@ import { EditModelExports } from "@/components/exports/EditModelExports"; import { useAsyncMutation } from "@/hooks/useAsyncMutation"; import { useAvailableHeight } from "@/hooks/useAvailableHeight"; import { extractFromGraphqlErrorUnion } from "@/lib/graphqlHelpers"; +import { + PlaygroundVersionPicker, + Version, + VersionedSquigglePlayground, + defaultVersion, +} from "@/squiggle/components/VersionedSquigglePlayground"; export const Mutation = graphql` mutation EditSquiggleSnippetModelMutation( @@ -148,22 +151,40 @@ export const EditSquiggleSnippetModel: FC = ({ modelRef }) => { form.setValue("code", code); }; + const [version, setVersion] = useState(defaultVersion); + + // We don't want to control SquigglePlayground, it's uncontrolled by design. + // Instead, we reset the `defaultCode` that we pass to it when version is changed. + const [defaultCode, setDefaultCode] = useState(content.code); + + const handleVersionChange = (newVersion: Version) => { + setVersion(newVersion); + setDefaultCode(form.getValues("code")); + }; + return (
- - model.isEditable && ( -
+ defaultCode={defaultCode} + renderExtraControls={({ openModal }) => ( +
+ {model.isEditable && ( openModal("exports")} - > + /> + )} + + {model.isEditable && ( -
- ) - } + )} +
+ )} renderExtraModal={(name) => { if (name === "exports") { return { diff --git a/packages/hub/src/squiggle/components/VersionedSquigglePlayground.tsx b/packages/hub/src/squiggle/components/VersionedSquigglePlayground.tsx new file mode 100644 index 0000000000..4e4bd14e2d --- /dev/null +++ b/packages/hub/src/squiggle/components/VersionedSquigglePlayground.tsx @@ -0,0 +1,104 @@ +import { + Button, + Dropdown, + DropdownMenu, + DropdownMenuActionItem, +} from "@quri/ui"; +import dynamic from "next/dynamic"; +import { FC, ReactNode } from "react"; + +// Imported non-dynamically as a demo of version pinning. +// 0.8.4 had `exports` configuration in its `package.json` which wasn't compatible with Next.js resolutions. +// For this reason, support for 0.8.4 should be removed later (preferably before the PR is merged). +import { SquigglePlayground as Playground084 } from "squiggle-components-0.8.4"; + +export const versions = ["0.8.4", "0.8.5-dev"] as const; + +export type Version = (typeof versions)[number]; + +export const defaultVersion: Version = "0.8.4"; + +// Note: typing this with `{ [k in Version]: ComponentType }` won't work because of contravariance issues. +// Instead, we pass all props explicitly to the playground component when it's instantiated to check that all props are compatible. +const playgroundByVersion = { + "0.8.4": Playground084, + "0.8.5-dev": dynamic(() => + import("@quri/squiggle-components").then((mod) => mod.SquigglePlayground) + ), +}; + +// We expect all playground components to be a subtype of this type. +type CommonProps = { + defaultCode?: string; + distributionChartSettings?: { showSummary?: boolean }; // simplified + renderExtraControls?: (options: { + openModal: (name: string) => void; + }) => ReactNode; + renderExtraModal?: (name: string) => + | { + title: string; + body: ReactNode; + } + | undefined; + onCodeChange?: (code: string) => void; + onSettingsChange?: (settings: { + distributionChartSettings: { showSummary: boolean }; + }) => void; + height?: string | number; +}; + +type Props = CommonProps & { version: Version }; + +export const PlaygroundVersionPicker: FC<{ + version: Version; + onChange: (newVersion: Version) => void; +}> = ({ version, onChange }) => { + return ( +
+ ( + + {versions.map((version) => ( + { + onChange(version); + close(); + }} + /> + ))} + + )} + > + + +
+ ); +}; + +export const VersionedSquigglePlayground: FC = ({ + version, + ...props +}) => { + const Playground = playgroundByVersion[version]; + if (!Playground) { + return
Version not found
; + } + + return Playground ? ( + + ) : ( +
Failed to load playground components for version {version}
+ ); +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 25a3a1c61a..178624e5bf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -397,6 +397,9 @@ importers: remark-gfm: specifier: ^3.0.1 version: 3.0.1 + squiggle-components-0.8.5: + specifier: npm:@quri/squiggle-components@0.8.5 + version: /@quri/squiggle-components@0.8.5(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.3.2) typescript: specifier: ^5.1.6 version: 5.1.6 @@ -795,7 +798,7 @@ importers: version: 2.0.0 components-0.8.4: specifier: npm:@quri/squiggle-components@0.8.4 - version: /@quri/squiggle-components@0.8.4(@lezer/common@1.0.3)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.3.2) + version: /@quri/squiggle-components@0.8.4(@lezer/common@1.0.4)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.3.2) next: specifier: ^13.5.2 version: 13.5.2(@babel/core@7.22.19)(react-dom@18.2.0)(react@18.2.0) @@ -889,7 +892,7 @@ packages: '@babel/core': 7.22.10 '@babel/generator': 7.22.10 '@babel/parser': 7.22.10 - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 '@babel/traverse': 7.22.10 '@babel/types': 7.22.17 babel-preset-fbjs: 3.4.0(@babel/core@7.22.10) @@ -2815,7 +2818,6 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.14.0 - dev: true /@babel/runtime@7.22.3: resolution: {integrity: sha512-XsDuspWKLUsxwCp6r7EhsExHtYfbe5oAGQ19kqngTdCPUoPQzOPdUbD/pB9PJiwb2ptYKQDjSJT3R6dC+EPqfQ==} @@ -5517,26 +5519,33 @@ packages: resolution: {integrity: sha512-dmEDQhqfWHr6ScpczmBpIJjhM916O5UlvmMS1Xpw398iDxen7stITzWW9utaAK2Lv6jHuf+H99ologE5QpPOIg==} dependencies: '@quri/squiggle-lang': 0.8.4 - prettier: 3.0.0 + prettier: 3.0.3 dev: false - /@quri/squiggle-components@0.8.4(@lezer/common@1.0.3)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.3.2): + /@quri/prettier-plugin-squiggle@0.8.5: + resolution: {integrity: sha512-Av4kfu47EjPB6430d3JuZP96scpT058kvyoLE0xbHKqsOln8R3i8tIYvaNEyrbg8SFI4ixylFsFPDJqjQvy2aw==} + dependencies: + '@quri/squiggle-lang': 0.8.5 + prettier: 3.0.3 + dev: false + + /@quri/squiggle-components@0.8.4(@lezer/common@1.0.4)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.3.2): resolution: {integrity: sha512-5CpkLkQuMlpCJVN6YXof5SDR0qeoBejqnkfxAgtGMDlbFVonSxWtFulsS7S/1oXn16mHMiVl54Rd9bv7IkaQMA==} peerDependencies: react: ^16.8.0 || ^17 || ^18 react-dom: ^16.8.0 || ^17 || ^18 dependencies: - '@codemirror/autocomplete': 6.9.0(@codemirror/language@6.8.0)(@codemirror/state@6.2.1)(@codemirror/view@6.16.0)(@lezer/common@1.0.3) + '@codemirror/autocomplete': 6.9.0(@codemirror/language@6.9.0)(@codemirror/state@6.2.1)(@codemirror/view@6.18.0)(@lezer/common@1.0.4) '@codemirror/commands': 6.2.4 - '@codemirror/language': 6.8.0 + '@codemirror/language': 6.9.0 '@codemirror/lint': 6.4.0 '@codemirror/search': 6.5.0 '@codemirror/state': 6.2.1 '@codemirror/theme-one-dark': 6.1.2 - '@codemirror/view': 6.16.0 + '@codemirror/view': 6.18.0 '@floating-ui/react': 0.24.3(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) '@heroicons/react': 1.0.6(react@18.2.0) - '@hookform/resolvers': 3.1.1(react-hook-form@7.45.2) + '@hookform/resolvers': 3.3.1(react-hook-form@7.45.2) '@quri/prettier-plugin-squiggle': 0.8.4 '@quri/squiggle-lang': 0.8.4 '@quri/ui': 0.1.3(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) @@ -5544,11 +5553,11 @@ packages: '@tailwindcss/typography': 0.5.9(tailwindcss@3.3.2) '@types/d3': 7.4.0 clsx: 2.0.0 - codemirror: 6.0.1(@lezer/common@1.0.3) + codemirror: 6.0.1(@lezer/common@1.0.4) d3: 7.8.5 framer-motion: 10.12.18(react-dom@18.2.0)(react@18.2.0) lodash: 4.17.21 - prettier: 3.0.0 + prettier: 3.0.3 react: 18.2.0 react-dom: 18.2.0(react@18.2.0) react-error-boundary: 4.0.10(react@18.2.0) @@ -5564,6 +5573,50 @@ packages: - tailwindcss dev: false + /@quri/squiggle-components@0.8.5(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0)(tailwindcss@3.3.2): + resolution: {integrity: sha512-X7GYjZoLtITgUcoFx8isfHZhzK0f6b6Gks0TfGLwQ1BnJvP5OtOI0r+lj+mYjS38Z12M3KjX6VuWX6hgCsJskQ==} + peerDependencies: + react: ^16.8.0 || ^17 || ^18 + react-dom: ^16.8.0 || ^17 || ^18 + dependencies: + '@codemirror/autocomplete': 6.9.0(@codemirror/language@6.9.0)(@codemirror/state@6.2.1)(@codemirror/view@6.18.0)(@lezer/common@1.0.4) + '@codemirror/commands': 6.2.4 + '@codemirror/language': 6.9.0 + '@codemirror/lint': 6.4.0 + '@codemirror/search': 6.5.0 + '@codemirror/state': 6.2.1 + '@codemirror/theme-one-dark': 6.1.2 + '@codemirror/view': 6.18.0 + '@floating-ui/react': 0.24.3(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@heroicons/react': 1.0.6(react@18.2.0) + '@hookform/resolvers': 3.3.1(react-hook-form@7.45.2) + '@lezer/common': 1.0.4 + '@quri/prettier-plugin-squiggle': 0.8.5 + '@quri/squiggle-lang': 0.8.5 + '@quri/ui': 0.1.4(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@react-hook/size': 2.1.2(react@18.2.0) + '@tailwindcss/typography': 0.5.9(tailwindcss@3.3.2) + '@types/d3': 7.4.0 + clsx: 2.0.0 + codemirror: 6.0.1(@lezer/common@1.0.4) + d3: 7.8.5 + framer-motion: 10.12.18(react-dom@18.2.0)(react@18.2.0) + lodash: 4.17.21 + prettier: 3.0.3 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-error-boundary: 4.0.10(react@18.2.0) + react-hook-form: 7.45.2(react@18.2.0) + react-markdown: 8.0.7(@types/react@18.2.18)(react@18.2.0) + react-resizable: 3.0.5(react-dom@18.2.0)(react@18.2.0) + vscode-uri: 3.0.7 + zod: 3.21.4 + transitivePeerDependencies: + - '@types/react' + - supports-color + - tailwindcss + dev: false + /@quri/squiggle-lang@0.8.4: resolution: {integrity: sha512-bM0HhXGXtHjrHchR1HtfRdSqZ8EE5HC3CHogvDMYCvBklIT/Mwsu8hVGFvvtvY8uvzebietnRiEtcdU1kJcrYw==} hasBin: true @@ -5576,6 +5629,18 @@ packages: open: 9.1.0 dev: false + /@quri/squiggle-lang@0.8.5: + resolution: {integrity: sha512-ymA/Y/3C8pppvYFy9RhpJyCjjttJPm+pWu1gWpaOFOs53qP61+GpGw0qtkduO0t2wYdj/3GDlQC/JyyxZMAOGw==} + hasBin: true + dependencies: + '@commander-js/extra-typings': 11.0.0(commander@11.0.0) + commander: 11.0.0 + immutable: 4.3.1 + jstat: 1.9.6 + lodash: 4.17.21 + open: 9.1.0 + dev: false + /@quri/ui@0.1.3(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): resolution: {integrity: sha512-817llwCF5eNNhCLmzZeYd6Anr/vTSg94IzsbhCfYfK3WUttKJgbFv84FZMjaqEMJw9d0a8z6QxAo8gOhYC0JBA==} peerDependencies: @@ -5596,6 +5661,27 @@ packages: - '@types/react' dev: false + /@quri/ui@0.1.4(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0): + resolution: {integrity: sha512-aUAhpRN7gc4T8Tyk3Eg9ubC57QItlUEQSYi/XSgBu2Ghcc5Hoje5eKc/AKIvhvotCuwO/TbafSVq5HjNoojufQ==} + peerDependencies: + react: ^17 || ^18 + react-dom: ^17 || ^18 + dependencies: + '@floating-ui/react': 0.24.3(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + '@headlessui/react': 1.7.15(react-dom@18.2.0)(react@18.2.0) + clsx: 2.0.0 + framer-motion: 10.12.18(react-dom@18.2.0)(react@18.2.0) + react: 18.2.0 + react-colorful: 5.6.1(react-dom@18.2.0)(react@18.2.0) + react-dom: 18.2.0(react@18.2.0) + react-hook-form: 7.45.2(react@18.2.0) + react-select: 5.7.4(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) + react-textarea-autosize: 8.5.2(@types/react@18.2.18)(react@18.2.0) + react-use: 17.4.0(react-dom@18.2.0)(react@18.2.0) + transitivePeerDependencies: + - '@types/react' + dev: false + /@radix-ui/number@1.0.1: resolution: {integrity: sha512-T5gIdVO2mmPW3NNhjNgEP3cqMXjXL9UbO0BzWcXfvdBs+BohbQxvd/K5hSVKmn9/lbTdsQVKbUcP5WLCwvUbBg==} dependencies: @@ -5621,7 +5707,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.18 '@types/react-dom': 18.2.7 @@ -5857,7 +5943,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-collection': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-compose-refs': 1.0.1(@types/react@18.2.18)(react@18.2.0) @@ -5927,7 +6013,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) '@types/react': 18.2.18 '@types/react-dom': 18.2.7 @@ -5963,7 +6049,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-context': 1.0.1(@types/react@18.2.18)(react@18.2.0) '@radix-ui/react-direction': 1.0.1(@types/react@18.2.18)(react@18.2.0) @@ -5990,7 +6076,7 @@ packages: '@types/react-dom': optional: true dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 '@radix-ui/primitive': 1.0.1 '@radix-ui/react-primitive': 1.0.3(@types/react-dom@18.2.7)(@types/react@18.2.18)(react-dom@18.2.0)(react@18.2.0) '@radix-ui/react-use-controllable-state': 1.0.1(@types/react@18.2.18)(react@18.2.0) @@ -6065,7 +6151,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 '@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.2.18)(react@18.2.0) '@types/react': 18.2.18 react: 18.2.0 @@ -6108,7 +6194,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 '@radix-ui/rect': 1.0.1 '@types/react': 18.2.18 react: 18.2.0 @@ -6123,7 +6209,7 @@ packages: '@types/react': optional: true dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 '@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.2.18)(react@18.2.0) '@types/react': 18.2.18 react: 18.2.0 @@ -6153,7 +6239,7 @@ packages: /@radix-ui/rect@1.0.1: resolution: {integrity: sha512-fyrgCaedtvMg9NK3en0pnOYJdtfwxUcNolezkNPUsoX57X8oQk+NkqcvzHXD2uKNij6GXmWU9NDru2IWjrO4BQ==} dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 dev: true /@react-hook/latest@1.0.3(react@18.2.0): @@ -9254,7 +9340,7 @@ packages: resolution: {integrity: sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==} engines: {node: '>=10', npm: '>=6'} dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 cosmiconfig: 7.1.0 resolve: 1.22.3 dev: false @@ -17633,7 +17719,7 @@ packages: /regenerator-transform@0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 dev: true /regexp.prototype.flags@1.4.3: @@ -17695,7 +17781,7 @@ packages: /relay-runtime@12.0.0: resolution: {integrity: sha512-QU6JKr1tMsry22DXNy9Whsq5rmvwr3LSZiiWV/9+DFpuTWvp+WFhobWMc8TC4OjKFfNhEZy7mOiqUAn5atQtug==} dependencies: - '@babel/runtime': 7.22.10 + '@babel/runtime': 7.22.15 fbjs: 3.0.4 invariant: 2.2.4 transitivePeerDependencies: From 09e313fa63824304b41226fa70cbc46d56999f6e Mon Sep 17 00:00:00 2001 From: Vyacheslav Matyukhin Date: Wed, 23 Aug 2023 16:08:54 -0600 Subject: [PATCH 08/39] versioned playground; squiggle version in DB --- .../migration.sql | 3 + packages/hub/prisma/schema.prisma | 3 +- packages/hub/schema.graphql | 6 +- .../[slug]/EditSquiggleSnippetModel.tsx | 18 ++--- .../RelativeValuesModelRevision.ts | 1 + .../[revisionId]/ModelRevisionView.tsx | 14 +++- packages/hub/src/app/new/model/NewModel.tsx | 2 + .../components/ui/DropdownMenuLinkItem.tsx | 5 +- .../mutations/createSquiggleSnippetModel.ts | 2 + .../mutations/updateSquiggleSnippetModel.ts | 17 +++-- .../hub/src/graphql/types/ModelRevision.ts | 1 + .../components/PlaygroundVersionPicker.tsx | 52 +++++++++++++ .../VersionedSquigglePlayground.tsx | 74 +++++++------------ packages/hub/src/squiggle/versions.ts | 11 +++ 14 files changed, 135 insertions(+), 74 deletions(-) create mode 100644 packages/hub/prisma/migrations/20230823211259_squiggle_version/migration.sql create mode 100644 packages/hub/src/squiggle/components/PlaygroundVersionPicker.tsx create mode 100644 packages/hub/src/squiggle/versions.ts diff --git a/packages/hub/prisma/migrations/20230823211259_squiggle_version/migration.sql b/packages/hub/prisma/migrations/20230823211259_squiggle_version/migration.sql new file mode 100644 index 0000000000..8460455ba0 --- /dev/null +++ b/packages/hub/prisma/migrations/20230823211259_squiggle_version/migration.sql @@ -0,0 +1,3 @@ +ALTER TABLE "SquiggleSnippet" ADD COLUMN "version" TEXT; +UPDATE "SquiggleSnippet" SET "version" = '0.8.4' WHERE "version" IS NULL; +ALTER TABLE "SquiggleSnippet" ALTER COLUMN "version" SET NOT NULL; diff --git a/packages/hub/prisma/schema.prisma b/packages/hub/prisma/schema.prisma index bab29af7f7..42f0d0df51 100644 --- a/packages/hub/prisma/schema.prisma +++ b/packages/hub/prisma/schema.prisma @@ -215,7 +215,8 @@ model ModelRevision { model SquiggleSnippet { id String @id @default(cuid()) - code String + code String + version String revision ModelRevision? } diff --git a/packages/hub/schema.graphql b/packages/hub/schema.graphql index c5822b19d0..377868c460 100644 --- a/packages/hub/schema.graphql +++ b/packages/hub/schema.graphql @@ -243,6 +243,7 @@ input MutationCreateSquiggleSnippetModelInput { """Defaults to false""" isPrivate: Boolean slug: String! + version: String! } union MutationCreateSquiggleSnippetModelResult = BaseError | CreateSquiggleSnippetModelResult | ValidationError @@ -336,8 +337,7 @@ input MutationUpdateRelativeValuesDefinitionInput { union MutationUpdateRelativeValuesDefinitionResult = BaseError | UpdateRelativeValuesDefinitionResult input MutationUpdateSquiggleSnippetModelInput { - code: String @deprecated(reason: "Use content arg instead") - content: SquiggleSnippetContentInput + content: SquiggleSnippetContentInput! owner: String! relativeValuesExports: [RelativeValuesExportInput!] slug: String! @@ -523,10 +523,12 @@ interface SquiggleOutput { type SquiggleSnippet implements Node { code: String! id: ID! + version: String! } input SquiggleSnippetContentInput { code: String! + version: String! } type UpdateGroupInviteRoleResult { diff --git a/packages/hub/src/app/models/[owner]/[slug]/EditSquiggleSnippetModel.tsx b/packages/hub/src/app/models/[owner]/[slug]/EditSquiggleSnippetModel.tsx index 25f70ceb03..d79fe57657 100644 --- a/packages/hub/src/app/models/[owner]/[slug]/EditSquiggleSnippetModel.tsx +++ b/packages/hub/src/app/models/[owner]/[slug]/EditSquiggleSnippetModel.tsx @@ -14,12 +14,9 @@ import { EditModelExports } from "@/components/exports/EditModelExports"; import { useAsyncMutation } from "@/hooks/useAsyncMutation"; import { useAvailableHeight } from "@/hooks/useAvailableHeight"; import { extractFromGraphqlErrorUnion } from "@/lib/graphqlHelpers"; -import { - PlaygroundVersionPicker, - Version, - VersionedSquigglePlayground, - defaultVersion, -} from "@/squiggle/components/VersionedSquigglePlayground"; +import { VersionedSquigglePlayground } from "@/squiggle/components/VersionedSquigglePlayground"; +import { type SquiggleVersion } from "@/squiggle/versions"; +import { PlaygroundVersionPicker } from "@/squiggle/components/PlaygroundVersionPicker"; export const Mutation = graphql` mutation EditSquiggleSnippetModelMutation( @@ -70,6 +67,7 @@ export const EditSquiggleSnippetModel: FC = ({ modelRef }) => { ... on SquiggleSnippet { id code + version } } @@ -114,6 +112,9 @@ export const EditSquiggleSnippetModel: FC = ({ modelRef }) => { defaultValues: initialFormValues, }); + // could version picker be part of the form? + const [version, setVersion] = useState(content.version); + const { fields: variablesWithDefinitionsFields, append: appendVariableWithDefinition, @@ -137,6 +138,7 @@ export const EditSquiggleSnippetModel: FC = ({ modelRef }) => { input: { content: { code: formData.code, + version, }, relativeValuesExports: formData.relativeValuesExports, slug: model.slug, @@ -151,13 +153,11 @@ export const EditSquiggleSnippetModel: FC = ({ modelRef }) => { form.setValue("code", code); }; - const [version, setVersion] = useState(defaultVersion); - // We don't want to control SquigglePlayground, it's uncontrolled by design. // Instead, we reset the `defaultCode` that we pass to it when version is changed. const [defaultCode, setDefaultCode] = useState(content.code); - const handleVersionChange = (newVersion: Version) => { + const handleVersionChange = (newVersion: SquiggleVersion) => { setVersion(newVersion); setDefaultCode(form.getValues("code")); }; diff --git a/packages/hub/src/app/models/[owner]/[slug]/relative-values/[variableName]/RelativeValuesModelRevision.ts b/packages/hub/src/app/models/[owner]/[slug]/relative-values/[variableName]/RelativeValuesModelRevision.ts index 759b017333..3f634de76a 100644 --- a/packages/hub/src/app/models/[owner]/[slug]/relative-values/[variableName]/RelativeValuesModelRevision.ts +++ b/packages/hub/src/app/models/[owner]/[slug]/relative-values/[variableName]/RelativeValuesModelRevision.ts @@ -11,6 +11,7 @@ export const RelativeValuesModelRevisionFragment = graphql` ... on SquiggleSnippet { id code + version } } diff --git a/packages/hub/src/app/models/[owner]/[slug]/revisions/[revisionId]/ModelRevisionView.tsx b/packages/hub/src/app/models/[owner]/[slug]/revisions/[revisionId]/ModelRevisionView.tsx index 2199685b36..cbe0bd9be1 100644 --- a/packages/hub/src/app/models/[owner]/[slug]/revisions/[revisionId]/ModelRevisionView.tsx +++ b/packages/hub/src/app/models/[owner]/[slug]/revisions/[revisionId]/ModelRevisionView.tsx @@ -1,5 +1,6 @@ "use client"; +import { format } from "date-fns"; import { FC } from "react"; import { graphql } from "relay-runtime"; @@ -9,9 +10,8 @@ import { extractFromGraphqlErrorUnion } from "@/lib/graphqlHelpers"; import { SerializablePreloadedQuery } from "@/relay/loadPageQuery"; import { usePageQuery } from "@/relay/usePageQuery"; import { modelRoute } from "@/routes"; +import { VersionedSquigglePlayground } from "@/squiggle/components/VersionedSquigglePlayground"; import { ModelRevisionViewQuery } from "@gen/ModelRevisionViewQuery.graphql"; -import { SquigglePlayground } from "@quri/squiggle-components"; -import { format } from "date-fns"; const Query = graphql` query ModelRevisionViewQuery($input: QueryModelInput!, $revisionId: ID!) { @@ -35,6 +35,7 @@ const Query = graphql` __typename ... on SquiggleSnippet { code + version } } } @@ -65,12 +66,17 @@ export const ModelRevisionView: FC<{
Version from{" "} - {format(model.revision.createdAtTimestamp, commonDateFormat)} + {format(model.revision.createdAtTimestamp, commonDateFormat)}.{" "} + Squiggle{" "} + {model.revision.content.version}.
Go to latest version
- +
); }; diff --git a/packages/hub/src/app/new/model/NewModel.tsx b/packages/hub/src/app/new/model/NewModel.tsx index b4cf278aae..ad689dd500 100644 --- a/packages/hub/src/app/new/model/NewModel.tsx +++ b/packages/hub/src/app/new/model/NewModel.tsx @@ -13,6 +13,7 @@ import { H1 } from "@/components/ui/Headers"; import { SlugFormField } from "@/components/ui/SlugFormField"; import { useAsyncMutation } from "@/hooks/useAsyncMutation"; import { modelRoute } from "@/routes"; +import { defaultSquiggleVersion } from "@/squiggle/versions"; const Mutation = graphql` mutation NewModelMutation($input: MutationCreateSquiggleSnippetModelInput!) { @@ -75,6 +76,7 @@ export const NewModel: FC = () => { groupSlug: data.group?.slug, isPrivate: data.isPrivate, code: defaultCode, + version: defaultSquiggleVersion, }, }, onCompleted: (result) => { diff --git a/packages/hub/src/components/ui/DropdownMenuLinkItem.tsx b/packages/hub/src/components/ui/DropdownMenuLinkItem.tsx index 30dfdb1cb6..842e5d65ed 100644 --- a/packages/hub/src/components/ui/DropdownMenuLinkItem.tsx +++ b/packages/hub/src/components/ui/DropdownMenuLinkItem.tsx @@ -1,9 +1,8 @@ -import { DropdownMenuActionItem } from "@quri/ui"; -import { ExternalLinkIcon, IconProps } from "@quri/ui"; -import Link from "next/link"; import { useRouter } from "next/navigation"; import { FC } from "react"; +import { DropdownMenuActionItem, IconProps } from "@quri/ui"; + type Props = { href: string; title: string; diff --git a/packages/hub/src/graphql/mutations/createSquiggleSnippetModel.ts b/packages/hub/src/graphql/mutations/createSquiggleSnippetModel.ts index 3aeb5727e1..580e8f9b05 100644 --- a/packages/hub/src/graphql/mutations/createSquiggleSnippetModel.ts +++ b/packages/hub/src/graphql/mutations/createSquiggleSnippetModel.ts @@ -25,6 +25,7 @@ builder.mutationField("createSquiggleSnippetModel", (t) => required: true, description: "Squiggle source code", }), + version: t.input.string({ required: true }), slug: t.input.string({ required: true, validate: validateSlug, @@ -60,6 +61,7 @@ builder.mutationField("createSquiggleSnippetModel", (t) => squiggleSnippet: { create: { code: input.code, + version: input.version, }, }, contentType: "SquiggleSnippet", diff --git a/packages/hub/src/graphql/mutations/updateSquiggleSnippetModel.ts b/packages/hub/src/graphql/mutations/updateSquiggleSnippetModel.ts index e5e284d782..64f2d38b25 100644 --- a/packages/hub/src/graphql/mutations/updateSquiggleSnippetModel.ts +++ b/packages/hub/src/graphql/mutations/updateSquiggleSnippetModel.ts @@ -3,6 +3,7 @@ import { RelativeValuesDefinition } from "@prisma/client"; import { builder } from "@/graphql/builder"; import { prisma } from "@/prisma"; +import { squiggleVersions } from "@/squiggle/versions"; import { Model, getWriteableModel } from "../types/Model"; const DefinitionRefInput = builder.inputType("DefinitionRefInput", { @@ -30,6 +31,7 @@ const SquiggleSnippetContentInput = builder.inputType( { fields: (t) => ({ code: t.string({ required: true }), + version: t.string({ required: true }), }), } ); @@ -48,10 +50,9 @@ builder.mutationField("updateSquiggleSnippetModel", (t) => relativeValuesExports: t.input.field({ type: [RelativeValuesExportInput], }), - code: t.input.string({ deprecationReason: "Use content arg instead" }), content: t.input.field({ type: SquiggleSnippetContentInput, - // TODO - should be required after `code` input is removed + required: true, }), }, resolve: async (_, { input }, { session }) => { @@ -61,10 +62,9 @@ builder.mutationField("updateSquiggleSnippetModel", (t) => owner: input.owner, }); - const code = input.code ?? input.content?.code; - if (code === undefined) { - // remove this after `code` support is removed - throw new Error("One of `code` and `content.code` must be set"); + const version = input.content.version; + if (!(squiggleVersions as readonly string[]).includes(version)) { + throw new Error(`Unknown Squiggle version ${version}`); } const relativeValuesExports = input.relativeValuesExports ?? []; @@ -122,7 +122,10 @@ builder.mutationField("updateSquiggleSnippetModel", (t) => const revision = await tx.modelRevision.create({ data: { squiggleSnippet: { - create: { code }, + create: { + code: input.content.code, + version: input.content.version, + }, }, contentType: "SquiggleSnippet", model: { diff --git a/packages/hub/src/graphql/types/ModelRevision.ts b/packages/hub/src/graphql/types/ModelRevision.ts index db8c8a25f8..5757ac9c2e 100644 --- a/packages/hub/src/graphql/types/ModelRevision.ts +++ b/packages/hub/src/graphql/types/ModelRevision.ts @@ -6,6 +6,7 @@ export const SquiggleSnippet = builder.prismaNode("SquiggleSnippet", { id: { field: "id" }, fields: (t) => ({ code: t.exposeString("code"), + version: t.exposeString("version"), }), }); diff --git a/packages/hub/src/squiggle/components/PlaygroundVersionPicker.tsx b/packages/hub/src/squiggle/components/PlaygroundVersionPicker.tsx new file mode 100644 index 0000000000..cd2ad21393 --- /dev/null +++ b/packages/hub/src/squiggle/components/PlaygroundVersionPicker.tsx @@ -0,0 +1,52 @@ +import { FC } from "react"; + +import { + Button, + Dropdown, + DropdownMenu, + DropdownMenuActionItem, +} from "@quri/ui"; + +import { + SquiggleVersion, + checkSquiggleVersion, + squiggleVersions, +} from "../versions"; +import { DropdownMenuLinkItem } from "@/components/ui/DropdownMenuLinkItem"; + +export const PlaygroundVersionPicker: FC<{ + version: string; + onChange: (newVersion: SquiggleVersion) => void; +}> = ({ version, onChange }) => { + const versionIsValid = checkSquiggleVersion(version); + + return ( +
+ ( + + {squiggleVersions.map((version) => ( + { + onChange(version); + close(); + }} + /> + ))} + + + )} + > + + +
+ ); +}; diff --git a/packages/hub/src/squiggle/components/VersionedSquigglePlayground.tsx b/packages/hub/src/squiggle/components/VersionedSquigglePlayground.tsx index 4e4bd14e2d..c152aae0cd 100644 --- a/packages/hub/src/squiggle/components/VersionedSquigglePlayground.tsx +++ b/packages/hub/src/squiggle/components/VersionedSquigglePlayground.tsx @@ -1,28 +1,23 @@ -import { - Button, - Dropdown, - DropdownMenu, - DropdownMenuActionItem, -} from "@quri/ui"; import dynamic from "next/dynamic"; -import { FC, ReactNode } from "react"; +import { FC, ReactNode, useMemo } from "react"; // Imported non-dynamically as a demo of version pinning. // 0.8.4 had `exports` configuration in its `package.json` which wasn't compatible with Next.js resolutions. // For this reason, support for 0.8.4 should be removed later (preferably before the PR is merged). import { SquigglePlayground as Playground084 } from "squiggle-components-0.8.4"; -export const versions = ["0.8.4", "0.8.5-dev"] as const; - -export type Version = (typeof versions)[number]; - -export const defaultVersion: Version = "0.8.4"; +import { + SquiggleVersion, + checkSquiggleVersion, + defaultSquiggleVersion, +} from "../versions"; +import { useToast } from "@quri/ui"; // Note: typing this with `{ [k in Version]: ComponentType }` won't work because of contravariance issues. // Instead, we pass all props explicitly to the playground component when it's instantiated to check that all props are compatible. const playgroundByVersion = { "0.8.4": Playground084, - "0.8.5-dev": dynamic(() => + dev: dynamic(() => import("@quri/squiggle-components").then((mod) => mod.SquigglePlayground) ), }; @@ -47,46 +42,31 @@ type CommonProps = { height?: string | number; }; -type Props = CommonProps & { version: Version }; - -export const PlaygroundVersionPicker: FC<{ - version: Version; - onChange: (newVersion: Version) => void; -}> = ({ version, onChange }) => { - return ( -
- ( - - {versions.map((version) => ( - { - onChange(version); - close(); - }} - /> - ))} - - )} - > - - -
- ); +type Props = CommonProps & { + version: string; // not SquiggleVersion, because it's easier to validate the version inside this component }; export const VersionedSquigglePlayground: FC = ({ version, ...props }) => { - const Playground = playgroundByVersion[version]; - if (!Playground) { - return
Version not found
; - } + const toast = useToast(); + + const usedVersion = useMemo(() => { + if (!checkSquiggleVersion(version)) { + toast( + `Playground for version ${version} is not available. Rendering with + ${defaultSquiggleVersion} instead.`, + "error" + ); + return defaultSquiggleVersion; + } + return version; + }, [version, toast]); - return Playground ? ( + const Playground = playgroundByVersion[usedVersion]; + + return ( = ({ onSettingsChange={props.onSettingsChange} height={props.height} /> - ) : ( -
Failed to load playground components for version {version}
); }; diff --git a/packages/hub/src/squiggle/versions.ts b/packages/hub/src/squiggle/versions.ts new file mode 100644 index 0000000000..778c326d55 --- /dev/null +++ b/packages/hub/src/squiggle/versions.ts @@ -0,0 +1,11 @@ +export const squiggleVersions = ["0.8.4", "dev"] as const; + +export type SquiggleVersion = (typeof squiggleVersions)[number]; + +export const defaultSquiggleVersion: SquiggleVersion = "0.8.4"; + +export function checkSquiggleVersion( + version: string +): version is SquiggleVersion { + return (squiggleVersions as readonly string[]).includes(version); +} From 6426ed32982653a63fbbad0a6395d2793e072f75 Mon Sep 17 00:00:00 2001 From: Vyacheslav Matyukhin Date: Wed, 23 Aug 2023 16:29:59 -0600 Subject: [PATCH 09/39] pick version in new model form --- packages/hub/src/app/new/model/NewModel.tsx | 19 +++++-- .../components/PlaygroundVersionPicker.tsx | 53 +++++++++---------- packages/hub/src/squiggle/versions.ts | 2 +- 3 files changed, 43 insertions(+), 31 deletions(-) diff --git a/packages/hub/src/app/new/model/NewModel.tsx b/packages/hub/src/app/new/model/NewModel.tsx index ad689dd500..643ef5e475 100644 --- a/packages/hub/src/app/new/model/NewModel.tsx +++ b/packages/hub/src/app/new/model/NewModel.tsx @@ -5,7 +5,7 @@ import { FC } from "react"; import { FormProvider, useForm } from "react-hook-form"; import { graphql } from "relay-runtime"; -import { Button, CheckboxFormField } from "@quri/ui"; +import { Button, CheckboxFormField, ControlledFormField } from "@quri/ui"; import { NewModelMutation } from "@/__generated__/NewModelMutation.graphql"; import { SelectGroup, SelectGroupOption } from "@/components/SelectGroup"; @@ -13,7 +13,8 @@ import { H1 } from "@/components/ui/Headers"; import { SlugFormField } from "@/components/ui/SlugFormField"; import { useAsyncMutation } from "@/hooks/useAsyncMutation"; import { modelRoute } from "@/routes"; -import { defaultSquiggleVersion } from "@/squiggle/versions"; +import { PlaygroundVersionPicker } from "@/squiggle/components/PlaygroundVersionPicker"; +import { SquiggleVersion, defaultSquiggleVersion } from "@/squiggle/versions"; const Mutation = graphql` mutation NewModelMutation($input: MutationCreateSquiggleSnippetModelInput!) { @@ -41,6 +42,7 @@ a = normal(2, 5) type FormShape = { slug: string | undefined; + version: SquiggleVersion; group: SelectGroupOption | null; isPrivate: boolean; }; @@ -50,6 +52,7 @@ export const NewModel: FC = () => { const form = useForm({ defaultValues: { + version: defaultSquiggleVersion, // don't pass `slug: ""` here, it will lead to form reset if a user started to type in a value before JS finished loading group: null, isPrivate: false, @@ -76,7 +79,7 @@ export const NewModel: FC = () => { groupSlug: data.group?.slug, isPrivate: data.isPrivate, code: defaultCode, - version: defaultSquiggleVersion, + version: data.version, }, }, onCompleted: (result) => { @@ -113,6 +116,16 @@ export const NewModel: FC = () => { myOnly={true} /> label="Private" name="isPrivate" /> + + name="version" + label="Squiggle version" + > + {({ onChange, value }) => ( +
+ +
+ )} +
- -
+ ))} + + + )} + > + + ); }; diff --git a/packages/hub/src/squiggle/versions.ts b/packages/hub/src/squiggle/versions.ts index 778c326d55..27fe90ccbc 100644 --- a/packages/hub/src/squiggle/versions.ts +++ b/packages/hub/src/squiggle/versions.ts @@ -1,4 +1,4 @@ -export const squiggleVersions = ["0.8.4", "dev"] as const; +export const squiggleVersions = ["dev", "0.8.4"] as const; export type SquiggleVersion = (typeof squiggleVersions)[number]; From ed49d9b79ba3b6d02dcc5ee9b76f84e00ad23af3 Mon Sep 17 00:00:00 2001 From: Vyacheslav Matyukhin Date: Wed, 23 Aug 2023 16:58:15 -0600 Subject: [PATCH 10/39] improve version picker; add DropdownMenuLinkItem --- .changeset/afraid-radios-taste.md | 6 ++++ .../[slug]/EditSquiggleSnippetModel.tsx | 1 + .../app/models/[owner]/[slug]/ModelLayout.tsx | 4 +-- .../layout/RootLayout/UserControls.tsx | 6 ++-- ...kItem.tsx => DropdownMenuNextLinkItem.tsx} | 2 +- .../components/PlaygroundVersionPicker.tsx | 26 ++++++++++++--- .../Dropdown/DropdownMenuLinkItem.tsx | 33 +++++++++++++++++++ packages/ui/src/icons/HeroIcons.tsx | 10 ++++++ packages/ui/src/index.ts | 2 ++ 9 files changed, 80 insertions(+), 10 deletions(-) create mode 100644 .changeset/afraid-radios-taste.md rename packages/hub/src/components/ui/{DropdownMenuLinkItem.tsx => DropdownMenuNextLinkItem.tsx} (89%) create mode 100644 packages/ui/src/components/Dropdown/DropdownMenuLinkItem.tsx diff --git a/.changeset/afraid-radios-taste.md b/.changeset/afraid-radios-taste.md new file mode 100644 index 0000000000..cb69f91dce --- /dev/null +++ b/.changeset/afraid-radios-taste.md @@ -0,0 +1,6 @@ +--- +"@quri/ui": patch +--- + +- `WrenchIcon` +- `DropdownMenuLinkItem` for `` links diff --git a/packages/hub/src/app/models/[owner]/[slug]/EditSquiggleSnippetModel.tsx b/packages/hub/src/app/models/[owner]/[slug]/EditSquiggleSnippetModel.tsx index d79fe57657..4f6d86f072 100644 --- a/packages/hub/src/app/models/[owner]/[slug]/EditSquiggleSnippetModel.tsx +++ b/packages/hub/src/app/models/[owner]/[slug]/EditSquiggleSnippetModel.tsx @@ -183,6 +183,7 @@ export const EditSquiggleSnippetModel: FC = ({ modelRef }) => { {model.isEditable && ( ); diff --git a/packages/ui/src/components/Dropdown/DropdownMenuLinkItem.tsx b/packages/ui/src/components/Dropdown/DropdownMenuLinkItem.tsx new file mode 100644 index 0000000000..69fee779c5 --- /dev/null +++ b/packages/ui/src/components/Dropdown/DropdownMenuLinkItem.tsx @@ -0,0 +1,33 @@ +import { FC } from "react"; +import { IconProps } from "../../icons/Icon.js"; +import { ActionItemInternal } from "./DropdownMenuActionItemInternal.js"; +import { ExternalLinkIcon } from "../../index.js"; + +type Props = { + href: string; + title: string; + icon?: FC; + close: () => void; + newTab?: boolean; +}; + +// In Next.js apps you should prefer `DropdownMenuNextLinkItem` instead of using this component. +// (See hub's source code for implementation.) +export const DropdownMenuLinkItem: FC = ({ + href, + title, + icon, + close, + newTab, +}) => { + return ( + + + + ); +}; diff --git a/packages/ui/src/icons/HeroIcons.tsx b/packages/ui/src/icons/HeroIcons.tsx index 61959c4953..95c34beb75 100644 --- a/packages/ui/src/icons/HeroIcons.tsx +++ b/packages/ui/src/icons/HeroIcons.tsx @@ -337,3 +337,13 @@ export const RightArrowIcon: FC = (props) => ( /> ); + +export const WrenchIcon: FC = (props) => ( + + + +); diff --git a/packages/ui/src/index.ts b/packages/ui/src/index.ts index 437b3c556c..18a4ba4e92 100644 --- a/packages/ui/src/index.ts +++ b/packages/ui/src/index.ts @@ -4,6 +4,7 @@ export { StyledTab } from "./components/StyledTab.js"; export { DropdownMenu } from "./components/Dropdown/DropdownMenu.js"; export { DropdownMenuActionItem } from "./components/Dropdown/DropdownMenuActionItem.js"; +export { DropdownMenuLinkItem } from "./components/Dropdown/DropdownMenuLinkItem.js"; export { ActionItemInternal } from "./components/Dropdown/DropdownMenuActionItemInternal.js"; export { DropdownMenuAsyncActionItem } from "./components/Dropdown/DropdownMenuAsyncActionItem.js"; export { DropdownMenuHeader } from "./components/Dropdown/DropdownMenuHeader.js"; @@ -77,6 +78,7 @@ export { TableCellsIcon, UserCircleIcon, UserIcon, + WrenchIcon, } from "./icons/HeroIcons.js"; export type { IconProps } from "./icons/Icon.js"; export { RefreshIcon } from "./icons/RefreshIcon.js"; From b057155433d1d7b5afe34c108d526dee1cce28f2 Mon Sep 17 00:00:00 2001 From: Vyacheslav Matyukhin Date: Wed, 23 Aug 2023 17:39:03 -0600 Subject: [PATCH 11/39] FormField and ControlledFormField components accept standaloneLabel prop --- .changeset/fast-feet-happen.md | 5 ++ packages/hub/src/app/new/model/NewModel.tsx | 9 ++- .../layout/RootLayout/UserControls.tsx | 2 +- .../components/PlaygroundVersionPicker.tsx | 64 ++++++++++--------- .../src/forms/common/ControlledFormField.tsx | 2 + packages/ui/src/forms/common/FormField.tsx | 2 + .../ui/src/forms/common/FormFieldLayout.tsx | 24 ++++--- packages/ui/src/stories/Forms.mdx | 6 ++ 8 files changed, 71 insertions(+), 43 deletions(-) create mode 100644 .changeset/fast-feet-happen.md diff --git a/.changeset/fast-feet-happen.md b/.changeset/fast-feet-happen.md new file mode 100644 index 0000000000..bbe7323393 --- /dev/null +++ b/.changeset/fast-feet-happen.md @@ -0,0 +1,5 @@ +--- +"@quri/ui": patch +--- + +FormField and ControlledFormField components accept standaloneLabel prop diff --git a/packages/hub/src/app/new/model/NewModel.tsx b/packages/hub/src/app/new/model/NewModel.tsx index 643ef5e475..afd3562ea8 100644 --- a/packages/hub/src/app/new/model/NewModel.tsx +++ b/packages/hub/src/app/new/model/NewModel.tsx @@ -119,11 +119,14 @@ export const NewModel: FC = () => { name="version" label="Squiggle version" + standaloneLabel > {({ onChange, value }) => ( -
- -
+ )}
diff --git a/packages/hub/src/components/layout/RootLayout/UserControls.tsx b/packages/hub/src/components/layout/RootLayout/UserControls.tsx index 5e689f063f..7d11224303 100644 --- a/packages/hub/src/components/layout/RootLayout/UserControls.tsx +++ b/packages/hub/src/components/layout/RootLayout/UserControls.tsx @@ -88,7 +88,7 @@ export const UserControls: FC<{ session: Session | null }> = ({ session }) => { title="New Relative Value Definition" close={close} /> - ( - - {squiggleVersions.map((version) => ( - { - onChange(version); - close(); - }} +
+ ( + + {squiggleVersions.map((version) => ( + { + onChange(version); + close(); + }} + /> + ))} + + - ))} - - - - )} - > - - + + )} + > + + +
); }; diff --git a/packages/ui/src/forms/common/ControlledFormField.tsx b/packages/ui/src/forms/common/ControlledFormField.tsx index 8ee569cc82..8e9d77e179 100644 --- a/packages/ui/src/forms/common/ControlledFormField.tsx +++ b/packages/ui/src/forms/common/ControlledFormField.tsx @@ -37,6 +37,7 @@ export function ControlledFormField< label, description, inlineLabel, + standaloneLabel, children, }: ControlledFormFieldProps) { return ( @@ -44,6 +45,7 @@ export function ControlledFormField< label={label} description={description} inlineLabel={inlineLabel} + standaloneLabel={standaloneLabel} > {children} diff --git a/packages/ui/src/forms/common/FormField.tsx b/packages/ui/src/forms/common/FormField.tsx index fa3056a5a0..63e3add53d 100644 --- a/packages/ui/src/forms/common/FormField.tsx +++ b/packages/ui/src/forms/common/FormField.tsx @@ -27,6 +27,7 @@ export function FormField< label, description, inlineLabel, + standaloneLabel, children, }: FormFieldProps) { return ( @@ -34,6 +35,7 @@ export function FormField< label={label} description={description} inlineLabel={inlineLabel} + standaloneLabel={standaloneLabel} > {children} diff --git a/packages/ui/src/forms/common/FormFieldLayout.tsx b/packages/ui/src/forms/common/FormFieldLayout.tsx index 99b4996446..8e60a23d4c 100644 --- a/packages/ui/src/forms/common/FormFieldLayout.tsx +++ b/packages/ui/src/forms/common/FormFieldLayout.tsx @@ -2,27 +2,35 @@ import { clsx } from "clsx"; import { FC, PropsWithChildren } from "react"; export type FormFieldLayoutProps = { - label?: string; // TODO - `inlineLabel` prop for checkboxes and color inputs - description?: string; // TODO - allow ReactNode for inline links and other formatting? - inlineLabel?: boolean; // useful for checkboxes + label?: string; + // TODO - allow ReactNode for inline links and other formatting? + description?: string; + // useful for checkboxes + inlineLabel?: boolean; + // If set, label won't wrap children and won't be clickable. This is useful for some custom fields where outer label leads to too large clickable area. + standaloneLabel?: boolean; }; export const FieldLayout: FC> = ({ label, - inlineLabel, description, + inlineLabel, + standaloneLabel, children, }) => { + const OuterTag = standaloneLabel ? "div" : "label"; + const InnerTag = standaloneLabel ? "label" : "div"; + // TODO - use