[{"data":1,"prerenderedAt":1165},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Frspeedy-dev-server":455,"\u002Fguides\u002Frspeedy-dev-server-surround":1160},[4,34,51,301,327,332,337,406],{"title":5,"path":6,"stem":7,"children":8,"package":11,"icon":33},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,13,18,23,28],{"title":10,"path":6,"stem":7,"package":11,"icon":12},"Introduction",null,"i-lucide-house",{"title":14,"path":15,"stem":16,"package":11,"icon":17},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F2.installation","i-lucide-download",{"title":19,"path":20,"stem":21,"package":11,"icon":22},"Icons","\u002Fgetting-started\u002Ficons","1.getting-started\u002F3.icons","i-lucide-sparkles",{"title":24,"path":25,"stem":26,"package":11,"icon":27},"CLI","\u002Fgetting-started\u002Fcli","1.getting-started\u002F4.cli","i-lucide-terminal",{"title":29,"path":30,"stem":31,"package":11,"icon":32},"Roadmap","\u002Fgetting-started\u002Froadmap","1.getting-started\u002F5.roadmap","i-lucide-map","i-lucide-rocket",{"title":35,"package":11,"icon":36,"path":37,"stem":38,"children":39,"page":50},"Packages","i-lucide-package","\u002Fpackages","2.packages",[40,45],{"title":41,"path":42,"stem":43,"package":11,"icon":44},"@vyui\u002Fcore","\u002Fpackages\u002Fcore","2.packages\u002F1.core","i-lucide-box",{"title":46,"path":47,"stem":48,"package":11,"icon":49},"@vyui\u002Fkit","\u002Fpackages\u002Fkit","2.packages\u002F2.kit","i-lucide-layers",false,{"title":52,"package":11,"icon":53,"path":54,"stem":55,"children":56},"Components","i-lucide-layout-grid","\u002Fcomponents","3.components",[57,59,65,70,75,80,85,90,95,100,105,110,115,120,125,130,135,140,144,149,153,158,163,168,173,178,183,188,193,198,203,208,213,218,223,228,233,238,242,246,251,256,261,266,271,276,280,284,288,292,296],{"title":52,"path":54,"stem":58,"package":11,"icon":53},"3.components\u002Findex",{"title":60,"path":61,"stem":62,"package":63,"icon":64},"Accordion","\u002Fcomponents\u002Faccordion","3.components\u002Faccordion","kit","i-lucide-list-collapse",{"title":66,"path":67,"stem":68,"package":63,"icon":69},"Action Sheet","\u002Fcomponents\u002Faction-sheet","3.components\u002Faction-sheet","i-lucide-panel-bottom",{"title":71,"path":72,"stem":73,"package":63,"icon":74},"Alert","\u002Fcomponents\u002Falert","3.components\u002Falert","i-lucide-triangle-alert",{"title":76,"path":77,"stem":78,"package":79,"icon":74},"Alert Dialog","\u002Fcomponents\u002Falert-dialog","3.components\u002Falert-dialog","core",{"title":81,"path":82,"stem":83,"package":63,"icon":84},"App","\u002Fcomponents\u002Fapp","3.components\u002Fapp","i-lucide-smartphone",{"title":86,"path":87,"stem":88,"package":63,"icon":89},"Aspect Ratio","\u002Fcomponents\u002Faspect-ratio","3.components\u002Faspect-ratio","i-lucide-ratio",{"title":91,"path":92,"stem":93,"package":63,"icon":94},"Avatar","\u002Fcomponents\u002Favatar","3.components\u002Favatar","i-lucide-circle-user-round",{"title":96,"path":97,"stem":98,"package":63,"icon":99},"Avatar Group","\u002Fcomponents\u002Favatar-group","3.components\u002Favatar-group","i-lucide-users-round",{"title":101,"path":102,"stem":103,"package":63,"icon":104},"Button","\u002Fcomponents\u002Fbutton","3.components\u002Fbutton","i-lucide-square-mouse-pointer",{"title":106,"path":107,"stem":108,"package":63,"icon":109},"Calendar","\u002Fcomponents\u002Fcalendar","3.components\u002Fcalendar","i-lucide-calendar-days",{"title":111,"path":112,"stem":113,"package":63,"icon":114},"Card","\u002Fcomponents\u002Fcard","3.components\u002Fcard","i-lucide-square",{"title":116,"path":117,"stem":118,"package":63,"icon":119},"Checkbox","\u002Fcomponents\u002Fcheckbox","3.components\u002Fcheckbox","i-lucide-square-check",{"title":121,"path":122,"stem":123,"package":79,"icon":124},"Collapsible","\u002Fcomponents\u002Fcollapsible","3.components\u002Fcollapsible","i-lucide-chevrons-down-up",{"title":126,"path":127,"stem":128,"package":79,"icon":129},"Dialog","\u002Fcomponents\u002Fdialog","3.components\u002Fdialog","i-lucide-app-window",{"title":131,"path":132,"stem":133,"package":79,"icon":134},"Draggable","\u002Fcomponents\u002Fdraggable","3.components\u002Fdraggable","i-lucide-move",{"title":136,"path":137,"stem":138,"package":63,"icon":139},"Form","\u002Fcomponents\u002Fform","3.components\u002Fform","i-lucide-clipboard-list",{"title":141,"path":142,"stem":143,"package":79,"icon":22},"Icon","\u002Fcomponents\u002Ficon","3.components\u002Ficon",{"title":145,"path":146,"stem":147,"package":63,"icon":148},"Input","\u002Fcomponents\u002Finput","3.components\u002Finput","i-lucide-text-cursor-input",{"title":150,"path":151,"stem":152,"package":63,"icon":69},"Island","\u002Fcomponents\u002Fisland","3.components\u002Fisland",{"title":154,"path":155,"stem":156,"package":63,"icon":157},"Island Button","\u002Fcomponents\u002Fisland-button","3.components\u002Fisland-button","i-lucide-circle-ellipsis",{"title":159,"path":160,"stem":161,"package":63,"icon":162},"Island Group","\u002Fcomponents\u002Fisland-group","3.components\u002Fisland-group","i-lucide-panels-top-left",{"title":164,"path":165,"stem":166,"package":63,"icon":167},"KeyboardAware","\u002Fcomponents\u002Fkeyboard-aware","3.components\u002Fkeyboard-aware","i-lucide-keyboard",{"title":169,"path":170,"stem":171,"package":63,"icon":172},"Label","\u002Fcomponents\u002Flabel","3.components\u002Flabel","i-lucide-tag",{"title":174,"path":175,"stem":176,"package":63,"icon":177},"Modal","\u002Fcomponents\u002Fmodal","3.components\u002Fmodal","i-lucide-gallery-vertical-end",{"title":179,"path":180,"stem":181,"package":79,"icon":182},"Navigation","\u002Fcomponents\u002Fnavigation","3.components\u002Fnavigation","i-lucide-route",{"title":184,"path":185,"stem":186,"package":63,"icon":187},"Number Field","\u002Fcomponents\u002Fnumber-field","3.components\u002Fnumber-field","i-lucide-list-plus",{"title":189,"path":190,"stem":191,"package":79,"icon":192},"Pagination","\u002Fcomponents\u002Fpagination","3.components\u002Fpagination","i-lucide-ellipsis",{"title":194,"path":195,"stem":196,"package":63,"icon":197},"Pin Input","\u002Fcomponents\u002Fpin-input","3.components\u002Fpin-input","i-lucide-key-round",{"title":199,"path":200,"stem":201,"package":63,"icon":202},"Placeholder","\u002Fcomponents\u002Fplaceholder","3.components\u002Fplaceholder","i-lucide-square-dashed",{"title":204,"path":205,"stem":206,"package":63,"icon":207},"Popover","\u002Fcomponents\u002Fpopover","3.components\u002Fpopover","i-lucide-message-square-more",{"title":209,"path":210,"stem":211,"package":63,"icon":212},"Progress","\u002Fcomponents\u002Fprogress","3.components\u002Fprogress","i-lucide-chart-no-axes-column-increasing",{"title":214,"path":215,"stem":216,"package":63,"icon":217},"Radio Group","\u002Fcomponents\u002Fradio-group","3.components\u002Fradio-group","i-lucide-circle-dot",{"title":219,"path":220,"stem":221,"package":63,"icon":222},"Rating","\u002Fcomponents\u002Frating","3.components\u002Frating","i-lucide-star",{"title":224,"path":225,"stem":226,"package":79,"icon":227},"Scroll View","\u002Fcomponents\u002Fscroll-view","3.components\u002Fscroll-view","i-lucide-scroll",{"title":229,"path":230,"stem":231,"package":63,"icon":232},"Select","\u002Fcomponents\u002Fselect","3.components\u002Fselect","i-lucide-list-check",{"title":234,"path":235,"stem":236,"package":63,"icon":237},"Separator","\u002Fcomponents\u002Fseparator","3.components\u002Fseparator","i-lucide-separator-horizontal",{"title":239,"path":240,"stem":241,"package":79,"icon":69},"Sheet","\u002Fcomponents\u002Fsheet","3.components\u002Fsheet",{"title":243,"path":244,"stem":245,"package":63,"icon":162},"Skeleton","\u002Fcomponents\u002Fskeleton","3.components\u002Fskeleton",{"title":247,"path":248,"stem":249,"package":63,"icon":250},"Slider","\u002Fcomponents\u002Fslider","3.components\u002Fslider","i-lucide-sliders-horizontal",{"title":252,"path":253,"stem":254,"package":63,"icon":255},"Sortable","\u002Fcomponents\u002Fsortable","3.components\u002Fsortable","i-lucide-list-restart",{"title":257,"path":258,"stem":259,"package":63,"icon":260},"Stepper","\u002Fcomponents\u002Fstepper","3.components\u002Fstepper","i-lucide-list-ordered",{"title":262,"path":263,"stem":264,"package":63,"icon":265},"Swipe Action","\u002Fcomponents\u002Fswipe-action","3.components\u002Fswipe-action","i-lucide-move-horizontal",{"title":267,"path":268,"stem":269,"package":63,"icon":270},"Swiper","\u002Fcomponents\u002Fswiper","3.components\u002Fswiper","i-lucide-gallery-horizontal-end",{"title":272,"path":273,"stem":274,"package":63,"icon":275},"Switch","\u002Fcomponents\u002Fswitch","3.components\u002Fswitch","i-lucide-toggle-right",{"title":277,"path":278,"stem":279,"package":63,"icon":162},"Tabs","\u002Fcomponents\u002Ftabs","3.components\u002Ftabs",{"title":281,"path":282,"stem":283,"package":63,"icon":148},"Textarea","\u002Fcomponents\u002Ftextarea","3.components\u002Ftextarea",{"title":285,"path":286,"stem":287,"package":63,"icon":207},"Toast","\u002Fcomponents\u002Ftoast","3.components\u002Ftoast",{"title":289,"path":290,"stem":291,"package":63,"icon":275},"Toggle","\u002Fcomponents\u002Ftoggle","3.components\u002Ftoggle",{"title":293,"path":294,"stem":295,"package":63,"icon":162},"Toggle Group","\u002Fcomponents\u002Ftoggle-group","3.components\u002Ftoggle-group",{"title":297,"path":298,"stem":299,"package":63,"icon":300},"Tray","\u002Fcomponents\u002Ftray","3.components\u002Ftray","i-lucide-square-dashed-bottom",{"title":302,"path":303,"stem":304,"children":305,"package":11,"icon":307},"Theming","\u002Ftheming","4.theming\u002F1.index",[306,308,312,317,322],{"title":302,"path":303,"stem":304,"package":11,"icon":307},"i-lucide-palette",{"title":309,"path":310,"stem":311,"package":11,"icon":250},"Overrides","\u002Ftheming\u002Foverrides","4.theming\u002F2.overrides",{"title":313,"path":314,"stem":315,"package":11,"icon":316},"Colors","\u002Ftheming\u002Fcolors","4.theming\u002F3.colors","i-lucide-swatch-book",{"title":318,"path":319,"stem":320,"package":11,"icon":321},"Dark Mode","\u002Ftheming\u002Fdark-mode","4.theming\u002F4.dark-mode","i-lucide-moon",{"title":323,"path":324,"stem":325,"package":11,"icon":326},"Fonts","\u002Ftheming\u002Ffonts","4.theming\u002F5.fonts","i-lucide-type",{"title":328,"path":329,"stem":330,"package":11,"icon":331},"Accessibility","\u002Faccessibility","5.accessibility","i-lucide-accessibility",{"title":333,"path":334,"stem":335,"package":11,"icon":336},"i18n","\u002Fi18n","6.i18n","i-lucide-languages",{"title":338,"path":339,"stem":340,"children":341,"package":11,"icon":343},"Composables","\u002Fcomposables","7.composables\u002F1.index",[342,344,349,354,359,364,369,374,378,383,387,391,396,401],{"title":338,"path":339,"stem":340,"package":11,"icon":343},"i-lucide-square-function",{"title":345,"path":346,"stem":347,"package":11,"icon":348},"useEmitAsProps","\u002Fcomposables\u002Fuse-emit-as-props","7.composables\u002F10.use-emit-as-props","i-lucide-zap",{"title":350,"path":351,"stem":352,"package":11,"icon":353},"useForwardPropsEmits","\u002Fcomposables\u002Fuse-forward-props-emits","7.composables\u002F11.use-forward-props-emits","i-lucide-merge",{"title":355,"path":356,"stem":357,"package":11,"icon":358},"useForwardExpose","\u002Fcomposables\u002Fuse-forward-expose","7.composables\u002F12.use-forward-expose","i-lucide-share-2",{"title":360,"path":361,"stem":362,"package":11,"icon":363},"useStateMachine","\u002Fcomposables\u002Fuse-state-machine","7.composables\u002F13.use-state-machine","i-lucide-workflow",{"title":365,"path":366,"stem":367,"package":11,"icon":368},"usePrimitiveElement","\u002Fcomposables\u002Fuse-primitive-element","7.composables\u002F14.use-primitive-element","i-lucide-crosshair",{"title":370,"path":371,"stem":372,"package":11,"icon":373},"useAppConfig","\u002Fcomposables\u002Fuse-app-config","7.composables\u002F2.use-app-config","i-lucide-settings",{"title":375,"path":376,"stem":377,"package":11,"icon":321},"useColorMode","\u002Fcomposables\u002Fuse-color-mode","7.composables\u002F3.use-color-mode",{"title":379,"path":380,"stem":381,"package":11,"icon":382},"useComponentIcons","\u002Fcomposables\u002Fuse-component-icons","7.composables\u002F4.use-component-icons","i-lucide-shapes",{"title":384,"path":385,"stem":386,"package":11,"icon":69},"useTray","\u002Fcomposables\u002Fuse-tray","7.composables\u002F5.use-tray",{"title":388,"path":389,"stem":390,"package":11,"icon":336},"i18n composables","\u002Fcomposables\u002Fi18n-composables","7.composables\u002F6.i18n-composables",{"title":392,"path":393,"stem":394,"package":11,"icon":395},"useId","\u002Fcomposables\u002Fuse-id","7.composables\u002F7.use-id","i-lucide-hash",{"title":397,"path":398,"stem":399,"package":11,"icon":400},"useFilter","\u002Fcomposables\u002Fuse-filter","7.composables\u002F8.use-filter","i-lucide-filter",{"title":402,"path":403,"stem":404,"package":11,"icon":405},"useForwardProps","\u002Fcomposables\u002Fuse-forward-props","7.composables\u002F9.use-forward-props","i-lucide-arrow-right-left",{"title":407,"path":408,"stem":409,"children":410,"package":11,"icon":412},"Guides","\u002Fguides","8.guides\u002F1.index",[411,413,417,422,427,432,436,441,445,450],{"title":407,"path":408,"stem":409,"package":11,"icon":412},"i-lucide-book-open",{"title":414,"path":415,"stem":416,"package":11,"icon":348},"Instant first-frame rendering","\u002Fguides\u002Finstant-first-frame-rendering","8.guides\u002F10.instant-first-frame-rendering",{"title":418,"path":419,"stem":420,"package":11,"icon":421},"Lynx UI frameworks","\u002Fguides\u002Flynx-ui-frameworks","8.guides\u002F2.lynx-ui-frameworks","i-lucide-library",{"title":423,"path":424,"stem":425,"package":11,"icon":426},"What is Vue Lynx","\u002Fguides\u002Fvue-lynx","8.guides\u002F3.vue-lynx","i-lucide-component",{"title":428,"path":429,"stem":430,"package":11,"icon":431},"Lynx vs React Native","\u002Fguides\u002Flynx-vs-react-native","8.guides\u002F4.lynx-vs-react-native","i-lucide-git-compare",{"title":433,"path":434,"stem":435,"package":11,"icon":84},"Testing on your phone","\u002Fguides\u002Ftesting-on-device","8.guides\u002F5.testing-on-device",{"title":437,"path":438,"stem":439,"package":11,"icon":440},"Testing with Xcode","\u002Fguides\u002Ftesting-with-xcode","8.guides\u002F6.testing-with-xcode","i-lucide-apple",{"title":442,"path":443,"stem":444,"package":11,"icon":27},"The rspeedy dev server","\u002Fguides\u002Frspeedy-dev-server","8.guides\u002F7.rspeedy-dev-server",{"title":446,"path":447,"stem":448,"package":11,"icon":449},"Tailwind on Lynx","\u002Fguides\u002Ftailwind-on-lynx","8.guides\u002F8.tailwind-on-lynx","i-lucide-wind",{"title":451,"path":452,"stem":453,"package":11,"icon":454},"Theming on Lynx","\u002Fguides\u002Ftheming-on-lynx","8.guides\u002F9.theming-on-lynx","i-lucide-paintbrush",{"id":456,"title":442,"body":457,"description":1152,"extension":1153,"links":11,"meta":1154,"navigation":1155,"package":11,"path":443,"seo":1156,"stem":444,"__hash__":1159},"docs\u002F8.guides\u002F7.rspeedy-dev-server.md",{"type":458,"value":459,"toc":1140},"minimark",[460,468,478,483,490,508,519,522,603,614,621,631,642,700,710,716,731,874,880,894,901,911,994,1000,1010,1014,1017,1080,1083,1087,1093,1099,1107,1113,1117,1136],[461,462,463,467],"p",{},[464,465,466],"code",{},"rspeedy dev"," prints three URLs, a QR code, and four keyboard shortcuts, and most people use one URL and ignore everything else. The parts that get skipped are the ones that make the device loop quick, so they are worth ten minutes.",[469,470,475],"pre",{"className":471,"code":473,"language":474},[472],"language-text","Rspeedy v0.14.5 (Rsbuild v1.7.5, Rspack v1.7.12)\n\n  ➜  Web        http:\u002F\u002F192.168.1.24:3000\u002Fmain.web.bundle\n  ➜  ∟ Preview  http:\u002F\u002F192.168.1.24:3000\u002F__web_preview?casename=main.web.bundle\n  ➜  Lynx       http:\u002F\u002F192.168.1.24:3000\u002Fmain.lynx.bundle\n\n●  Scan with Lynx\n\n◆  http:\u002F\u002F192.168.1.24:3000\u002Fmain.lynx.bundle?fullscreen=true\n\n◆  Usage\n│   r  Switch entries\n│   a  Switch schema\n│   h  Help\n│   q  Quit\n","text",[464,476,473],{"__ignoreMap":477},"",[479,480,482],"h2",{"id":481},"the-three-urls","The three URLs",[461,484,485,489],{},[486,487,488],"strong",{},"Web"," is the raw web bundle, so opening it directly hands you compiled output rather than a running app. I use it to confirm a build produced something.",[461,491,492,495,496,499,500,503,504,507],{},[486,493,494],{},"Preview"," is the shell you actually want in a browser. The ",[464,497,498],{},"__web_preview"," route wraps the web bundle in a page that boots the Lynx web runtime, and ",[464,501,502],{},"casename"," names the bundle to load. It is the fastest loop for layout and styling work and the least faithful one, because gestures arrive as mouse events and ",[464,505,506],{},"accessibility-*"," properties do nothing.",[461,509,510,513,514,518],{},[486,511,512],{},"Lynx"," is the native bundle a device loads, fetched both by a QR-code scan and by a ",[515,516,517],"a",{"href":438},"custom host app",".",[461,520,521],{},"Both bundles only exist if you declare both environments:",[469,523,528],{"className":524,"code":525,"filename":526,"language":527,"meta":477,"style":477},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineConfig({\n  environments: {\n    web: {},\n    lynx: {},\n  },\n})\n","lynx.config.ts","ts",[464,529,530,554,567,578,588,594],{"__ignoreMap":477},[531,532,535,539,542,546,550],"span",{"class":533,"line":534},"line",1,[531,536,538],{"class":537},"s7zQu","export",[531,540,541],{"class":537}," default",[531,543,545],{"class":544},"s2Zo4"," defineConfig",[531,547,549],{"class":548},"sTEyZ","(",[531,551,553],{"class":552},"sMK4o","{\n",[531,555,557,561,564],{"class":533,"line":556},2,[531,558,560],{"class":559},"swJcz","  environments",[531,562,563],{"class":552},":",[531,565,566],{"class":552}," {\n",[531,568,570,573,575],{"class":533,"line":569},3,[531,571,572],{"class":559},"    web",[531,574,563],{"class":552},[531,576,577],{"class":552}," {},\n",[531,579,581,584,586],{"class":533,"line":580},4,[531,582,583],{"class":559},"    lynx",[531,585,563],{"class":552},[531,587,577],{"class":552},[531,589,591],{"class":533,"line":590},5,[531,592,593],{"class":552},"  },\n",[531,595,597,600],{"class":533,"line":596},6,[531,598,599],{"class":552},"}",[531,601,602],{"class":548},")\n",[461,604,605,606,609,610,613],{},"Dropping ",[464,607,608],{},"web"," removes the preview shell, and dropping ",[464,611,612],{},"lynx"," leaves the QR code pointing at a bundle that was never emitted.",[479,615,617,618],{"id":616},"why-the-qr-url-has-fullscreentrue","Why the QR URL has ",[464,619,620],{},"?fullscreen=true",[461,622,623,626,627,630],{},[515,624,625],{"href":434},"Lynx Go"," renders your app inside its own chrome by default, and the navigation bar above your content changes the available height and hides the top safe area, so anything you check about status-bar overlap or ",[464,628,629],{},"env(safe-area-inset-top)"," gives the wrong answer.",[461,632,633,634,637,638,641],{},"Appending ",[464,635,636],{},"fullscreen=true"," drops the chrome and hands your app the whole screen, which is what a real build gets. The ",[464,639,640],{},"schema"," option is where it goes:",[469,643,645],{"className":524,"code":644,"filename":526,"language":527,"meta":477,"style":477},"pluginQRCode({\n  schema(url) {\n    return `${url}?fullscreen=true`\n  },\n})\n",[464,646,647,656,672,690,694],{"__ignoreMap":477},[531,648,649,652,654],{"class":533,"line":534},[531,650,651],{"class":544},"pluginQRCode",[531,653,549],{"class":548},[531,655,553],{"class":552},[531,657,658,661,663,667,670],{"class":533,"line":556},[531,659,660],{"class":559},"  schema",[531,662,549],{"class":552},[531,664,666],{"class":665},"sHdIc","url",[531,668,669],{"class":552},")",[531,671,566],{"class":552},[531,673,674,677,680,682,684,687],{"class":533,"line":569},[531,675,676],{"class":537},"    return",[531,678,679],{"class":552}," `${",[531,681,666],{"class":548},[531,683,599],{"class":552},[531,685,620],{"class":686},"sfazB",[531,688,689],{"class":552},"`\n",[531,691,692],{"class":533,"line":580},[531,693,593],{"class":552},[531,695,696,698],{"class":533,"line":590},[531,697,599],{"class":552},[531,699,602],{"class":548},[461,701,702,703,705,706,709],{},"Returning a plain string replaces the QR code's URL outright, and the default without a ",[464,704,640],{}," option is ",[464,707,708],{},"(url) => ({ http: url })",", which gives the bare bundle URL and the chrome-wrapped rendering.",[479,711,713,714],{"id":712},"cycling-schemas-with-a","Cycling schemas with ",[464,715,515],{},[461,717,718,720,721,724,725,727,728,730],{},[464,719,640],{}," also accepts ",[464,722,723],{},"Record\u003Cstring, string>",", and the ",[464,726,515],{}," key cycles through whatever you put in it, so one ",[464,729,466],{}," session serves several ways of opening the same bundle without a restart.",[469,732,734],{"className":524,"code":733,"filename":526,"language":527,"meta":477,"style":477},"import { pluginQRCode } from '@lynx-js\u002Fqrcode-rsbuild-plugin'\n\npluginQRCode({\n  schema(url) {\n    return {\n      fullscreen: `${url}?fullscreen=true`,\n      chrome: url,\n      host: `vyhost:\u002F\u002Flynx?url=${encodeURIComponent(url)}`,\n    }\n  },\n})\n",[464,735,736,762,768,776,788,794,815,828,856,862,867],{"__ignoreMap":477},[531,737,738,741,744,747,750,753,756,759],{"class":533,"line":534},[531,739,740],{"class":537},"import",[531,742,743],{"class":552}," {",[531,745,746],{"class":548}," pluginQRCode",[531,748,749],{"class":552}," }",[531,751,752],{"class":537}," from",[531,754,755],{"class":552}," '",[531,757,758],{"class":686},"@lynx-js\u002Fqrcode-rsbuild-plugin",[531,760,761],{"class":552},"'\n",[531,763,764],{"class":533,"line":556},[531,765,767],{"emptyLinePlaceholder":766},true,"\n",[531,769,770,772,774],{"class":533,"line":569},[531,771,651],{"class":544},[531,773,549],{"class":548},[531,775,553],{"class":552},[531,777,778,780,782,784,786],{"class":533,"line":580},[531,779,660],{"class":559},[531,781,549],{"class":552},[531,783,666],{"class":665},[531,785,669],{"class":552},[531,787,566],{"class":552},[531,789,790,792],{"class":533,"line":590},[531,791,676],{"class":537},[531,793,566],{"class":552},[531,795,796,799,801,803,805,807,809,812],{"class":533,"line":596},[531,797,798],{"class":559},"      fullscreen",[531,800,563],{"class":552},[531,802,679],{"class":552},[531,804,666],{"class":548},[531,806,599],{"class":552},[531,808,620],{"class":686},[531,810,811],{"class":552},"`",[531,813,814],{"class":552},",\n",[531,816,818,821,823,826],{"class":533,"line":817},7,[531,819,820],{"class":559},"      chrome",[531,822,563],{"class":552},[531,824,825],{"class":548}," url",[531,827,814],{"class":552},[531,829,831,834,836,839,842,845,848,851,854],{"class":533,"line":830},8,[531,832,833],{"class":559},"      host",[531,835,563],{"class":552},[531,837,838],{"class":552}," `",[531,840,841],{"class":686},"vyhost:\u002F\u002Flynx?url=",[531,843,844],{"class":552},"${",[531,846,847],{"class":544},"encodeURIComponent",[531,849,850],{"class":548},"(url)",[531,852,853],{"class":552},"}`",[531,855,814],{"class":552},[531,857,859],{"class":533,"line":858},9,[531,860,861],{"class":552},"    }\n",[531,863,865],{"class":533,"line":864},10,[531,866,593],{"class":552},[531,868,870,872],{"class":533,"line":869},11,[531,871,599],{"class":552},[531,873,602],{"class":548},[461,875,876,877,879],{},"Pressing ",[464,878,515],{}," rotates between the three and prints the label above the code, so you know which one is on screen. The pattern earns its keep once you have more than one way in, with fullscreen for layout checks, chrome for Lynx Go's reload button, and a custom scheme for your own host build.",[461,881,882,883,886,887,890,891,893],{},"That custom scheme is how a host app joins the same workflow. Register it under ",[464,884,885],{},"CFBundleURLTypes"," in the host's ",[464,888,889],{},"Info.plist",", read the ",[464,892,666],{}," query parameter on launch, and load it as the bundle URL, so scanning opens your host instead of Lynx Go and saves a copy-paste every time your LAN address changes.",[479,895,897,898],{"id":896},"cycling-entries-with-r","Cycling entries with ",[464,899,900],{},"r",[461,902,903,904,907,908,910],{},"Multiple entries in ",[464,905,906],{},"source.entry"," become multiple bundles, and ",[464,909,900],{}," cycles the QR code between them:",[469,912,914],{"className":524,"code":913,"filename":526,"language":527,"meta":477,"style":477},"export default defineConfig({\n  source: {\n    entry: {\n      main: '.\u002Fsrc\u002Findex.ts',\n      onboarding: '.\u002Fsrc\u002Fonboarding.ts',\n    },\n  },\n})\n",[464,915,916,928,937,946,963,979,984,988],{"__ignoreMap":477},[531,917,918,920,922,924,926],{"class":533,"line":534},[531,919,538],{"class":537},[531,921,541],{"class":537},[531,923,545],{"class":544},[531,925,549],{"class":548},[531,927,553],{"class":552},[531,929,930,933,935],{"class":533,"line":556},[531,931,932],{"class":559},"  source",[531,934,563],{"class":552},[531,936,566],{"class":552},[531,938,939,942,944],{"class":533,"line":569},[531,940,941],{"class":559},"    entry",[531,943,563],{"class":552},[531,945,566],{"class":552},[531,947,948,951,953,955,958,961],{"class":533,"line":580},[531,949,950],{"class":559},"      main",[531,952,563],{"class":552},[531,954,755],{"class":552},[531,956,957],{"class":686},".\u002Fsrc\u002Findex.ts",[531,959,960],{"class":552},"'",[531,962,814],{"class":552},[531,964,965,968,970,972,975,977],{"class":533,"line":590},[531,966,967],{"class":559},"      onboarding",[531,969,563],{"class":552},[531,971,755],{"class":552},[531,973,974],{"class":686},".\u002Fsrc\u002Fonboarding.ts",[531,976,960],{"class":552},[531,978,814],{"class":552},[531,980,981],{"class":533,"line":596},[531,982,983],{"class":552},"    },\n",[531,985,986],{"class":533,"line":817},[531,987,593],{"class":552},[531,989,990,992],{"class":533,"line":830},[531,991,599],{"class":552},[531,993,602],{"class":548},[461,995,996,997,999],{},"Both build on every save, and ",[464,998,900],{}," re-renders the code for the other one. Splitting a heavy flow into its own entry lets you iterate without booting through the rest of the app, at the cost of two bundles rebuilding on every keystroke.",[461,1001,1002,1005,1006,1009],{},[464,1003,1004],{},"h"," reprints the usage block, and ",[464,1007,1008],{},"q"," shuts the server down.",[479,1011,1013],{"id":1012},"picking-a-surface","Picking a surface",[461,1015,1016],{},"The more faithful the surface, the slower the loop, so work tends to move down this list as it gets closer to done.",[1018,1019,1020,1036],"table",{},[1021,1022,1023],"thead",{},[1024,1025,1026,1030,1033],"tr",{},[1027,1028,1029],"th",{},"Surface",[1027,1031,1032],{},"Good for",[1027,1034,1035],{},"Blind to",[1037,1038,1039,1053,1067],"tbody",{},[1024,1040,1041,1047,1050],{},[1042,1043,1044,1046],"td",{},[464,1045,498],{}," in a browser",[1042,1048,1049],{},"Layout, spacing, colors, copy, composition",[1042,1051,1052],{},"Touch gestures, native a11y, native animation timing, safe areas",[1024,1054,1055,1058,1061],{},[1042,1056,1057],{},"Lynx Go over QR",[1042,1059,1060],{},"Gesture feel, scroll physics, real fonts and safe areas, native rendering",[1042,1062,1063,1064,1066],{},"Anything needing a native module or ",[464,1065,889],{}," configuration",[1024,1068,1069,1074,1077],{},[1042,1070,1071],{},[515,1072,1073],{"href":438},"Custom host in Xcode",[1042,1075,1076],{},"Native modules, permissions, custom fonts, release behavior",[1042,1078,1079],{},"Nothing, at the cost of a native build",[461,1081,1082],{},"Vy UI's own component previews run the web path, which is why the docs describe native behavior in prose beside them.",[479,1084,1086],{"id":1085},"when-the-qr-code-does-not-work","When the QR code does not work",[461,1088,1089,1092],{},[486,1090,1091],{},"The phone cannot reach the URL."," The address is whichever LAN interface rspeedy picked, so a phone on guest Wi-Fi or another VLAN fails, and the phone's browser confirms that in seconds.",[461,1094,1095,1098],{},[486,1096,1097],{},"The port moved."," rspeedy increments past an occupied port, so a second project shifts to 3001 and the code you scanned five minutes ago points at the wrong server.",[461,1100,1101,1104,1105,518],{},[486,1102,1103],{},"The app opens with visible chrome."," The active schema is the plain one, so press ",[464,1106,515],{},[461,1108,1109,1112],{},[486,1110,1111],{},"Nothing rebuilds on save."," Files outside the configured entry graph are not watched, which bites when you edit a file nothing imports yet.",[479,1114,1116],{"id":1115},"related","Related",[1118,1119,1120,1126,1131],"card-group",{},[1121,1122,1123],"card",{"icon":84,"title":433,"to":434},[461,1124,1125],{},"The Lynx Go loop and the config that has to be right first.",[1121,1127,1128],{"icon":440,"title":437,"to":438},[461,1129,1130],{},"Build an iOS host that loads these same bundle URLs.",[1121,1132,1133],{"icon":17,"title":14,"to":15},[461,1134,1135],{},"The full Vy UI build configuration.",[1137,1138,1139],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":477,"searchDepth":534,"depth":556,"links":1141},[1142,1143,1145,1147,1149,1150,1151],{"id":481,"depth":556,"text":482},{"id":616,"depth":556,"text":1144},"Why the QR URL has ?fullscreen=true",{"id":712,"depth":556,"text":1146},"Cycling schemas with a",{"id":896,"depth":556,"text":1148},"Cycling entries with r",{"id":1012,"depth":556,"text":1013},{"id":1085,"depth":556,"text":1086},{"id":1115,"depth":556,"text":1116},"What rspeedy dev prints, how to cycle the QR code between entries and URL schemas from the terminal, and which of the three URLs to use when.","md",{},{"icon":27},{"title":1157,"description":1158},"rspeedy dev server — QR codes, schemas, and entries","How the rspeedy dev server works for Lynx apps, including the web preview shell, the fullscreen QR schema, and cycling entries and schemas with the r and a keys.","rBiwAnmvD3fv_-tyU5iCrR6cReUk36hxKVEKtseyOPY",[1161,1163],{"title":437,"path":438,"stem":439,"description":1162,"icon":-1,"children":-1,"navigation":-1},"Build a minimal iOS host app that embeds the Lynx runtime, loads your bundle from the dev server, and compiles in the native modules Lynx Go cannot provide.",{"title":446,"path":447,"stem":448,"description":1164,"icon":-1,"children":-1,"navigation":-1},"Why Lynx apps are pinned to Tailwind v3, what the Lynx preset actually does to your utility set, and how to run v3 and v4 in the same repository.",1785008680410]