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

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 (120) hide show
  1. package/bin/reformer-builder.mjs +1 -1
  2. package/dist/assets/css/index-CHjtwIsF.css +1 -0
  3. package/dist/assets/i18n/en-uNov8AYL.js +1 -0
  4. package/dist/assets/i18n/ru-BNkTKaU6.js +1 -0
  5. package/dist/assets/js/index-C4LjLCAZ.js +57 -0
  6. package/dist/assets/monaco/html-DT-eqvPn.js +1 -0
  7. package/dist/assets/monaco/javascript-CIJHG94Q.js +1 -0
  8. package/dist/assets/monaco/{jsonMode-C3DAkvde.js → jsonMode-rEmNPnut.js} +3 -3
  9. package/dist/assets/monaco/{monaco-runtime-DNdOZY7f.js → monaco-runtime-Dqtu7Dpv.js} +137 -137
  10. package/dist/assets/monaco/typescript-Bp6doald.js +1 -0
  11. package/dist/assets/monaco/xml-D8D5UF1F.js +1 -0
  12. package/dist/assets/monaco/yaml-DsiyZy1w.js +1 -0
  13. package/dist/assets/plugins/{ai-jKAVkXuU.js → ai-CFoGZBd-.js} +36 -36
  14. package/dist/assets/plugins/{ai-byok-DgeZQTZb.js → ai-byok-a7JlkizL.js} +1 -1
  15. package/dist/assets/plugins/ai-knowledge-docs-BcbN7Ar1.js +1 -0
  16. package/dist/assets/plugins/ai-knowledge-index-CncxmxEf.js +1 -0
  17. package/dist/assets/plugins/codegen-DPh2ynzq.js +520 -0
  18. package/dist/assets/plugins/{editor-markdown-MarkdownPreview-DyHZvj8H.js → editor-markdown-MarkdownPreview-CjVpNIV5.js} +3 -3
  19. package/dist/assets/plugins/editor-markdown-McTrLzET.js +2 -0
  20. package/dist/assets/plugins/editor-monaco-7BM478IS.js +14 -0
  21. package/dist/assets/plugins/editor-schema-DOoRcy16.js +4 -0
  22. package/dist/assets/plugins/files-WhQya3nC.js +2 -0
  23. package/dist/assets/plugins/plain-4ISpXJVh.js +78 -0
  24. package/dist/assets/plugins/plugin-manager-Ek0Ph0Jj.js +1 -0
  25. package/dist/assets/plugins/preview-BSh_puVw.js +1 -0
  26. package/dist/assets/plugins/preview-runtime-B8NzDg53.js +3 -0
  27. package/dist/assets/plugins/templates-BE9B0S3J.js +2 -0
  28. package/dist/assets/vendor/{ajv-CCplthOF.js → ajv-N5zGp_lm.js} +1 -1
  29. package/dist/assets/vendor/calendar-base-BW48REpD-BYc4qqRC.js +1 -0
  30. package/dist/assets/vendor/carousel-BDyy29mt.js +1 -0
  31. package/dist/assets/vendor/chart-Cbp9J5YJ.js +52 -0
  32. package/dist/assets/vendor/collapsible-base-DZxAKbAF-DtQ4867U.js +1 -0
  33. package/dist/assets/vendor/drawer-BdLrIIeu.js +3 -0
  34. package/dist/assets/vendor/highlight.js/{common-g0-hl6Ud.js → common-B96EybDa.js} +1 -1
  35. package/dist/assets/vendor/index-BTAoX623.js +6 -0
  36. package/dist/assets/vendor/index-D8ACoUqy.js +51 -0
  37. package/dist/assets/vendor/input-otp-BoPlZ6dt.js +20 -0
  38. package/dist/assets/vendor/lucide-react/arrow-left-BlVPt6Ag.js +1 -0
  39. package/dist/assets/vendor/lucide-react/arrow-right-I5ntlq0-.js +1 -0
  40. package/dist/assets/vendor/lucide-react/calendar-L-57WZlQ.js +1 -0
  41. package/dist/assets/vendor/lucide-react/eye-DVTIIHcH.js +1 -0
  42. package/dist/assets/vendor/lucide-react/file-code-corner-DUfMS_yi.js +1 -0
  43. package/dist/assets/vendor/lucide-react/folder-tree-COyCkaDl.js +1 -0
  44. package/dist/assets/vendor/lucide-react/minus-zJRYKuAo.js +1 -0
  45. package/dist/assets/vendor/lucide-react/plus-B0WG2JcM.js +1 -0
  46. package/dist/assets/vendor/lucide-react/rotate-ccw-BSYk0mux.js +1 -0
  47. package/dist/assets/vendor/lucide-react/wrench-mybFdWHD.js +1 -0
  48. package/dist/assets/vendor/message-base-B5jT1FuY-BvDKjuSs.js +1 -0
  49. package/dist/assets/vendor/message-scroller-B2tlOtxT.js +1 -0
  50. package/dist/assets/vendor/reformer-builder-stack-reformer/node-token-VfZdCqcs.js +1 -0
  51. package/dist/assets/vendor/reformer-builder-stack-reformer/paths-DeGLVPUt.js +1 -0
  52. package/dist/assets/{js/rules-CM1OzesO.js → vendor/reformer-builder-stack-reformer/rules-CQSVDlmo.js} +1 -1
  53. package/dist/assets/vendor/reformer-builder-stack-reformer/selectors-CjNSFsK9.js +1 -0
  54. package/dist/assets/vendor/reformer-builder-toolkit/marker-DiOaKX-e.js +4 -0
  55. package/dist/assets/vendor/reformer-cdk/define-steps-CyGUrx9p-vcI1WbRz.js +1 -0
  56. package/dist/assets/vendor/reformer-cdk/file-upload-D8FOieMN.js +1 -0
  57. package/dist/assets/vendor/reformer-cdk/form-array-DlFEb40E.js +1 -0
  58. package/dist/assets/vendor/reformer-cdk/form-wizard-DDLs_-Ya.js +1 -0
  59. package/dist/assets/vendor/reformer-cdk/index-CeCSv2Go.js +1 -0
  60. package/dist/assets/vendor/reformer-cdk/{list-BrqYwhrQ.js → list-DkqJWU70.js} +1 -1
  61. package/dist/assets/vendor/reformer-form-registry/{index-s1IAa6Lm.js → index-DflpiFcm.js} +1 -1
  62. package/dist/assets/vendor/reformer-form-registry/loader-BK2c_fCA-BtIEWzon.js +2 -0
  63. package/dist/assets/vendor/reformer-form-registry/react-BiEQRau3.js +1 -0
  64. package/dist/assets/vendor/reformer-renderer-json/{validate-C5Gll2Yt.js → validate-DXzHWMfT.js} +1 -1
  65. package/dist/assets/vendor/reformer-ui-kit/alert-base-WOl_V-qI-2ZIfaT1o.js +1 -0
  66. package/dist/assets/vendor/reformer-ui-kit/calendar-Bm2DDJDU.js +1 -0
  67. package/dist/assets/vendor/reformer-ui-kit/calendar-base.props-CqesU7CZ-tpDaVQbq.js +1 -0
  68. package/dist/assets/vendor/reformer-ui-kit/combobox-Dm4bFCVg.js +1 -0
  69. package/dist/assets/vendor/reformer-ui-kit/combobox-tree.props-BEQhnapq-DQmsBcYk.js +1 -0
  70. package/dist/assets/vendor/reformer-ui-kit/component-catalog-BEv0Zf-R.js +1 -0
  71. package/dist/assets/vendor/reformer-ui-kit/date-picker-CkVXt6Uh.js +1 -0
  72. package/dist/assets/vendor/reformer-ui-kit/date-picker-base.props-WBloFrDq-QhVYMCMG.js +1 -0
  73. package/dist/assets/vendor/reformer-ui-kit/input-otp-base.props-D1xRJiuO-DBKxHsz1.js +1 -0
  74. package/dist/assets/vendor/reformer-ui-kit/meta-YyKXxsBK.js +1 -0
  75. package/dist/assets/vendor/reformer-ui-kit/sidebar-CMzt3bAb.js +1 -0
  76. package/dist/assets/vendor/reformer-ui-kit/skeleton-base-C-lIzi0D-BjmjAmE9.js +1 -0
  77. package/dist/assets/vendor/reformer-ui-kit/toggle-group-multi.props-7kNpujN6-jLENMOcN.js +1 -0
  78. package/dist/assets/vendor/reformer-ui-kit/tree-node-schema-xHyN0QCr-CLbM_Aw_.js +1 -0
  79. package/dist/assets/vendor/render-DutGx1TC.js +46 -0
  80. package/dist/assets/vendor/sheet-base-Bdh947IC-CH2UsjIt.js +1 -0
  81. package/dist/assets/vendor/typescript/{typescript-Dp5hP5cS.js → typescript-BejA4q8A.js} +1 -1
  82. package/dist/index.html +2 -2
  83. package/package.json +6 -2
  84. package/runtime-config.schema.json +23 -1
  85. package/dist/assets/css/index-DgRudQqc.css +0 -1
  86. package/dist/assets/i18n/en-DHElWsPO.js +0 -1
  87. package/dist/assets/i18n/ru-DXsuKRv9.js +0 -1
  88. package/dist/assets/js/index-BSeq6-8S.js +0 -67
  89. package/dist/assets/js/index-CQvmAVe0.js +0 -115
  90. package/dist/assets/js/selectors-BiPlGN2c.js +0 -1
  91. package/dist/assets/monaco/html-R9lQ-L9C.js +0 -1
  92. package/dist/assets/monaco/javascript-COUjr2au.js +0 -1
  93. package/dist/assets/monaco/typescript-CVSiBX9O.js +0 -1
  94. package/dist/assets/monaco/xml-ee1lph4p.js +0 -1
  95. package/dist/assets/monaco/yaml-DXPc9WLc.js +0 -1
  96. package/dist/assets/plugins/ai-knowledge-docs-DCjqodcj.js +0 -1
  97. package/dist/assets/plugins/ai-knowledge-index-bUfNPqlZ.js +0 -1
  98. package/dist/assets/plugins/codegen-B0riFOHC.js +0 -416
  99. package/dist/assets/plugins/editor-markdown-oiBrRpM4.js +0 -2
  100. package/dist/assets/plugins/editor-schema-CVPAk-MV.js +0 -4
  101. package/dist/assets/plugins/plugin-manager-BmjjSqYy.js +0 -1
  102. package/dist/assets/plugins/templates-DNeIl0cD.js +0 -2
  103. package/dist/assets/vendor/collapsible-base-DZxAKbAF-h07cIL_F.js +0 -1
  104. package/dist/assets/vendor/index-jGqhTST4.js +0 -6
  105. package/dist/assets/vendor/lucide-react/eye-COs0olKf.js +0 -1
  106. package/dist/assets/vendor/lucide-react/file-code-corner-BMVX-Qf1.js +0 -1
  107. package/dist/assets/vendor/lucide-react/rotate-ccw-D0mVnqJN.js +0 -1
  108. package/dist/assets/vendor/lucide-react/wrench-BX6KiYsu.js +0 -1
  109. package/dist/assets/vendor/message-base-B5jT1FuY-GU8TkaN4.js +0 -1
  110. package/dist/assets/vendor/reformer-cdk/async-boundary-DPu-1Ifi.js +0 -1
  111. package/dist/assets/vendor/reformer-cdk/define-steps-CyGUrx9p-B_03D9I7.js +0 -1
  112. package/dist/assets/vendor/reformer-cdk/file-upload-C_DEa-OT.js +0 -1
  113. package/dist/assets/vendor/reformer-cdk/form-array-DRkRfAUh.js +0 -1
  114. package/dist/assets/vendor/reformer-cdk/form-wizard-DFqFjH7E.js +0 -1
  115. package/dist/assets/vendor/reformer-cdk/index-BXFomK5m.js +0 -1
  116. package/dist/assets/vendor/reformer-form-registry/loader-BK2c_fCA-D59m3JOQ.js +0 -2
  117. package/dist/assets/vendor/reformer-form-registry/react-B8lbN6s4.js +0 -1
  118. package/dist/assets/vendor/reformer-ui-kit/alert-base-WOl_V-qI-CYoSap05.js +0 -1
  119. package/dist/assets/vendor/reformer-ui-kit/component-catalog-BKjWf5Yx.js +0 -1
  120. /package/dist/assets/{js → vendor/reformer-builder-toolkit}/naming-9aaM0Wbc.js +0 -0
@@ -1 +0,0 @@
1
- const e="../../projects/reformer-builder/src/lib/catalog/component-catalog.schema.json",r="2.0",t={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:"*"}}},o=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":["click","hover"],"default":"hover","description":"Чем открывается тултип: наведением или кликом — при клике он остаётся активным.","x-doc":{"group":"Behavior","type":"'click' | 'hover'"}},"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":["click","hover"],"default":"hover","description":"Открытие по наведению или клику — параметр ChartTooltip, самим ChartTooltipContent не читается.","x-doc":{"group":"Behavior","type":"'click' | 'hover'"}},"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":[]}},"variantGroup":"Combobox","variant":"Один"},{"name":"ComboboxMulti","role":"field","exportName":"ComboboxMultiField","propsSchema":{"type":"object","properties":{"className":{"type":"string","description":"Доп. CSS-класс триггера.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"clearable":{"type":"boolean","default":false,"description":"Показывать крестик сброса всего выбора справа от триггера.","x-doc":{"group":"Behavior","type":"boolean"}},"creatable":{"type":"boolean","default":false,"description":"Разрешить ввести своё значение: при отсутствии совпадения — пункт «Создать», добавляющий введённое в выбор. Лейблом для него служит само значение.","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":"Behavior","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"maxItems":{"type":"number","description":"Потолок числа выбранных: по достижении невыбранные пункты выключаются. Подсказка интерфейса, а не правило формы — ограничение задавайте валидатором maxLength(n).","x-doc":{"group":"Behavior","type":"number"},"minimum":1},"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 options..."},"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..."},"summaryThreshold":{"type":"number","description":"Сколько чипов показать в триггере, прежде чем схлопнуть их в сводку «Выбрано: N».","x-doc":{"group":"Behavior","type":"number"},"minimum":1,"default":3},"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, а не []: массив в начальном значении модели создал бы ArrayNode, и поля не было бы вовсе."},"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":[]}},"variantGroup":"Combobox","variant":"Несколько"},{"name":"ComboboxTree","role":"field","exportName":"ComboboxTreeField","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"}},"defaultExpandedIds":{"type":"array","description":"Ветки, раскрытые при открытии списка. Путь до выбранного узла раскрывается и без него.","x-doc":{"group":"State","type":"string[]","kind":"readonly"},"items":{"type":"string"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"emptyText":{"type":"string","description":"Текст пустого состояния (по запросу ничего не совпало).","x-doc":{"group":"Textfield","type":"string"},"default":"Ничего не найдено"},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Behavior","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"maxRows":{"type":"number","description":"Сколько строк дерева показать в поповере до появления прокрутки.","x-doc":{"group":"Behavior","type":"number","kind":"number"},"minimum":1,"default":12},"nodes":{"type":"array","description":"Узлы верхнего уровня. Поиск идёт по label; значением поля становится id выбранного узла.","x-doc":{"group":"Options","type":"Array<{ id; label; kind?; children?; badge?; … }>","kind":"readonly"},"items":{"type":"object","required":["id","label"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Адрес узла, уникальный в пределах дерева."},"label":{"type":"string","description":"Видимая подпись строки; по ней идёт поиск."},"kind":{"type":"string","enum":["branch","leaf"],"description":"Ветка или лист. По умолчанию выводится из наличия children."},"children":{"type":"array","description":"Дети — такие же узлы (вложенность схемой не проверяется). У ветки отсутствие поля означает «уровень не прочитан»."},"badge":{"type":"string","description":"Метка справа от подписи."},"badgeTone":{"type":"string","enum":["default","secondary","destructive","outline"],"description":"Тон метки."},"title":{"type":"string","description":"Подсказка при наведении; по умолчанию label."},"disabled":{"type":"boolean","description":"Строку нельзя выбрать."},"loading":{"type":"boolean","description":"Уровень читается прямо сейчас — вместо треугольника спиннер."},"failed":{"type":"boolean","description":"Уровень не прочитался — подпись становится тревожной."}}}},"placeholder":{"type":"string","description":"Подсказка в триггере, пока ничего не выбрано.","x-doc":{"group":"Textfield","type":"string"},"default":"Выберите файл..."},"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":"Поиск..."},"selectable":{"type":"string","enum":["all","leaf"],"default":"leaf","description":"Что можно выбрать. leaf — выбор файла: щелчок по каталогу его раскрывает. all разрешает выбрать и каталог.","x-doc":{"group":"Behavior","type":"'all' | 'leaf'","kind":"enum"}},"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":"Адрес выбранного узла (node.id). 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 мёртв."},"loadChildren":{"group":"Options","type":"(node: TreeNode | null) => Promise<readonly TreeNode[]>","description":"Ленивое чтение уровня при первом раскрытии ветки; null — верхний уровень. В JSON-форме недостижим: требует функцию — передаётся через реестр компонентов."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","RefAttributes"],"packages":[]}},"variantGroup":"Combobox","variant":"Дерево"},{"name":"ComboboxTreeMulti","role":"field","exportName":"ComboboxTreeMultiField","propsSchema":{"type":"object","properties":{"className":{"type":"string","description":"Доп. CSS-класс триггера.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"clearable":{"type":"boolean","default":false,"description":"Показывать крестик сброса всего выбора справа от триггера.","x-doc":{"group":"Behavior","type":"boolean"}},"defaultExpandedIds":{"type":"array","description":"Ветки, раскрытые при открытии списка. Пути до выбранных узлов раскрываются и без него.","x-doc":{"group":"State","type":"string[]","kind":"readonly"},"items":{"type":"string"}},"description":{"type":"string","description":"Пояснение под полем (shadcn FieldDescription).","x-doc":{"group":"Textfield","type":"string"}},"emptyText":{"type":"string","description":"Текст пустого состояния (по запросу ничего не совпало).","x-doc":{"group":"Textfield","type":"string"},"default":"Ничего не найдено"},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Behavior","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"maxItems":{"type":"number","description":"Потолок числа выбранных: по достижении невыбранные строки гаснут. Подсказка интерфейса, а не правило формы — ограничение задавайте валидатором maxLength(n).","x-doc":{"group":"Behavior","type":"number","kind":"number"},"minimum":1},"maxRows":{"type":"number","description":"Сколько строк дерева показать в поповере до появления прокрутки.","x-doc":{"group":"Behavior","type":"number","kind":"number"},"minimum":1,"default":12},"nodes":{"type":"array","description":"Узлы верхнего уровня. Поиск идёт по label; значением поля становятся id выбранных узлов.","x-doc":{"group":"Options","type":"Array<{ id; label; kind?; children?; badge?; … }>","kind":"readonly"},"items":{"type":"object","required":["id","label"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Адрес узла, уникальный в пределах дерева."},"label":{"type":"string","description":"Видимая подпись строки; по ней идёт поиск."},"kind":{"type":"string","enum":["branch","leaf"],"description":"Ветка или лист. По умолчанию выводится из наличия children."},"children":{"type":"array","description":"Дети — такие же узлы (вложенность схемой не проверяется). У ветки отсутствие поля означает «уровень не прочитан»."},"badge":{"type":"string","description":"Метка справа от подписи."},"badgeTone":{"type":"string","enum":["default","secondary","destructive","outline"],"description":"Тон метки."},"title":{"type":"string","description":"Подсказка при наведении; по умолчанию label."},"disabled":{"type":"boolean","description":"Строку нельзя выбрать."},"loading":{"type":"boolean","description":"Уровень читается прямо сейчас — вместо треугольника спиннер."},"failed":{"type":"boolean","description":"Уровень не прочитался — подпись становится тревожной."}}}},"placeholder":{"type":"string","description":"Подсказка в триггере, пока ничего не выбрано.","x-doc":{"group":"Textfield","type":"string"},"default":"Выберите файлы..."},"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":"Поиск..."},"selectable":{"type":"string","enum":["all","leaf"],"default":"leaf","description":"Что можно выбрать. leaf — выбор файлов: щелчок по каталогу его раскрывает. all разрешает выбрать и каталог.","x-doc":{"group":"Behavior","type":"'all' | 'leaf'","kind":"enum"}},"summaryThreshold":{"type":"number","description":"Сколько чипов показать в триггере, прежде чем схлопнуть их в сводку «Выбрано: N».","x-doc":{"group":"Behavior","type":"number","kind":"number"},"minimum":1,"default":3},"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":"Адреса выбранных узлов (node.id). Пустой выбор приходит как null, а не []: массив в начальном значении модели создал бы ArrayNode, и поля не было бы вовсе."},"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 мёртв."},"loadChildren":{"group":"Options","type":"(node: TreeNode | null) => Promise<readonly TreeNode[]>","description":"Ленивое чтение уровня при первом раскрытии ветки; null — верхний уровень. В JSON-форме недостижим: требует функцию — передаётся через реестр компонентов."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","RefAttributes"],"packages":[]}},"variantGroup":"Combobox","variant":"Дерево, несколько"},{"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"}},"readOnly":{"type":"boolean","default":false,"description":"Значение видно и уходит с формой, но не редактируется. Отличие от disabled: поле остаётся фокусируемым и не выглядит выключенным.","x-doc":{"group":"State","type":"boolean"}},"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"}},"readOnly":{"type":"boolean","default":false,"description":"Значение видно и уходит с формой, но не редактируется. Отличие от disabled: поле остаётся фокусируемым и не выглядит выключенным.","x-doc":{"group":"State","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"}}},"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"}},"readOnly":{"type":"boolean","default":false,"description":"Значение видно и уходит с формой, но не редактируется. Отличие от disabled: поле остаётся фокусируемым и не выглядит выключенным.","x-doc":{"group":"State","type":"boolean"}},"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":[]}},"variantGroup":"NativeSelect","variant":"Один"},{"name":"NativeSelectMulti","role":"field","exportName":"NativeSelectMultiField","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"}},"id":{"type":"string","description":"id корневого элемента — по нему форма связывает подпись, описание и сообщение об ошибке.","x-doc":{"group":"Behavior","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"maxItems":{"type":"number","description":"Потолок числа выбранных: по достижении невыбранные опции выключаются. Подсказка интерфейса, а не правило формы — ограничение задавайте валидатором maxLength(n).","x-doc":{"group":"Behavior","type":"number"},"minimum":1},"options":{"type":"array","description":"Опции списка. Строятся в <option> (сериализуемый источник для формы/DSL); одинаковый group объединяется в <optgroup>.","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"}}}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"rows":{"type":"number","description":"Число видимых строк (нативный атрибут size). По умолчанию браузер показывает 4. Назван rows, а не size: size в ките — ступень шкалы размеров.","x-doc":{"group":"Control","type":"number"},"minimum":2},"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, а не []: массив в начальном значении модели создал бы ArrayNode, и поля не было бы вовсе."},"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","DOMAttributes"],"packages":[]}},"variantGroup":"NativeSelect","variant":"Несколько"},{"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},"size":{"type":"string","enum":["default","xs"],"default":"default","description":"Толщина полос прокрутки: default — 10px, xs — тонкие 6px для плотных рядов (вкладки, панели инструментов).","x-doc":{"group":"Behavior","type":"'default' | 'xs'","kind":"enum"}},"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'"}},"size":{"type":"string","enum":["default","xs"],"default":"default","description":"Толщина полосы: \`xs\` — тонкая (6px) для плотных рядов вроде вкладок.","x-doc":{"group":"Behavior","type":"'default' | 'xs'"}}},"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"]}},"variantGroup":"Select","variant":"Один"},{"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":"SelectMulti","role":"field","exportName":"SelectMultiField","propsSchema":{"type":"object","properties":{"className":{"type":"string","description":"Доп. CSS-класс триггера.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"clearable":{"type":"boolean","default":false,"description":"Показывать крестик сброса всего выбора справа от триггера.","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":"Behavior","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"maxItems":{"type":"number","description":"Потолок числа выбранных: по достижении невыбранные пункты выключаются. Подсказка интерфейса, а не правило формы — ограничение задавайте валидатором maxLength(n).","x-doc":{"group":"Behavior","type":"number"},"minimum":1},"options":{"type":"array","description":"Inline-опции. Взаимоисключающи с resource: если заданы — источник не опрашивается.","x-doc":{"group":"Options","type":"Array<{ value; label; group? }>","kind":"readonly"},"items":{"type":"object","required":["value","label"],"additionalProperties":false,"properties":{"value":{"type":"string"},"label":{"type":"string"},"group":{"type":"string"}}}},"placeholder":{"type":"string","description":"Подсказка в триггере, пока ничего не выбрано.","x-doc":{"group":"Textfield","type":"string"},"default":"Select options..."},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"searchPlaceholder":{"type":"string","description":"Подсказка в поле поиска (показывается при resource с серверным поиском).","x-doc":{"group":"Textfield","type":"string"},"default":"Search..."},"selectedOptions":{"type":"array","description":"Лейблы для уже выбранных значений, которых может не быть в текущей странице опций (сменился поиск, догрузилась страница, перезагрузился источник). Без справочника чип показал бы сырой value.","x-doc":{"group":"Options","type":"Array<{ value; label; group? }>","kind":"readonly"},"items":{"type":"object","required":["value","label"],"additionalProperties":false,"properties":{"value":{"type":"string"},"label":{"type":"string"},"group":{"type":"string"}}}},"summaryThreshold":{"type":"number","description":"Сколько чипов показать в триггере, прежде чем схлопнуть их в сводку «Выбрано: N».","x-doc":{"group":"Behavior","type":"number"},"minimum":1,"default":3},"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, а не []: массив в начальном значении модели создал бы ArrayNode, и поля не было бы вовсе."},"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":[]}},"variantGroup":"Select","variant":"Несколько"},{"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"}},"maxLength":{"type":"number","description":"Максимальная длина ввода (HTML-атрибут maxLength). Не заменяет валидацию.","x-doc":{"group":"Behavior","type":"number"}},"placeholder":{"type":"string","description":"Подсказка внутри поля.","x-doc":{"group":"Textfield","type":"string"}},"readOnly":{"type":"boolean","default":false,"description":"Значение видно и уходит с формой, но не редактируется. Отличие от disabled: поле остаётся фокусируемым и не выглядит выключенным.","x-doc":{"group":"State","type":"boolean"}},"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":[]}},"variantGroup":"ToggleGroup","variant":"Один"},{"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":"ToggleGroupMulti","role":"field","exportName":"ToggleGroupMultiField","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"}},"id":{"type":"string","description":"id контейнера (seam — форма связывает подпись).","x-doc":{"group":"Behavior","type":"string"}},"label":{"type":"string","description":"Подпись поля (рендерит FormField.Label).","x-doc":{"group":"Textfield","type":"string"}},"maxItems":{"type":"number","description":"Потолок числа выбранных: по достижении невыбранные кнопки выключаются. Подсказка интерфейса, а не правило формы — ограничение задавайте валидатором maxLength(n).","x-doc":{"group":"Behavior","type":"number"},"minimum":1},"options":{"type":"array","description":"Варианты выбора. Каждый рендерится как кнопка-переключатель.","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"}}}},"required":{"type":"boolean","default":false,"description":"Маркер «*» у метки + aria-required.","x-doc":{"group":"State","type":"boolean"}},"size":{"type":"string","enum":["default","sm","lg"],"description":"Типоразмер — ступень шкалы размеров из cva-конфига; набор ступеней и значение по умолчанию у каждого компонента свои, а там, где размер задаётся числом, это пиксели.","x-doc":{"group":"Behavior","type":"'default' | 'sm' | 'lg'"}},"testId":{"type":"string","description":"data-testid для e2e (meta-проп; в DOM примитива не течёт).","x-doc":{"group":"Behavior","type":"string","kind":"readonly"}},"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, а не []: массив в начальном значении модели создал бы ArrayNode, и поля не было бы вовсе."},"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","DOMAttributes"],"packages":[]}},"variantGroup":"ToggleGroup","variant":"Несколько"},{"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":"Tree","role":"container","propsSchema":{"type":"object","additionalProperties":false,"x-registryName":"Tree","properties":{"checkOn":{"type":"string","enum":["modifier","click"],"default":"modifier","description":"Как строка попадает в набор: modifier — навигатор файлов (щелчок заменяет набор, Ctrl/Shift его строят), click — выбор из списка (щелчок и пробел переключают членство).","x-doc":{"group":"Behavior","type":"'modifier' | 'click'","kind":"enum"}},"className":{"type":"string","description":"Доп. CSS-класс контейнера дерева.","x-doc":{"group":"Control","type":"string","kind":"readonly"}},"defaultCheckedIds":{"type":"array","description":"Отмеченный набор на старте (неуправляемо).","x-doc":{"group":"Behavior","type":"readonly string[]"}},"defaultExpandedIds":{"type":"array","description":"Адреса веток, раскрытых на старте (неуправляемо).","x-doc":{"group":"State","type":"string[]","kind":"readonly"},"items":{"type":"string"}},"defaultSelectedId":{"type":"string","description":"Выделенный узел на старте (неуправляемо).","x-doc":{"group":"Behavior","type":"string | null"}},"emptyText":{"type":"string","description":"Текст пустого дерева.","x-doc":{"group":"Textfield","type":"string"},"default":"Пусто"},"expandedIds":{"type":"array","description":"Раскрытые ветки (управляемо). Без него дерево держит раскрытие само.","x-doc":{"group":"State","type":"string[]","kind":"readonly"},"items":{"type":"string"}},"id":{"type":"string","description":"id контейнера дерева — по нему подпись снаружи связывается с деревом.","x-doc":{"group":"Behavior","type":"string"}},"indent":{"type":"number","description":"Отступ уровня, px. По умолчанию 12.","x-doc":{"group":"Behavior","type":"number"}},"indentBase":{"type":"number","description":"Отступ первого уровня от левого края, px. По умолчанию 8.","x-doc":{"group":"Behavior","type":"number"}},"maxRows":{"type":"number","description":"Сколько строк показать до появления прокрутки. Задаёт высоту по содержимому; без него высоту задаёт className вызывающего.","x-doc":{"group":"Behavior","type":"number","kind":"number"},"minimum":1},"nodes":{"type":"array","description":"Узлы верхнего уровня. Не задан вместе с loadChildren — верхний уровень дерево прочитает само.","x-doc":{"group":"Options","type":"Array<{ id; label; kind?; children?; badge?; … }>","kind":"readonly"},"items":{"type":"object","required":["id","label"],"additionalProperties":false,"properties":{"id":{"type":"string","description":"Адрес узла, уникальный в пределах дерева."},"label":{"type":"string","description":"Видимая подпись строки; по ней идёт поиск."},"kind":{"type":"string","enum":["branch","leaf"],"description":"Ветка или лист. По умолчанию выводится из наличия children."},"children":{"type":"array","description":"Дети — такие же узлы (вложенность схемой не проверяется). У ветки отсутствие поля означает «уровень не прочитан»."},"badge":{"type":"string","description":"Метка справа от подписи."},"badgeTone":{"type":"string","enum":["default","secondary","destructive","outline"],"description":"Тон метки."},"title":{"type":"string","description":"Подсказка при наведении; по умолчанию label."},"disabled":{"type":"boolean","description":"Строку нельзя выбрать."},"loading":{"type":"boolean","description":"Уровень читается прямо сейчас — вместо треугольника спиннер."},"failed":{"type":"boolean","description":"Уровень не прочитался — подпись становится тревожной."}}}},"rowHeight":{"type":"number","description":"Высота строки, px. На ней стоит виртуальный скролл.","x-doc":{"group":"Behavior","type":"number","kind":"number"},"minimum":1,"default":24},"search":{"type":"string","default":"","description":"Поисковый запрос по подписи. Путь до совпадения раскрывается на время поиска; фильтр видит только прочитанные уровни.","x-doc":{"group":"Textfield","type":"string"}},"selectable":{"type":"string","enum":["all","leaf"],"default":"all","description":"Что можно выбрать. leaf — режим выбора файла: щелчок по ветке её раскрывает.","x-doc":{"group":"Behavior","type":"'all' | 'leaf'","kind":"enum"}},"selectionMode":{"type":"string","enum":["single","multiple"],"default":"single","description":"Режим выбора: один узел (курсор) или курсор плюс отмеченный набор.","x-doc":{"group":"Behavior","type":"'single' | 'multiple'","kind":"enum"}},"virtualized":{"type":"boolean","default":true,"description":"Виртуальный скролл. Выключают там, где дерево заведомо короткое, а разметка нужна целиком (серверная отрисовка).","x-doc":{"group":"Behavior","type":"boolean","kind":"boolean"}}},"x-runtimeProps":{"loadChildren":{"group":"Control","type":"(node: TreeNode | null) => Promise<readonly TreeNode[]>","description":"Ленивое чтение уровня при первом раскрытии ветки; null — верхний уровень. Прочитанное запоминается."},"selectedId":{"group":"Control","type":"string | null","description":"Выделенный узел (управляемо) — «где я сейчас», одна строка."},"onSelectedChange":{"group":"Control","type":"(id: string | null) => void","description":"Смена выделения."},"checkedIds":{"group":"Control","type":"string[]","description":"Отмеченный набор (управляемо) — «что я выбрал». Отдельно от selectedId: набор и выделение отвечают на разные вопросы."},"onCheckedChange":{"group":"Control","type":"(ids: string[]) => void","description":"Смена набора; порядок — порядок строк дерева."},"onExpandedChange":{"group":"Control","type":"(ids: string[]) => void","description":"Смена раскрытых веток."},"onActivate":{"group":"Control","type":"(node: TreeNode, meta: { preview: boolean }) => void","description":"Запуск строки. preview=true — одиночный щелчок или пробел, false — двойной щелчок или Enter. Ветку дерево раскрывает само."},"isNodeDisabled":{"group":"Control","type":"(node: TreeNode) => boolean","description":"Запрет выбора поверх node.disabled — для запретов динамических: потолок числа выбранных, права на файл."},"onRowClick":{"group":"Control","type":"(node: TreeNode, event: React.MouseEvent) => void","description":"Щелчок ДО правил выбора дерева. Вызвавший preventDefault() берёт строку себе целиком — так потребитель со своими правилами остаётся хозяином, не отказываясь от отрисовки."},"onRowDoubleClick":{"group":"Control","type":"(node: TreeNode, event: React.MouseEvent) => void","description":"Двойной щелчок ДО запуска строки; preventDefault отменяет запуск."},"onContextMenu":{"group":"Control","type":"(event: React.MouseEvent) => void","description":"Правый щелчок по дереву целиком; строку потребитель находит по data-tree-id."},"getRowProps":{"group":"Control","type":"(node: TreeNode, row: TreeRow) => HTMLAttributes","description":"Доп. атрибуты строки: свои data-*, title, обработчики."},"renderIcon":{"group":"Control","type":"(node, state: { branch; expanded; selected; checked }) => ReactNode","description":"Значок строки; возврат null оставляет умолчание (каталог/файл)."},"renderLabel":{"group":"Control","type":"(node, state) => ReactNode","description":"Подпись строки; возврат null оставляет node.label."},"renderActions":{"group":"Control","type":"(node: TreeNode, state) => ReactNode","description":"Содержимое правого края строки: свои метки, кнопки, подсказки."},"onLoadError":{"group":"Control","type":"(error: unknown, node: TreeNode | null) => void","description":"Отказ чтения уровня. По умолчанию пишется в консоль."}},"x-inherits":{"react":["AriaAttributes","Attributes","DOMAttributes","RefAttributes"],"packages":[]}}},{"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":[]}}}]`),i={$schema:e,version:"2.0",kit:t,components:o};export{e as $schema,o as components,i as default,t as kit,r as version};