Legend:
Page
Library
Module
Module type
Parameter
Class
Class type
Source
Page
Library
Module
Module type
Parameter
Class
Class type
Source
JSX.list, so components receive JSX.element for both single and multiple children. JSX.fragment now accepts JSX.element to follow the same convention. (@davesnx)JSX.stringf -> JSX.format (@davesnx)JSX.string children inside fragments: <> {JSX.string("<script>")} </> was inlined without HTML-encoding (@davesnx)?spellcheck) when the static optimization is disabled (@davesnx)JSX.list (@davesnx)JSX.render_streaming now streams for real: chunks are emitted incrementally every ?chunk_size bytes (default 4096) instead of buffering the whole document (@davesnx)JSX.escape copies runs of clean characters in bulk instead of char-by-char after the first escape; JSX.render returns clean strings and int/float elements without buffer copies (@davesnx)-disable-static-opt or fallback) no longer allocates Some/filter_map wrappers when no optional attribute is present (@davesnx)large-mixed compile-time fixture that guards against PPX attribute-lookup regressions (@davesnx)JSX.render: Unsafe/Null/String elements skip the intermediate buffer entirely, making rendering of fully optimized trees free (@davesnx)data-attributes being rendered as data_-attributes (@davesnx)JSX.pp for pretty-printing HTML with indentation, powered by pretty_expressive (@davesnx)JSX.stringf for escaped Printf-style text formatting and teach the PPX to optimize literal-only stringf calls at compile time (@davesnx)JSX.write by replacing iterator-heavy paths with direct recursion and indexed array traversal (@davesnx)1024 -> 256) and improve PPX-generated buffer capacity estimation for dynamic/optional attribute code paths (@davesnx)ppx/static_analysis.ml to avoid buffer work when no escaping is required (@davesnx)JSX.node (@davesnx)html_of_jsx.htmx library with script and extension supportPolyvariant attribute type for type-safe enumerated HTML attributes (e.g. target, loading, dir, role, ARIA attributes, SVG attributes)-disable-static-opt flag to disable static HTML optimization (use JSX.node for all elements) (@davesnx)JSX.Debug module (the opaque JSX.element type is no longer inspectable) (@davesnx)' (@davesnx)" (from " to ") (@davesnx)JSX.render (@davesnx)Fragment in favor of JSX.list (@davesnx)Component (unit -> element) since it isn't needed (@davesnx)Html_of_jsx.render lives under JSX.render (removing the Html_of_jsx module entirely) (@lessp)Jsx is turned into JSX (@lessp)html_of_jsx instead of (html_of_jsx.lib) (@lessp)JSX.element is opaque (can't see the type from outside), but we have a JSX.Debug module to inspect and re-construct JSX.element (cc @leostera) (@lessp)JSX.render (@lessp)hx-trigger to htmx ppx #13 (@lessp)htmlFor -> for_ (@lessp)Jsx.unsafe to allow unsafe HTML as childrenhtml_of_jsx.ppx -htmxclassName, no htmlFor, no onChange, etc...)Minimal
Html_of_jsx.render to render an element to HTMLJsx.* to construct DOM Elements and DOM nodes (Jsx.text, Jsx.int, Jsx.null, Jsx.list)html_of_jsx.ppx -htmx)