@intlayer/design-system 7.5.6 → 7.5.7

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 (192) hide show
  1. package/dist/esm/components/Breadcrumb/index.mjs +28 -2
  2. package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
  3. package/dist/esm/components/Browser/Browser.mjs +29 -40
  4. package/dist/esm/components/Browser/Browser.mjs.map +1 -1
  5. package/dist/esm/components/Browser/{Browser.content.mjs → browser.content.mjs} +42 -4
  6. package/dist/esm/components/Browser/{Browser.content.mjs.map → browser.content.mjs.map} +1 -1
  7. package/dist/esm/components/Button/Button.mjs +6 -2
  8. package/dist/esm/components/Button/Button.mjs.map +1 -1
  9. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs +111 -81
  10. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
  11. package/dist/esm/components/DictionaryFieldEditor/KeyPathBreadcrumb.mjs +7 -6
  12. package/dist/esm/components/DictionaryFieldEditor/KeyPathBreadcrumb.mjs.map +1 -1
  13. package/dist/esm/components/DictionaryFieldEditor/index.mjs +4 -1
  14. package/dist/esm/components/DropDown/index.mjs +19 -4
  15. package/dist/esm/components/DropDown/index.mjs.map +1 -1
  16. package/dist/esm/components/Flags/Flag.mjs +55 -2
  17. package/dist/esm/components/Flags/Flag.mjs.map +1 -1
  18. package/dist/esm/components/Flags/bw.mjs +35 -0
  19. package/dist/esm/components/Flags/bw.mjs.map +1 -0
  20. package/dist/esm/components/Flags/cu.mjs +45 -0
  21. package/dist/esm/components/Flags/cu.mjs.map +1 -0
  22. package/dist/esm/components/Flags/cv.mjs +45 -0
  23. package/dist/esm/components/Flags/cv.mjs.map +1 -0
  24. package/dist/esm/components/Flags/dj.mjs +45 -0
  25. package/dist/esm/components/Flags/dj.mjs.map +1 -0
  26. package/dist/esm/components/Flags/flags.mjs +242 -7
  27. package/dist/esm/components/Flags/flags.mjs.map +1 -1
  28. package/dist/esm/components/Flags/gh.mjs +38 -0
  29. package/dist/esm/components/Flags/gh.mjs.map +1 -0
  30. package/dist/esm/components/Flags/gw.mjs +69 -0
  31. package/dist/esm/components/Flags/gw.mjs.map +1 -0
  32. package/dist/esm/components/Flags/km.mjs +54 -0
  33. package/dist/esm/components/Flags/km.mjs.map +1 -0
  34. package/dist/esm/components/Flags/lk.mjs +75 -0
  35. package/dist/esm/components/Flags/lk.mjs.map +1 -0
  36. package/dist/esm/components/Flags/md.mjs +319 -0
  37. package/dist/esm/components/Flags/md.mjs.map +1 -0
  38. package/dist/esm/components/Flags/mr.mjs +39 -0
  39. package/dist/esm/components/Flags/mr.mjs.map +1 -0
  40. package/dist/esm/components/Flags/mz.mjs +94 -0
  41. package/dist/esm/components/Flags/mz.mjs.map +1 -0
  42. package/dist/esm/components/Flags/ps.mjs +47 -0
  43. package/dist/esm/components/Flags/ps.mjs.map +1 -0
  44. package/dist/esm/components/Flags/sd.mjs +46 -0
  45. package/dist/esm/components/Flags/sd.mjs.map +1 -0
  46. package/dist/esm/components/Flags/so.mjs +39 -0
  47. package/dist/esm/components/Flags/so.mjs.map +1 -0
  48. package/dist/esm/components/Flags/st.mjs +75 -0
  49. package/dist/esm/components/Flags/st.mjs.map +1 -0
  50. package/dist/esm/components/Flags/td.mjs +35 -0
  51. package/dist/esm/components/Flags/td.mjs.map +1 -0
  52. package/dist/esm/components/Flags/tl.mjs +45 -0
  53. package/dist/esm/components/Flags/tl.mjs.map +1 -0
  54. package/dist/esm/components/Flags/tz.mjs +46 -0
  55. package/dist/esm/components/Flags/tz.mjs.map +1 -0
  56. package/dist/esm/components/Flags/ug.mjs +147 -0
  57. package/dist/esm/components/Flags/ug.mjs.map +1 -0
  58. package/dist/esm/components/Form/elements/OTPElement.mjs +2 -2
  59. package/dist/esm/components/Form/elements/OTPElement.mjs.map +1 -1
  60. package/dist/esm/components/Input/Input.mjs +3 -1
  61. package/dist/esm/components/Input/Input.mjs.map +1 -1
  62. package/dist/esm/components/Input/OTPInput.mjs +2 -2
  63. package/dist/esm/components/Input/OTPInput.mjs.map +1 -1
  64. package/dist/esm/components/Input/SearchInput.mjs +1 -1
  65. package/dist/esm/components/Input/SearchInput.mjs.map +1 -1
  66. package/dist/esm/components/Link/Link.mjs +11 -3
  67. package/dist/esm/components/Link/Link.mjs.map +1 -1
  68. package/dist/esm/components/Link/index.mjs +2 -2
  69. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs +19 -13
  70. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs.map +1 -1
  71. package/dist/esm/components/TextArea/AutocompleteTextArea.mjs +2 -29
  72. package/dist/esm/components/TextArea/AutocompleteTextArea.mjs.map +1 -1
  73. package/dist/esm/components/index.mjs +12 -9
  74. package/dist/esm/hooks/index.mjs +2 -2
  75. package/dist/esm/hooks/reactQuery.mjs +32 -3
  76. package/dist/esm/hooks/reactQuery.mjs.map +1 -1
  77. package/dist/esm/hooks/usePersistedStore.mjs +1 -1
  78. package/dist/esm/hooks/usePersistedStore.mjs.map +1 -1
  79. package/dist/types/components/Badge/index.d.ts +2 -2
  80. package/dist/types/components/Breadcrumb/breadcrumb.content.d.ts +3 -3
  81. package/dist/types/components/Breadcrumb/index.d.ts +2 -2
  82. package/dist/types/components/Breadcrumb/index.d.ts.map +1 -1
  83. package/dist/types/components/Browser/Browser.d.ts +2 -2
  84. package/dist/types/components/Browser/Browser.d.ts.map +1 -1
  85. package/dist/types/components/Browser/{Browser.content.d.ts → browser.content.d.ts} +97 -15
  86. package/dist/types/components/Browser/browser.content.d.ts.map +1 -0
  87. package/dist/types/components/Button/Button.d.ts +7 -7
  88. package/dist/types/components/Button/Button.d.ts.map +1 -1
  89. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +4 -4
  90. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts.map +1 -1
  91. package/dist/types/components/Command/index.d.ts +17 -17
  92. package/dist/types/components/Container/index.d.ts +9 -9
  93. package/dist/types/components/Container/index.d.ts.map +1 -1
  94. package/dist/types/components/CopyButton/CopyButton.content.d.ts +3 -3
  95. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts.map +1 -1
  96. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts +25 -25
  97. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.d.ts +9 -9
  98. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts +33 -33
  99. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts +25 -25
  100. package/dist/types/components/DictionaryFieldEditor/KeyPathBreadcrumb.d.ts +5 -1
  101. package/dist/types/components/DictionaryFieldEditor/KeyPathBreadcrumb.d.ts.map +1 -1
  102. package/dist/types/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.d.ts +25 -25
  103. package/dist/types/components/DictionaryFieldEditor/SaveForm/saveForm.content.d.ts +33 -33
  104. package/dist/types/components/DictionaryFieldEditor/StructureView/structureView.content.d.ts +9 -9
  105. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.d.ts +7 -7
  106. package/dist/types/components/DictionaryFieldEditor/dictionaryFieldEditor.content.d.ts +5 -5
  107. package/dist/types/components/DictionaryFieldEditor/index.d.ts +4 -1
  108. package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts +31 -31
  109. package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts.map +1 -1
  110. package/dist/types/components/DropDown/index.d.ts +16 -2
  111. package/dist/types/components/DropDown/index.d.ts.map +1 -1
  112. package/dist/types/components/EditableField/EditableFieldInput.d.ts.map +1 -1
  113. package/dist/types/components/ExpandCollapse/expandCollapse.content.d.ts +3 -3
  114. package/dist/types/components/Flags/Flag.d.ts.map +1 -1
  115. package/dist/types/components/Flags/flags.d.ts +169 -7
  116. package/dist/types/components/Flags/flags.d.ts.map +1 -1
  117. package/dist/types/components/Form/FormBase.d.ts +2 -2
  118. package/dist/types/components/Form/FormBase.d.ts.map +1 -1
  119. package/dist/types/components/Form/FormField.d.ts +2 -2
  120. package/dist/types/components/Form/FormField.d.ts.map +1 -1
  121. package/dist/types/components/Form/FormItem.d.ts +2 -2
  122. package/dist/types/components/Form/elements/EditableFieldInputElement.d.ts +2 -2
  123. package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts +2 -2
  124. package/dist/types/components/Form/elements/FormElement.d.ts +2 -2
  125. package/dist/types/components/Form/elements/MultiselectElement.d.ts +2 -2
  126. package/dist/types/components/Form/elements/MultiselectElement.d.ts.map +1 -1
  127. package/dist/types/components/Form/elements/OTPElement.d.ts +2 -2
  128. package/dist/types/components/Form/elements/OTPElement.d.ts.map +1 -1
  129. package/dist/types/components/Form/elements/SelectElement.d.ts +2 -2
  130. package/dist/types/components/Form/elements/SelectElement.d.ts.map +1 -1
  131. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts +2 -2
  132. package/dist/types/components/IDE/CodeContext.d.ts +2 -2
  133. package/dist/types/components/IDE/code.content.d.ts +5 -5
  134. package/dist/types/components/IDE/copyCode.content.d.ts +5 -5
  135. package/dist/types/components/IDE/selectors.content.d.ts +7 -7
  136. package/dist/types/components/Input/Checkbox.d.ts +3 -3
  137. package/dist/types/components/Input/Checkbox.d.ts.map +1 -1
  138. package/dist/types/components/Input/Input.d.ts +5 -8
  139. package/dist/types/components/Input/Input.d.ts.map +1 -1
  140. package/dist/types/components/Input/OTPInput.d.ts +6 -6
  141. package/dist/types/components/Input/OTPInput.d.ts.map +1 -1
  142. package/dist/types/components/Input/SearchInput.d.ts +2 -2
  143. package/dist/types/components/Input/SearchInput.d.ts.map +1 -1
  144. package/dist/types/components/Link/Link.d.ts +9 -8
  145. package/dist/types/components/Link/Link.d.ts.map +1 -1
  146. package/dist/types/components/Link/index.d.ts +2 -2
  147. package/dist/types/components/Loader/index.content.d.ts +3 -3
  148. package/dist/types/components/Loader/index.content.d.ts.map +1 -1
  149. package/dist/types/components/Loader/index.d.ts.map +1 -1
  150. package/dist/types/components/Loader/spinner.d.ts +2 -2
  151. package/dist/types/components/Loader/spinner.d.ts.map +1 -1
  152. package/dist/types/components/LocaleSwitcherContentDropDown/localeSwitcher.content.d.ts +17 -17
  153. package/dist/types/components/LocaleSwitcherContentDropDown/localeSwitcher.content.d.ts.map +1 -1
  154. package/dist/types/components/LocaleSwitcherDropDown/localeSwitcher.content.d.ts +13 -13
  155. package/dist/types/components/MarkDownRender/processor.d.ts.map +1 -1
  156. package/dist/types/components/MaxWidthSmoother/index.d.ts +2 -2
  157. package/dist/types/components/MaxWidthSmoother/index.d.ts.map +1 -1
  158. package/dist/types/components/Navbar/Burger.d.ts +2 -2
  159. package/dist/types/components/Navbar/Burger.d.ts.map +1 -1
  160. package/dist/types/components/Navbar/DesktopNavbar.d.ts +2 -2
  161. package/dist/types/components/Navbar/DesktopNavbar.d.ts.map +1 -1
  162. package/dist/types/components/Navbar/MobileNavbar.d.ts +2 -2
  163. package/dist/types/components/Navbar/MobileNavbar.d.ts.map +1 -1
  164. package/dist/types/components/Navbar/index.d.ts +2 -2
  165. package/dist/types/components/Navbar/index.d.ts.map +1 -1
  166. package/dist/types/components/Pagination/Pagination.d.ts +3 -3
  167. package/dist/types/components/Pagination/Pagination.d.ts.map +1 -1
  168. package/dist/types/components/Pagination/pagination.content.d.ts +11 -11
  169. package/dist/types/components/RightDrawer/useRightDrawerStore.d.ts +2 -2
  170. package/dist/types/components/Select/Select.d.ts +3 -3
  171. package/dist/types/components/SocialNetworks/index.d.ts +2 -2
  172. package/dist/types/components/SwitchSelector/index.d.ts +7 -7
  173. package/dist/types/components/SwitchSelector/index.d.ts.map +1 -1
  174. package/dist/types/components/Tab/Tab.d.ts +5 -5
  175. package/dist/types/components/Tab/Tab.d.ts.map +1 -1
  176. package/dist/types/components/Tab/TabContext.d.ts +2 -2
  177. package/dist/types/components/TabSelector/TabSelector.d.ts +5 -5
  178. package/dist/types/components/TabSelector/TabSelector.d.ts.map +1 -1
  179. package/dist/types/components/Table/table.content.d.ts +3 -3
  180. package/dist/types/components/Tag/index.d.ts +5 -5
  181. package/dist/types/components/Terminal/terminal.content.d.ts +5 -5
  182. package/dist/types/components/Toaster/Toast.d.ts +3 -3
  183. package/dist/types/components/Toaster/Toast.d.ts.map +1 -1
  184. package/dist/types/components/Toaster/Toaster.d.ts +2 -2
  185. package/dist/types/components/Toaster/Toaster.d.ts.map +1 -1
  186. package/dist/types/components/index.d.ts +6 -3
  187. package/dist/types/hooks/index.d.ts +2 -2
  188. package/dist/types/hooks/reactQuery.d.ts +2 -1
  189. package/dist/types/hooks/reactQuery.d.ts.map +1 -1
  190. package/dist/types/hooks/useScrollBlockage/useScrollBlockageStore.d.ts +2 -2
  191. package/package.json +14 -14
  192. package/dist/types/components/Browser/Browser.content.d.ts.map +0 -1
@@ -2,8 +2,8 @@
2
2
 
3
3
  import { Container } from "../../Container/index.mjs";
4
4
  import { Button, ButtonColor, ButtonSize, ButtonTextAlign, ButtonVariant } from "../../Button/Button.mjs";
5
- import { useAuditContentDeclarationField } from "../../../hooks/reactQuery.mjs";
6
5
  import { InputVariant } from "../../Input/Input.mjs";
6
+ import { useAuditContentDeclarationField } from "../../../hooks/reactQuery.mjs";
7
7
  import { Label } from "../../Label/index.mjs";
8
8
  import { SwitchSelector, SwitchSelectorColor, SwitchSelectorSize } from "../../SwitchSelector/index.mjs";
9
9
  import { useLocaleSwitcherContent } from "../../LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.mjs";
@@ -145,41 +145,50 @@ const EnumerationTextEditor = ({ section, keyPath, dictionary, renderSection })
145
145
  return /* @__PURE__ */ jsxs(Fragment, { children: [
146
146
  /* @__PURE__ */ jsx("tr", {
147
147
  className: "mt-2 w-full",
148
- children: /* @__PURE__ */ jsx("div", {
149
- className: "flex flex-1",
150
- children: /* @__PURE__ */ jsx(Button, {
151
- label: removeEnumeration.label.value,
152
- variant: ButtonVariant.HOVERABLE,
153
- color: ButtonColor.TEXT,
154
- Icon: Trash,
155
- className: "ml-auto",
156
- onClick: () => addEditedContent(dictionary.localId, void 0, childrenKeyPath),
157
- children: removeEnumeration.text
148
+ children: /* @__PURE__ */ jsx("td", {
149
+ className: "w-full",
150
+ children: /* @__PURE__ */ jsx("div", {
151
+ className: "flex flex-1",
152
+ children: /* @__PURE__ */ jsx(Button, {
153
+ label: removeEnumeration.label.value,
154
+ variant: ButtonVariant.HOVERABLE,
155
+ color: ButtonColor.TEXT,
156
+ Icon: Trash,
157
+ className: "ml-auto",
158
+ onClick: () => addEditedContent(dictionary.localId, void 0, childrenKeyPath),
159
+ children: removeEnumeration.text
160
+ })
158
161
  })
159
162
  })
160
163
  }),
161
164
  /* @__PURE__ */ jsx("tr", {
162
165
  className: "w-full p-2",
163
- children: /* @__PURE__ */ jsx(EnumKeyInput, {
164
- value: enumKey,
165
- onChange: (value) => {
166
- const preValueContent = section[NodeType.Enumeration];
167
- const newValueContent = renameKey(preValueContent, enumKey, value);
168
- const newValue = {
169
- ...section,
170
- [NodeType.Enumeration]: newValueContent
171
- };
172
- addEditedContent(dictionary.localId, newValue, keyPath);
173
- }
166
+ children: /* @__PURE__ */ jsx("td", {
167
+ className: "w-full",
168
+ children: /* @__PURE__ */ jsx(EnumKeyInput, {
169
+ value: enumKey,
170
+ onChange: (value) => {
171
+ const preValueContent = section[NodeType.Enumeration];
172
+ const newValueContent = renameKey(preValueContent, enumKey, value);
173
+ const newValue = {
174
+ ...section,
175
+ [NodeType.Enumeration]: newValueContent
176
+ };
177
+ addEditedContent(dictionary.localId, newValue, keyPath);
178
+ }
179
+ })
174
180
  })
175
181
  }),
176
182
  /* @__PURE__ */ jsx("tr", {
177
183
  className: "block w-full",
178
- children: /* @__PURE__ */ jsx(TextEditor, {
179
- section: content[enumKey] ?? getEmptyNode(content[firstKey]),
180
- keyPath: childrenKeyPath,
181
- dictionary,
182
- renderSection
184
+ children: /* @__PURE__ */ jsx("td", {
185
+ className: "w-full",
186
+ children: /* @__PURE__ */ jsx(TextEditor, {
187
+ section: content[enumKey] ?? getEmptyNode(content[firstKey]),
188
+ keyPath: childrenKeyPath,
189
+ dictionary,
190
+ renderSection
191
+ })
183
192
  })
184
193
  })
185
194
  ] }, enumKey);
@@ -219,14 +228,17 @@ const ConditionTextEditor = ({ section, keyPath, dictionary, renderSection }) =>
219
228
  })
220
229
  }, condKey), /* @__PURE__ */ jsx("tr", {
221
230
  className: "block w-full",
222
- children: /* @__PURE__ */ jsx(TextEditorContainer, {
223
- section: content[condKey] ?? getEmptyNode(content.true),
224
- keyPath: [...keyPath, {
225
- type: NodeType.Condition,
226
- key: condKey
227
- }],
228
- dictionary,
229
- renderSection
231
+ children: /* @__PURE__ */ jsx("td", {
232
+ className: "w-full",
233
+ children: /* @__PURE__ */ jsx(TextEditorContainer, {
234
+ section: content[condKey] ?? getEmptyNode(content.true),
235
+ keyPath: [...keyPath, {
236
+ type: NodeType.Condition,
237
+ key: condKey
238
+ }],
239
+ dictionary,
240
+ renderSection
241
+ })
230
242
  })
231
243
  }, condKey)] }, condKey))
232
244
  })
@@ -250,14 +262,17 @@ const GenderTextEditor = ({ section, keyPath, dictionary, renderSection }) => {
250
262
  })
251
263
  }, condKey), /* @__PURE__ */ jsx("tr", {
252
264
  className: "block w-full",
253
- children: /* @__PURE__ */ jsx(TextEditorContainer, {
254
- section: content[condKey] ?? getEmptyNode(content.male),
255
- keyPath: [...keyPath, {
256
- type: NodeType.Gender,
257
- key: condKey
258
- }],
259
- dictionary,
260
- renderSection
265
+ children: /* @__PURE__ */ jsx("td", {
266
+ className: "w-full",
267
+ children: /* @__PURE__ */ jsx(TextEditorContainer, {
268
+ section: content[condKey] ?? getEmptyNode(content.male),
269
+ keyPath: [...keyPath, {
270
+ type: NodeType.Gender,
271
+ key: condKey
272
+ }],
273
+ dictionary,
274
+ renderSection
275
+ })
261
276
  })
262
277
  }, condKey)] }, condKey))
263
278
  })
@@ -272,37 +287,46 @@ const ArrayTextEditor = ({ section, keyPath, dictionary, renderSection }) => {
272
287
  className: "w-full",
273
288
  children: /* @__PURE__ */ jsx("tbody", {
274
289
  className: "flex w-full flex-col gap-2",
275
- children: section.map((subSection, index) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs("tr", {
276
- className: "mt-2 flex w-full items-center justify-between gap-2 p-2",
277
- children: [/* @__PURE__ */ jsx("span", {
278
- className: "text-xs",
279
- children: String(index)
280
- }), /* @__PURE__ */ jsx(Button, {
281
- label: removeElement.label.value,
282
- variant: ButtonVariant.HOVERABLE,
283
- color: ButtonColor.NEUTRAL,
284
- className: "ml-auto",
285
- textAlign: ButtonTextAlign.LEFT,
286
- onClick: () => {
287
- const newKeyPath = [...keyPath, {
288
- type: NodeType.Array,
289
- key: section.length
290
- }];
291
- addEditedContent(dictionary.localId, void 0, newKeyPath);
292
- },
293
- Icon: Trash,
294
- children: removeElement.text
295
- })]
290
+ children: section.map((subSection, index) => /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("tr", {
291
+ className: "mt-2 w-full p-2",
292
+ children: /* @__PURE__ */ jsx("td", {
293
+ className: "w-full",
294
+ children: /* @__PURE__ */ jsxs("div", {
295
+ className: "flex w-full items-center justify-between gap-2",
296
+ children: [/* @__PURE__ */ jsx("span", {
297
+ className: "text-xs",
298
+ children: String(index)
299
+ }), /* @__PURE__ */ jsx(Button, {
300
+ label: removeElement.label.value,
301
+ variant: ButtonVariant.HOVERABLE,
302
+ color: ButtonColor.NEUTRAL,
303
+ className: "ml-auto",
304
+ textAlign: ButtonTextAlign.LEFT,
305
+ onClick: () => {
306
+ const newKeyPath = [...keyPath, {
307
+ type: NodeType.Array,
308
+ key: section.length
309
+ }];
310
+ addEditedContent(dictionary.localId, void 0, newKeyPath);
311
+ },
312
+ Icon: Trash,
313
+ children: removeElement.text
314
+ })]
315
+ })
316
+ })
296
317
  }), /* @__PURE__ */ jsx("tr", {
297
318
  className: "block w-full",
298
- children: /* @__PURE__ */ jsx(TextEditorContainer, {
299
- section: subSection ?? getEmptyNode(section[0]),
300
- keyPath: [...keyPath, {
301
- type: NodeType.Array,
302
- key: index
303
- }],
304
- dictionary,
305
- renderSection
319
+ children: /* @__PURE__ */ jsx("td", {
320
+ className: "w-full",
321
+ children: /* @__PURE__ */ jsx(TextEditorContainer, {
322
+ section: subSection ?? getEmptyNode(section[0]),
323
+ keyPath: [...keyPath, {
324
+ type: NodeType.Array,
325
+ key: index
326
+ }],
327
+ dictionary,
328
+ renderSection
329
+ })
306
330
  })
307
331
  })] }, JSON.stringify(subSection)))
308
332
  })
@@ -344,11 +368,14 @@ const ObjectTextEditor = ({ section, keyPath, dictionary, renderSection }) => /*
344
368
  })
345
369
  }, JSON.stringify(subSection)), /* @__PURE__ */ jsx("tr", {
346
370
  className: "block w-full",
347
- children: /* @__PURE__ */ jsx(TextEditor, {
348
- section: subSection,
349
- keyPath: childKeyPath,
350
- dictionary,
351
- renderSection
371
+ children: /* @__PURE__ */ jsx("td", {
372
+ className: "w-full",
373
+ children: /* @__PURE__ */ jsx(TextEditor, {
374
+ section: subSection,
375
+ keyPath: childKeyPath,
376
+ dictionary,
377
+ renderSection
378
+ })
352
379
  })
353
380
  }, JSON.stringify(subSection))] }, key);
354
381
  })
@@ -459,10 +486,13 @@ const NestedTextEditor = ({ keyPath, dictionary, renderSection, section, ...prop
459
486
  const TextEditor = ({ section, keyPath, dictionary, renderSection, isDarkMode }) => {
460
487
  const { tsxNotEditable } = useIntlayer("navigation-view");
461
488
  const nodeType = getNodeType(section);
462
- if (nodeType === NodeType.ReactNode) return /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", { children: "[React Node]" }), /* @__PURE__ */ jsx("span", {
463
- className: "text-neutral text-xs",
464
- children: tsxNotEditable
465
- })] });
489
+ if (nodeType === NodeType.ReactNode) return /* @__PURE__ */ jsxs("div", {
490
+ className: "flex w-full flex-col gap-2",
491
+ children: [/* @__PURE__ */ jsx("span", { children: "(React Node)" }), /* @__PURE__ */ jsx("span", {
492
+ className: "flex text-neutral text-xs",
493
+ children: tsxNotEditable
494
+ })]
495
+ });
466
496
  if (nodeType === NodeType.Nested) return /* @__PURE__ */ jsx(NestedTextEditor, {
467
497
  dictionary,
468
498
  renderSection,
@@ -1 +1 @@
1
- {"version":3,"file":"TextEditor.mjs","names":["traceKeys: string[]","ContentEditorTextArea: FC<ContentEditorTextAreaProps>","ContentEditorTextAreaBase","editedContent","ContentEditorInput: FC<ContentEditorInputProps>","ContentEditorInputBase","ContentEditorToggle: FC<ContentEditorToggleProps>","TranslationTextEditor: FC<TextEditorProps>","content: any","EnumerationTextEditor: FC<TextEditorProps>","ConditionTextEditor: FC<TextEditorProps>","GenderTextEditor: FC<TextEditorProps>","ArrayTextEditor: FC<TextEditorProps>","newKeyPath: KeyPath[]","ObjectTextEditor: FC<TextEditorProps>","childKeyPath: KeyPath[]","MarkdownTextEditor: FC<TextEditorProps>","toggleContent","content","InsertionTextEditor: FC<TextEditorProps>","FileTextEditor: FC<TextEditorProps>","NestedTextEditor: FC<TextEditorProps>","TextEditor: FC<TextEditorProps>","TextEditorContainer: FC<TextEditorProps>"],"sources":["../../../../../src/components/DictionaryFieldEditor/ContentEditorView/TextEditor.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ConditionContent,\n type EnumerationContent,\n type FileContent,\n type GenderContent,\n getEmptyNode,\n getLocaleName,\n getNodeType,\n type InsertionContent,\n type MarkdownContent,\n type TranslationContent,\n} from '@intlayer/core';\nimport { useConfiguration, useEditedContent } from '@intlayer/editor-react';\nimport {\n type ContentNode,\n type Dictionary,\n type KeyPath,\n type Locale,\n type LocalesValues,\n NodeType,\n} from '@intlayer/types';\nimport { Plus, Trash, WandSparkles } from 'lucide-react';\nimport { type FC, Fragment, type ReactNode, useState } from 'react';\nimport { useIntlayer, useLocale } from 'react-intlayer';\nimport { useAuditContentDeclarationField } from '../../../hooks';\nimport { renameKey } from '../../../utils/object';\nimport {\n Button,\n ButtonColor,\n ButtonSize,\n ButtonTextAlign,\n ButtonVariant,\n} from '../../Button';\nimport { Container } from '../../Container';\nimport {\n ContentEditorInput as ContentEditorInputBase,\n type ContentEditorInputProps as ContentEditorInputPropsBase,\n} from '../../ContentEditor/ContentEditorInput';\nimport {\n ContentEditorTextArea as ContentEditorTextAreaBase,\n type ContentEditorTextAreaProps as ContentEditorTextAreaPropsBase,\n} from '../../ContentEditor/ContentEditorTextArea';\nimport { InputVariant } from '../../Input';\nimport { Label } from '../../Label';\nimport { useLocaleSwitcherContent } from '../../LocaleSwitcherContentDropDown';\nimport { MarkdownRenderer } from '../../MarkDownRender';\nimport {\n SwitchSelector,\n type SwitchSelectorChoices,\n SwitchSelectorColor,\n type SwitchSelectorProps,\n SwitchSelectorSize,\n} from '../../SwitchSelector';\nimport { EnumKeyInput } from '../EnumKeyInput';\n\nexport const traceKeys: string[] = ['filePath', 'id', 'nodeType'];\n\ntype ContentEditorTextAreaProps = Omit<\n ContentEditorTextAreaPropsBase,\n 'onContentChange'\n> & {\n keyPath: KeyPath[];\n dictionary: Dictionary;\n};\n\nconst ContentEditorTextArea: FC<ContentEditorTextAreaProps> = ({\n keyPath,\n dictionary,\n ...props\n}) => {\n const { editedContent, addEditedContent } = useEditedContent();\n const configuration = useConfiguration();\n const { mutate: auditContentDeclarationField, isPending: isAuditing } =\n useAuditContentDeclarationField();\n\n return (\n <ContentEditorTextAreaBase\n variant={InputVariant.DEFAULT}\n onContentChange={(newValue) =>\n addEditedContent(dictionary.localId!, newValue, keyPath)\n }\n additionalButtons={\n <Button\n Icon={WandSparkles}\n label=\"Audit\"\n variant={ButtonVariant.HOVERABLE}\n size={ButtonSize.ICON_SM}\n color={ButtonColor.TEXT}\n className=\"cursor-pointer hover:scale-110\"\n isLoading={isAuditing}\n onClick={() => {\n auditContentDeclarationField(\n {\n fileContent: JSON.stringify({\n ...dictionary,\n ...(editedContent?.[dictionary.localId!] ?? {}),\n }),\n keyPath,\n locales: configuration.internationalization.locales ?? [],\n aiOptions: {\n apiKey: configuration.ai?.apiKey,\n model: configuration.ai?.model,\n temperature: configuration.ai?.temperature,\n },\n },\n {\n onSuccess: (response) => {\n if (!response?.data) return;\n\n try {\n const editedContent = response.data.fileContent as string;\n\n addEditedContent(\n dictionary.localId!,\n editedContent,\n keyPath\n );\n } catch (error) {\n console.error(error);\n }\n },\n }\n );\n }}\n />\n }\n {...props}\n />\n );\n};\n\ntype ContentEditorInputProps = Omit<\n ContentEditorInputPropsBase,\n 'onContentChange'\n> & {\n keyPath: KeyPath[];\n dictionary: Dictionary;\n};\n\nconst ContentEditorInput: FC<ContentEditorInputProps> = ({\n keyPath,\n dictionary,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n\n return (\n <ContentEditorInputBase\n variant={InputVariant.DEFAULT}\n onContentChange={(newValue) =>\n addEditedContent(dictionary.localId!, newValue, keyPath)\n }\n {...props}\n />\n );\n};\n\nconst toggleContent = [\n {\n content: 'False',\n value: false,\n },\n {\n content: 'True',\n value: true,\n },\n] as SwitchSelectorChoices<boolean>;\n\ntype ContentEditorToggleProps = SwitchSelectorProps & {\n dictionary: Dictionary;\n keyPath: KeyPath[];\n};\n\nconst ContentEditorToggle: FC<ContentEditorToggleProps> = ({\n dictionary,\n keyPath,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n\n return (\n <SwitchSelector\n choices={toggleContent}\n value={true}\n onChange={(value) =>\n addEditedContent(dictionary.localId!, value, keyPath)\n }\n color={SwitchSelectorColor.TEXT}\n size={SwitchSelectorSize.SM}\n {...props}\n />\n );\n};\n\nexport type TextEditorProps = {\n dictionary: Dictionary;\n keyPath: KeyPath[];\n section: ContentNode;\n isDarkMode?: boolean;\n renderSection?: (content: string) => ReactNode;\n onContentChange?: (newValue: string) => void;\n};\n\nconst TranslationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}: TextEditorProps) => {\n const { locale, defaultLocale } = useLocale();\n const { selectedLocales, availableLocales } = useLocaleSwitcherContent();\n\n const sectionContent = (section as TranslationContent<string>)[\n NodeType.Translation\n ] as Record<Locale, string>;\n\n const sectionContentKeys = Object.keys(sectionContent) as LocalesValues[];\n\n const isFiltered = availableLocales.length > selectedLocales.length;\n\n const localesList = isFiltered\n ? selectedLocales\n : // If the translation include content in other locales, we display all of them\n [...new Set([...availableLocales, ...sectionContentKeys])];\n\n const content: any = (section as TranslationContent<string>)[\n NodeType.Translation\n ];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {localesList.map((translationKey) => (\n <Fragment key={translationKey}>\n <tr className=\"mt-2 w-full p-2 text-xs\">\n <td className=\"w-full\">\n {getLocaleName(translationKey, locale)}\n </td>\n </tr>\n <tr className=\"flex\">\n <td className=\"w-full\">\n <TextEditorContainer\n section={\n content[translationKey] ??\n getEmptyNode(content[defaultLocale])\n }\n keyPath={[\n ...keyPath,\n { type: NodeType.Translation, key: translationKey },\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n ))}\n </tbody>\n </table>\n );\n};\n\nconst EnumerationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const { addEditedContent } = useEditedContent();\n const { addNewEnumeration, removeEnumeration } =\n useIntlayer('navigation-view');\n\n const content = (section as EnumerationContent<string>)[NodeType.Enumeration];\n const firstKey = Object.keys(content)[0] as keyof typeof content;\n\n return (\n <div className=\"flex flex-col gap-2\">\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {Object.keys(\n (section as EnumerationContent<ContentNode>)[NodeType.Enumeration]\n ).map((enumKey) => {\n const childrenKeyPath = [\n ...keyPath,\n { type: NodeType.Enumeration },\n ] as KeyPath[];\n return (\n <Fragment key={enumKey}>\n <tr className=\"mt-2 w-full\">\n <div className=\"flex flex-1\">\n <Button\n label={removeEnumeration.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.TEXT}\n Icon={Trash}\n className=\"ml-auto\"\n onClick={() =>\n addEditedContent(\n dictionary.localId!,\n undefined,\n childrenKeyPath\n )\n }\n >\n {removeEnumeration.text}\n </Button>\n </div>\n </tr>\n <tr className=\"w-full p-2\">\n <EnumKeyInput\n value={enumKey}\n onChange={(value) => {\n const preValueContent = (\n section as EnumerationContent<string>\n )[NodeType.Enumeration];\n const newValueContent = renameKey(\n preValueContent,\n enumKey as keyof typeof preValueContent,\n value\n );\n const newValue = {\n ...(section as EnumerationContent<string>),\n [NodeType.Enumeration]: newValueContent,\n };\n\n addEditedContent(dictionary.localId!, newValue, keyPath);\n }}\n />\n </tr>\n <tr className=\"block w-full\">\n <TextEditor\n section={\n content[enumKey as keyof typeof content] ??\n getEmptyNode(content[firstKey])\n }\n keyPath={childrenKeyPath}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n\n <Button\n label={addNewEnumeration.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.NEUTRAL}\n textAlign={ButtonTextAlign.LEFT}\n isFullWidth\n onClick={() =>\n addEditedContent(\n dictionary.localId!,\n getEmptyNode(content[firstKey]) ?? '',\n [...keyPath, { type: NodeType.Enumeration, key: 'unknown' }]\n )\n }\n Icon={Plus}\n className=\"m-2\"\n >\n {addNewEnumeration.text}\n </Button>\n </div>\n );\n};\n\nconst ConditionTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const content = (section as ConditionContent<string>)[NodeType.Condition];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {['true', 'false', 'fallback'].map((condKey) => (\n <Fragment key={condKey}>\n <tr key={condKey} className=\"mt-2 block w-full p-2 text-xs\">\n <td className=\"w-full\">{String(condKey)}</td>\n </tr>\n <tr key={condKey} className=\"block w-full\">\n <TextEditorContainer\n section={\n content[condKey as keyof typeof content] ??\n getEmptyNode(content.true)\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Condition,\n key: condKey,\n } as KeyPath,\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </tr>\n </Fragment>\n ))}\n </tbody>\n </table>\n );\n};\n\nconst GenderTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const content = (section as GenderContent<string>)[NodeType.Gender];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {['male', 'female', 'fallback'].map((condKey) => (\n <Fragment key={condKey}>\n <tr key={condKey} className=\"mt-2 block w-full p-2 text-xs\">\n <td className=\"w-full\">{String(condKey)}</td>\n </tr>\n <tr key={condKey} className=\"block w-full\">\n <TextEditorContainer\n section={\n content[condKey as keyof typeof content] ??\n getEmptyNode(content.male)\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Gender,\n key: condKey,\n } as KeyPath,\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </tr>\n </Fragment>\n ))}\n </tbody>\n </table>\n );\n};\n\nconst ArrayTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const { addEditedContent } = useEditedContent();\n const { addNewElement, removeElement } = useIntlayer('navigation-view');\n\n return (\n <div className=\"flex flex-col gap-2\">\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {(section as unknown as ContentNode[]).map((subSection, index) => (\n <Fragment key={JSON.stringify(subSection)}>\n <tr className=\"mt-2 flex w-full items-center justify-between gap-2 p-2\">\n <span className=\"text-xs\">{String(index)}</span>\n <Button\n label={removeElement.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.NEUTRAL}\n className=\"ml-auto\"\n textAlign={ButtonTextAlign.LEFT}\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: (section as unknown as ContentNode[]).length,\n },\n ];\n addEditedContent(\n dictionary.localId!,\n undefined,\n newKeyPath\n );\n }}\n Icon={Trash}\n >\n {removeElement.text}\n </Button>\n </tr>\n\n <tr className=\"block w-full\">\n <TextEditorContainer\n section={\n subSection ??\n getEmptyNode((section as unknown as ContentNode[])[0])\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Array,\n key: index,\n },\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </tr>\n </Fragment>\n ))}\n </tbody>\n </table>\n <Button\n label={addNewElement.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.NEUTRAL}\n textAlign={ButtonTextAlign.LEFT}\n isFullWidth\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: (section as unknown as ContentNode[]).length,\n },\n ];\n addEditedContent(\n dictionary.localId!,\n getEmptyNode((section as unknown as ContentNode[])[0]) ?? '',\n newKeyPath,\n false\n );\n }}\n Icon={Plus}\n >\n {addNewElement.text}\n </Button>\n </div>\n );\n};\n\nconst ObjectTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => (\n <>\n <table className=\"w-full\">\n <tbody className=\"flex flex-col gap-2\">\n {Object.keys(section as unknown as Record<string, ContentNode>).map(\n (key) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: NodeType.Object, key },\n ];\n const typedSection = section as unknown as Record<\n string,\n ContentNode\n >;\n const firstKey = Object.keys(\n typedSection\n )[0] as keyof typeof section;\n const subSection =\n typedSection[key as keyof typeof section] ??\n getEmptyNode(typedSection[firstKey]);\n\n return (\n <Fragment key={key}>\n <tr\n key={JSON.stringify(subSection)}\n className=\"mt-2 p-2 text-xs\"\n >\n <td className=\"w-full\">{String(key)}</td>\n </tr>\n <tr key={JSON.stringify(subSection)} className=\"block w-full\">\n <TextEditor\n section={subSection}\n keyPath={childKeyPath}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </tr>\n </Fragment>\n );\n }\n )}\n </tbody>\n </table>\n </>\n);\n\nenum MarkdownViewMode {\n Edit,\n Preview,\n}\n\nconst MarkdownTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n isDarkMode,\n}) => {\n const [mode, setMode] = useState(MarkdownViewMode.Edit);\n const toggleContent = [\n {\n content: 'Edit',\n value: MarkdownViewMode.Edit,\n },\n {\n content: 'Preview',\n value: MarkdownViewMode.Preview,\n },\n ] as SwitchSelectorChoices<MarkdownViewMode>;\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeType.Markdown }];\n\n const content = (section as MarkdownContent<ContentNode>)[\n NodeType.Markdown\n ] as ContentNode;\n\n return (\n <div className=\"flex w-full flex-col justify-center gap-6 p-2\">\n <SwitchSelector\n choices={toggleContent}\n value={mode}\n onChange={setMode}\n color={SwitchSelectorColor.TEXT}\n size={SwitchSelectorSize.SM}\n className=\"ml-auto\"\n />\n\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n dictionary={dictionary}\n renderSection={\n mode === MarkdownViewMode.Preview\n ? (content) => (\n <MarkdownRenderer isDarkMode={isDarkMode}>\n {content}\n </MarkdownRenderer>\n )\n : undefined\n }\n />\n </div>\n );\n};\n\nconst InsertionTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n ...props\n}) => {\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeType.Insertion }];\n\n const content = (section as InsertionContent<ContentNode>)[\n NodeType.Insertion\n ];\n\n return (\n <div className=\"flex w-full flex-col justify-center gap-6 p-2\">\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n {...props}\n />\n </div>\n );\n};\n\nconst FileTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n ...props\n}) => {\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeType.File }];\n\n const fileUrl = (section as FileContent)[NodeType.File];\n const { content } = section as FileContent;\n\n return (\n <div className=\"flex w-full flex-col justify-center gap-6 p-2\">\n <span className=\"text-neutral text-sm\">{fileUrl} </span>\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n {...props}\n />\n </div>\n );\n};\n\nconst NestedTextEditor: FC<TextEditorProps> = ({\n keyPath,\n dictionary,\n renderSection,\n section,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n\n const content = (section as any)[NodeType.Nested];\n const childrenKeyPath = [...keyPath, { type: NodeType.Nested }] as KeyPath[];\n\n return (\n <div className=\"flex w-full flex-col gap-4 p-2\">\n <Label>Dictionary key</Label>\n <ContentEditorInputBase\n aria-label=\"Edit field\"\n type=\"text\"\n variant={InputVariant.DEFAULT}\n {...props}\n onContentChange={(newValue) => {\n addEditedContent(\n dictionary.localId!,\n {\n ...content,\n dictionaryKey: String(newValue),\n },\n childrenKeyPath\n );\n }}\n >\n {content.dictionaryKey ?? ''}\n </ContentEditorInputBase>\n\n <Label>Path (optional)</Label>\n <ContentEditorInputBase\n aria-label=\"Edit field\"\n type=\"text\"\n variant={InputVariant.DEFAULT}\n {...props}\n onContentChange={(newValue) => {\n addEditedContent(\n dictionary.localId!,\n {\n ...content,\n path: newValue !== '' ? newValue : undefined,\n },\n childrenKeyPath\n );\n }}\n >\n {content.path ?? ''}\n </ContentEditorInputBase>\n </div>\n );\n};\n\nexport const TextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n isDarkMode,\n}) => {\n const { tsxNotEditable } = useIntlayer('navigation-view');\n const nodeType = getNodeType(section);\n\n if (nodeType === NodeType.ReactNode) {\n return (\n <>\n <span>[React Node]</span>\n <span className=\"text-neutral text-xs\">{tsxNotEditable}</span>\n </>\n );\n }\n\n if (nodeType === NodeType.Nested) {\n return (\n <NestedTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Translation) {\n return (\n <TranslationTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Enumeration) {\n return (\n <EnumerationTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Condition) {\n return (\n <ConditionTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Gender) {\n return (\n <GenderTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Insertion) {\n return (\n <InsertionTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Markdown) {\n return (\n <MarkdownTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n isDarkMode={isDarkMode}\n />\n );\n }\n\n if (nodeType === NodeType.File) {\n return (\n <FileTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Array) {\n return (\n <ArrayTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Object) {\n return (\n <ObjectTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Number) {\n return (\n <div className=\"w-full p-2\">\n <ContentEditorInput\n dictionary={dictionary}\n keyPath={keyPath}\n type=\"number\"\n aria-label=\"Edit field\"\n >\n {section as number}\n </ContentEditorInput>\n </div>\n );\n }\n\n if (nodeType === NodeType.Text) {\n return (\n <div className=\"w-full p-2\">\n {typeof renderSection === 'function' ? (\n renderSection(section as string)\n ) : (\n <ContentEditorTextArea\n variant={InputVariant.DEFAULT}\n aria-label=\"Edit field\"\n keyPath={keyPath}\n dictionary={dictionary}\n >\n {section as string}\n </ContentEditorTextArea>\n )}\n </div>\n );\n }\n\n if (nodeType === NodeType.Boolean) {\n return (\n <div className=\"w-full p-2\">\n <ContentEditorToggle\n dictionary={dictionary}\n keyPath={keyPath}\n value={section as boolean}\n />\n </div>\n );\n }\n\n return (\n <div className=\"w-full p-2\">\n Error. Format not supported.\n {JSON.stringify(section, null, 2)}\n {JSON.stringify(keyPath, null, 2)}\n NodeType : {nodeType}\n </div>\n );\n};\n\nexport const TextEditorContainer: FC<TextEditorProps> = (props) => (\n <Container\n border\n background=\"none\"\n className=\"top-6 flex h-full flex-1 flex-col gap-6 overflow-hidden p-2 md:sticky\"\n roundedSize=\"xl\"\n >\n <TextEditor {...props} />\n </Container>\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAyDA,MAAaA,YAAsB;CAAC;CAAY;CAAM;CAAW;AAUjE,MAAMC,yBAAyD,EAC7D,SACA,YACA,GAAG,YACC;CACJ,MAAM,EAAE,eAAe,qBAAqB,kBAAkB;CAC9D,MAAM,gBAAgB,kBAAkB;CACxC,MAAM,EAAE,QAAQ,8BAA8B,WAAW,eACvD,iCAAiC;AAEnC,QACE,oBAACC;EACC,SAAS,aAAa;EACtB,kBAAkB,aAChB,iBAAiB,WAAW,SAAU,UAAU,QAAQ;EAE1D,mBACE,oBAAC;GACC,MAAM;GACN,OAAM;GACN,SAAS,cAAc;GACvB,MAAM,WAAW;GACjB,OAAO,YAAY;GACnB,WAAU;GACV,WAAW;GACX,eAAe;AACb,iCACE;KACE,aAAa,KAAK,UAAU;MAC1B,GAAG;MACH,GAAI,gBAAgB,WAAW,YAAa,EAAE;MAC/C,CAAC;KACF;KACA,SAAS,cAAc,qBAAqB,WAAW,EAAE;KACzD,WAAW;MACT,QAAQ,cAAc,IAAI;MAC1B,OAAO,cAAc,IAAI;MACzB,aAAa,cAAc,IAAI;MAChC;KACF,EACD,EACE,YAAY,aAAa;AACvB,SAAI,CAAC,UAAU,KAAM;AAErB,SAAI;MACF,MAAMC,kBAAgB,SAAS,KAAK;AAEpC,uBACE,WAAW,SACXA,iBACA,QACD;cACM,OAAO;AACd,cAAQ,MAAM,MAAM;;OAGzB,CACF;;IAEH;EAEJ,GAAI;GACJ;;AAYN,MAAMC,sBAAmD,EACvD,SACA,YACA,GAAG,YACC;CACJ,MAAM,EAAE,qBAAqB,kBAAkB;AAE/C,QACE,oBAACC;EACC,SAAS,aAAa;EACtB,kBAAkB,aAChB,iBAAiB,WAAW,SAAU,UAAU,QAAQ;EAE1D,GAAI;GACJ;;AAIN,MAAM,gBAAgB,CACpB;CACE,SAAS;CACT,OAAO;CACR,EACD;CACE,SAAS;CACT,OAAO;CACR,CACF;AAOD,MAAMC,uBAAqD,EACzD,YACA,SACA,GAAG,YACC;CACJ,MAAM,EAAE,qBAAqB,kBAAkB;AAE/C,QACE,oBAAC;EACC,SAAS;EACT,OAAO;EACP,WAAW,UACT,iBAAiB,WAAW,SAAU,OAAO,QAAQ;EAEvD,OAAO,oBAAoB;EAC3B,MAAM,mBAAmB;EACzB,GAAI;GACJ;;AAaN,MAAMC,yBAA8C,EAClD,SACA,SACA,YACA,oBACqB;CACrB,MAAM,EAAE,QAAQ,kBAAkB,WAAW;CAC7C,MAAM,EAAE,iBAAiB,qBAAqB,0BAA0B;CAExE,MAAM,iBAAkB,QACtB,SAAS;CAGX,MAAM,qBAAqB,OAAO,KAAK,eAAe;CAItD,MAAM,cAFa,iBAAiB,SAAS,gBAAgB,SAGzD,kBAEA,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,kBAAkB,GAAG,mBAAmB,CAAC,CAAC;CAE9D,MAAMC,UAAgB,QACpB,SAAS;AAGX,QACE,oBAAC;EAAM,WAAU;YACf,oBAAC;GAAM,WAAU;aACd,YAAY,KAAK,mBAChB,qBAAC,uBACC,oBAAC;IAAG,WAAU;cACZ,oBAAC;KAAG,WAAU;eACX,cAAc,gBAAgB,OAAO;MACnC;KACF,EACL,oBAAC;IAAG,WAAU;cACZ,oBAAC;KAAG,WAAU;eACZ,oBAAC;MACC,SACE,QAAQ,mBACR,aAAa,QAAQ,eAAe;MAEtC,SAAS,CACP,GAAG,SACH;OAAE,MAAM,SAAS;OAAa,KAAK;OAAgB,CACpD;MACW;MACG;OACf;MACC;KACF,KArBQ,eAsBJ,CACX;IACI;GACF;;AAIZ,MAAMC,yBAA8C,EAClD,SACA,SACA,YACA,oBACI;CACJ,MAAM,EAAE,qBAAqB,kBAAkB;CAC/C,MAAM,EAAE,mBAAmB,sBACzB,YAAY,kBAAkB;CAEhC,MAAM,UAAW,QAAuC,SAAS;CACjE,MAAM,WAAW,OAAO,KAAK,QAAQ,CAAC;AAEtC,QACE,qBAAC;EAAI,WAAU;aACb,oBAAC;GAAM,WAAU;aACf,oBAAC;IAAM,WAAU;cACd,OAAO,KACL,QAA4C,SAAS,aACvD,CAAC,KAAK,YAAY;KACjB,MAAM,kBAAkB,CACtB,GAAG,SACH,EAAE,MAAM,SAAS,aAAa,CAC/B;AACD,YACE,qBAAC;MACC,oBAAC;OAAG,WAAU;iBACZ,oBAAC;QAAI,WAAU;kBACb,oBAAC;SACC,OAAO,kBAAkB,MAAM;SAC/B,SAAS,cAAc;SACvB,OAAO,YAAY;SACnB,MAAM;SACN,WAAU;SACV,eACE,iBACE,WAAW,SACX,QACA,gBACD;mBAGF,kBAAkB;UACZ;SACL;QACH;MACL,oBAAC;OAAG,WAAU;iBACZ,oBAAC;QACC,OAAO;QACP,WAAW,UAAU;SACnB,MAAM,kBACJ,QACA,SAAS;SACX,MAAM,kBAAkB,UACtB,iBACA,SACA,MACD;SACD,MAAM,WAAW;UACf,GAAI;WACH,SAAS,cAAc;UACzB;AAED,0BAAiB,WAAW,SAAU,UAAU,QAAQ;;SAE1D;QACC;MACL,oBAAC;OAAG,WAAU;iBACZ,oBAAC;QACC,SACE,QAAQ,YACR,aAAa,QAAQ,UAAU;QAEjC,SAAS;QACG;QACG;SACf;QACC;UApDQ,QAqDJ;MAEb;KACI;IACF,EAER,oBAAC;GACC,OAAO,kBAAkB,MAAM;GAC/B,SAAS,cAAc;GACvB,OAAO,YAAY;GACnB,WAAW,gBAAgB;GAC3B;GACA,eACE,iBACE,WAAW,SACX,aAAa,QAAQ,UAAU,IAAI,IACnC,CAAC,GAAG,SAAS;IAAE,MAAM,SAAS;IAAa,KAAK;IAAW,CAAC,CAC7D;GAEH,MAAM;GACN,WAAU;aAET,kBAAkB;IACZ;GACL;;AAIV,MAAMC,uBAA4C,EAChD,SACA,SACA,YACA,oBACI;CACJ,MAAM,UAAW,QAAqC,SAAS;AAE/D,QACE,oBAAC;EAAM,WAAU;YACf,oBAAC;GAAM,WAAU;aACd;IAAC;IAAQ;IAAS;IAAW,CAAC,KAAK,YAClC,qBAAC,uBACC,oBAAC;IAAiB,WAAU;cAC1B,oBAAC;KAAG,WAAU;eAAU,OAAO,QAAQ;MAAM;MADtC,QAEJ,EACL,oBAAC;IAAiB,WAAU;cAC1B,oBAAC;KACC,SACE,QAAQ,YACR,aAAa,QAAQ,KAAK;KAE5B,SAAS,CACP,GAAG,SACH;MACE,MAAM,SAAS;MACf,KAAK;MACN,CACF;KACW;KACG;MACf;MAfK,QAgBJ,KApBQ,QAqBJ,CACX;IACI;GACF;;AAIZ,MAAMC,oBAAyC,EAC7C,SACA,SACA,YACA,oBACI;CACJ,MAAM,UAAW,QAAkC,SAAS;AAE5D,QACE,oBAAC;EAAM,WAAU;YACf,oBAAC;GAAM,WAAU;aACd;IAAC;IAAQ;IAAU;IAAW,CAAC,KAAK,YACnC,qBAAC,uBACC,oBAAC;IAAiB,WAAU;cAC1B,oBAAC;KAAG,WAAU;eAAU,OAAO,QAAQ;MAAM;MADtC,QAEJ,EACL,oBAAC;IAAiB,WAAU;cAC1B,oBAAC;KACC,SACE,QAAQ,YACR,aAAa,QAAQ,KAAK;KAE5B,SAAS,CACP,GAAG,SACH;MACE,MAAM,SAAS;MACf,KAAK;MACN,CACF;KACW;KACG;MACf;MAfK,QAgBJ,KApBQ,QAqBJ,CACX;IACI;GACF;;AAIZ,MAAMC,mBAAwC,EAC5C,SACA,SACA,YACA,oBACI;CACJ,MAAM,EAAE,qBAAqB,kBAAkB;CAC/C,MAAM,EAAE,eAAe,kBAAkB,YAAY,kBAAkB;AAEvE,QACE,qBAAC;EAAI,WAAU;aACb,oBAAC;GAAM,WAAU;aACf,oBAAC;IAAM,WAAU;cACb,QAAqC,KAAK,YAAY,UACtD,qBAAC,uBACC,qBAAC;KAAG,WAAU;gBACZ,oBAAC;MAAK,WAAU;gBAAW,OAAO,MAAM;OAAQ,EAChD,oBAAC;MACC,OAAO,cAAc,MAAM;MAC3B,SAAS,cAAc;MACvB,OAAO,YAAY;MACnB,WAAU;MACV,WAAW,gBAAgB;MAC3B,eAAe;OACb,MAAMC,aAAwB,CAC5B,GAAG,SACH;QACE,MAAM,SAAS;QACf,KAAM,QAAqC;QAC5C,CACF;AACD,wBACE,WAAW,SACX,QACA,WACD;;MAEH,MAAM;gBAEL,cAAc;OACR;MACN,EAEL,oBAAC;KAAG,WAAU;eACZ,oBAAC;MACC,SACE,cACA,aAAc,QAAqC,GAAG;MAExD,SAAS,CACP,GAAG,SACH;OACE,MAAM,SAAS;OACf,KAAK;OACN,CACF;MACW;MACG;OACf;MACC,KA7CQ,KAAK,UAAU,WAAW,CA8C9B,CACX;KACI;IACF,EACR,oBAAC;GACC,OAAO,cAAc,MAAM;GAC3B,SAAS,cAAc;GACvB,OAAO,YAAY;GACnB,WAAW,gBAAgB;GAC3B;GACA,eAAe;IACb,MAAMA,aAAwB,CAC5B,GAAG,SACH;KACE,MAAM,SAAS;KACf,KAAM,QAAqC;KAC5C,CACF;AACD,qBACE,WAAW,SACX,aAAc,QAAqC,GAAG,IAAI,IAC1D,YACA,MACD;;GAEH,MAAM;aAEL,cAAc;IACR;GACL;;AAIV,MAAMC,oBAAyC,EAC7C,SACA,SACA,YACA,oBAEA,4CACE,oBAAC;CAAM,WAAU;WACf,oBAAC;EAAM,WAAU;YACd,OAAO,KAAK,QAAkD,CAAC,KAC7D,QAAQ;GACP,MAAMC,eAA0B,CAC9B,GAAG,SACH;IAAE,MAAM,SAAS;IAAQ;IAAK,CAC/B;GACD,MAAM,eAAe;GAIrB,MAAM,WAAW,OAAO,KACtB,aACD,CAAC;GACF,MAAM,aACJ,aAAa,QACb,aAAa,aAAa,UAAU;AAEtC,UACE,qBAAC,uBACC,oBAAC;IAEC,WAAU;cAEV,oBAAC;KAAG,WAAU;eAAU,OAAO,IAAI;MAAM;MAHpC,KAAK,UAAU,WAAW,CAI5B,EACL,oBAAC;IAAoC,WAAU;cAC7C,oBAAC;KACC,SAAS;KACT,SAAS;KACG;KACG;MACf;MANK,KAAK,UAAU,WAAW,CAO9B,KAdQ,IAeJ;IAGhB;GACK;EACF,GACP;AAGL,IAAK,gEAAL;AACE;AACA;;EAFG;AAKL,MAAMC,sBAA2C,EAC/C,SACA,SACA,YACA,iBACI;CACJ,MAAM,CAAC,MAAM,WAAW,SAAS,iBAAiB,KAAK;CACvD,MAAMC,kBAAgB,CACpB;EACE,SAAS;EACT,OAAO,iBAAiB;EACzB,EACD;EACE,SAAS;EACT,OAAO,iBAAiB;EACzB,CACF;CACD,MAAMF,eAA0B,CAAC,GAAG,SAAS,EAAE,MAAM,SAAS,UAAU,CAAC;CAEzE,MAAM,UAAW,QACf,SAAS;AAGX,QACE,qBAAC;EAAI,WAAU;aACb,oBAAC;GACC,SAASE;GACT,OAAO;GACP,UAAU;GACV,OAAO,oBAAoB;GAC3B,MAAM,mBAAmB;GACzB,WAAU;IACV,EAEF,oBAAC;GACC,SAAS;GACT,SAAS;GACG;GACZ,eACE,SAAS,iBAAiB,WACrB,cACC,oBAAC;IAA6B;cAC3BC;KACgB,GAErB;IAEN;GACE;;AAIV,MAAMC,uBAA4C,EAChD,SACA,SACA,GAAG,YACC;CACJ,MAAMJ,eAA0B,CAAC,GAAG,SAAS,EAAE,MAAM,SAAS,WAAW,CAAC;CAE1E,MAAM,UAAW,QACf,SAAS;AAGX,QACE,oBAAC;EAAI,WAAU;YACb,oBAAC;GACC,SAAS;GACT,SAAS;GACT,GAAI;IACJ;GACE;;AAIV,MAAMK,kBAAuC,EAC3C,SACA,SACA,GAAG,YACC;CACJ,MAAML,eAA0B,CAAC,GAAG,SAAS,EAAE,MAAM,SAAS,MAAM,CAAC;CAErE,MAAM,UAAW,QAAwB,SAAS;CAClD,MAAM,EAAE,YAAY;AAEpB,QACE,qBAAC;EAAI,WAAU;aACb,qBAAC;GAAK,WAAU;cAAwB,SAAQ;IAAQ,EACxD,oBAAC;GACC,SAAS;GACT,SAAS;GACT,GAAI;IACJ;GACE;;AAIV,MAAMM,oBAAyC,EAC7C,SACA,YACA,eACA,SACA,GAAG,YACC;CACJ,MAAM,EAAE,qBAAqB,kBAAkB;CAE/C,MAAM,UAAW,QAAgB,SAAS;CAC1C,MAAM,kBAAkB,CAAC,GAAG,SAAS,EAAE,MAAM,SAAS,QAAQ,CAAC;AAE/D,QACE,qBAAC;EAAI,WAAU;;GACb,oBAAC,mBAAM,mBAAsB;GAC7B,oBAAChB;IACC,cAAW;IACX,MAAK;IACL,SAAS,aAAa;IACtB,GAAI;IACJ,kBAAkB,aAAa;AAC7B,sBACE,WAAW,SACX;MACE,GAAG;MACH,eAAe,OAAO,SAAS;MAChC,EACD,gBACD;;cAGF,QAAQ,iBAAiB;KACH;GAEzB,oBAAC,mBAAM,oBAAuB;GAC9B,oBAACA;IACC,cAAW;IACX,MAAK;IACL,SAAS,aAAa;IACtB,GAAI;IACJ,kBAAkB,aAAa;AAC7B,sBACE,WAAW,SACX;MACE,GAAG;MACH,MAAM,aAAa,KAAK,WAAW;MACpC,EACD,gBACD;;cAGF,QAAQ,QAAQ;KACM;;GACrB;;AAIV,MAAaiB,cAAmC,EAC9C,SACA,SACA,YACA,eACA,iBACI;CACJ,MAAM,EAAE,mBAAmB,YAAY,kBAAkB;CACzD,MAAM,WAAW,YAAY,QAAQ;AAErC,KAAI,aAAa,SAAS,UACxB,QACE,8CACE,oBAAC,oBAAK,iBAAmB,EACzB,oBAAC;EAAK,WAAU;YAAwB;GAAsB,IAC7D;AAIP,KAAI,aAAa,SAAS,OACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,YACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,YACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,UACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,OACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,UACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,SACxB,QACE,oBAAC;EACa;EACH;EACA;EACG;GACZ;AAIN,KAAI,aAAa,SAAS,KACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,MACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,OACxB,QACE,oBAAC;EACa;EACG;EACN;EACA;GACT;AAIN,KAAI,aAAa,SAAS,OACxB,QACE,oBAAC;EAAI,WAAU;YACb,oBAAC;GACa;GACH;GACT,MAAK;GACL,cAAW;aAEV;IACkB;GACjB;AAIV,KAAI,aAAa,SAAS,KACxB,QACE,oBAAC;EAAI,WAAU;YACZ,OAAO,kBAAkB,aACxB,cAAc,QAAkB,GAEhC,oBAAC;GACC,SAAS,aAAa;GACtB,cAAW;GACF;GACG;aAEX;IACqB;GAEtB;AAIV,KAAI,aAAa,SAAS,QACxB,QACE,oBAAC;EAAI,WAAU;YACb,oBAAC;GACa;GACH;GACT,OAAO;IACP;GACE;AAIV,QACE,qBAAC;EAAI,WAAU;;GAAa;GAEzB,KAAK,UAAU,SAAS,MAAM,EAAE;GAChC,KAAK,UAAU,SAAS,MAAM,EAAE;GAAC;GACtB;;GACR;;AAIV,MAAaC,uBAA4C,UACvD,oBAAC;CACC;CACA,YAAW;CACX,WAAU;CACV,aAAY;WAEZ,oBAAC,cAAW,GAAI,QAAS;EACf"}
1
+ {"version":3,"file":"TextEditor.mjs","names":["traceKeys: string[]","ContentEditorTextArea: FC<ContentEditorTextAreaProps>","ContentEditorTextAreaBase","editedContent","ContentEditorInput: FC<ContentEditorInputProps>","ContentEditorInputBase","ContentEditorToggle: FC<ContentEditorToggleProps>","TranslationTextEditor: FC<TextEditorProps>","content: any","EnumerationTextEditor: FC<TextEditorProps>","ConditionTextEditor: FC<TextEditorProps>","GenderTextEditor: FC<TextEditorProps>","ArrayTextEditor: FC<TextEditorProps>","newKeyPath: KeyPath[]","ObjectTextEditor: FC<TextEditorProps>","childKeyPath: KeyPath[]","MarkdownTextEditor: FC<TextEditorProps>","toggleContent","content","InsertionTextEditor: FC<TextEditorProps>","FileTextEditor: FC<TextEditorProps>","NestedTextEditor: FC<TextEditorProps>","TextEditor: FC<TextEditorProps>","TextEditorContainer: FC<TextEditorProps>"],"sources":["../../../../../src/components/DictionaryFieldEditor/ContentEditorView/TextEditor.tsx"],"sourcesContent":["'use client';\n\nimport {\n type ConditionContent,\n type EnumerationContent,\n type FileContent,\n type GenderContent,\n getEmptyNode,\n getLocaleName,\n getNodeType,\n type InsertionContent,\n type MarkdownContent,\n type TranslationContent,\n} from '@intlayer/core';\nimport { useConfiguration, useEditedContent } from '@intlayer/editor-react';\nimport {\n type ContentNode,\n type Dictionary,\n type KeyPath,\n type Locale,\n type LocalesValues,\n NodeType,\n} from '@intlayer/types';\nimport { Plus, Trash, WandSparkles } from 'lucide-react';\nimport { type FC, Fragment, type ReactNode, useState } from 'react';\nimport { useIntlayer, useLocale } from 'react-intlayer';\nimport { useAuditContentDeclarationField } from '../../../hooks';\nimport { renameKey } from '../../../utils/object';\nimport {\n Button,\n ButtonColor,\n ButtonSize,\n ButtonTextAlign,\n ButtonVariant,\n} from '../../Button';\nimport { Container } from '../../Container';\nimport {\n ContentEditorInput as ContentEditorInputBase,\n type ContentEditorInputProps as ContentEditorInputPropsBase,\n} from '../../ContentEditor/ContentEditorInput';\nimport {\n ContentEditorTextArea as ContentEditorTextAreaBase,\n type ContentEditorTextAreaProps as ContentEditorTextAreaPropsBase,\n} from '../../ContentEditor/ContentEditorTextArea';\nimport { InputVariant } from '../../Input';\nimport { Label } from '../../Label';\nimport { useLocaleSwitcherContent } from '../../LocaleSwitcherContentDropDown';\nimport { MarkdownRenderer } from '../../MarkDownRender';\nimport {\n SwitchSelector,\n type SwitchSelectorChoices,\n SwitchSelectorColor,\n type SwitchSelectorProps,\n SwitchSelectorSize,\n} from '../../SwitchSelector';\nimport { EnumKeyInput } from '../EnumKeyInput';\n\nexport const traceKeys: string[] = ['filePath', 'id', 'nodeType'];\n\ntype ContentEditorTextAreaProps = Omit<\n ContentEditorTextAreaPropsBase,\n 'onContentChange'\n> & {\n keyPath: KeyPath[];\n dictionary: Dictionary;\n};\n\nconst ContentEditorTextArea: FC<ContentEditorTextAreaProps> = ({\n keyPath,\n dictionary,\n ...props\n}) => {\n const { editedContent, addEditedContent } = useEditedContent();\n const configuration = useConfiguration();\n const { mutate: auditContentDeclarationField, isPending: isAuditing } =\n useAuditContentDeclarationField();\n\n return (\n <ContentEditorTextAreaBase\n variant={InputVariant.DEFAULT}\n onContentChange={(newValue) =>\n addEditedContent(dictionary.localId!, newValue, keyPath)\n }\n additionalButtons={\n <Button\n Icon={WandSparkles}\n label=\"Audit\"\n variant={ButtonVariant.HOVERABLE}\n size={ButtonSize.ICON_SM}\n color={ButtonColor.TEXT}\n className=\"cursor-pointer hover:scale-110\"\n isLoading={isAuditing}\n onClick={() => {\n auditContentDeclarationField(\n {\n fileContent: JSON.stringify({\n ...dictionary,\n ...(editedContent?.[dictionary.localId!] ?? {}),\n }),\n keyPath,\n locales: configuration.internationalization.locales ?? [],\n aiOptions: {\n apiKey: configuration.ai?.apiKey,\n model: configuration.ai?.model,\n temperature: configuration.ai?.temperature,\n },\n },\n {\n onSuccess: (response) => {\n if (!response?.data) return;\n\n try {\n const editedContent = response.data.fileContent as string;\n\n addEditedContent(\n dictionary.localId!,\n editedContent,\n keyPath\n );\n } catch (error) {\n console.error(error);\n }\n },\n }\n );\n }}\n />\n }\n {...props}\n />\n );\n};\n\ntype ContentEditorInputProps = Omit<\n ContentEditorInputPropsBase,\n 'onContentChange'\n> & {\n keyPath: KeyPath[];\n dictionary: Dictionary;\n};\n\nconst ContentEditorInput: FC<ContentEditorInputProps> = ({\n keyPath,\n dictionary,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n\n return (\n <ContentEditorInputBase\n variant={InputVariant.DEFAULT}\n onContentChange={(newValue) =>\n addEditedContent(dictionary.localId!, newValue, keyPath)\n }\n {...props}\n />\n );\n};\n\nconst toggleContent = [\n {\n content: 'False',\n value: false,\n },\n {\n content: 'True',\n value: true,\n },\n] as SwitchSelectorChoices<boolean>;\n\ntype ContentEditorToggleProps = SwitchSelectorProps & {\n dictionary: Dictionary;\n keyPath: KeyPath[];\n};\n\nconst ContentEditorToggle: FC<ContentEditorToggleProps> = ({\n dictionary,\n keyPath,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n\n return (\n <SwitchSelector\n choices={toggleContent}\n value={true}\n onChange={(value) =>\n addEditedContent(dictionary.localId!, value, keyPath)\n }\n color={SwitchSelectorColor.TEXT}\n size={SwitchSelectorSize.SM}\n {...props}\n />\n );\n};\n\nexport type TextEditorProps = {\n dictionary: Dictionary;\n keyPath: KeyPath[];\n section: ContentNode;\n isDarkMode?: boolean;\n renderSection?: (content: string) => ReactNode;\n onContentChange?: (newValue: string) => void;\n};\n\nconst TranslationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}: TextEditorProps) => {\n const { locale, defaultLocale } = useLocale();\n const { selectedLocales, availableLocales } = useLocaleSwitcherContent();\n\n const sectionContent = (section as TranslationContent<string>)[\n NodeType.Translation\n ] as Record<Locale, string>;\n\n const sectionContentKeys = Object.keys(sectionContent) as LocalesValues[];\n\n const isFiltered = availableLocales.length > selectedLocales.length;\n\n const localesList = isFiltered\n ? selectedLocales\n : // If the translation include content in other locales, we display all of them\n [...new Set([...availableLocales, ...sectionContentKeys])];\n\n const content: any = (section as TranslationContent<string>)[\n NodeType.Translation\n ];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {localesList.map((translationKey) => (\n <Fragment key={translationKey}>\n <tr className=\"mt-2 w-full p-2 text-xs\">\n <td className=\"w-full\">\n {getLocaleName(translationKey, locale)}\n </td>\n </tr>\n <tr className=\"flex\">\n <td className=\"w-full\">\n <TextEditorContainer\n section={\n content[translationKey] ??\n getEmptyNode(content[defaultLocale])\n }\n keyPath={[\n ...keyPath,\n { type: NodeType.Translation, key: translationKey },\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n ))}\n </tbody>\n </table>\n );\n};\n\nconst EnumerationTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const { addEditedContent } = useEditedContent();\n const { addNewEnumeration, removeEnumeration } =\n useIntlayer('navigation-view');\n\n const content = (section as EnumerationContent<string>)[NodeType.Enumeration];\n const firstKey = Object.keys(content)[0] as keyof typeof content;\n\n return (\n <div className=\"flex flex-col gap-2\">\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {Object.keys(\n (section as EnumerationContent<ContentNode>)[NodeType.Enumeration]\n ).map((enumKey) => {\n const childrenKeyPath = [\n ...keyPath,\n { type: NodeType.Enumeration },\n ] as KeyPath[];\n return (\n <Fragment key={enumKey}>\n <tr className=\"mt-2 w-full\">\n <td className=\"w-full\">\n <div className=\"flex flex-1\">\n <Button\n label={removeEnumeration.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.TEXT}\n Icon={Trash}\n className=\"ml-auto\"\n onClick={() =>\n addEditedContent(\n dictionary.localId!,\n undefined,\n childrenKeyPath\n )\n }\n >\n {removeEnumeration.text}\n </Button>\n </div>\n </td>\n </tr>\n <tr className=\"w-full p-2\">\n <td className=\"w-full\">\n <EnumKeyInput\n value={enumKey}\n onChange={(value) => {\n const preValueContent = (\n section as EnumerationContent<string>\n )[NodeType.Enumeration];\n const newValueContent = renameKey(\n preValueContent,\n enumKey as keyof typeof preValueContent,\n value\n );\n const newValue = {\n ...(section as EnumerationContent<string>),\n [NodeType.Enumeration]: newValueContent,\n };\n\n addEditedContent(\n dictionary.localId!,\n newValue,\n keyPath\n );\n }}\n />\n </td>\n </tr>\n <tr className=\"block w-full\">\n <td className=\"w-full\">\n <TextEditor\n section={\n content[enumKey as keyof typeof content] ??\n getEmptyNode(content[firstKey])\n }\n keyPath={childrenKeyPath}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n })}\n </tbody>\n </table>\n\n <Button\n label={addNewEnumeration.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.NEUTRAL}\n textAlign={ButtonTextAlign.LEFT}\n isFullWidth\n onClick={() =>\n addEditedContent(\n dictionary.localId!,\n getEmptyNode(content[firstKey]) ?? '',\n [...keyPath, { type: NodeType.Enumeration, key: 'unknown' }]\n )\n }\n Icon={Plus}\n className=\"m-2\"\n >\n {addNewEnumeration.text}\n </Button>\n </div>\n );\n};\n\nconst ConditionTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const content = (section as ConditionContent<string>)[NodeType.Condition];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {['true', 'false', 'fallback'].map((condKey) => (\n <Fragment key={condKey}>\n <tr key={condKey} className=\"mt-2 block w-full p-2 text-xs\">\n <td className=\"w-full\">{String(condKey)}</td>\n </tr>\n <tr key={condKey} className=\"block w-full\">\n <td className=\"w-full\">\n <TextEditorContainer\n section={\n content[condKey as keyof typeof content] ??\n getEmptyNode(content.true)\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Condition,\n key: condKey,\n } as KeyPath,\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n ))}\n </tbody>\n </table>\n );\n};\n\nconst GenderTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const content = (section as GenderContent<string>)[NodeType.Gender];\n\n return (\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {['male', 'female', 'fallback'].map((condKey) => (\n <Fragment key={condKey}>\n <tr key={condKey} className=\"mt-2 block w-full p-2 text-xs\">\n <td className=\"w-full\">{String(condKey)}</td>\n </tr>\n <tr key={condKey} className=\"block w-full\">\n <td className=\"w-full\">\n <TextEditorContainer\n section={\n content[condKey as keyof typeof content] ??\n getEmptyNode(content.male)\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Gender,\n key: condKey,\n } as KeyPath,\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n ))}\n </tbody>\n </table>\n );\n};\n\nconst ArrayTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => {\n const { addEditedContent } = useEditedContent();\n const { addNewElement, removeElement } = useIntlayer('navigation-view');\n\n return (\n <div className=\"flex flex-col gap-2\">\n <table className=\"w-full\">\n <tbody className=\"flex w-full flex-col gap-2\">\n {(section as unknown as ContentNode[]).map((subSection, index) => (\n <Fragment key={JSON.stringify(subSection)}>\n <tr className=\"mt-2 w-full p-2\">\n <td className=\"w-full\">\n <div className=\"flex w-full items-center justify-between gap-2\">\n <span className=\"text-xs\">{String(index)}</span>\n <Button\n label={removeElement.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.NEUTRAL}\n className=\"ml-auto\"\n textAlign={ButtonTextAlign.LEFT}\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: (section as unknown as ContentNode[]).length,\n },\n ];\n addEditedContent(\n dictionary.localId!,\n undefined,\n newKeyPath\n );\n }}\n Icon={Trash}\n >\n {removeElement.text}\n </Button>\n </div>\n </td>\n </tr>\n\n <tr className=\"block w-full\">\n <td className=\"w-full\">\n <TextEditorContainer\n section={\n subSection ??\n getEmptyNode((section as unknown as ContentNode[])[0])\n }\n keyPath={[\n ...keyPath,\n {\n type: NodeType.Array,\n key: index,\n },\n ]}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n ))}\n </tbody>\n </table>\n <Button\n label={addNewElement.label.value}\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.NEUTRAL}\n textAlign={ButtonTextAlign.LEFT}\n isFullWidth\n onClick={() => {\n const newKeyPath: KeyPath[] = [\n ...keyPath,\n {\n type: NodeType.Array,\n key: (section as unknown as ContentNode[]).length,\n },\n ];\n addEditedContent(\n dictionary.localId!,\n getEmptyNode((section as unknown as ContentNode[])[0]) ?? '',\n newKeyPath,\n false\n );\n }}\n Icon={Plus}\n >\n {addNewElement.text}\n </Button>\n </div>\n );\n};\n\nconst ObjectTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n}) => (\n <>\n <table className=\"w-full\">\n <tbody className=\"flex flex-col gap-2\">\n {Object.keys(section as unknown as Record<string, ContentNode>).map(\n (key) => {\n const childKeyPath: KeyPath[] = [\n ...keyPath,\n { type: NodeType.Object, key },\n ];\n const typedSection = section as unknown as Record<\n string,\n ContentNode\n >;\n const firstKey = Object.keys(\n typedSection\n )[0] as keyof typeof section;\n const subSection =\n typedSection[key as keyof typeof section] ??\n getEmptyNode(typedSection[firstKey]);\n\n return (\n <Fragment key={key}>\n <tr\n key={JSON.stringify(subSection)}\n className=\"mt-2 p-2 text-xs\"\n >\n <td className=\"w-full\">{String(key)}</td>\n </tr>\n <tr key={JSON.stringify(subSection)} className=\"block w-full\">\n <td className=\"w-full\">\n <TextEditor\n section={subSection}\n keyPath={childKeyPath}\n dictionary={dictionary}\n renderSection={renderSection}\n />\n </td>\n </tr>\n </Fragment>\n );\n }\n )}\n </tbody>\n </table>\n </>\n);\n\nenum MarkdownViewMode {\n Edit,\n Preview,\n}\n\nconst MarkdownTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n isDarkMode,\n}) => {\n const [mode, setMode] = useState(MarkdownViewMode.Edit);\n const toggleContent = [\n {\n content: 'Edit',\n value: MarkdownViewMode.Edit,\n },\n {\n content: 'Preview',\n value: MarkdownViewMode.Preview,\n },\n ] as SwitchSelectorChoices<MarkdownViewMode>;\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeType.Markdown }];\n\n const content = (section as MarkdownContent<ContentNode>)[\n NodeType.Markdown\n ] as ContentNode;\n\n return (\n <div className=\"flex w-full flex-col justify-center gap-6 p-2\">\n <SwitchSelector\n choices={toggleContent}\n value={mode}\n onChange={setMode}\n color={SwitchSelectorColor.TEXT}\n size={SwitchSelectorSize.SM}\n className=\"ml-auto\"\n />\n\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n dictionary={dictionary}\n renderSection={\n mode === MarkdownViewMode.Preview\n ? (content) => (\n <MarkdownRenderer isDarkMode={isDarkMode}>\n {content}\n </MarkdownRenderer>\n )\n : undefined\n }\n />\n </div>\n );\n};\n\nconst InsertionTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n ...props\n}) => {\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeType.Insertion }];\n\n const content = (section as InsertionContent<ContentNode>)[\n NodeType.Insertion\n ];\n\n return (\n <div className=\"flex w-full flex-col justify-center gap-6 p-2\">\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n {...props}\n />\n </div>\n );\n};\n\nconst FileTextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n ...props\n}) => {\n const childKeyPath: KeyPath[] = [...keyPath, { type: NodeType.File }];\n\n const fileUrl = (section as FileContent)[NodeType.File];\n const { content } = section as FileContent;\n\n return (\n <div className=\"flex w-full flex-col justify-center gap-6 p-2\">\n <span className=\"text-neutral text-sm\">{fileUrl} </span>\n <TextEditorContainer\n section={content}\n keyPath={childKeyPath}\n {...props}\n />\n </div>\n );\n};\n\nconst NestedTextEditor: FC<TextEditorProps> = ({\n keyPath,\n dictionary,\n renderSection,\n section,\n ...props\n}) => {\n const { addEditedContent } = useEditedContent();\n\n const content = (section as any)[NodeType.Nested];\n const childrenKeyPath = [...keyPath, { type: NodeType.Nested }] as KeyPath[];\n\n return (\n <div className=\"flex w-full flex-col gap-4 p-2\">\n <Label>Dictionary key</Label>\n <ContentEditorInputBase\n aria-label=\"Edit field\"\n type=\"text\"\n variant={InputVariant.DEFAULT}\n {...props}\n onContentChange={(newValue) => {\n addEditedContent(\n dictionary.localId!,\n {\n ...content,\n dictionaryKey: String(newValue),\n },\n childrenKeyPath\n );\n }}\n >\n {content.dictionaryKey ?? ''}\n </ContentEditorInputBase>\n\n <Label>Path (optional)</Label>\n <ContentEditorInputBase\n aria-label=\"Edit field\"\n type=\"text\"\n variant={InputVariant.DEFAULT}\n {...props}\n onContentChange={(newValue) => {\n addEditedContent(\n dictionary.localId!,\n {\n ...content,\n path: newValue !== '' ? newValue : undefined,\n },\n childrenKeyPath\n );\n }}\n >\n {content.path ?? ''}\n </ContentEditorInputBase>\n </div>\n );\n};\n\nexport const TextEditor: FC<TextEditorProps> = ({\n section,\n keyPath,\n dictionary,\n renderSection,\n isDarkMode,\n}) => {\n const { tsxNotEditable } = useIntlayer('navigation-view');\n const nodeType = getNodeType(section);\n\n if (nodeType === NodeType.ReactNode) {\n return (\n <div className=\"flex w-full flex-col gap-2\">\n <span>(React Node)</span>\n <span className=\"flex text-neutral text-xs\">{tsxNotEditable}</span>\n </div>\n );\n }\n\n if (nodeType === NodeType.Nested) {\n return (\n <NestedTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Translation) {\n return (\n <TranslationTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Enumeration) {\n return (\n <EnumerationTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Condition) {\n return (\n <ConditionTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Gender) {\n return (\n <GenderTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Insertion) {\n return (\n <InsertionTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Markdown) {\n return (\n <MarkdownTextEditor\n dictionary={dictionary}\n keyPath={keyPath}\n section={section}\n isDarkMode={isDarkMode}\n />\n );\n }\n\n if (nodeType === NodeType.File) {\n return (\n <FileTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Array) {\n return (\n <ArrayTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Object) {\n return (\n <ObjectTextEditor\n dictionary={dictionary}\n renderSection={renderSection}\n keyPath={keyPath}\n section={section}\n />\n );\n }\n\n if (nodeType === NodeType.Number) {\n return (\n <div className=\"w-full p-2\">\n <ContentEditorInput\n dictionary={dictionary}\n keyPath={keyPath}\n type=\"number\"\n aria-label=\"Edit field\"\n >\n {section as number}\n </ContentEditorInput>\n </div>\n );\n }\n\n if (nodeType === NodeType.Text) {\n return (\n <div className=\"w-full p-2\">\n {typeof renderSection === 'function' ? (\n renderSection(section as string)\n ) : (\n <ContentEditorTextArea\n variant={InputVariant.DEFAULT}\n aria-label=\"Edit field\"\n keyPath={keyPath}\n dictionary={dictionary}\n >\n {section as string}\n </ContentEditorTextArea>\n )}\n </div>\n );\n }\n\n if (nodeType === NodeType.Boolean) {\n return (\n <div className=\"w-full p-2\">\n <ContentEditorToggle\n dictionary={dictionary}\n keyPath={keyPath}\n value={section as boolean}\n />\n </div>\n );\n }\n\n return (\n <div className=\"w-full p-2\">\n Error. Format not supported.\n {JSON.stringify(section, null, 2)}\n {JSON.stringify(keyPath, null, 2)}\n NodeType : {nodeType}\n </div>\n );\n};\n\nexport const TextEditorContainer: FC<TextEditorProps> = (props) => (\n <Container\n border\n background=\"none\"\n className=\"top-6 flex h-full flex-1 flex-col gap-6 overflow-hidden p-2 md:sticky\"\n roundedSize=\"xl\"\n >\n <TextEditor {...props} />\n </Container>\n);\n"],"mappings":"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"}
@@ -3,17 +3,18 @@ import { jsx } from "react/jsx-runtime";
3
3
  import { camelCaseToSentence } from "@intlayer/config/client";
4
4
 
5
5
  //#region src/components/DictionaryFieldEditor/KeyPathBreadcrumb.tsx
6
- const KeyPathBreadcrumb = ({ keyPath, dictionaryKey, onClickKeyPath, locale }) => {
6
+ const KeyPathBreadcrumb = ({ keyPath, dictionaryKey, onClickKeyPath, locale, color, showDictionaryKey = true }) => {
7
7
  return /* @__PURE__ */ jsx(Breadcrumb, {
8
- links: [{
8
+ links: [...showDictionaryKey ? [{
9
9
  text: camelCaseToSentence(dictionaryKey),
10
- onClick: () => onClickKeyPath([])
11
- }, ...keyPath.map((el, index) => ({
12
- onClick: () => onClickKeyPath(keyPath.slice(0, index + 1)),
10
+ onClick: onClickKeyPath ? () => onClickKeyPath([]) : void 0
11
+ }] : [], ...keyPath.map((el, index) => ({
12
+ onClick: onClickKeyPath ? () => onClickKeyPath?.(keyPath.slice(0, index + 1)) : void 0,
13
13
  text: el.key?.toString() ?? ""
14
14
  }))],
15
15
  locale,
16
- elementType: "location"
16
+ elementType: "location",
17
+ color
17
18
  });
18
19
  };
19
20
 
@@ -1 +1 @@
1
- {"version":3,"file":"KeyPathBreadcrumb.mjs","names":["KeyPathBreadcrumb: FC<KeyPathBreadcrumbProps>"],"sources":["../../../../src/components/DictionaryFieldEditor/KeyPathBreadcrumb.tsx"],"sourcesContent":["import { camelCaseToSentence } from '@intlayer/config/client';\nimport type { KeyPath, Locale } from '@intlayer/types';\nimport type { FC } from 'react';\nimport { Breadcrumb, type BreadcrumbLink } from '../Breadcrumb';\n\ntype KeyPathBreadcrumbProps = {\n dictionaryKey: string;\n keyPath: KeyPath[];\n onClickKeyPath: (keyPath: KeyPath[]) => void;\n locale?: Locale;\n};\n\nexport const KeyPathBreadcrumb: FC<KeyPathBreadcrumbProps> = ({\n keyPath,\n dictionaryKey,\n onClickKeyPath,\n locale,\n}) => {\n const formattedKeyPath: BreadcrumbLink[] = [\n {\n text: camelCaseToSentence(dictionaryKey),\n onClick: () => onClickKeyPath([]),\n },\n ...keyPath.map((el, index) => ({\n onClick: () =>\n onClickKeyPath(\n keyPath\n // With keyPath = [{type: NodeType.Object, key: '0'}, {type: NodeType.Array, key: '0'}, {type: NodeType.Object, key: '1'}]\n // If index is 0 -> onFocusKeyPath([{type: NodeType.Object, key: '0'}])\n // If index is 1 -> onFocusKeyPath([{type: NodeType.Object, key: '0'}, {type: NodeType.Array, key: '0'}])\n .slice(0, index + 1)\n ),\n text: el.key?.toString() ?? '',\n })),\n ];\n\n return (\n <Breadcrumb\n links={formattedKeyPath}\n locale={locale}\n elementType=\"location\"\n />\n );\n};\n"],"mappings":";;;;;AAYA,MAAaA,qBAAiD,EAC5D,SACA,eACA,gBACA,aACI;AAmBJ,QACE,oBAAC;EACC,OApBuC,CACzC;GACE,MAAM,oBAAoB,cAAc;GACxC,eAAe,eAAe,EAAE,CAAC;GAClC,EACD,GAAG,QAAQ,KAAK,IAAI,WAAW;GAC7B,eACE,eACE,QAIG,MAAM,GAAG,QAAQ,EAAE,CACvB;GACH,MAAM,GAAG,KAAK,UAAU,IAAI;GAC7B,EAAE,CACJ;EAKW;EACR,aAAY;GACZ"}
1
+ {"version":3,"file":"KeyPathBreadcrumb.mjs","names":["KeyPathBreadcrumb: FC<KeyPathBreadcrumbProps>"],"sources":["../../../../src/components/DictionaryFieldEditor/KeyPathBreadcrumb.tsx"],"sourcesContent":["import { camelCaseToSentence } from '@intlayer/config/client';\nimport type { KeyPath, Locale } from '@intlayer/types';\nimport type { FC } from 'react';\nimport { Breadcrumb, type BreadcrumbLink } from '../Breadcrumb';\nimport type { LinkColor } from '../Link';\n\ntype KeyPathBreadcrumbProps = {\n dictionaryKey: string;\n keyPath: KeyPath[];\n onClickKeyPath?: (keyPath: KeyPath[]) => void;\n locale?: Locale;\n color?: LinkColor | `${LinkColor}`;\n showDictionaryKey?: boolean;\n};\n\nexport const KeyPathBreadcrumb: FC<KeyPathBreadcrumbProps> = ({\n keyPath,\n dictionaryKey,\n onClickKeyPath,\n locale,\n color,\n showDictionaryKey = true,\n}) => {\n const formattedKeyPath: BreadcrumbLink[] = [\n ...(showDictionaryKey\n ? [\n {\n text: camelCaseToSentence(dictionaryKey),\n onClick: onClickKeyPath ? () => onClickKeyPath([]) : undefined,\n },\n ]\n : []),\n ...keyPath.map((el, index) => ({\n onClick: onClickKeyPath\n ? () =>\n // With keyPath = [{type: NodeType.Object, key: '0'}, {type: NodeType.Array, key: '0'}, {type: NodeType.Object, key: '1'}]\n // If index is 0 -> onFocusKeyPath([{type: NodeType.Object, key: '0'}])\n // If index is 1 -> onFocusKeyPath([{type: NodeType.Object, key: '0'}, {type: NodeType.Array, key: '0'}])\n onClickKeyPath?.(keyPath.slice(0, index + 1))\n : undefined,\n\n text: el.key?.toString() ?? '',\n })),\n ];\n\n return (\n <Breadcrumb\n links={formattedKeyPath}\n locale={locale}\n elementType=\"location\"\n color={color}\n />\n );\n};\n"],"mappings":";;;;;AAeA,MAAaA,qBAAiD,EAC5D,SACA,eACA,gBACA,QACA,OACA,oBAAoB,WAChB;AAuBJ,QACE,oBAAC;EACC,OAxBuC,CACzC,GAAI,oBACA,CACE;GACE,MAAM,oBAAoB,cAAc;GACxC,SAAS,uBAAuB,eAAe,EAAE,CAAC,GAAG;GACtD,CACF,GACD,EAAE,EACN,GAAG,QAAQ,KAAK,IAAI,WAAW;GAC7B,SAAS,uBAKH,iBAAiB,QAAQ,MAAM,GAAG,QAAQ,EAAE,CAAC,GAC/C;GAEJ,MAAM,GAAG,KAAK,UAAU,IAAI;GAC7B,EAAE,CACJ;EAKW;EACR,aAAY;EACL;GACP"}
@@ -1,6 +1,9 @@
1
+ import { TextEditor, TextEditorContainer, traceKeys } from "./ContentEditorView/TextEditor.mjs";
2
+ import { KeyPathBreadcrumb } from "./KeyPathBreadcrumb.mjs";
3
+ import { ContentEditor } from "./ContentEditor.mjs";
1
4
  import { DictionaryCreationForm } from "./DictionaryCreationForm/DictionaryCreationForm.mjs";
2
5
  import { DictionaryFieldEditor } from "./DictionaryFieldEditor.mjs";
3
6
  import { VersionSwitcherProvider, useVersionSwitcher } from "./VersionSwitcherDropDown/VersionSwitcherContext.mjs";
4
7
  import { VersionSwitcher } from "./VersionSwitcherDropDown/VersionSwitcher.mjs";
5
8
 
6
- export { DictionaryCreationForm, DictionaryFieldEditor, VersionSwitcher, VersionSwitcherProvider, useVersionSwitcher };
9
+ export { ContentEditor, DictionaryCreationForm, DictionaryFieldEditor, KeyPathBreadcrumb, TextEditor, TextEditorContainer, VersionSwitcher, VersionSwitcherProvider, traceKeys, useVersionSwitcher };
@@ -97,7 +97,7 @@ const Trigger = ({ children, identifier, className, label, ...props }) => /* @__
97
97
  children
98
98
  });
99
99
  /**
100
- * Alignment options for the dropdown panel relative to the trigger
100
+ * Horizontal alignment options for the dropdown panel relative to the trigger
101
101
  */
102
102
  let DropDownAlign = /* @__PURE__ */ function(DropDownAlign$1) {
103
103
  /** Align panel to the start (left in LTR, right in RTL) of the trigger */
@@ -107,6 +107,16 @@ let DropDownAlign = /* @__PURE__ */ function(DropDownAlign$1) {
107
107
  return DropDownAlign$1;
108
108
  }({});
109
109
  /**
110
+ * Vertical alignment options for the dropdown panel relative to the trigger
111
+ */
112
+ let DropDownYAlign = /* @__PURE__ */ function(DropDownYAlign$1) {
113
+ /** Position panel below the trigger (default) */
114
+ DropDownYAlign$1["BELOW"] = "below";
115
+ /** Position panel above the trigger */
116
+ DropDownYAlign$1["ABOVE"] = "above";
117
+ return DropDownYAlign$1;
118
+ }({});
119
+ /**
110
120
  * DropDown.Panel Component
111
121
  *
112
122
  * The content area that appears when the dropdown is triggered.
@@ -133,6 +143,11 @@ let DropDownAlign = /* @__PURE__ */ function(DropDownAlign$1) {
133
143
  * <DropDown.Panel identifier="menu" align={DropDownAlign.END} isOverable>
134
144
  * <div>Right-aligned content</div>
135
145
  * </DropDown.Panel>
146
+ *
147
+ * // Panel opening above the trigger
148
+ * <DropDown.Panel identifier="menu" yAlign={DropDownYAlign.ABOVE} isOverable>
149
+ * <div>Content appears above</div>
150
+ * </DropDown.Panel>
136
151
  * ```
137
152
  *
138
153
  * @component
@@ -142,8 +157,8 @@ let DropDownAlign = /* @__PURE__ */ function(DropDownAlign$1) {
142
157
  * - Keyboard navigation support when isFocusable is enabled
143
158
  * - Screen reader announcements for state changes
144
159
  */
145
- const Panel = ({ children, isHidden = void 0, isOverable = false, isFocusable = false, align = DropDownAlign.START, identifier, className, ...props }) => /* @__PURE__ */ jsx("div", {
146
- className: cn("absolute top-[calc(100%+0.5rem)] z-100 min-w-full", align === DropDownAlign.START && "left-0", align === DropDownAlign.END && "right-0", className),
160
+ const Panel = ({ children, isHidden = void 0, isOverable = false, isFocusable = false, align = DropDownAlign.START, yAlign = DropDownYAlign.BELOW, identifier, className, ...props }) => /* @__PURE__ */ jsx("div", {
161
+ className: cn("absolute z-100 min-w-full", align === DropDownAlign.START && "left-0", align === DropDownAlign.END && "right-0", yAlign === DropDownYAlign.BELOW && "top-[calc(100%+0.5rem)]", yAlign === DropDownYAlign.ABOVE && "bottom-[calc(100%+0.5rem)]", className),
147
162
  "aria-hidden": isHidden,
148
163
  role: "region",
149
164
  "aria-labelledby": `dropdown-trigger-${identifier}`,
@@ -159,5 +174,5 @@ DropDown.Trigger = Trigger;
159
174
  DropDown.Panel = Panel;
160
175
 
161
176
  //#endregion
162
- export { DropDown, DropDownAlign };
177
+ export { DropDown, DropDownAlign, DropDownYAlign };
163
178
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["DropDown: DropDownType","Trigger: FC<TriggerProps>","Panel: FC<PanelProps>"],"sources":["../../../../src/components/DropDown/index.tsx"],"sourcesContent":["import type { FC, HTMLAttributes } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Button, type ButtonProps } from '../Button';\nimport { MaxHeightSmoother } from '../MaxHeightSmoother';\n\n/**\n * Props for the DropDown component\n */\nexport interface DropDownProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Unique identifier that links the trigger and panel for accessibility.\n * This is used to generate proper ARIA attributes.\n * @example \"user-menu\"\n * @example \"language-selector\"\n */\n identifier: string;\n}\n\nexport type DropDownType = FC<DropDownProps> & {\n Trigger: FC<TriggerProps>;\n Panel: FC<PanelProps>;\n};\n\n/**\n * DropDown Component\n *\n * A compound component that provides dropdown/popover functionality with flexible trigger mechanisms.\n * Supports hover, focus, and controlled visibility states with proper accessibility features.\n *\n * @example\n * ```tsx\n * // Basic hover dropdown\n * <DropDown identifier=\"menu\">\n * <DropDown.Trigger identifier=\"menu\">\n * Open Menu\n * </DropDown.Trigger>\n * <DropDown.Panel identifier=\"menu\" isOverable>\n * <div>Menu content</div>\n * </DropDown.Panel>\n * </DropDown>\n *\n * // Focus-based dropdown for accessibility\n * <DropDown identifier=\"accessible-menu\">\n * <DropDown.Trigger identifier=\"accessible-menu\">\n * Keyboard Accessible Menu\n * </DropDown.Trigger>\n * <DropDown.Panel identifier=\"accessible-menu\" isFocusable>\n * <div>Accessible content</div>\n * </DropDown.Panel>\n * </DropDown>\n *\n * // Controlled dropdown\n * <DropDown identifier=\"controlled\">\n * <DropDown.Trigger identifier=\"controlled\">\n * Controlled Menu\n * </DropDown.Trigger>\n * <DropDown.Panel identifier=\"controlled\" isHidden={!isOpen}>\n * <div>Controlled content</div>\n * </DropDown.Panel>\n * </DropDown>\n * ```\n *\n * @component\n * @accessibility\n * - Uses proper ARIA attributes (aria-haspopup, aria-labelledby, etc.)\n * - Supports keyboard navigation with focus management\n * - Screen reader compatible with proper role and labeling\n * - Maintains focus trap within dropdown when needed\n */\nexport const DropDown: DropDownType = ({\n children,\n className,\n identifier,\n ...props\n}) => (\n <div\n className={cn(`group/dropdown relative flex`, className)}\n aria-label={`DropDown ${identifier}`}\n id={`dropdown-container-${identifier}`}\n {...props}\n >\n {children}\n </div>\n);\n\n/**\n * Props for the DropDown.Trigger component\n */\nexport interface TriggerProps extends Partial<ButtonProps> {\n /**\n * Unique identifier that matches the parent DropDown identifier\n * @example \"user-menu\"\n */\n identifier: string;\n}\n\n/**\n * DropDown.Trigger Component\n *\n * The clickable/focusable element that controls the dropdown panel visibility.\n * Built on top of the Button component with enhanced dropdown-specific behaviors.\n *\n * @example\n * ```tsx\n * <DropDown.Trigger identifier=\"menu\">\n * <div>Click to open</div>\n * </DropDown.Trigger>\n * ```\n *\n * @component\n * @accessibility\n * - Automatically generates appropriate ARIA attributes\n * - Maintains proper focus management across browsers\n * - Works with keyboard navigation (Tab, Enter, Space)\n * - Announces dropdown state to screen readers\n *\n * @note Don't nest Button components inside the Trigger - it's already a button\n */\nconst Trigger: FC<TriggerProps> = ({\n children,\n identifier,\n className,\n label,\n ...props\n}) => (\n <Button\n className={cn([\n 'w-full cursor-pointer',\n 'group-focus-within/dropdown:bg-current/20 group-focus-within/dropdown:ring-4',\n className,\n ])}\n label={label ?? `Open panel ${identifier}`}\n aria-haspopup=\"true\"\n aria-controls={`dropdown-panel-${identifier}`}\n id={`dropdown-trigger-${identifier}`}\n onClick={(e) => {\n // Ensure focus behavior is consistent across all mobile browsers\n (e.currentTarget as HTMLButtonElement).focus();\n }}\n variant=\"none\"\n {...props}\n >\n {children}\n </Button>\n);\n\n/**\n * Alignment options for the dropdown panel relative to the trigger\n */\nexport enum DropDownAlign {\n /** Align panel to the start (left in LTR, right in RTL) of the trigger */\n START = 'start',\n /** Align panel to the end (right in LTR, left in RTL) of the trigger */\n END = 'end',\n}\n\n/**\n * Props for the DropDown.Panel component\n */\nexport interface PanelProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Whether the panel should be visible when the trigger is focused.\n * Enables keyboard accessibility for the dropdown.\n * @default false\n */\n isFocusable?: boolean;\n\n /**\n * Controls panel visibility explicitly.\n * - `true`: Panel is hidden\n * - `false`: Panel is visible\n * - `undefined`: Panel visibility controlled by hover/focus states\n * @default undefined\n */\n isHidden?: boolean;\n\n /**\n * Whether the panel should be visible when hovering over the trigger.\n * Provides quick access via mouse interaction.\n * @default false\n */\n isOverable?: boolean;\n\n /**\n * Unique identifier that matches the parent DropDown identifier\n * @example \"user-menu\"\n */\n identifier: string;\n\n /**\n * Horizontal alignment of the panel relative to the trigger\n * @default DropDownAlign.START\n */\n align?: DropDownAlign | `${DropDownAlign}`;\n}\n\n/**\n * DropDown.Panel Component\n *\n * The content area that appears when the dropdown is triggered.\n * Supports multiple trigger methods (hover, focus, controlled) with smooth animations.\n *\n * @example\n * ```tsx\n * // Hover-triggered panel\n * <DropDown.Panel identifier=\"menu\" isOverable>\n * <div>Content appears on hover</div>\n * </DropDown.Panel>\n *\n * // Focus-triggered panel (accessible)\n * <DropDown.Panel identifier=\"menu\" isFocusable>\n * <div>Content appears on focus</div>\n * </DropDown.Panel>\n *\n * // Controlled panel\n * <DropDown.Panel identifier=\"menu\" isHidden={!isOpen}>\n * <div>Content visibility controlled externally</div>\n * </DropDown.Panel>\n *\n * // Right-aligned panel\n * <DropDown.Panel identifier=\"menu\" align={DropDownAlign.END} isOverable>\n * <div>Right-aligned content</div>\n * </DropDown.Panel>\n * ```\n *\n * @component\n * @accessibility\n * - Proper ARIA attributes (role, aria-labelledby, aria-hidden)\n * - Smooth height transitions with MaxHeightSmoother\n * - Keyboard navigation support when isFocusable is enabled\n * - Screen reader announcements for state changes\n */\nconst Panel: FC<PanelProps> = ({\n children,\n isHidden = undefined,\n isOverable = false,\n isFocusable = false,\n align = DropDownAlign.START,\n identifier,\n className,\n ...props\n}) => (\n <div\n className={cn(\n 'absolute top-[calc(100%+0.5rem)] z-100 min-w-full',\n align === DropDownAlign.START && 'left-0',\n align === DropDownAlign.END && 'right-0',\n className\n )}\n aria-hidden={isHidden}\n role=\"region\"\n aria-labelledby={`dropdown-trigger-${identifier}`}\n id={`dropdown-panel-${identifier}`}\n >\n <MaxHeightSmoother\n isHidden={isHidden}\n className={cn(\n 'overflow-x-visible',\n isHidden === false && 'invisible',\n isHidden === true && 'visible',\n isOverable &&\n 'group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr]',\n isFocusable &&\n 'group-focus-within/dropdown:visible group-focus-within/dropdown:grid-rows-[1fr]'\n )}\n {...props}\n >\n {children}\n </MaxHeightSmoother>\n </div>\n);\n\nDropDown.Trigger = Trigger;\nDropDown.Panel = Panel;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqEA,MAAaA,YAA0B,EACrC,UACA,WACA,YACA,GAAG,YAEH,oBAAC;CACC,WAAW,GAAG,gCAAgC,UAAU;CACxD,cAAY,YAAY;CACxB,IAAI,sBAAsB;CAC1B,GAAI;CAEH;EACG;;;;;;;;;;;;;;;;;;;;;;;AAoCR,MAAMC,WAA6B,EACjC,UACA,YACA,WACA,OACA,GAAG,YAEH,oBAAC;CACC,WAAW,GAAG;EACZ;EACA;EACA;EACD,CAAC;CACF,OAAO,SAAS,cAAc;CAC9B,iBAAc;CACd,iBAAe,kBAAkB;CACjC,IAAI,oBAAoB;CACxB,UAAU,MAAM;AAEd,EAAC,EAAE,cAAoC,OAAO;;CAEhD,SAAQ;CACR,GAAI;CAEH;EACM;;;;AAMX,IAAY,0DAAL;;AAEL;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+EF,MAAMC,SAAyB,EAC7B,UACA,WAAW,QACX,aAAa,OACb,cAAc,OACd,QAAQ,cAAc,OACtB,YACA,WACA,GAAG,YAEH,oBAAC;CACC,WAAW,GACT,qDACA,UAAU,cAAc,SAAS,UACjC,UAAU,cAAc,OAAO,WAC/B,UACD;CACD,eAAa;CACb,MAAK;CACL,mBAAiB,oBAAoB;CACrC,IAAI,kBAAkB;WAEtB,oBAAC;EACW;EACV,WAAW,GACT,sBACA,aAAa,SAAS,aACtB,aAAa,QAAQ,WACrB,cACE,qEACF,eACE,kFACH;EACD,GAAI;EAEH;GACiB;EAChB;AAGR,SAAS,UAAU;AACnB,SAAS,QAAQ"}
1
+ {"version":3,"file":"index.mjs","names":["DropDown: DropDownType","Trigger: FC<TriggerProps>","Panel: FC<PanelProps>"],"sources":["../../../../src/components/DropDown/index.tsx"],"sourcesContent":["import type { FC, HTMLAttributes } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Button, type ButtonProps } from '../Button';\nimport { MaxHeightSmoother } from '../MaxHeightSmoother';\n\n/**\n * Props for the DropDown component\n */\nexport interface DropDownProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Unique identifier that links the trigger and panel for accessibility.\n * This is used to generate proper ARIA attributes.\n * @example \"user-menu\"\n * @example \"language-selector\"\n */\n identifier: string;\n}\n\nexport type DropDownType = FC<DropDownProps> & {\n Trigger: FC<TriggerProps>;\n Panel: FC<PanelProps>;\n};\n\n/**\n * DropDown Component\n *\n * A compound component that provides dropdown/popover functionality with flexible trigger mechanisms.\n * Supports hover, focus, and controlled visibility states with proper accessibility features.\n *\n * @example\n * ```tsx\n * // Basic hover dropdown\n * <DropDown identifier=\"menu\">\n * <DropDown.Trigger identifier=\"menu\">\n * Open Menu\n * </DropDown.Trigger>\n * <DropDown.Panel identifier=\"menu\" isOverable>\n * <div>Menu content</div>\n * </DropDown.Panel>\n * </DropDown>\n *\n * // Focus-based dropdown for accessibility\n * <DropDown identifier=\"accessible-menu\">\n * <DropDown.Trigger identifier=\"accessible-menu\">\n * Keyboard Accessible Menu\n * </DropDown.Trigger>\n * <DropDown.Panel identifier=\"accessible-menu\" isFocusable>\n * <div>Accessible content</div>\n * </DropDown.Panel>\n * </DropDown>\n *\n * // Controlled dropdown\n * <DropDown identifier=\"controlled\">\n * <DropDown.Trigger identifier=\"controlled\">\n * Controlled Menu\n * </DropDown.Trigger>\n * <DropDown.Panel identifier=\"controlled\" isHidden={!isOpen}>\n * <div>Controlled content</div>\n * </DropDown.Panel>\n * </DropDown>\n * ```\n *\n * @component\n * @accessibility\n * - Uses proper ARIA attributes (aria-haspopup, aria-labelledby, etc.)\n * - Supports keyboard navigation with focus management\n * - Screen reader compatible with proper role and labeling\n * - Maintains focus trap within dropdown when needed\n */\nexport const DropDown: DropDownType = ({\n children,\n className,\n identifier,\n ...props\n}) => (\n <div\n className={cn(`group/dropdown relative flex`, className)}\n aria-label={`DropDown ${identifier}`}\n id={`dropdown-container-${identifier}`}\n {...props}\n >\n {children}\n </div>\n);\n\n/**\n * Props for the DropDown.Trigger component\n */\nexport interface TriggerProps extends Partial<ButtonProps> {\n /**\n * Unique identifier that matches the parent DropDown identifier\n * @example \"user-menu\"\n */\n identifier: string;\n}\n\n/**\n * DropDown.Trigger Component\n *\n * The clickable/focusable element that controls the dropdown panel visibility.\n * Built on top of the Button component with enhanced dropdown-specific behaviors.\n *\n * @example\n * ```tsx\n * <DropDown.Trigger identifier=\"menu\">\n * <div>Click to open</div>\n * </DropDown.Trigger>\n * ```\n *\n * @component\n * @accessibility\n * - Automatically generates appropriate ARIA attributes\n * - Maintains proper focus management across browsers\n * - Works with keyboard navigation (Tab, Enter, Space)\n * - Announces dropdown state to screen readers\n *\n * @note Don't nest Button components inside the Trigger - it's already a button\n */\nconst Trigger: FC<TriggerProps> = ({\n children,\n identifier,\n className,\n label,\n ...props\n}) => (\n <Button\n className={cn([\n 'w-full cursor-pointer',\n 'group-focus-within/dropdown:bg-current/20 group-focus-within/dropdown:ring-4',\n className,\n ])}\n label={label ?? `Open panel ${identifier}`}\n aria-haspopup=\"true\"\n aria-controls={`dropdown-panel-${identifier}`}\n id={`dropdown-trigger-${identifier}`}\n onClick={(e) => {\n // Ensure focus behavior is consistent across all mobile browsers\n (e.currentTarget as HTMLButtonElement).focus();\n }}\n variant=\"none\"\n {...props}\n >\n {children}\n </Button>\n);\n\n/**\n * Horizontal alignment options for the dropdown panel relative to the trigger\n */\nexport enum DropDownAlign {\n /** Align panel to the start (left in LTR, right in RTL) of the trigger */\n START = 'start',\n /** Align panel to the end (right in LTR, left in RTL) of the trigger */\n END = 'end',\n}\n\n/**\n * Vertical alignment options for the dropdown panel relative to the trigger\n */\nexport enum DropDownYAlign {\n /** Position panel below the trigger (default) */\n BELOW = 'below',\n /** Position panel above the trigger */\n ABOVE = 'above',\n}\n\n/**\n * Props for the DropDown.Panel component\n */\nexport interface PanelProps extends HTMLAttributes<HTMLDivElement> {\n /**\n * Whether the panel should be visible when the trigger is focused.\n * Enables keyboard accessibility for the dropdown.\n * @default false\n */\n isFocusable?: boolean;\n\n /**\n * Controls panel visibility explicitly.\n * - `true`: Panel is hidden\n * - `false`: Panel is visible\n * - `undefined`: Panel visibility controlled by hover/focus states\n * @default undefined\n */\n isHidden?: boolean;\n\n /**\n * Whether the panel should be visible when hovering over the trigger.\n * Provides quick access via mouse interaction.\n * @default false\n */\n isOverable?: boolean;\n\n /**\n * Unique identifier that matches the parent DropDown identifier\n * @example \"user-menu\"\n */\n identifier: string;\n\n /**\n * Horizontal alignment of the panel relative to the trigger\n * @default DropDownAlign.START\n */\n align?: DropDownAlign | `${DropDownAlign}`;\n\n /**\n * Vertical alignment of the panel relative to the trigger\n * @default DropDownYAlign.BELOW\n */\n yAlign?: DropDownYAlign | `${DropDownYAlign}`;\n}\n\n/**\n * DropDown.Panel Component\n *\n * The content area that appears when the dropdown is triggered.\n * Supports multiple trigger methods (hover, focus, controlled) with smooth animations.\n *\n * @example\n * ```tsx\n * // Hover-triggered panel\n * <DropDown.Panel identifier=\"menu\" isOverable>\n * <div>Content appears on hover</div>\n * </DropDown.Panel>\n *\n * // Focus-triggered panel (accessible)\n * <DropDown.Panel identifier=\"menu\" isFocusable>\n * <div>Content appears on focus</div>\n * </DropDown.Panel>\n *\n * // Controlled panel\n * <DropDown.Panel identifier=\"menu\" isHidden={!isOpen}>\n * <div>Content visibility controlled externally</div>\n * </DropDown.Panel>\n *\n * // Right-aligned panel\n * <DropDown.Panel identifier=\"menu\" align={DropDownAlign.END} isOverable>\n * <div>Right-aligned content</div>\n * </DropDown.Panel>\n *\n * // Panel opening above the trigger\n * <DropDown.Panel identifier=\"menu\" yAlign={DropDownYAlign.ABOVE} isOverable>\n * <div>Content appears above</div>\n * </DropDown.Panel>\n * ```\n *\n * @component\n * @accessibility\n * - Proper ARIA attributes (role, aria-labelledby, aria-hidden)\n * - Smooth height transitions with MaxHeightSmoother\n * - Keyboard navigation support when isFocusable is enabled\n * - Screen reader announcements for state changes\n */\nconst Panel: FC<PanelProps> = ({\n children,\n isHidden = undefined,\n isOverable = false,\n isFocusable = false,\n align = DropDownAlign.START,\n yAlign = DropDownYAlign.BELOW,\n identifier,\n className,\n ...props\n}) => (\n <div\n className={cn(\n 'absolute z-100 min-w-full',\n /* Horizontal positioning */\n align === DropDownAlign.START && 'left-0',\n align === DropDownAlign.END && 'right-0',\n /* Vertical positioning */\n yAlign === DropDownYAlign.BELOW && 'top-[calc(100%+0.5rem)]',\n yAlign === DropDownYAlign.ABOVE && 'bottom-[calc(100%+0.5rem)]',\n className\n )}\n aria-hidden={isHidden}\n role=\"region\"\n aria-labelledby={`dropdown-trigger-${identifier}`}\n id={`dropdown-panel-${identifier}`}\n >\n <MaxHeightSmoother\n isHidden={isHidden}\n className={cn(\n 'overflow-x-visible',\n isHidden === false && 'invisible',\n isHidden === true && 'visible',\n isOverable &&\n 'group-hover/dropdown:visible group-hover/dropdown:grid-rows-[1fr]',\n isFocusable &&\n 'group-focus-within/dropdown:visible group-focus-within/dropdown:grid-rows-[1fr]'\n )}\n {...props}\n >\n {children}\n </MaxHeightSmoother>\n </div>\n);\n\nDropDown.Trigger = Trigger;\nDropDown.Panel = Panel;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqEA,MAAaA,YAA0B,EACrC,UACA,WACA,YACA,GAAG,YAEH,oBAAC;CACC,WAAW,GAAG,gCAAgC,UAAU;CACxD,cAAY,YAAY;CACxB,IAAI,sBAAsB;CAC1B,GAAI;CAEH;EACG;;;;;;;;;;;;;;;;;;;;;;;AAoCR,MAAMC,WAA6B,EACjC,UACA,YACA,WACA,OACA,GAAG,YAEH,oBAAC;CACC,WAAW,GAAG;EACZ;EACA;EACA;EACD,CAAC;CACF,OAAO,SAAS,cAAc;CAC9B,iBAAc;CACd,iBAAe,kBAAkB;CACjC,IAAI,oBAAoB;CACxB,UAAU,MAAM;AAEd,EAAC,EAAE,cAAoC,OAAO;;CAEhD,SAAQ;CACR,GAAI;CAEH;EACM;;;;AAMX,IAAY,0DAAL;;AAEL;;AAEA;;;;;;AAMF,IAAY,4DAAL;;AAEL;;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FF,MAAMC,SAAyB,EAC7B,UACA,WAAW,QACX,aAAa,OACb,cAAc,OACd,QAAQ,cAAc,OACtB,SAAS,eAAe,OACxB,YACA,WACA,GAAG,YAEH,oBAAC;CACC,WAAW,GACT,6BAEA,UAAU,cAAc,SAAS,UACjC,UAAU,cAAc,OAAO,WAE/B,WAAW,eAAe,SAAS,2BACnC,WAAW,eAAe,SAAS,8BACnC,UACD;CACD,eAAa;CACb,MAAK;CACL,mBAAiB,oBAAoB;CACrC,IAAI,kBAAkB;WAEtB,oBAAC;EACW;EACV,WAAW,GACT,sBACA,aAAa,SAAS,aACtB,aAAa,QAAQ,WACrB,cACE,qEACF,eACE,kFACH;EACD,GAAI;EAEH;GACiB;EAChB;AAGR,SAAS,UAAU;AACnB,SAAS,QAAQ"}