Tailwind classes in OCaml
1(** GADT-based Tailwind HTML library with heterogeneous lists *)
2
3(** Color utilities *)
4val blue : int -> Tailwind.Color.t
5val gray : int -> Tailwind.Color.t
6val red : int -> Tailwind.Color.t
7val green : int -> Tailwind.Color.t
8val yellow : int -> Tailwind.Color.t
9val indigo : int -> Tailwind.Color.t
10val purple : int -> Tailwind.Color.t
11val pink : int -> Tailwind.Color.t
12
13(** Size utilities *)
14val rem : float -> Tailwind.Size.t
15val px : Tailwind.Size.t
16val zero : Tailwind.Size.t
17val auto : Tailwind.Size.t
18val full : Tailwind.Size.t
19val screen : Tailwind.Size.t
20
21(** Text utility *)
22val txt : string -> Htmlit.El.html
23
24(** GADT for Tailwind properties with category types *)
25type _ tw_prop =
26 | Text_color : Tailwind.Color.t -> [`Text_color] tw_prop
27 | Bg_color : Tailwind.Color.t -> [`Bg_color] tw_prop
28 | Font_size : Tailwind.Typography.font_size -> [`Font_size] tw_prop
29 | Font_weight : Tailwind.Typography.font_weight -> [`Font_weight] tw_prop
30 | Margin : Tailwind.Size.t -> [`Margin] tw_prop
31 | Margin_x : Tailwind.Size.t -> [`Margin] tw_prop
32 | Margin_y : Tailwind.Size.t -> [`Margin] tw_prop
33 | Margin_top : Tailwind.Size.t -> [`Margin] tw_prop
34 | Margin_bottom : Tailwind.Size.t -> [`Margin] tw_prop
35 | Margin_left : Tailwind.Size.t -> [`Margin] tw_prop
36 | Margin_right : Tailwind.Size.t -> [`Margin] tw_prop
37 | Padding : Tailwind.Size.t -> [`Padding] tw_prop
38 | Padding_x : Tailwind.Size.t -> [`Padding] tw_prop
39 | Padding_y : Tailwind.Size.t -> [`Padding] tw_prop
40 | Width : Tailwind.Size.t -> [`Width] tw_prop
41 | Height : Tailwind.Size.t -> [`Height] tw_prop
42 | Max_width : Tailwind.Size.t -> [`Width] tw_prop
43 | Min_height : Tailwind.Size.t -> [`Height] tw_prop
44 | Display_flex : [`Layout] tw_prop
45 | Display_grid : [`Layout] tw_prop
46 | Display_block : [`Layout] tw_prop
47 | Display_inline : [`Layout] tw_prop
48 | Display_inline_block : [`Layout] tw_prop
49 | Grid_cols : int -> [`Grid] tw_prop
50 | Grid_rows : int -> [`Grid] tw_prop
51 | Gap : Tailwind.Size.t -> [`Grid] tw_prop
52 | Gap_x : Tailwind.Size.t -> [`Grid] tw_prop
53 | Gap_y : Tailwind.Size.t -> [`Grid] tw_prop
54 | Items_center : [`Layout] tw_prop
55 | Items_start : [`Layout] tw_prop
56 | Items_end : [`Layout] tw_prop
57 | Justify_center : [`Layout] tw_prop
58 | Justify_between : [`Layout] tw_prop
59 | Justify_start : [`Layout] tw_prop
60 | Justify_end : [`Layout] tw_prop
61 | Flex_col : [`Layout] tw_prop
62 | Flex_row : [`Layout] tw_prop
63 | Text_center : [`Layout] tw_prop
64 | Text_left : [`Layout] tw_prop
65 | Text_right : [`Layout] tw_prop
66 | Rounded : [< `Sm | `Md | `Lg | `Full ] -> [`Effects] tw_prop
67 | Shadow : [< `Sm | `Md | `Lg ] -> [`Effects] tw_prop
68 | Border : [`Effects] tw_prop
69 | Border_color : Tailwind.Color.t -> [`Effects] tw_prop
70 | Transition : [`Effects] tw_prop
71
72(** Heterogeneous list *)
73type tw_list = tw_list_item list
74and tw_list_item = Any : 'a tw_prop -> tw_list_item
75
76(** Convert heterogeneous list to Tailwind classes *)
77val styles : tw_list -> Tailwind.t
78
79(** Helper for HTML class attribute *)
80val classes_attr : tw_list -> Htmlit.At.t
81
82(** Helper constructors for convenient usage *)
83val text_color : Tailwind.Color.t -> tw_list_item
84val bg_color : Tailwind.Color.t -> tw_list_item
85val font_size : Tailwind.Typography.font_size -> tw_list_item
86val font_weight : Tailwind.Typography.font_weight -> tw_list_item
87val margin : Tailwind.Size.t -> tw_list_item
88val margin_x : Tailwind.Size.t -> tw_list_item
89val margin_y : Tailwind.Size.t -> tw_list_item
90val margin_top : Tailwind.Size.t -> tw_list_item
91val margin_bottom : Tailwind.Size.t -> tw_list_item
92val margin_left : Tailwind.Size.t -> tw_list_item
93val margin_right : Tailwind.Size.t -> tw_list_item
94val padding : Tailwind.Size.t -> tw_list_item
95val padding_x : Tailwind.Size.t -> tw_list_item
96val padding_y : Tailwind.Size.t -> tw_list_item
97val width : Tailwind.Size.t -> tw_list_item
98val height : Tailwind.Size.t -> tw_list_item
99val max_width : Tailwind.Size.t -> tw_list_item
100val min_height : Tailwind.Size.t -> tw_list_item
101val flex : tw_list_item
102val grid : tw_list_item
103val block : tw_list_item
104val inline : tw_list_item
105val inline_block : tw_list_item
106val grid_cols : int -> tw_list_item
107val grid_rows : int -> tw_list_item
108val gap : Tailwind.Size.t -> tw_list_item
109val gap_x : Tailwind.Size.t -> tw_list_item
110val gap_y : Tailwind.Size.t -> tw_list_item
111val items_center : tw_list_item
112val items_start : tw_list_item
113val items_end : tw_list_item
114val justify_center : tw_list_item
115val justify_between : tw_list_item
116val justify_start : tw_list_item
117val justify_end : tw_list_item
118val flex_col : tw_list_item
119val flex_row : tw_list_item
120val text_center : tw_list_item
121val text_left : tw_list_item
122val text_right : tw_list_item
123val rounded : [< `Sm | `Md | `Lg | `Full ] -> tw_list_item
124val shadow : [< `Sm | `Md | `Lg ] -> tw_list_item
125val border : tw_list_item
126val border_color : Tailwind.Color.t -> tw_list_item
127val transition : tw_list_item
128
129(** HTML element functions with GADT styling *)
130val h1 : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
131val h2 : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
132val h3 : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
133val h4 : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
134val h5 : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
135val h6 : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
136val p : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
137val div : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
138val span : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
139val button : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
140val a : ?styles:tw_list -> href:string -> Htmlit.El.html list -> Htmlit.El.html
141val img : ?styles:tw_list -> src:string -> alt:string -> unit -> Htmlit.El.html
142val ul : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
143val ol : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
144val li : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
145val section : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
146val article : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
147val nav : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
148val header : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
149val footer : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
150val main : ?styles:tw_list -> Htmlit.El.html list -> Htmlit.El.html
151
152(** Pre-built component helpers *)
153val container : Htmlit.El.html list -> Htmlit.El.html
154val flex_center : Htmlit.El.html list -> Htmlit.El.html
155val card : ?elevated:bool -> Htmlit.El.html list -> Htmlit.El.html
156val btn_primary : ?size:[`Sm | `Md | `Lg] -> Htmlit.El.html list -> Htmlit.El.html
157val btn_secondary : ?size:[`Sm | `Md | `Lg] -> Htmlit.El.html list -> Htmlit.El.html
158val btn_outline : ?size:[`Sm | `Md | `Lg] -> Htmlit.El.html list -> Htmlit.El.html