[{"data":1,"prerenderedAt":926},["ShallowReactive",2],{"msfe-doc:\u002Fguide\u002Fstate":3,"msfe-source:recipes\u002Fstate.ts":497,"mdc-kjzo6n-key":498},{"id":4,"title":5,"body":6,"description":484,"extension":485,"keywords":486,"locale":490,"meta":491,"navigation":308,"order":241,"path":492,"section":493,"seo":494,"stem":495,"__hash__":496},"docs\u002Fguide\u002Fstate.zh-CN.md","事件与事务状态",{"type":7,"value":8,"toc":477},"minimark",[9,13,104,111,114,132,251,266,269,280,284,362,376,383,408,412,433,447,450,457,473],[10,11,12],"h2",{"id":12},"先决定状态放在哪里",[14,15,16,32],"table",{},[17,18,19],"thead",{},[20,21,22,26,29],"tr",{},[23,24,25],"th",{},"状态",[23,27,28],{},"归属",[23,30,31],{},"换文档 \u002F 组件卸载",[33,34,35,47,61,79,93],"tbody",{},[20,36,37,41,44],{},[38,39,40],"td",{},"标题、任务完成值、图表数据",[38,42,43],{},"Markdown 源码和 codec",[38,45,46],{},"随保存持久化",[20,48,49,52,58],{},[38,50,51],{},"折叠、映射范围、需要事务计算的值",[38,53,54],{},[55,56,57],"code",{},"defineState()",[38,59,60],{},"每份文档独立初始化",[20,62,63,66,76],{},[38,64,65],{},"实例服务、缓存入口、清理句柄",[38,67,68,69,72,73],{},"扩展 ",[55,70,71],{},"storage"," 或 ",[55,74,75],{},"editor.scope",[38,77,78],{},"实例销毁时释放",[20,80,81,84,90],{},[38,82,83],{},"一个弹窗或请求的结果",[38,85,86,87],{},"子 ",[55,88,89],{},"TaskScope",[38,91,92],{},"取消、卸载时释放",[20,94,95,98,101],{},[38,96,97],{},"一个按钮的 hover 状态",[38,99,100],{},"Vue \u002F React 局部状态",[38,102,103],{},"组件卸载即丢弃",[105,106,107,108,110],"p",{},"把可持久字段只存到 ",[55,109,71],{}," 会导致重新打开文件后丢失。反过来，折叠等阅读偏好不应该为了刷新 UI 而修改 Markdown。",[10,112,113],{"id":113},"选择正确的通知",[105,115,116,119,120,123,124,127,128,131],{},[55,117,118],{},"editor.onChange()"," 只观察已接受源码变化，适合保存。扩展 ",[55,121,122],{},"onTransaction"," 包括选区和效果；",[55,125,126],{},"onSelectionUpdate"," 只在选区变化时执行。通过 ",[55,129,130],{},"subscribeState()"," 观察一个有界派生值，避免每次按键重算整个工具栏。",[133,134,139],"pre",{"className":135,"code":136,"language":137,"meta":138,"style":138},"language-ts shiki shiki-themes github-light github-light github-dark","const initialHead = editor.state.selection.main.head\nconst unsubscribe = editor.subscribeState({\n  select: state => state.selection.main.head,\n  change: (head, previous) => console.debug({ head, previous }),\n})\neditor.scope.own(unsubscribe)\n","ts","",[55,140,141,161,181,200,233,239],{"__ignoreMap":138},[142,143,146,150,154,157],"span",{"class":144,"line":145},"line",1,[142,147,149],{"class":148},"sDD9d","const",[142,151,153],{"class":152},"sUNQB"," initialHead",[142,155,156],{"class":148}," =",[142,158,160],{"class":159},"sVPnS"," editor.state.selection.main.head\n",[142,162,164,166,169,171,174,178],{"class":144,"line":163},2,[142,165,149],{"class":148},[142,167,168],{"class":152}," unsubscribe",[142,170,156],{"class":148},[142,172,173],{"class":159}," editor.",[142,175,177],{"class":176},"sgQzM","subscribeState",[142,179,180],{"class":159},"({\n",[142,182,184,187,190,194,197],{"class":144,"line":183},3,[142,185,186],{"class":176},"  select",[142,188,189],{"class":159},": ",[142,191,193],{"class":192},"sde8i","state",[142,195,196],{"class":148}," =>",[142,198,199],{"class":159}," state.selection.main.head,\n",[142,201,203,206,209,212,215,218,221,224,227,230],{"class":144,"line":202},4,[142,204,205],{"class":176},"  change",[142,207,208],{"class":159},": (",[142,210,211],{"class":192},"head",[142,213,214],{"class":159},", ",[142,216,217],{"class":192},"previous",[142,219,220],{"class":159},") ",[142,222,223],{"class":148},"=>",[142,225,226],{"class":159}," console.",[142,228,229],{"class":176},"debug",[142,231,232],{"class":159},"({ head, previous }),\n",[142,234,236],{"class":144,"line":235},5,[142,237,238],{"class":159},"})\n",[142,240,242,245,248],{"class":144,"line":241},6,[142,243,244],{"class":159},"editor.scope.",[142,246,247],{"class":176},"own",[142,249,250],{"class":159},"(unsubscribe)\n",[105,252,253,254,257,258,261,262,265],{},"先自己读取初始值；订阅不承诺补发一次初始通知。默认按 ",[55,255,256],{},"Object.is"," 比较；每次返回新对象时，提供 ",[55,259,260],{},"equal"," 或改为返回稳定标量。",[55,263,264],{},"select"," 必须无副作用，不应序列化全文或发请求。",[10,267,268],{"id":268},"一个完整的状态槽",[105,270,271,272,275,276,279],{},"下方模块可直接导入；安装 ",[55,273,274],{},"Hints"," 后再读 ",[55,277,278],{},"hintState","。示例状态仅控制临时阅读偏好，不需要撤销历史。",[281,282],"msfe-recipe",{"name":283},"recipes\u002Fstate",[133,285,287],{"className":135,"code":286,"language":137,"meta":138,"style":138},"import { Hints, hintState, setHints } from '.\u002Frecipes\u002Fstate'\n\n\u002F\u002F Include Hints in the editor's initial extensions.\nconst enabled = editor.getState(hintState)\nconst result = editor.updateViewState({ effects: [setHints.of(!enabled)] })\n",[55,288,289,304,310,316,333],{"__ignoreMap":138},[142,290,291,294,297,300],{"class":144,"line":145},[142,292,293],{"class":148},"import",[142,295,296],{"class":159}," { Hints, hintState, setHints } ",[142,298,299],{"class":148},"from",[142,301,303],{"class":302},"s-HEn"," '.\u002Frecipes\u002Fstate'\n",[142,305,306],{"class":144,"line":163},[142,307,309],{"emptyLinePlaceholder":308},true,"\n",[142,311,312],{"class":144,"line":183},[142,313,315],{"class":314},"sqmzS","\u002F\u002F Include Hints in the editor's initial extensions.\n",[142,317,318,320,323,325,327,330],{"class":144,"line":202},[142,319,149],{"class":148},[142,321,322],{"class":152}," enabled",[142,324,156],{"class":148},[142,326,173],{"class":159},[142,328,329],{"class":176},"getState",[142,331,332],{"class":159},"(hintState)\n",[142,334,335,337,340,342,344,347,350,353,356,359],{"class":144,"line":235},[142,336,149],{"class":148},[142,338,339],{"class":152}," result",[142,341,156],{"class":148},[142,343,173],{"class":159},[142,345,346],{"class":176},"updateViewState",[142,348,349],{"class":159},"({ effects: [setHints.",[142,351,352],{"class":176},"of",[142,354,355],{"class":159},"(",[142,357,358],{"class":148},"!",[142,360,361],{"class":159},"enabled)] })\n",[105,363,364,367,368,371,372,375],{},[55,365,366],{},"updateViewState()"," 不改源码，允许只读模式下的合法视图效果；它拒绝源码修改和重新配置。",[55,369,370],{},"update()"," 是纯 reducer，可能在命令试算时运行。只读 ",[55,373,374],{},"update.document"," 提供结果文本；依赖解析树的查询放到事务接受后的观察阶段。",[105,377,378,379,382],{},"默认保存当前滚动位置，适合用户主动展开或收起内容。跟随选区的高亮等被动更新应传入\n",[55,380,381],{},"preserveScroll: false","，让键盘、查找或大纲尚未完成的滚动继续生效；它本身不滚动，也不改变选区。",[133,384,386],{"className":135,"code":385,"language":137,"meta":138,"style":138},"editor.updateViewState({ effects: [setHints.of(enabled)], preserveScroll: false })\n",[55,387,388],{"__ignoreMap":138},[142,389,390,393,395,397,399,402,405],{"class":144,"line":145},[142,391,392],{"class":159},"editor.",[142,394,346],{"class":176},[142,396,349],{"class":159},[142,398,352],{"class":176},[142,400,401],{"class":159},"(enabled)], preserveScroll: ",[142,403,404],{"class":152},"false",[142,406,407],{"class":159}," })\n",[10,409,411],{"id":410},"位置效果和撤销","位置、效果和撤销",[105,413,414,415,418,419,422,423,426,427,432],{},"载荷包含源码偏移时，",[55,416,417],{},"defineEffect(map)"," 必须提供映射规则。范围集合可使用 ",[55,420,421],{},"SourceRangeSet"," \u002F ",[55,424,425],{},"mapSourceRange","，明确边界插入和完整删除时如何处理。详见 ",[428,429,431],"a",{"href":430},"\u002Fguide\u002Fselection","选区与异步目标","。",[105,434,435,438,439,442,443,446],{},[55,436,437],{},"defineState({ invert })"," 才会为该状态贡献反向效果。返回的反向位置使用事务前坐标；不提供 ",[55,440,441],{},"invert"," 的临时效果不会自动跟随文本撤销。",[55,444,445],{},"defineMetadata()"," 是事务关联信息，不是可保存字段。",[10,448,449],{"id":449},"控制订阅成本",[105,451,452,453,456],{},"不要为了按钮启用状态把全文同步到框架响应式对象。订阅选区、只读及所需状态槽；基于 ",[55,454,455],{},"can()"," 和语义查询更新相关按钮。多项布尔状态可用显式相等比较，解析尚未确认时保留原按钮状态或显示不可用状态。",[105,458,459,460,463,464,468,469,432],{},"投影读取某状态槽时，在 ",[55,461,462],{},"states"," 中声明依赖，详见 ",[428,465,467],{"href":466},"\u002Fextensions\u002Fprojections","投影层","。精确类型见 ",[428,470,472],{"href":471},"\u002Fapi\u002Fstate","状态 API",[474,475,476],"style",{},"html pre.shiki code .sDD9d, html code.shiki .sDD9d{--shiki-default:#D73A49;--shiki-light:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sUNQB, html code.shiki .sUNQB{--shiki-default:#005CC5;--shiki-light:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sVPnS, html code.shiki .sVPnS{--shiki-default:#24292E;--shiki-light:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sgQzM, html code.shiki .sgQzM{--shiki-default:#6F42C1;--shiki-light:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sde8i, html code.shiki .sde8i{--shiki-default:#E36209;--shiki-light:#E36209;--shiki-dark:#FFAB70}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 .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 .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 .s-HEn, html code.shiki .s-HEn{--shiki-default:#032F62;--shiki-light:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sqmzS, html code.shiki .sqmzS{--shiki-default:#6A737D;--shiki-light:#6A737D;--shiki-dark:#6A737D}",{"title":138,"searchDepth":163,"depth":163,"links":478},[479,480,481,482,483],{"id":12,"depth":163,"text":12},{"id":113,"depth":163,"text":113},{"id":268,"depth":163,"text":268},{"id":410,"depth":163,"text":411},{"id":449,"depth":163,"text":449},"在正确的生命周期订阅变化，区分源码、状态槽和临时存储。","md",[487,177,488,489,71],"onChange","defineState","defineEffect","zh-CN",{},"\u002Fguide\u002Fstate","接入指南",{"title":5,"description":484},"guide\u002Fstate.zh-CN","pU1x_Uvd7qzWP9g-Nj9y3i7xhRW4zShHaawKmWZSx6E","import { Extension, defineEffect, defineState } from \"@quirekit\u002Fmsfe-core\";\n\u002F** Explicit view-only preference; it is not a persistent Markdown field. *\u002F\nexport const setHints = defineEffect\u003Cboolean>();\n\u002F** State resets per document and has no undo policy because this preference is source-neutral. *\u002F\nexport const hintState = defineState({ key: \"example.hints\",\n  \u002F** @returns Default visibility. *\u002F create() { return true; },\n  \u002F** @param previous - Accepted or draft value. @param update - Pure transaction inputs. @returns The latest explicitly supplied preference. *\u002F\n  update(previous, update) { return update.effects(setHints).at(-1) ?? previous; },\n});\n\u002F** Install the slot before reading it or declaring it as a projection dependency. *\u002F\nexport const Hints = Extension.create({ name: \"exampleHints\",\n  \u002F** @returns State owned by this feature installation. *\u002F addState() { return [hintState]; },\n});\n",{"data":499,"body":500},{},{"type":501,"children":502},"root",[503,921],{"type":504,"tag":133,"props":505,"children":507},"element",{"className":135,"code":506,"language":137,"meta":138,"style":138},"import { Extension, defineEffect, defineState } from \"@quirekit\u002Fmsfe-core\";\n\u002F** Explicit view-only preference; it is not a persistent Markdown field. *\u002F\nexport const setHints = defineEffect\u003Cboolean>();\n\u002F** State resets per document and has no undo policy because this preference is source-neutral. *\u002F\nexport const hintState = defineState({ key: \"example.hints\",\n  \u002F** @returns Default visibility. *\u002F create() { return true; },\n  \u002F** @param previous - Accepted or draft value. @param update - Pure transaction inputs. @returns The latest explicitly supplied preference. *\u002F\n  update(previous, update) { return update.effects(setHints).at(-1) ?? previous; },\n});\n\u002F** Install the slot before reading it or declaring it as a projection dependency. *\u002F\nexport const Hints = Extension.create({ name: \"exampleHints\",\n  \u002F** @returns State owned by this feature installation. *\u002F addState() { return [hintState]; },\n});\n\n",[508],{"type":504,"tag":55,"props":509,"children":510},{"__ignoreMap":138},[511,541,550,594,602,642,685,731,815,824,833,878,913],{"type":504,"tag":142,"props":512,"children":513},{"class":144,"line":145},[514,520,526,530,536],{"type":504,"tag":142,"props":515,"children":517},{"style":516},"--shiki-default:#D73A49;--shiki-light:#D73A49;--shiki-dark:#F97583",[518],{"type":519,"value":293},"text",{"type":504,"tag":142,"props":521,"children":523},{"style":522},"--shiki-default:#24292E;--shiki-light:#24292E;--shiki-dark:#E1E4E8",[524],{"type":519,"value":525}," { Extension, defineEffect, defineState } ",{"type":504,"tag":142,"props":527,"children":528},{"style":516},[529],{"type":519,"value":299},{"type":504,"tag":142,"props":531,"children":533},{"style":532},"--shiki-default:#032F62;--shiki-light:#032F62;--shiki-dark:#9ECBFF",[534],{"type":519,"value":535}," \"@quirekit\u002Fmsfe-core\"",{"type":504,"tag":142,"props":537,"children":538},{"style":522},[539],{"type":519,"value":540},";\n",{"type":504,"tag":142,"props":542,"children":543},{"class":144,"line":163},[544],{"type":504,"tag":142,"props":545,"children":547},{"style":546},"--shiki-default:#6A737D;--shiki-light:#6A737D;--shiki-dark:#6A737D",[548],{"type":519,"value":549},"\u002F** Explicit view-only preference; it is not a persistent Markdown field. *\u002F\n",{"type":504,"tag":142,"props":551,"children":552},{"class":144,"line":183},[553,558,563,569,573,579,584,589],{"type":504,"tag":142,"props":554,"children":555},{"style":516},[556],{"type":519,"value":557},"export",{"type":504,"tag":142,"props":559,"children":560},{"style":516},[561],{"type":519,"value":562}," const",{"type":504,"tag":142,"props":564,"children":566},{"style":565},"--shiki-default:#005CC5;--shiki-light:#005CC5;--shiki-dark:#79B8FF",[567],{"type":519,"value":568}," setHints",{"type":504,"tag":142,"props":570,"children":571},{"style":516},[572],{"type":519,"value":156},{"type":504,"tag":142,"props":574,"children":576},{"style":575},"--shiki-default:#6F42C1;--shiki-light:#6F42C1;--shiki-dark:#B392F0",[577],{"type":519,"value":578}," defineEffect",{"type":504,"tag":142,"props":580,"children":581},{"style":522},[582],{"type":519,"value":583},"\u003C",{"type":504,"tag":142,"props":585,"children":586},{"style":565},[587],{"type":519,"value":588},"boolean",{"type":504,"tag":142,"props":590,"children":591},{"style":522},[592],{"type":519,"value":593},">();\n",{"type":504,"tag":142,"props":595,"children":596},{"class":144,"line":202},[597],{"type":504,"tag":142,"props":598,"children":599},{"style":546},[600],{"type":519,"value":601},"\u002F** State resets per document and has no undo policy because this preference is source-neutral. *\u002F\n",{"type":504,"tag":142,"props":603,"children":604},{"class":144,"line":235},[605,609,613,618,622,627,632,637],{"type":504,"tag":142,"props":606,"children":607},{"style":516},[608],{"type":519,"value":557},{"type":504,"tag":142,"props":610,"children":611},{"style":516},[612],{"type":519,"value":562},{"type":504,"tag":142,"props":614,"children":615},{"style":565},[616],{"type":519,"value":617}," hintState",{"type":504,"tag":142,"props":619,"children":620},{"style":516},[621],{"type":519,"value":156},{"type":504,"tag":142,"props":623,"children":624},{"style":575},[625],{"type":519,"value":626}," defineState",{"type":504,"tag":142,"props":628,"children":629},{"style":522},[630],{"type":519,"value":631},"({ key: ",{"type":504,"tag":142,"props":633,"children":634},{"style":532},[635],{"type":519,"value":636},"\"example.hints\"",{"type":504,"tag":142,"props":638,"children":639},{"style":522},[640],{"type":519,"value":641},",\n",{"type":504,"tag":142,"props":643,"children":644},{"class":144,"line":241},[645,650,655,660,665,670,675,680],{"type":504,"tag":142,"props":646,"children":647},{"style":546},[648],{"type":519,"value":649},"  \u002F** ",{"type":504,"tag":142,"props":651,"children":652},{"style":516},[653],{"type":519,"value":654},"@returns",{"type":504,"tag":142,"props":656,"children":657},{"style":546},[658],{"type":519,"value":659}," Default visibility. *\u002F",{"type":504,"tag":142,"props":661,"children":662},{"style":575},[663],{"type":519,"value":664}," create",{"type":504,"tag":142,"props":666,"children":667},{"style":522},[668],{"type":519,"value":669},"() { ",{"type":504,"tag":142,"props":671,"children":672},{"style":516},[673],{"type":519,"value":674},"return",{"type":504,"tag":142,"props":676,"children":677},{"style":565},[678],{"type":519,"value":679}," true",{"type":504,"tag":142,"props":681,"children":682},{"style":522},[683],{"type":519,"value":684},"; },\n",{"type":504,"tag":142,"props":686,"children":688},{"class":144,"line":687},7,[689,693,698,703,708,712,717,722,726],{"type":504,"tag":142,"props":690,"children":691},{"style":546},[692],{"type":519,"value":649},{"type":504,"tag":142,"props":694,"children":695},{"style":516},[696],{"type":519,"value":697},"@param",{"type":504,"tag":142,"props":699,"children":700},{"style":522},[701],{"type":519,"value":702}," previous",{"type":504,"tag":142,"props":704,"children":705},{"style":546},[706],{"type":519,"value":707}," - Accepted or draft value. ",{"type":504,"tag":142,"props":709,"children":710},{"style":516},[711],{"type":519,"value":697},{"type":504,"tag":142,"props":713,"children":714},{"style":522},[715],{"type":519,"value":716}," update",{"type":504,"tag":142,"props":718,"children":719},{"style":546},[720],{"type":519,"value":721}," - Pure transaction inputs. ",{"type":504,"tag":142,"props":723,"children":724},{"style":516},[725],{"type":519,"value":654},{"type":504,"tag":142,"props":727,"children":728},{"style":546},[729],{"type":519,"value":730}," The latest explicitly supplied preference. *\u002F\n",{"type":504,"tag":142,"props":732,"children":734},{"class":144,"line":733},8,[735,740,744,749,753,758,763,767,772,777,782,787,791,796,801,805,810],{"type":504,"tag":142,"props":736,"children":737},{"style":575},[738],{"type":519,"value":739},"  update",{"type":504,"tag":142,"props":741,"children":742},{"style":522},[743],{"type":519,"value":355},{"type":504,"tag":142,"props":745,"children":747},{"style":746},"--shiki-default:#E36209;--shiki-light:#E36209;--shiki-dark:#FFAB70",[748],{"type":519,"value":217},{"type":504,"tag":142,"props":750,"children":751},{"style":522},[752],{"type":519,"value":214},{"type":504,"tag":142,"props":754,"children":755},{"style":746},[756],{"type":519,"value":757},"update",{"type":504,"tag":142,"props":759,"children":760},{"style":522},[761],{"type":519,"value":762},") { ",{"type":504,"tag":142,"props":764,"children":765},{"style":516},[766],{"type":519,"value":674},{"type":504,"tag":142,"props":768,"children":769},{"style":522},[770],{"type":519,"value":771}," update.",{"type":504,"tag":142,"props":773,"children":774},{"style":575},[775],{"type":519,"value":776},"effects",{"type":504,"tag":142,"props":778,"children":779},{"style":522},[780],{"type":519,"value":781},"(setHints).",{"type":504,"tag":142,"props":783,"children":784},{"style":575},[785],{"type":519,"value":786},"at",{"type":504,"tag":142,"props":788,"children":789},{"style":522},[790],{"type":519,"value":355},{"type":504,"tag":142,"props":792,"children":793},{"style":516},[794],{"type":519,"value":795},"-",{"type":504,"tag":142,"props":797,"children":798},{"style":565},[799],{"type":519,"value":800},"1",{"type":504,"tag":142,"props":802,"children":803},{"style":522},[804],{"type":519,"value":220},{"type":504,"tag":142,"props":806,"children":807},{"style":516},[808],{"type":519,"value":809},"??",{"type":504,"tag":142,"props":811,"children":812},{"style":522},[813],{"type":519,"value":814}," previous; },\n",{"type":504,"tag":142,"props":816,"children":818},{"class":144,"line":817},9,[819],{"type":504,"tag":142,"props":820,"children":821},{"style":522},[822],{"type":519,"value":823},"});\n",{"type":504,"tag":142,"props":825,"children":827},{"class":144,"line":826},10,[828],{"type":504,"tag":142,"props":829,"children":830},{"style":546},[831],{"type":519,"value":832},"\u002F** Install the slot before reading it or declaring it as a projection dependency. *\u002F\n",{"type":504,"tag":142,"props":834,"children":836},{"class":144,"line":835},11,[837,841,845,850,854,859,864,869,874],{"type":504,"tag":142,"props":838,"children":839},{"style":516},[840],{"type":519,"value":557},{"type":504,"tag":142,"props":842,"children":843},{"style":516},[844],{"type":519,"value":562},{"type":504,"tag":142,"props":846,"children":847},{"style":565},[848],{"type":519,"value":849}," Hints",{"type":504,"tag":142,"props":851,"children":852},{"style":516},[853],{"type":519,"value":156},{"type":504,"tag":142,"props":855,"children":856},{"style":522},[857],{"type":519,"value":858}," Extension.",{"type":504,"tag":142,"props":860,"children":861},{"style":575},[862],{"type":519,"value":863},"create",{"type":504,"tag":142,"props":865,"children":866},{"style":522},[867],{"type":519,"value":868},"({ name: ",{"type":504,"tag":142,"props":870,"children":871},{"style":532},[872],{"type":519,"value":873},"\"exampleHints\"",{"type":504,"tag":142,"props":875,"children":876},{"style":522},[877],{"type":519,"value":641},{"type":504,"tag":142,"props":879,"children":881},{"class":144,"line":880},12,[882,886,890,895,900,904,908],{"type":504,"tag":142,"props":883,"children":884},{"style":546},[885],{"type":519,"value":649},{"type":504,"tag":142,"props":887,"children":888},{"style":516},[889],{"type":519,"value":654},{"type":504,"tag":142,"props":891,"children":892},{"style":546},[893],{"type":519,"value":894}," State owned by this feature installation. *\u002F",{"type":504,"tag":142,"props":896,"children":897},{"style":575},[898],{"type":519,"value":899}," addState",{"type":504,"tag":142,"props":901,"children":902},{"style":522},[903],{"type":519,"value":669},{"type":504,"tag":142,"props":905,"children":906},{"style":516},[907],{"type":519,"value":674},{"type":504,"tag":142,"props":909,"children":910},{"style":522},[911],{"type":519,"value":912}," [hintState]; },\n",{"type":504,"tag":142,"props":914,"children":916},{"class":144,"line":915},13,[917],{"type":504,"tag":142,"props":918,"children":919},{"style":522},[920],{"type":519,"value":823},{"type":504,"tag":474,"props":922,"children":923},{},[924],{"type":519,"value":925},"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 .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 .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);}",1793046311418]