package styled-ppx

  1. Overview
  2. Docs
Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source

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
27
type 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
OCaml

Innovation. Community. Security.