Merge branch 'release' into feature/checkbox-radio
# Conflicts: # src/propertyControls/StyledControls.tsx
This commit is contained in:
commit
d3179745d4
|
|
@ -19,7 +19,6 @@ export const fetchPage = (
|
|||
type: ReduxActionTypes.FETCH_PAGE,
|
||||
payload: {
|
||||
pageId: pageId,
|
||||
renderMode: renderMode,
|
||||
},
|
||||
};
|
||||
};
|
||||
|
|
|
|||
|
|
@ -2,13 +2,11 @@ import Api from "./Api";
|
|||
import { ContainerWidgetProps } from "../widgets/ContainerWidget";
|
||||
import { ApiResponse } from "./ApiResponses";
|
||||
import { WidgetProps } from "../widgets/BaseWidget";
|
||||
import { RenderMode } from "../constants/WidgetConstants";
|
||||
import { PageAction } from "../constants/ActionConstants";
|
||||
import { AxiosPromise } from "axios";
|
||||
|
||||
export interface FetchPageRequest {
|
||||
pageId: string;
|
||||
renderMode: RenderMode;
|
||||
}
|
||||
|
||||
export interface FetchPublishedPageRequest {
|
||||
|
|
@ -41,6 +39,7 @@ export type FetchPublishedPageResponse = ApiResponse & {
|
|||
data: {
|
||||
id: string;
|
||||
dsl: Partial<ContainerWidgetProps<any>>;
|
||||
pageId: string;
|
||||
};
|
||||
};
|
||||
|
||||
|
|
@ -48,6 +47,23 @@ export interface SavePageResponse extends ApiResponse {
|
|||
pageId: string;
|
||||
}
|
||||
|
||||
export interface CreatePageRequest {
|
||||
applicationId: string;
|
||||
name: string;
|
||||
}
|
||||
|
||||
export interface CreatePageResponse extends ApiResponse {
|
||||
data: {};
|
||||
}
|
||||
|
||||
export interface FetchPageListResponse extends ApiResponse {
|
||||
data: Array<{
|
||||
id: string;
|
||||
name: string;
|
||||
layouts: Array<PageLayout>;
|
||||
}>;
|
||||
}
|
||||
|
||||
class PageApi extends Api {
|
||||
static url = "v1/pages";
|
||||
static getLayoutUpdateURL = (pageId: string, layoutId: string) => {
|
||||
|
|
@ -85,6 +101,16 @@ class PageApi extends Api {
|
|||
PageApi.getPublishedPageURL(pageRequest.pageId, pageRequest.layoutId),
|
||||
);
|
||||
}
|
||||
|
||||
static createPage(
|
||||
createPageRequest: CreatePageRequest,
|
||||
): AxiosPromise<FetchPageResponse> {
|
||||
return Api.post(PageApi.url, createPageRequest);
|
||||
}
|
||||
|
||||
static fetchPageList(): AxiosPromise<FetchPageListResponse> {
|
||||
return Api.get(PageApi.url);
|
||||
}
|
||||
}
|
||||
|
||||
export default PageApi;
|
||||
|
|
|
|||
8
app/client/src/common/DropdownOption.tsx
Normal file
8
app/client/src/common/DropdownOption.tsx
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
export type DropdownOption = {
|
||||
label: string;
|
||||
value: string;
|
||||
disabled?: boolean;
|
||||
displayText?: string;
|
||||
};
|
||||
|
||||
export default DropdownOption;
|
||||
155
app/client/src/components/editor/DropdownComponent.tsx
Normal file
155
app/client/src/components/editor/DropdownComponent.tsx
Normal file
|
|
@ -0,0 +1,155 @@
|
|||
import React, { Component } from "react";
|
||||
import styled from "styled-components";
|
||||
import { MenuItem, Menu, ControlGroup, InputGroup } from "@blueprintjs/core";
|
||||
import { BaseButton } from "../blueprint/ButtonComponent";
|
||||
import {
|
||||
ItemRenderer,
|
||||
Select,
|
||||
ItemListRenderer,
|
||||
IItemListRendererProps,
|
||||
} from "@blueprintjs/select";
|
||||
import DropdownOption from "../../common/DropdownOption";
|
||||
|
||||
const Dropdown = Select.ofType<DropdownOption>();
|
||||
const StyledDropdown = styled(Dropdown)``;
|
||||
|
||||
class DropdownComponent extends Component<DropdownComponentProps> {
|
||||
private newItemTextInput: HTMLInputElement | null = null;
|
||||
private setNewItemTextInput = (element: HTMLInputElement | null) => {
|
||||
this.newItemTextInput = element;
|
||||
};
|
||||
|
||||
public state = {
|
||||
isEditing: false,
|
||||
};
|
||||
|
||||
showTextBox = (): void => {
|
||||
this.setState({
|
||||
isEditing: true,
|
||||
});
|
||||
};
|
||||
|
||||
handleAddItem = (): void => {
|
||||
this.props.addItem &&
|
||||
this.newItemTextInput &&
|
||||
this.props.addItem.addItemHandler(this.newItemTextInput.value);
|
||||
this.setState({
|
||||
isEditing: false,
|
||||
});
|
||||
};
|
||||
|
||||
renderItemList: ItemListRenderer<DropdownOption> = (
|
||||
props: IItemListRendererProps<DropdownOption>,
|
||||
) => {
|
||||
if (this.props.addItem) {
|
||||
const renderItems = props.items.map(props.renderItem).filter(Boolean);
|
||||
const displayMode = (
|
||||
<BaseButton
|
||||
icon-right="plus"
|
||||
styleName="primary"
|
||||
filled={true}
|
||||
text={this.props.addItem.displayText}
|
||||
onClick={this.showTextBox}
|
||||
/>
|
||||
);
|
||||
const editMode = (
|
||||
<ControlGroup fill={true}>
|
||||
<InputGroup inputRef={this.setNewItemTextInput} />
|
||||
<BaseButton
|
||||
filled={true}
|
||||
text={this.props.addItem.displayText}
|
||||
onClick={this.handleAddItem}
|
||||
></BaseButton>
|
||||
</ControlGroup>
|
||||
);
|
||||
return (
|
||||
<Menu ulRef={props.itemsParentRef}>
|
||||
{renderItems}
|
||||
{!this.state.isEditing ? displayMode : editMode}
|
||||
</Menu>
|
||||
);
|
||||
}
|
||||
|
||||
return <React.Fragment />;
|
||||
};
|
||||
|
||||
searchItem = (query: string, option: DropdownOption): boolean => {
|
||||
return (
|
||||
option.label.toLowerCase().indexOf(query.toLowerCase()) > -1 ||
|
||||
option.value.toLowerCase().indexOf(query.toLowerCase()) > -1 ||
|
||||
(!!option.displayText &&
|
||||
option.displayText.toLowerCase().indexOf(query.toLowerCase()) > -1)
|
||||
);
|
||||
};
|
||||
onItemSelect = (item: DropdownOption): void => {
|
||||
this.props.selectHandler(item.value);
|
||||
};
|
||||
|
||||
renderItem: ItemRenderer<DropdownOption> = (
|
||||
option: DropdownOption,
|
||||
{ handleClick, modifiers },
|
||||
) => {
|
||||
if (!modifiers.matchesPredicate) {
|
||||
return null;
|
||||
}
|
||||
return (
|
||||
<MenuItem
|
||||
active={modifiers.active}
|
||||
key={option.value}
|
||||
label={option.displayText ? option.label : ""}
|
||||
onClick={handleClick}
|
||||
shouldDismissPopover={false}
|
||||
text={option.displayText || option.label}
|
||||
/>
|
||||
);
|
||||
};
|
||||
getSelectedDisplayText = () => {
|
||||
if (this.props.selected) {
|
||||
const selectedValue = this.props.selected.value;
|
||||
const item: DropdownOption | undefined = this.props.options.find(
|
||||
option => option.value === selectedValue,
|
||||
);
|
||||
|
||||
return item && (item.displayText || item.label);
|
||||
}
|
||||
return "";
|
||||
};
|
||||
render() {
|
||||
return (
|
||||
<StyledDropdown
|
||||
items={this.props.options}
|
||||
onItemSelect={this.onItemSelect}
|
||||
itemRenderer={this.renderItem}
|
||||
itemListRenderer={this.props.addItem && this.renderItemList}
|
||||
filterable={!!this.props.autocomplete}
|
||||
itemPredicate={this.searchItem}
|
||||
itemsEqual="value"
|
||||
popoverProps={{ minimal: true }}
|
||||
activeItem={this.props.selected}
|
||||
noResults={<MenuItem disabled={true} text="No results." />}
|
||||
>
|
||||
<BaseButton
|
||||
styleName="secondary"
|
||||
text={this.getSelectedDisplayText()}
|
||||
rightIcon="chevron-down"
|
||||
/>
|
||||
</StyledDropdown>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export interface DropdownComponentProps {
|
||||
options: DropdownOption[];
|
||||
selectHandler: (selectedValue: string) => void;
|
||||
selected?: DropdownOption;
|
||||
multiselectDisplayType?: "TAGS" | "CHECKBOXES";
|
||||
checked?: boolean;
|
||||
multi?: boolean;
|
||||
autocomplete?: boolean;
|
||||
addItem?: {
|
||||
displayText: string;
|
||||
addItemHandler: (name: string) => void;
|
||||
};
|
||||
}
|
||||
|
||||
export default DropdownComponent;
|
||||
18
app/client/src/components/viewer/AppViewerHeader.tsx
Normal file
18
app/client/src/components/viewer/AppViewerHeader.tsx
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
import React from "react";
|
||||
import styled from "styled-components";
|
||||
|
||||
const HeaderWrapper = styled.header`
|
||||
height: ${props => props.theme.headerHeight};
|
||||
width: 100vw;
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
background: white;
|
||||
`;
|
||||
type AppViewerHeaderProps = {};
|
||||
|
||||
export const AppViewerHeader = (props: AppViewerHeaderProps) => {
|
||||
return <HeaderWrapper {...props} />;
|
||||
};
|
||||
|
||||
export default AppViewerHeader;
|
||||
76
app/client/src/components/viewer/SideNav.tsx
Normal file
76
app/client/src/components/viewer/SideNav.tsx
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
import React, { useState } from "react";
|
||||
import styled from "styled-components";
|
||||
import { Menu, MenuItem, IconName, Button } from "@blueprintjs/core";
|
||||
|
||||
export type SideNavItem = {
|
||||
id: string;
|
||||
icon?: string;
|
||||
text: string;
|
||||
};
|
||||
|
||||
type SideNavProps = {
|
||||
items: SideNavItem[];
|
||||
active?: SideNavItem;
|
||||
onSelect: Function;
|
||||
headeroffset?: number;
|
||||
};
|
||||
|
||||
/* eslint-disable no-unexpected-multiline */
|
||||
|
||||
const SideNavWrapper = styled.div<{
|
||||
isExpanded: boolean;
|
||||
headeroffset?: number;
|
||||
}>`
|
||||
height: calc(100vh - ${props => props.headeroffset || 50}px);
|
||||
margin-top: ${props => props.headeroffset || 50}px;
|
||||
width: ${props =>
|
||||
props.isExpanded
|
||||
? props.theme.sideNav.maxWidth
|
||||
: props.theme.sideNav.minWidth}px;
|
||||
transition: width 0.5s ease-out;
|
||||
`;
|
||||
|
||||
const ToggleButton = styled(Button)<{ headeroffset?: number }>`
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: ${props => props.headeroffset || 50}px;
|
||||
height: ${props => props.headeroffset || 50}px;
|
||||
`;
|
||||
|
||||
export const SideNav = (props: SideNavProps) => {
|
||||
const [isExpanded, setIsExpanded] = useState(true);
|
||||
const select = (item: SideNavItem) => () => {
|
||||
props.onSelect(item);
|
||||
};
|
||||
const renderItems = (items: SideNavItem[]) => {
|
||||
return items.map(item => {
|
||||
return (
|
||||
<MenuItem
|
||||
icon={item.icon as IconName}
|
||||
active={props.active && item.id === props.active.id}
|
||||
key={item.id}
|
||||
onClick={select(item)}
|
||||
text={item.text}
|
||||
/>
|
||||
);
|
||||
});
|
||||
};
|
||||
const toggleCollapse = () => {
|
||||
setIsExpanded(!isExpanded);
|
||||
};
|
||||
|
||||
return (
|
||||
<SideNavWrapper isExpanded={isExpanded} headeroffset={props.headeroffset}>
|
||||
<ToggleButton
|
||||
headeroffset={props.headeroffset}
|
||||
onClick={toggleCollapse}
|
||||
icon={isExpanded ? "cross" : "menu"}
|
||||
minimal
|
||||
></ToggleButton>
|
||||
<Menu>{renderItems(props.items)}</Menu>
|
||||
</SideNavWrapper>
|
||||
);
|
||||
};
|
||||
|
||||
export default SideNav;
|
||||
|
|
@ -37,6 +37,12 @@ export type Theme = {
|
|||
propertyPane: PropertyPaneTheme;
|
||||
headerHeight: string;
|
||||
sidebarWidth: string;
|
||||
sideNav: {
|
||||
minWidth: number;
|
||||
maxWidth: number;
|
||||
bgColor: Color;
|
||||
fontColor: Color;
|
||||
};
|
||||
};
|
||||
|
||||
export const getColorWithOpacity = (color: Color, opacity: number) => {
|
||||
|
|
@ -48,12 +54,12 @@ export const getColorWithOpacity = (color: Color, opacity: number) => {
|
|||
return `rgba(${r},${g},${b},${opacity})`;
|
||||
};
|
||||
|
||||
export const getBorderCSSShorthand = (border?: ThemeBorder) : string => {
|
||||
let values : string[] = []
|
||||
export const getBorderCSSShorthand = (border?: ThemeBorder): string => {
|
||||
const values: string[] = [];
|
||||
_.forIn(border, (value, key) => {
|
||||
values.push(key === 'thickness' ? value + "px" : value)
|
||||
})
|
||||
return values.join(" ")
|
||||
values.push(key === "thickness" ? value + "px" : value);
|
||||
});
|
||||
return values.join(" ");
|
||||
};
|
||||
|
||||
export const theme: Theme = {
|
||||
|
|
@ -118,6 +124,12 @@ export const theme: Theme = {
|
|||
],
|
||||
sidebarWidth: "350px",
|
||||
headerHeight: "50px",
|
||||
sideNav: {
|
||||
maxWidth: 250,
|
||||
minWidth: 50,
|
||||
bgColor: Colors.OXFORD_BLUE,
|
||||
fontColor: Colors.WHITE,
|
||||
},
|
||||
};
|
||||
|
||||
export { css, createGlobalStyle, keyframes, ThemeProvider };
|
||||
|
|
|
|||
|
|
@ -59,7 +59,13 @@ export const ReduxActionTypes: { [key: string]: string } = {
|
|||
FETCH_PUBLISHED_PAGE_SUCCESS: "FETCH_PUBLISHED_PAGE_SUCCESS",
|
||||
PUBLISH_APPLICATION_INIT: "PUBLISH_APPLICATION_INIT",
|
||||
PUBLISH_APPLICATION_SUCCESS: "PUBLISH_APPLICATION_SUCCESS",
|
||||
CREATE_PAGE_INIT: "CREATE_PAGE_INIT",
|
||||
CREATE_PAGE_SUCCESS: "CREATE_PAGE_SUCCESS",
|
||||
FETCH_PAGE_LIST_INIT: "FETCH_PAGE_LIST_INIT",
|
||||
FETCH_PAGE_LIST_SUCCESS: "FETCH_PAGE_LIST_SUCCESS",
|
||||
INITIALIZE_PAGE_VIEWER: "INITIALIZE_PAGE_VIEWER",
|
||||
};
|
||||
|
||||
export type ReduxActionType = (typeof ReduxActionTypes)[keyof typeof ReduxActionTypes];
|
||||
|
||||
export const ReduxActionErrorTypes: { [key: string]: string } = {
|
||||
|
|
@ -84,6 +90,8 @@ export const ReduxActionErrorTypes: { [key: string]: string } = {
|
|||
CREATE_RESOURCE_ERROR: "CREATE_RESOURCE_ERROR",
|
||||
FETCH_PUBLISHED_PAGE_ERROR: "FETCH_PUBLISHED_PAGE_ERROR",
|
||||
PUBLISH_APPLICATION_ERROR: "PUBLISH_APPLICATION_ERROR",
|
||||
CREATE_PAGE_ERROR: "CREATE_PAGE_ERROR",
|
||||
FETCH_PAGE_LIST_ERROR: "FETCH_PAGE_LIST_ERROR",
|
||||
};
|
||||
|
||||
export type ReduxActionErrorType = (typeof ReduxActionErrorTypes)[keyof typeof ReduxActionErrorTypes];
|
||||
|
|
@ -107,18 +115,18 @@ export interface UpdateCanvasPayload {
|
|||
currentApplicationId: string;
|
||||
}
|
||||
|
||||
export interface LayoutPayload {
|
||||
layoutId: string;
|
||||
pageId: string;
|
||||
widgets: { [widgetId: string]: WidgetProps };
|
||||
}
|
||||
|
||||
export interface ShowPropertyPanePayload {
|
||||
widgetId: string;
|
||||
node: RefObject<HTMLDivElement>;
|
||||
toggle: boolean;
|
||||
}
|
||||
|
||||
export type PageListPayload = Array<{
|
||||
pageName: string;
|
||||
pageId: string;
|
||||
layoutId: string;
|
||||
}>;
|
||||
|
||||
// export interface LoadAPIResponsePayload extends ExecuteActionResponse {}
|
||||
|
||||
// export interface LoadQueryResponsePayload extends ExecuteActionResponse {}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ export const LOGIN_URL = "/login";
|
|||
export const BUILDER_URL = "/builder";
|
||||
export const API_EDITOR_URL = `${BUILDER_URL}/api`;
|
||||
export const API_EDITOR_ID_URL = (id = ":id") => `${API_EDITOR_URL}/${id}`;
|
||||
export const APP_VIEW_URL = `/view/pages/:pageId`;
|
||||
|
||||
export const EDITOR_ROUTES = [
|
||||
{
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import App from "./App";
|
|||
import Editor from "./pages/Editor";
|
||||
import PageNotFound from "./pages/common/PageNotFound";
|
||||
import LoginPage from "./pages/common/LoginPage";
|
||||
import AppViewer from "./pages/AppViewer";
|
||||
import * as serviceWorker from "./serviceWorker";
|
||||
import { Router, Route, Switch } from "react-router-dom";
|
||||
import { createStore, applyMiddleware } from "redux";
|
||||
|
|
@ -20,7 +21,12 @@ import HTML5Backend from "react-dnd-html5-backend";
|
|||
import { appInitializer } from "./utils/AppsmithUtils";
|
||||
import ProtectedRoute from "./pages/common/ProtectedRoute";
|
||||
import { composeWithDevTools } from "redux-devtools-extension/logOnlyInProduction";
|
||||
import { BASE_URL, BUILDER_URL, LOGIN_URL } from "./constants/routes";
|
||||
import {
|
||||
BASE_URL,
|
||||
BUILDER_URL,
|
||||
LOGIN_URL,
|
||||
APP_VIEW_URL,
|
||||
} from "./constants/routes";
|
||||
|
||||
appInitializer();
|
||||
const sagaMiddleware = createSagaMiddleware();
|
||||
|
|
@ -37,6 +43,7 @@ ReactDOM.render(
|
|||
<Switch>
|
||||
<Route exact path={BASE_URL} component={App} />
|
||||
<ProtectedRoute path={BUILDER_URL} component={Editor} />
|
||||
<ProtectedRoute path={APP_VIEW_URL} component={AppViewer} />
|
||||
<Route exact path={LOGIN_URL} component={LoginPage} />
|
||||
<Route component={PageNotFound} />
|
||||
</Switch>
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
import { WidgetCardProps } from "../widgets/BaseWidget";
|
||||
import { generateReactKey } from "../utils/generators";
|
||||
/* eslint-disable no-useless-computed-key */
|
||||
|
||||
const WidgetSidebarResponse: {
|
||||
[id: string]: WidgetCardProps[];
|
||||
|
|
|
|||
25
app/client/src/pages/AppViewer/AppPage.tsx
Normal file
25
app/client/src/pages/AppViewer/AppPage.tsx
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
import React from "react";
|
||||
import styled from "styled-components";
|
||||
import { WidgetProps } from "../../widgets/BaseWidget";
|
||||
import { RenderModes } from "../../constants/WidgetConstants";
|
||||
import WidgetFactory from "../../utils/WidgetFactory";
|
||||
import { ContainerWidgetProps } from "../../widgets/ContainerWidget";
|
||||
|
||||
const PageView = styled.div`
|
||||
flex-grow: 1;
|
||||
`;
|
||||
|
||||
type AppPageProps = {
|
||||
dsl: ContainerWidgetProps<WidgetProps>;
|
||||
};
|
||||
|
||||
export const AppPage = (props: AppPageProps) => {
|
||||
return (
|
||||
<PageView>
|
||||
{props.dsl.widgetId &&
|
||||
WidgetFactory.createWidget(props.dsl, RenderModes.PAGE)}
|
||||
</PageView>
|
||||
);
|
||||
};
|
||||
|
||||
export default AppPage;
|
||||
117
app/client/src/pages/AppViewer/index.tsx
Normal file
117
app/client/src/pages/AppViewer/index.tsx
Normal file
|
|
@ -0,0 +1,117 @@
|
|||
import React, { Component } from "react";
|
||||
import styled from "styled-components";
|
||||
import { connect } from "react-redux";
|
||||
import { withRouter } from "react-router";
|
||||
import { AppState } from "../../reducers";
|
||||
import {
|
||||
ReduxActionTypes,
|
||||
PageListPayload,
|
||||
} from "../../constants/ReduxActionConstants";
|
||||
import {
|
||||
getCurrentPageId,
|
||||
getCurrentPageLayoutDSL,
|
||||
getPageList,
|
||||
} from "../../selectors/appViewSelectors";
|
||||
import { ContainerWidgetProps } from "../../widgets/ContainerWidget";
|
||||
import { WidgetProps } from "../../widgets/BaseWidget";
|
||||
import { executeAction } from "../../actions/widgetActions";
|
||||
import { ActionPayload } from "../../constants/ActionConstants";
|
||||
import AppPage from "./AppPage";
|
||||
import SideNav, { SideNavItem } from "../../components/viewer/SideNav";
|
||||
import AppViewerHeader from "../../components/viewer/AppViewerHeader";
|
||||
|
||||
const AppViewWrapper = styled.div`
|
||||
margin-top: ${props => props.theme.headerHeight};
|
||||
background: white;
|
||||
`;
|
||||
const AppViewerBody = styled.section`
|
||||
display: flex;
|
||||
flex-direction: row;
|
||||
align-items: stretch;
|
||||
justify-content: flex-start;
|
||||
`;
|
||||
export type AppViewerProps = {
|
||||
currentPageId?: string;
|
||||
currentLayoutId?: string;
|
||||
executeAction: Function;
|
||||
fetchPageWidgets: Function;
|
||||
pages?: PageListPayload;
|
||||
dsl?: ContainerWidgetProps<WidgetProps>;
|
||||
initializeAppViewer: Function;
|
||||
match: any;
|
||||
location: any;
|
||||
history: any;
|
||||
};
|
||||
|
||||
class AppViewer extends Component<AppViewerProps> {
|
||||
handlePageSelect = (item: SideNavItem) => {
|
||||
this.props.fetchPageWidgets(item.id);
|
||||
};
|
||||
|
||||
componentDidMount() {
|
||||
this.props.initializeAppViewer(this.props.currentPageId);
|
||||
}
|
||||
|
||||
public render() {
|
||||
const items: SideNavItem[] | undefined =
|
||||
this.props.pages &&
|
||||
this.props.pages.map(page => ({
|
||||
text: page.pageName,
|
||||
id: page.pageId,
|
||||
}));
|
||||
|
||||
const currentPage =
|
||||
this.props.pages &&
|
||||
this.props.pages.find(page => page.pageId === this.props.currentPageId);
|
||||
return (
|
||||
<AppViewWrapper>
|
||||
<AppViewerHeader />
|
||||
<AppViewerBody>
|
||||
{items && (
|
||||
<SideNav
|
||||
items={items}
|
||||
onSelect={this.handlePageSelect}
|
||||
active={
|
||||
currentPage && {
|
||||
text: currentPage.pageName,
|
||||
id: currentPage.pageId,
|
||||
}
|
||||
}
|
||||
/>
|
||||
)}
|
||||
{this.props.dsl && <AppPage dsl={this.props.dsl} />}
|
||||
</AppViewerBody>
|
||||
</AppViewWrapper>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const mapStateToProps = (state: AppState, props: AppViewerProps) => ({
|
||||
currentPageId: getCurrentPageId(state, props),
|
||||
dsl: getCurrentPageLayoutDSL(state),
|
||||
pages: getPageList(state),
|
||||
});
|
||||
|
||||
const mapDispatchToProps = (dispatch: any) => ({
|
||||
executeAction: (actionPayloads?: ActionPayload[]) =>
|
||||
dispatch(executeAction(actionPayloads)),
|
||||
fetchPageWidgets: (pageId: string) =>
|
||||
dispatch({
|
||||
type: ReduxActionTypes.FETCH_PUBLISHED_PAGE_INIT,
|
||||
payload: {
|
||||
pageId,
|
||||
},
|
||||
}),
|
||||
initializeAppViewer: (pageId: string) =>
|
||||
dispatch({
|
||||
type: ReduxActionTypes.INITIALIZE_PAGE_VIEWER,
|
||||
payload: { pageId },
|
||||
}),
|
||||
});
|
||||
|
||||
export default withRouter(
|
||||
connect(
|
||||
mapStateToProps,
|
||||
mapDispatchToProps,
|
||||
)(AppViewer),
|
||||
);
|
||||
|
|
@ -1,17 +1,10 @@
|
|||
import React, { createContext, useState, Context } from "react";
|
||||
import styled from "styled-components";
|
||||
import WidgetFactory from "../../utils/WidgetFactory";
|
||||
import { RenderModes } from "../../constants/WidgetConstants";
|
||||
import { ContainerWidgetProps } from "../../widgets/ContainerWidget";
|
||||
import { WidgetProps } from "../../widgets/BaseWidget";
|
||||
import PropertyPane from "./PropertyPane";
|
||||
|
||||
const ArtBoard = styled.div`
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
overflow: auto;
|
||||
`;
|
||||
import ArtBoard from "../common/ArtBoard";
|
||||
|
||||
interface CanvasProps {
|
||||
dsl: ContainerWidgetProps<WidgetProps>;
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
import React from "react";
|
||||
import styled from "styled-components";
|
||||
import { Breadcrumbs, IBreadcrumbProps, Spinner } from "@blueprintjs/core";
|
||||
import DropdownComponent from "../../components/editor/DropdownComponent";
|
||||
import { PageListPayload } from "../../constants/ReduxActionConstants";
|
||||
import { DropdownOption } from "../../common/DropdownOption";
|
||||
import { BaseButton } from "../../components/blueprint/ButtonComponent";
|
||||
|
||||
const Header = styled.header`
|
||||
|
|
@ -14,6 +17,10 @@ const Header = styled.header`
|
|||
font-size: ${props => props.theme.fontSizes[1]}px;
|
||||
`;
|
||||
|
||||
const PageSelector = styled(DropdownComponent)`
|
||||
flex: 2;
|
||||
`;
|
||||
|
||||
const NotificationText = styled.div`
|
||||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
|
|
@ -25,11 +32,11 @@ const PreviewPublishSection = styled.div`
|
|||
display: flex;
|
||||
justify-content: space-evenly;
|
||||
align-items: center;
|
||||
flex-grow: 1;
|
||||
flex-shrink: 1;
|
||||
`;
|
||||
|
||||
const StretchedBreadCrumb = styled(Breadcrumbs)`
|
||||
flex-grow: 10;
|
||||
flex-shrink: 1;
|
||||
* {
|
||||
font-family: ${props => props.theme.fonts[0]};
|
||||
font-size: ${props => props.theme.fontSizes[2]}px;
|
||||
|
|
@ -43,33 +50,58 @@ type EditorHeaderProps = {
|
|||
notificationText?: string;
|
||||
pageName: string;
|
||||
onPublish: React.FormEventHandler;
|
||||
onPreview: React.FormEventHandler;
|
||||
onCreatePage: (name: string) => void;
|
||||
pages?: PageListPayload;
|
||||
currentPageId: string;
|
||||
switchToPage: (selectedPage: string) => void;
|
||||
isPublishing: boolean;
|
||||
};
|
||||
|
||||
export const EditorHeader = (props: EditorHeaderProps) => {
|
||||
const navigation: IBreadcrumbProps[] = [
|
||||
{ href: "#", icon: "folder-close", text: "appsmith-dev" },
|
||||
{ href: "#", icon: "folder-close", text: "application" },
|
||||
{ icon: "page-layout", text: props.pageName, current: true },
|
||||
{ icon: "page-layout", text: "", current: true },
|
||||
];
|
||||
|
||||
const pageList:
|
||||
| Array<{
|
||||
label: string;
|
||||
value: string;
|
||||
}>
|
||||
| undefined =
|
||||
props.pages &&
|
||||
props.pages.map((page: { pageName: string; pageId: string }) => ({
|
||||
label: page.pageName,
|
||||
value: page.pageId,
|
||||
}));
|
||||
|
||||
const selectedPage: DropdownOption | undefined =
|
||||
pageList && pageList.find(page => page.value === props.currentPageId);
|
||||
|
||||
return (
|
||||
<Header>
|
||||
<StretchedBreadCrumb items={navigation} />
|
||||
{pageList && (
|
||||
<PageSelector
|
||||
options={pageList}
|
||||
selectHandler={props.switchToPage}
|
||||
selected={selectedPage}
|
||||
addItem={{
|
||||
displayText: "Create Page",
|
||||
addItemHandler: props.onCreatePage,
|
||||
}}
|
||||
/>
|
||||
)}
|
||||
<NotificationText>
|
||||
{props.notificationText && <Spinner size={Spinner.SIZE_SMALL} />}
|
||||
<span>{props.notificationText}</span>
|
||||
</NotificationText>
|
||||
<PreviewPublishSection>
|
||||
<BaseButton
|
||||
onClick={props.onPreview}
|
||||
text="Preview"
|
||||
styleName="secondary"
|
||||
filled
|
||||
/>
|
||||
<BaseButton
|
||||
onClick={props.onPublish}
|
||||
text="Publish"
|
||||
loading={props.isPublishing}
|
||||
styleName="primary"
|
||||
filled
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,6 @@ const Wrapper = styled.div`
|
|||
grid-template-columns: 1fr 4fr;
|
||||
width: ${props => props.theme.sidebarWidth};
|
||||
box-shadow: 0px 1px 3px ${props => props.theme.colors.paneBG};
|
||||
z-index: 30;
|
||||
`;
|
||||
|
||||
const NavBar = styled.div`
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ import {
|
|||
getCurrentPageId,
|
||||
getDenormalizedDSL,
|
||||
getCurrentPageName,
|
||||
getPageWidgetId,
|
||||
} from "../../selectors/editorSelectors";
|
||||
import { RenderModes } from "../../constants/WidgetConstants";
|
||||
import { ContainerWidgetProps } from "../../widgets/ContainerWidget";
|
||||
|
|
@ -120,7 +119,6 @@ class WidgetsEditor extends React.Component<EditorProps> {
|
|||
const mapStateToProps = (state: AppState) => {
|
||||
return {
|
||||
dsl: getDenormalizedDSL(state),
|
||||
pageWidgetId: getPageWidgetId(state),
|
||||
currentPageId: getCurrentPageId(state),
|
||||
currentLayoutId: getCurrentLayoutId(state),
|
||||
currentPageName: getCurrentPageName(state),
|
||||
|
|
|
|||
|
|
@ -7,8 +7,16 @@ import {
|
|||
getCurrentApplicationId,
|
||||
getCurrentLayoutId,
|
||||
getCurrentPageId,
|
||||
getPageList,
|
||||
getIsPublishingApplication,
|
||||
getPublishingError,
|
||||
getIsPageSaving,
|
||||
} from "../../selectors/editorSelectors";
|
||||
import { ReduxActionTypes } from "../../constants/ReduxActionConstants";
|
||||
import {
|
||||
ReduxActionTypes,
|
||||
PageListPayload,
|
||||
} from "../../constants/ReduxActionConstants";
|
||||
import { Dialog, Classes, AnchorButton } from "@blueprintjs/core";
|
||||
|
||||
type EditorProps = {
|
||||
currentPageName: string;
|
||||
|
|
@ -18,19 +26,46 @@ type EditorProps = {
|
|||
currentPageId: string;
|
||||
publishApplication: Function;
|
||||
previewPage: Function;
|
||||
createPage: Function;
|
||||
fetchPageList: Function;
|
||||
pages: PageListPayload;
|
||||
switchPage: (pageId: string) => void;
|
||||
isPublishing: boolean;
|
||||
errorPublishing: boolean;
|
||||
};
|
||||
|
||||
class Editor extends Component<EditorProps> {
|
||||
handlePublish = () => {
|
||||
if (this.props.currentApplicationId)
|
||||
this.props.publishApplication(this.props.currentApplicationId);
|
||||
public state = {
|
||||
isDialogOpen: false,
|
||||
};
|
||||
handlePreview = () => {
|
||||
this.props.previewPage(
|
||||
this.props.currentPageId,
|
||||
this.props.currentLayoutId,
|
||||
);
|
||||
//TODO(abhinav): Add logic to open in a different tab.
|
||||
|
||||
componentDidMount() {
|
||||
this.props.fetchPageList();
|
||||
}
|
||||
componentDidUpdate(currently: EditorProps) {
|
||||
const previously = this.props;
|
||||
if (
|
||||
!currently.isPublishing &&
|
||||
previously.isPublishing &&
|
||||
!currently.errorPublishing
|
||||
) {
|
||||
this.setState({
|
||||
isDialogOpen: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
handleDialogClose = () => {
|
||||
this.setState({
|
||||
isDialogOpen: false,
|
||||
});
|
||||
};
|
||||
handlePublish = () => {
|
||||
if (this.props.currentApplicationId) {
|
||||
this.props.publishApplication(this.props.currentApplicationId);
|
||||
}
|
||||
};
|
||||
handleCreatePage = (pageName: string) => {
|
||||
this.props.createPage(this.props.currentApplicationId, pageName);
|
||||
};
|
||||
public render() {
|
||||
return (
|
||||
|
|
@ -39,9 +74,37 @@ class Editor extends Component<EditorProps> {
|
|||
notificationText={this.props.isSaving ? "Saving page..." : undefined}
|
||||
pageName={this.props.currentPageName}
|
||||
onPublish={this.handlePublish}
|
||||
onPreview={this.handlePreview}
|
||||
onCreatePage={this.handleCreatePage}
|
||||
pages={this.props.pages}
|
||||
currentPageId={this.props.currentPageId}
|
||||
switchToPage={this.props.switchPage}
|
||||
isPublishing={this.props.isPublishing}
|
||||
/>
|
||||
<MainContainer />
|
||||
<Dialog
|
||||
isOpen={this.state.isDialogOpen}
|
||||
canOutsideClickClose={true}
|
||||
canEscapeKeyClose={true}
|
||||
title="Application Published"
|
||||
onClose={this.handleDialogClose}
|
||||
icon="tick-circle"
|
||||
>
|
||||
<div className={Classes.DIALOG_BODY}>
|
||||
<p>
|
||||
Your awesome application is now published with the current
|
||||
changes!
|
||||
</p>
|
||||
</div>
|
||||
<div className={Classes.DIALOG_FOOTER}>
|
||||
<div className={Classes.DIALOG_FOOTER_ACTIONS}>
|
||||
<AnchorButton
|
||||
target="_blank"
|
||||
href={`/view/pages/${this.props.currentPageId}`}
|
||||
text="View Application"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</Dialog>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
@ -49,10 +112,13 @@ class Editor extends Component<EditorProps> {
|
|||
|
||||
const mapStateToProps = (state: AppState) => ({
|
||||
currentPageName: state.ui.editor.currentPageName,
|
||||
isSaving: state.ui.editor.isSaving,
|
||||
isSaving: getIsPageSaving(state),
|
||||
currentApplicationId: getCurrentApplicationId(state),
|
||||
currentPageId: getCurrentPageId(state),
|
||||
currentLayoutId: getCurrentLayoutId(state),
|
||||
pages: getPageList(state),
|
||||
errorPublishing: getPublishingError(state),
|
||||
isPublishing: getIsPublishingApplication(state),
|
||||
});
|
||||
|
||||
const mapDispatchToProps = (dispatch: any) => {
|
||||
|
|
@ -74,6 +140,28 @@ const mapDispatchToProps = (dispatch: any) => {
|
|||
},
|
||||
});
|
||||
},
|
||||
createPage: (applicationId: string, name: string) => {
|
||||
dispatch({
|
||||
type: ReduxActionTypes.CREATE_PAGE_INIT,
|
||||
payload: {
|
||||
applicationId,
|
||||
name,
|
||||
},
|
||||
});
|
||||
},
|
||||
fetchPageList: () => {
|
||||
dispatch({
|
||||
type: ReduxActionTypes.FETCH_PAGE_LIST_INIT,
|
||||
});
|
||||
},
|
||||
switchPage: (pageId: string) => {
|
||||
dispatch({
|
||||
type: ReduxActionTypes.FETCH_PAGE,
|
||||
payload: {
|
||||
pageId,
|
||||
},
|
||||
});
|
||||
},
|
||||
};
|
||||
};
|
||||
|
||||
|
|
|
|||
8
app/client/src/pages/common/ArtBoard.tsx
Normal file
8
app/client/src/pages/common/ArtBoard.tsx
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
import styled from "styled-components";
|
||||
|
||||
export default styled.div`
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
overflow: auto;
|
||||
`;
|
||||
|
|
@ -4,6 +4,7 @@ import { ControlType } from "../constants/PropertyControlConstants";
|
|||
import { Button, MenuItem } from "@blueprintjs/core";
|
||||
import { IItemRendererProps } from "@blueprintjs/select";
|
||||
import { ControlWrapper, StyledDropDown } from "./StyledControls";
|
||||
import DropdownOption from "../common/DropdownOption";
|
||||
|
||||
class DropDownControl extends BaseControl<DropDownControlProps> {
|
||||
render() {
|
||||
|
|
@ -52,11 +53,6 @@ class DropDownControl extends BaseControl<DropDownControlProps> {
|
|||
}
|
||||
}
|
||||
|
||||
export interface DropdownOption {
|
||||
label: string;
|
||||
value: string;
|
||||
}
|
||||
|
||||
export interface DropDownControlProps extends ControlProps {
|
||||
options: DropdownOption[];
|
||||
}
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import styled from "styled-components";
|
|||
import { Select } from "@blueprintjs/select";
|
||||
import { Switch, InputGroup } from "@blueprintjs/core";
|
||||
import { ContainerOrientation } from "../constants/WidgetConstants";
|
||||
import DropdownOption from "../common/DropdownOption";
|
||||
|
||||
type ControlWrapperProps = {
|
||||
orientation?: ContainerOrientation;
|
||||
|
|
@ -25,7 +26,7 @@ export const ControlWrapper = styled.div<ControlWrapperProps>`
|
|||
}
|
||||
`;
|
||||
|
||||
const DropDown = Select.ofType<{ label: string; value: string }>();
|
||||
const DropDown = Select.ofType<DropdownOption>();
|
||||
export const StyledDropDown = styled(DropDown)`
|
||||
&&& button {
|
||||
background: ${props => props.theme.colors.paneInputBG};
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ export interface PropertyPaneConfigState {
|
|||
configVersion: number;
|
||||
}
|
||||
/**
|
||||
* Todo: Remove hardcoding of config response
|
||||
* TODO: Remove hardcoding of config response
|
||||
*/
|
||||
|
||||
const propertyPaneConfigReducer = createReducer(initialState, {
|
||||
|
|
@ -53,7 +53,6 @@ const propertyPaneConfigReducer = createReducer(initialState, {
|
|||
action: ReduxAction<PropertyPaneConfigState>,
|
||||
) => {
|
||||
return { ...PropertyPaneConfigResponse };
|
||||
return { ...action.payload };
|
||||
},
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -13,6 +13,7 @@ import { PropertyPaneReduxState } from "./uiReducers/propertyPaneReducer";
|
|||
import { WidgetConfigReducerState } from "./entityReducers/widgetConfigReducer";
|
||||
import { WidgetSidebarReduxState } from "./uiReducers/widgetSidebarReducer";
|
||||
import { ResourceDataState } from "./entityReducers/resourcesReducer";
|
||||
import { AppViewReduxState } from "./uiReducers/appViewReducer";
|
||||
|
||||
const appReducer = combineReducers({
|
||||
entities: entityReducer,
|
||||
|
|
@ -28,6 +29,7 @@ export interface AppState {
|
|||
editor: EditorReduxState;
|
||||
propertyPane: PropertyPaneReduxState;
|
||||
errors: ErrorReduxState;
|
||||
view: AppViewReduxState;
|
||||
};
|
||||
entities: {
|
||||
canvasWidgets: CanvasWidgetsReduxState;
|
||||
|
|
|
|||
54
app/client/src/reducers/uiReducers/appViewReducer.tsx
Normal file
54
app/client/src/reducers/uiReducers/appViewReducer.tsx
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
import { createReducer } from "../../utils/AppsmithUtils";
|
||||
import { WidgetProps } from "../../widgets/BaseWidget";
|
||||
import { ContainerWidgetProps } from "../../widgets/ContainerWidget";
|
||||
import {
|
||||
ReduxAction,
|
||||
ReduxActionTypes,
|
||||
PageListPayload,
|
||||
} from "../../constants/ReduxActionConstants";
|
||||
|
||||
const initialState: AppViewReduxState = {
|
||||
isFetchingPage: false,
|
||||
pages: [],
|
||||
};
|
||||
|
||||
const appViewReducer = createReducer(initialState, {
|
||||
[ReduxActionTypes.FETCH_PAGE_LIST_SUCCESS]: (
|
||||
state: AppViewReduxState,
|
||||
action: ReduxAction<PageListPayload>,
|
||||
) => {
|
||||
return { ...state, pages: action.payload };
|
||||
},
|
||||
[ReduxActionTypes.FETCH_PUBLISHED_PAGE_INIT]: (state: AppViewReduxState) => {
|
||||
return { ...state, isFetchingPage: true };
|
||||
},
|
||||
[ReduxActionTypes.FETCH_PUBLISHED_PAGE_ERROR]: (state: AppViewReduxState) => {
|
||||
return { ...state, isFetchingPage: false };
|
||||
},
|
||||
[ReduxActionTypes.FETCH_PUBLISHED_PAGE_SUCCESS]: (
|
||||
state: AppViewReduxState,
|
||||
action: ReduxAction<{
|
||||
pageId: string;
|
||||
layoutId: string;
|
||||
dsl: ContainerWidgetProps<WidgetProps>;
|
||||
}>,
|
||||
) => {
|
||||
return {
|
||||
...state,
|
||||
dsl: action.payload.dsl,
|
||||
currentPageId: action.payload.pageId,
|
||||
currentLayoutId: action.payload.layoutId,
|
||||
isFetchingPage: false,
|
||||
};
|
||||
},
|
||||
});
|
||||
|
||||
export interface AppViewReduxState {
|
||||
dsl?: ContainerWidgetProps<WidgetProps>;
|
||||
isFetchingPage: boolean;
|
||||
currentPageId?: string;
|
||||
currentLayoutId?: string;
|
||||
pages: PageListPayload;
|
||||
}
|
||||
|
||||
export default appViewReducer;
|
||||
|
|
@ -6,21 +6,59 @@ import { ContainerWidgetProps } from "../../widgets/ContainerWidget";
|
|||
import {
|
||||
ReduxAction,
|
||||
UpdateCanvasPayload,
|
||||
PageListPayload,
|
||||
} from "../../constants/ReduxActionConstants";
|
||||
|
||||
const editorConfigs = getEditorConfigs();
|
||||
const initialState: EditorReduxState = {
|
||||
pageWidgetId: "0",
|
||||
...editorConfigs,
|
||||
isSaving: false,
|
||||
pages: [],
|
||||
loadingStates: {
|
||||
publishing: false,
|
||||
publishingError: false,
|
||||
saving: false,
|
||||
savingError: false,
|
||||
},
|
||||
};
|
||||
|
||||
const editorReducer = createReducer(initialState, {
|
||||
[ReduxActionTypes.PUBLISH_APPLICATION_INIT]: (state: EditorReduxState) => {
|
||||
state.loadingStates.publishing = true;
|
||||
state.loadingStates.publishingError = false;
|
||||
return { ...state };
|
||||
},
|
||||
[ReduxActionTypes.PUBLISH_APPLICATION_ERROR]: (state: EditorReduxState) => {
|
||||
state.loadingStates.publishing = false;
|
||||
state.loadingStates.publishingError = true;
|
||||
return { ...state };
|
||||
},
|
||||
[ReduxActionTypes.PUBLISH_APPLICATION_SUCCESS]: (state: EditorReduxState) => {
|
||||
state.loadingStates.publishing = false;
|
||||
state.loadingStates.publishingError = false;
|
||||
return { ...state };
|
||||
},
|
||||
[ReduxActionTypes.FETCH_PAGE_LIST_SUCCESS]: (
|
||||
state: EditorReduxState,
|
||||
action: ReduxAction<PageListPayload>,
|
||||
) => {
|
||||
return { ...state, pages: action.payload };
|
||||
},
|
||||
[ReduxActionTypes.CREATE_PAGE_SUCCESS]: (
|
||||
state: EditorReduxState,
|
||||
action: ReduxAction<{ pageName: string; pageId: string; layoutId: string }>,
|
||||
) => {
|
||||
state.pages.push(action.payload);
|
||||
return { ...state };
|
||||
},
|
||||
[ReduxActionTypes.SAVE_PAGE_INIT]: (state: EditorReduxState) => {
|
||||
return { ...state, isSaving: true };
|
||||
state.loadingStates.saving = true;
|
||||
state.loadingStates.savingError = false;
|
||||
return { ...state };
|
||||
},
|
||||
[ReduxActionTypes.SAVE_PAGE_SUCCESS]: (state: EditorReduxState) => {
|
||||
return { ...state, isSaving: false };
|
||||
state.loadingStates.saving = false;
|
||||
return { ...state };
|
||||
},
|
||||
[ReduxActionTypes.UPDATE_CANVAS]: (
|
||||
state: EditorReduxState,
|
||||
|
|
@ -33,6 +71,8 @@ const editorReducer = createReducer(initialState, {
|
|||
pageWidgetId,
|
||||
currentApplicationId,
|
||||
} = action.payload;
|
||||
state.loadingStates.publishing = false;
|
||||
state.loadingStates.publishingError = false;
|
||||
return {
|
||||
...state,
|
||||
currentPageId,
|
||||
|
|
@ -52,7 +92,13 @@ export interface EditorReduxState {
|
|||
currentPageName: string;
|
||||
propertyPaneConfigsId: string;
|
||||
currentApplicationId?: string;
|
||||
isSaving: boolean;
|
||||
pages: PageListPayload;
|
||||
loadingStates: {
|
||||
saving: boolean;
|
||||
savingError: boolean;
|
||||
publishing: boolean;
|
||||
publishingError: boolean;
|
||||
};
|
||||
}
|
||||
|
||||
export default editorReducer;
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ import { combineReducers } from "redux";
|
|||
import editorReducer from "./editorReducer";
|
||||
import errorReducer from "./errorReducer";
|
||||
import propertyPaneReducer from "./propertyPaneReducer";
|
||||
import appViewReducer from "./appViewReducer";
|
||||
import { widgetSidebarReducer } from "./widgetSidebarReducer";
|
||||
|
||||
const uiReducer = combineReducers({
|
||||
|
|
@ -9,5 +10,6 @@ const uiReducer = combineReducers({
|
|||
editor: editorReducer,
|
||||
errors: errorReducer,
|
||||
propertyPane: propertyPaneReducer,
|
||||
view: appViewReducer,
|
||||
});
|
||||
export default uiReducer;
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import {
|
|||
ReduxActionErrorTypes,
|
||||
ReduxAction,
|
||||
UpdateCanvasPayload,
|
||||
LayoutPayload,
|
||||
PageListPayload,
|
||||
} from "../constants/ReduxActionConstants";
|
||||
import { updateCanvas, savePageSuccess } from "../actions/pageActions";
|
||||
import PageApi, {
|
||||
|
|
@ -14,6 +14,8 @@ import PageApi, {
|
|||
SavePageRequest,
|
||||
FetchPublishedPageRequest,
|
||||
FetchPublishedPageResponse,
|
||||
CreatePageRequest,
|
||||
FetchPageListResponse,
|
||||
} from "../api/PageApi";
|
||||
import { FlattenedWidgetProps } from "../reducers/entityReducers/canvasWidgetsReducer";
|
||||
import {
|
||||
|
|
@ -24,11 +26,63 @@ import {
|
|||
takeEvery,
|
||||
all,
|
||||
} from "redux-saga/effects";
|
||||
import { getPageLayoutId } from "./selectors";
|
||||
|
||||
import { extractCurrentDSL } from "../utils/WidgetPropsUtils";
|
||||
import { getEditorConfigs, getWidgets } from "./selectors";
|
||||
import { validateResponse } from "./ErrorSagas";
|
||||
|
||||
export function* fetchPageListSaga() {
|
||||
try {
|
||||
const response: FetchPageListResponse = yield call(PageApi.fetchPageList);
|
||||
const isValidResponse = yield validateResponse(response);
|
||||
if (isValidResponse) {
|
||||
const pageList: PageListPayload = response.data.map(page => ({
|
||||
pageName: page.name,
|
||||
pageId: page.id,
|
||||
layoutId: page.layouts[0].id,
|
||||
}));
|
||||
yield put({
|
||||
type: ReduxActionTypes.FETCH_PAGE_LIST_SUCCESS,
|
||||
payload: pageList,
|
||||
});
|
||||
return;
|
||||
}
|
||||
} catch (error) {
|
||||
yield put({
|
||||
type: ReduxActionErrorTypes.FETCH_PAGE_LIST_ERROR,
|
||||
payload: {
|
||||
error,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
//TODO(abhinav): Probably not the best place for this particular saga
|
||||
export function* initializeAppViewerSaga(
|
||||
action: ReduxAction<{ pageId: string }>,
|
||||
) {
|
||||
yield* fetchPageListSaga();
|
||||
yield put({
|
||||
type: ReduxActionTypes.FETCH_PUBLISHED_PAGE_INIT,
|
||||
payload: action.payload,
|
||||
});
|
||||
}
|
||||
const getCanvasWidgetsPayload = (
|
||||
pageResponse: FetchPageResponse,
|
||||
): UpdateCanvasPayload => {
|
||||
const normalizedResponse = CanvasWidgetsNormalizer.normalize(
|
||||
extractCurrentDSL(pageResponse),
|
||||
);
|
||||
return {
|
||||
pageWidgetId: normalizedResponse.result,
|
||||
currentPageName: pageResponse.data.name,
|
||||
currentPageId: pageResponse.data.id,
|
||||
widgets: normalizedResponse.entities.canvasWidgets,
|
||||
currentLayoutId: pageResponse.data.layouts[0].id, // TODO(abhinav): Handle for multiple layouts
|
||||
currentApplicationId: pageResponse.data.applicationId,
|
||||
};
|
||||
};
|
||||
|
||||
export function* fetchPageSaga(
|
||||
pageRequestAction: ReduxAction<FetchPageRequest>,
|
||||
) {
|
||||
|
|
@ -40,17 +94,7 @@ export function* fetchPageSaga(
|
|||
);
|
||||
const isValidResponse = yield validateResponse(fetchPageResponse);
|
||||
if (isValidResponse) {
|
||||
const normalizedResponse = CanvasWidgetsNormalizer.normalize(
|
||||
extractCurrentDSL(fetchPageResponse),
|
||||
);
|
||||
const canvasWidgetsPayload: UpdateCanvasPayload = {
|
||||
pageWidgetId: normalizedResponse.result,
|
||||
currentPageName: fetchPageResponse.data.name,
|
||||
currentPageId: fetchPageResponse.data.id,
|
||||
widgets: normalizedResponse.entities.canvasWidgets,
|
||||
currentLayoutId: fetchPageResponse.data.layouts[0].id, // TODO(abhinav): Handle for multiple layouts
|
||||
currentApplicationId: fetchPageResponse.data.applicationId,
|
||||
};
|
||||
const canvasWidgetsPayload = getCanvasWidgetsPayload(fetchPageResponse);
|
||||
yield all([
|
||||
put(updateCanvas(canvasWidgetsPayload)),
|
||||
put({
|
||||
|
|
@ -70,28 +114,28 @@ export function* fetchPageSaga(
|
|||
}
|
||||
|
||||
export function* fetchPublishedPageSaga(
|
||||
pageRequestAction: ReduxAction<FetchPublishedPageRequest>,
|
||||
pageRequestAction: ReduxAction<{ pageId: string }>,
|
||||
) {
|
||||
try {
|
||||
const request: FetchPublishedPageRequest = pageRequestAction.payload;
|
||||
const { pageId } = pageRequestAction.payload;
|
||||
const layoutId: string = yield select(getPageLayoutId, pageId);
|
||||
const request: FetchPublishedPageRequest = {
|
||||
pageId,
|
||||
layoutId,
|
||||
};
|
||||
const response: FetchPublishedPageResponse = yield call(
|
||||
PageApi.fetchPublishedPage,
|
||||
request,
|
||||
);
|
||||
const isValidResponse = yield validateResponse(response);
|
||||
if (isValidResponse) {
|
||||
const normalizedResponse = CanvasWidgetsNormalizer.normalize(
|
||||
response.data.dsl,
|
||||
);
|
||||
const layoutPayload: LayoutPayload = {
|
||||
widgets: normalizedResponse,
|
||||
layoutId: response.data.id,
|
||||
pageId: request.pageId,
|
||||
};
|
||||
|
||||
yield put({
|
||||
type: ReduxActionTypes.FETCH_PUBLISED_PAGE_SUCCESS,
|
||||
payload: layoutPayload,
|
||||
type: ReduxActionTypes.FETCH_PUBLISHED_PAGE_SUCCESS,
|
||||
payload: {
|
||||
dsl: response.data.dsl,
|
||||
layoutId: response.data.id,
|
||||
pageId: request.pageId,
|
||||
},
|
||||
});
|
||||
}
|
||||
} catch (error) {
|
||||
|
|
@ -160,7 +204,7 @@ export function* saveLayoutSaga(
|
|||
}
|
||||
|
||||
// TODO(abhinav): This has redundant code. The only thing different here is the lack of state update.
|
||||
// For now this is fire and forget.
|
||||
// For now, this is fire and forget.
|
||||
export function* asyncSaveLayout() {
|
||||
try {
|
||||
const widgets = yield select(getWidgets);
|
||||
|
|
@ -189,6 +233,35 @@ export function* asyncSaveLayout() {
|
|||
}
|
||||
}
|
||||
|
||||
export function* createPageSaga(
|
||||
createPageAction: ReduxAction<CreatePageRequest>,
|
||||
) {
|
||||
try {
|
||||
const request: CreatePageRequest = createPageAction.payload;
|
||||
const response: FetchPageResponse = yield call(PageApi.createPage, request);
|
||||
const isValidResponse = yield validateResponse(response);
|
||||
if (isValidResponse) {
|
||||
const canvasPayload = getCanvasWidgetsPayload(response);
|
||||
yield put({
|
||||
type: ReduxActionTypes.CREATE_PAGE_SUCCESS,
|
||||
payload: {
|
||||
pageId: response.data.id,
|
||||
pageName: response.data.name,
|
||||
layoutId: response.data.layouts[0].id,
|
||||
},
|
||||
});
|
||||
yield put(updateCanvas(canvasPayload));
|
||||
}
|
||||
} catch (error) {
|
||||
yield put({
|
||||
type: ReduxActionErrorTypes.CREATE_PAGE_ERROR,
|
||||
payload: {
|
||||
error,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export default function* pageSagas() {
|
||||
yield all([
|
||||
takeLatest(ReduxActionTypes.FETCH_PAGE, fetchPageSaga),
|
||||
|
|
@ -201,5 +274,11 @@ export default function* pageSagas() {
|
|||
// No need to save layout everytime a property is updated.
|
||||
// We save the latest request to update layout.
|
||||
takeLatest(ReduxActionTypes.UPDATE_WIDGET_PROPERTY, asyncSaveLayout),
|
||||
takeLatest(ReduxActionTypes.CREATE_PAGE_INIT, createPageSaga),
|
||||
takeLatest(ReduxActionTypes.FETCH_PAGE_LIST_INIT, fetchPageListSaga),
|
||||
takeLatest(
|
||||
ReduxActionTypes.INITIALIZE_PAGE_VIEWER,
|
||||
initializeAppViewerSaga,
|
||||
),
|
||||
]);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,3 +32,12 @@ export const getDefaultWidgetConfig = (
|
|||
delete widgetConfig.columns;
|
||||
return widgetConfig;
|
||||
};
|
||||
|
||||
export const getPageLayoutId = (state: AppState, pageId: string): string => {
|
||||
const pages = state.ui.view.pages;
|
||||
const page = pages.find(page => page.pageId === pageId);
|
||||
if (!page) {
|
||||
throw Error("Page not found");
|
||||
}
|
||||
return page.layoutId;
|
||||
};
|
||||
|
|
|
|||
22
app/client/src/selectors/appViewSelectors.tsx
Normal file
22
app/client/src/selectors/appViewSelectors.tsx
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
import { createSelector } from "reselect";
|
||||
import { AppState } from "../reducers";
|
||||
import { AppViewReduxState } from "../reducers/uiReducers/appViewReducer";
|
||||
import { AppViewerProps } from "../pages/AppViewer";
|
||||
|
||||
const getAppViewState = (state: AppState) => state.ui.view;
|
||||
|
||||
export const getCurrentLayoutId = (state: AppState, props: AppViewerProps) =>
|
||||
state.ui.view.currentLayoutId || props.match.params.layoutId;
|
||||
export const getCurrentPageId = (state: AppState, props: AppViewerProps) =>
|
||||
state.ui.view.currentPageId || props.match.params.pageId;
|
||||
|
||||
// For the viewer, this does not need to be wrapped in createCachedSelector, as it will not change in subsequent renders.
|
||||
export const getCurrentPageLayoutDSL = createSelector(
|
||||
getAppViewState,
|
||||
(view: AppViewReduxState) => view.dsl,
|
||||
);
|
||||
|
||||
export const getPageList = createSelector(
|
||||
getAppViewState,
|
||||
(view: AppViewReduxState) => (view.pages.length > 0 ? view.pages : undefined),
|
||||
);
|
||||
|
|
@ -13,6 +13,11 @@ const getWidgetConfigs = (state: AppState) => state.entities.widgetConfig;
|
|||
const getEntities = (state: AppState) => state.entities;
|
||||
const getWidgetSideBar = (state: AppState) => state.ui.widgetSidebar;
|
||||
|
||||
export const getPageList = createSelector(
|
||||
getEditorState,
|
||||
(editor: EditorReduxState) => editor.pages,
|
||||
);
|
||||
|
||||
export const getPropertyPaneConfigsId = createSelector(
|
||||
getEditorState,
|
||||
(editor: EditorReduxState) => editor.propertyPaneConfigsId,
|
||||
|
|
@ -45,7 +50,17 @@ export const getCurrentApplicationId = createSelector(
|
|||
|
||||
export const getIsPageSaving = createSelector(
|
||||
getEditorState,
|
||||
(editor: EditorReduxState) => editor.isSaving,
|
||||
(editor: EditorReduxState) => editor.loadingStates.saving,
|
||||
);
|
||||
|
||||
export const getIsPublishingApplication = createSelector(
|
||||
getEditorState,
|
||||
(editor: EditorReduxState) => editor.loadingStates.publishing,
|
||||
);
|
||||
|
||||
export const getPublishingError = createSelector(
|
||||
getEditorState,
|
||||
(editor: EditorReduxState) => editor.loadingStates.publishingError,
|
||||
);
|
||||
|
||||
export const getWidgetCards = createSelector(
|
||||
|
|
|
|||
|
|
@ -36,10 +36,10 @@ const defaultDSL = {
|
|||
export const extractCurrentDSL = (
|
||||
fetchPageResponse: FetchPageResponse,
|
||||
): ContainerWidgetProps<WidgetProps> => {
|
||||
const currentDSL = fetchPageResponse.data.layouts[0].dsl;
|
||||
const currentDSL = fetchPageResponse.data.layouts[0].dsl || defaultDSL;
|
||||
currentDSL.rightColumn = 1200;
|
||||
currentDSL.snapColumns = 24;
|
||||
return currentDSL || defaultDSL;
|
||||
return currentDSL;
|
||||
};
|
||||
|
||||
export const getDropZoneOffsets = (
|
||||
|
|
|
|||
|
|
@ -63,6 +63,12 @@ class WidgetBuilderRegistry {
|
|||
return <RadioGroupWidget {...widgetData} />;
|
||||
},
|
||||
});
|
||||
|
||||
WidgetFactory.registerWidgetBuilder("DROP_DOWN_WIDGET", {
|
||||
buildWidget(widgetData: DropdownWidgetProps): JSX.Element {
|
||||
return <DropdownWidget {...widgetData} />;
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -987,25 +987,25 @@
|
|||
"@emotion/weak-memoize" "0.2.4"
|
||||
|
||||
"@emotion/core@^10.0.9":
|
||||
version "10.0.21"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.21.tgz#2e8398d2b92fd90d4ed6ac4d0b66214971de3458"
|
||||
integrity sha512-U9zbc7ovZ2ceIwbLXYZPJy6wPgnOdTNT4jENZ31ee6v2lojetV5bTbCVk6ciT8G3wQRyVaTTfUCH9WCrMzpRIw==
|
||||
version "10.0.22"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/core/-/core-10.0.22.tgz#2ac7bcf9b99a1979ab5b0a876fbf37ab0688b177"
|
||||
integrity sha512-7eoP6KQVUyOjAkE6y4fdlxbZRA4ILs7dqkkm6oZUJmihtHv0UBq98VgPirq9T8F9K2gKu0J/au/TpKryKMinaA==
|
||||
dependencies:
|
||||
"@babel/runtime" "^7.5.5"
|
||||
"@emotion/cache" "^10.0.17"
|
||||
"@emotion/css" "^10.0.14"
|
||||
"@emotion/serialize" "^0.11.10"
|
||||
"@emotion/css" "^10.0.22"
|
||||
"@emotion/serialize" "^0.11.12"
|
||||
"@emotion/sheet" "0.9.3"
|
||||
"@emotion/utils" "0.11.2"
|
||||
|
||||
"@emotion/css@^10.0.14", "@emotion/css@^10.0.9":
|
||||
version "10.0.14"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.14.tgz#95dacabdd0e22845d1a1b0b5968d9afa34011139"
|
||||
integrity sha512-MozgPkBEWvorcdpqHZE5x1D/PLEHUitALQCQYt2wayf4UNhpgQs2tN0UwHYS4FMy5ROBH+0ALyCFVYJ/ywmwlg==
|
||||
"@emotion/css@^10.0.22", "@emotion/css@^10.0.9":
|
||||
version "10.0.22"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/css/-/css-10.0.22.tgz#37b1abb6826759fe8ac0af0ac0034d27de6d1793"
|
||||
integrity sha512-8phfa5mC/OadBTmGpMpwykIVH0gFCbUoO684LUkyixPq4F1Wwri7fK5Xlm8lURNBrd2TuvTbPUGxFsGxF9UacA==
|
||||
dependencies:
|
||||
"@emotion/serialize" "^0.11.8"
|
||||
"@emotion/serialize" "^0.11.12"
|
||||
"@emotion/utils" "0.11.2"
|
||||
babel-plugin-emotion "^10.0.14"
|
||||
babel-plugin-emotion "^10.0.22"
|
||||
|
||||
"@emotion/hash@0.7.3":
|
||||
version "0.7.3"
|
||||
|
|
@ -1013,9 +1013,9 @@
|
|||
integrity sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw==
|
||||
|
||||
"@emotion/is-prop-valid@^0.8.1":
|
||||
version "0.8.3"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.3.tgz#cbe62ddbea08aa022cdf72da3971570a33190d29"
|
||||
integrity sha512-We7VBiltAJ70KQA0dWkdPMXnYoizlxOXpvtjmu5/MBnExd+u0PGgV27WCYanmLAbCwAU30Le/xA0CQs/F/Otig==
|
||||
version "0.8.4"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/is-prop-valid/-/is-prop-valid-0.8.4.tgz#cf1dcfc1812c226f05e1ba53592eb6b51e734990"
|
||||
integrity sha512-QBW8h6wVQgeQ55F52rNaprEJxtVR+/ScOP8/V1ScSpPzKqHdFB9QVqby0Z50sqS8mcaeIl5vR1vQpKwJbIS6NQ==
|
||||
dependencies:
|
||||
"@emotion/memoize" "0.7.3"
|
||||
|
||||
|
|
@ -1024,10 +1024,10 @@
|
|||
resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.7.3.tgz#5b6b1c11d6a6dddf1f2fc996f74cf3b219644d78"
|
||||
integrity sha512-2Md9mH6mvo+ygq1trTeVp2uzAKwE2P7In0cRpD/M9Q70aH8L+rxMLbb3JCN2JoSWsV2O+DdFjfbbXoMoLBczow==
|
||||
|
||||
"@emotion/serialize@^0.11.10", "@emotion/serialize@^0.11.11", "@emotion/serialize@^0.11.8":
|
||||
version "0.11.11"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.11.tgz#c92a5e5b358070a7242d10508143306524e842a4"
|
||||
integrity sha512-YG8wdCqoWtuoMxhHZCTA+egL0RSGdHEc+YCsmiSBPBEDNuVeMWtjEWtGrhUterSChxzwnWBXvzSxIFQI/3sHLw==
|
||||
"@emotion/serialize@^0.11.12", "@emotion/serialize@^0.11.14":
|
||||
version "0.11.14"
|
||||
resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-0.11.14.tgz#56a6d8d04d837cc5b0126788b2134c51353c6488"
|
||||
integrity sha512-6hTsySIuQTbDbv00AnUO6O6Xafdwo5GswRlMZ5hHqiFx+4pZ7uGWXUQFW46Kc2taGhP89uXMXn/lWQkdyTosPA==
|
||||
dependencies:
|
||||
"@emotion/hash" "0.7.3"
|
||||
"@emotion/memoize" "0.7.3"
|
||||
|
|
@ -1071,9 +1071,9 @@
|
|||
integrity sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==
|
||||
|
||||
"@hapi/hoek@8.x.x", "@hapi/hoek@^8.3.0":
|
||||
version "8.3.2"
|
||||
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.3.2.tgz#91e7188edebc5d876f0b91a860f555ff06f0782b"
|
||||
integrity sha512-NP5SG4bzix+EtSMtcudp8TvI0lB46mXNo8uFpTDw6tqxGx4z5yx+giIunEFA0Z7oUO4DuWrOJV9xqR2tJVEdyA==
|
||||
version "8.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@hapi/hoek/-/hoek-8.4.0.tgz#3f2153d9eea8942dfe217e1642a420f1fe4087f3"
|
||||
integrity sha512-JLK+vNrtZSQy1PiAAvtaPGiZhFQo+BLywJkD4EHG8vCzlW9w7Y9yfb2be1GFKnZKczLgzHBpgMOBUZs1qBNB5g==
|
||||
|
||||
"@hapi/joi@^15.0.0":
|
||||
version "15.1.1"
|
||||
|
|
@ -1630,14 +1630,14 @@
|
|||
integrity sha512-mTdN5Z71smk1+TeqgDF1RhkB+CDCS/CvCm4Iy7gGpheB4tsJVk2hnAhTi6w9v2H0jhixfAMgu1bUkqDA1yuq2Q==
|
||||
|
||||
"@types/node@*":
|
||||
version "12.11.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.11.5.tgz#6c3c8dc84988aff11fd2a63d7b5fbf39eaaab7b1"
|
||||
integrity sha512-LC8ALj/24PhByn39nr5jnTvpE7MujK8y7LQmV74kHYF5iQ0odCPkMH4IZNZw+cobKfSXqaC8GgegcbIsQpffdA==
|
||||
version "12.12.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.3.tgz#ebfe83507ac506bc3486314a8aa395be66af8d23"
|
||||
integrity sha512-opgSsy+cEF9N8MgaVPnWVtdJ3o4mV2aMHvDq7thkQUFt0EuOHJon4rQpJfhjmNHB+ikl0Cd6WhWIErOyQ+f7tw==
|
||||
|
||||
"@types/node@^10.12.18":
|
||||
version "10.14.22"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.14.22.tgz#34bcdf6b6cb5fc0db33d24816ad9d3ece22feea4"
|
||||
integrity sha512-9taxKC944BqoTVjE+UT3pQH0nHZlTvITwfsOZqyc+R3sfJuxaTtxWjfn1K2UlxyPcKHf0rnaXcVFrS9F9vf0bw==
|
||||
version "10.17.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.2.tgz#41b5afbcde1a5a805302a4da3cf399499f1bbf64"
|
||||
integrity sha512-sAh60KDol+MpwOr1RTK0+HgBEYejKsxdpmrOS1Wts5bI03dLzq8F7T0sRXDKeaEK8iWDlGfdzxrzg6vx/c5pNA==
|
||||
|
||||
"@types/normalize-package-data@^2.4.0":
|
||||
version "2.4.0"
|
||||
|
|
@ -1655,16 +1655,16 @@
|
|||
integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==
|
||||
|
||||
"@types/react-dom@*", "@types/react-dom@^16.8.0":
|
||||
version "16.9.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.2.tgz#90f9e6c161850be1feb31d2f448121be2a4f3b47"
|
||||
integrity sha512-hgPbBoI1aTSTvZwo8HYw35UaTldW6n2ETLvHAcfcg1FaOuBV3olmyCe5eMpx2WybWMBPv0MdU2t5GOcQhP+3zA==
|
||||
version "16.9.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-16.9.3.tgz#4006ff0e13958af91313869077c04cb20d9b9d04"
|
||||
integrity sha512-FUuZKXPr9qlzUT9lhuzrZgLjH63TvNn28Ch3MvKG4B+F52zQtO8DtE0Opbncy3xaucNZM2WIPfuNTgkbKx5Brg==
|
||||
dependencies:
|
||||
"@types/react" "*"
|
||||
|
||||
"@types/react-native@*":
|
||||
version "0.60.21"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.60.21.tgz#81a41cae7b232f52ab3983d854f4a0b0df79531e"
|
||||
integrity sha512-E7F+P/UG4Utu+kh8Hy544i0m4CzpHw1awNX6hVfkhlu4mXSlAn6KLZzKEkPBbHm7g1kspmZTiuP23HAKZpASPw==
|
||||
version "0.60.22"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-native/-/react-native-0.60.22.tgz#ba199a441cb0612514244ffb1d0fe6f04c878575"
|
||||
integrity sha512-LTXMKEyGA+x4kadmjujX6yAgpcaZutJ01lC7zLJWCULaZg7Qw5/3iOQpwIJRUcOc+a8A2RR7rSxplehVf9IuhA==
|
||||
dependencies:
|
||||
"@types/prop-types" "*"
|
||||
"@types/react" "*"
|
||||
|
|
@ -1697,9 +1697,9 @@
|
|||
"@types/react" "*"
|
||||
|
||||
"@types/react-select@^3.0.5":
|
||||
version "3.0.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-3.0.5.tgz#c615c1f7a0ea98e828b469d0f5ddd39ba3f0d319"
|
||||
integrity sha512-BodHwzj9WU1EWC1j8zx1iyAMDCrTURwdvMpOVvVFwDVU7fvs8Ks9fPTkUY3+BgYbpOJFr21bR3Jib/GonwanAQ==
|
||||
version "3.0.6"
|
||||
resolved "https://registry.yarnpkg.com/@types/react-select/-/react-select-3.0.6.tgz#63e06aea611bcb264f4b8af069f11f987cbecb5e"
|
||||
integrity sha512-vgEbVtwxtdgmaOPXb8HRlO3VgEwlhx8MVW/nB5yI/q3442x31XETy9P1UAoVRhSoYIEa4TuJGJCkKk7Ss3y5Eg==
|
||||
dependencies:
|
||||
"@types/react" "*"
|
||||
"@types/react-dom" "*"
|
||||
|
|
@ -1719,15 +1719,7 @@
|
|||
dependencies:
|
||||
"@types/react" "*"
|
||||
|
||||
"@types/react@*", "@types/react@^16.8.2":
|
||||
version "16.9.9"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.9.tgz#a62c6f40f04bc7681be5e20975503a64fe783c3a"
|
||||
integrity sha512-L+AudFJkDukk+ukInYvpoAPyJK5q1GanFOINOJnM0w6tUgITuWvJ4jyoBPFL7z4/L8hGLd+K/6xR5uUjXu0vVg==
|
||||
dependencies:
|
||||
"@types/prop-types" "*"
|
||||
csstype "^2.2.0"
|
||||
|
||||
"@types/react@^16.9.2":
|
||||
"@types/react@*", "@types/react@^16.8.2", "@types/react@^16.9.2":
|
||||
version "16.9.11"
|
||||
resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.11.tgz#70e0b7ad79058a7842f25ccf2999807076ada120"
|
||||
integrity sha512-UBT4GZ3PokTXSWmdgC/GeCGEJXE5ofWyibCcecRLUVN2ZBpXQGVgQGtG2foS7CrTKFKlQVVswLvf7Js6XA/CVQ==
|
||||
|
|
@ -1766,9 +1758,9 @@
|
|||
integrity sha512-l42BggppR6zLmpfU6fq9HEa2oGPEI8yrSPL3GITjfRInppYFahObbIQOQK3UGxEnyQpltZLaPe75046NOZQikw==
|
||||
|
||||
"@types/styled-components@^4.1.8":
|
||||
version "4.1.19"
|
||||
resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-4.1.19.tgz#535b455d7744fda1608c605df82c0800eda61a09"
|
||||
integrity sha512-nDkoTQ8ItcJiyEvTa24TwsIpIfNKCG+Lq0LvAwApOcjQ8OaeOOCg66YSPHBePHUh6RPt1LA8aEzRlgWhQPFqPg==
|
||||
version "4.1.20"
|
||||
resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-4.1.20.tgz#8afd41039c0fd582152e57ff75c58a5353870de6"
|
||||
integrity sha512-WztLENdKY+H9udccx5ZhAblgTp08NSfOFYdGaWM0MMm+1tEOioYVFwIIQ7Hx+9wWXiWKDXeoX6R3D/i1obnG3g==
|
||||
dependencies:
|
||||
"@types/react" "*"
|
||||
"@types/react-native" "*"
|
||||
|
|
@ -1796,9 +1788,9 @@
|
|||
source-map "^0.6.1"
|
||||
|
||||
"@types/webpack@^4.4.19":
|
||||
version "4.39.5"
|
||||
resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.39.5.tgz#3671b65928d9e0c6fcd4adff3f8167d48b174681"
|
||||
integrity sha512-9twG6D97ao13MBLvigwfBJe6rxtb04UY3TcYHBYkW5sXZjUrNhqIRxLYg74VzK/YAE8xlVhOyd+3Whr7E5RrBA==
|
||||
version "4.39.7"
|
||||
resolved "https://registry.yarnpkg.com/@types/webpack/-/webpack-4.39.7.tgz#50ee509a206f9ab2ff812788efb896250068c659"
|
||||
integrity sha512-xXNSgKu6KNNEhATLEDRI/T7hT3n3DVOCE1YWFXIP+XSDedRDAGaGTq8fr51Ntb9L0Bpopx9zJuGwK0/sj5my7g==
|
||||
dependencies:
|
||||
"@types/anymatch" "*"
|
||||
"@types/node" "*"
|
||||
|
|
@ -1820,39 +1812,39 @@
|
|||
"@types/yargs-parser" "*"
|
||||
|
||||
"@typescript-eslint/eslint-plugin@^2.0.0", "@typescript-eslint/eslint-plugin@^2.2.0":
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.5.0.tgz#101d96743ce3365b3223df73d641078c9b775903"
|
||||
integrity sha512-ddrJZxp5ns1Lh5ofZQYk3P8RyvKfyz/VcRR4ZiJLHO/ljnQAO8YvTfj268+WJOOadn99mvDiqJA65+HAKoeSPA==
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.6.0.tgz#e82ed43fc4527b21bfe35c20a2d6e4ed49fc7957"
|
||||
integrity sha512-iCcXREU4RciLmLniwKLRPCOFVXrkF7z27XuHq5DrykpREv/mz6ztKAyLg2fdkM0hQC7659p5ZF5uStH7uzAJ/w==
|
||||
dependencies:
|
||||
"@typescript-eslint/experimental-utils" "2.5.0"
|
||||
"@typescript-eslint/experimental-utils" "2.6.0"
|
||||
eslint-utils "^1.4.2"
|
||||
functional-red-black-tree "^1.0.1"
|
||||
regexpp "^2.0.1"
|
||||
tsutils "^3.17.1"
|
||||
|
||||
"@typescript-eslint/experimental-utils@2.5.0":
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.5.0.tgz#383a97ded9a7940e5053449f6d73995e782b8fb1"
|
||||
integrity sha512-UgcQGE0GKJVChyRuN1CWqDW8Pnu7+mVst0aWrhiyuUD1J9c+h8woBdT4XddCvhcXDodTDVIfE3DzGHVjp7tUeQ==
|
||||
"@typescript-eslint/experimental-utils@2.6.0":
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-2.6.0.tgz#ed70bef72822bff54031ff0615fc888b9e2b6e8a"
|
||||
integrity sha512-34BAFpNOwHXeqT+AvdalLxOvcPYnCxA5JGmBAFL64RGMdP0u65rXjii7l/nwpgk5aLEE1LaqF+SsCU0/Cb64xA==
|
||||
dependencies:
|
||||
"@types/json-schema" "^7.0.3"
|
||||
"@typescript-eslint/typescript-estree" "2.5.0"
|
||||
"@typescript-eslint/typescript-estree" "2.6.0"
|
||||
eslint-scope "^5.0.0"
|
||||
|
||||
"@typescript-eslint/parser@^2.0.0", "@typescript-eslint/parser@^2.2.0":
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.5.0.tgz#858030ddd808fbbe88e03f42e5971efaccb8218a"
|
||||
integrity sha512-9UBMiAwIDWSl79UyogaBdj3hidzv6exjKUx60OuZuFnJf56tq/UMpdPcX09YmGqE8f4AnAueYtBxV8IcAT3jdQ==
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-2.6.0.tgz#5106295c6a7056287b4719e24aae8d6293d5af49"
|
||||
integrity sha512-AvLejMmkcjRTJ2KD72v565W4slSrrzUIzkReu1JN34b8JnsEsxx7S9Xx/qXEuMQas0mkdUfETr0j3zOhq2DIqQ==
|
||||
dependencies:
|
||||
"@types/eslint-visitor-keys" "^1.0.0"
|
||||
"@typescript-eslint/experimental-utils" "2.5.0"
|
||||
"@typescript-eslint/typescript-estree" "2.5.0"
|
||||
"@typescript-eslint/experimental-utils" "2.6.0"
|
||||
"@typescript-eslint/typescript-estree" "2.6.0"
|
||||
eslint-visitor-keys "^1.1.0"
|
||||
|
||||
"@typescript-eslint/typescript-estree@2.5.0":
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.5.0.tgz#40ada624d6217ef092a3a79ed30d947ad4f212ce"
|
||||
integrity sha512-AXURyF8NcA3IsnbjNX1v9qbwa0dDoY9YPcKYR2utvMHoUcu3636zrz0gRWtVAyxbPCkhyKuGg6WZIyi2Fc79CA==
|
||||
"@typescript-eslint/typescript-estree@2.6.0":
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-2.6.0.tgz#d3e9d8e001492e2b9124c4d4bd4e7f03c0fd7254"
|
||||
integrity sha512-A3lSBVIdj2Gp0lFEL6in2eSPqJ33uAc3Ko+Y4brhjkxzjbzLnwBH22CwsW2sCo+iwogfIyvb56/AJri15H0u5Q==
|
||||
dependencies:
|
||||
debug "^4.1.1"
|
||||
glob "^7.1.4"
|
||||
|
|
@ -2380,16 +2372,16 @@ atob@^2.1.1:
|
|||
integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==
|
||||
|
||||
autoprefixer@^9.6.1:
|
||||
version "9.6.5"
|
||||
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.6.5.tgz#98f4afe7e93cccf323287515d426019619775e5e"
|
||||
integrity sha512-rGd50YV8LgwFQ2WQp4XzOTG69u1qQsXn0amww7tjqV5jJuNazgFKYEVItEBngyyvVITKOg20zr2V+9VsrXJQ2g==
|
||||
version "9.7.0"
|
||||
resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.0.tgz#905ec19e50f04545fe9ff131182cc9ab25246901"
|
||||
integrity sha512-j2IRvaCfrUxIiZun9ba4mhJ2omhw4OY88/yVzLO+lHhGBumAAK72PgM6gkbSN8iregPOn1ZlxGkmZh2CQ7X4AQ==
|
||||
dependencies:
|
||||
browserslist "^4.7.0"
|
||||
caniuse-lite "^1.0.30000999"
|
||||
browserslist "^4.7.2"
|
||||
caniuse-lite "^1.0.30001004"
|
||||
chalk "^2.4.2"
|
||||
normalize-range "^0.1.2"
|
||||
num2fraction "^1.2.2"
|
||||
postcss "^7.0.18"
|
||||
postcss "^7.0.19"
|
||||
postcss-value-parser "^4.0.2"
|
||||
|
||||
aws-sign2@~0.7.0:
|
||||
|
|
@ -2485,15 +2477,15 @@ babel-plugin-dynamic-import-node@2.3.0, babel-plugin-dynamic-import-node@^2.3.0:
|
|||
dependencies:
|
||||
object.assign "^4.1.0"
|
||||
|
||||
babel-plugin-emotion@^10.0.14:
|
||||
version "10.0.21"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.21.tgz#9ebeb12edeea3e60a5476b0e07c9868605e65968"
|
||||
integrity sha512-03o+T6sfVAJhNDcSdLapgv4IeewcFPzxlvBUVdSf7o5PI57ZSxoDvmy+ZulVWSu+rOWAWkEejNcsb29TuzJHbg==
|
||||
babel-plugin-emotion@^10.0.22:
|
||||
version "10.0.23"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-emotion/-/babel-plugin-emotion-10.0.23.tgz#040d40bf61dcab6d31dd6043d10e180240b8515b"
|
||||
integrity sha512-1JiCyXU0t5S2xCbItejCduLGGcKmF3POT0Ujbexog2MI4IlRcIn/kWjkYwCUZlxpON0O5FC635yPl/3slr7cKQ==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.0.0"
|
||||
"@emotion/hash" "0.7.3"
|
||||
"@emotion/memoize" "0.7.3"
|
||||
"@emotion/serialize" "^0.11.11"
|
||||
"@emotion/serialize" "^0.11.14"
|
||||
babel-plugin-macros "^2.0.0"
|
||||
babel-plugin-syntax-jsx "^6.18.0"
|
||||
convert-source-map "^1.5.0"
|
||||
|
|
@ -2553,9 +2545,9 @@ babel-plugin-syntax-object-rest-spread@^6.8.0:
|
|||
integrity sha1-/WU28rzhODb/o6VFjEkDpZe7O/U=
|
||||
|
||||
babel-plugin-transform-async-to-promises@^0.8.11:
|
||||
version "0.8.14"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.14.tgz#8c783aecb1139f39c608f8bb0f5bb69c343c878e"
|
||||
integrity sha512-BHw2WriDbnLwaaIydAjVeXXKBal0pWlFWxfo0UKL2CTaSorvRocrsTflni/mzIOP8c+EJ8xHqtbre8GbIm4ehQ==
|
||||
version "0.8.15"
|
||||
resolved "https://registry.yarnpkg.com/babel-plugin-transform-async-to-promises/-/babel-plugin-transform-async-to-promises-0.8.15.tgz#13b6d8ef13676b4e3c576d3600b85344bb1ba346"
|
||||
integrity sha512-fDXP68ZqcinZO2WCiimCL9zhGjGXOnn3D33zvbh+yheZ/qOrNVVDDIBtAaM3Faz8TRvQzHiRKsu3hfrBAhEncQ==
|
||||
|
||||
babel-plugin-transform-object-rest-spread@^6.26.0:
|
||||
version "6.26.0"
|
||||
|
|
@ -2829,14 +2821,14 @@ browserslist@4.7.0:
|
|||
electron-to-chromium "^1.3.247"
|
||||
node-releases "^1.1.29"
|
||||
|
||||
browserslist@^4.0.0, browserslist@^4.1.1, browserslist@^4.6.0, browserslist@^4.6.4, browserslist@^4.7.0, browserslist@^4.7.1:
|
||||
version "4.7.1"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.1.tgz#bd400d1aea56538580e8c4d5f1c54ac11b5ab468"
|
||||
integrity sha512-QtULFqKIAtiyNx7NhZ/p4rB8m3xDozVo/pi5VgTlADLF2tNigz/QH+v0m5qhn7XfHT7u+607NcCNOnC0HZAlMg==
|
||||
browserslist@^4.0.0, browserslist@^4.1.1, browserslist@^4.6.0, browserslist@^4.6.4, browserslist@^4.7.2:
|
||||
version "4.7.2"
|
||||
resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.2.tgz#1bb984531a476b5d389cedecb195b2cd69fb1348"
|
||||
integrity sha512-uZavT/gZXJd2UTi9Ov7/Z340WOSQ3+m1iBVRUknf+okKxonL9P83S3ctiBDtuRmRu8PiCHjqyueqQ9HYlJhxiw==
|
||||
dependencies:
|
||||
caniuse-lite "^1.0.30000999"
|
||||
electron-to-chromium "^1.3.284"
|
||||
node-releases "^1.1.36"
|
||||
caniuse-lite "^1.0.30001004"
|
||||
electron-to-chromium "^1.3.295"
|
||||
node-releases "^1.1.38"
|
||||
|
||||
bs-logger@0.x:
|
||||
version "0.2.6"
|
||||
|
|
@ -3017,10 +3009,10 @@ caniuse-api@^3.0.0:
|
|||
lodash.memoize "^4.1.2"
|
||||
lodash.uniq "^4.5.0"
|
||||
|
||||
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30000999:
|
||||
version "1.0.30001002"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001002.tgz#ba999a737b1abd5bf0fd47efe43a09b9cadbe9b0"
|
||||
integrity sha512-pRuxPE8wdrWmVPKcDmJJiGBxr6lFJq4ivdSeo9FTmGj5Rb8NX3Mby2pARG57MXF15hYAhZ0nHV5XxT2ig4bz3g==
|
||||
caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000981, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001004:
|
||||
version "1.0.30001006"
|
||||
resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001006.tgz#5b6e8288792cfa275f007b2819a00ccad7112655"
|
||||
integrity sha512-MXnUVX27aGs/QINz+QG1sWSLDr3P1A3Hq5EUWoIt0T7K24DuvMxZEnh3Y5aHlJW6Bz2aApJdSewdYLd8zQnUuw==
|
||||
|
||||
capture-exit@^2.0.0:
|
||||
version "2.0.0"
|
||||
|
|
@ -3142,6 +3134,13 @@ cli-cursor@^2.0.0, cli-cursor@^2.1.0:
|
|||
dependencies:
|
||||
restore-cursor "^2.0.0"
|
||||
|
||||
cli-cursor@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
|
||||
integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
|
||||
dependencies:
|
||||
restore-cursor "^3.1.0"
|
||||
|
||||
cli-spinners@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-1.3.1.tgz#002c1990912d0d59580c93bd36c056de99e4259a"
|
||||
|
|
@ -3367,11 +3366,9 @@ connect-history-api-fallback@^1.3.0:
|
|||
integrity sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==
|
||||
|
||||
console-browserify@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
|
||||
integrity sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=
|
||||
dependencies:
|
||||
date-now "^0.1.4"
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336"
|
||||
integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==
|
||||
|
||||
console-control-strings@^1.0.0, console-control-strings@~1.1.0:
|
||||
version "1.1.0"
|
||||
|
|
@ -3440,11 +3437,11 @@ copy-descriptor@^0.1.0:
|
|||
integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=
|
||||
|
||||
core-js-compat@^3.1.1:
|
||||
version "3.3.3"
|
||||
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.3.3.tgz#82642808cf484a35292b2f8e83ef9376884e760f"
|
||||
integrity sha512-GNZkENsx5pMnS7Inwv7ZO/s3B68a9WU5kIjxqrD/tkNR8mtfXJRk8fAKRlbvWZSGPc59/TkiOBDYl5Cb65pTVA==
|
||||
version "3.3.5"
|
||||
resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.3.5.tgz#7abf70778b73dc74aa99d4075aefcd99b76f2c3a"
|
||||
integrity sha512-44ZORuapx0MUht0MUk0p9lcQPh7n/LDXehimTmjCs0CYblpKZcqVd5w0OQDUDq5OQjEbazWObHDQJWvvHYPNTg==
|
||||
dependencies:
|
||||
browserslist "^4.7.1"
|
||||
browserslist "^4.7.2"
|
||||
semver "^6.3.0"
|
||||
|
||||
core-js@3.2.1:
|
||||
|
|
@ -3655,21 +3652,13 @@ css-to-react-native@^2.2.2:
|
|||
css-color-keywords "^1.0.0"
|
||||
postcss-value-parser "^3.3.0"
|
||||
|
||||
css-tree@1.0.0-alpha.29:
|
||||
version "1.0.0-alpha.29"
|
||||
resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz#3fa9d4ef3142cbd1c301e7664c1f352bd82f5a39"
|
||||
integrity sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==
|
||||
dependencies:
|
||||
mdn-data "~1.1.0"
|
||||
source-map "^0.5.3"
|
||||
|
||||
css-tree@1.0.0-alpha.33:
|
||||
version "1.0.0-alpha.33"
|
||||
resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.33.tgz#970e20e5a91f7a378ddd0fc58d0b6c8d4f3be93e"
|
||||
integrity sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==
|
||||
css-tree@1.0.0-alpha.37:
|
||||
version "1.0.0-alpha.37"
|
||||
resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22"
|
||||
integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==
|
||||
dependencies:
|
||||
mdn-data "2.0.4"
|
||||
source-map "^0.5.3"
|
||||
source-map "^0.6.1"
|
||||
|
||||
css-unit-converter@^1.1.1:
|
||||
version "1.1.1"
|
||||
|
|
@ -3774,12 +3763,12 @@ cssnano@^4.1.10:
|
|||
is-resolvable "^1.0.0"
|
||||
postcss "^7.0.0"
|
||||
|
||||
csso@^3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/csso/-/csso-3.5.1.tgz#7b9eb8be61628973c1b261e169d2f024008e758b"
|
||||
integrity sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==
|
||||
csso@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.2.tgz#e5f81ab3a56b8eefb7f0092ce7279329f454de3d"
|
||||
integrity sha512-kS7/oeNVXkHWxby5tHVxlhjizRCSv8QdU7hB2FpdAibDU8FjTAolhNjKNTiLzXtUrKT6HwClE81yXwEk1309wg==
|
||||
dependencies:
|
||||
css-tree "1.0.0-alpha.29"
|
||||
css-tree "1.0.0-alpha.37"
|
||||
|
||||
cssom@0.3.x, "cssom@>= 0.3.2 < 0.4.0", cssom@^0.3.4:
|
||||
version "0.3.8"
|
||||
|
|
@ -3844,11 +3833,6 @@ date-fns@^1.27.2:
|
|||
resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.30.1.tgz#2e71bf0b119153dbb4cc4e88d9ea5acfb50dc05c"
|
||||
integrity sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==
|
||||
|
||||
date-now@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/date-now/-/date-now-0.1.4.tgz#eaf439fd4d4848ad74e5cc7dbef200672b9e345b"
|
||||
integrity sha1-6vQ5/U1ISK105cx9vvIAZyueNFs=
|
||||
|
||||
debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0, debug@^2.6.8, debug@^2.6.9:
|
||||
version "2.6.9"
|
||||
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
|
||||
|
|
@ -4251,10 +4235,10 @@ ee-first@1.1.1:
|
|||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
||||
|
||||
electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.284:
|
||||
version "1.3.292"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.292.tgz#7812fc5138619342f1dd5823df6e9cbb7d2820e9"
|
||||
integrity sha512-hqkem5ANpt6mxVXmhAmlbdG8iicuyM/jEYgmP1tiHPeOLyZoTyGUzrDmJS/xyrrZy9frkW1uQcubicu7f6DS5g==
|
||||
electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.295:
|
||||
version "1.3.296"
|
||||
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.296.tgz#a1d4322d742317945285d3ba88966561b67f3ac8"
|
||||
integrity sha512-s5hv+TSJSVRsxH190De66YHb50pBGTweT9XGWYu/LMR20KX6TsjFzObo36CjVAzM+PUeeKSBRtm/mISlCzeojQ==
|
||||
|
||||
elegant-spinner@^1.0.1:
|
||||
version "1.0.1"
|
||||
|
|
@ -4279,6 +4263,11 @@ emoji-regex@^7.0.1, emoji-regex@^7.0.2:
|
|||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
|
||||
integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==
|
||||
|
||||
emoji-regex@^8.0.0:
|
||||
version "8.0.0"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
||||
|
||||
emojis-list@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389"
|
||||
|
|
@ -4361,14 +4350,14 @@ es-to-primitive@^1.2.0:
|
|||
is-date-object "^1.0.1"
|
||||
is-symbol "^1.0.2"
|
||||
|
||||
es5-ext@^0.10.35, es5-ext@^0.10.50, es5-ext@^0.10.51:
|
||||
version "0.10.51"
|
||||
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.51.tgz#ed2d7d9d48a12df86e0299287e93a09ff478842f"
|
||||
integrity sha512-oRpWzM2WcLHVKpnrcyB7OW8j/s67Ba04JCm0WnNv3RiABSvs7mrQlutB8DBv793gKcp0XENR8Il8WxGTlZ73gQ==
|
||||
es5-ext@^0.10.35, es5-ext@^0.10.50:
|
||||
version "0.10.52"
|
||||
resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.52.tgz#bb21777e919a04263736ded120a9d665f10ea63f"
|
||||
integrity sha512-bWCbE9fbpYQY4CU6hJbJ1vSz70EClMlDgJ7BmwI+zEJhxrwjesZRPglGJlsZhu0334U3hI+gaspwksH9IGD6ag==
|
||||
dependencies:
|
||||
es6-iterator "~2.0.3"
|
||||
es6-symbol "~3.1.1"
|
||||
next-tick "^1.0.0"
|
||||
es6-symbol "~3.1.2"
|
||||
next-tick "~1.0.0"
|
||||
|
||||
es6-error@^4.1.1:
|
||||
version "4.1.1"
|
||||
|
|
@ -4384,13 +4373,13 @@ es6-iterator@2.0.3, es6-iterator@~2.0.3:
|
|||
es5-ext "^0.10.35"
|
||||
es6-symbol "^3.1.1"
|
||||
|
||||
es6-symbol@^3.1.1, es6-symbol@~3.1.1:
|
||||
version "3.1.2"
|
||||
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.2.tgz#859fdd34f32e905ff06d752e7171ddd4444a7ed1"
|
||||
integrity sha512-/ZypxQsArlv+KHpGvng52/Iz8by3EQPxhmbuz8yFG89N/caTFBSbcXONDw0aMjy827gQg26XAjP4uXFvnfINmQ==
|
||||
es6-symbol@^3.1.1, es6-symbol@~3.1.2:
|
||||
version "3.1.3"
|
||||
resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18"
|
||||
integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==
|
||||
dependencies:
|
||||
d "^1.0.1"
|
||||
es5-ext "^0.10.51"
|
||||
ext "^1.1.2"
|
||||
|
||||
escape-html@~1.0.3:
|
||||
version "1.0.3"
|
||||
|
|
@ -4415,9 +4404,9 @@ escodegen@^1.11.0, escodegen@^1.9.1:
|
|||
source-map "~0.6.1"
|
||||
|
||||
eslint-config-prettier@^6.1.0:
|
||||
version "6.4.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.4.0.tgz#0a04f147e31d33c6c161b2dd0971418ac52d0477"
|
||||
integrity sha512-YrKucoFdc7SEko5Sxe4r6ixqXPDP1tunGw91POeZTTRKItf/AMFYt/YLEQtZMkR2LVpAVhcAcZgcWpm1oGPW7w==
|
||||
version "6.5.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-6.5.0.tgz#aaf9a495e2a816865e541bfdbb73a65cc162b3eb"
|
||||
integrity sha512-cjXp8SbO9VFGW/Z7mbTydqS9to8Z58E5aYhj3e1+Hx7lS9s6gL5ILKNpCqZAFOVYRcSkWPFYljHrEh8QFEK5EQ==
|
||||
dependencies:
|
||||
get-stdin "^6.0.0"
|
||||
|
||||
|
|
@ -4557,7 +4546,7 @@ eslint-scope@^5.0.0:
|
|||
esrecurse "^4.1.0"
|
||||
estraverse "^4.1.1"
|
||||
|
||||
eslint-utils@^1.4.2:
|
||||
eslint-utils@^1.4.2, eslint-utils@^1.4.3:
|
||||
version "1.4.3"
|
||||
resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f"
|
||||
integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==
|
||||
|
|
@ -4570,9 +4559,9 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0:
|
|||
integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==
|
||||
|
||||
eslint@^6.1.0, eslint@^6.4.0:
|
||||
version "6.5.1"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.5.1.tgz#828e4c469697d43bb586144be152198b91e96ed6"
|
||||
integrity sha512-32h99BoLYStT1iq1v2P9uwpyznQ4M2jRiFB6acitKz52Gqn+vPaMDUTB1bYi1WN4Nquj2w+t+bimYUG83DC55A==
|
||||
version "6.6.0"
|
||||
resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.6.0.tgz#4a01a2fb48d32aacef5530ee9c5a78f11a8afd04"
|
||||
integrity sha512-PpEBq7b6qY/qrOmpYQ/jTMDYfuQMELR4g4WI1M/NaSDDD/bdcMb+dj4Hgks7p41kW2caXsPsEZAEAyAgjVVC0g==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.0.0"
|
||||
ajv "^6.10.0"
|
||||
|
|
@ -4581,9 +4570,9 @@ eslint@^6.1.0, eslint@^6.4.0:
|
|||
debug "^4.0.1"
|
||||
doctrine "^3.0.0"
|
||||
eslint-scope "^5.0.0"
|
||||
eslint-utils "^1.4.2"
|
||||
eslint-utils "^1.4.3"
|
||||
eslint-visitor-keys "^1.1.0"
|
||||
espree "^6.1.1"
|
||||
espree "^6.1.2"
|
||||
esquery "^1.0.1"
|
||||
esutils "^2.0.2"
|
||||
file-entry-cache "^5.0.1"
|
||||
|
|
@ -4593,7 +4582,7 @@ eslint@^6.1.0, eslint@^6.4.0:
|
|||
ignore "^4.0.6"
|
||||
import-fresh "^3.0.0"
|
||||
imurmurhash "^0.1.4"
|
||||
inquirer "^6.4.1"
|
||||
inquirer "^7.0.0"
|
||||
is-glob "^4.0.0"
|
||||
js-yaml "^3.13.1"
|
||||
json-stable-stringify-without-jsonify "^1.0.1"
|
||||
|
|
@ -4612,7 +4601,7 @@ eslint@^6.1.0, eslint@^6.4.0:
|
|||
text-table "^0.2.0"
|
||||
v8-compile-cache "^2.0.3"
|
||||
|
||||
espree@^6.1.1:
|
||||
espree@^6.1.2:
|
||||
version "6.1.2"
|
||||
resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d"
|
||||
integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==
|
||||
|
|
@ -4789,6 +4778,13 @@ express@^4.16.2:
|
|||
utils-merge "1.0.1"
|
||||
vary "~1.1.2"
|
||||
|
||||
ext@^1.1.2:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.yarnpkg.com/ext/-/ext-1.1.2.tgz#d1d216c83641bb4cb7684622b063cff44a19ce35"
|
||||
integrity sha512-/KLjJdTNyDepCihrk4HQt57nAE1IRCEo5jUt+WgWGCr1oARhibDvmI2DMcSNWood1T9AUWwq+jaV1wvRqaXfnA==
|
||||
dependencies:
|
||||
type "^2.0.0"
|
||||
|
||||
extend-shallow@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f"
|
||||
|
|
@ -4938,6 +4934,13 @@ figures@^2.0.0:
|
|||
dependencies:
|
||||
escape-string-regexp "^1.0.5"
|
||||
|
||||
figures@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/figures/-/figures-3.1.0.tgz#4b198dd07d8d71530642864af2d45dd9e459c4ec"
|
||||
integrity sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==
|
||||
dependencies:
|
||||
escape-string-regexp "^1.0.5"
|
||||
|
||||
file-entry-cache@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c"
|
||||
|
|
@ -5439,9 +5442,9 @@ gotrue-js@^0.9.25:
|
|||
micro-api-client "^3.2.1"
|
||||
|
||||
graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2:
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02"
|
||||
integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423"
|
||||
integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==
|
||||
|
||||
growly@^1.3.0:
|
||||
version "1.3.0"
|
||||
|
|
@ -5467,9 +5470,9 @@ handle-thing@^2.0.0:
|
|||
integrity sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==
|
||||
|
||||
handlebars@^4.1.2:
|
||||
version "4.4.5"
|
||||
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.4.5.tgz#1b1f94f9bfe7379adda86a8b73fb570265a0dddd"
|
||||
integrity sha512-0Ce31oWVB7YidkaTq33ZxEbN+UDxMMgThvCe8ptgQViymL5DPis9uLdTA13MiRPhgvqyxIegugrP97iK3JeBHg==
|
||||
version "4.5.1"
|
||||
resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.5.1.tgz#8a01c382c180272260d07f2d1aa3ae745715c7ba"
|
||||
integrity sha512-C29UoFzHe9yM61lOsIlCE5/mQVGrnIOrOq7maQl76L7tYPCgC1og0Ajt6uWnX4ZTxBPnjw+CUvawphwCfJgUnA==
|
||||
dependencies:
|
||||
neo-async "^2.6.0"
|
||||
optimist "^0.6.1"
|
||||
|
|
@ -5975,22 +5978,22 @@ inquirer@6.5.0:
|
|||
strip-ansi "^5.1.0"
|
||||
through "^2.3.6"
|
||||
|
||||
inquirer@^6.4.1:
|
||||
version "6.5.2"
|
||||
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca"
|
||||
integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ==
|
||||
inquirer@^7.0.0:
|
||||
version "7.0.0"
|
||||
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.0.tgz#9e2b032dde77da1db5db804758b8fea3a970519a"
|
||||
integrity sha512-rSdC7zelHdRQFkWnhsMu2+2SO41mpv2oF2zy4tMhmiLWkcKbOAs87fWAJhVXttKVwhdZvymvnuM95EyEXg2/tQ==
|
||||
dependencies:
|
||||
ansi-escapes "^3.2.0"
|
||||
ansi-escapes "^4.2.1"
|
||||
chalk "^2.4.2"
|
||||
cli-cursor "^2.1.0"
|
||||
cli-cursor "^3.1.0"
|
||||
cli-width "^2.0.0"
|
||||
external-editor "^3.0.3"
|
||||
figures "^2.0.0"
|
||||
lodash "^4.17.12"
|
||||
mute-stream "0.0.7"
|
||||
figures "^3.0.0"
|
||||
lodash "^4.17.15"
|
||||
mute-stream "0.0.8"
|
||||
run-async "^2.2.0"
|
||||
rxjs "^6.4.0"
|
||||
string-width "^2.1.0"
|
||||
string-width "^4.1.0"
|
||||
strip-ansi "^5.1.0"
|
||||
through "^2.3.6"
|
||||
|
||||
|
|
@ -6192,6 +6195,11 @@ is-fullwidth-code-point@^2.0.0:
|
|||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
|
||||
integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=
|
||||
|
||||
is-fullwidth-code-point@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
|
||||
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
|
||||
|
||||
is-generator-fn@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118"
|
||||
|
|
@ -7034,9 +7042,9 @@ jsprim@^1.2.2:
|
|||
verror "1.10.0"
|
||||
|
||||
jsx-ast-utils@^2.1.0, jsx-ast-utils@^2.2.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.1.tgz#4d4973ebf8b9d2837ee91a8208cc66f3a2776cfb"
|
||||
integrity sha512-v3FxCcAf20DayI+uxnCuw795+oOIkVu6EnJ1+kSzhqqTZHNkTZ7B66ZgLp4oLJ/gbA64cI0B7WRoHZMSRdyVRQ==
|
||||
version "2.2.3"
|
||||
resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f"
|
||||
integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA==
|
||||
dependencies:
|
||||
array-includes "^3.0.3"
|
||||
object.assign "^4.1.0"
|
||||
|
|
@ -7472,11 +7480,6 @@ mdn-data@2.0.4:
|
|||
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b"
|
||||
integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==
|
||||
|
||||
mdn-data@~1.1.0:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-1.1.4.tgz#50b5d4ffc4575276573c4eedb8780812a8419f01"
|
||||
integrity sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==
|
||||
|
||||
media-typer@0.3.0:
|
||||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748"
|
||||
|
|
@ -7818,15 +7821,20 @@ mute-stream@0.0.7:
|
|||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
|
||||
integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=
|
||||
|
||||
mute-stream@0.0.8:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
||||
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
|
||||
|
||||
nan@^2.12.1, nan@^2.13.2:
|
||||
version "2.14.0"
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c"
|
||||
integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==
|
||||
|
||||
nanoid@^2.0.4:
|
||||
version "2.1.4"
|
||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.4.tgz#c38b2c1f7f4c60cde2291f40854420328d0d621e"
|
||||
integrity sha512-PijW88Ry+swMFfArOrm7uRAdVmJilLbej7WwVY6L5QwLDckqxSOinGGMV596yp5C8+MH3VvCXCSZ6AodGtKrYQ==
|
||||
version "2.1.6"
|
||||
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-2.1.6.tgz#0665418f692e54cf44f34d4010761f3240a03314"
|
||||
integrity sha512-2NDzpiuEy3+H0AVtdt8LoFi7PnqkOnIzYmJQp7xsEU6VexLluHQwKREuiz57XaQC5006seIadPrIZJhyS2n7aw==
|
||||
|
||||
nanomatch@^1.2.9:
|
||||
version "1.2.13"
|
||||
|
|
@ -7874,7 +7882,7 @@ netlify-identity-widget@^1.5.5:
|
|||
resolved "https://registry.yarnpkg.com/netlify-identity-widget/-/netlify-identity-widget-1.5.5.tgz#e9ba8d7676263507106060236cf55c2992f425e4"
|
||||
integrity sha512-gCILbXMVn83TiRaiPCWk93ynyyYgxn8N/KoO+WOfyGZaNgq7gMMPtn7vo6VDe/ZczgyCn9DRlm3artNoj78/MQ==
|
||||
|
||||
next-tick@^1.0.0:
|
||||
next-tick@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c"
|
||||
integrity sha1-yobR/ogoFpsBICCOPchCS524NCw=
|
||||
|
|
@ -7980,17 +7988,17 @@ node-pre-gyp@^0.12.0:
|
|||
semver "^5.3.0"
|
||||
tar "^4"
|
||||
|
||||
node-releases@^1.1.29, node-releases@^1.1.36:
|
||||
version "1.1.38"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.38.tgz#d81b365df2936654ba37f509ba2fbe91eff2578b"
|
||||
integrity sha512-/5NZAaOyTj134Oy5Cp/J8mso8OD/D9CSuL+6TOXXsTKO8yjc5e4up75SRPCganCjwFKMj2jbp5tR0dViVdox7g==
|
||||
node-releases@^1.1.29, node-releases@^1.1.38:
|
||||
version "1.1.39"
|
||||
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.39.tgz#c1011f30343aff5b633153b10ff691d278d08e8d"
|
||||
integrity sha512-8MRC/ErwNCHOlAFycy9OPca46fQYUjbJRDcZTHVWIGXIjYLM73k70vv3WkYutVnM4cCo4hE0MqBVVZjP6vjISA==
|
||||
dependencies:
|
||||
semver "^6.3.0"
|
||||
|
||||
node-sass@^4.11.0:
|
||||
version "4.12.0"
|
||||
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017"
|
||||
integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==
|
||||
version "4.13.0"
|
||||
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.0.tgz#b647288babdd6a1cb726de4545516b31f90da066"
|
||||
integrity sha512-W1XBrvoJ1dy7VsvTAS5q1V45lREbTlZQqFbiHb3R3OTTCma0XBtuG6xZ6Z4506nR4lmHPTqVRwxT6KgtWC97CA==
|
||||
dependencies:
|
||||
async-foreach "^0.1.3"
|
||||
chalk "^1.1.1"
|
||||
|
|
@ -7999,7 +8007,7 @@ node-sass@^4.11.0:
|
|||
get-stdin "^4.0.1"
|
||||
glob "^7.0.3"
|
||||
in-publish "^2.0.0"
|
||||
lodash "^4.17.11"
|
||||
lodash "^4.17.15"
|
||||
meow "^3.7.0"
|
||||
mkdirp "^0.5.1"
|
||||
nan "^2.13.2"
|
||||
|
|
@ -9435,10 +9443,10 @@ postcss@7.0.14:
|
|||
source-map "^0.6.1"
|
||||
supports-color "^6.1.0"
|
||||
|
||||
postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.18, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.6:
|
||||
version "7.0.18"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.18.tgz#4b9cda95ae6c069c67a4d933029eddd4838ac233"
|
||||
integrity sha512-/7g1QXXgegpF+9GJj4iN7ChGF40sYuGYJ8WZu8DZWnmhQ/G36hfdk3q9LBJmoK+lZ+yzZ5KYpOoxq7LF1BxE8g==
|
||||
postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.19, postcss@^7.0.2, postcss@^7.0.5, postcss@^7.0.6:
|
||||
version "7.0.21"
|
||||
resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.21.tgz#06bb07824c19c2021c5d056d5b10c35b989f7e17"
|
||||
integrity sha512-uIFtJElxJo29QC753JzhidoAhvp/e/Exezkdhfmt8AymWT6/5B7W1WmponYWkHk2eg6sONyTch0A3nkMPun3SQ==
|
||||
dependencies:
|
||||
chalk "^2.4.2"
|
||||
source-map "^0.6.1"
|
||||
|
|
@ -10444,6 +10452,14 @@ restore-cursor@^2.0.0:
|
|||
onetime "^2.0.0"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
restore-cursor@^3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
|
||||
integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
|
||||
dependencies:
|
||||
onetime "^5.1.0"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
ret@~0.1.10:
|
||||
version "0.1.15"
|
||||
resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc"
|
||||
|
|
@ -10610,9 +10626,9 @@ rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.5.0, rollup-pluginutils@^2.6.0,
|
|||
estree-walker "^0.6.1"
|
||||
|
||||
rollup@^1.12.0:
|
||||
version "1.25.2"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.25.2.tgz#739f508bd8f7ece52bb6c1fcda83466af82b7f6d"
|
||||
integrity sha512-+7z6Wab/L45QCPcfpuTZKwKiB0tynj05s/+s2U3F2Bi7rOLPr9UcjUwO7/xpjlPNXA/hwnth6jBExFRGyf3tMg==
|
||||
version "1.26.0"
|
||||
resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.26.0.tgz#cf40fd5e1edc4d7f3d4235a0a43f1c2be1cf294b"
|
||||
integrity sha512-5HljNYn9icFvXX+Oe97qY5TWvnWhKqgGT0HGeWWqFPx7w7+Anzg7dfHMtUif7YYy6QxAgynDSwK6uxbgcrVUxw==
|
||||
dependencies:
|
||||
"@types/estree" "*"
|
||||
"@types/node" "*"
|
||||
|
|
@ -11069,9 +11085,9 @@ source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
|
|||
urix "^0.1.0"
|
||||
|
||||
source-map-support@^0.5.6, source-map-support@~0.5.10, source-map-support@~0.5.12:
|
||||
version "0.5.13"
|
||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"
|
||||
integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==
|
||||
version "0.5.16"
|
||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042"
|
||||
integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
|
||||
dependencies:
|
||||
buffer-from "^1.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
|
@ -11093,7 +11109,7 @@ source-map@^0.4.2:
|
|||
dependencies:
|
||||
amdefine ">=0.0.4"
|
||||
|
||||
source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7:
|
||||
source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7:
|
||||
version "0.5.7"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
||||
integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=
|
||||
|
|
@ -11305,6 +11321,15 @@ string-width@^3.0.0, string-width@^3.1.0:
|
|||
is-fullwidth-code-point "^2.0.0"
|
||||
strip-ansi "^5.1.0"
|
||||
|
||||
string-width@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff"
|
||||
integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ==
|
||||
dependencies:
|
||||
emoji-regex "^8.0.0"
|
||||
is-fullwidth-code-point "^3.0.0"
|
||||
strip-ansi "^5.2.0"
|
||||
|
||||
string.prototype.trimleft@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634"
|
||||
|
|
@ -11421,9 +11446,9 @@ style-loader@1.0.0:
|
|||
schema-utils "^2.0.1"
|
||||
|
||||
styled-components@^4.1.3:
|
||||
version "4.4.0"
|
||||
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.4.0.tgz#4e381e2dab831d0e6ea431c2840a96323e84e21b"
|
||||
integrity sha512-xQ6vTI/0zNjZ1BBDRxyjvBddrxhQ3DxjeCdaLM1lSn5FDnkTOQgRkmWvcUiTajqc5nJqKVl+7sUioMqktD0+Zw==
|
||||
version "4.4.1"
|
||||
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-4.4.1.tgz#e0631e889f01db67df4de576fedaca463f05c2f2"
|
||||
integrity sha512-RNqj14kYzw++6Sr38n7197xG33ipEOktGElty4I70IKzQF1jzaD1U4xQ+Ny/i03UUhHlC5NWEO+d8olRCDji6g==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.0.0"
|
||||
"@babel/traverse" "^7.0.0"
|
||||
|
|
@ -11483,16 +11508,16 @@ svg-parser@^2.0.0:
|
|||
integrity sha512-1gtApepKFweigFZj3sGO8KT8LvVZK8io146EzXrpVuWCDAbISz/yMucco3hWTkpZNoPabM+dnMOpy6Swue68Zg==
|
||||
|
||||
svgo@^1.0.0, svgo@^1.2.2:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.0.tgz#bae51ba95ded9a33a36b7c46ce9c359ae9154313"
|
||||
integrity sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==
|
||||
version "1.3.2"
|
||||
resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167"
|
||||
integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==
|
||||
dependencies:
|
||||
chalk "^2.4.1"
|
||||
coa "^2.0.2"
|
||||
css-select "^2.0.0"
|
||||
css-select-base-adapter "^0.1.1"
|
||||
css-tree "1.0.0-alpha.33"
|
||||
csso "^3.5.1"
|
||||
css-tree "1.0.0-alpha.37"
|
||||
csso "^4.0.2"
|
||||
js-yaml "^3.13.1"
|
||||
mkdirp "~0.5.1"
|
||||
object.values "^1.1.0"
|
||||
|
|
@ -11882,6 +11907,11 @@ type@^1.0.1:
|
|||
resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0"
|
||||
integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==
|
||||
|
||||
type@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/type/-/type-2.0.0.tgz#5f16ff6ef2eb44f260494dae271033b29c09a9c3"
|
||||
integrity sha512-KBt58xCHry4Cejnc2ISQAF7QY+ORngsWfxezO68+12hKV6lQY8P/psIkcbjeHWn7MqcgciWJyCCevFMJdIXpow==
|
||||
|
||||
typed-styles@^0.0.7:
|
||||
version "0.0.7"
|
||||
resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9"
|
||||
|
|
@ -11925,9 +11955,9 @@ uglify-js@3.4.x:
|
|||
source-map "~0.6.1"
|
||||
|
||||
uglify-js@^3.1.4:
|
||||
version "3.6.3"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.3.tgz#1351533bbe22cc698f012589ed6bd4cbd971bff8"
|
||||
integrity sha512-KfQUgOqTkLp2aZxrMbCuKCDGW9slFYu2A23A36Gs7sGzTLcRBDORdOi5E21KWHFIfkY8kzgi/Pr1cXCh0yIp5g==
|
||||
version "3.6.5"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.6.5.tgz#b0ee796d2ae7e25672e04f65629b997cd4b30bd6"
|
||||
integrity sha512-7L3W+Npia1OCr5Blp4/Vw83tK1mu5gnoIURtT1fUVfQ3Kf8WStWV6NJz0fdoBJZls0KlweruRTLVe6XLafmy5g==
|
||||
dependencies:
|
||||
commander "~2.20.3"
|
||||
source-map "~0.6.1"
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user