diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 60ddd38025..dc77b4fa1f 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -22,10 +22,11 @@ jobs: displayName: 'Install Node.js' - script: | npm install - npm test + npm run bootstrap + npm run build + npm run test npm run lint npm run cs-check - npm run dist displayName: 'npm install and build' - job: Docs steps: @@ -37,4 +38,4 @@ jobs: - script: | pip install mkdocs==1.0.4 mkdocs build --clean - displayName: 'build docs' \ No newline at end of file + displayName: 'build docs' diff --git a/docs/advanced-customization.md b/docs/advanced-customization.md index 82c66e34d4..33f6ecb91a 100644 --- a/docs/advanced-customization.md +++ b/docs/advanced-customization.md @@ -550,7 +550,7 @@ You can provide your own implementation of the `SchemaField` base React componen To proceed so, pass a `fields` object having a `SchemaField` property to your `Form` component; here's a rather silly example wrapping the standard `SchemaField` lib component: ```jsx -import SchemaField from "react-jsonschema-form/lib/components/fields/SchemaField"; +import SchemaField from "@rjsf/core/lib/components/fields/SchemaField"; const CustomSchemaField = function(props) { return ( diff --git a/docs/contributing.md b/docs/contributing.md index f0801da7d9..cefba423ad 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -2,11 +2,23 @@ ### Development server -When developing a package, to run the playground with your latest changes, cd to the package directory and then run `npm start`. For example, to run the playground, run: +When developing a package, first run from the root-level directory: + +```bash +lerna bootstrap +``` + +Then, go to the package directory and then run `npm start` to live-recompile the files for that package. For example, to edit the core package: ```bash cd packages/core -npm install +npm start +``` + +Finally, to run the playground, go to the playground directory and run `npm start` in another terminal. + +```bash +cd packages/playground npm start ``` @@ -38,28 +50,13 @@ npm test Code coverage reports are currently available only for the `@rjsf/core` package. They are generated using [nyc](https://github.com/istanbuljs/nyc) each time the `npm test-coverage` script is run. The full report can be seen by opening `./coverage/lcov-report/index.html`. -### Notes on the local playground - -The playground located in `packages/playground` contains code that is published as the `@rjsf/playground` package. This package is used by the local playgrounds in packages such as `packages/core`, so that when you run `npm start` from `packages/core`, it will run the playground component from `@rjsf/playground` but with the local changes to react-jsonschema-form. - -Note that when doing local development in a package such as `packages/core`, making changes to `packages/playground` will not affect the local playground that is run from `packages/core`. This should be fine in most cases for development, unless you need to update and test the default playground examples. In this case, you could use `npm link` to use the latest changes both from the playground and your package. As an example, to do this when developing locally on `packages/core`, you can run: - -```bash -cd packages/playground -npm run build:lib -npm link -cd ../core -npm link @rjsf/playground -npm start -``` - -After the above is run, you will have a playground that has both your local changes to `packages/core` and `packages/playground`. Note that while the `packages/core` changes will live reload, the `packages/playground` changes will not -- you will need to run `npm run build:lib` from `packages/playground` each time you update a playground example. ### Releasing To release, run: ```bash +lerna build lerna version lerna publish git push --tags origin master @@ -73,7 +70,7 @@ Docs are automatically released using [Read The Docs](https://readthedocs.org/) #### Releasing the playground -Note that publishing the `@rjsf/playground` package will update the version of the playground used in the local development playgrounds for packages such as `@rjsf/core`, etc. However, in order to publish the latest playground to [https://rjsf-team.github.io/react-jsonschema-form/](https://rjsf-team.github.io/react-jsonschema-form/) after a new rjsf release, run: +In order to publish the latest playground to [https://rjsf-team.github.io/react-jsonschema-form/](https://rjsf-team.github.io/react-jsonschema-form/) after a new rjsf release, run: ```bash cd packages/playground diff --git a/docs/index.md b/docs/index.md index b40710e45e..faf0b0c667 100644 --- a/docs/index.md +++ b/docs/index.md @@ -57,7 +57,7 @@ const {default: Form} = JSONSchemaForm; import React, { Component } from "react"; import { render } from "react-dom"; -import Form from "react-jsonschema-form"; +import Form from "@rjsf/core"; const schema = { title: "Todo", diff --git a/docs/theme-customization.md b/docs/theme-customization.md index 7bdb1f6b75..fceb9c81c1 100644 --- a/docs/theme-customization.md +++ b/docs/theme-customization.md @@ -7,10 +7,11 @@ The `withTheme` component provides an easy way to extend the functionality of re ```jsx import React, { Component } from 'react'; -import { withTheme } from 'react-jsonschema-form'; -import Bootstrap4Theme from 'react-jsonschema-form-theme-bs4'; +import { withTheme } from '@rjsf/core'; -const ThemedForm = withTheme(Bootstrap4Theme); +const theme = { widgets: {test: () =>
test
} }; + +const ThemedForm = withTheme(theme); class Demo extends Component { render() { return diff --git a/netlify.toml b/netlify.toml index 0e0eab8766..6f12bcf10a 100644 --- a/netlify.toml +++ b/netlify.toml @@ -1,7 +1,7 @@ [build] - base = "packages/playground" - publish = "build" - command = "npm run build:playground" + base = "" + publish = "packages/playground/build" + command = "npm run bootstrap && npm run build" [build.environment] SHOW_NETLIFY_BADGE = "true" diff --git a/package.json b/package.json index 106db8006a..60a9134882 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,8 @@ "lint": "lerna run lint", "cs-check": "lerna run cs-check", "cs-format": "lerna run cs-format", - "dist": "lerna run dist" + "build": "lerna run --stream build", + "start": "lerna run start --stream --parallel" }, "dependencies": { "prettier": "^1.18.2", diff --git a/packages/core/.babelrc b/packages/core/.babelrc deleted file mode 100644 index 0d11e9ccbb..0000000000 --- a/packages/core/.babelrc +++ /dev/null @@ -1,23 +0,0 @@ -{ - "presets": [ - "@babel/preset-react", - "@babel/preset-env" - ], - "plugins": [ - "@babel/plugin-proposal-object-rest-spread", - "@babel/plugin-proposal-class-properties", - [ - "@babel/plugin-transform-runtime", - { - "corejs": 2 - } - ] - ], - "env": { - "development": { - "plugins": [ - "@babel/plugin-transform-react-jsx" - ] - } - } -} diff --git a/packages/core/babel.config.js b/packages/core/babel.config.js new file mode 100644 index 0000000000..fa91642aeb --- /dev/null +++ b/packages/core/babel.config.js @@ -0,0 +1,44 @@ +const BABEL_ENV = process.env.BABEL_ENV; + +const defaultPlugins = [ + '@babel/plugin-proposal-class-properties', + '@babel/plugin-proposal-object-rest-spread', + '@babel/plugin-proposal-optional-chaining', + // IE 11 support + '@babel/plugin-transform-object-assign' +]; + +module.exports = { + presets: [ + [ + "@babel/preset-env", + { + modules: ["cjs", "test"].includes(BABEL_ENV) ? "commonjs" : false, + targets: + BABEL_ENV === "test" ? { node: "current" } : { browsers: "defaults" }, + }, + ], + "@babel/preset-react", + ], + env: { + cjs: { + plugins: defaultPlugins, + ignore: ['test/**/*.js'] + }, + umd: { + plugins: defaultPlugins, + ignore: ['test/**/*.js'] + }, + es: { + plugins: [ + ...defaultPlugins, + ['@babel/plugin-transform-runtime', { useESModules: true, corejs: 2 }] + ], + ignore: ['test/**/*.js'] + }, + test: { + plugins: defaultPlugins, + ignore: [] + } + }, +}; diff --git a/packages/core/devServer.js b/packages/core/devServer.js deleted file mode 100644 index 032a8a401b..0000000000 --- a/packages/core/devServer.js +++ /dev/null @@ -1,37 +0,0 @@ -const path = require("path"); -const express = require("express"); -const webpack = require("webpack"); - -const server = process.env.RJSF_DEV_SERVER || "localhost:8080"; -const splitServer = server.split(":"); -const host = splitServer[0]; -const port = splitServer[1]; -const env = "dev"; - -const webpackConfig = require("./webpack.config." + env); -const compiler = webpack(webpackConfig); -const app = express(); - -app.use(require("webpack-dev-middleware")(compiler, { - publicPath: webpackConfig.output.publicPath, - noInfo: true -})); - -app.use(require("webpack-hot-middleware")(compiler)); - -app.get("/favicon.ico", function(req, res) { - res.status(204).end(); -}); - -app.get("/", function(req, res) { - res.sendFile(path.join(__dirname, "playground", "index.html")); -}); - -app.listen(port, host, function(err) { - if (err) { - console.log(err); - return; - } - - console.log(`Listening at http://${server}`); -}); diff --git a/packages/core/index.d.ts b/packages/core/index.d.ts new file mode 100644 index 0000000000..913e8bdda3 --- /dev/null +++ b/packages/core/index.d.ts @@ -0,0 +1,436 @@ +// Originally from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/@rjsf/core/index.d.ts + +declare module '@rjsf/core' { + import * as React from 'react'; + import { JSONSchema6, JSONSchema6Type } from 'json-schema'; + + type ErrorSchema = { + [k: string]: ErrorSchema; + }; + + export interface FormProps { + schema: JSONSchema6; + disabled?: boolean; + uiSchema?: UiSchema; + formData?: T; + formContext?: any; + widgets?: { [name: string]: Widget }; + fields?: { [name: string]: Field }; + noValidate?: boolean; + noHtml5Validate?: boolean; + showErrorList?: boolean; + ErrorList?: React.StatelessComponent; + validate?: (formData: T, errors: FormValidation) => FormValidation; + onBlur?: (id: string, value: boolean | number | string | null) => void; + onChange?: (e: IChangeEvent, es?: ErrorSchema) => any; + onError?: (e: any) => any; + onSubmit?: (e: ISubmitEvent) => any; + liveValidate?: boolean; + FieldTemplate?: React.StatelessComponent; + ArrayFieldTemplate?: React.StatelessComponent; + ObjectFieldTemplate?: React.StatelessComponent; + safeRenderCompletion?: boolean; + transformErrors?: (errors: AjvError[]) => AjvError[]; + idPrefix?: string; + additionalMetaSchemas?: ReadonlyArray; + customFormats?: { [k: string]: string | RegExp | ((data: string) => boolean) }; + // HTML Attributes + id?: string; + className?: string; + name?: string; + method?: string; + target?: string; + action?: string; + autocomplete?: string; + enctype?: string; + acceptcharset?: string; + omitExtraData?: boolean; + liveOmit?: boolean; + tagName?: keyof JSX.IntrinsicElements | React.ComponentType; + } + + export default class Form extends React.Component> { + validate: ( + formData: T, + schema?: FormProps['schema'], + additionalMetaSchemas?: FormProps['additionalMetaSchemas'], + customFormats?: FormProps['customFormats'], + ) => { errors: AjvError[]; errorSchema: ErrorSchema }; + onChange: (formData: T, newErrorSchema: ErrorSchema) => void; + onBlur: (id: string, value: boolean | number | string | null) => void; + submit: () => void; + } + + export type UiSchema = { + 'ui:field'?: Field | string; + 'ui:widget'?: Widget | string; + 'ui:options'?: { [key: string]: boolean | number | string | object | any[] | null }; + 'ui:order'?: string[]; + 'ui:FieldTemplate'?: React.StatelessComponent; + 'ui:ArrayFieldTemplate'?: React.StatelessComponent; + 'ui:ObjectFieldTemplate'?: React.StatelessComponent; + [name: string]: any; + }; + + export type FieldId = { + $id: string; + }; + + export type IdSchema = { + [key in keyof T]: IdSchema; + } & + FieldId; + + export type FieldPath = { + $name: string; + }; + + export type PathSchema = { + [key in keyof T]: PathSchema; + } & + FieldPath; + + export interface WidgetProps + extends Pick< + React.HTMLAttributes, + Exclude, 'onBlur' | 'onFocus'> + > { + id: string; + schema: JSONSchema6; + value: any; + required: boolean; + disabled: boolean; + readonly: boolean; + autofocus: boolean; + onChange: (value: any) => void; + options: { [key: string]: boolean | number | string | object | null }; + formContext: any; + onBlur: (id: string, value: boolean | number | string | null) => void; + onFocus: (id: string, value: boolean | number | string | null) => void; + label: string; + multiple: boolean; + } + + export type Widget = React.StatelessComponent | React.ComponentClass; + + export interface FieldProps + extends Pick, Exclude, 'onBlur'>> { + schema: JSONSchema6; + uiSchema: UiSchema; + idSchema: IdSchema; + formData: T; + errorSchema: ErrorSchema; + onChange: (e: IChangeEvent | any, es?: ErrorSchema) => any; + onBlur: (id: string, value: boolean | number | string | null) => void; + registry: { + fields: { [name: string]: Field }; + widgets: { [name: string]: Widget }; + definitions: { [name: string]: any }; + formContext: any; + }; + formContext: any; + autofocus: boolean; + disabled: boolean; + readonly: boolean; + required: boolean; + name: string; + [prop: string]: any; + } + + export type Field = React.StatelessComponent | React.ComponentClass; + + export type FieldTemplateProps = { + id: string; + classNames: string; + label: string; + description: React.ReactElement; + rawDescription: string; + children: React.ReactElement; + errors: React.ReactElement; + rawErrors: string[]; + help: React.ReactElement; + rawHelp: string; + hidden: boolean; + required: boolean; + readonly: boolean; + disabled: boolean; + displayLabel: boolean; + fields: Field[]; + schema: JSONSchema6; + uiSchema: UiSchema; + formContext: any; + }; + + export type ArrayFieldTemplateProps = { + DescriptionField: React.StatelessComponent<{ id: string; description: string | React.ReactElement }>; + TitleField: React.StatelessComponent<{ id: string; title: string; required: boolean }>; + canAdd: boolean; + className: string; + disabled: boolean; + idSchema: IdSchema; + items: { + children: React.ReactElement; + className: string; + disabled: boolean; + hasMoveDown: boolean; + hasMoveUp: boolean; + hasRemove: boolean; + hasToolbar: boolean; + index: number; + onDropIndexClick: (index: number) => (event: any) => void; + onReorderClick: (index: number, newIndex: number) => (event: any) => void; + readonly: boolean; + key: string; + }[]; + onAddClick: (event: any) => (event: any) => void; + readonly: boolean; + required: boolean; + schema: JSONSchema6; + uiSchema: UiSchema; + title: string; + formContext: any; + formData: T; + registry: FieldProps['registry']; + }; + + export type ObjectFieldTemplateProps = { + DescriptionField: React.StatelessComponent<{ id: string; description: string | React.ReactElement }>; + TitleField: React.StatelessComponent<{ id: string; title: string; required: boolean }>; + title: string; + description: string; + properties: { + content: React.ReactElement; + name: string; + disabled: boolean; + readonly: boolean; + }[]; + required: boolean; + schema: JSONSchema6; + uiSchema: UiSchema; + idSchema: IdSchema; + formData: T; + formContext: any; + }; + + export type AjvError = { + message: string; + name: string; + params: any; + property: string; + stack: string; + }; + + export type ErrorListProps = { + errorSchema: FormValidation; + errors: AjvError[]; + formContext: any; + schema: JSONSchema6; + uiSchema: UiSchema; + }; + + export interface IChangeEvent { + edit: boolean; + formData: T; + errors: AjvError[]; + errorSchema: FormValidation; + idSchema: IdSchema; + schema: JSONSchema6; + uiSchema: UiSchema; + status?: string; + } + + export type ISubmitEvent = IChangeEvent; + + export type FieldError = string; + + type FieldValidation = { + __errors: FieldError[]; + addError: (message: string) => void; + }; + + type FormValidation = FieldValidation & { + [fieldName: string]: FieldValidation; + }; + + type FormSubmit = { + formData: T; + }; + + export type ThemeProps = Omit, 'schema'>; + + export function withTheme( + themeProps: ThemeProps, + ): React.ComponentClass> | React.StatelessComponent>; + + export type AddButtonProps = { + className: string; + onClick: (e: React.MouseEvent) => void; + disabled: boolean; + }; +} + +declare module '@rjsf/core/lib/components/fields/SchemaField' { + import { JSONSchema6 } from 'json-schema'; + import { FieldProps, UiSchema, IdSchema, FormValidation } from '@rjsf/core'; + + export type SchemaFieldProps = Pick< + FieldProps, + 'schema' | 'uiSchema' | 'idSchema' | 'formData' | 'errorSchema' | 'registry' | 'formContext' + >; + + export default class SchemaField extends React.Component {} +} + +declare module '@rjsf/core/lib/utils' { + import { JSONSchema6, JSONSchema6Definition, JSONSchema6Type, JSONSchema6TypeName } from 'json-schema'; + import { FieldProps, UiSchema, IdSchema, PathSchema, Widget } from '@rjsf/core'; + + export const ADDITIONAL_PROPERTY_FLAG: string; + + export function getDefaultRegistry(): FieldProps['registry']; + + export function getSchemaType(schema: JSONSchema6): string; + + export function getWidget( + schema: JSONSchema6, + widget: Widget, + registeredWidgets?: { [name: string]: Widget }, + ): Widget | Error; + + export function hasWidget( + schema: JSONSchema6, + widget: Widget, + registeredWidgets?: { [name: string]: Widget }, + ): boolean; + + export function computeDefaults( + schema: JSONSchema6, + parentDefaults: JSONSchema6['default'][], + definitions: FieldProps['registry']['definitions'], + rawFormData?: T, + includeUndefinedValues?: boolean, + ): JSONSchema6['default'][]; + + export function getDefaultFormState( + schema: JSONSchema6, + formData: T, + definitions?: FieldProps['registry']['definitions'], + includeUndefinedValues?: boolean, + ): T | JSONSchema6['default'][]; + + export function getUiOptions(uiSchema: UiSchema): UiSchema['ui:options']; + + export function isObject(thing: any): boolean; + + export function mergeObjects(obj1: object, obj2: object, concatArrays?: boolean): object; + + export function asNumber(value: string | null): number | string | undefined | null; + + export function orderProperties(properties: [], order: []): []; + + export function isConstant(schema: JSONSchema6): boolean; + + export function toConstant(schema: JSONSchema6): JSONSchema6Type | JSONSchema6['const'] | Error; + + export function isSelect(_schema: JSONSchema6, definitions?: FieldProps['registry']['definitions']): boolean; + + export function isMultiSelect(schema: JSONSchema6, definitions?: FieldProps['registry']['definitions']): boolean; + + export function isFilesArray( + schema: JSONSchema6, + uiSchema: UiSchema, + definitions?: FieldProps['registry']['definitions'], + ): boolean; + + export function isFixedItems(schema: JSONSchema6): boolean; + + export function allowAdditionalItems(schema: JSONSchema6): boolean; + + export function optionsList(schema: JSONSchema6): { label: string; value: string }[]; + + export function guessType(value: any): JSONSchema6TypeName; + + export function stubExistingAdditionalProperties( + schema: JSONSchema6, + definitions?: FieldProps['registry']['definitions'], + formData?: T, + ): JSONSchema6; + + export function resolveSchema( + schema: JSONSchema6Definition, + definitions?: FieldProps['registry']['definitions'], + formData?: T, + ): JSONSchema6; + + export function retrieveSchema( + schema: JSONSchema6Definition, + definitions?: FieldProps['registry']['definitions'], + formData?: T, + ): JSONSchema6; + + export function deepEquals(a: T, b: T): boolean; + + export function shouldRender(comp: React.Component, nextProps: any, nextState: any): boolean; + + export function toIdSchema( + schema: JSONSchema6Definition, + id: string, + definitions: FieldProps['registry']['definitions'], + formData?: T, + idPredix?: string, + ): IdSchema | IdSchema[]; + + export function toPathSchema( + schema: JSONSchema6Definition, + name: string | undefined, + definitions: FieldProps['registry']['definitions'], + formData?: T, + ): PathSchema | PathSchema[]; + + export interface DateObject { + year: number; + month: number; + day: number; + hour: number; + minute: number; + second: number; + } + + export function parseDateString(dateString: string, includeTime?: boolean): DateObject; + + export function toDateString(dateObject: DateObject, time?: boolean): string; + + export function pad(num: number, size: number): string; + + export function setState(instance: React.Component, state: any, callback: Function): void; + + export function dataURItoBlob(dataURI: string): { name: string; blob: Blob }; + + export interface IRangeSpec { + min?: number; + max?: number; + step?: number; + } + + export function rangeSpec(schema: JSONSchema6): IRangeSpec; + + export function getMatchingOption( + formData: any, + options: JSONSchema6[], + definitions: FieldProps['registry']['definitions'], + ): number; +} + +declare module '@rjsf/core/lib/validate' { + import { JSONSchema6Definition } from 'json-schema'; + import { AjvError, ErrorSchema, FormProps } from '@rjsf/core'; + + export default function validateFormData( + formData: T, + schema: JSONSchema6Definition, + customValidate?: FormProps['validate'], + transformErrors?: FormProps['transformErrors'], + additionalMetaSchemas?: FormProps['additionalMetaSchemas'], + customFormats?: FormProps['customFormats'], + ): { errors: AjvError[]; errorSchema: ErrorSchema }; +} \ No newline at end of file diff --git a/packages/core/netlify.toml b/packages/core/netlify.toml deleted file mode 100644 index 5efd3d1543..0000000000 --- a/packages/core/netlify.toml +++ /dev/null @@ -1,2 +0,0 @@ -[build.environment] - SHOW_NETLIFY_BADGE = "true" diff --git a/packages/core/package-lock.json b/packages/core/package-lock.json index 80c48b4e1f..53f704635b 100644 --- a/packages/core/package-lock.json +++ b/packages/core/package-lock.json @@ -1904,6 +1904,24 @@ "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" } }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz", + "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "dev": true + } + } + }, "@babel/plugin-proposal-unicode-property-regex": { "version": "7.4.4", "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", @@ -1997,6 +2015,23 @@ "@babel/helper-plugin-utils": "^7.0.0" } }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "dev": true + } + } + }, "@babel/plugin-transform-arrow-functions": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", @@ -2269,6 +2304,23 @@ "@babel/helper-plugin-utils": "^7.0.0" } }, + "@babel/plugin-transform-object-assign": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-assign/-/plugin-transform-object-assign-7.8.3.tgz", + "integrity": "sha512-i3LuN8tPDqUCRFu3dkzF2r1Nx0jp4scxtm7JxtIqI9he9Vk20YD+/zshdzR9JLsoBMlJlNR82a62vQExNEVx/Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "dependencies": { + "@babel/helper-plugin-utils": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz", + "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==", + "dev": true + } + } + }, "@babel/plugin-transform-object-super": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", @@ -2744,33 +2796,27 @@ } } }, - "@babel/runtime": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.8.4.tgz", - "integrity": "sha512-neAp3zt80trRVBI1x0azq6c57aNBqYZH8KhMm3TaB7wEI5Q4A2SHfBHE8w9gOhI/lrqxtEbXZgQIrHP+wvSGwQ==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.2" - } - }, "@babel/runtime-corejs2": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.4.5.tgz", - "integrity": "sha512-5yLuwzvIDecKwYMzJtiarky4Fb5643H3Ao5jwX0HrMR5oM5mn2iHH9wSZonxwNK0oAjAFUQAiOd4jT7/9Y2jMQ==", + "version": "7.8.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.8.7.tgz", + "integrity": "sha512-R8zbPiv25S0pGfMqAr55dRRxWB8vUeo3wicI4g9PFVBKmsy/9wmQUV1AaYW/kxRHUhx42TTh6F0+QO+4pwfYWg==", + "dev": true, "requires": { "core-js": "^2.6.5", - "regenerator-runtime": "^0.13.2" + "regenerator-runtime": "^0.13.4" }, "dependencies": { "core-js": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.9.tgz", - "integrity": "sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A==" + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "dev": true }, "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==" + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.4.tgz", + "integrity": "sha512-plpwicqEzfEyTQohIKktWigcLzmNStMGwbOUbykx51/29Z3JOGYldaaNGK7ngNXV+UcoqvIMmloZ48Sr74sd+g==", + "dev": true } } }, @@ -2850,84 +2896,6 @@ } } }, - "@emotion/hash": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.7.4.tgz", - "integrity": "sha512-fxfMSBMX3tlIbKUdtGKxqB1fyrH6gVrX39Gsv3y8lRYKUqlgDt3UMqQyGnR1bQMa2B8aGnhLZokZgg8vT0Le+A==", - "dev": true - }, - "@material-ui/core": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/@material-ui/core/-/core-4.9.4.tgz", - "integrity": "sha512-1wqm3jBC8mGpVHu0wVOYBX7LUzkPsWxkkTtKSn0Hz66T6TDJkke72mkSIL7akNdjnxy+bRc2Vi6NiJ4YutkDcw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.4.4", - "@material-ui/styles": "^4.9.0", - "@material-ui/system": "^4.9.3", - "@material-ui/types": "^5.0.0", - "@material-ui/utils": "^4.7.1", - "@types/react-transition-group": "^4.2.0", - "clsx": "^1.0.2", - "hoist-non-react-statics": "^3.3.2", - "popper.js": "^1.14.1", - "prop-types": "^15.7.2", - "react-is": "^16.8.0", - "react-transition-group": "^4.3.0" - } - }, - "@material-ui/styles": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@material-ui/styles/-/styles-4.9.0.tgz", - "integrity": "sha512-nJHum4RqYBPWsjL/9JET8Z02FZ9gSizlg/7LWVFpIthNzpK6OQ5OSRR4T4x9/p+wK3t1qNn3b1uI4XpnZaPxOA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.4.4", - "@emotion/hash": "^0.7.4", - "@material-ui/types": "^5.0.0", - "@material-ui/utils": "^4.7.1", - "clsx": "^1.0.2", - "csstype": "^2.5.2", - "hoist-non-react-statics": "^3.2.1", - "jss": "^10.0.3", - "jss-plugin-camel-case": "^10.0.3", - "jss-plugin-default-unit": "^10.0.3", - "jss-plugin-global": "^10.0.3", - "jss-plugin-nested": "^10.0.3", - "jss-plugin-props-sort": "^10.0.3", - "jss-plugin-rule-value-function": "^10.0.3", - "jss-plugin-vendor-prefixer": "^10.0.3", - "prop-types": "^15.7.2" - } - }, - "@material-ui/system": { - "version": "4.9.3", - "resolved": "https://registry.npmjs.org/@material-ui/system/-/system-4.9.3.tgz", - "integrity": "sha512-DBGsTKYrLlFpHG8BUp0X6ZpvaOzef+GhSwn/8DwVTXUdHitphaPQoL9xucrI8X9MTBo//El+7nylko7lo7eJIw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.4.4", - "@material-ui/utils": "^4.7.1", - "prop-types": "^15.7.2" - } - }, - "@material-ui/types": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@material-ui/types/-/types-5.0.0.tgz", - "integrity": "sha512-UeH2BuKkwDndtMSS0qgx1kCzSMw+ydtj0xx/XbFtxNSTlXydKwzs5gVW5ZKsFlAkwoOOQ9TIsyoCC8hq18tOwg==", - "dev": true - }, - "@material-ui/utils": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/@material-ui/utils/-/utils-4.7.1.tgz", - "integrity": "sha512-+ux0SlLdlehvzCk2zdQ3KiS3/ylWvuo/JwAGhvb8dFVvwR21K28z0PU9OQW2PGogrMEdvX3miEI5tGxTwwWiwQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.4.4", - "prop-types": "^15.7.2", - "react-is": "^16.8.0" - } - }, "@nodelib/fs.scandir": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", @@ -2954,29 +2922,6 @@ "fastq": "^1.6.0" } }, - "@rjsf/playground": { - "version": "2.0.0-alpha.2.2", - "resolved": "https://registry.npmjs.org/@rjsf/playground/-/playground-2.0.0-alpha.2.2.tgz", - "integrity": "sha512-cCIQdN2dtjXbbAiG3mKavRsQWYsDH1E3fygA/Ej4IZzPdpGerNWqQUVEpxrw9179cGC/cht7JqXKTtyrtFozow==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.4.5", - "@material-ui/core": "^4.9.4", - "ajv": "^6.7.0", - "core-js": "^2.5.7", - "json-schema-merge-allof": "^0.6.0", - "jss": "^10.0.3", - "lodash": "^4.17.15", - "prop-types": "^15.7.2", - "react-app-polyfill": "^1.0.4", - "react-bootstrap": "^0.33.1", - "react-frame-component": "^4.1.1", - "react-is": "^16.9.0", - "react-jsonschema-form": "^2.0.0-alpha.1", - "rjsf-material-ui": "^0.3.9", - "shortid": "^2.2.14" - } - }, "@samverschueren/stream-to-observable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", @@ -3053,6 +2998,11 @@ "@types/node": "*" } }, + "@types/json-schema": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.4.tgz", + "integrity": "sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA==" + }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -3081,15 +3031,6 @@ "csstype": "^2.2.0" } }, - "@types/react-transition-group": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@types/react-transition-group/-/react-transition-group-4.2.4.tgz", - "integrity": "sha512-8DMUaDqh0S70TjkqU0DxOu80tFUiiaS9rxkWip/nb7gtvAsbqOXm02UCmR8zdcjWujgeYPiPNTVpVpKzUDotwA==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, "@types/tapable": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@types/tapable/-/tapable-1.0.4.tgz", @@ -4198,6 +4139,12 @@ "integrity": "sha1-r6uWJikQp/M8GaV3WCXGnzTjUMo=", "dev": true }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, "caniuse-api": { "version": "1.6.1", "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-1.6.1.tgz", @@ -4327,12 +4274,6 @@ } } }, - "classnames": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.6.tgz", - "integrity": "sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==", - "dev": true - }, "clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -4392,18 +4333,77 @@ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=", "dev": true }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + } + } + }, "clone": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=", "dev": true }, - "clsx": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.1.0.tgz", - "integrity": "sha512-3avwM37fSK5oP6M5rQ9CNe99lwxhXDOeSWVPAOYF6OazUTgZCMb0yWlJpmdD74REy1gkEaFiub2ULv4fq9GUhA==", - "dev": true - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -4568,6 +4568,104 @@ "typedarray": "^0.0.6" } }, + "concurrently": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-5.1.0.tgz", + "integrity": "sha512-9ViZMu3OOCID3rBgU31mjBftro2chOop0G2u1olq1OuwRBVRw/GxHTg80TVJBUTJfoswMmEUeuOg1g1yu1X2dA==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "date-fns": "^2.0.1", + "lodash": "^4.17.15", + "read-pkg": "^4.0.1", + "rxjs": "^6.5.2", + "spawn-command": "^0.0.2-1", + "supports-color": "^6.1.0", + "tree-kill": "^1.2.2", + "yargs": "^13.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "date-fns": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.10.0.tgz", + "integrity": "sha512-EhfEKevYGWhWlZbNeplfhIU/+N+x0iCIx7VzKlXma2EdQyznVlZhCptXUY+BegNpPW2kjdx15Rvq503YcXXrcA==", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=", + "dev": true, + "requires": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + } + }, + "supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, "console-browserify": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.1.0.tgz", @@ -4872,16 +4970,6 @@ "fastparse": "^1.1.1" } }, - "css-vendor": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/css-vendor/-/css-vendor-2.0.7.tgz", - "integrity": "sha512-VS9Rjt79+p7M0WkPqcAza4Yq1ZHrsHrwf7hPL/bjQB+c1lwmAI+1FXxYTYt818D/50fFVflw0XKleiBN5RITkg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.6.2", - "is-in-browser": "^1.0.2" - } - }, "cssesc": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-0.1.0.tgz", @@ -5197,24 +5285,6 @@ "esutils": "^2.0.2" } }, - "dom-helpers": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-5.1.3.tgz", - "integrity": "sha512-nZD1OtwfWGRBWlpANxacBEZrEuLa16o1nh7YopFWeoF68Zt8GGEmzHu6Xv4F3XaFIC+YXtTLrzgqKxFgLEe4jw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.6.3", - "csstype": "^2.6.7" - }, - "dependencies": { - "csstype": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.9.tgz", - "integrity": "sha512-xz39Sb4+OaTsULgUERcCk+TJj8ylkL4aSVDQiX/ksxbELSqwkgt4d4RD7fovIdgJGSuNYqwZEiVjYY5l0ask+Q==", - "dev": true - } - } - }, "dom-walk": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", @@ -7175,15 +7245,6 @@ "minimalistic-crypto-utils": "^1.0.1" } }, - "hoist-non-react-statics": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", - "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", - "dev": true, - "requires": { - "react-is": "^16.7.0" - } - }, "hosted-git-info": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", @@ -7260,12 +7321,6 @@ } } }, - "hyphenate-style-name": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz", - "integrity": "sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ==", - "dev": true - }, "iconv-lite": { "version": "0.4.23", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", @@ -7658,12 +7713,6 @@ "is-extglob": "^2.1.1" } }, - "is-in-browser": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/is-in-browser/-/is-in-browser-1.1.3.tgz", - "integrity": "sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU=", - "dev": true - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -7984,91 +8033,6 @@ "verror": "1.10.0" } }, - "jss": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/jss/-/jss-10.0.4.tgz", - "integrity": "sha512-GqHmeDK83qbqMAVjxyPfN1qJVTKZne533a9bdCrllZukUM8npG/k+JumEPI86IIB5ifaZAHG2HAsUziyxOiooQ==", - "dev": true, - "requires": { - "@babel/runtime": "^7.3.1", - "csstype": "^2.6.5", - "is-in-browser": "^1.1.3", - "tiny-warning": "^1.0.2" - } - }, - "jss-plugin-camel-case": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.4.tgz", - "integrity": "sha512-+wnqxJsyfUnOn0LxVg3GgZBSjfBCrjxwx7LFxwVTUih0ceGaXKZoieheNOaTo5EM4w8bt1nbb8XonpQCj67C6A==", - "dev": true, - "requires": { - "@babel/runtime": "^7.3.1", - "hyphenate-style-name": "^1.0.3", - "jss": "10.0.4" - } - }, - "jss-plugin-default-unit": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.4.tgz", - "integrity": "sha512-T0mhL/Ogp/quvod/jAHEqKvptLDxq7Cj3a+7zRuqK8HxUYkftptN89wJElZC3rshhNKiogkEYhCWenpJdFvTBg==", - "dev": true, - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.4" - } - }, - "jss-plugin-global": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/jss-plugin-global/-/jss-plugin-global-10.0.4.tgz", - "integrity": "sha512-N8n9/GHENZce+sqE4UYiZiJtI+t+erT/BypHOrNYAfIoNEj7OYsOEKfIo2P0GpLB3QyDAYf5eo9XNdZ8veEkUA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.4" - } - }, - "jss-plugin-nested": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/jss-plugin-nested/-/jss-plugin-nested-10.0.4.tgz", - "integrity": "sha512-QM21BKVt8LDeoRfowvAMh/s+/89VYrreIIE6ch4pvw0oAXDWw1iorUPlqLZ7uCO3UL0uFtQhJq3QMLN6Lr1v0A==", - "dev": true, - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.4", - "tiny-warning": "^1.0.2" - } - }, - "jss-plugin-props-sort": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.4.tgz", - "integrity": "sha512-WoETdOCjGskuin/OMt2uEdDPLZF3vfQuHXF+XUHGJrq0BAapoyGQDcv37SeReDlkRAbVXkEZPsIMvYrgHSHFiA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.4" - } - }, - "jss-plugin-rule-value-function": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.4.tgz", - "integrity": "sha512-0hrzOSWRF5ABJGaHrlnHbYZjU877Ofzfh2id3uLtBvemGQLHI+ldoL8/+6iPSRa7M8z8Ngfg2vfYhKjUA5gA0g==", - "dev": true, - "requires": { - "@babel/runtime": "^7.3.1", - "jss": "10.0.4" - } - }, - "jss-plugin-vendor-prefixer": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.4.tgz", - "integrity": "sha512-4JgEbcrdeMda1qvxTm1CnxFJAWVV++VLpP46HNTrfH7VhVlvUpihnUNs2gAlKuRT/XSBuiWeLAkrTqF4NVrPig==", - "dev": true, - "requires": { - "@babel/runtime": "^7.3.1", - "css-vendor": "^2.0.7", - "jss": "10.0.4" - } - }, "jsx-ast-utils": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz", @@ -8081,12 +8045,6 @@ "integrity": "sha512-FrLwOgm+iXrPV+5zDU6Jqu4gCRXbWEQg2O3SKONsWE4w7AXFRkryS53bpWdaL9cNol+AmR3AEYz6kn+o0fCPnw==", "dev": true }, - "keycode": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/keycode/-/keycode-2.2.0.tgz", - "integrity": "sha1-PQr1bce4uOXLqNCpfxByBO7CKwQ=", - "dev": true - }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", @@ -10797,12 +10755,6 @@ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", "dev": true }, - "popper.js": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", - "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", - "dev": true - }, "posix-character-classes": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", @@ -11491,27 +11443,6 @@ } } }, - "prop-types-extra": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/prop-types-extra/-/prop-types-extra-1.1.1.tgz", - "integrity": "sha512-59+AHNnHYCdiC+vMwY52WmvP5dM3QLeoumYuEyceQDi9aEhtwN9zIQ2ZNo25sMyXnbh32h+P1ezDsUpUH3JAew==", - "dev": true, - "requires": { - "react-is": "^16.3.2", - "warning": "^4.0.0" - }, - "dependencies": { - "warning": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", - "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - } - } - }, "proxy-addr": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", @@ -11776,58 +11707,6 @@ } } }, - "react-bootstrap": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/react-bootstrap/-/react-bootstrap-0.33.1.tgz", - "integrity": "sha512-qWTRravSds87P8WC82tETy2yIso8qDqlIm0czsrduCaYAFtHuyLu0XDbUlfLXeRzqgwm5sRk2wRaTNoiVkk/YQ==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.0.0", - "classnames": "^2.2.5", - "dom-helpers": "^3.2.0", - "invariant": "^2.2.4", - "keycode": "^2.2.0", - "prop-types": "^15.6.1", - "prop-types-extra": "^1.0.1", - "react-overlays": "^0.9.0", - "react-prop-types": "^0.4.0", - "react-transition-group": "^2.0.0", - "uncontrollable": "^7.0.2", - "warning": "^3.0.0" - }, - "dependencies": { - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "dev": true, - "requires": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - } - } - } - }, "react-codemirror2": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/react-codemirror2/-/react-codemirror2-4.3.0.tgz", @@ -11876,38 +11755,11 @@ } } }, - "react-frame-component": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/react-frame-component/-/react-frame-component-4.1.1.tgz", - "integrity": "sha512-NfJp90AvYA1R6+uSYafQ+n+UM2HjHqi4WGHeprVXa6quU9d8o6ZFRzQ36uemY82dlkZFzf2jigFx6E4UzNFajA==", - "dev": true - }, "react-is": { "version": "16.9.0", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==" }, - "react-jsonschema-form": { - "version": "2.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/react-jsonschema-form/-/react-jsonschema-form-2.0.0-alpha.1.tgz", - "integrity": "sha512-AYpV2/dKMSNwddzrBCJjuGdbZ5jd6mD17f3tq3dzWXiK1lwb0H485u80VlKuiyvTosaMjwWtyvXhO7jXtUu7oA==", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.4.5", - "ajv": "^6.7.0", - "core-js": "^2.5.7", - "lodash": "^4.17.15", - "prop-types": "^15.7.2", - "react-is": "^16.9.0", - "shortid": "^2.2.14" - } - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", - "dev": true - }, "react-monaco-editor": { "version": "0.26.2", "resolved": "https://registry.npmjs.org/react-monaco-editor/-/react-monaco-editor-0.26.2.tgz", @@ -11941,52 +11793,6 @@ } } }, - "react-overlays": { - "version": "0.9.1", - "resolved": "https://registry.npmjs.org/react-overlays/-/react-overlays-0.9.1.tgz", - "integrity": "sha512-b0asy/zHtRd0i2+2/uNxe3YVprF3bRT1guyr791DORjCzE/HSBMog+ul83CdtKQ1kZ+pLnxWCu5W3BMysFhHdQ==", - "dev": true, - "requires": { - "classnames": "^2.2.5", - "dom-helpers": "^3.2.1", - "prop-types": "^15.5.10", - "prop-types-extra": "^1.0.1", - "react-transition-group": "^2.2.1", - "warning": "^3.0.0" - }, - "dependencies": { - "dom-helpers": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/dom-helpers/-/dom-helpers-3.4.0.tgz", - "integrity": "sha512-LnuPJ+dwqKDIyotW1VzmOZ5TONUN7CwkCR5hrgawTUbkBGYdeoNLZo6nNfGkCrjtE1nXXaj7iMMpDa8/d9WoIA==", - "dev": true, - "requires": { - "@babel/runtime": "^7.1.2" - } - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - }, - "react-transition-group": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-2.9.0.tgz", - "integrity": "sha512-+HzNTCHpeQyl4MJ/bdE0u6XRMe9+XG/+aL4mCxVN4DnPBQ0/5bfHWPDuOZUzYdMj94daZaZdCCc1Dzt9R/xSSg==", - "dev": true, - "requires": { - "dom-helpers": "^3.4.0", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2", - "react-lifecycles-compat": "^3.0.4" - } - } - } - }, "react-portal": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/react-portal/-/react-portal-4.2.0.tgz", @@ -11996,15 +11802,6 @@ "prop-types": "^15.5.8" } }, - "react-prop-types": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/react-prop-types/-/react-prop-types-0.4.0.tgz", - "integrity": "sha1-+ZsL+0AGkpya8gUefBQUpcdbk9A=", - "dev": true, - "requires": { - "warning": "^3.0.0" - } - }, "react-proxy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/react-proxy/-/react-proxy-1.1.8.tgz", @@ -12031,29 +11828,6 @@ "react-proxy": "^1.1.7" } }, - "react-transition-group": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.3.0.tgz", - "integrity": "sha512-1qRV1ZuVSdxPlPf4O8t7inxUGpdyO5zG9IoNfJxSO0ImU2A1YWkEQvFPuIPZmMLkg5hYs7vv5mMOyfgSkvAwvw==", - "dev": true, - "requires": { - "@babel/runtime": "^7.5.5", - "dom-helpers": "^5.0.1", - "loose-envify": "^1.4.0", - "prop-types": "^15.6.2" - }, - "dependencies": { - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" - } - } - } - }, "read-pkg": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", @@ -12373,12 +12147,6 @@ "inherits": "^2.0.1" } }, - "rjsf-material-ui": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/rjsf-material-ui/-/rjsf-material-ui-0.3.9.tgz", - "integrity": "sha512-DARQdyHCO/7WG1Pxs2f0V5Yx2tTtktOaxExZPdcL8II3oQsrZEMTmSUCFbzT860to2UNCWkbrIsrHnMJH/O98g==", - "dev": true - }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", @@ -12813,6 +12581,12 @@ } } }, + "spawn-command": { + "version": "0.0.2-1", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2-1.tgz", + "integrity": "sha1-YvXpRmmBwbeW3Fkpk34RycaSG9A=", + "dev": true + }, "spdx-correct": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", @@ -13241,12 +13015,6 @@ "setimmediate": "^1.0.4" } }, - "tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "dev": true - }, "tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -13325,6 +13093,12 @@ "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", "dev": true }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -13484,30 +13258,6 @@ } } }, - "uncontrollable": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/uncontrollable/-/uncontrollable-7.1.1.tgz", - "integrity": "sha512-EcPYhot3uWTS3w00R32R2+vS8Vr53tttrvMj/yA1uYRhf8hbTG2GyugGqWDY0qIskxn0uTTojVd6wPYW9ZEf8Q==", - "dev": true, - "requires": { - "@babel/runtime": "^7.6.3", - "@types/react": "^16.9.11", - "invariant": "^2.2.4", - "react-lifecycles-compat": "^3.0.4" - }, - "dependencies": { - "@types/react": { - "version": "16.9.23", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.23.tgz", - "integrity": "sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw==", - "dev": true, - "requires": { - "@types/prop-types": "*", - "csstype": "^2.2.0" - } - } - } - }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -13802,15 +13552,6 @@ "indexof": "0.0.1" } }, - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha1-MuU3fLVy3kqwR1O9+IIcAe1gW3w=", - "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, "watchpack": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", @@ -14902,6 +14643,12 @@ "isexe": "^2.0.0" } }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", @@ -14999,6 +14746,135 @@ "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", "dev": true + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz", + "integrity": "sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "y18n": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", + "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } } } } diff --git a/packages/core/package.json b/packages/core/package.json index 7cf6799a66..71eddaaa94 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -3,32 +3,35 @@ "version": "2.0.0-alpha.2", "description": "A simple React component capable of building HTML forms out of a JSON schema.", "scripts": { - "build:lib": "rimraf lib && cross-env NODE_ENV=production babel -d lib/ src/", - "build:dist": "rimraf dist && cross-env NODE_ENV=production webpack --config webpack.config.dist.js", - "cs-check": "prettier -l \"{playground,src,test}/**/*.js\"", - "cs-format": "prettier \"{playground,src,test}/**/*.js\" --write", - "dist": "npm run build:lib && npm run build:dist", - "lint": "eslint src test playground", + "build": "npm run dist:build:umd && npm run build:cjs && npm run build:es && npm run dist:build:es:lib", + "build:cjs": "cross-env NODE_ENV=production BABEL_ENV=cjs babel --extensions \".js,.jsx,.ts,.tsx\" ./src --out-dir ./dist/cjs", + "build:es": "cross-env NODE_ENV=production BABEL_ENV=es babel --extensions \".js,.jsx,.ts,.tsx\" ./src --out-dir ./dist/es", + "dist:build:es:lib": "cross-env NODE_ENV=production BABEL_ENV=es babel --extensions \".js,.jsx,.ts,.tsx\" ./src --out-dir ./lib", + "dist:build:umd": "rimraf dist && cross-env NODE_ENV=production BABEL_ENV=umd webpack --config webpack.config.dist.js", + "cs-check": "prettier -l \"{src,test}/**/*.js\"", + "cs-format": "prettier \"{src,test}/**/*.js\" --write", + "lint": "eslint src test", "precommit": "lint-staged", - "publish-to-npm": "npm run dist && npm publish", - "preversion": "npm run build:playground && npm run dist && npm run cs-check && npm run lint", - "start": "node devServer.js", + "publish-to-npm": "npm run build && npm publish", + "preversion": "npm run build && npm run cs-check && npm run lint", + "start": "concurrently \"npm:build:* -- --watch\"", "tdd": "cross-env NODE_ENV=test mocha --require @babel/register --watch --require ./test/setup-jsdom.js test/**/*_test.js", "test": "cross-env NODE_ENV=test mocha --require @babel/register --require ./test/setup-jsdom.js test/**/*_test.js", "test-coverage": "cross-env NODE_ENV=test nyc --reporter=lcov mocha --require @babel/register --require ./test/setup-jsdom.js test/**/*_test.js", "test-debug": "cross-env NODE_ENV=test mocha --require @babel/register --require ./test/setup-jsdom.js --debug-brk --inspect test/Form_test.js" }, "lint-staged": { - "{playground,src,test}/**/*.js": [ + "{src,test}/**/*.js": [ "eslint --fix", "prettier --write", "git add" ] }, - "main": "lib/index.js", + "main": "dist/cjs/index.js", + "module": "dist/es/index.js", + "typings": "index.d.ts", "files": [ - "dist", - "lib" + "dist" ], "engineStrict": false, "engines": { @@ -39,7 +42,7 @@ "react": ">=16" }, "dependencies": { - "@babel/runtime-corejs2": "^7.4.5", + "@types/json-schema": "^7.0.4", "ajv": "^6.7.0", "core-js": "^2.5.7", "json-schema-merge-allof": "^0.6.0", @@ -55,17 +58,20 @@ "@babel/core": "^7.4.5", "@babel/plugin-proposal-class-properties": "^7.4.4", "@babel/plugin-proposal-object-rest-spread": "^7.4.4", + "@babel/plugin-proposal-optional-chaining": "^7.8.3", + "@babel/plugin-transform-object-assign": "^7.8.3", "@babel/plugin-transform-react-jsx": "^7.3.0", "@babel/plugin-transform-runtime": "^7.4.4", "@babel/preset-env": "^7.4.5", "@babel/preset-react": "^7.0.0", "@babel/register": "^7.4.4", - "@rjsf/playground": "^2.0.0-alpha.2.2", + "@babel/runtime-corejs2": "^7.8.7", "atob": "^2.0.3", "babel-eslint": "^10.0.1", "babel-loader": "^8.0.6", "chai": "^3.3.0", "codemirror": "^5.30.0", + "concurrently": "^5.1.0", "create-react-ref": "^0.1.0", "cross-env": "^2.0.1", "css-loader": "^0.23.1", @@ -123,5 +129,6 @@ "homepage": "https://github.com/mozilla-services/react-jsonschema-form#readme", "publishConfig": { "access": "public" - } + }, + "types": "index.d.ts" } diff --git a/packages/core/playground/app.js b/packages/core/playground/app.js deleted file mode 100644 index dcfa814bc4..0000000000 --- a/packages/core/playground/app.js +++ /dev/null @@ -1,13 +0,0 @@ -import React from "react"; -import { render } from "react-dom"; -import Playground from "@rjsf/playground"; - -const themes = { - default: { - stylesheet: - "//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css", - theme: {}, - }, -}; - -render(, document.getElementById("app")); diff --git a/packages/core/playground/index.html b/packages/core/playground/index.html deleted file mode 100644 index ad4914bba9..0000000000 --- a/packages/core/playground/index.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - react-jsonschema-form playground - - - -
- - - diff --git a/packages/core/webpack.config.dev.js b/packages/core/webpack.config.dev.js deleted file mode 100644 index e8d51567f1..0000000000 --- a/packages/core/webpack.config.dev.js +++ /dev/null @@ -1,58 +0,0 @@ -var path = require("path"); -var webpack = require("webpack"); -const MonacoWebpackPlugin = require('monaco-editor-webpack-plugin'); - -module.exports = { - mode: "development", - devtool: "source-map", - entry: [ - "webpack-hot-middleware/client?reload=true", - "./playground/app" - ], - output: { - path: path.join(__dirname, "build"), - filename: "bundle.js", - publicPath: "/static/" - }, - plugins: [ - new MonacoWebpackPlugin({ - languages: ['json'] - }), - new webpack.HotModuleReplacementPlugin(), - ], - resolve: { - symlinks: false, - alias: { - react: path.resolve('./node_modules/react'), - 'react-dom': path.resolve('./node_modules/react-dom') - } - }, - module: { - rules: [ - { - test: /\.jsx?$/, - use: [ - "babel-loader", - ], - include: [ - path.join(__dirname, "src"), - path.join(__dirname, "playground"), - path.join(__dirname, "node_modules", "codemirror", "mode", "javascript"), - ] - }, - { - test: /\.css$/, - use: [ - "style-loader", - "css-loader", - ], - include: [ - path.join(__dirname, "css"), - path.join(__dirname, "playground"), - path.join(__dirname, "node_modules", "monaco-editor"), - path.join(__dirname, "node_modules", "@rjsf/playground", "node_modules", "monaco-editor"), - ], - }, - ] - } -}; diff --git a/packages/material-ui/.gitignore b/packages/material-ui/.gitignore new file mode 100644 index 0000000000..5e53b67c9a --- /dev/null +++ b/packages/material-ui/.gitignore @@ -0,0 +1 @@ +.rts2_** \ No newline at end of file diff --git a/packages/material-ui/README.md b/packages/material-ui/README.md index e03084b347..f801576660 100644 --- a/packages/material-ui/README.md +++ b/packages/material-ui/README.md @@ -1,25 +1,3 @@ - - - - - -[![Build Status][build-shield]][build-url] -[![npm][npm-shield]][npm-url] -[![npm downloads][npm-dl-shield]][npm-dl-url] -[![Contributors][contributors-shield]][contributors-url] -[![MIT License][license-shield]][license-url] -

@@ -27,37 +5,22 @@ Logo -

rjsf-material-ui

+

@rjsf/material-ui

Material-UI theme, fields and widgets for react-jsonschema-form.
- Explore the docs » + Explore the docs »

- View Playground + View Playground · - Report Bug + Report Bug · - Request Feature + Request Feature

- - -## Table of Contents - -- [About the Project](#about-the-project) - - [Built With](#built-with) -- [Getting Started](#getting-started) - - [Prerequisites](#prerequisites) - - [Installation](#installation) -- [Usage](#usage) -- [Roadmap](#roadmap) -- [Contributing](#contributing) -- [License](#license) -- [Contact](#contact) - ## About The Project @@ -80,60 +43,32 @@ Exports `material-ui` theme, fields and widgets for `react-jsonschema-form`. - `@material-ui/core >= 4.2.0` ([in 4.2.0, the `slider` component was added to the core](https://github.com/mui-org/material-ui/pull/16416)) - `@material-ui/icons` -- `react-jsonschema-form >= 1.6.0` ([in 1.6.0, the `withTheme` HOC was added](https://github.com/mozilla-services/react-jsonschema-form/pull/1226)) +- `@rjsf/core >= 2.0.0` ```sh -yarn add @material-ui/core @material-ui/icons react-jsonschema-form +yarn add @material-ui/core @material-ui/icons @rjsf/core ``` ### Installation ```sh -yarn add rjsf-material-ui +yarn add @rjsf/material-ui ``` - - ## Usage ```javascript -import { withTheme } from 'react-jsonschema-form'; -import { Theme as MuiTheme } from 'rjsf-material-ui'; - -const Form = withTheme(MuiTheme); +import Form from '@rjsf/material-ui'; ``` or ```javascript -import MuiForm from 'rjsf-material-ui'; -``` - - - -## Roadmap +import { withTheme } from '@rjsf/core'; +import { Theme as MuiTheme } from '@rjsf/material-ui'; -See the [open issues](https://cybertec-postgresql.github.io/rjsf-material-ui/issues) for a list of proposed features (and known issues). - - - -## Contributing - -Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**. - -1. Fork the Project -2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`) -3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`) -4. Push to the Branch (`git push origin feature/AmazingFeature`) -5. Open a Pull Request - - - -## Contact - -Cybertec TEAM - [@postgressupport](https://twitter.com/postgressupport) - office@cybertec.at - https://www.cybertec-postgresql.com - -Project Link: [https://cybertec-postgresql.github.io/rjsf-material-ui](https://cybertec-postgresql.github.io/rjsf-material-ui) +const Form = withTheme(MuiTheme); +``` @@ -148,4 +83,4 @@ Project Link: [https://cybertec-postgresql.github.io/rjsf-material-ui](https://c [npm-url]: https://www.npmjs.com/package/rjsf-material-ui [npm-dl-shield]: https://img.shields.io/npm/dm/rjsf-material-ui.svg?style=flat-square [npm-dl-url]: https://www.npmjs.com/package/rjsf-material-ui -[product-screenshot]: https://raw.githubusercontent.com/cybertec-postgresql/rjsf-material-ui/master/screenshot.png +[product-screenshot]: https://raw.githubusercontent.com/cybertec-postgresql/rjsf-material-ui/master/screenshot.png \ No newline at end of file diff --git a/packages/material-ui/package-lock.json b/packages/material-ui/package-lock.json index cd556ef34f..ee5bec109a 100644 --- a/packages/material-ui/package-lock.json +++ b/packages/material-ui/package-lock.json @@ -1330,6 +1330,23 @@ "react-is": "^16.8.6" } }, + "@rjsf/core": { + "version": "2.0.0-alpha.2", + "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-2.0.0-alpha.2.tgz", + "integrity": "sha512-GtciK9Qn4wAm4mvfakvumfW7NJyYZi7r6mjC+6JY2aAxpbIWsOHD2bzo3dhMI6ql5D1QCplUqFMy0vo6OHxXUQ==", + "dev": true, + "requires": { + "@babel/runtime-corejs2": "^7.4.5", + "ajv": "^6.7.0", + "core-js": "^2.5.7", + "json-schema-merge-allof": "^0.6.0", + "lodash": "^4.17.15", + "prop-types": "^15.7.2", + "react-app-polyfill": "^1.0.4", + "react-is": "^16.9.0", + "shortid": "^2.2.14" + } + }, "@rollup/plugin-commonjs": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-11.0.2.tgz", @@ -1563,9 +1580,9 @@ "dev": true }, "@types/react": { - "version": "16.9.11", - "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.11.tgz", - "integrity": "sha1-cOC3rXkFinhC8lzPKZmAcHatoSA=", + "version": "16.9.23", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.9.23.tgz", + "integrity": "sha512-SsGVT4E7L2wLN3tPYLiF20hmZTPGuzaayVunfgXzUn1x4uHVsKH6QDJQ/TdpHqwsTLd4CwrmQ2vOgxN7gE24gw==", "dev": true, "requires": { "@types/prop-types": "*", @@ -1573,21 +1590,11 @@ } }, "@types/react-dom": { - "version": "16.9.3", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.3.tgz", - "integrity": "sha512-FUuZKXPr9qlzUT9lhuzrZgLjH63TvNn28Ch3MvKG4B+F52zQtO8DtE0Opbncy3xaucNZM2WIPfuNTgkbKx5Brg==", - "dev": true, - "requires": { - "@types/react": "*" - } - }, - "@types/react-jsonschema-form": { - "version": "1.6.5", - "resolved": "https://registry.npmjs.org/@types/react-jsonschema-form/-/react-jsonschema-form-1.6.5.tgz", - "integrity": "sha512-cE7dHz00jp0OzplQlP4p/3460jJLdXskXh45O0m7thnqqbilxPi77P7fOEeVxmbSHEA4tSRqLK/9cbHuthdhKA==", + "version": "16.9.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.5.tgz", + "integrity": "sha512-BX6RQ8s9D+2/gDhxrj8OW+YD4R+8hj7FEM/OJHGNR0KipE1h1mSsf39YeyC81qafkq+N3rU3h3RFbLSwE5VqUg==", "dev": true, "requires": { - "@types/json-schema": "*", "@types/react": "*" } }, @@ -2131,6 +2138,12 @@ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", "dev": true }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", + "dev": true + }, "asn1": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", @@ -3354,6 +3367,29 @@ "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", "dev": true }, + "compute-gcd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/compute-gcd/-/compute-gcd-1.2.0.tgz", + "integrity": "sha1-/B7eW2UAHpUCJlAvRlQ4Y+T+oQ4=", + "dev": true, + "requires": { + "validate.io-array": "^1.0.3", + "validate.io-function": "^1.0.2", + "validate.io-integer-array": "^1.0.0" + } + }, + "compute-lcm": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/compute-lcm/-/compute-lcm-1.1.0.tgz", + "integrity": "sha1-q9ltBAtBsKFm+JlEtci3xRHiGtU=", + "dev": true, + "requires": { + "compute-gcd": "^1.2.0", + "validate.io-array": "^1.0.3", + "validate.io-function": "^1.0.2", + "validate.io-integer-array": "^1.0.0" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -7167,6 +7203,26 @@ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", "dev": true }, + "json-schema-compare": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/json-schema-compare/-/json-schema-compare-0.2.2.tgz", + "integrity": "sha512-c4WYmDKyJXhs7WWvAWm3uIYnfyWFoIp+JEoX34rctVvEkMYCPGhXtvmFFXiffBbxfZsvQ0RNnV5H7GvDF5HCqQ==", + "dev": true, + "requires": { + "lodash": "^4.17.4" + } + }, + "json-schema-merge-allof": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/json-schema-merge-allof/-/json-schema-merge-allof-0.6.0.tgz", + "integrity": "sha512-LEw4VMQVRceOPLuGRWcxW5orTTiR9ZAtqTAe4rQUjNADTeR81bezBVFa0MqIwp0YmHIM1KkhSjZM7o+IQhaPbQ==", + "dev": true, + "requires": { + "compute-lcm": "^1.1.0", + "json-schema-compare": "^0.2.2", + "lodash": "^4.17.4" + } + }, "json-schema-traverse": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", @@ -8159,9 +8215,9 @@ "optional": true }, "nanoid": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.6.tgz", - "integrity": "sha1-BmVBj2kuVM9E801AEHYfMkCgMxQ=", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.11.tgz", + "integrity": "sha512-s/snB+WGm6uwi0WjsZdaVcuf3KJXlfGl2LcxgwkEwJF0D/BWzVWAZW/XY4bFaiR7s0Jk3FPvlnepg1H1b1UwlA==", "dev": true }, "nanomatch": { @@ -9420,6 +9476,15 @@ } } }, + "promise": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.1.0.tgz", + "integrity": "sha512-W04AqnILOL/sPRXziNicCjSNRruLAuIHEOVBazepu0545DDNGYHz7ar9ZgZ1fMU8/MA4mVxp5rkBWRi6OXIy3Q==", + "dev": true, + "requires": { + "asap": "~2.0.6" + } + }, "prompts": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.3.1.tgz", @@ -9481,6 +9546,15 @@ "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=", "dev": true }, + "raf": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", + "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", + "dev": true, + "requires": { + "performance-now": "^2.1.0" + } + }, "rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", @@ -9504,6 +9578,28 @@ "prop-types": "^15.6.2" } }, + "react-app-polyfill": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/react-app-polyfill/-/react-app-polyfill-1.0.6.tgz", + "integrity": "sha512-OfBnObtnGgLGfweORmdZbyEz+3dgVePQBb3zipiaDsMHV1NpWm0rDFYIVXFV/AK+x4VIIfWHhrdMIeoTLyRr2g==", + "dev": true, + "requires": { + "core-js": "^3.5.0", + "object-assign": "^4.1.1", + "promise": "^8.0.3", + "raf": "^3.4.1", + "regenerator-runtime": "^0.13.3", + "whatwg-fetch": "^3.0.0" + }, + "dependencies": { + "core-js": { + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.4.tgz", + "integrity": "sha512-4paDGScNgZP2IXXilaffL9X7968RuvwlkK3xWtZRVqgd8SYNiVKRJvkFd1aqqEuPfN7E68ZHEp9hDj6lHj4Hyw==", + "dev": true + } + } + }, "react-dom": { "version": "16.11.0", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.11.0.tgz", @@ -9522,28 +9618,6 @@ "integrity": "sha1-uF3+zUitHORp/1WKiCyo6DE5KPo=", "dev": true }, - "react-jsonschema-form": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/react-jsonschema-form/-/react-jsonschema-form-1.8.0.tgz", - "integrity": "sha1-eRHVB0Yo1TANgsjczbsNZqUVcT4=", - "dev": true, - "requires": { - "@babel/runtime-corejs2": "^7.4.5", - "ajv": "^6.7.0", - "core-js": "^2.5.7", - "lodash": "^4.17.15", - "prop-types": "^15.5.8", - "react-is": "^16.8.4", - "react-lifecycles-compat": "^3.0.4", - "shortid": "^2.2.14" - } - }, - "react-lifecycles-compat": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", - "integrity": "sha1-TxonOv38jzSIqMUWv9p4+HI1I2I=", - "dev": true - }, "react-transition-group": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/react-transition-group/-/react-transition-group-4.3.0.tgz", @@ -11779,6 +11853,43 @@ "builtins": "^1.0.3" } }, + "validate.io-array": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/validate.io-array/-/validate.io-array-1.0.6.tgz", + "integrity": "sha1-W1osr9j4uFq7L4hroVPy2Tond00=", + "dev": true + }, + "validate.io-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/validate.io-function/-/validate.io-function-1.0.2.tgz", + "integrity": "sha1-NDoZgC7TsZaCaceA5VjpNBHAutc=", + "dev": true + }, + "validate.io-integer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/validate.io-integer/-/validate.io-integer-1.0.5.tgz", + "integrity": "sha1-FoSWSAuVviJH7EQ/IjPeT4mHgGg=", + "dev": true, + "requires": { + "validate.io-number": "^1.0.3" + } + }, + "validate.io-integer-array": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/validate.io-integer-array/-/validate.io-integer-array-1.0.0.tgz", + "integrity": "sha1-LKveAzKTpry+Bj/q/pHq9GsToIk=", + "dev": true, + "requires": { + "validate.io-array": "^1.0.3", + "validate.io-integer": "^1.0.4" + } + }, + "validate.io-number": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/validate.io-number/-/validate.io-number-1.0.3.tgz", + "integrity": "sha1-9j/+2iSL8opnqNSODjtGGhZluvg=", + "dev": true + }, "verror": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", @@ -11832,6 +11943,12 @@ "iconv-lite": "0.4.24" } }, + "whatwg-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz", + "integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==", + "dev": true + }, "whatwg-mimetype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", diff --git a/packages/material-ui/package.json b/packages/material-ui/package.json index c4b6c026bf..9606c9d1f3 100644 --- a/packages/material-ui/package.json +++ b/packages/material-ui/package.json @@ -20,7 +20,7 @@ "@material-ui/core": "^4.2.0", "@material-ui/icons": "^4.2.1", "react": ">=16", - "react-jsonschema-form": "^1.6.1" + "@rjsf/core": "^2.0.0-alpha.2" }, "devDependencies": { "@babel/core": "^7.0.0-0", @@ -31,16 +31,15 @@ "@babel/preset-react": "^7.0.0", "@material-ui/core": "^4.2.0", "@material-ui/icons": "^4.2.1", + "@rjsf/core": "^2.0.0-alpha.2", "@types/jest": "^24.0.15", "@types/json-schema": "^7.0.3", - "@types/react": "^16.8.23", - "@types/react-dom": "^16.8.4", - "@types/react-jsonschema-form": "^1.6.2", + "@types/react": "^16.9.23", + "@types/react-dom": "^16.9.5", "np": "^5.0.3", "npm-run-all": "^4.1.5", "react": "^16.8.6", "react-dom": "^16.8.6", - "react-jsonschema-form": "^1.6.1", "rimraf": "^2.6.3", "tsdx": "^0.12.3", "tslib": "^1.10.0", diff --git a/packages/material-ui/src/AddButton/AddButton.tsx b/packages/material-ui/src/AddButton/AddButton.tsx index fe7db54fc3..0070da0f8e 100644 --- a/packages/material-ui/src/AddButton/AddButton.tsx +++ b/packages/material-ui/src/AddButton/AddButton.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { AddButtonProps } from 'react-jsonschema-form'; +import { AddButtonProps } from '@rjsf/core'; import Button from '@material-ui/core/Button'; import AddIcon from '@material-ui/icons/Add'; diff --git a/packages/material-ui/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx b/packages/material-ui/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx index da721de12c..418159299d 100644 --- a/packages/material-ui/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx +++ b/packages/material-ui/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx @@ -3,13 +3,13 @@ import React from 'react'; import { isMultiSelect, getDefaultRegistry, -} from 'react-jsonschema-form/lib/utils'; +} from '@rjsf/core/lib/utils'; import Box from '@material-ui/core/Box'; import Grid from '@material-ui/core/Grid'; import Paper from '@material-ui/core/Paper'; -import { ArrayFieldTemplateProps, IdSchema } from 'react-jsonschema-form'; +import { ArrayFieldTemplateProps, IdSchema } from '@rjsf/core'; import AddButton from '../AddButton/AddButton'; import IconButton from '../IconButton/IconButton'; diff --git a/packages/material-ui/src/CheckboxWidget/CheckboxWidget.tsx b/packages/material-ui/src/CheckboxWidget/CheckboxWidget.tsx index 9bd06bf3dc..b1431c217f 100644 --- a/packages/material-ui/src/CheckboxWidget/CheckboxWidget.tsx +++ b/packages/material-ui/src/CheckboxWidget/CheckboxWidget.tsx @@ -4,7 +4,7 @@ import Checkbox from '@material-ui/core/Checkbox'; import FormControl from '@material-ui/core/FormControl'; import FormControlLabel from '@material-ui/core/FormControlLabel'; -import { WidgetProps } from 'react-jsonschema-form'; +import { WidgetProps } from '@rjsf/core'; const CheckboxWidget = (props: WidgetProps) => { const { diff --git a/packages/material-ui/src/CheckboxesWidget/CheckboxesWidget.tsx b/packages/material-ui/src/CheckboxesWidget/CheckboxesWidget.tsx index 728556e660..3e07c4b090 100644 --- a/packages/material-ui/src/CheckboxesWidget/CheckboxesWidget.tsx +++ b/packages/material-ui/src/CheckboxesWidget/CheckboxesWidget.tsx @@ -6,7 +6,7 @@ import FormGroup from '@material-ui/core/FormGroup'; import FormControlLabel from '@material-ui/core/FormControlLabel'; import Checkbox from '@material-ui/core/Checkbox'; -import { WidgetProps } from 'react-jsonschema-form'; +import { WidgetProps } from '@rjsf/core'; const selectValue = (value: any, selected: any, all: any) => { const at = all.indexOf(value); diff --git a/packages/material-ui/src/DescriptionField/DescriptionField.tsx b/packages/material-ui/src/DescriptionField/DescriptionField.tsx index 985ce6d9a5..67e7223954 100644 --- a/packages/material-ui/src/DescriptionField/DescriptionField.tsx +++ b/packages/material-ui/src/DescriptionField/DescriptionField.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { FieldProps } from 'react-jsonschema-form'; +import { FieldProps } from '@rjsf/core'; import { makeStyles } from '@material-ui/styles'; import Typography from '@material-ui/core/Typography'; diff --git a/packages/material-ui/src/ErrorList/ErrorList.tsx b/packages/material-ui/src/ErrorList/ErrorList.tsx index af8b623bd6..5b5948b9b4 100644 --- a/packages/material-ui/src/ErrorList/ErrorList.tsx +++ b/packages/material-ui/src/ErrorList/ErrorList.tsx @@ -9,12 +9,12 @@ import ErrorIcon from '@material-ui/icons/Error'; import ListItemText from '@material-ui/core/ListItemText'; import Paper from '@material-ui/core/Paper'; -import { ErrorListProps } from 'react-jsonschema-form'; +import { ErrorListProps } from '@rjsf/core'; const ErrorList = ({ errors }: ErrorListProps) => ( - + Errors diff --git a/packages/material-ui/src/FieldTemplate/FieldTemplate.tsx b/packages/material-ui/src/FieldTemplate/FieldTemplate.tsx index 93f23e932c..3ef61d2785 100644 --- a/packages/material-ui/src/FieldTemplate/FieldTemplate.tsx +++ b/packages/material-ui/src/FieldTemplate/FieldTemplate.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { FieldTemplateProps } from 'react-jsonschema-form'; +import { FieldTemplateProps } from '@rjsf/core'; import FormControl from '@material-ui/core/FormControl'; import FormHelperText from '@material-ui/core/FormHelperText'; diff --git a/packages/material-ui/src/MuiForm/MuiForm.tsx b/packages/material-ui/src/MuiForm/MuiForm.tsx index 14ff491bfa..3ec526b0a2 100644 --- a/packages/material-ui/src/MuiForm/MuiForm.tsx +++ b/packages/material-ui/src/MuiForm/MuiForm.tsx @@ -1,7 +1,8 @@ -import { withTheme } from 'react-jsonschema-form'; +import { withTheme, FormProps } from '@rjsf/core'; import Theme from '../Theme'; +import { StatelessComponent } from 'react'; -const MuiForm = withTheme(Theme); +const MuiForm: React.ComponentClass> | StatelessComponent> = withTheme(Theme); export default MuiForm; diff --git a/packages/material-ui/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx b/packages/material-ui/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx index 0093d892a2..97aaa312af 100644 --- a/packages/material-ui/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx +++ b/packages/material-ui/src/ObjectFieldTemplate/ObjectFieldTemplate.tsx @@ -3,7 +3,7 @@ import React from 'react'; import Grid from '@material-ui/core/Grid'; import { makeStyles } from '@material-ui/styles'; -import { ObjectFieldTemplateProps } from 'react-jsonschema-form'; +import { ObjectFieldTemplateProps } from '@rjsf/core'; const useStyles = makeStyles({ root: { diff --git a/packages/material-ui/src/PasswordWidget/PasswordWidget.tsx b/packages/material-ui/src/PasswordWidget/PasswordWidget.tsx index 71c9e5d4ec..2b8d5abfdb 100644 --- a/packages/material-ui/src/PasswordWidget/PasswordWidget.tsx +++ b/packages/material-ui/src/PasswordWidget/PasswordWidget.tsx @@ -4,7 +4,7 @@ import FormControl from '@material-ui/core/FormControl'; import Input from '@material-ui/core/Input'; import InputLabel from '@material-ui/core/InputLabel'; -import { WidgetProps } from 'react-jsonschema-form'; +import { WidgetProps } from '@rjsf/core'; const PasswordWidget = ({ id, diff --git a/packages/material-ui/src/RadioWidget/RadioWidget.tsx b/packages/material-ui/src/RadioWidget/RadioWidget.tsx index ef0088bc22..5ec6aea697 100644 --- a/packages/material-ui/src/RadioWidget/RadioWidget.tsx +++ b/packages/material-ui/src/RadioWidget/RadioWidget.tsx @@ -6,7 +6,7 @@ import FormLabel from '@material-ui/core/FormLabel'; import Radio from '@material-ui/core/Radio'; import RadioGroup from '@material-ui/core/RadioGroup'; -import { WidgetProps } from 'react-jsonschema-form'; +import { WidgetProps } from '@rjsf/core'; const RadioWidget = ({ id, diff --git a/packages/material-ui/src/RangeWidget/RangeWidget.tsx b/packages/material-ui/src/RangeWidget/RangeWidget.tsx index 9f067af91c..9e30233c09 100644 --- a/packages/material-ui/src/RangeWidget/RangeWidget.tsx +++ b/packages/material-ui/src/RangeWidget/RangeWidget.tsx @@ -5,8 +5,8 @@ import Grid from '@material-ui/core/Grid'; import Slider from '@material-ui/core/Slider'; import FormLabel from '@material-ui/core/FormLabel'; -import { rangeSpec } from 'react-jsonschema-form/lib/utils'; -import { WidgetProps } from 'react-jsonschema-form'; +import { rangeSpec } from '@rjsf/core/lib/utils'; +import { WidgetProps } from '@rjsf/core'; const RangeWidget = ({ value, diff --git a/packages/material-ui/src/SelectWidget/SelectWidget.tsx b/packages/material-ui/src/SelectWidget/SelectWidget.tsx index df19934e74..efa5f6b97c 100644 --- a/packages/material-ui/src/SelectWidget/SelectWidget.tsx +++ b/packages/material-ui/src/SelectWidget/SelectWidget.tsx @@ -5,8 +5,8 @@ import MenuItem from '@material-ui/core/MenuItem'; import Select from '@material-ui/core/Select'; import InputLabel from '@material-ui/core/InputLabel'; -// import { WidgetProps } from 'react-jsonschema-form'; -import { asNumber, guessType } from 'react-jsonschema-form/lib/utils'; +import { WidgetProps } from '@rjsf/core'; +import { asNumber, guessType } from '@rjsf/core/lib/utils'; const nums = new Set(['number', 'integer']); @@ -54,7 +54,7 @@ const SelectWidget = ({ onChange, onBlur, onFocus, -}: any) => { +}: WidgetProps) => { const { enumOptions, enumDisabled } = options; const emptyValue = multiple ? [] : ''; diff --git a/packages/material-ui/src/TextWidget/TextWidget.tsx b/packages/material-ui/src/TextWidget/TextWidget.tsx index c4b7125b25..09a41d4e77 100644 --- a/packages/material-ui/src/TextWidget/TextWidget.tsx +++ b/packages/material-ui/src/TextWidget/TextWidget.tsx @@ -3,7 +3,7 @@ import React from 'react'; import FormControl from '@material-ui/core/FormControl'; import TextField from '@material-ui/core/TextField'; -import { WidgetProps } from 'react-jsonschema-form'; +import { WidgetProps } from '@rjsf/core'; const TextWidget = ({ id, diff --git a/packages/material-ui/src/TextareaWidget/TextareaWidget.tsx b/packages/material-ui/src/TextareaWidget/TextareaWidget.tsx index d02e684940..c764ef9213 100644 --- a/packages/material-ui/src/TextareaWidget/TextareaWidget.tsx +++ b/packages/material-ui/src/TextareaWidget/TextareaWidget.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { WidgetProps } from 'react-jsonschema-form'; +import { WidgetProps } from '@rjsf/core'; import FormControl from '@material-ui/core/FormControl'; import TextField from '@material-ui/core/TextField'; diff --git a/packages/material-ui/src/Theme/Theme.ts b/packages/material-ui/src/Theme/Theme.ts index 3667ced848..22d7021d8a 100644 --- a/packages/material-ui/src/Theme/Theme.ts +++ b/packages/material-ui/src/Theme/Theme.ts @@ -5,8 +5,8 @@ import FieldTemplate from '../FieldTemplate'; import ObjectFieldTemplate from '../ObjectFieldTemplate'; import Widgets from '../Widgets'; -import { ThemeProps } from 'react-jsonschema-form'; -import { getDefaultRegistry } from 'react-jsonschema-form/lib/utils'; +import { ThemeProps } from '@rjsf/core'; +import { getDefaultRegistry } from '@rjsf/core/lib/utils'; const { fields, widgets } = getDefaultRegistry(); diff --git a/packages/material-ui/src/TitleField/TitleField.tsx b/packages/material-ui/src/TitleField/TitleField.tsx index 3b466cf81a..b437abda23 100644 --- a/packages/material-ui/src/TitleField/TitleField.tsx +++ b/packages/material-ui/src/TitleField/TitleField.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { FieldProps } from 'react-jsonschema-form'; +import { FieldProps } from '@rjsf/core'; import Box from '@material-ui/core/Box'; import Divider from '@material-ui/core/Divider'; diff --git a/packages/material-ui/src/UpDownWidget/UpDownWidget.tsx b/packages/material-ui/src/UpDownWidget/UpDownWidget.tsx index 9105d59fdb..d29ad7d513 100644 --- a/packages/material-ui/src/UpDownWidget/UpDownWidget.tsx +++ b/packages/material-ui/src/UpDownWidget/UpDownWidget.tsx @@ -4,7 +4,7 @@ import FormControl from '@material-ui/core/FormControl'; import Input from '@material-ui/core/Input'; import InputLabel from '@material-ui/core/InputLabel'; -import { WidgetProps } from 'react-jsonschema-form'; +import { WidgetProps } from '@rjsf/core'; const UpDownWidget = ({ id, diff --git a/packages/playground/playground/index.html b/packages/playground/index.html similarity index 97% rename from packages/playground/playground/index.html rename to packages/playground/index.html index 4c122a603e..2c1bd357e7 100644 --- a/packages/playground/playground/index.html +++ b/packages/playground/index.html @@ -10,4 +10,4 @@
- + \ No newline at end of file diff --git a/packages/playground/package-lock.json b/packages/playground/package-lock.json index 06c9424c6f..478f23c43c 100644 --- a/packages/playground/package-lock.json +++ b/packages/playground/package-lock.json @@ -2965,22 +2965,6 @@ "fastq": "^1.6.0" } }, - "@rjsf/core": { - "version": "2.0.0-alpha.2", - "resolved": "https://registry.npmjs.org/@rjsf/core/-/core-2.0.0-alpha.2.tgz", - "integrity": "sha512-GtciK9Qn4wAm4mvfakvumfW7NJyYZi7r6mjC+6JY2aAxpbIWsOHD2bzo3dhMI6ql5D1QCplUqFMy0vo6OHxXUQ==", - "requires": { - "@babel/runtime-corejs2": "^7.4.5", - "ajv": "^6.7.0", - "core-js": "^2.5.7", - "json-schema-merge-allof": "^0.6.0", - "lodash": "^4.17.15", - "prop-types": "^15.7.2", - "react-app-polyfill": "^1.0.4", - "react-is": "^16.9.0", - "shortid": "^2.2.14" - } - }, "@samverschueren/stream-to-observable": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz", @@ -13223,20 +13207,6 @@ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.9.0.tgz", "integrity": "sha512-tJBzzzIgnnRfEm046qRcURvwQnZVXmuCbscxUO5RWrGTXpon2d4c8mI0D8WE6ydVIm29JiLB6+RslkIvym9Rjw==" }, - "react-jsonschema-form": { - "version": "2.0.0-alpha.1", - "resolved": "https://registry.npmjs.org/react-jsonschema-form/-/react-jsonschema-form-2.0.0-alpha.1.tgz", - "integrity": "sha512-AYpV2/dKMSNwddzrBCJjuGdbZ5jd6mD17f3tq3dzWXiK1lwb0H485u80VlKuiyvTosaMjwWtyvXhO7jXtUu7oA==", - "requires": { - "@babel/runtime-corejs2": "^7.4.5", - "ajv": "^6.7.0", - "core-js": "^2.5.7", - "lodash": "^4.17.15", - "prop-types": "^15.7.2", - "react-is": "^16.9.0", - "shortid": "^2.2.14" - } - }, "react-lifecycles-compat": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", @@ -13799,11 +13769,6 @@ "inherits": "^2.0.1" } }, - "rjsf-material-ui": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/rjsf-material-ui/-/rjsf-material-ui-0.3.9.tgz", - "integrity": "sha512-DARQdyHCO/7WG1Pxs2f0V5Yx2tTtktOaxExZPdcL8II3oQsrZEMTmSUCFbzT860to2UNCWkbrIsrHnMJH/O98g==" - }, "run-async": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", diff --git a/packages/playground/package.json b/packages/playground/package.json index b1ce0250ac..4feef2cded 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -6,15 +6,14 @@ "build:lib": "rimraf lib && cross-env NODE_ENV=production babel -d lib/ src/", "prepublishOnly": "npm run build:lib", "build:dist": "rimraf dist && cross-env NODE_ENV=production webpack --config webpack.config.dist.js", - "build:playground": "rimraf build && cross-env NODE_ENV=production webpack --config webpack.config.prod.js", "cs-check": "prettier -l \"{playground,src,test}/**/*.js\"", "cs-format": "prettier \"{playground,src,test}/**/*.js\" --write", - "dist": "npm run build:lib && npm run build:dist", + "build": "rimraf build && cross-env NODE_ENV=production webpack --config webpack.config.prod.js", "lint": "eslint src test playground", "precommit": "lint-staged", - "publish-to-gh-pages": "npm run build:playground && gh-pages --dist build/", - "publish-to-npm": "npm run dist && npm publish", - "preversion": "npm run build:playground && npm run dist && npm run cs-check && npm run lint", + "publish-to-gh-pages": "npm run build && gh-pages --dist build/", + "publish-to-npm": "npm run build && npm publish", + "preversion": "npm run build && npm run build && npm run cs-check && npm run lint", "start": "webpack-dev-server --open --config webpack.config.dev.js" }, "lint-staged": { @@ -51,8 +50,7 @@ "react-bootstrap": "^0.33.1", "react-frame-component": "^4.1.1", "react-is": "^16.9.0", - "react-jsonschema-form": "^2.0.0-alpha.1", - "rjsf-material-ui": "^0.3.9", + "@rjsf/material-ui": "^2.0.0-alpha.2", "shortid": "^2.2.14" }, "devDependencies": { diff --git a/packages/playground/playground/app.js b/packages/playground/playground/app.js deleted file mode 100644 index 9d277a4f71..0000000000 --- a/packages/playground/playground/app.js +++ /dev/null @@ -1,92 +0,0 @@ -import React from "react"; -import { Theme as MuiTheme } from "rjsf-material-ui"; -import Playground from "../src/index"; -import { render } from "react-dom"; - -const themes = { - default: { - stylesheet: - "//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css", - theme: {}, - subthemes: { - cerulean: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/cerulean/bootstrap.min.css", - }, - cosmo: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/cosmo/bootstrap.min.css", - }, - cyborg: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/cyborg/bootstrap.min.css", - }, - darkly: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/darkly/bootstrap.min.css", - }, - flatly: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/flatly/bootstrap.min.css", - }, - journal: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/journal/bootstrap.min.css", - }, - lumen: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/lumen/bootstrap.min.css", - }, - paper: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/paper/bootstrap.min.css", - }, - readable: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/readable/bootstrap.min.css", - }, - sandstone: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/sandstone/bootstrap.min.css", - }, - simplex: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/simplex/bootstrap.min.css", - }, - slate: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/slate/bootstrap.min.css", - }, - spacelab: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/spacelab/bootstrap.min.css", - }, - "solarized-dark": { - stylesheet: - "//cdn.rawgit.com/aalpern/bootstrap-solarized/master/bootstrap-solarized-dark.css", - }, - "solarized-light": { - stylesheet: - "//cdn.rawgit.com/aalpern/bootstrap-solarized/master/bootstrap-solarized-light.css", - }, - superhero: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/superhero/bootstrap.min.css", - }, - united: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/united/bootstrap.min.css", - }, - yeti: { - stylesheet: - "//cdnjs.cloudflare.com/ajax/libs/bootswatch/3.3.6/yeti/bootstrap.min.css", - }, - }, - }, - "material-ui": { - stylesheet: "", - theme: MuiTheme, - }, -}; - -render(, document.getElementById("app")); diff --git a/packages/playground/src/app.js b/packages/playground/src/app.js new file mode 100644 index 0000000000..984360b753 --- /dev/null +++ b/packages/playground/src/app.js @@ -0,0 +1,583 @@ +import React, { Component } from "react"; +import MonacoEditor from "react-monaco-editor"; +import { samples } from "./samples"; +import "react-app-polyfill/ie11"; +import Form, { withTheme } from "@rjsf/core"; +import DemoFrame from "./DemoFrame"; + +// deepEquals and shouldRender and isArguments are copied from rjsf-core. TODO: unify these utility functions. + +function isArguments(object) { + return Object.prototype.toString.call(object) === "[object Arguments]"; +} + +function deepEquals(a, b, ca = [], cb = []) { + // Partially extracted from node-deeper and adapted to exclude comparison + // checks for functions. + // https://github.com/othiym23/node-deeper + if (a === b) { + return true; + } else if (typeof a === "function" || typeof b === "function") { + // Assume all functions are equivalent + // see https://github.com/mozilla-services/react-jsonschema-form/issues/255 + return true; + } else if (typeof a !== "object" || typeof b !== "object") { + return false; + } else if (a === null || b === null) { + return false; + } else if (a instanceof Date && b instanceof Date) { + return a.getTime() === b.getTime(); + } else if (a instanceof RegExp && b instanceof RegExp) { + return ( + a.source === b.source && + a.global === b.global && + a.multiline === b.multiline && + a.lastIndex === b.lastIndex && + a.ignoreCase === b.ignoreCase + ); + } else if (isArguments(a) || isArguments(b)) { + if (!(isArguments(a) && isArguments(b))) { + return false; + } + let slice = Array.prototype.slice; + return deepEquals(slice.call(a), slice.call(b), ca, cb); + } else { + if (a.constructor !== b.constructor) { + return false; + } + + let ka = Object.keys(a); + let kb = Object.keys(b); + // don't bother with stack acrobatics if there's nothing there + if (ka.length === 0 && kb.length === 0) { + return true; + } + if (ka.length !== kb.length) { + return false; + } + + let cal = ca.length; + while (cal--) { + if (ca[cal] === a) { + return cb[cal] === b; + } + } + ca.push(a); + cb.push(b); + + ka.sort(); + kb.sort(); + for (var j = ka.length - 1; j >= 0; j--) { + if (ka[j] !== kb[j]) { + return false; + } + } + + let key; + for (let k = ka.length - 1; k >= 0; k--) { + key = ka[k]; + if (!deepEquals(a[key], b[key], ca, cb)) { + return false; + } + } + + ca.pop(); + cb.pop(); + + return true; + } +} + +function shouldRender(comp, nextProps, nextState) { + const { props, state } = comp; + return !deepEquals(props, nextProps) || !deepEquals(state, nextState); +} + +const log = type => console.log.bind(console, type); +const toJson = val => JSON.stringify(val, null, 2); +const liveSettingsSchema = { + type: "object", + properties: { + validate: { type: "boolean", title: "Live validation" }, + disable: { type: "boolean", title: "Disable whole form" }, + omitExtraData: { type: "boolean", title: "Omit extra data" }, + liveOmit: { type: "boolean", title: "Live omit" }, + }, +}; + +const monacoEditorOptions = { + minimap: { + enabled: false, + }, + automaticLayout: true, +}; + +class GeoPosition extends Component { + constructor(props) { + super(props); + this.state = { ...props.formData }; + } + + onChange(name) { + return event => { + this.setState({ [name]: parseFloat(event.target.value) }); + setImmediate(() => this.props.onChange(this.state)); + }; + } + + render() { + const { lat, lon } = this.state; + return ( +
+

Hey, I'm a custom component

+

+ I'm registered as geo and referenced in + uiSchema as the ui:field to use for this + schema. +

+
+
+ + +
+
+ + +
+
+
+ ); + } +} + +class Editor extends Component { + constructor(props) { + super(props); + this.state = { valid: true, code: props.code }; + } + + UNSAFE_componentWillReceiveProps(props) { + this.setState({ valid: true, code: props.code }); + } + + shouldComponentUpdate(nextProps, nextState) { + if (this.state.valid) { + return ( + JSON.stringify(JSON.parse(nextProps.code)) !== + JSON.stringify(JSON.parse(this.state.code)) + ); + } + return false; + } + + onCodeChange = code => { + try { + const parsedCode = JSON.parse(code); + this.setState({ valid: true, code }, () => + this.props.onChange(parsedCode) + ); + } catch (err) { + this.setState({ valid: false, code }); + } + }; + + render() { + const { title } = this.props; + const icon = this.state.valid ? "ok" : "remove"; + const cls = this.state.valid ? "valid" : "invalid"; + return ( +
+
+ + {" " + title} +
+ +
+ ); + } +} + +class Selector extends Component { + constructor(props) { + super(props); + this.state = { current: "Simple" }; + } + + shouldComponentUpdate(nextProps, nextState) { + return shouldRender(this, nextProps, nextState); + } + + onLabelClick = label => { + return event => { + event.preventDefault(); + this.setState({ current: label }); + setImmediate(() => this.props.onSelected(samples[label])); + }; + }; + + render() { + return ( +
    + {Object.keys(samples).map((label, i) => { + return ( +
  • + + {label} + +
  • + ); + })} +
+ ); + } +} + +function ThemeSelector({ theme, themes, select }) { + const themeSchema = { + type: "string", + enum: Object.keys(themes), + }; + return ( +
select(formData, themes[formData])}> +
+ + ); +} + +class CopyLink extends Component { + onCopyClick = event => { + this.input.select(); + document.execCommand("copy"); + }; + + render() { + const { shareURL, onShare } = this.props; + if (!shareURL) { + return ( + + ); + } + return ( +
+ (this.input = input)} + className="form-control" + defaultValue={shareURL} + /> + + + +
+ ); + } +} + +class Playground extends Component { + constructor(props) { + super(props); + // initialize state with Simple data sample + const { schema, uiSchema, formData, validate } = samples.Simple; + this.state = { + form: false, + schema, + uiSchema, + formData, + validate, + theme: "default", + liveSettings: { + validate: true, + disable: false, + omitExtraData: false, + liveOmit: false, + }, + shareURL: null, + themeObj: {}, + }; + } + + componentDidMount() { + const hash = document.location.hash.match(/#(.*)/); + if (hash && typeof hash[1] === "string" && hash[1].length > 0) { + try { + this.load(JSON.parse(atob(hash[1]))); + } catch (err) { + alert("Unable to load form setup data."); + } + } else { + this.load(samples.Simple); + } + } + + shouldComponentUpdate(nextProps, nextState) { + return shouldRender(this, nextProps, nextState); + } + + load = data => { + // Reset the ArrayFieldTemplate whenever you load new data + const { ArrayFieldTemplate, ObjectFieldTemplate, extraErrors } = data; + // uiSchema is missing on some examples. Provide a default to + // clear the field in all cases. + const { uiSchema = {} } = data; + + const { theme = this.state.theme } = data; + const { themes } = this.props; + this.onThemeSelected(theme, themes[theme]); + + // force resetting form component instance + this.setState({ form: false }, () => + this.setState({ + ...data, + form: true, + ArrayFieldTemplate, + ObjectFieldTemplate, + uiSchema, + extraErrors, + }) + ); + }; + + onSchemaEdited = schema => this.setState({ schema, shareURL: null }); + + onUISchemaEdited = uiSchema => this.setState({ uiSchema, shareURL: null }); + + onFormDataEdited = formData => this.setState({ formData, shareURL: null }); + + onExtraErrorsEdited = extraErrors => + this.setState({ extraErrors, shareURL: null }); + + onThemeSelected = (theme, { stylesheet, theme: themeObj, editor }) => { + this.setState({ + theme, + themeObj, + stylesheet, + editor: editor ? editor : "default", + }); + }; + + setLiveSettings = ({ formData }) => this.setState({ liveSettings: formData }); + + onFormDataChange = ({ formData }) => + this.setState({ formData, shareURL: null }); + + onShare = () => { + const { + formData, + schema, + uiSchema, + liveSettings, + errorSchema, + theme, + } = this.state; + const { + location: { origin, pathname }, + } = document; + try { + const hash = btoa( + JSON.stringify({ + formData, + schema, + uiSchema, + theme, + liveSettings, + errorSchema, + }) + ); + this.setState({ shareURL: `${origin}${pathname}#${hash}` }); + } catch (err) { + this.setState({ shareURL: null }); + } + }; + + render() { + const { + schema, + uiSchema, + formData, + extraErrors, + liveSettings, + validate, + theme, + themeObj, + ArrayFieldTemplate, + ObjectFieldTemplate, + transformErrors, + } = this.state; + + const { themes } = this.props; + + const FormComponent = withTheme(themeObj); + + let templateProps = {}; + if (ArrayFieldTemplate) { + templateProps.ArrayFieldTemplate = ArrayFieldTemplate; + } + if (ObjectFieldTemplate) { + templateProps.ObjectFieldTemplate = ObjectFieldTemplate; + } + if (extraErrors) { + templateProps.extraErrors = extraErrors; + } + return ( +
+
+

react-jsonschema-form

+
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+ +
+
+ {extraErrors && ( +
+
+ +
+
+ )} +
+
+ {this.state.form && ( + + } + style={{ + width: "100%", + height: 1000, + border: 0, + }} + theme={theme}> + { + console.log("submitted formData", formData); + console.log("submit event", e); + }} + fields={{ geo: GeoPosition }} + validate={validate} + onBlur={(id, value) => + console.log(`Touched ${id} with value ${value}`) + } + onFocus={(id, value) => + console.log(`Focused ${id} with value ${value}`) + } + transformErrors={transformErrors} + onError={log("errors")} + /> + + )} +
+
+

+ Powered by{" "} + + react-jsonschema-form + + . + {process.env.SHOW_NETLIFY_BADGE === "true" && ( +

+ + + +
+ )} +

+
+
+ ); + } +} + +export default Playground; diff --git a/packages/playground/src/index.js b/packages/playground/src/index.js index 50f467114c..dab4d73e9a 100644 --- a/packages/playground/src/index.js +++ b/packages/playground/src/index.js @@ -1,620 +1,18 @@ -import React, { Component } from "react"; -import MonacoEditor from "react-monaco-editor"; -import { samples } from "./samples"; -import "react-app-polyfill/ie11"; -import Form, { withTheme } from "@rjsf/core"; -import DemoFrame from "./DemoFrame"; - -// deepEquals and shouldRender and isArguments are copied from rjsf-core. TODO: unify these utility functions. - -function isArguments(object) { - return Object.prototype.toString.call(object) === "[object Arguments]"; -} - -function deepEquals(a, b, ca = [], cb = []) { - // Partially extracted from node-deeper and adapted to exclude comparison - // checks for functions. - // https://github.com/othiym23/node-deeper - if (a === b) { - return true; - } else if (typeof a === "function" || typeof b === "function") { - // Assume all functions are equivalent - // see https://github.com/mozilla-services/react-jsonschema-form/issues/255 - return true; - } else if (typeof a !== "object" || typeof b !== "object") { - return false; - } else if (a === null || b === null) { - return false; - } else if (a instanceof Date && b instanceof Date) { - return a.getTime() === b.getTime(); - } else if (a instanceof RegExp && b instanceof RegExp) { - return ( - a.source === b.source && - a.global === b.global && - a.multiline === b.multiline && - a.lastIndex === b.lastIndex && - a.ignoreCase === b.ignoreCase - ); - } else if (isArguments(a) || isArguments(b)) { - if (!(isArguments(a) && isArguments(b))) { - return false; - } - let slice = Array.prototype.slice; - return deepEquals(slice.call(a), slice.call(b), ca, cb); - } else { - if (a.constructor !== b.constructor) { - return false; - } - - let ka = Object.keys(a); - let kb = Object.keys(b); - // don't bother with stack acrobatics if there's nothing there - if (ka.length === 0 && kb.length === 0) { - return true; - } - if (ka.length !== kb.length) { - return false; - } - - let cal = ca.length; - while (cal--) { - if (ca[cal] === a) { - return cb[cal] === b; - } - } - ca.push(a); - cb.push(b); - - ka.sort(); - kb.sort(); - for (var j = ka.length - 1; j >= 0; j--) { - if (ka[j] !== kb[j]) { - return false; - } - } - - let key; - for (let k = ka.length - 1; k >= 0; k--) { - key = ka[k]; - if (!deepEquals(a[key], b[key], ca, cb)) { - return false; - } - } - - ca.pop(); - cb.pop(); - - return true; - } -} - -function shouldRender(comp, nextProps, nextState) { - const { props, state } = comp; - return !deepEquals(props, nextProps) || !deepEquals(state, nextState); -} - -const log = type => console.log.bind(console, type); -const toJson = val => JSON.stringify(val, null, 2); -const liveSettingsSchema = { - type: "object", - properties: { - validate: { type: "boolean", title: "Live validation" }, - disable: { type: "boolean", title: "Disable whole form" }, - omitExtraData: { type: "boolean", title: "Omit extra data" }, - liveOmit: { type: "boolean", title: "Live omit" }, +import React from "react"; +import { render } from "react-dom"; +import { Theme as MuiTheme } from "@rjsf/material-ui"; +import Playground from "./app"; + +const themes = { + default: { + stylesheet: + "//maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css", + theme: {}, }, -}; - -const monacoEditorOptions = { - minimap: { - enabled: false, + "material-ui": { + stylesheet: "", + theme: MuiTheme, }, - automaticLayout: true, }; -class GeoPosition extends Component { - constructor(props) { - super(props); - this.state = { ...props.formData }; - } - - onChange(name) { - return event => { - this.setState({ [name]: parseFloat(event.target.value) }); - setImmediate(() => this.props.onChange(this.state)); - }; - } - - render() { - const { lat, lon } = this.state; - return ( -
-

Hey, I'm a custom component

-

- I'm registered as geo and referenced in - uiSchema as the ui:field to use for this - schema. -

-
-
- - -
-
- - -
-
-
- ); - } -} - -class Editor extends Component { - constructor(props) { - super(props); - this.state = { valid: true, code: props.code }; - } - - UNSAFE_componentWillReceiveProps(props) { - this.setState({ valid: true, code: props.code }); - } - - shouldComponentUpdate(nextProps, nextState) { - if (this.state.valid) { - return ( - JSON.stringify(JSON.parse(nextProps.code)) !== - JSON.stringify(JSON.parse(this.state.code)) - ); - } - return false; - } - - onCodeChange = code => { - try { - const parsedCode = JSON.parse(code); - this.setState({ valid: true, code }, () => - this.props.onChange(parsedCode) - ); - } catch (err) { - this.setState({ valid: false, code }); - } - }; - - render() { - const { title } = this.props; - const icon = this.state.valid ? "ok" : "remove"; - const cls = this.state.valid ? "valid" : "invalid"; - return ( -
-
- - {" " + title} -
- -
- ); - } -} - -class Selector extends Component { - constructor(props) { - super(props); - this.state = { current: "Simple" }; - } - - shouldComponentUpdate(nextProps, nextState) { - return shouldRender(this, nextProps, nextState); - } - - onLabelClick = label => { - return event => { - event.preventDefault(); - this.setState({ current: label }); - setImmediate(() => this.props.onSelected(samples[label])); - }; - }; - - render() { - return ( -
    - {Object.keys(samples).map((label, i) => { - return ( -
  • - - {label} - -
  • - ); - })} -
- ); - } -} - -function ThemeSelector({ theme, themes, select }) { - const schema = { - type: "string", - enum: Object.keys(themes), - }; - const uiSchema = { - "ui:placeholder": "Select theme", - }; - return ( -
- formData && select(formData, themes[formData]) - }> -
- - ); -} - -function SubthemeSelector({ subtheme, subthemes, select }) { - const schema = { - type: "string", - enum: Object.keys(subthemes), - }; - const uiSchema = { - "ui:placeholder": "Select subtheme", - }; - return ( -
- formData && select(formData, subthemes[formData]) - }> -
- - ); -} - -class CopyLink extends Component { - onCopyClick = event => { - this.input.select(); - document.execCommand("copy"); - }; - - render() { - const { shareURL, onShare } = this.props; - if (!shareURL) { - return ( - - ); - } - return ( -
- (this.input = input)} - className="form-control" - defaultValue={shareURL} - /> - - - -
- ); - } -} - -class Playground extends Component { - constructor(props) { - super(props); - // initialize state with Simple data sample - const { schema, uiSchema, formData, validate } = samples.Simple; - this.state = { - form: false, - schema, - uiSchema, - formData, - validate, - theme: "default", - subtheme: null, - liveSettings: { - validate: true, - disable: false, - omitExtraData: false, - liveOmit: false, - }, - shareURL: null, - FormComponent: withTheme({}), - }; - } - - componentDidMount() { - const hash = document.location.hash.match(/#(.*)/); - if (hash && typeof hash[1] === "string" && hash[1].length > 0) { - try { - this.load(JSON.parse(atob(hash[1]))); - } catch (err) { - alert("Unable to load form setup data."); - } - } else { - this.load({ theme: Object.keys(this.props.themes)[0] }); - } - } - - shouldComponentUpdate(nextProps, nextState) { - return shouldRender(this, nextProps, nextState); - } - - load = data => { - // Reset the ArrayFieldTemplate whenever you load new data - const { ArrayFieldTemplate, ObjectFieldTemplate, extraErrors } = data; - // uiSchema is missing on some examples. Provide a default to - // clear the field in all cases. - const { uiSchema = {} } = data; - - const { theme = this.state.theme } = data; - const { themes } = this.props; - this.onThemeSelected(theme, themes[theme]); - - // force resetting form component instance - this.setState({ form: false }, () => - this.setState({ - ...data, - form: true, - ArrayFieldTemplate, - ObjectFieldTemplate, - uiSchema, - extraErrors, - }) - ); - }; - - onSchemaEdited = schema => this.setState({ schema, shareURL: null }); - - onUISchemaEdited = uiSchema => this.setState({ uiSchema, shareURL: null }); - - onFormDataEdited = formData => this.setState({ formData, shareURL: null }); - - onExtraErrorsEdited = extraErrors => - this.setState({ extraErrors, shareURL: null }); - - onThemeSelected = ( - theme, - { subthemes, stylesheet, theme: themeObj } = {} - ) => { - this.setState({ - theme, - subthemes, - subtheme: null, - FormComponent: withTheme(themeObj), - stylesheet, - }); - }; - - onSubthemeSelected = (subtheme, { stylesheet }) => { - this.setState({ - subtheme, - stylesheet, - }); - }; - - setLiveSettings = ({ formData }) => this.setState({ liveSettings: formData }); - - onFormDataChange = ({ formData }) => - this.setState({ formData, shareURL: null }); - - onShare = () => { - const { - formData, - schema, - uiSchema, - liveSettings, - errorSchema, - theme, - } = this.state; - const { - location: { origin, pathname }, - } = document; - try { - const hash = btoa( - JSON.stringify({ - formData, - schema, - uiSchema, - theme, - liveSettings, - errorSchema, - }) - ); - this.setState({ shareURL: `${origin}${pathname}#${hash}` }); - } catch (err) { - this.setState({ shareURL: null }); - } - }; - - render() { - const { - schema, - uiSchema, - formData, - extraErrors, - liveSettings, - validate, - theme, - subtheme, - FormComponent, - ArrayFieldTemplate, - ObjectFieldTemplate, - transformErrors, - } = this.state; - - const { themes } = this.props; - - return ( -
-
-

react-jsonschema-form

-
-
- -
-
-
-
- -
-
- - {themes[theme].subthemes && ( - - )} - -
-
-
-
- -
-
- -
-
- -
-
- {extraErrors && ( -
-
- -
-
- )} -
-
- {this.state.form && ( - - } - style={{ - width: "100%", - height: 1000, - border: 0, - }} - theme={theme}> - { - console.log("submitted formData", formData); - console.log("submit event", e); - }} - fields={{ geo: GeoPosition }} - validate={validate} - onBlur={(id, value) => - console.log(`Touched ${id} with value ${value}`) - } - onFocus={(id, value) => - console.log(`Focused ${id} with value ${value}`) - } - transformErrors={transformErrors} - onError={log("errors")} - /> - - )} -
-
-

- Powered by{" "} - - react-jsonschema-form - - . - {process.env.SHOW_NETLIFY_BADGE === "true" && ( -

- - - -
- )} -

-
-
- ); - } -} - -export default Playground; +render(, document.getElementById("app")); diff --git a/packages/playground/webpack.config.dev.js b/packages/playground/webpack.config.dev.js index ec90802091..6cca065fea 100644 --- a/packages/playground/webpack.config.dev.js +++ b/packages/playground/webpack.config.dev.js @@ -7,8 +7,7 @@ module.exports = { mode: "development", devtool: "source-map", entry: [ - "webpack-hot-middleware/client?reload=true", - "./playground/app" + "./src/index" ], output: { path: path.join(__dirname, "build"), @@ -18,6 +17,13 @@ module.exports = { compress: true, port: 8080 }, + resolve: { + alias: { + "@material-ui/styles": path.resolve("node_modules", "@material-ui/styles"), + react: path.resolve('./node_modules/react'), + 'react-dom': path.resolve('./node_modules/react-dom') + } + }, plugins: [ new MonacoWebpackPlugin({ languages: ['json'] @@ -25,7 +31,7 @@ module.exports = { new webpack.HotModuleReplacementPlugin(), new HtmlWebpackPlugin({ filename: 'index.html', - template: 'playground/index.html' + template: 'index.html' }), ], module: { @@ -51,7 +57,7 @@ module.exports = { include: [ path.join(__dirname, "src"), path.join(__dirname, "playground"), - path.join(__dirname, "node_modules") + path.join(__dirname, "node_modules", "monaco-editor") ], }, ] diff --git a/packages/playground/webpack.config.dist.js b/packages/playground/webpack.config.dist.js index 13cba4cb5c..83fb377c44 100644 --- a/packages/playground/webpack.config.dist.js +++ b/packages/playground/webpack.config.dist.js @@ -44,7 +44,7 @@ module.exports = { include: [ path.join(__dirname, "src"), path.join(__dirname, "playground"), - path.join(__dirname, "node_modules"), + path.join(__dirname, "node_modules", "monaco-editor") ], }, ] diff --git a/packages/playground/webpack.config.prod.js b/packages/playground/webpack.config.prod.js index 4d070fc17f..b3c7096d30 100644 --- a/packages/playground/webpack.config.prod.js +++ b/packages/playground/webpack.config.prod.js @@ -5,7 +5,7 @@ const HtmlWebpackPlugin = require('html-webpack-plugin'); module.exports = { mode: "production", - entry: "./playground/app", + entry: "./src/index", output: { path: path.join(__dirname, "build"), filename: "bundle.js", @@ -23,11 +23,16 @@ module.exports = { }), new HtmlWebpackPlugin({ filename: 'index.html', - template: 'playground/index.html' + template: 'index.html' }) ], resolve: { - extensions: [".js", ".jsx", ".css"] + extensions: [".js", ".jsx", ".css"], + alias: { + "@material-ui/styles": path.resolve("node_modules", "@material-ui/styles"), + react: path.resolve('./node_modules/react'), + 'react-dom': path.resolve('./node_modules/react-dom') + } }, module: { rules: [ @@ -52,7 +57,7 @@ module.exports = { include: [ path.join(__dirname, "src"), path.join(__dirname, "playground"), - path.join(__dirname, "node_modules"), + path.join(__dirname, "node_modules", "monaco-editor"), ], } ]