[{"data":1,"prerenderedAt":4001},["ShallowReactive",2],{"bml-reference-grammar":3},{"data":4,"body":5},{},{"type":6,"children":7},"root",[8,17,40,108,112,119,166,177,182,296,301,373,385,388,394,401,444,450,459,495,501,510,528,534,543,646,652,698,721,727,736,741,744,750,756,765,888,894,903,1052,1058,1067,1119,1122,1128,1140,1158,1167,1377,1390,1399,1725,1746,1905,1911,1920,1966,1983,1992,2103,2109,2118,2339,2356,2365,2550,2560,2569,2805,2808,2814,3045,3048,3060,3083,3235,3265,3268,3274,3279,3340,3386,3421,3424,3430,3482,3485,3505,3565,3575,3586,3619,3656,3665,3676,3719,3787,3822,3852,3855,3861,3872,3881,3929,3932,3938],{"type":9,"tag":10,"props":11,"children":13},"element","h1",{"id":12},"bml-grammar-v1",[14],{"type":15,"value":16},"text","BML Grammar (v1)",{"type":9,"tag":18,"props":19,"children":20},"p",{},[21,23,30,32,38],{"type":15,"value":22},"This is the canonical grammar for ",{"type":9,"tag":24,"props":25,"children":27},"code",{"className":26},"",[28],{"type":15,"value":29},".bml",{"type":15,"value":31}," source files. It is the contract the\nfrontend parser (BML-REQ-4) implements and the compiler plugin (BML-REQ-6\u002F7)\nlowers. See ",{"type":9,"tag":33,"props":34,"children":35},"strong",{},[36],{"type":15,"value":37},"BML-SPEC-1",{"type":15,"value":39}," for the surrounding design.",{"type":9,"tag":18,"props":41,"children":42},{},[43,45,50,52,57,59,64,66,71,73,78,80,85,87,92,94,99,101,106],{"type":15,"value":44},"Notation: ",{"type":9,"tag":24,"props":46,"children":47},{"className":26},[48],{"type":15,"value":49},"::=",{"type":15,"value":51}," defines a production; ",{"type":9,"tag":24,"props":53,"children":54},{"className":26},[55],{"type":15,"value":56},"|",{"type":15,"value":58}," alternation; ",{"type":9,"tag":24,"props":60,"children":61},{"className":26},[62],{"type":15,"value":63},"*",{"type":15,"value":65}," zero-or-more; ",{"type":9,"tag":24,"props":67,"children":68},{"className":26},[69],{"type":15,"value":70},"+",{"type":15,"value":72},"\none-or-more; ",{"type":9,"tag":24,"props":74,"children":75},{"className":26},[76],{"type":15,"value":77},"?",{"type":15,"value":79}," optional; ",{"type":9,"tag":24,"props":81,"children":82},{"className":26},[83],{"type":15,"value":84},"( )",{"type":15,"value":86}," grouping; ",{"type":9,"tag":24,"props":88,"children":89},{"className":26},[90],{"type":15,"value":91},"'x'",{"type":15,"value":93}," a literal; ",{"type":9,"tag":24,"props":95,"children":96},{"className":26},[97],{"type":15,"value":98},"UPPER",{"type":15,"value":100}," a lexer\nterminal; ",{"type":9,"tag":24,"props":102,"children":103},{"className":26},[104],{"type":15,"value":105},"« »",{"type":15,"value":107}," a prose constraint.",{"type":9,"tag":109,"props":110,"children":111},"hr",{},[],{"type":9,"tag":113,"props":114,"children":116},"h2",{"id":115},"_1-overview-file-kinds",[117],{"type":15,"value":118},"1. Overview & file kinds",{"type":9,"tag":18,"props":120,"children":121},{},[122,124,128,130,135,137,142,144,149,151,157,159,164],{"type":15,"value":123},"A ",{"type":9,"tag":24,"props":125,"children":126},{"className":26},[127],{"type":15,"value":29},{"type":15,"value":129}," file is UTF-8 text. It contains a sequence of ",{"type":9,"tag":33,"props":131,"children":132},{},[133],{"type":15,"value":134},"top-level nodes",{"type":15,"value":136},": any\nnumber of file-scoped ",{"type":9,"tag":33,"props":138,"children":139},{},[140],{"type":15,"value":141},"code regions",{"type":15,"value":143}," plus exactly one ",{"type":9,"tag":33,"props":145,"children":146},{},[147],{"type":15,"value":148},"primary declaration",{"type":15,"value":150},"\n(a page, route, or message), ",{"type":9,"tag":152,"props":153,"children":154},"em",{},[155],{"type":15,"value":156},"or",{"type":15,"value":158}," one-or-more ",{"type":9,"tag":33,"props":160,"children":161},{},[162],{"type":15,"value":163},"component declarations",{"type":15,"value":165},".",{"type":9,"tag":167,"props":168,"children":172},"pre",{"className":169,"code":171,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"language-text","File          ::= Bom? TopLevelNode*\nTopLevelNode  ::= CodeRegion | Page | Route | Message | Component | Comment | Text«ws-only»\n",[173],{"type":9,"tag":24,"props":174,"children":175},{"__ignoreMap":26},[176],{"type":15,"value":171},{"type":9,"tag":18,"props":178,"children":179},{},[180],{"type":15,"value":181},"Constraints:",{"type":9,"tag":183,"props":184,"children":185},"ul",{},[186,231,260,291],{"type":9,"tag":187,"props":188,"children":189},"li",{},[190,192,197,199,204,206,211,213,218,223,225,229],{"type":15,"value":191},"A file MUST contain ",{"type":9,"tag":33,"props":193,"children":194},{},[195],{"type":15,"value":196},"at most one routable declaration",{"type":15,"value":198}," (",{"type":9,"tag":24,"props":200,"children":201},{"className":26},[202],{"type":15,"value":203},"Page",{"type":15,"value":205}," or ",{"type":9,"tag":24,"props":207,"children":208},{"className":26},[209],{"type":15,"value":210},"Route",{"type":15,"value":212},") and ",{"type":9,"tag":33,"props":214,"children":215},{},[216],{"type":15,"value":217},"at most one",{"type":9,"tag":24,"props":219,"children":220},{"className":26},[221],{"type":15,"value":222},"Message",{"type":15,"value":224},"; a routable declaration and a ",{"type":9,"tag":24,"props":226,"children":227},{"className":26},[228],{"type":15,"value":222},{"type":15,"value":230}," MUST NOT share a file (one render unit per file).",{"type":9,"tag":187,"props":232,"children":233},{},[234,236,241,243,247,249,253,255,259],{"type":15,"value":235},"A file containing ",{"type":9,"tag":24,"props":237,"children":238},{"className":26},[239],{"type":15,"value":240},"Component",{"type":15,"value":242}," declarations MUST NOT also contain a ",{"type":9,"tag":24,"props":244,"children":245},{"className":26},[246],{"type":15,"value":203},{"type":15,"value":248},", ",{"type":9,"tag":24,"props":250,"children":251},{"className":26},[252],{"type":15,"value":210},{"type":15,"value":254},", or ",{"type":9,"tag":24,"props":256,"children":257},{"className":26},[258],{"type":15,"value":222},{"type":15,"value":165},{"type":9,"tag":187,"props":261,"children":262},{},[263,265,270,272,277,278,283,284,289],{"type":15,"value":264},"File-scoped ",{"type":9,"tag":24,"props":266,"children":267},{"className":26},[268],{"type":15,"value":269},"CodeRegion",{"type":15,"value":271},"s (",{"type":9,"tag":24,"props":273,"children":274},{"className":26},[275],{"type":15,"value":276},"\u003Cscript server>",{"type":15,"value":248},{"type":9,"tag":24,"props":279,"children":280},{"className":26},[281],{"type":15,"value":282},"\u003Cscript client>",{"type":15,"value":248},{"type":9,"tag":24,"props":285,"children":286},{"className":26},[287],{"type":15,"value":288},"\u003Ccontract>",{"type":15,"value":290},")\napply to the file's primary declaration's scope.",{"type":9,"tag":187,"props":292,"children":293},{},[294],{"type":15,"value":295},"Non-whitespace text at top level is an error.",{"type":9,"tag":18,"props":297,"children":298},{},[299],{"type":15,"value":300},"File kinds (by content), used for tooling\u002Frouting:",{"type":9,"tag":183,"props":302,"children":303},{},[304,327,356],{"type":9,"tag":187,"props":305,"children":306},{},[307,312,314,319,320,325],{"type":9,"tag":33,"props":308,"children":309},{},[310],{"type":15,"value":311},"Routable file",{"type":15,"value":313}," — has a ",{"type":9,"tag":24,"props":315,"children":316},{"className":26},[317],{"type":15,"value":318},"\u003Cpage route=\"…\">",{"type":15,"value":205},{"type":9,"tag":24,"props":321,"children":322},{"className":26},[323],{"type":15,"value":324},"\u003Croute path=\"…\">",{"type":15,"value":326},". An SSR response entry point.",{"type":9,"tag":187,"props":328,"children":329},{},[330,335,336,341,343,348,349,354],{"type":9,"tag":33,"props":331,"children":332},{},[333],{"type":15,"value":334},"Message file",{"type":15,"value":313},{"type":9,"tag":24,"props":337,"children":338},{"className":26},[339],{"type":15,"value":340},"\u003Cmessage key=\"…\">",{"type":15,"value":342}," containing ",{"type":9,"tag":24,"props":344,"children":345},{"className":26},[346],{"type":15,"value":347},"\u003Cemail>",{"type":15,"value":248},{"type":9,"tag":24,"props":350,"children":351},{"className":26},[352],{"type":15,"value":353},"\u003Cpush>",{"type":15,"value":355},", or both.",{"type":9,"tag":187,"props":357,"children":358},{},[359,364,366,371],{"type":9,"tag":33,"props":360,"children":361},{},[362],{"type":15,"value":363},"Component file",{"type":15,"value":365}," — has one or more ",{"type":9,"tag":24,"props":367,"children":368},{"className":26},[369],{"type":15,"value":370},"\u003Ccomponent tag=\"…\">",{"type":15,"value":372},". Defines\u002Foverrides tags.",{"type":9,"tag":18,"props":374,"children":375},{},[376,378,383],{"type":15,"value":377},"Template and ",{"type":9,"tag":24,"props":379,"children":380},{"className":26},[381],{"type":15,"value":382},"layout=",{"type":15,"value":384}," syntax remains reserved, but the current compiler does not generate template\nrenderers or wrap pages in layouts. A routable file therefore owns its complete HTML document.",{"type":9,"tag":109,"props":386,"children":387},{},[],{"type":9,"tag":113,"props":389,"children":391},{"id":390},"_2-lexical-structure",[392],{"type":15,"value":393},"2. Lexical structure",{"type":9,"tag":395,"props":396,"children":398},"h3",{"id":397},"_21-whitespace-encoding",[399],{"type":15,"value":400},"2.1 Whitespace & encoding",{"type":9,"tag":183,"props":402,"children":403},{},[404,409,439],{"type":9,"tag":187,"props":405,"children":406},{},[407],{"type":15,"value":408},"Source is UTF-8; an optional leading BOM is ignored.",{"type":9,"tag":187,"props":410,"children":411},{},[412,414,419,420,425,426,431,433,437],{"type":15,"value":413},"Line terminators: ",{"type":9,"tag":24,"props":415,"children":416},{"className":26},[417],{"type":15,"value":418},"\\n",{"type":15,"value":248},{"type":9,"tag":24,"props":421,"children":422},{"className":26},[423],{"type":15,"value":424},"\\r\\n",{"type":15,"value":248},{"type":9,"tag":24,"props":427,"children":428},{"className":26},[429],{"type":15,"value":430},"\\r",{"type":15,"value":432}," (normalized to ",{"type":9,"tag":24,"props":434,"children":435},{"className":26},[436],{"type":15,"value":418},{"type":15,"value":438}," for offsets, but raw\nbytes are preserved inside raw-text regions).",{"type":9,"tag":187,"props":440,"children":441},{},[442],{"type":15,"value":443},"Whitespace inside text is preserved by the lexer; the renderer (REQ-11) MAY\ncollapse runs per target. Whitespace between sibling non-inline tags is not\nsemantically significant.",{"type":9,"tag":395,"props":445,"children":447},{"id":446},"_22-comments",[448],{"type":15,"value":449},"2.2 Comments",{"type":9,"tag":167,"props":451,"children":454},{"className":452,"code":453,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Comment       ::= HtmlComment | BmlComment\nHtmlComment   ::= '\u003C!--' «any, not containing '-->'» '-->'\nBmlComment    ::= '{#' «any, not containing '#}'» '#}'\n",[455],{"type":9,"tag":24,"props":456,"children":457},{"__ignoreMap":26},[458],{"type":15,"value":453},{"type":9,"tag":183,"props":460,"children":461},{},[462,479],{"type":9,"tag":187,"props":463,"children":464},{},[465,470,472,477],{"type":9,"tag":24,"props":466,"children":467},{"className":26},[468],{"type":15,"value":469},"HtmlComment",{"type":15,"value":471}," is ",{"type":9,"tag":33,"props":473,"children":474},{},[475],{"type":15,"value":476},"emitted",{"type":15,"value":478}," to HTML output (unless the target strips it).",{"type":9,"tag":187,"props":480,"children":481},{},[482,487,488,493],{"type":9,"tag":24,"props":483,"children":484},{"className":26},[485],{"type":15,"value":486},"BmlComment",{"type":15,"value":471},{"type":9,"tag":33,"props":489,"children":490},{},[491],{"type":15,"value":492},"build-only",{"type":15,"value":494}," and never emitted. Valid anywhere a node or\nattribute may appear.",{"type":9,"tag":395,"props":496,"children":498},{"id":497},"_23-text-escapes",[499],{"type":15,"value":500},"2.3 Text & escapes",{"type":9,"tag":167,"props":502,"children":505},{"className":503,"code":504,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Text          ::= (TextChar | Escape | Entity)+\nTextChar      ::= «any char except '\u003C', '{', '\\', and '#}' \u002F '{#' starts»\nEscape        ::= '\\{' | '\\}' | '\\\u003C' | '\\\\'        « -> literal { } \u003C \\ »\nEntity        ::= '&' Name ';' | '&#' Digit+ ';' | '&#x' HexDigit+ ';'\n",[506],{"type":9,"tag":24,"props":507,"children":508},{"__ignoreMap":26},[509],{"type":15,"value":504},{"type":9,"tag":18,"props":511,"children":512},{},[513,515,520,521,526],{"type":15,"value":514},"HTML entities pass through unchanged. To emit a literal ",{"type":9,"tag":24,"props":516,"children":517},{"className":26},[518],{"type":15,"value":519},"{",{"type":15,"value":205},{"type":9,"tag":24,"props":522,"children":523},{"className":26},[524],{"type":15,"value":525},"\u003C",{"type":15,"value":527},", use the\nbackslash escape.",{"type":9,"tag":395,"props":529,"children":531},{"id":530},"_24-expressions-server-evaluated",[532],{"type":15,"value":533},"2.4 Expressions (server-evaluated)",{"type":9,"tag":167,"props":535,"children":538},{"className":536,"code":537,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Interp        ::= '{' Expr '}'           « HTML-escaped output »\nInterpRaw     ::= '{@' Expr '}'          « unescaped\u002Fraw HTML output (trusted) »\n",[539],{"type":9,"tag":24,"props":540,"children":541},{"__ignoreMap":26},[542],{"type":15,"value":537},{"type":9,"tag":183,"props":544,"children":545},{},[546,563,609],{"type":9,"tag":187,"props":547,"children":548},{},[549,554,556,561],{"type":9,"tag":24,"props":550,"children":551},{"className":26},[552],{"type":15,"value":553},"Expr",{"type":15,"value":555}," is the ",{"type":9,"tag":33,"props":557,"children":558},{},[559],{"type":15,"value":560},"expression sublanguage",{"type":15,"value":562}," (§6); it evaluates server-side\nagainst the current scope and lowers to Kotlin.",{"type":9,"tag":187,"props":564,"children":565},{},[566,568,573,575,580,582,587,589,594,596,601,602,607],{"type":15,"value":567},"The ",{"type":9,"tag":24,"props":569,"children":570},{"className":26},[571],{"type":15,"value":572},"{ … }",{"type":15,"value":574}," braces balance with respect to Kotlin string\u002Fchar literals and\nnested ",{"type":9,"tag":24,"props":576,"children":577},{"className":26},[578],{"type":15,"value":579},"{}",{"type":15,"value":581},"; a ",{"type":9,"tag":24,"props":583,"children":584},{"className":26},[585],{"type":15,"value":586},"}",{"type":15,"value":588}," inside a ",{"type":9,"tag":24,"props":590,"children":591},{"className":26},[592],{"type":15,"value":593},"\"…\"",{"type":15,"value":595},"\u002F",{"type":9,"tag":24,"props":597,"children":598},{"className":26},[599],{"type":15,"value":600},"'…'",{"type":15,"value":595},{"type":9,"tag":24,"props":603,"children":604},{"className":26},[605],{"type":15,"value":606},"\"\"\"…\"\"\"",{"type":15,"value":608}," literal does not close the\ninterpolation.",{"type":9,"tag":187,"props":610,"children":611},{},[612,617,618,623,625,630,632,637,639,644],{"type":9,"tag":24,"props":613,"children":614},{"className":26},[615],{"type":15,"value":616},"Interp",{"type":15,"value":595},{"type":9,"tag":24,"props":619,"children":620},{"className":26},[621],{"type":15,"value":622},"InterpRaw",{"type":15,"value":624}," may appear in ",{"type":9,"tag":24,"props":626,"children":627},{"className":26},[628],{"type":15,"value":629},"Text",{"type":15,"value":631}," and inside ",{"type":9,"tag":33,"props":633,"children":634},{},[635],{"type":15,"value":636},"static",{"type":15,"value":638}," attribute\nvalues (§3.2). Whole-value dynamic binding uses ",{"type":9,"tag":24,"props":640,"children":641},{"className":26},[642],{"type":15,"value":643},":name=\"expr\"",{"type":15,"value":645},", not braces.",{"type":9,"tag":395,"props":647,"children":649},{"id":648},"_25-raw-text-regions",[650],{"type":15,"value":651},"2.5 Raw-text regions",{"type":9,"tag":18,"props":653,"children":654},{},[655,657,662,663,668,670,675,677,682,684,689,691,696],{"type":15,"value":656},"The content of ",{"type":9,"tag":24,"props":658,"children":659},{"className":26},[660],{"type":15,"value":661},"script",{"type":15,"value":248},{"type":9,"tag":24,"props":664,"children":665},{"className":26},[666],{"type":15,"value":667},"contract",{"type":15,"value":669},", and ",{"type":9,"tag":24,"props":671,"children":672},{"className":26},[673],{"type":15,"value":674},"style",{"type":15,"value":676}," elements is ",{"type":9,"tag":33,"props":678,"children":679},{},[680],{"type":15,"value":681},"raw text",{"type":15,"value":683},": the\nlexer does not parse markup or expressions inside them. A raw-text region ends\nat the first matching end tag ",{"type":9,"tag":24,"props":685,"children":686},{"className":26},[687],{"type":15,"value":688},"\u003C\u002Fname …>",{"type":15,"value":690}," (case-insensitive ",{"type":9,"tag":24,"props":692,"children":693},{"className":26},[694],{"type":15,"value":695},"name",{"type":15,"value":697},"). The exact\nbyte span of the content is recorded for source maps (§10).",{"type":9,"tag":699,"props":700,"children":701},"blockquote",{},[702],{"type":9,"tag":18,"props":703,"children":704},{},[705,707,712,714,719],{"type":15,"value":706},"Embedded Kotlin\u002FTS that must contain the literal sequence ",{"type":9,"tag":24,"props":708,"children":709},{"className":26},[710],{"type":15,"value":711},"\u003C\u002Fscript>",{"type":15,"value":713}," inside a\nstring should split it (",{"type":9,"tag":24,"props":715,"children":716},{"className":26},[717],{"type":15,"value":718},"\"\u003C\u002Fscr\" + \"ipt>\"",{"type":15,"value":720},"); the parser follows the HTML\nraw-text rule and would otherwise terminate early. (Tracked for REQ-4.)",{"type":9,"tag":395,"props":722,"children":724},{"id":723},"_26-names",[725],{"type":15,"value":726},"2.6 Names",{"type":9,"tag":167,"props":728,"children":731},{"className":729,"code":730,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Name          ::= NameStart NameChar*\nNameStart     ::= Letter | '_'\nNameChar      ::= Letter | Digit | '-' | '_' | '.'\n",[732],{"type":9,"tag":24,"props":733,"children":734},{"__ignoreMap":26},[735],{"type":15,"value":730},{"type":9,"tag":18,"props":737,"children":738},{},[739],{"type":15,"value":740},"Tag and attribute names are case-sensitive. Built-in HTML tag names are lower-case.",{"type":9,"tag":109,"props":742,"children":743},{},[],{"type":9,"tag":113,"props":745,"children":747},{"id":746},"_3-grammar",[748],{"type":15,"value":749},"3. Grammar",{"type":9,"tag":395,"props":751,"children":753},{"id":752},"_31-elements",[754],{"type":15,"value":755},"3.1 Elements",{"type":9,"tag":167,"props":757,"children":760},{"className":758,"code":759,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Node          ::= Element | RawElement | Control | Comment | Interp | InterpRaw | Text\nElement       ::= '\u003C' QName Attr* ( '\u002F>' | '>' Node* '\u003C\u002F' QName '>' )\nRawElement    ::= ScriptServer | ScriptClient | Contract | Style\nQName         ::= ( Name ':' )? Name        « native namespaces: `html:` and `svg:` »\n",[761],{"type":9,"tag":24,"props":762,"children":763},{"__ignoreMap":26},[764],{"type":15,"value":759},{"type":9,"tag":183,"props":766,"children":767},{},[768,780,797,822,847],{"type":9,"tag":187,"props":769,"children":770},{},[771,773,778],{"type":15,"value":772},"Void\u002Fself-closing form ",{"type":9,"tag":24,"props":774,"children":775},{"className":26},[776],{"type":15,"value":777},"\u003Cname … \u002F>",{"type":15,"value":779}," has no children.",{"type":9,"tag":187,"props":781,"children":782},{},[783,785,790,792,796],{"type":15,"value":784},"The end-tag ",{"type":9,"tag":24,"props":786,"children":787},{"className":26},[788],{"type":15,"value":789},"QName",{"type":15,"value":791}," MUST match the start-tag ",{"type":9,"tag":24,"props":793,"children":794},{"className":26},[795],{"type":15,"value":789},{"type":15,"value":165},{"type":9,"tag":187,"props":798,"children":799},{},[800,801,806,808,813,815,820],{"type":15,"value":123},{"type":9,"tag":24,"props":802,"children":803},{"className":26},[804],{"type":15,"value":805},"html:",{"type":15,"value":807},"-prefixed name (e.g. ",{"type":9,"tag":24,"props":809,"children":810},{"className":26},[811],{"type":15,"value":812},"\u003Chtml:a>",{"type":15,"value":814},") always resolves to the ",{"type":9,"tag":33,"props":816,"children":817},{},[818],{"type":15,"value":819},"built-in\nHTML",{"type":15,"value":821}," handler, bypassing any override — see §7.",{"type":9,"tag":187,"props":823,"children":824},{},[825,826,831,833,838,840,845],{"type":15,"value":123},{"type":9,"tag":24,"props":827,"children":828},{"className":26},[829],{"type":15,"value":830},"svg:",{"type":15,"value":832},"-prefixed name always resolves to the native SVG handler. Inside ",{"type":9,"tag":24,"props":834,"children":835},{"className":26},[836],{"type":15,"value":837},"\u003Csvg>",{"type":15,"value":839},", the complete\nSVG element vocabulary resolves natively as well (including filters, gradients, masks, and ",{"type":9,"tag":24,"props":841,"children":842},{"className":26},[843],{"type":15,"value":844},"\u003Cuse>",{"type":15,"value":846},").",{"type":9,"tag":187,"props":848,"children":849},{},[850,852,857,858,863,864,869,870,875,876,880,881,886],{"type":15,"value":851},"HTML void elements (",{"type":9,"tag":24,"props":853,"children":854},{"className":26},[855],{"type":15,"value":856},"br",{"type":15,"value":248},{"type":9,"tag":24,"props":859,"children":860},{"className":26},[861],{"type":15,"value":862},"img",{"type":15,"value":248},{"type":9,"tag":24,"props":865,"children":866},{"className":26},[867],{"type":15,"value":868},"meta",{"type":15,"value":248},{"type":9,"tag":24,"props":871,"children":872},{"className":26},[873],{"type":15,"value":874},"link",{"type":15,"value":248},{"type":9,"tag":24,"props":877,"children":878},{"className":26},[879],{"type":15,"value":109},{"type":15,"value":248},{"type":9,"tag":24,"props":882,"children":883},{"className":26},[884],{"type":15,"value":885},"input",{"type":15,"value":887},", …) MAY omit\nthe closing slash and have no children.",{"type":9,"tag":395,"props":889,"children":891},{"id":890},"_32-attributes",[892],{"type":15,"value":893},"3.2 Attributes",{"type":9,"tag":167,"props":895,"children":898},{"className":896,"code":897,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Attr          ::= StaticAttr | BoundAttr | EventAttr | Spread\nStaticAttr    ::= Name ( '=' AttrValue )?\nAttrValue     ::= '\"' (AttrText | Interp | InterpRaw)* '\"'\n                | '\\'' (AttrText | Interp | InterpRaw)* '\\''\nBoundAttr     ::= ':' Name '=' ( '\"' Expr '\"' | '\\'' Expr '\\'' )\nEventAttr     ::= '@' Name ('.' EventModifier)* '=' ( '\"' Expr '\"' | '\\'' Expr '\\'' )\nEventModifier ::= 'debounce' '.' NonNegativeInteger | 'throttle' '.' NonNegativeInteger\n                | 'coalesce' | 'keepalive' | 'pagehide'\nSpread        ::= '{' '...' Expr '}'             « spread a Map\u003CString,Any?> of attrs »\n",[899],{"type":9,"tag":24,"props":900,"children":901},{"__ignoreMap":26},[902],{"type":15,"value":897},{"type":9,"tag":183,"props":904,"children":905},{},[906,936,991,1014],{"type":9,"tag":187,"props":907,"children":908},{},[909,914,916,921,923,928,930,935],{"type":9,"tag":33,"props":910,"children":911},{},[912],{"type":15,"value":913},"Static",{"type":15,"value":915}," ",{"type":9,"tag":24,"props":917,"children":918},{"className":26},[919],{"type":15,"value":920},"name=\"literal\"",{"type":15,"value":922}," — the value is a literal that MAY contain ",{"type":9,"tag":24,"props":924,"children":925},{"className":26},[926],{"type":15,"value":927},"{ expr }",{"type":15,"value":929},"\ninterpolations: ",{"type":9,"tag":24,"props":931,"children":932},{"className":26},[933],{"type":15,"value":934},"class=\"card card-{ size }\"",{"type":15,"value":165},{"type":9,"tag":187,"props":937,"children":938},{},[939,944,945,949,951,956,958,963,964,969,971,976,977,982,984,989],{"type":9,"tag":33,"props":940,"children":941},{},[942],{"type":15,"value":943},"Bound",{"type":15,"value":915},{"type":9,"tag":24,"props":946,"children":947},{"className":26},[948],{"type":15,"value":643},{"type":15,"value":950}," — the quoted value is a single server ",{"type":9,"tag":33,"props":952,"children":953},{},[954],{"type":15,"value":955},"expression",{"type":15,"value":957},"\n(no braces): ",{"type":9,"tag":24,"props":959,"children":960},{"className":26},[961],{"type":15,"value":962},":href=\"user.url\"",{"type":15,"value":248},{"type":9,"tag":24,"props":965,"children":966},{"className":26},[967],{"type":15,"value":968},":disabled=\"isLocked\"",{"type":15,"value":970},". A boolean expression\nthat is ",{"type":9,"tag":24,"props":972,"children":973},{"className":26},[974],{"type":15,"value":975},"false",{"type":15,"value":595},{"type":9,"tag":24,"props":978,"children":979},{"className":26},[980],{"type":15,"value":981},"null",{"type":15,"value":983}," omits the attribute; ",{"type":9,"tag":24,"props":985,"children":986},{"className":26},[987],{"type":15,"value":988},"true",{"type":15,"value":990}," renders the bare name.",{"type":9,"tag":187,"props":992,"children":993},{},[994,999,1000,1005,1007,1012],{"type":9,"tag":33,"props":995,"children":996},{},[997],{"type":15,"value":998},"Spread",{"type":15,"value":915},{"type":9,"tag":24,"props":1001,"children":1002},{"className":26},[1003],{"type":15,"value":1004},"{...expr}",{"type":15,"value":1006}," — merges a ",{"type":9,"tag":24,"props":1008,"children":1009},{"className":26},[1010],{"type":15,"value":1011},"Map\u003CString, Any?>",{"type":15,"value":1013}," of attributes.",{"type":9,"tag":187,"props":1015,"children":1016},{},[1017,1022,1023,1028,1030,1035,1037,1042,1044,1051],{"type":9,"tag":33,"props":1018,"children":1019},{},[1020],{"type":15,"value":1021},"Event",{"type":15,"value":915},{"type":9,"tag":24,"props":1024,"children":1025},{"className":26},[1026],{"type":15,"value":1027},"@event=\"model.method(…)\"",{"type":15,"value":1029}," dispatches a method on a live server model. Any DOM event is\nsupported; ",{"type":9,"tag":24,"props":1031,"children":1032},{"className":26},[1033],{"type":15,"value":1034},"@submit",{"type":15,"value":1036}," prevents ordinary form submission and resolves ",{"type":9,"tag":24,"props":1038,"children":1039},{"className":26},[1040],{"type":15,"value":1041},"form.\u003Cfield>",{"type":15,"value":1043}," arguments at\nevent time. Scheduling and unload modifiers are described in the ",{"type":9,"tag":1045,"props":1046,"children":1048},"a",{"href":1047},"\u002Fbml-reference\u002Fislands#arguments",[1049],{"type":15,"value":1050},"islands reference",{"type":15,"value":165},{"type":9,"tag":395,"props":1053,"children":1055},{"id":1054},"_33-code-regions",[1056],{"type":15,"value":1057},"3.3 Code regions",{"type":9,"tag":167,"props":1059,"children":1062},{"className":1060,"code":1061,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"ScriptServer  ::= '\u003Cscript' WS 'server' ( WS 'provides' '=' AttrValueStr )? Attr* '>' RAWTEXT '\u003C\u002Fscript>'\nScriptClient  ::= '\u003Cscript' WS 'client' Attr* '>' RAWTEXT '\u003C\u002Fscript>'\nContract      ::= '\u003Ccontract' Attr* '>' RAWTEXT '\u003C\u002Fcontract>'\nStyle         ::= '\u003Cstyle' Attr* '>' RAWTEXT '\u003C\u002Fstyle>'\n",[1063],{"type":9,"tag":24,"props":1064,"children":1065},{"__ignoreMap":26},[1066],{"type":15,"value":1061},{"type":9,"tag":183,"props":1068,"children":1069},{},[1070,1080],{"type":9,"tag":187,"props":1071,"children":1072},{},[1073,1078],{"type":9,"tag":24,"props":1074,"children":1075},{"className":26},[1076],{"type":15,"value":1077},"RAWTEXT",{"type":15,"value":1079}," is captured verbatim (§2.5) with byte offsets.",{"type":9,"tag":187,"props":1081,"children":1082},{},[1083,1087,1089,1094,1096,1100,1101,1106,1108,1112,1113,1118],{"type":9,"tag":24,"props":1084,"children":1085},{"className":26},[1086],{"type":15,"value":276},{"type":15,"value":1088}," body is ",{"type":9,"tag":33,"props":1090,"children":1091},{},[1092],{"type":15,"value":1093},"Kotlin",{"type":15,"value":1095},"; ",{"type":9,"tag":24,"props":1097,"children":1098},{"className":26},[1099],{"type":15,"value":282},{"type":15,"value":1088},{"type":9,"tag":33,"props":1102,"children":1103},{},[1104],{"type":15,"value":1105},"TypeScript",{"type":15,"value":1107},";\n",{"type":9,"tag":24,"props":1109,"children":1110},{"className":26},[1111],{"type":15,"value":288},{"type":15,"value":1088},{"type":9,"tag":33,"props":1114,"children":1115},{},[1116],{"type":15,"value":1117},"Kotlin interface declarations",{"type":15,"value":165},{"type":9,"tag":109,"props":1120,"children":1121},{},[],{"type":9,"tag":113,"props":1123,"children":1125},{"id":1124},"_4-special-tags-semantics",[1126],{"type":15,"value":1127},"4. Special tags (semantics)",{"type":9,"tag":18,"props":1129,"children":1130},{},[1131,1133,1138],{"type":15,"value":1132},"All special tags are ",{"type":9,"tag":33,"props":1134,"children":1135},{},[1136],{"type":15,"value":1137},"protected",{"type":15,"value":1139}," (§7) and cannot be overridden.",{"type":9,"tag":395,"props":1141,"children":1143},{"id":1142},"_41-page-and-route",[1144,1146,1151,1153],{"type":15,"value":1145},"4.1 ",{"type":9,"tag":24,"props":1147,"children":1148},{"className":26},[1149],{"type":15,"value":1150},"\u003Cpage>",{"type":15,"value":1152}," and ",{"type":9,"tag":24,"props":1154,"children":1155},{"className":26},[1156],{"type":15,"value":1157},"\u003Croute>",{"type":9,"tag":167,"props":1159,"children":1162},{"className":1160,"code":1161,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Page          ::= '\u003Cpage' PageAttr+ '>' Node* '\u003C\u002Fpage>'\nPageAttr      ::= 'route' '=' '\"' RoutePattern '\"' | 'contentType' '=' '\"' MIME_TYPE '\"'\n                | 'requireAuth'\n                | 'cache' '=' '\"shared\"' | 'maxAge' '=' '\"' PositiveInteger '\"'\n                | 'staleWhileRevalidate' '=' '\"' PositiveInteger '\"' | Attr\nRoute         ::= '\u003Croute' RouteAttr+ '>' Node* '\u003C\u002Froute>'\nRouteAttr     ::= 'path' '=' '\"' RoutePattern '\"' | 'contentType' '=' '\"' MIME_TYPE '\"'\n                | 'requireAuth'\n                | 'cache' '=' '\"shared\"' | 'maxAge' '=' '\"' PositiveInteger '\"'\n                | 'staleWhileRevalidate' '=' '\"' PositiveInteger '\"' | Attr\nMIME_TYPE     ::= «valid HTTP media type with optional parameters»\nPositiveInteger ::= «decimal integer greater than zero»\nNonNegativeInteger ::= «decimal integer greater than or equal to zero»\nRoutePattern  ::= ('\u002F' Segment)*  '\u002F'?\nSegment       ::= Name | '{' Name ( ':' TypeRef )? '}'\n",[1163],{"type":9,"tag":24,"props":1164,"children":1165},{"__ignoreMap":26},[1166],{"type":15,"value":1161},{"type":9,"tag":183,"props":1168,"children":1169},{},[1170,1207,1223,1268,1285,1301],{"type":9,"tag":187,"props":1171,"children":1172},{},[1173,1178,1180,1185,1187,1192,1194,1199,1201,1206],{"type":9,"tag":24,"props":1174,"children":1175},{"className":26},[1176],{"type":15,"value":1177},"route",{"type":15,"value":1179}," declares the URL pattern. Path params ",{"type":9,"tag":24,"props":1181,"children":1182},{"className":26},[1183],{"type":15,"value":1184},"{name}",{"type":15,"value":1186}," and typed ",{"type":9,"tag":24,"props":1188,"children":1189},{"className":26},[1190],{"type":15,"value":1191},"{name:UUID}",{"type":15,"value":1193},"\nbecome in-scope ",{"type":9,"tag":24,"props":1195,"children":1196},{"className":26},[1197],{"type":15,"value":1198},"val",{"type":15,"value":1200},"s (default type ",{"type":9,"tag":24,"props":1202,"children":1203},{"className":26},[1204],{"type":15,"value":1205},"String",{"type":15,"value":846},{"type":9,"tag":187,"props":1208,"children":1209},{},[1210,1214,1216,1221],{"type":9,"tag":24,"props":1211,"children":1212},{"className":26},[1213],{"type":15,"value":324},{"type":15,"value":1215}," is the response-oriented form of the same routable declaration. Its literal,\nnon-blank ",{"type":9,"tag":24,"props":1217,"children":1218},{"className":26},[1219],{"type":15,"value":1220},"path",{"type":15,"value":1222}," becomes the generated renderer's route and supports the same path params.",{"type":9,"tag":187,"props":1224,"children":1225},{},[1226,1228,1233,1234,1239,1240,1245,1247,1252,1254,1259,1261,1266],{"type":15,"value":1227},"Pages emit exactly the markup in their body and therefore own the full document skeleton, including\n",{"type":9,"tag":24,"props":1229,"children":1230},{"className":26},[1231],{"type":15,"value":1232},"\u003Chtml>",{"type":15,"value":248},{"type":9,"tag":24,"props":1235,"children":1236},{"className":26},[1237],{"type":15,"value":1238},"\u003Chead>",{"type":15,"value":669},{"type":9,"tag":24,"props":1241,"children":1242},{"className":26},[1243],{"type":15,"value":1244},"\u003Ctitle>",{"type":15,"value":1246},". ",{"type":9,"tag":24,"props":1248,"children":1249},{"className":26},[1250],{"type":15,"value":1251},"layout",{"type":15,"value":1253},", page-level ",{"type":9,"tag":24,"props":1255,"children":1256},{"className":26},[1257],{"type":15,"value":1258},"title",{"type":15,"value":1260},", and page-level ",{"type":9,"tag":24,"props":1262,"children":1263},{"className":26},[1264],{"type":15,"value":1265},"render",{"type":15,"value":1267}," attributes\nare reserved but currently have no generated behavior.",{"type":9,"tag":187,"props":1269,"children":1270},{},[1271,1276,1278,1283],{"type":9,"tag":24,"props":1272,"children":1273},{"className":26},[1274],{"type":15,"value":1275},"contentType",{"type":15,"value":1277}," sets the HTTP response media type and defaults to ",{"type":9,"tag":24,"props":1279,"children":1280},{"className":26},[1281],{"type":15,"value":1282},"text\u002Fhtml",{"type":15,"value":1284},". The server applies\nstylesheet, client-script, and development-reload injection only to HTML responses.",{"type":9,"tag":187,"props":1286,"children":1287},{},[1288,1293,1295,1300],{"type":9,"tag":24,"props":1289,"children":1290},{"className":26},[1291],{"type":15,"value":1292},"requireAuth",{"type":15,"value":1294}," redirects a request without a token to the configured sign-in route. It cannot be\ncombined with ",{"type":9,"tag":24,"props":1296,"children":1297},{"className":26},[1298],{"type":15,"value":1299},"cache=\"shared\"",{"type":15,"value":165},{"type":9,"tag":187,"props":1302,"children":1303},{},[1304,1308,1310,1315,1317,1321,1323,1328,1330,1334,1336,1341,1343,1348,1350,1355,1357,1362,1363,1368,1370,1375],{"type":9,"tag":24,"props":1305,"children":1306},{"className":26},[1307],{"type":15,"value":1299},{"type":15,"value":1309}," with a positive ",{"type":9,"tag":24,"props":1311,"children":1312},{"className":26},[1313],{"type":15,"value":1314},"maxAge",{"type":15,"value":1316}," opts a successful HTML shell into shared edge caching.\n",{"type":9,"tag":24,"props":1318,"children":1319},{"className":26},[1320],{"type":15,"value":1314},{"type":15,"value":1322}," is Cloudflare's fresh interval. ",{"type":9,"tag":24,"props":1324,"children":1325},{"className":26},[1326],{"type":15,"value":1327},"staleWhileRevalidate",{"type":15,"value":1329}," is the interval during which\nCloudflare may serve an expired shell while it conditionally refreshes in the background; it\ndefaults to ",{"type":9,"tag":24,"props":1331,"children":1332},{"className":26},[1333],{"type":15,"value":1314},{"type":15,"value":1335},".\nThe shell renders with public\u002Fanonymous context and cannot require authentication, initialize eager\nserver-session state, or evaluate identity-based feature flags. Deferred and action endpoints remain\nprivate and uncacheable. Query values are part of the URL cache key; locale varies by ",{"type":9,"tag":24,"props":1337,"children":1338},{"className":26},[1339],{"type":15,"value":1340},"?lang",{"type":15,"value":1342}," and\n",{"type":9,"tag":24,"props":1344,"children":1345},{"className":26},[1346],{"type":15,"value":1347},"Accept-Language",{"type":15,"value":1349},", never by the visitor locale cookie. BML emits browser ",{"type":9,"tag":24,"props":1351,"children":1352},{"className":26},[1353],{"type":15,"value":1354},"Cache-Control",{"type":15,"value":1356}," separately\nfrom ",{"type":9,"tag":24,"props":1358,"children":1359},{"className":26},[1360],{"type":15,"value":1361},"Cloudflare-CDN-Cache-Control",{"type":15,"value":1095},{"type":9,"tag":24,"props":1364,"children":1365},{"className":26},[1366],{"type":15,"value":1367},"s-maxage",{"type":15,"value":1369}," is deliberately absent because it disables\nstale-while-revalidate behavior. An optional ",{"type":9,"tag":24,"props":1371,"children":1372},{"className":26},[1373],{"type":15,"value":1374},"BmlSharedCacheRevisionProvider",{"type":15,"value":1376}," can derive a\nreplica-stable validator from Bosca content ETags and modified times. BML combines that data with\nthe route variant and deterministic deployment revision, then verifies it again after rendering;\na concurrent revision change falls back to hashing the completed response. Localized sites always\nrender before conditional validation so the validator covers the catalog snapshot actually used.",{"type":9,"tag":395,"props":1378,"children":1380},{"id":1379},"_41b-message-channel-units-bml-spec-2",[1381,1383,1388],{"type":15,"value":1382},"4.1b ",{"type":9,"tag":24,"props":1384,"children":1385},{"className":26},[1386],{"type":15,"value":1387},"\u003Cmessage>",{"type":15,"value":1389}," channel units (BML-SPEC-2)",{"type":9,"tag":167,"props":1391,"children":1394},{"className":1392,"code":1393,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Message       ::= '\u003Cmessage' MessageAttr* '>' ServerScript* ( Email | Push )+ '\u003C\u002Fmessage>'\nMessageAttr   ::= 'key' '=' '\"' Name '\"' | Attr\nEmail         ::= '\u003Cemail>' Subject Node* '\u003C\u002Femail>'\nSubject       ::= '\u003Csubject' Localized? '>' ( Text | Interp )* '\u003C\u002Fsubject>'\nPush          ::= '\u003Cpush' ( ':options' '=' '\"' Expr '\"' )? '>' ( PushTitle | PushBody | PushAction | PushRich )* '\u003C\u002Fpush>'\nPushTitle     ::= '\u003Ctitle' Localized? '>' ( Text | Interp )* '\u003C\u002Ftitle>'\nPushBody      ::= '\u003Cbody' Localized? '>' ( Text | Interp )* '\u003C\u002Fbody>'\nPushAction    ::= '\u003Caction' 'id' '=' '\"' Name '\"' Default? Localized? '>' ( Text | Interp )* '\u003C\u002Faction>'\nDefault       ::= 'default'\nPushRich      ::= '\u003Cimage\u002F>' | '\u003Cattachments\u002F>' | '\u003Cconversation\u002F>'\nLocalized    ::= 't' '=' '\"' MessageKey '\"'\n",[1395],{"type":9,"tag":24,"props":1396,"children":1397},{"__ignoreMap":26},[1398],{"type":15,"value":1393},{"type":9,"tag":183,"props":1400,"children":1401},{},[1402,1441,1464,1482,1505,1552,1611,1655,1697,1714],{"type":9,"tag":187,"props":1403,"children":1404},{},[1405,1407,1412,1414,1419,1421,1426,1428,1433,1435,1440],{"type":15,"value":1406},"A message unit compiles to an ",{"type":9,"tag":24,"props":1408,"children":1409},{"className":26},[1410],{"type":15,"value":1411},"object",{"type":15,"value":1413}," implementing ",{"type":9,"tag":24,"props":1415,"children":1416},{"className":26},[1417],{"type":15,"value":1418},"bosca.bml.message.BmlMessageTemplate",{"type":15,"value":1420},":\n",{"type":9,"tag":24,"props":1422,"children":1423},{"className":26},[1424],{"type":15,"value":1425},"suspend fun renderMessage(message: BmlMessageContext): RenderedMessage",{"type":15,"value":1427},". Each unit may declare\nemail, push, or both. The email result contains email-safe HTML (scripts stripped via\n",{"type":9,"tag":24,"props":1429,"children":1430},{"className":26},[1431],{"type":15,"value":1432},"EmailRenderer",{"type":15,"value":1434},") plus a plain-text alternative (",{"type":9,"tag":24,"props":1436,"children":1437},{"className":26},[1438],{"type":15,"value":1439},"PlainTextRenderer",{"type":15,"value":846},{"type":9,"tag":187,"props":1442,"children":1443},{},[1444,1449,1451,1456,1458,1463],{"type":9,"tag":24,"props":1445,"children":1446},{"className":26},[1447],{"type":15,"value":1448},"key",{"type":15,"value":1450}," is the template's stable key within its project; defaults to the file's base name\n(",{"type":9,"tag":24,"props":1452,"children":1453},{"className":26},[1454],{"type":15,"value":1455},"emails\u002Fcourse-welcome.bml",{"type":15,"value":1457}," → ",{"type":9,"tag":24,"props":1459,"children":1460},{"className":26},[1461],{"type":15,"value":1462},"course-welcome",{"type":15,"value":846},{"type":9,"tag":187,"props":1465,"children":1466},{},[1467,1469,1473,1475,1480],{"type":15,"value":1468},"An ",{"type":9,"tag":24,"props":1470,"children":1471},{"className":26},[1472],{"type":15,"value":347},{"type":15,"value":1474}," region requires ",{"type":9,"tag":24,"props":1476,"children":1477},{"className":26},[1478],{"type":15,"value":1479},"\u003Csubject>",{"type":15,"value":1481},"; the rest of its children are the body document.",{"type":9,"tag":187,"props":1483,"children":1484},{},[1485,1486,1490,1492,1496,1498,1503],{"type":15,"value":123},{"type":9,"tag":24,"props":1487,"children":1488},{"className":26},[1489],{"type":15,"value":353},{"type":15,"value":1491}," region renders a notification from the same server code,\ntyped payload, localization context, project, and published artifact version. Its ",{"type":9,"tag":24,"props":1493,"children":1494},{"className":26},[1495],{"type":15,"value":1244},{"type":15,"value":1497},"\nand ",{"type":9,"tag":24,"props":1499,"children":1500},{"className":26},[1501],{"type":15,"value":1502},"\u003Cbody>",{"type":15,"value":1504}," are required plain-text regions and never appear in the email HTML.",{"type":9,"tag":187,"props":1506,"children":1507},{},[1508,1513,1515,1519,1521,1525,1526,1530,1531,1536,1538,1543,1545,1550],{"type":9,"tag":24,"props":1509,"children":1510},{"className":26},[1511],{"type":15,"value":1512},"t=\"key\"",{"type":15,"value":1514}," on ",{"type":9,"tag":24,"props":1516,"children":1517},{"className":26},[1518],{"type":15,"value":1479},{"type":15,"value":1520},", push ",{"type":9,"tag":24,"props":1522,"children":1523},{"className":26},[1524],{"type":15,"value":1244},{"type":15,"value":248},{"type":9,"tag":24,"props":1527,"children":1528},{"className":26},[1529],{"type":15,"value":1502},{"type":15,"value":254},{"type":9,"tag":24,"props":1532,"children":1533},{"className":26},[1534],{"type":15,"value":1535},"\u003Caction>",{"type":15,"value":1537}," uses the authored text as the source\nfallback, harvests the entry into ",{"type":9,"tag":24,"props":1539,"children":1540},{"className":26},[1541],{"type":15,"value":1542},"bml\u002Fi18n-manifest.json",{"type":15,"value":1544},", and resolves against the same locale\nand ",{"type":9,"tag":24,"props":1546,"children":1547},{"className":26},[1548],{"type":15,"value":1549},"MessageSource",{"type":15,"value":1551}," as email markup. Interpolations become named localization placeholders.",{"type":9,"tag":187,"props":1553,"children":1554},{},[1555,1557,1561,1563,1568,1570,1575,1577,1582,1584,1588,1590,1595,1597,1602,1604,1609],{"type":15,"value":1556},"A bare ",{"type":9,"tag":24,"props":1558,"children":1559},{"className":26},[1560],{"type":15,"value":353},{"type":15,"value":1562}," inherits the ",{"type":9,"tag":24,"props":1564,"children":1565},{"className":26},[1566],{"type":15,"value":1567},"BmlPushOptions",{"type":15,"value":1569}," supplied by the communication producer through\n",{"type":9,"tag":24,"props":1571,"children":1572},{"className":26},[1573],{"type":15,"value":1574},"BmlMessageContext",{"type":15,"value":1576},". An explicit ",{"type":9,"tag":24,"props":1578,"children":1579},{"className":26},[1580],{"type":15,"value":1581},":options",{"type":15,"value":1583}," binding overrides that context when the template\nintentionally owns the metadata. Each localized ",{"type":9,"tag":24,"props":1585,"children":1586},{"className":26},[1587],{"type":15,"value":1535},{"type":15,"value":1589}," selects a producer-supplied action by\nstable ",{"type":9,"tag":24,"props":1591,"children":1592},{"className":26},[1593],{"type":15,"value":1594},"id",{"type":15,"value":1596},", overlays only its label, and orders it for presentation. A ",{"type":9,"tag":24,"props":1598,"children":1599},{"className":26},[1600],{"type":15,"value":1601},"default",{"type":15,"value":1603}," action is used\nwhen the notification itself is opened; at most one may be declared. Destinations and action data\nremain producer-supplied metadata. Besides delivery and grouping fields, optional\n",{"type":9,"tag":24,"props":1605,"children":1606},{"className":26},[1607],{"type":15,"value":1608},"BmlPushRichContent",{"type":15,"value":1610}," carries remote media attachments and a conversation preview. Attachments\nare public URLs downloaded by the provider or client; they are not inline bytes. Conversation\nentries should remain a small recent preview with stable channel\u002Fmessage identifiers—the app\nremains the source of truth for full history.",{"type":9,"tag":187,"props":1612,"children":1613},{},[1614,1616,1620,1622],{"type":15,"value":1615},"Rich presentation is selected declaratively inside ",{"type":9,"tag":24,"props":1617,"children":1618},{"className":26},[1619],{"type":15,"value":353},{"type":15,"value":1621},":",{"type":9,"tag":183,"props":1623,"children":1624},{},[1625,1635,1645],{"type":9,"tag":187,"props":1626,"children":1627},{},[1628,1633],{"type":9,"tag":24,"props":1629,"children":1630},{"className":26},[1631],{"type":15,"value":1632},"\u003Cimage\u002F>",{"type":15,"value":1634}," promotes the first producer-supplied image attachment to the provider-native image.",{"type":9,"tag":187,"props":1636,"children":1637},{},[1638,1643],{"type":9,"tag":24,"props":1639,"children":1640},{"className":26},[1641],{"type":15,"value":1642},"\u003Cattachments\u002F>",{"type":15,"value":1644}," retains the producer-supplied image, video, and audio attachment envelope.",{"type":9,"tag":187,"props":1646,"children":1647},{},[1648,1653],{"type":9,"tag":24,"props":1649,"children":1650},{"className":26},[1651],{"type":15,"value":1652},"\u003Cconversation\u002F>",{"type":15,"value":1654}," retains the bounded conversation preview for capable clients.\nThese tags are empty and accept no attributes. They never construct URLs, messages, or history;\nthe producer supplies that data, while the template decides which presentation concepts it uses.",{"type":9,"tag":187,"props":1656,"children":1657},{},[1658,1660,1668,1670,1675,1677,1682,1684,1689,1690,1695],{"type":15,"value":1659},"Inside shared server code the message context is in scope as ",{"type":9,"tag":33,"props":1661,"children":1662},{},[1663],{"type":9,"tag":24,"props":1664,"children":1665},{"className":26},[1666],{"type":15,"value":1667},"message",{"type":15,"value":1669}," (the render context\nstays ",{"type":9,"tag":24,"props":1671,"children":1672},{"className":26},[1673],{"type":15,"value":1674},"ctx",{"type":15,"value":1676},"): ",{"type":9,"tag":24,"props":1678,"children":1679},{"className":26},[1680],{"type":15,"value":1681},"message.payload(MyPayload.serializer())",{"type":15,"value":1683}," decodes the typed payload, and standard\nfields (",{"type":9,"tag":24,"props":1685,"children":1686},{"className":26},[1687],{"type":15,"value":1688},"message.recipientName",{"type":15,"value":248},{"type":9,"tag":24,"props":1691,"children":1692},{"className":26},[1693],{"type":15,"value":1694},"message.locale",{"type":15,"value":1696},", …) drive optional clauses.",{"type":9,"tag":187,"props":1698,"children":1699},{},[1700,1702,1707,1708,1713],{"type":15,"value":1701},"Every compiled message is listed in ",{"type":9,"tag":24,"props":1703,"children":1704},{"className":26},[1705],{"type":15,"value":1706},"bml.generated.BmlMessages",{"type":15,"value":198},{"type":9,"tag":24,"props":1709,"children":1710},{"className":26},[1711],{"type":15,"value":1712},"BmlMessageModule",{"type":15,"value":846},{"type":9,"tag":187,"props":1715,"children":1716},{},[1717,1719,1723],{"type":15,"value":1718},"No routes, no islands, no ",{"type":9,"tag":24,"props":1720,"children":1721},{"className":26},[1722],{"type":15,"value":282},{"type":15,"value":1724}," — communication units have no JS by construction.",{"type":9,"tag":18,"props":1726,"children":1727},{},[1728,1738,1740,1744],{"type":9,"tag":33,"props":1729,"children":1730},{},[1731,1736],{"type":9,"tag":24,"props":1732,"children":1733},{"className":26},[1734],{"type":15,"value":1735},"bml-inline",{"type":15,"value":1737}," (email inlining).",{"type":15,"value":1739}," Two tags accept a ",{"type":9,"tag":24,"props":1741,"children":1742},{"className":26},[1743],{"type":15,"value":1735},{"type":15,"value":1745}," marker in email renders:",{"type":9,"tag":183,"props":1747,"children":1748},{},[1749,1846],{"type":9,"tag":187,"props":1750,"children":1751},{},[1752,1757,1759,1764,1766,1777,1779,1784,1785,1790,1791,1796,1797,1802,1804,1808,1810,1815,1816,1821,1822,1827,1829,1833,1835,1839,1841,1845],{"type":9,"tag":24,"props":1753,"children":1754},{"className":26},[1755],{"type":15,"value":1756},"\u003Cstyle bml-inline>…\u003C\u002Fstyle>",{"type":15,"value":1758}," — instead of emitting a ",{"type":9,"tag":24,"props":1760,"children":1761},{"className":26},[1762],{"type":15,"value":1763},"\u003Cstyle>",{"type":15,"value":1765}," tag (which many email\nclients strip), the CSS is applied as ",{"type":9,"tag":33,"props":1767,"children":1768},{},[1769,1771,1775],{"type":15,"value":1770},"inline ",{"type":9,"tag":24,"props":1772,"children":1773},{"className":26},[1774],{"type":15,"value":674},{"type":15,"value":1776}," attributes",{"type":15,"value":1778}," on matching elements\nafter the body renders. Works through components (they render into the same context).\nSimple selectors inline (",{"type":9,"tag":24,"props":1780,"children":1781},{"className":26},[1782],{"type":15,"value":1783},"tag",{"type":15,"value":248},{"type":9,"tag":24,"props":1786,"children":1787},{"className":26},[1788],{"type":15,"value":1789},".class",{"type":15,"value":248},{"type":9,"tag":24,"props":1792,"children":1793},{"className":26},[1794],{"type":15,"value":1795},"#id",{"type":15,"value":248},{"type":9,"tag":24,"props":1798,"children":1799},{"className":26},[1800],{"type":15,"value":1801},"tag.class",{"type":15,"value":1803},"; an element's own ",{"type":9,"tag":24,"props":1805,"children":1806},{"className":26},[1807],{"type":15,"value":674},{"type":15,"value":1809},"\nattribute wins on conflict); at-rules (",{"type":9,"tag":24,"props":1811,"children":1812},{"className":26},[1813],{"type":15,"value":1814},"@media",{"type":15,"value":248},{"type":9,"tag":24,"props":1817,"children":1818},{"className":26},[1819],{"type":15,"value":1820},"@font-face",{"type":15,"value":248},{"type":9,"tag":24,"props":1823,"children":1824},{"className":26},[1825],{"type":15,"value":1826},"@import",{"type":15,"value":1828},") cannot be\ninlined and are retained as a ",{"type":9,"tag":24,"props":1830,"children":1831},{"className":26},[1832],{"type":15,"value":1763},{"type":15,"value":1834}," block in ",{"type":9,"tag":24,"props":1836,"children":1837},{"className":26},[1838],{"type":15,"value":1238},{"type":15,"value":1840}," for clients that honor one.\nOn a non-email render the tag falls back to a normal ",{"type":9,"tag":24,"props":1842,"children":1843},{"className":26},[1844],{"type":15,"value":1763},{"type":15,"value":165},{"type":9,"tag":187,"props":1847,"children":1848},{},[1849,1854,1856,1861,1863,1868,1870,1875,1877,1882,1884,1889,1891,1896,1898,1903],{"type":9,"tag":24,"props":1850,"children":1851},{"className":26},[1852],{"type":15,"value":1853},"\u003Cimg bml-inline src=\"logo.png\"\u002F>",{"type":15,"value":1855}," — ",{"type":9,"tag":33,"props":1857,"children":1858},{},[1859],{"type":15,"value":1860},"embeds the bundled image in the email",{"type":15,"value":1862}," instead of\nreferencing it remotely: the HTML gets ",{"type":9,"tag":24,"props":1864,"children":1865},{"className":26},[1866],{"type":15,"value":1867},"src=\"cid:…\"",{"type":15,"value":1869}," and the mailer attaches the asset as\nan inline ",{"type":9,"tag":24,"props":1871,"children":1872},{"className":26},[1873],{"type":15,"value":1874},"multipart\u002Frelated",{"type":15,"value":1876}," part, so it displays even before the client loads remote\nimages. The ",{"type":9,"tag":24,"props":1878,"children":1879},{"className":26},[1880],{"type":15,"value":1881},"src",{"type":15,"value":1883}," must be a static, bundle-relative ",{"type":9,"tag":24,"props":1885,"children":1886},{"className":26},[1887],{"type":15,"value":1888},"public\u002F",{"type":15,"value":1890}," path (not a URL, not an\n",{"type":9,"tag":24,"props":1892,"children":1893},{"className":26},[1894],{"type":15,"value":1895},"{ email.assetsUrl }",{"type":15,"value":1897}," interpolation — drop the prefix to inline). Only images that\nactually render attach: one inside a false ",{"type":9,"tag":24,"props":1899,"children":1900},{"className":26},[1901],{"type":15,"value":1902},"\u003Cif>",{"type":15,"value":1904}," adds nothing.",{"type":9,"tag":395,"props":1906,"children":1908},{"id":1907},"_42-slots-and-reserved-template-syntax",[1909],{"type":15,"value":1910},"4.2 Slots and reserved template syntax",{"type":9,"tag":167,"props":1912,"children":1915},{"className":1913,"code":1914,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Template      ::= '\u003Ctemplate' WS 'name' '=' '\"' Name '\"' Attr* '>' Node* '\u003C\u002Ftemplate>'\nSlot          ::= '\u003Cslot' ( WS 'name' '=' '\"' Name '\"' )? ( '\u002F>' | '>' Node* '\u003C\u002Fslot>' )\n",[1916],{"type":9,"tag":24,"props":1917,"children":1918},{"__ignoreMap":26},[1919],{"type":15,"value":1914},{"type":9,"tag":183,"props":1921,"children":1922},{},[1923,1933,1945],{"type":9,"tag":187,"props":1924,"children":1925},{},[1926,1931],{"type":9,"tag":24,"props":1927,"children":1928},{"className":26},[1929],{"type":15,"value":1930},"\u003Cslot\u002F>",{"type":15,"value":1932}," renders the children passed to a component. Slot fallback bodies are not currently used.",{"type":9,"tag":187,"props":1934,"children":1935},{},[1936,1938,1943],{"type":15,"value":1937},"A named ",{"type":9,"tag":24,"props":1939,"children":1940},{"className":26},[1941],{"type":15,"value":1942},"\u003Cslot name=\"x\"\u002F>",{"type":15,"value":1944}," currently warns and renders the same default component children.",{"type":9,"tag":187,"props":1946,"children":1947},{},[1948,1953,1954,1958,1960,1964],{"type":9,"tag":24,"props":1949,"children":1950},{"className":26},[1951],{"type":15,"value":1952},"\u003Ctemplate>",{"type":15,"value":248},{"type":9,"tag":24,"props":1955,"children":1956},{"className":26},[1957],{"type":15,"value":382},{"type":15,"value":1959},", named slot provision, and explicit ",{"type":9,"tag":24,"props":1961,"children":1962},{"className":26},[1963],{"type":15,"value":844},{"type":15,"value":1965}," calls are reserved syntax. The\ncompiler does not generate template renderers; pages own their complete document skeleton.",{"type":9,"tag":395,"props":1967,"children":1969},{"id":1968},"_43-component-and-prop",[1970,1972,1977,1978],{"type":15,"value":1971},"4.3 ",{"type":9,"tag":24,"props":1973,"children":1974},{"className":26},[1975],{"type":15,"value":1976},"\u003Ccomponent>",{"type":15,"value":1152},{"type":9,"tag":24,"props":1979,"children":1980},{"className":26},[1981],{"type":15,"value":1982},"\u003Cprop>",{"type":9,"tag":167,"props":1984,"children":1987},{"className":1985,"code":1986,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Component     ::= '\u003Ccomponent' WS 'tag' '=' '\"' Name '\"' ( WS 'scope' '=' '\"' ComponentScope '\"' )? Attr* '>' ComponentBody '\u003C\u002Fcomponent>'\nComponentScope ::= 'page' | 'site'\nComponentBody ::= ( Prop | CodeRegion | Comment )* Node*\nProp          ::= '\u003Cprop' WS 'name' '=' '\"' Name '\"' PropAttr* ( '\u002F>' | '>' Node* '\u003C\u002Fprop>' )\nPropAttr      ::= 'type' '=' '\"' TypeRef '\"' | 'required' ( '=' AttrValue )?\n                | 'default' '=' AttrValue | ':default' '=' '\"' Expr '\"'\n",[1988],{"type":9,"tag":24,"props":1989,"children":1990},{"__ignoreMap":26},[1991],{"type":15,"value":1986},{"type":9,"tag":183,"props":1993,"children":1994},{},[1995,2026,2070],{"type":9,"tag":187,"props":1996,"children":1997},{},[1998,2003,2005,2010,2012,2017,2019,2024],{"type":9,"tag":24,"props":1999,"children":2000},{"className":26},[2001],{"type":15,"value":2002},"\u003Ccomponent tag=\"card\">",{"type":15,"value":2004}," registers a tag ",{"type":9,"tag":24,"props":2006,"children":2007},{"className":26},[2008],{"type":15,"value":2009},"card",{"type":15,"value":2011}," (or ",{"type":9,"tag":33,"props":2013,"children":2014},{},[2015],{"type":15,"value":2016},"overrides",{"type":15,"value":2018}," a built-in,\ne.g. ",{"type":9,"tag":24,"props":2020,"children":2021},{"className":26},[2022],{"type":15,"value":2023},"tag=\"a\"",{"type":15,"value":2025},", unless protected). Tag names need not contain a hyphen.",{"type":9,"tag":187,"props":2027,"children":2028},{},[2029,2031,2036,2037,2042,2044,2049,2050,2055,2057,2062,2064,2069],{"type":15,"value":2030},"Component state ownership defaults to ",{"type":9,"tag":24,"props":2032,"children":2033},{"className":26},[2034],{"type":15,"value":2035},"scope=\"page\"",{"type":15,"value":1246},{"type":9,"tag":24,"props":2038,"children":2039},{"className":26},[2040],{"type":15,"value":2041},"scope=\"site\"",{"type":15,"value":2043}," gives its live models a\nstable cross-page identity; those models must use ",{"type":9,"tag":24,"props":2045,"children":2046},{"className":26},[2047],{"type":15,"value":2048},"client-session",{"type":15,"value":248},{"type":9,"tag":24,"props":2051,"children":2052},{"className":26},[2053],{"type":15,"value":2054},"client-local",{"type":15,"value":2056},", or\n",{"type":9,"tag":24,"props":2058,"children":2059},{"className":26},[2060],{"type":15,"value":2061},"server-session",{"type":15,"value":2063}," storage and may omit a view when a page only needs a headless action. A site\ncomponent is a singleton state owner and therefore does not use an island ",{"type":9,"tag":24,"props":2065,"children":2066},{"className":26},[2067],{"type":15,"value":2068},":key",{"type":15,"value":165},{"type":9,"tag":187,"props":2071,"children":2072},{},[2073,2077,2079,2083,2085,2089,2090,2094,2096,2101],{"type":9,"tag":24,"props":2074,"children":2075},{"className":26},[2076],{"type":15,"value":1982},{"type":15,"value":2078}," declares a typed input; props are in-scope ",{"type":9,"tag":24,"props":2080,"children":2081},{"className":26},[2082],{"type":15,"value":1198},{"type":15,"value":2084},"s in the component\nbody and its ",{"type":9,"tag":24,"props":2086,"children":2087},{"className":26},[2088],{"type":15,"value":276},{"type":15,"value":1246},{"type":9,"tag":24,"props":2091,"children":2092},{"className":26},[2093],{"type":15,"value":1982},{"type":15,"value":2095}," body, if present, is fallback content\nfor a slot-typed prop. Unknown attributes passed to the component that are not\ndeclared props are collected and available via the implicit ",{"type":9,"tag":24,"props":2097,"children":2098},{"className":26},[2099],{"type":15,"value":2100},"attrs",{"type":15,"value":2102}," binding.",{"type":9,"tag":395,"props":2104,"children":2106},{"id":2105},"_44-control-flow",[2107],{"type":15,"value":2108},"4.4 Control flow",{"type":9,"tag":167,"props":2110,"children":2113},{"className":2111,"code":2112,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Control       ::= For | If\nFor           ::= '\u003Cfor' WS ForBinding WS 'in' WS Expr '>' Node* '\u003C\u002Ffor>'\nForBinding    ::= Name | '(' Name ',' Name ')'      « (index,item) for lists; (key,value) for maps »\nIf            ::= '\u003Cif' WS ( Expr | FeatureFlagCondition ) '>' Node* ElseIfClause* ElseClause? '\u003C\u002Fif>'\nElseIfClause  ::= '\u003Celse-if' WS ( Expr | FeatureFlagCondition ) '>' Node*\nElseClause    ::= '\u003Celse>' Node*\nFeatureFlagCondition ::= 'flag' '=' QuotedLiteral\n                         ( WS 'variation' '=' QuotedLiteral | WS ':when' '=' QuotedExpr )?\n",[2114],{"type":9,"tag":24,"props":2115,"children":2116},{"__ignoreMap":26},[2117],{"type":15,"value":2112},{"type":9,"tag":183,"props":2119,"children":2120},{},[2121,2156,2200,2243],{"type":9,"tag":187,"props":2122,"children":2123},{},[2124,2129,2131,2136,2137,2142,2143,2148,2149,2154],{"type":9,"tag":24,"props":2125,"children":2126},{"className":26},[2127],{"type":15,"value":2128},"\u003Cfor item in expr>",{"type":15,"value":2130}," iterates an ",{"type":9,"tag":24,"props":2132,"children":2133},{"className":26},[2134],{"type":15,"value":2135},"Iterable",{"type":15,"value":595},{"type":9,"tag":24,"props":2138,"children":2139},{"className":26},[2140],{"type":15,"value":2141},"Sequence",{"type":15,"value":595},{"type":9,"tag":24,"props":2144,"children":2145},{"className":26},[2146],{"type":15,"value":2147},"Map",{"type":15,"value":1246},{"type":9,"tag":24,"props":2150,"children":2151},{"className":26},[2152],{"type":15,"value":2153},"(i, item)",{"type":15,"value":2155},"\nyields the zero-based index (or map key) alongside.",{"type":9,"tag":187,"props":2157,"children":2158},{},[2159,2164,2166,2171,2173,2178,2180,2185,2187,2192,2194,2198],{"type":9,"tag":24,"props":2160,"children":2161},{"className":26},[2162],{"type":15,"value":2163},"\u003Cif expr> … \u003C\u002Fif>",{"type":15,"value":2165}," may contain ",{"type":9,"tag":24,"props":2167,"children":2168},{"className":26},[2169],{"type":15,"value":2170},"\u003Celse-if expr>",{"type":15,"value":2172}," clauses and a final ",{"type":9,"tag":24,"props":2174,"children":2175},{"className":26},[2176],{"type":15,"value":2177},"\u003Celse>",{"type":15,"value":2179}," as\n",{"type":9,"tag":33,"props":2181,"children":2182},{},[2183],{"type":15,"value":2184},"bare in-block separators",{"type":15,"value":2186}," (no own close tag); the whole conditional is closed\nby a single ",{"type":9,"tag":24,"props":2188,"children":2189},{"className":26},[2190],{"type":15,"value":2191},"\u003C\u002Fif>",{"type":15,"value":2193},". Nested ",{"type":9,"tag":24,"props":2195,"children":2196},{"className":26},[2197],{"type":15,"value":1902},{"type":15,"value":2199}," blocks are fully self-contained.",{"type":9,"tag":187,"props":2201,"children":2202},{},[2203,2205,2210,2211,2215,2217,2222,2224,2229,2230,2235,2236,2241],{"type":15,"value":2204},"A condition containing a bare ",{"type":9,"tag":24,"props":2206,"children":2207},{"className":26},[2208],{"type":15,"value":2209},">",{"type":15,"value":595},{"type":9,"tag":24,"props":2212,"children":2213},{"className":26},[2214],{"type":15,"value":525},{"type":15,"value":2216}," must be parenthesized (e.g. ",{"type":9,"tag":24,"props":2218,"children":2219},{"className":26},[2220],{"type":15,"value":2221},"\u003Cif (a > b)>",{"type":15,"value":2223},");\n",{"type":9,"tag":24,"props":2225,"children":2226},{"className":26},[2227],{"type":15,"value":2228},">=",{"type":15,"value":248},{"type":9,"tag":24,"props":2231,"children":2232},{"className":26},[2233],{"type":15,"value":2234},"\u003C=",{"type":15,"value":669},{"type":9,"tag":24,"props":2237,"children":2238},{"className":26},[2239],{"type":15,"value":2240},"->",{"type":15,"value":2242}," are recognized directly.",{"type":9,"tag":187,"props":2244,"children":2245},{},[2246,2248,2253,2255,2260,2262,2267,2269,2274,2275,2280,2282,2287,2289,2294,2295,2300,2302,2307,2308,2313,2314,2319,2320,2324,2326,2331,2333,2337],{"type":15,"value":2247},"A feature flag can be used as a boolean (",{"type":9,"tag":24,"props":2249,"children":2250},{"className":26},[2251],{"type":15,"value":2252},"\u003Cif flag=\"new-checkout\">",{"type":15,"value":2254},"), matched by variation\n(",{"type":9,"tag":24,"props":2256,"children":2257},{"className":26},[2258],{"type":15,"value":2259},"\u003Cif flag=\"checkout-layout\" variation=\"compact\">",{"type":15,"value":2261},"), or evaluated with arbitrary Kotlin\n(",{"type":9,"tag":24,"props":2263,"children":2264},{"className":26},[2265],{"type":15,"value":2266},"\u003Cif flag=\"checkout\" :when='flag.variationKey == \"compact\" && !flag.degraded'>",{"type":15,"value":2268},"). Inside\n",{"type":9,"tag":24,"props":2270,"children":2271},{"className":26},[2272],{"type":15,"value":2273},":when",{"type":15,"value":248},{"type":9,"tag":24,"props":2276,"children":2277},{"className":26},[2278],{"type":15,"value":2279},"flag",{"type":15,"value":2281}," is the complete ",{"type":9,"tag":24,"props":2283,"children":2284},{"className":26},[2285],{"type":15,"value":2286},"FeatureFlagEvaluation",{"type":15,"value":2288}," with ",{"type":9,"tag":24,"props":2290,"children":2291},{"className":26},[2292],{"type":15,"value":2293},"value",{"type":15,"value":248},{"type":9,"tag":24,"props":2296,"children":2297},{"className":26},[2298],{"type":15,"value":2299},"variationKey",{"type":15,"value":2301},",\n",{"type":9,"tag":24,"props":2303,"children":2304},{"className":26},[2305],{"type":15,"value":2306},"experimentId",{"type":15,"value":669},{"type":9,"tag":24,"props":2309,"children":2310},{"className":26},[2311],{"type":15,"value":2312},"degraded",{"type":15,"value":1246},{"type":9,"tag":24,"props":2315,"children":2316},{"className":26},[2317],{"type":15,"value":2318},"variation",{"type":15,"value":1152},{"type":9,"tag":24,"props":2321,"children":2322},{"className":26},[2323],{"type":15,"value":2273},{"type":15,"value":2325}," are mutually exclusive. Flag and\nvariation keys are static non-empty literals so the compiler can diagnose authoring mistakes.\nUnavailable evaluations are logged and fail closed to a degraded, unknown value rather than\naborting page rendering; boolean and variation forms therefore select their fallback branch.\nThe same forms are valid on ",{"type":9,"tag":24,"props":2327,"children":2328},{"className":26},[2329],{"type":15,"value":2330},"\u003Celse-if>",{"type":15,"value":2332},". Feature-flag conditions are not available in ",{"type":9,"tag":24,"props":2334,"children":2335},{"className":26},[2336],{"type":15,"value":1387},{"type":15,"value":2338},"\nrenders because no recipient feature identity is currently defined.",{"type":9,"tag":395,"props":2340,"children":2342},{"id":2341},"_45-data-and-inject",[2343,2345,2350,2351],{"type":15,"value":2344},"4.5 ",{"type":9,"tag":24,"props":2346,"children":2347},{"className":26},[2348],{"type":15,"value":2349},"\u003Cdata>",{"type":15,"value":1152},{"type":9,"tag":24,"props":2352,"children":2353},{"className":26},[2354],{"type":15,"value":2355},"\u003Cinject>",{"type":9,"tag":167,"props":2357,"children":2360},{"className":2358,"code":2359,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Data          ::= '\u003Cdata' WS 'provides' '=' '\"' Name '\"' Attr* '>' Interp '\u003C\u002Fdata>'\nInject        ::= '\u003Cinject' ( WS 'server' )? WS 'name' '=' '\"' Name '\"' WS 'type' '=' '\"' KotlinType '\"'\n                  ( WS 'provider' '=' '\"' String '\"' )? ( WS 'init' '=' '\"' Name '\"' )?\n                  ( WS 'scope' '=' '\"' LiveStateScope '\"' )? ( WS 'clear-on-sign-out' )? '\u002F>'\nLiveStateScope ::= 'page' | 'client-session' | 'client-local' | 'server-session'\n",[2361],{"type":9,"tag":24,"props":2362,"children":2363},{"__ignoreMap":26},[2364],{"type":15,"value":2359},{"type":9,"tag":183,"props":2366,"children":2367},{},[2368,2386,2450],{"type":9,"tag":187,"props":2369,"children":2370},{},[2371,2373,2378,2380,2385],{"type":15,"value":2372},"Declarative sugar for a ",{"type":9,"tag":24,"props":2374,"children":2375},{"className":26},[2376],{"type":15,"value":2377},"\u003Cscript server provides=\"name\">",{"type":15,"value":2379}," whose body is the\nsingle expression. Example: ",{"type":9,"tag":24,"props":2381,"children":2382},{"className":26},[2383],{"type":15,"value":2384},"\u003Cdata provides=\"listView\">{ bosca.query(GetListView(id = id)).list }\u003C\u002Fdata>",{"type":15,"value":165},{"type":9,"tag":187,"props":2387,"children":2388},{},[2389,2393,2395,2400,2402,2407,2409,2413,2415,2420,2422,2427,2429,2434,2436,2441,2443,2448],{"type":9,"tag":24,"props":2390,"children":2391},{"className":26},[2392],{"type":15,"value":2355},{"type":15,"value":2394}," is a non-rendering direct-child declaration on a page, route, component, message, or\ntemplate. It resolves ",{"type":9,"tag":24,"props":2396,"children":2397},{"className":26},[2398],{"type":15,"value":2399},"type",{"type":15,"value":2401}," through Bosca DI's ",{"type":9,"tag":24,"props":2403,"children":2404},{"className":26},[2405],{"type":15,"value":2406},"provide\u003CT>()",{"type":15,"value":2408}," and binds it as ",{"type":9,"tag":24,"props":2410,"children":2411},{"className":26},[2412],{"type":15,"value":695},{"type":15,"value":2414}," throughout\nthat render unit. ",{"type":9,"tag":24,"props":2416,"children":2417},{"className":26},[2418],{"type":15,"value":2419},"provider=\"key\"",{"type":15,"value":2421}," selects a named DI binding. ",{"type":9,"tag":24,"props":2423,"children":2424},{"className":26},[2425],{"type":15,"value":2426},"init=\"method\"",{"type":15,"value":2428}," calls the injected\nvalue's zero-argument method after resolution and may target a suspend method. For example,\n",{"type":9,"tag":24,"props":2430,"children":2431},{"className":26},[2432],{"type":15,"value":2433},"\u003Cinject name=\"search\" type=\"com.example.SearchService\" init=\"load\"\u002F>",{"type":15,"value":2435}," emits a ",{"type":9,"tag":24,"props":2437,"children":2438},{"className":26},[2439],{"type":15,"value":2440},"search",{"type":15,"value":2442}," binding\nfollowed by ",{"type":9,"tag":24,"props":2444,"children":2445},{"className":26},[2446],{"type":15,"value":2447},"search.load()",{"type":15,"value":2449},". Injections run before server-script initializers, do not leak into\ncallers or sibling units, and component injections run as part of each component render.",{"type":9,"tag":187,"props":2451,"children":2452},{},[2453,2454,2459,2461,2466,2468,2473,2475,2480,2482,2487,2489,2494,2496,2501,2503,2507,2508,2512,2513,2517,2519,2523,2525,2530,2532,2536,2537,2541,2543,2548],{"type":15,"value":1556},{"type":9,"tag":24,"props":2455,"children":2456},{"className":26},[2457],{"type":15,"value":2458},"server",{"type":15,"value":2460}," marker promotes an injected ",{"type":9,"tag":24,"props":2462,"children":2463},{"className":26},[2464],{"type":15,"value":2465},"@Serializable",{"type":15,"value":2467}," view model to the same live-state path\nas a constructor-typed ",{"type":9,"tag":24,"props":2469,"children":2470},{"className":26},[2471],{"type":15,"value":2472},"\u003Cscript server provides=\"…\">",{"type":15,"value":2474},". When an ",{"type":9,"tag":24,"props":2476,"children":2477},{"className":26},[2478],{"type":15,"value":2479},"@event",{"type":15,"value":2481}," targets the binding and one\n",{"type":9,"tag":24,"props":2483,"children":2484},{"className":26},[2485],{"type":15,"value":2486},"\u003Cisland>",{"type":15,"value":2488}," references it, BML serializes the model, decodes it for action dispatch, invokes the method\non the server, and re-renders the island. ",{"type":9,"tag":24,"props":2490,"children":2491},{"className":26},[2492],{"type":15,"value":2493},"scope",{"type":15,"value":2495}," accepts ",{"type":9,"tag":24,"props":2497,"children":2498},{"className":26},[2499],{"type":15,"value":2500},"page",{"type":15,"value":2502}," (default), ",{"type":9,"tag":24,"props":2504,"children":2505},{"className":26},[2506],{"type":15,"value":2048},{"type":15,"value":2301},{"type":9,"tag":24,"props":2509,"children":2510},{"className":26},[2511],{"type":15,"value":2054},{"type":15,"value":254},{"type":9,"tag":24,"props":2514,"children":2515},{"className":26},[2516],{"type":15,"value":2061},{"type":15,"value":2518},"; it is only valid with ",{"type":9,"tag":24,"props":2520,"children":2521},{"className":26},[2522],{"type":15,"value":2458},{"type":15,"value":2524},". The bare\n",{"type":9,"tag":24,"props":2526,"children":2527},{"className":26},[2528],{"type":15,"value":2529},"clear-on-sign-out",{"type":15,"value":2531}," marker is valid only with ",{"type":9,"tag":24,"props":2533,"children":2534},{"className":26},[2535],{"type":15,"value":2048},{"type":15,"value":205},{"type":9,"tag":24,"props":2538,"children":2539},{"className":26},[2540],{"type":15,"value":2054},{"type":15,"value":2542}," and opts that\nmodel into ",{"type":9,"tag":24,"props":2544,"children":2545},{"className":26},[2546],{"type":15,"value":2547},"clearBmlClientState()",{"type":15,"value":2549}," disposal.",{"type":9,"tag":395,"props":2551,"children":2553},{"id":2552},"_46-island",[2554,2556],{"type":15,"value":2555},"4.6 ",{"type":9,"tag":24,"props":2557,"children":2558},{"className":26},[2559],{"type":15,"value":2486},{"type":9,"tag":167,"props":2561,"children":2564},{"className":2562,"code":2563,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Island        ::= '\u003Cisland' IslandAttr* '>' Node* ScriptClient? Node* '\u003C\u002Fisland>'\nIslandAttr    ::= 'name' '=' '\"' Name '\"' | 'client' '=' '\"' 'ts' '\"'\n                | 'hydrate' '=' '\"' HydrateMode '\"' | 'render' '=' '\"' IslandRenderMode '\"' | Attr\nIslandRenderMode ::= 'request' | 'prerender' | 'deferred'    « default: request »\nHydrateMode   ::= 'load' | 'idle' | 'visible'      « default: load »\n",[2565],{"type":9,"tag":24,"props":2566,"children":2567},{"__ignoreMap":26},[2568],{"type":15,"value":2563},{"type":9,"tag":183,"props":2570,"children":2571},{},[2572,2590,2608,2661,2731,2755],{"type":9,"tag":187,"props":2573,"children":2574},{},[2575,2577,2582,2584,2588],{"type":15,"value":2576},"An island renders its markup server-side (SEO-complete) and, when ",{"type":9,"tag":24,"props":2578,"children":2579},{"className":26},[2580],{"type":15,"value":2581},"client=\"ts\"",{"type":15,"value":2583},",\nmounts the inner ",{"type":9,"tag":24,"props":2585,"children":2586},{"className":26},[2587],{"type":15,"value":282},{"type":15,"value":2589}," module onto the SSR DOM (hydration-lite).",{"type":9,"tag":187,"props":2591,"children":2592},{},[2593,2595,2600,2601,2606],{"type":15,"value":2594},"The current browser runtime mounts all client islands when it loads. ",{"type":9,"tag":24,"props":2596,"children":2597},{"className":26},[2598],{"type":15,"value":2599},"idle",{"type":15,"value":1152},{"type":9,"tag":24,"props":2602,"children":2603},{"className":26},[2604],{"type":15,"value":2605},"visible",{"type":15,"value":2607}," remain\nreserved mount-policy values. Islands degrade to their SSR HTML on the email\u002Fplain-text targets\n(no client module emitted).",{"type":9,"tag":187,"props":2609,"children":2610},{},[2611,2616,2618,2622,2623,2628,2629,2634,2635,2639,2641,2646,2648,2653,2655,2660],{"type":9,"tag":33,"props":2612,"children":2613},{},[2614],{"type":15,"value":2615},"Props",{"type":15,"value":2617},": any attribute other than reserved ",{"type":9,"tag":24,"props":2619,"children":2620},{"className":26},[2621],{"type":15,"value":695},{"type":15,"value":595},{"type":9,"tag":24,"props":2624,"children":2625},{"className":26},[2626],{"type":15,"value":2627},"client",{"type":15,"value":595},{"type":9,"tag":24,"props":2630,"children":2631},{"className":26},[2632],{"type":15,"value":2633},"hydrate",{"type":15,"value":595},{"type":9,"tag":24,"props":2636,"children":2637},{"className":26},[2638],{"type":15,"value":1265},{"type":15,"value":2640}," is an\nisland prop — ",{"type":9,"tag":24,"props":2642,"children":2643},{"className":26},[2644],{"type":15,"value":2645},":id=\"id\"",{"type":15,"value":2647}," (dynamic) or ",{"type":9,"tag":24,"props":2649,"children":2650},{"className":26},[2651],{"type":15,"value":2652},"flag=\"on\"",{"type":15,"value":2654}," (static). Props are serialized\nto the client module and read as ",{"type":9,"tag":24,"props":2656,"children":2657},{"className":26},[2658],{"type":15,"value":2659},"ctx.props.\u003Cname>",{"type":15,"value":165},{"type":9,"tag":187,"props":2662,"children":2663},{},[2664,2669,2671,2676,2678,2683,2685,2690,2692,2696,2698,2702,2704,2709,2711,2716,2717,2722,2724,2729],{"type":9,"tag":33,"props":2665,"children":2666},{},[2667],{"type":15,"value":2668},"Instance isolation",{"type":15,"value":2670}," (reuse-safe): every island occurrence is an isolated\ninstance. ",{"type":9,"tag":24,"props":2672,"children":2673},{"className":26},[2674],{"type":15,"value":2675},"defineIsland(name, (ctx) => …)",{"type":15,"value":2677}," receives that instance's root as ",{"type":9,"tag":24,"props":2679,"children":2680},{"className":26},[2681],{"type":15,"value":2682},"ctx.root",{"type":15,"value":2684},"; DOM access\nstays scoped to that root (prefer classes \u002F ",{"type":9,"tag":24,"props":2686,"children":2687},{"className":26},[2688],{"type":15,"value":2689},"data-*",{"type":15,"value":2691}," over global ",{"type":9,"tag":24,"props":2693,"children":2694},{"className":26},[2695],{"type":15,"value":1594},{"type":15,"value":2697},"s). The compiler\nrewrites any ",{"type":9,"tag":24,"props":2699,"children":2700},{"className":26},[2701],{"type":15,"value":1594},{"type":15,"value":2703}," inside an island to be ",{"type":9,"tag":33,"props":2705,"children":2706},{},[2707],{"type":15,"value":2708},"instance-unique",{"type":15,"value":2710}," so the emitted HTML\nis valid with multiple instances. The runtime supplies ",{"type":9,"tag":24,"props":2712,"children":2713},{"className":26},[2714],{"type":15,"value":2715},"ctx.id",{"type":15,"value":1342},{"type":9,"tag":24,"props":2718,"children":2719},{"className":26},[2720],{"type":15,"value":2721},"ctx.scoped(name)",{"type":15,"value":2723}," to namespace otherwise-global keys (e.g. SortableJS\n",{"type":9,"tag":24,"props":2725,"children":2726},{"className":26},[2727],{"type":15,"value":2728},"group",{"type":15,"value":2730},"). Full runtime API: BML-REQ-14.",{"type":9,"tag":187,"props":2732,"children":2733},{},[2734,2739,2741,2746,2748,2753],{"type":9,"tag":33,"props":2735,"children":2736},{},[2737],{"type":15,"value":2738},"Eager render",{"type":15,"value":2740},": ",{"type":9,"tag":24,"props":2742,"children":2743},{"className":26},[2744],{"type":15,"value":2745},"request",{"type":15,"value":2747}," (default) renders the island with the page request. ",{"type":9,"tag":24,"props":2749,"children":2750},{"className":26},[2751],{"type":15,"value":2752},"prerender",{"type":15,"value":2754}," is\naccepted as a reserved mode and currently follows the same request-rendered path.",{"type":9,"tag":187,"props":2756,"children":2757},{},[2758,2763,2764,2769,2771,2776,2778,2782,2784,2789,2791,2796,2798,2803],{"type":9,"tag":33,"props":2759,"children":2760},{},[2761],{"type":15,"value":2762},"Deferred render",{"type":15,"value":2740},{"type":9,"tag":24,"props":2765,"children":2766},{"className":26},[2767],{"type":15,"value":2768},"deferred",{"type":15,"value":2770}," emits only the boundary and one optional direct ",{"type":9,"tag":24,"props":2772,"children":2773},{"className":26},[2774],{"type":15,"value":2775},"\u003Cfallback>",{"type":15,"value":2777},"\nduring the page render. Direct ",{"type":9,"tag":24,"props":2779,"children":2780},{"className":26},[2781],{"type":15,"value":1982},{"type":15,"value":2783}," declarations define the typed JSON-shaped inputs copied\nfrom matching island attributes. The browser posts those inputs plus the current path, query, and\nlocale to the compiler-registered renderer; it resolves current request identity and returns a\nprivate, ",{"type":9,"tag":24,"props":2785,"children":2786},{"className":26},[2787],{"type":15,"value":2788},"no-store",{"type":15,"value":2790}," HTML fragment. The wire encoding preserves nested Kotlin numeric, character,\nlist, map, and primitive-array types; Kotlin ",{"type":9,"tag":24,"props":2792,"children":2793},{"className":26},[2794],{"type":15,"value":2795},"Long",{"type":15,"value":2797}," values become JavaScript ",{"type":9,"tag":24,"props":2799,"children":2800},{"className":26},[2801],{"type":15,"value":2802},"bigint",{"type":15,"value":2804}," values in\nclient scripts so they remain exact. Enclosing render locals do not cross the request boundary.\nServer loaders and live models declared directly in the deferred scope run on the deferred request.\nFallback content is static server-rendered markup; components used there must also be free of client\nscripts and declarative actions. Client scripts and refs belong in the deferred body.",{"type":9,"tag":109,"props":2806,"children":2807},{},[],{"type":9,"tag":113,"props":2809,"children":2811},{"id":2810},"_5-code-region-scope-data-flow",[2812],{"type":15,"value":2813},"5. Code-region scope & data flow",{"type":9,"tag":183,"props":2815,"children":2816},{},[2817,2849,2929,2951,3016,3028],{"type":9,"tag":187,"props":2818,"children":2819},{},[2820,2827,2829,2833,2835,2840,2842,2847],{"type":9,"tag":33,"props":2821,"children":2822},{},[2823],{"type":9,"tag":24,"props":2824,"children":2825},{"className":26},[2826],{"type":15,"value":2377},{"type":15,"value":2828}," — Kotlin. The value bound to ",{"type":9,"tag":24,"props":2830,"children":2831},{"className":26},[2832],{"type":15,"value":695},{"type":15,"value":2834}," is the\nvalue of the block's ",{"type":9,"tag":33,"props":2836,"children":2837},{},[2838],{"type":15,"value":2839},"last expression",{"type":15,"value":2841}," (Kotlin block semantics). Without\n",{"type":9,"tag":24,"props":2843,"children":2844},{"className":26},[2845],{"type":15,"value":2846},"provides",{"type":15,"value":2848},", the block contributes imports\u002Fdeclarations but binds nothing.\nMultiple server blocks compose top-to-bottom; later blocks see earlier bindings,\nroute params, and props.",{"type":9,"tag":187,"props":2850,"children":2851},{},[2852,2854,2858,2860,2865,2867,2871,2872,2876,2878,2882,2884,2889,2891,2895,2897,2902,2904,2908,2910,2914,2916,2920,2922,2927],{"type":15,"value":2853},"A constructor-typed ",{"type":9,"tag":24,"props":2855,"children":2856},{"className":26},[2857],{"type":15,"value":2846},{"type":15,"value":2859}," or explicitly typed ",{"type":9,"tag":24,"props":2861,"children":2862},{"className":26},[2863],{"type":15,"value":2864},"\u003Cinject server>",{"type":15,"value":2866}," used by a live action has\nexactly one state ",{"type":9,"tag":24,"props":2868,"children":2869},{"className":26},[2870],{"type":15,"value":2493},{"type":15,"value":1420},{"type":9,"tag":24,"props":2873,"children":2874},{"className":26},[2875],{"type":15,"value":2500},{"type":15,"value":2877}," (the default) round-trips the model only for the current rendered page, so a fresh SSR\nrender wins after navigation or refresh; ",{"type":9,"tag":24,"props":2879,"children":2880},{"className":26},[2881],{"type":15,"value":2048},{"type":15,"value":2883}," stores the serialized model in browser\n",{"type":9,"tag":24,"props":2885,"children":2886},{"className":26},[2887],{"type":15,"value":2888},"sessionStorage",{"type":15,"value":2890},", where it remains authoritative until that browser session ends; ",{"type":9,"tag":24,"props":2892,"children":2893},{"className":26},[2894],{"type":15,"value":2054},{"type":15,"value":2896},"\nstores it in browser ",{"type":9,"tag":24,"props":2898,"children":2899},{"className":26},[2900],{"type":15,"value":2901},"localStorage",{"type":15,"value":2903},", where it survives tab closure and browser restarts; and\n",{"type":9,"tag":24,"props":2905,"children":2906},{"className":26},[2907],{"type":15,"value":2061},{"type":15,"value":2909}," stores the model in the cookie-identified BML server session and never sends its\nvalue to the client. Client storage is readable by same-origin JavaScript and is not for secrets.\nA browser-backed live model may add the bare ",{"type":9,"tag":24,"props":2911,"children":2912},{"className":26},[2913],{"type":15,"value":2529},{"type":15,"value":2915}," marker when its state belongs to\nthe authenticated identity. ",{"type":9,"tag":24,"props":2917,"children":2918},{"className":26},[2919],{"type":15,"value":2547},{"type":15,"value":2921}," clears marked browser state, preserves unmarked\nbrowser state, replaces the opaque server session, and reloads by default so the server recomputes\nshell markup, deferred props, and fallback content. Use ",{"type":9,"tag":24,"props":2923,"children":2924},{"className":26},[2925],{"type":15,"value":2926},"{ reload: false }",{"type":15,"value":2928}," only when all shell\ncontent is identity-independent.",{"type":9,"tag":187,"props":2930,"children":2931},{},[2932,2937,2939,2943,2945,2950],{"type":9,"tag":33,"props":2933,"children":2934},{},[2935],{"type":15,"value":2936},"Generated GraphQL operations",{"type":15,"value":2938}," are in scope as Kotlin symbols inside\n",{"type":9,"tag":24,"props":2940,"children":2941},{"className":26},[2942],{"type":15,"value":276},{"type":15,"value":2944}," (no manual import). BML also enables the GraphQL plugin's TypeScript target;\nclient modules import its typed function from ",{"type":9,"tag":24,"props":2946,"children":2947},{"className":26},[2948],{"type":15,"value":2949},".\u002Fgraphql\u002FOpName",{"type":15,"value":165},{"type":9,"tag":187,"props":2952,"children":2953},{},[2954,2959,2961,2966,2968,2973,2974,2979,2980,2985,2986,2990,2991,2996,2997,3002,3004,3008,3010,3014],{"type":9,"tag":33,"props":2955,"children":2956},{},[2957],{"type":15,"value":2958},"Feature flags",{"type":15,"value":2960}," use ",{"type":9,"tag":24,"props":2962,"children":2963},{"className":26},[2964],{"type":15,"value":2965},"RenderContext.featureFlags",{"type":15,"value":2967},". It provides ",{"type":9,"tag":24,"props":2969,"children":2970},{"className":26},[2971],{"type":15,"value":2972},"evaluate",{"type":15,"value":2301},{"type":9,"tag":24,"props":2975,"children":2976},{"className":26},[2977],{"type":15,"value":2978},"evaluateAll",{"type":15,"value":248},{"type":9,"tag":24,"props":2981,"children":2982},{"className":26},[2983],{"type":15,"value":2984},"enabled",{"type":15,"value":248},{"type":9,"tag":24,"props":2987,"children":2988},{"className":26},[2989],{"type":15,"value":2318},{"type":15,"value":248},{"type":9,"tag":24,"props":2992,"children":2993},{"className":26},[2994],{"type":15,"value":2995},"string",{"type":15,"value":248},{"type":9,"tag":24,"props":2998,"children":2999},{"className":26},[3000],{"type":15,"value":3001},"number",{"type":15,"value":3003},", and raw ",{"type":9,"tag":24,"props":3005,"children":3006},{"className":26},[3007],{"type":15,"value":2293},{"type":15,"value":3009}," helpers; the\nfeature-aware ",{"type":9,"tag":24,"props":3011,"children":3012},{"className":26},[3013],{"type":15,"value":1902},{"type":15,"value":3015}," form lowers to this same API. Evaluations are cached within a render.",{"type":9,"tag":187,"props":3017,"children":3018},{},[3019,3026],{"type":9,"tag":33,"props":3020,"children":3021},{},[3022],{"type":9,"tag":24,"props":3023,"children":3024},{"className":26},[3025],{"type":15,"value":288},{"type":15,"value":3027}," — Kotlin interface(s) defining typed client↔server RPC; the\ncompiler emits a server dispatcher and a typed TS stub (BML-REQ-8). Optional.",{"type":9,"tag":187,"props":3029,"children":3030},{},[3031,3033,3037,3039,3043],{"type":15,"value":3032},"Scope is lexical: page and component bodies see their own props, route params, ",{"type":9,"tag":24,"props":3034,"children":3035},{"className":26},[3036],{"type":15,"value":2846},{"type":15,"value":3038}," bindings,\nand direct-child ",{"type":9,"tag":24,"props":3040,"children":3041},{"className":26},[3042],{"type":15,"value":2355},{"type":15,"value":3044}," declarations.",{"type":9,"tag":109,"props":3046,"children":3047},{},[],{"type":9,"tag":113,"props":3049,"children":3051},{"id":3050},"_6-expression-sublanguage-expr",[3052,3054,3058],{"type":15,"value":3053},"6. Expression sublanguage (",{"type":9,"tag":24,"props":3055,"children":3056},{"className":26},[3057],{"type":15,"value":553},{"type":15,"value":3059},")",{"type":9,"tag":18,"props":3061,"children":3062},{},[3063,3067,3069,3074,3076,3081],{"type":9,"tag":24,"props":3064,"children":3065},{"className":26},[3066],{"type":15,"value":553},{"type":15,"value":3068}," is a ",{"type":9,"tag":33,"props":3070,"children":3071},{},[3072],{"type":15,"value":3073},"typed subset of Kotlin expressions",{"type":15,"value":3075}," that lowers verbatim into the\ngenerated ",{"type":9,"tag":24,"props":3077,"children":3078},{"className":26},[3079],{"type":15,"value":3080},".kt",{"type":15,"value":3082},". v1 admits:",{"type":9,"tag":183,"props":3084,"children":3085},{},[3086,3108,3120,3132,3158,3195,3212,3223],{"type":9,"tag":187,"props":3087,"children":3088},{},[3089,3091,3095,3096,3100,3102,3106],{"type":15,"value":3090},"literals (number, string ",{"type":9,"tag":24,"props":3092,"children":3093},{"className":26},[3094],{"type":15,"value":593},{"type":15,"value":595},{"type":9,"tag":24,"props":3097,"children":3098},{"className":26},[3099],{"type":15,"value":606},{"type":15,"value":3101},", char, boolean, ",{"type":9,"tag":24,"props":3103,"children":3104},{"className":26},[3105],{"type":15,"value":981},{"type":15,"value":3107},");",{"type":9,"tag":187,"props":3109,"children":3110},{},[3111,3113,3118],{"type":15,"value":3112},"identifiers and member access ",{"type":9,"tag":24,"props":3114,"children":3115},{"className":26},[3116],{"type":15,"value":3117},"a.b.c",{"type":15,"value":3119},";",{"type":9,"tag":187,"props":3121,"children":3122},{},[3123,3125,3130],{"type":15,"value":3124},"calls ",{"type":9,"tag":24,"props":3126,"children":3127},{"className":26},[3128],{"type":15,"value":3129},"f(x, y = z)",{"type":15,"value":3131},", including suspend calls (rendering is in a suspend context);",{"type":9,"tag":187,"props":3133,"children":3134},{},[3135,3137,3142,3144,3149,3151,3156],{"type":15,"value":3136},"index ",{"type":9,"tag":24,"props":3138,"children":3139},{"className":26},[3140],{"type":15,"value":3141},"a[i]",{"type":15,"value":3143},"; safe-call ",{"type":9,"tag":24,"props":3145,"children":3146},{"className":26},[3147],{"type":15,"value":3148},"a?.b",{"type":15,"value":3150},"; elvis ",{"type":9,"tag":24,"props":3152,"children":3153},{"className":26},[3154],{"type":15,"value":3155},"a ?: b",{"type":15,"value":3157},"; not-null is discouraged;",{"type":9,"tag":187,"props":3159,"children":3160},{},[3161,3163,3168,3170,3175,3176,3181,3182,3187,3189,3194],{"type":15,"value":3162},"operators ",{"type":9,"tag":24,"props":3164,"children":3165},{"className":26},[3166],{"type":15,"value":3167},"+ - * \u002F %",{"type":15,"value":3169},", comparisons, ",{"type":9,"tag":24,"props":3171,"children":3172},{"className":26},[3173],{"type":15,"value":3174},"&& || !",{"type":15,"value":248},{"type":9,"tag":24,"props":3177,"children":3178},{"className":26},[3179],{"type":15,"value":3180},"in",{"type":15,"value":248},{"type":9,"tag":24,"props":3183,"children":3184},{"className":26},[3185],{"type":15,"value":3186},"is",{"type":15,"value":3188},", ranges ",{"type":9,"tag":24,"props":3190,"children":3191},{"className":26},[3192],{"type":15,"value":3193},"a..b",{"type":15,"value":3119},{"type":9,"tag":187,"props":3196,"children":3197},{},[3198,3203,3205,3210],{"type":9,"tag":24,"props":3199,"children":3200},{"className":26},[3201],{"type":15,"value":3202},"if (…) … else …",{"type":15,"value":3204}," expressions and ",{"type":9,"tag":24,"props":3206,"children":3207},{"className":26},[3208],{"type":15,"value":3209},"when",{"type":15,"value":3211}," expressions;",{"type":9,"tag":187,"props":3213,"children":3214},{},[3215,3217,3222],{"type":15,"value":3216},"string templates inside string literals (",{"type":9,"tag":24,"props":3218,"children":3219},{"className":26},[3220],{"type":15,"value":3221},"\"${'$'}{x}\"",{"type":15,"value":3107},{"type":9,"tag":187,"props":3224,"children":3225},{},[3226,3228,3233],{"type":15,"value":3227},"lambdas ",{"type":9,"tag":24,"props":3229,"children":3230},{"className":26},[3231],{"type":15,"value":3232},"{ it.name }",{"type":15,"value":3234}," for higher-order calls.",{"type":9,"tag":18,"props":3236,"children":3237},{},[3238,3240,3244,3246,3251,3252,3257,3259,3263],{"type":15,"value":3239},"Excluded in v1 (use a ",{"type":9,"tag":24,"props":3241,"children":3242},{"className":26},[3243],{"type":15,"value":276},{"type":15,"value":3245}," block instead): statements, loops,\nlocal ",{"type":9,"tag":24,"props":3247,"children":3248},{"className":26},[3249],{"type":15,"value":3250},"fun",{"type":15,"value":595},{"type":9,"tag":24,"props":3253,"children":3254},{"className":26},[3255],{"type":15,"value":3256},"class",{"type":15,"value":3258}," declarations, assignments. Diagnostics reject these with a\n",{"type":9,"tag":24,"props":3260,"children":3261},{"className":26},[3262],{"type":15,"value":29},{"type":15,"value":3264},"-anchored message.",{"type":9,"tag":109,"props":3266,"children":3267},{},[],{"type":9,"tag":113,"props":3269,"children":3271},{"id":3270},"_7-tag-resolution-summary-full-model-in-bml-req-5",[3272],{"type":15,"value":3273},"7. Tag resolution (summary; full model in BML-REQ-5)",{"type":9,"tag":18,"props":3275,"children":3276},{},[3277],{"type":15,"value":3278},"At compile time each element name resolves through the tag registry:",{"type":9,"tag":3280,"props":3281,"children":3282},"ol",{},[3283,3301,3313,3329],{"type":9,"tag":187,"props":3284,"children":3285},{},[3286,3288,3293,3295,3299],{"type":15,"value":3287},"project\u002Ffile ",{"type":9,"tag":33,"props":3289,"children":3290},{},[3291],{"type":15,"value":3292},"custom or override",{"type":15,"value":3294}," component (",{"type":9,"tag":24,"props":3296,"children":3297},{"className":26},[3298],{"type":15,"value":370},{"type":15,"value":3300},"),",{"type":9,"tag":187,"props":3302,"children":3303},{},[3304,3306,3311],{"type":15,"value":3305},"built-in ",{"type":9,"tag":33,"props":3307,"children":3308},{},[3309],{"type":15,"value":3310},"special",{"type":15,"value":3312}," tag (§4) — always wins for protected names,",{"type":9,"tag":187,"props":3314,"children":3315},{},[3316,3317,3322,3324,3328],{"type":15,"value":3305},{"type":9,"tag":33,"props":3318,"children":3319},{},[3320],{"type":15,"value":3321},"HTML or SVG",{"type":15,"value":3323}," tag (SVG vocabulary is native inside ",{"type":9,"tag":24,"props":3325,"children":3326},{"className":26},[3327],{"type":15,"value":837},{"type":15,"value":3300},{"type":9,"tag":187,"props":3330,"children":3331},{},[3332,3334,3338],{"type":15,"value":3333},"otherwise a compile error (",{"type":9,"tag":24,"props":3335,"children":3336},{"className":26},[3337],{"type":15,"value":29},{"type":15,"value":3339},"-anchored).",{"type":9,"tag":18,"props":3341,"children":3342},{},[3343,3348,3350,3355,3357,3361,3362,3366,3367,3372,3374,3379,3381,3385],{"type":9,"tag":33,"props":3344,"children":3345},{},[3346],{"type":15,"value":3347},"Protected",{"type":15,"value":3349}," (never overrideable): ",{"type":9,"tag":24,"props":3351,"children":3352},{"className":26},[3353],{"type":15,"value":3354},"page, template, component, prop, slot, use, for, if, else-if, else, data, inject, island, script, contract, style",{"type":15,"value":3356},". All other tags\n(including ",{"type":9,"tag":24,"props":3358,"children":3359},{"className":26},[3360],{"type":15,"value":1045},{"type":15,"value":248},{"type":9,"tag":24,"props":3363,"children":3364},{"className":26},[3365],{"type":15,"value":862},{"type":15,"value":248},{"type":9,"tag":24,"props":3368,"children":3369},{"className":26},[3370],{"type":15,"value":3371},"form",{"type":15,"value":3373},", …) are ",{"type":9,"tag":33,"props":3375,"children":3376},{},[3377],{"type":15,"value":3378},"overrideable",{"type":15,"value":3380}," by a ",{"type":9,"tag":24,"props":3382,"children":3383},{"className":26},[3384],{"type":15,"value":370},{"type":15,"value":165},{"type":9,"tag":18,"props":3387,"children":3388},{},[3389,3394,3396,3400,3401,3405,3407,3412,3414,3419],{"type":9,"tag":33,"props":3390,"children":3391},{},[3392],{"type":15,"value":3393},"Native escape hatch:",{"type":15,"value":3395}," the ",{"type":9,"tag":24,"props":3397,"children":3398},{"className":26},[3399],{"type":15,"value":805},{"type":15,"value":1152},{"type":9,"tag":24,"props":3402,"children":3403},{"className":26},[3404],{"type":15,"value":830},{"type":15,"value":3406}," namespaces always resolve to their built-in\nhandlers, bypassing overrides. This is how an override references the tag it overrides without\ninfinite recursion, e.g. inside ",{"type":9,"tag":24,"props":3408,"children":3409},{"className":26},[3410],{"type":15,"value":3411},"\u003Ccomponent tag=\"a\">",{"type":15,"value":3413}," emit ",{"type":9,"tag":24,"props":3415,"children":3416},{"className":26},[3417],{"type":15,"value":3418},"\u003Chtml:a …>",{"type":15,"value":3420}," for the real anchor.",{"type":9,"tag":109,"props":3422,"children":3423},{},[],{"type":9,"tag":113,"props":3425,"children":3427},{"id":3426},"_8-output-escaping-security",[3428],{"type":15,"value":3429},"8. Output escaping & security",{"type":9,"tag":183,"props":3431,"children":3432},{},[3433,3459,3477],{"type":9,"tag":187,"props":3434,"children":3435},{},[3436,3440,3441,3445,3447,3451,3452,3457],{"type":9,"tag":24,"props":3437,"children":3438},{"className":26},[3439],{"type":15,"value":616},{"type":15,"value":198},{"type":9,"tag":24,"props":3442,"children":3443},{"className":26},[3444],{"type":15,"value":572},{"type":15,"value":3446},") HTML-escapes its string output. ",{"type":9,"tag":24,"props":3448,"children":3449},{"className":26},[3450],{"type":15,"value":622},{"type":15,"value":198},{"type":9,"tag":24,"props":3453,"children":3454},{"className":26},[3455],{"type":15,"value":3456},"{@ … }",{"type":15,"value":3458},")\nemits unescaped HTML and is the explicit, auditable trusted-HTML path.",{"type":9,"tag":187,"props":3460,"children":3461},{},[3462,3464,3469,3470,3475],{"type":15,"value":3463},"Attribute interpolations are attribute-escaped; ",{"type":9,"tag":24,"props":3465,"children":3466},{"className":26},[3467],{"type":15,"value":3468},":href",{"type":15,"value":595},{"type":9,"tag":24,"props":3471,"children":3472},{"className":26},[3473],{"type":15,"value":3474},"href",{"type":15,"value":3476}," values are\nURL-context aware (REQ-11 renderer responsibility).",{"type":9,"tag":187,"props":3478,"children":3479},{},[3480],{"type":15,"value":3481},"The email\u002Fplain-text targets apply their own escaping\u002Fnormalization (REQ-13).",{"type":9,"tag":109,"props":3483,"children":3484},{},[],{"type":9,"tag":113,"props":3486,"children":3488},{"id":3487},"_81-localization-t-t-bml-spec-3",[3489,3491,3496,3498,3503],{"type":15,"value":3490},"8.1 Localization (",{"type":9,"tag":24,"props":3492,"children":3493},{"className":26},[3494],{"type":15,"value":3495},"t",{"type":15,"value":3497}," \u002F ",{"type":9,"tag":24,"props":3499,"children":3500},{"className":26},[3501],{"type":15,"value":3502},"t:",{"type":15,"value":3504}," — BML-SPEC-3)",{"type":9,"tag":18,"props":3506,"children":3507},{},[3508,3510,3514,3515,3519,3521,3537,3539,3544,3546,3550,3552,3557,3559,3563],{"type":15,"value":3509},"All localization syntax lives in the ",{"type":9,"tag":24,"props":3511,"children":3512},{"className":26},[3513],{"type":15,"value":3495},{"type":15,"value":595},{"type":9,"tag":24,"props":3516,"children":3517},{"className":26},[3518],{"type":15,"value":3502},{"type":15,"value":3520}," vocabulary; nothing else in the language is\nreserved for it. The vocabulary carries exactly two non-inferable facts: ",{"type":9,"tag":33,"props":3522,"children":3523},{},[3524,3528,3530,3535],{"type":9,"tag":24,"props":3525,"children":3526},{"className":26},[3527],{"type":15,"value":3495},{"type":15,"value":3529}," names the\ncatalog key, ",{"type":9,"tag":24,"props":3531,"children":3532},{"className":26},[3533],{"type":15,"value":3534},"t:count",{"type":15,"value":3536}," binds the number that selects a plural form.",{"type":15,"value":3538}," Plural-ness is implied,\nnever declared. Strings come from the site's bound ",{"type":9,"tag":33,"props":3540,"children":3541},{},[3542],{"type":15,"value":3543},"Bosca localization project",{"type":15,"value":3545},", which also\ndefines the site's locales (source language = default); requests negotiate ",{"type":9,"tag":24,"props":3547,"children":3548},{"className":26},[3549],{"type":15,"value":1340},{"type":15,"value":3551}," →\n",{"type":9,"tag":24,"props":3553,"children":3554},{"className":26},[3555],{"type":15,"value":3556},"bml_locale",{"type":15,"value":3558}," cookie → ",{"type":9,"tag":24,"props":3560,"children":3561},{"className":26},[3562],{"type":15,"value":1347},{"type":15,"value":3564}," (full RFC 4647).",{"type":9,"tag":18,"props":3566,"children":3567},{},[3568,3573],{"type":9,"tag":33,"props":3569,"children":3570},{},[3571],{"type":15,"value":3572},"Element text",{"type":15,"value":3574}," — pin a key; the authored children are the source message AND the guaranteed\nruntime fallback (keys never render from this path):",{"type":9,"tag":167,"props":3576,"children":3581},{"className":3577,"code":3579,"filename":-1,"highlights":-1,"language":3580,"meta":26},[3578],"language-html","\u003Ch1 t=\"welcome.back\">Welcome back, { user.firstName }!\u003C\u002Fh1>\n","html",[3582],{"type":9,"tag":24,"props":3583,"children":3584},{"__ignoreMap":26},[3585],{"type":15,"value":3579},{"type":9,"tag":18,"props":3587,"children":3588},{},[3589,3591,3596,3598,3603,3605,3610,3612,3617],{"type":15,"value":3590},"The compiler folds the children into one message template (",{"type":9,"tag":24,"props":3592,"children":3593},{"className":26},[3594],{"type":15,"value":3595},"Welcome back, {firstName}!",{"type":15,"value":3597},"):\ninterpolations become named placeholders (trailing identifier of a simple dotted path;\npositional otherwise; identical expressions share a name), entities decode at compile time,\nwhitespace runs collapse. Children may contain only text and ",{"type":9,"tag":24,"props":3599,"children":3600},{"className":26},[3601],{"type":15,"value":3602},"{ }",{"type":15,"value":3604}," interpolations — nested\nelements, ",{"type":9,"tag":24,"props":3606,"children":3607},{"className":26},[3608],{"type":15,"value":3609},"{@ }",{"type":15,"value":3611},", and flow tags are compile errors (restructure or use ",{"type":9,"tag":24,"props":3613,"children":3614},{"className":26},[3615],{"type":15,"value":3616},"t()",{"type":15,"value":3618},"). One key, one\nmessage: redeclaring a key with different source text is a compile error, in-file or\ncross-file.",{"type":9,"tag":18,"props":3620,"children":3621},{},[3622,3627,3628,3633,3635,3640,3642,3647,3649,3654],{"type":9,"tag":33,"props":3623,"children":3624},{},[3625],{"type":15,"value":3626},"Plurals",{"type":15,"value":1855},{"type":9,"tag":24,"props":3629,"children":3630},{"className":26},[3631],{"type":15,"value":3632},"t:count=\"\u003Cexpr>\"",{"type":15,"value":3634}," binds the count; ",{"type":9,"tag":24,"props":3636,"children":3637},{"className":26},[3638],{"type":15,"value":3639},"\u003Ct:zero|one|two|few|many|other>",{"type":15,"value":3641}," children\ncarry the authored CLDR forms (",{"type":9,"tag":24,"props":3643,"children":3644},{"className":26},[3645],{"type":15,"value":3646},"\u003Ct:other>",{"type":15,"value":3648}," required; an interpolation matching the count\nexpression folds as ",{"type":9,"tag":24,"props":3650,"children":3651},{"className":26},[3652],{"type":15,"value":3653},"{count}",{"type":15,"value":3655},"):",{"type":9,"tag":167,"props":3657,"children":3660},{"className":3658,"code":3659,"filename":-1,"highlights":-1,"language":3580,"meta":26},[3578],"\u003Cspan t=\"cart.items\" t:count=\"items.size\">\n  \u003Ct:one>You have one item\u003C\u002Ft:one>\n  \u003Ct:other>You have { items.size } items\u003C\u002Ft:other>\n\u003C\u002Fspan>\n",[3661],{"type":9,"tag":24,"props":3662,"children":3663},{"__ignoreMap":26},[3664],{"type":15,"value":3659},{"type":9,"tag":18,"props":3666,"children":3667},{},[3668,3670,3674],{"type":15,"value":3669},"Selection walks: catalog row for the locale's category → the locale's OTHER row → the\nfallback chain → the authored forms (source-language rules). Shorthand: ",{"type":9,"tag":24,"props":3671,"children":3672},{"className":26},[3673],{"type":15,"value":3534},{"type":15,"value":3675}," with plain\nchildren makes the authored text the OTHER form.",{"type":9,"tag":18,"props":3677,"children":3678},{},[3679,3684,3685,3690,3692,3697,3699,3704,3706,3710,3712,3717],{"type":9,"tag":33,"props":3680,"children":3681},{},[3682],{"type":15,"value":3683},"Attribute text",{"type":15,"value":1855},{"type":9,"tag":24,"props":3686,"children":3687},{"className":26},[3688],{"type":15,"value":3689},"t:\u003Cattr>=\"key\"",{"type":15,"value":3691}," pairs a key with the authored attribute value as source\nand fallback: ",{"type":9,"tag":24,"props":3693,"children":3694},{"className":26},[3695],{"type":15,"value":3696},"\u003Cinput t:placeholder=\"search.hint\" placeholder=\"Search here\">",{"type":15,"value":3698},". Every\n",{"type":9,"tag":24,"props":3700,"children":3701},{"className":26},[3702],{"type":15,"value":3703},"t:\u003Cname>",{"type":15,"value":3705}," other than ",{"type":9,"tag":24,"props":3707,"children":3708},{"className":26},[3709],{"type":15,"value":3534},{"type":15,"value":3711}," requires a sibling ",{"type":9,"tag":24,"props":3713,"children":3714},{"className":26},[3715],{"type":15,"value":3716},"\u003Cname>",{"type":15,"value":3718}," attribute with plain-text value.",{"type":9,"tag":18,"props":3720,"children":3721},{},[3722,3732,3734,3739,3740,3745,3746,3751,3753,3758,3759,3764,3766,3771,3773,3778,3780,3785],{"type":9,"tag":33,"props":3723,"children":3724},{},[3725,3726,3730],{"type":15,"value":567},{"type":9,"tag":24,"props":3727,"children":3728},{"className":26},[3729],{"type":15,"value":3616},{"type":15,"value":3731}," function",{"type":15,"value":3733}," — the computed-string tier (server scripts, island props, dynamic\nkeys, email subjects): ",{"type":9,"tag":24,"props":3735,"children":3736},{"className":26},[3737],{"type":15,"value":3738},"t(\"key\")",{"type":15,"value":248},{"type":9,"tag":24,"props":3741,"children":3742},{"className":26},[3743],{"type":15,"value":3744},"t(\"key\", \"name\" to v)",{"type":15,"value":248},{"type":9,"tag":24,"props":3747,"children":3748},{"className":26},[3749],{"type":15,"value":3750},"t(\"key\", count)",{"type":15,"value":3752},". These forms\ncarry no authored fallback, so a missing key renders the key itself (warned once). For\nstrings markup can't carry (email subjects, component prop values) prefer the\n",{"type":9,"tag":33,"props":3754,"children":3755},{},[3756],{"type":15,"value":3757},"authored-default form",{"type":15,"value":915},{"type":9,"tag":24,"props":3760,"children":3761},{"className":26},[3762],{"type":15,"value":3763},"t(\"key\", \"Welcome to {appName}\", \"appName\" to m.appName)",{"type":15,"value":3765}," — a\nmissing key formats the authored default instead of rendering the key, and the manifest\nscanner harvests that default as the key's source message (so ",{"type":9,"tag":24,"props":3767,"children":3768},{"className":26},[3769],{"type":15,"value":3770},"i18n push",{"type":15,"value":3772}," seeds it). A\nsecond string literal followed by ",{"type":9,"tag":24,"props":3774,"children":3775},{"className":26},[3776],{"type":15,"value":3777},"to",{"type":15,"value":3779}," is a placeholder pair, not a default. Locale-aware\nformatting helpers (",{"type":9,"tag":24,"props":3781,"children":3782},{"className":26},[3783],{"type":15,"value":3784},"formatNumber\u002FPercent\u002FCurrency\u002FDate\u002FDateTime",{"type":15,"value":3786},") are ambient alongside it.",{"type":9,"tag":18,"props":3788,"children":3789},{},[3790,3795,3797,3801,3803,3807,3808,3813,3815,3820],{"type":9,"tag":33,"props":3791,"children":3792},{},[3793],{"type":15,"value":3794},"Escaping",{"type":15,"value":3796},": localized output always renders through the escaped text path — translations\nare data, not markup ({@ } is rejected inside ",{"type":9,"tag":24,"props":3798,"children":3799},{"className":26},[3800],{"type":15,"value":3495},{"type":15,"value":3802}," elements). ",{"type":9,"tag":24,"props":3804,"children":3805},{"className":26},[3806],{"type":15,"value":3495},{"type":15,"value":595},{"type":9,"tag":24,"props":3809,"children":3810},{"className":26},[3811],{"type":15,"value":3812},"t:*",{"type":15,"value":3814}," attributes and\n",{"type":9,"tag":24,"props":3816,"children":3817},{"className":26},[3818],{"type":15,"value":3819},"\u003Ct:category>",{"type":15,"value":3821}," tags are compile-time only and never reach the output HTML.",{"type":9,"tag":18,"props":3823,"children":3824},{},[3825,3830,3832,3836,3838,3843,3845,3850],{"type":9,"tag":33,"props":3826,"children":3827},{},[3828],{"type":15,"value":3829},"Authoring loop",{"type":15,"value":3831},": the compiler writes ",{"type":9,"tag":24,"props":3833,"children":3834},{"className":26},[3835],{"type":15,"value":1542},{"type":15,"value":3837}," into the resources output;\n",{"type":9,"tag":24,"props":3839,"children":3840},{"className":26},[3841],{"type":15,"value":3842},"bosca bml i18n extract|push|status",{"type":15,"value":3844}," feeds those keys into the localization project (create +\nsource-seed only, never deletes). Translators work entirely in the localization workflow;\nBML renders ",{"type":9,"tag":24,"props":3846,"children":3847},{"className":26},[3848],{"type":15,"value":3849},"PUBLISHED",{"type":15,"value":3851}," translations.",{"type":9,"tag":109,"props":3853,"children":3854},{},[],{"type":9,"tag":113,"props":3856,"children":3858},{"id":3857},"_9-source-position-model",[3859],{"type":15,"value":3860},"9. Source-position model",{"type":9,"tag":18,"props":3862,"children":3863},{},[3864,3866,3871],{"type":15,"value":3865},"Every token and AST node carries a ",{"type":9,"tag":24,"props":3867,"children":3868},{"className":26},[3869],{"type":15,"value":3870},"Span",{"type":15,"value":1621},{"type":9,"tag":167,"props":3873,"children":3876},{"className":3874,"code":3875,"filename":-1,"highlights":-1,"language":15,"meta":-1},[170],"Span ::= { startOffset: Int, endOffset: Int, startLine: Int, startCol: Int, endLine: Int, endCol: Int }\n",[3877],{"type":9,"tag":24,"props":3878,"children":3879},{"__ignoreMap":26},[3880],{"type":15,"value":3875},{"type":9,"tag":183,"props":3882,"children":3883},{},[3884,3889,3919],{"type":9,"tag":187,"props":3885,"children":3886},{},[3887],{"type":15,"value":3888},"Offsets are byte offsets into the original UTF-8 file.",{"type":9,"tag":187,"props":3890,"children":3891},{},[3892,3894,3898,3899,3904,3906,3910,3912,3917],{"type":15,"value":3893},"Raw-text regions additionally record the content span (excluding the tags) so\nthe compiler can emit a source map \u002F line directives from generated ",{"type":9,"tag":24,"props":3895,"children":3896},{"className":26},[3897],{"type":15,"value":3080},{"type":15,"value":595},{"type":9,"tag":24,"props":3900,"children":3901},{"className":26},[3902],{"type":15,"value":3903},".ts",{"type":15,"value":3905},"\nback to ",{"type":9,"tag":24,"props":3907,"children":3908},{"className":26},[3909],{"type":15,"value":29},{"type":15,"value":3911}," for diagnostics and ",{"type":9,"tag":33,"props":3913,"children":3914},{},[3915],{"type":15,"value":3916},"breakpoints",{"type":15,"value":3918}," (BML-REQ-4 \u002F BML-REQ-21).",{"type":9,"tag":187,"props":3920,"children":3921},{},[3922,3924,3928],{"type":15,"value":3923},"Every diagnostic references a ",{"type":9,"tag":24,"props":3925,"children":3926},{"className":26},[3927],{"type":15,"value":3870},{"type":15,"value":165},{"type":9,"tag":109,"props":3930,"children":3931},{},[],{"type":9,"tag":113,"props":3933,"children":3935},{"id":3934},"_10-deferred-to-bml-req-4-parser-future",[3936],{"type":15,"value":3937},"10. Deferred to BML-REQ-4 (parser) \u002F future",{"type":9,"tag":183,"props":3939,"children":3940},{},[3941,3946,3957,3969,3985],{"type":9,"tag":187,"props":3942,"children":3943},{},[3944],{"type":15,"value":3945},"Exact whitespace-collapsing rules per target.",{"type":9,"tag":187,"props":3947,"children":3948},{},[3949,3951,3955],{"type":15,"value":3950},"Robust raw-text termination for embedded ",{"type":9,"tag":24,"props":3952,"children":3953},{"className":26},[3954],{"type":15,"value":711},{"type":15,"value":3956}," in string literals.",{"type":9,"tag":187,"props":3958,"children":3959},{},[3960,3962,3967],{"type":15,"value":3961},"Template\u002Flayout code generation, named slots, and ",{"type":9,"tag":24,"props":3963,"children":3964},{"className":26},[3965],{"type":15,"value":3966},"\u003Cuse name=\"…\"\u002F>",{"type":15,"value":3968}," invocation.",{"type":9,"tag":187,"props":3970,"children":3971},{},[3972,3974,3978,3979,3983],{"type":15,"value":3973},"Typed query params on ",{"type":9,"tag":24,"props":3975,"children":3976},{"className":26},[3977],{"type":15,"value":1150},{"type":15,"value":1152},{"type":9,"tag":24,"props":3980,"children":3981},{"className":26},[3982],{"type":15,"value":1157},{"type":15,"value":3984}," routes.",{"type":9,"tag":187,"props":3986,"children":3987},{},[3988,3990,3994,3995,3999],{"type":15,"value":3989},"Streaming\u002Fsuspense boundaries for slow ",{"type":9,"tag":24,"props":3991,"children":3992},{"className":26},[3993],{"type":15,"value":2349},{"type":15,"value":595},{"type":9,"tag":24,"props":3996,"children":3997},{"className":26},[3998],{"type":15,"value":276},{"type":15,"value":4000}," regions.",1790541170516]