@intlayer/design-system 8.12.2 → 8.12.4-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (776) hide show
  1. package/dist/esm/api/hooks/ai.mjs.map +1 -1
  2. package/dist/esm/api/hooks/audit.mjs.map +1 -1
  3. package/dist/esm/api/hooks/auth.mjs +14 -8
  4. package/dist/esm/api/hooks/auth.mjs.map +1 -1
  5. package/dist/esm/api/hooks/bitbucket.mjs.map +1 -1
  6. package/dist/esm/api/hooks/dictionary.mjs.map +1 -1
  7. package/dist/esm/api/hooks/discussions.mjs.map +1 -1
  8. package/dist/esm/api/hooks/editor.mjs.map +1 -1
  9. package/dist/esm/api/hooks/environment.mjs.map +1 -1
  10. package/dist/esm/api/hooks/github.mjs.map +1 -1
  11. package/dist/esm/api/hooks/gitlab.mjs.map +1 -1
  12. package/dist/esm/api/hooks/newsletter.mjs.map +1 -1
  13. package/dist/esm/api/hooks/organization.mjs.map +1 -1
  14. package/dist/esm/api/hooks/project.mjs.map +1 -1
  15. package/dist/esm/api/hooks/reviewer.mjs.map +1 -1
  16. package/dist/esm/api/hooks/search.mjs.map +1 -1
  17. package/dist/esm/api/hooks/showcaseProject.mjs.map +1 -1
  18. package/dist/esm/api/hooks/stripe.mjs.map +1 -1
  19. package/dist/esm/api/hooks/tag.mjs.map +1 -1
  20. package/dist/esm/api/hooks/translate.mjs.map +1 -1
  21. package/dist/esm/api/hooks/user.mjs.map +1 -1
  22. package/dist/esm/api/hooks/utils.mjs.map +1 -1
  23. package/dist/esm/api/useAuth/useAuth.mjs.map +1 -1
  24. package/dist/esm/api/useAuth/useOAuth2.mjs +1 -1
  25. package/dist/esm/api/useAuth/useOAuth2.mjs.map +1 -1
  26. package/dist/esm/api/useAuth/useSession.mjs +1 -1
  27. package/dist/esm/api/useAuth/useSession.mjs.map +1 -1
  28. package/dist/esm/api/useIntlayerAPI.mjs.map +1 -1
  29. package/dist/esm/api/useUser/index.mjs.map +1 -1
  30. package/dist/esm/components/Accordion/Accordion.mjs.map +1 -1
  31. package/dist/esm/components/Avatar/image.mjs.map +1 -1
  32. package/dist/esm/components/Avatar/index.mjs.map +1 -1
  33. package/dist/esm/components/Badge/index.mjs.map +1 -1
  34. package/dist/esm/components/Breadcrumb/breadcrumb.content.mjs.map +1 -1
  35. package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
  36. package/dist/esm/components/Browser/Browser.content.mjs.map +1 -1
  37. package/dist/esm/components/Browser/Browser.mjs.map +1 -1
  38. package/dist/esm/components/Browser/extractUrlFromSitemap.mjs.map +1 -1
  39. package/dist/esm/components/Button/Button.mjs +1 -1
  40. package/dist/esm/components/Button/Button.mjs.map +1 -1
  41. package/dist/esm/components/Carousel/index.content.mjs.map +1 -1
  42. package/dist/esm/components/Carousel/index.mjs.map +1 -1
  43. package/dist/esm/components/ClickOutsideDiv/index.mjs.map +1 -1
  44. package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs.map +1 -1
  45. package/dist/esm/components/Command/index.mjs +1 -1
  46. package/dist/esm/components/Command/index.mjs.map +1 -1
  47. package/dist/esm/components/Container/index.mjs.map +1 -1
  48. package/dist/esm/components/ContentEditor/ContentEditor.mjs.map +1 -1
  49. package/dist/esm/components/ContentEditor/ContentEditorInput.mjs.map +1 -1
  50. package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs.map +1 -1
  51. package/dist/esm/components/ContentSelector/ContentSelector.mjs.map +1 -1
  52. package/dist/esm/components/CopyButton/CopyButton.content.mjs.map +1 -1
  53. package/dist/esm/components/CopyButton/index.mjs.map +1 -1
  54. package/dist/esm/components/CopyToClipboard/index.mjs.map +1 -1
  55. package/dist/esm/components/DictionaryEditor/DictionaryEditor.mjs.map +1 -1
  56. package/dist/esm/components/DictionaryEditor/ItemLayout.mjs.map +1 -1
  57. package/dist/esm/components/DictionaryEditor/NodeWrapper/ArrayWrapper.mjs.map +1 -1
  58. package/dist/esm/components/DictionaryEditor/NodeWrapper/BooleanWrapper.mjs.map +1 -1
  59. package/dist/esm/components/DictionaryEditor/NodeWrapper/ConditionWrapper.mjs.map +1 -1
  60. package/dist/esm/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.mjs.map +1 -1
  61. package/dist/esm/components/DictionaryEditor/NodeWrapper/FileWrapper.mjs.map +1 -1
  62. package/dist/esm/components/DictionaryEditor/NodeWrapper/HtmlWrapper.mjs.map +1 -1
  63. package/dist/esm/components/DictionaryEditor/NodeWrapper/InsertionWrapper.mjs.map +1 -1
  64. package/dist/esm/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.mjs.map +1 -1
  65. package/dist/esm/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.mjs.map +1 -1
  66. package/dist/esm/components/DictionaryEditor/NodeWrapper/NumberWrapper.mjs.map +1 -1
  67. package/dist/esm/components/DictionaryEditor/NodeWrapper/PluralWrapper.mjs.map +1 -1
  68. package/dist/esm/components/DictionaryEditor/NodeWrapper/StringWrapper.mjs.map +1 -1
  69. package/dist/esm/components/DictionaryEditor/NodeWrapper/TranslationWrapper.mjs.map +1 -1
  70. package/dist/esm/components/DictionaryEditor/NodeWrapper/index.mjs.map +1 -1
  71. package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs.map +1 -1
  72. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.mjs.map +1 -1
  73. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
  74. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/object.mjs.map +1 -1
  75. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs.map +1 -1
  76. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.mjs.map +1 -1
  77. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.mjs.map +1 -1
  78. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.mjs.map +1 -1
  79. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
  80. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.mjs.map +1 -1
  81. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.mjs.map +1 -1
  82. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.mjs.map +1 -1
  83. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
  84. package/dist/esm/components/DictionaryFieldEditor/EnumKeyInput.mjs.map +1 -1
  85. package/dist/esm/components/DictionaryFieldEditor/JSONEditor.mjs.map +1 -1
  86. package/dist/esm/components/DictionaryFieldEditor/KeyPathBreadcrumb.mjs.map +1 -1
  87. package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs.map +1 -1
  88. package/dist/esm/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.mjs.map +1 -1
  89. package/dist/esm/components/DictionaryFieldEditor/NodeTypeSelector.mjs.map +1 -1
  90. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +8 -3
  91. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
  92. package/dist/esm/components/DictionaryFieldEditor/SaveForm/saveForm.content.mjs.map +1 -1
  93. package/dist/esm/components/DictionaryFieldEditor/StructureEditor.mjs.map +1 -1
  94. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
  95. package/dist/esm/components/DictionaryFieldEditor/StructureView/structureView.content.mjs.map +1 -1
  96. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs.map +1 -1
  97. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.mjs.map +1 -1
  98. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.mjs.map +1 -1
  99. package/dist/esm/components/DictionaryFieldEditor/dictionaryFieldEditor.content.mjs.map +1 -1
  100. package/dist/esm/components/DictionaryFieldEditor/getIsEditableSection.mjs.map +1 -1
  101. package/dist/esm/components/DictionaryFieldEditor/nodeTypeSelector.content.mjs.map +1 -1
  102. package/dist/esm/components/DropDown/index.mjs.map +1 -1
  103. package/dist/esm/components/EditableField/EditableFieldInput.mjs.map +1 -1
  104. package/dist/esm/components/EditableField/EditableFieldLayout.mjs.map +1 -1
  105. package/dist/esm/components/EditableField/EditableFieldTextArea.mjs.map +1 -1
  106. package/dist/esm/components/ExpandCollapse/ExpandCollapse.mjs.map +1 -1
  107. package/dist/esm/components/ExpandCollapse/expandCollapse.content.mjs.map +1 -1
  108. package/dist/esm/components/Flags/Flag.mjs +6 -2
  109. package/dist/esm/components/Flags/Flag.mjs.map +1 -1
  110. package/dist/esm/components/Flags/ae.mjs.map +1 -1
  111. package/dist/esm/components/Flags/af.mjs.map +1 -1
  112. package/dist/esm/components/Flags/al.mjs.map +1 -1
  113. package/dist/esm/components/Flags/am.mjs.map +1 -1
  114. package/dist/esm/components/Flags/ar.mjs.map +1 -1
  115. package/dist/esm/components/Flags/at.mjs.map +1 -1
  116. package/dist/esm/components/Flags/au.mjs.map +1 -1
  117. package/dist/esm/components/Flags/az.mjs.map +1 -1
  118. package/dist/esm/components/Flags/ba.mjs.map +1 -1
  119. package/dist/esm/components/Flags/bd.mjs.map +1 -1
  120. package/dist/esm/components/Flags/be.mjs.map +1 -1
  121. package/dist/esm/components/Flags/bg.mjs.map +1 -1
  122. package/dist/esm/components/Flags/bh.mjs.map +1 -1
  123. package/dist/esm/components/Flags/bn.mjs.map +1 -1
  124. package/dist/esm/components/Flags/bo.mjs.map +1 -1
  125. package/dist/esm/components/Flags/br.mjs.map +1 -1
  126. package/dist/esm/components/Flags/bw.mjs.map +1 -1
  127. package/dist/esm/components/Flags/by.mjs.map +1 -1
  128. package/dist/esm/components/Flags/bz.mjs.map +1 -1
  129. package/dist/esm/components/Flags/ca.mjs.map +1 -1
  130. package/dist/esm/components/Flags/ch.mjs.map +1 -1
  131. package/dist/esm/components/Flags/cl.mjs.map +1 -1
  132. package/dist/esm/components/Flags/cn.mjs.map +1 -1
  133. package/dist/esm/components/Flags/co.mjs.map +1 -1
  134. package/dist/esm/components/Flags/cr.mjs.map +1 -1
  135. package/dist/esm/components/Flags/cu.mjs.map +1 -1
  136. package/dist/esm/components/Flags/cv.mjs.map +1 -1
  137. package/dist/esm/components/Flags/cz.mjs.map +1 -1
  138. package/dist/esm/components/Flags/de.mjs.map +1 -1
  139. package/dist/esm/components/Flags/dj.mjs.map +1 -1
  140. package/dist/esm/components/Flags/dk.mjs.map +1 -1
  141. package/dist/esm/components/Flags/do.mjs.map +1 -1
  142. package/dist/esm/components/Flags/dz.mjs.map +1 -1
  143. package/dist/esm/components/Flags/ec.mjs.map +1 -1
  144. package/dist/esm/components/Flags/ee.mjs.map +1 -1
  145. package/dist/esm/components/Flags/eg.mjs.map +1 -1
  146. package/dist/esm/components/Flags/es-ct.mjs.map +1 -1
  147. package/dist/esm/components/Flags/es-ga.mjs.map +1 -1
  148. package/dist/esm/components/Flags/es-pv.mjs.map +1 -1
  149. package/dist/esm/components/Flags/es.mjs.map +1 -1
  150. package/dist/esm/components/Flags/et.mjs.map +1 -1
  151. package/dist/esm/components/Flags/fi.mjs.map +1 -1
  152. package/dist/esm/components/Flags/flags.mjs.map +1 -1
  153. package/dist/esm/components/Flags/fo.mjs.map +1 -1
  154. package/dist/esm/components/Flags/fr.mjs.map +1 -1
  155. package/dist/esm/components/Flags/gb-wls.mjs.map +1 -1
  156. package/dist/esm/components/Flags/gb.mjs.map +1 -1
  157. package/dist/esm/components/Flags/ge.mjs.map +1 -1
  158. package/dist/esm/components/Flags/gh.mjs.map +1 -1
  159. package/dist/esm/components/Flags/gr.mjs.map +1 -1
  160. package/dist/esm/components/Flags/gt.mjs.map +1 -1
  161. package/dist/esm/components/Flags/gw.mjs.map +1 -1
  162. package/dist/esm/components/Flags/hk.mjs.map +1 -1
  163. package/dist/esm/components/Flags/hn.mjs.map +1 -1
  164. package/dist/esm/components/Flags/hr.mjs.map +1 -1
  165. package/dist/esm/components/Flags/hu.mjs.map +1 -1
  166. package/dist/esm/components/Flags/id.mjs.map +1 -1
  167. package/dist/esm/components/Flags/ie.mjs.map +1 -1
  168. package/dist/esm/components/Flags/il.mjs.map +1 -1
  169. package/dist/esm/components/Flags/in.mjs.map +1 -1
  170. package/dist/esm/components/Flags/iq.mjs.map +1 -1
  171. package/dist/esm/components/Flags/ir.mjs.map +1 -1
  172. package/dist/esm/components/Flags/is.mjs.map +1 -1
  173. package/dist/esm/components/Flags/it.mjs.map +1 -1
  174. package/dist/esm/components/Flags/jm.mjs.map +1 -1
  175. package/dist/esm/components/Flags/jo.mjs.map +1 -1
  176. package/dist/esm/components/Flags/jp.mjs.map +1 -1
  177. package/dist/esm/components/Flags/ke.mjs.map +1 -1
  178. package/dist/esm/components/Flags/kg.mjs.map +1 -1
  179. package/dist/esm/components/Flags/kh.mjs.map +1 -1
  180. package/dist/esm/components/Flags/km.mjs.map +1 -1
  181. package/dist/esm/components/Flags/kr.mjs.map +1 -1
  182. package/dist/esm/components/Flags/kw.mjs.map +1 -1
  183. package/dist/esm/components/Flags/kz.mjs.map +1 -1
  184. package/dist/esm/components/Flags/la.mjs.map +1 -1
  185. package/dist/esm/components/Flags/lb.mjs.map +1 -1
  186. package/dist/esm/components/Flags/li.mjs.map +1 -1
  187. package/dist/esm/components/Flags/lk.mjs.map +1 -1
  188. package/dist/esm/components/Flags/lt.mjs.map +1 -1
  189. package/dist/esm/components/Flags/lu.mjs.map +1 -1
  190. package/dist/esm/components/Flags/lv.mjs.map +1 -1
  191. package/dist/esm/components/Flags/ly.mjs.map +1 -1
  192. package/dist/esm/components/Flags/ma.mjs.map +1 -1
  193. package/dist/esm/components/Flags/mc.mjs.map +1 -1
  194. package/dist/esm/components/Flags/md.mjs.map +1 -1
  195. package/dist/esm/components/Flags/mk.mjs.map +1 -1
  196. package/dist/esm/components/Flags/mm.mjs.map +1 -1
  197. package/dist/esm/components/Flags/mn.mjs.map +1 -1
  198. package/dist/esm/components/Flags/mo.mjs.map +1 -1
  199. package/dist/esm/components/Flags/mr.mjs.map +1 -1
  200. package/dist/esm/components/Flags/mt.mjs.map +1 -1
  201. package/dist/esm/components/Flags/mv.mjs.map +1 -1
  202. package/dist/esm/components/Flags/mx.mjs.map +1 -1
  203. package/dist/esm/components/Flags/my.mjs.map +1 -1
  204. package/dist/esm/components/Flags/mz.mjs.map +1 -1
  205. package/dist/esm/components/Flags/ng.mjs.map +1 -1
  206. package/dist/esm/components/Flags/ni.mjs.map +1 -1
  207. package/dist/esm/components/Flags/nl.mjs.map +1 -1
  208. package/dist/esm/components/Flags/no.mjs.map +1 -1
  209. package/dist/esm/components/Flags/np.mjs.map +1 -1
  210. package/dist/esm/components/Flags/nz.mjs.map +1 -1
  211. package/dist/esm/components/Flags/om.mjs.map +1 -1
  212. package/dist/esm/components/Flags/pa.mjs.map +1 -1
  213. package/dist/esm/components/Flags/pe.mjs.map +1 -1
  214. package/dist/esm/components/Flags/ph.mjs.map +1 -1
  215. package/dist/esm/components/Flags/pk.mjs.map +1 -1
  216. package/dist/esm/components/Flags/pl.mjs.map +1 -1
  217. package/dist/esm/components/Flags/pr.mjs.map +1 -1
  218. package/dist/esm/components/Flags/ps.mjs.map +1 -1
  219. package/dist/esm/components/Flags/pt.mjs.map +1 -1
  220. package/dist/esm/components/Flags/py.mjs.map +1 -1
  221. package/dist/esm/components/Flags/qa.mjs.map +1 -1
  222. package/dist/esm/components/Flags/ro.mjs.map +1 -1
  223. package/dist/esm/components/Flags/rs.mjs.map +1 -1
  224. package/dist/esm/components/Flags/ru.mjs.map +1 -1
  225. package/dist/esm/components/Flags/sa.mjs.map +1 -1
  226. package/dist/esm/components/Flags/sd.mjs.map +1 -1
  227. package/dist/esm/components/Flags/se.mjs.map +1 -1
  228. package/dist/esm/components/Flags/sg.mjs.map +1 -1
  229. package/dist/esm/components/Flags/si.mjs.map +1 -1
  230. package/dist/esm/components/Flags/sk.mjs.map +1 -1
  231. package/dist/esm/components/Flags/so.mjs.map +1 -1
  232. package/dist/esm/components/Flags/st.mjs.map +1 -1
  233. package/dist/esm/components/Flags/sv.mjs.map +1 -1
  234. package/dist/esm/components/Flags/sy.mjs.map +1 -1
  235. package/dist/esm/components/Flags/td.mjs.map +1 -1
  236. package/dist/esm/components/Flags/th.mjs.map +1 -1
  237. package/dist/esm/components/Flags/tl.mjs.map +1 -1
  238. package/dist/esm/components/Flags/tn.mjs.map +1 -1
  239. package/dist/esm/components/Flags/tr.mjs.map +1 -1
  240. package/dist/esm/components/Flags/tt.mjs.map +1 -1
  241. package/dist/esm/components/Flags/tw.mjs.map +1 -1
  242. package/dist/esm/components/Flags/tz.mjs.map +1 -1
  243. package/dist/esm/components/Flags/ua.mjs.map +1 -1
  244. package/dist/esm/components/Flags/ug.mjs.map +1 -1
  245. package/dist/esm/components/Flags/us.mjs.map +1 -1
  246. package/dist/esm/components/Flags/uy.mjs.map +1 -1
  247. package/dist/esm/components/Flags/uz.mjs.map +1 -1
  248. package/dist/esm/components/Flags/ve.mjs.map +1 -1
  249. package/dist/esm/components/Flags/vn.mjs.map +1 -1
  250. package/dist/esm/components/Flags/xx.mjs.map +1 -1
  251. package/dist/esm/components/Flags/ye.mjs.map +1 -1
  252. package/dist/esm/components/Flags/za.mjs.map +1 -1
  253. package/dist/esm/components/Flags/zw.mjs.map +1 -1
  254. package/dist/esm/components/Footer/index.mjs +1 -1
  255. package/dist/esm/components/Footer/index.mjs.map +1 -1
  256. package/dist/esm/components/Form/FormBase.mjs.map +1 -1
  257. package/dist/esm/components/Form/FormControl.mjs.map +1 -1
  258. package/dist/esm/components/Form/FormDescription.mjs.map +1 -1
  259. package/dist/esm/components/Form/FormField.mjs.map +1 -1
  260. package/dist/esm/components/Form/FormItem.mjs.map +1 -1
  261. package/dist/esm/components/Form/FormLabel.mjs.map +1 -1
  262. package/dist/esm/components/Form/FormMessage.mjs.map +1 -1
  263. package/dist/esm/components/Form/elements/AutoSizeTextAreaElement.mjs.map +1 -1
  264. package/dist/esm/components/Form/elements/CheckboxElement.mjs.map +1 -1
  265. package/dist/esm/components/Form/elements/EditableFieldInputElement.mjs.map +1 -1
  266. package/dist/esm/components/Form/elements/EditableFieldTextAreaElement.mjs.map +1 -1
  267. package/dist/esm/components/Form/elements/FormElement.mjs.map +1 -1
  268. package/dist/esm/components/Form/elements/FormElementWrapper.mjs.map +1 -1
  269. package/dist/esm/components/Form/elements/InputElement.mjs.map +1 -1
  270. package/dist/esm/components/Form/elements/InputPasswordElement.mjs.map +1 -1
  271. package/dist/esm/components/Form/elements/MultiselectElement.mjs.map +1 -1
  272. package/dist/esm/components/Form/elements/OTPElement.mjs.map +1 -1
  273. package/dist/esm/components/Form/elements/SearchInputElement.mjs.map +1 -1
  274. package/dist/esm/components/Form/elements/SelectElement.mjs.map +1 -1
  275. package/dist/esm/components/Form/elements/SwitchSelectorElement.mjs.map +1 -1
  276. package/dist/esm/components/Form/elements/TextAreaElement.mjs.map +1 -1
  277. package/dist/esm/components/Form/layout/FormItemLayout.mjs.map +1 -1
  278. package/dist/esm/components/Form/layout/FormLabelLayout.mjs.map +1 -1
  279. package/dist/esm/components/Form/layout/RequiredStar.mjs.map +1 -1
  280. package/dist/esm/components/HTMLRender/HTMLRender.mjs.map +1 -1
  281. package/dist/esm/components/Headers/index.mjs +1 -1
  282. package/dist/esm/components/Headers/index.mjs.map +1 -1
  283. package/dist/esm/components/HeightResizer/index.mjs +25 -17
  284. package/dist/esm/components/HeightResizer/index.mjs.map +1 -1
  285. package/dist/esm/components/HideShow/index.mjs.map +1 -1
  286. package/dist/esm/components/IDE/Code.mjs.map +1 -1
  287. package/dist/esm/components/IDE/CodeBlockClient.mjs.map +1 -1
  288. package/dist/esm/components/IDE/CodeBlockHighlight.mjs.map +1 -1
  289. package/dist/esm/components/IDE/CodeBlockServer.mjs.map +1 -1
  290. package/dist/esm/components/IDE/CodeBlockShiki.mjs +1 -1
  291. package/dist/esm/components/IDE/CodeBlockShiki.mjs.map +1 -1
  292. package/dist/esm/components/IDE/CodeConditionalRenderer.mjs.map +1 -1
  293. package/dist/esm/components/IDE/CodeContext.mjs.map +1 -1
  294. package/dist/esm/components/IDE/CodeFormatSelector.mjs.map +1 -1
  295. package/dist/esm/components/IDE/ContentDeclarationFormatSelector.mjs.map +1 -1
  296. package/dist/esm/components/IDE/CopyCode.mjs.map +1 -1
  297. package/dist/esm/components/IDE/FileList.mjs.map +1 -1
  298. package/dist/esm/components/IDE/FileTree.mjs +1 -1
  299. package/dist/esm/components/IDE/FileTree.mjs.map +1 -1
  300. package/dist/esm/components/IDE/IDE.mjs.map +1 -1
  301. package/dist/esm/components/IDE/MarkDownRender.mjs.map +1 -1
  302. package/dist/esm/components/IDE/MonacoCode.mjs.map +1 -1
  303. package/dist/esm/components/IDE/PackageManagerSelector.mjs.map +1 -1
  304. package/dist/esm/components/IDE/code.content.mjs.map +1 -1
  305. package/dist/esm/components/IDE/codeTransformer.mjs.map +1 -1
  306. package/dist/esm/components/IDE/copyCode.content.mjs.map +1 -1
  307. package/dist/esm/components/IDE/createFileTree.mjs.map +1 -1
  308. package/dist/esm/components/IDE/selectors.content.mjs.map +1 -1
  309. package/dist/esm/components/InformationTag/index.mjs.map +1 -1
  310. package/dist/esm/components/Input/Checkbox.mjs.map +1 -1
  311. package/dist/esm/components/Input/Input.mjs.map +1 -1
  312. package/dist/esm/components/Input/InputPassword.mjs.map +1 -1
  313. package/dist/esm/components/Input/OTPInput.mjs.map +1 -1
  314. package/dist/esm/components/Input/Radio.mjs.map +1 -1
  315. package/dist/esm/components/Input/SearchInput.mjs.map +1 -1
  316. package/dist/esm/components/KeyboardScreenAdapter/index.mjs.map +1 -1
  317. package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs.map +1 -1
  318. package/dist/esm/components/Label/index.mjs.map +1 -1
  319. package/dist/esm/components/LanguageBackground/LanguageBackground.mjs +23 -0
  320. package/dist/esm/components/LanguageBackground/LanguageBackground.mjs.map +1 -0
  321. package/dist/esm/components/LanguageBackground/LanguageSection.mjs.map +1 -1
  322. package/dist/esm/components/LanguageBackground/index.mjs +2 -22
  323. package/dist/esm/components/Link/Link.mjs +3 -3
  324. package/dist/esm/components/Link/Link.mjs.map +1 -1
  325. package/dist/esm/components/Loader/index.content.mjs.map +1 -1
  326. package/dist/esm/components/Loader/index.mjs +1 -1
  327. package/dist/esm/components/Loader/index.mjs.map +1 -1
  328. package/dist/esm/components/Loader/spinner.mjs.map +1 -1
  329. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs.map +1 -1
  330. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.mjs.map +1 -1
  331. package/dist/esm/components/LocaleSwitcherContentDropDown/localeSwitcher.content.mjs.map +1 -1
  332. package/dist/esm/components/LocaleSwitcherDropDown/LocaleSwitcher.mjs.map +1 -1
  333. package/dist/esm/components/LocaleSwitcherDropDown/localeSwitcher.content.mjs.map +1 -1
  334. package/dist/esm/components/Logo/Logo.mjs.map +1 -1
  335. package/dist/esm/components/Logo/LogoTextOnly.mjs.map +1 -1
  336. package/dist/esm/components/Logo/LogoWithText.mjs.map +1 -1
  337. package/dist/esm/components/Logo/LogoWithTextBelow.mjs.map +1 -1
  338. package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs.map +1 -1
  339. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
  340. package/dist/esm/components/MaxHeightSmoother/index.mjs.map +1 -1
  341. package/dist/esm/components/MaxWidthSmoother/index.mjs +14 -11
  342. package/dist/esm/components/MaxWidthSmoother/index.mjs.map +1 -1
  343. package/dist/esm/components/Modal/Modal.mjs.map +1 -1
  344. package/dist/esm/components/Navbar/Burger.mjs.map +1 -1
  345. package/dist/esm/components/Navbar/DesktopNavbar.mjs +1 -1
  346. package/dist/esm/components/Navbar/DesktopNavbar.mjs.map +1 -1
  347. package/dist/esm/components/Navbar/MobileNavbar.mjs.map +1 -1
  348. package/dist/esm/components/Navbar/index.mjs.map +1 -1
  349. package/dist/esm/components/Navbar/useNavigation.mjs.map +1 -1
  350. package/dist/esm/components/Pagination/NumberItemsSelector.mjs.map +1 -1
  351. package/dist/esm/components/Pagination/Pagination.mjs.map +1 -1
  352. package/dist/esm/components/Pagination/ShowingResultsNumberItems.mjs.map +1 -1
  353. package/dist/esm/components/Pagination/pagination.content.mjs.map +1 -1
  354. package/dist/esm/components/Pattern/DotPattern.mjs.map +1 -1
  355. package/dist/esm/components/Pattern/GridPattern.mjs.map +1 -1
  356. package/dist/esm/components/Pattern/SpotLight.mjs.map +1 -1
  357. package/dist/esm/components/Popover/dynamic.mjs.map +1 -1
  358. package/dist/esm/components/Popover/static.mjs.map +1 -1
  359. package/dist/esm/components/PressableSpan/PressableSpan.mjs.map +1 -1
  360. package/dist/esm/components/RightDrawer/RightDrawer.mjs.map +1 -1
  361. package/dist/esm/components/RightDrawer/isElementAtTopAndNotCovered.mjs.map +1 -1
  362. package/dist/esm/components/RightDrawer/rightDrawer.content.mjs.map +1 -1
  363. package/dist/esm/components/RightDrawer/useRightDrawer.mjs.map +1 -1
  364. package/dist/esm/components/Select/Multiselect.mjs.map +1 -1
  365. package/dist/esm/components/Select/Select.mjs.map +1 -1
  366. package/dist/esm/components/SocialNetworks/DiscordLogo.mjs.map +1 -1
  367. package/dist/esm/components/SocialNetworks/FacebookLogo.mjs.map +1 -1
  368. package/dist/esm/components/SocialNetworks/InstagramLogo.mjs.map +1 -1
  369. package/dist/esm/components/SocialNetworks/ProductHuntLogo.mjs.map +1 -1
  370. package/dist/esm/components/SocialNetworks/TiktokLogo.mjs.map +1 -1
  371. package/dist/esm/components/SocialNetworks/XLogo.mjs.map +1 -1
  372. package/dist/esm/components/SocialNetworks/YoutubeLogo.mjs.map +1 -1
  373. package/dist/esm/components/SocialNetworks/index.mjs.map +1 -1
  374. package/dist/esm/components/Steps/index.mjs.map +1 -1
  375. package/dist/esm/components/Steps/steps.content.mjs.map +1 -1
  376. package/dist/esm/components/SwitchSelector/SwitchSelector.mjs.map +1 -1
  377. package/dist/esm/components/SwitchSelector/VerticalSwitchSelector.mjs.map +1 -1
  378. package/dist/esm/components/SwitchSelector/useSwitchSelector.mjs.map +1 -1
  379. package/dist/esm/components/Tab/Tab.mjs.map +1 -1
  380. package/dist/esm/components/Tab/TabContext.mjs.map +1 -1
  381. package/dist/esm/components/TabSelector/TabSelector.mjs.map +1 -1
  382. package/dist/esm/components/Table/ExpandButton.mjs.map +1 -1
  383. package/dist/esm/components/Table/SmartTable.mjs.map +1 -1
  384. package/dist/esm/components/Table/Table.mjs.map +1 -1
  385. package/dist/esm/components/Table/TableElements.mjs.map +1 -1
  386. package/dist/esm/components/Table/table.content.mjs.map +1 -1
  387. package/dist/esm/components/Table/useTableWidths.mjs.map +1 -1
  388. package/dist/esm/components/Tag/index.mjs.map +1 -1
  389. package/dist/esm/components/TechLogo/TechLogo.mjs.map +1 -1
  390. package/dist/esm/components/TechLogo/logos/Adonis.mjs.map +1 -1
  391. package/dist/esm/components/TechLogo/logos/Angular.mjs.map +1 -1
  392. package/dist/esm/components/TechLogo/logos/Anthropic.mjs.map +1 -1
  393. package/dist/esm/components/TechLogo/logos/Astro.mjs.map +1 -1
  394. package/dist/esm/components/TechLogo/logos/Atlassian.mjs.map +1 -1
  395. package/dist/esm/components/TechLogo/logos/Bitbucket.mjs.map +1 -1
  396. package/dist/esm/components/TechLogo/logos/ChatGPT.mjs.map +1 -1
  397. package/dist/esm/components/TechLogo/logos/Claude.mjs.map +1 -1
  398. package/dist/esm/components/TechLogo/logos/DeepSeek.mjs.map +1 -1
  399. package/dist/esm/components/TechLogo/logos/Express.mjs.map +1 -1
  400. package/dist/esm/components/TechLogo/logos/Fastify.mjs.map +1 -1
  401. package/dist/esm/components/TechLogo/logos/Gemini.mjs.map +1 -1
  402. package/dist/esm/components/TechLogo/logos/GitHub.mjs.map +1 -1
  403. package/dist/esm/components/TechLogo/logos/GitLab.mjs.map +1 -1
  404. package/dist/esm/components/TechLogo/logos/Google.mjs.map +1 -1
  405. package/dist/esm/components/TechLogo/logos/GoogleAI.mjs.map +1 -1
  406. package/dist/esm/components/TechLogo/logos/Grok.mjs.map +1 -1
  407. package/dist/esm/components/TechLogo/logos/Hono.mjs.map +1 -1
  408. package/dist/esm/components/TechLogo/logos/LinkedIn.mjs.map +1 -1
  409. package/dist/esm/components/TechLogo/logos/Lit.mjs.map +1 -1
  410. package/dist/esm/components/TechLogo/logos/Lynx.mjs.map +1 -1
  411. package/dist/esm/components/TechLogo/logos/Microsoft.mjs.map +1 -1
  412. package/dist/esm/components/TechLogo/logos/Mistral.mjs.map +1 -1
  413. package/dist/esm/components/TechLogo/logos/NestJS.mjs.map +1 -1
  414. package/dist/esm/components/TechLogo/logos/Nextjs.mjs.map +1 -1
  415. package/dist/esm/components/TechLogo/logos/Node.mjs.map +1 -1
  416. package/dist/esm/components/TechLogo/logos/Nuxt.mjs.map +1 -1
  417. package/dist/esm/components/TechLogo/logos/Ollama.mjs.map +1 -1
  418. package/dist/esm/components/TechLogo/logos/OpenAI.mjs.map +1 -1
  419. package/dist/esm/components/TechLogo/logos/Perplexity.mjs.map +1 -1
  420. package/dist/esm/components/TechLogo/logos/Preact.mjs.map +1 -1
  421. package/dist/esm/components/TechLogo/logos/Reactjs.mjs.map +1 -1
  422. package/dist/esm/components/TechLogo/logos/Solid.mjs.map +1 -1
  423. package/dist/esm/components/TechLogo/logos/Svelte.mjs.map +1 -1
  424. package/dist/esm/components/TechLogo/logos/Tanstack.mjs.map +1 -1
  425. package/dist/esm/components/TechLogo/logos/Vanilla.mjs.map +1 -1
  426. package/dist/esm/components/TechLogo/logos/Vitejs.mjs.map +1 -1
  427. package/dist/esm/components/TechLogo/logos/Vuejs.mjs.map +1 -1
  428. package/dist/esm/components/Terminal/Terminal.mjs.map +1 -1
  429. package/dist/esm/components/Terminal/terminal.content.mjs.map +1 -1
  430. package/dist/esm/components/TextArea/AutoSizeTextArea.mjs +2 -1
  431. package/dist/esm/components/TextArea/AutoSizeTextArea.mjs.map +1 -1
  432. package/dist/esm/components/TextArea/AutocompleteTextArea.mjs.map +1 -1
  433. package/dist/esm/components/TextArea/ContentEditableTextArea.mjs.map +1 -1
  434. package/dist/esm/components/TextArea/TextArea.mjs.map +1 -1
  435. package/dist/esm/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs.map +1 -1
  436. package/dist/esm/components/ThemeSwitcherDropDown/MobileThemeSwitcher.mjs.map +1 -1
  437. package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
  438. package/dist/esm/components/Toaster/Toaster.mjs.map +1 -1
  439. package/dist/esm/components/Toaster/useToast.mjs.map +1 -1
  440. package/dist/esm/components/WithResizer/index.mjs.map +1 -1
  441. package/dist/esm/components/index.mjs +1 -1
  442. package/dist/esm/hooks/useDevice.mjs +8 -1
  443. package/dist/esm/hooks/useDevice.mjs.map +1 -1
  444. package/dist/esm/hooks/useGetElementById.mjs.map +1 -1
  445. package/dist/esm/hooks/useGetElementOrWindow.mjs.map +1 -1
  446. package/dist/esm/hooks/useHorizontalSwipe.mjs.map +1 -1
  447. package/dist/esm/hooks/useIsDarkMode.mjs.map +1 -1
  448. package/dist/esm/hooks/useIsMounted.mjs.map +1 -1
  449. package/dist/esm/hooks/useItemSelector.mjs.map +1 -1
  450. package/dist/esm/hooks/useKeyboardDetector.mjs.map +1 -1
  451. package/dist/esm/hooks/usePersistedStore.mjs.map +1 -1
  452. package/dist/esm/hooks/useScreenWidth.mjs.map +1 -1
  453. package/dist/esm/hooks/useScrollBlockage/index.mjs.map +1 -1
  454. package/dist/esm/hooks/useScrollBlockage/useScrollBlockageStore.mjs.map +1 -1
  455. package/dist/esm/hooks/useScrollDetection.mjs.map +1 -1
  456. package/dist/esm/hooks/useScrollY.mjs.map +1 -1
  457. package/dist/esm/hooks/useSearch.mjs.map +1 -1
  458. package/dist/esm/libs/auth.mjs.map +1 -1
  459. package/dist/esm/providers/ReactQueryProvider.mjs +20 -1
  460. package/dist/esm/providers/ReactQueryProvider.mjs.map +1 -1
  461. package/dist/esm/tailwind.config.mjs.map +1 -1
  462. package/dist/esm/utils/cn.mjs.map +1 -1
  463. package/dist/types/api/hooks/auth.d.ts.map +1 -1
  464. package/dist/types/api/hooks/showcaseProject.d.ts.map +1 -1
  465. package/dist/types/api/useAuth/useOAuth2.d.ts.map +1 -1
  466. package/dist/types/api/useIntlayerAPI.d.ts +103 -101
  467. package/dist/types/api/useIntlayerAPI.d.ts.map +1 -1
  468. package/dist/types/api/useUser/index.d.ts +3 -1
  469. package/dist/types/api/useUser/index.d.ts.map +1 -1
  470. package/dist/types/components/Accordion/Accordion.d.ts.map +1 -1
  471. package/dist/types/components/Avatar/image.d.ts.map +1 -1
  472. package/dist/types/components/Avatar/index.d.ts.map +1 -1
  473. package/dist/types/components/Badge/index.d.ts +3 -2
  474. package/dist/types/components/Badge/index.d.ts.map +1 -1
  475. package/dist/types/components/Breadcrumb/breadcrumb.content.d.ts +3 -1
  476. package/dist/types/components/Breadcrumb/breadcrumb.content.d.ts.map +1 -1
  477. package/dist/types/components/Breadcrumb/index.d.ts +2 -1
  478. package/dist/types/components/Breadcrumb/index.d.ts.map +1 -1
  479. package/dist/types/components/Browser/Browser.content.d.ts +15 -13
  480. package/dist/types/components/Browser/Browser.content.d.ts.map +1 -1
  481. package/dist/types/components/Browser/Browser.d.ts +2 -1
  482. package/dist/types/components/Browser/Browser.d.ts.map +1 -1
  483. package/dist/types/components/Browser/extractUrlFromSitemap.d.ts.map +1 -1
  484. package/dist/types/components/Button/Button.d.ts +5 -4
  485. package/dist/types/components/Button/Button.d.ts.map +1 -1
  486. package/dist/types/components/Carousel/index.content.d.ts +5 -3
  487. package/dist/types/components/Carousel/index.content.d.ts.map +1 -1
  488. package/dist/types/components/Carousel/index.d.ts.map +1 -1
  489. package/dist/types/components/ClickOutsideDiv/index.d.ts.map +1 -1
  490. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +2 -1
  491. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts.map +1 -1
  492. package/dist/types/components/Command/index.d.ts +15 -14
  493. package/dist/types/components/Command/index.d.ts.map +1 -1
  494. package/dist/types/components/Container/index.d.ts +4 -3
  495. package/dist/types/components/Container/index.d.ts.map +1 -1
  496. package/dist/types/components/ContentEditor/ContentEditor.d.ts.map +1 -1
  497. package/dist/types/components/ContentEditor/ContentEditorInput.d.ts.map +1 -1
  498. package/dist/types/components/ContentEditor/ContentEditorTextArea.d.ts.map +1 -1
  499. package/dist/types/components/ContentSelector/ContentSelector.d.ts.map +1 -1
  500. package/dist/types/components/CopyButton/CopyButton.content.d.ts +3 -1
  501. package/dist/types/components/CopyButton/CopyButton.content.d.ts.map +1 -1
  502. package/dist/types/components/CopyButton/index.d.ts.map +1 -1
  503. package/dist/types/components/CopyToClipboard/index.d.ts.map +1 -1
  504. package/dist/types/components/DictionaryEditor/DictionaryEditor.d.ts.map +1 -1
  505. package/dist/types/components/DictionaryEditor/ItemLayout.d.ts.map +1 -1
  506. package/dist/types/components/DictionaryEditor/NodeWrapper/ArrayWrapper.d.ts.map +1 -1
  507. package/dist/types/components/DictionaryEditor/NodeWrapper/BooleanWrapper.d.ts.map +1 -1
  508. package/dist/types/components/DictionaryEditor/NodeWrapper/ConditionWrapper.d.ts +1 -1
  509. package/dist/types/components/DictionaryEditor/NodeWrapper/ConditionWrapper.d.ts.map +1 -1
  510. package/dist/types/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.d.ts +1 -1
  511. package/dist/types/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.d.ts.map +1 -1
  512. package/dist/types/components/DictionaryEditor/NodeWrapper/FileWrapper.d.ts.map +1 -1
  513. package/dist/types/components/DictionaryEditor/NodeWrapper/HtmlWrapper.d.ts +1 -1
  514. package/dist/types/components/DictionaryEditor/NodeWrapper/HtmlWrapper.d.ts.map +1 -1
  515. package/dist/types/components/DictionaryEditor/NodeWrapper/InsertionWrapper.d.ts +1 -1
  516. package/dist/types/components/DictionaryEditor/NodeWrapper/InsertionWrapper.d.ts.map +1 -1
  517. package/dist/types/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.d.ts +1 -1
  518. package/dist/types/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.d.ts.map +1 -1
  519. package/dist/types/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.d.ts.map +1 -1
  520. package/dist/types/components/DictionaryEditor/NodeWrapper/NumberWrapper.d.ts.map +1 -1
  521. package/dist/types/components/DictionaryEditor/NodeWrapper/PluralWrapper.d.ts +1 -1
  522. package/dist/types/components/DictionaryEditor/NodeWrapper/PluralWrapper.d.ts.map +1 -1
  523. package/dist/types/components/DictionaryEditor/NodeWrapper/StringWrapper.d.ts.map +1 -1
  524. package/dist/types/components/DictionaryEditor/NodeWrapper/TranslationWrapper.d.ts +1 -1
  525. package/dist/types/components/DictionaryEditor/NodeWrapper/TranslationWrapper.d.ts.map +1 -1
  526. package/dist/types/components/DictionaryEditor/NodeWrapper/index.d.ts.map +1 -1
  527. package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts.map +1 -1
  528. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.d.ts +3 -1
  529. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.d.ts.map +1 -1
  530. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts +3 -2
  531. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts.map +1 -1
  532. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.d.ts.map +1 -1
  533. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts +8 -6
  534. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts.map +1 -1
  535. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.d.ts +6 -4
  536. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.d.ts.map +1 -1
  537. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.d.ts.map +1 -1
  538. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts +29 -27
  539. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts.map +1 -1
  540. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts +18 -16
  541. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts.map +1 -1
  542. package/dist/types/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts.map +1 -1
  543. package/dist/types/components/DictionaryFieldEditor/EnumKeyInput.d.ts.map +1 -1
  544. package/dist/types/components/DictionaryFieldEditor/JSONEditor.d.ts.map +1 -1
  545. package/dist/types/components/DictionaryFieldEditor/KeyPathBreadcrumb.d.ts.map +1 -1
  546. package/dist/types/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.d.ts.map +1 -1
  547. package/dist/types/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.d.ts +12 -10
  548. package/dist/types/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.d.ts.map +1 -1
  549. package/dist/types/components/DictionaryFieldEditor/NodeTypeSelector.d.ts.map +1 -1
  550. package/dist/types/components/DictionaryFieldEditor/SaveForm/SaveForm.d.ts.map +1 -1
  551. package/dist/types/components/DictionaryFieldEditor/SaveForm/saveForm.content.d.ts +18 -16
  552. package/dist/types/components/DictionaryFieldEditor/SaveForm/saveForm.content.d.ts.map +1 -1
  553. package/dist/types/components/DictionaryFieldEditor/StructureEditor.d.ts.map +1 -1
  554. package/dist/types/components/DictionaryFieldEditor/StructureView/StructureView.d.ts.map +1 -1
  555. package/dist/types/components/DictionaryFieldEditor/StructureView/structureView.content.d.ts +6 -4
  556. package/dist/types/components/DictionaryFieldEditor/StructureView/structureView.content.d.ts.map +1 -1
  557. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.d.ts.map +1 -1
  558. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.d.ts.map +1 -1
  559. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.d.ts +5 -3
  560. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.d.ts.map +1 -1
  561. package/dist/types/components/DictionaryFieldEditor/dictionaryFieldEditor.content.d.ts +4 -2
  562. package/dist/types/components/DictionaryFieldEditor/dictionaryFieldEditor.content.d.ts.map +1 -1
  563. package/dist/types/components/DictionaryFieldEditor/getIsEditableSection.d.ts.map +1 -1
  564. package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts +18 -16
  565. package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts.map +1 -1
  566. package/dist/types/components/DropDown/index.d.ts.map +1 -1
  567. package/dist/types/components/EditableField/EditableFieldInput.d.ts.map +1 -1
  568. package/dist/types/components/EditableField/EditableFieldLayout.d.ts.map +1 -1
  569. package/dist/types/components/EditableField/EditableFieldTextArea.d.ts.map +1 -1
  570. package/dist/types/components/ExpandCollapse/ExpandCollapse.d.ts.map +1 -1
  571. package/dist/types/components/ExpandCollapse/expandCollapse.content.d.ts +3 -1
  572. package/dist/types/components/ExpandCollapse/expandCollapse.content.d.ts.map +1 -1
  573. package/dist/types/components/Flags/Flag.d.ts.map +1 -1
  574. package/dist/types/components/Flags/flags.d.ts.map +1 -1
  575. package/dist/types/components/Footer/index.d.ts.map +1 -1
  576. package/dist/types/components/Form/Form.d.ts.map +1 -1
  577. package/dist/types/components/Form/FormBase.d.ts +4 -2
  578. package/dist/types/components/Form/FormBase.d.ts.map +1 -1
  579. package/dist/types/components/Form/FormField.d.ts +4 -2
  580. package/dist/types/components/Form/FormField.d.ts.map +1 -1
  581. package/dist/types/components/Form/FormItem.d.ts +2 -1
  582. package/dist/types/components/Form/FormItem.d.ts.map +1 -1
  583. package/dist/types/components/Form/elements/AutoSizeTextAreaElement.d.ts.map +1 -1
  584. package/dist/types/components/Form/elements/CheckboxElement.d.ts.map +1 -1
  585. package/dist/types/components/Form/elements/EditableFieldInputElement.d.ts +2 -1
  586. package/dist/types/components/Form/elements/EditableFieldInputElement.d.ts.map +1 -1
  587. package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts +2 -1
  588. package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts.map +1 -1
  589. package/dist/types/components/Form/elements/FormElement.d.ts +2 -1
  590. package/dist/types/components/Form/elements/FormElement.d.ts.map +1 -1
  591. package/dist/types/components/Form/elements/FormElementWrapper.d.ts.map +1 -1
  592. package/dist/types/components/Form/elements/InputElement.d.ts.map +1 -1
  593. package/dist/types/components/Form/elements/InputPasswordElement.d.ts.map +1 -1
  594. package/dist/types/components/Form/elements/MultiselectElement.d.ts +2 -1
  595. package/dist/types/components/Form/elements/MultiselectElement.d.ts.map +1 -1
  596. package/dist/types/components/Form/elements/OTPElement.d.ts +2 -1
  597. package/dist/types/components/Form/elements/OTPElement.d.ts.map +1 -1
  598. package/dist/types/components/Form/elements/SearchInputElement.d.ts.map +1 -1
  599. package/dist/types/components/Form/elements/SelectElement.d.ts +2 -1
  600. package/dist/types/components/Form/elements/SelectElement.d.ts.map +1 -1
  601. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts +2 -1
  602. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts.map +1 -1
  603. package/dist/types/components/Form/elements/TextAreaElement.d.ts.map +1 -1
  604. package/dist/types/components/Form/layout/FormItemLayout.d.ts.map +1 -1
  605. package/dist/types/components/Form/layout/FormLabelLayout.d.ts.map +1 -1
  606. package/dist/types/components/Form/layout/RequiredStar.d.ts.map +1 -1
  607. package/dist/types/components/HTMLRender/HTMLRender.d.ts.map +1 -1
  608. package/dist/types/components/Headers/index.d.ts.map +1 -1
  609. package/dist/types/components/HeightResizer/index.d.ts +5 -0
  610. package/dist/types/components/HeightResizer/index.d.ts.map +1 -1
  611. package/dist/types/components/HideShow/index.d.ts.map +1 -1
  612. package/dist/types/components/IDE/Code.d.ts.map +1 -1
  613. package/dist/types/components/IDE/CodeBlockClient.d.ts.map +1 -1
  614. package/dist/types/components/IDE/CodeBlockHighlight.d.ts +2 -1
  615. package/dist/types/components/IDE/CodeBlockHighlight.d.ts.map +1 -1
  616. package/dist/types/components/IDE/CodeBlockServer.d.ts.map +1 -1
  617. package/dist/types/components/IDE/CodeBlockShiki.d.ts.map +1 -1
  618. package/dist/types/components/IDE/CodeContext.d.ts +2 -1
  619. package/dist/types/components/IDE/CodeContext.d.ts.map +1 -1
  620. package/dist/types/components/IDE/CodeFormatSelector.d.ts.map +1 -1
  621. package/dist/types/components/IDE/ContentDeclarationFormatSelector.d.ts.map +1 -1
  622. package/dist/types/components/IDE/CopyCode.d.ts.map +1 -1
  623. package/dist/types/components/IDE/FileList.d.ts.map +1 -1
  624. package/dist/types/components/IDE/FileTree.d.ts.map +1 -1
  625. package/dist/types/components/IDE/IDE.d.ts.map +1 -1
  626. package/dist/types/components/IDE/MarkDownRender.d.ts.map +1 -1
  627. package/dist/types/components/IDE/MonacoCode.d.ts.map +1 -1
  628. package/dist/types/components/IDE/PackageManagerSelector.d.ts.map +1 -1
  629. package/dist/types/components/IDE/code.content.d.ts +4 -2
  630. package/dist/types/components/IDE/code.content.d.ts.map +1 -1
  631. package/dist/types/components/IDE/codeTransformer.d.ts.map +1 -1
  632. package/dist/types/components/IDE/copyCode.content.d.ts +4 -2
  633. package/dist/types/components/IDE/copyCode.content.d.ts.map +1 -1
  634. package/dist/types/components/IDE/createFileTree.d.ts.map +1 -1
  635. package/dist/types/components/IDE/index.d.ts +1 -1
  636. package/dist/types/components/IDE/selectors.content.d.ts +8 -6
  637. package/dist/types/components/IDE/selectors.content.d.ts.map +1 -1
  638. package/dist/types/components/InformationTag/index.d.ts.map +1 -1
  639. package/dist/types/components/Input/Checkbox.d.ts +3 -2
  640. package/dist/types/components/Input/Checkbox.d.ts.map +1 -1
  641. package/dist/types/components/Input/Input.d.ts +2 -1
  642. package/dist/types/components/Input/Input.d.ts.map +1 -1
  643. package/dist/types/components/Input/InputPassword.d.ts.map +1 -1
  644. package/dist/types/components/Input/OTPInput.d.ts +5 -3
  645. package/dist/types/components/Input/OTPInput.d.ts.map +1 -1
  646. package/dist/types/components/Input/Radio.d.ts +3 -2
  647. package/dist/types/components/Input/Radio.d.ts.map +1 -1
  648. package/dist/types/components/Input/SearchInput.d.ts +2 -1
  649. package/dist/types/components/Input/SearchInput.d.ts.map +1 -1
  650. package/dist/types/components/KeyboardScreenAdapter/index.d.ts.map +1 -1
  651. package/dist/types/components/KeyboardShortcut/KeyboardShortcut.d.ts.map +1 -1
  652. package/dist/types/components/Label/index.d.ts.map +1 -1
  653. package/dist/types/components/LanguageBackground/LanguageBackground.d.ts +7 -0
  654. package/dist/types/components/LanguageBackground/LanguageBackground.d.ts.map +1 -0
  655. package/dist/types/components/LanguageBackground/index.d.ts +2 -7
  656. package/dist/types/components/Link/Link.d.ts +4 -3
  657. package/dist/types/components/Link/Link.d.ts.map +1 -1
  658. package/dist/types/components/Loader/index.content.d.ts +3 -1
  659. package/dist/types/components/Loader/index.content.d.ts.map +1 -1
  660. package/dist/types/components/Loader/index.d.ts +1 -1
  661. package/dist/types/components/Loader/index.d.ts.map +1 -1
  662. package/dist/types/components/Loader/spinner.d.ts +2 -1
  663. package/dist/types/components/Loader/spinner.d.ts.map +1 -1
  664. package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.d.ts.map +1 -1
  665. package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.d.ts.map +1 -1
  666. package/dist/types/components/LocaleSwitcherContentDropDown/localeSwitcher.content.d.ts +10 -8
  667. package/dist/types/components/LocaleSwitcherContentDropDown/localeSwitcher.content.d.ts.map +1 -1
  668. package/dist/types/components/LocaleSwitcherDropDown/LocaleSwitcher.d.ts.map +1 -1
  669. package/dist/types/components/LocaleSwitcherDropDown/localeSwitcher.content.d.ts +8 -6
  670. package/dist/types/components/LocaleSwitcherDropDown/localeSwitcher.content.d.ts.map +1 -1
  671. package/dist/types/components/Logo/Logo.d.ts.map +1 -1
  672. package/dist/types/components/Logo/LogoWithTextBelow.d.ts.map +1 -1
  673. package/dist/types/components/MarkDownRender/MarkDownIframe.d.ts.map +1 -1
  674. package/dist/types/components/MarkDownRender/MarkDownRender.d.ts +45 -44
  675. package/dist/types/components/MarkDownRender/MarkDownRender.d.ts.map +1 -1
  676. package/dist/types/components/MarkDownRender/index.d.ts +1 -1
  677. package/dist/types/components/MaxHeightSmoother/index.d.ts.map +1 -1
  678. package/dist/types/components/MaxWidthSmoother/index.d.ts +4 -1
  679. package/dist/types/components/MaxWidthSmoother/index.d.ts.map +1 -1
  680. package/dist/types/components/Modal/Modal.d.ts.map +1 -1
  681. package/dist/types/components/Navbar/Burger.d.ts +2 -1
  682. package/dist/types/components/Navbar/Burger.d.ts.map +1 -1
  683. package/dist/types/components/Navbar/DesktopNavbar.d.ts +2 -1
  684. package/dist/types/components/Navbar/DesktopNavbar.d.ts.map +1 -1
  685. package/dist/types/components/Navbar/MobileNavbar.d.ts +2 -1
  686. package/dist/types/components/Navbar/MobileNavbar.d.ts.map +1 -1
  687. package/dist/types/components/Navbar/index.d.ts +2 -1
  688. package/dist/types/components/Navbar/index.d.ts.map +1 -1
  689. package/dist/types/components/Navbar/useNavigation.d.ts.map +1 -1
  690. package/dist/types/components/Pagination/NumberItemsSelector.d.ts.map +1 -1
  691. package/dist/types/components/Pagination/Pagination.d.ts +2 -1
  692. package/dist/types/components/Pagination/Pagination.d.ts.map +1 -1
  693. package/dist/types/components/Pagination/ShowingResultsNumberItems.d.ts.map +1 -1
  694. package/dist/types/components/Pagination/pagination.content.d.ts +7 -5
  695. package/dist/types/components/Pagination/pagination.content.d.ts.map +1 -1
  696. package/dist/types/components/Pattern/DotPattern.d.ts.map +1 -1
  697. package/dist/types/components/Pattern/GridPattern.d.ts.map +1 -1
  698. package/dist/types/components/Pattern/SpotLight.d.ts.map +1 -1
  699. package/dist/types/components/Popover/dynamic.d.ts.map +1 -1
  700. package/dist/types/components/Popover/static.d.ts.map +1 -1
  701. package/dist/types/components/PressableSpan/PressableSpan.d.ts.map +1 -1
  702. package/dist/types/components/RightDrawer/RightDrawer.d.ts.map +1 -1
  703. package/dist/types/components/RightDrawer/isElementAtTopAndNotCovered.d.ts.map +1 -1
  704. package/dist/types/components/RightDrawer/rightDrawer.content.d.ts +4 -2
  705. package/dist/types/components/RightDrawer/rightDrawer.content.d.ts.map +1 -1
  706. package/dist/types/components/RightDrawer/useRightDrawer.d.ts.map +1 -1
  707. package/dist/types/components/Select/Multiselect.d.ts.map +1 -1
  708. package/dist/types/components/Select/Select.d.ts +3 -2
  709. package/dist/types/components/Select/Select.d.ts.map +1 -1
  710. package/dist/types/components/SocialNetworks/index.d.ts +2 -1
  711. package/dist/types/components/SocialNetworks/index.d.ts.map +1 -1
  712. package/dist/types/components/Steps/index.d.ts.map +1 -1
  713. package/dist/types/components/Steps/steps.content.d.ts +4 -2
  714. package/dist/types/components/Steps/steps.content.d.ts.map +1 -1
  715. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts +7 -5
  716. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts.map +1 -1
  717. package/dist/types/components/SwitchSelector/VerticalSwitchSelector.d.ts +6 -4
  718. package/dist/types/components/SwitchSelector/VerticalSwitchSelector.d.ts.map +1 -1
  719. package/dist/types/components/SwitchSelector/useSwitchSelector.d.ts +4 -3
  720. package/dist/types/components/SwitchSelector/useSwitchSelector.d.ts.map +1 -1
  721. package/dist/types/components/Tab/Tab.d.ts +5 -3
  722. package/dist/types/components/Tab/Tab.d.ts.map +1 -1
  723. package/dist/types/components/Tab/TabContext.d.ts +2 -1
  724. package/dist/types/components/Tab/TabContext.d.ts.map +1 -1
  725. package/dist/types/components/TabSelector/TabSelector.d.ts +5 -3
  726. package/dist/types/components/TabSelector/TabSelector.d.ts.map +1 -1
  727. package/dist/types/components/Table/ExpandButton.d.ts.map +1 -1
  728. package/dist/types/components/Table/SmartTable.d.ts.map +1 -1
  729. package/dist/types/components/Table/Table.d.ts +2 -1
  730. package/dist/types/components/Table/Table.d.ts.map +1 -1
  731. package/dist/types/components/Table/TableElements.d.ts +5 -4
  732. package/dist/types/components/Table/TableElements.d.ts.map +1 -1
  733. package/dist/types/components/Table/table.content.d.ts +4 -2
  734. package/dist/types/components/Table/table.content.d.ts.map +1 -1
  735. package/dist/types/components/Tag/index.d.ts +3 -2
  736. package/dist/types/components/Tag/index.d.ts.map +1 -1
  737. package/dist/types/components/TechLogo/TechLogo.d.ts.map +1 -1
  738. package/dist/types/components/TechLogo/logos/Lit.d.ts +2 -1
  739. package/dist/types/components/TechLogo/logos/Lit.d.ts.map +1 -1
  740. package/dist/types/components/TechLogo/logos/Vanilla.d.ts +2 -1
  741. package/dist/types/components/TechLogo/logos/Vanilla.d.ts.map +1 -1
  742. package/dist/types/components/Terminal/Terminal.d.ts.map +1 -1
  743. package/dist/types/components/Terminal/terminal.content.d.ts +4 -2
  744. package/dist/types/components/Terminal/terminal.content.d.ts.map +1 -1
  745. package/dist/types/components/TextArea/AutoSizeTextArea.d.ts +1 -1
  746. package/dist/types/components/TextArea/AutoSizeTextArea.d.ts.map +1 -1
  747. package/dist/types/components/TextArea/AutocompleteTextArea.d.ts.map +1 -1
  748. package/dist/types/components/TextArea/ContentEditableTextArea.d.ts.map +1 -1
  749. package/dist/types/components/TextArea/TextArea.d.ts +1 -1
  750. package/dist/types/components/TextArea/TextArea.d.ts.map +1 -1
  751. package/dist/types/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.d.ts.map +1 -1
  752. package/dist/types/components/ThemeSwitcherDropDown/MobileThemeSwitcher.d.ts.map +1 -1
  753. package/dist/types/components/Toaster/Toast.d.ts +3 -2
  754. package/dist/types/components/Toaster/Toast.d.ts.map +1 -1
  755. package/dist/types/components/Toaster/Toaster.d.ts +3 -1
  756. package/dist/types/components/Toaster/Toaster.d.ts.map +1 -1
  757. package/dist/types/components/Toaster/useToast.d.ts.map +1 -1
  758. package/dist/types/components/WithResizer/index.d.ts.map +1 -1
  759. package/dist/types/components/index.d.ts +2 -2
  760. package/dist/types/hooks/useDevice.d.ts.map +1 -1
  761. package/dist/types/hooks/useGetElementById.d.ts.map +1 -1
  762. package/dist/types/hooks/useGetElementOrWindow.d.ts.map +1 -1
  763. package/dist/types/hooks/useHorizontalSwipe.d.ts.map +1 -1
  764. package/dist/types/hooks/useItemSelector.d.ts.map +1 -1
  765. package/dist/types/hooks/useScrollBlockage/index.d.ts.map +1 -1
  766. package/dist/types/hooks/useScrollBlockage/useScrollBlockageStore.d.ts.map +1 -1
  767. package/dist/types/hooks/useScrollDetection.d.ts.map +1 -1
  768. package/dist/types/hooks/useScrollY.d.ts.map +1 -1
  769. package/dist/types/hooks/useSearch.d.ts.map +1 -1
  770. package/dist/types/libs/auth.d.ts.map +1 -1
  771. package/dist/types/providers/ReactQueryProvider.d.ts.map +1 -1
  772. package/dist/types/routes.d.ts.map +1 -1
  773. package/dist/types/utils/cn.d.ts.map +1 -1
  774. package/package.json +35 -35
  775. package/dist/esm/components/LanguageBackground/index.mjs.map +0 -1
  776. package/dist/types/components/LanguageBackground/index.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ContentEditor.mjs","names":[],"sources":["../../../../src/components/DictionaryFieldEditor/ContentEditor.tsx"],"sourcesContent":["'use client';\n\nimport { getContentNodeByKeyPath } from '@intlayer/core/dictionaryManipulator';\nimport {\n useEditedContent,\n useEditorLocale,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport type { Dictionary, LocalDictionaryId } from '@intlayer/types/dictionary';\nimport { type FC, useDeferredValue, useEffect, useTransition } from 'react';\nimport { Container } from '../Container';\nimport { LocaleSwitcherContent } from '../LocaleSwitcherContentDropDown';\nimport { TextEditorContainer } from './ContentEditorView/TextEditor';\nimport { getIsEditableSection } from './getIsEditableSection';\nimport { KeyPathBreadcrumb } from './KeyPathBreadcrumb';\nimport { NavigationViewNode } from './NavigationView/NavigationViewNode';\n\ntype NodeEditorProps = {\n dictionary: Dictionary;\n isDarkMode?: boolean;\n};\n\nexport const ContentEditor: FC<NodeEditorProps> = ({\n dictionary,\n isDarkMode,\n}) => {\n const { content, key, localId } = dictionary;\n const { editedContent } = useEditedContent();\n const {\n focusedContent,\n setFocusedContentKeyPath: _setFocusedContentKeyPath,\n } = useFocusUnmergedDictionary();\n const [, startTransition] = useTransition();\n const setFocusedContentKeyPath: typeof _setFocusedContentKeyPath = (\n keyPath\n ) => startTransition(() => _setFocusedContentKeyPath(keyPath));\n\n const focusedKeyPath = focusedContent?.keyPath;\n const section =\n typeof editedContent?.[localId as LocalDictionaryId]?.content ===\n 'undefined'\n ? content\n : editedContent?.[localId as LocalDictionaryId]?.content;\n\n const currentLocale = useEditorLocale();\n const focusedSection = getContentNodeByKeyPath(\n section,\n focusedKeyPath ?? [],\n currentLocale\n );\n\n // Defer the expensive right-panel render so navigation clicks feel instant.\n // The stale section stays visible while React computes the new one in background.\n const deferredKeyPath = useDeferredValue(focusedKeyPath);\n const deferredSection = useDeferredValue(focusedSection);\n const isStale = deferredSection !== focusedSection;\n\n const isEditableBaseSection = getIsEditableSection(section);\n const isEditableFocusedSection = getIsEditableSection(deferredSection);\n\n useEffect(() => {\n if (typeof focusedSection === 'undefined') {\n setFocusedContentKeyPath(focusedContent?.keyPath?.slice(0, -1) ?? []);\n }\n }, []);\n\n return (\n <div>\n <div className=\"mb-6 flex items-center justify-between gap-2\">\n <KeyPathBreadcrumb\n dictionaryKey={key}\n keyPath={focusedKeyPath ?? []}\n onClickKeyPath={setFocusedContentKeyPath}\n />\n <div className=\"flex items-center gap-2\">\n <LocaleSwitcherContent />\n </div>\n </div>\n <div className=\"flex flex-1 gap-2 overflow-visible max-md:flex-col\">\n {typeof section === 'object' &&\n section &&\n !isEditableBaseSection &&\n Object.keys(section).length > 0 && (\n <Container\n border\n background=\"none\"\n className=\"top-10 flex h-full flex-col items-start gap-0.5 overflow-auto p-2 md:sticky md:max-w-[50%]\"\n roundedSize=\"2xl\"\n transparency=\"xs\"\n >\n <NavigationViewNode\n keyPath={[]}\n section={section}\n dictionary={dictionary}\n />\n </Container>\n )}\n {(isEditableFocusedSection || (deferredKeyPath ?? []).length > 0) && (\n <div\n className={\n isStale\n ? 'pointer-events-none flex-1 opacity-50 transition-opacity'\n : 'flex-1 transition-opacity'\n }\n >\n <TextEditorContainer\n keyPath={deferredKeyPath ?? []}\n section={deferredSection}\n dictionary={dictionary}\n isDarkMode={isDarkMode}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;AAsBA,MAAa,iBAAsC,EACjD,YACA,iBACI;CACJ,MAAM,EAAE,SAAS,KAAK,YAAY;CAClC,MAAM,EAAE,kBAAkB,iBAAiB;CAC3C,MAAM,EACJ,gBACA,0BAA0B,8BACxB,2BAA2B;CAC/B,MAAM,GAAG,mBAAmB,cAAc;CAC1C,MAAM,4BACJ,YACG,sBAAsB,0BAA0B,OAAO,CAAC;CAE7D,MAAM,iBAAiB,gBAAgB;CACvC,MAAM,UACJ,OAAO,gBAAgB,UAA+B,YACtD,cACI,UACA,gBAAgB,UAA+B;CAErD,MAAM,gBAAgB,gBAAgB;CACtC,MAAM,iBAAiB,wBACrB,SACA,kBAAkB,CAAC,GACnB,aACF;CAIA,MAAM,kBAAkB,iBAAiB,cAAc;CACvD,MAAM,kBAAkB,iBAAiB,cAAc;CACvD,MAAM,UAAU,oBAAoB;CAEpC,MAAM,wBAAwB,qBAAqB,OAAO;CAC1D,MAAM,2BAA2B,qBAAqB,eAAe;CAErE,gBAAgB;EACd,IAAI,OAAO,mBAAmB,aAC5B,yBAAyB,gBAAgB,SAAS,MAAM,GAAG,EAAE,KAAK,CAAC,CAAC;CAExE,GAAG,CAAC,CAAC;CAEL,OACE,qBAAC,OAAD,aACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,mBAAD;GACE,eAAe;GACf,SAAS,kBAAkB,CAAC;GAC5B,gBAAgB;EACjB,IACD,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,uBAAD,CAAwB;EACrB,EACF;KACL,qBAAC,OAAD;EAAK,WAAU;YAAf,CACG,OAAO,YAAY,YAClB,WACA,CAAC,yBACD,OAAO,KAAK,OAAO,EAAE,SAAS,KAC5B,oBAAC,WAAD;GACE;GACA,YAAW;GACX,WAAU;GACV,aAAY;GACZ,cAAa;aAEb,oBAAC,oBAAD;IACE,SAAS,CAAC;IACD;IACG;GACb;EACQ,KAEb,6BAA6B,mBAAmB,CAAC,GAAG,SAAS,MAC7D,oBAAC,OAAD;GACE,WACE,UACI,6DACA;aAGN,oBAAC,qBAAD;IACE,SAAS,mBAAmB,CAAC;IAC7B,SAAS;IACG;IACA;GACb;EACE,EAEJ;GACF;AAET"}
1
+ {"version":3,"file":"ContentEditor.mjs","names":[],"sources":["../../../../src/components/DictionaryFieldEditor/ContentEditor.tsx"],"sourcesContent":["'use client';\n\nimport { getContentNodeByKeyPath } from '@intlayer/core/dictionaryManipulator';\nimport {\n useEditedContent,\n useEditorLocale,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport type { Dictionary, LocalDictionaryId } from '@intlayer/types/dictionary';\nimport { type FC, useDeferredValue, useEffect, useTransition } from 'react';\nimport { Container } from '../Container';\nimport { LocaleSwitcherContent } from '../LocaleSwitcherContentDropDown';\nimport { TextEditorContainer } from './ContentEditorView/TextEditor';\nimport { getIsEditableSection } from './getIsEditableSection';\nimport { KeyPathBreadcrumb } from './KeyPathBreadcrumb';\nimport { NavigationViewNode } from './NavigationView/NavigationViewNode';\n\ntype NodeEditorProps = {\n dictionary: Dictionary;\n isDarkMode?: boolean;\n};\n\nexport const ContentEditor: FC<NodeEditorProps> = ({\n dictionary,\n isDarkMode,\n}) => {\n const { content, key, localId } = dictionary;\n const { editedContent } = useEditedContent();\n const {\n focusedContent,\n setFocusedContentKeyPath: _setFocusedContentKeyPath,\n } = useFocusUnmergedDictionary();\n const [, startTransition] = useTransition();\n const setFocusedContentKeyPath: typeof _setFocusedContentKeyPath = (\n keyPath\n ) => startTransition(() => _setFocusedContentKeyPath(keyPath));\n\n const focusedKeyPath = focusedContent?.keyPath;\n const section =\n typeof editedContent?.[localId as LocalDictionaryId]?.content ===\n 'undefined'\n ? content\n : editedContent?.[localId as LocalDictionaryId]?.content;\n\n const currentLocale = useEditorLocale();\n const focusedSection = getContentNodeByKeyPath(\n section,\n focusedKeyPath ?? [],\n currentLocale\n );\n\n // Defer the expensive right-panel render so navigation clicks feel instant.\n // The stale section stays visible while React computes the new one in background.\n const deferredKeyPath = useDeferredValue(focusedKeyPath);\n const deferredSection = useDeferredValue(focusedSection);\n const isStale = deferredSection !== focusedSection;\n\n const isEditableBaseSection = getIsEditableSection(section);\n const isEditableFocusedSection = getIsEditableSection(deferredSection);\n\n useEffect(() => {\n if (typeof focusedSection === 'undefined') {\n setFocusedContentKeyPath(focusedContent?.keyPath?.slice(0, -1) ?? []);\n }\n }, []);\n\n return (\n <div>\n <div className=\"mb-6 flex items-center justify-between gap-2\">\n <KeyPathBreadcrumb\n dictionaryKey={key}\n keyPath={focusedKeyPath ?? []}\n onClickKeyPath={setFocusedContentKeyPath}\n />\n <div className=\"flex items-center gap-2\">\n <LocaleSwitcherContent />\n </div>\n </div>\n <div className=\"flex flex-1 gap-2 overflow-visible max-md:flex-col\">\n {typeof section === 'object' &&\n section &&\n !isEditableBaseSection &&\n Object.keys(section).length > 0 && (\n <Container\n border\n background=\"none\"\n className=\"top-10 flex h-full flex-col items-start gap-0.5 overflow-auto p-2 md:sticky md:max-w-[50%]\"\n roundedSize=\"2xl\"\n transparency=\"xs\"\n >\n <NavigationViewNode\n keyPath={[]}\n section={section}\n dictionary={dictionary}\n />\n </Container>\n )}\n {(isEditableFocusedSection || (deferredKeyPath ?? []).length > 0) && (\n <div\n className={\n isStale\n ? 'pointer-events-none flex-1 opacity-50 transition-opacity'\n : 'flex-1 transition-opacity'\n }\n >\n <TextEditorContainer\n keyPath={deferredKeyPath ?? []}\n section={deferredSection}\n dictionary={dictionary}\n isDarkMode={isDarkMode}\n />\n </div>\n )}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;AAsBA,MAAa,iBAAsC,EACjD,YACA,iBACI;CACJ,MAAM,EAAE,SAAS,KAAK,YAAY;CAClC,MAAM,EAAE,kBAAkB,kBAAkB;CAC5C,MAAM,EACJ,gBACA,0BAA0B,8BACxB,4BAA4B;CAChC,MAAM,GAAG,mBAAmB,eAAe;CAC3C,MAAM,4BACJ,YACG,sBAAsB,0BAA0B,QAAQ,CAAC;CAE9D,MAAM,iBAAiB,gBAAgB;CACvC,MAAM,UACJ,OAAO,gBAAgB,UAA+B,YACtD,cACI,UACA,gBAAgB,UAA+B;CAErD,MAAM,gBAAgB,iBAAiB;CACvC,MAAM,iBAAiB,wBACrB,SACA,kBAAkB,EAAE,EACpB,cACD;CAID,MAAM,kBAAkB,iBAAiB,eAAe;CACxD,MAAM,kBAAkB,iBAAiB,eAAe;CACxD,MAAM,UAAU,oBAAoB;CAEpC,MAAM,wBAAwB,qBAAqB,QAAQ;CAC3D,MAAM,2BAA2B,qBAAqB,gBAAgB;AAEtE,iBAAgB;AACd,MAAI,OAAO,mBAAmB,YAC5B,0BAAyB,gBAAgB,SAAS,MAAM,GAAG,GAAG,IAAI,EAAE,CAAC;IAEtE,EAAE,CAAC;AAEN,QACE,qBAAC,OAAD,aACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,mBAAD;GACE,eAAe;GACf,SAAS,kBAAkB,EAAE;GAC7B,gBAAgB;GAChB,GACF,oBAAC,OAAD;GAAK,WAAU;aACb,oBAAC,uBAAD,EAAyB;GACrB,EACF;KACN,qBAAC,OAAD;EAAK,WAAU;YAAf,CACG,OAAO,YAAY,YAClB,WACA,CAAC,yBACD,OAAO,KAAK,QAAQ,CAAC,SAAS,KAC5B,oBAAC,WAAD;GACE;GACA,YAAW;GACX,WAAU;GACV,aAAY;GACZ,cAAa;aAEb,oBAAC,oBAAD;IACE,SAAS,EAAE;IACF;IACG;IACZ;GACQ,IAEd,6BAA6B,mBAAmB,EAAE,EAAE,SAAS,MAC7D,oBAAC,OAAD;GACE,WACE,UACI,6DACA;aAGN,oBAAC,qBAAD;IACE,SAAS,mBAAmB,EAAE;IAC9B,SAAS;IACG;IACA;IACZ;GACE,EAEJ;IACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"SafeHtmlRenderer.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\nexport const SafeHtmlRenderer = ({ rawContent }: { rawContent: string }) => {\n const [cleanHtml, setCleanHtml] = useState<string>('');\n\n useEffect(() => {\n import('dompurify').then(({ default: domPurify }) => {\n // Executes only in the browser using the native DOM. jsdom is never invoked.\n setCleanHtml(domPurify.sanitize(rawContent));\n });\n }, [rawContent]);\n\n if (!cleanHtml) return <div />;\n\n // biome-ignore lint/security/noDangerouslySetInnerHtml: sanitize\n return <div dangerouslySetInnerHTML={{ __html: cleanHtml }} />;\n};\n"],"mappings":";;;;;;AAIA,MAAa,oBAAoB,EAAE,iBAAyC;CAC1E,MAAM,CAAC,WAAW,gBAAgB,SAAiB,EAAE;CAErD,gBAAgB;EACd,OAAO,aAAa,MAAM,EAAE,SAAS,gBAAgB;GAEnD,aAAa,UAAU,SAAS,UAAU,CAAC;EAC7C,CAAC;CACH,GAAG,CAAC,UAAU,CAAC;CAEf,IAAI,CAAC,WAAW,OAAO,oBAAC,OAAD,CAAM;CAG7B,OAAO,oBAAC,OAAD,EAAK,yBAAyB,EAAE,QAAQ,UAAU,EAAI;AAC/D"}
1
+ {"version":3,"file":"SafeHtmlRenderer.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.tsx"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\nexport const SafeHtmlRenderer = ({ rawContent }: { rawContent: string }) => {\n const [cleanHtml, setCleanHtml] = useState<string>('');\n\n useEffect(() => {\n import('dompurify').then(({ default: domPurify }) => {\n // Executes only in the browser using the native DOM. jsdom is never invoked.\n setCleanHtml(domPurify.sanitize(rawContent));\n });\n }, [rawContent]);\n\n if (!cleanHtml) return <div />;\n\n // biome-ignore lint/security/noDangerouslySetInnerHtml: sanitize\n return <div dangerouslySetInnerHTML={{ __html: cleanHtml }} />;\n};\n"],"mappings":";;;;;;AAIA,MAAa,oBAAoB,EAAE,iBAAyC;CAC1E,MAAM,CAAC,WAAW,gBAAgB,SAAiB,GAAG;AAEtD,iBAAgB;AACd,SAAO,aAAa,MAAM,EAAE,SAAS,gBAAgB;AAEnD,gBAAa,UAAU,SAAS,WAAW,CAAC;IAC5C;IACD,CAAC,WAAW,CAAC;AAEhB,KAAI,CAAC,UAAW,QAAO,oBAAC,OAAD,EAAO;AAG9B,QAAO,oBAAC,OAAD,EAAK,yBAAyB,EAAE,QAAQ,WAAW,EAAI"}
@@ -1 +1 @@
1
- {"version":3,"file":"TextEditor.mjs","names":["ContentEditorTextAreaBase","ContentEditorInputBase"],"sources":["../../../../../src/components/DictionaryFieldEditor/ContentEditorView/TextEditor.tsx"],"sourcesContent":["'use client';\n\nimport { useAuditContentDeclarationField } from '@api/index';\nimport { Accordion } from '@components/Accordion';\nimport { Button } 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 { renameKey } from '@components/DictionaryFieldEditor/ContentEditorView/object';\nimport { Label } from '@components/Label';\nimport { Loader } from '@components/Loader';\nimport { useLocaleSwitcherContent } from '@components/LocaleSwitcherContentDropDown';\nimport {\n SwitchSelector,\n type SwitchSelectorChoices,\n type SwitchSelectorProps,\n} from '@components/SwitchSelector';\nimport { camelCaseToSentence } from '@intlayer/config/client';\nimport {\n getEmptyNode,\n getNodeType,\n} from '@intlayer/core/dictionaryManipulator';\nimport { getLocaleName } from '@intlayer/core/localization';\nimport type {\n ConditionContent,\n EnumerationContent,\n FileContent,\n GenderContent,\n HTMLContent,\n InsertionContent,\n MarkdownContent,\n PluralContent,\n TranslationContent,\n} from '@intlayer/core/transpiler';\nimport { useConfiguration, useEditedContent } from '@intlayer/editor-react';\nimport type { ContentNode, Dictionary } from '@intlayer/types/dictionary';\nimport type { KeyPath } from '@intlayer/types/keyPath';\nimport * as NodeTypes from '@intlayer/types/nodeType';\nimport { Plus, Trash, WandSparkles } from 'lucide-react';\nimport {\n type FC,\n Fragment,\n lazy,\n memo,\n type ReactNode,\n Suspense,\n useState,\n} from 'react';\nimport { useIntlayer, useLocale } from 'react-intlayer';\nimport { EnumKeyInput } from '../EnumKeyInput';\nimport { SafeHtmlRenderer } from './SafeHtmlRenderer';\n\nconst LazyMarkdownRenderer = lazy(() =>\n import('@components/MarkDownRender').then((m) => ({\n default: m.MarkdownRenderer,\n }))\n);\n\n// Renders children only after the accordion is first opened (mount-once pattern).\n// Prevents deeply nested sub-trees from mounting on initial render.\ntype CollapsibleEditorProps = TextEditorProps & { label: string };\nconst CollapsibleEditor = memo<CollapsibleEditorProps>(\n function CollapsibleEditor({ label, ...editorProps }) {\n const [hasOpened, setHasOpened] = useState(false);\n return (\n <Accordion\n header={label}\n label={label}\n onToggle={(isOpen) => {\n if (isOpen && !hasOpened) setHasOpened(true);\n }}\n >\n {hasOpened ? <TextEditor {...editorProps} /> : null}\n </Accordion>\n );\n }\n);\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=\"default\"\n onContentChange={(newValue) =>\n addEditedContent(dictionary.localId!, newValue, keyPath)\n }\n additionalButtons={\n <Button\n Icon={WandSparkles}\n label=\"Audit\"\n variant=\"hoverable\"\n size=\"icon-sm\"\n color=\"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=\"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=\"text\"\n size=\"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 } = useLocaleSwitcherContent();\n\n const content: any = (section as TranslationContent<string>)[\n NodeTypes.TRANSLATION\n ];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {selectedLocales.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: NodeTypes.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>)[\n NodeTypes.ENUMERATION\n ];\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>)[NodeTypes.ENUMERATION]\n ).map((enumKey) => {\n const childrenKeyPath = [\n ...keyPath,\n { type: NodeTypes.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 )[NodeTypes.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 [NodeTypes.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=\"hoverable\"\n color=\"neutral\"\n textAlign=\"left\"\n isFullWidth\n onClick={() =>\n addEditedContent(\n dictionary.localId!,\n getEmptyNode(content[firstKey]) ?? '',\n [...keyPath, { type: NodeTypes.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>)[NodeTypes.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: NodeTypes.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>)[NodeTypes.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: NodeTypes.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 PLURAL_CATEGORIES = ['zero', 'one', 'two', 'few', 'many', 'other'];\n\nconst PluralTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const content = (section as PluralContent<string>)[NodeTypes.PLURAL];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {PLURAL_CATEGORIES.map((pluralKey) => {\n const uniqueKey = `${JSON.stringify(keyPath)}-plural-${pluralKey}`;\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 block w-full p-2 text-xs\">\n <td className=\"flex w-full\">{pluralKey}</td>\n </tr>\n <tr className=\"block w-full\">\n <td className=\"flex w-full\">\n <TextEditorContainer\n section={\n content[pluralKey as keyof typeof content] ??\n getEmptyNode(content.other)\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeTypes.PLURAL,\n key: pluralKey,\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: NodeTypes.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: NodeTypes.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=\"hoverable\"\n color=\"neutral\"\n textAlign=\"left\"\n isFullWidth\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeTypes.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 const typedSection = section as unknown as Record<string, ContentNode>;\n const firstKey = Object.keys(typedSection)[0] as keyof typeof section;\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex flex-col gap-2\">\n {Object.keys(typedSection).map((key) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: NodeTypes.OBJECT, key },\n ];\n const subSection =\n typedSection[key as keyof typeof section] ??\n getEmptyNode(typedSection[firstKey]);\n const uniqueKey = `${JSON.stringify(keyPath)}-object-${key}`;\n // Collapse any object/array (typed or plain) — only true primitives render inline.\n // getIsEditableSection can't be used here: it inspects getNodeChildren(), which for\n // translation nodes returns the first locale value (a string), causing translation\n // subtrees to be mistakenly treated as leaves and mounted all at once.\n const isLeaf = subSection === null || typeof subSection !== 'object';\n\n if (isLeaf) {\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 return (\n <tr\n key={uniqueKey}\n className=\"block w-full border-neutral/10 border-t py-1\"\n >\n <td className=\"flex w-full\">\n <CollapsibleEditor\n label={camelCaseToSentence(key)}\n section={subSection}\n keyPath={childKeyPath}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n};\n\nenum MarkdownViewMode {\n Edit,\n Preview,\n}\n\nenum HtmlViewMode {\n Edit,\n Preview,\n}\n\nconst HtmlTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n}) => {\n const [mode, setMode] = useState(HtmlViewMode.Edit);\n const toggleContent = [\n {\n content: 'Edit',\n value: HtmlViewMode.Edit,\n },\n {\n content: 'Preview',\n value: HtmlViewMode.Preview,\n },\n ] as SwitchSelectorChoices<HtmlViewMode>;\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeTypes.HTML }];\n\n const content = (section as HTMLContent<ContentNode>)[\n NodeTypes.HTML\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=\"text\"\n size=\"sm\"\n className=\"ml-auto\"\n />\n\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n dictionary={dictionary}\n renderSection={\n mode === HtmlViewMode.Preview\n ? (rawContent) => <SafeHtmlRenderer rawContent={rawContent} />\n : undefined\n }\n />\n </div>\n );\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: NodeTypes.MARKDOWN }];\n\n const content = ((section as MarkdownContent<ContentNode>)[\n NodeTypes.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=\"text\"\n size=\"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 <Suspense fallback={<Loader />}>\n <LazyMarkdownRenderer isDarkMode={isDarkMode}>\n {content}\n </LazyMarkdownRenderer>\n </Suspense>\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: NodeTypes.INSERTION }];\n\n const content = (section as InsertionContent<ContentNode>)[\n NodeTypes.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: NodeTypes.FILE }];\n\n const fileUrl = (section as FileContent)[NodeTypes.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)[NodeTypes.NESTED];\n const childrenKeyPath = [...keyPath, { type: NodeTypes.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=\"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=\"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 = memo<TextEditorProps>(function TextEditor({\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 === NodeTypes.REACT_NODE) {\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 === NodeTypes.NESTED) {\n return (\n <NestedTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.TRANSLATION) {\n return (\n <TranslationTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.ENUMERATION) {\n return (\n <EnumerationTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.CONDITION) {\n return (\n <ConditionTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.GENDER) {\n return (\n <GenderTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.PLURAL) {\n return (\n <PluralTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.INSERTION) {\n return (\n <InsertionTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.MARKDOWN) {\n return (\n <MarkdownTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n isDarkMode={isDarkMode}\n />\n );\n }\n\n if (nodeType === NodeTypes.HTML) {\n return (\n <HtmlTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.FILE) {\n return (\n <FileTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.ARRAY) {\n return (\n <ArrayTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.OBJECT) {\n return (\n <ObjectTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.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 === NodeTypes.TEXT) {\n return (\n <div className=\"w-full p-2\">\n {typeof renderSection === 'function' ? (\n renderSection(section as string)\n ) : (\n <ContentEditorTextArea\n variant=\"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 === NodeTypes.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 = memo<TextEditorProps>(\n function TextEditorContainer(props) {\n return (\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=\"2xl\"\n >\n <TextEditor {...props} />\n </Container>\n );\n }\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"TextEditor.mjs","names":["ContentEditorTextAreaBase","ContentEditorInputBase"],"sources":["../../../../../src/components/DictionaryFieldEditor/ContentEditorView/TextEditor.tsx"],"sourcesContent":["'use client';\n\nimport { useAuditContentDeclarationField } from '@api/index';\nimport { Accordion } from '@components/Accordion';\nimport { Button } 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 { renameKey } from '@components/DictionaryFieldEditor/ContentEditorView/object';\nimport { Label } from '@components/Label';\nimport { Loader } from '@components/Loader';\nimport { useLocaleSwitcherContent } from '@components/LocaleSwitcherContentDropDown';\nimport {\n SwitchSelector,\n type SwitchSelectorChoices,\n type SwitchSelectorProps,\n} from '@components/SwitchSelector';\nimport { camelCaseToSentence } from '@intlayer/config/client';\nimport {\n getEmptyNode,\n getNodeType,\n} from '@intlayer/core/dictionaryManipulator';\nimport { getLocaleName } from '@intlayer/core/localization';\nimport type {\n ConditionContent,\n EnumerationContent,\n FileContent,\n GenderContent,\n HTMLContent,\n InsertionContent,\n MarkdownContent,\n PluralContent,\n TranslationContent,\n} from '@intlayer/core/transpiler';\nimport { useConfiguration, useEditedContent } from '@intlayer/editor-react';\nimport type { ContentNode, Dictionary } from '@intlayer/types/dictionary';\nimport type { KeyPath } from '@intlayer/types/keyPath';\nimport * as NodeTypes from '@intlayer/types/nodeType';\nimport { Plus, Trash, WandSparkles } from 'lucide-react';\nimport {\n type FC,\n Fragment,\n lazy,\n memo,\n type ReactNode,\n Suspense,\n useState,\n} from 'react';\nimport { useIntlayer, useLocale } from 'react-intlayer';\nimport { EnumKeyInput } from '../EnumKeyInput';\nimport { SafeHtmlRenderer } from './SafeHtmlRenderer';\n\nconst LazyMarkdownRenderer = lazy(() =>\n import('@components/MarkDownRender').then((m) => ({\n default: m.MarkdownRenderer,\n }))\n);\n\n// Renders children only after the accordion is first opened (mount-once pattern).\n// Prevents deeply nested sub-trees from mounting on initial render.\ntype CollapsibleEditorProps = TextEditorProps & { label: string };\nconst CollapsibleEditor = memo<CollapsibleEditorProps>(\n function CollapsibleEditor({ label, ...editorProps }) {\n const [hasOpened, setHasOpened] = useState(false);\n return (\n <Accordion\n header={label}\n label={label}\n onToggle={(isOpen) => {\n if (isOpen && !hasOpened) setHasOpened(true);\n }}\n >\n {hasOpened ? <TextEditor {...editorProps} /> : null}\n </Accordion>\n );\n }\n);\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=\"default\"\n onContentChange={(newValue) =>\n addEditedContent(dictionary.localId!, newValue, keyPath)\n }\n additionalButtons={\n <Button\n Icon={WandSparkles}\n label=\"Audit\"\n variant=\"hoverable\"\n size=\"icon-sm\"\n color=\"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=\"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=\"text\"\n size=\"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 } = useLocaleSwitcherContent();\n\n const content: any = (section as TranslationContent<string>)[\n NodeTypes.TRANSLATION\n ];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {selectedLocales.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: NodeTypes.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>)[\n NodeTypes.ENUMERATION\n ];\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>)[NodeTypes.ENUMERATION]\n ).map((enumKey) => {\n const childrenKeyPath = [\n ...keyPath,\n { type: NodeTypes.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 )[NodeTypes.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 [NodeTypes.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=\"hoverable\"\n color=\"neutral\"\n textAlign=\"left\"\n isFullWidth\n onClick={() =>\n addEditedContent(\n dictionary.localId!,\n getEmptyNode(content[firstKey]) ?? '',\n [...keyPath, { type: NodeTypes.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>)[NodeTypes.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: NodeTypes.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>)[NodeTypes.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: NodeTypes.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 PLURAL_CATEGORIES = ['zero', 'one', 'two', 'few', 'many', 'other'];\n\nconst PluralTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const content = (section as PluralContent<string>)[NodeTypes.PLURAL];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {PLURAL_CATEGORIES.map((pluralKey) => {\n const uniqueKey = `${JSON.stringify(keyPath)}-plural-${pluralKey}`;\n return (\n <Fragment key={uniqueKey}>\n <tr className=\"mt-2 block w-full p-2 text-xs\">\n <td className=\"flex w-full\">{pluralKey}</td>\n </tr>\n <tr className=\"block w-full\">\n <td className=\"flex w-full\">\n <TextEditorContainer\n section={\n content[pluralKey as keyof typeof content] ??\n getEmptyNode(content.other)\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeTypes.PLURAL,\n key: pluralKey,\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: NodeTypes.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: NodeTypes.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=\"hoverable\"\n color=\"neutral\"\n textAlign=\"left\"\n isFullWidth\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeTypes.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 const typedSection = section as unknown as Record<string, ContentNode>;\n const firstKey = Object.keys(typedSection)[0] as keyof typeof section;\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex flex-col gap-2\">\n {Object.keys(typedSection).map((key) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: NodeTypes.OBJECT, key },\n ];\n const subSection =\n typedSection[key as keyof typeof section] ??\n getEmptyNode(typedSection[firstKey]);\n const uniqueKey = `${JSON.stringify(keyPath)}-object-${key}`;\n // Collapse any object/array (typed or plain) — only true primitives render inline.\n // getIsEditableSection can't be used here: it inspects getNodeChildren(), which for\n // translation nodes returns the first locale value (a string), causing translation\n // subtrees to be mistakenly treated as leaves and mounted all at once.\n const isLeaf = subSection === null || typeof subSection !== 'object';\n\n if (isLeaf) {\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 return (\n <tr\n key={uniqueKey}\n className=\"block w-full border-neutral/10 border-t py-1\"\n >\n <td className=\"flex w-full\">\n <CollapsibleEditor\n label={camelCaseToSentence(key)}\n section={subSection}\n keyPath={childKeyPath}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n );\n })}\n </tbody>\n </table>\n );\n};\n\nenum MarkdownViewMode {\n Edit,\n Preview,\n}\n\nenum HtmlViewMode {\n Edit,\n Preview,\n}\n\nconst HtmlTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n}) => {\n const [mode, setMode] = useState(HtmlViewMode.Edit);\n const toggleContent = [\n {\n content: 'Edit',\n value: HtmlViewMode.Edit,\n },\n {\n content: 'Preview',\n value: HtmlViewMode.Preview,\n },\n ] as SwitchSelectorChoices<HtmlViewMode>;\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeTypes.HTML }];\n\n const content = (section as HTMLContent<ContentNode>)[\n NodeTypes.HTML\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=\"text\"\n size=\"sm\"\n className=\"ml-auto\"\n />\n\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n dictionary={dictionary}\n renderSection={\n mode === HtmlViewMode.Preview\n ? (rawContent) => <SafeHtmlRenderer rawContent={rawContent} />\n : undefined\n }\n />\n </div>\n );\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: NodeTypes.MARKDOWN }];\n\n const content = ((section as MarkdownContent<ContentNode>)[\n NodeTypes.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=\"text\"\n size=\"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 <Suspense fallback={<Loader />}>\n <LazyMarkdownRenderer isDarkMode={isDarkMode}>\n {content}\n </LazyMarkdownRenderer>\n </Suspense>\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: NodeTypes.INSERTION }];\n\n const content = (section as InsertionContent<ContentNode>)[\n NodeTypes.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: NodeTypes.FILE }];\n\n const fileUrl = (section as FileContent)[NodeTypes.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)[NodeTypes.NESTED];\n const childrenKeyPath = [...keyPath, { type: NodeTypes.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=\"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=\"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 = memo<TextEditorProps>(function TextEditor({\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 === NodeTypes.REACT_NODE) {\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 === NodeTypes.NESTED) {\n return (\n <NestedTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.TRANSLATION) {\n return (\n <TranslationTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.ENUMERATION) {\n return (\n <EnumerationTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.CONDITION) {\n return (\n <ConditionTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.GENDER) {\n return (\n <GenderTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.PLURAL) {\n return (\n <PluralTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.INSERTION) {\n return (\n <InsertionTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.MARKDOWN) {\n return (\n <MarkdownTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n isDarkMode={isDarkMode}\n />\n );\n }\n\n if (nodeType === NodeTypes.HTML) {\n return (\n <HtmlTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.FILE) {\n return (\n <FileTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.ARRAY) {\n return (\n <ArrayTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.OBJECT) {\n return (\n <ObjectTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeTypes.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 === NodeTypes.TEXT) {\n return (\n <div className=\"w-full p-2\">\n {typeof renderSection === 'function' ? (\n renderSection(section as string)\n ) : (\n <ContentEditorTextArea\n variant=\"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 === NodeTypes.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 = memo<TextEditorProps>(\n function TextEditorContainer(props) {\n return (\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=\"2xl\"\n >\n <TextEditor {...props} />\n </Container>\n );\n }\n);\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"object.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/ContentEditorView/object.ts"],"sourcesContent":["/**\n * Rename a key in an object by keeping the element order\n *\n * @param obj The original object\n * @param oldKey The key in the object that needs to be renamed\n * @param newKey The new key name to replace the old key\n * @returns A new object with the renamed key\n */\nexport const renameKey = <T extends object>(\n obj: T,\n oldKey: keyof T,\n newKey: string\n): T => {\n // Create a shallow copy of the original object to avoid mutating it\n const newObj: T = { ...obj };\n\n // Iterate over all keys of the original object\n for (const key of Object.keys(obj)) {\n // Check if the current key is the one that needs to be renamed\n if (key === (oldKey as string)) {\n // Assign the value of the old key to the new key in newObj\n newObj[newKey as keyof T] = obj[oldKey];\n // Optionally, delete the old key from newObj if you don't want both keys\n delete newObj[oldKey];\n } else {\n // For all other keys, ensure they are copied over correctly\n newObj[key as keyof T] = obj[key as keyof T];\n }\n }\n // Return the new object with the renamed key\n return newObj;\n};\n\n/**\n * Remove a key from an object\n *\n * @param obj The original object\n * @param key The key in the object that needs to be removed\n * @returns A new object without the specified key\n */\nexport const removeKey = <T extends object>(obj: T, key: keyof T): T => {\n // Create a shallow copy of the original object to avoid mutating it\n const newObj: T = { ...obj };\n\n // Delete the key from the object\n delete newObj[key];\n\n return newObj;\n};\n"],"mappings":";;;;;;;;;AAQA,MAAa,aACX,KACA,QACA,WACM;CAEN,MAAM,SAAY,EAAE,GAAG,IAAI;CAG3B,KAAK,MAAM,OAAO,OAAO,KAAK,GAAG,GAE/B,IAAI,QAAS,QAAmB;EAE9B,OAAO,UAAqB,IAAI;EAEhC,OAAO,OAAO;CAChB,OAEE,OAAO,OAAkB,IAAI;CAIjC,OAAO;AACT;;;;;;;;AASA,MAAa,aAA+B,KAAQ,QAAoB;CAEtE,MAAM,SAAY,EAAE,GAAG,IAAI;CAG3B,OAAO,OAAO;CAEd,OAAO;AACT"}
1
+ {"version":3,"file":"object.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/ContentEditorView/object.ts"],"sourcesContent":["/**\n * Rename a key in an object by keeping the element order\n *\n * @param obj The original object\n * @param oldKey The key in the object that needs to be renamed\n * @param newKey The new key name to replace the old key\n * @returns A new object with the renamed key\n */\nexport const renameKey = <T extends object>(\n obj: T,\n oldKey: keyof T,\n newKey: string\n): T => {\n // Create a shallow copy of the original object to avoid mutating it\n const newObj: T = { ...obj };\n\n // Iterate over all keys of the original object\n for (const key of Object.keys(obj)) {\n // Check if the current key is the one that needs to be renamed\n if (key === (oldKey as string)) {\n // Assign the value of the old key to the new key in newObj\n newObj[newKey as keyof T] = obj[oldKey];\n // Optionally, delete the old key from newObj if you don't want both keys\n delete newObj[oldKey];\n } else {\n // For all other keys, ensure they are copied over correctly\n newObj[key as keyof T] = obj[key as keyof T];\n }\n }\n // Return the new object with the renamed key\n return newObj;\n};\n\n/**\n * Remove a key from an object\n *\n * @param obj The original object\n * @param key The key in the object that needs to be removed\n * @returns A new object without the specified key\n */\nexport const removeKey = <T extends object>(obj: T, key: keyof T): T => {\n // Create a shallow copy of the original object to avoid mutating it\n const newObj: T = { ...obj };\n\n // Delete the key from the object\n delete newObj[key];\n\n return newObj;\n};\n"],"mappings":";;;;;;;;;AAQA,MAAa,aACX,KACA,QACA,WACM;CAEN,MAAM,SAAY,EAAE,GAAG,KAAK;AAG5B,MAAK,MAAM,OAAO,OAAO,KAAK,IAAI,CAEhC,KAAI,QAAS,QAAmB;AAE9B,SAAO,UAAqB,IAAI;AAEhC,SAAO,OAAO;OAGd,QAAO,OAAkB,IAAI;AAIjC,QAAO;;;;;;;;;AAUT,MAAa,aAA+B,KAAQ,QAAoB;CAEtE,MAAM,SAAY,EAAE,GAAG,KAAK;AAG5B,QAAO,OAAO;AAEd,QAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"DictionaryCreationForm.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.tsx"],"sourcesContent":["'use client';\n\nimport { useAddDictionary, useGetProjects } from '@api/index';\nimport { useSession } from '@api/useAuth';\nimport { Form, useForm } from '@components/Form';\nimport { MultiSelect } from '@components/Select';\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 defaultValues: {\n projectIds: [project?.id],\n },\n });\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=\"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":";;;;;;;;;;;;;AAiBA,MAAa,0BAA2D,EACtE,0BACI;CACJ,MAAM,EAAE,YAAY,WAAW;CAC/B,MAAM,EAAE,YAAY,WAAW,CAAC;CAChC,MAAM,EAAE,QAAQ,eAAe,cAAc,iBAAiB;CAC9D,MAAM,EAAE,MAAM,iBAAiB,eAAe;CAC9C,MAAM,mBAAmB,oBAAoB,OAAO,SAAS,EAAE,CAAC;CAChE,MAAM,EAAE,MAAM,iBAAiB,QAAQ,kBAAkB,EACvD,eAAe,EACb,YAAY,CAAC,SAAS,EAAE,EAC1B,EACF,CAAC;CACD,MAAM,EAAE,UAAU,wBAAwB,iBACxC,YAAY,iBAAiB;CAE/B,MAAM,mBAAmB,SAA6B;EACpD,cACE,EAAE,YAAY,KAAK,GACnB,EACE,iBAAiB;GACf,sBAAsB;EACxB,EACF,CACF;CACF;CAEA,OACE,qBAAC,MAAD;EACE,QAAQ;EACS;EACjB,WAAU;EACV,GAAI;YAJN;GAME,oBAAC,KAAK,OAAN;IACE,MAAK;IACL,OAAO,SAAS,MAAM;IACtB,aAAa,SAAS,YAAY;IAClC;GACD;GAED,qBAAC,KAAK,aAAN;IAAkB,MAAK;IAAa,OAAO,aAAa,MAAM;cAA9D,CACE,oBAAC,YAAY,SAAb;KACE,gBAAgB,UACd,cAAc,MAAM,MAAM,YAAY,OAAO,QAAQ,EAAE,MAAM,KAAK,GAC9D,QAAQ;eAGd,oBAAC,YAAY,OAAb,EAAmB,aAAa,aAAa,YAAY,MAAQ;IAC9C,IACrB,oBAAC,YAAY,SAAb,YACE,oBAAC,YAAY,MAAb,YACG,cAAc,MAAM,KAAK,YACxB,oBAAC,YAAY,MAAb;KAEE,OAAO,OAAO,QAAQ,EAAE;eAEvB,QAAQ;IACO,GAJX,OAAO,QAAQ,EAAE,CAIN,CACnB,EACe,GACC,EACL;;GAElB,oBAAC,KAAK,QAAN;IACE,WAAU;IACV,MAAK;IACL,OAAM;IACN,WAAW,gBAAgB;IAC3B,OAAO,uBAAuB,UAAU;IACxC;cAEC,uBAAuB;GACb;EACT;;AAEV"}
1
+ {"version":3,"file":"DictionaryCreationForm.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.tsx"],"sourcesContent":["'use client';\n\nimport { useAddDictionary, useGetProjects } from '@api/index';\nimport { useSession } from '@api/useAuth';\nimport { Form, useForm } from '@components/Form';\nimport { MultiSelect } from '@components/Select';\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 defaultValues: {\n projectIds: [project?.id],\n },\n });\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=\"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":";;;;;;;;;;;;;AAiBA,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,kBAAkB,EACvD,eAAe,EACb,YAAY,CAAC,SAAS,GAAG,EAC1B,EACF,CAAC;CACF,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,MAAD;EACE,QAAQ;EACS;EACjB,WAAU;EACV,GAAI;YAJN;GAME,oBAAC,KAAK,OAAN;IACE,MAAK;IACL,OAAO,SAAS,MAAM;IACtB,aAAa,SAAS,YAAY;IAClC;IACA;GAEF,qBAAC,KAAK,aAAN;IAAkB,MAAK;IAAa,OAAO,aAAa,MAAM;cAA9D,CACE,oBAAC,YAAY,SAAb;KACE,gBAAgB,UACd,cAAc,MAAM,MAAM,YAAY,OAAO,QAAQ,GAAG,KAAK,MAAM,EAC/D,QAAQ;eAGd,oBAAC,YAAY,OAAb,EAAmB,aAAa,aAAa,YAAY,OAAS;KAC9C,GACtB,oBAAC,YAAY,SAAb,YACE,oBAAC,YAAY,MAAb,YACG,cAAc,MAAM,KAAK,YACxB,oBAAC,YAAY,MAAb;KAEE,OAAO,OAAO,QAAQ,GAAG;eAExB,QAAQ;KACQ,EAJZ,OAAO,QAAQ,GAAG,CAIN,CACnB,EACe,GACC,EACL;;GAEnB,oBAAC,KAAK,QAAN;IACE,WAAU;IACV,MAAK;IACL,OAAM;IACN,WAAW,gBAAgB;IAC3B,OAAO,uBAAuB,UAAU;IACxC;cAEC,uBAAuB;IACZ;GACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"dictionaryCreationForm.content.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.ts"],"sourcesContent":["import { type Dictionary, t } from 'intlayer';\n\nexport const dictionaryFormContent = {\n key: 'dictionary-form',\n content: {\n keyInput: {\n label: t({\n en: 'Key',\n 'en-GB': 'Key',\n fr: 'Clé',\n es: 'Clave',\n de: 'Schlüssel',\n ja: 'キー',\n ko: '키',\n zh: '键',\n it: 'Chiave',\n pt: 'Chave',\n hi: 'कुंजी',\n ar: 'مفتاح',\n ru: 'Ключ',\n tr: 'Anahtar',\n pl: 'Klucz',\n id: 'Key',\n vi: 'Key',\n uk: 'Ключ',\n }),\n placeholder: t({\n en: 'Enter the key of your dictionary',\n 'en-GB': 'Enter the key of your dictionary',\n fr: 'Entrez la clé de votre dictionnaire',\n es: 'Ingrese la clave de su diccionario',\n de: 'Geben Sie den Schlüssel Ihres Wörterbuchs ein',\n ja: '辞書のキーを入力してください',\n ko: '사전의 키를 입력하세요',\n zh: '输入字典的键',\n it: 'Inserisci la chiave del tuo dizionario',\n pt: 'Insira a chave do seu dicionário',\n hi: 'अपने शब्दकोश की कुंजी दर्ज करें',\n ar: 'أدخل مفتاح القاموس الخاص بك',\n ru: 'Введите ключ вашего словаря',\n tr: 'Sözlüğünüzün anahtarını girin',\n pl: 'Wprowadź klucz słownika',\n id: 'Masukkan key dictionary Anda',\n vi: 'Nhập key của từ điển của bạn',\n uk: 'Введіть ключ вашого словника',\n }),\n },\n\n projectInput: {\n label: t({\n en: 'Projects',\n 'en-GB': 'Projects',\n fr: 'Projets',\n es: 'Proyectos',\n de: 'Projekte',\n ja: 'プロジェクト',\n ko: '프로젝트',\n zh: '项目',\n it: 'Progetti',\n pt: 'Projetos',\n hi: 'प्रोजेक्ट',\n ar: 'مشاريع',\n ru: 'Проекты',\n tr: 'Projeler',\n pl: 'Projekty',\n id: 'Projects',\n vi: 'Dự án',\n uk: 'Проєкти',\n }),\n placeholder: t({\n en: 'Select one or more projects to associate with your dictionary',\n 'en-GB':\n 'Select one or more projects to associate with your dictionary',\n fr: 'Sélectionnez un ou plusieurs projets à associer à votre dictionnaire',\n es: 'Seleccione uno o más proyectos para asociar con su diccionario',\n de: 'Wählen Sie ein oder mehrere Projekte aus, um sie mit Ihrem Wörterbuch zu verknüpfen',\n ja: '辞書に関連付けるプロジェクトを1つ以上選択してください',\n ko: '사전과 연결할 프로젝트를 하나 이상 선택하세요',\n zh: '选择一个或多个项目与您的字典关联',\n it: 'Seleziona uno o più progetti da associare al tuo dizionario',\n pt: 'Selecione um ou mais projetos para associar ao seu dicionário',\n hi: 'अपने शब्दकोश से जोड़ने के लिए एक या एक से अधिक प्रोजेक्ट चुनें',\n ar: 'حدد مشروعًا أو أكثر للربط مع قاموسك',\n ru: 'Выберите один или несколько проектов для связывания со словарем',\n tr: 'Sözlüğünüzle ilişkilendirmek için bir veya daha fazla proje seçin',\n pl: 'Wybierz jeden lub więcej projektów do powiązania z tym słownikiem',\n id: 'Pilih satu atau lebih Projects untuk dikaitkan dengan dictionary Anda',\n vi: 'Chọn một hoặc nhiều dự án để liên kết với từ điển của bạn',\n uk: \"Виберіть один або кілька проєктів, щоб пов'язати їх із вашим словником\",\n }),\n },\n\n createDictionaryButton: {\n text: t({\n en: 'Create dictionary',\n 'en-GB': 'Create dictionary',\n fr: 'Créer un dictionnaire',\n es: 'Crear un diccionario',\n de: 'Wörterbuch erstellen',\n ja: '辞書を作成',\n ko: '사전 만들기',\n zh: '创建字典',\n it: 'Crea dizionario',\n pt: 'Criar dicionário',\n hi: 'शब्दकोश बनाएँ',\n ar: 'إنشاء قاموس',\n ru: 'Создать словарь',\n tr: 'Sözlük oluştur',\n pl: 'Utwórz słownik',\n id: 'Buat dictionary',\n vi: 'Tạo từ điển',\n uk: 'Створити словник',\n }),\n ariaLabel: t({\n en: 'Click to create dictionary',\n 'en-GB': 'Click to create dictionary',\n fr: 'Cliquez pour créer un dictionnaire',\n es: 'Haga clic para crear un diccionario',\n de: 'Klicken Sie, um ein Wörterbuch zu erstellen',\n ja: '辞書を作成するにはクリックしてください',\n ko: '사전을 만들려면 클릭하세요',\n zh: '点击创建字典',\n it: 'Clicca per creare un dizionario',\n pt: 'Clique para criar dicionário',\n hi: 'शब्दकोश बनाने के लिए क्लिक करें',\n ar: 'انقر لإنشاء قاموس',\n ru: 'Нажмите, чтобы создать словарь',\n tr: 'Sözlük oluşturmak için tıklayın',\n pl: 'Kliknij, aby utworzyć słownik',\n id: 'Klik untuk membuat dictionary',\n vi: 'Nhấn để tạo từ điển',\n uk: 'Натисніть, щоб створити словник',\n }),\n },\n },\n title: 'Dictionary form',\n description:\n 'Content declarations for the dictionary creation form, including labels, placeholders, titles, descriptions, and button texts for managing dictionaries within Intlayer.',\n tags: ['form', 'dictionary creation', 'intlayer cms'],\n} satisfies Dictionary;\n\nexport default dictionaryFormContent;\n"],"mappings":";;;AAEA,MAAa,wBAAwB;CACnC,KAAK;CACL,SAAS;EACP,UAAU;GACR,OAAO,EAAE;IACP,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;GACN,CAAC;GACD,aAAa,EAAE;IACb,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;GACN,CAAC;EACH;EAEA,cAAc;GACZ,OAAO,EAAE;IACP,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;GACN,CAAC;GACD,aAAa,EAAE;IACb,IAAI;IACJ,SACE;IACF,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;GACN,CAAC;EACH;EAEA,wBAAwB;GACtB,MAAM,EAAE;IACN,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;GACN,CAAC;GACD,WAAW,EAAE;IACX,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;GACN,CAAC;EACH;CACF;CACA,OAAO;CACP,aACE;CACF,MAAM;EAAC;EAAQ;EAAuB;CAAc;AACtD"}
1
+ {"version":3,"file":"dictionaryCreationForm.content.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.ts"],"sourcesContent":["import { type Dictionary, t } from 'intlayer';\n\nexport const dictionaryFormContent = {\n key: 'dictionary-form',\n content: {\n keyInput: {\n label: t({\n en: 'Key',\n 'en-GB': 'Key',\n fr: 'Clé',\n es: 'Clave',\n de: 'Schlüssel',\n ja: 'キー',\n ko: '키',\n zh: '键',\n it: 'Chiave',\n pt: 'Chave',\n hi: 'कुंजी',\n ar: 'مفتاح',\n ru: 'Ключ',\n tr: 'Anahtar',\n pl: 'Klucz',\n id: 'Key',\n vi: 'Key',\n uk: 'Ключ',\n }),\n placeholder: t({\n en: 'Enter the key of your dictionary',\n 'en-GB': 'Enter the key of your dictionary',\n fr: 'Entrez la clé de votre dictionnaire',\n es: 'Ingrese la clave de su diccionario',\n de: 'Geben Sie den Schlüssel Ihres Wörterbuchs ein',\n ja: '辞書のキーを入力してください',\n ko: '사전의 키를 입력하세요',\n zh: '输入字典的键',\n it: 'Inserisci la chiave del tuo dizionario',\n pt: 'Insira a chave do seu dicionário',\n hi: 'अपने शब्दकोश की कुंजी दर्ज करें',\n ar: 'أدخل مفتاح القاموس الخاص بك',\n ru: 'Введите ключ вашего словаря',\n tr: 'Sözlüğünüzün anahtarını girin',\n pl: 'Wprowadź klucz słownika',\n id: 'Masukkan key dictionary Anda',\n vi: 'Nhập key của từ điển của bạn',\n uk: 'Введіть ключ вашого словника',\n }),\n },\n\n projectInput: {\n label: t({\n en: 'Projects',\n 'en-GB': 'Projects',\n fr: 'Projets',\n es: 'Proyectos',\n de: 'Projekte',\n ja: 'プロジェクト',\n ko: '프로젝트',\n zh: '项目',\n it: 'Progetti',\n pt: 'Projetos',\n hi: 'प्रोजेक्ट',\n ar: 'مشاريع',\n ru: 'Проекты',\n tr: 'Projeler',\n pl: 'Projekty',\n id: 'Projects',\n vi: 'Dự án',\n uk: 'Проєкти',\n }),\n placeholder: t({\n en: 'Select one or more projects to associate with your dictionary',\n 'en-GB':\n 'Select one or more projects to associate with your dictionary',\n fr: 'Sélectionnez un ou plusieurs projets à associer à votre dictionnaire',\n es: 'Seleccione uno o más proyectos para asociar con su diccionario',\n de: 'Wählen Sie ein oder mehrere Projekte aus, um sie mit Ihrem Wörterbuch zu verknüpfen',\n ja: '辞書に関連付けるプロジェクトを1つ以上選択してください',\n ko: '사전과 연결할 프로젝트를 하나 이상 선택하세요',\n zh: '选择一个或多个项目与您的字典关联',\n it: 'Seleziona uno o più progetti da associare al tuo dizionario',\n pt: 'Selecione um ou mais projetos para associar ao seu dicionário',\n hi: 'अपने शब्दकोश से जोड़ने के लिए एक या एक से अधिक प्रोजेक्ट चुनें',\n ar: 'حدد مشروعًا أو أكثر للربط مع قاموسك',\n ru: 'Выберите один или несколько проектов для связывания со словарем',\n tr: 'Sözlüğünüzle ilişkilendirmek için bir veya daha fazla proje seçin',\n pl: 'Wybierz jeden lub więcej projektów do powiązania z tym słownikiem',\n id: 'Pilih satu atau lebih Projects untuk dikaitkan dengan dictionary Anda',\n vi: 'Chọn một hoặc nhiều dự án để liên kết với từ điển của bạn',\n uk: \"Виберіть один або кілька проєктів, щоб пов'язати їх із вашим словником\",\n }),\n },\n\n createDictionaryButton: {\n text: t({\n en: 'Create dictionary',\n 'en-GB': 'Create dictionary',\n fr: 'Créer un dictionnaire',\n es: 'Crear un diccionario',\n de: 'Wörterbuch erstellen',\n ja: '辞書を作成',\n ko: '사전 만들기',\n zh: '创建字典',\n it: 'Crea dizionario',\n pt: 'Criar dicionário',\n hi: 'शब्दकोश बनाएँ',\n ar: 'إنشاء قاموس',\n ru: 'Создать словарь',\n tr: 'Sözlük oluştur',\n pl: 'Utwórz słownik',\n id: 'Buat dictionary',\n vi: 'Tạo từ điển',\n uk: 'Створити словник',\n }),\n ariaLabel: t({\n en: 'Click to create dictionary',\n 'en-GB': 'Click to create dictionary',\n fr: 'Cliquez pour créer un dictionnaire',\n es: 'Haga clic para crear un diccionario',\n de: 'Klicken Sie, um ein Wörterbuch zu erstellen',\n ja: '辞書を作成するにはクリックしてください',\n ko: '사전을 만들려면 클릭하세요',\n zh: '点击创建字典',\n it: 'Clicca per creare un dizionario',\n pt: 'Clique para criar dicionário',\n hi: 'शब्दकोश बनाने के लिए क्लिक करें',\n ar: 'انقر لإنشاء قاموس',\n ru: 'Нажмите, чтобы создать словарь',\n tr: 'Sözlük oluşturmak için tıklayın',\n pl: 'Kliknij, aby utworzyć słownik',\n id: 'Klik untuk membuat dictionary',\n vi: 'Nhấn để tạo từ điển',\n uk: 'Натисніть, щоб створити словник',\n }),\n },\n },\n title: 'Dictionary form',\n description:\n 'Content declarations for the dictionary creation form, including labels, placeholders, titles, descriptions, and button texts for managing dictionaries within Intlayer.',\n tags: ['form', 'dictionary creation', 'intlayer cms'],\n} satisfies Dictionary;\n\nexport default dictionaryFormContent;\n"],"mappings":";;;AAEA,MAAa,wBAAwB;CACnC,KAAK;CACL,SAAS;EACP,UAAU;GACR,OAAO,EAAE;IACP,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACL,CAAC;GACF,aAAa,EAAE;IACb,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACL,CAAC;GACH;EAED,cAAc;GACZ,OAAO,EAAE;IACP,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACL,CAAC;GACF,aAAa,EAAE;IACb,IAAI;IACJ,SACE;IACF,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACL,CAAC;GACH;EAED,wBAAwB;GACtB,MAAM,EAAE;IACN,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACL,CAAC;GACF,WAAW,EAAE;IACX,IAAI;IACJ,SAAS;IACT,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACL,CAAC;GACH;EACF;CACD,OAAO;CACP,aACE;CACF,MAAM;EAAC;EAAQ;EAAuB;EAAe;CACtD"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDictionaryFormSchema.content.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.ts"],"sourcesContent":["import { type Dictionary, t } from 'intlayer';\n\nexport const dictionaryFormSchemaContent = {\n key: 'dictionary-form-schema',\n content: {\n requiredErrorName: t({\n en: 'Please enter a key for your dictionary',\n 'en-GB': 'Please enter a key for your dictionary',\n fr: 'Veuillez saisir une clé pour votre dictionnaire',\n es: 'Por favor, ingrese una clave para su diccionario',\n de: 'Bitte geben Sie einen Schlüssel für Ihr Wörterbuch ein',\n ja: '辞書のキーを入力してください',\n ko: '사전 키를 입력해 주세요',\n zh: '请输入字典的键',\n it: 'Si prega di inserire una chiave per il proprio dizionario',\n pt: 'Por favor, insira uma chave para seu dicionário',\n hi: 'कृपया अपने शब्दकोश के लिए एक कुंजी दर्ज करें',\n ar: 'الرجاء إدخال مفتاح لقاموسك',\n ru: 'Пожалуйста, введите ключ для вашего словаря',\n tr: 'Lütfen sözlüğünüz için bir anahtar girin',\n pl: 'Proszę wprowadzić klucz dla słownika',\n id: 'Silakan masukkan key untuk dictionary Anda',\n vi: 'Vui lòng nhập khóa cho từ điển của bạn',\n uk: 'Будь ласка, введіть ключ для вашого словника',\n }),\n\n invalidTypeErrorName: t({\n en: 'Please enter a valid key for your dictionary',\n 'en-GB': 'Please enter a valid key for your dictionary',\n fr: 'Veuillez saisir une clé valide pour votre dictionnaire',\n es: 'Por favor, ingrese una clave válida para su diccionario',\n de: 'Bitte geben Sie einen gültigen Schlüssel für Ihr Wörterbuch ein',\n ja: '辞書の有効なキーを入力してください',\n ko: '유효한 사전 키를 입력해 주세요',\n zh: '请输入字典的有效键',\n it: 'Si prega di inserire una chiave valida per il proprio dizionario',\n pt: 'Por favor, insira uma chave válida para seu dicionário',\n hi: 'कृपया अपने शब्दकोश के लिए एक मान्य कुंजी दर्ज करें',\n ar: 'الرجاء إدخال مفتاح صالح لقاموسك',\n ru: 'Пожалуйста, введите действительный ключ для вашего словаря',\n tr: 'Lütfen sözlüğünüz için geçerli bir anahtar girin',\n pl: 'Proszę wprowadzić prawidłowy klucz dla słownika',\n id: 'Silakan masukkan key yang valid untuk dictionary Anda',\n vi: 'Vui lòng nhập khóa hợp lệ cho từ điển của bạn',\n uk: 'Будь ласка, введіть дійсний ключ для вашого словника',\n }),\n\n requiredErrorProjectId: t({\n en: 'Please select a project',\n 'en-GB': 'Please select a project',\n fr: 'Veuillez sélectionner un projet',\n es: 'Por favor, seleccione un proyecto',\n de: 'Bitte wählen Sie ein Projekt aus',\n ja: 'プロジェクトを選択してください',\n ko: '프로젝트를 선택해 주세요',\n zh: '请选择一个项目',\n it: 'Si prega di selezionare un progetto',\n pt: 'Por favor, selecione um projeto',\n hi: 'कृपया एक परियोजना चुनें',\n ar: 'الرجاء تحديد مشروع',\n ru: 'Пожалуйста, выберите проект',\n tr: 'Lütfen bir proje seçin',\n pl: 'Proszę wybrać projekt',\n id: 'Silakan pilih project',\n vi: 'Vui lòng chọn dự án',\n uk: 'Будь ласка, виберіть проєкт',\n }),\n\n invalidTypeErrorProjectId: t({\n en: 'Please select a valid project',\n 'en-GB': 'Please select a valid project',\n fr: 'Veuillez sélectionner un projet valide',\n es: 'Por favor, seleccione un proyecto válido',\n de: 'Bitte wählen Sie ein gültiges Projekt aus',\n ja: '有効なプロジェクトを選択してください',\n ko: '유효한 프로젝트를 선택해 주세요',\n zh: '请选择一个有效的项目',\n it: 'Si prega di selezionare un progetto valido',\n pt: 'Por favor, selecione um projeto válido',\n hi: 'कृपया एक मान्य परियोजना चुनें',\n ar: 'الرجاء تحديد مشروع صالح',\n ru: 'Пожалуйста, выберите действительный проект',\n tr: 'Lütfen geçerli bir proje seçin',\n pl: 'Proszę wybrać prawidłowy projekt',\n id: 'Silakan pilih project yang valid',\n vi: 'Vui lòng chọn dự án hợp lệ',\n uk: 'Будь ласка, виберіть дійсний проєкт',\n }),\n },\n title: 'Dictionary form schema',\n description:\n 'Validation schema for the dictionary creation form, ensuring required fields like dictionary key and associated project ID are correctly filled and typed.',\n tags: ['form validation', 'dictionary creation', 'schema'],\n} satisfies Dictionary;\n\nexport default dictionaryFormSchemaContent;\n"],"mappings":";;;AAEA,MAAa,8BAA8B;CACzC,KAAK;CACL,SAAS;EACP,mBAAmB,EAAE;GACnB,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EACN,CAAC;EAED,sBAAsB,EAAE;GACtB,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EACN,CAAC;EAED,wBAAwB,EAAE;GACxB,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EACN,CAAC;EAED,2BAA2B,EAAE;GAC3B,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EACN,CAAC;CACH;CACA,OAAO;CACP,aACE;CACF,MAAM;EAAC;EAAmB;EAAuB;CAAQ;AAC3D"}
1
+ {"version":3,"file":"useDictionaryFormSchema.content.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.ts"],"sourcesContent":["import { type Dictionary, t } from 'intlayer';\n\nexport const dictionaryFormSchemaContent = {\n key: 'dictionary-form-schema',\n content: {\n requiredErrorName: t({\n en: 'Please enter a key for your dictionary',\n 'en-GB': 'Please enter a key for your dictionary',\n fr: 'Veuillez saisir une clé pour votre dictionnaire',\n es: 'Por favor, ingrese una clave para su diccionario',\n de: 'Bitte geben Sie einen Schlüssel für Ihr Wörterbuch ein',\n ja: '辞書のキーを入力してください',\n ko: '사전 키를 입력해 주세요',\n zh: '请输入字典的键',\n it: 'Si prega di inserire una chiave per il proprio dizionario',\n pt: 'Por favor, insira uma chave para seu dicionário',\n hi: 'कृपया अपने शब्दकोश के लिए एक कुंजी दर्ज करें',\n ar: 'الرجاء إدخال مفتاح لقاموسك',\n ru: 'Пожалуйста, введите ключ для вашего словаря',\n tr: 'Lütfen sözlüğünüz için bir anahtar girin',\n pl: 'Proszę wprowadzić klucz dla słownika',\n id: 'Silakan masukkan key untuk dictionary Anda',\n vi: 'Vui lòng nhập khóa cho từ điển của bạn',\n uk: 'Будь ласка, введіть ключ для вашого словника',\n }),\n\n invalidTypeErrorName: t({\n en: 'Please enter a valid key for your dictionary',\n 'en-GB': 'Please enter a valid key for your dictionary',\n fr: 'Veuillez saisir une clé valide pour votre dictionnaire',\n es: 'Por favor, ingrese una clave válida para su diccionario',\n de: 'Bitte geben Sie einen gültigen Schlüssel für Ihr Wörterbuch ein',\n ja: '辞書の有効なキーを入力してください',\n ko: '유효한 사전 키를 입력해 주세요',\n zh: '请输入字典的有效键',\n it: 'Si prega di inserire una chiave valida per il proprio dizionario',\n pt: 'Por favor, insira uma chave válida para seu dicionário',\n hi: 'कृपया अपने शब्दकोश के लिए एक मान्य कुंजी दर्ज करें',\n ar: 'الرجاء إدخال مفتاح صالح لقاموسك',\n ru: 'Пожалуйста, введите действительный ключ для вашего словаря',\n tr: 'Lütfen sözlüğünüz için geçerli bir anahtar girin',\n pl: 'Proszę wprowadzić prawidłowy klucz dla słownika',\n id: 'Silakan masukkan key yang valid untuk dictionary Anda',\n vi: 'Vui lòng nhập khóa hợp lệ cho từ điển của bạn',\n uk: 'Будь ласка, введіть дійсний ключ для вашого словника',\n }),\n\n requiredErrorProjectId: t({\n en: 'Please select a project',\n 'en-GB': 'Please select a project',\n fr: 'Veuillez sélectionner un projet',\n es: 'Por favor, seleccione un proyecto',\n de: 'Bitte wählen Sie ein Projekt aus',\n ja: 'プロジェクトを選択してください',\n ko: '프로젝트를 선택해 주세요',\n zh: '请选择一个项目',\n it: 'Si prega di selezionare un progetto',\n pt: 'Por favor, selecione um projeto',\n hi: 'कृपया एक परियोजना चुनें',\n ar: 'الرجاء تحديد مشروع',\n ru: 'Пожалуйста, выберите проект',\n tr: 'Lütfen bir proje seçin',\n pl: 'Proszę wybrać projekt',\n id: 'Silakan pilih project',\n vi: 'Vui lòng chọn dự án',\n uk: 'Будь ласка, виберіть проєкт',\n }),\n\n invalidTypeErrorProjectId: t({\n en: 'Please select a valid project',\n 'en-GB': 'Please select a valid project',\n fr: 'Veuillez sélectionner un projet valide',\n es: 'Por favor, seleccione un proyecto válido',\n de: 'Bitte wählen Sie ein gültiges Projekt aus',\n ja: '有効なプロジェクトを選択してください',\n ko: '유효한 프로젝트를 선택해 주세요',\n zh: '请选择一个有效的项目',\n it: 'Si prega di selezionare un progetto valido',\n pt: 'Por favor, selecione um projeto válido',\n hi: 'कृपया एक मान्य परियोजना चुनें',\n ar: 'الرجاء تحديد مشروع صالح',\n ru: 'Пожалуйста, выберите действительный проект',\n tr: 'Lütfen geçerli bir proje seçin',\n pl: 'Proszę wybrać prawidłowy projekt',\n id: 'Silakan pilih project yang valid',\n vi: 'Vui lòng chọn dự án hợp lệ',\n uk: 'Будь ласка, виберіть дійсний проєкт',\n }),\n },\n title: 'Dictionary form schema',\n description:\n 'Validation schema for the dictionary creation form, ensuring required fields like dictionary key and associated project ID are correctly filled and typed.',\n tags: ['form validation', 'dictionary creation', 'schema'],\n} satisfies Dictionary;\n\nexport default dictionaryFormSchemaContent;\n"],"mappings":";;;AAEA,MAAa,8BAA8B;CACzC,KAAK;CACL,SAAS;EACP,mBAAmB,EAAE;GACnB,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL,CAAC;EAEF,sBAAsB,EAAE;GACtB,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL,CAAC;EAEF,wBAAwB,EAAE;GACxB,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL,CAAC;EAEF,2BAA2B,EAAE;GAC3B,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL,CAAC;EACH;CACD,OAAO;CACP,aACE;CACF,MAAM;EAAC;EAAmB;EAAuB;EAAS;CAC3D"}
@@ -1 +1 @@
1
- {"version":3,"file":"useDictionaryFormSchema.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.ts"],"sourcesContent":["import { useIntlayer } from 'react-intlayer';\nimport { z } from 'zod/v4';\n\nexport const useDictionarySchema = (projectId: string) => {\n const {\n requiredErrorName,\n invalidTypeErrorName,\n requiredErrorProjectId,\n invalidTypeErrorProjectId,\n } = useIntlayer('dictionary-form-schema');\n\n return z.object({\n key: z\n .string({\n error: (issue) =>\n issue.input === undefined\n ? requiredErrorName.value\n : invalidTypeErrorName.value,\n })\n .min(1, { error: invalidTypeErrorName.value })\n .default(''),\n projectIds: z\n .array(\n z.string({\n error: (issue) =>\n issue.input === undefined\n ? requiredErrorProjectId.value\n : invalidTypeErrorProjectId.value,\n })\n )\n .default([projectId]),\n });\n};\n\nexport type DictionaryFormData = z.infer<\n ReturnType<typeof useDictionarySchema>\n>;\n"],"mappings":";;;;AAGA,MAAa,uBAAuB,cAAsB;CACxD,MAAM,EACJ,mBACA,sBACA,wBACA,8BACE,YAAY,wBAAwB;CAExC,OAAO,EAAE,OAAO;EACd,KAAK,EACF,OAAO,EACN,QAAQ,UACN,MAAM,UAAU,SACZ,kBAAkB,QAClB,qBAAqB,MAC7B,CAAC,EACA,IAAI,GAAG,EAAE,OAAO,qBAAqB,MAAM,CAAC,EAC5C,QAAQ,EAAE;EACb,YAAY,EACT,MACC,EAAE,OAAO,EACP,QAAQ,UACN,MAAM,UAAU,SACZ,uBAAuB,QACvB,0BAA0B,MAClC,CAAC,CACH,EACC,QAAQ,CAAC,SAAS,CAAC;CACxB,CAAC;AACH"}
1
+ {"version":3,"file":"useDictionaryFormSchema.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.ts"],"sourcesContent":["import { useIntlayer } from 'react-intlayer';\nimport { z } from 'zod/v4';\n\nexport const useDictionarySchema = (projectId: string) => {\n const {\n requiredErrorName,\n invalidTypeErrorName,\n requiredErrorProjectId,\n invalidTypeErrorProjectId,\n } = useIntlayer('dictionary-form-schema');\n\n return z.object({\n key: z\n .string({\n error: (issue) =>\n issue.input === undefined\n ? requiredErrorName.value\n : invalidTypeErrorName.value,\n })\n .min(1, { error: invalidTypeErrorName.value })\n .default(''),\n projectIds: z\n .array(\n z.string({\n error: (issue) =>\n issue.input === undefined\n ? requiredErrorProjectId.value\n : invalidTypeErrorProjectId.value,\n })\n )\n .default([projectId]),\n });\n};\n\nexport type DictionaryFormData = z.infer<\n ReturnType<typeof useDictionarySchema>\n>;\n"],"mappings":";;;;AAGA,MAAa,uBAAuB,cAAsB;CACxD,MAAM,EACJ,mBACA,sBACA,wBACA,8BACE,YAAY,yBAAyB;AAEzC,QAAO,EAAE,OAAO;EACd,KAAK,EACF,OAAO,EACN,QAAQ,UACN,MAAM,UAAU,SACZ,kBAAkB,QAClB,qBAAqB,OAC5B,CAAC,CACD,IAAI,GAAG,EAAE,OAAO,qBAAqB,OAAO,CAAC,CAC7C,QAAQ,GAAG;EACd,YAAY,EACT,MACC,EAAE,OAAO,EACP,QAAQ,UACN,MAAM,UAAU,SACZ,uBAAuB,QACvB,0BAA0B,OACjC,CAAC,CACH,CACA,QAAQ,CAAC,UAAU,CAAC;EACxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"DictionaryDetailsForm.mjs","names":["useForm"],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.tsx"],"sourcesContent":["'use client';\n\nimport {\n useAuditContentDeclarationMetadata,\n useGetProjects,\n useGetTags,\n} from '@api/index';\nimport { useSession } from '@api/useAuth';\n\nimport { Form, useForm } from '@components/Form';\nimport { Checkbox } from '@components/Input';\nimport { Loader } from '@components/Loader';\nimport { MultiSelect, Select } from '@components/Select';\nimport { useEditedContent } from '@intlayer/editor-react';\nimport type { Dictionary, LocalDictionaryId } from '@intlayer/types/dictionary';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { WandSparkles } from 'lucide-react';\nimport { type FC, useEffect } from 'react';\nimport { useWatch } from 'react-hook-form';\nimport { useIntlayer } from 'react-intlayer';\nimport { useDictionaryDetailsSchema } from './useDictionaryDetailsSchema';\n\ntype DictionaryDetailsProps = {\n dictionary: Dictionary;\n mode: ('local' | 'remote')[];\n};\n\nexport const DictionaryDetailsForm: FC<DictionaryDetailsProps> = ({\n dictionary,\n mode,\n}) => {\n const { session } = useSession();\n const { project } = session ?? {};\n const { data: projectsData, isLoading: isLoadingProjects } =\n useGetProjects() as any;\n const { data: tagsData } = useGetTags() as any;\n\n const projects = (projectsData?.data ?? []) as any[];\n const allTags = (tagsData?.data ?? []) as any[];\n\n const DictionaryDetailsSchema = useDictionaryDetailsSchema(\n String(project?.id)\n );\n const { form, isSubmitting } = useForm(DictionaryDetailsSchema, {\n defaultValues: {\n ...dictionary,\n location: dictionary.location ?? 'remote',\n },\n });\n const { editedContent, setEditedDictionary } = useEditedContent();\n const {\n titleInput,\n keyInput,\n descriptionInput,\n projectInput,\n tagsSelect,\n locationSelect,\n importModeSelect,\n filePathInput,\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({\n ...dictionary,\n tags: dictionary.tags ?? [],\n location: dictionary.location ?? 'remote',\n });\n }, [dictionary, form?.reset]);\n\n useEffect(() => {\n if (typeof updatedDictionary === 'undefined') {\n form.reset({\n ...dictionary,\n tags: dictionary.tags ?? [],\n location: dictionary.location ?? 'remote',\n });\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 const auditedDictionary = response.data.fileContent;\n\n const merged = {\n ...dictionaryToAudit,\n ...auditedDictionary,\n tags: auditedDictionary.tags ?? dictionaryToAudit.tags ?? [],\n };\n\n setEditedDictionary(merged as Dictionary);\n form.reset(merged);\n },\n }\n );\n };\n\n const watchedLocation = useWatch({\n control: form.control,\n name: 'location',\n });\n const isLocalChecked =\n watchedLocation === 'local' || watchedLocation === 'hybrid';\n\n return (\n <Form\n className=\"flex w-full flex-col gap-8\"\n {...form}\n schema={DictionaryDetailsSchema}\n >\n <div className=\"grid grid-cols-2 gap-8 max-md:grid-cols-1\">\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, { shouldDirty: true });\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\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, { shouldDirty: true });\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\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, { shouldDirty: true });\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n description: value,\n });\n }}\n />\n <div className=\"grid grid-cols-2 gap-8 px-1 max-md:grid-cols-1\">\n <Form.Field\n control={form.control}\n name=\"location\"\n render={({ field }) => {\n const value = field.value;\n const isLocal = value === 'local' || value === 'hybrid';\n const isRemote = value === 'remote' || value === 'hybrid';\n\n const handleLocalToggle = (isChecked: boolean) => {\n if (!isChecked && !isRemote) return;\n\n const newValue: Dictionary['location'] = isChecked\n ? isRemote\n ? 'hybrid'\n : 'local'\n : 'remote';\n\n field.onChange(newValue);\n\n const newFilePath = isChecked\n ? (form.getValues('filePath') ?? dictionary.filePath)\n : undefined;\n\n if (!isChecked) {\n form.setValue('filePath', undefined);\n }\n\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n location: newValue,\n filePath: newFilePath,\n });\n };\n\n const handleRemoteToggle = (isChecked: boolean) => {\n if (!isChecked && !isLocal) return;\n\n const newValue: Dictionary['location'] = isChecked\n ? isLocal\n ? 'hybrid'\n : 'remote'\n : 'local';\n\n field.onChange(newValue);\n\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n location: newValue,\n });\n };\n\n return (\n <Form.Item className=\"flex flex-col gap-2 px-1\">\n <Form.Label className=\"ml-1\">{locationSelect.label}</Form.Label>\n <div className=\"ml-2 flex items-center gap-4 py-2\">\n <Checkbox\n id=\"location-local\"\n name=\"location-local\"\n label={locationSelect.local.value}\n color=\"text\"\n checked={isLocal}\n disabled={\n !mode.includes('local') && !mode.includes('remote')\n }\n onChange={(e) => handleLocalToggle(e.target.checked)}\n />\n <Checkbox\n id=\"location-remote\"\n name=\"location-remote\"\n label={locationSelect.remote.value}\n color=\"text\"\n checked={isRemote}\n disabled={\n !mode.includes('remote') &&\n dictionary.location !== 'remote' &&\n dictionary.location !== 'hybrid'\n }\n onChange={(e) => handleRemoteToggle(e.target.checked)}\n />\n </div>\n <Form.Description>\n {locationSelect.testDescription}\n </Form.Description>\n <Form.Message />\n </Form.Item>\n );\n }}\n />\n\n <AnimatePresence mode=\"wait\">\n {isLocalChecked && (\n <motion.div\n key=\"filePath-input\"\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: 'auto' }}\n exit={{ opacity: 0, height: 0 }}\n transition={{ duration: 0.3 }}\n className=\"overflow-hidden\"\n >\n <Form.Input\n name=\"filePath\"\n label={filePathInput.label.value}\n placeholder={filePathInput.placeholder.value}\n description={filePathInput.description.value}\n disabled={isSubmitting || !isLocalChecked}\n onChange={(e) => {\n const value = e.target.value;\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n filePath: value,\n });\n }}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n <div className=\"grid grid-cols-2 gap-8 max-md:grid-cols-1\">\n <Form.Select\n name=\"importMode\"\n label={importModeSelect.label.value}\n description={importModeSelect.description.value}\n onValueChange={(value) => {\n form.setValue('importMode', value as any, { shouldDirty: true });\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n importMode: value as any,\n });\n }}\n >\n <Select.Trigger>\n <Select.Value placeholder={importModeSelect.label.value} />\n </Select.Trigger>\n <Select.Content>\n <Select.Item value=\"static\">\n {importModeSelect.static.value}\n </Select.Item>\n <Select.Item value=\"dynamic\">\n {importModeSelect.dynamic.value}\n </Select.Item>\n <Select.Item value=\"live\">\n {importModeSelect.live.value}\n </Select.Item>\n </Select.Content>\n </Form.Select>\n </div>\n <div className=\"grid grid-cols-2 gap-8 max-md:grid-cols-1\">\n <Form.MultiSelect\n name=\"projectIds\"\n label={projectInput.label.value}\n description={projectInput.description}\n onValueChange={(value) => {\n const valueArray = [value].flat();\n form.setValue('projectIds', valueArray, { shouldDirty: true });\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n projectIds: valueArray,\n });\n }}\n >\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n projects?.find((project: any) => 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?.map((project: any) => (\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}\n onValueChange={(value) => {\n const valueArray = [value].flat();\n form.setValue('tags', valueArray, { shouldDirty: true });\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n tags: valueArray,\n });\n }}\n >\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n allTags?.find((tag: any) => String(tag.key) === value)?.name ??\n value\n }\n >\n <MultiSelect.Input placeholder={tagsSelect.placeholder.value} />\n </MultiSelect.Trigger>\n <MultiSelect.Content>\n <Loader isLoading={isLoadingProjects}>\n <MultiSelect.List>\n {allTags?.map((tag: any) => (\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=\"icon-md\"\n label={auditButton.label.value}\n Icon={WandSparkles}\n variant=\"outline\"\n color=\"text\"\n className=\"max-md:w-full\"\n onClick={handleOnAuditFile}\n disabled={isSubmitting || isAuditing}\n isLoading={isAuditing}\n />\n </div>\n </Form>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"DictionaryDetailsForm.mjs","names":["useForm"],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.tsx"],"sourcesContent":["'use client';\n\nimport {\n useAuditContentDeclarationMetadata,\n useGetProjects,\n useGetTags,\n} from '@api/index';\nimport { useSession } from '@api/useAuth';\n\nimport { Form, useForm } from '@components/Form';\nimport { Checkbox } from '@components/Input';\nimport { Loader } from '@components/Loader';\nimport { MultiSelect, Select } from '@components/Select';\nimport { useEditedContent } from '@intlayer/editor-react';\nimport type { Dictionary, LocalDictionaryId } from '@intlayer/types/dictionary';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { WandSparkles } from 'lucide-react';\nimport { type FC, useEffect } from 'react';\nimport { useWatch } from 'react-hook-form';\nimport { useIntlayer } from 'react-intlayer';\nimport { useDictionaryDetailsSchema } from './useDictionaryDetailsSchema';\n\ntype DictionaryDetailsProps = {\n dictionary: Dictionary;\n mode: ('local' | 'remote')[];\n};\n\nexport const DictionaryDetailsForm: FC<DictionaryDetailsProps> = ({\n dictionary,\n mode,\n}) => {\n const { session } = useSession();\n const { project } = session ?? {};\n const { data: projectsData, isLoading: isLoadingProjects } =\n useGetProjects() as any;\n const { data: tagsData } = useGetTags() as any;\n\n const projects = (projectsData?.data ?? []) as any[];\n const allTags = (tagsData?.data ?? []) as any[];\n\n const DictionaryDetailsSchema = useDictionaryDetailsSchema(\n String(project?.id)\n );\n const { form, isSubmitting } = useForm(DictionaryDetailsSchema, {\n defaultValues: {\n ...dictionary,\n location: dictionary.location ?? 'remote',\n },\n });\n const { editedContent, setEditedDictionary } = useEditedContent();\n const {\n titleInput,\n keyInput,\n descriptionInput,\n projectInput,\n tagsSelect,\n locationSelect,\n importModeSelect,\n filePathInput,\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({\n ...dictionary,\n tags: dictionary.tags ?? [],\n location: dictionary.location ?? 'remote',\n });\n }, [dictionary, form?.reset]);\n\n useEffect(() => {\n if (typeof updatedDictionary === 'undefined') {\n form.reset({\n ...dictionary,\n tags: dictionary.tags ?? [],\n location: dictionary.location ?? 'remote',\n });\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 const auditedDictionary = response.data.fileContent;\n\n const merged = {\n ...dictionaryToAudit,\n ...auditedDictionary,\n tags: auditedDictionary.tags ?? dictionaryToAudit.tags ?? [],\n };\n\n setEditedDictionary(merged as Dictionary);\n form.reset(merged);\n },\n }\n );\n };\n\n const watchedLocation = useWatch({\n control: form.control,\n name: 'location',\n });\n const isLocalChecked =\n watchedLocation === 'local' || watchedLocation === 'hybrid';\n\n return (\n <Form\n className=\"flex w-full flex-col gap-8\"\n {...form}\n schema={DictionaryDetailsSchema}\n >\n <div className=\"grid grid-cols-2 gap-8 max-md:grid-cols-1\">\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, { shouldDirty: true });\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\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, { shouldDirty: true });\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\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, { shouldDirty: true });\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n description: value,\n });\n }}\n />\n <div className=\"grid grid-cols-2 gap-8 px-1 max-md:grid-cols-1\">\n <Form.Field\n control={form.control}\n name=\"location\"\n render={({ field }) => {\n const value = field.value;\n const isLocal = value === 'local' || value === 'hybrid';\n const isRemote = value === 'remote' || value === 'hybrid';\n\n const handleLocalToggle = (isChecked: boolean) => {\n if (!isChecked && !isRemote) return;\n\n const newValue: Dictionary['location'] = isChecked\n ? isRemote\n ? 'hybrid'\n : 'local'\n : 'remote';\n\n field.onChange(newValue);\n\n const newFilePath = isChecked\n ? (form.getValues('filePath') ?? dictionary.filePath)\n : undefined;\n\n if (!isChecked) {\n form.setValue('filePath', undefined);\n }\n\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n location: newValue,\n filePath: newFilePath,\n });\n };\n\n const handleRemoteToggle = (isChecked: boolean) => {\n if (!isChecked && !isLocal) return;\n\n const newValue: Dictionary['location'] = isChecked\n ? isLocal\n ? 'hybrid'\n : 'remote'\n : 'local';\n\n field.onChange(newValue);\n\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n location: newValue,\n });\n };\n\n return (\n <Form.Item className=\"flex flex-col gap-2 px-1\">\n <Form.Label className=\"ml-1\">{locationSelect.label}</Form.Label>\n <div className=\"ml-2 flex items-center gap-4 py-2\">\n <Checkbox\n id=\"location-local\"\n name=\"location-local\"\n label={locationSelect.local.value}\n color=\"text\"\n checked={isLocal}\n disabled={\n !mode.includes('local') && !mode.includes('remote')\n }\n onChange={(e) => handleLocalToggle(e.target.checked)}\n />\n <Checkbox\n id=\"location-remote\"\n name=\"location-remote\"\n label={locationSelect.remote.value}\n color=\"text\"\n checked={isRemote}\n disabled={\n !mode.includes('remote') &&\n dictionary.location !== 'remote' &&\n dictionary.location !== 'hybrid'\n }\n onChange={(e) => handleRemoteToggle(e.target.checked)}\n />\n </div>\n <Form.Description>\n {locationSelect.testDescription}\n </Form.Description>\n <Form.Message />\n </Form.Item>\n );\n }}\n />\n\n <AnimatePresence mode=\"wait\">\n {isLocalChecked && (\n <motion.div\n key=\"filePath-input\"\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: 'auto' }}\n exit={{ opacity: 0, height: 0 }}\n transition={{ duration: 0.3 }}\n className=\"overflow-hidden\"\n >\n <Form.Input\n name=\"filePath\"\n label={filePathInput.label.value}\n placeholder={filePathInput.placeholder.value}\n description={filePathInput.description.value}\n disabled={isSubmitting || !isLocalChecked}\n onChange={(e) => {\n const value = e.target.value;\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n filePath: value,\n });\n }}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n <div className=\"grid grid-cols-2 gap-8 max-md:grid-cols-1\">\n <Form.Select\n name=\"importMode\"\n label={importModeSelect.label.value}\n description={importModeSelect.description.value}\n onValueChange={(value) => {\n form.setValue('importMode', value as any, { shouldDirty: true });\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n importMode: value as any,\n });\n }}\n >\n <Select.Trigger>\n <Select.Value placeholder={importModeSelect.label.value} />\n </Select.Trigger>\n <Select.Content>\n <Select.Item value=\"static\">\n {importModeSelect.static.value}\n </Select.Item>\n <Select.Item value=\"dynamic\">\n {importModeSelect.dynamic.value}\n </Select.Item>\n <Select.Item value=\"live\">\n {importModeSelect.live.value}\n </Select.Item>\n </Select.Content>\n </Form.Select>\n </div>\n <div className=\"grid grid-cols-2 gap-8 max-md:grid-cols-1\">\n <Form.MultiSelect\n name=\"projectIds\"\n label={projectInput.label.value}\n description={projectInput.description}\n onValueChange={(value) => {\n const valueArray = [value].flat();\n form.setValue('projectIds', valueArray, { shouldDirty: true });\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n projectIds: valueArray,\n });\n }}\n >\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n projects?.find((project: any) => 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?.map((project: any) => (\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}\n onValueChange={(value) => {\n const valueArray = [value].flat();\n form.setValue('tags', valueArray, { shouldDirty: true });\n setEditedDictionary({\n ...dictionary,\n ...(updatedDictionary ?? {}),\n tags: valueArray,\n });\n }}\n >\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n allTags?.find((tag: any) => String(tag.key) === value)?.name ??\n value\n }\n >\n <MultiSelect.Input placeholder={tagsSelect.placeholder.value} />\n </MultiSelect.Trigger>\n <MultiSelect.Content>\n <Loader isLoading={isLoadingProjects}>\n <MultiSelect.List>\n {allTags?.map((tag: any) => (\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=\"icon-md\"\n label={auditButton.label.value}\n Icon={WandSparkles}\n variant=\"outline\"\n color=\"text\"\n className=\"max-md:w-full\"\n onClick={handleOnAuditFile}\n disabled={isSubmitting || isAuditing}\n isLoading={isAuditing}\n />\n </div>\n </Form>\n );\n};\n"],"mappings":"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"}