git.iko.soy/rowtype-yoga/purescript-fahrtwind
on main help sign in
bower.jsonnew file+29
since splitsnapshots
unifiedsplit
@@ -0,0 +1,29 @@
1+{
2+ "name": "purescript-fahrtwind",
3+ "license": [
4+ "MIT"
5+ ],
6+ "repository": {
7+ "type": "git",
8+ "url": "https://github.com/rowtype-yoga/purescript-fahrtwind.git"
9+ },
10+ "ignore": [
11+ "**/.*",
12+ "node_modules",
13+ "bower_components",
14+ "output"
15+ ],
16+ "dependencies": {
17+ "purescript-arrays": "^v7.1.0",
18+ "purescript-colors": "^v7.0.1",
19+ "purescript-foreign-object": "^v4.1.0",
20+ "purescript-integers": "^v6.0.0",
21+ "purescript-prelude": "^v6.0.1",
22+ "purescript-react-basic": "^v17.0.0",
23+ "purescript-react-basic-dom": "https://github.com/lumihq/purescript-react-basic-dom.git#v6.0.0",
24+ "purescript-react-basic-emotion": "^v7.1.0",
25+ "purescript-tuples": "^v7.0.0",
26+ "purescript-typelevel-prelude": "^v7.0.0",
27+ "purescript-unsafe-coerce": "^v6.0.0"
28+ }
29+}
packages.dhall+2−676
@@ -1,679 +1,5 @@
1let upstream =
1let upstream =
2− https://github.com/purescript/package-sets/releases/download/psc-0.15.2-20220531/packages.dhall
2+ https://github.com/purescript/package-sets/releases/download/psc-0.15.4-20221103/packages.dhall
3− sha256:278d3608439187e51136251ebf12fabda62d41ceb4bec9769312a08b56f853e3
3+ sha256:26d3b3b4052e533534b9a888052a46b594abdd615cb56e58fde188b110480857
4
4
5in upstream
5in 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.dhall+2
@@ -11,6 +11,8 @@ When creating a new Spago project, you can use
11to generate this file without the comments in this block.
11to generate this file without the comments in this block.
12-}
12-}
13{ name = "fahrtwind"
13{ name = "fahrtwind"
14+, repository = "https://github.com/rowtype-yoga/purescript-fahrtwind.git"
15+, license = "MIT"
14, dependencies =
16, dependencies =
15 [ "arrays"
17 [ "arrays"
16 , "colors"
18 , "colors"
src/Fahrtwind.purs+1−1
@@ -8,4 +8,4 @@ module Fahrtwind
8import Fahrtwind.Animation (fadeInAndOutAnimationName, headShakeAnimationName, infiniteSpinAnimation, scaleAnimationName, spinAnimationName)
8import Fahrtwind.Animation (fadeInAndOutAnimationName, headShakeAnimationName, infiniteSpinAnimation, scaleAnimationName, spinAnimationName)
9import Fahrtwind.Layer (base, basePopper, level3, level3Popper, level4, level4Popper, level5, level5Popper, notification, notificationPopper, overlay, overlayPopper, topmost, zIndex)
9import Fahrtwind.Layer (base, basePopper, level3, level3Popper, level4, level4Popper, level5, level5Popper, notification, notificationPopper, overlay, overlayPopper, topmost, zIndex)
10import Fahrtwind.Style.PseudoElements (afterElement, beforeElement, content, firstLetter, firstLine, selection)
10import Fahrtwind.Style.PseudoElements (afterElement, beforeElement, content, firstLetter, firstLine, selection)
11−import Fahrtwind.Style (BlendMode(..), TailwindColor, acceptClicks, active, afterElement, alignSelfCenter, alignSelfEnd, alignSelfStart, amber, attributeValueStyle, background, background', backgroundBlendMode, backgroundImage, backgroundImage', backgroundNoRepeat, backgroundPosition, backgroundRepeat, backgroundRepeatX, backgroundRepeatY, backgroundSize, backgroundSize', beforeElement, black, blendModeToStyleProperty, block, blue, blueGray, blurredBackground, blurredBackground', border, borderBottom, borderCol, borderCol', borderLeft, borderNone, borderRight, borderSolid, borderTop, bottom, bottom', boxSizingBorderBox, boxSizingContentBox, checked, content, coolGray, cursorAuto, cursorDefault, cursorHelp, cursorMove, cursorNotAllowed, cursorPointer, cursorText, cursorWait, cyan, default, disabled, displayGrid, displayNone, divideCol, divideX, divideXReverse, divideY, divideYReverse, emerald, empty, enabled, evenChild, first, firstChild, firstLetter, firstLine, firstOfType, flex, flexCol, flexGrow, flexNoWrap, flexRow, flexShrink, flexWrap, flexWrapReverse, focus, focusWithin, fontBlack, fontBold, fontExtrabold, fontExtralight, fontFamilyOrMono, fontFamilyOrSans, fontFamilyOrSerif, fontLight, fontMedium, fontNormal, fontSemiMedium, fontSemibold, fontSize, fontSize', fontThin, fuchsia, full, fullscreen, gap, globalStyles, gray, green, height, height', heightFull, heightScreen, hover, hue, ignoreClicks, inRange, indeterminate, indigo, inlineBlock, inlineFlex, inlineGrid, invalid, invisible, isolate, isolationAuto, itemsAround, itemsBetween, itemsCenter, itemsEnd, itemsEvenly, itemsStart, justifyAround, justifyBetween, justifyCenter, justifyEnd, justifyEvenly, justifySelfCenter, justifySelfEnd, justifySelfStart, justifyStart, lastChild, lastOfType, left, left', lightBlue, lightness, lime, lineHeight, lineHeight', linearGradient, linearGradientStops, linearGradientStopsString, linearGradientString, link, m', mB, mB', mL, mL', mR, mR', mT, mT', mX, mX', mXAuto, mXY, mY, mY', maxHeight, maxHeight', maxWidth, maxWidth', minHeight, minHeight', minWidth, minWidth', mixBlendMode, mkRotate, mkShadow, mkTranslate, nest, nthChild, nthOfType, oddChild, onlyChild, onlyOfType, opacity, optional, orange, outOfRange, outlineNone, overflowHidden, overflowScroll, overflowVisible, overflowXHidden, overflowXScroll, overflowYHidden, overflowYScroll, p', pB, pB', pL, pL', pR, pR', pT, pT', pX, pX', pXY, pY, pY', pink, placeholder, pointerEventsAuto, pointerEventsNone, positionAbsolute, positionFixed, positionRelative, positionStatic, positionSticky, pseudoLeft, pseudoRight, purple, readOnly, readWrite, red, required, right, right', root, rose, rotate, rounded, rounded2xl, rounded3xl, roundedDefault, roundedFull, roundedLg, roundedMd, roundedNone, roundedSm, roundedXl, saturation, scope, screen2xl, screenHeight, screenLg, screenMd, screenSm, screenWidth, screenXl, selection, shadow, shadow', shadowDefault, shadowDefaultCol, shadowLg, shadowLgCol, shadowMd, shadowMdCol, shadowSm, shadowSmCol, shadowXl, shadowXlCol, shadowXxl, shadowXxlCol, shadows, svgBackgroundImage, target, teal, templateCols, templateRows, text2xl, text3xl, text4xl, text5xl, text6xl, text7xl, text8xl, text9xl, textBase, textCenter, textCol, textCol', textDefault, textJustify, textLeft, textLg, textOverflowEllipsis, textRight, textSized, textSm, textTransformUppercase, textXl, textXs, top, top', tracking, trackingNormal, trackingTight, trackingTighter, trackingWide, trackingWider, trackingWidest, transform, transform', transformMany, transition, transition', transitionRec, translate, trueGray, underline, userSelectNone, userSelectText, valid, variables, violet, visible, visited, warmGray, white, width, width', widthAndHeight, widthAndHeight', widthFull, widthScreen, withAlpha, withHue, withLightness, withSaturation, yellow)
11+import Fahrtwind.Style
src/Fahrtwind/Animation.purs+1−1
@@ -48,4 +48,4 @@ headShakeAnimationName =
48 , "31.5%": E.css { transform: E.str " translateX(-3px) rotateY(-5deg)" }
48 , "31.5%": E.css { transform: E.str " translateX(-3px) rotateY(-5deg)" }
49 , "43.5%": E.css { transform: E.str " translateX(2px) rotateY(3deg)" }
49 , "43.5%": E.css { transform: E.str " translateX(2px) rotateY(3deg)" }
50 , "50%": E.css { transform: E.str "translateX(0)" }
50 , "50%": E.css { transform: E.str "translateX(0)" }
51− }
51+ }
src/Fahrtwind/Style.purs+4−4
@@ -36,11 +36,11 @@ module Fahrtwind.Style
36
36
37import Fahrtwind.Style.BlendMode (backgroundBlendMode, mixBlendMode)
37import Fahrtwind.Style.BlendMode (backgroundBlendMode, mixBlendMode)
38import Fahrtwind.Style.BlendMode.Types (BlendMode(..), blendModeToStyleProperty)
38import 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)
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, borderGradient)
40import 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')
40import 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')
41import Fahrtwind.Style.BoxShadow (mkShadow, shadow, shadow', shadowDefault, shadowDefaultCol, shadowLg, shadowLgCol, shadowMd, shadowMdCol, shadowSm, shadowSmCol, shadowXl, shadowXlCol, shadowXxl, shadowXxlCol, shadows)
41import Fahrtwind.Style.BoxShadow (mkShadow, shadow, shadow', shadowDefault, shadowDefaultCol, shadowLg, shadowLgCol, shadowMd, shadowMdCol, shadowSm, shadowSmCol, shadowXl, shadowXlCol, shadowXxl, shadowXxlCol, shadows)
42import Fahrtwind.Style.Breakpoint (screen2xl, screenLg, screenMd, screenSm, screenXl)
42import 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)
43+import Fahrtwind.Style.Color.Background (background, background', backgroundImage, backgroundImage', backgroundNoRepeat, backgroundPosition, backgroundRepeat, backgroundRepeatX, backgroundRepeatY, backgroundSize, backgroundSize', blurredBackground, blurredBackground', linearGradient, linearGradient', linearGradientStops, linearGradientStopsString, linearGradientString, linearGradientString', svgBackgroundImage)
44import 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)
44import 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)
45import Fahrtwind.Style.Color.Text (textCenter, textCol, textCol', textJustify, textLeft, textRight)
45import Fahrtwind.Style.Color.Text (textCenter, textCol, textCol', textJustify, textLeft, textRight)
46import Fahrtwind.Style.Color.Util (hue, lightness, saturation, withAlpha, withHue, withLightness, withSaturation)
46import Fahrtwind.Style.Color.Util (hue, lightness, saturation, withAlpha, withHue, withLightness, withSaturation)
@@ -48,7 +48,7 @@ import Fahrtwind.Style.Cursor (cursorAuto, cursorDefault, cursorHelp, cursorMove
48import Fahrtwind.Style.Display (block, displayNone, flex, inlineBlock, inlineFlex, inlineGrid)
48import Fahrtwind.Style.Display (block, displayNone, flex, inlineBlock, inlineFlex, inlineGrid)
49import 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)
49import 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)
50import Fahrtwind.Style.Display.Grid (displayGrid, templateCols, templateRows)
50import Fahrtwind.Style.Display.Grid (displayGrid, templateCols, templateRows)
51−import Fahrtwind.Style.Divide (divideCol, divideX, divideXReverse, divideY, divideYReverse)
51+import Fahrtwind.Style.Divide (divideCol, divideCol', divideX, divideXReverse, divideY, divideYReverse)
52import Fahrtwind.Style.Global (globalStyles, nest, variables)
52import Fahrtwind.Style.Global (globalStyles, nest, variables)
53import Fahrtwind.Style.Input (outlineNone, placeholder)
53import Fahrtwind.Style.Input (outlineNone, placeholder)
54import Fahrtwind.Style.Inset (bottom, bottom', left, left', right, right', top, top')
54import Fahrtwind.Style.Inset (bottom, bottom', left, left', right, right', top, top')
@@ -61,7 +61,7 @@ import Fahrtwind.Style.Position (positionAbsolute, positionFixed, positionRelati
61import 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)
61import 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)
62import Fahrtwind.Style.PseudoElements (afterElement, beforeElement, content, firstLetter, firstLine, selection)
62import Fahrtwind.Style.PseudoElements (afterElement, beforeElement, content, firstLetter, firstLine, selection)
63import Fahrtwind.Style.Size (full, height, height', heightFull, heightScreen, maxHeight, maxHeight', maxWidth, maxWidth', minHeight, minHeight', minWidth, minWidth', screenHeight, screenWidth, width, width', widthAndHeight, widthAndHeight', widthFull, widthScreen)
63import 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)
64+import Fahrtwind.Style.Text (fontBlack, fontBold, fontExtrabold, fontExtralight, fontFamilyOrMono, fontFamilyOrSans, fontFamilyOrSerif, fontLight, fontMedium, fontNormal, fontSemiMedium, fontSemibold, fontSize, fontSize', fontThin, italic, lineHeight, lineHeight', noTextDecoration, text2xl, text3xl, text4xl, text5xl, text6xl, text7xl, text8xl, text9xl, textBase, textDefault, textLg, textLinearGradient, textSized, textSm, textTransformUppercase, textXl, textXs, tracking, trackingNormal, trackingTight, trackingTighter, trackingWide, trackingWider, trackingWidest, underline)
65import Fahrtwind.Style.Transform (mkRotate, mkTranslate, rotate, transform, transform', transformMany, translate)
65import Fahrtwind.Style.Transform (mkRotate, mkTranslate, rotate, transform, transform', transformMany, translate)
66import Fahrtwind.Style.Transition (transition, transition', transitionRec)
66import Fahrtwind.Style.Transition (transition, transition', transitionRec)
67import Fahrtwind.Style.UserSelect (userSelectNone, userSelectText)
67import Fahrtwind.Style.UserSelect (userSelectNone, userSelectText)
src/Fahrtwind/Style/Border.purs+10
@@ -1,6 +1,7 @@
1module Fahrtwind.Style.Border where
1module Fahrtwind.Style.Border where
2
2
3import Prelude
3import Prelude
4+
4import Color (Color)
5import Color (Color)
5import React.Basic.Emotion (Style, StyleProperty, borderBox, color, contentBox, css, px, rem, str)
6import React.Basic.Emotion (Style, StyleProperty, borderBox, color, contentBox, css, px, rem, str)
6
7
@@ -66,3 +67,12 @@ boxSizingBorderBox = css { boxSizing: borderBox }
66
67
67boxSizingContentBox ∷ Style
68boxSizingContentBox ∷ Style
68boxSizingContentBox = css { boxSizing: contentBox }
69boxSizingContentBox = css { boxSizing: contentBox }
70+
71+borderGradient :: { backgroundGradient :: String, borderGradient :: String } -> Style
72+borderGradient args =
73+ css
74+ { background: str $
75+ args.backgroundGradient <> " padding-box, "
76+ <> (args.borderGradient <> " border-box")
77+ , borderColor: str "transparent"
78+ }
src/Fahrtwind/Style/Color/Background.purs+32−10
@@ -24,10 +24,22 @@ backgroundImage' ∷ StyleProperty → Style
24backgroundImage' = css <<< { backgroundImage: _ }
24backgroundImage' = css <<< { backgroundImage: _ }
25
25
26svgBackgroundImage ∷ JSX → Style
26svgBackgroundImage ∷ JSX → Style
27−svgBackgroundImage jsx = backgroundImage
27+svgBackgroundImage = backgroundImage <<< embeddedJSX
28+
29+maskImage :: String -> Style
30+maskImage = maskImage' <<< str
31+
32+maskImage' :: StyleProperty -> Style
33+maskImage' = css <<< { maskImage: _ }
34+
35+svgMaskImage ∷ JSX → Style
36+svgMaskImage = maskImage <<< embeddedJSX
37+
38+embeddedJSX ∷ JSX → String
39+embeddedJSX jsx =
28− $ "url('data:image/svg+xml;utf8,"
40+ "url('data:image/svg+xml;utf8,"
29− <> renderToStaticMarkup jsx
41+ <> renderToStaticMarkup jsx
30− <> "')"
42+ <> "')"
31
43
32backgroundPosition ∷ String → Style
44backgroundPosition ∷ String → Style
33backgroundPosition bp = css { backgroundPosition: str bp }
45backgroundPosition bp = css { backgroundPosition: str bp }
@@ -50,6 +62,16 @@ backgroundSize' = css <<< { backgroundSize: _ }
50backgroundSize ∷ String → Style
62backgroundSize ∷ String → Style
51backgroundSize = backgroundSize' <<< str
63backgroundSize = backgroundSize' <<< str
52
64
65+linearGradient' :: Int -> Array String -> Style
66+linearGradient' deg colours = css { background: str (linearGradientString' deg colours) }
67+
68+linearGradientString' :: Int -> Array String -> String
69+linearGradientString' deg colours = bg
70+ where
71+ bg = "linear-gradient(" <> show deg <> "deg, "
72+ <> intercalate "," (colours)
73+ <> ")"
74+
53linearGradient ∷ Int → Array Color → Style
75linearGradient ∷ Int → Array Color → Style
54linearGradient deg colors = css { background: str bg }
76linearGradient deg colors = css { background: str bg }
55 where
77 where
@@ -86,20 +108,20 @@ linearGradientString deg colors = bg
86blurredBackground ∷ Color → Int → Style
108blurredBackground ∷ Color → Int → Style
87blurredBackground col blurRadius =
109blurredBackground col blurRadius =
88 blurredBackground'
110 blurredBackground'
89− { blurredCol: col # withAlpha 0.3
111+ { blurredCol: col # withAlpha 0.3 # cssStringRGBA
90− , fallbackCol: col # withAlpha 0.8
112+ , fallbackCol: col # withAlpha 0.8 # cssStringRGBA
91 , blurRadius
113 , blurRadius
92 }
114 }
93
115
94−blurredBackground' ∷
116+blurredBackground'
95− { blurredCol ∷ Color, fallbackCol ∷ Color, blurRadius ∷ Int } → Style
117+ ∷ { blurredCol ∷ String, fallbackCol ∷ String, blurRadius ∷ Int } → Style
96blurredBackground' { blurredCol, fallbackCol, blurRadius } =
118blurredBackground' { blurredCol, fallbackCol, blurRadius } =
97 css
119 css
98− { background: str $ cssStringRGBA fallbackCol
120+ { background: str $ fallbackCol
99 , "@supports (backdrop-filter: blur(12px)) or (-webkit-backdrop-filter: blur(12px))":
121 , "@supports (backdrop-filter: blur(12px)) or (-webkit-backdrop-filter: blur(12px))":
100 nested
122 nested
101 $ css
123 $ css
102− { background: str $ cssStringRGBA blurredCol
124+ { background: str $ blurredCol
103 , backdropFilter: str $ "blur(" <> show blurRadius <> "px)"
125 , backdropFilter: str $ "blur(" <> show blurRadius <> "px)"
104 }
126 }
105 }
127 }
src/Fahrtwind/Style/Divide.purs+6−5
@@ -3,12 +3,13 @@ module Fahrtwind.Style.Divide
3 , divideXReverse
3 , divideXReverse
4 , divideY
4 , divideY
5 , divideYReverse
5 , divideYReverse
6+ , divideCol'
6 , divideCol
7 , divideCol
7 ) where
8 ) where
8
9
9import Prelude
10import Prelude
10import Color (Color)
11import Color (Color)
11−import React.Basic.Emotion (Style, color, css, nested, px, solid)
12+import React.Basic.Emotion (Style, StyleProperty, color, css, nested, px, solid)
12
13
13nestChildren ∷ Style → Style
14nestChildren ∷ Style → Style
14nestChildren inner = css { "& > * + *": nested inner }
15nestChildren inner = css { "& > * + *": nested inner }
@@ -47,8 +48,8 @@ divideY pixels =
47divideYReverse ∷ Int → Style
48divideYReverse ∷ Int → Style
48divideYReverse = negate >>> divideY
49divideYReverse = negate >>> divideY
49
50
51+divideCol' ∷ StyleProperty → Style
52+divideCol' borderColor = nestChildren $ css { borderColor }
53+
50divideCol ∷ Color → Style
54divideCol ∷ Color → Style
51−divideCol col =
55+divideCol = divideCol' <<< color
52− nestChildren
53− $ css
54− { borderColor: color col }
src/Fahrtwind/Style/Global.purs+1−1
@@ -2,7 +2,7 @@ module Fahrtwind.Style.Global where
2
2
3import Prelude
3import Prelude
4
4
5−import Color (cssStringRGBA, darken)
5+import Color (darken)
6import Data.Array (intercalate)
6import Data.Array (intercalate)
7import Fahrtwind.Style.Color.Tailwind (gray, violet, white)
7import Fahrtwind.Style.Color.Tailwind (gray, violet, white)
8import Prim.RowList (class RowToList)
8import Prim.RowList (class RowToList)
src/Fahrtwind/Style/ScollBar.pursdeleted−34
@@ -1,34 +0,0 @@
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/ScrollBar.pursnew file+59
@@ -0,0 +1,59 @@
1+module Fahrtwind.Style.ScrollBar where
2+
3+import Prelude
4+
5+import Color (Color, cssStringRGBA)
6+import React.Basic.Emotion (Style, StyleProperty, css, nested, str)
7+import React.Basic.Emotion as E
8+import Unsafe.Coerce (unsafeCoerce)
9+
10+scrollBar ∷
11+ { background ∷ Color
12+ , col ∷ Color
13+ , width ∷ Int
14+ , borderRadius ∷ Int
15+ , borderWidth ∷ Int
16+ } →
17+ Style
18+scrollBar { background, col, width, borderRadius, borderWidth } = css
19+ { -- Firefox
20+ scrollbarWidth: E.auto
21+ , scrollbarColor:
22+ str $ cssStringRGBA col <> " " <> cssStringRGBA background
23+ -- Chrome, Edge, and Safari
24+ , "&::-webkit-scrollbar": nested $ css
25+ { width: str $ show width <> "px"
26+ }
27+ , "&::-webkit-scrollbar-track": nested $ css
28+ { background: str $ cssStringRGBA background
29+ }
30+ , "&::-webkit-scrollbar-thumb": nested $ css
31+ { background: str $ cssStringRGBA col
32+ , borderRadius: str $ show borderRadius <> "px"
33+ , border: str $ show borderWidth <> "px solid " <> cssStringRGBA
34+ background
35+ }
36+ }
37+
38+scrollBar' ∷
39+ { background ∷ StyleProperty
40+ , col ∷ StyleProperty
41+ , width ∷ StyleProperty
42+ , borderRadius ∷ StyleProperty
43+ , borderWidth ∷ StyleProperty
44+ } →
45+ Style
46+scrollBar' { background, col, width, borderRadius, borderWidth } = css
47+ { -- Firefox
48+ scrollbarWidth: E.auto
49+ , scrollbarColor: str (unsafeCoerce col <> " " <> unsafeCoerce background)
50+ -- Chrome, Edge, and Safari
51+ , "&::-webkit-scrollbar": nested $ css { width }
52+ , "&::-webkit-scrollbar-track": nested $ css { background }
53+ , "&::-webkit-scrollbar-thumb": nested $ css
54+ { background: col
55+ , borderRadius
56+ , border: str
57+ (unsafeCoerce borderWidth <> " solid " <> unsafeCoerce background)
58+ }
59+ }
src/Fahrtwind/Style/Size.purs+1−1
@@ -46,7 +46,7 @@ minHeight ∷ Int → Style
46minHeight = px >>> minHeight'
46minHeight = px >>> minHeight'
47
47
48maxHeight' ∷ StyleProperty → Style
48maxHeight' ∷ StyleProperty → Style
49−maxHeight' = css <<< { minHeight: _ }
49+maxHeight' = css <<< { maxHeight: _ }
50
50
51maxHeight ∷ Int → Style
51maxHeight ∷ Int → Style
52maxHeight = px >>> maxHeight'
52maxHeight = px >>> maxHeight'
src/Fahrtwind/Style/Text.purs+21−2
@@ -2,7 +2,8 @@ module Fahrtwind.Style.Text where
2
2
3import Prelude
3import Prelude
4
4
5+import Data.Array (intercalate)
5−import React.Basic.Emotion (Style, StyleProperty, css, em, int, px, rem, str)
6+import React.Basic.Emotion (Style, StyleProperty, css, em, int, none, px, rem, str)
6
7
7textSized ∷ Number → Number → Style
8textSized ∷ Number → Number → Style
8textSized fs lh = css { fontSize: fs # rem, lineHeight: lh # rem }
9textSized fs lh = css { fontSize: fs # rem, lineHeight: lh # rem }
@@ -124,5 +125,23 @@ fontFamilyOrMono ff = css { fontFamily: str $ ff <> ", monospace" }
124underline ∷ Style
125underline ∷ Style
125underline = css { textDecoration: str "underline" }
126underline = css { textDecoration: str "underline" }
126
127
128+noTextDecoration ∷ Style
129+noTextDecoration = css { textDecoration: none }
130+
131+italic ∷ Style
132+italic = css { fontStyle: str "italic" }
133+
134+textLinearGradient :: Int -> Array String -> Style
135+textLinearGradient deg colours =
136+ css
137+ { background: str bg
138+ , backgroundClip: str "text"
139+ , textFillColor: str "transparent"
140+ }
141+ where
142+ bg = "linear-gradient(" <> show deg <> "deg, "
143+ <> intercalate "," (colours)
144+ <> ")"
145+
127textTransformUppercase ∷ Style
146textTransformUppercase ∷ Style
128−textTransformUppercase = css { textTransform: str "uppercase" }
147+textTransformUppercase = css { textTransform: str "uppercase" }