From b7509048b9e1ee6a4504c29a28e173658d64fe83 Mon Sep 17 00:00:00 2001 From: Matthew Jaoudi Date: Sun, 12 Feb 2017 05:12:55 -0800 Subject: [PATCH] migrate to semantic-ui-react; - abandoning previous implementation of soda-ash that wrapped semantic-ui in favor of semantic-ui-react; --- .travis.yml | 5 - CHANGES.md | 41 +- README.md | 116 +-- project.clj | 66 +- resources/public/images/avatar/large/ade.jpg | Bin 33523 -> 0 bytes resources/public/images/avatar/large/nan.jpg | Bin 23839 -> 0 bytes .../public/images/avatar/small/christian.jpg | Bin 6813 -> 0 bytes .../public/images/avatar/small/elliot.jpg | Bin 6176 -> 0 bytes resources/public/images/avatar/small/joe.jpg | Bin 6740 -> 0 bytes resources/public/images/avatar/small/matt.jpg | Bin 6378 -> 0 bytes .../public/images/avatar/small/stevie.jpg | Bin 6263 -> 0 bytes resources/public/images/avatar/small/tom.jpg | Bin 6193 -> 0 bytes .../public/images/avatar2/small/elyse.png | Bin 5402 -> 0 bytes resources/public/images/avatar2/small/eve.png | Bin 10545 -> 0 bytes .../public/images/avatar2/small/lindsay.png | Bin 5722 -> 0 bytes .../public/images/avatar2/small/molly.png | Bin 7109 -> 0 bytes .../public/images/avatar2/small/rachel.png | Bin 8244 -> 0 bytes resources/public/images/icons/school.png | Bin 2561 -> 0 bytes resources/public/images/wireframe/image.png | Bin 1229 -> 0 bytes .../public/images/wireframe/square-image.png | Bin 833 -> 0 bytes .../public/images/wireframe/white-image.png | Bin 2846 -> 0 bytes resources/public/index.html | 15 - src/devcards/soda_ash/a_faq_card.cljs | 212 ---- src/devcards/soda_ash/an_overview_card.cljs | 189 ---- src/devcards/soda_ash/core_card.cljs | 22 - .../soda_ash/elements/button_card.cljs | 803 --------------- .../soda_ash/elements/card_helpers.cljs | 12 - .../soda_ash/elements/container_card.cljs | 133 --- .../soda_ash/elements/divider_card.cljs | 228 ----- src/devcards/soda_ash/elements/flag_card.cljs | 43 - .../soda_ash/elements/header_card.cljs | 457 --------- src/devcards/soda_ash/elements/icon_card.cljs | 427 -------- .../soda_ash/elements/image_card.cljs | 413 -------- .../soda_ash/elements/input_card.cljs | 416 -------- .../soda_ash/elements/label_card.cljs | 737 -------------- src/devcards/soda_ash/elements/list_card.cljs | 911 ------------------ .../soda_ash/elements/loader_card.cljs | 281 ------ src/devcards/soda_ash/elements/rail_card.cljs | 208 ---- .../soda_ash/elements/reveal_card.cljs | 318 ------ .../soda_ash/elements/segment_card.cljs | 711 -------------- src/devcards/soda_ash/elements/step_card.cljs | 597 ------------ src/main/cljs/soda_ash/element.cljs | 60 -- src/main/cljs/soda_ash/elements/button.cljs | 82 -- src/main/cljs/soda_ash/elements/buttons.cljs | 23 - .../cljs/soda_ash/elements/container.cljs | 38 - src/main/cljs/soda_ash/elements/divider.cljs | 31 - src/main/cljs/soda_ash/elements/flag.cljs | 24 - src/main/cljs/soda_ash/elements/header.cljs | 66 -- src/main/cljs/soda_ash/elements/helpers.cljs | 108 --- src/main/cljs/soda_ash/elements/icon.cljs | 40 - src/main/cljs/soda_ash/elements/icons.cljs | 21 - src/main/cljs/soda_ash/elements/image.cljs | 38 - src/main/cljs/soda_ash/elements/images.cljs | 21 - src/main/cljs/soda_ash/elements/input.cljs | 37 - src/main/cljs/soda_ash/elements/label.cljs | 78 -- src/main/cljs/soda_ash/elements/labels.cljs | 22 - src/main/cljs/soda_ash/elements/loader.cljs | 43 - src/main/cljs/soda_ash/elements/rail.cljs | 42 - src/main/cljs/soda_ash/elements/reveal.cljs | 42 - src/main/cljs/soda_ash/elements/s_list.cljs | 51 - src/main/cljs/soda_ash/elements/segment.cljs | 52 - src/main/cljs/soda_ash/elements/segments.cljs | 22 - src/main/cljs/soda_ash/elements/step.cljs | 32 - src/main/cljs/soda_ash/elements/steps.cljs | 44 - src/main/cljs/soda_ash/elements/template.cljs | 66 -- src/soda_ash/core.cljs | 9 + src/soda_ash/macros.clj | 161 ++++ .../cljs/soda_ash/elements/button_test.cljs | 106 -- .../soda_ash/elements/container_test.cljs | 61 -- .../cljs/soda_ash/elements/divider_test.cljs | 67 -- .../cljs/soda_ash/elements/flag_test.cljs | 57 -- .../cljs/soda_ash/elements/header_test.cljs | 71 -- .../cljs/soda_ash/elements/helpers_test.cljs | 139 --- .../cljs/soda_ash/elements/icon_test.cljs | 95 -- .../cljs/soda_ash/elements/image_test.cljs | 91 -- .../cljs/soda_ash/elements/input_test.cljs | 72 -- .../cljs/soda_ash/elements/label_test.cljs | 79 -- .../cljs/soda_ash/elements/list_card.cljs | 77 -- .../cljs/soda_ash/elements/loader_test.cljs | 65 -- .../cljs/soda_ash/elements/rail_test.cljs | 61 -- .../cljs/soda_ash/elements/reveal_test.cljs | 61 -- .../cljs/soda_ash/elements/segment_test.cljs | 95 -- .../cljs/soda_ash/elements/step_test.cljs | 97 -- .../cljs/soda_ash/elements/template_test.cljs | 43 - .../cljs/soda_ash/elements/test_helpers.cljs | 28 - src/test/cljs/soda_ash/runner.cljs | 40 - 86 files changed, 235 insertions(+), 9784 deletions(-) delete mode 100644 .travis.yml delete mode 100644 resources/public/images/avatar/large/ade.jpg delete mode 100644 resources/public/images/avatar/large/nan.jpg delete mode 100644 resources/public/images/avatar/small/christian.jpg delete mode 100644 resources/public/images/avatar/small/elliot.jpg delete mode 100644 resources/public/images/avatar/small/joe.jpg delete mode 100644 resources/public/images/avatar/small/matt.jpg delete mode 100644 resources/public/images/avatar/small/stevie.jpg delete mode 100644 resources/public/images/avatar/small/tom.jpg delete mode 100644 resources/public/images/avatar2/small/elyse.png delete mode 100644 resources/public/images/avatar2/small/eve.png delete mode 100644 resources/public/images/avatar2/small/lindsay.png delete mode 100644 resources/public/images/avatar2/small/molly.png delete mode 100644 resources/public/images/avatar2/small/rachel.png delete mode 100644 resources/public/images/icons/school.png delete mode 100644 resources/public/images/wireframe/image.png delete mode 100644 resources/public/images/wireframe/square-image.png delete mode 100644 resources/public/images/wireframe/white-image.png delete mode 100644 resources/public/index.html delete mode 100644 src/devcards/soda_ash/a_faq_card.cljs delete mode 100644 src/devcards/soda_ash/an_overview_card.cljs delete mode 100644 src/devcards/soda_ash/core_card.cljs delete mode 100644 src/devcards/soda_ash/elements/button_card.cljs delete mode 100644 src/devcards/soda_ash/elements/card_helpers.cljs delete mode 100644 src/devcards/soda_ash/elements/container_card.cljs delete mode 100644 src/devcards/soda_ash/elements/divider_card.cljs delete mode 100644 src/devcards/soda_ash/elements/flag_card.cljs delete mode 100644 src/devcards/soda_ash/elements/header_card.cljs delete mode 100644 src/devcards/soda_ash/elements/icon_card.cljs delete mode 100644 src/devcards/soda_ash/elements/image_card.cljs delete mode 100644 src/devcards/soda_ash/elements/input_card.cljs delete mode 100644 src/devcards/soda_ash/elements/label_card.cljs delete mode 100644 src/devcards/soda_ash/elements/list_card.cljs delete mode 100644 src/devcards/soda_ash/elements/loader_card.cljs delete mode 100644 src/devcards/soda_ash/elements/rail_card.cljs delete mode 100644 src/devcards/soda_ash/elements/reveal_card.cljs delete mode 100644 src/devcards/soda_ash/elements/segment_card.cljs delete mode 100644 src/devcards/soda_ash/elements/step_card.cljs delete mode 100644 src/main/cljs/soda_ash/element.cljs delete mode 100644 src/main/cljs/soda_ash/elements/button.cljs delete mode 100644 src/main/cljs/soda_ash/elements/buttons.cljs delete mode 100644 src/main/cljs/soda_ash/elements/container.cljs delete mode 100644 src/main/cljs/soda_ash/elements/divider.cljs delete mode 100644 src/main/cljs/soda_ash/elements/flag.cljs delete mode 100644 src/main/cljs/soda_ash/elements/header.cljs delete mode 100644 src/main/cljs/soda_ash/elements/helpers.cljs delete mode 100644 src/main/cljs/soda_ash/elements/icon.cljs delete mode 100644 src/main/cljs/soda_ash/elements/icons.cljs delete mode 100644 src/main/cljs/soda_ash/elements/image.cljs delete mode 100644 src/main/cljs/soda_ash/elements/images.cljs delete mode 100644 src/main/cljs/soda_ash/elements/input.cljs delete mode 100644 src/main/cljs/soda_ash/elements/label.cljs delete mode 100644 src/main/cljs/soda_ash/elements/labels.cljs delete mode 100644 src/main/cljs/soda_ash/elements/loader.cljs delete mode 100644 src/main/cljs/soda_ash/elements/rail.cljs delete mode 100644 src/main/cljs/soda_ash/elements/reveal.cljs delete mode 100644 src/main/cljs/soda_ash/elements/s_list.cljs delete mode 100644 src/main/cljs/soda_ash/elements/segment.cljs delete mode 100644 src/main/cljs/soda_ash/elements/segments.cljs delete mode 100644 src/main/cljs/soda_ash/elements/step.cljs delete mode 100644 src/main/cljs/soda_ash/elements/steps.cljs delete mode 100644 src/main/cljs/soda_ash/elements/template.cljs create mode 100644 src/soda_ash/core.cljs create mode 100644 src/soda_ash/macros.clj delete mode 100644 src/test/cljs/soda_ash/elements/button_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/container_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/divider_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/flag_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/header_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/helpers_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/icon_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/image_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/input_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/label_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/list_card.cljs delete mode 100644 src/test/cljs/soda_ash/elements/loader_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/rail_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/reveal_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/segment_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/step_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/template_test.cljs delete mode 100644 src/test/cljs/soda_ash/elements/test_helpers.cljs delete mode 100644 src/test/cljs/soda_ash/runner.cljs diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index d4f80c2..0000000 --- a/.travis.yml +++ /dev/null @@ -1,5 +0,0 @@ -sudo: true -language: clojure -lein: lein2 -before_install: yes y | sudo lein2 upgrade -script: lein2 with-profile test doo phantom unit once diff --git a/CHANGES.md b/CHANGES.md index 85a0b7f..a1f1e13 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,40 +1,9 @@ -## 0.1.0-beta +## 0.2.0-SNAPSHOT -* adds the following elements - * list - * rail - * step -* remove :group? and replace with plural version of the element.1 In other words, adds the following: - * buttons - * icons - * images - * labels - * segments +* targets semantic-ui-react version "0.64.0-0" -1 Breaking change. Example for how to update affected elements: +--- -``` -;; 0.1.0-alpha2 -[s/button {:soda {:tag :div - :group? true - :color :red}} - ... ] +*DONT USE ANYTHING BEFORE VERSION 0.2.0.* -;; 0.1.0-beta -[s/buttons {:soda {:color :red}} ;; <-- note the extra "s" - ... ] -``` - - -## 0.1.0-alpha2 [source](https://github.com/gadfly361/soda-ash/tree/4f266c3d3a9dbca240238a3c6f3d2f62cf80586a) - -* initial release -* targets Semantic UI version 2.1.8 and Reagent 0.5.1 - -## 0.1.0-alpha1 - -* broken release (forgot to set :source-paths) - -## 0.1.0-alpha - -* broken release (forgot to set :source-paths) +The previous versions were incomplete and wrapped semantic-ui instead of semantic-ui-react. diff --git a/README.md b/README.md index 0dc24eb..3a0a4e3 100644 --- a/README.md +++ b/README.md @@ -1,87 +1,77 @@ # soda-ash -[![Build Status](https://travis-ci.org/gadfly361/soda-ash.svg?branch=master)](https://travis-ci.org/gadfly361/soda-ash) - -**WARNING** I am currently working on a complete re-write of soda-ash. I strongly urge you to *not* depend on this library yet. Also, the current release only covers Semantic UI's Elements. - -Soda-ash is an interface between clojurescript's [reagent](https://github.com/reagent-project/reagent) and [Semantic UI](http://semantic-ui.com/). - -Semantic UI is awesome ... however, at its core, you are concatenating -ordered classes into a string. Soda-ash bubbles Semantic UI's classes -out of this regex-hell and softens them into clojurescript's familiar, -powerful, and unordered hash-map. Furthermore, soda-ash allows you to -place this hash-map inside a reagent atom at your desired path. This -means you can swap! Semantic UI classes and have your component -reactively update. - -## Docs - -The -**[documentation](http://soda-ash.s3-website-us-east-1.amazonaws.com/#!/soda_ash.an_overview_card)** -has *lots* of devcard examples. - -If you have questions, I can usually be found hanging out in the -[clojurians](http://clojurians.net/) #reagent slack channel (my handle -is [@gadfly361](https://twitter.com/gadfly361)). +Soda-ash is an interface between +clojurescript's [reagent](https://github.com/reagent-project/reagent) +and [semantic-ui-react](http://react.semantic-ui.com/introduction). ## Usage Put the following in the `:dependencies` vector of your *project.clj* -``` -[soda-ash "0.1.0-beta" - :exclusions [cljsjs/react-with-addons]] +```clojure +[soda-ash "0.2.0-SNAPSHOT"] ``` Then require soda-ash in your namespace. -``` +```clojure (ns foo.bar - (:require [soda-ash.element :as s])) + (:require [soda-ash.core :as sa])) ``` -Finally, add Semantic UI to your index.html file: - +### Example + +Let's take a look at a modal. In javascript, you'd write something like this: + +```jsx +import React from 'react' +import { Button, Header, Image, Modal } from 'semantic-ui-react' + +const ModalModalExample = () => ( + Show Modal}> + Select a Photo + + + +
Default Profile Image
+

We've found the following gravatar image associated with your e-mail address.

+

Is it okay to use this photo?

+
+
+
+) + +export default ModalModalExample ``` - -``` - -## Roadmap - -Next up, Collections. - -## Development -### Devcards +However, in clojurescript with soda-ash, you'd write something like this: +```clojure +(ns foo.bar + (:require + [reagent.core :as reagent] + [soda-ash.core :as sa])) + +(defn modal-example [] + [sa/Modal {:trigger (reagent/as-element [sa/Button "Show Modal"])} + [sa/ModalHeader "Select a Photo"] + [sa/ModalContent {:image true} + [sa/Image {:wrapped true + :size "medium" + :src "http://semantic-ui.com/images/avatar2/large/rachel.png"}] + [sa/ModalDescription + [sa/Header "Default Profile Image"] + [:p "We've found the following gravatar image associated with your e-mail address."] + [:p "Is it okay to use this photo?"] + ]]])) ``` -lein clean -lein figwheel devcards -``` - -Figwheel will automatically push cljs changes to the browser. - -Wait a bit, then browse to [http://localhost:3449](http://localhost:3449). - ---- - -To build a minified version: - -``` -lein clean -lein cljsbuild once hostedcards -``` - -Then open *resources/public/index.html* -### Tests -``` -lein clean -lein with-profile test doo phantom unit once -``` +## Questions -The above command assumes that you have [phantomjs](https://www.npmjs.com/package/phantomjs) installed. +If you have questions, I can usually be found hanging out in the +[clojurians](http://clojurians.net/) #reagent slack channel (my handle +is [@gadfly361](https://twitter.com/gadfly361)). # License diff --git a/project.clj b/project.clj index 0e8eae3..d41d8b2 100644 --- a/project.clj +++ b/project.clj @@ -1,67 +1,15 @@ -(defproject soda-ash "0.1.0-beta" +(defproject soda-ash "0.2.0-SNAPSHOT" :description "Soda-ash is an interface between clojurescript's reagent - and Semantic UI" + and Semantic UI React" :url "https://github.com/gadfly361/soda-ash" :license {:name "MIT"} :scm {:name "git" - :url "https://github.com/gadfly361/soda-ash"} + :url "https://github.com/gadfly361/soda-ash"} :min-lein-version "2.5.3" - :source-paths ["src/main/cljs"] ;; needed for clojars - :dependencies - [[org.clojure/clojure "1.7.0"] - [org.clojure/clojurescript "1.7.170"] - [reagent "0.5.1" :exclusions [cljsjs/react]] - [cljsjs/react-with-addons "0.13.3-0"]] - - :plugins - [[lein-cljsbuild "1.1.1"]] - - :clean-targets ^{:protect false} - ["resources/public/js/compiled" "target"] - - - :profiles - {:dev - {:dependencies - [[devcards "0.2.0-8" :exclusions [cljsjs/react]]] - - :plugins - [[lein-figwheel "0.5.0-2"]] - - :cljsbuild - {:builds - [{:id "devcards" - :source-paths ["src/devcards" "src/main/cljs"] - :figwheel {:devcards true } - :compiler {:main "soda-ash.core-card" - :asset-path "js/compiled/devcards_out" - :output-to "resources/public/js/compiled/devcards.js" - :output-dir "resources/public/js/compiled/devcards_out" - :source-map-timestamp true }} - - {:id "hostedcards" - :source-paths ["src/devcards" "src/main/cljs"] - :compiler {:main "soda-ash.core-card" - :devcards true - :asset-path "js/compiled/devcards_out" - :output-to "resources/public/js/compiled/devcards.js" - :optimizations :advanced}}]}} - - :test - {:dependencies - [[cljs-react-test "0.1.3-SNAPSHOT"] - [prismatic/dommy "1.1.0"]] - - :plugins - [[lein-doo "0.1.6"]] - - :cljsbuild - {:builds - [{:id "unit" - :source-paths ["src/main/cljs" "src/test/cljs"] - :compiler {:output-to "resources/public/js/compiled/test.js" - :main soda-ash.runner - :optimizations :none}}]}}}) + [[org.clojure/clojure "1.8.0"] + [org.clojure/clojurescript "1.9.229"] + [reagent "0.6.0"] + [cljsjs/semantic-ui-react "0.64.0-0"]]) diff --git a/resources/public/images/avatar/large/ade.jpg b/resources/public/images/avatar/large/ade.jpg deleted file mode 100644 index a7424e561571201bd1e976a76e658130b8c9ef1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 33523 zcmb5W1ymi&(l$J}yK8WFhXBFd-8HzoCqQr~Xz&n%2X}XOch?ZyAtc`>NA5Yf_g(+` zYu1|Xu6nAvrl+N*XZHTN@N)w|m64E^0KmY&04dM`{9Fb^0cc1lXedZ%XeekH7-(2{ zRCsteICxBC6hu@UOk7+XOl)j?BFY!|1muL+*dz=j|X`YRM z!N9=4!@^_0!(-6kW8>5O|E8Z^02(ZK1b74l7#aYM1_pr!_Ok~d1i%1rh-Y{ICMakK zNEmQ1Sdf$e#DA9lEdu~ZC@^pcXqcZ%03rlPhzfxU0AST#FXR4!`TxpZCfCb5I+RC6 zdG|RVWkz$2<_rB_DiC|h=w8Bdn`rcj7H@Pi-7Yf#0Iz0AF;u!Rv(%A7R^sdbp=oo~ zD>Fo?F~pRj{|f=ej8nUnYx_;G<9{mn4t+Mmj(0$Se(?VTepNj$(>^seTqg8C@L-|7 zF6m1T-xoIi6hhY6w{nj!+FmaF4>UC6`G^3NEq@uwUqbZwhim4S7U^>Se{uek;<@-N zJ*?by{LRtI88}qqV)(oKpG>Ki#J*r|7=}9zyE)Df9BLnOTwFObG4=)8gkDw2kJ+%UtN{be`y(HcBdK6 z`9JdsR=1YR_}5!&FUw|@4CRZ4gr2#wy~ne@yQ$CFe-fBfeW*-b&@&6drPRl7JZ-Se z-^Te=KJV)8yyBUAIN#D+cS_Xp4EZOy_z%AB*~fDJ)c1Hn$481J=~`pZ9G${^0(7hDdynY4`x@(=tN=*7cXa#Db=LdXzSo z$Cr4wb?E}0of<1W5};Yc!Rh(#7yhmKXU2J4QX7dr46wW2Y+PcBg?m$7w(mKeP+b4A z7la54Hq-yo)Lkyjm}&3lHDZ^um+`V^+X%qp9JjovNBrFwVf(~f=g0;SKgO3h^b;WR z6mmKh4>k3_()sfJTSg%X03GC&1n(eyhJAd0^=3ujHRPLSXV?q34uB|qXvKV*In@QZR6Vz*N~R@r z2pVnBb50YFPWyyDT{aaEMfc0nshL9mHUSWxTtFH0F;`a%L^o%ECE$I$JVYv6&FQSG zY~{T$Kxe2oFlDyf@R|3*e=Do9KmXZ%vpRpBb3KFI%%rz1m1_q6NBYdw;e_}3_T-~rATGO@*ORyW-Zisx!p>`&ZPIK#0PwsmyKG#KPje1^KqaG0X_m8x9`W?SjL-^wa zN@0k}r9meA2ro5u-9o<~X&7&{;;x4yhA=i;yP1!o>5Ot~!Fpb=@2FmPzfI3hmq$Ur z9YM>4y`1L9%BSn)wDZ%sJc(W99Zk0t

2u<992+RRSi|^iHKZJoSXl#E+|H-A3WV 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

G2n8v4m;AIt=_3uL@0l#;>nIY& zCA7yoSs|YOxL1p1`$8-CFR6>D<92EUXBbp2fNYW0k%FzI^e6hpj1<$#jo;KNtOe3N zBspPeX@s(uvB^M|Z~Y#W%;)s@na@6IU(f{CR9r*4*vw~o0lIumsoBP!S9``bY z|CoB&o12X%frm*}&$;hOu|OGUI`uhzUE^rI)B8Tu>@ID`2aEYdTK9wH<&pCgN8Z_X z;S}Xbm(TBAQlWA(@7H@q78^y}G@Wal>X>_<4NN^3iJ%ID9T*GZu&D}hJ)m#^co^ST zpL4G3>`-$q!xb#VLVnC~x_}$h@JPMj#2HFzTly-ES3UkM4FH*X|I>-;gc8kxP`=F8Le@lY! zm1`O15Xfkav5Yx`&W;nez9qY)MLhYA=V?$OhZydx;AT`hIkSDF#Uy6_A!b&zp@wg* z(AXeG^japcmcXQf?8bd{oyDM`7Z_xiLe7L%a;!?&*k#&hGIs}!<|RtRV%^T2+MFFl zlRxU>J{Hq2bUIW_XGHdIlP0n}qnCh!@M6oV`0D%~m>%_0@>2%BHQkeSs6Q=zJ{Krj z>Lj@eO@$Zy4|!|4L#y8-I~p&}(%7lxIqwM=Nk~Y9N5NNtP!olGP7J1cPWe@E54M5! zYHT+jr#TUzM@R^qp*pTasVrmz3zUsPeZNV^PN(7Y7?U->kUuZhO=`lE`jDEm_>hhm z*LfyD`<4^hFSOqkZyatM0F)izS_KruO?K$}6hK}EYU7L@3SSLq?ar?{e4uC_d9Zuw zLADALR@MY3szByrF+%$dZ)P72w7<~jH1*)%3>Q)mW}j0G?KhffO&;Kgc2M*~%LIFZ zUo+YA#-ukG-PXX*#=B%Vap1z1P6YgyJ)S25y0!d6i^)A72QwrFV*tD+tzXp^zQ27*e}+x!5q)F=t=00wYCOI*3#TbtVSqSJ&% z+7LeI0|sRS->X@8Ywr~?4U55+mNSI%amz=PWtEaB5BxS^Kq5+UJ_(D`eFZkZ6hCakdJf1$GllJIFk#EK{!?0s2F&Pu=G0wav z%!_Z%#kcT1*;vV>fQT}1M6p@+=DDumL`$j?ujiE07!Up0s*!9otNUdqZ9(cOua!;R zH`^TsNjkYs=v|fsfQ8>A4XZa!db}e87ByWZk~-g~5N~+>G)8iB=7K?w5^jrm|44tQ zC+*$9`Cbr)bcX&enIPR&X#{TM*5?Iks}$2%y2r5ndohX0mJ*Vt-?@|JgqFq4 zO(L;Z7Gv+z5A8;1mW^@qKw^AT215X&^C} z&#WvoqR0PGQ6d}e8yA@}wyn@!RPPu$2^Q;5eO0N`Q9M|&Hv+{HtLR09KI#!6Oecu4 z1whDKSm=ARRnJU!%i}ZRC$3!3|1SnyXeFTod^*Lf>u}gp4q6JR8BsWY`$BAF+A;J~ zp8b&F$w~5?ZWiX8D1mrvPg^m0pB~9RNKE|d6iYU|p0tD6H0y%AQd?H{W_KL@h$5s#wq}&hhs)ckFkc9 zklom!*C%-+3-8@vVqX?osSTr|@QoIOg?W$ZDgP&&-Hgz_*-`YPX&|8_OetZK8q*)v zjF7*rKqWN)4m^b?)31!^SH}|9V~&SDt2mv%DzrOdv^a-F(&(j9?5E3HmNUwNb3rAUlM53aHnmbcYj7hX;(t^`boDC-eTtSy!L83Ly7~5I8dp&JFuz|#n_Rq9&cz<98^ah$f6#cW`H>)#t(qDb7diFP7`NC#7~k; z;cVJUQvkPny~*H2#euq`yJrN*-vIsIBLHeoyM9_~f0rgH*}h@$8Gcxl+w!DFAHG;! zFpo~O^ede2xP{o^g1auGdaOcrgi;)isqbDE5FN>0q%w&p+Vqb#s*dNgDzi;6ybDa!mxuWhgRCWa~d(IT2&CS|7hC{g-oEHh? zWbV4byJ_=|OpfNJ1K&KqPt(8tiXa+{RK#_d?K9$!Q4;9=FH z&3xMMd*HfeQJaryY7@b!j~u_m@9f0J%#y|>gn!@M^~nblJ5*S~h7AZ{FN{QnCrR-7 z6}^p2N_K|F6{W{jhD$f<18Y$@T>HUN0dNndCx)qmECMezl5b3H%60(DxK+8UdmWT4 zjYe)%l3`m-f5rVId#d|kUy)^gi=Tu8=WHZRxiRP<69B?B#u%om9UhD(!;9?yZ1K%B zf^c8cXCN8C%=il67^DxWjA%4HQVrj%+v6`FIFe5r@>7_ho*YWB_Wx=Ew+*K2 zWQk}DhJiiR;pdAcmyP}Shb{97Z;Ud&mNmg0@~RYtae9Msfb1L$#tz4^too#!&!jKU z3A=v-;PgDQ$IWMl7exMXfPesU0Xe;Z_?87>%rP=S?VdjmSl5GG2--h05DN$M5BD4B zK`se^Nl3xK3M%+>O%<~72^tX?buh&&)wITj>AM2C0o?>-h+zR{nt^Cur(tzb& zvYhj8fK-E5B3=AH(9StxyUfmaGMO}SP-Zc4#94~axbMhVPhhVBlmVHxO zVR$nhdVbNhX*R{$E7uneP+5}a8O_wl^;+aYD)_)CD}$kHN-Sm@7kFd%U}&zxL!UJb7N~l&&Bs*z>zoYgDT&sh$4EA z+Izz!OMPa{z3E)(SU8pji)y>s0*z9rI{h7>sbM7qA0!Ek6F8*ut%T!9W^4n3a>CEe zok&lu-pvcGY`bCQkuK|oZk|Q$)7^`tHh!E%73)s;8-Vl}?B?TECFL`!5qImeM?8vQ zJu*&g)J22&)IAJ?xnaomyB+X(cq8{c9Q;>G=Y&5VH~Qb4SQGGIiJuV?KH9#3JT|>j zZDx%C#+CUNQ|Iu7DGCX#c!Axv?vi?)BZCf>(6-)xEc6)CFUZnA9;$E|$dOdOZXoh-vuF{LveC*Bl zv%Y6%TA;GS<jFYEH zOztOrXU_`|uG;Tps=4GNVK*Hx(8$(J>QhL<+U$9@&;N;md-ZOMc%+Aj({ZOnMMi?Y zm!+J2^_P3_rwU()TfqWdt(qkIn2&P+5X#mlj=UgxvM~=GM~cf-JO7(VhzJ$+`897}O z3kp@y@&1leOsFbb_O`xF2He8U`{BcHi&I~&Xefcq! zwHjS7K}GihUNxU7MYsoZfi#8oyyw8f%eR-StL;-DaE9I=H!ns=@+XzH6?stnz(QZm zPL%z9s+HK`V~Va~&Ap7IxuoHzHWaQ}y${Ql`Xv>PVN)8==8-nfLbKV-U3Q>UcwS%J1BrSwg2X!V1WKp_!N71TR~l8K>?e%437XZ=o)KZvNmNEb zU~LG}rszP%Riv#FFkk^_aol4TiIa!532yNBLO5Mjb|?Edl5`IAnN-#TEz&KO+FwXH&STl(k5oFHYrtSl{sW5qUdD3-A^J%;M! zD9s{(aP5*!STcKlTNmNOlZ5Ba{5PHrNfnS+1o4c<{OGA>k7egiPjS_Apo&;5(f_9H zQA-r52+ubit1NDtIMK#q_cQax^Rga`l!SZkII>j{`+8bf4jep;JjPCyLM647MV0F@ zpajSKWX+!I9NFJF7yU6F=6!GJ-JglcnrWzydOZ#`A>M}`-XdthVkVw81`XRV-;^2R zHtZBSFR6!L$KBMf_^SQsCztPqS6lx}WY*^bx7tT4JA`b^@+2#)hLW@CH7Za-ZeCkT zsc&b)3{s72b()2$cAXG*eXeKE{V?v{RZhZVhj zmQ!VdW{+G2kD*IwsoF^290ruq*3JH!%&EW`yw5$%G-7hB-9_C_VlbA5ot*u=T@S)! zLn~PEffs|w0ESx%YSv+}6AE4vvK=%sD(uUcEK!o~qHAKf@yE!+WQL#)$FGQRbxQ3)UAkRNPcq~I=?Gn!#`@DTxM+6;+ zaj~0$(MLCOOa=z*bPNps8f< zdm=CTUqM7jb+|Oe3=6jI?d|LQl_f*}Vjl9frrgJnzyp(mJ=aKKzMk&9>UwlV8ebj}>&gGR$?Eyt-v9_d zxjGtsv_G%*yGBq>)k&eHHPEEW!Yvx?i{~D&N%OIj1xP^+a`!dsy#2-cO9lQAjit9+ zm@-pAx}%xHo$gWmHG-DbVXgdzRnAbI(=cV5yu>C z7$kF_;_E_!v+vm=DE-s@`P*wN-NQKqwQ(`(n$=G!Dlc$48tX0`Oiu_&tg7J$%9YQZHU{~O`zM%jRyTGS2xSHX9is8SEzvTyAz zy{1whM;RV;y1(;_*l$NjCC(DOBV*+A+4B;^bv4E797G;JUgNRhSy`G;XL zSzz_J$Lw3V@1vVFE{bQ1{^l3&WQIf;p#hvA8jp(j9mS$Rtn9Ow?ZFH#DG!y6fi#HlzuL3_97gD z!+ND-HCC+M@(WaYC!Gz5z7B@T6#v~qwU@_mRA=C!nkruje7iB9eGJ^Z=WAihw{Snb z_8m-4N95_Vk>?)0+PrOY<}u|r*3teqkI&i~UZw(q&xt8|b2fWsOJfJw3@v$30Wstm z`?=FM_U!c-`+}6B#m(YRz8+;S z%b*ymXbt{z{Dy1C&5_LN%OW2QjFRM41KHol`&D8b^T##MTak}___T=Ex}rJTKc?4a z5%%Pr|HjKa=qcmYlD7pxxqno}bncHY!n8v!IsyRO+PC2kCFr7c?@qd_6nFTQ^x5Kt zYc3i2NVB(itPk-#N43Ayx4j$pW9gnP-(sH3gZEt1SaOMaIQqNByF z&Q#ca_;o>r9)1OT%Tj8d)E5%ch*V;qDWVb$m=gT(%w+EiJy#Jk2@`!Ju8^tY(r%ti@sIRgicwU` zT5pK0o%Pm@m-voHOnm$xoZ0t}W$#I!1(!9!n3%HeJfTBBWo(3szdCzUvMuQV@bQ&4 zxC>0TwHP>DeOOKHjs>Q%B8TA|ytCsX#hl@UdE6-6K02mwXs>-F z&`LwdeShFkB<)o*g%E?lhg)yHCjf-(pIiZWao4$y7_z1;uh^S)-oAWVmAz;ap4Q;c zuMJktsL2^$eO&E>dbW+vb?-JF_G zIg|rMCkSt$1V!-Y_@w8=s`M4%ZL6sJ$if;v_-%=~GCMy$%!#2hJI7l4Rt1CgO1P?f z%We!_BAP5ngLGh4Cazk^09}DH~#TB4IPNObWsN4M3%-_^xs~w)AoE=Z3At_m=J7hI!QW4;c1r z@*}oTi++{7UJR+(2P95r?9$>$=N^%Fo&v};&NN@ul%o+^r(n?F+B5EskBe4@5ly5~*`^~NU}+;R-kx)N9Z z2+-0?qjYq;wMrE~PL_a6FFVFxNtaMn@zB(AxPmz$#Y!t;+nX>1vDS&aZ!0w)RJv_5 zAA`=De*pBZ{jE4Ac9a#uF1V-9-_;yF%^NuvBifW?2|zE-g&*|CVQt^XK=t}EW-Za- z3t3mGRhZ6I_dI`5#a#nR$k81MUJLz568mGKf(6%?lC;sKh18tD`+c7IszI*TstK!& zc_Ni<=F^&~sb_kbealH9k6?0EbsnmS25s8M&!u#vuGmFAiacA~Dh6UN7Nm{6T5oepbpdhCIdZN2`Po$zU@=bfKcV=2+lZ5rm{tv@b%}2=2 zkwLZlZ>83NZDHm~W~<(P)MQ8UP7J$ojVg-qtQBS4jjid8y|^87Lo{3 zY0nh3NLU@8QtY_~h%CMtPA^i7PiAYjg14rXGq8uj0$odH&Y!+JMh*E5ex8 zUF!oln=G=96d*wEsT{@M0QWKoK{#YlhF-CjeRF#*N~+D7aRMgyg$KHD3X?LDk_Im8 zO`d)up8#ZBYV!$lFAobq-} z&207((M&hz?~yTKYWD2xZM!hp Zhr9{+)&gggiSkp;B|IAc5&gFC{{Wrf!-@a^ diff --git a/resources/public/images/avatar/large/nan.jpg b/resources/public/images/avatar/large/nan.jpg deleted file mode 100644 index fb4f456f8aec76be18ee1a865929aa7a5de31619..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23839 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%0A~>Wd9%axhRA=Fi0h^xVOW4tiY&nsbDK`8}H% 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 diff --git a/resources/public/images/avatar/small/christian.jpg b/resources/public/images/avatar/small/christian.jpg deleted file mode 100644 index 96217deca65db898713651aec44332149624b70e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6813 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 diff --git a/resources/public/images/avatar/small/elliot.jpg b/resources/public/images/avatar/small/elliot.jpg deleted file mode 100644 index b5a46b57033345e14b8a339d388e5853dd7e4817..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6176 zcmbVQ2UJs8w>~#Lp@t?PC4>$_3M~n}N~Cv06haapln|0oRV;&yf+Hx1hy_uKr~{5l zwHL$&Di*K~;9wWAV&~nUqVuo$=e_lI*1Gq*`|Q3?TbUf390r=+xq?Ih*lY`c13zf; zDIj`faZ~dE1W+*B4}i&G)VyS=RK%iCgc55GFC&3(&CN)suhL9w)$Vte^k~)*&NWZ3#E(!>k zHvEs(N>7*NH6<;PhVp-e@sHAy@H`Qp63UlkWQn9F1V_#a5)0r4a?-pqxLLAMwwE&*c4W;H@K`=f2Ok>E!ItVk zr`j`UGzP=d-kt7l=itutrh2=3%lye~{F5%j)|+n2^ssecGGQCuwoDowhPLi@RJw<^ zjSu6yE?X#(a)ey|cfSJI?>AkWf7NAqiuoLAhB!PUBklWa2~N(CW=N7VL?lm7l3A2M z$jiu)n9Dl(El|E#kj>}$h%?ejQ>|bL{=q%dj%UlaNl37w*(7kRxJ+A)6^BZ*w_+wR z5~*B1lj>l{B!AQA{X^NPGzRr=Wur1|-04hP8y^QaafT0>0tdw7vbbLp_%>6+_?h2O zn!sfaUvjcbLJH#u^PMQNSqJk-U(r`N%HQBR*nhF>m>;RN(>j6MX2Z{m6nZ~nq5C9uQz_<{`X*p7nj6V)zwS-g|M#yqj6T<<*SW||RzT#O^GGDQq4D-^3 zJXl5+vxt|@li^b^UYVW6hcVJ0#zolzeh!SU!q_M+D_sENcQ95<=W`?gpyXwIDW97R zV=9d0#o?izFm?g}C!h2aPWTB+`MGeM0C;AI^5BgkSxPeFnv>u?lR@(3=cMtaQmbJ2 z9N>s~@GhM$;t2Bq_?oj!3#iCyOM;7RPh;BKThXoI@=w#h4o*w`JCODEtHi62sh&X^ z7k==5=>FhkYzKhx2Chxn4_?AX0NPgopn3BL&uAMw84CeuyZBQ+8nXHF(-|V*bFF0s zou>a)U|RCOgP;6a%lu8(j^y=q`I2Ns;eYG!|5NR!7-aD4yoP~l-4~!1XAP7ussZG)3jn1m z2avH_;Sp%MZ~pj5AX|A+`VYR&dl;vuK5I7D_gY)1LxCU;4AutM_fN}5^e1sqf3n@UVkQSs58AFy39b!N(kT>KH zg+gR2tPzPVm=}Xk%`Dh6e89jsu0@|dk}4icyfL1I55n{CdH7O%9li^H5kHFmNFWkS3C@IYLJDCS zp^DH<=qB7IypofXBg--6LgWN;OXaHM_R5`+8|{0;e6 z3JMA)3T_H93Q~nN3QYdt7bIM=$|p6IaAY3ldoB<*`j$(^Me*i%Udf|Ypqth z)*Wq>wuN?xc8>N|?QZR-Gu37~&g9N4p1E)4O&x@eg-)o>LY*Bt7j)j}>gmqb73pr& zJ*oRtPead5FGa6H?}*+beN}xIeSv<3{!#tMBz2NIDUDP`Iz<{c&@u2e$TFxk=rj08 zHYG=pmy=t_cMJ)J48ugj3d0kI<3{>M0Y;0Ab{pL^#v3z?lZ`hR_ZUx@n3_bH{A$u} z^3YV%lx>=Cy4&=&nSz4ZMEBK*jmHd-+H-qyY(2wh!R6tOX;C}q1sW?sCCp^G!@z$ z+HzVK?IqoU&ZTdnU$s%N@v&KA(_!<%*3y=5yVZ8kPSq~J?pM1LcAxDX?8WxY_KzHl z9O4}|I}9+?7{QFyj5AC$(}TH$d5HO*WzUkb_OYHjS~;dV?s9zSWa`9ss&l&MOm^lt z*E$cmkX+(jwz&+s8n|*?x4VwG8M^V@8r&YZo4cpD?{OdVpn8ZsT0JH_S)PkMk9i@z zW_uNT^?9p!M|f9z-}NE;B>C+28J}%8d*SS3zGz=R-?hF2Y+W{&-NYWB<1lCOoKt@C zeqnyqek1-C{$l^G07Sr?fbxLbfyRNt!1f>z#11MCx)W>~oEdyD1QQY*vMJ<#C@pkR zXiu1GSX|hyu(#nJ;iciXBFrMPB2GjqMaD)pMNUL{MXie(il#&_jy^wEd#+$^M+`P5 zGNvKs%{=dU>*tNe+Qk;dUY~C|KX?Aw1=GA2ELKR`E@KlCgMsCJsk)^0eG?dB8T%S2E_7gWqAjy15hg1!| zOkKz_%UY2&ob8gmDf?YcWX}FvVy-avLY_t5s=NpJKKbYVO%2)& zB@Le&g^fcyLwBBPa%gJWrL(JaH)40z?nirK_gwnj>-UaktLEAkjh2$VU~ksm$A85C zaebfPz7zWy`p|;-jfV^lZ91%e zxbz6&Na2ymqxnbQ91|UTdOYd)y%TXKZk>!idG%DtslIN%?lY%-PM_>??>TzL`OKlS zth1fx80Xs0+n;Z{V0WRl*RHp<&%UqiqQk|GOUz4Mmz^#j>38ive#Ps`>8tFk=dT4` zyL>(3`rtt9z|bIX@ZpWL8!v8V-~4!M>237w;ycQBD(~vt-TtTfpDjc7Lx+dGhA)hS zjoiA&z4zoV$zPvF3-2r3uY92Ypy?s~;h{%9k1jo)_jvS)=*h>YMbC)OHjkN&9eD2c z{K9zj_~;Aqi^-R(UunH+d~N&s#GBwZci*PJ{WwwlPV3#y_l);FAEG`y_?Ytv`>E=) z`RA@LeqU}+rcX{zjseA~KOg|_7e-LPUTdLP#Psc?!T6S_Fhb{(Q&5;t(hd9zqjf?tcsc2!X*O(KwVcfRIQ83W3JS z$*wzak_aRUpfN-h1DYzW{X=(_ehY~+2c9OYX7)wXtV$73Lba3BaGk_cRZe?(d5eAH6BsT*YU z0n}Qu;{J5(ByQSauj7LpIA6HJyzsQpY3ci1vHSt$@aK;LFQu|GuNfdNDP6FXYsk*Z ze=!jI5WPD3bj+_MI*gIu@twe)wL0|1nRg4Hl@&gdmQp=R zH@ey%8h@gdQmS!hs4eT`46VF~wnb#m$9Kr~#CEDgzUp$l_a?2Ty<7ZOKCfe(Kf|hL z2Vc!E)iXR%M=L86#i~a|)UzbiDq4k~a<=;G##z3#xLQJ;D26?{b6~U{uQ(_4OPubm z9$IYR`@1FEHMO>;=64-$zgTtv?>~>^JIi3@!M>pdB6DHdE3-80(p@*dBweg>Jok9b zpF5P^zs6}Mmk7__eH@k;OiOKZW%b@ZGhQD}!M(NIGq1l|=yX8YE!}TXV?v?iXE3eg`YoF=mB^i{I~u~pJ4Tw?MomIys?uS5ooydx3U0_nj%MKk$5%A2yqUt;BAlIv1Sd&!%YMF9d|Y=Kc{aI)uco; z6>;~D%ru^FTd(H^Ie~#St=7+Op7yBAMkqOi|M@mxGsiN&2@?5JGoN zP7$_e@b~9W*3`2c?w2FA6rz`zRETHA5~~a|YLhzT%`2VaSYsy#O=cJW)lnY0wz#+V zcI^62v|HQxKUzZuhXM~rzN>c$R@)X>HcxT$fb!~H=MrWM&X?)*Sxka4mxnD;4c9g& zUulTPYjczz!D`8fsWx(8<>!TI|-m64&_%67bp=(f;t*DK4@9yB{R z(o|~^IZ^#4r-*#2y*J;`QdIjFbvR?m%l1t3ORwzoAFof+AR37xCz4-(6x@1W-l)ay zqbm-!U9B}I%*|TB-zqd)Z}#Ery^x0Pxy{FmpukCRwl{u}cjChrjGeB=eXcJWD!SV? zJR2w3W!C6cv^}jb7e_LLX6~1&<5!~Awz`B>EJYpU9qPAL8JW?6Sl{vJ(hKbwYN_VF zc&%CO?KiB(dJ9%ybOyo*o?9Gh&ArohD*IlxxQg64-ruGX@qn-t5&d-Vfb+cim^=Mz zn?NE)AyaCMjyjsIO#{)2H*pdsmuhHcP5`1nz6~N^ zQ%J+4bJ$z~CEZDX#yADSVm3}6Gb18Qa?*Dbd&Mja2*OZ#d?v=$$`(t<6KpVc_ErR2 zf(@Bqi6P<%);PR1j$n-?5GiNJykrcOiZP93 zaT&Zcftk3HKLTa)S*c8h7oW$$%#?z{`Um&+whSAlb!;q_U>!@t((P?%SQ?%{!rI4@ zJgNUjK(a;~&z7Cy?=fOBvG%gF_9BzL^l?x?3_6AWeE~mqYA7@1 z2V%3FeVKv_tpZFajhpF+6Yn~Rhxv}a%i;c}4?PH3LN@b<0XMdA)|7bTQP?zYJXBUJ zgBeE?v4#51K}=pUn~8Btr3q<#Oel1YLzr}^4)G#3jsKq>znc?#{OM#Sq~8w4&)A^T zCWf=e9D0~-6ihDE9r#cim>vV(zY1k-g$HDJp8%w|^#Gut1&acRc}DZK-~hm(znM9s znK{L;4|MY{HFu@sY+`LB7N(6(Ka^eQL#4(9g#>!}_@!zrKjLdiJD#i>B zmjTI$V@_sp7-HNG;q|E^CWI0G5Y9_wG1DM?3&MtM5r+lgPY_n+Flhn+kg{UFkV#K~ zFdo9P{IC!zgdG8pl#Txl$Nq+e%ycMD0I0m=45(2g2r;H~GYr%-$rx{D8k;E;VuPT2 zfW~J)U7C|j<7NQxea&Jmpe)WU21+uCU{4}piB?ehXX#%jXQlofh->>@;$84e&0y-? zzj(iNfAM%V0FXaGx!L-Q7rO(1=CuIK9r(pF{1e)Yxd1d>|7|_$;{Ed59l~PLt;7kP zrT2F(hL6HOAOJ!Jp^nf)U=d^l z6%mMtLc}5Xh-}0LL@A;M(ST@0bRv2Y!-$uN&qy><1&Kjokq$_2WH^$JOhINNHzIc; z_aU2*?Z{r_1LQbz3MGfqLRp|FC?C{9R6HsTm4_-t?Ljr7I#9P!Pf#DxXtX-o1Z{`* zMlV7qqO;H&(SM*1q0gdkq936@NJvO%NLWZXNd!vJB!m)q5<4UgNSu-Ak$58UNm52q zSCS~{B^f2jm0T@ZD!E_sv}BLuGs#IQMJXdGid3K!Ln=dRi&U*ttJHO=CsLErO426M zPSRo0iPEd2%cL8mJEVuC-^s|x=*!s41k12wa%9S64$EAUc_8yyR$10umMR-9E0WzT zyI1zC>|NP+a&mIUa;|bwazeSya&>YS&m^*K->s;pC4Ra68y*>Af z21dhEBT1uBqgmsgCQ{Q}GgvcCvr@A|^W{9%c@FdF^ES*oI&VM=u4S$jqLrn!ORHP! zgSL+LeC=fI9oiSPU+SpqxauV86ziPU8PQeIb=GC+7VDnTeSuNKxMA3sGE6&WTu)2S zTTi4{t#?gtQr|>BTz|FxA^m#>(gtLMID=w?^9JLFx`qLU%MI%d2aKeQ$VLf9+l@Mn zCX7vtBaPP?Hyb}UnQP)>l4(+JGGr=e>SCH=T4Q?43~fd>OEUYz?1nkq+}1q7yxjb{ z1>AyU!LsyYHI-{HBVi6hgo z*71>(z7x%<+G*GsD5Jr|lwjmtw<16PLY9@l4XW^RdY2i#t{AK!RX+i z;PT+7A%u|SA)TQrp)sNRLqCSOhiwTP3^xrIg`ba5h=`7;i@&M?o&&v=&UmAN|$nMKb!zg%zm zs^t$>xUHzphGoZQpI>RPGI!;ZocTHXR!Of)T6J|bes$66_iG~8wB~B(=HxzFJAZ9` zo_roZuYaAxx~lca^{n;R@~!iCl?_$eRRvXF{$%}mr+R*MQ;l&==`QrH)Ll<&BWgQ$ zlXutc(cDw8=i6TH-r;>A``YX5>gx7u?cY)luNT#i9Ed(}UZ?~G4ip7<3`6T8dVxMG{KrOn#P+Gnul8!wcI@6d*XbnLu=zntCM@% z^xDc#sh!$#TKaVE>FG0>XFi-wKKt@q{JBTxW6lp=Sa{)9dvN=;4!@2|7ricC=ydBm zbIIvaTNkD4#AWj3<}0KtP2INLjaO~2HeMrLYr1ZCz2%1ejnQ}p$+#G@0H%yx?l5`*gIc@p;>b*T{_*i(fn$O&*44d<2#Lad*9o-1~A(UX#?EreAMZmEX@I0B78qY*P|FgOCKghB%eJ%X~EK2gP5GMJ{i$~`33hE!NhrK{OS%&}7fVku~$ zaEb4(Ap1%Pq#nTy6--M}CZfj+t8ePZs;oM4&OO9hBGiUoW1y;Lt3EvdWTEgNStZ~C zxT7d6zOCYP2lO;UObWG`7iVQnGGEp3wO)VWC&?KH#L>!@j&)wew|~e*N}JH_yS{ zvJTdY(u<2t-uAE4*4{Q{cjYmj(qO$u{Zsi|zoaAga|*8NsIV)xs9+k{>F}@kJIM#bQIo^6a^Wp z8CIEjc9;b?giR#f3r{f3*kiwUYs~h`wl)pchQ~c8Z~Vn+UQf+vO_`@QVe&NYmZM(< zBAToJs6IF>7^y5-t<`zK*C;DG!F@onCT7K=Tcf2JtijTrujwSy^;Jej=jWE|uTUMV zTsXYE*09zrIx*Zgb;RYOJ>BT0{{g&J+1O3yfh3&LI~8R#@HES4I&!`8E-B}xwnydj ztp2{Pm&W%PWKpQN2KIsi%Vs zVtsx9>{z+ug&5xhq@G-z*M6H6cfFO4`jS5>dNlQrcPp~~#`gDXDOno_EK&!SV7Cvs zI-q;gtw=-JjdejLhY@SK7CF(R12b%GeUON{M4zcY^*&xWo)p}ue2OT;{-l=lk|eN5 z`M5^&iplZOkb9eH-HS)xsZNdu_L4uv5Vb-m`_uax`&^!GJaQsCi9(gcN@N^9Dz|by zNoV0XM`Gf!P_M4sx#uMosjG~wcDx-PfUTC6nh0L+U@`RK;5Bm(FJkFfLEQ4<&zo*@ zGOXr)^<2#HM(jCtJ2L9zn{Pqc9_MJpp^sZ}rwy{Y>Dl^H*zO|9Zh!hi_*6Y*X;oQe zZ#*$|mu@E^dV|~nYTo+wW$$oxT_~$M3v+A=BdAhpfBsX~+lB9<;^ruFEZX}N&!T0{ z2nWkkV+&G^D8uhP&L;1!U%kk$0m~spJuKNN-x|@_KkSdqUt$-VleU+>C+ef9K6`%2 zj-u-8nGXlA9vs9*i&Q4*`(JQ~haE_~3!T&+^sB1YN6k*AfoIuk%)4m$3>@ zv6QO1{IftE#nHl03VK zm3;xlW1o3SNo(7MFFLSBC*BC+#>JwJ#t)P#l71`(>l7Ap zW1xIw@B6NOj`pLkz8;hg-oc?i`Lc;#kV(rly3f|Nx;K$rVXfP0H00~fI9d5PIXd6- zqF&Pl{|ybB9eVa75xx^Gi6_e6$vKBE7|FZazS5`kY+?So%R`)|;nTfL!HYe4u6diS zQ|@yA$UnnwrXGtLzRTH%r8dux(;^ku9L=NuNy-UJFH$ZH9X!zNEO-_m>?}Lc-ZGYw zKNfHzWDvWF&P@PWbLi1?!jJ25B;5x~Vm;rf@6f%PiP@^${TUzqg=ID0FfHtbM6fp| z*{Q;wRes6#{vU$6p#?85mL&?7QyCua2jkh6r2~0jiRD9m4EyD|K+DOL4$UQVGAdd= z9O~V@N74I}C}-s+o3FA#+@~8>TbAA#$)7M$mx@0!mQDHA=fJspWZ%JUMhn!;x-24* zb+)gu9i~A#_o;dHjvd=Bce7U5If$-0TosLH1?WY=S#dxx3k$ZyOR357h1>i zbjD9zpDa&uc^r_Q`AtLXv`$sQlYNIiZ|r>^xH#)o@H7}crqJWWdF>T-z|;`e;*d`t zEO(E;CvmHLtJ)N$Z>_N9vzBym`g@XsZR*=VozTzDelCRa)+?Iis+?OkCtW|5;7Xa> z>i2MuUfgW5%;8@BK`YX>^ahQ}@RZJXkvDH_wsamlL3&Wq zRu+*Jd?23}ZkpC;roHD>otDq5O^b%cks->ZJ30POyNY@yPOd%JHX&z4k_}NwomjB+ z;Swbs&2aS&P{_?qklvEp_FRi{X;{K=Z_b!8_BxJmLH=#yb(6OhZIy0<;TP++%sY&D z9$y@rO=q12a?AbIj_WOL?JBS{3mmeW+Liom{_c4noE5yYt0rUCJzL`P+2z|}GA~X3 zukx#V!&J7HOoL^EhwM0?+Xg~jxHSA#&|VeTdHvPbDa{uD2O~WcwYnkW(M=OsBG#>) z4xLjqos;EftA?`I<$hUN_2_NCPjk~W;Q75biZNR8Wy`?Qm7I>1S08`c9g*9&*j@d` I+UdLh1Be2GQ~&?~ diff --git a/resources/public/images/avatar/small/matt.jpg b/resources/public/images/avatar/small/matt.jpg deleted file mode 100644 index 4c1e2b4e012b15c1f90ab71b05ca6c5c87638c9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6378 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 diff --git a/resources/public/images/avatar/small/tom.jpg b/resources/public/images/avatar/small/tom.jpg deleted file mode 100644 index a5a7753884d1fa822be1aef4ec70a435b687cc79..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6193 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 diff --git a/resources/public/images/avatar2/small/elyse.png b/resources/public/images/avatar2/small/elyse.png deleted file mode 100644 index 7ffeeac8179c905aba5171c9038f0fa2b14ac206..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5402 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 JuD(0ve*lcG(FXtk diff --git a/resources/public/images/avatar2/small/eve.png b/resources/public/images/avatar2/small/eve.png deleted file mode 100644 index f2ee34226d06953dda86dcfbbfbc8303e6d458b8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10545 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 diff --git a/resources/public/images/avatar2/small/rachel.png b/resources/public/images/avatar2/small/rachel.png deleted file mode 100644 index ee83e28bf5c10fac95d8cc4e95cccf6c3cfdb62e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8244 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 Aj{pDw diff --git a/resources/public/images/icons/school.png b/resources/public/images/icons/school.png deleted file mode 100644 index 9b3a88f551143a38b349be5e37e6d1ca1a119b80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2561 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 diff --git a/resources/public/index.html b/resources/public/index.html deleted file mode 100644 index 87c0f93..0000000 --- a/resources/public/index.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/src/devcards/soda_ash/a_faq_card.cljs b/src/devcards/soda_ash/a_faq_card.cljs deleted file mode 100644 index 2437c51..0000000 --- a/src/devcards/soda_ash/a_faq_card.cljs +++ /dev/null @@ -1,212 +0,0 @@ -(ns soda-ash.a-faq-card - (:require-macros [devcards.core :refer [defcard-doc - defcard-rg - mkdn-pprint-source]]) - (:require [devcards.core] - [devcards.util.edn-renderer :as edn] - [reagent.core :as reagent] - [soda-ash.element :as s])) - - -(defcard-doc - " -[back](#!/soda_ash.an_overview_card) - -# What is soda-ash? - -Soda-ash is an interface between clojurescript's -[reagent](https://github.com/reagent-project/reagent) and [Semantic -UI](http://semantic-ui.com/). - -# What is `:soda`? - -`:soda` is a special attribute that is *added* to the normal attribute -map, and **replaces** the `:class` attribute. `:soda` takes a hash-map -of unordered key-value pairs. - -For example, let's take a look at an image.") - -(defn image [] - [s/image {:soda {:size :small} ;; <-- attention - :src "images/wireframe/image.png"}] - - ;; - ) - -(defcard-rg - [image]) - -(defcard-doc - (mkdn-pprint-source image) - " -As you can see, `:soda` is added to the normal attribute map. The -resulting class is `ui small image`. This is because the base class -for the `s/image` element is `ui small` and the `{:size :small}` soda -adds the `small` class. - -# How does the attribute map work with `:soda`? - -Continuing with the image example above, `:src` or any other normal -attribute is defined *alongside* `:soda` and not inside `:soda`'s -hash-map. For example, the following **does not** work. - ") - -(defn image-bad [] - [s/image {:soda {:size :small - :src "images/wireframe/image.png" ;; <-- attention (don't do this) - }}]) - -(defcard-doc - (mkdn-pprint-source image-bad) - " -This will not render. Instead, soda-ash will throw an error letting -you know the key-value pair that isn't accepted. If you open up the -browser's console, you will see the following error message. - -``` -Uncaught Error: Soda-ash :src images/wireframe/image.png doesn't exist for image element -``` - ") - - -(defcard-doc - " -# If `:soda` replaces `:class`, how do I add my own class? - -Soda-ash gives you an escape hatch to add your own class, with `:add-class`. -") - - -(defn image-add-class [] - [s/image {:soda {:size :small - :add-class "gadfly"} ;; <-- attention - :src "images/wireframe/image.png"}] - - ;; - ) - -(defcard-doc - (mkdn-pprint-source image-add-class)) - - -(defcard-doc - " -# How do I make soda-ash reactive? - -By default, soda-ash is **not** reactive. The `:soda` -hash-map replaces `:class` when the component *mounts*, and will -**not** update on render. - -To make soda-ash reactive, you need to add `:ratom` and `:path` to your `:soda`. -") - -(defonce app-state (reagent/atom {})) - -(defn image-reactive [] - [s/image {:soda {:ratom app-state ;; <-- attention - :path :foo ;; <-- attention - :size :small} - :src "images/wireframe/image.png"}]) - -(defn wrap-element [ratom element] - [:div - (if (vector? element) element [element]) - [:div [:strong "app-state"]] - (edn/html-edn @ratom)]) - -(defcard-doc - (mkdn-pprint-source app-state) - (mkdn-pprint-source image-reactive)) - -(defcard-rg - [wrap-element app-state - [image-reactive]]) - -(defn size->tiny [] - [s/button {:on-click #(swap! app-state assoc-in [:foo :soda :size] :tiny)} - "tiny"]) - -(defn size->small [] - [s/button {:on-click #(swap! app-state assoc-in [:foo :soda :size] :small)} - "Small"]) - -(defcard-doc - " -As you can see, your `:soda` is added to your `:ratom` (i.e., -`app-state`) at the specified `:path` (i.e., `:foo`). Now your element -is reactive! If you `swap!` your `:soda` in the ratom, the element's -class will update. -" - (mkdn-pprint-source size->tiny) - (mkdn-pprint-source size->small)) - -(defcard-rg - [wrap-element app-state - [:div - [image-reactive] - [:br] - [size->tiny] - [size->small]]]) - - -(defcard-doc - " -# How do I read the docs? - -Let's look at a subset of the docs for the `image` element: - ---- -# image - -* **base class** ui image -* **default tag** :img -* **:state** :hidden | :disabled -* **variations** - :rounded? | :size | - -where - -* **:size** :mini | :tiny | :small | :medium | :large | :big | :huge | :massive - ---- - -* The **base class** let's you know what the class will be if you -don't pass in any `:soda` to the attribute map. -* Every element has a tag. You can set this by passing `:tag` to your - `:soda` (i.e., `{:soda {:tag :div}}`). However, if`:tag` is not set, - then it will revert to the **default tag**. -* Many elements can have `:state`. For example `{:soda {:state :disabled}}`. -* Most elements have variations. For example, an image can be rounded - and vary in size `{:soda {:rounded? true :size :massive}}` - -# What is `h/fake-content` in the docs? - -A lot of elements need some content to look as intended ... so -`h/fake-content` is just some lorem ipsum. - -``` -(defn fake-content [] - [:div - \"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim - ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut - aliquip ex ea commodo consequat. Duis aute irure dolor in - reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla - pariatur. Excepteur sint occaecat cupidatat non proident, sunt in - culpa qui officia deserunt mollit anim id est laborum.\"]) -``` - -# Do I always have to pass in an attribute map? - -For the time being ... yes. :( - -``` -[s/button {} ;; <-- note the empty attribute map - \"This works\"] -``` - -``` -[s/button ;; <-- not the lack of attribute map - \"This doesn't work\"] -``` - ") diff --git a/src/devcards/soda_ash/an_overview_card.cljs b/src/devcards/soda_ash/an_overview_card.cljs deleted file mode 100644 index ed8e88e..0000000 --- a/src/devcards/soda_ash/an_overview_card.cljs +++ /dev/null @@ -1,189 +0,0 @@ -(ns soda-ash.an-overview-card - (:require-macros [devcards.core :refer [defcard-doc - defcard-rg - mkdn-pprint-source]]) - (:require [devcards.core] - [devcards.util.edn-renderer :as edn] - [reagent.core :as reagent] - [soda-ash.element :as s])) - - - -;; avatar example - - -(defn avatar-no-soda [] - [:a.ui.basic.teal.label - [:img.ui.right.spaced.avatar.image - {:src "images/avatar/small/elliot.jpg"} - "Elliot"]]) - -(defn avatar-with-soda [] - [s/label {:soda {:tag :a - :basic? true - :color :teal}} - [s/image {:soda {:spaced :right - :avatar? true} - :src "images/avatar/small/elliot.jpg"}] - "Elliot"]) - - - -;; dynamic example - - -(defn wrap-element [ratom element] - [:div - (if (vector? element) element [element]) - [:div [:strong "Element State"]] - (edn/html-edn @ratom)]) - -(defonce app-state (reagent/atom {})) - -(defn option-btn [k v] - (let [current-v (get-in @app-state [:foo :bar :soda k])] - [:button {:on-click #(swap! app-state assoc-in [:foo :bar :soda k] v) - :style {:background-color (when (= current-v v) - "grey")}} - (name v)])) - -(def colors - [:red :orange :yellow :olive - :green :teal :blue :violet - :purple :pink :brown :grey - :black]) - -(def sizes - [:mini :tiny :small :large - :big :huge :massive]) - -(def icons - [:area-chart :bar-chart :camera-retro - :newspaper :film :line-chart - :photo :pie-chart :sound]) - -(defn icon [] - [s/icon {:soda {:ratom app-state - :path [:foo :bar] - :icon :sound - :color :violet - :size :large}}]) - - - -;; docs - - -(defcard-doc - " -# Soda-ash (version 0.1.0-beta) - -Soda-ash is an interface between clojurescript's [reagent](https://github.com/reagent-project/reagent) and [Semantic UI](http://semantic-ui.com/). - ---- **[github repo](https://github.com/gadfly361/soda-ash)** --- - - -## [FAQs](#!/soda_ash.a_faq_card) - -## Elements - -* [button](#!/soda_ash.elements.button_card) -* [container](#!/soda_ash.elements.container_card) -* [divider](#!/soda_ash.elements.divider_card) -* [flag](#!/soda_ash.elements.flag_card) -* [header](#!/soda_ash.elements.header_card) -* [icon](#!/soda_ash.elements.icon_card) -* [image](#!/soda_ash.elements.image_card) -* [input](#!/soda_ash.elements.input_card) -* [label](#!/soda_ash.elements.label_card) -* [list](#!/soda_ash.elements.list_card) -* [loader](#!/soda_ash.elements.loader_card) -* [rail](#!/soda_ash.elements.rail_card) -* [reveal](#!/soda_ash.elements.reveal_card) -* [segment](#!/soda_ash.elements.segment_card) -* [step](#!/soda_ash.elements.step_card) - -## Why use soda-ash? - -Semantic UI is awesome ... however, at its core, you are concatenating -ordered classes into a string. Soda-ash bubbles Semantic UI's classes -out of this regex-hell and softens them into clojurescript's familiar, -powerful, and unordered hash-map. - -What was once this: -" - -(mkdn-pprint-source avatar-no-soda) - -"Becomes this:" - - (mkdn-pprint-source avatar-with-soda)) - -(defcard-rg - [s/label {:soda {:tag :a - :basic? true - :color :teal}} - [s/image {:soda {:spaced :right - :avatar? true} - :src "images/avatar/small/elliot.jpg"}] - "Elliot"]) - - - -(defcard-doc -"`:soda` is a new attribute that is *added* to the normal attibute -map, and **replaces the `:class` attribute. `:soda` takes a hash-map -of unordered key-value pairs. Now you are able to take full advantage -of the hash-map data structure ... assoc, dissoc, merge etc. - -Finally, soda-ash allows you to place your `:soda` inside a reagent -atom at your desired path. This means you can swap! Semantic UI -classes and have your component reactively update. -" - (mkdn-pprint-source app-state) - - (mkdn-pprint-source icon)) - -(defcard-rg - [:div - [wrap-element app-state - [icon]] - [:div "Color: " - (for [color colors] - ^{:key color} - [option-btn :color color])] - - [:div "Size: " - (for [size sizes] - ^{:key size} - [option-btn :size size])] - [:div "Icon: " - (for [icon icons] - ^{:key icon} - [option-btn :icon icon])]]) - - - -(defcard-doc - " -## Usage - -Put the following in the `:dependencies` vector of your *project.clj* - -``` -[soda-ash \"0.1.0-beta\"] -``` - -Then require soda-ash in your namespace. - -``` -(ns foo.bar - (:require [soda-ash.element :as s])) -``` - -Finally, add Semantic UI to your index.html file: - -``` - -``` -") diff --git a/src/devcards/soda_ash/core_card.cljs b/src/devcards/soda_ash/core_card.cljs deleted file mode 100644 index b55e8de..0000000 --- a/src/devcards/soda_ash/core_card.cljs +++ /dev/null @@ -1,22 +0,0 @@ -(ns soda-ash.core-card - (:require-macros [devcards.core :as dc]) - (:require [soda-ash.a-faq-card] - [soda-ash.an-overview-card] - [soda-ash.elements.button-card] - [soda-ash.elements.container-card] - [soda-ash.elements.divider-card] - [soda-ash.elements.flag-card] - [soda-ash.elements.header-card] - [soda-ash.elements.icon-card] - [soda-ash.elements.image-card] - [soda-ash.elements.input-card] - [soda-ash.elements.label-card] - [soda-ash.elements.list-card] - [soda-ash.elements.loader-card] - [soda-ash.elements.rail-card] - [soda-ash.elements.reveal-card] - [soda-ash.elements.segment-card] - [soda-ash.elements.step-card])) - - -(dc/start-devcard-ui!) diff --git a/src/devcards/soda_ash/elements/button_card.cljs b/src/devcards/soda_ash/elements/button_card.cljs deleted file mode 100644 index 7896e88..0000000 --- a/src/devcards/soda_ash/elements/button_card.cljs +++ /dev/null @@ -1,803 +0,0 @@ -(ns soda-ash.elements.button-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [reagent.core :as reagent] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc - " -[back](#!/soda_ash.an_overview_card) - -# button - -* **base class** ui button -* **default tag** :button -* **:type** - *ANIMATED* :animated | :vertical-animated | :animated-fade | - *BASIC* :basic | :inverted-basic | - *EMPHASIS* :primary | :secondary | - *ICON* :icon | :labeled-icon | :right-labeled-icon | - *INVERTED* :inverted | :inverted-basc | - *LABELED* :labeled | :left-labeled | :labeled-icon | :right-labeled-icon -* **content** conditionals -* **:state** :default | :active | :disabled | :loading -* **variations** - :attached | :circular? | :color | :compact? | :consequence | - :floated | :fluid? | :size | :social | :toggle? - -where - -* **:attached** :top | :bottom | :left | :right -* **:color** - :red | :orange | :yellow | :olive | - :green | :teal | :blue | :violet | - :purple | :pink | :brown | :grey | - :black -* **consequence** :positive | :negative -* **:floated** :left | :right -* **size** - :mini | :tiny | :small | :medium | - :large | :big | :huge | :massive -* **:social** - :facebook | :twitter | :google-plus | - :vk | :linkedin | :instagram | :youtube - -Notes: - -* Although any tag can be used for a button, it will only be keyboard focusable if you use a `:button` tag or you add the property `:tab-index \"0\"`. Keyboard accessible buttons will preserve focus styles after click, which may be visually jarring. - -# Buttons - -* **base class* ui buttons -* **default tag** :div - ---- -") - - - -;; ==================== -;; TYPES - -(defcard-doc - "# TYPES") - - -;; Button - -(defn button [] - [:div - ;; :button - [s/button {:soda {:type :default}} - "button"] - - ;; :div - [s/button {:soda {:tag :div - :type :default} - :tab-index "0"} - "div"]]) - -(defcard-doc - " -### Button - -A standard button -" - (mkdn-pprint-source button)) - -(defcard-rg - [button]) - - -;; Emphasis - -(defn emphasis [] - [:div - [s/button {:soda {:type :primary}} - "primary"] - - [s/button {:soda {:tag :div - :type :secondary} - :tab-index "0"} - "secondary"]]) - -(defcard-doc - " -### Emphasis - -A button can be formatted to show different levels of emphasis - -Notes: - -* Setting your brand colors to primary and secondary color variables in site.variables will allow you to use your color theming for UI elements -" - (mkdn-pprint-source emphasis)) - -(defcard-rg - [emphasis]) - - -;; Animated - -(defn animated [] - [:div - [s/button {:soda {:type :animated}} - [:div.visible.content - "Next"] - [:div.hidden.content - [s/icon {:soda {:icon :right-arrow}}]]] - - [s/button {:soda {:type :vertical-animated}} - [:div.visible.content - [s/icon {:soda {:icon :shop}}]] - [:div.hidden.content - "Shop"]] - - [s/button {:soda {:type :animated-fade}} - [:div.visible.content - "Sign-up for a Pro account"] - [:div.hidden.content - "$12.99 a mont"]]]) - -(defcard-doc - " -### Animated - -A button can animate to show hidden content - -Notes: - -* The button will be automatically sized according to the visible content size. Make sure there is enough room for the hidden content to show -" - (mkdn-pprint-source animated)) - -(defcard-rg - [animated]) - - -;; Labeled - -(defn labeled [] - [:div - [s/button {:soda {:tag :div - :type :labeled} - :tab-index "0"} - [s/button {} - [s/icon {:soda {:icon :heart}}] - "Like"] - [s/label {:soda {:tag :a - :basic? true}} - "2,048"]] - - [s/button {:soda {:tag :div - :type :left-labeled} - :tab-index "0"} - [s/label {:soda {:tag :a - :type :right-pointing - :basic? true}} - "2,048"] - [s/button {} - [s/icon {:soda {:icon :heart}}] - "Like"]]]) - -(defcard-doc - " -### Labeled - -A button can appear alongside a label -" - (mkdn-pprint-source labeled)) - -(defcard-rg - [labeled]) - - -;; Icon - -(defn icon [] - [s/button {:soda {:type :icon}} - [s/icon {:soda {:icon :cloud}}]]) - -(defcard-doc - " -### Icon - -A button can have only an icon -" - (mkdn-pprint-source icon)) - -(defcard-rg - [icon]) - - - -;; Labeled-Icon - -(defn labeled-icon [] - [:div - [s/button {:soda {:type :labeled-icon}} - [s/icon {:soda {:icon :pause}}] - "Pause"] - - [s/button {:soda {:type :right-labeled-icon}} - [s/icon {:soda {:icon :right-arrow}}] - "Next"]]) - -(defcard-doc - " -### Labeled Icon - -A button can use an icon as a label -" - (mkdn-pprint-source labeled-icon)) - -(defcard-rg - [labeled-icon]) - - -;; Basic - -(defn basic [] - [s/button {:soda {:type :basic}} - [s/icon {:soda {:icon :user}}] - "Add Friend"]) - -(defcard-doc - " -### Basic - -A basic button is less pronounced -" - (mkdn-pprint-source basic)) - -(defcard-rg - [basic]) - - -;; Inverted - -(defn inverted [] - [s/segment {:soda {:inverted? true}} - [s/button {:soda {:type :inverted - :color :red}} - "Red"] - - [s/button {:soda {:type :inverted - :color :orange}} - "Orange"] - - [s/button {:soda {:type :inverted - :color :yellow}} - "Yellow"]]) - -(defcard-doc - " -### Inverted - -A button can be formatted to appear on dark backgrounds -" - (mkdn-pprint-source inverted)) - -(defcard-rg - [inverted]) - - -;; Inverted-Basic - -(defn inverted-basic [] - [s/segment {:soda {:inverted? true}} - [s/button {:soda {:type :inverted-basic - :color :red}} - "Red"] - - [s/button {:soda {:type :inverted-basic - :color :orange}} - "Orange"] - - [s/button {:soda {:type :inverted-basic - :color :yellow}} - "Yellow"]]) - -(defcard-doc - " -### Inverted Basic -" - (mkdn-pprint-source inverted-basic)) - -(defcard-rg - [inverted-basic]) - - - -;; ==================== -;; GROUPS - -(defcard-doc - "# GROUPS") - - -;; Buttons - -(defn buttons [] - [:div - [s/buttons {} - [s/button {} "One"] - [s/button {} "Two"] - [s/button {} "Three"]] - - [s/buttons {:soda {:color :red}} - [s/button {} "Four"] - [s/button {} "Five"] - [s/button {} "Six"]] - ]) - -(defcard-doc - " -### Buttons - -Buttons can exist together as a group -" - (mkdn-pprint-source buttons)) - -(defcard-rg - [buttons]) - - -;; Icon-Buttons - -(defn icon-buttons [] - [s/buttons {:soda {:type :icon}} - [s/button {} - [s/icon {:soda {:icon :align-left}}]] - [s/button {} - [s/icon {:soda {:icon :align-center}}]] - [s/button {} - [s/icon {:soda {:icon :align-right}}]] - [s/button {} - [s/icon {:soda {:icon :align-justify}}]] - ]) - -(defcard-doc - " -### Icon Buttons - -Button groups can show groups of icons -" - (mkdn-pprint-source icon-buttons)) - -(defcard-rg - [icon-buttons]) - - - -;; ==================== -;; CONTENT - -(defcard-doc - "# CONTENT") - - -;; Conditionals - -(defn conditionals [] - [s/buttons {} - [s/button {} "Cancel"] - [:div.or] ;; <-- attention - [s/button {:soda {:consequence :positive}} "Save"]]) - -(defcard-doc - " -### Conditionals - -Conditionals can exist together as a group -" - (mkdn-pprint-source conditionals)) - -(defcard-rg - [conditionals]) - - - -;; ==================== -;; STATES - -(defcard-doc - "# STATES") - - -;; Active - -(defn active [] - [s/button {:soda {:state :active}} - [s/icon {:soda {:icon :user}}] - "Follow"]) - -(defcard-doc - " -### Active - -A button can show it is currently the active user selection -" - (mkdn-pprint-source active)) - -(defcard-rg - [active]) - - -;; Disabled - -(defn disabled [] - [s/button {:soda {:state :disabled}} - [s/icon {:soda {:icon :user}}] - "Followed"]) - -(defcard-doc - " -### Disabled - -A button can show it is currently unable to be interacted with -" - (mkdn-pprint-source disabled)) - -(defcard-rg - [disabled]) - - -;; Loading - -(defn loading [] - [s/button {:soda {:state :loading}} - [s/icon {:soda {:icon :user}}] - "Follow"]) - -(defcard-doc - " -### Loading - -A button can show a loading indicator -" - (mkdn-pprint-source loading)) - -(defcard-rg - [loading]) - - - -;; ==================== -;; VARIATIONS - -(defcard-doc - "# VARIATIONS") - - -;; Social - -(defn social [] - [:div - [s/button {:soda {:social :facebook}} - [s/icon {:soda {:icon :facebook}}] - "Facebook"] - - [s/button {:soda {:social :twitter}} - [s/icon {:soda {:icon :twitter}}] - "Twitter"] - - [s/button {:soda {:social :google-plus}} - [s/icon {:soda {:icon :google-plus}}] - "Google Plus"] - - [s/button {:soda {:social :vk}} - [s/icon {:soda {:icon :vk}}] - "VK"] - - [s/button {:soda {:social :linkedin}} - [s/icon {:soda {:icon :linkedin}}] - "LinkedIn"] - - [s/button {:soda {:social :youtube}} - [s/icon {:soda {:icon :youtube}}] - "YouTube"]]) - -(defcard-doc - " -### Social - -A button can be formatted to link to a social website -" - (mkdn-pprint-source social)) - -(defcard-rg - [social]) - - -;; Size - -(defn size [] - [:div - [s/button {:soda {:size :mini}} - "Mini"] - [s/button {:soda {:size :tiny}} - "Tiny"] - [s/button {:soda {:size :small}} - "Small"] - [s/button {:soda {:size :medium}} - "Medium"] - [s/button {:soda {:size :large}} - "Large"] - [s/button {:soda {:size :big}} - "Big"] - [s/button {:soda {:size :huge}} - "Huge"] - [s/button {:soda {:size :massive}} - "Massive"]]) - -(defcard-doc - " -### Size - -A button can have different sizes -" - (mkdn-pprint-source size)) - -(defcard-rg - [size]) - - -;; Floated - -(defn floated [] - [:div - [s/button {:soda {:floated :left}} - "Left Floated"] - - [s/button {:soda {:floated :right}} - "Right Floated"] - - [h/fake-content] - ]) - -(defcard-doc - " -### Floated - -A button can be aligned to the left or right of its container -" - (mkdn-pprint-source floated)) - -(defcard-rg - [floated]) - - -;; Colored - -(defn colored [] - [:div - [s/button {:soda {:color :red}} - "Red"] - [s/button {:soda {:color :orange}} - "Orange"] - [s/button {:soda {:color :yellow}} - "Yellow"] - [s/button {:soda {:color :olive}} - "Olive"] - [s/button {:soda {:color :green}} - "Green"] - [s/button {:soda {:color :teal}} - "Teal"] - [s/button {:soda {:color :blue}} - "Blue"] - [s/button {:soda {:color :violet}} - "Violet"] - [s/button {:soda {:color :purple}} - "Purple"] - [s/button {:soda {:color :pink}} - "Pink"] - [s/button {:soda {:color :brown}} - "Brown"] - [s/button {:soda {:color :grey}} - "Grey"] - [s/button {:soda {:color :black}} - "Black"]]) - -(defcard-doc - " -### Colored - -A button can have different colors -" - (mkdn-pprint-source colored)) - -(defcard-rg - [colored]) - - -;; Compact - -(defn compact [] - [:div - [s/button {:soda {:compact? true}} - "Hold"] - - [s/button {:soda {:type :labeled-icon - :compact? true}} - [s/icon {:soda {:icon :pause}}] - "Pause"]]) - -(defcard-doc - " -### Compact - -A button can reduce its padding to fit into tighter spaces -" - (mkdn-pprint-source compact)) - -(defcard-rg - [compact]) - - -;; Toggle - -(defn toggle-state [state] - (if (= :active state) - :default - :active)) - -(defn toggle-text [state] - (if (= :active state) - "Voted" - "Vote")) - -(defn handle-on-click! [ratom state] - (swap! ratom update-in [:foo :soda :state] toggle-state)) - -(defn toggle-component [] - (let [ratom (reagent/atom {})] - (fn [] - (let [state (get-in @ratom [:foo :soda :state])] - [s/button {:soda {:ratom ratom - :path :foo - :toggle? true - :state :default} - :on-click #(handle-on-click! ratom state)} - (toggle-text state)])))) - -(defcard-doc - " -### Toggle - -A button can be formatted to toggle on and off -" - (mkdn-pprint-source toggle-state) - (mkdn-pprint-source toggle-text) - (mkdn-pprint-source handle-on-click!) - (mkdn-pprint-source toggle-component)) - -(defcard-rg - [toggle-component]) - - -;; Positive - -(defn positive [] - [s/button {:soda {:consequence :positive}} - "Positive"]) - -(defcard-doc - " -### Positive - -A button can hint towards a positive consequence -" - (mkdn-pprint-source positive)) - -(defcard-rg - [positive]) - - -;; Negative - -(defn negative [] - [s/button {:soda {:consequence :negative}} - "Negative"]) - -(defcard-doc - " -### Negative - -A button can hint towards a negative consequence -" - (mkdn-pprint-source negative)) - -(defcard-rg - [negative]) - - -;; Fluid - -(defn fluid [] - [s/button {:soda {:fluid? true}} - "Fluid"]) - -(defcard-doc - " -### Fluid - -A button can take the width of its container -" - (mkdn-pprint-source fluid)) - -(defcard-rg - [fluid]) - - -;; Circular - -(defn circular [] - [s/button {:soda {:type :icon - :circular? true}} - [s/icon {:soda {:icon :settings}}]]) - -(defcard-doc - " -### Circular - -A button can be circular -" - (mkdn-pprint-source circular)) - -(defcard-rg - [circular]) - - -;; Vertically Attached - -(defn vertically-attached [] - [:div - [s/button {:soda {:tag :div - :attached :top} - :tab-index "0"} - "Top"] - [s/segment {:soda {:attached :default}} - [h/fake-content]] - [s/button {:soda {:tag :div - :attached :bottom} - :tab-index "0"} - "Bottom"]]) - -(defcard-doc - " -### Vertically Attached - -A button can be attached to the top or bottom of other content -" - (mkdn-pprint-source vertically-attached)) - -(defcard-rg - [vertically-attached]) - - -;; Horizontally Attached - -(defn horizontally-attached [] - [:div - [s/button {:soda {:attached :left}} - "Left"] - [s/button {:soda {:attached :right}} - "Right"]]) - -(defcard-doc - " -### Horizontally Attached - -A button can be attached to the left or right of other content -" - (mkdn-pprint-source horizontally-attached)) - -(defcard-rg - [horizontally-attached]) diff --git a/src/devcards/soda_ash/elements/card_helpers.cljs b/src/devcards/soda_ash/elements/card_helpers.cljs deleted file mode 100644 index 57e0eb9..0000000 --- a/src/devcards/soda_ash/elements/card_helpers.cljs +++ /dev/null @@ -1,12 +0,0 @@ -(ns soda-ash.elements.card-helpers) - - -(defn fake-content [] - [:div - "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim - ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut - aliquip ex ea commodo consequat. Duis aute irure dolor in - reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla - pariatur. Excepteur sint occaecat cupidatat non proident, sunt in - culpa qui officia deserunt mollit anim id est laborum."]) diff --git a/src/devcards/soda_ash/elements/container_card.cljs b/src/devcards/soda_ash/elements/container_card.cljs deleted file mode 100644 index 2a73f7f..0000000 --- a/src/devcards/soda_ash/elements/container_card.cljs +++ /dev/null @@ -1,133 +0,0 @@ -(ns soda-ash.elements.container-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc -" -[back](#!/soda_ash.an_overview_card) - -# container - -* **base class** ui container -* **default tag** :div -* **:type** :default | :text -* **variations** :aligned | :fluid? - -where - -* **:aligned** :left | :right | :justified | :center - -Notes: - -The devcards have their own width, so some of the options like :fluid? aren't presented well. - ---- -") - - - -;; ==================== -;; TYPES - -(defcard-doc -"# TYPES") - - -;; Container - -(defn container [] - [s/container {:soda {:type :default}} - [h/fake-content]]) - -(defcard-doc - " -### Container - -A standard container -" - (mkdn-pprint-source container)) - -(defcard-rg - [container]) - - -;; Text-Container - -(defn text-container [] - [s/container {:soda {:type :text}} - [h/fake-content]]) - -(defcard-doc - " -### Text Container - -A container can reduce its maximum width to more naturally accomodate a single column of text - -Notes: - -* A text container is a simpler markup alternative to using a grid with a single column, and is designed to have a reasonable maximum width for displaying flowing text -" - (mkdn-pprint-source text-container)) - -(defcard-rg - [text-container]) - - -;; ==================== -;; VARIATIONS - -(defcard-doc -"# VARIATIONS") - - -;; Aligned - -(defn aligned [] - [:div - [s/container {:soda {:aligned :left}} - "Left Aligned"] - - [s/container {:soda {:aligned :center}} - "Center Aligned"] - - [s/container {:soda {:aligned :right}} - "Right Aligned"] - - [s/container {:soda {:aligned :justified}} - [h/fake-content]]]) - -(defcard-doc - " -### Text Alignment - -A container can specify its text alignment -" - (mkdn-pprint-source aligned)) - -(defcard-rg - [aligned]) - - -;; Fluid - -(defn fluid [] - [s/container {:soda {:fluid? true}} - [h/fake-content]]) - -(defcard-doc - " -### Text Alignment - -A fluid container has no maximum width -" - (mkdn-pprint-source fluid)) - -(defcard-rg - [fluid]) diff --git a/src/devcards/soda_ash/elements/divider_card.cljs b/src/devcards/soda_ash/elements/divider_card.cljs deleted file mode 100644 index f3e7840..0000000 --- a/src/devcards/soda_ash/elements/divider_card.cljs +++ /dev/null @@ -1,228 +0,0 @@ -(ns soda-ash.elements.divider-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc -" -[back](#!/soda_ash.an_overview_card) - -# divider - -* **base class** ui divider -* **default tag** :div -* **:type** - :default | :vertical | :horizontal -* **variations** clearing? | fitted? | hidden? | inverted? | section? - ---- -") - - - -;; ==================== -;; TYPES - -(defcard-doc -"# TYPES") - - -;; Divider - -(defn divider [] - [:div - [h/fake-content] - [s/divider {:soda {:type :default}}] - [h/fake-content]]) - -(defcard-doc - " -### Divider - -A standard divider - -Notes: - -* To add a divider between parts of a grid use a divided grid variation. -" - (mkdn-pprint-source divider)) - -(defcard-rg - [divider]) - - -;; Vertical - -(defn vertical [] - [:div.ui.two.column.very.relaxed.grid - [:div.column - [h/fake-content]] - - [s/divider {:soda {:type :vertical}} - "and"] - - [:div.column - [h/fake-content]]]) - -(defcard-doc - " -### Vertical Divider - -A divider can segment content vertically - -Notes: - -* Vertical dividers requires position: relative on the element that you would like to contain the divider -* A vertical divider will automatically swap to a horizontal divider at mobile resolutions when used inside a stackable grid -" - (mkdn-pprint-source vertical)) - -(defcard-rg - [vertical]) - - -;; Horizontal - -(defn horizontal [] - [:div - [h/fake-content] - [s/divider {:soda {:type :horizontal}} - [s/icon {:soda {:icon :bar-chart}}] - "Specifications"] - [h/fake-content]]) - -(defcard-doc - " -### Horizontal - -A divider can segment content horizontally - -Notes: - -* Horizontal dividers can also be used in combination with headers and icons to create different styles of dividers. -* Dividers will automatically vary the size of their dividing rules to match the length of your text -" - (mkdn-pprint-source horizontal)) - -(defcard-rg - [horizontal]) - - - -;; ==================== -;; VARIATIONS - -(defcard-doc -"# VARIATIONS") - - -;; Inverted - -(defn inverted [] - [s/segment {:soda {:inverted? true}} - [h/fake-content] - [s/divider {:soda {:inverted? true}}] - [h/fake-content]]) - -(defcard-doc - " -### Inverted - -A divider can have its colors inverted -" - (mkdn-pprint-source inverted)) - -(defcard-rg - [inverted]) - - -;; Fitted - -(defn fitted [] - [:div - [h/fake-content] - [s/divider {:soda {:fitted? true}}] - [h/fake-content]]) - -(defcard-doc - " -### Fitted - -A divider can be fitted, without any space above or below it. -" - (mkdn-pprint-source fitted)) - -(defcard-rg - [fitted]) - - -;; Hidden - -(defn hidden [] - [:div - [h/fake-content] - [s/divider {:soda {:hidden? true}}] - [h/fake-content]]) - -(defcard-doc - " -### Hidden - -A hidden divider divides content without creating a dividing line -" - (mkdn-pprint-source hidden)) - -(defcard-rg - [hidden]) - - -;; Section - -(defn section [] - [:div - [s/header {:soda {:tag :h3}} - "Section Two"] - [h/fake-content] - [s/divider {:soda {:section? true}}] - [s/header {:soda {:tag :h3}} - "Section Two"] - [h/fake-content]]) - -(defcard-doc - " -### Section - -A divider can provide greater margins to divide sections of content -" - (mkdn-pprint-source section)) - -(defcard-rg - [section]) - - -;; Clearing - -(defn clearing [] - [s/segment {:soda {:type :default}} - [s/header {:soda {:tag :h2 - :floated :right}} - "Floated Content"] - [s/divider {:soda {:clearing? true}}] - [h/fake-content]]) - -(defcard-doc - " -### Clearing - -A divider can clear the contents above it -" - (mkdn-pprint-source clearing)) - -(defcard-rg - [clearing]) diff --git a/src/devcards/soda_ash/elements/flag_card.cljs b/src/devcards/soda_ash/elements/flag_card.cljs deleted file mode 100644 index 6e00202..0000000 --- a/src/devcards/soda_ash/elements/flag_card.cljs +++ /dev/null @@ -1,43 +0,0 @@ -(ns soda-ash.elements.flag-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc -" -[back](#!/soda_ash.an_overview_card) - -# flag - -* **base class* flag -* **default tag** :i -* **:flag** see [Semantic UI docs](http://semantic-ui.com/elements/flag.html) - ---- -") - - -;; Flag - -(defn flag [] - [:div - [s/flag {:soda {:flag :ae}}] - [s/flag {:soda {:flag :france}}] - [s/flag {:soda {:flag :myanmar}}]]) - -(defcard-doc - " -### Flag - -A flag can use the two digit country code, the full name, or a common alias -" - (mkdn-pprint-source flag)) - -(defcard-rg - [flag]) diff --git a/src/devcards/soda_ash/elements/header_card.cljs b/src/devcards/soda_ash/elements/header_card.cljs deleted file mode 100644 index 7098800..0000000 --- a/src/devcards/soda_ash/elements/header_card.cljs +++ /dev/null @@ -1,457 +0,0 @@ -(ns soda-ash.elements.header-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc -" -[back](#!/soda_ash.an_overview_card) - -# header - -* **base class** ui header -* **default tag** :div -* **:type** - :default | - *HEADERS* :huge | :large | :medium | :small | :tiny - *ICON* :icon - *SUB* :sub -* **:state** :default | :disabled -* **content** image | icon | subheader -* **variations** - :aligned | :attached | :block? | :color | - :dividing? | :floated | inverted? - -where - -* **aligned** :right | :left | :justified | :center -* **:color** - :red | :orange | :yellow | :olive | - :green | :teal | :blue | :violet | - :purple | :pink | :brown | :grey | - :black -* **:floated** :right | :left - ---- -") - - - -;; ==================== -;; TYPES - -(defcard-doc -"# TYPES") - - -;; page headers - -(defn page-headers [] - [:div - [s/header {:soda {:tag :h1}} "First header"] - [s/header {:soda {:tag :h2}} "Second header"] - [s/header {:soda {:tag :h3}} "Third header"] - [s/header {:soda {:tag :h4}} "Fourth header"] - [s/header {:soda {:tag :h5}} "Fifth header"] - ]) - -(defcard-doc - " -### Page Headers - -Headers may be oriented to give the hierarchy of a section in the context of the page - -Notes: - -* Page headings are sized using rem and are not affected by surrounding content size. -" - (mkdn-pprint-source page-headers)) - -(defcard-rg - [page-headers]) - - -;; content headers - -(defn content-headers [] - [:div - [s/header {:soda {:type :huge}} "Huge"] - [s/header {:soda {:type :large}} "Large"] - [s/header {:soda {:type :medium}} "Medium"] - [s/header {:soda {:type :small}} "Small"] - [s/header {:soda {:type :tiny}} "Tiny"] - ]) - -(defcard-doc - " -### Content Headers - -Headers may be oriented to give the importance of a section in the context of the content that surrounds it. - -Notes: - -* Content headings are sized with *em* and are based on the font-size of their container. -" - (mkdn-pprint-source content-headers)) - -(defcard-rg - [content-headers]) - - -;; icon headers - -(defn icon-headers [] - [s/header {:soda {:tag :h2 - :type :icon}} - [s/icon {:soda {:icon :settings}}] - "Account Settings"]) - -(defcard-doc - " -### Icon Headers - -A header can be formatted to emphasize an icon -" - (mkdn-pprint-source icon-headers)) - -(defcard-rg - [icon-headers]) - - -;; sub headers - -(defn sub-headers [] - [:div - [s/header {:soda {:tag :h2 - :type :sub}} - "Price"] - [:span "$10.99"]]) - -(defcard-doc - " -### Sub Headers - -Headers may be formatted to label smaller or de-emphasized content. -" - (mkdn-pprint-source sub-headers)) - -(defcard-rg - [sub-headers]) - - - -;; ==================== -;; CONTENT - -(defcard-doc -"# Content") - - -;; image - -(defn image [] - [s/header {:soda {:tag :h2}} - [s/image {:src "images/icons/school.png"}] - [:div.content - "Learn More"]]) - -(defcard-doc - " -### Image - -A header may contain an image -" - (mkdn-pprint-source image)) - -(defcard-rg - [image]) - - -;; icon - -(defn icon [] - [s/header {:soda {:tag :h2}} - [s/icon {:soda {:icon :plug}}] - [:div.content - "Uptime Guarantee"]]) - -(defcard-doc - " -### Icon - -A header may contain an icon -" - (mkdn-pprint-source icon)) - -(defcard-rg - [icon]) - - -;; subheader - -(defn subheader [] - [:div - [s/header {:soda {:tag :h2}} - "H1" - [:div.sub.header ;; <-- attention (note: this isn't a soda header element) - "Sub Header"]] - - [s/header {:soda {:tag :h2}} - "H2" - [:div.sub.header - "Sub Header"]] - - [s/header {:soda {:tag :h3}} - "H3" - [:div.sub.header - "Sub Header"]] - - [s/header {:soda {:tag :h4}} - "H4" - [:div.sub.header - "Sub Header"]] - - [s/header {:soda {:tag :h5}} - "H5" - [:div.sub.header - "Sub Header"]]]) - -(defcard-doc - " -### Subheader - -Headers may contain subheaders -" - (mkdn-pprint-source subheader)) - -(defcard-rg - [subheader]) - - - -;; ==================== -;; STATES - -(defcard-doc -"# States") - - -(defn states [] - [s/header {:soda {:state :disabled}} - "Disabled Header"]) - -(defcard-doc - " -### Disabled - -A header can show that it is inactive -" - (mkdn-pprint-source states)) - -(defcard-rg - [states]) - - - -;; ==================== -;; VARIATIONS - -(defcard-doc -"# Variations") - - -;; dividing - -(defn dividing [] - [:div - [h/fake-content] - [s/header {:soda {:dividing? true}} - "Dividing Header"] - [h/fake-content]]) - -(defcard-doc - " -### Dividing - -A header can be formatted to divide itself from the content below it -" - (mkdn-pprint-source dividing)) - -(defcard-rg - [dividing]) - - -;; block - -(defn block [] - [:div - [s/header {:soda {:block? true}} - "Block Header"] - [h/fake-content]]) - -(defcard-doc - " -### Block - -A header can be formatted to appear inside a content block -" - (mkdn-pprint-source block)) - -(defcard-rg - [block]) - - -;; attached - -(defn attached [] - [:div - [s/header {:soda {:tag :h3 - :attached :top}} - "Top Attached"] - [s/segment {:soda {:attached :default}} - [h/fake-content]] - [s/header {:soda {:tag :h3 - :attached :default}} - "Attached"] - [s/segment {:soda {:attached :default}} - [h/fake-content]] - [s/header {:soda {:tag :h3 - :attached :bottom}} - "Bottom Attached"]]) - -(defcard-doc - " -### Attached - -A header can be attached to other content, like a segment -" - (mkdn-pprint-source attached)) - -(defcard-rg - [attached]) - - -;; floating - -(defn floating [] - [s/segment {:soda {:clearing? true}} - [s/header {:soda {:floated :right}} - "Go Forward"] - [s/header {:soda {:floated :left}} - "Go Back"] - [h/fake-content]]) - -(defcard-doc - " -### Floating - -A header can sit to the left or right of other content -" - (mkdn-pprint-source floating)) - -(defcard-rg - [floating]) - - -;; alignment - -(defn alignment [] - [s/segment {:soda {:type :default}} - [s/header {:soda {:aligned :right}} "Right"] - [s/header {:soda {:aligned :left}} "Left"] - [s/header {:soda {:aligned :justified}} - "This should take up the full width even if only one line"] - [s/header {:soda {:aligned :center}} "Center"]]) - -(defcard-doc - " -### Text Alignment - -A header can have its text aligned to a side -" - (mkdn-pprint-source alignment)) - -(defcard-rg - [alignment]) - - -;; colored - -(defn colored [] - [:div - [s/header {:soda {:color :red}} "Red"] - [s/header {:soda {:color :orange}} "Orange"] - [s/header {:soda {:color :yellow}} "Yellow"] - [s/header {:soda {:color :olive}} "Olive"] - [s/header {:soda {:color :green}} "Green"] - [s/header {:soda {:color :teal}} "Teal"] - [s/header {:soda {:color :blue}} "Blue"] - [s/header {:soda {:color :purple}} "Purple"] - [s/header {:soda {:color :violet}} "Violet"] - [s/header {:soda {:color :pink}} "Pink"] - [s/header {:soda {:color :brown}} "Brown"] - [s/header {:soda {:color :grey}} "Grey"] - ]) - -(defcard-doc - " -### Colored - -A header can be formatted with different colors -" - (mkdn-pprint-source colored)) - -(defcard-rg - [colored]) - - -;; inverted-colored - -(defn inverted-colored [] - [s/segment {:soda {:inverted? true}} - [s/header {:soda {:inverted? true - :color :red}} "Red"] - [s/header {:soda {:inverted? true - :color :orange}} "Orange"] - [s/header {:soda {:inverted? true - :color :yellow}} "Yellow"] - [s/header {:soda {:inverted? true - :color :olive}} "Olive"] - [s/header {:soda {:inverted? true - :color :green}} "Green"] - [s/header {:soda {:inverted? true - :color :teal}} "Teal"] - [s/header {:soda {:inverted? true - :color :blue}} "Blue"] - [s/header {:soda {:inverted? true - :color :purple}} "Purple"] - [s/header {:soda {:inverted? true - :color :violet}} "Violet"] - [s/header {:soda {:inverted? true - :color :pink}} "Pink"] - [s/header {:soda {:inverted? true - :color :brown}} "Brown"] - [s/header {:soda {:inverted? true - :color :grey}} "Grey"] - ]) - -(defcard-doc - " -### Inverted-Colored - -A header can have its colors inverted for contrast - -Notes: - -* Inverted headers use modified light versions of your site's color scheme that are adapted to have more contrast on dark background -" - (mkdn-pprint-source inverted-colored)) - -(defcard-rg - [inverted-colored]) diff --git a/src/devcards/soda_ash/elements/icon_card.cljs b/src/devcards/soda_ash/elements/icon_card.cljs deleted file mode 100644 index 3a578c4..0000000 --- a/src/devcards/soda_ash/elements/icon_card.cljs +++ /dev/null @@ -1,427 +0,0 @@ -(ns soda-ash.elements.icon-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc - " -[back](#!/soda_ash.an_overview_card) - -# icon - -* **base class** icon -* **default tag** :i -* **:icon** see [Semantic UI docs](http://semantic-ui.com/elements/icon.html) -* **:state** :default | :disabled | :loading -* **variations** - :bordered? | :circular? | :color | :corner? (inside icons) | - :flipped | :fitted? | :inverted? | :link? | :rotated | :size - -where - -* **:color** - :red | :orange | :yellow | :olive | - :green | :teal | :blue | :violet | - :purple | :pink | :brown | :grey | - :black -* **:flipped** :horizontally | :vertically -* **:rotated** :clockwise | :counterclockwise -* **:size** - :mini | :tiny | :small | :large | :big | :huge | :massive - -# icons - -* **base class** icons -* **default tag** :i - ---- -") - - - -;; ==================== -;; STATES - -(defcard-doc - "# STATES") - - -;; Disabled - -(defn disabled [] - [s/icon {:soda {:icon :users - :state :disabled}}]) - -(defcard-doc - " -### Disabled - -An icon can show that it is disabled -" - (mkdn-pprint-source disabled)) - -(defcard-rg - [disabled]) - - -;; Loading - -(defn loading [] - [:div - [s/icon {:soda {:icon :spinner - :state :loading}}] - - [s/icon {:soda {:icon :notched-circle - :state :loading}}] - - [s/icon {:soda {:icon :asterisk - :state :loading}}]]) - -(defcard-doc - " -### Loading - -An icon can be used as a simple loader -" - (mkdn-pprint-source loading)) - -(defcard-rg - [loading]) - - - -;; ==================== -;; VARIATIONS - -(defcard-doc - "# VARIATIONS") - - -;; Fitted - -(defn fitted [] - [:div - "Tight spacing" - [s/icon {:soda {:icon :help - :fitted? true}}] - "Tight spacing"]) - -(defcard-doc - " -### Fitted - -An icon can be fitted, without any space to the left or right of it. -" - (mkdn-pprint-source fitted)) - -(defcard-rg - [fitted]) - - - -;; Size - -(defn size [] - [:div - [s/icon {:soda {:icon :home :size :mini}}] - [s/icon {:soda {:icon :home :size :tiny}}] - [s/icon {:soda {:icon :home :size :small}}] - [s/icon {:soda {:icon :home}}] - [s/icon {:soda {:icon :home :size :large}}] - [s/icon {:soda {:icon :home :size :big}}] - [s/icon {:soda {:icon :home :size :huge}}] - [s/icon {:soda {:icon :home :size :massive}}]]) - -(defcard-doc - " -### Size - -An icon can vary in size -" - (mkdn-pprint-source size)) - -(defcard-rg - [size]) - - -;; Link - -(defn link [] - [:div - [s/icon {:soda {:icon :close - :link? true}}] - [s/icon {:soda {:icon :help - :link? true}}]]) - -(defcard-doc - " -### Link - -An icon can be formatted as a link -" - (mkdn-pprint-source link)) - -(defcard-rg - [link]) - - -;; Flipped - -(defn flipped [] - [:div - [s/icon {:soda {:icon :cloud - :flipped :horizontally}}] - [s/icon {:soda {:icon :cloud - :flipped :vertically}}]]) - -(defcard-doc - " -### Flipped - -An icon can be flipped -" - (mkdn-pprint-source flipped)) - -(defcard-rg - [flipped]) - - -;; Rotated - -(defn rotated [] - [:div - [s/icon {:soda {:icon :cloud - :rotated :clockwise}}] - [s/icon {:soda {:icon :cloud - :rotated :counterclockwise}}]]) - -(defcard-doc - " -### Rotated - -An icon can be rotated -" - (mkdn-pprint-source rotated)) - -(defcard-rg - [rotated]) - - -;; Circular - -(defn circular [] - [:div - [s/icon {:soda {:icon :users - :circular? true}}] - [s/icon {:soda {:icon :users - :circular? true - :color :teal}}] - [s/icon {:soda {:icon :users - :circular? true - :inverted? true}}] - [s/icon {:soda {:icon :users - :circular? true - :color :teal - :inverted? true}}]]) - -(defcard-doc - " -### Circular - -An icon can be formatted to appear circular -" - (mkdn-pprint-source circular)) - -(defcard-rg - [circular]) - - -;; Bordered - -(defn bordered [] - [:div - [s/icon {:soda {:icon :users - :bordered? true}}] - [s/icon {:soda {:icon :users - :bordered? true - :color :teal}}] - [s/icon {:soda {:icon :users - :bordered? true - :inverted? true}}] - [s/icon {:soda {:icon :users - :bordered? true - :color :teal - :inverted? true}}]]) - -(defcard-doc - " -### Bordered - -An icon can be formatted to appear bordered -" - (mkdn-pprint-source bordered)) - -(defcard-rg - [bordered]) - - -;; Colored - -(defn colored [] - [:div - [s/icon {:soda {:icon :users - :color :red}}] - [s/icon {:soda {:icon :users - :color :orange}}] - [s/icon {:soda {:icon :users - :color :yellow}}] - [s/icon {:soda {:icon :users - :color :olive}}] - [s/icon {:soda {:icon :users - :color :green}}] - [s/icon {:soda {:icon :users - :color :teal}}] - [s/icon {:soda {:icon :users - :color :blue}}] - [s/icon {:soda {:icon :users - :color :violet}}] - [s/icon {:soda {:icon :users - :color :purple}}] - [s/icon {:soda {:icon :users - :color :pink}}] - [s/icon {:soda {:icon :users - :color :brown}}] - [s/icon {:soda {:icon :users - :color :grey}}] - [s/icon {:soda {:icon :users - :color :black}}]]) - -(defcard-doc - " -### Colored - -An icon can be formatted with different colors -" - (mkdn-pprint-source colored)) - -(defcard-rg - [colored]) - - -;; Inverted - -(defn inverted [] - [s/segment {:soda {:inverted? true}} - [s/icon {:soda {:icon :users - :color :red - :inverted? true}}] - [s/icon {:soda {:icon :users - :color :orange - :inverted? true}}] - [s/icon {:soda {:icon :users - :color :yellow - :inverted? true}}] - [s/icon {:soda {:icon :users - :color :olive - :inverted? true}}] - [s/icon {:soda {:icon :users - :color :green - :inverted? true}}] - [s/icon {:soda {:icon :users - :color :teal - :inverted? true}}] - [s/icon {:soda {:icon :users - :color :blue - :inverted? true}}] - [s/icon {:soda {:icon :users - :color :violet - :inverted? true}}] - [s/icon {:soda {:icon :users - :color :purple - :inverted? true}}] - [s/icon {:soda {:icon :users - :color :pink - :inverted? true}}] - [s/icon {:soda {:icon :users - :color :brown - :inverted? true}}] - [s/icon {:soda {:icon :users - :color :grey - :inverted? true}}] - [s/icon {:soda {:icon :users - :color :black - :inverted? true}}]]) - -(defcard-doc - " -### Inverted - -An icon can have its colors inverted for contrast -" - (mkdn-pprint-source inverted)) - -(defcard-rg - [inverted]) - - - - -;; ==================== -;; GROUPS - -(defcard-doc - "# GROUPS") - - -;; Icons - -(defn icons [] - [:div - [s/icons {:soda {:size :huge}} - [s/icon {:soda {:icon :thin-circle - :size :big}}] - [s/icon {:soda {:icon :user}}]] - - [s/icons {:soda {:size :huge}} - [s/icon {:soda {:icon :loading-sun - :color :teal - :size :big}}] - [s/icon {:soda {:icon :user}}]]]) - -(defcard-doc - " -### Icons - -Several icons can be used together as a group -" - (mkdn-pprint-source icons)) - -(defcard-rg - [icons]) - - -;; Corner-Icons - -(defn corner-icons [] - [:div - [s/icons {:soda {:size :huge}} - [s/icon {:soda {:icon :puzzle}}] - [s/icon {:soda {:icon :add - :corner? true}}]]]) - -(defcard-doc - " -### Corner Icons - -A group of icons can display a smaller corner icon -" - (mkdn-pprint-source corner-icons)) - -(defcard-rg - [corner-icons]) diff --git a/src/devcards/soda_ash/elements/image_card.cljs b/src/devcards/soda_ash/elements/image_card.cljs deleted file mode 100644 index 5485691..0000000 --- a/src/devcards/soda_ash/elements/image_card.cljs +++ /dev/null @@ -1,413 +0,0 @@ -(ns soda-ash.elements.image-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc - " -[back](#!/soda_ash.an_overview_card) - -# image - -* **base class** ui image -* **default tag** :img -* **:state** :hidden | :disabled -* **variations** - :aligned | :avatar? | :bordered? | :centered? | - :circular? | :floated | :fluid? | :rounded? | :size | - :spaced | :state - -where - -* **:aligned** :top | :middle | :bottom -* **:floated** :left | :right -* **:size** :mini | :tiny | :small | :medium | :large | :big | :huge | :massive -* **:spaced** :default | :left | :right -* **:state** :default | :hidden | :disabled - -# images - -* **base class** ui images -* **default tag** :div - ---- -") - - - -;; ==================== -;; TYPES - -(defcard-doc - "# TYPES") - - -;; Image - -(defn image [] - [s/image {:soda {:size :small} - :src "images/wireframe/image.png"}]) - -(defcard-doc - " -### Image - -An image -" - (mkdn-pprint-source image)) - -(defcard-rg - [image]) - - -;; Image-Link - -(defn image-link [] - [:a {:href "http://google.com" - :target "_blank"} - [s/image {:soda {:size :medium} - :src "images/wireframe/image.png"}]]) - -(defcard-doc - " -### Image Link - -An image can be formatted to link to other content -" - (mkdn-pprint-source image-link)) - -(defcard-rg - [image-link]) - - - -;; ==================== -;; STATES - -(defcard-doc - "# STATES") - - -;; hidden - -(defn hidden [] - [s/image {:soda {:state :hidden} - :src "images/wireframe/image.png"}]) - -(defcard-doc - " -### Hidden - -An image can be hidden -" - (mkdn-pprint-source hidden)) - -(defcard-rg - [hidden]) - - -;; disabled - -(defn disabled [] - [s/image {:soda {:state :disabled - :size :medium} - :src "images/wireframe/image.png"}]) - -(defcard-doc - " -### Disabled - -An image can show that it is disabled and cannot be selected -" - (mkdn-pprint-source disabled)) - -(defcard-rg - [disabled]) - - - -;; ==================== -;; VARIATIONS - -(defcard-doc - "# VARIATIONS") - - -;; avatar - -(defn avatar [] - [:div - [s/image {:soda {:avatar? true} - :src "images/wireframe/image.png"}] - "Username"]) - -(defcard-doc - " -### Avatar - -An image may be formatted to appear inline with text as an avatar -" - (mkdn-pprint-source avatar)) - -(defcard-rg - [avatar]) - - -;; bordered - -(defn bordered [] - [s/image {:soda {:bordered? true - :size :medium} - :src "images/wireframe/white-image.png"}]) - -(defcard-doc - " -### Bordered - -An image may include a border to emphasize the edges of white or transparent content -" - (mkdn-pprint-source bordered)) - -(defcard-rg - [bordered]) - - -;; fluid - -(defn fluid [] - [s/image {:soda {:fluid? true} - :src "images/wireframe/image.png"}]) - -(defcard-doc - " -### Fluid - -An image can take up the width of its container -" - (mkdn-pprint-source fluid)) - -(defcard-rg - [fluid]) - - -;; rounded - -(defn rounded [] - [s/image {:soda {:rounded? true - :size :medium} - :src "images/wireframe/image.png"}]) - -(defcard-doc - " -### Rounded - -An image may appear rounded -" - (mkdn-pprint-source rounded)) - -(defcard-rg - [rounded]) - - -;; circular - -(defn circular [] - [s/image {:soda {:circular? true - :size :medium} - :src "images/wireframe/square-image.png"}]) - -(defcard-doc - " -### Circular - -An image may appear circular -" - (mkdn-pprint-source circular)) - -(defcard-rg - [circular]) - - -;; aligned - -(defn aligned [] - [:div - [s/image {:soda {:aligned :top - :size :tiny} - :src "images/wireframe/square-image.png"}] - "Top Aligned" - - [s/divider {:soda {:type :default}}] - - [s/image {:soda {:aligned :middle - :size :tiny} - :src "images/wireframe/square-image.png"}] - "Middle Aligned" - - [s/divider {:soda {:type :default}}] - - [s/image {:soda {:aligned :bottom - :size :tiny} - :src "images/wireframe/square-image.png"}] - "Bottom Aligned"]) - -(defcard-doc - " -### Vertically Aligned - -An image can specify its vertical alignment -" - (mkdn-pprint-source aligned)) - -(defcard-rg - [aligned]) - - -;; centered - -(defn centered [] - [s/segment {:soda {:type :default}} - [s/image {:soda {:centered? true - :size :medium} - :src "images/wireframe/square-image.png"}] - [h/fake-content]]) - -(defcard-doc - " -### Centered - -An image can appear centered in a content block -" - (mkdn-pprint-source centered)) - -(defcard-rg - [centered]) - - -;; spaced - -(defn spaced [] - [s/segment {:soda {:type :default}} - [s/image {:soda {:spaced :right - :size :mini} - :src "images/wireframe/square-image.png"}] - - "foo bar baz" - - [s/image {:soda {:spaced :default - :size :mini} - :src "images/wireframe/square-image.png"}] - - "foo bar baz" - - [s/image {:soda {:spaced :left - :size :mini} - :src "images/wireframe/square-image.png"}] - ]) - -(defcard-doc - " -### Spaced - -An image can appear spaced in a content block -" - (mkdn-pprint-source spaced)) - -(defcard-rg - [spaced]) - - -;; floated - -(defn floated [] - [s/segment {:soda {:type :default}} - [s/image {:soda {:floated :left - :size :small} - :src "images/wireframe/square-image.png"}] - [h/fake-content] - [h/fake-content] - - [s/image {:soda {:floated :right - :size :small} - :src "images/wireframe/square-image.png"}] - [h/fake-content] - [h/fake-content] - ]) - -(defcard-doc - " -### Floated - -An image can sit to the left or right of other content -" - (mkdn-pprint-source floated)) - -(defcard-rg - [floated]) - - -;; size - -(defn size [] - [:div - [s/image {:soda {:size :mini} - :src "images/wireframe/square-image.png"}] - [s/image {:soda {:size :tiny} - :src "images/wireframe/square-image.png"}] - [s/image {:soda {:size :small} - :src "images/wireframe/square-image.png"}] - [s/image {:soda {:size :medium} - :src "images/wireframe/square-image.png"}] - [s/image {:soda {:size :large} - :src "images/wireframe/square-image.png"}] - [s/image {:soda {:size :big} - :src "images/wireframe/square-image.png"}] - [s/image {:soda {:size :huge} - :src "images/wireframe/square-image.png"}] - [s/image {:soda {:size :massive} - :src "images/wireframe/square-image.png"}]]) - -(defcard-doc - " -### Size - -An image may appear at different sizes -" - (mkdn-pprint-source size)) - -(defcard-rg - [size]) - - - -;; ==================== -;; GROUPS - -(defcard-doc - "# GROUPS") - - -;; Groups-Size - -(defn groups-size [] - [s/images {:soda {:size :tiny}} - [s/image {:src "images/wireframe/image.png"}] - [s/image {:src "images/wireframe/image.png"}] - [s/image {:src "images/wireframe/image.png"}]]) - -(defcard-doc - " -### Size - -A group of images can be formatted to have the same size. -" - (mkdn-pprint-source groups-size)) - -(defcard-rg - [groups-size]) diff --git a/src/devcards/soda_ash/elements/input_card.cljs b/src/devcards/soda_ash/elements/input_card.cljs deleted file mode 100644 index 14c0650..0000000 --- a/src/devcards/soda_ash/elements/input_card.cljs +++ /dev/null @@ -1,416 +0,0 @@ -(ns soda-ash.elements.input-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc -" -[back](#!/soda_ash.an_overview_card) - -# input - -* **base class** ui input -* **default tag** :div -* **:state** :focus | :loading | :disabled | :error -* **variations** - :action | :fluid? | :icon | :inverted? | :labeled | :transparent? | - :size - -where - -* **:action** :default | :left -* **:icon** :default | :left -* **:labeled** :default | :right | :left-corner | :corner -* **size** - :mini | :tiny | :small | :large | :big | :huge | :massive - ---- -") - - -;; Input - -(defn input [] - [s/input {} - [:input {:type "text" - :placeholder "Search..."}]]) - -(defcard-doc - " -### Input - -A standard input -" - (mkdn-pprint-source input)) - -(defcard-rg - [input]) - - - -;; ==================== -;; STATES - -(defcard-doc -"# STATES") - - -;; Focus - -(defn focus [] - [s/input {:soda {:state :focus}} - [:input {:type "text" - :placeholder "Search..."}]]) - -(defcard-doc - " -### Focus - -An input field can show a user is currently interacting with it -" - (mkdn-pprint-source focus)) - -(defcard-rg - [focus]) - - -;; Loading - -(defn loading [] - [s/input {:soda {:icon :left - :state :loading}} - [:input {:type "text" - :placeholder "Search..."}] - [s/icon {:soda {:icon :search}}]]) - -(defcard-doc - " -### Loading - -An icon input field can show that it is currently loading data - -Notes: - -* Loading inputs automatically modify the input's icon on loading state to show loading indication -" - (mkdn-pprint-source loading)) - -(defcard-rg - [loading]) - - -;; Disabled - -(defn disabled [] - [s/input {:soda {:state :disabled}} - [:input {:type "text" - :placeholder "Search..."}]]) - -(defcard-doc - " -### Disabled - -An input field can show that it is disabled -" - (mkdn-pprint-source disabled)) - -(defcard-rg - [disabled]) - - -;; Error - -(defn error [] - [s/input {:soda {:state :error}} - [:input {:type "text" - :placeholder "Search..."}]]) - -(defcard-doc - " -### Error - -An input field can show the data contains errors -" - (mkdn-pprint-source error)) - -(defcard-rg - [error]) - - - -;; ==================== -;; VARIATIONS - -(defcard-doc -"# VARIATIONS") - - -;; Icon - -(defn icon [] - [:div - [s/input {:soda {:icon :default}} - [:input {:type "text" - :placeholder "Search..."}] - [s/icon {:soda {:icon :search}}]] - - [s/divider {}] - - [s/input {:soda {:icon :left}} - [:input {:type "text" - :placeholder "Search users..."}] - [s/icon {:soda {:icon :users}}]]]) - -(defcard-doc - " -### Icon - -An input can be formatted with an icon - -Notes: - -* Input icons do not receive pointer-events unless a link icon is used. -" - (mkdn-pprint-source icon)) - -(defcard-rg - [icon]) - - -;; Labeled - -(defn labeled [] - [s/input {:soda {:labeled :default}} - [s/label {} "http://"] - [:input {:type "text" :placeholder "mysite.com"}]]) - -(defcard-doc - " -### Labeled - -An input can be formatted with a label -" - (mkdn-pprint-source labeled)) - -(defcard-rg - [labeled]) - - -;; Labeled-right - -(defn labeled-right [] - [s/input {:soda {:labeled :right}} - [:input {:type "text" :placeholder "Enter weight.."}] - [s/label {:soda {:basic? true}} "kg"]]) - -(defcard-doc - (mkdn-pprint-source labeled-right)) - -(defcard-rg - [labeled-right]) - - -;; Labeled-right2 - -(defn labeled-right2 [] - [s/input {:soda {:labeled :right}} - [s/label {} "$"] - [:input {:type "text" :placeholder "Amount"}] - [s/label {:soda {:basic? true}} ".00"] -]) - -(defcard-doc - (mkdn-pprint-source labeled-right2)) - -(defcard-rg - [labeled-right2]) - - -;; Labeled-right-icon-left - -(defn labeled-right-icon-left [] - [s/input {:soda {:labeled :right - :icon :left}} - [s/icon {:soda {:icon :tags}}] - [:input {:type "text" :placeholder "Enter tags"}] - [s/label {:soda {:tag :a - :type :tag}} "Add Tag"]]) - -(defcard-doc - (mkdn-pprint-source labeled-right-icon-left)) - -(defcard-rg - [labeled-right-icon-left]) - - -;; Labeled-left-corner - -(defn labeled-left-corner [] - [s/input {:soda {:labeled :left-corner}} - [:input {:type "text" :placeholder "Search"}] - [s/label {:soda {:type :left-corner}} - [s/icon {:soda {:icon :asterisk}}]]]) - -(defcard-doc - (mkdn-pprint-source labeled-left-corner)) - -(defcard-rg - [labeled-left-corner]) - - -;; Labeled-right-corner - -(defn labeled-right-corner [] - [s/input {:soda {:labeled :corner}} - [:input {:type "text" :placeholder "Search"}] - [s/label {:soda {:type :right-corner}} - [s/icon {:soda {:icon :asterisk}}]]]) - -(defcard-doc - (mkdn-pprint-source labeled-right-corner)) - -(defcard-rg - [labeled-right-corner]) - - -;; action - -(defn action [] - [s/input {:soda {:action :default}} - [:input {:type "text" :placeholder "Search"}] - [s/button {:on-click #(js/console.log "clicked!")} - "Search"]]) - -(defcard-doc - " -### Action - -An input can be formatted to alert the user to an action they may perform -" - (mkdn-pprint-source action)) - -(defcard-rg - [action]) - - -;; left-action - -(defn left-action [] - [s/input {:soda {:action :left}} - [s/button {:soda {:type :labeled-icon - :color :teal} - :on-click #(js/console.log "clicked!")} - [s/icon {:soda {:icon :cart}}] - "Checkout"] - [:input {:type "text" :value "52.03"}]]) - -(defcard-doc - (mkdn-pprint-source left-action)) - -(defcard-rg - [left-action]) - - -;; transparent - -(defn transparent [] - [s/input {:soda {:transparent? true}} - [:input {:type "text" :placeholder "Search..."}]]) - -(defcard-doc - " -### Transparent - -A transparent input has no background -" - (mkdn-pprint-source transparent)) - -(defcard-rg - [transparent]) - - -;; inverted - -(defn inverted [] - [s/segment {:soda {:inverted? true}} - [s/input {:soda {:inverted? true}} - [:input {:type "text" :placeholder "Search..."}]]]) - -(defcard-doc - " -### Inverted - -An input can be formatted to appear on dark backgrounds -" - (mkdn-pprint-source inverted)) - -(defcard-rg - [inverted]) - - -;; fluid - -(defn fluid [] - [s/input {:soda {:fluid? true}} - [:input {:type "text" :placeholder "Search..."}]]) - -(defcard-doc - " -### Fluid - -An input can take the size of its container -" - (mkdn-pprint-source fluid)) - -(defcard-rg - [fluid]) - - -;; size - -(defn size [] - [:div - [s/input {:soda {:size :mini}} - [:input {:type "text" :placeholder "Search mini..."}]] - - [s/divider {:soda {:hidden? true}}] - [s/input {:soda {:size :small}} - [:input {:type "text" :placeholder "Search small..."}]] - - [s/divider {:soda {:hidden? true}}] - [s/input {:soda {:size :large}} - [:input {:type "text" :placeholder "Search large..."}]] - - [s/divider {:soda {:hidden? true}}] - [s/input {:soda {:size :big}} - [:input {:type "text" :placeholder "Search big..."}]] - - [s/divider {:soda {:hidden? true}}] - [s/input {:soda {:size :huge}} - [:input {:type "text" :placeholder "Search huge..."}]] - - [s/divider {:soda {:hidden? true}}] - [s/input {:soda {:size :massive}} - [:input {:type "text" :placeholder "Search massive..."}]] - ]) - -(defcard-doc - " -### Size - -An input can vary in size - -Notes: - -* Inputs will automatically size themselves unless you manually declare a width -" - (mkdn-pprint-source size)) - -(defcard-rg - [size]) diff --git a/src/devcards/soda_ash/elements/label_card.cljs b/src/devcards/soda_ash/elements/label_card.cljs deleted file mode 100644 index 8b2e31a..0000000 --- a/src/devcards/soda_ash/elements/label_card.cljs +++ /dev/null @@ -1,737 +0,0 @@ -(ns soda-ash.elements.label-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc -" -[back](#!/soda_ash.an_overview_card) - -# label - -* **base class** ui label -* **default tag** :div -* **:type** - :default | - *ATTACHED* - :top-attached | - :bottom-attached | - :top-right-attached | - :top-left-attached | - :bottom-left-attached | - :bottom-right-attached | - *CORNER* - :left-corner | - :right-corner | - *FLOATING* - :floating | - *HORIZONTAL* - :horizontal | - *IMAGE* - :image | - *POINTING* - :pointing | - :pointing-below | - :left-pointing | - :right-pointing | - *TAG* - :tag | - *RIBBON* - :ribbon | - :right-ribbon -* **content** detail | icon | image | link -* **variations** :basic? | :circular? | :color | :size - -where - -* **:color** - :red | :orange | :yellow | :olive | - :green | :teal | :blue | :violet | - :purple | :pink | :brown | :grey | - :black -* **:size** - :mini | :tiny | :small | :large | :big | :huge | :massive - -# labels - -* **base class** ui labels -* **default tag** :div - ---- -") - - - -;; ==================== -;; TYPES - -(defcard-doc -"# TYPES") - - -;; Label - -(defn label [] - [s/label {:soda {:type :default}} - [s/icon {:soda {:icon :mail}}] - "23"]) - -(defcard-doc - " -### Label - -A label -" - (mkdn-pprint-source label)) - -(defcard-rg - [label]) - - -;; Image - -(defn image [] - [:div - [s/label {:soda {:tag :a - :type :image}} - [s/image {:src "images/avatar/small/joe.jpg"}] - "Joe" - [s/icon {:soda {:icon :delete}}]] - [s/label {:soda {:tag :a - :type :image}} - [s/image {:src "images/avatar/small/elliot.jpg"}] - "Elliot" - [s/icon {:soda {:icon :delete}}]] - [s/label {:soda {:tag :a - :type :image}} - [s/image {:src "images/avatar/small/stevie.jpg"}] - "Stevie" - [s/icon {:soda {:icon :delete}}]] - ]) - -(defcard-doc - " -### Image - -A label can be formatted to emphasize an image -" - (mkdn-pprint-source image)) - -(defcard-rg - [image]) - - -;; Pointing - -(defn pointing [] - [:form.ui.fluid.form - [:div.field - [:input {:type "text" :placeholder "Some text.."}] - [s/label {:soda {:type :pointing}} - "Please enter a value"]] - - [:div.field - [s/label {:soda {:type :pointing-below}} - "Please enter a value"] - [:input {:type "text" :placeholder "Some text.."}]] - - [:div.inline.field - [:input {:type "text" :placeholder "Some text.."}] - [s/label {:soda {:type :left-pointing - :color :red - :basic? :red}} - "Please enter a value"]] - - [:div.inline.field - [s/label {:soda {:type :right-pointing}} - "Please enter a value"] - [:input {:type "text" :placeholder "Some text.."}]] - ]) - -(defcard-doc - " -### Pointing - -A label can point to content next to it -" - (mkdn-pprint-source pointing)) - -(defcard-rg - [pointing]) - - -;; Corner - -(defn corner [] - [:div.ui.two.column.grid - [:div.column - [:div.ui.fluid.image - [s/label {:soda {:type :left-corner}} - [s/icon {:soda {:icon :heart}}]] - [s/image {:src "images/wireframe/image.png"}] - ]] - - [:div.column - [:div.ui.fluid.image - [s/label {:soda {:type :right-corner - :color :red}} - [s/icon {:soda {:icon :save}}]] - [s/image {:src "images/wireframe/image.png"}] - ]]]) - -(defcard-doc - " -### Corner - -A label can position itself in the corner of an element - -Notes: - -* Regarding style (not soda): A corner label must be positioned inside a container with *position: relative* to display properly. If a container is rounded you will need to add *overflow:hidden* to the container to produce a rounded label. -" - (mkdn-pprint-source corner)) - -(defcard-rg - [corner]) - - -;; Tag - -(defn tag [] - [:div - [s/label {:soda {:tag :a - :type :tag}} - "New"] - - [s/label {:soda {:tag :a - :type :tag - :color :red}} - "Upcoming"] - - [s/label {:soda {:tag :a - :type :tag - :color :teal}} - "Featured"]]) - -(defcard-doc - " -### Tag - -A label can appear as a tag -" - (mkdn-pprint-source tag)) - -(defcard-rg - [tag]) - - -;; Ribbon - -(defn ribbon [] - [:div.ui.two.column.grid - [:div.column - [s/segment {:soda {:type :raised}} - [s/label {:soda {:type :ribbon - :color :red}} - "Overview"] - [:span "Account Details"] - [h/fake-content] - ]] - - [:div.column - [s/segment {:soda {:type :raised}} - [s/label {:soda {:type :right-ribbon - :color :orange}} - "Specs"] - [h/fake-content]]]]) - -(defcard-doc - " -### Ribbon - -A label can appear as a ribbon attaching itself to an element. -" - (mkdn-pprint-source ribbon)) - -(defcard-rg - [ribbon]) - - - -;; Attached - -(defn attached [] - [:div - [s/segment {:soda {:type :default}} - [s/label {:soda {:type :top-attached}} "HTML"] - [h/fake-content]] - - [s/segment {:soda {:type :default}} - [s/label {:soda {:type :bottom-attached}} "CSS"] - [h/fake-content]] - - [s/segment {:soda {:type :default}} - [s/label {:soda {:type :top-right-attached}} "Code"] - [h/fake-content]] - - [s/segment {:soda {:type :default}} - [s/label {:soda {:type :top-left-attached}} "View"] - [h/fake-content]] - - [s/segment {:soda {:type :default}} - [s/label {:soda {:type :bottom-left-attached}} "User View"] - [h/fake-content]] - - [s/segment {:soda {:type :default}} - [s/label {:soda {:type :bottom-right-attached}} "Admin View"] - [h/fake-content]]]) - -(defcard-doc - " -### Attached - -A label can attach to a content segment - -Notes: - -* Attached labels attempt to intelligently pad other content to account for their position, but may not in all cases apply this padding correctly. If this happens you may need to manually correct the padding of the other elements inside the container. -" - (mkdn-pprint-source attached)) - -(defcard-rg - [attached]) - - -;; Horizontal - -(defn horizontal [] - [:div.ui.divided.selection.list - [:a.item - [s/label {:soda {:type :horizontal - :color :red}} - "Fruit"] - "Kumquats"] - [:a.item - [s/label {:soda {:type :horizontal - :color :purple}} - "Candy"] - "Ice Cream"] - ]) - -(defcard-doc - " -### Horizontal - -A horizontal label is formatted to label content along-side it horizontally -" - (mkdn-pprint-source horizontal)) - -(defcard-rg - [horizontal]) - - -;; Floating - -(defn floating [] - [:div.ui.compact.menu - [:a.item - [s/icon {:soda {:icon :mail}}] - "Messages" - [s/label {:soda {:type :floating - :color :red}} - "22"]] - - [:a.item - [s/icon {:soda {:icon :users}}] - "Friends" - [s/label {:soda {:type :floating - :color :teal}} - "22"]]]) - -(defcard-doc - " -### Floating - -A label can float above another element -" - (mkdn-pprint-source floating)) - -(defcard-rg - [floating]) - - - -;; ==================== -;; CONTENT - -(defcard-doc -"# CONTENT") - - -;; Detail - -(defn detail [] - [s/label {:soda {:type :default}} - "Dogs" - [:div.detail "214"]]) - -(defcard-doc - " -### Detail - -A label can contain a detail -" - (mkdn-pprint-source detail)) - -(defcard-rg - [detail]) - - -;; Icon - -(defn icon [] - [:div - [s/label {:soda {:tag :a}} - [s/icon {:soda {:icon :mail}}] - "Mail"] - - [s/label {:soda {:tag :a}} - "Tag" - [s/icon {:soda {:icon :delete}}]]]) - -(defcard-doc - " -### Icon - -A label can contain a icon -" - (mkdn-pprint-source icon)) - -(defcard-rg - [icon]) - - -;; Image - -(defn content-image [] - [:div - [s/label {:soda {:tag :a}} - [s/image {:soda {:spaced :right - :avatar? true} - :src "images/avatar/small/elliot.jpg"}] - "Elliot"] - - [s/label {:soda {:tag :a}} - [:img {:src "images/avatar/small/stevie.jpg"}] - "Stevie"]]) - -(defcard-doc - " -### Image - -A label can include an image -" - (mkdn-pprint-source content-image)) - -(defcard-rg - [content-image]) - - -;; Link - -(defn content-link [] - [s/label {:soda {:tag :a}} - [s/icon {:soda {:icon :mail}}] - "23"]) - -(defcard-doc - " -### Link - -A label can be a link or contain an item that links -" - (mkdn-pprint-source content-link)) - -(defcard-rg - [content-link]) - - - -;; ==================== -;; VARIATIONS - -(defcard-doc - "# VARIATIONS") - -(def colors - [:red :orange :yellow :olive - :green :teal :blue :violet - :purple :pink :brown :grey - :black]) - - -;; Circular - -(defn circle [color] - [s/label {:soda {:tag :a - :circular? true - :color color}} - "2"]) - -(defn circular [] - [:div - (for [color colors] - ^{:key color} - [circle color])]) - -(defcard-doc - " -### Circular - -A label can be circular -" - (mkdn-pprint-source circular)) - -(defcard-rg - [circular]) - - -;; Circular-Empty - -(defn circle-empty [color] - [s/label {:soda {:tag :a - :circular? true - :color color - :empty? true}}]) - -(defn circular-empty [] - [:div - (for [color colors] - ^{:key color} - [circle-empty color])]) - -(defcard-doc - (mkdn-pprint-source circular-empty)) - -(defcard-rg - [circular-empty]) - - -;; Basic - -(defn basic [] - [:div - [s/label {:soda {:tag :a - :basic? true}} - "Basic"] - - [s/label {:soda {:tag :a - :type :pointing - :basic? true - :color :blue}} - "Pointing"] - - [s/label {:soda {:type :image - :basic? true}} - [s/image {:src "images/avatar/small/elliot.jpg"}] - "Elliot"]]) - -(defcard-doc - " -### Basic - -A label can reduce its complexity -" - (mkdn-pprint-source basic)) - -(defcard-rg - [basic]) - - -;; Colored - -(defn colored [] - [:div - [s/label {:soda {:tag :a - :color :red}} - "Red"] - [s/label {:soda {:tag :a - :color :orange}} - "Orange"] - [s/label {:soda {:tag :a - :color :yellow}} - "Yellow"] - [s/label {:soda {:tag :a - :color :olive}} - "Olive"] - [s/label {:soda {:tag :a - :color :green}} - "Green"] - [s/label {:soda {:tag :a - :color :teal}} - "Teal"] - [s/label {:soda {:tag :a - :color :blue}} - "Blue"] - [s/label {:soda {:tag :a - :color :violet}} - "Violet"] - [s/label {:soda {:tag :a - :color :purple}} - "Purple"] - [s/label {:soda {:tag :a - :color :pink}} - "Pink"] - [s/label {:soda {:tag :a - :color :brown}} - "Brown"] - [s/label {:soda {:tag :a - :color :grey}} - "Grey"] - [s/label {:soda {:tag :a - :color :black}} - "Black"]]) - -(defcard-doc - " -### Colored - -A label can have different colors -" - (mkdn-pprint-source colored)) - -(defcard-rg - [colored]) - - - -;; Size - -(defn size [] - [:div - [s/label {:soda {:size :mini}} - "Mini"] - [s/label {:soda {:size :tiny}} - "Tiny"] - [s/label {:soda {:size :small}} - "Small"] - [s/label {:soda {:type :default}} - "Medium"] - [s/label {:soda {:size :large}} - "Large"] - [s/label {:soda {:size :big}} - "Big"] - [s/label {:soda {:size :huge}} - "Huge"] - [s/label {:soda {:size :massive}} - "Massive"] - ]) - -(defcard-doc - " -### Size - -A label can have different sizes -" - (mkdn-pprint-source size)) - -(defcard-rg - [size]) - - - -;; ==================== -;; GROUPS - -(defcard-doc -"# GROUPS") - - -;; Group-Size - -(defn group-size [] - [s/labels {:soda {:size :huge}} - [s/label {} "Fun"] - [s/label {} "Happy"] - [s/label {} "Smart"] - [s/label {} "Witty"]]) - -(defcard-doc - " -### Group Size - -Labels can share sizes together -" - (mkdn-pprint-source group-size)) - -(defcard-rg - [group-size]) - - -;; Colored-Group - -(defn colored-group [] - [s/labels {:soda {:color :blue}} - [s/label {} "Fun"] - [s/label {} "Happy"] - [s/label {} "Smart"] - [s/label {} "Witty"]]) - -(defcard-doc - " -### Colored Group - -Labels can share colors together -" - (mkdn-pprint-source colored-group)) - -(defcard-rg - [colored-group]) - - -;; Tag-Group - -(defn tag-group [] - [s/labels {:soda {:type :tag}} - [s/label {} "Fun"] - [s/label {} "Happy"] - [s/label {} "Smart"] - [s/label {} "Witty"]]) - -(defcard-doc - " -### Tag Group - -Labels can share tag formatting -" - (mkdn-pprint-source tag-group)) - -(defcard-rg - [tag-group]) - - -;; Circular-Group - -(defn circular-group [] - [s/labels {:soda {:circular? true}} - [s/label {} "Fun"] - [s/label {} "Happy"] - [s/label {} "Smart"] - [s/label {} "Witty"]]) - -(defcard-doc - " -### Circular Group - -Labels can share shapes -" - (mkdn-pprint-source circular-group)) - -(defcard-rg - [circular-group]) diff --git a/src/devcards/soda_ash/elements/list_card.cljs b/src/devcards/soda_ash/elements/list_card.cljs deleted file mode 100644 index a62dec5..0000000 --- a/src/devcards/soda_ash/elements/list_card.cljs +++ /dev/null @@ -1,911 +0,0 @@ -(ns soda-ash.elements.list-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc -" -[back](#!/soda_ash.an_overview_card) - -# list - -* **base class** ui list -* **default tag** :div -* **:type** :bulleted | :bulleted-link | :link | :ordered | :ordered-link -* **variations** - :aligned | :animated? | :celled? | :divided? | :horizontal? | - :inverted? | :right-floated? | :relaxed | :selection? | :size - -where - -* **:aligned** :top | :middle | :bottom -* **:relaxed** :default | :very -* **:size** :default | :mini | :tiny | :small | :large | :big | :huge | :massive - ---- -") - - - -;; ==================== -;; TYPES - -(defcard-doc - "# TYPES") - - -;; List - -(defn s-list [] - [s/s-list {} - [:div.item "Apples"] - [:div.item "Pears"] - [:div.item "Oranges"]]) - -(defcard-doc - " -### List - -A list groups related content -" - (mkdn-pprint-source s-list)) - -(defcard-rg - [s-list]) - - - -;; List2 - -(defn s-list2 [] - [s/s-list {} - [:div.item - [s/icon {:soda {:icon :users}}] - [:div.content "Semantic UI"]] - - [:div.item - [s/icon {:soda {:icon :marker}}] - [:div.content "New York, NY"]] - - [:div.item - [s/icon {:soda {:icon :mail}}] - [:div.content - [:a {:href "mailto:jack@semantic-ui.com"} - "jack@semantic-ui.com"]]] - - [:div.item - [s/icon {:soda {:icon :linkify}}] - [:div.content - [:a {:href "http://www.semantic-ui.com"} - "semantic-ui.com"]]]]) - -(defcard-doc - (mkdn-pprint-source s-list2)) - -(defcard-rg - [s-list2]) - - -;; Bulleted - -(defn s-bulleted [] - [s/s-list {:soda {:type :bulleted}} - [:div.item "Gaining Access"] - [:div.item "Inviting Friends"] - [:div.item - [:div "Benefits"] - [:div.list ;; <-- Note: not the same as an s-list - [:div.item "Use Anywhere"] - [:div.item "Rebates"] - [:div.item "Discounts"]]] - [:div.item "Warranty"]]) - -(defcard-doc -" -### Bulleted - -A list can mark items with a bullet -" - (mkdn-pprint-source s-bulleted)) - -(defcard-rg - [s-bulleted]) - - -;; Bulleted2 - -(defn s-bulleted2 [] - [s/s-list {:soda {:tag :ul - :type :bulleted}} - [:li "Gaining Access"] - [:li "Inviting Friends"] - [:li "Benefits" - [:ul - [:li "Use Anywhere"] - [:li "Rebates"] - [:li "Discounts"]]] - [:li "Warranty"]]) - -(defcard-doc -" -For convenience, a simple bulleted list can also use `:ul` tag. -" - (mkdn-pprint-source s-bulleted2)) - -(defcard-rg - [s-bulleted2]) - - - -;; Ordered - -(defn s-ordered [] - [s/s-list {:soda {:type :ordered}} - [:div.item "Gaining Access"] - [:div.item "Inviting Friends"] - [:div.item - [:div "Benefits"] - [:div.list ;; <-- Note: not the same as an s-list - [:div.item "Use Anywhere"] - [:div.item "Rebates"] - [:div.item "Discounts"]]] - [:div.item "Warranty"]]) - -(defcard-doc -" -### Ordered - -A list can be ordered numerically -" - (mkdn-pprint-source s-ordered)) - -(defcard-rg - [s-ordered]) - - -;; Ordered2 - -(defn s-ordered2 [] - [s/s-list {:soda {:tag :ol - :type :ordered}} - [:li "Gaining Access"] - [:li "Inviting Friends"] - [:li "Benefits" - [:ol - [:li "Use Anywhere"] - [:li "Rebates"] - [:li "Discounts"]]] - [:li "Warranty"]]) - -(defcard-doc -" -An ordered list can also use the `:ol` tag -" - (mkdn-pprint-source s-ordered2)) - -(defcard-rg - [s-ordered2]) - - -;; Ordered3 - -(defn s-ordered3 [] - [s/s-list {:soda {:tag :ol - :type :ordered}} - [:li {:value "*"} "Gaining Access"] - [:li {:value "*"} "Inviting Friends"] - [:li {:value "*"} "Benefits" - [:ol - [:li {:value "-"} "Use Anywhere"] - [:li {:value "-"} "Rebates"] - [:li {:value "-"} "Discounts"]]] - [:li {:value "*"} "Warranty"]]) - -(defcard-doc -" -You can also manually specify a value for an ordered list using `:data-value` on a `:div`, or `:value` on an `:li`. -" - (mkdn-pprint-source s-ordered3)) - -(defcard-rg - [s-ordered3]) - - -;; Link - -(defn s-link [] - [s/s-list {:soda {:type :link}} - [:a.active.item "Home"] - [:a.item "About"] - [:a.item "Jobs"] - [:a.item "Team"]]) - -(defcard-doc -" -### Link - -A list can be specially formatted for navigation links -" - (mkdn-pprint-source s-link)) - -(defcard-rg - [s-link]) - - - -;; ==================== -;; CONTENT - -(defcard-doc - "# CONTENT") - - -;; Item - -(defn s-item [] - [s/s-list {} - [:div.item "1"] - [:div.item "2"] - [:div.item "3"]]) - -(defcard-doc -" -### Item - -A list item can contain a set of items -" - (mkdn-pprint-source s-item)) - -(defcard-rg - [s-item]) - - -;; Icon - -(defn s-icon [] - [s/s-list {} - [:a.item - [s/icon {:soda {:icon :help}}] - [:div.content - [:div.header "Floated Icon"] - [:div.description - "This text will always have a left margin to make sure it sits - alongside your icon"]]] - - [:a.item - [s/icon {:soda {:icon :right-triangle}}] - [:div.content - [:div.header "Icon Alignment"] - [:div.description - "Floated icons are by default top aligned. To have an icon top - aligned try this example."]]]]) - -(defcard-doc -" -### Icon - -A list item can contain an icon -" - (mkdn-pprint-source s-icon)) - -(defcard-rg - [s-icon]) - - -;; Image - -(defn s-image [] - [s/s-list {} - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar2/small/rachel.png"}] - [:div.content - [s/header {} "Rachel"] - [:div.description - "Last seen watching " - [:a [:b "Arrested Development"]] - " just now."]]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar2/small/lindsay.png"}] - [:div.content - [s/header {} "Lindsay"] - [:div.description - "Last seen watching " - [:a [:b "Bob's Burgers"]] - " 10 hours ago."]]]]) - -(defcard-doc -" -### Image - -A list item can contain an image -" - (mkdn-pprint-source s-image)) - -(defcard-rg - [s-image]) - - -;; Link-content - -(defn s-link-content [] - [s/s-list {} - [:a.item "What is a FAQ?"] - [:a.item "Who is our user?"] - [:a.item "Where is our office located?"]]) - -(defcard-doc -" -### Link - -A list can contain links -" - (mkdn-pprint-source s-link-content)) - -(defcard-rg - [s-link-content]) - - -;; Link-content2 - -(defn s-link-content2 [] - [s/s-list {} - [:div.item - [:a.header "Header"] - [:div.description - "Click a link in our " - [:a "description"]]] - - [:div.item - [:a.header "Learn More"] - [:div.description - "Learn more about this site on " - [:a "our FAQ page."]]]]) - -(defcard-doc - (mkdn-pprint-source s-link-content2)) - -(defcard-rg - [s-link-content2]) - - -;; header - -(defn s-header [] - [s/s-list {} - [:div.item - [:div.header "New York City"] - "A lovely city"] - - [:div.item - [:div.header "Chicago"] - "Also quite a lovely city"] - - [:div.item - [:div.header "Los Angeles"] - "Sometimes can be a lovely city"] - ]) - -(defcard-doc -" -### Header - -A list item can contain a header -" - (mkdn-pprint-source s-header)) - -(defcard-rg - [s-header]) - - -;; description - -(defn s-description [] - [s/s-list {} - [:div.item - [s/icon {:soda {:icon :marker}}] - [:div.content - [:a.header "Krowlewski Jadlo"] - [:div.description - "Ad excellent polish restaurant, quick delivery and heart, - filling mieals."]]] - - [:div.item - [s/icon {:soda {:icon :marker}}] - [:div.content - [:a.header "Xian Famous Foods"] - [:div.description - "A taste of Shaanxi's delicious culinary traditions, with - delights like spicy cold noodles and lamb burgers."]]]]) - -(defcard-doc -" -### Description - -A list item can contain a description -" - (mkdn-pprint-source s-description)) - -(defcard-rg - [s-description]) - - - -;; ==================== -;; VARIATIONS - -(defcard-doc - "# VARIATIONS") - - -;; Horizontal - -(defn s-horizontal [] - [s/s-list {:soda {:horizontal? true}} - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/tom.jpg"}] - [:div.content - [:div.header "Tom"] - "Top Contributor"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/christian.jpg"}] - [:div.content - [:div.header "Christian Rocha"] - "Admin"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/matt.jpg"}] - [:div.content - [:div.header "Matt"] - "Top Rated User"]]]) - -(defcard-doc - " -### Horizontal - -A list can be formatted to have items appear horizontally -" - (mkdn-pprint-source s-horizontal)) - -(defcard-rg - [s-horizontal]) - - -;; Ordered-Horizontal - -(defn s-ordered-horizontal [] - [s/s-list {:soda {:type :ordered - :horizontal? true}} - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/tom.jpg"}] - [:div.content - [:div.header "Tom"] - "Top Contributor"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/christian.jpg"}] - [:div.content - [:div.header "Christian Rocha"] - "Admin"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/matt.jpg"}] - [:div.content - [:div.header "Matt"] - "Top Rated User"]]]) - -(defcard-doc - " -### Ordered Horizontal -" - (mkdn-pprint-source s-ordered-horizontal)) - -(defcard-rg - [s-ordered-horizontal]) - - -;; Inverted - -(defn s-inverted [] - [s/segment {:soda {:inverted? true}} - [s/s-list {:soda {:inverted? true - :divided? true - :relaxed :default}} - [:div.item - [:div.content - [:div.header "Snickerdoodle"] - "An excellent companion"]] - - [:div.item - [:div.content - [:div.header "Poodle"] - "A poodle, its pretty basic"]] - - [:div.item - [:div.content - [:div.header "Paulo"] - "He's alsa a dog"]]]]) - -(defcard-doc - " -### Inverted - -A list can be inverted to appear on a dark background -" - (mkdn-pprint-source s-inverted)) - -(defcard-rg - [s-inverted]) - - -;; Selection - -(defn s-selection [] - [s/s-list {:soda {:selection? true}} - [:div.item - [:div.content - [:div.header "Snickerdoodle"] - "An excellent companion"]] - - [:div.item - [:div.content - [:div.header "Poodle"] - "A poodle, its pretty basic"]] - - [:div.item - [:div.content - [:div.header "Paulo"] - "He's alsa a dog"]]]) - -(defcard-doc - " -### Selection - -A selection list formats list items as possible choices -" - (mkdn-pprint-source s-selection)) - -(defcard-rg - [s-selection]) - - -;; Animated - -(defn s-animated [] - [s/s-list {:soda {:animated? true}} - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/tom.jpg"}] - [:div.content - [:div.header "Tom"] - "Top Contributor"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/christian.jpg"}] - [:div.content - [:div.header "Christian Rocha"] - "Admin"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/matt.jpg"}] - [:div.content - [:div.header "Matt"] - "Top Rated User"]]]) - -(defcard-doc - " -### Animated - -A list can animate to set the current item apart from the list - -Notes: - -* Be sure content can fit on one line when using the animated variation, otherwise text content will reflow when hovered. -" - (mkdn-pprint-source s-animated)) - -(defcard-rg - [s-animated]) - - -;; Relaxed - -(defn s-relaxed [] - [s/s-list {:soda {:relaxed :default}} - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/tom.jpg"}] - [:div.content - [:div.header "Tom"] - "Top Contributor"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/christian.jpg"}] - [:div.content - [:div.header "Christian Rocha"] - "Admin"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/matt.jpg"}] - [:div.content - [:div.header "Matt"] - "Top Rated User"]]]) - -(defcard-doc - " -### Relaxed - -A list can relax its padding to provide more negative space - -Notes: - -* Be sure content can fit on one line when using the relaxed variation, otherwise text content will reflow when hovered. -" - (mkdn-pprint-source s-relaxed)) - -(defcard-rg - [s-relaxed]) - - -;; Very-Relaxed - -(defn s-very-relaxed [] - [s/s-list {:soda {:relaxed :very}} - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/tom.jpg"}] - [:div.content - [:div.header "Tom"] - "Top Contributor"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/christian.jpg"}] - [:div.content - [:div.header "Christian Rocha"] - "Admin"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/matt.jpg"}] - [:div.content - [:div.header "Matt"] - "Top Rated User"]]]) - -(defcard-doc - " -### Very Relaxed -" - (mkdn-pprint-source s-very-relaxed)) - -(defcard-rg - [s-very-relaxed]) - - -;; Divided - -(defn s-divided [] - [s/s-list {:soda {:divided? true}} - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/tom.jpg"}] - [:div.content - [:div.header "Tom"] - "Top Contributor"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/christian.jpg"}] - [:div.content - [:div.header "Christian Rocha"] - "Admin"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/avatar/small/matt.jpg"}] - [:div.content - [:div.header "Matt"] - "Top Rated User"]]]) - -(defcard-doc - " -### Divided - -A list can show divisions between content -" - (mkdn-pprint-source s-divided)) - -(defcard-rg - [s-divided]) - - -;; Celled - -(defn s-celled [] - [s/s-list {:soda {:horizontal? true - :celled? true}} - [:div.item "About Us"] - [:div.item "Contact"] - [:div.item "Support"]]) - -(defcard-doc - " -### Celled - -A list can divide its items into cells -" - (mkdn-pprint-source s-celled)) - -(defcard-rg - [s-celled]) - - -;; Size - -(defn s-size [] - [:div - [s/s-list {:soda {:horizontal? true - :size :mini}} - [:div.item "About Us"] - [:div.item "Contact"] - [:div.item "Support"]] - - [s/divider {}] - - [s/s-list {:soda {:horizontal? true - :size :tiny}} - [:div.item "About Us"] - [:div.item "Contact"] - [:div.item "Support"]] - - [s/divider {}] - - [s/s-list {:soda {:horizontal? true - :size :small}} - [:div.item "About Us"] - [:div.item "Contact"] - [:div.item "Support"]] - - [s/divider {}] - - [s/s-list {:soda {:horizontal? true - :size :default}} - [:div.item "About Us"] - [:div.item "Contact"] - [:div.item "Support"]] - - [s/divider {}] - - [s/s-list {:soda {:horizontal? true - :size :large}} - [:div.item "About Us"] - [:div.item "Contact"] - [:div.item "Support"]] - - [s/divider {}] - - [s/s-list {:soda {:horizontal? true - :size :big}} - [:div.item "About Us"] - [:div.item "Contact"] - [:div.item "Support"]] - - [s/divider {}] - - [s/s-list {:soda {:horizontal? true - :size :huge}} - [:div.item "About Us"] - [:div.item "Contact"] - [:div.item "Support"]] - - [s/divider {}] - - [s/s-list {:soda {:horizontal? true - :size :massive}} - [:div.item "About Us"] - [:div.item "Contact"] - [:div.item "Support"]]]) - -(defcard-doc - " -### Size - -A list can vary in size -" - (mkdn-pprint-source s-size)) - -(defcard-rg - [s-size]) - - - -;; ==================== -;; CONTENT VARIATIONS - -(defcard-doc - "# CONTENT VARIATIONS") - - -;; Aligned - -(defn s-aligned [] - [s/s-list {:soda {:horizontal? true}} - [:div.item - [s/image {:soda {:avatar? true} - :src "images/wireframe/square-image.png"}] - [:div.top.aligned.content - "Top Aligned"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/wireframe/square-image.png"}] - [:div.middle.aligned.content - "Middle Aligned"]] - - [:div.item - [s/image {:soda {:avatar? true} - :src "images/wireframe/square-image.png"}] - [:div.bottom.aligned.content - "Bottom Aligned"]]]) - -(defcard-doc - " -### Vertically Aligned - -An element inside a list can be vertically aligned -" - (mkdn-pprint-source s-aligned)) - -(defcard-rg - [s-aligned]) - - -;; Floated - -(defn s-floated [] - [:div - [s/s-list {:soda {:horizontal? true - :right-floated? true}} - [:div.disabled.item {:href "#"}] - "© GitHub, Inc." - [:a.item {:href "#"} "Terms"] - [:a.item {:href "#"} "Privacy"] - [:a.item {:href "#"} "Contact"]] - - [s/s-list {:soda {:horizontal? true}} - [:a.item {:href "#"} "About Us"] - [:a.item {:href "#"} "Jobs"]]]) - -(defcard-doc - " -### Floated - -An list, or an element inside a list can be floated left or right -" - (mkdn-pprint-source s-floated)) - -(defcard-rg - [s-floated]) diff --git a/src/devcards/soda_ash/elements/loader_card.cljs b/src/devcards/soda_ash/elements/loader_card.cljs deleted file mode 100644 index 91bc276..0000000 --- a/src/devcards/soda_ash/elements/loader_card.cljs +++ /dev/null @@ -1,281 +0,0 @@ -(ns soda-ash.elements.loader-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc -" -[back](#!/soda_ash.an_overview_card) - -# loader - -* **base class** ui loader -* **default tag** :i -* **:type** :default | :text -* **variations** :centered? | :inline | :inverted? | :size | :state - -where - -* **:inline** :default | :small | :large -* **:size** :mini | :small | :medium | :large -* **:state** :default | :indeterminate | :active | :disabled - ---- -") - - - -;; ==================== -;; TYPES - -(defcard-doc -"# TYPES") - - -;; Loader - -(defn loader [] - [s/segment {:soda {:type :default}} - [h/fake-content] - [:div.ui.active.dimmer - [s/loader {:soda {:type :default}}]]]) - -(defcard-doc - " -### Loader - -A loader - -Notes: - -* Loaders are hidden unless active or inside an active dimmer. -" - (mkdn-pprint-source loader)) - -(defcard-rg - [loader]) - - -;; Text - -(defn text [] - [s/segment {:soda {:type :default}} - [h/fake-content] - [:div.ui.active.inverted.dimmer - [s/loader {:soda {:type :text}} - "Loading"]]]) - -(defcard-doc - " -### Text Loader - -A loader can contain text -" - (mkdn-pprint-source text)) - -(defcard-rg - [text]) - - - -;; ==================== -;; STATES - -(defcard-doc - "# STATES") - - -;; Indeterminate - -(defn indeterminate [] - [s/segment {:soda {:type :default}} - [:div.ui.active.dimmer - [s/loader {:soda {:type :text - :state :indeterminate}} - "Preparing Files"]] - [h/fake-content]]) - -(defcard-doc - " -### Indeterminate - -A loader can show it's unsure of how long a task will take -" - (mkdn-pprint-source indeterminate)) - -(defcard-rg - [indeterminate]) - - -;; Active - -(defn active [] - [s/segment {:soda {:type :default}} - [s/loader {:soda {:state :active}}] - [h/fake-content]]) - -(defcard-doc - " -### Active - -A loader can be active or visible - -Notes: - -* An active dimmer may not be clearly visible without using a ui dimmer -" - (mkdn-pprint-source active)) - -(defcard-rg - [active]) - - -;; Disabled - -(defn disabled [] - [s/segment {:soda {:type :default}} - [s/loader {:soda {:state :disabled}}] - [h/fake-content]]) - -(defcard-doc - " -### Disabled - -A loader can be disabled or hidden - -Notes: - -* An disabled dimmer may not be clearly visible without using a ui dimmer -" - (mkdn-pprint-source disabled)) - -(defcard-rg - [disabled]) - - - -;; ==================== -;; VARIATIONS - -(defcard-doc -"# VARIATIONS") - - -;; Inline - -(defn inline [] - [:div - [s/loader {:soda {:state :active - :inline :small}}] - [s/loader {:soda {:state :active - :inline :default}}] - [s/loader {:soda {:state :active - :inline :large}}] - - ;; centered - [s/loader {:soda {:state :active - :centered? true - :inline :small}}] - [s/loader {:soda {:state :active - :centered? true - :inline :default}}] - [s/loader {:soda {:state :active - :centered? true - :inline :large}}] - ]) - -(defcard-doc - " -### Inline - -Loaders can appear inline with content -" - (mkdn-pprint-source inline)) - -(defcard-rg - [inline]) - - - -;; Size - -(defn size [] - [:div - [s/segment {:soda {:type :default}} - [:div.ui.active.dimmer - [s/loader {:soda {:type :text - :size :mini}} - "Loading"]] - [h/fake-content]] - - - [s/segment {:soda {:type :default}} - [:div.ui.active.dimmer - [s/loader {:soda {:type :text - :size :small}} - "Loading"]] - [h/fake-content]] - - [s/segment {:soda {:type :default}} - [:div.ui.active.dimmer - [s/loader {:soda {:type :text - :size :medium}} - "Loading"]] - [h/fake-content]] - - - [s/segment {:soda {:type :default}} - [:div.ui.active.dimmer - [s/loader {:soda {:type :text - :size :lage}} - "Loading"]] - [h/fake-content]]]) - -(defcard-doc - " -### Size - -Loaders can have different sizes -" - (mkdn-pprint-source size)) - -(defcard-rg - [size]) - - -;; Inverted - -(defn inverted [] - [:div - [s/segment {:soda {:inverted? true}} - [s/loader {:soda {:state :active - :inverted? true}}] - [h/fake-content]] - - ;; with dimmer - [s/segment {:soda {:type :default}} - [:div.ui.active.inverted.dimmer - [s/loader {:soda {:type :default}}]] - [h/fake-content]] - ]) - -(defcard-doc - " -### Inverted - -Loaders can have their colors inverted. - -Notes: - -* Loaders will automatically be inverted inside inverted dimmer -" - (mkdn-pprint-source inverted)) - -(defcard-rg - [inverted]) diff --git a/src/devcards/soda_ash/elements/rail_card.cljs b/src/devcards/soda_ash/elements/rail_card.cljs deleted file mode 100644 index 17454ea..0000000 --- a/src/devcards/soda_ash/elements/rail_card.cljs +++ /dev/null @@ -1,208 +0,0 @@ -(ns soda-ash.elements.rail-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc -" -[back](#!/soda_ash.an_overview_card) - -# rail - -* **base class** ui rail -* **default tag** :div -* **:type** :left | :right | *INTERNAL* :left-internal | :right-internal | *DIVIDING* :left-dividing | :right-dividing -* **variations** :attached? | :close - -where - -* **:close** :default | :very - -### Notes - -#### When to Use - -Rails display optional accompanying content outside of the main viewport of your website. Sites often use rails with sticky content to fix additional—often optional—content to your viewport as you scroll through the page. - -Semantic's default rail is 300px wide, just large enough to fit many common ad unit sizes, and just wide enough for a sub-navigation menu or a prominent call-to-action. - -#### Adjusting Sizes - -Railed content will most likely require arbitrary breakpoints that are specific to your site's content, to ensure they do not exceed the horizontal width of a user's browser. - -Rails are generally used beside long, single-column containers with long-form content like blog posts, articles, or user profiles. Generally your main text container width should be set between around 600-800px depending on your font size to optimize line length for readability. - -This set-up means most tablet browsers can only accomodate a single rail. Ultrabooks and lower resolution computers two small rails, and larger monitors, usually two full-sized rails. The specifics of this implementation is left up to you in your project. - -#### Regarding the Examples Below - -The following examples **do not** use any breakpoints, so some railed content may appear outside your browser's viewport on smaller screens. - ---- -") - - -;; Rail - -(defn rail [] - [s/segment {} - [s/rail {:soda {:type :left}} - [s/segment {} - "Left Rail Content"]] - - [s/rail {:soda {:type :right}} - [s/segment {} - "Right Rail Content"]] - - [h/fake-content]]) - -(defcard-doc - " -### Rail - -A rail can be presented on the left or right side of a container -" - (mkdn-pprint-source rail)) - -(defcard-rg - [rail]) - - -;; Internal Rail - -(defn internal-rail [] - [s/segment {} - [s/rail {:soda {:type :left-internal}} - [s/segment {} - "Left Rail Content"]] - - [s/rail {:soda {:type :right-internal}} - [s/segment {} - "Right Rail Content"]] - - [h/fake-content]]) - -(defcard-doc - " -### Internal - -A rail can attach itself to the inside of a container -" - (mkdn-pprint-source internal-rail)) - -(defcard-rg - [internal-rail]) - - -;; Dividing Rail - - (defn dividing-rail [] - [s/segment {} - [s/rail {:soda {:type :left-dividing}} - [s/segment {:soda {:type :default}} - "Left Rail Content"]] - - [s/rail {:soda {:type :right-dividing}} - [s/segment {} - "Right Rail Content"]] - - [h/fake-content]]) - -(defcard-doc - " -### Dividing - -A rail can create a division between itself and a container -" - (mkdn-pprint-source dividing-rail)) - -(defcard-rg - [dividing-rail]) - - -;; Attached - - (defn attached [] - [s/segment {} - [s/rail {:soda {:type :left - :attached? true}} - [s/segment {} - "Left Rail Content"]] - - [s/rail {:soda {:type :right - :attached? true}} - [s/segment {} - "Right Rail Content"]] - - [h/fake-content]]) - -(defcard-doc - " -### Attached - -A rail can appear attached to the main viewport -" - (mkdn-pprint-source attached)) - -(defcard-rg - [attached]) - - -;; Close - - (defn close [] - [s/segment {} - [s/rail {:soda {:type :left - :close :default}} - [s/segment {} - "Left Rail Content"]] - - [s/rail {:soda {:type :right - :close :default}} - [s/segment {} - "Right Rail Content"]] - - [h/fake-content]]) - -(defcard-doc - " -### Close - -A rail can appear closer to the main viewport -" - (mkdn-pprint-source close)) - -(defcard-rg - [close]) - - -;; Very-Close - - (defn very-close [] - [s/segment {} - [s/rail {:soda {:type :left - :close :very}} - [s/segment {} - "Left Rail Content"]] - - [s/rail {:soda {:type :right - :close :very}} - [s/segment {} - "Right Rail Content"]] - - [h/fake-content]]) - -(defcard-doc - " -### Very Close -" - (mkdn-pprint-source very-close)) - -(defcard-rg - [very-close]) diff --git a/src/devcards/soda_ash/elements/reveal_card.cljs b/src/devcards/soda_ash/elements/reveal_card.cljs deleted file mode 100644 index ae818cd..0000000 --- a/src/devcards/soda_ash/elements/reveal_card.cljs +++ /dev/null @@ -1,318 +0,0 @@ -(ns soda-ash.elements.reveal-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc -" -[back](#!/soda_ash.an_overview_card) - -# reveal - -* **base class** ui reveal -* **default tag** :div -* **:type** - *FADE* :fade | - *MOVE* :move | :move-right | :move-up | :move-down | - *ROTATE* :rotate | :rotate-left -* **content** visible | hidden -* **:state** :default | :active | :disabled -* **variations** :instant? - ---- -") - - - -;; ==================== -;; TYPES - -(defcard-doc -"# TYPES") - - -;; Fade - -(defn fade [] - [s/reveal {:soda {:type :fade}} - - [:div.visible.content - [s/image {:soda {:size :small} - :src "images/wireframe/square-image.png"}]] - - [:div.hidden.content - [s/image {:soda {:size :small} - :src "images/avatar/large/ade.jpg"}]]]) - -(defcard-doc - " -### Fade - -An element can disappear to reveal content below -" - (mkdn-pprint-source fade)) - -(defcard-rg - [fade]) - - -;; Move - -(defn move [] - [s/reveal {:soda {:type :move}} - - [:div.visible.content - [s/image {:soda {:size :small} - :src "images/wireframe/square-image.png"}]] - - [:div.hidden.content - [s/image {:soda {:size :small} - :src "images/avatar/large/ade.jpg"}]]]) - -(defcard-doc - " -### Move - -An element can move in a direction to reveal content -" - (mkdn-pprint-source move)) - -(defcard-rg - [move]) - - -;; move right - -(defn move-right [] - [s/reveal {:soda {:type :move-right}} - - [:div.visible.content - [s/image {:soda {:size :small} - :src "images/wireframe/square-image.png"}]] - - [:div.hidden.content - [s/image {:soda {:size :small} - :src "images/avatar/large/ade.jpg"}]]]) - -(defcard-doc - (mkdn-pprint-source move-right)) - -(defcard-rg - [move-right]) - - -;; move up - -(defn move-up [] - [s/reveal {:soda {:type :move-up}} - - [:div.visible.content - [s/image {:soda {:size :small} - :src "images/wireframe/square-image.png"}]] - - [:div.hidden.content - [s/image {:soda {:size :small} - :src "images/avatar/large/ade.jpg"}]]]) - -(defcard-doc - (mkdn-pprint-source move-up)) - -(defcard-rg - [move-up]) - - -;; move down - -(defn move-down [] - [s/reveal {:soda {:type :move-down}} - - [:div.visible.content - [s/image {:soda {:size :small} - :src "images/wireframe/square-image.png"}]] - - [:div.hidden.content - [s/image {:soda {:size :small} - :src "images/avatar/large/ade.jpg"}]]]) - -(defcard-doc - (mkdn-pprint-source move-down)) - -(defcard-rg - [move-down]) - - -(defcard-doc - " -### Rotate - -An element can rotate to reveal content below - -**Soda-ash does not support rotate at this time :(** -") - - - -;; ==================== -;; CONTENT - -(defcard-doc -"# CONTENT") - - -;; Visible - -(defn visible [] - [s/reveal {:soda {:type :fade}} - - [:div.visible.content - [s/image {:soda {:size :small} - :src "images/avatar/large/ade.jpg"}]] - - [:div.hidden.content - [s/image {:soda {:size :small} - :src "images/wireframe/square-image.png"}]]]) - -(defcard-doc - " -### Visible - -A reveal may contain content that is visible before interaction - -Notes: - -* Visible and hidden content should be the same aspect ratio -" - (mkdn-pprint-source visible)) - -(defcard-rg - [visible]) - - -;; Hidden - -(defn hidden [] - [s/reveal {:soda {:type :fade}} - - [:div.hidden.content - [s/image {:soda {:size :small} - :src "images/avatar/large/ade.jpg"}]] - - [:div.visible.content - [s/image {:soda {:size :small} - :src "images/wireframe/square-image.png"}]]]) - -(defcard-doc - " -### Hidden - -A reveal may contain content that is hidden before user interaction -" - (mkdn-pprint-source hidden)) - -(defcard-rg - [hidden]) - - - -;; ==================== -;; STATES - -(defcard-doc -"# STATES") - - -;; Active - -(defn active [] - [s/reveal {:soda {:type :move - :state :active}} - - [:div.hidden.content ;; <-- active overrides this and makes visible - [s/image {:soda {:size :small} - :src "images/avatar/large/nan.jpg"}]] - - [:div.visible.content - [s/image {:soda {:size :small} - :src "images/wireframe/square-image.png"}]]]) - -(defcard-doc - " -### Active - -An active reveal displays its hidden content - -Notes: - -* Adding the class active can allow you to show the hidden contents programatically -" - (mkdn-pprint-source active)) - -(defcard-rg - [active]) - - -;; Disabled - -(defn disabled [] - [s/reveal {:soda {:type :move - :state :disabled ;; <-- this disables the move reveal - }} - - [:div.disabled.content - [s/image {:soda {:size :small} - :src "images/avatar/large/nan.jpg"}]] - - [:div.hidden.content - [s/image {:soda {:size :small} - :src "images/wireframe/square-image.png"}]]]) - -(defcard-doc - " -### Disabled - -A disabled reveal will not animate when hovered -" - (mkdn-pprint-source disabled)) - -(defcard-rg - [disabled]) - - - -;; ==================== -;; VARIATIONS - -(defcard-doc -"# VARIATIONS") - - -;; Instant - -(defn instant [] - [s/reveal {:soda {:type :move - :instant? true}} - - [:div.hidden.content - [s/image {:soda {:size :small} - :src "images/avatar/large/nan.jpg"}]] - - [:div.visible.content - [s/image {:soda {:size :small} - :src "images/wireframe/square-image.png"}]]]) - -(defcard-doc - " -### Instant - -An element can show its content without delay -" - (mkdn-pprint-source instant)) - -(defcard-rg - [instant]) diff --git a/src/devcards/soda_ash/elements/segment_card.cljs b/src/devcards/soda_ash/elements/segment_card.cljs deleted file mode 100644 index d8c722e..0000000 --- a/src/devcards/soda_ash/elements/segment_card.cljs +++ /dev/null @@ -1,711 +0,0 @@ -(ns soda-ash.elements.segment-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc -" -[back](#!/soda_ash.an_overview_card) - -# segment - -* **base class** ui segment -* **default tag** :div -* **:type** - :default | - *RAISED* - :raised | - *STACKED* - :stacked | - :tall-stacked | - *PILED* - :piled | - *VERTICAL* - :vertical -* **:state** :disabled | :loading -* **variations** - :aligned | :attached | :basic? | - :circular? | :clearing? | :color | :compact? | - :horizontal? (inside segments) | :empasis | :floated | :inverted? | padded - -where - -* **:aligned** :left | :right | :center -* **:attached** :default | :top | :bottom -* **:color** - :red | :orange | :yellow | :olive | - :green | :teal | :blue | :violet | - :purple | :pink | :brown | :grey | - :black -* **:emphasis** :secondary | :tertiary -* **floated** :left | :right -* **:padded** :defanult | :very - -# segments - -* **base class** ui segments -* **default tag** :div - ---- -") - - - -;; ==================== -;; TYPES - -(defcard-doc -"# TYPES") - - -;; Segment - -(defn segment [] - [s/segment {:soda {:type :default}} - [h/fake-content]]) - -(defcard-doc - " -### Segment - -A segment of content -" - (mkdn-pprint-source segment)) - -(defcard-rg - [segment]) - - -;; Raised - -(defn raised [] - [s/segment {:soda {:type :raised}} - [h/fake-content]]) - -(defcard-doc - " -### Raised - -A segment may be formatted to raise above the page. -" - (mkdn-pprint-source raised)) - -(defcard-rg - [raised]) - - -;; Stacked - -(defn stacked [] - [s/segment {:soda {:type :stacked}} - [h/fake-content]]) - -(defcard-doc - " -### Stacked - -A segment can be formatted to show it contains multiple pages -" - (mkdn-pprint-source stacked)) - -(defcard-rg - [stacked]) - - -;; Tall-Stacked - -(defn tall-stacked [] - [s/segment {:soda {:type :tall-stacked}} - [h/fake-content]]) - -(defcard-doc - (mkdn-pprint-source tall-stacked)) - -(defcard-rg - [tall-stacked]) - - -;; Piled - -(defn piled [] - [s/segment {:soda {:type :piled}} - [s/header {:soda {:tag :h4}} - "A header"] - [h/fake-content]]) - -(defcard-doc - " -### Piled - -A segment can be formatted to look like a pile of pages - -Notes: - -* Piled segments use negative z-index to format the additional pages below the segment. In order for them to appear correctly, your segment's offset container must have a z-index declared. -" - (mkdn-pprint-source piled)) - -(defcard-rg - [piled]) - - -;; Vertical - -(defn vertical [] - [:div - [s/segment {:soda {:type :vertical}} - [h/fake-content]] - [s/segment {:soda {:type :vertical}} - [h/fake-content]] - [s/segment {:soda {:type :vertical}} - [h/fake-content]] - ]) - -(defcard-doc - " -### Vertical Segment - -A vertical segment formats content to be aligned as part of a vertical group -" - (mkdn-pprint-source vertical)) - -(defcard-rg - [vertical]) - - - -;; ==================== -;; GROUPS - -(defcard-doc -"# GROUPS") - - -;; Segments - -(defn segments [] - [s/segments {} - [s/segment {} [:p "Top"]] - [s/segment {} [:p "Middle"]] - [s/segment {} [:p "Middle"]] - [s/segment {} [:p "Bottom"]]]) - -(defcard-doc - " -### Segments - -A group of segments can be nested in another group of segments -" - (mkdn-pprint-source segments)) - -(defcard-rg - [segments]) - - -;; Nested-Segments - -(defn nested-segments [] - [s/segments {} - [s/segment {} [:p "Top"]] - [s/segments {} - [s/segment {} [:p "Nested Top"]] - [s/segment {} [:p "Nested Middle"]] - [s/segment {} [:p "Nested Bottom"]]] - [s/segment {} [:p "Bottom"]]]) - -(defcard-doc - " -### Nested Segments - -A group of segments can be nested in another group of segments -" - (mkdn-pprint-source nested-segments)) - -(defcard-rg - [nested-segments]) - - -;; Horizontal-Segments - -(defn horizontal-segments [] - [s/segments {:soda {:horizontal? true}} - [s/segment {} [:p "Left"]] - [s/segment {} [:p "Middle"]] - [s/segment {} [:p "Middle"]] - [s/segment {} [:p "Right"]]]) - -(defcard-doc - " -### Horizontal Segments - -A segment group can appear horizontally -" - (mkdn-pprint-source horizontal-segments)) - -(defcard-rg - [horizontal-segments]) - - -;; Raised-Segments - -(defn raised-segments [] - [s/segments {:soda {:type :raised}} - [s/segment {} [:p "Top"]] - [s/segment {} [:p "Middle"]] - [s/segment {} [:p "Middle"]] - [s/segment {} [:p "Bottom"]]]) - -(defcard-doc - " -### Raised Segments - -A group of segments can be raised -" - (mkdn-pprint-source raised-segments)) - -(defcard-rg - [raised-segments]) - - -;; Stacked-Segments - -(defn stacked-segments [] - [s/segments {:soda {:type :stacked}} - [s/segment {} [:p "Top"]] - [s/segment {} [:p "Middle"]] - [s/segment {} [:p "Middle"]] - [s/segment {} [:p "Bottom"]]]) - -(defcard-doc - " -### Stacked Segments - -A group of segments can be stacked -" - (mkdn-pprint-source stacked-segments)) - -(defcard-rg - [stacked-segments]) - - -;; Piled-Segments - -(defn piled-segments [] - [s/segments {:soda {:type :piled}} - [s/segment {} [:p "Top"]] - [s/segment {} [:p "Middle"]] - [s/segment {} [:p "Bottom"]]]) - -(defcard-doc - " -### Piled Segments - -A group of segments can be piled - -Notes: - -* **This isn't appearing as it is supposed to.** -" - (mkdn-pprint-source piled-segments)) - -(defcard-rg - [piled-segments]) - - - -;; ==================== -;; STATES - -(defcard-doc -"# STATES") - - -;; Disabled - -(defn disabled [] - [s/segment {:soda {:state :disabled}} - [h/fake-content]]) - -(defcard-doc - " -### Disabled - -A segment may show its content is disabled -" - (mkdn-pprint-source disabled)) - -(defcard-rg - [disabled]) - - -;; Loading - -(defn loading [] - [s/segment {:soda {:state :loading}} - [h/fake-content]]) - -(defcard-doc - " -### Loading - -A segment may show its content is being loaded -" - (mkdn-pprint-source loading)) - -(defcard-rg - [loading]) - - - -;; ==================== -;; VARIATIONS - -(defcard-doc -"# VARIATIONS") - - -;; Inverted - -(defn inverted [] - [s/segment {:soda {:inverted? true}} - [h/fake-content]]) - -(defcard-doc - " -### Inverted - -A segment can have its colors inverted for contrast -" - (mkdn-pprint-source inverted)) - -(defcard-rg - [inverted]) - - -;; Attached - -(defn attached [] - [:div - [s/segment {:soda {:attached :top}} - [h/fake-content]] - [s/segment {:soda {:attached :default}} - [h/fake-content]] - [s/segment {:soda {:attached :bottom}} - [h/fake-content]]]) - -(defcard-doc - " -### Attached - -A segment can be attached to other content on a page - -Notes: - -* Attached segments are designed to be used with other attached variations like attached header or attached messages. -" - (mkdn-pprint-source attached)) - -(defcard-rg - [attached]) - - -;; Padded - -(defn padded [] - [:div - [s/segment {:soda {:type :default}} - [h/fake-content]] - [s/segment {:soda {:padded :default}} - [h/fake-content]] - [s/segment {:soda {:padded :very}} - [h/fake-content]]]) - -(defcard-doc - " -### Padded - -A segment can increase its padding -" - (mkdn-pprint-source padded)) - -(defcard-rg - [padded]) - - -;; Compact - -(defn compact [] - [s/segment {:soda {:compact? true}} - "foo bar baz"]) - -(defcard-doc - " -### Compact - -A segment may take up only as much space as is necessary -" - (mkdn-pprint-source compact)) - -(defcard-rg - [compact]) - - -;; Colored - -(defn colored [] - [:div - [s/segment {:soda {:color :red}} - "foo bar baz"] - [s/segment {:soda {:color :orange}} - "foo bar baz"] - [s/segment {:soda {:color :yellow}} - "foo bar baz"] - [s/segment {:soda {:color :olive}} - "foo bar baz"] - [s/segment {:soda {:color :green}} - "foo bar baz"] - [s/segment {:soda {:color :teal}} - "foo bar baz"] - [s/segment {:soda {:color :blue}} - "foo bar baz"] - [s/segment {:soda {:color :violet}} - "foo bar baz"] - [s/segment {:soda {:color :purple}} - "foo bar baz"] - [s/segment {:soda {:color :pink}} - "foo bar baz"] - [s/segment {:soda {:color :brown}} - "foo bar baz"] - [s/segment {:soda {:color :grey}} - "foo bar baz"] - [s/segment {:soda {:color :black}} - "foo bar baz"]]) - -(defcard-doc - " -### Colored - -A segment can be colored -" - (mkdn-pprint-source colored)) - -(defcard-rg - [colored]) - - -;; Inverted-Color - -(defn inverted-color [] - [:div - [s/segment {:soda {:color :red - :inverted? true}} - "foo bar baz"] - [s/segment {:soda {:color :orange - :inverted? true}} - "foo bar baz"] - [s/segment {:soda {:color :yellow - :inverted? true}} - "foo bar baz"] - [s/segment {:soda {:color :olive - :inverted? true}} - "foo bar baz"] - [s/segment {:soda {:color :green - :inverted? true}} - "foo bar baz"] - [s/segment {:soda {:color :teal - :inverted? true}} - "foo bar baz"] - [s/segment {:soda {:color :blue - :inverted? true}} - "foo bar baz"] - [s/segment {:soda {:color :violet - :inverted? true}} - "foo bar baz"] - [s/segment {:soda {:color :purple - :inverted? true}} - "foo bar baz"] - [s/segment {:soda {:color :pink - :inverted? true}} - "foo bar baz"] - [s/segment {:soda {:color :brown - :inverted? true}} - "foo bar baz"] - [s/segment {:soda {:color :grey - :inverted? true}} - "foo bar baz"] - [s/segment {:soda {:color :black - :inverted? true}} - "foo bar baz"]]) - -(defcard-doc - " -These colors can be inverted -" - (mkdn-pprint-source inverted-color)) - -(defcard-rg - [inverted-color]) - - -;; Emphasis - -(defn emphasis [] - [:div - [s/segment {:soda {:type :default}} - [h/fake-content]] - [s/segment {:soda {:emphasis :secondary}} - [h/fake-content]] - [s/segment {:soda {:emphasis :tertiary}} - [h/fake-content]] - - ;; inverted - [s/segment {:soda {:inverted? true}} - [h/fake-content]] - [s/segment {:soda {:emphasis :secondary - :inverted? true}} - [h/fake-content]] - [s/segment {:soda {:emphasis :tertiary - :inverted? true}} - [h/fake-content]] - - ;; inverted & color - [s/segment {:soda {:inverted? true - :color :red}} - [h/fake-content]] - [s/segment {:soda {:emphasis :secondary - :inverted? true - :color :red}} - [h/fake-content]] - [s/segment {:soda {:emphasis :tertiary - :inverted? true - :color :red}} - [h/fake-content]]]) - -(defcard-doc - " -### Emphasis - -A segment can be formatted to appear more or less noticeable -" - (mkdn-pprint-source emphasis)) - -(defcard-rg - [emphasis]) - - -;; Circular - -(defn circular [] - [:div - [s/segment {:soda {:circular? true}} - [s/header {:soda {:tag :h2}} - "Buy Now" - [:div.sub.header "$10.99"]]] - - [s/segment {:soda {:circular? true - :inverted? true}} - [s/header {:soda {:tag :h2 - :inverted? true}} - "Buy Now" - [:div.sub.header "$10.99"]]] - ]) - -(defcard-doc - " -### Circular - -A segment can be circular -" - (mkdn-pprint-source circular)) - -(defcard-rg - [circular]) - - -;; Clearing - -(defn clearing [] - [s/segment {:soda {:clearing? true}} - [:div.ui.right.floated.button "Floated"]]) - -(defcard-doc - " -### Clearing - -A segment can clear floated content -" - (mkdn-pprint-source clearing)) - -(defcard-rg - [clearing]) - - -;; Floated - -(defn floated [] - [:div - [s/segment {:soda {:floated :right}} - [:p "This segment will appear to the right"]] - - [s/segment {:soda {:floated :left}} - [:p "This segment will appear to the left"]] - - [h/fake-content]]) - -(defcard-doc - " -### Floated - -A segment can appear to the left or right of other content -" - (mkdn-pprint-source floated)) - -(defcard-rg - [floated]) - - -;; Aligned - -(defn aligned [] - [:div - [s/segment {:soda {:aligned :right}} - "Right"] - [s/segment {:soda {:aligned :left}} - "Left"] - [s/segment {:soda {:aligned :center}} - "Center"]]) - -(defcard-doc - " -### Aligned - -A segment can have its text aligned to a side -" - (mkdn-pprint-source aligned)) - -(defcard-rg - [aligned]) - - -;; Basic - -(defn basic [] - [s/segment {:soda {:basic? true}} - [h/fake-content]]) - -(defcard-doc - " -### Basic - -A basic segment has no special formatting -" - (mkdn-pprint-source basic)) - -(defcard-rg - [basic]) diff --git a/src/devcards/soda_ash/elements/step_card.cljs b/src/devcards/soda_ash/elements/step_card.cljs deleted file mode 100644 index 44f8bee..0000000 --- a/src/devcards/soda_ash/elements/step_card.cljs +++ /dev/null @@ -1,597 +0,0 @@ -(ns soda-ash.elements.step-card - (:require-macros [devcards.core - :as dc - :refer [defcard-rg defcard-doc mkdn-pprint-source]]) - (:require [reagent.core :as reagent] - [devcards.core] - [soda-ash.elements.card-helpers :as h] - [soda-ash.element :as s])) - - - -(defcard-doc -" -[back](#!/soda_ash.an_overview_card) - -# step - -* **base class** step -* **default tag** :div -* **:type** :default | :link -* **:state** :default | :active | :completed | :disabled -* **content** description - -# steps -* **base class** ui steps -* **default tag** :div -* **:type** :default :ordered | :vertical | :tablet-stackable -* **variations** :attached | :divided | :fluid? | :size - -where - -* **:attached** :top | :bottom -* **:divided** :one | :two | ... -* **:size** :default | :small | :large - ---- -") - - - -;; ==================== -;; TYPES - -(defcard-doc - "# TYPES") - - -;; Step - -(defn step [] - [s/steps {} - [s/step {} - "Shipping"]]) - -(defcard-doc - " -### Step - -A single step -" - (mkdn-pprint-source step)) - -(defcard-rg - [step]) - - - -;; ==================== -;; GROUPS - -(defcard-doc - "# GROUPS") - - -;; Steps - -(defn steps [] - [s/steps {} - - [s/step {} - [s/icon {:soda {:icon :truck}}] - [:div.content - [:div.title "Shipping"] - [:div.description "Choose your shipping options"]]] - - [s/step {:soda {:state :active}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]] - - [s/step {:soda {:state :disabled}} - [s/icon {:soda {:icon :info}}] - [:div.content - [:div.title "Confirm Order"]]]]) - -(defcard-doc - " -### Steps - -A set of steps - -Notes: - -* Responsive Element. Steps will automatically stack on mobile. To make steps automatically stack for tablet use :tablet-stackable?. -" - (mkdn-pprint-source steps)) - -(defcard-rg - [steps]) - - -;; Ordered - -(defn ordered [] - [s/steps {:soda {:type :ordered}} - - [s/step {:soda {:state :completed}} - [:div.content - [:div.title "Shipping"] - [:div.description "Choose your shipping options"]]] - - [s/step {:soda {:state :completed}} - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]] - - [s/step {:soda {:state :active}} - [:div.content - [:div.title "Confirm Order"]]]]) - -(defcard-doc - " -### Ordered - -A step can show a ordered sequence of steps -" - (mkdn-pprint-source ordered)) - -(defcard-rg - [ordered]) - - -;; Vertical - -(defn vertical [] - [s/steps {:soda {:type :vertical}} - - [s/step {:soda {:state :completed}} - [s/icon {:soda {:icon :truck}}] - [:div.content - [:div.title "Shipping"] - [:div.description "Choose your shipping options"]]] - - [s/step {:soda {:state :completed}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]] - - [s/step {:soda {:state :active}} - [s/icon {:soda {:icon :info}}] - [:div.content - [:div.title "Confirm Order"]]]]) - -(defcard-doc - " -### Vertical - -A step can be displayed stacked vertically -" - (mkdn-pprint-source vertical)) - -(defcard-rg - [vertical]) - - - -;; ==================== -;; CONTENT - -(defcard-doc - "# CONTENT") - - -;; Description - -(defn description [] - [s/steps {} - [s/step {} - [:div.title "Shipping"] - [:div.description - "Choose your shipping options"]]]) - -(defcard-doc - " -### Description - -A step can contain a description -" - (mkdn-pprint-source description)) - -(defcard-rg - [description]) - - -;; Icon - -(defn icon [] - [s/steps {} - [s/step {} - [s/icon {:soda {:icon :truck}}] - [:div.content - [:div.title "Shipping"] - [:div.description - "Choose your shipping options"]]]]) - -(defcard-doc - " -### Icon - -A step can contain a icon -" - (mkdn-pprint-source icon)) - -(defcard-rg - [icon]) - - -;; Link1 - -(defn link1 [] - [s/steps {} - - [s/step {:soda {:tag :a - :state :active}} - [s/icon {:soda {:icon :truck}}] - [:div.content - [:div.title "Shipping"] - [:div.description - "Choose your shipping options"]]] - - [s/step {} - [:div.content - [:div.title "Billing"] - [:div.description - "Enter billing information"]]]]) - -(defcard-doc - " -### Link - -A step can link -" - (mkdn-pprint-source link1)) - -(defcard-rg - [link1]) - - -;; Link2 - -(defn link2 [] - [s/steps {} - - [s/step {:soda {:type :link}} - [s/icon {:soda {:icon :truck}}] - [:div.content - [:div.title "Shipping"] - [:div.description - "Choose your shipping options"]]] - - [s/step {:soda {:type :link}} - [:div.content - [:div.title "Billing"] - [:div.description - "Enter billing information"]]]]) - -(defcard-doc - " -### Link - -A step can link -" - (mkdn-pprint-source link2)) - -(defcard-rg - [link2]) - - - -;; ==================== -;; STATES - -(defcard-doc - "# STATES") - - -;; Active - -(defn active [] - [s/steps {} - [s/step {:soda {:state :active}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]]]) - -(defcard-doc - " -### Active - -A step can be highlighted as active -" - (mkdn-pprint-source active)) - -(defcard-rg - [active]) - - -;; Completed - -(defn completed [] - [s/steps {} - [s/step {:soda {:state :completed}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]]]) - -(defcard-doc - " -### Completed - -A step can show that a user has completed it -" - (mkdn-pprint-source completed)) - -(defcard-rg - [completed]) - - -;; Disabled - -(defn disabled [] - [s/steps {} - [s/step {:soda {:state :disabled}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]]]) - -(defcard-doc - " -### Disabled - -A step can show that it cannot be selected -" - (mkdn-pprint-source disabled)) - -(defcard-rg - [disabled]) - - - -;; ==================== -;; VARIATIONS - -(defcard-doc - "# VARIATIONS") - - -;; Stackable - -(defn stackable [] - [s/steps {:soda {:type :tablet-stackable}} - - [s/step {} - [s/icon {:soda {:icon :plane}}] - [:div.content - [:div.title "Shipping"] - [:div.description "Choose your shipping options"]]] - - [s/step {:soda {:state :active}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]] - - [s/step {:soda {:state :disabled}} - [s/icon {:soda {:icon :info}}] - [:div.content - [:div.title "Confirm Order"]]]]) - -(defcard-doc - " -### Stackable - -A step can stack vertically only on smaller screens -" - (mkdn-pprint-source stackable)) - -(defcard-rg - [stackable]) - - -;; Fluid - -(defn fluid [] - [:div.ui.two.column.grid - - [:div.column - [s/steps {:soda {:type :vertical - :fluid? true}} - - [s/step {} - [s/icon {:soda {:icon :plane}}] - [:div.content - [:div.title "Shipping"] - [:div.description "Choose your shipping options"]]] - - [s/step {:soda {:state :active}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]]]] - - [:div.column "The steps take up the entire column width"]]) - -(defcard-doc - " -### Fluid - -A fluid step takes up the width of its container -" - (mkdn-pprint-source fluid)) - -(defcard-rg - [fluid]) - - -;; Attached - -(defn attached [] - [:div - ;; top - [s/steps {:soda {:attached :top - :divided :three}} - - [s/step {} - [s/icon {:soda {:icon :plane}}] - [:div.content - [:div.title "Shipping"] - [:div.description "Choose your shipping options"]]] - - [s/step {:soda {:state :active}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]] - - [s/step {:soda {:state :disabled}} - [s/icon {:soda {:icon :info}}] - [:div.content - [:div.title "Confirm Order"]]]] - - ;; body - [h/fake-content] - - ;; bottom - [s/steps {:soda {:attached :bottom - :divided :three}} - - [s/step {} - [s/icon {:soda {:icon :plane}}] - [:div.content - [:div.title "Shipping"] - [:div.description "Choose your shipping options"]]] - - [s/step {:soda {:state :active}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]] - - [s/step {:soda {:state :disabled}} - [s/icon {:soda {:icon :info}}] - [:div.content - [:div.title "Confirm Order"]]]] - ]) - -(defcard-doc - " -### Attached - -Steps can be attached to other elements -" - (mkdn-pprint-source attached)) - -(defcard-rg - [attached]) - - -;; Divided - -(defn divided [] - [s/steps {:soda {:divided :three}} - - [s/step {} - [s/icon {:soda {:icon :plane}}] - [:div.content - [:div.title "Shipping"] - [:div.description "Choose your shipping options"]]] - - [s/step {:soda {:state :active}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]] - - [s/step {:soda {:state :disabled}} - [s/icon {:soda {:icon :info}}] - [:div.content - [:div.title "Confirm Order"]]]]) - -(defcard-doc - " -### Divided - -A step can stack vertically only on smaller screens -" - (mkdn-pprint-source divided)) - -(defcard-rg - [divided]) - - -;; Size - -(defn size [] - [:div - - ;; small - [s/steps {:soda {:size :small}} - - [s/step {} - [s/icon {:soda {:icon :plane}}] - [:div.content - [:div.title "Shipping"] - [:div.description "Choose your shipping options"]]] - - [s/step {:soda {:state :active}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]]] - - ;; default - [s/steps {:soda {:size :default}} - - [s/step {} - [s/icon {:soda {:icon :plane}}] - [:div.content - [:div.title "Shipping"] - [:div.description "Choose your shipping options"]]] - - [s/step {:soda {:state :active}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]]] - - ;; large - [s/steps {:soda {:size :large}} - - [s/step {} - [s/icon {:soda {:icon :plane}}] - [:div.content - [:div.title "Shipping"] - [:div.description "Choose your shipping options"]]] - - [s/step {:soda {:state :active}} - [s/icon {:soda {:icon :payment}}] - [:div.content - [:div.title "Billing"] - [:div.description "Enter billing information"]]]]]) - -(defcard-doc - " -### Size - -Steps can have different sizes -" - (mkdn-pprint-source size)) - -(defcard-rg - [size]) diff --git a/src/main/cljs/soda_ash/element.cljs b/src/main/cljs/soda_ash/element.cljs deleted file mode 100644 index 2b90baa..0000000 --- a/src/main/cljs/soda_ash/element.cljs +++ /dev/null @@ -1,60 +0,0 @@ -(ns soda-ash.element - (:require - [soda-ash.elements.button :as button] - [soda-ash.elements.buttons :as buttons] - [soda-ash.elements.container :as container] - [soda-ash.elements.divider :as divider] - [soda-ash.elements.flag :as flag] - [soda-ash.elements.header :as header] - [soda-ash.elements.icon :as icon] - [soda-ash.elements.icons :as icons] - [soda-ash.elements.image :as image] - [soda-ash.elements.images :as images] - [soda-ash.elements.input :as input] - [soda-ash.elements.label :as label] - [soda-ash.elements.labels :as labels] - [soda-ash.elements.loader :as loader] - [soda-ash.elements.rail :as rail] - [soda-ash.elements.reveal :as reveal] - [soda-ash.elements.segment :as segment] - [soda-ash.elements.segments :as segments] - [soda-ash.elements.s-list :as s-list] - [soda-ash.elements.step :as step] - [soda-ash.elements.steps :as steps])) - - -(def button button/element) -(def buttons buttons/element) - -(def container container/element) - -(def divider divider/element) - -(def flag flag/element) - -(def header header/element) - -(def icon icon/element) -(def icons icons/element) - -(def image image/element) -(def images images/element) - -(def input input/element) - -(def label label/element) -(def labels labels/element) - -(def loader loader/element) - -(def rail rail/element) - -(def reveal reveal/element) - -(def segment segment/element) -(def segments segments/element) - -(def s-list s-list/element) - -(def step step/element) -(def steps steps/element) diff --git a/src/main/cljs/soda_ash/elements/button.cljs b/src/main/cljs/soda_ash/elements/button.cljs deleted file mode 100644 index 193ff77..0000000 --- a/src/main/cljs/soda_ash/elements/button.cljs +++ /dev/null @@ -1,82 +0,0 @@ -(ns soda-ash.elements.button - (:require [soda-ash.elements.template :as t] - [clojure.set :as set])) - - -;; Meta - -(def e-name "button") - -(def default-tag :button) - -(def ui? true) - - -;; Variations + States - -(def animated-types - #{:animated - :vertical-animated - :animated-fade}) - -(def basic-type - #{:basic}) - -(def emphasis-types - #{:primary - :secondary}) - -(def icon-type - #{:icon}) - -(def inverted-type - #{:inverted}) - -(def inverted-basic-type - #{:inverted-basic}) - -(def labeled-types - #{:labeled - :left-labeled}) - -(def labeled-icon-types - #{:labeled-icon - :right-labeled-icon}) - -(def type-set - (set/union - animated-types - basic-type - emphasis-types - icon-type - inverted-type - inverted-basic-type - labeled-types - labeled-icon-types)) - -(def bool-set - #{:circular? :compact? :fluid? :toggle? - }) - -(def mod-set - #{:attached ;; top | bottom | left | right - :floated ;; left | right - }) - -(def opt-set - #{:color - :consequence ;; positive | negative - :size - :social ;; :facebook | :twitter | :google-plus | :vk | :linkedin | :instagram | :youtube - :state ;; default | active | disabled | loading - }) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set type-set - :bool-set bool-set - :mod-set mod-set - :opt-set opt-set})) diff --git a/src/main/cljs/soda_ash/elements/buttons.cljs b/src/main/cljs/soda_ash/elements/buttons.cljs deleted file mode 100644 index d381122..0000000 --- a/src/main/cljs/soda_ash/elements/buttons.cljs +++ /dev/null @@ -1,23 +0,0 @@ -(ns soda-ash.elements.buttons - (:require [soda-ash.elements.template :as t] - [soda-ash.elements.button :as b] - [clojure.set :as set])) - - -;; Meta - -(def e-name "buttons") - -(def default-tag :div) - -(def ui? true) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set b/type-set - :bool-set b/bool-set - :mod-set b/mod-set - :opt-set b/opt-set})) diff --git a/src/main/cljs/soda_ash/elements/container.cljs b/src/main/cljs/soda_ash/elements/container.cljs deleted file mode 100644 index f623b84..0000000 --- a/src/main/cljs/soda_ash/elements/container.cljs +++ /dev/null @@ -1,38 +0,0 @@ -(ns soda-ash.elements.container - (:require [soda-ash.elements.template :as t])) - - -;; Meta - -(def e-name "container") - -(def default-tag :div) - -(def ui? true) - - -;; Types - -(def type-set - #{:text}) - - -;; Variations - -(def bool-set - #{:fluid?}) - -(def special-map - {:aligned {:right "right aligned" - :left "left aligned" - :justified "justified" - :center "center aligned"}}) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set type-set - :bool-set bool-set - :special-map special-map})) diff --git a/src/main/cljs/soda_ash/elements/divider.cljs b/src/main/cljs/soda_ash/elements/divider.cljs deleted file mode 100644 index ce77579..0000000 --- a/src/main/cljs/soda_ash/elements/divider.cljs +++ /dev/null @@ -1,31 +0,0 @@ -(ns soda-ash.elements.divider - (:require [soda-ash.elements.template :as t])) - - -;; Meta - -(def e-name "divider") - -(def default-tag :div) - -(def ui? true) - - -;; Types - -(def type-set - #{:vertical :horizontal}) - - -;; Variations - -(def bool-set - #{:clearing? :fitted? :hidden? :inverted? :section?}) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set type-set - :bool-set bool-set})) diff --git a/src/main/cljs/soda_ash/elements/flag.cljs b/src/main/cljs/soda_ash/elements/flag.cljs deleted file mode 100644 index 6f4f67b..0000000 --- a/src/main/cljs/soda_ash/elements/flag.cljs +++ /dev/null @@ -1,24 +0,0 @@ -(ns soda-ash.elements.flag - (:require [soda-ash.elements.template :as t])) - - -;; Meta - -(def e-name "flag") - -(def default-tag :i) - -(def ui? false) - - -;; Variations - -(def opt-set - #{:flag}) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :opt-set opt-set})) diff --git a/src/main/cljs/soda_ash/elements/header.cljs b/src/main/cljs/soda_ash/elements/header.cljs deleted file mode 100644 index c6da4cc..0000000 --- a/src/main/cljs/soda_ash/elements/header.cljs +++ /dev/null @@ -1,66 +0,0 @@ -(ns soda-ash.elements.header - (:require [soda-ash.elements.template :as t] - [clojure.set :as set])) - - -;; Meta - -(def e-name "header") - -(def default-tag :div) - -(def ui? true) - - -;; Types - -(def content-types - #{:huge - :large - :medium - :small - :tiny}) - -(def icon-type #{:icon}) - -(def sub-type #{:sub}) - -(def type-set - (set/union content-types - icon-type - sub-type)) - - -;; Variations + States - -(def bool-set - #{:block? - :dividing? - :inverted?}) - -(def mod-set - #{:attached ;; attached | top attached | bottom attached - :floated ;; right floated | left floated - }) - -(def opt-set - #{:color - :state ;; disabled - }) - -(def special-map - {:aligned {:right "right aligned" - :left "left aligned" - :justified "justified" - :center "center aligned"}}) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set type-set - :bool-set bool-set - :mod-set mod-set - :opt-set opt-set - :special-map special-map})) diff --git a/src/main/cljs/soda_ash/elements/helpers.cljs b/src/main/cljs/soda_ash/elements/helpers.cljs deleted file mode 100644 index f362da5..0000000 --- a/src/main/cljs/soda_ash/elements/helpers.cljs +++ /dev/null @@ -1,108 +0,0 @@ -(ns soda-ash.elements.helpers - (:require [clojure.string :as string])) - - - -;; errors - - -(defn throw-error [k v e-name] - (throw (js/Error. - (string/join " " - ["Soda-ash" - k v - "doesn't exist for" - e-name - "element"])))) - -(def throw-type-error - (partial throw-error :type)) - - - -;; class - - -(defn value->class [v] - (-> (name v) - (string/replace #"-" " "))) - -(defn add-class->class [v] - (value->class v)) - -(defn type->class [v type-set e-name] - (when-not (= :default v) - (if (type-set v) - (value->class v) - (throw-type-error v e-name)))) - -(defn bool->class [k v] - (when v - (-> (value->class k) - (string/replace #"\?" "")))) - -(defn mod->class [k v] - (let [k' (name k) - v' (when-not (= :default v) - (value->class v))] - (->> [v' k'] - (remove nil?) - (string/join " ")))) - -(defn opt->class [v] - (when-not (= :default v) - (value->class v))) - -(defn special->class [k v special-map e-name] - (or ((special-map k) v) - (throw-error k v e-name))) - - -(defn soda->class [e-name - soda - type-set - bool-set - mod-set - opt-set - special-map] - (when (keys soda) - (->> (for [[k v] soda] - (cond (= :add-class k) (add-class->class v) - (= :type k) (type->class v type-set e-name) - (bool-set k) (bool->class k v) - (mod-set k) (mod->class k v) - (opt-set k) (opt->class v) - (special-map k) (special->class k v special-map e-name) - :else (throw-error k v e-name))) - (remove nil?) - (string/join " ")))) - - -(defn class [ui? - soda-class - e-name] - (let [ui?' (when ui? "ui")] - (->> [ui?' soda-class e-name] - (remove nil?) - (string/join " ")))) - - - -;; sanitize - - -(defn sanitize-soda [soda] - (dissoc soda :ratom :path :tag :ui?)) - -(defn sanitize-attrs [attrs] - (dissoc attrs :soda)) - - - -;; state - - -(defn set-initial-values! [ratom path sanitized-soda] - (when ratom - (doseq [[k v] sanitized-soda] - (swap! ratom assoc-in (flatten [path :soda k]) v)))) diff --git a/src/main/cljs/soda_ash/elements/icon.cljs b/src/main/cljs/soda_ash/elements/icon.cljs deleted file mode 100644 index 8408025..0000000 --- a/src/main/cljs/soda_ash/elements/icon.cljs +++ /dev/null @@ -1,40 +0,0 @@ -(ns soda-ash.elements.icon - (:require [soda-ash.elements.template :as t])) - - -;; Meta - -(def e-name "icon") - -(def default-tag :i) - -(def ui? false) - - -;; Variations + States - -(def bool-set - #{:bordered? :circular? :fitted? :inverted? :link? - :corner? ;; for icons - }) - -(def mod-set - #{:flipped ;; horizontally | vertically - :rotated ;; clockwise | counterclockwise - }) - -(def opt-set - #{:color - :icon - :size - :state ;; disabled | loading - }) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :bool-set bool-set - :mod-set mod-set - :opt-set opt-set})) diff --git a/src/main/cljs/soda_ash/elements/icons.cljs b/src/main/cljs/soda_ash/elements/icons.cljs deleted file mode 100644 index 05f6d3e..0000000 --- a/src/main/cljs/soda_ash/elements/icons.cljs +++ /dev/null @@ -1,21 +0,0 @@ -(ns soda-ash.elements.icons - (:require [soda-ash.elements.template :as t] - [soda-ash.elements.icon :as i])) - - -;; Meta - -(def e-name "icons") - -(def default-tag :i) - -(def ui? false) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :bool-set i/bool-set - :mod-set i/mod-set - :opt-set i/opt-set})) diff --git a/src/main/cljs/soda_ash/elements/image.cljs b/src/main/cljs/soda_ash/elements/image.cljs deleted file mode 100644 index a3db850..0000000 --- a/src/main/cljs/soda_ash/elements/image.cljs +++ /dev/null @@ -1,38 +0,0 @@ -(ns soda-ash.elements.image - (:require [soda-ash.elements.template :as t])) - - -;; Meta - -(def e-name "image") - -(def default-tag :img) - -(def ui? true) - - -;; Variations + States - -(def bool-set - #{:avatar? :bordered? :centered? - :circular? :fluid? :rounded?}) - -(def mod-set - #{:aligned ;; top | middle | bottom - :spaced ;; default | left | right - :floated ;; left | right - }) - -(def opt-set - #{:state ;; hidden | disabled - :size - }) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :bool-set bool-set - :mod-set mod-set - :opt-set opt-set})) diff --git a/src/main/cljs/soda_ash/elements/images.cljs b/src/main/cljs/soda_ash/elements/images.cljs deleted file mode 100644 index d7ae81d..0000000 --- a/src/main/cljs/soda_ash/elements/images.cljs +++ /dev/null @@ -1,21 +0,0 @@ -(ns soda-ash.elements.images - (:require [soda-ash.elements.template :as t] - [soda-ash.elements.image :as i])) - - -;; Meta - -(def e-name "images") - -(def default-tag :div) - -(def ui? true) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :bool-set i/bool-set - :mod-set i/mod-set - :opt-set i/opt-set})) diff --git a/src/main/cljs/soda_ash/elements/input.cljs b/src/main/cljs/soda_ash/elements/input.cljs deleted file mode 100644 index e44b28b..0000000 --- a/src/main/cljs/soda_ash/elements/input.cljs +++ /dev/null @@ -1,37 +0,0 @@ -(ns soda-ash.elements.input - (:require [soda-ash.elements.template :as t])) - - -;; Meta - -(def e-name "input") - -(def default-tag :div) - -(def ui? true) - - -;; Variations - -(def bool-set - #{:fluid? :inverted? :transparent?}) - -(def mod-set - #{:action ;; default | left | (right) - :icon ;; default | left - :labeled ;; default | right | left-corner | corner - }) - -(def opt-set - #{:size - :state ;; focus | loading | disabled | error - }) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :bool-set bool-set - :mod-set mod-set - :opt-set opt-set})) diff --git a/src/main/cljs/soda_ash/elements/label.cljs b/src/main/cljs/soda_ash/elements/label.cljs deleted file mode 100644 index dec258f..0000000 --- a/src/main/cljs/soda_ash/elements/label.cljs +++ /dev/null @@ -1,78 +0,0 @@ -(ns soda-ash.elements.label - (:require [soda-ash.elements.template :as t] - [clojure.set :as set])) - - -;; Meta - -(def e-name "label") - -(def default-tag :div) - -(def ui? true) - - -;; Types - -(def attached-types - #{:top-attached - :bottom-attached - :top-right-attached - :top-left-attached - :bottom-left-attached - :bottom-right-attached}) - -(def corner-types - #{:left-corner - :right-corner}) - -(def floating-type - #{:floating}) - -(def horizontal-type - #{:horizontal}) - -(def image-type - #{:image}) - -(def pointing-types - #{:pointing - :pointing-below - :left-pointing - :right-pointing}) - -(def tag-type - #{:tag}) - -(def ribbon-types - #{:ribbon - :right-ribbon}) - -(def type-set - (set/union attached-types - corner-types - horizontal-type - floating-type - image-type - pointing-types - tag-type - ribbon-types)) - - -;; Variations + States - -(def bool-set - #{:circular? :empty? :basic?}) - -(def opt-set - #{:color - :size}) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set type-set - :bool-set bool-set - :opt-set opt-set})) diff --git a/src/main/cljs/soda_ash/elements/labels.cljs b/src/main/cljs/soda_ash/elements/labels.cljs deleted file mode 100644 index dab7adf..0000000 --- a/src/main/cljs/soda_ash/elements/labels.cljs +++ /dev/null @@ -1,22 +0,0 @@ -(ns soda-ash.elements.labels - (:require [soda-ash.elements.template :as t] - [soda-ash.elements.label :as l] - [clojure.set :as set])) - - -;; Meta - -(def e-name "labels") - -(def default-tag :div) - -(def ui? true) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set l/type-set - :bool-set l/bool-set - :opt-set l/opt-set})) diff --git a/src/main/cljs/soda_ash/elements/loader.cljs b/src/main/cljs/soda_ash/elements/loader.cljs deleted file mode 100644 index 8ae1654..0000000 --- a/src/main/cljs/soda_ash/elements/loader.cljs +++ /dev/null @@ -1,43 +0,0 @@ -(ns soda-ash.elements.loader - (:require [soda-ash.elements.template :as t])) - - -;; Meta - -(def e-name "loader") - -(def default-tag :div) - -(def ui? true) - - -;; Types - -(def type-set - #{:text}) - - -;; Variations - -(def bool-set - #{:centered? ;; couples with inline - :inverted?}) - -(def mod-set - #{:inline ;; default | small | large - }) - -(def opt-set - #{:size ;; mini | small | medium | large - :state ;; indeterminate | active | disabled - }) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set type-set - :bool-set bool-set - :mod-set mod-set - :opt-set opt-set})) diff --git a/src/main/cljs/soda_ash/elements/rail.cljs b/src/main/cljs/soda_ash/elements/rail.cljs deleted file mode 100644 index 48e7a69..0000000 --- a/src/main/cljs/soda_ash/elements/rail.cljs +++ /dev/null @@ -1,42 +0,0 @@ -(ns soda-ash.elements.rail - (:require [soda-ash.elements.template :as t] - [clojure.set :as set])) - - -;; Meta - -(def e-name "rail") - -(def default-tag :div) - -(def ui? true) - - -;; Types - -(def type-set - #{:left - :right - :left-internal - :right-internal - :left-dividing - :right-dividing}) - - -;; Variations + States - -(def bool-set - #{:attached?}) - -(def mod-set - #{:close ;; :default | :very - }) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set type-set - :bool-set bool-set - :mod-set mod-set})) diff --git a/src/main/cljs/soda_ash/elements/reveal.cljs b/src/main/cljs/soda_ash/elements/reveal.cljs deleted file mode 100644 index de58a70..0000000 --- a/src/main/cljs/soda_ash/elements/reveal.cljs +++ /dev/null @@ -1,42 +0,0 @@ -(ns soda-ash.elements.reveal - (:require [soda-ash.elements.template :as t])) - - -;; Meta - -(def e-name "reveal") - -(def default-tag :div) - -(def ui? true) - - -;; Types - -(def type-set - #{:fade - :move - :move-right - :move-up - :move-down - :rotate - :rotate-left}) - - -;; Variations + States - -(def bool-set - #{:instant?}) - -(def opt-set - #{:state ;; :active :disabled - }) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set type-set - :bool-set bool-set - :opt-set opt-set})) diff --git a/src/main/cljs/soda_ash/elements/s_list.cljs b/src/main/cljs/soda_ash/elements/s_list.cljs deleted file mode 100644 index 5f4995d..0000000 --- a/src/main/cljs/soda_ash/elements/s_list.cljs +++ /dev/null @@ -1,51 +0,0 @@ -(ns soda-ash.elements.s-list - (:require [soda-ash.elements.template :as t])) - - -;; Meta - -(def e-name "list") - -(def default-tag :div) - -(def ui? true) - - -;; Variations - -(def type-set - #{:bulleted - :bulleted-link - :link - :ordered - :ordered-link - }) - -(def bool-set - #{:animated? - :celled? - :divided? - :horizontal? - :inverted? - :right-floated? - :selection? - }) - -(def mod-set - #{:aligned ;; top | middle | bottom - :relaxed ;; default | very - }) - -(def opt-set - #{:size ;; default | mini | tiny | small | large | big | huge | massive - }) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set type-set - :bool-set bool-set - :mod-set mod-set - :opt-set opt-set})) diff --git a/src/main/cljs/soda_ash/elements/segment.cljs b/src/main/cljs/soda_ash/elements/segment.cljs deleted file mode 100644 index 967cae7..0000000 --- a/src/main/cljs/soda_ash/elements/segment.cljs +++ /dev/null @@ -1,52 +0,0 @@ -(ns soda-ash.elements.segment - (:require [soda-ash.elements.template :as t])) - - -;; Meta - -(def e-name "segment") - -(def default-tag :div) - -(def ui? true) - - -;; Types - -(def type-set - #{:raised - :stacked - :tall-stacked - :piled - :vertical}) - - -;; Variations + States - -(def bool-set - #{:basic? :circular? :clearing? :compact? :inverted? - :horizontal? ;; for segments - }) - -(def mod-set - #{:aligned ;; left | right | center - :attached ;; default | top | bottom - :floated ;; left | right - :padded ;; default | very - }) - -(def opt-set - #{:color - :emphasis ;; secondary | tertiary - :state ;; disabled | loading - }) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set type-set - :bool-set bool-set - :mod-set mod-set - :opt-set opt-set})) diff --git a/src/main/cljs/soda_ash/elements/segments.cljs b/src/main/cljs/soda_ash/elements/segments.cljs deleted file mode 100644 index e136328..0000000 --- a/src/main/cljs/soda_ash/elements/segments.cljs +++ /dev/null @@ -1,22 +0,0 @@ -(ns soda-ash.elements.segments - (:require [soda-ash.elements.template :as t] - [soda-ash.elements.segment :as s])) - - -;; Meta - -(def e-name "segments") - -(def default-tag :div) - -(def ui? true) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set s/type-set - :bool-set s/bool-set - :mod-set s/mod-set - :opt-set s/opt-set})) diff --git a/src/main/cljs/soda_ash/elements/step.cljs b/src/main/cljs/soda_ash/elements/step.cljs deleted file mode 100644 index 6d9821d..0000000 --- a/src/main/cljs/soda_ash/elements/step.cljs +++ /dev/null @@ -1,32 +0,0 @@ -(ns soda-ash.elements.step - (:require [soda-ash.elements.template :as t])) - - -;; Meta - -(def e-name "step") - -(def default-tag :div) - -(def ui? false) - - -;; Types - -(def type-set - #{:link}) - - -;; Variations + States - -(def opt-set - #{:state ;; active | completed | disabled - }) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set type-set - :opt-set opt-set})) diff --git a/src/main/cljs/soda_ash/elements/steps.cljs b/src/main/cljs/soda_ash/elements/steps.cljs deleted file mode 100644 index 5e073b5..0000000 --- a/src/main/cljs/soda_ash/elements/steps.cljs +++ /dev/null @@ -1,44 +0,0 @@ -(ns soda-ash.elements.steps - (:require [soda-ash.elements.template :as t])) - - -;; Meta - -(def e-name "steps") - -(def default-tag :div) - -(def ui? true) - - -;; Types - -(def type-set - #{:ordered - :tablet-stackable - :vertical}) - - -;; Variations + States - -(def bool-set - #{:fluid?}) - -(def mod-set - #{:attached ;; top | bottom - :divided ;; one | two | ... - }) - -(def opt-set - #{:size ;; :default | small | large - }) - - -(def element - (t/element {:e-name e-name - :default-tag default-tag - :ui? ui? - :type-set type-set - :bool-set bool-set - :mod-set mod-set - :opt-set opt-set})) diff --git a/src/main/cljs/soda_ash/elements/template.cljs b/src/main/cljs/soda_ash/elements/template.cljs deleted file mode 100644 index 0d5e6b5..0000000 --- a/src/main/cljs/soda_ash/elements/template.cljs +++ /dev/null @@ -1,66 +0,0 @@ -(ns soda-ash.elements.template - (:require [soda-ash.elements.helpers :as h])) - - -(defn create-attrs [sanitized-attrs class] - (merge sanitized-attrs - {:class class})) - -(defn select-soda [r-soda sanitized-soda] - (or r-soda sanitized-soda)) - -(defn select-tag [tag default-tag] - (or tag default-tag)) - - -(defn element [{:keys [e-name - default-tag - ui? - type-set - bool-set - mod-set - opt-set - special-map] - :or {ui? true - type-set #{} - bool-set #{} - mod-set #{} - opt-set #{} - special-map {}}}] - (fn [{:keys [soda] - :as attrs} - & children] - - (let [;; get - tag (:tag soda) - ratom (:ratom soda) - path (:path soda) - ;; sanitize - sanitized-soda (h/sanitize-soda soda) - sanitized-attrs (h/sanitize-attrs attrs)] - - (when (and ratom path) - (h/set-initial-values! ratom path sanitized-soda)) - - (fn [_ & children] - (let [;; get - m (when ratom @ratom) - r-soda (get-in m (flatten [path :soda])) - selected-soda (select-soda r-soda sanitized-soda) - selected-tag (select-tag tag default-tag) - ;; class - soda-class (h/soda->class e-name - selected-soda - type-set - bool-set - mod-set - opt-set - special-map) - class (h/class ui? - soda-class - e-name) - ;; attrs - r-attrs (create-attrs sanitized-attrs class)] - - (into [selected-tag r-attrs] - children)))))) diff --git a/src/soda_ash/core.cljs b/src/soda_ash/core.cljs new file mode 100644 index 0000000..9797290 --- /dev/null +++ b/src/soda_ash/core.cljs @@ -0,0 +1,9 @@ +(ns soda-ash.core + (:require-macros + [soda-ash.macros :refer [export-semantic-ui-react-components]]) + (:require + [cljsjs.semantic-ui-react] + [reagent.core])) + + +(export-semantic-ui-react-components) diff --git a/src/soda_ash/macros.clj b/src/soda_ash/macros.clj new file mode 100644 index 0000000..2615466 --- /dev/null +++ b/src/soda_ash/macros.clj @@ -0,0 +1,161 @@ +(ns soda-ash.macros) + + +(def semantic-ui-react-tags + '[Accordion + AccordionContent + AccordionTitle + Breadcrumb + BreadcrumbDivider + BreadcrumbSection + Button + ButtonContent + ButtonGroup + ButtonOr + Card + CardContent + CardDescription + CardGroup + CardHeader + CardMeta + Checkbox + Comment ;; use as CommentSA + CommentAction + CommentActions + CommentAuthor + CommentAvatar + CommentContent + CommentGroup + CommentMetadata + CommentText + Confirm + Container + Dimmer + DimmerDimmable + Divider + Dropdown + DropdownDivider + DropdownHeader + DropdownItem + DropdownMenu + Embed + Feed + FeedContent + FeedDate + FeedEvent + FeedExtra + FeedLabel + FeedLike + FeedMeta + FeedSummary + FeedUser + Flag + Form + FormButton + FormCheckbox + FormDropdown + FormField + FormGroup + FormInput + FormRadio + FormSelect + FormTextArea + Grid + GridColumn + GridRow + Header + HeaderContent + HeaderSubheader + Icon + IconGroup + Image + ImageGroup + Input + Item + ItemContent + ItemDescription + ItemExtra + ItemGroup + ItemHeader + ItemImage + ItemMeta + Label + LabelDetail + LabelGroup + List ;; use as ListSA + ListContent + ListDescription + ListHeader + ListIcon + ListItem + ListList + Loader + Menu + MenuHeader + MenuItem + MenuMenu + Message + MessageContent + MessageHeader + MessageItem + MessageList + Modal + ModalActions + ModalContent + ModalDescription + ModalHeader + Popup + PopupContent + PopupHeader + Portal + Progress + Radio + Rail + Rating + RatingIcon + Reveal + RevealContent + Search + SearchCategory + SearchResult + SearchResults + Segment + SegmentGroup + Select + Sidebar + SidebarPushable + SidebarPusher + Statistic + StatisticGroup + StatisticLabel + StatisticValue + Step + StepContent + StepDescription + StepGroup + StepTitle + Table + TableBody + TableCell + TableFooter + TableHeader + TableHeaderCell + TableRow + TextArea]) + + +(def reserved-tags #{"Comment" + "List"}) + + +(defn create-semantic-ui-react-component [tag] + (let [tag-name (if (reserved-tags (name tag)) + (-> tag name (str "SA") symbol) + tag)] + `(def ~tag-name (reagent.core/adapt-react-class + (aget js/semanticUIReact ~(name tag)))))) + + +(defmacro export-semantic-ui-react-components [] + `(do ~@(map create-semantic-ui-react-component + semantic-ui-react-tags))) diff --git a/src/test/cljs/soda_ash/elements/button_test.cljs b/src/test/cljs/soda_ash/elements/button_test.cljs deleted file mode 100644 index c9891ee..0000000 --- a/src/test/cljs/soda_ash/elements/button_test.cljs +++ /dev/null @@ -1,106 +0,0 @@ -(ns soda-ash.elements.button-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/button {}] c) - node (sel1 c [:button]) - class (h/get-class node)] - (is (= "ui button" class)))) - - -(deftest soda-add-class - (let [_ (reagent/render [s/button {:soda {:add-class "gadfly"}}] c) - node (sel1 c [:button]) - class (h/get-class node)] - (is (= "ui gadfly button" class) - ":add-class should add a class between ui and button"))) - - -(def soda - {:type :animated - :circular? true - :compact? true - :fluid? true - :toggle? true - :attached :top - :color :orange - :consequence :positive - :size :massive - :social :twitter - :state :loading}) - -(defn check-classes [class] - (doto class - (h/check-class #"animated") - (h/check-class #"circular") - (h/check-class #"compact") - (h/check-class #"fluid") - (h/check-class #"toggle") - (h/check-class #"attached") - (h/check-class #"orange") - (h/check-class #"positive") - (h/check-class #"massive") - (h/check-class #"twitter") - (h/check-class #"loading"))) - - -(deftest with-soda - (let [_ (reagent/render [s/button {:soda soda}] c) - node (sel1 c [:button]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/button {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:button]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) - - -(deftest buttons-with-soda - (let [_ (reagent/render [s/buttons {:soda soda}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (check-classes class))) - - -(deftest group-with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/buttons {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/container_test.cljs b/src/test/cljs/soda_ash/elements/container_test.cljs deleted file mode 100644 index 0800d32..0000000 --- a/src/test/cljs/soda_ash/elements/container_test.cljs +++ /dev/null @@ -1,61 +0,0 @@ -(ns soda-ash.elements.container-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/container {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "ui container" class)))) - - -(def soda - {:type :text - :aligned :center - :fluid? true}) - -(defn check-classes [class] - (doto class - (h/check-class #"text") - (h/check-class #"center aligned") - (h/check-class #"fluid"))) - - -(deftest with-soda - (let [_ (reagent/render [s/container {:soda soda}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/container {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/divider_test.cljs b/src/test/cljs/soda_ash/elements/divider_test.cljs deleted file mode 100644 index 61fb0ab..0000000 --- a/src/test/cljs/soda_ash/elements/divider_test.cljs +++ /dev/null @@ -1,67 +0,0 @@ -(ns soda-ash.elements.divider-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/divider {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "ui divider" class)))) - - -(def soda - {:type :vertical - :clearing? true - :fitted? true - :hidden? true - :inverted? true - :section? true}) - -(defn check-classes [class] - (doto class - (h/check-class #"vertical") - (h/check-class #"clearing") - (h/check-class #"fitted") - (h/check-class #"hidden") - (h/check-class #"inverted") - (h/check-class #"section"))) - - -(deftest with-soda - (let [_ (reagent/render [s/divider {:soda soda}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/divider {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/flag_test.cljs b/src/test/cljs/soda_ash/elements/flag_test.cljs deleted file mode 100644 index 9f23f5c..0000000 --- a/src/test/cljs/soda_ash/elements/flag_test.cljs +++ /dev/null @@ -1,57 +0,0 @@ -(ns soda-ash.elements.flag-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/flag {}] c) - node (sel1 c [:i]) - class (h/get-class node)] - (is (= "flag" class)))) - - -(def soda - {:flag :france}) - -(defn check-classes [class] - (doto class - (h/check-class #"france"))) - - -(deftest with-soda - (let [_ (reagent/render [s/flag {:soda soda}] c) - node (sel1 c [:i]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/flag {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:i]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/header_test.cljs b/src/test/cljs/soda_ash/elements/header_test.cljs deleted file mode 100644 index ec99bb4..0000000 --- a/src/test/cljs/soda_ash/elements/header_test.cljs +++ /dev/null @@ -1,71 +0,0 @@ -(ns soda-ash.elements.header-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/header {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "ui header" class)))) - - -(def soda - {:type :tiny - :block? true - :dividing? true - :inverted? true - :state :disabled - :attached :top - :floated :left - :color :teal}) - -(defn check-classes [class] - (doto class - (h/check-class #"tiny") - (h/check-class #"block") - (h/check-class #"disabled") - (h/check-class #"dividing") - (h/check-class #"inverted") - (h/check-class #"top attached") - (h/check-class #"left floated") - (h/check-class #"teal"))) - - -(deftest with-soda - (let [_ (reagent/render [s/header {:soda soda}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/header {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/helpers_test.cljs b/src/test/cljs/soda_ash/elements/helpers_test.cljs deleted file mode 100644 index 90222f1..0000000 --- a/src/test/cljs/soda_ash/elements/helpers_test.cljs +++ /dev/null @@ -1,139 +0,0 @@ -(ns soda-ash.elements.helpers-test - (:require [cljs.test :refer-macros [deftest testing is]] - [soda-ash.elements.helpers :as h])) - - - -;; errors - - -(deftest throw-error - (is (thrown-with-msg? js/Error. - #"Soda-ash :foo :bar doesn't exist for baz element" - (h/throw-error :foo :bar "baz")))) - - -(deftest throw-type-error - (is (thrown-with-msg? js/Error. - #"Soda-ash :type :bar doesn't exist for baz element" - (h/throw-type-error :bar "baz")))) - - - -;; class - - -(deftest value->class - (is (= "foo" (h/value->class :foo))) - (is (= "foo bar" (h/value->class :foo-bar)))) - - -(deftest add-class->class - (is (= "gadfly" (h/add-class->class :gadfly)) - (is (= "soda ash" (h/add-class->class :soda-ash))))) - - -(deftest type->class - (is (nil? (h/type->class :default #{:foo} "baz"))) - (is (= "foo" (h/type->class :foo #{:foo} "baz"))) - (is (thrown-with-msg? js/Error. - #"Soda-ash :type :foo doesn't exist for baz element" - (h/type->class :foo #{:bar} "baz")))) - - -(deftest bool->class - (is (= "foo" (h/bool->class :foo? true))) - (is (nil? (h/bool->class :foo? false))) - - (is (= "foo bar" (h/bool->class :foo-bar? true))) - (is (nil? (h/bool->class :foo-bar? false)))) - - -(deftest mod->class - (is (= "foo" (h/mod->class :foo :default))) - (is (= "bar foo" (h/mod->class :foo :bar)))) - - -(deftest opt->class - (is (nil? (h/opt->class :default))) - (is (= "foo" (h/opt->class :foo))) - (is (= "foo bar" (h/opt->class :foo-bar)))) - - -(deftest special->class - (let [special-map {:aligned {:right "right aligned" - :left "left aligned" - :justified "justified" - :center "center aligned"}}] - (is (= "right aligned" (h/special->class :aligned - :right - special-map - "baz"))) - (is (thrown-with-msg? js/Error. - #"Soda-ash :aligned :bad-option doesn't exist for baz element" - (h/special->class :aligned - :bad-option - special-map - "baz"))))) - - -(deftest class - (is (= "foo" (h/class false nil "foo"))) - (is (= "ui foo" (h/class true nil "foo"))) - (is (= "ui bar foo" (h/class true "bar" "foo"))) - (is (= "bar foo" (h/class false "bar" "foo"))) - (is (= "ui bar baz foo" (h/class true "bar baz" "foo"))) - (is (= "ui foos" (h/class true nil "foos")))) - - - -;; sanitize - - -(deftest sanitize-soda - (is (nil? (h/sanitize-soda nil))) - (is (= {} (h/sanitize-soda {}))) - (is (= {:foo :bar} (h/sanitize-soda {:foo :bar}))) - (is (= {:foo :bar - :baz :quux} (h/sanitize-soda {:foo :bar - :baz :quux - :tag :div - :ui? false - :ratom :foo-ratom - :path :foo-path})))) - - -(deftest sanitize-attrs - (is (nil? (h/sanitize-attrs nil))) - (is (= {} (h/sanitize-attrs {}))) - (is (= {:foo :bar} (h/sanitize-attrs {:foo :bar}))) - (is (= {:foo :bar - :baz :quux} (h/sanitize-attrs {:foo :bar - :baz :quux - :soda {:alpha :beta}})))) - - - -;; state - - -(deftest set-initial-values! - (let [ratom (atom {})] - (h/set-initial-values! ratom :foo nil) - (is (nil? (get-in @ratom [:foo :soda])))) - - (let [ratom (atom {})] - (h/set-initial-values! ratom :foo {}) - (is (nil? (get-in @ratom [:foo :soda])))) - - (let [ratom (atom {})] - (h/set-initial-values! ratom :foo {:bar :baz}) - (is (= {:bar :baz} (get-in @ratom [:foo :soda])))) - - (let [ratom (atom {})] - (h/set-initial-values! ratom [:foo] {:bar :baz}) - (is (= {:bar :baz} (get-in @ratom [:foo :soda])))) - - (let [ratom (atom {})] - (h/set-initial-values! ratom [:foo :quux] {:bar :baz}) - (is (= {:bar :baz} (get-in @ratom [:foo :quux :soda]))))) diff --git a/src/test/cljs/soda_ash/elements/icon_test.cljs b/src/test/cljs/soda_ash/elements/icon_test.cljs deleted file mode 100644 index 116e675..0000000 --- a/src/test/cljs/soda_ash/elements/icon_test.cljs +++ /dev/null @@ -1,95 +0,0 @@ -(ns soda-ash.elements.icon-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/icon {}] c) - node (sel1 c [:i]) - class (h/get-class node)] - (is (= "icon" class)))) - - -(def soda - {:bordered? true - :circular? true - :fitted? true - :inverted? true - :link? true - - :flipped :horizontally - :rotated :clockwise - - :color :teal - :icon :user - :size :tiny - :state :loading}) - -(defn check-classes [class] - (doto class - (h/check-class #"bordered") - (h/check-class #"circular") - (h/check-class #"fitted") - (h/check-class #"inverted") - (h/check-class #"link") - - (h/check-class #"horizontally flipped") - (h/check-class #"clockwise rotated") - - (h/check-class #"teal") - (h/check-class #"user") - (h/check-class #"tiny") - (h/check-class #"loading"))) - - -(deftest with-soda - (let [_ (reagent/render [s/icon {:soda soda}] c) - node (sel1 c [:i]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/icon {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:i]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) - - -(deftest group-with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/icons {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:i]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/image_test.cljs b/src/test/cljs/soda_ash/elements/image_test.cljs deleted file mode 100644 index 4935374..0000000 --- a/src/test/cljs/soda_ash/elements/image_test.cljs +++ /dev/null @@ -1,91 +0,0 @@ -(ns soda-ash.elements.image-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/image {}] c) - node (sel1 c [:img]) - class (h/get-class node)] - (is (= "ui image" class)))) - - -(def soda - {:state :disabled - :aligned :top - :avatar? true - :bordered? true - :centered? true - :circular? true - :floated :left - :fluid? true - :rounded? true - :size :tiny - :spaced :left}) - -(defn check-classes [class] - (doto class - (h/check-class #"disabled") - (h/check-class #"top aligned") - (h/check-class #"avatar") - (h/check-class #"bordered") - (h/check-class #"centered") - (h/check-class #"circular") - (h/check-class #"left floated") - (h/check-class #"fluid") - (h/check-class #"rounded") - (h/check-class #"tiny") - (h/check-class #"left spaced"))) - - -(deftest with-soda - (let [_ (reagent/render [s/image {:soda soda}] c) - node (sel1 c [:img]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/image {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:img]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) - - -(deftest group-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/images {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/input_test.cljs b/src/test/cljs/soda_ash/elements/input_test.cljs deleted file mode 100644 index 6e2ade0..0000000 --- a/src/test/cljs/soda_ash/elements/input_test.cljs +++ /dev/null @@ -1,72 +0,0 @@ -(ns soda-ash.elements.input-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/input {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "ui input" class)))) - - -(def soda - {:state :focus - :action :left - :fluid? true - :icon :left - :inverted? true - :labeled :left-corner - :transparent? true - :size :massive - }) - -(defn check-classes [class] - (doto class - (h/check-class #"focus") - (h/check-class #"left action") - (h/check-class #"fluid") - (h/check-class #"left icon") - (h/check-class #"inverted") - (h/check-class #"left corner labeled") - (h/check-class #"transparent") - (h/check-class #"massive"))) - - -(deftest with-soda - (let [_ (reagent/render [s/input {:soda soda}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/input {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/label_test.cljs b/src/test/cljs/soda_ash/elements/label_test.cljs deleted file mode 100644 index b57e7a4..0000000 --- a/src/test/cljs/soda_ash/elements/label_test.cljs +++ /dev/null @@ -1,79 +0,0 @@ -(ns soda-ash.elements.label-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/label {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "ui label" class)))) - - -(def soda - {:type :top-attached - :basic? true - :circular? true - :color :teal - :size :massive}) - -(defn check-classes [class] - (doto class - (h/check-class #"top attached") - (h/check-class #"basic") - (h/check-class #"circular") - (h/check-class #"teal") - (h/check-class #"massive"))) - - -(deftest with-soda - (let [_ (reagent/render [s/label {:soda soda}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/label {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) - - -(deftest group-with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/labels {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/list_card.cljs b/src/test/cljs/soda_ash/elements/list_card.cljs deleted file mode 100644 index be552fb..0000000 --- a/src/test/cljs/soda_ash/elements/list_card.cljs +++ /dev/null @@ -1,77 +0,0 @@ -(ns soda-ash.elements.list-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/s-list {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "ui list" class)))) - - -(def soda - {:type :bulleted - :aligned :top - :animated? true - :celled? true - :divided? true - :horizontal? true - :inverted? true - :right-floated? true - :relaxed :default - :selection? true - :size :massive}) - -(defn check-classes [class] - (doto class - (h/check-class #"bulleted") - (h/check-class #"top aligned") - (h/check-class #"animated") - (h/check-class #"celled") - (h/check-class #"divided") - (h/check-class #"horizontal") - (h/check-class #"inverted") - (h/check-class #"right floated") - (h/check-class #"relaxed") - (h/check-class #"selection") - (h/check-class #"massive"))) - - -(deftest with-soda - (let [_ (reagent/render [s/s-list {:soda soda}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/s-list {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/loader_test.cljs b/src/test/cljs/soda_ash/elements/loader_test.cljs deleted file mode 100644 index 5cb89c4..0000000 --- a/src/test/cljs/soda_ash/elements/loader_test.cljs +++ /dev/null @@ -1,65 +0,0 @@ -(ns soda-ash.elements.loader-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/loader {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "ui loader" class)))) - - -(def soda - {:type :text - :centered? true - :inline :small - :size :medium - :state :default}) - -(defn check-classes [class] - (doto class - (h/check-class #"text") - (h/check-class #"centered") - (h/check-class #"small inline") - (h/check-class #"medium") - (h/!check-class #"active"))) - - -(deftest with-soda - (let [_ (reagent/render [s/loader {:soda soda}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/loader {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/rail_test.cljs b/src/test/cljs/soda_ash/elements/rail_test.cljs deleted file mode 100644 index 1d45696..0000000 --- a/src/test/cljs/soda_ash/elements/rail_test.cljs +++ /dev/null @@ -1,61 +0,0 @@ -(ns soda-ash.elements.rail-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/rail {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "ui rail" class)))) - - -(def soda - {:type :left-internal - :attached? true - :close :very}) - -(defn check-classes [class] - (doto class - (h/check-class #"left internal") - (h/check-class #"attached") - (h/check-class #"very close"))) - - -(deftest with-soda - (let [_ (reagent/render [s/rail {:soda soda}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/rail {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/reveal_test.cljs b/src/test/cljs/soda_ash/elements/reveal_test.cljs deleted file mode 100644 index 21add32..0000000 --- a/src/test/cljs/soda_ash/elements/reveal_test.cljs +++ /dev/null @@ -1,61 +0,0 @@ -(ns soda-ash.elements.reveal-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/reveal {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "ui reveal" class)))) - - -(def soda - {:type :move-right - :state :disabled - :instant? true}) - -(defn check-classes [class] - (doto class - (h/check-class #"move right") - (h/check-class #"disabled") - (h/check-class #"instant"))) - - -(deftest with-soda - (let [_ (reagent/render [s/reveal {:soda soda}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/reveal {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/segment_test.cljs b/src/test/cljs/soda_ash/elements/segment_test.cljs deleted file mode 100644 index 07b6f1c..0000000 --- a/src/test/cljs/soda_ash/elements/segment_test.cljs +++ /dev/null @@ -1,95 +0,0 @@ -(ns soda-ash.elements.segment-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/segment {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "ui segment" class)))) - - -(def soda - {:type :raised - :state :loading - :aligned :left - :attached :left - :basic? true - :circular? true - :clearing? true - :color :olive - :compact? true - :emphasis :secondary - :floated :right - :inverted? true - :padded :very}) - -(defn check-classes [class] - (doto class - (h/check-class #"raised") - (h/check-class #"loading") - (h/check-class #"left aligned") - (h/check-class #"left attached") - (h/check-class #"basic") - (h/check-class #"circular") - (h/check-class #"clearing") - (h/check-class #"olive") - (h/check-class #"compact") - (h/check-class #"secondary") - (h/check-class #"right floated") - (h/check-class #"inverted") - (h/check-class #"very padded"))) - - -(deftest with-soda - (let [_ (reagent/render [s/segment {:soda soda}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/segment {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) - - -(deftest group-with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/segments {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/step_test.cljs b/src/test/cljs/soda_ash/elements/step_test.cljs deleted file mode 100644 index 6704f08..0000000 --- a/src/test/cljs/soda_ash/elements/step_test.cljs +++ /dev/null @@ -1,97 +0,0 @@ -(ns soda-ash.elements.step-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.element :as s] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest no-soda - (let [_ (reagent/render [s/step {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "step" class)))) - - -(def soda - {:type :link - :state :completed}) - -(defn check-classes [class] - (doto class - (h/check-class #"link") - (h/check-class #"completed"))) - - -(deftest with-soda - (let [_ (reagent/render [s/step {:soda soda}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (check-classes class))) - - -(deftest with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/step {:soda (merge - {:ratom ratom - :path :foo} - soda)}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes class) - - (h/check-soda soda ratom-soda))) - - - -(deftest group-no-soda - (let [_ (reagent/render [s/steps {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "ui steps" class)))) - - -(def soda2 - {:type :tablet-stackable - :fluid? true - :attached :top - :divided :two - :size :large}) - -(defn check-classes2 [class] - (doto class - (h/check-class #"tablet stackable") - (h/check-class #"fluid") - (h/check-class #"top attached") - (h/check-class #"two") - (h/check-class #"large"))) - -(deftest group-with-soda-with-ratom - (let [ratom (reagent/atom {}) - _ (reagent/render [s/steps {:soda (merge - {:ratom ratom - :path :foo} - soda2 - )}] c) - node (sel1 c [:div]) - class (h/get-class node) - ratom-soda (get-in @ratom [:foo :soda])] - (check-classes2 class) - - (h/check-soda soda2 ratom-soda))) diff --git a/src/test/cljs/soda_ash/elements/template_test.cljs b/src/test/cljs/soda_ash/elements/template_test.cljs deleted file mode 100644 index 9d8fd00..0000000 --- a/src/test/cljs/soda_ash/elements/template_test.cljs +++ /dev/null @@ -1,43 +0,0 @@ -(ns soda-ash.elements.template-test - (:require [cljs.test :refer-macros [deftest testing is use-fixtures]] - [cljs-react-test.utils :as tu] - [dommy.core :as dommy :refer-macros [sel1]] - [reagent.core :as reagent] - [soda-ash.elements.template :as t] - [soda-ash.elements.test-helpers :as h])) - - -;; Util - -(def ^:dynamic c) - -(use-fixtures :each (fn [test-fn] - (binding [c (tu/new-container!)] - (test-fn) - (tu/unmount! c)))) - - - -;; Tests - - -(deftest template - (testing "base case" - (let [_ (reagent/render [(t/element - {:e-name "foo" - :default-tag :div}) - {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "ui foo" class)))) - - (testing "ui?" - (testing "create element with ui? false" - (let [_ (reagent/render [(t/element - {:e-name "foo" - :default-tag :div - :ui? false}) - {}] c) - node (sel1 c [:div]) - class (h/get-class node)] - (is (= "foo" class)))))) diff --git a/src/test/cljs/soda_ash/elements/test_helpers.cljs b/src/test/cljs/soda_ash/elements/test_helpers.cljs deleted file mode 100644 index a03754c..0000000 --- a/src/test/cljs/soda_ash/elements/test_helpers.cljs +++ /dev/null @@ -1,28 +0,0 @@ -(ns soda-ash.elements.test-helpers - (:require [cljs.test :refer-macros [is]])) - - -(defn get-attr [attr node] - (.getAttribute node attr)) - -(def get-class (partial get-attr "class")) - - -(defn check-class - ([class regex] - (check-class class regex nil)) - ([class regex doc-string] - (is (re-find regex class) - doc-string))) - -(defn !check-class - ([class regex] - (!check-class class regex nil)) - ([class regex doc-string] - (is (not (re-find regex class)) - doc-string))) - - -(defn check-soda [soda ratom-soda] - (doseq [[k v] soda] - (is (= v (k ratom-soda))))) diff --git a/src/test/cljs/soda_ash/runner.cljs b/src/test/cljs/soda_ash/runner.cljs deleted file mode 100644 index b915f9a..0000000 --- a/src/test/cljs/soda_ash/runner.cljs +++ /dev/null @@ -1,40 +0,0 @@ -(ns soda-ash.runner - (:require - [doo.runner :refer-macros [doo-tests]] - [soda-ash.elements.button-test] - [soda-ash.elements.container-test] - [soda-ash.elements.divider-test] - [soda-ash.elements.flag-test] - [soda-ash.elements.header-test] - [soda-ash.elements.helpers-test] - [soda-ash.elements.icon-test] - [soda-ash.elements.image-test] - [soda-ash.elements.input-test] - [soda-ash.elements.label-test] - [soda-ash.elements.list-test] - [soda-ash.elements.loader-test] - [soda-ash.elements.rail-test] - [soda-ash.elements.reveal-test] - [soda-ash.elements.segment-test] - [soda-ash.elements.step-test] - [soda-ash.elements.template-test])) - - -(doo-tests - 'soda-ash.elements.button-test - 'soda-ash.elements.container-test - 'soda-ash.elements.divider-test - 'soda-ash.elements.header-test - 'soda-ash.elements.flag-test - 'soda-ash.elements.helpers-test - 'soda-ash.elements.icon-test - 'soda-ash.elements.image-test - 'soda-ash.elements.input-test - 'soda-ash.elements.label-test - 'soda-ash.elements.list-test - 'soda-ash.elements.loader-test - 'soda-ash.elements.rail-test - 'soda-ash.elements.reveal-test - 'soda-ash.elements.segment-test - 'soda-ash.elements.step-test - 'soda-ash.elements.template-test)