[{"data":1,"prerenderedAt":2347},["ShallowReactive",2],{"doc-global_essentials\u002Fbuiltins\u002Fcomponents_export":3},{"id":4,"title":5,"body":6,"description":2337,"extension":2338,"meta":2339,"navigation":534,"path":2343,"seo":2344,"stem":2345,"__hash__":2346},"docs\u002Fdocs\u002Fglobal_essentials\u002Fbuiltins\u002Fcomponents_export.md","Components Export",{"type":7,"value":8,"toc":2306},"minimark",[9,14,23,26,30,35,38,44,60,65,79,81,85,88,92,168,170,174,178,185,189,272,274,278,281,285,314,316,320,323,327,333,344,346,350,353,357,382,387,444,446,450,453,456,470,473,477,500,504,598,603,652,654,658,661,665,730,732,736,739,743,759,764,772,774,778,788,792,806,810,818,822,959,1006,1008,1012,1015,1019,1032,1036,1044,1048,1126,1128,1132,1135,1139,1152,1156,1170,1172,1176,1180,1183,1187,1195,1197,1201,1204,1208,1215,1217,1221,1224,1228,1238,1240,1244,1247,1251,1259,1263,1283,1285,1289,1292,1296,1331,1333,1337,1340,1344,1351,1353,1357,1360,1364,1371,1373,1377,1381,1384,1388,1395,1397,1401,1404,1408,1436,1440,1454,1456,1460,1464,1467,1471,1509,1514,1531,1536,1556,1568,1570,1574,1581,1585,1623,1627,1671,1673,1677,1680,1684,1698,1702,1713,1717,1737,1744,1746,1750,1754,1757,1761,1769,1771,1775,1781,1785,1792,2127,2131,2137,2222,2226,2232,2274,2278,2302],[10,11,13],"h1",{"id":12},"exported-components-reference","Exported Components Reference",[15,16,17,18,22],"p",{},"All Vue components exported through ",[19,20,21],"code",{},"window.engine.components",".",[24,25],"hr",{},[10,27,29],{"id":28},"general","General",[31,32,34],"h2",{"id":33},"customcomponentcontainer","CustomComponentContainer",[15,36,37],{},"Renders all custom components registered to a specific slot. Used to inject custom UI into predefined slots throughout the game.",[15,39,40],{},[41,42,43],"strong",{},"Props:",[45,46,47,54],"ul",{},[48,49,50,53],"li",{},[19,51,52],{},"slot"," (string, required) - The slot ID to render components for",[48,55,56,59],{},[19,57,58],{},"context"," (object, optional) - Props to pass to all child components. Context props are merged with each component's own props, with component props taking precedence.",[15,61,62],{},[41,63,64],{},"Behavior:",[45,66,67,70],{},[48,68,69],{},"Context props allow parent components to share data with injected custom components",[48,71,72,73,78],{},"See ",[74,75,77],"a",{"href":76},"\u002Fdocs\u002Fglobal_essentials\u002Fbuiltins\u002Fcomponent_slots","Component Slots"," for available slots and their context props",[24,80],{},[31,82,84],{"id":83},"progressbar","ProgressBar",[15,86,87],{},"Generic animated progress bar for displaying percentage-based values like health, mana, influence, etc.",[15,89,90],{},[41,91,43],{},[45,93,94,100,106,116,125,134,143,152],{},[48,95,96,99],{},[19,97,98],{},"current"," (number, required) - Current value",[48,101,102,105],{},[19,103,104],{},"max"," (number, required) - Maximum value",[48,107,108,111,112,115],{},[19,109,110],{},"barColor"," (string, optional) - Bar fill color (default: ",[19,113,114],{},"#42b983",")",[48,117,118,121,122,115],{},[19,119,120],{},"bgColor"," (string, optional) - Background color (default: ",[19,123,124],{},"#555",[48,126,127,130,131,115],{},[19,128,129],{},"width"," (string, optional) - Bar width (default: ",[19,132,133],{},"100px",[48,135,136,139,140,115],{},[19,137,138],{},"height"," (string, optional) - Bar height (default: ",[19,141,142],{},"1.2rem",[48,144,145,148,149,115],{},[19,146,147],{},"hideMax"," (boolean, optional) - Hide max value, showing only current (default: ",[19,150,151],{},"false",[48,153,154,157,158,161,162,165,166,115],{},[19,155,156],{},"formatNumbers"," (boolean, optional) - Format numbers with thousand separators (e.g., ",[19,159,160],{},"100,000"," instead of ",[19,163,164],{},"100000",") (default: ",[19,167,151],{},[24,169],{},[10,171,173],{"id":172},"characters","Characters",[31,175,177],{"id":176},"characterface","CharacterFace",[15,179,180,181,184],{},"Renders a character's face portrait. Uses either a static face image (from ",[19,182,183],{},"face_static"," trait) or falls back to a cropped CharacterDoll.",[15,186,187],{},[41,188,43],{},[45,190,191,197,205,228,237,255,264],{},[48,192,193,196],{},[19,194,195],{},"character"," (Character, optional) - The character to display",[48,198,199,202,203,115],{},[19,200,201],{},"showName"," (boolean, optional) - Show character name label (default: ",[19,204,151],{},[48,206,207,210,211,214,215],{},[19,208,209],{},"nameStyle"," (\"badge\" | \"overlay\", optional) - Name display style (default: ",[19,212,213],{},"\"badge\"",")\n",[45,216,217,222],{},[48,218,219,221],{},[19,220,213],{}," - Name in a pill below the face, extends outside bounds",[48,223,224,227],{},[19,225,226],{},"\"overlay\""," - Name inside the face at the bottom, semi-transparent background",[48,229,230,233,234,115],{},[19,231,232],{},"size"," (number, optional) - Face size in pixels (default: ",[19,235,236],{},"100",[48,238,239,242,243,246,247,250,251,254],{},[19,240,241],{},"borderRadius"," (string, optional) - CSS border-radius value (default: ",[19,244,245],{},"\"50%\""," for circle, use ",[19,248,249],{},"\"8px\""," for rounded square, ",[19,252,253],{},"\"0\""," for square)",[48,256,257,260,261,115],{},[19,258,259],{},"borderColor"," (string, optional) - Outline color for the face (default: ",[19,262,263],{},"\"rgb(174, 174, 174)\"",[48,265,266,269,270,115],{},[19,267,268],{},"noWrapper"," (boolean, optional) - Skip the wrapper div and render just the face element. Use for inline layouts where the column wrapper is unwanted (default: ",[19,271,151],{},[24,273],{},[31,275,277],{"id":276},"characterdoll","CharacterDoll",[15,279,280],{},"Renders a full character doll with all skin layers composited together. Supports view-based rendering for alternative perspectives.",[15,282,283],{},[41,284,43],{},[45,286,287,292,306],{},[48,288,289,291],{},[19,290,195],{}," (Character, required) - The character to display",[48,293,294,297,298,301,302],{},[19,295,296],{},"view"," (string, optional) - Render a specific character view (e.g. ",[19,299,300],{},"'back'","). When set, only layers tagged with that view are rendered. Base (viewless) layers are excluded. See ",[74,303,305],{"href":304},"\u002Fdocs\u002Fglobal_essentials\u002Fcharacters\u002Fcharacter_views","Character Views",[48,307,308,311,312,115],{},[19,309,310],{},"instantLayers"," (boolean, optional) - Disables the fade transition on skin layer changes. Use for combat animations where layer swaps should be immediate (default: ",[19,313,151],{},[24,315],{},[31,317,319],{"id":318},"charactersheet","CharacterSheet",[15,321,322],{},"Default character sheet layout with vertical sections for statuses, stats, and inventory. Automatically shows\u002Fhides sections based on character data.",[15,324,325],{},[41,326,43],{},[45,328,329],{},[48,330,331,291],{},[19,332,195],{},[15,334,335,336,339,340,22],{},"Stat groups are controlled via ",[19,337,338],{},"game.registerStatGroupResolver()",". See ",[74,341,343],{"href":342},"..\u002Fcharacters\u002Fcharacters_api","Character API",[24,345],{},[31,347,349],{"id":348},"characterstats","CharacterStats",[15,351,352],{},"Displays character stats organized into groups. Uses the registered stat group resolver to determine which groups to show per character. Without a resolver, defaults to \"Resources\" and \"Stats\" groups.",[15,354,355],{},[41,356,43],{},[45,358,359,364,374],{},[48,360,361,363],{},[19,362,195],{}," (Character, required) - The character whose stats to display",[48,365,366,369,370,373],{},[19,367,368],{},"tags"," (string",[371,372],"span",{},", optional) - Filter stats by these tag names. Overrides the resolver when provided.",[48,375,376,379,380,115],{},[19,377,378],{},"noHeaders"," (boolean, optional) - Hide group headers (default: ",[19,381,151],{},[15,383,384],{},[41,385,386],{},"Example:",[388,389,394],"pre",{"className":390,"code":391,"language":392,"meta":393,"style":393},"language-html shiki shiki-themes github-light github-dark","\u003C!-- Show only fertilization stats, no headers -->\n\u003CCharacterStats :character=\"mc\" :tags=\"['fertilization']\" :no-headers=\"true\" \u002F>\n","html","",[19,395,396,404],{"__ignoreMap":393},[371,397,400],{"class":398,"line":399},"line",1,[371,401,403],{"class":402},"sJ8bj","\u003C!-- Show only fertilization stats, no headers -->\n",[371,405,407,411,414,418,421,425,428,430,433,436,438,441],{"class":398,"line":406},2,[371,408,410],{"class":409},"sVt8B","\u003C",[371,412,349],{"class":413},"s7hpK",[371,415,417],{"class":416},"sScJk"," :character",[371,419,420],{"class":409},"=",[371,422,424],{"class":423},"sZZnC","\"mc\"",[371,426,427],{"class":416}," :tags",[371,429,420],{"class":409},[371,431,432],{"class":423},"\"['fertilization']\"",[371,434,435],{"class":416}," :no-headers",[371,437,420],{"class":409},[371,439,440],{"class":423},"\"true\"",[371,442,443],{"class":409}," \u002F>\n",[24,445],{},[31,447,449],{"id":448},"characterstatuses","CharacterStatuses",[15,451,452],{},"Displays equipped items and character statuses as compact \"bricks\" in a flex-wrap row. Items render first, then statuses. Hovering an item shows an ItemCard popup; hovering a status shows description, stats, and ability details.",[15,454,455],{},"Supports two component slots for plugins to inject inline content:",[45,457,458,464],{},[48,459,460,463],{},[19,461,462],{},"character-statuses-top"," — renders before items\u002Fstatuses",[48,465,466,469],{},[19,467,468],{},"character-statuses-bottom"," — renders after items\u002Fstatuses",[15,471,472],{},"Both slots render inside the same flex container, so injected components participate in the brick layout.",[15,474,475],{},[41,476,43],{},[45,478,479,483,492],{},[48,480,481,291],{},[19,482,195],{},[48,484,485,488,489,115],{},[19,486,487],{},"showItems"," (boolean, optional) - Show equipped item bricks (default: ",[19,490,491],{},"true",[48,493,494,497,498,115],{},[19,495,496],{},"showStatuses"," (boolean, optional) - Show status effect bricks (default: ",[19,499,491],{},[15,501,502],{},[41,503,386],{},[388,505,507],{"className":390,"code":506,"language":392,"meta":393,"style":393},"\u003C!-- Show both items and statuses (default) -->\n\u003CCharacterStatuses :character=\"myCharacter\" \u002F>\n\n\u003C!-- Statuses only -->\n\u003CCharacterStatuses :character=\"myCharacter\" :showItems=\"false\" \u002F>\n\n\u003C!-- Items only -->\n\u003CCharacterStatuses :character=\"myCharacter\" :showStatuses=\"false\" \u002F>\n",[19,508,509,514,529,536,542,565,570,576],{"__ignoreMap":393},[371,510,511],{"class":398,"line":399},[371,512,513],{"class":402},"\u003C!-- Show both items and statuses (default) -->\n",[371,515,516,518,520,522,524,527],{"class":398,"line":406},[371,517,410],{"class":409},[371,519,449],{"class":413},[371,521,417],{"class":416},[371,523,420],{"class":409},[371,525,526],{"class":423},"\"myCharacter\"",[371,528,443],{"class":409},[371,530,532],{"class":398,"line":531},3,[371,533,535],{"emptyLinePlaceholder":534},true,"\n",[371,537,539],{"class":398,"line":538},4,[371,540,541],{"class":402},"\u003C!-- Statuses only -->\n",[371,543,545,547,549,551,553,555,558,560,563],{"class":398,"line":544},5,[371,546,410],{"class":409},[371,548,449],{"class":413},[371,550,417],{"class":416},[371,552,420],{"class":409},[371,554,526],{"class":423},[371,556,557],{"class":416}," :showItems",[371,559,420],{"class":409},[371,561,562],{"class":423},"\"false\"",[371,564,443],{"class":409},[371,566,568],{"class":398,"line":567},6,[371,569,535],{"emptyLinePlaceholder":534},[371,571,573],{"class":398,"line":572},7,[371,574,575],{"class":402},"\u003C!-- Items only -->\n",[371,577,579,581,583,585,587,589,592,594,596],{"class":398,"line":578},8,[371,580,410],{"class":409},[371,582,449],{"class":413},[371,584,417],{"class":416},[371,586,420],{"class":409},[371,588,526],{"class":423},[371,590,591],{"class":416}," :showStatuses",[371,593,420],{"class":409},[371,595,562],{"class":423},[371,597,443],{"class":409},[15,599,600],{},[41,601,602],{},"Slot injection:",[388,604,608],{"className":605,"code":606,"language":607,"meta":393,"style":393},"language-js shiki shiki-themes github-light github-dark","game.addComponent({\n  id: 'my_plugin_extra_bricks',\n  slot: 'character-statuses-bottom',\n  component: MyBricksComponent,\n});\n","js",[19,609,610,621,632,642,647],{"__ignoreMap":393},[371,611,612,615,618],{"class":398,"line":399},[371,613,614],{"class":409},"game.",[371,616,617],{"class":416},"addComponent",[371,619,620],{"class":409},"({\n",[371,622,623,626,629],{"class":398,"line":406},[371,624,625],{"class":409},"  id: ",[371,627,628],{"class":423},"'my_plugin_extra_bricks'",[371,630,631],{"class":409},",\n",[371,633,634,637,640],{"class":398,"line":531},[371,635,636],{"class":409},"  slot: ",[371,638,639],{"class":423},"'character-statuses-bottom'",[371,641,631],{"class":409},[371,643,644],{"class":398,"line":538},[371,645,646],{"class":409},"  component: MyBricksComponent,\n",[371,648,649],{"class":398,"line":544},[371,650,651],{"class":409},"});\n",[24,653],{},[31,655,657],{"id":656},"characterslot","CharacterSlot",[15,659,660],{},"Renders a character in a scene slot with full animation support. Handles positioning, transforms, filters, and can optionally show item slots overlay.",[15,662,663],{},[41,664,43],{},[45,666,667,671,680,686,692,702,710,724],{},[48,668,669,291],{},[19,670,195],{},[48,672,673,675,676,679],{},[19,674,52],{}," (",[19,677,678],{},"Partial\u003CSceneSlot>",", required) - Scene slot configuration with position, transforms, and animation data",[48,681,682,685],{},[19,683,684],{},"showItemSlots"," (boolean, optional) - Whether to show equipped item slots",[48,687,688,691],{},[19,689,690],{},"enableAppear"," (boolean, optional) - Enable appear animations",[48,693,694,696,697,699,700],{},[19,695,296],{}," (string, optional) - Character view override passed to CharacterDoll (e.g. ",[19,698,300],{},"). See ",[74,701,305],{"href":304},[48,703,704,707,708,115],{},[19,705,706],{},"interactive"," (boolean, optional) - Enables pointer-events on the slot, allowing click\u002Fhover handling (default: ",[19,709,151],{},[48,711,712,715,716,719,720,723],{},[19,713,714],{},"overlaySlot"," (string, optional) - Slot name for overlay injection inside the character content area. Works the same as ",[19,717,718],{},"CharacterFace.overlaySlot"," — register components via ",[19,721,722],{},"game.addComponent()"," targeting this slot name",[48,725,726,311,728,115],{},[19,727,310],{},[19,729,151],{},[24,731],{},[31,733,735],{"id":734},"characterviewer","CharacterViewer",[15,737,738],{},"Displays a character doll with stats\u002Fstatuses panel. Supports single or multiple characters with a face list for switching between them. Auto-hides face list when displaying a single character. Item interaction is always disabled.",[15,740,741],{},[41,742,43],{},[45,744,745,753],{},[48,746,747,749,750,752],{},[19,748,172],{}," (Character | Character",[371,751],{},", required) - Single character or array of characters to display",[48,754,755,758],{},[19,756,757],{},"initialIndex"," (number, optional) - Starting index for character selection (default: 0)",[15,760,761],{},[41,762,763],{},"Emits:",[45,765,766],{},[48,767,768,771],{},[19,769,770],{},"select"," - When a character is selected, provides (character, index)",[24,773],{},[31,775,777],{"id":776},"characterviewerpopup","CharacterViewerPopup",[15,779,780,781,784,785,22],{},"Fullscreen popup overlay wrapping CharacterViewer. Teleports to ",[19,782,783],{},"\u003Cbody>",", renders a dark overlay with a centered popup containing the CharacterViewer. Clicking the overlay backdrop or close button dismisses it. Parent controls visibility via ",[19,786,787],{},"v-if",[15,789,790],{},[41,791,43],{},[45,793,794,802],{},[48,795,796,798,799,801],{},[19,797,172],{}," (Character",[371,800],{},", required) - Array of characters to display",[48,803,804,758],{},[19,805,757],{},[15,807,808],{},[41,809,763],{},[45,811,812],{},[48,813,814,817],{},[19,815,816],{},"close"," - When the popup should close (overlay click or close button)",[15,819,820],{},[41,821,386],{},[388,823,825],{"className":605,"code":824,"language":607,"meta":393,"style":393},"const viewerChars = vue.ref(null);\nconst viewerIndex = vue.ref(0);\n\nfunction openViewer(characters, index) {\n  viewerChars.value = characters;\n  viewerIndex.value = index;\n}\n\nfunction closeViewer() {\n  viewerChars.value = null;\n}\n",[19,826,827,855,875,879,901,911,921,926,930,941,954],{"__ignoreMap":393},[371,828,829,833,837,840,843,846,849,852],{"class":398,"line":399},[371,830,832],{"class":831},"szBVR","const",[371,834,836],{"class":835},"sj4cs"," viewerChars",[371,838,839],{"class":831}," =",[371,841,842],{"class":409}," vue.",[371,844,845],{"class":416},"ref",[371,847,848],{"class":409},"(",[371,850,851],{"class":835},"null",[371,853,854],{"class":409},");\n",[371,856,857,859,862,864,866,868,870,873],{"class":398,"line":406},[371,858,832],{"class":831},[371,860,861],{"class":835}," viewerIndex",[371,863,839],{"class":831},[371,865,842],{"class":409},[371,867,845],{"class":416},[371,869,848],{"class":409},[371,871,872],{"class":835},"0",[371,874,854],{"class":409},[371,876,877],{"class":398,"line":531},[371,878,535],{"emptyLinePlaceholder":534},[371,880,881,884,887,889,892,895,898],{"class":398,"line":538},[371,882,883],{"class":831},"function",[371,885,886],{"class":416}," openViewer",[371,888,848],{"class":409},[371,890,172],{"class":891},"s4XuR",[371,893,894],{"class":409},", ",[371,896,897],{"class":891},"index",[371,899,900],{"class":409},") {\n",[371,902,903,906,908],{"class":398,"line":544},[371,904,905],{"class":409},"  viewerChars.value ",[371,907,420],{"class":831},[371,909,910],{"class":409}," characters;\n",[371,912,913,916,918],{"class":398,"line":567},[371,914,915],{"class":409},"  viewerIndex.value ",[371,917,420],{"class":831},[371,919,920],{"class":409}," index;\n",[371,922,923],{"class":398,"line":572},[371,924,925],{"class":409},"}\n",[371,927,928],{"class":398,"line":578},[371,929,535],{"emptyLinePlaceholder":534},[371,931,933,935,938],{"class":398,"line":932},9,[371,934,883],{"class":831},[371,936,937],{"class":416}," closeViewer",[371,939,940],{"class":409},"() {\n",[371,942,944,946,948,951],{"class":398,"line":943},10,[371,945,905],{"class":409},[371,947,420],{"class":831},[371,949,950],{"class":835}," null",[371,952,953],{"class":409},";\n",[371,955,957],{"class":398,"line":956},11,[371,958,925],{"class":409},[388,960,962],{"className":390,"code":961,"language":392,"meta":393,"style":393},"\u003CCharacterViewerPopup v-if=\"viewerChars\"\n    :characters=\"viewerChars\" :initialIndex=\"viewerIndex\" @close=\"closeViewer\" \u002F>\n",[19,963,964,978],{"__ignoreMap":393},[371,965,966,968,970,973,975],{"class":398,"line":399},[371,967,410],{"class":409},[371,969,777],{"class":413},[371,971,972],{"class":416}," v-if",[371,974,420],{"class":409},[371,976,977],{"class":423},"\"viewerChars\"\n",[371,979,980,983,985,988,991,993,996,999,1001,1004],{"class":398,"line":406},[371,981,982],{"class":416},"    :characters",[371,984,420],{"class":409},[371,986,987],{"class":423},"\"viewerChars\"",[371,989,990],{"class":416}," :initialIndex",[371,992,420],{"class":409},[371,994,995],{"class":423},"\"viewerIndex\"",[371,997,998],{"class":416}," @close",[371,1000,420],{"class":409},[371,1002,1003],{"class":423},"\"closeViewer\"",[371,1005,443],{"class":409},[24,1007],{},[31,1009,1011],{"id":1010},"characterrename","CharacterRename",[15,1013,1014],{},"Inline character name editor with validation. Displays character name with edit icon - click to enter edit mode with input field and save\u002Fcancel buttons.",[15,1016,1017],{},[41,1018,43],{},[45,1020,1021,1026],{},[48,1022,1023,1025],{},[19,1024,195],{}," (Character, required) - The character whose name to display\u002Fedit",[48,1027,1028,1031],{},[19,1029,1030],{},"maxLength"," (number, optional) - Maximum name length (default: 50)",[15,1033,1034],{},[41,1035,763],{},[45,1037,1038],{},[48,1039,1040,1043],{},[19,1041,1042],{},"rename"," - When name is saved, provides (oldName, newName)",[15,1045,1046],{},[41,1047,386],{},[388,1049,1051],{"className":605,"code":1050,"language":607,"meta":393,"style":393},"\u002F\u002F Basic usage\n\u003CCharacterRename :character=\"myCharacter\" \u002F>\n\n\u002F\u002F With max length and event handler\n\u003CCharacterRename\n  :character=\"myCharacter\"\n  :maxLength=\"30\"\n  @rename=\"(oldName, newName) => console.log('Renamed:', oldName, '->', newName)\"\n\u002F>\n",[19,1052,1053,1058,1069,1073,1078,1085,1090,1095,1121],{"__ignoreMap":393},[371,1054,1055],{"class":398,"line":399},[371,1056,1057],{"class":402},"\u002F\u002F Basic usage\n",[371,1059,1060,1062,1064,1067],{"class":398,"line":406},[371,1061,410],{"class":409},[371,1063,1011],{"class":835},[371,1065,1066],{"class":413}," :character=\"myCharacter\"",[371,1068,443],{"class":409},[371,1070,1071],{"class":398,"line":531},[371,1072,535],{"emptyLinePlaceholder":534},[371,1074,1075],{"class":398,"line":538},[371,1076,1077],{"class":402},"\u002F\u002F With max length and event handler\n",[371,1079,1080,1082],{"class":398,"line":544},[371,1081,410],{"class":409},[371,1083,1084],{"class":835},"CharacterRename\n",[371,1086,1087],{"class":398,"line":567},[371,1088,1089],{"class":413},"  :character=\"myCharacter\"\n",[371,1091,1092],{"class":398,"line":572},[371,1093,1094],{"class":413},"  :maxLength=\"30\"\n",[371,1096,1097,1100,1103,1106,1109,1112,1115,1118],{"class":398,"line":578},[371,1098,1099],{"class":413},"  @rename=\"(oldName,",[371,1101,1102],{"class":413}," newName)",[371,1104,1105],{"class":413}," =>",[371,1107,1108],{"class":413}," console.log('Renamed:',",[371,1110,1111],{"class":413}," oldName,",[371,1113,1114],{"class":423}," '->'",[371,1116,1117],{"class":413},",",[371,1119,1120],{"class":413}," newName)\"\n",[371,1122,1123],{"class":398,"line":932},[371,1124,1125],{"class":409},"\u002F>\n",[24,1127],{},[31,1129,1131],{"id":1130},"statentity","StatEntity",[15,1133,1134],{},"Renders a single stat entry. Displays as a resource bar for resource-type stats or plain text for regular stats.",[15,1136,1137],{},[41,1138,43],{},[45,1140,1141,1146],{},[48,1142,1143,1145],{},[19,1144,195],{}," (Character, required) - The character whose stat to display",[48,1147,1148,1151],{},[19,1149,1150],{},"statId"," (string, required) - The ID of the stat to display",[15,1153,1154],{},[41,1155,763],{},[45,1157,1158,1164],{},[48,1159,1160,1163],{},[19,1161,1162],{},"statHover"," - When hovering over a stat with description",[48,1165,1166,1169],{},[19,1167,1168],{},"statLeave"," - When mouse leaves the stat",[24,1171],{},[10,1173,1175],{"id":1174},"items","Items",[31,1177,1179],{"id":1178},"inventorycomponent","InventoryComponent",[15,1181,1182],{},"Displays an inventory with item grid. Shows unequipped items with support for fixed-size inventories showing empty slots.",[15,1184,1185],{},[41,1186,43],{},[45,1188,1189],{},[48,1190,1191,1194],{},[19,1192,1193],{},"inventory_id"," (string, required) - The ID of the inventory to display",[24,1196],{},[31,1198,1200],{"id":1199},"inventoryheader","InventoryHeader",[15,1202,1203],{},"Displays inventory header with item count and weight statistics.",[15,1205,1206],{},[41,1207,43],{},[45,1209,1210],{},[48,1211,1212,1214],{},[19,1213,1193],{}," (string, required) - The ID of the inventory",[24,1216],{},[31,1218,1220],{"id":1219},"itemgrid","ItemGrid",[15,1222,1223],{},"Renders a grid of items with popup support for item details and actions. Handles drag-and-drop and hover interactions.",[15,1225,1226],{},[41,1227,43],{},[45,1229,1230],{},[48,1231,1232,1234,1235,1237],{},[19,1233,1174],{}," ((Item | null)",[371,1236],{},", required) - Array of items to display. Null values render as empty slots.",[24,1239],{},[31,1241,1243],{"id":1242},"itemslot","ItemSlot",[15,1245,1246],{},"Renders a single item slot with icon, quantity badge, and durability indicator. Handles hover and drag events.",[15,1248,1249],{},[41,1250,43],{},[45,1252,1253],{},[48,1254,1255,1258],{},[19,1256,1257],{},"item"," (Item, required) - The item to display",[15,1260,1261],{},[41,1262,763],{},[45,1264,1265,1271,1277],{},[48,1266,1267,1270],{},[19,1268,1269],{},"click"," - When item is clicked",[48,1272,1273,1276],{},[19,1274,1275],{},"dragstart"," - When drag starts",[48,1278,1279,1282],{},[19,1280,1281],{},"hover"," - When hover state changes",[24,1284],{},[31,1286,1288],{"id":1287},"itemslots","ItemSlots",[15,1290,1291],{},"Displays equipped item slots for a character. Shows all item slots with their equipped items and handles item popup\u002Factions.",[15,1293,1294],{},[41,1295,43],{},[45,1297,1298,1303,1309],{},[48,1299,1300,1302],{},[19,1301,195],{}," (Character, required) - The character whose equipped items to display",[48,1304,1305,1308],{},[19,1306,1307],{},"disabled"," (boolean, optional) - Disables item click\u002Fdrag while keeping hover tooltips",[48,1310,1311,1314,1315,1318,1319,1322,1323,1326,1327,1330],{},[19,1312,1313],{},"layout"," (string, optional) - ",[19,1316,1317],{},"'doll'"," (default) positions slots over a character portrait via each slot's ",[19,1320,1321],{},"x","\u002F",[19,1324,1325],{},"y"," coordinates. ",[19,1328,1329],{},"'row'"," renders a flex row of slots (no positioning) — use this in text-based dungeons or in sheet headers where there is no portrait.",[24,1332],{},[31,1334,1336],{"id":1335},"itemcard","ItemCard",[15,1338,1339],{},"Displays detailed item information in a popup card. Shows name, description, stats, weight, and rarity styling.",[15,1341,1342],{},[41,1343,43],{},[45,1345,1346],{},[48,1347,1348,1350],{},[19,1349,1257],{}," (Item, required) - The item to display details for",[24,1352],{},[31,1354,1356],{"id":1355},"itemchoices","ItemChoices",[15,1358,1359],{},"Displays available actions\u002Fchoices for an item (use, equip, drop, etc.).",[15,1361,1362],{},[41,1363,43],{},[45,1365,1366],{},[48,1367,1368,1370],{},[19,1369,1257],{}," (Item, required) - The item to show choices for",[24,1372],{},[10,1374,1376],{"id":1375},"skills","Skills",[31,1378,1380],{"id":1379},"skilltree","SkillTree",[15,1382,1383],{},"Renders a skill tree with nodes, connections, and popup descriptions. Supports multiple trees with a selector, panning navigation, and skill learning.",[15,1385,1386],{},[41,1387,43],{},[45,1389,1390],{},[48,1391,1392,1394],{},[19,1393,195],{}," (Character, required) - The character whose skill trees to display",[24,1396],{},[31,1398,1400],{"id":1399},"skillslot","SkillSlot",[15,1402,1403],{},"Renders a single skill node in a skill tree. Shows skill icon, level progress, and learnable\u002Flocked states.",[15,1405,1406],{},[41,1407,43],{},[45,1409,1410,1416,1421,1427],{},[48,1411,1412,1415],{},[19,1413,1414],{},"skill"," (any, required) - The skill slot data",[48,1417,1418,1420],{},[19,1419,195],{}," (Character, required) - The character",[48,1422,1423,1426],{},[19,1424,1425],{},"treeId"," (string, required) - The skill tree ID",[48,1428,1429,1432,1433,1435],{},[19,1430,1431],{},"allSkills"," (any",[371,1434],{},", required) - All skills in the tree (for dependency checking)",[15,1437,1438],{},[41,1439,763],{},[45,1441,1442,1448],{},[48,1443,1444,1447],{},[19,1445,1446],{},"mouseenter"," - When hovering over skill",[48,1449,1450,1453],{},[19,1451,1452],{},"mouseleave"," - When mouse leaves skill",[24,1455],{},[10,1457,1459],{"id":1458},"abilities","Abilities",[31,1461,1463],{"id":1462},"abilitycard","AbilityCard",[15,1465,1466],{},"Displays detailed ability information in a card format. Shows the ability icon, name, cooldown (in turns), resource costs (with stat-specific colors), description, and auto-generated effect descriptions.",[15,1468,1469],{},[41,1470,43],{},[45,1472,1473,1479,1485,1494,1500],{},[48,1474,1475,1478],{},[19,1476,1477],{},"abilityId"," (string, required) - The ID of the ability to display",[48,1480,1481,1484],{},[19,1482,1483],{},"characterId"," (string, optional) - Character ID to resolve character's merged ability for display. If omitted, shows base template data",[48,1486,1487,1490,1491,1493],{},[19,1488,1489],{},"showDelta"," (boolean, optional) - When true and ",[19,1492,1483],{}," is provided, shows base→merged transitions inline in the description (e.g., \"Deal 100→120 damage\"). New effects (not in base) appear in a separate section with \"New\" badge",[48,1495,1496,1499],{},[19,1497,1498],{},"improvementData"," ({ meta, effects }, optional) - Externally provided modifier delta. Values are raw deltas that get displayed as base→merged transitions inline in the description",[48,1501,1502,1505,1506,1508],{},[19,1503,1504],{},"isGranted"," (boolean, optional) - Shows a \"Granted\" tag in the header. A \"Modified\" tag is auto-shown when ",[19,1507,1498],{}," is provided",[15,1510,1511],{},[41,1512,1513],{},"Features:",[45,1515,1516,1519,1522,1528],{},[48,1517,1518],{},"Cooldown displayed with ⏱️ icon and turn count",[48,1520,1521],{},"Resource costs displayed with stat colors from character_stats definitions",[48,1523,1524,1525],{},"Effect descriptions auto-generated from ability template aspects with ",[19,1526,1527],{},"ingame_description",[48,1529,1530],{},"Delta transitions shown inline in the description, not as a separate section",[15,1532,1533],{},[41,1534,1535],{},"Custom Slots:",[45,1537,1538,1544,1550],{},[48,1539,1540,1543],{},[19,1541,1542],{},"ability-card-header"," - Inside the header, after the ability name. Use for custom badges or tags.",[48,1545,1546,1549],{},[19,1547,1548],{},"ability-card-meta"," - Inside the meta section, after costs. Use for additional stat displays.",[48,1551,1552,1555],{},[19,1553,1554],{},"ability-card-footer"," - At the bottom of the card. Use for action buttons (e.g., \"Use Ability\").",[15,1557,1558,1561,1562,1564,1565,1567],{},[41,1559,1560],{},"Slot Context:"," All slots receive ",[19,1563,1477],{}," (string) and ",[19,1566,1483],{}," (string | undefined) as props.",[24,1569],{},[31,1571,1573],{"id":1572},"statusobjectdisplay","StatusObjectDisplay",[15,1575,1576,1577,1580],{},"Renders stats and abilities from a ",[19,1578,1579],{},"BaseStatusObject",". Filters stat visibility, displays granted abilities as AbilityCards, and shows modifier-only abilities with a \"Modification\" label. Used internally by item popups, status popups, and skill popups.",[15,1582,1583],{},[41,1584,43],{},[45,1586,1587,1602,1608,1614],{},[48,1588,1589,1592,1593,894,1596,1598,1599],{},[19,1590,1591],{},"data"," (BaseStatusObject, required) - The status object containing ",[19,1594,1595],{},"stats",[19,1597,1458],{},", and ",[19,1600,1601],{},"ability_modifiers",[48,1603,1604,1607],{},[19,1605,1606],{},"stacks"," (number, optional) - Stack multiplier passed to stats display (e.g., status stacks)",[48,1609,1610,1613],{},[19,1611,1612],{},"multiplier"," (number, optional) - Level multiplier passed to stats display (e.g., skill level)",[48,1615,1616,1619,1620,1622],{},[19,1617,1618],{},"isActive"," (boolean, optional) - Whether stats are active (default: ",[19,1621,491],{},"). Inactive stats show dimmed header",[15,1624,1625],{},[41,1626,386],{},[388,1628,1630],{"className":605,"code":1629,"language":607,"meta":393,"style":393},"\u002F\u002F Display an item's stats + abilities\n\u003CStatusObjectDisplay :data=\"item.statusObject\" \u002F>\n\n\u002F\u002F Display a status with stacks\n\u003CStatusObjectDisplay :data=\"statusData\" :stacks=\"3\" \u002F>\n",[19,1631,1632,1637,1648,1652,1657],{"__ignoreMap":393},[371,1633,1634],{"class":398,"line":399},[371,1635,1636],{"class":402},"\u002F\u002F Display an item's stats + abilities\n",[371,1638,1639,1641,1643,1646],{"class":398,"line":406},[371,1640,410],{"class":409},[371,1642,1573],{"class":835},[371,1644,1645],{"class":413}," :data=\"item.statusObject\"",[371,1647,443],{"class":409},[371,1649,1650],{"class":398,"line":531},[371,1651,535],{"emptyLinePlaceholder":534},[371,1653,1654],{"class":398,"line":538},[371,1655,1656],{"class":402},"\u002F\u002F Display a status with stacks\n",[371,1658,1659,1661,1663,1666,1669],{"class":398,"line":544},[371,1660,410],{"class":409},[371,1662,1573],{"class":835},[371,1664,1665],{"class":413}," :data=\"statusData\"",[371,1667,1668],{"class":413}," :stacks=\"3\"",[371,1670,443],{"class":409},[24,1672],{},[31,1674,1676],{"id":1675},"abilitiesviewer","AbilitiesViewer",[15,1678,1679],{},"Lists a character's abilities as selectable items. Shows ability icons and names in a horizontal list. Selecting an ability displays its full details via AbilityCard.",[15,1681,1682],{},[41,1683,43],{},[45,1685,1686,1691],{},[48,1687,1688,1690],{},[19,1689,195],{}," (Character, required) - The character whose abilities to display",[48,1692,1693,1695,1696,115],{},[19,1694,1489],{}," (boolean, optional) - Whether to show base➜merged transitions in ability descriptions (default: ",[19,1697,151],{},[15,1699,1700],{},[41,1701,64],{},[45,1703,1704,1707,1710],{},[48,1705,1706],{},"Auto-selects first ability on mount",[48,1708,1709],{},"Shows \"No abilities\" message when character has none",[48,1711,1712],{},"Selected ability highlighted with accent color",[15,1714,1715],{},[41,1716,1535],{},[45,1718,1719,1725,1731],{},[48,1720,1721,1724],{},[19,1722,1723],{},"abilities-viewer-top"," - Before the ability list. Use for filters or search input.",[48,1726,1727,1730],{},[19,1728,1729],{},"abilities-viewer-list"," - Inside the ability list, after the ability items. Use for \"Add Ability\" buttons.",[48,1732,1733,1736],{},[19,1734,1735],{},"abilities-viewer-bottom"," - At the bottom of the viewer. Use for global actions.",[15,1738,1739,1561,1741,1743],{},[41,1740,1560],{},[19,1742,195],{}," (Character) as a prop.",[24,1745],{},[10,1747,1749],{"id":1748},"assets","Assets",[31,1751,1753],{"id":1752},"backgroundasset","BackgroundAsset",[15,1755,1756],{},"Renders a scene asset (image, video, or spine animation) with full transform support including position, scale, rotation, alpha, blur, and various filter effects.",[15,1758,1759],{},[41,1760,43],{},[45,1762,1763],{},[48,1764,1765,1768],{},[19,1766,1767],{},"asset"," (SceneAsset, required) - The asset data object containing file path and transform properties",[24,1770],{},[10,1772,1774],{"id":1773},"exporting-plugin-components","Exporting Plugin Components",[15,1776,1777,1778,1780],{},"Plugins can register their own reusable components to ",[19,1779,21],{},", making them available to other plugins and game scripts.",[31,1782,1784],{"id":1783},"registering-a-component","Registering a Component",[15,1786,1787,1788,1791],{},"Use ",[19,1789,1790],{},"game.registerComponent(name, component)"," in your plugin's main script:",[388,1793,1795],{"className":605,"code":1794,"language":607,"meta":393,"style":393},"\u002F\u002F plugins\u002Fmy_plugin\u002Fscripts\u002Fmain.mjs\nconst { game, vue } = window.engine;\nconst { defineComponent, ref, computed } = vue;\n\n\u002F\u002F Define a reusable component\nconst MyGrid = defineComponent({\n  props: ['rows', 'cols'],\n  setup(props) {\n    const cells = computed(() => {\n      const result = [];\n      for (let r = 0; r \u003C props.rows; r++) {\n        for (let c = 0; c \u003C props.cols; c++) {\n          result.push({ row: r, col: c });\n        }\n      }\n      return result;\n    });\n    return { cells };\n  },\n  template: `\n    \u003Cdiv class=\"my-grid\">\n      \u003Cdiv v-for=\"cell in cells\" :key=\"cell.row + '_' + cell.col\">\n        {{ cell.row }}, {{ cell.col }}\n      \u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n  `\n});\n\n\u002F\u002F Register it for other scripts to use\ngame.registerComponent('MyGrid', MyGrid);\n",[19,1796,1797,1802,1825,1850,1854,1859,1873,1889,1901,1923,1936,1967,1996,2008,2014,2020,2029,2035,2044,2050,2059,2065,2071,2077,2083,2089,2095,2100,2105,2111],{"__ignoreMap":393},[371,1798,1799],{"class":398,"line":399},[371,1800,1801],{"class":402},"\u002F\u002F plugins\u002Fmy_plugin\u002Fscripts\u002Fmain.mjs\n",[371,1803,1804,1806,1809,1812,1814,1817,1820,1822],{"class":398,"line":406},[371,1805,832],{"class":831},[371,1807,1808],{"class":409}," { ",[371,1810,1811],{"class":835},"game",[371,1813,894],{"class":409},[371,1815,1816],{"class":835},"vue",[371,1818,1819],{"class":409}," } ",[371,1821,420],{"class":831},[371,1823,1824],{"class":409}," window.engine;\n",[371,1826,1827,1829,1831,1834,1836,1838,1840,1843,1845,1847],{"class":398,"line":531},[371,1828,832],{"class":831},[371,1830,1808],{"class":409},[371,1832,1833],{"class":835},"defineComponent",[371,1835,894],{"class":409},[371,1837,845],{"class":835},[371,1839,894],{"class":409},[371,1841,1842],{"class":835},"computed",[371,1844,1819],{"class":409},[371,1846,420],{"class":831},[371,1848,1849],{"class":409}," vue;\n",[371,1851,1852],{"class":398,"line":538},[371,1853,535],{"emptyLinePlaceholder":534},[371,1855,1856],{"class":398,"line":544},[371,1857,1858],{"class":402},"\u002F\u002F Define a reusable component\n",[371,1860,1861,1863,1866,1868,1871],{"class":398,"line":567},[371,1862,832],{"class":831},[371,1864,1865],{"class":835}," MyGrid",[371,1867,839],{"class":831},[371,1869,1870],{"class":416}," defineComponent",[371,1872,620],{"class":409},[371,1874,1875,1878,1881,1883,1886],{"class":398,"line":572},[371,1876,1877],{"class":409},"  props: [",[371,1879,1880],{"class":423},"'rows'",[371,1882,894],{"class":409},[371,1884,1885],{"class":423},"'cols'",[371,1887,1888],{"class":409},"],\n",[371,1890,1891,1894,1896,1899],{"class":398,"line":578},[371,1892,1893],{"class":416},"  setup",[371,1895,848],{"class":409},[371,1897,1898],{"class":891},"props",[371,1900,900],{"class":409},[371,1902,1903,1906,1909,1911,1914,1917,1920],{"class":398,"line":932},[371,1904,1905],{"class":831},"    const",[371,1907,1908],{"class":835}," cells",[371,1910,839],{"class":831},[371,1912,1913],{"class":416}," computed",[371,1915,1916],{"class":409},"(() ",[371,1918,1919],{"class":831},"=>",[371,1921,1922],{"class":409}," {\n",[371,1924,1925,1928,1931,1933],{"class":398,"line":943},[371,1926,1927],{"class":831},"      const",[371,1929,1930],{"class":835}," result",[371,1932,839],{"class":831},[371,1934,1935],{"class":409}," [];\n",[371,1937,1938,1941,1943,1946,1949,1951,1954,1957,1959,1962,1965],{"class":398,"line":956},[371,1939,1940],{"class":831},"      for",[371,1942,675],{"class":409},[371,1944,1945],{"class":831},"let",[371,1947,1948],{"class":409}," r ",[371,1950,420],{"class":831},[371,1952,1953],{"class":835}," 0",[371,1955,1956],{"class":409},"; r ",[371,1958,410],{"class":831},[371,1960,1961],{"class":409}," props.rows; r",[371,1963,1964],{"class":831},"++",[371,1966,900],{"class":409},[371,1968,1970,1973,1975,1977,1980,1982,1984,1987,1989,1992,1994],{"class":398,"line":1969},12,[371,1971,1972],{"class":831},"        for",[371,1974,675],{"class":409},[371,1976,1945],{"class":831},[371,1978,1979],{"class":409}," c ",[371,1981,420],{"class":831},[371,1983,1953],{"class":835},[371,1985,1986],{"class":409},"; c ",[371,1988,410],{"class":831},[371,1990,1991],{"class":409}," props.cols; c",[371,1993,1964],{"class":831},[371,1995,900],{"class":409},[371,1997,1999,2002,2005],{"class":398,"line":1998},13,[371,2000,2001],{"class":409},"          result.",[371,2003,2004],{"class":416},"push",[371,2006,2007],{"class":409},"({ row: r, col: c });\n",[371,2009,2011],{"class":398,"line":2010},14,[371,2012,2013],{"class":409},"        }\n",[371,2015,2017],{"class":398,"line":2016},15,[371,2018,2019],{"class":409},"      }\n",[371,2021,2023,2026],{"class":398,"line":2022},16,[371,2024,2025],{"class":831},"      return",[371,2027,2028],{"class":409}," result;\n",[371,2030,2032],{"class":398,"line":2031},17,[371,2033,2034],{"class":409},"    });\n",[371,2036,2038,2041],{"class":398,"line":2037},18,[371,2039,2040],{"class":831},"    return",[371,2042,2043],{"class":409}," { cells };\n",[371,2045,2047],{"class":398,"line":2046},19,[371,2048,2049],{"class":409},"  },\n",[371,2051,2053,2056],{"class":398,"line":2052},20,[371,2054,2055],{"class":409},"  template: ",[371,2057,2058],{"class":423},"`\n",[371,2060,2062],{"class":398,"line":2061},21,[371,2063,2064],{"class":423},"    \u003Cdiv class=\"my-grid\">\n",[371,2066,2068],{"class":398,"line":2067},22,[371,2069,2070],{"class":423},"      \u003Cdiv v-for=\"cell in cells\" :key=\"cell.row + '_' + cell.col\">\n",[371,2072,2074],{"class":398,"line":2073},23,[371,2075,2076],{"class":423},"        {{ cell.row }}, {{ cell.col }}\n",[371,2078,2080],{"class":398,"line":2079},24,[371,2081,2082],{"class":423},"      \u003C\u002Fdiv>\n",[371,2084,2086],{"class":398,"line":2085},25,[371,2087,2088],{"class":423},"    \u003C\u002Fdiv>\n",[371,2090,2092],{"class":398,"line":2091},26,[371,2093,2094],{"class":423},"  `\n",[371,2096,2098],{"class":398,"line":2097},27,[371,2099,651],{"class":409},[371,2101,2103],{"class":398,"line":2102},28,[371,2104,535],{"emptyLinePlaceholder":534},[371,2106,2108],{"class":398,"line":2107},29,[371,2109,2110],{"class":402},"\u002F\u002F Register it for other scripts to use\n",[371,2112,2114,2116,2119,2121,2124],{"class":398,"line":2113},30,[371,2115,614],{"class":409},[371,2117,2118],{"class":416},"registerComponent",[371,2120,848],{"class":409},[371,2122,2123],{"class":423},"'MyGrid'",[371,2125,2126],{"class":409},", MyGrid);\n",[31,2128,2130],{"id":2129},"using-registered-components","Using Registered Components",[15,2132,2133,2134,2136],{},"Any script can access registered components via ",[19,2135,21],{},":",[388,2138,2140],{"className":605,"code":2139,"language":607,"meta":393,"style":393},"\u002F\u002F Another plugin or game script\nconst { MyGrid, CharacterFace } = window.engine.components;\n\nconst MyScreen = defineComponent({\n  components: { MyGrid, CharacterFace },\n  template: `\n    \u003Cdiv>\n      \u003CMyGrid :rows=\"3\" :cols=\"3\" \u002F>\n      \u003CCharacterFace :character=\"hero\" \u002F>\n    \u003C\u002Fdiv>\n  `\n});\n",[19,2141,2142,2147,2167,2171,2184,2189,2195,2200,2205,2210,2214,2218],{"__ignoreMap":393},[371,2143,2144],{"class":398,"line":399},[371,2145,2146],{"class":402},"\u002F\u002F Another plugin or game script\n",[371,2148,2149,2151,2153,2156,2158,2160,2162,2164],{"class":398,"line":406},[371,2150,832],{"class":831},[371,2152,1808],{"class":409},[371,2154,2155],{"class":835},"MyGrid",[371,2157,894],{"class":409},[371,2159,177],{"class":835},[371,2161,1819],{"class":409},[371,2163,420],{"class":831},[371,2165,2166],{"class":409}," window.engine.components;\n",[371,2168,2169],{"class":398,"line":531},[371,2170,535],{"emptyLinePlaceholder":534},[371,2172,2173,2175,2178,2180,2182],{"class":398,"line":538},[371,2174,832],{"class":831},[371,2176,2177],{"class":835}," MyScreen",[371,2179,839],{"class":831},[371,2181,1870],{"class":416},[371,2183,620],{"class":409},[371,2185,2186],{"class":398,"line":544},[371,2187,2188],{"class":409},"  components: { MyGrid, CharacterFace },\n",[371,2190,2191,2193],{"class":398,"line":567},[371,2192,2055],{"class":409},[371,2194,2058],{"class":423},[371,2196,2197],{"class":398,"line":572},[371,2198,2199],{"class":423},"    \u003Cdiv>\n",[371,2201,2202],{"class":398,"line":578},[371,2203,2204],{"class":423},"      \u003CMyGrid :rows=\"3\" :cols=\"3\" \u002F>\n",[371,2206,2207],{"class":398,"line":932},[371,2208,2209],{"class":423},"      \u003CCharacterFace :character=\"hero\" \u002F>\n",[371,2211,2212],{"class":398,"line":943},[371,2213,2088],{"class":423},[371,2215,2216],{"class":398,"line":956},[371,2217,2094],{"class":423},[371,2219,2220],{"class":398,"line":1969},[371,2221,651],{"class":409},[31,2223,2225],{"id":2224},"getting-a-single-component","Getting a Single Component",[15,2227,1787,2228,2231],{},[19,2229,2230],{},"game.getComponent(name)"," to retrieve a component by name:",[388,2233,2235],{"className":605,"code":2234,"language":607,"meta":393,"style":393},"const MyGrid = game.getComponent('MyGrid');\nif (MyGrid) {\n  \u002F\u002F Component exists, use it\n}\n",[19,2236,2237,2257,2265,2270],{"__ignoreMap":393},[371,2238,2239,2241,2243,2245,2248,2251,2253,2255],{"class":398,"line":399},[371,2240,832],{"class":831},[371,2242,1865],{"class":835},[371,2244,839],{"class":831},[371,2246,2247],{"class":409}," game.",[371,2249,2250],{"class":416},"getComponent",[371,2252,848],{"class":409},[371,2254,2123],{"class":423},[371,2256,854],{"class":409},[371,2258,2259,2262],{"class":398,"line":406},[371,2260,2261],{"class":831},"if",[371,2263,2264],{"class":409}," (MyGrid) {\n",[371,2266,2267],{"class":398,"line":531},[371,2268,2269],{"class":402},"  \u002F\u002F Component exists, use it\n",[371,2271,2272],{"class":398,"line":538},[371,2273,925],{"class":409},[31,2275,2277],{"id":2276},"best-practices","Best Practices",[2279,2280,2281,2290,2296],"ol",{},[48,2282,2283,2286,2287,115],{},[41,2284,2285],{},"Use unique names"," - Prefix with your plugin name to avoid collisions (e.g., ",[19,2288,2289],{},"AutoBattler_FormationGrid",[48,2291,2292,2295],{},[41,2293,2294],{},"Register early"," - Register components in your plugin's main script so they're available when other scripts load",[48,2297,2298,2301],{},[41,2299,2300],{},"Document your components"," - If sharing with other plugins, document the props and events",[2303,2304,2305],"style",{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}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 .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":393,"searchDepth":406,"depth":406,"links":2307},[2308,2309,2310,2311,2312,2313,2314,2315,2316,2317,2318,2319,2320,2321,2322,2323,2324,2325,2326,2327,2328,2329,2330,2331,2332,2333,2334,2335,2336],{"id":33,"depth":406,"text":34},{"id":83,"depth":406,"text":84},{"id":176,"depth":406,"text":177},{"id":276,"depth":406,"text":277},{"id":318,"depth":406,"text":319},{"id":348,"depth":406,"text":349},{"id":448,"depth":406,"text":449},{"id":656,"depth":406,"text":657},{"id":734,"depth":406,"text":735},{"id":776,"depth":406,"text":777},{"id":1010,"depth":406,"text":1011},{"id":1130,"depth":406,"text":1131},{"id":1178,"depth":406,"text":1179},{"id":1199,"depth":406,"text":1200},{"id":1219,"depth":406,"text":1220},{"id":1242,"depth":406,"text":1243},{"id":1287,"depth":406,"text":1288},{"id":1335,"depth":406,"text":1336},{"id":1355,"depth":406,"text":1356},{"id":1379,"depth":406,"text":1380},{"id":1399,"depth":406,"text":1400},{"id":1462,"depth":406,"text":1463},{"id":1572,"depth":406,"text":1573},{"id":1675,"depth":406,"text":1676},{"id":1752,"depth":406,"text":1753},{"id":1783,"depth":406,"text":1784},{"id":2129,"depth":406,"text":2130},{"id":2224,"depth":406,"text":2225},{"id":2276,"depth":406,"text":2277},"All Vue components exported through window.engine.components.","md",{"plugin":2340,"category":2341,"page":2342},"global_essentials","builtins","components_export","\u002Fdocs\u002Fglobal_essentials\u002Fbuiltins\u002Fcomponents_export",{"title":5,"description":2337},"docs\u002Fglobal_essentials\u002Fbuiltins\u002Fcomponents_export","kBug8OJZ6xgkRezI9oVOonJBrPFHi8YLla78kS-QMFw",1779582262436]