diff --git a/web/package.json b/web/package.json index a85602b40..2a8810303 100644 --- a/web/package.json +++ b/web/package.json @@ -15,7 +15,7 @@ "browserfs": "^1.4.3", "dev": "^0.1.3", "isomorphic-git": "^1.1.2", - "mldoc_org": "^0.2.0", + "mldoc_org": "^0.2.3", "purgecss": "^2.1.0", "react": "^16.12.0", "react-dom": "^16.12.0", diff --git a/web/public/index.html b/web/public/index.html index fafd89b16..f07cb4604 100644 --- a/web/public/index.html +++ b/web/public/index.html @@ -4,6 +4,7 @@ + diff --git a/web/public/static/css/style.css b/web/public/static/css/style.css index 350cd4d0d..ea148631f 100644 --- a/web/public/static/css/style.css +++ b/web/public/static/css/style.css @@ -30,8 +30,6 @@ font-size: medium; font-weight: bold; margin-top:0; } -.tag { background-color: #eee; font-family: monospace; - padding: 2px; font-size: 80%; font-weight: normal; } .timestamp { color: #bebebe; margin-left: 6px; } .timestamp-kwd { color: #5f9ea0; margin-left: 6px; } .org-right { margin-left: auto; margin-right: 0px; text-align: right; } @@ -211,15 +209,15 @@ dt { font-weight: bold; } /* scroll-bg */ .scroll-background { - height: 400%; width: 400%; top: -25%; left: -100%; background-size: 800px auto; background-image: url('/img/hero-pattern-lg.png'); + height: 400%; width: 400%; top: -25%; left: -100%; background-size: 800px auto; background-image: url('/static/img/hero-pattern-lg.png'); } .angled-background { - background-image: url('/img/angled-background.svg'); background-size: 100% auto; background-position: -5px -5px; + background-image: url('/static/img/angled-background.svg'); background-size: 100% auto; background-position: -5px -5px; } .scroll-background-2 { - height: 800%; width: 400%; top: -100%; left: -100%; background-size: 400px auto; background-image: url('/img/hero-pattern-lg.png'); + height: 800%; width: 400%; top: -100%; left: -100%; background-size: 400px auto; background-image: url('/static/img/hero-pattern-lg.png'); } @-webkit-keyframes scrollSmall {0%{transform:rotate(-13deg) translateY(0)}to{transform:rotate(-13deg) translateY(-639px)}} @@ -235,23 +233,6 @@ dt { font-weight: bold; } .scroll-bg{-webkit-animation-name:scrollSmall;animation-name:scrollSmall;-webkit-animation-duration:15s;animation-duration:15s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite} @media (min-width:1024px){.scroll-bg{-webkit-animation-name:scrollLarge;animation-name:scrollLarge;-webkit-animation-duration:35s;animation-duration:35s;-webkit-animation-timing-function:linear;animation-timing-function:linear;-webkit-animation-iteration-count:infinite;animation-iteration-count:infinite}} -.text-gray-700 { - color: #374151; -} - -.form-input { - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; - background-color: #fff; - border-color: #d2d6dc; - border-width: 1px; - border-radius: .375rem; - padding: .5rem .75rem; - font-size: 1rem; - line-height: 1.5; -} - h1, h2, h3, h4, h5, h6 { font-weight: bold; } diff --git a/web/src/frontend/components/agenda.cljs b/web/src/frontend/components/agenda.cljs index fb223530f..9252eb880 100644 --- a/web/src/frontend/components/agenda.cljs +++ b/web/src/frontend/components/agenda.cljs @@ -6,11 +6,9 @@ [frontend.state :as state] [clojure.string :as string] [frontend.format.org-mode :as org] - [frontend.components.sidebar :as sidebar])) - -(rum/defc agenda - [] - (sidebar/sidebar [:div "Agenda"])) + [frontend.components.sidebar :as sidebar] + [frontend.db :as db] + [frontend.ui :as ui])) (rum/defc timestamps-cp [timestamps] @@ -30,73 +28,94 @@ html (org/inline-list->html title-json)] (util/raw-html html))) +(rum/defc children-cp + [children] + (let [children-json (js/JSON.stringify (clj->js children)) + html (org/json->html children-json)] + (util/raw-html html))) + (rum/defc marker-cp [marker] - [:span {:class (str "marker-" (string/lower-case marker)) - :style {:margin-left 8}} - (if (contains? #{"DOING" "IN-PROGRESS"} marker) - (str " (" marker ")"))]) + (if marker + [:span {:class (str "marker-" (string/lower-case marker)) + :style {:margin-left 8}} + (if (contains? #{"DOING" "IN-PROGRESS"} marker) + (str " (" marker ")"))])) (rum/defc tags-cp [tags] [:span - (for [tag tags] - [:span.tag {:key tag} + (for [{:keys [tag/name]} tags] + [:span.tag {:key name} [:span - tag]])]) + name]])]) -;; (rum/defc agenda -;; [tasks] -;; [:span "TBD"] -;; ;; [:div#agenda -;; ;; (if (seq tasks) -;; ;; (for [[section-name tasks] tasks] -;; ;; [:div.section {:key (str "section-" section-name)} -;; ;; [:h3 section-name] -;; ;; (mui/list -;; ;; (for [[idx {:keys [marker title priority level tags children timestamps meta]}] (util/indexed (block/sort-tasks tasks))] -;; ;; (mui/list-item -;; ;; {:key (str "task-" section-name "-" idx) -;; ;; :style {:padding-left 8 -;; ;; :padding-right 8}} -;; ;; [:div.column -;; ;; [:div.row {:style {:align-items "center"}} -;; ;; (let [marker (case marker -;; ;; (list "DOING" "IN-PROGRESS" "TODO") -;; ;; (mui/checkbox {:checked false -;; ;; :on-change (fn [_] -;; ;; ;; FIXME: Log timestamp -;; ;; (handler/check marker (:pos meta))) -;; ;; :color "primary" -;; ;; :style {:padding 0}}) +(rum/defq agenda < + {:q (fn [state] (db/sub-agenda))} + [state tasks] + (let [tasks-ids (db/seq-flatten tasks) + tasks (db/pull-many tasks-ids)] + (sidebar/sidebar + [:div#agenda + [:h2.mb-3 "Agenda"] + (if (seq tasks) + [:div.ml-1 + (let [parent-tasks (block/group-by-parent (block/sort-tasks tasks))] + (for [[parent tasks] parent-tasks] + (let [parent (cond + (string? parent) + parent -;; ;; "WAIT" -;; ;; [:span {:style {:font-weight "bold"}} -;; ;; "WAIT"] + (and (map? parent) + (:label parent)) + (title-cp (:label parent)) -;; ;; "DONE" -;; ;; (mui/checkbox {:checked true -;; ;; :on-change (fn [_] -;; ;; ;; FIXME: rollback to the last state if exists. -;; ;; ;; it must not be `TODO` -;; ;; (handler/uncheck (:pos meta))) -;; ;; :color "primary" -;; ;; :style {:padding 0}}) + :else + "uncategorized")] + [:div.mt-10 + [:h4.mb-3.text-gray-500 parent] + (for [{:heading/keys [uuid marker title priority level tags children timestamps meta] :as task} tasks] + [:div.mb-2 + {:key (str "task-" uuid) + :style {:padding-left 8 + :padding-right 8}} + [:div.column + [:div.row {:style {:align-items "center"}} + (case marker + (list "DOING" "IN-PROGRESS" "TODO") + (ui/checkbox {:on-change (fn [_] + ;; FIXME: Log timestamp + ;; (handler/check marker (:pos meta)) + )}) -;; ;; nil)] -;; ;; (if priority -;; ;; (mui/badge {:badge-content (string/lower-case priority) -;; ;; :overlay "circle"} -;; ;; marker) -;; ;; marker)) + "WAIT" + [:span {:style {:font-weight "bold"}} + "WAIT"] -;; ;; [:div.row {:style {:margin-left 8}} -;; ;; (title-cp title) -;; ;; (marker-cp marker) -;; ;; (when (seq tags) -;; ;; (tags-cp tags))]] -;; ;; (when (seq timestamps) -;; ;; (timestamps-cp timestamps)) -;; ;; ])))]) -;; ;; "Empty")] -;; ) + "DONE" + (do + (prn marker) + (ui/checkbox {:checked true + :on-change (fn [_] + ;; FIXME: Log timestamp + ;; (handler/uncheck marker (:pos meta)) + )})) + + nil) + [:div.row.ml-2 + (if priority + [:span.priority.mr-1 + (str "#[" priority "]")]) + (title-cp title) + (marker-cp marker) + (when (seq tags) + (tags-cp tags))]] + (when (seq timestamps) + (timestamps-cp timestamps)) + + ;; FIXME: parse error + ;; (when (seq children) + ;; (children-cp children)) + + ]])])))] + "Empty")]))) diff --git a/web/src/frontend/components/file.cljs b/web/src/frontend/components/file.cljs index 753b6f8f1..b4a945051 100644 --- a/web/src/frontend/components/file.cljs +++ b/web/src/frontend/components/file.cljs @@ -30,14 +30,12 @@ suffix (last (string/split path #"\."))] (sidebar/sidebar (if (and suffix (contains? #{"md" "markdown" "org"} suffix)) - [:div#content.flex.justify-center - [:div.m-6.flex-1 {:style {:position "relative" - :max-width 800}} - [:a {:href (str "/file/" encoded-path "/edit")} - "edit"] - (if content - (util/raw-html (format/to-html content suffix)) - "Loading ...")]] + [:div#content + [:a {:href (str "/file/" encoded-path "/edit")} + "edit"] + (if content + (util/raw-html (format/to-html content suffix)) + "Loading ...")] [:div "File " suffix " is not supported."])))) (defn- count-newlines @@ -54,25 +52,24 @@ commit-message (get state ::commit-message) [_encoded-path path] (get-path state)] (sidebar/sidebar - [:div#content.flex.justify-center - [:div.m-6.flex-1 {:style {:max-width 800}} - [:h3.mb-2 (str "Update " path)] - [:textarea - {:rows (+ 3 (count-newlines @content)) - :style {:min-height 300} - :default-value initial-content - :on-change #(reset! content (.. % -target -value)) - :auto-focus true}] - [:div.mt-1.mb-1.relative.rounded-md.shadow-sm - [:input.form-input.block.w-full.sm:text-sm.sm:leading-5 - {:placeholder "Commit message" - :on-change (fn [e] - (reset! commit-message (util/evalue e)))}]] - (ui/button "Save" (fn [] - (when (and (not (string/blank? @content)) - (not (= initial-content - @content))) - (let [commit-message (if (string/blank? @commit-message) - (str "Update " path) - @commit-message)] - (handler/alter-file path commit-message @content)))))]]))) + [:div#content + [:h3.mb-2 (str "Update " path)] + [:textarea + {:rows (+ 3 (count-newlines @content)) + :style {:min-height 300} + :default-value initial-content + :on-change #(reset! content (.. % -target -value)) + :auto-focus true}] + [:div.mt-1.mb-1.relative.rounded-md.shadow-sm + [:input.form-input.block.w-full.sm:text-sm.sm:leading-5 + {:placeholder "Commit message" + :on-change (fn [e] + (reset! commit-message (util/evalue e)))}]] + (ui/button "Save" (fn [] + (when (and (not (string/blank? @content)) + (not (= initial-content + @content))) + (let [commit-message (if (string/blank? @commit-message) + (str "Update " path) + @commit-message)] + (handler/alter-file path commit-message @content)))))]))) diff --git a/web/src/frontend/components/home.cljs b/web/src/frontend/components/home.cljs index 115e38d60..c019a776d 100644 --- a/web/src/frontend/components/home.cljs +++ b/web/src/frontend/components/home.cljs @@ -23,7 +23,7 @@ [:div [:img.h-6.lg:h-8.xl:h-9 {:alt "Gitnotes", - :src "/img/tailwindui-logo-on-dark.svg"}]] + :src "/static/img/tailwindui-logo-on-dark.svg"}]] [:div [:a.text-sm.font-semibold.text-white.focus:outline-none.focus:underline {:href (str config/api "login/github")} @@ -55,7 +55,7 @@ {:href "https://twitter.com/adamwathan"}] [:div.flex-shrink-0 [:img.h-12.w-12.rounded-full.border-2.border-white - {:alt "", :src "/img/adam.jpg"}]] + {:alt "", :src "/static/img/adam.jpg"}]] [:div.ml-3 [:p.font-semibold.text-white.leading-tight "Adam Wathan"] [:p.text-sm.text-gray-500.leading-tight @@ -64,7 +64,7 @@ {:href "https://twitter.com/steveschoger"}] [:div.flex-shrink-0 [:img.h-12.w-12.rounded-full.border-2.border-white - {:alt "", :src "/img/steve.jpg"}]] + {:alt "", :src "/static/img/steve.jpg"}]] [:div.ml-3 [:p.font-semibold.text-white.leading-tight "Steve Schoger"] [:p.text-sm.text-gray-500.leading-tight diff --git a/web/src/frontend/components/repo.cljs b/web/src/frontend/components/repo.cljs index 17e027ac0..35deca8be 100644 --- a/web/src/frontend/components/repo.cljs +++ b/web/src/frontend/components/repo.cljs @@ -20,21 +20,24 @@ (rum/defcs add-repo < (rum/local "https://github.com/" ::repo-url) [state] - (let [repo-url (get state ::repo-url)] + (let [prefix "https://github.com/" + repo-url (get state ::repo-url)] [:div.p-8.flex.items-center.justify-center.bg-white [:div.w-full.max-w-xs.mx-auto [:div - [:label.block.text-sm.font-medium.leading-5.text-gray-700 - {:for "Repo"} - "Specify your repo: "] - [:div.mt-2.mb-2.relative.rounded-md.shadow-sm - [:input.form-input.block.w-full.sm:text-sm.sm:leading-5 - {:auto-focus true - :placeholder "https://github.com/yourname/repo" - :value @repo-url - :on-change (fn [e] - (reset! repo-url (util/evalue e)))}]]] + [:div + [:h2 "Specify your repo:"] + [:div.mt-2.mb-2.relative.rounded-md.shadow-sm + [:div.absolute.inset-y-0.left-0.pl-3.flex.items-center.pointer-events-none + [:span.text-gray-500.sm:text-sm.sm:leading-5 + prefix]] + [:input#repo.form-input.block.w-full.pl-16.sm:pl-14.sm:text-sm.sm:leading-5 + {:autoFocus true + :placeholder "username/repo" + :on-change (fn [e] + (reset! repo-url (util/evalue e))) + :style {:padding-left "9.1em"}}]]]] (ui/button "Clone" (fn [] - (handler/clone-and-pull @repo-url)))]])) + (handler/clone-and-pull (str prefix @repo-url))))]])) diff --git a/web/src/frontend/components/sidebar.cljs b/web/src/frontend/components/sidebar.cljs index 135161e04..7decc388f 100644 --- a/web/src/frontend/components/sidebar.cljs +++ b/web/src/frontend/components/sidebar.cljs @@ -150,9 +150,9 @@ [:main.flex-1.relative.z-0.overflow-y-auto.py-6.focus:outline-none ;; {:x-init "$el.focus()", :x-data "x-data", :tabindex "0"} {:tabIndex "0"} - main-content - [:div.max-w-7xl.mx-auto.px-4.sm:px-6.md:px-8 - [:div.py-4 - [:div.border-4.border-dashed.border-gray-200.rounded-lg.h-96]]]] + [:div.flex.justify-center + [:div.flex-1.m-6 {:style {:position "relative" + :max-width 800}} + main-content]]] (ui/notification)]])) diff --git a/web/src/frontend/db.cljs b/web/src/frontend/db.cljs index 3ee2d657e..5d3b88bae 100644 --- a/web/src/frontend/db.cljs +++ b/web/src/frontend/db.cljs @@ -71,7 +71,9 @@ ;; FIXME do not notify if tx-data is empty (prn "db changed.") (when-let [db (:db-after tx-report)] - (js/setTimeout #(persist db) 0)))) + (js/setTimeout #(do + (persist db) + (posh/posh! conn)) 0)))) ;; (new TextEncoder().encode('foo')).length (defn db-size @@ -82,9 +84,9 @@ (defn restore! [] (when-let [stored (js/localStorage.getItem datascript-db)] - (let [stored-db (string->db stored)] - (when (= (:schema stored-db) schema) ;; check for code update - (reset-conn! stored-db))))) + (let [stored-db (string->db stored)] + (when (= (:schema stored-db) schema) ;; check for code update + (reset-conn! stored-db))))) ;; TODO: added_at, started_at, schedule, deadline (def qualified-map @@ -161,10 +163,10 @@ (defn get-repo-headings [repo-url] (-> (d/q '[:find ?heading - :in $ ?repo-url - :where - [?repo :repo/url ?repo-url] - [?heading :heading/repo ?repo]] + :in $ ?repo-url + :where + [?repo :repo/url ?repo-url] + [?heading :heading/repo ?repo]] @conn repo-url) seq-flatten)) @@ -189,21 +191,6 @@ [?h :heading/title]] @conn))) -;; marker should be one of: TODO, DOING, IN-PROGRESS -;; time duration -(defn get-agenda - [time] - (let [duration (case time - :today [] - :week [] - :month [])] - (d/q '[:find (pull ?h [*]) - :where - (or [?h :heading/marker "TODO"] - [?h :heading/marker "DOING"] - [?h :heading/marker "IN-PROGRESS"])] - @conn))) - (defn search-headings-by-title [title]) @@ -227,8 +214,10 @@ (posh/pull conn selector eid)) (defn pull-many - [selector eids] - (posh/pull-many conn selector eids)) + ([eids] + (pull-many '[*] eids)) + ([selector eids] + (d/pull-many (d/db conn) selector eids))) (defn q [query & inputs] @@ -369,10 +358,27 @@ [?repo :repo/url ?repo-url] [?file :file/repo ?repo] [?file :file/content ?content] - [?file :file/path ?path] - ] + [?file :file/path ?path]] @conn repo-url)) +;; marker should be one of: TODO, DOING, IN-PROGRESS +;; time duration +(defn sub-agenda + ([] + (sub-agenda :week)) + ([time] + (let [duration (case time + :today [] + :week [] + :month [])] + (q '[:find ?h + :where + (or [?h :heading/marker "TODO"] + [?h :heading/marker "DOING"] + [?h :heading/marker "IN-PROGRESS"] + [?h :heading/marker "DONE"])] + conn)))) + (comment (d/transact! conn [{:db/id -1 :repo/url "https://github.com/tiensonqin/notes" diff --git a/web/src/frontend/format/org/block.cljs b/web/src/frontend/format/org/block.cljs index 2f75837df..e4ea08f75 100644 --- a/web/src/frontend/format/org/block.cljs +++ b/web/src/frontend/format/org/block.cljs @@ -82,18 +82,6 @@ (recur child-level children children-headings result (rest rblocks) timestamps))))) (reverse result))))) -(defn get-sections - [section-headings] - (map first section-headings)) - -(defn get-section-headings - [section-name section-headings] - (-> (util/find-first - (fn [[name headings]] - (= name section-name)) - section-headings) - second)) - ;; marker: DOING | IN-PROGRESS > TODO > WAITING | WAIT > DONE > CANCELED | CANCELLED ;; priority: A > B > C (defn sort-tasks @@ -103,11 +91,15 @@ priorities ["A" "B" "C" "D" "E" "F" "G"] priorities (zipmap priorities (reverse (range 1 (count priorities))))] (sort (fn [t1 t2] - (let [m1 (get markers (:marker t1) 0) - m2 (get markers (:marker t2) 0) - p1 (get priorities (:priority t1) 0) - p2 (get priorities (:priority t2) 0)] + (let [m1 (get markers (:heading/marker t1) 0) + m2 (get markers (:heading/marker t2) 0) + p1 (get priorities (:heading/priority t1) 0) + p2 (get priorities (:heading/priority t2) 0)] (if (= m1 m2) (> p1 p2) (> m1 m2)))) headings))) + +(defn group-by-parent + [headings] + (group-by :heading/parent-title headings)) diff --git a/web/src/frontend/format/org_mode.cljs b/web/src/frontend/format/org_mode.cljs index 8eebfa4e7..f7a60f86b 100644 --- a/web/src/frontend/format/org_mode.cljs +++ b/web/src/frontend/format/org_mode.cljs @@ -2,19 +2,26 @@ (:require ["mldoc_org" :as org] [frontend.format.protocol :as protocol])) +(def config + (js/JSON.stringify + #js {:toc false + :heading_number false})) + +(def Org (.-MldocOrg org)) + (defrecord OrgMode [content] protocol/Format (toHtml [this] - (.parseHtml (.-MldocOrg org) - content - (js/JSON.stringify - #js {:toc false - :heading_number false})))) + (.parseHtml Org content config))) (defn parse-json [content] - (.parseJson (.-MldocOrg org) content)) + (.parseJson Org content)) (defn inline-list->html [json] - (.inlineListToHtmlStr (.-MldocOrg org) json)) + (.inlineListToHtmlStr Org json)) + +(defn json->html + [json] + (.jsonToHtmlStr Org json config)) diff --git a/web/src/frontend/state.cljs b/web/src/frontend/state.cljs index ac15cdb5d..8f9def58a 100644 --- a/web/src/frontend/state.cljs +++ b/web/src/frontend/state.cljs @@ -3,7 +3,6 @@ ;; TODO: replace this with datascript (def state (atom {:route-match nil - :tasks {} :notification/show? false :notification/text nil - })) + :tasks-transactions nil})) diff --git a/web/src/frontend/ui.cljs b/web/src/frontend/ui.cljs index 57e0de3d3..b74dcfa06 100644 --- a/web/src/frontend/ui.cljs +++ b/web/src/frontend/ui.cljs @@ -65,7 +65,7 @@ [:div.flex.items-start [:div.flex-shrink-0 [:svg.h-6.w-6.text-green-400 - {:stroke "currentColor", :viewbox "0 0 24 24", :fill "none"} + {:stroke "currentColor", :viewBox "0 0 24 24", :fill "none"} [:path {:d "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z", :stroke-width "2", @@ -79,7 +79,7 @@ {:on-click (fn [] (swap! state/state assoc :notification/show? false))} [:svg.h-5.w-5 - {:fill "currentColor", :viewbox "0 0 20 20"} + {:fill "currentColor", :viewBox "0 0 20 20"} [:path {:clip-rule "evenodd", :d @@ -93,3 +93,14 @@ {:in show? :timeout 100} (fn [state] (notification-content state text))))) + +(rum/defc checkbox + [option] + [:input.form-checkbox.h-4.w-4.text-indigo-600.transition.duration-150.ease-in-out + (merge {:type "checkbox"} option)]) + +(rum/defc badge + [text option] + [:span.inline-flex.items-center.px-2.5.py-0.5.rounded-full.text-xs.font-medium.leading-4.bg-purple-100.text-purple-800 + option + text]) diff --git a/web/yarn.lock b/web/yarn.lock index d2db2e1e0..4dd01a4ca 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -2,117 +2,18 @@ # yarn lockfile v1 -"@babel/runtime@^7.3.1", "@babel/runtime@^7.4.4", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.6.3": +"@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3": version "7.7.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f" integrity sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw== dependencies: regenerator-runtime "^0.13.2" -"@emotion/hash@^0.7.1": - version "0.7.3" - resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.7.3.tgz#a166882c81c0c6040975dd30df24fae8549bd96f" - integrity sha512-14ZVlsB9akwvydAdaEnVnvqu6J2P6ySv39hYyl/aoB6w/V+bXX0tay8cF6paqbgZsN2n5Xh15uF4pE+GvE+itw== - -"@material-ui/core@^4.7.2": - version "4.7.2" - resolved "https://registry.yarnpkg.com/@material-ui/core/-/core-4.7.2.tgz#b4396eded7c85214c43c17a18bad66e94742f92c" - integrity sha512-ZbeO6xshTEHcMU2jMNjBY26u9p5ILQFj0y7HvOPZ9WT6POaN6qNKYX2PdXnnRDE1MpN8W2K1cxM4KKkiYWNkCQ== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/styles" "^4.7.1" - "@material-ui/system" "^4.7.1" - "@material-ui/types" "^4.1.1" - "@material-ui/utils" "^4.7.1" - "@types/react-transition-group" "^4.2.0" - clsx "^1.0.2" - convert-css-length "^2.0.1" - hoist-non-react-statics "^3.2.1" - normalize-scroll-left "^0.2.0" - popper.js "^1.14.1" - prop-types "^15.7.2" - react-is "^16.8.0" - react-transition-group "^4.3.0" - -"@material-ui/icons@^4.5.1": - version "4.5.1" - resolved "https://registry.yarnpkg.com/@material-ui/icons/-/icons-4.5.1.tgz#6963bad139e938702ece85ca43067688018f04f8" - integrity sha512-YZ/BgJbXX4a0gOuKWb30mBaHaoXRqPanlePam83JQPZ/y4kl+3aW0Wv9tlR70hB5EGAkEJGW5m4ktJwMgxQAeA== - dependencies: - "@babel/runtime" "^7.4.4" - -"@material-ui/styles@^4.7.1": - version "4.7.1" - resolved "https://registry.yarnpkg.com/@material-ui/styles/-/styles-4.7.1.tgz#48fa70f06441c35e301a9c4b6c825526a97b7a29" - integrity sha512-BBfxVThaPrglqHmKtSdrZJxnbFGJqKdZ5ZvDarj3HsmkteGCXsP1ohrDi5TWoa5JEJFo9S6q6NywqsENZn9rZA== - dependencies: - "@babel/runtime" "^7.4.4" - "@emotion/hash" "^0.7.1" - "@material-ui/types" "^4.1.1" - "@material-ui/utils" "^4.7.1" - clsx "^1.0.2" - csstype "^2.5.2" - hoist-non-react-statics "^3.2.1" - jss "^10.0.0" - jss-plugin-camel-case "^10.0.0" - jss-plugin-default-unit "^10.0.0" - jss-plugin-global "^10.0.0" - jss-plugin-nested "^10.0.0" - jss-plugin-props-sort "^10.0.0" - jss-plugin-rule-value-function "^10.0.0" - jss-plugin-vendor-prefixer "^10.0.0" - prop-types "^15.7.2" - -"@material-ui/system@^4.7.1": - version "4.7.1" - resolved "https://registry.yarnpkg.com/@material-ui/system/-/system-4.7.1.tgz#d928dacc0eeae6bea569ff3ee079f409efb3517d" - integrity sha512-zH02p+FOimXLSKOW/OT2laYkl9bB3dD1AvnZqsHYoseUaq0aVrpbl2BGjQi+vJ5lg8w73uYlt9zOWzb3+1UdMQ== - dependencies: - "@babel/runtime" "^7.4.4" - "@material-ui/utils" "^4.7.1" - prop-types "^15.7.2" - -"@material-ui/types@^4.1.1": - version "4.1.1" - resolved "https://registry.yarnpkg.com/@material-ui/types/-/types-4.1.1.tgz#b65e002d926089970a3271213a3ad7a21b17f02b" - integrity sha512-AN+GZNXytX9yxGi0JOfxHrRTbhFybjUJ05rnsBVjcB+16e466Z0Xe5IxawuOayVZgTBNDxmPKo5j4V6OnMtaSQ== - dependencies: - "@types/react" "*" - -"@material-ui/utils@^4.7.1": - version "4.7.1" - resolved "https://registry.yarnpkg.com/@material-ui/utils/-/utils-4.7.1.tgz#dc16c7f0d2cd02fbcdd5cfe601fd6863ae3cc652" - integrity sha512-+ux0SlLdlehvzCk2zdQ3KiS3/ylWvuo/JwAGhvb8dFVvwR21K28z0PU9OQW2PGogrMEdvX3miEI5tGxTwwWiwQ== - dependencies: - "@babel/runtime" "^7.4.4" - prop-types "^15.7.2" - react-is "^16.8.0" - "@types/color-name@^1.1.1": version "1.1.1" resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== -"@types/prop-types@*": - version "15.7.3" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" - integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== - -"@types/react-transition-group@^4.2.0": - version "4.2.3" - resolved "https://registry.yarnpkg.com/@types/react-transition-group/-/react-transition-group-4.2.3.tgz#4924133f7268694058e415bf7aea2d4c21131470" - integrity sha512-Hk8jiuT7iLOHrcjKP/ZVSyCNXK73wJAUz60xm0mVhiRujrdiI++j4duLiL282VGxwAgxetHQFfqA29LgEeSkFA== - dependencies: - "@types/react" "*" - -"@types/react@*": - version "16.9.16" - resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.16.tgz#4f12515707148b1f53a8eaa4341dae5dfefb066d" - integrity sha512-dQ3wlehuBbYlfvRXfF5G+5TbZF3xqgkikK7DWAsQXe2KnzV+kjD4W2ea+ThCrKASZn9h98bjjPzoTYzfRqyBkw== - dependencies: - "@types/prop-types" "*" - csstype "^2.2.0" - acorn-node@^1.6.1: version "1.8.2" resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" @@ -420,11 +321,6 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" -clsx@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clsx/-/clsx-1.0.4.tgz#0c0171f6d5cb2fe83848463c15fcc26b4df8c2ec" - integrity sha512-1mQ557MIZTrL/140j+JVdRM6e31/OA4vTYxXgqIIZlndyfjHpyawKZia1Im05Vp9BWmImkcNrNtFYQMyFcgJDg== - code-point-at@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" @@ -474,11 +370,6 @@ constants-browserify@^1.0.0: resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= -convert-css-length@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/convert-css-length/-/convert-css-length-2.0.1.tgz#90a76bde5bfd24d72881a5b45d02249b2c1d257c" - integrity sha512-iGpbcvhLPRKUbBc0Quxx7w/bV14AC3ItuBEGMahA5WTYqB8lq9jH0kTXFheCBASsYnqeMFZhiTruNxr1N59Axg== - core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -556,20 +447,12 @@ css-unit-converter@^1.1.1: resolved "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.1.tgz#d9b9281adcfd8ced935bdbaba83786897f64e996" integrity sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY= -css-vendor@^2.0.6: - version "2.0.7" - resolved "https://registry.yarnpkg.com/css-vendor/-/css-vendor-2.0.7.tgz#4e6d53d953c187981576d6a542acc9fb57174bda" - integrity sha512-VS9Rjt79+p7M0WkPqcAza4Yq1ZHrsHrwf7hPL/bjQB+c1lwmAI+1FXxYTYt818D/50fFVflw0XKleiBN5RITkg== - dependencies: - "@babel/runtime" "^7.6.2" - is-in-browser "^1.0.2" - cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== -csstype@^2.2.0, csstype@^2.5.2, csstype@^2.6.5, csstype@^2.6.7: +csstype@^2.6.7: version "2.6.7" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.7.tgz#20b0024c20b6718f4eda3853a1f5a1cce7f5e4a5" integrity sha512-9Mcn9sFbGBAdmimWb2gLVDtFJzeKtDGIr76TUqmjZrw9LFXBMSU70lcs+C0/7fyCd6iBDqmksUcCOUIkisPHsQ== @@ -811,23 +694,11 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -hoist-non-react-statics@^3.2.1: - version "3.3.1" - resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-3.3.1.tgz#101685d3aff3b23ea213163f6e8e12f4f111e19f" - integrity sha512-wbg3bpgA/ZqWrZuMOeJi8+SKMhr7X9TesL/rXMjTzh0p0JUBo3II8DHboYbuIXWRlttrUFxwcu/5kygrCw8fJw== - dependencies: - react-is "^16.7.0" - https-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= -hyphenate-style-name@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.3.tgz#097bb7fa0b8f1a9cf0bd5c734cf95899981a9b48" - integrity sha512-EcuixamT82oplpoJ2XU4pDtKGWQ7b00CD9f1ug9IaQ3p1bkHMiKCZ9ut9QDI6qsa6cpUuB+A/I+zLtdNK4n2DQ== - ieee754@^1.1.4: version "1.1.13" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" @@ -891,11 +762,6 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= -is-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" - integrity sha1-Vv9NtoOgeMYILrldrX3GLh0E+DU= - is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -941,75 +807,6 @@ jsonfile@^4.0.0: optionalDependencies: graceful-fs "^4.1.6" -jss-plugin-camel-case@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.0.0.tgz#d601bae2e8e2041cc526add289dcd7062db0a248" - integrity sha512-yALDL00+pPR4FJh+k07A8FeDvfoPPuXU48HLy63enAubcVd3DnS+2rgqPXglHDGixIDVkCSXecl/l5GAMjzIbA== - dependencies: - "@babel/runtime" "^7.3.1" - hyphenate-style-name "^1.0.3" - jss "10.0.0" - -jss-plugin-default-unit@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.0.0.tgz#601caf5f576fc0c66986fbe8a9aa37307a3a3ea3" - integrity sha512-sURozIOdCtGg9ap18erQ+ijndAfEGtTaetxfU3H4qwC18Bi+fdvjlY/ahKbuu0ASs7R/+WKCP7UaRZOjUDMcdQ== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.0.0" - -jss-plugin-global@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.0.0.tgz#0fed1b6461e0d57d6e394f877529009bc1cb3cb6" - integrity sha512-80ofWKSQUo62bxLtRoTNe0kFPtHgUbAJeOeR36WEGgWIBEsXLyXOnD5KNnjPqG4heuEkz9eSLccjYST50JnI7Q== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.0.0" - -jss-plugin-nested@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.0.0.tgz#d37ecc013c3b0d0e4acc2b48f6b62da6ae53948b" - integrity sha512-waxxwl/po1hN3azTyixKnr8ReEqUv5WK7WsO+5AWB0bFndML5Yqnt8ARZ90HEg8/P6WlqE/AB2413TkCRZE8bA== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.0.0" - tiny-warning "^1.0.2" - -jss-plugin-props-sort@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-props-sort/-/jss-plugin-props-sort-10.0.0.tgz#38a13407384c2a4a7c026659488350669b953b18" - integrity sha512-41mf22CImjwNdtOG3r+cdC8+RhwNm616sjHx5YlqTwtSJLyLFinbQC/a4PIFk8xqf1qpFH1kEAIw+yx9HaqZ3g== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.0.0" - -jss-plugin-rule-value-function@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-rule-value-function/-/jss-plugin-rule-value-function-10.0.0.tgz#3ec1b781b7c86080136dbef6c36e91f20244b72e" - integrity sha512-Jw+BZ8JIw1f12V0SERqGlBT1JEPWax3vuZpMym54NAXpPb7R1LYHiCTIlaJUyqvIfEy3kiHMtgI+r2whGgRIxQ== - dependencies: - "@babel/runtime" "^7.3.1" - jss "10.0.0" - -jss-plugin-vendor-prefixer@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss-plugin-vendor-prefixer/-/jss-plugin-vendor-prefixer-10.0.0.tgz#400280535b0f483a9c78105afe4eee61b70018eb" - integrity sha512-qslqvL0MUbWuzXJWdUxpj6mdNUX8jr4FFTo3aZnAT65nmzWL7g8oTr9ZxmTXXgdp7ANhS1QWE7036/Q2isFBpw== - dependencies: - "@babel/runtime" "^7.3.1" - css-vendor "^2.0.6" - jss "10.0.0" - -jss@10.0.0, jss@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.0.0.tgz#998d5026c02accae15708de83bd6ba57bac977d2" - integrity sha512-TPpDFsiBjuERiL+dFDq8QCdiF9oDasPcNqCKLGCo/qED3fNYOQ8PX2lZhknyTiAt3tZrfOFbb0lbQ9lTjPZxsQ== - dependencies: - "@babel/runtime" "^7.3.1" - csstype "^2.6.5" - is-in-browser "^1.1.3" - tiny-warning "^1.0.2" - lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -1126,10 +923,10 @@ mkdirp@^0.5.1: dependencies: minimist "0.0.8" -mldoc_org@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/mldoc_org/-/mldoc_org-0.2.0.tgz#b9643333939dbddf6b38e76ec130c4b2cc72d6ab" - integrity sha512-s5QuzNWRX8XuAV6ymrBB43qwqvxjsCfUZX6/3AuCJ/dka3+jPxcQVjjOfueTFdzbQdPOBMxAhutV+AX9oQnv1A== +mldoc_org@^0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/mldoc_org/-/mldoc_org-0.2.3.tgz#585a866925a0952bb9175cd67604b137c3f6969b" + integrity sha512-v+4Un+DxuLm9NurW7KJWbgTIjeG4Q6AWmOQ4raWa2WozlefDiA9/xcs+RtgQiQ45Jf7Exj+6sC9Eyf9s0GrKQg== dependencies: yargs "^12.0.2" @@ -1191,11 +988,6 @@ normalize-range@^0.1.2: resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= -normalize-scroll-left@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/normalize-scroll-left/-/normalize-scroll-left-0.2.0.tgz#9445d74275f303cc661e113329aefa492f58114c" - integrity sha512-t5oCENZJl8TGusJKoCJm7+asaSsPuNmK6+iEjrZ5TyBj2f02brCRsd4c83hwtu+e5d4LCSBZ0uoDlMjBo+A8yA== - normalize.css@^8.0.1: version "8.0.1" resolved "https://registry.yarnpkg.com/normalize.css/-/normalize.css-8.0.1.tgz#9b98a208738b9cc2634caacbc42d131c97487bf3" @@ -1336,11 +1128,6 @@ pify@^4.0.1: resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -popper.js@^1.14.1: - version "1.16.0" - resolved "https://registry.yarnpkg.com/popper.js/-/popper.js-1.16.0.tgz#2e1816bcbbaa518ea6c2e15a466f4cb9c6e2fbb3" - integrity sha512-+G+EkOPoE5S/zChTpmBSSDYmhXJ5PsW8eMhH8cP/CQHMFPBG/kC9Y5IIw6qNYgdJ+/COf0ddY2li28iHaZRSjw== - postcss-functions@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/postcss-functions/-/postcss-functions-3.0.0.tgz#0e94d01444700a481de20de4d55fb2640564250e" @@ -1424,7 +1211,7 @@ process@^0.11.10: resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= -prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.6.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -1508,7 +1295,7 @@ react-dom@^16.12.0: prop-types "^15.6.2" scheduler "^0.18.0" -react-is@^16.7.0, react-is@^16.8.0, react-is@^16.8.1: +react-is@^16.8.1: version "16.12.0" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.12.0.tgz#2cc0fe0fba742d97fd527c42a13bec4eeb06241c" integrity sha512-rPCkf/mWBtKc97aLL9/txD8DZdemK0vkA3JMLShjlJB3Pj3s+lpf1KaBzMfQrAmhMQB0n1cU/SUGgKKBCe837Q== @@ -1856,11 +1643,6 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" -tiny-warning@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - to-arraybuffer@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43"