[{"data":1,"prerenderedAt":946},["ShallowReactive",2],{"navigation_docs":3,"-authoring-actions-and-spans":191,"-authoring-actions-and-spans-surround":941},[4,31,67,103,129,155,175],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":30},"Getting started","i-lucide-rocket","\u002Fgetting-started","1.getting-started",[10,15,20,25],{"title":11,"path":12,"stem":13,"icon":14},"Introduction","\u002Fgetting-started\u002Fintroduction","1.getting-started\u002F1.introduction","i-lucide-house",{"title":16,"path":17,"stem":18,"icon":19},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":24},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F3.quick-start","i-lucide-play",{"title":26,"path":27,"stem":28,"icon":29},"Agent Skill","\u002Fgetting-started\u002Fagent-skill","1.getting-started\u002F4.agent-skill","i-lucide-sparkles",false,{"title":32,"icon":33,"path":34,"stem":35,"children":36,"page":30},"Authoring","i-lucide-pen-line","\u002Fauthoring","2.authoring",[37,42,47,52,57,62],{"title":38,"path":39,"stem":40,"icon":41},"Comark syntax","\u002Fauthoring\u002Fcomark-syntax","2.authoring\u002F1.comark-syntax","i-lucide-file-code",{"title":43,"path":44,"stem":45,"icon":46},"Frontmatter","\u002Fauthoring\u002Ffrontmatter","2.authoring\u002F2.frontmatter","i-lucide-heading",{"title":48,"path":49,"stem":50,"icon":51},"Modules","\u002Fauthoring\u002Fmodules","2.authoring\u002F3.modules","i-lucide-blocks",{"title":53,"path":54,"stem":55,"icon":56},"Merge tags and bindings","\u002Fauthoring\u002Fmerge-tags-and-bindings","2.authoring\u002F4.merge-tags-and-bindings","i-lucide-braces",{"title":58,"path":59,"stem":60,"icon":61},"Actions and spans","\u002Fauthoring\u002Factions-and-spans","2.authoring\u002F5.actions-and-spans","i-lucide-mouse-pointer-click",{"title":63,"path":64,"stem":65,"icon":66},"Compile errors","\u002Fauthoring\u002Fcompile-errors","2.authoring\u002F6.compile-errors","i-lucide-circle-alert",{"title":68,"icon":69,"path":70,"stem":71,"children":72,"page":30},"Rendering","i-lucide-layout-template","\u002Frendering","3.rendering",[73,78,83,88,93,98],{"title":74,"path":75,"stem":76,"icon":77},"Families and streams","\u002Frendering\u002Ffamilies-and-streams","3.rendering\u002F1.families-and-streams","i-lucide-users",{"title":79,"path":80,"stem":81,"icon":82},"Themes","\u002Frendering\u002Fthemes","3.rendering\u002F2.themes","i-lucide-palette",{"title":84,"path":85,"stem":86,"icon":87},"Config and the renderer","\u002Frendering\u002Fconfig-and-renderer","3.rendering\u002F3.config-and-renderer","i-lucide-settings",{"title":89,"path":90,"stem":91,"icon":92},"Layout and spacing","\u002Frendering\u002Flayout-and-spacing","3.rendering\u002F4.layout-and-spacing","i-lucide-ruler",{"title":94,"path":95,"stem":96,"icon":97},"HTML output","\u002Frendering\u002Fhtml-output","3.rendering\u002F5.html-output","i-lucide-code-xml",{"title":99,"path":100,"stem":101,"icon":102},"Plain text","\u002Frendering\u002Fplain-text","3.rendering\u002F6.plain-text","i-lucide-file-text",{"title":104,"icon":105,"path":106,"stem":107,"children":108,"page":30},"Sending","i-lucide-send","\u002Fsending","4.sending",[109,114,119,124],{"title":110,"path":111,"stem":112,"icon":113},"Message and MIME","\u002Fsending\u002Fmessage-and-mime","4.sending\u002F1.message-and-mime","i-lucide-mail",{"title":115,"path":116,"stem":117,"icon":118},"Router and streams","\u002Fsending\u002Frouter-and-streams","4.sending\u002F2.router-and-streams","i-lucide-route",{"title":120,"path":121,"stem":122,"icon":123},"SMTP","\u002Fsending\u002Fsmtp","4.sending\u002F3.smtp","i-lucide-server",{"title":125,"path":126,"stem":127,"icon":128},"Maps","\u002Fsending\u002Fmaps","4.sending\u002F4.maps","i-lucide-map",{"title":130,"icon":131,"path":132,"stem":133,"children":134,"page":30},"Tooling","i-lucide-wrench","\u002Ftooling","5.tooling",[135,140,145,150],{"title":136,"path":137,"stem":138,"icon":139},"The lttr CLI","\u002Ftooling\u002Fcli","5.tooling\u002F1.cli","i-lucide-terminal",{"title":141,"path":142,"stem":143,"icon":144},"Live preview","\u002Ftooling\u002Flive-preview","5.tooling\u002F2.live-preview","i-lucide-eye",{"title":146,"path":147,"stem":148,"icon":149},"Screenshots","\u002Ftooling\u002Fscreenshots","5.tooling\u002F3.screenshots","i-lucide-camera",{"title":151,"path":152,"stem":153,"icon":154},"Goldens and testing","\u002Ftooling\u002Fgoldens-and-testing","5.tooling\u002F4.goldens-and-testing","i-lucide-flask-conical",{"title":156,"icon":157,"path":158,"stem":159,"children":160,"page":30},"Guides","i-lucide-book-open","\u002Fguides","6.guides",[161,166,170],{"title":162,"path":163,"stem":164,"icon":165},"The Quiet example","\u002Fguides\u002Fthe-quiet-example","6.guides\u002F1.the-quiet-example","i-lucide-mail-open",{"title":167,"path":168,"stem":169,"icon":82},"Your own family and theme","\u002Fguides\u002Fyour-own-family-and-theme","6.guides\u002F2.your-own-family-and-theme",{"title":171,"path":172,"stem":173,"icon":174},"Releasing","\u002Fguides\u002Freleasing","6.guides\u002F3.releasing","i-lucide-tag",{"title":176,"icon":177,"path":178,"stem":179,"children":180,"page":30},"Reference","i-lucide-library","\u002Freference","7.reference",[181,186],{"title":182,"path":183,"stem":184,"icon":185},"API reference","\u002Freference\u002Fapi-reference","7.reference\u002F1.api-reference","i-lucide-list-tree",{"title":187,"path":188,"stem":189,"icon":190},"Gallery","\u002Freference\u002Fgallery","7.reference\u002F2.gallery","i-lucide-images",{"id":192,"title":58,"body":193,"description":934,"extension":935,"links":936,"meta":937,"navigation":938,"path":59,"seo":939,"stem":60,"__hash__":940},"docs\u002F2.authoring\u002F5.actions-and-spans.md",{"type":194,"value":195,"toc":925},"minimark",[196,209,240,245,250,256,306,310,316,340,362,368,372,379,463,473,503,507,524,596,599,608,612,615,671,711,718,722,728,795,874,891,905,909,921],[197,198,199,200,204,205,208],"p",{},"Two inline components make an email actionable: ",[201,202,203],"code",{},":button"," for the one thing the reader should do, and ",[201,206,207],{},":link"," for everything else. Spans style a run of text with a small, fixed set of classes.",[210,211,217],"pre",{"className":212,"code":213,"filename":214,"language":215,"meta":216,"style":216},"language-markdown shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","::actions\n:button[View payout]{href=\"{{payout_url}}\"} :link[See orders]{href=\"{{orders_url}}\"}\n::\n","templates\u002Fpayout.md","markdown","",[201,218,219,228,234],{"__ignoreMap":216},[220,221,224],"span",{"class":222,"line":223},"line",1,[220,225,227],{"class":226},"sTEyZ","::actions\n",[220,229,231],{"class":222,"line":230},2,[220,232,233],{"class":226},":button[View payout]{href=\"{{payout_url}}\"} :link[See orders]{href=\"{{orders_url}}\"}\n",[220,235,237],{"class":222,"line":236},3,[220,238,239],{"class":226},"::\n",[241,242],"email-preview",{"name":243,"width":244},"02-payout.sent",375,[246,247,249],"h2",{"id":248},"add-the-primary-button","Add the primary button",[197,251,252,255],{},[201,253,254],{},":button[Label]{href=\"…\"}"," renders a filled pill in the action colour, with a VML fallback so it stays a button in Outlook for Windows.",[257,258,259,277,294],"ul",{},[260,261,262,266,267,269,270,273,274,276],"li",{},[263,264,265],"strong",{},"One per template."," A second ",[201,268,203],{}," anywhere is ",[201,271,272],{},"more than one :button in the template",". An email with two primary actions has none; make the others ",[201,275,207],{},".",[260,278,279,282,283,286,287,290,291,276],{},[263,280,281],{},"Only in an action row"," of a ",[201,284,285],{},"statement"," or an ",[201,288,289],{},"actions"," module. In a letter it is ",[201,292,293],{},"letter: :button is not allowed; use :link",[260,295,296,299,300,302,303,276],{},[263,297,298],{},"On its own."," A ",[201,301,203],{}," in a paragraph with other text is ",[201,304,305],{},":button must stand alone in its paragraph",[246,307,309],{"id":308},"add-a-text-link","Add a text link",[197,311,312,315],{},[201,313,314],{},":link[Label]{href=\"…\"}"," is a text link. How it renders depends on where it is:",[257,317,318,331],{},[260,319,320,323,324,327,328,276],{},[263,321,322],{},"In an action row",", it is a bold link in the action colour with ",[201,325,326],{}," ›"," appended, unless the label already ends with ",[201,329,330],{},"›",[260,332,333,336,337,276],{},[263,334,335],{},"In running text",", it is an ordinary underlined link with no arrow — the same as ",[201,338,339],{},"[Label](…)",[210,341,344],{"className":212,"code":342,"filename":343,"language":215,"meta":216,"style":216},"We're lowering commission on services, as :link[the policy]{href=\"https:\u002F\u002Fexample.com\u002Fpolicies\u002Ffees\"} explains.\n\n:link[Read the full policy]{href=\"https:\u002F\u002Fexample.com\u002Fpolicies\u002Ffees\"}\n","templates\u002Ffees.md",[201,345,346,351,357],{"__ignoreMap":216},[220,347,348],{"class":222,"line":223},[220,349,350],{"class":226},"We're lowering commission on services, as :link[the policy]{href=\"https:\u002F\u002Fexample.com\u002Fpolicies\u002Ffees\"} explains.\n",[220,352,353],{"class":222,"line":230},[220,354,356],{"emptyLinePlaceholder":355},true,"\n",[220,358,359],{"class":222,"line":236},[220,360,361],{"class":226},":link[Read the full policy]{href=\"https:\u002F\u002Fexample.com\u002Fpolicies\u002Ffees\"}\n",[197,363,364,365,367],{},"The first ",[201,366,207],{}," is inline; the second is alone in its paragraph, so it forms an action row and renders as \"Read the full policy ›\".",[246,369,371],{"id":370},"write-the-label-and-href","Write the label and href",[197,373,374,375,378],{},"Both components take exactly one attribute, ",[201,376,377],{},"href",", and a label:",[380,381,382,398],"table",{},[383,384,385],"thead",{},[386,387,388,392,395],"tr",{},[389,390,391],"th",{},"Rule",[389,393,394],{},"Applies to",[389,396,397],{},"Error",[399,400,401,422,438,451],"tbody",{},[386,402,403,409,417],{},[404,405,406,408],"td",{},[201,407,377],{}," is required and not empty.",[404,410,411,412,414,415],{},"every ",[201,413,203],{}," and ",[201,416,207],{},[404,418,419],{},[201,420,421],{},":link: missing href",[386,423,424,427,433],{},[404,425,426],{},"No other attributes.",[404,428,411,429,414,431],{},[201,430,203],{},[201,432,207],{},[404,434,435],{},[201,436,437],{},":button: unknown attribute \"target\"",[386,439,440,443,446],{},[404,441,442],{},"The label is required.",[404,444,445],{},"actions in an action row",[404,447,448],{},[201,449,450],{},":button: missing label",[386,452,453,456,458],{},[404,454,455],{},"The label is plain text and merge tags only — no emphasis, code or links.",[404,457,445],{},[404,459,460],{},[201,461,462],{},":link: label must be plain text",[197,464,465,466,468,469,472],{},"A ",[201,467,207],{}," inside running text is an ordinary link, so its label is inline Markdown like any link text (",[201,470,471],{},":link[**bold**]{href=\"…\"}"," compiles), and an empty label is not checked.",[197,474,475,477,478,483,484,487,488,487,491,494,495,498,499,502],{},[201,476,377],{}," is text, so it can hold merge tags; how their values are escaped is in ",[479,480,482],"a",{"href":481},"\u002Fauthoring\u002Fmerge-tags-and-bindings#know-how-urls-are-escaped","Know how URLs are escaped",". At render time every URL must use ",[201,485,486],{},"https",", ",[201,489,490],{},"http",[201,492,493],{},"mailto"," or ",[201,496,497],{},"tel",", with a host (or an address), and no whitespace; anything else is a render error. Relative URLs are allowed only when ",[201,500,501],{},"Config.AllowRelativeURLs"," is set, for previews.",[246,504,506],{"id":505},"build-an-action-row","Build an action row",[197,508,509,510,414,512,514,515,518,519,494,521,523],{},"A paragraph made only of ",[201,511,203],{},[201,513,207],{}," components, separated by spaces or line breaks, is an ",[263,516,517],{},"action row",". Its actions sit side by side; in a ",[201,520,285],{},[201,522,289],{}," module they stack, full width, on mobile.",[380,525,526,536],{},[383,527,528],{},[386,529,530,533],{},[389,531,532],{},"Where",[389,534,535],{},"Allowed actions",[399,537,538,550,572,585],{},[386,539,540,544],{},[404,541,542],{},[201,543,285],{},[404,545,546,414,548],{},[201,547,203],{},[201,549,207],{},[386,551,552,565],{},[404,553,554,556,557,560,561,564],{},[201,555,289],{}," (",[201,558,559],{},"c1","–",[201,562,563],{},"c3",")",[404,566,567,414,569,571],{},[201,568,203],{},[201,570,207],{},"; the module is exactly one row",[386,573,574,580],{},[404,575,576,579],{},[201,577,578],{},"letter",", including loose Markdown",[404,581,582,584],{},[201,583,207],{}," only",[386,586,587,590],{},[404,588,589],{},"any other module",[404,591,592,593,564],{},"none (",[201,594,595],{},"notice: action row is not allowed here",[197,597,598],{},"In the plain-text part, each action becomes its label with a colon, then its URL on the next line:",[210,600,606],{"className":601,"code":603,"filename":604,"language":605,"meta":216},[602],"language-text","Track delivery:\nhttps:\u002F\u002Fcaribhubs.com\u002Forders\u002FCH-20417\n","order.out_for_delivery.txt","text",[201,607,603],{"__ignoreMap":216},[246,609,611],{"id":610},"link-in-running-text","Link in running text",[197,613,614],{},"Inside paragraphs, list items, table cells and notices, use ordinary Markdown links:",[210,616,619],{"className":212,"code":617,"filename":618,"language":215,"meta":216,"style":216},"If you keep getting these, [secure your account]({{security_url}}).\nWrite to \u003Chelp@example.com> or see \u003Chttps:\u002F\u002Fexample.com\u002Fhelp>.\n","templates\u002Freset.md",[201,620,621,646],{"__ignoreMap":216},[220,622,623,626,630,634,637,641,643],{"class":222,"line":223},[220,624,625],{"class":226},"If you keep getting these, ",[220,627,629],{"class":628},"sMK4o","[",[220,631,633],{"class":632},"sfazB","secure your account",[220,635,636],{"class":628},"](",[220,638,640],{"class":639},"sDpXG","{{security_url}}",[220,642,564],{"class":628},[220,644,645],{"class":226},".\n",[220,647,648,651,654,658,661,663,666,669],{"class":222,"line":230},[220,649,650],{"class":226},"Write to ",[220,652,653],{"class":628},"\u003C",[220,655,657],{"class":656},"sQLHv","help@example.com",[220,659,660],{"class":226},"> or see ",[220,662,653],{"class":628},[220,664,665],{"class":656},"https:\u002F\u002Fexample.com\u002Fhelp",[220,667,668],{"class":628},">",[220,670,645],{"class":226},[257,672,673,686,692,702],{},[260,674,675,678,679,682,683,276],{},[201,676,677],{},"[text](url)"," — the destination can hold merge tags. A link title (",[201,680,681],{},"[text](url \"title\")",") is ",[201,684,685],{},"link titles are not supported",[260,687,688,691],{},[201,689,690],{},"\u003Chttps:\u002F\u002F…>"," — an autolink shows the address as its text.",[260,693,694,697,698,701],{},[201,695,696],{},"\u003Cname@example.com>"," — an email autolink becomes a ",[201,699,700],{},"mailto:"," link.",[260,703,704,707,708,276],{},[201,705,706],{},":link[text]{href=\"…\"}"," in a sentence is the same as ",[201,709,710],{},"[text](…)",[197,712,713,714,717],{},"In the plain-text part a link is written ",[201,715,716],{},"text (url)",", or just the URL when the text is the URL, or just the address for an email autolink.",[246,719,721],{"id":720},"style-text-with-spans","Style text with spans",[197,723,724,727],{},[201,725,726],{},"[text]{.class …}"," wraps inline Markdown in a style. The classes combine:",[380,729,730,740],{},[383,731,732],{},[386,733,734,737],{},[389,735,736],{},"Class",[389,738,739],{},"Effect",[399,741,742,752,765,775,785],{},[386,743,744,749],{},[404,745,746],{},[201,747,748],{},".muted",[404,750,751],{},"The secondary text colour.",[386,753,754,759],{},[404,755,756],{},[201,757,758],{},".teal",[404,760,761,762,764],{},"The action colour. Wins over ",[201,763,748],{}," if both are set.",[386,766,767,772],{},[404,768,769],{},[201,770,771],{},".mono",[404,773,774],{},"The theme's monospace font.",[386,776,777,782],{},[404,778,779],{},[201,780,781],{},".small",[404,783,784],{},"Smaller type: 13px on an 18px line.",[386,786,787,792],{},[404,788,789],{},[201,790,791],{},".bold",[404,793,794],{},"Bold weight.",[210,796,799],{"className":212,"code":797,"filename":798,"language":215,"meta":216,"style":216},"::breakdown\n| Delivery fee | [**{{fee}}**]{.teal} |\n| --- | ---: |\n| [Payment]{.small .muted} | [Buyer paid in app]{.small .muted} |\n::\n","templates\u002Fjob.md",[201,800,801,806,831,847,869],{"__ignoreMap":216},[220,802,803],{"class":222,"line":223},[220,804,805],{"class":226},"::breakdown\n",[220,807,808,811,814,816,819,822,825,828],{"class":222,"line":230},[220,809,810],{"class":628},"|",[220,812,813],{"class":226}," Delivery fee ",[220,815,810],{"class":628},[220,817,818],{"class":628}," [",[220,820,821],{"class":632},"**{{fee}}**",[220,823,824],{"class":628},"]",[220,826,827],{"class":226},"{.teal} ",[220,829,830],{"class":628},"|\n",[220,832,833,835,838,841,844],{"class":222,"line":236},[220,834,810],{"class":628},[220,836,837],{"class":628}," ---",[220,839,840],{"class":628}," |",[220,842,843],{"class":628}," ---:",[220,845,846],{"class":628}," |\n",[220,848,850,852,854,857,859,862,864,867],{"class":222,"line":849},4,[220,851,810],{"class":628},[220,853,818],{"class":628},[220,855,856],{"class":632},"Payment",[220,858,824],{"class":628},[220,860,861],{"class":226},"{.small .muted} ",[220,863,810],{"class":628},[220,865,866],{"class":226}," [Buyer paid in app]{.small .muted} ",[220,868,830],{"class":628},[220,870,872],{"class":222,"line":871},5,[220,873,239],{"class":226},[197,875,876,877,880,881,494,884,556,887,890],{},"Any other class is a compile error, ",[201,878,879],{},"unknown span class \".red\"",", and a span accepts no ",[201,882,883],{},"#id",[201,885,886],{},"key=value",[201,888,889],{},"span: unknown attribute \"#id\"","). The styles apply to the HTML part only; the plain-text part shows the text.",[197,892,893,894,897,898,901,902,276],{},"Spans are the only place a class may go. ",[201,895,896],{},"{.small}"," directly after a code span, a link or emphasis is ",[201,899,900],{},"attributes are only allowed on spans and inline components",", so wrap the element in a span: ",[201,903,904],{},"[`{{reference}}`]{.small .muted}",[246,906,908],{"id":907},"next-steps","Next steps",[257,910,911,916],{},[260,912,913,915],{},[479,914,48],{"href":49}," for the modules that hold action rows.",[260,917,918,920],{},[479,919,63],{"href":64}," for the full list of messages.",[922,923,924],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sDpXG, html code.shiki .sDpXG{--shiki-light:#E53935;--shiki-light-text-decoration:underline;--shiki-default:#F07178;--shiki-default-text-decoration:underline;--shiki-dark:#F07178;--shiki-dark-text-decoration:underline}html pre.shiki code .sQLHv, html code.shiki .sQLHv{--shiki-light:#90A4AE;--shiki-light-text-decoration:underline;--shiki-default:#EEFFFF;--shiki-default-text-decoration:underline;--shiki-dark:#BABED8;--shiki-dark-text-decoration:underline}",{"title":216,"searchDepth":230,"depth":230,"links":926},[927,928,929,930,931,932,933],{"id":248,"depth":230,"text":249},{"id":308,"depth":230,"text":309},{"id":370,"depth":230,"text":371},{"id":505,"depth":230,"text":506},{"id":610,"depth":230,"text":611},{"id":720,"depth":230,"text":721},{"id":907,"depth":230,"text":908},"Buttons, links and styled runs of text — the two inline components and the five span classes.","md",null,{},{"icon":61},{"title":58,"description":934},"PxUx6xW9smLO6UkYcYD3ATpsAOR_j8sIO349yPDXAlg",[942,944],{"title":53,"path":54,"stem":55,"description":943,"icon":56,"children":-1},"How a template reaches into your Go data — path rules, scope, scalars, fallbacks, bindings and URL escaping.",{"title":63,"path":64,"stem":65,"description":945,"icon":66,"children":-1},"What lttr.Compile reports, how to read it in Go, the warnings, and the common errors with their fixes.",1790309827489]