1 line
14 KiB
JSON
1 line
14 KiB
JSON
[{"data":1,"prerenderedAt":531},["ShallowReactive",2],{"navigation_docs":3,"-client-addons-common":145,"-client-addons-common-surround":526},[4,27,41,93],{"title":5,"path":6,"stem":7,"children":8,"icon":26},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,10,14,18,22],{"title":5,"path":6,"stem":7},{"title":11,"path":12,"stem":13},"Framework Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F1.architecture",{"title":15,"path":16,"stem":17},"Module Reference","\u002Fgetting-started\u002Fmodule-reference","1.getting-started\u002F2.module-reference",{"title":19,"path":20,"stem":21},"Development Guide","\u002Fgetting-started\u002Fdevelopment","1.getting-started\u002F3.development",{"title":23,"path":24,"stem":25},"SurrealDB Setup","\u002Fgetting-started\u002Fsurrealdb-setup","1.getting-started\u002F4.surrealdb-setup","i-lucide-rocket",{"title":28,"path":29,"stem":30,"children":31},"Forge Server Extension","\u002Fserver-extension","2.server-extension\u002F0.index",[32,33,37],{"title":28,"path":29,"stem":30},{"title":34,"path":35,"stem":36},"Forge Server API Reference","\u002Fserver-extension\u002Fapi-reference","2.server-extension\u002F1.api-reference",{"title":38,"path":39,"stem":40},"Forge Server Usage Examples","\u002Fserver-extension\u002Fusage-examples","2.server-extension\u002F2.usage-examples",{"title":42,"path":43,"stem":44,"children":45,"icon":92},"Server Modules","\u002Fserver-modules","3.server-modules\u002F0.index",[46,48,52,56,60,64,68,72,76,80,84,88],{"title":47,"path":43,"stem":44},"Server Module Guides",{"title":49,"path":50,"stem":51},"Actor Usage Guide","\u002Fserver-modules\u002Factor","3.server-modules\u002F1.actor",{"title":53,"path":54,"stem":55},"Store Usage Guide","\u002Fserver-modules\u002Fstore","3.server-modules\u002F10.store",{"title":57,"path":58,"stem":59},"Task Usage Guide","\u002Fserver-modules\u002Ftask","3.server-modules\u002F11.task",{"title":61,"path":62,"stem":63},"Bank Usage Guide","\u002Fserver-modules\u002Fbank","3.server-modules\u002F2.bank",{"title":65,"path":66,"stem":67},"CAD Usage Guide","\u002Fserver-modules\u002Fcad","3.server-modules\u002F3.cad",{"title":69,"path":70,"stem":71},"Economy Usage Guide","\u002Fserver-modules\u002Feconomy","3.server-modules\u002F4.economy",{"title":73,"path":74,"stem":75},"Garage Usage Guide","\u002Fserver-modules\u002Fgarage","3.server-modules\u002F5.garage",{"title":77,"path":78,"stem":79},"Locker Usage Guide","\u002Fserver-modules\u002Flocker","3.server-modules\u002F6.locker",{"title":81,"path":82,"stem":83},"Organization Usage Guide","\u002Fserver-modules\u002Forganization","3.server-modules\u002F7.organization",{"title":85,"path":86,"stem":87},"Owned Storage Usage Guide","\u002Fserver-modules\u002Fowned-storage","3.server-modules\u002F8.owned-storage",{"title":89,"path":90,"stem":91},"Phone Usage Guide","\u002Fserver-modules\u002Fphone","3.server-modules\u002F9.phone","i-lucide-layers-3",{"title":94,"path":95,"stem":96,"children":97,"icon":144},"Client Addons","\u002Fclient-addons","4.client-addons\u002F0.index",[98,100,104,108,112,116,120,124,128,132,136,140],{"title":99,"path":95,"stem":96},"Client Usage Guide",{"title":101,"path":102,"stem":103},"Client Main Usage Guide","\u002Fclient-addons\u002Fmain","4.client-addons\u002F1.main",{"title":105,"path":106,"stem":107},"Client Phone Usage Guide","\u002Fclient-addons\u002Fphone","4.client-addons\u002F10.phone",{"title":109,"path":110,"stem":111},"Client Store Usage Guide","\u002Fclient-addons\u002Fstore","4.client-addons\u002F11.store",{"title":113,"path":114,"stem":115},"Client Common Usage Guide","\u002Fclient-addons\u002Fcommon","4.client-addons\u002F2.common",{"title":117,"path":118,"stem":119},"Client Actor Usage Guide","\u002Fclient-addons\u002Factor","4.client-addons\u002F3.actor",{"title":121,"path":122,"stem":123},"Client Bank Usage Guide","\u002Fclient-addons\u002Fbank","4.client-addons\u002F4.bank",{"title":125,"path":126,"stem":127},"Client CAD Usage Guide","\u002Fclient-addons\u002Fcad","4.client-addons\u002F5.cad",{"title":129,"path":130,"stem":131},"Client Garage Usage Guide","\u002Fclient-addons\u002Fgarage","4.client-addons\u002F6.garage",{"title":133,"path":134,"stem":135},"Client Locker Usage Guide","\u002Fclient-addons\u002Flocker","4.client-addons\u002F7.locker",{"title":137,"path":138,"stem":139},"Client Notifications Usage Guide","\u002Fclient-addons\u002Fnotifications","4.client-addons\u002F8.notifications",{"title":141,"path":142,"stem":143},"Client Organization Usage Guide","\u002Fclient-addons\u002Forganization","4.client-addons\u002F9.organization","i-lucide-monitor-smartphone",{"id":146,"title":113,"body":147,"description":520,"extension":521,"links":522,"meta":523,"navigation":274,"path":114,"seo":524,"stem":115,"__hash__":525},"docs\u002F4.client-addons\u002F2.common.md",{"type":148,"value":149,"toc":511},"minimark",[150,154,163,168,175,200,203,207,210,233,236,300,304,310,369,376,380,383,432,443,447,450,454,480,484,507],[151,152,113],"h1",{"id":153},"client-common-usage-guide",[155,156,157,158,162],"p",{},"The client ",[159,160,161],"code",{},"common"," addon contains shared browser UI bridge declarations and\ncommon client-side browser integration patterns.",[164,165,167],"h2",{"id":166},"purpose","Purpose",[155,169,170,171,174],{},"Use ",[159,172,173],{},"forge_client_common"," when a browser-backed feature UI needs reusable\nscreen lifecycle behavior:",[176,177,178,182,185,188,194],"ul",{},[179,180,181],"li",{},"active browser control tracking",[179,183,184],{},"browser ready state",[179,186,187],{},"pending event queues",[179,189,190,193],{},[159,191,192],{},"ExecJS"," payload delivery",[179,195,196,197],{},"shared bridge object inheritance through ",[159,198,199],{},"createHashMapObject",[155,201,202],{},"Feature addons still own their app-specific events and server RPC mapping.",[164,204,206],{"id":205},"shared-bridge","Shared Bridge",[155,208,209],{},"Initialize the bridge declarations with:",[211,212,217],"pre",{"className":213,"code":214,"language":215,"meta":216,"style":216},"language-sqf shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","private _webUIDeclarations = call forge_client_common_fnc_initWebUIBridge;\nprivate _bridgeDeclaration = _webUIDeclarations get \"bridgeDeclaration\";\n","sqf","",[159,218,219,227],{"__ignoreMap":216},[220,221,224],"span",{"class":222,"line":223},"line",1,[220,225,226],{},"private _webUIDeclarations = call forge_client_common_fnc_initWebUIBridge;\n",[220,228,230],{"class":222,"line":229},2,[220,231,232],{},"private _bridgeDeclaration = _webUIDeclarations get \"bridgeDeclaration\";\n",[155,234,235],{},"Feature bridges can inherit from the shared declaration:",[211,237,239],{"className":213,"code":238,"language":215,"meta":216,"style":216},"GVAR(MyUIBridgeBaseClass) = compileFinal createHashMapFromArray [\n [\"#base\", _bridgeDeclaration],\n [\"#type\", \"MyUIBridgeBaseClass\"],\n [\"handleReady\", compileFinal {\n params [[\"_control\", controlNull, [controlNull]]];\n\n _self call [\"setActiveBrowserControl\", [_control]];\n _self call [\"sendEvent\", [\"myAddon::hydrate\", createHashMap, _control]];\n }]\n];\n",[159,240,241,246,251,257,263,269,276,282,288,294],{"__ignoreMap":216},[220,242,243],{"class":222,"line":223},[220,244,245],{},"GVAR(MyUIBridgeBaseClass) = compileFinal createHashMapFromArray [\n",[220,247,248],{"class":222,"line":229},[220,249,250],{}," [\"#base\", _bridgeDeclaration],\n",[220,252,254],{"class":222,"line":253},3,[220,255,256],{}," [\"#type\", \"MyUIBridgeBaseClass\"],\n",[220,258,260],{"class":222,"line":259},4,[220,261,262],{}," [\"handleReady\", compileFinal {\n",[220,264,266],{"class":222,"line":265},5,[220,267,268],{}," params [[\"_control\", controlNull, [controlNull]]];\n",[220,270,272],{"class":222,"line":271},6,[220,273,275],{"emptyLinePlaceholder":274},true,"\n",[220,277,279],{"class":222,"line":278},7,[220,280,281],{}," _self call [\"setActiveBrowserControl\", [_control]];\n",[220,283,285],{"class":222,"line":284},8,[220,286,287],{}," _self call [\"sendEvent\", [\"myAddon::hydrate\", createHashMap, _control]];\n",[220,289,291],{"class":222,"line":290},9,[220,292,293],{}," }]\n",[220,295,297],{"class":222,"line":296},10,[220,298,299],{},"];\n",[164,301,303],{"id":302},"event-delivery","Event Delivery",[155,305,306,309],{},[159,307,308],{},"sendEvent"," builds this payload:",[211,311,315],{"className":312,"code":313,"language":314,"meta":216,"style":216},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n \"event\": \"myAddon::event\",\n \"data\": {}\n}\n","json",[159,316,317,323,350,364],{"__ignoreMap":216},[220,318,319],{"class":222,"line":223},[220,320,322],{"class":321},"sMK4o","{\n",[220,324,325,328,332,335,338,341,345,347],{"class":222,"line":229},[220,326,327],{"class":321}," \"",[220,329,331],{"class":330},"spNyl","event",[220,333,334],{"class":321},"\"",[220,336,337],{"class":321},":",[220,339,340],{"class":321}," \"",[220,342,344],{"class":343},"sfazB","myAddon::event",[220,346,334],{"class":321},[220,348,349],{"class":321},",\n",[220,351,352,354,357,359,361],{"class":222,"line":253},[220,353,327],{"class":321},[220,355,356],{"class":330},"data",[220,358,334],{"class":321},[220,360,337],{"class":321},[220,362,363],{"class":321}," {}\n",[220,365,366],{"class":222,"line":259},[220,367,368],{"class":321},"}\n",[155,370,371,372,375],{},"If the browser control is missing or not ready, the payload is queued on the\nscreen object. When the screen marks ready, ",[159,373,374],{},"flushPendingEvents"," delivers the\nqueue.",[164,377,379],{"id":378},"screen-lifecycle","Screen Lifecycle",[155,381,382],{},"The shared screen object tracks:",[384,385,386,398],"table",{},[387,388,389],"thead",{},[390,391,392,396],"tr",{},[393,394,395],"th",{},"Field",[393,397,167],{},[399,400,401,412,422],"tbody",{},[390,402,403,409],{},[404,405,406],"td",{},[159,407,408],{},"control",[404,410,411],{},"Active browser control.",[390,413,414,419],{},[404,415,416],{},[159,417,418],{},"readyState",[404,420,421],{},"Whether the browser app has sent its ready event.",[390,423,424,429],{},[404,425,426],{},[159,427,428],{},"pendingEvents",[404,430,431],{},"Outbound events waiting for a ready browser.",[155,433,434,435,438,439,442],{},"Call ",[159,436,437],{},"handleClose"," or ",[159,440,441],{},"dispose"," when a display closes so stale controls and\nqueued events are cleared.",[164,444,446],{"id":445},"current-consumers","Current Consumers",[155,448,449],{},"The common bridge pattern is used by the newer bank, CAD, garage, and\norganization client bridges. Store currently keeps its own bridge object and\nbrowser bridge function names.",[164,451,453],{"id":452},"usage-rules","Usage Rules",[176,455,456,459,465,471,477],{},[179,457,458],{},"Keep bridge inheritance in feature addons thin and explicit.",[179,460,461,462,464],{},"Keep shared code generic; do not add bank, CAD, org, or store-specific logic\nto ",[159,463,161],{},".",[179,466,467,468,464],{},"Prefer namespaced events such as ",[159,469,470],{},"garage::sync",[179,472,473,474,464],{},"Send hash maps or arrays that can be safely serialized with ",[159,475,476],{},"toJSON",[179,478,479],{},"Avoid direct extension calls from the client bridge; send CBA server events.",[164,481,483],{"id":482},"related-guides","Related Guides",[176,485,486,491,495,499,503],{},[179,487,488],{},[489,490,99],"a",{"href":95},[179,492,493],{},[489,494,121],{"href":122},[179,496,497],{},[489,498,125],{"href":126},[179,500,501],{},[489,502,129],{"href":130},[179,504,505],{},[489,506,141],{"href":142},[508,509,510],"style",{},"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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":216,"searchDepth":229,"depth":229,"links":512},[513,514,515,516,517,518,519],{"id":166,"depth":229,"text":167},{"id":205,"depth":229,"text":206},{"id":302,"depth":229,"text":303},{"id":378,"depth":229,"text":379},{"id":445,"depth":229,"text":446},{"id":452,"depth":229,"text":453},{"id":482,"depth":229,"text":483},"The client common addon contains shared browser UI bridge declarations and\ncommon client-side browser integration patterns.","md",null,{},{"title":113,"description":520},"y19oU7ALKU_ma2WFUqXb_vdzt_Y7Yt4fw-1V7_galCk",[527,529],{"title":109,"path":110,"stem":111,"description":528,"children":-1},"The client store addon provides the storefront browser UI for catalog browsing,\ncategory hydration, payment source display, cart handling, and checkout\nrequests.",{"title":117,"path":118,"stem":119,"description":530,"children":-1},"The client actor addon owns the player interaction menu and client-side actor\nrepository. It is the main launcher for nearby player actions and other Forge\nclient UIs.",1776806627742] |