[{"data":1,"prerenderedAt":5780},["ShallowReactive",2],{"navigation_docs":3,"-engineering-platform-use-api":348,"-engineering-platform-use-api-surround":5775},[4,8,68,98,216,245,259,280,344],{"title":5,"path":6,"stem":7},"Introduction","\u002Fintroduction","0.introduction",{"title":9,"icon":10,"path":11,"stem":12,"children":13,"page":63},"Company","i-lucide-building-2","\u002Fcompany","1.company",[14,18,22,26,30,34,38,42,46,50,64],{"title":15,"path":16,"stem":17},"About","\u002Fcompany\u002Fabout","1.company\u002F0.about",{"title":19,"path":20,"stem":21},"Values","\u002Fcompany\u002Fvalues","1.company\u002F1.values",{"title":23,"path":24,"stem":25},"Communication","\u002Fcompany\u002Fcommunication","1.company\u002Fcommunication",{"title":27,"path":28,"stem":29},"Competition","\u002Fcompany\u002Fcompetition","1.company\u002Fcompetition",{"title":31,"path":32,"stem":33},"Hybrid Working","\u002Fcompany\u002Fhybrid-working","1.company\u002Fhybrid-working",{"title":35,"path":36,"stem":37},"Manchester Office","\u002Fcompany\u002Foffice","1.company\u002Foffice",{"title":39,"path":40,"stem":41},"Operations","\u002Fcompany\u002Foperations","1.company\u002Foperations",{"title":43,"path":44,"stem":45},"Policies","\u002Fcompany\u002Fpolicies","1.company\u002Fpolicies",{"title":47,"path":48,"stem":49},"Product Strategy","\u002Fcompany\u002Fproduct-strategy","1.company\u002Fproduct-strategy",{"title":51,"path":52,"stem":53,"children":54,"page":63},"Products","\u002Fcompany\u002Fproducts","1.company\u002Fproducts",[55,59],{"title":56,"path":57,"stem":58},"Capability Exchange","\u002Fcompany\u002Fproducts\u002Fcapability-exchange","1.company\u002Fproducts\u002Fcapability-exchange",{"title":60,"path":61,"stem":62},"ESProfiler Platform","\u002Fcompany\u002Fproducts\u002Fesprofiler","1.company\u002Fproducts\u002Fesprofiler",false,{"title":65,"path":66,"stem":67},"Security","\u002Fcompany\u002Fsecurity","1.company\u002Fsecurity",{"title":69,"icon":70,"path":71,"stem":72,"children":73,"page":63},"People Ops","i-lucide-users","\u002Fpeople-ops","2.people-ops",[74,78,82,86,90,94],{"title":75,"path":76,"stem":77},"Compensation","\u002Fpeople-ops\u002Fcompensation","2.people-ops\u002Fcompensation",{"title":79,"path":80,"stem":81},"Education","\u002Fpeople-ops\u002Feducation","2.people-ops\u002Feducation",{"title":83,"path":84,"stem":85},"Expenses","\u002Fpeople-ops\u002Fexpenses","2.people-ops\u002Fexpenses",{"title":87,"path":88,"stem":89},"Holiday & Leave","\u002Fpeople-ops\u002Fleave","2.people-ops\u002Fleave",{"title":91,"path":92,"stem":93},"Onboarding","\u002Fpeople-ops\u002Fonboarding","2.people-ops\u002Fonboarding",{"title":95,"path":96,"stem":97},"Recruitment","\u002Fpeople-ops\u002Frecruitment","2.people-ops\u002Frecruitment",{"title":99,"icon":100,"path":101,"stem":102,"children":103,"page":63},"Engineering","i-lucide-rocket","\u002Fengineering","3.engineering",[104,147,151,171,192,196,204,208,212],{"title":105,"path":106,"stem":107,"children":108,"page":63},"Contributing","\u002Fengineering\u002Fcontributing","3.engineering\u002Fcontributing",[109,113,117,121,125,138],{"title":110,"path":111,"stem":112},"Development Setup","\u002Fengineering\u002Fcontributing\u002Fdevelopment-setup","3.engineering\u002Fcontributing\u002F1.development-setup",{"title":114,"path":115,"stem":116},"Engineering Operations","\u002Fengineering\u002Fcontributing\u002Fengineering-operations","3.engineering\u002Fcontributing\u002F2.engineering-operations",{"title":118,"path":119,"stem":120},"Documentation","\u002Fengineering\u002Fcontributing\u002Fdocumentation","3.engineering\u002Fcontributing\u002F3.documentation",{"title":122,"path":123,"stem":124},"Agentic Coding","\u002Fengineering\u002Fcontributing\u002Fagentic-coding","3.engineering\u002Fcontributing\u002Fagentic-coding",{"title":126,"path":127,"stem":128,"children":129,"page":63},"Back End","\u002Fengineering\u002Fcontributing\u002Fback-end","3.engineering\u002Fcontributing\u002Fback-end",[130,134],{"title":131,"path":132,"stem":133},"API Guidelines","\u002Fengineering\u002Fcontributing\u002Fback-end\u002Fapi-guidelines","3.engineering\u002Fcontributing\u002Fback-end\u002Fapi-guidelines",{"title":135,"path":136,"stem":137},"LLM Prompts & Langfuse Integration","\u002Fengineering\u002Fcontributing\u002Fback-end\u002Fllm-prompts","3.engineering\u002Fcontributing\u002Fback-end\u002Fllm-prompts",{"title":139,"path":140,"stem":141,"children":142,"page":63},"Front End","\u002Fengineering\u002Fcontributing\u002Ffront-end","3.engineering\u002Fcontributing\u002Ffront-end",[143],{"title":144,"path":145,"stem":146},"Testing","\u002Fengineering\u002Fcontributing\u002Ffront-end\u002Ftesting","3.engineering\u002Fcontributing\u002Ffront-end\u002Ftesting",{"title":148,"path":149,"stem":150},"Production Database","\u002Fengineering\u002Fdatabase-connection","3.engineering\u002Fdatabase-connection",{"title":152,"path":153,"stem":154,"children":155},"Deployment","\u002Fengineering\u002Fdeployment","3.engineering\u002Fdeployment",[156,159,163,167],{"title":56,"path":157,"stem":158},"\u002Fengineering\u002Fdeployment\u002Fcapability-exchange","3.engineering\u002Fdeployment\u002Fcapability-exchange",{"title":160,"path":161,"stem":162},"Langfuse Deployment","\u002Fengineering\u002Fdeployment\u002Fecs-langfuse-deployment","3.engineering\u002Fdeployment\u002Fecs-langfuse-deployment",{"title":164,"path":165,"stem":166},"ESP Platform Configuration","\u002Fengineering\u002Fdeployment\u002Fesp-platform-configuration","3.engineering\u002Fdeployment\u002Fesp-platform-configuration",{"title":168,"path":169,"stem":170},"Platform","\u002Fengineering\u002Fdeployment\u002Fplatform","3.engineering\u002Fdeployment\u002Fplatform",{"title":172,"path":173,"stem":174,"children":175,"page":63},"Github","\u002Fengineering\u002Fgithub","3.engineering\u002Fgithub",[176,180,184,188],{"title":177,"path":178,"stem":179},"Packages","\u002Fengineering\u002Fgithub\u002Fpackages","3.engineering\u002Fgithub\u002Fpackages",{"title":181,"path":182,"stem":183},"Personal Access Token","\u002Fengineering\u002Fgithub\u002Fpersonal-access-token","3.engineering\u002Fgithub\u002Fpersonal-access-token",{"title":185,"path":186,"stem":187},"Troubleshooting","\u002Fengineering\u002Fgithub\u002Ftroubleshooting","3.engineering\u002Fgithub\u002Ftroubleshooting",{"title":189,"path":190,"stem":191},"Workflows","\u002Fengineering\u002Fgithub\u002Fworkflows","3.engineering\u002Fgithub\u002Fworkflows",{"title":193,"path":194,"stem":195},"Platform Ops","\u002Fengineering\u002Fplatform-ops","3.engineering\u002Fplatform-ops",{"title":168,"path":197,"stem":198,"children":199,"page":63},"\u002Fengineering\u002Fplatform","3.engineering\u002Fplatform",[200],{"title":201,"path":202,"stem":203},"useAPI","\u002Fengineering\u002Fplatform\u002Fuse-api","3.engineering\u002Fplatform\u002Fuse-api",{"title":205,"path":206,"stem":207},"Project Management","\u002Fengineering\u002Fproject-management","3.engineering\u002Fproject-management",{"title":209,"path":210,"stem":211},"Releases","\u002Fengineering\u002Frelease","3.engineering\u002Frelease",{"title":213,"path":214,"stem":215},"Tools","\u002Fengineering\u002Ftools","3.engineering\u002Ftools",{"title":217,"icon":218,"path":219,"stem":220,"children":221,"page":63},"Design","i-lucide-palette","\u002Fdesign","4.design",[222,226,230,234,238,241],{"title":223,"path":224,"stem":225},"Design Thinking","\u002Fdesign\u002Fdesign-thinking","4.design\u002F1.design-thinking",{"title":227,"path":228,"stem":229},"Figma","\u002Fdesign\u002Ffigma-structure","4.design\u002F2.figma-structure",{"title":231,"path":232,"stem":233},"Design & Development","\u002Fdesign\u002Fdesign-and-development","4.design\u002F3.design-and-development",{"title":235,"path":236,"stem":237},"Branding","\u002Fdesign\u002Fbranding","4.design\u002F4.branding",{"title":213,"path":239,"stem":240},"\u002Fdesign\u002Ftools","4.design\u002F5.tools",{"title":242,"path":243,"stem":244},"Customer Success","\u002Fdesign\u002Fworking-with-customers","4.design\u002F6.working-with-customers",{"title":246,"icon":247,"path":248,"stem":249,"children":250,"page":63},"Sales","i-lucide-dollar-sign","\u002Fsales","4.sales",[251,255],{"title":252,"path":253,"stem":254},"Customer Onboarding","\u002Fsales\u002Fonboarding","4.sales\u002Fonboarding",{"title":256,"path":257,"stem":258},"Sales Tools","\u002Fsales\u002Ftools","4.sales\u002Ftools",{"title":260,"icon":261,"path":262,"stem":263,"children":264,"page":63},"Marketing","i-lucide-book-image","\u002Fmarketing","5.marketing",[265,269,273,276],{"title":266,"path":267,"stem":268},"Content","\u002Fmarketing\u002Fcontent","5.marketing\u002Fcontent",{"title":270,"path":271,"stem":272},"Messaging","\u002Fmarketing\u002Fmessaging","5.marketing\u002Fmessaging",{"title":213,"path":274,"stem":275},"\u002Fmarketing\u002Ftools","5.marketing\u002Ftools",{"title":277,"path":278,"stem":279},"Website","\u002Fmarketing\u002Fwebsite","5.marketing\u002Fwebsite",{"title":281,"icon":282,"path":283,"stem":284,"children":285,"page":63},"AI & Data Ops","i-lucide-database","\u002Fdata-ops","6.data-ops",[286,294,298,323,340],{"title":56,"path":287,"stem":288,"children":289,"page":63},"\u002Fdata-ops\u002Fcapability-exchange","6.data-ops\u002FCapability Exchange",[290],{"title":291,"path":292,"stem":293},"Leaderboard Calculation","\u002Fdata-ops\u002Fcapability-exchange\u002Fleaderboard-calculation","6.data-ops\u002FCapability Exchange\u002Fleaderboard-calculation",{"title":295,"path":296,"stem":297},"Account Portal (CAS)","\u002Fdata-ops\u002Faccount-portal","6.data-ops\u002Faccount-portal",{"title":299,"path":300,"stem":301,"children":302,"page":63},"Data Management","\u002Fdata-ops\u002Fdata-management","6.data-ops\u002Fdata-management",[303,307,311,315,319],{"title":304,"path":305,"stem":306},"Adding Products","\u002Fdata-ops\u002Fdata-management\u002Fadding-products","6.data-ops\u002Fdata-management\u002Fadding-products",{"title":308,"path":309,"stem":310},"Adding Vendors","\u002Fdata-ops\u002Fdata-management\u002Fadding-vendors","6.data-ops\u002Fdata-management\u002Fadding-vendors",{"title":312,"path":313,"stem":314},"Framework Mapping","\u002Fdata-ops\u002Fdata-management\u002Fframework-mapping","6.data-ops\u002Fdata-management\u002Fframework-mapping",{"title":316,"path":317,"stem":318},"Refreshing Vendors","\u002Fdata-ops\u002Fdata-management\u002Frefreshing-vendors","6.data-ops\u002Fdata-management\u002Frefreshing-vendors",{"title":320,"path":321,"stem":322},"Reviewing Draft Vendors","\u002Fdata-ops\u002Fdata-management\u002Freviewing-draft-vendors","6.data-ops\u002Fdata-management\u002Freviewing-draft-vendors",{"title":324,"path":325,"stem":326,"children":327,"page":63},"LLM Ops","\u002Fdata-ops\u002Fllm-ops","6.data-ops\u002Fllm-ops",[328,332,336],{"title":329,"path":330,"stem":331},"Agents","\u002Fdata-ops\u002Fllm-ops\u002Fagents","6.data-ops\u002Fllm-ops\u002F1.agents",{"title":333,"path":334,"stem":335},"ESPi Architecture & Query Flow","\u002Fdata-ops\u002Fllm-ops\u002Fespi-architecture","6.data-ops\u002Fllm-ops\u002F2.espi-architecture",{"title":337,"path":338,"stem":339},"Evaluating Agents","\u002Fdata-ops\u002Fllm-ops\u002Fevaluations","6.data-ops\u002Fllm-ops\u002F3.evaluations",{"title":341,"path":342,"stem":343},"Message Queues","\u002Fdata-ops\u002Fmessage-queues","6.data-ops\u002Fmessage-queues",{"title":345,"path":346,"stem":347},"Glossary","\u002Fglossary","glossary",{"id":349,"title":201,"body":350,"description":5769,"extension":5770,"links":5771,"meta":5772,"navigation":711,"path":202,"seo":5773,"stem":203,"__hash__":5774},"docs\u002F3.engineering\u002Fplatform\u002Fuse-api.md",{"type":351,"value":352,"toc":5716},"minimark",[353,358,370,377,401,406,479,482,490,500,511,515,522,636,640,951,955,1133,1146,1157,1162,1189,1193,1253,1257,1286,1290,1844,1846,1853,1860,1883,1918,1920,1929,1935,1941,1946,2078,2085,2094,2107,2233,2259,2263,2268,2321,2325,2464,2588,2594,2605,2697,2704,2778,2780,2789,2792,2797,2803,2917,2921,2928,2966,2970,2977,3069,3073,3140,3146,3151,3254,3261,3325,3327,3334,3338,3341,3589,3593,3596,3858,3865,3877,3958,3961,3968,3974,4173,4179,4188,4402,4410,4419,4471,4475,4578,4588,4590,4594,4605,4791,4793,4797,4801,4810,4813,4831,4935,4938,4947,4956,4968,5020,5024,5039,5043,5092,5094,5098,5102,5610,5614,5712],[354,355,357],"h2",{"id":356},"overview","Overview",[359,360,361,362,365,366,369],"p",{},"The ",[363,364,201],"code",{}," composable is the primary mechanism for executing HTTP requests and managing API state in the ES-Profiler platform frontend (",[363,367,368],{},"platform-frontend",").",[359,371,372,373,376],{},"It replaces the legacy ",[363,374,375],{},"BaseApi"," utility class with a fully reactive, TypeScript-safe Vue composable.",[378,379,380,382,383,386,387,390,391,386,394,386,397,400],"note",{},[363,381,201],{}," integrates directly with Vue 3 reactivity (",[363,384,385],{},"shallowRef",", ",[363,388,389],{},"reactive","), Axios, reactive Data and Query models (",[363,392,393],{},"BaseDataModel",[363,395,396],{},"BaseListModel",[363,398,399],{},"BaseQuery","), and authentication handlers.",[402,403,405],"h3",{"id":404},"key-features","Key Features",[407,408,409,417,443,457,467,473],"ul",{},[410,411,412,416],"li",{},[413,414,415],"strong",{},"Automatic Type Safety",": TypeScript autocomplete and type checking for registered endpoints via Vite type generation.",[410,418,419,422,423,386,426,386,429,386,432,386,435,438,439,442],{},[413,420,421],{},"Reactive State",": Exposes ",[363,424,425],{},"data",[363,427,428],{},"query",[363,430,431],{},"loading",[363,433,434],{},"loaded",[363,436,437],{},"success",", and ",[363,440,441],{},"error"," state.",[410,444,445,448,449,452,453,456],{},[413,446,447],{},"Dynamic Path Interpolation",": Automatically substitutes URL path parameters like ",[363,450,451],{},":productId"," or ",[363,454,455],{},":findingId",".",[410,458,459,462,463,466],{},[413,460,461],{},"Request Deduplication",": Prevents duplicate ",[363,464,465],{},"GET"," requests with identical destination parameters.",[410,468,469,472],{},[413,470,471],{},"Auto Abort",": Automatically cancels in-flight HTTP requests when re-executed on the same composable instance.",[410,474,475,478],{},[413,476,477],{},"Built-in Authorization & Error Handling",": Manages silent token authentication, automatic 401 signouts, and interactive 403 Permission Denied modal dialogs.",[480,481],"hr",{},[354,483,485,486,489],{"id":484},"defining-api-endpoints-defineapi","Defining API Endpoints (",[363,487,488],{},"defineAPI",")",[359,491,492,493,496,497,499],{},"API endpoint definitions are structured modularly in ",[363,494,495],{},"src\u002Fapi\u002F**\u002F*.ts"," within the ",[363,498,368],{}," repository.",[359,501,502,503,506,507,510],{},"Each module exports a default ",[363,504,505],{},"APIConfig"," object defining the ",[363,508,509],{},"baseURL"," and endpoint registry entries.",[402,512,514],{"id":513},"namespace-naming-convention","Namespace Naming Convention",[359,516,517,518,521],{},"Endpoint namespaces are automatically derived from the file path relative to ",[363,519,520],{},"src\u002Fapi\u002F",":",[523,524,525,544],"table",{},[526,527,528],"thead",{},[529,530,531,535,538,541],"tr",{},[532,533,534],"th",{},"File Path",[532,536,537],{},"Generated Namespace",[532,539,540],{},"Endpoint Key",[532,542,543],{},"Full Endpoint String",[545,546,547,570,592,614],"tbody",{},[529,548,549,555,560,565],{},[550,551,552],"td",{},[363,553,554],{},"src\u002Fapi\u002Ffeature.ts",[550,556,557],{},[363,558,559],{},"feature",[550,561,562],{},[363,563,564],{},"internal.create",[550,566,567],{},[363,568,569],{},"'feature.internal.create'",[529,571,572,577,582,587],{},[550,573,574],{},[363,575,576],{},"src\u002Fapi\u002Fmeta.ts",[550,578,579],{},[363,580,581],{},"meta",[550,583,584],{},[363,585,586],{},"tags",[550,588,589],{},[363,590,591],{},"'meta.tags'",[529,593,594,599,604,609],{},[550,595,596],{},[363,597,598],{},"src\u002Fapi\u002Finsights\u002Ffindings.ts",[550,600,601],{},[363,602,603],{},"insights.findings",[550,605,606],{},[363,607,608],{},"delete",[550,610,611],{},[363,612,613],{},"'insights.findings.delete'",[529,615,616,621,626,631],{},[550,617,618],{},[363,619,620],{},"src\u002Fapi\u002Fhub\u002Finterviews.ts",[550,622,623],{},[363,624,625],{},"hub.interviews",[550,627,628],{},[363,629,630],{},"list",[550,632,633],{},[363,634,635],{},"'hub.interviews.list'",[402,637,639],{"id":638},"example-api-module","Example API Module",[641,642,647],"pre",{"className":643,"code":644,"filename":554,"language":645,"meta":646,"style":646},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { useConfig } from '@\u002Fcomposables\u002FuseConfig.ts'\nimport type { APIConfig } from '@\u002Ftypes\u002Fapi'\n\nconst config: APIConfig = {\n  baseURL: useConfig('api.esp'),\n  endpoints: {\n    'internal.create': {\n      path: '\u002Fv1\u002Finventory\u002Finternal\u002Fproducts\u002F:productId\u002Ffeatures',\n      method: 'post'\n    },\n    'internal.update': {\n      path: '\u002Fv1\u002Finventory\u002Finternal\u002Fproducts\u002F:productId\u002Ffeatures\u002F:featureId',\n      method: 'patch'\n    },\n    'internal.delete': {\n      path: '\u002Fv1\u002Finventory\u002Finternal\u002Fproducts\u002Ffeatures\u002F:featureId',\n      method: 'delete'\n    }\n  }\n}\n\nexport default config\n","typescript","",[363,648,649,682,706,713,734,762,772,786,803,818,824,838,854,868,873,887,903,916,922,928,934,939],{"__ignoreMap":646},[650,651,654,658,662,666,669,672,675,679],"span",{"class":652,"line":653},"line",1,[650,655,657],{"class":656},"s7zQu","import",[650,659,661],{"class":660},"sMK4o"," {",[650,663,665],{"class":664},"sTEyZ"," useConfig",[650,667,668],{"class":660}," }",[650,670,671],{"class":656}," from",[650,673,674],{"class":660}," '",[650,676,678],{"class":677},"sfazB","@\u002Fcomposables\u002FuseConfig.ts",[650,680,681],{"class":660},"'\n",[650,683,685,687,690,692,695,697,699,701,704],{"class":652,"line":684},2,[650,686,657],{"class":656},[650,688,689],{"class":656}," type",[650,691,661],{"class":660},[650,693,694],{"class":664}," APIConfig",[650,696,668],{"class":660},[650,698,671],{"class":656},[650,700,674],{"class":660},[650,702,703],{"class":677},"@\u002Ftypes\u002Fapi",[650,705,681],{"class":660},[650,707,709],{"class":652,"line":708},3,[650,710,712],{"emptyLinePlaceholder":711},true,"\n",[650,714,716,720,723,725,728,731],{"class":652,"line":715},4,[650,717,719],{"class":718},"spNyl","const",[650,721,722],{"class":664}," config",[650,724,521],{"class":660},[650,726,694],{"class":727},"sBMFI",[650,729,730],{"class":660}," =",[650,732,733],{"class":660}," {\n",[650,735,737,741,743,746,749,752,755,757,759],{"class":652,"line":736},5,[650,738,740],{"class":739},"swJcz","  baseURL",[650,742,521],{"class":660},[650,744,665],{"class":745},"s2Zo4",[650,747,748],{"class":664},"(",[650,750,751],{"class":660},"'",[650,753,754],{"class":677},"api.esp",[650,756,751],{"class":660},[650,758,489],{"class":664},[650,760,761],{"class":660},",\n",[650,763,765,768,770],{"class":652,"line":764},6,[650,766,767],{"class":739},"  endpoints",[650,769,521],{"class":660},[650,771,733],{"class":660},[650,773,775,778,780,782,784],{"class":652,"line":774},7,[650,776,777],{"class":660},"    '",[650,779,564],{"class":739},[650,781,751],{"class":660},[650,783,521],{"class":660},[650,785,733],{"class":660},[650,787,789,792,794,796,799,801],{"class":652,"line":788},8,[650,790,791],{"class":739},"      path",[650,793,521],{"class":660},[650,795,674],{"class":660},[650,797,798],{"class":677},"\u002Fv1\u002Finventory\u002Finternal\u002Fproducts\u002F:productId\u002Ffeatures",[650,800,751],{"class":660},[650,802,761],{"class":660},[650,804,806,809,811,813,816],{"class":652,"line":805},9,[650,807,808],{"class":739},"      method",[650,810,521],{"class":660},[650,812,674],{"class":660},[650,814,815],{"class":677},"post",[650,817,681],{"class":660},[650,819,821],{"class":652,"line":820},10,[650,822,823],{"class":660},"    },\n",[650,825,827,829,832,834,836],{"class":652,"line":826},11,[650,828,777],{"class":660},[650,830,831],{"class":739},"internal.update",[650,833,751],{"class":660},[650,835,521],{"class":660},[650,837,733],{"class":660},[650,839,841,843,845,847,850,852],{"class":652,"line":840},12,[650,842,791],{"class":739},[650,844,521],{"class":660},[650,846,674],{"class":660},[650,848,849],{"class":677},"\u002Fv1\u002Finventory\u002Finternal\u002Fproducts\u002F:productId\u002Ffeatures\u002F:featureId",[650,851,751],{"class":660},[650,853,761],{"class":660},[650,855,857,859,861,863,866],{"class":652,"line":856},13,[650,858,808],{"class":739},[650,860,521],{"class":660},[650,862,674],{"class":660},[650,864,865],{"class":677},"patch",[650,867,681],{"class":660},[650,869,871],{"class":652,"line":870},14,[650,872,823],{"class":660},[650,874,876,878,881,883,885],{"class":652,"line":875},15,[650,877,777],{"class":660},[650,879,880],{"class":739},"internal.delete",[650,882,751],{"class":660},[650,884,521],{"class":660},[650,886,733],{"class":660},[650,888,890,892,894,896,899,901],{"class":652,"line":889},16,[650,891,791],{"class":739},[650,893,521],{"class":660},[650,895,674],{"class":660},[650,897,898],{"class":677},"\u002Fv1\u002Finventory\u002Finternal\u002Fproducts\u002Ffeatures\u002F:featureId",[650,900,751],{"class":660},[650,902,761],{"class":660},[650,904,906,908,910,912,914],{"class":652,"line":905},17,[650,907,808],{"class":739},[650,909,521],{"class":660},[650,911,674],{"class":660},[650,913,608],{"class":677},[650,915,681],{"class":660},[650,917,919],{"class":652,"line":918},18,[650,920,921],{"class":660},"    }\n",[650,923,925],{"class":652,"line":924},19,[650,926,927],{"class":660},"  }\n",[650,929,931],{"class":652,"line":930},20,[650,932,933],{"class":660},"}\n",[650,935,937],{"class":652,"line":936},21,[650,938,712],{"emptyLinePlaceholder":711},[650,940,942,945,948],{"class":652,"line":941},22,[650,943,944],{"class":656},"export",[650,946,947],{"class":656}," default",[650,949,950],{"class":664}," config\n",[402,952,954],{"id":953},"configuration-options","Configuration Options",[523,956,957,973],{},[526,958,959],{},[529,960,961,964,967,970],{},[532,962,963],{},"Option",[532,965,966],{},"Type",[532,968,969],{},"Default",[532,971,972],{},"Description",[545,974,975,998,1031,1060,1081,1108],{},[529,976,977,982,987,992],{},[550,978,979],{},[363,980,981],{},"path",[550,983,984],{},[363,985,986],{},"string",[550,988,989],{},[413,990,991],{},"(Required)",[550,993,994,995,369],{},"The endpoint URL template. Can include path parameters prefixed with a colon (e.g. ",[363,996,997],{},":id",[529,999,1000,1005,1009,1014],{},[550,1001,1002],{},[363,1003,1004],{},"method",[550,1006,1007],{},[363,1008,986],{},[550,1010,1011],{},[363,1012,1013],{},"'get'",[550,1015,1016,1017,386,1019,386,1022,386,1025,386,1028,369],{},"HTTP method (",[363,1018,1013],{},[363,1020,1021],{},"'post'",[363,1023,1024],{},"'put'",[363,1026,1027],{},"'patch'",[363,1029,1030],{},"'delete'",[529,1032,1033,1038,1043,1048],{},[550,1034,1035],{},[363,1036,1037],{},"model",[550,1039,1040],{},[363,1041,1042],{},"Class | Object | null",[550,1044,1045],{},[363,1046,1047],{},"undefined",[550,1049,1050,1051,1053,1054,1056,1057,369],{},"Data model class (",[363,1052,393],{}," subclass, ",[363,1055,396],{},", array, plain object, or ",[363,1058,1059],{},"null",[529,1061,1062,1066,1071,1075],{},[550,1063,1064],{},[363,1065,428],{},[550,1067,1068],{},[363,1069,1070],{},"Class | Object",[550,1072,1073],{},[363,1074,1047],{},[550,1076,1077,1078,1080],{},"Query model class (",[363,1079,399],{}," subclass or plain object) for managing search and filter parameters.",[529,1082,1083,1088,1093,1096],{},[550,1084,1085],{},[363,1086,1087],{},"multiple",[550,1089,1090],{},[363,1091,1092],{},"boolean",[550,1094,1095],{},"Auto-detected",[550,1097,1098,1099,1102,1103,1105,1106,456],{},"Set to ",[363,1100,1101],{},"true"," if response represents an array or collection. Automatically inferred if ",[363,1104,1037],{}," is an Array or ",[363,1107,396],{},[529,1109,1110,1115,1119,1123],{},[550,1111,1112],{},[363,1113,1114],{},"authentication",[550,1116,1117],{},[363,1118,1092],{},[550,1120,1121],{},[363,1122,1101],{},[550,1124,1125,1126,1128,1129,1132],{},"When ",[363,1127,1101],{},", automatically waits for user authentication and injects the ",[363,1130,1131],{},"Authorization"," Bearer token header.",[402,1134,1136,1137,1139,1140,1142,1143,1145],{"id":1135},"advanced-apiconfig-model-and-query-patterns","Advanced ",[363,1138,505],{},": ",[363,1141,1037],{}," and ",[363,1144,428],{}," Patterns",[359,1147,1148,1149,1142,1151,1153,1154,1156],{},"When defining an API module, ",[363,1150,1037],{},[363,1152,428],{}," options can be declared at the module root (",[363,1155,505],{}," level) or overridden per endpoint.",[1158,1159,1161],"h4",{"id":1160},"_1-module-level-defaults-vs-endpoint-overrides","1. Module-Level Defaults vs. Endpoint Overrides",[407,1163,1164,1178],{},[410,1165,1166,1169,1170,452,1172,1174,1175,1177],{},[413,1167,1168],{},"Module-Level Default",": Declaring ",[363,1171,1037],{},[363,1173,428],{}," at the root of ",[363,1176,505],{}," applies that configuration as a fallback for all endpoints in the module.",[410,1179,1180,1183,1184,452,1186,1188],{},[413,1181,1182],{},"Endpoint-Level Override",": An endpoint can specify its own ",[363,1185,1037],{},[363,1187,428],{}," to override the module-wide default.",[1158,1190,1192],{"id":1191},"_2-model-configuration-options","2. Model Configuration Options",[407,1194,1195,1214,1234,1243],{},[410,1196,1197,1202,1203,1206,1207,1209,1210,1213],{},[413,1198,1199,1201],{},[363,1200,393],{}," Subclass"," (",[363,1204,1205],{},"model: TaskHubInterviewModel","): ",[363,1208,201],{}," instantiates and calls ",[363,1211,1212],{},"setup()"," on the class.",[410,1215,1216,1202,1221,452,1224,1227,1228,1231,1232,456],{},[413,1217,1218,1219],{},"Array \u002F ",[363,1220,396],{},[363,1222,1223],{},"model: [TaskHubInterviewModel]",[363,1225,1226],{},"ProductListModel","): Automatically flags ",[363,1229,1230],{},"multiple = true"," and wraps items in a ",[363,1233,396],{},[410,1235,1236,1202,1239,1242],{},[413,1237,1238],{},"Plain Object Literal",[363,1240,1241],{},"model: { url: '' }","): For lightweight key-value payloads that do not require full model features.",[410,1244,1245,1202,1249,1252],{},[413,1246,1247],{},[363,1248,1059],{},[363,1250,1251],{},"model: null","): Explicitly specifies that an endpoint (e.g. DELETE or bodyless PATCH) does not send or expect a model body.",[1158,1254,1256],{"id":1255},"_3-query-configuration-options","3. Query Configuration Options",[407,1258,1259,1271],{},[410,1260,1261,1202,1265,1268,1269,456],{},[413,1262,1263,1201],{},[363,1264,399],{},[363,1266,1267],{},"query: TaskHubInterviewQuery","): Automatically instantiated and initialized by ",[363,1270,201],{},[410,1272,1273,1202,1275,1278,1279,1281,1282,1285],{},[413,1274,1238],{},[363,1276,1277],{},"query: { term: '', filter: 'active' }","): Automatically wrapped by ",[363,1280,201],{}," into a ",[363,1283,1284],{},"WrappedQuery"," instance.",[1158,1287,1289],{"id":1288},"real-world-api-module-example","Real-World API Module Example",[641,1291,1293],{"className":643,"code":1292,"filename":620,"language":645,"meta":646,"style":646},"import { useConfig } from '@\u002Fcomposables\u002FuseConfig.ts'\nimport TaskHubInterviewQuery from '@\u002Fmodels\u002FApi\u002FQuery\u002FTaskHubInterviewQuery.ts'\nimport { TaskHubInterviewModel } from '@\u002Fmodels\u002FData\u002FTaskHub\u002FTaskHubInterviewModel.ts'\nimport { TaskHubInterviewStatsModel } from '@\u002Fmodels\u002FData\u002FTaskHub\u002FTaskHubInterviewStatsModel.ts'\nimport type { APIConfig } from '@\u002Ftypes\u002Fapi'\n\nconst config: APIConfig = {\n  baseURL: useConfig('api.esp'),\n\n  \u002F\u002F Module-wide default model: inherited by 'list' and 'show' below\n  model: TaskHubInterviewModel,\n\n  endpoints: {\n    \u002F\u002F 1. Uses module-level TaskHubInterviewModel + query class + multiple collection flag\n    list: {\n      path: '\u002Fv1\u002Fuser-tasks',\n      multiple: true,\n      query: TaskHubInterviewQuery\n    },\n\n    \u002F\u002F 2. Automatically inherits module-level TaskHubInterviewModel\n    show: {\n      path: '\u002Fv1\u002Fuser-tasks\u002F:interviewId'\n    },\n\n    \u002F\u002F 3. Overrides model with a lightweight plain object literal\n    link: {\n      path: '\u002Fv1\u002Fuser-tasks\u002F:interviewId\u002Furl',\n      model: { url: '' }\n    },\n\n    \u002F\u002F 4. Overrides model with a specific BaseDataModel class + custom query model\n    stats: {\n      path: '\u002Fv1\u002Fuser-tasks\u002Fstats',\n      model: TaskHubInterviewStatsModel,\n      query: TaskHubInterviewQuery\n    },\n\n    \u002F\u002F 5. Overrides model with null for actions without a body payload\n    'group.delete': {\n      path: '\u002Fv1\u002Fuser-tasks\u002Fgroups\u002F:groupId',\n      method: 'delete',\n      model: null\n    },\n\n    \u002F\u002F 6. Overrides model with null for action patch\n    'group.reminder': {\n      path: '\u002Fv1\u002Fuser-tasks\u002Fgroups\u002F:groupId\u002Femails',\n      method: 'patch',\n      model: null\n    }\n  }\n}\n\nexport default config\n",[363,1294,1295,1313,1330,1350,1370,1390,1394,1408,1428,1432,1438,1449,1453,1461,1466,1475,1490,1503,1513,1517,1521,1526,1535,1549,1554,1559,1565,1575,1591,1612,1617,1622,1628,1638,1654,1665,1674,1679,1684,1690,1704,1720,1735,1745,1750,1755,1761,1775,1791,1806,1815,1820,1825,1830,1835],{"__ignoreMap":646},[650,1296,1297,1299,1301,1303,1305,1307,1309,1311],{"class":652,"line":653},[650,1298,657],{"class":656},[650,1300,661],{"class":660},[650,1302,665],{"class":664},[650,1304,668],{"class":660},[650,1306,671],{"class":656},[650,1308,674],{"class":660},[650,1310,678],{"class":677},[650,1312,681],{"class":660},[650,1314,1315,1317,1320,1323,1325,1328],{"class":652,"line":684},[650,1316,657],{"class":656},[650,1318,1319],{"class":664}," TaskHubInterviewQuery ",[650,1321,1322],{"class":656},"from",[650,1324,674],{"class":660},[650,1326,1327],{"class":677},"@\u002Fmodels\u002FApi\u002FQuery\u002FTaskHubInterviewQuery.ts",[650,1329,681],{"class":660},[650,1331,1332,1334,1336,1339,1341,1343,1345,1348],{"class":652,"line":708},[650,1333,657],{"class":656},[650,1335,661],{"class":660},[650,1337,1338],{"class":664}," TaskHubInterviewModel",[650,1340,668],{"class":660},[650,1342,671],{"class":656},[650,1344,674],{"class":660},[650,1346,1347],{"class":677},"@\u002Fmodels\u002FData\u002FTaskHub\u002FTaskHubInterviewModel.ts",[650,1349,681],{"class":660},[650,1351,1352,1354,1356,1359,1361,1363,1365,1368],{"class":652,"line":715},[650,1353,657],{"class":656},[650,1355,661],{"class":660},[650,1357,1358],{"class":664}," TaskHubInterviewStatsModel",[650,1360,668],{"class":660},[650,1362,671],{"class":656},[650,1364,674],{"class":660},[650,1366,1367],{"class":677},"@\u002Fmodels\u002FData\u002FTaskHub\u002FTaskHubInterviewStatsModel.ts",[650,1369,681],{"class":660},[650,1371,1372,1374,1376,1378,1380,1382,1384,1386,1388],{"class":652,"line":736},[650,1373,657],{"class":656},[650,1375,689],{"class":656},[650,1377,661],{"class":660},[650,1379,694],{"class":664},[650,1381,668],{"class":660},[650,1383,671],{"class":656},[650,1385,674],{"class":660},[650,1387,703],{"class":677},[650,1389,681],{"class":660},[650,1391,1392],{"class":652,"line":764},[650,1393,712],{"emptyLinePlaceholder":711},[650,1395,1396,1398,1400,1402,1404,1406],{"class":652,"line":774},[650,1397,719],{"class":718},[650,1399,722],{"class":664},[650,1401,521],{"class":660},[650,1403,694],{"class":727},[650,1405,730],{"class":660},[650,1407,733],{"class":660},[650,1409,1410,1412,1414,1416,1418,1420,1422,1424,1426],{"class":652,"line":788},[650,1411,740],{"class":739},[650,1413,521],{"class":660},[650,1415,665],{"class":745},[650,1417,748],{"class":664},[650,1419,751],{"class":660},[650,1421,754],{"class":677},[650,1423,751],{"class":660},[650,1425,489],{"class":664},[650,1427,761],{"class":660},[650,1429,1430],{"class":652,"line":805},[650,1431,712],{"emptyLinePlaceholder":711},[650,1433,1434],{"class":652,"line":820},[650,1435,1437],{"class":1436},"sHwdD","  \u002F\u002F Module-wide default model: inherited by 'list' and 'show' below\n",[650,1439,1440,1443,1445,1447],{"class":652,"line":826},[650,1441,1442],{"class":739},"  model",[650,1444,521],{"class":660},[650,1446,1338],{"class":664},[650,1448,761],{"class":660},[650,1450,1451],{"class":652,"line":840},[650,1452,712],{"emptyLinePlaceholder":711},[650,1454,1455,1457,1459],{"class":652,"line":856},[650,1456,767],{"class":739},[650,1458,521],{"class":660},[650,1460,733],{"class":660},[650,1462,1463],{"class":652,"line":870},[650,1464,1465],{"class":1436},"    \u002F\u002F 1. Uses module-level TaskHubInterviewModel + query class + multiple collection flag\n",[650,1467,1468,1471,1473],{"class":652,"line":875},[650,1469,1470],{"class":739},"    list",[650,1472,521],{"class":660},[650,1474,733],{"class":660},[650,1476,1477,1479,1481,1483,1486,1488],{"class":652,"line":889},[650,1478,791],{"class":739},[650,1480,521],{"class":660},[650,1482,674],{"class":660},[650,1484,1485],{"class":677},"\u002Fv1\u002Fuser-tasks",[650,1487,751],{"class":660},[650,1489,761],{"class":660},[650,1491,1492,1495,1497,1501],{"class":652,"line":905},[650,1493,1494],{"class":739},"      multiple",[650,1496,521],{"class":660},[650,1498,1500],{"class":1499},"sfNiH"," true",[650,1502,761],{"class":660},[650,1504,1505,1508,1510],{"class":652,"line":918},[650,1506,1507],{"class":739},"      query",[650,1509,521],{"class":660},[650,1511,1512],{"class":664}," TaskHubInterviewQuery\n",[650,1514,1515],{"class":652,"line":924},[650,1516,823],{"class":660},[650,1518,1519],{"class":652,"line":930},[650,1520,712],{"emptyLinePlaceholder":711},[650,1522,1523],{"class":652,"line":936},[650,1524,1525],{"class":1436},"    \u002F\u002F 2. Automatically inherits module-level TaskHubInterviewModel\n",[650,1527,1528,1531,1533],{"class":652,"line":941},[650,1529,1530],{"class":739},"    show",[650,1532,521],{"class":660},[650,1534,733],{"class":660},[650,1536,1538,1540,1542,1544,1547],{"class":652,"line":1537},23,[650,1539,791],{"class":739},[650,1541,521],{"class":660},[650,1543,674],{"class":660},[650,1545,1546],{"class":677},"\u002Fv1\u002Fuser-tasks\u002F:interviewId",[650,1548,681],{"class":660},[650,1550,1552],{"class":652,"line":1551},24,[650,1553,823],{"class":660},[650,1555,1557],{"class":652,"line":1556},25,[650,1558,712],{"emptyLinePlaceholder":711},[650,1560,1562],{"class":652,"line":1561},26,[650,1563,1564],{"class":1436},"    \u002F\u002F 3. Overrides model with a lightweight plain object literal\n",[650,1566,1568,1571,1573],{"class":652,"line":1567},27,[650,1569,1570],{"class":739},"    link",[650,1572,521],{"class":660},[650,1574,733],{"class":660},[650,1576,1578,1580,1582,1584,1587,1589],{"class":652,"line":1577},28,[650,1579,791],{"class":739},[650,1581,521],{"class":660},[650,1583,674],{"class":660},[650,1585,1586],{"class":677},"\u002Fv1\u002Fuser-tasks\u002F:interviewId\u002Furl",[650,1588,751],{"class":660},[650,1590,761],{"class":660},[650,1592,1594,1597,1599,1601,1604,1606,1609],{"class":652,"line":1593},29,[650,1595,1596],{"class":739},"      model",[650,1598,521],{"class":660},[650,1600,661],{"class":660},[650,1602,1603],{"class":739}," url",[650,1605,521],{"class":660},[650,1607,1608],{"class":660}," ''",[650,1610,1611],{"class":660}," }\n",[650,1613,1615],{"class":652,"line":1614},30,[650,1616,823],{"class":660},[650,1618,1620],{"class":652,"line":1619},31,[650,1621,712],{"emptyLinePlaceholder":711},[650,1623,1625],{"class":652,"line":1624},32,[650,1626,1627],{"class":1436},"    \u002F\u002F 4. Overrides model with a specific BaseDataModel class + custom query model\n",[650,1629,1631,1634,1636],{"class":652,"line":1630},33,[650,1632,1633],{"class":739},"    stats",[650,1635,521],{"class":660},[650,1637,733],{"class":660},[650,1639,1641,1643,1645,1647,1650,1652],{"class":652,"line":1640},34,[650,1642,791],{"class":739},[650,1644,521],{"class":660},[650,1646,674],{"class":660},[650,1648,1649],{"class":677},"\u002Fv1\u002Fuser-tasks\u002Fstats",[650,1651,751],{"class":660},[650,1653,761],{"class":660},[650,1655,1657,1659,1661,1663],{"class":652,"line":1656},35,[650,1658,1596],{"class":739},[650,1660,521],{"class":660},[650,1662,1358],{"class":664},[650,1664,761],{"class":660},[650,1666,1668,1670,1672],{"class":652,"line":1667},36,[650,1669,1507],{"class":739},[650,1671,521],{"class":660},[650,1673,1512],{"class":664},[650,1675,1677],{"class":652,"line":1676},37,[650,1678,823],{"class":660},[650,1680,1682],{"class":652,"line":1681},38,[650,1683,712],{"emptyLinePlaceholder":711},[650,1685,1687],{"class":652,"line":1686},39,[650,1688,1689],{"class":1436},"    \u002F\u002F 5. Overrides model with null for actions without a body payload\n",[650,1691,1693,1695,1698,1700,1702],{"class":652,"line":1692},40,[650,1694,777],{"class":660},[650,1696,1697],{"class":739},"group.delete",[650,1699,751],{"class":660},[650,1701,521],{"class":660},[650,1703,733],{"class":660},[650,1705,1707,1709,1711,1713,1716,1718],{"class":652,"line":1706},41,[650,1708,791],{"class":739},[650,1710,521],{"class":660},[650,1712,674],{"class":660},[650,1714,1715],{"class":677},"\u002Fv1\u002Fuser-tasks\u002Fgroups\u002F:groupId",[650,1717,751],{"class":660},[650,1719,761],{"class":660},[650,1721,1723,1725,1727,1729,1731,1733],{"class":652,"line":1722},42,[650,1724,808],{"class":739},[650,1726,521],{"class":660},[650,1728,674],{"class":660},[650,1730,608],{"class":677},[650,1732,751],{"class":660},[650,1734,761],{"class":660},[650,1736,1738,1740,1742],{"class":652,"line":1737},43,[650,1739,1596],{"class":739},[650,1741,521],{"class":660},[650,1743,1744],{"class":660}," null\n",[650,1746,1748],{"class":652,"line":1747},44,[650,1749,823],{"class":660},[650,1751,1753],{"class":652,"line":1752},45,[650,1754,712],{"emptyLinePlaceholder":711},[650,1756,1758],{"class":652,"line":1757},46,[650,1759,1760],{"class":1436},"    \u002F\u002F 6. Overrides model with null for action patch\n",[650,1762,1764,1766,1769,1771,1773],{"class":652,"line":1763},47,[650,1765,777],{"class":660},[650,1767,1768],{"class":739},"group.reminder",[650,1770,751],{"class":660},[650,1772,521],{"class":660},[650,1774,733],{"class":660},[650,1776,1778,1780,1782,1784,1787,1789],{"class":652,"line":1777},48,[650,1779,791],{"class":739},[650,1781,521],{"class":660},[650,1783,674],{"class":660},[650,1785,1786],{"class":677},"\u002Fv1\u002Fuser-tasks\u002Fgroups\u002F:groupId\u002Femails",[650,1788,751],{"class":660},[650,1790,761],{"class":660},[650,1792,1794,1796,1798,1800,1802,1804],{"class":652,"line":1793},49,[650,1795,808],{"class":739},[650,1797,521],{"class":660},[650,1799,674],{"class":660},[650,1801,865],{"class":677},[650,1803,751],{"class":660},[650,1805,761],{"class":660},[650,1807,1809,1811,1813],{"class":652,"line":1808},50,[650,1810,1596],{"class":739},[650,1812,521],{"class":660},[650,1814,1744],{"class":660},[650,1816,1818],{"class":652,"line":1817},51,[650,1819,921],{"class":660},[650,1821,1823],{"class":652,"line":1822},52,[650,1824,927],{"class":660},[650,1826,1828],{"class":652,"line":1827},53,[650,1829,933],{"class":660},[650,1831,1833],{"class":652,"line":1832},54,[650,1834,712],{"emptyLinePlaceholder":711},[650,1836,1838,1840,1842],{"class":652,"line":1837},55,[650,1839,944],{"class":656},[650,1841,947],{"class":656},[650,1843,950],{"class":664},[480,1845],{},[354,1847,1849,1850,489],{"id":1848},"automatic-type-safety-vite-plugin-api-types","Automatic Type Safety (",[363,1851,1852],{},"vite-plugin-api-types",[359,1854,1855,1856,1859],{},"The platform uses a custom Vite plugin (",[363,1857,1858],{},"src\u002Fplugins\u002Fapi\u002Fvite.mts",") to auto-generate TypeScript definitions for registered endpoints.",[1861,1862,1863,1864,1867,1868,1871,1872,1874,1875,1878,1879,1882],"tip",{},"During development (",[363,1865,1866],{},"vite dev",") and build (",[363,1869,1870],{},"vite build","), the plugin watches ",[363,1873,495],{}," and updates ",[363,1876,1877],{},"api-registry.d.ts"," in the project root. This populates the global ",[363,1880,1881],{},"APIRegistry"," interface, giving IDE autocomplete and type errors for invalid API keys.",[641,1884,1886],{"className":643,"code":1885,"language":645,"meta":646,"style":646},"\u002F\u002F Autocomplete suggests valid endpoints such as 'meta.tags', 'feature.internal.create', etc.\nconst tags = useAPI('meta.tags')\n",[363,1887,1888,1893],{"__ignoreMap":646},[650,1889,1890],{"class":652,"line":653},[650,1891,1892],{"class":1436},"\u002F\u002F Autocomplete suggests valid endpoints such as 'meta.tags', 'feature.internal.create', etc.\n",[650,1894,1895,1897,1900,1903,1906,1908,1910,1913,1915],{"class":652,"line":684},[650,1896,719],{"class":718},[650,1898,1899],{"class":664}," tags ",[650,1901,1902],{"class":660},"=",[650,1904,1905],{"class":745}," useAPI",[650,1907,748],{"class":664},[650,1909,751],{"class":660},[650,1911,1912],{"class":677},"meta.tags",[650,1914,751],{"class":660},[650,1916,1917],{"class":664},")\n",[480,1919],{},[354,1921,1923,1924,1926,1927,489],{"id":1922},"data-models-basedatamodel-baselistmodel","Data Models (",[363,1925,393],{}," & ",[363,1928,396],{},[359,1930,1931,1932,1934],{},"Data Models define the structure, default values, and mutation behaviors of entities returned by or sent to backend APIs. ",[363,1933,201],{}," automatically instantiates and binds response resource objects to these data models.",[402,1936,1938,1939],{"id":1937},"subclassing-basedatamodel","Subclassing ",[363,1940,393],{},[359,1942,1943,1944,521],{},"To create a single-entity data model, extend ",[363,1945,393],{},[641,1947,1950],{"className":643,"code":1948,"filename":1949,"language":645,"meta":646,"style":646},"import BaseDataModel from '@\u002Fmodels\u002FData\u002FUtility\u002FBaseDataModel'\n\nexport default class ProductModel extends BaseDataModel {\n  id: string = ''\n  name: string = ''\n  description: string = ''\n  active: boolean = true\n\n  constructor() {\n    super()\n  }\n}\n","src\u002Fmodels\u002FData\u002FInventory\u002FProductModel.ts",[363,1951,1952,1968,1972,1992,2007,2020,2033,2048,2052,2062,2070,2074],{"__ignoreMap":646},[650,1953,1954,1956,1959,1961,1963,1966],{"class":652,"line":653},[650,1955,657],{"class":656},[650,1957,1958],{"class":664}," BaseDataModel ",[650,1960,1322],{"class":656},[650,1962,674],{"class":660},[650,1964,1965],{"class":677},"@\u002Fmodels\u002FData\u002FUtility\u002FBaseDataModel",[650,1967,681],{"class":660},[650,1969,1970],{"class":652,"line":684},[650,1971,712],{"emptyLinePlaceholder":711},[650,1973,1974,1976,1978,1981,1984,1987,1990],{"class":652,"line":708},[650,1975,944],{"class":656},[650,1977,947],{"class":656},[650,1979,1980],{"class":718}," class",[650,1982,1983],{"class":727}," ProductModel",[650,1985,1986],{"class":718}," extends",[650,1988,1989],{"class":727}," BaseDataModel",[650,1991,733],{"class":660},[650,1993,1994,1997,1999,2002,2004],{"class":652,"line":715},[650,1995,1996],{"class":739},"  id",[650,1998,521],{"class":660},[650,2000,2001],{"class":727}," string",[650,2003,730],{"class":660},[650,2005,2006],{"class":660}," ''\n",[650,2008,2009,2012,2014,2016,2018],{"class":652,"line":736},[650,2010,2011],{"class":739},"  name",[650,2013,521],{"class":660},[650,2015,2001],{"class":727},[650,2017,730],{"class":660},[650,2019,2006],{"class":660},[650,2021,2022,2025,2027,2029,2031],{"class":652,"line":764},[650,2023,2024],{"class":739},"  description",[650,2026,521],{"class":660},[650,2028,2001],{"class":727},[650,2030,730],{"class":660},[650,2032,2006],{"class":660},[650,2034,2035,2038,2040,2043,2045],{"class":652,"line":774},[650,2036,2037],{"class":739},"  active",[650,2039,521],{"class":660},[650,2041,2042],{"class":727}," boolean",[650,2044,730],{"class":660},[650,2046,2047],{"class":1499}," true\n",[650,2049,2050],{"class":652,"line":788},[650,2051,712],{"emptyLinePlaceholder":711},[650,2053,2054,2057,2060],{"class":652,"line":805},[650,2055,2056],{"class":718},"  constructor",[650,2058,2059],{"class":660},"()",[650,2061,733],{"class":660},[650,2063,2064,2067],{"class":652,"line":820},[650,2065,2066],{"class":664},"    super",[650,2068,2069],{"class":739},"()\n",[650,2071,2072],{"class":652,"line":826},[650,2073,927],{"class":660},[650,2075,2076],{"class":652,"line":840},[650,2077,933],{"class":660},[402,2079,2081,2082,2084],{"id":2080},"automatic-nested-baselistmodel-instantiation","Automatic Nested ",[363,2083,396],{}," Instantiation",[359,2086,2087,2088,2090,2091,369],{},"When defining nested model relationships in a ",[363,2089,393],{},", you can declare an array attribute initialized with the target model class or instance (e.g. ",[363,2092,2093],{},"products = [ProductModel]",[359,2095,2096,2097,386,2099,2101,2102,2104,2105,521],{},"During ",[363,2098,1212],{},[363,2100,393],{}," automatically converts array properties containing a ",[363,2103,393],{}," class constructor or instance into an auto-instantiated ",[363,2106,396],{},[641,2108,2111],{"className":643,"code":2109,"filename":2110,"language":645,"meta":646,"style":646},"import BaseDataModel from '@\u002Fmodels\u002FData\u002FUtility\u002FBaseDataModel'\nimport ProductModel from '@\u002Fmodels\u002FData\u002FInventory\u002FProductModel'\n\nexport default class VendorModel extends BaseDataModel {\n  id: string = ''\n  name: string = ''\n\n  \u002F\u002F Declaring [ProductModel] automatically converts 'products' into a BaseListModel\u003CProductModel>\n  products = [ProductModel]\n\n  constructor() {\n    super()\n  }\n}\n","src\u002Fmodels\u002FData\u002FInventory\u002FVendorModel.ts",[363,2112,2113,2127,2143,2147,2164,2176,2188,2192,2197,2207,2211,2219,2225,2229],{"__ignoreMap":646},[650,2114,2115,2117,2119,2121,2123,2125],{"class":652,"line":653},[650,2116,657],{"class":656},[650,2118,1958],{"class":664},[650,2120,1322],{"class":656},[650,2122,674],{"class":660},[650,2124,1965],{"class":677},[650,2126,681],{"class":660},[650,2128,2129,2131,2134,2136,2138,2141],{"class":652,"line":684},[650,2130,657],{"class":656},[650,2132,2133],{"class":664}," ProductModel ",[650,2135,1322],{"class":656},[650,2137,674],{"class":660},[650,2139,2140],{"class":677},"@\u002Fmodels\u002FData\u002FInventory\u002FProductModel",[650,2142,681],{"class":660},[650,2144,2145],{"class":652,"line":708},[650,2146,712],{"emptyLinePlaceholder":711},[650,2148,2149,2151,2153,2155,2158,2160,2162],{"class":652,"line":715},[650,2150,944],{"class":656},[650,2152,947],{"class":656},[650,2154,1980],{"class":718},[650,2156,2157],{"class":727}," VendorModel",[650,2159,1986],{"class":718},[650,2161,1989],{"class":727},[650,2163,733],{"class":660},[650,2165,2166,2168,2170,2172,2174],{"class":652,"line":736},[650,2167,1996],{"class":739},[650,2169,521],{"class":660},[650,2171,2001],{"class":727},[650,2173,730],{"class":660},[650,2175,2006],{"class":660},[650,2177,2178,2180,2182,2184,2186],{"class":652,"line":764},[650,2179,2011],{"class":739},[650,2181,521],{"class":660},[650,2183,2001],{"class":727},[650,2185,730],{"class":660},[650,2187,2006],{"class":660},[650,2189,2190],{"class":652,"line":774},[650,2191,712],{"emptyLinePlaceholder":711},[650,2193,2194],{"class":652,"line":788},[650,2195,2196],{"class":1436},"  \u002F\u002F Declaring [ProductModel] automatically converts 'products' into a BaseListModel\u003CProductModel>\n",[650,2198,2199,2202,2204],{"class":652,"line":805},[650,2200,2201],{"class":739},"  products",[650,2203,730],{"class":660},[650,2205,2206],{"class":664}," [ProductModel]\n",[650,2208,2209],{"class":652,"line":820},[650,2210,712],{"emptyLinePlaceholder":711},[650,2212,2213,2215,2217],{"class":652,"line":826},[650,2214,2056],{"class":718},[650,2216,2059],{"class":660},[650,2218,733],{"class":660},[650,2220,2221,2223],{"class":652,"line":840},[650,2222,2066],{"class":664},[650,2224,2069],{"class":739},[650,2226,2227],{"class":652,"line":856},[650,2228,927],{"class":660},[650,2230,2231],{"class":652,"line":870},[650,2232,933],{"class":660},[1861,2234,1125,2235,452,2237,2240,2241,2244,2245,2248,2249,2252,2253,2256,2257,456],{},[363,2236,1212],{},[363,2238,2239],{},"assign()"," runs, ",[363,2242,2243],{},"VendorModel.products"," is automatically transformed into ",[363,2246,2247],{},"new BaseListModel(ProductModel)",". Any incoming JSON data for ",[363,2250,2251],{},"products"," will then be instantiated and cast as ",[363,2254,2255],{},"ProductModel"," items within the ",[363,2258,396],{},[402,2260,2262],{"id":2261},"model-lifecycle-state-tracking","Model Lifecycle & State Tracking",[359,2264,2265,2267],{},[363,2266,393],{}," tracks internal snapshots of model state to support dirty-checking, rollback, and selective property serialization:",[407,2269,2270,2281,2289,2302],{},[410,2271,2272,2277,2278,2280],{},[413,2273,2274],{},[363,2275,2276],{},"__original",": Snapshot of the object state after ",[363,2279,1212],{}," is first called.",[410,2282,2283,2288],{},[413,2284,2285],{},[363,2286,2287],{},"__previous",": Snapshot of the last committed or assigned state.",[410,2290,2291,2296,2297,2299,2300,456],{},[413,2292,2293],{},[363,2294,2295],{},"isDirty",": Getter returning ",[363,2298,1101],{}," if current field values differ from ",[363,2301,2287],{},[410,2303,2304,2309,2310,2313,2314,2313,2317,2320],{},[413,2305,2306],{},[363,2307,2308],{},"postable",": Getter returning only enumerable properties suitable for sending in ",[363,2311,2312],{},"POST","\u002F",[363,2315,2316],{},"PUT",[363,2318,2319],{},"PATCH"," request bodies.",[402,2322,2324],{"id":2323},"data-model-methods","Data Model Methods",[523,2326,2327,2339],{},[526,2328,2329],{},[529,2330,2331,2334,2337],{},[532,2332,2333],{},"Method",[532,2335,2336],{},"Signature",[532,2338,972],{},[545,2340,2341,2362,2379,2402,2423,2440],{},[529,2342,2343,2348,2353],{},[550,2344,2345],{},[363,2346,2347],{},"setup(custom?, warn?)",[550,2349,2350],{},[363,2351,2352],{},"(custom?: Partial\u003Cthis>, warn?: boolean) => this",[550,2354,2355,2356,2358,2359,2361],{},"Initializes nested list models, applies custom overrides, and records initial ",[363,2357,2276],{}," \u002F ",[363,2360,2287],{}," snapshots.",[529,2363,2364,2369,2374],{},[550,2365,2366],{},[363,2367,2368],{},"assign(data, cast?, update?)",[550,2370,2371],{},[363,2372,2373],{},"(data?: Partial\u003Cthis>, cast?: boolean, update?: boolean) => this",[550,2375,2376,2377,456],{},"Merges new property values into the model instance, optionally casting types and recording ",[363,2378,2287],{},[529,2380,2381,2386,2391],{},[550,2382,2383],{},[363,2384,2385],{},"update(data, cast?)",[550,2387,2388],{},[363,2389,2390],{},"(data?: Partial\u003Cthis>, cast?: boolean) => this",[550,2392,2393,2394,2397,2398,2401],{},"Alias for ",[363,2395,2396],{},"assign"," with ",[363,2399,2400],{},"update = true"," enabled.",[529,2403,2404,2409,2414],{},[550,2405,2406],{},[363,2407,2408],{},"commited()",[550,2410,2411],{},[363,2412,2413],{},"() => this",[550,2415,2416,2417,2419,2420,2422],{},"Commits the current property state as the new ",[363,2418,2287],{}," reference, clearing the ",[363,2421,2295],{}," flag after a successful save.",[529,2424,2425,2430,2434],{},[550,2426,2427],{},[363,2428,2429],{},"undo()",[550,2431,2432],{},[363,2433,2413],{},[550,2435,2436,2437,2439],{},"Reverts modified property values back to the ",[363,2438,2287],{}," snapshot.",[529,2441,2442,2447,2452],{},[550,2443,2444],{},[363,2445,2446],{},"reset(data?, hard?)",[550,2448,2449],{},[363,2450,2451],{},"(data?: Partial\u003Cthis>, hard?: boolean) => this",[550,2453,2454,2455,2457,2458,2460,2461,456],{},"Reverts the model to ",[363,2456,2276],{}," snapshot values, optionally overriding fields. Performs a ",[363,2459,2408],{}," if ",[363,2462,2463],{},"hard = true",[641,2465,2467],{"className":643,"code":2466,"language":645,"meta":646,"style":646},"const product = new ProductModel().setup({ name: 'Draft Product' })\n\nproduct.name = 'New Name'\nconsole.log(product.isDirty) \u002F\u002F true\n\nproduct.undo()\nconsole.log(product.name) \u002F\u002F 'Draft Product'\n",[363,2468,2469,2511,2515,2534,2555,2559,2570],{"__ignoreMap":646},[650,2470,2471,2473,2476,2478,2481,2483,2485,2487,2490,2492,2495,2498,2500,2502,2505,2507,2509],{"class":652,"line":653},[650,2472,719],{"class":718},[650,2474,2475],{"class":664}," product ",[650,2477,1902],{"class":660},[650,2479,2480],{"class":660}," new",[650,2482,1983],{"class":745},[650,2484,2059],{"class":664},[650,2486,456],{"class":660},[650,2488,2489],{"class":745},"setup",[650,2491,748],{"class":664},[650,2493,2494],{"class":660},"{",[650,2496,2497],{"class":739}," name",[650,2499,521],{"class":660},[650,2501,674],{"class":660},[650,2503,2504],{"class":677},"Draft Product",[650,2506,751],{"class":660},[650,2508,668],{"class":660},[650,2510,1917],{"class":664},[650,2512,2513],{"class":652,"line":684},[650,2514,712],{"emptyLinePlaceholder":711},[650,2516,2517,2520,2522,2525,2527,2529,2532],{"class":652,"line":708},[650,2518,2519],{"class":664},"product",[650,2521,456],{"class":660},[650,2523,2524],{"class":664},"name ",[650,2526,1902],{"class":660},[650,2528,674],{"class":660},[650,2530,2531],{"class":677},"New Name",[650,2533,681],{"class":660},[650,2535,2536,2539,2541,2544,2547,2549,2552],{"class":652,"line":715},[650,2537,2538],{"class":664},"console",[650,2540,456],{"class":660},[650,2542,2543],{"class":745},"log",[650,2545,2546],{"class":664},"(product",[650,2548,456],{"class":660},[650,2550,2551],{"class":664},"isDirty) ",[650,2553,2554],{"class":1436},"\u002F\u002F true\n",[650,2556,2557],{"class":652,"line":736},[650,2558,712],{"emptyLinePlaceholder":711},[650,2560,2561,2563,2565,2568],{"class":652,"line":764},[650,2562,2519],{"class":664},[650,2564,456],{"class":660},[650,2566,2567],{"class":745},"undo",[650,2569,2069],{"class":664},[650,2571,2572,2574,2576,2578,2580,2582,2585],{"class":652,"line":774},[650,2573,2538],{"class":664},[650,2575,456],{"class":660},[650,2577,2543],{"class":745},[650,2579,2546],{"class":664},[650,2581,456],{"class":660},[650,2583,2584],{"class":664},"name) ",[650,2586,2587],{"class":1436},"\u002F\u002F 'Draft Product'\n",[402,2589,2591,2592,489],{"id":2590},"handling-collections-baselistmodel","Handling Collections (",[363,2593,396],{},[359,2595,2596,2597,386,2600,2602,2603,456],{},"When an endpoint returns a list of items or has ",[363,2598,2599],{},"multiple: true",[363,2601,201],{}," wraps the model in a ",[363,2604,396],{},[641,2606,2609],{"className":643,"code":2607,"filename":2608,"language":645,"meta":646,"style":646},"import BaseListModel from '@\u002Fmodels\u002FData\u002FUtility\u002FBaseListModel'\nimport ProductModel from '@\u002Fmodels\u002FData\u002FInventory\u002FProductModel'\n\nexport default class ProductListModel extends BaseListModel\u003Ctypeof ProductModel> {\n  constructor() {\n    super(ProductModel)\n  }\n}\n","src\u002Fmodels\u002FData\u002FInventory\u002FProductListModel.ts",[363,2610,2611,2627,2641,2645,2671,2679,2689,2693],{"__ignoreMap":646},[650,2612,2613,2615,2618,2620,2622,2625],{"class":652,"line":653},[650,2614,657],{"class":656},[650,2616,2617],{"class":664}," BaseListModel ",[650,2619,1322],{"class":656},[650,2621,674],{"class":660},[650,2623,2624],{"class":677},"@\u002Fmodels\u002FData\u002FUtility\u002FBaseListModel",[650,2626,681],{"class":660},[650,2628,2629,2631,2633,2635,2637,2639],{"class":652,"line":684},[650,2630,657],{"class":656},[650,2632,2133],{"class":664},[650,2634,1322],{"class":656},[650,2636,674],{"class":660},[650,2638,2140],{"class":677},[650,2640,681],{"class":660},[650,2642,2643],{"class":652,"line":708},[650,2644,712],{"emptyLinePlaceholder":711},[650,2646,2647,2649,2651,2653,2656,2658,2661,2664,2666,2669],{"class":652,"line":715},[650,2648,944],{"class":656},[650,2650,947],{"class":656},[650,2652,1980],{"class":718},[650,2654,2655],{"class":727}," ProductListModel",[650,2657,1986],{"class":718},[650,2659,2660],{"class":727}," BaseListModel",[650,2662,2663],{"class":660},"\u003Ctypeof",[650,2665,1983],{"class":664},[650,2667,2668],{"class":660},">",[650,2670,733],{"class":660},[650,2672,2673,2675,2677],{"class":652,"line":736},[650,2674,2056],{"class":718},[650,2676,2059],{"class":660},[650,2678,733],{"class":660},[650,2680,2681,2683,2685,2687],{"class":652,"line":764},[650,2682,2066],{"class":664},[650,2684,748],{"class":739},[650,2686,2255],{"class":664},[650,2688,1917],{"class":739},[650,2690,2691],{"class":652,"line":774},[650,2692,927],{"class":660},[650,2694,2695],{"class":652,"line":788},[650,2696,933],{"class":660},[1158,2698,2700,2701,2703],{"id":2699},"key-baselistmodel-properties-methods","Key ",[363,2702,396],{}," Properties & Methods",[407,2705,2706,2716,2724,2732,2742,2753,2770],{},[410,2707,2708,2712,2713,2715],{},[413,2709,2710],{},[363,2711,630],{},": Array of strongly typed ",[363,2714,393],{}," instances.",[410,2717,2718,2723],{},[413,2719,2720],{},[363,2721,2722],{},"total",": Number of total items available on the backend (populated from paginated API responses).",[410,2725,2726,2731],{},[413,2727,2728],{},[363,2729,2730],{},"pages",": Total page count returned by paginated API responses.",[410,2733,2734,2739,2740,456],{},[413,2735,2736],{},[363,2737,2738],{},"assign(items)",": Instantiates and appends or replaces items in ",[363,2741,630],{},[410,2743,2744,2749,2750,369],{},[413,2745,2746],{},[363,2747,2748],{},"withCache(identifier)",": Enables result caching using a specific key (e.g. ",[363,2751,2752],{},"'id'",[410,2754,2755,2760,2761,2763,2764,2766,2767,456],{},[413,2756,2757],{},[363,2758,2759],{},"clear()",": Empties the ",[363,2762,630],{}," array and resets ",[363,2765,2722],{}," to ",[363,2768,2769],{},"0",[410,2771,2772,2777],{},[413,2773,2774],{},[363,2775,2776],{},"reset(items)",": Re-assigns items and resets pagination metadata.",[480,2779],{},[354,2781,2783,2784,1926,2786,489],{"id":2782},"query-models-basequery-paginationquery","Query Models (",[363,2785,399],{},[363,2787,2788],{},"PaginationQuery",[359,2790,2791],{},"Query Models manage request search filters, sorting options, pagination parameters, and synchronization with Vue Router URL query strings.",[402,2793,1938,2795],{"id":2794},"subclassing-basequery",[363,2796,399],{},[359,2798,2799,2800,2802],{},"Extend ",[363,2801,399],{}," to construct search filter models for non-paginated endpoints:",[641,2804,2807],{"className":643,"code":2805,"filename":2806,"language":645,"meta":646,"style":646},"import BaseQuery from '@\u002Fmodels\u002FApi\u002FUtility\u002FBaseQuery'\n\nexport default class FilterQuery extends BaseQuery {\n  category: string = ''\n  status: string = 'active'\n\n  constructor() {\n    super('filter') \u002F\u002F 'filter' is the query scope prefix\n  }\n}\n","src\u002Fmodels\u002FApi\u002FQuery\u002FFilterQuery.ts",[363,2808,2809,2825,2829,2847,2860,2878,2882,2890,2909,2913],{"__ignoreMap":646},[650,2810,2811,2813,2816,2818,2820,2823],{"class":652,"line":653},[650,2812,657],{"class":656},[650,2814,2815],{"class":664}," BaseQuery ",[650,2817,1322],{"class":656},[650,2819,674],{"class":660},[650,2821,2822],{"class":677},"@\u002Fmodels\u002FApi\u002FUtility\u002FBaseQuery",[650,2824,681],{"class":660},[650,2826,2827],{"class":652,"line":684},[650,2828,712],{"emptyLinePlaceholder":711},[650,2830,2831,2833,2835,2837,2840,2842,2845],{"class":652,"line":708},[650,2832,944],{"class":656},[650,2834,947],{"class":656},[650,2836,1980],{"class":718},[650,2838,2839],{"class":727}," FilterQuery",[650,2841,1986],{"class":718},[650,2843,2844],{"class":727}," BaseQuery",[650,2846,733],{"class":660},[650,2848,2849,2852,2854,2856,2858],{"class":652,"line":715},[650,2850,2851],{"class":739},"  category",[650,2853,521],{"class":660},[650,2855,2001],{"class":727},[650,2857,730],{"class":660},[650,2859,2006],{"class":660},[650,2861,2862,2865,2867,2869,2871,2873,2876],{"class":652,"line":736},[650,2863,2864],{"class":739},"  status",[650,2866,521],{"class":660},[650,2868,2001],{"class":727},[650,2870,730],{"class":660},[650,2872,674],{"class":660},[650,2874,2875],{"class":677},"active",[650,2877,681],{"class":660},[650,2879,2880],{"class":652,"line":764},[650,2881,712],{"emptyLinePlaceholder":711},[650,2883,2884,2886,2888],{"class":652,"line":774},[650,2885,2056],{"class":718},[650,2887,2059],{"class":660},[650,2889,733],{"class":660},[650,2891,2892,2894,2896,2898,2901,2903,2906],{"class":652,"line":788},[650,2893,2066],{"class":664},[650,2895,748],{"class":739},[650,2897,751],{"class":660},[650,2899,2900],{"class":677},"filter",[650,2902,751],{"class":660},[650,2904,2905],{"class":739},") ",[650,2907,2908],{"class":1436},"\u002F\u002F 'filter' is the query scope prefix\n",[650,2910,2911],{"class":652,"line":805},[650,2912,927],{"class":660},[650,2914,2915],{"class":652,"line":820},[650,2916,933],{"class":660},[402,2918,2920],{"id":2919},"query-scoping-router-synchronization","Query Scoping & Router Synchronization",[359,2922,2923,2924,2927],{},"Query models support scoping (",[363,2925,2926],{},"__scope",") to avoid query parameter collisions when multiple components share URL query parameters:",[407,2929,2930,2942,2950,2958],{},[410,2931,2932,2935,2936,2938,2939,456],{},[413,2933,2934],{},"Scoped URL Output",": When a scope is supplied (e.g. ",[363,2937,586],{},"), parameters are rendered with a delimiter in the URL: ",[363,2940,2941],{},"?tags~searchTerm=security",[410,2943,2944,2949],{},[413,2945,2946],{},[363,2947,2948],{},"routable",": Getter returning sanitized query parameter pairs ready for Vue Router.",[410,2951,2952,2957],{},[413,2953,2954],{},[363,2955,2956],{},"go(router, absolute?)",": Updates Vue Router URL query string with current query model properties.",[410,2959,2960,2965],{},[413,2961,2962],{},[363,2963,2964],{},"parse(payload, props?, scope?)",": Deserializes route query strings or parameter objects directly into model properties.",[402,2967,2969],{"id":2968},"deferred-state-draft-filters","Deferred State (Draft Filters)",[359,2971,2972,2973,2976],{},"Query models provide a deferred state (",[363,2974,2975],{},"deferred",") so users can adjust filter controls in a modal or drawer without immediately triggering network requests:",[641,2978,2980],{"className":643,"code":2979,"language":645,"meta":646,"style":646},"const query = new TagsQuery()\n\n\u002F\u002F User edits draft state in form\nquery.deferred.searchTerm = 'compliance'\n\n\u002F\u002F Apply draft changes to active query state\nquery.commit()\n\n\u002F\u002F Or cancel draft changes\nquery.cancel()\n",[363,2981,2982,2998,3002,3007,3029,3033,3038,3049,3053,3058],{"__ignoreMap":646},[650,2983,2984,2986,2989,2991,2993,2996],{"class":652,"line":653},[650,2985,719],{"class":718},[650,2987,2988],{"class":664}," query ",[650,2990,1902],{"class":660},[650,2992,2480],{"class":660},[650,2994,2995],{"class":745}," TagsQuery",[650,2997,2069],{"class":664},[650,2999,3000],{"class":652,"line":684},[650,3001,712],{"emptyLinePlaceholder":711},[650,3003,3004],{"class":652,"line":708},[650,3005,3006],{"class":1436},"\u002F\u002F User edits draft state in form\n",[650,3008,3009,3011,3013,3015,3017,3020,3022,3024,3027],{"class":652,"line":715},[650,3010,428],{"class":664},[650,3012,456],{"class":660},[650,3014,2975],{"class":664},[650,3016,456],{"class":660},[650,3018,3019],{"class":664},"searchTerm ",[650,3021,1902],{"class":660},[650,3023,674],{"class":660},[650,3025,3026],{"class":677},"compliance",[650,3028,681],{"class":660},[650,3030,3031],{"class":652,"line":736},[650,3032,712],{"emptyLinePlaceholder":711},[650,3034,3035],{"class":652,"line":764},[650,3036,3037],{"class":1436},"\u002F\u002F Apply draft changes to active query state\n",[650,3039,3040,3042,3044,3047],{"class":652,"line":774},[650,3041,428],{"class":664},[650,3043,456],{"class":660},[650,3045,3046],{"class":745},"commit",[650,3048,2069],{"class":664},[650,3050,3051],{"class":652,"line":788},[650,3052,712],{"emptyLinePlaceholder":711},[650,3054,3055],{"class":652,"line":805},[650,3056,3057],{"class":1436},"\u002F\u002F Or cancel draft changes\n",[650,3059,3060,3062,3064,3067],{"class":652,"line":820},[650,3061,428],{"class":664},[650,3063,456],{"class":660},[650,3065,3066],{"class":745},"cancel",[650,3068,2069],{"class":664},[1158,3070,3072],{"id":3071},"query-state-control-methods","Query State Control Methods",[523,3074,3075,3083],{},[526,3076,3077],{},[529,3078,3079,3081],{},[532,3080,2333],{},[532,3082,972],{},[545,3084,3085,3098,3111,3125],{},[529,3086,3087,3092],{},[550,3088,3089],{},[363,3090,3091],{},"commit()",[550,3093,3094,3095,3097],{},"Copies values from ",[363,3096,2975],{}," draft state into active query fields and updates filter count.",[529,3099,3100,3105],{},[550,3101,3102],{},[363,3103,3104],{},"cancel()",[550,3106,3107,3108,3110],{},"Reverts ",[363,3109,2975],{}," draft state back to active query parameters.",[529,3112,3113,3117],{},[550,3114,3115],{},[363,3116,2429],{},[550,3118,3107,3119,3121,3122,3124],{},[363,3120,2975],{}," draft state to the ",[363,3123,2287],{}," query state snapshot.",[529,3126,3127,3132],{},[550,3128,3129],{},[363,3130,3131],{},"reset()",[550,3133,3107,3134,3136,3137,3139],{},[363,3135,2975],{}," and active query state to initial ",[363,3138,2276],{}," default values.",[402,3141,3143,3144,489],{"id":3142},"paginated-queries-paginationquery","Paginated Queries (",[363,3145,2788],{},[359,3147,3148,3149,521],{},"For endpoints supporting page numbers, page sizes, and sorting, extend ",[363,3150,2788],{},[641,3152,3155],{"className":643,"code":3153,"filename":3154,"language":645,"meta":646,"style":646},"import PaginationQuery from '@\u002Fmodels\u002FApi\u002FQuery\u002FPaginationQuery'\n\nexport default class TagsQuery extends PaginationQuery {\n  type: string = ''\n  searchTerm: string = ''\n\n  constructor() {\n    super('tags')\n  }\n}\n","src\u002Fmodels\u002FApi\u002FQuery\u002FTagsQuery.ts",[363,3156,3157,3173,3177,3194,3207,3220,3224,3232,3246,3250],{"__ignoreMap":646},[650,3158,3159,3161,3164,3166,3168,3171],{"class":652,"line":653},[650,3160,657],{"class":656},[650,3162,3163],{"class":664}," PaginationQuery ",[650,3165,1322],{"class":656},[650,3167,674],{"class":660},[650,3169,3170],{"class":677},"@\u002Fmodels\u002FApi\u002FQuery\u002FPaginationQuery",[650,3172,681],{"class":660},[650,3174,3175],{"class":652,"line":684},[650,3176,712],{"emptyLinePlaceholder":711},[650,3178,3179,3181,3183,3185,3187,3189,3192],{"class":652,"line":708},[650,3180,944],{"class":656},[650,3182,947],{"class":656},[650,3184,1980],{"class":718},[650,3186,2995],{"class":727},[650,3188,1986],{"class":718},[650,3190,3191],{"class":727}," PaginationQuery",[650,3193,733],{"class":660},[650,3195,3196,3199,3201,3203,3205],{"class":652,"line":715},[650,3197,3198],{"class":739},"  type",[650,3200,521],{"class":660},[650,3202,2001],{"class":727},[650,3204,730],{"class":660},[650,3206,2006],{"class":660},[650,3208,3209,3212,3214,3216,3218],{"class":652,"line":736},[650,3210,3211],{"class":739},"  searchTerm",[650,3213,521],{"class":660},[650,3215,2001],{"class":727},[650,3217,730],{"class":660},[650,3219,2006],{"class":660},[650,3221,3222],{"class":652,"line":764},[650,3223,712],{"emptyLinePlaceholder":711},[650,3225,3226,3228,3230],{"class":652,"line":774},[650,3227,2056],{"class":718},[650,3229,2059],{"class":660},[650,3231,733],{"class":660},[650,3233,3234,3236,3238,3240,3242,3244],{"class":652,"line":788},[650,3235,2066],{"class":664},[650,3237,748],{"class":739},[650,3239,751],{"class":660},[650,3241,586],{"class":677},[650,3243,751],{"class":660},[650,3245,1917],{"class":739},[650,3247,3248],{"class":652,"line":805},[650,3249,927],{"class":660},[650,3251,3252],{"class":652,"line":820},[650,3253,933],{"class":660},[1158,3255,3257,3258,3260],{"id":3256},"built-in-paginationquery-parameters","Built-in ",[363,3259,2788],{}," Parameters",[407,3262,3263,3274,3285,3300,3308,3316],{},[410,3264,3265,3270,3271,369],{},[413,3266,3267],{},[363,3268,3269],{},"page",": 1-indexed page number (automatically converted to 0-indexed for backend API requests in ",[363,3272,3273],{},"configuration",[410,3275,3276,3281,3282,369],{},[413,3277,3278],{},[363,3279,3280],{},"size",": Page size limit (defaults to ",[363,3283,3284],{},"20",[410,3286,3287,3292,3293,3296,3297,456],{},[413,3288,3289],{},[363,3290,3291],{},"sortBy",": Array of sort objects: ",[363,3294,3295],{},"[{ key: 'name', order: 'asc' }]",". Automatically serialized to ",[363,3298,3299],{},"sort: [\"name~A\"]",[410,3301,3302,3307],{},[413,3303,3304],{},[363,3305,3306],{},"groupBy",": Array of grouping items.",[410,3309,3310,3315],{},[413,3311,3312],{},[363,3313,3314],{},"search",": General search string.",[410,3317,3318,3322,3323,456],{},[413,3319,3320],{},[363,3321,3273],{},": Cleansed object passed directly to Axios request parameters by ",[363,3324,201],{},[480,3326],{},[354,3328,3330,3331,3333],{"id":3329},"using-useapi-in-vue-components","Using ",[363,3332,201],{}," in Vue Components",[402,3335,3337],{"id":3336},"_1-destructuring-state-standard-pattern","1. Destructuring State (Standard Pattern)",[359,3339,3340],{},"Best for components that destructure reactive state and trigger execution explicitly or in lifecycle hooks:",[641,3342,3347],{"className":3343,"code":3344,"filename":3345,"language":3346,"meta":646,"style":646},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cscript setup lang=\"ts\">\nimport { onMounted } from 'vue'\nimport { useAPI } from '@\u002Fcomposables\u002FuseAPI'\n\nconst { data, query, execute, loading } = useAPI('meta.tags')\n\nonMounted(() => {\n  execute()\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cv-select\n    v-model=\"query.tag\"\n    :items=\"data\"\n    :loading=\"loading\"\n    label=\"Filter by Tag\"\n  \u002F>\n\u003C\u002Ftemplate>\n","components\u002Ftags-filter.vue","vue",[363,3348,3349,3376,3395,3414,3418,3460,3464,3478,3485,3491,3500,3504,3513,3521,3536,3549,3562,3576,3581],{"__ignoreMap":646},[650,3350,3351,3354,3357,3360,3363,3365,3368,3371,3373],{"class":652,"line":653},[650,3352,3353],{"class":660},"\u003C",[650,3355,3356],{"class":739},"script",[650,3358,3359],{"class":718}," setup",[650,3361,3362],{"class":718}," lang",[650,3364,1902],{"class":660},[650,3366,3367],{"class":660},"\"",[650,3369,3370],{"class":677},"ts",[650,3372,3367],{"class":660},[650,3374,3375],{"class":660},">\n",[650,3377,3378,3380,3382,3385,3387,3389,3391,3393],{"class":652,"line":684},[650,3379,657],{"class":656},[650,3381,661],{"class":660},[650,3383,3384],{"class":664}," onMounted",[650,3386,668],{"class":660},[650,3388,671],{"class":656},[650,3390,674],{"class":660},[650,3392,3346],{"class":677},[650,3394,681],{"class":660},[650,3396,3397,3399,3401,3403,3405,3407,3409,3412],{"class":652,"line":708},[650,3398,657],{"class":656},[650,3400,661],{"class":660},[650,3402,1905],{"class":664},[650,3404,668],{"class":660},[650,3406,671],{"class":656},[650,3408,674],{"class":660},[650,3410,3411],{"class":677},"@\u002Fcomposables\u002FuseAPI",[650,3413,681],{"class":660},[650,3415,3416],{"class":652,"line":715},[650,3417,712],{"emptyLinePlaceholder":711},[650,3419,3420,3422,3424,3427,3430,3433,3435,3438,3440,3443,3446,3448,3450,3452,3454,3456,3458],{"class":652,"line":736},[650,3421,719],{"class":718},[650,3423,661],{"class":660},[650,3425,3426],{"class":664}," data",[650,3428,3429],{"class":660},",",[650,3431,3432],{"class":664}," query",[650,3434,3429],{"class":660},[650,3436,3437],{"class":664}," execute",[650,3439,3429],{"class":660},[650,3441,3442],{"class":664}," loading ",[650,3444,3445],{"class":660},"}",[650,3447,730],{"class":660},[650,3449,1905],{"class":745},[650,3451,748],{"class":664},[650,3453,751],{"class":660},[650,3455,1912],{"class":677},[650,3457,751],{"class":660},[650,3459,1917],{"class":664},[650,3461,3462],{"class":652,"line":764},[650,3463,712],{"emptyLinePlaceholder":711},[650,3465,3466,3469,3471,3473,3476],{"class":652,"line":774},[650,3467,3468],{"class":745},"onMounted",[650,3470,748],{"class":664},[650,3472,2059],{"class":660},[650,3474,3475],{"class":718}," =>",[650,3477,733],{"class":660},[650,3479,3480,3483],{"class":652,"line":788},[650,3481,3482],{"class":745},"  execute",[650,3484,2069],{"class":739},[650,3486,3487,3489],{"class":652,"line":805},[650,3488,3445],{"class":660},[650,3490,1917],{"class":664},[650,3492,3493,3496,3498],{"class":652,"line":820},[650,3494,3495],{"class":660},"\u003C\u002F",[650,3497,3356],{"class":739},[650,3499,3375],{"class":660},[650,3501,3502],{"class":652,"line":826},[650,3503,712],{"emptyLinePlaceholder":711},[650,3505,3506,3508,3511],{"class":652,"line":840},[650,3507,3353],{"class":660},[650,3509,3510],{"class":739},"template",[650,3512,3375],{"class":660},[650,3514,3515,3518],{"class":652,"line":856},[650,3516,3517],{"class":660},"  \u003C",[650,3519,3520],{"class":739},"v-select\n",[650,3522,3523,3526,3528,3530,3533],{"class":652,"line":870},[650,3524,3525],{"class":718},"    v-model",[650,3527,1902],{"class":660},[650,3529,3367],{"class":660},[650,3531,3532],{"class":677},"query.tag",[650,3534,3535],{"class":660},"\"\n",[650,3537,3538,3541,3543,3545,3547],{"class":652,"line":875},[650,3539,3540],{"class":718},"    :items",[650,3542,1902],{"class":660},[650,3544,3367],{"class":660},[650,3546,425],{"class":677},[650,3548,3535],{"class":660},[650,3550,3551,3554,3556,3558,3560],{"class":652,"line":889},[650,3552,3553],{"class":718},"    :loading",[650,3555,1902],{"class":660},[650,3557,3367],{"class":660},[650,3559,431],{"class":677},[650,3561,3535],{"class":660},[650,3563,3564,3567,3569,3571,3574],{"class":652,"line":905},[650,3565,3566],{"class":718},"    label",[650,3568,1902],{"class":660},[650,3570,3367],{"class":660},[650,3572,3573],{"class":677},"Filter by Tag",[650,3575,3535],{"class":660},[650,3577,3578],{"class":652,"line":918},[650,3579,3580],{"class":660},"  \u002F>\n",[650,3582,3583,3585,3587],{"class":652,"line":924},[650,3584,3495],{"class":660},[650,3586,3510],{"class":739},[650,3588,3375],{"class":660},[402,3590,3592],{"id":3591},"_2-reactive-wrapper-pattern","2. Reactive Wrapper Pattern",[359,3594,3595],{},"Best when passing the entire API instance into templates or computed properties:",[641,3597,3600],{"className":3343,"code":3598,"filename":3599,"language":3346,"meta":646,"style":646},"\u003Cscript setup lang=\"ts\">\nimport { reactive, onMounted } from 'vue'\nimport { useAPI } from '@\u002Fcomposables\u002FuseAPI'\n\nconst signals = reactive(useAPI('insights.signals.list'))\n\nonMounted(() => {\n  signals.execute()\n})\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cv-progress-linear v-if=\"signals.loading\" indeterminate \u002F>\n  \u003Cdiv v-else-if=\"signals.loaded\">\n    \u003Cdiv v-for=\"item in signals.data\" :key=\"item.id\">\n      {{ item.title }}\n    \u003C\u002Fdiv>\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n","components\u002Finsights-list.vue",[363,3601,3602,3622,3645,3663,3667,3694,3698,3710,3722,3728,3736,3740,3748,3773,3794,3827,3832,3841,3850],{"__ignoreMap":646},[650,3603,3604,3606,3608,3610,3612,3614,3616,3618,3620],{"class":652,"line":653},[650,3605,3353],{"class":660},[650,3607,3356],{"class":739},[650,3609,3359],{"class":718},[650,3611,3362],{"class":718},[650,3613,1902],{"class":660},[650,3615,3367],{"class":660},[650,3617,3370],{"class":677},[650,3619,3367],{"class":660},[650,3621,3375],{"class":660},[650,3623,3624,3626,3628,3631,3633,3635,3637,3639,3641,3643],{"class":652,"line":684},[650,3625,657],{"class":656},[650,3627,661],{"class":660},[650,3629,3630],{"class":664}," reactive",[650,3632,3429],{"class":660},[650,3634,3384],{"class":664},[650,3636,668],{"class":660},[650,3638,671],{"class":656},[650,3640,674],{"class":660},[650,3642,3346],{"class":677},[650,3644,681],{"class":660},[650,3646,3647,3649,3651,3653,3655,3657,3659,3661],{"class":652,"line":708},[650,3648,657],{"class":656},[650,3650,661],{"class":660},[650,3652,1905],{"class":664},[650,3654,668],{"class":660},[650,3656,671],{"class":656},[650,3658,674],{"class":660},[650,3660,3411],{"class":677},[650,3662,681],{"class":660},[650,3664,3665],{"class":652,"line":715},[650,3666,712],{"emptyLinePlaceholder":711},[650,3668,3669,3671,3674,3676,3678,3680,3682,3684,3686,3689,3691],{"class":652,"line":736},[650,3670,719],{"class":718},[650,3672,3673],{"class":664}," signals ",[650,3675,1902],{"class":660},[650,3677,3630],{"class":745},[650,3679,748],{"class":664},[650,3681,201],{"class":745},[650,3683,748],{"class":664},[650,3685,751],{"class":660},[650,3687,3688],{"class":677},"insights.signals.list",[650,3690,751],{"class":660},[650,3692,3693],{"class":664},"))\n",[650,3695,3696],{"class":652,"line":764},[650,3697,712],{"emptyLinePlaceholder":711},[650,3699,3700,3702,3704,3706,3708],{"class":652,"line":774},[650,3701,3468],{"class":745},[650,3703,748],{"class":664},[650,3705,2059],{"class":660},[650,3707,3475],{"class":718},[650,3709,733],{"class":660},[650,3711,3712,3715,3717,3720],{"class":652,"line":788},[650,3713,3714],{"class":664},"  signals",[650,3716,456],{"class":660},[650,3718,3719],{"class":745},"execute",[650,3721,2069],{"class":739},[650,3723,3724,3726],{"class":652,"line":805},[650,3725,3445],{"class":660},[650,3727,1917],{"class":664},[650,3729,3730,3732,3734],{"class":652,"line":820},[650,3731,3495],{"class":660},[650,3733,3356],{"class":739},[650,3735,3375],{"class":660},[650,3737,3738],{"class":652,"line":826},[650,3739,712],{"emptyLinePlaceholder":711},[650,3741,3742,3744,3746],{"class":652,"line":840},[650,3743,3353],{"class":660},[650,3745,3510],{"class":739},[650,3747,3375],{"class":660},[650,3749,3750,3752,3755,3758,3760,3762,3765,3767,3770],{"class":652,"line":856},[650,3751,3517],{"class":660},[650,3753,3754],{"class":739},"v-progress-linear",[650,3756,3757],{"class":718}," v-if",[650,3759,1902],{"class":660},[650,3761,3367],{"class":660},[650,3763,3764],{"class":677},"signals.loading",[650,3766,3367],{"class":660},[650,3768,3769],{"class":718}," indeterminate",[650,3771,3772],{"class":660}," \u002F>\n",[650,3774,3775,3777,3780,3783,3785,3787,3790,3792],{"class":652,"line":870},[650,3776,3517],{"class":660},[650,3778,3779],{"class":739},"div",[650,3781,3782],{"class":718}," v-else-if",[650,3784,1902],{"class":660},[650,3786,3367],{"class":660},[650,3788,3789],{"class":677},"signals.loaded",[650,3791,3367],{"class":660},[650,3793,3375],{"class":660},[650,3795,3796,3799,3801,3804,3806,3808,3811,3813,3816,3818,3820,3823,3825],{"class":652,"line":875},[650,3797,3798],{"class":660},"    \u003C",[650,3800,3779],{"class":739},[650,3802,3803],{"class":718}," v-for",[650,3805,1902],{"class":660},[650,3807,3367],{"class":660},[650,3809,3810],{"class":677},"item in signals.data",[650,3812,3367],{"class":660},[650,3814,3815],{"class":718}," :key",[650,3817,1902],{"class":660},[650,3819,3367],{"class":660},[650,3821,3822],{"class":677},"item.id",[650,3824,3367],{"class":660},[650,3826,3375],{"class":660},[650,3828,3829],{"class":652,"line":889},[650,3830,3831],{"class":664},"      {{ item.title }}\n",[650,3833,3834,3837,3839],{"class":652,"line":905},[650,3835,3836],{"class":660},"    \u003C\u002F",[650,3838,3779],{"class":739},[650,3840,3375],{"class":660},[650,3842,3843,3846,3848],{"class":652,"line":918},[650,3844,3845],{"class":660},"  \u003C\u002F",[650,3847,3779],{"class":739},[650,3849,3375],{"class":660},[650,3851,3852,3854,3856],{"class":652,"line":924},[650,3853,3495],{"class":660},[650,3855,3510],{"class":739},[650,3857,3375],{"class":660},[402,3859,3861,3862,489],{"id":3860},"_3-per-instance-customization-call-site-options","3. Per-Instance Customization (Call-Site ",[363,3863,3864],{},"options",[359,3866,3867,3868,3871,3872,452,3874,3876],{},"When calling ",[363,3869,3870],{},"useAPI('namespace', options)",", you can pass per-instance options to override or customize the endpoint's default ",[363,3873,1037],{},[363,3875,428],{}," configuration at the call site:",[641,3878,3880],{"className":643,"code":3879,"language":645,"meta":646,"style":646},"const api = useAPI('example', {\n  model: { key: 'value' },\n  query: { search: 'term' }\n})\n",[363,3881,3882,3906,3929,3952],{"__ignoreMap":646},[650,3883,3884,3886,3889,3891,3893,3895,3897,3900,3902,3904],{"class":652,"line":653},[650,3885,719],{"class":718},[650,3887,3888],{"class":664}," api ",[650,3890,1902],{"class":660},[650,3892,1905],{"class":745},[650,3894,748],{"class":664},[650,3896,751],{"class":660},[650,3898,3899],{"class":677},"example",[650,3901,751],{"class":660},[650,3903,3429],{"class":660},[650,3905,733],{"class":660},[650,3907,3908,3910,3912,3914,3917,3919,3921,3924,3926],{"class":652,"line":684},[650,3909,1442],{"class":739},[650,3911,521],{"class":660},[650,3913,661],{"class":660},[650,3915,3916],{"class":739}," key",[650,3918,521],{"class":660},[650,3920,674],{"class":660},[650,3922,3923],{"class":677},"value",[650,3925,751],{"class":660},[650,3927,3928],{"class":660}," },\n",[650,3930,3931,3934,3936,3938,3941,3943,3945,3948,3950],{"class":652,"line":708},[650,3932,3933],{"class":739},"  query",[650,3935,521],{"class":660},[650,3937,661],{"class":660},[650,3939,3940],{"class":739}," search",[650,3942,521],{"class":660},[650,3944,674],{"class":660},[650,3946,3947],{"class":677},"term",[650,3949,751],{"class":660},[650,3951,1611],{"class":660},[650,3953,3954,3956],{"class":652,"line":715},[650,3955,3445],{"class":660},[650,3957,1917],{"class":664},[359,3959,3960],{},"This is particularly useful when a component requires a specific initial payload shape, custom query filters, or isolated query scoping.",[1158,3962,3964,3965,3967],{"id":3963},"a-overriding-or-providing-initial-model-payload","A. Overriding or Providing Initial ",[363,3966,1037],{}," Payload",[359,3969,3970,3971,3973],{},"You can pass a static ",[363,3972,393],{}," class constructor, a custom object literal, or a pre-configured model instance:",[641,3975,3977],{"className":643,"code":3976,"language":645,"meta":646,"style":646},"\u002F\u002F 1. Passing a static BaseDataModel class constructor (auto-instantiated and setup by useAPI)\nconst productApi = useAPI('product.internal.update', {\n  model: ProductModel\n})\n\n\u002F\u002F 2. Passing a custom object literal as the initial model payload\nconst featureCreate = useAPI('feature.internal.create', {\n  model: { name: 'New Feature', description: '' }\n})\n\n\u002F\u002F 3. Passing a pre-configured BaseDataModel instance\nconst customProduct = new ProductModel().setup({ active: true })\nconst customProductApi = useAPI('product.internal.update', {\n  model: customProduct\n})\n",[363,3978,3979,3984,4008,4017,4023,4027,4032,4056,4086,4092,4096,4101,4135,4158,4167],{"__ignoreMap":646},[650,3980,3981],{"class":652,"line":653},[650,3982,3983],{"class":1436},"\u002F\u002F 1. Passing a static BaseDataModel class constructor (auto-instantiated and setup by useAPI)\n",[650,3985,3986,3988,3991,3993,3995,3997,3999,4002,4004,4006],{"class":652,"line":684},[650,3987,719],{"class":718},[650,3989,3990],{"class":664}," productApi ",[650,3992,1902],{"class":660},[650,3994,1905],{"class":745},[650,3996,748],{"class":664},[650,3998,751],{"class":660},[650,4000,4001],{"class":677},"product.internal.update",[650,4003,751],{"class":660},[650,4005,3429],{"class":660},[650,4007,733],{"class":660},[650,4009,4010,4012,4014],{"class":652,"line":708},[650,4011,1442],{"class":739},[650,4013,521],{"class":660},[650,4015,4016],{"class":664}," ProductModel\n",[650,4018,4019,4021],{"class":652,"line":715},[650,4020,3445],{"class":660},[650,4022,1917],{"class":664},[650,4024,4025],{"class":652,"line":736},[650,4026,712],{"emptyLinePlaceholder":711},[650,4028,4029],{"class":652,"line":764},[650,4030,4031],{"class":1436},"\u002F\u002F 2. Passing a custom object literal as the initial model payload\n",[650,4033,4034,4036,4039,4041,4043,4045,4047,4050,4052,4054],{"class":652,"line":774},[650,4035,719],{"class":718},[650,4037,4038],{"class":664}," featureCreate ",[650,4040,1902],{"class":660},[650,4042,1905],{"class":745},[650,4044,748],{"class":664},[650,4046,751],{"class":660},[650,4048,4049],{"class":677},"feature.internal.create",[650,4051,751],{"class":660},[650,4053,3429],{"class":660},[650,4055,733],{"class":660},[650,4057,4058,4060,4062,4064,4066,4068,4070,4073,4075,4077,4080,4082,4084],{"class":652,"line":788},[650,4059,1442],{"class":739},[650,4061,521],{"class":660},[650,4063,661],{"class":660},[650,4065,2497],{"class":739},[650,4067,521],{"class":660},[650,4069,674],{"class":660},[650,4071,4072],{"class":677},"New Feature",[650,4074,751],{"class":660},[650,4076,3429],{"class":660},[650,4078,4079],{"class":739}," description",[650,4081,521],{"class":660},[650,4083,1608],{"class":660},[650,4085,1611],{"class":660},[650,4087,4088,4090],{"class":652,"line":805},[650,4089,3445],{"class":660},[650,4091,1917],{"class":664},[650,4093,4094],{"class":652,"line":820},[650,4095,712],{"emptyLinePlaceholder":711},[650,4097,4098],{"class":652,"line":826},[650,4099,4100],{"class":1436},"\u002F\u002F 3. Passing a pre-configured BaseDataModel instance\n",[650,4102,4103,4105,4108,4110,4112,4114,4116,4118,4120,4122,4124,4127,4129,4131,4133],{"class":652,"line":840},[650,4104,719],{"class":718},[650,4106,4107],{"class":664}," customProduct ",[650,4109,1902],{"class":660},[650,4111,2480],{"class":660},[650,4113,1983],{"class":745},[650,4115,2059],{"class":664},[650,4117,456],{"class":660},[650,4119,2489],{"class":745},[650,4121,748],{"class":664},[650,4123,2494],{"class":660},[650,4125,4126],{"class":739}," active",[650,4128,521],{"class":660},[650,4130,1500],{"class":1499},[650,4132,668],{"class":660},[650,4134,1917],{"class":664},[650,4136,4137,4139,4142,4144,4146,4148,4150,4152,4154,4156],{"class":652,"line":856},[650,4138,719],{"class":718},[650,4140,4141],{"class":664}," customProductApi ",[650,4143,1902],{"class":660},[650,4145,1905],{"class":745},[650,4147,748],{"class":664},[650,4149,751],{"class":660},[650,4151,4001],{"class":677},[650,4153,751],{"class":660},[650,4155,3429],{"class":660},[650,4157,733],{"class":660},[650,4159,4160,4162,4164],{"class":652,"line":870},[650,4161,1442],{"class":739},[650,4163,521],{"class":660},[650,4165,4166],{"class":664}," customProduct\n",[650,4168,4169,4171],{"class":652,"line":875},[650,4170,3445],{"class":660},[650,4172,1917],{"class":664},[1158,4174,4176,4177,3260],{"id":4175},"b-overriding-or-providing-custom-query-parameters","B. Overriding or Providing Custom ",[363,4178,428],{},[359,4180,4181,4182,4184,4185,4187],{},"You can supply per-instance query options as a static ",[363,4183,399],{}," class constructor, a plain object literal, or a pre-configured ",[363,4186,399],{}," instance:",[641,4189,4191],{"className":643,"code":4190,"language":645,"meta":646,"style":646},"\u002F\u002F 1. Passing a static BaseQuery class constructor (auto-instantiated by useAPI)\nconst tagsApi = useAPI('meta.tags', {\n  query: TagsQuery\n})\n\n\u002F\u002F 2. Passing a plain query object literal (automatically wrapped in WrappedQuery)\nconst customTagsApi = useAPI('meta.tags', {\n  query: { type: 'system', searchTerm: 'security' }\n})\n\n\u002F\u002F 3. Passing a pre-configured, scoped BaseQuery instance\nconst dialogQuery = new TagsQuery('dialogScope')\ndialogQuery.searchTerm = 'audit'\n\nconst scopedTagsApi = useAPI('meta.tags', {\n  query: dialogQuery\n})\n",[363,4192,4193,4198,4221,4230,4236,4240,4245,4268,4303,4309,4313,4318,4342,4360,4364,4387,4396],{"__ignoreMap":646},[650,4194,4195],{"class":652,"line":653},[650,4196,4197],{"class":1436},"\u002F\u002F 1. Passing a static BaseQuery class constructor (auto-instantiated by useAPI)\n",[650,4199,4200,4202,4205,4207,4209,4211,4213,4215,4217,4219],{"class":652,"line":684},[650,4201,719],{"class":718},[650,4203,4204],{"class":664}," tagsApi ",[650,4206,1902],{"class":660},[650,4208,1905],{"class":745},[650,4210,748],{"class":664},[650,4212,751],{"class":660},[650,4214,1912],{"class":677},[650,4216,751],{"class":660},[650,4218,3429],{"class":660},[650,4220,733],{"class":660},[650,4222,4223,4225,4227],{"class":652,"line":708},[650,4224,3933],{"class":739},[650,4226,521],{"class":660},[650,4228,4229],{"class":664}," TagsQuery\n",[650,4231,4232,4234],{"class":652,"line":715},[650,4233,3445],{"class":660},[650,4235,1917],{"class":664},[650,4237,4238],{"class":652,"line":736},[650,4239,712],{"emptyLinePlaceholder":711},[650,4241,4242],{"class":652,"line":764},[650,4243,4244],{"class":1436},"\u002F\u002F 2. Passing a plain query object literal (automatically wrapped in WrappedQuery)\n",[650,4246,4247,4249,4252,4254,4256,4258,4260,4262,4264,4266],{"class":652,"line":774},[650,4248,719],{"class":718},[650,4250,4251],{"class":664}," customTagsApi ",[650,4253,1902],{"class":660},[650,4255,1905],{"class":745},[650,4257,748],{"class":664},[650,4259,751],{"class":660},[650,4261,1912],{"class":677},[650,4263,751],{"class":660},[650,4265,3429],{"class":660},[650,4267,733],{"class":660},[650,4269,4270,4272,4274,4276,4278,4280,4282,4285,4287,4289,4292,4294,4296,4299,4301],{"class":652,"line":788},[650,4271,3933],{"class":739},[650,4273,521],{"class":660},[650,4275,661],{"class":660},[650,4277,689],{"class":739},[650,4279,521],{"class":660},[650,4281,674],{"class":660},[650,4283,4284],{"class":677},"system",[650,4286,751],{"class":660},[650,4288,3429],{"class":660},[650,4290,4291],{"class":739}," searchTerm",[650,4293,521],{"class":660},[650,4295,674],{"class":660},[650,4297,4298],{"class":677},"security",[650,4300,751],{"class":660},[650,4302,1611],{"class":660},[650,4304,4305,4307],{"class":652,"line":805},[650,4306,3445],{"class":660},[650,4308,1917],{"class":664},[650,4310,4311],{"class":652,"line":820},[650,4312,712],{"emptyLinePlaceholder":711},[650,4314,4315],{"class":652,"line":826},[650,4316,4317],{"class":1436},"\u002F\u002F 3. Passing a pre-configured, scoped BaseQuery instance\n",[650,4319,4320,4322,4325,4327,4329,4331,4333,4335,4338,4340],{"class":652,"line":840},[650,4321,719],{"class":718},[650,4323,4324],{"class":664}," dialogQuery ",[650,4326,1902],{"class":660},[650,4328,2480],{"class":660},[650,4330,2995],{"class":745},[650,4332,748],{"class":664},[650,4334,751],{"class":660},[650,4336,4337],{"class":677},"dialogScope",[650,4339,751],{"class":660},[650,4341,1917],{"class":664},[650,4343,4344,4347,4349,4351,4353,4355,4358],{"class":652,"line":856},[650,4345,4346],{"class":664},"dialogQuery",[650,4348,456],{"class":660},[650,4350,3019],{"class":664},[650,4352,1902],{"class":660},[650,4354,674],{"class":660},[650,4356,4357],{"class":677},"audit",[650,4359,681],{"class":660},[650,4361,4362],{"class":652,"line":870},[650,4363,712],{"emptyLinePlaceholder":711},[650,4365,4366,4368,4371,4373,4375,4377,4379,4381,4383,4385],{"class":652,"line":875},[650,4367,719],{"class":718},[650,4369,4370],{"class":664}," scopedTagsApi ",[650,4372,1902],{"class":660},[650,4374,1905],{"class":745},[650,4376,748],{"class":664},[650,4378,751],{"class":660},[650,4380,1912],{"class":677},[650,4382,751],{"class":660},[650,4384,3429],{"class":660},[650,4386,733],{"class":660},[650,4388,4389,4391,4393],{"class":652,"line":889},[650,4390,3933],{"class":739},[650,4392,521],{"class":660},[650,4394,4395],{"class":664}," dialogQuery\n",[650,4397,4398,4400],{"class":652,"line":905},[650,4399,3445],{"class":660},[650,4401,1917],{"class":664},[1158,4403,4405,4406,1142,4408],{"id":4404},"c-passing-static-class-constructors-for-both-model-and-query","C. Passing Static Class Constructors for Both ",[363,4407,1037],{},[363,4409,428],{},[359,4411,4412,4413,4415,4416,4418],{},"You can simply pass both static class constructors to ",[363,4414,201],{},". ",[363,4417,201],{}," will automatically instantiate and initialize both the model and query instances:",[641,4420,4422],{"className":643,"code":4421,"language":645,"meta":646,"style":646},"const productApi = useAPI('product.internal.update', {\n  model: ProductModel,\n  query: ProductQuery\n})\n",[363,4423,4424,4446,4456,4465],{"__ignoreMap":646},[650,4425,4426,4428,4430,4432,4434,4436,4438,4440,4442,4444],{"class":652,"line":653},[650,4427,719],{"class":718},[650,4429,3990],{"class":664},[650,4431,1902],{"class":660},[650,4433,1905],{"class":745},[650,4435,748],{"class":664},[650,4437,751],{"class":660},[650,4439,4001],{"class":677},[650,4441,751],{"class":660},[650,4443,3429],{"class":660},[650,4445,733],{"class":660},[650,4447,4448,4450,4452,4454],{"class":652,"line":684},[650,4449,1442],{"class":739},[650,4451,521],{"class":660},[650,4453,1983],{"class":664},[650,4455,761],{"class":660},[650,4457,4458,4460,4462],{"class":652,"line":708},[650,4459,3933],{"class":739},[650,4461,521],{"class":660},[650,4463,4464],{"class":664}," ProductQuery\n",[650,4466,4467,4469],{"class":652,"line":715},[650,4468,3445],{"class":660},[650,4470,1917],{"class":664},[1158,4472,4474],{"id":4473},"d-combining-object-literals-or-custom-overrides","D. Combining Object Literals or Custom Overrides",[641,4476,4478],{"className":643,"code":4477,"language":645,"meta":646,"style":646},"const directiveApi = useAPI('settings.directive.list', {\n  model: { key: 'theme', value: 'dark' },\n  query: { category: 'user-preference', limit: 10 }\n})\n",[363,4479,4480,4504,4539,4572],{"__ignoreMap":646},[650,4481,4482,4484,4487,4489,4491,4493,4495,4498,4500,4502],{"class":652,"line":653},[650,4483,719],{"class":718},[650,4485,4486],{"class":664}," directiveApi ",[650,4488,1902],{"class":660},[650,4490,1905],{"class":745},[650,4492,748],{"class":664},[650,4494,751],{"class":660},[650,4496,4497],{"class":677},"settings.directive.list",[650,4499,751],{"class":660},[650,4501,3429],{"class":660},[650,4503,733],{"class":660},[650,4505,4506,4508,4510,4512,4514,4516,4518,4521,4523,4525,4528,4530,4532,4535,4537],{"class":652,"line":684},[650,4507,1442],{"class":739},[650,4509,521],{"class":660},[650,4511,661],{"class":660},[650,4513,3916],{"class":739},[650,4515,521],{"class":660},[650,4517,674],{"class":660},[650,4519,4520],{"class":677},"theme",[650,4522,751],{"class":660},[650,4524,3429],{"class":660},[650,4526,4527],{"class":739}," value",[650,4529,521],{"class":660},[650,4531,674],{"class":660},[650,4533,4534],{"class":677},"dark",[650,4536,751],{"class":660},[650,4538,3928],{"class":660},[650,4540,4541,4543,4545,4547,4550,4552,4554,4557,4559,4561,4564,4566,4570],{"class":652,"line":708},[650,4542,3933],{"class":739},[650,4544,521],{"class":660},[650,4546,661],{"class":660},[650,4548,4549],{"class":739}," category",[650,4551,521],{"class":660},[650,4553,674],{"class":660},[650,4555,4556],{"class":677},"user-preference",[650,4558,751],{"class":660},[650,4560,3429],{"class":660},[650,4562,4563],{"class":739}," limit",[650,4565,521],{"class":660},[650,4567,4569],{"class":4568},"sbssI"," 10",[650,4571,1611],{"class":660},[650,4573,4574,4576],{"class":652,"line":715},[650,4575,3445],{"class":660},[650,4577,1917],{"class":664},[378,4579,4580,4581,4584,4585,456],{},"Options supplied to ",[363,4582,4583],{},"useAPI(namespace, options)"," take precedence over the endpoint defaults registered in ",[363,4586,4587],{},"src\u002Fapi\u002F*.ts",[480,4589],{},[354,4591,4593],{"id":4592},"api-reference","API Reference",[359,4595,4596,4597,4600,4601,4604],{},"Invoking ",[363,4598,4599],{},"useAPI(namespace, options?)"," returns an ",[363,4602,4603],{},"ApiInstance"," object containing the following properties and methods:",[523,4606,4607,4618],{},[526,4608,4609],{},[529,4610,4611,4614,4616],{},[532,4612,4613],{},"Member",[532,4615,966],{},[532,4617,972],{},[545,4619,4620,4634,4647,4663,4678,4693,4707,4722,4737,4760,4777],{},[529,4621,4622,4626,4631],{},[550,4623,4624],{},[363,4625,425],{},[550,4627,4628],{},[363,4629,4630],{},"BaseDataModel | BaseListModel | Object | Array",[550,4632,4633],{},"Reactive data instance populated with the response resource upon request completion.",[529,4635,4636,4640,4644],{},[550,4637,4638],{},[363,4639,428],{},[550,4641,4642],{},[363,4643,399],{},[550,4645,4646],{},"Reactive query instance holding URL search parameters.",[529,4648,4649,4653,4658],{},[550,4650,4651],{},[363,4652,431],{},[550,4654,4655],{},[363,4656,4657],{},"ShallowRef\u003Cboolean>",[550,4659,4660,4662],{},[363,4661,1101],{}," while an HTTP request is in-flight.",[529,4664,4665,4669,4673],{},[550,4666,4667],{},[363,4668,434],{},[550,4670,4671],{},[363,4672,4657],{},[550,4674,4675,4677],{},[363,4676,1101],{}," after at least one successful request has completed.",[529,4679,4680,4684,4688],{},[550,4681,4682],{},[363,4683,437],{},[550,4685,4686],{},[363,4687,4657],{},[550,4689,4690,4692],{},[363,4691,1101],{}," if the last executed request succeeded.",[529,4694,4695,4699,4704],{},[550,4696,4697],{},[363,4698,441],{},[550,4700,4701],{},[363,4702,4703],{},"ResponseErrorHandler",[550,4705,4706],{},"Error handler instance containing active response errors.",[529,4708,4709,4714,4719],{},[550,4710,4711],{},[363,4712,4713],{},"execute(options?, force?)",[550,4715,4716],{},[363,4717,4718],{},"(options?: APIExecOptions, force?: boolean) => Promise\u003Cany>",[550,4720,4721],{},"Executes the HTTP request. Accepts parameter overrides, custom Axios config, or model payloads.",[529,4723,4724,4729,4734],{},[550,4725,4726],{},[363,4727,4728],{},"refresh()",[550,4730,4731],{},[363,4732,4733],{},"() => Promise\u003Cany>",[550,4735,4736],{},"Re-executes the previous request with saved attributes, forcing a fresh network call (bypassing deduplication).",[529,4738,4739,4743,4748],{},[550,4740,4741],{},[363,4742,2446],{},[550,4744,4745],{},[363,4746,4747],{},"(data?: any, hard?: boolean) => void",[550,4749,4750,4751,2766,4753,4756,4757,4759],{},"Resets ",[363,4752,434],{},[363,4754,4755],{},"false",", resets ",[363,4758,425],{}," model, and clears error state.",[529,4761,4762,4766,4771],{},[550,4763,4764],{},[363,4765,2429],{},[550,4767,4768],{},[363,4769,4770],{},"() => void",[550,4772,4773,4774,4776],{},"Reverts modified values on ",[363,4775,425],{}," model if supported by the model instance.",[529,4778,4779,4784,4788],{},[550,4780,4781],{},[363,4782,4783],{},"recallable()",[550,4785,4786],{},[363,4787,4770],{},[550,4789,4790],{},"Clears the request deduplication memory for this endpoint.",[480,4792],{},[354,4794,4796],{"id":4795},"core-behaviors-architecture","Core Behaviors & Architecture",[402,4798,4800],{"id":4799},"path-parameter-interpolation","Path Parameter Interpolation",[359,4802,4803,4804,4806,4807,4809],{},"If an endpoint path includes parameters prefixed with a colon (e.g. ",[363,4805,451],{},"), ",[363,4808,201],{}," resolves these values at execution time.",[359,4811,4812],{},"Parameters are resolved from:",[4814,4815,4816,4825],"ol",{},[410,4817,361,4818,4821,4822],{},[363,4819,4820],{},"params"," object passed to ",[363,4823,4824],{},"execute({ params: { productId: 123 } })",[410,4826,4827,4828,4830],{},"Properties on the ",[363,4829,425],{}," instance matching the parameter key name",[641,4832,4834],{"className":643,"code":4833,"language":645,"meta":646,"style":646},"const patcher = useAPI('insights.signals.patch')\n\n\u002F\u002F Path: \u002Fv1\u002Finsights\u002Fsignals\u002F:signalId\nawait patcher.execute({\n  params: { signalId: 'sig_123' },\n  model: { title: 'Updated Title' }\n})\n",[363,4835,4836,4858,4862,4867,4884,4907,4929],{"__ignoreMap":646},[650,4837,4838,4840,4843,4845,4847,4849,4851,4854,4856],{"class":652,"line":653},[650,4839,719],{"class":718},[650,4841,4842],{"class":664}," patcher ",[650,4844,1902],{"class":660},[650,4846,1905],{"class":745},[650,4848,748],{"class":664},[650,4850,751],{"class":660},[650,4852,4853],{"class":677},"insights.signals.patch",[650,4855,751],{"class":660},[650,4857,1917],{"class":664},[650,4859,4860],{"class":652,"line":684},[650,4861,712],{"emptyLinePlaceholder":711},[650,4863,4864],{"class":652,"line":708},[650,4865,4866],{"class":1436},"\u002F\u002F Path: \u002Fv1\u002Finsights\u002Fsignals\u002F:signalId\n",[650,4868,4869,4872,4875,4877,4879,4881],{"class":652,"line":715},[650,4870,4871],{"class":656},"await",[650,4873,4874],{"class":664}," patcher",[650,4876,456],{"class":660},[650,4878,3719],{"class":745},[650,4880,748],{"class":664},[650,4882,4883],{"class":660},"{\n",[650,4885,4886,4889,4891,4893,4896,4898,4900,4903,4905],{"class":652,"line":736},[650,4887,4888],{"class":739},"  params",[650,4890,521],{"class":660},[650,4892,661],{"class":660},[650,4894,4895],{"class":739}," signalId",[650,4897,521],{"class":660},[650,4899,674],{"class":660},[650,4901,4902],{"class":677},"sig_123",[650,4904,751],{"class":660},[650,4906,3928],{"class":660},[650,4908,4909,4911,4913,4915,4918,4920,4922,4925,4927],{"class":652,"line":764},[650,4910,1442],{"class":739},[650,4912,521],{"class":660},[650,4914,661],{"class":660},[650,4916,4917],{"class":739}," title",[650,4919,521],{"class":660},[650,4921,674],{"class":660},[650,4923,4924],{"class":677},"Updated Title",[650,4926,751],{"class":660},[650,4928,1611],{"class":660},[650,4930,4931,4933],{"class":652,"line":774},[650,4932,3445],{"class":660},[650,4934,1917],{"class":664},[402,4936,461],{"id":4937},"request-deduplication",[359,4939,4940,4941,4943,4944,4946],{},"To minimize unnecessary network traffic, ",[363,4942,201],{}," automatically deduplicates identical ",[363,4945,465],{}," requests sent to the exact same URL and query string.",[378,4948,4949,4950,4952,4953,4955],{},"If a ",[363,4951,465],{}," request is triggered with a destination URL identical to the immediate previous request, ",[363,4954,201],{}," skips execution and logs a console warning in debug mode.",[359,4957,4958,4959,2766,4962,4965,4966,521],{},"To bypass deduplication and force a network request, pass ",[363,4960,4961],{},"force = true",[363,4963,4964],{},"execute()"," or use ",[363,4967,4728],{},[641,4969,4971],{"className":643,"code":4970,"language":645,"meta":646,"style":646},"\u002F\u002F Bypasses deduplication\nawait api.refresh()\n\n\u002F\u002F Or explicitly force execution\nawait api.execute({}, true)\n",[363,4972,4973,4978,4992,4996,5001],{"__ignoreMap":646},[650,4974,4975],{"class":652,"line":653},[650,4976,4977],{"class":1436},"\u002F\u002F Bypasses deduplication\n",[650,4979,4980,4982,4985,4987,4990],{"class":652,"line":684},[650,4981,4871],{"class":656},[650,4983,4984],{"class":664}," api",[650,4986,456],{"class":660},[650,4988,4989],{"class":745},"refresh",[650,4991,2069],{"class":664},[650,4993,4994],{"class":652,"line":708},[650,4995,712],{"emptyLinePlaceholder":711},[650,4997,4998],{"class":652,"line":715},[650,4999,5000],{"class":1436},"\u002F\u002F Or explicitly force execution\n",[650,5002,5003,5005,5007,5009,5011,5013,5016,5018],{"class":652,"line":736},[650,5004,4871],{"class":656},[650,5006,4984],{"class":664},[650,5008,456],{"class":660},[650,5010,3719],{"class":745},[650,5012,748],{"class":664},[650,5014,5015],{"class":660},"{},",[650,5017,1500],{"class":1499},[650,5019,1917],{"class":664},[402,5021,5023],{"id":5022},"automatic-request-cancellation","Automatic Request Cancellation",[359,5025,5026,5027,5029,5030,5032,5033,5035,5036,456],{},"If ",[363,5028,4964],{}," is called on a ",[363,5031,201],{}," instance while a previous request for the same endpoint is still pending, ",[363,5034,201],{}," automatically aborts the previous in-flight request via ",[363,5037,5038],{},"AbortController",[402,5040,5042],{"id":5041},"authentication-error-handling","Authentication & Error Handling",[4814,5044,5045,5061,5071],{},[410,5046,5047,1139,5050,5052,5053,5056,5057,5060],{},[413,5048,5049],{},"Token Injection",[363,5051,201],{}," calls ",[363,5054,5055],{},"waitUntilAuthed()"," and attaches the ",[363,5058,5059],{},"Authorization: Bearer \u003Ctoken>"," header automatically before sending authenticated requests.",[410,5062,5063,5066,5067,5070],{},[413,5064,5065],{},"401 Unauthorized",": Automatically triggers silent sign-out (",[363,5068,5069],{},"signoutSilent()",") to re-authenticate the user session.",[410,5072,5073,5076,5077,5080,5081],{},[413,5074,5075],{},"403 Forbidden",": Intercepts HTTP 403 responses and presents an interactive ",[363,5078,5079],{},"Confirmation.Acknowledge()"," modal detailing:\n",[407,5082,5083,5086,5089],{},[410,5084,5085],{},"Target HTTP method and endpoint URL",[410,5087,5088],{},"User identity (Email, Client Type, Client ID, Organisation ID)",[410,5090,5091],{},"Assigned security policy actions",[480,5093],{},[354,5095,5097],{"id":5096},"code-examples","Code Examples",[402,5099,5101],{"id":5100},"form-submission-with-payload","Form Submission with Payload",[641,5103,5106],{"className":3343,"code":5104,"filename":5105,"language":3346,"meta":646,"style":646},"\u003Cscript setup lang=\"ts\">\nimport { ref } from 'vue'\nimport { useAPI } from '@\u002Fcomposables\u002FuseAPI'\n\nconst props = defineProps\u003C{ productId: string }>()\nconst emit = defineEmits(['saved'])\n\nconst featureCreate = useAPI('feature.internal.create', {\n  model: { name: '', description: '' }\n})\n\nconst save = async () => {\n  try {\n    await featureCreate.execute({\n      params: { productId: props.productId }\n    })\n    emit('saved')\n  } catch (err) {\n    \u002F\u002F Error is automatically populated in featureCreate.error\n  }\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cv-card>\n    \u003Cv-card-text>\n      \u003Cv-text-field v-model=\"featureCreate.data.name\" label=\"Feature Name\" \u002F>\n      \u003Cv-textarea v-model=\"featureCreate.data.description\" label=\"Description\" \u002F>\n    \u003C\u002Fv-card-text>\n    \u003Cv-card-actions>\n      \u003Cv-btn\n        :loading=\"featureCreate.loading\"\n        color=\"primary\"\n        @click=\"save\"\n      >\n        Create Feature\n      \u003C\u002Fv-btn>\n    \u003C\u002Fv-card-actions>\n  \u003C\u002Fv-card>\n\u003C\u002Ftemplate>\n","components\u002Fadd-feature-dialog.vue",[363,5107,5108,5128,5147,5165,5169,5196,5221,5225,5247,5271,5277,5281,5300,5307,5323,5346,5353,5368,5385,5390,5394,5398,5406,5410,5418,5427,5436,5470,5500,5508,5517,5524,5538,5552,5566,5571,5576,5586,5594,5602],{"__ignoreMap":646},[650,5109,5110,5112,5114,5116,5118,5120,5122,5124,5126],{"class":652,"line":653},[650,5111,3353],{"class":660},[650,5113,3356],{"class":739},[650,5115,3359],{"class":718},[650,5117,3362],{"class":718},[650,5119,1902],{"class":660},[650,5121,3367],{"class":660},[650,5123,3370],{"class":677},[650,5125,3367],{"class":660},[650,5127,3375],{"class":660},[650,5129,5130,5132,5134,5137,5139,5141,5143,5145],{"class":652,"line":684},[650,5131,657],{"class":656},[650,5133,661],{"class":660},[650,5135,5136],{"class":664}," ref",[650,5138,668],{"class":660},[650,5140,671],{"class":656},[650,5142,674],{"class":660},[650,5144,3346],{"class":677},[650,5146,681],{"class":660},[650,5148,5149,5151,5153,5155,5157,5159,5161,5163],{"class":652,"line":708},[650,5150,657],{"class":656},[650,5152,661],{"class":660},[650,5154,1905],{"class":664},[650,5156,668],{"class":660},[650,5158,671],{"class":656},[650,5160,674],{"class":660},[650,5162,3411],{"class":677},[650,5164,681],{"class":660},[650,5166,5167],{"class":652,"line":715},[650,5168,712],{"emptyLinePlaceholder":711},[650,5170,5171,5173,5176,5178,5181,5184,5187,5189,5191,5194],{"class":652,"line":736},[650,5172,719],{"class":718},[650,5174,5175],{"class":664}," props ",[650,5177,1902],{"class":660},[650,5179,5180],{"class":745}," defineProps",[650,5182,5183],{"class":660},"\u003C{",[650,5185,5186],{"class":739}," productId",[650,5188,521],{"class":660},[650,5190,2001],{"class":727},[650,5192,5193],{"class":660}," }>",[650,5195,2069],{"class":664},[650,5197,5198,5200,5203,5205,5208,5211,5213,5216,5218],{"class":652,"line":764},[650,5199,719],{"class":718},[650,5201,5202],{"class":664}," emit ",[650,5204,1902],{"class":660},[650,5206,5207],{"class":745}," defineEmits",[650,5209,5210],{"class":664},"([",[650,5212,751],{"class":660},[650,5214,5215],{"class":677},"saved",[650,5217,751],{"class":660},[650,5219,5220],{"class":664},"])\n",[650,5222,5223],{"class":652,"line":774},[650,5224,712],{"emptyLinePlaceholder":711},[650,5226,5227,5229,5231,5233,5235,5237,5239,5241,5243,5245],{"class":652,"line":788},[650,5228,719],{"class":718},[650,5230,4038],{"class":664},[650,5232,1902],{"class":660},[650,5234,1905],{"class":745},[650,5236,748],{"class":664},[650,5238,751],{"class":660},[650,5240,4049],{"class":677},[650,5242,751],{"class":660},[650,5244,3429],{"class":660},[650,5246,733],{"class":660},[650,5248,5249,5251,5253,5255,5257,5259,5261,5263,5265,5267,5269],{"class":652,"line":805},[650,5250,1442],{"class":739},[650,5252,521],{"class":660},[650,5254,661],{"class":660},[650,5256,2497],{"class":739},[650,5258,521],{"class":660},[650,5260,1608],{"class":660},[650,5262,3429],{"class":660},[650,5264,4079],{"class":739},[650,5266,521],{"class":660},[650,5268,1608],{"class":660},[650,5270,1611],{"class":660},[650,5272,5273,5275],{"class":652,"line":820},[650,5274,3445],{"class":660},[650,5276,1917],{"class":664},[650,5278,5279],{"class":652,"line":826},[650,5280,712],{"emptyLinePlaceholder":711},[650,5282,5283,5285,5288,5290,5293,5296,5298],{"class":652,"line":840},[650,5284,719],{"class":718},[650,5286,5287],{"class":664}," save ",[650,5289,1902],{"class":660},[650,5291,5292],{"class":718}," async",[650,5294,5295],{"class":660}," ()",[650,5297,3475],{"class":718},[650,5299,733],{"class":660},[650,5301,5302,5305],{"class":652,"line":856},[650,5303,5304],{"class":656},"  try",[650,5306,733],{"class":660},[650,5308,5309,5312,5315,5317,5319,5321],{"class":652,"line":870},[650,5310,5311],{"class":656},"    await",[650,5313,5314],{"class":664}," featureCreate",[650,5316,456],{"class":660},[650,5318,3719],{"class":745},[650,5320,748],{"class":739},[650,5322,4883],{"class":660},[650,5324,5325,5328,5330,5332,5334,5336,5339,5341,5344],{"class":652,"line":875},[650,5326,5327],{"class":739},"      params",[650,5329,521],{"class":660},[650,5331,661],{"class":660},[650,5333,5186],{"class":739},[650,5335,521],{"class":660},[650,5337,5338],{"class":664}," props",[650,5340,456],{"class":660},[650,5342,5343],{"class":664},"productId",[650,5345,1611],{"class":660},[650,5347,5348,5351],{"class":652,"line":889},[650,5349,5350],{"class":660},"    }",[650,5352,1917],{"class":739},[650,5354,5355,5358,5360,5362,5364,5366],{"class":652,"line":905},[650,5356,5357],{"class":745},"    emit",[650,5359,748],{"class":739},[650,5361,751],{"class":660},[650,5363,5215],{"class":677},[650,5365,751],{"class":660},[650,5367,1917],{"class":739},[650,5369,5370,5373,5376,5378,5381,5383],{"class":652,"line":918},[650,5371,5372],{"class":660},"  }",[650,5374,5375],{"class":656}," catch",[650,5377,1202],{"class":739},[650,5379,5380],{"class":664},"err",[650,5382,2905],{"class":739},[650,5384,4883],{"class":660},[650,5386,5387],{"class":652,"line":924},[650,5388,5389],{"class":1436},"    \u002F\u002F Error is automatically populated in featureCreate.error\n",[650,5391,5392],{"class":652,"line":930},[650,5393,927],{"class":660},[650,5395,5396],{"class":652,"line":936},[650,5397,933],{"class":660},[650,5399,5400,5402,5404],{"class":652,"line":941},[650,5401,3495],{"class":660},[650,5403,3356],{"class":739},[650,5405,3375],{"class":660},[650,5407,5408],{"class":652,"line":1537},[650,5409,712],{"emptyLinePlaceholder":711},[650,5411,5412,5414,5416],{"class":652,"line":1551},[650,5413,3353],{"class":660},[650,5415,3510],{"class":739},[650,5417,3375],{"class":660},[650,5419,5420,5422,5425],{"class":652,"line":1556},[650,5421,3517],{"class":660},[650,5423,5424],{"class":739},"v-card",[650,5426,3375],{"class":660},[650,5428,5429,5431,5434],{"class":652,"line":1561},[650,5430,3798],{"class":660},[650,5432,5433],{"class":739},"v-card-text",[650,5435,3375],{"class":660},[650,5437,5438,5441,5444,5447,5449,5451,5454,5456,5459,5461,5463,5466,5468],{"class":652,"line":1567},[650,5439,5440],{"class":660},"      \u003C",[650,5442,5443],{"class":739},"v-text-field",[650,5445,5446],{"class":718}," v-model",[650,5448,1902],{"class":660},[650,5450,3367],{"class":660},[650,5452,5453],{"class":677},"featureCreate.data.name",[650,5455,3367],{"class":660},[650,5457,5458],{"class":718}," label",[650,5460,1902],{"class":660},[650,5462,3367],{"class":660},[650,5464,5465],{"class":677},"Feature Name",[650,5467,3367],{"class":660},[650,5469,3772],{"class":660},[650,5471,5472,5474,5477,5479,5481,5483,5486,5488,5490,5492,5494,5496,5498],{"class":652,"line":1577},[650,5473,5440],{"class":660},[650,5475,5476],{"class":739},"v-textarea",[650,5478,5446],{"class":718},[650,5480,1902],{"class":660},[650,5482,3367],{"class":660},[650,5484,5485],{"class":677},"featureCreate.data.description",[650,5487,3367],{"class":660},[650,5489,5458],{"class":718},[650,5491,1902],{"class":660},[650,5493,3367],{"class":660},[650,5495,972],{"class":677},[650,5497,3367],{"class":660},[650,5499,3772],{"class":660},[650,5501,5502,5504,5506],{"class":652,"line":1593},[650,5503,3836],{"class":660},[650,5505,5433],{"class":739},[650,5507,3375],{"class":660},[650,5509,5510,5512,5515],{"class":652,"line":1614},[650,5511,3798],{"class":660},[650,5513,5514],{"class":739},"v-card-actions",[650,5516,3375],{"class":660},[650,5518,5519,5521],{"class":652,"line":1619},[650,5520,5440],{"class":660},[650,5522,5523],{"class":739},"v-btn\n",[650,5525,5526,5529,5531,5533,5536],{"class":652,"line":1624},[650,5527,5528],{"class":718},"        :loading",[650,5530,1902],{"class":660},[650,5532,3367],{"class":660},[650,5534,5535],{"class":677},"featureCreate.loading",[650,5537,3535],{"class":660},[650,5539,5540,5543,5545,5547,5550],{"class":652,"line":1630},[650,5541,5542],{"class":718},"        color",[650,5544,1902],{"class":660},[650,5546,3367],{"class":660},[650,5548,5549],{"class":677},"primary",[650,5551,3535],{"class":660},[650,5553,5554,5557,5559,5561,5564],{"class":652,"line":1640},[650,5555,5556],{"class":718},"        @click",[650,5558,1902],{"class":660},[650,5560,3367],{"class":660},[650,5562,5563],{"class":677},"save",[650,5565,3535],{"class":660},[650,5567,5568],{"class":652,"line":1656},[650,5569,5570],{"class":660},"      >\n",[650,5572,5573],{"class":652,"line":1667},[650,5574,5575],{"class":664},"        Create Feature\n",[650,5577,5578,5581,5584],{"class":652,"line":1676},[650,5579,5580],{"class":660},"      \u003C\u002F",[650,5582,5583],{"class":739},"v-btn",[650,5585,3375],{"class":660},[650,5587,5588,5590,5592],{"class":652,"line":1681},[650,5589,3836],{"class":660},[650,5591,5514],{"class":739},[650,5593,3375],{"class":660},[650,5595,5596,5598,5600],{"class":652,"line":1686},[650,5597,3845],{"class":660},[650,5599,5424],{"class":739},[650,5601,3375],{"class":660},[650,5603,5604,5606,5608],{"class":652,"line":1692},[650,5605,3495],{"class":660},[650,5607,3510],{"class":739},[650,5609,3375],{"class":660},[402,5611,5613],{"id":5612},"deleting-resources-with-parameters","Deleting Resources with Parameters",[641,5615,5617],{"className":643,"code":5616,"language":645,"meta":646,"style":646},"const deletion = useAPI('insights.findings.delete')\n\nconst removeFinding = async (findingId: string) => {\n  await deletion.execute({\n    params: { findingId }\n  })\n}\n",[363,5618,5619,5641,5645,5672,5688,5702,5708],{"__ignoreMap":646},[650,5620,5621,5623,5626,5628,5630,5632,5634,5637,5639],{"class":652,"line":653},[650,5622,719],{"class":718},[650,5624,5625],{"class":664}," deletion ",[650,5627,1902],{"class":660},[650,5629,1905],{"class":745},[650,5631,748],{"class":664},[650,5633,751],{"class":660},[650,5635,5636],{"class":677},"insights.findings.delete",[650,5638,751],{"class":660},[650,5640,1917],{"class":664},[650,5642,5643],{"class":652,"line":684},[650,5644,712],{"emptyLinePlaceholder":711},[650,5646,5647,5649,5652,5654,5656,5658,5662,5664,5666,5668,5670],{"class":652,"line":708},[650,5648,719],{"class":718},[650,5650,5651],{"class":664}," removeFinding ",[650,5653,1902],{"class":660},[650,5655,5292],{"class":718},[650,5657,1202],{"class":660},[650,5659,5661],{"class":5660},"sHdIc","findingId",[650,5663,521],{"class":660},[650,5665,2001],{"class":727},[650,5667,489],{"class":660},[650,5669,3475],{"class":718},[650,5671,733],{"class":660},[650,5673,5674,5677,5680,5682,5684,5686],{"class":652,"line":715},[650,5675,5676],{"class":656},"  await",[650,5678,5679],{"class":664}," deletion",[650,5681,456],{"class":660},[650,5683,3719],{"class":745},[650,5685,748],{"class":739},[650,5687,4883],{"class":660},[650,5689,5690,5693,5695,5697,5700],{"class":652,"line":736},[650,5691,5692],{"class":739},"    params",[650,5694,521],{"class":660},[650,5696,661],{"class":660},[650,5698,5699],{"class":664}," findingId",[650,5701,1611],{"class":660},[650,5703,5704,5706],{"class":652,"line":764},[650,5705,5372],{"class":660},[650,5707,1917],{"class":739},[650,5709,5710],{"class":652,"line":774},[650,5711,933],{"class":660},[5713,5714,5715],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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}",{"title":646,"searchDepth":684,"depth":684,"links":5717},[5718,5721,5729,5731,5742,5751,5758,5759,5765],{"id":356,"depth":684,"text":357,"children":5719},[5720],{"id":404,"depth":708,"text":405},{"id":484,"depth":684,"text":5722,"children":5723},"Defining API Endpoints (defineAPI)",[5724,5725,5726,5727],{"id":513,"depth":708,"text":514},{"id":638,"depth":708,"text":639},{"id":953,"depth":708,"text":954},{"id":1135,"depth":708,"text":5728},"Advanced APIConfig: model and query Patterns",{"id":1848,"depth":684,"text":5730},"Automatic Type Safety (vite-plugin-api-types)",{"id":1922,"depth":684,"text":5732,"children":5733},"Data Models (BaseDataModel & BaseListModel)",[5734,5736,5738,5739,5740],{"id":1937,"depth":708,"text":5735},"Subclassing BaseDataModel",{"id":2080,"depth":708,"text":5737},"Automatic Nested BaseListModel Instantiation",{"id":2261,"depth":708,"text":2262},{"id":2323,"depth":708,"text":2324},{"id":2590,"depth":708,"text":5741},"Handling Collections (BaseListModel)",{"id":2782,"depth":684,"text":5743,"children":5744},"Query Models (BaseQuery & PaginationQuery)",[5745,5747,5748,5749],{"id":2794,"depth":708,"text":5746},"Subclassing BaseQuery",{"id":2919,"depth":708,"text":2920},{"id":2968,"depth":708,"text":2969},{"id":3142,"depth":708,"text":5750},"Paginated Queries (PaginationQuery)",{"id":3329,"depth":684,"text":5752,"children":5753},"Using useAPI in Vue Components",[5754,5755,5756],{"id":3336,"depth":708,"text":3337},{"id":3591,"depth":708,"text":3592},{"id":3860,"depth":708,"text":5757},"3. Per-Instance Customization (Call-Site options)",{"id":4592,"depth":684,"text":4593},{"id":4795,"depth":684,"text":4796,"children":5760},[5761,5762,5763,5764],{"id":4799,"depth":708,"text":4800},{"id":4937,"depth":708,"text":461},{"id":5022,"depth":708,"text":5023},{"id":5041,"depth":708,"text":5042},{"id":5096,"depth":684,"text":5097,"children":5766},[5767,5768],{"id":5100,"depth":708,"text":5101},{"id":5612,"depth":708,"text":5613},"Guide to defining API endpoints, Data Models, Query Models, and using the reactive useAPI composable in the ES-Profiler platform frontend.","md",null,{},{"title":201,"description":5769},"Txjjr31f3C70VdPApu9r0LCP3LN1gd38j8ji3z0Tf5g",[5776,5778],{"title":193,"path":194,"stem":195,"description":5777,"children":-1},"Everything you need to know about observability of ESProfiler, as well as reporting and handling issues as they arise with infrastructure and hosting.",{"title":205,"path":206,"stem":207,"description":5779,"children":-1},"A comprehensive overview of project management processes and procedures that guide product development at ESProfiler.",1789726609744]