aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/lux/data/format/css/value.lux
diff options
context:
space:
mode:
Diffstat (limited to 'stdlib/source/lux/data/format/css/value.lux')
-rw-r--r--stdlib/source/lux/data/format/css/value.lux449
1 files changed, 420 insertions, 29 deletions
diff --git a/stdlib/source/lux/data/format/css/value.lux b/stdlib/source/lux/data/format/css/value.lux
index 9350b6b98..0d1c773be 100644
--- a/stdlib/source/lux/data/format/css/value.lux
+++ b/stdlib/source/lux/data/format/css/value.lux
@@ -1,7 +1,7 @@
(.module:
- [lux (#- All Cursor and false true)
+ [lux (#- All Cursor and static false true)
[data
- ["." color (#+ Color Pigment)]
+ ["." color]
["." product]
["." maybe]
["." number]
@@ -113,8 +113,8 @@
["thick"]]]
[Slice
- []
- [["fill"]]]
+ [[full-slice "fill"]]
+ []]
[Alignment
[[auto-alignment "auto"]]
@@ -126,16 +126,16 @@
["space-between"]
["space-around"]]]
+ [Animation
+ []
+ []]
+
[Animation-Direction
[[normal-direction "normal"]]
[["reverse"]
["alternate"]
["alternate-reverse"]]]
- [Animation
- []
- []]
-
[Animation-Fill
[[fill-forwards "forwards"]
[fill-backwards "backwards"]
@@ -175,14 +175,15 @@
["step-end"]]]
[Visibility
- [[invisible "hidden"]]
+ [[invisible "hidden"]
+ [collapse-visibility "collapse"]]
[["visible"]]]
[Attachment
- []
- [["scroll"]
- ["fixed"]
- ["local"]]]
+ [[scroll-attachment "scroll"]
+ [fixed-attachment "fixed"]
+ [local-attachment "local"]]
+ []]
[Blend
[[normal-blend "normal"]]
@@ -192,6 +193,10 @@
["darken"]
["lighten"]
["color-dodge"]
+ ["color-burn"]
+ ["difference"]
+ ["exclusion"]
+ ["hue"]
["saturation"]
["color"]
["luminosity"]]]
@@ -227,10 +232,12 @@
[center-bottom "center bottom"]]
[]]
- [Area
- []
- [["cover"]
- ["contain"]]]
+ [Fit
+ [[no-fit "none"]]
+ [["fill"]
+ ["cover"]
+ ["contain"]
+ ["scale-down"]]]
[Border
[]
@@ -249,7 +256,7 @@
[["separate"]
["collapse"]]]
- [Break
+ [Box-Decoration-Break
[]
[["slice"]
["clone"]]]
@@ -332,7 +339,8 @@
[]]
[Display
- [[grid-display "grid"]]
+ [[grid-display "grid"]
+ [no-display "none"]]
[["inline"]
["block"]
["contents"]
@@ -351,8 +359,7 @@
["table-row-group"]
["table-cell"]
["table-column"]
- ["table-row"]
- ["none"]]]
+ ["table-row"]]]
[Empty
[]
@@ -500,6 +507,270 @@
[[no-inline-overflow "none"]
[scroll-inline-overflow "scroll"]]
[]]
+
+ [Display-Mode
+ []
+ [["fullscreen"]
+ ["standalone"]
+ ["minimal-ui"]
+ ["browser"]]]
+
+ [Color-Gamut
+ []
+ [["srgb"]
+ ["p3"]
+ ["rec2020"]]]
+
+ [Inverted-Colors
+ [[no-inverted-colors "none"]
+ [inverted-colors "inverted"]]
+ []]
+
+ [Pointer
+ [[no-pointer "none"]
+ [coarse-pointer "coarse"]
+ [fine-pointer "fine"]]
+ []]
+
+ [Hover
+ [[no-hover "none"]]
+ [["hover"]]]
+
+ [Light
+ [[dim-light "dim"]
+ [normal-light "normal"]
+ [washed-light "washed"]]
+ []]
+
+ [Ratio
+ []
+ []]
+
+ [Scripting
+ [[no-scripting "none"]
+ [initial-scripting-only "initial-only"]
+ [scripting-enabled "enabled"]]
+ []]
+
+ [Motion
+ [[no-motion-preference "no-preference"]
+ [reduced-motion "reduce"]]
+ []]
+
+ [Color-Scheme
+ [[no-color-scheme-preference "no-preference"]
+ [light-color-scheme "light"]
+ [dark-color-scheme "dark"]]
+ []]
+
+ [Isolation
+ [[auto-isolation "auto"]]
+ [["isolate"]]]
+
+ [List-Style-Position
+ []
+ [["inside"]
+ ["outside"]]]
+
+ [List-Style-Type
+ [[no-list-style "none"]]
+ [["disc"]
+ ["armenian"]
+ ["circle"]
+ ["cjk-ideographic"]
+ ["decimal"]
+ ["decimal-leading-zero"]
+ ["georgian"]
+ ["hebrew"]
+ ["hiragana"]
+ ["hiragana-iroha"]
+ ["katakana"]
+ ["katakana-iroha"]
+ ["lower-alpha"]
+ ["lower-greek"]
+ ["lower-latin"]
+ ["lower-roman"]
+ ["square"]
+ ["upper-alpha"]
+ ["upper-greek"]
+ ["upper-latin"]
+ ["upper-roman"]]]
+
+ [Color
+ []
+ []]
+
+ [Overflow
+ [[visible-overflow "visible"]
+ [hidden-overflow "hidden"]
+ [scroll-overflow "scroll"]
+ [auto-overflow "auto"]]
+ []]
+
+ [Page-Break
+ [[auto-page-break "auto"]
+ [always-page-break "always"]
+ [avoid-page-break "avoid"]
+ [left-page-break "left"]
+ [right-page-break "right"]]
+ []]
+
+ [Pointer-Events
+ [[auto-pointer-events "auto"]
+ [no-pointer-events "none"]]
+ []]
+
+ [Position
+ []
+ [["static"]
+ ["absolute"]
+ ["fixed"]
+ ["relative"]
+ ["sticky"]]]
+
+ [Quotes
+ [[no-quotes "none"]]
+ []]
+
+ [Resize
+ [[resize-none "none"]
+ [resize-both "both"]
+ [resize-horizontal "horizontal"]
+ [resize-vertical "vertical"]]
+ []]
+
+ [Scroll-Behavior
+ [[auto-scroll-behavior "auto"]
+ [smooth-scroll-behavior "smooth"]]
+ []]
+
+ [Table-Layout
+ [[auto-table-layout "auto"]
+ [fixed-table-layout "fixed"]]
+ []]
+
+ [Text-Align
+ [[left-text-align "left"]
+ [right-text-align "right"]
+ [center-text-align "center"]
+ [justify-text-align "justify"]]
+ []]
+
+ [Text-Align-Last
+ [[auto-text-align-last "auto"]
+ [left-text-align-last "left"]
+ [right-text-align-last "right"]
+ [center-text-align-last "center"]
+ [justify-text-align-last "justify"]
+ [start-text-align-last "start"]
+ [end-text-align-last "end"]]
+ []]
+
+ [Text-Decoration-Line
+ [[no-text-decoration-line "none"]
+ [underline-text-decoration-line "underline"]
+ [overline-text-decoration-line "overline"]
+ [line-through-text-decoration-line "line-through"]]
+ []]
+
+ [Text-Decoration-Style
+ [[solid-text-decoration-style "solid"]
+ [double-text-decoration-style "double"]
+ [dotted-text-decoration-style "dotted"]
+ [dashed-text-decoration-style "dashed"]
+ [wavy-text-decoration-style "wavy"]]
+ []]
+
+ [Text-Justification
+ [[auto-text-justification "auto"]
+ [inter-word-text-justification "inter-word"]
+ [inter-character-text-justification "inter-character"]
+ [no-text-justification "none"]]
+ []]
+
+ [Text-Overflow
+ [[clip-text-overflow "clip"]
+ [ellipsis-text-overflow "ellipsis"]]
+ []]
+
+ [Text-Transform
+ [[no-text-transform "none"]]
+ [["capitalize"]
+ ["uppercase"]
+ ["lowercase"]]]
+
+ [Transform
+ [[no-transform "none"]]
+ []]
+
+ [Transform-Origin
+ []
+ []]
+
+ [Transform-Style
+ []
+ [["flat"]
+ ["preserve-3d"]]]
+
+ [Transition
+ [[transition-none "none"]
+ [transition-all "all"]]
+ []]
+
+ [Bidi
+ [[bidi-normal "normal"]
+ [bidi-embed "embed"]
+ [bidi-isolate "isolate"]
+ [bidi-isolate-override "isolate-override"]
+ [bidi-plaintext "plaintext"]]
+ [["bidi-override"]]]
+
+ [User-Select
+ [[user-select-auto "auto"]
+ [user-select-none "none"]
+ [user-select-text "text"]
+ [user-select-all "all"]]
+ []]
+
+ [Vertical-Align
+ [[vertical-align-baseline "baseline"]
+ [vertical-align-sub "sub"]
+ [vertical-align-super "super"]
+ [vertical-align-top "top"]
+ [vertical-align-text-top "text-top"]
+ [vertical-align-middle "middle"]
+ [vertical-align-bottom "bottom"]
+ [vertical-align-text-bottom "text-bottom"]]
+ []]
+
+ [White-Space
+ [[normal-white-space "normal"]
+ [no-wrap-white-space "nowrap"]
+ [pre-white-space "pre"]
+ [pre-line-white-space "pre-line"]
+ [pre-wrap-white-space "pre-wrap"]]
+ []]
+
+ [Word-Break
+ [[normal-word-break "normal"]]
+ [["break-all"]
+ ["keep-all"]
+ ["break-word"]]]
+
+ [Word-Wrap
+ [[normal-word-wrap "normal"]
+ [break-word-word-wrap "break-word"]]
+ []]
+
+ [Writing-Mode
+ [[top-to-bottom-writing-mode "horizontal-tb"]
+ [left-to-right-writing-mode "vertical-rl"]
+ [right-to-left-writing-mode "vertical-lr"]]
+ []]
+
+ [Z-Index
+ []
+ []]
)
(def: value-separator ",")
@@ -544,14 +815,14 @@
(|>> :abstraction))
(def: #export (rgb color)
- (-> Color (Value Color))
+ (-> color.Color (Value Color))
(let [[red green blue] (color.to-rgb color)]
(..apply "rgb" (list (%n red)
(%n green)
(%n blue)))))
(def: #export (rgba pigment)
- (-> Pigment (Value Color))
+ (-> color.Pigment (Value Color))
(let [(^slots [#color.color #color.alpha]) pigment
[red green blue] (color.to-rgb color)]
(..apply "rgba" (list (%n red)
@@ -703,6 +974,10 @@
Text
+ (def: #export percentage
+ (-> Percentage Text)
+ (|>> :representation))
+
(def: percentage-limit Nat (.inc 100))
(def: #export (%% value)
@@ -771,12 +1046,12 @@
(:representation vertical))))]
[location Location]
- [area Area]
+ [fit Fit]
)
- (def: #export (area/1 length)
- (-> (Value Length) (Value Area))
- (..area length length))
+ (def: #export (fit/1 length)
+ (-> (Value Length) (Value Fit))
+ (..fit length length))
(def: #export image
(-> URL (Value Image))
@@ -786,8 +1061,8 @@
(enumeration: Shape Text
shape
- [[ellipse "ellipse"]
- [circle "circle"]]
+ [[ellipse-shape "ellipse"]
+ [circle-shape "circle"]]
[])
(enumeration: Extent Text
@@ -936,6 +1211,122 @@
(-> Nat (Value Resolution))
(:abstraction (format (%n dpi) "dpi")))
+ (def: #export (ratio numerator denominator)
+ (-> Nat Nat (Value Ratio))
+ (:abstraction (format (%n numerator) "/" (%n denominator))))
+
+ (enumeration: Quote Text
+ quote-text
+ [[double-quote "\0022"]
+ [single-quote "\0027"]
+ [single-left-angle-quote "\2039"]
+ [single-right-angle-quote "\203A"]
+ [double-left-angle-quote "\00AB"]
+ [double-right-angle-quote "\00BB"]
+ [single-left-quote "\2018"]
+ [single-right-quote "\2019"]
+ [double-left-quote "\201C"]
+ [double-right-quote "\201D"]
+ [low-double-quote "\201E"]]
+ [(def: #export quote
+ (-> Text Quote)
+ (|>> :abstraction))])
+
+ (def: quote-separator " ")
+
+ (def: #export (quotes [left0 right0] [left1 right1])
+ (-> [Quote Quote] [Quote Quote] (Value Quotes))
+ (|> (list left0 right0 left1 right1)
+ (list/map (|>> ..quote-text %t))
+ (text.join-with ..quote-separator)
+ :abstraction))
+
+ (def: #export (matrix-2d [a b] [c d] [tx ty])
+ (-> [Frac Frac]
+ [Frac Frac]
+ [Frac Frac]
+ (Value Transform))
+ (|> (list a b c d tx ty)
+ (list/map %number)
+ (..apply "matrix")))
+
+ (def: #export (matrix-3d [a0 b0 c0 d0] [a1 b1 c1 d1] [a2 b2 c2 d2] [a3 b3 c3 d3])
+ (-> [Frac Frac Frac Frac]
+ [Frac Frac Frac Frac]
+ [Frac Frac Frac Frac]
+ [Frac Frac Frac Frac]
+ (Value Transform))
+ (|> (list a0 b0 c0 d0 a1 b1 c1 d1 a2 b2 c2 d2 a3 b3 c3 d3)
+ (list/map %number)
+ (..apply "matrix3d")))
+
+ (do-template [<name> <function> <input-types> <input-values>]
+ [(`` (def: #export (<name> [(~~ (template.splice <input-values>))])
+ (-> [(~~ (template.splice <input-types>))] (Value Transform))
+ (|> (list (~~ (template.splice <input-values>)))
+ (list/map %number)
+ (..apply <function>))))]
+
+ [translate-2d "translate" [Frac Frac] [x y]]
+ [translate-3d "translate3d" [Frac Frac Frac] [x y z]]
+ [translate-x "translateX" [Frac] [value]]
+ [translate-y "translateY" [Frac] [value]]
+ [translate-z "translateZ" [Frac] [value]]
+
+ [scale-2d "scale" [Frac Frac] [x y]]
+ [scale-3d "scale3d" [Frac Frac Frac] [x y z]]
+ [scale-x "scaleX" [Frac] [value]]
+ [scale-y "scaleY" [Frac] [value]]
+ [scale-z "scaleZ" [Frac] [value]]
+
+ [perspective "perspective" [Frac] [value]]
+ )
+
+ (do-template [<name> <function> <input-types> <input-values>]
+ [(`` (def: #export (<name> [(~~ (template.splice <input-values>))])
+ (-> [(~~ (template.splice <input-types>))] (Value Transform))
+ (|> (list (~~ (template.splice <input-values>)))
+ (list/map ..angle)
+ (..apply <function>))))]
+
+ [rotate-2d "rotate" [Angle] [angle]]
+ [rotate-x "rotateX" [Angle] [angle]]
+ [rotate-y "rotateY" [Angle] [angle]]
+ [rotate-z "rotateZ" [Angle] [angle]]
+
+ [skew "skew" [Angle Angle] [x-angle y-angle]]
+ [skew-x "skewX" [Angle] [angle]]
+ [skew-y "skewY" [Angle] [angle]]
+ )
+
+ (def: #export (rotate-3d [x y z angle])
+ (-> [Frac Frac Frac Angle] (Value Transform))
+ (..apply "rotate3d"
+ (list (%number x) (%number y) (%number z) (..angle angle))))
+
+ (def: origin-separator " ")
+
+ (def: #export (origin-2d x y)
+ (-> (Value Length) (Value Length) (Value Transform-Origin))
+ (:abstraction (format (:representation x) ..origin-separator
+ (:representation y))))
+
+ (def: #export (origin-3d x y z)
+ (-> (Value Length) (Value Length) (Value Length) (Value Transform-Origin))
+ (:abstraction (format (:representation x) ..origin-separator
+ (:representation y) ..origin-separator
+ (:representation z))))
+
+ (def: #export vertical-align
+ (-> (Value Length) (Value Vertical-Align))
+ (|>> :transmutation))
+
+ (def: #export (z-index index)
+ (-> Int (Value Z-Index))
+ (:abstraction (if (i/< +0 index)
+ (%i index)
+ (%n (.nat index)))))
+
(multi: multi-image Image ",")
(multi: multi-shadow Shadow ",")
(multi: multi-content Content " ")