package styled-ppx
Source file Rule.ml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27type rule = | Declaration of string * string | Selector of string * rule array let explode s = let rec exp i l = if i < 0 then l else exp (i - 1) (s.[i] :: l) in exp (String.length s - 1) [] let camelCaseToKebabCase str = let insert_dash acc letter = match letter with | 'A' .. 'Z' as letter -> ("-" ^ String.make 1 (Char.lowercase_ascii letter)) :: acc | _ -> String.make 1 letter :: acc in String.concat "" (List.rev (List.fold_left insert_dash [] (explode str))) let declaration (property, value) = Declaration (camelCaseToKebabCase property, value) let selector selector rules = Selector (selector, rules) let media query rules = Selector ({|@media |} ^ query, rules) let important v = match v with | Declaration (name, value) -> Declaration (name, value ^ {js| !important|js}) | Selector (_, _) -> v