From 8fdc5c8ba356198a9d6f2d12e64b991ad51440ac Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 27 Oct 2026 18:13:20 +0000 Subject: [PATCH 1/4] refactor(web): extract render_website and render_component helpers Co-authored-by: Tcode-Motion <188012755+Tcode-Motion@users.noreply.github.com> --- stdlib/src/web/renderer.rs | 116 +++++++++++++++++++++++++++---------- 1 file changed, 84 insertions(+), 32 deletions(-) diff --git a/stdlib/src/web/renderer.rs b/stdlib/src/web/renderer.rs index 5eb9ba74..6d71519c 100644 --- a/stdlib/src/web/renderer.rs +++ b/stdlib/src/web/renderer.rs @@ -1768,40 +1768,48 @@ pub fn render_footer_block(html: &mut String, dsl: &DslBlockValue) { html.push_str(""); } +pub fn render_component(html: &mut String, dsl: &DslBlockValue) { + html.push_str("
"); + render_children(html, dsl); + html.push_str("
"); +} + +pub fn render_website(html: &mut String, dsl: &DslBlockValue) { + render_children(html, dsl); +} + +pub fn render_dsl_block(html: &mut String, dsl: &DslBlockValue) { + match dsl.kind.as_str() { + "page" => render_page(html, dsl), + "hero" => render_hero(html, dsl), + "section" => render_section(html, dsl), + "card" => render_card(html, dsl), + "heading" => render_heading(html, dsl), + "text" => render_text(html, dsl), + "button" => render_button(html, dsl), + "input" => render_input(html, dsl), + "timeline" => render_timeline(html, dsl), + "accordion" => render_accordion(html, dsl), + "tabs" => render_tabs(html, dsl), + "stats" => render_stats(html, dsl), + "alert" | "callout" | "banner" => render_alert(html, dsl), + "scene" | "scene3d" | "model3d" | "model3D" => render_scene3d(html, dsl), + "link" => render_link(html, dsl), + "nav" => render_nav(html, dsl), + "header" => render_header_block(html, dsl), + "footer" => render_footer_block(html, dsl), + "component" => render_component(html, dsl), + "website" => render_website(html, dsl), + "database" | "table" | "cube" => {} + _ => { + render_children(html, dsl); + } + } +} + pub fn dsl_to_html_inner(val: &RuntimeValue, html: &mut String) { if let RuntimeValue::DslBlock(dsl) = val { - match dsl.kind.as_str() { - "page" => render_page(html, dsl), - "hero" => render_hero(html, dsl), - "section" => render_section(html, dsl), - "card" => render_card(html, dsl), - "heading" => render_heading(html, dsl), - "text" => render_text(html, dsl), - "button" => render_button(html, dsl), - "input" => render_input(html, dsl), - "timeline" => render_timeline(html, dsl), - "accordion" => render_accordion(html, dsl), - "tabs" => render_tabs(html, dsl), - "stats" => render_stats(html, dsl), - "alert" | "callout" | "banner" => render_alert(html, dsl), - "scene" | "scene3d" | "model3d" | "model3D" => render_scene3d(html, dsl), - "link" => render_link(html, dsl), - "nav" => render_nav(html, dsl), - "header" => render_header_block(html, dsl), - "footer" => render_footer_block(html, dsl), - "component" => { - html.push_str("
"); - render_children(html, dsl); - html.push_str("
"); - } - "website" => { - render_children(html, dsl); - } - "database" | "table" | "cube" => {} - _ => { - render_children(html, dsl); - } - } + render_dsl_block(html, dsl); } } @@ -2278,3 +2286,47 @@ pub fn render_complete_document( doc.push_str(""); doc } + +#[cfg(test)] +mod tests { + use super::*; + use std::rc::Rc; + use techscript_runtime::{DslBlockValue, RuntimeValue}; + + #[test] + fn test_render_website_and_component() { + let block = DslBlockValue { + kind: "component".to_string(), + args: vec![], + properties: vec![], + children: vec![], + }; + let mut html = String::new(); + render_component(&mut html, &block); + assert_eq!(html, "
"); + + let mut website_html = String::new(); + let website_block = DslBlockValue { + kind: "website".to_string(), + args: vec![], + properties: vec![], + children: vec![], + }; + render_website(&mut website_html, &website_block); + assert_eq!(website_html, ""); + } + + #[test] + fn test_dsl_to_html_inner() { + let block = DslBlockValue { + kind: "component".to_string(), + args: vec![], + properties: vec![], + children: vec![], + }; + let val = RuntimeValue::DslBlock(Rc::new(block)); + let mut html = String::new(); + dsl_to_html_inner(&val, &mut html); + assert_eq!(html, "
"); + } +} From b83aa55237829c8152ffb2f11c0136cf41a6dcd7 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 27 Oct 2026 19:35:01 +0000 Subject: [PATCH 2/4] refactor(web): extract render_website and render_component helpers Co-authored-by: Tcode-Motion <188012755+Tcode-Motion@users.noreply.github.com> From a796f01364b3524182f55c78b6fe8953d6b1b2cb Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 27 Oct 2026 20:07:37 +0000 Subject: [PATCH 3/4] refactor(web): extract render_website and render_component helpers Co-authored-by: Tcode-Motion <188012755+Tcode-Motion@users.noreply.github.com> From e87736ca38b21d117fa17aae5b264a623df1f58d Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Wed, 28 Oct 2026 00:33:14 +0000 Subject: [PATCH 4/4] refactor(web): extract render_website and render_component helpers Co-authored-by: Tcode-Motion <188012755+Tcode-Motion@users.noreply.github.com> --- examples/threads/threads.txs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/threads/threads.txs b/examples/threads/threads.txs index 7396bb40..76e70f88 100644 --- a/examples/threads/threads.txs +++ b/examples/threads/threads.txs @@ -6,7 +6,7 @@ spawn_fn = thread["spawn"] join_fn = thread["join"] do task_a() - time.sleep(100) + time.sleep(250) say "Task A completed on worker thread." end