Tailwind classes in OCaml
1(* Simple HTML generation example using Tailwind classes *)
2
3open Htmlit
4
5let classes_attr tailwind_classes =
6 At.class' (Tailwind.to_string tailwind_classes)
7
8let () =
9 Printf.printf "=== Simple Tailwind HTML Example ===\n";
10
11 (* Create a simple card *)
12 let card_classes = Tailwind.tw [
13 Tailwind.Effects.rounded_lg;
14 Tailwind.Effects.shadow_md;
15 Tailwind.Color.bg Tailwind.Color.white;
16 Tailwind.Spacing.(to_class (p (Tailwind.Size.rem 1.5)));
17 Tailwind.Layout.(to_class (max_width (Tailwind.Size.rem 20.0)));
18 ] in
19
20 let card = El.div ~at:[classes_attr card_classes] [
21 El.h2 ~at:[classes_attr (Tailwind.tw [
22 Tailwind.Typography.(to_class (font_size `Xl));
23 Tailwind.Typography.(to_class (font_weight `Bold));
24 Tailwind.Spacing.(to_class (mb (Tailwind.Size.rem 1.0)));
25 ])] [El.txt "Welcome Card"];
26
27 El.p ~at:[classes_attr (Tailwind.tw [
28 Tailwind.Color.text (Tailwind.Color.make `Gray ~variant:`V600 ());
29 Tailwind.Spacing.(to_class (mb (Tailwind.Size.rem 1.5)));
30 ])] [El.txt "This is a simple card component built with Tailwind CSS classes."];
31
32 El.button ~at:[
33 classes_attr (Tailwind.tw [
34 Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V600 ());
35 Tailwind.Color.text Tailwind.Color.white;
36 Tailwind.Spacing.(to_class (px (Tailwind.Size.rem 1.0)));
37 Tailwind.Spacing.(to_class (py (Tailwind.Size.rem 0.5)));
38 Tailwind.Effects.rounded_md;
39 Tailwind.Variants.hover (Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V700 ()));
40 ]);
41 ] [El.txt "Click Me"];
42 ] in
43
44 (* Create a simple layout *)
45 let page = El.div ~at:[classes_attr (Tailwind.tw [
46 Tailwind.Layout.(to_class (min_height (Tailwind.Size.screen)));
47 Tailwind.Color.bg (Tailwind.Color.make `Gray ~variant:`V50 ());
48 Tailwind.Display.flex;
49 Tailwind.Flexbox.(to_class (align_items `Center));
50 Tailwind.Flexbox.(to_class (justify `Center));
51 Tailwind.Spacing.(to_class (p (Tailwind.Size.rem 1.0)));
52 ])] [card] in
53
54 (* Generate HTML *)
55 let html_doc = El.html [
56 El.head [
57 El.title [El.txt "Tailwind HTML Example"];
58 El.script ~at:[At.src "https://cdn.tailwindcss.com"] [];
59 ];
60 El.body [page];
61 ] in
62
63 let html_string = El.to_string ~doctype:true html_doc in
64
65 Printf.printf "Generated HTML document (%d characters)\n" (String.length html_string);
66 Printf.printf "HTML preview:\n%s\n" (String.sub html_string 0 (min 500 (String.length html_string)));
67
68 (* Show individual class generation *)
69 Printf.printf "\n=== Individual Class Examples ===\n";
70 Printf.printf "Primary button: %s\n" (Tailwind.to_string (Tailwind.tw [
71 Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V600 ());
72 Tailwind.Color.text Tailwind.Color.white;
73 Tailwind.Effects.rounded_md;
74 ]));
75
76 Printf.printf "Card container: %s\n" (Tailwind.to_string (Tailwind.tw [
77 Tailwind.Effects.rounded_lg;
78 Tailwind.Effects.shadow_md;
79 Tailwind.Color.bg Tailwind.Color.white;
80 ]));
81
82 Printf.printf "Flex center: %s\n" (Tailwind.to_string (Tailwind.tw [
83 Tailwind.Display.flex;
84 Tailwind.Flexbox.(to_class (align_items `Center));
85 Tailwind.Flexbox.(to_class (justify `Center));
86 ]));
87
88 Printf.printf "Responsive grid: %s\n" (Tailwind.to_string (Tailwind.tw [
89 Tailwind.Display.grid;
90 Tailwind.Grid.(to_class (template_cols (`Cols 1)));
91 Tailwind.Responsive.(to_class (at_breakpoint `Md (Tailwind.Grid.(to_class (template_cols (`Cols 2))))));
92 Tailwind.Responsive.(to_class (at_breakpoint `Lg (Tailwind.Grid.(to_class (template_cols (`Cols 3))))));
93 ]));
94
95 Printf.printf "\nTailwind HTML library working successfully!\n"