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

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 (249) 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/index.mjs +6 -5
  6. package/dist/esm/api/useIntlayerAPI.mjs +6 -1
  7. package/dist/esm/api/useIntlayerAPI.mjs.map +1 -1
  8. package/dist/esm/components/Command/index.mjs +8 -8
  9. package/dist/esm/components/Command/index.mjs.map +1 -1
  10. package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs +1 -1
  11. package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs +132 -35
  12. package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs.map +1 -1
  13. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs +33 -11
  14. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
  15. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs +146 -35
  16. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs.map +1 -1
  17. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.mjs +308 -0
  18. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.mjs.map +1 -1
  19. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.mjs +12 -2
  20. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.mjs.map +1 -1
  21. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs +460 -20
  22. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
  23. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.mjs +506 -0
  24. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.mjs.map +1 -1
  25. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +10 -6
  26. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
  27. package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs +1 -1
  28. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +9 -9
  29. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
  30. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs +2 -2
  31. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
  32. package/dist/esm/components/DictionaryFieldEditor/contentEditor.content.mjs +79 -0
  33. package/dist/esm/components/DictionaryFieldEditor/contentEditor.content.mjs.map +1 -0
  34. package/dist/esm/components/Form/Form.mjs +3 -43
  35. package/dist/esm/components/Form/Form.mjs.map +1 -1
  36. package/dist/esm/components/Form/elements/FormElement.mjs +2 -3
  37. package/dist/esm/components/Form/elements/FormElement.mjs.map +1 -1
  38. package/dist/esm/components/Form/elements/MultiselectElement.mjs +2 -3
  39. package/dist/esm/components/Form/elements/MultiselectElement.mjs.map +1 -1
  40. package/dist/esm/components/Form/elements/OTPElement.mjs +3 -4
  41. package/dist/esm/components/Form/elements/OTPElement.mjs.map +1 -1
  42. package/dist/esm/components/Form/elements/SelectElement.mjs +2 -3
  43. package/dist/esm/components/Form/elements/SelectElement.mjs.map +1 -1
  44. package/dist/esm/components/Form/elements/SwitchSelectorElement.mjs +2 -3
  45. package/dist/esm/components/Form/elements/SwitchSelectorElement.mjs.map +1 -1
  46. package/dist/esm/components/Form/index.mjs +21 -2
  47. package/dist/esm/components/Form/layout/FormItemLayout.mjs +8 -5
  48. package/dist/esm/components/Form/layout/FormItemLayout.mjs.map +1 -1
  49. package/dist/esm/components/LanguageBackground/LanguageBackground.mjs +3 -8
  50. package/dist/esm/components/LanguageBackground/LanguageBackground.mjs.map +1 -1
  51. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs +1 -1
  52. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs +1 -1
  53. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
  54. package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs +113 -0
  55. package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs.map +1 -0
  56. package/dist/esm/components/MarkdownEditor/extensions.mjs +103 -0
  57. package/dist/esm/components/MarkdownEditor/extensions.mjs.map +1 -0
  58. package/dist/esm/components/MarkdownEditor/generative/AICompletionCommands.mjs +51 -0
  59. package/dist/esm/components/MarkdownEditor/generative/AICompletionCommands.mjs.map +1 -0
  60. package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs +100 -0
  61. package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs.map +1 -0
  62. package/dist/esm/components/MarkdownEditor/generative/AISelectorCommands.mjs +81 -0
  63. package/dist/esm/components/MarkdownEditor/generative/AISelectorCommands.mjs.map +1 -0
  64. package/dist/esm/components/MarkdownEditor/generative/GenerativeMenuSwitch.mjs +47 -0
  65. package/dist/esm/components/MarkdownEditor/generative/GenerativeMenuSwitch.mjs.map +1 -0
  66. package/dist/esm/components/MarkdownEditor/generative/useAICompletion.mjs +83 -0
  67. package/dist/esm/components/MarkdownEditor/generative/useAICompletion.mjs.map +1 -0
  68. package/dist/esm/components/MarkdownEditor/imageUpload.mjs +47 -0
  69. package/dist/esm/components/MarkdownEditor/imageUpload.mjs.map +1 -0
  70. package/dist/esm/components/MarkdownEditor/index.mjs +4 -0
  71. package/dist/esm/components/MarkdownEditor/markdownEditor.content.mjs +1140 -0
  72. package/dist/esm/components/MarkdownEditor/markdownEditor.content.mjs.map +1 -0
  73. package/dist/esm/components/MarkdownEditor/novel/components/editor-bubble-item.mjs +20 -0
  74. package/dist/esm/components/MarkdownEditor/novel/components/editor-bubble-item.mjs.map +1 -0
  75. package/dist/esm/components/MarkdownEditor/novel/components/editor-bubble.mjs +39 -0
  76. package/dist/esm/components/MarkdownEditor/novel/components/editor-bubble.mjs.map +1 -0
  77. package/dist/esm/components/MarkdownEditor/novel/components/editor-command-item.mjs +25 -0
  78. package/dist/esm/components/MarkdownEditor/novel/components/editor-command-item.mjs.map +1 -0
  79. package/dist/esm/components/MarkdownEditor/novel/components/editor-command.mjs +61 -0
  80. package/dist/esm/components/MarkdownEditor/novel/components/editor-command.mjs.map +1 -0
  81. package/dist/esm/components/MarkdownEditor/novel/components/editor.mjs +27 -0
  82. package/dist/esm/components/MarkdownEditor/novel/components/editor.mjs.map +1 -0
  83. package/dist/esm/components/MarkdownEditor/novel/components/index.mjs +8 -0
  84. package/dist/esm/components/MarkdownEditor/novel/extensions/ai-highlight.mjs +74 -0
  85. package/dist/esm/components/MarkdownEditor/novel/extensions/ai-highlight.mjs.map +1 -0
  86. package/dist/esm/components/MarkdownEditor/novel/extensions/custom-keymap.mjs +37 -0
  87. package/dist/esm/components/MarkdownEditor/novel/extensions/custom-keymap.mjs.map +1 -0
  88. package/dist/esm/components/MarkdownEditor/novel/extensions/image-resizer.mjs +49 -0
  89. package/dist/esm/components/MarkdownEditor/novel/extensions/image-resizer.mjs.map +1 -0
  90. package/dist/esm/components/MarkdownEditor/novel/extensions/index.mjs +51 -0
  91. package/dist/esm/components/MarkdownEditor/novel/extensions/index.mjs.map +1 -0
  92. package/dist/esm/components/MarkdownEditor/novel/extensions/slash-command.mjs +79 -0
  93. package/dist/esm/components/MarkdownEditor/novel/extensions/slash-command.mjs.map +1 -0
  94. package/dist/esm/components/MarkdownEditor/novel/extensions/updated-image.mjs +17 -0
  95. package/dist/esm/components/MarkdownEditor/novel/extensions/updated-image.mjs.map +1 -0
  96. package/dist/esm/components/MarkdownEditor/novel/index.mjs +17 -0
  97. package/dist/esm/components/MarkdownEditor/novel/plugins/index.mjs +3 -0
  98. package/dist/esm/components/MarkdownEditor/novel/plugins/upload-images.mjs +92 -0
  99. package/dist/esm/components/MarkdownEditor/novel/plugins/upload-images.mjs.map +1 -0
  100. package/dist/esm/components/MarkdownEditor/novel/utils/atoms.mjs +39 -0
  101. package/dist/esm/components/MarkdownEditor/novel/utils/atoms.mjs.map +1 -0
  102. package/dist/esm/components/MarkdownEditor/novel/utils/index.mjs +38 -0
  103. package/dist/esm/components/MarkdownEditor/novel/utils/index.mjs.map +1 -0
  104. package/dist/esm/components/MarkdownEditor/selectors/ColorSelector.mjs +176 -0
  105. package/dist/esm/components/MarkdownEditor/selectors/ColorSelector.mjs.map +1 -0
  106. package/dist/esm/components/MarkdownEditor/selectors/LinkSelector.mjs +95 -0
  107. package/dist/esm/components/MarkdownEditor/selectors/LinkSelector.mjs.map +1 -0
  108. package/dist/esm/components/MarkdownEditor/selectors/NodeSelector.mjs +139 -0
  109. package/dist/esm/components/MarkdownEditor/selectors/NodeSelector.mjs.map +1 -0
  110. package/dist/esm/components/MarkdownEditor/selectors/TextButtons.mjs +81 -0
  111. package/dist/esm/components/MarkdownEditor/selectors/TextButtons.mjs.map +1 -0
  112. package/dist/esm/components/MarkdownEditor/slashCommand.mjs +161 -0
  113. package/dist/esm/components/MarkdownEditor/slashCommand.mjs.map +1 -0
  114. package/dist/esm/components/Modal/Modal.mjs +2 -2
  115. package/dist/esm/components/Navbar/MobileNavbar.mjs +1 -1
  116. package/dist/esm/components/Pagination/Pagination.mjs +1 -1
  117. package/dist/esm/components/Pattern/GridDistortionPattern.mjs +275 -0
  118. package/dist/esm/components/Pattern/GridDistortionPattern.mjs.map +1 -0
  119. package/dist/esm/components/Pattern/index.mjs +2 -1
  120. package/dist/esm/components/RightDrawer/RightDrawer.mjs +3 -3
  121. package/dist/esm/components/Tab/Tab.mjs +1 -1
  122. package/dist/esm/components/Table/Table.mjs +1 -1
  123. package/dist/esm/components/Table/Table.mjs.map +1 -1
  124. package/dist/esm/components/Tag/index.mjs +0 -9
  125. package/dist/esm/components/Tag/index.mjs.map +1 -1
  126. package/dist/esm/components/Toaster/Toast.mjs +1 -1
  127. package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
  128. package/dist/esm/components/index.mjs +27 -6
  129. package/dist/esm/hooks/index.mjs +8 -8
  130. package/dist/esm/hooks/useIsMounted.mjs +4 -2
  131. package/dist/esm/hooks/useIsMounted.mjs.map +1 -1
  132. package/dist/esm/routes.mjs +2 -1
  133. package/dist/esm/routes.mjs.map +1 -1
  134. package/dist/types/api/hooks/ai.d.ts +5 -1
  135. package/dist/types/api/hooks/ai.d.ts.map +1 -1
  136. package/dist/types/api/hooks/asset.d.ts +27 -0
  137. package/dist/types/api/hooks/asset.d.ts.map +1 -0
  138. package/dist/types/api/hooks/audit.d.ts +1 -1
  139. package/dist/types/api/index.d.ts +4 -3
  140. package/dist/types/api/useIntlayerAPI.d.ts +15 -3
  141. package/dist/types/api/useIntlayerAPI.d.ts.map +1 -1
  142. package/dist/types/components/Badge/index.d.ts +1 -1
  143. package/dist/types/components/Breadcrumb/index.d.ts +1 -1
  144. package/dist/types/components/Button/Button.d.ts +3 -3
  145. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +2 -2
  146. package/dist/types/components/Command/index.d.ts.map +1 -1
  147. package/dist/types/components/Container/index.d.ts +1 -1
  148. package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts.map +1 -1
  149. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts.map +1 -1
  150. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.d.ts.map +1 -1
  151. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts +308 -0
  152. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts.map +1 -1
  153. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.d.ts +12 -1
  154. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.d.ts.map +1 -1
  155. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.d.ts +2 -0
  156. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.d.ts.map +1 -1
  157. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts +506 -0
  158. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts.map +1 -1
  159. package/dist/types/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts +2 -1
  160. package/dist/types/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts.map +1 -1
  161. package/dist/types/components/DictionaryFieldEditor/contentEditor.content.d.ts +80 -0
  162. package/dist/types/components/DictionaryFieldEditor/contentEditor.content.d.ts.map +1 -0
  163. package/dist/types/components/Form/Form.d.ts +27 -47
  164. package/dist/types/components/Form/Form.d.ts.map +1 -1
  165. package/dist/types/components/Form/elements/FormElement.d.ts.map +1 -1
  166. package/dist/types/components/Form/elements/MultiselectElement.d.ts.map +1 -1
  167. package/dist/types/components/Form/elements/OTPElement.d.ts.map +1 -1
  168. package/dist/types/components/Form/elements/SelectElement.d.ts.map +1 -1
  169. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts.map +1 -1
  170. package/dist/types/components/Form/index.d.ts +22 -3
  171. package/dist/types/components/Form/layout/FormItemLayout.d.ts.map +1 -1
  172. package/dist/types/components/Input/Checkbox.d.ts +3 -3
  173. package/dist/types/components/Input/Input.d.ts +1 -1
  174. package/dist/types/components/Input/Radio.d.ts +3 -3
  175. package/dist/types/components/LanguageBackground/LanguageBackground.d.ts.map +1 -1
  176. package/dist/types/components/Link/Link.d.ts +1 -1
  177. package/dist/types/components/MarkdownEditor/MarkdownEditor.d.ts +31 -0
  178. package/dist/types/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -0
  179. package/dist/types/components/MarkdownEditor/extensions.d.ts +11 -0
  180. package/dist/types/components/MarkdownEditor/extensions.d.ts.map +1 -0
  181. package/dist/types/components/MarkdownEditor/generative/AICompletionCommands.d.ts +18 -0
  182. package/dist/types/components/MarkdownEditor/generative/AICompletionCommands.d.ts.map +1 -0
  183. package/dist/types/components/MarkdownEditor/generative/AISelector.d.ts +22 -0
  184. package/dist/types/components/MarkdownEditor/generative/AISelector.d.ts.map +1 -0
  185. package/dist/types/components/MarkdownEditor/generative/AISelectorCommands.d.ts +17 -0
  186. package/dist/types/components/MarkdownEditor/generative/AISelectorCommands.d.ts.map +1 -0
  187. package/dist/types/components/MarkdownEditor/generative/GenerativeMenuSwitch.d.ts +26 -0
  188. package/dist/types/components/MarkdownEditor/generative/GenerativeMenuSwitch.d.ts.map +1 -0
  189. package/dist/types/components/MarkdownEditor/generative/useAICompletion.d.ts +30 -0
  190. package/dist/types/components/MarkdownEditor/generative/useAICompletion.d.ts.map +1 -0
  191. package/dist/types/components/MarkdownEditor/imageUpload.d.ts +29 -0
  192. package/dist/types/components/MarkdownEditor/imageUpload.d.ts.map +1 -0
  193. package/dist/types/components/MarkdownEditor/index.d.ts +3 -0
  194. package/dist/types/components/MarkdownEditor/markdownEditor.content.d.ts +1135 -0
  195. package/dist/types/components/MarkdownEditor/markdownEditor.content.d.ts.map +1 -0
  196. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble-item.d.ts +14 -0
  197. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble-item.d.ts.map +1 -0
  198. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble.d.ts +18 -0
  199. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble.d.ts.map +1 -0
  200. package/dist/types/components/MarkdownEditor/novel/components/editor-command-item.d.ts +28 -0
  201. package/dist/types/components/MarkdownEditor/novel/components/editor-command-item.d.ts.map +1 -0
  202. package/dist/types/components/MarkdownEditor/novel/components/editor-command.d.ts +34 -0
  203. package/dist/types/components/MarkdownEditor/novel/components/editor-command.d.ts.map +1 -0
  204. package/dist/types/components/MarkdownEditor/novel/components/editor.d.ts +23 -0
  205. package/dist/types/components/MarkdownEditor/novel/components/editor.d.ts.map +1 -0
  206. package/dist/types/components/MarkdownEditor/novel/components/index.d.ts +8 -0
  207. package/dist/types/components/MarkdownEditor/novel/extensions/ai-highlight.d.ts +36 -0
  208. package/dist/types/components/MarkdownEditor/novel/extensions/ai-highlight.d.ts.map +1 -0
  209. package/dist/types/components/MarkdownEditor/novel/extensions/custom-keymap.d.ts +17 -0
  210. package/dist/types/components/MarkdownEditor/novel/extensions/custom-keymap.d.ts.map +1 -0
  211. package/dist/types/components/MarkdownEditor/novel/extensions/image-resizer.d.ts +7 -0
  212. package/dist/types/components/MarkdownEditor/novel/extensions/image-resizer.d.ts.map +1 -0
  213. package/dist/types/components/MarkdownEditor/novel/extensions/index.d.ts +30 -0
  214. package/dist/types/components/MarkdownEditor/novel/extensions/index.d.ts.map +1 -0
  215. package/dist/types/components/MarkdownEditor/novel/extensions/slash-command.d.ts +38 -0
  216. package/dist/types/components/MarkdownEditor/novel/extensions/slash-command.d.ts.map +1 -0
  217. package/dist/types/components/MarkdownEditor/novel/extensions/updated-image.d.ts +8 -0
  218. package/dist/types/components/MarkdownEditor/novel/extensions/updated-image.d.ts.map +1 -0
  219. package/dist/types/components/MarkdownEditor/novel/index.d.ts +16 -0
  220. package/dist/types/components/MarkdownEditor/novel/plugins/index.d.ts +2 -0
  221. package/dist/types/components/MarkdownEditor/novel/plugins/upload-images.d.ts +22 -0
  222. package/dist/types/components/MarkdownEditor/novel/plugins/upload-images.d.ts.map +1 -0
  223. package/dist/types/components/MarkdownEditor/novel/utils/atoms.d.ts +21 -0
  224. package/dist/types/components/MarkdownEditor/novel/utils/atoms.d.ts.map +1 -0
  225. package/dist/types/components/MarkdownEditor/novel/utils/index.d.ts +10 -0
  226. package/dist/types/components/MarkdownEditor/novel/utils/index.d.ts.map +1 -0
  227. package/dist/types/components/MarkdownEditor/selectors/ColorSelector.d.ts +17 -0
  228. package/dist/types/components/MarkdownEditor/selectors/ColorSelector.d.ts.map +1 -0
  229. package/dist/types/components/MarkdownEditor/selectors/LinkSelector.d.ts +15 -0
  230. package/dist/types/components/MarkdownEditor/selectors/LinkSelector.d.ts.map +1 -0
  231. package/dist/types/components/MarkdownEditor/selectors/NodeSelector.d.ts +22 -0
  232. package/dist/types/components/MarkdownEditor/selectors/NodeSelector.d.ts.map +1 -0
  233. package/dist/types/components/MarkdownEditor/selectors/TextButtons.d.ts +11 -0
  234. package/dist/types/components/MarkdownEditor/selectors/TextButtons.d.ts.map +1 -0
  235. package/dist/types/components/MarkdownEditor/slashCommand.d.ts +29 -0
  236. package/dist/types/components/MarkdownEditor/slashCommand.d.ts.map +1 -0
  237. package/dist/types/components/Pattern/GridDistortionPattern.d.ts +15 -0
  238. package/dist/types/components/Pattern/GridDistortionPattern.d.ts.map +1 -0
  239. package/dist/types/components/Pattern/index.d.ts +2 -1
  240. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts +1 -1
  241. package/dist/types/components/SwitchSelector/VerticalSwitchSelector.d.ts +1 -1
  242. package/dist/types/components/Tag/index.d.ts +2 -2
  243. package/dist/types/components/Tag/index.d.ts.map +1 -1
  244. package/dist/types/components/Toaster/Toast.d.ts +1 -1
  245. package/dist/types/components/index.d.ts +24 -3
  246. package/dist/types/routes.d.ts +2 -1
  247. package/dist/types/routes.d.ts.map +1 -1
  248. package/package.json +63 -32
  249. package/src/components/MarkdownEditor/markdown-editor.css +297 -0
@@ -1 +1 @@
1
- {"version":3,"file":"StructureView.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/StructureView/StructureView.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@components/Button';\nimport { Container } from '@components/Container';\nimport { EditableFieldInput } from '@components/EditableField';\nimport { camelCaseToSentence } from '@intlayer/config/client';\nimport {\n getDefaultNode,\n getNodeChildren,\n getNodeType,\n} from '@intlayer/core/dictionaryManipulator';\nimport { isSameKeyPath } from '@intlayer/core/utils';\nimport {\n useConfiguration,\n useEditedContentActions,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport type { LocalDictionaryId, TypedNode } from '@intlayer/types/dictionary';\nimport type { KeyPath } from '@intlayer/types/keyPath';\nimport * as NodeTypes from '@intlayer/types/nodeType';\nimport type { ContentNode } from 'intlayer';\nimport { Plus, Trash } from 'lucide-react';\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { NodeTypeSelector } from '../NodeTypeSelector';\n\ntype NodeTypeViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n onNodeTypeChange: (content?: ContentNode) => void;\n};\n\nconst NodeTypeView: FC<NodeTypeViewProps> = ({\n section,\n dictionaryLocalId,\n keyPath,\n onNodeTypeChange: onNodeTypeChangeProp,\n}) => {\n const locales = useConfiguration()?.internationalization?.locales ?? [];\n const nodeType = getNodeType(section);\n const children = getNodeChildren(section);\n\n const onNodeTypeChange = (content?: ContentNode) => {\n const transformedContent = getDefaultNode(\n nodeType,\n locales,\n content\n ) as ContentNode;\n\n onNodeTypeChangeProp(transformedContent);\n };\n\n if (\n nodeType === NodeTypes.TRANSLATION ||\n nodeType === NodeTypes.CONDITION ||\n nodeType === NodeTypes.GENDER ||\n nodeType === NodeTypes.ENUMERATION ||\n nodeType === NodeTypes.PLURAL\n ) {\n const firstKey = Object.keys(\n (section as unknown as TypedNode)[nodeType as keyof typeof section]\n )[0];\n const childrenKeyPath = [\n ...keyPath,\n { type: nodeType, key: firstKey },\n ] as KeyPath[];\n\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n\n <NodeTypeView\n section={children}\n keyPath={childrenKeyPath}\n dictionaryLocalId={dictionaryLocalId}\n onNodeTypeChange={onNodeTypeChange}\n />\n </div>\n );\n }\n\n if (nodeType === NodeTypes.ARRAY) {\n const childrenKeyPath = [...keyPath, { type: nodeType, key: 0 } as KeyPath];\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n\n <NodeTypeView\n section={children}\n keyPath={childrenKeyPath}\n dictionaryLocalId={dictionaryLocalId}\n onNodeTypeChange={onNodeTypeChange}\n />\n </div>\n );\n }\n\n if (nodeType === NodeTypes.OBJECT) {\n return (\n <>\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n <div className=\"mt-6 ml-10\">\n <StructureView\n keyPath={keyPath}\n section={section}\n dictionaryLocalId={dictionaryLocalId}\n />\n </div>\n </>\n );\n }\n\n return (\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(getDefaultNode(nodeType, locales) as ContentNode)\n }\n />\n );\n};\n\ntype NodeWrapperProps = {\n sectionKey?: string;\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const NodeView: FC<NodeWrapperProps> = ({\n sectionKey,\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n const { focusedContent, setFocusedContentKeyPath } =\n useFocusUnmergedDictionary();\n const { renameEditedContent, addEditedContent } = useEditedContentActions();\n\n const { titleInput, deleteButton } = useIntlayer('structure-view');\n\n const handleRenameNodeKey = (keyName: string) => {\n renameEditedContent(dictionaryLocalId, keyName, keyPath);\n const prevKeyPath: KeyPath[] = keyPath.slice(0, -1);\n const lastKeyPath: KeyPath = keyPath[keyPath.length - 1];\n const newKeyPath: KeyPath[] = [\n ...prevKeyPath,\n { ...lastKeyPath, key: keyName } as KeyPath,\n ];\n setFocusedContentKeyPath(newKeyPath);\n };\n\n return (\n <Container\n transparency=\"xl\"\n roundedSize=\"xl\"\n className=\"w-full min-w-80 gap-2 overflow-auto px-5 py-2\"\n border\n borderColor=\"text\"\n background=\"none\"\n aria-selected={isSameKeyPath(keyPath, focusedContent?.keyPath ?? [])}\n onClick={() => setFocusedContentKeyPath(keyPath)}\n >\n <div className=\"flex w-full flex-col items-start justify-between gap-3\">\n {typeof sectionKey === 'string' && (\n <div className=\"w-full\">\n <div className=\"flex w-full items-center justify-between gap-10\">\n <EditableFieldInput\n name=\"key\"\n aria-label=\"Key\"\n placeholder={titleInput.placeholder.value}\n defaultValue={sectionKey}\n onSave={(value) => handleRenameNodeKey(value)}\n variant=\"invisible\"\n />\n <Button\n label={deleteButton.label.value}\n variant=\"hoverable\"\n size=\"icon-sm\"\n color=\"text\"\n className=\"translate-x-2\"\n Icon={Trash}\n onClick={() => {\n addEditedContent(dictionaryLocalId, undefined, keyPath);\n\n const parentKeyPath: KeyPath[] = keyPath.slice(0, -1);\n setFocusedContentKeyPath(parentKeyPath);\n }}\n />\n </div>\n\n <span className=\"ml-3 text-neutral text-sm\">\n ( {camelCaseToSentence(sectionKey)} )\n </span>\n </div>\n )}\n <NodeTypeView\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n section={section}\n onNodeTypeChange={(content) => {\n addEditedContent(dictionaryLocalId, content, keyPath);\n }}\n />\n </div>\n </Container>\n );\n};\n\ntype ObjectViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const ObjectView: FC<ObjectViewProps> = ({\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n const { addNodeButton } = useIntlayer('structure-view');\n const { setFocusedContentKeyPath } = useFocusUnmergedDictionary();\n const { addEditedContent } = useEditedContentActions();\n\n if (!section || typeof section !== 'object') {\n return <div>Not an object</div>;\n }\n\n return (\n <div className=\"flex flex-col gap-2 overflow-y-auto\">\n <ul className=\"mr-auto flex flex-col gap-4\">\n {Object.keys(section).map((key) => (\n <li\n key={`${JSON.stringify(keyPath)}-object-${key}`}\n className=\"flex w-full\"\n >\n <NodeView\n sectionKey={key}\n section={section?.[key as keyof typeof section]}\n keyPath={[...keyPath, { type: NodeTypes.OBJECT, key }]}\n dictionaryLocalId={dictionaryLocalId}\n />\n </li>\n ))}\n </ul>\n <Button\n label={addNodeButton.label.value}\n variant=\"hoverable\"\n size=\"md\"\n color=\"text\"\n Icon={Plus}\n className=\"flex-1\"\n onClick={() => {\n const newKey = 'newKey';\n const newKeyPath = [\n ...keyPath,\n { type: NodeTypes.OBJECT, key: newKey },\n ] as KeyPath[];\n addEditedContent(dictionaryLocalId, '', newKeyPath);\n setFocusedContentKeyPath(newKeyPath);\n }}\n >\n {addNodeButton.text}\n </Button>\n </div>\n );\n};\n\ntype StructureViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const StructureView: FC<StructureViewProps> = ({\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n if (\n !section ||\n typeof section !== 'object' ||\n typeof section.nodeType === 'string'\n ) {\n return (\n <NodeView\n sectionKey=\"content\"\n section={section}\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n />\n );\n }\n\n return (\n <ObjectView\n section={section}\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n />\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"StructureView.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/StructureView/StructureView.tsx"],"sourcesContent":["'use client';\n\nimport { Button } from '@components/Button';\nimport { Container } from '@components/Container';\nimport { EditableFieldInput } from '@components/EditableField';\nimport { camelCaseToSentence } from '@intlayer/config/client';\nimport {\n getDefaultNode,\n getNodeChildren,\n getNodeType,\n} from '@intlayer/core/dictionaryManipulator';\nimport { isSameKeyPath } from '@intlayer/core/utils';\nimport {\n useConfiguration,\n useEditedContentActions,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport type { LocalDictionaryId, TypedNode } from '@intlayer/types/dictionary';\nimport type { KeyPath } from '@intlayer/types/keyPath';\nimport * as NodeTypes from '@intlayer/types/nodeType';\nimport type { ContentNode } from 'intlayer';\nimport { Plus, Trash } from 'lucide-react';\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { NodeTypeSelector } from '../NodeTypeSelector';\n\ntype NodeTypeViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n onNodeTypeChange: (content?: ContentNode) => void;\n};\n\nconst NodeTypeView: FC<NodeTypeViewProps> = ({\n section,\n dictionaryLocalId,\n keyPath,\n onNodeTypeChange: onNodeTypeChangeProp,\n}) => {\n const locales = useConfiguration()?.internationalization?.locales ?? [];\n const nodeType = getNodeType(section);\n const children = getNodeChildren(section);\n\n const onNodeTypeChange = (content?: ContentNode) => {\n const transformedContent = getDefaultNode(\n nodeType,\n locales,\n content\n ) as ContentNode;\n\n onNodeTypeChangeProp(transformedContent);\n };\n\n if (\n nodeType === NodeTypes.TRANSLATION ||\n nodeType === NodeTypes.CONDITION ||\n nodeType === NodeTypes.GENDER ||\n nodeType === NodeTypes.ENUMERATION ||\n nodeType === NodeTypes.PLURAL\n ) {\n const firstKey = Object.keys(\n (section as unknown as TypedNode)[nodeType as keyof typeof section]\n )[0];\n const childrenKeyPath = [\n ...keyPath,\n { type: nodeType, key: firstKey },\n ] as KeyPath[];\n\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n\n <NodeTypeView\n section={children}\n keyPath={childrenKeyPath}\n dictionaryLocalId={dictionaryLocalId}\n onNodeTypeChange={onNodeTypeChange}\n />\n </div>\n );\n }\n\n if (nodeType === NodeTypes.ARRAY) {\n const childrenKeyPath = [...keyPath, { type: nodeType, key: 0 } as KeyPath];\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n\n <NodeTypeView\n section={children}\n keyPath={childrenKeyPath}\n dictionaryLocalId={dictionaryLocalId}\n onNodeTypeChange={onNodeTypeChange}\n />\n </div>\n );\n }\n\n if (nodeType === NodeTypes.OBJECT) {\n return (\n <>\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n <div className=\"mt-6 ml-10\">\n <StructureView\n keyPath={keyPath}\n section={section}\n dictionaryLocalId={dictionaryLocalId}\n />\n </div>\n </>\n );\n }\n\n return (\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(getDefaultNode(nodeType, locales) as ContentNode)\n }\n />\n );\n};\n\ntype NodeWrapperProps = {\n sectionKey?: string;\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const NodeView: FC<NodeWrapperProps> = ({\n sectionKey,\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n const { focusedContent, setFocusedContentKeyPath } =\n useFocusUnmergedDictionary();\n const { renameEditedContent, addEditedContent } = useEditedContentActions();\n\n const { titleInput, deleteButton } = useIntlayer('structure-view');\n\n const handleRenameNodeKey = (keyName: string) => {\n renameEditedContent(dictionaryLocalId, keyName, keyPath);\n const prevKeyPath: KeyPath[] = keyPath.slice(0, -1);\n const lastKeyPath: KeyPath = keyPath[keyPath.length - 1]!;\n const newKeyPath: KeyPath[] = [\n ...prevKeyPath,\n { ...lastKeyPath, key: keyName } as KeyPath,\n ];\n setFocusedContentKeyPath(newKeyPath);\n };\n\n return (\n <Container\n transparency=\"xl\"\n roundedSize=\"2xl\"\n className=\"w-full min-w-80 gap-2 overflow-auto px-5 py-2\"\n border\n borderColor=\"text\"\n background=\"none\"\n aria-selected={isSameKeyPath(keyPath, focusedContent?.keyPath ?? [])}\n onClick={() => setFocusedContentKeyPath(keyPath)}\n >\n <div className=\"flex w-full flex-col items-start justify-between gap-3\">\n {typeof sectionKey === 'string' && (\n <div className=\"w-full\">\n <div className=\"flex w-full items-center justify-between gap-10\">\n <EditableFieldInput\n name=\"key\"\n aria-label=\"Key\"\n placeholder={titleInput.placeholder.value}\n defaultValue={sectionKey}\n onSave={(value) => handleRenameNodeKey(value)}\n variant=\"invisible\"\n />\n <Button\n label={deleteButton.label.value}\n variant=\"hoverable\"\n size=\"icon-sm\"\n color=\"text\"\n className=\"translate-x-2\"\n Icon={Trash}\n onClick={() => {\n addEditedContent(dictionaryLocalId, undefined, keyPath);\n\n const parentKeyPath: KeyPath[] = keyPath.slice(0, -1);\n setFocusedContentKeyPath(parentKeyPath);\n }}\n />\n </div>\n\n <span className=\"ml-3 text-neutral text-sm\">\n ( {camelCaseToSentence(sectionKey)} )\n </span>\n </div>\n )}\n <NodeTypeView\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n section={section}\n onNodeTypeChange={(content) => {\n addEditedContent(dictionaryLocalId, content, keyPath);\n }}\n />\n </div>\n </Container>\n );\n};\n\ntype ObjectViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const ObjectView: FC<ObjectViewProps> = ({\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n const { addNodeButton } = useIntlayer('structure-view');\n const { setFocusedContentKeyPath } = useFocusUnmergedDictionary();\n const { addEditedContent } = useEditedContentActions();\n\n if (!section || typeof section !== 'object') {\n return <div>Not an object</div>;\n }\n\n return (\n <div className=\"flex flex-col gap-2 overflow-y-auto\">\n <ul className=\"mr-auto flex flex-col gap-4\">\n {Object.keys(section).map((key) => (\n <li\n key={`${JSON.stringify(keyPath)}-object-${key}`}\n className=\"flex w-full\"\n >\n <NodeView\n sectionKey={key}\n section={section?.[key as keyof typeof section]}\n keyPath={[...keyPath, { type: NodeTypes.OBJECT, key }]}\n dictionaryLocalId={dictionaryLocalId}\n />\n </li>\n ))}\n </ul>\n <Button\n label={addNodeButton.label.value}\n variant=\"hoverable\"\n size=\"md\"\n color=\"text\"\n Icon={Plus}\n className=\"flex-1\"\n onClick={() => {\n const newKey = 'newKey';\n const newKeyPath = [\n ...keyPath,\n { type: NodeTypes.OBJECT, key: newKey },\n ] as KeyPath[];\n addEditedContent(dictionaryLocalId, '', newKeyPath);\n setFocusedContentKeyPath(newKeyPath);\n }}\n >\n {addNodeButton.text}\n </Button>\n </div>\n );\n};\n\ntype StructureViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const StructureView: FC<StructureViewProps> = ({\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n if (\n !section ||\n typeof section !== 'object' ||\n typeof section.nodeType === 'string'\n ) {\n return (\n <NodeView\n sectionKey=\"content\"\n section={section}\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n />\n );\n }\n\n return (\n <ObjectView\n section={section}\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n />\n );\n};\n"],"mappings":"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"}
@@ -0,0 +1,79 @@
1
+ import { t } from "intlayer";
2
+
3
+ //#region src/components/DictionaryFieldEditor/contentEditor.content.ts
4
+ const contentEditorContent = {
5
+ key: "content-editor",
6
+ content: {
7
+ itemPagination: { label: t({
8
+ en: "Item",
9
+ "en-GB": "Item",
10
+ fr: "Élément",
11
+ es: "Elemento",
12
+ de: "Element",
13
+ ja: "項目",
14
+ ko: "항목",
15
+ zh: "项目",
16
+ it: "Elemento",
17
+ pt: "Item",
18
+ hi: "आइटम",
19
+ ar: "عنصر",
20
+ ru: "Элемент",
21
+ tr: "Öğe",
22
+ pl: "Element",
23
+ id: "Item",
24
+ vi: "Mục",
25
+ uk: "Елемент"
26
+ }) },
27
+ variantSwitcher: { label: t({
28
+ en: "Variant",
29
+ "en-GB": "Variant",
30
+ fr: "Variante",
31
+ es: "Variante",
32
+ de: "Variante",
33
+ ja: "バリアント",
34
+ ko: "변형",
35
+ zh: "变体",
36
+ it: "Variante",
37
+ pt: "Variante",
38
+ hi: "वेरिएंट",
39
+ ar: "نوع",
40
+ ru: "Вариант",
41
+ tr: "Varyant",
42
+ pl: "Wariant",
43
+ id: "Varian",
44
+ vi: "Biến thể",
45
+ uk: "Варіант"
46
+ }) },
47
+ metaSwitcher: { label: t({
48
+ en: "Meta",
49
+ "en-GB": "Meta",
50
+ fr: "Méta",
51
+ es: "Meta",
52
+ de: "Meta",
53
+ ja: "メタ",
54
+ ko: "메타",
55
+ zh: "元",
56
+ it: "Meta",
57
+ pt: "Meta",
58
+ hi: "मेटा",
59
+ ar: "بيانات وصفية",
60
+ ru: "Мета",
61
+ tr: "Meta",
62
+ pl: "Meta",
63
+ id: "Meta",
64
+ vi: "Meta",
65
+ uk: "Мета"
66
+ }) }
67
+ },
68
+ title: "Content editor",
69
+ description: "Labels and controls for the dictionary content editor, including item pagination, variant switcher, and meta switcher used to navigate between sibling dictionaries sharing the same key.",
70
+ tags: [
71
+ "content editor",
72
+ "dictionary",
73
+ "navigation"
74
+ ]
75
+ };
76
+
77
+ //#endregion
78
+ export { contentEditorContent as default };
79
+ //# sourceMappingURL=contentEditor.content.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contentEditor.content.mjs","names":[],"sources":["../../../../src/components/DictionaryFieldEditor/contentEditor.content.ts"],"sourcesContent":["import { type Dictionary, t } from 'intlayer';\n\nconst contentEditorContent = {\n key: 'content-editor',\n content: {\n itemPagination: {\n label: t({\n en: 'Item',\n 'en-GB': 'Item',\n fr: 'Élément',\n es: 'Elemento',\n de: 'Element',\n ja: '項目',\n ko: '항목',\n zh: '项目',\n it: 'Elemento',\n pt: 'Item',\n hi: 'आइटम',\n ar: 'عنصر',\n ru: 'Элемент',\n tr: 'Öğe',\n pl: 'Element',\n id: 'Item',\n vi: 'Mục',\n uk: 'Елемент',\n }),\n },\n variantSwitcher: {\n label: t({\n en: 'Variant',\n 'en-GB': 'Variant',\n fr: 'Variante',\n es: 'Variante',\n de: 'Variante',\n ja: 'バリアント',\n ko: '변형',\n zh: '变体',\n it: 'Variante',\n pt: 'Variante',\n hi: 'वेरिएंट',\n ar: 'نوع',\n ru: 'Вариант',\n tr: 'Varyant',\n pl: 'Wariant',\n id: 'Varian',\n vi: 'Biến thể',\n uk: 'Варіант',\n }),\n },\n metaSwitcher: {\n label: t({\n en: 'Meta',\n 'en-GB': 'Meta',\n fr: 'Méta',\n es: 'Meta',\n de: 'Meta',\n ja: 'メタ',\n ko: '메타',\n zh: '元',\n it: 'Meta',\n pt: 'Meta',\n hi: 'मेटा',\n ar: 'بيانات وصفية',\n ru: 'Мета',\n tr: 'Meta',\n pl: 'Meta',\n id: 'Meta',\n vi: 'Meta',\n uk: 'Мета',\n }),\n },\n },\n title: 'Content editor',\n description:\n 'Labels and controls for the dictionary content editor, including item pagination, variant switcher, and meta switcher used to navigate between sibling dictionaries sharing the same key.',\n tags: ['content editor', 'dictionary', 'navigation'],\n} satisfies Dictionary;\n\nexport default contentEditorContent;\n"],"mappings":";;;AAEA,MAAM,uBAAuB;CAC3B,KAAK;CACL,SAAS;EACP,gBAAgB,EACd,OAAO,EAAE;GACP,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;EACD,iBAAiB,EACf,OAAO,EAAE;GACP,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;EACD,cAAc,EACZ,OAAO,EAAE;GACP,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;EACF;CACD,OAAO;CACP,aACE;CACF,MAAM;EAAC;EAAkB;EAAc;EAAa;CACrD"}
@@ -1,24 +1,4 @@
1
- import { Button } from "../Button/Button.mjs";
2
- import { FormItem } from "./FormItem.mjs";
3
- import { FormField } from "./FormField.mjs";
4
- import { FormLabelLayout } from "./layout/FormLabelLayout.mjs";
5
- import { FormElement } from "./elements/FormElement.mjs";
6
- import { EditableFieldInputElement } from "./elements/EditableFieldInputElement.mjs";
7
- import { EditableFieldTextAreaElement } from "./elements/EditableFieldTextAreaElement.mjs";
8
- import { InputElement } from "./elements/InputElement.mjs";
9
- import { InputPasswordElement } from "./elements/InputPasswordElement.mjs";
10
- import { OTPElement } from "./elements/OTPElement.mjs";
11
- import { SearchInputElement } from "./elements/SearchInputElement.mjs";
12
- import { TextAreaElement } from "./elements/TextAreaElement.mjs";
13
- import { AutoSizedTextAreaElement } from "./elements/AutoSizeTextAreaElement.mjs";
14
- import { CheckboxElement } from "./elements/CheckboxElement.mjs";
15
- import { MultiSelectElement } from "./elements/MultiselectElement.mjs";
16
- import { SelectElement } from "./elements/SelectElement.mjs";
17
- import { SwitchSelectorElement } from "./elements/SwitchSelectorElement.mjs";
18
1
  import { Form as Form$1 } from "./FormBase.mjs";
19
- import { FormControl } from "./FormControl.mjs";
20
- import { FormDescription } from "./FormDescription.mjs";
21
- import { FormMessage } from "./FormMessage.mjs";
22
2
 
23
3
  //#region src/components/Form/Form.tsx
24
4
  /**
@@ -32,34 +12,14 @@ import { FormMessage } from "./FormMessage.mjs";
32
12
  * onSubmitError={onSubmitError}
33
13
  * autoComplete
34
14
  * >
35
- * <Form.Input name="name" label="Name" />
36
- * <Form.Button type="submit" label="Click to submit">
15
+ * <FormInput name="name" label="Name" />
16
+ * <FormButton type="submit" label="Click to submit">
37
17
  * Submit
38
- * </Form.Button>
18
+ * </FormButton>
39
19
  * </Form>
40
20
  * ```
41
21
  */
42
22
  const Form = Form$1;
43
- Form.Description = FormDescription;
44
- Form.Control = FormControl;
45
- Form.Field = FormField;
46
- Form.Item = FormItem;
47
- Form.Label = FormLabelLayout;
48
- Form.Message = FormMessage;
49
- Form.Element = FormElement;
50
- Form.Input = InputElement;
51
- Form.InputPassword = InputPasswordElement;
52
- Form.Checkbox = CheckboxElement;
53
- Form.TextArea = TextAreaElement;
54
- Form.AutoSizedTextArea = AutoSizedTextAreaElement;
55
- Form.Button = Button;
56
- Form.Select = SelectElement;
57
- Form.MultiSelect = MultiSelectElement;
58
- Form.EditableFieldInput = EditableFieldInputElement;
59
- Form.EditableFieldTextArea = EditableFieldTextAreaElement;
60
- Form.SwitchSelector = SwitchSelectorElement;
61
- Form.OTP = OTPElement;
62
- Form.SearchInput = SearchInputElement;
63
23
 
64
24
  //#endregion
65
25
  export { Form };
@@ -1 +1 @@
1
- {"version":3,"file":"Form.mjs","names":["FormRoot"],"sources":["../../../../src/components/Form/Form.tsx"],"sourcesContent":["import { Button } from '../Button';\nimport {\n FormElement,\n InputElement,\n InputPasswordElement,\n TextAreaElement,\n} from './elements';\nimport { AutoSizedTextAreaElement } from './elements/AutoSizeTextAreaElement';\nimport { CheckboxElement } from './elements/CheckboxElement';\nimport { EditableFieldInputElement } from './elements/EditableFieldInputElement';\nimport { EditableFieldTextAreaElement } from './elements/EditableFieldTextAreaElement';\nimport { MultiSelectElement } from './elements/MultiselectElement';\nimport { OTPElement } from './elements/OTPElement';\nimport { SearchInputElement } from './elements/SearchInputElement';\nimport { SelectElement } from './elements/SelectElement';\nimport { SwitchSelectorElement } from './elements/SwitchSelectorElement';\nimport { Form as FormRoot } from './FormBase';\nimport { FormControl } from './FormControl';\nimport { FormDescription } from './FormDescription';\nimport { FormField } from './FormField';\nimport { FormItem } from './FormItem';\nimport { FormMessage } from './FormMessage';\nimport { FormLabelLayout } from './layout';\n\ntype FormType = typeof FormRoot & {\n Description: typeof FormDescription;\n Control: typeof FormControl;\n Field: typeof FormField;\n Item: typeof FormItem;\n Label: typeof FormLabelLayout;\n Message: typeof FormMessage;\n Element: typeof FormElement;\n Button: typeof Button;\n Input: typeof InputElement;\n InputPassword: typeof InputPasswordElement;\n Checkbox: typeof CheckboxElement;\n TextArea: typeof TextAreaElement;\n AutoSizedTextArea: typeof AutoSizedTextAreaElement;\n MultiSelect: typeof MultiSelectElement;\n Select: typeof SelectElement;\n EditableFieldInput: typeof EditableFieldInputElement;\n EditableFieldTextArea: typeof EditableFieldTextAreaElement;\n SwitchSelector: typeof SwitchSelectorElement;\n OTP: typeof OTPElement;\n SearchInput: typeof SearchInputElement;\n};\n\n/**\n * Form components\n *\n * Example of usage:\n * ```jsx\n * <Form\n * schema={ZodSchema}\n * onSubmitSuccess={onSubmitSuccess}\n * onSubmitError={onSubmitError}\n * autoComplete\n * >\n * <Form.Input name=\"name\" label=\"Name\" />\n * <Form.Button type=\"submit\" label=\"Click to submit\">\n * Submit\n * </Form.Button>\n * </Form>\n * ```\n */\nexport const Form = FormRoot as FormType;\nForm.Description = FormDescription;\nForm.Control = FormControl;\nForm.Field = FormField;\nForm.Item = FormItem;\nForm.Label = FormLabelLayout;\nForm.Message = FormMessage;\nForm.Element = FormElement;\nForm.Input = InputElement;\nForm.InputPassword = InputPasswordElement;\nForm.Checkbox = CheckboxElement;\nForm.TextArea = TextAreaElement;\nForm.AutoSizedTextArea = AutoSizedTextAreaElement;\nForm.Button = Button;\nForm.Select = SelectElement;\nForm.MultiSelect = MultiSelectElement;\nForm.EditableFieldInput = EditableFieldInputElement;\nForm.EditableFieldTextArea = EditableFieldTextAreaElement;\nForm.SwitchSelector = SwitchSelectorElement;\nForm.OTP = OTPElement;\nForm.SearchInput = SearchInputElement;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiEA,MAAa,OAAOA;AACpB,KAAK,cAAc;AACnB,KAAK,UAAU;AACf,KAAK,QAAQ;AACb,KAAK,OAAO;AACZ,KAAK,QAAQ;AACb,KAAK,UAAU;AACf,KAAK,UAAU;AACf,KAAK,QAAQ;AACb,KAAK,gBAAgB;AACrB,KAAK,WAAW;AAChB,KAAK,WAAW;AAChB,KAAK,oBAAoB;AACzB,KAAK,SAAS;AACd,KAAK,SAAS;AACd,KAAK,cAAc;AACnB,KAAK,qBAAqB;AAC1B,KAAK,wBAAwB;AAC7B,KAAK,iBAAiB;AACtB,KAAK,MAAM;AACX,KAAK,cAAc"}
1
+ {"version":3,"file":"Form.mjs","names":["FormRoot"],"sources":["../../../../src/components/Form/Form.tsx"],"sourcesContent":["import { Form as FormRoot } from './FormBase';\n\n/**\n * Form components\n *\n * Example of usage:\n * ```jsx\n * <Form\n * schema={ZodSchema}\n * onSubmitSuccess={onSubmitSuccess}\n * onSubmitError={onSubmitError}\n * autoComplete\n * >\n * <FormInput name=\"name\" label=\"Name\" />\n * <FormButton type=\"submit\" label=\"Click to submit\">\n * Submit\n * </FormButton>\n * </Form>\n * ```\n */\nexport const Form = FormRoot;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoBA,MAAa,OAAOA"}
@@ -1,8 +1,7 @@
1
1
  'use client';
2
2
 
3
- import { useFormField } from "../FormField.mjs";
3
+ import { FormField, useFormField } from "../FormField.mjs";
4
4
  import { FormItemLayout } from "../layout/FormItemLayout.mjs";
5
- import { Form } from "../Form.mjs";
6
5
  import { jsx } from "react/jsx-runtime";
7
6
  import { useFormContext } from "react-hook-form";
8
7
 
@@ -45,7 +44,7 @@ const FormFieldElement = ({ field, name, label, Element, isRequired = false, inf
45
44
  */
46
45
  const FormElement = (props) => {
47
46
  const { control } = useFormContext();
48
- return /* @__PURE__ */ jsx(Form.Field, {
47
+ return /* @__PURE__ */ jsx(FormField, {
49
48
  control,
50
49
  name: props.name,
51
50
  render: ({ field }) => /* @__PURE__ */ jsx(FormFieldElement, {
@@ -1 +1 @@
1
- {"version":3,"file":"FormElement.mjs","names":[],"sources":["../../../../../src/components/Form/elements/FormElement.tsx"],"sourcesContent":["'use client';\n\nimport type { ComponentProps, ElementType, ReactNode } from 'react';\nimport {\n type ControllerRenderProps,\n type FieldValues,\n useFormContext,\n} from 'react-hook-form';\nimport { Form } from '../Form';\nimport { useFormField } from '../FormField';\nimport { FormItemLayout, type FormItemLayoutProps } from '../layout';\n\nexport type FormElementProps<T extends ElementType> = {\n name: string;\n Element: T;\n label?: ReactNode;\n isRequired?: boolean;\n info?: string;\n showErrorMessage?: boolean;\n focus?: boolean;\n layoutClassName?: string;\n} & Omit<FormItemLayoutProps, 'children'>;\n\ntype FormFieldElementProps<T extends ElementType> = FormElementProps<T> &\n ComponentProps<T> & {\n field: ControllerRenderProps<FieldValues, string>;\n };\n\nconst FormFieldElement = <T extends ElementType>({\n field,\n name,\n label,\n Element,\n isRequired = false,\n info,\n description,\n showErrorMessage = true,\n layoutClassName,\n ...props\n}: FormFieldElementProps<T>) => {\n const { error } = useFormField();\n\n // Ensure controlled inputs and merge onChange with RHF controller\n const {\n value: fieldValue,\n onChange: fieldOnChange,\n ...fieldRest\n } = (field as unknown as {\n value: unknown;\n onChange: (...args: unknown[]) => void;\n }) ?? {};\n\n const propsAny = props as unknown as {\n value?: unknown;\n onChange?: (...args: unknown[]) => void;\n children?: unknown;\n };\n\n const mergedValue =\n propsAny.value !== undefined ? propsAny.value : (fieldValue ?? '');\n\n const mergedOnChange = (...args: unknown[]) => {\n if (typeof fieldOnChange === 'function') fieldOnChange(...args);\n if (typeof propsAny.onChange === 'function') propsAny.onChange(...args);\n };\n\n return (\n <FormItemLayout\n htmlFor={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n aria-invalid={!!error}\n className={layoutClassName}\n >\n <Element\n data-testid=\"element\"\n id={name}\n {...fieldRest}\n {...props}\n // Force controlled value to avoid uncontrolled-to-controlled warnings\n value={mergedValue as never}\n // Merge onChange so RHF stays in sync while allowing custom handlers\n onChange={mergedOnChange as never}\n >\n {props.children}\n </Element>\n </FormItemLayout>\n );\n};\n\n/**\n * FormElement is a component that allows you to create a form element with a label, description, error message, and validation.\n *\n * The Element prop is the type of the element that will be rendered.\n * This element will interact with the FormContext and will be controlled by the FormControl component.\n * The props used to control the element will be `value` and `onChange`.\n */\nexport const FormElement = <T extends ElementType>(\n props: FormElementProps<T> & ComponentProps<T>\n) => {\n const { control } = useFormContext();\n\n return (\n <Form.Field\n control={control}\n name={props.name}\n render={({ field }) => <FormFieldElement {...props} field={field} />}\n />\n );\n};\n"],"mappings":";;;;;;;;;AA4BA,MAAM,oBAA2C,EAC/C,OACA,MACA,OACA,SACA,aAAa,OACb,MACA,aACA,mBAAmB,MACnB,iBACA,GAAG,YAC2B;CAC9B,MAAM,EAAE,UAAU,cAAc;CAGhC,MAAM,EACJ,OAAO,YACP,UAAU,eACV,GAAG,cACA,SAGC,EAAE;CAER,MAAM,WAAW;CAMjB,MAAM,cACJ,SAAS,UAAU,SAAY,SAAS,QAAS,cAAc;CAEjE,MAAM,kBAAkB,GAAG,SAAoB;AAC7C,MAAI,OAAO,kBAAkB,WAAY,eAAc,GAAG,KAAK;AAC/D,MAAI,OAAO,SAAS,aAAa,WAAY,UAAS,SAAS,GAAG,KAAK;;AAGzE,QACE,oBAAC,gBAAD;EACE,SAAS;EACF;EACM;EACD;EACN;EACY;EAClB,gBAAc,CAAC,CAAC;EAChB,WAAW;YAEX,oBAAC,SAAD;GACE,eAAY;GACZ,IAAI;GACJ,GAAI;GACJ,GAAI;GAEJ,OAAO;GAEP,UAAU;aAET,MAAM;GACC;EACK;;;;;;;;;AAWrB,MAAa,eACX,UACG;CACH,MAAM,EAAE,YAAY,gBAAgB;AAEpC,QACE,oBAAC,KAAK,OAAN;EACW;EACT,MAAM,MAAM;EACZ,SAAS,EAAE,YAAY,oBAAC,kBAAD;GAAkB,GAAI;GAAc;GAAS;EACpE"}
1
+ {"version":3,"file":"FormElement.mjs","names":[],"sources":["../../../../../src/components/Form/elements/FormElement.tsx"],"sourcesContent":["'use client';\n\nimport type { ComponentProps, ElementType, ReactNode } from 'react';\nimport {\n type ControllerRenderProps,\n type FieldValues,\n useFormContext,\n} from 'react-hook-form';\nimport { FormField, useFormField } from '../FormField';\nimport { FormItemLayout, type FormItemLayoutProps } from '../layout';\n\nexport type FormElementProps<T extends ElementType> = {\n name: string;\n Element: T;\n label?: ReactNode;\n isRequired?: boolean;\n info?: string;\n showErrorMessage?: boolean;\n focus?: boolean;\n layoutClassName?: string;\n} & Omit<FormItemLayoutProps, 'children'>;\n\ntype FormFieldElementProps<T extends ElementType> = FormElementProps<T> &\n ComponentProps<T> & {\n field: ControllerRenderProps<FieldValues, string>;\n };\n\nconst FormFieldElement = <T extends ElementType>({\n field,\n name,\n label,\n Element,\n isRequired = false,\n info,\n description,\n showErrorMessage = true,\n layoutClassName,\n ...props\n}: FormFieldElementProps<T>) => {\n const { error } = useFormField();\n\n // Ensure controlled inputs and merge onChange with RHF controller\n const {\n value: fieldValue,\n onChange: fieldOnChange,\n ...fieldRest\n } = (field as unknown as {\n value: unknown;\n onChange: (...args: unknown[]) => void;\n }) ?? {};\n\n const propsAny = props as unknown as {\n value?: unknown;\n onChange?: (...args: unknown[]) => void;\n children?: unknown;\n };\n\n const mergedValue =\n propsAny.value !== undefined ? propsAny.value : (fieldValue ?? '');\n\n const mergedOnChange = (...args: unknown[]) => {\n if (typeof fieldOnChange === 'function') fieldOnChange(...args);\n if (typeof propsAny.onChange === 'function') propsAny.onChange(...args);\n };\n\n return (\n <FormItemLayout\n htmlFor={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n aria-invalid={!!error}\n className={layoutClassName}\n >\n <Element\n data-testid=\"element\"\n id={name}\n {...fieldRest}\n {...props}\n // Force controlled value to avoid uncontrolled-to-controlled warnings\n value={mergedValue as never}\n // Merge onChange so RHF stays in sync while allowing custom handlers\n onChange={mergedOnChange as never}\n >\n {props.children}\n </Element>\n </FormItemLayout>\n );\n};\n\n/**\n * FormElement is a component that allows you to create a form element with a label, description, error message, and validation.\n *\n * The Element prop is the type of the element that will be rendered.\n * This element will interact with the FormContext and will be controlled by the FormControl component.\n * The props used to control the element will be `value` and `onChange`.\n */\nexport const FormElement = <T extends ElementType>(\n props: FormElementProps<T> & ComponentProps<T>\n) => {\n const { control } = useFormContext();\n\n return (\n <FormField\n control={control}\n name={props.name}\n render={({ field }) => <FormFieldElement {...props} field={field} />}\n />\n );\n};\n"],"mappings":";;;;;;;;AA2BA,MAAM,oBAA2C,EAC/C,OACA,MACA,OACA,SACA,aAAa,OACb,MACA,aACA,mBAAmB,MACnB,iBACA,GAAG,YAC2B;CAC9B,MAAM,EAAE,UAAU,cAAc;CAGhC,MAAM,EACJ,OAAO,YACP,UAAU,eACV,GAAG,cACA,SAGC,EAAE;CAER,MAAM,WAAW;CAMjB,MAAM,cACJ,SAAS,UAAU,SAAY,SAAS,QAAS,cAAc;CAEjE,MAAM,kBAAkB,GAAG,SAAoB;AAC7C,MAAI,OAAO,kBAAkB,WAAY,eAAc,GAAG,KAAK;AAC/D,MAAI,OAAO,SAAS,aAAa,WAAY,UAAS,SAAS,GAAG,KAAK;;AAGzE,QACE,oBAAC,gBAAD;EACE,SAAS;EACF;EACM;EACD;EACN;EACY;EAClB,gBAAc,CAAC,CAAC;EAChB,WAAW;YAEX,oBAAC,SAAD;GACE,eAAY;GACZ,IAAI;GACJ,GAAI;GACJ,GAAI;GAEJ,OAAO;GAEP,UAAU;aAET,MAAM;GACC;EACK;;;;;;;;;AAWrB,MAAa,eACX,UACG;CACH,MAAM,EAAE,YAAY,gBAAgB;AAEpC,QACE,oBAAC,WAAD;EACW;EACT,MAAM,MAAM;EACZ,SAAS,EAAE,YAAY,oBAAC,kBAAD;GAAkB,GAAI;GAAc;GAAS;EACpE"}
@@ -1,9 +1,8 @@
1
1
  'use client';
2
2
 
3
3
  import { MultiSelect } from "../../Select/Multiselect.mjs";
4
- import { useFormField } from "../FormField.mjs";
4
+ import { FormField, useFormField } from "../FormField.mjs";
5
5
  import { FormItemLayout } from "../layout/FormItemLayout.mjs";
6
- import { Form } from "../Form.mjs";
7
6
  import { jsx } from "react/jsx-runtime";
8
7
  import { useFormContext } from "react-hook-form";
9
8
 
@@ -28,7 +27,7 @@ const MultiSelectFieldContent = ({ field, name, label, description, isRequired,
28
27
  };
29
28
  const MultiSelectElement = ({ name, description, label, isRequired, info, showErrorMessage, children, ...props }) => {
30
29
  const { control } = useFormContext();
31
- return /* @__PURE__ */ jsx(Form.Field, {
30
+ return /* @__PURE__ */ jsx(FormField, {
32
31
  control,
33
32
  name,
34
33
  render: ({ field }) => /* @__PURE__ */ jsx(MultiSelectFieldContent, {
@@ -1 +1 @@
1
- {"version":3,"file":"MultiselectElement.mjs","names":[],"sources":["../../../../../src/components/Form/elements/MultiselectElement.tsx"],"sourcesContent":["'use client';\n\nimport { MultiSelect } from '@components/Select/Multiselect';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { Form } from '../Form';\nimport { useFormField } from '../FormField';\nimport { FormItemLayout } from '../layout/FormItemLayout';\nimport type { FormElementProps } from './FormElement';\n\ntype SelectElementsProps = Omit<\n FormElementProps<typeof MultiSelect>,\n 'Element'\n> &\n ComponentProps<typeof MultiSelect> & {\n name: string;\n description?: string;\n placeholder?: string;\n className?: string;\n children?: ReactNode;\n };\n\nconst MultiSelectFieldContent = ({\n field,\n name,\n label,\n description,\n isRequired,\n info,\n showErrorMessage,\n children,\n ...props\n}: Omit<SelectElementsProps, 'control'> & { field: any }) => {\n const { error } = useFormField();\n\n return (\n <FormItemLayout\n htmlFor={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n aria-invalid={!!error}\n >\n <MultiSelect\n onValueChange={field.onChange}\n values={field.value}\n {...props}\n >\n {children}\n </MultiSelect>\n </FormItemLayout>\n );\n};\n\nexport const MultiSelectElement = ({\n name,\n description,\n label,\n isRequired,\n info,\n showErrorMessage,\n children,\n ...props\n}: SelectElementsProps) => {\n const { control } = useFormContext();\n\n return (\n <Form.Field\n control={control}\n name={name}\n render={({ field }) => (\n <MultiSelectFieldContent\n field={field}\n name={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n {...props}\n >\n {children}\n </MultiSelectFieldContent>\n )}\n />\n );\n};\n"],"mappings":";;;;;;;;;;AAsBA,MAAM,2BAA2B,EAC/B,OACA,MACA,OACA,aACA,YACA,MACA,kBACA,UACA,GAAG,YACwD;CAC3D,MAAM,EAAE,UAAU,cAAc;AAEhC,QACE,oBAAC,gBAAD;EACE,SAAS;EACF;EACM;EACD;EACN;EACY;EAClB,gBAAc,CAAC,CAAC;YAEhB,oBAAC,aAAD;GACE,eAAe,MAAM;GACrB,QAAQ,MAAM;GACd,GAAI;GAEH;GACW;EACC;;AAIrB,MAAa,sBAAsB,EACjC,MACA,aACA,OACA,YACA,MACA,kBACA,UACA,GAAG,YACsB;CACzB,MAAM,EAAE,YAAY,gBAAgB;AAEpC,QACE,oBAAC,KAAK,OAAN;EACW;EACH;EACN,SAAS,EAAE,YACT,oBAAC,yBAAD;GACS;GACD;GACC;GACM;GACD;GACN;GACY;GAClB,GAAI;GAEH;GACuB;EAE5B"}
1
+ {"version":3,"file":"MultiselectElement.mjs","names":[],"sources":["../../../../../src/components/Form/elements/MultiselectElement.tsx"],"sourcesContent":["'use client';\n\nimport { MultiSelect } from '@components/Select/Multiselect';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { FormField, useFormField } from '../FormField';\nimport { FormItemLayout } from '../layout/FormItemLayout';\nimport type { FormElementProps } from './FormElement';\n\ntype SelectElementsProps = Omit<\n FormElementProps<typeof MultiSelect>,\n 'Element'\n> &\n ComponentProps<typeof MultiSelect> & {\n name: string;\n description?: string;\n placeholder?: string;\n className?: string;\n children?: ReactNode;\n };\n\nconst MultiSelectFieldContent = ({\n field,\n name,\n label,\n description,\n isRequired,\n info,\n showErrorMessage,\n children,\n ...props\n}: Omit<SelectElementsProps, 'control'> & { field: any }) => {\n const { error } = useFormField();\n\n return (\n <FormItemLayout\n htmlFor={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n aria-invalid={!!error}\n >\n <MultiSelect\n onValueChange={field.onChange}\n values={field.value}\n {...props}\n >\n {children}\n </MultiSelect>\n </FormItemLayout>\n );\n};\n\nexport const MultiSelectElement = ({\n name,\n description,\n label,\n isRequired,\n info,\n showErrorMessage,\n children,\n ...props\n}: SelectElementsProps) => {\n const { control } = useFormContext();\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }) => (\n <MultiSelectFieldContent\n field={field}\n name={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n {...props}\n >\n {children}\n </MultiSelectFieldContent>\n )}\n />\n );\n};\n"],"mappings":";;;;;;;;;AAqBA,MAAM,2BAA2B,EAC/B,OACA,MACA,OACA,aACA,YACA,MACA,kBACA,UACA,GAAG,YACwD;CAC3D,MAAM,EAAE,UAAU,cAAc;AAEhC,QACE,oBAAC,gBAAD;EACE,SAAS;EACF;EACM;EACD;EACN;EACY;EAClB,gBAAc,CAAC,CAAC;YAEhB,oBAAC,aAAD;GACE,eAAe,MAAM;GACrB,QAAQ,MAAM;GACd,GAAI;GAEH;GACW;EACC;;AAIrB,MAAa,sBAAsB,EACjC,MACA,aACA,OACA,YACA,MACA,kBACA,UACA,GAAG,YACsB;CACzB,MAAM,EAAE,YAAY,gBAAgB;AAEpC,QACE,oBAAC,WAAD;EACW;EACH;EACN,SAAS,EAAE,YACT,oBAAC,yBAAD;GACS;GACD;GACC;GACM;GACD;GACN;GACY;GAClB,GAAI;GAEH;GACuB;EAE5B"}
@@ -1,10 +1,9 @@
1
1
  'use client';
2
2
 
3
- import { useItemSelector } from "../../../hooks/useItemSelector.mjs";
4
3
  import { InputIndicator, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from "../../Input/OTPInput.mjs";
5
- import { useFormField } from "../FormField.mjs";
4
+ import { useItemSelector } from "../../../hooks/useItemSelector.mjs";
5
+ import { FormField, useFormField } from "../FormField.mjs";
6
6
  import { FormItemLayout } from "../layout/FormItemLayout.mjs";
7
- import { Form } from "../Form.mjs";
8
7
  import { useEffect, useRef } from "react";
9
8
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
10
9
  import { useFormContext } from "react-hook-form";
@@ -85,7 +84,7 @@ const OTPFieldContent = ({ field, name, label, description, isRequired, info, sh
85
84
  };
86
85
  const OTPElement = ({ name, description, label, isRequired, info, showErrorMessage, children, slots = 6, maxLength = 6, ...props }) => {
87
86
  const { control } = useFormContext();
88
- return /* @__PURE__ */ jsx(Form.Field, {
87
+ return /* @__PURE__ */ jsx(FormField, {
89
88
  control,
90
89
  name,
91
90
  render: ({ field }) => /* @__PURE__ */ jsx(OTPFieldContent, {
@@ -1 +1 @@
1
- {"version":3,"file":"OTPElement.mjs","names":[],"sources":["../../../../../src/components/Form/elements/OTPElement.tsx"],"sourcesContent":["'use client';\n\nimport {\n InputIndicator,\n InputOTP,\n InputOTPGroup,\n InputOTPSeparator,\n InputOTPSlot,\n} from '@components/Input/OTPInput';\nimport { useItemSelector } from '@hooks/useItemSelector';\nimport { type ComponentProps, type ReactNode, useEffect, useRef } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { Form } from '../Form';\nimport { useFormField } from '../FormField';\nimport { FormItemLayout } from '../layout/FormItemLayout';\nimport type { FormElementProps } from './FormElement';\n\ntype OTPElementsProps = Omit<FormElementProps<typeof InputOTP>, 'Element'> &\n Omit<ComponentProps<typeof InputOTP>, 'children'> & {\n name: string;\n description?: string;\n placeholder?: string;\n className?: string;\n children?: ReactNode;\n /** Number of OTP slots (default: 6) */\n slots?: number;\n };\n\nconst selector = (option: HTMLElement) =>\n option?.getAttribute('aria-selected') === 'true';\n\nconst OTPFieldContent = ({\n field,\n name,\n label,\n description,\n isRequired,\n info,\n showErrorMessage,\n children,\n slots = 6,\n maxLength = 6,\n ...props\n}: Omit<OTPElementsProps, 'control'> & { field: any }) => {\n const { error } = useFormField();\n\n const optionsRefs = useRef<HTMLElement[]>([]);\n const { choiceIndicatorPosition, calculatePosition } = useItemSelector(\n optionsRefs,\n {\n selector,\n isHoverable: true,\n }\n );\n\n useEffect(() => {\n calculatePosition();\n }, []);\n\n return (\n <FormItemLayout\n htmlFor={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n aria-invalid={!!error}\n >\n <InputOTP\n onChange={field.onChange}\n defaultValue={field.value}\n maxLength={maxLength}\n pattern=\"^[0-9]+$\"\n onActiveSlotChange={calculatePosition}\n {...(props as any)}\n >\n {children ?? (\n <>\n <InputOTPGroup>\n <InputOTPSlot\n index={0}\n ref={(el) => {\n optionsRefs.current[0] = el!;\n }}\n />\n <InputOTPSlot\n index={1}\n ref={(el) => {\n optionsRefs.current[1] = el!;\n }}\n />\n <InputOTPSlot\n index={2}\n ref={(el) => {\n optionsRefs.current[2] = el!;\n }}\n />\n </InputOTPGroup>\n <InputOTPSeparator />\n <InputOTPGroup>\n <InputOTPSlot\n index={3}\n ref={(el) => {\n optionsRefs.current[3] = el!;\n }}\n />\n <InputOTPSlot\n index={4}\n ref={(el) => {\n optionsRefs.current[4] = el!;\n }}\n />\n <InputOTPSlot\n index={5}\n ref={(el) => {\n optionsRefs.current[5] = el!;\n }}\n />\n </InputOTPGroup>\n {choiceIndicatorPosition && (\n <InputIndicator style={choiceIndicatorPosition} />\n )}\n </>\n )}\n </InputOTP>\n </FormItemLayout>\n );\n};\n\nexport const OTPElement = ({\n name,\n description,\n label,\n isRequired,\n info,\n showErrorMessage,\n children,\n slots = 6,\n maxLength = 6,\n ...props\n}: OTPElementsProps) => {\n const { control } = useFormContext();\n\n return (\n <Form.Field\n control={control}\n name={name}\n render={({ field }) => (\n <OTPFieldContent\n field={field}\n name={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n slots={slots}\n maxLength={maxLength}\n {...props}\n >\n {children}\n </OTPFieldContent>\n )}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;AA4BA,MAAM,YAAY,WAChB,QAAQ,aAAa,gBAAgB,KAAK;AAE5C,MAAM,mBAAmB,EACvB,OACA,MACA,OACA,aACA,YACA,MACA,kBACA,UACA,QAAQ,GACR,YAAY,GACZ,GAAG,YACqD;CACxD,MAAM,EAAE,UAAU,cAAc;CAEhC,MAAM,cAAc,OAAsB,EAAE,CAAC;CAC7C,MAAM,EAAE,yBAAyB,sBAAsB,gBACrD,aACA;EACE;EACA,aAAa;EACd,CACF;AAED,iBAAgB;AACd,qBAAmB;IAClB,EAAE,CAAC;AAEN,QACE,oBAAC,gBAAD;EACE,SAAS;EACF;EACM;EACD;EACN;EACY;EAClB,gBAAc,CAAC,CAAC;YAEhB,oBAAC,UAAD;GACE,UAAU,MAAM;GAChB,cAAc,MAAM;GACT;GACX,SAAQ;GACR,oBAAoB;GACpB,GAAK;aAEJ,YACC;IACE,qBAAC,eAAD;KACE,oBAAC,cAAD;MACE,OAAO;MACP,MAAM,OAAO;AACX,mBAAY,QAAQ,KAAK;;MAE3B;KACF,oBAAC,cAAD;MACE,OAAO;MACP,MAAM,OAAO;AACX,mBAAY,QAAQ,KAAK;;MAE3B;KACF,oBAAC,cAAD;MACE,OAAO;MACP,MAAM,OAAO;AACX,mBAAY,QAAQ,KAAK;;MAE3B;KACY;IAChB,oBAAC,mBAAD,EAAqB;IACrB,qBAAC,eAAD;KACE,oBAAC,cAAD;MACE,OAAO;MACP,MAAM,OAAO;AACX,mBAAY,QAAQ,KAAK;;MAE3B;KACF,oBAAC,cAAD;MACE,OAAO;MACP,MAAM,OAAO;AACX,mBAAY,QAAQ,KAAK;;MAE3B;KACF,oBAAC,cAAD;MACE,OAAO;MACP,MAAM,OAAO;AACX,mBAAY,QAAQ,KAAK;;MAE3B;KACY;IACf,2BACC,oBAAC,gBAAD,EAAgB,OAAO,yBAA2B;IAEnD;GAEI;EACI;;AAIrB,MAAa,cAAc,EACzB,MACA,aACA,OACA,YACA,MACA,kBACA,UACA,QAAQ,GACR,YAAY,GACZ,GAAG,YACmB;CACtB,MAAM,EAAE,YAAY,gBAAgB;AAEpC,QACE,oBAAC,KAAK,OAAN;EACW;EACH;EACN,SAAS,EAAE,YACT,oBAAC,iBAAD;GACS;GACD;GACC;GACM;GACD;GACN;GACY;GACX;GACI;GACX,GAAI;GAEH;GACe;EAEpB"}
1
+ {"version":3,"file":"OTPElement.mjs","names":[],"sources":["../../../../../src/components/Form/elements/OTPElement.tsx"],"sourcesContent":["'use client';\n\nimport {\n InputIndicator,\n InputOTP,\n InputOTPGroup,\n InputOTPSeparator,\n InputOTPSlot,\n} from '@components/Input/OTPInput';\nimport { useItemSelector } from '@hooks/useItemSelector';\nimport { type ComponentProps, type ReactNode, useEffect, useRef } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { FormField, useFormField } from '../FormField';\nimport { FormItemLayout } from '../layout/FormItemLayout';\nimport type { FormElementProps } from './FormElement';\n\ntype OTPElementsProps = Omit<FormElementProps<typeof InputOTP>, 'Element'> &\n Omit<ComponentProps<typeof InputOTP>, 'children'> & {\n name: string;\n description?: string;\n placeholder?: string;\n className?: string;\n children?: ReactNode;\n /** Number of OTP slots (default: 6) */\n slots?: number;\n };\n\nconst selector = (option: HTMLElement) =>\n option?.getAttribute('aria-selected') === 'true';\n\nconst OTPFieldContent = ({\n field,\n name,\n label,\n description,\n isRequired,\n info,\n showErrorMessage,\n children,\n slots = 6,\n maxLength = 6,\n ...props\n}: Omit<OTPElementsProps, 'control'> & { field: any }) => {\n const { error } = useFormField();\n\n const optionsRefs = useRef<HTMLElement[]>([]);\n const { choiceIndicatorPosition, calculatePosition } = useItemSelector(\n optionsRefs,\n {\n selector,\n isHoverable: true,\n }\n );\n\n useEffect(() => {\n calculatePosition();\n }, []);\n\n return (\n <FormItemLayout\n htmlFor={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n aria-invalid={!!error}\n >\n <InputOTP\n onChange={field.onChange}\n defaultValue={field.value}\n maxLength={maxLength}\n pattern=\"^[0-9]+$\"\n onActiveSlotChange={calculatePosition}\n {...(props as any)}\n >\n {children ?? (\n <>\n <InputOTPGroup>\n <InputOTPSlot\n index={0}\n ref={(el) => {\n optionsRefs.current[0] = el!;\n }}\n />\n <InputOTPSlot\n index={1}\n ref={(el) => {\n optionsRefs.current[1] = el!;\n }}\n />\n <InputOTPSlot\n index={2}\n ref={(el) => {\n optionsRefs.current[2] = el!;\n }}\n />\n </InputOTPGroup>\n <InputOTPSeparator />\n <InputOTPGroup>\n <InputOTPSlot\n index={3}\n ref={(el) => {\n optionsRefs.current[3] = el!;\n }}\n />\n <InputOTPSlot\n index={4}\n ref={(el) => {\n optionsRefs.current[4] = el!;\n }}\n />\n <InputOTPSlot\n index={5}\n ref={(el) => {\n optionsRefs.current[5] = el!;\n }}\n />\n </InputOTPGroup>\n {choiceIndicatorPosition && (\n <InputIndicator style={choiceIndicatorPosition} />\n )}\n </>\n )}\n </InputOTP>\n </FormItemLayout>\n );\n};\n\nexport const OTPElement = ({\n name,\n description,\n label,\n isRequired,\n info,\n showErrorMessage,\n children,\n slots = 6,\n maxLength = 6,\n ...props\n}: OTPElementsProps) => {\n const { control } = useFormContext();\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }) => (\n <OTPFieldContent\n field={field}\n name={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n slots={slots}\n maxLength={maxLength}\n {...props}\n >\n {children}\n </OTPFieldContent>\n )}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;AA2BA,MAAM,YAAY,WAChB,QAAQ,aAAa,gBAAgB,KAAK;AAE5C,MAAM,mBAAmB,EACvB,OACA,MACA,OACA,aACA,YACA,MACA,kBACA,UACA,QAAQ,GACR,YAAY,GACZ,GAAG,YACqD;CACxD,MAAM,EAAE,UAAU,cAAc;CAEhC,MAAM,cAAc,OAAsB,EAAE,CAAC;CAC7C,MAAM,EAAE,yBAAyB,sBAAsB,gBACrD,aACA;EACE;EACA,aAAa;EACd,CACF;AAED,iBAAgB;AACd,qBAAmB;IAClB,EAAE,CAAC;AAEN,QACE,oBAAC,gBAAD;EACE,SAAS;EACF;EACM;EACD;EACN;EACY;EAClB,gBAAc,CAAC,CAAC;YAEhB,oBAAC,UAAD;GACE,UAAU,MAAM;GAChB,cAAc,MAAM;GACT;GACX,SAAQ;GACR,oBAAoB;GACpB,GAAK;aAEJ,YACC;IACE,qBAAC,eAAD;KACE,oBAAC,cAAD;MACE,OAAO;MACP,MAAM,OAAO;AACX,mBAAY,QAAQ,KAAK;;MAE3B;KACF,oBAAC,cAAD;MACE,OAAO;MACP,MAAM,OAAO;AACX,mBAAY,QAAQ,KAAK;;MAE3B;KACF,oBAAC,cAAD;MACE,OAAO;MACP,MAAM,OAAO;AACX,mBAAY,QAAQ,KAAK;;MAE3B;KACY;IAChB,oBAAC,mBAAD,EAAqB;IACrB,qBAAC,eAAD;KACE,oBAAC,cAAD;MACE,OAAO;MACP,MAAM,OAAO;AACX,mBAAY,QAAQ,KAAK;;MAE3B;KACF,oBAAC,cAAD;MACE,OAAO;MACP,MAAM,OAAO;AACX,mBAAY,QAAQ,KAAK;;MAE3B;KACF,oBAAC,cAAD;MACE,OAAO;MACP,MAAM,OAAO;AACX,mBAAY,QAAQ,KAAK;;MAE3B;KACY;IACf,2BACC,oBAAC,gBAAD,EAAgB,OAAO,yBAA2B;IAEnD;GAEI;EACI;;AAIrB,MAAa,cAAc,EACzB,MACA,aACA,OACA,YACA,MACA,kBACA,UACA,QAAQ,GACR,YAAY,GACZ,GAAG,YACmB;CACtB,MAAM,EAAE,YAAY,gBAAgB;AAEpC,QACE,oBAAC,WAAD;EACW;EACH;EACN,SAAS,EAAE,YACT,oBAAC,iBAAD;GACS;GACD;GACC;GACM;GACD;GACN;GACY;GACX;GACI;GACX,GAAI;GAEH;GACe;EAEpB"}
@@ -1,9 +1,8 @@
1
1
  'use client';
2
2
 
3
3
  import { Select } from "../../Select/Select.mjs";
4
- import { useFormField } from "../FormField.mjs";
4
+ import { FormField, useFormField } from "../FormField.mjs";
5
5
  import { FormItemLayout } from "../layout/FormItemLayout.mjs";
6
- import { Form } from "../Form.mjs";
7
6
  import { jsx } from "react/jsx-runtime";
8
7
  import { useFormContext } from "react-hook-form";
9
8
 
@@ -28,7 +27,7 @@ const SelectFieldContent = ({ field, name, label, description, isRequired, info,
28
27
  };
29
28
  const SelectElement = ({ name, description, label, isRequired, info, showErrorMessage, children, ...props }) => {
30
29
  const { control } = useFormContext();
31
- return /* @__PURE__ */ jsx(Form.Field, {
30
+ return /* @__PURE__ */ jsx(FormField, {
32
31
  control,
33
32
  name,
34
33
  render: ({ field }) => /* @__PURE__ */ jsx(SelectFieldContent, {
@@ -1 +1 @@
1
- {"version":3,"file":"SelectElement.mjs","names":[],"sources":["../../../../../src/components/Form/elements/SelectElement.tsx"],"sourcesContent":["'use client';\n\nimport { Select } from '@components/Select/Select';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { Form } from '../Form';\nimport { useFormField } from '../FormField';\nimport { FormItemLayout } from '../layout/FormItemLayout';\nimport type { FormElementProps } from './FormElement';\n\ntype SelectElementsProps = Omit<FormElementProps<typeof Select>, 'Element'> &\n ComponentProps<typeof Select> & {\n name: string;\n description?: string;\n placeholder?: string;\n className?: string;\n children?: ReactNode;\n };\n\nconst SelectFieldContent = ({\n field,\n name,\n label,\n description,\n isRequired,\n info,\n showErrorMessage,\n children,\n ...props\n}: Omit<SelectElementsProps, 'control'> & { field: any }) => {\n const { error } = useFormField();\n\n return (\n <FormItemLayout\n htmlFor={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n aria-invalid={!!error}\n >\n <Select\n onValueChange={field.onChange}\n defaultValue={field.value}\n {...props}\n >\n {children}\n </Select>\n </FormItemLayout>\n );\n};\n\nexport const SelectElement = ({\n name,\n description,\n label,\n isRequired,\n info,\n showErrorMessage,\n children,\n ...props\n}: SelectElementsProps) => {\n const { control } = useFormContext();\n\n return (\n <Form.Field\n control={control}\n name={name}\n render={({ field }) => (\n <SelectFieldContent\n field={field}\n name={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n {...props}\n >\n {children}\n </SelectFieldContent>\n )}\n />\n );\n};\n"],"mappings":";;;;;;;;;;AAmBA,MAAM,sBAAsB,EAC1B,OACA,MACA,OACA,aACA,YACA,MACA,kBACA,UACA,GAAG,YACwD;CAC3D,MAAM,EAAE,UAAU,cAAc;AAEhC,QACE,oBAAC,gBAAD;EACE,SAAS;EACF;EACM;EACD;EACN;EACY;EAClB,gBAAc,CAAC,CAAC;YAEhB,oBAAC,QAAD;GACE,eAAe,MAAM;GACrB,cAAc,MAAM;GACpB,GAAI;GAEH;GACM;EACM;;AAIrB,MAAa,iBAAiB,EAC5B,MACA,aACA,OACA,YACA,MACA,kBACA,UACA,GAAG,YACsB;CACzB,MAAM,EAAE,YAAY,gBAAgB;AAEpC,QACE,oBAAC,KAAK,OAAN;EACW;EACH;EACN,SAAS,EAAE,YACT,oBAAC,oBAAD;GACS;GACD;GACC;GACM;GACD;GACN;GACY;GAClB,GAAI;GAEH;GACkB;EAEvB"}
1
+ {"version":3,"file":"SelectElement.mjs","names":[],"sources":["../../../../../src/components/Form/elements/SelectElement.tsx"],"sourcesContent":["'use client';\n\nimport { Select } from '@components/Select/Select';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { FormField, useFormField } from '../FormField';\nimport { FormItemLayout } from '../layout/FormItemLayout';\nimport type { FormElementProps } from './FormElement';\n\ntype SelectElementsProps = Omit<FormElementProps<typeof Select>, 'Element'> &\n ComponentProps<typeof Select> & {\n name: string;\n description?: string;\n placeholder?: string;\n className?: string;\n children?: ReactNode;\n };\n\nconst SelectFieldContent = ({\n field,\n name,\n label,\n description,\n isRequired,\n info,\n showErrorMessage,\n children,\n ...props\n}: Omit<SelectElementsProps, 'control'> & { field: any }) => {\n const { error } = useFormField();\n\n return (\n <FormItemLayout\n htmlFor={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n aria-invalid={!!error}\n >\n <Select\n onValueChange={field.onChange}\n defaultValue={field.value}\n {...props}\n >\n {children}\n </Select>\n </FormItemLayout>\n );\n};\n\nexport const SelectElement = ({\n name,\n description,\n label,\n isRequired,\n info,\n showErrorMessage,\n children,\n ...props\n}: SelectElementsProps) => {\n const { control } = useFormContext();\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }) => (\n <SelectFieldContent\n field={field}\n name={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n {...props}\n >\n {children}\n </SelectFieldContent>\n )}\n />\n );\n};\n"],"mappings":";;;;;;;;;AAkBA,MAAM,sBAAsB,EAC1B,OACA,MACA,OACA,aACA,YACA,MACA,kBACA,UACA,GAAG,YACwD;CAC3D,MAAM,EAAE,UAAU,cAAc;AAEhC,QACE,oBAAC,gBAAD;EACE,SAAS;EACF;EACM;EACD;EACN;EACY;EAClB,gBAAc,CAAC,CAAC;YAEhB,oBAAC,QAAD;GACE,eAAe,MAAM;GACrB,cAAc,MAAM;GACpB,GAAI;GAEH;GACM;EACM;;AAIrB,MAAa,iBAAiB,EAC5B,MACA,aACA,OACA,YACA,MACA,kBACA,UACA,GAAG,YACsB;CACzB,MAAM,EAAE,YAAY,gBAAgB;AAEpC,QACE,oBAAC,WAAD;EACW;EACH;EACN,SAAS,EAAE,YACT,oBAAC,oBAAD;GACS;GACD;GACC;GACM;GACD;GACN;GACY;GAClB,GAAI;GAEH;GACkB;EAEvB"}
@@ -1,9 +1,8 @@
1
1
  'use client';
2
2
 
3
3
  import { SwitchSelector } from "../../SwitchSelector/SwitchSelector.mjs";
4
- import { useFormField } from "../FormField.mjs";
4
+ import { FormField, useFormField } from "../FormField.mjs";
5
5
  import { FormItemLayout } from "../layout/FormItemLayout.mjs";
6
- import { Form } from "../Form.mjs";
7
6
  import { jsx } from "react/jsx-runtime";
8
7
  import { useFormContext } from "react-hook-form";
9
8
 
@@ -31,7 +30,7 @@ const SwitchSelectorFieldContent = ({ field, name, label, description, isRequire
31
30
  };
32
31
  const SwitchSelectorElement = ({ name, description, label, isRequired, info, showErrorMessage, children, ...props }) => {
33
32
  const { control } = useFormContext();
34
- return /* @__PURE__ */ jsx(Form.Field, {
33
+ return /* @__PURE__ */ jsx(FormField, {
35
34
  control,
36
35
  name,
37
36
  render: ({ field }) => /* @__PURE__ */ jsx(SwitchSelectorFieldContent, {
@@ -1 +1 @@
1
- {"version":3,"file":"SwitchSelectorElement.mjs","names":[],"sources":["../../../../../src/components/Form/elements/SwitchSelectorElement.tsx"],"sourcesContent":["'use client';\n\nimport { SwitchSelector } from '@components/SwitchSelector';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { Form } from '../Form';\nimport { useFormField } from '../FormField';\nimport { FormItemLayout } from '../layout/FormItemLayout';\nimport type { FormElementProps } from './FormElement';\n\ntype SwitchSelectorElementProps = Omit<\n FormElementProps<typeof SwitchSelector>,\n 'Element'\n> &\n ComponentProps<typeof SwitchSelector> & {\n name: string;\n description?: string;\n placeholder?: string;\n className?: string;\n children?: ReactNode;\n };\n\nconst SwitchSelectorFieldContent = ({\n field,\n name,\n label,\n description,\n isRequired,\n info,\n showErrorMessage,\n children,\n ...props\n}: Omit<SwitchSelectorElementProps, 'control'> & { field: any }) => {\n const { error } = useFormField();\n\n return (\n <FormItemLayout\n htmlFor={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n aria-invalid={!!error}\n >\n <SwitchSelector\n {...field}\n {...props}\n onChange={(value: any) => {\n field.onChange(value);\n props.onChange?.(value);\n }}\n >\n {children}\n </SwitchSelector>\n </FormItemLayout>\n );\n};\n\nexport const SwitchSelectorElement = ({\n name,\n description,\n label,\n isRequired,\n info,\n showErrorMessage,\n children,\n ...props\n}: SwitchSelectorElementProps) => {\n const { control } = useFormContext();\n\n return (\n <Form.Field\n control={control}\n name={name}\n render={({ field }) => (\n <SwitchSelectorFieldContent\n field={field}\n name={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n {...props}\n >\n {children}\n </SwitchSelectorFieldContent>\n )}\n />\n );\n};\n"],"mappings":";;;;;;;;;;AAsBA,MAAM,8BAA8B,EAClC,OACA,MACA,OACA,aACA,YACA,MACA,kBACA,UACA,GAAG,YAC+D;CAClE,MAAM,EAAE,UAAU,cAAc;AAEhC,QACE,oBAAC,gBAAD;EACE,SAAS;EACF;EACM;EACD;EACN;EACY;EAClB,gBAAc,CAAC,CAAC;YAEhB,oBAAC,gBAAD;GACE,GAAI;GACJ,GAAI;GACJ,WAAW,UAAe;AACxB,UAAM,SAAS,MAAM;AACrB,UAAM,WAAW,MAAM;;GAGxB;GACc;EACF;;AAIrB,MAAa,yBAAyB,EACpC,MACA,aACA,OACA,YACA,MACA,kBACA,UACA,GAAG,YAC6B;CAChC,MAAM,EAAE,YAAY,gBAAgB;AAEpC,QACE,oBAAC,KAAK,OAAN;EACW;EACH;EACN,SAAS,EAAE,YACT,oBAAC,4BAAD;GACS;GACD;GACC;GACM;GACD;GACN;GACY;GAClB,GAAI;GAEH;GAC0B;EAE/B"}
1
+ {"version":3,"file":"SwitchSelectorElement.mjs","names":[],"sources":["../../../../../src/components/Form/elements/SwitchSelectorElement.tsx"],"sourcesContent":["'use client';\n\nimport { SwitchSelector } from '@components/SwitchSelector';\nimport type { ComponentProps, ReactNode } from 'react';\nimport { useFormContext } from 'react-hook-form';\nimport { FormField, useFormField } from '../FormField';\nimport { FormItemLayout } from '../layout/FormItemLayout';\nimport type { FormElementProps } from './FormElement';\n\ntype SwitchSelectorElementProps = Omit<\n FormElementProps<typeof SwitchSelector>,\n 'Element'\n> &\n ComponentProps<typeof SwitchSelector> & {\n name: string;\n description?: string;\n placeholder?: string;\n className?: string;\n children?: ReactNode;\n };\n\nconst SwitchSelectorFieldContent = ({\n field,\n name,\n label,\n description,\n isRequired,\n info,\n showErrorMessage,\n children,\n ...props\n}: Omit<SwitchSelectorElementProps, 'control'> & { field: any }) => {\n const { error } = useFormField();\n\n return (\n <FormItemLayout\n htmlFor={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n aria-invalid={!!error}\n >\n <SwitchSelector\n {...field}\n {...props}\n onChange={(value: any) => {\n field.onChange(value);\n props.onChange?.(value);\n }}\n >\n {children}\n </SwitchSelector>\n </FormItemLayout>\n );\n};\n\nexport const SwitchSelectorElement = ({\n name,\n description,\n label,\n isRequired,\n info,\n showErrorMessage,\n children,\n ...props\n}: SwitchSelectorElementProps) => {\n const { control } = useFormContext();\n\n return (\n <FormField\n control={control}\n name={name}\n render={({ field }) => (\n <SwitchSelectorFieldContent\n field={field}\n name={name}\n label={label}\n description={description}\n isRequired={isRequired}\n info={info}\n showErrorMessage={showErrorMessage}\n {...props}\n >\n {children}\n </SwitchSelectorFieldContent>\n )}\n />\n );\n};\n"],"mappings":";;;;;;;;;AAqBA,MAAM,8BAA8B,EAClC,OACA,MACA,OACA,aACA,YACA,MACA,kBACA,UACA,GAAG,YAC+D;CAClE,MAAM,EAAE,UAAU,cAAc;AAEhC,QACE,oBAAC,gBAAD;EACE,SAAS;EACF;EACM;EACD;EACN;EACY;EAClB,gBAAc,CAAC,CAAC;YAEhB,oBAAC,gBAAD;GACE,GAAI;GACJ,GAAI;GACJ,WAAW,UAAe;AACxB,UAAM,SAAS,MAAM;AACrB,UAAM,WAAW,MAAM;;GAGxB;GACc;EACF;;AAIrB,MAAa,yBAAyB,EACpC,MACA,aACA,OACA,YACA,MACA,kBACA,UACA,GAAG,YAC6B;CAChC,MAAM,EAAE,YAAY,gBAAgB;AAEpC,QACE,oBAAC,WAAD;EACW;EACH;EACN,SAAS,EAAE,YACT,oBAAC,4BAAD;GACS;GACD;GACC;GACM;GACD;GACN;GACY;GAClB,GAAI;GAEH;GAC0B;EAE/B"}
@@ -1,5 +1,24 @@
1
- import { useFormField } from "./FormField.mjs";
1
+ import { Button } from "../Button/Button.mjs";
2
+ import { FormItem } from "./FormItem.mjs";
3
+ import { FormField, useFormField } from "./FormField.mjs";
4
+ import { FormControl } from "./FormControl.mjs";
5
+ import { FormDescription } from "./FormDescription.mjs";
6
+ import { FormMessage } from "./FormMessage.mjs";
7
+ import { FormLabelLayout } from "./layout/FormLabelLayout.mjs";
8
+ import { FormElement } from "./elements/FormElement.mjs";
9
+ import { AutoSizedTextAreaElement } from "./elements/AutoSizeTextAreaElement.mjs";
10
+ import { CheckboxElement } from "./elements/CheckboxElement.mjs";
11
+ import { EditableFieldInputElement } from "./elements/EditableFieldInputElement.mjs";
12
+ import { EditableFieldTextAreaElement } from "./elements/EditableFieldTextAreaElement.mjs";
13
+ import { InputElement } from "./elements/InputElement.mjs";
14
+ import { InputPasswordElement } from "./elements/InputPasswordElement.mjs";
15
+ import { MultiSelectElement } from "./elements/MultiselectElement.mjs";
16
+ import { OTPElement } from "./elements/OTPElement.mjs";
17
+ import { SearchInputElement } from "./elements/SearchInputElement.mjs";
18
+ import { SelectElement } from "./elements/SelectElement.mjs";
19
+ import { SwitchSelectorElement } from "./elements/SwitchSelectorElement.mjs";
20
+ import { TextAreaElement } from "./elements/TextAreaElement.mjs";
2
21
  import { useForm } from "./FormBase.mjs";
3
22
  import { Form } from "./Form.mjs";
4
23
 
5
- export { Form, useForm, useFormField };
24
+ export { Form, AutoSizedTextAreaElement as FormAutoSizedTextArea, Button as FormButton, CheckboxElement as FormCheckbox, FormControl, FormDescription, EditableFieldInputElement as FormEditableFieldInput, EditableFieldTextAreaElement as FormEditableFieldTextArea, FormElement, FormField, InputElement as FormInput, InputPasswordElement as FormInputPassword, FormItem, FormLabelLayout as FormLabel, FormMessage, MultiSelectElement as FormMultiSelect, OTPElement as FormOTP, SearchInputElement as FormSearchInput, SelectElement as FormSelect, SwitchSelectorElement as FormSwitchSelector, TextAreaElement as FormTextArea, useForm, useFormField };
@@ -1,10 +1,13 @@
1
1
  import { cn } from "../../../utils/cn.mjs";
2
+ import { FormItem } from "../FormItem.mjs";
3
+ import { FormControl } from "../FormControl.mjs";
4
+ import { FormDescription } from "../FormDescription.mjs";
5
+ import { FormMessage } from "../FormMessage.mjs";
2
6
  import { FormLabelLayout } from "./FormLabelLayout.mjs";
3
- import { Form } from "../Form.mjs";
4
7
  import { jsx, jsxs } from "react/jsx-runtime";
5
8
 
6
9
  //#region src/components/Form/layout/FormItemLayout.tsx
7
- const FormItemLayout = ({ label, description, isRequired, info, children, showErrorMessage = true, htmlFor, className }) => /* @__PURE__ */ jsxs(Form.Item, {
10
+ const FormItemLayout = ({ label, description, isRequired, info, children, showErrorMessage = true, htmlFor, className }) => /* @__PURE__ */ jsxs(FormItem, {
8
11
  className: cn("flex w-full flex-col flex-wrap gap-2 px-1 py-2", className),
9
12
  children: [
10
13
  (description || label) && /* @__PURE__ */ jsxs("div", {
@@ -14,10 +17,10 @@ const FormItemLayout = ({ label, description, isRequired, info, children, showEr
14
17
  info,
15
18
  htmlFor,
16
19
  children: label
17
- }), description && /* @__PURE__ */ jsx(Form.Description, { children: description })]
20
+ }), description && /* @__PURE__ */ jsx(FormDescription, { children: description })]
18
21
  }),
19
- /* @__PURE__ */ jsx(Form.Control, { children }),
20
- showErrorMessage && /* @__PURE__ */ jsx(Form.Message, { "data-testid": "error-message" })
22
+ /* @__PURE__ */ jsx(FormControl, { children }),
23
+ showErrorMessage && /* @__PURE__ */ jsx(FormMessage, { "data-testid": "error-message" })
21
24
  ]
22
25
  });
23
26
 
@@ -1 +1 @@
1
- {"version":3,"file":"FormItemLayout.mjs","names":[],"sources":["../../../../../src/components/Form/layout/FormItemLayout.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { FC, ReactNode } from 'react';\nimport { Form } from '../Form';\nimport { FormLabelLayout, type FormLabelLayoutProps } from './FormLabelLayout';\n\nexport type FormItemLayoutProps = Omit<FormLabelLayoutProps, 'children'> & {\n label?: ReactNode;\n description?: ReactNode;\n children: ReactNode;\n showErrorMessage?: boolean;\n className?: string;\n};\n\nexport const FormItemLayout: FC<FormItemLayoutProps> = ({\n label,\n description,\n isRequired,\n info,\n children,\n showErrorMessage = true,\n htmlFor,\n className,\n}) => (\n <Form.Item\n className={cn('flex w-full flex-col flex-wrap gap-2 px-1 py-2', className)}\n >\n {(description || label) && (\n <div className=\"flex max-w-full flex-col gap-1 p-1 leading-none\">\n {label && (\n <FormLabelLayout\n isRequired={isRequired}\n info={info}\n htmlFor={htmlFor}\n >\n {label}\n </FormLabelLayout>\n )}\n {description && <Form.Description>{description}</Form.Description>}\n </div>\n )}\n <Form.Control>{children}</Form.Control>\n\n {showErrorMessage && <Form.Message data-testid=\"error-message\" />}\n </Form.Item>\n);\n"],"mappings":";;;;;;AAaA,MAAa,kBAA2C,EACtD,OACA,aACA,YACA,MACA,UACA,mBAAmB,MACnB,SACA,gBAEA,qBAAC,KAAK,MAAN;CACE,WAAW,GAAG,kDAAkD,UAAU;WAD5E;GAGI,eAAe,UACf,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,SACC,oBAAC,iBAAD;IACc;IACN;IACG;cAER;IACe,GAEnB,eAAe,oBAAC,KAAK,aAAN,YAAmB,aAA+B,EAC9D;;EAER,oBAAC,KAAK,SAAN,EAAe,UAAwB;EAEtC,oBAAoB,oBAAC,KAAK,SAAN,EAAc,eAAY,iBAAkB;EACvD"}
1
+ {"version":3,"file":"FormItemLayout.mjs","names":[],"sources":["../../../../../src/components/Form/layout/FormItemLayout.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { FC, ReactNode } from 'react';\nimport { FormControl } from '../FormControl';\nimport { FormDescription } from '../FormDescription';\nimport { FormItem } from '../FormItem';\nimport { FormMessage } from '../FormMessage';\nimport { FormLabelLayout, type FormLabelLayoutProps } from './FormLabelLayout';\n\nexport type FormItemLayoutProps = Omit<FormLabelLayoutProps, 'children'> & {\n label?: ReactNode;\n description?: ReactNode;\n children: ReactNode;\n showErrorMessage?: boolean;\n className?: string;\n};\n\nexport const FormItemLayout: FC<FormItemLayoutProps> = ({\n label,\n description,\n isRequired,\n info,\n children,\n showErrorMessage = true,\n htmlFor,\n className,\n}) => (\n <FormItem\n className={cn('flex w-full flex-col flex-wrap gap-2 px-1 py-2', className)}\n >\n {(description || label) && (\n <div className=\"flex max-w-full flex-col gap-1 p-1 leading-none\">\n {label && (\n <FormLabelLayout\n isRequired={isRequired}\n info={info}\n htmlFor={htmlFor}\n >\n {label}\n </FormLabelLayout>\n )}\n {description && <FormDescription>{description}</FormDescription>}\n </div>\n )}\n <FormControl>{children}</FormControl>\n\n {showErrorMessage && <FormMessage data-testid=\"error-message\" />}\n </FormItem>\n);\n"],"mappings":";;;;;;;;;AAgBA,MAAa,kBAA2C,EACtD,OACA,aACA,YACA,MACA,UACA,mBAAmB,MACnB,SACA,gBAEA,qBAAC,UAAD;CACE,WAAW,GAAG,kDAAkD,UAAU;WAD5E;GAGI,eAAe,UACf,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,SACC,oBAAC,iBAAD;IACc;IACN;IACG;cAER;IACe,GAEnB,eAAe,oBAAC,iBAAD,YAAkB,aAA8B,EAC5D;;EAER,oBAAC,aAAD,EAAc,UAAuB;EAEpC,oBAAoB,oBAAC,aAAD,EAAa,eAAY,iBAAkB;EACvD"}
@@ -1,20 +1,15 @@
1
1
  'use client';
2
2
 
3
- import { Suspense, lazy, startTransition, useEffect, useState } from "react";
3
+ import { useIsMounted } from "../../hooks/useIsMounted.mjs";
4
+ import { Suspense, lazy } from "react";
4
5
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
5
6
 
6
7
  //#region src/components/LanguageBackground/LanguageBackground.tsx
7
8
  const LazyLanguageSection = lazy(() => import("./LanguageSection.mjs").then((m) => ({ default: m.LanguageSection })));
8
9
  const LanguageBackground = ({ children }) => {
9
- const [mounted, setMounted] = useState(false);
10
- useEffect(() => {
11
- startTransition(() => {
12
- setMounted(true);
13
- });
14
- }, []);
15
10
  return /* @__PURE__ */ jsxs(Fragment$1, { children: [children, /* @__PURE__ */ jsx("div", {
16
11
  className: "absolute top-0 left-0 -z-1 flex size-full items-center justify-center",
17
- children: mounted && /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(LazyLanguageSection, { className: "mt-[30%]" }) })
12
+ children: useIsMounted() && /* @__PURE__ */ jsx(Suspense, { children: /* @__PURE__ */ jsx(LazyLanguageSection, { className: "mt-[30%]" }) })
18
13
  })] });
19
14
  };
20
15
 
@@ -1 +1 @@
1
- {"version":3,"file":"LanguageBackground.mjs","names":[],"sources":["../../../../src/components/LanguageBackground/LanguageBackground.tsx"],"sourcesContent":["'use client';\n\nimport {\n type FC,\n lazy,\n type PropsWithChildren,\n Suspense,\n startTransition,\n useEffect,\n useState,\n} from 'react';\n\nconst LazyLanguageSection = lazy(() =>\n import('./LanguageSection').then((m) => ({ default: m.LanguageSection }))\n);\n\nexport const LanguageBackground: FC<PropsWithChildren> = ({ children }) => {\n const [mounted, setMounted] = useState(false);\n\n useEffect(() => {\n // startTransition defers the background as a low-priority update so the\n // sign-in form paints before React starts loading the flag section chunk.\n startTransition(() => {\n setMounted(true);\n });\n }, []);\n\n return (\n <>\n {children}\n <div className=\"absolute top-0 left-0 -z-1 flex size-full items-center justify-center\">\n {mounted && (\n <Suspense>\n <LazyLanguageSection className=\"mt-[30%]\" />\n </Suspense>\n )}\n </div>\n </>\n );\n};\n"],"mappings":";;;;;;AAYA,MAAM,sBAAsB,WAC1B,OAAO,yBAAqB,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAC1E;AAED,MAAa,sBAA6C,EAAE,eAAe;CACzE,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;AAE7C,iBAAgB;AAGd,wBAAsB;AACpB,cAAW,KAAK;IAChB;IACD,EAAE,CAAC;AAEN,QACE,8CACG,UACD,oBAAC,OAAD;EAAK,WAAU;YACZ,WACC,oBAAC,UAAD,YACE,oBAAC,qBAAD,EAAqB,WAAU,YAAa,GACnC;EAET,EACL"}
1
+ {"version":3,"file":"LanguageBackground.mjs","names":[],"sources":["../../../../src/components/LanguageBackground/LanguageBackground.tsx"],"sourcesContent":["'use client';\n\nimport { useIsMounted } from '@hooks/useIsMounted';\nimport { type FC, lazy, type PropsWithChildren, Suspense } from 'react';\n\nconst LazyLanguageSection = lazy(() =>\n import('./LanguageSection').then((m) => ({ default: m.LanguageSection }))\n);\n\nexport const LanguageBackground: FC<PropsWithChildren> = ({ children }) => {\n const isMounted = useIsMounted();\n\n return (\n <>\n {children}\n <div className=\"absolute top-0 left-0 -z-1 flex size-full items-center justify-center\">\n {isMounted && (\n <Suspense>\n <LazyLanguageSection className=\"mt-[30%]\" />\n </Suspense>\n )}\n </div>\n </>\n );\n};\n"],"mappings":";;;;;;;AAKA,MAAM,sBAAsB,WAC1B,OAAO,yBAAqB,MAAM,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,CAC1E;AAED,MAAa,sBAA6C,EAAE,eAAe;AAGzE,QACE,8CACG,UACD,oBAAC,OAAD;EAAK,WAAU;YALD,cAMF,IACR,oBAAC,UAAD,YACE,oBAAC,qBAAD,EAAqB,WAAU,YAAa,GACnC;EAET,EACL"}
@@ -1,11 +1,11 @@
1
1
  'use client';
2
2
 
3
- import { usePersistedStore } from "../../hooks/usePersistedStore.mjs";
4
3
  import { Button } from "../Button/Button.mjs";
5
4
  import { Container } from "../Container/index.mjs";
6
5
  import { DropDown } from "../DropDown/index.mjs";
7
6
  import { Input } from "../Input/Input.mjs";
8
7
  import { SwitchSelector } from "../SwitchSelector/SwitchSelector.mjs";
8
+ import { usePersistedStore } from "../../hooks/usePersistedStore.mjs";
9
9
  import { useLocaleSwitcherContent } from "./LocaleSwitcherContentContext.mjs";
10
10
  import { useMemo, useRef, useState } from "react";
11
11
  import { Check, Globe, MoveVertical } from "lucide-react";
@@ -50,7 +50,7 @@ const StrongRenderer = (props) => /* @__PURE__ */ jsx("strong", {
50
50
  const MemoizedCodeBlock = memo(({ className, children, isDarkMode, lang, ...rest }) => {
51
51
  const content = String(children ?? "").replace(/\n$/, "");
52
52
  if (!!!className) return /* @__PURE__ */ jsx("code", {
53
- className: "rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm",
53
+ className: "scale-80 rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono",
54
54
  children: content.replace(/&(?:amp;)?#(\d+);/g, (_, code) => String.fromCharCode(parseInt(code, 10)))
55
55
  });
56
56
  const language = className?.replace(/lang(?:uage)?-/, "") || "plaintext";