@reformer/builder 3.0.0-beta.5 → 3.0.0-beta.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/README.md +32 -198
  2. package/bin/reformer-builder.d.mts +7 -9
  3. package/bin/reformer-builder.mjs +43 -54
  4. package/dist/assets/css/index-DgRudQqc.css +1 -0
  5. package/dist/assets/css/monaco-runtime-Ch4loDnq.css +1 -0
  6. package/dist/assets/i18n/en-DHElWsPO.js +1 -0
  7. package/dist/assets/i18n/ru-DXsuKRv9.js +1 -0
  8. package/dist/assets/js/index-BSeq6-8S.js +67 -0
  9. package/dist/assets/js/index-CQvmAVe0.js +115 -0
  10. package/dist/assets/js/naming-9aaM0Wbc.js +1 -0
  11. package/dist/assets/js/rules-CM1OzesO.js +1 -0
  12. package/dist/assets/js/selectors-BiPlGN2c.js +1 -0
  13. package/dist/assets/monaco/html-R9lQ-L9C.js +1 -0
  14. package/dist/assets/monaco/javascript-COUjr2au.js +1 -0
  15. package/dist/assets/monaco/jsonMode-C3DAkvde.js +12 -0
  16. package/dist/assets/monaco/monaco-runtime-DNdOZY7f.js +924 -0
  17. package/dist/assets/monaco/typescript-CVSiBX9O.js +1 -0
  18. package/dist/assets/monaco/xml-ee1lph4p.js +1 -0
  19. package/dist/assets/monaco/yaml-DXPc9WLc.js +1 -0
  20. package/dist/assets/{byok-B9mwOrn0.js → plugins/ai-byok-DgeZQTZb.js} +55 -55
  21. package/dist/assets/plugins/ai-jKAVkXuU.js +178 -0
  22. package/dist/assets/plugins/ai-knowledge-docs-DCjqodcj.js +1 -0
  23. package/dist/assets/plugins/ai-knowledge-index-bUfNPqlZ.js +1 -0
  24. package/dist/assets/plugins/codegen-B0riFOHC.js +416 -0
  25. package/dist/assets/{MarkdownPreview-CmqjlfzE.js → plugins/editor-markdown-MarkdownPreview-DyHZvj8H.js} +20 -20
  26. package/dist/assets/plugins/editor-markdown-oiBrRpM4.js +2 -0
  27. package/dist/assets/plugins/editor-schema-CVPAk-MV.js +4 -0
  28. package/dist/assets/plugins/plugin-manager-BmjjSqYy.js +1 -0
  29. package/dist/assets/plugins/templates-DNeIl0cD.js +2 -0
  30. package/dist/assets/vendor/ajv-CCplthOF.js +8 -0
  31. package/dist/assets/vendor/collapsible-base-DZxAKbAF-h07cIL_F.js +1 -0
  32. package/dist/assets/vendor/highlight.js/common-g0-hl6Ud.js +5 -0
  33. package/dist/assets/vendor/index-jGqhTST4.js +6 -0
  34. package/dist/assets/vendor/lucide-react/eye-COs0olKf.js +1 -0
  35. package/dist/assets/vendor/lucide-react/file-code-corner-BMVX-Qf1.js +1 -0
  36. package/dist/assets/vendor/lucide-react/rotate-ccw-D0mVnqJN.js +1 -0
  37. package/dist/assets/vendor/lucide-react/wrench-BX6KiYsu.js +1 -0
  38. package/dist/assets/vendor/message-base-B5jT1FuY-GU8TkaN4.js +1 -0
  39. package/dist/assets/vendor/reformer-cdk/async-boundary-DPu-1Ifi.js +1 -0
  40. package/dist/assets/vendor/reformer-cdk/define-steps-CyGUrx9p-B_03D9I7.js +1 -0
  41. package/dist/assets/vendor/reformer-cdk/file-upload-C_DEa-OT.js +1 -0
  42. package/dist/assets/vendor/reformer-cdk/form-array-DRkRfAUh.js +1 -0
  43. package/dist/assets/vendor/reformer-cdk/form-wizard-DFqFjH7E.js +1 -0
  44. package/dist/assets/vendor/reformer-cdk/index-BXFomK5m.js +1 -0
  45. package/dist/assets/vendor/reformer-cdk/list-BrqYwhrQ.js +1 -0
  46. package/dist/assets/vendor/reformer-form-registry/index-s1IAa6Lm.js +1 -0
  47. package/dist/assets/vendor/reformer-form-registry/loader-BK2c_fCA-D59m3JOQ.js +2 -0
  48. package/dist/assets/vendor/reformer-form-registry/react-B8lbN6s4.js +1 -0
  49. package/dist/assets/vendor/reformer-form-registry/storage-BbhnRE7V.js +1 -0
  50. package/dist/assets/vendor/reformer-form-registry/types-DoMH_n1U-BSN9tyeo.js +1 -0
  51. package/dist/assets/vendor/reformer-renderer-json/validate-C5Gll2Yt.js +8 -0
  52. package/dist/assets/vendor/reformer-ui-kit/alert-base-WOl_V-qI-CYoSap05.js +1 -0
  53. package/dist/assets/vendor/reformer-ui-kit/component-catalog-BKjWf5Yx.js +1 -0
  54. package/dist/assets/{typescript-DL3gRsAd.js → vendor/typescript/typescript-Dp5hP5cS.js} +1 -1
  55. package/dist/index.html +4 -4
  56. package/package.json +15 -18
  57. package/runtime-config.schema.json +17 -60
  58. package/dist/assets/App-BupMDG_t.js +0 -1137
  59. package/dist/assets/BootError-CWnToysV.js +0 -1
  60. package/dist/assets/ChatPanel-B4wt7hBH.js +0 -82
  61. package/dist/assets/CodeEditor-Cca8j3Z3.js +0 -1
  62. package/dist/assets/RawJsonEditor-D5mwkIJa.js +0 -1
  63. package/dist/assets/abap-DLDM7-KI.js +0 -1
  64. package/dist/assets/apex-DNDY2TF8.js +0 -1
  65. package/dist/assets/azcli-Y6nb8tq_.js +0 -1
  66. package/dist/assets/bat-BwHxbl9M.js +0 -1
  67. package/dist/assets/bicep-CFznDFnq.js +0 -2
  68. package/dist/assets/boot-BCJd6Ujw.js +0 -2
  69. package/dist/assets/cameligo-Bf6VGUru.js +0 -1
  70. package/dist/assets/clojure-Dnu-v4kV.js +0 -1
  71. package/dist/assets/coffee-Bd8akH9Z.js +0 -1
  72. package/dist/assets/cpp-BbWJElDN.js +0 -1
  73. package/dist/assets/csharp-Co3qMtFm.js +0 -1
  74. package/dist/assets/csp-D-4FJmMZ.js +0 -1
  75. package/dist/assets/cypher-cTPe9QuQ.js +0 -1
  76. package/dist/assets/dart-BOtBlQCF.js +0 -1
  77. package/dist/assets/dockerfile-BG73LgW2.js +0 -1
  78. package/dist/assets/ecl-BEgZUVRK.js +0 -1
  79. package/dist/assets/editor-BzOv8av-.css +0 -1
  80. package/dist/assets/editor.api-BWDeQ8t4.js +0 -865
  81. package/dist/assets/elixir-BkW5O-1t.js +0 -1
  82. package/dist/assets/flow9-BeJ5waoc.js +0 -1
  83. package/dist/assets/freemarker2-DQaxDgne.js +0 -3
  84. package/dist/assets/fsharp-PahG7c26.js +0 -1
  85. package/dist/assets/go-acbASCJo.js +0 -1
  86. package/dist/assets/graphql-BxJiqAUM.js +0 -1
  87. package/dist/assets/handlebars-e1hbsCFi.js +0 -1
  88. package/dist/assets/hcl-DtV1sZF8.js +0 -1
  89. package/dist/assets/html-QXilGQ4Y.js +0 -1
  90. package/dist/assets/index-BLGbxQaR.js +0 -104
  91. package/dist/assets/index-BwhW-Atz.js +0 -3
  92. package/dist/assets/index-BxUg93Np.css +0 -1
  93. package/dist/assets/index-CF7RI8Bt.js +0 -68
  94. package/dist/assets/index-CLTXPf4k.js +0 -11
  95. package/dist/assets/index-Crsub4wy.js +0 -5028
  96. package/dist/assets/index-DhcNqNgT.js +0 -10
  97. package/dist/assets/index-DzAasWzr.css +0 -1
  98. package/dist/assets/index-U9gpmElw.js +0 -4709
  99. package/dist/assets/index-eRs9yupj.js +0 -1
  100. package/dist/assets/ini-Kd9XrMLS.js +0 -1
  101. package/dist/assets/java-CXBNlu9o.js +0 -1
  102. package/dist/assets/javascript-C7cOj8ds.js +0 -1
  103. package/dist/assets/jsonMode-BgHFRVOe.css +0 -1
  104. package/dist/assets/jsonMode-DEqS3I0B.js +0 -70
  105. package/dist/assets/julia-cl7-CwDS.js +0 -1
  106. package/dist/assets/kotlin-s7OhZKlX.js +0 -1
  107. package/dist/assets/less-9HpZscsL.js +0 -2
  108. package/dist/assets/lexon-OrD6JF1K.js +0 -1
  109. package/dist/assets/liquid-grdNDW6i.js +0 -1
  110. package/dist/assets/load-QsSQTL2T.js +0 -11
  111. package/dist/assets/lua-Cyyb5UIc.js +0 -1
  112. package/dist/assets/m3-B8OfTtLu.js +0 -1
  113. package/dist/assets/mdx-BGpbXlZS.js +0 -1
  114. package/dist/assets/mips-CiqrrVzr.js +0 -1
  115. package/dist/assets/monaco-languages-BZWxuU3F.js +0 -2
  116. package/dist/assets/monaco-setup-1PbjxubL.js +0 -12
  117. package/dist/assets/msdax-DmeGPVcC.js +0 -1
  118. package/dist/assets/mysql-C_tMU-Nz.js +0 -1
  119. package/dist/assets/objective-c-BDtDVThU.js +0 -1
  120. package/dist/assets/pascal-vHIfCaH5.js +0 -1
  121. package/dist/assets/pascaligo-DtZ0uQbO.js +0 -1
  122. package/dist/assets/perl-Ub6l9XKa.js +0 -1
  123. package/dist/assets/pgsql-BlNEE0v7.js +0 -1
  124. package/dist/assets/php-BBUBE1dy.js +0 -1
  125. package/dist/assets/pla-DSh2-awV.js +0 -1
  126. package/dist/assets/postiats-CocnycG-.js +0 -1
  127. package/dist/assets/powerquery-tScXyioY.js +0 -1
  128. package/dist/assets/powershell-COWaemsV.js +0 -1
  129. package/dist/assets/protobuf-Brw8urJB.js +0 -2
  130. package/dist/assets/pug-8SOpv6rk.js +0 -1
  131. package/dist/assets/python-D5X7CY5Y.js +0 -1
  132. package/dist/assets/qsharp-Bw9ernYp.js +0 -1
  133. package/dist/assets/r-j7ic8hl3.js +0 -1
  134. package/dist/assets/razor-B2pbhZKy.js +0 -1
  135. package/dist/assets/redis-Bu5POkcn.js +0 -1
  136. package/dist/assets/redshift-Bs9aos_-.js +0 -1
  137. package/dist/assets/reformer-ui-kit-11-bLtlFFvp.js +0 -1
  138. package/dist/assets/reformer-ui-kit-tUqYBSLv.js +0 -1
  139. package/dist/assets/restructuredtext-CqXO7rUv.js +0 -1
  140. package/dist/assets/ruby-zBfavPgS.js +0 -1
  141. package/dist/assets/rust-BzKRNQWT.js +0 -1
  142. package/dist/assets/sb-BBc9UKZt.js +0 -1
  143. package/dist/assets/scala-D9hQfWCl.js +0 -1
  144. package/dist/assets/scheme-BPhDTwHR.js +0 -1
  145. package/dist/assets/scss-CBJaRo0y.js +0 -3
  146. package/dist/assets/shell-DiJ1NA_G.js +0 -1
  147. package/dist/assets/solidity-Db0IVjzk.js +0 -1
  148. package/dist/assets/sophia-CnS9iZB_.js +0 -1
  149. package/dist/assets/sparql-CJmd_6j2.js +0 -1
  150. package/dist/assets/sql-ClhHkBeG.js +0 -1
  151. package/dist/assets/st-CHwy0fLd.js +0 -1
  152. package/dist/assets/swift-CnmFD0ga.js +0 -1
  153. package/dist/assets/systemverilog-Bs9z6M-B.js +0 -1
  154. package/dist/assets/tcl-Dm6ycUr_.js +0 -1
  155. package/dist/assets/twig-Csy3S7wG.js +0 -1
  156. package/dist/assets/typescript-Ccn-IGn9.js +0 -1
  157. package/dist/assets/typespec-Btyra-wh.js +0 -1
  158. package/dist/assets/useFormField-BLbvmpme-Dwz_jyMW.js +0 -1
  159. package/dist/assets/vb-Db0cS2oM.js +0 -1
  160. package/dist/assets/wgsl-BTesnYfV.js +0 -298
  161. package/dist/assets/xml-NgTjWpvZ.js +0 -1
  162. package/dist/assets/yaml-CboCRslW.js +0 -1
  163. /package/dist/assets/{codicon-Brq4_Ui5.ttf → fonts/codicon-Brq4_Ui5.ttf} +0 -0
  164. /package/dist/assets/{css-DdJfP1eB.js → monaco/css-DdJfP1eB.js} +0 -0
  165. /package/dist/assets/{editor.worker-CRaYpIdo.js → monaco/editor.worker-CRaYpIdo.js} +0 -0
  166. /package/dist/assets/{json.worker-C5PEkLU0.js → monaco/json.worker-C5PEkLU0.js} +0 -0
  167. /package/dist/assets/{markdown-BFxVWTOG.js → monaco/markdown-BFxVWTOG.js} +0 -0
@@ -1,11 +0,0 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/reformer-ui-kit-tUqYBSLv.js","assets/index-DhcNqNgT.js","assets/index-BxUg93Np.css","assets/index-CF7RI8Bt.js","assets/useFormField-BLbvmpme-Dwz_jyMW.js","assets/reformer-ui-kit-11-bLtlFFvp.js","assets/index-eRs9yupj.js","assets/index-U9gpmElw.js","assets/index-DzAasWzr.css"])))=>i.map(i=>d[i]);
2
- import{a as Mo,_ as Mt}from"./index-DhcNqNgT.js";var Oe={exports:{}},wt={},me={},Se={},Bt={},jt={},Dt={},Kt;function ft(){return Kt||(Kt=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.regexpCode=e.getEsmExportName=e.getProperty=e.safeStringify=e.stringify=e.strConcat=e.addCodeArg=e.str=e._=e.nil=e._Code=e.Name=e.IDENTIFIER=e._CodeOrName=void 0;class t{}e._CodeOrName=t,e.IDENTIFIER=/^[a-z$_][a-z$_0-9]*$/i;class u extends t{constructor(r){if(super(),!e.IDENTIFIER.test(r))throw new Error("CodeGen: name must be a valid identifier");this.str=r}toString(){return this.str}emptyStr(){return!1}get names(){return{[this.str]:1}}}e.Name=u;class i extends t{constructor(r){super(),this._items=typeof r=="string"?[r]:r}toString(){return this.str}emptyStr(){if(this._items.length>1)return!1;const r=this._items[0];return r===""||r==='""'}get str(){var r;return(r=this._str)!==null&&r!==void 0?r:this._str=this._items.reduce((s,m)=>`${s}${m}`,"")}get names(){var r;return(r=this._names)!==null&&r!==void 0?r:this._names=this._items.reduce((s,m)=>(m instanceof u&&(s[m.str]=(s[m.str]||0)+1),s),{})}}e._Code=i,e.nil=new i("");function x(p,...r){const s=[p[0]];let m=0;for(;m<r.length;)l(s,r[m]),s.push(p[++m]);return new i(s)}e._=x;const n=new i("+");function y(p,...r){const s=[h(p[0])];let m=0;for(;m<r.length;)s.push(n),l(s,r[m]),s.push(n,h(p[++m]));return g(s),new i(s)}e.str=y;function l(p,r){r instanceof i?p.push(...r._items):r instanceof u?p.push(r):p.push(k(r))}e.addCodeArg=l;function g(p){let r=1;for(;r<p.length-1;){if(p[r]===n){const s=A(p[r-1],p[r+1]);if(s!==void 0){p.splice(r-1,3,s);continue}p[r++]="+"}r++}}function A(p,r){if(r==='""')return p;if(p==='""')return r;if(typeof p=="string")return r instanceof u||p[p.length-1]!=='"'?void 0:typeof r!="string"?`${p.slice(0,-1)}${r}"`:r[0]==='"'?p.slice(0,-1)+r.slice(1):void 0;if(typeof r=="string"&&r[0]==='"'&&!(p instanceof u))return`"${p}${r.slice(1)}`}function f(p,r){return r.emptyStr()?p:p.emptyStr()?r:y`${p}${r}`}e.strConcat=f;function k(p){return typeof p=="number"||typeof p=="boolean"||p===null?p:h(Array.isArray(p)?p.join(","):p)}function v(p){return new i(h(p))}e.stringify=v;function h(p){return JSON.stringify(p).replace(/\u2028/g,"\\u2028").replace(/\u2029/g,"\\u2029")}e.safeStringify=h;function b(p){return typeof p=="string"&&e.IDENTIFIER.test(p)?new i(`.${p}`):x`[${p}]`}e.getProperty=b;function C(p){if(typeof p=="string"&&e.IDENTIFIER.test(p))return new i(`${p}`);throw new Error(`CodeGen: invalid export name: ${p}, use explicit $id name mapping`)}e.getEsmExportName=C;function a(p){return new i(p.toString())}e.regexpCode=a})(Dt)),Dt}var Ot={},Wt;function Jt(){return Wt||(Wt=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.ValueScope=e.ValueScopeName=e.Scope=e.varKinds=e.UsedValueState=void 0;const t=ft();class u extends Error{constructor(A){super(`CodeGen: "code" for ${A} not defined`),this.value=A.value}}var i;(function(g){g[g.Started=0]="Started",g[g.Completed=1]="Completed"})(i||(e.UsedValueState=i={})),e.varKinds={const:new t.Name("const"),let:new t.Name("let"),var:new t.Name("var")};class x{constructor({prefixes:A,parent:f}={}){this._names={},this._prefixes=A,this._parent=f}toName(A){return A instanceof t.Name?A:this.name(A)}name(A){return new t.Name(this._newName(A))}_newName(A){const f=this._names[A]||this._nameGroup(A);return`${A}${f.index++}`}_nameGroup(A){var f,k;if(!((k=(f=this._parent)===null||f===void 0?void 0:f._prefixes)===null||k===void 0)&&k.has(A)||this._prefixes&&!this._prefixes.has(A))throw new Error(`CodeGen: prefix "${A}" is not allowed in this scope`);return this._names[A]={prefix:A,index:0}}}e.Scope=x;class n extends t.Name{constructor(A,f){super(f),this.prefix=A}setValue(A,{property:f,itemIndex:k}){this.value=A,this.scopePath=(0,t._)`.${new t.Name(f)}[${k}]`}}e.ValueScopeName=n;const y=(0,t._)`\n`;class l extends x{constructor(A){super(A),this._values={},this._scope=A.scope,this.opts={...A,_n:A.lines?y:t.nil}}get(){return this._scope}name(A){return new n(A,this._newName(A))}value(A,f){var k;if(f.ref===void 0)throw new Error("CodeGen: ref must be passed in value");const v=this.toName(A),{prefix:h}=v,b=(k=f.key)!==null&&k!==void 0?k:f.ref;let C=this._values[h];if(C){const r=C.get(b);if(r)return r}else C=this._values[h]=new Map;C.set(b,v);const a=this._scope[h]||(this._scope[h]=[]),p=a.length;return a[p]=f.ref,v.setValue(f,{property:h,itemIndex:p}),v}getValue(A,f){const k=this._values[A];if(k)return k.get(f)}scopeRefs(A,f=this._values){return this._reduceValues(f,k=>{if(k.scopePath===void 0)throw new Error(`CodeGen: name "${k}" has no value`);return(0,t._)`${A}${k.scopePath}`})}scopeCode(A=this._values,f,k){return this._reduceValues(A,v=>{if(v.value===void 0)throw new Error(`CodeGen: name "${v}" has no value`);return v.value.code},f,k)}_reduceValues(A,f,k={},v){let h=t.nil;for(const b in A){const C=A[b];if(!C)continue;const a=k[b]=k[b]||new Map;C.forEach(p=>{if(a.has(p))return;a.set(p,i.Started);let r=f(p);if(r){const s=this.opts.es5?e.varKinds.var:e.varKinds.const;h=(0,t._)`${h}${s} ${p} = ${r};${this.opts._n}`}else if(r=v?.(p))h=(0,t._)`${h}${r}${this.opts._n}`;else throw new u(p);a.set(p,i.Completed)})}return h}}e.ValueScope=l})(Ot)),Ot}var Yt;function U(){return Yt||(Yt=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.or=e.and=e.not=e.CodeGen=e.operators=e.varKinds=e.ValueScopeName=e.ValueScope=e.Scope=e.Name=e.regexpCode=e.stringify=e.getProperty=e.nil=e.strConcat=e.str=e._=void 0;const t=ft(),u=Jt();var i=ft();Object.defineProperty(e,"_",{enumerable:!0,get:function(){return i._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return i.str}}),Object.defineProperty(e,"strConcat",{enumerable:!0,get:function(){return i.strConcat}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return i.nil}}),Object.defineProperty(e,"getProperty",{enumerable:!0,get:function(){return i.getProperty}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return i.stringify}}),Object.defineProperty(e,"regexpCode",{enumerable:!0,get:function(){return i.regexpCode}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return i.Name}});var x=Jt();Object.defineProperty(e,"Scope",{enumerable:!0,get:function(){return x.Scope}}),Object.defineProperty(e,"ValueScope",{enumerable:!0,get:function(){return x.ValueScope}}),Object.defineProperty(e,"ValueScopeName",{enumerable:!0,get:function(){return x.ValueScopeName}}),Object.defineProperty(e,"varKinds",{enumerable:!0,get:function(){return x.varKinds}}),e.operators={GT:new t._Code(">"),GTE:new t._Code(">="),LT:new t._Code("<"),LTE:new t._Code("<="),EQ:new t._Code("==="),NEQ:new t._Code("!=="),NOT:new t._Code("!"),OR:new t._Code("||"),AND:new t._Code("&&"),ADD:new t._Code("+")};class n{optimizeNodes(){return this}optimizeNames(d,P){return this}}class y extends n{constructor(d,P,D){super(),this.varKind=d,this.name=P,this.rhs=D}render({es5:d,_n:P}){const D=d?u.varKinds.var:this.varKind,F=this.rhs===void 0?"":` = ${this.rhs}`;return`${D} ${this.name}${F};`+P}optimizeNames(d,P){if(d[this.name.str])return this.rhs&&(this.rhs=J(this.rhs,d,P)),this}get names(){return this.rhs instanceof t._CodeOrName?this.rhs.names:{}}}class l extends n{constructor(d,P,D){super(),this.lhs=d,this.rhs=P,this.sideEffects=D}render({_n:d}){return`${this.lhs} = ${this.rhs};`+d}optimizeNames(d,P){if(!(this.lhs instanceof t.Name&&!d[this.lhs.str]&&!this.sideEffects))return this.rhs=J(this.rhs,d,P),this}get names(){const d=this.lhs instanceof t.Name?{}:{...this.lhs.names};return q(d,this.rhs)}}class g extends l{constructor(d,P,D,F){super(d,D,F),this.op=P}render({_n:d}){return`${this.lhs} ${this.op}= ${this.rhs};`+d}}class A extends n{constructor(d){super(),this.label=d,this.names={}}render({_n:d}){return`${this.label}:`+d}}class f extends n{constructor(d){super(),this.label=d,this.names={}}render({_n:d}){return`break${this.label?` ${this.label}`:""};`+d}}class k extends n{constructor(d){super(),this.error=d}render({_n:d}){return`throw ${this.error};`+d}get names(){return this.error.names}}class v extends n{constructor(d){super(),this.code=d}render({_n:d}){return`${this.code};`+d}optimizeNodes(){return`${this.code}`?this:void 0}optimizeNames(d,P){return this.code=J(this.code,d,P),this}get names(){return this.code instanceof t._CodeOrName?this.code.names:{}}}class h extends n{constructor(d=[]){super(),this.nodes=d}render(d){return this.nodes.reduce((P,D)=>P+D.render(d),"")}optimizeNodes(){const{nodes:d}=this;let P=d.length;for(;P--;){const D=d[P].optimizeNodes();Array.isArray(D)?d.splice(P,1,...D):D?d[P]=D:d.splice(P,1)}return d.length>0?this:void 0}optimizeNames(d,P){const{nodes:D}=this;let F=D.length;for(;F--;){const H=D[F];H.optimizeNames(d,P)||(ee(d,H.names),D.splice(F,1))}return D.length>0?this:void 0}get names(){return this.nodes.reduce((d,P)=>z(d,P.names),{})}}class b extends h{render(d){return"{"+d._n+super.render(d)+"}"+d._n}}class C extends h{}class a extends b{}a.kind="else";class p extends b{constructor(d,P){super(P),this.condition=d}render(d){let P=`if(${this.condition})`+super.render(d);return this.else&&(P+="else "+this.else.render(d)),P}optimizeNodes(){super.optimizeNodes();const d=this.condition;if(d===!0)return this.nodes;let P=this.else;if(P){const D=P.optimizeNodes();P=this.else=Array.isArray(D)?new a(D):D}if(P)return d===!1?P instanceof p?P:P.nodes:this.nodes.length?this:new p(ue(d),P instanceof p?[P]:P.nodes);if(!(d===!1||!this.nodes.length))return this}optimizeNames(d,P){var D;if(this.else=(D=this.else)===null||D===void 0?void 0:D.optimizeNames(d,P),!!(super.optimizeNames(d,P)||this.else))return this.condition=J(this.condition,d,P),this}get names(){const d=super.names;return q(d,this.condition),this.else&&z(d,this.else.names),d}}p.kind="if";class r extends b{}r.kind="for";class s extends r{constructor(d){super(),this.iteration=d}render(d){return`for(${this.iteration})`+super.render(d)}optimizeNames(d,P){if(super.optimizeNames(d,P))return this.iteration=J(this.iteration,d,P),this}get names(){return z(super.names,this.iteration.names)}}class m extends r{constructor(d,P,D,F){super(),this.varKind=d,this.name=P,this.from=D,this.to=F}render(d){const P=d.es5?u.varKinds.var:this.varKind,{name:D,from:F,to:H}=this;return`for(${P} ${D}=${F}; ${D}<${H}; ${D}++)`+super.render(d)}get names(){const d=q(super.names,this.from);return q(d,this.to)}}class o extends r{constructor(d,P,D,F){super(),this.loop=d,this.varKind=P,this.name=D,this.iterable=F}render(d){return`for(${this.varKind} ${this.name} ${this.loop} ${this.iterable})`+super.render(d)}optimizeNames(d,P){if(super.optimizeNames(d,P))return this.iterable=J(this.iterable,d,P),this}get names(){return z(super.names,this.iterable.names)}}class c extends b{constructor(d,P,D){super(),this.name=d,this.args=P,this.async=D}render(d){return`${this.async?"async ":""}function ${this.name}(${this.args})`+super.render(d)}}c.kind="func";class S extends h{render(d){return"return "+super.render(d)}}S.kind="return";class j extends b{render(d){let P="try"+super.render(d);return this.catch&&(P+=this.catch.render(d)),this.finally&&(P+=this.finally.render(d)),P}optimizeNodes(){var d,P;return super.optimizeNodes(),(d=this.catch)===null||d===void 0||d.optimizeNodes(),(P=this.finally)===null||P===void 0||P.optimizeNodes(),this}optimizeNames(d,P){var D,F;return super.optimizeNames(d,P),(D=this.catch)===null||D===void 0||D.optimizeNames(d,P),(F=this.finally)===null||F===void 0||F.optimizeNames(d,P),this}get names(){const d=super.names;return this.catch&&z(d,this.catch.names),this.finally&&z(d,this.finally.names),d}}class _ extends b{constructor(d){super(),this.error=d}render(d){return`catch(${this.error})`+super.render(d)}}_.kind="catch";class E extends b{render(d){return"finally"+super.render(d)}}E.kind="finally";class L{constructor(d,P={}){this._values={},this._blockStarts=[],this._constants={},this.opts={...P,_n:P.lines?`
3
- `:""},this._extScope=d,this._scope=new u.Scope({parent:d}),this._nodes=[new C]}toString(){return this._root.render(this.opts)}name(d){return this._scope.name(d)}scopeName(d){return this._extScope.name(d)}scopeValue(d,P){const D=this._extScope.value(d,P);return(this._values[D.prefix]||(this._values[D.prefix]=new Set)).add(D),D}getScopeValue(d,P){return this._extScope.getValue(d,P)}scopeRefs(d){return this._extScope.scopeRefs(d,this._values)}scopeCode(){return this._extScope.scopeCode(this._values)}_def(d,P,D,F){const H=this._scope.toName(P);return D!==void 0&&F&&(this._constants[H.str]=D),this._leafNode(new y(d,H,D)),H}const(d,P,D){return this._def(u.varKinds.const,d,P,D)}let(d,P,D){return this._def(u.varKinds.let,d,P,D)}var(d,P,D){return this._def(u.varKinds.var,d,P,D)}assign(d,P,D){return this._leafNode(new l(d,P,D))}add(d,P){return this._leafNode(new g(d,e.operators.ADD,P))}code(d){return typeof d=="function"?d():d!==t.nil&&this._leafNode(new v(d)),this}object(...d){const P=["{"];for(const[D,F]of d)P.length>1&&P.push(","),P.push(D),(D!==F||this.opts.es5)&&(P.push(":"),(0,t.addCodeArg)(P,F));return P.push("}"),new t._Code(P)}if(d,P,D){if(this._blockNode(new p(d)),P&&D)this.code(P).else().code(D).endIf();else if(P)this.code(P).endIf();else if(D)throw new Error('CodeGen: "else" body without "then" body');return this}elseIf(d){return this._elseNode(new p(d))}else(){return this._elseNode(new a)}endIf(){return this._endBlockNode(p,a)}_for(d,P){return this._blockNode(d),P&&this.code(P).endFor(),this}for(d,P){return this._for(new s(d),P)}forRange(d,P,D,F,H=this.opts.es5?u.varKinds.var:u.varKinds.let){const X=this._scope.toName(d);return this._for(new m(H,X,P,D),()=>F(X))}forOf(d,P,D,F=u.varKinds.const){const H=this._scope.toName(d);if(this.opts.es5){const X=P instanceof t.Name?P:this.var("_arr",P);return this.forRange("_i",0,(0,t._)`${X}.length`,W=>{this.var(H,(0,t._)`${X}[${W}]`),D(H)})}return this._for(new o("of",F,H,P),()=>D(H))}forIn(d,P,D,F=this.opts.es5?u.varKinds.var:u.varKinds.const){if(this.opts.ownProperties)return this.forOf(d,(0,t._)`Object.keys(${P})`,D);const H=this._scope.toName(d);return this._for(new o("in",F,H,P),()=>D(H))}endFor(){return this._endBlockNode(r)}label(d){return this._leafNode(new A(d))}break(d){return this._leafNode(new f(d))}return(d){const P=new S;if(this._blockNode(P),this.code(d),P.nodes.length!==1)throw new Error('CodeGen: "return" should have one node');return this._endBlockNode(S)}try(d,P,D){if(!P&&!D)throw new Error('CodeGen: "try" without "catch" and "finally"');const F=new j;if(this._blockNode(F),this.code(d),P){const H=this.name("e");this._currNode=F.catch=new _(H),P(H)}return D&&(this._currNode=F.finally=new E,this.code(D)),this._endBlockNode(_,E)}throw(d){return this._leafNode(new k(d))}block(d,P){return this._blockStarts.push(this._nodes.length),d&&this.code(d).endBlock(P),this}endBlock(d){const P=this._blockStarts.pop();if(P===void 0)throw new Error("CodeGen: not in self-balancing block");const D=this._nodes.length-P;if(D<0||d!==void 0&&D!==d)throw new Error(`CodeGen: wrong number of nodes: ${D} vs ${d} expected`);return this._nodes.length=P,this}func(d,P=t.nil,D,F){return this._blockNode(new c(d,P,D)),F&&this.code(F).endFunc(),this}endFunc(){return this._endBlockNode(c)}optimize(d=1){for(;d-- >0;)this._root.optimizeNodes(),this._root.optimizeNames(this._root.names,this._constants)}_leafNode(d){return this._currNode.nodes.push(d),this}_blockNode(d){this._currNode.nodes.push(d),this._nodes.push(d)}_endBlockNode(d,P){const D=this._currNode;if(D instanceof d||P&&D instanceof P)return this._nodes.pop(),this;throw new Error(`CodeGen: not in block "${P?`${d.kind}/${P.kind}`:d.kind}"`)}_elseNode(d){const P=this._currNode;if(!(P instanceof p))throw new Error('CodeGen: "else" without "if"');return this._currNode=P.else=d,this}get _root(){return this._nodes[0]}get _currNode(){const d=this._nodes;return d[d.length-1]}set _currNode(d){const P=this._nodes;P[P.length-1]=d}}e.CodeGen=L;function z(B,d){for(const P in d)B[P]=(B[P]||0)+(d[P]||0);return B}function q(B,d){return d instanceof t._CodeOrName?z(B,d.names):B}function J(B,d,P){if(B instanceof t.Name)return D(B);if(!F(B))return B;return new t._Code(B._items.reduce((H,X)=>(X instanceof t.Name&&(X=D(X)),X instanceof t._Code?H.push(...X._items):H.push(X),H),[]));function D(H){const X=P[H.str];return X===void 0||d[H.str]!==1?H:(delete d[H.str],X)}function F(H){return H instanceof t._Code&&H._items.some(X=>X instanceof t.Name&&d[X.str]===1&&P[X.str]!==void 0)}}function ee(B,d){for(const P in d)B[P]=(B[P]||0)-(d[P]||0)}function ue(B){return typeof B=="boolean"||typeof B=="number"||B===null?!B:(0,t._)`!${N(B)}`}e.not=ue;const ye=M(e.operators.AND);function Z(...B){return B.reduce(ye)}e.and=Z;const fe=M(e.operators.OR);function R(...B){return B.reduce(fe)}e.or=R;function M(B){return(d,P)=>d===t.nil?P:P===t.nil?d:(0,t._)`${N(d)} ${B} ${N(P)}`}function N(B){return B instanceof t.Name?B:(0,t._)`(${B})`}})(jt)),jt}var V={},Xt;function Y(){if(Xt)return V;Xt=1,Object.defineProperty(V,"__esModule",{value:!0}),V.checkStrictMode=V.getErrorPath=V.Type=V.useFunc=V.setEvaluated=V.evaluatedPropsToName=V.mergeEvaluated=V.eachItem=V.unescapeJsonPointer=V.escapeJsonPointer=V.escapeFragment=V.unescapeFragment=V.schemaRefOrVal=V.schemaHasRulesButRef=V.schemaHasRules=V.checkUnknownRules=V.alwaysValidSchema=V.toHash=void 0;const e=U(),t=ft();function u(o){const c={};for(const S of o)c[S]=!0;return c}V.toHash=u;function i(o,c){return typeof c=="boolean"?c:Object.keys(c).length===0?!0:(x(o,c),!n(c,o.self.RULES.all))}V.alwaysValidSchema=i;function x(o,c=o.schema){const{opts:S,self:j}=o;if(!S.strictSchema||typeof c=="boolean")return;const _=j.RULES.keywords;for(const E in c)_[E]||m(o,`unknown keyword: "${E}"`)}V.checkUnknownRules=x;function n(o,c){if(typeof o=="boolean")return!o;for(const S in o)if(c[S])return!0;return!1}V.schemaHasRules=n;function y(o,c){if(typeof o=="boolean")return!o;for(const S in o)if(S!=="$ref"&&c.all[S])return!0;return!1}V.schemaHasRulesButRef=y;function l({topSchemaRef:o,schemaPath:c},S,j,_){if(!_){if(typeof S=="number"||typeof S=="boolean")return S;if(typeof S=="string")return(0,e._)`${S}`}return(0,e._)`${o}${c}${(0,e.getProperty)(j)}`}V.schemaRefOrVal=l;function g(o){return k(decodeURIComponent(o))}V.unescapeFragment=g;function A(o){return encodeURIComponent(f(o))}V.escapeFragment=A;function f(o){return typeof o=="number"?`${o}`:o.replace(/~/g,"~0").replace(/\//g,"~1")}V.escapeJsonPointer=f;function k(o){return o.replace(/~1/g,"/").replace(/~0/g,"~")}V.unescapeJsonPointer=k;function v(o,c){if(Array.isArray(o))for(const S of o)c(S);else c(o)}V.eachItem=v;function h({mergeNames:o,mergeToName:c,mergeValues:S,resultToName:j}){return(_,E,L,z)=>{const q=L===void 0?E:L instanceof e.Name?(E instanceof e.Name?o(_,E,L):c(_,E,L),L):E instanceof e.Name?(c(_,L,E),E):S(E,L);return z===e.Name&&!(q instanceof e.Name)?j(_,q):q}}V.mergeEvaluated={props:h({mergeNames:(o,c,S)=>o.if((0,e._)`${S} !== true && ${c} !== undefined`,()=>{o.if((0,e._)`${c} === true`,()=>o.assign(S,!0),()=>o.assign(S,(0,e._)`${S} || {}`).code((0,e._)`Object.assign(${S}, ${c})`))}),mergeToName:(o,c,S)=>o.if((0,e._)`${S} !== true`,()=>{c===!0?o.assign(S,!0):(o.assign(S,(0,e._)`${S} || {}`),C(o,S,c))}),mergeValues:(o,c)=>o===!0?!0:{...o,...c},resultToName:b}),items:h({mergeNames:(o,c,S)=>o.if((0,e._)`${S} !== true && ${c} !== undefined`,()=>o.assign(S,(0,e._)`${c} === true ? true : ${S} > ${c} ? ${S} : ${c}`)),mergeToName:(o,c,S)=>o.if((0,e._)`${S} !== true`,()=>o.assign(S,c===!0?!0:(0,e._)`${S} > ${c} ? ${S} : ${c}`)),mergeValues:(o,c)=>o===!0?!0:Math.max(o,c),resultToName:(o,c)=>o.var("items",c)})};function b(o,c){if(c===!0)return o.var("props",!0);const S=o.var("props",(0,e._)`{}`);return c!==void 0&&C(o,S,c),S}V.evaluatedPropsToName=b;function C(o,c,S){Object.keys(S).forEach(j=>o.assign((0,e._)`${c}${(0,e.getProperty)(j)}`,!0))}V.setEvaluated=C;const a={};function p(o,c){return o.scopeValue("func",{ref:c,code:a[c.code]||(a[c.code]=new t._Code(c.code))})}V.useFunc=p;var r;(function(o){o[o.Num=0]="Num",o[o.Str=1]="Str"})(r||(V.Type=r={}));function s(o,c,S){if(o instanceof e.Name){const j=c===r.Num;return S?j?(0,e._)`"[" + ${o} + "]"`:(0,e._)`"['" + ${o} + "']"`:j?(0,e._)`"/" + ${o}`:(0,e._)`"/" + ${o}.replace(/~/g, "~0").replace(/\\//g, "~1")`}return S?(0,e.getProperty)(o).toString():"/"+f(o)}V.getErrorPath=s;function m(o,c,S=o.opts.strictSchema){if(S){if(c=`strict mode: ${c}`,S===!0)throw new Error(c);o.self.logger.warn(c)}}return V.checkStrictMode=m,V}var Ne={},Qt;function xe(){if(Qt)return Ne;Qt=1,Object.defineProperty(Ne,"__esModule",{value:!0});const e=U(),t={data:new e.Name("data"),valCxt:new e.Name("valCxt"),instancePath:new e.Name("instancePath"),parentData:new e.Name("parentData"),parentDataProperty:new e.Name("parentDataProperty"),rootData:new e.Name("rootData"),dynamicAnchors:new e.Name("dynamicAnchors"),vErrors:new e.Name("vErrors"),errors:new e.Name("errors"),this:new e.Name("this"),self:new e.Name("self"),scope:new e.Name("scope"),json:new e.Name("json"),jsonPos:new e.Name("jsonPos"),jsonLen:new e.Name("jsonLen"),jsonPart:new e.Name("jsonPart")};return Ne.default=t,Ne}var Zt;function xt(){return Zt||(Zt=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.extendErrors=e.resetErrorsCount=e.reportExtraError=e.reportError=e.keyword$DataError=e.keywordError=void 0;const t=U(),u=Y(),i=xe();e.keywordError={message:({keyword:a})=>(0,t.str)`must pass "${a}" keyword validation`},e.keyword$DataError={message:({keyword:a,schemaType:p})=>p?(0,t.str)`"${a}" keyword must be ${p} ($data)`:(0,t.str)`"${a}" keyword is invalid ($data)`};function x(a,p=e.keywordError,r,s){const{it:m}=a,{gen:o,compositeRule:c,allErrors:S}=m,j=k(a,p,r);s??(c||S)?g(o,j):A(m,(0,t._)`[${j}]`)}e.reportError=x;function n(a,p=e.keywordError,r){const{it:s}=a,{gen:m,compositeRule:o,allErrors:c}=s,S=k(a,p,r);g(m,S),o||c||A(s,i.default.vErrors)}e.reportExtraError=n;function y(a,p){a.assign(i.default.errors,p),a.if((0,t._)`${i.default.vErrors} !== null`,()=>a.if(p,()=>a.assign((0,t._)`${i.default.vErrors}.length`,p),()=>a.assign(i.default.vErrors,null)))}e.resetErrorsCount=y;function l({gen:a,keyword:p,schemaValue:r,data:s,errsCount:m,it:o}){if(m===void 0)throw new Error("ajv implementation error");const c=a.name("err");a.forRange("i",m,i.default.errors,S=>{a.const(c,(0,t._)`${i.default.vErrors}[${S}]`),a.if((0,t._)`${c}.instancePath === undefined`,()=>a.assign((0,t._)`${c}.instancePath`,(0,t.strConcat)(i.default.instancePath,o.errorPath))),a.assign((0,t._)`${c}.schemaPath`,(0,t.str)`${o.errSchemaPath}/${p}`),o.opts.verbose&&(a.assign((0,t._)`${c}.schema`,r),a.assign((0,t._)`${c}.data`,s))})}e.extendErrors=l;function g(a,p){const r=a.const("err",p);a.if((0,t._)`${i.default.vErrors} === null`,()=>a.assign(i.default.vErrors,(0,t._)`[${r}]`),(0,t._)`${i.default.vErrors}.push(${r})`),a.code((0,t._)`${i.default.errors}++`)}function A(a,p){const{gen:r,validateName:s,schemaEnv:m}=a;m.$async?r.throw((0,t._)`new ${a.ValidationError}(${p})`):(r.assign((0,t._)`${s}.errors`,p),r.return(!1))}const f={keyword:new t.Name("keyword"),schemaPath:new t.Name("schemaPath"),params:new t.Name("params"),propertyName:new t.Name("propertyName"),message:new t.Name("message"),schema:new t.Name("schema"),parentSchema:new t.Name("parentSchema")};function k(a,p,r){const{createErrors:s}=a.it;return s===!1?(0,t._)`{}`:v(a,p,r)}function v(a,p,r={}){const{gen:s,it:m}=a,o=[h(m,r),b(a,r)];return C(a,p,o),s.object(...o)}function h({errorPath:a},{instancePath:p}){const r=p?(0,t.str)`${a}${(0,u.getErrorPath)(p,u.Type.Str)}`:a;return[i.default.instancePath,(0,t.strConcat)(i.default.instancePath,r)]}function b({keyword:a,it:{errSchemaPath:p}},{schemaPath:r,parentSchema:s}){let m=s?p:(0,t.str)`${p}/${a}`;return r&&(m=(0,t.str)`${m}${(0,u.getErrorPath)(r,u.Type.Str)}`),[f.schemaPath,m]}function C(a,{params:p,message:r},s){const{keyword:m,data:o,schemaValue:c,it:S}=a,{opts:j,propertyName:_,topSchemaRef:E,schemaPath:L}=S;s.push([f.keyword,m],[f.params,typeof p=="function"?p(a):p||(0,t._)`{}`]),j.messages&&s.push([f.message,typeof r=="function"?r(a):r]),j.verbose&&s.push([f.schema,c],[f.parentSchema,(0,t._)`${E}${L}`],[i.default.data,o]),_&&s.push([f.propertyName,_])}})(Bt)),Bt}var er;function wo(){if(er)return Se;er=1,Object.defineProperty(Se,"__esModule",{value:!0}),Se.boolOrEmptySchema=Se.topBoolOrEmptySchema=void 0;const e=xt(),t=U(),u=xe(),i={message:"boolean schema is false"};function x(l){const{gen:g,schema:A,validateName:f}=l;A===!1?y(l,!1):typeof A=="object"&&A.$async===!0?g.return(u.default.data):(g.assign((0,t._)`${f}.errors`,null),g.return(!0))}Se.topBoolOrEmptySchema=x;function n(l,g){const{gen:A,schema:f}=l;f===!1?(A.var(g,!1),y(l)):A.var(g,!0)}Se.boolOrEmptySchema=n;function y(l,g){const{gen:A,data:f}=l,k={gen:A,keyword:"false schema",data:f,schema:!1,schemaCode:!1,schemaValue:!1,params:{},it:l};(0,e.reportError)(k,i,void 0,g)}return Se}var oe={},Ae={},tr;function po(){if(tr)return Ae;tr=1,Object.defineProperty(Ae,"__esModule",{value:!0}),Ae.getRules=Ae.isJSONType=void 0;const e=["string","number","integer","boolean","null","object","array"],t=new Set(e);function u(x){return typeof x=="string"&&t.has(x)}Ae.isJSONType=u;function i(){const x={number:{type:"number",rules:[]},string:{type:"string",rules:[]},array:{type:"array",rules:[]},object:{type:"object",rules:[]}};return{types:{...x,integer:!0,boolean:!0,null:!0},rules:[{rules:[]},x.number,x.string,x.array,x.object],post:{rules:[]},all:{},keywords:{}}}return Ae.getRules=i,Ae}var ge={},rr;function lo(){if(rr)return ge;rr=1,Object.defineProperty(ge,"__esModule",{value:!0}),ge.shouldUseRule=ge.shouldUseGroup=ge.schemaHasRulesForType=void 0;function e({schema:i,self:x},n){const y=x.RULES.types[n];return y&&y!==!0&&t(i,y)}ge.schemaHasRulesForType=e;function t(i,x){return x.rules.some(n=>u(i,n))}ge.shouldUseGroup=t;function u(i,x){var n;return i[x.keyword]!==void 0||((n=x.definition.implements)===null||n===void 0?void 0:n.some(y=>i[y]!==void 0))}return ge.shouldUseRule=u,ge}var or;function vt(){if(or)return oe;or=1,Object.defineProperty(oe,"__esModule",{value:!0}),oe.reportTypeError=oe.checkDataTypes=oe.checkDataType=oe.coerceAndCheckDataType=oe.getJSONTypes=oe.getSchemaTypes=oe.DataType=void 0;const e=po(),t=lo(),u=xt(),i=U(),x=Y();var n;(function(r){r[r.Correct=0]="Correct",r[r.Wrong=1]="Wrong"})(n||(oe.DataType=n={}));function y(r){const s=l(r.type);if(s.includes("null")){if(r.nullable===!1)throw new Error("type: null contradicts nullable: false")}else{if(!s.length&&r.nullable!==void 0)throw new Error('"nullable" cannot be used without "type"');r.nullable===!0&&s.push("null")}return s}oe.getSchemaTypes=y;function l(r){const s=Array.isArray(r)?r:r?[r]:[];if(s.every(e.isJSONType))return s;throw new Error("type must be JSONType or JSONType[]: "+s.join(","))}oe.getJSONTypes=l;function g(r,s){const{gen:m,data:o,opts:c}=r,S=f(s,c.coerceTypes),j=s.length>0&&!(S.length===0&&s.length===1&&(0,t.schemaHasRulesForType)(r,s[0]));if(j){const _=b(s,o,c.strictNumbers,n.Wrong);m.if(_,()=>{S.length?k(r,s,S):a(r)})}return j}oe.coerceAndCheckDataType=g;const A=new Set(["string","number","integer","boolean","null"]);function f(r,s){return s?r.filter(m=>A.has(m)||s==="array"&&m==="array"):[]}function k(r,s,m){const{gen:o,data:c,opts:S}=r,j=o.let("dataType",(0,i._)`typeof ${c}`),_=o.let("coerced",(0,i._)`undefined`);S.coerceTypes==="array"&&o.if((0,i._)`${j} == 'object' && Array.isArray(${c}) && ${c}.length == 1`,()=>o.assign(c,(0,i._)`${c}[0]`).assign(j,(0,i._)`typeof ${c}`).if(b(s,c,S.strictNumbers),()=>o.assign(_,c))),o.if((0,i._)`${_} !== undefined`);for(const L of m)(A.has(L)||L==="array"&&S.coerceTypes==="array")&&E(L);o.else(),a(r),o.endIf(),o.if((0,i._)`${_} !== undefined`,()=>{o.assign(c,_),v(r,_)});function E(L){switch(L){case"string":o.elseIf((0,i._)`${j} == "number" || ${j} == "boolean"`).assign(_,(0,i._)`"" + ${c}`).elseIf((0,i._)`${c} === null`).assign(_,(0,i._)`""`);return;case"number":o.elseIf((0,i._)`${j} == "boolean" || ${c} === null
4
- || (${j} == "string" && ${c} && ${c} == +${c})`).assign(_,(0,i._)`+${c}`);return;case"integer":o.elseIf((0,i._)`${j} === "boolean" || ${c} === null
5
- || (${j} === "string" && ${c} && ${c} == +${c} && !(${c} % 1))`).assign(_,(0,i._)`+${c}`);return;case"boolean":o.elseIf((0,i._)`${c} === "false" || ${c} === 0 || ${c} === null`).assign(_,!1).elseIf((0,i._)`${c} === "true" || ${c} === 1`).assign(_,!0);return;case"null":o.elseIf((0,i._)`${c} === "" || ${c} === 0 || ${c} === false`),o.assign(_,null);return;case"array":o.elseIf((0,i._)`${j} === "string" || ${j} === "number"
6
- || ${j} === "boolean" || ${c} === null`).assign(_,(0,i._)`[${c}]`)}}}function v({gen:r,parentData:s,parentDataProperty:m},o){r.if((0,i._)`${s} !== undefined`,()=>r.assign((0,i._)`${s}[${m}]`,o))}function h(r,s,m,o=n.Correct){const c=o===n.Correct?i.operators.EQ:i.operators.NEQ;let S;switch(r){case"null":return(0,i._)`${s} ${c} null`;case"array":S=(0,i._)`Array.isArray(${s})`;break;case"object":S=(0,i._)`${s} && typeof ${s} == "object" && !Array.isArray(${s})`;break;case"integer":S=j((0,i._)`!(${s} % 1) && !isNaN(${s})`);break;case"number":S=j();break;default:return(0,i._)`typeof ${s} ${c} ${r}`}return o===n.Correct?S:(0,i.not)(S);function j(_=i.nil){return(0,i.and)((0,i._)`typeof ${s} == "number"`,_,m?(0,i._)`isFinite(${s})`:i.nil)}}oe.checkDataType=h;function b(r,s,m,o){if(r.length===1)return h(r[0],s,m,o);let c;const S=(0,x.toHash)(r);if(S.array&&S.object){const j=(0,i._)`typeof ${s} != "object"`;c=S.null?j:(0,i._)`!${s} || ${j}`,delete S.null,delete S.array,delete S.object}else c=i.nil;S.number&&delete S.integer;for(const j in S)c=(0,i.and)(c,h(j,s,m,o));return c}oe.checkDataTypes=b;const C={message:({schema:r})=>`must be ${r}`,params:({schema:r,schemaValue:s})=>typeof r=="string"?(0,i._)`{type: ${r}}`:(0,i._)`{type: ${s}}`};function a(r){const s=p(r);(0,u.reportError)(s,C)}oe.reportTypeError=a;function p(r){const{gen:s,data:m,schema:o}=r,c=(0,x.schemaRefOrVal)(r,o,"type");return{gen:s,keyword:"type",data:m,schema:o.type,schemaCode:c,schemaValue:c,parentSchema:o,params:{},it:r}}return oe}var Be={},ir;function Bo(){if(ir)return Be;ir=1,Object.defineProperty(Be,"__esModule",{value:!0}),Be.assignDefaults=void 0;const e=U(),t=Y();function u(x,n){const{properties:y,items:l}=x.schema;if(n==="object"&&y)for(const g in y)i(x,g,y[g].default);else n==="array"&&Array.isArray(l)&&l.forEach((g,A)=>i(x,A,g.default))}Be.assignDefaults=u;function i(x,n,y){const{gen:l,compositeRule:g,data:A,opts:f}=x;if(y===void 0)return;const k=(0,e._)`${A}${(0,e.getProperty)(n)}`;if(g){(0,t.checkStrictMode)(x,`default is ignored for: ${k}`);return}let v=(0,e._)`${k} === undefined`;f.useDefaults==="empty"&&(v=(0,e._)`${v} || ${k} === null || ${k} === ""`),l.if(v,(0,e._)`${k} = ${(0,e.stringify)(y)}`)}return Be}var le={},Q={},nr;function ce(){if(nr)return Q;nr=1,Object.defineProperty(Q,"__esModule",{value:!0}),Q.validateUnion=Q.validateArray=Q.usePattern=Q.callValidateCode=Q.schemaProperties=Q.allSchemaProperties=Q.noPropertyInData=Q.propertyInData=Q.isOwnProperty=Q.hasPropFunc=Q.reportMissingProp=Q.checkMissingProp=Q.checkReportMissingProp=void 0;const e=U(),t=Y(),u=xe(),i=Y();function x(r,s){const{gen:m,data:o,it:c}=r;m.if(f(m,o,s,c.opts.ownProperties),()=>{r.setParams({missingProperty:(0,e._)`${s}`},!0),r.error()})}Q.checkReportMissingProp=x;function n({gen:r,data:s,it:{opts:m}},o,c){return(0,e.or)(...o.map(S=>(0,e.and)(f(r,s,S,m.ownProperties),(0,e._)`${c} = ${S}`)))}Q.checkMissingProp=n;function y(r,s){r.setParams({missingProperty:s},!0),r.error()}Q.reportMissingProp=y;function l(r){return r.scopeValue("func",{ref:Object.prototype.hasOwnProperty,code:(0,e._)`Object.prototype.hasOwnProperty`})}Q.hasPropFunc=l;function g(r,s,m){return(0,e._)`${l(r)}.call(${s}, ${m})`}Q.isOwnProperty=g;function A(r,s,m,o){const c=(0,e._)`${s}${(0,e.getProperty)(m)} !== undefined`;return o?(0,e._)`${c} && ${g(r,s,m)}`:c}Q.propertyInData=A;function f(r,s,m,o){const c=(0,e._)`${s}${(0,e.getProperty)(m)} === undefined`;return o?(0,e.or)(c,(0,e.not)(g(r,s,m))):c}Q.noPropertyInData=f;function k(r){return r?Object.keys(r).filter(s=>s!=="__proto__"):[]}Q.allSchemaProperties=k;function v(r,s){return k(s).filter(m=>!(0,t.alwaysValidSchema)(r,s[m]))}Q.schemaProperties=v;function h({schemaCode:r,data:s,it:{gen:m,topSchemaRef:o,schemaPath:c,errorPath:S},it:j},_,E,L){const z=L?(0,e._)`${r}, ${s}, ${o}${c}`:s,q=[[u.default.instancePath,(0,e.strConcat)(u.default.instancePath,S)],[u.default.parentData,j.parentData],[u.default.parentDataProperty,j.parentDataProperty],[u.default.rootData,u.default.rootData]];j.opts.dynamicRef&&q.push([u.default.dynamicAnchors,u.default.dynamicAnchors]);const J=(0,e._)`${z}, ${m.object(...q)}`;return E!==e.nil?(0,e._)`${_}.call(${E}, ${J})`:(0,e._)`${_}(${J})`}Q.callValidateCode=h;const b=(0,e._)`new RegExp`;function C({gen:r,it:{opts:s}},m){const o=s.unicodeRegExp?"u":"",{regExp:c}=s.code,S=c(m,o);return r.scopeValue("pattern",{key:S.toString(),ref:S,code:(0,e._)`${c.code==="new RegExp"?b:(0,i.useFunc)(r,c)}(${m}, ${o})`})}Q.usePattern=C;function a(r){const{gen:s,data:m,keyword:o,it:c}=r,S=s.name("valid");if(c.allErrors){const _=s.let("valid",!0);return j(()=>s.assign(_,!1)),_}return s.var(S,!0),j(()=>s.break()),S;function j(_){const E=s.const("len",(0,e._)`${m}.length`);s.forRange("i",0,E,L=>{r.subschema({keyword:o,dataProp:L,dataPropType:t.Type.Num},S),s.if((0,e.not)(S),_)})}}Q.validateArray=a;function p(r){const{gen:s,schema:m,keyword:o,it:c}=r;if(!Array.isArray(m))throw new Error("ajv implementation error");if(m.some(E=>(0,t.alwaysValidSchema)(c,E))&&!c.opts.unevaluated)return;const j=s.let("valid",!1),_=s.name("_valid");s.block(()=>m.forEach((E,L)=>{const z=r.subschema({keyword:o,schemaProp:L,compositeRule:!0},_);s.assign(j,(0,e._)`${j} || ${_}`),r.mergeValidEvaluated(z,_)||s.if((0,e.not)(j))})),r.result(j,()=>r.reset(),()=>r.error(!0))}return Q.validateUnion=p,Q}var ar;function jo(){if(ar)return le;ar=1,Object.defineProperty(le,"__esModule",{value:!0}),le.validateKeywordUsage=le.validSchemaType=le.funcKeywordCode=le.macroKeywordCode=void 0;const e=U(),t=xe(),u=ce(),i=xt();function x(v,h){const{gen:b,keyword:C,schema:a,parentSchema:p,it:r}=v,s=h.macro.call(r.self,a,p,r),m=A(b,C,s);r.opts.validateSchema!==!1&&r.self.validateSchema(s,!0);const o=b.name("valid");v.subschema({schema:s,schemaPath:e.nil,errSchemaPath:`${r.errSchemaPath}/${C}`,topSchemaRef:m,compositeRule:!0},o),v.pass(o,()=>v.error(!0))}le.macroKeywordCode=x;function n(v,h){var b;const{gen:C,keyword:a,schema:p,parentSchema:r,$data:s,it:m}=v;g(m,h);const o=!s&&h.compile?h.compile.call(m.self,p,r,m):h.validate,c=A(C,a,o),S=C.let("valid");v.block$data(S,j),v.ok((b=h.valid)!==null&&b!==void 0?b:S);function j(){if(h.errors===!1)L(),h.modifying&&y(v),z(()=>v.error());else{const q=h.async?_():E();h.modifying&&y(v),z(()=>l(v,q))}}function _(){const q=C.let("ruleErrs",null);return C.try(()=>L((0,e._)`await `),J=>C.assign(S,!1).if((0,e._)`${J} instanceof ${m.ValidationError}`,()=>C.assign(q,(0,e._)`${J}.errors`),()=>C.throw(J))),q}function E(){const q=(0,e._)`${c}.errors`;return C.assign(q,null),L(e.nil),q}function L(q=h.async?(0,e._)`await `:e.nil){const J=m.opts.passContext?t.default.this:t.default.self,ee=!("compile"in h&&!s||h.schema===!1);C.assign(S,(0,e._)`${q}${(0,u.callValidateCode)(v,c,J,ee)}`,h.modifying)}function z(q){var J;C.if((0,e.not)((J=h.valid)!==null&&J!==void 0?J:S),q)}}le.funcKeywordCode=n;function y(v){const{gen:h,data:b,it:C}=v;h.if(C.parentData,()=>h.assign(b,(0,e._)`${C.parentData}[${C.parentDataProperty}]`))}function l(v,h){const{gen:b}=v;b.if((0,e._)`Array.isArray(${h})`,()=>{b.assign(t.default.vErrors,(0,e._)`${t.default.vErrors} === null ? ${h} : ${t.default.vErrors}.concat(${h})`).assign(t.default.errors,(0,e._)`${t.default.vErrors}.length`),(0,i.extendErrors)(v)},()=>v.error())}function g({schemaEnv:v},h){if(h.async&&!v.$async)throw new Error("async keyword in sync schema")}function A(v,h,b){if(b===void 0)throw new Error(`keyword "${h}" failed to compile`);return v.scopeValue("keyword",typeof b=="function"?{ref:b}:{ref:b,code:(0,e.stringify)(b)})}function f(v,h,b=!1){return!h.length||h.some(C=>C==="array"?Array.isArray(v):C==="object"?v&&typeof v=="object"&&!Array.isArray(v):typeof v==C||b&&typeof v>"u")}le.validSchemaType=f;function k({schema:v,opts:h,self:b,errSchemaPath:C},a,p){if(Array.isArray(a.keyword)?!a.keyword.includes(p):a.keyword!==p)throw new Error("ajv implementation error");const r=a.dependencies;if(r?.some(s=>!Object.prototype.hasOwnProperty.call(v,s)))throw new Error(`parent schema must have dependencies of ${p}: ${r.join(",")}`);if(a.validateSchema&&!a.validateSchema(v[p])){const m=`keyword "${p}" value is invalid at path "${C}": `+b.errorsText(a.validateSchema.errors);if(h.validateSchema==="log")b.logger.error(m);else throw new Error(m)}}return le.validateKeywordUsage=k,le}var be={},sr;function Do(){if(sr)return be;sr=1,Object.defineProperty(be,"__esModule",{value:!0}),be.extendSubschemaMode=be.extendSubschemaData=be.getSubschema=void 0;const e=U(),t=Y();function u(n,{keyword:y,schemaProp:l,schema:g,schemaPath:A,errSchemaPath:f,topSchemaRef:k}){if(y!==void 0&&g!==void 0)throw new Error('both "keyword" and "schema" passed, only one allowed');if(y!==void 0){const v=n.schema[y];return l===void 0?{schema:v,schemaPath:(0,e._)`${n.schemaPath}${(0,e.getProperty)(y)}`,errSchemaPath:`${n.errSchemaPath}/${y}`}:{schema:v[l],schemaPath:(0,e._)`${n.schemaPath}${(0,e.getProperty)(y)}${(0,e.getProperty)(l)}`,errSchemaPath:`${n.errSchemaPath}/${y}/${(0,t.escapeFragment)(l)}`}}if(g!==void 0){if(A===void 0||f===void 0||k===void 0)throw new Error('"schemaPath", "errSchemaPath" and "topSchemaRef" are required with "schema"');return{schema:g,schemaPath:A,topSchemaRef:k,errSchemaPath:f}}throw new Error('either "keyword" or "schema" must be passed')}be.getSubschema=u;function i(n,y,{dataProp:l,dataPropType:g,data:A,dataTypes:f,propertyName:k}){if(A!==void 0&&l!==void 0)throw new Error('both "data" and "dataProp" passed, only one allowed');const{gen:v}=y;if(l!==void 0){const{errorPath:b,dataPathArr:C,opts:a}=y,p=v.let("data",(0,e._)`${y.data}${(0,e.getProperty)(l)}`,!0);h(p),n.errorPath=(0,e.str)`${b}${(0,t.getErrorPath)(l,g,a.jsPropertySyntax)}`,n.parentDataProperty=(0,e._)`${l}`,n.dataPathArr=[...C,n.parentDataProperty]}if(A!==void 0){const b=A instanceof e.Name?A:v.let("data",A,!0);h(b),k!==void 0&&(n.propertyName=k)}f&&(n.dataTypes=f);function h(b){n.data=b,n.dataLevel=y.dataLevel+1,n.dataTypes=[],y.definedProperties=new Set,n.parentData=y.data,n.dataNames=[...y.dataNames,b]}}be.extendSubschemaData=i;function x(n,{jtdDiscriminator:y,jtdMetadata:l,compositeRule:g,createErrors:A,allErrors:f}){g!==void 0&&(n.compositeRule=g),A!==void 0&&(n.createErrors=A),f!==void 0&&(n.allErrors=f),n.jtdDiscriminator=y,n.jtdMetadata=l}return be.extendSubschemaMode=x,be}var ie={},Nt,pr;function co(){return pr||(pr=1,Nt=function e(t,u){if(t===u)return!0;if(t&&u&&typeof t=="object"&&typeof u=="object"){if(t.constructor!==u.constructor)return!1;var i,x,n;if(Array.isArray(t)){if(i=t.length,i!=u.length)return!1;for(x=i;x--!==0;)if(!e(t[x],u[x]))return!1;return!0}if(t.constructor===RegExp)return t.source===u.source&&t.flags===u.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===u.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===u.toString();if(n=Object.keys(t),i=n.length,i!==Object.keys(u).length)return!1;for(x=i;x--!==0;)if(!Object.prototype.hasOwnProperty.call(u,n[x]))return!1;for(x=i;x--!==0;){var y=n[x];if(!e(t[y],u[y]))return!1}return!0}return t!==t&&u!==u}),Nt}var _t={exports:{}},dr;function Oo(){if(dr)return _t.exports;dr=1;var e=_t.exports=function(i,x,n){typeof x=="function"&&(n=x,x={}),n=x.cb||n;var y=typeof n=="function"?n:n.pre||function(){},l=n.post||function(){};t(x,y,l,i,"",i)};e.keywords={additionalItems:!0,items:!0,contains:!0,additionalProperties:!0,propertyNames:!0,not:!0,if:!0,then:!0,else:!0},e.arrayKeywords={items:!0,allOf:!0,anyOf:!0,oneOf:!0},e.propsKeywords={$defs:!0,definitions:!0,properties:!0,patternProperties:!0,dependencies:!0},e.skipKeywords={default:!0,enum:!0,const:!0,required:!0,maximum:!0,minimum:!0,exclusiveMaximum:!0,exclusiveMinimum:!0,multipleOf:!0,maxLength:!0,minLength:!0,pattern:!0,format:!0,maxItems:!0,minItems:!0,uniqueItems:!0,maxProperties:!0,minProperties:!0};function t(i,x,n,y,l,g,A,f,k,v){if(y&&typeof y=="object"&&!Array.isArray(y)){x(y,l,g,A,f,k,v);for(var h in y){var b=y[h];if(Array.isArray(b)){if(h in e.arrayKeywords)for(var C=0;C<b.length;C++)t(i,x,n,b[C],l+"/"+h+"/"+C,g,l,h,y,C)}else if(h in e.propsKeywords){if(b&&typeof b=="object")for(var a in b)t(i,x,n,b[a],l+"/"+h+"/"+u(a),g,l,h,y,a)}else(h in e.keywords||i.allKeys&&!(h in e.skipKeywords))&&t(i,x,n,b,l+"/"+h,g,l,h,y)}n(y,l,g,A,f,k,v)}}function u(i){return i.replace(/~/g,"~0").replace(/\//g,"~1")}return _t.exports}var lr;function St(){if(lr)return ie;lr=1,Object.defineProperty(ie,"__esModule",{value:!0}),ie.getSchemaRefs=ie.resolveUrl=ie.normalizeId=ie._getFullPath=ie.getFullPath=ie.inlineRef=void 0;const e=Y(),t=co(),u=Oo(),i=new Set(["type","format","pattern","maxLength","minLength","maxProperties","minProperties","maxItems","minItems","maximum","minimum","uniqueItems","multipleOf","required","enum","const"]);function x(C,a=!0){return typeof C=="boolean"?!0:a===!0?!y(C):a?l(C)<=a:!1}ie.inlineRef=x;const n=new Set(["$ref","$recursiveRef","$recursiveAnchor","$dynamicRef","$dynamicAnchor"]);function y(C){for(const a in C){if(n.has(a))return!0;const p=C[a];if(Array.isArray(p)&&p.some(y)||typeof p=="object"&&y(p))return!0}return!1}function l(C){let a=0;for(const p in C){if(p==="$ref")return 1/0;if(a++,!i.has(p)&&(typeof C[p]=="object"&&(0,e.eachItem)(C[p],r=>a+=l(r)),a===1/0))return 1/0}return a}function g(C,a="",p){p!==!1&&(a=k(a));const r=C.parse(a);return A(C,r)}ie.getFullPath=g;function A(C,a){return C.serialize(a).split("#")[0]+"#"}ie._getFullPath=A;const f=/#\/?$/;function k(C){return C?C.replace(f,""):""}ie.normalizeId=k;function v(C,a,p){return p=k(p),C.resolve(a,p)}ie.resolveUrl=v;const h=/^[a-z_][-a-z0-9._]*$/i;function b(C,a){if(typeof C=="boolean")return{};const{schemaId:p,uriResolver:r}=this.opts,s=k(C[p]||a),m={"":s},o=g(r,s,!1),c={},S=new Set;return u(C,{allKeys:!0},(E,L,z,q)=>{if(q===void 0)return;const J=o+L;let ee=m[q];typeof E[p]=="string"&&(ee=ue.call(this,E[p])),ye.call(this,E.$anchor),ye.call(this,E.$dynamicAnchor),m[L]=ee;function ue(Z){const fe=this.opts.uriResolver.resolve;if(Z=k(ee?fe(ee,Z):Z),S.has(Z))throw _(Z);S.add(Z);let R=this.refs[Z];return typeof R=="string"&&(R=this.refs[R]),typeof R=="object"?j(E,R.schema,Z):Z!==k(J)&&(Z[0]==="#"?(j(E,c[Z],Z),c[Z]=E):this.refs[Z]=J),Z}function ye(Z){if(typeof Z=="string"){if(!h.test(Z))throw new Error(`invalid anchor "${Z}"`);ue.call(this,`#${Z}`)}}}),c;function j(E,L,z){if(L!==void 0&&!t(E,L))throw _(z)}function _(E){return new Error(`reference "${E}" resolves to more than one schema`)}}return ie.getSchemaRefs=b,ie}var cr;function At(){if(cr)return me;cr=1,Object.defineProperty(me,"__esModule",{value:!0}),me.getData=me.KeywordCxt=me.validateFunctionCode=void 0;const e=wo(),t=vt(),u=lo(),i=vt(),x=Bo(),n=jo(),y=Do(),l=U(),g=xe(),A=St(),f=Y(),k=xt();function v(T){if(o(T)&&(S(T),m(T))){a(T);return}h(T,()=>(0,e.topBoolOrEmptySchema)(T))}me.validateFunctionCode=v;function h({gen:T,validateName:w,schema:O,schemaEnv:$,opts:I},G){I.code.es5?T.func(w,(0,l._)`${g.default.data}, ${g.default.valCxt}`,$.$async,()=>{T.code((0,l._)`"use strict"; ${r(O,I)}`),C(T,I),T.code(G)}):T.func(w,(0,l._)`${g.default.data}, ${b(I)}`,$.$async,()=>T.code(r(O,I)).code(G))}function b(T){return(0,l._)`{${g.default.instancePath}="", ${g.default.parentData}, ${g.default.parentDataProperty}, ${g.default.rootData}=${g.default.data}${T.dynamicRef?(0,l._)`, ${g.default.dynamicAnchors}={}`:l.nil}}={}`}function C(T,w){T.if(g.default.valCxt,()=>{T.var(g.default.instancePath,(0,l._)`${g.default.valCxt}.${g.default.instancePath}`),T.var(g.default.parentData,(0,l._)`${g.default.valCxt}.${g.default.parentData}`),T.var(g.default.parentDataProperty,(0,l._)`${g.default.valCxt}.${g.default.parentDataProperty}`),T.var(g.default.rootData,(0,l._)`${g.default.valCxt}.${g.default.rootData}`),w.dynamicRef&&T.var(g.default.dynamicAnchors,(0,l._)`${g.default.valCxt}.${g.default.dynamicAnchors}`)},()=>{T.var(g.default.instancePath,(0,l._)`""`),T.var(g.default.parentData,(0,l._)`undefined`),T.var(g.default.parentDataProperty,(0,l._)`undefined`),T.var(g.default.rootData,g.default.data),w.dynamicRef&&T.var(g.default.dynamicAnchors,(0,l._)`{}`)})}function a(T){const{schema:w,opts:O,gen:$}=T;h(T,()=>{O.$comment&&w.$comment&&q(T),E(T),$.let(g.default.vErrors,null),$.let(g.default.errors,0),O.unevaluated&&p(T),j(T),J(T)})}function p(T){const{gen:w,validateName:O}=T;T.evaluated=w.const("evaluated",(0,l._)`${O}.evaluated`),w.if((0,l._)`${T.evaluated}.dynamicProps`,()=>w.assign((0,l._)`${T.evaluated}.props`,(0,l._)`undefined`)),w.if((0,l._)`${T.evaluated}.dynamicItems`,()=>w.assign((0,l._)`${T.evaluated}.items`,(0,l._)`undefined`))}function r(T,w){const O=typeof T=="object"&&T[w.schemaId];return O&&(w.code.source||w.code.process)?(0,l._)`/*# sourceURL=${O} */`:l.nil}function s(T,w){if(o(T)&&(S(T),m(T))){c(T,w);return}(0,e.boolOrEmptySchema)(T,w)}function m({schema:T,self:w}){if(typeof T=="boolean")return!T;for(const O in T)if(w.RULES.all[O])return!0;return!1}function o(T){return typeof T.schema!="boolean"}function c(T,w){const{schema:O,gen:$,opts:I}=T;I.$comment&&O.$comment&&q(T),L(T),z(T);const G=$.const("_errs",g.default.errors);j(T,G),$.var(w,(0,l._)`${G} === ${g.default.errors}`)}function S(T){(0,f.checkUnknownRules)(T),_(T)}function j(T,w){if(T.opts.jtd)return ue(T,[],!1,w);const O=(0,t.getSchemaTypes)(T.schema),$=(0,t.coerceAndCheckDataType)(T,O);ue(T,O,!$,w)}function _(T){const{schema:w,errSchemaPath:O,opts:$,self:I}=T;w.$ref&&$.ignoreKeywordsWithRef&&(0,f.schemaHasRulesButRef)(w,I.RULES)&&I.logger.warn(`$ref: keywords ignored in schema at path "${O}"`)}function E(T){const{schema:w,opts:O}=T;w.default!==void 0&&O.useDefaults&&O.strictSchema&&(0,f.checkStrictMode)(T,"default is ignored in the schema root")}function L(T){const w=T.schema[T.opts.schemaId];w&&(T.baseId=(0,A.resolveUrl)(T.opts.uriResolver,T.baseId,w))}function z(T){if(T.schema.$async&&!T.schemaEnv.$async)throw new Error("async schema in sync schema")}function q({gen:T,schemaEnv:w,schema:O,errSchemaPath:$,opts:I}){const G=O.$comment;if(I.$comment===!0)T.code((0,l._)`${g.default.self}.logger.log(${G})`);else if(typeof I.$comment=="function"){const te=(0,l.str)`${$}/$comment`,de=T.scopeValue("root",{ref:w.root});T.code((0,l._)`${g.default.self}.opts.$comment(${G}, ${te}, ${de}.schema)`)}}function J(T){const{gen:w,schemaEnv:O,validateName:$,ValidationError:I,opts:G}=T;O.$async?w.if((0,l._)`${g.default.errors} === 0`,()=>w.return(g.default.data),()=>w.throw((0,l._)`new ${I}(${g.default.vErrors})`)):(w.assign((0,l._)`${$}.errors`,g.default.vErrors),G.unevaluated&&ee(T),w.return((0,l._)`${g.default.errors} === 0`))}function ee({gen:T,evaluated:w,props:O,items:$}){O instanceof l.Name&&T.assign((0,l._)`${w}.props`,O),$ instanceof l.Name&&T.assign((0,l._)`${w}.items`,$)}function ue(T,w,O,$){const{gen:I,schema:G,data:te,allErrors:de,opts:ne,self:ae}=T,{RULES:re}=ae;if(G.$ref&&(ne.ignoreKeywordsWithRef||!(0,f.schemaHasRulesButRef)(G,re))){I.block(()=>F(T,"$ref",re.all.$ref.definition));return}ne.jtd||Z(T,w),I.block(()=>{for(const pe of re.rules)Pe(pe);Pe(re.post)});function Pe(pe){(0,u.shouldUseGroup)(G,pe)&&(pe.type?(I.if((0,i.checkDataType)(pe.type,te,ne.strictNumbers)),ye(T,pe),w.length===1&&w[0]===pe.type&&O&&(I.else(),(0,i.reportTypeError)(T)),I.endIf()):ye(T,pe),de||I.if((0,l._)`${g.default.errors} === ${$||0}`))}}function ye(T,w){const{gen:O,schema:$,opts:{useDefaults:I}}=T;I&&(0,x.assignDefaults)(T,w.type),O.block(()=>{for(const G of w.rules)(0,u.shouldUseRule)($,G)&&F(T,G.keyword,G.definition,w.type)})}function Z(T,w){T.schemaEnv.meta||!T.opts.strictTypes||(fe(T,w),T.opts.allowUnionTypes||R(T,w),M(T,T.dataTypes))}function fe(T,w){if(w.length){if(!T.dataTypes.length){T.dataTypes=w;return}w.forEach(O=>{B(T.dataTypes,O)||P(T,`type "${O}" not allowed by context "${T.dataTypes.join(",")}"`)}),d(T,w)}}function R(T,w){w.length>1&&!(w.length===2&&w.includes("null"))&&P(T,"use allowUnionTypes to allow union type keyword")}function M(T,w){const O=T.self.RULES.all;for(const $ in O){const I=O[$];if(typeof I=="object"&&(0,u.shouldUseRule)(T.schema,I)){const{type:G}=I.definition;G.length&&!G.some(te=>N(w,te))&&P(T,`missing type "${G.join(",")}" for keyword "${$}"`)}}}function N(T,w){return T.includes(w)||w==="number"&&T.includes("integer")}function B(T,w){return T.includes(w)||w==="integer"&&T.includes("number")}function d(T,w){const O=[];for(const $ of T.dataTypes)B(w,$)?O.push($):w.includes("integer")&&$==="number"&&O.push("integer");T.dataTypes=O}function P(T,w){const O=T.schemaEnv.baseId+T.errSchemaPath;w+=` at "${O}" (strictTypes)`,(0,f.checkStrictMode)(T,w,T.opts.strictTypes)}class D{constructor(w,O,$){if((0,n.validateKeywordUsage)(w,O,$),this.gen=w.gen,this.allErrors=w.allErrors,this.keyword=$,this.data=w.data,this.schema=w.schema[$],this.$data=O.$data&&w.opts.$data&&this.schema&&this.schema.$data,this.schemaValue=(0,f.schemaRefOrVal)(w,this.schema,$,this.$data),this.schemaType=O.schemaType,this.parentSchema=w.schema,this.params={},this.it=w,this.def=O,this.$data)this.schemaCode=w.gen.const("vSchema",W(this.$data,w));else if(this.schemaCode=this.schemaValue,!(0,n.validSchemaType)(this.schema,O.schemaType,O.allowUndefined))throw new Error(`${$} value must be ${JSON.stringify(O.schemaType)}`);("code"in O?O.trackErrors:O.errors!==!1)&&(this.errsCount=w.gen.const("_errs",g.default.errors))}result(w,O,$){this.failResult((0,l.not)(w),O,$)}failResult(w,O,$){this.gen.if(w),$?$():this.error(),O?(this.gen.else(),O(),this.allErrors&&this.gen.endIf()):this.allErrors?this.gen.endIf():this.gen.else()}pass(w,O){this.failResult((0,l.not)(w),void 0,O)}fail(w){if(w===void 0){this.error(),this.allErrors||this.gen.if(!1);return}this.gen.if(w),this.error(),this.allErrors?this.gen.endIf():this.gen.else()}fail$data(w){if(!this.$data)return this.fail(w);const{schemaCode:O}=this;this.fail((0,l._)`${O} !== undefined && (${(0,l.or)(this.invalid$data(),w)})`)}error(w,O,$){if(O){this.setParams(O),this._error(w,$),this.setParams({});return}this._error(w,$)}_error(w,O){(w?k.reportExtraError:k.reportError)(this,this.def.error,O)}$dataError(){(0,k.reportError)(this,this.def.$dataError||k.keyword$DataError)}reset(){if(this.errsCount===void 0)throw new Error('add "trackErrors" to keyword definition');(0,k.resetErrorsCount)(this.gen,this.errsCount)}ok(w){this.allErrors||this.gen.if(w)}setParams(w,O){O?Object.assign(this.params,w):this.params=w}block$data(w,O,$=l.nil){this.gen.block(()=>{this.check$data(w,$),O()})}check$data(w=l.nil,O=l.nil){if(!this.$data)return;const{gen:$,schemaCode:I,schemaType:G,def:te}=this;$.if((0,l.or)((0,l._)`${I} === undefined`,O)),w!==l.nil&&$.assign(w,!0),(G.length||te.validateSchema)&&($.elseIf(this.invalid$data()),this.$dataError(),w!==l.nil&&$.assign(w,!1)),$.else()}invalid$data(){const{gen:w,schemaCode:O,schemaType:$,def:I,it:G}=this;return(0,l.or)(te(),de());function te(){if($.length){if(!(O instanceof l.Name))throw new Error("ajv implementation error");const ne=Array.isArray($)?$:[$];return(0,l._)`${(0,i.checkDataTypes)(ne,O,G.opts.strictNumbers,i.DataType.Wrong)}`}return l.nil}function de(){if(I.validateSchema){const ne=w.scopeValue("validate$data",{ref:I.validateSchema});return(0,l._)`!${ne}(${O})`}return l.nil}}subschema(w,O){const $=(0,y.getSubschema)(this.it,w);(0,y.extendSubschemaData)($,this.it,w),(0,y.extendSubschemaMode)($,w);const I={...this.it,...$,items:void 0,props:void 0};return s(I,O),I}mergeEvaluated(w,O){const{it:$,gen:I}=this;$.opts.unevaluated&&($.props!==!0&&w.props!==void 0&&($.props=f.mergeEvaluated.props(I,w.props,$.props,O)),$.items!==!0&&w.items!==void 0&&($.items=f.mergeEvaluated.items(I,w.items,$.items,O)))}mergeValidEvaluated(w,O){const{it:$,gen:I}=this;if($.opts.unevaluated&&($.props!==!0||$.items!==!0))return I.if(O,()=>this.mergeEvaluated(w,l.Name)),!0}}me.KeywordCxt=D;function F(T,w,O,$){const I=new D(T,O,w);"code"in O?O.code(I,$):I.$data&&O.validate?(0,n.funcKeywordCode)(I,O):"macro"in O?(0,n.macroKeywordCode)(I,O):(O.compile||O.validate)&&(0,n.funcKeywordCode)(I,O)}const H=/^\/(?:[^~]|~0|~1)*$/,X=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;function W(T,{dataLevel:w,dataNames:O,dataPathArr:$}){let I,G;if(T==="")return g.default.rootData;if(T[0]==="/"){if(!H.test(T))throw new Error(`Invalid JSON-pointer: ${T}`);I=T,G=g.default.rootData}else{const ae=X.exec(T);if(!ae)throw new Error(`Invalid JSON-pointer: ${T}`);const re=+ae[1];if(I=ae[2],I==="#"){if(re>=w)throw new Error(ne("property/index",re));return $[w-re]}if(re>w)throw new Error(ne("data",re));if(G=O[w-re],!I)return G}let te=G;const de=I.split("/");for(const ae of de)ae&&(G=(0,l._)`${G}${(0,l.getProperty)((0,f.unescapeJsonPointer)(ae))}`,te=(0,l._)`${te} && ${G}`);return te;function ne(ae,re){return`Cannot access ${ae} ${re} levels up, current level is ${w}`}}return me.getData=W,me}var _e={},ur;function Ht(){if(ur)return _e;ur=1,Object.defineProperty(_e,"__esModule",{value:!0});class e extends Error{constructor(u){super("validation failed"),this.errors=u,this.ajv=this.validation=!0}}return _e.default=e,_e}var Re={},yr;function Ct(){if(yr)return Re;yr=1,Object.defineProperty(Re,"__esModule",{value:!0});const e=St();class t extends Error{constructor(i,x,n,y){super(y||`can't resolve reference ${n} from id ${x}`),this.missingRef=(0,e.resolveUrl)(i,x,n),this.missingSchema=(0,e.normalizeId)((0,e.getFullPath)(i,this.missingRef))}}return Re.default=t,Re}var se={},mr;function qt(){if(mr)return se;mr=1,Object.defineProperty(se,"__esModule",{value:!0}),se.resolveSchema=se.getCompilingSchema=se.resolveRef=se.compileSchema=se.SchemaEnv=void 0;const e=U(),t=Ht(),u=xe(),i=St(),x=Y(),n=At();class y{constructor(p){var r;this.refs={},this.dynamicAnchors={};let s;typeof p.schema=="object"&&(s=p.schema),this.schema=p.schema,this.schemaId=p.schemaId,this.root=p.root||this,this.baseId=(r=p.baseId)!==null&&r!==void 0?r:(0,i.normalizeId)(s?.[p.schemaId||"$id"]),this.schemaPath=p.schemaPath,this.localRefs=p.localRefs,this.meta=p.meta,this.$async=s?.$async,this.refs={}}}se.SchemaEnv=y;function l(a){const p=f.call(this,a);if(p)return p;const r=(0,i.getFullPath)(this.opts.uriResolver,a.root.baseId),{es5:s,lines:m}=this.opts.code,{ownProperties:o}=this.opts,c=new e.CodeGen(this.scope,{es5:s,lines:m,ownProperties:o});let S;a.$async&&(S=c.scopeValue("Error",{ref:t.default,code:(0,e._)`require("ajv/dist/runtime/validation_error").default`}));const j=c.scopeName("validate");a.validateName=j;const _={gen:c,allErrors:this.opts.allErrors,data:u.default.data,parentData:u.default.parentData,parentDataProperty:u.default.parentDataProperty,dataNames:[u.default.data],dataPathArr:[e.nil],dataLevel:0,dataTypes:[],definedProperties:new Set,topSchemaRef:c.scopeValue("schema",this.opts.code.source===!0?{ref:a.schema,code:(0,e.stringify)(a.schema)}:{ref:a.schema}),validateName:j,ValidationError:S,schema:a.schema,schemaEnv:a,rootId:r,baseId:a.baseId||r,schemaPath:e.nil,errSchemaPath:a.schemaPath||(this.opts.jtd?"":"#"),errorPath:(0,e._)`""`,opts:this.opts,self:this};let E;try{this._compilations.add(a),(0,n.validateFunctionCode)(_),c.optimize(this.opts.code.optimize);const L=c.toString();E=`${c.scopeRefs(u.default.scope)}return ${L}`,this.opts.code.process&&(E=this.opts.code.process(E,a));const q=new Function(`${u.default.self}`,`${u.default.scope}`,E)(this,this.scope.get());if(this.scope.value(j,{ref:q}),q.errors=null,q.schema=a.schema,q.schemaEnv=a,a.$async&&(q.$async=!0),this.opts.code.source===!0&&(q.source={validateName:j,validateCode:L,scopeValues:c._values}),this.opts.unevaluated){const{props:J,items:ee}=_;q.evaluated={props:J instanceof e.Name?void 0:J,items:ee instanceof e.Name?void 0:ee,dynamicProps:J instanceof e.Name,dynamicItems:ee instanceof e.Name},q.source&&(q.source.evaluated=(0,e.stringify)(q.evaluated))}return a.validate=q,a}catch(L){throw delete a.validate,delete a.validateName,E&&this.logger.error("Error compiling schema, function code:",E),L}finally{this._compilations.delete(a)}}se.compileSchema=l;function g(a,p,r){var s;r=(0,i.resolveUrl)(this.opts.uriResolver,p,r);const m=a.refs[r];if(m)return m;let o=v.call(this,a,r);if(o===void 0){const c=(s=a.localRefs)===null||s===void 0?void 0:s[r],{schemaId:S}=this.opts;c&&(o=new y({schema:c,schemaId:S,root:a,baseId:p}))}if(o!==void 0)return a.refs[r]=A.call(this,o)}se.resolveRef=g;function A(a){return(0,i.inlineRef)(a.schema,this.opts.inlineRefs)?a.schema:a.validate?a:l.call(this,a)}function f(a){for(const p of this._compilations)if(k(p,a))return p}se.getCompilingSchema=f;function k(a,p){return a.schema===p.schema&&a.root===p.root&&a.baseId===p.baseId}function v(a,p){let r;for(;typeof(r=this.refs[p])=="string";)p=r;return r||this.schemas[p]||h.call(this,a,p)}function h(a,p){const r=this.opts.uriResolver.parse(p),s=(0,i._getFullPath)(this.opts.uriResolver,r);let m=(0,i.getFullPath)(this.opts.uriResolver,a.baseId,void 0);if(Object.keys(a.schema).length>0&&s===m)return C.call(this,r,a);const o=(0,i.normalizeId)(s),c=this.refs[o]||this.schemas[o];if(typeof c=="string"){const S=h.call(this,a,c);return typeof S?.schema!="object"?void 0:C.call(this,r,S)}if(typeof c?.schema=="object"){if(c.validate||l.call(this,c),o===(0,i.normalizeId)(p)){const{schema:S}=c,{schemaId:j}=this.opts,_=S[j];return _&&(m=(0,i.resolveUrl)(this.opts.uriResolver,m,_)),new y({schema:S,schemaId:j,root:a,baseId:m})}return C.call(this,r,c)}}se.resolveSchema=h;const b=new Set(["properties","patternProperties","enum","dependencies","definitions"]);function C(a,{baseId:p,schema:r,root:s}){var m;if(((m=a.fragment)===null||m===void 0?void 0:m[0])!=="/")return;for(const S of a.fragment.slice(1).split("/")){if(typeof r=="boolean")return;const j=r[(0,x.unescapeFragment)(S)];if(j===void 0)return;r=j;const _=typeof r=="object"&&r[this.opts.schemaId];!b.has(S)&&_&&(p=(0,i.resolveUrl)(this.opts.uriResolver,p,_))}let o;if(typeof r!="boolean"&&r.$ref&&!(0,x.schemaHasRulesButRef)(r,this.RULES)){const S=(0,i.resolveUrl)(this.opts.uriResolver,p,r.$ref);o=h.call(this,s,S)}const{schemaId:c}=this.opts;if(o=o||new y({schema:r,schemaId:c,root:s,baseId:p}),o.schema!==o.root.schema)return o}return se}const No="https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",_o="Meta-schema for $data reference (JSON AnySchema extension proposal)",Ro="object",$o=["$data"],Eo={$data:{type:"string",anyOf:[{format:"relative-json-pointer"},{format:"json-pointer"}]}},Lo=!1,Fo={$id:No,description:_o,type:Ro,required:$o,properties:Eo,additionalProperties:Lo};var $e={},je={exports:{}},Rt,gr;function uo(){if(gr)return Rt;gr=1;const e=RegExp.prototype.test.bind(/^[\da-f]{8}-[\da-f]{4}-[\da-f]{4}-[\da-f]{4}-[\da-f]{12}$/iu),t=RegExp.prototype.test.bind(/^(?:(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d{2}|[1-9]\d|\d)$/u);function u(v){let h="",b=0,C=0;for(C=0;C<v.length;C++)if(b=v[C].charCodeAt(0),b!==48){if(!(b>=48&&b<=57||b>=65&&b<=70||b>=97&&b<=102))return"";h+=v[C];break}for(C+=1;C<v.length;C++){if(b=v[C].charCodeAt(0),!(b>=48&&b<=57||b>=65&&b<=70||b>=97&&b<=102))return"";h+=v[C]}return h}const i=RegExp.prototype.test.bind(/[^!"$&'()*+,\-.;=_`a-z{}~]/u);function x(v){return v.length=0,!0}function n(v,h,b){if(v.length){const C=u(v);if(C!=="")h.push(C);else return b.error=!0,!1;v.length=0}return!0}function y(v){let h=0;const b={error:!1,address:"",zone:""},C=[],a=[];let p=!1,r=!1,s=n;for(let m=0;m<v.length;m++){const o=v[m];if(!(o==="["||o==="]"))if(o===":"){if(p===!0&&(r=!0),!s(a,C,b))break;if(++h>7){b.error=!0;break}m>0&&v[m-1]===":"&&(p=!0),C.push(":");continue}else if(o==="%"){if(!s(a,C,b))break;s=x}else{a.push(o);continue}}return a.length&&(s===x?b.zone=a.join(""):r?C.push(a.join("")):C.push(u(a))),b.address=C.join(""),b}function l(v){if(g(v,":")<2)return{host:v,isIPV6:!1};const h=y(v);if(h.error)return{host:v,isIPV6:!1};{let b=h.address,C=h.address;return h.zone&&(b+="%"+h.zone,C+="%25"+h.zone),{host:b,isIPV6:!0,escapedHost:C}}}function g(v,h){let b=0;for(let C=0;C<v.length;C++)v[C]===h&&b++;return b}function A(v){let h=v;const b=[];let C=-1,a=0;for(;a=h.length;){if(a===1){if(h===".")break;if(h==="/"){b.push("/");break}else{b.push(h);break}}else if(a===2){if(h[0]==="."){if(h[1]===".")break;if(h[1]==="/"){h=h.slice(2);continue}}else if(h[0]==="/"&&(h[1]==="."||h[1]==="/")){b.push("/");break}}else if(a===3&&h==="/.."){b.length!==0&&b.pop(),b.push("/");break}if(h[0]==="."){if(h[1]==="."){if(h[2]==="/"){h=h.slice(3);continue}}else if(h[1]==="/"){h=h.slice(2);continue}}else if(h[0]==="/"&&h[1]==="."){if(h[2]==="/"){h=h.slice(2);continue}else if(h[2]==="."&&h[3]==="/"){h=h.slice(3),b.length!==0&&b.pop();continue}}if((C=h.indexOf("/",1))===-1){b.push(h);break}else b.push(h.slice(0,C)),h=h.slice(C)}return b.join("")}function f(v,h){const b=h!==!0?escape:unescape;return v.scheme!==void 0&&(v.scheme=b(v.scheme)),v.userinfo!==void 0&&(v.userinfo=b(v.userinfo)),v.host!==void 0&&(v.host=b(v.host)),v.path!==void 0&&(v.path=b(v.path)),v.query!==void 0&&(v.query=b(v.query)),v.fragment!==void 0&&(v.fragment=b(v.fragment)),v}function k(v){const h=[];if(v.userinfo!==void 0&&(h.push(v.userinfo),h.push("@")),v.host!==void 0){let b=unescape(v.host);if(!t(b)){const C=l(b);C.isIPV6===!0?b=`[${C.escapedHost}]`:b=v.host}h.push(b)}return(typeof v.port=="number"||typeof v.port=="string")&&(h.push(":"),h.push(String(v.port))),h.length?h.join(""):void 0}return Rt={nonSimpleDomain:i,recomposeAuthority:k,normalizeComponentEncoding:f,removeDotSegments:A,isIPv4:t,isUUID:e,normalizeIPv6:l,stringArrayToHexStripped:u},Rt}var $t,br;function Io(){if(br)return $t;br=1;const{isUUID:e}=uo(),t=/([\da-z][\d\-a-z]{0,31}):((?:[\w!$'()*+,\-.:;=@]|%[\da-f]{2})+)/iu,u=["http","https","ws","wss","urn","urn:uuid"];function i(o){return u.indexOf(o)!==-1}function x(o){return o.secure===!0?!0:o.secure===!1?!1:o.scheme?o.scheme.length===3&&(o.scheme[0]==="w"||o.scheme[0]==="W")&&(o.scheme[1]==="s"||o.scheme[1]==="S")&&(o.scheme[2]==="s"||o.scheme[2]==="S"):!1}function n(o){return o.host||(o.error=o.error||"HTTP URIs must have a host."),o}function y(o){const c=String(o.scheme).toLowerCase()==="https";return(o.port===(c?443:80)||o.port==="")&&(o.port=void 0),o.path||(o.path="/"),o}function l(o){return o.secure=x(o),o.resourceName=(o.path||"/")+(o.query?"?"+o.query:""),o.path=void 0,o.query=void 0,o}function g(o){if((o.port===(x(o)?443:80)||o.port==="")&&(o.port=void 0),typeof o.secure=="boolean"&&(o.scheme=o.secure?"wss":"ws",o.secure=void 0),o.resourceName){const[c,S]=o.resourceName.split("?");o.path=c&&c!=="/"?c:void 0,o.query=S,o.resourceName=void 0}return o.fragment=void 0,o}function A(o,c){if(!o.path)return o.error="URN can not be parsed",o;const S=o.path.match(t);if(S){const j=c.scheme||o.scheme||"urn";o.nid=S[1].toLowerCase(),o.nss=S[2];const _=`${j}:${c.nid||o.nid}`,E=m(_);o.path=void 0,E&&(o=E.parse(o,c))}else o.error=o.error||"URN can not be parsed.";return o}function f(o,c){if(o.nid===void 0)throw new Error("URN without nid cannot be serialized");const S=c.scheme||o.scheme||"urn",j=o.nid.toLowerCase(),_=`${S}:${c.nid||j}`,E=m(_);E&&(o=E.serialize(o,c));const L=o,z=o.nss;return L.path=`${j||c.nid}:${z}`,c.skipEscape=!0,L}function k(o,c){const S=o;return S.uuid=S.nss,S.nss=void 0,!c.tolerant&&(!S.uuid||!e(S.uuid))&&(S.error=S.error||"UUID is not valid."),S}function v(o){const c=o;return c.nss=(o.uuid||"").toLowerCase(),c}const h={scheme:"http",domainHost:!0,parse:n,serialize:y},b={scheme:"https",domainHost:h.domainHost,parse:n,serialize:y},C={scheme:"ws",domainHost:!0,parse:l,serialize:g},a={scheme:"wss",domainHost:C.domainHost,parse:C.parse,serialize:C.serialize},s={http:h,https:b,ws:C,wss:a,urn:{scheme:"urn",parse:A,serialize:f,skipNormalize:!0},"urn:uuid":{scheme:"urn:uuid",parse:k,serialize:v,skipNormalize:!0}};Object.setPrototypeOf(s,null);function m(o){return o&&(s[o]||s[o.toLowerCase()])||void 0}return $t={wsIsSecure:x,SCHEMES:s,isValidSchemeName:i,getSchemeHandler:m},$t}var hr;function Ho(){if(hr)return je.exports;hr=1;const{normalizeIPv6:e,removeDotSegments:t,recomposeAuthority:u,normalizeComponentEncoding:i,isIPv4:x,nonSimpleDomain:n}=uo(),{SCHEMES:y,getSchemeHandler:l}=Io();function g(a,p){return typeof a=="string"?a=v(b(a,p),p):typeof a=="object"&&(a=b(v(a,p),p)),a}function A(a,p,r){const s=r?Object.assign({scheme:"null"},r):{scheme:"null"},m=f(b(a,s),b(p,s),s,!0);return s.skipEscape=!0,v(m,s)}function f(a,p,r,s){const m={};return s||(a=b(v(a,r),r),p=b(v(p,r),r)),r=r||{},!r.tolerant&&p.scheme?(m.scheme=p.scheme,m.userinfo=p.userinfo,m.host=p.host,m.port=p.port,m.path=t(p.path||""),m.query=p.query):(p.userinfo!==void 0||p.host!==void 0||p.port!==void 0?(m.userinfo=p.userinfo,m.host=p.host,m.port=p.port,m.path=t(p.path||""),m.query=p.query):(p.path?(p.path[0]==="/"?m.path=t(p.path):((a.userinfo!==void 0||a.host!==void 0||a.port!==void 0)&&!a.path?m.path="/"+p.path:a.path?m.path=a.path.slice(0,a.path.lastIndexOf("/")+1)+p.path:m.path=p.path,m.path=t(m.path)),m.query=p.query):(m.path=a.path,p.query!==void 0?m.query=p.query:m.query=a.query),m.userinfo=a.userinfo,m.host=a.host,m.port=a.port),m.scheme=a.scheme),m.fragment=p.fragment,m}function k(a,p,r){return typeof a=="string"?(a=unescape(a),a=v(i(b(a,r),!0),{...r,skipEscape:!0})):typeof a=="object"&&(a=v(i(a,!0),{...r,skipEscape:!0})),typeof p=="string"?(p=unescape(p),p=v(i(b(p,r),!0),{...r,skipEscape:!0})):typeof p=="object"&&(p=v(i(p,!0),{...r,skipEscape:!0})),a.toLowerCase()===p.toLowerCase()}function v(a,p){const r={host:a.host,scheme:a.scheme,userinfo:a.userinfo,port:a.port,path:a.path,query:a.query,nid:a.nid,nss:a.nss,uuid:a.uuid,fragment:a.fragment,reference:a.reference,resourceName:a.resourceName,secure:a.secure,error:""},s=Object.assign({},p),m=[],o=l(s.scheme||r.scheme);o&&o.serialize&&o.serialize(r,s),r.path!==void 0&&(s.skipEscape?r.path=unescape(r.path):(r.path=escape(r.path),r.scheme!==void 0&&(r.path=r.path.split("%3A").join(":")))),s.reference!=="suffix"&&r.scheme&&m.push(r.scheme,":");const c=u(r);if(c!==void 0&&(s.reference!=="suffix"&&m.push("//"),m.push(c),r.path&&r.path[0]!=="/"&&m.push("/")),r.path!==void 0){let S=r.path;!s.absolutePath&&(!o||!o.absolutePath)&&(S=t(S)),c===void 0&&S[0]==="/"&&S[1]==="/"&&(S="/%2F"+S.slice(2)),m.push(S)}return r.query!==void 0&&m.push("?",r.query),r.fragment!==void 0&&m.push("#",r.fragment),m.join("")}const h=/^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;function b(a,p){const r=Object.assign({},p),s={scheme:void 0,userinfo:void 0,host:"",port:void 0,path:"",query:void 0,fragment:void 0};let m=!1;r.reference==="suffix"&&(r.scheme?a=r.scheme+":"+a:a="//"+a);const o=a.match(h);if(o){if(s.scheme=o[1],s.userinfo=o[3],s.host=o[4],s.port=parseInt(o[5],10),s.path=o[6]||"",s.query=o[7],s.fragment=o[8],isNaN(s.port)&&(s.port=o[5]),s.host)if(x(s.host)===!1){const j=e(s.host);s.host=j.host.toLowerCase(),m=j.isIPV6}else m=!0;s.scheme===void 0&&s.userinfo===void 0&&s.host===void 0&&s.port===void 0&&s.query===void 0&&!s.path?s.reference="same-document":s.scheme===void 0?s.reference="relative":s.fragment===void 0?s.reference="absolute":s.reference="uri",r.reference&&r.reference!=="suffix"&&r.reference!==s.reference&&(s.error=s.error||"URI is not a "+r.reference+" reference.");const c=l(r.scheme||s.scheme);if(!r.unicodeSupport&&(!c||!c.unicodeSupport)&&s.host&&(r.domainHost||c&&c.domainHost)&&m===!1&&n(s.host))try{s.host=URL.domainToASCII(s.host.toLowerCase())}catch(S){s.error=s.error||"Host's domain name can not be converted to ASCII: "+S}(!c||c&&!c.skipNormalize)&&(a.indexOf("%")!==-1&&(s.scheme!==void 0&&(s.scheme=unescape(s.scheme)),s.host!==void 0&&(s.host=unescape(s.host))),s.path&&(s.path=escape(unescape(s.path))),s.fragment&&(s.fragment=encodeURI(decodeURIComponent(s.fragment)))),c&&c.parse&&c.parse(s,r)}else s.error=s.error||"URI can not be parsed.";return s}const C={SCHEMES:y,normalize:g,resolve:A,resolveComponent:f,equal:k,serialize:v,parse:b};return je.exports=C,je.exports.default=C,je.exports.fastUri=C,je.exports}var fr;function qo(){if(fr)return $e;fr=1,Object.defineProperty($e,"__esModule",{value:!0});const e=Ho();return e.code='require("ajv/dist/runtime/uri").default',$e.default=e,$e}var vr;function zo(){return vr||(vr=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.CodeGen=e.Name=e.nil=e.stringify=e.str=e._=e.KeywordCxt=void 0;var t=At();Object.defineProperty(e,"KeywordCxt",{enumerable:!0,get:function(){return t.KeywordCxt}});var u=U();Object.defineProperty(e,"_",{enumerable:!0,get:function(){return u._}}),Object.defineProperty(e,"str",{enumerable:!0,get:function(){return u.str}}),Object.defineProperty(e,"stringify",{enumerable:!0,get:function(){return u.stringify}}),Object.defineProperty(e,"nil",{enumerable:!0,get:function(){return u.nil}}),Object.defineProperty(e,"Name",{enumerable:!0,get:function(){return u.Name}}),Object.defineProperty(e,"CodeGen",{enumerable:!0,get:function(){return u.CodeGen}});const i=Ht(),x=Ct(),n=po(),y=qt(),l=U(),g=St(),A=vt(),f=Y(),k=Fo,v=qo(),h=(R,M)=>new RegExp(R,M);h.code="new RegExp";const b=["removeAdditional","useDefaults","coerceTypes"],C=new Set(["validate","serialize","parse","wrapper","root","schema","keyword","pattern","formats","validate$data","func","obj","Error"]),a={errorDataPath:"",format:"`validateFormats: false` can be used instead.",nullable:'"nullable" keyword is supported by default.',jsonPointers:"Deprecated jsPropertySyntax can be used instead.",extendRefs:"Deprecated ignoreKeywordsWithRef can be used instead.",missingRefs:"Pass empty schema with $id that should be ignored to ajv.addSchema.",processCode:"Use option `code: {process: (code, schemaEnv: object) => string}`",sourceCode:"Use option `code: {source: true}`",strictDefaults:"It is default now, see option `strict`.",strictKeywords:"It is default now, see option `strict`.",uniqueItems:'"uniqueItems" keyword is always validated.',unknownFormats:"Disable strict mode or pass `true` to `ajv.addFormat` (or `formats` option).",cache:"Map is used as cache, schema object as key.",serialize:"Map is used as cache, schema object as key.",ajvErrors:"It is default now."},p={ignoreKeywordsWithRef:"",jsPropertySyntax:"",unicode:'"minLength"/"maxLength" account for unicode characters by default.'},r=200;function s(R){var M,N,B,d,P,D,F,H,X,W,T,w,O,$,I,G,te,de,ne,ae,re,Pe,pe,Pt,kt;const we=R.strict,Tt=(M=R.code)===null||M===void 0?void 0:M.optimize,Gt=Tt===!0||Tt===void 0?1:Tt||0,Ut=(B=(N=R.code)===null||N===void 0?void 0:N.regExp)!==null&&B!==void 0?B:h,To=(d=R.uriResolver)!==null&&d!==void 0?d:v.default;return{strictSchema:(D=(P=R.strictSchema)!==null&&P!==void 0?P:we)!==null&&D!==void 0?D:!0,strictNumbers:(H=(F=R.strictNumbers)!==null&&F!==void 0?F:we)!==null&&H!==void 0?H:!0,strictTypes:(W=(X=R.strictTypes)!==null&&X!==void 0?X:we)!==null&&W!==void 0?W:"log",strictTuples:(w=(T=R.strictTuples)!==null&&T!==void 0?T:we)!==null&&w!==void 0?w:"log",strictRequired:($=(O=R.strictRequired)!==null&&O!==void 0?O:we)!==null&&$!==void 0?$:!1,code:R.code?{...R.code,optimize:Gt,regExp:Ut}:{optimize:Gt,regExp:Ut},loopRequired:(I=R.loopRequired)!==null&&I!==void 0?I:r,loopEnum:(G=R.loopEnum)!==null&&G!==void 0?G:r,meta:(te=R.meta)!==null&&te!==void 0?te:!0,messages:(de=R.messages)!==null&&de!==void 0?de:!0,inlineRefs:(ne=R.inlineRefs)!==null&&ne!==void 0?ne:!0,schemaId:(ae=R.schemaId)!==null&&ae!==void 0?ae:"$id",addUsedSchema:(re=R.addUsedSchema)!==null&&re!==void 0?re:!0,validateSchema:(Pe=R.validateSchema)!==null&&Pe!==void 0?Pe:!0,validateFormats:(pe=R.validateFormats)!==null&&pe!==void 0?pe:!0,unicodeRegExp:(Pt=R.unicodeRegExp)!==null&&Pt!==void 0?Pt:!0,int32range:(kt=R.int32range)!==null&&kt!==void 0?kt:!0,uriResolver:To}}class m{constructor(M={}){this.schemas={},this.refs={},this.formats={},this._compilations=new Set,this._loading={},this._cache=new Map,M=this.opts={...M,...s(M)};const{es5:N,lines:B}=this.opts.code;this.scope=new l.ValueScope({scope:{},prefixes:C,es5:N,lines:B}),this.logger=z(M.logger);const d=M.validateFormats;M.validateFormats=!1,this.RULES=(0,n.getRules)(),o.call(this,a,M,"NOT SUPPORTED"),o.call(this,p,M,"DEPRECATED","warn"),this._metaOpts=E.call(this),M.formats&&j.call(this),this._addVocabularies(),this._addDefaultMetaSchema(),M.keywords&&_.call(this,M.keywords),typeof M.meta=="object"&&this.addMetaSchema(M.meta),S.call(this),M.validateFormats=d}_addVocabularies(){this.addKeyword("$async")}_addDefaultMetaSchema(){const{$data:M,meta:N,schemaId:B}=this.opts;let d=k;B==="id"&&(d={...k},d.id=d.$id,delete d.$id),N&&M&&this.addMetaSchema(d,d[B],!1)}defaultMeta(){const{meta:M,schemaId:N}=this.opts;return this.opts.defaultMeta=typeof M=="object"?M[N]||M:void 0}validate(M,N){let B;if(typeof M=="string"){if(B=this.getSchema(M),!B)throw new Error(`no schema with key or ref "${M}"`)}else B=this.compile(M);const d=B(N);return"$async"in B||(this.errors=B.errors),d}compile(M,N){const B=this._addSchema(M,N);return B.validate||this._compileSchemaEnv(B)}compileAsync(M,N){if(typeof this.opts.loadSchema!="function")throw new Error("options.loadSchema should be a function");const{loadSchema:B}=this.opts;return d.call(this,M,N);async function d(W,T){await P.call(this,W.$schema);const w=this._addSchema(W,T);return w.validate||D.call(this,w)}async function P(W){W&&!this.getSchema(W)&&await d.call(this,{$ref:W},!0)}async function D(W){try{return this._compileSchemaEnv(W)}catch(T){if(!(T instanceof x.default))throw T;return F.call(this,T),await H.call(this,T.missingSchema),D.call(this,W)}}function F({missingSchema:W,missingRef:T}){if(this.refs[W])throw new Error(`AnySchema ${W} is loaded but ${T} cannot be resolved`)}async function H(W){const T=await X.call(this,W);this.refs[W]||await P.call(this,T.$schema),this.refs[W]||this.addSchema(T,W,N)}async function X(W){const T=this._loading[W];if(T)return T;try{return await(this._loading[W]=B(W))}finally{delete this._loading[W]}}}addSchema(M,N,B,d=this.opts.validateSchema){if(Array.isArray(M)){for(const D of M)this.addSchema(D,void 0,B,d);return this}let P;if(typeof M=="object"){const{schemaId:D}=this.opts;if(P=M[D],P!==void 0&&typeof P!="string")throw new Error(`schema ${D} must be string`)}return N=(0,g.normalizeId)(N||P),this._checkUnique(N),this.schemas[N]=this._addSchema(M,B,N,d,!0),this}addMetaSchema(M,N,B=this.opts.validateSchema){return this.addSchema(M,N,!0,B),this}validateSchema(M,N){if(typeof M=="boolean")return!0;let B;if(B=M.$schema,B!==void 0&&typeof B!="string")throw new Error("$schema must be a string");if(B=B||this.opts.defaultMeta||this.defaultMeta(),!B)return this.logger.warn("meta-schema not available"),this.errors=null,!0;const d=this.validate(B,M);if(!d&&N){const P="schema is invalid: "+this.errorsText();if(this.opts.validateSchema==="log")this.logger.error(P);else throw new Error(P)}return d}getSchema(M){let N;for(;typeof(N=c.call(this,M))=="string";)M=N;if(N===void 0){const{schemaId:B}=this.opts,d=new y.SchemaEnv({schema:{},schemaId:B});if(N=y.resolveSchema.call(this,d,M),!N)return;this.refs[M]=N}return N.validate||this._compileSchemaEnv(N)}removeSchema(M){if(M instanceof RegExp)return this._removeAllSchemas(this.schemas,M),this._removeAllSchemas(this.refs,M),this;switch(typeof M){case"undefined":return this._removeAllSchemas(this.schemas),this._removeAllSchemas(this.refs),this._cache.clear(),this;case"string":{const N=c.call(this,M);return typeof N=="object"&&this._cache.delete(N.schema),delete this.schemas[M],delete this.refs[M],this}case"object":{const N=M;this._cache.delete(N);let B=M[this.opts.schemaId];return B&&(B=(0,g.normalizeId)(B),delete this.schemas[B],delete this.refs[B]),this}default:throw new Error("ajv.removeSchema: invalid parameter")}}addVocabulary(M){for(const N of M)this.addKeyword(N);return this}addKeyword(M,N){let B;if(typeof M=="string")B=M,typeof N=="object"&&(this.logger.warn("these parameters are deprecated, see docs for addKeyword"),N.keyword=B);else if(typeof M=="object"&&N===void 0){if(N=M,B=N.keyword,Array.isArray(B)&&!B.length)throw new Error("addKeywords: keyword must be string or non-empty array")}else throw new Error("invalid addKeywords parameters");if(J.call(this,B,N),!N)return(0,f.eachItem)(B,P=>ee.call(this,P)),this;ye.call(this,N);const d={...N,type:(0,A.getJSONTypes)(N.type),schemaType:(0,A.getJSONTypes)(N.schemaType)};return(0,f.eachItem)(B,d.type.length===0?P=>ee.call(this,P,d):P=>d.type.forEach(D=>ee.call(this,P,d,D))),this}getKeyword(M){const N=this.RULES.all[M];return typeof N=="object"?N.definition:!!N}removeKeyword(M){const{RULES:N}=this;delete N.keywords[M],delete N.all[M];for(const B of N.rules){const d=B.rules.findIndex(P=>P.keyword===M);d>=0&&B.rules.splice(d,1)}return this}addFormat(M,N){return typeof N=="string"&&(N=new RegExp(N)),this.formats[M]=N,this}errorsText(M=this.errors,{separator:N=", ",dataVar:B="data"}={}){return!M||M.length===0?"No errors":M.map(d=>`${B}${d.instancePath} ${d.message}`).reduce((d,P)=>d+N+P)}$dataMetaSchema(M,N){const B=this.RULES.all;M=JSON.parse(JSON.stringify(M));for(const d of N){const P=d.split("/").slice(1);let D=M;for(const F of P)D=D[F];for(const F in B){const H=B[F];if(typeof H!="object")continue;const{$data:X}=H.definition,W=D[F];X&&W&&(D[F]=fe(W))}}return M}_removeAllSchemas(M,N){for(const B in M){const d=M[B];(!N||N.test(B))&&(typeof d=="string"?delete M[B]:d&&!d.meta&&(this._cache.delete(d.schema),delete M[B]))}}_addSchema(M,N,B,d=this.opts.validateSchema,P=this.opts.addUsedSchema){let D;const{schemaId:F}=this.opts;if(typeof M=="object")D=M[F];else{if(this.opts.jtd)throw new Error("schema must be object");if(typeof M!="boolean")throw new Error("schema must be object or boolean")}let H=this._cache.get(M);if(H!==void 0)return H;B=(0,g.normalizeId)(D||B);const X=g.getSchemaRefs.call(this,M,B);return H=new y.SchemaEnv({schema:M,schemaId:F,meta:N,baseId:B,localRefs:X}),this._cache.set(H.schema,H),P&&!B.startsWith("#")&&(B&&this._checkUnique(B),this.refs[B]=H),d&&this.validateSchema(M,!0),H}_checkUnique(M){if(this.schemas[M]||this.refs[M])throw new Error(`schema with key or id "${M}" already exists`)}_compileSchemaEnv(M){if(M.meta?this._compileMetaSchema(M):y.compileSchema.call(this,M),!M.validate)throw new Error("ajv implementation error");return M.validate}_compileMetaSchema(M){const N=this.opts;this.opts=this._metaOpts;try{y.compileSchema.call(this,M)}finally{this.opts=N}}}m.ValidationError=i.default,m.MissingRefError=x.default,e.default=m;function o(R,M,N,B="error"){for(const d in R){const P=d;P in M&&this.logger[B](`${N}: option ${d}. ${R[P]}`)}}function c(R){return R=(0,g.normalizeId)(R),this.schemas[R]||this.refs[R]}function S(){const R=this.opts.schemas;if(R)if(Array.isArray(R))this.addSchema(R);else for(const M in R)this.addSchema(R[M],M)}function j(){for(const R in this.opts.formats){const M=this.opts.formats[R];M&&this.addFormat(R,M)}}function _(R){if(Array.isArray(R)){this.addVocabulary(R);return}this.logger.warn("keywords option as map is deprecated, pass array");for(const M in R){const N=R[M];N.keyword||(N.keyword=M),this.addKeyword(N)}}function E(){const R={...this.opts};for(const M of b)delete R[M];return R}const L={log(){},warn(){},error(){}};function z(R){if(R===!1)return L;if(R===void 0)return console;if(R.log&&R.warn&&R.error)return R;throw new Error("logger must implement log, warn and error methods")}const q=/^[a-z_$][a-z0-9_$:-]*$/i;function J(R,M){const{RULES:N}=this;if((0,f.eachItem)(R,B=>{if(N.keywords[B])throw new Error(`Keyword ${B} is already defined`);if(!q.test(B))throw new Error(`Keyword ${B} has invalid name`)}),!!M&&M.$data&&!("code"in M||"validate"in M))throw new Error('$data keyword must have "code" or "validate" function')}function ee(R,M,N){var B;const d=M?.post;if(N&&d)throw new Error('keyword with "post" flag cannot have "type"');const{RULES:P}=this;let D=d?P.post:P.rules.find(({type:H})=>H===N);if(D||(D={type:N,rules:[]},P.rules.push(D)),P.keywords[R]=!0,!M)return;const F={keyword:R,definition:{...M,type:(0,A.getJSONTypes)(M.type),schemaType:(0,A.getJSONTypes)(M.schemaType)}};M.before?ue.call(this,D,F,M.before):D.rules.push(F),P.all[R]=F,(B=M.implements)===null||B===void 0||B.forEach(H=>this.addKeyword(H))}function ue(R,M,N){const B=R.rules.findIndex(d=>d.keyword===N);B>=0?R.rules.splice(B,0,M):(R.rules.push(M),this.logger.warn(`rule ${N} is not defined`))}function ye(R){let{metaSchema:M}=R;M!==void 0&&(R.$data&&this.opts.$data&&(M=fe(M)),R.validateSchema=this.compile(M,!0))}const Z={$ref:"https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#"};function fe(R){return{anyOf:[R,Z]}}})(wt)),wt}var Ee={},Le={},Fe={},xr;function Vo(){if(xr)return Fe;xr=1,Object.defineProperty(Fe,"__esModule",{value:!0});const e={keyword:"id",code(){throw new Error('NOT SUPPORTED: keyword "id", use "$id" for schema ID')}};return Fe.default=e,Fe}var ve={},Sr;function Go(){if(Sr)return ve;Sr=1,Object.defineProperty(ve,"__esModule",{value:!0}),ve.callRef=ve.getValidate=void 0;const e=Ct(),t=ce(),u=U(),i=xe(),x=qt(),n=Y(),y={keyword:"$ref",schemaType:"string",code(A){const{gen:f,schema:k,it:v}=A,{baseId:h,schemaEnv:b,validateName:C,opts:a,self:p}=v,{root:r}=b;if((k==="#"||k==="#/")&&h===r.baseId)return m();const s=x.resolveRef.call(p,r,h,k);if(s===void 0)throw new e.default(v.opts.uriResolver,h,k);if(s instanceof x.SchemaEnv)return o(s);return c(s);function m(){if(b===r)return g(A,C,b,b.$async);const S=f.scopeValue("root",{ref:r});return g(A,(0,u._)`${S}.validate`,r,r.$async)}function o(S){const j=l(A,S);g(A,j,S,S.$async)}function c(S){const j=f.scopeValue("schema",a.code.source===!0?{ref:S,code:(0,u.stringify)(S)}:{ref:S}),_=f.name("valid"),E=A.subschema({schema:S,dataTypes:[],schemaPath:u.nil,topSchemaRef:j,errSchemaPath:k},_);A.mergeEvaluated(E),A.ok(_)}}};function l(A,f){const{gen:k}=A;return f.validate?k.scopeValue("validate",{ref:f.validate}):(0,u._)`${k.scopeValue("wrapper",{ref:f})}.validate`}ve.getValidate=l;function g(A,f,k,v){const{gen:h,it:b}=A,{allErrors:C,schemaEnv:a,opts:p}=b,r=p.passContext?i.default.this:u.nil;v?s():m();function s(){if(!a.$async)throw new Error("async schema referenced by sync schema");const S=h.let("valid");h.try(()=>{h.code((0,u._)`await ${(0,t.callValidateCode)(A,f,r)}`),c(f),C||h.assign(S,!0)},j=>{h.if((0,u._)`!(${j} instanceof ${b.ValidationError})`,()=>h.throw(j)),o(j),C||h.assign(S,!1)}),A.ok(S)}function m(){A.result((0,t.callValidateCode)(A,f,r),()=>c(f),()=>o(f))}function o(S){const j=(0,u._)`${S}.errors`;h.assign(i.default.vErrors,(0,u._)`${i.default.vErrors} === null ? ${j} : ${i.default.vErrors}.concat(${j})`),h.assign(i.default.errors,(0,u._)`${i.default.vErrors}.length`)}function c(S){var j;if(!b.opts.unevaluated)return;const _=(j=k?.validate)===null||j===void 0?void 0:j.evaluated;if(b.props!==!0)if(_&&!_.dynamicProps)_.props!==void 0&&(b.props=n.mergeEvaluated.props(h,_.props,b.props));else{const E=h.var("props",(0,u._)`${S}.evaluated.props`);b.props=n.mergeEvaluated.props(h,E,b.props,u.Name)}if(b.items!==!0)if(_&&!_.dynamicItems)_.items!==void 0&&(b.items=n.mergeEvaluated.items(h,_.items,b.items));else{const E=h.var("items",(0,u._)`${S}.evaluated.items`);b.items=n.mergeEvaluated.items(h,E,b.items,u.Name)}}}return ve.callRef=g,ve.default=y,ve}var Ar;function Uo(){if(Ar)return Le;Ar=1,Object.defineProperty(Le,"__esModule",{value:!0});const e=Vo(),t=Go(),u=["$schema","$id","$defs","$vocabulary",{keyword:"$comment"},"definitions",e.default,t.default];return Le.default=u,Le}var Ie={},He={},Cr;function Ko(){if(Cr)return He;Cr=1,Object.defineProperty(He,"__esModule",{value:!0});const e=U(),t=e.operators,u={maximum:{okStr:"<=",ok:t.LTE,fail:t.GT},minimum:{okStr:">=",ok:t.GTE,fail:t.LT},exclusiveMaximum:{okStr:"<",ok:t.LT,fail:t.GTE},exclusiveMinimum:{okStr:">",ok:t.GT,fail:t.LTE}},i={message:({keyword:n,schemaCode:y})=>(0,e.str)`must be ${u[n].okStr} ${y}`,params:({keyword:n,schemaCode:y})=>(0,e._)`{comparison: ${u[n].okStr}, limit: ${y}}`},x={keyword:Object.keys(u),type:"number",schemaType:"number",$data:!0,error:i,code(n){const{keyword:y,data:l,schemaCode:g}=n;n.fail$data((0,e._)`${l} ${u[y].fail} ${g} || isNaN(${l})`)}};return He.default=x,He}var qe={},Pr;function Wo(){if(Pr)return qe;Pr=1,Object.defineProperty(qe,"__esModule",{value:!0});const e=U(),u={keyword:"multipleOf",type:"number",schemaType:"number",$data:!0,error:{message:({schemaCode:i})=>(0,e.str)`must be multiple of ${i}`,params:({schemaCode:i})=>(0,e._)`{multipleOf: ${i}}`},code(i){const{gen:x,data:n,schemaCode:y,it:l}=i,g=l.opts.multipleOfPrecision,A=x.let("res"),f=g?(0,e._)`Math.abs(Math.round(${A}) - ${A}) > 1e-${g}`:(0,e._)`${A} !== parseInt(${A})`;i.fail$data((0,e._)`(${y} === 0 || (${A} = ${n}/${y}, ${f}))`)}};return qe.default=u,qe}var ze={},Ve={},kr;function Jo(){if(kr)return Ve;kr=1,Object.defineProperty(Ve,"__esModule",{value:!0});function e(t){const u=t.length;let i=0,x=0,n;for(;x<u;)i++,n=t.charCodeAt(x++),n>=55296&&n<=56319&&x<u&&(n=t.charCodeAt(x),(n&64512)===56320&&x++);return i}return Ve.default=e,e.code='require("ajv/dist/runtime/ucs2length").default',Ve}var Tr;function Yo(){if(Tr)return ze;Tr=1,Object.defineProperty(ze,"__esModule",{value:!0});const e=U(),t=Y(),u=Jo(),x={keyword:["maxLength","minLength"],type:"string",schemaType:"number",$data:!0,error:{message({keyword:n,schemaCode:y}){const l=n==="maxLength"?"more":"fewer";return(0,e.str)`must NOT have ${l} than ${y} characters`},params:({schemaCode:n})=>(0,e._)`{limit: ${n}}`},code(n){const{keyword:y,data:l,schemaCode:g,it:A}=n,f=y==="maxLength"?e.operators.GT:e.operators.LT,k=A.opts.unicode===!1?(0,e._)`${l}.length`:(0,e._)`${(0,t.useFunc)(n.gen,u.default)}(${l})`;n.fail$data((0,e._)`${k} ${f} ${g}`)}};return ze.default=x,ze}var Ge={},Mr;function Xo(){if(Mr)return Ge;Mr=1,Object.defineProperty(Ge,"__esModule",{value:!0});const e=ce(),t=U(),i={keyword:"pattern",type:"string",schemaType:"string",$data:!0,error:{message:({schemaCode:x})=>(0,t.str)`must match pattern "${x}"`,params:({schemaCode:x})=>(0,t._)`{pattern: ${x}}`},code(x){const{data:n,$data:y,schema:l,schemaCode:g,it:A}=x,f=A.opts.unicodeRegExp?"u":"",k=y?(0,t._)`(new RegExp(${g}, ${f}))`:(0,e.usePattern)(x,l);x.fail$data((0,t._)`!${k}.test(${n})`)}};return Ge.default=i,Ge}var Ue={},wr;function Qo(){if(wr)return Ue;wr=1,Object.defineProperty(Ue,"__esModule",{value:!0});const e=U(),u={keyword:["maxProperties","minProperties"],type:"object",schemaType:"number",$data:!0,error:{message({keyword:i,schemaCode:x}){const n=i==="maxProperties"?"more":"fewer";return(0,e.str)`must NOT have ${n} than ${x} properties`},params:({schemaCode:i})=>(0,e._)`{limit: ${i}}`},code(i){const{keyword:x,data:n,schemaCode:y}=i,l=x==="maxProperties"?e.operators.GT:e.operators.LT;i.fail$data((0,e._)`Object.keys(${n}).length ${l} ${y}`)}};return Ue.default=u,Ue}var Ke={},Br;function Zo(){if(Br)return Ke;Br=1,Object.defineProperty(Ke,"__esModule",{value:!0});const e=ce(),t=U(),u=Y(),x={keyword:"required",type:"object",schemaType:"array",$data:!0,error:{message:({params:{missingProperty:n}})=>(0,t.str)`must have required property '${n}'`,params:({params:{missingProperty:n}})=>(0,t._)`{missingProperty: ${n}}`},code(n){const{gen:y,schema:l,schemaCode:g,data:A,$data:f,it:k}=n,{opts:v}=k;if(!f&&l.length===0)return;const h=l.length>=v.loopRequired;if(k.allErrors?b():C(),v.strictRequired){const r=n.parentSchema.properties,{definedProperties:s}=n.it;for(const m of l)if(r?.[m]===void 0&&!s.has(m)){const o=k.schemaEnv.baseId+k.errSchemaPath,c=`required property "${m}" is not defined at "${o}" (strictRequired)`;(0,u.checkStrictMode)(k,c,k.opts.strictRequired)}}function b(){if(h||f)n.block$data(t.nil,a);else for(const r of l)(0,e.checkReportMissingProp)(n,r)}function C(){const r=y.let("missing");if(h||f){const s=y.let("valid",!0);n.block$data(s,()=>p(r,s)),n.ok(s)}else y.if((0,e.checkMissingProp)(n,l,r)),(0,e.reportMissingProp)(n,r),y.else()}function a(){y.forOf("prop",g,r=>{n.setParams({missingProperty:r}),y.if((0,e.noPropertyInData)(y,A,r,v.ownProperties),()=>n.error())})}function p(r,s){n.setParams({missingProperty:r}),y.forOf(r,g,()=>{y.assign(s,(0,e.propertyInData)(y,A,r,v.ownProperties)),y.if((0,t.not)(s),()=>{n.error(),y.break()})},t.nil)}}};return Ke.default=x,Ke}var We={},jr;function ei(){if(jr)return We;jr=1,Object.defineProperty(We,"__esModule",{value:!0});const e=U(),u={keyword:["maxItems","minItems"],type:"array",schemaType:"number",$data:!0,error:{message({keyword:i,schemaCode:x}){const n=i==="maxItems"?"more":"fewer";return(0,e.str)`must NOT have ${n} than ${x} items`},params:({schemaCode:i})=>(0,e._)`{limit: ${i}}`},code(i){const{keyword:x,data:n,schemaCode:y}=i,l=x==="maxItems"?e.operators.GT:e.operators.LT;i.fail$data((0,e._)`${n}.length ${l} ${y}`)}};return We.default=u,We}var Je={},Ye={},Dr;function zt(){if(Dr)return Ye;Dr=1,Object.defineProperty(Ye,"__esModule",{value:!0});const e=co();return e.code='require("ajv/dist/runtime/equal").default',Ye.default=e,Ye}var Or;function ti(){if(Or)return Je;Or=1,Object.defineProperty(Je,"__esModule",{value:!0});const e=vt(),t=U(),u=Y(),i=zt(),n={keyword:"uniqueItems",type:"array",schemaType:"boolean",$data:!0,error:{message:({params:{i:y,j:l}})=>(0,t.str)`must NOT have duplicate items (items ## ${l} and ${y} are identical)`,params:({params:{i:y,j:l}})=>(0,t._)`{i: ${y}, j: ${l}}`},code(y){const{gen:l,data:g,$data:A,schema:f,parentSchema:k,schemaCode:v,it:h}=y;if(!A&&!f)return;const b=l.let("valid"),C=k.items?(0,e.getSchemaTypes)(k.items):[];y.block$data(b,a,(0,t._)`${v} === false`),y.ok(b);function a(){const m=l.let("i",(0,t._)`${g}.length`),o=l.let("j");y.setParams({i:m,j:o}),l.assign(b,!0),l.if((0,t._)`${m} > 1`,()=>(p()?r:s)(m,o))}function p(){return C.length>0&&!C.some(m=>m==="object"||m==="array")}function r(m,o){const c=l.name("item"),S=(0,e.checkDataTypes)(C,c,h.opts.strictNumbers,e.DataType.Wrong),j=l.const("indices",(0,t._)`{}`);l.for((0,t._)`;${m}--;`,()=>{l.let(c,(0,t._)`${g}[${m}]`),l.if(S,(0,t._)`continue`),C.length>1&&l.if((0,t._)`typeof ${c} == "string"`,(0,t._)`${c} += "_"`),l.if((0,t._)`typeof ${j}[${c}] == "number"`,()=>{l.assign(o,(0,t._)`${j}[${c}]`),y.error(),l.assign(b,!1).break()}).code((0,t._)`${j}[${c}] = ${m}`)})}function s(m,o){const c=(0,u.useFunc)(l,i.default),S=l.name("outer");l.label(S).for((0,t._)`;${m}--;`,()=>l.for((0,t._)`${o} = ${m}; ${o}--;`,()=>l.if((0,t._)`${c}(${g}[${m}], ${g}[${o}])`,()=>{y.error(),l.assign(b,!1).break(S)})))}}};return Je.default=n,Je}var Xe={},Nr;function ri(){if(Nr)return Xe;Nr=1,Object.defineProperty(Xe,"__esModule",{value:!0});const e=U(),t=Y(),u=zt(),x={keyword:"const",$data:!0,error:{message:"must be equal to constant",params:({schemaCode:n})=>(0,e._)`{allowedValue: ${n}}`},code(n){const{gen:y,data:l,$data:g,schemaCode:A,schema:f}=n;g||f&&typeof f=="object"?n.fail$data((0,e._)`!${(0,t.useFunc)(y,u.default)}(${l}, ${A})`):n.fail((0,e._)`${f} !== ${l}`)}};return Xe.default=x,Xe}var Qe={},_r;function oi(){if(_r)return Qe;_r=1,Object.defineProperty(Qe,"__esModule",{value:!0});const e=U(),t=Y(),u=zt(),x={keyword:"enum",schemaType:"array",$data:!0,error:{message:"must be equal to one of the allowed values",params:({schemaCode:n})=>(0,e._)`{allowedValues: ${n}}`},code(n){const{gen:y,data:l,$data:g,schema:A,schemaCode:f,it:k}=n;if(!g&&A.length===0)throw new Error("enum must have non-empty array");const v=A.length>=k.opts.loopEnum;let h;const b=()=>h??(h=(0,t.useFunc)(y,u.default));let C;if(v||g)C=y.let("valid"),n.block$data(C,a);else{if(!Array.isArray(A))throw new Error("ajv implementation error");const r=y.const("vSchema",f);C=(0,e.or)(...A.map((s,m)=>p(r,m)))}n.pass(C);function a(){y.assign(C,!1),y.forOf("v",f,r=>y.if((0,e._)`${b()}(${l}, ${r})`,()=>y.assign(C,!0).break()))}function p(r,s){const m=A[s];return typeof m=="object"&&m!==null?(0,e._)`${b()}(${l}, ${r}[${s}])`:(0,e._)`${l} === ${m}`}}};return Qe.default=x,Qe}var Rr;function ii(){if(Rr)return Ie;Rr=1,Object.defineProperty(Ie,"__esModule",{value:!0});const e=Ko(),t=Wo(),u=Yo(),i=Xo(),x=Qo(),n=Zo(),y=ei(),l=ti(),g=ri(),A=oi(),f=[e.default,t.default,u.default,i.default,x.default,n.default,y.default,l.default,{keyword:"type",schemaType:["string","array"]},{keyword:"nullable",schemaType:"boolean"},g.default,A.default];return Ie.default=f,Ie}var Ze={},ke={},$r;function yo(){if($r)return ke;$r=1,Object.defineProperty(ke,"__esModule",{value:!0}),ke.validateAdditionalItems=void 0;const e=U(),t=Y(),i={keyword:"additionalItems",type:"array",schemaType:["boolean","object"],before:"uniqueItems",error:{message:({params:{len:n}})=>(0,e.str)`must NOT have more than ${n} items`,params:({params:{len:n}})=>(0,e._)`{limit: ${n}}`},code(n){const{parentSchema:y,it:l}=n,{items:g}=y;if(!Array.isArray(g)){(0,t.checkStrictMode)(l,'"additionalItems" is ignored when "items" is not an array of schemas');return}x(n,g)}};function x(n,y){const{gen:l,schema:g,data:A,keyword:f,it:k}=n;k.items=!0;const v=l.const("len",(0,e._)`${A}.length`);if(g===!1)n.setParams({len:y.length}),n.pass((0,e._)`${v} <= ${y.length}`);else if(typeof g=="object"&&!(0,t.alwaysValidSchema)(k,g)){const b=l.var("valid",(0,e._)`${v} <= ${y.length}`);l.if((0,e.not)(b),()=>h(b)),n.ok(b)}function h(b){l.forRange("i",y.length,v,C=>{n.subschema({keyword:f,dataProp:C,dataPropType:t.Type.Num},b),k.allErrors||l.if((0,e.not)(b),()=>l.break())})}}return ke.validateAdditionalItems=x,ke.default=i,ke}var et={},Te={},Er;function mo(){if(Er)return Te;Er=1,Object.defineProperty(Te,"__esModule",{value:!0}),Te.validateTuple=void 0;const e=U(),t=Y(),u=ce(),i={keyword:"items",type:"array",schemaType:["object","array","boolean"],before:"uniqueItems",code(n){const{schema:y,it:l}=n;if(Array.isArray(y))return x(n,"additionalItems",y);l.items=!0,!(0,t.alwaysValidSchema)(l,y)&&n.ok((0,u.validateArray)(n))}};function x(n,y,l=n.schema){const{gen:g,parentSchema:A,data:f,keyword:k,it:v}=n;C(A),v.opts.unevaluated&&l.length&&v.items!==!0&&(v.items=t.mergeEvaluated.items(g,l.length,v.items));const h=g.name("valid"),b=g.const("len",(0,e._)`${f}.length`);l.forEach((a,p)=>{(0,t.alwaysValidSchema)(v,a)||(g.if((0,e._)`${b} > ${p}`,()=>n.subschema({keyword:k,schemaProp:p,dataProp:p},h)),n.ok(h))});function C(a){const{opts:p,errSchemaPath:r}=v,s=l.length,m=s===a.minItems&&(s===a.maxItems||a[y]===!1);if(p.strictTuples&&!m){const o=`"${k}" is ${s}-tuple, but minItems or maxItems/${y} are not specified or different at path "${r}"`;(0,t.checkStrictMode)(v,o,p.strictTuples)}}}return Te.validateTuple=x,Te.default=i,Te}var Lr;function ni(){if(Lr)return et;Lr=1,Object.defineProperty(et,"__esModule",{value:!0});const e=mo(),t={keyword:"prefixItems",type:"array",schemaType:["array"],before:"uniqueItems",code:u=>(0,e.validateTuple)(u,"items")};return et.default=t,et}var tt={},Fr;function ai(){if(Fr)return tt;Fr=1,Object.defineProperty(tt,"__esModule",{value:!0});const e=U(),t=Y(),u=ce(),i=yo(),n={keyword:"items",type:"array",schemaType:["object","boolean"],before:"uniqueItems",error:{message:({params:{len:y}})=>(0,e.str)`must NOT have more than ${y} items`,params:({params:{len:y}})=>(0,e._)`{limit: ${y}}`},code(y){const{schema:l,parentSchema:g,it:A}=y,{prefixItems:f}=g;A.items=!0,!(0,t.alwaysValidSchema)(A,l)&&(f?(0,i.validateAdditionalItems)(y,f):y.ok((0,u.validateArray)(y)))}};return tt.default=n,tt}var rt={},Ir;function si(){if(Ir)return rt;Ir=1,Object.defineProperty(rt,"__esModule",{value:!0});const e=U(),t=Y(),i={keyword:"contains",type:"array",schemaType:["object","boolean"],before:"uniqueItems",trackErrors:!0,error:{message:({params:{min:x,max:n}})=>n===void 0?(0,e.str)`must contain at least ${x} valid item(s)`:(0,e.str)`must contain at least ${x} and no more than ${n} valid item(s)`,params:({params:{min:x,max:n}})=>n===void 0?(0,e._)`{minContains: ${x}}`:(0,e._)`{minContains: ${x}, maxContains: ${n}}`},code(x){const{gen:n,schema:y,parentSchema:l,data:g,it:A}=x;let f,k;const{minContains:v,maxContains:h}=l;A.opts.next?(f=v===void 0?1:v,k=h):f=1;const b=n.const("len",(0,e._)`${g}.length`);if(x.setParams({min:f,max:k}),k===void 0&&f===0){(0,t.checkStrictMode)(A,'"minContains" == 0 without "maxContains": "contains" keyword ignored');return}if(k!==void 0&&f>k){(0,t.checkStrictMode)(A,'"minContains" > "maxContains" is always invalid'),x.fail();return}if((0,t.alwaysValidSchema)(A,y)){let s=(0,e._)`${b} >= ${f}`;k!==void 0&&(s=(0,e._)`${s} && ${b} <= ${k}`),x.pass(s);return}A.items=!0;const C=n.name("valid");k===void 0&&f===1?p(C,()=>n.if(C,()=>n.break())):f===0?(n.let(C,!0),k!==void 0&&n.if((0,e._)`${g}.length > 0`,a)):(n.let(C,!1),a()),x.result(C,()=>x.reset());function a(){const s=n.name("_valid"),m=n.let("count",0);p(s,()=>n.if(s,()=>r(m)))}function p(s,m){n.forRange("i",0,b,o=>{x.subschema({keyword:"contains",dataProp:o,dataPropType:t.Type.Num,compositeRule:!0},s),m()})}function r(s){n.code((0,e._)`${s}++`),k===void 0?n.if((0,e._)`${s} >= ${f}`,()=>n.assign(C,!0).break()):(n.if((0,e._)`${s} > ${k}`,()=>n.assign(C,!1).break()),f===1?n.assign(C,!0):n.if((0,e._)`${s} >= ${f}`,()=>n.assign(C,!0)))}}};return rt.default=i,rt}var Et={},Hr;function pi(){return Hr||(Hr=1,(function(e){Object.defineProperty(e,"__esModule",{value:!0}),e.validateSchemaDeps=e.validatePropertyDeps=e.error=void 0;const t=U(),u=Y(),i=ce();e.error={message:({params:{property:g,depsCount:A,deps:f}})=>{const k=A===1?"property":"properties";return(0,t.str)`must have ${k} ${f} when property ${g} is present`},params:({params:{property:g,depsCount:A,deps:f,missingProperty:k}})=>(0,t._)`{property: ${g},
7
- missingProperty: ${k},
8
- depsCount: ${A},
9
- deps: ${f}}`};const x={keyword:"dependencies",type:"object",schemaType:"object",error:e.error,code(g){const[A,f]=n(g);y(g,A),l(g,f)}};function n({schema:g}){const A={},f={};for(const k in g){if(k==="__proto__")continue;const v=Array.isArray(g[k])?A:f;v[k]=g[k]}return[A,f]}function y(g,A=g.schema){const{gen:f,data:k,it:v}=g;if(Object.keys(A).length===0)return;const h=f.let("missing");for(const b in A){const C=A[b];if(C.length===0)continue;const a=(0,i.propertyInData)(f,k,b,v.opts.ownProperties);g.setParams({property:b,depsCount:C.length,deps:C.join(", ")}),v.allErrors?f.if(a,()=>{for(const p of C)(0,i.checkReportMissingProp)(g,p)}):(f.if((0,t._)`${a} && (${(0,i.checkMissingProp)(g,C,h)})`),(0,i.reportMissingProp)(g,h),f.else())}}e.validatePropertyDeps=y;function l(g,A=g.schema){const{gen:f,data:k,keyword:v,it:h}=g,b=f.name("valid");for(const C in A)(0,u.alwaysValidSchema)(h,A[C])||(f.if((0,i.propertyInData)(f,k,C,h.opts.ownProperties),()=>{const a=g.subschema({keyword:v,schemaProp:C},b);g.mergeValidEvaluated(a,b)},()=>f.var(b,!0)),g.ok(b))}e.validateSchemaDeps=l,e.default=x})(Et)),Et}var ot={},qr;function di(){if(qr)return ot;qr=1,Object.defineProperty(ot,"__esModule",{value:!0});const e=U(),t=Y(),i={keyword:"propertyNames",type:"object",schemaType:["object","boolean"],error:{message:"property name must be valid",params:({params:x})=>(0,e._)`{propertyName: ${x.propertyName}}`},code(x){const{gen:n,schema:y,data:l,it:g}=x;if((0,t.alwaysValidSchema)(g,y))return;const A=n.name("valid");n.forIn("key",l,f=>{x.setParams({propertyName:f}),x.subschema({keyword:"propertyNames",data:f,dataTypes:["string"],propertyName:f,compositeRule:!0},A),n.if((0,e.not)(A),()=>{x.error(!0),g.allErrors||n.break()})}),x.ok(A)}};return ot.default=i,ot}var it={},zr;function go(){if(zr)return it;zr=1,Object.defineProperty(it,"__esModule",{value:!0});const e=ce(),t=U(),u=xe(),i=Y(),n={keyword:"additionalProperties",type:["object"],schemaType:["boolean","object"],allowUndefined:!0,trackErrors:!0,error:{message:"must NOT have additional properties",params:({params:y})=>(0,t._)`{additionalProperty: ${y.additionalProperty}}`},code(y){const{gen:l,schema:g,parentSchema:A,data:f,errsCount:k,it:v}=y;if(!k)throw new Error("ajv implementation error");const{allErrors:h,opts:b}=v;if(v.props=!0,b.removeAdditional!=="all"&&(0,i.alwaysValidSchema)(v,g))return;const C=(0,e.allSchemaProperties)(A.properties),a=(0,e.allSchemaProperties)(A.patternProperties);p(),y.ok((0,t._)`${k} === ${u.default.errors}`);function p(){l.forIn("key",f,c=>{!C.length&&!a.length?m(c):l.if(r(c),()=>m(c))})}function r(c){let S;if(C.length>8){const j=(0,i.schemaRefOrVal)(v,A.properties,"properties");S=(0,e.isOwnProperty)(l,j,c)}else C.length?S=(0,t.or)(...C.map(j=>(0,t._)`${c} === ${j}`)):S=t.nil;return a.length&&(S=(0,t.or)(S,...a.map(j=>(0,t._)`${(0,e.usePattern)(y,j)}.test(${c})`))),(0,t.not)(S)}function s(c){l.code((0,t._)`delete ${f}[${c}]`)}function m(c){if(b.removeAdditional==="all"||b.removeAdditional&&g===!1){s(c);return}if(g===!1){y.setParams({additionalProperty:c}),y.error(),h||l.break();return}if(typeof g=="object"&&!(0,i.alwaysValidSchema)(v,g)){const S=l.name("valid");b.removeAdditional==="failing"?(o(c,S,!1),l.if((0,t.not)(S),()=>{y.reset(),s(c)})):(o(c,S),h||l.if((0,t.not)(S),()=>l.break()))}}function o(c,S,j){const _={keyword:"additionalProperties",dataProp:c,dataPropType:i.Type.Str};j===!1&&Object.assign(_,{compositeRule:!0,createErrors:!1,allErrors:!1}),y.subschema(_,S)}}};return it.default=n,it}var nt={},Vr;function li(){if(Vr)return nt;Vr=1,Object.defineProperty(nt,"__esModule",{value:!0});const e=At(),t=ce(),u=Y(),i=go(),x={keyword:"properties",type:"object",schemaType:"object",code(n){const{gen:y,schema:l,parentSchema:g,data:A,it:f}=n;f.opts.removeAdditional==="all"&&g.additionalProperties===void 0&&i.default.code(new e.KeywordCxt(f,i.default,"additionalProperties"));const k=(0,t.allSchemaProperties)(l);for(const a of k)f.definedProperties.add(a);f.opts.unevaluated&&k.length&&f.props!==!0&&(f.props=u.mergeEvaluated.props(y,(0,u.toHash)(k),f.props));const v=k.filter(a=>!(0,u.alwaysValidSchema)(f,l[a]));if(v.length===0)return;const h=y.name("valid");for(const a of v)b(a)?C(a):(y.if((0,t.propertyInData)(y,A,a,f.opts.ownProperties)),C(a),f.allErrors||y.else().var(h,!0),y.endIf()),n.it.definedProperties.add(a),n.ok(h);function b(a){return f.opts.useDefaults&&!f.compositeRule&&l[a].default!==void 0}function C(a){n.subschema({keyword:"properties",schemaProp:a,dataProp:a},h)}}};return nt.default=x,nt}var at={},Gr;function ci(){if(Gr)return at;Gr=1,Object.defineProperty(at,"__esModule",{value:!0});const e=ce(),t=U(),u=Y(),i=Y(),x={keyword:"patternProperties",type:"object",schemaType:"object",code(n){const{gen:y,schema:l,data:g,parentSchema:A,it:f}=n,{opts:k}=f,v=(0,e.allSchemaProperties)(l),h=v.filter(m=>(0,u.alwaysValidSchema)(f,l[m]));if(v.length===0||h.length===v.length&&(!f.opts.unevaluated||f.props===!0))return;const b=k.strictSchema&&!k.allowMatchingProperties&&A.properties,C=y.name("valid");f.props!==!0&&!(f.props instanceof t.Name)&&(f.props=(0,i.evaluatedPropsToName)(y,f.props));const{props:a}=f;p();function p(){for(const m of v)b&&r(m),f.allErrors?s(m):(y.var(C,!0),s(m),y.if(C))}function r(m){for(const o in b)new RegExp(m).test(o)&&(0,u.checkStrictMode)(f,`property ${o} matches pattern ${m} (use allowMatchingProperties)`)}function s(m){y.forIn("key",g,o=>{y.if((0,t._)`${(0,e.usePattern)(n,m)}.test(${o})`,()=>{const c=h.includes(m);c||n.subschema({keyword:"patternProperties",schemaProp:m,dataProp:o,dataPropType:i.Type.Str},C),f.opts.unevaluated&&a!==!0?y.assign((0,t._)`${a}[${o}]`,!0):!c&&!f.allErrors&&y.if((0,t.not)(C),()=>y.break())})})}}};return at.default=x,at}var st={},Ur;function ui(){if(Ur)return st;Ur=1,Object.defineProperty(st,"__esModule",{value:!0});const e=Y(),t={keyword:"not",schemaType:["object","boolean"],trackErrors:!0,code(u){const{gen:i,schema:x,it:n}=u;if((0,e.alwaysValidSchema)(n,x)){u.fail();return}const y=i.name("valid");u.subschema({keyword:"not",compositeRule:!0,createErrors:!1,allErrors:!1},y),u.failResult(y,()=>u.reset(),()=>u.error())},error:{message:"must NOT be valid"}};return st.default=t,st}var pt={},Kr;function yi(){if(Kr)return pt;Kr=1,Object.defineProperty(pt,"__esModule",{value:!0});const t={keyword:"anyOf",schemaType:"array",trackErrors:!0,code:ce().validateUnion,error:{message:"must match a schema in anyOf"}};return pt.default=t,pt}var dt={},Wr;function mi(){if(Wr)return dt;Wr=1,Object.defineProperty(dt,"__esModule",{value:!0});const e=U(),t=Y(),i={keyword:"oneOf",schemaType:"array",trackErrors:!0,error:{message:"must match exactly one schema in oneOf",params:({params:x})=>(0,e._)`{passingSchemas: ${x.passing}}`},code(x){const{gen:n,schema:y,parentSchema:l,it:g}=x;if(!Array.isArray(y))throw new Error("ajv implementation error");if(g.opts.discriminator&&l.discriminator)return;const A=y,f=n.let("valid",!1),k=n.let("passing",null),v=n.name("_valid");x.setParams({passing:k}),n.block(h),x.result(f,()=>x.reset(),()=>x.error(!0));function h(){A.forEach((b,C)=>{let a;(0,t.alwaysValidSchema)(g,b)?n.var(v,!0):a=x.subschema({keyword:"oneOf",schemaProp:C,compositeRule:!0},v),C>0&&n.if((0,e._)`${v} && ${f}`).assign(f,!1).assign(k,(0,e._)`[${k}, ${C}]`).else(),n.if(v,()=>{n.assign(f,!0),n.assign(k,C),a&&x.mergeEvaluated(a,e.Name)})})}}};return dt.default=i,dt}var lt={},Jr;function gi(){if(Jr)return lt;Jr=1,Object.defineProperty(lt,"__esModule",{value:!0});const e=Y(),t={keyword:"allOf",schemaType:"array",code(u){const{gen:i,schema:x,it:n}=u;if(!Array.isArray(x))throw new Error("ajv implementation error");const y=i.name("valid");x.forEach((l,g)=>{if((0,e.alwaysValidSchema)(n,l))return;const A=u.subschema({keyword:"allOf",schemaProp:g},y);u.ok(y),u.mergeEvaluated(A)})}};return lt.default=t,lt}var ct={},Yr;function bi(){if(Yr)return ct;Yr=1,Object.defineProperty(ct,"__esModule",{value:!0});const e=U(),t=Y(),i={keyword:"if",schemaType:["object","boolean"],trackErrors:!0,error:{message:({params:n})=>(0,e.str)`must match "${n.ifClause}" schema`,params:({params:n})=>(0,e._)`{failingKeyword: ${n.ifClause}}`},code(n){const{gen:y,parentSchema:l,it:g}=n;l.then===void 0&&l.else===void 0&&(0,t.checkStrictMode)(g,'"if" without "then" and "else" is ignored');const A=x(g,"then"),f=x(g,"else");if(!A&&!f)return;const k=y.let("valid",!0),v=y.name("_valid");if(h(),n.reset(),A&&f){const C=y.let("ifClause");n.setParams({ifClause:C}),y.if(v,b("then",C),b("else",C))}else A?y.if(v,b("then")):y.if((0,e.not)(v),b("else"));n.pass(k,()=>n.error(!0));function h(){const C=n.subschema({keyword:"if",compositeRule:!0,createErrors:!1,allErrors:!1},v);n.mergeEvaluated(C)}function b(C,a){return()=>{const p=n.subschema({keyword:C},v);y.assign(k,v),n.mergeValidEvaluated(p,k),a?y.assign(a,(0,e._)`${C}`):n.setParams({ifClause:C})}}}};function x(n,y){const l=n.schema[y];return l!==void 0&&!(0,t.alwaysValidSchema)(n,l)}return ct.default=i,ct}var ut={},Xr;function hi(){if(Xr)return ut;Xr=1,Object.defineProperty(ut,"__esModule",{value:!0});const e=Y(),t={keyword:["then","else"],schemaType:["object","boolean"],code({keyword:u,parentSchema:i,it:x}){i.if===void 0&&(0,e.checkStrictMode)(x,`"${u}" without "if" is ignored`)}};return ut.default=t,ut}var Qr;function fi(){if(Qr)return Ze;Qr=1,Object.defineProperty(Ze,"__esModule",{value:!0});const e=yo(),t=ni(),u=mo(),i=ai(),x=si(),n=pi(),y=di(),l=go(),g=li(),A=ci(),f=ui(),k=yi(),v=mi(),h=gi(),b=bi(),C=hi();function a(p=!1){const r=[f.default,k.default,v.default,h.default,b.default,C.default,y.default,l.default,n.default,g.default,A.default];return p?r.push(t.default,i.default):r.push(e.default,u.default),r.push(x.default),r}return Ze.default=a,Ze}var yt={},mt={},Zr;function vi(){if(Zr)return mt;Zr=1,Object.defineProperty(mt,"__esModule",{value:!0});const e=U(),u={keyword:"format",type:["number","string"],schemaType:"string",$data:!0,error:{message:({schemaCode:i})=>(0,e.str)`must match format "${i}"`,params:({schemaCode:i})=>(0,e._)`{format: ${i}}`},code(i,x){const{gen:n,data:y,$data:l,schema:g,schemaCode:A,it:f}=i,{opts:k,errSchemaPath:v,schemaEnv:h,self:b}=f;if(!k.validateFormats)return;l?C():a();function C(){const p=n.scopeValue("formats",{ref:b.formats,code:k.code.formats}),r=n.const("fDef",(0,e._)`${p}[${A}]`),s=n.let("fType"),m=n.let("format");n.if((0,e._)`typeof ${r} == "object" && !(${r} instanceof RegExp)`,()=>n.assign(s,(0,e._)`${r}.type || "string"`).assign(m,(0,e._)`${r}.validate`),()=>n.assign(s,(0,e._)`"string"`).assign(m,r)),i.fail$data((0,e.or)(o(),c()));function o(){return k.strictSchema===!1?e.nil:(0,e._)`${A} && !${m}`}function c(){const S=h.$async?(0,e._)`(${r}.async ? await ${m}(${y}) : ${m}(${y}))`:(0,e._)`${m}(${y})`,j=(0,e._)`(typeof ${m} == "function" ? ${S} : ${m}.test(${y}))`;return(0,e._)`${m} && ${m} !== true && ${s} === ${x} && !${j}`}}function a(){const p=b.formats[g];if(!p){o();return}if(p===!0)return;const[r,s,m]=c(p);r===x&&i.pass(S());function o(){if(k.strictSchema===!1){b.logger.warn(j());return}throw new Error(j());function j(){return`unknown format "${g}" ignored in schema at path "${v}"`}}function c(j){const _=j instanceof RegExp?(0,e.regexpCode)(j):k.code.formats?(0,e._)`${k.code.formats}${(0,e.getProperty)(g)}`:void 0,E=n.scopeValue("formats",{key:g,ref:j,code:_});return typeof j=="object"&&!(j instanceof RegExp)?[j.type||"string",j.validate,(0,e._)`${E}.validate`]:["string",j,E]}function S(){if(typeof p=="object"&&!(p instanceof RegExp)&&p.async){if(!h.$async)throw new Error("async format in sync schema");return(0,e._)`await ${m}(${y})`}return typeof s=="function"?(0,e._)`${m}(${y})`:(0,e._)`${m}.test(${y})`}}}};return mt.default=u,mt}var eo;function xi(){if(eo)return yt;eo=1,Object.defineProperty(yt,"__esModule",{value:!0});const t=[vi().default];return yt.default=t,yt}var Ce={},to;function Si(){return to||(to=1,Object.defineProperty(Ce,"__esModule",{value:!0}),Ce.contentVocabulary=Ce.metadataVocabulary=void 0,Ce.metadataVocabulary=["title","description","default","deprecated","readOnly","writeOnly","examples"],Ce.contentVocabulary=["contentMediaType","contentEncoding","contentSchema"]),Ce}var ro;function Ai(){if(ro)return Ee;ro=1,Object.defineProperty(Ee,"__esModule",{value:!0});const e=Uo(),t=ii(),u=fi(),i=xi(),x=Si(),n=[e.default,t.default,(0,u.default)(),i.default,x.metadataVocabulary,x.contentVocabulary];return Ee.default=n,Ee}var gt={},De={},oo;function Ci(){if(oo)return De;oo=1,Object.defineProperty(De,"__esModule",{value:!0}),De.DiscrError=void 0;var e;return(function(t){t.Tag="tag",t.Mapping="mapping"})(e||(De.DiscrError=e={})),De}var io;function Pi(){if(io)return gt;io=1,Object.defineProperty(gt,"__esModule",{value:!0});const e=U(),t=Ci(),u=qt(),i=Ct(),x=Y(),y={keyword:"discriminator",type:"object",schemaType:"object",error:{message:({params:{discrError:l,tagName:g}})=>l===t.DiscrError.Tag?`tag "${g}" must be string`:`value of tag "${g}" must be in oneOf`,params:({params:{discrError:l,tag:g,tagName:A}})=>(0,e._)`{error: ${l}, tag: ${A}, tagValue: ${g}}`},code(l){const{gen:g,data:A,schema:f,parentSchema:k,it:v}=l,{oneOf:h}=k;if(!v.opts.discriminator)throw new Error("discriminator: requires discriminator option");const b=f.propertyName;if(typeof b!="string")throw new Error("discriminator: requires propertyName");if(f.mapping)throw new Error("discriminator: mapping is not supported");if(!h)throw new Error("discriminator: requires oneOf keyword");const C=g.let("valid",!1),a=g.const("tag",(0,e._)`${A}${(0,e.getProperty)(b)}`);g.if((0,e._)`typeof ${a} == "string"`,()=>p(),()=>l.error(!1,{discrError:t.DiscrError.Tag,tag:a,tagName:b})),l.ok(C);function p(){const m=s();g.if(!1);for(const o in m)g.elseIf((0,e._)`${a} === ${o}`),g.assign(C,r(m[o]));g.else(),l.error(!1,{discrError:t.DiscrError.Mapping,tag:a,tagName:b}),g.endIf()}function r(m){const o=g.name("valid"),c=l.subschema({keyword:"oneOf",schemaProp:m},o);return l.mergeEvaluated(c,e.Name),o}function s(){var m;const o={},c=j(k);let S=!0;for(let L=0;L<h.length;L++){let z=h[L];if(z?.$ref&&!(0,x.schemaHasRulesButRef)(z,v.self.RULES)){const J=z.$ref;if(z=u.resolveRef.call(v.self,v.schemaEnv.root,v.baseId,J),z instanceof u.SchemaEnv&&(z=z.schema),z===void 0)throw new i.default(v.opts.uriResolver,v.baseId,J)}const q=(m=z?.properties)===null||m===void 0?void 0:m[b];if(typeof q!="object")throw new Error(`discriminator: oneOf subschemas (or referenced schemas) must have "properties/${b}"`);S=S&&(c||j(z)),_(q,L)}if(!S)throw new Error(`discriminator: "${b}" must be required`);return o;function j({required:L}){return Array.isArray(L)&&L.includes(b)}function _(L,z){if(L.const)E(L.const,z);else if(L.enum)for(const q of L.enum)E(q,z);else throw new Error(`discriminator: "properties/${b}" must have "const" or "enum"`)}function E(L,z){if(typeof L!="string"||L in o)throw new Error(`discriminator: "${b}" values must be unique strings`);o[L]=z}}}};return gt.default=y,gt}const ki="http://json-schema.org/draft-07/schema#",Ti="http://json-schema.org/draft-07/schema#",Mi="Core schema meta-schema",wi={schemaArray:{type:"array",minItems:1,items:{$ref:"#"}},nonNegativeInteger:{type:"integer",minimum:0},nonNegativeIntegerDefault0:{allOf:[{$ref:"#/definitions/nonNegativeInteger"},{default:0}]},simpleTypes:{enum:["array","boolean","integer","null","number","object","string"]},stringArray:{type:"array",items:{type:"string"},uniqueItems:!0,default:[]}},Bi=["object","boolean"],ji={$id:{type:"string",format:"uri-reference"},$schema:{type:"string",format:"uri"},$ref:{type:"string",format:"uri-reference"},$comment:{type:"string"},title:{type:"string"},description:{type:"string"},default:!0,readOnly:{type:"boolean",default:!1},examples:{type:"array",items:!0},multipleOf:{type:"number",exclusiveMinimum:0},maximum:{type:"number"},exclusiveMaximum:{type:"number"},minimum:{type:"number"},exclusiveMinimum:{type:"number"},maxLength:{$ref:"#/definitions/nonNegativeInteger"},minLength:{$ref:"#/definitions/nonNegativeIntegerDefault0"},pattern:{type:"string",format:"regex"},additionalItems:{$ref:"#"},items:{anyOf:[{$ref:"#"},{$ref:"#/definitions/schemaArray"}],default:!0},maxItems:{$ref:"#/definitions/nonNegativeInteger"},minItems:{$ref:"#/definitions/nonNegativeIntegerDefault0"},uniqueItems:{type:"boolean",default:!1},contains:{$ref:"#"},maxProperties:{$ref:"#/definitions/nonNegativeInteger"},minProperties:{$ref:"#/definitions/nonNegativeIntegerDefault0"},required:{$ref:"#/definitions/stringArray"},additionalProperties:{$ref:"#"},definitions:{type:"object",additionalProperties:{$ref:"#"},default:{}},properties:{type:"object",additionalProperties:{$ref:"#"},default:{}},patternProperties:{type:"object",additionalProperties:{$ref:"#"},propertyNames:{format:"regex"},default:{}},dependencies:{type:"object",additionalProperties:{anyOf:[{$ref:"#"},{$ref:"#/definitions/stringArray"}]}},propertyNames:{$ref:"#"},const:!0,enum:{type:"array",items:!0,minItems:1,uniqueItems:!0},type:{anyOf:[{$ref:"#/definitions/simpleTypes"},{type:"array",items:{$ref:"#/definitions/simpleTypes"},minItems:1,uniqueItems:!0}]},format:{type:"string"},contentMediaType:{type:"string"},contentEncoding:{type:"string"},if:{$ref:"#"},then:{$ref:"#"},else:{$ref:"#"},allOf:{$ref:"#/definitions/schemaArray"},anyOf:{$ref:"#/definitions/schemaArray"},oneOf:{$ref:"#/definitions/schemaArray"},not:{$ref:"#"}},Di={$schema:ki,$id:Ti,title:Mi,definitions:wi,type:Bi,properties:ji,default:!0};var no;function Oi(){return no||(no=1,(function(e,t){Object.defineProperty(t,"__esModule",{value:!0}),t.MissingRefError=t.ValidationError=t.CodeGen=t.Name=t.nil=t.stringify=t.str=t._=t.KeywordCxt=t.Ajv=void 0;const u=zo(),i=Ai(),x=Pi(),n=Di,y=["/properties"],l="http://json-schema.org/draft-07/schema";class g extends u.default{_addVocabularies(){super._addVocabularies(),i.default.forEach(b=>this.addVocabulary(b)),this.opts.discriminator&&this.addKeyword(x.default)}_addDefaultMetaSchema(){if(super._addDefaultMetaSchema(),!this.opts.meta)return;const b=this.opts.$data?this.$dataMetaSchema(n,y):n;this.addMetaSchema(b,l,!1),this.refs["http://json-schema.org/schema"]=l}defaultMeta(){return this.opts.defaultMeta=super.defaultMeta()||(this.getSchema(l)?l:void 0)}}t.Ajv=g,e.exports=t=g,e.exports.Ajv=g,Object.defineProperty(t,"__esModule",{value:!0}),t.default=g;var A=At();Object.defineProperty(t,"KeywordCxt",{enumerable:!0,get:function(){return A.KeywordCxt}});var f=U();Object.defineProperty(t,"_",{enumerable:!0,get:function(){return f._}}),Object.defineProperty(t,"str",{enumerable:!0,get:function(){return f.str}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return f.stringify}}),Object.defineProperty(t,"nil",{enumerable:!0,get:function(){return f.nil}}),Object.defineProperty(t,"Name",{enumerable:!0,get:function(){return f.Name}}),Object.defineProperty(t,"CodeGen",{enumerable:!0,get:function(){return f.CodeGen}});var k=Ht();Object.defineProperty(t,"ValidationError",{enumerable:!0,get:function(){return k.default}});var v=Ct();Object.defineProperty(t,"MissingRefError",{enumerable:!0,get:function(){return v.default}})})(Oe,Oe.exports)),Oe.exports}var Ni=Oi();const bo=Mo(Ni),_i={};let ho=_i,fo=null;function vo(){return ho}function Ri(e){ho=e}function $i(){return fo}function Ei(e){fo=e}function Me(e,t){return{type:"string",...t?{description:t}:{},"x-doc":{group:e,type:"string"}}}function Lt(e,t){return{type:"number",...t?{description:t}:{},"x-doc":{group:e,type:"number"}}}function Li(e,t){return{type:"boolean",description:t,"x-doc":{group:e,type:"boolean"}}}function Ft(e,t,u){return{type:"string",enum:[...t],...u?{description:u}:{},"x-doc":{group:e,type:"string"}}}const Fi={type:"string",description:"CSS-класс (Tailwind: flex, grid, gap-*).","x-doc":{group:"Control",type:"string",kind:"readonly"}},It=[{tag:"div",content:"container",defaultClass:"flex gap-4"},{tag:"section",content:"container",defaultClass:"space-y-4"},{tag:"article",content:"container",defaultClass:"space-y-4"},{tag:"aside",content:"container",defaultClass:"space-y-4"},{tag:"header",content:"container",defaultClass:"space-y-4"},{tag:"footer",content:"container",defaultClass:"space-y-4"},{tag:"nav",content:"container",defaultClass:"flex gap-4"},{tag:"main",content:"container",defaultClass:"space-y-4"},{tag:"fieldset",content:"container",defaultClass:"space-y-4"},{tag:"h1",content:"text",defaultText:"Заголовок"},{tag:"h2",content:"text",defaultText:"Заголовок"},{tag:"h3",content:"text",defaultText:"Заголовок"},{tag:"h4",content:"text",defaultText:"Заголовок"},{tag:"h5",content:"text",defaultText:"Заголовок"},{tag:"h6",content:"text",defaultText:"Заголовок"},{tag:"p",content:"text",defaultText:"Текст"},{tag:"span",content:"text",defaultText:"Текст"},{tag:"strong",content:"text",defaultText:"Текст"},{tag:"em",content:"text",defaultText:"Текст"},{tag:"small",content:"text",defaultText:"Текст"},{tag:"blockquote",content:"text",defaultText:"Цитата",props:{cite:Me("Options","URL источника цитаты.")}},{tag:"code",content:"text",defaultText:"code"},{tag:"pre",content:"text",defaultText:"Текст"},{tag:"a",content:"text",defaultText:"Ссылка",props:{href:Me("Control","URL ссылки."),target:Ft("Options",["_self","_blank","_parent","_top"],"Где открыть ссылку."),rel:Me("Options","Отношение (напр. noopener noreferrer).")}},{tag:"label",content:"text",defaultText:"Подпись",props:{htmlFor:Me("Options","ID связанного поля (атрибут for).")}},{tag:"br",content:"void"},{tag:"ul",content:"container",defaultClass:"list-disc space-y-1 pl-5"},{tag:"ol",content:"container",defaultClass:"list-decimal space-y-1 pl-5",props:{start:Lt("Options","Начальный номер списка."),reversed:Li("Behavior","Обратный порядок нумерации."),type:Ft("Options",["1","a","A","i","I"],"Стиль маркера нумерации.")}},{tag:"li",content:"container"},{tag:"hr",content:"void"},{tag:"img",content:"void",props:{src:Me("Control","URL изображения."),alt:Me("Control","Альтернативный текст (доступность)."),width:Lt("Options","Ширина, px."),height:Lt("Options","Высота, px."),loading:Ft("Behavior",["lazy","eager"],"Стратегия загрузки.")}}],Ii=new Map(It.map(e=>[e.tag,e]));function Hi(e){return Ii.get(e)}function qi(e){const t={className:Fi};return e.props&&Object.assign(t,e.props),{type:"object",properties:t}}const zi={type:"object",properties:{title:{type:"string","x-doc":{group:"Control",type:"string"}},addButtonLabel:{type:"string","x-doc":{group:"Control",type:"string"}},emptyMessage:{type:"string","x-doc":{group:"Control",type:"string"}},itemLabel:{type:"string",description:"Подпись элемента: строка или $dataSource/$fn.","x-doc":{group:"Options",type:"string"}},reorderable:{type:"boolean","x-doc":{group:"Behavior",type:"boolean"}},minItems:{type:"number","x-doc":{group:"Behavior",type:"number"}},maxItems:{type:"number","x-doc":{group:"Behavior",type:"number"}}}},Vi={type:"object",properties:{className:{type:"string","x-doc":{group:"Control",type:"string"}}}},Gi={type:"object",properties:{title:{type:"string","x-doc":{group:"Control",type:"string"}},icon:{type:"string",description:"Иконка шага: эмодзи или строка.","x-doc":{group:"Control",type:"string"}}}};function Ui(e){const t=e?.htmlTags&&e.htmlTags.length?It.filter(l=>e.htmlTags.includes(l.tag)):It,u=e?.html===!1?[]:t.map(l=>({name:`$html(${l.tag})`,role:"container",category:"HTML",propsSchema:qi(l)})),i={name:"FormArray",role:"array",category:"Массив",propsSchema:zi},x={name:"Wizard",role:"container",category:"Мастер",propsSchema:Vi},n={name:"Step",role:"container",category:"Мастер",propsSchema:Gi},y=[...u];return e?.formArray!==!1&&y.push(i),e?.wizard!==!1&&y.push(x,n),y}const Ki={Input:"Поля ввода",InputPassword:"Поля ввода",InputMask:"Поля ввода",InputOTP:"Поля ввода",Textarea:"Поля ввода",DatePicker:"Поля ввода",Calendar:"Поля ввода",FileUpload:"Поля ввода",FileUploadAvatar:"Поля ввода",Select:"Выбор и переключатели",NativeSelect:"Выбор и переключатели",Combobox:"Выбор и переключатели",RadioGroup:"Выбор и переключатели",Checkbox:"Выбор и переключатели",Switch:"Выбор и переключатели",Slider:"Выбор и переключатели",Toggle:"Выбор и переключатели",ToggleGroup:"Выбор и переключатели",Box:"Контейнеры",Section:"Контейнеры",Card:"Контейнеры",Accordion:"Контейнеры",Tabs:"Контейнеры",Collapsible:"Контейнеры",InputGroup:"Контейнеры",ButtonGroup:"Контейнеры",AspectRatio:"Контейнеры",ScrollArea:"Контейнеры",Resizable:"Контейнеры",Sidebar:"Контейнеры",Button:"Действия",Icon:"Отображение",Label:"Отображение",Badge:"Отображение",Typography:"Отображение",Avatar:"Отображение",Progress:"Отображение",Skeleton:"Отображение",Spinner:"Отображение",Table:"Отображение",Chart:"Отображение",Empty:"Отображение",Kbd:"Отображение",Marker:"Отображение",Alert:"Отображение",Separator:"Отображение",Carousel:"Отображение",Dialog:"Оверлеи",AlertDialog:"Оверлеи",Sheet:"Оверлеи",Drawer:"Оверлеи",Popover:"Оверлеи",HoverCard:"Оверлеи",Tooltip:"Оверлеи",Command:"Оверлеи",DropdownMenu:"Навигация",ContextMenu:"Навигация",Menubar:"Навигация",NavigationMenu:"Навигация",Breadcrumb:"Навигация",Pagination:"Навигация",Bubble:"Чат",Message:"Чат",MessageScroller:"Чат",Attachment:"Чат",Item:"Чат"},Wi=new Set(["Dialog","AlertDialog","Sheet","Popover","HoverCard","Tooltip","DropdownMenu","ContextMenu","Menubar","NavigationMenu"]),Ji=new Map([["Carousel","subpath-only: embla-carousel-react"],["Chart","subpath-only: recharts (экспорт ChartContainer, не Chart)"],["Command","subpath-only: cmdk"],["Drawer","subpath-only: vaul"],["MessageScroller","subpath-only: @shadcn/react"],["Resizable","subpath-only: react-resizable-panels (экспорт ResizablePanelGroup, не Resizable)"],["Sidebar","subpath-only"]]),Yi=new Set(["Icon","Separator","Spinner","Skeleton","Progress"]),sa=["FormField","AsyncBoundary","List"],xo=new Set(["Wizard","RendererFormWizard","Step","FormWizard"]);function Xi(){const e=new Map;for(const t of Wi)e.set(t,{mode:"limited",reason:"оверлей — нужен триггер/портал"});return e}function Qi(){return new Map(Ji)}const he={id:"reformer-ui-kit",label:"ReFormer UI Kit",package:"@reformer/ui-kit",infra:{fieldWrapper:"FormField",asyncBoundary:"AsyncBoundary",list:"List"},adapters:{wizard:{symbol:"FormWizard",subpath:"form-wizard"},step:null},palette:{categoryByName:Ki},styles:{mode:"tokens"},codegen:{needsShim:[...xo]}},Zi="workspace";function en(e){const t=Xi();for(const u of e)u.preview&&t.set(u.name,u.preview);return t}function tn(e){const t=Qi();for(const u of e)u.subpath&&t.set(u.name,`subpath-only: ${u.subpath}`);return t}function rn(e){const t=new Set(Yi);for(const u of e)u.leaf===!0?t.add(u.name):u.leaf===!1&&t.delete(u.name);return t}function on(e,t){const u=t?.classGroupsByRole??{},i=new Map;for(const x of e){const n=x.classGroups??u[x.role];n===void 0||n==="*"||i.set(x.name,new Set(n))}return i}function So(e){const t=e.kit??{},u=e.components??[],i=t.package??he.package;return{id:t.id??he.id,label:t.label??he.label,package:i,version:t.version??Zi,peerRanges:t.peerRanges??{},infra:{fieldWrapper:t.infra?.fieldWrapper??he.infra.fieldWrapper,asyncBoundary:t.infra?.asyncBoundary??he.infra.asyncBoundary,list:t.infra?.list??he.infra.list},adapters:t.adapters??he.adapters,palette:{categoryByName:t.palette?.categoryByName??he.palette.categoryByName,...t.palette?.order?{order:t.palette.order}:{},...t.palette?.glyphs?{glyphs:t.palette.glyphs}:{}},styles:{mode:t.styles?.mode??he.styles.mode,classNames:t.styles?.classNames??[],...t.styles?.href?{href:t.styles.href}:{},...t.styles?.classGroupsByRole?{classGroupsByRole:t.styles.classGroupsByRole}:{}},codegen:{importSpecifier:t.codegen?.importSpecifier??i,needsShim:t.codegen?.needsShim?new Set(t.codegen.needsShim):xo},previewPolicy:en(u),unresolvedReason:tn(u),leafComponents:rn(u),classGroupPolicy:on(u,t.styles),compoundTemplates:void 0}}function pa(e){return e.exportName??e.name}let Ao=null,nn=null;function an(){return Ao??(nn??=So({components:[]}))}function da(e){Ao=e}function sn(e){return{value:"$model(newField)",component:`$component(${e})`,componentProps:{label:e}}}function pn(e){return{component:`$component(${e})`,componentProps:{className:"space-y-4"},children:[]}}function dn(e){return{component:`$component(${e})`,componentProps:{}}}function ln(e){const t=e.slice(6,-1),u=`$html(${t})`,i=Hi(t);if(!i||i.content==="container"){const x=i?.defaultClass?{className:i.defaultClass}:{};return{component:u,componentProps:x,children:[]}}return i.content==="void"?{component:u,componentProps:{}}:{component:u,children:[i.defaultText??"Текст"]}}function K(e,t){return{component:`$component(${e})`,children:t===void 0?[]:[t]}}const cn=["Title","Description","Text","Trigger","Link","Page","Caption","Head","Cell","Fallback"];function un(e){return cn.some(t=>e.endsWith(t))?"Текст":void 0}const yn={Alert:()=>({component:"$component(Alert)",children:[K("AlertTitle","Заголовок"),K("AlertDescription","Описание")]}),Card:()=>({component:"$component(Card)",children:[{component:"$component(CardHeader)",children:[K("CardTitle","Заголовок"),K("CardDescription","Описание")]},K("CardContent"),K("CardFooter")]}),Accordion:()=>({component:"$component(Accordion)",componentProps:{type:"single",collapsible:!0},children:[{component:"$component(AccordionItem)",componentProps:{value:"item-1"},children:[K("AccordionTrigger","Секция 1"),K("AccordionContent")]}]}),Tabs:()=>({component:"$component(Tabs)",componentProps:{defaultValue:"tab-1"},children:[{component:"$component(TabsList)",children:[{component:"$component(TabsTrigger)",componentProps:{value:"tab-1"},children:["Вкладка 1"]},{component:"$component(TabsTrigger)",componentProps:{value:"tab-2"},children:["Вкладка 2"]}]},{component:"$component(TabsContent)",componentProps:{value:"tab-1"},children:[]},{component:"$component(TabsContent)",componentProps:{value:"tab-2"},children:[]}]}),Table:()=>({component:"$component(Table)",children:[{component:"$component(TableHeader)",children:[{component:"$component(TableRow)",children:[K("TableHead","Колонка 1"),K("TableHead","Колонка 2")]}]},{component:"$component(TableBody)",children:[{component:"$component(TableRow)",children:[K("TableCell","Значение 1"),K("TableCell","Значение 2")]}]}]}),Breadcrumb:()=>({component:"$component(Breadcrumb)",children:[{component:"$component(BreadcrumbList)",children:[{component:"$component(BreadcrumbItem)",children:[K("BreadcrumbLink","Главная")]},K("BreadcrumbSeparator"),{component:"$component(BreadcrumbItem)",children:[K("BreadcrumbPage","Текущая страница")]}]}]}),Empty:()=>({component:"$component(Empty)",children:[{component:"$component(EmptyHeader)",children:[K("EmptyTitle","Нет данных"),K("EmptyDescription","Здесь пока пусто")]},K("EmptyContent")]}),Item:()=>({component:"$component(Item)",children:[{component:"$component(ItemContent)",children:[K("ItemTitle","Заголовок"),K("ItemDescription","Описание")]},K("ItemActions")]}),InputGroup:()=>({component:"$component(InputGroup)",children:[{component:"$component(InputGroupAddon)",componentProps:{align:"inline-start"},children:[]},K("InputGroupInput")]}),Pagination:()=>({component:"$component(Pagination)",children:[{component:"$component(PaginationContent)",children:[{component:"$component(PaginationItem)",children:[K("PaginationPrevious")]},{component:"$component(PaginationItem)",children:[{component:"$component(PaginationLink)",children:["1"]}]},{component:"$component(PaginationItem)",children:[K("PaginationNext")]}]}]}),Avatar:()=>({component:"$component(Avatar)",children:[K("AvatarImage"),K("AvatarFallback","ИИ")]}),Message:()=>({component:"$component(Message)",children:[K("MessageAvatar"),K("MessageContent","Текст сообщения")]}),Bubble:()=>({component:"$component(Bubble)",children:[K("BubbleContent","Текст сообщения")]}),Collapsible:()=>({component:"$component(Collapsible)",children:[K("CollapsibleTrigger","Показать"),K("CollapsibleContent")]}),Carousel:()=>({component:"$component(Carousel)",children:[{component:"$component(CarouselContent)",children:[K("CarouselItem")]},K("CarouselPrevious"),K("CarouselNext")]})};function mn(){return{array:"$model(items)",item:{$template:{component:"$component(Box)",componentProps:{className:"space-y-3"},children:[]}},componentProps:{addButtonLabel:"+ Добавить элемент"}}}function Co(e="Шаг"){return{component:"$component(Step)",componentProps:{title:e},children:[]}}function gn(){return{component:"$component(Wizard)",componentProps:{steps:[Co("Шаг 1")]}}}function bn(e,t,u){if(t==="array")return mn();if(e.startsWith("$html("))return ln(e);if(t==="field")return sn(e);if(e==="Wizard")return gn();if(e==="Step")return Co();const i=an();if(i.leafComponents.has(e))return dn(e);const x=(i.compoundTemplates??yn)[e];return x?x():u?K(e,un(e)):pn(e)}const hn="http://json-schema.org/draft-07/schema#",fn="https://reformer.dev/schemas/component-catalog.schema.json",vn="ReFormer component catalog",xn="Контракт каталога компонентов (спека §5). Владелец — reformer-builder; клиенты (напр. @reformer/ui-kit) генерируют валидный catalog-JSON со списком своих компонентов. Билдер грузит его в палитру/инспектор.",Sn="object",An=["version","components"],Cn=!1,Pn={$schema:{type:"string",description:"Ссылка на этот контракт (для валидации/подсказок в IDE). Не нормативна — билдер валидирует каталог программно."},version:{type:"string",minLength:1},components:{type:"array",items:{type:"object",required:["name","role","propsSchema"],additionalProperties:!1,properties:{name:{type:"string",minLength:1,description:"Имя компонента для оператора $component(name)."},role:{enum:["field","container","array"],description:"field — form-control (несёт value); container — держит children; array — повторяющийся блок."},category:{type:"string",description:"Необязательная группировка палитры. Категория — забота билдера; клиент может не поставлять."},propsSchema:{type:"object",description:"JSON Schema редактируемых пропсов компонента (валидируется её структура, не содержимое)."},variantGroup:{type:"string",description:"Имя группы вариантов. Компоненты с одним variantGroup — варианты одного компонента (селектор variant в инспекторе). Дефолт группы — член, чей name === variantGroup."},variant:{type:"string",description:"Человекочитаемая метка варианта в группе (напр. «Пароль»)."},compoundParent:{type:"string",description:"Имя корня compound-компонента, частью которого является запись (AlertTitle → Alert). Части не показываются в общем списке палитры: они предлагаются в контексте своего корня и входят в его композицию по умолчанию."},exportName:{type:"string",minLength:1,description:"Контракт 2.0. Имя символа в namespace кита, если оно отличается от name записи (Input → InputField, Chart → ChartContainer). По умолчанию символ ищется по name: неявного правила «имя + суффикс» контракт не задаёт — кит, у которого имена расходятся, называет экспорт явно."},subpath:{type:"string",minLength:1,description:"Контракт 2.0. Subpath кита, за которым лежит символ, если его нет в главном barrel (тяжёлые компоненты за optional peer-deps)."},preview:{type:"object",required:["mode"],additionalProperties:!1,description:"Контракт 2.0. Ограничение живого превью. Позволяет киту самому объявить, что компонент нельзя рисовать вживую, вместо allowlist'а внутри билдера.",properties:{mode:{enum:["live","limited"],description:"limited — вместо компонента рисуется подписанный стаб «предпросмотр ограничен»."},reason:{type:"string",description:"Причина ограничения, показывается в стабе."}}},leaf:{type:"boolean",description:"Контракт 2.0. Компонент-лист: рендерит самодостаточный визуал (иконка, разделитель, спиннер) и вложенных компонентов не держит — не является drop-target."},palette:{type:"boolean",description:"Контракт 2.0. false — запись поставляется ради полноты метаданных (props для документации, инспектора и MCP), но узлом палитры не является и в собранный каталог билдера не попадает. Так кит описывает свои порталы, оверлеи, провайдеры и части form-control'ов, не превращая их в размещаемые узлы. Отсутствие поля равно true."},classGroups:{type:"array",items:{type:"string",minLength:1},description:"Контракт 2.0. id групп kit.styles.classNames, которыми РАЗРЕШЕНО стилизовать этот компонент. Отсутствие поля НЕ РАВНО пустому массиву: отсутствие отдаёт решение правилу роли kit.styles.classGroupsByRole (а если и его нет — доступен весь словарь), пустой массив = разрешённых групп нет и подсказок не будет. Типовой случай — form-control, которому разрешают только spacing: расположение поля в форме править можно, его вид — нет."}}}},kit:{type:"object",additionalProperties:!1,description:"Контракт 2.0. Дескриптор кита — то, что дизайн-система рассказывает о себе сама. Блок целиком опционален: каталог без него трактуется как «неявный кит» и достраивается дефолтами билдера (поведение 1:1 как до введения контракта).",properties:{id:{type:"string",minLength:1,description:"Стабильный идентификатор кита, независимый от npm-алиаса (напр. reformer-ui-kit)."},label:{type:"string",description:"Человекочитаемое имя для переключателя китов."},package:{type:"string",description:"Имя npm-пакета кита."},version:{type:"string",description:"Версия ПАКЕТА кита (не путать с version на верхнем уровне — та относится к контракту каталога)."},peerRanges:{type:"object",additionalProperties:{type:"string"},description:"Требования кита к shared-рантайму хоста. Информационная подсказка: решение об активации принимает символьная проверка, а не semver — открытые диапазоны вида '>=1.0.0' реальный контракт не выражают."},infra:{type:"object",additionalProperties:!1,description:"Компоненты вне палитрового каталога, обязательные для рендерера.",properties:{fieldWrapper:{type:"string",description:"Враппер поля (он же FIELD_WRAPPER реестра renderer-json)."},asyncBoundary:{type:"string",description:"Граница асинхронной загрузки."},list:{type:"string",description:"Обёртка display-списка для array-узлов."}}},adapters:{type:"object",additionalProperties:!1,description:"Символы кита под builder-адаптерами: wizard/step — пошаговая форма, provider — обёртка поддерева превью (тема styled-components, i18n, конфиг портала). null — кит такого не поставляет.",properties:{wizard:{$ref:"#/definitions/kitAdapter"},step:{$ref:"#/definitions/kitAdapter"},provider:{$ref:"#/definitions/kitAdapter"}}},palette:{type:"object",additionalProperties:!1,description:"Настройки палитры, которые знает сам кит. Клиентский конфиг билдера накладывается поверх.",properties:{categoryByName:{type:"object",additionalProperties:{type:"string"},description:"Имя компонента → категория палитры. Если задано, ЗАМЕЩАЕТ карту билдера целиком: смешивать категории чужого кита с картой ui-kit бессмысленно."},order:{type:"array",items:{type:"string"},description:"Порядок разделов палитры."},glyphs:{type:"object",additionalProperties:{type:"string"},description:"Имя компонента → текстовый глиф-бейдж."}}},styles:{type:"object",additionalProperties:!1,description:"Как подключаются стили кита и какими классами разрешено стилизовать его компоненты.",properties:{mode:{enum:["tokens","standalone"],description:"tokens — кит использует стандартный словарь токенов, достаточно переобъявить их значения на контейнере превью; standalone — кит поставляет самодостаточный CSS со своими утилитами."},href:{type:"string",description:"URL самодостаточного CSS (только для standalone)."},classNames:{type:"array",description:"Словарь классов для автодополнения поля className в инспекторе, разбитый на группы. Группы нужны не только для UI: запись компонента ссылается на их id в classGroups, ограничивая, чем её разрешено стилизовать. Отсутствие секции = кит подсказок не поставляет и поле остаётся свободным вводом — своего списка билдер НЕ держит (для standalone-кита Tailwind-подсказки были бы просто неверны).",items:{type:"object",required:["id","label","classes"],additionalProperties:!1,properties:{id:{type:"string",pattern:"^[a-z][a-z0-9-]*$",description:"СТАБИЛЬНЫЙ идентификатор группы: на него ссылаются classGroups записи и classGroupsByRole. Переименование — ломающее изменение каталога, а не косметика."},label:{type:"string",minLength:1,description:"Человекочитаемая подпись группы."},classes:{type:"array",items:{type:"string",minLength:1},description:"Классы группы в курируемом порядке — он же порядок подсказок."}}}},classGroupsByRole:{type:"object",description:"Дефолт «чем разрешено стилизовать» по роли записи; точечный classGroups записи это правило перекрывает. Типовой смысл: field — только расположение поля в форме (отступы), вид задаёт дизайн-система; container/array — '*'.",additionalProperties:{oneOf:[{const:"*",description:"Ограничений нет — доступен весь словарь."},{type:"array",items:{type:"string",minLength:1}}]}}}},codegen:{type:"object",additionalProperties:!1,description:"Что подставлять в сгенерированный registry.ts при экспорте примера.",properties:{importSpecifier:{type:"string",description:"Спецификатор пакета в import { … } from '…'. По умолчанию — kit.package."},needsShim:{type:"array",items:{type:"string"},description:"Символы, которым нужен shim вместо прямого импорта."}}}}}},kn={kitAdapter:{anyOf:[{type:"null"},{type:"object",required:["symbol"],additionalProperties:!1,properties:{symbol:{type:"string",minLength:1,description:"Имя экспорта в namespace кита."},subpath:{type:"string",description:"Subpath кита, за которым лежит символ."}}}]}},Tn={$schema:hn,$id:fn,title:vn,description:xn,type:Sn,required:An,additionalProperties:Cn,properties:Pn,definitions:kn},Mn="../../projects/reformer-builder/src/catalog/component-catalog.schema.json",wn="2.0",Bn={styles:{classNames:[{id:"layout",label:"Раскладка",classes:["block","inline-block","inline","flex","inline-flex","grid","inline-grid","hidden","contents","table","overflow-auto","overflow-hidden","overflow-scroll","overflow-visible","overflow-x-auto","overflow-y-auto","overflow-x-hidden","overflow-y-hidden"]},{id:"flex",label:"Флексбокс и выравнивание",classes:["flex-row","flex-row-reverse","flex-col","flex-col-reverse","flex-wrap","flex-nowrap","flex-1","flex-auto","flex-initial","flex-none","grow","grow-0","shrink","shrink-0","items-start","items-center","items-end","items-stretch","items-baseline","justify-start","justify-center","justify-end","justify-between","justify-around","justify-evenly","self-start","self-center","self-end","self-stretch","self-auto","content-start","content-center","content-between","place-items-center","place-content-center"]},{id:"grid",label:"Грид",classes:["grid-cols-1","grid-cols-2","grid-cols-3","grid-cols-4","grid-cols-5","grid-cols-6","grid-cols-12","col-span-1","col-span-2","col-span-3","col-span-full","row-span-1","row-span-2","grid-flow-row","grid-flow-col","auto-cols-fr","auto-rows-fr"]},{id:"responsive",label:"Адаптив",classes:["sm:grid-cols-2","sm:grid-cols-3","md:grid-cols-2","md:grid-cols-3","md:grid-cols-4","lg:grid-cols-2","lg:grid-cols-3","lg:grid-cols-4","lg:grid-cols-6","sm:col-span-2","md:col-span-2","md:col-span-3","md:col-span-full","lg:col-span-2","sm:flex-row","sm:flex-col","md:flex-row","md:flex-col","md:items-center","md:justify-between","md:gap-4","md:gap-6","md:p-6"]},{id:"spacing",label:"Отступы",classes:["gap-0","gap-0.5","gap-1","gap-1.5","gap-2","gap-2.5","gap-3","gap-4","gap-5","gap-6","gap-8","gap-10","gap-12","gap-16","gap-20","gap-24","gap-x-0","gap-x-0.5","gap-x-1","gap-x-1.5","gap-x-2","gap-x-2.5","gap-x-3","gap-x-4","gap-x-5","gap-x-6","gap-x-8","gap-x-10","gap-x-12","gap-x-16","gap-x-20","gap-x-24","gap-y-0","gap-y-0.5","gap-y-1","gap-y-1.5","gap-y-2","gap-y-2.5","gap-y-3","gap-y-4","gap-y-5","gap-y-6","gap-y-8","gap-y-10","gap-y-12","gap-y-16","gap-y-20","gap-y-24","p-0","p-0.5","p-1","p-1.5","p-2","p-2.5","p-3","p-4","p-5","p-6","p-8","p-10","p-12","p-16","p-20","p-24","px-0","px-0.5","px-1","px-1.5","px-2","px-2.5","px-3","px-4","px-5","px-6","px-8","px-10","px-12","px-16","px-20","px-24","py-0","py-0.5","py-1","py-1.5","py-2","py-2.5","py-3","py-4","py-5","py-6","py-8","py-10","py-12","py-16","py-20","py-24","pt-0","pt-0.5","pt-1","pt-1.5","pt-2","pt-2.5","pt-3","pt-4","pt-5","pt-6","pt-8","pt-10","pt-12","pt-16","pt-20","pt-24","pr-0","pr-0.5","pr-1","pr-1.5","pr-2","pr-2.5","pr-3","pr-4","pr-5","pr-6","pr-8","pr-10","pr-12","pr-16","pr-20","pr-24","pb-0","pb-0.5","pb-1","pb-1.5","pb-2","pb-2.5","pb-3","pb-4","pb-5","pb-6","pb-8","pb-10","pb-12","pb-16","pb-20","pb-24","pl-0","pl-0.5","pl-1","pl-1.5","pl-2","pl-2.5","pl-3","pl-4","pl-5","pl-6","pl-8","pl-10","pl-12","pl-16","pl-20","pl-24","m-0","m-0.5","m-1","m-1.5","m-2","m-2.5","m-3","m-4","m-5","m-6","m-8","m-10","m-12","m-16","m-20","m-24","mx-0","mx-0.5","mx-1","mx-1.5","mx-2","mx-2.5","mx-3","mx-4","mx-5","mx-6","mx-8","mx-10","mx-12","mx-16","mx-20","mx-24","my-0","my-0.5","my-1","my-1.5","my-2","my-2.5","my-3","my-4","my-5","my-6","my-8","my-10","my-12","my-16","my-20","my-24","mt-0","mt-0.5","mt-1","mt-1.5","mt-2","mt-2.5","mt-3","mt-4","mt-5","mt-6","mt-8","mt-10","mt-12","mt-16","mt-20","mt-24","mr-0","mr-0.5","mr-1","mr-1.5","mr-2","mr-2.5","mr-3","mr-4","mr-5","mr-6","mr-8","mr-10","mr-12","mr-16","mr-20","mr-24","mb-0","mb-0.5","mb-1","mb-1.5","mb-2","mb-2.5","mb-3","mb-4","mb-5","mb-6","mb-8","mb-10","mb-12","mb-16","mb-20","mb-24","ml-0","ml-0.5","ml-1","ml-1.5","ml-2","ml-2.5","ml-3","ml-4","ml-5","ml-6","ml-8","ml-10","ml-12","ml-16","ml-20","ml-24","mx-auto","my-auto","ml-auto","mr-auto","space-x-0","space-x-0.5","space-x-1","space-x-1.5","space-x-2","space-x-2.5","space-x-3","space-x-4","space-x-5","space-x-6","space-x-8","space-x-10","space-x-12","space-x-16","space-x-20","space-x-24","space-y-0","space-y-0.5","space-y-1","space-y-1.5","space-y-2","space-y-2.5","space-y-3","space-y-4","space-y-5","space-y-6","space-y-8","space-y-10","space-y-12","space-y-16","space-y-20","space-y-24"]},{id:"sizing",label:"Размеры",classes:["w-full","w-auto","w-screen","w-fit","w-min","w-max","w-px","w-1/2","w-1/3","w-2/3","w-1/4","w-3/4","w-0","w-0.5","w-1","w-1.5","w-2","w-2.5","w-3","w-4","w-5","w-6","w-8","w-10","w-12","w-16","w-20","w-24","h-full","h-auto","h-screen","h-fit","h-min","h-max","h-px","h-0","h-0.5","h-1","h-1.5","h-2","h-2.5","h-3","h-4","h-5","h-6","h-8","h-10","h-12","h-16","h-20","h-24","min-w-0","min-w-full","min-h-0","min-h-full","min-h-screen","max-w-none","max-w-xs","max-w-sm","max-w-md","max-w-lg","max-w-xl","max-w-2xl","max-w-full","max-w-screen-md","max-h-full","max-h-screen","size-full","size-4","size-5","size-6","size-8","size-10"]},{id:"position",label:"Позиционирование",classes:["relative","absolute","fixed","sticky","static","inset-0","inset-x-0","inset-y-0","top-0","right-0","bottom-0","left-0","z-0","z-10","z-20","z-30","z-40","z-50"]},{id:"typography",label:"Типографика",classes:["text-xs","text-sm","text-base","text-lg","text-xl","text-2xl","text-3xl","text-4xl","font-normal","font-medium","font-semibold","font-bold","font-light","font-mono","italic","uppercase","lowercase","capitalize","normal-case","truncate","text-balance","text-pretty","text-left","text-center","text-right","text-justify","leading-none","leading-tight","leading-snug","leading-normal","leading-relaxed","leading-loose","tracking-tight","tracking-normal","tracking-wide","tracking-wider","underline","line-through","no-underline","whitespace-normal","whitespace-nowrap","whitespace-pre","tabular-nums","antialiased"]},{id:"borders",label:"Границы и скругления",classes:["border","border-0","border-2","border-4","border-t","border-r","border-b","border-l","rounded-none","rounded-sm","rounded","rounded-md","rounded-lg","rounded-xl","rounded-2xl","rounded-3xl","rounded-full","rounded-t-md","rounded-b-md","rounded-l-md","rounded-r-md"]},{id:"effects",label:"Эффекты",classes:["shadow-none","shadow-sm","shadow","shadow-md","shadow-lg","shadow-xl","shadow-2xl","shadow-inner","opacity-0","opacity-50","opacity-70","opacity-90","opacity-100","ring","ring-1","ring-2","backdrop-blur"]},{id:"color",label:"Цвета и токены темы",classes:["bg-background","bg-foreground","bg-card","bg-card-foreground","bg-popover","bg-popover-foreground","bg-primary","bg-primary-foreground","bg-secondary","bg-secondary-foreground","bg-muted","bg-muted-foreground","bg-accent","bg-accent-foreground","bg-destructive","bg-border","bg-input","bg-ring","bg-chart-1","bg-chart-2","bg-chart-3","bg-chart-4","bg-chart-5","bg-sidebar","bg-sidebar-foreground","bg-sidebar-primary","bg-sidebar-primary-foreground","bg-sidebar-accent","bg-sidebar-accent-foreground","bg-sidebar-border","bg-sidebar-ring","text-background","text-foreground","text-card","text-card-foreground","text-popover","text-popover-foreground","text-primary","text-primary-foreground","text-secondary","text-secondary-foreground","text-muted","text-muted-foreground","text-accent","text-accent-foreground","text-destructive","text-border","text-input","text-ring","text-chart-1","text-chart-2","text-chart-3","text-chart-4","text-chart-5","text-sidebar","text-sidebar-foreground","text-sidebar-primary","text-sidebar-primary-foreground","text-sidebar-accent","text-sidebar-accent-foreground","text-sidebar-border","text-sidebar-ring","border-border","border-input","border-ring","border-destructive","border-primary","border-muted","ring-ring","ring-primary","ring-destructive","text-white","text-black","border-transparent","bg-slate-400","bg-slate-500","bg-slate-600","bg-slate-700","bg-gray-400","bg-gray-500","bg-gray-600","bg-gray-700","bg-zinc-400","bg-zinc-500","bg-zinc-600","bg-zinc-700","bg-red-400","bg-red-500","bg-red-600","bg-red-700","bg-orange-400","bg-orange-500","bg-orange-600","bg-orange-700","bg-amber-400","bg-amber-500","bg-amber-600","bg-amber-700","bg-yellow-400","bg-yellow-500","bg-yellow-600","bg-yellow-700","bg-green-400","bg-green-500","bg-green-600","bg-green-700","bg-emerald-400","bg-emerald-500","bg-emerald-600","bg-emerald-700","bg-blue-400","bg-blue-500","bg-blue-600","bg-blue-700","bg-indigo-400","bg-indigo-500","bg-indigo-600","bg-indigo-700","bg-violet-400","bg-violet-500","bg-violet-600","bg-violet-700","text-slate-400","text-slate-500","text-slate-600","text-slate-700","text-gray-400","text-gray-500","text-gray-600","text-gray-700","text-zinc-400","text-zinc-500","text-zinc-600","text-zinc-700","text-red-400","text-red-500","text-red-600","text-red-700","text-orange-400","text-orange-500","text-orange-600","text-orange-700","text-amber-400","text-amber-500","text-amber-600","text-amber-700","text-yellow-400","text-yellow-500","text-yellow-600","text-yellow-700","text-green-400","text-green-500","text-green-600","text-green-700","text-emerald-400","text-emerald-500","text-emerald-600","text-emerald-700","text-blue-400","text-blue-500","text-blue-600","text-blue-700","text-indigo-400","text-indigo-500","text-indigo-600","text-indigo-700","text-violet-400","text-violet-500","text-violet-600","text-violet-700"]},{id:"interactivity",label:"Интерактивность",classes:["cursor-pointer","cursor-default","cursor-not-allowed","select-none","select-text","pointer-events-none","pointer-events-auto","transition","transition-all","transition-colors","duration-150","duration-200","duration-300","ease-in-out"]}],classGroupsByRole:{field:["spacing"],container:"*",array:"*"}}},jn=JSON.parse(`[{"name":"Accordion","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Accordion","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс контейнера аккордеона (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collapsible":{"type":"boolean","default":false,"description":"В режиме single разрешить закрыть открытую секцию (не оставлять всегда одну открытой).","x-doc":{"group":"Behavior","type":"boolean","kind":"boolean"}},"defaultValue":{"description":"Значение(-я) секции, открытой по умолчанию (uncontrolled).","x-doc":{"group":"Behavior","type":"string | string[]"},"type":"string"},"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление письма: в горизонтальной ориентации задаёт, какая из стрелок ← → ведёт к следующей секции.","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'"}},"disabled":{"type":"boolean","default":false,"description":"Заблокировать взаимодействие со всеми секциями.","x-doc":{"group":"Behavior","type":"boolean","kind":"boolean"}},"onValueChange":{"description":"The callback that fires when the state of the accordion changes.","x-doc":{"group":"Behavior","type":"((value: string) => void) | ((value: string[]) => void)","kind":"readonly"}},"orientation":{"type":"string","enum":["vertical","horizontal"],"default":"vertical","description":"Ориентация раскладки секций.","x-doc":{"group":"Behavior","type":"'vertical' | 'horizontal'","kind":"enum"}},"type":{"type":"string","enum":["single","multiple"],"description":"Режим раскрытия: одна секция за раз (single) или несколько (multiple).","x-doc":{"group":"Behavior","type":"'single' | 'multiple'","kind":"enum"}},"value":{"description":"Раскрытые секции при управлении извне; обновляется из onValueChange — строка при type='single', массив при type='multiple'.","x-doc":{"group":"Control","type":"string | string[]","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"AccordionContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в свёрнутом состоянии — для внешнего управления анимацией раскрытия.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Accordion"},{"name":"AccordionItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","default":false,"description":"Заблокировать взаимодействие с этой секцией; она блокируется и тогда, когда disabled выставлен на самом Accordion.","x-doc":{"group":"State","type":"boolean"}},"value":{"type":"string","description":"Значение секции — по нему Accordion её открывает.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Accordion"},{"name":"AccordionTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Accordion"},{"name":"Alert","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Alert","properties":{"className":{"type":"string","description":"CSS-класс контейнера алерта (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"variant":{"type":"string","enum":["default","destructive"],"default":"default","description":"Визуальный тон алерта.","x-doc":{"group":"Behavior","type":"'default' | 'destructive'","kind":"enum"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"AlertDescription","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Alert"},{"name":"AlertDialog","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"AlertDialog","properties":{"defaultOpen":{"type":"boolean","description":"Открыт ли диалог изначально (неуправляемый режим).","x-doc":{"group":"State","type":"boolean"},"default":false},"onOpenChange":{"description":"Получает новое состояние при каждой попытке открыть или закрыть; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и компонент застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Управляемое состояние раскрытия: пока проп передан, компонент не меняет его сам и ждёт обновления снаружи.","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-dialog"]}}},{"name":"AlertDialogAction","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"size":{"type":"string","enum":["default","xs","sm","lg","icon","icon-xs","icon-sm","icon-lg"],"default":"default","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg'"}},"variant":{"type":"string","enum":["link","default","destructive","outline","secondary","ghost"],"default":"default","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"AlertDialog","palette":false},{"name":"AlertDialogCancel","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"size":{"type":"string","enum":["default","xs","sm","lg","icon","icon-xs","icon-sm","icon-lg"],"default":"default","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg'"}},"variant":{"type":"string","enum":["link","default","destructive","outline","secondary","ghost"],"default":"outline","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"AlertDialog","palette":false},{"name":"AlertDialogContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"deferPointerDownOutside":{"type":"boolean","description":"Откладывать реакцию на нажатие вне слоя до события click, чтобы внешний код успел остановить всплытие и отменить закрытие.","x-doc":{"group":"Behavior","type":"boolean"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в закрытом состоянии — нужно, когда появлением и скрытием управляет внешняя анимационная библиотека.","x-doc":{"group":"Behavior","type":"true"}},"onCloseAutoFocus":{"description":"Event handler called when auto-focusing on close. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onEscapeKeyDown":{"description":"Event handler called when the escape key is down. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Event handler called when the focus moves outside of the \`DismissableLayer\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onOpenAutoFocus":{"description":"Event handler called when auto-focusing on open. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"size":{"type":"string","enum":["default","sm"],"default":"default","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'sm'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"AlertDialog","palette":false},{"name":"AlertDialogDescription","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"AlertDialog","palette":false},{"name":"AlertDialogFooter","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"AlertDialog","palette":false},{"name":"AlertDialogHeader","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"AlertDialog","palette":false},{"name":"AlertDialogMedia","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"AlertDialog","palette":false},{"name":"AlertDialogOverlay","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в закрытом состоянии — нужно, когда появлением и скрытием управляет внешняя анимационная библиотека.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"AlertDialog","palette":false},{"name":"AlertDialogPortal","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"container":{"type":"object","description":"DOM-узел, в который порталится содержимое; по умолчанию — document.body.","x-doc":{"group":"Behavior","type":"Element | DocumentFragment | null","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в закрытом состоянии — нужно, когда появлением и скрытием управляет внешняя анимационная библиотека.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-dialog"]}},"compoundParent":"AlertDialog","palette":false},{"name":"AlertDialogTitle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"AlertDialog","palette":false},{"name":"AlertDialogTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"AlertDialog","palette":false},{"name":"AlertTitle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Alert"},{"name":"AspectRatio","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"AspectRatio","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"ratio":{"type":"number","description":"Соотношение сторон (ширина / высота), напр. 16/9 ≈ 1.78.","x-doc":{"group":"Behavior","type":"number"},"default":1}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"AsyncBoundary","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"delayMs":{"type":"number","default":0,"description":"Не показывать блок загрузки первые N мс — гасит вспышку спиннера.","x-doc":{"group":"Behavior","type":"number"}},"enabled":{"type":"boolean","default":true,"description":"\`false\` → загрузка не стартует, состояние \`idle\`. Режим создания записи.","x-doc":{"group":"Behavior","type":"boolean"}},"error":{"description":"Текст ошибки — попадает в блок ошибки и в render-функцию \`errorSlot\`.","x-doc":{"group":"Behavior","type":"ReactNode","kind":"readonly"}},"errorSlot":{"description":"Полная замена блока ошибки. Render-функция получает \`error\` / \`retry\` / \`canRetry\`.","x-doc":{"group":"Behavior","type":"ReactNode | ((props: AsyncBoundaryErrorRenderProps<ReactNode>) => ReactNode)","kind":"readonly"}},"errorTitle":{"description":"Заголовок блока ошибки.","x-doc":{"group":"Behavior","type":"ReactNode","kind":"readonly"}},"load":{"description":"Загрузчик. Получает \`AbortSignal\` — прокиньте его в \`fetch\`. Наличие этого пропа включает self-managed режим: статус, отмена и повтор берутся на себя компонентом.","x-doc":{"group":"Behavior","type":"((signal: AbortSignal) => Promise<T>)","kind":"readonly"}},"loadingSlot":{"description":"Полная замена блока загрузки — например скелетон вместо спиннера.","x-doc":{"group":"Behavior","type":"ReactNode","kind":"readonly"}},"loadingSubtitle":{"description":"Подзаголовок блока загрузки.","x-doc":{"group":"Behavior","type":"ReactNode","kind":"readonly"}},"loadingTitle":{"description":"Заголовок блока загрузки.","x-doc":{"group":"Behavior","type":"ReactNode","kind":"readonly"}},"loadKey":{"description":"Ключ перезапуска: при изменении стартует новая загрузка (обычно id записи).","x-doc":{"group":"Behavior","type":"unknown","kind":"readonly"}},"onRetry":{"description":"Повтор загрузки. Без него кнопка «Повторить» не рендерится.","x-doc":{"group":"Behavior","type":"(() => void)","kind":"readonly"}},"onSuccess":{"description":"Побочный эффект после успеха — например \`form.patchValue(data)\`.","x-doc":{"group":"Behavior","type":"((data: T) => void)","kind":"readonly"}},"refreshing":{"type":"boolean","description":"Фоновое обновление: контент остаётся на экране, регион помечается \`aria-busy\`.","x-doc":{"group":"Behavior","type":"boolean"}},"retryLabel":{"description":"Подпись кнопки повтора.","x-doc":{"group":"Behavior","type":"ReactNode","kind":"readonly"}},"status":{"type":"string","enum":["loading","idle","ready","error"],"description":"Текущее состояние. Обязателен в controlled-режиме (когда \`load\` не передан).","x-doc":{"group":"Behavior","type":"'loading' | 'idle' | 'ready' | 'error'"}},"toError":{"description":"Преобразование отказа промиса в отображаемый текст. По умолчанию — сообщение \`Error\`.","x-doc":{"group":"Behavior","type":"((e: unknown) => ReactNode)","kind":"readonly"}}},"x-inherits":{"react":["DOMAttributes"],"packages":[]}},"palette":false},{"name":"AsyncBoundaryEmpty","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"action":{"description":"Действие под текстом — например кнопка «Создать».","x-doc":{"group":"Behavior","type":"ReactNode","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"description":{"description":"Пояснение под заголовком.","x-doc":{"group":"Behavior","type":"ReactNode","kind":"readonly"}},"icon":{"description":"Иконка в медальоне над заголовком.","x-doc":{"group":"Behavior","type":"ReactNode","kind":"readonly"}},"title":{"default":"Нет данных","description":"Заголовок блока — выводится над содержимым.","x-doc":{"group":"Control","type":"ReactNode","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"AsyncBoundaryError","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"error":{"description":"Текст ошибки под заголовком.","x-doc":{"group":"Behavior","type":"ReactNode","kind":"readonly"}},"onRetry":{"description":"Колбэк повтора. Без него кнопка не рендерится.","x-doc":{"group":"Behavior","type":"(() => void)","kind":"readonly"}},"retryLabel":{"default":"Повторить","description":"Подпись кнопки повтора.","x-doc":{"group":"Behavior","type":"ReactNode","kind":"readonly"}},"title":{"default":"Ошибка загрузки","description":"Заголовок блока — выводится над содержимым.","x-doc":{"group":"Control","type":"ReactNode","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"AsyncBoundaryLoading","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"subtitle":{"default":"Пожалуйста, подождите","description":"Вспомогательный текст под спиннером.","x-doc":{"group":"Behavior","type":"ReactNode","kind":"readonly"}},"title":{"default":"Загрузка данных...","description":"Заголовок блока — выводится над содержимым.","x-doc":{"group":"Control","type":"ReactNode","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"Attachment","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Attachment","properties":{"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"default":"horizontal","description":"Ориентация: горизонтальный чип или вертикальная карточка.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'","kind":"enum"}},"size":{"type":"string","enum":["default","sm","xs"],"default":"default","description":"Размер чипа (отступы и типографика).","x-doc":{"group":"Behavior","type":"'default' | 'sm' | 'xs'","kind":"enum"}},"state":{"type":"string","enum":["idle","uploading","processing","error","done"],"default":"done","description":"Состояние загрузки/обработки файла — влияет на стили рамки и анимацию.","x-doc":{"group":"Behavior","type":"'idle' | 'uploading' | 'processing' | 'error' | 'done'","kind":"enum"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"AttachmentAction","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"size":{"type":"string","enum":["default","xs","sm","lg","icon","icon-xs","icon-sm","icon-lg"],"default":"icon-xs","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg'"}},"variant":{"type":"string","enum":["link","default","destructive","outline","secondary","ghost"],"description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Attachment"},{"name":"AttachmentActions","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Attachment"},{"name":"AttachmentContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Attachment"},{"name":"AttachmentDescription","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Attachment"},{"name":"AttachmentGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Attachment"},{"name":"AttachmentMedia","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"variant":{"type":"string","enum":["icon","image"],"default":"icon","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'icon' | 'image'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Attachment"},{"name":"AttachmentTitle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Attachment"},{"name":"AttachmentTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","default":false,"description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Attachment"},{"name":"Avatar","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Avatar","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс аватара (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"size":{"type":"string","enum":["default","sm","lg"],"default":"default","description":"Размер аватара: sm (24px), default (32px), lg (40px).","x-doc":{"group":"Behavior","type":"'default' | 'sm' | 'lg'","kind":"enum"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"AvatarBadge","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Avatar"},{"name":"AvatarFallback","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"delayMs":{"type":"number","description":"Пауза перед показом фолбэка, мс — за это время изображение успевает загрузиться и заглушка не мигает; без значения фолбэк виден сразу.","x-doc":{"group":"Behavior","type":"number"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Avatar"},{"name":"AvatarGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Avatar"},{"name":"AvatarGroupCount","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Avatar"},{"name":"AvatarImage","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"alt":{"type":"string","description":"Альтернативный текст.","x-doc":{"group":"Control","type":"string"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"onLoadingStatusChange":{"description":"Сообщает о смене статуса загрузки картинки (idle → loading → loaded | error) — по нему рисуют свой скелетон или логируют битый src; переключение на AvatarFallback Radix делает и без него.","x-doc":{"group":"Behavior","type":"((status: ImageLoadingStatus) => void)","kind":"readonly"}},"src":{"type":"string","description":"URL изображения.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","ImgHTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Avatar"},{"name":"Badge","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Badge","properties":{"asChild":{"type":"boolean","default":false,"description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс бейджа (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"variant":{"type":"string","enum":["default","secondary","destructive","outline","ghost","link"],"default":"default","description":"Визуальный вариант бейджа.","x-doc":{"group":"Behavior","type":"'default' | 'secondary' | 'destructive' | 'outline' | 'ghost' | 'link'","kind":"enum"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"Box","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Box","properties":{"className":{"type":"string","description":"CSS-класс layout-контейнера (atomic CSS / Tailwind: flex, grid, gap-*).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["DOMAttributes"],"packages":[]}}},{"name":"Breadcrumb","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Breadcrumb","properties":{"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"BreadcrumbEllipsis","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Breadcrumb"},{"name":"BreadcrumbItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","LiHTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Breadcrumb"},{"name":"BreadcrumbLink","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"href":{"type":"string","description":"URL ссылки.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AnchorHTMLAttributes","AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Breadcrumb"},{"name":"BreadcrumbList","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","OlHTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Breadcrumb"},{"name":"BreadcrumbPage","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Breadcrumb"},{"name":"BreadcrumbSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","LiHTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Breadcrumb"},{"name":"Bubble","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Bubble","properties":{"align":{"type":"string","enum":["start","end"],"default":"start","description":"Сторона выравнивания пузыря (start — слева, end — справа).","x-doc":{"group":"Behavior","type":"'start' | 'end'","kind":"enum"}},"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"variant":{"type":"string","enum":["default","secondary","muted","tinted","outline","ghost","destructive"],"default":"default","description":"Вариант оформления пузыря.","x-doc":{"group":"Behavior","type":"'default' | 'secondary' | 'muted' | 'tinted' | 'outline' | 'ghost' | 'destructive'","kind":"enum"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"BubbleContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","default":false,"description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Bubble"},{"name":"BubbleGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Bubble"},{"name":"BubbleReactions","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["start","end"],"default":"end","description":"Выравнивание элемента поперёк потока — к началу или к концу оси; набор допустимых значений у каждого компонента свой.","x-doc":{"group":"Behavior","type":"'start' | 'end'"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"side":{"type":"string","enum":["top","bottom"],"default":"bottom","description":"Сторона, к которой прижимается элемент; набор допустимых сторон и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'top' | 'bottom'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Bubble"},{"name":"Button","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Button","properties":{"asChild":{"type":"boolean","default":false,"description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс кнопки (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Заблокировать кнопку.","x-doc":{"group":"Behavior","type":"boolean","kind":"boolean"}},"size":{"type":"string","enum":["default","xs","sm","lg","icon","icon-xs","icon-sm","icon-lg"],"default":"default","description":"Размер кнопки (cva); icon-* — квадратные для иконок без текста.","x-doc":{"group":"Behavior","type":"'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg'","kind":"enum"}},"type":{"type":"string","enum":["button","submit","reset"],"description":"HTML-тип кнопки: button | submit | reset.","x-doc":{"group":"Behavior","type":"'button' | 'submit' | 'reset'","kind":"enum"}},"variant":{"type":"string","enum":["default","destructive","outline","secondary","ghost","link"],"default":"default","description":"Визуальный вариант кнопки (cva).","x-doc":{"group":"Behavior","type":"'default' | 'destructive' | 'outline' | 'secondary' | 'ghost' | 'link'","kind":"enum"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"ButtonGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"ButtonGroup","properties":{"className":{"type":"string","description":"CSS-класс группы кнопок (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"default":"horizontal","description":"Ориентация группы: горизонтальная (по умолчанию) или вертикальная (cva).","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'","kind":"enum"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"ButtonGroupSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"decorative":{"type":"boolean","description":"Разделитель считается чисто декоративным и убирается из дерева доступности; иначе он объявляется семантическим разделителем.","x-doc":{"group":"Behavior","type":"boolean"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"default":"vertical","description":"Ориентация разделителя — горизонтальная или вертикальная линия.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"ButtonGroup"},{"name":"ButtonGroupText","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","default":false,"description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"ButtonGroup"},{"name":"Calendar","role":"field","exportName":"CalendarField","propsSchema":{"type":"object","properties":{"animate":{"type":"boolean","description":"Анимировать смену месяцев при навигации.","x-doc":{"group":"Behavior","type":"boolean"}},"autoFocus":{"type":"boolean","description":"Ставить фокус на выбранный день (или на сегодня) при монтировании — для возврата фокуса после действия пользователя.","x-doc":{"group":"Behavior","type":"boolean"}},"broadcastCalendar":{"type":"boolean","description":"Раскладка недель по broadcast-календарю: неделя всегда с понедельника, weekStartsOn игнорируется, showOutsideDays включается по умолчанию.","x-doc":{"group":"Behavior","type":"boolean"}},"buttonVariant":{"type":"string","enum":["link","default","destructive","outline","secondary","ghost"],"default":"ghost","description":"Собственный проп обёртки кита: оформление кнопок навигации по месяцам, значения — варианты Button.","x-doc":{"group":"Behavior","type":"'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost'"}},"captionLayout":{"type":"string","enum":["label","dropdown","dropdown-months","dropdown-years"],"default":"label","description":"Шапка месяца: статичная подпись или дропдауны выбора месяца/года.","x-doc":{"group":"Behavior","type":"'label' | 'dropdown' | 'dropdown-months' | 'dropdown-years'","kind":"enum"}},"className":{"type":"string","description":"Доп. CSS-класс корневого элемента.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"classNames":{"type":"object","description":"Карта CSS-классов внутренних узлов календаря (сетка, шапка, неделя, день); перекрывает подготовленные обёрткой классы поключево.","x-doc":{"group":"Control","type":"Partial<ClassNames>","kind":"readonly"}},"components":{"type":"object","description":"Замена React-компонентов, которыми рисуются части календаря; перекрывает Root/Chevron/DayButton/WeekNumber, заданные обёрткой.","x-doc":{"group":"Control","type":"Partial<CustomComponents>","kind":"readonly"}},"dateLib":{"type":"object","description":"Подмена библиотеки работы с датами; экспериментально, вне гарантий semver.","x-doc":{"group":"Behavior","type":"Partial<DateLib>","kind":"readonly"}},"defaultMonth":{"type":"object","default":"The current month","description":"Месяц, открытый при первом рендере, когда навигацией управляет сам календарь.","x-doc":{"group":"State","type":"Date","kind":"readonly"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"dir":{"type":"string","description":"Направление письма: ltr или rtl (в rtl стрелки навигации разворачиваются).","x-doc":{"group":"Behavior","type":"string"}},"disableNavigation":{"type":"boolean","description":"Запретить переход между месяцами, оставив кнопки навигации на месте.","x-doc":{"group":"Behavior","type":"boolean"}},"endMonth":{"type":"object","description":"Последний месяц, до которого доходит навигация.","x-doc":{"group":"Behavior","type":"Date","kind":"readonly"}},"excludeDisabled":{"type":"boolean","description":"When \`true\`, the range will reset when including a disabled day.","x-doc":{"group":"Behavior","type":"boolean"}},"firstWeekContainsDate":{"type":"number","description":"День января, который всегда попадает в первую неделю года.","x-doc":{"group":"Behavior","type":"1 | 4"}},"fixedWeeks":{"type":"boolean","description":"Всегда рисовать шесть недель в месяце, добирая дни следующего месяца.","x-doc":{"group":"Behavior","type":"boolean"}},"footer":{"description":"Подвал календаря, работающий как live-region для скринридеров; предпочтительна строка, а не сложная разметка.","x-doc":{"group":"Control","type":"ReactNode","kind":"readonly"}},"formatters":{"type":"object","description":"Переопределение функций форматирования подписей дат; обёртка уже задаёт свой formatMonthDropdown, остальные ключи добавляются поверх.","x-doc":{"group":"Behavior","type":"Partial<Formatters>","kind":"readonly"}},"hidden":{"description":"Матчер дней, которые не показываются в сетке.","x-doc":{"group":"State","type":"Matcher | Matcher[]","kind":"readonly"}},"hideNavigation":{"type":"boolean","description":"Скрыть кнопки навигации, не отключая саму навигацию.","x-doc":{"group":"Behavior","type":"boolean"}},"hideWeekdays":{"type":"boolean","description":"Скрыть строку с названиями дней недели.","x-doc":{"group":"Behavior","type":"boolean"}},"id":{"type":"string","description":"Идентификатор корневого элемента.","x-doc":{"group":"Control","type":"string"}},"ISOWeek":{"type":"boolean","description":"Считать недели по ISO вместо настроек локали; weekStartsOn и firstWeekContainsDate при этом игнорируются.","x-doc":{"group":"Behavior","type":"boolean"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"labels":{"type":"object","description":"Переопределение генераторов aria-label для элементов календаря.","x-doc":{"group":"Control","type":"Partial<Labels>","kind":"readonly"}},"lang":{"type":"string","description":"Языковой тег контейнера; без него берётся код активной локали.","x-doc":{"group":"Control","type":"string"}},"locale":{"type":"object","default":"enUS - The English locale default of \`date-fns\`.","description":"Объект локали для подписей месяцев и дней недели (импортируется из react-day-picker/locale).","x-doc":{"group":"Behavior","type":"Partial<DayPickerLocale>","kind":"readonly"}},"max":{"type":"number","description":"The maximum number of selectable days.","x-doc":{"group":"Behavior","type":"number"}},"min":{"type":"number","description":"The minimum number of selectable days.","x-doc":{"group":"Behavior","type":"number"}},"mode":{"type":"string","enum":["single"],"description":"Режим выбора. Field-версия — только single (одна дата, value: Date | null).","x-doc":{"group":"Behavior","type":"'single'","kind":"enum"},"default":"single"},"modifiers":{"type":"object","description":"Именованные модификаторы, навешиваемые на дни по матчеру.","x-doc":{"group":"State","type":"Record<string, Matcher | Matcher[] | undefined>","kind":"readonly"}},"modifiersClassNames":{"type":"object","description":"CSS-классы для дней, попавших под соответствующий модификатор.","x-doc":{"group":"Control","type":"ModifiersClassNames","kind":"readonly"}},"modifiersStyles":{"type":"object","description":"Инлайн-стили для дней, попавших под соответствующий модификатор.","x-doc":{"group":"Control","type":"ModifiersStyles","kind":"readonly"}},"month":{"type":"object","description":"Показываемый месяц под внешним управлением; используется в паре с onMonthChange.","x-doc":{"group":"State","type":"Date","kind":"readonly"}},"navLayout":{"type":"string","enum":["around","after"],"description":"Расположение кнопок навигации: по краям шапки или после неё — второе выравнивает порядок табуляции с визуальным.","x-doc":{"group":"Behavior","type":"'around' | 'after'"}},"nonce":{"type":"string","description":"CSP-nonce для инлайновых стилей календаря.","x-doc":{"group":"Control","type":"string"}},"noonSafe":{"type":"boolean","description":"Вести расчёты на полдень выбранной таймзоны, чтобы исторические сдвиги смещения не переносили дату через полночь.","x-doc":{"group":"Behavior","type":"boolean"}},"numberOfMonths":{"type":"number","default":1,"description":"Сколько месяцев показывать одновременно.","x-doc":{"group":"Behavior","type":"number"}},"numerals":{"type":"string","enum":["latn","arab","arabext","deva","geez","beng","guru","gujr","orya","tamldec","telu","knda","mlym","thai","mymr","khmr","laoo","tibt"],"default":"latn\` Latin (Western Arabic)","description":"Система записи цифр в датах — латинская, арабо-индийская, деванагари и другие письменности.","x-doc":{"group":"Behavior","type":"'latn' | 'arab' | 'arabext' | 'deva' | 'geez' | 'beng' | 'guru' | 'gujr' | 'orya' | 'tamldec' | 'telu' | 'knda' | 'mlym' | 'thai' | 'mymr' | 'khmr' | 'laoo' | 'tibt'"}},"onDayBlur":{"description":"Event handler when a day is blurred.","x-doc":{"group":"Behavior","type":"DayEventHandler<FocusEvent<Element, Element>>","kind":"readonly"}},"onDayClick":{"description":"Event handler when a day is clicked.","x-doc":{"group":"Behavior","type":"DayEventHandler<MouseEvent<Element, MouseEvent>>","kind":"readonly"}},"onDayFocus":{"description":"Event handler when a day is focused.","x-doc":{"group":"Behavior","type":"DayEventHandler<FocusEvent<Element, Element>>","kind":"readonly"}},"onDayKeyDown":{"description":"Event handler when a key is pressed on a day.","x-doc":{"group":"Behavior","type":"DayEventHandler<KeyboardEvent<Element>>","kind":"readonly"}},"onDayMouseEnter":{"description":"Event handler when the mouse enters a day.","x-doc":{"group":"Behavior","type":"DayEventHandler<MouseEvent<Element, MouseEvent>>","kind":"readonly"}},"onDayMouseLeave":{"description":"Event handler when the mouse leaves a day.","x-doc":{"group":"Behavior","type":"DayEventHandler<MouseEvent<Element, MouseEvent>>","kind":"readonly"}},"onMonthChange":{"description":"Event fired when the user navigates between months.","x-doc":{"group":"Behavior","type":"MonthChangeEventHandler","kind":"readonly"}},"onNextClick":{"description":"Event handler when the next month button is clicked.","x-doc":{"group":"Behavior","type":"MonthChangeEventHandler","kind":"readonly"}},"onPrevClick":{"description":"Event handler when the previous month button is clicked.","x-doc":{"group":"Behavior","type":"MonthChangeEventHandler","kind":"readonly"}},"pagedNavigation":{"type":"boolean","description":"Листать сразу на numberOfMonths месяцев, а не по одному.","x-doc":{"group":"Behavior","type":"boolean"}},"required":{"type":"boolean","description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"},"default":false},"resetOnSelect":{"type":"boolean","description":"When \`true\`, clicking a day starts a new range if there is no current start date or if a range is already complete. In those cases, the clicked day becomes the start of the new range. When \`required\` is \`false\`, clicking the same day of a single-day range clears the selection.","x-doc":{"group":"Behavior","type":"boolean"}},"reverseMonths":{"type":"boolean","description":"Обратный порядок месяцев при numberOfMonths > 1 — самый поздний первым.","x-doc":{"group":"Behavior","type":"boolean"}},"reverseYears":{"type":"boolean","description":"Обратный порядок лет в дропдауне выбора года.","x-doc":{"group":"Behavior","type":"boolean"}},"role":{"type":"string","enum":["application","dialog"],"description":"Роль контейнера для вспомогательных технологий: диалог или самостоятельное приложение.","x-doc":{"group":"Control","type":"'application' | 'dialog'"}},"selected":{"type":"object","description":"The selected date.","x-doc":{"group":"Behavior","type":"Date"}},"showOutsideDays":{"type":"boolean","default":true,"description":"Показывать дни соседних месяцев в первой и последней неделе.","x-doc":{"group":"Behavior","type":"boolean"}},"showWeekNumber":{"type":"boolean","description":"Показывать колонку с номерами недель.","x-doc":{"group":"Behavior","type":"boolean"}},"startMonth":{"type":"object","description":"Первый месяц, с которого начинается навигация.","x-doc":{"group":"Behavior","type":"Date","kind":"readonly"}},"styles":{"type":"object","description":"Инлайн-стили внутренних узлов календаря.","x-doc":{"group":"Control","type":"Partial<Styles>","kind":"readonly"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"timeZone":{"type":"string","description":"Таймзона расчётов — имя IANA или смещение от UTC; экспериментально.","x-doc":{"group":"Behavior","type":"string"}},"title":{"type":"string","description":"Атрибут title контейнера.","x-doc":{"group":"Control","type":"string"}},"today":{"type":"object","description":"Какая дата считается сегодняшней и получает модификатор today; по умолчанию текущая.","x-doc":{"group":"State","type":"Date","kind":"readonly"}},"useAdditionalDayOfYearTokens":{"type":"boolean","description":"Разрешить дополнительные токены дня года (D, DD) при форматировании и разборе дат.","x-doc":{"group":"Behavior","type":"boolean"}},"useAdditionalWeekYearTokens":{"type":"boolean","description":"Разрешить дополнительные токены недельного года (YY, YYYY) при форматировании и разборе дат.","x-doc":{"group":"Behavior","type":"boolean"}},"weekStartsOn":{"type":"number","description":"Индекс первого дня недели (0 — воскресенье); перебивает настройку локали.","x-doc":{"group":"Behavior","type":"0 | 1 | 2 | 3 | 4 | 5 | 6"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"Date | null","description":"Выбранная дата. null — ничего не выбрано."},"onChange":{"group":"Control","type":"(value: Date | null) => void","description":"Выбор даты. Повторный клик по выбранной дате сбрасывает значение в null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","DOMAttributes"],"packages":["react-day-picker"]}}},{"name":"CalendarDayButton","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"day":{"type":"object","description":"День, который рисует кнопка; подставляется самим DayPicker при обходе сетки.","x-doc":{"group":"Control","type":"CalendarDay","kind":"readonly"}},"modifiers":{"type":"object","description":"Флаги состояния дня (selected, range_start/middle/end, focused), по которым кнопка выбирает оформление и забирает фокус.","x-doc":{"group":"State","type":"Modifiers","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes"],"packages":[]}},"compoundParent":"Calendar","palette":false},{"name":"Card","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Card","properties":{"className":{"type":"string","description":"CSS-класс карточки-контейнера (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"CardAction","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Card"},{"name":"CardContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Card"},{"name":"CardDescription","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Card"},{"name":"CardFooter","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Card"},{"name":"CardHeader","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Card"},{"name":"CardTitle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Card"},{"name":"Carousel","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Carousel","properties":{"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"opts":{"type":"object","description":"Конфиг embla-carousel (loop, align, slidesToScroll, dragFree и т.п.); axis из него игнорируется — ось задаёт orientation.","x-doc":{"group":"Options","type":"Partial<OptionsType>","kind":"readonly"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"default":"horizontal","description":"Ориентация прокрутки карусели.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'","kind":"enum"}},"plugins":{"type":"array","description":"Плагины embla (autoplay, wheel-gestures и др.) — передаются в useEmblaCarousel как есть.","x-doc":{"group":"Options","type":"CreatePluginType<LoosePluginType, {}>[]","kind":"readonly"}},"setApi":{"description":"Коллбэк, получающий embla-API после инициализации, — для императивной прокрутки и подписки на события извне.","x-doc":{"group":"Behavior","type":"((api: EmblaCarouselType | undefined) => void)","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"CarouselContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Carousel"},{"name":"CarouselItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Carousel"},{"name":"CarouselNext","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"size":{"type":"string","enum":["default","xs","sm","lg","icon","icon-xs","icon-sm","icon-lg"],"default":"icon","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg'"}},"variant":{"type":"string","enum":["link","default","destructive","outline","secondary","ghost"],"default":"outline","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Carousel"},{"name":"CarouselPrevious","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"size":{"type":"string","enum":["default","xs","sm","lg","icon","icon-xs","icon-sm","icon-lg"],"default":"icon","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg'"}},"variant":{"type":"string","enum":["link","default","destructive","outline","secondary","ghost"],"default":"outline","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Carousel"},{"name":"Chart","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Chart","properties":{"className":{"type":"string","description":"Доп. CSS-класс (Tailwind) — обычно задаёт высоту/ширину графика.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"config":{"type":"object","description":"Словарь серий: подпись, иконка и цвет (или пара цветов light/dark) для каждого ключа данных — из него ChartStyle генерирует CSS-переменные --color-<ключ>.","x-doc":{"group":"Options","type":"ChartConfig","kind":"readonly"}},"initialDimension":{"type":"object","description":"Размеры области графика до первого измерения контейнера (SSR и первый кадр), по умолчанию 320×200.","x-doc":{"group":"Behavior","type":"{ width: number; height: number; }","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"ChartContainer","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"config":{"type":"object","description":"Словарь серий: подпись, иконка и цвет (или пара цветов light/dark) для каждого ключа данных — из него ChartStyle генерирует CSS-переменные --color-<ключ>.","x-doc":{"group":"Options","type":"ChartConfig","kind":"readonly"}},"initialDimension":{"type":"object","description":"Размеры области графика до первого измерения контейнера (SSR и первый кадр), по умолчанию 320×200.","x-doc":{"group":"Behavior","type":"{ width: number; height: number; }","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Chart","palette":false},{"name":"ChartLegend","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["center","left","right"],"default":"center","description":"Горизонтальная позиция легенды: left/right отнимают ширину у графика, center оставляет её неизменной.","x-doc":{"group":"Behavior","type":"'center' | 'left' | 'right'"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"content":{"description":"Своя отрисовка легенды — React-элемент или функция, возвращающая HTML; сюда передают <ChartLegendContent />.","x-doc":{"group":"Control","type":"ContentType","kind":"readonly"}},"formatter":{"description":"Функция форматирования подписи элемента легенды перед выводом.","x-doc":{"group":"Control","type":"Formatter","kind":"readonly"}},"height":{"description":"Height of the legend. Accept CSS style string values like \`100%\` or \`fit-content\`, or number values like \`400\`.","x-doc":{"group":"Behavior","type":"string | number","kind":"readonly"}},"iconSize":{"type":"number","default":14,"description":"Размер маркера серии в пикселях (recharts по умолчанию 14).","x-doc":{"group":"Behavior","type":"number"}},"iconType":{"type":"string","enum":["circle","line","rect","none","cross","diamond","plainline","square","star","triangle","wye"],"description":"Форма маркера серии — от точки и линии до звезды; none убирает маркер совсем.","x-doc":{"group":"Behavior","type":"'circle' | 'line' | 'rect' | 'none' | 'cross' | 'diamond' | 'plainline' | 'square' | 'star' | 'triangle' | 'wye'"}},"inactiveColor":{"type":"string","default":"#ccc","description":"Цвет маркера у выключенной серии (recharts по умолчанию #ccc).","x-doc":{"group":"Control","type":"string"}},"itemSorter":{"default":"value","description":"Правило сортировки элементов: поле payload ('value'/'dataKey'), своя функция-ключ или null — оставить порядок как пришёл.","x-doc":{"group":"Behavior","type":"LegendItemSorter | null","kind":"readonly"}},"labelStyle":{"type":"object","default":"{}","description":"Inline-стили span'а с подписью элемента легенды.","x-doc":{"group":"Control","type":"CSSProperties","kind":"readonly"}},"layout":{"type":"string","enum":["horizontal","vertical"],"default":"horizontal","description":"Раскладка элементов внутри легенды — в строку или в столбец.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'"}},"onBBoxUpdate":{"description":"Колбэк с габаритами легенды, доставшийся от recharts 2: в 3.x он остался только в типе — рантайм его не вызывает, размеры легенды снимает её собственный ResizeObserver и сам отдаёт их графику.","x-doc":{"group":"Behavior","type":"((box: ElementOffset | null) => void)","kind":"readonly"}},"payloadUniqBy":{"description":"Дедупликация элементов: true — правило recharts, функция — свой ключ уникальности, false — не фильтровать.","x-doc":{"group":"Behavior","type":"UniqueOption<LegendPayload>","kind":"readonly"}},"portal":{"type":"object","description":"DOM-узел-цель для рендера легенды через React-портал; без него легенда рисуется внутри обёртки recharts.","x-doc":{"group":"Behavior","type":"HTMLElement | null","kind":"readonly"}},"verticalAlign":{"type":"string","enum":["top","bottom","middle"],"default":"bottom","description":"Вертикальная позиция легенды: top/bottom отнимают высоту у графика, middle накладывает её поверх.","x-doc":{"group":"Behavior","type":"'top' | 'bottom' | 'middle'"}},"width":{"description":"Width of the legend. Accept CSS style string values like \`100%\` or \`fit-content\`, or number values like \`400\`.","x-doc":{"group":"Behavior","type":"string | number","kind":"readonly"}},"wrapperStyle":{"type":"object","description":"Inline-стили внешнего div-обёртки легенды.","x-doc":{"group":"Control","type":"CSSProperties","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","SVGAttributes"],"packages":["recharts"]}},"compoundParent":"Chart","palette":false},{"name":"ChartLegendContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["center","left","right"],"default":"center","description":"Горизонтальное выравнивание из типа recharts; этой вёрсткой не читается — элементы всегда центрируются flex-раскладкой.","x-doc":{"group":"Behavior","type":"'center' | 'left' | 'right'"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"formatter":{"description":"Форматирование подписи из типа recharts; здесь не вызывается — подпись берётся из config по nameKey.","x-doc":{"group":"Control","type":"Formatter","kind":"readonly"}},"hideIcon":{"type":"boolean","default":false,"description":"Не рисовать иконку серии из config — остаётся только цветной квадрат.","x-doc":{"group":"Behavior","type":"boolean"}},"iconSize":{"type":"number","default":14,"description":"Размер маркера из типа recharts; здесь размер фиксирован классами (квадрат 2, иконка 3).","x-doc":{"group":"Behavior","type":"number"}},"iconType":{"type":"string","enum":["circle","line","rect","none","cross","diamond","plainline","square","star","triangle","wye"],"description":"Форма маркера из типа recharts; здесь маркер всегда скруглённый квадрат либо иконка из config.","x-doc":{"group":"Behavior","type":"'circle' | 'line' | 'rect' | 'none' | 'cross' | 'diamond' | 'plainline' | 'square' | 'star' | 'triangle' | 'wye'"}},"inactiveColor":{"type":"string","default":"#ccc","description":"Цвет выключенной серии из типа recharts; здесь не читается — цвет берётся из item.color.","x-doc":{"group":"Control","type":"string"}},"labelStyle":{"type":"object","default":"{}","description":"Inline-стили подписи из типа recharts; здесь подпись стилизуется классами.","x-doc":{"group":"Control","type":"CSSProperties","kind":"readonly"}},"layout":{"type":"string","enum":["horizontal","vertical"],"default":"horizontal","description":"Раскладка элементов из типа recharts; здесь элементы всегда выстраиваются в строку.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'"}},"nameKey":{"type":"string","description":"Ключ, по которому элемент сопоставляется с записью config; по умолчанию берётся item.dataKey.","x-doc":{"group":"Options","type":"string"}},"payload":{"type":"array","description":"Список серий, который recharts прокидывает в content-рендерер; при пустом списке легенда не рисуется.","x-doc":{"group":"Options","type":"readonly LegendPayload[]","kind":"readonly"}},"verticalAlign":{"type":"string","enum":["top","bottom","middle"],"default":"bottom","description":"Сторона легенды относительно графика — влияет только на отступ (top → снизу, иначе сверху); значение прокидывает recharts.","x-doc":{"group":"Behavior","type":"'top' | 'bottom' | 'middle'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes","SVGAttributes"],"packages":["recharts"]}},"compoundParent":"Chart","palette":false},{"name":"ChartStyle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"config":{"type":"object","description":"Словарь серий-источник цветов: для каждого ключа с color или theme рендерится CSS-переменная --color-<ключ> в области [data-chart].","x-doc":{"group":"Options","type":"ChartConfig","kind":"readonly"}},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Control","type":"string"}}}},"compoundParent":"Chart","palette":false},{"name":"ChartTooltip","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"active":{"type":"boolean","description":"Принудительно показать (true) или скрыть (false) тултип; undefined — показом управляет recharts.","x-doc":{"group":"State","type":"boolean"}},"allowEscapeViewBox":{"type":"object","default":"{\\"x\\":false,\\"y\\":false}","description":"Разрешить тултипу выходить за границы viewBox графика — отдельно по осям x и y.","x-doc":{"group":"Behavior","type":"AllowInDimension","kind":"readonly"}},"animationDuration":{"type":"number","default":400,"description":"Длительность анимации перемещения тултипа в миллисекундах (recharts по умолчанию 400).","x-doc":{"group":"Behavior","type":"number"}},"animationEasing":{"default":"ease","description":"Сглаживание анимации: именованная кривая (ease, ease-in-out, linear), cubic-bezier(...), 'spring' или своя функция.","x-doc":{"group":"Behavior","type":"EasingInput","kind":"readonly"}},"axisId":{"default":0,"description":"Идентификатор оси, к которой привязан тултип; по умолчанию — ось, заданная layout'ом графика.","x-doc":{"group":"Behavior","type":"AxisId","kind":"readonly"}},"content":{"description":"Своя отрисовка тултипа — React-элемент или функция; сюда передают <ChartTooltipContent />.","x-doc":{"group":"Control","type":"ContentType<ValueType, NameType>","kind":"readonly"}},"contentStyle":{"type":"object","default":"{}","description":"Inline-стили контейнера стандартного тултипа recharts; с ChartTooltipContent не действуют.","x-doc":{"group":"Control","type":"CSSProperties","kind":"readonly"}},"cursor":{"default":true,"description":"Подсветка позиции курсора на графике: false — не рисовать, объект — настройки фигуры, React-элемент — своя фигура.","x-doc":{"group":"Behavior","type":"CursorDefinition","kind":"readonly"}},"defaultIndex":{"description":"Точка, на которой тултип показан изначально, без наведения.","x-doc":{"group":"State","type":"number | TooltipIndex","kind":"readonly"}},"filterNull":{"type":"boolean","default":true,"description":"Скрывать записи со значением null или undefined (recharts по умолчанию true).","x-doc":{"group":"Behavior","type":"boolean"}},"formatter":{"description":"Форматирование значения записи; вернув массив, можно заменить и значение, и имя.","x-doc":{"group":"Control","type":"(Formatter<ValueType, NameType> & ((value: ValueType, name: NameType, item: TooltipPayloadEntry, index: number, payload: TooltipPayload) => ReactNode | [...]))","kind":"readonly"}},"includeHidden":{"type":"boolean","default":false,"description":"Показывать в тултипе и скрытые серии (те, у которых выставлен hide).","x-doc":{"group":"Behavior","type":"boolean"}},"isAnimationActive":{"default":"auto","description":"Анимация перемещения тултипа: false — выключить, 'auto' — выключить в SSR и при prefers-reduced-motion.","x-doc":{"group":"Behavior","type":"boolean | \\"auto\\"","kind":"readonly"}},"itemSorter":{"default":"name","description":"Правило сортировки записей: поле ('name'/'value'/'dataKey') или своя функция-ключ.","x-doc":{"group":"Behavior","type":"(TooltipItemSorter<ValueType, NameType> & TooltipItemSorter)","kind":"readonly"}},"itemStyle":{"type":"object","default":"{}","description":"Inline-стили строки записи (li) стандартного тултипа recharts.","x-doc":{"group":"Control","type":"CSSProperties","kind":"readonly"}},"labelClassName":{"type":"string","description":"CSS-класс заголовка тултипа.","x-doc":{"group":"Control","type":"string"}},"labelFormatter":{"description":"Форматирование заголовка тултипа по label и текущему payload.","x-doc":{"group":"Control","type":"(((label: ReactNode, payload: readonly Payload<ValueType, NameType>[]) => ReactNode) & ((label: any, payload: TooltipPayload) => ReactNode))","kind":"readonly"}},"labelStyle":{"type":"object","default":"{}","description":"Inline-стили заголовка (p) стандартного тултипа recharts.","x-doc":{"group":"Control","type":"CSSProperties","kind":"readonly"}},"offset":{"default":10,"description":"Отступ тултипа от курсора в пикселях; объектом {x, y} задаётся отдельно по осям (recharts по умолчанию 10).","x-doc":{"group":"Behavior","type":"number | Coordinate","kind":"readonly"}},"payloadUniqBy":{"description":"Дедупликация записей: true — правило recharts, функция — свой ключ уникальности, false — не фильтровать.","x-doc":{"group":"Behavior","type":"UniqueOption<TooltipPayloadEntry>","kind":"readonly"}},"portal":{"type":"object","description":"DOM-узел-цель для рендера тултипа через React-портал; без него тултип рисуется внутри обёртки recharts.","x-doc":{"group":"Behavior","type":"HTMLElement | null","kind":"readonly"}},"position":{"type":"object","description":"Фиксированная координата тултипа вместо позиции курсора; можно задать только x или только y.","x-doc":{"group":"Behavior","type":"Partial<Coordinate>","kind":"readonly"}},"reverseDirection":{"type":"object","default":"{\\"x\\":false,\\"y\\":false}","description":"Разворачивать сторону выноса тултипа относительно курсора по осям x и y.","x-doc":{"group":"Behavior","type":"AllowInDimension","kind":"readonly"}},"separator":{"type":"string","default":" : ","description":"Разделитель между именем и значением в стандартном тултипе recharts (по умолчанию ' : ').","x-doc":{"group":"Control","type":"string"}},"shared":{"type":"boolean","description":"Тултип собирает все серии в точке оси (true) или показывает только наведённый элемент (false); умолчание зависит от типа графика.","x-doc":{"group":"Behavior","type":"boolean"}},"trigger":{"type":"string","enum":["hover","click"],"default":"hover","description":"Чем открывается тултип: наведением или кликом — при клике он остаётся активным.","x-doc":{"group":"Behavior","type":"'hover' | 'click'"}},"useTranslate3d":{"type":"boolean","default":false,"description":"Позиционировать тултип через translate3d вместо left/top — аппаратное ускорение.","x-doc":{"group":"Behavior","type":"boolean"}},"wrapperClassName":{"type":"string","description":"CSS-класс внешней обёртки тултипа.","x-doc":{"group":"Control","type":"string"}},"wrapperStyle":{"type":"object","description":"Inline-стили внешней обёртки тултипа; позиционирование задаёт recharts.","x-doc":{"group":"Control","type":"CSSProperties","kind":"readonly"}}}},"compoundParent":"Chart","palette":false},{"name":"ChartTooltipContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"active":{"type":"boolean","description":"Признак видимости, который прокидывает recharts; при false или пустом payload компонент отдаёт null.","x-doc":{"group":"State","type":"boolean"}},"allowEscapeViewBox":{"type":"object","default":"{\\"x\\":false,\\"y\\":false}","description":"Выход тултипа за viewBox — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"AllowInDimension","kind":"readonly"}},"animationDuration":{"type":"number","default":400,"description":"Длительность анимации — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"number"}},"animationEasing":{"default":"ease","description":"Сглаживание анимации — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"EasingInput","kind":"readonly"}},"axisId":{"default":0,"description":"Ось привязки тултипа — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"AxisId","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"content":{"description":"Слот собственной отрисовки — параметр ChartTooltip; здесь тип выродился в пересечение с HTML-атрибутом content и практически незадаваем.","x-doc":{"group":"Control","type":"(ContentType<ValueType, NameType> & string)","kind":"readonly"}},"contentStyle":{"type":"object","default":"{}","description":"Inline-стили контейнера стандартного тултипа recharts; здесь контейнер стилизуется классами и className.","x-doc":{"group":"Control","type":"CSSProperties","kind":"readonly"}},"cursor":{"default":true,"description":"Подсветка позиции курсора — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"CursorDefinition","kind":"readonly"}},"defaultIndex":{"description":"Изначально активная точка — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"State","type":"number | TooltipIndex","kind":"readonly"}},"filterNull":{"type":"boolean","default":true,"description":"Скрытие пустых записей — параметр ChartTooltip; здесь записи отсеиваются только по type === 'none'.","x-doc":{"group":"Behavior","type":"boolean"}},"formatter":{"description":"Своя отрисовка строки записи: получает value, name, item, index и payload и полностью заменяет стандартную вёрстку строки.","x-doc":{"group":"Control","type":"(Formatter<ValueType, NameType> & ((value: ValueType, name: NameType, item: TooltipPayloadEntry, index: number, payload: TooltipPayload) => ReactNode | [...]) & Formatter<...>)","kind":"readonly"}},"hideIndicator":{"type":"boolean","default":false,"description":"Не рисовать цветной маркер серии слева от записи.","x-doc":{"group":"Behavior","type":"boolean"}},"hideLabel":{"type":"boolean","default":false,"description":"Не выводить заголовок тултипа — подпись активной точки.","x-doc":{"group":"Behavior","type":"boolean"}},"includeHidden":{"type":"boolean","default":false,"description":"Показ скрытых серий — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"boolean"}},"indicator":{"type":"string","enum":["line","dot","dashed"],"default":"dot","description":"Форма маркера серии: точка, вертикальная полоса или пунктирная рамка; при line и dashed с единственной записью заголовок переезжает внутрь строки.","x-doc":{"group":"Behavior","type":"'line' | 'dot' | 'dashed'"}},"isAnimationActive":{"default":"auto","description":"Анимация тултипа — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"boolean | \\"auto\\"","kind":"readonly"}},"itemSorter":{"default":"name","description":"Сортировка записей — параметр ChartTooltip; сюда payload приходит уже упорядоченным.","x-doc":{"group":"Behavior","type":"(TooltipItemSorter<ValueType, NameType> & (TooltipItemSorter & TooltipItemSorter<ValueType, TooltipNameType>))","kind":"readonly"}},"itemStyle":{"type":"object","default":"{}","description":"Inline-стили строки стандартного тултипа recharts; здесь строка стилизуется классами.","x-doc":{"group":"Control","type":"CSSProperties","kind":"readonly"}},"label":{"description":"Подпись активной точки от recharts; строковое значение сначала ищется в config как ключ и заменяется на его label.","x-doc":{"group":"Control","type":"ReactNode","kind":"readonly"}},"labelClassName":{"type":"string","description":"CSS-класс заголовка тултипа — добавляется к базовому font-medium.","x-doc":{"group":"Control","type":"string"}},"labelFormatter":{"description":"Своя отрисовка заголовка: получает уже разрешённое по config значение и payload.","x-doc":{"group":"Control","type":"(((label: ReactNode, payload: readonly Payload<ValueType, NameType>[]) => ReactNode) & ((label: any, payload: TooltipPayload) => ReactNode) & ((label: ReactNode, payload: readonly Payload<...>[]) => ReactNode))","kind":"readonly"}},"labelKey":{"type":"string","description":"Ключ, по которому заголовок ищется в config, вместо dataKey или name первой записи.","x-doc":{"group":"Options","type":"string"}},"labelStyle":{"type":"object","default":"{}","description":"Inline-стили заголовка стандартного тултипа recharts; здесь заголовок стилизуется классами.","x-doc":{"group":"Control","type":"CSSProperties","kind":"readonly"}},"nameKey":{"type":"string","description":"Ключ, по которому запись сопоставляется с config, вместо item.name или item.dataKey.","x-doc":{"group":"Options","type":"string"}},"offset":{"default":10,"description":"Отступ от курсора — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"number | Coordinate","kind":"readonly"}},"payload":{"type":"array","description":"Записи активной точки, которые recharts прокидывает в content; при пустом списке компонент отдаёт null.","x-doc":{"group":"Options","type":"readonly Payload<ValueType, TooltipNameType>[]","kind":"readonly"}},"payloadUniqBy":{"description":"Дедупликация записей — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"UniqueOption<TooltipPayloadEntry>","kind":"readonly"}},"portal":{"type":"object","description":"Цель React-портала — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"HTMLElement | null","kind":"readonly"}},"position":{"type":"object","description":"Фиксированная позиция тултипа — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"Partial<Coordinate>","kind":"readonly"}},"reverseDirection":{"type":"object","default":"{\\"x\\":false,\\"y\\":false}","description":"Разворот стороны выноса — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"AllowInDimension","kind":"readonly"}},"separator":{"type":"string","default":" : ","description":"Разделитель имени и значения в стандартном тултипе recharts; здесь имя и значение разнесены по краям строки.","x-doc":{"group":"Control","type":"string"}},"shared":{"type":"boolean","description":"Режим «все серии в точке оси» — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"boolean"}},"trigger":{"type":"string","enum":["hover","click"],"default":"hover","description":"Открытие по наведению или клику — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"'hover' | 'click'"}},"useTranslate3d":{"type":"boolean","default":false,"description":"Позиционирование через translate3d — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"boolean"}},"wrapperClassName":{"type":"string","description":"CSS-класс обёртки тултипа — параметр ChartTooltip; свой контейнер ChartTooltipContent стилизует через className.","x-doc":{"group":"Control","type":"string"}},"wrapperStyle":{"type":"object","description":"Inline-стили обёртки тултипа — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Control","type":"CSSProperties","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Chart","palette":false},{"name":"Checkbox","role":"field","exportName":"CheckboxField","propsSchema":{"type":"object","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"checked":{"description":"Контролируемая отметка: \`true\`, \`false\` или \`'indeterminate'\` (aria-checked=\\"mixed\\", клик из него даёт \`true\`); в field-режиме приходит от формы через checkedAdapter.","x-doc":{"group":"State","type":"CheckedState","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс контрола (CheckboxPrimitive.Root).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultChecked":{"description":"Начальная отметка неконтролируемого режима; игнорируется, как только задан \`checked\` (в field-режиме форма контролирует его всегда).","x-doc":{"group":"State","type":"CheckedState","kind":"readonly"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"label":{"type":"string","description":"Подпись справа от чекбокса (inline-раскладка). Рендерит сам контрол.","x-doc":{"group":"Textfield","type":"string"}},"onCheckedChange":{"description":"Эмиттер отметки (контракт Radix Root): \`true\`, \`false\` или \`'indeterminate'\`; в field-версии сюда checkedAdapter кладёт onChange формы, приводя \`'indeterminate'\` к \`false\`.","x-doc":{"group":"Control","type":"((checked: CheckedState) => void)","kind":"readonly"}},"required":{"type":"boolean","description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"},"default":false},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"boolean","description":"Состояние чекбокса. undefined/null трактуется как false."},"onChange":{"group":"Control","type":"(value: boolean) => void","description":"Изменение. indeterminate приводится к false."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"CheckboxWithLabel","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"checked":{"description":"Та же отметка, что у Checkbox — враппер пробрасывает её на примитив; под withFormControl подставляется формой и перекрывает значение из componentProps.","x-doc":{"group":"State","type":"CheckedState","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultChecked":{"description":"Начальная отметка неконтролируемого режима; в field-версии не работает — HOC всегда передаёт \`checked\`.","x-doc":{"group":"State","type":"CheckedState","kind":"readonly"}},"label":{"type":"string","description":"Текстовая подпись рядом с контролом.","x-doc":{"group":"Control","type":"string"}},"onCheckedChange":{"description":"Тот же эмиттер, что у Checkbox — враппер пробрасывает его на примитив; под withFormControl сюда checkedAdapter кладёт onChange формы (\`'indeterminate'\` → \`false\`).","x-doc":{"group":"Control","type":"((checked: CheckedState) => void)","kind":"readonly"}},"required":{"type":"boolean","description":"Пробрасывается на примитив (aria-required + \`required\` у bubble-input); не путать с одноимённым \`required\` field-обёртки, который рисует маркер «*» у метки.","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Checkbox","palette":false},{"name":"Collapsible","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Collapsible","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс контейнера collapsible (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultOpen":{"type":"boolean","description":"Раскрыт ли collapsible по умолчанию (uncontrolled).","x-doc":{"group":"Behavior","type":"boolean","kind":"boolean"}},"disabled":{"type":"boolean","description":"Заблокировать раскрытие/сворачивание.","x-doc":{"group":"Behavior","type":"boolean","kind":"boolean"}},"onOpenChange":{"description":"Получает новое состояние при каждой попытке открыть или закрыть; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и компонент застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Управляемое состояние раскрытия: если задано, блок подчиняется внешнему значению, а не собственному переключателю.","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"CollapsibleContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в свёрнутом состоянии — для внешнего управления анимацией раскрытия.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Collapsible"},{"name":"CollapsibleTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Collapsible"},{"name":"Combobox","role":"field","exportName":"ComboboxField","propsSchema":{"type":"object","properties":{"className":{"type":"string","description":"Доп. CSS-класс триггера.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"clearable":{"type":"boolean","default":false,"description":"Показывать крестик очистки (сброс в null); повторный выбор опции тоже сбрасывает.","x-doc":{"group":"Behavior","type":"boolean"}},"creatable":{"type":"boolean","default":false,"description":"Разрешить ввести своё значение: при отсутствии совпадения — пункт «Создать «…»» (эмитит введённое как value).","x-doc":{"group":"Behavior","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"emptyText":{"type":"string","description":"Текст пустого состояния (ничего не найдено).","x-doc":{"group":"Textfield","type":"string"},"default":"No options found."},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Control","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"options":{"type":"array","description":"Список опций { value, label }. Поиск идёт по label.","x-doc":{"group":"Options","type":"Array<{ value; label }>","kind":"readonly"},"items":{"type":"object","required":["value","label"],"additionalProperties":false,"properties":{"value":{"type":"string"},"label":{"type":"string"}}}},"placeholder":{"type":"string","description":"Подсказка в триггере, пока ничего не выбрано.","x-doc":{"group":"Textfield","type":"string"},"default":"Select an option..."},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"searchPlaceholder":{"type":"string","description":"Подсказка в поле поиска.","x-doc":{"group":"Textfield","type":"string"},"default":"Search..."},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Выбранное значение (option.value). null — ничего не выбрано."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Выбор; при очистке приходит null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","RefAttributes"],"packages":[]}}},{"name":"Command","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Command","properties":{"asChild":{"type":"boolean","description":"Рендерить не собственный div, а единственный дочерний элемент, передав ему пропсы и data-slot.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultValue":{"description":"Optional default item value when it is initially rendered.","x-doc":{"group":"Behavior","type":"string | (readonly string[] & string)","kind":"readonly"}},"disablePointerSelection":{"type":"boolean","description":"Отключить выбор пункта наведением мыши.","x-doc":{"group":"Behavior","type":"boolean"},"default":false},"filter":{"description":"Своя функция релевантности пункта запросу: 0 — скрыть, 1 — точное совпадение; по умолчанию command-score.","x-doc":{"group":"Behavior","type":"CommandFilter","kind":"readonly"}},"label":{"type":"string","description":"Скрытая подпись меню для скринридеров, визуально не отображается.","x-doc":{"group":"Control","type":"string"}},"loop":{"type":"boolean","description":"Зацикливать навигацию стрелками (с конца — в начало).","x-doc":{"group":"Behavior","type":"boolean"},"default":false},"onValueChange":{"description":"Event handler called when the selected item of the menu changes.","x-doc":{"group":"Behavior","type":"((value: string) => void)","kind":"readonly"}},"shouldFilter":{"type":"boolean","description":"Авто-фильтрация и сортировка по поисковому запросу.","x-doc":{"group":"Behavior","type":"boolean"},"default":true},"value":{"type":"string","description":"Optional controlled state of the selected command menu item.","x-doc":{"group":"Control","type":"string"}},"vimBindings":{"type":"boolean","description":"Vim-хоткеи навигации (ctrl+n/j/p/k).","x-doc":{"group":"Behavior","type":"boolean"},"default":true}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["cmdk"]}}},{"name":"CommandDialog","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultOpen":{"type":"boolean","description":"Начальное состояние в неуправляемом режиме — открыт ли слой при первом рендере; дальше состояние живёт внутри компонента.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","default":"Search for a command to run...","description":"Скрытое описание диалога для скринридеров, рендерится в sr-only заголовке.","x-doc":{"group":"Control","type":"string"}},"modal":{"type":"boolean","description":"Модальный режим: фон недоступен для взаимодействия, прокрутка страницы фиксируется, фокус удерживается внутри слоя.","x-doc":{"group":"Behavior","type":"boolean"}},"onOpenChange":{"description":"Получает новое состояние при каждой попытке открыть или закрыть; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и компонент застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Управляемое состояние раскрытия: пока проп передан, компонент не меняет его сам и ждёт обновления снаружи.","x-doc":{"group":"State","type":"boolean"}},"showCloseButton":{"type":"boolean","default":true,"description":"Показывать ли кнопку закрытия; значение по умолчанию зависит от части компонента.","x-doc":{"group":"Behavior","type":"boolean"}},"title":{"type":"string","default":"Command Palette","description":"Заголовок блока — выводится над содержимым.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-dialog"]}},"compoundParent":"Command","palette":false},{"name":"CommandEmpty","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Рендерить не собственный div, а единственный дочерний элемент, передав ему пропсы и data-slot.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["cmdk"]}},"compoundParent":"Command","palette":false},{"name":"CommandGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Рендерить не собственный div, а единственный дочерний элемент, передав ему пропсы и data-slot.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать группу в DOM, даже если фильтр её отсеял.","x-doc":{"group":"Behavior","type":"boolean"}},"heading":{"description":"Заголовок, который рендерится над пунктами группы.","x-doc":{"group":"Control","type":"ReactNode","kind":"readonly"}},"value":{"type":"string","description":"Уникальный идентификатор группы; обязателен, если заголовок не задан.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["cmdk"]}},"compoundParent":"Command","palette":false},{"name":"CommandInput","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Рендерить не собственный input, а единственный дочерний элемент, передав ему пропсы и data-slot.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"onValueChange":{"description":"Event handler called when the search value changes.","x-doc":{"group":"Behavior","type":"((search: string) => void)","kind":"readonly"}},"value":{"type":"string","description":"Optional controlled state for the value of the search input.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","InputHTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Command","palette":false},{"name":"CommandItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Рендерить не собственный div, а единственный дочерний элемент, передав ему пропсы и data-slot.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт недоступен: не выбирается мышью и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"forceMount":{"type":"boolean","description":"Держать пункт в DOM, даже если фильтр его отсеял.","x-doc":{"group":"Behavior","type":"boolean"}},"keywords":{"type":"array","description":"Дополнительные слова, по которым пункт находится поиском помимо своего текста.","x-doc":{"group":"Options","type":"string[]"}},"value":{"type":"string","description":"Уникальное значение пункта; без него берётся из текста — задайте явно, если текст меняется между рендерами.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["cmdk"]}},"compoundParent":"Command","palette":false},{"name":"CommandList","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Рендерить не собственный div, а единственный дочерний элемент, передав ему пропсы и data-slot.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"label":{"type":"string","description":"Скрытая подпись списка подсказок для скринридеров, визуально не отображается.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["cmdk"]}},"compoundParent":"Command","palette":false},{"name":"CommandSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"alwaysRender":{"type":"boolean","description":"Показывать разделитель всегда, а не только при пустом запросе — нужно при ручной фильтрации.","x-doc":{"group":"Behavior","type":"boolean"}},"asChild":{"type":"boolean","description":"Рендерить не собственный div, а единственный дочерний элемент, передав ему пропсы и data-slot.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Command","palette":false},{"name":"CommandShortcut","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Command","palette":false},{"name":"ContextMenu","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"ContextMenu","properties":{"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление чтения — влияет на раскладку и навигацию с клавиатуры.","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'","kind":"enum"},"default":"ltr"},"modal":{"type":"boolean","description":"Модальный режим — блокирует взаимодействие с фоном при открытом меню.","x-doc":{"group":"Behavior","type":"boolean"},"default":true},"onOpenChange":{"description":"Получает новое состояние при каждой попытке открыть или закрыть; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и компонент застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Управляемое состояние меню: работает только в паре с onOpenChange, а открытие до правого клика оставляет меню без якоря — оно прилипнет к левому верхнему углу окна.","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-context-menu"]}}},{"name":"ContextMenuCheckboxItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"checked":{"description":"Состояние отметки пункта-чекбокса; помимо включено/выключено допускает промежуточное \`indeterminate\`.","x-doc":{"group":"State","type":"CheckedState","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт меню недоступен: не реагирует на выбор и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"onCheckedChange":{"description":"Получает новое состояние отметки при выборе пункта-чекбокса; из промежуточного \`indeterminate\` переключение даёт \`true\`.","x-doc":{"group":"Behavior","type":"((checked: boolean) => void)","kind":"readonly"}},"textValue":{"type":"string","description":"Текст пункта для поиска набором с клавиатуры (typeahead); задаётся, когда содержимое пункта не сводится к простой строке.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["@radix-ui/react-menu"]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"alignOffset":{"type":"number","description":"Сдвиг всплывающего слоя вдоль оси выравнивания, в пикселях от точки start/end.","x-doc":{"group":"Behavior","type":"number"}},"arrowPadding":{"type":"number","description":"Зона у углов слоя, в которую не заходит стрелка-указатель, в пикселях — чтобы стрелка не наезжала на скруглённые края.","x-doc":{"group":"Behavior","type":"number"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"avoidCollisions":{"type":"boolean","description":"Автоматически смещать и переворачивать слой, когда он не помещается в границах видимости; при выключении сторона и выравнивание соблюдаются буквально.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collisionBoundary":{"description":"Элемент или набор элементов, по границам которых считаются столкновения; по умолчанию границей служит вьюпорт.","x-doc":{"group":"Behavior","type":"Boundary | Boundary[]","kind":"readonly"}},"collisionPadding":{"description":"Отступ от границ столкновения, на котором слой уже считается упёршимся; задаётся общим числом пикселей или отдельно по сторонам.","x-doc":{"group":"Behavior","type":"number | Partial<Record<\\"top\\" | \\"bottom\\" | \\"left\\" | \\"right\\", number>>","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое меню смонтированным и в закрытом состоянии — для внешнего управления анимацией появления.","x-doc":{"group":"Behavior","type":"true"}},"hideWhenDetached":{"type":"boolean","description":"Скрывать слой, когда его якорь полностью ушёл из видимой области — например, прокрутился за пределы контейнера.","x-doc":{"group":"Behavior","type":"boolean"}},"loop":{"type":"boolean","default":false,"description":"Зацикливать навигацию с клавиатуры: с последнего пункта переход на первый и обратно.","x-doc":{"group":"Behavior","type":"boolean"}},"onCloseAutoFocus":{"description":"Event handler called when auto-focusing on close. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onEscapeKeyDown":{"description":"Нажатие Escape, когда меню — верхний слой: следом меню закрывается, а \`event.preventDefault()\` в обработчике оставляет его открытым.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Уход фокуса за пределы меню: следом меню закрывается, а \`event.preventDefault()\` в обработчике оставляет его открытым; в модальном режиме меню отменяет это закрытие само.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onInteractOutside":{"description":"Любое взаимодействие снаружи: вызывается и при нажатии указателем вне меню, и при уходе фокуса — следом за \`onPointerDownOutside\`/\`onFocusOutside\`; \`event.preventDefault()\` оставляет меню открытым.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Нажатие указателем вне меню: следом меню закрывается, а \`event.preventDefault()\` в обработчике оставляет его открытым.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}},"sticky":{"type":"string","enum":["partial","always"],"description":"Поведение слоя при уходе якоря: \`partial\` — держаться, пока якорь виден хотя бы частично, \`always\` — оставаться в границах в любом случае.","x-doc":{"group":"Behavior","type":"'partial' | 'always'"}},"updatePositionStrategy":{"type":"string","enum":["optimized","always"],"description":"Частота пересчёта позиции: \`optimized\` — по значимым событиям (скролл, ресайз), \`always\` — на каждом кадре анимации, точнее и дороже.","x-doc":{"group":"Behavior","type":"'optimized' | 'always'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт меню недоступен: не реагирует на выбор и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"inset":{"type":"boolean","description":"Добавляет левый отступ, выравнивающий текст по пунктам с иконкой или отметкой.","x-doc":{"group":"Behavior","type":"boolean"}},"textValue":{"type":"string","description":"Текст пункта для поиска набором с клавиатуры (typeahead); задаётся, когда содержимое пункта не сводится к простой строке.","x-doc":{"group":"Control","type":"string"}},"variant":{"type":"string","enum":["default","destructive"],"default":"default","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'default' | 'destructive'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["@radix-ui/react-menu"]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuLabel","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"inset":{"type":"boolean","description":"Добавляет левый отступ, выравнивающий текст по пунктам с иконкой или отметкой.","x-doc":{"group":"Behavior","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuPortal","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"container":{"type":"object","description":"DOM-узел, в который порталится содержимое меню; по умолчанию — document.body.","x-doc":{"group":"Behavior","type":"Element | DocumentFragment | null","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое меню смонтированным и в закрытом состоянии — для внешнего управления анимацией появления.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-menu"]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuRadioGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"onValueChange":{"description":"Получает value выбранного пункта радиогруппы при каждом выборе; в паре с \`value\` образует управляемый режим.","x-doc":{"group":"Behavior","type":"((value: string) => void)","kind":"readonly"}},"value":{"type":"string","description":"Значение пункта радиогруппы меню — по нему группа определяет, какой пункт выбран.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuRadioItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт меню недоступен: не реагирует на выбор и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"textValue":{"type":"string","description":"Текст пункта для поиска набором с клавиатуры (typeahead); задаётся, когда содержимое пункта не сводится к простой строке.","x-doc":{"group":"Control","type":"string"}},"value":{"type":"string","description":"Значение пункта радиогруппы меню — по нему группа определяет, какой пункт выбран.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["@radix-ui/react-menu"]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuShortcut","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuSub","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"defaultOpen":{"type":"boolean","description":"Начальное состояние подменю в неуправляемом режиме — дальше им управляет сам компонент.","x-doc":{"group":"State","type":"boolean"}},"onOpenChange":{"description":"Получает новое состояние подменю при каждой попытке раскрыть или свернуть его; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и подменю застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Управляемое состояние подменю: задаётся вместе с onOpenChange, иначе подменю перестаёт реагировать на наведение и клавиатуру.","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-context-menu"]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuSubContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["end","start"],"description":"Направление, в котором вложенное подменю раскрывается относительно своего пункта-якоря.","x-doc":{"group":"Behavior","type":"'end' | 'start'"}},"alignOffset":{"type":"number","description":"Сдвиг всплывающего слоя вдоль оси выравнивания, в пикселях от точки start/end.","x-doc":{"group":"Behavior","type":"number"}},"arrowPadding":{"type":"number","description":"Зона у углов слоя, в которую не заходит стрелка-указатель, в пикселях — чтобы стрелка не наезжала на скруглённые края.","x-doc":{"group":"Behavior","type":"number"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"avoidCollisions":{"type":"boolean","description":"Автоматически смещать и переворачивать слой, когда он не помещается в границах видимости; при выключении сторона и выравнивание соблюдаются буквально.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collisionBoundary":{"description":"Элемент или набор элементов, по границам которых считаются столкновения; по умолчанию границей служит вьюпорт.","x-doc":{"group":"Behavior","type":"Boundary | Boundary[]","kind":"readonly"}},"collisionPadding":{"description":"Отступ от границ столкновения, на котором слой уже считается упёршимся; задаётся общим числом пикселей или отдельно по сторонам.","x-doc":{"group":"Behavior","type":"number | Partial<Record<\\"top\\" | \\"bottom\\" | \\"left\\" | \\"right\\", number>>","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое меню смонтированным и в закрытом состоянии — для внешнего управления анимацией появления.","x-doc":{"group":"Behavior","type":"true"}},"hideWhenDetached":{"type":"boolean","description":"Скрывать слой, когда его якорь полностью ушёл из видимой области — например, прокрутился за пределы контейнера.","x-doc":{"group":"Behavior","type":"boolean"}},"loop":{"type":"boolean","default":false,"description":"Зацикливать навигацию с клавиатуры: с последнего пункта переход на первый и обратно.","x-doc":{"group":"Behavior","type":"boolean"}},"onEscapeKeyDown":{"description":"Нажатие Escape внутри подменю: следом закрывается всё меню целиком, а не только эта ветка; \`event.preventDefault()\` отменяет закрытие.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Уход фокуса за пределы подменю (возврат на его пункт-триггер не в счёт): следом подменю закрывается, а \`event.preventDefault()\` оставляет его открытым.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onInteractOutside":{"description":"Любое взаимодействие снаружи подменю: вызывается и при нажатии указателем, и при уходе фокуса — следом за \`onPointerDownOutside\`/\`onFocusOutside\`.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Нажатие указателем вне подменю, включая клики по родительскому меню: само подменю от этого не закрывается — закрытием распоряжается корневой слой меню.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}},"sideOffset":{"type":"number","description":"Зазор между слоем и якорем по выбранной стороне, в пикселях.","x-doc":{"group":"Behavior","type":"number"}},"sticky":{"type":"string","enum":["partial","always"],"description":"Поведение слоя при уходе якоря: \`partial\` — держаться, пока якорь виден хотя бы частично, \`always\` — оставаться в границах в любом случае.","x-doc":{"group":"Behavior","type":"'partial' | 'always'"}},"updatePositionStrategy":{"type":"string","enum":["optimized","always"],"description":"Частота пересчёта позиции: \`optimized\` — по значимым событиям (скролл, ресайз), \`always\` — на каждом кадре анимации, точнее и дороже.","x-doc":{"group":"Behavior","type":"'optimized' | 'always'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuSubTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт меню недоступен: не реагирует на выбор и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"inset":{"type":"boolean","description":"Добавляет левый отступ, выравнивающий текст по пунктам с иконкой или отметкой.","x-doc":{"group":"Behavior","type":"boolean"}},"textValue":{"type":"string","description":"Текст пункта для поиска набором с клавиатуры (typeahead); задаётся, когда содержимое пункта не сводится к простой строке.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"ContextMenu","palette":false},{"name":"ContextMenuTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Отключает перехват правого клика и long-press — область ведёт себя как обычный элемент, меню не открывается.","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"ContextMenu","palette":false},{"name":"DataGrid","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"settings":{"type":"object","description":"Конфигурация грида: dataProvider строк, описание колонок, размер страницы, ключ строки и режим выделения.","x-doc":{"group":"Options","type":"TableSettings<Row>","kind":"readonly"}}}},"palette":false},{"name":"DatePicker","role":"field","exportName":"DatePickerField","propsSchema":{"type":"object","properties":{"asChild":{"type":"boolean","description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс кнопки-триггера.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"dateFormat":{"type":"string","default":"PPP","description":"Формат отображения выбранной даты — токены date-fns (напр. dd.MM.yyyy).","x-doc":{"group":"Behavior","type":"string"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"placeholder":{"type":"string","default":"Выберите дату","description":"Текст кнопки-триггера, когда дата не выбрана.","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"size":{"type":"string","enum":["default","xs","sm","lg","icon","icon-xs","icon-sm","icon-lg"],"description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg'"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"variant":{"type":"string","enum":["link","default","destructive","outline","secondary","ghost"],"description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost'"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"Date | null","description":"Выбранная дата. null — ничего не выбрано."},"onChange":{"group":"Control","type":"(value: Date | null) => void","description":"Выбор даты в календаре. Повторный клик по выбранной дате сбрасывает в null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"Dialog","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Dialog","properties":{"defaultOpen":{"type":"boolean","description":"Открыт ли диалог изначально (неуправляемый режим).","x-doc":{"group":"State","type":"boolean"},"default":false},"modal":{"type":"boolean","description":"Модальный режим — блокирует взаимодействие с фоном.","x-doc":{"group":"Behavior","type":"boolean"},"default":true},"onOpenChange":{"description":"Получает новое состояние при каждой попытке открыть или закрыть; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и компонент застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Управляемое состояние раскрытия: пока проп передан, компонент не меняет его сам и ждёт обновления снаружи.","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-dialog"]}}},{"name":"DialogClose","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Dialog","palette":false},{"name":"DialogContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"deferPointerDownOutside":{"type":"boolean","description":"Откладывать реакцию на нажатие вне слоя до события click, чтобы внешний код успел остановить всплытие и отменить закрытие.","x-doc":{"group":"Behavior","type":"boolean"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в закрытом состоянии — нужно, когда появлением и скрытием управляет внешняя анимационная библиотека.","x-doc":{"group":"Behavior","type":"true"}},"onCloseAutoFocus":{"description":"Event handler called when auto-focusing on close. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onEscapeKeyDown":{"description":"Event handler called when the escape key is down. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Event handler called when the focus moves outside of the \`DismissableLayer\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onInteractOutside":{"description":"Event handler called when an interaction happens outside the \`DismissableLayer\`. Specifically, when a \`pointerdown\` event happens outside or focus moves outside of it. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)","kind":"readonly"}},"onOpenAutoFocus":{"description":"Event handler called when auto-focusing on open. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Event handler called when the a \`pointerdown\` event happens outside of the \`DismissableLayer\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}},"showCloseButton":{"type":"boolean","default":true,"description":"Показывать ли кнопку закрытия; значение по умолчанию зависит от части компонента.","x-doc":{"group":"Behavior","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Dialog","palette":false},{"name":"DialogDescription","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Dialog","palette":false},{"name":"DialogFooter","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"showCloseButton":{"type":"boolean","default":false,"description":"Показывать ли кнопку закрытия; значение по умолчанию зависит от части компонента.","x-doc":{"group":"Behavior","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Dialog","palette":false},{"name":"DialogHeader","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Dialog","palette":false},{"name":"DialogOverlay","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в закрытом состоянии — нужно, когда появлением и скрытием управляет внешняя анимационная библиотека.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Dialog","palette":false},{"name":"DialogPortal","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"container":{"type":"object","description":"DOM-узел, в который порталится содержимое; по умолчанию — document.body.","x-doc":{"group":"Behavior","type":"Element | DocumentFragment | null","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в закрытом состоянии — нужно, когда появлением и скрытием управляет внешняя анимационная библиотека.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-dialog"]}},"compoundParent":"Dialog","palette":false},{"name":"DialogTitle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Dialog","palette":false},{"name":"DialogTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Dialog","palette":false},{"name":"DirectionProvider","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление письма для всего поддерева: провайдер не рендерит DOM, а раздаёт контекст, из которого Radix-примитивы (меню, вкладки, слайдер, скролл-область) берут dir по умолчанию; перекрывается пропом direction.","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'"}},"direction":{"type":"string","enum":["ltr","rtl"],"description":"Псевдоним dir, добавленный в ките: если значение задано, оно побеждает dir и уходит в Radix-провайдер.","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-direction"]}},"palette":false},{"name":"Drawer","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Drawer","properties":{"activeSnapPoint":{"description":"Текущая точка привязки в управляемом режиме — одно из значений \`snapPoints\`.","x-doc":{"group":"State","type":"string | number | null","kind":"readonly"}},"autoFocus":{"type":"boolean","description":"Переводить фокус внутрь шторки при открытии; при \`false\` автофокус отменяется.","x-doc":{"group":"Behavior","type":"boolean"}},"closeThreshold":{"type":"number","default":0.25,"description":"Доля размера шторки (0–1), после протягивания которой свайп её закрывает.","x-doc":{"group":"Behavior","type":"number"}},"container":{"type":"object","description":"DOM-узел, в который портируется шторка; по умолчанию \`document.body\`.","x-doc":{"group":"Behavior","type":"HTMLElement | null","kind":"readonly"}},"defaultOpen":{"type":"boolean","default":false,"description":"Открыта ли шторка изначально (неуправляемый режим).","x-doc":{"group":"State","type":"boolean"}},"direction":{"type":"string","enum":["top","bottom","left","right"],"default":"bottom","description":"Сторона появления шторки.","x-doc":{"group":"Behavior","type":"'top' | 'bottom' | 'left' | 'right'","kind":"enum"}},"disablePreventScroll":{"type":"boolean","default":false,"description":"Блокировать прокрутку \`body\`, пока шторка открыта (имя противоположно смыслу: блокировку включает значение \`true\`).","x-doc":{"group":"Behavior","type":"boolean"}},"dismissible":{"type":"boolean","default":true,"description":"Можно ли закрыть свайпом/кликом по фону.","x-doc":{"group":"Behavior","type":"boolean"}},"fadeFromIndex":{"type":"number","description":"Индекс точки в \`snapPoints\`, начиная с которой проявляется затемнение фона.","x-doc":{"group":"Behavior","type":"number"}},"fixed":{"type":"boolean","description":"При появлении экранной клавиатуры не поднимать шторку, а уменьшать её высоту, оставляя контент прокручиваемым.","x-doc":{"group":"Behavior","type":"boolean"}},"handleOnly":{"type":"boolean","default":false,"description":"Тянуть только за «ручку», а не за весь контент.","x-doc":{"group":"Behavior","type":"boolean"}},"modal":{"type":"boolean","default":true,"description":"Модальный режим — блокирует взаимодействие с фоном.","x-doc":{"group":"Behavior","type":"boolean"}},"nested":{"type":"boolean","description":"Признак вложенной шторки: работу с позицией \`body\` берёт на себя корневая (проставляется автоматически в \`Drawer.NestedRoot\`).","x-doc":{"group":"Behavior","type":"boolean"}},"noBodyStyles":{"type":"boolean","description":"Не назначать \`body\` никаких стилей от vaul — если фоном и прокруткой управляет приложение.","x-doc":{"group":"Behavior","type":"boolean"}},"onClose":{"description":"Срабатывает в момент, когда шторка пошла закрываться изнутри (свайп за порог, Esc, клик по фону, DrawerClose) — до анимации выхода и раньше \`onOpenChange(false)\`; закрытие сменой пропа \`open\` снаружи его не вызывает.","x-doc":{"group":"Behavior","type":"(() => void)","kind":"readonly"}},"onOpenChange":{"description":"Получает новое состояние при каждом изменении изнутри — свайп, клик по фону, Esc, кнопка закрытия; в паре с \`open\` образует управляемый режим, но на смену самого пропа \`open\` снаружи не срабатывает.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"onRelease":{"description":"Отпускание указателя после перетаскивания: вторым аргументом приходит true, если шторка остаётся открытой, и false, если жест её закрывает; без начатого перетаскивания не вызывается.","x-doc":{"group":"Behavior","type":"((event: PointerEvent<HTMLDivElement>, open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Открыта ли шторка — управляемый режим, в паре с \`onOpenChange\`.","x-doc":{"group":"State","type":"boolean"}},"preventScrollRestoration":{"type":"boolean","description":"Не возвращать страницу к прежней позиции прокрутки после закрытия, если за это время сменился URL.","x-doc":{"group":"Behavior","type":"boolean"}},"repositionInputs":{"type":"boolean","default":"true when {@link snapPoints } is defined","description":"Сдвигать поля ввода из-под экранной клавиатуры вместо прокрутки к ним; \`false\` — поведение браузера по умолчанию.","x-doc":{"group":"Behavior","type":"boolean"}},"scrollLockTimeout":{"type":"number","default":"500ms","description":"Сколько миллисекунд после прокрутки контента шторку нельзя тянуть.","x-doc":{"group":"Behavior","type":"number"}},"setActiveSnapPoint":{"description":"Сеттер управляемой \`activeSnapPoint\`.","x-doc":{"group":"State","type":"((snapPoint: string | number | null) => void)","kind":"readonly"}},"setBackgroundColorOnScale":{"type":"boolean","default":true,"description":"Затемнять \`body\` при масштабировании подложки; \`false\` — оставить цвет страницы как есть.","x-doc":{"group":"Behavior","type":"boolean"}},"shouldScaleBackground":{"type":"boolean","description":"Отдалять контент страницы, пока шторка открыта; требует обёртки \`[data-vaul-drawer-wrapper]\`.","x-doc":{"group":"Behavior","type":"boolean"}},"snapPoints":{"type":"array","description":"Точки привязки по возрастанию видимой части: доли высоты экрана (\`0.5\`) либо px-значения (\`'320px'\`).","x-doc":{"group":"Options","type":"(string | number)[]","kind":"readonly"}},"snapToSequentialPoint":{"type":"boolean","default":false,"description":"Переходить только к соседней точке привязки, не пропуская промежуточные при быстром свайпе.","x-doc":{"group":"Behavior","type":"boolean"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["vaul"]}}},{"name":"DrawerClose","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Drawer","palette":false},{"name":"DrawerContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"deferPointerDownOutside":{"type":"boolean","description":"Откладывать реакцию на нажатие вне слоя до события click, чтобы внешний код успел остановить всплытие и отменить закрытие.","x-doc":{"group":"Behavior","type":"boolean"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в закрытом состоянии — нужно, когда появлением и скрытием управляет внешняя анимационная библиотека.","x-doc":{"group":"Behavior","type":"true"}},"onCloseAutoFocus":{"description":"Event handler called when auto-focusing on close. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onEscapeKeyDown":{"description":"Event handler called when the escape key is down. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Event handler called when the focus moves outside of the \`DismissableLayer\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onInteractOutside":{"description":"Event handler called when an interaction happens outside the \`DismissableLayer\`. Specifically, when a \`pointerdown\` event happens outside or focus moves outside of it. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)","kind":"readonly"}},"onOpenAutoFocus":{"description":"Event handler called when auto-focusing on open. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Event handler called when the a \`pointerdown\` event happens outside of the \`DismissableLayer\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Drawer","palette":false},{"name":"DrawerDescription","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Drawer","palette":false},{"name":"DrawerFooter","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Drawer","palette":false},{"name":"DrawerHeader","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Drawer","palette":false},{"name":"DrawerOverlay","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в закрытом состоянии — нужно, когда появлением и скрытием управляет внешняя анимационная библиотека.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Drawer","palette":false},{"name":"DrawerPortal","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"container":{"type":"object","description":"DOM-узел, в который порталится содержимое; по умолчанию — document.body.","x-doc":{"group":"Behavior","type":"Element | DocumentFragment | null","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в закрытом состоянии — нужно, когда появлением и скрытием управляет внешняя анимационная библиотека.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-dialog"]}},"compoundParent":"Drawer","palette":false},{"name":"DrawerTitle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Drawer","palette":false},{"name":"DrawerTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Drawer","palette":false},{"name":"DropdownMenu","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"DropdownMenu","properties":{"defaultOpen":{"type":"boolean","description":"Открыто ли меню изначально (неуправляемый режим).","x-doc":{"group":"State","type":"boolean"},"default":false},"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление чтения — влияет на раскладку и навигацию клавиатурой.","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'","kind":"enum"}},"modal":{"type":"boolean","description":"Модальный режим — блокирует взаимодействие с фоном, пока меню открыто.","x-doc":{"group":"Behavior","type":"boolean"},"default":true},"onOpenChange":{"description":"Получает новое состояние при каждой попытке открыть или закрыть; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и компонент застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Управляемое состояние открытости — имеет смысл только в паре с onOpenChange, иначе меню замирает в заданном положении.","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-dropdown-menu"]}}},{"name":"DropdownMenuCheckboxItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"checked":{"description":"Состояние отметки пункта-чекбокса; помимо включено/выключено допускает промежуточное \`indeterminate\`.","x-doc":{"group":"State","type":"CheckedState","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт меню недоступен: не реагирует на выбор и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"onCheckedChange":{"description":"Получает новое состояние отметки при выборе пункта-чекбокса; из промежуточного \`indeterminate\` переключение даёт \`true\`.","x-doc":{"group":"Behavior","type":"((checked: boolean) => void)","kind":"readonly"}},"textValue":{"type":"string","description":"Текст пункта для поиска набором с клавиатуры (typeahead); задаётся, когда содержимое пункта не сводится к простой строке.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["@radix-ui/react-menu"]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["center","end","start"],"description":"Выравнивание слоя вдоль выбранной стороны якоря — по началу, центру или концу.","x-doc":{"group":"Behavior","type":"'center' | 'end' | 'start'"}},"alignOffset":{"type":"number","description":"Сдвиг всплывающего слоя вдоль оси выравнивания, в пикселях от точки start/end.","x-doc":{"group":"Behavior","type":"number"}},"arrowPadding":{"type":"number","description":"Зона у углов слоя, в которую не заходит стрелка-указатель, в пикселях — чтобы стрелка не наезжала на скруглённые края.","x-doc":{"group":"Behavior","type":"number"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"avoidCollisions":{"type":"boolean","description":"Автоматически смещать и переворачивать слой, когда он не помещается в границах видимости; при выключении сторона и выравнивание соблюдаются буквально.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collisionBoundary":{"description":"Элемент или набор элементов, по границам которых считаются столкновения; по умолчанию границей служит вьюпорт.","x-doc":{"group":"Behavior","type":"Boundary | Boundary[]","kind":"readonly"}},"collisionPadding":{"description":"Отступ от границ столкновения, на котором слой уже считается упёршимся; задаётся общим числом пикселей или отдельно по сторонам.","x-doc":{"group":"Behavior","type":"number | Partial<Record<\\"top\\" | \\"bottom\\" | \\"left\\" | \\"right\\", number>>","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое меню смонтированным и в закрытом состоянии — для внешнего управления анимацией появления.","x-doc":{"group":"Behavior","type":"true"}},"hideWhenDetached":{"type":"boolean","description":"Скрывать слой, когда его якорь полностью ушёл из видимой области — например, прокрутился за пределы контейнера.","x-doc":{"group":"Behavior","type":"boolean"}},"loop":{"type":"boolean","default":false,"description":"Зацикливать навигацию с клавиатуры: с последнего пункта переход на первый и обратно.","x-doc":{"group":"Behavior","type":"boolean"}},"onCloseAutoFocus":{"description":"Event handler called when auto-focusing on close. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onEscapeKeyDown":{"description":"Нажатие Escape, когда меню — верхний слой: следом меню закрывается, а \`event.preventDefault()\` в обработчике оставляет его открытым.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Уход фокуса за пределы меню: следом меню закрывается, а \`event.preventDefault()\` в обработчике оставляет его открытым; в модальном режиме меню отменяет это закрытие само.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onInteractOutside":{"description":"Любое взаимодействие снаружи: вызывается и при нажатии указателем вне меню, и при уходе фокуса — следом за \`onPointerDownOutside\`/\`onFocusOutside\`; \`event.preventDefault()\` оставляет меню открытым.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Нажатие указателем вне меню: следом меню закрывается, а \`event.preventDefault()\` в обработчике оставляет его открытым.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}},"side":{"type":"string","enum":["top","bottom","left","right"],"description":"Предпочитаемая сторона якоря, с которой раскрывается слой; при нехватке места и включённом avoidCollisions сторона меняется автоматически.","x-doc":{"group":"Behavior","type":"'top' | 'bottom' | 'left' | 'right'"}},"sideOffset":{"type":"number","default":4,"description":"Зазор между слоем и якорем по выбранной стороне, в пикселях.","x-doc":{"group":"Behavior","type":"number"}},"sticky":{"type":"string","enum":["partial","always"],"description":"Поведение слоя при уходе якоря: \`partial\` — держаться, пока якорь виден хотя бы частично, \`always\` — оставаться в границах в любом случае.","x-doc":{"group":"Behavior","type":"'partial' | 'always'"}},"updatePositionStrategy":{"type":"string","enum":["optimized","always"],"description":"Частота пересчёта позиции: \`optimized\` — по значимым событиям (скролл, ресайз), \`always\` — на каждом кадре анимации, точнее и дороже.","x-doc":{"group":"Behavior","type":"'optimized' | 'always'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт меню недоступен: не реагирует на выбор и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"inset":{"type":"boolean","description":"Добавляет левый отступ, выравнивающий текст по пунктам с иконкой или отметкой.","x-doc":{"group":"Behavior","type":"boolean"}},"textValue":{"type":"string","description":"Текст пункта для поиска набором с клавиатуры (typeahead); задаётся, когда содержимое пункта не сводится к простой строке.","x-doc":{"group":"Control","type":"string"}},"variant":{"type":"string","enum":["default","destructive"],"default":"default","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'default' | 'destructive'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["@radix-ui/react-menu"]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuLabel","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"inset":{"type":"boolean","description":"Добавляет левый отступ, выравнивающий текст по пунктам с иконкой или отметкой.","x-doc":{"group":"Behavior","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuPortal","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"container":{"type":"object","description":"DOM-узел, в который порталится содержимое меню; по умолчанию — document.body.","x-doc":{"group":"Behavior","type":"Element | DocumentFragment | null","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое меню смонтированным и в закрытом состоянии — для внешнего управления анимацией появления.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-menu"]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuRadioGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"onValueChange":{"description":"Получает value выбранного пункта радиогруппы при каждом выборе; в паре с \`value\` образует управляемый режим.","x-doc":{"group":"Behavior","type":"((value: string) => void)","kind":"readonly"}},"value":{"type":"string","description":"Значение пункта радиогруппы меню — по нему группа определяет, какой пункт выбран.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuRadioItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт меню недоступен: не реагирует на выбор и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"textValue":{"type":"string","description":"Текст пункта для поиска набором с клавиатуры (typeahead); задаётся, когда содержимое пункта не сводится к простой строке.","x-doc":{"group":"Control","type":"string"}},"value":{"type":"string","description":"Значение пункта радиогруппы меню — по нему группа определяет, какой пункт выбран.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["@radix-ui/react-menu"]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuShortcut","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuSub","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"defaultOpen":{"type":"boolean","description":"Открыто ли подменю при первом рендере в неуправляемом режиме.","x-doc":{"group":"State","type":"boolean"}},"onOpenChange":{"description":"Получает новое состояние подменю при каждой попытке раскрыть или свернуть его; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и подменю застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Управляемое состояние открытости подменю — имеет смысл только в паре с onOpenChange.","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-dropdown-menu"]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuSubContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["end","start"],"description":"Направление, в котором вложенное подменю раскрывается относительно своего пункта-якоря.","x-doc":{"group":"Behavior","type":"'end' | 'start'"}},"alignOffset":{"type":"number","description":"Сдвиг всплывающего слоя вдоль оси выравнивания, в пикселях от точки start/end.","x-doc":{"group":"Behavior","type":"number"}},"arrowPadding":{"type":"number","description":"Зона у углов слоя, в которую не заходит стрелка-указатель, в пикселях — чтобы стрелка не наезжала на скруглённые края.","x-doc":{"group":"Behavior","type":"number"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"avoidCollisions":{"type":"boolean","description":"Автоматически смещать и переворачивать слой, когда он не помещается в границах видимости; при выключении сторона и выравнивание соблюдаются буквально.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collisionBoundary":{"description":"Элемент или набор элементов, по границам которых считаются столкновения; по умолчанию границей служит вьюпорт.","x-doc":{"group":"Behavior","type":"Boundary | Boundary[]","kind":"readonly"}},"collisionPadding":{"description":"Отступ от границ столкновения, на котором слой уже считается упёршимся; задаётся общим числом пикселей или отдельно по сторонам.","x-doc":{"group":"Behavior","type":"number | Partial<Record<\\"top\\" | \\"bottom\\" | \\"left\\" | \\"right\\", number>>","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое меню смонтированным и в закрытом состоянии — для внешнего управления анимацией появления.","x-doc":{"group":"Behavior","type":"true"}},"hideWhenDetached":{"type":"boolean","description":"Скрывать слой, когда его якорь полностью ушёл из видимой области — например, прокрутился за пределы контейнера.","x-doc":{"group":"Behavior","type":"boolean"}},"loop":{"type":"boolean","default":false,"description":"Зацикливать навигацию с клавиатуры: с последнего пункта переход на первый и обратно.","x-doc":{"group":"Behavior","type":"boolean"}},"onEscapeKeyDown":{"description":"Нажатие Escape внутри подменю: следом закрывается всё меню целиком, а не только эта ветка; \`event.preventDefault()\` отменяет закрытие.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Уход фокуса за пределы подменю (возврат на его пункт-триггер не в счёт): следом подменю закрывается, а \`event.preventDefault()\` оставляет его открытым.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onInteractOutside":{"description":"Любое взаимодействие снаружи подменю: вызывается и при нажатии указателем, и при уходе фокуса — следом за \`onPointerDownOutside\`/\`onFocusOutside\`.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Нажатие указателем вне подменю, включая клики по родительскому меню: само подменю от этого не закрывается — закрытием распоряжается корневой слой меню.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}},"sideOffset":{"type":"number","description":"Зазор между слоем и якорем по выбранной стороне, в пикселях.","x-doc":{"group":"Behavior","type":"number"}},"sticky":{"type":"string","enum":["partial","always"],"description":"Поведение слоя при уходе якоря: \`partial\` — держаться, пока якорь виден хотя бы частично, \`always\` — оставаться в границах в любом случае.","x-doc":{"group":"Behavior","type":"'partial' | 'always'"}},"updatePositionStrategy":{"type":"string","enum":["optimized","always"],"description":"Частота пересчёта позиции: \`optimized\` — по значимым событиям (скролл, ресайз), \`always\` — на каждом кадре анимации, точнее и дороже.","x-doc":{"group":"Behavior","type":"'optimized' | 'always'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuSubTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт меню недоступен: не реагирует на выбор и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"inset":{"type":"boolean","description":"Добавляет левый отступ, выравнивающий текст по пунктам с иконкой или отметкой.","x-doc":{"group":"Behavior","type":"boolean"}},"textValue":{"type":"string","description":"Текст пункта для поиска набором с клавиатуры (typeahead); задаётся, когда содержимое пункта не сводится к простой строке.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"DropdownMenu","palette":false},{"name":"DropdownMenuTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"DropdownMenu","palette":false},{"name":"Empty","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Empty","properties":{"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"EmptyContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Empty"},{"name":"EmptyDescription","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Empty"},{"name":"EmptyHeader","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Empty"},{"name":"EmptyMedia","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"variant":{"type":"string","enum":["default","icon"],"default":"default","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'default' | 'icon'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Empty"},{"name":"EmptyTitle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Empty"},{"name":"ExampleCard","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"bgColor":{"type":"string","default":"bg-card","description":"Tailwind-класс фона карточки. По умолчанию \`'bg-card'\` (адаптируется к теме).","x-doc":{"group":"Behavior","type":"string"}},"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"code":{"type":"string","description":"Текст исходного кода, копируемый в clipboard в режиме «код».","x-doc":{"group":"Behavior","type":"string"}},"description":{"type":"string","description":"Описание под заголовком.","x-doc":{"group":"Behavior","type":"string"}},"title":{"type":"string","description":"Заголовок блока — выводится над содержимым.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["DOMAttributes"],"packages":[]}},"palette":false},{"name":"Field","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"orientation":{"type":"string","enum":["vertical","horizontal","responsive"],"default":"vertical","description":"Ось раскладки: элементы выстраиваются по горизонтали или по вертикали.","x-doc":{"group":"Behavior","type":"'vertical' | 'horizontal' | 'responsive'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"FieldContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"FieldDescription","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"FieldError","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"errors":{"type":"array","description":"Список ошибок валидации: дубликаты по message схлопываются, одна ошибка рендерится строкой, несколько — маркированным списком; переданные children имеют приоритет, а при пустом списке компонент не рендерится вовсе.","x-doc":{"group":"Options","type":"({ message?: string | undefined; } | undefined)[]","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"FieldGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"FieldLabel","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","LabelHTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"FieldLegend","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"variant":{"type":"string","enum":["legend","label"],"default":"legend","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'legend' | 'label'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"FieldSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"FieldSet","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","FieldsetHTMLAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"FieldTitle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"FileUpload","role":"field","exportName":"FileUploadField","propsSchema":{"type":"object","properties":{"accept":{"type":"string","description":"Допустимые типы в синтаксисе нативного accept: \\".pdf\\", \\"image/png\\", \\"image/*\\", список через запятую. Применяется и к drag-and-drop.","x-doc":{"group":"Behavior","type":"string"}},"allowDrop":{"type":"boolean","default":true,"description":"Принимать drag-and-drop на зоне.","x-doc":{"group":"Behavior","type":"boolean"}},"allowPaste":{"type":"boolean","default":false,"description":"Принимать файлы из буфера обмена (paste на сфокусированной зоне).","x-doc":{"group":"Behavior","type":"boolean"}},"autoUpload":{"type":"boolean","default":true,"description":"Автозагрузка принятых файлов (действует при заданном uploader).","x-doc":{"group":"Behavior","type":"boolean"}},"capture":{"type":"string","enum":["user","environment"],"description":"Источник камеры для мобильного пикера (фронтальная/тыловая).","x-doc":{"group":"Behavior","type":"'user' | 'environment'"}},"className":{"type":"string","description":"Доп. CSS-класс контейнера.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"hint":{"type":"string","description":"Подсказка с ограничениями («PDF, до 5 МБ, максимум 3 файла»).","x-doc":{"group":"Textfield","type":"string"}},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Control","type":"string"}},"invalid":{"type":"boolean","description":"Явно пометить поле невалидным (подсветка рамки у dropzone/input). Под FormField не нужен: aria-invalid приходит от обёртки при ошибке валидации; button показывает ошибку текстом (FormField.Error).","x-doc":{"group":"State","type":"boolean"},"default":false},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"maxFiles":{"type":"number","description":"Максимум файлов в списке (действует при multiple).","x-doc":{"group":"Behavior","type":"number"},"minimum":1},"maxFileSize":{"type":"number","description":"Максимальный размер одного файла, байты.","x-doc":{"group":"Behavior","type":"number"},"minimum":0},"maxTotalFileSize":{"type":"number","description":"Максимальный суммарный размер всех файлов, байты.","x-doc":{"group":"Behavior","type":"number"},"minimum":0},"minFileSize":{"type":"number","description":"Минимальный размер одного файла, байты (1 — отсев пустых).","x-doc":{"group":"Behavior","type":"number"},"minimum":0},"multiple":{"type":"boolean","default":false,"description":"Несколько файлов. При false новая селекция заменяет текущую.","x-doc":{"group":"Behavior","type":"boolean"}},"onAccept":{"description":"Вызывается со списком файлов, прошедших отбор (до загрузки).","x-doc":{"group":"Behavior","type":"((files: File[]) => void)","kind":"readonly"}},"onFilesChange":{"description":"Вызывается на любое изменение внутреннего списка, включая прогресс и смену статусов.","x-doc":{"group":"Behavior","type":"((items: FileUploadItem[]) => void)","kind":"readonly"}},"onUploadError":{"description":"Вызывается, когда загрузка файла упала (uploader-режим).","x-doc":{"group":"Behavior","type":"((item: { key: string; status: \\"error\\"; file: File; error: ValidationError; progress?: number | undefined; }) => void)","kind":"readonly"}},"onUploadSuccess":{"description":"Вызывается после успешной загрузки файла (uploader-режим).","x-doc":{"group":"Behavior","type":"((item: { key: string; status: \\"uploaded\\"; file?: File | undefined; remote: RemoteFileRef; }) => void)","kind":"readonly"}},"placeholder":{"type":"string","default":"Выбрать файлы' (button)","description":"Видимый текст кнопки (button), зоны (dropzone) или пустого инпута (input). Подпись поля — отдельная конвенция label (рендерит FormField).","x-doc":{"group":"Textfield","type":"string"}},"preventDuplicates":{"type":"boolean","default":true,"description":"Отклонять дубликаты (совпадение имени и размера).","x-doc":{"group":"Behavior","type":"boolean"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"validate":{"description":"Кастомная проверка файла при отборе: возвращает список ошибок либо \`null\`, если файл принят.","x-doc":{"group":"Behavior","type":"((file: File, ctx: { existing: FileUploadItem[]; }) => ValidationError[] | null)","kind":"readonly"}},"variant":{"type":"string","enum":["button","dropzone","input"],"default":"button","description":"Представление: кнопка-триггер, зона drag-and-drop или компактный инпут с кнопкой-иконкой.","x-doc":{"group":"Control","type":"'button' | 'dropzone' | 'input'"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"File[] | RemoteFileRef[] | null","description":"Выбранные файлы. Без uploader — File[]; с uploader — сериализуемые дескрипторы загруженных. null — пусто."},"onChange":{"group":"Control","type":"(value: File[] | RemoteFileRef[] | null) => void","description":"Изменение списка; пустой список приходит как null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."},"uploader":{"group":"Behavior","type":"(file: File, ctx: { onProgress; signal }) => Promise<RemoteFileRef>","description":"Загрузчик immediate-режима. В JSON-форме недостижим: требует функцию — передаётся через реестр."},"onReject":{"group":"Behavior","type":"(rejections: FileRejection[]) => void","description":"Файлы, отклонённые отбором (в значение поля не попадают)."}},"x-inherits":{"react":["DOMAttributes"],"packages":[]}},"variantGroup":"FileUpload","variant":"Файлы"},{"name":"FileUploadAvatar","role":"field","exportName":"FileUploadAvatarField","propsSchema":{"type":"object","properties":{"accept":{"type":"string","description":"Допустимые типы в синтаксисе нативного accept.","x-doc":{"group":"Behavior","type":"string"},"default":"image/*"},"allowDrop":{"type":"boolean","default":true,"description":"Принимать изображение, брошенное на зону превью (включено по умолчанию).","x-doc":{"group":"Behavior","type":"boolean"}},"autoUpload":{"type":"boolean","default":true,"description":"Начинать загрузку сразу после отбора файлов (uploader-режим); при \`false\` загрузку инициирует консумент — по умолчанию включено.","x-doc":{"group":"Behavior","type":"boolean"}},"capture":{"type":"string","enum":["user","environment"],"description":"Источник камеры для мобильного пикера.","x-doc":{"group":"Behavior","type":"'user' | 'environment'"}},"className":{"type":"string","description":"Доп. CSS-класс контейнера.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Control","type":"string"}},"invalid":{"type":"boolean","description":"Явно пометить поле невалидным (подсветка рамки зоны). Под FormField не нужен: aria-invalid приходит от обёртки при ошибке валидации.","x-doc":{"group":"State","type":"boolean"},"default":false},"label":{"type":"string","default":"Загрузить изображение","description":"Доступное имя зоны (aria-label).","x-doc":{"group":"Textfield","type":"string"}},"maxFileSize":{"type":"number","description":"Максимальный размер файла, байты.","x-doc":{"group":"Behavior","type":"number"},"minimum":0},"maxTotalFileSize":{"type":"number","description":"Максимальный суммарный размер файлов в байтах; при single-выборе совпадает с \`maxFileSize\`.","x-doc":{"group":"Behavior","type":"number"}},"minFileSize":{"type":"number","description":"Минимальный размер изображения в байтах (\`1\` отсеивает пустые файлы).","x-doc":{"group":"Behavior","type":"number"}},"onAccept":{"description":"Вызывается с принятым файлом (до загрузки).","x-doc":{"group":"Behavior","type":"((files: File[]) => void)","kind":"readonly"}},"onFilesChange":{"description":"Вызывается на любое изменение внутреннего списка, включая прогресс и смену статусов.","x-doc":{"group":"Behavior","type":"((items: FileUploadItem[]) => void)","kind":"readonly"}},"onUploadError":{"description":"Вызывается, когда загрузка изображения упала (uploader-режим).","x-doc":{"group":"Behavior","type":"((item: { key: string; status: \\"error\\"; file: File; error: ValidationError; progress?: number | undefined; }) => void)","kind":"readonly"}},"onUploadSuccess":{"description":"Вызывается после успешной загрузки изображения (uploader-режим).","x-doc":{"group":"Behavior","type":"((item: { key: string; status: \\"uploaded\\"; file?: File | undefined; remote: RemoteFileRef; }) => void)","kind":"readonly"}},"preventDuplicates":{"type":"boolean","default":true,"description":"Отклонять повторный выбор того же файла (имя + размер); при single-выборе почти не проявляется — новый файл и так заменяет прежний.","x-doc":{"group":"Behavior","type":"boolean"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"shape":{"type":"string","enum":["circle","square"],"default":"circle","description":"Форма превью.","x-doc":{"group":"Control","type":"'circle' | 'square'"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"validate":{"description":"Кастомная проверка изображения при отборе: возвращает список ошибок либо \`null\`, если файл принят.","x-doc":{"group":"Behavior","type":"((file: File, ctx: { existing: FileUploadItem[]; }) => ValidationError[] | null)","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"File | RemoteFileRef | null","description":"Выбранное изображение (single). null — пусто."},"onChange":{"group":"Control","type":"(value: File | RemoteFileRef | null) => void","description":"Выбор/замена/удаление изображения."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."},"uploader":{"group":"Behavior","type":"(file: File, ctx: { onProgress; signal }) => Promise<RemoteFileRef>","description":"Загрузчик immediate-режима. В JSON-форме недостижим: требует функцию — передаётся через реестр."},"onReject":{"group":"Behavior","type":"(rejections: FileRejection[]) => void","description":"Файлы, отклонённые отбором."}},"x-inherits":{"react":["DOMAttributes"],"packages":[]}},"variantGroup":"FileUpload","variant":"Аватар"},{"name":"FileUploadBase","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"accept":{"type":"string","description":"Допустимые типы файлов в синтаксисе нативного \`accept\` (\`'image/*,.pdf'\`) — работают и в пикере, и при drag-and-drop/paste.","x-doc":{"group":"Behavior","type":"string"}},"allowDrop":{"type":"boolean","default":true,"description":"Принимать файлы, брошенные на зону; вариант \`button\` зоны не рендерит — настройка на него не влияет.","x-doc":{"group":"Behavior","type":"boolean"}},"allowPaste":{"type":"boolean","default":false,"description":"Принимать файлы из буфера обмена по Ctrl+V; вариант \`button\` зоны не рендерит — настройка на него не влияет.","x-doc":{"group":"Behavior","type":"boolean"}},"autoUpload":{"type":"boolean","default":true,"description":"Начинать загрузку сразу после отбора файлов (uploader-режим); при \`false\` загрузку инициирует консумент — по умолчанию включено.","x-doc":{"group":"Behavior","type":"boolean"}},"capture":{"type":"string","enum":["user","environment"],"description":"Какую камеру открывает мобильный пикер: \`user\` — фронтальную, \`environment\` — тыловую.","x-doc":{"group":"Behavior","type":"'user' | 'environment'"}},"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Поле недоступно: пикер не открывается, drop/paste игнорируются.","x-doc":{"group":"Behavior","type":"boolean"}},"hint":{"type":"string","description":"Подсказка справа от кнопки с ограничениями («PDF, до 5 МБ, максимум 3 файла»).","x-doc":{"group":"Textfield","type":"string"}},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Control","type":"string"}},"invalid":{"type":"boolean","description":"Явно пометить поле невалидным; вариант \`button\` внешний вид не меняет — ошибку показывает FormField.Error.","x-doc":{"group":"State","type":"boolean"}},"label":{"type":"string","description":"Текстовая подпись рядом с контролом.","x-doc":{"group":"Control","type":"string"}},"maxFiles":{"type":"number","description":"Максимум файлов в списке; действует только при \`multiple\`, лишние отклоняются с кодом \`maxFiles\`.","x-doc":{"group":"Behavior","type":"number"}},"maxFileSize":{"type":"number","description":"Максимальный размер одного файла в байтах.","x-doc":{"group":"Behavior","type":"number"}},"maxTotalFileSize":{"type":"number","description":"Максимальный суммарный размер всех файлов в байтах.","x-doc":{"group":"Behavior","type":"number"}},"minFileSize":{"type":"number","description":"Минимальный размер одного файла в байтах (\`1\` отсеивает пустые).","x-doc":{"group":"Behavior","type":"number"}},"multiple":{"type":"boolean","default":false,"description":"Разрешить несколько файлов; при \`false\` новый выбор заменяет текущий, а лимит списка — один файл.","x-doc":{"group":"Behavior","type":"boolean"}},"onAccept":{"description":"Вызывается со списком файлов, прошедших отбор (до загрузки).","x-doc":{"group":"Behavior","type":"((files: File[]) => void)","kind":"readonly"}},"onFilesChange":{"description":"Вызывается на любое изменение внутреннего списка, включая прогресс и смену статусов.","x-doc":{"group":"Behavior","type":"((items: FileUploadItem[]) => void)","kind":"readonly"}},"onReject":{"description":"Вызывается со списком файлов, отклонённых отбором — в значение поля они не попадают.","x-doc":{"group":"Behavior","type":"((rejections: FileRejection[]) => void)","kind":"readonly"}},"onUploadError":{"description":"Вызывается, когда загрузка файла упала (uploader-режим).","x-doc":{"group":"Behavior","type":"((item: { key: string; status: \\"error\\"; file: File; error: ValidationError; progress?: number | undefined; }) => void)","kind":"readonly"}},"onUploadSuccess":{"description":"Вызывается после успешной загрузки файла (uploader-режим).","x-doc":{"group":"Behavior","type":"((item: { key: string; status: \\"uploaded\\"; file?: File | undefined; remote: RemoteFileRef; }) => void)","kind":"readonly"}},"placeholder":{"type":"string","default":"Выбрать файлы' (button)","description":"Подсказка, видимая пока значение не задано.","x-doc":{"group":"Textfield","type":"string"}},"preventDuplicates":{"type":"boolean","default":true,"description":"Отклонять повторный выбор того же файла (совпадение имени и размера) — включено по умолчанию.","x-doc":{"group":"Behavior","type":"boolean"}},"uploader":{"description":"Загрузчик immediate-режима: задан — файлы уходят на сервер при выборе и значением поля становятся дескрипторы \`RemoteFileRef\`; не задан — значение остаётся \`File[]\`, а отправка на консументе.","x-doc":{"group":"Behavior","type":"FileUploadUploader","kind":"readonly"}},"validate":{"description":"Кастомная проверка файла при отборе: возвращает список ошибок либо \`null\`, если файл принят.","x-doc":{"group":"Behavior","type":"((file: File, ctx: { existing: FileUploadItem[]; }) => ValidationError[] | null)","kind":"readonly"}},"value":{"type":"array","description":"Текущее значение поля.","x-doc":{"group":"Behavior","type":"FileUploadValue"}}},"x-inherits":{"react":["DOMAttributes"],"packages":[]}},"compoundParent":"FileUpload","palette":false},{"name":"FileUploadDropzone","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"accept":{"type":"string","description":"Допустимые типы файлов в синтаксисе нативного \`accept\` (\`'image/*,.pdf'\`) — работают и в пикере, и при drag-and-drop/paste.","x-doc":{"group":"Behavior","type":"string"}},"allowDrop":{"type":"boolean","default":true,"description":"Принимать файлы, брошенные на зону (включено по умолчанию).","x-doc":{"group":"Behavior","type":"boolean"}},"allowPaste":{"type":"boolean","default":false,"description":"Принимать файлы из буфера обмена по Ctrl+V, когда зона в фокусе (по умолчанию выключено).","x-doc":{"group":"Behavior","type":"boolean"}},"autoUpload":{"type":"boolean","default":true,"description":"Начинать загрузку сразу после отбора файлов (uploader-режим); при \`false\` загрузку инициирует консумент — по умолчанию включено.","x-doc":{"group":"Behavior","type":"boolean"}},"capture":{"type":"string","enum":["user","environment"],"description":"Какую камеру открывает мобильный пикер: \`user\` — фронтальную, \`environment\` — тыловую.","x-doc":{"group":"Behavior","type":"'user' | 'environment'"}},"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Поле недоступно: пикер не открывается, drop/paste игнорируются.","x-doc":{"group":"Behavior","type":"boolean"}},"hint":{"type":"string","description":"Подсказка внутри зоны, под основным текстом — ограничения по типам и размеру.","x-doc":{"group":"Textfield","type":"string"}},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Control","type":"string"}},"invalid":{"type":"boolean","description":"Явно подсветить рамку зоны как невалидную; под FormField не нужен — \`aria-invalid\` приходит от обёртки при ошибке валидации.","x-doc":{"group":"State","type":"boolean"}},"label":{"type":"string","description":"Текстовая подпись рядом с контролом.","x-doc":{"group":"Control","type":"string"}},"maxFiles":{"type":"number","description":"Максимум файлов в списке; действует только при \`multiple\`, лишние отклоняются с кодом \`maxFiles\`.","x-doc":{"group":"Behavior","type":"number"}},"maxFileSize":{"type":"number","description":"Максимальный размер одного файла в байтах.","x-doc":{"group":"Behavior","type":"number"}},"maxTotalFileSize":{"type":"number","description":"Максимальный суммарный размер всех файлов в байтах.","x-doc":{"group":"Behavior","type":"number"}},"minFileSize":{"type":"number","description":"Минимальный размер одного файла в байтах (\`1\` отсеивает пустые).","x-doc":{"group":"Behavior","type":"number"}},"multiple":{"type":"boolean","default":false,"description":"Разрешить несколько файлов; при \`false\` новый выбор заменяет текущий, а лимит списка — один файл.","x-doc":{"group":"Behavior","type":"boolean"}},"onAccept":{"description":"Вызывается со списком файлов, прошедших отбор (до загрузки).","x-doc":{"group":"Behavior","type":"((files: File[]) => void)","kind":"readonly"}},"onFilesChange":{"description":"Вызывается на любое изменение внутреннего списка, включая прогресс и смену статусов.","x-doc":{"group":"Behavior","type":"((items: FileUploadItem[]) => void)","kind":"readonly"}},"onReject":{"description":"Вызывается со списком файлов, отклонённых отбором — в значение поля они не попадают.","x-doc":{"group":"Behavior","type":"((rejections: FileRejection[]) => void)","kind":"readonly"}},"onUploadError":{"description":"Вызывается, когда загрузка файла упала (uploader-режим).","x-doc":{"group":"Behavior","type":"((item: { key: string; status: \\"error\\"; file: File; error: ValidationError; progress?: number | undefined; }) => void)","kind":"readonly"}},"onUploadSuccess":{"description":"Вызывается после успешной загрузки файла (uploader-режим).","x-doc":{"group":"Behavior","type":"((item: { key: string; status: \\"uploaded\\"; file?: File | undefined; remote: RemoteFileRef; }) => void)","kind":"readonly"}},"placeholder":{"type":"string","default":"Выбрать файлы' (button)","description":"Подсказка, видимая пока значение не задано.","x-doc":{"group":"Textfield","type":"string"}},"preventDuplicates":{"type":"boolean","default":true,"description":"Отклонять повторный выбор того же файла (совпадение имени и размера) — включено по умолчанию.","x-doc":{"group":"Behavior","type":"boolean"}},"uploader":{"description":"Загрузчик immediate-режима: задан — файлы уходят на сервер при выборе и значением поля становятся дескрипторы \`RemoteFileRef\`; не задан — значение остаётся \`File[]\`, а отправка на консументе.","x-doc":{"group":"Behavior","type":"FileUploadUploader","kind":"readonly"}},"validate":{"description":"Кастомная проверка файла при отборе: возвращает список ошибок либо \`null\`, если файл принят.","x-doc":{"group":"Behavior","type":"((file: File, ctx: { existing: FileUploadItem[]; }) => ValidationError[] | null)","kind":"readonly"}},"value":{"type":"array","description":"Текущее значение поля.","x-doc":{"group":"Behavior","type":"FileUploadValue"}}},"x-inherits":{"react":["DOMAttributes"],"packages":[]}},"compoundParent":"FileUpload","palette":false},{"name":"FileUploadInput","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"accept":{"type":"string","description":"Допустимые типы файлов в синтаксисе нативного \`accept\` (\`'image/*,.pdf'\`) — работают и в пикере, и при drag-and-drop/paste.","x-doc":{"group":"Behavior","type":"string"}},"allowDrop":{"type":"boolean","default":true,"description":"Принимать файлы, брошенные на поле (включено по умолчанию).","x-doc":{"group":"Behavior","type":"boolean"}},"allowPaste":{"type":"boolean","default":false,"description":"Принимать файлы из буфера обмена по Ctrl+V, когда поле в фокусе (по умолчанию выключено).","x-doc":{"group":"Behavior","type":"boolean"}},"autoUpload":{"type":"boolean","default":true,"description":"Начинать загрузку сразу после отбора файлов (uploader-режим); при \`false\` загрузку инициирует консумент — по умолчанию включено.","x-doc":{"group":"Behavior","type":"boolean"}},"capture":{"type":"string","enum":["user","environment"],"description":"Какую камеру открывает мобильный пикер: \`user\` — фронтальную, \`environment\` — тыловую.","x-doc":{"group":"Behavior","type":"'user' | 'environment'"}},"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Поле недоступно: пикер не открывается, drop/paste игнорируются.","x-doc":{"group":"Behavior","type":"boolean"}},"hint":{"type":"string","description":"Подсказка под полем с ограничениями по типам и размеру.","x-doc":{"group":"Textfield","type":"string"}},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Control","type":"string"}},"invalid":{"type":"boolean","description":"Явно подсветить рамку поля как невалидную; под FormField не нужен — \`aria-invalid\` приходит от обёртки при ошибке валидации.","x-doc":{"group":"State","type":"boolean"}},"label":{"type":"string","description":"Текстовая подпись рядом с контролом.","x-doc":{"group":"Control","type":"string"}},"maxFiles":{"type":"number","description":"Максимум файлов в списке; действует только при \`multiple\`, лишние отклоняются с кодом \`maxFiles\`.","x-doc":{"group":"Behavior","type":"number"}},"maxFileSize":{"type":"number","description":"Максимальный размер одного файла в байтах.","x-doc":{"group":"Behavior","type":"number"}},"maxTotalFileSize":{"type":"number","description":"Максимальный суммарный размер всех файлов в байтах.","x-doc":{"group":"Behavior","type":"number"}},"minFileSize":{"type":"number","description":"Минимальный размер одного файла в байтах (\`1\` отсеивает пустые).","x-doc":{"group":"Behavior","type":"number"}},"multiple":{"type":"boolean","default":false,"description":"Разрешить несколько файлов; при \`false\` новый выбор заменяет текущий, а лимит списка — один файл.","x-doc":{"group":"Behavior","type":"boolean"}},"onAccept":{"description":"Вызывается со списком файлов, прошедших отбор (до загрузки).","x-doc":{"group":"Behavior","type":"((files: File[]) => void)","kind":"readonly"}},"onFilesChange":{"description":"Вызывается на любое изменение внутреннего списка, включая прогресс и смену статусов.","x-doc":{"group":"Behavior","type":"((items: FileUploadItem[]) => void)","kind":"readonly"}},"onReject":{"description":"Вызывается со списком файлов, отклонённых отбором — в значение поля они не попадают.","x-doc":{"group":"Behavior","type":"((rejections: FileRejection[]) => void)","kind":"readonly"}},"onUploadError":{"description":"Вызывается, когда загрузка файла упала (uploader-режим).","x-doc":{"group":"Behavior","type":"((item: { key: string; status: \\"error\\"; file: File; error: ValidationError; progress?: number | undefined; }) => void)","kind":"readonly"}},"onUploadSuccess":{"description":"Вызывается после успешной загрузки файла (uploader-режим).","x-doc":{"group":"Behavior","type":"((item: { key: string; status: \\"uploaded\\"; file?: File | undefined; remote: RemoteFileRef; }) => void)","kind":"readonly"}},"placeholder":{"type":"string","default":"Выбрать файлы' (button)","description":"Подсказка, видимая пока значение не задано.","x-doc":{"group":"Textfield","type":"string"}},"preventDuplicates":{"type":"boolean","default":true,"description":"Отклонять повторный выбор того же файла (совпадение имени и размера) — включено по умолчанию.","x-doc":{"group":"Behavior","type":"boolean"}},"uploader":{"description":"Загрузчик immediate-режима: задан — файлы уходят на сервер при выборе и значением поля становятся дескрипторы \`RemoteFileRef\`; не задан — значение остаётся \`File[]\`, а отправка на консументе.","x-doc":{"group":"Behavior","type":"FileUploadUploader","kind":"readonly"}},"validate":{"description":"Кастомная проверка файла при отборе: возвращает список ошибок либо \`null\`, если файл принят.","x-doc":{"group":"Behavior","type":"((file: File, ctx: { existing: FileUploadItem[]; }) => ValidationError[] | null)","kind":"readonly"}},"value":{"type":"array","description":"Текущее значение поля.","x-doc":{"group":"Behavior","type":"FileUploadValue"}}},"x-inherits":{"react":["DOMAttributes"],"packages":[]}},"compoundParent":"FileUpload","palette":false},{"name":"FileUploadItemList","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}}},"compoundParent":"FileUpload","palette":false},{"name":"FormArray","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"addButtonLabel":{"type":"string","default":"+ Добавить","description":"Текст кнопки добавления. По умолчанию \`'+ Добавить'\`.","x-doc":{"group":"Behavior","type":"string"}},"cardClassName":{"type":"string","default":"mb-4 p-4 bg-card text-card-foreground rounded border","description":"Класс card-обёртки элемента.","x-doc":{"group":"Behavior","type":"string"}},"className":{"type":"string","default":"space-y-3 mt-2","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"emptyMessage":{"type":"string","description":"Сообщение пустого состояния.","x-doc":{"group":"Behavior","type":"string"}},"emptyMessageHint":{"type":"string","description":"Подсказка под пустым состоянием.","x-doc":{"group":"Behavior","type":"string"}},"itemLabel":{"description":"Метка элемента — префикс-строка или функция \`(model, index) => string\`.","x-doc":{"group":"Behavior","type":"string | ((model: any, index: number) => string)","kind":"readonly"}},"items":{"type":"array","description":"Отрендеренные элементы массива (инъектится рендерером).","x-doc":{"group":"Behavior","type":"ArrayItemSlot[]"}},"onAdd":{"description":"Добавить элемент (инъектится рендерером; значение резолвится из \`initialValue\` узла).","x-doc":{"group":"Behavior","type":"(() => void)","kind":"readonly"}},"onMove":{"description":"Переместить элемент (инъектится рендерером). Нужен при \`reorderable\`.","x-doc":{"group":"Behavior","type":"((from: number, to: number) => void)","kind":"readonly"}},"onRemove":{"description":"Удалить элемент по индексу (инъектится рендерером).","x-doc":{"group":"Behavior","type":"((index: number) => void)","kind":"readonly"}},"removeButtonLabel":{"type":"string","default":"Удалить","description":"Текст кнопки удаления. По умолчанию \`'Удалить'\`.","x-doc":{"group":"Behavior","type":"string"}},"reorderable":{"type":"boolean","default":false,"description":"Кнопки ↑/↓ перестановки. По умолчанию \`false\`.","x-doc":{"group":"Behavior","type":"boolean"}},"showRemoveOnSingle":{"type":"boolean","default":false,"description":"Показывать «Удалить» когда остался один элемент. По умолчанию \`false\`.","x-doc":{"group":"Behavior","type":"boolean"}},"title":{"type":"string","description":"Заголовок блока — выводится над содержимым.","x-doc":{"group":"Control","type":"string"}}}},"palette":false},{"name":"FormArraySection","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"addButtonLabel":{"type":"string","default":"+ Добавить","description":"Текст кнопки добавления. По умолчанию \`'+ Добавить'\`.","x-doc":{"group":"Behavior","type":"string"}},"cardClassName":{"type":"string","default":"mb-4 p-4 bg-card text-card-foreground rounded border","description":"Класс card-обёртки каждого item.","x-doc":{"group":"Behavior","type":"string"}},"className":{"type":"string","default":"space-y-3 mt-2","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"control":{"description":"Уже-резолвленный ArrayNode/ModelArrayNode/FormArrayProxy.","x-doc":{"group":"Behavior","type":"ArrayNode<T> | FormArrayProxy<T>","kind":"readonly"}},"emptyMessage":{"type":"string","description":"Сообщение пустого состояния.","x-doc":{"group":"Behavior","type":"string"}},"emptyMessageHint":{"type":"string","description":"Подсказка под пустым состоянием.","x-doc":{"group":"Behavior","type":"string"}},"fieldWrapper":{"description":"Field wrapper для дочерних полей. Авто-инъектится \`RenderNodeComponent\`; переопределить для использования другого wrapper в этой секции.","x-doc":{"group":"Behavior","type":"ComponentType<FieldWrapperProps>","kind":"readonly"}},"form":{"description":"FormProxy. Авто-инъектится \`RenderNodeComponent\` через \`__selfManagedChildren\` маркер. Передавать вручную — только при использовании вне стандартного render-tree.","x-doc":{"group":"Behavior","type":"FormProxy<unknown>","kind":"readonly"}},"hasItems":{"type":"boolean","description":"Условие видимости секции. Если \`false\` — секция полностью скрыта. Удобно для toggle-чекбоксов вида «У меня есть имущество».","x-doc":{"group":"Behavior","type":"boolean"}},"initialValue":{"type":"object","description":"Plain-leaf значения для новых items (передаётся в \`FormArray.AddButton\`). НЕ FieldConfig — только примитивы по форме item-типа \`T\`. Тип \`Partial<T>\` — TS проверит, что initialValue совместим с типом элемента. Передавайте generic явно для лучшей type-safety: \`<FormArraySection<PropertyItem> initialValue={createPropertyItem()} ...>\`.","x-doc":{"group":"Behavior","type":"Partial<T>"}},"itemComponent":{"description":"React FC получает \`control: FormProxy<T>\` для каждого элемента.","x-doc":{"group":"Behavior","type":"ComponentType<{ control: FormProxy<T>; }>","kind":"readonly"}},"itemLabel":{"description":"Метка для каждого item — строка-префикс или функция.","x-doc":{"group":"Behavior","type":"string | ((control: FormProxy<T>, index: number) => string)","kind":"readonly"}},"maxItems":{"type":"number","description":"Максимум items — AddButton отключается при достижении.","x-doc":{"group":"Behavior","type":"number"}},"removeButtonLabel":{"type":"string","default":"Удалить","description":"Текст кнопки удаления. По умолчанию \`'Удалить'\`.","x-doc":{"group":"Behavior","type":"string"}},"reorderable":{"type":"boolean","default":false,"description":"Показывать кнопки ↑/↓ для перестановки элементов. По умолчанию \`false\` (обратная совместимость — существующие массивы не меняются).","x-doc":{"group":"Behavior","type":"boolean"}},"showRemoveOnSingle":{"type":"boolean","default":false,"description":"Показывать «Удалить» когда остался один элемент. По умолчанию \`false\`.","x-doc":{"group":"Behavior","type":"boolean"}},"title":{"type":"string","description":"Заголовок блока — выводится над содержимым.","x-doc":{"group":"Control","type":"string"}}}},"palette":false},{"name":"FormField","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"control":{"type":"object","description":"Поле формы. Из него берутся \`component\` (тип контрола), \`componentProps\`, \`value\`, \`error\`, \`pending\`, \`setValue\`, \`blur\`. Контрол инстанцируется автоматически через \`CdkFormField.Control\`.","x-doc":{"group":"Behavior","type":"FieldNode<any>"}},"testId":{"type":"string","description":"Префикс \`data-testid\` (\`field-<id>\`, \`label-<id>\`, \`input-<id>\`, \`error-<id>\`). Если опущен — берётся \`componentProps.testId\`, иначе \`'unknown'\`.","x-doc":{"group":"Behavior","type":"string"}}},"x-inherits":{"react":["DOMAttributes"],"packages":[]}},"palette":false},{"name":"FormWizard","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"config":{"type":"object","description":"Step configuration (validation callbacks)","x-doc":{"group":"Behavior","type":"FormWizardConfig"}},"form":{"description":"Form instance","x-doc":{"group":"Behavior","type":"FormProxy<T>","kind":"readonly"}},"onStepChange":{"description":"Callback when step changes","x-doc":{"group":"Behavior","type":"((step: number) => void)","kind":"readonly"}},"renderStepBody":{"description":"Стратегия отрисовки нестандартного \`body\`. Сам ui-kit умеет только ReactNode и ComponentType; всё остальное (например узел RenderSchema) отдаётся сюда — так компонент не импортирует рендерер, а получает его как зависимость.","x-doc":{"group":"Behavior","type":"((body: TBody, form: FormProxy<T>) => ReactNode)","kind":"readonly"}},"scrollToTop":{"type":"boolean","description":"Scroll to top on step change","x-doc":{"group":"Behavior","type":"boolean"}},"steps":{"type":"array","description":"Декларативный список шагов (см. {@link FormWizardStep}). Порядок = порядок навигации.","x-doc":{"group":"Behavior","type":"FormWizardStep<T, TBody>[]"}}},"x-inherits":{"react":["DOMAttributes"],"packages":[]}},"palette":false},{"name":"FormWizardActions","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"isFirstStep":{"type":"boolean","description":"Whether current step is the first step","x-doc":{"group":"Behavior","type":"boolean"}},"isLastStep":{"type":"boolean","description":"Whether current step is the last step","x-doc":{"group":"Behavior","type":"boolean"}},"isSubmitting":{"type":"boolean","description":"Whether form is submitting","x-doc":{"group":"Behavior","type":"boolean"}},"isValidating":{"type":"boolean","description":"Whether validation is in progress","x-doc":{"group":"Behavior","type":"boolean"}},"next":{"type":"object","description":"Props for the \\"Next\\" button","x-doc":{"group":"Behavior","type":"FormWizardButtonProps"}},"nextLabel":{"type":"string","default":"Далее →","description":"Подпись кнопки «Далее». По умолчанию \`'Далее →'\`.","x-doc":{"group":"Behavior","type":"string"}},"prev":{"type":"object","description":"Props for the \\"Previous\\" button","x-doc":{"group":"Behavior","type":"FormWizardButtonProps"}},"prevLabel":{"type":"string","default":"← Назад","description":"Подпись кнопки «Назад». По умолчанию \`'← Назад'\`.","x-doc":{"group":"Behavior","type":"string"}},"submit":{"type":"object","description":"Props for the \\"Submit\\" button","x-doc":{"group":"Behavior","type":"FormWizardSubmitRenderProps"}},"submitLabel":{"type":"string","default":"Отправить заявку","description":"Подпись кнопки отправки на последнем шаге. По умолчанию \`'Отправить заявку'\`.","x-doc":{"group":"Behavior","type":"string"}},"submittingLabel":{"type":"string","default":"Отправка...","description":"Подпись кнопки отправки во время submit. По умолчанию \`'Отправка...'\`.","x-doc":{"group":"Behavior","type":"string"}},"validatingLabel":{"type":"string","default":"Проверка...","description":"Подпись кнопки «Далее» во время валидации шага. По умолчанию \`'Проверка...'\`.","x-doc":{"group":"Behavior","type":"string"}}}},"palette":false},{"name":"FormWizardProgress","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"completedCount":{"type":"number","description":"Number of completed steps","x-doc":{"group":"Behavior","type":"number"}},"current":{"type":"number","description":"Current step number (1-based)","x-doc":{"group":"Behavior","type":"number"}},"format":{"description":"Кастомный форматтер строки прогресса. Получает \`{ current, total, percent }\`. По умолчанию — \`'Шаг N из M • X% завершено'\`.","x-doc":{"group":"Behavior","type":"((props: FormWizardProgressRenderProps) => ReactNode)","kind":"readonly"}},"isFirstStep":{"type":"boolean","description":"Whether on first step","x-doc":{"group":"Behavior","type":"boolean"}},"isLastStep":{"type":"boolean","description":"Whether on last step","x-doc":{"group":"Behavior","type":"boolean"}},"percent":{"type":"number","description":"Completion percentage (0-100)","x-doc":{"group":"Behavior","type":"number"}},"total":{"type":"number","description":"Total number of steps","x-doc":{"group":"Behavior","type":"number"}}}},"palette":false},{"name":"HoverCard","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"HoverCard","properties":{"closeDelay":{"type":"number","description":"Задержка (мс) перед закрытием при уходе курсора.","x-doc":{"group":"Behavior","type":"number"},"default":300},"defaultOpen":{"type":"boolean","description":"Открыта ли карточка изначально (неуправляемый режим).","x-doc":{"group":"State","type":"boolean"},"default":false},"onOpenChange":{"description":"Получает новое состояние при каждой попытке открыть или закрыть; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и компонент застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Открытость карточки в управляемом режиме: состоянием владеет родитель, изменения приходят в onOpenChange.","x-doc":{"group":"State","type":"boolean"}},"openDelay":{"type":"number","description":"Задержка (мс) перед открытием при наведении.","x-doc":{"group":"Behavior","type":"number"},"default":700}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-hover-card"]}}},{"name":"HoverCardContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["center","end","start"],"default":"center","description":"Выравнивание слоя вдоль выбранной стороны якоря — по началу, центру или концу.","x-doc":{"group":"Behavior","type":"'center' | 'end' | 'start'"}},"alignOffset":{"type":"number","description":"Сдвиг всплывающего слоя вдоль оси выравнивания, в пикселях от точки start/end.","x-doc":{"group":"Behavior","type":"number"}},"arrowPadding":{"type":"number","description":"Зона у углов слоя, в которую не заходит стрелка-указатель, в пикселях — чтобы стрелка не наезжала на скруглённые края.","x-doc":{"group":"Behavior","type":"number"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"avoidCollisions":{"type":"boolean","description":"Автоматически смещать и переворачивать слой, когда он не помещается в границах видимости; при выключении сторона и выравнивание соблюдаются буквально.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collisionBoundary":{"description":"Элемент или набор элементов, по границам которых считаются столкновения; по умолчанию границей служит вьюпорт.","x-doc":{"group":"Behavior","type":"Boundary | Boundary[]","kind":"readonly"}},"collisionPadding":{"description":"Отступ от границ столкновения, на котором слой уже считается упёршимся; задаётся общим числом пикселей или отдельно по сторонам.","x-doc":{"group":"Behavior","type":"number | Partial<Record<\\"top\\" | \\"bottom\\" | \\"left\\" | \\"right\\", number>>","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Оставляет содержимое смонтированным при закрытой карточке (для внешних библиотек анимации); в этом порте эффекта не даёт — внутренний Portal размонтирует его раньше.","x-doc":{"group":"Behavior","type":"true"}},"hideWhenDetached":{"type":"boolean","description":"Скрывать слой, когда его якорь полностью ушёл из видимой области — например, прокрутился за пределы контейнера.","x-doc":{"group":"Behavior","type":"boolean"}},"onEscapeKeyDown":{"description":"Event handler called when the escape key is down. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Event handler called when the focus moves outside of the \`HoverCard\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onInteractOutside":{"description":"Event handler called when an interaction happens outside the \`HoverCard\`. Specifically, when a \`pointerdown\` event happens outside or focus moves outside of it. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Event handler called when the a \`pointerdown\` event happens outside of the \`HoverCard\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}},"side":{"type":"string","enum":["top","bottom","left","right"],"description":"Предпочитаемая сторона якоря, с которой раскрывается слой; при нехватке места и включённом avoidCollisions сторона меняется автоматически.","x-doc":{"group":"Behavior","type":"'top' | 'bottom' | 'left' | 'right'"}},"sideOffset":{"type":"number","default":4,"description":"Зазор между слоем и якорем по выбранной стороне, в пикселях.","x-doc":{"group":"Behavior","type":"number"}},"sticky":{"type":"string","enum":["partial","always"],"description":"Поведение слоя при уходе якоря: \`partial\` — держаться, пока якорь виден хотя бы частично, \`always\` — оставаться в границах в любом случае.","x-doc":{"group":"Behavior","type":"'partial' | 'always'"}},"updatePositionStrategy":{"type":"string","enum":["optimized","always"],"description":"Частота пересчёта позиции: \`optimized\` — по значимым событиям (скролл, ресайз), \`always\` — на каждом кадре анимации, точнее и дороже.","x-doc":{"group":"Behavior","type":"'optimized' | 'always'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"HoverCard","palette":false},{"name":"HoverCardTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AnchorHTMLAttributes","AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"HoverCard","palette":false},{"name":"Icon","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Icon","properties":{"className":{"type":"string","description":"Доп. CSS-класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"color":{"type":"string","description":"Цвет обводки (любой CSS-цвет; по умолчанию currentColor).","x-doc":{"group":"Control","type":"string"}},"iconName":{"type":"string","default":"Circle","description":"Имя иконки lucide (PascalCase, напр. Home, ArrowRight).","x-doc":{"group":"Control","type":"string"}},"size":{"type":"number","default":24,"description":"Размер в пикселях.","x-doc":{"group":"Control","type":"number"},"minimum":8},"strokeWidth":{"type":"number","default":2,"description":"Толщина линий.","x-doc":{"group":"Behavior","type":"number"},"minimum":0.5}}}},{"name":"Input","role":"field","exportName":"InputField","propsSchema":{"type":"object","properties":{"className":{"type":"string","description":"Доп. CSS-класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"max":{"type":"number","description":"Максимум (type=number).","x-doc":{"group":"Behavior","type":"number"}},"min":{"type":"number","description":"Минимум (type=number). При min>=0 отрицательные значения зажимаются к 0.","x-doc":{"group":"Behavior","type":"number"}},"placeholder":{"type":"string","description":"Подсказка внутри поля.","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"step":{"type":"number","description":"Шаг (type=number).","x-doc":{"group":"Behavior","type":"number"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"type":{"type":"string","enum":["text","email","tel","url","password","number","date"],"default":"text","description":"HTML-тип input. number включает числовой буфер, остальные — строковые.","x-doc":{"group":"Textfield","type":"'text' | 'email' | 'number' | 'date' | …","kind":"enum"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | number | null","description":"Значение поля. Для type=number — number|null, иначе string|null."},"onChange":{"group":"Control","type":"(value: string | number | null) => void","description":"Изменение. Пустой ввод → null. Для number частичный ввод («-», «1.») не эмитится."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","InputHTMLAttributes","RefAttributes"],"packages":[]}},"variantGroup":"Input","variant":"Текст"},{"name":"InputGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"InputGroup","properties":{"className":{"type":"string","description":"CSS-класс контейнера-группы (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"InputGroupAddon","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["inline-start","inline-end","block-start","block-end"],"default":"inline-start","description":"Сторона, с которой аддон прижат к контролу.","x-doc":{"group":"Control","type":"'inline-start' | 'inline-end' | 'block-start' | 'block-end'","kind":"enum"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"InputGroup"},{"name":"InputGroupButton","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"size":{"type":"string","enum":["xs","sm","icon-xs","icon-sm"],"default":"xs","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'xs' | 'sm' | 'icon-xs' | 'icon-sm'"}},"variant":{"type":"string","enum":["link","default","destructive","outline","secondary","ghost"],"default":"ghost","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"InputGroup"},{"name":"InputGroupInput","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","InputHTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"InputGroup"},{"name":"InputGroupText","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"InputGroup"},{"name":"InputGroupTextarea","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes","TextareaHTMLAttributes"],"packages":[]}},"compoundParent":"InputGroup"},{"name":"InputMask","role":"field","exportName":"InputMaskField","propsSchema":{"type":"object","properties":{"className":{"type":"string","description":"Доп. CSS-класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"mask":{"type":"string","description":"Шаблон маски-подсказки: '9' — цифра, прочие символы — литералы (уходят в placeholder). Напр. '+7 (999) 999-99-99'. Автовставки литералов нет — компонент только помечает формат.","x-doc":{"group":"Textfield","type":"string"}},"placeholder":{"type":"string","description":"Подсказка внутри поля. По умолчанию равна mask.","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Значение поля. null/undefined → пустое поле."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Изменение. Пустой ввод → null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","InputHTMLAttributes","RefAttributes"],"packages":[]}},"variantGroup":"Input","variant":"Маска"},{"name":"InputOTP","role":"field","exportName":"InputOTPField","propsSchema":{"type":"object","properties":{"className":{"type":"string","description":"Доп. CSS-класс скрытого input.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"containerClassName":{"type":"string","description":"Доп. CSS-класс контейнера слотов (div[data-input-otp-container]); className при этом уходит на скрытый input, а не на контейнер.","x-doc":{"group":"Control","type":"string"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"maxLength":{"type":"number","description":"Число слотов (длина кода). Дефолтная раскладка разворачивает одну группу из maxLength слотов.","x-doc":{"group":"Behavior","type":"number"},"default":6,"minimum":1},"noScriptCSSFallback":{"type":"string","description":"CSS, который input-otp кладёт в <noscript> для показа поля без JS; null полностью отключает вставку стилей.","x-doc":{"group":"Behavior","type":"string | null"}},"onComplete":{"description":"Срабатывает в момент, когда длина набранного кода достигает maxLength — точка для автоотправки; шов формы это не он, значение отдаёт onChange (otpAdapter).","x-doc":{"group":"Behavior","type":"((...args: any[]) => unknown)","kind":"readonly"}},"pasteTransformer":{"description":"Преобразует текст из буфера перед записью в код (убрать пробелы, дефисы, префикс); заодно включает собственную обработку вставки вне iOS.","x-doc":{"group":"Behavior","type":"((pasted: string) => string)","kind":"readonly"}},"pushPasswordManagerStrategy":{"type":"string","enum":["increase-width","none"],"description":"Как расходиться с бейджем менеджера паролей: расширять поле, освобождая ему место справа, либо не реагировать вовсе.","x-doc":{"group":"Behavior","type":"'increase-width' | 'none'"}},"render":{"description":"Альтернатива children: сам рисует раскладку по слотам ({ slots, isFocused, isHovering }); задавать вместе с children нельзя — тип это ветка union'а.","x-doc":{"group":"Control","type":"InputOTPRenderFn","kind":"readonly"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"textAlign":{"type":"string","enum":["left","center","right"],"description":"Выравнивание текста скрытого input — определяет, у какого края встаёт каретка, пока код набран не полностью.","x-doc":{"group":"Behavior","type":"'left' | 'center' | 'right'"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Набранный код. null — пусто."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Изменение кода. Пустой ввод → null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","InputHTMLAttributes","RefAttributes"],"packages":["input-otp"]}},"variantGroup":"Input","variant":"OTP"},{"name":"InputOTPGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"InputOTPSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"InputOTPSlot","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"index":{"type":"number","description":"Номер слота с нуля — по нему слот достаёт из OTPInputContext свой символ, признак активности и фейковую каретку.","x-doc":{"group":"Control","type":"number"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"InputPassword","role":"field","exportName":"InputPasswordField","propsSchema":{"type":"object","properties":{"className":{"type":"string","description":"Доп. CSS-класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"placeholder":{"type":"string","default":"Password","description":"Подсказка внутри поля.","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"showToggle":{"type":"boolean","default":true,"description":"Показывать иконку переключения видимости (eye/eye-off). Появляется при непустом value.","x-doc":{"group":"Behavior","type":"boolean"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Значение пароля. null/пусто — пустое поле."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Изменение. Пустой ввод приводится к null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","InputHTMLAttributes","RefAttributes"],"packages":[]}},"variantGroup":"Input","variant":"Пароль"},{"name":"Item","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Item","properties":{"asChild":{"type":"boolean","default":false,"description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"size":{"type":"string","enum":["default","sm"],"default":"default","description":"Размер отступов и зазоров внутри строки.","x-doc":{"group":"Behavior","type":"'default' | 'sm'","kind":"enum"}},"variant":{"type":"string","enum":["default","outline","muted"],"default":"default","description":"Визуальный стиль: прозрачный, с рамкой или приглушённый фон.","x-doc":{"group":"Behavior","type":"'default' | 'outline' | 'muted'","kind":"enum"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"ItemActions","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Item"},{"name":"ItemContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Item"},{"name":"ItemDescription","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Item"},{"name":"ItemFooter","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Item"},{"name":"ItemGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Item"},{"name":"ItemHeader","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Item"},{"name":"ItemMedia","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"variant":{"type":"string","enum":["default","icon","image"],"default":"default","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'default' | 'icon' | 'image'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Item"},{"name":"ItemSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"decorative":{"type":"boolean","description":"Разделитель считается чисто декоративным и убирается из дерева доступности; иначе он объявляется семантическим разделителем.","x-doc":{"group":"Behavior","type":"boolean"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"description":"Ориентация разделителя — горизонтальная или вертикальная линия.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Item"},{"name":"ItemTitle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Item"},{"name":"Kbd","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Kbd","properties":{"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"KbdGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Kbd"},{"name":"Label","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Label","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс подписи (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"htmlFor":{"type":"string","description":"id связанного контрола (атрибут \`for\` тега \`<label>\`).","x-doc":{"group":"Behavior","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","LabelHTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"List","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"as":{"default":"div","description":"Тег/компонент обёртки. По умолчанию \`'div'\`.","x-doc":{"group":"Behavior","type":"ElementType","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"items":{"type":"array","description":"Отрендеренные элементы массива (инъектится рендерером).","x-doc":{"group":"Behavior","type":"ArrayItemSlot[]"}},"testId":{"type":"string","description":"\`data-testid\` контейнера.","x-doc":{"group":"Behavior","type":"string"}}}},"palette":false},{"name":"Marker","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Marker","properties":{"asChild":{"type":"boolean","default":false,"description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"variant":{"type":"string","enum":["default","separator","border"],"default":"default","description":"Вариант оформления маркера.","x-doc":{"group":"Behavior","type":"'default' | 'separator' | 'border'","kind":"enum"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"MarkerContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Marker"},{"name":"MarkerIcon","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Marker"},{"name":"Menubar","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Menubar","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultValue":{"type":"string","description":"Меню, открытое при первом рендере (значение value нужного MenubarMenu) — неуправляемый режим.","x-doc":{"group":"State","type":"string"}},"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление чтения (влияет на навигацию стрелками).","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'","kind":"enum"},"default":"ltr"},"loop":{"type":"boolean","description":"Зациклить перемещение фокуса стрелками по краям.","x-doc":{"group":"Behavior","type":"boolean"},"default":false},"onValueChange":{"description":"Получает value открываемого меню при каждой смене и пустую строку, когда все меню закрыты; в паре с \`value\` образует управляемый режим.","x-doc":{"group":"Behavior","type":"((value: string) => void)","kind":"readonly"}},"value":{"type":"string","description":"Открытое меню в управляемом режиме; без парного onValueChange панель залипнет на одном меню.","x-doc":{"group":"State","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"MenubarCheckboxItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"checked":{"description":"Состояние отметки пункта-чекбокса; помимо включено/выключено допускает промежуточное \`indeterminate\`.","x-doc":{"group":"State","type":"CheckedState","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт меню недоступен: не реагирует на выбор и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"onCheckedChange":{"description":"Получает новое состояние отметки при выборе пункта-чекбокса; из промежуточного \`indeterminate\` переключение даёт \`true\`.","x-doc":{"group":"Behavior","type":"((checked: boolean) => void)","kind":"readonly"}},"textValue":{"type":"string","description":"Текст пункта для поиска набором с клавиатуры (typeahead); задаётся, когда содержимое пункта не сводится к простой строке.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["@radix-ui/react-menu"]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["center","end","start"],"default":"start","description":"Выравнивание слоя вдоль выбранной стороны якоря — по началу, центру или концу.","x-doc":{"group":"Behavior","type":"'center' | 'end' | 'start'"}},"alignOffset":{"type":"number","default":-4,"description":"Сдвиг всплывающего слоя вдоль оси выравнивания, в пикселях от точки start/end.","x-doc":{"group":"Behavior","type":"number"}},"arrowPadding":{"type":"number","description":"Зона у углов слоя, в которую не заходит стрелка-указатель, в пикселях — чтобы стрелка не наезжала на скруглённые края.","x-doc":{"group":"Behavior","type":"number"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"avoidCollisions":{"type":"boolean","description":"Автоматически смещать и переворачивать слой, когда он не помещается в границах видимости; при выключении сторона и выравнивание соблюдаются буквально.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collisionBoundary":{"description":"Элемент или набор элементов, по границам которых считаются столкновения; по умолчанию границей служит вьюпорт.","x-doc":{"group":"Behavior","type":"Boundary | Boundary[]","kind":"readonly"}},"collisionPadding":{"description":"Отступ от границ столкновения, на котором слой уже считается упёршимся; задаётся общим числом пикселей или отдельно по сторонам.","x-doc":{"group":"Behavior","type":"number | Partial<Record<\\"top\\" | \\"bottom\\" | \\"left\\" | \\"right\\", number>>","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое меню смонтированным и в закрытом состоянии — для внешнего управления анимацией появления.","x-doc":{"group":"Behavior","type":"true"}},"hideWhenDetached":{"type":"boolean","description":"Скрывать слой, когда его якорь полностью ушёл из видимой области — например, прокрутился за пределы контейнера.","x-doc":{"group":"Behavior","type":"boolean"}},"loop":{"type":"boolean","default":false,"description":"Зацикливать навигацию с клавиатуры: с последнего пункта переход на первый и обратно.","x-doc":{"group":"Behavior","type":"boolean"}},"onCloseAutoFocus":{"description":"Event handler called when auto-focusing on close. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onEscapeKeyDown":{"description":"Нажатие Escape, когда меню — верхний слой: следом меню закрывается, а \`event.preventDefault()\` в обработчике оставляет его открытым.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Уход фокуса за пределы меню: следом меню закрывается, а \`event.preventDefault()\` в обработчике оставляет его открытым; в модальном режиме меню отменяет это закрытие само.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onInteractOutside":{"description":"Любое взаимодействие снаружи: вызывается и при нажатии указателем вне меню, и при уходе фокуса — следом за \`onPointerDownOutside\`/\`onFocusOutside\`; \`event.preventDefault()\` оставляет меню открытым.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Нажатие указателем вне меню: следом меню закрывается, а \`event.preventDefault()\` в обработчике оставляет его открытым.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}},"side":{"type":"string","enum":["top","bottom","left","right"],"description":"Предпочитаемая сторона якоря, с которой раскрывается слой; при нехватке места и включённом avoidCollisions сторона меняется автоматически.","x-doc":{"group":"Behavior","type":"'top' | 'bottom' | 'left' | 'right'"}},"sideOffset":{"type":"number","default":8,"description":"Зазор между слоем и якорем по выбранной стороне, в пикселях.","x-doc":{"group":"Behavior","type":"number"}},"sticky":{"type":"string","enum":["partial","always"],"description":"Поведение слоя при уходе якоря: \`partial\` — держаться, пока якорь виден хотя бы частично, \`always\` — оставаться в границах в любом случае.","x-doc":{"group":"Behavior","type":"'partial' | 'always'"}},"updatePositionStrategy":{"type":"string","enum":["optimized","always"],"description":"Частота пересчёта позиции: \`optimized\` — по значимым событиям (скролл, ресайз), \`always\` — на каждом кадре анимации, точнее и дороже.","x-doc":{"group":"Behavior","type":"'optimized' | 'always'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт меню недоступен: не реагирует на выбор и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"inset":{"type":"boolean","description":"Добавляет левый отступ, выравнивающий текст по пунктам с иконкой или отметкой.","x-doc":{"group":"Behavior","type":"boolean"}},"textValue":{"type":"string","description":"Текст пункта для поиска набором с клавиатуры (typeahead); задаётся, когда содержимое пункта не сводится к простой строке.","x-doc":{"group":"Control","type":"string"}},"variant":{"type":"string","enum":["default","destructive"],"default":"default","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'default' | 'destructive'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["@radix-ui/react-menu"]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarLabel","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"inset":{"type":"boolean","description":"Добавляет левый отступ, выравнивающий текст по пунктам с иконкой или отметкой.","x-doc":{"group":"Behavior","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarMenu","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"value":{"type":"string","description":"Идентификатор меню — по нему Menubar понимает, какое из меню открыто.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-menubar"]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarPortal","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"container":{"type":"object","description":"DOM-узел, в который порталится содержимое меню; по умолчанию — document.body.","x-doc":{"group":"Behavior","type":"Element | DocumentFragment | null","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое меню смонтированным и в закрытом состоянии — для внешнего управления анимацией появления.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-menu"]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarRadioGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"onValueChange":{"description":"Получает value выбранного пункта радиогруппы при каждом выборе; в паре с \`value\` образует управляемый режим.","x-doc":{"group":"Behavior","type":"((value: string) => void)","kind":"readonly"}},"value":{"type":"string","description":"Значение пункта радиогруппы меню — по нему группа определяет, какой пункт выбран.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarRadioItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт меню недоступен: не реагирует на выбор и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"textValue":{"type":"string","description":"Текст пункта для поиска набором с клавиатуры (typeahead); задаётся, когда содержимое пункта не сводится к простой строке.","x-doc":{"group":"Control","type":"string"}},"value":{"type":"string","description":"Значение пункта радиогруппы меню — по нему группа определяет, какой пункт выбран.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["@radix-ui/react-menu"]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarShortcut","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarSub","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"defaultOpen":{"type":"boolean","description":"Раскрыть подменю сразу при монтировании — неуправляемый режим.","x-doc":{"group":"State","type":"boolean"}},"onOpenChange":{"description":"Получает новое состояние подменю при каждой попытке раскрыть или свернуть его; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и подменю застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Раскрыто ли подменю в управляемом режиме; без парного onOpenChange состояние не переключится.","x-doc":{"group":"State","type":"boolean","kind":"readonly"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-menubar"]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarSubContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["end","start"],"description":"Направление, в котором вложенное подменю раскрывается относительно своего пункта-якоря.","x-doc":{"group":"Behavior","type":"'end' | 'start'"}},"alignOffset":{"type":"number","description":"Сдвиг всплывающего слоя вдоль оси выравнивания, в пикселях от точки start/end.","x-doc":{"group":"Behavior","type":"number"}},"arrowPadding":{"type":"number","description":"Зона у углов слоя, в которую не заходит стрелка-указатель, в пикселях — чтобы стрелка не наезжала на скруглённые края.","x-doc":{"group":"Behavior","type":"number"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"avoidCollisions":{"type":"boolean","description":"Автоматически смещать и переворачивать слой, когда он не помещается в границах видимости; при выключении сторона и выравнивание соблюдаются буквально.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collisionBoundary":{"description":"Элемент или набор элементов, по границам которых считаются столкновения; по умолчанию границей служит вьюпорт.","x-doc":{"group":"Behavior","type":"Boundary | Boundary[]","kind":"readonly"}},"collisionPadding":{"description":"Отступ от границ столкновения, на котором слой уже считается упёршимся; задаётся общим числом пикселей или отдельно по сторонам.","x-doc":{"group":"Behavior","type":"number | Partial<Record<\\"top\\" | \\"bottom\\" | \\"left\\" | \\"right\\", number>>","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое меню смонтированным и в закрытом состоянии — для внешнего управления анимацией появления.","x-doc":{"group":"Behavior","type":"true"}},"hideWhenDetached":{"type":"boolean","description":"Скрывать слой, когда его якорь полностью ушёл из видимой области — например, прокрутился за пределы контейнера.","x-doc":{"group":"Behavior","type":"boolean"}},"loop":{"type":"boolean","default":false,"description":"Зацикливать навигацию с клавиатуры: с последнего пункта переход на первый и обратно.","x-doc":{"group":"Behavior","type":"boolean"}},"onEscapeKeyDown":{"description":"Нажатие Escape внутри подменю: следом закрывается всё меню целиком, а не только эта ветка; \`event.preventDefault()\` отменяет закрытие.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Уход фокуса за пределы подменю (возврат на его пункт-триггер не в счёт): следом подменю закрывается, а \`event.preventDefault()\` оставляет его открытым.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onInteractOutside":{"description":"Любое взаимодействие снаружи подменю: вызывается и при нажатии указателем, и при уходе фокуса — следом за \`onPointerDownOutside\`/\`onFocusOutside\`.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Нажатие указателем вне подменю, включая клики по родительскому меню: само подменю от этого не закрывается — закрытием распоряжается корневой слой меню.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}},"sideOffset":{"type":"number","description":"Зазор между слоем и якорем по выбранной стороне, в пикселях.","x-doc":{"group":"Behavior","type":"number"}},"sticky":{"type":"string","enum":["partial","always"],"description":"Поведение слоя при уходе якоря: \`partial\` — держаться, пока якорь виден хотя бы частично, \`always\` — оставаться в границах в любом случае.","x-doc":{"group":"Behavior","type":"'partial' | 'always'"}},"updatePositionStrategy":{"type":"string","enum":["optimized","always"],"description":"Частота пересчёта позиции: \`optimized\` — по значимым событиям (скролл, ресайз), \`always\` — на каждом кадре анимации, точнее и дороже.","x-doc":{"group":"Behavior","type":"'optimized' | 'always'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarSubTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт меню недоступен: не реагирует на выбор и пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"inset":{"type":"boolean","description":"Добавляет левый отступ, выравнивающий текст по пунктам с иконкой или отметкой.","x-doc":{"group":"Behavior","type":"boolean"}},"textValue":{"type":"string","description":"Текст пункта для поиска набором с клавиатуры (typeahead); задаётся, когда содержимое пункта не сводится к простой строке.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Menubar","palette":false},{"name":"MenubarTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Menubar","palette":false},{"name":"Message","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Message","properties":{"align":{"type":"string","enum":["start","end"],"default":"start","description":"Сторона выравнивания сообщения (end — своё сообщение справа).","x-doc":{"group":"Behavior","type":"'start' | 'end'","kind":"enum"}},"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"MessageAvatar","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Message"},{"name":"MessageContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Message"},{"name":"MessageFooter","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Message"},{"name":"MessageGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Message"},{"name":"MessageHeader","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Message"},{"name":"MessageScroller","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"MessageScroller","properties":{"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"MessageScrollerButton","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"behavior":{"type":"string","enum":["auto","instant","smooth"],"description":"Как прокручивать по клику: анимированно или мгновенным прыжком.","x-doc":{"group":"Behavior","type":"'auto' | 'instant' | 'smooth'"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"direction":{"type":"string","enum":["end","start"],"default":"end","description":"К какому краю списка прокручивать — от этого же зависят позиция кнопки, поворот иконки и то, при каком крае она активна.","x-doc":{"group":"Behavior","type":"'end' | 'start'"}},"render":{"description":"Замена корневого элемента кнопки: React-элемент или функция (props, { active, direction }) → элемент; по умолчанию кит подставляет свой Button.","x-doc":{"group":"Control","type":"RenderProp<MessageScrollerButtonRenderState>","kind":"readonly"}},"size":{"type":"string","enum":["default","xs","sm","lg","icon","icon-xs","icon-sm","icon-lg"],"default":"icon-sm","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg'"}},"variant":{"type":"string","enum":["link","default","destructive","outline","secondary","ghost"],"default":"secondary","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'link' | 'default' | 'destructive' | 'outline' | 'secondary' | 'ghost'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"MessageScroller"},{"name":"MessageScrollerContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"spacerClassName":{"type":"string","description":"CSS-класс служебного спейсера в конце списка — распорки, которая добирает высоту для прокрутки к последнему сообщению.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"MessageScroller"},{"name":"MessageScrollerItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"messageId":{"type":"string","description":"Идентификатор сообщения: по нему работают scrollToMessage и отслеживание видимости; без него элемент в этих расчётах не участвует.","x-doc":{"group":"Control","type":"string"}},"scrollAnchor":{"type":"boolean","default":false,"description":"Помечает сообщение якорем: при его появлении список прыгает к нему и удерживает его у верхнего края вместо слежения за концом.","x-doc":{"group":"Behavior","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"MessageScroller"},{"name":"MessageScrollerProvider","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"autoScroll":{"type":"boolean","description":"Держать список у конца при добавлении сообщений; ручной скролл вверх снимает слежение до возврата к низу.","x-doc":{"group":"Behavior","type":"boolean"}},"defaultScrollPosition":{"type":"string","enum":["end","start","last-anchor"],"description":"Куда встать при первом рендере непустого списка: к началу, к концу или к последнему сообщению-якорю.","x-doc":{"group":"Behavior","type":"'end' | 'start' | 'last-anchor'"}},"scrollEdgeThreshold":{"type":"number","description":"Допуск в пикселях, в пределах которого список считается прижатым к краю — от него зависит активность MessageScrollerButton и атрибут data-scrollable.","x-doc":{"group":"Behavior","type":"number"}},"scrollMargin":{"type":"number","description":"Отступ в пикселях от края вьюпорта при прокрутке к сообщению — на эту величину сдвигается целевая позиция.","x-doc":{"group":"Behavior","type":"number"}},"scrollPreviousItemPeek":{"type":"number","description":"Сколько пикселей предыдущего сообщения оставить видимыми при прыжке к новому сообщению-якорю.","x-doc":{"group":"Behavior","type":"number"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@shadcn/react"]}},"compoundParent":"MessageScroller","palette":false},{"name":"MessageScrollerViewport","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"preserveScrollOnPrepend":{"type":"boolean","description":"Сохранять видимую позицию при вставке сообщений в начало списка (подгрузка истории вверх).","x-doc":{"group":"Behavior","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"MessageScroller"},{"name":"NativeSelect","role":"field","exportName":"NativeSelectField","propsSchema":{"type":"object","properties":{"className":{"type":"string","description":"Доп. CSS-класс select.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"options":{"type":"array","items":{"type":"object","required":["value","label"],"additionalProperties":false,"properties":{"value":{"type":["string","number"]},"label":{"type":"string"},"group":{"type":"string"}}},"description":"Опции списка. Одинаковый group объединяется в <optgroup>.","x-doc":{"group":"Options","type":"Array<{ value; label; group? }>","kind":"readonly"}},"placeholder":{"type":"string","description":"Подсказка-опция (value=\\"\\") в начале списка.","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"size":{"type":"string","enum":["sm","default"],"default":"default","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'sm' | 'default'"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Выбранное значение (option.value как строка). Пустой выбор → null."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Изменение. Пустой выбор (value=\\"\\") → null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes","SelectHTMLAttributes"],"packages":[]}}},{"name":"NativeSelectOptGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","OptgroupHTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"NativeSelect","palette":false},{"name":"NativeSelectOption","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","OptionHTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"NativeSelect","palette":false},{"name":"NativeSelectWithOptions","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"options":{"type":"array","description":"Список вариантов выбора: \`value\` — записываемое значение, \`label\` — видимая подпись.","x-doc":{"group":"Options","type":"NativeSelectOptionItem[]","kind":"readonly"}},"placeholder":{"type":"string","description":"Подсказка, видимая пока значение не задано.","x-doc":{"group":"Textfield","type":"string"}},"size":{"type":"string","enum":["sm","default"],"description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'sm' | 'default'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes","SelectHTMLAttributes"],"packages":[]}},"compoundParent":"NativeSelect","palette":false},{"name":"NavigationMenu","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"NavigationMenu","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultValue":{"type":"string","description":"Значение пункта, раскрытого изначально, в неуправляемом режиме.","x-doc":{"group":"State","type":"string"}},"delayDuration":{"type":"number","default":200,"description":"Задержка (мс) перед открытием меню при наведении.","x-doc":{"group":"Behavior","type":"number"}},"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление письма (слева-направо / справа-налево).","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'","kind":"enum"}},"onValueChange":{"description":"Получает value раскрываемого пункта при каждой смене и пустую строку при закрытии меню; в паре с \`value\` образует управляемый режим.","x-doc":{"group":"Behavior","type":"((value: string) => void)","kind":"readonly"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"description":"Ориентация меню.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'","kind":"enum"},"default":"horizontal"},"skipDelayDuration":{"type":"number","default":300,"description":"Окно (мс), в течение которого переход между пунктами открывает меню без задержки.","x-doc":{"group":"Behavior","type":"number"}},"value":{"type":"string","description":"Значение раскрытого пункта в управляемом режиме; пустая строка — меню закрыто.","x-doc":{"group":"State","type":"string"}},"viewport":{"type":"boolean","default":true,"description":"Рендерить общий Viewport-оверлей для контента (иначе контент под каждым пунктом).","x-doc":{"group":"Behavior","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"NavigationMenuContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"deferPointerDownOutside":{"type":"boolean","description":"Откладывать реакцию на нажатие вне слоя до события click, чтобы внешний код успел остановить всплытие и отменить закрытие.","x-doc":{"group":"Behavior","type":"boolean"}},"forceMount":{"type":"boolean","description":"Держать контент в DOM и в закрытом состоянии — нужно для внешних анимаций раскрытия.","x-doc":{"group":"Behavior","type":"true"}},"onEscapeKeyDown":{"description":"Event handler called when the escape key is down. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Event handler called when the focus moves outside of the \`DismissableLayer\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onInteractOutside":{"description":"Event handler called when an interaction happens outside the \`DismissableLayer\`. Specifically, when a \`pointerdown\` event happens outside or focus moves outside of it. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Event handler called when the a \`pointerdown\` event happens outside of the \`DismissableLayer\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"NavigationMenu","palette":false},{"name":"NavigationMenuIndicator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать индикатор в DOM и когда он скрыт — нужно для внешних анимаций.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"NavigationMenu","palette":false},{"name":"NavigationMenuItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"value":{"type":"string","description":"Значение пункта — по нему NavigationMenu определяет, какой пункт раскрыт.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"NavigationMenu","palette":false},{"name":"NavigationMenuLink","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"active":{"type":"boolean","description":"Ссылка ведёт на текущий раздел — включает стили активного пункта (data-active).","x-doc":{"group":"State","type":"boolean"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AnchorHTMLAttributes","AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["@radix-ui/react-navigation-menu"]}},"compoundParent":"NavigationMenu","palette":false},{"name":"NavigationMenuList","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"NavigationMenu","palette":false},{"name":"NavigationMenuTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"NavigationMenu","palette":false},{"name":"NavigationMenuViewport","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать Viewport в DOM и в закрытом состоянии — нужно для внешних анимаций.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"NavigationMenu","palette":false},{"name":"Pagination","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Pagination","properties":{"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"PaginationContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Pagination"},{"name":"PaginationEllipsis","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Pagination"},{"name":"PaginationItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","LiHTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Pagination"},{"name":"PaginationLink","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"href":{"type":"string","description":"URL страницы.","x-doc":{"group":"Control","type":"string"}},"isActive":{"type":"boolean","description":"Текущая страница (подсвечена).","x-doc":{"group":"State","type":"boolean","kind":"boolean"}},"size":{"type":"string","enum":["default","xs","sm","lg","icon","icon-xs","icon-sm","icon-lg"],"default":"icon","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg'"}}},"x-inherits":{"react":["AnchorHTMLAttributes","AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Pagination"},{"name":"PaginationNext","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"isActive":{"type":"boolean","description":"Элемент отмечен как текущий: подсвечивается и получает data-active, у ссылок дополнительно aria-current.","x-doc":{"group":"State","type":"boolean"}},"size":{"type":"string","enum":["default","xs","sm","lg","icon","icon-xs","icon-sm","icon-lg"],"description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg'"}}},"x-inherits":{"react":["AnchorHTMLAttributes","AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Pagination"},{"name":"PaginationPrevious","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"isActive":{"type":"boolean","description":"Элемент отмечен как текущий: подсвечивается и получает data-active, у ссылок дополнительно aria-current.","x-doc":{"group":"State","type":"boolean"}},"size":{"type":"string","enum":["default","xs","sm","lg","icon","icon-xs","icon-sm","icon-lg"],"description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'xs' | 'sm' | 'lg' | 'icon' | 'icon-xs' | 'icon-sm' | 'icon-lg'"}}},"x-inherits":{"react":["AnchorHTMLAttributes","AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Pagination"},{"name":"Popover","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Popover","properties":{"defaultOpen":{"type":"boolean","description":"Открыт ли поповер изначально (неуправляемый режим).","x-doc":{"group":"State","type":"boolean"},"default":false},"modal":{"type":"boolean","description":"Модальный режим — блокирует взаимодействие с фоном и ловит фокус.","x-doc":{"group":"Behavior","type":"boolean"},"default":false},"onOpenChange":{"description":"Получает новое состояние при каждой попытке открыть или закрыть; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и компонент застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Управляемое состояние открытия; имеет смысл только в паре с onOpenChange, иначе поповер застывает в заданном состоянии.","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-popover"]}}},{"name":"PopoverAnchor","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"virtualRef":{"type":"object","description":"Виртуальный якорь позиционирования: если задан, Anchor не рендерит DOM, а контент позиционируется по этому объекту (например, по координатам курсора или выделения).","x-doc":{"group":"Behavior","type":"RefObject<Measurable>","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Popover","palette":false},{"name":"PopoverContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["center","end","start"],"default":"center","description":"Выравнивание слоя вдоль выбранной стороны якоря — по началу, центру или концу.","x-doc":{"group":"Behavior","type":"'center' | 'end' | 'start'"}},"alignOffset":{"type":"number","description":"Сдвиг всплывающего слоя вдоль оси выравнивания, в пикселях от точки start/end.","x-doc":{"group":"Behavior","type":"number"}},"arrowPadding":{"type":"number","description":"Зона у углов слоя, в которую не заходит стрелка-указатель, в пикселях — чтобы стрелка не наезжала на скруглённые края.","x-doc":{"group":"Behavior","type":"number"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"avoidCollisions":{"type":"boolean","description":"Автоматически смещать и переворачивать слой, когда он не помещается в границах видимости; при выключении сторона и выравнивание соблюдаются буквально.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collisionBoundary":{"description":"Элемент или набор элементов, по границам которых считаются столкновения; по умолчанию границей служит вьюпорт.","x-doc":{"group":"Behavior","type":"Boundary | Boundary[]","kind":"readonly"}},"collisionPadding":{"description":"Отступ от границ столкновения, на котором слой уже считается упёршимся; задаётся общим числом пикселей или отдельно по сторонам.","x-doc":{"group":"Behavior","type":"number | Partial<Record<\\"top\\" | \\"bottom\\" | \\"left\\" | \\"right\\", number>>","kind":"readonly"}},"deferPointerDownOutside":{"type":"boolean","description":"Откладывать реакцию на нажатие вне слоя до события click, чтобы внешний код успел остановить всплытие и отменить закрытие.","x-doc":{"group":"Behavior","type":"boolean"}},"forceMount":{"type":"boolean","description":"Держать контент в DOM при закрытом поповере — нужно для внешних библиотек анимации выхода.","x-doc":{"group":"Behavior","type":"true"}},"hideWhenDetached":{"type":"boolean","description":"Скрывать слой, когда его якорь полностью ушёл из видимой области — например, прокрутился за пределы контейнера.","x-doc":{"group":"Behavior","type":"boolean"}},"onCloseAutoFocus":{"description":"Event handler called when auto-focusing on close. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onEscapeKeyDown":{"description":"Event handler called when the escape key is down. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Event handler called when the focus moves outside of the \`DismissableLayer\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onInteractOutside":{"description":"Event handler called when an interaction happens outside the \`DismissableLayer\`. Specifically, when a \`pointerdown\` event happens outside or focus moves outside of it. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)","kind":"readonly"}},"onOpenAutoFocus":{"description":"Event handler called when auto-focusing on open. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Event handler called when the a \`pointerdown\` event happens outside of the \`DismissableLayer\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}},"side":{"type":"string","enum":["top","bottom","left","right"],"description":"Предпочитаемая сторона якоря, с которой раскрывается слой; при нехватке места и включённом avoidCollisions сторона меняется автоматически.","x-doc":{"group":"Behavior","type":"'top' | 'bottom' | 'left' | 'right'"}},"sideOffset":{"type":"number","default":4,"description":"Зазор между слоем и якорем по выбранной стороне, в пикселях.","x-doc":{"group":"Behavior","type":"number"}},"sticky":{"type":"string","enum":["partial","always"],"description":"Поведение слоя при уходе якоря: \`partial\` — держаться, пока якорь виден хотя бы частично, \`always\` — оставаться в границах в любом случае.","x-doc":{"group":"Behavior","type":"'partial' | 'always'"}},"updatePositionStrategy":{"type":"string","enum":["optimized","always"],"description":"Частота пересчёта позиции: \`optimized\` — по значимым событиям (скролл, ресайз), \`always\` — на каждом кадре анимации, точнее и дороже.","x-doc":{"group":"Behavior","type":"'optimized' | 'always'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Popover","palette":false},{"name":"PopoverDescription","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Popover","palette":false},{"name":"PopoverHeader","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Popover","palette":false},{"name":"PopoverTitle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Popover","palette":false},{"name":"PopoverTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Popover","palette":false},{"name":"Progress","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Progress","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс дорожки прогресса (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"getValueLabel":{"description":"Формирует текст aria-valuetext по (value, max); по умолчанию — округлённый процент вида «42%».","x-doc":{"group":"Control","type":"((value: number, max: number) => string)","kind":"readonly"}},"max":{"type":"number","description":"Максимальное значение шкалы (по умолчанию 100).","x-doc":{"group":"State","type":"number","kind":"number"},"minimum":1,"default":100},"value":{"type":"number","description":"Текущее значение прогресса в процентах (0–100).","x-doc":{"group":"State","type":"number","kind":"number"},"minimum":0,"maximum":100}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"RadioGroup","role":"field","exportName":"RadioGroupField","propsSchema":{"type":"object","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс контейнера группы (по умолчанию grid gap-3).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultValue":{"type":"string","description":"Начальный выбор в неконтролируемом режиме; при заданном value игнорируется.","x-doc":{"group":"Control","type":"string"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление письма — задаёт, какая стрелка двигает фокус вперёд; без значения берётся из DirectionProvider (иначе ltr).","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'"}},"form":{"type":"string","description":"id внешнего <form>, к которому привязан скрытый input группы; на reset этой формы значение возвращается к начальному.","x-doc":{"group":"Control","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"loop":{"type":"boolean","description":"Зацикливает переход стрелками с последнего варианта на первый (в Radix включено по умолчанию).","x-doc":{"group":"Behavior","type":"boolean"}},"name":{"type":"string","description":"Имя поля для нативной отправки формы — попадает в скрытый input, который Radix рендерит внутри <form>.","x-doc":{"group":"Control","type":"string"}},"onValueChange":{"description":"Эмиттер выбранного значения (RadioGroupItem.value, контракт Radix Root); в field-версии сюда valueChangeAdapter кладёт onChange формы (пустой выбор → null).","x-doc":{"group":"Control","type":"((value: string) => void)","kind":"readonly"}},"options":{"type":"array","items":{"type":"object","required":["value","label"],"additionalProperties":false,"properties":{"value":{"type":"string"},"label":{"type":"string"}}},"description":"Варианты выбора. Каждый рендерится как radio + подпись справа.","x-doc":{"group":"Options","type":"Array<{ value; label }>","kind":"readonly"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"description":"Ось навигации стрелками: вертикальная слушает ↑/↓, горизонтальная — ←/→, без значения работают обе.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'"}},"required":{"type":"boolean","description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"},"default":false},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Выбранное значение (option.value). null — ничего не выбрано."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Выбор варианта; пустой выбор → null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"RadioGroupItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"checked":{"type":"boolean","description":"Наследие примитива Radio: у Item внутри группы состояние вычисляется из RadioGroup.value, переданное значение на разметку не влияет.","x-doc":{"group":"State","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"required":{"type":"boolean","description":"Наследие примитива Radio: обязательность Item берёт из контекста группы (RadioGroup.required), переданное значение игнорируется.","x-doc":{"group":"State","type":"boolean"}},"value":{"type":"string","description":"Значение варианта: с ним сравнивается RadioGroup.value и оно же уходит в onValueChange при выборе.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"RadioGroup","palette":false},{"name":"RadioGroupOptions","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultValue":{"type":"string","description":"Начальный выбор в неконтролируемом режиме; при заданном value игнорируется.","x-doc":{"group":"Control","type":"string"}},"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление письма — задаёт, какая стрелка двигает фокус вперёд; без значения берётся из DirectionProvider (иначе ltr).","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'"}},"disabled":{"type":"boolean","description":"Блокирует все варианты сразу; в форме приходит от seam (control.disable()), а не из componentProps.","x-doc":{"group":"State","type":"boolean"}},"form":{"type":"string","description":"id внешнего <form>, к которому привязан скрытый input группы; на reset этой формы значение возвращается к начальному.","x-doc":{"group":"Control","type":"string"}},"loop":{"type":"boolean","description":"Зацикливает переход стрелками с последнего варианта на первый (в Radix включено по умолчанию).","x-doc":{"group":"Behavior","type":"boolean"}},"name":{"type":"string","description":"Имя поля для нативной отправки формы — попадает в скрытый input, который Radix рендерит внутри <form>.","x-doc":{"group":"Control","type":"string"}},"onValueChange":{"description":"Эмиттер выбранного option.value (контракт Radix Root); в field-версии сюда valueChangeAdapter кладёт onChange формы (пустой выбор → null).","x-doc":{"group":"Control","type":"((value: string) => void)","kind":"readonly"}},"options":{"type":"array","description":"Список вариантов выбора: \`value\` — записываемое значение, \`label\` — видимая подпись.","x-doc":{"group":"Options","type":"RadioOption[]","kind":"readonly"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"description":"Ось навигации стрелками: вертикальная слушает ↑/↓, горизонтальная — ←/→, без значения работают обе.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'"}},"required":{"type":"boolean","description":"Обязательность для нативной валидации формы; в ReFormer обязательность задаёт валидатор модели, а не этот проп.","x-doc":{"group":"State","type":"boolean"}},"value":{"type":"string","description":"Выбранный option.value, null — ничего не выбрано; в форме резолвится seam'ом.","x-doc":{"group":"Control","type":"string | null","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"RadioGroup","palette":false},{"name":"Resizable","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Resizable","properties":{"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultLayout":{"type":"object","description":"Начальная раскладка группы — карта «id панели → доля»; ею восстанавливают сохранённые размеры между перезагрузками страницы.","x-doc":{"group":"Behavior","type":"Layout","kind":"readonly"}},"direction":{"type":"string","enum":["horizontal","vertical"],"default":"horizontal","description":"Направление разделения панелей.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'","kind":"enum"}},"disableCursor":{"type":"boolean","description":"Отключает подмену курсора при перетаскивании для всех панелей и разделителей этой группы.","x-doc":{"group":"Behavior","type":"boolean"}},"disabled":{"type":"boolean","description":"Полностью запрещает изменение размеров внутри группы.","x-doc":{"group":"State","type":"boolean"}},"elementRef":{"description":"Ref на корневой \`div\` группы.","x-doc":{"group":"Control","type":"Ref<HTMLDivElement | null>","kind":"readonly"}},"groupRef":{"description":"Ref на императивный API группы: \`getLayout\` и \`setLayout\`.","x-doc":{"group":"Control","type":"Ref<GroupImperativeHandle | null>","kind":"readonly"}},"id":{"type":"string","description":"Uniquely identifies this group within an application. Falls back to \`useId\` when not provided. ℹ️ This value will also be assigned to the \`data-group\` attribute.","x-doc":{"group":"Behavior","type":"string"}},"onLayoutChange":{"description":"Called when the Group's layout is changing. ⚠️ For layout changes caused by pointer events, this method is called each time the pointer is moved. For most cases, it is recommended to use the \`onLayoutChanged\` callback instead.","x-doc":{"group":"Behavior","type":"((layout: Layout) => void | undefined)","kind":"readonly"}},"onLayoutChanged":{"description":"Called after the Group's layout has been changed. ℹ️ For layout changes caused by pointer events, this method is not called until the pointer has been released. This method is recommended when saving layouts to some storage api. ℹ️ The second argument contains meta information about the layout change. The \`isUserInteraction\` attribute signals whether the resize was caused by direct user input. It is true for resizes caused by pointer or keyboard input and false for other triggers (e.g. imperative API calls, initial mount, etc.)","x-doc":{"group":"Behavior","type":"((layout: Layout, meta: LayoutChangedMeta) => void)","kind":"readonly"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"description":"Ось, вдоль которой выстроены панели и по которой они меняют размер; по умолчанию горизонтальная.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'"}},"resizeTargetMinimumSize":{"type":"object","description":"Минимальный размер зоны захвата в пикселях, отдельно для грубого указателя (палец) и точного (мышь) — защита от промахов.","x-doc":{"group":"Behavior","type":"{ coarse: number; fine: number; }","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","DOMAttributes","HTMLAttributes"],"packages":["react-resizable-panels"]}}},{"name":"ResizableHandle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Запрещает тянуть разделитель; соседние панели всё ещё могут изменить размер косвенно — для полного запрета отключите и саму панель.","x-doc":{"group":"State","type":"boolean"}},"disableDoubleClick":{"type":"boolean","description":"Отключает сброс соседней панели к её \`defaultSize\` по двойному клику на разделителе.","x-doc":{"group":"Behavior","type":"boolean"}},"elementRef":{"description":"Ref на корневой \`div\` разделителя.","x-doc":{"group":"Control","type":"Ref<HTMLDivElement>","kind":"readonly"}},"id":{"type":"string","description":"Uniquely identifies the separator within the parent group. Falls back to \`useId\` when not provided. ℹ️ This value will also be assigned to the \`data-separator\` attribute.","x-doc":{"group":"Behavior","type":"string"}},"withHandle":{"type":"boolean","description":"Собственный проп обёртки (не из react-resizable-panels): рисует по центру разделителя «хват» — GripVerticalIcon в рамке; на поведение не влияет, только делает зону перетаскивания видимой.","x-doc":{"group":"Behavior","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","DOMAttributes","HTMLAttributes"],"packages":["react-resizable-panels"]}},"compoundParent":"Resizable"},{"name":"ResizablePanel","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collapsedSize":{"description":"Размер панели в свёрнутом состоянии; по умолчанию 0%.","x-doc":{"group":"Behavior","type":"string | number","kind":"readonly"}},"collapsible":{"type":"boolean","description":"Разрешает панели сворачиваться: при уменьшении ниже \`minSize\` она схлопывается до \`collapsedSize\`.","x-doc":{"group":"Behavior","type":"boolean"}},"defaultSize":{"description":"Начальный размер панели: число — пиксели, строка без единиц — проценты, строка с единицей (\`px\`, \`%\`, \`em\`, \`rem\`, \`vh\`, \`vw\`) — как указано; без него место делится между панелями поровну.","x-doc":{"group":"Behavior","type":"string | number","kind":"readonly"}},"disabled":{"type":"boolean","description":"Панель не меняет размер ни напрямую, ни при перетаскивании соседних разделителей.","x-doc":{"group":"State","type":"boolean"}},"elementRef":{"description":"Ref на корневой \`div\` панели.","x-doc":{"group":"Control","type":"Ref<HTMLDivElement | null>","kind":"readonly"}},"groupResizeBehavior":{"type":"string","enum":["preserve-relative-size","preserve-pixel-size"],"description":"Что панель сохраняет при изменении размера всей группы — свою долю от группы или свой размер в пикселях; хотя бы одна панель в группе должна сохранять долю.","x-doc":{"group":"Behavior","type":"'preserve-relative-size' | 'preserve-pixel-size'"}},"id":{"type":"string","description":"Uniquely identifies this panel within the parent group. Falls back to \`useId\` when not provided. ℹ️ This prop is used to associate persisted group layouts with the original panel. ℹ️ This value will also be assigned to the \`data-panel\` attribute.","x-doc":{"group":"Behavior","type":"string"}},"maxSize":{"description":"Верхняя граница размера панели (по умолчанию «100%»); единицы читаются по тем же правилам, что у \`defaultSize\`.","x-doc":{"group":"Behavior","type":"string | number","kind":"readonly"}},"minSize":{"description":"Нижняя граница размера панели (по умолчанию 0%); единицы читаются по тем же правилам, что у \`defaultSize\`.","x-doc":{"group":"Behavior","type":"string | number","kind":"readonly"}},"onResize":{"description":"Called when panel sizes change.","x-doc":{"group":"Behavior","type":"((panelSize: PanelSize, id: string | number | undefined, prevPanelSize: PanelSize | undefined) => void)","kind":"readonly"}},"panelRef":{"description":"Ref на императивный API панели: \`collapse\`, \`expand\`, \`getSize\`, \`isCollapsed\`, \`resize\`.","x-doc":{"group":"Control","type":"Ref<PanelImperativeHandle | null>","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","DOMAttributes","HTMLAttributes"],"packages":["react-resizable-panels"]}},"compoundParent":"Resizable"},{"name":"ResizablePanelGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultLayout":{"type":"object","description":"Начальная раскладка группы — карта «id панели → доля»; ею восстанавливают сохранённые размеры между перезагрузками страницы.","x-doc":{"group":"Behavior","type":"Layout","kind":"readonly"}},"disableCursor":{"type":"boolean","description":"Отключает подмену курсора при перетаскивании для всех панелей и разделителей этой группы.","x-doc":{"group":"Behavior","type":"boolean"}},"disabled":{"type":"boolean","description":"Полностью запрещает изменение размеров внутри группы.","x-doc":{"group":"State","type":"boolean"}},"elementRef":{"description":"Ref на корневой \`div\` группы.","x-doc":{"group":"Control","type":"Ref<HTMLDivElement | null>","kind":"readonly"}},"groupRef":{"description":"Ref на императивный API группы: \`getLayout\` и \`setLayout\`.","x-doc":{"group":"Control","type":"Ref<GroupImperativeHandle | null>","kind":"readonly"}},"id":{"type":"string","description":"Uniquely identifies this group within an application. Falls back to \`useId\` when not provided. ℹ️ This value will also be assigned to the \`data-group\` attribute.","x-doc":{"group":"Behavior","type":"string"}},"onLayoutChange":{"description":"Called when the Group's layout is changing. ⚠️ For layout changes caused by pointer events, this method is called each time the pointer is moved. For most cases, it is recommended to use the \`onLayoutChanged\` callback instead.","x-doc":{"group":"Behavior","type":"((layout: Layout) => void | undefined)","kind":"readonly"}},"onLayoutChanged":{"description":"Called after the Group's layout has been changed. ℹ️ For layout changes caused by pointer events, this method is not called until the pointer has been released. This method is recommended when saving layouts to some storage api. ℹ️ The second argument contains meta information about the layout change. The \`isUserInteraction\` attribute signals whether the resize was caused by direct user input. It is true for resizes caused by pointer or keyboard input and false for other triggers (e.g. imperative API calls, initial mount, etc.)","x-doc":{"group":"Behavior","type":"((layout: Layout, meta: LayoutChangedMeta) => void)","kind":"readonly"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"description":"Ось, вдоль которой выстроены панели и по которой они меняют размер; по умолчанию горизонтальная.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'"}},"resizeTargetMinimumSize":{"type":"object","description":"Минимальный размер зоны захвата в пикселях, отдельно для грубого указателя (палец) и точного (мышь) — защита от промахов.","x-doc":{"group":"Behavior","type":"{ coarse: number; fine: number; }","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","DOMAttributes","HTMLAttributes"],"packages":["react-resizable-panels"]}},"compoundParent":"Resizable"},{"name":"ScrollArea","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"ScrollArea","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление чтения контента — задаёт сторону, у которой встаёт вертикальная полоса, и знак горизонтальной прокрутки.","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'"}},"scrollHideDelay":{"type":"number","description":"Задержка скрытия скроллбаров (мс) — для type=hover/scroll.","x-doc":{"group":"Behavior","type":"number"},"default":600},"type":{"type":"string","enum":["auto","always","scroll","hover"],"description":"Когда показывать скроллбары.","x-doc":{"group":"Behavior","type":"'auto' | 'always' | 'scroll' | 'hover'","kind":"enum"},"default":"hover"}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"ScrollBar","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держит полосу в DOM даже в скрытом состоянии — нужно, когда её появлением управляет внешняя анимация.","x-doc":{"group":"Behavior","type":"true"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"default":"vertical","description":"Ось полосы: вертикальная у правого края области или горизонтальная у нижнего.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"palette":false},{"name":"Section","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Section","properties":{"className":{"type":"string","description":"Доп. CSS-класс контейнера \`<section>\` (напр. \`grid grid-cols-2 gap-4\`).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"title":{"type":"string","description":"Заголовок секции. Не задан — заголовок не рендерится (только обёртка).","x-doc":{"group":"Textfield","type":"string"}},"titleAs":{"type":"string","enum":["h1","h2","h3","h4","h5","h6"],"default":"h3","description":"HTML-элемент заголовка (уровень h1-h6).","x-doc":{"group":"Behavior","type":"'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'","kind":"enum"}},"titleClassName":{"type":"string","description":"Доп. CSS-класс заголовка.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["DOMAttributes"],"packages":[]}}},{"name":"Select","role":"field","exportName":"SelectField","propsSchema":{"type":"object","properties":{"autoComplete":{"type":"string","description":"Подсказка браузеру для автозаполнения — пробрасывается в скрытый нативный input Radix.","x-doc":{"group":"Behavior","type":"string"}},"className":{"type":"string","description":"Доп. CSS-класс триггера.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"clearable":{"type":"boolean","default":false,"description":"Показывать крестик очистки (сброс в null).","x-doc":{"group":"Behavior","type":"boolean"}},"defaultOpen":{"type":"boolean","description":"Не действует: дропдаун переведён в контролируемое состояние внутри SelectAsync.","x-doc":{"group":"State","type":"boolean"}},"defaultValue":{"type":"string","description":"Не действует: Root всегда получает контролируемый value от SelectAsync.","x-doc":{"group":"Control","type":"string"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление чтения — влияет на раскладку и навигацию с клавиатуры.","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'"}},"form":{"type":"string","description":"id внешней формы, к которой привязывается скрытый нативный input со значением.","x-doc":{"group":"Control","type":"string"}},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Control","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"name":{"type":"string","description":"Имя поля для нативной отправки формы — под ним значение попадёт в FormData.","x-doc":{"group":"Control","type":"string"}},"onOpenChange":{"description":"Не действует: состояние дропдауна принадлежит SelectAsync, и свой обработчик он ставит после спреда пропсов — о закрытии компонент сообщает через onBlur.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Не действует: состояние дропдауна принадлежит SelectAsync и перекрывает проп после спреда.","x-doc":{"group":"State","type":"boolean"}},"options":{"type":"array","description":"Inline-опции. Одинаковый group объединяется в секцию SelectLabel.","x-doc":{"group":"Options","type":"Array<{ value; label; group? }>","kind":"readonly"},"items":{"type":"object","required":["value","label"],"additionalProperties":false,"properties":{"value":{"type":["string","number"]},"label":{"type":"string"},"group":{"type":"string"}}}},"placeholder":{"type":"string","description":"Подсказка в триггере.","x-doc":{"group":"Textfield","type":"string"},"default":"Select an option..."},"required":{"type":"boolean","description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"},"default":false},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Выбранное значение (option.value). null — ничего не выбрано."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Выбор; при очистке приходит null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."},"resource":{"group":"Options","type":"ResourceConfig<unknown>","description":"Асинхронный источник опций (static / preload / partial). В JSON-форме недостижим: требует функцию load."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","RefAttributes"],"packages":["@radix-ui/react-select"]}}},{"name":"SelectAsync","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"autoComplete":{"type":"string","description":"Подсказка браузеру для автозаполнения — пробрасывается в скрытый нативный input Radix.","x-doc":{"group":"Behavior","type":"string"}},"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"clearable":{"type":"boolean","default":false,"description":"Показывать кнопку очистки значения: сброс возвращает поле в пустое состояние (\`null\`).","x-doc":{"group":"Behavior","type":"boolean"}},"defaultOpen":{"type":"boolean","description":"Не действует: дропдаун переведён в контролируемое состояние внутри SelectAsync.","x-doc":{"group":"State","type":"boolean"}},"defaultValue":{"type":"string","description":"Не действует: Root всегда получает контролируемый value от SelectAsync.","x-doc":{"group":"Control","type":"string"}},"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление чтения — влияет на раскладку и навигацию с клавиатуры.","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'"}},"disabled":{"type":"boolean","description":"Блокировка поля; форма задаёт её через control.disable()/enable(), а не через componentProps.","x-doc":{"group":"State","type":"boolean"}},"form":{"type":"string","description":"id внешней формы, к которой привязывается скрытый нативный input со значением.","x-doc":{"group":"Control","type":"string"}},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Control","type":"string"}},"name":{"type":"string","description":"Имя поля для нативной отправки формы — под ним значение попадёт в FormData.","x-doc":{"group":"Control","type":"string"}},"onOpenChange":{"description":"Не действует: состояние дропдауна принадлежит SelectAsync, и свой обработчик он ставит после спреда пропсов — о закрытии компонент сообщает через onBlur.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Не действует: состояние дропдауна принадлежит SelectAsync и перекрывает проп после спреда.","x-doc":{"group":"State","type":"boolean"}},"options":{"type":"array","description":"Список вариантов выбора: \`value\` — записываемое значение, \`label\` — видимая подпись.","x-doc":{"group":"Options","type":"{ value: string | number; label: string; group?: string | undefined; }[]","kind":"readonly"}},"placeholder":{"type":"string","description":"Подсказка, видимая пока значение не задано.","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","description":"Делает скрытый нативный input обязательным для нативной валидации формы.","x-doc":{"group":"State","type":"boolean"}},"resource":{"type":"object","description":"Асинхронный источник опций (static / preload / partial); при заданном options приоритет у options.","x-doc":{"group":"Options","type":"ResourceConfig<unknown>","kind":"readonly"}},"value":{"type":"string","description":"Выбранное значение (строка из \`option.value\`). \`null\` — ничего не выбрано.","x-doc":{"group":"Control","type":"string | null"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","RefAttributes"],"packages":["@radix-ui/react-select"]}},"compoundParent":"Select","palette":false},{"name":"SelectContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["center","end","start"],"default":"center","description":"Выравнивание слоя вдоль выбранной стороны якоря — по началу, центру или концу.","x-doc":{"group":"Behavior","type":"'center' | 'end' | 'start'"}},"alignOffset":{"type":"number","description":"Сдвиг всплывающего слоя вдоль оси выравнивания, в пикселях от точки start/end.","x-doc":{"group":"Behavior","type":"number"}},"arrowPadding":{"type":"number","description":"Зона у углов слоя, в которую не заходит стрелка-указатель, в пикселях — чтобы стрелка не наезжала на скруглённые края.","x-doc":{"group":"Behavior","type":"number"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"avoidCollisions":{"type":"boolean","description":"Автоматически смещать и переворачивать слой, когда он не помещается в границах видимости; при выключении сторона и выравнивание соблюдаются буквально.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collisionBoundary":{"description":"Элемент или набор элементов, по границам которых считаются столкновения; по умолчанию границей служит вьюпорт.","x-doc":{"group":"Behavior","type":"Boundary | Boundary[]","kind":"readonly"}},"collisionPadding":{"description":"Отступ от границ столкновения, на котором слой уже считается упёршимся; задаётся общим числом пикселей или отдельно по сторонам.","x-doc":{"group":"Behavior","type":"number | Partial<Record<\\"top\\" | \\"bottom\\" | \\"left\\" | \\"right\\", number>>","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое в DOM даже у закрытого списка — нужно внешним библиотекам анимации.","x-doc":{"group":"Behavior","type":"true"}},"header":{"description":"ReFormer-расширение: нескроллящаяся шапка над списком (например, поле поиска).","x-doc":{"group":"Control","type":"ReactNode","kind":"readonly"}},"hideWhenDetached":{"type":"boolean","description":"Скрывать слой, когда его якорь полностью ушёл из видимой области — например, прокрутился за пределы контейнера.","x-doc":{"group":"Behavior","type":"boolean"}},"onCloseAutoFocus":{"description":"Event handler called when auto-focusing on close. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onEscapeKeyDown":{"description":"Event handler called when the escape key is down. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Event handler called when the a \`pointerdown\` event happens outside of the \`DismissableLayer\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}},"onViewportScroll":{"description":"ReFormer-расширение: обработчик прокрутки viewport-а со списком (для infinite-scroll).","x-doc":{"group":"Behavior","type":"UIEventHandler<HTMLDivElement>","kind":"readonly"}},"position":{"type":"string","enum":["item-aligned","popper"],"default":"item-aligned","description":"Схема позиционирования: item-aligned совмещает выбранный пункт с триггером, popper ставит список рядом как поповер.","x-doc":{"group":"Behavior","type":"'item-aligned' | 'popper'"}},"side":{"type":"string","enum":["top","bottom","left","right"],"description":"Предпочитаемая сторона якоря, с которой раскрывается слой; при нехватке места и включённом avoidCollisions сторона меняется автоматически.","x-doc":{"group":"Behavior","type":"'top' | 'bottom' | 'left' | 'right'"}},"sideOffset":{"type":"number","description":"Зазор между слоем и якорем по выбранной стороне, в пикселях.","x-doc":{"group":"Behavior","type":"number"}},"sticky":{"type":"string","enum":["partial","always"],"description":"Поведение слоя при уходе якоря: \`partial\` — держаться, пока якорь виден хотя бы частично, \`always\` — оставаться в границах в любом случае.","x-doc":{"group":"Behavior","type":"'partial' | 'always'"}},"updatePositionStrategy":{"type":"string","enum":["optimized","always"],"description":"Частота пересчёта позиции: \`optimized\` — по значимым событиям (скролл, ресайз), \`always\` — на каждом кадре анимации, точнее и дороже.","x-doc":{"group":"Behavior","type":"'optimized' | 'always'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Select","palette":false},{"name":"SelectGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Select","palette":false},{"name":"SelectItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"disabled":{"type":"boolean","description":"Пункт нельзя выбрать; он пропускается при навигации с клавиатуры.","x-doc":{"group":"State","type":"boolean"}},"textValue":{"type":"string","description":"Текст пункта для поиска с клавиатуры (typeahead), когда содержимое нетекстовое.","x-doc":{"group":"Control","type":"string"}},"value":{"type":"string","description":"Значение пункта — именно оно уходит в Select при выборе; обязательно и уникально в списке.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Select","palette":false},{"name":"SelectLabel","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Select","palette":false},{"name":"SelectScrollDownButton","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Select","palette":false},{"name":"SelectScrollUpButton","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Select","palette":false},{"name":"SelectSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Select","palette":false},{"name":"SelectTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"size":{"type":"string","enum":["sm","default"],"default":"default","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'sm' | 'default'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Select","palette":false},{"name":"SelectValue","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"placeholder":{"description":"Что показывать в триггере, пока значение не выбрано.","x-doc":{"group":"Textfield","type":"ReactNode","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Select","palette":false},{"name":"Separator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Separator","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс разделителя (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"decorative":{"type":"boolean","default":true,"description":"Декоративный ли разделитель. true (по умолчанию) — скрыт от AT; false — семантический separator.","x-doc":{"group":"Behavior","type":"boolean","kind":"boolean"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"default":"horizontal","description":"Ориентация разделителя: горизонтальный (по умолчанию) или вертикальный.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'","kind":"enum"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"Sheet","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Sheet","properties":{"defaultOpen":{"type":"boolean","description":"Открыта ли панель изначально (неуправляемый режим).","x-doc":{"group":"State","type":"boolean"},"default":false},"modal":{"type":"boolean","description":"Модальный режим — блокирует взаимодействие с фоном.","x-doc":{"group":"Behavior","type":"boolean"},"default":true},"onOpenChange":{"description":"Получает новое состояние при каждой попытке открыть или закрыть; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и компонент застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Управляемое состояние раскрытия: пока проп передан, компонент не меняет его сам и ждёт обновления снаружи.","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-dialog"]}}},{"name":"SheetClose","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sheet","palette":false},{"name":"SheetContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"deferPointerDownOutside":{"type":"boolean","description":"Откладывать реакцию на нажатие вне слоя до события click, чтобы внешний код успел остановить всплытие и отменить закрытие.","x-doc":{"group":"Behavior","type":"boolean"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в закрытом состоянии — нужно, когда появлением и скрытием управляет внешняя анимационная библиотека.","x-doc":{"group":"Behavior","type":"true"}},"onCloseAutoFocus":{"description":"Event handler called when auto-focusing on close. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onEscapeKeyDown":{"description":"Event handler called when the escape key is down. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onFocusOutside":{"description":"Event handler called when the focus moves outside of the \`DismissableLayer\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent) => void)","kind":"readonly"}},"onInteractOutside":{"description":"Event handler called when an interaction happens outside the \`DismissableLayer\`. Specifically, when a \`pointerdown\` event happens outside or focus moves outside of it. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: FocusOutsideEvent | PointerDownOutsideEvent) => void)","kind":"readonly"}},"onOpenAutoFocus":{"description":"Event handler called when auto-focusing on open. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: Event) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Event handler called when the a \`pointerdown\` event happens outside of the \`DismissableLayer\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}},"showCloseButton":{"type":"boolean","default":true,"description":"Показывать ли кнопку закрытия; значение по умолчанию зависит от части компонента.","x-doc":{"group":"Behavior","type":"boolean"}},"side":{"type":"string","enum":["top","right","bottom","left"],"default":"right","description":"Сторона, к которой прижимается элемент; набор допустимых сторон и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'top' | 'right' | 'bottom' | 'left'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sheet","palette":false},{"name":"SheetDescription","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sheet","palette":false},{"name":"SheetFooter","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sheet","palette":false},{"name":"SheetHeader","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sheet","palette":false},{"name":"SheetOverlay","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в закрытом состоянии — нужно, когда появлением и скрытием управляет внешняя анимационная библиотека.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sheet","palette":false},{"name":"SheetPortal","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"container":{"type":"object","description":"DOM-узел, в который порталится содержимое; по умолчанию — document.body.","x-doc":{"group":"Behavior","type":"Element | DocumentFragment | null","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать содержимое смонтированным и в закрытом состоянии — нужно, когда появлением и скрытием управляет внешняя анимационная библиотека.","x-doc":{"group":"Behavior","type":"true"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-dialog"]}},"compoundParent":"Sheet","palette":false},{"name":"SheetTitle","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sheet","palette":false},{"name":"SheetTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sheet","palette":false},{"name":"Sidebar","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Sidebar","properties":{"className":{"type":"string","description":"Доп. CSS-класс (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collapsible":{"type":"string","enum":["offcanvas","icon","none"],"default":"offcanvas","description":"Режим сворачивания.","x-doc":{"group":"Behavior","type":"'offcanvas' | 'icon' | 'none'","kind":"enum"}},"side":{"type":"string","enum":["left","right"],"default":"left","description":"Сторона размещения.","x-doc":{"group":"Behavior","type":"'left' | 'right'","kind":"enum"}},"variant":{"type":"string","enum":["sidebar","floating","inset"],"default":"sidebar","description":"Вариант оформления.","x-doc":{"group":"Behavior","type":"'sidebar' | 'floating' | 'inset'","kind":"enum"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"SidebarContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarFooter","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarGroup","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarGroupAction","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","default":false,"description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarGroupContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarGroupLabel","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","default":false,"description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarHeader","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarInput","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","InputHTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarInset","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarMenu","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarMenuAction","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","default":false,"description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"showOnHover":{"type":"boolean","default":false,"description":"Держит действие скрытым, пока по пункту меню не прошли курсором или фокусом; на ширинах меньше md оно видно всегда.","x-doc":{"group":"Behavior","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarMenuBadge","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarMenuButton","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","default":false,"description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"isActive":{"type":"boolean","default":false,"description":"Элемент отмечен как текущий: подсвечивается и получает data-active, у ссылок дополнительно aria-current.","x-doc":{"group":"State","type":"boolean"}},"size":{"type":"string","enum":["default","sm","lg"],"default":"default","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'sm' | 'lg'"}},"tooltip":{"description":"Подсказка справа от пункта, показываемая только когда сайдбар свёрнут: строка или готовый набор пропсов TooltipContent.","x-doc":{"group":"Control","type":"string | (TooltipContentProps & RefAttributes<HTMLDivElement>)","kind":"readonly"}},"variant":{"type":"string","enum":["default","outline"],"default":"default","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'default' | 'outline'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarMenuItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","LiHTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarMenuSkeleton","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"showIcon":{"type":"boolean","default":false,"description":"Добавляет квадратный плейсхолдер иконки слева от полосы-заглушки текста.","x-doc":{"group":"Behavior","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarMenuSub","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarMenuSubButton","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","default":false,"description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"isActive":{"type":"boolean","default":false,"description":"Элемент отмечен как текущий: подсвечивается и получает data-active, у ссылок дополнительно aria-current.","x-doc":{"group":"State","type":"boolean"}},"size":{"type":"string","enum":["default","sm","lg"],"default":"md","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'sm' | 'lg'"}}},"x-inherits":{"react":["AnchorHTMLAttributes","AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarMenuSubItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","LiHTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarProvider","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultOpen":{"type":"boolean","default":true,"description":"Начальное состояние панели в неуправляемом режиме; дальнейшие переключения провайдер хранит сам и пишет в cookie \`sidebar_state\`.","x-doc":{"group":"State","type":"boolean"}},"onOpenChange":{"description":"Получает новое состояние при каждом переключении (триггер, рейл, Cmd/Ctrl+B); если задан, внутренний state больше не обновляется.","x-doc":{"group":"State","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Переводит панель в управляемый режим — состояние берётся отсюда, а не из внутреннего (мобильный Sheet при этом остаётся на собственном состоянии).","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarRail","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"decorative":{"type":"boolean","description":"Разделитель считается чисто декоративным и убирается из дерева доступности; иначе он объявляется семантическим разделителем.","x-doc":{"group":"Behavior","type":"boolean"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"description":"Ориентация разделителя — горизонтальная или вертикальная линия.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"SidebarTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: компонент не создаёт свой тег, а примешивает классы и пропсы в единственный дочерний узел — так меняют тег или оборачивают ссылкой.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"size":{"type":"string","enum":["default","sm","lg"],"default":"default","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'sm' | 'lg'"}},"variant":{"type":"string","enum":["default","outline"],"default":"default","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'default' | 'outline'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Sidebar","palette":false},{"name":"Skeleton","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Skeleton","properties":{"className":{"type":"string","description":"Доп. CSS-класс (Tailwind) — задаёт размеры плейсхолдера (h-*/w-*).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"Slider","role":"field","exportName":"SliderField","propsSchema":{"type":"object","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс слайдера (SliderPrimitive.Root).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultValue":{"type":"array","description":"Начальные позиции ползунков в неконтролируемом режиме; в field-версии не действует — форма всегда передаёт value.","x-doc":{"group":"Control","type":"number[]"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление письма: при rtl шкала и стрелки клавиатуры зеркалятся; по умолчанию наследуется от DirectionProvider.","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'"}},"form":{"type":"string","description":"id внешней формы, к которой привязываются скрытые input'ы слайдера, если он лежит вне <form>.","x-doc":{"group":"Control","type":"string"}},"inverted":{"type":"boolean","description":"Отсчёт от противоположного конца шкалы — заливка и рост значения идут в обратную сторону.","x-doc":{"group":"Behavior","type":"boolean"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"max":{"type":"number","default":100,"description":"Максимум диапазона (Radix max).","x-doc":{"group":"Behavior","type":"number"}},"min":{"type":"number","default":0,"description":"Минимум диапазона (Radix min).","x-doc":{"group":"Behavior","type":"number"}},"minStepsBetweenThumbs":{"type":"number","description":"Минимальный зазор между соседними ползунками, измеряемый в шагах; имеет смысл только при нескольких ползунках.","x-doc":{"group":"Behavior","type":"number"}},"name":{"type":"string","description":"Имя скрытых input'ов для нативной отправки формы; при нескольких ползунках Radix добавляет суффикс [].","x-doc":{"group":"Control","type":"string"}},"onValueChange":{"description":"Эмиттер позиций ползунков (number[], контракт Radix Root) на каждый шаг перетаскивания; в field-версии сюда sliderAdapter кладёт onChange формы, сводя массив к первому числу.","x-doc":{"group":"Control","type":"((value: number[]) => void)","kind":"readonly"}},"onValueCommit":{"description":"Срабатывает по завершении жеста (отпускание ползунка, отжатие клавиши), а не на каждый шаг — точка для дорогих реакций вроде запроса на сервер; шов формы это не он, значение отдаёт onValueChange.","x-doc":{"group":"Behavior","type":"((value: number[]) => void)","kind":"readonly"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"description":"Раскладка шкалы: горизонтальная растягивается по ширине, вертикальная требует заданной высоты контейнера.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"step":{"type":"number","description":"Шаг изменения значения (Radix step).","x-doc":{"group":"Behavior","type":"number"},"default":1},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"number | null","description":"Значение слайдера (одно-thumb). null трактуется как min. Резолвится формой."},"onChange":{"group":"Control","type":"(value: number | null) => void","description":"Изменение; эмитит первое число массива Radix (onValueChange → arr[0])."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"Spinner","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Spinner","properties":{"className":{"type":"string","description":"Доп. CSS-класс (Tailwind); размер задаётся через size-* (по умолчанию size-4).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","RefAttributes","SVGAttributes"],"packages":[]}}},{"name":"StepIndicator","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"completedSteps":{"type":"array","description":"Completed step numbers","x-doc":{"group":"Behavior","type":"number[]"}},"currentStep":{"type":"number","description":"Current step number","x-doc":{"group":"Behavior","type":"number"}},"goToStep":{"description":"Navigate to a specific step","x-doc":{"group":"Behavior","type":"(step: number) => boolean","kind":"readonly"}},"navAriaLabel":{"type":"string","default":"Шаги формы","description":"Aria-label контейнера навигации. По умолчанию «Шаги формы».","x-doc":{"group":"Behavior","type":"string"}},"stepAriaLabel":{"description":"Кастомный шаблон aria-label для шага. Получает {step}.","x-doc":{"group":"Behavior","type":"((step: FormWizardIndicatorStepWithState) => string)","kind":"readonly"}},"steps":{"type":"array","description":"Steps with their current state","x-doc":{"group":"Behavior","type":"FormWizardIndicatorStepWithState[]"}},"totalSteps":{"type":"number","description":"Total number of steps","x-doc":{"group":"Behavior","type":"number"}}}},"palette":false},{"name":"Switch","role":"field","exportName":"SwitchField","propsSchema":{"type":"object","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"checked":{"type":"boolean","description":"Включён ли переключатель; в field-версии это шов — значение подставляет форма (checkedAdapter: value → checked).","x-doc":{"group":"State","type":"boolean"}},"className":{"type":"string","description":"Доп. CSS-класс переключателя.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultChecked":{"type":"boolean","description":"Стартовое состояние в неуправляемом режиме — работает только без checked, то есть у базового Switch вне формы.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"label":{"type":"string","description":"Подпись справа от переключателя (inline-раскладка; FormField верхнюю метку не рисует).","x-doc":{"group":"Textfield","type":"string"}},"onCheckedChange":{"description":"Эмиттер нового состояния переключателя (boolean, контракт Radix Root); в field-версии сюда checkedAdapter кладёт onChange формы.","x-doc":{"group":"Control","type":"((checked: boolean) => void)","kind":"readonly"}},"required":{"type":"boolean","description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"},"default":false},"size":{"type":"string","enum":["sm","default"],"default":"default","description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'sm' | 'default'"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"boolean","description":"Состояние переключателя (true — включён). Резолвится формой."},"onChange":{"group":"Control","type":"(value: boolean) => void","description":"Переключение; эмитит boolean (Radix onCheckedChange, indeterminate → false)."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"Table","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Table","properties":{"className":{"type":"string","description":"CSS-класс таблицы (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes","TableHTMLAttributes"],"packages":[]}}},{"name":"TableBody","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Table"},{"name":"TableCaption","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Table"},{"name":"TableCell","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes","TdHTMLAttributes"],"packages":[]}},"compoundParent":"Table"},{"name":"TableFooter","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Table"},{"name":"TableHead","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes","ThHTMLAttributes"],"packages":[]}},"compoundParent":"Table"},{"name":"TableHeader","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Table"},{"name":"TableRow","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Table"},{"name":"Tabs","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Tabs","properties":{"activationMode":{"type":"string","enum":["automatic","manual"],"default":"automatic","description":"Активировать вкладку при фокусе (automatic) или только по клику/Enter (manual).","x-doc":{"group":"Behavior","type":"'automatic' | 'manual'","kind":"enum"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс контейнера табов (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultValue":{"type":"string","description":"Значение вкладки, активной по умолчанию (uncontrolled).","x-doc":{"group":"Behavior","type":"string"}},"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление письма: задаёт, в какую сторону стрелки ← → двигают фокус по вкладкам.","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'"}},"onValueChange":{"description":"A function called when a new tab is selected","x-doc":{"group":"Behavior","type":"((value: string) => void)","kind":"readonly"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"default":"horizontal","description":"Ориентация раскладки табов.","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'","kind":"enum"}},"value":{"type":"string","description":"Активная вкладка при управлении извне; обновляется из onValueChange.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"TabsContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Держать панель в DOM, даже когда её вкладка неактивна — нужно для внешних анимаций.","x-doc":{"group":"Behavior","type":"true"}},"value":{"type":"string","description":"Значение вкладки, содержимое которой показывает панель.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Tabs"},{"name":"TabsList","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"loop":{"type":"boolean","description":"Зацикливать навигацию стрелками: с последней вкладки фокус уходит на первую.","x-doc":{"group":"Behavior","type":"boolean"}},"variant":{"type":"string","enum":["default","line"],"default":"default","description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'default' | 'line'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Tabs"},{"name":"TabsTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"CSS-класс части (Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"value":{"type":"string","description":"Значение вкладки — связывает кнопку с TabsContent.","x-doc":{"group":"Control","type":"string"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Tabs"},{"name":"Textarea","role":"field","exportName":"TextareaField","propsSchema":{"type":"object","properties":{"className":{"type":"string","description":"Доп. CSS-класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"placeholder":{"type":"string","description":"Подсказка внутри поля.","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"rows":{"type":"number","description":"Число видимых строк (HTML-атрибут rows).","x-doc":{"group":"Behavior","type":"number"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Значение поля. Пустой ввод → null."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Изменение. Пустой ввод → null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes","TextareaHTMLAttributes"],"packages":[]}}},{"name":"Toaster","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"CSS-класс контейнера тостов; передаётся после собственного класса обёртки, поэтому заменяет \\"toaster group\\", а не дополняет его.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"closeButton":{"type":"boolean","description":"Показывать на каждом тосте кнопку закрытия (по умолчанию выключено — тост уходит сам по duration или свайпом).","x-doc":{"group":"Behavior","type":"boolean"}},"containerAriaLabel":{"type":"string","description":"aria-label области тостов для скринридера (по умолчанию Notifications).","x-doc":{"group":"Control","type":"string"}},"dir":{"type":"string","enum":["rtl","ltr","auto"],"description":"Направление письма для раскладки тостов; auto и отсутствие значения берут направление из документа.","x-doc":{"group":"Behavior","type":"'rtl' | 'ltr' | 'auto'"}},"duration":{"type":"number","description":"Сколько миллисекунд тост держится до автозакрытия (по умолчанию 4000); отдельный вызов toast() может задать своё значение.","x-doc":{"group":"Behavior","type":"number"}},"expand":{"type":"boolean","description":"Держать стопку всегда развёрнутой вместо схлопнутых карточек, раскрывающихся при наведении.","x-doc":{"group":"Behavior","type":"boolean"}},"gap":{"type":"number","description":"Зазор между соседними тостами в стопке, в пикселях (по умолчанию 14).","x-doc":{"group":"Behavior","type":"number"}},"hotkey":{"type":"array","description":"Сочетание клавиш, переводящее фокус на область тостов — массив полей KeyboardEvent (по умолчанию altKey и KeyT).","x-doc":{"group":"Behavior","type":"string[]"}},"icons":{"type":"object","description":"Иконки статусов success/info/warning/error/loading и кнопки закрытия; переданный объект замещает набор lucide-иконок обёртки целиком.","x-doc":{"group":"Control","type":"ToastIcons","kind":"readonly"}},"id":{"type":"string","description":"Идентификатор области тостов: если задан, показываются только тосты, вызванные с тем же toasterId — так разводят несколько Toaster'ов на странице.","x-doc":{"group":"Control","type":"string"}},"invert":{"type":"boolean","description":"Инвертирует оформление тостов относительно текущей темы — тёмные на светлом фоне и наоборот.","x-doc":{"group":"Behavior","type":"boolean"}},"mobileOffset":{"description":"Отступ области тостов от краёв экрана на мобильной ширине: число, CSS-длина или объект по сторонам (по умолчанию 16px).","x-doc":{"group":"Behavior","type":"Offset","kind":"readonly"}},"offset":{"description":"Отступ области тостов от краёв окна: число, CSS-длина или объект по сторонам (по умолчанию 24px).","x-doc":{"group":"Behavior","type":"Offset","kind":"readonly"}},"position":{"type":"string","enum":["top-left","top-right","bottom-left","bottom-right","top-center","bottom-center"],"description":"Угол или край экрана, где копится стопка тостов (по умолчанию bottom-right); от него же зависят направления свайпа по умолчанию.","x-doc":{"group":"Behavior","type":"'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'top-center' | 'bottom-center'"}},"richColors":{"type":"boolean","description":"Красить тост в цвет статуса целиком вместо нейтрального фона с цветной иконкой.","x-doc":{"group":"Behavior","type":"boolean"}},"swipeDirections":{"type":"array","description":"В какие стороны тост можно смахнуть для закрытия; без значения выводятся из position.","x-doc":{"group":"Behavior","type":"SwipeDirection[]"}},"theme":{"type":"string","enum":["light","dark","system"],"description":"Цветовая схема тостов — светлая, тёмная или системная; обёртка задаёт system, значение вызывающей стороны его перекрывает.","x-doc":{"group":"Behavior","type":"'light' | 'dark' | 'system'"}},"toastOptions":{"type":"object","description":"Общие настройки каждого тоста — классы, стили, длительность, кнопка закрытия; переданный объект замещает toastOptions обёртки целиком, вместе с выравниванием иконки по первой строке.","x-doc":{"group":"Options","type":"ToastOptions","kind":"readonly"}},"visibleToasts":{"type":"number","description":"Сколько тостов показывается в стопке одновременно, остальные ждут очереди (по умолчанию 3).","x-doc":{"group":"Behavior","type":"number"}}},"x-inherits":{"react":[],"packages":["sonner"]}},"palette":false},{"name":"Toggle","role":"field","exportName":"ToggleField","propsSchema":{"type":"object","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс контрола (TogglePrimitive.Root).","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultPressed":{"type":"boolean","default":false,"description":"Начальное состояние неуправляемого toggle; в field-версии не действует — форма всегда передаёт pressed.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"onPressedChange":{"description":"The callback that fires when the state of the toggle changes.","x-doc":{"group":"Behavior","type":"((pressed: boolean) => void)","kind":"readonly"}},"pressed":{"type":"boolean","description":"The controlled state of the toggle.","x-doc":{"group":"State","type":"boolean"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"size":{"type":"string","enum":["default","sm","lg"],"default":"default","description":"Размер cva: default | sm | lg.","x-doc":{"group":"Control","type":"'default' | 'sm' | 'lg'","kind":"enum"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"variant":{"type":"string","enum":["default","outline"],"default":"default","description":"Стиль cva: default (заливка при нажатии) | outline (граница).","x-doc":{"group":"Control","type":"'default' | 'outline'","kind":"enum"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"boolean","description":"Состояние (true — нажат/pressed). undefined/null трактуется как false. Резолвится формой."},"onChange":{"group":"Control","type":"(value: boolean) => void","description":"Переключение; эмитит boolean (Radix onPressedChange)."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"ToggleGroup","role":"field","exportName":"ToggleGroupField","propsSchema":{"type":"object","properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс контейнера группы.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultValue":{"description":"Начальный выбор неуправляемой группы (той же формы, что value); дальше состояние живёт внутри Radix.","x-doc":{"group":"Control","type":"string | string[]","kind":"readonly"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"dir":{"type":"string","enum":["ltr","rtl"],"description":"Направление письма: определяет, в какую сторону стрелки двигают фокус; без значения наследуется от DirectionProvider или документа.","x-doc":{"group":"Behavior","type":"'ltr' | 'rtl'"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"loop":{"type":"boolean","description":"Зацикливать перемещение фокуса стрелками — с последней кнопки на первую и обратно.","x-doc":{"group":"Behavior","type":"boolean"}},"onValueChange":{"description":"The callback that fires when the value of the toggle group changes. The callback that fires when the state of the toggle group changes.","x-doc":{"group":"Behavior","type":"((value: string) => void) | ((value: string[]) => void)","kind":"readonly"}},"options":{"type":"array","items":{"type":"object","required":["value","label"],"additionalProperties":false,"properties":{"value":{"type":"string"},"label":{"type":"string"}}},"description":"Варианты выбора. Каждый рендерится как кнопка-переключатель.","x-doc":{"group":"Options","type":"Array<{ value; label }>","kind":"readonly"}},"orientation":{"type":"string","enum":["horizontal","vertical"],"description":"Ось группы для клавиатуры: задаёт, какая пара стрелок перемещает фокус, и проставляет aria-orientation (раскладку по-прежнему делает CSS).","x-doc":{"group":"Behavior","type":"'horizontal' | 'vertical'"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"rovingFocus":{"type":"boolean","default":true,"description":"Группа — один tab-stop: Tab входит в неё один раз, переключение между кнопками идёт стрелками; при выключении каждая кнопка становится отдельным tab-stop.","x-doc":{"group":"Behavior","type":"boolean"}},"size":{"type":"string","enum":["default","sm","lg"],"description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'sm' | 'lg'"}},"spacing":{"type":"number","default":0,"description":"Зазор между кнопками в единицах spacing-шкалы; 0 склеивает их в единый сегментированный контрол (общие скругления по краям, без внутренних границ).","x-doc":{"group":"Behavior","type":"number"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"type":{"type":"string","enum":["single","multiple"],"description":"Режим выбора: одна активная кнопка или несколько одновременно — от него зависит форма value/defaultValue (строка либо массив строк).","x-doc":{"group":"Behavior","type":"'single' | 'multiple'"}},"variant":{"type":"string","enum":["default","outline"],"description":"Визуальный стиль кнопок: плоские (default) или с рамкой (outline).","x-doc":{"group":"Control","type":"'default' | 'outline'"},"default":"default"}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Выбранное значение (option.value). null — ничего не выбрано."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Выбор варианта; пустой выбор → null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"ToggleGroupItem","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"size":{"type":"string","enum":["default","sm","lg"],"description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'sm' | 'lg'"}},"value":{"type":"string","description":"Идентификатор кнопки: именно он попадает в value группы при нажатии и должен быть уникален внутри неё.","x-doc":{"group":"Control","type":"string"}},"variant":{"type":"string","enum":["default","outline"],"description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'default' | 'outline'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"ToggleGroup","palette":false},{"name":"ToggleGroupOptions","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"className":{"type":"string","description":"Дополнительный CSS-класс: сливается с классами компонента через cn(), последним словом остаётся переданный класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Control","type":"string"}},"onValueChange":{"description":"Radix \`onValueChange(string)\` — сюда \`valueChangeAdapter\` кладёт эмиттер.","x-doc":{"group":"Control","type":"((value: string) => void)","kind":"readonly"}},"options":{"type":"array","description":"Список вариантов выбора: \`value\` — записываемое значение, \`label\` — видимая подпись.","x-doc":{"group":"Options","type":"ToggleGroupOption[]","kind":"readonly"}},"size":{"type":"string","enum":["default","sm","lg"],"description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'sm' | 'lg'"}},"value":{"type":"string","description":"Выбранное значение (single-режим Radix: \`value: string\`).","x-doc":{"group":"Behavior","type":"string"}},"variant":{"type":"string","enum":["default","outline"],"description":"Визуальный вариант оформления из cva-конфига; набор вариантов и значение по умолчанию у каждого компонента свои.","x-doc":{"group":"Behavior","type":"'default' | 'outline'"}}},"x-inherits":{"react":[],"packages":[]}},"compoundParent":"ToggleGroup","palette":false},{"name":"Tooltip","role":"container","propsSchema":{"type":"object","additionalProperties":true,"x-registryName":"Tooltip","properties":{"defaultOpen":{"type":"boolean","description":"Показан ли тултип изначально (неуправляемый режим).","x-doc":{"group":"State","type":"boolean"},"default":false},"delayDuration":{"type":"number","default":700,"description":"Задержка перед показом (мс).","x-doc":{"group":"Behavior","type":"number"}},"disableHoverableContent":{"type":"boolean","default":false,"description":"Скрывать тултип при уходе курсора с триггера (нельзя навести на сам тултип).","x-doc":{"group":"Behavior","type":"boolean"}},"onOpenChange":{"description":"Получает новое состояние при каждой попытке открыть или закрыть; в паре с \`open\` образует управляемый режим — без него внешнее значение не обновится и компонент застынет в заданном состоянии.","x-doc":{"group":"Behavior","type":"((open: boolean) => void)","kind":"readonly"}},"open":{"type":"boolean","description":"Показ тултипа в управляемом режиме: состоянием владеет родитель, изменения приходят в onOpenChange.","x-doc":{"group":"State","type":"boolean"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-tooltip"]}}},{"name":"TooltipContent","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"align":{"type":"string","enum":["center","end","start"],"description":"Выравнивание слоя вдоль выбранной стороны якоря — по началу, центру или концу.","x-doc":{"group":"Behavior","type":"'center' | 'end' | 'start'"}},"alignOffset":{"type":"number","description":"Сдвиг всплывающего слоя вдоль оси выравнивания, в пикселях от точки start/end.","x-doc":{"group":"Behavior","type":"number"}},"arrowPadding":{"type":"number","description":"Зона у углов слоя, в которую не заходит стрелка-указатель, в пикселях — чтобы стрелка не наезжала на скруглённые края.","x-doc":{"group":"Behavior","type":"number"}},"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"avoidCollisions":{"type":"boolean","description":"Автоматически смещать и переворачивать слой, когда он не помещается в границах видимости; при выключении сторона и выравнивание соблюдаются буквально.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"collisionBoundary":{"description":"Элемент или набор элементов, по границам которых считаются столкновения; по умолчанию границей служит вьюпорт.","x-doc":{"group":"Behavior","type":"Boundary | Boundary[]","kind":"readonly"}},"collisionPadding":{"description":"Отступ от границ столкновения, на котором слой уже считается упёршимся; задаётся общим числом пикселей или отдельно по сторонам.","x-doc":{"group":"Behavior","type":"number | Partial<Record<\\"top\\" | \\"bottom\\" | \\"left\\" | \\"right\\", number>>","kind":"readonly"}},"forceMount":{"type":"boolean","description":"Оставляет содержимое смонтированным при закрытом тултипе (для внешних библиотек анимации); в этом порте эффекта не даёт — внутренний Portal размонтирует его раньше.","x-doc":{"group":"Behavior","type":"true"}},"hideWhenDetached":{"type":"boolean","description":"Скрывать слой, когда его якорь полностью ушёл из видимой области — например, прокрутился за пределы контейнера.","x-doc":{"group":"Behavior","type":"boolean"}},"onEscapeKeyDown":{"description":"Event handler called when the escape key is down. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: KeyboardEvent) => void)","kind":"readonly"}},"onPointerDownOutside":{"description":"Event handler called when the a \`pointerdown\` event happens outside of the \`Tooltip\`. Can be prevented.","x-doc":{"group":"Behavior","type":"((event: PointerDownOutsideEvent) => void)","kind":"readonly"}},"side":{"type":"string","enum":["top","bottom","left","right"],"description":"Предпочитаемая сторона якоря, с которой раскрывается слой; при нехватке места и включённом avoidCollisions сторона меняется автоматически.","x-doc":{"group":"Behavior","type":"'top' | 'bottom' | 'left' | 'right'"}},"sideOffset":{"type":"number","default":0,"description":"Зазор между слоем и якорем по выбранной стороне, в пикселях.","x-doc":{"group":"Behavior","type":"number"}},"sticky":{"type":"string","enum":["partial","always"],"description":"Поведение слоя при уходе якоря: \`partial\` — держаться, пока якорь виден хотя бы частично, \`always\` — оставаться в границах в любом случае.","x-doc":{"group":"Behavior","type":"'partial' | 'always'"}},"updatePositionStrategy":{"type":"string","enum":["optimized","always"],"description":"Частота пересчёта позиции: \`optimized\` — по значимым событиям (скролл, ресайз), \`always\` — на каждом кадре анимации, точнее и дороже.","x-doc":{"group":"Behavior","type":"'optimized' | 'always'"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":["@radix-ui/react-tooltip"]}},"compoundParent":"Tooltip","palette":false},{"name":"TooltipProvider","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"delayDuration":{"type":"number","default":0,"description":"Задержка (мс) перед показом для всех тултипов провайдера; кит переопределяет дефолт Radix (700) на 0, то есть показывает сразу.","x-doc":{"group":"Behavior","type":"number"}},"disableHoverableContent":{"type":"boolean","default":false,"description":"Значение по умолчанию для тултипов провайдера: закрывать при уходе курсора с триггера, не давая навести на сам тултип.","x-doc":{"group":"Behavior","type":"boolean"}},"skipDelayDuration":{"type":"number","default":300,"description":"Окно (мс) после закрытия тултипа, в течение которого следующий открывается без задержки.","x-doc":{"group":"Behavior","type":"number"}}},"x-inherits":{"react":["DOMAttributes"],"packages":["@radix-ui/react-tooltip"]}},"compoundParent":"Tooltip","palette":false},{"name":"TooltipTrigger","role":"container","propsSchema":{"type":"object","additionalProperties":false,"properties":{"asChild":{"type":"boolean","description":"Слот-режим: вместо собственного элемента рендерится единственный дочерний узел, в него переносятся классы, обработчики и атрибуты доступности.","x-doc":{"group":"Behavior","type":"boolean","kind":"readonly"}},"className":{"type":"string","description":"Дополнительный CSS-класс корневого элемента: примешивается к собственным классам компонента, не заменяя их.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","ButtonHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}},"compoundParent":"Tooltip","palette":false},{"name":"TypographyBlockquote","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"TypographyBlockquote","properties":{"className":{"type":"string","description":"Доп. CSS-класс для «Цитата» (элемент <blockquote>, Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","BlockquoteHTMLAttributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"TypographyH1","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"TypographyH1","properties":{"className":{"type":"string","description":"Доп. CSS-класс для «Заголовок 1» (элемент <h1>, Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"TypographyH2","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"TypographyH2","properties":{"className":{"type":"string","description":"Доп. CSS-класс для «Заголовок 2» (элемент <h2>, Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"TypographyH3","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"TypographyH3","properties":{"className":{"type":"string","description":"Доп. CSS-класс для «Заголовок 3» (элемент <h3>, Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"TypographyH4","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"TypographyH4","properties":{"className":{"type":"string","description":"Доп. CSS-класс для «Заголовок 4» (элемент <h4>, Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"TypographyInlineCode","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"TypographyInlineCode","properties":{"className":{"type":"string","description":"Доп. CSS-класс для «Инлайн-код» (элемент <code>, Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"TypographyLarge","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"TypographyLarge","properties":{"className":{"type":"string","description":"Доп. CSS-класс для «Крупный текст» (элемент <div>, Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"TypographyLead","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"TypographyLead","properties":{"className":{"type":"string","description":"Доп. CSS-класс для «Лид-абзац» (элемент <p>, Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"TypographyList","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"TypographyList","properties":{"className":{"type":"string","description":"Доп. CSS-класс для «Список» (элемент <ul>, Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"TypographyMuted","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"TypographyMuted","properties":{"className":{"type":"string","description":"Доп. CSS-класс для «Приглушённый текст» (элемент <p>, Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"TypographyP","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"TypographyP","properties":{"className":{"type":"string","description":"Доп. CSS-класс для «Абзац» (элемент <p>, Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}},{"name":"TypographySmall","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"TypographySmall","properties":{"className":{"type":"string","description":"Доп. CSS-класс для «Мелкий текст» (элемент <small>, Tailwind).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","HTMLAttributes","RefAttributes"],"packages":[]}}}]`),Dn={$schema:Mn,version:wn,kit:Bn,components:jn},On="../../catalog/component-catalog.schema.json",Nn="2.0",_n={id:"reformer-ui-kit-11",label:"ReFormer UI Kit",package:"@reformer/ui-kit",version:"11.0.0",peerRanges:{"@reformer/cdk":">=1.0.0","@reformer/core":">=1.1.0","@reformer/renderer-react":">=1.0.0",react:"^18.0.0 || ^19.0.0","react-dom":"^18.0.0 || ^19.0.0"},infra:{fieldWrapper:"FormField",asyncBoundary:"AsyncBoundary"},adapters:{wizard:{symbol:"FormWizard",subpath:"form-wizard"},step:null},styles:{mode:"tokens"},codegen:{importSpecifier:"@reformer/ui-kit"}},Rn=JSON.parse(`[{"name":"Accordion","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"AccordionContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Accordion"},{"name":"AccordionItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Accordion"},{"name":"Alert","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"AlertDescription","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Alert"},{"name":"AlertDialog","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"AlertDialogAction","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"AlertDialog"},{"name":"AlertDialogCancel","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"AlertDialog"},{"name":"AlertDialogContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"AlertDialog"},{"name":"AlertDialogDescription","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"AlertDialog"},{"name":"AlertDialogFooter","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"AlertDialog"},{"name":"AlertDialogHeader","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"AlertDialog"},{"name":"AlertDialogMedia","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"AlertDialog"},{"name":"AlertDialogTitle","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"AlertDialog"},{"name":"AlertTitle","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Alert"},{"name":"AspectRatio","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"AsyncBoundary","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"Attachment","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"AttachmentAction","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Attachment"},{"name":"AttachmentActions","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Attachment"},{"name":"AttachmentContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Attachment"},{"name":"AttachmentDescription","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Attachment"},{"name":"AttachmentGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Attachment"},{"name":"AttachmentMedia","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Attachment"},{"name":"AttachmentTitle","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Attachment"},{"name":"Avatar","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"AvatarBadge","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Avatar"},{"name":"AvatarFallback","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Avatar"},{"name":"AvatarGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Avatar"},{"name":"AvatarGroupCount","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Avatar"},{"name":"AvatarImage","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Avatar"},{"name":"Badge","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"Box","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Box","properties":{"className":{"type":"string","description":"CSS-класс layout-контейнера (atomic CSS / Tailwind: flex, grid, gap-*).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}}}},{"name":"Breadcrumb","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"BreadcrumbEllipsis","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Breadcrumb"},{"name":"BreadcrumbItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Breadcrumb"},{"name":"BreadcrumbLink","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Breadcrumb"},{"name":"BreadcrumbList","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Breadcrumb"},{"name":"BreadcrumbPage","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Breadcrumb"},{"name":"BreadcrumbSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Breadcrumb"},{"name":"Bubble","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"BubbleContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Bubble"},{"name":"BubbleGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Bubble"},{"name":"BubbleReactions","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Bubble"},{"name":"Button","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"ButtonGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"ButtonGroupSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"ButtonGroup"},{"name":"ButtonGroupText","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"ButtonGroup"},{"name":"Calendar","role":"field","exportName":"CalendarField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"mode":{"type":"string","enum":["single"],"default":"single","description":"Режим выбора. Field-версия — только single (одна дата, value: Date | null).","x-doc":{"group":"Behavior","type":"'single'","kind":"enum"}},"captionLayout":{"type":"string","enum":["label","dropdown","dropdown-months","dropdown-years"],"default":"label","description":"Шапка месяца: статичная подпись или дропдауны выбора месяца/года.","x-doc":{"group":"Behavior","type":"'label' | 'dropdown' | 'dropdown-months' | 'dropdown-years'","kind":"enum"}},"showOutsideDays":{"type":"boolean","default":true,"description":"Показывать дни соседних месяцев в первой и последней неделе.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Доп. CSS-класс корневого элемента.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"Date | null","description":"Выбранная дата. null — ничего не выбрано."},"onChange":{"group":"Control","type":"(value: Date | null) => void","description":"Выбор даты. Повторный клик по выбранной дате сбрасывает значение в null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}},"subpath":"calendar"},{"name":"CalendarDayButton","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Calendar","subpath":"calendar"},{"name":"Card","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"CardAction","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Card"},{"name":"CardContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Card"},{"name":"CardDescription","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Card"},{"name":"CardFooter","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Card"},{"name":"CardHeader","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Card"},{"name":"CardTitle","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Card"},{"name":"Carousel","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"carousel"},{"name":"CarouselContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Carousel","subpath":"carousel"},{"name":"CarouselItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Carousel","subpath":"carousel"},{"name":"CarouselNext","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Carousel","subpath":"carousel"},{"name":"CarouselPrevious","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Carousel","subpath":"carousel"},{"name":"Chart","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"chart"},{"name":"ChartContainer","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Chart","subpath":"chart"},{"name":"ChartLegend","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Chart","subpath":"chart"},{"name":"ChartLegendContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Chart","subpath":"chart"},{"name":"ChartTooltip","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Chart","subpath":"chart"},{"name":"ChartTooltipContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Chart","subpath":"chart"},{"name":"Checkbox","role":"field","exportName":"CheckboxField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись справа от чекбокса (inline-раскладка). Рендерит сам контрол.","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс контрола (CheckboxPrimitive.Root).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"boolean","description":"Состояние чекбокса. undefined/null трактуется как false."},"onChange":{"group":"Control","type":"(value: boolean) => void","description":"Изменение. indeterminate приводится к false."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}}},{"name":"CheckboxWithLabel","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Checkbox"},{"name":"Collapsible","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"CollapsibleContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Collapsible"},{"name":"Combobox","role":"field","exportName":"ComboboxField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс триггера.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"options":{"type":"array","items":{"type":"object","required":["value","label"],"additionalProperties":false,"properties":{"value":{"type":"string"},"label":{"type":"string"}}},"description":"Список опций { value, label }. Поиск идёт по label.","x-doc":{"group":"Options","type":"Array<{ value; label }>","kind":"readonly"}},"placeholder":{"type":"string","default":"Select an option...","description":"Подсказка в триггере, пока ничего не выбрано.","x-doc":{"group":"Textfield","type":"string"}},"searchPlaceholder":{"type":"string","default":"Search...","description":"Подсказка в поле поиска.","x-doc":{"group":"Textfield","type":"string"}},"emptyText":{"type":"string","default":"No options found.","description":"Текст пустого состояния (ничего не найдено).","x-doc":{"group":"Textfield","type":"string"}},"clearable":{"type":"boolean","default":false,"description":"Показывать крестик очистки (сброс в null); повторный выбор опции тоже сбрасывает.","x-doc":{"group":"Behavior","type":"boolean"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Выбранное значение (option.value). null — ничего не выбрано."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Выбор; при очистке приходит null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}},"subpath":"combobox"},{"name":"Command","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"command"},{"name":"CommandDialog","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Command","subpath":"command"},{"name":"CommandEmpty","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Command","subpath":"command"},{"name":"CommandGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Command","subpath":"command"},{"name":"CommandInput","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Command","subpath":"command"},{"name":"CommandItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Command","subpath":"command"},{"name":"CommandList","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Command","subpath":"command"},{"name":"CommandSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Command","subpath":"command"},{"name":"CommandShortcut","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Command","subpath":"command"},{"name":"ContextMenu","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"DatePicker","role":"field","exportName":"DatePickerField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"placeholder":{"type":"string","default":"Выберите дату","description":"Текст кнопки-триггера, когда дата не выбрана.","x-doc":{"group":"Textfield","type":"string"}},"dateFormat":{"type":"string","default":"PPP","description":"Формат отображения выбранной даты — токены date-fns (напр. dd.MM.yyyy).","x-doc":{"group":"Behavior","type":"string"}},"className":{"type":"string","description":"Доп. CSS-класс кнопки-триггера.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"Date | null","description":"Выбранная дата. null — ничего не выбрано."},"onChange":{"group":"Control","type":"(value: Date | null) => void","description":"Выбор даты в календаре. Повторный клик по выбранной дате сбрасывает в null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}},"subpath":"date-picker"},{"name":"Dialog","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"DialogClose","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Dialog"},{"name":"DialogContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Dialog"},{"name":"DialogDescription","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Dialog"},{"name":"DialogFooter","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Dialog"},{"name":"DialogHeader","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Dialog"},{"name":"DialogTitle","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Dialog"},{"name":"Direction","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"direction"},{"name":"Drawer","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"drawer"},{"name":"DrawerClose","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Drawer","subpath":"drawer"},{"name":"DrawerContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Drawer","subpath":"drawer"},{"name":"DrawerDescription","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Drawer","subpath":"drawer"},{"name":"DrawerFooter","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Drawer","subpath":"drawer"},{"name":"DrawerHeader","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Drawer","subpath":"drawer"},{"name":"DrawerTitle","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Drawer","subpath":"drawer"},{"name":"DropdownMenu","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"DropdownMenuCheckboxItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"DropdownMenu"},{"name":"DropdownMenuContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"DropdownMenu"},{"name":"DropdownMenuGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"DropdownMenu"},{"name":"DropdownMenuItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"DropdownMenu"},{"name":"DropdownMenuLabel","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"DropdownMenu"},{"name":"DropdownMenuRadioGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"DropdownMenu"},{"name":"DropdownMenuRadioItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"DropdownMenu"},{"name":"DropdownMenuSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"DropdownMenu"},{"name":"DropdownMenuShortcut","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"DropdownMenu"},{"name":"DropdownMenuSub","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"DropdownMenu"},{"name":"DropdownMenuSubContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"DropdownMenu"},{"name":"Empty","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"EmptyContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Empty"},{"name":"EmptyDescription","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Empty"},{"name":"EmptyHeader","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Empty"},{"name":"EmptyMedia","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Empty"},{"name":"EmptyTitle","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Empty"},{"name":"ExampleCard","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"Field","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"FormArray","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"form-array"},{"name":"FormArraySection","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"FormArray"},{"name":"FormField","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"FormWizard","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"FormWizardActions","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"FormWizard"},{"name":"FormWizardProgress","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"FormWizard"},{"name":"HoverCard","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"HoverCardContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"HoverCard"},{"name":"Input","role":"field","exportName":"InputField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"type":{"type":"string","enum":["text","email","tel","url","password","number","date"],"default":"text","description":"HTML-тип input. number включает числовой буфер, остальные — строковые.","x-doc":{"group":"Textfield","type":"'text' | 'email' | 'number' | 'date' | …","kind":"enum"}},"placeholder":{"type":"string","description":"Подсказка внутри поля.","x-doc":{"group":"Textfield","type":"string"}},"min":{"type":"number","description":"Минимум (type=number). При min>=0 отрицательные значения зажимаются к 0.","x-doc":{"group":"Behavior","type":"number"}},"max":{"type":"number","description":"Максимум (type=number).","x-doc":{"group":"Behavior","type":"number"}},"step":{"type":"number","description":"Шаг (type=number).","x-doc":{"group":"Behavior","type":"number"}},"className":{"type":"string","description":"Доп. CSS-класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | number | null","description":"Значение поля. Для type=number — number|null, иначе string|null."},"onChange":{"group":"Control","type":"(value: string | number | null) => void","description":"Изменение. Пустой ввод → null. Для number частичный ввод («-», «1.») не эмитится."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}}},{"name":"InputGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"InputGroupAddon","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"InputGroup"},{"name":"InputGroupButton","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"InputGroup"},{"name":"InputGroupInput","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"InputGroup"},{"name":"InputGroupText","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"InputGroup"},{"name":"InputGroupTextarea","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"InputGroup"},{"name":"InputMask","role":"field","exportName":"InputMaskField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"mask":{"type":"string","description":"Шаблон маски-подсказки: '9' — цифра, прочие символы — литералы (уходят в placeholder). Напр. '+7 (999) 999-99-99'. Автовставки литералов нет — компонент только помечает формат.","x-doc":{"group":"Textfield","type":"string"}},"placeholder":{"type":"string","description":"Подсказка внутри поля. По умолчанию равна mask.","x-doc":{"group":"Textfield","type":"string"}},"className":{"type":"string","description":"Доп. CSS-класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Значение поля. null/undefined → пустое поле."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Изменение. Пустой ввод → null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}}},{"name":"InputOTP","role":"field","exportName":"InputOTPField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"maxLength":{"type":"number","default":6,"minimum":1,"description":"Число слотов (длина кода). Дефолтная раскладка разворачивает одну группу из maxLength слотов.","x-doc":{"group":"Behavior","type":"number"}},"className":{"type":"string","description":"Доп. CSS-класс скрытого input.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Набранный код. null — пусто."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Изменение кода. Пустой ввод → null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}},"subpath":"input-otp"},{"name":"InputOTPGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"InputOTP","subpath":"input-otp"},{"name":"InputOTPSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"InputOTP","subpath":"input-otp"},{"name":"InputOTPSlot","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"InputOTP","subpath":"input-otp"},{"name":"InputPassword","role":"field","exportName":"InputPasswordField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"placeholder":{"type":"string","default":"Password","description":"Подсказка внутри поля.","x-doc":{"group":"Textfield","type":"string"}},"showToggle":{"type":"boolean","default":true,"description":"Показывать иконку переключения видимости (eye/eye-off). Появляется при непустом value.","x-doc":{"group":"Behavior","type":"boolean"}},"className":{"type":"string","description":"Доп. CSS-класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Значение пароля. null/пусто — пустое поле."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Изменение. Пустой ввод приводится к null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}}},{"name":"Item","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"ItemActions","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Item"},{"name":"ItemContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Item"},{"name":"ItemDescription","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Item"},{"name":"ItemFooter","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Item"},{"name":"ItemGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Item"},{"name":"ItemHeader","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Item"},{"name":"ItemMedia","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Item"},{"name":"ItemSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Item"},{"name":"ItemTitle","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Item"},{"name":"Kbd","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"KbdGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Kbd"},{"name":"Label","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"Marker","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"MarkerContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Marker"},{"name":"MarkerIcon","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Marker"},{"name":"Menubar","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"MenubarCheckboxItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Menubar"},{"name":"MenubarContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Menubar"},{"name":"MenubarGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Menubar"},{"name":"MenubarItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Menubar"},{"name":"MenubarLabel","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Menubar"},{"name":"MenubarMenu","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Menubar"},{"name":"MenubarRadioGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Menubar"},{"name":"MenubarRadioItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Menubar"},{"name":"MenubarSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Menubar"},{"name":"MenubarShortcut","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Menubar"},{"name":"MenubarSub","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Menubar"},{"name":"MenubarSubContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Menubar"},{"name":"Message","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"MessageAvatar","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Message"},{"name":"MessageContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Message"},{"name":"MessageFooter","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Message"},{"name":"MessageGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Message"},{"name":"MessageHeader","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Message"},{"name":"MessageScroller","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"message-scroller"},{"name":"MessageScrollerButton","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"MessageScroller","subpath":"message-scroller"},{"name":"MessageScrollerContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"MessageScroller","subpath":"message-scroller"},{"name":"MessageScrollerItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"MessageScroller","subpath":"message-scroller"},{"name":"MessageScrollerViewport","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"MessageScroller","subpath":"message-scroller"},{"name":"NativeSelect","role":"field","exportName":"NativeSelectField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"options":{"type":"array","items":{"type":"object","required":["value","label"],"additionalProperties":false,"properties":{"value":{"type":["string","number"]},"label":{"type":"string"},"group":{"type":"string"}}},"description":"Опции списка. Одинаковый group объединяется в <optgroup>.","x-doc":{"group":"Options","type":"Array<{ value; label; group? }>","kind":"readonly"}},"placeholder":{"type":"string","description":"Подсказка-опция (value=\\"\\") в начале списка.","x-doc":{"group":"Textfield","type":"string"}},"className":{"type":"string","description":"Доп. CSS-класс select.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Выбранное значение (option.value как строка). Пустой выбор → null."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Изменение. Пустой выбор (value=\\"\\") → null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}}},{"name":"NativeSelectOptGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"NativeSelect"},{"name":"NativeSelectOption","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"NativeSelect"},{"name":"NativeSelectWithOptions","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"NativeSelect"},{"name":"NavigationMenu","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"NavigationMenuContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"NavigationMenu"},{"name":"NavigationMenuIndicator","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"NavigationMenu"},{"name":"NavigationMenuItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"NavigationMenu"},{"name":"NavigationMenuLink","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"NavigationMenu"},{"name":"NavigationMenuList","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"NavigationMenu"},{"name":"NavigationMenuViewport","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"NavigationMenu"},{"name":"Pagination","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"PaginationContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Pagination"},{"name":"PaginationEllipsis","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Pagination"},{"name":"PaginationItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Pagination"},{"name":"PaginationLink","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Pagination"},{"name":"PaginationNext","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Pagination"},{"name":"PaginationPrevious","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Pagination"},{"name":"Popover","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"PopoverAnchor","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Popover"},{"name":"PopoverContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Popover"},{"name":"PopoverDescription","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Popover"},{"name":"PopoverHeader","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Popover"},{"name":"PopoverTitle","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Popover"},{"name":"Progress","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"RadioGroup","role":"field","exportName":"RadioGroupField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"options":{"type":"array","items":{"type":"object","required":["value","label"],"additionalProperties":false,"properties":{"value":{"type":"string"},"label":{"type":"string"}}},"description":"Варианты выбора. Каждый рендерится как radio + подпись справа.","x-doc":{"group":"Options","type":"Array<{ value; label }>","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс контейнера группы (по умолчанию grid gap-3).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Выбранное значение (option.value). null — ничего не выбрано."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Выбор варианта; пустой выбор → null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}}},{"name":"RadioGroupItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"RadioGroup"},{"name":"RadioGroupOptions","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"RadioGroup"},{"name":"Resizable","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"resizable"},{"name":"ResizableHandle","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Resizable","subpath":"resizable"},{"name":"ResizablePanel","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Resizable","subpath":"resizable"},{"name":"ResizablePanelGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Resizable","subpath":"resizable"},{"name":"ScrollArea","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"Section","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Section","properties":{"title":{"type":"string","description":"Заголовок секции. Не задан — заголовок не рендерится (только обёртка).","x-doc":{"group":"Textfield","type":"string"}},"titleAs":{"type":"string","enum":["h1","h2","h3","h4","h5","h6"],"default":"h3","description":"HTML-элемент заголовка (уровень h1-h6).","x-doc":{"group":"Behavior","type":"'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'","kind":"enum"}},"titleClassName":{"type":"string","description":"Доп. CSS-класс заголовка.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс контейнера \`<section>\` (напр. \`grid grid-cols-2 gap-4\`).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}}}},{"name":"Select","role":"field","exportName":"SelectField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс триггера.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"options":{"type":"array","items":{"type":"object","required":["value","label"],"additionalProperties":false,"properties":{"value":{"type":["string","number"]},"label":{"type":"string"},"group":{"type":"string"}}},"description":"Inline-опции. Одинаковый group объединяется в секцию SelectLabel.","x-doc":{"group":"Options","type":"Array<{ value; label; group? }>","kind":"readonly"}},"placeholder":{"type":"string","default":"Select an option...","description":"Подсказка в триггере.","x-doc":{"group":"Textfield","type":"string"}},"clearable":{"type":"boolean","default":false,"description":"Показывать крестик очистки (сброс в null).","x-doc":{"group":"Behavior","type":"boolean"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Выбранное значение (option.value). null — ничего не выбрано."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Выбор; при очистке приходит null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."},"resource":{"group":"Options","type":"ResourceConfig<unknown>","description":"Асинхронный источник опций (static / preload / partial). В JSON-форме недостижим: требует функцию load."}}}},{"name":"SelectAsync","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Select"},{"name":"SelectContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Select"},{"name":"SelectGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Select"},{"name":"SelectItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Select"},{"name":"SelectLabel","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Select"},{"name":"SelectScrollDownButton","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Select"},{"name":"SelectScrollUpButton","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Select"},{"name":"SelectSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Select"},{"name":"SelectValue","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Select"},{"name":"Separator","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"Sheet","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"SheetClose","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sheet"},{"name":"SheetContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sheet"},{"name":"SheetDescription","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sheet"},{"name":"SheetFooter","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sheet"},{"name":"SheetHeader","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sheet"},{"name":"SheetTitle","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sheet"},{"name":"Sidebar","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"sidebar"},{"name":"SidebarContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarFooter","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarGroup","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarGroupAction","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarGroupContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarGroupLabel","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarHeader","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarInput","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarInset","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarMenu","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarMenuAction","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarMenuBadge","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarMenuButton","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarMenuItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarMenuSkeleton","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarMenuSub","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarMenuSubButton","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarMenuSubItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarRail","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"SidebarSeparator","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Sidebar","subpath":"sidebar"},{"name":"Skeleton","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"Slider","role":"field","exportName":"SliderField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"min":{"type":"number","default":0,"description":"Минимум диапазона (Radix min).","x-doc":{"group":"Behavior","type":"number"}},"max":{"type":"number","default":100,"description":"Максимум диапазона (Radix max).","x-doc":{"group":"Behavior","type":"number"}},"step":{"type":"number","default":1,"description":"Шаг изменения значения (Radix step).","x-doc":{"group":"Behavior","type":"number"}},"className":{"type":"string","description":"Доп. CSS-класс слайдера (SliderPrimitive.Root).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"number | null","description":"Значение слайдера (одно-thumb). null трактуется как min. Резолвится формой."},"onChange":{"group":"Control","type":"(value: number | null) => void","description":"Изменение; эмитит первое число массива Radix (onValueChange → arr[0])."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}}},{"name":"Sonner","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"sonner"},{"name":"Spinner","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"State","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"state"},{"name":"Switch","role":"field","exportName":"SwitchField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись справа от переключателя (inline-раскладка; FormField верхнюю метку не рисует).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"className":{"type":"string","description":"Доп. CSS-класс переключателя.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"boolean","description":"Состояние переключателя (true — включён). Резолвится формой."},"onChange":{"group":"Control","type":"(value: boolean) => void","description":"Переключение; эмитит boolean (Radix onCheckedChange, indeterminate → false)."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}}},{"name":"Table","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"table"},{"name":"TableBody","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Table","subpath":"table"},{"name":"TableCaption","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Table","subpath":"table"},{"name":"TableCell","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Table","subpath":"table"},{"name":"TableFooter","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Table","subpath":"table"},{"name":"TableHead","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Table","subpath":"table"},{"name":"TableHeader","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Table","subpath":"table"},{"name":"TableRow","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Table","subpath":"table"},{"name":"Tabs","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"TabsContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Tabs"},{"name":"TabsList","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Tabs"},{"name":"Textarea","role":"field","exportName":"TextareaField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"placeholder":{"type":"string","description":"Подсказка внутри поля.","x-doc":{"group":"Textfield","type":"string"}},"rows":{"type":"number","description":"Число видимых строк (HTML-атрибут rows).","x-doc":{"group":"Behavior","type":"number"}},"className":{"type":"string","description":"Доп. CSS-класс.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Значение поля. Пустой ввод → null."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Изменение. Пустой ввод → null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}}},{"name":"Toggle","role":"field","exportName":"ToggleField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"variant":{"type":"string","enum":["default","outline"],"default":"default","description":"Стиль cva: default (заливка при нажатии) | outline (граница).","x-doc":{"group":"Control","type":"'default' | 'outline'","kind":"enum"}},"size":{"type":"string","enum":["default","sm","lg"],"default":"default","description":"Размер cva: default | sm | lg.","x-doc":{"group":"Control","type":"'default' | 'sm' | 'lg'","kind":"enum"}},"className":{"type":"string","description":"Доп. CSS-класс контрола (TogglePrimitive.Root).","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"boolean","description":"Состояние (true — нажат/pressed). undefined/null трактуется как false. Резолвится формой."},"onChange":{"group":"Control","type":"(value: boolean) => void","description":"Переключение; эмитит boolean (Radix onPressedChange)."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}}},{"name":"ToggleGroup","role":"field","exportName":"ToggleGroupField","propsSchema":{"type":"object","properties":{"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"options":{"type":"array","items":{"type":"object","required":["value","label"],"additionalProperties":false,"properties":{"value":{"type":"string"},"label":{"type":"string"}}},"description":"Варианты выбора. Каждый рендерится как кнопка-переключатель.","x-doc":{"group":"Options","type":"Array<{ value; label }>","kind":"readonly"}},"variant":{"type":"string","enum":["default","outline"],"default":"default","description":"Визуальный стиль кнопок: плоские (default) или с рамкой (outline).","x-doc":{"group":"Control","type":"'default' | 'outline'"}},"className":{"type":"string","description":"Доп. CSS-класс контейнера группы.","x-doc":{"group":"Control","type":"string","kind":"readonly"}}},"additionalProperties":false,"x-runtimeProps":{"value":{"group":"Control","type":"string | null","description":"Выбранное значение (option.value). null — ничего не выбрано."},"onChange":{"group":"Control","type":"(value: string | null) => void","description":"Выбор варианта; пустой выбор → null."},"onBlur":{"group":"Control","type":"() => void","kind":"readonly","description":"Отметка touched. Форма подставляет control.markAsTouched."},"disabled":{"group":"State","type":"boolean","kind":"boolean","default":false,"description":"Блокировка поля. Задаётся через control.disable()/enable(), НЕ через componentProps: FormFieldControl.tsx:104-115 ставит disabled ПОСЛЕ спреда componentProps, поэтому componentProps.disabled мёртв."}}}},{"name":"ToggleGroupItem","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"ToggleGroup"},{"name":"ToggleGroupOptions","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"ToggleGroup"},{"name":"Tooltip","role":"container","propsSchema":{"type":"object","additionalProperties":true}},{"name":"TooltipContent","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Tooltip"},{"name":"Typography","role":"container","propsSchema":{"type":"object","additionalProperties":true},"subpath":"typography"},{"name":"TypographyBlockquote","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Typography"},{"name":"TypographyH1","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Typography"},{"name":"TypographyH2","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Typography"},{"name":"TypographyH3","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Typography"},{"name":"TypographyH4","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Typography"},{"name":"TypographyInlineCode","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Typography"},{"name":"TypographyLarge","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Typography"},{"name":"TypographyLead","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Typography"},{"name":"TypographyList","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Typography"},{"name":"TypographyMuted","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Typography"},{"name":"TypographyP","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Typography"},{"name":"TypographySmall","role":"container","propsSchema":{"type":"object","additionalProperties":true},"compoundParent":"Typography"}]`),$n={$schema:On,version:Nn,kit:_n,components:Rn},En="../../projects/reformer-builder/src/catalog/component-catalog.schema.json",Ln="2.0",Fn={id:"hexa-ui",label:"Kaspersky HexaUI",package:"@kaspersky/hexa-ui",version:"6.387.4",peerRanges:{react:"16.x || 17.x || 18.x"},infra:{fieldWrapper:"FormField"},adapters:{wizard:null,step:null,provider:{symbol:"KitProvider"}},styles:{mode:"standalone",href:"@kaspersky/hexa-ui/design-system/global-style/styles.css"},palette:{categoryByName:{Input:"Поля ввода",InputPassword:"Поля ввода",InputNumber:"Поля ввода",Textarea:"Поля ввода",Checkbox:"Выбор и переключатели",Select:"Выбор и переключатели",Box:"Контейнеры",Section:"Контейнеры",Card:"Контейнеры",Panel:"Контейнеры",Space:"Контейнеры",Button:"Действия",Alert:"Отображение",Badge:"Отображение",Tag:"Отображение",Label:"Отображение",Link:"Отображение",Separator:"Отображение",Spinner:"Отображение",Progress:"Отображение",Skeleton:"Отображение"}},codegen:{importSpecifier:"@reformer/kit-hexa-ui"}},In=[{name:"Input",role:"field",exportName:"InputField",propsSchema:{type:"object",additionalProperties:!1,properties:{label:{type:"string",description:"Подпись поля.","x-doc":{group:"Control",type:"string"}},required:{type:"boolean",default:!1,description:"Обязательное поле.","x-doc":{group:"Control",type:"boolean"}},placeholder:{type:"string",description:"Подсказка в пустом поле.","x-doc":{group:"Textfield",type:"string"}},disabled:{type:"boolean",default:!1,description:"Поле недоступно.","x-doc":{group:"State",type:"boolean"}},testId:{type:"string",description:"Префикс data-testid.","x-doc":{group:"Behavior",type:"string"}},className:{type:"string",description:"CSS-классы.","x-doc":{group:"Control",type:"string"}}},"x-runtimeProps":{value:{group:"Control",type:"string",description:"Значение поля."},onChange:{group:"Control",type:"(value: string) => void",description:"Изменение значения."}}}},{name:"Textarea",role:"field",exportName:"TextareaField",propsSchema:{type:"object",additionalProperties:!1,properties:{label:{type:"string","x-doc":{group:"Control",type:"string"}},required:{type:"boolean",default:!1,"x-doc":{group:"Control",type:"boolean"}},placeholder:{type:"string","x-doc":{group:"Textfield",type:"string"}},rows:{type:"number",minimum:1,description:"Высота в строках.","x-doc":{group:"Textfield",type:"number"}},disabled:{type:"boolean",default:!1,"x-doc":{group:"State",type:"boolean"}},testId:{type:"string","x-doc":{group:"Behavior",type:"string"}},className:{type:"string","x-doc":{group:"Control",type:"string"}}},"x-runtimeProps":{value:{group:"Control",type:"string",description:"Значение поля."},onChange:{group:"Control",type:"(value: string) => void",description:"Изменение значения."}}}},{name:"InputPassword",role:"field",exportName:"InputPasswordField",propsSchema:{type:"object",additionalProperties:!1,properties:{label:{type:"string","x-doc":{group:"Control",type:"string"}},required:{type:"boolean",default:!1,"x-doc":{group:"Control",type:"boolean"}},placeholder:{type:"string","x-doc":{group:"Textfield",type:"string"}},disabled:{type:"boolean",default:!1,"x-doc":{group:"State",type:"boolean"}},testId:{type:"string","x-doc":{group:"Behavior",type:"string"}},className:{type:"string","x-doc":{group:"Control",type:"string"}}},"x-runtimeProps":{value:{group:"Control",type:"string",description:"Значение поля."},onChange:{group:"Control",type:"(value: string) => void",description:"Изменение значения."}}}},{name:"InputNumber",role:"field",exportName:"InputNumberField",propsSchema:{type:"object",additionalProperties:!1,properties:{label:{type:"string","x-doc":{group:"Control",type:"string"}},required:{type:"boolean",default:!1,"x-doc":{group:"Control",type:"boolean"}},min:{type:"number","x-doc":{group:"Textfield",type:"number"}},max:{type:"number","x-doc":{group:"Textfield",type:"number"}},disabled:{type:"boolean",default:!1,"x-doc":{group:"State",type:"boolean"}},testId:{type:"string","x-doc":{group:"Behavior",type:"string"}},className:{type:"string","x-doc":{group:"Control",type:"string"}}},"x-runtimeProps":{value:{group:"Control",type:"number | null",description:"Значение поля."},onChange:{group:"Control",type:"(value: number | null) => void",description:"Изменение значения."}}}},{name:"Checkbox",role:"field",exportName:"CheckboxField",propsSchema:{type:"object",additionalProperties:!1,properties:{label:{type:"string",description:"Подпись рядом с чекбоксом.","x-doc":{group:"Control",type:"string"}},required:{type:"boolean",default:!1,"x-doc":{group:"Control",type:"boolean"}},disabled:{type:"boolean",default:!1,"x-doc":{group:"State",type:"boolean"}},testId:{type:"string","x-doc":{group:"Behavior",type:"string"}},className:{type:"string","x-doc":{group:"Control",type:"string"}}},"x-runtimeProps":{value:{group:"Control",type:"boolean",description:"Отмечен ли чекбокс."},onChange:{group:"Control",type:"(value: boolean) => void",description:"Изменение состояния."}}}},{name:"Select",role:"field",exportName:"SelectField",propsSchema:{type:"object",additionalProperties:!1,properties:{label:{type:"string","x-doc":{group:"Control",type:"string"}},required:{type:"boolean",default:!1,"x-doc":{group:"Control",type:"boolean"}},placeholder:{type:"string","x-doc":{group:"Textfield",type:"string"}},options:{type:"array",description:"Варианты выбора: { value, label }.",items:{type:"object"},"x-doc":{group:"Options",type:"OptionType[]"}},mode:{type:"string",enum:["multiple","tags"],description:"Множественный выбор.","x-doc":{group:"Behavior",type:"'multiple' | 'tags'",kind:"enum"}},disabled:{type:"boolean",default:!1,"x-doc":{group:"State",type:"boolean"}},testId:{type:"string","x-doc":{group:"Behavior",type:"string"}},className:{type:"string","x-doc":{group:"Control",type:"string"}}},"x-runtimeProps":{value:{group:"Control",type:"string | number",description:"Выбранное значение."},onChange:{group:"Control",type:"(value: unknown) => void",description:"Изменение выбора."}}}},{name:"Box",role:"container",propsSchema:{type:"object",additionalProperties:!1,properties:{className:{type:"string",description:"CSS-классы контейнера.","x-doc":{group:"Control",type:"string"}}}}},{name:"Section",role:"container",propsSchema:{type:"object",additionalProperties:!1,properties:{className:{type:"string","x-doc":{group:"Control",type:"string"}}}}},{name:"Card",role:"container",propsSchema:{type:"object",additionalProperties:!0}},{name:"Panel",role:"container",propsSchema:{type:"object",additionalProperties:!0}},{name:"Space",role:"container",propsSchema:{type:"object",additionalProperties:!0}},{name:"Button",role:"container",propsSchema:{type:"object",additionalProperties:!0}},{name:"Alert",role:"container",propsSchema:{type:"object",additionalProperties:!0}},{name:"Badge",role:"container",propsSchema:{type:"object",additionalProperties:!0}},{name:"Tag",role:"container",propsSchema:{type:"object",additionalProperties:!0}},{name:"Label",role:"container",propsSchema:{type:"object",additionalProperties:!0}},{name:"Link",role:"container",propsSchema:{type:"object",additionalProperties:!0}},{name:"Separator",role:"container",exportName:"Divider",leaf:!0,propsSchema:{type:"object",additionalProperties:!0}},{name:"Spinner",role:"container",exportName:"Loader",leaf:!0,propsSchema:{type:"object",additionalProperties:!0}},{name:"Progress",role:"container",exportName:"ProgressBar",leaf:!0,propsSchema:{type:"object",additionalProperties:!0}},{name:"Skeleton",role:"container",leaf:!0,propsSchema:{type:"object",additionalProperties:!0}}],Hn={$schema:En,version:Ln,kit:Fn,components:In},Po="reformer-ui-kit",ko=[{id:Po,label:"ReFormer UI Kit",version:"workspace",catalog:Dn,loadNamespace:async()=>(await Mt(async()=>{const{REFORMER_UI_KIT_NAMESPACE:e}=await import("./reformer-ui-kit-tUqYBSLv.js").then(t=>t.aE);return{REFORMER_UI_KIT_NAMESPACE:e}},__vite__mapDeps([0,1,2,3,4]))).REFORMER_UI_KIT_NAMESPACE},{id:"reformer-ui-kit-11",label:"ReFormer UI Kit",version:"11.0.0",catalog:$n,loadNamespace:async()=>(await Mt(async()=>{const{REFORMER_UI_KIT_11_NAMESPACE:e}=await import("./reformer-ui-kit-11-bLtlFFvp.js");return{REFORMER_UI_KIT_11_NAMESPACE:e}},__vite__mapDeps([5,1,2,3,4,6]))).REFORMER_UI_KIT_11_NAMESPACE},{id:"hexa-ui",label:"Kaspersky HexaUI",version:"6.387.4",catalog:Hn,loadNamespace:async()=>(await Mt(async()=>{const{HEXA_UI_NAMESPACE:e}=await import("./index-U9gpmElw.js").then(t=>t.i);return{HEXA_UI_NAMESPACE:e}},__vite__mapDeps([7,1,2,4,8]))).HEXA_UI_NAMESPACE}];function la(){return ko}function ao(e){return ko.find(t=>t.id===e)}function qn(e){return(e?ao(e):void 0)??ao(Po)}const Vt="reformer-builder:active-kit";function zn(){try{return localStorage.getItem(Vt)}catch{return null}}function ca(e){try{localStorage.setItem(Vt,e)}catch{}}function ua(){try{localStorage.removeItem(Vt)}catch{}}const Vn=Tn;function Gn(e,t,u){const i=vo().palette?.categoryByName?.[e];return i||(e.startsWith("Typography")?"Типографика":u[e]??(t==="container"?"Контейнеры":"Прочее"))}function Un(e,t){let u=e;if(t?.include&&t.include.length){const i=new Set(t.include);u=u.filter(x=>i.has(x.name))}if(t?.exclude&&t.exclude.length){const i=new Set(t.exclude);u=u.filter(x=>!i.has(x.name))}return u}function ya(){const e=vo().components,t=$i()??qn(zn()).catalog,u=Ui(e?.synthetic),i=new Set(u.map(y=>y.name)),n=[...t.components.filter(y=>y.palette!==!1&&!i.has(y.name)),...u];return{version:t.version,components:Un(n,e),...t.kit?{kit:t.kit}:{}}}function ma(e,t=So(e)){const u=t.palette.categoryByName;return e.components.map(i=>({name:i.name,role:i.role,category:i.category??Gn(i.compoundParent??i.name,i.role,u),propsSchema:i.propsSchema,...i.variantGroup?{variantGroup:i.variantGroup}:{},...i.variant?{variant:i.variant}:{},...i.compoundParent?{compoundParent:i.compoundParent}:{},...i.exportName?{exportName:i.exportName}:{},...i.subpath?{subpath:i.subpath}:{},makeNode:()=>bn(i.name,i.role,i.compoundParent)}))}let bt=null;function Kn(e){bt||(bt=new bo({allErrors:!0,strict:!1}).compile(Vn));const t=bt(e),u=(bt.errors??[]).map(i=>`${i.instancePath||"/"} ${i.message??""}`.trim());return{valid:!!t,errors:u}}const Wn="http://json-schema.org/draft-07/schema#",Jn="https://reformer.dev/schemas/reformer-builder-config",Yn="ReFormer Builder runtime config",Xn="Runtime-конфигурация UI-Builder, передаваемая клиентом при локальном старте (reformer-builder.config.json). Все секции опциональны; отсутствие ⇒ встроенные дефолты.",Qn="object",Zn=!1,ea={$schema:{type:"string"},version:{type:"string"},branding:{type:"object",additionalProperties:!1,properties:{productName:{type:"string"},title:{type:"string"},logoUrl:{type:"string"}}},palette:{type:"object",additionalProperties:!1,properties:{categoryByName:{type:"object",additionalProperties:{type:"string"}},order:{type:"array",items:{type:"string"}},collapsedByDefault:{type:"array",items:{type:"string"}},glyphs:{type:"object",additionalProperties:{type:"string"}}}},components:{type:"object",additionalProperties:!1,properties:{include:{type:"array",items:{type:"string"}},exclude:{type:"array",items:{type:"string"}},synthetic:{type:"object",additionalProperties:!1,properties:{html:{type:"boolean"},htmlTags:{type:"array",items:{type:"string"}},formArray:{type:"boolean"},wizard:{type:"boolean"}}}}},ui:{type:"object",additionalProperties:!1,properties:{theme:{type:"string",enum:["light","dark"]},leftPanel:{type:["string","null"],enum:["files","palette","templates",null]},rightOpen:{type:"boolean"},preview:{type:"string",enum:["wire","runtime","code"]},runtimeMode:{type:"string",enum:["edit","test"]},bottomTab:{type:"string",enum:["raw","model","registry"]},hideDivWrappers:{type:"boolean"}}},project:{type:"object",additionalProperties:!1,properties:{formSchemaMarkers:{type:"array",items:{type:"string"}},ignoreDirs:{type:"array",items:{type:"string"}},skipFiles:{type:"array",items:{type:"string"}},templatesDir:{type:"string"},seedSchema:{type:["object","null"]}}}},ta={$schema:Wn,$id:Jn,title:Yn,description:Xn,type:Qn,additionalProperties:Zn,properties:ea},ra="__reformer-builder/runtime.json";class so extends Error{source;errors;constructor(t,u){super(`Невалидный ${t==="config"?"конфиг билдера":"каталог компонентов"}:
10
- `+u.map(i=>` • ${i}`).join(`
11
- `)),this.name="RuntimeBundleError",this.source=t,this.errors=u}}let ht=null;function oa(e){ht||(ht=new bo({allErrors:!0,strict:!1}).compile(ta));const t=ht(e),u=(ht.errors??[]).map(i=>`${i.instancePath||"/"} ${i.message??""}`.trim());return{valid:!!t,errors:u}}function ia(){return"/".endsWith("/")?"/":"//"}async function na(){let e;try{e=await fetch(`${ia()}${ra}`,{cache:"no-cache"})}catch{return null}if(!e.ok||!(e.headers.get("content-type")??"").includes("application/json"))return null;try{const u=await e.json();return!u||typeof u!="object"?null:{catalog:u.catalog??null,config:u.config??null}}catch{return null}}async function ga(){const e=await na();if(e){if(e.config!=null){const{valid:t,errors:u}=oa(e.config);if(!t)throw new so("config",u);Ri(e.config)}if(e.catalog!=null){const{valid:t,errors:u}=Kn(e.catalog);if(!t)throw new so("catalog",u);Ei(e.catalog)}}}export{bo as A,Po as D,sa as I,xo as N,Wi as O,so as R,Ji as S,zn as a,qn as b,ua as c,ao as d,an as e,ya as f,vo as g,ma as h,pa as i,la as j,ca as k,ga as l,bn as m,da as s,So as t};