@intlayer/design-system 7.5.13 → 7.5.14

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 (520) hide show
  1. package/dist/esm/_virtual/rolldown_runtime.mjs +2 -2
  2. package/dist/esm/components/Accordion/Accordion.mjs.map +1 -1
  3. package/dist/esm/components/Avatar/index.mjs.map +1 -1
  4. package/dist/esm/components/Badge/index.mjs.map +1 -1
  5. package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
  6. package/dist/esm/components/Button/Button.mjs.map +1 -1
  7. package/dist/esm/components/Carousel/index.mjs.map +1 -1
  8. package/dist/esm/components/ClickOutsideDiv/index.mjs.map +1 -1
  9. package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs.map +1 -1
  10. package/dist/esm/components/Command/index.mjs.map +1 -1
  11. package/dist/esm/components/Container/index.mjs.map +1 -1
  12. package/dist/esm/components/ContentEditor/ContentEditor.mjs.map +1 -1
  13. package/dist/esm/components/ContentEditor/ContentEditorInput.mjs.map +1 -1
  14. package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs.map +1 -1
  15. package/dist/esm/components/ContentSelector/ContentSelector.mjs.map +1 -1
  16. package/dist/esm/components/CopyButton/index.mjs.map +1 -1
  17. package/dist/esm/components/CopyToClipboard/index.mjs.map +1 -1
  18. package/dist/esm/components/DictionaryEditor/DictionaryEditor.mjs.map +1 -1
  19. package/dist/esm/components/DictionaryEditor/ItemLayout.mjs.map +1 -1
  20. package/dist/esm/components/DictionaryEditor/NodeWrapper/ArrayWrapper.mjs.map +1 -1
  21. package/dist/esm/components/DictionaryEditor/NodeWrapper/ConditionWrapper.mjs.map +1 -1
  22. package/dist/esm/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.mjs.map +1 -1
  23. package/dist/esm/components/DictionaryEditor/NodeWrapper/FileWrapper.mjs.map +1 -1
  24. package/dist/esm/components/DictionaryEditor/NodeWrapper/InsertionWrapper.mjs.map +1 -1
  25. package/dist/esm/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.mjs.map +1 -1
  26. package/dist/esm/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.mjs.map +1 -1
  27. package/dist/esm/components/DictionaryEditor/NodeWrapper/StringWrapper.mjs.map +1 -1
  28. package/dist/esm/components/DictionaryEditor/NodeWrapper/TranslationWrapper.mjs.map +1 -1
  29. package/dist/esm/components/DictionaryEditor/NodeWrapper/index.mjs.map +1 -1
  30. package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs.map +1 -1
  31. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
  32. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs.map +1 -1
  33. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
  34. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
  35. package/dist/esm/components/DictionaryFieldEditor/EnumKeyInput.mjs.map +1 -1
  36. package/dist/esm/components/DictionaryFieldEditor/JSONEditor.mjs.map +1 -1
  37. package/dist/esm/components/DictionaryFieldEditor/KeyPathBreadcrumb.mjs.map +1 -1
  38. package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs.map +1 -1
  39. package/dist/esm/components/DictionaryFieldEditor/NodeTypeSelector.mjs.map +1 -1
  40. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
  41. package/dist/esm/components/DictionaryFieldEditor/StructureEditor.mjs.map +1 -1
  42. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
  43. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs.map +1 -1
  44. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.mjs.map +1 -1
  45. package/dist/esm/components/DropDown/index.mjs.map +1 -1
  46. package/dist/esm/components/EditableField/EditableFieldInput.mjs.map +1 -1
  47. package/dist/esm/components/EditableField/EditableFieldLayout.mjs.map +1 -1
  48. package/dist/esm/components/EditableField/EditableFieldTextArea.mjs.map +1 -1
  49. package/dist/esm/components/ExpandCollapse/ExpandCollapse.mjs.map +1 -1
  50. package/dist/esm/components/Flags/Flag.mjs.map +1 -1
  51. package/dist/esm/components/Flags/flags.mjs +2 -2
  52. package/dist/esm/components/Footer/index.mjs.map +1 -1
  53. package/dist/esm/components/Form/FormControl.mjs.map +1 -1
  54. package/dist/esm/components/Form/FormDescription.mjs.map +1 -1
  55. package/dist/esm/components/Form/FormItem.mjs.map +1 -1
  56. package/dist/esm/components/Form/FormLabel.mjs.map +1 -1
  57. package/dist/esm/components/Form/FormMessage.mjs.map +1 -1
  58. package/dist/esm/components/Form/elements/AutoSizeTextAreaElement.mjs.map +1 -1
  59. package/dist/esm/components/Form/elements/CheckboxElement.mjs.map +1 -1
  60. package/dist/esm/components/Form/elements/FormElementWrapper.mjs.map +1 -1
  61. package/dist/esm/components/Form/elements/InputElement.mjs.map +1 -1
  62. package/dist/esm/components/Form/elements/InputPasswordElement.mjs.map +1 -1
  63. package/dist/esm/components/Form/elements/SearchInputElement.mjs.map +1 -1
  64. package/dist/esm/components/Form/elements/TextAreaElement.mjs.map +1 -1
  65. package/dist/esm/components/Form/layout/FormItemLayout.mjs.map +1 -1
  66. package/dist/esm/components/Form/layout/FormLabelLayout.mjs.map +1 -1
  67. package/dist/esm/components/Form/layout/RequiredStar.mjs.map +1 -1
  68. package/dist/esm/components/Headers/index.mjs.map +1 -1
  69. package/dist/esm/components/HeightResizer/index.mjs.map +1 -1
  70. package/dist/esm/components/HideShow/index.mjs.map +1 -1
  71. package/dist/esm/components/IDE/Code.mjs.map +1 -1
  72. package/dist/esm/components/IDE/CodeBlockClient.mjs.map +1 -1
  73. package/dist/esm/components/IDE/CodeBlockServer.mjs.map +1 -1
  74. package/dist/esm/components/IDE/CodeBlockShiki.mjs.map +1 -1
  75. package/dist/esm/components/IDE/CodeConditionalRenderer.mjs.map +1 -1
  76. package/dist/esm/components/IDE/CodeContext.mjs.map +1 -1
  77. package/dist/esm/components/IDE/CodeFormatSelector.mjs.map +1 -1
  78. package/dist/esm/components/IDE/ContentDeclarationFormatSelector.mjs.map +1 -1
  79. package/dist/esm/components/IDE/CopyCode.mjs.map +1 -1
  80. package/dist/esm/components/IDE/FileList.mjs.map +1 -1
  81. package/dist/esm/components/IDE/FileTree.mjs.map +1 -1
  82. package/dist/esm/components/IDE/IDE.mjs.map +1 -1
  83. package/dist/esm/components/IDE/MarkDownRender.mjs.map +1 -1
  84. package/dist/esm/components/IDE/MonacoCode.mjs.map +1 -1
  85. package/dist/esm/components/IDE/PackageManagerSelector.mjs.map +1 -1
  86. package/dist/esm/components/IDE/createFileTree.mjs.map +1 -1
  87. package/dist/esm/components/InformationTag/index.mjs.map +1 -1
  88. package/dist/esm/components/Input/Checkbox.mjs.map +1 -1
  89. package/dist/esm/components/Input/Input.mjs.map +1 -1
  90. package/dist/esm/components/Input/InputPassword.mjs.map +1 -1
  91. package/dist/esm/components/Input/OTPInput.mjs.map +1 -1
  92. package/dist/esm/components/KeyboardScreenAdapter/index.mjs.map +1 -1
  93. package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs.map +1 -1
  94. package/dist/esm/components/Label/index.mjs.map +1 -1
  95. package/dist/esm/components/LanguageBackground/index.mjs +2 -1
  96. package/dist/esm/components/LanguageBackground/index.mjs.map +1 -1
  97. package/dist/esm/components/Link/Link.mjs.map +1 -1
  98. package/dist/esm/components/Loader/index.mjs.map +1 -1
  99. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs.map +1 -1
  100. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.mjs.map +1 -1
  101. package/dist/esm/components/LocaleSwitcherDropDown/LocaleSwitcher.mjs.map +1 -1
  102. package/dist/esm/components/Logo/Logo.mjs.map +1 -1
  103. package/dist/esm/components/Logo/LogoTextOnly.mjs.map +1 -1
  104. package/dist/esm/components/Logo/LogoWithText.mjs.map +1 -1
  105. package/dist/esm/components/Logo/LogoWithTextBelow.mjs.map +1 -1
  106. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
  107. package/dist/esm/components/MarkDownRender/processor.mjs.map +1 -1
  108. package/dist/esm/components/MaxHeightSmoother/index.mjs.map +1 -1
  109. package/dist/esm/components/Modal/Modal.mjs.map +1 -1
  110. package/dist/esm/components/Navbar/MobileNavbar.mjs.map +1 -1
  111. package/dist/esm/components/Navbar/useNavigation.mjs.map +1 -1
  112. package/dist/esm/components/Pagination/NumberItemsSelector.mjs.map +1 -1
  113. package/dist/esm/components/Pagination/Pagination.mjs.map +1 -1
  114. package/dist/esm/components/Pagination/ShowingResultsNumberItems.mjs.map +1 -1
  115. package/dist/esm/components/Pattern/DotPattern.mjs.map +1 -1
  116. package/dist/esm/components/Pattern/GridPattern.mjs.map +1 -1
  117. package/dist/esm/components/Pattern/SpotLight.mjs.map +1 -1
  118. package/dist/esm/components/Popover/dynamic.mjs.map +1 -1
  119. package/dist/esm/components/Popover/static.mjs.map +1 -1
  120. package/dist/esm/components/PressableSpan/PressableSpan.mjs.map +1 -1
  121. package/dist/esm/components/RightDrawer/RightDrawer.mjs.map +1 -1
  122. package/dist/esm/components/Select/Multiselect.mjs.map +1 -1
  123. package/dist/esm/components/Select/Select.mjs.map +1 -1
  124. package/dist/esm/components/SocialNetworks/DiscordLogo.mjs.map +1 -1
  125. package/dist/esm/components/SocialNetworks/FacebookLogo.mjs.map +1 -1
  126. package/dist/esm/components/SocialNetworks/InstagramLogo.mjs.map +1 -1
  127. package/dist/esm/components/SocialNetworks/LinkedInLogo.mjs.map +1 -1
  128. package/dist/esm/components/SocialNetworks/ProductHuntLogo.mjs.map +1 -1
  129. package/dist/esm/components/SocialNetworks/TiktokLogo.mjs.map +1 -1
  130. package/dist/esm/components/SocialNetworks/XLogo.mjs.map +1 -1
  131. package/dist/esm/components/SocialNetworks/YoutubeLogo.mjs.map +1 -1
  132. package/dist/esm/components/SocialNetworks/index.mjs.map +1 -1
  133. package/dist/esm/components/SwitchSelector/index.mjs.map +1 -1
  134. package/dist/esm/components/Tab/Tab.mjs.map +1 -1
  135. package/dist/esm/components/Tab/TabContext.mjs.map +1 -1
  136. package/dist/esm/components/Table/Table.mjs.map +1 -1
  137. package/dist/esm/components/Tag/index.mjs.map +1 -1
  138. package/dist/esm/components/Terminal/Terminal.mjs.map +1 -1
  139. package/dist/esm/components/TextArea/AutoSizeTextArea.mjs.map +1 -1
  140. package/dist/esm/components/TextArea/AutocompleteTextArea.mjs.map +1 -1
  141. package/dist/esm/components/TextArea/TextArea.mjs.map +1 -1
  142. package/dist/esm/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs.map +1 -1
  143. package/dist/esm/components/ThemeSwitcherDropDown/MobileThemeSwitcher.mjs.map +1 -1
  144. package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
  145. package/dist/esm/components/Toaster/useToast.mjs.map +1 -1
  146. package/dist/esm/components/WithResizer/index.mjs.map +1 -1
  147. package/dist/esm/dist/esm/components/Container/index.mjs +133 -0
  148. package/dist/esm/dist/esm/components/Container/index.mjs.map +1 -0
  149. package/dist/esm/dist/esm/components/Flags/Flag.mjs +330 -0
  150. package/dist/esm/dist/esm/components/Flags/Flag.mjs.map +1 -0
  151. package/dist/esm/dist/esm/components/Flags/ae.mjs +37 -0
  152. package/dist/esm/dist/esm/components/Flags/ae.mjs.map +1 -0
  153. package/dist/esm/dist/esm/components/Flags/af.mjs +97 -0
  154. package/dist/esm/dist/esm/components/Flags/af.mjs.map +1 -0
  155. package/dist/esm/dist/esm/components/Flags/al.mjs +38 -0
  156. package/dist/esm/dist/esm/components/Flags/al.mjs.map +1 -0
  157. package/dist/esm/dist/esm/components/Flags/am.mjs +34 -0
  158. package/dist/esm/dist/esm/components/Flags/am.mjs.map +1 -0
  159. package/dist/esm/dist/esm/components/Flags/ar.mjs +161 -0
  160. package/dist/esm/dist/esm/components/Flags/ar.mjs.map +1 -0
  161. package/dist/esm/dist/esm/components/Flags/at.mjs +31 -0
  162. package/dist/esm/dist/esm/components/Flags/at.mjs.map +1 -0
  163. package/dist/esm/dist/esm/components/Flags/au.mjs +43 -0
  164. package/dist/esm/dist/esm/components/Flags/au.mjs.map +1 -0
  165. package/dist/esm/dist/esm/components/Flags/az.mjs +47 -0
  166. package/dist/esm/dist/esm/components/Flags/az.mjs.map +1 -0
  167. package/dist/esm/dist/esm/components/Flags/ba.mjs +41 -0
  168. package/dist/esm/dist/esm/components/Flags/ba.mjs.map +1 -0
  169. package/dist/esm/dist/esm/components/Flags/bd.mjs +33 -0
  170. package/dist/esm/dist/esm/components/Flags/bd.mjs.map +1 -0
  171. package/dist/esm/dist/esm/components/Flags/be.mjs +37 -0
  172. package/dist/esm/dist/esm/components/Flags/be.mjs.map +1 -0
  173. package/dist/esm/dist/esm/components/Flags/bg.mjs +34 -0
  174. package/dist/esm/dist/esm/components/Flags/bg.mjs.map +1 -0
  175. package/dist/esm/dist/esm/components/Flags/bh.mjs +31 -0
  176. package/dist/esm/dist/esm/components/Flags/bh.mjs.map +1 -0
  177. package/dist/esm/dist/esm/components/Flags/bn.mjs +43 -0
  178. package/dist/esm/dist/esm/components/Flags/bn.mjs.map +1 -0
  179. package/dist/esm/dist/esm/components/Flags/bo.mjs +3031 -0
  180. package/dist/esm/dist/esm/components/Flags/bo.mjs.map +1 -0
  181. package/dist/esm/dist/esm/components/Flags/br.mjs +107 -0
  182. package/dist/esm/dist/esm/components/Flags/br.mjs.map +1 -0
  183. package/dist/esm/dist/esm/components/Flags/bw.mjs +34 -0
  184. package/dist/esm/dist/esm/components/Flags/bw.mjs.map +1 -0
  185. package/dist/esm/dist/esm/components/Flags/by.mjs +46 -0
  186. package/dist/esm/dist/esm/components/Flags/by.mjs.map +1 -0
  187. package/dist/esm/dist/esm/components/Flags/bz.mjs +339 -0
  188. package/dist/esm/dist/esm/components/Flags/bz.mjs.map +1 -0
  189. package/dist/esm/dist/esm/components/Flags/ca.mjs +31 -0
  190. package/dist/esm/dist/esm/components/Flags/ca.mjs.map +1 -0
  191. package/dist/esm/dist/esm/components/Flags/ch.mjs +31 -0
  192. package/dist/esm/dist/esm/components/Flags/ch.mjs.map +1 -0
  193. package/dist/esm/dist/esm/components/Flags/cl.mjs +44 -0
  194. package/dist/esm/dist/esm/components/Flags/cl.mjs.map +1 -0
  195. package/dist/esm/dist/esm/components/Flags/cn.mjs +58 -0
  196. package/dist/esm/dist/esm/components/Flags/cn.mjs.map +1 -0
  197. package/dist/esm/dist/esm/components/Flags/co.mjs +37 -0
  198. package/dist/esm/dist/esm/components/Flags/co.mjs.map +1 -0
  199. package/dist/esm/dist/esm/components/Flags/cr.mjs +37 -0
  200. package/dist/esm/dist/esm/components/Flags/cr.mjs.map +1 -0
  201. package/dist/esm/dist/esm/components/Flags/cu.mjs +44 -0
  202. package/dist/esm/dist/esm/components/Flags/cu.mjs.map +1 -0
  203. package/dist/esm/dist/esm/components/Flags/cv.mjs +44 -0
  204. package/dist/esm/dist/esm/components/Flags/cv.mjs.map +1 -0
  205. package/dist/esm/dist/esm/components/Flags/cz.mjs +34 -0
  206. package/dist/esm/dist/esm/components/Flags/cz.mjs.map +1 -0
  207. package/dist/esm/dist/esm/components/Flags/de.mjs +34 -0
  208. package/dist/esm/dist/esm/components/Flags/de.mjs.map +1 -0
  209. package/dist/esm/dist/esm/components/Flags/dj.mjs +44 -0
  210. package/dist/esm/dist/esm/components/Flags/dj.mjs.map +1 -0
  211. package/dist/esm/dist/esm/components/Flags/dk.mjs +34 -0
  212. package/dist/esm/dist/esm/components/Flags/dk.mjs.map +1 -0
  213. package/dist/esm/dist/esm/components/Flags/do.mjs +212 -0
  214. package/dist/esm/dist/esm/components/Flags/do.mjs.map +1 -0
  215. package/dist/esm/dist/esm/components/Flags/dz.mjs +34 -0
  216. package/dist/esm/dist/esm/components/Flags/dz.mjs.map +1 -0
  217. package/dist/esm/dist/esm/components/Flags/ec.mjs +623 -0
  218. package/dist/esm/dist/esm/components/Flags/ec.mjs.map +1 -0
  219. package/dist/esm/dist/esm/components/Flags/ee.mjs +34 -0
  220. package/dist/esm/dist/esm/components/Flags/ee.mjs.map +1 -0
  221. package/dist/esm/dist/esm/components/Flags/eg.mjs +113 -0
  222. package/dist/esm/dist/esm/components/Flags/eg.mjs.map +1 -0
  223. package/dist/esm/dist/esm/components/Flags/es-ct.mjs +33 -0
  224. package/dist/esm/dist/esm/components/Flags/es-ct.mjs.map +1 -0
  225. package/dist/esm/dist/esm/components/Flags/es-ga.mjs +793 -0
  226. package/dist/esm/dist/esm/components/Flags/es-ga.mjs.map +1 -0
  227. package/dist/esm/dist/esm/components/Flags/es-pv.mjs +34 -0
  228. package/dist/esm/dist/esm/components/Flags/es-pv.mjs.map +1 -0
  229. package/dist/esm/dist/esm/components/Flags/es.mjs +2227 -0
  230. package/dist/esm/dist/esm/components/Flags/es.mjs.map +1 -0
  231. package/dist/esm/dist/esm/components/Flags/et.mjs +51 -0
  232. package/dist/esm/dist/esm/components/Flags/et.mjs.map +1 -0
  233. package/dist/esm/dist/esm/components/Flags/fi.mjs +34 -0
  234. package/dist/esm/dist/esm/components/Flags/fi.mjs.map +1 -0
  235. package/dist/esm/dist/esm/components/Flags/fo.mjs +42 -0
  236. package/dist/esm/dist/esm/components/Flags/fo.mjs.map +1 -0
  237. package/dist/esm/dist/esm/components/Flags/fr.mjs +34 -0
  238. package/dist/esm/dist/esm/components/Flags/fr.mjs.map +1 -0
  239. package/dist/esm/dist/esm/components/Flags/gb-wls.mjs +44 -0
  240. package/dist/esm/dist/esm/components/Flags/gb-wls.mjs.map +1 -0
  241. package/dist/esm/dist/esm/components/Flags/gb.mjs +40 -0
  242. package/dist/esm/dist/esm/components/Flags/gb.mjs.map +1 -0
  243. package/dist/esm/dist/esm/components/Flags/ge.mjs +38 -0
  244. package/dist/esm/dist/esm/components/Flags/ge.mjs.map +1 -0
  245. package/dist/esm/dist/esm/components/Flags/gh.mjs +37 -0
  246. package/dist/esm/dist/esm/components/Flags/gh.mjs.map +1 -0
  247. package/dist/esm/dist/esm/components/Flags/gr.mjs +67 -0
  248. package/dist/esm/dist/esm/components/Flags/gr.mjs.map +1 -0
  249. package/dist/esm/dist/esm/components/Flags/gt.mjs +462 -0
  250. package/dist/esm/dist/esm/components/Flags/gt.mjs.map +1 -0
  251. package/dist/esm/dist/esm/components/Flags/gw.mjs +68 -0
  252. package/dist/esm/dist/esm/components/Flags/gw.mjs.map +1 -0
  253. package/dist/esm/dist/esm/components/Flags/hk.mjs +45 -0
  254. package/dist/esm/dist/esm/components/Flags/hk.mjs.map +1 -0
  255. package/dist/esm/dist/esm/components/Flags/hn.mjs +84 -0
  256. package/dist/esm/dist/esm/components/Flags/hn.mjs.map +1 -0
  257. package/dist/esm/dist/esm/components/Flags/hr.mjs +95 -0
  258. package/dist/esm/dist/esm/components/Flags/hr.mjs.map +1 -0
  259. package/dist/esm/dist/esm/components/Flags/hu.mjs +34 -0
  260. package/dist/esm/dist/esm/components/Flags/hu.mjs.map +1 -0
  261. package/dist/esm/dist/esm/components/Flags/id.mjs +31 -0
  262. package/dist/esm/dist/esm/components/Flags/id.mjs.map +1 -0
  263. package/dist/esm/dist/esm/components/Flags/ie.mjs +37 -0
  264. package/dist/esm/dist/esm/components/Flags/ie.mjs.map +1 -0
  265. package/dist/esm/dist/esm/components/Flags/il.mjs +47 -0
  266. package/dist/esm/dist/esm/components/Flags/il.mjs.map +1 -0
  267. package/dist/esm/dist/esm/components/Flags/in.mjs +75 -0
  268. package/dist/esm/dist/esm/components/Flags/in.mjs.map +1 -0
  269. package/dist/esm/dist/esm/components/Flags/iq.mjs +41 -0
  270. package/dist/esm/dist/esm/components/Flags/iq.mjs.map +1 -0
  271. package/dist/esm/dist/esm/components/Flags/ir.mjs +113 -0
  272. package/dist/esm/dist/esm/components/Flags/ir.mjs.map +1 -0
  273. package/dist/esm/dist/esm/components/Flags/is.mjs +41 -0
  274. package/dist/esm/dist/esm/components/Flags/is.mjs.map +1 -0
  275. package/dist/esm/dist/esm/components/Flags/it.mjs +37 -0
  276. package/dist/esm/dist/esm/components/Flags/it.mjs.map +1 -0
  277. package/dist/esm/dist/esm/components/Flags/jm.mjs +37 -0
  278. package/dist/esm/dist/esm/components/Flags/jm.mjs.map +1 -0
  279. package/dist/esm/dist/esm/components/Flags/jo.mjs +49 -0
  280. package/dist/esm/dist/esm/components/Flags/jo.mjs.map +1 -0
  281. package/dist/esm/dist/esm/components/Flags/jp.mjs +42 -0
  282. package/dist/esm/dist/esm/components/Flags/jp.mjs.map +1 -0
  283. package/dist/esm/dist/esm/components/Flags/ke.mjs +92 -0
  284. package/dist/esm/dist/esm/components/Flags/ke.mjs.map +1 -0
  285. package/dist/esm/dist/esm/components/Flags/kg.mjs +50 -0
  286. package/dist/esm/dist/esm/components/Flags/kg.mjs.map +1 -0
  287. package/dist/esm/dist/esm/components/Flags/kh.mjs +77 -0
  288. package/dist/esm/dist/esm/components/Flags/kh.mjs.map +1 -0
  289. package/dist/esm/dist/esm/components/Flags/km.mjs +53 -0
  290. package/dist/esm/dist/esm/components/Flags/km.mjs.map +1 -0
  291. package/dist/esm/dist/esm/components/Flags/kr.mjs +65 -0
  292. package/dist/esm/dist/esm/components/Flags/kr.mjs.map +1 -0
  293. package/dist/esm/dist/esm/components/Flags/kw.mjs +45 -0
  294. package/dist/esm/dist/esm/components/Flags/kw.mjs.map +1 -0
  295. package/dist/esm/dist/esm/components/Flags/kz.mjs +95 -0
  296. package/dist/esm/dist/esm/components/Flags/kz.mjs.map +1 -0
  297. package/dist/esm/dist/esm/components/Flags/la.mjs +40 -0
  298. package/dist/esm/dist/esm/components/Flags/la.mjs.map +1 -0
  299. package/dist/esm/dist/esm/components/Flags/lb.mjs +51 -0
  300. package/dist/esm/dist/esm/components/Flags/lb.mjs.map +1 -0
  301. package/dist/esm/dist/esm/components/Flags/li.mjs +137 -0
  302. package/dist/esm/dist/esm/components/Flags/li.mjs.map +1 -0
  303. package/dist/esm/dist/esm/components/Flags/lk.mjs +74 -0
  304. package/dist/esm/dist/esm/components/Flags/lk.mjs.map +1 -0
  305. package/dist/esm/dist/esm/components/Flags/lt.mjs +47 -0
  306. package/dist/esm/dist/esm/components/Flags/lt.mjs.map +1 -0
  307. package/dist/esm/dist/esm/components/Flags/lu.mjs +34 -0
  308. package/dist/esm/dist/esm/components/Flags/lu.mjs.map +1 -0
  309. package/dist/esm/dist/esm/components/Flags/lv.mjs +31 -0
  310. package/dist/esm/dist/esm/components/Flags/lv.mjs.map +1 -0
  311. package/dist/esm/dist/esm/components/Flags/ly.mjs +40 -0
  312. package/dist/esm/dist/esm/components/Flags/ly.mjs.map +1 -0
  313. package/dist/esm/dist/esm/components/Flags/ma.mjs +33 -0
  314. package/dist/esm/dist/esm/components/Flags/ma.mjs.map +1 -0
  315. package/dist/esm/dist/esm/components/Flags/mc.mjs +34 -0
  316. package/dist/esm/dist/esm/components/Flags/mc.mjs.map +1 -0
  317. package/dist/esm/dist/esm/components/Flags/md.mjs +318 -0
  318. package/dist/esm/dist/esm/components/Flags/md.mjs.map +1 -0
  319. package/dist/esm/dist/esm/components/Flags/mk.mjs +38 -0
  320. package/dist/esm/dist/esm/components/Flags/mk.mjs.map +1 -0
  321. package/dist/esm/dist/esm/components/Flags/mm.mjs +59 -0
  322. package/dist/esm/dist/esm/components/Flags/mm.mjs.map +1 -0
  323. package/dist/esm/dist/esm/components/Flags/mn.mjs +60 -0
  324. package/dist/esm/dist/esm/components/Flags/mn.mjs.map +1 -0
  325. package/dist/esm/dist/esm/components/Flags/mo.mjs +43 -0
  326. package/dist/esm/dist/esm/components/Flags/mo.mjs.map +1 -0
  327. package/dist/esm/dist/esm/components/Flags/mr.mjs +38 -0
  328. package/dist/esm/dist/esm/components/Flags/mr.mjs.map +1 -0
  329. package/dist/esm/dist/esm/components/Flags/mt.mjs +154 -0
  330. package/dist/esm/dist/esm/components/Flags/mt.mjs.map +1 -0
  331. package/dist/esm/dist/esm/components/Flags/mv.mjs +41 -0
  332. package/dist/esm/dist/esm/components/Flags/mv.mjs.map +1 -0
  333. package/dist/esm/dist/esm/components/Flags/mx.mjs +1366 -0
  334. package/dist/esm/dist/esm/components/Flags/mx.mjs.map +1 -0
  335. package/dist/esm/dist/esm/components/Flags/my.mjs +79 -0
  336. package/dist/esm/dist/esm/components/Flags/my.mjs.map +1 -0
  337. package/dist/esm/dist/esm/components/Flags/mz.mjs +93 -0
  338. package/dist/esm/dist/esm/components/Flags/mz.mjs.map +1 -0
  339. package/dist/esm/dist/esm/components/Flags/ng.mjs +34 -0
  340. package/dist/esm/dist/esm/components/Flags/ng.mjs.map +1 -0
  341. package/dist/esm/dist/esm/components/Flags/ni.mjs +452 -0
  342. package/dist/esm/dist/esm/components/Flags/ni.mjs.map +1 -0
  343. package/dist/esm/dist/esm/components/Flags/nl.mjs +34 -0
  344. package/dist/esm/dist/esm/components/Flags/nl.mjs.map +1 -0
  345. package/dist/esm/dist/esm/components/Flags/no.mjs +40 -0
  346. package/dist/esm/dist/esm/components/Flags/no.mjs.map +1 -0
  347. package/dist/esm/dist/esm/components/Flags/np.mjs +39 -0
  348. package/dist/esm/dist/esm/components/Flags/np.mjs.map +1 -0
  349. package/dist/esm/dist/esm/components/Flags/nz.mjs +105 -0
  350. package/dist/esm/dist/esm/components/Flags/nz.mjs.map +1 -0
  351. package/dist/esm/dist/esm/components/Flags/om.mjs +540 -0
  352. package/dist/esm/dist/esm/components/Flags/om.mjs.map +1 -0
  353. package/dist/esm/dist/esm/components/Flags/pa.mjs +47 -0
  354. package/dist/esm/dist/esm/components/Flags/pa.mjs.map +1 -0
  355. package/dist/esm/dist/esm/components/Flags/pe.mjs +31 -0
  356. package/dist/esm/dist/esm/components/Flags/pe.mjs.map +1 -0
  357. package/dist/esm/dist/esm/components/Flags/ph.mjs +37 -0
  358. package/dist/esm/dist/esm/components/Flags/ph.mjs.map +1 -0
  359. package/dist/esm/dist/esm/components/Flags/pk.mjs +39 -0
  360. package/dist/esm/dist/esm/components/Flags/pk.mjs.map +1 -0
  361. package/dist/esm/dist/esm/components/Flags/pl.mjs +31 -0
  362. package/dist/esm/dist/esm/components/Flags/pl.mjs.map +1 -0
  363. package/dist/esm/dist/esm/components/Flags/pr.mjs +44 -0
  364. package/dist/esm/dist/esm/components/Flags/pr.mjs.map +1 -0
  365. package/dist/esm/dist/esm/components/Flags/ps.mjs +46 -0
  366. package/dist/esm/dist/esm/components/Flags/ps.mjs.map +1 -0
  367. package/dist/esm/dist/esm/components/Flags/pt.mjs +153 -0
  368. package/dist/esm/dist/esm/components/Flags/pt.mjs.map +1 -0
  369. package/dist/esm/dist/esm/components/Flags/py.mjs +62 -0
  370. package/dist/esm/dist/esm/components/Flags/py.mjs.map +1 -0
  371. package/dist/esm/dist/esm/components/Flags/qa.mjs +31 -0
  372. package/dist/esm/dist/esm/components/Flags/qa.mjs.map +1 -0
  373. package/dist/esm/dist/esm/components/Flags/ro.mjs +37 -0
  374. package/dist/esm/dist/esm/components/Flags/ro.mjs.map +1 -0
  375. package/dist/esm/dist/esm/components/Flags/rs.mjs +821 -0
  376. package/dist/esm/dist/esm/components/Flags/rs.mjs.map +1 -0
  377. package/dist/esm/dist/esm/components/Flags/ru.mjs +34 -0
  378. package/dist/esm/dist/esm/components/Flags/ru.mjs.map +1 -0
  379. package/dist/esm/dist/esm/components/Flags/sa.mjs +80 -0
  380. package/dist/esm/dist/esm/components/Flags/sa.mjs.map +1 -0
  381. package/dist/esm/dist/esm/components/Flags/sd.mjs +45 -0
  382. package/dist/esm/dist/esm/components/Flags/sd.mjs.map +1 -0
  383. package/dist/esm/dist/esm/components/Flags/se.mjs +31 -0
  384. package/dist/esm/dist/esm/components/Flags/se.mjs.map +1 -0
  385. package/dist/esm/dist/esm/components/Flags/sg.mjs +43 -0
  386. package/dist/esm/dist/esm/components/Flags/sg.mjs.map +1 -0
  387. package/dist/esm/dist/esm/components/Flags/si.mjs +60 -0
  388. package/dist/esm/dist/esm/components/Flags/si.mjs.map +1 -0
  389. package/dist/esm/dist/esm/components/Flags/sk.mjs +46 -0
  390. package/dist/esm/dist/esm/components/Flags/sk.mjs.map +1 -0
  391. package/dist/esm/dist/esm/components/Flags/so.mjs +38 -0
  392. package/dist/esm/dist/esm/components/Flags/so.mjs.map +1 -0
  393. package/dist/esm/dist/esm/components/Flags/st.mjs +74 -0
  394. package/dist/esm/dist/esm/components/Flags/st.mjs.map +1 -0
  395. package/dist/esm/dist/esm/components/Flags/sv.mjs +1736 -0
  396. package/dist/esm/dist/esm/components/Flags/sv.mjs.map +1 -0
  397. package/dist/esm/dist/esm/components/Flags/sy.mjs +37 -0
  398. package/dist/esm/dist/esm/components/Flags/sy.mjs.map +1 -0
  399. package/dist/esm/dist/esm/components/Flags/td.mjs +34 -0
  400. package/dist/esm/dist/esm/components/Flags/td.mjs.map +1 -0
  401. package/dist/esm/dist/esm/components/Flags/th.mjs +34 -0
  402. package/dist/esm/dist/esm/components/Flags/th.mjs.map +1 -0
  403. package/dist/esm/dist/esm/components/Flags/tl.mjs +44 -0
  404. package/dist/esm/dist/esm/components/Flags/tl.mjs.map +1 -0
  405. package/dist/esm/dist/esm/components/Flags/tn.mjs +31 -0
  406. package/dist/esm/dist/esm/components/Flags/tn.mjs.map +1 -0
  407. package/dist/esm/dist/esm/components/Flags/tr.mjs +37 -0
  408. package/dist/esm/dist/esm/components/Flags/tr.mjs.map +1 -0
  409. package/dist/esm/dist/esm/components/Flags/tt.mjs +36 -0
  410. package/dist/esm/dist/esm/components/Flags/tt.mjs.map +1 -0
  411. package/dist/esm/dist/esm/components/Flags/tw.mjs +41 -0
  412. package/dist/esm/dist/esm/components/Flags/tw.mjs.map +1 -0
  413. package/dist/esm/dist/esm/components/Flags/tz.mjs +45 -0
  414. package/dist/esm/dist/esm/components/Flags/tz.mjs.map +1 -0
  415. package/dist/esm/dist/esm/components/Flags/ua.mjs +34 -0
  416. package/dist/esm/dist/esm/components/Flags/ua.mjs.map +1 -0
  417. package/dist/esm/dist/esm/components/Flags/ug.mjs +146 -0
  418. package/dist/esm/dist/esm/components/Flags/ug.mjs.map +1 -0
  419. package/dist/esm/dist/esm/components/Flags/us.mjs +46 -0
  420. package/dist/esm/dist/esm/components/Flags/us.mjs.map +1 -0
  421. package/dist/esm/dist/esm/components/Flags/uy.mjs +64 -0
  422. package/dist/esm/dist/esm/components/Flags/uy.mjs.map +1 -0
  423. package/dist/esm/dist/esm/components/Flags/uz.mjs +110 -0
  424. package/dist/esm/dist/esm/components/Flags/uz.mjs.map +1 -0
  425. package/dist/esm/dist/esm/components/Flags/ve.mjs +85 -0
  426. package/dist/esm/dist/esm/components/Flags/ve.mjs.map +1 -0
  427. package/dist/esm/dist/esm/components/Flags/vn.mjs +38 -0
  428. package/dist/esm/dist/esm/components/Flags/vn.mjs.map +1 -0
  429. package/dist/esm/dist/esm/components/Flags/xx.mjs +36 -0
  430. package/dist/esm/dist/esm/components/Flags/xx.mjs.map +1 -0
  431. package/dist/esm/dist/esm/components/Flags/ye.mjs +37 -0
  432. package/dist/esm/dist/esm/components/Flags/ye.mjs.map +1 -0
  433. package/dist/esm/dist/esm/components/Flags/za.mjs +52 -0
  434. package/dist/esm/dist/esm/components/Flags/za.mjs.map +1 -0
  435. package/dist/esm/dist/esm/components/Flags/zw.mjs +71 -0
  436. package/dist/esm/dist/esm/components/Flags/zw.mjs.map +1 -0
  437. package/dist/esm/dist/esm/utils/cn.mjs +9 -0
  438. package/dist/esm/dist/esm/utils/cn.mjs.map +1 -0
  439. package/dist/esm/hooks/useHorizontalSwipe.mjs.map +1 -1
  440. package/dist/esm/hooks/useItemSelector.mjs.map +1 -1
  441. package/dist/esm/hooks/usePersistedStore.mjs.map +1 -1
  442. package/dist/esm/hooks/useScrollY.mjs.map +1 -1
  443. package/dist/esm/libs/auth.mjs.map +1 -1
  444. package/dist/esm/providers/ReactQueryProvider.mjs.map +1 -1
  445. package/dist/esm/utils/object.mjs.map +1 -1
  446. package/dist/types/components/Breadcrumb/breadcrumb.content.d.ts +3 -3
  447. package/dist/types/components/Breadcrumb/index.d.ts +2 -2
  448. package/dist/types/components/Breadcrumb/index.d.ts.map +1 -1
  449. package/dist/types/components/Browser/browser.content.d.ts +17 -17
  450. package/dist/types/components/Browser/browser.content.d.ts.map +1 -1
  451. package/dist/types/components/Button/Button.d.ts +5 -5
  452. package/dist/types/components/Carousel/index.content.d.ts +7 -7
  453. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +2 -2
  454. package/dist/types/components/Command/index.d.ts +17 -17
  455. package/dist/types/components/Container/index.d.ts +7 -7
  456. package/dist/types/components/Container/index.d.ts.map +1 -1
  457. package/dist/types/components/CopyButton/CopyButton.content.d.ts +3 -3
  458. package/dist/types/components/CopyButton/CopyButton.content.d.ts.map +1 -1
  459. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts +25 -25
  460. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.d.ts +9 -9
  461. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts +33 -33
  462. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts +25 -25
  463. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts.map +1 -1
  464. package/dist/types/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.d.ts +25 -25
  465. package/dist/types/components/DictionaryFieldEditor/SaveForm/saveForm.content.d.ts +33 -33
  466. package/dist/types/components/DictionaryFieldEditor/StructureView/structureView.content.d.ts +9 -9
  467. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.d.ts +7 -7
  468. package/dist/types/components/DictionaryFieldEditor/dictionaryFieldEditor.content.d.ts +5 -5
  469. package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts +31 -31
  470. package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts.map +1 -1
  471. package/dist/types/components/ExpandCollapse/expandCollapse.content.d.ts +4 -4
  472. package/dist/types/components/Form/FormBase.d.ts +2 -2
  473. package/dist/types/components/Form/FormField.d.ts +2 -2
  474. package/dist/types/components/Form/FormItem.d.ts +2 -2
  475. package/dist/types/components/Form/FormItem.d.ts.map +1 -1
  476. package/dist/types/components/Form/elements/EditableFieldInputElement.d.ts +2 -2
  477. package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts +2 -2
  478. package/dist/types/components/Form/elements/MultiselectElement.d.ts +2 -2
  479. package/dist/types/components/Form/elements/SelectElement.d.ts +2 -2
  480. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts +2 -2
  481. package/dist/types/components/IDE/CodeContext.d.ts +2 -2
  482. package/dist/types/components/IDE/CodeContext.d.ts.map +1 -1
  483. package/dist/types/components/IDE/code.content.d.ts +5 -5
  484. package/dist/types/components/IDE/code.content.d.ts.map +1 -1
  485. package/dist/types/components/IDE/copyCode.content.d.ts +5 -5
  486. package/dist/types/components/IDE/copyCode.content.d.ts.map +1 -1
  487. package/dist/types/components/IDE/selectors.content.d.ts +13 -13
  488. package/dist/types/components/Input/Checkbox.d.ts +3 -3
  489. package/dist/types/components/Input/Checkbox.d.ts.map +1 -1
  490. package/dist/types/components/Input/Input.d.ts +2 -2
  491. package/dist/types/components/Input/OTPInput.d.ts +4 -4
  492. package/dist/types/components/Input/SearchInput.d.ts +2 -2
  493. package/dist/types/components/Link/Link.d.ts +4 -4
  494. package/dist/types/components/Link/Link.d.ts.map +1 -1
  495. package/dist/types/components/Loader/index.content.d.ts +3 -3
  496. package/dist/types/components/Loader/spinner.d.ts +2 -2
  497. package/dist/types/components/LocaleSwitcherContentDropDown/localeSwitcher.content.d.ts +17 -17
  498. package/dist/types/components/LocaleSwitcherDropDown/localeSwitcher.content.d.ts +13 -13
  499. package/dist/types/components/MaxWidthSmoother/index.d.ts +2 -2
  500. package/dist/types/components/Navbar/Burger.d.ts +2 -2
  501. package/dist/types/components/Navbar/MobileNavbar.d.ts +2 -2
  502. package/dist/types/components/Navbar/MobileNavbar.d.ts.map +1 -1
  503. package/dist/types/components/Navbar/index.d.ts +2 -2
  504. package/dist/types/components/Navbar/index.d.ts.map +1 -1
  505. package/dist/types/components/Pagination/Pagination.d.ts +2 -2
  506. package/dist/types/components/Pagination/Pagination.d.ts.map +1 -1
  507. package/dist/types/components/Pagination/pagination.content.d.ts +12 -12
  508. package/dist/types/components/RightDrawer/rightDrawer.content.d.ts +5 -5
  509. package/dist/types/components/SocialNetworks/index.d.ts +2 -2
  510. package/dist/types/components/SwitchSelector/index.d.ts +6 -6
  511. package/dist/types/components/Tab/Tab.d.ts +2 -2
  512. package/dist/types/components/Tab/Tab.d.ts.map +1 -1
  513. package/dist/types/components/TabSelector/TabSelector.d.ts +3 -3
  514. package/dist/types/components/TabSelector/TabSelector.d.ts.map +1 -1
  515. package/dist/types/components/Table/table.content.d.ts +3 -3
  516. package/dist/types/components/Tag/index.d.ts +4 -4
  517. package/dist/types/components/Terminal/terminal.content.d.ts +5 -5
  518. package/dist/types/components/Toaster/Toaster.d.ts +2 -2
  519. package/dist/types/hooks/useItemSelector.d.ts.map +1 -1
  520. package/package.json +31 -31
@@ -1 +1 @@
1
- {"version":3,"file":"TextEditor.mjs","names":["traceKeys: string[]","ContentEditorTextArea: FC<ContentEditorTextAreaProps>","ContentEditorTextAreaBase","editedContent","ContentEditorInput: FC<ContentEditorInputProps>","ContentEditorInputBase","ContentEditorToggle: FC<ContentEditorToggleProps>","TranslationTextEditor: FC<TextEditorProps>","content: any","EnumerationTextEditor: FC<TextEditorProps>","ConditionTextEditor: FC<TextEditorProps>","GenderTextEditor: FC<TextEditorProps>","ArrayTextEditor: FC<TextEditorProps>","newKeyPath: KeyPath[]","ObjectTextEditor: FC<TextEditorProps>","childKeyPath: KeyPath[]","MarkdownTextEditor: FC<TextEditorProps>","toggleContent","content","InsertionTextEditor: FC<TextEditorProps>","FileTextEditor: FC<TextEditorProps>","NestedTextEditor: FC<TextEditorProps>","TextEditor: FC<TextEditorProps>","TextEditorContainer: FC<TextEditorProps>"],"sources":["../../../../../src/components/DictionaryFieldEditor/ContentEditorView/TextEditor.tsx"],"sourcesContent":["'use client';\n\nimport {\n Button,\n ButtonColor,\n ButtonSize,\n ButtonTextAlign,\n ButtonVariant,\n} from '@components/Button';\nimport { Container } from '@components/Container';\nimport {\n ContentEditorInput as ContentEditorInputBase,\n type ContentEditorInputProps as ContentEditorInputPropsBase,\n} from '@components/ContentEditor/ContentEditorInput';\nimport {\n ContentEditorTextArea as ContentEditorTextAreaBase,\n type ContentEditorTextAreaProps as ContentEditorTextAreaPropsBase,\n} from '@components/ContentEditor/ContentEditorTextArea';\nimport { InputVariant } from '@components/Input';\nimport { Label } from '@components/Label';\nimport { useLocaleSwitcherContent } from '@components/LocaleSwitcherContentDropDown';\nimport { MarkdownRenderer } from '@components/MarkDownRender';\nimport {\n SwitchSelector,\n type SwitchSelectorChoices,\n SwitchSelectorColor,\n type SwitchSelectorProps,\n SwitchSelectorSize,\n} from '@components/SwitchSelector';\nimport { useAuditContentDeclarationField } from '@hooks/reactQuery';\nimport {\n type ConditionContent,\n type EnumerationContent,\n type FileContent,\n type GenderContent,\n getEmptyNode,\n getLocaleName,\n getNodeType,\n type InsertionContent,\n type MarkdownContent,\n type TranslationContent,\n} from '@intlayer/core';\nimport { useConfiguration, useEditedContent } from '@intlayer/editor-react';\nimport {\n type ContentNode,\n type Dictionary,\n type KeyPath,\n type Locale,\n type LocalesValues,\n NodeType,\n} from '@intlayer/types';\nimport { renameKey } from '@utils/object';\nimport { Plus, Trash, WandSparkles } from 'lucide-react';\nimport { type FC, Fragment, type ReactNode, useState } from 'react';\nimport { useIntlayer, useLocale } from 'react-intlayer';\nimport { EnumKeyInput } from '../EnumKeyInput';\n\nexport const traceKeys: string[] = ['filePath', 'id', 'nodeType'];\n\ntype ContentEditorTextAreaProps = Omit<\n ContentEditorTextAreaPropsBase,\n 'onContentChange'\n> & {\n keyPath: KeyPath[];\n dictionary: Dictionary;\n};\n\nconst ContentEditorTextArea: FC<ContentEditorTextAreaProps> = ({\n keyPath,\n dictionary,\n ...props\n}) => {\n const { editedContent, addEditedContent } = useEditedContent();\n const configuration = useConfiguration();\n const { mutate: auditContentDeclarationField, isPending: isAuditing } =\n useAuditContentDeclarationField();\n\n return (\n <ContentEditorTextAreaBase\n variant={InputVariant.DEFAULT}\n onContentChange={(newValue) =>\n addEditedContent(dictionary.localId!, newValue, keyPath)\n }\n additionalButtons={\n <Button\n Icon={WandSparkles}\n label=\"Audit\"\n variant={ButtonVariant.HOVERABLE}\n size={ButtonSize.ICON_SM}\n color={ButtonColor.TEXT}\n className=\"cursor-pointer hover:scale-110\"\n isLoading={isAuditing}\n onClick={() => {\n auditContentDeclarationField(\n {\n fileContent: JSON.stringify({\n ...dictionary,\n ...(editedContent?.[dictionary.localId!] ?? {}),\n }),\n keyPath,\n locales: configuration.internationalization.locales ?? [],\n aiOptions: {\n apiKey: configuration.ai?.apiKey,\n model: configuration.ai?.model,\n temperature: configuration.ai?.temperature,\n },\n },\n {\n onSuccess: (response) => {\n if (!response?.data) return;\n\n try {\n const editedContent = response.data.fileContent as string;\n\n addEditedContent(\n dictionary.localId!,\n editedContent,\n keyPath\n );\n } catch (error) {\n console.error(error);\n }\n },\n }\n );\n }}\n />\n }\n {...props}\n />\n );\n};\n\ntype ContentEditorInputProps = Omit<\n ContentEditorInputPropsBase,\n 'onContentChange'\n> & {\n keyPath: KeyPath[];\n dictionary: Dictionary;\n};\n\nconst ContentEditorInput: FC<ContentEditorInputProps> = ({\n keyPath,\n dictionary,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n\n return (\n <ContentEditorInputBase\n variant={InputVariant.DEFAULT}\n onContentChange={(newValue) =>\n addEditedContent(dictionary.localId!, newValue, keyPath)\n }\n {...props}\n />\n );\n};\n\nconst toggleContent = [\n {\n content: 'False',\n value: false,\n },\n {\n content: 'True',\n value: true,\n },\n] as SwitchSelectorChoices<boolean>;\n\ntype ContentEditorToggleProps = SwitchSelectorProps & {\n dictionary: Dictionary;\n keyPath: KeyPath[];\n};\n\nconst ContentEditorToggle: FC<ContentEditorToggleProps> = ({\n dictionary,\n keyPath,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n\n return (\n <SwitchSelector\n choices={toggleContent}\n value={true}\n onChange={(value) =>\n addEditedContent(dictionary.localId!, value, keyPath)\n }\n color={SwitchSelectorColor.TEXT}\n size={SwitchSelectorSize.SM}\n {...props}\n />\n );\n};\n\nexport type TextEditorProps = {\n dictionary: Dictionary;\n keyPath: KeyPath[];\n section: ContentNode;\n isDarkMode?: boolean;\n renderSection?: (content: string) => ReactNode;\n onContentChange?: (newValue: string) => void;\n};\n\nconst TranslationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}: TextEditorProps) => {\n const { locale, defaultLocale } = useLocale();\n const { selectedLocales, availableLocales } = useLocaleSwitcherContent();\n\n const sectionContent = (section as TranslationContent<string>)[\n NodeType.Translation\n ] as Record<Locale, string>;\n\n const sectionContentKeys = Object.keys(sectionContent) as LocalesValues[];\n\n const isFiltered = availableLocales.length > selectedLocales.length;\n\n const localesList = isFiltered\n ? selectedLocales\n : // If the translation include content in other locales, we display all of them\n [...new Set([...availableLocales, ...sectionContentKeys])];\n\n const content: any = (section as TranslationContent<string>)[\n NodeType.Translation\n ];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {localesList.map((translationKey) => {\n const uniqueKey = `${JSON.stringify(keyPath)}-translation-${translationKey}`;\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 w-full p-2 text-xs\">\n <td className=\"flex w-full\">\n {getLocaleName(translationKey, locale)}\n </td>\n </tr>\n <tr className=\"flex\">\n <td className=\"flex w-full\">\n <TextEditorContainer\n section={\n content[translationKey] ??\n getEmptyNode(content[defaultLocale])\n }\n keyPath={[\n ...keyPath,\n { type: NodeType.Translation, key: translationKey },\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n );\n};\n\nconst EnumerationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const { addEditedContent } = useEditedContent();\n const { addNewEnumeration, removeEnumeration } =\n useIntlayer('navigation-view');\n\n const content = (section as EnumerationContent<string>)[NodeType.Enumeration];\n const firstKey = Object.keys(content)[0] as keyof typeof content;\n\n return (\n <div className=\"flex flex-col gap-2\">\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {Object.keys(\n (section as EnumerationContent<ContentNode>)[NodeType.Enumeration]\n ).map((enumKey) => {\n const childrenKeyPath = [\n ...keyPath,\n { type: NodeType.Enumeration, key: enumKey },\n ] as KeyPath[];\n const uniqueKey = `${JSON.stringify(keyPath)}-enumeration-${enumKey}`;\n\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 w-full\">\n <td className=\"flex w-full\">\n <div className=\"flex flex-1\">\n <Button\n label={removeEnumeration.label.value}\n variant=\"hoverable\"\n size=\"sm\"\n color=\"error\"\n className=\"ml-auto text-neutral hover:text-error\"\n Icon={Trash}\n onClick={() =>\n addEditedContent(\n dictionary.localId!,\n undefined,\n childrenKeyPath\n )\n }\n >\n {removeEnumeration.text}\n </Button>\n </div>\n </td>\n </tr>\n <tr className=\"w-full p-2\">\n <td className=\"flex w-full\">\n <EnumKeyInput\n value={enumKey}\n onChange={(value) => {\n const preValueContent = (\n section as EnumerationContent<string>\n )[NodeType.Enumeration];\n\n const newValueContent = renameKey(\n preValueContent,\n enumKey as keyof typeof preValueContent,\n value\n );\n const newValue = {\n ...(section as EnumerationContent<string>),\n [NodeType.Enumeration]: newValueContent,\n };\n\n console.log('newValue', newValue);\n\n addEditedContent(\n dictionary.localId!,\n newValue,\n keyPath\n );\n }}\n />\n </td>\n </tr>\n <tr className=\"block w-full\">\n <td className=\"flex w-full\">\n <TextEditor\n section={\n content[enumKey as keyof typeof content] ??\n getEmptyNode(content[firstKey])\n }\n keyPath={childrenKeyPath}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n\n <Button\n label={addNewEnumeration.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.NEUTRAL}\n textAlign={ButtonTextAlign.LEFT}\n isFullWidth\n onClick={() =>\n addEditedContent(\n dictionary.localId!,\n getEmptyNode(content[firstKey]) ?? '',\n [...keyPath, { type: NodeType.Enumeration, key: 'unknown' }]\n )\n }\n Icon={Plus}\n className=\"m-2\"\n >\n {addNewEnumeration.text}\n </Button>\n </div>\n );\n};\n\nconst ConditionTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const content = (section as ConditionContent<string>)[NodeType.Condition];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {['true', 'false', 'fallback'].map((condKey) => {\n const uniqueKey = `${JSON.stringify(keyPath)}-condition-${condKey}`;\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 block w-full p-2 text-xs\">\n <td className=\"flex w-full\">{String(condKey)}</td>\n </tr>\n <tr className=\"block w-full\">\n <td className=\"flex w-full\">\n <TextEditorContainer\n section={\n content[condKey as keyof typeof content] ??\n getEmptyNode(content.true)\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Condition,\n key: condKey,\n } as KeyPath,\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n );\n};\n\nconst GenderTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const content = (section as GenderContent<string>)[NodeType.Gender];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {['male', 'female', 'fallback'].map((condKey) => {\n const uniqueKey = `${JSON.stringify(keyPath)}-gender-${condKey}`;\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 block w-full p-2 text-xs\">\n <td className=\"flex w-full\">{String(condKey)}</td>\n </tr>\n <tr className=\"block w-full\">\n <td className=\"flex w-full\">\n <TextEditorContainer\n section={\n content[condKey as keyof typeof content] ??\n getEmptyNode(content.male)\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Gender,\n key: condKey,\n } as KeyPath,\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n );\n};\n\nconst ArrayTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const { addEditedContent } = useEditedContent();\n const { addNewElement, removeElement } = useIntlayer('navigation-view');\n\n return (\n <div className=\"flex flex-col gap-2\">\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {(section as unknown as ContentNode[]).map((subSection, index) => {\n const uniqueKey = `${JSON.stringify(keyPath)}-array-${index}`;\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 w-full p-2\">\n <td className=\"flex w-full\">\n <div className=\"flex w-full items-center justify-between gap-2\">\n <span className=\"text-xs\">{String(index)}</span>\n <Button\n label={removeElement.label.value}\n variant=\"hoverable\"\n size=\"sm\"\n color=\"error\"\n className=\"ml-auto text-neutral hover:text-error\"\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: index, // Fixed: Use index instead of length\n },\n ];\n addEditedContent(\n dictionary.localId!,\n undefined,\n newKeyPath\n );\n }}\n Icon={Trash}\n >\n {removeElement.text}\n </Button>\n </div>\n </td>\n </tr>\n\n <tr className=\"block w-full\">\n <td className=\"flex w-full\">\n <TextEditorContainer\n section={\n subSection ??\n getEmptyNode((section as unknown as ContentNode[])[0])\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Array,\n key: index,\n },\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n <Button\n label={addNewElement.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.NEUTRAL}\n textAlign={ButtonTextAlign.LEFT}\n isFullWidth\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: (section as unknown as ContentNode[]).length, // Keeps length for adding new items\n },\n ];\n addEditedContent(\n dictionary.localId!,\n getEmptyNode((section as unknown as ContentNode[])[0]) ?? '',\n newKeyPath,\n false\n );\n }}\n Icon={Plus}\n >\n {addNewElement.text}\n </Button>\n </div>\n );\n};\n\nconst ObjectTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => (\n <>\n <table className=\"w-full\">\n <tbody className=\"flex flex-col gap-2\">\n {Object.keys(section as unknown as Record<string, ContentNode>).map(\n (key) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: NodeType.Object, key },\n ];\n const typedSection = section as unknown as Record<\n string,\n ContentNode\n >;\n const firstKey = Object.keys(\n typedSection\n )[0] as keyof typeof section;\n const subSection =\n typedSection[key as keyof typeof section] ??\n getEmptyNode(typedSection[firstKey]);\n const uniqueKey = `${JSON.stringify(keyPath)}-object-${key}`;\n\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 p-2 text-xs\">\n <td className=\"flex w-full\">{String(key)}</td>\n </tr>\n <tr className=\"block w-full\">\n <td className=\"flex w-full\">\n <TextEditor\n section={subSection}\n keyPath={childKeyPath}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n }\n )}\n </tbody>\n </table>\n </>\n);\n\nenum MarkdownViewMode {\n Edit,\n Preview,\n}\n\nconst MarkdownTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n isDarkMode,\n}) => {\n const [mode, setMode] = useState(MarkdownViewMode.Edit);\n const toggleContent = [\n {\n content: 'Edit',\n value: MarkdownViewMode.Edit,\n },\n {\n content: 'Preview',\n value: MarkdownViewMode.Preview,\n },\n ] as SwitchSelectorChoices<MarkdownViewMode>;\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeType.Markdown }];\n\n const content = (section as MarkdownContent<ContentNode>)[\n NodeType.Markdown\n ] as ContentNode;\n\n return (\n <div className=\"flex w-full flex-col justify-center gap-6 p-2\">\n <SwitchSelector\n choices={toggleContent}\n value={mode}\n onChange={setMode}\n color={SwitchSelectorColor.TEXT}\n size={SwitchSelectorSize.SM}\n className=\"ml-auto\"\n />\n\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n dictionary={dictionary}\n renderSection={\n mode === MarkdownViewMode.Preview\n ? (content) => (\n <MarkdownRenderer isDarkMode={isDarkMode}>\n {content}\n </MarkdownRenderer>\n )\n : undefined\n }\n />\n </div>\n );\n};\n\nconst InsertionTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n ...props\n}) => {\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeType.Insertion }];\n\n const content = (section as InsertionContent<ContentNode>)[\n NodeType.Insertion\n ];\n\n return (\n <div className=\"flex w-full flex-col justify-center gap-6 p-2\">\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n {...props}\n />\n </div>\n );\n};\n\nconst FileTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n ...props\n}) => {\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeType.File }];\n\n const fileUrl = (section as FileContent)[NodeType.File];\n const { content } = section as FileContent;\n\n return (\n <div className=\"flex w-full flex-col justify-center gap-6 p-2\">\n <span className=\"text-neutral text-sm\">{fileUrl} </span>\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n {...props}\n />\n </div>\n );\n};\n\nconst NestedTextEditor: FC<TextEditorProps> = ({\n keyPath,\n dictionary,\n renderSection,\n section,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n\n const content = (section as any)[NodeType.Nested];\n const childrenKeyPath = [...keyPath, { type: NodeType.Nested }] as KeyPath[];\n\n return (\n <div className=\"flex w-full flex-col gap-4 p-2\">\n <Label>Dictionary key</Label>\n <ContentEditorInputBase\n aria-label=\"Edit field\"\n type=\"text\"\n variant={InputVariant.DEFAULT}\n {...props}\n onContentChange={(newValue) => {\n addEditedContent(\n dictionary.localId!,\n {\n ...content,\n dictionaryKey: String(newValue),\n },\n childrenKeyPath\n );\n }}\n >\n {content.dictionaryKey ?? ''}\n </ContentEditorInputBase>\n\n <Label>Path (optional)</Label>\n <ContentEditorInputBase\n aria-label=\"Edit field\"\n type=\"text\"\n variant={InputVariant.DEFAULT}\n {...props}\n onContentChange={(newValue) => {\n addEditedContent(\n dictionary.localId!,\n {\n ...content,\n path: newValue !== '' ? newValue : undefined,\n },\n childrenKeyPath\n );\n }}\n >\n {content.path ?? ''}\n </ContentEditorInputBase>\n </div>\n );\n};\n\nexport const TextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n isDarkMode,\n}) => {\n const { tsxNotEditable } = useIntlayer('navigation-view');\n const nodeType = getNodeType(section);\n\n if (nodeType === NodeType.ReactNode) {\n return (\n <div className=\"flex w-full flex-col gap-2\">\n <span>(React Node)</span>\n <span className=\"flex text-neutral text-xs\">{tsxNotEditable}</span>\n </div>\n );\n }\n\n if (nodeType === NodeType.Nested) {\n return (\n <NestedTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Translation) {\n return (\n <TranslationTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Enumeration) {\n return (\n <EnumerationTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Condition) {\n return (\n <ConditionTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Gender) {\n return (\n <GenderTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Insertion) {\n return (\n <InsertionTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Markdown) {\n return (\n <MarkdownTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n isDarkMode={isDarkMode}\n />\n );\n }\n\n if (nodeType === NodeType.File) {\n return (\n <FileTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Array) {\n return (\n <ArrayTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Object) {\n return (\n <ObjectTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Number) {\n return (\n <div className=\"w-full p-2\">\n <ContentEditorInput\n dictionary={dictionary}\n keyPath={keyPath}\n type=\"number\"\n aria-label=\"Edit field\"\n >\n {section as number}\n </ContentEditorInput>\n </div>\n );\n }\n\n if (nodeType === NodeType.Text) {\n return (\n <div className=\"w-full p-2\">\n {typeof renderSection === 'function' ? (\n renderSection(section as string)\n ) : (\n <ContentEditorTextArea\n variant={InputVariant.DEFAULT}\n aria-label=\"Edit field\"\n keyPath={keyPath}\n dictionary={dictionary}\n >\n {section as string}\n </ContentEditorTextArea>\n )}\n </div>\n );\n }\n\n if (nodeType === NodeType.Boolean) {\n return (\n <div className=\"w-full p-2\">\n <ContentEditorToggle\n dictionary={dictionary}\n keyPath={keyPath}\n value={section as boolean}\n />\n </div>\n );\n }\n\n return (\n <div className=\"w-full p-2\">\n Error. Format not supported.\n {JSON.stringify(section, null, 2)}\n {JSON.stringify(keyPath, null, 2)}\n NodeType : {nodeType}\n </div>\n );\n};\n\nexport const TextEditorContainer: FC<TextEditorProps> = (props) => (\n <Container\n border\n background=\"none\"\n className=\"top-6 flex h-full flex-1 flex-col gap-6 overflow-hidden p-2 md:sticky\"\n roundedSize=\"xl\"\n >\n <TextEditor {...props} />\n </Container>\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"TextEditor.mjs","names":["ContentEditorTextAreaBase","editedContent","ContentEditorInputBase","toggleContent","content"],"sources":["../../../../../src/components/DictionaryFieldEditor/ContentEditorView/TextEditor.tsx"],"sourcesContent":["'use client';\n\nimport {\n Button,\n ButtonColor,\n ButtonSize,\n ButtonTextAlign,\n ButtonVariant,\n} from '@components/Button';\nimport { Container } from '@components/Container';\nimport {\n ContentEditorInput as ContentEditorInputBase,\n type ContentEditorInputProps as ContentEditorInputPropsBase,\n} from '@components/ContentEditor/ContentEditorInput';\nimport {\n ContentEditorTextArea as ContentEditorTextAreaBase,\n type ContentEditorTextAreaProps as ContentEditorTextAreaPropsBase,\n} from '@components/ContentEditor/ContentEditorTextArea';\nimport { InputVariant } from '@components/Input';\nimport { Label } from '@components/Label';\nimport { useLocaleSwitcherContent } from '@components/LocaleSwitcherContentDropDown';\nimport { MarkdownRenderer } from '@components/MarkDownRender';\nimport {\n SwitchSelector,\n type SwitchSelectorChoices,\n SwitchSelectorColor,\n type SwitchSelectorProps,\n SwitchSelectorSize,\n} from '@components/SwitchSelector';\nimport { useAuditContentDeclarationField } from '@hooks/reactQuery';\nimport {\n type ConditionContent,\n type EnumerationContent,\n type FileContent,\n type GenderContent,\n getEmptyNode,\n getLocaleName,\n getNodeType,\n type InsertionContent,\n type MarkdownContent,\n type TranslationContent,\n} from '@intlayer/core';\nimport { useConfiguration, useEditedContent } from '@intlayer/editor-react';\nimport {\n type ContentNode,\n type Dictionary,\n type KeyPath,\n type Locale,\n type LocalesValues,\n NodeType,\n} from '@intlayer/types';\nimport { renameKey } from '@utils/object';\nimport { Plus, Trash, WandSparkles } from 'lucide-react';\nimport { type FC, Fragment, type ReactNode, useState } from 'react';\nimport { useIntlayer, useLocale } from 'react-intlayer';\nimport { EnumKeyInput } from '../EnumKeyInput';\n\nexport const traceKeys: string[] = ['filePath', 'id', 'nodeType'];\n\ntype ContentEditorTextAreaProps = Omit<\n ContentEditorTextAreaPropsBase,\n 'onContentChange'\n> & {\n keyPath: KeyPath[];\n dictionary: Dictionary;\n};\n\nconst ContentEditorTextArea: FC<ContentEditorTextAreaProps> = ({\n keyPath,\n dictionary,\n ...props\n}) => {\n const { editedContent, addEditedContent } = useEditedContent();\n const configuration = useConfiguration();\n const { mutate: auditContentDeclarationField, isPending: isAuditing } =\n useAuditContentDeclarationField();\n\n return (\n <ContentEditorTextAreaBase\n variant={InputVariant.DEFAULT}\n onContentChange={(newValue) =>\n addEditedContent(dictionary.localId!, newValue, keyPath)\n }\n additionalButtons={\n <Button\n Icon={WandSparkles}\n label=\"Audit\"\n variant={ButtonVariant.HOVERABLE}\n size={ButtonSize.ICON_SM}\n color={ButtonColor.TEXT}\n className=\"cursor-pointer hover:scale-110\"\n isLoading={isAuditing}\n onClick={() => {\n auditContentDeclarationField(\n {\n fileContent: JSON.stringify({\n ...dictionary,\n ...(editedContent?.[dictionary.localId!] ?? {}),\n }),\n keyPath,\n locales: configuration.internationalization.locales ?? [],\n aiOptions: {\n apiKey: configuration.ai?.apiKey,\n model: configuration.ai?.model,\n temperature: configuration.ai?.temperature,\n },\n },\n {\n onSuccess: (response) => {\n if (!response?.data) return;\n\n try {\n const editedContent = response.data.fileContent as string;\n\n addEditedContent(\n dictionary.localId!,\n editedContent,\n keyPath\n );\n } catch (error) {\n console.error(error);\n }\n },\n }\n );\n }}\n />\n }\n {...props}\n />\n );\n};\n\ntype ContentEditorInputProps = Omit<\n ContentEditorInputPropsBase,\n 'onContentChange'\n> & {\n keyPath: KeyPath[];\n dictionary: Dictionary;\n};\n\nconst ContentEditorInput: FC<ContentEditorInputProps> = ({\n keyPath,\n dictionary,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n\n return (\n <ContentEditorInputBase\n variant={InputVariant.DEFAULT}\n onContentChange={(newValue) =>\n addEditedContent(dictionary.localId!, newValue, keyPath)\n }\n {...props}\n />\n );\n};\n\nconst toggleContent = [\n {\n content: 'False',\n value: false,\n },\n {\n content: 'True',\n value: true,\n },\n] as SwitchSelectorChoices<boolean>;\n\ntype ContentEditorToggleProps = SwitchSelectorProps & {\n dictionary: Dictionary;\n keyPath: KeyPath[];\n};\n\nconst ContentEditorToggle: FC<ContentEditorToggleProps> = ({\n dictionary,\n keyPath,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n\n return (\n <SwitchSelector\n choices={toggleContent}\n value={true}\n onChange={(value) =>\n addEditedContent(dictionary.localId!, value, keyPath)\n }\n color={SwitchSelectorColor.TEXT}\n size={SwitchSelectorSize.SM}\n {...props}\n />\n );\n};\n\nexport type TextEditorProps = {\n dictionary: Dictionary;\n keyPath: KeyPath[];\n section: ContentNode;\n isDarkMode?: boolean;\n renderSection?: (content: string) => ReactNode;\n onContentChange?: (newValue: string) => void;\n};\n\nconst TranslationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}: TextEditorProps) => {\n const { locale, defaultLocale } = useLocale();\n const { selectedLocales, availableLocales } = useLocaleSwitcherContent();\n\n const sectionContent = (section as TranslationContent<string>)[\n NodeType.Translation\n ] as Record<Locale, string>;\n\n const sectionContentKeys = Object.keys(sectionContent) as LocalesValues[];\n\n const isFiltered = availableLocales.length > selectedLocales.length;\n\n const localesList = isFiltered\n ? selectedLocales\n : // If the translation include content in other locales, we display all of them\n [...new Set([...availableLocales, ...sectionContentKeys])];\n\n const content: any = (section as TranslationContent<string>)[\n NodeType.Translation\n ];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {localesList.map((translationKey) => {\n const uniqueKey = `${JSON.stringify(keyPath)}-translation-${translationKey}`;\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 w-full p-2 text-xs\">\n <td className=\"flex w-full\">\n {getLocaleName(translationKey, locale)}\n </td>\n </tr>\n <tr className=\"flex\">\n <td className=\"flex w-full\">\n <TextEditorContainer\n section={\n content[translationKey] ??\n getEmptyNode(content[defaultLocale])\n }\n keyPath={[\n ...keyPath,\n { type: NodeType.Translation, key: translationKey },\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n );\n};\n\nconst EnumerationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const { addEditedContent } = useEditedContent();\n const { addNewEnumeration, removeEnumeration } =\n useIntlayer('navigation-view');\n\n const content = (section as EnumerationContent<string>)[NodeType.Enumeration];\n const firstKey = Object.keys(content)[0] as keyof typeof content;\n\n return (\n <div className=\"flex flex-col gap-2\">\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {Object.keys(\n (section as EnumerationContent<ContentNode>)[NodeType.Enumeration]\n ).map((enumKey) => {\n const childrenKeyPath = [\n ...keyPath,\n { type: NodeType.Enumeration, key: enumKey },\n ] as KeyPath[];\n const uniqueKey = `${JSON.stringify(keyPath)}-enumeration-${enumKey}`;\n\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 w-full\">\n <td className=\"flex w-full\">\n <div className=\"flex flex-1\">\n <Button\n label={removeEnumeration.label.value}\n variant=\"hoverable\"\n size=\"sm\"\n color=\"error\"\n className=\"ml-auto text-neutral hover:text-error\"\n Icon={Trash}\n onClick={() =>\n addEditedContent(\n dictionary.localId!,\n undefined,\n childrenKeyPath\n )\n }\n >\n {removeEnumeration.text}\n </Button>\n </div>\n </td>\n </tr>\n <tr className=\"w-full p-2\">\n <td className=\"flex w-full\">\n <EnumKeyInput\n value={enumKey}\n onChange={(value) => {\n const preValueContent = (\n section as EnumerationContent<string>\n )[NodeType.Enumeration];\n\n const newValueContent = renameKey(\n preValueContent,\n enumKey as keyof typeof preValueContent,\n value\n );\n const newValue = {\n ...(section as EnumerationContent<string>),\n [NodeType.Enumeration]: newValueContent,\n };\n\n console.log('newValue', newValue);\n\n addEditedContent(\n dictionary.localId!,\n newValue,\n keyPath\n );\n }}\n />\n </td>\n </tr>\n <tr className=\"block w-full\">\n <td className=\"flex w-full\">\n <TextEditor\n section={\n content[enumKey as keyof typeof content] ??\n getEmptyNode(content[firstKey])\n }\n keyPath={childrenKeyPath}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n\n <Button\n label={addNewEnumeration.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.NEUTRAL}\n textAlign={ButtonTextAlign.LEFT}\n isFullWidth\n onClick={() =>\n addEditedContent(\n dictionary.localId!,\n getEmptyNode(content[firstKey]) ?? '',\n [...keyPath, { type: NodeType.Enumeration, key: 'unknown' }]\n )\n }\n Icon={Plus}\n className=\"m-2\"\n >\n {addNewEnumeration.text}\n </Button>\n </div>\n );\n};\n\nconst ConditionTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const content = (section as ConditionContent<string>)[NodeType.Condition];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {['true', 'false', 'fallback'].map((condKey) => {\n const uniqueKey = `${JSON.stringify(keyPath)}-condition-${condKey}`;\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 block w-full p-2 text-xs\">\n <td className=\"flex w-full\">{String(condKey)}</td>\n </tr>\n <tr className=\"block w-full\">\n <td className=\"flex w-full\">\n <TextEditorContainer\n section={\n content[condKey as keyof typeof content] ??\n getEmptyNode(content.true)\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Condition,\n key: condKey,\n } as KeyPath,\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n );\n};\n\nconst GenderTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const content = (section as GenderContent<string>)[NodeType.Gender];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {['male', 'female', 'fallback'].map((condKey) => {\n const uniqueKey = `${JSON.stringify(keyPath)}-gender-${condKey}`;\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 block w-full p-2 text-xs\">\n <td className=\"flex w-full\">{String(condKey)}</td>\n </tr>\n <tr className=\"block w-full\">\n <td className=\"flex w-full\">\n <TextEditorContainer\n section={\n content[condKey as keyof typeof content] ??\n getEmptyNode(content.male)\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Gender,\n key: condKey,\n } as KeyPath,\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n );\n};\n\nconst ArrayTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const { addEditedContent } = useEditedContent();\n const { addNewElement, removeElement } = useIntlayer('navigation-view');\n\n return (\n <div className=\"flex flex-col gap-2\">\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {(section as unknown as ContentNode[]).map((subSection, index) => {\n const uniqueKey = `${JSON.stringify(keyPath)}-array-${index}`;\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 w-full p-2\">\n <td className=\"flex w-full\">\n <div className=\"flex w-full items-center justify-between gap-2\">\n <span className=\"text-xs\">{String(index)}</span>\n <Button\n label={removeElement.label.value}\n variant=\"hoverable\"\n size=\"sm\"\n color=\"error\"\n className=\"ml-auto text-neutral hover:text-error\"\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: index, // Fixed: Use index instead of length\n },\n ];\n addEditedContent(\n dictionary.localId!,\n undefined,\n newKeyPath\n );\n }}\n Icon={Trash}\n >\n {removeElement.text}\n </Button>\n </div>\n </td>\n </tr>\n\n <tr className=\"block w-full\">\n <td className=\"flex w-full\">\n <TextEditorContainer\n section={\n subSection ??\n getEmptyNode((section as unknown as ContentNode[])[0])\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Array,\n key: index,\n },\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n <Button\n label={addNewElement.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.NEUTRAL}\n textAlign={ButtonTextAlign.LEFT}\n isFullWidth\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: (section as unknown as ContentNode[]).length, // Keeps length for adding new items\n },\n ];\n addEditedContent(\n dictionary.localId!,\n getEmptyNode((section as unknown as ContentNode[])[0]) ?? '',\n newKeyPath,\n false\n );\n }}\n Icon={Plus}\n >\n {addNewElement.text}\n </Button>\n </div>\n );\n};\n\nconst ObjectTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => (\n <>\n <table className=\"w-full\">\n <tbody className=\"flex flex-col gap-2\">\n {Object.keys(section as unknown as Record<string, ContentNode>).map(\n (key) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: NodeType.Object, key },\n ];\n const typedSection = section as unknown as Record<\n string,\n ContentNode\n >;\n const firstKey = Object.keys(\n typedSection\n )[0] as keyof typeof section;\n const subSection =\n typedSection[key as keyof typeof section] ??\n getEmptyNode(typedSection[firstKey]);\n const uniqueKey = `${JSON.stringify(keyPath)}-object-${key}`;\n\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 p-2 text-xs\">\n <td className=\"flex w-full\">{String(key)}</td>\n </tr>\n <tr className=\"block w-full\">\n <td className=\"flex w-full\">\n <TextEditor\n section={subSection}\n keyPath={childKeyPath}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n }\n )}\n </tbody>\n </table>\n </>\n);\n\nenum MarkdownViewMode {\n Edit,\n Preview,\n}\n\nconst MarkdownTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n isDarkMode,\n}) => {\n const [mode, setMode] = useState(MarkdownViewMode.Edit);\n const toggleContent = [\n {\n content: 'Edit',\n value: MarkdownViewMode.Edit,\n },\n {\n content: 'Preview',\n value: MarkdownViewMode.Preview,\n },\n ] as SwitchSelectorChoices<MarkdownViewMode>;\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeType.Markdown }];\n\n const content = (section as MarkdownContent<ContentNode>)[\n NodeType.Markdown\n ] as ContentNode;\n\n return (\n <div className=\"flex w-full flex-col justify-center gap-6 p-2\">\n <SwitchSelector\n choices={toggleContent}\n value={mode}\n onChange={setMode}\n color={SwitchSelectorColor.TEXT}\n size={SwitchSelectorSize.SM}\n className=\"ml-auto\"\n />\n\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n dictionary={dictionary}\n renderSection={\n mode === MarkdownViewMode.Preview\n ? (content) => (\n <MarkdownRenderer isDarkMode={isDarkMode}>\n {content}\n </MarkdownRenderer>\n )\n : undefined\n }\n />\n </div>\n );\n};\n\nconst InsertionTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n ...props\n}) => {\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeType.Insertion }];\n\n const content = (section as InsertionContent<ContentNode>)[\n NodeType.Insertion\n ];\n\n return (\n <div className=\"flex w-full flex-col justify-center gap-6 p-2\">\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n {...props}\n />\n </div>\n );\n};\n\nconst FileTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n ...props\n}) => {\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeType.File }];\n\n const fileUrl = (section as FileContent)[NodeType.File];\n const { content } = section as FileContent;\n\n return (\n <div className=\"flex w-full flex-col justify-center gap-6 p-2\">\n <span className=\"text-neutral text-sm\">{fileUrl} </span>\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n {...props}\n />\n </div>\n );\n};\n\nconst NestedTextEditor: FC<TextEditorProps> = ({\n keyPath,\n dictionary,\n renderSection,\n section,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n\n const content = (section as any)[NodeType.Nested];\n const childrenKeyPath = [...keyPath, { type: NodeType.Nested }] as KeyPath[];\n\n return (\n <div className=\"flex w-full flex-col gap-4 p-2\">\n <Label>Dictionary key</Label>\n <ContentEditorInputBase\n aria-label=\"Edit field\"\n type=\"text\"\n variant={InputVariant.DEFAULT}\n {...props}\n onContentChange={(newValue) => {\n addEditedContent(\n dictionary.localId!,\n {\n ...content,\n dictionaryKey: String(newValue),\n },\n childrenKeyPath\n );\n }}\n >\n {content.dictionaryKey ?? ''}\n </ContentEditorInputBase>\n\n <Label>Path (optional)</Label>\n <ContentEditorInputBase\n aria-label=\"Edit field\"\n type=\"text\"\n variant={InputVariant.DEFAULT}\n {...props}\n onContentChange={(newValue) => {\n addEditedContent(\n dictionary.localId!,\n {\n ...content,\n path: newValue !== '' ? newValue : undefined,\n },\n childrenKeyPath\n );\n }}\n >\n {content.path ?? ''}\n </ContentEditorInputBase>\n </div>\n );\n};\n\nexport const TextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n isDarkMode,\n}) => {\n const { tsxNotEditable } = useIntlayer('navigation-view');\n const nodeType = getNodeType(section);\n\n if (nodeType === NodeType.ReactNode) {\n return (\n <div className=\"flex w-full flex-col gap-2\">\n <span>(React Node)</span>\n <span className=\"flex text-neutral text-xs\">{tsxNotEditable}</span>\n </div>\n );\n }\n\n if (nodeType === NodeType.Nested) {\n return (\n <NestedTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Translation) {\n return (\n <TranslationTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Enumeration) {\n return (\n <EnumerationTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Condition) {\n return (\n <ConditionTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Gender) {\n return (\n <GenderTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Insertion) {\n return (\n <InsertionTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Markdown) {\n return (\n <MarkdownTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n isDarkMode={isDarkMode}\n />\n );\n }\n\n if (nodeType === NodeType.File) {\n return (\n <FileTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Array) {\n return (\n <ArrayTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Object) {\n return (\n <ObjectTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Number) {\n return (\n <div className=\"w-full p-2\">\n <ContentEditorInput\n dictionary={dictionary}\n keyPath={keyPath}\n type=\"number\"\n aria-label=\"Edit field\"\n >\n {section as number}\n </ContentEditorInput>\n </div>\n );\n }\n\n if (nodeType === NodeType.Text) {\n return (\n <div className=\"w-full p-2\">\n {typeof renderSection === 'function' ? (\n renderSection(section as string)\n ) : (\n <ContentEditorTextArea\n variant={InputVariant.DEFAULT}\n aria-label=\"Edit field\"\n keyPath={keyPath}\n dictionary={dictionary}\n >\n {section as string}\n </ContentEditorTextArea>\n )}\n </div>\n );\n }\n\n if (nodeType === NodeType.Boolean) {\n return (\n <div className=\"w-full p-2\">\n <ContentEditorToggle\n dictionary={dictionary}\n keyPath={keyPath}\n value={section as boolean}\n />\n </div>\n );\n }\n\n return (\n <div className=\"w-full p-2\">\n Error. Format not supported.\n {JSON.stringify(section, null, 2)}\n {JSON.stringify(keyPath, null, 2)}\n NodeType : {nodeType}\n </div>\n );\n};\n\nexport const TextEditorContainer: FC<TextEditorProps> = (props) => (\n <Container\n border\n background=\"none\"\n className=\"top-6 flex h-full flex-1 flex-col gap-6 overflow-hidden p-2 md:sticky\"\n roundedSize=\"xl\"\n >\n <TextEditor {...props} />\n </Container>\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAyDA,MAAa,YAAsB;CAAC;CAAY;CAAM;CAAW;AAUjE,MAAM,yBAAyD,EAC7D,SACA,YACA,GAAG,YACC;CACJ,MAAM,EAAE,eAAe,qBAAqB,kBAAkB;CAC9D,MAAM,gBAAgB,kBAAkB;CACxC,MAAM,EAAE,QAAQ,8BAA8B,WAAW,eACvD,iCAAiC;AAEnC,QACE,oBAACA;EACC,SAAS,aAAa;EACtB,kBAAkB,aAChB,iBAAiB,WAAW,SAAU,UAAU,QAAQ;EAE1D,mBACE,oBAAC;GACC,MAAM;GACN,OAAM;GACN,SAAS,cAAc;GACvB,MAAM,WAAW;GACjB,OAAO,YAAY;GACnB,WAAU;GACV,WAAW;GACX,eAAe;AACb,iCACE;KACE,aAAa,KAAK,UAAU;MAC1B,GAAG;MACH,GAAI,gBAAgB,WAAW,YAAa,EAAE;MAC/C,CAAC;KACF;KACA,SAAS,cAAc,qBAAqB,WAAW,EAAE;KACzD,WAAW;MACT,QAAQ,cAAc,IAAI;MAC1B,OAAO,cAAc,IAAI;MACzB,aAAa,cAAc,IAAI;MAChC;KACF,EACD,EACE,YAAY,aAAa;AACvB,SAAI,CAAC,UAAU,KAAM;AAErB,SAAI;MACF,MAAMC,kBAAgB,SAAS,KAAK;AAEpC,uBACE,WAAW,SACXA,iBACA,QACD;cACM,OAAO;AACd,cAAQ,MAAM,MAAM;;OAGzB,CACF;;IAEH;EAEJ,GAAI;GACJ;;AAYN,MAAM,sBAAmD,EACvD,SACA,YACA,GAAG,YACC;CACJ,MAAM,EAAE,qBAAqB,kBAAkB;AAE/C,QACE,oBAACC;EACC,SAAS,aAAa;EACtB,kBAAkB,aAChB,iBAAiB,WAAW,SAAU,UAAU,QAAQ;EAE1D,GAAI;GACJ;;AAIN,MAAM,gBAAgB,CACpB;CACE,SAAS;CACT,OAAO;CACR,EACD;CACE,SAAS;CACT,OAAO;CACR,CACF;AAOD,MAAM,uBAAqD,EACzD,YACA,SACA,GAAG,YACC;CACJ,MAAM,EAAE,qBAAqB,kBAAkB;AAE/C,QACE,oBAAC;EACC,SAAS;EACT,OAAO;EACP,WAAW,UACT,iBAAiB,WAAW,SAAU,OAAO,QAAQ;EAEvD,OAAO,oBAAoB;EAC3B,MAAM,mBAAmB;EACzB,GAAI;GACJ;;AAaN,MAAM,yBAA8C,EAClD,SACA,SACA,YACA,oBACqB;CACrB,MAAM,EAAE,QAAQ,kBAAkB,WAAW;CAC7C,MAAM,EAAE,iBAAiB,qBAAqB,0BAA0B;CAExE,MAAM,iBAAkB,QACtB,SAAS;CAGX,MAAM,qBAAqB,OAAO,KAAK,eAAe;CAItD,MAAM,cAFa,iBAAiB,SAAS,gBAAgB,SAGzD,kBAEA,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,kBAAkB,GAAG,mBAAmB,CAAC,CAAC;CAE9D,MAAM,UAAgB,QACpB,SAAS;AAGX,QACE,oBAAC;EAAM,WAAU;YACf,oBAAC;GAAM,WAAU;aACd,YAAY,KAAK,mBAAmB;IACnC,MAAM,YAAY,GAAG,KAAK,UAAU,QAAQ,CAAC,eAAe;AAC5D,WACE,qBAAC,uBACC,oBAAC;KAAG,WAAU;eACZ,oBAAC;MAAG,WAAU;gBACX,cAAc,gBAAgB,OAAO;OACnC;MACF,EACL,oBAAC;KAAG,WAAU;eACZ,oBAAC;MAAG,WAAU;gBACZ,oBAAC;OACC,SACE,QAAQ,mBACR,aAAa,QAAQ,eAAe;OAEtC,SAAS,CACP,GAAG,SACH;QAAE,MAAM,SAAS;QAAa,KAAK;QAAgB,CACpD;OACW;OACG;QACf;OACC;MACF,KArBQ,UAsBJ;KAEb;IACI;GACF;;AAIZ,MAAM,yBAA8C,EAClD,SACA,SACA,YACA,oBACI;CACJ,MAAM,EAAE,qBAAqB,kBAAkB;CAC/C,MAAM,EAAE,mBAAmB,sBACzB,YAAY,kBAAkB;CAEhC,MAAM,UAAW,QAAuC,SAAS;CACjE,MAAM,WAAW,OAAO,KAAK,QAAQ,CAAC;AAEtC,QACE,qBAAC;EAAI,WAAU;aACb,oBAAC;GAAM,WAAU;aACf,oBAAC;IAAM,WAAU;cACd,OAAO,KACL,QAA4C,SAAS,aACvD,CAAC,KAAK,YAAY;KACjB,MAAM,kBAAkB,CACtB,GAAG,SACH;MAAE,MAAM,SAAS;MAAa,KAAK;MAAS,CAC7C;KACD,MAAM,YAAY,GAAG,KAAK,UAAU,QAAQ,CAAC,eAAe;AAE5D,YACE,qBAAC;MACC,oBAAC;OAAG,WAAU;iBACZ,oBAAC;QAAG,WAAU;kBACZ,oBAAC;SAAI,WAAU;mBACb,oBAAC;UACC,OAAO,kBAAkB,MAAM;UAC/B,SAAQ;UACR,MAAK;UACL,OAAM;UACN,WAAU;UACV,MAAM;UACN,eACE,iBACE,WAAW,SACX,QACA,gBACD;oBAGF,kBAAkB;WACZ;UACL;SACH;QACF;MACL,oBAAC;OAAG,WAAU;iBACZ,oBAAC;QAAG,WAAU;kBACZ,oBAAC;SACC,OAAO;SACP,WAAW,UAAU;UACnB,MAAM,kBACJ,QACA,SAAS;UAEX,MAAM,kBAAkB,UACtB,iBACA,SACA,MACD;UACD,MAAM,WAAW;WACf,GAAI;YACH,SAAS,cAAc;WACzB;AAED,kBAAQ,IAAI,YAAY,SAAS;AAEjC,2BACE,WAAW,SACX,UACA,QACD;;UAEH;SACC;QACF;MACL,oBAAC;OAAG,WAAU;iBACZ,oBAAC;QAAG,WAAU;kBACZ,oBAAC;SACC,SACE,QAAQ,YACR,aAAa,QAAQ,UAAU;SAEjC,SAAS;SACG;SACG;UACf;SACC;QACF;UAlEQ,UAmEJ;MAEb;KACI;IACF,EAER,oBAAC;GACC,OAAO,kBAAkB,MAAM;GAC/B,SAAS,cAAc;GACvB,OAAO,YAAY;GACnB,WAAW,gBAAgB;GAC3B;GACA,eACE,iBACE,WAAW,SACX,aAAa,QAAQ,UAAU,IAAI,IACnC,CAAC,GAAG,SAAS;IAAE,MAAM,SAAS;IAAa,KAAK;IAAW,CAAC,CAC7D;GAEH,MAAM;GACN,WAAU;aAET,kBAAkB;IACZ;GACL;;AAIV,MAAM,uBAA4C,EAChD,SACA,SACA,YACA,oBACI;CACJ,MAAM,UAAW,QAAqC,SAAS;AAE/D,QACE,oBAAC;EAAM,WAAU;YACf,oBAAC;GAAM,WAAU;aACd;IAAC;IAAQ;IAAS;IAAW,CAAC,KAAK,YAAY;IAC9C,MAAM,YAAY,GAAG,KAAK,UAAU,QAAQ,CAAC,aAAa;AAC1D,WACE,qBAAC,uBACC,oBAAC;KAAG,WAAU;eACZ,oBAAC;MAAG,WAAU;gBAAe,OAAO,QAAQ;OAAM;MAC/C,EACL,oBAAC;KAAG,WAAU;eACZ,oBAAC;MAAG,WAAU;gBACZ,oBAAC;OACC,SACE,QAAQ,YACR,aAAa,QAAQ,KAAK;OAE5B,SAAS,CACP,GAAG,SACH;QACE,MAAM,SAAS;QACf,KAAK;QACN,CACF;OACW;OACG;QACf;OACC;MACF,KAtBQ,UAuBJ;KAEb;IACI;GACF;;AAIZ,MAAM,oBAAyC,EAC7C,SACA,SACA,YACA,oBACI;CACJ,MAAM,UAAW,QAAkC,SAAS;AAE5D,QACE,oBAAC;EAAM,WAAU;YACf,oBAAC;GAAM,WAAU;aACd;IAAC;IAAQ;IAAU;IAAW,CAAC,KAAK,YAAY;IAC/C,MAAM,YAAY,GAAG,KAAK,UAAU,QAAQ,CAAC,UAAU;AACvD,WACE,qBAAC,uBACC,oBAAC;KAAG,WAAU;eACZ,oBAAC;MAAG,WAAU;gBAAe,OAAO,QAAQ;OAAM;MAC/C,EACL,oBAAC;KAAG,WAAU;eACZ,oBAAC;MAAG,WAAU;gBACZ,oBAAC;OACC,SACE,QAAQ,YACR,aAAa,QAAQ,KAAK;OAE5B,SAAS,CACP,GAAG,SACH;QACE,MAAM,SAAS;QACf,KAAK;QACN,CACF;OACW;OACG;QACf;OACC;MACF,KAtBQ,UAuBJ;KAEb;IACI;GACF;;AAIZ,MAAM,mBAAwC,EAC5C,SACA,SACA,YACA,oBACI;CACJ,MAAM,EAAE,qBAAqB,kBAAkB;CAC/C,MAAM,EAAE,eAAe,kBAAkB,YAAY,kBAAkB;AAEvE,QACE,qBAAC;EAAI,WAAU;aACb,oBAAC;GAAM,WAAU;aACf,oBAAC;IAAM,WAAU;cACb,QAAqC,KAAK,YAAY,UAAU;KAChE,MAAM,YAAY,GAAG,KAAK,UAAU,QAAQ,CAAC,SAAS;AACtD,YACE,qBAAC,uBACC,oBAAC;MAAG,WAAU;gBACZ,oBAAC;OAAG,WAAU;iBACZ,qBAAC;QAAI,WAAU;mBACb,oBAAC;SAAK,WAAU;mBAAW,OAAO,MAAM;UAAQ,EAChD,oBAAC;SACC,OAAO,cAAc,MAAM;SAC3B,SAAQ;SACR,MAAK;SACL,OAAM;SACN,WAAU;SACV,eAAe;UACb,MAAM,aAAwB,CAC5B,GAAG,SACH;WACE,MAAM,SAAS;WACf,KAAK;WACN,CACF;AACD,2BACE,WAAW,SACX,QACA,WACD;;SAEH,MAAM;mBAEL,cAAc;UACR;SACL;QACH;OACF,EAEL,oBAAC;MAAG,WAAU;gBACZ,oBAAC;OAAG,WAAU;iBACZ,oBAAC;QACC,SACE,cACA,aAAc,QAAqC,GAAG;QAExD,SAAS,CACP,GAAG,SACH;SACE,MAAM,SAAS;SACf,KAAK;SACN,CACF;QACW;QACG;SACf;QACC;OACF,KAnDQ,UAoDJ;MAEb;KACI;IACF,EACR,oBAAC;GACC,OAAO,cAAc,MAAM;GAC3B,SAAS,cAAc;GACvB,OAAO,YAAY;GACnB,WAAW,gBAAgB;GAC3B;GACA,eAAe;IACb,MAAM,aAAwB,CAC5B,GAAG,SACH;KACE,MAAM,SAAS;KACf,KAAM,QAAqC;KAC5C,CACF;AACD,qBACE,WAAW,SACX,aAAc,QAAqC,GAAG,IAAI,IAC1D,YACA,MACD;;GAEH,MAAM;aAEL,cAAc;IACR;GACL;;AAIV,MAAM,oBAAyC,EAC7C,SACA,SACA,YACA,oBAEA,4CACE,oBAAC;CAAM,WAAU;WACf,oBAAC;EAAM,WAAU;YACd,OAAO,KAAK,QAAkD,CAAC,KAC7D,QAAQ;GACP,MAAM,eAA0B,CAC9B,GAAG,SACH;IAAE,MAAM,SAAS;IAAQ;IAAK,CAC/B;GACD,MAAM,eAAe;GAIrB,MAAM,WAAW,OAAO,KACtB,aACD,CAAC;GACF,MAAM,aACJ,aAAa,QACb,aAAa,aAAa,UAAU;GACtC,MAAM,YAAY,GAAG,KAAK,UAAU,QAAQ,CAAC,UAAU;AAEvD,UACE,qBAAC,uBACC,oBAAC;IAAG,WAAU;cACZ,oBAAC;KAAG,WAAU;eAAe,OAAO,IAAI;MAAM;KAC3C,EACL,oBAAC;IAAG,WAAU;cACZ,oBAAC;KAAG,WAAU;eACZ,oBAAC;MACC,SAAS;MACT,SAAS;MACG;MACG;OACf;MACC;KACF,KAbQ,UAcJ;IAGhB;GACK;EACF,GACP;AAGL,IAAK,gEAAL;AACE;AACA;;EAFG;AAKL,MAAM,sBAA2C,EAC/C,SACA,SACA,YACA,iBACI;CACJ,MAAM,CAAC,MAAM,WAAW,SAAS,iBAAiB,KAAK;CACvD,MAAMC,kBAAgB,CACpB;EACE,SAAS;EACT,OAAO,iBAAiB;EACzB,EACD;EACE,SAAS;EACT,OAAO,iBAAiB;EACzB,CACF;CACD,MAAM,eAA0B,CAAC,GAAG,SAAS,EAAE,MAAM,SAAS,UAAU,CAAC;CAEzE,MAAM,UAAW,QACf,SAAS;AAGX,QACE,qBAAC;EAAI,WAAU;aACb,oBAAC;GACC,SAASA;GACT,OAAO;GACP,UAAU;GACV,OAAO,oBAAoB;GAC3B,MAAM,mBAAmB;GACzB,WAAU;IACV,EAEF,oBAAC;GACC,SAAS;GACT,SAAS;GACG;GACZ,eACE,SAAS,iBAAiB,WACrB,cACC,oBAAC;IAA6B;cAC3BC;KACgB,GAErB;IAEN;GACE;;AAIV,MAAM,uBAA4C,EAChD,SACA,SACA,GAAG,YACC;CACJ,MAAM,eAA0B,CAAC,GAAG,SAAS,EAAE,MAAM,SAAS,WAAW,CAAC;CAE1E,MAAM,UAAW,QACf,SAAS;AAGX,QACE,oBAAC;EAAI,WAAU;YACb,oBAAC;GACC,SAAS;GACT,SAAS;GACT,GAAI;IACJ;GACE;;AAIV,MAAM,kBAAuC,EAC3C,SACA,SACA,GAAG,YACC;CACJ,MAAM,eAA0B,CAAC,GAAG,SAAS,EAAE,MAAM,SAAS,MAAM,CAAC;CAErE,MAAM,UAAW,QAAwB,SAAS;CAClD,MAAM,EAAE,YAAY;AAEpB,QACE,qBAAC;EAAI,WAAU;aACb,qBAAC;GAAK,WAAU;cAAwB,SAAQ;IAAQ,EACxD,oBAAC;GACC,SAAS;GACT,SAAS;GACT,GAAI;IACJ;GACE;;AAIV,MAAM,oBAAyC,EAC7C,SACA,YACA,eACA,SACA,GAAG,YACC;CACJ,MAAM,EAAE,qBAAqB,kBAAkB;CAE/C,MAAM,UAAW,QAAgB,SAAS;CAC1C,MAAM,kBAAkB,CAAC,GAAG,SAAS,EAAE,MAAM,SAAS,QAAQ,CAAC;AAE/D,QACE,qBAAC;EAAI,WAAU;;GACb,oBAAC,mBAAM,mBAAsB;GAC7B,oBAACF;IACC,cAAW;IACX,MAAK;IACL,SAAS,aAAa;IACtB,GAAI;IACJ,kBAAkB,aAAa;AAC7B,sBACE,WAAW,SACX;MACE,GAAG;MACH,eAAe,OAAO,SAAS;MAChC,EACD,gBACD;;cAGF,QAAQ,iBAAiB;KACH;GAEzB,oBAAC,mBAAM,oBAAuB;GAC9B,oBAACA;IACC,cAAW;IACX,MAAK;IACL,SAAS,aAAa;IACtB,GAAI;IACJ,kBAAkB,aAAa;AAC7B,sBACE,WAAW,SACX;MACE,GAAG;MACH,MAAM,aAAa,KAAK,WAAW;MACpC,EACD,gBACD;;cAGF,QAAQ,QAAQ;KACM;;GACrB;;AAIV,MAAa,cAAmC,EAC9C,SACA,SACA,YACA,eACA,iBACI;CACJ,MAAM,EAAE,mBAAmB,YAAY,kBAAkB;CACzD,MAAM,WAAW,YAAY,QAAQ;AAErC,KAAI,aAAa,SAAS,UACxB,QACE,qBAAC;EAAI,WAAU;aACb,oBAAC,oBAAK,iBAAmB,EACzB,oBAAC;GAAK,WAAU;aAA6B;IAAsB;GAC/D;AAIV,KAAI,aAAa,SAAS,OACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,YACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,YACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,UACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,OACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,UACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,SACxB,QACE,oBAAC;EACa;EACH;EACA;EACG;GACZ;AAIN,KAAI,aAAa,SAAS,KACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,MACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,OACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,OACxB,QACE,oBAAC;EAAI,WAAU;YACb,oBAAC;GACa;GACH;GACT,MAAK;GACL,cAAW;aAEV;IACkB;GACjB;AAIV,KAAI,aAAa,SAAS,KACxB,QACE,oBAAC;EAAI,WAAU;YACZ,OAAO,kBAAkB,aACxB,cAAc,QAAkB,GAEhC,oBAAC;GACC,SAAS,aAAa;GACtB,cAAW;GACF;GACG;aAEX;IACqB;GAEtB;AAIV,KAAI,aAAa,SAAS,QACxB,QACE,oBAAC;EAAI,WAAU;YACb,oBAAC;GACa;GACH;GACT,OAAO;IACP;GACE;AAIV,QACE,qBAAC;EAAI,WAAU;;GAAa;GAEzB,KAAK,UAAU,SAAS,MAAM,EAAE;GAChC,KAAK,UAAU,SAAS,MAAM,EAAE;GAAC;GACtB;;GACR;;AAIV,MAAa,uBAA4C,UACvD,oBAAC;CACC;CACA,YAAW;CACX,WAAU;CACV,aAAY;WAEZ,oBAAC,cAAW,GAAI,QAAS;EACf"}
@@ -1 +1 @@
1
- {"version":3,"file":"DictionaryCreationForm.mjs","names":["DictionaryCreationForm: FC<DictionaryCreationFormProps>","project"],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.tsx"],"sourcesContent":["'use client';\n\nimport { ButtonColor } from '@components/Button';\nimport { Form, useForm } from '@components/Form';\nimport { MultiSelect } from '@components/Select';\nimport { useAddDictionary, useGetProjects } from '@hooks/reactQuery';\nimport { useSession } from '@hooks/useAuth';\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport {\n type DictionaryFormData,\n useDictionarySchema,\n} from './useDictionaryFormSchema';\n\ntype DictionaryCreationFormProps = {\n onDictionaryCreated?: () => void;\n};\n\nexport const DictionaryCreationForm: FC<DictionaryCreationFormProps> = ({\n onDictionaryCreated,\n}) => {\n const { session } = useSession();\n const { project } = session ?? {};\n const { mutate: addDictionary, isPending } = useAddDictionary();\n const { data: projectsData } = useGetProjects();\n const DictionarySchema = useDictionarySchema(String(project?.id));\n const { form, isSubmitting } = useForm(DictionarySchema);\n const { keyInput, createDictionaryButton, projectInput } =\n useIntlayer('dictionary-form');\n\n const onSubmitSuccess = (data: DictionaryFormData) => {\n addDictionary(\n { dictionary: data },\n {\n onSuccess: () => {\n onDictionaryCreated?.();\n },\n }\n );\n };\n\n return (\n <Form\n schema={DictionarySchema}\n onSubmitSuccess={onSubmitSuccess}\n className=\"m-auto w-full max-w-[400px]\"\n {...form}\n >\n <Form.Input\n name=\"key\"\n label={keyInput.label.value}\n placeholder={keyInput.placeholder.value}\n isRequired\n />\n\n <Form.MultiSelect name=\"projectIds\" label={projectInput.label.value}>\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n projectsData?.data?.find((project) => String(project.id) === value)\n ?.name ?? value\n }\n >\n <MultiSelect.Input placeholder={projectInput.placeholder.value} />\n </MultiSelect.Trigger>\n <MultiSelect.Content>\n <MultiSelect.List>\n {projectsData?.data?.map((project) => (\n <MultiSelect.Item\n key={String(project.id)}\n value={String(project.id)}\n >\n {project.name}\n </MultiSelect.Item>\n ))}\n </MultiSelect.List>\n </MultiSelect.Content>\n </Form.MultiSelect>\n\n <Form.Button\n className=\"mt-12 ml-auto\"\n type=\"submit\"\n color={ButtonColor.TEXT}\n isLoading={isSubmitting || isPending}\n label={createDictionaryButton.ariaLabel.value}\n isFullWidth\n >\n {createDictionaryButton.text}\n </Form.Button>\n </Form>\n );\n};\n"],"mappings":";;;;;;;;;;;;;AAkBA,MAAaA,0BAA2D,EACtE,0BACI;CACJ,MAAM,EAAE,YAAY,YAAY;CAChC,MAAM,EAAE,YAAY,WAAW,EAAE;CACjC,MAAM,EAAE,QAAQ,eAAe,cAAc,kBAAkB;CAC/D,MAAM,EAAE,MAAM,iBAAiB,gBAAgB;CAC/C,MAAM,mBAAmB,oBAAoB,OAAO,SAAS,GAAG,CAAC;CACjE,MAAM,EAAE,MAAM,iBAAiB,QAAQ,iBAAiB;CACxD,MAAM,EAAE,UAAU,wBAAwB,iBACxC,YAAY,kBAAkB;CAEhC,MAAM,mBAAmB,SAA6B;AACpD,gBACE,EAAE,YAAY,MAAM,EACpB,EACE,iBAAiB;AACf,0BAAuB;KAE1B,CACF;;AAGH,QACE,qBAAC;EACC,QAAQ;EACS;EACjB,WAAU;EACV,GAAI;;GAEJ,oBAAC,KAAK;IACJ,MAAK;IACL,OAAO,SAAS,MAAM;IACtB,aAAa,SAAS,YAAY;IAClC;KACA;GAEF,qBAAC,KAAK;IAAY,MAAK;IAAa,OAAO,aAAa,MAAM;eAC5D,oBAAC,YAAY;KACX,gBAAgB,UACd,cAAc,MAAM,MAAM,cAAY,OAAOC,UAAQ,GAAG,KAAK,MAAM,EAC/D,QAAQ;eAGd,oBAAC,YAAY,SAAM,aAAa,aAAa,YAAY,QAAS;MAC9C,EACtB,oBAAC,YAAY,qBACX,oBAAC,YAAY,kBACV,cAAc,MAAM,KAAK,cACxB,oBAAC,YAAY;KAEX,OAAO,OAAOA,UAAQ,GAAG;eAExBA,UAAQ;OAHJ,OAAOA,UAAQ,GAAG,CAIN,CACnB,GACe,GACC;KACL;GAEnB,oBAAC,KAAK;IACJ,WAAU;IACV,MAAK;IACL,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,OAAO,uBAAuB,UAAU;IACxC;cAEC,uBAAuB;KACZ;;GACT"}
1
+ {"version":3,"file":"DictionaryCreationForm.mjs","names":["project"],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.tsx"],"sourcesContent":["'use client';\n\nimport { ButtonColor } from '@components/Button';\nimport { Form, useForm } from '@components/Form';\nimport { MultiSelect } from '@components/Select';\nimport { useAddDictionary, useGetProjects } from '@hooks/reactQuery';\nimport { useSession } from '@hooks/useAuth';\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport {\n type DictionaryFormData,\n useDictionarySchema,\n} from './useDictionaryFormSchema';\n\ntype DictionaryCreationFormProps = {\n onDictionaryCreated?: () => void;\n};\n\nexport const DictionaryCreationForm: FC<DictionaryCreationFormProps> = ({\n onDictionaryCreated,\n}) => {\n const { session } = useSession();\n const { project } = session ?? {};\n const { mutate: addDictionary, isPending } = useAddDictionary();\n const { data: projectsData } = useGetProjects();\n const DictionarySchema = useDictionarySchema(String(project?.id));\n const { form, isSubmitting } = useForm(DictionarySchema);\n const { keyInput, createDictionaryButton, projectInput } =\n useIntlayer('dictionary-form');\n\n const onSubmitSuccess = (data: DictionaryFormData) => {\n addDictionary(\n { dictionary: data },\n {\n onSuccess: () => {\n onDictionaryCreated?.();\n },\n }\n );\n };\n\n return (\n <Form\n schema={DictionarySchema}\n onSubmitSuccess={onSubmitSuccess}\n className=\"m-auto w-full max-w-[400px]\"\n {...form}\n >\n <Form.Input\n name=\"key\"\n label={keyInput.label.value}\n placeholder={keyInput.placeholder.value}\n isRequired\n />\n\n <Form.MultiSelect name=\"projectIds\" label={projectInput.label.value}>\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n projectsData?.data?.find((project) => String(project.id) === value)\n ?.name ?? value\n }\n >\n <MultiSelect.Input placeholder={projectInput.placeholder.value} />\n </MultiSelect.Trigger>\n <MultiSelect.Content>\n <MultiSelect.List>\n {projectsData?.data?.map((project) => (\n <MultiSelect.Item\n key={String(project.id)}\n value={String(project.id)}\n >\n {project.name}\n </MultiSelect.Item>\n ))}\n </MultiSelect.List>\n </MultiSelect.Content>\n </Form.MultiSelect>\n\n <Form.Button\n className=\"mt-12 ml-auto\"\n type=\"submit\"\n color={ButtonColor.TEXT}\n isLoading={isSubmitting || isPending}\n label={createDictionaryButton.ariaLabel.value}\n isFullWidth\n >\n {createDictionaryButton.text}\n </Form.Button>\n </Form>\n );\n};\n"],"mappings":";;;;;;;;;;;;;AAkBA,MAAa,0BAA2D,EACtE,0BACI;CACJ,MAAM,EAAE,YAAY,YAAY;CAChC,MAAM,EAAE,YAAY,WAAW,EAAE;CACjC,MAAM,EAAE,QAAQ,eAAe,cAAc,kBAAkB;CAC/D,MAAM,EAAE,MAAM,iBAAiB,gBAAgB;CAC/C,MAAM,mBAAmB,oBAAoB,OAAO,SAAS,GAAG,CAAC;CACjE,MAAM,EAAE,MAAM,iBAAiB,QAAQ,iBAAiB;CACxD,MAAM,EAAE,UAAU,wBAAwB,iBACxC,YAAY,kBAAkB;CAEhC,MAAM,mBAAmB,SAA6B;AACpD,gBACE,EAAE,YAAY,MAAM,EACpB,EACE,iBAAiB;AACf,0BAAuB;KAE1B,CACF;;AAGH,QACE,qBAAC;EACC,QAAQ;EACS;EACjB,WAAU;EACV,GAAI;;GAEJ,oBAAC,KAAK;IACJ,MAAK;IACL,OAAO,SAAS,MAAM;IACtB,aAAa,SAAS,YAAY;IAClC;KACA;GAEF,qBAAC,KAAK;IAAY,MAAK;IAAa,OAAO,aAAa,MAAM;eAC5D,oBAAC,YAAY;KACX,gBAAgB,UACd,cAAc,MAAM,MAAM,cAAY,OAAOA,UAAQ,GAAG,KAAK,MAAM,EAC/D,QAAQ;eAGd,oBAAC,YAAY,SAAM,aAAa,aAAa,YAAY,QAAS;MAC9C,EACtB,oBAAC,YAAY,qBACX,oBAAC,YAAY,kBACV,cAAc,MAAM,KAAK,cACxB,oBAAC,YAAY;KAEX,OAAO,OAAOA,UAAQ,GAAG;eAExBA,UAAQ;OAHJ,OAAOA,UAAQ,GAAG,CAIN,CACnB,GACe,GACC;KACL;GAEnB,oBAAC,KAAK;IACJ,WAAU;IACV,MAAK;IACL,OAAO,YAAY;IACnB,WAAW,gBAAgB;IAC3B,OAAO,uBAAuB,UAAU;IACxC;cAEC,uBAAuB;KACZ;;GACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"DictionaryDetailsForm.mjs","names":["DictionaryDetailsForm: FC<DictionaryDetailsProps>","project"],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.tsx"],"sourcesContent":["'use client';\n\nimport { ButtonColor, ButtonSize, ButtonVariant } from '@components/Button';\nimport { Container } from '@components/Container';\nimport { Form, useForm } from '@components/Form';\nimport { Loader } from '@components/Loader';\nimport { MultiSelect } from '@components/Select';\nimport {\n useAuditContentDeclarationMetadata,\n useGetProjects,\n useGetTags,\n} from '@hooks/reactQuery';\nimport { useSession } from '@hooks/useAuth';\nimport { useEditedContent } from '@intlayer/editor-react';\nimport type { Dictionary, LocalDictionaryId } from '@intlayer/types';\nimport { WandSparkles } from 'lucide-react';\nimport { type FC, useEffect } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { useDictionaryDetailsSchema } from './useDictionaryDetailsSchema';\n\ntype DictionaryDetailsProps = {\n dictionary: Dictionary;\n};\n\nexport const DictionaryDetailsForm: FC<DictionaryDetailsProps> = ({\n dictionary,\n}) => {\n const { session } = useSession();\n const { project } = session ?? {};\n const { data: projects, isLoading: isLoadingProjects } = useGetProjects();\n const { data: tags } = useGetTags();\n\n const DictionaryDetailsSchema = useDictionaryDetailsSchema(\n String(project?.id)\n );\n const { form, isSubmitting } = useForm(DictionaryDetailsSchema, {\n defaultValues: dictionary,\n });\n const { editedContent, setEditedDictionary } = useEditedContent();\n const {\n titleInput,\n keyInput,\n descriptionInput,\n projectInput,\n tagsSelect,\n auditButton,\n } = useIntlayer('dictionary-details');\n const { mutate: auditContentDeclaration, isPending: isAuditing } =\n useAuditContentDeclarationMetadata();\n const updatedDictionary =\n editedContent?.[dictionary.localId as LocalDictionaryId];\n\n useEffect(() => {\n form.reset(dictionary);\n }, [dictionary, form?.reset]);\n\n useEffect(() => {\n if (typeof updatedDictionary === 'undefined') {\n form.reset(dictionary);\n }\n }, [updatedDictionary]);\n\n const handleOnAuditFile = () => {\n const dictionaryToAudit = {\n ...dictionary,\n ...updatedDictionary,\n };\n\n auditContentDeclaration(\n {\n fileContent: JSON.stringify(dictionaryToAudit),\n },\n {\n onSuccess: (response) => {\n if (!response?.data) return;\n\n try {\n const auditedDictionary = response.data.fileContent;\n\n setEditedDictionary((prev) => ({\n ...prev,\n ...dictionaryToAudit,\n ...auditedDictionary,\n }));\n form.reset({\n ...dictionaryToAudit,\n ...auditedDictionary,\n });\n } catch (error) {\n console.error(error);\n }\n },\n }\n );\n };\n\n return (\n <Container\n background=\"none\"\n border\n roundedSize=\"2xl\"\n className=\"w-full px-5 pt-5 pb-3\"\n >\n <Form\n className=\"flex w-full flex-col gap-8\"\n {...form}\n schema={DictionaryDetailsSchema}\n onChange={(data) => {\n setEditedDictionary((prev) => ({\n ...prev,\n ...data,\n }));\n }}\n >\n <div className=\"flex w-full flex-1 gap-8 max-md:flex-col\">\n <Form.EditableFieldInput\n name=\"key\"\n label={keyInput.label}\n placeholder={keyInput.label.value}\n description={keyInput.description}\n disabled={isSubmitting}\n isRequired\n onSave={(value) => {\n form.setValue('key', value);\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n key: value,\n }));\n }}\n />\n <Form.EditableFieldInput\n name=\"title\"\n label={titleInput.label}\n placeholder={titleInput.placeholder.value}\n description={titleInput.description}\n disabled={isSubmitting}\n onSave={(value) => {\n form.setValue('title', value);\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n title: value,\n }));\n }}\n />\n </div>\n <Form.EditableFieldTextArea\n name=\"description\"\n label={descriptionInput.label}\n placeholder={descriptionInput.placeholder.value}\n description={descriptionInput.description}\n disabled={isSubmitting}\n onSave={(value) => {\n form.setValue('description', value);\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n description: value,\n }));\n }}\n />\n <div className=\"flex size-full flex-1 gap-8 max-md:flex-col\">\n <Form.MultiSelect\n name=\"projectIds\"\n label={projectInput.label.value}\n description={projectInput.description.value}\n onValueChange={(value) => {\n const valueArray = [value].flat();\n form.setValue('projectIds', valueArray);\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n projectIds: valueArray,\n }));\n }}\n >\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n projects?.data?.find((project) => String(project.id) === value)\n ?.name ?? value\n }\n >\n <MultiSelect.Input placeholder={projectInput.placeholder.value} />\n </MultiSelect.Trigger>\n <MultiSelect.Content>\n <Loader isLoading={isLoadingProjects}>\n <MultiSelect.List>\n {projects?.data?.map((project) => (\n <MultiSelect.Item\n key={String(project.id)}\n value={String(project.id)}\n >\n {project.name}\n </MultiSelect.Item>\n ))}\n </MultiSelect.List>\n </Loader>\n </MultiSelect.Content>\n </Form.MultiSelect>\n\n <Form.MultiSelect\n name=\"tags\"\n label={tagsSelect.label.value}\n description={tagsSelect.description.value}\n onValueChange={(value) => {\n form.setValue('tags', [value].flat());\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n tags: [value].flat(),\n }));\n }}\n >\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n projects?.data?.find((project) => String(project.id) === value)\n ?.name ?? value\n }\n >\n <MultiSelect.Input placeholder={tagsSelect.placeholder.value} />\n </MultiSelect.Trigger>\n <MultiSelect.Content>\n <Loader isLoading={isLoadingProjects}>\n <MultiSelect.List>\n {tags?.data?.map((tag) => (\n <MultiSelect.Item\n key={String(tag.key)}\n value={String(tag.key)}\n >\n {tag.name ?? tag.key}\n </MultiSelect.Item>\n ))}\n </MultiSelect.List>\n </Loader>\n </MultiSelect.Content>\n </Form.MultiSelect>\n </div>\n\n <div className=\"flex flex-wrap items-center justify-end gap-2 max-md:flex-col\">\n <Form.Button\n type=\"button\"\n size={ButtonSize.ICON_MD}\n label={auditButton.label.value}\n Icon={WandSparkles}\n variant={ButtonVariant.OUTLINE}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n onClick={handleOnAuditFile}\n disabled={isSubmitting || isAuditing}\n isLoading={isAuditing}\n />\n </div>\n </Form>\n </Container>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"DictionaryDetailsForm.mjs","names":["project"],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.tsx"],"sourcesContent":["'use client';\n\nimport { ButtonColor, ButtonSize, ButtonVariant } from '@components/Button';\nimport { Container } from '@components/Container';\nimport { Form, useForm } from '@components/Form';\nimport { Loader } from '@components/Loader';\nimport { MultiSelect } from '@components/Select';\nimport {\n useAuditContentDeclarationMetadata,\n useGetProjects,\n useGetTags,\n} from '@hooks/reactQuery';\nimport { useSession } from '@hooks/useAuth';\nimport { useEditedContent } from '@intlayer/editor-react';\nimport type { Dictionary, LocalDictionaryId } from '@intlayer/types';\nimport { WandSparkles } from 'lucide-react';\nimport { type FC, useEffect } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { useDictionaryDetailsSchema } from './useDictionaryDetailsSchema';\n\ntype DictionaryDetailsProps = {\n dictionary: Dictionary;\n};\n\nexport const DictionaryDetailsForm: FC<DictionaryDetailsProps> = ({\n dictionary,\n}) => {\n const { session } = useSession();\n const { project } = session ?? {};\n const { data: projects, isLoading: isLoadingProjects } = useGetProjects();\n const { data: tags } = useGetTags();\n\n const DictionaryDetailsSchema = useDictionaryDetailsSchema(\n String(project?.id)\n );\n const { form, isSubmitting } = useForm(DictionaryDetailsSchema, {\n defaultValues: dictionary,\n });\n const { editedContent, setEditedDictionary } = useEditedContent();\n const {\n titleInput,\n keyInput,\n descriptionInput,\n projectInput,\n tagsSelect,\n auditButton,\n } = useIntlayer('dictionary-details');\n const { mutate: auditContentDeclaration, isPending: isAuditing } =\n useAuditContentDeclarationMetadata();\n const updatedDictionary =\n editedContent?.[dictionary.localId as LocalDictionaryId];\n\n useEffect(() => {\n form.reset(dictionary);\n }, [dictionary, form?.reset]);\n\n useEffect(() => {\n if (typeof updatedDictionary === 'undefined') {\n form.reset(dictionary);\n }\n }, [updatedDictionary]);\n\n const handleOnAuditFile = () => {\n const dictionaryToAudit = {\n ...dictionary,\n ...updatedDictionary,\n };\n\n auditContentDeclaration(\n {\n fileContent: JSON.stringify(dictionaryToAudit),\n },\n {\n onSuccess: (response) => {\n if (!response?.data) return;\n\n try {\n const auditedDictionary = response.data.fileContent;\n\n setEditedDictionary((prev) => ({\n ...prev,\n ...dictionaryToAudit,\n ...auditedDictionary,\n }));\n form.reset({\n ...dictionaryToAudit,\n ...auditedDictionary,\n });\n } catch (error) {\n console.error(error);\n }\n },\n }\n );\n };\n\n return (\n <Container\n background=\"none\"\n border\n roundedSize=\"2xl\"\n className=\"w-full px-5 pt-5 pb-3\"\n >\n <Form\n className=\"flex w-full flex-col gap-8\"\n {...form}\n schema={DictionaryDetailsSchema}\n onChange={(data) => {\n setEditedDictionary((prev) => ({\n ...prev,\n ...data,\n }));\n }}\n >\n <div className=\"flex w-full flex-1 gap-8 max-md:flex-col\">\n <Form.EditableFieldInput\n name=\"key\"\n label={keyInput.label}\n placeholder={keyInput.label.value}\n description={keyInput.description}\n disabled={isSubmitting}\n isRequired\n onSave={(value) => {\n form.setValue('key', value);\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n key: value,\n }));\n }}\n />\n <Form.EditableFieldInput\n name=\"title\"\n label={titleInput.label}\n placeholder={titleInput.placeholder.value}\n description={titleInput.description}\n disabled={isSubmitting}\n onSave={(value) => {\n form.setValue('title', value);\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n title: value,\n }));\n }}\n />\n </div>\n <Form.EditableFieldTextArea\n name=\"description\"\n label={descriptionInput.label}\n placeholder={descriptionInput.placeholder.value}\n description={descriptionInput.description}\n disabled={isSubmitting}\n onSave={(value) => {\n form.setValue('description', value);\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n description: value,\n }));\n }}\n />\n <div className=\"flex size-full flex-1 gap-8 max-md:flex-col\">\n <Form.MultiSelect\n name=\"projectIds\"\n label={projectInput.label.value}\n description={projectInput.description.value}\n onValueChange={(value) => {\n const valueArray = [value].flat();\n form.setValue('projectIds', valueArray);\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n projectIds: valueArray,\n }));\n }}\n >\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n projects?.data?.find((project) => String(project.id) === value)\n ?.name ?? value\n }\n >\n <MultiSelect.Input placeholder={projectInput.placeholder.value} />\n </MultiSelect.Trigger>\n <MultiSelect.Content>\n <Loader isLoading={isLoadingProjects}>\n <MultiSelect.List>\n {projects?.data?.map((project) => (\n <MultiSelect.Item\n key={String(project.id)}\n value={String(project.id)}\n >\n {project.name}\n </MultiSelect.Item>\n ))}\n </MultiSelect.List>\n </Loader>\n </MultiSelect.Content>\n </Form.MultiSelect>\n\n <Form.MultiSelect\n name=\"tags\"\n label={tagsSelect.label.value}\n description={tagsSelect.description.value}\n onValueChange={(value) => {\n form.setValue('tags', [value].flat());\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n tags: [value].flat(),\n }));\n }}\n >\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n projects?.data?.find((project) => String(project.id) === value)\n ?.name ?? value\n }\n >\n <MultiSelect.Input placeholder={tagsSelect.placeholder.value} />\n </MultiSelect.Trigger>\n <MultiSelect.Content>\n <Loader isLoading={isLoadingProjects}>\n <MultiSelect.List>\n {tags?.data?.map((tag) => (\n <MultiSelect.Item\n key={String(tag.key)}\n value={String(tag.key)}\n >\n {tag.name ?? tag.key}\n </MultiSelect.Item>\n ))}\n </MultiSelect.List>\n </Loader>\n </MultiSelect.Content>\n </Form.MultiSelect>\n </div>\n\n <div className=\"flex flex-wrap items-center justify-end gap-2 max-md:flex-col\">\n <Form.Button\n type=\"button\"\n size={ButtonSize.ICON_MD}\n label={auditButton.label.value}\n Icon={WandSparkles}\n variant={ButtonVariant.OUTLINE}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n onClick={handleOnAuditFile}\n disabled={isSubmitting || isAuditing}\n isLoading={isAuditing}\n />\n </div>\n </Form>\n </Container>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DictionaryFieldEditor.mjs","names":["DictionaryFieldEditor: FC<DictionaryFieldEditorProps>"],"sources":["../../../../src/components/DictionaryFieldEditor/DictionaryFieldEditor.tsx"],"sourcesContent":["'use client';\n\nimport {\n useConfiguration,\n useDictionariesRecordActions,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport type { Dictionary } from '@intlayer/types';\nimport { ArrowLeft } from 'lucide-react';\nimport { type FC, useEffect, useState } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { Button, ButtonColor, ButtonVariant } from '../Button';\nimport { LocaleSwitcherContentProvider } from '../LocaleSwitcherContentDropDown';\nimport { SwitchSelector } from '../SwitchSelector';\nimport { ContentEditor } from './ContentEditor';\nimport { DictionaryDetailsForm } from './DictionaryDetails/DictionaryDetailsForm';\nimport { JSONEditor } from './JSONEditor';\nimport { SaveForm } from './SaveForm/SaveForm';\nimport { StructureEditor } from './StructureEditor';\n\ntype DictionaryFieldEditorProps = {\n dictionary: Dictionary;\n onClickDictionaryList?: () => void;\n onDelete?: () => void;\n onSave?: () => void;\n isDarkMode?: boolean;\n mode: ('local' | 'remote')[];\n};\n\nenum EditorViewType {\n DetailsEditor,\n ContentEditor,\n StructureEditor,\n JSONEditor,\n}\n\nexport const DictionaryFieldEditor: FC<DictionaryFieldEditorProps> = ({\n dictionary,\n onClickDictionaryList,\n isDarkMode,\n mode,\n onDelete,\n onSave,\n}) => {\n const config = useConfiguration();\n const [editorView, setEditorView] = useState<EditorViewType>(\n EditorViewType.ContentEditor\n );\n const { returnToDictionaryList } = useIntlayer('dictionary-field-editor');\n const { setFocusedContent } = useFocusUnmergedDictionary();\n const { setLocaleDictionaries } = useDictionariesRecordActions();\n\n useEffect(() => {\n // Focus the dictionary if not focused\n setFocusedContent((prev) => ({\n ...(prev ?? {}),\n dictionaryKey: dictionary.key,\n dictionaryLocalId: dictionary.localId,\n }));\n setLocaleDictionaries((prev) => ({\n ...prev,\n [dictionary.localId!]: dictionary,\n }));\n }, []);\n\n return (\n <LocaleSwitcherContentProvider\n availableLocales={config?.internationalization.locales ?? []}\n >\n <div className=\"relative flex size-full flex-col gap-6 px-2\">\n <Button\n onClick={onClickDictionaryList}\n variant={ButtonVariant.HOVERABLE}\n className=\"z-10 mr-auto ml-5\"\n color={ButtonColor.TEXT}\n Icon={ArrowLeft}\n label={returnToDictionaryList.label.value}\n >\n {returnToDictionaryList.text}\n </Button>\n\n <SwitchSelector\n defaultValue={editorView}\n onChange={(value) => setEditorView(value)}\n color=\"text\"\n size=\"sm\"\n choices={[\n {\n content: 'Details',\n value: EditorViewType.DetailsEditor,\n },\n {\n content: 'Structure',\n value: EditorViewType.StructureEditor,\n },\n {\n content: 'Content',\n value: EditorViewType.ContentEditor,\n },\n {\n content: 'JSON',\n value: EditorViewType.JSONEditor,\n },\n ].filter(\n ({ value }) =>\n !(\n !mode.includes('remote') &&\n value === EditorViewType.DetailsEditor\n )\n )}\n />\n\n {editorView === EditorViewType.DetailsEditor && (\n <DictionaryDetailsForm dictionary={dictionary} />\n )}\n {editorView === EditorViewType.StructureEditor && (\n <StructureEditor dictionary={dictionary} />\n )}\n {editorView === EditorViewType.ContentEditor && (\n <ContentEditor dictionary={dictionary} isDarkMode={isDarkMode} />\n )}\n {editorView === EditorViewType.JSONEditor && (\n <JSONEditor dictionary={dictionary} isDarkMode={isDarkMode} />\n )}\n\n <SaveForm\n dictionary={dictionary}\n mode={mode}\n onDelete={() => {\n setFocusedContent(null);\n onDelete?.();\n }}\n onSave={onSave}\n />\n </div>\n </LocaleSwitcherContentProvider>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AA6BA,IAAK,4DAAL;AACE;AACA;AACA;AACA;;EAJG;AAOL,MAAaA,yBAAyD,EACpE,YACA,uBACA,YACA,MACA,UACA,aACI;CACJ,MAAM,SAAS,kBAAkB;CACjC,MAAM,CAAC,YAAY,iBAAiB,SAClC,eAAe,cAChB;CACD,MAAM,EAAE,2BAA2B,YAAY,0BAA0B;CACzE,MAAM,EAAE,sBAAsB,4BAA4B;CAC1D,MAAM,EAAE,0BAA0B,8BAA8B;AAEhE,iBAAgB;AAEd,qBAAmB,UAAU;GAC3B,GAAI,QAAQ,EAAE;GACd,eAAe,WAAW;GAC1B,mBAAmB,WAAW;GAC/B,EAAE;AACH,yBAAuB,UAAU;GAC/B,GAAG;IACF,WAAW,UAAW;GACxB,EAAE;IACF,EAAE,CAAC;AAEN,QACE,oBAAC;EACC,kBAAkB,QAAQ,qBAAqB,WAAW,EAAE;YAE5D,qBAAC;GAAI,WAAU;;IACb,oBAAC;KACC,SAAS;KACT,SAAS,cAAc;KACvB,WAAU;KACV,OAAO,YAAY;KACnB,MAAM;KACN,OAAO,uBAAuB,MAAM;eAEnC,uBAAuB;MACjB;IAET,oBAAC;KACC,cAAc;KACd,WAAW,UAAU,cAAc,MAAM;KACzC,OAAM;KACN,MAAK;KACL,SAAS;MACP;OACE,SAAS;OACT,OAAO,eAAe;OACvB;MACD;OACE,SAAS;OACT,OAAO,eAAe;OACvB;MACD;OACE,SAAS;OACT,OAAO,eAAe;OACvB;MACD;OACE,SAAS;OACT,OAAO,eAAe;OACvB;MACF,CAAC,QACC,EAAE,YACD,EACE,CAAC,KAAK,SAAS,SAAS,IACxB,UAAU,eAAe,eAE9B;MACD;IAED,eAAe,eAAe,iBAC7B,oBAAC,yBAAkC,aAAc;IAElD,eAAe,eAAe,mBAC7B,oBAAC,mBAA4B,aAAc;IAE5C,eAAe,eAAe,iBAC7B,oBAAC;KAA0B;KAAwB;MAAc;IAElE,eAAe,eAAe,cAC7B,oBAAC;KAAuB;KAAwB;MAAc;IAGhE,oBAAC;KACa;KACN;KACN,gBAAgB;AACd,wBAAkB,KAAK;AACvB,kBAAY;;KAEN;MACR;;IACE;GACwB"}
1
+ {"version":3,"file":"DictionaryFieldEditor.mjs","names":[],"sources":["../../../../src/components/DictionaryFieldEditor/DictionaryFieldEditor.tsx"],"sourcesContent":["'use client';\n\nimport {\n useConfiguration,\n useDictionariesRecordActions,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport type { Dictionary } from '@intlayer/types';\nimport { ArrowLeft } from 'lucide-react';\nimport { type FC, useEffect, useState } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { Button, ButtonColor, ButtonVariant } from '../Button';\nimport { LocaleSwitcherContentProvider } from '../LocaleSwitcherContentDropDown';\nimport { SwitchSelector } from '../SwitchSelector';\nimport { ContentEditor } from './ContentEditor';\nimport { DictionaryDetailsForm } from './DictionaryDetails/DictionaryDetailsForm';\nimport { JSONEditor } from './JSONEditor';\nimport { SaveForm } from './SaveForm/SaveForm';\nimport { StructureEditor } from './StructureEditor';\n\ntype DictionaryFieldEditorProps = {\n dictionary: Dictionary;\n onClickDictionaryList?: () => void;\n onDelete?: () => void;\n onSave?: () => void;\n isDarkMode?: boolean;\n mode: ('local' | 'remote')[];\n};\n\nenum EditorViewType {\n DetailsEditor,\n ContentEditor,\n StructureEditor,\n JSONEditor,\n}\n\nexport const DictionaryFieldEditor: FC<DictionaryFieldEditorProps> = ({\n dictionary,\n onClickDictionaryList,\n isDarkMode,\n mode,\n onDelete,\n onSave,\n}) => {\n const config = useConfiguration();\n const [editorView, setEditorView] = useState<EditorViewType>(\n EditorViewType.ContentEditor\n );\n const { returnToDictionaryList } = useIntlayer('dictionary-field-editor');\n const { setFocusedContent } = useFocusUnmergedDictionary();\n const { setLocaleDictionaries } = useDictionariesRecordActions();\n\n useEffect(() => {\n // Focus the dictionary if not focused\n setFocusedContent((prev) => ({\n ...(prev ?? {}),\n dictionaryKey: dictionary.key,\n dictionaryLocalId: dictionary.localId,\n }));\n setLocaleDictionaries((prev) => ({\n ...prev,\n [dictionary.localId!]: dictionary,\n }));\n }, []);\n\n return (\n <LocaleSwitcherContentProvider\n availableLocales={config?.internationalization.locales ?? []}\n >\n <div className=\"relative flex size-full flex-col gap-6 px-2\">\n <Button\n onClick={onClickDictionaryList}\n variant={ButtonVariant.HOVERABLE}\n className=\"z-10 mr-auto ml-5\"\n color={ButtonColor.TEXT}\n Icon={ArrowLeft}\n label={returnToDictionaryList.label.value}\n >\n {returnToDictionaryList.text}\n </Button>\n\n <SwitchSelector\n defaultValue={editorView}\n onChange={(value) => setEditorView(value)}\n color=\"text\"\n size=\"sm\"\n choices={[\n {\n content: 'Details',\n value: EditorViewType.DetailsEditor,\n },\n {\n content: 'Structure',\n value: EditorViewType.StructureEditor,\n },\n {\n content: 'Content',\n value: EditorViewType.ContentEditor,\n },\n {\n content: 'JSON',\n value: EditorViewType.JSONEditor,\n },\n ].filter(\n ({ value }) =>\n !(\n !mode.includes('remote') &&\n value === EditorViewType.DetailsEditor\n )\n )}\n />\n\n {editorView === EditorViewType.DetailsEditor && (\n <DictionaryDetailsForm dictionary={dictionary} />\n )}\n {editorView === EditorViewType.StructureEditor && (\n <StructureEditor dictionary={dictionary} />\n )}\n {editorView === EditorViewType.ContentEditor && (\n <ContentEditor dictionary={dictionary} isDarkMode={isDarkMode} />\n )}\n {editorView === EditorViewType.JSONEditor && (\n <JSONEditor dictionary={dictionary} isDarkMode={isDarkMode} />\n )}\n\n <SaveForm\n dictionary={dictionary}\n mode={mode}\n onDelete={() => {\n setFocusedContent(null);\n onDelete?.();\n }}\n onSave={onSave}\n />\n </div>\n </LocaleSwitcherContentProvider>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AA6BA,IAAK,4DAAL;AACE;AACA;AACA;AACA;;EAJG;AAOL,MAAa,yBAAyD,EACpE,YACA,uBACA,YACA,MACA,UACA,aACI;CACJ,MAAM,SAAS,kBAAkB;CACjC,MAAM,CAAC,YAAY,iBAAiB,SAClC,eAAe,cAChB;CACD,MAAM,EAAE,2BAA2B,YAAY,0BAA0B;CACzE,MAAM,EAAE,sBAAsB,4BAA4B;CAC1D,MAAM,EAAE,0BAA0B,8BAA8B;AAEhE,iBAAgB;AAEd,qBAAmB,UAAU;GAC3B,GAAI,QAAQ,EAAE;GACd,eAAe,WAAW;GAC1B,mBAAmB,WAAW;GAC/B,EAAE;AACH,yBAAuB,UAAU;GAC/B,GAAG;IACF,WAAW,UAAW;GACxB,EAAE;IACF,EAAE,CAAC;AAEN,QACE,oBAAC;EACC,kBAAkB,QAAQ,qBAAqB,WAAW,EAAE;YAE5D,qBAAC;GAAI,WAAU;;IACb,oBAAC;KACC,SAAS;KACT,SAAS,cAAc;KACvB,WAAU;KACV,OAAO,YAAY;KACnB,MAAM;KACN,OAAO,uBAAuB,MAAM;eAEnC,uBAAuB;MACjB;IAET,oBAAC;KACC,cAAc;KACd,WAAW,UAAU,cAAc,MAAM;KACzC,OAAM;KACN,MAAK;KACL,SAAS;MACP;OACE,SAAS;OACT,OAAO,eAAe;OACvB;MACD;OACE,SAAS;OACT,OAAO,eAAe;OACvB;MACD;OACE,SAAS;OACT,OAAO,eAAe;OACvB;MACD;OACE,SAAS;OACT,OAAO,eAAe;OACvB;MACF,CAAC,QACC,EAAE,YACD,EACE,CAAC,KAAK,SAAS,SAAS,IACxB,UAAU,eAAe,eAE9B;MACD;IAED,eAAe,eAAe,iBAC7B,oBAAC,yBAAkC,aAAc;IAElD,eAAe,eAAe,mBAC7B,oBAAC,mBAA4B,aAAc;IAE5C,eAAe,eAAe,iBAC7B,oBAAC;KAA0B;KAAwB;MAAc;IAElE,eAAe,eAAe,cAC7B,oBAAC;KAAuB;KAAwB;MAAc;IAGhE,oBAAC;KACa;KACN;KACN,gBAAgB;AACd,wBAAkB,KAAK;AACvB,kBAAY;;KAEN;MACR;;IACE;GACwB"}
@@ -1 +1 @@
1
- {"version":3,"file":"EnumKeyInput.mjs","names":["comparator: string | undefined","numberValue: string | undefined","EnumKeyInput: FC<EnumKeyInputProps>"],"sources":["../../../../src/components/DictionaryFieldEditor/EnumKeyInput.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, useEffect, useMemo, useState } from 'react';\nimport { Input } from '../Input';\nimport { Select } from '../Select';\n\nconst extractInitialState = (\n value: string | number\n): { comparator: string | undefined; numberValue: string | undefined } => {\n let comparator: string | undefined;\n let numberValue: string | undefined;\n\n if (typeof value === 'number' || !Number.isNaN(Number(value))) {\n // If value is a number or numeric string, set comparator to '=' and numberValue accordingly\n comparator = '=';\n numberValue = value.toString();\n } else if (typeof value === 'string') {\n // Define possible comparators\n const comparators = ['<=', '>=', '<', '>', '='];\n // Find the comparator that matches the start of the string\n const matchedComparator = comparators.find((comp) =>\n value.startsWith(comp)\n );\n if (matchedComparator) {\n comparator = matchedComparator;\n numberValue = value.slice(matchedComparator.length);\n }\n }\n\n return { comparator, numberValue };\n};\n\ntype EnumKeyInputProps = {\n value: string | number;\n onChange: (value: string) => void;\n};\n\n/**\n * Example of values:\n * - `<1`\n * - `>-44.3`\n * - `=999`\n * - `<=1`\n * - `>=1`\n * - 88\n * - `-1`\n *\n */\nexport const EnumKeyInput: FC<EnumKeyInputProps> = ({ value, onChange }) => {\n const { comparator: initialComparator, numberValue: initialNumberValue } =\n useMemo(() => extractInitialState(value), [value]);\n const [comparator, setComparator] = useState<string | null>(\n initialComparator ?? null\n );\n const [numberValue, setNumberValue] = useState<string | null>(\n initialNumberValue ?? null\n );\n\n useEffect(() => {\n if (\n comparator &&\n numberValue &&\n (comparator !== initialComparator || numberValue !== initialNumberValue)\n ) {\n const newValue = `${comparator}${numberValue}`;\n\n onChange(newValue);\n }\n }, [\n comparator,\n initialComparator,\n initialNumberValue,\n numberValue,\n onChange,\n ]);\n\n return (\n <div className=\"flex gap-1\">\n <Select onValueChange={setComparator} defaultValue={initialComparator}>\n <Select.Trigger className=\"w-20\">\n <Select.Value placeholder=\"Select a comparator\" />\n </Select.Trigger>\n <Select.Content>\n <Select.Item value=\"<\">{`<`}</Select.Item>\n <Select.Item value=\"<=\">{`<=`}</Select.Item>\n <Select.Item value=\"=\">{`=`}</Select.Item>\n <Select.Item value=\">=\">{`>=`}</Select.Item>\n <Select.Item value=\">\">{`>`}</Select.Item>\n </Select.Content>\n </Select>\n <Input\n type=\"number\"\n aria-label=\"Quantity\"\n defaultValue={numberValue ?? undefined}\n onChange={(e) => setNumberValue(e.target.value)}\n className=\"min-w-4\"\n />\n </div>\n );\n};\n"],"mappings":";;;;;;;;AAMA,MAAM,uBACJ,UACwE;CACxE,IAAIA;CACJ,IAAIC;AAEJ,KAAI,OAAO,UAAU,YAAY,CAAC,OAAO,MAAM,OAAO,MAAM,CAAC,EAAE;AAE7D,eAAa;AACb,gBAAc,MAAM,UAAU;YACrB,OAAO,UAAU,UAAU;EAIpC,MAAM,oBAFc;GAAC;GAAM;GAAM;GAAK;GAAK;GAAI,CAET,MAAM,SAC1C,MAAM,WAAW,KAAK,CACvB;AACD,MAAI,mBAAmB;AACrB,gBAAa;AACb,iBAAc,MAAM,MAAM,kBAAkB,OAAO;;;AAIvD,QAAO;EAAE;EAAY;EAAa;;;;;;;;;;;;;AAmBpC,MAAaC,gBAAuC,EAAE,OAAO,eAAe;CAC1E,MAAM,EAAE,YAAY,mBAAmB,aAAa,uBAClD,cAAc,oBAAoB,MAAM,EAAE,CAAC,MAAM,CAAC;CACpD,MAAM,CAAC,YAAY,iBAAiB,SAClC,qBAAqB,KACtB;CACD,MAAM,CAAC,aAAa,kBAAkB,SACpC,sBAAsB,KACvB;AAED,iBAAgB;AACd,MACE,cACA,gBACC,eAAe,qBAAqB,gBAAgB,oBAIrD,UAFiB,GAAG,aAAa,cAEf;IAEnB;EACD;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,qBAAC;EAAI,WAAU;aACb,qBAAC;GAAO,eAAe;GAAe,cAAc;cAClD,oBAAC,OAAO;IAAQ,WAAU;cACxB,oBAAC,OAAO,SAAM,aAAY,wBAAwB;KACnC,EACjB,qBAAC,OAAO;IACN,oBAAC,OAAO;KAAK,OAAM;eAAK;MAAkB;IAC1C,oBAAC,OAAO;KAAK,OAAM;eAAM;MAAmB;IAC5C,oBAAC,OAAO;KAAK,OAAM;eAAK;MAAkB;IAC1C,oBAAC,OAAO;KAAK,OAAM;eAAM;MAAmB;IAC5C,oBAAC,OAAO;KAAK,OAAM;eAAK;MAAkB;OAC3B;IACV,EACT,oBAAC;GACC,MAAK;GACL,cAAW;GACX,cAAc,eAAe;GAC7B,WAAW,MAAM,eAAe,EAAE,OAAO,MAAM;GAC/C,WAAU;IACV;GACE"}
1
+ {"version":3,"file":"EnumKeyInput.mjs","names":[],"sources":["../../../../src/components/DictionaryFieldEditor/EnumKeyInput.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, useEffect, useMemo, useState } from 'react';\nimport { Input } from '../Input';\nimport { Select } from '../Select';\n\nconst extractInitialState = (\n value: string | number\n): { comparator: string | undefined; numberValue: string | undefined } => {\n let comparator: string | undefined;\n let numberValue: string | undefined;\n\n if (typeof value === 'number' || !Number.isNaN(Number(value))) {\n // If value is a number or numeric string, set comparator to '=' and numberValue accordingly\n comparator = '=';\n numberValue = value.toString();\n } else if (typeof value === 'string') {\n // Define possible comparators\n const comparators = ['<=', '>=', '<', '>', '='];\n // Find the comparator that matches the start of the string\n const matchedComparator = comparators.find((comp) =>\n value.startsWith(comp)\n );\n if (matchedComparator) {\n comparator = matchedComparator;\n numberValue = value.slice(matchedComparator.length);\n }\n }\n\n return { comparator, numberValue };\n};\n\ntype EnumKeyInputProps = {\n value: string | number;\n onChange: (value: string) => void;\n};\n\n/**\n * Example of values:\n * - `<1`\n * - `>-44.3`\n * - `=999`\n * - `<=1`\n * - `>=1`\n * - 88\n * - `-1`\n *\n */\nexport const EnumKeyInput: FC<EnumKeyInputProps> = ({ value, onChange }) => {\n const { comparator: initialComparator, numberValue: initialNumberValue } =\n useMemo(() => extractInitialState(value), [value]);\n const [comparator, setComparator] = useState<string | null>(\n initialComparator ?? null\n );\n const [numberValue, setNumberValue] = useState<string | null>(\n initialNumberValue ?? null\n );\n\n useEffect(() => {\n if (\n comparator &&\n numberValue &&\n (comparator !== initialComparator || numberValue !== initialNumberValue)\n ) {\n const newValue = `${comparator}${numberValue}`;\n\n onChange(newValue);\n }\n }, [\n comparator,\n initialComparator,\n initialNumberValue,\n numberValue,\n onChange,\n ]);\n\n return (\n <div className=\"flex gap-1\">\n <Select onValueChange={setComparator} defaultValue={initialComparator}>\n <Select.Trigger className=\"w-20\">\n <Select.Value placeholder=\"Select a comparator\" />\n </Select.Trigger>\n <Select.Content>\n <Select.Item value=\"<\">{`<`}</Select.Item>\n <Select.Item value=\"<=\">{`<=`}</Select.Item>\n <Select.Item value=\"=\">{`=`}</Select.Item>\n <Select.Item value=\">=\">{`>=`}</Select.Item>\n <Select.Item value=\">\">{`>`}</Select.Item>\n </Select.Content>\n </Select>\n <Input\n type=\"number\"\n aria-label=\"Quantity\"\n defaultValue={numberValue ?? undefined}\n onChange={(e) => setNumberValue(e.target.value)}\n className=\"min-w-4\"\n />\n </div>\n );\n};\n"],"mappings":";;;;;;;;AAMA,MAAM,uBACJ,UACwE;CACxE,IAAI;CACJ,IAAI;AAEJ,KAAI,OAAO,UAAU,YAAY,CAAC,OAAO,MAAM,OAAO,MAAM,CAAC,EAAE;AAE7D,eAAa;AACb,gBAAc,MAAM,UAAU;YACrB,OAAO,UAAU,UAAU;EAIpC,MAAM,oBAFc;GAAC;GAAM;GAAM;GAAK;GAAK;GAAI,CAET,MAAM,SAC1C,MAAM,WAAW,KAAK,CACvB;AACD,MAAI,mBAAmB;AACrB,gBAAa;AACb,iBAAc,MAAM,MAAM,kBAAkB,OAAO;;;AAIvD,QAAO;EAAE;EAAY;EAAa;;;;;;;;;;;;;AAmBpC,MAAa,gBAAuC,EAAE,OAAO,eAAe;CAC1E,MAAM,EAAE,YAAY,mBAAmB,aAAa,uBAClD,cAAc,oBAAoB,MAAM,EAAE,CAAC,MAAM,CAAC;CACpD,MAAM,CAAC,YAAY,iBAAiB,SAClC,qBAAqB,KACtB;CACD,MAAM,CAAC,aAAa,kBAAkB,SACpC,sBAAsB,KACvB;AAED,iBAAgB;AACd,MACE,cACA,gBACC,eAAe,qBAAqB,gBAAgB,oBAIrD,UAFiB,GAAG,aAAa,cAEf;IAEnB;EACD;EACA;EACA;EACA;EACA;EACD,CAAC;AAEF,QACE,qBAAC;EAAI,WAAU;aACb,qBAAC;GAAO,eAAe;GAAe,cAAc;cAClD,oBAAC,OAAO;IAAQ,WAAU;cACxB,oBAAC,OAAO,SAAM,aAAY,wBAAwB;KACnC,EACjB,qBAAC,OAAO;IACN,oBAAC,OAAO;KAAK,OAAM;eAAK;MAAkB;IAC1C,oBAAC,OAAO;KAAK,OAAM;eAAM;MAAmB;IAC5C,oBAAC,OAAO;KAAK,OAAM;eAAK;MAAkB;IAC1C,oBAAC,OAAO;KAAK,OAAM;eAAM;MAAmB;IAC5C,oBAAC,OAAO;KAAK,OAAM;eAAK;MAAkB;OAC3B;IACV,EACT,oBAAC;GACC,MAAK;GACL,cAAW;GACX,cAAc,eAAe;GAC7B,WAAW,MAAM,eAAe,EAAE,OAAO,MAAM;GAC/C,WAAU;IACV;GACE"}
@@ -1 +1 @@
1
- {"version":3,"file":"JSONEditor.mjs","names":["JSONEditor: FC<JSONEditorProps>"],"sources":["../../../../src/components/DictionaryFieldEditor/JSONEditor.tsx"],"sourcesContent":["import { useEditedContent } from '@intlayer/editor-react';\nimport type { Dictionary } from '@intlayer/types';\nimport { type FC, useMemo } from 'react';\nimport { Container } from '../Container';\nimport { MonacoCode } from '../IDE/MonacoCode';\n\ntype JSONEditorProps = {\n dictionary: Dictionary;\n isDarkMode?: boolean;\n};\n\nexport const JSONEditor: FC<JSONEditorProps> = ({ dictionary, isDarkMode }) => {\n const { setEditedContent, editedContent } = useEditedContent();\n\n const isValidJSON = (jsonString: string): boolean => {\n try {\n JSON.parse(jsonString);\n return true; // Valid JSON\n } catch (_error) {\n return false; // Invalid JSON\n }\n };\n\n const displayedContent = useMemo(\n () =>\n editedContent?.[dictionary.localId!]?.content ??\n dictionary?.content ??\n {},\n\n [dictionary]\n );\n\n return (\n <Container\n background=\"none\"\n border\n roundedSize=\"xl\"\n className=\"w-full overflow-hidden p-3\"\n >\n <MonacoCode\n language=\"json\"\n onChange={(content) => {\n if (isValidJSON(content ?? '{}')) {\n setEditedContent(dictionary.localId!, JSON.parse(content ?? '{}'));\n }\n }}\n isDarkMode={isDarkMode}\n >\n {JSON.stringify(displayedContent, null, 2)}\n </MonacoCode>\n </Container>\n );\n};\n"],"mappings":";;;;;;;AAWA,MAAaA,cAAmC,EAAE,YAAY,iBAAiB;CAC7E,MAAM,EAAE,kBAAkB,kBAAkB,kBAAkB;CAE9D,MAAM,eAAe,eAAgC;AACnD,MAAI;AACF,QAAK,MAAM,WAAW;AACtB,UAAO;WACA,QAAQ;AACf,UAAO;;;CAIX,MAAM,mBAAmB,cAErB,gBAAgB,WAAW,UAAW,WACtC,YAAY,WACZ,EAAE,EAEJ,CAAC,WAAW,CACb;AAED,QACE,oBAAC;EACC,YAAW;EACX;EACA,aAAY;EACZ,WAAU;YAEV,oBAAC;GACC,UAAS;GACT,WAAW,YAAY;AACrB,QAAI,YAAY,WAAW,KAAK,CAC9B,kBAAiB,WAAW,SAAU,KAAK,MAAM,WAAW,KAAK,CAAC;;GAG1D;aAEX,KAAK,UAAU,kBAAkB,MAAM,EAAE;IAC/B;GACH"}
1
+ {"version":3,"file":"JSONEditor.mjs","names":[],"sources":["../../../../src/components/DictionaryFieldEditor/JSONEditor.tsx"],"sourcesContent":["import { useEditedContent } from '@intlayer/editor-react';\nimport type { Dictionary } from '@intlayer/types';\nimport { type FC, useMemo } from 'react';\nimport { Container } from '../Container';\nimport { MonacoCode } from '../IDE/MonacoCode';\n\ntype JSONEditorProps = {\n dictionary: Dictionary;\n isDarkMode?: boolean;\n};\n\nexport const JSONEditor: FC<JSONEditorProps> = ({ dictionary, isDarkMode }) => {\n const { setEditedContent, editedContent } = useEditedContent();\n\n const isValidJSON = (jsonString: string): boolean => {\n try {\n JSON.parse(jsonString);\n return true; // Valid JSON\n } catch (_error) {\n return false; // Invalid JSON\n }\n };\n\n const displayedContent = useMemo(\n () =>\n editedContent?.[dictionary.localId!]?.content ??\n dictionary?.content ??\n {},\n\n [dictionary]\n );\n\n return (\n <Container\n background=\"none\"\n border\n roundedSize=\"xl\"\n className=\"w-full overflow-hidden p-3\"\n >\n <MonacoCode\n language=\"json\"\n onChange={(content) => {\n if (isValidJSON(content ?? '{}')) {\n setEditedContent(dictionary.localId!, JSON.parse(content ?? '{}'));\n }\n }}\n isDarkMode={isDarkMode}\n >\n {JSON.stringify(displayedContent, null, 2)}\n </MonacoCode>\n </Container>\n );\n};\n"],"mappings":";;;;;;;AAWA,MAAa,cAAmC,EAAE,YAAY,iBAAiB;CAC7E,MAAM,EAAE,kBAAkB,kBAAkB,kBAAkB;CAE9D,MAAM,eAAe,eAAgC;AACnD,MAAI;AACF,QAAK,MAAM,WAAW;AACtB,UAAO;WACA,QAAQ;AACf,UAAO;;;CAIX,MAAM,mBAAmB,cAErB,gBAAgB,WAAW,UAAW,WACtC,YAAY,WACZ,EAAE,EAEJ,CAAC,WAAW,CACb;AAED,QACE,oBAAC;EACC,YAAW;EACX;EACA,aAAY;EACZ,WAAU;YAEV,oBAAC;GACC,UAAS;GACT,WAAW,YAAY;AACrB,QAAI,YAAY,WAAW,KAAK,CAC9B,kBAAiB,WAAW,SAAU,KAAK,MAAM,WAAW,KAAK,CAAC;;GAG1D;aAEX,KAAK,UAAU,kBAAkB,MAAM,EAAE;IAC/B;GACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"KeyPathBreadcrumb.mjs","names":["KeyPathBreadcrumb: FC<KeyPathBreadcrumbProps>"],"sources":["../../../../src/components/DictionaryFieldEditor/KeyPathBreadcrumb.tsx"],"sourcesContent":["import { camelCaseToSentence } from '@intlayer/config/client';\nimport type { KeyPath, Locale } from '@intlayer/types';\nimport type { FC } from 'react';\nimport { Breadcrumb, type BreadcrumbLink } from '../Breadcrumb';\nimport type { LinkColor } from '../Link';\n\ntype KeyPathBreadcrumbProps = {\n dictionaryKey: string;\n keyPath: KeyPath[];\n onClickKeyPath?: (keyPath: KeyPath[]) => void;\n locale?: Locale;\n color?: LinkColor | `${LinkColor}`;\n showDictionaryKey?: boolean;\n};\n\nexport const KeyPathBreadcrumb: FC<KeyPathBreadcrumbProps> = ({\n keyPath,\n dictionaryKey,\n onClickKeyPath,\n locale,\n color,\n showDictionaryKey = true,\n}) => {\n const formattedKeyPath: BreadcrumbLink[] = [\n ...(showDictionaryKey\n ? [\n {\n text: camelCaseToSentence(dictionaryKey),\n onClick: onClickKeyPath ? () => onClickKeyPath([]) : undefined,\n },\n ]\n : []),\n ...keyPath.map((el, index) => ({\n onClick: onClickKeyPath\n ? () =>\n // With keyPath = [{type: NodeType.Object, key: '0'}, {type: NodeType.Array, key: '0'}, {type: NodeType.Object, key: '1'}]\n // If index is 0 -> onFocusKeyPath([{type: NodeType.Object, key: '0'}])\n // If index is 1 -> onFocusKeyPath([{type: NodeType.Object, key: '0'}, {type: NodeType.Array, key: '0'}])\n onClickKeyPath?.(keyPath.slice(0, index + 1))\n : undefined,\n\n text: el.key?.toString() ?? '',\n })),\n ];\n\n return (\n <Breadcrumb\n links={formattedKeyPath}\n locale={locale}\n elementType=\"location\"\n color={color}\n />\n );\n};\n"],"mappings":";;;;;AAeA,MAAaA,qBAAiD,EAC5D,SACA,eACA,gBACA,QACA,OACA,oBAAoB,WAChB;AAuBJ,QACE,oBAAC;EACC,OAxBuC,CACzC,GAAI,oBACA,CACE;GACE,MAAM,oBAAoB,cAAc;GACxC,SAAS,uBAAuB,eAAe,EAAE,CAAC,GAAG;GACtD,CACF,GACD,EAAE,EACN,GAAG,QAAQ,KAAK,IAAI,WAAW;GAC7B,SAAS,uBAKH,iBAAiB,QAAQ,MAAM,GAAG,QAAQ,EAAE,CAAC,GAC/C;GAEJ,MAAM,GAAG,KAAK,UAAU,IAAI;GAC7B,EAAE,CACJ;EAKW;EACR,aAAY;EACL;GACP"}
1
+ {"version":3,"file":"KeyPathBreadcrumb.mjs","names":[],"sources":["../../../../src/components/DictionaryFieldEditor/KeyPathBreadcrumb.tsx"],"sourcesContent":["import { camelCaseToSentence } from '@intlayer/config/client';\nimport type { KeyPath, Locale } from '@intlayer/types';\nimport type { FC } from 'react';\nimport { Breadcrumb, type BreadcrumbLink } from '../Breadcrumb';\nimport type { LinkColor } from '../Link';\n\ntype KeyPathBreadcrumbProps = {\n dictionaryKey: string;\n keyPath: KeyPath[];\n onClickKeyPath?: (keyPath: KeyPath[]) => void;\n locale?: Locale;\n color?: LinkColor | `${LinkColor}`;\n showDictionaryKey?: boolean;\n};\n\nexport const KeyPathBreadcrumb: FC<KeyPathBreadcrumbProps> = ({\n keyPath,\n dictionaryKey,\n onClickKeyPath,\n locale,\n color,\n showDictionaryKey = true,\n}) => {\n const formattedKeyPath: BreadcrumbLink[] = [\n ...(showDictionaryKey\n ? [\n {\n text: camelCaseToSentence(dictionaryKey),\n onClick: onClickKeyPath ? () => onClickKeyPath([]) : undefined,\n },\n ]\n : []),\n ...keyPath.map((el, index) => ({\n onClick: onClickKeyPath\n ? () =>\n // With keyPath = [{type: NodeType.Object, key: '0'}, {type: NodeType.Array, key: '0'}, {type: NodeType.Object, key: '1'}]\n // If index is 0 -> onFocusKeyPath([{type: NodeType.Object, key: '0'}])\n // If index is 1 -> onFocusKeyPath([{type: NodeType.Object, key: '0'}, {type: NodeType.Array, key: '0'}])\n onClickKeyPath?.(keyPath.slice(0, index + 1))\n : undefined,\n\n text: el.key?.toString() ?? '',\n })),\n ];\n\n return (\n <Breadcrumb\n links={formattedKeyPath}\n locale={locale}\n elementType=\"location\"\n color={color}\n />\n );\n};\n"],"mappings":";;;;;AAeA,MAAa,qBAAiD,EAC5D,SACA,eACA,gBACA,QACA,OACA,oBAAoB,WAChB;AAuBJ,QACE,oBAAC;EACC,OAxBuC,CACzC,GAAI,oBACA,CACE;GACE,MAAM,oBAAoB,cAAc;GACxC,SAAS,uBAAuB,eAAe,EAAE,CAAC,GAAG;GACtD,CACF,GACD,EAAE,EACN,GAAG,QAAQ,KAAK,IAAI,WAAW;GAC7B,SAAS,uBAKH,iBAAiB,QAAQ,MAAM,GAAG,QAAQ,EAAE,CAAC,GAC/C;GAEJ,MAAM,GAAG,KAAK,UAAU,IAAI;GAC7B,EAAE,CACJ;EAKW;EACR,aAAY;EACL;GACP"}
@@ -1 +1 @@
1
- {"version":3,"file":"NavigationViewNode.mjs","names":["traceKeys: string[]","NavigationViewNode: FC<NodeWrapperProps>","keyPath","childKeyPath: KeyPath[]","newKeyPath: KeyPath[]"],"sources":["../../../../../src/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.tsx"],"sourcesContent":["import { Accordion } from '@components/Accordion';\nimport {\n Button,\n ButtonColor,\n ButtonTextAlign,\n ButtonVariant,\n} from '@components/Button';\nimport configuration from '@intlayer/config/built';\nimport { camelCaseToSentence } from '@intlayer/config/client';\nimport {\n getContentNodeByKeyPath,\n getEmptyNode,\n getNodeType,\n isSameKeyPath,\n} from '@intlayer/core';\nimport {\n useEditedContentActions,\n useEditorLocale,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport {\n type KeyPath,\n type LocalDictionaryId,\n NodeType,\n} from '@intlayer/types';\nimport type { ContentNode, Dictionary } from 'intlayer';\nimport { ChevronRight, Plus } from 'lucide-react';\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { getIsEditableSection } from '../getIsEditableSection';\n\nexport const traceKeys: string[] = ['filePath', 'id', 'nodeType'];\n\nexport type NodeWrapperProps = {\n keyPath: KeyPath[];\n section: ContentNode;\n dictionary: Dictionary;\n};\n\nexport const NavigationViewNode: FC<NodeWrapperProps> = ({\n section: sectionProp,\n keyPath,\n dictionary,\n}) => {\n const { locales } = configuration.internationalization;\n const currentLocale = useEditorLocale();\n const section = getContentNodeByKeyPath(sectionProp, keyPath, currentLocale);\n const { addEditedContent } = useEditedContentActions();\n const { setFocusedContentKeyPath, focusedContent } =\n useFocusUnmergedDictionary();\n const { addNewElement, goToField } = useIntlayer('navigation-view');\n const nodeType = getNodeType(section);\n const getIsSelected = (keyPath: KeyPath[]) =>\n (focusedContent?.keyPath?.length ?? 0) > 0 &&\n isSameKeyPath(keyPath, focusedContent?.keyPath ?? []);\n const isEditableSubSection = getIsEditableSection(section);\n\n if (!section) return <></>;\n\n if (isEditableSubSection) {\n return (\n <Button\n label={goToField.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.TEXT}\n className=\"w-full\"\n onClick={() => setFocusedContentKeyPath(keyPath)}\n IconRight={ChevronRight}\n >\n {camelCaseToSentence(keyPath[keyPath.length - 1].key as string)}\n </Button>\n );\n }\n\n if (typeof section === 'object') {\n if (nodeType === NodeType.ReactNode) {\n return <>React Node</>;\n }\n\n if (nodeType === NodeType.Translation) {\n return (\n <div className=\"flex flex-col justify-between gap-2\">\n {locales.map((translationKey) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: NodeType.Translation, key: translationKey },\n ];\n\n return (\n <NavigationViewNode\n key={translationKey}\n keyPath={childKeyPath}\n section={sectionProp}\n dictionary={dictionary}\n />\n );\n })}\n </div>\n );\n }\n\n if (nodeType === NodeType.Enumeration || nodeType === NodeType.Condition) {\n return (\n <div className=\"flex flex-col justify-between gap-2\">\n {Object.keys(\n (section as any)[nodeType as unknown as keyof typeof section]\n ).map((key) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: nodeType, key },\n ];\n\n return (\n <NavigationViewNode\n key={key}\n keyPath={childKeyPath}\n section={sectionProp}\n dictionary={dictionary}\n />\n );\n })}\n </div>\n );\n }\n\n if (nodeType === NodeType.Array) {\n return (\n <div className=\"flex flex-col justify-between gap-2\">\n {(section as unknown as ContentNode[]).map((subSection, index) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: NodeType.Array, key: index },\n ];\n\n const isEditableSubSection = getIsEditableSection(subSection);\n\n if (isEditableSubSection) {\n return (\n <Button\n key={JSON.stringify(childKeyPath)}\n label={`${goToField.label.value} ${index}`}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.TEXT}\n className=\"w-full\"\n onClick={() => setFocusedContentKeyPath(childKeyPath)}\n IconRight={ChevronRight}\n isActive={getIsSelected(childKeyPath)}\n >\n Item {index}\n </Button>\n );\n }\n\n return (\n <Accordion\n key={JSON.stringify(childKeyPath)}\n label={`${goToField.label.value} ${index}`}\n header={`Item ${index}`}\n isActive={getIsSelected(childKeyPath)}\n onClick={() => setFocusedContentKeyPath(childKeyPath)}\n >\n <div className=\"mt-2 flex w-full max-w-full\">\n <div className=\"flex-1 pl-10\">\n <NavigationViewNode\n keyPath={childKeyPath}\n section={sectionProp}\n dictionary={dictionary}\n />\n </div>\n </div>\n </Accordion>\n );\n })}\n\n <Button\n label={addNewElement.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.NEUTRAL}\n textAlign={ButtonTextAlign.LEFT}\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: (section as unknown as ContentNode[]).length,\n },\n ];\n const sectionArray = section as unknown as ContentNode[];\n const emptySectionEl =\n getEmptyNode(\n sectionArray[\n (sectionArray.length - 1) as keyof typeof sectionArray\n ] as ContentNode\n ) ?? '';\n addEditedContent(\n dictionary.localId as LocalDictionaryId,\n emptySectionEl,\n newKeyPath,\n false\n );\n setFocusedContentKeyPath(newKeyPath);\n }}\n Icon={Plus}\n >\n {addNewElement.text}\n </Button>\n </div>\n );\n }\n\n if (typeof section.nodeType === 'string') {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: section.nodeType } as KeyPath,\n ];\n\n return (\n <NavigationViewNode\n keyPath={childKeyPath}\n section={sectionProp}\n dictionary={dictionary}\n />\n );\n }\n\n const sectionArray = Object.keys(section);\n return (\n <div className=\"flex w-full max-w-full flex-col justify-between gap-2\">\n {sectionArray.map((key) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: NodeType.Object, key },\n ];\n\n const subSection = getContentNodeByKeyPath(sectionProp, childKeyPath);\n const isEditableSubSection = getIsEditableSection(subSection);\n\n if (isEditableSubSection) {\n return (\n <Button\n label={`${goToField.label.value} ${key}`}\n key={key}\n isActive={getIsSelected(childKeyPath)}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.TEXT}\n className=\"w-full\"\n onClick={() => setFocusedContentKeyPath(childKeyPath)}\n IconRight={ChevronRight}\n >\n {camelCaseToSentence(key)}\n </Button>\n );\n }\n\n return (\n <Accordion\n key={key}\n label={`${goToField.label.value} ${key}`}\n isActive={getIsSelected(childKeyPath)}\n onClick={() => setFocusedContentKeyPath(childKeyPath)}\n header={camelCaseToSentence(key)}\n >\n <div className=\"mt-2 flex w-full max-w-full\">\n <div className=\"flex-1 pl-10\">\n <NavigationViewNode\n keyPath={childKeyPath}\n section={sectionProp}\n dictionary={dictionary}\n />\n </div>\n </div>\n </Accordion>\n );\n })}\n </div>\n );\n }\n\n return (\n <>\n Error loading section --\n {nodeType}\n --\n {JSON.stringify(section)}\n --\n {JSON.stringify(keyPath)}\n </>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"NavigationViewNode.mjs","names":["keyPath"],"sources":["../../../../../src/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.tsx"],"sourcesContent":["import { Accordion } from '@components/Accordion';\nimport {\n Button,\n ButtonColor,\n ButtonTextAlign,\n ButtonVariant,\n} from '@components/Button';\nimport configuration from '@intlayer/config/built';\nimport { camelCaseToSentence } from '@intlayer/config/client';\nimport {\n getContentNodeByKeyPath,\n getEmptyNode,\n getNodeType,\n isSameKeyPath,\n} from '@intlayer/core';\nimport {\n useEditedContentActions,\n useEditorLocale,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport {\n type KeyPath,\n type LocalDictionaryId,\n NodeType,\n} from '@intlayer/types';\nimport type { ContentNode, Dictionary } from 'intlayer';\nimport { ChevronRight, Plus } from 'lucide-react';\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { getIsEditableSection } from '../getIsEditableSection';\n\nexport const traceKeys: string[] = ['filePath', 'id', 'nodeType'];\n\nexport type NodeWrapperProps = {\n keyPath: KeyPath[];\n section: ContentNode;\n dictionary: Dictionary;\n};\n\nexport const NavigationViewNode: FC<NodeWrapperProps> = ({\n section: sectionProp,\n keyPath,\n dictionary,\n}) => {\n const { locales } = configuration.internationalization;\n const currentLocale = useEditorLocale();\n const section = getContentNodeByKeyPath(sectionProp, keyPath, currentLocale);\n const { addEditedContent } = useEditedContentActions();\n const { setFocusedContentKeyPath, focusedContent } =\n useFocusUnmergedDictionary();\n const { addNewElement, goToField } = useIntlayer('navigation-view');\n const nodeType = getNodeType(section);\n const getIsSelected = (keyPath: KeyPath[]) =>\n (focusedContent?.keyPath?.length ?? 0) > 0 &&\n isSameKeyPath(keyPath, focusedContent?.keyPath ?? []);\n const isEditableSubSection = getIsEditableSection(section);\n\n if (!section) return <></>;\n\n if (isEditableSubSection) {\n return (\n <Button\n label={goToField.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.TEXT}\n className=\"w-full\"\n onClick={() => setFocusedContentKeyPath(keyPath)}\n IconRight={ChevronRight}\n >\n {camelCaseToSentence(keyPath[keyPath.length - 1].key as string)}\n </Button>\n );\n }\n\n if (typeof section === 'object') {\n if (nodeType === NodeType.ReactNode) {\n return <>React Node</>;\n }\n\n if (nodeType === NodeType.Translation) {\n return (\n <div className=\"flex flex-col justify-between gap-2\">\n {locales.map((translationKey) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: NodeType.Translation, key: translationKey },\n ];\n\n return (\n <NavigationViewNode\n key={translationKey}\n keyPath={childKeyPath}\n section={sectionProp}\n dictionary={dictionary}\n />\n );\n })}\n </div>\n );\n }\n\n if (nodeType === NodeType.Enumeration || nodeType === NodeType.Condition) {\n return (\n <div className=\"flex flex-col justify-between gap-2\">\n {Object.keys(\n (section as any)[nodeType as unknown as keyof typeof section]\n ).map((key) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: nodeType, key },\n ];\n\n return (\n <NavigationViewNode\n key={key}\n keyPath={childKeyPath}\n section={sectionProp}\n dictionary={dictionary}\n />\n );\n })}\n </div>\n );\n }\n\n if (nodeType === NodeType.Array) {\n return (\n <div className=\"flex flex-col justify-between gap-2\">\n {(section as unknown as ContentNode[]).map((subSection, index) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: NodeType.Array, key: index },\n ];\n\n const isEditableSubSection = getIsEditableSection(subSection);\n\n if (isEditableSubSection) {\n return (\n <Button\n key={JSON.stringify(childKeyPath)}\n label={`${goToField.label.value} ${index}`}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.TEXT}\n className=\"w-full\"\n onClick={() => setFocusedContentKeyPath(childKeyPath)}\n IconRight={ChevronRight}\n isActive={getIsSelected(childKeyPath)}\n >\n Item {index}\n </Button>\n );\n }\n\n return (\n <Accordion\n key={JSON.stringify(childKeyPath)}\n label={`${goToField.label.value} ${index}`}\n header={`Item ${index}`}\n isActive={getIsSelected(childKeyPath)}\n onClick={() => setFocusedContentKeyPath(childKeyPath)}\n >\n <div className=\"mt-2 flex w-full max-w-full\">\n <div className=\"flex-1 pl-10\">\n <NavigationViewNode\n keyPath={childKeyPath}\n section={sectionProp}\n dictionary={dictionary}\n />\n </div>\n </div>\n </Accordion>\n );\n })}\n\n <Button\n label={addNewElement.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.NEUTRAL}\n textAlign={ButtonTextAlign.LEFT}\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: (section as unknown as ContentNode[]).length,\n },\n ];\n const sectionArray = section as unknown as ContentNode[];\n const emptySectionEl =\n getEmptyNode(\n sectionArray[\n (sectionArray.length - 1) as keyof typeof sectionArray\n ] as ContentNode\n ) ?? '';\n addEditedContent(\n dictionary.localId as LocalDictionaryId,\n emptySectionEl,\n newKeyPath,\n false\n );\n setFocusedContentKeyPath(newKeyPath);\n }}\n Icon={Plus}\n >\n {addNewElement.text}\n </Button>\n </div>\n );\n }\n\n if (typeof section.nodeType === 'string') {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: section.nodeType } as KeyPath,\n ];\n\n return (\n <NavigationViewNode\n keyPath={childKeyPath}\n section={sectionProp}\n dictionary={dictionary}\n />\n );\n }\n\n const sectionArray = Object.keys(section);\n return (\n <div className=\"flex w-full max-w-full flex-col justify-between gap-2\">\n {sectionArray.map((key) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: NodeType.Object, key },\n ];\n\n const subSection = getContentNodeByKeyPath(sectionProp, childKeyPath);\n const isEditableSubSection = getIsEditableSection(subSection);\n\n if (isEditableSubSection) {\n return (\n <Button\n label={`${goToField.label.value} ${key}`}\n key={key}\n isActive={getIsSelected(childKeyPath)}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.TEXT}\n className=\"w-full\"\n onClick={() => setFocusedContentKeyPath(childKeyPath)}\n IconRight={ChevronRight}\n >\n {camelCaseToSentence(key)}\n </Button>\n );\n }\n\n return (\n <Accordion\n key={key}\n label={`${goToField.label.value} ${key}`}\n isActive={getIsSelected(childKeyPath)}\n onClick={() => setFocusedContentKeyPath(childKeyPath)}\n header={camelCaseToSentence(key)}\n >\n <div className=\"mt-2 flex w-full max-w-full\">\n <div className=\"flex-1 pl-10\">\n <NavigationViewNode\n keyPath={childKeyPath}\n section={sectionProp}\n dictionary={dictionary}\n />\n </div>\n </div>\n </Accordion>\n );\n })}\n </div>\n );\n }\n\n return (\n <>\n Error loading section --\n {nodeType}\n --\n {JSON.stringify(section)}\n --\n {JSON.stringify(keyPath)}\n </>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"NodeTypeSelector.mjs","names":["NodeTypeSelector: FC<NodeTypeSelectorProps>","keyType"],"sources":["../../../../src/components/DictionaryFieldEditor/NodeTypeSelector.tsx"],"sourcesContent":["'use client';\n\nimport { getNodeType } from '@intlayer/core';\nimport { type ContentNode, NodeType } from '@intlayer/types';\nimport { type FC, useState } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { Select } from '../Select';\n\ntype NodeTypeSelectorProps = {\n section: ContentNode;\n onValueChange: (keyType: NodeType) => void;\n};\n\nexport const NodeTypeSelector: FC<NodeTypeSelectorProps> = ({\n section,\n onValueChange: onValueChangeProp,\n}) => {\n const {\n multilingual,\n text,\n number,\n boolean,\n node,\n array,\n enumeration,\n triggerPlaceHolder,\n nest,\n gender,\n condition,\n markdown,\n insertion,\n reactNode,\n file,\n } = useIntlayer('node-type-selector');\n const nodeType = getNodeType(section);\n const [keyType, setKeyType] = useState<NodeType>(nodeType);\n\n const onValueChange = (keyType: NodeType) => {\n setKeyType(keyType);\n onValueChangeProp(keyType);\n };\n\n return (\n <Select value={keyType} onValueChange={onValueChange}>\n <Select.Trigger>\n <Select.Value placeholder={triggerPlaceHolder} />\n </Select.Trigger>\n <Select.Content>\n <Select.Item value={NodeType.Translation}>{multilingual}</Select.Item>\n <Select.Item value={NodeType.Text}>{text}</Select.Item>\n <Select.Item value={NodeType.Number}>{number}</Select.Item>\n <Select.Item value={NodeType.Boolean}>{boolean}</Select.Item>\n <Select.Item value={NodeType.Object}>{node}</Select.Item>\n <Select.Item value={NodeType.Array}>{array}</Select.Item>\n <Select.Item value={NodeType.Enumeration}>{enumeration}</Select.Item>\n <Select.Item value={NodeType.Gender}>{gender}</Select.Item>\n <Select.Item value={NodeType.Insertion}>{insertion}</Select.Item>\n <Select.Item value={NodeType.Markdown}>{markdown}</Select.Item>\n <Select.Item value={NodeType.Nested}>{nest}</Select.Item>\n <Select.Item value={NodeType.Condition}>{condition}</Select.Item>\n <Select.Item value={NodeType.ReactNode} disabled>\n {reactNode}\n </Select.Item>\n <Select.Item value={NodeType.File}>{file}</Select.Item>\n </Select.Content>\n </Select>\n );\n};\n"],"mappings":";;;;;;;;;;AAaA,MAAaA,oBAA+C,EAC1D,SACA,eAAe,wBACX;CACJ,MAAM,EACJ,cACA,MACA,QACA,SACA,MACA,OACA,aACA,oBACA,MACA,QACA,WACA,UACA,WACA,WACA,SACE,YAAY,qBAAqB;CAErC,MAAM,CAAC,SAAS,cAAc,SADb,YAAY,QAAQ,CACqB;CAE1D,MAAM,iBAAiB,cAAsB;AAC3C,aAAWC,UAAQ;AACnB,oBAAkBA,UAAQ;;AAG5B,QACE,qBAAC;EAAO,OAAO;EAAwB;aACrC,oBAAC,OAAO,qBACN,oBAAC,OAAO,SAAM,aAAa,qBAAsB,GAClC,EACjB,qBAAC,OAAO;GACN,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAc;KAA2B;GACtE,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAO;KAAmB;GACvD,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAS;KAAqB;GAC3D,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAU;KAAsB;GAC7D,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAS;KAAmB;GACzD,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAQ;KAAoB;GACzD,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAc;KAA0B;GACrE,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAS;KAAqB;GAC3D,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAY;KAAwB;GACjE,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAW;KAAuB;GAC/D,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAS;KAAmB;GACzD,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAY;KAAwB;GACjE,oBAAC,OAAO;IAAK,OAAO,SAAS;IAAW;cACrC;KACW;GACd,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAO;KAAmB;MACxC;GACV"}
1
+ {"version":3,"file":"NodeTypeSelector.mjs","names":["keyType"],"sources":["../../../../src/components/DictionaryFieldEditor/NodeTypeSelector.tsx"],"sourcesContent":["'use client';\n\nimport { getNodeType } from '@intlayer/core';\nimport { type ContentNode, NodeType } from '@intlayer/types';\nimport { type FC, useState } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { Select } from '../Select';\n\ntype NodeTypeSelectorProps = {\n section: ContentNode;\n onValueChange: (keyType: NodeType) => void;\n};\n\nexport const NodeTypeSelector: FC<NodeTypeSelectorProps> = ({\n section,\n onValueChange: onValueChangeProp,\n}) => {\n const {\n multilingual,\n text,\n number,\n boolean,\n node,\n array,\n enumeration,\n triggerPlaceHolder,\n nest,\n gender,\n condition,\n markdown,\n insertion,\n reactNode,\n file,\n } = useIntlayer('node-type-selector');\n const nodeType = getNodeType(section);\n const [keyType, setKeyType] = useState<NodeType>(nodeType);\n\n const onValueChange = (keyType: NodeType) => {\n setKeyType(keyType);\n onValueChangeProp(keyType);\n };\n\n return (\n <Select value={keyType} onValueChange={onValueChange}>\n <Select.Trigger>\n <Select.Value placeholder={triggerPlaceHolder} />\n </Select.Trigger>\n <Select.Content>\n <Select.Item value={NodeType.Translation}>{multilingual}</Select.Item>\n <Select.Item value={NodeType.Text}>{text}</Select.Item>\n <Select.Item value={NodeType.Number}>{number}</Select.Item>\n <Select.Item value={NodeType.Boolean}>{boolean}</Select.Item>\n <Select.Item value={NodeType.Object}>{node}</Select.Item>\n <Select.Item value={NodeType.Array}>{array}</Select.Item>\n <Select.Item value={NodeType.Enumeration}>{enumeration}</Select.Item>\n <Select.Item value={NodeType.Gender}>{gender}</Select.Item>\n <Select.Item value={NodeType.Insertion}>{insertion}</Select.Item>\n <Select.Item value={NodeType.Markdown}>{markdown}</Select.Item>\n <Select.Item value={NodeType.Nested}>{nest}</Select.Item>\n <Select.Item value={NodeType.Condition}>{condition}</Select.Item>\n <Select.Item value={NodeType.ReactNode} disabled>\n {reactNode}\n </Select.Item>\n <Select.Item value={NodeType.File}>{file}</Select.Item>\n </Select.Content>\n </Select>\n );\n};\n"],"mappings":";;;;;;;;;;AAaA,MAAa,oBAA+C,EAC1D,SACA,eAAe,wBACX;CACJ,MAAM,EACJ,cACA,MACA,QACA,SACA,MACA,OACA,aACA,oBACA,MACA,QACA,WACA,UACA,WACA,WACA,SACE,YAAY,qBAAqB;CAErC,MAAM,CAAC,SAAS,cAAc,SADb,YAAY,QAAQ,CACqB;CAE1D,MAAM,iBAAiB,cAAsB;AAC3C,aAAWA,UAAQ;AACnB,oBAAkBA,UAAQ;;AAG5B,QACE,qBAAC;EAAO,OAAO;EAAwB;aACrC,oBAAC,OAAO,qBACN,oBAAC,OAAO,SAAM,aAAa,qBAAsB,GAClC,EACjB,qBAAC,OAAO;GACN,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAc;KAA2B;GACtE,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAO;KAAmB;GACvD,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAS;KAAqB;GAC3D,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAU;KAAsB;GAC7D,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAS;KAAmB;GACzD,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAQ;KAAoB;GACzD,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAc;KAA0B;GACrE,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAS;KAAqB;GAC3D,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAY;KAAwB;GACjE,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAW;KAAuB;GAC/D,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAS;KAAmB;GACzD,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAY;KAAwB;GACjE,oBAAC,OAAO;IAAK,OAAO,SAAS;IAAW;cACrC;KACW;GACd,oBAAC,OAAO;IAAK,OAAO,SAAS;cAAO;KAAmB;MACxC;GACV"}
@@ -1 +1 @@
1
- {"version":3,"file":"SaveForm.mjs","names":["SaveForm: FC<DictionaryDetailsProps>"],"sources":["../../../../../src/components/DictionaryFieldEditor/SaveForm/SaveForm.tsx"],"sourcesContent":["'use client';\n\nimport { ButtonColor, ButtonVariant } from '@components/Button';\nimport { Form } from '@components/Form';\nimport { Modal, ModalSize } from '@components/Modal';\nimport {\n useAuth,\n useDeleteDictionary,\n usePushDictionaries,\n useWriteDictionary,\n} from '@hooks/index';\nimport type { Dictionary as DistantDictionary } from '@intlayer/backend';\nimport {\n useDictionariesRecordActions,\n useEditedContent,\n} from '@intlayer/editor-react';\nimport type { Dictionary } from '@intlayer/types';\nimport { cn } from '@utils/cn';\nimport {\n ArrowUpFromLine,\n Download,\n RotateCcw,\n Save,\n Trash,\n} from 'lucide-react';\nimport {\n type DetailedHTMLProps,\n type FC,\n type FormHTMLAttributes,\n useState,\n} from 'react';\nimport { useIntlayer } from 'react-intlayer';\n\ntype DictionaryDetailsProps = {\n dictionary: Dictionary;\n mode: ('local' | 'remote')[];\n onDelete?: () => void;\n onSave?: () => void;\n} & DetailedHTMLProps<FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>;\n\nexport const SaveForm: FC<DictionaryDetailsProps> = ({\n dictionary,\n mode,\n className,\n onDelete,\n onSave,\n ...props\n}) => {\n const [isFormatAlertModalOpen, setIsFormatAlertModalOpen] = useState(false);\n const { setLocaleDictionary } = useDictionariesRecordActions();\n const { mutate: deleteDictionary, isPending: isDeleting } =\n useDeleteDictionary();\n const { mutate: writeDictionary, isPending: isWriting } =\n useWriteDictionary();\n const { mutate: pushDictionaries, isPending: isPushing } =\n usePushDictionaries();\n const isLoading = isWriting || isPushing;\n\n const { editedContent, restoreEditedContent } = useEditedContent();\n const {\n deleteButton,\n resetButton,\n saveButton,\n publishButton,\n downloadButton,\n confirmation,\n } = useIntlayer('save-dictionary-details');\n const { isAuthenticated } = useAuth();\n\n const editedDictionary = editedContent?.[dictionary.localId!];\n\n const isEdited =\n editedDictionary &&\n JSON.stringify(editedDictionary) !== JSON.stringify(dictionary);\n\n const isDistantDictionary =\n typeof (dictionary as unknown as DistantDictionary)?.id !== 'undefined';\n\n const handleSaveDictionaryConfirmation = async () => {\n if (!editedContent?.[dictionary.localId!]) return;\n\n const updatedDictionary = {\n ...dictionary,\n ...editedContent?.[dictionary.localId!],\n };\n\n writeDictionary(\n {\n dictionary: updatedDictionary,\n },\n {\n onSuccess: () => {\n setLocaleDictionary(editedContent?.[dictionary.localId!]);\n restoreEditedContent(dictionary.localId!);\n setIsFormatAlertModalOpen(false);\n onSave?.();\n },\n }\n );\n };\n\n const handlePushDictionary = () => {\n const updatedDictionary = {\n ...dictionary,\n ...editedContent?.[dictionary.localId!],\n };\n\n pushDictionaries(\n { dictionaries: [updatedDictionary] },\n {\n onSuccess: (res) => {\n if (res) {\n setLocaleDictionary(updatedDictionary);\n restoreEditedContent(dictionary.localId!);\n onSave?.();\n }\n },\n }\n );\n };\n\n const handleDeleteDictionary = () => {\n if (!dictionary.id) return;\n\n deleteDictionary(\n {\n dictionaryId: dictionary.id,\n },\n {\n onSuccess: (res) => {\n if (res) {\n onDelete?.();\n }\n },\n }\n );\n };\n\n return (\n <>\n <Modal\n isOpen={isFormatAlertModalOpen}\n title={confirmation.title.value}\n size={ModalSize.MD}\n onClose={() => setIsFormatAlertModalOpen(false)}\n padding=\"md\"\n >\n <form className=\"size-full\">\n <p className=\"py-4 text-neutral text-sm\">{confirmation.message}</p>\n\n <div className=\"mt-12 flex justify-end gap-2 max-md:flex-col\">\n <Form.Button\n label={confirmation.cancelButton.label.value}\n disabled={!isEdited || isLoading}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n variant={ButtonVariant.OUTLINE}\n onClick={() => setIsFormatAlertModalOpen(false)}\n >\n {confirmation.cancelButton.text}\n </Form.Button>\n <Form.Button\n label={confirmation.confirmButton.label.value}\n disabled={!isEdited || isLoading}\n Icon={Save}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n isLoading={isPushing}\n onClick={handleSaveDictionaryConfirmation}\n >\n {confirmation.confirmButton.text}\n </Form.Button>\n </div>\n </form>\n </Modal>\n <form\n className={cn('flex justify-end gap-2 max-md:flex-col', className)}\n {...props}\n >\n {mode.includes('remote') &&\n isDistantDictionary &&\n onDelete &&\n isAuthenticated && (\n <Form.Button\n label={deleteButton.label.value}\n Icon={Trash}\n color={ButtonColor.ERROR}\n variant={ButtonVariant.OUTLINE}\n className=\"max-md:w-full\"\n isLoading={isDeleting}\n onClick={handleDeleteDictionary}\n >\n {deleteButton.text}\n </Form.Button>\n )}\n {isEdited && (\n <Form.Button\n label={resetButton.label.value}\n disabled={!isEdited}\n Icon={RotateCcw}\n variant={ButtonVariant.OUTLINE}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n onClick={() => restoreEditedContent(dictionary.localId!)}\n >\n {resetButton.text}\n </Form.Button>\n )}\n {mode.includes('local') && (\n <Form.Button\n label={downloadButton.label.value}\n disabled={!isEdited || isLoading}\n Icon={Download}\n color={ButtonColor.TEXT}\n variant={\n isAuthenticated ? ButtonVariant.OUTLINE : ButtonVariant.DEFAULT\n }\n className=\"max-md:w-full\"\n isLoading={isWriting}\n onClick={() => setIsFormatAlertModalOpen(true)}\n >\n {downloadButton.text}\n </Form.Button>\n )}\n {mode.includes('remote') && isAuthenticated && !isDistantDictionary && (\n <Form.Button\n label={publishButton.label.value}\n disabled={isLoading}\n Icon={ArrowUpFromLine}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n isLoading={isPushing}\n onClick={handlePushDictionary}\n >\n {publishButton.text}\n </Form.Button>\n )}\n {mode.includes('remote') &&\n isAuthenticated &&\n isDistantDictionary &&\n isEdited && (\n <Form.Button\n label={saveButton.label.value}\n disabled={!isEdited || isLoading}\n Icon={Save}\n color=\"text\"\n className=\"max-md:w-full\"\n isLoading={isPushing}\n onClick={handlePushDictionary}\n >\n {saveButton.text}\n </Form.Button>\n )}\n </form>\n </>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"SaveForm.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/SaveForm/SaveForm.tsx"],"sourcesContent":["'use client';\n\nimport { ButtonColor, ButtonVariant } from '@components/Button';\nimport { Form } from '@components/Form';\nimport { Modal, ModalSize } from '@components/Modal';\nimport {\n useAuth,\n useDeleteDictionary,\n usePushDictionaries,\n useWriteDictionary,\n} from '@hooks/index';\nimport type { Dictionary as DistantDictionary } from '@intlayer/backend';\nimport {\n useDictionariesRecordActions,\n useEditedContent,\n} from '@intlayer/editor-react';\nimport type { Dictionary } from '@intlayer/types';\nimport { cn } from '@utils/cn';\nimport {\n ArrowUpFromLine,\n Download,\n RotateCcw,\n Save,\n Trash,\n} from 'lucide-react';\nimport {\n type DetailedHTMLProps,\n type FC,\n type FormHTMLAttributes,\n useState,\n} from 'react';\nimport { useIntlayer } from 'react-intlayer';\n\ntype DictionaryDetailsProps = {\n dictionary: Dictionary;\n mode: ('local' | 'remote')[];\n onDelete?: () => void;\n onSave?: () => void;\n} & DetailedHTMLProps<FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>;\n\nexport const SaveForm: FC<DictionaryDetailsProps> = ({\n dictionary,\n mode,\n className,\n onDelete,\n onSave,\n ...props\n}) => {\n const [isFormatAlertModalOpen, setIsFormatAlertModalOpen] = useState(false);\n const { setLocaleDictionary } = useDictionariesRecordActions();\n const { mutate: deleteDictionary, isPending: isDeleting } =\n useDeleteDictionary();\n const { mutate: writeDictionary, isPending: isWriting } =\n useWriteDictionary();\n const { mutate: pushDictionaries, isPending: isPushing } =\n usePushDictionaries();\n const isLoading = isWriting || isPushing;\n\n const { editedContent, restoreEditedContent } = useEditedContent();\n const {\n deleteButton,\n resetButton,\n saveButton,\n publishButton,\n downloadButton,\n confirmation,\n } = useIntlayer('save-dictionary-details');\n const { isAuthenticated } = useAuth();\n\n const editedDictionary = editedContent?.[dictionary.localId!];\n\n const isEdited =\n editedDictionary &&\n JSON.stringify(editedDictionary) !== JSON.stringify(dictionary);\n\n const isDistantDictionary =\n typeof (dictionary as unknown as DistantDictionary)?.id !== 'undefined';\n\n const handleSaveDictionaryConfirmation = async () => {\n if (!editedContent?.[dictionary.localId!]) return;\n\n const updatedDictionary = {\n ...dictionary,\n ...editedContent?.[dictionary.localId!],\n };\n\n writeDictionary(\n {\n dictionary: updatedDictionary,\n },\n {\n onSuccess: () => {\n setLocaleDictionary(editedContent?.[dictionary.localId!]);\n restoreEditedContent(dictionary.localId!);\n setIsFormatAlertModalOpen(false);\n onSave?.();\n },\n }\n );\n };\n\n const handlePushDictionary = () => {\n const updatedDictionary = {\n ...dictionary,\n ...editedContent?.[dictionary.localId!],\n };\n\n pushDictionaries(\n { dictionaries: [updatedDictionary] },\n {\n onSuccess: (res) => {\n if (res) {\n setLocaleDictionary(updatedDictionary);\n restoreEditedContent(dictionary.localId!);\n onSave?.();\n }\n },\n }\n );\n };\n\n const handleDeleteDictionary = () => {\n if (!dictionary.id) return;\n\n deleteDictionary(\n {\n dictionaryId: dictionary.id,\n },\n {\n onSuccess: (res) => {\n if (res) {\n onDelete?.();\n }\n },\n }\n );\n };\n\n return (\n <>\n <Modal\n isOpen={isFormatAlertModalOpen}\n title={confirmation.title.value}\n size={ModalSize.MD}\n onClose={() => setIsFormatAlertModalOpen(false)}\n padding=\"md\"\n >\n <form className=\"size-full\">\n <p className=\"py-4 text-neutral text-sm\">{confirmation.message}</p>\n\n <div className=\"mt-12 flex justify-end gap-2 max-md:flex-col\">\n <Form.Button\n label={confirmation.cancelButton.label.value}\n disabled={!isEdited || isLoading}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n variant={ButtonVariant.OUTLINE}\n onClick={() => setIsFormatAlertModalOpen(false)}\n >\n {confirmation.cancelButton.text}\n </Form.Button>\n <Form.Button\n label={confirmation.confirmButton.label.value}\n disabled={!isEdited || isLoading}\n Icon={Save}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n isLoading={isPushing}\n onClick={handleSaveDictionaryConfirmation}\n >\n {confirmation.confirmButton.text}\n </Form.Button>\n </div>\n </form>\n </Modal>\n <form\n className={cn('flex justify-end gap-2 max-md:flex-col', className)}\n {...props}\n >\n {mode.includes('remote') &&\n isDistantDictionary &&\n onDelete &&\n isAuthenticated && (\n <Form.Button\n label={deleteButton.label.value}\n Icon={Trash}\n color={ButtonColor.ERROR}\n variant={ButtonVariant.OUTLINE}\n className=\"max-md:w-full\"\n isLoading={isDeleting}\n onClick={handleDeleteDictionary}\n >\n {deleteButton.text}\n </Form.Button>\n )}\n {isEdited && (\n <Form.Button\n label={resetButton.label.value}\n disabled={!isEdited}\n Icon={RotateCcw}\n variant={ButtonVariant.OUTLINE}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n onClick={() => restoreEditedContent(dictionary.localId!)}\n >\n {resetButton.text}\n </Form.Button>\n )}\n {mode.includes('local') && (\n <Form.Button\n label={downloadButton.label.value}\n disabled={!isEdited || isLoading}\n Icon={Download}\n color={ButtonColor.TEXT}\n variant={\n isAuthenticated ? ButtonVariant.OUTLINE : ButtonVariant.DEFAULT\n }\n className=\"max-md:w-full\"\n isLoading={isWriting}\n onClick={() => setIsFormatAlertModalOpen(true)}\n >\n {downloadButton.text}\n </Form.Button>\n )}\n {mode.includes('remote') && isAuthenticated && !isDistantDictionary && (\n <Form.Button\n label={publishButton.label.value}\n disabled={isLoading}\n Icon={ArrowUpFromLine}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n isLoading={isPushing}\n onClick={handlePushDictionary}\n >\n {publishButton.text}\n </Form.Button>\n )}\n {mode.includes('remote') &&\n isAuthenticated &&\n isDistantDictionary &&\n isEdited && (\n <Form.Button\n label={saveButton.label.value}\n disabled={!isEdited || isLoading}\n Icon={Save}\n color=\"text\"\n className=\"max-md:w-full\"\n isLoading={isPushing}\n onClick={handlePushDictionary}\n >\n {saveButton.text}\n </Form.Button>\n )}\n </form>\n </>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"StructureEditor.mjs","names":["StructureEditor: FC<NodeEditorProps>"],"sources":["../../../../src/components/DictionaryFieldEditor/StructureEditor.tsx"],"sourcesContent":["'use client';\n\nimport { useEditedContent } from '@intlayer/editor-react';\nimport type { Dictionary } from '@intlayer/types';\nimport type { FC } from 'react';\nimport { NodeView } from './StructureView/StructureView';\n\ntype NodeEditorProps = {\n dictionary: Dictionary;\n};\n\nexport const StructureEditor: FC<NodeEditorProps> = ({ dictionary }) => {\n const { content, localId } = dictionary;\n\n const { editedContent } = useEditedContent();\n const initialSection =\n typeof editedContent?.[localId!]?.content === 'undefined'\n ? content\n : editedContent?.[localId!]?.content;\n\n return (\n <NodeView\n section={initialSection}\n keyPath={[]}\n dictionaryLocalId={localId!}\n />\n );\n};\n"],"mappings":";;;;;;;AAWA,MAAaA,mBAAwC,EAAE,iBAAiB;CACtE,MAAM,EAAE,SAAS,YAAY;CAE7B,MAAM,EAAE,kBAAkB,kBAAkB;AAM5C,QACE,oBAAC;EACC,SANF,OAAO,gBAAgB,UAAW,YAAY,cAC1C,UACA,gBAAgB,UAAW;EAK7B,SAAS,EAAE;EACX,mBAAmB;GACnB"}
1
+ {"version":3,"file":"StructureEditor.mjs","names":[],"sources":["../../../../src/components/DictionaryFieldEditor/StructureEditor.tsx"],"sourcesContent":["'use client';\n\nimport { useEditedContent } from '@intlayer/editor-react';\nimport type { Dictionary } from '@intlayer/types';\nimport type { FC } from 'react';\nimport { NodeView } from './StructureView/StructureView';\n\ntype NodeEditorProps = {\n dictionary: Dictionary;\n};\n\nexport const StructureEditor: FC<NodeEditorProps> = ({ dictionary }) => {\n const { content, localId } = dictionary;\n\n const { editedContent } = useEditedContent();\n const initialSection =\n typeof editedContent?.[localId!]?.content === 'undefined'\n ? content\n : editedContent?.[localId!]?.content;\n\n return (\n <NodeView\n section={initialSection}\n keyPath={[]}\n dictionaryLocalId={localId!}\n />\n );\n};\n"],"mappings":";;;;;;;AAWA,MAAa,mBAAwC,EAAE,iBAAiB;CACtE,MAAM,EAAE,SAAS,YAAY;CAE7B,MAAM,EAAE,kBAAkB,kBAAkB;AAM5C,QACE,oBAAC;EACC,SANF,OAAO,gBAAgB,UAAW,YAAY,cAC1C,UACA,gBAAgB,UAAW;EAK7B,SAAS,EAAE;EACX,mBAAmB;GACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"StructureView.mjs","names":["NodeTypeView: FC<NodeTypeViewProps>","nodeType","NodeView: FC<NodeWrapperProps>","prevKeyPath: KeyPath[]","lastKeyPath: KeyPath","ObjectView: FC<ObjectViewProps>","StructureView: FC<StructureViewProps>"],"sources":["../../../../../src/components/DictionaryFieldEditor/StructureView/StructureView.tsx"],"sourcesContent":["'use client';\n\nimport {\n Button,\n ButtonColor,\n ButtonSize,\n ButtonVariant,\n} from '@components/Button';\nimport { Container } from '@components/Container';\nimport { EditableFieldInput } from '@components/EditableField';\nimport { InputVariant } from '@components/Input';\nimport { camelCaseToSentence } from '@intlayer/config/client';\nimport {\n getDefaultNode,\n getNodeChildren,\n getNodeType,\n isSameKeyPath,\n} from '@intlayer/core';\nimport {\n useConfiguration,\n useEditedContentActions,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport {\n type KeyPath,\n type LocalDictionaryId,\n NodeType,\n type TypedNode,\n} from '@intlayer/types';\nimport type { ContentNode } from 'intlayer';\nimport { Plus, Trash } from 'lucide-react';\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { NodeTypeSelector } from '../NodeTypeSelector';\n\ntype NodeTypeViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n onNodeTypeChange: (content?: ContentNode) => void;\n};\n\nconst NodeTypeView: FC<NodeTypeViewProps> = ({\n section,\n dictionaryLocalId,\n keyPath,\n onNodeTypeChange: onNodeTypeChangeProp,\n}) => {\n const locales = useConfiguration()?.internationalization.locales ?? [];\n const nodeType = getNodeType(section);\n const children = getNodeChildren(section);\n\n const onNodeTypeChange = (content?: ContentNode) => {\n const transformedContent = getDefaultNode(\n nodeType,\n locales,\n content\n ) as ContentNode;\n\n onNodeTypeChangeProp(transformedContent);\n };\n\n if (\n nodeType === NodeType.Translation ||\n nodeType === NodeType.Condition ||\n nodeType === NodeType.Gender ||\n nodeType === NodeType.Enumeration\n ) {\n const firstKey = Object.keys(\n (section as unknown as TypedNode)[nodeType as keyof typeof section]\n )[0];\n const childrenKeyPath = [\n ...keyPath,\n { type: nodeType, key: firstKey },\n ] as KeyPath[];\n\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n\n <NodeTypeView\n section={children}\n keyPath={childrenKeyPath}\n dictionaryLocalId={dictionaryLocalId}\n onNodeTypeChange={onNodeTypeChange}\n />\n </div>\n );\n }\n\n if (nodeType === NodeType.Array) {\n const childrenKeyPath = [...keyPath, { type: nodeType, key: 0 } as KeyPath];\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n\n <NodeTypeView\n section={children}\n keyPath={childrenKeyPath}\n dictionaryLocalId={dictionaryLocalId}\n onNodeTypeChange={onNodeTypeChange}\n />\n </div>\n );\n }\n\n if (nodeType === NodeType.Object) {\n return (\n <>\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n <div className=\"mt-6 ml-10\">\n <StructureView\n keyPath={keyPath}\n section={section}\n dictionaryLocalId={dictionaryLocalId}\n />\n </div>\n </>\n );\n }\n\n return (\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(getDefaultNode(nodeType, locales) as ContentNode)\n }\n />\n );\n};\n\ntype NodeWrapperProps = {\n sectionKey?: string;\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const NodeView: FC<NodeWrapperProps> = ({\n sectionKey,\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n const { focusedContent, setFocusedContentKeyPath } =\n useFocusUnmergedDictionary();\n const { renameEditedContent, addEditedContent } = useEditedContentActions();\n\n const { titleInput, deleteButton } = useIntlayer('structure-view');\n\n const handleRenameNodeKey = (keyName: string) => {\n renameEditedContent(dictionaryLocalId, keyName, keyPath);\n const prevKeyPath: KeyPath[] = keyPath.slice(0, -1);\n const lastKeyPath: KeyPath = keyPath[keyPath.length - 1];\n const newKeyPath: KeyPath[] = [\n ...prevKeyPath,\n { ...lastKeyPath, key: keyName } as KeyPath,\n ];\n setFocusedContentKeyPath(newKeyPath);\n };\n\n return (\n <Container\n transparency=\"xl\"\n roundedSize=\"xl\"\n className=\"w-full min-w-80 gap-2 overflow-auto px-5 py-2\"\n border\n borderColor=\"text\"\n background=\"none\"\n aria-selected={isSameKeyPath(keyPath, focusedContent?.keyPath ?? [])}\n onClick={() => setFocusedContentKeyPath(keyPath)}\n >\n <div className=\"flex w-full flex-col items-start justify-between gap-3\">\n {typeof sectionKey === 'string' && (\n <div className=\"w-full\">\n <div className=\"flex w-full items-center justify-between gap-10\">\n <EditableFieldInput\n name=\"key\"\n aria-label=\"Key\"\n placeholder={titleInput.placeholder.value}\n defaultValue={sectionKey}\n onSave={(value) => handleRenameNodeKey(value)}\n variant={InputVariant.INVISIBLE}\n />\n <Button\n label={deleteButton.label.value}\n variant={ButtonVariant.HOVERABLE}\n size={ButtonSize.ICON_SM}\n color={ButtonColor.TEXT}\n className=\"translate-x-2\"\n Icon={Trash}\n onClick={() => {\n addEditedContent(dictionaryLocalId, undefined, keyPath);\n\n const parentKeyPath: KeyPath[] = keyPath.slice(0, -1);\n setFocusedContentKeyPath(parentKeyPath);\n }}\n />\n </div>\n\n <span className=\"ml-3 text-neutral text-sm\">\n ( {camelCaseToSentence(sectionKey)} )\n </span>\n </div>\n )}\n <NodeTypeView\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n section={section}\n onNodeTypeChange={(content) => {\n addEditedContent(dictionaryLocalId, content, keyPath);\n }}\n />\n </div>\n </Container>\n );\n};\n\ntype ObjectViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const ObjectView: FC<ObjectViewProps> = ({\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n const { addNodeButton } = useIntlayer('structure-view');\n const { setFocusedContentKeyPath } = useFocusUnmergedDictionary();\n const { addEditedContent } = useEditedContentActions();\n\n if (!section || typeof section !== 'object') {\n return <div>Not an object</div>;\n }\n\n return (\n <div className=\"flex flex-col gap-2 overflow-y-auto\">\n <ul className=\"mr-auto flex flex-col gap-4\">\n {Object.keys(section).map((key) => (\n <li\n key={`${JSON.stringify(keyPath)}-object-${key}`}\n className=\"flex w-full\"\n >\n <NodeView\n sectionKey={key}\n section={section?.[key as keyof typeof section]}\n keyPath={[...keyPath, { type: NodeType.Object, key }]}\n dictionaryLocalId={dictionaryLocalId}\n />\n </li>\n ))}\n </ul>\n <Button\n label={addNodeButton.label.value}\n variant={ButtonVariant.HOVERABLE}\n size={ButtonSize.MD}\n color={ButtonColor.TEXT}\n Icon={Plus}\n className=\"flex-1\"\n onClick={() => {\n const newKey = 'newKey';\n const newKeyPath = [\n ...keyPath,\n { type: NodeType.Object, key: newKey },\n ] as KeyPath[];\n addEditedContent(dictionaryLocalId, '', newKeyPath);\n setFocusedContentKeyPath(newKeyPath);\n }}\n >\n {addNodeButton.text}\n </Button>\n </div>\n );\n};\n\ntype StructureViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const StructureView: FC<StructureViewProps> = ({\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n if (\n !section ||\n typeof section !== 'object' ||\n typeof section.nodeType === 'string'\n ) {\n return (\n <NodeView\n sectionKey={'content'}\n section={section}\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n />\n );\n }\n\n return (\n <ObjectView\n section={section}\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n />\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"StructureView.mjs","names":["nodeType"],"sources":["../../../../../src/components/DictionaryFieldEditor/StructureView/StructureView.tsx"],"sourcesContent":["'use client';\n\nimport {\n Button,\n ButtonColor,\n ButtonSize,\n ButtonVariant,\n} from '@components/Button';\nimport { Container } from '@components/Container';\nimport { EditableFieldInput } from '@components/EditableField';\nimport { InputVariant } from '@components/Input';\nimport { camelCaseToSentence } from '@intlayer/config/client';\nimport {\n getDefaultNode,\n getNodeChildren,\n getNodeType,\n isSameKeyPath,\n} from '@intlayer/core';\nimport {\n useConfiguration,\n useEditedContentActions,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport {\n type KeyPath,\n type LocalDictionaryId,\n NodeType,\n type TypedNode,\n} from '@intlayer/types';\nimport type { ContentNode } from 'intlayer';\nimport { Plus, Trash } from 'lucide-react';\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { NodeTypeSelector } from '../NodeTypeSelector';\n\ntype NodeTypeViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n onNodeTypeChange: (content?: ContentNode) => void;\n};\n\nconst NodeTypeView: FC<NodeTypeViewProps> = ({\n section,\n dictionaryLocalId,\n keyPath,\n onNodeTypeChange: onNodeTypeChangeProp,\n}) => {\n const locales = useConfiguration()?.internationalization.locales ?? [];\n const nodeType = getNodeType(section);\n const children = getNodeChildren(section);\n\n const onNodeTypeChange = (content?: ContentNode) => {\n const transformedContent = getDefaultNode(\n nodeType,\n locales,\n content\n ) as ContentNode;\n\n onNodeTypeChangeProp(transformedContent);\n };\n\n if (\n nodeType === NodeType.Translation ||\n nodeType === NodeType.Condition ||\n nodeType === NodeType.Gender ||\n nodeType === NodeType.Enumeration\n ) {\n const firstKey = Object.keys(\n (section as unknown as TypedNode)[nodeType as keyof typeof section]\n )[0];\n const childrenKeyPath = [\n ...keyPath,\n { type: nodeType, key: firstKey },\n ] as KeyPath[];\n\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n\n <NodeTypeView\n section={children}\n keyPath={childrenKeyPath}\n dictionaryLocalId={dictionaryLocalId}\n onNodeTypeChange={onNodeTypeChange}\n />\n </div>\n );\n }\n\n if (nodeType === NodeType.Array) {\n const childrenKeyPath = [...keyPath, { type: nodeType, key: 0 } as KeyPath];\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n\n <NodeTypeView\n section={children}\n keyPath={childrenKeyPath}\n dictionaryLocalId={dictionaryLocalId}\n onNodeTypeChange={onNodeTypeChange}\n />\n </div>\n );\n }\n\n if (nodeType === NodeType.Object) {\n return (\n <>\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n <div className=\"mt-6 ml-10\">\n <StructureView\n keyPath={keyPath}\n section={section}\n dictionaryLocalId={dictionaryLocalId}\n />\n </div>\n </>\n );\n }\n\n return (\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(getDefaultNode(nodeType, locales) as ContentNode)\n }\n />\n );\n};\n\ntype NodeWrapperProps = {\n sectionKey?: string;\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const NodeView: FC<NodeWrapperProps> = ({\n sectionKey,\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n const { focusedContent, setFocusedContentKeyPath } =\n useFocusUnmergedDictionary();\n const { renameEditedContent, addEditedContent } = useEditedContentActions();\n\n const { titleInput, deleteButton } = useIntlayer('structure-view');\n\n const handleRenameNodeKey = (keyName: string) => {\n renameEditedContent(dictionaryLocalId, keyName, keyPath);\n const prevKeyPath: KeyPath[] = keyPath.slice(0, -1);\n const lastKeyPath: KeyPath = keyPath[keyPath.length - 1];\n const newKeyPath: KeyPath[] = [\n ...prevKeyPath,\n { ...lastKeyPath, key: keyName } as KeyPath,\n ];\n setFocusedContentKeyPath(newKeyPath);\n };\n\n return (\n <Container\n transparency=\"xl\"\n roundedSize=\"xl\"\n className=\"w-full min-w-80 gap-2 overflow-auto px-5 py-2\"\n border\n borderColor=\"text\"\n background=\"none\"\n aria-selected={isSameKeyPath(keyPath, focusedContent?.keyPath ?? [])}\n onClick={() => setFocusedContentKeyPath(keyPath)}\n >\n <div className=\"flex w-full flex-col items-start justify-between gap-3\">\n {typeof sectionKey === 'string' && (\n <div className=\"w-full\">\n <div className=\"flex w-full items-center justify-between gap-10\">\n <EditableFieldInput\n name=\"key\"\n aria-label=\"Key\"\n placeholder={titleInput.placeholder.value}\n defaultValue={sectionKey}\n onSave={(value) => handleRenameNodeKey(value)}\n variant={InputVariant.INVISIBLE}\n />\n <Button\n label={deleteButton.label.value}\n variant={ButtonVariant.HOVERABLE}\n size={ButtonSize.ICON_SM}\n color={ButtonColor.TEXT}\n className=\"translate-x-2\"\n Icon={Trash}\n onClick={() => {\n addEditedContent(dictionaryLocalId, undefined, keyPath);\n\n const parentKeyPath: KeyPath[] = keyPath.slice(0, -1);\n setFocusedContentKeyPath(parentKeyPath);\n }}\n />\n </div>\n\n <span className=\"ml-3 text-neutral text-sm\">\n ( {camelCaseToSentence(sectionKey)} )\n </span>\n </div>\n )}\n <NodeTypeView\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n section={section}\n onNodeTypeChange={(content) => {\n addEditedContent(dictionaryLocalId, content, keyPath);\n }}\n />\n </div>\n </Container>\n );\n};\n\ntype ObjectViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const ObjectView: FC<ObjectViewProps> = ({\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n const { addNodeButton } = useIntlayer('structure-view');\n const { setFocusedContentKeyPath } = useFocusUnmergedDictionary();\n const { addEditedContent } = useEditedContentActions();\n\n if (!section || typeof section !== 'object') {\n return <div>Not an object</div>;\n }\n\n return (\n <div className=\"flex flex-col gap-2 overflow-y-auto\">\n <ul className=\"mr-auto flex flex-col gap-4\">\n {Object.keys(section).map((key) => (\n <li\n key={`${JSON.stringify(keyPath)}-object-${key}`}\n className=\"flex w-full\"\n >\n <NodeView\n sectionKey={key}\n section={section?.[key as keyof typeof section]}\n keyPath={[...keyPath, { type: NodeType.Object, key }]}\n dictionaryLocalId={dictionaryLocalId}\n />\n </li>\n ))}\n </ul>\n <Button\n label={addNodeButton.label.value}\n variant={ButtonVariant.HOVERABLE}\n size={ButtonSize.MD}\n color={ButtonColor.TEXT}\n Icon={Plus}\n className=\"flex-1\"\n onClick={() => {\n const newKey = 'newKey';\n const newKeyPath = [\n ...keyPath,\n { type: NodeType.Object, key: newKey },\n ] as KeyPath[];\n addEditedContent(dictionaryLocalId, '', newKeyPath);\n setFocusedContentKeyPath(newKeyPath);\n }}\n >\n {addNodeButton.text}\n </Button>\n </div>\n );\n};\n\ntype StructureViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const StructureView: FC<StructureViewProps> = ({\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n if (\n !section ||\n typeof section !== 'object' ||\n typeof section.nodeType === 'string'\n ) {\n return (\n <NodeView\n sectionKey={'content'}\n section={section}\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n />\n );\n }\n\n return (\n <ObjectView\n section={section}\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n />\n );\n};\n"],"mappings":"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"}