+
diff --git a/ts/components/session/SessionDropdown.tsx b/ts/components/session/SessionDropdown.tsx
new file mode 100644
index 000000000..21b6a1f7f
--- /dev/null
+++ b/ts/components/session/SessionDropdown.tsx
@@ -0,0 +1,45 @@
+import React from 'react';
+import classNames from 'classnames';
+
+import { SessionDropdownItem, SessionDropDownItemType } from './SessionDropdownItem';
+import { SessionIconType } from './icon/';
+
+
+interface Props {
+ items: Array<{
+ id: string,
+ content: string,
+ icon: SessionIconType | null,
+ type: SessionDropDownItemType,
+ active: boolean,
+ }>,
+ }
+
+export class SessionDropdown extends React.PureComponent
{
+ public static readonly defaultProps = SessionDropdownItem.defaultProps;
+
+ constructor(props: any) {
+ super(props);
+ }
+
+ public render() {
+ const { items } = this.props;
+
+ return (
+
+
+ {items.map((item: any) =>
+ )}
+
+
+ );
+ }
+
+}
+
diff --git a/ts/components/session/SessionDropdownItem.tsx b/ts/components/session/SessionDropdownItem.tsx
new file mode 100644
index 000000000..f8862f748
--- /dev/null
+++ b/ts/components/session/SessionDropdownItem.tsx
@@ -0,0 +1,66 @@
+
+import React from 'react';
+import classNames from 'classnames';
+
+import { SessionIcon, SessionIconSize, SessionIconType } from './icon/';
+import { generateID } from './tools/ComponentTools';
+
+
+export enum SessionDropDownItemType {
+ Default = 'default',
+ Danger = 'danger',
+}
+
+interface Props {
+ id: string,
+ content: string,
+ type: SessionDropDownItemType,
+ icon: SessionIconType | null,
+ active: boolean,
+ onClick: any,
+}
+
+export class SessionDropdownItem extends React.PureComponent {
+ public static defaultProps = {
+ id: generateID(),
+ type: SessionDropDownItemType.Default,
+ onClick: () => null,
+ };
+
+ constructor(props: any) {
+ super(props);
+ this.clickHandler = this.clickHandler.bind(this);
+ }
+
+ public render() {
+ const { id, content, type, icon, active } = this.props;
+
+ return (
+
+ { icon ?
+ : ''
+ }
+
+ {content}
+
+
+ );
+ }
+
+ private clickHandler(e: any){
+ if (this.props.onClick) {
+ e.stopPropagation();
+ this.props.onClick();
+ }
+ }
+ }
+
+
+
diff --git a/ts/components/session/SessionModal.tsx b/ts/components/session/SessionModal.tsx
new file mode 100644
index 000000000..325f772ec
--- /dev/null
+++ b/ts/components/session/SessionModal.tsx
@@ -0,0 +1,43 @@
+import React from 'react';
+import classNames from 'classnames';
+
+import { SessionIconButton, SessionIconSize, SessionIconType } from './icon/';
+
+interface Props {
+ title: string;
+ body: any;
+}
+
+export class SessionModal extends React.PureComponent {
+ constructor(props: any) {
+ super(props);
+ }
+
+ public render() {
+ const { title } = this.props;
+
+ return (
+
+
+
+
+
+
{title}
+
+
+
+
+
+
+ );
+ }
+}
diff --git a/ts/components/session/SessionToggle.tsx b/ts/components/session/SessionToggle.tsx
new file mode 100644
index 000000000..7c169c1ed
--- /dev/null
+++ b/ts/components/session/SessionToggle.tsx
@@ -0,0 +1,48 @@
+import React from 'react';
+import classNames from 'classnames';
+
+interface Props {
+ active: boolean;
+}
+
+interface State {
+ active: boolean;
+}
+
+export class SessionToggle extends React.PureComponent {
+ public static readonly extendedDefaults = {
+ onClick: () => null,
+ };
+
+ constructor(props: any) {
+ super(props);
+ this.clickHandler = this.clickHandler.bind(this);
+
+ const { active } = this.props;
+
+ this.state = {
+ active: active,
+ };
+ }
+
+ public render() {
+ return (
+
+ );
+ }
+
+ private clickHandler() {
+ this.setState({
+ active: !this.state.active,
+ });
+ }
+}
diff --git a/ts/components/session/tools/ComponentTools.tsx b/ts/components/session/tools/ComponentTools.tsx
new file mode 100644
index 000000000..7bdff6063
--- /dev/null
+++ b/ts/components/session/tools/ComponentTools.tsx
@@ -0,0 +1,7 @@
+// This is a collection of tools which can be ued to simplify the esign and rendering process of your components.
+
+export function generateID(){
+ // Generates a unique ID for your component
+ return Math.random().toString(36).substring(3);
+}
+