Tailwind classes in OCaml

Remove legacy examples and keep only numbered tutorial sequence

- Remove basic_usage, module_usage, advanced_features and other legacy examples
- Keep clean numbered sequence: index_00 through comprehensive_showcase_07
- Update dune file to remove legacy executables definition
- Simplify learning path to focus on progressive tutorial structure

The remaining examples provide a complete learning journey:
- 00: Index/guide explaining the learning path
- 01: Hello Tailwind - basic concepts
- 02: Colors and Typography - type system exploration
- 03: Layout and Spacing - box model and flexbox
- 04: Responsive Design - breakpoints and responsive utilities
- 05: Effects and Variants - interactive elements and hover states
- 06: Patterns and Components - reusable layout patterns
- 07: Comprehensive Showcase - real-world application demo

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

-65
examples/advanced_features.ml
···
-
let () =
-
Printf.printf "=== Advanced Tailwind Features ===\n";
-
-
(* V4 Container Queries *)
-
let container_responsive = Tailwind.V4.container_query `Lg
-
(Tailwind.Css.make "text-2xl") in
-
Printf.printf "Container Query (V4): %s\n" (Tailwind.to_string container_responsive);
-
-
(* V4 Starting Style *)
-
let starting_animation = Tailwind.V4.starting_style
-
(Tailwind.Css.make "opacity-0") in
-
Printf.printf "Starting Style (V4): %s\n" (Tailwind.to_string starting_animation);
-
-
(* V4 Text Shadow *)
-
let text_shadow = Tailwind.V4.text_shadow `Lg in
-
Printf.printf "Text Shadow (V4): %s\n" (Tailwind.to_string text_shadow);
-
-
(* Advanced Variants - Pseudo-classes *)
-
let hover_effect = Tailwind.Variants.hover (Tailwind.Css.make "bg-blue-600") in
-
Printf.printf "Hover Effect: %s\n" (Tailwind.to_string hover_effect);
-
-
let focus_visible = Tailwind.Variants.apply
-
(Tailwind.Variants.pseudo `Focus_visible (Tailwind.Css.make "ring-2"))
-
(Tailwind.Css.make "input") in
-
Printf.printf "Focus Visible: %s\n" (Tailwind.to_string focus_visible);
-
-
(* Responsive with Media Features *)
-
let dark_mode = Tailwind.Responsive.(apply
-
(media `Dark (Tailwind.Css.make "bg-gray-900"))
-
(Tailwind.Css.make "bg-white")) in
-
Printf.printf "Dark Mode: %s\n" (Tailwind.to_string dark_mode);
-
-
let motion_safe = Tailwind.Responsive.(apply
-
(media `Motion_safe (Tailwind.Css.make "transition-all"))
-
(Tailwind.Css.make "transform")) in
-
Printf.printf "Motion Safe: %s\n" (Tailwind.to_string motion_safe);
-
-
(* Advanced Effects *)
-
let backdrop_blur = Tailwind.Effects.(to_class (backdrop_blur `Lg)) in
-
Printf.printf "Backdrop Blur: %s\n" (Tailwind.to_string backdrop_blur);
-
-
let transform_origin = Tailwind.Effects.(to_class (transform_origin `Top_right)) in
-
Printf.printf "Transform Origin: %s\n" (Tailwind.to_string transform_origin);
-
-
let scale_transform = Tailwind.Effects.(to_class (scale `X 125)) in
-
Printf.printf "Scale Transform: %s\n" (Tailwind.to_string scale_transform);
-
-
let rotate_transform = Tailwind.Effects.(to_class (rotate 45)) in
-
Printf.printf "Rotate Transform: %s\n" (Tailwind.to_string rotate_transform);
-
-
let translate_transform = Tailwind.Effects.(to_class (translate `Y (Tailwind.Size.rem 2.0))) in
-
Printf.printf "Translate Transform: %s\n" (Tailwind.to_string translate_transform);
-
-
(* Complex Combination *)
-
let complex_card = Tailwind.tw [
-
Tailwind.Color.bg (Tailwind.Color.make `White ());
-
Tailwind.Effects.rounded_lg;
-
Tailwind.Effects.shadow_md;
-
backdrop_blur;
-
Tailwind.Spacing.(to_class (p (Tailwind.Size.rem 1.5)));
-
Tailwind.Effects.(to_class (transform `Gpu));
-
Tailwind.Effects.transition `All;
-
hover_effect;
-
] in
-
Printf.printf "Complex Card: %s\n" (Tailwind.to_string complex_card)
···
-45
examples/basic_usage.ml
···
-
(* Basic usage examples for the Tailwind OCaml library *)
-
-
(* This example shows how to use the library in its current form *)
-
-
let () =
-
(* The current implementation provides these utilities *)
-
let flex_center_classes = Tailwind.Patterns.flex_center in
-
let focus_ring_classes = Tailwind.focus_ring () in
-
let container_classes = Tailwind.Patterns.container ~center:true () in
-
-
(* Reset utilities *)
-
let button_reset = Tailwind.Reset.button in
-
let input_reset = Tailwind.Reset.input in
-
let sr_only = Tailwind.sr_only in
-
-
(* Transitions *)
-
let transition_all = Tailwind.Effects.transition `All in
-
let duration_300 = Tailwind.Effects.duration 300 in
-
let ease_in_out = Tailwind.Effects.ease `In_out in
-
-
(* Conditional classes *)
-
let conditional_classes = Tailwind.class_list [
-
(Tailwind.Patterns.flex_center, true);
-
(Tailwind.Reset.button, false);
-
] in
-
-
Printf.printf "=== Tailwind OCaml Library Usage Examples ===\n";
-
Printf.printf "Flex center: %s\n" (Tailwind.to_string flex_center_classes);
-
Printf.printf "Focus ring: %s\n" (Tailwind.to_string focus_ring_classes);
-
Printf.printf "Container: %s\n" (Tailwind.to_string container_classes);
-
Printf.printf "Button reset: %s\n" (Tailwind.to_string button_reset);
-
Printf.printf "Input reset: %s\n" (Tailwind.to_string input_reset);
-
Printf.printf "Screen reader only: %s\n" (Tailwind.to_string sr_only);
-
Printf.printf "Transition all: %s\n" (Tailwind.to_string transition_all);
-
Printf.printf "Duration 300ms: %s\n" (Tailwind.to_string duration_300);
-
Printf.printf "Ease in-out: %s\n" (Tailwind.to_string ease_in_out);
-
Printf.printf "Conditional classes: %s\n" (Tailwind.to_string conditional_classes);
-
-
(* Combining classes *)
-
let combined_classes = Tailwind.tw [
-
flex_center_classes;
-
container_classes;
-
transition_all;
-
] in
-
Printf.printf "Combined classes: %s\n" (Tailwind.to_string combined_classes)
···
-287
examples/complete_demo.ml
···
-
(* Complete demonstration of Tailwind OCaml library with HTML generation *)
-
-
open Htmlit
-
-
let classes_attr tailwind_classes =
-
At.class' (Tailwind.to_string tailwind_classes)
-
-
let create_navbar () =
-
let nav_classes = Tailwind.tw [
-
Tailwind.Color.bg Tailwind.Color.white;
-
Tailwind.Effects.shadow_sm;
-
Tailwind.Effects.border;
-
Tailwind.Color.border (Tailwind.Color.make `Gray ~variant:`V200 ());
-
] in
-
-
El.nav ~at:[classes_attr nav_classes] [
-
El.div ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Css.make "max-w-7xl";
-
Tailwind.Css.make "mx-auto";
-
Tailwind.Spacing.(to_class (px (Tailwind.Size.rem 1.0)));
-
])] [
-
El.div ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Display.flex;
-
Tailwind.Flexbox.(to_class (justify `Between));
-
Tailwind.Flexbox.(to_class (align_items `Center));
-
Tailwind.Layout.(to_class (height (Tailwind.Size.rem 4.0)));
-
])] [
-
(* Brand *)
-
El.div ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Typography.(to_class (font_size `Xl));
-
Tailwind.Typography.(to_class (font_weight `Bold));
-
Tailwind.Color.text (Tailwind.Color.make `Blue ~variant:`V600 ());
-
])] [El.txt "Tailwind OCaml"];
-
-
(* Navigation items *)
-
El.div ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Display.hidden;
-
Tailwind.Responsive.(to_class (at_breakpoint `Md (Tailwind.Display.flex)));
-
Tailwind.Spacing.(to_class (gap `All (Tailwind.Size.rem 2.0)));
-
])] [
-
El.a ~at:[
-
At.href "#";
-
classes_attr (Tailwind.tw [
-
Tailwind.Color.text (Tailwind.Color.make `Gray ~variant:`V600 ());
-
Tailwind.Variants.hover (Tailwind.Color.text (Tailwind.Color.make `Gray ~variant:`V900 ()));
-
]);
-
] [El.txt "Features"];
-
El.a ~at:[
-
At.href "#";
-
classes_attr (Tailwind.tw [
-
Tailwind.Color.text (Tailwind.Color.make `Gray ~variant:`V600 ());
-
Tailwind.Variants.hover (Tailwind.Color.text (Tailwind.Color.make `Gray ~variant:`V900 ()));
-
]);
-
] [El.txt "Docs"];
-
El.a ~at:[
-
At.href "#";
-
classes_attr (Tailwind.tw [
-
Tailwind.Color.text (Tailwind.Color.make `Gray ~variant:`V600 ());
-
Tailwind.Variants.hover (Tailwind.Color.text (Tailwind.Color.make `Gray ~variant:`V900 ()));
-
]);
-
] [El.txt "About"];
-
];
-
-
(* CTA Button *)
-
El.button ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V600 ());
-
Tailwind.Color.text Tailwind.Color.white;
-
Tailwind.Spacing.(to_class (px (Tailwind.Size.rem 1.0)));
-
Tailwind.Spacing.(to_class (py (Tailwind.Size.rem 0.5)));
-
Tailwind.Effects.rounded_md;
-
Tailwind.Typography.(to_class (font_size `Sm));
-
Tailwind.Variants.hover (Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V700 ()));
-
])] [El.txt "Get Started"];
-
];
-
];
-
]
-
-
let create_hero () =
-
El.section ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Position.(to_class (position `Relative));
-
Tailwind.Display.flex;
-
Tailwind.Flexbox.(to_class (align_items `Center));
-
Tailwind.Flexbox.(to_class (justify `Center));
-
Tailwind.Layout.(to_class (min_height (Tailwind.Size.screen)));
-
Tailwind.Color.bg (Tailwind.Color.make `Gray ~variant:`V900 ());
-
Tailwind.Color.text Tailwind.Color.white;
-
])] [
-
El.div ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Css.make "text-center";
-
Tailwind.Css.make "max-w-4xl";
-
Tailwind.Css.make "mx-auto";
-
Tailwind.Spacing.(to_class (px (Tailwind.Size.rem 1.0)));
-
])] [
-
El.h1 ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Typography.(to_class (font_size `Xl4));
-
Tailwind.Typography.(to_class (font_weight `Bold));
-
Tailwind.Spacing.(to_class (mb (Tailwind.Size.rem 1.5)));
-
])] [El.txt "Type-Safe Tailwind CSS for OCaml"];
-
-
El.p ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Typography.(to_class (font_size `Xl));
-
Tailwind.Color.text (Tailwind.Color.make `Gray ~variant:`V300 ());
-
Tailwind.Spacing.(to_class (mb (Tailwind.Size.rem 2.0)));
-
])] [El.txt "Build beautiful, responsive web interfaces with the power of OCaml's type system and Tailwind's utility classes."];
-
-
El.div ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Display.flex;
-
Tailwind.Flexbox.(to_class (justify `Center));
-
Tailwind.Spacing.(to_class (gap `All (Tailwind.Size.rem 1.0)));
-
])] [
-
El.button ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V600 ());
-
Tailwind.Color.text Tailwind.Color.white;
-
Tailwind.Spacing.(to_class (px (Tailwind.Size.rem 2.0)));
-
Tailwind.Spacing.(to_class (py (Tailwind.Size.rem 0.75)));
-
Tailwind.Effects.rounded_lg;
-
Tailwind.Typography.(to_class (font_size `Lg));
-
Tailwind.Typography.(to_class (font_weight `Medium));
-
Tailwind.Variants.hover (Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V700 ()));
-
])] [El.txt "Get Started"];
-
-
El.button ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Effects.border;
-
Tailwind.Color.border (Tailwind.Color.make `Gray ~variant:`V300 ());
-
Tailwind.Color.text (Tailwind.Color.make `Gray ~variant:`V300 ());
-
Tailwind.Spacing.(to_class (px (Tailwind.Size.rem 2.0)));
-
Tailwind.Spacing.(to_class (py (Tailwind.Size.rem 0.75)));
-
Tailwind.Effects.rounded_lg;
-
Tailwind.Typography.(to_class (font_size `Lg));
-
Tailwind.Typography.(to_class (font_weight `Medium));
-
Tailwind.Variants.hover (Tailwind.Color.bg (Tailwind.Color.make `Gray ~variant:`V800 ()));
-
])] [El.txt "View Docs"];
-
];
-
];
-
]
-
-
let create_feature_card ~icon ~title ~description =
-
El.div ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Effects.rounded_lg;
-
Tailwind.Effects.border;
-
Tailwind.Color.border (Tailwind.Color.make `Gray ~variant:`V200 ());
-
Tailwind.Color.bg Tailwind.Color.white;
-
Tailwind.Spacing.(to_class (p (Tailwind.Size.rem 1.5)));
-
Tailwind.Effects.shadow_sm;
-
])] [
-
El.div ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Spacing.(to_class (mb (Tailwind.Size.rem 1.0)));
-
])] [El.txt icon];
-
-
El.h3 ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Typography.(to_class (font_size `Lg));
-
Tailwind.Typography.(to_class (font_weight `Semibold));
-
Tailwind.Spacing.(to_class (mb (Tailwind.Size.rem 0.5)));
-
])] [El.txt title];
-
-
El.p ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Color.text (Tailwind.Color.make `Gray ~variant:`V600 ());
-
])] [El.txt description];
-
]
-
-
let create_features () =
-
El.section ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Spacing.(to_class (py (Tailwind.Size.rem 5.0)));
-
])] [
-
El.div ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Css.make "max-w-7xl";
-
Tailwind.Css.make "mx-auto";
-
Tailwind.Spacing.(to_class (px (Tailwind.Size.rem 1.0)));
-
])] [
-
El.div ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Css.make "text-center";
-
Tailwind.Spacing.(to_class (mb (Tailwind.Size.rem 3.0)));
-
])] [
-
El.h2 ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Typography.(to_class (font_size `Xl3));
-
Tailwind.Typography.(to_class (font_weight `Bold));
-
Tailwind.Spacing.(to_class (mb (Tailwind.Size.rem 1.0)));
-
])] [El.txt "Why Choose Tailwind OCaml?"];
-
-
El.p ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Typography.(to_class (font_size `Lg));
-
Tailwind.Color.text (Tailwind.Color.make `Gray ~variant:`V600 ());
-
])] [El.txt "Everything you need to build modern web applications with OCaml"];
-
];
-
-
El.div ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Display.grid;
-
Tailwind.Grid.(to_class (template_cols (`Cols 1)));
-
Tailwind.Responsive.(to_class (at_breakpoint `Md (Tailwind.Grid.(to_class (template_cols (`Cols 2))))));
-
Tailwind.Responsive.(to_class (at_breakpoint `Lg (Tailwind.Grid.(to_class (template_cols (`Cols 3))))));
-
Tailwind.Spacing.(to_class (gap `All (Tailwind.Size.rem 2.0)));
-
])] [
-
create_feature_card ~icon:"🔒" ~title:"Type Safety"
-
~description:"Catch CSS errors at compile time with OCaml's powerful type system";
-
create_feature_card ~icon:"⚡" ~title:"Performance"
-
~description:"Zero runtime overhead - all CSS classes are generated at compile time";
-
create_feature_card ~icon:"🎨" ~title:"Full Tailwind"
-
~description:"Complete coverage of Tailwind CSS v4 including the latest features";
-
create_feature_card ~icon:"🔧" ~title:"Composable"
-
~description:"Build complex layouts by composing simple, reusable utility functions";
-
create_feature_card ~icon:"📱" ~title:"Responsive"
-
~description:"First-class support for responsive design and media queries";
-
create_feature_card ~icon:"🚀" ~title:"Modern"
-
~description:"Support for CSS Grid, Flexbox, and modern web standards";
-
];
-
];
-
]
-
-
let () =
-
Printf.printf "=== Complete Tailwind OCaml Demo ===\n";
-
-
let html_doc = El.html [
-
El.head [
-
El.meta ~at:[At.charset "utf-8"] ();
-
El.meta ~at:[At.name "viewport"; At.content "width=device-width, initial-scale=1"] ();
-
El.title [El.txt "Tailwind OCaml - Type-Safe CSS Utilities"];
-
El.script ~at:[At.src "https://cdn.tailwindcss.com"] [];
-
];
-
-
El.body [
-
create_navbar ();
-
create_hero ();
-
create_features ();
-
];
-
] in
-
-
let html_string = El.to_string ~doctype:true html_doc in
-
-
Printf.printf "Generated complete website (%d characters)\n" (String.length html_string);
-
-
(* Show a snippet of the generated HTML *)
-
let preview_length = 800 in
-
let preview = if String.length html_string > preview_length then
-
(String.sub html_string 0 preview_length) ^ "..."
-
else html_string in
-
-
Printf.printf "\nHTML Preview:\n%s\n" preview;
-
-
(* Demonstrate advanced class combinations *)
-
Printf.printf "\n=== Advanced Class Combinations ===\n";
-
-
let responsive_card = Tailwind.tw [
-
(* Base styles *)
-
Tailwind.Effects.rounded_lg;
-
Tailwind.Color.bg Tailwind.Color.white;
-
Tailwind.Effects.shadow_sm;
-
-
(* Responsive padding *)
-
Tailwind.Spacing.(to_class (p (Tailwind.Size.rem 1.0)));
-
Tailwind.Responsive.(to_class (at_breakpoint `Md (Tailwind.Spacing.(to_class (p (Tailwind.Size.rem 1.5))))));
-
Tailwind.Responsive.(to_class (at_breakpoint `Lg (Tailwind.Spacing.(to_class (p (Tailwind.Size.rem 2.0))))));
-
-
(* Hover effects *)
-
Tailwind.Effects.transition `All;
-
Tailwind.Variants.hover (Tailwind.Effects.shadow_md);
-
-
(* Dark mode support *)
-
Tailwind.Responsive.(to_class (media `Dark (Tailwind.Color.bg (Tailwind.Color.make `Gray ~variant:`V800 ()))));
-
] in
-
Printf.printf "Responsive Card: %s\n" (Tailwind.to_string responsive_card);
-
-
let complex_button = Tailwind.tw [
-
(* Button base *)
-
Tailwind.Display.inline_flex;
-
Tailwind.Flexbox.(to_class (align_items `Center));
-
Tailwind.Flexbox.(to_class (justify `Center));
-
Tailwind.Effects.rounded_md;
-
-
(* Typography *)
-
Tailwind.Typography.(to_class (font_size `Sm));
-
Tailwind.Typography.(to_class (font_weight `Medium));
-
-
(* Colors with variants *)
-
Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V600 ());
-
Tailwind.Color.text Tailwind.Color.white;
-
Tailwind.Variants.hover (Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V700 ()));
-
Tailwind.Variants.focus (Tailwind.Css.make "focus:ring-2");
-
Tailwind.Variants.disabled (Tailwind.Effects.(to_class (opacity 50)));
-
-
(* V4 features *)
-
Tailwind.V4.starting_style (Tailwind.Effects.(to_class (opacity 0)));
-
] in
-
Printf.printf "Complex Button: %s\n" (Tailwind.to_string complex_button);
-
-
Printf.printf "\n✅ Complete demo generated successfully!\n";
-
Printf.printf "📄 Ready to serve as a static HTML file\n";
-
Printf.printf "🎨 Demonstrates full Tailwind OCaml capabilities\n"
···
-6
examples/dune
···
(package tailwind)
(libraries tailwind tailwind-html htmlit unix))
-
;; Legacy examples (maintained for compatibility)
-
(executables
-
(public_names basic_usage module_usage advanced_features simple_html_example complete_demo tailwind_html_example improved_api_demo)
-
(names basic_usage module_usage advanced_features simple_html_example complete_demo tailwind_html_example improved_api_demo)
-
(package tailwind)
-
(libraries tailwind htmlit unix))
;; Generate HTML files from examples
(rule
···
(package tailwind)
(libraries tailwind tailwind-html htmlit unix))
;; Generate HTML files from examples
(rule
-77
examples/improved_api_demo.ml
···
-
open Tailwind
-
-
let () =
-
Printf.printf "=== Improved Tailwind OCaml API Demo ===\n\n";
-
-
(* 1. Using the new organizational structure *)
-
let button_classes = tw [
-
C.bg (Color.make `Blue ~variant:`V500 ());
-
C.text (Color.make `White ());
-
S.(to_class (px (Size.rem 1.0)));
-
S.(to_class (py (Size.rem 0.5)));
-
E.rounded_md;
-
E.shadow_sm;
-
E.transition `Colors;
-
] in
-
Printf.printf "Button with short aliases: %s\n" (to_string button_classes);
-
-
(* 2. Using patterns for common layouts *)
-
let centered_card = tw [
-
P.card;
-
P.flex_center;
-
] in
-
Printf.printf "Centered card: %s\n" (to_string centered_card);
-
-
(* 3. Reset utilities in their own module *)
-
let form_input = tw [
-
R.input;
-
C.border (Color.make `Gray ~variant:`V300 ());
-
E.rounded_sm;
-
S.(to_class (p (Size.rem 0.75)));
-
] in
-
Printf.printf "Form input with reset: %s\n" (to_string form_input);
-
-
(* 4. Animation utilities properly organized *)
-
let animated_button = tw [
-
C.bg (Color.make `Green ~variant:`V500 ());
-
C.text (Color.make `White ());
-
S.(to_class (px (Size.rem 1.5)));
-
S.(to_class (py (Size.rem 0.75)));
-
E.rounded_lg;
-
E.transition `All;
-
E.duration 200;
-
E.ease `In_out;
-
Variants.hover (C.bg (Color.make `Green ~variant:`V600 ()));
-
] in
-
Printf.printf "Animated button: %s\n" (to_string animated_button);
-
-
(* 5. Stack layout pattern *)
-
let vertical_stack = P.stack ~gap:(Size.rem 1.0) () in
-
Printf.printf "Vertical stack: %s\n" (to_string vertical_stack);
-
-
(* 6. Conditional classes *)
-
let responsive_classes = class_list [
-
(P.flex_center, true);
-
(R.button, false);
-
(E.shadow_lg, true);
-
] in
-
Printf.printf "Conditional classes: %s\n" (to_string responsive_classes);
-
-
(* 7. Focus ring utility *)
-
let accessible_button = tw [
-
C.bg (Color.make `Purple ~variant:`V500 ());
-
C.text (Color.make `White ());
-
S.(to_class (px (Size.rem 1.0)));
-
S.(to_class (py (Size.rem 0.5)));
-
E.rounded_md;
-
focus_ring ();
-
] in
-
Printf.printf "Accessible button: %s\n" (to_string accessible_button);
-
-
Printf.printf "\n=== API Improvements Summary ===\n";
-
Printf.printf "✅ Animation utilities moved to Effects module\n";
-
Printf.printf "✅ Reset utilities organized in Reset module\n";
-
Printf.printf "✅ Layout patterns in Patterns module\n";
-
Printf.printf "✅ Convenience aliases (C, S, E, T, F, G, P, R)\n";
-
Printf.printf "✅ Consistent return types across modules\n";
-
Printf.printf "✅ Comprehensive test coverage setup\n";
···
-58
examples/module_usage.ml
···
-
(* Example showing how to use module aliases to access individual utilities *)
-
-
let () =
-
(* Using individual modules through Tailwind module aliases *)
-
let blue_bg = Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V500 ()) in
-
let white_text = Tailwind.Color.text Tailwind.Color.white in
-
let padding = Tailwind.Spacing.(to_class (p (Tailwind.Size.rem 1.0))) in
-
let rounded = Tailwind.Effects.rounded_md in
-
let flex_display = Tailwind.Display.flex in
-
let center_items = Tailwind.Flexbox.(to_class (align_items `Center)) in
-
-
(* Combine all classes *)
-
let button_classes = Tailwind.tw [
-
blue_bg;
-
white_text;
-
padding;
-
rounded;
-
flex_display;
-
center_items;
-
] in
-
-
(* Typography example *)
-
let heading = Tailwind.Typography.(to_class (font_size `Xl2)) in
-
let bold_text = Tailwind.Typography.(to_class (font_weight `Bold)) in
-
let center_align = Tailwind.Typography.(to_class (text_align `Center)) in
-
-
let heading_classes = Tailwind.tw [
-
heading;
-
bold_text;
-
center_align;
-
] in
-
-
(* Layout example *)
-
let full_width = Tailwind.Layout.w_full in
-
let fixed_height = Tailwind.Layout.(to_class (height (Tailwind.Size.rem 10.0))) in
-
let overflow_hidden = Tailwind.Layout.(to_class (overflow `All `Hidden)) in
-
-
let container_classes = Tailwind.tw [
-
full_width;
-
fixed_height;
-
overflow_hidden;
-
Tailwind.Patterns.flex_center; (* Utility function *)
-
] in
-
-
Printf.printf "=== Module Alias Usage Examples ===\n";
-
Printf.printf "Button: %s\n" (Tailwind.to_string button_classes);
-
Printf.printf "Heading: %s\n" (Tailwind.to_string heading_classes);
-
Printf.printf "Container: %s\n" (Tailwind.to_string container_classes);
-
-
(* Show conditional classes *)
-
let is_primary = true in
-
let conditional_button = Tailwind.class_list [
-
(Tailwind.tw [padding; rounded], true);
-
(blue_bg, is_primary);
-
(Tailwind.Color.bg (Tailwind.Color.make `Gray ~variant:`V300 ()), not is_primary);
-
] in
-
-
Printf.printf "Conditional button: %s\n" (Tailwind.to_string conditional_button)
···
-95
examples/simple_html_example.ml
···
-
(* Simple HTML generation example using Tailwind classes *)
-
-
open Htmlit
-
-
let classes_attr tailwind_classes =
-
At.class' (Tailwind.to_string tailwind_classes)
-
-
let () =
-
Printf.printf "=== Simple Tailwind HTML Example ===\n";
-
-
(* Create a simple card *)
-
let card_classes = Tailwind.tw [
-
Tailwind.Effects.rounded_lg;
-
Tailwind.Effects.shadow_md;
-
Tailwind.Color.bg Tailwind.Color.white;
-
Tailwind.Spacing.(to_class (p (Tailwind.Size.rem 1.5)));
-
Tailwind.Layout.(to_class (max_width (Tailwind.Size.rem 20.0)));
-
] in
-
-
let card = El.div ~at:[classes_attr card_classes] [
-
El.h2 ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Typography.(to_class (font_size `Xl));
-
Tailwind.Typography.(to_class (font_weight `Bold));
-
Tailwind.Spacing.(to_class (mb (Tailwind.Size.rem 1.0)));
-
])] [El.txt "Welcome Card"];
-
-
El.p ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Color.text (Tailwind.Color.make `Gray ~variant:`V600 ());
-
Tailwind.Spacing.(to_class (mb (Tailwind.Size.rem 1.5)));
-
])] [El.txt "This is a simple card component built with Tailwind CSS classes."];
-
-
El.button ~at:[
-
classes_attr (Tailwind.tw [
-
Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V600 ());
-
Tailwind.Color.text Tailwind.Color.white;
-
Tailwind.Spacing.(to_class (px (Tailwind.Size.rem 1.0)));
-
Tailwind.Spacing.(to_class (py (Tailwind.Size.rem 0.5)));
-
Tailwind.Effects.rounded_md;
-
Tailwind.Variants.hover (Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V700 ()));
-
]);
-
] [El.txt "Click Me"];
-
] in
-
-
(* Create a simple layout *)
-
let page = El.div ~at:[classes_attr (Tailwind.tw [
-
Tailwind.Layout.(to_class (min_height (Tailwind.Size.screen)));
-
Tailwind.Color.bg (Tailwind.Color.make `Gray ~variant:`V50 ());
-
Tailwind.Display.flex;
-
Tailwind.Flexbox.(to_class (align_items `Center));
-
Tailwind.Flexbox.(to_class (justify `Center));
-
Tailwind.Spacing.(to_class (p (Tailwind.Size.rem 1.0)));
-
])] [card] in
-
-
(* Generate HTML *)
-
let html_doc = El.html [
-
El.head [
-
El.title [El.txt "Tailwind HTML Example"];
-
El.script ~at:[At.src "https://cdn.tailwindcss.com"] [];
-
];
-
El.body [page];
-
] in
-
-
let html_string = El.to_string ~doctype:true html_doc in
-
-
Printf.printf "Generated HTML document (%d characters)\n" (String.length html_string);
-
Printf.printf "HTML preview:\n%s\n" (String.sub html_string 0 (min 500 (String.length html_string)));
-
-
(* Show individual class generation *)
-
Printf.printf "\n=== Individual Class Examples ===\n";
-
Printf.printf "Primary button: %s\n" (Tailwind.to_string (Tailwind.tw [
-
Tailwind.Color.bg (Tailwind.Color.make `Blue ~variant:`V600 ());
-
Tailwind.Color.text Tailwind.Color.white;
-
Tailwind.Effects.rounded_md;
-
]));
-
-
Printf.printf "Card container: %s\n" (Tailwind.to_string (Tailwind.tw [
-
Tailwind.Effects.rounded_lg;
-
Tailwind.Effects.shadow_md;
-
Tailwind.Color.bg Tailwind.Color.white;
-
]));
-
-
Printf.printf "Flex center: %s\n" (Tailwind.to_string (Tailwind.tw [
-
Tailwind.Display.flex;
-
Tailwind.Flexbox.(to_class (align_items `Center));
-
Tailwind.Flexbox.(to_class (justify `Center));
-
]));
-
-
Printf.printf "Responsive grid: %s\n" (Tailwind.to_string (Tailwind.tw [
-
Tailwind.Display.grid;
-
Tailwind.Grid.(to_class (template_cols (`Cols 1)));
-
Tailwind.Responsive.(to_class (at_breakpoint `Md (Tailwind.Grid.(to_class (template_cols (`Cols 2))))));
-
Tailwind.Responsive.(to_class (at_breakpoint `Lg (Tailwind.Grid.(to_class (template_cols (`Cols 3))))));
-
]));
-
-
Printf.printf "\nTailwind HTML library working successfully!\n"
···
-18
examples/tailwind_html_example.ml
···
-
(* Tailwind HTML Components Example - Placeholder *)
-
-
let () =
-
Printf.printf "Tailwind HTML Components Example\n";
-
Printf.printf "=================================\n\n";
-
Printf.printf "This example demonstrates how HTML components will work\n";
-
Printf.printf "once the tailwind-html library is fully implemented.\n\n";
-
-
Printf.printf "The tailwind-html library will provide:\n";
-
Printf.printf " - Pre-built button components\n";
-
Printf.printf " - Card layouts\n";
-
Printf.printf " - Form components\n";
-
Printf.printf " - Navigation patterns\n";
-
Printf.printf " - Modal dialogs\n";
-
Printf.printf " - And more!\n\n";
-
-
Printf.printf "For now, you can build these components manually using\n";
-
Printf.printf "the core Tailwind library as shown in the other examples.\n"
···