@ryuzaki13/react-foundation-ui 3.12.0 → 3.13.0

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 (310) hide show
  1. package/dist/chunks/{TextEditorLexicalClient-apy-Cugj.js → TextEditorLexicalClient-BwKsJG31.js} +330 -321
  2. package/dist/chunks/TextEditorLexicalClient-BwKsJG31.js.map +1 -0
  3. package/dist/chunks/types-CxXyru6U.js.map +1 -1
  4. package/dist/text-editor/LinkDialog.d.ts +2 -1
  5. package/dist/text-editor/LinkDialog.d.ts.map +1 -1
  6. package/dist/text-editor/TextEditorDialogs.d.ts +3 -2
  7. package/dist/text-editor/TextEditorDialogs.d.ts.map +1 -1
  8. package/dist/text-editor/TextEditorLexicalClient.d.ts +1 -1
  9. package/dist/text-editor/TextEditorLexicalClient.d.ts.map +1 -1
  10. package/dist/text-editor/editorModel.d.ts +18 -1
  11. package/dist/text-editor/editorModel.d.ts.map +1 -1
  12. package/dist/text-editor/index.d.ts +1 -1
  13. package/dist/text-editor/index.d.ts.map +1 -1
  14. package/dist/text-editor/index.js +1 -1
  15. package/dist/text-editor/model/hooks/useTextEditorLexicalActions.d.ts.map +1 -1
  16. package/dist/text-editor/toolbar/LinkButtons.d.ts +2 -1
  17. package/dist/text-editor/toolbar/LinkButtons.d.ts.map +1 -1
  18. package/dist/text-editor/toolbar/TextEditorToolbarLexical.d.ts.map +1 -1
  19. package/package.json +1 -1
  20. package/storybook-static/assets/{Badge-Dn4r-dgK.js → Badge-Bg4hGIjf.js} +1 -1
  21. package/storybook-static/assets/{Badge.stories-C8jgD6Tm.js → Badge.stories-DvgJJzd7.js} +1 -1
  22. package/storybook-static/assets/{BadgeList-DoZGQ7qG.js → BadgeList-OoSc_pn4.js} +1 -1
  23. package/storybook-static/assets/{BarcodeScannerDialog.stories-SWsYyoae.js → BarcodeScannerDialog.stories-e2CjbCdx.js} +1 -1
  24. package/storybook-static/assets/{Button-BHqigqOj.js → Button-CQU_2OUm.js} +1 -1
  25. package/storybook-static/assets/{Button-DLYgesJU.js → Button-CmAd-UMc.js} +1 -1
  26. package/storybook-static/assets/{Button.stories-B-YCCpsv.js → Button.stories-CdXudj27.js} +1 -1
  27. package/storybook-static/assets/{CalendarView-DC9-KqBg.js → CalendarView-CfpxnEan.js} +1 -1
  28. package/storybook-static/assets/{CheckBox-BhDEikPn.js → CheckBox-CtrHIcza.js} +1 -1
  29. package/storybook-static/assets/{CheckBox-A1DE9OKH.js → CheckBox-HehqIiiV.js} +1 -1
  30. package/storybook-static/assets/{CheckBox.stories-CCwPabOj.js → CheckBox.stories-C8DlH2mz.js} +1 -1
  31. package/storybook-static/assets/{Color-6AOWCN3U-CZ7Lqth4.js → Color-6AOWCN3U-D9jGjZ1P.js} +1 -1
  32. package/storybook-static/assets/{ContextMenu-C7QDzxj5.js → ContextMenu-BxHTZhuC.js} +1 -1
  33. package/storybook-static/assets/{ContextMenu-snDFBA5B.js → ContextMenu-t1s2BKrj.js} +1 -1
  34. package/storybook-static/assets/{ContextMenu.stories-DmQHbLWt.js → ContextMenu.stories-CMbIfQb7.js} +1 -1
  35. package/storybook-static/assets/{DateInput-BkVJLdmV.js → DateInput-9FbhYoqV.js} +1 -1
  36. package/storybook-static/assets/{DateInput-DLOTW8zG.js → DateInput-Dm6Kiwka.js} +1 -1
  37. package/storybook-static/assets/{DateInput.stories-DNMVE7-m.js → DateInput.stories-CPAnx1Ii.js} +1 -1
  38. package/storybook-static/assets/{DateRangePresetSelect-FZ5Wqp5Q.js → DateRangePresetSelect-6l9Q7na9.js} +1 -1
  39. package/storybook-static/assets/{DateRangePresetSelect-Aswl3yfO.js → DateRangePresetSelect-CyxvE8Px.js} +1 -1
  40. package/storybook-static/assets/{DateRangePresetSelect.stories-D7j1ye-X.js → DateRangePresetSelect.stories-UZ8CMuwl.js} +1 -1
  41. package/storybook-static/assets/{DeprecatedMultiSelect-BrU5iHiB.js → DeprecatedMultiSelect-C04-2wDB.js} +1 -1
  42. package/storybook-static/assets/{DeprecatedMultiSelect-DZm42dZe.js → DeprecatedMultiSelect-CySF9Hqp.js} +1 -1
  43. package/storybook-static/assets/{DeprecatedMultiSelect.stories-DX5gJVg8.js → DeprecatedMultiSelect.stories-FANxJnL0.js} +1 -1
  44. package/storybook-static/assets/{Detail-Dm2OB35c.js → Detail-CLPDP9b0.js} +1 -1
  45. package/storybook-static/assets/{Detail.stories-ChjIDw9R.js → Detail.stories-BmBFOXYz.js} +1 -1
  46. package/storybook-static/assets/{Dialog-CppiFu4m.js → Dialog-Co-EPLF-.js} +1 -1
  47. package/storybook-static/assets/{Dialog-5Bjs3MIP.js → Dialog-Pzgcq_7r.js} +1 -1
  48. package/storybook-static/assets/{Dialog.stories-DNKVgKJf.js → Dialog.stories-B4DitG-A.js} +1 -1
  49. package/storybook-static/assets/{Disclosure-B_rE1zlW.js → Disclosure-Bt0yvf3r.js} +1 -1
  50. package/storybook-static/assets/{Disclosure.stories-ATxKR5IU.js → Disclosure.stories-Bx4Z3eyR.js} +1 -1
  51. package/storybook-static/assets/{DisclosureGroup-ClweT22a.js → DisclosureGroup-CMheYvQ6.js} +1 -1
  52. package/storybook-static/assets/{DocsRenderer-JROSPFPF-m7QPTTWT.js → DocsRenderer-JROSPFPF-B4cQpl4D.js} +1 -1
  53. package/storybook-static/assets/{DropZone-CEnjaRlb.js → DropZone-D0j1N6Cy.js} +1 -1
  54. package/storybook-static/assets/{DropZone-C6Qx5YnY.js → DropZone-N4HTfImG.js} +1 -1
  55. package/storybook-static/assets/{DropZone.stories-8b7TFwCV.js → DropZone.stories-CPHCbKF-.js} +1 -1
  56. package/storybook-static/assets/{DropdownMenu-BvqYqsyj.js → DropdownMenu-Bf0k8HDo.js} +1 -1
  57. package/storybook-static/assets/{ExpandableActionPanel-DfZA1lTx.js → ExpandableActionPanel-QyKVmfxd.js} +1 -1
  58. package/storybook-static/assets/{ExpandableActionPanel.stories-Bq2XMot-.js → ExpandableActionPanel.stories-BmA0hkNv.js} +1 -1
  59. package/storybook-static/assets/{Flex-BFGhhseF.js → Flex-7J7Ai0St.js} +1 -1
  60. package/storybook-static/assets/{Flex.stories-Ct2TXMNG.js → Flex.stories-DTJoxIVr.js} +1 -1
  61. package/storybook-static/assets/{FlexContainer-DNTMFsKB.js → FlexContainer-CeCwnfbr.js} +1 -1
  62. package/storybook-static/assets/{FlexItem-DdZg96Tw.js → FlexItem-D4epTRUG.js} +1 -1
  63. package/storybook-static/assets/{FloatingPopover-Qm2OYQyi.js → FloatingPopover-4lCnQQo9.js} +1 -1
  64. package/storybook-static/assets/{FloatingWindows.stories-DSXleet4.js → FloatingWindows.stories-BziZWCR7.js} +1 -1
  65. package/storybook-static/assets/FormattedTableCell-SClhK1-d.js +15 -0
  66. package/storybook-static/assets/{Grid-DF06uQ48.js → Grid-BEn16yj_.js} +1 -1
  67. package/storybook-static/assets/{Grid-DlctIqYo.js → Grid-Bv9iz3Ru.js} +1 -1
  68. package/storybook-static/assets/{Grid.stories-CqMEpZ8C.js → Grid.stories-DCcd1XpQ.js} +1 -1
  69. package/storybook-static/assets/{GridContainer-BlkGC1Ti.js → GridContainer-tbwtNWmU.js} +1 -1
  70. package/storybook-static/assets/{ImageCropper.stories-GlDzLRHa.js → ImageCropper.stories-Cj7_L3px.js} +1 -1
  71. package/storybook-static/assets/{ImageRenderer-DKVKzwts.js → ImageRenderer-B8sjaCxb.js} +1 -1
  72. package/storybook-static/assets/{ImageRenderer.stories-D5Ot_LFG.js → ImageRenderer.stories-BjjI8Xl3.js} +1 -1
  73. package/storybook-static/assets/{ImageView.stories-t9WED3jc.js → ImageView.stories-DSQT9rOC.js} +1 -1
  74. package/storybook-static/assets/{ImageViewer.stories-CTLSla9v.js → ImageViewer.stories-BwSjtNZu.js} +2 -2
  75. package/storybook-static/assets/{ImageViewerRuntime-B0a-Sycn.js → ImageViewerRuntime-BYsmm3rq.js} +1 -1
  76. package/storybook-static/assets/{Input-L7KSl95J.js → Input-A2NM7h5s.js} +1 -1
  77. package/storybook-static/assets/{Input-C-RwifM5.js → Input-DFpaY5iR.js} +1 -1
  78. package/storybook-static/assets/{Input.stories-RZ8DST5q.js → Input.stories-Dr3bILG0.js} +1 -1
  79. package/storybook-static/assets/{InputDateTime-C3SMAFaX.js → InputDateTime-B1HZuWxu.js} +1 -1
  80. package/storybook-static/assets/{InputDateTime.stories-Bo76yqgM.js → InputDateTime.stories-BRgylAlk.js} +1 -1
  81. package/storybook-static/assets/{InputFile-DeMKgRCz.js → InputFile-BiYYtArL.js} +1 -1
  82. package/storybook-static/assets/{InputFile-ByiVAcXi.js → InputFile-DJZa1zb6.js} +1 -1
  83. package/storybook-static/assets/{InputFile.stories-C2xolZZp.js → InputFile.stories-fGygLQ4u.js} +1 -1
  84. package/storybook-static/assets/{InputFiles-D2X5XwMg.js → InputFiles-BhE9kv5d.js} +1 -1
  85. package/storybook-static/assets/{InputFiles-DW_A7HZQ.js → InputFiles-Dhx7VEsV.js} +1 -1
  86. package/storybook-static/assets/{InputFiles.stories-Cy4lGiDs.js → InputFiles.stories-Dr4Qonyz.js} +1 -1
  87. package/storybook-static/assets/{InputFilesList-D-T9k_qj.js → InputFilesList-Cv2Gpuuc.js} +1 -1
  88. package/storybook-static/assets/{InputImage-COyE-G8n.js → InputImage-CcGsKNGs.js} +1 -1
  89. package/storybook-static/assets/{InputImage-VviyVqWs.js → InputImage-CsX9WLK_.js} +1 -1
  90. package/storybook-static/assets/{InputImage.stories-C7PZBPak.js → InputImage.stories-DBXKFyN8.js} +1 -1
  91. package/storybook-static/assets/{InteractiveComponents-DsXWc2Ba.js → InteractiveComponents-o5dGoBer.js} +1 -1
  92. package/storybook-static/assets/{InteractiveComponents.stories-xzIOC6VP.js → InteractiveComponents.stories-CbpCs1ke.js} +1 -1
  93. package/storybook-static/assets/{LayoutPicker-CEe3rtKw.js → LayoutPicker-BTV50163.js} +1 -1
  94. package/storybook-static/assets/{LayoutPicker-DqauomnH.js → LayoutPicker-wQBp2vRv.js} +1 -1
  95. package/storybook-static/assets/{LayoutPicker.stories-DZS4nX4W.js → LayoutPicker.stories-BA9v21Xx.js} +1 -1
  96. package/storybook-static/assets/Lexical.prod-DSYr9I3p.js +11 -0
  97. package/storybook-static/assets/{Listbox-DMBqQzvF.js → Listbox-CiYd52jg.js} +1 -1
  98. package/storybook-static/assets/{Listbox-DcoYj_fu.js → Listbox-RA3seYue.js} +1 -1
  99. package/storybook-static/assets/{Listbox.stories-CiEKNklg.js → Listbox.stories-DFPgEF8r.js} +1 -1
  100. package/storybook-static/assets/{NoData-D0rf5MW3.js → LoadingMessage-Ce0vqRgG.js} +1 -1
  101. package/storybook-static/assets/{Modal-XzWN4rYg.js → Modal-BQsAioCj.js} +1 -1
  102. package/storybook-static/assets/{Modal-B2NdQSX-.js → Modal-BpU6G6JZ.js} +1 -1
  103. package/storybook-static/assets/{Modal.stories-DiO0SJb6.js → Modal.stories-CQrrk4EW.js} +1 -1
  104. package/storybook-static/assets/{ModalManagerProvider-CXZWFJBk.js → ModalManagerProvider-CoqdrSRD.js} +1 -1
  105. package/storybook-static/assets/{MultiSelect-Bdo1Sjz8.js → MultiSelect-CU9zjw_p.js} +1 -1
  106. package/storybook-static/assets/{MultiSelect-CIrw0Nez.js → MultiSelect-CZNPmVvS.js} +1 -1
  107. package/storybook-static/assets/{MultiSelect.stories-DsYsvZRr.js → MultiSelect.stories-DFz-EHdG.js} +1 -1
  108. package/storybook-static/assets/{MultiSelectCore-DVlr9xCh.js → MultiSelectCore-Cvyz709z.js} +1 -1
  109. package/storybook-static/assets/NoData-Db8STACh.js +1 -0
  110. package/storybook-static/assets/{NotificationsHost-BQZaAM-V.js → NotificationsHost-BfICsokh.js} +1 -1
  111. package/storybook-static/assets/{NotificationsHost.stories-DwymJZby.js → NotificationsHost.stories-DlihTcqk.js} +1 -1
  112. package/storybook-static/assets/{ODataMultiSelect-DMSWI6tE.js → ODataMultiSelect-bFKNwfVi.js} +1 -1
  113. package/storybook-static/assets/{ODataMultiSelect.stories-B3zztIBx.js → ODataMultiSelect.stories-dSgAmYNP.js} +1 -1
  114. package/storybook-static/assets/{ODataSelect-C7HWF4Mk.js → ODataSelect-B-VxiKqe.js} +1 -1
  115. package/storybook-static/assets/{ODataSelect.stories-BTqluN2n.js → ODataSelect.stories-IrICK-VV.js} +1 -1
  116. package/storybook-static/assets/{ODataTreeMultiSelect-D1C46tO1.js → ODataTreeMultiSelect-1-ZKOoT5.js} +1 -1
  117. package/storybook-static/assets/{ODataTreeMultiSelect.stories-Cau6yuzj.js → ODataTreeMultiSelect.stories-Dj2gz4OX.js} +1 -1
  118. package/storybook-static/assets/{ODataTreeSelect-DjieOI9n.js → ODataTreeSelect-C03yKX3Q.js} +1 -1
  119. package/storybook-static/assets/{ODataTreeSelect.stories-C2QXdt7d.js → ODataTreeSelect.stories-BaWPoCj8.js} +1 -1
  120. package/storybook-static/assets/{OneStepScroller-srOmxRQp.js → OneStepScroller-C1e40EsR.js} +1 -1
  121. package/storybook-static/assets/{Option-7XzYAa1X.js → Option-DkhmepGt.js} +1 -1
  122. package/storybook-static/assets/{OptionButton-De2RG5bE.js → OptionButton-CaOcFLRc.js} +1 -1
  123. package/storybook-static/assets/{OptionContent-J_mD8o8Q.js → OptionContent-C2VjIa7E.js} +1 -1
  124. package/storybook-static/assets/{OptionContentContainer-BMe8XiaH.js → OptionContentContainer-D9gbmo8X.js} +1 -1
  125. package/storybook-static/assets/{PeriodSelect-DffdZHTx.js → PeriodSelect-CKHsqr9Q.js} +1 -1
  126. package/storybook-static/assets/{PeriodSelect-BanQI_dT.js → PeriodSelect-DyuBxEQO.js} +1 -1
  127. package/storybook-static/assets/{PeriodSelect.stories-D_mZIvPa.js → PeriodSelect.stories-Clvkah1Y.js} +1 -1
  128. package/storybook-static/assets/{PickerField-BiRCrEVk.js → PickerField-BeafhNsw.js} +1 -1
  129. package/storybook-static/assets/{PickerTriggerActions-SYQofxvL.js → PickerTriggerActions-DiC3sf79.js} +1 -1
  130. package/storybook-static/assets/{Popover-CyFO9TsF.js → Popover-CTWgpldX.js} +1 -1
  131. package/storybook-static/assets/{Popover-DVLKhPpI.js → Popover-Cic2guk_.js} +1 -1
  132. package/storybook-static/assets/{Popover.stories-z-_6ttYX.js → Popover.stories-BN8W4Ioo.js} +1 -1
  133. package/storybook-static/assets/{PresetRangeDateInput-CNwYUovX.js → PresetRangeDateInput-BlwDGFlO.js} +1 -1
  134. package/storybook-static/assets/{PresetRangeDateInput-DusPRYOo.js → PresetRangeDateInput-Cw-UACKj.js} +1 -1
  135. package/storybook-static/assets/{PresetRangeDateInput.stories-C_o_VW2j.js → PresetRangeDateInput.stories-BW4A9N6I.js} +1 -1
  136. package/storybook-static/assets/{PresetSelect-CV3zwYQR.js → PresetSelect-BROMDIaD.js} +1 -1
  137. package/storybook-static/assets/{README-TaumiOmj.js → README--dlFTbfU.js} +1 -1
  138. package/storybook-static/assets/{README-b_q7W3j3.js → README-0oBzUW7p.js} +1 -1
  139. package/storybook-static/assets/{README-BJ0oZ6IK.js → README-3_ON5xt9.js} +1 -1
  140. package/storybook-static/assets/{README-BggXgUKF.js → README-B2Q8nqgC.js} +1 -1
  141. package/storybook-static/assets/{README-DWfKideq.js → README-B2a17RtT.js} +1 -1
  142. package/storybook-static/assets/{README-C-e2RqTI.js → README-B2o_mu2p.js} +1 -1
  143. package/storybook-static/assets/{README-CJG1QnZ8.js → README-B4UtPkAG.js} +1 -1
  144. package/storybook-static/assets/{README-BwUFmp9h.js → README-BC-mtx0Z.js} +1 -1
  145. package/storybook-static/assets/{README-C-U-dI9P.js → README-BEo-chiK.js} +1 -1
  146. package/storybook-static/assets/{README-BwvDtGJp.js → README-BKgDrLYy.js} +1 -1
  147. package/storybook-static/assets/{README-swRdnv1f.js → README-BU-hpYkT.js} +1 -1
  148. package/storybook-static/assets/{README-_ysKMvAx.js → README-BZO4LN8h.js} +1 -1
  149. package/storybook-static/assets/{README-x--9qFul.js → README-Bt7qMnXG.js} +1 -1
  150. package/storybook-static/assets/{README-BgG12pti.js → README-BzXKbqC2.js} +1 -1
  151. package/storybook-static/assets/{README-CFpsye1R.js → README-C0oFjEzk.js} +1 -1
  152. package/storybook-static/assets/{README-DwC2gAZg.js → README-C4DwwmPx.js} +1 -1
  153. package/storybook-static/assets/{README-Bn7kAPLQ.js → README-CC7qsfLO.js} +1 -1
  154. package/storybook-static/assets/{README-BxC_3EeL.js → README-CCA-VcWp.js} +1 -1
  155. package/storybook-static/assets/{README-DJsEoOXI.js → README-CM3GEer1.js} +1 -1
  156. package/storybook-static/assets/{README-BdSEAONV.js → README-CMm_WVI_.js} +1 -1
  157. package/storybook-static/assets/{README-xDqMMO8-.js → README-Ch0dHOCi.js} +1 -1
  158. package/storybook-static/assets/{README-CtA0tP_V.js → README-CovA1JtH.js} +1 -1
  159. package/storybook-static/assets/{README-D0SwEPQG.js → README-CsAmAsnQ.js} +1 -1
  160. package/storybook-static/assets/{README-0xXSqDp8.js → README-CsgpoZpo.js} +1 -1
  161. package/storybook-static/assets/{README-D_V-SEnq.js → README-CyTthj47.js} +1 -1
  162. package/storybook-static/assets/{README-4aHWePja.js → README-D42tlbcC.js} +1 -1
  163. package/storybook-static/assets/{README-gE_kxplo.js → README-D7e1q280.js} +1 -1
  164. package/storybook-static/assets/{README-Bjq-bxH1.js → README-DEIwHKH_.js} +1 -1
  165. package/storybook-static/assets/{README-BaVIhvx2.js → README-DJXuAagO.js} +1 -1
  166. package/storybook-static/assets/{README-DEHjbK77.js → README-DO98xR7D.js} +1 -1
  167. package/storybook-static/assets/{README-D8bNkmba.js → README-DOCP85Ok.js} +1 -1
  168. package/storybook-static/assets/{README-D0eHrEQF.js → README-DV0qQm_q.js} +1 -1
  169. package/storybook-static/assets/{README-2-1qM_na.js → README-D_wqIsQU.js} +1 -1
  170. package/storybook-static/assets/{README-BjBW3_iS.js → README-Da2MtxkC.js} +1 -1
  171. package/storybook-static/assets/{README-gjTa9tZ_.js → README-DgnwOBAf.js} +1 -1
  172. package/storybook-static/assets/{README-Duk1AG16.js → README-Dh-aESek.js} +1 -1
  173. package/storybook-static/assets/{README-B5zjJGVN.js → README-Dh3cmlxY.js} +1 -1
  174. package/storybook-static/assets/{README-DkEysBXh.js → README-DkqWljOh.js} +1 -1
  175. package/storybook-static/assets/{README-DHXjeQQR.js → README-Dns7UYFR.js} +1 -1
  176. package/storybook-static/assets/{README-CgHkf8AZ.js → README-Dp9qT5k5.js} +1 -1
  177. package/storybook-static/assets/{README-7eESTN29.js → README-Dq_L-Ug6.js} +1 -1
  178. package/storybook-static/assets/{README-BoQbGA96.js → README-DxnLeJiR.js} +1 -1
  179. package/storybook-static/assets/{README-MX6_MwDQ.js → README-JNaV5buf.js} +1 -1
  180. package/storybook-static/assets/{README-DuB9PiOM.js → README-Sg5qacmO.js} +1 -1
  181. package/storybook-static/assets/{README-C3-4o6yH.js → README-Y_9dubMU.js} +1 -1
  182. package/storybook-static/assets/{README-xWo3G40o.js → README-Zi-FFn8W.js} +1 -1
  183. package/storybook-static/assets/{README-DCP4ywXT.js → README-g61K1aLN.js} +1 -1
  184. package/storybook-static/assets/{README-p62MFS5g.js → README-gW1fz6Ad.js} +1 -1
  185. package/storybook-static/assets/{README-DZD6wqGT.js → README-ivZpRido.js} +1 -1
  186. package/storybook-static/assets/{README-Cc67rRzO.js → README-kq33WRAi.js} +1 -1
  187. package/storybook-static/assets/{README-BG0ZHFMO.js → README-lXA9AEv5.js} +1 -1
  188. package/storybook-static/assets/{README-BmcSs4kj.js → README-trL-e_Hw.js} +1 -1
  189. package/storybook-static/assets/{README-CjwjADv4.js → README-yOf-BvTs.js} +1 -1
  190. package/storybook-static/assets/{RadioButton-B6x2_7or.js → RadioButton-Bc-qW8X4.js} +1 -1
  191. package/storybook-static/assets/{RadioButton-CBABLSvE.js → RadioButton-dLi6i_d_.js} +1 -1
  192. package/storybook-static/assets/{RadioButton.stories-DLd7EmuZ.js → RadioButton.stories-fyW8-L85.js} +1 -1
  193. package/storybook-static/assets/RadioGroup-K_pYzh4S.js +1 -0
  194. package/storybook-static/assets/{RadioGroup-Ce5Irxz3.js → RadioGroup-hx5JHhIo.js} +1 -1
  195. package/storybook-static/assets/{RadioGroup.stories-DKhMElyC.js → RadioGroup.stories-DkJM4C8g.js} +1 -1
  196. package/storybook-static/assets/{ResponsiveLayoutPreview-Bcojizl4.js → ResponsiveLayoutPreview-2trckzJQ.js} +1 -1
  197. package/storybook-static/assets/{Scrollable-B5e-IEe8.js → Scrollable-BKrnU0ak.js} +1 -1
  198. package/storybook-static/assets/{Scrollable-BfCUp0BO.js → Scrollable-D4W1DFQg.js} +1 -1
  199. package/storybook-static/assets/{Scrollable.stories-B4IMoipT.js → Scrollable.stories-D27cJCFP.js} +1 -1
  200. package/storybook-static/assets/{Select-CdjYSSyG.js → Select-BdSn2R7K.js} +1 -1
  201. package/storybook-static/assets/{Select-DYHUwcLE.js → Select-DEZyRp-R.js} +1 -1
  202. package/storybook-static/assets/{Select.stories-BuaXB6qE.js → Select.stories-D1Z2CcxZ.js} +1 -1
  203. package/storybook-static/assets/{Separator-D45blL6r.js → Separator-5i4GBBEP.js} +1 -1
  204. package/storybook-static/assets/{Separator-CS6gkWSA.js → Separator-BgRJ7Ocd.js} +1 -1
  205. package/storybook-static/assets/{Separator.stories-C2GzCEGW.js → Separator.stories-CgSiKmhl.js} +1 -1
  206. package/storybook-static/assets/{SerializableSelect-7raamiuG.js → SerializableSelect-DyFu3F0w.js} +1 -1
  207. package/storybook-static/assets/{SerializableSelect.stories-CD0e6DQk.js → SerializableSelect.stories-DGeUH4C-.js} +1 -1
  208. package/storybook-static/assets/{ShimmerText-DkiewbBe.js → ShimmerText-Dp8aRJ4I.js} +1 -1
  209. package/storybook-static/assets/{ShimmerText.stories-DrXMcGDO.js → ShimmerText.stories-Cf25PNCz.js} +1 -1
  210. package/storybook-static/assets/{SingleDateTimeInput-Dj_VSvfb.js → SingleDateTimeInput-Bzm87a3Z.js} +1 -1
  211. package/storybook-static/assets/{SingleDateTimeInput-BTIgqxH7.js → SingleDateTimeInput-DVFOi4lM.js} +1 -1
  212. package/storybook-static/assets/{SingleDateTimeInput.stories-CnYFrOUX.js → SingleDateTimeInput.stories-ChMKxw-w.js} +1 -1
  213. package/storybook-static/assets/{Slider-D4wvDQDc.js → Slider-CyZ-Su8l.js} +1 -1
  214. package/storybook-static/assets/{Slider-CLE5MSJr.js → Slider-DD9J2Qhk.js} +1 -1
  215. package/storybook-static/assets/{Slider.stories-Cbz3RilT.js → Slider.stories-B8wpT9DE.js} +1 -1
  216. package/storybook-static/assets/{SliderInput-AC9oLjGF.js → SliderInput-CZ5RGazl.js} +1 -1
  217. package/storybook-static/assets/{SliderInput-DbyDo3fR.js → SliderInput-DI2fPYZP.js} +1 -1
  218. package/storybook-static/assets/{SliderInput.stories-69pRH0Uk.js → SliderInput.stories-kV5nIvmp.js} +1 -1
  219. package/storybook-static/assets/{Sortable-E3DirII-.js → Sortable-BRJshDsd.js} +1 -1
  220. package/storybook-static/assets/{Sortable.stories-BbmTcem4.js → Sortable.stories-DWdCANF3.js} +1 -1
  221. package/storybook-static/assets/{Splitter-DbaIQk2G.js → Splitter-amimlmxB.js} +1 -1
  222. package/storybook-static/assets/{Splitter.stories-HntpFa6w.js → Splitter.stories-Bp8FI1V5.js} +1 -1
  223. package/storybook-static/assets/{StateSelect-C7ZIrgDB.js → StateSelect-CEg--oWR.js} +1 -1
  224. package/storybook-static/assets/{StateSelect-8r4Qlf4Y.js → StateSelect-U7CVxa71.js} +1 -1
  225. package/storybook-static/assets/{StateSelect.stories-CfUJCQGE.js → StateSelect.stories-DO2hudAT.js} +1 -1
  226. package/storybook-static/assets/{StatusIndicator-IqUZ24rN.js → StatusIndicator-BgS55kfh.js} +1 -1
  227. package/storybook-static/assets/{StatusIndicator.stories-DhKREzk8.js → StatusIndicator.stories-BThF4RAA.js} +1 -1
  228. package/storybook-static/assets/{StringToggle.stories-BOC_AuIw.js → StringToggle.stories-DGpM8fWe.js} +1 -1
  229. package/storybook-static/assets/{Switch-C4wfyH7_.js → Switch-DuR6uVds.js} +1 -1
  230. package/storybook-static/assets/{Switch-58npo6H_.js → Switch-M0xvOjjd.js} +1 -1
  231. package/storybook-static/assets/{Switch.stories-BpABAFmv.js → Switch.stories-4k1xDlbq.js} +1 -1
  232. package/storybook-static/assets/{Table-RAMtWu9C.js → Table-BmYczjli.js} +1 -1
  233. package/storybook-static/assets/{Table.stories-Cth_AbDh.js → Table.stories-c1Yu2DYz.js} +1 -1
  234. package/storybook-static/assets/{TableEditor.stories-IfJyun1v.js → TableEditor.stories-hIvit7LX.js} +1 -1
  235. package/storybook-static/assets/{Tabs-CX67nGv0.js → Tabs-1AzTozGX.js} +1 -1
  236. package/storybook-static/assets/{Tabs.stories-6wO9Pmly.js → Tabs.stories-DUQx0Ezh.js} +1 -1
  237. package/storybook-static/assets/TabsBox-DGdo-Cb1.js +2 -0
  238. package/storybook-static/assets/{TagInput-R6ANDdvh.js → TagInput-qylU7_PQ.js} +1 -1
  239. package/storybook-static/assets/{TagInput.stories-DAyX89-l.js → TagInput.stories-Bs78VRGv.js} +1 -1
  240. package/storybook-static/assets/{Text-D3vBpXH0.js → Text-C8ptoppM.js} +1 -1
  241. package/storybook-static/assets/TextEditorLexical.stories-DWCIfqOj.js +54 -0
  242. package/storybook-static/assets/TextEditorLexicalClient-B17un2t_.js +30 -0
  243. package/storybook-static/assets/TextEditorLexicalClient-CLf0OiWB.css +1 -0
  244. package/storybook-static/assets/TextEditorLexicalViewer.stories-IP2pavj0.js +66 -0
  245. package/storybook-static/assets/{Textarea-BPtHeqrt.js → Textarea-Cpnrb2o_.js} +1 -1
  246. package/storybook-static/assets/{Textarea-Cio32hA3.js → Textarea-nCjyO4i5.js} +1 -1
  247. package/storybook-static/assets/{Textarea.stories-DDVaU3Ho.js → Textarea.stories-BNkapgda.js} +1 -1
  248. package/storybook-static/assets/{TimePanel-e1drsuDA.js → TimePanel-BQK5NbxR.js} +1 -1
  249. package/storybook-static/assets/{TimePanel.stories-Dze9jjtv.js → TimePanel.stories-DYq--6bF.js} +1 -1
  250. package/storybook-static/assets/{Toggle-BuLJ3UR_.js → Toggle-0Y7W-fPi.js} +1 -1
  251. package/storybook-static/assets/{Toggle-D8UQ_CuL.js → Toggle-DVuWIK21.js} +1 -1
  252. package/storybook-static/assets/{Toggle.stories-0wuia83j.js → Toggle.stories-DYZE2fC3.js} +1 -1
  253. package/storybook-static/assets/{TreeMultiSelect-QWOfniqX.js → TreeMultiSelect-BM3xCVHR.js} +1 -1
  254. package/storybook-static/assets/{TreeMultiSelect-Ciy9H9Q3.js → TreeMultiSelect-D7GJiBAt.js} +1 -1
  255. package/storybook-static/assets/{TreeMultiSelect.stories-C5bKUKLA.js → TreeMultiSelect.stories-D2JpEs59.js} +1 -1
  256. package/storybook-static/assets/{TreePickerBase-DAld1sj1.js → TreePickerBase-BCpA1kfG.js} +2 -2
  257. package/storybook-static/assets/{TreeSelect-DKUJycNd.js → TreeSelect-BXBL2lAD.js} +1 -1
  258. package/storybook-static/assets/{TreeSelect-ANFeSIqw.js → TreeSelect-D5oAYLRd.js} +1 -1
  259. package/storybook-static/assets/{TreeSelect.stories-BJErYrTv.js → TreeSelect.stories-emFXypZX.js} +1 -1
  260. package/storybook-static/assets/{TreeTable-DcyUjVXj.js → TreeTable-CEyrFWSm.js} +1 -1
  261. package/storybook-static/assets/{TreeTable.stories-BnyxdNPz.js → TreeTable.stories-DDcnv5XB.js} +1 -1
  262. package/storybook-static/assets/{blocks-Bn1nLfdu.js → blocks-DvVybOVR.js} +4 -4
  263. package/storybook-static/assets/{check-DTcQ3CsH.js → check-YfnFIyMh.js} +1 -1
  264. package/storybook-static/assets/{chevron-down-CRBjmU7w.js → chevron-down-BjxDxv4C.js} +1 -1
  265. package/storybook-static/assets/{chevron-left-CBPOblch.js → chevron-left-C0xgKKWw.js} +1 -1
  266. package/storybook-static/assets/{chevron-right-Bryg2EIf.js → chevron-right-Bo0n7sEl.js} +1 -1
  267. package/storybook-static/assets/{chunk-W22LQPXL-44DPZKTZ.js → chunk-W22LQPXL-r7A3h_Tz.js} +1 -1
  268. package/storybook-static/assets/{circle-alert-DviK8puL.js → circle-alert-Dl_8Z1un.js} +1 -1
  269. package/storybook-static/assets/{circle-check-B1-l7Oh4.js → circle-check-CS9puXbe.js} +1 -1
  270. package/storybook-static/assets/{contextMenu-DtHQnSjw.js → contextMenu-C7If_pOc.js} +1 -1
  271. package/storybook-static/assets/{download-BuLQijJq.js → download-BWZFjl62.js} +1 -1
  272. package/storybook-static/assets/{floating-ui.react-iTaFJp98.js → floating-ui.react-DoLsHxAF.js} +1 -1
  273. package/storybook-static/assets/{formatMultiSelectOptionCount-BxXwE0wd.js → formatMultiSelectOptionCount-Cb7rzikh.js} +1 -1
  274. package/storybook-static/assets/{formatters-DVE1YVNQ-CJCkXjuI.js → formatters-DVE1YVNQ-CimVV-di.js} +1 -1
  275. package/storybook-static/assets/{foundationApi-Bjw5h-ru.js → foundationApi-DUDdWpQ2.js} +1 -1
  276. package/storybook-static/assets/{foundationLib-BcePCYWP.js → foundationLib-C0aoelQA.js} +1 -1
  277. package/storybook-static/assets/hooks-KqAveAk8.js +5 -0
  278. package/storybook-static/assets/{iframe-BvendKJ_.js → iframe-BwMqUCxF.js} +4 -4
  279. package/storybook-static/assets/iframe-CQgVo28z.js +1 -0
  280. package/storybook-static/assets/{info-Dq-9oYHd.js → info-BzoIh38o.js} +1 -1
  281. package/storybook-static/assets/{odata-f2MNATrV.js → odata-B4ZS5oGx.js} +1 -1
  282. package/storybook-static/assets/{odataStoryFixtures-BaKh8qyu.js → odataStoryFixtures-BoXfGt8L.js} +1 -1
  283. package/storybook-static/assets/{react-B6cO4JYx.js → react-BxTMipfI.js} +1 -1
  284. package/storybook-static/assets/{refresh-cw-DmxZlsqm.js → refresh-cw-DZHdlgJG.js} +1 -1
  285. package/storybook-static/assets/{settings-2-CBuqWUWt.js → settings-2-CSUUgi_0.js} +1 -1
  286. package/storybook-static/assets/sortable-Bikh9uZC.js +1 -0
  287. package/storybook-static/assets/{syntaxhighlighter-QEQV7K2Y-h6bhL7V7.js → syntaxhighlighter-QEQV7K2Y-BvV0CW9d.js} +1 -1
  288. package/storybook-static/assets/{trash-2-wTK0eWnF.js → trash-2-Csx302gq.js} +1 -1
  289. package/storybook-static/assets/{triangle-alert-CD0VXyGn.js → triangle-alert-CA_CSo3b.js} +1 -1
  290. package/storybook-static/assets/types-U_TJ2tHU.js +1 -0
  291. package/storybook-static/assets/{useODataSelectBase-keqr2Q3a.js → useODataSelectBase-Dmlavp_v.js} +1 -1
  292. package/storybook-static/assets/{useODataTreeData-BLDGoADN.js → useODataTreeData-W3o26svk.js} +1 -1
  293. package/storybook-static/assets/{usePickerQuery-BA8NMnw6.js → usePickerQuery-IBbvSDWi.js} +1 -1
  294. package/storybook-static/assets/{usePickerTriggerController-Ceb5Hrtf.js → usePickerTriggerController-Cy-RrU3A.js} +1 -1
  295. package/storybook-static/assets/{utils-tg3ibbzi.js → utils-DiA8FLax.js} +1 -1
  296. package/storybook-static/assets/validators-CLNEY_Fa.js +1 -0
  297. package/storybook-static/assets/{x-CsG3nxct.js → x-CP7phAx6.js} +1 -1
  298. package/storybook-static/iframe.html +2 -2
  299. package/storybook-static/index.json +1 -1
  300. package/storybook-static/project.json +1 -1
  301. package/dist/chunks/TextEditorLexicalClient-apy-Cugj.js.map +0 -1
  302. package/storybook-static/assets/FormattedTableCell-Cfdl2sgg.js +0 -15
  303. package/storybook-static/assets/RadioGroup-CIaXj3zQ.js +0 -1
  304. package/storybook-static/assets/TabsBox-QKS_MMQ0.js +0 -2
  305. package/storybook-static/assets/TextEditorLexicalViewer.stories-RdypWNwx.js +0 -66
  306. package/storybook-static/assets/hooks-CiUB_4kG.js +0 -5
  307. package/storybook-static/assets/iframe-BzGX4Usd.js +0 -1
  308. package/storybook-static/assets/sortable-BkTzd-5v.js +0 -1
  309. package/storybook-static/assets/validators-D82aYLRK.js +0 -1
  310. /package/storybook-static/assets/{NoData-C7KqaHUh.css → LoadingMessage-C7KqaHUh.css} +0 -0
@@ -1 +1 @@
1
- {"generatedAt":1790450401118,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":false,"hasStorybookEslint":false,"refCount":0,"metaFramework":{"name":"tanstack-react","packageName":"@tanstack/react-router","version":"1.170.32"},"knownPackages":{"testPackages":{"@chromatic-com/storybook":"5.3.0","@storybook/addon-vitest":"10.5.10","@testing-library/dom":"10.4.1","@testing-library/react":"16.3.3","@testing-library/user-event":"^14.6.1","@vitest/browser":"4.1.11","playwright":"1.62.1","vitest":"4.1.11"},"stateManagementPackages":{"zustand":"5.0.0"},"dataFetchingPackages":{"@tanstack/react-query":"5.101.4"},"routerPackages":{"@tanstack/react-router":"1.170.23"}},"hasRouterPackage":false,"packageManager":{"type":"npm","version":"11.7.0","agent":"npm","nodeLinker":"node_modules"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/react-vite","options":{}},"builder":"@storybook/builder-vite","renderer":"@storybook/react","portableStoriesFileCount":1,"applicationFileCount":9,"storybookVersion":"10.5.10","storybookVersionSpecifier":"^10.5.5","language":"typescript","storybookPackages":{"@storybook/react-vite":{"version":"10.5.10"},"storybook":{}},"addons":{"@chromatic-com/storybook":{"version":"5.3.0"},"@storybook/addon-docs":{"version":"10.5.10"},"@storybook/addon-a11y":{"version":"10.5.10"},"@storybook/addon-vitest":{"version":"10.5.10"}},"packageJsonType":"module"}
1
+ {"generatedAt":1790489797567,"hasCustomBabel":false,"hasCustomWebpack":false,"hasStaticDirs":false,"hasStorybookEslint":false,"refCount":0,"metaFramework":{"name":"tanstack-react","packageName":"@tanstack/react-router","version":"1.170.32"},"knownPackages":{"testPackages":{"@chromatic-com/storybook":"5.3.0","@storybook/addon-vitest":"10.5.10","@testing-library/dom":"10.4.1","@testing-library/react":"16.3.3","@testing-library/user-event":"^14.6.1","@vitest/browser":"4.1.11","playwright":"1.62.1","vitest":"4.1.11"},"stateManagementPackages":{"zustand":"5.0.0"},"dataFetchingPackages":{"@tanstack/react-query":"5.101.4"},"routerPackages":{"@tanstack/react-router":"1.170.23"}},"hasRouterPackage":false,"packageManager":{"type":"npm","version":"11.7.0","agent":"npm","nodeLinker":"node_modules"},"preview":{"usesGlobals":false},"framework":{"name":"@storybook/react-vite","options":{}},"builder":"@storybook/builder-vite","renderer":"@storybook/react","portableStoriesFileCount":1,"applicationFileCount":9,"storybookVersion":"10.5.10","storybookVersionSpecifier":"^10.5.5","language":"typescript","storybookPackages":{"@storybook/react-vite":{"version":"10.5.10"},"storybook":{}},"addons":{"@chromatic-com/storybook":{"version":"5.3.0"},"@storybook/addon-docs":{"version":"10.5.10"},"@storybook/addon-a11y":{"version":"10.5.10"},"@storybook/addon-vitest":{"version":"10.5.10"}},"packageJsonType":"module"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"TextEditorLexicalClient-apy-Cugj.js","names":[],"sources":["../../src/text-editor/toolbar/Toolbar.module.scss","../../src/text-editor/toolbar/ToolbarControl.tsx","../../src/text-editor/toolbar/AlignmentControls.tsx","../../src/text-editor/toolbar/HistoryControls.tsx","../../src/text-editor/toolbar/LinkButtons.tsx","../../src/text-editor/toolbar/TagButtons.tsx","../../src/text-editor/toolbar/TextEditorToolbarLexical.tsx","../../src/text-editor/lexical/plugins/InitialHtmlPlugin.tsx","../../src/text-editor/model/textEditorTypes.ts","../../src/text-editor/lib/toolbar/styleMappers.ts","../../src/text-editor/lib/toolbar/resolveToolbarState.ts","../../src/text-editor/lexical/plugins/SelectionStatePlugin.tsx","../../src/text-editor/lib/serialization/createLexicalRaw.ts","../../src/text-editor/lib/selection/findSelectedInlineNode.ts","../../src/text-editor/lib/selection/restoreEditorDialogSelection.ts","../../src/text-editor/lib/semantic/getSemanticTagDepth.ts","../../src/text-editor/nodes/AccessibleLinkNode.ts","../../src/text-editor/nodes/SemanticTagNode.ts","../../src/text-editor/model/hooks/useTextEditorLexicalActions.ts","../../src/text-editor/TextEditor.module.scss","../../src/text-editor/EmailDialog.tsx","../../src/text-editor/lib/semantic/getTimeDialogInitialState.ts","../../src/text-editor/LinkDialog.tsx","../../src/text-editor/PhoneDialog.tsx","../../src/text-editor/SemanticDialog.tsx","../../src/text-editor/lib/semantic/isSemanticDateTime.ts","../../src/text-editor/semanticTagConfigs.tsx","../../src/text-editor/TimeDialog.tsx","../../src/text-editor/TextEditorDialogs.tsx","../../src/text-editor/TextEditorLexicalClient.tsx"],"sourcesContent":[".toolbar {\n\tdisplay: flex;\n\tflex-wrap: wrap;\n\tjustify-content: start;\n\tgap: var(--space-sm);\n\tmargin-bottom: var(--space-md);\n\n\thr {\n\t\tmargin: 0.5rem 0;\n\t}\n}\n\n.groupControls {\n\tdisplay: flex;\n\tgap: var(--space-sm);\n}\n","import { type MouseEvent, type ReactNode } from \"react\";\n\nimport { Button } from \"../../button\";\n\ntype ToolbarControlProps = {\n\tisActive?: boolean;\n\tonClick?: (style: string) => void;\n\ttitle?: string;\n\tstyle?: string;\n\tdisabled?: boolean;\n\ticon?: ReactNode;\n};\n\n/**\n * Унифицированная кнопка действия в тулбаре текстового редактора. Отвечает за активное состояние, disabled-режим и визуальное представление иконки.\n */\nexport function ToolbarControl({ isActive, disabled, style, title, icon, onClick }: ToolbarControlProps) {\n\tconst handleMouseDown = (e: MouseEvent<HTMLButtonElement>) => {\n\t\t// Не отдаём фокус кнопке раньше сохранения Lexical selection. Само действие\n\t\t// выполняется native click: одинаково для мыши, Enter и пробела.\n\t\te.preventDefault();\n\t};\n\n\treturn (\n\t\t<Button\n\t\t\ttitle={title}\n\t\t\tdisabled={disabled}\n\t\t\tappearance=\"outline\"\n\t\t\ttone={isActive ? \"info\" : undefined}\n\t\t\tonMouseDown={handleMouseDown}\n\t\t\tonClick={() => onClick?.(style || \"\")}\n\t\t\ticon={icon}\n\t\t/>\n\t);\n}\n","import { AlignCenter, AlignJustify, AlignLeft, AlignRight } from \"lucide-react\";\n\nimport ToolbarStyle from \"./Toolbar.module.scss\";\nimport { ToolbarControl } from \"./ToolbarControl\";\n\nimport type { TextAlignment } from \"../model/textEditorTypes\";\n\ninterface AlignmentControlsProps {\n\tonAlignmentChange: (alignment: TextAlignment) => void;\n\tactiveAlignment?: TextAlignment | null;\n}\n\n/**\n * Кнопки управления выравниванием содержимого в текстовом редакторе. Используются в тулбаре для смены текстового alignment.\n */\nexport function AlignmentControls({ onAlignmentChange, activeAlignment }: AlignmentControlsProps) {\n\treturn (\n\t\t<div className={ToolbarStyle.groupControls}>\n\t\t\t<ToolbarControl\n\t\t\t\ttitle=\"По левому краю\"\n\t\t\t\ticon={<AlignLeft />}\n\t\t\t\tisActive={activeAlignment === \"left\"}\n\t\t\t\tonClick={() => onAlignmentChange(\"left\")}\n\t\t\t/>\n\t\t\t<ToolbarControl\n\t\t\t\ttitle=\"По центру\"\n\t\t\t\ticon={<AlignCenter />}\n\t\t\t\tisActive={activeAlignment === \"center\"}\n\t\t\t\tonClick={() => onAlignmentChange(\"center\")}\n\t\t\t/>\n\t\t\t<ToolbarControl\n\t\t\t\ttitle=\"По правому краю\"\n\t\t\t\ticon={<AlignRight />}\n\t\t\t\tisActive={activeAlignment === \"right\"}\n\t\t\t\tonClick={() => onAlignmentChange(\"right\")}\n\t\t\t/>\n\t\t\t<ToolbarControl\n\t\t\t\ttitle=\"По ширине\"\n\t\t\t\ticon={<AlignJustify />}\n\t\t\t\tisActive={activeAlignment === \"justify\"}\n\t\t\t\tonClick={() => onAlignmentChange(\"justify\")}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { Redo, Undo } from \"lucide-react\";\n\nimport ToolbarStyle from \"./Toolbar.module.scss\";\nimport { ToolbarControl } from \"./ToolbarControl\";\n\ninterface HistoryControlsProps {\n\tonUndo: () => void;\n\tonRedo: () => void;\n}\n\n/**\n * Кнопки отмены и повтора действий для текстового редактора. Отвечают за работу с историей изменений документа.\n */\nexport function HistoryControls({ onUndo, onRedo }: HistoryControlsProps) {\n\treturn (\n\t\t<div className={ToolbarStyle.groupControls}>\n\t\t\t<ToolbarControl title=\"Отменить последнее действие\" icon={<Undo />} onClick={onUndo} />\n\t\t\t<ToolbarControl title=\"Повторить предыдущее действие\" icon={<Redo />} onClick={onRedo} />\n\t\t</div>\n\t);\n}\n","import { AtSign, ExternalLink, Link, Phone } from \"lucide-react\";\n\nimport ToolbarStyle from \"./Toolbar.module.scss\";\nimport { ToolbarControl } from \"./ToolbarControl\";\nimport { LinkTypes } from \"./types\";\n\ninterface LinkButtonsProps {\n\tdisabled: boolean;\n\tonClick: (type: LinkTypes) => void;\n}\n\n/**\n * Набор кнопок для вставки ссылок и связанных сущностей в текстовом редакторе. Используется в составе тулбара редактора.\n */\nexport function LinkButtons({ disabled, onClick }: LinkButtonsProps) {\n\treturn (\n\t\t<div className={ToolbarStyle.groupControls}>\n\t\t\t<ToolbarControl title=\"Добавить ссылку на статью\" icon={<Link />} onClick={() => onClick(LinkTypes.LOCAL_LINK)} />\n\t\t\t<ToolbarControl title=\"Добавить ссылку\" disabled={disabled} icon={<ExternalLink />} onClick={() => onClick(LinkTypes.LINK)} />\n\t\t\t<ToolbarControl title=\"Добавить телефон\" disabled={disabled} icon={<Phone />} onClick={() => onClick(LinkTypes.PHONE)} />\n\t\t\t<ToolbarControl title=\"Добавить email\" disabled={disabled} icon={<AtSign />} onClick={() => onClick(LinkTypes.EMAIL)} />\n\t\t</div>\n\t);\n}\n","import { BookType, Clock, Languages, MessageSquareQuote, PictureInPicture, Shredder } from \"lucide-react\";\n\nimport ToolbarStyle from \"./Toolbar.module.scss\";\nimport { ToolbarControl } from \"./ToolbarControl\";\nimport { TagTypes } from \"./types\";\n\ninterface TagButtonsProps {\n\tonClick: (type: TagTypes) => void;\n}\n\n/**\n * Переиспользуемый компонент `TagButtons` из раздела `toolbar`. Инкапсулирует общую логику отображения и взаимодействия, чтобы интерфейс оставался консистентным.\n */\nexport function TagButtons({ onClick }: TagButtonsProps) {\n\treturn (\n\t\t<div className={ToolbarStyle.groupControls}>\n\t\t\t<ToolbarControl title=\"Вставить Аббревиатуру\" icon={<BookType />} onClick={() => onClick(TagTypes.abbr)} />\n\t\t\t<ToolbarControl title=\"Вставить Код языка\" icon={<Languages />} onClick={() => onClick(TagTypes.lang)} />\n\t\t\t<ToolbarControl title=\"Вставить Дату/время\" icon={<Clock />} onClick={() => onClick(TagTypes.time)} />\n\t\t\t<ToolbarControl title=\"Вставить Ссылку на источник\" icon={<MessageSquareQuote />} onClick={() => onClick(TagTypes.cite)} />\n\t\t\t<ToolbarControl title=\"Вставить Удалённый фрагмент\" icon={<Shredder />} onClick={() => onClick(TagTypes.del)} />\n\t\t\t<ToolbarControl title=\"Вставить Добавленный фрагмент\" icon={<PictureInPicture />} onClick={() => onClick(TagTypes.ins)} />\n\t\t</div>\n\t);\n}\n","import { BrushCleaning } from \"lucide-react\";\n\nimport { AlignmentControls } from \"./AlignmentControls\";\nimport { HistoryControls } from \"./HistoryControls\";\nimport { LinkButtons } from \"./LinkButtons\";\nimport { TagButtons } from \"./TagButtons\";\nimport ToolbarStyle from \"./Toolbar.module.scss\";\nimport { ToolbarControl } from \"./ToolbarControl\";\nimport { LinkTypes, TagTypes, TextEditorBlockControls, TextEditorInlineControls } from \"./types\";\n\nimport type { TextEditorToolbarComponents } from \"../editorModel\";\nimport type { LexicalToolbarState, TextAlignment } from \"../model/textEditorTypes\";\n\ninterface TextEditorToolbarLexicalProps {\n\ttoolbarComponents?: TextEditorToolbarComponents;\n\tstate: LexicalToolbarState;\n\tonBlockStyleToggle: (style: string) => void;\n\tonInlineStyleToggle: (style: string) => void;\n\tonAlignmentChange: (alignment: TextAlignment) => void;\n\tonLinkClick: (type: LinkTypes) => void;\n\tonTagClick: (type: TagTypes) => void;\n\tonUndo: () => void;\n\tonRedo: () => void;\n\tonCleanTag?: () => void;\n}\n\n/**\n * Основная панель инструментов редактора Lexical. Собирает управляющие блоки и синхронизирует их с текущим состоянием выделения.\n */\nexport function TextEditorToolbarLexical({\n\ttoolbarComponents,\n\tstate,\n\tonBlockStyleToggle,\n\tonInlineStyleToggle,\n\tonAlignmentChange,\n\tonLinkClick,\n\tonTagClick,\n\tonUndo,\n\tonRedo,\n\tonCleanTag\n}: TextEditorToolbarLexicalProps) {\n\tconst components = { history: true, ...(toolbarComponents || {}) };\n\n\treturn (\n\t\t<div className={ToolbarStyle.toolbar}>\n\t\t\t{components.blocks && (\n\t\t\t\t<>\n\t\t\t\t\t<div className={ToolbarStyle.groupControls}>\n\t\t\t\t\t\t{TextEditorBlockControls.map((control) => (\n\t\t\t\t\t\t\t<ToolbarControl\n\t\t\t\t\t\t\t\tkey={control.style}\n\t\t\t\t\t\t\t\tisActive={control.style === state.blockType}\n\t\t\t\t\t\t\t\tstyle={control.style}\n\t\t\t\t\t\t\t\ttitle={control.label}\n\t\t\t\t\t\t\t\ticon={control.icon}\n\t\t\t\t\t\t\t\tonClick={onBlockStyleToggle}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t\t<hr />\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{components.inline && (\n\t\t\t\t<>\n\t\t\t\t\t<div className={ToolbarStyle.groupControls}>\n\t\t\t\t\t\t{TextEditorInlineControls.map((control) => (\n\t\t\t\t\t\t\t<ToolbarControl\n\t\t\t\t\t\t\t\tkey={control.style}\n\t\t\t\t\t\t\t\tisActive={!!state.activeInlineStyles[control.style as keyof typeof state.activeInlineStyles]}\n\t\t\t\t\t\t\t\ttitle={control.label}\n\t\t\t\t\t\t\t\tstyle={control.style}\n\t\t\t\t\t\t\t\ticon={control.icon}\n\t\t\t\t\t\t\t\tdisabled={state.isTextUnselected}\n\t\t\t\t\t\t\t\tonClick={onInlineStyleToggle}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t))}\n\t\t\t\t\t</div>\n\t\t\t\t\t<hr />\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{components.alignment && (\n\t\t\t\t<>\n\t\t\t\t\t<AlignmentControls activeAlignment={state.activeAlignment} onAlignmentChange={onAlignmentChange} />\n\t\t\t\t\t<hr />\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{components.links && (\n\t\t\t\t<>\n\t\t\t\t\t<LinkButtons disabled={state.isTextUnselected} onClick={onLinkClick} />\n\t\t\t\t\t<hr />\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{components.tags && (\n\t\t\t\t<>\n\t\t\t\t\t<TagButtons onClick={onTagClick} />\n\t\t\t\t\t<hr />\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t{components.history && (\n\t\t\t\t<>\n\t\t\t\t\t<HistoryControls onUndo={onUndo} onRedo={onRedo} />\n\t\t\t\t\t<hr />\n\t\t\t\t</>\n\t\t\t)}\n\n\t\t\t<ToolbarControl\n\t\t\t\tdisabled={state.isTextUnselected}\n\t\t\t\ttitle=\"Очистить выбранный тег\"\n\t\t\t\ticon={<BrushCleaning />}\n\t\t\t\tonClick={onCleanTag}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n","import { useEffect, useRef } from \"react\";\n\nimport { $generateNodesFromDOM } from \"@lexical/html\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $createParagraphNode, $getRoot } from \"lexical\";\n\ninterface InitialHtmlPluginProps {\n\tinitialHTML?: string;\n\tshouldSkip: boolean;\n}\n\n/**\n * Плагин Lexical для инициализации содержимого редактора из HTML-строки.\n */\nexport function InitialHtmlPlugin({ initialHTML, shouldSkip }: InitialHtmlPluginProps) {\n\tconst [editor] = useLexicalComposerContext();\n\tconst isAppliedRef = useRef(false);\n\n\tuseEffect(() => {\n\t\tif (shouldSkip || !initialHTML || isAppliedRef.current || typeof window === \"undefined\") return;\n\n\t\tisAppliedRef.current = true;\n\t\teditor.update(() => {\n\t\t\tconst root = $getRoot();\n\t\t\tconst dom = new DOMParser().parseFromString(initialHTML, \"text/html\");\n\t\t\tconst nodes = $generateNodesFromDOM(editor, dom);\n\n\t\t\troot.clear();\n\t\t\tif (nodes.length === 0) {\n\t\t\t\troot.append($createParagraphNode());\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\troot.append(...nodes);\n\t\t});\n\t}, [editor, initialHTML, shouldSkip]);\n\n\treturn null;\n}\n","export type TextAlignment = \"left\" | \"center\" | \"right\" | \"justify\";\n\nexport type TextEditorBlockStyle =\n\t| \"header-one\"\n\t| \"header-two\"\n\t| \"header-three\"\n\t| \"header-four\"\n\t| \"header-five\"\n\t| \"header-six\"\n\t| \"blockquote\"\n\t| \"code-block\"\n\t| \"ordered-list-item\"\n\t| \"unordered-list-item\"\n\t| \"unstyled\"\n\t| \"paragraph\";\n\nexport type TextEditorInlineStyle = \"BOLD\" | \"ITALIC\" | \"UNDERLINE\" | \"STRIKETHROUGH\" | \"HIGHLIGHT\" | \"CODE\";\n\nexport type TextEditorElementTypes = TextEditorBlockStyle | TextEditorInlineStyle;\n\nexport interface TextEditorLinkState {\n\tariaLabel: string;\n\ttext: string;\n\turl: string;\n\tadd: string;\n\tqrCode?: boolean;\n}\n\nexport type LinkType = TextEditorLinkState | string;\n\nexport interface LexicalToolbarState {\n\tblockType: string;\n\tisTextUnselected: boolean;\n\tactiveInlineStyles: Record<TextEditorInlineStyle, boolean>;\n\tactiveAlignment: TextAlignment | null;\n}\n\nexport const DEFAULT_TOOLBAR_STATE: LexicalToolbarState = {\n\tblockType: \"unstyled\",\n\tisTextUnselected: true,\n\tactiveInlineStyles: {\n\t\tBOLD: false,\n\t\tITALIC: false,\n\t\tUNDERLINE: false,\n\t\tSTRIKETHROUGH: false,\n\t\tHIGHLIGHT: false,\n\t\tCODE: false\n\t},\n\tactiveAlignment: null\n};\n","import type { TextEditorBlockStyle } from \"../../model/textEditorTypes\";\n\nexport const getHeadingBlockType = (tag: string): TextEditorBlockStyle => {\n\tswitch (tag) {\n\t\tcase \"h3\":\n\t\t\treturn \"header-three\";\n\t\tcase \"h4\":\n\t\t\treturn \"header-four\";\n\t\tcase \"h5\":\n\t\t\treturn \"header-five\";\n\t\tcase \"h6\":\n\t\t\treturn \"header-six\";\n\t\tdefault:\n\t\t\treturn \"unstyled\";\n\t}\n};\n\nexport const getHeadingTagByStyle = (style: string): \"h3\" | \"h4\" | \"h5\" | \"h6\" | null => {\n\tswitch (style) {\n\t\tcase \"header-three\":\n\t\t\treturn \"h3\";\n\t\tcase \"header-four\":\n\t\t\treturn \"h4\";\n\t\tcase \"header-five\":\n\t\t\treturn \"h5\";\n\t\tcase \"header-six\":\n\t\t\treturn \"h6\";\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n\nexport const getLexicalInlineStyle = (style: string): string | null => {\n\tswitch (style) {\n\t\tcase \"BOLD\":\n\t\t\treturn \"bold\";\n\t\tcase \"ITALIC\":\n\t\t\treturn \"italic\";\n\t\tcase \"UNDERLINE\":\n\t\t\treturn \"underline\";\n\t\tcase \"STRIKETHROUGH\":\n\t\t\treturn \"strikethrough\";\n\t\tcase \"HIGHLIGHT\":\n\t\t\treturn \"highlight\";\n\t\tcase \"CODE\":\n\t\t\treturn \"code\";\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n","import { $isListItemNode, $isListNode } from \"@lexical/list\";\nimport { $isHeadingNode, $isQuoteNode } from \"@lexical/rich-text\";\nimport { $getSelection, $isRangeSelection } from \"lexical\";\n\nimport { DEFAULT_TOOLBAR_STATE, type LexicalToolbarState, type TextAlignment } from \"../../model/textEditorTypes\";\n\nimport { getHeadingBlockType } from \"./styleMappers\";\n\nexport const resolveBlockType = (): string => {\n\tconst selection = $getSelection();\n\tif (!$isRangeSelection(selection)) return \"unstyled\";\n\n\tconst anchorNode = selection.anchor.getNode();\n\tconst topLevel = anchorNode.getTopLevelElementOrThrow();\n\n\tif ($isListItemNode(topLevel)) {\n\t\tconst listNode = topLevel.getParent();\n\t\tif ($isListNode(listNode)) {\n\t\t\treturn listNode.getListType() === \"bullet\" ? \"unordered-list-item\" : \"ordered-list-item\";\n\t\t}\n\t}\n\n\tif ($isListNode(topLevel)) {\n\t\treturn topLevel.getListType() === \"bullet\" ? \"unordered-list-item\" : \"ordered-list-item\";\n\t}\n\n\tif ($isHeadingNode(topLevel)) {\n\t\treturn getHeadingBlockType(topLevel.getTag());\n\t}\n\n\tif ($isQuoteNode(topLevel)) {\n\t\treturn \"blockquote\";\n\t}\n\n\tif (topLevel.getType() === \"paragraph\") {\n\t\treturn \"unstyled\";\n\t}\n\n\treturn topLevel.getType();\n};\n\nexport const resolveAlignment = (): TextAlignment | null => {\n\tconst selection = $getSelection();\n\tif (!$isRangeSelection(selection)) return null;\n\n\tconst anchorNode = selection.anchor.getNode();\n\tconst topLevel = anchorNode.getTopLevelElementOrThrow();\n\tconst formatType = topLevel.getFormatType();\n\n\tswitch (formatType) {\n\t\tcase \"left\":\n\t\tcase \"center\":\n\t\tcase \"right\":\n\t\tcase \"justify\":\n\t\t\treturn formatType;\n\t\tdefault:\n\t\t\treturn null;\n\t}\n};\n\nexport const resolveToolbarState = (): LexicalToolbarState => {\n\tconst selection = $getSelection();\n\tif (!$isRangeSelection(selection)) {\n\t\treturn DEFAULT_TOOLBAR_STATE;\n\t}\n\n\treturn {\n\t\tblockType: resolveBlockType(),\n\t\tisTextUnselected: selection.isCollapsed(),\n\t\tactiveInlineStyles: {\n\t\t\tBOLD: selection.hasFormat(\"bold\"),\n\t\t\tITALIC: selection.hasFormat(\"italic\"),\n\t\t\tUNDERLINE: selection.hasFormat(\"underline\"),\n\t\t\tSTRIKETHROUGH: selection.hasFormat(\"strikethrough\"),\n\t\t\tHIGHLIGHT: selection.hasFormat(\"highlight\" as never),\n\t\t\tCODE: selection.hasFormat(\"code\")\n\t\t},\n\t\tactiveAlignment: resolveAlignment()\n\t};\n};\n","import { useEffect } from \"react\";\n\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { LexicalEditor } from \"lexical\";\n\nimport { resolveToolbarState } from \"../../lib/toolbar/resolveToolbarState\";\n\nimport type { LexicalToolbarState } from \"../../model/textEditorTypes\";\n\ninterface SelectionStatePluginProps {\n\tonEditorReady: (editor: LexicalEditor) => void;\n\tonStateChange: (state: LexicalToolbarState) => void;\n}\n\n/**\n * Плагин Lexical, отслеживающий состояние выделения и готовность редактора.\n */\nexport function SelectionStatePlugin({ onEditorReady, onStateChange }: SelectionStatePluginProps) {\n\tconst [editor] = useLexicalComposerContext();\n\n\tuseEffect(() => {\n\t\tonEditorReady(editor);\n\n\t\treturn editor.registerUpdateListener(({ editorState }) => {\n\t\t\teditorState.read(() => {\n\t\t\t\tonStateChange(resolveToolbarState());\n\t\t\t});\n\t\t});\n\t}, [editor, onEditorReady, onStateChange]);\n\n\treturn null;\n}\n","import { EditorState as LexicalEditorState } from \"lexical\";\n\nimport type { TextEditorLexicalRaw } from \"../../editorModel\";\n\nexport const createLexicalRaw = (editorState: LexicalEditorState): TextEditorLexicalRaw => {\n\treturn {\n\t\tformat: \"lexical\",\n\t\tversion: 1,\n\t\teditorState: editorState.toJSON() as unknown as Record<string, unknown>\n\t};\n};\n","import { $findMatchingParent } from \"@lexical/utils\";\nimport { $getSelection, $isRangeSelection, type LexicalNode } from \"lexical\";\n\n/** Редактируем один wrapper только когда обе границы selection принадлежат ему. */\nexport function $findSelectedInlineNode<T extends LexicalNode>(predicate: (node: LexicalNode) => node is T): T | null {\n\tconst selection = $getSelection();\n\tif (!$isRangeSelection(selection)) return null;\n\tconst anchor = $findMatchingParent(selection.anchor.getNode(), predicate);\n\tconst focus = $findMatchingParent(selection.focus.getNode(), predicate);\n\treturn anchor && focus && anchor.is(focus) && predicate(anchor) ? anchor : null;\n}\n","import { $createParagraphNode, $getNodeByKey, $getRoot, $isElementNode, $isTextNode, $setSelection, type RangeSelection } from \"lexical\";\n\n/**\n * Восстанавливает место вставки, сохранённое до переноса фокуса в диалог.\n * Вызывается только внутри editor.update при подтверждении: открытие и отмена\n * не меняют документ/историю. Удалённый или отсутствующий диапазон означает\n * добавление в конец; пустому корню нужен абзац для корректного inline-узла.\n */\nexport function $restoreEditorDialogSelection(snapshot: RangeSelection | null): RangeSelection {\n\tif (\n\t\tsnapshot &&\n\t\t[snapshot.anchor, snapshot.focus].every((point) => {\n\t\t\tconst node = $getNodeByKey(point.key);\n\t\t\tif (!node?.isAttached() || point.offset < 0) return false;\n\t\t\treturn point.type === \"text\"\n\t\t\t\t? $isTextNode(node) && point.offset <= node.getTextContentSize()\n\t\t\t\t: $isElementNode(node) && point.offset <= node.getChildrenSize();\n\t\t})\n\t) {\n\t\tconst selection = snapshot.clone();\n\t\t$setSelection(selection);\n\t\treturn selection;\n\t}\n\tconst root = $getRoot();\n\tif (root.isEmpty()) root.append($createParagraphNode());\n\treturn root.selectEnd();\n}\n","import type { LexicalNode } from \"lexical\";\n\nexport const getSemanticTagDepth = (node: LexicalNode): number => {\n\tlet depth = 0;\n\tlet current: LexicalNode | null = node;\n\n\twhile (current) {\n\t\tdepth += 1;\n\t\tcurrent = current.getParent();\n\t}\n\n\treturn depth;\n};\n","import { LinkAttributes, LinkNode, SerializedLinkNode } from \"@lexical/link\";\nimport {\n\t$applyNodeReplacement,\n\tDOMConversionMap,\n\tDOMConversionOutput,\n\tEditorConfig,\n\tElementNode,\n\tLexicalNode,\n\tLexicalUpdateJSON,\n\tNodeKey,\n\tRangeSelection,\n\tSpread\n} from \"lexical\";\n\nexport type AccessibleLinkAttributes = LinkAttributes & {\n\tariaLabel?: null | string;\n\tqrCode?: boolean;\n\tadd?: null | string;\n\ttext?: null | string;\n};\n\nexport type SerializedAccessibleLinkNode = Spread<\n\t{\n\t\tariaLabel: null | string;\n\t\tqrCode: boolean;\n\t\tadd: null | string;\n\t\ttext: null | string;\n\t},\n\tSerializedLinkNode\n>;\n\nconst convertAccessibleLinkElement = (domNode: Node): DOMConversionOutput => {\n\tif (!(domNode instanceof HTMLAnchorElement)) {\n\t\treturn { node: null };\n\t}\n\n\tconst textContent = domNode.textContent;\n\tif ((textContent === null || textContent === \"\") && domNode.children.length === 0) {\n\t\treturn { node: null };\n\t}\n\n\treturn {\n\t\tnode: $createAccessibleLinkNode(domNode.getAttribute(\"href\") || \"\", {\n\t\t\trel: domNode.getAttribute(\"rel\"),\n\t\t\ttarget: domNode.getAttribute(\"target\"),\n\t\t\ttitle: domNode.getAttribute(\"title\"),\n\t\t\tariaLabel: domNode.getAttribute(\"aria-label\"),\n\t\t\tqrCode: domNode.getAttribute(\"data-qr-code\") === \"true\",\n\t\t\tadd: null,\n\t\t\ttext: textContent\n\t\t})\n\t};\n};\n\nexport class AccessibleLinkNode extends LinkNode {\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t__ariaLabel: null | string;\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t__qrCode: boolean;\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t__add: null | string;\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t__text: null | string;\n\n\tstatic getType(): string {\n\t\treturn \"accessible-link\";\n\t}\n\n\tstatic clone(node: AccessibleLinkNode): AccessibleLinkNode {\n\t\treturn new AccessibleLinkNode(\n\t\t\tnode.__url,\n\t\t\t{\n\t\t\t\trel: node.__rel,\n\t\t\t\ttarget: node.__target,\n\t\t\t\ttitle: node.__title,\n\t\t\t\tariaLabel: node.__ariaLabel,\n\t\t\t\tqrCode: node.__qrCode,\n\t\t\t\tadd: node.__add,\n\t\t\t\ttext: node.__text\n\t\t\t},\n\t\t\tnode.__key\n\t\t);\n\t}\n\n\tconstructor(url = \"\", attributes: AccessibleLinkAttributes = {}, key?: NodeKey) {\n\t\tsuper(url, attributes, key);\n\n\t\tconst { ariaLabel = null, qrCode = false, add = null, text = null } = attributes;\n\t\tthis.__ariaLabel = ariaLabel;\n\t\tthis.__qrCode = qrCode;\n\t\tthis.__add = add;\n\t\tthis.__text = text;\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null {\n\t\treturn {\n\t\t\ta: () => ({\n\t\t\t\tconversion: convertAccessibleLinkElement,\n\t\t\t\tpriority: 2\n\t\t\t})\n\t\t};\n\t}\n\n\tstatic importJSON(serializedNode: SerializedAccessibleLinkNode): AccessibleLinkNode {\n\t\treturn $createAccessibleLinkNode().updateFromJSON(serializedNode);\n\t}\n\n\tupdateFromJSON(serializedNode: LexicalUpdateJSON<SerializedAccessibleLinkNode>): this {\n\t\treturn super\n\t\t\t.updateFromJSON(serializedNode)\n\t\t\t.setAriaLabel(serializedNode.ariaLabel || null)\n\t\t\t.setQrCode(!!serializedNode.qrCode)\n\t\t\t.setAdd(serializedNode.add || null)\n\t\t\t.setText(serializedNode.text || null);\n\t}\n\n\texportJSON(): SerializedAccessibleLinkNode {\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\ttype: \"accessible-link\",\n\t\t\tversion: 1,\n\t\t\tariaLabel: this.getAriaLabel(),\n\t\t\tqrCode: this.getQrCode(),\n\t\t\tadd: this.getAdd(),\n\t\t\ttext: this.getText()\n\t\t} as SerializedAccessibleLinkNode;\n\t}\n\n\tcreateDOM(config: EditorConfig): HTMLElement {\n\t\tconst dom = super.createDOM(config) as HTMLElement;\n\t\tthis.applyAccessibleAttributes(null, dom);\n\t\treturn dom;\n\t}\n\n\tupdateDOM(prevNode: this, anchor: HTMLElement, config: EditorConfig): boolean {\n\t\tconst isUpdated = super.updateDOM(prevNode, anchor as never, config);\n\t\tthis.applyAccessibleAttributes(prevNode, anchor);\n\t\treturn isUpdated;\n\t}\n\n\tapplyAccessibleAttributes(prevNode: this | null, anchor: HTMLElement): void {\n\t\tif (!(anchor instanceof HTMLAnchorElement)) {\n\t\t\treturn;\n\t\t}\n\n\t\tif (!prevNode || prevNode.__ariaLabel !== this.__ariaLabel) {\n\t\t\tif (this.__ariaLabel) {\n\t\t\t\tanchor.setAttribute(\"aria-label\", this.__ariaLabel);\n\t\t\t} else {\n\t\t\t\tanchor.removeAttribute(\"aria-label\");\n\t\t\t}\n\t\t}\n\n\t\tif (!prevNode || prevNode.__qrCode !== this.__qrCode) {\n\t\t\tanchor.setAttribute(\"data-qr-code\", this.__qrCode ? \"true\" : \"false\");\n\t\t}\n\t}\n\n\tinsertNewAfter(_selection: RangeSelection, restoreSelection = true): null | ElementNode {\n\t\tconst linkNode = $createAccessibleLinkNode(this.__url, {\n\t\t\trel: this.__rel,\n\t\t\ttarget: this.__target,\n\t\t\ttitle: this.__title,\n\t\t\tariaLabel: this.__ariaLabel,\n\t\t\tqrCode: this.__qrCode,\n\t\t\tadd: this.__add,\n\t\t\ttext: this.__text\n\t\t});\n\t\tthis.insertAfter(linkNode, restoreSelection);\n\t\treturn linkNode;\n\t}\n\n\tgetAriaLabel(): null | string {\n\t\treturn this.getLatest().__ariaLabel;\n\t}\n\n\tsetAriaLabel(ariaLabel: null | string): this {\n\t\tconst writable = this.getWritable();\n\t\twritable.__ariaLabel = ariaLabel;\n\t\treturn this;\n\t}\n\n\tgetQrCode(): boolean {\n\t\treturn this.getLatest().__qrCode;\n\t}\n\n\tsetQrCode(qrCode: boolean): this {\n\t\tconst writable = this.getWritable();\n\t\twritable.__qrCode = qrCode;\n\t\treturn this;\n\t}\n\n\tgetAdd(): null | string {\n\t\treturn this.getLatest().__add;\n\t}\n\n\tsetAdd(add: null | string): this {\n\t\tconst writable = this.getWritable();\n\t\twritable.__add = add;\n\t\treturn this;\n\t}\n\n\tgetText(): null | string {\n\t\treturn this.getLatest().__text;\n\t}\n\n\tsetText(text: null | string): this {\n\t\tconst writable = this.getWritable();\n\t\twritable.__text = text;\n\t\treturn this;\n\t}\n}\n\nexport const $createAccessibleLinkNode = (url = \"\", attributes?: AccessibleLinkAttributes): AccessibleLinkNode => {\n\treturn $applyNodeReplacement(new AccessibleLinkNode(url, attributes));\n};\n\nexport const $isAccessibleLinkNode = (node: LexicalNode | null | undefined): node is AccessibleLinkNode => {\n\treturn node instanceof AccessibleLinkNode;\n};\n","import {\n\t$applyNodeReplacement,\n\tDOMConversionMap,\n\tDOMConversionOutput,\n\tEditorConfig,\n\tElementNode,\n\tLexicalNode,\n\tLexicalUpdateJSON,\n\tNodeKey,\n\tRangeSelection,\n\tSerializedElementNode,\n\tSpread\n} from \"lexical\";\n\nexport type SemanticTagAttributes = Record<string, string>;\n\nexport type SerializedSemanticTagNode = Spread<\n\t{\n\t\ttag: string;\n\t\tattributes: SemanticTagAttributes;\n\t\ttext: null | string;\n\t},\n\tSerializedElementNode\n>;\n\nconst getAttributesFromElement = (element: HTMLElement): SemanticTagAttributes => {\n\tconst attributes: SemanticTagAttributes = {};\n\tArray.from(element.attributes).forEach((attr) => {\n\t\tif (attr.name === \"class\") return;\n\t\tattributes[attr.name] = attr.value;\n\t});\n\treturn attributes;\n};\n\nconst convertSemanticTagElement = (domNode: Node): DOMConversionOutput => {\n\tif (!(domNode instanceof HTMLElement)) {\n\t\treturn { node: null };\n\t}\n\n\tconst tag = domNode.tagName.toLowerCase();\n\tif (![\"abbr\", \"span\", \"time\", \"cite\", \"del\", \"ins\"].includes(tag)) {\n\t\treturn { node: null };\n\t}\n\n\tconst text = domNode.textContent;\n\tif ((text === null || text === \"\") && domNode.children.length === 0) {\n\t\treturn { node: null };\n\t}\n\n\treturn {\n\t\tnode: $createSemanticTagNode(tag, getAttributesFromElement(domNode), text)\n\t};\n};\n\nexport class SemanticTagNode extends ElementNode {\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t__tag: string;\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t__attributes: SemanticTagAttributes;\n\t// eslint-disable-next-line @typescript-eslint/naming-convention\n\t__text: null | string;\n\n\tstatic getType(): string {\n\t\treturn \"semantic-tag\";\n\t}\n\n\tstatic clone(node: SemanticTagNode): SemanticTagNode {\n\t\treturn new SemanticTagNode(node.__tag, node.__attributes, node.__text, node.__key);\n\t}\n\n\tconstructor(tag = \"span\", attributes: SemanticTagAttributes = {}, text: null | string = null, key?: NodeKey) {\n\t\tsuper(key);\n\t\tthis.__tag = tag;\n\t\tthis.__attributes = attributes;\n\t\tthis.__text = text;\n\t}\n\n\tstatic importDOM(): DOMConversionMap | null {\n\t\treturn {\n\t\t\tabbr: () => ({ conversion: convertSemanticTagElement, priority: 2 }),\n\t\t\tspan: () => ({ conversion: convertSemanticTagElement, priority: 2 }),\n\t\t\ttime: () => ({ conversion: convertSemanticTagElement, priority: 2 }),\n\t\t\tcite: () => ({ conversion: convertSemanticTagElement, priority: 2 }),\n\t\t\tdel: () => ({ conversion: convertSemanticTagElement, priority: 2 }),\n\t\t\tins: () => ({ conversion: convertSemanticTagElement, priority: 2 })\n\t\t};\n\t}\n\n\tstatic importJSON(serializedNode: SerializedSemanticTagNode): SemanticTagNode {\n\t\treturn $createSemanticTagNode(serializedNode.tag, serializedNode.attributes, serializedNode.text).updateFromJSON(serializedNode);\n\t}\n\n\tupdateFromJSON(serializedNode: LexicalUpdateJSON<SerializedSemanticTagNode>): this {\n\t\treturn super\n\t\t\t.updateFromJSON(serializedNode)\n\t\t\t.setTag(serializedNode.tag)\n\t\t\t.setAttributes(serializedNode.attributes || {})\n\t\t\t.setText(serializedNode.text || null);\n\t}\n\n\texportJSON(): SerializedSemanticTagNode {\n\t\treturn {\n\t\t\t...super.exportJSON(),\n\t\t\ttype: \"semantic-tag\",\n\t\t\tversion: 1,\n\t\t\ttag: this.getTag(),\n\t\t\tattributes: this.getAttributes(),\n\t\t\ttext: this.getText()\n\t\t};\n\t}\n\n\tcreateDOM(config: EditorConfig): HTMLElement {\n\t\tvoid config;\n\t\tconst element = document.createElement(this.__tag);\n\t\tthis.applyEditorAttributes(element);\n\t\treturn element;\n\t}\n\n\tupdateDOM(prevNode: this, dom: HTMLElement): boolean {\n\t\tif (prevNode.__tag !== this.__tag) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.applyEditorAttributes(dom);\n\t\treturn false;\n\t}\n\n\texportDOM(): { element: HTMLElement } {\n\t\tconst element = document.createElement(this.__tag);\n\t\tObject.entries(this.__attributes).forEach(([key, value]) => {\n\t\t\telement.setAttribute(key, value);\n\t\t});\n\t\treturn { element };\n\t}\n\n\tapplyEditorAttributes(dom: HTMLElement): void {\n\t\tdom.classList.add(\"custom-tag-highlight\");\n\t\tArray.from(dom.attributes).forEach((attr) => {\n\t\t\tif (attr.name === \"class\") return;\n\t\t\tdom.removeAttribute(attr.name);\n\t\t});\n\t\tObject.entries(this.__attributes).forEach(([key, value]) => {\n\t\t\tdom.setAttribute(key, value);\n\t\t});\n\t}\n\n\tinsertNewAfter(_selection: RangeSelection, restoreSelection = true): null | ElementNode {\n\t\tconst node = $createSemanticTagNode(this.__tag, this.__attributes, this.__text);\n\t\tthis.insertAfter(node, restoreSelection);\n\t\treturn node;\n\t}\n\n\tcanInsertTextBefore(): boolean {\n\t\treturn false;\n\t}\n\n\tcanInsertTextAfter(): boolean {\n\t\treturn false;\n\t}\n\n\tcanBeEmpty(): boolean {\n\t\treturn false;\n\t}\n\n\tisInline(): boolean {\n\t\treturn true;\n\t}\n\n\tgetTag(): string {\n\t\treturn this.getLatest().__tag;\n\t}\n\n\tsetTag(tag: string): this {\n\t\tconst writable = this.getWritable();\n\t\twritable.__tag = tag;\n\t\treturn this;\n\t}\n\n\tgetAttributes(): SemanticTagAttributes {\n\t\treturn this.getLatest().__attributes;\n\t}\n\n\tsetAttributes(attributes: SemanticTagAttributes): this {\n\t\tconst writable = this.getWritable();\n\t\twritable.__attributes = attributes;\n\t\treturn this;\n\t}\n\n\tgetText(): null | string {\n\t\treturn this.getLatest().__text;\n\t}\n\n\tsetText(text: null | string): this {\n\t\tconst writable = this.getWritable();\n\t\twritable.__text = text;\n\t\treturn this;\n\t}\n}\n\nexport const $createSemanticTagNode = (\n\ttag: string,\n\tattributes: SemanticTagAttributes = {},\n\ttext: null | string = null\n): SemanticTagNode => {\n\treturn $applyNodeReplacement(new SemanticTagNode(tag, attributes, text));\n};\n\nexport const $isSemanticTagNode = (node: LexicalNode | null | undefined): node is SemanticTagNode => {\n\treturn node instanceof SemanticTagNode;\n};\n","import { useCallback, useRef, useState } from \"react\";\n\nimport { $isLinkNode } from \"@lexical/link\";\nimport { INSERT_ORDERED_LIST_COMMAND, INSERT_UNORDERED_LIST_COMMAND, REMOVE_LIST_COMMAND } from \"@lexical/list\";\nimport { $createHeadingNode, $createQuoteNode } from \"@lexical/rich-text\";\nimport { $setBlocksType } from \"@lexical/selection\";\nimport {\n\t$createParagraphNode,\n\t$createTextNode,\n\t$getSelection,\n\t$getNodeByKey,\n\t$isRangeSelection,\n\ttype ElementFormatType,\n\tFORMAT_ELEMENT_COMMAND,\n\tFORMAT_TEXT_COMMAND,\n\tHISTORY_MERGE_TAG,\n\tHISTORY_PUSH_TAG,\n\ttype LexicalEditor,\n\ttype LexicalNode,\n\ttype RangeSelection,\n\tREDO_COMMAND,\n\tSKIP_DOM_SELECTION_TAG,\n\tUNDO_COMMAND\n} from \"lexical\";\n\nimport { $findSelectedInlineNode } from \"../../lib/selection/findSelectedInlineNode\";\nimport { $restoreEditorDialogSelection } from \"../../lib/selection/restoreEditorDialogSelection\";\nimport { getSemanticTagDepth } from \"../../lib/semantic/getSemanticTagDepth\";\nimport { getHeadingTagByStyle, getLexicalInlineStyle } from \"../../lib/toolbar/styleMappers\";\nimport { $createAccessibleLinkNode, $isAccessibleLinkNode } from \"../../nodes/AccessibleLinkNode\";\nimport { $createSemanticTagNode, $isSemanticTagNode, type SemanticTagNode } from \"../../nodes/SemanticTagNode\";\nimport { LinkTypes, TagTypes } from \"../../toolbar\";\nimport { type SemanticDialogState } from \"../semanticDialogState\";\nimport { type LexicalToolbarState, type LinkType, type TextAlignment } from \"../textEditorTypes\";\n\ninterface InsertLinkPayload {\n\turl: string;\n\ttext: string;\n\tadd: string;\n\tariaLabel: string;\n\tqrCode: boolean;\n}\n\ninterface UseTextEditorLexicalActionsParams {\n\teditor: LexicalEditor | null;\n\ttoolbarState: LexicalToolbarState;\n\thasLocalLinkDialog: boolean;\n\tonOpenLinkDialog: (type: LinkTypes) => void;\n\tonOpenTagDialog: (type: TagTypes) => void;\n}\n\nexport function useTextEditorLexicalActions({\n\teditor,\n\ttoolbarState,\n\thasLocalLinkDialog,\n\tonOpenLinkDialog,\n\tonOpenTagDialog\n}: UseTextEditorLexicalActionsParams) {\n\t// Snapshot принадлежит одной сессии ссылки и конкретному editor, не внешнему\n\t// каталогу. Каждое открытие заменяет его, в том числе после отмены диалога.\n\tconst linkSelectionRef = useRef<{ editor: LexicalEditor; selection: RangeSelection | null; key: string | null; local: boolean } | null>(\n\t\tnull\n\t);\n\tconst semanticSelectionRef = useRef<{ editor: LexicalEditor; selection: RangeSelection | null; key: string | null } | null>(null);\n\tconst [linkDialogState, setLinkDialogState] = useState<LinkType>(\"\");\n\tconst [semanticDialogState, setSemanticDialogState] = useState<SemanticDialogState>({ text: \"\", attributes: {} });\n\tconst handleBlockStyleToggle = useCallback(\n\t\t(style: string) => {\n\t\t\tif (!editor) return;\n\n\t\t\tif (style === \"unordered-list-item\") {\n\t\t\t\tif (toolbarState.blockType === \"unordered-list-item\") {\n\t\t\t\t\teditor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\teditor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND, undefined);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (style === \"ordered-list-item\") {\n\t\t\t\tif (toolbarState.blockType === \"ordered-list-item\") {\n\t\t\t\t\teditor.dispatchCommand(REMOVE_LIST_COMMAND, undefined);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\teditor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND, undefined);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\teditor.update(() => {\n\t\t\t\tconst selection = $getSelection();\n\t\t\t\tif (!$isRangeSelection(selection)) return;\n\n\t\t\t\tif (style === \"unstyled\" || style === \"paragraph\") {\n\t\t\t\t\t$setBlocksType(selection, () => $createParagraphNode());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif (style === \"blockquote\") {\n\t\t\t\t\t$setBlocksType(selection, () => $createQuoteNode());\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst headingTag = getHeadingTagByStyle(style);\n\t\t\t\tif (headingTag) {\n\t\t\t\t\t$setBlocksType(selection, () => $createHeadingNode(headingTag));\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\t\t[editor, toolbarState.blockType]\n\t);\n\n\tconst handleInlineStyleToggle = useCallback(\n\t\t(style: string) => {\n\t\t\tif (!editor) return;\n\n\t\t\tconst lexicalStyle = getLexicalInlineStyle(style);\n\t\t\tif (!lexicalStyle) return;\n\n\t\t\teditor.dispatchCommand(FORMAT_TEXT_COMMAND, lexicalStyle as never);\n\t\t},\n\t\t[editor]\n\t);\n\n\tconst handleAlignmentChange = useCallback(\n\t\t(alignment: TextAlignment) => {\n\t\t\tif (!editor) return;\n\t\t\teditor.dispatchCommand(FORMAT_ELEMENT_COMMAND, alignment as ElementFormatType);\n\t\t},\n\t\t[editor]\n\t);\n\n\tconst handleUndo = useCallback(() => {\n\t\tif (!editor) return;\n\t\teditor.dispatchCommand(UNDO_COMMAND, undefined);\n\t}, [editor]);\n\n\tconst handleRedo = useCallback(() => {\n\t\tif (!editor) return;\n\t\teditor.dispatchCommand(REDO_COMMAND, undefined);\n\t}, [editor]);\n\n\tconst insertLinkAtSelection = useCallback(\n\t\t(payload: InsertLinkPayload) => {\n\t\t\tif (!editor) return;\n\n\t\t\tconst snapshot = linkSelectionRef.current;\n\t\t\tlinkSelectionRef.current = null;\n\t\t\t// Отдельный selection-only commit создаёт baseline HistoryPlugin даже\n\t\t\t// до первого ввода. Вставка затем отменяется одним undo и не сливается\n\t\t\t// с предыдущим набором текста; фокус передаём только после закрытия диалога.\n\t\t\teditor.update(\n\t\t\t\t() => {\n\t\t\t\t\t$restoreEditorDialogSelection(snapshot?.editor === editor ? snapshot.selection : null);\n\t\t\t\t},\n\t\t\t\t{ discrete: true, tag: [HISTORY_MERGE_TAG, SKIP_DOM_SELECTION_TAG] }\n\t\t\t);\n\t\t\teditor.update(\n\t\t\t\t() => {\n\t\t\t\t\tconst selection = $getSelection();\n\t\t\t\t\tif (!$isRangeSelection(selection)) return;\n\t\t\t\t\tconst existing = snapshot?.editor === editor && snapshot.key ? $getNodeByKey(snapshot.key) : null;\n\t\t\t\t\tif ($isAccessibleLinkNode(existing) && existing.isAttached()) {\n\t\t\t\t\t\texisting\n\t\t\t\t\t\t\t.setURL(payload.url)\n\t\t\t\t\t\t\t.setAriaLabel(payload.ariaLabel)\n\t\t\t\t\t\t\t.setQrCode(payload.qrCode)\n\t\t\t\t\t\t\t.setAdd(payload.add || null);\n\t\t\t\t\t\t// Изменение адреса не стирает rich-text дочерних узлов.\n\t\t\t\t\t\tif (snapshot?.local && payload.text !== existing.getTextContent())\n\t\t\t\t\t\t\texisting.clear().append($createTextNode(payload.text));\n\t\t\t\t\t\texisting.setText(existing.getTextContent());\n\t\t\t\t\t\texisting.selectEnd();\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tconst selectionText = selection.getTextContent();\n\t\t\t\t\tconst finalText = payload.text.length > 0 ? payload.text : selectionText;\n\t\t\t\t\tif (!finalText.trim()) return;\n\n\t\t\t\t\tconst linkNode = $createAccessibleLinkNode(payload.url, {\n\t\t\t\t\t\ttarget: \"_blank\",\n\t\t\t\t\t\trel: \"noopener noreferrer\",\n\t\t\t\t\t\tariaLabel: payload.ariaLabel || selectionText || finalText,\n\t\t\t\t\t\tqrCode: payload.qrCode,\n\t\t\t\t\t\tadd: payload.add || null,\n\t\t\t\t\t\ttext: finalText\n\t\t\t\t\t});\n\n\t\t\t\t\tconst textNode = $createTextNode(finalText);\n\t\t\t\t\tlinkNode.append(textNode);\n\t\t\t\t\tselection.insertNodes([linkNode]);\n\t\t\t\t},\n\t\t\t\t{ tag: HISTORY_PUSH_TAG }\n\t\t\t);\n\n\t\t\trequestAnimationFrame(() => {\n\t\t\t\teditor.focus();\n\t\t\t});\n\t\t},\n\t\t[editor]\n\t);\n\n\tconst handleAddLink = useCallback(\n\t\t(url: string, text: string, add: string, ariaLabel: string, showQrCode: boolean) => {\n\t\t\tinsertLinkAtSelection({\n\t\t\t\turl,\n\t\t\t\ttext,\n\t\t\t\tadd,\n\t\t\t\tariaLabel,\n\t\t\t\tqrCode: showQrCode\n\t\t\t});\n\t\t},\n\t\t[insertLinkAtSelection]\n\t);\n\n\tconst handleAddLocalLink = useCallback(\n\t\t(url: string, caption: string) => {\n\t\t\tinsertLinkAtSelection({\n\t\t\t\turl,\n\t\t\t\ttext: caption,\n\t\t\t\tadd: \"\",\n\t\t\t\tariaLabel: \"Внутренняя ссылка на статью: \" + caption,\n\t\t\t\tqrCode: false\n\t\t\t});\n\t\t},\n\t\t[insertLinkAtSelection]\n\t);\n\n\tconst readSelectedLinkState = useCallback((): LinkType => {\n\t\tif (!editor) return \"\";\n\n\t\tlet state: LinkType = \"\";\n\t\teditor.getEditorState().read(() => {\n\t\t\tconst selection = $getSelection();\n\t\t\tif (!$isRangeSelection(selection)) {\n\t\t\t\tstate = \"\";\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst selectionText = selection.getTextContent();\n\t\t\tconst linkNode = $findSelectedInlineNode($isLinkNode);\n\n\t\t\tif ($isAccessibleLinkNode(linkNode)) {\n\t\t\t\tstate = {\n\t\t\t\t\turl: linkNode.getURL(),\n\t\t\t\t\tariaLabel: linkNode.getAriaLabel() || \"\",\n\t\t\t\t\ttext: linkNode.getText() || selectionText,\n\t\t\t\t\tadd: linkNode.getAdd() || \"\",\n\t\t\t\t\tqrCode: linkNode.getQrCode()\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ($isLinkNode(linkNode)) {\n\t\t\t\tstate = {\n\t\t\t\t\turl: linkNode.getURL(),\n\t\t\t\t\tariaLabel: \"\",\n\t\t\t\t\ttext: selectionText,\n\t\t\t\t\tadd: \"\",\n\t\t\t\t\tqrCode: false\n\t\t\t\t};\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tstate = selectionText;\n\t\t});\n\n\t\treturn state;\n\t}, [editor]);\n\n\tconst handleLinkClick = useCallback(\n\t\t(type: LinkTypes) => {\n\t\t\tif (type === LinkTypes.LOCAL_LINK && !hasLocalLinkDialog) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!editor) return;\n\t\t\teditor.getEditorState().read(() => {\n\t\t\t\tconst selection = $getSelection();\n\t\t\t\tlinkSelectionRef.current = {\n\t\t\t\t\teditor,\n\t\t\t\t\tselection: $isRangeSelection(selection) ? selection.clone() : null,\n\t\t\t\t\tkey: $findSelectedInlineNode($isAccessibleLinkNode)?.getKey() ?? null,\n\t\t\t\t\tlocal: type === LinkTypes.LOCAL_LINK\n\t\t\t\t};\n\t\t\t});\n\t\t\tsetLinkDialogState(readSelectedLinkState());\n\t\t\tonOpenLinkDialog(type);\n\t\t},\n\t\t[editor, hasLocalLinkDialog, onOpenLinkDialog, readSelectedLinkState]\n\t);\n\n\tconst insertSemanticTagAtSelection = useCallback(\n\t\t(tag: string, text: string, attributes: Record<string, string>) => {\n\t\t\tif (!editor) return;\n\t\t\tconst snapshot = semanticSelectionRef.current;\n\t\t\tsemanticSelectionRef.current = null;\n\t\t\teditor.update(\n\t\t\t\t() => {\n\t\t\t\t\t$restoreEditorDialogSelection(snapshot?.editor === editor ? snapshot.selection : null);\n\t\t\t\t},\n\t\t\t\t{ discrete: true, tag: [HISTORY_MERGE_TAG, SKIP_DOM_SELECTION_TAG] }\n\t\t\t);\n\t\t\teditor.update(\n\t\t\t\t() => {\n\t\t\t\t\tconst selection = $getSelection();\n\t\t\t\t\tif (!$isRangeSelection(selection) || !text.trim()) return;\n\t\t\t\t\tconst existing = snapshot?.editor === editor && snapshot.key ? $getNodeByKey(snapshot.key) : null;\n\t\t\t\t\tif ($isSemanticTagNode(existing) && existing.isAttached() && existing.getTag() === tag) {\n\t\t\t\t\t\texisting.setAttributes(attributes).setText(text);\n\t\t\t\t\t\tif (text !== existing.getTextContent()) existing.clear().append($createTextNode(text));\n\t\t\t\t\t\texisting.selectEnd();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst node = $createSemanticTagNode(tag, attributes, text);\n\t\t\t\t\t\tconst content = $createTextNode(text);\n\t\t\t\t\t\tcontent.setFormat(selection.format).setStyle(selection.style);\n\t\t\t\t\t\tnode.append(content);\n\t\t\t\t\t\tselection.insertNodes([node]);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ tag: HISTORY_PUSH_TAG }\n\t\t\t);\n\t\t\trequestAnimationFrame(() => editor.focus());\n\t\t},\n\t\t[editor]\n\t);\n\n\tconst handleCleanSemanticTag = useCallback(() => {\n\t\tif (!editor) return;\n\n\t\teditor.update(() => {\n\t\t\tconst selection = $getSelection();\n\t\t\tif (!$isRangeSelection(selection) || selection.isCollapsed()) return;\n\n\t\t\tconst selectedNodes = selection.getNodes();\n\t\t\tconst semanticNodes = new Set<SemanticTagNode>();\n\n\t\t\tselectedNodes.forEach((node) => {\n\t\t\t\tlet current: LexicalNode | null = node;\n\t\t\t\twhile (current) {\n\t\t\t\t\tif ($isSemanticTagNode(current)) {\n\t\t\t\t\t\tsemanticNodes.add(current);\n\t\t\t\t\t}\n\t\t\t\t\tcurrent = current.getParent();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tconst sortedNodes = Array.from(semanticNodes).sort((a, b) => getSemanticTagDepth(b) - getSemanticTagDepth(a));\n\t\t\tsortedNodes.forEach((node) => {\n\t\t\t\tif (!node.isAttached()) return;\n\t\t\t\tconst children = node.getChildren();\n\t\t\t\tchildren.forEach((child) => node.insertBefore(child));\n\t\t\t\tnode.remove();\n\t\t\t});\n\t\t});\n\t}, [editor]);\n\n\tconst handleTagClick = useCallback(\n\t\t(type: TagTypes) => {\n\t\t\tif (!editor) return;\n\t\t\teditor.getEditorState().read(() => {\n\t\t\t\tconst selection = $getSelection();\n\t\t\t\tconst node = $findSelectedInlineNode($isSemanticTagNode);\n\t\t\t\tconst matching = node?.getTag() === (type === TagTypes.lang ? \"span\" : type) ? node : null;\n\t\t\t\tsemanticSelectionRef.current = {\n\t\t\t\t\teditor,\n\t\t\t\t\tselection: $isRangeSelection(selection) ? selection.clone() : null,\n\t\t\t\t\tkey: matching?.getKey() ?? null\n\t\t\t\t};\n\t\t\t\tsetSemanticDialogState({\n\t\t\t\t\ttext: matching?.getTextContent() ?? ($isRangeSelection(selection) ? selection.getTextContent() : \"\"),\n\t\t\t\t\tattributes: { ...matching?.getAttributes() }\n\t\t\t\t});\n\t\t\t});\n\t\t\tonOpenTagDialog(type);\n\t\t},\n\t\t[editor, onOpenTagDialog]\n\t);\n\n\treturn {\n\t\thandleAddLink,\n\t\thandleAddLocalLink,\n\t\thandleAlignmentChange,\n\t\thandleBlockStyleToggle,\n\t\thandleCleanSemanticTag,\n\t\thandleInlineStyleToggle,\n\t\thandleLinkClick,\n\t\thandleRedo,\n\t\thandleTagClick,\n\t\thandleUndo,\n\t\tsemanticDialogState,\n\t\tlinkDialogState,\n\t\tinsertSemanticTagAtSelection\n\t};\n}\n","@use \"@/styles/mixins/mixin\" as *;\n\n.textEditor {\n\tfont-size: inherit;\n}\n\n.textEditorContent {\n\tposition: relative;\n\tpadding: var(--space-md);\n\tborder-radius: var(--radius-md);\n\tbackground-color: var(--surface-secondary);\n\tborder: var(--border);\n\n\t&.focused {\n\t\tborder-color: var(--brand-border);\n\t}\n}\n\n.wrapper {\n\tfont-size: inherit;\n}\n","import { type MouseEvent, useState } from \"react\";\n\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { isSafe } from \"@ryuzaki13/react-foundation-lib/validators\";\n\nimport { Button } from \"../button\";\nimport { Input } from \"../input\";\nimport { Modal, ModalContent, ModalFooter } from \"../modal\";\n\nimport { LinkType } from \"./linkTypes\";\n\ninterface EmailDialogProps {\n\tonClose: () => void;\n\tonConfirm: (url: string, text: string, add: string, ariaLabel: string, showQrCode: boolean) => void;\n\tinitialState?: LinkType;\n}\n\n/**\n * Диалог вставки или редактирования email-ссылки в текстовом редакторе.\n */\nexport function EmailDialog({ onClose, onConfirm, initialState }: EmailDialogProps) {\n\tconst state = (() => {\n\t\tif (isSafe(initialState) && typeof initialState === \"string\") {\n\t\t\treturn { text: \"\", add: \"\", ariaLabel: \"\", url: initialState };\n\t\t}\n\n\t\treturn initialState;\n\t})();\n\tconst [email, setEmail] = useState(() => (isSafe(state) ? (state.url ?? \"\").replace(/^mailto:/i, \"\") : \"\"));\n\tconst [ariaLabel, setAriaLabel] = useState(() => (isSafe(state) ? (state.ariaLabel ?? \"\") : \"\"));\n\tconst [error, setError] = useState<string | null>(null);\n\n\tconst validateEmail = (email: string): boolean => {\n\t\tconst emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n\t\tif (!emailRegex.test(email)) {\n\t\t\tsetError(\"Некорректный email адрес\");\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tconst handleConfirm = (e: MouseEvent) => {\n\t\te.preventDefault();\n\n\t\tif (!validateEmail(email)) return;\n\t\tif (!ariaLabel) {\n\t\t\tsetError(\"Добавьте описание для email\");\n\t\t\treturn;\n\t\t}\n\n\t\tonConfirm(`mailto:${email}`, \"\", \"\", ariaLabel, false);\n\t\thandleClose();\n\t};\n\n\tconst handleClose = () => {\n\t\tsetEmail(\"\");\n\t\tsetAriaLabel(\"\");\n\t\tsetError(null);\n\t\tonClose();\n\t};\n\n\treturn (\n\t\t<Modal isOpen={true} onClose={handleClose} title=\"Ссылка на email\" size=\"md\">\n\t\t\t<ModalContent>\n\t\t\t\t<div className={cn(\"flexColumn\", \"gapMd\")}>\n\t\t\t\t\t<Input label=\"Email адрес\" value={email} onChange={setEmail} placeholder=\"some_email@mail.ru\" />\n\n\t\t\t\t\t{error && (\n\t\t\t\t\t\t<div className=\"textColorDanger\">\n\t\t\t\t\t\t\t<strong>Ошибка ввода:</strong> <span className=\"fontItalic\">{error}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<Input\n\t\t\t\t\t\tlabel=\"Текст для экранных читалок\"\n\t\t\t\t\t\tvalue={ariaLabel}\n\t\t\t\t\t\tonChange={setAriaLabel}\n\t\t\t\t\t\tplaceholder=\"Электронная почта руководителя городской думмы\"\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t</ModalContent>\n\t\t\t<ModalFooter>\n\t\t\t\t<Button appearance=\"outline\" tone=\"error\" onClick={handleClose}>\n\t\t\t\t\tОтмена\n\t\t\t\t</Button>\n\t\t\t\t<Button appearance=\"outline\" tone=\"success\" onClick={handleConfirm} disabled={!email || !ariaLabel}>\n\t\t\t\t\tПодтвердить\n\t\t\t\t</Button>\n\t\t\t</ModalFooter>\n\t\t</Modal>\n\t);\n}\n","import { type TimeDialogInitialState, type TimeMode } from \"../../model/timeDialogState\";\n\n/** Восстанавливает поля существующего time без переписывания сохранённого значения. */\nexport function getTimeDialogInitialState(value: string | undefined): TimeDialogInitialState {\n\tif (!value) return {};\n\tconst [from, to] = value.split(\"/\");\n\tconst single = from.includes(\"T\") ? \"datetime\" : from.includes(\":\") ? \"time\" : \"date\";\n\tconst mode: TimeMode = to ? `range-${single}` : single;\n\treturn { mode, from, to: to ?? \"\" };\n}\n","import { type MouseEvent, useState } from \"react\";\n\nimport { isSafe, validateUrl } from \"@ryuzaki13/react-foundation-lib/validators\";\n\nimport { Button } from \"../button\";\nimport { CheckBox } from \"../check-box\";\nimport { GridContainer } from \"../grid\";\nimport { Input } from \"../input\";\nimport { Modal, ModalContent, ModalFooter } from \"../modal\";\n\nimport { LinkType } from \"./linkTypes\";\n\ninterface LinkDialogProps {\n\tonClose: () => void;\n\tonConfirm: (url: string, text: string, add: string, ariaLabel: string, showQrCode: boolean) => void;\n\tinitialState?: LinkType;\n}\n\n/**\n * Диалог вставки или редактирования ссылки в текстовом редакторе.\n */\nexport function LinkDialog({ onClose, onConfirm, initialState }: LinkDialogProps) {\n\tconst state = (() => {\n\t\tif (isSafe(initialState)) {\n\t\t\tif (typeof initialState === \"string\") {\n\t\t\t\treturn { text: \"\", add: \"\", ariaLabel: \"\", url: initialState };\n\t\t\t}\n\t\t}\n\t\treturn initialState;\n\t})();\n\tconst [url, setUrl] = useState(() => (isSafe(state) ? (state.url ?? \"\") : \"\"));\n\tconst [ariaLabel, setAriaLabel] = useState(() => (isSafe(state) ? (state.ariaLabel ?? \"\") : \"\"));\n\tconst [error, setError] = useState<string | null>(null);\n\tconst [showQrCode, setShowQrCode] = useState(() =>\n\t\ttypeof initialState === \"object\" && initialState !== null ? (initialState.qrCode ?? false) : false\n\t);\n\n\tconst handleUrlChange = (value: string) => {\n\t\tsetUrl(value);\n\n\t\t// Очищаем ошибку при изменении URL\n\t\tif (error) {\n\t\t\tsetError(null);\n\t\t}\n\t};\n\n\tconst handleConfirm = (e: MouseEvent) => {\n\t\te.preventDefault();\n\n\t\tconst validation = validateUrl(url);\n\t\tif (!validation.isValid) {\n\t\t\tsetError(validation.error);\n\t\t\treturn;\n\t\t}\n\n\t\tif (!ariaLabel) {\n\t\t\tsetError(\"добавьте описание для ссылки\");\n\t\t\treturn;\n\t\t}\n\n\t\t// Добавляем протокол, если его нет\n\t\tconst finalUrl = url.startsWith(\"http\") ? url : `https://${url}`;\n\t\tonConfirm(finalUrl, \"\", \"\", ariaLabel, showQrCode);\n\t\thandleClose();\n\t};\n\n\tconst handleClose = () => {\n\t\tsetUrl(\"\");\n\t\tsetAriaLabel(\"\");\n\t\tsetError(null);\n\t\tonClose();\n\t};\n\n\treturn (\n\t\t<Modal isOpen={true} onClose={handleClose} title=\"Ссылка на внешний url\" size=\"md\">\n\t\t\t<ModalContent>\n\t\t\t\t<GridContainer gap=\"md\">\n\t\t\t\t\t<Input label=\"Полный URL адрес\" value={url} onChange={handleUrlChange} placeholder=\"https://somesite.ru\" />\n\n\t\t\t\t\t{error && (\n\t\t\t\t\t\t<div className=\"textColorDanger\">\n\t\t\t\t\t\t\t<strong>Ошибка ввода:</strong> <span className=\"fontItalic\">{error}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<Input\n\t\t\t\t\t\tlabel=\"Текст для экранных читалок\"\n\t\t\t\t\t\tvalue={ariaLabel}\n\t\t\t\t\t\tonChange={setAriaLabel}\n\t\t\t\t\t\tplaceholder=\"Ссылка на официальный сайт городской думмы\"\n\t\t\t\t\t/>\n\n\t\t\t\t\t<CheckBox title=\"Показать кнопку для генерации QR кода ссылки\" value={showQrCode} onChange={setShowQrCode} />\n\t\t\t\t</GridContainer>\n\t\t\t</ModalContent>\n\t\t\t<ModalFooter>\n\t\t\t\t<Button appearance=\"outline\" tone=\"error\" onClick={handleClose}>\n\t\t\t\t\tОтмена\n\t\t\t\t</Button>\n\t\t\t\t<Button appearance=\"outline\" tone=\"success\" onClick={handleConfirm} disabled={!url || !ariaLabel}>\n\t\t\t\t\tПодтвердить\n\t\t\t\t</Button>\n\t\t\t</ModalFooter>\n\t\t</Modal>\n\t);\n}\n","import { type MouseEvent, useState } from \"react\";\n\nimport { formatPhone } from \"@ryuzaki13/react-foundation-lib/formatters\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { isSafe } from \"@ryuzaki13/react-foundation-lib/validators\";\n\nimport { Button } from \"../button\";\nimport { GridContainer } from \"../grid\";\nimport { Input } from \"../input\";\nimport { Modal, ModalContent, ModalFooter } from \"../modal\";\n\nimport { LinkType } from \"./linkTypes\";\n\ninterface PhoneDialogProps {\n\tonClose: () => void;\n\tonConfirm: (url: string, text: string, add: string, ariaLabel: string, showQrCode: boolean) => void;\n\tinitialState?: LinkType;\n}\n\n/**\n * Диалог вставки или редактирования телефонной ссылки в текстовом редакторе.\n */\nexport function PhoneDialog({ onClose, onConfirm, initialState }: PhoneDialogProps) {\n\tconst state = (() => {\n\t\tif (isSafe(initialState) && typeof initialState === \"string\") {\n\t\t\treturn { text: \"\", add: \"\", ariaLabel: \"\", url: initialState };\n\t\t}\n\n\t\treturn initialState;\n\t})();\n\tconst initialPhone = isSafe(state) ? (state.url ?? \"\").replace(/\\D/g, \"\").slice(0, 11).replace(/^7/, \"\") : \"\";\n\tconst initialPhoneAdd = isSafe(state)\n\t\t? state.add\n\t\t\t? (state.add ?? \"\").replace(/\\D/g, \"\")\n\t\t\t: (state.url ?? \"\").replace(/\\D/g, \"\").slice(11)\n\t\t: \"\";\n\tconst [phone, setPhone] = useState(initialPhone);\n\tconst [phoneAdd, setPhoneAdd] = useState(initialPhoneAdd);\n\tconst [ariaLabel, setAriaLabel] = useState(() => (isSafe(state) ? (state.ariaLabel ?? \"\") : \"\"));\n\tconst [error, setError] = useState<string | null>(null);\n\n\tconst handlePhoneChange = (value: string) => {\n\t\tvalue = value.replace(/\\D/g, \"\");\n\t\tif (value.length <= 10) {\n\t\t\tsetPhone(value);\n\t\t\tsetError(null);\n\t\t} else {\n\t\t\tsetError(\"нельзя ввести более 10 цифр\");\n\t\t}\n\t};\n\n\tconst validatePhone = (phone: string): boolean => {\n\t\tif (phone.length !== 10) {\n\t\t\tsetError(\"номер телефона должен содержать 10 цифр\");\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t};\n\n\tconst handleConfirm = (e: MouseEvent) => {\n\t\te.preventDefault();\n\n\t\tif (!validatePhone(phone)) return;\n\t\tif (!ariaLabel) {\n\t\t\tsetError(\"добавьте описание для телефона\");\n\t\t\treturn;\n\t\t}\n\n\t\tconst formattedPhone = formatPhone(phone);\n\t\tconst fullPhone = `+7${phone}`;\n\t\tonConfirm(`tel:${fullPhone}`, phoneAdd ? `${formattedPhone} доб. ${phoneAdd}` : formattedPhone, phoneAdd, ariaLabel, false);\n\t\thandleClose();\n\t};\n\n\tconst handleClose = () => {\n\t\tsetPhone(\"\");\n\t\tsetAriaLabel(\"\");\n\t\tsetError(null);\n\t\tonClose();\n\t};\n\n\treturn (\n\t\t<Modal isOpen={true} onClose={handleClose} title=\"Ссылка на телефон\" size=\"md\">\n\t\t\t<ModalContent>\n\t\t\t\t<GridContainer gap=\"md\">\n\t\t\t\t\t<div className={cn(\"flex\", \"alignItemsEnd\", \"gapSm\")}>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tlabel=\"Номер телефона без 7-ки\"\n\t\t\t\t\t\t\tdescription=\"Вводится только номер (10) цифр без каких-либо дополнительных символов. Ссылка будет привязана к текущему выделенному фрагменту текста. Поэтому текст самой ссылки можно оформить грамотно, например: +7 (3522) 12-34-56 доб. 100\"\n\t\t\t\t\t\t\tvalue={phone}\n\t\t\t\t\t\t\tonChange={handlePhoneChange}\n\t\t\t\t\t\t\tplaceholder=\"3522123456\"\n\t\t\t\t\t\t\tclassName=\"flex1\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Input label=\"Добавочный номер\" value={phoneAdd} onChange={setPhoneAdd} placeholder=\"100\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t{error && (\n\t\t\t\t\t\t<div className=\"textColorDanger\">\n\t\t\t\t\t\t\t<strong>Ошибка ввода:</strong> <span className=\"fontItalic\">{error}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t)}\n\n\t\t\t\t\t<Input\n\t\t\t\t\t\tlabel=\"Текст для экранных читалок\"\n\t\t\t\t\t\tdescription=\"Обязательное поле для организации доступности ссылки для лиц с ОВЗ, использующих скринридеры\"\n\t\t\t\t\t\tvalue={ariaLabel}\n\t\t\t\t\t\tonChange={setAriaLabel}\n\t\t\t\t\t\tplaceholder=\"Контактный телефон директора\"\n\t\t\t\t\t/>\n\t\t\t\t</GridContainer>\n\t\t\t</ModalContent>\n\t\t\t<ModalFooter>\n\t\t\t\t<Button appearance=\"solid\" tone=\"error\" onClick={handleClose}>\n\t\t\t\t\tОтмена\n\t\t\t\t</Button>\n\t\t\t\t<Button appearance=\"solid\" tone=\"success\" onClick={handleConfirm} disabled={!phone || !ariaLabel}>\n\t\t\t\t\tПодтвердить\n\t\t\t\t</Button>\n\t\t\t</ModalFooter>\n\t\t</Modal>\n\t);\n}\n","import { type ReactNode, useState } from \"react\";\n\nimport { Button } from \"../button\";\nimport { GridContainer } from \"../grid\";\nimport { Input } from \"../input\";\nimport { Modal, ModalContent, ModalFooter } from \"../modal\";\n\nexport interface AttributeField {\n\tname: string;\n\tlabel: string;\n\tdescription?: string;\n\tplaceholder?: string;\n\trequired?: boolean;\n\tvalidate?: (value: string) => string | null;\n}\n\nexport interface SemanticTagConfig {\n\ttagName: string;\n\ttitle: string;\n\tdescription: string;\n\texample: ReactNode;\n\tfields: AttributeField[];\n}\n\ninterface SemanticDialogProps {\n\tonClose: () => void;\n\tonConfirm: (tagName: string, text: string, attributes: Record<string, string>) => void;\n\tconfig: SemanticTagConfig;\n\tinitialState?: Record<string, string>;\n\tinitialText?: string;\n}\n\n/**\n * Диалог настройки семантического тега и его атрибутов в текстовом редакторе.\n */\nexport function SemanticDialog({ onClose, onConfirm, config, initialText = \"\", initialState = {} }: SemanticDialogProps) {\n\tconst [text, setText] = useState(initialText);\n\tconst [values, setValues] = useState<Record<string, string>>(() =>\n\t\tconfig.fields.reduce<Record<string, string>>((result, field) => {\n\t\t\tresult[field.name] = initialState[field.name] ?? \"\";\n\t\t\treturn result;\n\t\t}, {})\n\t);\n\tconst [errors, setErrors] = useState<Record<string, string | null>>({});\n\n\tconst handleChange = (name: string, value: string) => {\n\t\tsetValues((prev) => ({ ...prev, [name]: value }));\n\t\tsetErrors((prev) => ({ ...prev, [name]: null }));\n\t};\n\n\tconst validate = (): boolean => {\n\t\tconst newErrors: Record<string, string | null> = {};\n\t\tlet isValid = true;\n\n\t\tif (!text.trim()) {\n\t\t\tnewErrors[\"text\"] = \"Обязательное поле\";\n\t\t\tisValid = false;\n\t\t}\n\n\t\tfor (const field of config.fields) {\n\t\t\tconst value = values[field.name]?.trim();\n\t\t\tif (field.required && !value) {\n\t\t\t\tnewErrors[field.name] = \"Обязательное поле\";\n\t\t\t\tisValid = false;\n\t\t\t} else if (field.validate) {\n\t\t\t\tconst err = field.validate(value);\n\t\t\t\tif (err) {\n\t\t\t\t\tnewErrors[field.name] = err;\n\t\t\t\t\tisValid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tsetErrors(newErrors);\n\t\treturn isValid;\n\t};\n\n\tconst handleConfirm = () => {\n\t\tif (!validate()) return;\n\t\t// Поля текущего диалога не должны стирать другие атрибуты существующего узла.\n\t\tonConfirm(config.tagName, text.trim(), { ...initialState, ...values });\n\t\tonClose();\n\t};\n\n\treturn (\n\t\t<Modal isOpen={true} onClose={onClose} title={`Вставка <${config.tagName}>`} size=\"md\">\n\t\t\t<ModalContent>\n\t\t\t\t<GridContainer gap=\"md\">\n\t\t\t\t\t<div>\n\t\t\t\t\t\t{config.description}.<br />\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<div>\n\t\t\t\t\t\t<strong>Пример:</strong> {config.example}\n\t\t\t\t\t</div>\n\n\t\t\t\t\t<Input\n\t\t\t\t\t\tlabel={config.title}\n\t\t\t\t\t\tdescription={`Данный текст будет вставлен в редактор и обёрнуть в специальный семантический тег ${config.tagName}`}\n\t\t\t\t\t\tvalue={text}\n\t\t\t\t\t\tonChange={setText}\n\t\t\t\t\t\terror={errors[\"text\"] ?? undefined}\n\t\t\t\t\t\trequired\n\t\t\t\t\t/>\n\t\t\t\t\t{config.fields.map((field) => {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tkey={field.name}\n\t\t\t\t\t\t\t\tlabel={field.label}\n\t\t\t\t\t\t\t\tdescription={field.description}\n\t\t\t\t\t\t\t\tplaceholder={field.placeholder}\n\t\t\t\t\t\t\t\tvalue={values[field.name] ?? \"\"}\n\t\t\t\t\t\t\t\tonChange={(value) => handleChange(field.name, value)}\n\t\t\t\t\t\t\t\terror={errors[field.name] ?? undefined}\n\t\t\t\t\t\t\t\trequired={field.required}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t);\n\t\t\t\t\t})}\n\t\t\t\t</GridContainer>\n\t\t\t</ModalContent>\n\t\t\t<ModalFooter>\n\t\t\t\t<Button appearance=\"solid\" tone=\"error\" onClick={onClose}>\n\t\t\t\t\tОтмена\n\t\t\t\t</Button>\n\t\t\t\t<Button appearance=\"solid\" tone=\"success\" onClick={handleConfirm}>\n\t\t\t\t\tПодтвердить\n\t\t\t\t</Button>\n\t\t\t</ModalFooter>\n\t\t</Modal>\n\t);\n}\n","import { parseDate } from \"@ryuzaki13/react-foundation-lib/formatters\";\n\n/** Проверка календарных значений диалогов поверх строгого foundation parser. */\nexport function isSemanticDateTime(value: string): boolean {\n\tconst parts = value.split(\"/\");\n\treturn (\n\t\tparts.length <= 2 &&\n\t\tparts.every((part) => {\n\t\t\tif (/^\\d{2}:\\d{2}(?::\\d{2})?$/.test(part)) return parseDate(`2000-01-01T${part}`) !== null;\n\t\t\treturn (\n\t\t\t\t/^\\d{4}-\\d{2}-\\d{2}(?:T\\d{2}:\\d{2}(?::\\d{2}(?:\\.\\d+)?)?(?:Z|[+-](?:[01]\\d|2[0-3]):[0-5]\\d)?)?$/.test(part) &&\n\t\t\t\tparseDate(part) !== null\n\t\t\t);\n\t\t})\n\t);\n}\n","import { isSemanticDateTime } from \"./lib/semantic/isSemanticDateTime\";\nimport { TagTypes } from \"./toolbar\";\n\nimport type { SemanticTagConfig } from \"./SemanticDialog\";\n\nexport const SemanticTagConfigs: Record<TagTypes, SemanticTagConfig> = {\n\t[TagTypes.abbr]: {\n\t\ttagName: \"abbr\",\n\t\ttitle: \"Аббревиатура\",\n\t\tdescription: \"Обозначает аббревиатуры и сокращения, при наведении покажет расшифровку\",\n\t\texample: (\n\t\t\t<>\n\t\t\t\t<abbr title=\"Национальное управление по аэронавтике и исследованию космического пространства\">НАСА</abbr>\n\t\t\t\t<div className=\"marginTopMd\">\n\t\t\t\t\t<code>{`<abbr title=\"Национальное управление по аэронавтике и исследованию космического пространства\">НАСА</abbr>`}</code>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t),\n\t\tfields: [\n\t\t\t{\n\t\t\t\tname: \"title\",\n\t\t\t\tlabel: \"Расшифровка\",\n\t\t\t\tdescription: \"Появится как подсказка и будет прочитана скринридером\",\n\t\t\t\tplaceholder: \"например: HyperText Markup Language\",\n\t\t\t\trequired: true\n\t\t\t}\n\t\t]\n\t},\n\t[TagTypes.lang]: {\n\t\ttagName: \"span\",\n\t\ttitle: \"Текст на другом языке\",\n\t\tdescription:\n\t\t\t\"Указывает язык фрагмента текста, если он отличается от основного языка страницы, скринридер прочитает это слово с французским произношением\",\n\t\texample: (\n\t\t\t<>\n\t\t\t\t<span lang=\"fr\">Bonjour!</span> — сказал турист.\n\t\t\t\t<div className=\"marginTopMd\">\n\t\t\t\t\t<code>{`<span lang=\"fr\">Bonjour!</span> — сказал турист.`}</code>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t),\n\t\tfields: [\n\t\t\t{\n\t\t\t\tname: \"lang\",\n\t\t\t\tlabel: \"Код языка\",\n\t\t\t\tplaceholder: \"en, fr, ru\",\n\t\t\t\trequired: true,\n\t\t\t\tvalidate: (val) => (!/^[a-z]{2,3}(-[A-Z]{2})?$/.test(val) ? \"Неверный код языка (например, en или en-US)\" : null)\n\t\t\t}\n\t\t]\n\t},\n\t[TagTypes.time]: {\n\t\ttagName: \"time\",\n\t\ttitle: \"Дата/время\",\n\t\tdescription: \"\",\n\t\texample: \"\",\n\t\tfields: [\n\t\t\t{\n\t\t\t\tname: \"datetime\",\n\t\t\t\tlabel: \"Дата/время (machine-readable)\",\n\t\t\t\tdescription: \"Формат ISO 8601: 2025-05-18, 14:30, 2025-05-18T14:30\",\n\t\t\t\tplaceholder: \"например: 2025-05-18T14:30\",\n\t\t\t\trequired: true\n\t\t\t}\n\t\t]\n\t},\n\t[TagTypes.cite]: {\n\t\ttagName: \"cite\",\n\t\ttitle: \"Цитата источника\",\n\t\tdescription: \"Обозначает название книги, статьи, фильма или другого произведения, на которое вы ссылаетесь\",\n\t\texample: (\n\t\t\t<>\n\t\t\t\tПо словам Эйнштейна: <cite>«Воображение важнее знания»</cite>.\n\t\t\t\t<div className=\"marginTopMd\">\n\t\t\t\t\t<code>{`По словам Эйнштейна: <cite>«Воображение важнее знания»</cite>.`}</code>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t),\n\t\tfields: [\n\t\t\t{\n\t\t\t\tname: \"title\",\n\t\t\t\tlabel: \"Название источника\",\n\t\t\t\tdescription: \"Будет отображаться как подсказка\",\n\t\t\t\tplaceholder: \"например: Википедия\",\n\t\t\t\trequired: false\n\t\t\t}\n\t\t]\n\t},\n\t// [TagTypes.address]: {\n\t// \ttagName: \"address\",\n\t// \ttitle: \"Указывает контакты автора статьи/страницы (не для почтовых адресов компаний!)\",\n\t// \tdescription: \"\",\n\t// \texample: ``,\n\t// \tfields: [\n\t// \t\t{\n\t// \t\t\tname: \"aria-label\",\n\t// \t\t\tlabel: \"Описание (для доступности)\",\n\t// \t\t\tdescription: \"Содержимое будет прочитано скринридером, если адрес не очевиден\",\n\t// \t\t\tplaceholder: \"например: Контактный адрес компании\",\n\t// \t\t\trequired: false\n\t// \t\t}\n\t// \t]\n\t// },\n\t[TagTypes.del]: {\n\t\ttagName: \"del\",\n\t\ttitle: \"Изменения в тексте\",\n\t\tdescription: \"Удаленный фрагмент\",\n\t\texample: (\n\t\t\t<>\n\t\t\t\tПроект сдачи: <del>1 июня</del> <ins>15 июня</ins>\n\t\t\t\t<div className=\"marginTopMd\">\n\t\t\t\t\t<code>{`Проект сдачи: <del>1 июня</del> <ins>15 июня</ins>`}</code>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t),\n\t\tfields: [\n\t\t\t{\n\t\t\t\tname: \"datetime\",\n\t\t\t\tlabel: \"Когда был удалён\",\n\t\t\t\tvalidate: (value) => (!value || isSemanticDateTime(value) ? null : \"Укажите существующую дату и время в формате ISO 8601\"),\n\t\t\t\tdescription: \"Формат ISO 8601: 2025-05-18T14:30\",\n\t\t\t\tplaceholder: \"например: 2025-05-18T14:30\",\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"cite\",\n\t\t\t\tlabel: \"Источник/обоснование\",\n\t\t\t\tdescription: \"Ссылка на объяснение причины\",\n\t\t\t\tplaceholder: \"например: https://example.com/edit-log\",\n\t\t\t\trequired: false\n\t\t\t}\n\t\t]\n\t},\n\t[TagTypes.ins]: {\n\t\ttagName: \"ins\",\n\t\ttitle: \"Изменения в тексте\",\n\t\tdescription: \"Новый добавленный текст\",\n\t\texample: (\n\t\t\t<>\n\t\t\t\tПроект сдачи: <del>1 июня</del> <ins>15 июня</ins>\n\t\t\t\t<div className=\"marginTopMd\">\n\t\t\t\t\t<code>{`Проект сдачи: <del>1 июня</del> <ins>15 июня</ins>`}</code>\n\t\t\t\t</div>\n\t\t\t</>\n\t\t),\n\t\tfields: [\n\t\t\t{\n\t\t\t\tname: \"datetime\",\n\t\t\t\tlabel: \"Когда был добавлен\",\n\t\t\t\tvalidate: (value) => (!value || isSemanticDateTime(value) ? null : \"Укажите существующую дату и время в формате ISO 8601\"),\n\t\t\t\tdescription: \"Формат ISO 8601: 2025-05-18T14:30\",\n\t\t\t\tplaceholder: \"например: 2025-05-18T14:30\",\n\t\t\t\trequired: false\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"cite\",\n\t\t\t\tlabel: \"Источник/обоснование\",\n\t\t\t\tdescription: \"Ссылка на объяснение причины\",\n\t\t\t\tplaceholder: \"например: https://example.com/edit-log\",\n\t\t\t\trequired: false\n\t\t\t}\n\t\t]\n\t}\n};\n","import { useState } from \"react\";\n\nimport { Button } from \"../button\";\nimport { GridContainer } from \"../grid\";\nimport { Input } from \"../input\";\nimport { Modal, ModalContent, ModalFooter } from \"../modal\";\nimport { RadioGroup } from \"../radio-group\";\n\nimport { isSemanticDateTime } from \"./lib/semantic/isSemanticDateTime\";\nimport { type TimeMode, type TimeDialogInitialState } from \"./model/timeDialogState\";\n\ninterface TimeDialogProps {\n\tonClose: () => void;\n\tonConfirm: (tagName: string, text: string, attributes: Record<string, string>) => void;\n\tinitialState?: TimeDialogInitialState;\n}\n\n/**\n * Диалог настройки временного атрибута или значения в текстовом редакторе.\n */\nexport function TimeDialog({ onClose, onConfirm, initialState }: TimeDialogProps) {\n\tconst [mode, setMode] = useState<TimeMode | undefined>(() => initialState?.mode ?? \"date\");\n\tconst [from, setFrom] = useState(() => initialState?.from ?? \"\");\n\tconst [to, setTo] = useState(() => initialState?.to ?? \"\");\n\tconst [errors, setErrors] = useState<{ from?: string; to?: string }>({});\n\n\tconst validate = () => {\n\t\tconst newErrors: typeof errors = {};\n\t\t// const isValid = true;\n\n\t\tconst isDate = (v: string) => /^\\d{4}-\\d{2}-\\d{2}$/.test(v);\n\t\tconst isTime = (v: string) => /^\\d{2}:\\d{2}$/.test(v);\n\t\tconst isDateTime = (v: string) => /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}$/.test(v);\n\n\t\tconst check = (label: string, value: string, type: \"date\" | \"time\" | \"datetime\") => {\n\t\t\tif (!value) return `${label} обязательно`;\n\t\t\tif (type === \"date\" && !isDate(value)) return \"Неверный формат даты (ГГГГ-ММ-ДД)\";\n\t\t\tif (type === \"time\" && !isTime(value)) return \"Неверный формат времени (ЧЧ:ММ)\";\n\t\t\tif (type === \"datetime\" && !isDateTime(value)) return \"Неверный формат даты и времени (ГГГГ-ММ-ДДTЧЧ:ММ)\";\n\t\t\tif (!isSemanticDateTime(value)) return \"Укажите существующую дату и корректное время\";\n\t\t\treturn undefined;\n\t\t};\n\n\t\tswitch (mode) {\n\t\t\tcase \"date\":\n\t\t\t\tnewErrors.from = check(\"Дата\", from, \"date\");\n\t\t\t\tbreak;\n\t\t\tcase \"time\":\n\t\t\t\tnewErrors.from = check(\"Время\", from, \"time\");\n\t\t\t\tbreak;\n\t\t\tcase \"datetime\":\n\t\t\t\tnewErrors.from = check(\"Дата и время\", from, \"datetime\");\n\t\t\t\tbreak;\n\t\t\tcase \"range-time\":\n\t\t\t\tnewErrors.from = check(\"Время начала\", from, \"time\");\n\t\t\t\tnewErrors.to = check(\"Время окончания\", to, \"time\");\n\t\t\t\tbreak;\n\t\t\tcase \"range-date\":\n\t\t\t\tnewErrors.from = check(\"Дата начала\", from, \"date\");\n\t\t\t\tnewErrors.to = check(\"Дата окончания\", to, \"date\");\n\t\t\t\tbreak;\n\t\t\tcase \"range-datetime\":\n\t\t\t\tnewErrors.from = check(\"Начало\", from, \"datetime\");\n\t\t\t\tnewErrors.to = check(\"Окончание\", to, \"datetime\");\n\t\t\t\tbreak;\n\t\t}\n\n\t\tsetErrors(newErrors);\n\t\treturn Object.values(newErrors).every((e) => !e);\n\t};\n\n\tconst handleConfirm = () => {\n\t\tif (!validate()) return;\n\n\t\t// Скрытая правая граница не должна попадать в одиночный режим.\n\t\tconst datetime = mode?.startsWith(\"range-\") ? `${from}/${to}` : from;\n\t\tonConfirm(\"time\", datetime, { datetime });\n\t\tonClose();\n\t};\n\n\tconst renderInputs = () => {\n\t\tswitch (mode) {\n\t\t\tcase \"date\":\n\t\t\tcase \"datetime\":\n\t\t\tcase \"time\":\n\t\t\t\treturn (\n\t\t\t\t\t<Input\n\t\t\t\t\t\tlabel=\"Значение\"\n\t\t\t\t\t\tplaceholder={mode === \"time\" ? \"09:00\" : mode === \"date\" ? \"2025-05-18\" : \"2025-05-18T09:00\"}\n\t\t\t\t\t\tvalue={from}\n\t\t\t\t\t\tonChange={setFrom}\n\t\t\t\t\t\terror={errors.from}\n\t\t\t\t\t/>\n\t\t\t\t);\n\t\t\tcase \"range-time\":\n\t\t\tcase \"range-date\":\n\t\t\tcase \"range-datetime\":\n\t\t\t\treturn (\n\t\t\t\t\t<>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tlabel=\"С\"\n\t\t\t\t\t\t\tplaceholder={mode.includes(\"time\") ? \"09:00\" : mode.includes(\"date\") ? \"2025-05-18\" : \"2025-05-18T09:00\"}\n\t\t\t\t\t\t\tvalue={from}\n\t\t\t\t\t\t\tonChange={setFrom}\n\t\t\t\t\t\t\terror={errors.from}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tlabel=\"По\"\n\t\t\t\t\t\t\tplaceholder={mode.includes(\"time\") ? \"17:00\" : mode.includes(\"date\") ? \"2025-05-22\" : \"2025-05-22T17:00\"}\n\t\t\t\t\t\t\tvalue={to}\n\t\t\t\t\t\t\tonChange={setTo}\n\t\t\t\t\t\t\terror={errors.to}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</>\n\t\t\t\t);\n\t\t}\n\t};\n\n\treturn (\n\t\t<Modal isOpen={true} onClose={onClose} title=\"Вставка <time>\" size=\"md\">\n\t\t\t<ModalContent>\n\t\t\t\t<GridContainer gap=\"md\">\n\t\t\t\t\t<RadioGroup label=\"Тип значения\" value={mode} onChange={setMode}>\n\t\t\t\t\t\t<RadioGroup.Option label=\"Дата\" value=\"date\" />\n\t\t\t\t\t\t<RadioGroup.Option label=\"Дата и время\" value=\"datetime\" />\n\t\t\t\t\t\t<RadioGroup.Option label=\"Время\" value=\"time\" />\n\t\t\t\t\t\t<RadioGroup.Option label=\"Диапазон дат\" value=\"range-date\" />\n\t\t\t\t\t\t<RadioGroup.Option label=\"Диапазон времени\" value=\"range-time\" />\n\t\t\t\t\t\t<RadioGroup.Option label=\"Диапазон даты и времени\" value=\"range-datetime\" />\n\t\t\t\t\t</RadioGroup>\n\n\t\t\t\t\t<GridContainer gap=\"md\">{renderInputs()}</GridContainer>\n\t\t\t\t</GridContainer>\n\t\t\t</ModalContent>\n\t\t\t<ModalFooter>\n\t\t\t\t<Button appearance=\"solid\" tone=\"error\" onClick={onClose}>\n\t\t\t\t\tОтмена\n\t\t\t\t</Button>\n\t\t\t\t<Button appearance=\"solid\" tone=\"success\" onClick={handleConfirm}>\n\t\t\t\t\tПодтвердить\n\t\t\t\t</Button>\n\t\t\t</ModalFooter>\n\t\t</Modal>\n\t);\n}\n","import { type ComponentType } from \"react\";\n\nimport { type LocalLinkDialogAdapterProps } from \"./editorModel\";\nimport { EmailDialog } from \"./EmailDialog\";\nimport { getTimeDialogInitialState } from \"./lib/semantic/getTimeDialogInitialState\";\nimport { LinkDialog } from \"./LinkDialog\";\nimport { type SemanticDialogState } from \"./model/semanticDialogState\";\nimport { type LinkType } from \"./model/textEditorTypes\";\nimport { PhoneDialog } from \"./PhoneDialog\";\nimport { SemanticDialog } from \"./SemanticDialog\";\nimport { SemanticTagConfigs } from \"./semanticTagConfigs\";\nimport { TimeDialog } from \"./TimeDialog\";\nimport { LinkTypes, TagTypes } from \"./toolbar\";\n\ninterface TextEditorDialogsProps {\n\tlinkTypeDialog: LinkTypes | null;\n\ttagTypeDialog: TagTypes | null;\n\tlocalLinkDialogComponent?: ComponentType<LocalLinkDialogAdapterProps>;\n\tonCloseLinkDialog: () => void;\n\tonCloseTagDialog: () => void;\n\tonAddLink: (url: string, text: string, add: string, ariaLabel: string, showQrCode: boolean) => void;\n\tonAddLocalLink: (url: string, caption: string) => void;\n\tonInsertSemanticTag: (tagName: string, text: string, attributes: Record<string, string>) => void;\n\tsemanticDialogState: SemanticDialogState;\n\tlinkDialogState: LinkType;\n}\n\n/**\n * Монтирует только активную dialog-session редактора. Граница монтирования создаёт\n * свежий draft из текущего selection state без синхронизирующих setState-effects.\n */\nexport function TextEditorDialogs({\n\tlinkTypeDialog,\n\ttagTypeDialog,\n\tlocalLinkDialogComponent,\n\tonCloseLinkDialog,\n\tonCloseTagDialog,\n\tonAddLink,\n\tonAddLocalLink,\n\tonInsertSemanticTag,\n\tsemanticDialogState,\n\tlinkDialogState\n}: TextEditorDialogsProps) {\n\tconst LocalLinkDialogComponent = localLinkDialogComponent;\n\n\treturn (\n\t\t<>\n\t\t\t{linkTypeDialog === LinkTypes.LOCAL_LINK && LocalLinkDialogComponent ? (\n\t\t\t\t<LocalLinkDialogComponent isOpen={true} onClose={onCloseLinkDialog} onConfirm={onAddLocalLink} />\n\t\t\t) : null}\n\n\t\t\t{linkTypeDialog === LinkTypes.LINK ? (\n\t\t\t\t<LinkDialog initialState={linkDialogState} onClose={onCloseLinkDialog} onConfirm={onAddLink} />\n\t\t\t) : null}\n\n\t\t\t{linkTypeDialog === LinkTypes.PHONE ? (\n\t\t\t\t<PhoneDialog initialState={linkDialogState} onClose={onCloseLinkDialog} onConfirm={onAddLink} />\n\t\t\t) : null}\n\n\t\t\t{linkTypeDialog === LinkTypes.EMAIL ? (\n\t\t\t\t<EmailDialog initialState={linkDialogState} onClose={onCloseLinkDialog} onConfirm={onAddLink} />\n\t\t\t) : null}\n\n\t\t\t{tagTypeDialog &&\n\t\t\t\t(tagTypeDialog !== TagTypes.time ? (\n\t\t\t\t\t<SemanticDialog\n\t\t\t\t\t\tonClose={onCloseTagDialog}\n\t\t\t\t\t\tonConfirm={onInsertSemanticTag}\n\t\t\t\t\t\tconfig={SemanticTagConfigs[tagTypeDialog]}\n\t\t\t\t\t\tinitialText={semanticDialogState.text}\n\t\t\t\t\t\tinitialState={semanticDialogState.attributes}\n\t\t\t\t\t/>\n\t\t\t\t) : (\n\t\t\t\t\t<TimeDialog\n\t\t\t\t\t\tonClose={onCloseTagDialog}\n\t\t\t\t\t\tonConfirm={onInsertSemanticTag}\n\t\t\t\t\t\tinitialState={getTimeDialogInitialState(semanticDialogState.attributes.datetime)}\n\t\t\t\t\t/>\n\t\t\t\t))}\n\t\t</>\n\t);\n}\n","import { useCallback, useMemo, useState } from \"react\";\n\nimport { $generateHtmlFromNodes } from \"@lexical/html\";\nimport { ListItemNode, ListNode } from \"@lexical/list\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { ContentEditable } from \"@lexical/react/LexicalContentEditable\";\nimport { LexicalErrorBoundary } from \"@lexical/react/LexicalErrorBoundary\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { HeadingNode, QuoteNode } from \"@lexical/rich-text\";\nimport { cn } from \"@ryuzaki13/react-foundation-lib/utils\";\nimport { type LexicalEditor, type EditorState as LexicalEditorState } from \"lexical\";\n\nimport { TextEditorCoreProps, isLexicalTextRaw } from \"./editorModel\";\nimport { InitialHtmlPlugin, SelectionStatePlugin } from \"./lexical/plugins\";\nimport { createLexicalRaw } from \"./lib/serialization/createLexicalRaw\";\nimport { useTextEditorLexicalActions } from \"./model/hooks/useTextEditorLexicalActions\";\nimport { DEFAULT_TOOLBAR_STATE, type LexicalToolbarState } from \"./model/textEditorTypes\";\nimport { AccessibleLinkNode } from \"./nodes/AccessibleLinkNode\";\nimport { SemanticTagNode } from \"./nodes/SemanticTagNode\";\nimport TextEditorStyle from \"./TextEditor.module.scss\";\nimport \"./TextEditor.scss\";\nimport { TextEditorDialogs } from \"./TextEditorDialogs\";\nimport { type LinkTypes, type TagTypes, TextEditorToolbarLexical } from \"./toolbar\";\n\ntype TextEditorProps = TextEditorCoreProps;\n\n/**\n * Редактор форматированного текста на базе Lexical. Поддерживает тулбар, бизнес-адаптеры и сериализацию контента в единый формат данных.\n */\nexport function TextEditorLexicalClient({ initialData, onChange, toolbarComponents, businessAdapters }: TextEditorProps) {\n\tconst LocalLinkDialogComponent = businessAdapters?.LocalLinkDialogComponent;\n\tconst [isFocused, setIsFocused] = useState(false);\n\tconst [toolbarState, setToolbarState] = useState<LexicalToolbarState>(DEFAULT_TOOLBAR_STATE);\n\tconst [editor, setEditor] = useState<LexicalEditor | null>(null);\n\tconst [linkTypeDialog, setLinkTypeDialog] = useState<LinkTypes | null>(null);\n\tconst [tagTypeDialog, setTagTypeDialog] = useState<TagTypes | null>(null);\n\n\tconst lexicalRaw = isLexicalTextRaw(initialData?.raw) ? initialData.raw : null;\n\tconst hasLexicalRaw = !!lexicalRaw;\n\n\tconst initialEditorState = useMemo(() => {\n\t\tif (!lexicalRaw) return undefined;\n\t\treturn JSON.stringify(lexicalRaw.editorState);\n\t}, [lexicalRaw]);\n\n\tconst handleError = useCallback((error: Error) => {\n\t\tconsole.error(\"Ошибка редактора Lexical\", error);\n\t}, []);\n\n\tconst handleChange = useCallback(\n\t\t(editorState: LexicalEditorState, lexicalEditor: LexicalEditor) => {\n\t\t\tlet html = \"\";\n\t\t\teditorState.read(() => {\n\t\t\t\thtml = $generateHtmlFromNodes(lexicalEditor, null);\n\t\t\t});\n\n\t\t\tconst raw = createLexicalRaw(editorState);\n\t\t\tonChange({ raw, html });\n\t\t},\n\t\t[onChange]\n\t);\n\n\tconst openLinkDialog = useCallback((type: LinkTypes) => {\n\t\tsetLinkTypeDialog(type);\n\t}, []);\n\n\tconst openTagDialog = useCallback((type: TagTypes) => {\n\t\tsetTagTypeDialog(type);\n\t}, []);\n\n\tconst actions = useTextEditorLexicalActions({\n\t\teditor,\n\t\ttoolbarState,\n\t\thasLocalLinkDialog: !!LocalLinkDialogComponent,\n\t\tonOpenLinkDialog: openLinkDialog,\n\t\tonOpenTagDialog: openTagDialog\n\t});\n\n\tconst initialConfig = useMemo(\n\t\t() => ({\n\t\t\tnamespace: \"KtkTextEditorLexical\",\n\t\t\tonError: handleError,\n\t\t\ttheme: {\n\t\t\t\tparagraph: \"paragraph\",\n\t\t\t\ttext: {\n\t\t\t\t\tcode: \"lexicalTextCode\",\n\t\t\t\t\thighlight: \"lexicalTextHighlight\",\n\t\t\t\t\tunderline: \"lexicalTextUnderline\",\n\t\t\t\t\tstrikethrough: \"lexicalTextStrikethrough\"\n\t\t\t\t}\n\t\t\t},\n\t\t\tnodes: [HeadingNode, QuoteNode, ListNode, ListItemNode, AccessibleLinkNode, SemanticTagNode],\n\t\t\teditorState: initialEditorState\n\t\t}),\n\t\t[handleError, initialEditorState]\n\t);\n\n\treturn (\n\t\t<div className={TextEditorStyle.textEditor}>\n\t\t\t<div\n\t\t\t\tclassName={cn(TextEditorStyle.textEditorContent, {\n\t\t\t\t\t[TextEditorStyle.focused]: isFocused\n\t\t\t\t})}>\n\t\t\t\t<LexicalComposer initialConfig={initialConfig}>\n\t\t\t\t\t<TextEditorToolbarLexical\n\t\t\t\t\t\ttoolbarComponents={toolbarComponents}\n\t\t\t\t\t\tstate={toolbarState}\n\t\t\t\t\t\tonBlockStyleToggle={actions.handleBlockStyleToggle}\n\t\t\t\t\t\tonInlineStyleToggle={actions.handleInlineStyleToggle}\n\t\t\t\t\t\tonAlignmentChange={actions.handleAlignmentChange}\n\t\t\t\t\t\tonLinkClick={actions.handleLinkClick}\n\t\t\t\t\t\tonTagClick={actions.handleTagClick}\n\t\t\t\t\t\tonUndo={actions.handleUndo}\n\t\t\t\t\t\tonRedo={actions.handleRedo}\n\t\t\t\t\t\tonCleanTag={actions.handleCleanSemanticTag}\n\t\t\t\t\t/>\n\t\t\t\t\t<RichTextPlugin\n\t\t\t\t\t\tcontentEditable={\n\t\t\t\t\t\t\t<ContentEditable\n\t\t\t\t\t\t\t\tclassName=\"lexicalEditorContentEditable\"\n\t\t\t\t\t\t\t\tonFocus={() => setIsFocused(true)}\n\t\t\t\t\t\t\t\tonBlur={() => setIsFocused(false)}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t}\n\t\t\t\t\t\tplaceholder={<div className=\"lexicalEditorPlaceholder\">Введите текст...</div>}\n\t\t\t\t\t\tErrorBoundary={LexicalErrorBoundary}\n\t\t\t\t\t/>\n\t\t\t\t\t<HistoryPlugin />\n\t\t\t\t\t<ListPlugin />\n\t\t\t\t\t<SelectionStatePlugin onEditorReady={setEditor} onStateChange={setToolbarState} />\n\t\t\t\t\t<InitialHtmlPlugin initialHTML={initialData?.html} shouldSkip={hasLexicalRaw} />\n\t\t\t\t\t<OnChangePlugin onChange={handleChange} ignoreSelectionChange />\n\t\t\t\t</LexicalComposer>\n\t\t\t</div>\n\n\t\t\t<TextEditorDialogs\n\t\t\t\tlinkTypeDialog={linkTypeDialog}\n\t\t\t\ttagTypeDialog={tagTypeDialog}\n\t\t\t\tlocalLinkDialogComponent={LocalLinkDialogComponent}\n\t\t\t\tonCloseLinkDialog={() => setLinkTypeDialog(null)}\n\t\t\t\tonCloseTagDialog={() => setTagTypeDialog(null)}\n\t\t\t\tonAddLink={actions.handleAddLink}\n\t\t\t\tonAddLocalLink={actions.handleAddLocalLink}\n\t\t\t\tonInsertSemanticTag={actions.insertSemanticTagAtSelection}\n\t\t\t\tsemanticDialogState={actions.semanticDialogState}\n\t\t\t\tlinkDialogState={actions.linkDialogState}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACgBA,SAAgB,EAAe,EAAE,aAAU,aAAU,UAAO,UAAO,SAAM,cAAgC;CAOxG,OACC,kBAAC,GAAD;EACQ;EACG;EACV,YAAW;EACX,MAAM,IAAW,SAAS,KAAA;EAC1B,cAZuB,MAAqC;GAG7D,EAAE,eAAe;EAClB;EASE,eAAe,IAAU,KAAS,EAAE;EAC9B;CACN,CAAA;AAEH;;;ACnBA,SAAgB,GAAkB,EAAE,sBAAmB,sBAA2C;CACjG,OACC,kBAAC,OAAD;EAAK,WAAW,EAAa;EAA7B,UAAA;GACC,kBAAC,GAAD;IACC,OAAM;IACN,MAAM,kBAAC,GAAD,CAAY,CAAA;IAClB,UAAU,MAAoB;IAC9B,eAAe,EAAkB,MAAM;GACvC,CAAA;GACD,kBAAC,GAAD;IACC,OAAM;IACN,MAAM,kBAAC,GAAD,CAAc,CAAA;IACpB,UAAU,MAAoB;IAC9B,eAAe,EAAkB,QAAQ;GACzC,CAAA;GACD,kBAAC,GAAD;IACC,OAAM;IACN,MAAM,kBAAC,GAAD,CAAa,CAAA;IACnB,UAAU,MAAoB;IAC9B,eAAe,EAAkB,OAAO;GACxC,CAAA;GACD,kBAAC,GAAD;IACC,OAAM;IACN,MAAM,kBAAC,GAAD,CAAe,CAAA;IACrB,UAAU,MAAoB;IAC9B,eAAe,EAAkB,SAAS;GAC1C,CAAA;EACG;;AAEP;;;AC/BA,SAAgB,GAAgB,EAAE,WAAQ,aAAgC;CACzE,OACC,kBAAC,OAAD;EAAK,WAAW,EAAa;EAA7B,UAAA,CACC,kBAAC,GAAD;GAAgB,OAAM;GAA8B,MAAM,kBAAC,IAAD,CAAO,CAAA;GAAG,SAAS;EAAS,CAAA,GACtF,kBAAC,GAAD;GAAgB,OAAM;GAAgC,MAAM,kBAAC,IAAD,CAAO,CAAA;GAAG,SAAS;EAAS,CAAA,CACpF;;AAEP;;;ACNA,SAAgB,GAAY,EAAE,aAAU,cAA6B;CACpE,OACC,kBAAC,OAAD;EAAK,WAAW,EAAa;EAA7B,UAAA;GACC,kBAAC,GAAD;IAAgB,OAAM;IAA4B,MAAM,kBAAC,GAAD,CAAO,CAAA;IAAG,eAAe,EAAQ,EAAU,UAAU;GAAI,CAAA;GACjH,kBAAC,GAAD;IAAgB,OAAM;IAA4B;IAAU,MAAM,kBAAC,GAAD,CAAe,CAAA;IAAG,eAAe,EAAQ,EAAU,IAAI;GAAI,CAAA;GAC7H,kBAAC,GAAD;IAAgB,OAAM;IAA6B;IAAU,MAAM,kBAAC,IAAD,CAAQ,CAAA;IAAG,eAAe,EAAQ,EAAU,KAAK;GAAI,CAAA;GACxH,kBAAC,GAAD;IAAgB,OAAM;IAA2B;IAAU,MAAM,kBAAC,GAAD,CAAS,CAAA;IAAG,eAAe,EAAQ,EAAU,KAAK;GAAI,CAAA;EACnH;;AAEP;;;ACVA,SAAgB,GAAW,EAAE,cAA4B;CACxD,OACC,kBAAC,OAAD;EAAK,WAAW,EAAa;EAA7B,UAAA;GACC,kBAAC,GAAD;IAAgB,OAAM;IAAwB,MAAM,kBAAC,GAAD,CAAW,CAAA;IAAG,eAAe,EAAQ,EAAS,IAAI;GAAI,CAAA;GAC1G,kBAAC,GAAD;IAAgB,OAAM;IAAqB,MAAM,kBAAC,GAAD,CAAY,CAAA;IAAG,eAAe,EAAQ,EAAS,IAAI;GAAI,CAAA;GACxG,kBAAC,GAAD;IAAgB,OAAM;IAAsB,MAAM,kBAAC,GAAD,CAAQ,CAAA;IAAG,eAAe,EAAQ,EAAS,IAAI;GAAI,CAAA;GACrG,kBAAC,GAAD;IAAgB,OAAM;IAA8B,MAAM,kBAAC,GAAD,CAAqB,CAAA;IAAG,eAAe,EAAQ,EAAS,IAAI;GAAI,CAAA;GAC1H,kBAAC,GAAD;IAAgB,OAAM;IAA8B,MAAM,kBAAC,IAAD,CAAW,CAAA;IAAG,eAAe,EAAQ,EAAS,GAAG;GAAI,CAAA;GAC/G,kBAAC,GAAD;IAAgB,OAAM;IAAgC,MAAM,kBAAC,IAAD,CAAmB,CAAA;IAAG,eAAe,EAAQ,EAAS,GAAG;GAAI,CAAA;EACrH;;AAEP;;;ACKA,SAAgB,GAAyB,EACxC,sBACA,UACA,uBACA,wBACA,sBACA,gBACA,eACA,WACA,WACA,iBACiC;CACjC,IAAM,IAAa;EAAE,SAAS;EAAM,GAAI,KAAqB,CAAC;CAAG;CAEjE,OACC,kBAAC,OAAD;EAAK,WAAW,EAAa;EAA7B,UAAA;GACE,EAAW,UACX,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,OAAD;IAAK,WAAW,EAAa;IAC3B,UAAA,EAAwB,KAAK,MAC7B,kBAAC,GAAD;KAEC,UAAU,EAAQ,UAAU,EAAM;KAClC,OAAO,EAAQ;KACf,OAAO,EAAQ;KACf,MAAM,EAAQ;KACd,SAAS;IACT,GANK,EAAQ,KAMb,CACD;GACG,CAAA,GACL,kBAAC,MAAD,CAAK,CAAA,CACJ,EAAA,CAAA;GAGF,EAAW,UACX,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,OAAD;IAAK,WAAW,EAAa;IAC3B,UAAA,EAAyB,KAAK,MAC9B,kBAAC,GAAD;KAEC,UAAU,CAAC,CAAC,EAAM,mBAAmB,EAAQ;KAC7C,OAAO,EAAQ;KACf,OAAO,EAAQ;KACf,MAAM,EAAQ;KACd,UAAU,EAAM;KAChB,SAAS;IACT,GAPK,EAAQ,KAOb,CACD;GACG,CAAA,GACL,kBAAC,MAAD,CAAK,CAAA,CACJ,EAAA,CAAA;GAGF,EAAW,aACX,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,IAAD;IAAmB,iBAAiB,EAAM;IAAoC;GAAoB,CAAA,GAClG,kBAAC,MAAD,CAAK,CAAA,CACJ,EAAA,CAAA;GAGF,EAAW,SACX,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,IAAD;IAAa,UAAU,EAAM;IAAkB,SAAS;GAAc,CAAA,GACtE,kBAAC,MAAD,CAAK,CAAA,CACJ,EAAA,CAAA;GAGF,EAAW,QACX,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,IAAD,EAAY,SAAS,EAAa,CAAA,GAClC,kBAAC,MAAD,CAAK,CAAA,CACJ,EAAA,CAAA;GAGF,EAAW,WACX,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,IAAD;IAAyB;IAAgB;GAAS,CAAA,GAClD,kBAAC,MAAD,CAAK,CAAA,CACJ,EAAA,CAAA;GAGH,kBAAC,GAAD;IACC,UAAU,EAAM;IAChB,OAAM;IACN,MAAM,kBAAC,GAAD,CAAgB,CAAA;IACtB,SAAS;GACT,CAAA;EACG;;AAEP;;;ACxGA,SAAgB,GAAkB,EAAE,gBAAa,iBAAsC;CACtF,IAAM,CAAC,KAAU,GAA0B,GACrC,IAAe,EAAO,EAAK;CAqBjC,OAnBA,SAAgB;EACX,KAAc,CAAC,KAAe,EAAa,WAAW,OAAO,SAAW,QAE5E,EAAa,UAAU,IACvB,EAAO,aAAa;GACnB,IAAM,IAAO,GAAS,GAChB,IAAM,IAAI,UAAU,CAAC,CAAC,gBAAgB,GAAa,WAAW,GAC9D,IAAQ,GAAsB,GAAQ,CAAG;GAG/C,IADA,EAAK,MAAM,GACP,EAAM,WAAW,GAAG;IACvB,EAAK,OAAO,EAAqB,CAAC;IAClC;GACD;GAEA,EAAK,OAAO,GAAG,CAAK;EACrB,CAAC;CACF,GAAG;EAAC;EAAQ;EAAa;CAAU,CAAC,GAE7B;AACR;;;ACDA,IAAa,KAA6C;CACzD,WAAW;CACX,kBAAkB;CAClB,oBAAoB;EACnB,MAAM;EACN,QAAQ;EACR,WAAW;EACX,eAAe;EACf,WAAW;EACX,MAAM;CACP;CACA,iBAAiB;AAClB,GC/Ca,MAAuB,MAAsC;CACzE,QAAQ,GAAR;EACC,KAAK,MACJ,OAAO;EACR,KAAK,MACJ,OAAO;EACR,KAAK,MACJ,OAAO;EACR,KAAK,MACJ,OAAO;EACR,SACC,OAAO;CACT;AACD,GAEa,MAAwB,MAAoD;CACxF,QAAQ,GAAR;EACC,KAAK,gBACJ,OAAO;EACR,KAAK,eACJ,OAAO;EACR,KAAK,eACJ,OAAO;EACR,KAAK,cACJ,OAAO;EACR,SACC,OAAO;CACT;AACD,GAEa,MAAyB,MAAiC;CACtE,QAAQ,GAAR;EACC,KAAK,QACJ,OAAO;EACR,KAAK,UACJ,OAAO;EACR,KAAK,aACJ,OAAO;EACR,KAAK,iBACJ,OAAO;EACR,KAAK,aACJ,OAAO;EACR,KAAK,QACJ,OAAO;EACR,SACC,OAAO;CACT;AACD,GCzCa,WAAiC;CAC7C,IAAM,IAAY,EAAc;CAChC,IAAI,CAAC,EAAkB,CAAS,GAAG,OAAO;CAG1C,IAAM,IADa,EAAU,OAAO,QACnB,CAAA,CAAW,0BAA0B;CAEtD,IAAI,GAAgB,CAAQ,GAAG;EAC9B,IAAM,IAAW,EAAS,UAAU;EACpC,IAAI,GAAY,CAAQ,GACvB,OAAO,EAAS,YAAY,MAAM,WAAW,wBAAwB;CAEvE;CAkBA,OAhBI,GAAY,CAAQ,IAChB,EAAS,YAAY,MAAM,WAAW,wBAAwB,sBAGlE,GAAe,CAAQ,IACnB,GAAoB,EAAS,OAAO,CAAC,IAGzC,GAAa,CAAQ,IACjB,eAGJ,EAAS,QAAQ,MAAM,cACnB,aAGD,EAAS,QAAQ;AACzB,GAEa,WAA+C;CAC3D,IAAM,IAAY,EAAc;CAChC,IAAI,CAAC,EAAkB,CAAS,GAAG,OAAO;CAI1C,IAAM,IAFa,EAAU,OAAO,QACnB,CAAA,CAAW,0BACT,CAAA,CAAS,cAAc;CAE1C,QAAQ,GAAR;EACC,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK,WACJ,OAAO;EACR,SACC,OAAO;CACT;AACD,GAEa,WAAiD;CAC7D,IAAM,IAAY,EAAc;CAKhC,OAJK,EAAkB,CAAS,IAIzB;EACN,WAAW,GAAiB;EAC5B,kBAAkB,EAAU,YAAY;EACxC,oBAAoB;GACnB,MAAM,EAAU,UAAU,MAAM;GAChC,QAAQ,EAAU,UAAU,QAAQ;GACpC,WAAW,EAAU,UAAU,WAAW;GAC1C,eAAe,EAAU,UAAU,eAAe;GAClD,WAAW,EAAU,UAAU,WAAoB;GACnD,MAAM,EAAU,UAAU,MAAM;EACjC;EACA,iBAAiB,GAAiB;CACnC,IAfQ;AAgBT;;;AC9DA,SAAgB,GAAqB,EAAE,kBAAe,oBAA4C;CACjG,IAAM,CAAC,KAAU,GAA0B;CAY3C,OAVA,UACC,EAAc,CAAM,GAEb,EAAO,wBAAwB,EAAE,qBAAkB;EACzD,EAAY,WAAW;GACtB,EAAc,GAAoB,CAAC;EACpC,CAAC;CACF,CAAC,IACC;EAAC;EAAQ;EAAe;CAAa,CAAC,GAElC;AACR;;;AC3BA,IAAa,MAAoB,OACzB;CACN,QAAQ;CACR,SAAS;CACT,aAAa,EAAY,OAAO;AACjC;;;ACLD,SAAgB,EAA+C,GAAuD;CACrH,IAAM,IAAY,EAAc;CAChC,IAAI,CAAC,EAAkB,CAAS,GAAG,OAAO;CAC1C,IAAM,IAAS,GAAoB,EAAU,OAAO,QAAQ,GAAG,CAAS,GAClE,IAAQ,GAAoB,EAAU,MAAM,QAAQ,GAAG,CAAS;CACtE,OAAO,KAAU,KAAS,EAAO,GAAG,CAAK,KAAK,EAAU,CAAM,IAAI,IAAS;AAC5E;;;ACFA,SAAgB,GAA8B,GAAiD;CAC9F,IACC,KACA,CAAC,EAAS,QAAQ,EAAS,KAAK,CAAC,CAAC,OAAO,MAAU;EAClD,IAAM,IAAO,EAAc,EAAM,GAAG;EAEpC,OADI,CAAC,GAAM,WAAW,KAAK,EAAM,SAAS,IAAU,KAC7C,EAAM,SAAS,SACnB,GAAY,CAAI,KAAK,EAAM,UAAU,EAAK,mBAAmB,IAC7D,GAAe,CAAI,KAAK,EAAM,UAAU,EAAK,gBAAgB;CACjE,CAAC,GACA;EACD,IAAM,IAAY,EAAS,MAAM;EAEjC,OADA,GAAc,CAAS,GAChB;CACR;CACA,IAAM,IAAO,GAAS;CAEtB,OADI,EAAK,QAAQ,KAAG,EAAK,OAAO,EAAqB,CAAC,GAC/C,EAAK,UAAU;AACvB;;;ACxBA,IAAa,MAAuB,MAA8B;CACjE,IAAI,IAAQ,GACR,IAA8B;CAElC,OAAO,IAEN,AADA,KAAS,GACT,IAAU,EAAQ,UAAU;CAG7B,OAAO;AACR,GCmBM,MAAgC,MAAuC;CAC5E,IAAI,EAAE,aAAmB,oBACxB,OAAO,EAAE,MAAM,KAAK;CAGrB,IAAM,IAAc,EAAQ;CAK5B,QAJK,MAAgB,QAAQ,MAAgB,OAAO,EAAQ,SAAS,WAAW,IACxE,EAAE,MAAM,KAAK,IAGd,EACN,MAAM,EAA0B,EAAQ,aAAa,MAAM,KAAK,IAAI;EACnE,KAAK,EAAQ,aAAa,KAAK;EAC/B,QAAQ,EAAQ,aAAa,QAAQ;EACrC,OAAO,EAAQ,aAAa,OAAO;EACnC,WAAW,EAAQ,aAAa,YAAY;EAC5C,QAAQ,EAAQ,aAAa,cAAc,MAAM;EACjD,KAAK;EACL,MAAM;CACP,CAAC,EACF;AACD,GAEa,IAAb,MAAa,UAA2B,GAAS;CAEhD;CAEA;CAEA;CAEA;CAEA,OAAO,UAAkB;EACxB,OAAO;CACR;CAEA,OAAO,MAAM,GAA8C;EAC1D,OAAO,IAAI,EACV,EAAK,OACL;GACC,KAAK,EAAK;GACV,QAAQ,EAAK;GACb,OAAO,EAAK;GACZ,WAAW,EAAK;GAChB,QAAQ,EAAK;GACb,KAAK,EAAK;GACV,MAAM,EAAK;EACZ,GACA,EAAK,KACN;CACD;CAEA,YAAY,IAAM,IAAI,IAAuC,CAAC,GAAG,GAAe;EAC/E,MAAM,GAAK,GAAY,CAAG;EAE1B,IAAM,EAAE,eAAY,MAAM,YAAS,IAAO,SAAM,MAAM,UAAO,SAAS;EAItE,AAHA,KAAK,cAAc,GACnB,KAAK,WAAW,GAChB,KAAK,QAAQ,GACb,KAAK,SAAS;CACf;CAEA,OAAO,YAAqC;EAC3C,OAAO,EACN,UAAU;GACT,YAAY;GACZ,UAAU;EACX,GACD;CACD;CAEA,OAAO,WAAW,GAAkE;EACnF,OAAO,EAA0B,CAAC,CAAC,eAAe,CAAc;CACjE;CAEA,eAAe,GAAuE;EACrF,OAAO,MACL,eAAe,CAAc,CAAC,CAC9B,aAAa,EAAe,aAAa,IAAI,CAAC,CAC9C,UAAU,CAAC,CAAC,EAAe,MAAM,CAAC,CAClC,OAAO,EAAe,OAAO,IAAI,CAAC,CAClC,QAAQ,EAAe,QAAQ,IAAI;CACtC;CAEA,aAA2C;EAC1C,OAAO;GACN,GAAG,MAAM,WAAW;GACpB,MAAM;GACN,SAAS;GACT,WAAW,KAAK,aAAa;GAC7B,QAAQ,KAAK,UAAU;GACvB,KAAK,KAAK,OAAO;GACjB,MAAM,KAAK,QAAQ;EACpB;CACD;CAEA,UAAU,GAAmC;EAC5C,IAAM,IAAM,MAAM,UAAU,CAAM;EAElC,OADA,KAAK,0BAA0B,MAAM,CAAG,GACjC;CACR;CAEA,UAAU,GAAgB,GAAqB,GAA+B;EAC7E,IAAM,IAAY,MAAM,UAAU,GAAU,GAAiB,CAAM;EAEnE,OADA,KAAK,0BAA0B,GAAU,CAAM,GACxC;CACR;CAEA,0BAA0B,GAAuB,GAA2B;EACrE,aAAkB,uBAIpB,CAAC,KAAY,EAAS,gBAAgB,KAAK,iBAC1C,KAAK,cACR,EAAO,aAAa,cAAc,KAAK,WAAW,IAElD,EAAO,gBAAgB,YAAY,KAIjC,CAAC,KAAY,EAAS,aAAa,KAAK,aAC3C,EAAO,aAAa,gBAAgB,KAAK,WAAW,SAAS,OAAO;CAEtE;CAEA,eAAe,GAA4B,IAAmB,IAA0B;EACvF,IAAM,IAAW,EAA0B,KAAK,OAAO;GACtD,KAAK,KAAK;GACV,QAAQ,KAAK;GACb,OAAO,KAAK;GACZ,WAAW,KAAK;GAChB,QAAQ,KAAK;GACb,KAAK,KAAK;GACV,MAAM,KAAK;EACZ,CAAC;EAED,OADA,KAAK,YAAY,GAAU,CAAgB,GACpC;CACR;CAEA,eAA8B;EAC7B,OAAO,KAAK,UAAU,CAAC,CAAC;CACzB;CAEA,aAAa,GAAgC;EAC5C,IAAM,IAAW,KAAK,YAAY;EAElC,OADA,EAAS,cAAc,GAChB;CACR;CAEA,YAAqB;EACpB,OAAO,KAAK,UAAU,CAAC,CAAC;CACzB;CAEA,UAAU,GAAuB;EAChC,IAAM,IAAW,KAAK,YAAY;EAElC,OADA,EAAS,WAAW,GACb;CACR;CAEA,SAAwB;EACvB,OAAO,KAAK,UAAU,CAAC,CAAC;CACzB;CAEA,OAAO,GAA0B;EAChC,IAAM,IAAW,KAAK,YAAY;EAElC,OADA,EAAS,QAAQ,GACV;CACR;CAEA,UAAyB;EACxB,OAAO,KAAK,UAAU,CAAC,CAAC;CACzB;CAEA,QAAQ,GAA2B;EAClC,IAAM,IAAW,KAAK,YAAY;EAElC,OADA,EAAS,SAAS,GACX;CACR;AACD,GAEa,KAA6B,IAAM,IAAI,MAC5C,GAAsB,IAAI,EAAmB,GAAK,CAAU,CAAC,GAGxD,KAAyB,MAC9B,aAAgB,GCjMlB,MAA4B,MAAgD;CACjF,IAAM,IAAoC,CAAC;CAK3C,OAJA,MAAM,KAAK,EAAQ,UAAU,CAAC,CAAC,SAAS,MAAS;EAC5C,EAAK,SAAS,YAClB,EAAW,EAAK,QAAQ,EAAK;CAC9B,CAAC,GACM;AACR,GAEM,KAA6B,MAAuC;CACzE,IAAI,EAAE,aAAmB,cACxB,OAAO,EAAE,MAAM,KAAK;CAGrB,IAAM,IAAM,EAAQ,QAAQ,YAAY;CACxC,IAAI,CAAC;EAAC;EAAQ;EAAQ;EAAQ;EAAQ;EAAO;CAAK,CAAC,CAAC,SAAS,CAAG,GAC/D,OAAO,EAAE,MAAM,KAAK;CAGrB,IAAM,IAAO,EAAQ;CAKrB,QAJK,MAAS,QAAQ,MAAS,OAAO,EAAQ,SAAS,WAAW,IAC1D,EAAE,MAAM,KAAK,IAGd,EACN,MAAM,EAAuB,GAAK,GAAyB,CAAO,GAAG,CAAI,EAC1E;AACD,GAEa,IAAb,MAAa,UAAwB,GAAY;CAEhD;CAEA;CAEA;CAEA,OAAO,UAAkB;EACxB,OAAO;CACR;CAEA,OAAO,MAAM,GAAwC;EACpD,OAAO,IAAI,EAAgB,EAAK,OAAO,EAAK,cAAc,EAAK,QAAQ,EAAK,KAAK;CAClF;CAEA,YAAY,IAAM,QAAQ,IAAoC,CAAC,GAAG,IAAsB,MAAM,GAAe;EAI5G,AAHA,MAAM,CAAG,GACT,KAAK,QAAQ,GACb,KAAK,eAAe,GACpB,KAAK,SAAS;CACf;CAEA,OAAO,YAAqC;EAC3C,OAAO;GACN,aAAa;IAAE,YAAY;IAA2B,UAAU;GAAE;GAClE,aAAa;IAAE,YAAY;IAA2B,UAAU;GAAE;GAClE,aAAa;IAAE,YAAY;IAA2B,UAAU;GAAE;GAClE,aAAa;IAAE,YAAY;IAA2B,UAAU;GAAE;GAClE,YAAY;IAAE,YAAY;IAA2B,UAAU;GAAE;GACjE,YAAY;IAAE,YAAY;IAA2B,UAAU;GAAE;EAClE;CACD;CAEA,OAAO,WAAW,GAA4D;EAC7E,OAAO,EAAuB,EAAe,KAAK,EAAe,YAAY,EAAe,IAAI,CAAC,CAAC,eAAe,CAAc;CAChI;CAEA,eAAe,GAAoE;EAClF,OAAO,MACL,eAAe,CAAc,CAAC,CAC9B,OAAO,EAAe,GAAG,CAAC,CAC1B,cAAc,EAAe,cAAc,CAAC,CAAC,CAAC,CAC9C,QAAQ,EAAe,QAAQ,IAAI;CACtC;CAEA,aAAwC;EACvC,OAAO;GACN,GAAG,MAAM,WAAW;GACpB,MAAM;GACN,SAAS;GACT,KAAK,KAAK,OAAO;GACjB,YAAY,KAAK,cAAc;GAC/B,MAAM,KAAK,QAAQ;EACpB;CACD;CAEA,UAAU,GAAmC;EAE5C,IAAM,IAAU,SAAS,cAAc,KAAK,KAAK;EAEjD,OADA,KAAK,sBAAsB,CAAO,GAC3B;CACR;CAEA,UAAU,GAAgB,GAA2B;EAMpD,OALI,EAAS,UAAU,KAAK,UAI5B,KAAK,sBAAsB,CAAG,GACvB;CACR;CAEA,YAAsC;EACrC,IAAM,IAAU,SAAS,cAAc,KAAK,KAAK;EAIjD,OAHA,OAAO,QAAQ,KAAK,YAAY,CAAC,CAAC,SAAS,CAAC,GAAK,OAAW;GAC3D,EAAQ,aAAa,GAAK,CAAK;EAChC,CAAC,GACM,EAAE,WAAQ;CAClB;CAEA,sBAAsB,GAAwB;EAM7C,AALA,EAAI,UAAU,IAAI,sBAAsB,GACxC,MAAM,KAAK,EAAI,UAAU,CAAC,CAAC,SAAS,MAAS;GACxC,EAAK,SAAS,WAClB,EAAI,gBAAgB,EAAK,IAAI;EAC9B,CAAC,GACD,OAAO,QAAQ,KAAK,YAAY,CAAC,CAAC,SAAS,CAAC,GAAK,OAAW;GAC3D,EAAI,aAAa,GAAK,CAAK;EAC5B,CAAC;CACF;CAEA,eAAe,GAA4B,IAAmB,IAA0B;EACvF,IAAM,IAAO,EAAuB,KAAK,OAAO,KAAK,cAAc,KAAK,MAAM;EAE9E,OADA,KAAK,YAAY,GAAM,CAAgB,GAChC;CACR;CAEA,sBAA+B;EAC9B,OAAO;CACR;CAEA,qBAA8B;EAC7B,OAAO;CACR;CAEA,aAAsB;EACrB,OAAO;CACR;CAEA,WAAoB;EACnB,OAAO;CACR;CAEA,SAAiB;EAChB,OAAO,KAAK,UAAU,CAAC,CAAC;CACzB;CAEA,OAAO,GAAmB;EACzB,IAAM,IAAW,KAAK,YAAY;EAElC,OADA,EAAS,QAAQ,GACV;CACR;CAEA,gBAAuC;EACtC,OAAO,KAAK,UAAU,CAAC,CAAC;CACzB;CAEA,cAAc,GAAyC;EACtD,IAAM,IAAW,KAAK,YAAY;EAElC,OADA,EAAS,eAAe,GACjB;CACR;CAEA,UAAyB;EACxB,OAAO,KAAK,UAAU,CAAC,CAAC;CACzB;CAEA,QAAQ,GAA2B;EAClC,IAAM,IAAW,KAAK,YAAY;EAElC,OADA,EAAS,SAAS,GACX;CACR;AACD,GAEa,KACZ,GACA,IAAoC,CAAC,GACrC,IAAsB,SAEf,GAAsB,IAAI,EAAgB,GAAK,GAAY,CAAI,CAAC,GAG3D,KAAsB,MAC3B,aAAgB;;;AC7JxB,SAAgB,GAA4B,EAC3C,WACA,iBACA,uBACA,qBACA,sBACqC;CAGrC,IAAM,IAAmB,EACxB,IACD,GACM,IAAuB,EAA+F,IAAI,GAC1H,CAAC,GAAiB,KAAsB,EAAmB,EAAE,GAC7D,CAAC,GAAqB,KAA0B,EAA8B;EAAE,MAAM;EAAI,YAAY,CAAC;CAAE,CAAC,GAC1G,IAAyB,GAC7B,MAAkB;EACb,OAEL;OAAI,MAAU,uBAAuB;IACpC,IAAI,EAAa,cAAc,uBAAuB;KACrD,EAAO,gBAAgB,IAAqB,KAAA,CAAS;KACrD;IACD;IACA,EAAO,gBAAgB,IAA+B,KAAA,CAAS;IAC/D;GACD;GAEA,IAAI,MAAU,qBAAqB;IAClC,IAAI,EAAa,cAAc,qBAAqB;KACnD,EAAO,gBAAgB,IAAqB,KAAA,CAAS;KACrD;IACD;IACA,EAAO,gBAAgB,IAA6B,KAAA,CAAS;IAC7D;GACD;GAEA,EAAO,aAAa;IACnB,IAAM,IAAY,EAAc;IAChC,IAAI,CAAC,EAAkB,CAAS,GAAG;IAEnC,IAAI,MAAU,cAAc,MAAU,aAAa;KAClD,EAAe,SAAiB,EAAqB,CAAC;KACtD;IACD;IAEA,IAAI,MAAU,cAAc;KAC3B,EAAe,SAAiB,GAAiB,CAAC;KAClD;IACD;IAEA,IAAM,IAAa,GAAqB,CAAK;IAC7C,AAAI,KACH,EAAe,SAAiB,GAAmB,CAAU,CAAC;GAEhE,CAAC;EA7BD;CA8BD,GACA,CAAC,GAAQ,EAAa,SAAS,CAChC,GAEM,IAA0B,GAC9B,MAAkB;EAClB,IAAI,CAAC,GAAQ;EAEb,IAAM,IAAe,GAAsB,CAAK;EAC3C,KAEL,EAAO,gBAAgB,IAAqB,CAAqB;CAClE,GACA,CAAC,CAAM,CACR,GAEM,IAAwB,GAC5B,MAA6B;EACxB,KACL,EAAO,gBAAgB,IAAwB,CAA8B;CAC9E,GACA,CAAC,CAAM,CACR,GAEM,IAAa,QAAkB;EAC/B,KACL,EAAO,gBAAgB,IAAc,KAAA,CAAS;CAC/C,GAAG,CAAC,CAAM,CAAC,GAEL,IAAa,QAAkB;EAC/B,KACL,EAAO,gBAAgB,IAAc,KAAA,CAAS;CAC/C,GAAG,CAAC,CAAM,CAAC,GAEL,IAAwB,GAC5B,MAA+B;EAC/B,IAAI,CAAC,GAAQ;EAEb,IAAM,IAAW,EAAiB;EAiDlC,AAhDA,EAAiB,UAAU,MAI3B,EAAO,aACA;GACL,GAA8B,GAAU,WAAW,IAAS,EAAS,YAAY,IAAI;EACtF,GACA;GAAE,UAAU;GAAM,KAAK,CAAC,GAAmB,CAAsB;EAAE,CACpE,GACA,EAAO,aACA;GACL,IAAM,IAAY,EAAc;GAChC,IAAI,CAAC,EAAkB,CAAS,GAAG;GACnC,IAAM,IAAW,GAAU,WAAW,KAAU,EAAS,MAAM,EAAc,EAAS,GAAG,IAAI;GAC7F,IAAI,EAAsB,CAAQ,KAAK,EAAS,WAAW,GAAG;IAU7D,AATA,EACE,OAAO,EAAQ,GAAG,CAAC,CACnB,aAAa,EAAQ,SAAS,CAAC,CAC/B,UAAU,EAAQ,MAAM,CAAC,CACzB,OAAO,EAAQ,OAAO,IAAI,GAExB,GAAU,SAAS,EAAQ,SAAS,EAAS,eAAe,KAC/D,EAAS,MAAM,CAAC,CAAC,OAAO,EAAgB,EAAQ,IAAI,CAAC,GACtD,EAAS,QAAQ,EAAS,eAAe,CAAC,GAC1C,EAAS,UAAU;IACnB;GACD;GACA,IAAM,IAAgB,EAAU,eAAe,GACzC,IAAY,EAAQ,KAAK,SAAS,IAAI,EAAQ,OAAO;GAC3D,IAAI,CAAC,EAAU,KAAK,GAAG;GAEvB,IAAM,IAAW,EAA0B,EAAQ,KAAK;IACvD,QAAQ;IACR,KAAK;IACL,WAAW,EAAQ,aAAa,KAAiB;IACjD,QAAQ,EAAQ;IAChB,KAAK,EAAQ,OAAO;IACpB,MAAM;GACP,CAAC,GAEK,IAAW,EAAgB,CAAS;GAE1C,AADA,EAAS,OAAO,CAAQ,GACxB,EAAU,YAAY,CAAC,CAAQ,CAAC;EACjC,GACA,EAAE,KAAK,EAAiB,CACzB,GAEA,4BAA4B;GAC3B,EAAO,MAAM;EACd,CAAC;CACF,GACA,CAAC,CAAM,CACR,GAEM,IAAgB,GACpB,GAAa,GAAc,GAAa,GAAmB,MAAwB;EACnF,EAAsB;GACrB;GACA;GACA;GACA;GACA,QAAQ;EACT,CAAC;CACF,GACA,CAAC,CAAqB,CACvB,GAEM,IAAqB,GACzB,GAAa,MAAoB;EACjC,EAAsB;GACrB;GACA,MAAM;GACN,KAAK;GACL,WAAW,kCAAkC;GAC7C,QAAQ;EACT,CAAC;CACF,GACA,CAAC,CAAqB,CACvB,GAEM,IAAwB,QAA4B;EACzD,IAAI,CAAC,GAAQ,OAAO;EAEpB,IAAI,IAAkB;EAoCtB,OAnCA,EAAO,eAAe,CAAC,CAAC,WAAW;GAClC,IAAM,IAAY,EAAc;GAChC,IAAI,CAAC,EAAkB,CAAS,GAAG;IAClC,IAAQ;IACR;GACD;GAEA,IAAM,IAAgB,EAAU,eAAe,GACzC,IAAW,EAAwB,EAAW;GAEpD,IAAI,EAAsB,CAAQ,GAAG;IACpC,IAAQ;KACP,KAAK,EAAS,OAAO;KACrB,WAAW,EAAS,aAAa,KAAK;KACtC,MAAM,EAAS,QAAQ,KAAK;KAC5B,KAAK,EAAS,OAAO,KAAK;KAC1B,QAAQ,EAAS,UAAU;IAC5B;IACA;GACD;GAEA,IAAI,GAAY,CAAQ,GAAG;IAC1B,IAAQ;KACP,KAAK,EAAS,OAAO;KACrB,WAAW;KACX,MAAM;KACN,KAAK;KACL,QAAQ;IACT;IACA;GACD;GAEA,IAAQ;EACT,CAAC,GAEM;CACR,GAAG,CAAC,CAAM,CAAC,GAEL,IAAkB,GACtB,MAAoB;EAChB,MAAS,EAAU,cAAc,CAAC,KAGjC,MACL,EAAO,eAAe,CAAC,CAAC,WAAW;GAClC,IAAM,IAAY,EAAc;GAChC,EAAiB,UAAU;IAC1B;IACA,WAAW,EAAkB,CAAS,IAAI,EAAU,MAAM,IAAI;IAC9D,KAAK,EAAwB,CAAqB,CAAC,EAAE,OAAO,KAAK;IACjE,OAAO,MAAS,EAAU;GAC3B;EACD,CAAC,GACD,EAAmB,EAAsB,CAAC,GAC1C,EAAiB,CAAI;CACtB,GACA;EAAC;EAAQ;EAAoB;EAAkB;CAAqB,CACrE,GAEM,IAA+B,GACnC,GAAa,GAAc,MAAuC;EAClE,IAAI,CAAC,GAAQ;EACb,IAAM,IAAW,EAAqB;EA2BtC,AA1BA,EAAqB,UAAU,MAC/B,EAAO,aACA;GACL,GAA8B,GAAU,WAAW,IAAS,EAAS,YAAY,IAAI;EACtF,GACA;GAAE,UAAU;GAAM,KAAK,CAAC,GAAmB,CAAsB;EAAE,CACpE,GACA,EAAO,aACA;GACL,IAAM,IAAY,EAAc;GAChC,IAAI,CAAC,EAAkB,CAAS,KAAK,CAAC,EAAK,KAAK,GAAG;GACnD,IAAM,IAAW,GAAU,WAAW,KAAU,EAAS,MAAM,EAAc,EAAS,GAAG,IAAI;GAC7F,IAAI,EAAmB,CAAQ,KAAK,EAAS,WAAW,KAAK,EAAS,OAAO,MAAM,GAGlF,AAFA,EAAS,cAAc,CAAU,CAAC,CAAC,QAAQ,CAAI,GAC3C,MAAS,EAAS,eAAe,KAAG,EAAS,MAAM,CAAC,CAAC,OAAO,EAAgB,CAAI,CAAC,GACrF,EAAS,UAAU;QACb;IACN,IAAM,IAAO,EAAuB,GAAK,GAAY,CAAI,GACnD,IAAU,EAAgB,CAAI;IAGpC,AAFA,EAAQ,UAAU,EAAU,MAAM,CAAC,CAAC,SAAS,EAAU,KAAK,GAC5D,EAAK,OAAO,CAAO,GACnB,EAAU,YAAY,CAAC,CAAI,CAAC;GAC7B;EACD,GACA,EAAE,KAAK,EAAiB,CACzB,GACA,4BAA4B,EAAO,MAAM,CAAC;CAC3C,GACA,CAAC,CAAM,CACR;CAsDA,OAAO;EACN;EACA;EACA;EACA;EACA,wBAzD8B,QAAkB;GAC3C,KAEL,EAAO,aAAa;IACnB,IAAM,IAAY,EAAc;IAChC,IAAI,CAAC,EAAkB,CAAS,KAAK,EAAU,YAAY,GAAG;IAE9D,IAAM,IAAgB,EAAU,SAAS,GACnC,oBAAgB,IAAI,IAAqB;IAa/C,AAXA,EAAc,SAAS,MAAS;KAC/B,IAAI,IAA8B;KAClC,OAAO,IAIN,AAHI,EAAmB,CAAO,KAC7B,EAAc,IAAI,CAAO,GAE1B,IAAU,EAAQ,UAAU;IAE9B,CAAC,GAGD,MAD0B,KAAK,CAAa,CAAC,CAAC,MAAM,GAAG,MAAM,GAAoB,CAAC,IAAI,GAAoB,CAAC,CAC3G,CAAA,CAAY,SAAS,MAAS;KACxB,EAAK,WAAW,MAErB,EADsB,YACtB,CAAA,CAAS,SAAS,MAAU,EAAK,aAAa,CAAK,CAAC,GACpD,EAAK,OAAO;IACb,CAAC;GACF,CAAC;EACF,GAAG,CAAC,CAAM,CA6BT;EACA;EACA;EACA;EACA,gBA/BsB,GACrB,MAAmB;GACd,MACL,EAAO,eAAe,CAAC,CAAC,WAAW;IAClC,IAAM,IAAY,EAAc,GAC1B,IAAO,EAAwB,CAAkB,GACjD,IAAW,GAAM,OAAO,OAAO,MAAS,EAAS,OAAO,SAAS,KAAQ,IAAO;IAMtF,AALA,EAAqB,UAAU;KAC9B;KACA,WAAW,EAAkB,CAAS,IAAI,EAAU,MAAM,IAAI;KAC9D,KAAK,GAAU,OAAO,KAAK;IAC5B,GACA,EAAuB;KACtB,MAAM,GAAU,eAAe,MAAM,EAAkB,CAAS,IAAI,EAAU,eAAe,IAAI;KACjG,YAAY,EAAE,GAAG,GAAU,cAAc,EAAE;IAC5C,CAAC;GACF,CAAC,GACD,EAAgB,CAAI;EACrB,GACA,CAAC,GAAQ,CAAe,CAYxB;EACA;EACA;EACA;EACA;CACD;AACD;;;;;;;;;AEpXA,SAAgB,GAAY,EAAE,YAAS,cAAW,mBAAkC;CACnF,IAAM,IACD,EAAO,CAAY,KAAK,OAAO,KAAiB,WAC5C;EAAE,MAAM;EAAI,KAAK;EAAI,WAAW;EAAI,KAAK;CAAa,IAGvD,GAEF,CAAC,GAAO,KAAY,QAAgB,EAAO,CAAK,KAAK,EAAM,OAAO,GAAA,CAAI,QAAQ,aAAa,EAAE,IAAI,EAAG,GACpG,CAAC,GAAW,KAAgB,QAAgB,EAAO,CAAK,IAAK,EAAM,aAAa,KAAM,EAAG,GACzF,CAAC,GAAO,KAAY,EAAwB,IAAI,GAEhD,KAAiB,MAEjB,6BAAW,KAAK,CAAK,IAInB,MAHN,EAAS,0BAA0B,GAC5B,KAKH,KAAiB,MAAkB;EACxC,MAAE,eAAe,GAEZ,EAAc,CAAK,GACxB;OAAI,CAAC,GAAW;IACf,EAAS,6BAA6B;IACtC;GACD;GAGA,AADA,EAAU,UAAU,KAAS,IAAI,IAAI,GAAW,EAAK,GACrD,EAAY;EAHZ;CAID,GAEM,UAAoB;EAIzB,AAHA,EAAS,EAAE,GACX,EAAa,EAAE,GACf,EAAS,IAAI,GACb,EAAQ;CACT;CAEA,OACC,kBAAC,GAAD;EAAO,QAAQ;EAAM,SAAS;EAAa,OAAM;EAAkB,MAAK;EAAxE,UAAA,CACC,kBAAC,GAAD,EAAA,UACC,kBAAC,OAAD;GAAK,WAAW,EAAG,cAAc,OAAO;GAAxC,UAAA;IACC,kBAAC,GAAD;KAAO,OAAM;KAAc,OAAO;KAAO,UAAU;KAAU,aAAY;IAAsB,CAAA;IAE9F,KACA,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACC,kBAAC,UAAD,EAAA,UAAQ,gBAAqB,CAAA;MAAC;MAAC,kBAAC,QAAD;OAAM,WAAU;OAAc,UAAA;MAAY,CAAA;KACrE;;IAGN,kBAAC,GAAD;KACC,OAAM;KACN,OAAO;KACP,UAAU;KACV,aAAY;IACZ,CAAA;GACG;EACQ,CAAA,EAAA,CAAA,GACd,kBAAC,GAAD,EAAA,UAAA,CACC,kBAAC,GAAD;GAAQ,YAAW;GAAU,MAAK;GAAQ,SAAS;GAAa,UAAA;EAExD,CAAA,GACR,kBAAC,GAAD;GAAQ,YAAW;GAAU,MAAK;GAAU,SAAS;GAAe,UAAU,CAAC,KAAS,CAAC;GAAW,UAAA;EAE5F,CAAA,CACI,EAAA,CAAA,CACP;;AAET;;;ACxFA,SAAgB,GAA0B,GAAmD;CAC5F,IAAI,CAAC,GAAO,OAAO,CAAC;CACpB,IAAM,CAAC,GAAM,KAAM,EAAM,MAAM,GAAG,GAC5B,IAAS,EAAK,SAAS,GAAG,IAAI,aAAa,EAAK,SAAS,GAAG,IAAI,SAAS;CAE/E,OAAO;EAAE,MADc,IAAK,SAAS,MAAW;EACjC;EAAM,IAAI,KAAM;CAAG;AACnC;;;ACYA,SAAgB,GAAW,EAAE,YAAS,cAAW,mBAAiC;CACjF,IAAM,IACD,EAAO,CAAY,KAClB,OAAO,KAAiB,WACpB;EAAE,MAAM;EAAI,KAAK;EAAI,WAAW;EAAI,KAAK;CAAa,IAGxD,GAEF,CAAC,GAAK,KAAU,QAAgB,EAAO,CAAK,IAAK,EAAM,OAAO,KAAM,EAAG,GACvE,CAAC,GAAW,KAAgB,QAAgB,EAAO,CAAK,IAAK,EAAM,aAAa,KAAM,EAAG,GACzF,CAAC,GAAO,KAAY,EAAwB,IAAI,GAChD,CAAC,GAAY,KAAiB,QACnC,OAAO,KAAiB,YAAY,IAAyB,EAAa,UAAU,KAAS,EAC9F,GAEM,KAAmB,MAAkB;EAI1C,AAHA,EAAO,CAAK,GAGR,KACH,EAAS,IAAI;CAEf,GAEM,KAAiB,MAAkB;EACxC,EAAE,eAAe;EAEjB,IAAM,IAAa,GAAY,CAAG;EAClC,IAAI,CAAC,EAAW,SAAS;GACxB,EAAS,EAAW,KAAK;GACzB;EACD;EAEA,IAAI,CAAC,GAAW;GACf,EAAS,8BAA8B;GACvC;EACD;EAKA,AADA,EADiB,EAAI,WAAW,MAAM,IAAI,IAAM,WAAW,KACvC,IAAI,IAAI,GAAW,CAAU,GACjD,EAAY;CACb,GAEM,UAAoB;EAIzB,AAHA,EAAO,EAAE,GACT,EAAa,EAAE,GACf,EAAS,IAAI,GACb,EAAQ;CACT;CAEA,OACC,kBAAC,GAAD;EAAO,QAAQ;EAAM,SAAS;EAAa,OAAM;EAAwB,MAAK;EAA9E,UAAA,CACC,kBAAC,GAAD,EAAA,UACC,kBAAC,GAAD;GAAe,KAAI;GAAnB,UAAA;IACC,kBAAC,GAAD;KAAO,OAAM;KAAmB,OAAO;KAAK,UAAU;KAAiB,aAAY;IAAuB,CAAA;IAEzG,KACA,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACC,kBAAC,UAAD,EAAA,UAAQ,gBAAqB,CAAA;MAAC;MAAC,kBAAC,QAAD;OAAM,WAAU;OAAc,UAAA;MAAY,CAAA;KACrE;;IAGN,kBAAC,GAAD;KACC,OAAM;KACN,OAAO;KACP,UAAU;KACV,aAAY;IACZ,CAAA;IAED,kBAAC,GAAD;KAAU,OAAM;KAA+C,OAAO;KAAY,UAAU;IAAgB,CAAA;GAC9F;EACF,CAAA,EAAA,CAAA,GACd,kBAAC,GAAD,EAAA,UAAA,CACC,kBAAC,GAAD;GAAQ,YAAW;GAAU,MAAK;GAAQ,SAAS;GAAa,UAAA;EAExD,CAAA,GACR,kBAAC,GAAD;GAAQ,YAAW;GAAU,MAAK;GAAU,SAAS;GAAe,UAAU,CAAC,KAAO,CAAC;GAAW,UAAA;EAE1F,CAAA,CACI,EAAA,CAAA,CACP;;AAET;;;ACnFA,SAAgB,GAAY,EAAE,YAAS,cAAW,mBAAkC;CACnF,IAAM,IACD,EAAO,CAAY,KAAK,OAAO,KAAiB,WAC5C;EAAE,MAAM;EAAI,KAAK;EAAI,WAAW;EAAI,KAAK;CAAa,IAGvD,GAEF,IAAe,EAAO,CAAK,KAAK,EAAM,OAAO,GAAA,CAAI,QAAQ,OAAO,EAAE,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,QAAQ,MAAM,EAAE,IAAI,IACrG,IAAkB,EAAO,CAAK,IACjC,EAAM,OACJ,EAAM,OAAO,GAAA,CAAI,QAAQ,OAAO,EAAE,KAClC,EAAM,OAAO,GAAA,CAAI,QAAQ,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,IAC9C,IACG,CAAC,GAAO,KAAY,EAAS,CAAY,GACzC,CAAC,GAAU,KAAe,EAAS,CAAe,GAClD,CAAC,GAAW,KAAgB,QAAgB,EAAO,CAAK,IAAK,EAAM,aAAa,KAAM,EAAG,GACzF,CAAC,GAAO,KAAY,EAAwB,IAAI,GAEhD,KAAqB,MAAkB;EAE5C,AADA,IAAQ,EAAM,QAAQ,OAAO,EAAE,GAC3B,EAAM,UAAU,MACnB,EAAS,CAAK,GACd,EAAS,IAAI,KAEb,EAAS,6BAA6B;CAExC,GAEM,KAAiB,MAClB,EAAM,WAAW,OACpB,EAAS,yCAAyC,GAC3C,KAKH,KAAiB,MAAkB;EAGxC,IAFA,EAAE,eAAe,GAEb,CAAC,EAAc,CAAK,GAAG;EAC3B,IAAI,CAAC,GAAW;GACf,EAAS,gCAAgC;GACzC;EACD;EAEA,IAAM,IAAiB,GAAY,CAAK;EAGxC,AADA,EAAU,OAAO,KADM,OACO,IAAW,GAAG,EAAe,QAAQ,MAAa,GAAgB,GAAU,GAAW,EAAK,GAC1H,EAAY;CACb,GAEM,UAAoB;EAIzB,AAHA,EAAS,EAAE,GACX,EAAa,EAAE,GACf,EAAS,IAAI,GACb,EAAQ;CACT;CAEA,OACC,kBAAC,GAAD;EAAO,QAAQ;EAAM,SAAS;EAAa,OAAM;EAAoB,MAAK;EAA1E,UAAA,CACC,kBAAC,GAAD,EAAA,UACC,kBAAC,GAAD;GAAe,KAAI;GAAnB,UAAA;IACC,kBAAC,OAAD;KAAK,WAAW,EAAG,QAAQ,iBAAiB,OAAO;KAAnD,UAAA,CACC,kBAAC,GAAD;MACC,OAAM;MACN,aAAY;MACZ,OAAO;MACP,UAAU;MACV,aAAY;MACZ,WAAU;KACV,CAAA,GACD,kBAAC,GAAD;MAAO,OAAM;MAAmB,OAAO;MAAU,UAAU;MAAa,aAAY;KAAO,CAAA,CACvF;;IACJ,KACA,kBAAC,OAAD;KAAK,WAAU;KAAf,UAAA;MACC,kBAAC,UAAD,EAAA,UAAQ,gBAAqB,CAAA;MAAC;MAAC,kBAAC,QAAD;OAAM,WAAU;OAAc,UAAA;MAAY,CAAA;KACrE;;IAGN,kBAAC,GAAD;KACC,OAAM;KACN,aAAY;KACZ,OAAO;KACP,UAAU;KACV,aAAY;IACZ,CAAA;GACa;EACF,CAAA,EAAA,CAAA,GACd,kBAAC,GAAD,EAAA,UAAA,CACC,kBAAC,GAAD;GAAQ,YAAW;GAAQ,MAAK;GAAQ,SAAS;GAAa,UAAA;EAEtD,CAAA,GACR,kBAAC,GAAD;GAAQ,YAAW;GAAQ,MAAK;GAAU,SAAS;GAAe,UAAU,CAAC,KAAS,CAAC;GAAW,UAAA;EAE1F,CAAA,CACI,EAAA,CAAA,CACP;;AAET;;;ACtFA,SAAgB,GAAe,EAAE,YAAS,cAAW,WAAQ,iBAAc,IAAI,kBAAe,CAAC,KAA0B;CACxH,IAAM,CAAC,GAAM,KAAW,EAAS,CAAW,GACtC,CAAC,GAAQ,KAAa,QAC3B,EAAO,OAAO,QAAgC,GAAQ,OACrD,EAAO,EAAM,QAAQ,EAAa,EAAM,SAAS,IAC1C,IACL,CAAC,CAAC,CACN,GACM,CAAC,GAAQ,KAAa,EAAwC,CAAC,CAAC,GAEhE,KAAgB,GAAc,MAAkB;EAErD,AADA,GAAW,OAAU;GAAE,GAAG;IAAO,IAAO;EAAM,EAAE,GAChD,GAAW,OAAU;GAAE,GAAG;IAAO,IAAO;EAAK,EAAE;CAChD,GAEM,UAA0B;EAC/B,IAAM,IAA2C,CAAC,GAC9C,IAAU;EAEd,AAAK,EAAK,KAAK,MACd,EAAU,OAAU,qBACpB,IAAU;EAGX,KAAK,IAAM,KAAS,EAAO,QAAQ;GAClC,IAAM,IAAQ,EAAO,EAAM,KAAK,EAAE,KAAK;GACvC,IAAI,EAAM,YAAY,CAAC,GAEtB,AADA,EAAU,EAAM,QAAQ,qBACxB,IAAU;QACJ,IAAI,EAAM,UAAU;IAC1B,IAAM,IAAM,EAAM,SAAS,CAAK;IAChC,AAAI,MACH,EAAU,EAAM,QAAQ,GACxB,IAAU;GAEZ;EACD;EAGA,OADA,EAAU,CAAS,GACZ;CACR;CASA,OACC,kBAAC,GAAD;EAAO,QAAQ;EAAe;EAAS,OAAO,YAAY,EAAO,QAAQ;EAAI,MAAK;EAAlF,UAAA,CACC,kBAAC,GAAD,EAAA,UACC,kBAAC,GAAD;GAAe,KAAI;GAAnB,UAAA;IACC,kBAAC,OAAD,EAAA,UAAA;KACE,EAAO;KAAY;KAAC,kBAAC,MAAD,CAAK,CAAA;IACtB,EAAA,CAAA;IAEL,kBAAC,OAAD,EAAA,UAAA;KACC,kBAAC,UAAD,EAAA,UAAQ,UAAe,CAAA;KAAC;KAAE,EAAO;IAC7B,EAAA,CAAA;IAEL,kBAAC,GAAD;KACC,OAAO,EAAO;KACd,aAAa,qFAAqF,EAAO;KACzG,OAAO;KACP,UAAU;KACV,OAAO,EAAO,QAAW,KAAA;KACzB,UAAA;IACA,CAAA;IACA,EAAO,OAAO,KAAK,MAElB,kBAAC,GAAD;KAEC,OAAO,EAAM;KACb,aAAa,EAAM;KACnB,aAAa,EAAM;KACnB,OAAO,EAAO,EAAM,SAAS;KAC7B,WAAW,MAAU,EAAa,EAAM,MAAM,CAAK;KACnD,OAAO,EAAO,EAAM,SAAS,KAAA;KAC7B,UAAU,EAAM;IAChB,GARK,EAAM,IAQX,CAEF;GACa;EACF,CAAA,EAAA,CAAA,GACd,kBAAC,GAAD,EAAA,UAAA,CACC,kBAAC,GAAD;GAAQ,YAAW;GAAQ,MAAK;GAAQ,SAAS;GAAS,UAAA;EAElD,CAAA,GACR,kBAAC,GAAD;GAAQ,YAAW;GAAQ,MAAK;GAAU,eA/CjB;IACtB,EAAS,MAEd,EAAU,EAAO,SAAS,EAAK,KAAK,GAAG;KAAE,GAAG;KAAc,GAAG;IAAO,CAAC,GACrE,EAAQ;GACT;GA0CqE,UAAA;EAE1D,CAAA,CACI,EAAA,CAAA,CACP;;AAET;;;AC/HA,SAAgB,EAAmB,GAAwB;CAC1D,IAAM,IAAQ,EAAM,MAAM,GAAG;CAC7B,OACC,EAAM,UAAU,KAChB,EAAM,OAAO,MACR,2BAA2B,KAAK,CAAI,IAAU,GAAU,cAAc,GAAM,MAAM,OAErF,gGAAgG,KAAK,CAAI,KACzG,GAAU,CAAI,MAAM,IAErB;AAEH;;;ACVA,IAAa,KAA0D;EACrE,EAAS,OAAO;EAChB,SAAS;EACT,OAAO;EACP,aAAa;EACb,SACC,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,QAAD;GAAM,OAAM;GAAkF,UAAA;EAAU,CAAA,GACxG,kBAAC,OAAD;GAAK,WAAU;GACd,UAAA,kBAAC,QAAD,EAAA,UAAO,8GAAkH,CAAA;EACrH,CAAA,CACJ,EAAA,CAAA;EAEH,QAAQ,CACP;GACC,MAAM;GACN,OAAO;GACP,aAAa;GACb,aAAa;GACb,UAAU;EACX,CACD;CACD;EACC,EAAS,OAAO;EAChB,SAAS;EACT,OAAO;EACP,aACC;EACD,SACC,kBAAA,GAAA,EAAA,UAAA;GACC,kBAAC,QAAD;IAAM,MAAK;IAAK,UAAA;GAAc,CAAA;GAAC;GAC/B,kBAAC,OAAD;IAAK,WAAU;IACd,UAAA,kBAAC,QAAD,EAAA,UAAO,qDAAyD,CAAA;GAC5D,CAAA;EACJ,EAAA,CAAA;EAEH,QAAQ,CACP;GACC,MAAM;GACN,OAAO;GACP,aAAa;GACb,UAAU;GACV,WAAW,MAAU,2BAA2B,KAAK,CAAG,IAAoD,OAAhD;EAC7D,CACD;CACD;EACC,EAAS,OAAO;EAChB,SAAS;EACT,OAAO;EACP,aAAa;EACb,SAAS;EACT,QAAQ,CACP;GACC,MAAM;GACN,OAAO;GACP,aAAa;GACb,aAAa;GACb,UAAU;EACX,CACD;CACD;EACC,EAAS,OAAO;EAChB,SAAS;EACT,OAAO;EACP,aAAa;EACb,SACC,kBAAA,GAAA,EAAA,UAAA;GAAE;GACoB,kBAAC,QAAD,EAAA,UAAM,8BAAiC,CAAA;GAAC;GAC7D,kBAAC,OAAD;IAAK,WAAU;IACd,UAAA,kBAAC,QAAD,EAAA,UAAO,iEAAuE,CAAA;GAC1E,CAAA;EACJ,EAAA,CAAA;EAEH,QAAQ,CACP;GACC,MAAM;GACN,OAAO;GACP,aAAa;GACb,aAAa;GACb,UAAU;EACX,CACD;CACD;EAgBC,EAAS,MAAM;EACf,SAAS;EACT,OAAO;EACP,aAAa;EACb,SACC,kBAAA,GAAA,EAAA,UAAA;GAAE;GACa,kBAAC,OAAD,EAAA,UAAK,SAAW,CAAA;GAAC;GAAC,kBAAC,OAAD,EAAA,UAAK,UAAY,CAAA;GACjD,kBAAC,OAAD;IAAK,WAAU;IACd,UAAA,kBAAC,QAAD,EAAA,UAAO,qDAA2D,CAAA;GAC9D,CAAA;EACJ,EAAA,CAAA;EAEH,QAAQ,CACP;GACC,MAAM;GACN,OAAO;GACP,WAAW,MAAW,CAAC,KAAS,EAAmB,CAAK,IAAI,OAAO;GACnE,aAAa;GACb,aAAa;GACb,UAAU;EACX,GACA;GACC,MAAM;GACN,OAAO;GACP,aAAa;GACb,aAAa;GACb,UAAU;EACX,CACD;CACD;EACC,EAAS,MAAM;EACf,SAAS;EACT,OAAO;EACP,aAAa;EACb,SACC,kBAAA,GAAA,EAAA,UAAA;GAAE;GACa,kBAAC,OAAD,EAAA,UAAK,SAAW,CAAA;GAAC;GAAC,kBAAC,OAAD,EAAA,UAAK,UAAY,CAAA;GACjD,kBAAC,OAAD;IAAK,WAAU;IACd,UAAA,kBAAC,QAAD,EAAA,UAAO,qDAA2D,CAAA;GAC9D,CAAA;EACJ,EAAA,CAAA;EAEH,QAAQ,CACP;GACC,MAAM;GACN,OAAO;GACP,WAAW,MAAW,CAAC,KAAS,EAAmB,CAAK,IAAI,OAAO;GACnE,aAAa;GACb,aAAa;GACb,UAAU;EACX,GACA;GACC,MAAM;GACN,OAAO;GACP,aAAa;GACb,aAAa;GACb,UAAU;EACX,CACD;CACD;AACD;;;AC/IA,SAAgB,GAAW,EAAE,YAAS,cAAW,mBAAiC;CACjF,IAAM,CAAC,GAAM,KAAW,QAAqC,GAAc,QAAQ,MAAM,GACnF,CAAC,GAAM,KAAW,QAAe,GAAc,QAAQ,EAAE,GACzD,CAAC,GAAI,KAAS,QAAe,GAAc,MAAM,EAAE,GACnD,CAAC,GAAQ,KAAa,EAAyC,CAAC,CAAC,GAEjE,UAAiB;EACtB,IAAM,IAA2B,CAAC,GAG5B,KAAU,MAAc,sBAAsB,KAAK,CAAC,GACpD,KAAU,MAAc,gBAAgB,KAAK,CAAC,GAC9C,KAAc,MAAc,kCAAkC,KAAK,CAAC,GAEpE,KAAS,GAAe,GAAe,MAAuC;GACnF,IAAI,CAAC,GAAO,OAAO,GAAG,EAAM;GAC5B,IAAI,MAAS,UAAU,CAAC,EAAO,CAAK,GAAG,OAAO;GAC9C,IAAI,MAAS,UAAU,CAAC,EAAO,CAAK,GAAG,OAAO;GAC9C,IAAI,MAAS,cAAc,CAAC,EAAW,CAAK,GAAG,OAAO;GACtD,IAAI,CAAC,EAAmB,CAAK,GAAG,OAAO;EAExC;EAEA,QAAQ,GAAR;GACC,KAAK;IACJ,EAAU,OAAO,EAAM,QAAQ,GAAM,MAAM;IAC3C;GACD,KAAK;IACJ,EAAU,OAAO,EAAM,SAAS,GAAM,MAAM;IAC5C;GACD,KAAK;IACJ,EAAU,OAAO,EAAM,gBAAgB,GAAM,UAAU;IACvD;GACD,KAAK;IAEJ,AADA,EAAU,OAAO,EAAM,gBAAgB,GAAM,MAAM,GACnD,EAAU,KAAK,EAAM,mBAAmB,GAAI,MAAM;IAClD;GACD,KAAK;IAEJ,AADA,EAAU,OAAO,EAAM,eAAe,GAAM,MAAM,GAClD,EAAU,KAAK,EAAM,kBAAkB,GAAI,MAAM;IACjD;GACD,KAAK,kBAEJ,AADA,EAAU,OAAO,EAAM,UAAU,GAAM,UAAU,GACjD,EAAU,KAAK,EAAM,aAAa,GAAI,UAAU;EAElD;EAGA,OADA,EAAU,CAAS,GACZ,OAAO,OAAO,CAAS,CAAC,CAAC,OAAO,MAAM,CAAC,CAAC;CAChD;CAiDA,OACC,kBAAC,GAAD;EAAO,QAAQ;EAAe;EAAS,OAAM;EAAiB,MAAK;EAAnE,UAAA,CACC,kBAAC,GAAD,EAAA,UACC,kBAAC,GAAD;GAAe,KAAI;GAAnB,UAAA,CACC,kBAAC,GAAD;IAAY,OAAM;IAAe,OAAO;IAAM,UAAU;IAAxD,UAAA;KACC,kBAAC,EAAW,QAAZ;MAAmB,OAAM;MAAO,OAAM;KAAQ,CAAA;KAC9C,kBAAC,EAAW,QAAZ;MAAmB,OAAM;MAAe,OAAM;KAAY,CAAA;KAC1D,kBAAC,EAAW,QAAZ;MAAmB,OAAM;MAAQ,OAAM;KAAQ,CAAA;KAC/C,kBAAC,EAAW,QAAZ;MAAmB,OAAM;MAAe,OAAM;KAAc,CAAA;KAC5D,kBAAC,EAAW,QAAZ;MAAmB,OAAM;MAAmB,OAAM;KAAc,CAAA;KAChE,kBAAC,EAAW,QAAZ;MAAmB,OAAM;MAA0B,OAAM;KAAkB,CAAA;IAChE;GAEZ,CAAA,GAAA,kBAAC,GAAD;IAAe,KAAI;IAAM,iBAnDF;KAC1B,QAAQ,GAAR;MACC,KAAK;MACL,KAAK;MACL,KAAK,QACJ,OACC,kBAAC,GAAD;OACC,OAAM;OACN,aAAa,MAAS,SAAS,UAAU,MAAS,SAAS,eAAe;OAC1E,OAAO;OACP,UAAU;OACV,OAAO,EAAO;MACd,CAAA;MAEH,KAAK;MACL,KAAK;MACL,KAAK,kBACJ,OACC,kBAAA,GAAA,EAAA,UAAA,CACC,kBAAC,GAAD;OACC,OAAM;OACN,aAAa,EAAK,SAAS,MAAM,IAAI,UAAU,EAAK,SAAS,MAAM,IAAI,eAAe;OACtF,OAAO;OACP,UAAU;OACV,OAAO,EAAO;MACd,CAAA,GACD,kBAAC,GAAD;OACC,OAAM;OACN,aAAa,EAAK,SAAS,MAAM,IAAI,UAAU,EAAK,SAAS,MAAM,IAAI,eAAe;OACtF,OAAO;OACP,UAAU;OACV,OAAO,EAAO;MACd,CAAA,CACA,EAAA,CAAA;KAEL;IACD,EAe6B,CAAa;GAAiB,CAAA,CACzC;EACF,CAAA,EAAA,CAAA,GACd,kBAAC,GAAD,EAAA,UAAA,CACC,kBAAC,GAAD;GAAQ,YAAW;GAAQ,MAAK;GAAQ,SAAS;GAAS,UAAA;EAElD,CAAA,GACR,kBAAC,GAAD;GAAQ,YAAW;GAAQ,MAAK;GAAU,eAnEjB;IAC3B,IAAI,CAAC,EAAS,GAAG;IAGjB,IAAM,IAAW,GAAM,WAAW,QAAQ,IAAI,GAAG,EAAK,GAAG,MAAO;IAEhE,AADA,EAAU,QAAQ,GAAU,EAAE,YAAS,CAAC,GACxC,EAAQ;GACT;GA4DqE,UAAA;EAE1D,CAAA,CACI,EAAA,CAAA,CACP;;AAET;;;ACjHA,SAAgB,GAAkB,EACjC,mBACA,kBACA,6BACA,sBACA,qBACA,cACA,mBACA,wBACA,wBACA,sBAC0B;CAC1B,IAAM,IAA2B;CAEjC,OACC,kBAAA,GAAA,EAAA,UAAA;EACE,MAAmB,EAAU,cAAc,IAC3C,kBAAC,GAAD;GAA0B,QAAQ;GAAM,SAAS;GAAmB,WAAW;EAAiB,CAAA,IAC7F;EAEH,MAAmB,EAAU,OAC7B,kBAAC,IAAD;GAAY,cAAc;GAAiB,SAAS;GAAmB,WAAW;EAAY,CAAA,IAC3F;EAEH,MAAmB,EAAU,QAC7B,kBAAC,IAAD;GAAa,cAAc;GAAiB,SAAS;GAAmB,WAAW;EAAY,CAAA,IAC5F;EAEH,MAAmB,EAAU,QAC7B,kBAAC,IAAD;GAAa,cAAc;GAAiB,SAAS;GAAmB,WAAW;EAAY,CAAA,IAC5F;EAEH,MACC,MAAkB,EAAS,OAS3B,kBAAC,IAAD;GACC,SAAS;GACT,WAAW;GACX,cAAc,GAA0B,EAAoB,WAAW,QAAQ;EAC/E,CAAA,IAZD,kBAAC,IAAD;GACC,SAAS;GACT,WAAW;GACX,QAAQ,GAAmB;GAC3B,aAAa,EAAoB;GACjC,cAAc,EAAoB;EAClC,CAAA;CAQF,EAAA,CAAA;AAEJ;;;ACjDA,SAAgB,GAAwB,EAAE,gBAAa,aAAU,sBAAmB,uBAAqC;CACxH,IAAM,IAA2B,GAAkB,0BAC7C,CAAC,GAAW,KAAgB,EAAS,EAAK,GAC1C,CAAC,GAAc,KAAmB,EAA8B,EAAqB,GACrF,CAAC,GAAQ,KAAa,EAA+B,IAAI,GACzD,CAAC,GAAgB,KAAqB,EAA2B,IAAI,GACrE,CAAC,GAAe,KAAoB,EAA0B,IAAI,GAElE,IAAa,EAAiB,GAAa,GAAG,IAAI,EAAY,MAAM,MACpE,IAAgB,CAAC,CAAC,GAElB,IAAqB,SAAc;EACnC,OACL,OAAO,KAAK,UAAU,EAAW,WAAW;CAC7C,GAAG,CAAC,CAAU,CAAC,GAET,IAAc,GAAa,MAAiB;EACjD,QAAQ,MAAM,4BAA4B,CAAK;CAChD,GAAG,CAAC,CAAC,GAEC,IAAe,GACnB,GAAiC,MAAiC;EAClE,IAAI,IAAO;EAMX,AALA,EAAY,WAAW;GACtB,IAAO,GAAuB,GAAe,IAAI;EAClD,CAAC,GAGD,EAAS;GAAE,KADC,GAAiB,CAClB;GAAK;EAAK,CAAC;CACvB,GACA,CAAC,CAAQ,CACV,GAEM,IAAiB,GAAa,MAAoB;EACvD,EAAkB,CAAI;CACvB,GAAG,CAAC,CAAC,GAEC,IAAgB,GAAa,MAAmB;EACrD,EAAiB,CAAI;CACtB,GAAG,CAAC,CAAC,GAEC,IAAU,GAA4B;EAC3C;EACA;EACA,oBAAoB,CAAC,CAAC;EACtB,kBAAkB;EAClB,iBAAiB;CAClB,CAAC,GAEK,IAAgB,UACd;EACN,WAAW;EACX,SAAS;EACT,OAAO;GACN,WAAW;GACX,MAAM;IACL,MAAM;IACN,WAAW;IACX,WAAW;IACX,eAAe;GAChB;EACD;EACA,OAAO;GAAC;GAAa;GAAW;GAAU;GAAc;GAAoB;EAAe;EAC3F,aAAa;CACd,IACA,CAAC,GAAa,CAAkB,CACjC;CAEA,OACC,kBAAC,OAAD;EAAK,WAAW,EAAgB;EAAhC,UAAA,CACC,kBAAC,OAAD;GACC,WAAW,EAAG,EAAgB,mBAAmB,GAC/C,EAAgB,UAAU,EAC5B,CAAC;GACD,UAAA,kBAAC,IAAD;IAAgC;IAAhC,UAAA;KACC,kBAAC,IAAD;MACoB;MACnB,OAAO;MACP,oBAAoB,EAAQ;MAC5B,qBAAqB,EAAQ;MAC7B,mBAAmB,EAAQ;MAC3B,aAAa,EAAQ;MACrB,YAAY,EAAQ;MACpB,QAAQ,EAAQ;MAChB,QAAQ,EAAQ;MAChB,YAAY,EAAQ;KACpB,CAAA;KACD,kBAAC,IAAD;MACC,iBACC,kBAAC,IAAD;OACC,WAAU;OACV,eAAe,EAAa,EAAI;OAChC,cAAc,EAAa,EAAK;MAChC,CAAA;MAEF,aAAa,kBAAC,OAAD;OAAK,WAAU;OAA2B,UAAA;MAAqB,CAAA;MAC5E,eAAe;KACf,CAAA;KACD,kBAAC,IAAD,CAAgB,CAAA;KAChB,kBAAC,IAAD,CAAa,CAAA;KACb,kBAAC,IAAD;MAAsB,eAAe;MAAW,eAAe;KAAkB,CAAA;KACjF,kBAAC,IAAD;MAAmB,aAAa,GAAa;MAAM,YAAY;KAAgB,CAAA;KAC/E,kBAAC,IAAD;MAAgB,UAAU;MAAc,uBAAA;KAAuB,CAAA;IAC/C;;EACb,CAAA,GAEL,kBAAC,IAAD;GACiB;GACD;GACf,0BAA0B;GAC1B,yBAAyB,EAAkB,IAAI;GAC/C,wBAAwB,EAAiB,IAAI;GAC7C,WAAW,EAAQ;GACnB,gBAAgB,EAAQ;GACxB,qBAAqB,EAAQ;GAC7B,qBAAqB,EAAQ;GAC7B,iBAAiB,EAAQ;EACzB,CAAA,CACG;;AAEP"}
@@ -1,15 +0,0 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n,t as r}from"./circle-alert-DviK8puL.js";import{n as i,t as a}from"./circle-check-B1-l7Oh4.js";import{i as o,n as s,r as c,t as l}from"./info-Dq-9oYHd.js";import{n as u,r as d,t as f}from"./sortable-BkTzd-5v.js";import{n as p}from"./iframe-BvendKJ_.js";import{a as m,i as h,n as g}from"./utils-tg3ibbzi.js";import{a as _,n as v,o as y}from"./array-D-_yMMUK-BBmW5vUr.js";import{h as ee,l as te,y as ne}from"./formatters-DVE1YVNQ-CJCkXjuI.js";import{i as b,n as x,r as re,t as ie}from"./NoData-D0rf5MW3.js";import{n as S,t as ae}from"./GridContainer-BlkGC1Ti.js";import{c as C,m as w,n as oe,o as T,p as se,r as E}from"./hooks-CiUB_4kG.js";import{i as D,r as ce}from"./useTable-CK68Q4S4.js";import{n as le,t as ue}from"./Scrollable-BfCUp0BO.js";import{n as O,t as de}from"./ContextMenu-C7QDzxj5.js";import{C as k,S as A,b as j,c as M,f as fe,l as pe,m as N,p as me,u as he,v as P,w as ge,x as _e,y as ve}from"./odata-f2MNATrV.js";import{At as F,Mt as I}from"./tableFeatures-Dx3U-F9E.js";var L,R,ye,z,be,xe,B,V;function Se(){return(Se=e((()=>{L=`UMTbLD`,R=`cz57Fx`,ye=`oPzAxu`,z=`MBu26r`,be=`_03z-1l`,xe=`_0RqsqJ`,B=`mXkUoM`,V={stateWrapper:L,status:R,information:ye,success:z,warning:be,error:xe,state:B}})))()}function Ce({state:e}){switch(e){case`error`:return(0,H.jsx)(we,{});case`warning`:return(0,H.jsx)(Te,{});case`success`:return(0,H.jsx)(Ee,{});case`information`:return(0,H.jsx)(De,{});default:return null}}function we(){return(0,H.jsx)(c,{className:m(V.state,V.error)})}function Te(){return(0,H.jsx)(r,{className:m(V.state,V.warning)})}function Ee(){return(0,H.jsx)(a,{className:m(V.state,V.success)})}function De(){return(0,H.jsx)(l,{className:m(V.state,V.information)})}var H;function Oe(){return(Oe=e((()=>{h(),n(),i(),o(),s(),Se(),H=p(),Ce.__docgenInfo={description:``,methods:[],displayName:`RenderStateIcon`,props:{state:{required:!1,tsType:{name:`State`},description:``}}},we.__docgenInfo={description:``,methods:[],displayName:`ErrorIcon`},Te.__docgenInfo={description:``,methods:[],displayName:`WarningIcon`},Ee.__docgenInfo={description:``,methods:[],displayName:`SuccessIcon`},De.__docgenInfo={description:``,methods:[],displayName:`InformationIcon`}})))()}var ke,Ae;function je(){return(je=e((()=>{ke=`YJUVjb`,Ae={resizeHandle:ke}})))()}function Me(e,t){let n=e.closest(`th`)?.getBoundingClientRect().width;return k(typeof n==`number`&&Number.isFinite(n)?n:t,t)}function Ne({columnId:e,className:t,minWidth:n,keyboardStep:r=Fe,ariaLabel:i=`Изменить ширину колонки`,getStartWidth:a,onResize:o,onResizeEnd:s,onReset:c}){let l=n??60,u=(0,U.useRef)(0),d=(0,U.useRef)(0),f=(0,U.useRef)(0),p=(0,U.useRef)(!1),h=(0,U.useRef)(!1),g=t=>{let n=a?.(e,t)??Me(t,l);return k(n,l)},_=e=>{(e.button===0||e.pointerType!==`mouse`)&&(p.current=!0,h.current=!1,u.current=e.clientX,d.current=g(e.currentTarget),f.current=d.current,e.currentTarget.setPointerCapture(e.pointerId),e.preventDefault(),e.stopPropagation())},v=t=>{if(!p.current)return;let n=k(d.current+t.clientX-u.current,l);f.current=n,h.current=!0,o(e,n),t.preventDefault(),t.stopPropagation()},y=t=>{if(p.current){p.current=!1,h.current&&s?.(e,f.current);try{t.currentTarget.releasePointerCapture(t.pointerId)}catch{}t.preventDefault(),t.stopPropagation()}};return(0,Pe.jsx)(`div`,{role:`separator`,"aria-label":i,"aria-orientation":`vertical`,tabIndex:0,onPointerDown:_,onPointerMove:v,onPointerUp:y,onPointerCancel:y,onKeyDown:t=>{if(t.key!==`ArrowLeft`&&t.key!==`ArrowRight`&&t.key!==`Home`)return;if(t.preventDefault(),t.stopPropagation(),t.key===`Home`){c?.(e);return}let n=t.key===`ArrowRight`?1:-1,i=g(t.currentTarget),a=k(i+n*r,l);o(e,a),s?.(e,a)},onDoubleClick:t=>{t.preventDefault(),t.stopPropagation(),c?.(e)},className:m(Ae.resizeHandle,t)})}var U,Pe,Fe;function Ie(){return(Ie=e((()=>{U=t(),j(),h(),je(),Pe=p(),Fe=8,Ne.__docgenInfo={description:``,methods:[],displayName:`TableColumnResizeHandle`,props:{columnId:{required:!0,tsType:{name:`string`},description:``},className:{required:!1,tsType:{name:`string`},description:``},minWidth:{required:!1,tsType:{name:`number`},description:``},keyboardStep:{required:!1,tsType:{name:`number`},description:``,defaultValue:{value:`8`,computed:!1}},ariaLabel:{required:!1,tsType:{name:`string`},description:``,defaultValue:{value:`"Изменить ширину колонки"`,computed:!1}},getStartWidth:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(columnId: string, element: HTMLElement) => number`,signature:{arguments:[{type:{name:`string`},name:`columnId`},{type:{name:`HTMLElement`},name:`element`}],return:{name:`number`}}},description:``},onResize:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(columnId: string, width: number) => void`,signature:{arguments:[{type:{name:`string`},name:`columnId`},{type:{name:`number`},name:`width`}],return:{name:`void`}}},description:``},onResizeEnd:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(columnId: string, width: number) => void`,signature:{arguments:[{type:{name:`string`},name:`columnId`},{type:{name:`number`},name:`width`}],return:{name:`void`}}},description:``},onReset:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(columnId: string) => void`,signature:{arguments:[{type:{name:`string`},name:`columnId`}],return:{name:`void`}}},description:``}}}})))()}function Le(e,t){return typeof e==`function`?e(t):e}function Re({columnId:e,children:t,dragDisabled:n=!1,draggingClassName:r,resizeHandle:i,className:a,style:o,...s}){let{attributes:c,listeners:l,setActivatorNodeRef:u,setNodeRef:d,transform:f,isDragging:p,rect:h}=C({id:e,disabled:n}),g=p?h.current?.width:void 0,_={transform:se.Translate.toString(f),zIndex:p?`calc(var(--z-header) + 1)`:void 0,...g?{width:g,minWidth:g}:{},...o},v={attributes:c,listeners:l,setActivatorElement:u,disabled:n,isDragging:p};return(0,ze.jsxs)(`th`,{...s,ref:d,className:m(a,p&&r),style:_,children:[Le(t,v),i?(0,ze.jsx)(Ne,{...i}):null]})}var ze;function Be(){return(Be=e((()=>{T(),w(),h(),Ie(),ze=p(),Re.__docgenInfo={description:``,methods:[],displayName:`TableHeaderInteractionCell`,props:{columnId:{required:!0,tsType:{name:`UniqueIdentifier`},description:``},children:{required:!0,tsType:{name:`union`,raw:`ReactNode | ((dragState: TableHeaderCellDragState) => ReactNode)`,elements:[{name:`ReactNode`},{name:`unknown`}]},description:``},dragDisabled:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`false`,computed:!1}},draggingClassName:{required:!1,tsType:{name:`string`},description:``},resizeHandle:{required:!1,tsType:{name:`signature`,type:`object`,raw:`{
2
- columnId: string;
3
- className?: string;
4
- minWidth?: number;
5
- keyboardStep?: number;
6
- ariaLabel?: string;
7
- getStartWidth?: (columnId: string, element: HTMLElement) => number;
8
- onResize: (columnId: string, width: number) => void;
9
- onResizeEnd?: (columnId: string, width: number) => void;
10
- onReset?: (columnId: string) => void;
11
- }`,signature:{properties:[{key:`columnId`,value:{name:`string`,required:!0}},{key:`className`,value:{name:`string`,required:!1}},{key:`minWidth`,value:{name:`number`,required:!1}},{key:`keyboardStep`,value:{name:`number`,required:!1}},{key:`ariaLabel`,value:{name:`string`,required:!1}},{key:`getStartWidth`,value:{name:`signature`,type:`function`,raw:`(columnId: string, element: HTMLElement) => number`,signature:{arguments:[{type:{name:`string`},name:`columnId`},{type:{name:`HTMLElement`},name:`element`}],return:{name:`number`}},required:!1}},{key:`onResize`,value:{name:`signature`,type:`function`,raw:`(columnId: string, width: number) => void`,signature:{arguments:[{type:{name:`string`},name:`columnId`},{type:{name:`number`},name:`width`}],return:{name:`void`}},required:!0}},{key:`onResizeEnd`,value:{name:`signature`,type:`function`,raw:`(columnId: string, width: number) => void`,signature:{arguments:[{type:{name:`string`},name:`columnId`},{type:{name:`number`},name:`width`}],return:{name:`void`}},required:!1}},{key:`onReset`,value:{name:`signature`,type:`function`,raw:`(columnId: string) => void`,signature:{arguments:[{type:{name:`string`},name:`columnId`}],return:{name:`void`}},required:!1}}]}},description:``}}}})))()}function Ve(e){return{start:Array.from(new Set((e?.start??[]).filter(e=>typeof e==`string`&&e.trim().length>0))),end:[]}}function He(e,t){let n=t?.[e.id];if(typeof n==`number`&&Number.isFinite(n)&&n>0)return`${Math.floor(n)}px`;let r=fe(e.columnDef)?.width??4;return typeof r==`number`&&(r=Math.max(r,4)),ve(r)}function Ue(e,t){let n=e.getAllLeafColumns().filter(e=>e.getIsVisible()),r=new Map(n.map(e=>[e.id,e])),i=n.map(e=>e.id),a=v(t.columnPinning.start,i),o=v(t.columnPinning.end,i),s=new Set([...a,...o]),c=[];for(let e of n)s.has(e.id)||c.push(e.id);let l=P({ids:c,order:t.columnOrder});return y([...a,...l,...o],r)}function We(e,t){let n=Ue(e,t),r=new Map(n.map(e=>[e.id,e]));return A({ids:n.map(e=>e.id),getWidth:e=>{let n=r.get(e);return n?He(n,t.columnSizing):`0px`}}).flatMap(e=>{let t=r.get(e.id);return t?[{...e,column:t}]:[]})}function Ge(e,t){let n={},r=[];for(let i of Ue(e,t))i.getIsPinned()===`start`&&(n[i.id]=Ke(r),r.push(He(i,t.columnSizing)));return n}function Ke(e){return e.length===0?`0px`:e.length===1?e[0]:`calc(${e.join(` + `)})`}function W(){return(W=e((()=>{_(),j()})))()}function qe(e){if(typeof e.id==`string`&&e.id.trim())return e.id;if(`accessorKey`in e&&typeof e.accessorKey==`string`&&e.accessorKey.trim())return e.accessorKey}function Je(e){return`cell`in e&&e.cell!=null}function Ye(e,t){for(let n of e){if(`columns`in n&&Array.isArray(n.columns)&&n.columns.length>0){Ye(n.columns,t);continue}t(n)}}function Xe(e){let t={},n=new Set;return Ye(e,e=>{let r=qe(e);if(!r)return;Je(e)&&n.add(r);let i=M(e);i&&(t[r]={...i,id:i.id??r,role:i.role??`dimension`,type:i.type??`string`})}),{runtimeByColumnId:te(t),customCellColumnIds:n}}function Ze(e){return!e.customCellColumnIds.has(e.columnId)&&!!e.runtimeByColumnId[e.columnId]}function Qe(){return(Qe=e((()=>{ee(),j()})))()}function $e(e){return e!=null&&e!==``}function et(e,t){return e.map(e=>({row:e,boundaryKey:t(e),cellByColumnId:new Map(e.getVisibleCells().map(e=>[e.column.id,e]))}))}function tt({rows:e,columns:t,resolveRowBoundaryKey:n=()=>`__all_rows__`,excludeColumnIds:r}){let i=t.filter(e=>!r?.has(e.id)&&fe(e.columnDef)?.mergeDuplicates===!0);if(e.length===0||i.length===0)return new Map;let a=et(e,n),o=new Map;for(let e of i){let t=-1,n,r,i=i=>{if(t!==-1){if(i-t<=1){t=-1,n=void 0,r=void 0;return}for(let n=t;n<i;n+=1){let r=a[n]?.cellByColumnId.get(e.id)?.id;r&&o.set(r,{hideContent:n>t,mergeWithNext:n<i-1})}t=-1,n=void 0,r=void 0}};for(let o=0;o<a.length;o+=1){let s=a[o],c=s?.cellByColumnId.get(e.id),l=c?.getValue();if(!c||!$e(l)){i(o);continue}if(t===-1){t=o,n=l,r=s?.boundaryKey;continue}(!Object.is(r,s?.boundaryKey)||!Object.is(n,l))&&(i(o),t=o,n=l,r=s?.boundaryKey)}i(a.length)}return o}function nt(){return(nt=e((()=>{j()})))()}function rt({columnOrder:e,defaultColumnOrder:t,onColumnOrderChange:n}){let[r,i]=(0,G.useState)(void 0),a=(0,G.useMemo)(()=>ge(e??r??t),[e,t,r]);return{columnOrder:a,onColumnOrderChange:(0,G.useCallback)(t=>{let r=ge(F(t,a));e===void 0&&i(r),n?.(r)},[e,n,a])}}var G;function it(){return(it=e((()=>{G=t(),j(),I()})))()}function at({columnPinning:e,defaultColumnPinning:t,onColumnPinningChange:n}){let[r,i]=(0,K.useState)(void 0),a=(0,K.useMemo)(()=>Ve(e??r??t),[e,t,r]);return{columnPinning:a,onColumnPinningChange:(0,K.useCallback)(t=>{let r={start:Ve(F(t,a)).start};e===void 0&&i(r),n?.(r)},[e,n,a])}}var K;function ot(){return(ot=e((()=>{K=t(),I(),W()})))()}function st({columnSizing:e,defaultColumnSizing:t,columnResizeMinWidth:n,onColumnSizingChange:r}){let[i,a]=(0,q.useState)(void 0),o=(0,q.useMemo)(()=>N(e??i??t,n),[n,e,t,i]);return{columnSizing:o,onColumnSizingChange:(0,q.useCallback)(t=>{let i=N(F(t,o),n);e===void 0&&a(i),r?.(i)},[n,e,r,o])}}var q;function ct(){return(ct=e((()=>{q=t(),j(),I()})))()}function lt({columnVisibility:e,defaultColumnVisibility:t,onColumnVisibilityChange:n}){let[r,i]=(0,J.useState)(void 0),a=(0,J.useMemo)(()=>e??r??t??{},[e,t,r]);return{columnVisibility:a,onColumnVisibilityChange:(0,J.useCallback)(t=>{let r=F(t,a);e===void 0&&i(r),n?.(r)},[e,n,a])}}var J;function ut(){return(ut=e((()=>{J=t(),I()})))()}var dt,ft;function pt(){return(pt=e((()=>{w(),dt=e=>{let{transform:t}=e;return{...t,y:0}},ft=e=>{let{transform:t}=e;return{...t,x:0}}})))()}var mt,ht,gt,_t,vt,yt,bt,xt,St,Ct,wt,Tt,Et,Dt,Ot,kt,At,jt,Mt,Nt,Y;function Pt(){return(Pt=e((()=>{mt=`_0rNBMr`,ht=`gp-7Db`,gt=`Ck-sXP`,_t=`-F3gli`,vt=`V5tPM-`,yt=`_2VJbvj`,bt=`AD8NkG`,xt=`qqixKn`,St=`dVDRNv`,Ct=`klOoMz`,wt=`fJvFJA`,Tt=`_7D8xa9`,Et=`_3j87pS`,Dt=`uwojkJ`,Ot=`lLsmW6`,kt=`uYvZ5P`,At=`QIS3xA`,jt=`a580w0`,Mt=`UOhaMF`,Nt=`DtKAgs`,Y={root:mt,headerContextMenuTrigger:ht,table:gt,head:_t,pinnedStartBoundary:vt,headerRow:yt,headerCell:bt,headerCellContent:xt,headerCellDraggable:St,headerCellDragging:Ct,headerCellPinnedStart:wt,bodyRow:Tt,bodyRowInteractive:Et,bodyCell:Dt,bodyRowSelected:Ot,bodyCellPinnedStart:kt,bodyCellMergedWithNext:At,feedbackCell:jt,fetchingRow:Mt,noData:Nt}})))()}function Ft({header:e,isPinnedStart:t,insetInlineStart:n,isPinnedBoundary:r,isDragDisabled:i,enableColumnResizing:a,enableColumnReordering:o,columnResizeMinWidth:s,renderHeaderContent:c,onResizeColumn:l,onResetColumnWidth:u}){return(0,It.jsx)(Re,{columnId:e.column.id,colSpan:e.colSpan,dragDisabled:!o||i,draggingClassName:Y.headerCellDragging,className:m(Y.headerCell,t&&Y.headerCellPinnedStart,r&&Y.pinnedStartBoundary),style:{...t?{insetInlineStart:n}:{}},resizeHandle:a&&!e.isPlaceholder?{columnId:e.column.id,minWidth:s,onResize:l,onReset:u}:void 0,children:({listeners:t,setActivatorElement:n})=>(0,It.jsx)(`div`,{ref:o&&!i?n:void 0,className:m(Y.headerCellContent,o&&!i&&Y.headerCellDraggable),...o&&!i?t??{}:{},children:c(e)})})}var It;function Lt(){return(Lt=e((()=>{h(),Be(),Pt(),It=p(),Ft.__docgenInfo={description:``,methods:[],displayName:`BaseTableHeaderCell`,props:{header:{required:!0,tsType:{name:`FoundationTableHeader`,elements:[{name:`TData`}],raw:`FoundationTableHeader<TData>`},description:``},isPinnedStart:{required:!0,tsType:{name:`boolean`},description:``},insetInlineStart:{required:!1,tsType:{name:`string`},description:``},isPinnedBoundary:{required:!0,tsType:{name:`boolean`},description:``},isDragDisabled:{required:!0,tsType:{name:`boolean`},description:``},enableColumnResizing:{required:!0,tsType:{name:`boolean`},description:``},enableColumnReordering:{required:!0,tsType:{name:`boolean`},description:``},columnResizeMinWidth:{required:!0,tsType:{name:`union`,raw:`number | undefined`,elements:[{name:`number`},{name:`undefined`}]},description:``},renderHeaderContent:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(header: FoundationTableHeader<TData>) => ReactNode`,signature:{arguments:[{type:{name:`FoundationTableHeader`,elements:[{name:`TData`}],raw:`FoundationTableHeader<TData>`},name:`header`}],return:{name:`ReactNode`}}},description:``},onResizeColumn:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(columnId: string, width: number) => void`,signature:{arguments:[{type:{name:`string`},name:`columnId`},{type:{name:`number`},name:`width`}],return:{name:`void`}}},description:``},onResetColumnWidth:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(columnId: string) => void`,signature:{arguments:[{type:{name:`string`},name:`columnId`}],return:{name:`void`}}},description:``}}}})))()}function Rt(e,t){let n=e.getLeafHeaders().map(e=>t.get(e.column.id)).filter(e=>typeof e==`number`);return n.length?Math.min(...n):2**53-1}function zt(e,t){let n=e.getStartHeaderGroups(),r=e.getCenterHeaderGroups(),i=e.getEndHeaderGroups(),a=Math.max(n.length,r.length,i.length);return Array.from({length:a},(e,a)=>[...n[a]?.headers??[],...r[a]?.headers??[],...i[a]?.headers??[]].filter(e=>e.isPlaceholder?!0:e.getLeafHeaders().some(e=>t.has(e.column.id))).sort((e,n)=>Rt(e,t)-Rt(n,t)))}function Bt(e,t,n){let r=e.getLeafHeaders().map(e=>e.column.id);return r.length>0&&r.every(e=>e in t)?{isPinnedStart:!0,insetInlineStart:t[r[0]]??`0px`,isPinnedBoundary:!!(n&&r.includes(n))}:{isPinnedStart:!1,isPinnedBoundary:!1}}function Vt(e,t){let n=e.getAllLeafColumns().map(e=>e.id);return P({ids:n,order:t.columnOrder})}function Ht({table:e,columnState:t,title:n,isLoading:r,isFetching:i,className:a,minHeight:o=`15em`,tableClassName:s,selectionMode:c=`none`,scrollableRef:l,interactiveElementSelector:u,onActivateRow:p,isRowInteractive:h,getRowClassName:_,getCellClassName:v,getCellStyle:y,getCellLayout:ee,renderCellContent:te,renderHeaderContextMenu:ne,enableColumnResizing:b=!1,enableColumnReordering:x=!1,rowReordering:S,columnResizeMinWidth:C,afterTableContent:w}){let T=We(e,t),se=(0,X.useMemo)(()=>T.map(e=>e.column),[T]),E=(0,X.useMemo)(()=>T.map(e=>e.id),[T]),D=(0,X.useMemo)(()=>new Map(E.map((e,t)=>[e,t])),[E]),le=(0,X.useMemo)(()=>new Set(E),[E]),O=oe({activationDistance:8}),k=zt(e,D),A=Ge(e,t),j=se.filter(e=>e.getIsPinned()===`start`).at(-1)?.id,M=(0,X.useMemo)(()=>t.columnPinning.start??[],[t.columnPinning.start]),N=(0,X.useMemo)(()=>new Set(M),[M]),P=e.getRowModel(),ge=(0,X.useMemo)(()=>P.rows.map(e=>e.id),[P.rows]),ve=!!n,F=P.rows.length>0,I=(0,X.useCallback)(e=>[...e].sort((e,t)=>(D.get(e.column.id)??2**53-1)-(D.get(t.column.id)??2**53-1)),[D]),L=(0,X.useCallback)((t,n)=>{e.setColumnSizing(e=>he(e,t,n,C))},[C,e]),R=(0,X.useCallback)(t=>{e.setColumnSizing(e=>pe(e,t))},[e]),ye=(0,X.useCallback)(n=>{let r=d({event:n,items:E});if(!r)return;let i=Vt(e,t),a=me({order:i,headerIds:E,pinnedIds:M,activeId:String(r.activeId),overId:String(r.overId)});a&&e.setColumnOrder(a)},[t,M,e,E]),z=e=>{if(e.isPlaceholder)return null;let t=ce(e.column.columnDef.header,e.getContext()),n=ne?.(e);return n?(0,Z.jsxs)(de,{children:[(0,Z.jsx)(de.Trigger,{children:(0,Z.jsx)(`div`,{className:Y.headerContextMenuTrigger,tabIndex:0,children:t})}),(0,Z.jsx)(de.Content,{children:n})]}):t},be=(e,t)=>{!(h?.(t)??!!p)||!p||_e(e.target,u)||p(t)},xe=(e,t)=>{!(h?.(t)??!!p)||!p||_e(e.target,u)||g(e,()=>p(t))},B=e=>{let t=h?.(e)??!!p,n=I([...e.getStartVisibleCells(),...e.getCenterVisibleCells(),...e.getEndVisibleCells()]).map(t=>{let n=fe(t.column.columnDef),r=ce(t.column.columnDef.cell,t.getContext()),i={row:e,cell:t,defaultContent:r,columnMeta:n},a=ee?.(i),o=t.column.getIsPinned()===`start`,s=t.column.id===j,c={...n?.align?{textAlign:n.align}:{},...o?{insetInlineStart:A[t.column.id]??`0px`}:{},...y?.(i)??{}};return(0,Z.jsx)(`td`,{className:m(Y.bodyCell,o&&Y.bodyCellPinnedStart,s&&Y.pinnedStartBoundary,a?.mergeWithNext&&Y.bodyCellMergedWithNext,v?.(i)),style:c,children:a?.hideContent?null:te?te(i):r},t.id)}),r={className:m(Y.bodyRow,t&&Y.bodyRowInteractive,e.getIsSelected()&&Y.bodyRowSelected,_?.(e)),"aria-selected":c===`none`?void 0:e.getIsSelected(),tabIndex:t?0:void 0,onClick:t=>be(t,e),onKeyDown:t=>xe(t,e)};return S?(0,Z.jsx)(f.Item,{as:`tr`,id:e.id,disabled:S.disabled,...r,children:n},e.id):(0,Z.jsx)(`tr`,{...r,children:n},e.id)};return(0,Z.jsxs)(ae,{templateRows:ve?`auto 1fr`:`1fr`,className:m(`overflowHidden w100 h100`,Y.root,a),style:{minHeight:o},children:[ve&&(0,Z.jsx)(`h3`,{className:`marginBottomXs`,children:n}),(0,Z.jsxs)(`div`,{className:`surface0 overflowHidden relative w100 h100`,children:[(0,Z.jsx)(ue,{ref:l,className:`w100 h100`,children:(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`table`,{className:m(Y.table,s),children:[(0,Z.jsx)(`colgroup`,{children:T.map(e=>(0,Z.jsx)(`col`,{style:e.width?{width:e.width}:void 0},e.id))}),(0,Z.jsx)(`thead`,{className:m(`stickyTop`,Y.head),children:x?(0,Z.jsx)(f.Root,{sensors:O,modifiers:[dt],onDragEnd:ye,children:(0,Z.jsx)(f.Container,{containerId:`base-table-header`,items:E,layout:`horizontal`,children:k.map((e,t)=>(0,Z.jsx)(`tr`,{className:Y.headerRow,children:e.map(e=>{let{isPinnedStart:t,insetInlineStart:n,isPinnedBoundary:r}=Bt(e,A,j),i=e.isPlaceholder||!le.has(e.column.id)||N.has(e.column.id);return(0,Z.jsx)(Ft,{header:e,isPinnedStart:t,insetInlineStart:n,isPinnedBoundary:r,isDragDisabled:i,enableColumnResizing:b,enableColumnReordering:x,columnResizeMinWidth:C,renderHeaderContent:z,onResizeColumn:L,onResetColumnWidth:R},e.id)})},`header-group-${t}`))})}):k.map((e,t)=>(0,Z.jsx)(`tr`,{className:Y.headerRow,children:e.map(e=>{let{isPinnedStart:t,insetInlineStart:n,isPinnedBoundary:r}=Bt(e,A,j);return(0,Z.jsx)(Ft,{header:e,isPinnedStart:t,insetInlineStart:n,isPinnedBoundary:r,isDragDisabled:!0,enableColumnResizing:b,enableColumnReordering:x,columnResizeMinWidth:C,renderHeaderContent:z,onResizeColumn:L,onResetColumnWidth:R},e.id)})},`header-group-${t}`))}),(0,Z.jsxs)(`tbody`,{children:[S?(0,Z.jsx)(f.Root,{sensors:O,modifiers:[ft],onDragEnd:S.onDragEnd,children:(0,Z.jsx)(f.Container,{containerId:S.containerId??`base-table-body`,items:ge,layout:`vertical`,children:P.rows.map(B)})}):P.rows.map(B),i&&F&&(0,Z.jsx)(`tr`,{className:Y.fetchingRow,children:(0,Z.jsx)(`td`,{colSpan:Math.max(se.length,1),className:Y.feedbackCell,children:(0,Z.jsx)(re,{})})})]})]}),w]})}),(0,Z.jsxs)(`div`,{className:`absolute inset0 border`,style:{pointerEvents:`none`,zIndex:20},children:[!r&&!i&&!F&&(0,Z.jsx)(ie,{className:Y.noData}),r&&!F&&(0,Z.jsx)(re,{className:`h100 w100`})]})]})]})}var X,Z;function Ut(){return(Ut=e((()=>{X=t(),pt(),E(),j(),h(),D(),O(),S(),b(),x(),le(),u(),W(),Pt(),Lt(),Z=p(),Ht.__docgenInfo={description:"Базовая таблица с общим UI-каркасом для Table и TreeTable.\n\n@NOTE: не для использования напрямую, это база для `Table` и `TreeTable`",methods:[],displayName:`BaseTable`,props:{table:{required:!0,tsType:{name:`FoundationTableInstance`,elements:[{name:`TData`}],raw:`FoundationTableInstance<TData>`},description:``},columnState:{required:!0,tsType:{name:`Pick`,elements:[{name:`FoundationTableState`},{name:`union`,raw:`"columnOrder" | "columnPinning" | "columnSizing" | "columnVisibility"`,elements:[{name:`literal`,value:`"columnOrder"`},{name:`literal`,value:`"columnPinning"`},{name:`literal`,value:`"columnSizing"`},{name:`literal`,value:`"columnVisibility"`}]}],raw:`Pick<FoundationTableState, "columnOrder" | "columnPinning" | "columnSizing" | "columnVisibility">`},description:``},title:{required:!1,tsType:{name:`string`},description:``},isLoading:{required:!1,tsType:{name:`boolean`},description:``},isFetching:{required:!1,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},minHeight:{required:!1,tsType:{name:`union`,raw:"`${number}em` | `${number}%`",elements:[{name:`literal`,value:"`${number}em`"},{name:`literal`,value:"`${number}%`"}]},description:``,defaultValue:{value:`"15em"`,computed:!1}},tableClassName:{required:!1,tsType:{name:`string`},description:``},selectionMode:{required:!1,tsType:{name:`TableSelectionMode`},description:``,defaultValue:{value:`"none"`,computed:!1}},scrollableRef:{required:!1,tsType:{name:`Ref`,elements:[{name:`HTMLDivElement`}],raw:`Ref<HTMLDivElement>`},description:``},interactiveElementSelector:{required:!1,tsType:{name:`string`},description:``},onActivateRow:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(row: FoundationTableRow<TData>) => void`,signature:{arguments:[{type:{name:`FoundationTableRow`,elements:[{name:`TData`}],raw:`FoundationTableRow<TData>`},name:`row`}],return:{name:`void`}}},description:``},isRowInteractive:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(row: FoundationTableRow<TData>) => boolean`,signature:{arguments:[{type:{name:`FoundationTableRow`,elements:[{name:`TData`}],raw:`FoundationTableRow<TData>`},name:`row`}],return:{name:`boolean`}}},description:``},getRowClassName:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(row: FoundationTableRow<TData>) => string | undefined`,signature:{arguments:[{type:{name:`FoundationTableRow`,elements:[{name:`TData`}],raw:`FoundationTableRow<TData>`},name:`row`}],return:{name:`union`,raw:`string | undefined`,elements:[{name:`string`},{name:`undefined`}]}}},description:``},getCellClassName:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(args: BaseTableCellRenderArgs<TData>) => string | undefined`,signature:{arguments:[{type:{name:`BaseTableCellRenderArgs`,elements:[{name:`TData`}],raw:`BaseTableCellRenderArgs<TData>`},name:`args`}],return:{name:`union`,raw:`string | undefined`,elements:[{name:`string`},{name:`undefined`}]}}},description:``},getCellStyle:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(args: BaseTableCellRenderArgs<TData>) => CSSProperties | undefined`,signature:{arguments:[{type:{name:`BaseTableCellRenderArgs`,elements:[{name:`TData`}],raw:`BaseTableCellRenderArgs<TData>`},name:`args`}],return:{name:`union`,raw:`CSSProperties | undefined`,elements:[{name:`CSSProperties`},{name:`undefined`}]}}},description:``},getCellLayout:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(args: BaseTableCellRenderArgs<TData>) => BaseTableCellLayout | undefined`,signature:{arguments:[{type:{name:`BaseTableCellRenderArgs`,elements:[{name:`TData`}],raw:`BaseTableCellRenderArgs<TData>`},name:`args`}],return:{name:`union`,raw:`BaseTableCellLayout | undefined`,elements:[{name:`BaseTableCellLayout`},{name:`undefined`}]}}},description:``},renderCellContent:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(args: BaseTableCellRenderArgs<TData>) => ReactNode`,signature:{arguments:[{type:{name:`BaseTableCellRenderArgs`,elements:[{name:`TData`}],raw:`BaseTableCellRenderArgs<TData>`},name:`args`}],return:{name:`ReactNode`}}},description:``},renderHeaderContextMenu:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(header: FoundationTableHeader<TData>) => ReactNode`,signature:{arguments:[{type:{name:`FoundationTableHeader`,elements:[{name:`TData`}],raw:`FoundationTableHeader<TData>`},name:`header`}],return:{name:`ReactNode`}}},description:`Общий слот контекстного меню заголовка.
12
-
13
- BaseTable намеренно не знает про сортировку, группировку или доменные
14
- действия. Он только сохраняет единый доступный способ открыть меню для
15
- \`Table\` и \`TreeTable\`, а содержимое передает потребитель.`},enableColumnResizing:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`false`,computed:!1}},enableColumnReordering:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`false`,computed:!1}},rowReordering:{required:!1,tsType:{name:`BaseTableRowReordering`},description:``},columnResizeMinWidth:{required:!1,tsType:{name:`number`},description:``},afterTableContent:{required:!1,tsType:{name:`ReactNode`},description:``}}}})))()}var Wt,Gt,Kt,Q;function qt(){return(qt=e((()=>{Wt=`jPPyP7`,Gt=`Oa7e5P`,Kt=`KhQtgF`,Q={formattedCellValue:Wt,formattedCell:Gt,formattedCellInner:Kt}})))()}function Jt({displayValue:e,align:t=`left`}){let n=(0,Yt.useRef)(null),r=e.showValue,i=e.showIcon?e.icon:void 0,a=r&&e.value!=null?String(e.value):``,o=ne(e.state),s=t===`right`?`flex-end`:t===`center`?`center`:`flex-start`,c=t===`center`?`center`:t===`right`?`right`:`left`;return(0,Yt.useEffect)(()=>{let t=n.current;if(!t)return;let r=()=>{if(!e.overflowTooltip||!a){t.removeAttribute(`title`);return}if(t.scrollWidth>t.clientWidth+1){t.setAttribute(`title`,a);return}t.removeAttribute(`title`)};if(r(),typeof ResizeObserver>`u`)return;let i=new ResizeObserver(r);return i.observe(t),()=>{i.disconnect()}},[e.overflowTooltip,a]),(0,$.jsx)(`div`,{className:m(Q.formattedCell,o),children:(0,$.jsxs)(`div`,{className:Q.formattedCellInner,style:{justifyContent:s},children:[e.iconPosition===`left`?(0,$.jsx)(Ce,{state:i}):null,r?(0,$.jsx)(`span`,{ref:n,className:m(`textOverflow`,Q.formattedCellValue),style:{textAlign:c},children:a}):null,e.iconPosition===`right`?(0,$.jsx)(Ce,{state:i}):null]})})}var Yt,$;function Xt(){return(Xt=e((()=>{Yt=t(),ee(),h(),Oe(),qt(),$=p(),Jt.__docgenInfo={description:"Общий renderer форматированной ячейки для `Table` и будущего `TreeTable`.\n\nКомпонент отвечает только за UI-отрисовку уже вычисленного display-result:\nruntime и бизнес-логика вычисления значения в него не входят.",methods:[],displayName:`FormattedTableCell`,props:{displayValue:{required:!0,tsType:{name:`FormattersPipelineDisplayValue`},description:`Нормализованный display-result из formatting-runtime.`},align:{required:!1,tsType:{name:`TableColumnAlign`},description:`Табличное выравнивание содержимого.`,defaultValue:{value:`"left"`,computed:!1}}}}})))()}export{Ze as _,ut as a,st as c,it as d,rt as f,Qe as g,Xe as h,Ut as i,ot as l,nt as m,Xt as n,lt as o,tt as p,Ht as r,ct as s,Jt as t,at as u,Ue as v,W as y};
@@ -1 +0,0 @@
1
- import{a as e,n as t}from"./rolldown-runtime-DkW27tQK.js";import{t as n}from"./react-BZJXY1be.js";import{n as r}from"./iframe-BvendKJ_.js";import{a as i,i as a,n as o,o as s}from"./utils-tg3ibbzi.js";import{n as c,t as l}from"./ui.module-l7VCYIW-.js";var u,d,f,p,m,h,g,_;function v(){return(v=t((()=>{u=`nINbA6`,d=`GL-UWx`,f=`_6PeF-i`,p=`_5wP4aR`,m=`S3MnZI`,h=`KHJ0ja`,g=`oGmcQH`,_={radioGroup:u,noWrap:d,horizontal:f,vertical:p,radioItem:m,checked:h,radioItemContent:g}})))()}function y({value:e,onChange:t,label:n,description:r,disabled:a,className:o,noWrap:s,orientation:l=`horizontal`,"aria-label":u,children:d}){let f=(0,x.useId)(),p=n?`${f}-label`:void 0,m=r?`${f}-description`:void 0,[h,g]=(0,x.useState)([]),v=(0,x.useCallback)(e=>t?.(e),[t]),y=(0,x.useCallback)(e=>(g(t=>t.includes(e)?t:[...t,e]),()=>{g(t=>t.filter(t=>t!==e))}),[]),b=(0,x.useMemo)(()=>({value:e,onChange:v,disabled:a,orientation:l,groupId:f,labelId:p,descriptionId:m,firstOptionId:h[0],registerOption:y}),[m,a,f,v,p,l,y,h,e]);return(0,S.jsxs)(`div`,{className:i(c.uiElement,a&&c.disabled,o),children:[n&&(0,S.jsx)(`div`,{id:p,className:c.uiLabel,children:n}),r&&(0,S.jsx)(`div`,{id:m,className:c.uiDescription,children:r}),(0,S.jsx)(C.Provider,{value:b,children:(0,S.jsx)(`div`,{role:`radiogroup`,"aria-labelledby":p,"aria-label":p?void 0:u,"aria-describedby":m,"aria-disabled":a||void 0,"data-disabled":a||void 0,className:i(c.uiInputControl,_.radioGroup,s&&_.noWrap,_[l]),children:d})})]})}function b({value:e,label:t,description:n,className:r}){let a=(0,x.useContext)(C),c=(0,x.useId)(),l=a?.registerOption;if((0,x.useLayoutEffect)(()=>{if(l)return l(c)},[l,c]),!a)return(0,S.jsxs)(`div`,{className:i(_.radioItem,r),children:[(0,S.jsx)(`p`,{className:`textNoWrap`,children:t}),n&&(0,S.jsx)(`div`,{className:`fontSizeSm content2`,children:n})]});let u=Object.is(a.value,e),d=a.disabled===!0,f=a.value===void 0&&a.firstOptionId===c,p=()=>{d||u||a.onChange?.(e)};return(0,S.jsx)(`button`,{id:`${a.groupId}-option-${c}`,type:`button`,role:`radio`,"aria-checked":u,disabled:d,tabIndex:u||f?0:-1,className:i(_.radioItem,u&&_.checked,r),"data-ui":`radio-option`,"data-action":`select-radio-option`,onClick:p,onKeyDown:e=>{if(d||o(e,p))return;let t=e.currentTarget,n=t.closest(`[role="radiogroup"]`),r=Array.from(n?.querySelectorAll(`[role="radio"]:not([disabled])`)??[]);if(!r.length)return;let i=r.indexOf(t);if(i===-1)return;let c=s({currentIndex:i,itemCount:r.length,key:e.key,orientation:a.orientation});c!==null&&(e.preventDefault(),r[c]?.focus(),r[c]?.click())},children:(0,S.jsxs)(`span`,{className:_.radioItemContent,children:[(0,S.jsx)(`span`,{className:`textNoWrap`,children:t}),n&&(0,S.jsx)(`span`,{className:`fontSizeSm`,children:n})]})})}var x,S,C;function w(){return(w=t((()=>{x=e(n(),1),a(),l(),v(),S=r(),C=(0,x.createContext)(null),y.Option=b,y.__docgenInfo={description:`Группа радиокнопок с общим состоянием выбранного значения. Обеспечивает единый API выбора и контекст для дочерних опций.`,methods:[{name:`Option`,docblock:null,modifiers:[`static`],params:[{name:`{ value, label, description, className }: OptionProps<T>`,optional:!1,type:{name:`OptionProps`,elements:[{name:`T`}],raw:`OptionProps<T>`,alias:`OptionProps`}}],returns:null}],displayName:`RadioGroup`,props:{value:{required:!1,tsType:{name:`T`},description:``},onChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: T) => void`,signature:{arguments:[{type:{name:`T`},name:`value`}],return:{name:`void`}}},description:``},label:{required:!1,tsType:{name:`string`},description:``},description:{required:!1,tsType:{name:`string`},description:``},disabled:{required:!1,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},noWrap:{required:!1,tsType:{name:`literal`,value:`true`},description:``},orientation:{required:!1,tsType:{name:`union`,raw:`"vertical" | "horizontal"`,elements:[{name:`literal`,value:`"vertical"`},{name:`literal`,value:`"horizontal"`}]},description:``,defaultValue:{value:`"horizontal"`,computed:!1}},"aria-label":{required:!1,tsType:{name:`string`},description:``},children:{required:!0,tsType:{name:`ReactReactNode`,raw:`React.ReactNode`},description:``}}},b.__docgenInfo={description:"Опция внутри `RadioGroup`, представляющая одно выбираемое значение. Отрисовывает подпись, описание и состояние выбора.",methods:[],displayName:`Option`,props:{value:{required:!0,tsType:{name:`T`},description:``},label:{required:!0,tsType:{name:`ReactNode`},description:``},description:{required:!1,tsType:{name:`ReactNode`},description:``},className:{required:!1,tsType:{name:`string`},description:``}}}})))()}export{w as n,y as t};
@@ -1,2 +0,0 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n}from"./iframe-BvendKJ_.js";import{a as r,i,o as a}from"./utils-tg3ibbzi.js";import{n as o,t as s}from"./ui.module-l7VCYIW-.js";import{i as c,n as l}from"./uiClasses-BblrV9p1.js";import{i as u,n as d,r as f,t as p}from"./NoData-D0rf5MW3.js";import{n as m,t as h}from"./OneStepScroller-srOmxRQp.js";function g(e){return e.find(e=>!e.disabled)?.id??null}function _(e,t){return t?e.find(e=>e.id===t&&!e.disabled)?.id??g(e):g(e)}function v(e){return e.filter(e=>!e.disabled)}function y({mountStrategy:e,isSelected:t,isVisited:n}){return e===`keep-mounted`||t||e===`lazy`&&n}function b(){return(b=e((()=>{})))()}function x({items:e,value:t,defaultValue:n,onValueChange:r,orientation:i=`horizontal`,activationMode:o=`automatic`,loop:s=!0}){let c=t!==void 0,l=(0,S.useMemo)(()=>v(e),[e]),u=l[0]?.id??null,[d,f]=(0,S.useState)(()=>_(e,n)),[p,m]=(0,S.useState)(()=>_(e,t??n)),h=_(e,t??n),[g,y]=(0,S.useState)(()=>h?new Set([h]):new Set),b=(0,S.useId)(),x=(0,S.useRef)({}),C=_(e,c?t:d),w=_(e,p)??C??u,T=(0,S.useMemo)(()=>{if(!C||g.has(C))return g;let e=new Set(g);return e.add(C),e},[C,g]),E=t=>{let n=_(e,t);n&&(y(e=>{if(e.has(n))return e;let t=new Set(e);return t.add(n),t}),c||f(n),r?.(n))},D=e=>{x.current[e]?.focus()},O=e=>{if(l.length<2)return;let t=Math.max(0,l.findIndex(e=>e.id===(w??C??u))),n=a({currentIndex:t,itemCount:l.length,key:e.key,orientation:i,wrap:s});if(n===null)return;e.preventDefault();let r=l[n]?.id;r&&(m(r),D(r),o===`automatic`&&E(r))},k=e=>{let t=e.relatedTarget;t instanceof Node&&e.currentTarget.contains(t)||m(C??u)},A=e=>`${b}-tab-${e}`,j=e=>`${b}-panel-${e}`;return{activationMode:o,orientation:i,selectedTabId:C,tabbableTabId:w,onTabListKeyDown:O,onTabListBlur:k,getTabElementId:A,getPanelElementId:j,getTabButtonProps:e=>{let t=e.id===C,n=e.id===w;return{ref:t=>{x.current[e.id]=t},type:`button`,role:`tab`,id:A(e.id),disabled:e.disabled,"aria-selected":t,"aria-controls":j(e.id),"aria-disabled":e.disabled||void 0,tabIndex:e.disabled?-1:n?0:-1,onFocus:()=>m(e.id),onClick:()=>E(e.id)}},isVisited:e=>T.has(e)}}var S;function C(){return(C=e((()=>{S=t(),i()})))()}var w,T,E,D,O,k,A,j,M,N,P,F,I,L,R,z,B;function V(){return(V=e((()=>{w=`pcMjuj`,T=`NLOw2z`,E=`Z6PwjQ`,D=`ZSAoAa`,O=`psYhsZ`,k=`mNDq9-`,A=`g156KO`,j=`C2mO1e`,M=`_28F3fs`,N=`UKZXTZ`,P=`jiTafe`,F=`nhD0k7`,I=`G8FICe`,L=`W50XHh`,R=`vnjXkU`,z=`Nzvfhw`,B={tabsContainer:w,clean:T,tabsWrapper:E,tabs:D,panels:O,horizontal:k,vertical:A,panelScrollable:j,tab:M,selected:N,panel:P,panelBody:F,layoutPanels:I,layoutPanel:L,layoutSection:R,layoutContent:z}})))()}function H({containerClassName:e,tabListClassName:t,panelsClassName:n,panelClassName:i,panelBodyClassName:a,loadingText:o}){return(0,U.jsxs)(`div`,{className:e,children:[(0,U.jsx)(`div`,{className:t,"aria-hidden":`true`,children:(0,U.jsx)(`button`,{type:`button`,disabled:!0,"data-disabled":``,className:r(B.tab,`skeletonLine`),children:`Загрузка...`})}),(0,U.jsx)(`div`,{className:n,"aria-busy":`true`,children:(0,U.jsx)(`div`,{className:i,children:(0,U.jsx)(`div`,{className:a,children:(0,U.jsx)(f,{text:o,className:`radiusSm`})})})})]})}var U;function W(){return(W=e((()=>{i(),u(),V(),U=n(),H.__docgenInfo={description:"Служебное loading-состояние для `TabsBox`.",methods:[],displayName:`TabsLoadingState`,props:{containerClassName:{required:!0,tsType:{name:`string`},description:``},tabListClassName:{required:!0,tsType:{name:`string`},description:``},panelsClassName:{required:!0,tsType:{name:`string`},description:``},panelClassName:{required:!0,tsType:{name:`string`},description:``},panelBodyClassName:{required:!0,tsType:{name:`string`},description:``},loadingText:{required:!1,tsType:{name:`string`},description:``}}}})))()}function G({containerClassName:e,panelsClassName:t,panelClassName:n,panelBodyClassName:r}){return(0,K.jsx)(`div`,{className:e,children:(0,K.jsx)(`div`,{className:t,children:(0,K.jsx)(`div`,{className:n,children:(0,K.jsx)(`div`,{className:r,children:(0,K.jsx)(p,{className:`radiusSm`})})})})})}var K;function q(){return(q=e((()=>{d(),K=n(),G.__docgenInfo={description:"Служебное empty-состояние для `TabsBox`.",methods:[],displayName:`TabsNoDataState`,props:{containerClassName:{required:!0,tsType:{name:`string`},description:``},panelsClassName:{required:!0,tsType:{name:`string`},description:``},panelClassName:{required:!0,tsType:{name:`string`},description:``},panelBodyClassName:{required:!0,tsType:{name:`string`},description:``}}}})))()}function J({tabId:e,isSelected:t,className:n,getTabElementId:r,getPanelElementId:i,children:a}){return(0,ee.jsx)(`div`,{role:`tabpanel`,id:i(e),"aria-labelledby":r(e),hidden:!t,tabIndex:t?0:-1,className:n,children:a})}var ee;function Y(){return(Y=e((()=>{ee=n(),J.__docgenInfo={description:``,methods:[],displayName:`TabsPanel`,props:{tabId:{required:!0,tsType:{name:`string`},description:``},isSelected:{required:!0,tsType:{name:`boolean`},description:``},className:{required:!1,tsType:{name:`string`},description:``},getTabElementId:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(tabId: string) => string`,signature:{arguments:[{type:{name:`string`},name:`tabId`}],return:{name:`string`}}},description:``},getPanelElementId:{required:!0,tsType:{name:`signature`,type:`function`,raw:`(tabId: string) => string`,signature:{arguments:[{type:{name:`string`},name:`tabId`}],return:{name:`string`}}},description:``},children:{required:!1,tsType:{name:`ReactNode`},description:``}}}})))()}function X({items:e,state:t,className:n,ariaLabel:i,ariaLabelledBy:a}){let o=(0,Z.jsx)(`div`,{"data-ui":`tabs-tablist`,className:n,role:`tablist`,"aria-orientation":t.orientation,"aria-label":a?void 0:i??`Вкладки`,"aria-labelledby":a,"aria-live":`off`,onKeyDown:t.onTabListKeyDown,onBlur:t.onTabListBlur,children:e.map(e=>(0,Z.jsx)(`button`,{...t.getTabButtonProps(e),"data-ui":`tabs-tab`,"data-action":`select-tab`,className:r(B.tab,`textWrap`,e.id===t.selectedTabId&&B.selected),children:e.title},e.id))});return t.orientation===`horizontal`?(0,Z.jsx)(h,{itemSelector:`[role='tab']`,children:o}):o}var Z;function Q(){return(Q=e((()=>{i(),m(),V(),Z=n(),X.__docgenInfo={description:``,methods:[],displayName:`TabsTabList`,props:{items:{required:!0,tsType:{name:`Array`,elements:[{name:`TabsDescriptor`}],raw:`TabsDescriptor[]`},description:``},state:{required:!0,tsType:{name:`TabsStateModel`},description:``},className:{required:!1,tsType:{name:`string`},description:``},ariaLabel:{required:!1,tsType:{name:`string`},description:``},ariaLabelledBy:{required:!1,tsType:{name:`string`},description:``}}}})))()}function te({items:e,value:t,defaultValue:n,onValueChange:i,className:a,isLoading:s,loadingText:c,orientation:u=`horizontal`,activationMode:d=`automatic`,mountStrategy:f=`unmount`,loop:p=!0,tone:m=`primary`,clean:h=!1,"aria-label":g,"aria-labelledby":_}){let v=x({items:e,value:t,defaultValue:n,onValueChange:i,orientation:u,activationMode:d,loop:p}),b=r(B.tabsContainer,h?B.clean:o.uiFilledPanel,B[u],l(m),a),S=B.tabs,C=r(B.panels,B.panelScrollable,`scrollable overscroll`),w=B.panel,T=B.panelBody;return s?(0,$.jsx)(H,{containerClassName:b,tabListClassName:S,panelsClassName:C,panelClassName:w,panelBodyClassName:T,loadingText:c}):e.length?(0,$.jsxs)(`div`,{className:b,children:[(0,$.jsx)(`div`,{className:B.tabsWrapper,children:(0,$.jsx)(X,{items:e,state:v,className:S,ariaLabel:g,ariaLabelledBy:_})}),(0,$.jsx)(`div`,{className:C,children:e.map(e=>{let t=e.id===v.selectedTabId,n=y({mountStrategy:f,isSelected:t,isVisited:v.isVisited(e.id)});return(0,$.jsx)(J,{tabId:e.id,isSelected:t,className:w,getTabElementId:v.getTabElementId,getPanelElementId:v.getPanelElementId,children:n?(0,$.jsx)(`div`,{className:T,children:e.content}):null},e.id)})})]}):(0,$.jsx)(G,{containerClassName:b,panelsClassName:C,panelClassName:w,panelBodyClassName:T})}var $;function ne(){return(ne=e((()=>{i(),s(),c(),C(),V(),W(),q(),Y(),Q(),$=n(),te.__docgenInfo={description:`Простой items-based tabs-компонент.
2
- Сам управляет областью панели и её прокруткой.`,methods:[],displayName:`TabsBox`,props:{value:{required:!1,tsType:{name:`string`},description:``},defaultValue:{required:!1,tsType:{name:`string`},description:``},onValueChange:{required:!1,tsType:{name:`signature`,type:`function`,raw:`(value: string) => void`,signature:{arguments:[{type:{name:`string`},name:`value`}],return:{name:`void`}}},description:``},orientation:{required:!1,tsType:{name:`union`,raw:`"horizontal" | "vertical"`,elements:[{name:`literal`,value:`"horizontal"`},{name:`literal`,value:`"vertical"`}]},description:``,defaultValue:{value:`"horizontal"`,computed:!1}},activationMode:{required:!1,tsType:{name:`union`,raw:`"automatic" | "manual"`,elements:[{name:`literal`,value:`"automatic"`},{name:`literal`,value:`"manual"`}]},description:``,defaultValue:{value:`"automatic"`,computed:!1}},mountStrategy:{required:!1,tsType:{name:`union`,raw:`"unmount" | "lazy" | "keep-mounted"`,elements:[{name:`literal`,value:`"unmount"`},{name:`literal`,value:`"lazy"`},{name:`literal`,value:`"keep-mounted"`}]},description:``,defaultValue:{value:`"unmount"`,computed:!1}},loop:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`true`,computed:!1}},tone:{required:!1,tsType:{name:`union`,raw:`"primary" | "secondary" | "tertiary"`,elements:[{name:`literal`,value:`"primary"`},{name:`literal`,value:`"secondary"`},{name:`literal`,value:`"tertiary"`}]},description:``,defaultValue:{value:`"primary"`,computed:!1}},clean:{required:!1,tsType:{name:`boolean`},description:``,defaultValue:{value:`false`,computed:!1}},className:{required:!1,tsType:{name:`string`},description:``},"aria-label":{required:!1,tsType:{name:`string`},description:``},"aria-labelledby":{required:!1,tsType:{name:`string`},description:``},items:{required:!0,tsType:{name:`Array`,elements:[{name:`TabsBoxItem`}],raw:`TabsBoxItem[]`},description:``},isLoading:{required:!1,tsType:{name:`boolean`},description:``},loadingText:{required:!1,tsType:{name:`string`},description:``}}}})))()}export{J as a,V as c,b as d,y as f,Q as i,C as l,ne as n,Y as o,X as r,B as s,te as t,x as u};
@@ -1,66 +0,0 @@
1
- import{n as e}from"./rolldown-runtime-DkW27tQK.js";import{t}from"./react-BZJXY1be.js";import{n}from"./iframe-BvendKJ_.js";import{i as r,r as i}from"./isRecord-DXDTW-jA-CMenzszF.js";import{a,i as o}from"./utils-tg3ibbzi.js";import{t as s}from"./validators-D82aYLRK.js";function c(e){return{textAlign:e.alignment||void 0,marginInlineStart:e.indent?`min(${e.indent} * var(--space-lg), 25%)`:void 0}}function ee(e){if(typeof e!=`string`||e.length===0||/[\s\u0000-\u001f\u007f]/u.test(e)||!URL.canParse(e))return null;let t=new URL(e);return t.protocol!==`http:`&&t.protocol!==`https:`||!t.hostname||t.username||t.password?null:t.href}function l(e){if(!r(e)||!i(e))return null;let t=Reflect.ownKeys(e);if(t.length>x.length)return null;for(let n of t){if(typeof n!=`string`)return null;let t=Object.getOwnPropertyDescriptor(e,n);if(!t||!t.enumerable||!(`value`in t))return null}return e}function u(e,t){return Object.keys(e).every(e=>t.includes(e))}function te(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>=0&&e<=v&&(e&~v)===0}function d(e,t){return typeof e==`string`&&(t.textUnits+=e.length,t.textUnits<=le)}function f(e){return typeof e==`number`&&Number.isSafeInteger(e)&&e>0}function p(e){let t=e.direction,n=e.format,r=e.indent;return t!==null&&t!==`ltr`&&t!==`rtl`||n!==``&&n!==`left`&&n!==`right`&&n!==`center`&&n!==`justify`&&n!==`start`&&n!==`end`||typeof r!=`number`||!Number.isSafeInteger(r)||r<0||r>_||e.textFormat!==void 0&&!te(e.textFormat)||e.textStyle!==void 0&&e.textStyle!==``?null:{direction:t,alignment:n,indent:r}}function m(e){return e.type===`text`||e.type===`linebreak`||e.type===`link`}function ne(e){return e.type===`text`||e.type===`linebreak`}function re(e){return e.type===`paragraph`||e.type===`quote`||e.type===`heading`||e.type===`list`}function ie(e){return e.type===`listitem`}function ae(e){return m(e)||e.type===`list`}function h(e,t,n,r){if(!Array.isArray(e)||Object.getPrototypeOf(e)!==Array.prototype||e.length>g||Reflect.ownKeys(e).length!==e.length+1)return null;let i=[];for(let a=0;a<e.length;a++){let o=Object.getOwnPropertyDescriptor(e,a);if(!o||!(`value`in o))return null;let s=oe(o.value,t,n);if(!s||!r(s))return null;i.push(s)}return i}function oe(e,t,n){if(++t.nodes>g||n>ce)return null;let r=l(e);if(!r||r.version!==1)return null;if(r.type===`text`)return!u(r,[`type`,`version`,`detail`,`format`,`mode`,`style`,`text`])||r.detail!==0||r.mode!==`normal`||r.style!==``||!te(r.format)||!d(r.text,t)?null:{type:`text`,text:r.text,format:r.format};if(r.type===`linebreak`)return u(r,[`type`,`version`])?{type:`linebreak`}:null;let i=p(r);if(!i)return null;switch(r.type){case`paragraph`:case`quote`:{if(!u(r,y))return null;let e=h(r.children,t,n+1,m);return e?{...i,type:r.type,children:e}:null}case`heading`:{if(!u(r,[...y,`tag`]))return null;let e=r.tag;if(e!==`h1`&&e!==`h2`&&e!==`h3`&&e!==`h4`&&e!==`h5`&&e!==`h6`)return null;let a=h(r.children,t,n+1,m);return a?{...i,type:`heading`,tag:e,children:a}:null}case`list`:{if(!u(r,[...y,`listType`,`tag`,`start`])||!f(r.start))return null;let e=r.listType;if(!(e===`bullet`&&r.tag===`ul`||e===`number`&&r.tag===`ol`))return null;let a=h(r.children,t,n+1,ie);return a?{...i,type:`list`,listType:e,start:r.start,children:a}:null}case`listitem`:{if(!u(r,[...y,`value`,`checked`])||!f(r.value)||r.checked!==void 0)return null;let e=h(r.children,t,n+1,ae);return e?{...i,type:`listitem`,value:r.value,children:e}:null}case`link`:case`accessible-link`:{if(!u(r,r.type===`link`?b:x)||!d(r.url,t))return null;let e=ee(r.url);if(!e||r.target!==null&&r.target!==void 0&&r.target!==`_self`&&r.target!==`_blank`||r.rel!==void 0&&r.rel!==null&&!d(r.rel,t)||r.title!==void 0&&r.title!==null&&!d(r.title,t)||r.type===`accessible-link`&&(r.qrCode!==void 0&&r.qrCode!==!1||r.add!==void 0&&r.add!==null||r.text!==void 0&&r.text!==null&&!d(r.text,t)||r.ariaLabel!==void 0&&r.ariaLabel!==null&&!d(r.ariaLabel,t)))return null;let a=h(r.children,t,n+1,ne);return a?{...i,type:`link`,url:e,target:r.target===`_blank`?`_blank`:`_self`,ariaLabel:typeof r.ariaLabel==`string`?r.ariaLabel:null,title:typeof r.title==`string`?r.title:null,children:a}:null}default:return null}}function se(e){let t=l(e);if(!t||!u(t,[`format`,`version`,`editorState`])||t.format!==`lexical`||t.version!==1)return S;let n=l(t.editorState);if(!n||!u(n,[`root`]))return S;let r=l(n.root);if(!r||!u(r,y)||r.type!==`root`||r.version!==1)return S;let i=p(r);if(!i)return S;let a=h(r.children,{nodes:1,textUnits:0},1,re);return a?{status:`valid`,element:i,children:a}:S}var g,ce,le,_,v,y,b,x,S;function C(){return(C=e((()=>{s(),g=1e4,ce=32,le=1e6,_=32,v=255,y=[`type`,`version`,`children`,`direction`,`format`,`indent`,`textFormat`,`textStyle`],b=[...y,`url`,`target`,`rel`,`title`],x=[...b,`ariaLabel`,`qrCode`,`add`,`text`],S={status:`invalid`}})))()}var ue,w;function T(){return(T=e((()=>{ue=`IFCV0m`,w={viewer:ue}})))()}function de({node:e}){let t=e.text;return e.format&1&&(t=(0,E.jsx)(`strong`,{children:t})),e.format&2&&(t=(0,E.jsx)(`em`,{children:t})),e.format&8&&(t=(0,E.jsx)(`u`,{children:t})),e.format&4&&(t=(0,E.jsx)(`s`,{children:t})),e.format&16&&(t=(0,E.jsx)(`code`,{children:t})),e.format&128&&(t=(0,E.jsx)(`mark`,{children:t})),e.format&32&&(t=(0,E.jsx)(`sub`,{children:t})),e.format&64&&(t=(0,E.jsx)(`sup`,{children:t})),t}var E;function D(){return(D=e((()=>{E=n()})))()}function O({node:e}){if(e.type===`text`)return(0,k.jsx)(de,{node:e});if(e.type===`linebreak`)return(0,k.jsx)(`br`,{});let t=e.children.map((e,t)=>(0,k.jsx)(O,{node:e},t)),n={dir:e.direction??void 0,style:c(e)};switch(e.type){case`paragraph`:return(0,k.jsx)(`p`,{...n,children:t.length?t:(0,k.jsx)(`br`,{})});case`quote`:return(0,k.jsx)(`blockquote`,{...n,children:t});case`heading`:{let r=e.tag;return(0,k.jsx)(r,{...n,children:t})}case`link`:return(0,k.jsx)(`a`,{...n,href:e.url,target:e.target,rel:e.target===`_blank`?`noopener noreferrer`:void 0,"aria-label":e.ariaLabel??void 0,title:e.title??void 0,children:t});case`list`:return e.listType===`number`?(0,k.jsx)(`ol`,{...n,start:e.start,children:t}):(0,k.jsx)(`ul`,{...n,children:t});case`listitem`:return(0,k.jsx)(`li`,{...n,value:e.value,"data-nested-list":e.children.length===1&&e.children[0]?.type===`list`?`true`:void 0,children:t})}}var k;function A(){return(A=e((()=>{D(),k=n(),O.__docgenInfo={description:`Все tags и DOM props заданы renderer: исходные attributes не распространяются в JSX.`,methods:[],displayName:`TextEditorViewerNode`}})))()}function j({raw:e,className:t,fallback:n=`Содержимое недоступно для отображения.`}){let r=(0,M.useMemo)(()=>se(e),[e]);return r.status===`invalid`?(0,N.jsx)(`div`,{className:a(w.viewer,t),"data-text-editor-viewer":`unsupported`,children:n}):(0,N.jsx)(`div`,{className:a(w.viewer,t),"data-text-editor-viewer":`ready`,dir:r.element.direction??void 0,style:c(r.element),children:r.children.map((e,t)=>(0,N.jsx)(O,{node:e},t))})}var M,N;function P(){return(P=e((()=>{M=t(),o(),C(),T(),A(),N=n(),j.__docgenInfo={description:`Читает immutable raw без editor instance; SSR и браузер используют одну безопасную проекцию.`,methods:[],displayName:`TextEditorLexicalViewer`,props:{fallback:{defaultValue:{value:`"Содержимое недоступно для отображения."`,computed:!1},required:!1}}}})))()}var F,I;function L(){return(L=e((()=>{F=`-rhzJm`,I={narrow:F}})))()}function R(e,t=0){return{type:`text`,version:1,detail:0,format:t,mode:`normal`,style:``,text:e}}function z(e){return{format:`lexical`,version:1,editorState:{root:{...B,type:`root`,children:e}}}}var B,V,H,U,W,G,K;function fe(){return(fe=e((()=>{B={direction:null,format:``,indent:0,version:1},V=z([{...B,type:`heading`,tag:`h2`,children:[R(`Сохранённый документ`)]},{...B,type:`paragraph`,children:[R(`Обычный текст, `),R(`жирный`,1),R(`, `),R(`курсив`,2),R(`, `),R(`подчёркнутый`,8),R(` и `),R(`зачёркнутый`,4),R(`.`),{type:`linebreak`,version:1},R(`Код: `),R(`const answer = 42`,16),R(`. `),R(`Важная мысль выделена`,128),R(`. Индексы: H`),R(`2`,32),R(`O и x`),R(`2`,64),R(`.`),{type:`linebreak`,version:1},R(`Сочетание жирного, курсива и подчёркивания`,11)]},{...B,type:`quote`,children:[R(`Это просмотр сохранённого документа: ввод, курсор редактора и панель инструментов отсутствуют.`)]},{...B,type:`paragraph`,format:`right`,children:[R(`Выравнивание берётся только из поддерживаемого профиля.`)]}]),H=z([{...B,type:`heading`,tag:`h2`,children:[R(`Вложенность и нумерация`)]},{...B,type:`list`,listType:`number`,tag:`ol`,start:4,children:[{...B,type:`listitem`,value:4,children:[R(`Список начинается с четвёртого пункта.`)]},{...B,type:`listitem`,value:5,children:[{...B,type:`list`,listType:`bullet`,tag:`ul`,start:1,children:[{...B,type:`listitem`,value:1,children:[R(`Вложенный маркированный пункт.`)]},{...B,type:`listitem`,value:2,children:[{...B,type:`list`,listType:`number`,tag:`ol`,start:7,children:[{...B,type:`listitem`,value:7,children:[R(`Третий уровень: номер семь.`)]},{...B,type:`listitem`,value:9,children:[R(`Явный value сохраняет номер девять.`)]}]}]}]}]},{...B,type:`listitem`,value:8,children:[R(`Явный value возвращает внешний список к номеру восемь.`)]}]}]),U=z([{...B,type:`paragraph`,children:[R(`Абсолютная HTTPS-ссылка: `),{...B,type:`accessible-link`,url:`https://example.com/document`,target:`_blank`,rel:null,title:null,ariaLabel:`Пример документа — новая вкладка`,qrCode:!1,add:null,text:null,children:[R(`Пример документа`,1)]},R(`. При переходе откроется новая вкладка с защитным rel.`),{type:`linebreak`,version:1},R(`HTTP-ссылка в текущей вкладке: `),{...B,type:`accessible-link`,url:`http://example.com/reference`,target:`_self`,rel:null,title:null,ariaLabel:null,qrCode:!1,add:null,text:null,children:[R(`Справочный пример`)]}]}]),W=z([{...B,type:`heading`,tag:`h3`,children:[R(`Длинный текст в узкой области`)]},{...B,type:`paragraph`,children:[R(`Обычный текст переносится внутри доступной ширины без изменения сохранённых данных. `.repeat(6))]},{...B,type:`paragraph`,children:[R(`ОченьДлиннаяПоследовательностьБезПробелов`.repeat(8))]},{...B,type:`paragraph`,children:[R(`long_identifier_without_whitespace_`.repeat(6),16)]}]),G=z([{...B,type:`paragraph`,children:[R(`Этот фрагмент не должен появляться частично.`)]},{type:`unsupported-node`,version:1}]),K=z([])})))()}var q,pe,J,Y,X,Z,Q,$,me;function he(){return(he=e((()=>{P(),L(),fe(),q=n(),pe={title:`Text/TextEditorLexicalViewer`,component:j,args:{raw:V},parameters:{atomicCanvas:!0,layout:`padded`,controls:{disable:!0},docs:{description:{component:`Просмотр immutable TextEditorLexicalRaw без создания редактора и без HTML injection. Сервер и браузер строят одно семантическое дерево. Неизвестный или небезопасный документ целиком заменяется fallback. Поддерживаемый профиль и ограничения находятся в src/text-editor/README.md. Компонент не проверяет права доступа и не заменяет валидацию записи приложения.`}}},argTypes:{raw:{description:`Сериализованный immutable snapshot. Для обновления передайте новый объект.`,control:!1},className:{description:`Класс корневого элемента, например для ограничения ширины области чтения.`,control:!1},fallback:{description:`Содержимое вместо всего неподдерживаемого документа; не используется для корректного пустого документа.`,control:!1}}},J={name:`Текст и все inline-форматы`},Y={name:`Вложенные списки и нумерация`,args:{raw:H},parameters:{docs:{description:{story:`Внешний список начинается с 4, вложенный — с 7. Явные value сохраняют номера 8 и 9; обёртки вложенных списков не создают дополнительных маркеров.`}}}},X={name:`HTTP(S) accessible-link`,args:{raw:U},parameters:{docs:{description:{story:`Две ссылки из сериализованного accessible-link. Рендер не загружает ресурсы и не выполняет переход; переход возможен только при активации ссылки пользователем. Для новой вкладки viewer выставляет noopener noreferrer.`}}}},Z={name:`Узкая область и длинные строки`,args:{raw:W,className:I.narrow},parameters:{docs:{description:{story:`Ширина ограничена областью consumer. Проверьте обычные абзацы, непрерывное слово и inline code на узком viewport в светлой и тёмной темах.`}}}},Q={name:`Явный fallback неизвестного документа`,args:{raw:G,fallback:(0,q.jsx)(`p`,{role:`status`,children:`Документ содержит неподдерживаемый узел. Частичное содержимое не отображается.`})},parameters:{docs:{description:{story:`Корректный первый абзац намеренно соседствует с неизвестным узлом: вместо частичного документа показывается только заданный fallback.`}}}},$={name:`Корректный пустой документ`,args:{raw:K,fallback:(0,q.jsx)(`p`,{role:`status`,children:`Этот fallback не должен появиться для пустого документа.`})},parameters:{docs:{description:{story:`Пустой root допустим: viewer не создаёт текст-заглушку, не открывает editor и не показывает fallback.`}}}},J.parameters={...J.parameters,docs:{...J.parameters?.docs,source:{originalSource:`{
2
- name: "Текст и все inline-форматы"
3
- }`,...J.parameters?.docs?.source}}},Y.parameters={...Y.parameters,docs:{...Y.parameters?.docs,source:{originalSource:`{
4
- name: "Вложенные списки и нумерация",
5
- args: {
6
- raw: nestedListsViewerStoryRaw
7
- },
8
- parameters: {
9
- docs: {
10
- description: {
11
- story: "Внешний список начинается с 4, вложенный — с 7. Явные value сохраняют номера 8 и 9; обёртки вложенных списков не создают дополнительных маркеров."
12
- }
13
- }
14
- }
15
- }`,...Y.parameters?.docs?.source}}},X.parameters={...X.parameters,docs:{...X.parameters?.docs,source:{originalSource:`{
16
- name: "HTTP(S) accessible-link",
17
- args: {
18
- raw: accessibleLinksViewerStoryRaw
19
- },
20
- parameters: {
21
- docs: {
22
- description: {
23
- story: "Две ссылки из сериализованного accessible-link. Рендер не загружает ресурсы и не выполняет переход; переход возможен только при активации ссылки пользователем. Для новой вкладки viewer выставляет noopener noreferrer."
24
- }
25
- }
26
- }
27
- }`,...X.parameters?.docs?.source}}},Z.parameters={...Z.parameters,docs:{...Z.parameters?.docs,source:{originalSource:`{
28
- name: "Узкая область и длинные строки",
29
- args: {
30
- raw: narrowContentViewerStoryRaw,
31
- className: styles.narrow
32
- },
33
- parameters: {
34
- docs: {
35
- description: {
36
- story: "Ширина ограничена областью consumer. Проверьте обычные абзацы, непрерывное слово и inline code на узком viewport в светлой и тёмной темах."
37
- }
38
- }
39
- }
40
- }`,...Z.parameters?.docs?.source}}},Q.parameters={...Q.parameters,docs:{...Q.parameters?.docs,source:{originalSource:`{
41
- name: "Явный fallback неизвестного документа",
42
- args: {
43
- raw: unsupportedViewerStoryRaw,
44
- fallback: <p role="status">Документ содержит неподдерживаемый узел. Частичное содержимое не отображается.</p>
45
- },
46
- parameters: {
47
- docs: {
48
- description: {
49
- story: "Корректный первый абзац намеренно соседствует с неизвестным узлом: вместо частичного документа показывается только заданный fallback."
50
- }
51
- }
52
- }
53
- }`,...Q.parameters?.docs?.source}}},$.parameters={...$.parameters,docs:{...$.parameters?.docs,source:{originalSource:`{
54
- name: "Корректный пустой документ",
55
- args: {
56
- raw: emptyViewerStoryRaw,
57
- fallback: <p role="status">Этот fallback не должен появиться для пустого документа.</p>
58
- },
59
- parameters: {
60
- docs: {
61
- description: {
62
- story: "Пустой root допустим: viewer не создаёт текст-заглушку, не открывает editor и не показывает fallback."
63
- }
64
- }
65
- }
66
- }`,...$.parameters?.docs?.source}}},me=[`RichText`,`NestedLists`,`AccessibleLinks`,`NarrowContent`,`UnsupportedDocument`,`EmptyDocument`]})))()}he();export{X as AccessibleLinks,$ as EmptyDocument,Z as NarrowContent,Y as NestedLists,J as RichText,Q as UnsupportedDocument,me as __namedExportsOrder,pe as default};