Upgrade to Flow 0.71

This commit is contained in:
Tom Moor 2018-05-05 16:16:08 -07:00
parent 4a4f9f7107
commit 518015f55b
256 changed files with 23205 additions and 3658 deletions

View File

@ -35,7 +35,6 @@ module.file_ext=.json
esproposal.decorators=ignore esproposal.decorators=ignore
esproposal.class_static_fields=enable esproposal.class_static_fields=enable
esproposal.class_instance_fields=enable esproposal.class_instance_fields=enable
unsafe.enable_getters_and_setters=true
suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe
suppress_comment=\\(.\\|\n\\)*\\$FlowIssue suppress_comment=\\(.\\|\n\\)*\\$FlowIssue

View File

@ -1,18 +1,17 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';
import styled from 'styled-components'; import styled from 'styled-components';
import { color } from 'shared/styles/constants'; import { color } from 'shared/styles/constants';
type Props = { type Props = {
children: React.Element<*>, children: React.Node,
type?: 'info' | 'success' | 'warning' | 'danger' | 'offline', type?: 'info' | 'success' | 'warning' | 'danger' | 'offline',
}; };
@observer @observer
class Alert extends React.Component { class Alert extends React.Component<Props> {
props: Props;
defaultProps = { defaultProps = {
type: 'info', type: 'info',
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { Provider } from 'mobx-react'; import { Provider } from 'mobx-react';
import stores from 'stores'; import stores from 'stores';
import ApiKeysStore from 'stores/ApiKeysStore'; import ApiKeysStore from 'stores/ApiKeysStore';
@ -10,7 +10,7 @@ import IntegrationsStore from 'stores/IntegrationsStore';
import CacheStore from 'stores/CacheStore'; import CacheStore from 'stores/CacheStore';
type Props = { type Props = {
children?: React.Element<any>, children?: React.Node,
}; };
let authenticatedStores; let authenticatedStores;

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
@ -7,7 +7,7 @@ import { color } from 'shared/styles/constants';
import placeholder from './placeholder.png'; import placeholder from './placeholder.png';
@observer @observer
class Avatar extends Component { class Avatar extends React.Component<*> {
@observable error: boolean; @observable error: boolean;
handleError = () => { handleError = () => {

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { color } from 'shared/styles/constants'; import { color } from 'shared/styles/constants';
import { darken, lighten } from 'polished'; import { darken, lighten } from 'polished';
@ -88,9 +88,9 @@ const Inner = styled.span`
export type Props = { export type Props = {
type?: string, type?: string,
value?: string, value?: string,
icon?: React$Element<any>, icon?: React.Node,
className?: string, className?: string,
children?: React$Element<any>, children?: React.Node,
}; };
export default function Button({ export default function Button({

View File

@ -1,10 +1,10 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import breakpoint from 'styled-components-breakpoint'; import breakpoint from 'styled-components-breakpoint';
type Props = { type Props = {
children?: React.Element<any>, children?: React.Node,
}; };
const Container = styled.div` const Container = styled.div`

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import distanceInWordsToNow from 'date-fns/distance_in_words_to_now'; import distanceInWordsToNow from 'date-fns/distance_in_words_to_now';
import styled from 'styled-components'; import styled from 'styled-components';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { observable, computed, action } from 'mobx'; import { observable, computed, action } from 'mobx';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import styled from 'styled-components'; import styled from 'styled-components';
@ -26,9 +26,7 @@ type Props = {
}; };
@observer @observer
class ColorPicker extends React.Component { class ColorPicker extends React.Component<Props> {
props: Props;
@observable selectedColor: string = colors[0]; @observable selectedColor: string = colors[0];
@observable customColorValue: string = ''; @observable customColorValue: string = '';
@observable customColorSelected: boolean; @observable customColorSelected: boolean;
@ -69,14 +67,14 @@ class ColorPicker extends React.Component {
}; };
@action @action
focusOnCustomColor = (event: SyntheticEvent) => { focusOnCustomColor = (event: SyntheticEvent<*>) => {
this.selectedColor = ''; this.selectedColor = '';
this.customColorSelected = true; this.customColorSelected = true;
this.fireCallback(); this.fireCallback();
}; };
@action @action
setCustomColor = (event: SyntheticEvent) => { setCustomColor = (event: SyntheticEvent<*>) => {
let target = event.target; let target = event.target;
if (target instanceof HTMLInputElement) { if (target instanceof HTMLInputElement) {
const color = target.value; const color = target.value;

View File

@ -1,22 +1,20 @@
// @flow // @flow
import React, { PureComponent } from 'react'; import * as React from 'react';
import copy from 'copy-to-clipboard'; import copy from 'copy-to-clipboard';
type Props = { type Props = {
text: string, text: string,
children?: React.Element<any>, children?: React.Node,
onClick?: () => void, onClick?: () => void,
onCopy: () => void, onCopy: () => void,
}; };
class CopyToClipboard extends PureComponent { class CopyToClipboard extends React.PureComponent<Props> {
props: Props; onClick = (ev: SyntheticEvent<*>) => {
onClick = (ev: SyntheticEvent) => {
const { text, onCopy, children } = this.props; const { text, onCopy, children } = this.props;
const elem = React.Children.only(children); const elem = React.Children.only(children);
copy(text, { copy(text, {
debug: __DEV__, debug: !!__DEV__,
}); });
if (onCopy) onCopy(); if (onCopy) onCopy();

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';

View File

@ -1,16 +1,16 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import Document from 'models/Document'; import Document from 'models/Document';
import DocumentPreview from 'components/DocumentPreview'; import DocumentPreview from 'components/DocumentPreview';
import ArrowKeyNavigation from 'boundless-arrow-key-navigation'; import ArrowKeyNavigation from 'boundless-arrow-key-navigation';
class DocumentList extends React.Component { type Props = {
props: { documents: Document[],
documents: Document[], showCollection?: boolean,
showCollection?: boolean, limit?: number,
limit?: number, };
};
class DocumentList extends React.Component<Props> {
render() { render() {
const { limit, showCollection } = this.props; const { limit, showCollection } = this.props;
const documents = limit const documents = limit

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import Document from 'models/Document'; import Document from 'models/Document';
@ -89,16 +89,14 @@ const Actions = styled(Flex)`
`; `;
@observer @observer
class DocumentPreview extends Component { class DocumentPreview extends React.Component<Props> {
props: Props; star = (ev: SyntheticEvent<*>) => {
star = (ev: SyntheticEvent) => {
ev.preventDefault(); ev.preventDefault();
ev.stopPropagation(); ev.stopPropagation();
this.props.document.star(); this.props.document.star();
}; };
unstar = (ev: SyntheticEvent) => { unstar = (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
ev.stopPropagation(); ev.stopPropagation();
this.props.document.unstar(); this.props.document.unstar();

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import distanceInWordsToNow from 'date-fns/distance_in_words_to_now'; import distanceInWordsToNow from 'date-fns/distance_in_words_to_now';
import styled from 'styled-components'; import styled from 'styled-components';
import { color } from 'shared/styles/constants'; import { color } from 'shared/styles/constants';
@ -17,13 +17,13 @@ const Modified = styled.span`
font-weight: ${props => (props.highlight ? '600' : '400')}; font-weight: ${props => (props.highlight ? '600' : '400')};
`; `;
class PublishingInfo extends Component { type Props = {
props: { collection?: Collection,
collection?: Collection, document: Document,
document: Document, views?: number,
views?: number, };
};
class PublishingInfo extends React.Component<Props> {
render() { render() {
const { collection, document } = this.props; const { collection, document } = this.props;
const { const {

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import Popover from 'components/Popover'; import Popover from 'components/Popover';
@ -27,11 +27,10 @@ type Props = {
}; };
@observer @observer
class DocumentViews extends Component { class DocumentViews extends React.Component<Props> {
@observable opened: boolean = false; @observable opened: boolean = false;
anchor: HTMLElement; anchor: ?HTMLElement;
store: DocumentViewersStore; store: DocumentViewersStore;
props: Props;
constructor(props: Props) { constructor(props: Props) {
super(props); super(props);
@ -46,7 +45,7 @@ class DocumentViews extends Component {
this.opened = false; this.opened = false;
}; };
setRef = (ref: HTMLElement) => { setRef = (ref: ?HTMLElement) => {
this.anchor = ref; this.anchor = ref;
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';
import styled from 'styled-components'; import styled from 'styled-components';
import map from 'lodash/map'; import map from 'lodash/map';
@ -26,9 +26,7 @@ const UserName = styled.span`
padding-left: 8px; padding-left: 8px;
`; `;
class DocumentViewers extends Component { class DocumentViewers extends React.Component<Props> {
props: Props;
componentDidMount() { componentDidMount() {
this.props.onMount(); this.props.onMount();
} }

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
import { injectGlobal } from 'styled-components'; import { injectGlobal } from 'styled-components';
@ -12,7 +12,7 @@ import DocumentsStore from 'stores/DocumentsStore';
import LoadingIndicator from 'components/LoadingIndicator'; import LoadingIndicator from 'components/LoadingIndicator';
type Props = { type Props = {
children?: React$Element<any>, children?: React.Node,
collectionId: string, collectionId: string,
documentId?: string, documentId?: string,
activeClassName?: string, activeClassName?: string,
@ -35,9 +35,8 @@ injectGlobal`
`; `;
@observer @observer
class DropToImport extends Component { class DropToImport extends React.Component<Props> {
@observable isImporting: boolean = false; @observable isImporting: boolean = false;
props: Props;
onDropAccepted = async (files = []) => { onDropAccepted = async (files = []) => {
this.isImporting = true; this.isImporting = true;

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import invariant from 'invariant'; import invariant from 'invariant';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
@ -10,22 +10,21 @@ import { color } from 'shared/styles/constants';
import { fadeAndScaleIn } from 'shared/styles/animations'; import { fadeAndScaleIn } from 'shared/styles/animations';
type Props = { type Props = {
label: React.Element<*>, label: React.Node,
onOpen?: () => void, onOpen?: () => void,
onClose?: () => void, onClose?: () => void,
children?: React.Element<*>, children?: React.Node,
className?: string, className?: string,
style?: Object, style?: Object,
}; };
@observer @observer
class DropdownMenu extends Component { class DropdownMenu extends React.Component<Props> {
props: Props;
@observable top: number; @observable top: number;
@observable right: number; @observable right: number;
handleOpen = (openPortal: SyntheticEvent => *) => { handleOpen = (openPortal: (SyntheticEvent<*>) => *) => {
return (ev: SyntheticMouseEvent) => { return (ev: SyntheticMouseEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
const currentTarget = ev.currentTarget; const currentTarget = ev.currentTarget;
invariant(document.body, 'why you not here'); invariant(document.body, 'why you not here');

View File

@ -1,11 +1,11 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { color } from 'shared/styles/constants'; import { color } from 'shared/styles/constants';
type Props = { type Props = {
onClick?: SyntheticEvent => void, onClick?: (SyntheticEvent<*>) => *,
children?: React.Element<any>, children?: React.Node,
}; };
const DropdownMenuItem = ({ onClick, children, ...rest }: Props) => { const DropdownMenuItem = ({ onClick, children, ...rest }: Props) => {

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { color } from 'shared/styles/constants'; import { color } from 'shared/styles/constants';

View File

@ -1,17 +1,16 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import { observable } from 'mobx'; import { observable } from 'mobx';
import CenteredContent from 'components/CenteredContent'; import CenteredContent from 'components/CenteredContent';
import PageTitle from 'components/PageTitle'; import PageTitle from 'components/PageTitle';
type Props = { type Props = {
children?: ?React.Element<any>, children?: ?React.Node,
}; };
@observer @observer
class ErrorBoundary extends Component { class ErrorBoundary extends React.Component<Props> {
props: Props;
@observable error: boolean = false; @observable error: boolean = false;
componentDidCatch(error: Error, info: Object) { componentDidCatch(error: Error, info: Object) {

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import replace from 'string-replace-to-array'; import replace from 'string-replace-to-array';
import styled from 'styled-components'; import styled from 'styled-components';
import { color } from 'shared/styles/constants'; import { color } from 'shared/styles/constants';

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';
import { size, color } from 'shared/styles/constants'; import { size, color } from 'shared/styles/constants';

View File

@ -1,13 +1,13 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';
import styled from 'styled-components'; import styled from 'styled-components';
import { size } from 'shared/styles/constants'; import { size } from 'shared/styles/constants';
type Props = { type Props = {
label: React.Element<*> | string, label: React.Node | string,
children: React.Element<*>, children: React.Node,
}; };
const Labeled = ({ label, children, ...props }: Props) => ( const Labeled = ({ label, children, ...props }: Props) => (

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { Switch, Route, withRouter } from 'react-router-dom'; import { Switch, Route, withRouter } from 'react-router-dom';
import type { Location } from 'react-router-dom'; import type { Location } from 'react-router-dom';
import { Helmet } from 'react-helmet'; import { Helmet } from 'react-helmet';
@ -27,17 +27,16 @@ type Props = {
history: Object, history: Object,
location: Location, location: Location,
documents: DocumentsStore, documents: DocumentsStore,
children?: ?React.Element<any>, children?: ?React.Node,
actions?: ?React.Element<any>, actions?: ?React.Node,
title?: ?React.Element<any>, title?: ?React.Node,
auth: AuthStore, auth: AuthStore,
ui: UiStore, ui: UiStore,
notifications?: React.Element<any>, notifications?: React.Node,
}; };
@observer @observer
class Layout extends React.Component { class Layout extends React.Component<Props> {
props: Props;
scrollable: ?HTMLDivElement; scrollable: ?HTMLDivElement;
@keydown(['/', 't']) @keydown(['/', 't'])

View File

@ -1,9 +1,9 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
@observer @observer
class LoadingIndicator extends React.Component { class LoadingIndicator extends React.Component<*> {
componentDidMount() { componentDidMount() {
this.props.ui.enableProgressBar(); this.props.ui.enableProgressBar();
} }

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import styled, { keyframes } from 'styled-components'; import styled, { keyframes } from 'styled-components';
const LoadingIndicatorBar = () => { const LoadingIndicatorBar = () => {

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import _ from 'lodash'; import _ from 'lodash';
import styled from 'styled-components'; import styled from 'styled-components';
import Mask from './components/Mask'; import Mask from './components/Mask';

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import Mask from './components/Mask'; import Mask from './components/Mask';
import Fade from 'components/Fade'; import Fade from 'components/Fade';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';

View File

@ -1,12 +1,12 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { pulsate } from 'shared/styles/animations'; import { pulsate } from 'shared/styles/animations';
import { color } from 'shared/styles/constants'; import { color } from 'shared/styles/constants';
import { randomInteger } from 'shared/random'; import { randomInteger } from 'shared/random';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';
class Mask extends Component { class Mask extends React.Component<*> {
width: number; width: number;
shouldComponentUpdate() { shouldComponentUpdate() {

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import styled, { injectGlobal } from 'styled-components'; import styled, { injectGlobal } from 'styled-components';
import breakpoint from 'styled-components-breakpoint'; import breakpoint from 'styled-components-breakpoint';
@ -10,10 +10,10 @@ import { fadeAndScaleIn } from 'shared/styles/animations';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';
type Props = { type Props = {
children?: React$Element<any>, children?: React.Node,
isOpen: boolean, isOpen: boolean,
title?: string, title?: string,
onRequestClose: () => void, onRequestClose: () => *,
}; };
// eslint-disable-next-line // eslint-disable-next-line

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import BaseModal from 'components/Modal'; import BaseModal from 'components/Modal';
import UiStore from 'stores/UiStore'; import UiStore from 'stores/UiStore';
@ -9,12 +9,11 @@ import CollectionDelete from 'scenes/CollectionDelete';
import DocumentDelete from 'scenes/DocumentDelete'; import DocumentDelete from 'scenes/DocumentDelete';
import KeyboardShortcuts from 'scenes/KeyboardShortcuts'; import KeyboardShortcuts from 'scenes/KeyboardShortcuts';
type Props = {
ui: UiStore,
};
@observer @observer
class Modals extends Component { class Modals extends React.Component<Props> {
props: {
ui: UiStore,
};
handleClose = () => { handleClose = () => {
this.props.ui.clearActiveModal(); this.props.ui.clearActiveModal();
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { Helmet } from 'react-helmet'; import { Helmet } from 'react-helmet';
type Props = { type Props = {

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import BoundlessPopover from 'boundless-popover'; import BoundlessPopover from 'boundless-popover';
import styled, { keyframes } from 'styled-components'; import styled, { keyframes } from 'styled-components';

View File

@ -1,15 +1,15 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { inject } from 'mobx-react'; import { inject } from 'mobx-react';
import { Route } from 'react-router-dom'; import { Route } from 'react-router-dom';
import UiStore from 'stores/UiStore'; import UiStore from 'stores/UiStore';
class RouteSidebarHidden extends Component { type Props = {
props: { ui: UiStore,
ui: UiStore, component: *,
component: any, };
};
class RouteSidebarHidden extends React.Component<Props> {
componentDidMount() { componentDidMount() {
this.props.ui.enableEditMode(); this.props.ui.enableEditMode();
} }

View File

@ -1,9 +1,9 @@
// @flow // @flow
// based on: https://reacttraining.com/react-router/web/guides/scroll-restoration // based on: https://reacttraining.com/react-router/web/guides/scroll-restoration
import { Component } from 'react'; import * as React from 'react';
import { withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom';
class ScrollToTop extends Component { class ScrollToTop extends React.Component<*> {
componentDidUpdate(prevProps) { componentDidUpdate(prevProps) {
if (this.props.location !== prevProps.location) { if (this.props.location !== prevProps.location) {
window.scrollTo(0, 0); window.scrollTo(0, 0);

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom';
import type { Location } from 'react-router-dom'; import type { Location } from 'react-router-dom';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
@ -26,9 +26,7 @@ type Props = {
}; };
@observer @observer
class MainSidebar extends Component { class MainSidebar extends React.Component<Props> {
props: Props;
handleCreateCollection = () => { handleCreateCollection = () => {
this.props.ui.setActiveModal('collection-new'); this.props.ui.setActiveModal('collection-new');
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
import { ProfileIcon, SettingsIcon, CodeIcon, UserIcon } from 'outline-icons'; import { ProfileIcon, SettingsIcon, CodeIcon, UserIcon } from 'outline-icons';
@ -17,9 +17,7 @@ type Props = {
}; };
@observer @observer
class SettingsSidebar extends Component { class SettingsSidebar extends React.Component<Props> {
props: Props;
returnToDashboard = () => { returnToDashboard = () => {
this.props.history.push('/'); this.props.history.push('/');
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom';
import type { Location } from 'react-router-dom'; import type { Location } from 'react-router-dom';
import styled from 'styled-components'; import styled from 'styled-components';
@ -14,7 +14,7 @@ import DocumentsStore from 'stores/DocumentsStore';
import UiStore from 'stores/UiStore'; import UiStore from 'stores/UiStore';
type Props = { type Props = {
children: React.Element<any>, children: React.Node,
history: Object, history: Object,
location: Location, location: Location,
auth: AuthStore, auth: AuthStore,
@ -23,9 +23,7 @@ type Props = {
}; };
@observer @observer
class Sidebar extends Component { class Sidebar extends React.Component<Props> {
props: Props;
componentWillReceiveProps = (nextProps: Props) => { componentWillReceiveProps = (nextProps: Props) => {
if (this.props.location !== nextProps.location) { if (this.props.location !== nextProps.location) {
this.props.ui.hideMobileSidebar(); this.props.ui.hideMobileSidebar();

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
import type { Location } from 'react-router-dom'; import type { Location } from 'react-router-dom';
@ -30,9 +30,7 @@ type Props = {
}; };
@observer @observer
class Collections extends Component { class Collections extends React.Component<Props> {
props: Props;
render() { render() {
const { history, location, collections, ui, documents } = this.props; const { history, location, collections, ui, documents } = this.props;
@ -73,7 +71,7 @@ type CollectionLinkProps = {
}; };
@observer @observer
class CollectionLink extends Component { class CollectionLink extends React.Component<*> {
props: CollectionLinkProps; props: CollectionLinkProps;
@observable menuOpen = false; @observable menuOpen = false;
@ -168,7 +166,7 @@ const DocumentLink = observer(
isActiveDocument) isActiveDocument)
); );
const handleMouseEnter = (event: SyntheticEvent) => { const handleMouseEnter = (event: SyntheticEvent<*>) => {
event.stopPropagation(); event.stopPropagation();
event.preventDefault(); event.preventDefault();
prefetchDocument(document.id); prefetchDocument(document.id);

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { color } from 'shared/styles/constants'; import { color } from 'shared/styles/constants';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observable, action } from 'mobx'; import { observable, action } from 'mobx';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import { NavLink } from 'react-router-dom'; import { NavLink } from 'react-router-dom';
@ -47,19 +47,18 @@ const StyledDiv = StyledNavLink.withComponent('div');
type Props = { type Props = {
to?: string, to?: string,
onClick?: SyntheticEvent => *, onClick?: (SyntheticEvent<*>) => *,
children?: React$Element<*>, children?: React.Node,
icon?: React$Element<*>, icon?: React.Node,
expand?: boolean, expand?: boolean,
expandedContent?: React$Element<*>, expandedContent?: React.Node,
hideExpandToggle?: boolean, hideExpandToggle?: boolean,
iconColor?: string, iconColor?: string,
active?: boolean, active?: boolean,
}; };
@observer @observer
class SidebarLink extends Component { class SidebarLink extends React.Component<Props> {
props: Props;
@observable expanded: boolean = false; @observable expanded: boolean = false;
componentDidMount() { componentDidMount() {
@ -71,7 +70,7 @@ class SidebarLink extends Component {
} }
@action @action
handleClick = (event: SyntheticEvent) => { handleClick = (event: SyntheticEvent<*>) => {
event.preventDefault(); event.preventDefault();
event.stopPropagation(); event.stopPropagation();
this.expanded = !this.expanded; this.expanded = !this.expanded;

View File

@ -1,12 +1,12 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
import styled from 'styled-components'; import styled from 'styled-components';
import { layout } from 'shared/styles/constants'; import { layout } from 'shared/styles/constants';
import Toast from './components/Toast'; import Toast from './components/Toast';
@observer @observer
class Toasts extends Component { class Toasts extends React.Component<*> {
handleClose = index => { handleClose = index => {
this.props.errors.remove(index); this.props.errors.remove(index);
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { darken } from 'polished'; import { darken } from 'polished';
import { color } from 'shared/styles/constants'; import { color } from 'shared/styles/constants';
@ -12,9 +12,8 @@ type Props = {
type: 'warning' | 'error' | 'info', type: 'warning' | 'error' | 'info',
}; };
class Toast extends Component { class Toast extends React.Component<Props> {
timeout: number; timeout: TimeoutID;
props: Props;
static defaultProps = { static defaultProps = {
closeAfterMs: 3000, closeAfterMs: 3000,

View File

@ -2,10 +2,8 @@
import { TooltipTrigger } from 'pui-react-tooltip'; import { TooltipTrigger } from 'pui-react-tooltip';
import { injectGlobal } from 'styled-components'; import { injectGlobal } from 'styled-components';
injectGlobal([ injectGlobal`
`
.tooltip:hover .tooltip-container:not(.tooltip-container-hidden){visibility:visible;opacity:1}.tooltip-container{visibility:hidden;-webkit-transition:opacity ease-out 0.2s;transition:opacity ease-out 0.2s;z-index:10;position:absolute;bottom:100%;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0 0 8px 0;text-align:left}.tooltip-container.tooltip-container-visible{visibility:visible}.tooltip-container.tooltip-hoverable:after{content:"";position:absolute;width:calc(100% + 16px);height:calc(100% + 16px);top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.tooltip-container .tooltip-content{white-space:nowrap;padding:4px 8px;font-size:12px;line-height:16px;font-weight:400;letter-spacing:0;text-transform:none;background-color:#243641;color:#fff;border-radius:2px;border:1px solid #243641;box-shadow:0px 2px 2px 0px rgba(36, 54, 65, .1),0px 0px 2px 0px rgba(36, 54, 65, .1)}.tooltip-container .tooltip-content:before{content:"";z-index:1;position:absolute;bottom:-4px;left:50%;-webkit-transform:translateX(-50%) rotateZ(45deg);transform:translateX(-50%) rotateZ(45deg);background-color:#243641;border-bottom:1px solid #243641;border-right:1px solid #243641;width:8px;height:8px}.tooltip-container .tooltip-content:after{content:"";box-sizing:content-box;z-index:-1;position:absolute;bottom:-4px;left:50%;-webkit-transform:translateX(-50%) rotateZ(45deg);transform:translateX(-50%) rotateZ(45deg);background-color:#243641;box-shadow:0px 2px 2px 0px rgba(36, 54, 65, .1),0px 0px 2px 0px rgba(36, 54, 65, .1);width:8px;height:8px}.tooltip{position:relative;display:inline-block}.tooltip.tooltip-light .tooltip-content{background-color:#fff;color:#243641;border:1px solid #DFE5E8}.tooltip.tooltip-light .tooltip-content:before{background-color:#fff;border-bottom:1px solid #DFE5E8;border-right:1px solid #DFE5E8}.tooltip.tooltip-light .tooltip-content:after{background-color:#fff}.tooltip.tooltip-bottom .tooltip-container{top:100%;bottom:auto;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:8px 0 0 0}.tooltip.tooltip-bottom .tooltip-container .tooltip-content:before{bottom:auto;top:-4px;border-top:1px solid #243641;border-right:none;border-bottom:none;border-left:1px solid #243641}.tooltip.tooltip-bottom .tooltip-container .tooltip-content:after{bottom:auto;top:-4px}.tooltip.tooltip-bottom.tooltip-light .tooltip-content:before{border-top:1px solid #DFE5E8;border-left:1px solid #DFE5E8}.tooltip.tooltip-right .tooltip-container{top:50%;bottom:auto;left:100%;-webkit-transform:translatey(-50%);transform:translatey(-50%);margin:0 0 0 8px}.tooltip.tooltip-right .tooltip-container .tooltip-content:before{bottom:auto;left:-4px;top:50%;-webkit-transform:translatey(-50%) rotateZ(45deg);transform:translatey(-50%) rotateZ(45deg);border-top:none;border-right:none;border-bottom:1px solid #243641;border-left:1px solid #243641}.tooltip.tooltip-right .tooltip-container .tooltip-content:after{bottom:auto;left:-4px;top:50%;-webkit-transform:translatey(-50%) rotateZ(45deg);transform:translatey(-50%) rotateZ(45deg)}.tooltip.tooltip-right.tooltip-light .tooltip-content:before{border-bottom:1px solid #DFE5E8;border-left:1px solid #DFE5E8}.tooltip.tooltip-left .tooltip-container{top:50%;bottom:auto;right:100%;left:auto;-webkit-transform:translatey(-50%);transform:translatey(-50%);margin:0 8px 0 0}.tooltip.tooltip-left .tooltip-container .tooltip-content:before{bottom:auto;right:-4px;left:auto;top:50%;-webkit-transform:translatey(-50%) rotateZ(45deg);transform:translatey(-50%) rotateZ(45deg);border-top:1px solid #243641;border-right:1px solid #243641;border-bottom:none;border-left:none}.tooltip.tooltip-left .tooltip-container .tooltip-content:after{bottom:auto;right:-4px;left:auto;top:50%;-webkit-transform:translatey(-50%) rotateZ(45deg);transform:translatey(-50%) rotateZ(45deg)}.tooltip.tooltip-left.tooltip-light .tooltip-content:before{border-top:1px solid #DFE5E8;border-right:1px solid #DFE5E8}.tooltip-sm.tooltip-container{width:120px}.tooltip-sm.tooltip-container .tooltip-content{white-space:normal}.tooltip-md.tooltip-container{width:240px}.tooltip-md.tooltip-container .tooltip-content{white-space:normal}.tooltip-lg.tooltip-container{width:360px}.tooltip-lg.tooltip-container .tooltip-content{white-space:normal}.tether-element{z-index:99}.overlay-trigger{color:#1B78B3;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out;-webkit-transition-property:background-color, color, opacity;transition-property:background-color, color, opacity}.overlay-trigger:hover,.overlay-trigger:focus{color:#1f8ace;cursor:pointer;outline:none;text-decoration:none}.overlay-trigger:active,.overlay-trigger.active{color:#176698} .tooltip:hover .tooltip-container:not(.tooltip-container-hidden){visibility:visible;opacity:1}.tooltip-container{visibility:hidden;-webkit-transition:opacity ease-out 0.2s;transition:opacity ease-out 0.2s;z-index:10;position:absolute;bottom:100%;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:0 0 8px 0;text-align:left}.tooltip-container.tooltip-container-visible{visibility:visible}.tooltip-container.tooltip-hoverable:after{content:"";position:absolute;width:calc(100% + 16px);height:calc(100% + 16px);top:50%;left:50%;-webkit-transform:translateX(-50%) translateY(-50%);transform:translateX(-50%) translateY(-50%)}.tooltip-container .tooltip-content{white-space:nowrap;padding:4px 8px;font-size:12px;line-height:16px;font-weight:400;letter-spacing:0;text-transform:none;background-color:#243641;color:#fff;border-radius:2px;border:1px solid #243641;box-shadow:0px 2px 2px 0px rgba(36, 54, 65, .1),0px 0px 2px 0px rgba(36, 54, 65, .1)}.tooltip-container .tooltip-content:before{content:"";z-index:1;position:absolute;bottom:-4px;left:50%;-webkit-transform:translateX(-50%) rotateZ(45deg);transform:translateX(-50%) rotateZ(45deg);background-color:#243641;border-bottom:1px solid #243641;border-right:1px solid #243641;width:8px;height:8px}.tooltip-container .tooltip-content:after{content:"";box-sizing:content-box;z-index:-1;position:absolute;bottom:-4px;left:50%;-webkit-transform:translateX(-50%) rotateZ(45deg);transform:translateX(-50%) rotateZ(45deg);background-color:#243641;box-shadow:0px 2px 2px 0px rgba(36, 54, 65, .1),0px 0px 2px 0px rgba(36, 54, 65, .1);width:8px;height:8px}.tooltip{position:relative;display:inline-block}.tooltip.tooltip-light .tooltip-content{background-color:#fff;color:#243641;border:1px solid #DFE5E8}.tooltip.tooltip-light .tooltip-content:before{background-color:#fff;border-bottom:1px solid #DFE5E8;border-right:1px solid #DFE5E8}.tooltip.tooltip-light .tooltip-content:after{background-color:#fff}.tooltip.tooltip-bottom .tooltip-container{top:100%;bottom:auto;left:50%;-webkit-transform:translateX(-50%);transform:translateX(-50%);margin:8px 0 0 0}.tooltip.tooltip-bottom .tooltip-container .tooltip-content:before{bottom:auto;top:-4px;border-top:1px solid #243641;border-right:none;border-bottom:none;border-left:1px solid #243641}.tooltip.tooltip-bottom .tooltip-container .tooltip-content:after{bottom:auto;top:-4px}.tooltip.tooltip-bottom.tooltip-light .tooltip-content:before{border-top:1px solid #DFE5E8;border-left:1px solid #DFE5E8}.tooltip.tooltip-right .tooltip-container{top:50%;bottom:auto;left:100%;-webkit-transform:translatey(-50%);transform:translatey(-50%);margin:0 0 0 8px}.tooltip.tooltip-right .tooltip-container .tooltip-content:before{bottom:auto;left:-4px;top:50%;-webkit-transform:translatey(-50%) rotateZ(45deg);transform:translatey(-50%) rotateZ(45deg);border-top:none;border-right:none;border-bottom:1px solid #243641;border-left:1px solid #243641}.tooltip.tooltip-right .tooltip-container .tooltip-content:after{bottom:auto;left:-4px;top:50%;-webkit-transform:translatey(-50%) rotateZ(45deg);transform:translatey(-50%) rotateZ(45deg)}.tooltip.tooltip-right.tooltip-light .tooltip-content:before{border-bottom:1px solid #DFE5E8;border-left:1px solid #DFE5E8}.tooltip.tooltip-left .tooltip-container{top:50%;bottom:auto;right:100%;left:auto;-webkit-transform:translatey(-50%);transform:translatey(-50%);margin:0 8px 0 0}.tooltip.tooltip-left .tooltip-container .tooltip-content:before{bottom:auto;right:-4px;left:auto;top:50%;-webkit-transform:translatey(-50%) rotateZ(45deg);transform:translatey(-50%) rotateZ(45deg);border-top:1px solid #243641;border-right:1px solid #243641;border-bottom:none;border-left:none}.tooltip.tooltip-left .tooltip-container .tooltip-content:after{bottom:auto;right:-4px;left:auto;top:50%;-webkit-transform:translatey(-50%) rotateZ(45deg);transform:translatey(-50%) rotateZ(45deg)}.tooltip.tooltip-left.tooltip-light .tooltip-content:before{border-top:1px solid #DFE5E8;border-right:1px solid #DFE5E8}.tooltip-sm.tooltip-container{width:120px}.tooltip-sm.tooltip-container .tooltip-content{white-space:normal}.tooltip-md.tooltip-container{width:240px}.tooltip-md.tooltip-container .tooltip-content{white-space:normal}.tooltip-lg.tooltip-container{width:360px}.tooltip-lg.tooltip-container .tooltip-content{white-space:normal}.tether-element{z-index:99}.overlay-trigger{color:#1B78B3;-webkit-transition:all 300ms ease-out;transition:all 300ms ease-out;-webkit-transition-property:background-color, color, opacity;transition-property:background-color, color, opacity}.overlay-trigger:hover,.overlay-trigger:focus{color:#1f8ace;cursor:pointer;outline:none;text-decoration:none}.overlay-trigger:active,.overlay-trigger.active{color:#176698}
`, `;
]);
export default TooltipTrigger; export default TooltipTrigger;

View File

@ -49,83 +49,86 @@ const RedirectDocument = ({ match }: { match: Object }) => (
globalStyles(); globalStyles();
render( const element = document.getElementById('root');
<React.Fragment>
<ErrorBoundary>
<Provider {...stores}>
<Router>
<ScrollToTop>
<Switch>
<Route exact path="/" component={Home} />
<Route exact path="/auth/slack" component={SlackAuth} />
<Route exact path="/auth/slack/commands" component={SlackAuth} />
<Route exact path="/auth/slack/post" component={SlackAuth} />
<Route exact path="/auth/error" component={ErrorAuth} />
<Auth> if (element) {
<Layout> render(
<Switch> <React.Fragment>
<Route exact path="/dashboard" component={Dashboard} /> <ErrorBoundary>
<Route exact path="/starred" component={Starred} /> <Provider {...stores}>
<Route exact path="/drafts" component={Drafts} /> <Router>
<Route exact path="/settings" component={Settings} /> <ScrollToTop>
<Route exact path="/settings/users" component={Users} /> <Switch>
<Route exact path="/settings/tokens" component={Tokens} /> <Route exact path="/" component={Home} />
<Route <Route exact path="/auth/slack" component={SlackAuth} />
exact <Route
path="/settings/integrations/slack" exact
component={Slack} path="/auth/slack/commands"
/> component={SlackAuth}
/>
<Route <Route exact path="/auth/slack/post" component={SlackAuth} />
exact <Route exact path="/auth/error" component={ErrorAuth} />
path="/collections/:id" <Auth>
component={Collection} <Layout>
/> <Switch>
<Route <Route exact path="/dashboard" component={Dashboard} />
exact <Route exact path="/starred" component={Starred} />
path={`/d/${matchDocumentSlug}`} <Route exact path="/drafts" component={Drafts} />
component={RedirectDocument} <Route exact path="/settings" component={Settings} />
/> <Route exact path="/settings/users" component={Users} />
<Route <Route exact path="/settings/tokens" component={Tokens} />
exact <Route
path={`/doc/${matchDocumentSlug}`} exact
component={Document} path="/settings/integrations/slack"
/> component={Slack}
<Route />
exact <Route
path={`/doc/${matchDocumentSlug}/move`} exact
component={Document} path="/collections/:id"
/> component={Collection}
/>
<Route exact path="/search" component={Search} /> <Route
<Route exact path="/search/:query" component={Search} /> exact
path={`/d/${matchDocumentSlug}`}
<Route path="/404" component={Error404} /> component={RedirectDocument}
/>
<RouteSidebarHidden <Route
exact exact
path={`/doc/${matchDocumentSlug}/edit`} path={`/doc/${matchDocumentSlug}`}
component={Document} component={Document}
/> />
<RouteSidebarHidden <Route
exact exact
path="/collections/:id/new" path={`/doc/${matchDocumentSlug}/move`}
component={DocumentNew} component={Document}
/> />
<Route component={notFoundSearch} /> <Route exact path="/search" component={Search} />
</Switch> <Route exact path="/search/:query" component={Search} />
</Layout> <Route path="/404" component={Error404} />
</Auth> <RouteSidebarHidden
</Switch> exact
</ScrollToTop> path={`/doc/${matchDocumentSlug}/edit`}
</Router> component={Document}
</Provider> />
</ErrorBoundary> <RouteSidebarHidden
{DevTools && <DevTools position={{ bottom: 0, right: 0 }} />} exact
</React.Fragment>, path="/collections/:id/new"
document.getElementById('root') component={DocumentNew}
); />
<Route component={notFoundSearch} />
</Switch>
</Layout>
</Auth>
</Switch>
</ScrollToTop>
</Router>
</Provider>
</ErrorBoundary>
{DevTools && <DevTools position={{ bottom: 0, right: 0 }} />}
</React.Fragment>,
element
);
}
window.addEventListener('load', async () => { window.addEventListener('load', async () => {
// installation does not use Google Analytics, or tracking is blocked on client // installation does not use Google Analytics, or tracking is blocked on client

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
import UiStore from 'stores/UiStore'; import UiStore from 'stores/UiStore';
@ -12,15 +12,15 @@ import {
spectrumUrl, spectrumUrl,
} from '../../shared/utils/routeHelpers'; } from '../../shared/utils/routeHelpers';
@observer type Props = {
class AccountMenu extends Component { label?: React.Node,
props: { history: Object,
label?: React$Element<any>, ui: UiStore,
history: Object, auth: AuthStore,
ui: UiStore, };
auth: AuthStore,
};
@observer
class AccountMenu extends React.Component<Props> {
handleOpenKeyboardShortcuts = () => { handleOpenKeyboardShortcuts = () => {
this.props.ui.setActiveModal('keyboard-shortcuts'); this.props.ui.setActiveModal('keyboard-shortcuts');
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
import styled from 'styled-components'; import styled from 'styled-components';
import { MoreIcon } from 'outline-icons'; import { MoreIcon } from 'outline-icons';
@ -12,9 +12,9 @@ import DocumentsStore from 'stores/DocumentsStore';
import { DropdownMenu, DropdownMenuItem } from 'components/DropdownMenu'; import { DropdownMenu, DropdownMenuItem } from 'components/DropdownMenu';
type Props = { type Props = {
label?: React$Element<*>, label?: React.Node,
onOpen?: () => void, onOpen?: () => *,
onClose?: () => void, onClose?: () => *,
history: Object, history: Object,
ui: UiStore, ui: UiStore,
documents: DocumentsStore, documents: DocumentsStore,
@ -22,24 +22,23 @@ type Props = {
}; };
@observer @observer
class CollectionMenu extends Component { class CollectionMenu extends React.Component<Props> {
props: Props;
file: HTMLInputElement; file: HTMLInputElement;
onNewDocument = (ev: SyntheticEvent) => { onNewDocument = (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
const { collection, history } = this.props; const { collection, history } = this.props;
history.push(`${collection.url}/new`); history.push(`${collection.url}/new`);
}; };
onImportDocument = (ev: SyntheticEvent) => { onImportDocument = (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
// simulate a click on the file upload input element // simulate a click on the file upload input element
this.file.click(); this.file.click();
}; };
onFilePicked = async (ev: SyntheticEvent) => { onFilePicked = async (ev: SyntheticEvent<*>) => {
const files = getDataTransferFiles(ev); const files = getDataTransferFiles(ev);
const document = await importFile({ const document = await importFile({
file: files[0], file: files[0],
@ -50,13 +49,13 @@ class CollectionMenu extends Component {
this.props.history.push(document.url); this.props.history.push(document.url);
}; };
onEdit = (ev: SyntheticEvent) => { onEdit = (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
const { collection } = this.props; const { collection } = this.props;
this.props.ui.setActiveModal('collection-edit', { collection }); this.props.ui.setActiveModal('collection-edit', { collection });
}; };
onDelete = (ev: SyntheticEvent) => { onDelete = (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
const { collection } = this.props; const { collection } = this.props;
this.props.ui.setActiveModal('collection-delete', { collection }); this.props.ui.setActiveModal('collection-delete', { collection });

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
import { MoreIcon } from 'outline-icons'; import { MoreIcon } from 'outline-icons';
@ -9,49 +9,49 @@ import UiStore from 'stores/UiStore';
import { documentMoveUrl } from 'utils/routeHelpers'; import { documentMoveUrl } from 'utils/routeHelpers';
import { DropdownMenu, DropdownMenuItem } from 'components/DropdownMenu'; import { DropdownMenu, DropdownMenuItem } from 'components/DropdownMenu';
@observer type Props = {
class DocumentMenu extends Component { ui: UiStore,
props: { label?: React.Node,
ui: UiStore, history: Object,
label?: React$Element<any>, document: Document,
history: Object, className: string,
document: Document, };
className: string,
};
handleNewChild = (ev: SyntheticEvent) => { @observer
class DocumentMenu extends React.Component<Props> {
handleNewChild = (ev: SyntheticEvent<*>) => {
const { history, document } = this.props; const { history, document } = this.props;
history.push( history.push(
`${document.collection.url}/new?parentDocument=${document.id}` `${document.collection.url}/new?parentDocument=${document.id}`
); );
}; };
handleDelete = (ev: SyntheticEvent) => { handleDelete = (ev: SyntheticEvent<*>) => {
const { document } = this.props; const { document } = this.props;
this.props.ui.setActiveModal('document-delete', { document }); this.props.ui.setActiveModal('document-delete', { document });
}; };
handleMove = (ev: SyntheticEvent) => { handleMove = (ev: SyntheticEvent<*>) => {
this.props.history.push(documentMoveUrl(this.props.document)); this.props.history.push(documentMoveUrl(this.props.document));
}; };
handlePin = (ev: SyntheticEvent) => { handlePin = (ev: SyntheticEvent<*>) => {
this.props.document.pin(); this.props.document.pin();
}; };
handleUnpin = (ev: SyntheticEvent) => { handleUnpin = (ev: SyntheticEvent<*>) => {
this.props.document.unpin(); this.props.document.unpin();
}; };
handleStar = (ev: SyntheticEvent) => { handleStar = (ev: SyntheticEvent<*>) => {
this.props.document.star(); this.props.document.star();
}; };
handleUnstar = (ev: SyntheticEvent) => { handleUnstar = (ev: SyntheticEvent<*>) => {
this.props.document.unstar(); this.props.document.unstar();
}; };
handleExport = (ev: SyntheticEvent) => { handleExport = (ev: SyntheticEvent<*>) => {
this.props.document.download(); this.props.document.download();
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
import { withRouter, Link } from 'react-router-dom'; import { withRouter, Link } from 'react-router-dom';
@ -33,8 +33,7 @@ type Props = {
}; };
@observer @observer
class CollectionScene extends Component { class CollectionScene extends React.Component<Props> {
props: Props;
@observable collection: ?Collection; @observable collection: ?Collection;
@observable isFetching: boolean = true; @observable isFetching: boolean = true;
@ -74,7 +73,7 @@ class CollectionScene extends Component {
this.isFetching = false; this.isFetching = false;
}; };
onNewDocument = (ev: SyntheticEvent) => { onNewDocument = (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
if (this.collection) { if (this.collection) {

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
@ -18,11 +18,10 @@ type Props = {
}; };
@observer @observer
class CollectionDelete extends Component { class CollectionDelete extends React.Component<Props> {
props: Props;
@observable isDeleting: boolean; @observable isDeleting: boolean;
handleSubmit = async (ev: SyntheticEvent) => { handleSubmit = async (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
this.isDeleting = true; this.isDeleting = true;
const success = await this.props.collection.delete(); const success = await this.props.collection.delete();

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
@ -17,8 +17,7 @@ type Props = {
}; };
@observer @observer
class CollectionEdit extends Component { class CollectionEdit extends React.Component<Props> {
props: Props;
@observable name: string; @observable name: string;
@observable color: string = ''; @observable color: string = '';
@observable isSaving: boolean; @observable isSaving: boolean;
@ -27,7 +26,7 @@ class CollectionEdit extends Component {
this.name = this.props.collection.name; this.name = this.props.collection.name;
} }
handleSubmit = async (ev: SyntheticEvent) => { handleSubmit = async (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
this.isSaving = true; this.isSaving = true;
@ -41,7 +40,7 @@ class CollectionEdit extends Component {
this.isSaving = false; this.isSaving = false;
}; };
handleNameChange = (ev: SyntheticInputEvent) => { handleNameChange = (ev: SyntheticInputEvent<*>) => {
this.name = ev.target.value; this.name = ev.target.value;
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
@ -18,8 +18,7 @@ type Props = {
}; };
@observer @observer
class CollectionNew extends Component { class CollectionNew extends React.Component<Props> {
props: Props;
@observable collection: Collection; @observable collection: Collection;
@observable name: string = ''; @observable name: string = '';
@observable color: string = ''; @observable color: string = '';
@ -30,7 +29,7 @@ class CollectionNew extends Component {
this.collection = new Collection(); this.collection = new Collection();
} }
handleSubmit = async (ev: SyntheticEvent) => { handleSubmit = async (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
this.isSaving = true; this.isSaving = true;
this.collection.updateData({ name: this.name, color: this.color }); this.collection.updateData({ name: this.name, color: this.color });
@ -45,7 +44,7 @@ class CollectionNew extends Component {
this.isSaving = false; this.isSaving = false;
}; };
handleNameChange = (ev: SyntheticInputEvent) => { handleNameChange = (ev: SyntheticInputEvent<*>) => {
this.name = ev.target.value; this.name = ev.target.value;
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
@ -15,8 +15,7 @@ type Props = {
}; };
@observer @observer
class Dashboard extends Component { class Dashboard extends React.Component<Props> {
props: Props;
@observable isLoaded: boolean = false; @observable isLoaded: boolean = false;
componentDidMount() { componentDidMount() {

View File

@ -48,9 +48,8 @@ type Props = {
}; };
@observer @observer
class DocumentScene extends React.Component { class DocumentScene extends React.Component<Props> {
props: Props; savedTimeout: TimeoutID;
savedTimeout: number;
@observable editorComponent; @observable editorComponent;
@observable editCache: ?string; @observable editCache: ?string;
@ -136,7 +135,7 @@ class DocumentScene extends React.Component {
}; };
get isEditing() { get isEditing() {
return ( return !!(
this.props.match.path === matchDocumentEdit || this.props.newDocument this.props.match.path === matchDocumentEdit || this.props.newDocument
); );
} }
@ -163,7 +162,7 @@ class DocumentScene extends React.Component {
this.editCache = null; this.editCache = null;
this.isSaving = true; this.isSaving = true;
this.isPublishing = publish; this.isPublishing = !!publish;
document = await document.save(publish, redirect); document = await document.save(publish, redirect);
this.isSaving = false; this.isSaving = false;
this.isPublishing = false; this.isPublishing = false;

View File

@ -26,9 +26,7 @@ type Props = {
history: Object, history: Object,
}; };
class DocumentActions extends React.Component { class DocumentActions extends React.Component<Props> {
props: Props;
handleNewDocument = () => { handleNewDocument = () => {
this.props.history.push(documentNewUrl(this.props.document)); this.props.history.push(documentNewUrl(this.props.document));
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import { observable, computed } from 'mobx'; import { observable, computed } from 'mobx';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
@ -29,10 +29,8 @@ type Props = {
}; };
@observer @observer
class DocumentMove extends Component { class DocumentMove extends React.Component<Props> {
props: Props; firstDocument: *;
firstDocument: HTMLElement;
@observable searchTerm: ?string; @observable searchTerm: ?string;
@observable isSaving: boolean; @observable isSaving: boolean;
@ -115,7 +113,7 @@ class DocumentMove extends Component {
this.props.history.push(this.props.document.url); this.props.history.push(this.props.document.url);
}; };
handleFilter = (e: SyntheticInputEvent) => { handleFilter = (e: SyntheticInputEvent<*>) => {
this.searchTerm = e.target.value; this.searchTerm = e.target.value;
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import invariant from 'invariant'; import invariant from 'invariant';
import styled from 'styled-components'; import styled from 'styled-components';
@ -49,10 +49,8 @@ type Props = {
}; };
@observer @observer
class PathToDocument extends React.Component { class PathToDocument extends React.Component<Props> {
props: Props; handleClick = async (ev: SyntheticEvent<*>) => {
handleClick = async (ev: SyntheticEvent) => {
ev.preventDefault(); ev.preventDefault();
const { document, result, onSuccess } = this.props; const { document, result, onSuccess } = this.props;

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { pulsate } from 'shared/styles/animations'; import { pulsate } from 'shared/styles/animations';
import { color } from 'shared/styles/constants'; import { color } from 'shared/styles/constants';

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { withRouter } from 'react-router-dom'; import { withRouter } from 'react-router-dom';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
@ -17,11 +17,10 @@ type Props = {
}; };
@observer @observer
class DocumentDelete extends Component { class DocumentDelete extends React.Component<Props> {
props: Props;
@observable isDeleting: boolean; @observable isDeleting: boolean;
handleSubmit = async (ev: SyntheticEvent) => { handleSubmit = async (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
this.isDeleting = true; this.isDeleting = true;
const { collection } = this.props.document; const { collection } = this.props.document;

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
import CenteredContent from 'components/CenteredContent'; import CenteredContent from 'components/CenteredContent';
import { ListPlaceholder } from 'components/LoadingPlaceholder'; import { ListPlaceholder } from 'components/LoadingPlaceholder';
@ -8,12 +8,12 @@ import PageTitle from 'components/PageTitle';
import DocumentList from 'components/DocumentList'; import DocumentList from 'components/DocumentList';
import DocumentsStore from 'stores/DocumentsStore'; import DocumentsStore from 'stores/DocumentsStore';
@observer type Props = {
class Drafts extends Component { documents: DocumentsStore,
props: { };
documents: DocumentsStore,
};
@observer
class Drafts extends React.Component<Props> {
componentDidMount() { componentDidMount() {
this.props.documents.fetchDrafts(); this.props.documents.fetchDrafts();
} }

View File

@ -1,11 +1,11 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import CenteredContent from 'components/CenteredContent'; import CenteredContent from 'components/CenteredContent';
import PageTitle from 'components/PageTitle'; import PageTitle from 'components/PageTitle';
class Error404 extends React.Component { class Error404 extends React.Component<*> {
render() { render() {
return ( return (
<CenteredContent> <CenteredContent>

View File

@ -1,11 +1,11 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import CenteredContent from 'components/CenteredContent'; import CenteredContent from 'components/CenteredContent';
import PageTitle from 'components/PageTitle'; import PageTitle from 'components/PageTitle';
class ErrorAuth extends React.Component { class ErrorAuth extends React.Component<*> {
render() { render() {
return ( return (
<CenteredContent> <CenteredContent>

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
import CenteredContent from 'components/CenteredContent'; import CenteredContent from 'components/CenteredContent';

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
import { Redirect } from 'react-router-dom'; import { Redirect } from 'react-router-dom';
import AuthStore from 'stores/AuthStore'; import AuthStore from 'stores/AuthStore';

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import Key from 'components/Key'; import Key from 'components/Key';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import ReactDOM from 'react-dom'; import ReactDOM from 'react-dom';
import keydown from 'react-keydown'; import keydown from 'react-keydown';
import Waypoint from 'react-waypoint'; import Waypoint from 'react-waypoint';
@ -59,9 +59,8 @@ const StyledArrowKeyNavigation = styled(ArrowKeyNavigation)`
`; `;
@observer @observer
class Search extends Component { class Search extends React.Component<Props> {
firstDocument: HTMLElement; firstDocument: HTMLElement;
props: Props;
@observable resultIds: string[] = []; // Document IDs @observable resultIds: string[] = []; // Document IDs
@observable query: string = ''; @observable query: string = '';

View File

@ -1,22 +1,23 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import styled from 'styled-components'; import styled from 'styled-components';
import { SearchIcon } from 'outline-icons'; import { SearchIcon } from 'outline-icons';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';
import { color } from 'shared/styles/constants'; import { color } from 'shared/styles/constants';
class SearchField extends Component { type Props = {
input: HTMLInputElement; onChange: string => *,
props: { };
onChange: Function,
};
handleChange = (ev: SyntheticEvent) => { class SearchField extends React.Component<Props> {
input: HTMLInputElement;
handleChange = (ev: SyntheticEvent<*>) => {
this.props.onChange(ev.currentTarget.value ? ev.currentTarget.value : ''); this.props.onChange(ev.currentTarget.value ? ev.currentTarget.value : '');
}; };
focusInput = (ev: SyntheticEvent) => { focusInput = (ev: SyntheticEvent<*>) => {
this.input.focus(); this.input.focus();
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observable, runInAction } from 'mobx'; import { observable, runInAction } from 'mobx';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
import invariant from 'invariant'; import invariant from 'invariant';
@ -16,13 +16,14 @@ import CenteredContent from 'components/CenteredContent';
import PageTitle from 'components/PageTitle'; import PageTitle from 'components/PageTitle';
import Flex from 'shared/components/Flex'; import Flex from 'shared/components/Flex';
type Props = {
auth: AuthStore,
errors: ErrorsStore,
};
@observer @observer
class Settings extends Component { class Settings extends React.Component<Props> {
timeout: number; timeout: TimeoutID;
props: {
auth: AuthStore,
errors: ErrorsStore,
};
@observable name: string; @observable name: string;
@observable avatarUrl: ?string; @observable avatarUrl: ?string;
@ -39,7 +40,7 @@ class Settings extends Component {
clearTimeout(this.timeout); clearTimeout(this.timeout);
} }
handleSubmit = async (ev: SyntheticEvent) => { handleSubmit = async (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
this.isSaving = true; this.isSaving = true;
@ -62,7 +63,7 @@ class Settings extends Component {
} }
}; };
handleNameChange = (ev: SyntheticInputEvent) => { handleNameChange = (ev: SyntheticInputEvent<*>) => {
this.name = ev.target.value; this.name = ev.target.value;
}; };

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
import _ from 'lodash'; import _ from 'lodash';
import styled from 'styled-components'; import styled from 'styled-components';
@ -18,9 +18,7 @@ type Props = {
}; };
@observer @observer
class Slack extends Component { class Slack extends React.Component<Props> {
props: Props;
componentDidMount() { componentDidMount() {
this.props.integrations.fetchPage(); this.props.integrations.fetchPage();
} }

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
@ -15,22 +15,23 @@ import PageTitle from 'components/PageTitle';
import HelpText from 'components/HelpText'; import HelpText from 'components/HelpText';
import Subheading from 'components/Subheading'; import Subheading from 'components/Subheading';
type Props = {
apiKeys: ApiKeysStore,
};
@observer @observer
class Tokens extends Component { class Tokens extends React.Component<Props> {
@observable name: string = ''; @observable name: string = '';
props: {
apiKeys: ApiKeysStore,
};
componentDidMount() { componentDidMount() {
this.props.apiKeys.fetchPage({ limit: 100 }); this.props.apiKeys.fetchPage({ limit: 100 });
} }
handleUpdate = (ev: SyntheticInputEvent) => { handleUpdate = (ev: SyntheticInputEvent<*>) => {
this.name = ev.target.value; this.name = ev.target.value;
}; };
handleSubmit = async (ev: SyntheticEvent) => { handleSubmit = async (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
await this.props.apiKeys.createApiKey(this.name); await this.props.apiKeys.createApiKey(this.name);
this.name = ''; this.name = '';

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import invariant from 'invariant'; import invariant from 'invariant';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
import styled from 'styled-components'; import styled from 'styled-components';
@ -15,14 +15,14 @@ import LoadingPlaceholder from 'components/LoadingPlaceholder';
import PageTitle from 'components/PageTitle'; import PageTitle from 'components/PageTitle';
import UserMenu from './components/UserMenu'; import UserMenu from './components/UserMenu';
@observer type Props = {
class Users extends Component { auth: AuthStore,
props: { errors: ErrorsStore,
auth: AuthStore, users: UsersStore,
errors: ErrorsStore, };
users: UsersStore,
};
@observer
class Users extends React.Component<Props> {
componentDidMount() { componentDidMount() {
this.props.users.fetchPage({ limit: 100 }); this.props.users.fetchPage({ limit: 100 });
} }

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import Button from 'components/Button'; import Button from 'components/Button';
@ -12,8 +12,7 @@ type Props = {
}; };
@observer @observer
class ApiToken extends React.Component { class ApiToken extends React.Component<Props> {
props: Props;
@observable disabled: boolean; @observable disabled: boolean;
onClick = () => { onClick = () => {

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observable } from 'mobx'; import { observable } from 'mobx';
import { observer } from 'mobx-react'; import { observer } from 'mobx-react';
import styled from 'styled-components'; import styled from 'styled-components';
@ -13,17 +13,16 @@ import AvatarEditor from 'react-avatar-editor';
import { uploadFile, dataUrlToBlob } from 'utils/uploadFile'; import { uploadFile, dataUrlToBlob } from 'utils/uploadFile';
type Props = { type Props = {
children?: React$Element<any>, children?: React.Node,
onSuccess: string => void, onSuccess: string => *,
onError: string => void, onError: string => *,
}; };
@observer @observer
class DropToImport extends Component { class DropToImport extends React.Component<Props> {
@observable isUploading: boolean = false; @observable isUploading: boolean = false;
@observable isCropping: boolean = false; @observable isCropping: boolean = false;
@observable zoom: number = 1; @observable zoom: number = 1;
props: Props;
file: File; file: File;
avatarEditorRef: AvatarEditor; avatarEditorRef: AvatarEditor;
@ -46,7 +45,7 @@ class DropToImport extends Component {
} }
}; };
handleZoom = (event: SyntheticDragEvent) => { handleZoom = (event: SyntheticDragEvent<*>) => {
let target = event.target; let target = event.target;
if (target instanceof HTMLInputElement) { if (target instanceof HTMLInputElement) {
this.zoom = parseFloat(target.value); this.zoom = parseFloat(target.value);

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { inject, observer } from 'mobx-react'; import { inject, observer } from 'mobx-react';
import { MoreIcon } from 'outline-icons'; import { MoreIcon } from 'outline-icons';
@ -13,10 +13,8 @@ type Props = {
}; };
@observer @observer
class UserMenu extends Component { class UserMenu extends React.Component<Props> {
props: Props; handlePromote = (ev: SyntheticEvent<*>) => {
handlePromote = (ev: SyntheticEvent) => {
ev.preventDefault(); ev.preventDefault();
const { user, users } = this.props; const { user, users } = this.props;
if ( if (
@ -31,7 +29,7 @@ class UserMenu extends Component {
users.promote(user); users.promote(user);
}; };
handleDemote = (ev: SyntheticEvent) => { handleDemote = (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
const { user, users } = this.props; const { user, users } = this.props;
if (!window.confirm(`Are you want to make ${user.name} a member?`)) { if (!window.confirm(`Are you want to make ${user.name} a member?`)) {
@ -40,7 +38,7 @@ class UserMenu extends Component {
users.demote(user); users.demote(user);
}; };
handleSuspend = (ev: SyntheticEvent) => { handleSuspend = (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
const { user, users } = this.props; const { user, users } = this.props;
if ( if (
@ -53,7 +51,7 @@ class UserMenu extends Component {
users.suspend(user); users.suspend(user);
}; };
handleActivate = (ev: SyntheticEvent) => { handleActivate = (ev: SyntheticEvent<*>) => {
ev.preventDefault(); ev.preventDefault();
const { user, users } = this.props; const { user, users } = this.props;
users.activate(user); users.activate(user);

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React from 'react'; import * as React from 'react';
import { Redirect } from 'react-router-dom'; import { Redirect } from 'react-router-dom';
import type { Location } from 'react-router-dom'; import type { Location } from 'react-router-dom';
import queryString from 'query-string'; import queryString from 'query-string';
@ -16,8 +16,7 @@ type Props = {
}; };
@observer @observer
class SlackAuth extends React.Component { class SlackAuth extends React.Component<Props> {
props: Props;
@observable redirectTo: string; @observable redirectTo: string;
componentDidMount() { componentDidMount() {

View File

@ -1,5 +1,5 @@
// @flow // @flow
import React, { Component } from 'react'; import * as React from 'react';
import { observer, inject } from 'mobx-react'; import { observer, inject } from 'mobx-react';
import CenteredContent from 'components/CenteredContent'; import CenteredContent from 'components/CenteredContent';
import { ListPlaceholder } from 'components/LoadingPlaceholder'; import { ListPlaceholder } from 'components/LoadingPlaceholder';
@ -8,12 +8,12 @@ import PageTitle from 'components/PageTitle';
import DocumentList from 'components/DocumentList'; import DocumentList from 'components/DocumentList';
import DocumentsStore from 'stores/DocumentsStore'; import DocumentsStore from 'stores/DocumentsStore';
@observer type Props = {
class Starred extends Component { documents: DocumentsStore,
props: { };
documents: DocumentsStore,
};
@observer
class Starred extends React.Component<Props> {
componentDidMount() { componentDidMount() {
this.props.documents.fetchStarred(); this.props.documents.fetchStarred();
} }

View File

@ -81,7 +81,7 @@ class AuthStore {
authWithSlack = async (code: string, state: string) => { authWithSlack = async (code: string, state: string) => {
// in the case of direct install from the Slack app store the state is // in the case of direct install from the Slack app store the state is
// created on the server and set as a cookie // created on the server and set as a cookie
const serverState = Cookie.get('state', { path: '/' }); const serverState = Cookie.get('state');
if (state !== this.oauthState && state !== serverState) { if (state !== this.oauthState && state !== serverState) {
return { return {
success: false, success: false,

View File

@ -1,6 +1,8 @@
// @flow // @flow
export default function getDataTransferFiles(event: SyntheticEvent) { export default function getDataTransferFiles(event: SyntheticEvent<*>): File[] {
let dataTransferItemsList = []; let dataTransferItemsList = [];
// $FlowFixMe
if (event.dataTransfer) { if (event.dataTransfer) {
const dt = event.dataTransfer; const dt = event.dataTransfer;
if (dt.files && dt.files.length) { if (dt.files && dt.files.length) {
@ -10,6 +12,8 @@ export default function getDataTransferFiles(event: SyntheticEvent) {
// but Chrome implements some drag store, which is accesible via dataTransfer.items // but Chrome implements some drag store, which is accesible via dataTransfer.items
dataTransferItemsList = dt.items; dataTransferItemsList = dt.items;
} }
// $FlowFixMe
} else if (event.target && event.target.files) { } else if (event.target && event.target.files) {
dataTransferItemsList = event.target.files; dataTransferItemsList = event.target.files;
} }

View File

@ -27,6 +27,7 @@ export const uploadFile = async (
formData.append(key, data.form[key]); formData.append(key, data.form[key]);
} }
// $FlowFixMe
if (file.blob) { if (file.blob) {
// $FlowFixMe // $FlowFixMe
formData.append('file', file.file); formData.append('file', file.file);

View File

@ -0,0 +1,67 @@
// flow-typed signature: 1716f73356cbdf5450e8d7ab82dd2e1a
// flow-typed version: <<STUB>>/@tommoor/slate-drop-or-paste-images_v^0.8.1/flow_v0.71.0
/**
* This is an autogenerated libdef stub for:
*
* '@tommoor/slate-drop-or-paste-images'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module '@tommoor/slate-drop-or-paste-images' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module '@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images' {
declare module.exports: any;
}
declare module '@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images.min' {
declare module.exports: any;
}
declare module '@tommoor/slate-drop-or-paste-images/lib/data-uri-to-blob' {
declare module.exports: any;
}
declare module '@tommoor/slate-drop-or-paste-images/lib/image-to-data-uri' {
declare module.exports: any;
}
declare module '@tommoor/slate-drop-or-paste-images/lib/index' {
declare module.exports: any;
}
declare module '@tommoor/slate-drop-or-paste-images/lib/load-image-file' {
declare module.exports: any;
}
// Filename aliases
declare module '@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images.js' {
declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images'>;
}
declare module '@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images.min.js' {
declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/dist/slate-drop-or-paste-images.min'>;
}
declare module '@tommoor/slate-drop-or-paste-images/lib/data-uri-to-blob.js' {
declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/lib/data-uri-to-blob'>;
}
declare module '@tommoor/slate-drop-or-paste-images/lib/image-to-data-uri.js' {
declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/lib/image-to-data-uri'>;
}
declare module '@tommoor/slate-drop-or-paste-images/lib/index.js' {
declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/lib/index'>;
}
declare module '@tommoor/slate-drop-or-paste-images/lib/load-image-file.js' {
declare module.exports: $Exports<'@tommoor/slate-drop-or-paste-images/lib/load-image-file'>;
}

431
flow-typed/npm/autotrack_vx.x.x.js vendored Normal file
View File

@ -0,0 +1,431 @@
// flow-typed signature: 0cb55f2f1730c36c81fb4d6e5baedccf
// flow-typed version: <<STUB>>/autotrack_v^2.4.1/flow_v0.71.0
/**
* This is an autogenerated libdef stub for:
*
* 'autotrack'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'autotrack' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'autotrack/autotrack' {
declare module.exports: any;
}
declare module 'autotrack/bin/build' {
declare module.exports: any;
}
declare module 'autotrack/bin/errors' {
declare module.exports: any;
}
declare module 'autotrack/gulpfile' {
declare module.exports: any;
}
declare module 'autotrack/lib/constants' {
declare module.exports: any;
}
declare module 'autotrack/lib/event-emitter' {
declare module.exports: any;
}
declare module 'autotrack/lib/externs/analytics' {
declare module.exports: any;
}
declare module 'autotrack/lib/externs/clean-url-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/externs/event-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/externs/impression-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/externs/max-scroll-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/externs/media-query-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/externs/outbound-form-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/externs/outbound-link-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/externs/page-visibility-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/externs/session' {
declare module.exports: any;
}
declare module 'autotrack/lib/externs/social-widget-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/externs/url-change-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/index' {
declare module.exports: any;
}
declare module 'autotrack/lib/method-chain' {
declare module.exports: any;
}
declare module 'autotrack/lib/plugins/clean-url-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/plugins/event-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/plugins/impression-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/plugins/max-scroll-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/plugins/media-query-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/plugins/outbound-form-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/plugins/outbound-link-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/plugins/page-visibility-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/plugins/social-widget-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/plugins/url-change-tracker' {
declare module.exports: any;
}
declare module 'autotrack/lib/provide' {
declare module.exports: any;
}
declare module 'autotrack/lib/session' {
declare module.exports: any;
}
declare module 'autotrack/lib/store' {
declare module.exports: any;
}
declare module 'autotrack/lib/usage' {
declare module.exports: any;
}
declare module 'autotrack/lib/utilities' {
declare module.exports: any;
}
declare module 'autotrack/test/analytics_debug' {
declare module.exports: any;
}
declare module 'autotrack/test/analytics' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/clean-url-tracker-test' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/event-tracker-test' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/ga' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/impression-tracker-test' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/index-test' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/max-scroll-tracker-test' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/media-query-tracker-test' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/outbound-form-tracker-test' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/outbound-link-tracker-test' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/page-visibility-tracker-test' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/server' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/social-widget-tracker-test' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/url-change-tracker-test' {
declare module.exports: any;
}
declare module 'autotrack/test/e2e/wdio.conf' {
declare module.exports: any;
}
declare module 'autotrack/test/unit/event-emitter-test' {
declare module.exports: any;
}
declare module 'autotrack/test/unit/method-chain-test' {
declare module.exports: any;
}
declare module 'autotrack/test/unit/plugins/clean-url-tracker-test' {
declare module.exports: any;
}
declare module 'autotrack/test/unit/plugins/page-visibility-tracker-test' {
declare module.exports: any;
}
declare module 'autotrack/test/unit/session-test' {
declare module.exports: any;
}
declare module 'autotrack/test/unit/store-test' {
declare module.exports: any;
}
declare module 'autotrack/test/unit/utilities-test' {
declare module.exports: any;
}
// Filename aliases
declare module 'autotrack/autotrack.js' {
declare module.exports: $Exports<'autotrack/autotrack'>;
}
declare module 'autotrack/bin/build.js' {
declare module.exports: $Exports<'autotrack/bin/build'>;
}
declare module 'autotrack/bin/errors.js' {
declare module.exports: $Exports<'autotrack/bin/errors'>;
}
declare module 'autotrack/gulpfile.js' {
declare module.exports: $Exports<'autotrack/gulpfile'>;
}
declare module 'autotrack/lib/constants.js' {
declare module.exports: $Exports<'autotrack/lib/constants'>;
}
declare module 'autotrack/lib/event-emitter.js' {
declare module.exports: $Exports<'autotrack/lib/event-emitter'>;
}
declare module 'autotrack/lib/externs/analytics.js' {
declare module.exports: $Exports<'autotrack/lib/externs/analytics'>;
}
declare module 'autotrack/lib/externs/clean-url-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/externs/clean-url-tracker'>;
}
declare module 'autotrack/lib/externs/event-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/externs/event-tracker'>;
}
declare module 'autotrack/lib/externs/impression-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/externs/impression-tracker'>;
}
declare module 'autotrack/lib/externs/max-scroll-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/externs/max-scroll-tracker'>;
}
declare module 'autotrack/lib/externs/media-query-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/externs/media-query-tracker'>;
}
declare module 'autotrack/lib/externs/outbound-form-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/externs/outbound-form-tracker'>;
}
declare module 'autotrack/lib/externs/outbound-link-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/externs/outbound-link-tracker'>;
}
declare module 'autotrack/lib/externs/page-visibility-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/externs/page-visibility-tracker'>;
}
declare module 'autotrack/lib/externs/session.js' {
declare module.exports: $Exports<'autotrack/lib/externs/session'>;
}
declare module 'autotrack/lib/externs/social-widget-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/externs/social-widget-tracker'>;
}
declare module 'autotrack/lib/externs/url-change-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/externs/url-change-tracker'>;
}
declare module 'autotrack/lib/index.js' {
declare module.exports: $Exports<'autotrack/lib/index'>;
}
declare module 'autotrack/lib/method-chain.js' {
declare module.exports: $Exports<'autotrack/lib/method-chain'>;
}
declare module 'autotrack/lib/plugins/clean-url-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/plugins/clean-url-tracker'>;
}
declare module 'autotrack/lib/plugins/event-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/plugins/event-tracker'>;
}
declare module 'autotrack/lib/plugins/impression-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/plugins/impression-tracker'>;
}
declare module 'autotrack/lib/plugins/max-scroll-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/plugins/max-scroll-tracker'>;
}
declare module 'autotrack/lib/plugins/media-query-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/plugins/media-query-tracker'>;
}
declare module 'autotrack/lib/plugins/outbound-form-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/plugins/outbound-form-tracker'>;
}
declare module 'autotrack/lib/plugins/outbound-link-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/plugins/outbound-link-tracker'>;
}
declare module 'autotrack/lib/plugins/page-visibility-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/plugins/page-visibility-tracker'>;
}
declare module 'autotrack/lib/plugins/social-widget-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/plugins/social-widget-tracker'>;
}
declare module 'autotrack/lib/plugins/url-change-tracker.js' {
declare module.exports: $Exports<'autotrack/lib/plugins/url-change-tracker'>;
}
declare module 'autotrack/lib/provide.js' {
declare module.exports: $Exports<'autotrack/lib/provide'>;
}
declare module 'autotrack/lib/session.js' {
declare module.exports: $Exports<'autotrack/lib/session'>;
}
declare module 'autotrack/lib/store.js' {
declare module.exports: $Exports<'autotrack/lib/store'>;
}
declare module 'autotrack/lib/usage.js' {
declare module.exports: $Exports<'autotrack/lib/usage'>;
}
declare module 'autotrack/lib/utilities.js' {
declare module.exports: $Exports<'autotrack/lib/utilities'>;
}
declare module 'autotrack/test/analytics_debug.js' {
declare module.exports: $Exports<'autotrack/test/analytics_debug'>;
}
declare module 'autotrack/test/analytics.js' {
declare module.exports: $Exports<'autotrack/test/analytics'>;
}
declare module 'autotrack/test/e2e/clean-url-tracker-test.js' {
declare module.exports: $Exports<'autotrack/test/e2e/clean-url-tracker-test'>;
}
declare module 'autotrack/test/e2e/event-tracker-test.js' {
declare module.exports: $Exports<'autotrack/test/e2e/event-tracker-test'>;
}
declare module 'autotrack/test/e2e/ga.js' {
declare module.exports: $Exports<'autotrack/test/e2e/ga'>;
}
declare module 'autotrack/test/e2e/impression-tracker-test.js' {
declare module.exports: $Exports<'autotrack/test/e2e/impression-tracker-test'>;
}
declare module 'autotrack/test/e2e/index-test.js' {
declare module.exports: $Exports<'autotrack/test/e2e/index-test'>;
}
declare module 'autotrack/test/e2e/max-scroll-tracker-test.js' {
declare module.exports: $Exports<'autotrack/test/e2e/max-scroll-tracker-test'>;
}
declare module 'autotrack/test/e2e/media-query-tracker-test.js' {
declare module.exports: $Exports<'autotrack/test/e2e/media-query-tracker-test'>;
}
declare module 'autotrack/test/e2e/outbound-form-tracker-test.js' {
declare module.exports: $Exports<'autotrack/test/e2e/outbound-form-tracker-test'>;
}
declare module 'autotrack/test/e2e/outbound-link-tracker-test.js' {
declare module.exports: $Exports<'autotrack/test/e2e/outbound-link-tracker-test'>;
}
declare module 'autotrack/test/e2e/page-visibility-tracker-test.js' {
declare module.exports: $Exports<'autotrack/test/e2e/page-visibility-tracker-test'>;
}
declare module 'autotrack/test/e2e/server.js' {
declare module.exports: $Exports<'autotrack/test/e2e/server'>;
}
declare module 'autotrack/test/e2e/social-widget-tracker-test.js' {
declare module.exports: $Exports<'autotrack/test/e2e/social-widget-tracker-test'>;
}
declare module 'autotrack/test/e2e/url-change-tracker-test.js' {
declare module.exports: $Exports<'autotrack/test/e2e/url-change-tracker-test'>;
}
declare module 'autotrack/test/e2e/wdio.conf.js' {
declare module.exports: $Exports<'autotrack/test/e2e/wdio.conf'>;
}
declare module 'autotrack/test/unit/event-emitter-test.js' {
declare module.exports: $Exports<'autotrack/test/unit/event-emitter-test'>;
}
declare module 'autotrack/test/unit/method-chain-test.js' {
declare module.exports: $Exports<'autotrack/test/unit/method-chain-test'>;
}
declare module 'autotrack/test/unit/plugins/clean-url-tracker-test.js' {
declare module.exports: $Exports<'autotrack/test/unit/plugins/clean-url-tracker-test'>;
}
declare module 'autotrack/test/unit/plugins/page-visibility-tracker-test.js' {
declare module.exports: $Exports<'autotrack/test/unit/plugins/page-visibility-tracker-test'>;
}
declare module 'autotrack/test/unit/session-test.js' {
declare module.exports: $Exports<'autotrack/test/unit/session-test'>;
}
declare module 'autotrack/test/unit/store-test.js' {
declare module.exports: $Exports<'autotrack/test/unit/store-test'>;
}
declare module 'autotrack/test/unit/utilities-test.js' {
declare module.exports: $Exports<'autotrack/test/unit/utilities-test'>;
}

1564
flow-typed/npm/aws-sdk_vx.x.x.js vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
// flow-typed signature: b44c78d7279f78b485d76b15c08cd683 // flow-typed signature: e24af6bf202d8e5fab4e87cde4d2bfa2
// flow-typed version: <<STUB>>/babel-core_v^6.24.1/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-core_v^6.24.1/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

View File

@ -1,5 +1,5 @@
// flow-typed signature: 1bf74b25fb82cd002e8b966a31086e1a // flow-typed signature: 533f9ec506a216e4d7a0f986dfe83e8b
// flow-typed version: <<STUB>>/babel-eslint_v^7.2.3/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-eslint_v^8.1.2/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:
@ -22,59 +22,102 @@ declare module 'babel-eslint' {
* require those files directly. Feel free to delete any files that aren't * require those files directly. Feel free to delete any files that aren't
* needed. * needed.
*/ */
declare module 'babel-eslint/babylon-to-espree/attachComments' { declare module 'babel-eslint/lib/analyze-scope' {
declare module.exports: any; declare module.exports: any;
} }
declare module 'babel-eslint/babylon-to-espree/convertComments' { declare module 'babel-eslint/lib/babylon-to-espree/attachComments' {
declare module.exports: any; declare module.exports: any;
} }
declare module 'babel-eslint/babylon-to-espree/convertTemplateType' { declare module 'babel-eslint/lib/babylon-to-espree/convertComments' {
declare module.exports: any; declare module.exports: any;
} }
declare module 'babel-eslint/babylon-to-espree/index' { declare module 'babel-eslint/lib/babylon-to-espree/convertTemplateType' {
declare module.exports: any; declare module.exports: any;
} }
declare module 'babel-eslint/babylon-to-espree/toAST' { declare module 'babel-eslint/lib/babylon-to-espree/index' {
declare module.exports: any; declare module.exports: any;
} }
declare module 'babel-eslint/babylon-to-espree/toToken' { declare module 'babel-eslint/lib/babylon-to-espree/toAST' {
declare module.exports: any; declare module.exports: any;
} }
declare module 'babel-eslint/babylon-to-espree/toTokens' { declare module 'babel-eslint/lib/babylon-to-espree/toToken' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/babylon-to-espree/toTokens' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/index' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/parse-with-patch' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/parse-with-scope' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/parse' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/patch-eslint-scope' {
declare module.exports: any;
}
declare module 'babel-eslint/lib/visitor-keys' {
declare module.exports: any; declare module.exports: any;
} }
// Filename aliases // Filename aliases
declare module 'babel-eslint/babylon-to-espree/attachComments.js' { declare module 'babel-eslint/lib/analyze-scope.js' {
declare module.exports: $Exports<'babel-eslint/babylon-to-espree/attachComments'>; declare module.exports: $Exports<'babel-eslint/lib/analyze-scope'>;
} }
declare module 'babel-eslint/babylon-to-espree/convertComments.js' { declare module 'babel-eslint/lib/babylon-to-espree/attachComments.js' {
declare module.exports: $Exports<'babel-eslint/babylon-to-espree/convertComments'>; declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/attachComments'>;
} }
declare module 'babel-eslint/babylon-to-espree/convertTemplateType.js' { declare module 'babel-eslint/lib/babylon-to-espree/convertComments.js' {
declare module.exports: $Exports<'babel-eslint/babylon-to-espree/convertTemplateType'>; declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/convertComments'>;
} }
declare module 'babel-eslint/babylon-to-espree/index.js' { declare module 'babel-eslint/lib/babylon-to-espree/convertTemplateType.js' {
declare module.exports: $Exports<'babel-eslint/babylon-to-espree/index'>; declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/convertTemplateType'>;
} }
declare module 'babel-eslint/babylon-to-espree/toAST.js' { declare module 'babel-eslint/lib/babylon-to-espree/index.js' {
declare module.exports: $Exports<'babel-eslint/babylon-to-espree/toAST'>; declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/index'>;
} }
declare module 'babel-eslint/babylon-to-espree/toToken.js' { declare module 'babel-eslint/lib/babylon-to-espree/toAST.js' {
declare module.exports: $Exports<'babel-eslint/babylon-to-espree/toToken'>; declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/toAST'>;
} }
declare module 'babel-eslint/babylon-to-espree/toTokens.js' { declare module 'babel-eslint/lib/babylon-to-espree/toToken.js' {
declare module.exports: $Exports<'babel-eslint/babylon-to-espree/toTokens'>; declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/toToken'>;
} }
declare module 'babel-eslint/index' { declare module 'babel-eslint/lib/babylon-to-espree/toTokens.js' {
declare module.exports: $Exports<'babel-eslint'>; declare module.exports: $Exports<'babel-eslint/lib/babylon-to-espree/toTokens'>;
} }
declare module 'babel-eslint/index.js' { declare module 'babel-eslint/lib/index.js' {
declare module.exports: $Exports<'babel-eslint'>; declare module.exports: $Exports<'babel-eslint/lib/index'>;
}
declare module 'babel-eslint/lib/parse-with-patch.js' {
declare module.exports: $Exports<'babel-eslint/lib/parse-with-patch'>;
}
declare module 'babel-eslint/lib/parse-with-scope.js' {
declare module.exports: $Exports<'babel-eslint/lib/parse-with-scope'>;
}
declare module 'babel-eslint/lib/parse.js' {
declare module.exports: $Exports<'babel-eslint/lib/parse'>;
}
declare module 'babel-eslint/lib/patch-eslint-scope.js' {
declare module.exports: $Exports<'babel-eslint/lib/patch-eslint-scope'>;
}
declare module 'babel-eslint/lib/visitor-keys.js' {
declare module.exports: $Exports<'babel-eslint/lib/visitor-keys'>;
} }

View File

@ -1,5 +1,5 @@
// flow-typed signature: 3c809891622d6f698104648531a2877f // flow-typed signature: 16a74ec1b3f30574b1d17af2e1aae17e
// flow-typed version: <<STUB>>/babel-jest_v^20.0.0/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-jest_v22/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

View File

@ -1,5 +1,5 @@
// flow-typed signature: 62273b6ed2d83e96178263d3cc4988ea // flow-typed signature: a62195ffbfff5c6790934103be75a8ff
// flow-typed version: <<STUB>>/babel-loader_v6.2.5/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-loader_v^7.1.2/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:
@ -26,11 +26,7 @@ declare module 'babel-loader/lib/fs-cache' {
declare module.exports: any; declare module.exports: any;
} }
declare module 'babel-loader/lib/helpers/exists' { declare module 'babel-loader/lib/index' {
declare module.exports: any;
}
declare module 'babel-loader/lib/helpers/read' {
declare module.exports: any; declare module.exports: any;
} }
@ -38,22 +34,34 @@ declare module 'babel-loader/lib/resolve-rc' {
declare module.exports: any; declare module.exports: any;
} }
declare module 'babel-loader/lib/utils/exists' {
declare module.exports: any;
}
declare module 'babel-loader/lib/utils/read' {
declare module.exports: any;
}
declare module 'babel-loader/lib/utils/relative' {
declare module.exports: any;
}
// Filename aliases // Filename aliases
declare module 'babel-loader/index' {
declare module.exports: $Exports<'babel-loader'>;
}
declare module 'babel-loader/index.js' {
declare module.exports: $Exports<'babel-loader'>;
}
declare module 'babel-loader/lib/fs-cache.js' { declare module 'babel-loader/lib/fs-cache.js' {
declare module.exports: $Exports<'babel-loader/lib/fs-cache'>; declare module.exports: $Exports<'babel-loader/lib/fs-cache'>;
} }
declare module 'babel-loader/lib/helpers/exists.js' { declare module 'babel-loader/lib/index.js' {
declare module.exports: $Exports<'babel-loader/lib/helpers/exists'>; declare module.exports: $Exports<'babel-loader/lib/index'>;
}
declare module 'babel-loader/lib/helpers/read.js' {
declare module.exports: $Exports<'babel-loader/lib/helpers/read'>;
} }
declare module 'babel-loader/lib/resolve-rc.js' { declare module 'babel-loader/lib/resolve-rc.js' {
declare module.exports: $Exports<'babel-loader/lib/resolve-rc'>; declare module.exports: $Exports<'babel-loader/lib/resolve-rc'>;
} }
declare module 'babel-loader/lib/utils/exists.js' {
declare module.exports: $Exports<'babel-loader/lib/utils/exists'>;
}
declare module 'babel-loader/lib/utils/read.js' {
declare module.exports: $Exports<'babel-loader/lib/utils/read'>;
}
declare module 'babel-loader/lib/utils/relative.js' {
declare module.exports: $Exports<'babel-loader/lib/utils/relative'>;
}

View File

@ -1,5 +1,5 @@
// flow-typed signature: 312645f2a8bab19c593f2670a7ff103f // flow-typed signature: 47c9088583f2a3b1c3bb03b4055baece
// flow-typed version: <<STUB>>/babel-plugin-lodash_v^3.2.11/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-plugin-lodash_v^3.2.11/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

View File

@ -0,0 +1,144 @@
// flow-typed signature: 9da92a15fa5848fd1ac62d37d77a6850
// flow-typed version: <<STUB>>/babel-plugin-styled-components_v^1.1.7/flow_v0.71.0
/**
* This is an autogenerated libdef stub for:
*
* 'babel-plugin-styled-components'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'babel-plugin-styled-components' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'babel-plugin-styled-components/lib/css/placeholderUtils' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/css/preprocess' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/css/preprocessInjectGlobal' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/css/preprocessKeyframes' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/css/preprocessUtils' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/index' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/minify/index' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/utils/detectors' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/utils/getName' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/utils/hash' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/utils/options' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/visitors/displayNameAndId' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/visitors/minify' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/visitors/noParserImport' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/visitors/templateLiterals/index' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/visitors/templateLiterals/preprocess' {
declare module.exports: any;
}
declare module 'babel-plugin-styled-components/lib/visitors/templateLiterals/transpile' {
declare module.exports: any;
}
// Filename aliases
declare module 'babel-plugin-styled-components/lib/css/placeholderUtils.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/css/placeholderUtils'>;
}
declare module 'babel-plugin-styled-components/lib/css/preprocess.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/css/preprocess'>;
}
declare module 'babel-plugin-styled-components/lib/css/preprocessInjectGlobal.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/css/preprocessInjectGlobal'>;
}
declare module 'babel-plugin-styled-components/lib/css/preprocessKeyframes.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/css/preprocessKeyframes'>;
}
declare module 'babel-plugin-styled-components/lib/css/preprocessUtils.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/css/preprocessUtils'>;
}
declare module 'babel-plugin-styled-components/lib/index.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/index'>;
}
declare module 'babel-plugin-styled-components/lib/minify/index.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/minify/index'>;
}
declare module 'babel-plugin-styled-components/lib/utils/detectors.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/utils/detectors'>;
}
declare module 'babel-plugin-styled-components/lib/utils/getName.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/utils/getName'>;
}
declare module 'babel-plugin-styled-components/lib/utils/hash.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/utils/hash'>;
}
declare module 'babel-plugin-styled-components/lib/utils/options.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/utils/options'>;
}
declare module 'babel-plugin-styled-components/lib/visitors/displayNameAndId.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/visitors/displayNameAndId'>;
}
declare module 'babel-plugin-styled-components/lib/visitors/minify.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/visitors/minify'>;
}
declare module 'babel-plugin-styled-components/lib/visitors/noParserImport.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/visitors/noParserImport'>;
}
declare module 'babel-plugin-styled-components/lib/visitors/templateLiterals/index.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/visitors/templateLiterals/index'>;
}
declare module 'babel-plugin-styled-components/lib/visitors/templateLiterals/preprocess.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/visitors/templateLiterals/preprocess'>;
}
declare module 'babel-plugin-styled-components/lib/visitors/templateLiterals/transpile.js' {
declare module.exports: $Exports<'babel-plugin-styled-components/lib/visitors/templateLiterals/transpile'>;
}

View File

@ -0,0 +1,32 @@
// flow-typed signature: 652608d2e8431a8c5274bad836ee0926
// flow-typed version: <<STUB>>/babel-plugin-syntax-dynamic-import_v^6.18.0/flow_v0.71.0
/**
* This is an autogenerated libdef stub for:
*
* 'babel-plugin-syntax-dynamic-import'
*
* Fill this stub out by replacing all the `any` types.
*
* Once filled out, we encourage you to share your work with the
* community by sending a pull request to:
* https://github.com/flowtype/flow-typed
*/
declare module 'babel-plugin-syntax-dynamic-import' {
declare module.exports: any;
}
/**
* We include stubs for each file inside this npm package in case you need to
* require those files directly. Feel free to delete any files that aren't
* needed.
*/
declare module 'babel-plugin-syntax-dynamic-import/lib/index' {
declare module.exports: any;
}
// Filename aliases
declare module 'babel-plugin-syntax-dynamic-import/lib/index.js' {
declare module.exports: $Exports<'babel-plugin-syntax-dynamic-import/lib/index'>;
}

View File

@ -1,5 +1,5 @@
// flow-typed signature: 1ac90a5b65b8621f1c6637100a3a49a0 // flow-typed signature: b26839abd705c305219fee62938d492b
// flow-typed version: <<STUB>>/babel-plugin-transform-class-properties_v^6.24.1/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-plugin-transform-class-properties_v^6.24.1/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

View File

@ -1,5 +1,5 @@
// flow-typed signature: 883d88f87fe00aad41cc10200f4ed5c7 // flow-typed signature: c7f83286bf05aa71691f77b01cfe5ca8
// flow-typed version: <<STUB>>/babel-plugin-transform-decorators-legacy_v1.3.4/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-plugin-transform-decorators-legacy_v1.3.4/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

View File

@ -1,5 +1,5 @@
// flow-typed signature: c39ed7e0d504b99dbad16f4bc21577b7 // flow-typed signature: 9afa5c60629c28d30730ce2df5dcfcd7
// flow-typed version: <<STUB>>/babel-plugin-transform-es2015-destructuring_v^6.23.0/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-plugin-transform-es2015-destructuring_v^6.23.0/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

View File

@ -1,5 +1,5 @@
// flow-typed signature: fabb91c6625b44603da3815cb1a0f606 // flow-typed signature: c96a996d8250423b12b2ed9faec13a86
// flow-typed version: <<STUB>>/babel-plugin-transform-es2015-modules-commonjs_v^6.24.1/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-plugin-transform-es2015-modules-commonjs_v^6.24.1/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

View File

@ -1,5 +1,5 @@
// flow-typed signature: 9d5aec989f663e1a1ee84160a9b94c9a // flow-typed signature: 51b77fa264d9add521224f44df19df82
// flow-typed version: <<STUB>>/babel-plugin-transform-object-rest-spread_v^6.23.0/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-plugin-transform-object-rest-spread_v^6.23.0/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

View File

@ -1,5 +1,5 @@
// flow-typed signature: d717de46f6c57058188f79e90ea26c27 // flow-typed signature: 246c54ac874037a4d9cffcb766e3bc91
// flow-typed version: <<STUB>>/babel-plugin-transform-regenerator_v^6.24.1/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-plugin-transform-regenerator_v^6.24.1/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

View File

@ -1,5 +1,5 @@
// flow-typed signature: 6faf55e0643acc0d5b765261064df0f4 // flow-typed signature: 5a748d46bf980bce1150ad979eb02e73
// flow-typed version: <<STUB>>/babel-polyfill_v^6.13.0/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-polyfill_v^6.13.0/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

View File

@ -1,5 +1,5 @@
// flow-typed signature: b1c4442700dc843a41b14e8290b7e9d2 // flow-typed signature: b27490fff2d5c4468766643659a3eb2b
// flow-typed version: <<STUB>>/babel-preset-env_v^1.4.0/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-preset-env_v^1.4.0/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:
@ -46,10 +46,18 @@ declare module 'babel-preset-env/lib/normalize-options' {
declare module.exports: any; declare module.exports: any;
} }
declare module 'babel-preset-env/lib/targets-parser' {
declare module.exports: any;
}
declare module 'babel-preset-env/lib/transform-polyfill-require-plugin' { declare module 'babel-preset-env/lib/transform-polyfill-require-plugin' {
declare module.exports: any; declare module.exports: any;
} }
declare module 'babel-preset-env/lib/utils' {
declare module.exports: any;
}
// Filename aliases // Filename aliases
declare module 'babel-preset-env/data/built-in-features.js' { declare module 'babel-preset-env/data/built-in-features.js' {
declare module.exports: $Exports<'babel-preset-env/data/built-in-features'>; declare module.exports: $Exports<'babel-preset-env/data/built-in-features'>;
@ -69,6 +77,12 @@ declare module 'babel-preset-env/lib/module-transformations.js' {
declare module 'babel-preset-env/lib/normalize-options.js' { declare module 'babel-preset-env/lib/normalize-options.js' {
declare module.exports: $Exports<'babel-preset-env/lib/normalize-options'>; declare module.exports: $Exports<'babel-preset-env/lib/normalize-options'>;
} }
declare module 'babel-preset-env/lib/targets-parser.js' {
declare module.exports: $Exports<'babel-preset-env/lib/targets-parser'>;
}
declare module 'babel-preset-env/lib/transform-polyfill-require-plugin.js' { declare module 'babel-preset-env/lib/transform-polyfill-require-plugin.js' {
declare module.exports: $Exports<'babel-preset-env/lib/transform-polyfill-require-plugin'>; declare module.exports: $Exports<'babel-preset-env/lib/transform-polyfill-require-plugin'>;
} }
declare module 'babel-preset-env/lib/utils.js' {
declare module.exports: $Exports<'babel-preset-env/lib/utils'>;
}

View File

@ -1,5 +1,5 @@
// flow-typed signature: 71439ef11c08f129d231c93a25ce7736 // flow-typed signature: c846d354ff1571b99d50a1c57f08f6e6
// flow-typed version: <<STUB>>/babel-preset-react-hmre_v1.1.1/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-preset-react-hmre_v1.1.1/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

View File

@ -1,5 +1,5 @@
// flow-typed signature: b8a09cacee593afd996e2174c52b3f54 // flow-typed signature: ff1392fee98b43939eca4077f29d32a4
// flow-typed version: <<STUB>>/babel-preset-react_v6.11.1/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-preset-react_v6.11.1/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

View File

@ -1,5 +1,5 @@
// flow-typed signature: 452b03ec25e282c97f4b314724acb4b9 // flow-typed signature: 9feb616713e12a7d3ffecfc3f6a59af1
// flow-typed version: <<STUB>>/babel-regenerator-runtime_v6.5.0/flow_v0.49.1 // flow-typed version: <<STUB>>/babel-regenerator-runtime_v6.5.0/flow_v0.71.0
/** /**
* This is an autogenerated libdef stub for: * This is an autogenerated libdef stub for:

Some files were not shown because too many files have changed in this diff Show More