@intlayer/design-system 9.0.0-canary.0 → 9.0.0-canary.10

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 (282) hide show
  1. package/dist/esm/api/hooks/ai.mjs +20 -1
  2. package/dist/esm/api/hooks/ai.mjs.map +1 -1
  3. package/dist/esm/api/hooks/asset.mjs +78 -0
  4. package/dist/esm/api/hooks/asset.mjs.map +1 -0
  5. package/dist/esm/api/hooks/dictionary.mjs +15 -3
  6. package/dist/esm/api/hooks/dictionary.mjs.map +1 -1
  7. package/dist/esm/api/hooks/utils.mjs +1 -1
  8. package/dist/esm/api/index.mjs +4 -3
  9. package/dist/esm/api/useAuth/useOAuth2.mjs +2 -2
  10. package/dist/esm/api/useAuth/useSession.mjs +1 -1
  11. package/dist/esm/api/useIntlayerAPI.mjs +6 -1
  12. package/dist/esm/api/useIntlayerAPI.mjs.map +1 -1
  13. package/dist/esm/components/Command/index.mjs +8 -8
  14. package/dist/esm/components/Command/index.mjs.map +1 -1
  15. package/dist/esm/components/DictionaryEditor/DictionaryEditor.mjs +1 -1
  16. package/dist/esm/components/DictionaryEditor/NodeWrapper/BooleanWrapper.mjs +1 -1
  17. package/dist/esm/components/DictionaryEditor/NodeWrapper/FileWrapper.mjs +1 -1
  18. package/dist/esm/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.mjs.map +1 -1
  19. package/dist/esm/components/DictionaryEditor/NodeWrapper/NumberWrapper.mjs +1 -1
  20. package/dist/esm/components/DictionaryEditor/NodeWrapper/StringWrapper.mjs +1 -1
  21. package/dist/esm/components/DictionaryEditor/NodeWrapper/index.mjs +1 -1
  22. package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs +105 -36
  23. package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs.map +1 -1
  24. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs +32 -10
  25. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
  26. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs +120 -35
  27. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs.map +1 -1
  28. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.mjs +246 -0
  29. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.mjs.map +1 -1
  30. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.mjs +10 -2
  31. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.mjs.map +1 -1
  32. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs +377 -18
  33. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
  34. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.mjs +506 -0
  35. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.mjs.map +1 -1
  36. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +10 -6
  37. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
  38. package/dist/esm/components/DictionaryFieldEditor/JSONEditor.mjs +1 -1
  39. package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs +1 -1
  40. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +9 -9
  41. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
  42. package/dist/esm/components/DictionaryFieldEditor/StructureEditor.mjs +1 -1
  43. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs +2 -2
  44. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
  45. package/dist/esm/components/DictionaryFieldEditor/contentEditor.content.mjs +79 -0
  46. package/dist/esm/components/DictionaryFieldEditor/contentEditor.content.mjs.map +1 -0
  47. package/dist/esm/components/Form/Form.mjs +3 -43
  48. package/dist/esm/components/Form/Form.mjs.map +1 -1
  49. package/dist/esm/components/Form/elements/FormElement.mjs +2 -3
  50. package/dist/esm/components/Form/elements/FormElement.mjs.map +1 -1
  51. package/dist/esm/components/Form/elements/MultiselectElement.mjs +2 -3
  52. package/dist/esm/components/Form/elements/MultiselectElement.mjs.map +1 -1
  53. package/dist/esm/components/Form/elements/OTPElement.mjs +2 -3
  54. package/dist/esm/components/Form/elements/OTPElement.mjs.map +1 -1
  55. package/dist/esm/components/Form/elements/SelectElement.mjs +2 -3
  56. package/dist/esm/components/Form/elements/SelectElement.mjs.map +1 -1
  57. package/dist/esm/components/Form/elements/SwitchSelectorElement.mjs +2 -3
  58. package/dist/esm/components/Form/elements/SwitchSelectorElement.mjs.map +1 -1
  59. package/dist/esm/components/Form/index.mjs +21 -2
  60. package/dist/esm/components/Form/layout/FormItemLayout.mjs +8 -5
  61. package/dist/esm/components/Form/layout/FormItemLayout.mjs.map +1 -1
  62. package/dist/esm/components/LanguageBackground/LanguageBackground.mjs +3 -8
  63. package/dist/esm/components/LanguageBackground/LanguageBackground.mjs.map +1 -1
  64. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs +1 -1
  65. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
  66. package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs +113 -0
  67. package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs.map +1 -0
  68. package/dist/esm/components/MarkdownEditor/extensions.mjs +103 -0
  69. package/dist/esm/components/MarkdownEditor/extensions.mjs.map +1 -0
  70. package/dist/esm/components/MarkdownEditor/generative/AICompletionCommands.mjs +51 -0
  71. package/dist/esm/components/MarkdownEditor/generative/AICompletionCommands.mjs.map +1 -0
  72. package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs +100 -0
  73. package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs.map +1 -0
  74. package/dist/esm/components/MarkdownEditor/generative/AISelectorCommands.mjs +81 -0
  75. package/dist/esm/components/MarkdownEditor/generative/AISelectorCommands.mjs.map +1 -0
  76. package/dist/esm/components/MarkdownEditor/generative/GenerativeMenuSwitch.mjs +47 -0
  77. package/dist/esm/components/MarkdownEditor/generative/GenerativeMenuSwitch.mjs.map +1 -0
  78. package/dist/esm/components/MarkdownEditor/generative/useAICompletion.mjs +83 -0
  79. package/dist/esm/components/MarkdownEditor/generative/useAICompletion.mjs.map +1 -0
  80. package/dist/esm/components/MarkdownEditor/imageUpload.mjs +47 -0
  81. package/dist/esm/components/MarkdownEditor/imageUpload.mjs.map +1 -0
  82. package/dist/esm/components/MarkdownEditor/index.mjs +4 -0
  83. package/dist/esm/components/MarkdownEditor/markdownEditor.content.mjs +1140 -0
  84. package/dist/esm/components/MarkdownEditor/markdownEditor.content.mjs.map +1 -0
  85. package/dist/esm/components/MarkdownEditor/novel/components/editor-bubble-item.mjs +20 -0
  86. package/dist/esm/components/MarkdownEditor/novel/components/editor-bubble-item.mjs.map +1 -0
  87. package/dist/esm/components/MarkdownEditor/novel/components/editor-bubble.mjs +39 -0
  88. package/dist/esm/components/MarkdownEditor/novel/components/editor-bubble.mjs.map +1 -0
  89. package/dist/esm/components/MarkdownEditor/novel/components/editor-command-item.mjs +25 -0
  90. package/dist/esm/components/MarkdownEditor/novel/components/editor-command-item.mjs.map +1 -0
  91. package/dist/esm/components/MarkdownEditor/novel/components/editor-command.mjs +61 -0
  92. package/dist/esm/components/MarkdownEditor/novel/components/editor-command.mjs.map +1 -0
  93. package/dist/esm/components/MarkdownEditor/novel/components/editor.mjs +27 -0
  94. package/dist/esm/components/MarkdownEditor/novel/components/editor.mjs.map +1 -0
  95. package/dist/esm/components/MarkdownEditor/novel/components/index.mjs +8 -0
  96. package/dist/esm/components/MarkdownEditor/novel/extensions/ai-highlight.mjs +74 -0
  97. package/dist/esm/components/MarkdownEditor/novel/extensions/ai-highlight.mjs.map +1 -0
  98. package/dist/esm/components/MarkdownEditor/novel/extensions/custom-keymap.mjs +37 -0
  99. package/dist/esm/components/MarkdownEditor/novel/extensions/custom-keymap.mjs.map +1 -0
  100. package/dist/esm/components/MarkdownEditor/novel/extensions/image-resizer.mjs +49 -0
  101. package/dist/esm/components/MarkdownEditor/novel/extensions/image-resizer.mjs.map +1 -0
  102. package/dist/esm/components/MarkdownEditor/novel/extensions/index.mjs +51 -0
  103. package/dist/esm/components/MarkdownEditor/novel/extensions/index.mjs.map +1 -0
  104. package/dist/esm/components/MarkdownEditor/novel/extensions/slash-command.mjs +79 -0
  105. package/dist/esm/components/MarkdownEditor/novel/extensions/slash-command.mjs.map +1 -0
  106. package/dist/esm/components/MarkdownEditor/novel/extensions/updated-image.mjs +17 -0
  107. package/dist/esm/components/MarkdownEditor/novel/extensions/updated-image.mjs.map +1 -0
  108. package/dist/esm/components/MarkdownEditor/novel/index.mjs +17 -0
  109. package/dist/esm/components/MarkdownEditor/novel/plugins/index.mjs +3 -0
  110. package/dist/esm/components/MarkdownEditor/novel/plugins/upload-images.mjs +92 -0
  111. package/dist/esm/components/MarkdownEditor/novel/plugins/upload-images.mjs.map +1 -0
  112. package/dist/esm/components/MarkdownEditor/novel/utils/atoms.mjs +39 -0
  113. package/dist/esm/components/MarkdownEditor/novel/utils/atoms.mjs.map +1 -0
  114. package/dist/esm/components/MarkdownEditor/novel/utils/index.mjs +38 -0
  115. package/dist/esm/components/MarkdownEditor/novel/utils/index.mjs.map +1 -0
  116. package/dist/esm/components/MarkdownEditor/selectors/ColorSelector.mjs +176 -0
  117. package/dist/esm/components/MarkdownEditor/selectors/ColorSelector.mjs.map +1 -0
  118. package/dist/esm/components/MarkdownEditor/selectors/LinkSelector.mjs +95 -0
  119. package/dist/esm/components/MarkdownEditor/selectors/LinkSelector.mjs.map +1 -0
  120. package/dist/esm/components/MarkdownEditor/selectors/NodeSelector.mjs +139 -0
  121. package/dist/esm/components/MarkdownEditor/selectors/NodeSelector.mjs.map +1 -0
  122. package/dist/esm/components/MarkdownEditor/selectors/TextButtons.mjs +81 -0
  123. package/dist/esm/components/MarkdownEditor/selectors/TextButtons.mjs.map +1 -0
  124. package/dist/esm/components/MarkdownEditor/slashCommand.mjs +161 -0
  125. package/dist/esm/components/MarkdownEditor/slashCommand.mjs.map +1 -0
  126. package/dist/esm/components/Pattern/GridDistortionPattern.mjs +275 -0
  127. package/dist/esm/components/Pattern/GridDistortionPattern.mjs.map +1 -0
  128. package/dist/esm/components/Pattern/index.mjs +2 -1
  129. package/dist/esm/components/SwitchSelector/useSwitchSelector.mjs +0 -1
  130. package/dist/esm/components/SwitchSelector/useSwitchSelector.mjs.map +1 -1
  131. package/dist/esm/components/Table/Table.mjs +1 -1
  132. package/dist/esm/components/Table/Table.mjs.map +1 -1
  133. package/dist/esm/components/Tag/index.mjs +0 -9
  134. package/dist/esm/components/Tag/index.mjs.map +1 -1
  135. package/dist/esm/components/Toaster/Toast.mjs +1 -1
  136. package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
  137. package/dist/esm/components/index.mjs +27 -6
  138. package/dist/esm/hooks/useIsMounted.mjs +4 -2
  139. package/dist/esm/hooks/useIsMounted.mjs.map +1 -1
  140. package/dist/esm/providers/ReactQueryProvider.mjs +1 -1
  141. package/dist/esm/routes.mjs +2 -1
  142. package/dist/esm/routes.mjs.map +1 -1
  143. package/dist/esm/utils/cn.mjs +2 -8
  144. package/dist/types/api/hooks/ai.d.ts +5 -1
  145. package/dist/types/api/hooks/ai.d.ts.map +1 -1
  146. package/dist/types/api/hooks/asset.d.ts +27 -0
  147. package/dist/types/api/hooks/asset.d.ts.map +1 -0
  148. package/dist/types/api/hooks/audit.d.ts +1 -1
  149. package/dist/types/api/hooks/dictionary.d.ts.map +1 -1
  150. package/dist/types/api/index.d.ts +4 -3
  151. package/dist/types/api/useIntlayerAPI.d.ts +41 -276
  152. package/dist/types/api/useIntlayerAPI.d.ts.map +1 -1
  153. package/dist/types/components/Badge/index.d.ts +1 -1
  154. package/dist/types/components/Breadcrumb/index.d.ts +1 -1
  155. package/dist/types/components/Button/Button.d.ts +3 -3
  156. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +1 -1
  157. package/dist/types/components/Command/index.d.ts.map +1 -1
  158. package/dist/types/components/Container/index.d.ts +2 -2
  159. package/dist/types/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.d.ts.map +1 -1
  160. package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts.map +1 -1
  161. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts.map +1 -1
  162. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.d.ts.map +1 -1
  163. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts +246 -0
  164. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts.map +1 -1
  165. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.d.ts +10 -1
  166. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.d.ts.map +1 -1
  167. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.d.ts +2 -0
  168. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.d.ts.map +1 -1
  169. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts +506 -0
  170. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts.map +1 -1
  171. package/dist/types/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts +2 -1
  172. package/dist/types/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts.map +1 -1
  173. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.d.ts +1 -1
  174. package/dist/types/components/DictionaryFieldEditor/contentEditor.content.d.ts +80 -0
  175. package/dist/types/components/DictionaryFieldEditor/contentEditor.content.d.ts.map +1 -0
  176. package/dist/types/components/Form/Form.d.ts +27 -47
  177. package/dist/types/components/Form/Form.d.ts.map +1 -1
  178. package/dist/types/components/Form/elements/AutoSizeTextAreaElement.d.ts +1 -1
  179. package/dist/types/components/Form/elements/CheckboxElement.d.ts +1 -1
  180. package/dist/types/components/Form/elements/EditableFieldInputElement.d.ts +1 -1
  181. package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts +1 -1
  182. package/dist/types/components/Form/elements/FormElement.d.ts.map +1 -1
  183. package/dist/types/components/Form/elements/InputElement.d.ts +1 -1
  184. package/dist/types/components/Form/elements/InputPasswordElement.d.ts +1 -1
  185. package/dist/types/components/Form/elements/MultiselectElement.d.ts +1 -1
  186. package/dist/types/components/Form/elements/MultiselectElement.d.ts.map +1 -1
  187. package/dist/types/components/Form/elements/OTPElement.d.ts +1 -1
  188. package/dist/types/components/Form/elements/OTPElement.d.ts.map +1 -1
  189. package/dist/types/components/Form/elements/SearchInputElement.d.ts +1 -1
  190. package/dist/types/components/Form/elements/SelectElement.d.ts +1 -1
  191. package/dist/types/components/Form/elements/SelectElement.d.ts.map +1 -1
  192. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts +1 -1
  193. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts.map +1 -1
  194. package/dist/types/components/Form/elements/TextAreaElement.d.ts +1 -1
  195. package/dist/types/components/Form/index.d.ts +22 -3
  196. package/dist/types/components/Form/layout/FormItemLayout.d.ts.map +1 -1
  197. package/dist/types/components/IDE/CopyCode.d.ts +1 -1
  198. package/dist/types/components/Input/Checkbox.d.ts +2 -2
  199. package/dist/types/components/Input/Radio.d.ts +2 -2
  200. package/dist/types/components/LanguageBackground/LanguageBackground.d.ts.map +1 -1
  201. package/dist/types/components/Link/Link.d.ts +1 -1
  202. package/dist/types/components/MarkDownRender/MarkDownRender.d.ts.map +1 -1
  203. package/dist/types/components/MarkdownEditor/MarkdownEditor.d.ts +31 -0
  204. package/dist/types/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -0
  205. package/dist/types/components/MarkdownEditor/extensions.d.ts +11 -0
  206. package/dist/types/components/MarkdownEditor/extensions.d.ts.map +1 -0
  207. package/dist/types/components/MarkdownEditor/generative/AICompletionCommands.d.ts +18 -0
  208. package/dist/types/components/MarkdownEditor/generative/AICompletionCommands.d.ts.map +1 -0
  209. package/dist/types/components/MarkdownEditor/generative/AISelector.d.ts +22 -0
  210. package/dist/types/components/MarkdownEditor/generative/AISelector.d.ts.map +1 -0
  211. package/dist/types/components/MarkdownEditor/generative/AISelectorCommands.d.ts +17 -0
  212. package/dist/types/components/MarkdownEditor/generative/AISelectorCommands.d.ts.map +1 -0
  213. package/dist/types/components/MarkdownEditor/generative/GenerativeMenuSwitch.d.ts +26 -0
  214. package/dist/types/components/MarkdownEditor/generative/GenerativeMenuSwitch.d.ts.map +1 -0
  215. package/dist/types/components/MarkdownEditor/generative/useAICompletion.d.ts +30 -0
  216. package/dist/types/components/MarkdownEditor/generative/useAICompletion.d.ts.map +1 -0
  217. package/dist/types/components/MarkdownEditor/imageUpload.d.ts +29 -0
  218. package/dist/types/components/MarkdownEditor/imageUpload.d.ts.map +1 -0
  219. package/dist/types/components/MarkdownEditor/index.d.ts +3 -0
  220. package/dist/types/components/MarkdownEditor/markdownEditor.content.d.ts +1135 -0
  221. package/dist/types/components/MarkdownEditor/markdownEditor.content.d.ts.map +1 -0
  222. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble-item.d.ts +14 -0
  223. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble-item.d.ts.map +1 -0
  224. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble.d.ts +18 -0
  225. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble.d.ts.map +1 -0
  226. package/dist/types/components/MarkdownEditor/novel/components/editor-command-item.d.ts +28 -0
  227. package/dist/types/components/MarkdownEditor/novel/components/editor-command-item.d.ts.map +1 -0
  228. package/dist/types/components/MarkdownEditor/novel/components/editor-command.d.ts +34 -0
  229. package/dist/types/components/MarkdownEditor/novel/components/editor-command.d.ts.map +1 -0
  230. package/dist/types/components/MarkdownEditor/novel/components/editor.d.ts +23 -0
  231. package/dist/types/components/MarkdownEditor/novel/components/editor.d.ts.map +1 -0
  232. package/dist/types/components/MarkdownEditor/novel/components/index.d.ts +8 -0
  233. package/dist/types/components/MarkdownEditor/novel/extensions/ai-highlight.d.ts +36 -0
  234. package/dist/types/components/MarkdownEditor/novel/extensions/ai-highlight.d.ts.map +1 -0
  235. package/dist/types/components/MarkdownEditor/novel/extensions/custom-keymap.d.ts +17 -0
  236. package/dist/types/components/MarkdownEditor/novel/extensions/custom-keymap.d.ts.map +1 -0
  237. package/dist/types/components/MarkdownEditor/novel/extensions/image-resizer.d.ts +7 -0
  238. package/dist/types/components/MarkdownEditor/novel/extensions/image-resizer.d.ts.map +1 -0
  239. package/dist/types/components/MarkdownEditor/novel/extensions/index.d.ts +30 -0
  240. package/dist/types/components/MarkdownEditor/novel/extensions/index.d.ts.map +1 -0
  241. package/dist/types/components/MarkdownEditor/novel/extensions/slash-command.d.ts +38 -0
  242. package/dist/types/components/MarkdownEditor/novel/extensions/slash-command.d.ts.map +1 -0
  243. package/dist/types/components/MarkdownEditor/novel/extensions/updated-image.d.ts +8 -0
  244. package/dist/types/components/MarkdownEditor/novel/extensions/updated-image.d.ts.map +1 -0
  245. package/dist/types/components/MarkdownEditor/novel/index.d.ts +16 -0
  246. package/dist/types/components/MarkdownEditor/novel/plugins/index.d.ts +2 -0
  247. package/dist/types/components/MarkdownEditor/novel/plugins/upload-images.d.ts +22 -0
  248. package/dist/types/components/MarkdownEditor/novel/plugins/upload-images.d.ts.map +1 -0
  249. package/dist/types/components/MarkdownEditor/novel/utils/atoms.d.ts +21 -0
  250. package/dist/types/components/MarkdownEditor/novel/utils/atoms.d.ts.map +1 -0
  251. package/dist/types/components/MarkdownEditor/novel/utils/index.d.ts +10 -0
  252. package/dist/types/components/MarkdownEditor/novel/utils/index.d.ts.map +1 -0
  253. package/dist/types/components/MarkdownEditor/selectors/ColorSelector.d.ts +17 -0
  254. package/dist/types/components/MarkdownEditor/selectors/ColorSelector.d.ts.map +1 -0
  255. package/dist/types/components/MarkdownEditor/selectors/LinkSelector.d.ts +15 -0
  256. package/dist/types/components/MarkdownEditor/selectors/LinkSelector.d.ts.map +1 -0
  257. package/dist/types/components/MarkdownEditor/selectors/NodeSelector.d.ts +22 -0
  258. package/dist/types/components/MarkdownEditor/selectors/NodeSelector.d.ts.map +1 -0
  259. package/dist/types/components/MarkdownEditor/selectors/TextButtons.d.ts +11 -0
  260. package/dist/types/components/MarkdownEditor/selectors/TextButtons.d.ts.map +1 -0
  261. package/dist/types/components/MarkdownEditor/slashCommand.d.ts +29 -0
  262. package/dist/types/components/MarkdownEditor/slashCommand.d.ts.map +1 -0
  263. package/dist/types/components/Pagination/Pagination.d.ts +1 -1
  264. package/dist/types/components/Pattern/GridDistortionPattern.d.ts +15 -0
  265. package/dist/types/components/Pattern/GridDistortionPattern.d.ts.map +1 -0
  266. package/dist/types/components/Pattern/index.d.ts +2 -1
  267. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts +3 -3
  268. package/dist/types/components/SwitchSelector/VerticalSwitchSelector.d.ts +1 -1
  269. package/dist/types/components/SwitchSelector/useSwitchSelector.d.ts +10 -2
  270. package/dist/types/components/SwitchSelector/useSwitchSelector.d.ts.map +1 -1
  271. package/dist/types/components/TabSelector/TabSelector.d.ts +2 -2
  272. package/dist/types/components/Tag/index.d.ts +2 -2
  273. package/dist/types/components/Tag/index.d.ts.map +1 -1
  274. package/dist/types/components/index.d.ts +29 -8
  275. package/dist/types/hooks/index.d.ts +1 -1
  276. package/dist/types/routes.d.ts +2 -1
  277. package/dist/types/routes.d.ts.map +1 -1
  278. package/dist/types/utils/cn.d.ts +2 -7
  279. package/package.json +69 -39
  280. package/src/components/MarkdownEditor/markdown-editor.css +297 -0
  281. package/dist/esm/utils/cn.mjs.map +0 -1
  282. package/dist/types/utils/cn.d.ts.map +0 -1
@@ -1,26 +1,73 @@
1
1
  'use client';
2
2
 
3
+ import { cn } from "../../../utils/cn.mjs";
3
4
  import { useSession } from "../../../api/useAuth/useSession.mjs";
4
5
  import { useAuditContentDeclarationMetadata } from "../../../api/hooks/ai.mjs";
6
+ import { useGetDictionaries } from "../../../api/hooks/dictionary.mjs";
5
7
  import { useGetProjects } from "../../../api/hooks/project.mjs";
6
8
  import { useGetTags } from "../../../api/hooks/tag.mjs";
7
9
  import { Loader } from "../../Loader/index.mjs";
10
+ import { Button } from "../../Button/Button.mjs";
11
+ import { Container } from "../../Container/index.mjs";
8
12
  import { Checkbox } from "../../Input/Checkbox.mjs";
13
+ import { Input } from "../../Input/Input.mjs";
9
14
  import { MultiSelect } from "../../Select/Multiselect.mjs";
10
15
  import { Select } from "../../Select/Select.mjs";
16
+ import { Pagination } from "../../Pagination/Pagination.mjs";
17
+ import { FormItem } from "../../Form/FormItem.mjs";
18
+ import { FormField } from "../../Form/FormField.mjs";
19
+ import { FormDescription } from "../../Form/FormDescription.mjs";
20
+ import { FormMessage } from "../../Form/FormMessage.mjs";
21
+ import { FormLabelLayout } from "../../Form/layout/FormLabelLayout.mjs";
22
+ import { EditableFieldInputElement } from "../../Form/elements/EditableFieldInputElement.mjs";
23
+ import { EditableFieldTextAreaElement } from "../../Form/elements/EditableFieldTextAreaElement.mjs";
24
+ import { InputElement } from "../../Form/elements/InputElement.mjs";
25
+ import { MultiSelectElement } from "../../Form/elements/MultiselectElement.mjs";
26
+ import { SelectElement } from "../../Form/elements/SelectElement.mjs";
11
27
  import { useForm as useForm$1 } from "../../Form/FormBase.mjs";
12
28
  import { Form } from "../../Form/Form.mjs";
13
29
  import { useDictionaryDetailsSchema } from "./useDictionaryDetailsSchema.mjs";
14
- import { useEffect } from "react";
30
+ import { useEditedContent } from "@intlayer/editor-react";
31
+ import { useEffect, useMemo, useState } from "react";
15
32
  import { WandSparkles } from "lucide-react";
16
33
  import { jsx, jsxs } from "react/jsx-runtime";
17
- import { useEditedContent } from "@intlayer/editor-react";
18
34
  import { useIntlayer } from "react-intlayer";
19
35
  import { useWatch } from "react-hook-form";
20
36
  import { AnimatePresence, motion } from "framer-motion";
21
37
 
22
38
  //#region src/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.tsx
23
- const DictionaryDetailsForm = ({ dictionary, mode }) => {
39
+ const QUALIFIER_TYPES = ["collection", "variant"];
40
+ /** Derive active qualifier types from dictionary qualifier fields. */
41
+ const deriveQualifierTypes = (dict) => {
42
+ const types = [];
43
+ if (dict.item !== void 0) types.push("collection");
44
+ if (dict.variant !== void 0) types.push("variant");
45
+ return types;
46
+ };
47
+ /**
48
+ * A variant can be a named string or a structured object. The CMS edits it as
49
+ * text: a value starting with `{` is parsed as JSON (object variant), anything
50
+ * else is kept as a named-variant string.
51
+ */
52
+ const formatVariant = (variant) => variant !== null && typeof variant === "object" ? JSON.stringify(variant) : variant ?? "";
53
+ const parseVariantInput = (raw) => {
54
+ if (raw.trim().startsWith("{")) try {
55
+ return {
56
+ variant: JSON.parse(raw),
57
+ error: false
58
+ };
59
+ } catch {
60
+ return {
61
+ variant: raw,
62
+ error: true
63
+ };
64
+ }
65
+ return {
66
+ variant: raw,
67
+ error: false
68
+ };
69
+ };
70
+ const DictionaryDetailsForm = ({ dictionary, mode, onSelectSibling }) => {
24
71
  const { session } = useSession();
25
72
  const { project } = session ?? {};
26
73
  const { data: projectsData, isLoading: isLoadingProjects } = useGetProjects();
@@ -33,15 +80,32 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
33
80
  location: dictionary.location ?? "remote"
34
81
  } });
35
82
  const { editedContent, setEditedDictionary } = useEditedContent();
36
- const { titleInput, keyInput, descriptionInput, projectInput, tagsSelect, locationSelect, importModeSelect, filePathInput, auditButton } = useIntlayer("dictionary-details");
83
+ const { titleInput, keyInput, descriptionInput, projectInput, tagsSelect, locationSelect, importModeSelect, filePathInput, auditButton, qualifierSection, siblingDictionaries: siblingContent, typeSwitch } = useIntlayer("dictionary-details");
37
84
  const { mutate: auditContentDeclaration, isPending: isAuditing } = useAuditContentDeclarationMetadata();
38
85
  const updatedDictionary = editedContent?.[dictionary.localId];
86
+ const { data: siblingsData, isLoading: isLoadingSiblings } = useGetDictionaries({ keys: [dictionary.key] }, { enabled: !!dictionary.key });
87
+ const siblings = useMemo(() => (siblingsData?.data ?? []).filter((d) => d.localId !== dictionary.localId), [siblingsData, dictionary.localId]);
88
+ const itemSiblings = useMemo(() => siblings.filter((d) => d.item !== void 0).sort((a, b) => (a.item ?? 0) - (b.item ?? 0)), [siblings]);
89
+ const variantSiblings = useMemo(() => siblings.filter((d) => d.variant !== void 0), [siblings]);
90
+ const allItemDicts = useMemo(() => {
91
+ if (dictionary.item !== void 0) return [dictionary, ...itemSiblings].sort((a, b) => (a.item ?? 0) - (b.item ?? 0));
92
+ return itemSiblings;
93
+ }, [dictionary, itemSiblings]);
94
+ const allVariantDicts = useMemo(() => {
95
+ if (dictionary.variant !== void 0) return [dictionary, ...variantSiblings];
96
+ return variantSiblings;
97
+ }, [dictionary, variantSiblings]);
39
98
  useEffect(() => {
40
99
  form.reset({
41
100
  ...dictionary,
42
101
  tags: dictionary.tags ?? [],
43
102
  location: dictionary.location ?? "remote"
44
103
  });
104
+ setSelectedTypes(deriveQualifierTypes(dictionary));
105
+ setItemValue(dictionary.item ?? 1);
106
+ setVariantValue(formatVariant(dictionary.variant));
107
+ setVariantJsonError(false);
108
+ setShowSiblingPicker(false);
45
109
  }, [dictionary, form?.reset]);
46
110
  useEffect(() => {
47
111
  if (typeof updatedDictionary === "undefined") form.reset({
@@ -72,6 +136,52 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
72
136
  name: "location"
73
137
  });
74
138
  const isLocalChecked = watchedLocation === "local" || watchedLocation === "hybrid";
139
+ const hasSiblings = siblings.length > 0;
140
+ const [selectedTypes, setSelectedTypes] = useState(() => deriveQualifierTypes(dictionary));
141
+ const [itemValue, setItemValue] = useState(dictionary.item ?? 1);
142
+ const [variantValue, setVariantValue] = useState(formatVariant(dictionary.variant));
143
+ const [variantJsonError, setVariantJsonError] = useState(false);
144
+ const [showSiblingPicker, setShowSiblingPicker] = useState(false);
145
+ const allQualifiedSiblings = useMemo(() => [...itemSiblings, ...variantSiblings], [itemSiblings, variantSiblings]);
146
+ const handleTypesChange = (newTypes) => {
147
+ const nextTypes = [newTypes].flat();
148
+ const added = nextTypes.filter((t) => !selectedTypes.includes(t));
149
+ const removed = selectedTypes.filter((t) => !nextTypes.includes(t));
150
+ let base = {
151
+ ...dictionary,
152
+ ...updatedDictionary ?? {}
153
+ };
154
+ for (const qualifier of removed) {
155
+ if (qualifier === "collection") base = {
156
+ ...base,
157
+ item: void 0
158
+ };
159
+ if (qualifier === "variant") base = {
160
+ ...base,
161
+ variant: void 0
162
+ };
163
+ }
164
+ for (const qualifier of added) if (qualifier === "collection") {
165
+ const nextItem = allItemDicts.length > 0 ? Math.max(...allItemDicts.map((d) => d.item ?? 0)) + 1 : 1;
166
+ setItemValue(nextItem);
167
+ base = {
168
+ ...base,
169
+ item: nextItem
170
+ };
171
+ } else if (qualifier === "variant") {
172
+ const newVariant = variantValue || "default";
173
+ setVariantValue(newVariant);
174
+ base = {
175
+ ...base,
176
+ variant: parseVariantInput(newVariant).variant
177
+ };
178
+ }
179
+ setSelectedTypes(nextTypes);
180
+ setEditedDictionary(base);
181
+ setVariantJsonError(false);
182
+ if (nextTypes.length === 0 && allQualifiedSiblings.length > 0) setShowSiblingPicker(true);
183
+ else setShowSiblingPicker(false);
184
+ };
75
185
  return /* @__PURE__ */ jsxs(Form, {
76
186
  className: "flex w-full flex-col gap-8",
77
187
  ...form,
@@ -79,7 +189,7 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
79
189
  children: [
80
190
  /* @__PURE__ */ jsxs("div", {
81
191
  className: "grid grid-cols-2 gap-8 max-md:grid-cols-1",
82
- children: [/* @__PURE__ */ jsx(Form.EditableFieldInput, {
192
+ children: [/* @__PURE__ */ jsx(EditableFieldInputElement, {
83
193
  name: "key",
84
194
  label: keyInput.label,
85
195
  placeholder: keyInput.label.value,
@@ -94,7 +204,7 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
94
204
  key: value
95
205
  });
96
206
  }
97
- }), /* @__PURE__ */ jsx(Form.EditableFieldInput, {
207
+ }), /* @__PURE__ */ jsx(EditableFieldInputElement, {
98
208
  name: "title",
99
209
  label: titleInput.label,
100
210
  placeholder: titleInput.placeholder.value,
@@ -110,7 +220,7 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
110
220
  }
111
221
  })]
112
222
  }),
113
- /* @__PURE__ */ jsx(Form.EditableFieldTextArea, {
223
+ /* @__PURE__ */ jsx(EditableFieldTextAreaElement, {
114
224
  name: "description",
115
225
  label: descriptionInput.label,
116
226
  placeholder: descriptionInput.placeholder.value,
@@ -127,7 +237,7 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
127
237
  }),
128
238
  /* @__PURE__ */ jsxs("div", {
129
239
  className: "grid grid-cols-2 gap-8 px-1 max-md:grid-cols-1",
130
- children: [/* @__PURE__ */ jsx(Form.Field, {
240
+ children: [/* @__PURE__ */ jsx(FormField, {
131
241
  control: form.control,
132
242
  name: "location",
133
243
  render: ({ field }) => {
@@ -157,10 +267,10 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
157
267
  location: newValue
158
268
  });
159
269
  };
160
- return /* @__PURE__ */ jsxs(Form.Item, {
270
+ return /* @__PURE__ */ jsxs(FormItem, {
161
271
  className: "flex flex-col gap-2 px-1",
162
272
  children: [
163
- /* @__PURE__ */ jsx(Form.Label, {
273
+ /* @__PURE__ */ jsx(FormLabelLayout, {
164
274
  className: "ml-1",
165
275
  children: locationSelect.label
166
276
  }),
@@ -184,8 +294,8 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
184
294
  onChange: (e) => handleRemoteToggle(e.target.checked)
185
295
  })]
186
296
  }),
187
- /* @__PURE__ */ jsx(Form.Description, { children: locationSelect.testDescription }),
188
- /* @__PURE__ */ jsx(Form.Message, {})
297
+ /* @__PURE__ */ jsx(FormDescription, { children: locationSelect.testDescription }),
298
+ /* @__PURE__ */ jsx(FormMessage, {})
189
299
  ]
190
300
  });
191
301
  }
@@ -205,8 +315,7 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
205
315
  height: 0
206
316
  },
207
317
  transition: { duration: .3 },
208
- className: "overflow-hidden",
209
- children: /* @__PURE__ */ jsx(Form.Input, {
318
+ children: /* @__PURE__ */ jsx(InputElement, {
210
319
  name: "filePath",
211
320
  label: filePathInput.label.value,
212
321
  placeholder: filePathInput.placeholder.value,
@@ -226,7 +335,7 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
226
335
  }),
227
336
  /* @__PURE__ */ jsx("div", {
228
337
  className: "grid grid-cols-2 gap-8 max-md:grid-cols-1",
229
- children: /* @__PURE__ */ jsxs(Form.Select, {
338
+ children: /* @__PURE__ */ jsxs(SelectElement, {
230
339
  name: "importMode",
231
340
  label: importModeSelect.label.value,
232
341
  description: importModeSelect.description.value,
@@ -256,7 +365,7 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
256
365
  }),
257
366
  /* @__PURE__ */ jsxs("div", {
258
367
  className: "grid grid-cols-2 gap-8 max-md:grid-cols-1",
259
- children: [/* @__PURE__ */ jsxs(Form.MultiSelect, {
368
+ children: [/* @__PURE__ */ jsxs(MultiSelectElement, {
260
369
  name: "projectIds",
261
370
  label: projectInput.label.value,
262
371
  description: projectInput.description,
@@ -279,7 +388,7 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
279
388
  children: project.name
280
389
  }, String(project.id))) })
281
390
  }) })]
282
- }), /* @__PURE__ */ jsxs(Form.MultiSelect, {
391
+ }), /* @__PURE__ */ jsxs(MultiSelectElement, {
283
392
  name: "tags",
284
393
  label: tagsSelect.label.value,
285
394
  description: tagsSelect.description,
@@ -304,9 +413,259 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
304
413
  }) })]
305
414
  })]
306
415
  }),
416
+ /* @__PURE__ */ jsxs(Container, {
417
+ className: "gap-4",
418
+ padding: "md",
419
+ roundedSize: "2xl",
420
+ background: "none",
421
+ border: true,
422
+ borderColor: "card",
423
+ children: [
424
+ /* @__PURE__ */ jsxs("div", {
425
+ className: "flex flex-col gap-1",
426
+ children: [/* @__PURE__ */ jsx("p", {
427
+ className: "ml-1 font-semibold text-sm",
428
+ children: typeSwitch.label
429
+ }), /* @__PURE__ */ jsx("p", {
430
+ className: "ml-1 text-muted text-xs",
431
+ children: typeSwitch.description
432
+ })]
433
+ }),
434
+ /* @__PURE__ */ jsxs(MultiSelect, {
435
+ values: selectedTypes,
436
+ onValueChange: handleTypesChange,
437
+ className: "max-w-xs",
438
+ children: [/* @__PURE__ */ jsx(MultiSelect.Trigger, {
439
+ getBadgeValue: (val) => {
440
+ if (val === "collection") return String(typeSwitch.collection);
441
+ if (val === "variant") return String(typeSwitch.variant);
442
+ return val;
443
+ },
444
+ children: /* @__PURE__ */ jsx(MultiSelect.Input, { placeholder: typeSwitch.label.value })
445
+ }), /* @__PURE__ */ jsx(MultiSelect.Content, { children: /* @__PURE__ */ jsx(MultiSelect.List, { children: QUALIFIER_TYPES.map((qualifier) => /* @__PURE__ */ jsx(MultiSelect.Item, {
446
+ value: qualifier,
447
+ children: typeSwitch[qualifier].value
448
+ }, qualifier)) }) })]
449
+ }),
450
+ /* @__PURE__ */ jsxs(AnimatePresence, { children: [
451
+ selectedTypes.includes("collection") && /* @__PURE__ */ jsx(motion.div, {
452
+ initial: {
453
+ opacity: 0,
454
+ height: 0
455
+ },
456
+ animate: {
457
+ opacity: 1,
458
+ height: "auto"
459
+ },
460
+ exit: {
461
+ opacity: 0,
462
+ height: 0
463
+ },
464
+ transition: { duration: .2 },
465
+ children: /* @__PURE__ */ jsxs("div", {
466
+ className: "flex flex-col gap-2 px-1",
467
+ children: [/* @__PURE__ */ jsx("label", {
468
+ htmlFor: "qualifier-item-value",
469
+ className: "ml-1 font-medium text-sm",
470
+ children: typeSwitch.itemValueLabel
471
+ }), /* @__PURE__ */ jsx(Input, {
472
+ id: "qualifier-item-value",
473
+ type: "number",
474
+ min: 1,
475
+ value: itemValue,
476
+ placeholder: typeSwitch.itemValuePlaceholder.value,
477
+ onChange: (e) => {
478
+ const value = parseInt(e.target.value, 10);
479
+ if (!Number.isNaN(value) && value >= 1) {
480
+ setItemValue(value);
481
+ setEditedDictionary({
482
+ ...dictionary,
483
+ ...updatedDictionary ?? {},
484
+ item: value
485
+ });
486
+ }
487
+ }
488
+ })]
489
+ })
490
+ }, "item-input"),
491
+ selectedTypes.includes("variant") && /* @__PURE__ */ jsx(motion.div, {
492
+ initial: {
493
+ opacity: 0,
494
+ height: 0
495
+ },
496
+ animate: {
497
+ opacity: 1,
498
+ height: "auto"
499
+ },
500
+ exit: {
501
+ opacity: 0,
502
+ height: 0
503
+ },
504
+ transition: { duration: .2 },
505
+ children: /* @__PURE__ */ jsxs("div", {
506
+ className: "flex flex-col gap-2 px-1",
507
+ children: [
508
+ /* @__PURE__ */ jsx("label", {
509
+ htmlFor: "qualifier-variant-value",
510
+ className: "ml-1 font-medium text-sm",
511
+ children: typeSwitch.variantValueLabel
512
+ }),
513
+ /* @__PURE__ */ jsx(Input, {
514
+ id: "qualifier-variant-value",
515
+ type: "text",
516
+ value: variantValue,
517
+ placeholder: typeSwitch.variantValuePlaceholder.value,
518
+ onChange: (e) => {
519
+ const value = e.target.value;
520
+ setVariantValue(value);
521
+ const { variant, error } = parseVariantInput(value);
522
+ setVariantJsonError(error);
523
+ if (!error) setEditedDictionary({
524
+ ...dictionary,
525
+ ...updatedDictionary ?? {},
526
+ variant
527
+ });
528
+ }
529
+ }),
530
+ variantJsonError && /* @__PURE__ */ jsx("p", {
531
+ className: "ml-1 text-destructive text-xs",
532
+ children: typeSwitch.variantJsonError
533
+ })
534
+ ]
535
+ })
536
+ }, "variant-input"),
537
+ selectedTypes.length === 0 && showSiblingPicker && /* @__PURE__ */ jsx(motion.div, {
538
+ initial: {
539
+ opacity: 0,
540
+ height: 0
541
+ },
542
+ animate: {
543
+ opacity: 1,
544
+ height: "auto"
545
+ },
546
+ exit: {
547
+ opacity: 0,
548
+ height: 0
549
+ },
550
+ transition: { duration: .2 },
551
+ children: /* @__PURE__ */ jsxs(Container, {
552
+ background: "none",
553
+ border: true,
554
+ borderColor: "neutral",
555
+ roundedSize: "xl",
556
+ padding: "md",
557
+ className: "gap-3",
558
+ children: [
559
+ /* @__PURE__ */ jsx("p", {
560
+ className: "font-medium text-sm",
561
+ children: typeSwitch.disablePickerTitle
562
+ }),
563
+ /* @__PURE__ */ jsx("p", {
564
+ className: "text-muted text-xs",
565
+ children: typeSwitch.disablePickerDescription
566
+ }),
567
+ /* @__PURE__ */ jsx("div", {
568
+ className: "flex flex-wrap gap-2",
569
+ children: allQualifiedSiblings.map((sibling) => /* @__PURE__ */ jsxs("button", {
570
+ type: "button",
571
+ onClick: () => {
572
+ onSelectSibling?.(sibling);
573
+ setShowSiblingPicker(false);
574
+ },
575
+ className: "cursor-pointer rounded-lg border border-border px-3 py-1 text-xs transition-colors hover:bg-text/10",
576
+ children: [sibling.variant !== void 0 && /* @__PURE__ */ jsxs("span", { children: [
577
+ qualifierSection.variant,
578
+ ":",
579
+ " ",
580
+ formatVariant(sibling.variant)
581
+ ] }), sibling.item !== void 0 && /* @__PURE__ */ jsxs("span", { children: [
582
+ qualifierSection.item,
583
+ ": ",
584
+ sibling.item
585
+ ] })]
586
+ }, sibling.localId))
587
+ })
588
+ ]
589
+ })
590
+ }, "sibling-picker")
591
+ ] })
592
+ ]
593
+ }),
594
+ /* @__PURE__ */ jsxs(Container, {
595
+ className: "gap-4",
596
+ padding: "md",
597
+ roundedSize: "2xl",
598
+ background: "none",
599
+ border: true,
600
+ borderColor: "neutral",
601
+ children: [/* @__PURE__ */ jsx("p", {
602
+ className: "font-semibold text-sm",
603
+ children: siblingContent.title
604
+ }), /* @__PURE__ */ jsxs(Loader, {
605
+ isLoading: isLoadingSiblings,
606
+ children: [
607
+ !hasSiblings && /* @__PURE__ */ jsx("p", {
608
+ className: "text-muted text-sm",
609
+ children: siblingContent.noSiblings
610
+ }),
611
+ allItemDicts.length > 0 && /* @__PURE__ */ jsxs("div", {
612
+ className: "flex flex-col gap-2",
613
+ children: [
614
+ /* @__PURE__ */ jsx("p", {
615
+ className: "font-medium text-muted text-xs uppercase tracking-wide",
616
+ children: siblingContent.collectionItems
617
+ }),
618
+ /* @__PURE__ */ jsx(Pagination, {
619
+ currentPage: allItemDicts.findIndex((dictionaryEl) => dictionaryEl.localId === dictionary.localId) + 1 || 1,
620
+ totalPages: allItemDicts.length,
621
+ onPageChange: (page) => {
622
+ const target = allItemDicts[page - 1];
623
+ if (target && onSelectSibling) onSelectSibling(target);
624
+ },
625
+ showPrevNext: true
626
+ }),
627
+ /* @__PURE__ */ jsx("div", {
628
+ className: "mt-1 flex flex-wrap gap-2",
629
+ children: allItemDicts.map((sibling) => {
630
+ const isActive = sibling.localId === dictionary.localId;
631
+ return /* @__PURE__ */ jsxs("button", {
632
+ type: "button",
633
+ onClick: () => !isActive && onSelectSibling?.(sibling),
634
+ className: cn("rounded-lg px-3 py-1 text-xs transition-colors", isActive ? "bg-text font-semibold text-text-opposite" : "cursor-pointer border border-border hover:bg-text/10"),
635
+ children: [
636
+ siblingContent.itemIndex,
637
+ " ",
638
+ sibling.item
639
+ ]
640
+ }, sibling.localId);
641
+ })
642
+ })
643
+ ]
644
+ }),
645
+ allVariantDicts.length > 0 && /* @__PURE__ */ jsxs("div", {
646
+ className: "flex flex-col gap-2",
647
+ children: [/* @__PURE__ */ jsx("p", {
648
+ className: "font-medium text-muted text-xs uppercase tracking-wide",
649
+ children: siblingContent.variants
650
+ }), /* @__PURE__ */ jsx("div", {
651
+ className: "flex flex-wrap gap-2",
652
+ children: allVariantDicts.map((sibling) => {
653
+ const isActive = sibling.localId === dictionary.localId;
654
+ return /* @__PURE__ */ jsx("button", {
655
+ type: "button",
656
+ onClick: () => !isActive && onSelectSibling?.(sibling),
657
+ className: cn("rounded-lg px-3 py-1 text-xs transition-colors", isActive ? "bg-text font-semibold text-text-opposite" : "cursor-pointer border border-border hover:bg-text/10"),
658
+ children: formatVariant(sibling.variant)
659
+ }, sibling.localId);
660
+ })
661
+ })]
662
+ })
663
+ ]
664
+ })]
665
+ }),
307
666
  /* @__PURE__ */ jsx("div", {
308
667
  className: "flex flex-wrap items-center justify-end gap-2 max-md:flex-col",
309
- children: /* @__PURE__ */ jsx(Form.Button, {
668
+ children: /* @__PURE__ */ jsx(Button, {
310
669
  type: "button",
311
670
  size: "icon-md",
312
671
  label: auditButton.label.value,