git.iko.soy/rowtype-yoga/purescript-fahrtwind
on main help sign in
Port plumage files
commit192b29f299e7d1a522b7a7cd61e522138d3699b6 authorMark Eibes <mark.eibes@gmail.com> dateSun 5 Jun 2022, 15:14 (4 years ago)
42 files changed+3613
.gitignore+6 package.json+4 packages.dhall+679 spago.dhall+32 src/Fahrtwind/Icon/BrandIcon.purs+32 src/Fahrtwind/Icon/Common.purs+43 src/Fahrtwind/Icon/Heroicons.purs+891 src/Fahrtwind/Style.purs+68 src/Fahrtwind/Style/BlendMode.purs+10 src/Fahrtwind/Style/BlendMode/Types.purs+39 src/Fahrtwind/Style/Border.purs+68 src/Fahrtwind/Style/BoxModel.purs+91 src/Fahrtwind/Style/BoxShadow.purs+90 src/Fahrtwind/Style/Breakpoint.purs+14 src/Fahrtwind/Style/Child.purs+10 src/Fahrtwind/Style/Color/Background.purs+105 src/Fahrtwind/Style/Color/Tailwind.purs+357 src/Fahrtwind/Style/Color/Text.purs+24 src/Fahrtwind/Style/Color/Util.purs+34 src/Fahrtwind/Style/Cursor.purs+27 src/Fahrtwind/Style/Display.purs+22 src/Fahrtwind/Style/Display/Flex.purs+90 src/Fahrtwind/Style/Display/Grid.purs+12 src/Fahrtwind/Style/Divide.purs+54 src/Fahrtwind/Style/Global.purs+190 src/Fahrtwind/Style/Input.purs+11 src/Fahrtwind/Style/Inset.purs+25 src/Fahrtwind/Style/Isolation.purs+10 src/Fahrtwind/Style/Nesting.purs+15 src/Fahrtwind/Style/Opacity.purs+8 src/Fahrtwind/Style/Overflow.purs+27 src/Fahrtwind/Style/PointerEvents.purs+15 src/Fahrtwind/Style/Position.purs+19 src/Fahrtwind/Style/PseudoClasses.purs+169 src/Fahrtwind/Style/PseudoElements.purs+25 src/Fahrtwind/Style/ScollBar.purs+34 src/Fahrtwind/Style/Size.purs+67 src/Fahrtwind/Style/Text.purs+128 src/Fahrtwind/Style/Transform.purs+26 src/Fahrtwind/Style/Transition.purs+22 src/Fahrtwind/Style/UserSelect.purs+10 src/Fahrtwind/Style/Visibility.purs+10
.gitignorenew file+6
@@ -0,0 +1,6 @@
1+.spago/
2+output/
3+node_modules/
4+bower_components/
5+.psc-ide-port
6+package-lock.json
package.jsonnew file+4
@@ -0,0 +1,4 @@
1+{
2+ "devDependencies": {
3+ }
4+}
packages.dhallnew file+679
@@ -0,0 +1,679 @@
1+let upstream =
2+ https://github.com/purescript/package-sets/releases/download/psc-0.15.2-20220531/packages.dhall
3+ sha256:278d3608439187e51136251ebf12fabda62d41ceb4bec9769312a08b56f853e3
4+
5+in upstream
6+ with playwright =
7+ { repo =
8+ "https://github.com/working-group-purescript-es/purescript-playwright.git"
9+ , version = "es-modules"
10+ , dependencies =
11+ [ "argonaut-core"
12+ , "console"
13+ , "effect"
14+ , "prelude"
15+ , "psci-support"
16+ , "aff-promise"
17+ , "test-unit"
18+ , "untagged-union"
19+ , "node-buffer"
20+ , "node-fs-aff"
21+ , "undefined"
22+ , "aff"
23+ , "either"
24+ , "exceptions"
25+ , "foreign"
26+ , "foreign-object"
27+ , "literals"
28+ , "maybe"
29+ , "node-streams"
30+ , "ordered-collections"
31+ , "refs"
32+ , "strings"
33+ , "transformers"
34+ ]
35+ }
36+ with milkis =
37+ { repo =
38+ "https://github.com/working-group-purescript-es/purescript-milkis.git"
39+ , version = "es-modules"
40+ , dependencies =
41+ [ "aff-promise"
42+ , "arraybuffer-types"
43+ , "foreign-object"
44+ , "prelude"
45+ , "typelevel-prelude"
46+ ]
47+ }
48+ with debug =
49+ { dependencies = [ "prelude", "functions" ]
50+ , repo =
51+ "https://github.com/working-group-purescript-es/purescript-debug.git"
52+ , version = "es-modules"
53+ }
54+ with checked-exceptions =
55+ { dependencies = [ "prelude", "transformers", "variant" ]
56+ , repo = "https://github.com/natefaubion/purescript-checked-exceptions.git"
57+ , version = "v3.1.1"
58+ }
59+ with language-cst-parser =
60+ { dependencies =
61+ [ "arrays"
62+ , "const"
63+ , "effect"
64+ , "either"
65+ , "foldable-traversable"
66+ , "free"
67+ , "functors"
68+ , "maybe"
69+ , "numbers"
70+ , "ordered-collections"
71+ , "strings"
72+ , "transformers"
73+ , "tuples"
74+ , "typelevel-prelude"
75+ ]
76+ , repo = "https://github.com/natefaubion/purescript-language-cst-parser.git"
77+ , version = "v0.9.3"
78+ }
79+ with stringutils =
80+ { dependencies =
81+ [ "arrays"
82+ , "either"
83+ , "integers"
84+ , "maybe"
85+ , "partial"
86+ , "prelude"
87+ , "strings"
88+ ]
89+ , repo =
90+ "https://github.com/working-group-purescript-es/purescript-stringutils.git"
91+ , version = "es-modules"
92+ }
93+ with plumage =
94+ { dependencies =
95+ [ "aff"
96+ , "arrays"
97+ , "colors"
98+ , "console"
99+ , "datetime"
100+ , "debug"
101+ , "effect"
102+ , "either"
103+ , "enums"
104+ , "exceptions"
105+ , "foldable-traversable"
106+ , "foreign"
107+ , "foreign-object"
108+ , "framer-motion"
109+ , "integers"
110+ , "literals"
111+ , "maybe"
112+ , "newtype"
113+ , "now"
114+ , "nullable"
115+ , "ordered-collections"
116+ , "prelude"
117+ , "psci-support"
118+ , "react-basic"
119+ , "react-basic-dom"
120+ , "react-basic-emotion"
121+ , "react-basic-hooks"
122+ , "record"
123+ , "remotedata"
124+ , "ry-blocks"
125+ , "strings"
126+ , "tuples"
127+ , "typelevel-prelude"
128+ , "unsafe-coerce"
129+ , "unsafe-reference"
130+ , "untagged-union"
131+ , "web-dom"
132+ , "web-html"
133+ ]
134+ , repo = "https://github.com/murmuras-tech/plumage.git"
135+ , version = "99374fa494823a8d1fa7568cd488edff99600e0f"
136+ }
137+ with web-router =
138+ { dependencies =
139+ [ "aff"
140+ , "effect"
141+ , "freet"
142+ , "indexed-monad"
143+ , "prelude"
144+ , "profunctor-lenses"
145+ , "routing"
146+ ]
147+ , repo = "https://github.com/robertdp/purescript-web-router.git"
148+ , version = "v0.3.0"
149+ }
150+ with framer-motion =
151+ { version = "es-modules"
152+ , repo = "https://github.com/i-am-the-slime/purescript-framer-motion.git"
153+ , dependencies =
154+ [ "aff"
155+ , "aff-promise"
156+ , "arrays"
157+ , "console"
158+ , "effect"
159+ , "foreign"
160+ , "foreign-object"
161+ , "heterogeneous"
162+ , "literals"
163+ , "maybe"
164+ , "nullable"
165+ , "prelude"
166+ , "psci-support"
167+ , "react-basic"
168+ , "react-basic-dom"
169+ , "react-basic-hooks"
170+ , "record"
171+ , "tuples"
172+ , "two-or-more"
173+ , "typelevel-prelude"
174+ , "unsafe-coerce"
175+ , "untagged-union"
176+ , "web-dom"
177+ , "web-events"
178+ , "web-uievents"
179+ ]
180+ }
181+ with spec =
182+ { repo = "https://github.com/purescript-spec/purescript-spec.git"
183+ , version = "master"
184+ , dependencies =
185+ [ "aff"
186+ , "ansi"
187+ , "avar"
188+ , "console"
189+ , "exceptions"
190+ , "foldable-traversable"
191+ , "fork"
192+ , "now"
193+ , "pipes"
194+ , "prelude"
195+ , "strings"
196+ , "transformers"
197+ ]
198+ }
199+ with spec-discovery =
200+ { repo = "https://github.com/purescript-spec/purescript-spec-discovery.git"
201+ , version = "master"
202+ , dependencies =
203+ [ "aff"
204+ , "aff-promise"
205+ , "arrays"
206+ , "console"
207+ , "effect"
208+ , "foldable-traversable"
209+ , "node-fs"
210+ , "prelude"
211+ , "spec"
212+ ]
213+ }
214+ with playwright =
215+ { repo =
216+ "https://github.com/working-group-purescript-es/purescript-playwright.git"
217+ , version = "es-modules"
218+ , dependencies =
219+ [ "argonaut-core"
220+ , "console"
221+ , "effect"
222+ , "prelude"
223+ , "psci-support"
224+ , "aff-promise"
225+ , "test-unit"
226+ , "untagged-union"
227+ , "node-buffer"
228+ , "node-fs-aff"
229+ , "undefined"
230+ , "aff"
231+ , "either"
232+ , "exceptions"
233+ , "foreign"
234+ , "foreign-object"
235+ , "literals"
236+ , "maybe"
237+ , "node-streams"
238+ , "ordered-collections"
239+ , "refs"
240+ , "strings"
241+ , "transformers"
242+ ]
243+ }
244+ with milkis =
245+ { repo =
246+ "https://github.com/working-group-purescript-es/purescript-milkis.git"
247+ , version = "es-modules"
248+ , dependencies =
249+ [ "aff-promise"
250+ , "arraybuffer-types"
251+ , "foreign-object"
252+ , "prelude"
253+ , "typelevel-prelude"
254+ ]
255+ }
256+ with debug =
257+ { dependencies = [ "prelude", "functions" ]
258+ , repo =
259+ "https://github.com/working-group-purescript-es/purescript-debug.git"
260+ , version = "es-modules"
261+ }
262+ with checked-exceptions =
263+ { dependencies = [ "prelude", "transformers", "variant" ]
264+ , repo = "https://github.com/natefaubion/purescript-checked-exceptions.git"
265+ , version = "v3.1.1"
266+ }
267+ with language-cst-parser =
268+ { dependencies =
269+ [ "arrays"
270+ , "const"
271+ , "effect"
272+ , "either"
273+ , "foldable-traversable"
274+ , "free"
275+ , "functors"
276+ , "maybe"
277+ , "numbers"
278+ , "ordered-collections"
279+ , "strings"
280+ , "transformers"
281+ , "tuples"
282+ , "typelevel-prelude"
283+ ]
284+ , repo = "https://github.com/natefaubion/purescript-language-cst-parser.git"
285+ , version = "v0.9.3"
286+ }
287+ with stringutils =
288+ { dependencies =
289+ [ "arrays"
290+ , "either"
291+ , "integers"
292+ , "maybe"
293+ , "partial"
294+ , "prelude"
295+ , "strings"
296+ ]
297+ , repo =
298+ "https://github.com/working-group-purescript-es/purescript-stringutils.git"
299+ , version = "es-modules"
300+ }
301+ with web-router =
302+ { dependencies =
303+ [ "aff"
304+ , "effect"
305+ , "freet"
306+ , "indexed-monad"
307+ , "prelude"
308+ , "profunctor-lenses"
309+ , "routing"
310+ ]
311+ , repo = "https://github.com/robertdp/purescript-web-router.git"
312+ , version = "v0.3.0"
313+ }
314+ with framer-motion.version = "24dc0a89dd65458b768f3731c886f9911898788d"
315+ with visx =
316+ { repo = "https://github.com/i-am-the-slime/purescript-visx.git"
317+ , version = "d79d4485a3abde28e0573da0384f29fe894ab253"
318+ , dependencies =
319+ [ "arrays"
320+ , "console"
321+ , "datetime"
322+ , "debug"
323+ , "effect"
324+ , "either"
325+ , "foldable-traversable"
326+ , "foreign"
327+ , "foreign-object"
328+ , "functions"
329+ , "integers"
330+ , "js-date"
331+ , "justifill"
332+ , "lists"
333+ , "maybe"
334+ , "newtype"
335+ , "nullable"
336+ , "orders"
337+ , "prelude"
338+ , "psci-support"
339+ , "react-basic"
340+ , "react-basic-dom"
341+ , "react-basic-hooks"
342+ , "record"
343+ , "record-extra"
344+ , "transformers"
345+ , "tuples"
346+ , "typelevel-prelude"
347+ , "unsafe-coerce"
348+ , "untagged-union"
349+ , "web-dom"
350+ ]
351+ }
352+ with graphql-fundeps =
353+ { dependencies =
354+ [ "aff"
355+ , "affjax"
356+ , "console"
357+ , "effect"
358+ , "either"
359+ , "http-methods"
360+ , "maybe"
361+ , "media-types"
362+ , "prelude"
363+ , "psci-support"
364+ , "simple-json"
365+ , "strings"
366+ ]
367+ , repo =
368+ "https://github.com/working-group-purescript-es/purescript-graphql-fundeps.git"
369+ , version = "main"
370+ }
371+ with foreign-generic =
372+ { repo =
373+ "https://github.com/working-group-purescript-es/purescript-foreign-generic.git"
374+ , version = "v0.15.0-updates"
375+ , dependencies =
376+ [ "effect"
377+ , "exceptions"
378+ , "foreign"
379+ , "foreign-object"
380+ , "identity"
381+ , "ordered-collections"
382+ , "record"
383+ ]
384+ }
385+ with heterogeneous =
386+ { dependencies =
387+ [ "either", "functors", "prelude", "record", "tuples", "variant" ]
388+ , repo = "https://github.com/natefaubion/purescript-heterogeneous.git"
389+ , version = "v0.5.1"
390+ }
391+ with interpolate =
392+ { dependencies = [ "prelude" ]
393+ , repo = "https://github.com/jordanmartinez/purescript-interpolate.git"
394+ , version = "v3.0.1"
395+ }
396+ with interpolate.version = "patch-1"
397+ with interpolate.repo
398+ = "https://github.com/i-am-the-slime/purescript-interpolate.git"
399+ with justifill =
400+ { dependencies = [ "record", "spec", "typelevel-prelude" ]
401+ , repo = "https://github.com/i-am-the-slime/purescript-justifill.git"
402+ , version = "v0.2.1"
403+ }
404+ with morello =
405+ { dependencies =
406+ [ "console", "debug", "effect", "heterogeneous", "strings", "validation" ]
407+ , repo = "https://github.com/sigma-andex/purescript-morello.git"
408+ , version = "v0.2.0"
409+ }
410+ with react-basic-emotion =
411+ { dependencies =
412+ [ "colors"
413+ , "console"
414+ , "effect"
415+ , "foreign"
416+ , "foreign-object"
417+ , "numbers"
418+ , "prelude"
419+ , "react-basic"
420+ , "react-basic-hooks"
421+ , "typelevel-prelude"
422+ , "unsafe-reference"
423+ ]
424+ , repo = "https://github.com/lumihq/purescript-react-basic-emotion.git"
425+ , version = "v6.0.0"
426+ }
427+ with uuid =
428+ { dependencies = [ "effect", "maybe", "foreign-generic", "console", "spec" ]
429+ , repo = "https://github.com/i-am-the-slime/purescript-uuid.git"
430+ , version = "patch-2"
431+ }
432+ with react-basic-emotion.repo
433+ =
434+ "https://github.com/working-group-purescript-es/purescript-react-basic-emotion.git"
435+ with react-basic-emotion.version = "es-modules"
436+ with literals =
437+ { dependencies =
438+ [ "assert"
439+ , "effect"
440+ , "console"
441+ , "integers"
442+ , "numbers"
443+ , "partial"
444+ , "psci-support"
445+ , "unsafe-coerce"
446+ , "typelevel-prelude"
447+ ]
448+ , repo = "https://github.com/jvliwanag/purescript-literals.git"
449+ , version = "v0.2.0"
450+ }
451+ with literals.repo
452+ =
453+ "https://github.com/working-group-purescript-es/purescript-literals.git"
454+ with literals.version = "es-modules"
455+ with untagged-union =
456+ { dependencies =
457+ [ "assert"
458+ , "console"
459+ , "effect"
460+ , "foreign"
461+ , "foreign-object"
462+ , "literals"
463+ , "maybe"
464+ , "newtype"
465+ , "psci-support"
466+ , "tuples"
467+ , "unsafe-coerce"
468+ ]
469+ , repo = "https://github.com/jvliwanag/purescript-untagged-union.git"
470+ , version = "v0.3.0"
471+ }
472+ with untagged-union.repo
473+ =
474+ "https://github.com/working-group-purescript-es/purescript-untagged-union.git"
475+ with untagged-union.version = "es-modules"
476+ with react-testing-library =
477+ { name = "react-testing-library"
478+ , dependencies = [ "react-basic", "react-basic-hooks", "react-basic-dom" ]
479+ , repo =
480+ "https://github.com/i-am-the-slime/purescript-react-testing-library.git"
481+ , version = "main"
482+ }
483+ with record-extra =
484+ { repo =
485+ "https://github.com/working-group-purescript-es/purescript-record-extra.git"
486+ , version = "v0.15.0-update"
487+ , dependencies =
488+ [ "arrays"
489+ , "console"
490+ , "effect"
491+ , "functions"
492+ , "lists"
493+ , "maybe"
494+ , "prelude"
495+ , "record"
496+ , "tuples"
497+ , "typelevel-prelude"
498+ ]
499+ }
500+ with framer-motion.version = "24dc0a89dd65458b768f3731c886f9911898788d"
501+ with visx =
502+ { repo = "https://github.com/i-am-the-slime/purescript-visx.git"
503+ , version = "es-modules"
504+ , dependencies =
505+ [ "arrays"
506+ , "console"
507+ , "datetime"
508+ , "debug"
509+ , "effect"
510+ , "either"
511+ , "foldable-traversable"
512+ , "foreign"
513+ , "foreign-object"
514+ , "functions"
515+ , "integers"
516+ , "js-date"
517+ , "justifill"
518+ , "lists"
519+ , "maybe"
520+ , "newtype"
521+ , "nullable"
522+ , "orders"
523+ , "prelude"
524+ , "psci-support"
525+ , "react-basic"
526+ , "react-basic-dom"
527+ , "react-basic-hooks"
528+ , "record"
529+ , "record-extra"
530+ , "transformers"
531+ , "tuples"
532+ , "typelevel-prelude"
533+ , "unsafe-coerce"
534+ , "untagged-union"
535+ , "web-dom"
536+ ]
537+ }
538+ with ry-blocks =
539+ { repo = "https://github.com/rowtype-yoga/ry-blocks.git"
540+ , version = "c75ba817af9dcbc1107cc0dbe76ce9637adede66"
541+ , dependencies =
542+ [ "aff"
543+ , "aff-promise"
544+ , "arrays"
545+ , "colors"
546+ , "console"
547+ , "control"
548+ , "datetime"
549+ , "debug"
550+ , "effect"
551+ , "either"
552+ , "enums"
553+ , "exceptions"
554+ , "foldable-traversable"
555+ , "foreign"
556+ , "foreign-generic"
557+ , "foreign-object"
558+ , "framer-motion"
559+ , "free"
560+ , "functions"
561+ , "heterogeneous"
562+ , "integers"
563+ , "interpolate"
564+ , "lists"
565+ , "literals"
566+ , "maybe"
567+ , "newtype"
568+ , "nullable"
569+ , "numbers"
570+ , "ordered-collections"
571+ , "partial"
572+ , "prelude"
573+ , "profunctor-lenses"
574+ , "psci-support"
575+ , "random"
576+ , "react-basic"
577+ , "react-basic-dom"
578+ , "react-basic-emotion"
579+ , "react-basic-hooks"
580+ , "react-testing-library"
581+ , "record"
582+ , "record-extra"
583+ , "routing"
584+ , "routing-duplex"
585+ , "spec"
586+ , "spec-discovery"
587+ , "strings"
588+ , "tailrec"
589+ , "transformers"
590+ , "tuples"
591+ , "two-or-more"
592+ , "typelevel-peano"
593+ , "typelevel-prelude"
594+ , "unsafe-coerce"
595+ , "untagged-union"
596+ , "web-dom"
597+ , "web-events"
598+ , "web-html"
599+ , "web-uievents"
600+ ]
601+ }
602+ with heterogeneous =
603+ { dependencies =
604+ [ "either", "functors", "prelude", "record", "tuples", "variant" ]
605+ , repo = "https://github.com/natefaubion/purescript-heterogeneous.git"
606+ , version = "v0.5.1"
607+ }
608+ with interpolate =
609+ { dependencies = [ "prelude" ]
610+ , repo = "https://github.com/jordanmartinez/purescript-interpolate.git"
611+ , version = "v3.0.1"
612+ }
613+ with morello =
614+ { dependencies =
615+ [ "console", "debug", "effect", "heterogeneous", "strings", "validation" ]
616+ , repo = "https://github.com/sigma-andex/purescript-morello.git"
617+ , version = "v0.2.0"
618+ }
619+ with simple-json =
620+ { dependencies =
621+ [ "arrays"
622+ , "exceptions"
623+ , "foreign-object"
624+ , "foreign"
625+ , "nullable"
626+ , "prelude"
627+ , "record"
628+ , "typelevel-prelude"
629+ , "variant"
630+ ]
631+ , repo =
632+ "https://github.com/working-group-purescript-es/purescript-simple-json.git"
633+ , version = "v0.15.0-update"
634+ }
635+ with interpolate =
636+ { dependencies = [ "prelude" ]
637+ , repo = "https://github.com/i-am-the-slime/purescript-interpolate.git"
638+ , version = "v3.0.1"
639+ }
640+ with interpolate.version = "patch-1"
641+ with justifill =
642+ { dependencies =
643+ [ "aff", "effect", "maybe", "prelude", "record", "typelevel-prelude" ]
644+ , repo = "https://github.com/i-am-the-slime/purescript-justifill.git"
645+ , version = "v0.3.1"
646+ }
647+ with react-basic-hooks =
648+ { dependencies =
649+ [ "aff"
650+ , "aff-promise"
651+ , "bifunctors"
652+ , "console"
653+ , "control"
654+ , "datetime"
655+ , "effect"
656+ , "either"
657+ , "exceptions"
658+ , "foldable-traversable"
659+ , "functions"
660+ , "indexed-monad"
661+ , "integers"
662+ , "maybe"
663+ , "newtype"
664+ , "now"
665+ , "nullable"
666+ , "ordered-collections"
667+ , "prelude"
668+ , "psci-support"
669+ , "react-basic"
670+ , "refs"
671+ , "tuples"
672+ , "type-equality"
673+ , "unsafe-coerce"
674+ , "unsafe-reference"
675+ , "web-html"
676+ ]
677+ , repo = "https://github.com/spicydonuts/purescript-react-basic-hooks.git"
678+ , version = "e7494bd4656b4a43c2efc69bf5f512e154f05cc1"
679+ }
spago.dhallnew file+32
@@ -0,0 +1,32 @@
1+{-
2+Welcome to a Spago project!
3+You can edit this file as you like.
4+
5+Need help? See the following resources:
6+- Spago documentation: https://github.com/purescript/spago
7+- Dhall language tour: https://docs.dhall-lang.org/tutorials/Language-Tour.html
8+
9+When creating a new Spago project, you can use
10+`spago init --no-comments` or `spago init -C`
11+to generate this file without the comments in this block.
12+-}
13+{ name = "fahrtwind"
14+, dependencies =
15+ [ "arrays"
16+ , "colors"
17+ , "console"
18+ , "effect"
19+ , "foreign-object"
20+ , "integers"
21+ , "prelude"
22+ , "psci-support"
23+ , "react-basic"
24+ , "react-basic-dom"
25+ , "react-basic-emotion"
26+ , "tuples"
27+ , "typelevel-prelude"
28+ , "unsafe-coerce"
29+ ]
30+, packages = ./packages.dhall
31+, sources = [ "src/**/*.purs", "test/**/*.purs" ]
32+}
src/Fahrtwind/Icon/BrandIcon.pursnew file+32
@@ -0,0 +1,32 @@
1+module Fahrtwind.Icon.BrandIcon where
2+
3+import Fahrtwind.Icon.Common (filled, outline)
4+import React.Basic (JSX)
5+import React.Basic.DOM.SVG as SVG
6+
7+facebook ∷ JSX
8+facebook =
9+ SVG.svg
10+ { viewBox: "0 0 24 24"
11+ , xmlns: "http://www.w3.org/2000/svg"
12+ , xmlSpace: "preserve"
13+ , stroke: "currentColor"
14+ , children:
15+ [ SVG.path { fill: "currentColor", stroke: "none", d: "M15.011 7.777h1.726V4.858c-.835-.087-1.675-.13-2.515-.128-2.497 0-4.205 1.524-4.205 4.314v2.406H7.199v3.268h2.818v8.372h3.379v-8.372h2.809l.422-3.268h-3.231V9.366c0-.964.257-1.589 1.615-1.589Z" }
16+ , SVG.path
17+ { strokeLinecap: "round"
18+ , strokeLinejoin: "round"
19+ , strokeWidth: "2"
20+ , d: "M22.984 5.017c0-2.195-1.782-3.976-3.976-3.976H4.966C2.772 1.041.99 2.822.99 5.017v14.097c0 2.194 1.782 3.976 3.976 3.976h14.042c2.194 0 3.976-1.782 3.976-3.976V5.017Z"
21+ }
22+ ]
23+ }
24+
25+instagram ∷ JSX
26+instagram = filled "M12 7c-.9889 0-1.9556.29324-2.77785.84265-.82225.54941-1.46311 1.3303-1.84155 2.24395-.37844.9136-.47745 1.9189-.28453 2.8889.19293.9699.66913 1.8608 1.3684 2.56.69926.6993 1.59013 1.1755 2.56003 1.3684.97.193 1.9753.0939 2.8889-.2845.9136-.3784 1.6945-1.0193 2.2439-1.8415C16.7068 13.9556 17 12.9889 17 12c0-1.3261-.5268-2.59785-1.4645-3.53553C14.5979 7.52678 13.3261 7 12 7Zm0 8c-.5933 0-1.1734-.1759-1.6667-.5056-.49336-.3296-.87788-.7982-1.10494-1.3463-.22706-.5482-.28647-1.1514-.17072-1.7334.11576-.5819.40148-1.1165.82104-1.53602.41952-.41956.95412-.70528 1.53602-.82104.582-.11575 1.1852-.05634 1.7334.17072.5481.22706 1.0167.61158 1.3463 1.10494C14.8241 10.8266 15 11.4067 15 12c0 .7956-.3161 1.5587-.8787 2.1213C13.5587 14.6839 12.7956 15 12 15Zm5-9c-.1978 0-.3911.05865-.5556.16853-.1644.10988-.2926.26606-.3683.44879-.0757.18272-.0955.38379-.0569.57777.0386.19398.1338.37216.2737.51202.1398.13985.318.23509.512.27368.194.03858.3951.01878.5778-.05691.1827-.07569.3389-.20386.4488-.36831S18 7.19778 18 7c0-.26522-.1054-.51957-.2929-.70711C17.5196 6.10536 17.2652 6 17 6Zm4.94 2.24c-.0166-.85458-.1789-1.70005-.48-2.5-.2792-.72793-.7084-1.38901-1.2597-1.9403-.5513-.5513-1.2124-.98048-1.9403-1.2597-.7999-.3011-1.6454-.46343-2.5-.48C14.79 2 14.47 2 12 2c-2.47 0-2.79 0-3.76.06a7.5100771 7.5100771 0 0 0-2.5.48c-.72793.27922-1.38901.7084-1.9403 1.2597-.5513.55129-.98048 1.21237-1.2597 1.9403a7.5100771 7.5100771 0 0 0-.48 2.5C2 9.22 2 9.54 2 12s0 2.78.06 3.76c.01657.8546.1789 1.7001.48 2.5.27922.7279.7084 1.389 1.2597 1.9403.55129.5513 1.21237.9805 1.9403 1.2597.79995.3011 1.64542.4634 2.5.48 1 0 1.29.06 3.76.06 2.47 0 2.79 0 3.76-.06.8546-.0166 1.7001-.1789 2.5-.48.7279-.2792 1.389-.7084 1.9403-1.2597.5513-.5513.9805-1.2124 1.2597-1.9403.3011-.7999.4634-1.6454.48-2.5 0-1 .06-1.3.06-3.76s0-2.78-.06-3.76Zm-2 7.43c-.0175.6346-.1357 1.2624-.35 1.86-.1772.4723-.4573.8993-.82 1.25-.3486.3628-.7764.6401-1.25.81-.599.2231-1.231.3448-1.87.36-.94 0-1.23.05-3.66.05H8.34c-.63798-.0165-1.26925-.1346-1.87-.35-.47234-.1772-.89933-.4573-1.25-.82-.36285-.3486-.64008-.7764-.81-1.25-.2222-.5958-.34385-1.2243-.36-1.86V8.38c.01724-.63879.13884-1.27046.36-1.87.17256-.46937.44953-.89338.81-1.24.34858-.36285.77641-.64008 1.25-.81.59899-.2231 1.23099-.34477 1.87-.36C9.28 4 9.57 4 12 4h3.66c.6421.01633 1.2773.13794 1.88.36.4694.17256.8934.44953 1.24.81.3628.34858.6401.77641.81 1.25.2448.60856.3835 1.25458.41 1.91 0 1 .05 1.25.05 3.67S20 14.71 20 15.67h-.06Z"
27+
28+tiktok ∷ JSX
29+tiktok = outline "M12.784 1v15.2695c0 2.7203-2.1902 4.9256-4.89201 4.9256C5.19022 21.1951 3 18.9898 3 16.2695c0-2.7204 2.19022-4.9257 4.89199-4.9257M20.122 8.88102c-4.0527 0-7.338-3.30792-7.338-7.38846"
30+
31+amazon ∷ JSX
32+amazon = filled "M1.04 17.52c.06667-.1067.17333-.1133.32-.02 3.30103 1.9247 7.05891 2.9264 10.88 2.9 2.6478-.0065 5.2718-.5014 7.74-1.46.0667-.0267.1633-.0667.29-.12.1267-.0533.2167-.0933.27-.12.079-.0431.1714-.0547.2586-.0324s.1627.0767.2114.1524c.1133.16.0767.3067-.11.44-.24.1733-.5467.3733-.92.6-1.2005.7022-2.4929 1.234-3.84 1.58-1.35.3648-2.7416.5531-4.14.56-2.01777.0115-4.01955-.3583-5.9-1.09-1.83209-.7136-3.51944-1.7538-4.98-3.07-.03353-.0224-.06169-.052-.08243-.0866-.02075-.0345-.03358-.0733-.03757-.1134.001-.0431.01494-.0849.04-.12Zm6.02-5.7c-.02398-.8382.21369-1.6631.68-2.36001.46442-.66228 1.11033-1.17623 1.86-1.48.8524-.34028 1.7474-.56234 2.66-.66.36-.04.9467-.09334 1.76-.16v-.34c.0505-.58768-.0457-1.1787-.28-1.72-.1513-.20349-.3518-.36527-.5826-.4702-.2309-.10493-.4846-.14959-.7374-.1298h-.16c-.412.0296-.8073.17521-1.14.42-.3233.24513-.5442.60143-.62 1-.0079.10964-.0512.21375-.1233.2967-.0721.08294-.1692.14025-.2767.1633l-2.3-.28c-.22667-.05334-.34-.17334-.34-.36.001-.0473.00772-.09431.02-.14.07744-.53262.26616-1.04297.55389-1.49782.28773-.45486.66802-.84403 1.11611-1.14218.934-.58827 2.0069-.91943 3.11-.96h.5c1.2941-.07778 2.5686.34466 3.56 1.18.1338.13394.2575.27767.37.43.0986.13082.1888.26776.27.41.0826.16468.1431.33951.18.52.0533.22666.0933.38333.12.47.0384.18423.0585.37181.06.56.0133.28666.02.45666.02.51V10.92c-.0038.3228.0469.644.15.95.0675.2191.1651.4278.29.62.0933.1267.2467.33.46.61.0702.0927.1119.2039.12.32-.0019.0561-.0175.111-.0454.1598-.0279.0488-.0672.09-.1146.1202-1.1067.96-1.7067 1.48-1.8 1.56-.0836.0594-.182.0946-.2844.1017-.1023.007-.2046-.0143-.2956-.0617-.1867-.16-.35-.3133-.49-.46s-.24-.2533-.3-.32c-.1037-.1247-.2005-.2548-.29-.39-.1333-.1933-.2267-.3233-.28-.39-.5786.7004-1.3402 1.2266-2.2 1.52-.5478.1452-1.1134.2125-1.68.2-.4636.017-.92595-.0583-1.36026-.2213-.4343-.1631-.8319-.4108-1.16974-.7287-.34279-.355-.60786-.7776-.77831-1.2407-.17045-.4632-.24254-.9568-.21169-1.4493Zm3.44-.4c-.0227.4498.1156.8929.39 1.25.1269.154.2877.2766.4699.3581.1821.0815.3807.1198.5801.1119.0571-.0019.114-.0086.17-.02.0494-.0104.0996-.0171.15-.02.2815-.0762.5433-.2121.7676-.3985.2243-.1863.4059-.4188.5324-.6815.1491-.2595.2602-.539.33-.83.0636-.2389.1038-.4834.12-.73.0067-.1867.01-.49335.01-.92001v-.5c-.591-.01827-1.182.03546-1.76.16-.5132.09273-.9749.36929-1.2989.77791-.3239.4086-.4879.9213-.4611 1.4421Zm8.4 6.44c.0312-.0594.0717-.1134.12-.16.2915-.2069.6161-.3625.96-.46.4833-.1299.9799-.2037 1.48-.22.1269-.0137.2552-.0069.38.02.6.0533.96.1533 1.08.3.0606.1098.0884.2348.08.36v.14c-.0225.5689-.1514 1.1285-.38 1.65-.2225.5892-.5866 1.1146-1.06 1.53-.0494.046-.1127.0742-.18.08-.0279-.0003-.0553-.0072-.08-.02-.08-.04-.1-.1133-.06-.22.3796-.7599.6297-1.5778.74-2.42.0093-.1126-.0188-.2251-.08-.32-.1333-.16-.5067-.24-1.12-.24-.2267 0-.4933.0133-.8.04-.3333.04-.64.08-.92.12-.0564.0067-.1134-.0075-.16-.04-.012-.009-.0206-.0219-.0242-.0365-.0037-.0145-.0022-.0299.0042-.0435.0024-.0212.0092-.0416.02-.06Z"
src/Fahrtwind/Icon/Common.pursnew file+43
@@ -0,0 +1,43 @@
1+module Fahrtwind.Icon.Common where
2+
3+import Prelude
4+import React.Basic (JSX)
5+import React.Basic.DOM.SVG as SVG
6+
7+outlines ∷ Array String → JSX
8+outlines ds =
9+ SVG.svg
10+ { viewBox: "0 0 24 24"
11+ , xmlns: "http://www.w3.org/2000/svg"
12+ , xmlSpace: "preserve"
13+ , stroke: "var(--icon-colour, currentColor)"
14+ , fill: "none"
15+ , children:
16+ ds
17+ <#> \d →
18+ SVG.path
19+ { strokeLinecap: "round"
20+ , strokeLinejoin: "round"
21+ , strokeWidth: "2"
22+ , d
23+ }
24+ }
25+
26+outline ∷ String → JSX
27+outline d = outlines [ d ]
28+
29+filled ∷ String → JSX
30+filled d =
31+ SVG.svg
32+ { viewBox: "0 0 24 24"
33+ , xmlns: "http://www.w3.org/2000/svg"
34+ , xmlSpace: "preserve"
35+ , stroke: "currentColor"
36+ , children:
37+ [ SVG.path
38+ { fill: "currentColor"
39+ , stroke: "none"
40+ , d
41+ }
42+ ]
43+ }
src/Fahrtwind/Icon/Heroicons.pursnew file+891
@@ -0,0 +1,891 @@
1+module Fahrtwind.Icon.Heroicons where
2+
3+import Fahrtwind.Icon.Common (outline, outlines)
4+import React.Basic (JSX)
5+
6+academicCap =
7+ outlines
8+ [ "M12 14l9-5-9-5-9 5 9 5z"
9+ , "M12 14l6.16-3.422a12.083 12.083 0 01.665 6.479A11.952 11.952 0 0012 20.055a11.952 11.952 0 00-6.824-2.998 12.078 12.078 0 01.665-6.479L12 14z"
10+ ] ∷ JSX
11+
12+adjustments =
13+ outline
14+ "M12 6V4m0 2a2 2 0 100 4m0-4a2 2 0 110 4m-6 8a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4m6 6v10m6-2a2 2 0 100-4m0 4a2 2 0 110-4m0 4v2m0-6V4" ∷
15+ JSX
16+
17+annotation =
18+ outline
19+ "M7 8h10M7 12h4m1 8l-4-4H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-3l-4 4z" ∷
20+ JSX
21+
22+archive =
23+ outline
24+ "M5 8h14M5 8a2 2 0 110-4h14a2 2 0 110 4M5 8v10a2 2 0 002 2h10a2 2 0 002-2V8m-9 4h4" ∷
25+ JSX
26+
27+arrowsExpand ∷ JSX
28+arrowsExpand = outline
29+ "M4 8V4m0 0h4M4 4l5 5m11-1V4m0 0h-4m4 0l-5 5M4 16v4m0 0h4m-4 0l5-5m11 5l-5-5m5 5v-4m0 4h-4"
30+
31+atSymbol =
32+ outline
33+ "M16 12a4 4 0 10-8 0 4 4 0 008 0zm0 0v1.5a2.5 2.5 0 005 0V12a9 9 0 10-9 9m4.5-1.206a8.959 8.959 0 01-4.5 1.207" ∷
34+ JSX
35+
36+backspace =
37+ outline
38+ "M12 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2M3 12l6.414 6.414a2 2 0 001.414.586H19a2 2 0 002-2V7a2 2 0 00-2-2h-8.172a2 2 0 00-1.414.586L3 12z" ∷
39+ JSX
40+
41+badgeCheck =
42+ outline
43+ "M9 12l2 2 4-4M7.835 4.697a3.42 3.42 0 001.946-.806 3.42 3.42 0 014.438 0 3.42 3.42 0 001.946.806 3.42 3.42 0 013.138 3.138 3.42 3.42 0 00.806 1.946 3.42 3.42 0 010 4.438 3.42 3.42 0 00-.806 1.946 3.42 3.42 0 01-3.138 3.138 3.42 3.42 0 00-1.946.806 3.42 3.42 0 01-4.438 0 3.42 3.42 0 00-1.946-.806 3.42 3.42 0 01-3.138-3.138 3.42 3.42 0 00-.806-1.946 3.42 3.42 0 010-4.438 3.42 3.42 0 00.806-1.946 3.42 3.42 0 013.138-3.138z" ∷
44+ JSX
45+
46+badgeCircle = outline "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" ∷ JSX
47+ban =
48+ outline
49+ "M18.364 18.364A9 9 0 005.636 5.636m12.728 12.728A9 9 0 015.636 5.636m12.728 12.728L5.636 5.636" ∷
50+ JSX
51+
52+beaker =
53+ outline
54+ "M19.428 15.428a2 2 0 00-1.022-.547l-2.387-.477a6 6 0 00-3.86.517l-.318.158a6 6 0 01-3.86.517L6.05 15.21a2 2 0 00-1.806.547M8 4h8l-1 1v5.172a2 2 0 00.586 1.414l5 5c1.26 1.26.367 3.414-1.415 3.414H4.828c-1.782 0-2.674-2.154-1.414-3.414l5-5A2 2 0 009 10.172V5L8 4z" ∷
55+ JSX
56+
57+bell =
58+ outline
59+ "M15 17h5l-1.405-1.405A2.032 2.032 0 0118 14.158V11a6.002 6.002 0 00-4-5.659V5a2 2 0 10-4 0v.341C7.67 6.165 6 8.388 6 11v3.159c0 .538-.214 1.055-.595 1.436L4 17h5m6 0v1a3 3 0 11-6 0v-1m6 0H9" ∷
60+ JSX
61+
62+bookmark = outline "M5 5a2 2 0 012-2h10a2 2 0 012 2v16l-7-3.5L5 21V5z" ∷ JSX
63+bookmarkAlt =
64+ outline
65+ "M16 4v12l-4-2-4 2V4M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" ∷
66+ JSX
67+
68+bookOpen =
69+ outline
70+ "M12 6.253v13m0-13C10.832 5.477 9.246 5 7.5 5S4.168 5.477 3 6.253v13C4.168 18.477 5.754 18 7.5 18s3.332.477 4.5 1.253m0-13C13.168 5.477 14.754 5 16.5 5c1.747 0 3.332.477 4.5 1.253v13C19.832 18.477 18.247 18 16.5 18c-1.746 0-3.332.477-4.5 1.253" ∷
71+ JSX
72+
73+briefcase =
74+ outline
75+ "M21 13.255A23.931 23.931 0 0112 15c-3.183 0-6.22-.62-9-1.745M16 6V4a2 2 0 00-2-2h-4a2 2 0 00-2 2v2m4 6h.01M5 20h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" ∷
76+ JSX
77+
78+cake =
79+ outline
80+ "M21 15.546c-.523 0-1.046.151-1.5.454a2.704 2.704 0 01-3 0 2.704 2.704 0 00-3 0 2.704 2.704 0 01-3 0 2.704 2.704 0 00-3 0 2.704 2.704 0 01-3 0 2.701 2.701 0 00-1.5-.454M9 6v2m3-2v2m3-2v2M9 3h.01M12 3h.01M15 3h.01M21 21v-7a2 2 0 00-2-2H5a2 2 0 00-2 2v7h18zm-3-9v-2a2 2 0 00-2-2H8a2 2 0 00-2 2v2h12z" ∷
81+ JSX
82+
83+calculator =
84+ outline
85+ "M9 7h6m0 10v-3m-3 3h.01M9 17h.01M9 14h.01M12 14h.01M15 11h.01M12 11h.01M9 11h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z" ∷
86+ JSX
87+
88+calendar =
89+ outline
90+ "M8 7V3m8 4V3m-9 8h10M5 21h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" ∷
91+ JSX
92+
93+camera =
94+ outlines
95+ [ "M3 9a2 2 0 012-2h.93a2 2 0 001.664-.89l.812-1.22A2 2 0 0110.07 4h3.86a2 2 0 011.664.89l.812 1.22A2 2 0 0018.07 7H19a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V9z"
96+ , "M15 13a3 3 0 11-6 0 3 3 0 016 0z"
97+ ] ∷ JSX
98+
99+cash =
100+ outline
101+ "M17 9V7a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2m2 4h10a2 2 0 002-2v-6a2 2 0 00-2-2H9a2 2 0 00-2 2v6a2 2 0 002 2zm7-5a2 2 0 11-4 0 2 2 0 014 0z" ∷
102+ JSX
103+
104+chartBar =
105+ outline
106+ "M9 19v-6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2a2 2 0 002-2zm0 0V9a2 2 0 012-2h2a2 2 0 012 2v10m-6 0a2 2 0 002 2h2a2 2 0 002-2m0 0V5a2 2 0 012-2h2a2 2 0 012 2v14a2 2 0 01-2 2h-2a2 2 0 01-2-2z" ∷
107+ JSX
108+
109+chartPie =
110+ outlines
111+ [ "M11 3.055A9.001 9.001 0 1020.945 13H11V3.055z"
112+ , "M20.488 9H15V3.512A9.025 9.025 0 0120.488 9z"
113+ ] ∷ JSX
114+
115+chartSquareBar =
116+ outline
117+ "M16 8v8m-4-5v5m-4-2v2m-2 4h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" ∷
118+ JSX
119+
120+chat =
121+ outline
122+ "M8 12h.01M12 12h.01M16 12h.01M21 12c0 4.418-4.03 8-9 8a9.863 9.863 0 01-4.255-.949L3 20l1.395-3.72C3.512 15.042 3 13.574 3 12c0-4.418 4.03-8 9-8s9 3.582 9 8z" ∷
123+ JSX
124+
125+chatAlt =
126+ outline
127+ "M8 10h.01M12 10h.01M16 10h.01M9 16H5a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v8a2 2 0 01-2 2h-5l-5 5v-5z" ∷
128+ JSX
129+
130+chatAlt2 =
131+ outline
132+ "M17 8h2a2 2 0 012 2v6a2 2 0 01-2 2h-2v4l-4-4H9a1.994 1.994 0 01-1.414-.586m0 0L11 14h4a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v6a2 2 0 002 2h2v4l.586-.586z" ∷
133+ JSX
134+
135+check = outline "M5 13l4 4L19 7" ∷ JSX
136+checkCircle = outline "M9 12l2 2 4-4m6 2a9 9 0 11-18 0 9 9 0 0118 0z" ∷ JSX
137+chevronDown = outline "M19 9l-7 7-7-7" ∷ JSX
138+chevronLeft = outline "M15 19l-7-7 7-7" ∷ JSX
139+triangleLeft = outline "M15 19l-7-7 7-7Z" ∷ JSX
140+chevronRight = outline "M9 5l7 7-7 7" ∷ JSX
141+triangleRight = outline "M9 5l7 7-7 7Z" ∷ JSX
142+chevronUp = outline "M5 15l7-7 7 7" ∷ JSX
143+chip =
144+ outline
145+ "M9 3v2m6-2v2M9 19v2m6-2v2M5 9H3m2 6H3m18-6h-2m2 6h-2M7 19h10a2 2 0 002-2V7a2 2 0 00-2-2H7a2 2 0 00-2 2v10a2 2 0 002 2zM9 9h6v6H9V9z" ∷
146+ JSX
147+
148+clipboard =
149+ outline
150+ "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2" ∷
151+ JSX
152+
153+clipboardCheck =
154+ outline
155+ "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4" ∷
156+ JSX
157+
158+clipboardCopy =
159+ outline
160+ "M8 5H6a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2v-1M8 5a2 2 0 002 2h2a2 2 0 002-2M8 5a2 2 0 012-2h2a2 2 0 012 2m0 0h2a2 2 0 012 2v3m2 4H10m0 0l3-3m-3 3l3 3" ∷
161+ JSX
162+
163+clipboardList =
164+ outline
165+ "M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-3 7h3m-3 4h3m-6-4h.01M9 16h.01" ∷
166+ JSX
167+
168+clock = outline "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" ∷ JSX
169+cloud =
170+ outline
171+ "M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z" ∷
172+ JSX
173+
174+cloudDownload =
175+ outline
176+ "M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z" ∷
177+ JSX
178+
179+cloudUpload =
180+ outline
181+ "M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12" ∷
182+ JSX
183+
184+code = outline "M10 20l4-16m4 4l4 4-4 4M6 16l-4-4 4-4" ∷ JSX
185+cog =
186+ outlines
187+ [ "M10.325 4.317c.426-1.756 2.924-1.756 3.35 0a1.724 1.724 0 002.573 1.066c1.543-.94 3.31.826 2.37 2.37a1.724 1.724 0 001.065 2.572c1.756.426 1.756 2.924 0 3.35a1.724 1.724 0 00-1.066 2.573c.94 1.543-.826 3.31-2.37 2.37a1.724 1.724 0 00-2.572 1.065c-.426 1.756-2.924 1.756-3.35 0a1.724 1.724 0 00-2.573-1.066c-1.543.94-3.31-.826-2.37-2.37a1.724 1.724 0 00-1.065-2.572c-1.756-.426-1.756-2.924 0-3.35a1.724 1.724 0 001.066-2.573c-.94-1.543.826-3.31 2.37-2.37.996.608 2.296.07 2.572-1.065z"
188+ , "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
189+ ] ∷ JSX
190+
191+collection =
192+ outline
193+ "M19 11H5m14 0a2 2 0 012 2v6a2 2 0 01-2 2H5a2 2 0 01-2-2v-6a2 2 0 012-2m14 0V9a2 2 0 00-2-2M5 11V9a2 2 0 012-2m0 0V5a2 2 0 012-2h6a2 2 0 012 2v2M7 7h10" ∷
194+ JSX
195+
196+colorSwatch =
197+ outline
198+ "M7 21a4 4 0 01-4-4V5a2 2 0 012-2h4a2 2 0 012 2v12a4 4 0 01-4 4zm0 0h12a2 2 0 002-2v-4a2 2 0 00-2-2h-2.343M11 7.343l1.657-1.657a2 2 0 012.828 0l2.829 2.829a2 2 0 010 2.828l-8.486 8.485M7 17h.01" ∷
199+ JSX
200+
201+creditCard =
202+ outline
203+ "M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z" ∷
204+ JSX
205+
206+cross = outline "M6 18L18 6M6 6l12 12" ∷ JSX
207+cube =
208+ outline "M20 7l-8-4-8 4m16 0l-8 4m8-4v10l-8 4m0-10L4 7m8 4v10M4 7v10l8 4" ∷
209+ JSX
210+
211+cubeTransparent =
212+ outline
213+ "M14 10l-2 1m0 0l-2-1m2 1v2.5M20 7l-2 1m2-1l-2-1m2 1v2.5M14 4l-2-1-2 1M4 7l2-1M4 7l2 1M4 7v2.5M12 21l-2-1m2 1l2-1m-2 1v-2.5M6 18l-2-1v-2.5M18 18l2-1v-2.5" ∷
214+ JSX
215+
216+currencyEuro =
217+ outline
218+ "M14.121 15.536c-1.171 1.952-3.07 1.952-4.242 0-1.172-1.953-1.172-5.119 0-7.072 1.171-1.952 3.07-1.952 4.242 0M8 10.5h4m-4 3h4m9-1.5a9 9 0 11-18 0 9 9 0 0118 0z" ∷
219+ JSX
220+
221+cursorClick =
222+ outline
223+ "M15 15l-2 5L9 9l11 4-5 2zm0 0l5 5M7.188 2.239l.777 2.897M5.136 7.965l-2.898-.777M13.95 4.05l-2.122 2.122m-5.657 5.656l-2.12 2.122" ∷
224+ JSX
225+
226+database =
227+ outline
228+ "M4 7v10c0 2.21 3.582 4 8 4s8-1.79 8-4V7M4 7c0 2.21 3.582 4 8 4s8-1.79 8-4M4 7c0-2.21 3.582-4 8-4s8 1.79 8 4m0 5c0 2.21-3.582 4-8 4s-8-1.79-8-4" ∷
229+ JSX
230+
231+deviceTablet =
232+ outline
233+ "M12 18h.01M7 21h10a2 2 0 002-2V5a2 2 0 00-2-2H7a2 2 0 00-2 2v14a2 2 0 002 2z" ∷
234+ JSX
235+
236+deviceMobile =
237+ outline
238+ "M12 18h.01M8 21h8a2 2 0 002-2V5a2 2 0 00-2-2H8a2 2 0 00-2 2v14a2 2 0 002 2z" ∷
239+ JSX
240+
241+documentAdd =
242+ outline
243+ "M9 13h6m-3-3v6m5 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" ∷
244+ JSX
245+
246+documentDownload =
247+ outline
248+ "M12 10v6m0 0l-3-3m3 3l3-3m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" ∷
249+ JSX
250+
251+documentDuplicate =
252+ outline
253+ "M8 7v8a2 2 0 002 2h6M8 7V5a2 2 0 012-2h4.586a1 1 0 01.707.293l4.414 4.414a1 1 0 01.293.707V15a2 2 0 01-2 2h-2M8 7H6a2 2 0 00-2 2v10a2 2 0 002 2h8a2 2 0 002-2v-2" ∷
254+ JSX
255+
256+documentRemove =
257+ outline
258+ "M9 13h6m2 8H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" ∷
259+ JSX
260+
261+documentReport =
262+ outline
263+ "M9 17v-2m3 2v-4m3 4v-6m2 10H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" ∷
264+ JSX
265+
266+documentSearch =
267+ outline
268+ "M10 21h7a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v11m0 5l4.879-4.879m0 0a3 3 0 104.243-4.242 3 3 0 00-4.243 4.242z" ∷
269+ JSX
270+
271+documentText =
272+ outline
273+ "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z" ∷
274+ JSX
275+
276+document =
277+ outline
278+ "M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z" ∷
279+ JSX
280+
281+dotsCircleHorizontal =
282+ outline "M8 12h.01M12 12h.01M16 12h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" ∷
283+ JSX
284+
285+dotsHorizontal =
286+ outline
287+ "M5 12h.01M12 12h.01M19 12h.01M6 12a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0zm7 0a1 1 0 11-2 0 1 1 0 012 0z" ∷
288+ JSX
289+
290+dotsVertical =
291+ outline
292+ "M12 5v.01M12 12v.01M12 19v.01M12 6a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2zm0 7a1 1 0 110-2 1 1 0 010 2z" ∷
293+ JSX
294+
295+download =
296+ outline "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4" ∷ JSX
297+
298+duplicate =
299+ outline
300+ "M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z" ∷
301+ JSX
302+
303+emojiHappy =
304+ outline
305+ "M14.828 14.828a4 4 0 01-5.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" ∷
306+ JSX
307+
308+emojiSad =
309+ outline
310+ "M9.172 16.172a4 4 0 015.656 0M9 10h.01M15 10h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" ∷
311+ JSX
312+
313+exclamation =
314+ outline
315+ "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" ∷
316+ JSX
317+
318+exclamationCircle =
319+ outline
320+ "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z" ∷
321+ JSX
322+
323+externalLink =
324+ outline
325+ "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14" ∷
326+ JSX
327+
328+eyeOff =
329+ outline
330+ "M13.875 18.825A10.05 10.05 0 0112 19c-4.478 0-8.268-2.943-9.543-7a9.97 9.97 0 011.563-3.029m5.858.908a3 3 0 114.243 4.243M9.878 9.878l4.242 4.242M9.88 9.88l-3.29-3.29m7.532 7.532l3.29 3.29M3 3l3.59 3.59m0 0A9.953 9.953 0 0112 5c4.478 0 8.268 2.943 9.543 7a10.025 10.025 0 01-4.132 5.411m0 0L21 21" ∷
331+ JSX
332+
333+eye =
334+ outlines
335+ [ "M15 12a3 3 0 11-6 0 3 3 0 016 0z"
336+ , "M2.458 12C3.732 7.943 7.523 5 12 5c4.478 0 8.268 2.943 9.542 7-1.274 4.057-5.064 7-9.542 7-4.477 0-8.268-2.943-9.542-7z"
337+ ] ∷ JSX
338+
339+fastForward =
340+ outline
341+ "M11.933 12.8a1 1 0 000-1.6L6.6 7.2A1 1 0 005 8v8a1 1 0 001.6.8l5.333-4zM19.933 12.8a1 1 0 000-1.6l-5.333-4A1 1 0 0013 8v8a1 1 0 001.6.8l5.333-4z" ∷
342+ JSX
343+
344+film =
345+ outline
346+ "M7 4v16M17 4v16M3 8h4m10 0h4M3 12h18M3 16h4m10 0h4M4 20h16a1 1 0 001-1V5a1 1 0 00-1-1H4a1 1 0 00-1 1v14a1 1 0 001 1z" ∷
347+ JSX
348+
349+filter =
350+ outline
351+ "M3 4a1 1 0 011-1h16a1 1 0 011 1v2.586a1 1 0 01-.293.707l-6.414 6.414a1 1 0 00-.293.707V17l-4 4v-6.586a1 1 0 00-.293-.707L3.293 7.293A1 1 0 013 6.586V4z" ∷
352+ JSX
353+
354+fingerPrint =
355+ outline
356+ "M12 11c0 3.517-1.009 6.799-2.753 9.571m-3.44-2.04l.054-.09A13.916 13.916 0 008 11a4 4 0 118 0c0 1.017-.07 2.019-.203 3m-2.118 6.844A21.88 21.88 0 0015.171 17m3.839 1.132c.645-2.266.99-4.659.99-7.132A8 8 0 008 4.07M3 15.364c.64-1.319 1-2.8 1-4.364 0-1.457.39-2.823 1.07-4" ∷
357+ JSX
358+
359+fire =
360+ outlines
361+ [ "M17.657 18.657A8 8 0 016.343 7.343S7 9 9 10c0-2 .5-5 2.986-7C14 5 16.09 5.777 17.656 7.343A7.975 7.975 0 0120 13a7.975 7.975 0 01-2.343 5.657z"
362+ , "M9.879 16.121A3 3 0 1012.015 11L11 14H9c0 .768.293 1.536.879 2.121z"
363+ ] ∷ JSX
364+
365+flag =
366+ outline
367+ "M3 21v-4m0 0V5a2 2 0 012-2h6.5l1 1H21l-3 6 3 6h-8.5l-1-1H5a2 2 0 00-2 2zm9-13.5V9" ∷
368+ JSX
369+
370+folderAdd =
371+ outline
372+ "M9 13h6m-3-3v6m-9 1V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z" ∷
373+ JSX
374+
375+folderDownload =
376+ outline
377+ "M12 10v6m0 0l-3-3m3 3l3-3M3 17V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z" ∷
378+ JSX
379+
380+folderOpen =
381+ outline
382+ "M5 19a2 2 0 01-2-2V7a2 2 0 012-2h4l2 2h4a2 2 0 012 2v1M5 19h14a2 2 0 002-2v-5a2 2 0 00-2-2H9a2 2 0 00-2 2v5a2 2 0 01-2 2z" ∷
383+ JSX
384+
385+folderRemove =
386+ outline
387+ "M9 13h6M3 17V7a2 2 0 012-2h6l2 2h6a2 2 0 012 2v8a2 2 0 01-2 2H5a2 2 0 01-2-2z" ∷
388+ JSX
389+
390+folder =
391+ outline
392+ "M3 7v10a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-6l-2-2H5a2 2 0 00-2 2z" ∷
393+ JSX
394+
395+gift =
396+ outline
397+ "M12 8v13m0-13V6a2 2 0 112 2h-2zm0 0V5.5A2.5 2.5 0 109.5 8H12zm-7 4h14M5 12a2 2 0 110-4h14a2 2 0 110 4M5 12v7a2 2 0 002 2h10a2 2 0 002-2v-7" ∷
398+ JSX
399+
400+globeAlt =
401+ outline
402+ "M21 12a9 9 0 01-9 9m9-9a9 9 0 00-9-9m9 9H3m9 9a9 9 0 01-9-9m9 9c1.657 0 3-4.03 3-9s-1.343-9-3-9m0 18c-1.657 0-3-4.03-3-9s1.343-9 3-9m-9 9a9 9 0 019-9" ∷
403+ JSX
404+
405+globe =
406+ outline
407+ "M3.055 11H5a2 2 0 012 2v1a2 2 0 002 2 2 2 0 012 2v2.945M8 3.935V5.5A2.5 2.5 0 0010.5 8h.5a2 2 0 012 2 2 2 0 104 0 2 2 0 012-2h1.064M15 20.488V18a2 2 0 012-2h3.064M21 12a9 9 0 11-18 0 9 9 0 0118 0z" ∷
408+ JSX
409+
410+hand =
411+ outline
412+ "M7 11.5V14m0-2.5v-6a1.5 1.5 0 113 0m-3 6a1.5 1.5 0 00-3 0v2a7.5 7.5 0 0015 0v-5a1.5 1.5 0 00-3 0m-6-3V11m0-5.5v-1a1.5 1.5 0 013 0v1m0 0V11m0-5.5a1.5 1.5 0 013 0v3m0 0V11" ∷
413+ JSX
414+
415+hashtag = outline "M7 20l4-16m2 16l4-16M6 9h14M4 15h14" ∷ JSX
416+heart =
417+ outline
418+ "M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z" ∷
419+ JSX
420+
421+home =
422+ outline
423+ "M3 12l2-2m0 0l7-7 7 7M5 10v10a1 1 0 001 1h3m10-11l2 2m-2-2v10a1 1 0 01-1 1h-3m-6 0a1 1 0 001-1v-4a1 1 0 011-1h2a1 1 0 011 1v4a1 1 0 001 1m-6 0h6" ∷
424+ JSX
425+
426+identification =
427+ outline
428+ "M10 6H5a2 2 0 00-2 2v9a2 2 0 002 2h14a2 2 0 002-2V8a2 2 0 00-2-2h-5m-4 0V5a2 2 0 114 0v1m-4 0a2 2 0 104 0m-5 8a2 2 0 100-4 2 2 0 000 4zm0 0c1.306 0 2.417.835 2.83 2M9 14a3.001 3.001 0 00-2.83 2M15 11h3m-3 4h2" ∷
429+ JSX
430+
431+inboxIn =
432+ outline
433+ "M8 4H6a2 2 0 00-2 2v12a2 2 0 002 2h12a2 2 0 002-2V6a2 2 0 00-2-2h-2m-4-1v8m0 0l3-3m-3 3L9 8m-5 5h2.586a1 1 0 01.707.293l2.414 2.414a1 1 0 00.707.293h3.172a1 1 0 00.707-.293l2.414-2.414a1 1 0 01.707-.293H20" ∷
434+ JSX
435+
436+inbox =
437+ outline
438+ "M20 13V6a2 2 0 00-2-2H6a2 2 0 00-2 2v7m16 0v5a2 2 0 01-2 2H6a2 2 0 01-2-2v-5m16 0h-2.586a1 1 0 00-.707.293l-2.414 2.414a1 1 0 01-.707.293h-3.172a1 1 0 01-.707-.293l-2.414-2.414A1 1 0 006.586 13H4" ∷
439+ JSX
440+
441+informationCircle =
442+ outline "M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" ∷ JSX
443+
444+key =
445+ outline
446+ "M15 7a2 2 0 012 2m4 0a6 6 0 01-7.743 5.743L11 17H9v2H7v2H4a1 1 0 01-1-1v-2.586a1 1 0 01.293-.707l5.964-5.964A6 6 0 1121 9z" ∷
447+ JSX
448+
449+library =
450+ outline "M8 14v3m4-3v3m4-3v3M3 21h18M3 10h18M3 7l9-4 9 4M4 10h16v11H4V10z" ∷
451+ JSX
452+
453+lightBulb =
454+ outline
455+ "M9.663 17h4.673M12 3v1m6.364 1.636l-.707.707M21 12h-1M4 12H3m3.343-5.657l-.707-.707m2.828 9.9a5 5 0 117.072 0l-.548.547A3.374 3.374 0 0014 18.469V19a2 2 0 11-4 0v-.531c0-.895-.356-1.754-.988-2.386l-.548-.547z" ∷
456+ JSX
457+
458+lightningBolt = outline "M13 10V3L4 14h7v7l9-11h-7z" ∷ JSX
459+link =
460+ outline
461+ "M13.828 10.172a4 4 0 00-5.656 0l-4 4a4 4 0 105.656 5.656l1.102-1.101m-.758-4.899a4 4 0 005.656 0l4-4a4 4 0 00-5.656-5.656l-1.1 1.1" ∷
462+ JSX
463+
464+locationMarker =
465+ outlines
466+ [ "M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"
467+ , "M15 11a3 3 0 11-6 0 3 3 0 016 0z"
468+ ] ∷ JSX
469+
470+lockClosed =
471+ outline
472+ "M12 15v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2zm10-10V7a4 4 0 00-8 0v4h8z" ∷
473+ JSX
474+
475+lockOpen =
476+ outline
477+ "M8 11V7a4 4 0 118 0m-4 8v2m-6 4h12a2 2 0 002-2v-6a2 2 0 00-2-2H6a2 2 0 00-2 2v6a2 2 0 002 2z" ∷
478+ JSX
479+
480+login =
481+ outline
482+ "M11 16l-4-4m0 0l4-4m-4 4h14m-5 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h7a3 3 0 013 3v1" ∷
483+ JSX
484+
485+logout =
486+ outline
487+ "M17 16l4-4m0 0l-4-4m4 4H7m6 4v1a3 3 0 01-3 3H6a3 3 0 01-3-3V7a3 3 0 013-3h4a3 3 0 013 3v1" ∷
488+ JSX
489+
490+mailOpen =
491+ outline
492+ "M3 19v-8.93a2 2 0 01.89-1.664l7-4.666a2 2 0 012.22 0l7 4.666A2 2 0 0121 10.07V19M3 19a2 2 0 002 2h14a2 2 0 002-2M3 19l6.75-4.5M21 19l-6.75-4.5M3 10l6.75 4.5M21 10l-6.75 4.5m0 0l-1.14.76a2 2 0 01-2.22 0l-1.14-.76" ∷
493+ JSX
494+
495+mail =
496+ outline
497+ "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" ∷
498+ JSX
499+
500+map =
501+ outline
502+ "M9 20l-5.447-2.724A1 1 0 013 16.382V5.618a1 1 0 011.447-.894L9 7m0 13l6-3m-6 3V7m6 10l4.553 2.276A1 1 0 0021 18.382V7.618a1 1 0 00-.553-.894L15 4m0 13V4m0 0L9 7" ∷
503+ JSX
504+
505+megaphone =
506+ outline
507+ "M11 5.882V19.24a1.76 1.76 0 01-3.417.592l-2.147-6.15M18 13a3 3 0 100-6M5.436 13.683A4.001 4.001 0 017 6h1.832c4.1 0 7.625-1.234 9.168-3v14c-1.543-1.766-5.067-3-9.168-3H7a3.988 3.988 0 01-1.564-.317z" ∷
508+ JSX
509+
510+menuAlt1 = outline "M4 6h16M4 12h8m-8 6h16" ∷ JSX
511+menuAlt2 = outline "M4 6h16M4 12h16M4 18h7" ∷ JSX
512+menuAlt3 = outline "M4 6h16M4 12h16m-7 6h7" ∷ JSX
513+menuAlt4 = outline "M4 8h16M4 16h16" ∷ JSX
514+menu = outline "M4 6h16M4 12h16M4 18h16" ∷ JSX
515+microphone =
516+ outline
517+ "M19 11a7 7 0 01-7 7m0 0a7 7 0 01-7-7m7 7v4m0 0H8m4 0h4m-4-8a3 3 0 01-3-3V5a3 3 0 116 0v6a3 3 0 01-3 3z" ∷
518+ JSX
519+
520+minusCircle = outline "M15 12H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z" ∷ JSX
521+minusSm = outline "M18 12H6" ∷ JSX
522+minus = outline "M20 12H4" ∷ JSX
523+moon =
524+ outline
525+ "M20.354 15.354A9 9 0 018.646 3.646 9.003 9.003 0 0012 21a9.003 9.003 0 008.354-5.646z" ∷
526+ JSX
527+
528+musicNote =
529+ outline
530+ "M9 19V6l12-3v13M9 19c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zm12-3c0 1.105-1.343 2-3 2s-3-.895-3-2 1.343-2 3-2 3 .895 3 2zM9 10l12-3" ∷
531+ JSX
532+
533+newspaper =
534+ outline
535+ "M19 20H5a2 2 0 01-2-2V6a2 2 0 012-2h10a2 2 0 012 2v1m2 13a2 2 0 01-2-2V7m2 13a2 2 0 002-2V9a2 2 0 00-2-2h-2m-4-3H9M7 16h6M7 8h6v4H7V8z" ∷
536+ JSX
537+
538+officeBuilding =
539+ outline
540+ "M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16m14 0h2m-2 0h-5m-9 0H3m2 0h5M9 7h1m-1 4h1m4-4h1m-1 4h1m-5 10v-5a1 1 0 011-1h2a1 1 0 011 1v5m-4 0h4" ∷
541+ JSX
542+
543+paperAirplane = outline "M12 19l9 2-9-18-9 18 9-2zm0 0v-8" ∷ JSX
544+paperClip =
545+ outline
546+ "M15.172 7l-6.586 6.586a2 2 0 102.828 2.828l6.414-6.586a4 4 0 00-5.656-5.656l-6.415 6.585a6 6 0 108.486 8.486L20.5 13" ∷
547+ JSX
548+
549+pause = outline "M10 9v6m4-6v6m7-3a9 9 0 11-18 0 9 9 0 0118 0z" ∷ JSX
550+pencilAlt =
551+ outline
552+ "M11 5H6a2 2 0 00-2 2v11a2 2 0 002 2h11a2 2 0 002-2v-5m-1.414-9.414a2 2 0 112.828 2.828L11.828 15H9v-2.828l8.586-8.586z" ∷
553+ JSX
554+
555+pencil =
556+ outline
557+ "M15.232 5.232l3.536 3.536m-2.036-5.036a2.5 2.5 0 113.536 3.536L6.5 21.036H3v-3.572L16.732 3.732z" ∷
558+ JSX
559+
560+phoneIncoming =
561+ outline
562+ "M21 3l-6 6m0 0V4m0 5h5M5 3a2 2 0 00-2 2v1c0 8.284 6.716 15 15 15h1a2 2 0 002-2v-3.28a1 1 0 00-.684-.948l-4.493-1.498a1 1 0 00-1.21.502l-1.13 2.257a11.042 11.042 0 01-5.516-5.517l2.257-1.128a1 1 0 00.502-1.21L9.228 3.683A1 1 0 008.279 3H5z" ∷
563+ JSX
564+
565+phoneMissedCall =
566+ outline
567+ "M16 8l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2M5 3a2 2 0 00-2 2v1c0 8.284 6.716 15 15 15h1a2 2 0 002-2v-3.28a1 1 0 00-.684-.948l-4.493-1.498a1 1 0 00-1.21.502l-1.13 2.257a11.042 11.042 0 01-5.516-5.517l2.257-1.128a1 1 0 00.502-1.21L9.228 3.683A1 1 0 008.279 3H5z" ∷
568+ JSX
569+
570+phoneOutgoing =
571+ outline
572+ "M16 3h5m0 0v5m0-5l-6 6M5 3a2 2 0 00-2 2v1c0 8.284 6.716 15 15 15h1a2 2 0 002-2v-3.28a1 1 0 00-.684-.948l-4.493-1.498a1 1 0 00-1.21.502l-1.13 2.257a11.042 11.042 0 01-5.516-5.517l2.257-1.128a1 1 0 00.502-1.21L9.228 3.683A1 1 0 008.279 3H5z" ∷
573+ JSX
574+
575+phone =
576+ outline
577+ "M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z" ∷
578+ JSX
579+
580+photograph =
581+ outline
582+ "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" ∷
583+ JSX
584+
585+play =
586+ outlines
587+ [ "M14.752 11.168l-3.197-2.132A1 1 0 0010 9.87v4.263a1 1 0 001.555.832l3.197-2.132a1 1 0 000-1.664z"
588+ , "M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
589+ ] ∷ JSX
590+
591+plusCircle =
592+ outline "M12 9v3m0 0v3m0-3h3m-3 0H9m12 0a9 9 0 11-18 0 9 9 0 0118 0z" ∷ JSX
593+
594+plusSm = outline "M12 6v6m0 0v6m0-6h6m-6 0H6" ∷ JSX
595+plus = outline "M12 4v16m8-8H4" ∷ JSX
596+presentationChartBar =
597+ outline
598+ "M8 13v-1m4 1v-3m4 3V8M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z" ∷
599+ JSX
600+
601+presentationChartLine =
602+ outline
603+ "M7 12l3-3 3 3 4-4M8 21l4-4 4 4M3 4h18M4 4h16v12a1 1 0 01-1 1H5a1 1 0 01-1-1V4z" ∷
604+ JSX
605+
606+printer =
607+ outline
608+ "M17 17h2a2 2 0 002-2v-4a2 2 0 00-2-2H5a2 2 0 00-2 2v4a2 2 0 002 2h2m2 4h6a2 2 0 002-2v-4a2 2 0 00-2-2H9a2 2 0 00-2 2v4a2 2 0 002 2zm8-12V5a2 2 0 00-2-2H9a2 2 0 00-2 2v4h10z" ∷
609+ JSX
610+
611+puzzle =
612+ outline
613+ "M11 4a2 2 0 114 0v1a1 1 0 001 1h3a1 1 0 011 1v3a1 1 0 01-1 1h-1a2 2 0 100 4h1a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-1a2 2 0 10-4 0v1a1 1 0 01-1 1H7a1 1 0 01-1-1v-3a1 1 0 00-1-1H4a2 2 0 110-4h1a1 1 0 001-1V7a1 1 0 011-1h3a1 1 0 001-1V4z" ∷
614+ JSX
615+
616+qrcode =
617+ outline
618+ "M11 4a2 2 0 114 0v1a1 1 0 001 1h3a1 1 0 011 1v3a1 1 0 01-1 1h-1a2 2 0 100 4h1a1 1 0 011 1v3a1 1 0 01-1 1h-3a1 1 0 01-1-1v-1a2 2 0 10-4 0v1a1 1 0 01-1 1H7a1 1 0 01-1-1v-3a1 1 0 00-1-1H4a2 2 0 110-4h1a1 1 0 001-1V7a1 1 0 011-1h3a1 1 0 001-1V4z" ∷
619+ JSX
620+
621+questionMarkCircle =
622+ outline
623+ "M8.228 9c.549-1.165 2.03-2 3.772-2 2.21 0 4 1.343 4 3 0 1.4-1.278 2.575-3.006 2.907-.542.104-.994.54-.994 1.093m0 3h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" ∷
624+ JSX
625+
626+receiptRefund =
627+ outline
628+ "M16 15v-1a4 4 0 00-4-4H8m0 0l3 3m-3-3l3-3m9 14V5a2 2 0 00-2-2H6a2 2 0 00-2 2v16l4-2 4 2 4-2 4 2z" ∷
629+ JSX
630+
631+receiptTax =
632+ outline
633+ "M9 14l6-6m-5.5.5h.01m4.99 5h.01M19 21V5a2 2 0 00-2-2H7a2 2 0 00-2 2v16l3.5-2 3.5 2 3.5-2 3.5 2zM10 8.5a.5.5 0 11-1 0 .5.5 0 011 0zm5 5a.5.5 0 11-1 0 .5.5 0 011 0z" ∷
634+ JSX
635+
636+refresh =
637+ outline
638+ "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" ∷
639+ JSX
640+
641+reply = outline "M3 10h10a8 8 0 018 8v2M3 10l6 6m-6-6l6-6" ∷ JSX
642+rewind =
643+ outline
644+ "M12.066 11.2a1 1 0 000 1.6l5.334 4A1 1 0 0019 16V8a1 1 0 00-1.6-.8l-5.333 4zM4.066 11.2a1 1 0 000 1.6l5.334 4A1 1 0 0011 16V8a1 1 0 00-1.6-.8l-5.334 4z" ∷
645+ JSX
646+
647+rss =
648+ outline
649+ "M6 5c7.18 0 13 5.82 13 13M6 11a7 7 0 017 7m-6 0a1 1 0 11-2 0 1 1 0 012 0z" ∷
650+ JSX
651+
652+saveAs =
653+ outline
654+ "M17 16v2a2 2 0 01-2 2H5a2 2 0 01-2-2v-7a2 2 0 012-2h2m3-4H9a2 2 0 00-2 2v7a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-1m-1 4l-3 3m0 0l-3-3m3 3V3" ∷
655+ JSX
656+
657+save =
658+ outline
659+ "M8 7H5a2 2 0 00-2 2v9a2 2 0 002 2h14a2 2 0 002-2V9a2 2 0 00-2-2h-3m-1 4l-3 3m0 0l-3-3m3 3V4" ∷
660+ JSX
661+
662+scale =
663+ outline
664+ "M3 6l3 1m0 0l-3 9a5.002 5.002 0 006.001 0M6 7l3 9M6 7l6-2m6 2l3-1m-3 1l-3 9a5.002 5.002 0 006.001 0M18 7l3 9m-3-9l-6-2m0-2v2m0 16V5m0 16H9m3 0h3" ∷
665+ JSX
666+
667+scissors =
668+ outline
669+ "M14.121 14.121L19 19m-7-7l7-7m-7 7l-2.879 2.879M12 12L9.121 9.121m0 5.758a3 3 0 10-4.243 4.243 3 3 0 004.243-4.243zm0-5.758a3 3 0 10-4.243-4.243 3 3 0 004.243 4.243z" ∷
670+ JSX
671+
672+searchCircle =
673+ outline
674+ "M8 16l2.879-2.879m0 0a3 3 0 104.243-4.242 3 3 0 00-4.243 4.242zM21 12a9 9 0 11-18 0 9 9 0 0118 0z" ∷
675+ JSX
676+
677+search = outline "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" ∷ JSX
678+selector = outline "M8 9l4-4 4 4m0 6l-4 4-4-4" ∷ JSX
679+server =
680+ outline
681+ "M5 12h14M5 12a2 2 0 01-2-2V6a2 2 0 012-2h14a2 2 0 012 2v4a2 2 0 01-2 2M5 12a2 2 0 00-2 2v4a2 2 0 002 2h14a2 2 0 002-2v-4a2 2 0 00-2-2m-2-4h.01M17 16h.01" ∷
682+ JSX
683+
684+share =
685+ outline
686+ "M8.684 13.342C8.886 12.938 9 12.482 9 12c0-.482-.114-.938-.316-1.342m0 2.684a3 3 0 110-2.684m0 2.684l6.632 3.316m-6.632-6l6.632-3.316m0 0a3 3 0 105.367-2.684 3 3 0 00-5.367 2.684zm0 9.316a3 3 0 105.368 2.684 3 3 0 00-5.368-2.684z" ∷
687+ JSX
688+
689+shieldCheck =
690+ outline
691+ "M9 12l2 2 4-4m5.618-4.016A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016z" ∷
692+ JSX
693+
694+shieldExclamation =
695+ outline
696+ "M20.618 5.984A11.955 11.955 0 0112 2.944a11.955 11.955 0 01-8.618 3.04A12.02 12.02 0 003 9c0 5.591 3.824 10.29 9 11.622 5.176-1.332 9-6.03 9-11.622 0-1.042-.133-2.052-.382-3.016zM12 9v2m0 4h.01" ∷
697+ JSX
698+
699+shoppingBag = outline "M16 11V7a4 4 0 00-8 0v4M5 9h14l1 12H4L5 9z" ∷ JSX
700+shoppingCart =
701+ outline
702+ "M3 3h2l.4 2M7 13h10l4-8H5.4M7 13L5.4 5M7 13l-2.293 2.293c-.63.63-.184 1.707.707 1.707H17m0 0a2 2 0 100 4 2 2 0 000-4zm-8 2a2 2 0 11-4 0 2 2 0 014 0z" ∷
703+ JSX
704+
705+sortAscending = outline "M3 4h13M3 8h9m-9 4h6m4 0l4-4m0 0l4 4m-4-4v12" ∷ JSX
706+sortDescending = outline "M3 4h13M3 8h9m-9 4h9m5-4v12m0 0l-4-4m4 4l4-4" ∷ JSX
707+sparkles =
708+ outline
709+ "M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z" ∷
710+ JSX
711+
712+speakerphone =
713+ outline
714+ "M11 5.882V19.24a1.76 1.76 0 01-3.417.592l-2.147-6.15M18 13a3 3 0 100-6M5.436 13.683A4.001 4.001 0 017 6h1.832c4.1 0 7.625-1.234 9.168-3v14c-1.543-1.766-5.067-3-9.168-3H7a3.988 3.988 0 01-1.564-.317z" ∷
715+ JSX
716+
717+star =
718+ outline
719+ "M11.049 2.927c.3-.921 1.603-.921 1.902 0l1.519 4.674a1 1 0 00.95.69h4.915c.969 0 1.371 1.24.588 1.81l-3.976 2.888a1 1 0 00-.363 1.118l1.518 4.674c.3.922-.755 1.688-1.538 1.118l-3.976-2.888a1 1 0 00-1.176 0l-3.976 2.888c-.783.57-1.838-.197-1.538-1.118l1.518-4.674a1 1 0 00-.363-1.118l-3.976-2.888c-.784-.57-.38-1.81.588-1.81h4.914a1 1 0 00.951-.69l1.519-4.674z" ∷
720+ JSX
721+
722+statusOffline =
723+ outline
724+ "M18.364 5.636a9 9 0 010 12.728m0 0l-2.829-2.829m2.829 2.829L21 21M15.536 8.464a5 5 0 010 7.072m0 0l-2.829-2.829m-4.243 2.829a4.978 4.978 0 01-1.414-2.83m-1.414 5.658a9 9 0 01-2.167-9.238m7.824 2.167a1 1 0 111.414 1.414m-1.414-1.414L3 3m8.293 8.293l1.414 1.414" ∷
725+ JSX
726+
727+statusOnline =
728+ outline
729+ "M5.636 18.364a9 9 0 010-12.728m12.728 0a9 9 0 010 12.728m-9.9-2.829a5 5 0 010-7.07m7.072 0a5 5 0 010 7.07M13 12a1 1 0 11-2 0 1 1 0 012 0z" ∷
730+ JSX
731+
732+stop =
733+ outlines
734+ [ "M21 12a9 9 0 11-18 0 9 9 0 0118 0z"
735+ , "M9 10a1 1 0 011-1h4a1 1 0 011 1v4a1 1 0 01-1 1h-4a1 1 0 01-1-1v-4z"
736+ ] ∷ JSX
737+
738+sun =
739+ outline
740+ "M12 3v1m0 16v1m9-9h-1M4 12H3m15.364 6.364l-.707-.707M6.343 6.343l-.707-.707m12.728 0l-.707.707M6.343 17.657l-.707.707M16 12a4 4 0 11-8 0 4 4 0 018 0z" ∷
741+ JSX
742+
743+support =
744+ outline
745+ "M18.364 5.636l-3.536 3.536m0 5.656l3.536 3.536M9.172 9.172L5.636 5.636m3.536 9.192l-3.536 3.536M21 12a9 9 0 11-18 0 9 9 0 0118 0zm-5 0a4 4 0 11-8 0 4 4 0 018 0z" ∷
746+ JSX
747+
748+switchHorizontal =
749+ outline "M8 7h12m0 0l-4-4m4 4l-4 4m0 6H4m0 0l4 4m-4-4l4-4" ∷ JSX
750+
751+switchVertical =
752+ outline "M7 16V4m0 0L3 8m4-4l4 4m6 0v12m0 0l4-4m-4 4l-4-4" ∷ JSX
753+
754+table =
755+ outline
756+ "M3 10h18M3 14h18m-9-4v8m-7 0h14a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z" ∷
757+ JSX
758+
759+tag =
760+ outline
761+ "M7 7h.01M7 3h5c.512 0 1.024.195 1.414.586l7 7a2 2 0 010 2.828l-7 7a2 2 0 01-2.828 0l-7-7A1.994 1.994 0 013 12V7a4 4 0 014-4z" ∷
762+ JSX
763+
764+template =
765+ outline
766+ "M4 5a1 1 0 011-1h14a1 1 0 011 1v2a1 1 0 01-1 1H5a1 1 0 01-1-1V5zM4 13a1 1 0 011-1h6a1 1 0 011 1v6a1 1 0 01-1 1H5a1 1 0 01-1-1v-6zM16 13a1 1 0 011-1h2a1 1 0 011 1v6a1 1 0 01-1 1h-2a1 1 0 01-1-1v-6z" ∷
767+ JSX
768+
769+terminal =
770+ outline
771+ "M8 9l3 3-3 3m5 0h3M5 20h14a2 2 0 002-2V6a2 2 0 00-2-2H5a2 2 0 00-2 2v12a2 2 0 002 2z" ∷
772+ JSX
773+
774+thumbsDown =
775+ outline
776+ "M10 14H5.236a2 2 0 01-1.789-2.894l3.5-7A2 2 0 018.736 3h4.018a2 2 0 01.485.06l3.76.94m-7 10v5a2 2 0 002 2h.096c.5 0 .905-.405.905-.904 0-.715.211-1.413.608-2.008L17 13V4m-7 10h2m5-10h2a2 2 0 012 2v6a2 2 0 01-2 2h-2.5" ∷
777+ JSX
778+
779+thumbsUp =
780+ outline
781+ "M14 10h4.764a2 2 0 011.789 2.894l-3.5 7A2 2 0 0115.263 21h-4.017c-.163 0-.326-.02-.485-.06L7 20m7-10V5a2 2 0 00-2-2h-.095c-.5 0-.905.405-.905.905 0 .714-.211 1.412-.608 2.006L7 11v9m7-10h-2M7 20H5a2 2 0 01-2-2v-6a2 2 0 012-2h2.5" ∷
782+ JSX
783+
784+ticket =
785+ outline
786+ "M15 5v2m0 4v2m0 4v2M5 5a2 2 0 00-2 2v3a2 2 0 110 4v3a2 2 0 002 2h14a2 2 0 002-2v-3a2 2 0 110-4V7a2 2 0 00-2-2H5z" ∷
787+ JSX
788+
789+translate =
790+ outline
791+ "M3 5h12M9 3v2m1.048 9.5A18.022 18.022 0 016.412 9m6.088 9h7M11 21l5-10 5 10M12.751 5C11.783 10.77 8.07 15.61 3 18.129" ∷
792+ JSX
793+
794+trash =
795+ outline
796+ "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" ∷
797+ JSX
798+
799+trendingDown = outline "M13 17h8m0 0V9m0 8l-8-8-4 4-6-6" ∷ JSX
800+trendingUp = outline "M13 7h8m0 0v8m0-8l-8 8-4-4-6 6" ∷ JSX
801+truck =
802+ outlines
803+ [ "M9 17a2 2 0 11-4 0 2 2 0 014 0zM19 17a2 2 0 11-4 0 2 2 0 014 0z"
804+ , "M13 16V6a1 1 0 00-1-1H4a1 1 0 00-1 1v10a1 1 0 001 1h1m8-1a1 1 0 01-1 1H9m4-1V8a1 1 0 011-1h2.586a1 1 0 01.707.293l3.414 3.414a1 1 0 01.293.707V16a1 1 0 01-1 1h-1m-6-1a1 1 0 001 1h1M5 17a2 2 0 104 0m-4 0a2 2 0 114 0m6 0a2 2 0 104 0m-4 0a2 2 0 114 0"
805+ ] ∷ JSX
806+
807+upload =
808+ outline "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12" ∷ JSX
809+
810+userAdd =
811+ outline
812+ "M18 9v3m0 0v3m0-3h3m-3 0h-3m-2-5a4 4 0 11-8 0 4 4 0 018 0zM3 20a6 6 0 0112 0v1H3v-1z" ∷
813+ JSX
814+
815+userCircle =
816+ outline
817+ "M5.121 17.804A13.937 13.937 0 0112 16c2.5 0 4.847.655 6.879 1.804M15 10a3 3 0 11-6 0 3 3 0 016 0zm6 2a9 9 0 11-18 0 9 9 0 0118 0z" ∷
818+ JSX
819+
820+userGroup =
821+ outline
822+ "M17 20h5v-2a3 3 0 00-5.356-1.857M17 20H7m10 0v-2c0-.656-.126-1.283-.356-1.857M7 20H2v-2a3 3 0 015.356-1.857M7 20v-2c0-.656.126-1.283.356-1.857m0 0a5.002 5.002 0 019.288 0M15 7a3 3 0 11-6 0 3 3 0 016 0zm6 3a2 2 0 11-4 0 2 2 0 014 0zM7 10a2 2 0 11-4 0 2 2 0 014 0z" ∷
823+ JSX
824+
825+userRemove =
826+ outline
827+ "M13 7a4 4 0 11-8 0 4 4 0 018 0zM9 14a6 6 0 00-6 6v1h12v-1a6 6 0 00-6-6zM21 12h-6" ∷
828+ JSX
829+
830+user =
831+ outline "M16 7a4 4 0 11-8 0 4 4 0 018 0zM12 14a7 7 0 00-7 7h14a7 7 0 00-7-7z" ∷
832+ JSX
833+
834+users =
835+ outline
836+ "M12 4.354a4 4 0 110 5.292M15 21H3v-1a6 6 0 0112 0v1zm0 0h6v-1a6 6 0 00-9-5.197M13 7a4 4 0 11-8 0 4 4 0 018 0z" ∷
837+ JSX
838+
839+variable =
840+ outline
841+ "M4.871 4A17.926 17.926 0 003 12c0 2.874.673 5.59 1.871 8m14.13 0a17.926 17.926 0 001.87-8c0-2.874-.673-5.59-1.87-8M9 9h1.246a1 1 0 01.961.725l1.586 5.55a1 1 0 00.961.725H15m1-7h-.08a2 2 0 00-1.519.698L9.6 15.302A2 2 0 018.08 16H8" ∷
842+ JSX
843+
844+videoCamera =
845+ outline
846+ "M15 10l4.553-2.276A1 1 0 0121 8.618v6.764a1 1 0 01-1.447.894L15 14M5 18h8a2 2 0 002-2V8a2 2 0 00-2-2H5a2 2 0 00-2 2v8a2 2 0 002 2z" ∷
847+ JSX
848+
849+viewBoards =
850+ outline
851+ "M9 17V7m0 10a2 2 0 01-2 2H5a2 2 0 01-2-2V7a2 2 0 012-2h2a2 2 0 012 2m0 10a2 2 0 002 2h2a2 2 0 002-2M9 7a2 2 0 012-2h2a2 2 0 012 2m0 10V7m0 10a2 2 0 002 2h2a2 2 0 002-2V7a2 2 0 00-2-2h-2a2 2 0 00-2 2" ∷
852+ JSX
853+
854+viewGridAdd =
855+ outline
856+ "M17 14v6m-3-3h6M6 10h2a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v2a2 2 0 002 2zm10 0h2a2 2 0 002-2V6a2 2 0 00-2-2h-2a2 2 0 00-2 2v2a2 2 0 002 2zM6 20h2a2 2 0 002-2v-2a2 2 0 00-2-2H6a2 2 0 00-2 2v2a2 2 0 002 2z" ∷
857+ JSX
858+
859+viewGrid =
860+ outline
861+ "M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z" ∷
862+ JSX
863+
864+viewList = outline "M4 6h16M4 10h16M4 14h16M4 18h16" ∷ JSX
865+volumeOff =
866+ outlines
867+ [ "M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z"
868+ , "M17 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2"
869+ ] ∷ JSX
870+
871+volumeUp =
872+ outline
873+ "M15.536 8.464a5 5 0 010 7.072m2.828-9.9a9 9 0 010 12.728M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z" ∷
874+ JSX
875+
876+wifi =
877+ outline
878+ "M8.111 16.404a5.5 5.5 0 017.778 0M12 20h.01m-7.08-7.071c3.904-3.905 10.236-3.905 14.141 0M1.394 9.393c5.857-5.857 15.355-5.857 21.213 0" ∷
879+ JSX
880+
881+xCircle =
882+ outline "M10 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2m7-2a9 9 0 11-18 0 9 9 0 0118 0z" ∷
883+ JSX
884+
885+x = outline "M6 18L18 6M6 6l12 12" ∷ JSX
886+zoomIn =
887+ outline
888+ "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM10 7v3m0 0v3m0-3h3m-3 0H7" ∷
889+ JSX
890+
891+zoomOut = outline "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0zM13 10H7" ∷ JSX
src/Fahrtwind/Style.pursnew file+68
@@ -0,0 +1,68 @@
1+--| Tailwind.css inspired helper functions for speeding up styling elements
2+module Fahrtwind.Style
3+ ( module Fahrtwind.Style.BlendMode
4+ , module Fahrtwind.Style.BlendMode.Types
5+ , module Fahrtwind.Style.Border
6+ , module Fahrtwind.Style.BoxModel
7+ , module Fahrtwind.Style.BoxShadow
8+ , module Fahrtwind.Style.Breakpoint
9+ , module Fahrtwind.Style.Color.Background
10+ , module Fahrtwind.Style.Color.Tailwind
11+ , module Fahrtwind.Style.Color.Text
12+ , module Fahrtwind.Style.Color.Util
13+ , module Fahrtwind.Style.Cursor
14+ , module Fahrtwind.Style.Display
15+ , module Fahrtwind.Style.Display.Flex
16+ , module Fahrtwind.Style.Display.Grid
17+ , module Fahrtwind.Style.Divide
18+ , module Fahrtwind.Style.Global
19+ , module Fahrtwind.Style.Input
20+ , module Fahrtwind.Style.Inset
21+ , module Fahrtwind.Style.Isolation
22+ , module Fahrtwind.Style.Nesting
23+ , module Fahrtwind.Style.Opacity
24+ , module Fahrtwind.Style.Overflow
25+ , module Fahrtwind.Style.PointerEvents
26+ , module Fahrtwind.Style.Position
27+ , module Fahrtwind.Style.PseudoClasses
28+ , module Fahrtwind.Style.PseudoElements
29+ , module Fahrtwind.Style.Size
30+ , module Fahrtwind.Style.Text
31+ , module Fahrtwind.Style.Transform
32+ , module Fahrtwind.Style.Transition
33+ , module Fahrtwind.Style.UserSelect
34+ , module Fahrtwind.Style.Visibility
35+ ) where
36+
37+import Fahrtwind.Style.BlendMode (backgroundBlendMode, mixBlendMode)
38+import Fahrtwind.Style.BlendMode.Types (BlendMode(..), blendModeToStyleProperty)
39+import Fahrtwind.Style.Border (border, borderBottom, borderCol, borderCol', borderLeft, borderNone, borderRight, borderSolid, borderTop, boxSizingBorderBox, boxSizingContentBox, rounded, rounded2xl, rounded3xl, roundedDefault, roundedFull, roundedLg, roundedMd, roundedNone, roundedSm, roundedXl)
40+import Fahrtwind.Style.BoxModel (m', mB, mB', mL, mL', mR, mR', mT, mT', mX, mX', mXAuto, mXY, mY, mY', p', pB, pB', pL, pL', pR, pR', pT, pT', pX, pX', pXY, pY, pY')
41+import Fahrtwind.Style.BoxShadow (mkShadow, shadow, shadow', shadowDefault, shadowDefaultCol, shadowLg, shadowLgCol, shadowMd, shadowMdCol, shadowSm, shadowSmCol, shadowXl, shadowXlCol, shadowXxl, shadowXxlCol, shadows)
42+import Fahrtwind.Style.Breakpoint (screen2xl, screenLg, screenMd, screenSm, screenXl)
43+import Fahrtwind.Style.Color.Background (background, background', backgroundImage, backgroundImage', backgroundNoRepeat, backgroundPosition, backgroundRepeat, backgroundRepeatX, backgroundRepeatY, backgroundSize, backgroundSize', blurredBackground, blurredBackground', linearGradient, linearGradientStops, linearGradientStopsString, linearGradientString, svgBackgroundImage)
44+import Fahrtwind.Style.Color.Tailwind (TailwindColor, amber, black, blue, blueGray, coolGray, cyan, emerald, fuchsia, gray, green, indigo, lightBlue, lime, orange, pink, purple, red, rose, teal, trueGray, violet, warmGray, white, yellow)
45+import Fahrtwind.Style.Color.Text (textCenter, textCol, textCol', textJustify, textLeft, textRight)
46+import Fahrtwind.Style.Color.Util (hue, lightness, saturation, withAlpha, withHue, withLightness, withSaturation)
47+import Fahrtwind.Style.Cursor (cursorAuto, cursorDefault, cursorHelp, cursorMove, cursorNotAllowed, cursorPointer, cursorText, cursorWait)
48+import Fahrtwind.Style.Display (block, displayNone, flex, inlineBlock, inlineFlex, inlineGrid)
49+import Fahrtwind.Style.Display.Flex (alignSelfCenter, alignSelfEnd, alignSelfStart, flexCol, flexGrow, flexNoWrap, flexRow, flexShrink, flexWrap, flexWrapReverse, gap, itemsAround, itemsBetween, itemsCenter, itemsEnd, itemsEvenly, itemsStart, justifyAround, justifyBetween, justifyCenter, justifyEnd, justifyEvenly, justifySelfCenter, justifySelfEnd, justifySelfStart, justifyStart)
50+import Fahrtwind.Style.Display.Grid (displayGrid, templateCols, templateRows)
51+import Fahrtwind.Style.Divide (divideCol, divideX, divideXReverse, divideY, divideYReverse)
52+import Fahrtwind.Style.Global (globalStyles, nest, variables)
53+import Fahrtwind.Style.Input (outlineNone, placeholder)
54+import Fahrtwind.Style.Inset (bottom, bottom', left, left', right, right', top, top')
55+import Fahrtwind.Style.Isolation (isolate, isolationAuto)
56+import Fahrtwind.Style.Nesting (attributeValueStyle)
57+import Fahrtwind.Style.Opacity (opacity)
58+import Fahrtwind.Style.Overflow (overflowHidden, overflowScroll, overflowVisible, overflowXHidden, overflowXScroll, overflowYHidden, overflowYScroll, textOverflowEllipsis)
59+import Fahrtwind.Style.PointerEvents (acceptClicks, ignoreClicks, pointerEventsAuto, pointerEventsNone)
60+import Fahrtwind.Style.Position (positionAbsolute, positionFixed, positionRelative, positionStatic, positionSticky)
61+import Fahrtwind.Style.PseudoClasses (active, checked, default, disabled, empty, enabled, evenChild, first, firstChild, firstOfType, focus, focusWithin, fullscreen, hover, inRange, indeterminate, invalid, lastChild, lastOfType, link, nthChild, nthOfType, oddChild, onlyChild, onlyOfType, optional, outOfRange, pseudoLeft, pseudoRight, readOnly, readWrite, required, root, scope, target, valid, visited)
62+import Fahrtwind.Style.PseudoElements (afterElement, beforeElement, content, firstLetter, firstLine, selection)
63+import Fahrtwind.Style.Size (full, height, height', heightFull, heightScreen, maxHeight, maxHeight', maxWidth, maxWidth', minHeight, minHeight', minWidth, minWidth', screenHeight, screenWidth, width, width', widthAndHeight, widthAndHeight', widthFull, widthScreen)
64+import Fahrtwind.Style.Text (fontBlack, fontBold, fontExtrabold, fontExtralight, fontFamilyOrMono, fontFamilyOrSans, fontFamilyOrSerif, fontLight, fontMedium, fontNormal, fontSemiMedium, fontSemibold, fontSize, fontSize', fontThin, lineHeight, lineHeight', text2xl, text3xl, text4xl, text5xl, text6xl, text7xl, text8xl, text9xl, textBase, textDefault, textLg, textSized, textSm, textTransformUppercase, textXl, textXs, tracking, trackingNormal, trackingTight, trackingTighter, trackingWide, trackingWider, trackingWidest, underline)
65+import Fahrtwind.Style.Transform (mkRotate, mkTranslate, rotate, transform, transform', transformMany, translate)
66+import Fahrtwind.Style.Transition (transition, transition', transitionRec)
67+import Fahrtwind.Style.UserSelect (userSelectNone, userSelectText)
68+import Fahrtwind.Style.Visibility (invisible, visible)
src/Fahrtwind/Style/BlendMode.pursnew file+10
@@ -0,0 +1,10 @@
1+module Fahrtwind.Style.BlendMode where
2+
3+import Fahrtwind.Style.BlendMode.Types (BlendMode, blendModeToStyleProperty)
4+import React.Basic.Emotion (Style, css)
5+
6+mixBlendMode ∷ BlendMode → Style
7+mixBlendMode bm = css { mixBlendMode: blendModeToStyleProperty bm }
8+
9+backgroundBlendMode ∷ BlendMode → Style
10+backgroundBlendMode bm = css { backgroundBlendMode: blendModeToStyleProperty bm }
src/Fahrtwind/Style/BlendMode/Types.pursnew file+39
@@ -0,0 +1,39 @@
1+module Fahrtwind.Style.BlendMode.Types where
2+
3+import Prelude
4+import React.Basic.Emotion (StyleProperty, str)
5+
6+data BlendMode
7+ = BlendModeNormal
8+ | BlendModeMultiply
9+ | BlendModeScreen
10+ | BlendModeOverlay
11+ | BlendModeDarken
12+ | BlendModeLighten
13+ | BlendModeColorDodge
14+ | BlendModeBurn
15+ | BlendModeHardLight
16+ | BlendModeSoftLight
17+ | BlendModeDifference
18+ | BlendModeExclusion
19+ | BlendModeColor
20+ | BlendModeLuminosity
21+
22+blendModeToStyleProperty ∷ BlendMode → StyleProperty
23+blendModeToStyleProperty =
24+ str
25+ <<< case _ of
26+ BlendModeNormal → "normal"
27+ BlendModeMultiply → "multiply"
28+ BlendModeScreen → "screen"
29+ BlendModeOverlay → "overlay"
30+ BlendModeDarken → "darken"
31+ BlendModeLighten → "lighten"
32+ BlendModeColorDodge → "color-dodge"
33+ BlendModeBurn → "burn"
34+ BlendModeHardLight → "hard-light"
35+ BlendModeSoftLight → "soft-light"
36+ BlendModeDifference → "difference"
37+ BlendModeExclusion → "exclusion"
38+ BlendModeColor → "color"
39+ BlendModeLuminosity → "luminosity"
src/Fahrtwind/Style/Border.pursnew file+68
@@ -0,0 +1,68 @@
1+module Fahrtwind.Style.Border where
2+
3+import Prelude
4+import Color (Color)
5+import React.Basic.Emotion (Style, StyleProperty, borderBox, color, contentBox, css, px, rem, str)
6+
7+rounded ∷ StyleProperty -> Style
8+rounded = css <<< { borderRadius: _ }
9+
10+roundedNone ∷ Style
11+roundedNone = rounded (0 # px)
12+
13+roundedSm ∷ Style
14+roundedSm = rounded (0.125 # rem)
15+
16+roundedDefault ∷ Style
17+roundedDefault = rounded (0.25 # rem)
18+
19+roundedMd ∷ Style
20+roundedMd = rounded (0.375 # rem)
21+
22+roundedLg ∷ Style
23+roundedLg = rounded (0.5 # rem)
24+
25+roundedXl ∷ Style
26+roundedXl = rounded (0.75 # rem)
27+
28+rounded2xl ∷ Style
29+rounded2xl = rounded (1.0 # rem)
30+
31+rounded3xl ∷ Style
32+rounded3xl = rounded (1.5 # rem)
33+
34+roundedFull ∷ Style
35+roundedFull = rounded (9999 # px)
36+
37+border ∷ Int -> Style
38+border = css <<< { borderWidth: _ } <<< px
39+
40+borderLeft ∷ Int -> Style
41+borderLeft = css <<< { borderLeftWidth: _ } <<< px
42+
43+borderTop ∷ Int -> Style
44+borderTop = css <<< { borderTopWidth: _ } <<< px
45+
46+borderRight ∷ Int -> Style
47+borderRight = css <<< { borderRightWidth: _ } <<< px
48+
49+borderBottom ∷ Int -> Style
50+borderBottom = css <<< { borderBottomWidth: _ } <<< px
51+
52+borderSolid ∷ Style
53+borderSolid = css { borderStyle: str "solid" }
54+
55+borderNone ∷ Style
56+borderNone = css { borderStyle: str "none" }
57+
58+borderCol ∷ Color -> Style
59+borderCol = css <<< { borderColor: _ } <<< color
60+
61+borderCol' ∷ StyleProperty -> Style
62+borderCol' = css <<< { borderColor: _ }
63+
64+boxSizingBorderBox ∷ Style
65+boxSizingBorderBox = css { boxSizing: borderBox }
66+
67+boxSizingContentBox ∷ Style
68+boxSizingContentBox = css { boxSizing: contentBox }
src/Fahrtwind/Style/BoxModel.pursnew file+91
@@ -0,0 +1,91 @@
1+module Fahrtwind.Style.BoxModel where
2+
3+import Prelude
4+import React.Basic.Emotion (Style, StyleProperty, auto, css, px)
5+
6+pXY ∷ Int → Style
7+pXY = css <<< { padding: _ } <<< px
8+
9+pT ∷ Int → Style
10+pT = css <<< { paddingTop: _ } <<< px
11+
12+pB ∷ Int → Style
13+pB = css <<< { paddingBottom: _ } <<< px
14+
15+pL ∷ Int → Style
16+pL = css <<< { paddingLeft: _ } <<< px
17+
18+pR ∷ Int → Style
19+pR = css <<< { paddingRight: _ } <<< px
20+
21+pX ∷ Int → Style
22+pX n = pR n <> pL n
23+
24+pY ∷ Int → Style
25+pY n = pT n <> pB n
26+
27+mXY ∷ Int → Style
28+mXY = css <<< { margin: _ } <<< px
29+
30+mT ∷ Int → Style
31+mT = css <<< { marginTop: _ } <<< px
32+
33+mB ∷ Int → Style
34+mB = css <<< { marginBottom: _ } <<< px
35+
36+mL ∷ Int → Style
37+mL = css <<< { marginLeft: _ } <<< px
38+
39+mR ∷ Int → Style
40+mR = css <<< { marginRight: _ } <<< px
41+
42+mX ∷ Int → Style
43+mX n = mR n <> mL n
44+
45+mXAuto ∷ Style
46+mXAuto = mX' auto
47+
48+mY ∷ Int → Style
49+mY n = mT n <> mB n
50+
51+p' ∷ StyleProperty → Style
52+p' = css <<< { padding: _ }
53+
54+pT' ∷ StyleProperty → Style
55+pT' = css <<< { paddingTop: _ }
56+
57+pB' ∷ StyleProperty → Style
58+pB' = css <<< { paddingBottom: _ }
59+
60+pL' ∷ StyleProperty → Style
61+pL' = css <<< { paddingLeft: _ }
62+
63+pR' ∷ StyleProperty → Style
64+pR' = css <<< { paddingRight: _ }
65+
66+pX' ∷ StyleProperty → Style
67+pX' n = pR' n <> pL' n
68+
69+pY' ∷ StyleProperty → Style
70+pY' n = pT' n <> pB' n
71+
72+m' ∷ StyleProperty → Style
73+m' = css <<< { margin: _ }
74+
75+mT' ∷ StyleProperty → Style
76+mT' = css <<< { marginTop: _ }
77+
78+mB' ∷ StyleProperty → Style
79+mB' = css <<< { marginBottom: _ }
80+
81+mL' ∷ StyleProperty → Style
82+mL' = css <<< { marginLeft: _ }
83+
84+mR' ∷ StyleProperty → Style
85+mR' = css <<< { marginRight: _ }
86+
87+mX' ∷ StyleProperty → Style
88+mX' n = mR' n <> mL' n
89+
90+mY' ∷ StyleProperty → Style
91+mY' n = mT' n <> mB' n
src/Fahrtwind/Style/BoxShadow.pursnew file+90
@@ -0,0 +1,90 @@
1+module Fahrtwind.Style.BoxShadow where
2+
3+import Prelude
4+import Color (Color, black, cssStringRGBA)
5+import Data.Array (intercalate)
6+import Fahrtwind.Style.Color.Util (lightness, withAlpha)
7+import React.Basic.Emotion (Style, StyleProperty, css, str)
8+
9+shadow' ∷ StyleProperty → Style
10+shadow' boxShadow = css { boxShadow }
11+
12+shadow ∷ String → Style
13+shadow s = css { boxShadow: str s }
14+
15+shadows ∷ Array String → Style
16+shadows = shadow <<< intercalate ","
17+
18+mkShadow ∷
19+ { blurRadius ∷ Int
20+ , col ∷ Color
21+ , offsetX ∷ Int
22+ , offsetY ∷ Int
23+ , spreadRadius ∷ Int
24+ } →
25+ String
26+mkShadow { offsetX, offsetY, blurRadius, spreadRadius, col } =
27+ show offsetX <> "px " <> show offsetY <> "px " <> show blurRadius <> "px " <> show spreadRadius <> "px " <> cssStringRGBA col
28+
29+shadowSm ∷ Style
30+shadowSm = shadowSmCol black
31+
32+shadowSmCol ∷ Color → Style
33+shadowSmCol col =
34+ shadow'
35+ $ str
36+ $ ("0 1px 2px 0 " <> cssStringRGBA (col # withAlpha (lightness col + 0.05)))
37+
38+shadowMd ∷ Style
39+shadowMd = shadowSmCol black
40+
41+shadowMdCol ∷ Color → Style
42+shadowMdCol col =
43+ shadow'
44+ $ str
45+ $ ("0 1px 2px 0 " <> cssStringRGBA (col # withAlpha (lightness col + 0.1)) <> ",")
46+ <> ("0 2px 4px -1px " <> cssStringRGBA (col # withAlpha (lightness col + 0.06)))
47+
48+shadowLg ∷ Style
49+shadowLg = shadowLgCol black
50+
51+shadowLgCol ∷ Color → Style
52+shadowLgCol col =
53+ shadow'
54+ $ str
55+ $ ("0 10px 15px -3px " <> cssStringRGBA (col # withAlpha (lightness col + 0.1)) <> ",")
56+ <> ("0 4px 6px -2px " <> cssStringRGBA (col # withAlpha (lightness col + 0.05)))
57+
58+shadowXl ∷ Style
59+shadowXl = shadowXlCol black
60+
61+shadowXlCol ∷ Color → Style
62+shadowXlCol col =
63+ shadow'
64+ $ str
65+ $ ("0 20px 25px -5px " <> cssStringRGBA (col # withAlpha (lightness col + 0.1)) <> ",")
66+ <> ("0 10px 10px -5px " <> cssStringRGBA (col # withAlpha (lightness col + 0.04)))
67+
68+shadowXxl ∷ Style
69+shadowXxl = shadowXxlCol black
70+
71+shadowXxlCol ∷ Color → Style
72+shadowXxlCol col =
73+ shadow'
74+ $ str
75+ $ "0 25px 50px -12px "
76+ <> cssStringRGBA (col # withAlpha (lightness col + 0.25))
77+
78+shadowDefault ∷ Style
79+shadowDefault = shadowDefaultCol black
80+
81+shadowDefaultCol ∷ Color → Style
82+shadowDefaultCol col =
83+ css
84+ { boxShadow:
85+ str
86+ $ "0 1px 3px 0 "
87+ <> cssStringRGBA (col # withAlpha (lightness col + 0.1))
88+ <> ", 0 1px 2px 0 "
89+ <> cssStringRGBA (col # withAlpha (lightness col + 0.06))
90+ }
src/Fahrtwind/Style/Breakpoint.pursnew file+14
@@ -0,0 +1,14 @@
1+module Fahrtwind.Style.Breakpoint where
2+
3+import React.Basic.Emotion (css, nested, Style)
4+
5+screenSm ∷ Style → Style
6+screenSm s = css { "@media (min-width: 640px)": nested s }
7+screenMd ∷ Style → Style
8+screenMd s = css { "@media (min-width: 768px)": nested s }
9+screenLg ∷ Style → Style
10+screenLg s = css { "@media (min-width: 1024px)": nested s }
11+screenXl ∷ Style → Style
12+screenXl s = css { "@media (min-width: 1280px)": nested s }
13+screen2xl ∷ Style → Style
14+screen2xl s = css { "@media (min-width: 1536px)": nested s }
src/Fahrtwind/Style/Child.pursnew file+10
@@ -0,0 +1,10 @@
1+module Fahrtwind.Style.Child where
2+
3+import React.Basic.Emotion (Style)
4+import React.Basic.Emotion as E
5+
6+firstChild ∷ Style → Style
7+firstChild s = E.css { "& > *:not(style):first-of-type": E.nested s }
8+
9+lastChild ∷ Style → Style
10+lastChild s = E.css { "& > *:not(style):last-of-type": E.nested s }
src/Fahrtwind/Style/Color/Background.pursnew file+105
@@ -0,0 +1,105 @@
1+module Fahrtwind.Style.Color.Background where
2+
3+import Prelude
4+
5+import Color (Color, cssStringRGBA)
6+import Data.Array (intercalate)
7+import Data.Tuple (Tuple)
8+import Data.Tuple.Nested ((/\))
9+import Fahrtwind.Style.Color.Util (withAlpha)
10+import React.Basic (JSX)
11+import React.Basic.DOM.Server (renderToStaticMarkup)
12+import React.Basic.Emotion (Style, StyleProperty, color, css, nested, str)
13+
14+background ∷ Color → Style
15+background = css <<< { backgroundColor: _ } <<< color
16+
17+background' ∷ StyleProperty → Style
18+background' = css <<< { backgroundColor: _ }
19+
20+backgroundImage ∷ String → Style
21+backgroundImage = backgroundImage' <<< str
22+
23+backgroundImage' ∷ StyleProperty → Style
24+backgroundImage' = css <<< { backgroundImage: _ }
25+
26+svgBackgroundImage ∷ JSX → Style
27+svgBackgroundImage jsx = backgroundImage
28+ $ "url('data:image/svg+xml;utf8,"
29+ <> renderToStaticMarkup jsx
30+ <> "')"
31+
32+backgroundPosition ∷ String → Style
33+backgroundPosition bp = css { backgroundPosition: str bp }
34+
35+backgroundRepeat ∷ String → Style
36+backgroundRepeat = css <<< { backgroundRepeat: _ } <<< str
37+
38+backgroundNoRepeat ∷ Style
39+backgroundNoRepeat = backgroundRepeat "no-repeat"
40+
41+backgroundRepeatX ∷ Style
42+backgroundRepeatX = backgroundRepeat "repeat-x"
43+
44+backgroundRepeatY ∷ Style
45+backgroundRepeatY = backgroundRepeat "repeat-y"
46+
47+backgroundSize' ∷ StyleProperty → Style
48+backgroundSize' = css <<< { backgroundSize: _ }
49+
50+backgroundSize ∷ String → Style
51+backgroundSize = backgroundSize' <<< str
52+
53+linearGradient ∷ Int → Array Color → Style
54+linearGradient deg colors = css { background: str bg }
55+ where
56+ bg = linearGradientString deg colors
57+
58+linearGradientStops ∷ Int → Array (Tuple Number Color) → Style
59+linearGradientStops int cols =
60+ css { background: str $ linearGradientStopsString int cols }
61+
62+linearGradientStopsString ∷ Int → Array (Tuple Number Color) → String
63+linearGradientStopsString deg colors = bg
64+ where
65+ bg =
66+ "linear-gradient("
67+ <> show deg
68+ <> "deg, "
69+ <> intercalate ","
70+ ( ( \(perc /\ col) →
71+ cssStringRGBA col <> " " <> show perc <> "%"
72+ ) <$> colors
73+ )
74+ <> ")"
75+
76+linearGradientString ∷ Int → Array Color → String
77+linearGradientString deg colors = bg
78+ where
79+ bg =
80+ "linear-gradient("
81+ <> show deg
82+ <> "deg, "
83+ <> intercalate "," (cssStringRGBA <$> colors)
84+ <> ")"
85+
86+blurredBackground ∷ Color → Int → Style
87+blurredBackground col blurRadius =
88+ blurredBackground'
89+ { blurredCol: col # withAlpha 0.3
90+ , fallbackCol: col # withAlpha 0.8
91+ , blurRadius
92+ }
93+
94+blurredBackground' ∷
95+ { blurredCol ∷ Color, fallbackCol ∷ Color, blurRadius ∷ Int } → Style
96+blurredBackground' { blurredCol, fallbackCol, blurRadius } =
97+ css
98+ { background: str $ cssStringRGBA fallbackCol
99+ , "@supports (backdrop-filter: blur(12px)) or (-webkit-backdrop-filter: blur(12px))":
100+ nested
101+ $ css
102+ { background: str $ cssStringRGBA blurredCol
103+ , backdropFilter: str $ "blur(" <> show blurRadius <> "px)"
104+ }
105+ }
src/Fahrtwind/Style/Color/Tailwind.pursnew file+357
@@ -0,0 +1,357 @@
1+module Fahrtwind.Style.Color.Tailwind
2+ ( amber
3+ , black
4+ , blue
5+ , blueGray
6+ , coolGray
7+ , cyan
8+ , emerald
9+ , fuchsia
10+ , gray
11+ , green
12+ , indigo
13+ , lightBlue
14+ , lime
15+ , orange
16+ , pink
17+ , purple
18+ , red
19+ , rose
20+ , teal
21+ , trueGray
22+ , violet
23+ , warmGray
24+ , white
25+ , yellow
26+ , TailwindColor
27+ ) where
28+
29+import Color (Color)
30+import Color as Color
31+
32+type TailwindColor
33+ = { _100 ∷ Color
34+ , _200 ∷ Color
35+ , _300 ∷ Color
36+ , _400 ∷ Color
37+ , _50 ∷ Color
38+ , _500 ∷ Color
39+ , _600 ∷ Color
40+ , _700 ∷ Color
41+ , _800 ∷ Color
42+ , _900 ∷ Color
43+ }
44+
45+white ∷ Color
46+white = Color.white
47+
48+black ∷ Color
49+black = Color.black
50+
51+blueGray ∷ TailwindColor
52+blueGray =
53+ { _50: Color.fromInt 0xF8FAFC
54+ , _100: Color.fromInt 0xF1F5F9
55+ , _200: Color.fromInt 0xE2E8F0
56+ , _300: Color.fromInt 0xCBD5E1
57+ , _400: Color.fromInt 0x94A3B8
58+ , _500: Color.fromInt 0x64748B
59+ , _600: Color.fromInt 0x475569
60+ , _700: Color.fromInt 0x334155
61+ , _800: Color.fromInt 0x1E293B
62+ , _900: Color.fromInt 0x0F172A
63+ }
64+
65+coolGray ∷ TailwindColor
66+coolGray =
67+ { _50: Color.fromInt 0xF9FAFB
68+ , _100: Color.fromInt 0xF3F4F6
69+ , _200: Color.fromInt 0xE5E7EB
70+ , _300: Color.fromInt 0xD1D5DB
71+ , _400: Color.fromInt 0x9CA3AF
72+ , _500: Color.fromInt 0x6B7280
73+ , _600: Color.fromInt 0x4B5563
74+ , _700: Color.fromInt 0x374151
75+ , _800: Color.fromInt 0x1F2937
76+ , _900: Color.fromInt 0x111827
77+ }
78+
79+gray ∷ TailwindColor
80+gray =
81+ { _50: Color.fromInt 0xFAFAFA
82+ , _100: Color.fromInt 0xF4F4F5
83+ , _200: Color.fromInt 0xE4E4E7
84+ , _300: Color.fromInt 0xD4D4D8
85+ , _400: Color.fromInt 0xA1A1AA
86+ , _500: Color.fromInt 0x71717A
87+ , _600: Color.fromInt 0x52525B
88+ , _700: Color.fromInt 0x3F3F46
89+ , _800: Color.fromInt 0x27272A
90+ , _900: Color.fromInt 0x18181B
91+ }
92+
93+trueGray ∷ TailwindColor
94+trueGray =
95+ { _50: Color.fromInt 0xFAFAFA
96+ , _100: Color.fromInt 0xF5F5F5
97+ , _200: Color.fromInt 0xE5E5E5
98+ , _300: Color.fromInt 0xD4D4D4
99+ , _400: Color.fromInt 0xA3A3A3
100+ , _500: Color.fromInt 0x737373
101+ , _600: Color.fromInt 0x525252
102+ , _700: Color.fromInt 0x404040
103+ , _800: Color.fromInt 0x262626
104+ , _900: Color.fromInt 0x171717
105+ }
106+
107+warmGray ∷ TailwindColor
108+warmGray =
109+ { _50: Color.fromInt 0xFAFAF9
110+ , _100: Color.fromInt 0xF5F5F4
111+ , _200: Color.fromInt 0xE7E5E4
112+ , _300: Color.fromInt 0xD6D3D1
113+ , _400: Color.fromInt 0xA8A29E
114+ , _500: Color.fromInt 0x78716C
115+ , _600: Color.fromInt 0x57534E
116+ , _700: Color.fromInt 0x44403C
117+ , _800: Color.fromInt 0x292524
118+ , _900: Color.fromInt 0x1C1917
119+ }
120+
121+red ∷ TailwindColor
122+red =
123+ { _50: Color.fromInt 0xFEF2F2
124+ , _100: Color.fromInt 0xFEE2E2
125+ , _200: Color.fromInt 0xFECACA
126+ , _300: Color.fromInt 0xFCA5A5
127+ , _400: Color.fromInt 0xF87171
128+ , _500: Color.fromInt 0xEF4444
129+ , _600: Color.fromInt 0xDC2626
130+ , _700: Color.fromInt 0xB91C1C
131+ , _800: Color.fromInt 0x991B1B
132+ , _900: Color.fromInt 0x7F1D1D
133+ }
134+
135+orange ∷ TailwindColor
136+orange =
137+ { _50: Color.fromInt 0xFFF7ED
138+ , _100: Color.fromInt 0xFFEDD5
139+ , _200: Color.fromInt 0xFED7AA
140+ , _300: Color.fromInt 0xFDBA74
141+ , _400: Color.fromInt 0xFB923C
142+ , _500: Color.fromInt 0xF97316
143+ , _600: Color.fromInt 0xEA580C
144+ , _700: Color.fromInt 0xC2410C
145+ , _800: Color.fromInt 0x9A3412
146+ , _900: Color.fromInt 0x7C2D12
147+ }
148+
149+amber ∷ TailwindColor
150+amber =
151+ { _50: Color.fromInt 0xFFFBEB
152+ , _100: Color.fromInt 0xFEF3C7
153+ , _200: Color.fromInt 0xFDE68A
154+ , _300: Color.fromInt 0xFCD34D
155+ , _400: Color.fromInt 0xFBBF24
156+ , _500: Color.fromInt 0xF59E0B
157+ , _600: Color.fromInt 0xD97706
158+ , _700: Color.fromInt 0xB45309
159+ , _800: Color.fromInt 0x92400E
160+ , _900: Color.fromInt 0x78350F
161+ }
162+
163+yellow ∷ TailwindColor
164+yellow =
165+ { _50: Color.fromInt 0xFEFCE8
166+ , _100: Color.fromInt 0xFEF9C3
167+ , _200: Color.fromInt 0xFEF08A
168+ , _300: Color.fromInt 0xFDE047
169+ , _400: Color.fromInt 0xFACC15
170+ , _500: Color.fromInt 0xEAB308
171+ , _600: Color.fromInt 0xCA8A04
172+ , _700: Color.fromInt 0xA16207
173+ , _800: Color.fromInt 0x854D0E
174+ , _900: Color.fromInt 0x713F12
175+ }
176+
177+lime ∷ TailwindColor
178+lime =
179+ { _50: Color.fromInt 0xF7FEE7
180+ , _100: Color.fromInt 0xECFCCB
181+ , _200: Color.fromInt 0xD9F99D
182+ , _300: Color.fromInt 0xBEF264
183+ , _400: Color.fromInt 0xA3E635
184+ , _500: Color.fromInt 0x84CC16
185+ , _600: Color.fromInt 0x65A30D
186+ , _700: Color.fromInt 0x4D7C0F
187+ , _800: Color.fromInt 0x3F6212
188+ , _900: Color.fromInt 0x365314
189+ }
190+
191+green ∷ TailwindColor
192+green =
193+ { _50: Color.fromInt 0xF0FDF4
194+ , _100: Color.fromInt 0xDCFCE7
195+ , _200: Color.fromInt 0xBBF7D0
196+ , _300: Color.fromInt 0x86EFAC
197+ , _400: Color.fromInt 0x4ADE80
198+ , _500: Color.fromInt 0x22C55E
199+ , _600: Color.fromInt 0x16A34A
200+ , _700: Color.fromInt 0x15803D
201+ , _800: Color.fromInt 0x166534
202+ , _900: Color.fromInt 0x14532D
203+ }
204+
205+emerald ∷ TailwindColor
206+emerald =
207+ { _50: Color.fromInt 0xECFDF5
208+ , _100: Color.fromInt 0xD1FAE5
209+ , _200: Color.fromInt 0xA7F3D0
210+ , _300: Color.fromInt 0x6EE7B7
211+ , _400: Color.fromInt 0x34D399
212+ , _500: Color.fromInt 0x10B981
213+ , _600: Color.fromInt 0x059669
214+ , _700: Color.fromInt 0x047857
215+ , _800: Color.fromInt 0x065F46
216+ , _900: Color.fromInt 0x064E3B
217+ }
218+
219+teal ∷ TailwindColor
220+teal =
221+ { _50: Color.fromInt 0xF0FDFA
222+ , _100: Color.fromInt 0xCCFBF1
223+ , _200: Color.fromInt 0x99F6E4
224+ , _300: Color.fromInt 0x5EEAD4
225+ , _400: Color.fromInt 0x2DD4BF
226+ , _500: Color.fromInt 0x14B8A6
227+ , _600: Color.fromInt 0x0D9488
228+ , _700: Color.fromInt 0x0F766E
229+ , _800: Color.fromInt 0x115E59
230+ , _900: Color.fromInt 0x134E4A
231+ }
232+
233+cyan ∷ TailwindColor
234+cyan =
235+ { _50: Color.fromInt 0xECFEFF
236+ , _100: Color.fromInt 0xCFFAFE
237+ , _200: Color.fromInt 0xA5F3FC
238+ , _300: Color.fromInt 0x67E8F9
239+ , _400: Color.fromInt 0x22D3EE
240+ , _500: Color.fromInt 0x06B6D4
241+ , _600: Color.fromInt 0x0891B2
242+ , _700: Color.fromInt 0x0E7490
243+ , _800: Color.fromInt 0x155E75
244+ , _900: Color.fromInt 0x164E63
245+ }
246+
247+lightBlue ∷ TailwindColor
248+lightBlue =
249+ { _50: Color.fromInt 0xF0F9FF
250+ , _100: Color.fromInt 0xE0F2FE
251+ , _200: Color.fromInt 0xBAE6FD
252+ , _300: Color.fromInt 0x7DD3FC
253+ , _400: Color.fromInt 0x38BDF8
254+ , _500: Color.fromInt 0x0EA5E9
255+ , _600: Color.fromInt 0x0284C7
256+ , _700: Color.fromInt 0x0369A1
257+ , _800: Color.fromInt 0x075985
258+ , _900: Color.fromInt 0x0C4A6E
259+ }
260+
261+blue ∷ TailwindColor
262+blue =
263+ { _50: Color.fromInt 0xEFF6FF
264+ , _100: Color.fromInt 0xDBEAFE
265+ , _200: Color.fromInt 0xBFDBFE
266+ , _300: Color.fromInt 0x93C5FD
267+ , _400: Color.fromInt 0x60A5FA
268+ , _500: Color.fromInt 0x3B82F6
269+ , _600: Color.fromInt 0x2563EB
270+ , _700: Color.fromInt 0x1D4ED8
271+ , _800: Color.fromInt 0x1E40AF
272+ , _900: Color.fromInt 0x1E3A8A
273+ }
274+
275+indigo ∷ TailwindColor
276+indigo =
277+ { _50: Color.fromInt 0xEEF2FF
278+ , _100: Color.fromInt 0xE0E7FF
279+ , _200: Color.fromInt 0xC7D2FE
280+ , _300: Color.fromInt 0xA5B4FC
281+ , _400: Color.fromInt 0x818CF8
282+ , _500: Color.fromInt 0x6366F1
283+ , _600: Color.fromInt 0x4F46E5
284+ , _700: Color.fromInt 0x4338CA
285+ , _800: Color.fromInt 0x3730A3
286+ , _900: Color.fromInt 0x312E81
287+ }
288+
289+violet ∷ TailwindColor
290+violet =
291+ { _50: Color.fromInt 0xF5F3FF
292+ , _100: Color.fromInt 0xEDE9FE
293+ , _200: Color.fromInt 0xDDD6FE
294+ , _300: Color.fromInt 0xC4B5FD
295+ , _400: Color.fromInt 0xA78BFA
296+ , _500: Color.fromInt 0x8B5CF6
297+ , _600: Color.fromInt 0x7C3AED
298+ , _700: Color.fromInt 0x6D28D9
299+ , _800: Color.fromInt 0x5B21B6
300+ , _900: Color.fromInt 0x4C1D95
301+ }
302+
303+purple ∷ TailwindColor
304+purple =
305+ { _50: Color.fromInt 0xFAF5FF
306+ , _100: Color.fromInt 0xF3E8FF
307+ , _200: Color.fromInt 0xE9D5FF
308+ , _300: Color.fromInt 0xD8B4FE
309+ , _400: Color.fromInt 0xC084FC
310+ , _500: Color.fromInt 0xA855F7
311+ , _600: Color.fromInt 0x9333EA
312+ , _700: Color.fromInt 0x7E22CE
313+ , _800: Color.fromInt 0x6B21A8
314+ , _900: Color.fromInt 0x581C87
315+ }
316+
317+fuchsia ∷ TailwindColor
318+fuchsia =
319+ { _50: Color.fromInt 0xFDF4FF
320+ , _100: Color.fromInt 0xFAE8FF
321+ , _200: Color.fromInt 0xF5D0FE
322+ , _300: Color.fromInt 0xF0ABFC
323+ , _400: Color.fromInt 0xE879F9
324+ , _500: Color.fromInt 0xD946EF
325+ , _600: Color.fromInt 0xC026D3
326+ , _700: Color.fromInt 0xA21CAF
327+ , _800: Color.fromInt 0x86198F
328+ , _900: Color.fromInt 0x701A75
329+ }
330+
331+pink ∷ TailwindColor
332+pink =
333+ { _50: Color.fromInt 0xFDF2F8
334+ , _100: Color.fromInt 0xFCE7F3
335+ , _200: Color.fromInt 0xFBCFE8
336+ , _300: Color.fromInt 0xF9A8D4
337+ , _400: Color.fromInt 0xF472B6
338+ , _500: Color.fromInt 0xEC4899
339+ , _600: Color.fromInt 0xDB2777
340+ , _700: Color.fromInt 0xBE185D
341+ , _800: Color.fromInt 0x9D174D
342+ , _900: Color.fromInt 0x831843
343+ }
344+
345+rose ∷ TailwindColor
346+rose =
347+ { _50: Color.fromInt 0xFFF1F2
348+ , _100: Color.fromInt 0xFFE4E6
349+ , _200: Color.fromInt 0xFECDD3
350+ , _300: Color.fromInt 0xFDA4AF
351+ , _400: Color.fromInt 0xFB7185
352+ , _500: Color.fromInt 0xF43F5E
353+ , _600: Color.fromInt 0xE11D48
354+ , _700: Color.fromInt 0xBE123C
355+ , _800: Color.fromInt 0x9F1239
356+ , _900: Color.fromInt 0x881337
357+ }
src/Fahrtwind/Style/Color/Text.pursnew file+24
@@ -0,0 +1,24 @@
1+module Fahrtwind.Style.Color.Text where
2+
3+import Prelude
4+
5+import Color (Color)
6+import React.Basic.Emotion (Style, StyleProperty, color, css, str)
7+
8+textCol ∷ Color → Style
9+textCol = css <<< { color: _ } <<< color
10+
11+textCol' ∷ StyleProperty → Style
12+textCol' = css <<< { color: _ }
13+
14+textLeft ∷ Style
15+textLeft = css { textAlign: str "left" }
16+
17+textCenter ∷ Style
18+textCenter = css { textAlign: str "center" }
19+
20+textRight ∷ Style
21+textRight = css { textAlign: str "right" }
22+
23+textJustify ∷ Style
24+textJustify = css { textAlign: str "justify" }
src/Fahrtwind/Style/Color/Util.pursnew file+34
@@ -0,0 +1,34 @@
1+module Fahrtwind.Style.Color.Util where
2+
3+import Prelude
4+import Color (Color)
5+import Color as Color
6+
7+withAlpha ∷ Number → Color → Color
8+withAlpha alpha c1 = Color.rgba' r g b alpha
9+ where
10+ { r, g, b } = Color.toRGBA' c1
11+
12+withLightness ∷ Number → Color → Color
13+withLightness l c1 = Color.hsla h s l a
14+ where
15+ { h, s, a } = Color.toHSLA c1
16+
17+withSaturation ∷ Number → Color → Color
18+withSaturation s c1 = Color.hsla h s l a
19+ where
20+ { h, l, a } = Color.toHSLA c1
21+
22+withHue ∷ Number → Color → Color
23+withHue h c1 = Color.hsla h s l a
24+ where
25+ { s, l, a } = Color.toHSLA c1
26+
27+lightness ∷ Color → Number
28+lightness = Color.toHSLA >>> _.l
29+
30+saturation ∷ Color → Number
31+saturation = Color.toHSLA >>> _.s
32+
33+hue ∷ Color → Number
34+hue = Color.toHSLA >>> _.h
src/Fahrtwind/Style/Cursor.pursnew file+27
@@ -0,0 +1,27 @@
1+module Fahrtwind.Style.Cursor where
2+
3+import React.Basic.Emotion (Style, auto, css, default, pointer, str)
4+
5+cursorAuto ∷ Style
6+cursorAuto = css { cursor: auto }
7+
8+cursorDefault ∷ Style
9+cursorDefault = css { cursor: default }
10+
11+cursorPointer ∷ Style
12+cursorPointer = css { cursor: pointer }
13+
14+cursorWait ∷ Style
15+cursorWait = css { cursor: str "wait" }
16+
17+cursorText ∷ Style
18+cursorText = css { cursor: str "text" }
19+
20+cursorMove ∷ Style
21+cursorMove = css { cursor: str "move" }
22+
23+cursorHelp ∷ Style
24+cursorHelp = css { cursor: str "help" }
25+
26+cursorNotAllowed ∷ Style
27+cursorNotAllowed = css { cursor: str "not-allowed" }
src/Fahrtwind/Style/Display.pursnew file+22
@@ -0,0 +1,22 @@
1+module Fahrtwind.Style.Display where
2+
3+import React.Basic.Emotion (Style, css)
4+import React.Basic.Emotion as E
5+
6+flex ∷ Style
7+flex = css { display: E.flex }
8+
9+inlineBlock ∷ Style
10+inlineBlock = css { display: E.inlineBlock }
11+
12+inlineFlex ∷ Style
13+inlineFlex = css { display: E.inlineFlex }
14+
15+inlineGrid ∷ Style
16+inlineGrid = css { display: E.inlineGrid }
17+
18+block ∷ Style
19+block = css { display: E.block }
20+
21+displayNone ∷ Style
22+displayNone = css { display: E.none }
src/Fahrtwind/Style/Display/Flex.pursnew file+90
@@ -0,0 +1,90 @@
1+module Fahrtwind.Style.Display.Flex where
2+
3+import Prelude
4+import React.Basic.Emotion (Style, center, column, css, flex, flexEnd, flexStart, nowrap, px, row, spaceAround, spaceBetween, spaceEvenly, str, wrap)
5+
6+flexCol ∷ Style
7+flexCol =
8+ css
9+ { display: flex
10+ , flexDirection: column
11+ }
12+
13+flexRow ∷ Style
14+flexRow =
15+ css
16+ { display: flex
17+ , flexDirection: row
18+ }
19+
20+flexGrow ∷ Int → Style
21+flexGrow g = css { flexGrow: str (show g) }
22+
23+flexShrink ∷ Int → Style
24+flexShrink g = css { flexShrink: str (show g) }
25+
26+flexWrap ∷ Style
27+flexWrap = css { flexWrap: wrap }
28+
29+flexNoWrap ∷ Style
30+flexNoWrap = css { flexWrap: nowrap }
31+
32+flexWrapReverse ∷ Style
33+flexWrapReverse = css { flexWrap: str "wrap-reverse" }
34+
35+gap ∷ Int → Style
36+gap x = css { gap: px x }
37+
38+justifyStart ∷ Style
39+justifyStart = css { justifyContent: flexStart }
40+
41+justifyEnd ∷ Style
42+justifyEnd = css { justifyContent: flexEnd }
43+
44+justifyCenter ∷ Style
45+justifyCenter = css { justifyContent: center }
46+
47+justifyBetween ∷ Style
48+justifyBetween = css { justifyContent: spaceBetween }
49+
50+justifyAround ∷ Style
51+justifyAround = css { justifyContent: spaceAround }
52+
53+justifyEvenly ∷ Style
54+justifyEvenly = css { justifyContent: spaceEvenly }
55+
56+itemsStart ∷ Style
57+itemsStart = css { alignItems: flexStart }
58+
59+itemsEnd ∷ Style
60+itemsEnd = css { alignItems: flexEnd }
61+
62+itemsCenter ∷ Style
63+itemsCenter = css { alignItems: center }
64+
65+itemsBetween ∷ Style
66+itemsBetween = css { alignItems: spaceBetween }
67+
68+itemsAround ∷ Style
69+itemsAround = css { alignItems: spaceAround }
70+
71+itemsEvenly ∷ Style
72+itemsEvenly = css { alignItems: spaceEvenly }
73+
74+justifySelfCenter ∷ Style
75+justifySelfCenter = css { justifySelf: center }
76+
77+justifySelfEnd ∷ Style
78+justifySelfEnd = css { justifySelf: flexEnd }
79+
80+justifySelfStart ∷ Style
81+justifySelfStart = css { justifySelf: flexStart }
82+
83+alignSelfCenter ∷ Style
84+alignSelfCenter = css { alignSelf: center }
85+
86+alignSelfStart ∷ Style
87+alignSelfStart = css { alignSelf: flexStart }
88+
89+alignSelfEnd ∷ Style
90+alignSelfEnd = css { alignSelf: flexEnd }
src/Fahrtwind/Style/Display/Grid.pursnew file+12
@@ -0,0 +1,12 @@
1+module Fahrtwind.Style.Display.Grid where
2+
3+import React.Basic.Emotion (Style, css, grid, str)
4+
5+displayGrid ∷ Style
6+displayGrid = css { display: grid }
7+
8+templateCols ∷ String → Style
9+templateCols gtcs = css { gridTemplateColumns: str gtcs }
10+
11+templateRows ∷ String → Style
12+templateRows gtrs = css { gridTemplateRows: str gtrs }
src/Fahrtwind/Style/Divide.pursnew file+54
@@ -0,0 +1,54 @@
1+module Fahrtwind.Style.Divide
2+ ( divideX
3+ , divideXReverse
4+ , divideY
5+ , divideYReverse
6+ , divideCol
7+ ) where
8+
9+import Prelude
10+import Color (Color)
11+import React.Basic.Emotion (Style, color, css, nested, px, solid)
12+
13+nestChildren ∷ Style → Style
14+nestChildren inner = css { "& > * + *": nested inner }
15+
16+divideX ∷ Int → Style
17+divideX pixels =
18+ nestChildren
19+ $ if pixels >= 0 then
20+ css
21+ { borderLeftWidth: px pixels
22+ , borderLeftStyle: solid
23+ }
24+ else
25+ css
26+ { borderRightWidth: px pixels
27+ , borderRightStyle: solid
28+ }
29+
30+divideXReverse ∷ Int → Style
31+divideXReverse = negate >>> divideX
32+
33+divideY ∷ Int → Style
34+divideY pixels =
35+ nestChildren
36+ $ if pixels >= 0 then
37+ css
38+ { borderTopWidth: px pixels
39+ , borderTopStyle: solid
40+ }
41+ else
42+ css
43+ { borderBottomWidth: px pixels
44+ , borderBottomStyle: solid
45+ }
46+
47+divideYReverse ∷ Int → Style
48+divideYReverse = negate >>> divideY
49+
50+divideCol ∷ Color → Style
51+divideCol col =
52+ nestChildren
53+ $ css
54+ { borderColor: color col }
src/Fahrtwind/Style/Global.pursnew file+190
@@ -0,0 +1,190 @@
1+module Fahrtwind.Style.Global where
2+
3+import Prelude
4+
5+import Color (cssStringRGBA, darken)
6+import Data.Array (intercalate)
7+import Fahrtwind.Style.Color.Tailwind (gray, violet, white)
8+import Prim.RowList (class RowToList)
9+import React.Basic.Emotion (Style, StyleProperty, auto, baseline, borderBox, color, css, em, inherit, nested, none, percent, px, relative, solid, str, var)
10+import Type.Row.Homogeneous (class HomogeneousRowList)
11+
12+nest
13+ ∷ ∀ r rl
14+ . RowToList r rl
15+ ⇒ HomogeneousRowList rl StyleProperty
16+ ⇒ Record r
17+ → StyleProperty
18+nest = nested <<< css
19+
20+variables ∷ Style
21+variables = css
22+ { "--plm-highlight-colour": color violet._500
23+ , "--plm-highlightText-colour": color violet._50
24+ , "--plm-inputBorder-colour": str "transparent"
25+ , "--plm-inputBackground-colour": color gray._100
26+ , "--plm-inputIcon-colour": color gray._400
27+ , "--plm-inputText-colour": color (gray._700 # darken 0.05)
28+ , "--plm-popupBackground-colour": color white
29+ , "--plm-inputBorderActive-colour": var "--plm-highlight-colour"
30+ , "--plm-inputSelectOption-colour": color gray._200
31+ , "--plm-inputSelectOptionText-colour": color gray._800
32+ }
33+
34+globalStyles ∷ Style
35+globalStyles =
36+ css
37+ { ":root":
38+ nested $ variables <> css
39+ { "*, ::before, ::after":
40+ nest
41+ { boxSizing: borderBox
42+ , borderWidth: str "0"
43+ , borderStyle: solid
44+ , borderColor: str "currentColor"
45+ }
46+ }
47+ , html:
48+ nest
49+ { tabSize: str "4"
50+ , "MozTabSize": str "4"
51+ , lineHeight: str "1.5"
52+ , "WebkitTextSizeAdjust": str "100%"
53+ , fontFamily:
54+ str
55+ $ intercalate ","
56+ [ show "Inter var experimental"
57+ , show "Inter var"
58+ , "Inter"
59+ , "system-ui"
60+ , "-apple-system"
61+ , "'Segoe UI'"
62+ , "Roboto"
63+ , "Helvetica"
64+ , "Arial"
65+ , "sans-serif"
66+ , "'Apple Color Emoji'"
67+ , "'Segoe UI Emoji'"
68+ ]
69+ }
70+ , body:
71+ nest
72+ { margin: str "0"
73+ , lineHeight: inherit
74+ , fontFamily: inherit
75+ }
76+ , hr:
77+ nest
78+ { height: str "0"
79+ , color: inherit
80+ , borderTopWidth: px 1
81+ }
82+ , "abbr[title]":
83+ nest
84+ { textDecoration: str "underline dotted"
85+ , "WebkitTextDecoration": str "underline dotted"
86+ }
87+ , "b,strong": nest { fontWeight: str "bolder" }
88+ , "code, kbd, samp, pre":
89+ nest
90+ { fontSize: em one
91+ , fontFamily:
92+ str
93+ $ intercalate ","
94+ [ "ui-monospace"
95+ , "SFMono-Regular"
96+ , "Consolas"
97+ , "'Liberation Mono'"
98+ , "Menlo"
99+ , "monospace"
100+ ]
101+ }
102+ , "small": nest { fontSize: percent 80.0 }
103+ , "sub,sup":
104+ nest
105+ { fontSize: percent 75.0
106+ , lineHeight: str "0"
107+ , position: relative
108+ , verticalAlign: baseline
109+ }
110+ , sub: nest { bottom: em (-0.25) }
111+ , sup: nest { bottom: em (-0.5) }
112+ , table:
113+ nest
114+ { textIndent: str "0"
115+ , borderColor: inherit
116+ , borderCollapse: str "collapse"
117+ }
118+ , "button,input,optgroup,select,textarea":
119+ nest
120+ { fontFamily: inherit
121+ , fontSize: percent 100.0
122+ , lineHeight: str "1.15"
123+ , margin: str "0"
124+ }
125+ , "button, select": nest { textTransform: none }
126+ , "button, [type='button'], [type='reset'], [type='submit']":
127+ nest { "WebkitAppearance": str "button" }
128+ , "::MozFocusInner": nest { borderStyle: none, padding: str "0" }
129+ , "::MozFocusring": nest { outline: str "1px dotted ButtonText" }
130+ , ":MozUIInvalid": nest { boxShadow: none }
131+ , legend: nest { padding: str "0" }
132+ , progress: nest { verticalAlign: baseline }
133+ , "::WebkitInnerSpinButton, ::WebkitOuterSpinButton": nest { height: auto }
134+ , "[type='search']":
135+ nest
136+ { "WebkitAppearance": str "textfield"
137+ , outlineOffset: px (-2)
138+ }
139+ , "::WebkitSearchDecoration": nest { "WebkitAppearance": none }
140+ , "::WebkitFileUploadButton":
141+ nest
142+ { "WebkitAppearance": str "button"
143+ , font: inherit
144+ }
145+ , summary: nest { display: str "list-item" }
146+ , "blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, pre":
147+ nest
148+ { margin: str "0"
149+ }
150+ , button:
151+ nest
152+ { backgroundColor: str "transparent"
153+ , backgroundImage: none
154+ }
155+ , fieldset:
156+ nest
157+ { margin: str "0"
158+ , padding: str "0"
159+ }
160+ , "ol, ul":
161+ nest
162+ { listStyle: none
163+ , margin: str "0"
164+ , padding: str "0"
165+ }
166+ , img: nest { borderStyle: solid }
167+ , textarea: nest { resize: str "vertical" }
168+ , "input::placeholder, textarea::placeholder":
169+ nest
170+ { opacity: str "1"
171+ , color: str "#9ca3af"
172+ }
173+ , "button, [role=\"button\"]":
174+ nest { cursor: str "pointer" }
175+ , "h1,h2,h3,h4,h5,h6": nest { fontSize: inherit, fontWeight: inherit }
176+ , a: nest { color: inherit, textDecoration: inherit }
177+ , "button, input, optgroup, selecct, textarea":
178+ nest
179+ { padding: str "0"
180+ , lineHeight: inherit
181+ , color: inherit
182+ }
183+ , "img, svg, video, canvas, audio, iframe, embed, object":
184+ nest { display: str "block", verticalAlign: str "middle" }
185+ , "img, video":
186+ nest
187+ { maxWidth: str "100%"
188+ , height: auto
189+ }
190+ }
src/Fahrtwind/Style/Input.pursnew file+11
@@ -0,0 +1,11 @@
1+module Fahrtwind.Style.Input where
2+
3+import React.Basic.Emotion (Style)
4+import React.Basic.Emotion as E
5+
6+placeholder ∷ Style → Style
7+placeholder style =
8+ E.css { "&::placeholder": E.nested style }
9+
10+outlineNone ∷ Style
11+outlineNone = E.css { outline: E.none }
src/Fahrtwind/Style/Inset.pursnew file+25
@@ -0,0 +1,25 @@
1+module Fahrtwind.Style.Inset where
2+
3+import Prelude
4+import React.Basic.Emotion (Style, StyleProperty)
5+import React.Basic.Emotion as E
6+
7+top' ∷ StyleProperty → Style
8+top' = E.css <<< { top: _ }
9+top ∷ Int → Style
10+top = E.px >>> top'
11+
12+bottom' ∷ StyleProperty → Style
13+bottom' = E.css <<< { bottom: _ }
14+bottom ∷ Int → Style
15+bottom = E.px >>> bottom'
16+
17+left' ∷ StyleProperty → Style
18+left' = E.css <<< { left: _ }
19+left ∷ Int → Style
20+left = E.px >>> left'
21+
22+right' ∷ StyleProperty → Style
23+right' = E.css <<< { right: _ }
24+right ∷ Int → Style
25+right = E.px >>> right'
src/Fahrtwind/Style/Isolation.pursnew file+10
@@ -0,0 +1,10 @@
1+module Fahrtwind.Style.Isolation where
2+
3+import React.Basic.Emotion (Style)
4+import React.Basic.Emotion as E
5+
6+isolate ∷ Style
7+isolate = E.css { isolation: E.str "isolate" }
8+
9+isolationAuto ∷ Style
10+isolationAuto = E.css { isolation: E.auto }
src/Fahrtwind/Style/Nesting.pursnew file+15
@@ -0,0 +1,15 @@
1+module Fahrtwind.Style.Nesting where
2+
3+import Prelude
4+
5+import Foreign.Object as Object
6+import React.Basic.Emotion (nested, Style)
7+import Unsafe.Coerce (unsafeCoerce)
8+
9+attributeValueStyle :: String -> String -> Style -> Style
10+attributeValueStyle name value style =
11+ unsafeCoerce
12+ ( Object.singleton
13+ ("&[" <> show name <> "='" <> value <> "']")
14+ (nested style)
15+ )
src/Fahrtwind/Style/Opacity.pursnew file+8
@@ -0,0 +1,8 @@
1+module Fahrtwind.Style.Opacity where
2+
3+import Prelude
4+import Data.Int as Int
5+import React.Basic.Emotion (Style, css, num)
6+
7+opacity ∷ Int → Style
8+opacity amount = css { opacity: num ((Int.toNumber amount) / 100.0) }
src/Fahrtwind/Style/Overflow.pursnew file+27
@@ -0,0 +1,27 @@
1+module Fahrtwind.Style.Overflow where
2+
3+import React.Basic.Emotion (Style, css, hidden, scroll, str, visible)
4+
5+overflowVisible ∷ Style
6+overflowVisible = css { overflow: visible }
7+
8+overflowHidden ∷ Style
9+overflowHidden = css { overflow: hidden }
10+
11+overflowXHidden ∷ Style
12+overflowXHidden = css { overflowX: hidden }
13+
14+overflowYHidden ∷ Style
15+overflowYHidden = css { overflowY: hidden }
16+
17+overflowScroll ∷ Style
18+overflowScroll = css { overflow: scroll }
19+
20+overflowXScroll ∷ Style
21+overflowXScroll = css { overflowX: scroll }
22+
23+overflowYScroll ∷ Style
24+overflowYScroll = css { overflowY: scroll }
25+
26+textOverflowEllipsis ∷ Style
27+textOverflowEllipsis = css { textOverflow: str "ellipsis" }
src/Fahrtwind/Style/PointerEvents.pursnew file+15
@@ -0,0 +1,15 @@
1+module Fahrtwind.Style.PointerEvents where
2+
3+import React.Basic.Emotion (Style, auto, css, none)
4+
5+pointerEventsNone ∷ Style
6+pointerEventsNone = css { pointerEvents: none }
7+
8+pointerEventsAuto ∷ Style
9+pointerEventsAuto = css { pointerEvents: auto }
10+
11+ignoreClicks ∷ Style
12+ignoreClicks = pointerEventsNone
13+
14+acceptClicks ∷ Style
15+acceptClicks = pointerEventsAuto
src/Fahrtwind/Style/Position.pursnew file+19
@@ -0,0 +1,19 @@
1+module Fahrtwind.Style.Position where
2+
3+import React.Basic.Emotion (Style)
4+import React.Basic.Emotion as E
5+
6+positionStatic ∷ Style
7+positionStatic = E.css { position: E.str "static" }
8+
9+positionRelative ∷ Style
10+positionRelative = E.css { position: E.relative }
11+
12+positionAbsolute ∷ Style
13+positionAbsolute = E.css { position: E.absolute }
14+
15+positionFixed ∷ Style
16+positionFixed = E.css { position: E.fixed }
17+
18+positionSticky ∷ Style
19+positionSticky = E.css { position: E.str "sticky" }
src/Fahrtwind/Style/PseudoClasses.pursnew file+169
@@ -0,0 +1,169 @@
1+module Fahrtwind.Style.PseudoClasses
2+ ( active
3+ , checked
4+ , default
5+ , disabled
6+ , empty
7+ , enabled
8+ , first
9+ , firstChild
10+ , firstOfType
11+ , evenChild
12+ , oddChild
13+ , focus
14+ , focusWithin
15+ , fullscreen
16+ , hover
17+ , inRange
18+ , indeterminate
19+ , invalid
20+ , lastChild
21+ , lastOfType
22+ , pseudoLeft
23+ , link
24+ , nthChild
25+ , nthOfType
26+ , onlyChild
27+ , onlyOfType
28+ , optional
29+ , outOfRange
30+ , readOnly
31+ , readWrite
32+ , required
33+ , pseudoRight
34+ , root
35+ , scope
36+ , target
37+ , valid
38+ , visited
39+ ) where
40+
41+import Prelude
42+
43+import Foreign.Object (Object)
44+import Foreign.Object as Object
45+import React.Basic.Emotion (Style, StyleProperty, css, nested)
46+import Unsafe.Coerce (unsafeCoerce)
47+
48+css_ :: Object StyleProperty -> Style
49+css_ = unsafeCoerce
50+
51+active ∷ Style → Style
52+active style = css { "&:active": nested style }
53+
54+checked ∷ Style → Style
55+checked style = css { "&:checked": nested style }
56+
57+default ∷ Style → Style
58+default style = css { "&:default": nested style }
59+
60+disabled ∷ Style → Style
61+disabled style = css { "&:disabled": nested style }
62+
63+empty ∷ Style → Style
64+empty style = css { "&:empty": nested style }
65+
66+enabled ∷ Style → Style
67+enabled style = css { "&:enabled": nested style }
68+
69+first ∷ Style → Style
70+first style = css { "&:first": nested style }
71+
72+firstChild ∷ Style → Style
73+firstChild style = css { "&:first-child": nested style }
74+
75+evenChild ∷ Style → Style
76+evenChild s = css { "& > *:not(style):nth-of-type(even)": nested s }
77+
78+oddChild ∷ Style → Style
79+oddChild s = css { "& > *:not(style):nth-of-type(odd)": nested s }
80+
81+firstOfType ∷ Style → Style
82+firstOfType style = css { "&:first-of-type": nested style }
83+
84+fullscreen ∷ Style → Style
85+fullscreen style = css { "&:fullscreen": nested style }
86+
87+focus ∷ Style → Style
88+focus style = css { "&:focus": nested style }
89+
90+focusWithin ∷ Style → Style
91+focusWithin s = css { "&:focus-within": nested s }
92+
93+hover ∷ Style → Style
94+hover style = css { "&:hover": nested style }
95+
96+indeterminate ∷ Style → Style
97+indeterminate style = css { "&:indeterminate": nested style }
98+
99+inRange ∷ Style → Style
100+inRange style = css { "&:in-range": nested style }
101+
102+invalid ∷ Style → Style
103+invalid style = css { "&:invalid": nested style }
104+
105+lastChild ∷ Style → Style
106+lastChild style = css { "&:last-child": nested style }
107+
108+lastOfType ∷ Style → Style
109+lastOfType style = css { "&:last-of-type": nested style }
110+
111+pseudoLeft ∷ Style → Style
112+pseudoLeft style = css { "&:left": nested style }
113+
114+link ∷ Style → Style
115+link style = css { "&:link": nested style }
116+
117+onlyChild ∷ Style → Style
118+onlyChild style = css { "&:only-child": nested style }
119+
120+onlyOfType ∷ Style → Style
121+onlyOfType style = css { "&:only-of-type": nested style }
122+
123+optional ∷ Style → Style
124+optional style = css { "&:optional": nested style }
125+
126+outOfRange ∷ Style → Style
127+outOfRange style = css { "&:out-of-range": nested style }
128+
129+readOnly ∷ Style → Style
130+readOnly style = css { "&:read-only": nested style }
131+
132+readWrite ∷ Style → Style
133+readWrite style = css { "&:read-write": nested style }
134+
135+required ∷ Style → Style
136+required style = css { "&:required": nested style }
137+
138+pseudoRight ∷ Style → Style
139+pseudoRight style = css { "&:right": nested style }
140+
141+root ∷ Style → Style
142+root style = css { "&:root": nested style }
143+
144+scope ∷ Style → Style
145+scope style = css { "&:scope": nested style }
146+
147+target ∷ Style → Style
148+target style = css { "&:target": nested style }
149+
150+valid ∷ Style → Style
151+valid style = css { "&:valid": nested style }
152+
153+visited ∷ Style → Style
154+visited style = css { "&:visited": nested style }
155+
156+nthOfType :: Int -> Style -> Style
157+nthOfType n style = css_
158+ (Object.singleton ("&:nth-of-type(" <> show n <> ")") (nested style))
159+
160+nthChild :: Int -> Style -> Style
161+nthChild n style = css_
162+ (Object.singleton ("&:nth-child(" <> show n <> ")") (nested style))
163+
164+-- nthChild n = ":nth-child()
165+-- not what = ":not()
166+-- ":nth-last-child()
167+-- ":nth-last-of-type()
168+-- ":lang()
169+-- ":dir()
src/Fahrtwind/Style/PseudoElements.pursnew file+25
@@ -0,0 +1,25 @@
1+module Fahrtwind.Style.PseudoElements where
2+
3+import Prelude
4+
5+import React.Basic.Emotion (Style, css, nested, str)
6+
7+beforeElement ∷ Style → Style
8+beforeElement style = css
9+ { "&::before": nested $ (css { content: str "''" }) <> style }
10+
11+afterElement ∷ Style → Style
12+afterElement style = css
13+ { "&::after": nested $ (css { content: str "''" }) <> style }
14+
15+content ∷ String → Style
16+content c = css { content: str $ "'" <> c <> "'" }
17+
18+firstLetter ∷ Style → Style
19+firstLetter style = css { "&::first-letter": nested style }
20+
21+firstLine ∷ Style → Style
22+firstLine style = css { "&::first-line": nested style }
23+
24+selection ∷ Style → Style
25+selection style = css { "&::selection": nested style }
src/Fahrtwind/Style/ScollBar.pursnew file+34
@@ -0,0 +1,34 @@
1+module Fahrtwind.Style.ScollBar where
2+
3+import Prelude
4+
5+import Color (Color, cssStringRGBA)
6+import React.Basic.Emotion (Style, css, nested, str)
7+import React.Basic.Emotion as E
8+
9+scrollBar
10+ :: { background :: Color
11+ , col :: Color
12+ , width :: Int
13+ , borderRadius :: Int
14+ , borderWidth :: Int
15+ }
16+ -> Style
17+scrollBar { background, col, width, borderRadius, borderWidth } = css
18+ { -- Firefox
19+ scrollbarWidth: E.auto
20+ , scrollbarColor:
21+ str $ cssStringRGBA col <> " " <> cssStringRGBA background
22+ -- Chrome, Edge, and Safari
23+ , "&::-webkit-scrollbar": nested $ css
24+ { width: str $ show width <> "px"
25+ }
26+ , "&::-webkit-scrollbar-track": nested $ css
27+ { background: str $ cssStringRGBA background
28+ }
29+ , "&::-webkit-scrollbar-thumb": nested $ css
30+ { background: str $ cssStringRGBA col
31+ , borderRadius: str $ show borderRadius <> "px"
32+ , border: str $ show borderWidth <> "px solid " <> cssStringRGBA background
33+ }
34+ }
src/Fahrtwind/Style/Size.pursnew file+67
@@ -0,0 +1,67 @@
1+module Fahrtwind.Style.Size where
2+
3+import Prelude
4+import React.Basic.Emotion (Style, StyleProperty, css, percent, px, vh, vw)
5+
6+widthAndHeight' ∷ StyleProperty -> Style
7+widthAndHeight' wh = css { width: wh, height: wh }
8+
9+widthAndHeight ∷ Int → Style
10+widthAndHeight wh = widthAndHeight' (wh # px)
11+
12+width' ∷ StyleProperty → Style
13+width' = css <<< { width: _ }
14+
15+width ∷ Int → Style
16+width = px >>> width'
17+
18+minWidth' ∷ StyleProperty → Style
19+minWidth' = css <<< { minWidth: _ }
20+
21+minWidth ∷ Int → Style
22+minWidth = px >>> minWidth'
23+
24+maxWidth' ∷ StyleProperty → Style
25+maxWidth' = css <<< { maxWidth: _ }
26+
27+maxWidth ∷ Int → Style
28+maxWidth = px >>> maxWidth'
29+
30+widthFull ∷ Style
31+widthFull = width' full
32+
33+widthScreen ∷ Style
34+widthScreen = width' screenWidth
35+
36+height ∷ Int → Style
37+height = px >>> height'
38+
39+height' ∷ StyleProperty → Style
40+height' = css <<< { height: _ }
41+
42+minHeight' ∷ StyleProperty → Style
43+minHeight' = css <<< { minHeight: _ }
44+
45+minHeight ∷ Int → Style
46+minHeight = px >>> minHeight'
47+
48+maxHeight' ∷ StyleProperty → Style
49+maxHeight' = css <<< { minHeight: _ }
50+
51+maxHeight ∷ Int → Style
52+maxHeight = px >>> maxHeight'
53+
54+heightFull ∷ Style
55+heightFull = height' full
56+
57+heightScreen ∷ Style
58+heightScreen = height' screenHeight
59+
60+full ∷ StyleProperty
61+full = percent 100.0
62+
63+screenWidth ∷ StyleProperty
64+screenWidth = vw 100.0
65+
66+screenHeight ∷ StyleProperty
67+screenHeight = vh 100.0
src/Fahrtwind/Style/Text.pursnew file+128
@@ -0,0 +1,128 @@
1+module Fahrtwind.Style.Text where
2+
3+import Prelude
4+
5+import React.Basic.Emotion (Style, StyleProperty, css, em, int, px, rem, str)
6+
7+textSized ∷ Number → Number → Style
8+textSized fs lh = css { fontSize: fs # rem, lineHeight: lh # rem }
9+
10+fontSize ∷ Int → Style
11+fontSize = fontSize' <<< px
12+
13+fontSize' ∷ StyleProperty → Style
14+fontSize' = css <<< { fontSize: _ }
15+
16+lineHeight' ∷ StyleProperty → Style
17+lineHeight' = css <<< { lineHeight: _ }
18+
19+lineHeight ∷ String → Style
20+lineHeight = str >>> lineHeight'
21+
22+textBase ∷ Style
23+textBase = textSized 1.0 1.5 <> tracking (-0.011)
24+
25+textDefault ∷ Style
26+textDefault = textBase
27+
28+textXs ∷ Style
29+textXs = textSized 0.75 1.0
30+
31+textSm ∷ Style
32+textSm = textSized 0.875 1.25 <> tracking (-0.006)
33+
34+textLg ∷ Style
35+textLg = textSized 1.125 1.75 <> tracking (-0.014)
36+
37+textXl ∷ Style
38+textXl = textSized 1.25 1.75 <> tracking (-0.017)
39+
40+text2xl ∷ Style
41+text2xl = textSized 1.5 2.0 <> tracking (-0.019)
42+
43+text3xl ∷ Style
44+text3xl = textSized 1.875 2.25 <> tracking (-0.021)
45+
46+text4xl ∷ Style
47+text4xl = textSized 2.25 2.5 <> tracking (-0.022)
48+
49+text5xl ∷ Style
50+text5xl = textSized 3.0 3.0 <> tracking (-0.022)
51+
52+text6xl ∷ Style
53+text6xl = textSized 3.75 3.75 <> tracking (-0.022)
54+
55+text7xl ∷ Style
56+text7xl = textSized 4.5 4.5 <> tracking (-0.022)
57+
58+text8xl ∷ Style
59+text8xl = textSized 6.0 6.0 <> tracking (-0.022)
60+
61+text9xl ∷ Style
62+text9xl = textSized 8.0 8.0 <> tracking (-0.022)
63+
64+fontThin ∷ Style
65+fontThin = css { fontWeight: int 100 }
66+
67+fontExtralight ∷ Style
68+fontExtralight = css { fontWeight: int 200 }
69+
70+fontLight ∷ Style
71+fontLight = css { fontWeight: int 300 }
72+
73+fontNormal ∷ Style
74+fontNormal = css { fontWeight: int 400 }
75+
76+fontSemiMedium ∷ Style
77+fontSemiMedium = css { fontWeight: int 450 }
78+
79+fontMedium ∷ Style
80+fontMedium = css { fontWeight: int 500 }
81+
82+fontSemibold ∷ Style
83+fontSemibold = css { fontWeight: int 600 }
84+
85+fontBold ∷ Style
86+fontBold = css { fontWeight: int 700 }
87+
88+fontExtrabold ∷ Style
89+fontExtrabold = css { fontWeight: int 800 }
90+
91+fontBlack ∷ Style
92+fontBlack = css { fontWeight: int 900 }
93+
94+tracking ∷ Number → Style
95+tracking t = css { letterSpacing: t # em }
96+
97+trackingTighter ∷ Style
98+trackingTighter = tracking (-0.05)
99+
100+trackingTight ∷ Style
101+trackingTight = tracking (-0.025)
102+
103+trackingNormal ∷ Style
104+trackingNormal = tracking 0.0
105+
106+trackingWide ∷ Style
107+trackingWide = tracking 0.025
108+
109+trackingWider ∷ Style
110+trackingWider = tracking 0.05
111+
112+trackingWidest ∷ Style
113+trackingWidest = tracking 0.1
114+
115+fontFamilyOrSans ∷ String → Style
116+fontFamilyOrSans ff = css { fontFamily: str $ ff <> ", sans-serif" }
117+
118+fontFamilyOrSerif ∷ String → Style
119+fontFamilyOrSerif ff = css { fontFamily: str $ ff <> ", serif" }
120+
121+fontFamilyOrMono ∷ String → Style
122+fontFamilyOrMono ff = css { fontFamily: str $ ff <> ", monospace" }
123+
124+underline ∷ Style
125+underline = css { textDecoration: str "underline" }
126+
127+textTransformUppercase ∷ Style
128+textTransformUppercase = css { textTransform: str "uppercase" }
src/Fahrtwind/Style/Transform.pursnew file+26
@@ -0,0 +1,26 @@
1+module Fahrtwind.Style.Transform where
2+
3+import Prelude
4+import Data.Array (intercalate)
5+import React.Basic.Emotion (Style, StyleProperty, css, str)
6+
7+transform' ∷ StyleProperty → Style
8+transform' t = css { transform: t }
9+
10+transform ∷ String → Style
11+transform = str >>> transform'
12+
13+transformMany ∷ Array String → Style
14+transformMany = transform <<< intercalate ","
15+
16+translate ∷ String → String → Style
17+translate x y = transform (mkTranslate x y)
18+
19+rotate ∷ Int → Style
20+rotate = transform <<< mkRotate <<< show
21+
22+mkTranslate ∷ String → String → String
23+mkTranslate x y = "translate(" <> x <> ", " <> y <> ")"
24+
25+mkRotate ∷ String → String
26+mkRotate x = "rotate(" <> x <> ")"
src/Fahrtwind/Style/Transition.pursnew file+22
@@ -0,0 +1,22 @@
1+module Fahrtwind.Style.Transition where
2+
3+import Prelude
4+
5+import Data.Array (intercalate)
6+import React.Basic.Emotion (Style, StyleProperty, css, str)
7+
8+transition ∷ String → Style
9+transition = transition' <<< str
10+
11+transition' ∷ StyleProperty → Style
12+transition' = css <<< { transition: _ }
13+
14+transitionRec ∷
15+ { property ∷ String
16+ , duration ∷ String
17+ , timingFunction ∷ String
18+ , delay ∷ String
19+ } →
20+ Style
21+transitionRec { property, duration, timingFunction, delay } =
22+ transition $ intercalate " " [ property, duration, timingFunction, delay ]
src/Fahrtwind/Style/UserSelect.pursnew file+10
@@ -0,0 +1,10 @@
1+module Fahrtwind.Style.UserSelect where
2+
3+import React.Basic.Emotion (Style)
4+import React.Basic.Emotion as E
5+
6+userSelectNone ∷ Style
7+userSelectNone = E.css { userSelect: E.none }
8+
9+userSelectText ∷ Style
10+userSelectText = E.css { userSelect: E.str "text" }
src/Fahrtwind/Style/Visibility.pursnew file+10
@@ -0,0 +1,10 @@
1+module Fahrtwind.Style.Visibility where
2+
3+import React.Basic.Emotion (Style)
4+import React.Basic.Emotion as E
5+
6+visible ∷ Style
7+visible = E.css { visibility: E.visible }
8+
9+invisible ∷ Style
10+invisible = E.css { visibility: E.hidden }