From 66c37d9664a45d4d35e622cb81cfe14d5a4bd653 Mon Sep 17 00:00:00 2001 From: Myer Nore Date: Sun, 18 Feb 2018 06:14:27 -0500 Subject: [PATCH 1/2] basic styles for ChatWindow; scroll working TODO ==== * avatars #48 ChatWindow basic styles --- .../static/js/chat/rechat/src/RechatApp.js | 3 +- .../static/js/chat/rechat/src/RechatApp.re | 1 + .../static/js/chat/rechat/src/RechatApp.scss | 286 ++++++++++++------ .../chat/rechat/src/RechatMessageListItem.re | 23 ++ .../static/js/chat/rechat/src/RechatWindow.js | 215 +++++++++++++ .../static/js/chat/rechat/src/RechatWindow.re | 87 ++++++ .../ux/ChatComponentMockups.bmpr | Bin 129024 -> 129024 bytes 7 files changed, 515 insertions(+), 100 deletions(-) create mode 100644 django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatMessageListItem.re create mode 100644 django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.js create mode 100644 django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.re diff --git a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.js b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.js index 484af49..e374e2a 100644 --- a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.js +++ b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.js @@ -3,6 +3,7 @@ import * as React from "react"; import * as ReasonReact from "reason-react/src/ReasonReact.js"; +import * as RechatWindow from "./RechatWindow.js"; import * as RechatSidebar from "./RechatSidebar.js"; ((require('./RechatApp.scss'))); @@ -14,7 +15,7 @@ function make() { newrecord[/* render */9] = (function () { return React.createElement("div", { className: "RechatApp" - }, ReasonReact.element(/* None */0, /* None */0, RechatSidebar.make(/* array */[]))); + }, ReasonReact.element(/* None */0, /* None */0, RechatSidebar.make(/* array */[])), ReasonReact.element(/* None */0, /* None */0, RechatWindow.make(/* array */[]))); }); return newrecord; } diff --git a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.re b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.re index 9a209d6..9dc222b 100644 --- a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.re +++ b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.re @@ -8,5 +8,6 @@ let make = (_children) => { render: (_self) =>
+
}; diff --git a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.scss b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.scss index e3417e0..a5c049d 100644 --- a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.scss +++ b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.scss @@ -8,118 +8,206 @@ $grey-v8: rgba(0, 0, 0, .4); $grey-v10: #4c4c4c; $grey-v12: #333; +// https://coolors.co/3e3e3e-e4e4e4-db4d3f-b03d32-a6a5a5 +$black-olive: #3E3E3E; +$platinum: #E4E4E4; +$carmine-pink: #DB4D3F; +$pale-carmine: #B03D32; +$quicksilver: #A6A5A5; + +$primary: $carmine-pink; +$primary-darker: $pale-carmine; +$secondary: $platinum; +$secondary-darker: $quicksilver; +$dark: $black-olive; + #rechat { - .RechatApp { - .RechatSidebar { - background-clip: padding-box; - background-color: $grey-v3; - border-left: 1px solid $grey-v8; - box-shadow: inset 2px 0 2px -2px $grey-v7; - font-size: 12px; - height: 100%; - line-height: 16px; - width: 205px; - position: fixed; - right: 0; - top: 0; - - .users-list { - - .header { - color: $grey-v10; - font-size: 11px; - font-weight: bold; - margin: 8px 0 8px 8px; - height: 16px; - overflow: hidden; - text-overflow: ellipsis; - } +} - ul { - list-style-type: none; - margin: 0; - padding: 0; - } +.RechatSidebar { + background-clip: padding-box; + background-color: $grey-v3; + border-left: 1px solid $grey-v8; + box-shadow: inset 2px 0 2px -2px $grey-v7; + font-size: 12px; + height: 100%; + line-height: 16px; + width: 205px; + position: fixed; + right: 0; + top: 0; + + .users-list { + + .header { + color: $grey-v10; + font-size: 11px; + font-weight: bold; + margin: 8px 0 8px 8px; + height: 16px; + overflow: hidden; + text-overflow: ellipsis; + } - li { + ul { + list-style-type: none; + margin: 0; + padding: 0; + } - &:hover { - background-color: $grey-v4; - box-shadow: 1px 0 0 $grey-v2 inset; - text-decoration: none; - } + li { - a.chatgroup-link { - color: $grey-v12; - display: block; - height: 32px; - line-height: 32px; - padding: 4px 0; - position: relative; - text-decoration: none; - } + &:hover { + background-color: $grey-v4; + box-shadow: 1px 0 0 $grey-v2 inset; + text-decoration: none; + } - .chatgroup-item { - padding-left: 8px; - position: relative; - } + a.chatgroup-link { + color: $grey-v12; + display: block; + height: 32px; + line-height: 32px; + padding: 4px 0; + position: relative; + text-decoration: none; + } - .avatar-container { + .chatgroup-item { + padding-left: 8px; + position: relative; + } - border-radius: 50%; - color: #333; - display: block; - float: left; - height: 32px; - line-height: 32px; - overflow: hidden; - padding: 4px 0; - position: relative; - top: -1px; - width: 34px; - - .avatar { - width: 34px; - border-radius: 50%; - color: #333; - display: block; - height: 32px; - line-height: 32px; - padding: 4px 0; - position: relative; - } - } + .avatar-container { + + border-radius: 50%; + color: #333; + display: block; + float: left; + height: 32px; + line-height: 32px; + overflow: hidden; + padding: 4px 0; + position: relative; + top: -1px; + width: 34px; + + .avatar { + width: 34px; + border-radius: 50%; + color: #333; + display: block; + height: 32px; + line-height: 32px; + padding: 4px 0; + position: relative; + } + } - .status-container { - float: right; - line-height: 32px; - margin: 0 1px 0 4px; - text-align: right; - - .status-indicator { - display: inline-block; - padding-right: 12px; - - span { - background: $brightgreen; - border-radius: 50%; - display: inline-block; - height: 6px; - margin-left: 4px; - width: 6px; - } - } - } + .status-container { + float: right; + line-height: 32px; + margin: 0 1px 0 4px; + text-align: right; - .name, .rightBuffer { - overflow: hidden; - padding-left: 8px; - text-overflow: ellipsis; - white-space: nowrap - } + .status-indicator { + display: inline-block; + padding-right: 12px; + span { + background: $brightgreen; + border-radius: 50%; + display: inline-block; + height: 6px; + margin-left: 4px; + width: 6px; + } } } + + .name, .rightBuffer { + overflow: hidden; + padding-left: 8px; + text-overflow: ellipsis; + white-space: nowrap + } + } } } + + +$RechatWindow_height: 334px; +$RechatWindow_Header_height: 22px; +$RechatWindow_Footer_height: 22px; +$RechatWindow_MessagePort_height: $RechatWindow_height - $RechatWindow_Header_height - $RechatWindow_Footer_height; + +.RechatWindow { + position: fixed; + height: $RechatWindow_height; + width: 260px; + bottom: 0; + // TODO: use absolute positioning with margins so we can have more than one window + right: 350px; + background-color: white; + border: 1px solid $grey-v8; + box-shadow: 2px 0 1px -1px $grey-v7; + font-size: 12px; +} + +.RechatWindow__Header { + background-color: $primary-darker; + color: white; + padding: 3px; + height: $RechatWindow_Header_height; +} + +.RechatWindow__Name { + float: left; + width: 92%; +} + +.RechatWindow__CloseButton { + float: right; + width: 5%; + + &:hover { + cursor: pointer; + } +} + +.RechatWindow__MessagesPort { + padding: 5px; + overflow-y: scroll; + height: $RechatWindow_MessagePort_height; +} + +.RechatWindow__Message { + width: 155px; + border-radius: 10px; + padding: 3px; + margin: 3px; + clear: both; +} + +.RechatWindow__Message--Theirs { + background-color: $secondary; + float: left; +} + +.RechatWindow__Message--Ours { + background-color: $primary-darker; + color: white; + float: right; +} + +.RechatWindow__Footer { + position: absolute; + height: $RechatWindow_Footer_height; + bottom: 0; + width: 100%; +} + +.RechatWindow__Input { + width: 100%; +} diff --git a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatMessageListItem.re b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatMessageListItem.re new file mode 100644 index 0000000..b453f26 --- /dev/null +++ b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatMessageListItem.re @@ -0,0 +1,23 @@ +let component = ReasonReact.statelessComponent("RechatUsersListItem"); + +let make = (~chatUser, _children) => { + ...component, + render: (_) => { +
  • + +
    +
    +
    +
    +
    +
    + +
    +
    +
    (ReasonReact.stringToElement(chatUser##username))
    +
    +
    +
    +
  • + } +}; diff --git a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.js b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.js new file mode 100644 index 0000000..f2f5102 --- /dev/null +++ b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.js @@ -0,0 +1,215 @@ +// Generated by BUCKLESCRIPT VERSION 2.1.0, PLEASE EDIT WITH CARE +'use strict'; + +import * as $$Array from "bs-platform/lib/es6/array.js"; +import * as React from "react"; +import * as Js_json from "bs-platform/lib/es6/js_json.js"; +import * as ReasonReact from "reason-react/src/ReasonReact.js"; +import * as RechatUtils from "./RechatUtils.js"; +import * as Caml_exceptions from "bs-platform/lib/es6/caml_exceptions.js"; +import * as RechatMessageListItem from "./RechatMessageListItem.js"; + +var Graphql_error = Caml_exceptions.create("RechatWindow.UsersQuery.Graphql_error"); + +var query = "query {\nchatUsers {\nid \nname \nusername \nisCurrentUser \nphotoUrl \n}\n}"; + +function parse(value) { + var match = Js_json.decodeObject(value); + if (match) { + var value$1 = match[0]["chatUsers"]; + var match$1 = Js_json.decodeNull(value$1); + var tmp; + if (match$1) { + tmp = /* None */0; + } else { + var match$2 = Js_json.decodeArray(value$1); + var tmp$1; + if (match$2) { + tmp$1 = $$Array.map((function (value) { + var match = Js_json.decodeNull(value); + if (match) { + return /* None */0; + } else { + var match$1 = Js_json.decodeObject(value); + var tmp; + if (match$1) { + var value$1 = match$1[0]; + var value$2 = value$1["id"]; + var match$2 = Js_json.decodeNull(value$2); + var tmp$1; + if (match$2) { + tmp$1 = /* None */0; + } else { + var match$3 = Js_json.decodeNumber(value$2); + var tmp$2; + if (match$3) { + tmp$2 = match$3[0] | 0; + } else { + throw Graphql_error; + } + tmp$1 = /* Some */[tmp$2]; + } + var value$3 = value$1["name"]; + var match$4 = Js_json.decodeNull(value$3); + var tmp$3; + if (match$4) { + tmp$3 = /* None */0; + } else { + var match$5 = Js_json.decodeString(value$3); + var tmp$4; + if (match$5) { + tmp$4 = match$5[0]; + } else { + throw Graphql_error; + } + tmp$3 = /* Some */[tmp$4]; + } + var value$4 = value$1["username"]; + var match$6 = Js_json.decodeString(value$4); + var tmp$5; + if (match$6) { + tmp$5 = match$6[0]; + } else { + throw Graphql_error; + } + var value$5 = value$1["isCurrentUser"]; + var match$7 = Js_json.decodeNull(value$5); + var tmp$6; + if (match$7) { + tmp$6 = /* None */0; + } else { + var match$8 = Js_json.decodeBoolean(value$5); + var tmp$7; + if (match$8) { + tmp$7 = match$8[0]; + } else { + throw Graphql_error; + } + tmp$6 = /* Some */[tmp$7]; + } + var value$6 = value$1["photoUrl"]; + var match$9 = Js_json.decodeNull(value$6); + var tmp$8; + if (match$9) { + tmp$8 = /* None */0; + } else { + var match$10 = Js_json.decodeString(value$6); + var tmp$9; + if (match$10) { + tmp$9 = match$10[0]; + } else { + throw Graphql_error; + } + tmp$8 = /* Some */[tmp$9]; + } + tmp = { + id: tmp$1, + name: tmp$3, + username: tmp$5, + isCurrentUser: tmp$6, + photoUrl: tmp$8 + }; + } else { + throw Graphql_error; + } + return /* Some */[tmp]; + } + }), match$2[0]); + } else { + throw Graphql_error; + } + tmp = /* Some */[tmp$1]; + } + return { + chatUsers: tmp + }; + } else { + throw Graphql_error; + } +} + +function make() { + return { + query: query, + variables: null, + parse: parse + }; +} + +var UsersQuery = /* module */[ + /* Graphql_error */Graphql_error, + /* query */query, + /* parse */parse, + /* make */make +]; + +var component = ReasonReact.statelessComponent("RechatWindow"); + +function renderChatMessageItem(user) { + return ReasonReact.element(/* Some */[user.username], /* None */0, RechatMessageListItem.make(user, /* array */[])); +} + +function renderChatWindow() { + return React.createElement("div", { + className: "RechatWindow" + }, React.createElement("div", { + className: "header" + }, RechatUtils.ste("CHAT WINDOW"))); +} + +function make$1() { + var newrecord = component.slice(); + newrecord[/* render */9] = (function () { + return React.createElement("div", { + className: "RechatWindow" + }, React.createElement("div", { + className: "RechatWindow__Header" + }, React.createElement("div", { + className: "RechatWindow__Name" + }, RechatUtils.ste("Chat User 1")), React.createElement("div", { + className: "RechatWindow__CloseButton" + }, RechatUtils.ste("X"))), React.createElement("div", { + className: "RechatWindow__MessagesPort" + }, React.createElement("div", { + className: "RechatWindow__MessageContainer RechatWindow__MessageContainer--Theirs" + }, React.createElement("div", { + className: "RechatWindow__AvatarContainer" + }, React.createElement("div", { + className: "RechatWindow__Avatar" + }, RechatUtils.ste("THEM"))), React.createElement("div", { + className: "RechatWindow__Message RechatWindow__Message--Theirs" + }, RechatUtils.ste("A small river named Duden flows by their place and supplies it with the necessary regelialia."))), React.createElement("div", { + className: "RechatWindow__MessageContainer RechatWindow__MessageContainer--Ours" + }, React.createElement("div", { + className: "RechatWindow__Message RechatWindow__Message--Ours" + }, RechatUtils.ste("Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they live in Bookmarksgrove right at the coast of the Semantics, a large language ocean."))), React.createElement("div", { + className: "RechatWindow__MessageContainer RechatWindow__MessageContainer--Theirs" + }, React.createElement("div", { + className: "RechatWindow__AvatarContainer" + }, React.createElement("div", { + className: "RechatWindow__Avatar" + }, RechatUtils.ste("THEM"))), React.createElement("div", { + className: "RechatWindow__Message RechatWindow__Message--Theirs" + }, RechatUtils.ste("It is a paradisematic country, in which roasted parts of sentences fly into your mouth.")))), React.createElement("div", { + className: "RechatWindow__Footer" + }, React.createElement("input", { + className: "RechatWindow__Input", + placeholder: "Type a message...", + type: "text" + }))); + }); + return newrecord; +} + +var Query = 0; + +export { + UsersQuery , + component , + Query , + renderChatMessageItem , + renderChatWindow , + make$1 as make, + +} +/* component Not a pure module */ diff --git a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.re b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.re new file mode 100644 index 0000000..8349e54 --- /dev/null +++ b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.re @@ -0,0 +1,87 @@ +/* Create a GraphQL Query by using the graphql_ppx */ +module UsersQuery = [%graphql {| + query { + chatUsers { + id + name + username + isCurrentUser + photoUrl + } + } +|}]; + +/*eventually will be a reducerComponent*/ +let component = ReasonReact.statelessComponent("RechatWindow"); + +module Query = RechatApollo.Instance.Query; + +let renderChatMessageItem = (user) => ; + +let renderChatWindow = (_) => { + /*let listItems = Array.map(ChatMessageItem, chatGroup) |> ReasonReact.arrayToElement;*/ + +
    +
    (RechatUtils.ste("CHAT WINDOW"))
    + /*
      (listItems)
    */ +
    +}; + + +let make = (_children) => { + ...component, + render: (_) => { +
    + +
    +
    (RechatUtils.ste("Chat User 1"))
    +
    (RechatUtils.ste("X"))
    +
    + +
    + +
    +
    +
    (RechatUtils.ste("THEM"))
    +
    +
    (RechatUtils.ste("A small river named Duden flows by their place and supplies it with the necessary regelialia."))
    +
    + +
    +
    (RechatUtils.ste("Far far away, behind the word mountains, far from the countries Vokalia and Consonantia, there live the blind texts. Separated they live in Bookmarksgrove right at the coast of the Semantics, a large language ocean.")) +
    +
    + +
    +
    +
    (RechatUtils.ste("THEM"))
    +
    +
    (RechatUtils.ste("It is a paradisematic country, in which roasted parts of sentences fly into your mouth."))
    +
    + +
    + +
    + +
    + +
    + /*let unexpectedError =
    (ReasonReact.stringToElement("There was an internal error"))
    ;*/ + /*let usersQuery = UsersQuery.make();*/ + /**/ + /*...((response, parse) => {*/ + /*switch response {*/ + /*| Loading =>
    (ReasonReact.stringToElement("Loading"))
    */ + /*| Failed(error) =>
    (ReasonReact.stringToElement(error))
    */ + /*| Loaded(result) => {*/ + /*let chatUsers = parse(result)##chatUsers;*/ + /*switch chatUsers {*/ + /*| Some(chatUsers) => RechatUtils.arr_only_some(chatUsers) |> renderUsersList*/ + /*| None => unexpectedError*/ + /*}*/ + /*}*/ + /*}*/ + /*})*/ + /*
    */ +} +}; diff --git a/django_react_chat_example_project/ux/ChatComponentMockups.bmpr b/django_react_chat_example_project/ux/ChatComponentMockups.bmpr index 26a7a0ac3cafd62d00b44460d9fd87fbbe24bee9..299e931ede380117e744612411f23cdfe8da76ee 100644 GIT binary patch delta 1027 zcma))OGs2v7{|}&IXbPJQARTzLPC3?VUv#;DPJ?A8?%WXxUf>QG8^?e>iFn2Pzwu* z8%Me#B9ej9E>Ccxs1|KnwFz3ZY7@AMfgoBG(|_hliB!nt$N!w~-tXLd|KC5JaKsZ1 zvxvIydjiz`q%%K@S23@e$SS0kY8GOZ%!{iMSAdnXCU%eou`kCi#H!M@RHZsyYh;H| z39<^-$b76B>j2gj>Z7ByEHj@m=2Ul&$1-H1p-z6O&$SLbq&{i9FlF1(!veQmvf=4B z6>p1^o{Z5Qq8u&8DapyL%;yH-v1}E86(?)vHucEfXLGB;q$9Hfoq5uDW6FESq81uI zS;Y&KD--pujc>@dT({^ed8P5%)Hq;}({?3haC(6fvydH1%tH#5ScDWQ@d)Bk!c6id zJ}s8GQ9vb1Orct;LVUu#Vq~ct83gN0)FPVx+I;_9rLuzDJY9i6syOL zr!!>O_rVG;k)n_lj?jSmeq>vQhNrtohF@k`@8)1aoxkSU5IX-cgw*7^w(NiR2LI1*Fa-nsW5|VdLoTixaw%mAj=2FAeznAEc?bcIvD9nAqdnuB&U4Lh1cb~K~uXwt9})5y$-oy<`?nK3(=V|Fsf S?PN~a$(;P1OwHHmr}G!|+Bekz delta 24850 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 From 90b429955c828cbccb18b8bbe65f4e30e8ee807d Mon Sep 17 00:00:00 2001 From: Myer Nore Date: Sun, 18 Feb 2018 08:08:35 -0500 Subject: [PATCH 2/2] basic styles for ChatWindow; avatars working #48 ChatWindow basic styles --- .../bsconfig.json | 1 + .../static/js/chat/rechat/src/RechatApp.scss | 24 +- .../static/js/chat/rechat/src/RechatWindow.js | 11 +- .../static/js/chat/rechat/src/RechatWindow.re | 6 +- .../package.json | 2 + .../ux/ChatComponentMockups.bmpr | Bin 129024 -> 129024 bytes django_react_chat_example_project/yarn.lock | 296 +++++++++++++++++- 7 files changed, 324 insertions(+), 16 deletions(-) diff --git a/django_react_chat_example_project/bsconfig.json b/django_react_chat_example_project/bsconfig.json index 689a001..1129da9 100644 --- a/django_react_chat_example_project/bsconfig.json +++ b/django_react_chat_example_project/bsconfig.json @@ -6,6 +6,7 @@ "bs-dependencies": [ "reason-react", "reason-apollo", + "bs-material-ui", "bs-jest" ], "reason": { diff --git a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.scss b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.scss index a5c049d..4981e33 100644 --- a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.scss +++ b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatApp.scss @@ -22,6 +22,12 @@ $secondary-darker: $quicksilver; $dark: $black-olive; #rechat { + // Avatar uses material-ui, so nesting is needed to increase the specificity + .RechatWindow__Avatar { + width: 30px; + height: 30px; + } + } .RechatSidebar { @@ -162,7 +168,7 @@ $RechatWindow_MessagePort_height: $RechatWindow_height - $RechatWindow_Header_he height: $RechatWindow_Header_height; } -.RechatWindow__Name { +.RechatWindow__HeaderTitle { float: left; width: 92%; } @@ -182,6 +188,18 @@ $RechatWindow_MessagePort_height: $RechatWindow_height - $RechatWindow_Header_he height: $RechatWindow_MessagePort_height; } +.RechatWindow__AvatarContainer, .RechatWindow__Message { + display: inline-block; +} + +.RechatWindow__MessageContainer--Theirs { + float: left; +} + +.RechatWindow__MessageContainer--Ours { + float: right; +} + .RechatWindow__Message { width: 155px; border-radius: 10px; @@ -192,13 +210,13 @@ $RechatWindow_MessagePort_height: $RechatWindow_height - $RechatWindow_Header_he .RechatWindow__Message--Theirs { background-color: $secondary; - float: left; + border-bottom-left-radius: 0; } .RechatWindow__Message--Ours { background-color: $primary-darker; color: white; - float: right; + border-bottom-right-radius: 0; } .RechatWindow__Footer { diff --git a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.js b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.js index f2f5102..287d5b1 100644 --- a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.js +++ b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.js @@ -4,6 +4,7 @@ import * as $$Array from "bs-platform/lib/es6/array.js"; import * as React from "react"; import * as Js_json from "bs-platform/lib/es6/js_json.js"; +import * as MaterialUI from "bs-material-ui/src/MaterialUI.js"; import * as ReasonReact from "reason-react/src/ReasonReact.js"; import * as RechatUtils from "./RechatUtils.js"; import * as Caml_exceptions from "bs-platform/lib/es6/caml_exceptions.js"; @@ -165,7 +166,7 @@ function make$1() { }, React.createElement("div", { className: "RechatWindow__Header" }, React.createElement("div", { - className: "RechatWindow__Name" + className: "RechatWindow__HeaderTitle" }, RechatUtils.ste("Chat User 1")), React.createElement("div", { className: "RechatWindow__CloseButton" }, RechatUtils.ste("X"))), React.createElement("div", { @@ -174,9 +175,7 @@ function make$1() { className: "RechatWindow__MessageContainer RechatWindow__MessageContainer--Theirs" }, React.createElement("div", { className: "RechatWindow__AvatarContainer" - }, React.createElement("div", { - className: "RechatWindow__Avatar" - }, RechatUtils.ste("THEM"))), React.createElement("div", { + }, ReasonReact.element(/* None */0, /* None */0, MaterialUI.Avatar[/* make */0](/* None */0, /* Some */["RechatWindow__Avatar"], /* None */0, /* None */0, /* None */0, /* None */0, /* None */0, /* None */0, /* None */0, /* None */0, /* array */[RechatUtils.ste("TH")]))), React.createElement("div", { className: "RechatWindow__Message RechatWindow__Message--Theirs" }, RechatUtils.ste("A small river named Duden flows by their place and supplies it with the necessary regelialia."))), React.createElement("div", { className: "RechatWindow__MessageContainer RechatWindow__MessageContainer--Ours" @@ -186,9 +185,7 @@ function make$1() { className: "RechatWindow__MessageContainer RechatWindow__MessageContainer--Theirs" }, React.createElement("div", { className: "RechatWindow__AvatarContainer" - }, React.createElement("div", { - className: "RechatWindow__Avatar" - }, RechatUtils.ste("THEM"))), React.createElement("div", { + }, ReasonReact.element(/* None */0, /* None */0, MaterialUI.Avatar[/* make */0](/* None */0, /* Some */["RechatWindow__Avatar"], /* None */0, /* None */0, /* None */0, /* None */0, /* None */0, /* None */0, /* None */0, /* None */0, /* array */[RechatUtils.ste("TH")]))), React.createElement("div", { className: "RechatWindow__Message RechatWindow__Message--Theirs" }, RechatUtils.ste("It is a paradisematic country, in which roasted parts of sentences fly into your mouth.")))), React.createElement("div", { className: "RechatWindow__Footer" diff --git a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.re b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.re index 8349e54..cd1555e 100644 --- a/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.re +++ b/django_react_chat_example_project/django_react_chat_example_project/static/js/chat/rechat/src/RechatWindow.re @@ -34,7 +34,7 @@ let make = (_children) => {
    -
    (RechatUtils.ste("Chat User 1"))
    +
    (RechatUtils.ste("Chat User 1"))
    (RechatUtils.ste("X"))
    @@ -42,7 +42,7 @@ let make = (_children) => {
    -
    (RechatUtils.ste("THEM"))
    + (RechatUtils.ste("TH"))
    (RechatUtils.ste("A small river named Duden flows by their place and supplies it with the necessary regelialia."))
    @@ -54,7 +54,7 @@ let make = (_children) => {
    -
    (RechatUtils.ste("THEM"))
    + (RechatUtils.ste("TH"))
    (RechatUtils.ste("It is a paradisematic country, in which roasted parts of sentences fly into your mouth."))
    diff --git a/django_react_chat_example_project/package.json b/django_react_chat_example_project/package.json index d987247..033ed14 100644 --- a/django_react_chat_example_project/package.json +++ b/django_react_chat_example_project/package.json @@ -52,10 +52,12 @@ "apollo-link-error": "^1.0.5", "apollo-link-http": "^1.3.2", "babel-preset-react-app": "^3.1.0", + "bs-material-ui": "^0.2.0", "cross-env": "^5.1.1", "css-loader": "^0.28.9", "graphql": "^0.13.0", "graphql-tag": "^2.6.1", + "material-ui": "^1.0.0-beta.34", "node-sass": "^4.7.2", "react-apollo": "^2.0.4", "react-dom": "^16.2.0", diff --git a/django_react_chat_example_project/ux/ChatComponentMockups.bmpr b/django_react_chat_example_project/ux/ChatComponentMockups.bmpr index 299e931ede380117e744612411f23cdfe8da76ee..69c6fe2168f93a32b8aeb587862b1d65bf377f25 100644 GIT binary patch delta 34103 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 HeE$CesPNl| delta 33048 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 diff --git a/django_react_chat_example_project/yarn.lock b/django_react_chat_example_project/yarn.lock index 7a36e5a..3d70fbe 100644 --- a/django_react_chat_example_project/yarn.lock +++ b/django_react_chat_example_project/yarn.lock @@ -40,6 +40,20 @@ version "2.0.47" resolved "https://registry.yarnpkg.com/@types/async/-/async-2.0.47.tgz#f49ba1dd1f189486beb6e1d070a850f6ab4bd521" +"@types/jss@^9.3.0": + version "9.3.0" + resolved "https://registry.yarnpkg.com/@types/jss/-/jss-9.3.0.tgz#0f8484fd03ded206917be27b58217f274a0ad59f" + +"@types/react-transition-group@^2.0.6": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-2.0.7.tgz#2847292d54c5685d982ae5a3ecb6960946689d87" + dependencies: + "@types/react" "*" + +"@types/react@*": + version "16.0.38" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.0.38.tgz#76617433ea10274505f60bb86eddfdd0476ffdc2" + "@types/zen-observable@0.5.3", "@types/zen-observable@^0.5.3": version "0.5.3" resolved "https://registry.yarnpkg.com/@types/zen-observable/-/zen-observable-0.5.3.tgz#91b728599544efbb7386d8b6633693a3c2e7ade5" @@ -1119,6 +1133,10 @@ braces@^1.8.2: preserve "^0.2.0" repeat-element "^1.1.2" +brcast@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/brcast/-/brcast-3.0.1.tgz#6256a8349b20de9eed44257a9b24d71493cd48dd" + brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" @@ -1205,6 +1223,10 @@ bs-jest@^0.3.2: dependencies: jest "^22.0.4" +bs-material-ui@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/bs-material-ui/-/bs-material-ui-0.2.0.tgz#648bc66167a8fb50da5ccf60548eadd0aeba0a6a" + bs-platform@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/bs-platform/-/bs-platform-2.1.0.tgz#63560ff8f7142c9c0631559df1c35590b9f6d8b2" @@ -1294,6 +1316,10 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" +chain-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/chain-function/-/chain-function-1.0.0.tgz#0d4ab37e7e18ead0bdc47b920764118ce58733dc" + chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1312,6 +1338,10 @@ chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.0: escape-string-regexp "^1.0.5" supports-color "^4.0.0" +change-emitter@^0.1.2: + version "0.1.6" + resolved "https://registry.yarnpkg.com/change-emitter/-/change-emitter-0.1.6.tgz#e8b2fe3d7f1ab7d69a32199aff91ea6931409515" + chokidar@^1.6.1, chokidar@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" @@ -1344,6 +1374,10 @@ clap@^1.0.9: dependencies: chalk "^1.1.3" +classnames@^2.2.5: + version "2.2.5" + resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" + cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -1598,6 +1632,12 @@ css-selector-tokenizer@^0.7.0: fastparse "^1.1.1" regexpu-core "^1.0.0" +css-vendor@^0.3.8: + version "0.3.8" + resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-0.3.8.tgz#6421cfd3034ce664fe7673972fd0119fc28941fa" + dependencies: + is-in-browser "^1.0.2" + cssesc@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-0.1.0.tgz#c814903e45623371a0477b40109aaafbeeaddbb4" @@ -1702,6 +1742,10 @@ deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" +deepmerge@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-2.0.1.tgz#25c1c24f110fb914f80001b925264dd77f3f4312" + default-require-extensions@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-1.0.0.tgz#f37ea15d3e13ffd9b437d33e1a75b5fb97874cb8" @@ -1760,6 +1804,14 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dom-helpers@^3.2.0, dom-helpers@^3.2.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-3.3.1.tgz#fc1a4e15ffdf60ddde03a480a9c0fece821dd4a6" + +dom-walk@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.1.tgz#672226dc74c8f799ad35307df936aba11acd6018" + domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" @@ -2051,7 +2103,7 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -fbjs@^0.8.16: +fbjs@^0.8.1, fbjs@^0.8.16: version "0.8.16" resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" dependencies: @@ -2270,6 +2322,13 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" +global@~4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/global/-/global-4.3.2.tgz#e76989268a6c74c38908b1305b10fc0e394e9d0f" + dependencies: + min-document "^2.19.0" + process "~0.5.1" + globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" @@ -2441,6 +2500,10 @@ hoist-non-react-statics@^2.2.0: version "2.3.1" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0" +hoist-non-react-statics@^2.3.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz#d2ca2dfc19c5a91c5a6615ce8e564ef0347e2a40" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -2486,6 +2549,10 @@ humps@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/humps/-/humps-2.0.1.tgz#dd02ea6081bd0568dc5d073184463957ba9ef9aa" +hyphenate-style-name@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.2.tgz#31160a36930adaf1fc04c6074f7eb41465d4ec4b" + iconv-lite@0.4.19, iconv-lite@~0.4.13: version "0.4.19" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" @@ -2638,6 +2705,10 @@ is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" +is-function@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.1.tgz#12cfb98b65b57dd3d193a3121f5f6e2f437602b5" + is-generator-fn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" @@ -2648,6 +2719,10 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" +is-in-browser@^1.0.2, is-in-browser@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-in-browser/-/is-in-browser-1.1.3.tgz#56ff4db683a078c6082eb95dad7dc62e1d04f835" + is-my-json-valid@^2.12.4: version "2.16.1" resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.1.tgz#5a846777e2c2620d1e69104e5d3a03b1f6088f11" @@ -3181,6 +3256,85 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.10.0" +jss-camel-case@^6.0.0, jss-camel-case@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jss-camel-case/-/jss-camel-case-6.1.0.tgz#ccb1ff8d6c701c02a1fed6fb6fb6b7896e11ce44" + dependencies: + hyphenate-style-name "^1.0.2" + +jss-compose@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/jss-compose/-/jss-compose-5.0.0.tgz#ce01b2e4521d65c37ea42cf49116e5f7ab596484" + dependencies: + warning "^3.0.0" + +jss-default-unit@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/jss-default-unit/-/jss-default-unit-8.0.2.tgz#cc1e889bae4c0b9419327b314ab1c8e2826890e6" + +jss-expand@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/jss-expand/-/jss-expand-5.1.0.tgz#b1ad74ec18631f34f65a2124fcfceb6400610e3d" + +jss-extend@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/jss-extend/-/jss-extend-6.2.0.tgz#4af09d0b72fb98ee229970f8ca852fec1ca2a8dc" + dependencies: + warning "^3.0.0" + +jss-global@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/jss-global/-/jss-global-3.0.0.tgz#e19e5c91ab2b96353c227e30aa2cbd938cdaafa2" + +jss-nested@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/jss-nested/-/jss-nested-6.0.1.tgz#ef992b79d6e8f63d939c4397b9d99b5cbbe824ca" + dependencies: + warning "^3.0.0" + +jss-preset-default@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/jss-preset-default/-/jss-preset-default-4.3.0.tgz#7bc91b0b282492557d36ed4e5c6d7c8cb3154bb8" + dependencies: + jss-camel-case "^6.1.0" + jss-compose "^5.0.0" + jss-default-unit "^8.0.2" + jss-expand "^5.1.0" + jss-extend "^6.2.0" + jss-global "^3.0.0" + jss-nested "^6.0.1" + jss-props-sort "^6.0.0" + jss-template "^1.0.1" + jss-vendor-prefixer "^7.0.0" + +jss-props-sort@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/jss-props-sort/-/jss-props-sort-6.0.0.tgz#9105101a3b5071fab61e2d85ea74cc22e9b16323" + +jss-template@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/jss-template/-/jss-template-1.0.1.tgz#09aed9d86cc547b07f53ef355d7e1777f7da430a" + dependencies: + warning "^3.0.0" + +jss-vendor-prefixer@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/jss-vendor-prefixer/-/jss-vendor-prefixer-7.0.0.tgz#0166729650015ef19d9f02437c73667231605c71" + dependencies: + css-vendor "^0.3.8" + +jss@^9.3.2, jss@^9.3.3: + version "9.8.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-9.8.0.tgz#77830def563870103f8671ed31ce3a3d2f32aa2b" + dependencies: + is-in-browser "^1.1.3" + symbol-observable "^1.1.0" + warning "^3.0.0" + +keycode@^2.1.9: + version "2.1.9" + resolved "https://registry.yarnpkg.com/keycode/-/keycode-2.1.9.tgz#964a23c54e4889405b4861a5c9f0480d45141dfa" + kind-of@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" @@ -3310,7 +3464,7 @@ lodash@^4.0.0, lodash@^4.14.0, lodash@^4.17.4, lodash@~4.17.4: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" -lodash@^4.13.1: +lodash@^4.13.1, lodash@^4.2.0: version "4.17.5" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" @@ -3358,6 +3512,38 @@ map-obj@^1.0.0, map-obj@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" +material-ui@^1.0.0-beta.34: + version "1.0.0-beta.34" + resolved "https://registry.yarnpkg.com/material-ui/-/material-ui-1.0.0-beta.34.tgz#bea328d3d34df7ab8bf01c936d08adee11195b80" + dependencies: + "@types/jss" "^9.3.0" + "@types/react-transition-group" "^2.0.6" + babel-runtime "^6.26.0" + brcast "^3.0.1" + classnames "^2.2.5" + deepmerge "^2.0.1" + dom-helpers "^3.2.1" + hoist-non-react-statics "^2.3.1" + jss "^9.3.3" + jss-camel-case "^6.0.0" + jss-default-unit "^8.0.2" + jss-global "^3.0.0" + jss-nested "^6.0.1" + jss-props-sort "^6.0.0" + jss-vendor-prefixer "^7.0.0" + keycode "^2.1.9" + lodash "^4.2.0" + normalize-scroll-left "^0.1.2" + prop-types "^15.6.0" + react-event-listener "^0.5.1" + react-jss "^8.1.0" + react-popper "^0.8.0" + react-scrollbar-size "^2.0.2" + react-transition-group "^2.2.1" + recompose "^0.26.0" + scroll "^2.0.1" + warning "^3.0.0" + math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" @@ -3446,6 +3632,12 @@ mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" +min-document@^2.19.0: + version "2.19.0" + resolved "https://registry.yarnpkg.com/min-document/-/min-document-2.19.0.tgz#7bd282e3f5842ed295bb748cdd9f1ffa2c824685" + dependencies: + dom-walk "^0.1.0" + minimalistic-assert@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz#702be2dda6b37f4836bcb3f5db56641b64a1d3d3" @@ -3635,6 +3827,10 @@ normalize-range@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" +normalize-scroll-left@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/normalize-scroll-left/-/normalize-scroll-left-0.1.2.tgz#6b79691ba79eb5fb107fa5edfbdc06b55caee2aa" + normalize-url@^1.4.0: version "1.9.1" resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" @@ -3895,6 +4091,10 @@ pn@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" +popper.js@^1.12.9: + version "1.12.9" + resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.12.9.tgz#0dfbc2dff96c451bb332edcfcfaaf566d331d5b3" + postcss-calc@^5.2.0: version "5.3.1" resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-5.3.1.tgz#77bae7ca928ad85716e2fda42f261bf7c1d65b5e" @@ -4172,6 +4372,10 @@ process@^0.11.10: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" +process@~0.5.1: + version "0.5.2" + resolved "https://registry.yarnpkg.com/process/-/process-0.5.2.tgz#1638d8a8e34c2f440a91db95ab9aeb677fc185cf" + promise@^7.1.1: version "7.3.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" @@ -4247,6 +4451,12 @@ querystring@0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" +rafl@~1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/rafl/-/rafl-1.2.2.tgz#fe930f758211020d47e38815f5196a8be4150740" + dependencies: + global "~4.3.0" + randomatic@^1.1.3: version "1.1.7" resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" @@ -4296,6 +4506,52 @@ react-apollo@^2.0.4: object-assign "^4.1.1" prop-types "^15.6.0" +react-event-listener@^0.5.1: + version "0.5.3" + resolved "https://registry.yarnpkg.com/react-event-listener/-/react-event-listener-0.5.3.tgz#a8b492596ad601865314fcc2c18cb87b6ce3876e" + dependencies: + babel-runtime "^6.26.0" + fbjs "^0.8.16" + prop-types "^15.6.0" + warning "^3.0.0" + +react-jss@^8.1.0: + version "8.3.3" + resolved "https://registry.yarnpkg.com/react-jss/-/react-jss-8.3.3.tgz#677a57569d3e4f5099fcdeafeddd8d2c62ab5977" + dependencies: + hoist-non-react-statics "^2.3.1" + jss "^9.3.2" + jss-preset-default "^4.3.0" + prop-types "^15.6.0" + theming "^1.3.0" + +react-popper@^0.8.0: + version "0.8.2" + resolved "https://registry.yarnpkg.com/react-popper/-/react-popper-0.8.2.tgz#092095ff13933211d3856d9f325511ec3a42f12c" + dependencies: + popper.js "^1.12.9" + prop-types "^15.6.0" + +react-scrollbar-size@^2.0.2: + version "2.1.0" + resolved "https://registry.yarnpkg.com/react-scrollbar-size/-/react-scrollbar-size-2.1.0.tgz#105e797135cab92b1f9e16f00071db7f29f80754" + dependencies: + babel-runtime "^6.26.0" + prop-types "^15.6.0" + react-event-listener "^0.5.1" + stifle "^1.0.2" + +react-transition-group@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-2.2.1.tgz#e9fb677b79e6455fd391b03823afe84849df4a10" + dependencies: + chain-function "^1.0.0" + classnames "^2.2.5" + dom-helpers "^3.2.0" + loose-envify "^1.3.1" + prop-types "^15.5.8" + warning "^3.0.0" + react-websocket@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/react-websocket/-/react-websocket-2.0.0.tgz#efc72f3e841ee1befe78efe634c9982fae16348a" @@ -4379,6 +4635,15 @@ reason-react@^0.3.2: react ">=15.0.0 || >=16.0.0" react-dom ">=15.0.0 || >=16.0.0" +recompose@^0.26.0: + version "0.26.0" + resolved "https://registry.yarnpkg.com/recompose/-/recompose-0.26.0.tgz#9babff039cb72ba5bd17366d55d7232fbdfb2d30" + dependencies: + change-emitter "^0.1.2" + fbjs "^0.8.1" + hoist-non-react-statics "^2.3.1" + symbol-observable "^1.0.4" + redent@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" @@ -4652,6 +4917,12 @@ schema-utils@^0.4.3: ajv "^5.0.0" ajv-keywords "^2.1.0" +scroll@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/scroll/-/scroll-2.0.2.tgz#94a919e5b55ce71786a385b651e882a8c97fc54f" + dependencies: + rafl "~1.2.1" + scss-tokenizer@^0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" @@ -4815,6 +5086,10 @@ stealthy-require@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" +stifle@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/stifle/-/stifle-1.0.4.tgz#8b3bcdf52419b0a9c79e35adadce50123c1d8e99" + stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" @@ -4945,7 +5220,7 @@ svgo@^0.7.0: sax "~1.2.1" whet.extend "~0.9.9" -symbol-observable@^1.0.2: +symbol-observable@^1.0.2, symbol-observable@^1.0.4, symbol-observable@^1.1.0: version "1.2.0" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" @@ -4988,6 +5263,15 @@ test-exclude@^4.1.1: read-pkg-up "^1.0.1" require-main-filename "^1.0.1" +theming@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/theming/-/theming-1.3.0.tgz#286d5bae80be890d0adc645e5ca0498723725bdc" + dependencies: + brcast "^3.0.1" + is-function "^1.0.1" + is-plain-object "^2.0.1" + prop-types "^15.5.8" + throat@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/throat/-/throat-4.1.0.tgz#89037cbc92c56ab18926e6ba4cbb200e15672a6a" @@ -5182,6 +5466,12 @@ walker@~1.0.5: dependencies: makeerror "1.0.x" +warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/warning/-/warning-3.0.0.tgz#32e5377cb572de4ab04753bdf8821c01ed605b7c" + dependencies: + loose-envify "^1.0.0" + watch@~0.18.0: version "0.18.0" resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986"