@intlayer/design-system 7.6.0-canary.1 → 8.0.0-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/dist/esm/components/CopyToClipboard/index.mjs +12 -9
  2. package/dist/esm/components/CopyToClipboard/index.mjs.map +1 -1
  3. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs +32 -1
  4. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
  5. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.mjs +116 -14
  6. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.mjs.map +1 -1
  7. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.mjs +5 -0
  8. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.mjs.map +1 -1
  9. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +11 -5
  10. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
  11. package/dist/esm/components/Flags/Flag.mjs +5 -8
  12. package/dist/esm/components/Flags/Flag.mjs.map +1 -1
  13. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs +1 -1
  14. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
  15. package/dist/esm/components/MarkDownRender/index.mjs +2 -1
  16. package/dist/esm/components/MarkDownRender/processor-adapter.mjs +57 -0
  17. package/dist/esm/components/MarkDownRender/processor-adapter.mjs.map +1 -0
  18. package/dist/esm/components/MarkDownRender/processor.mjs +5 -5
  19. package/dist/esm/components/MarkDownRender/processor.mjs.map +1 -1
  20. package/dist/esm/components/Popover/static.mjs +12 -10
  21. package/dist/esm/components/Popover/static.mjs.map +1 -1
  22. package/dist/esm/components/RightDrawer/RightDrawer.mjs +4 -5
  23. package/dist/esm/components/RightDrawer/RightDrawer.mjs.map +1 -1
  24. package/dist/esm/components/RightDrawer/index.mjs +2 -2
  25. package/dist/esm/components/RightDrawer/useRightDrawer.mjs +65 -0
  26. package/dist/esm/components/RightDrawer/useRightDrawer.mjs.map +1 -0
  27. package/dist/esm/components/index.mjs +3 -2
  28. package/dist/esm/hooks/useScrollBlockage/index.mjs +1 -6
  29. package/dist/esm/hooks/useScrollBlockage/index.mjs.map +1 -1
  30. package/dist/esm/hooks/useScrollBlockage/useScrollBlockageStore.mjs +60 -31
  31. package/dist/esm/hooks/useScrollBlockage/useScrollBlockageStore.mjs.map +1 -1
  32. package/dist/types/components/Badge/index.d.ts +2 -2
  33. package/dist/types/components/Breadcrumb/breadcrumb.content.d.ts +3 -3
  34. package/dist/types/components/Breadcrumb/index.d.ts +2 -2
  35. package/dist/types/components/Browser/Browser.content.d.ts +17 -17
  36. package/dist/types/components/Browser/Browser.d.ts +2 -2
  37. package/dist/types/components/Browser/Browser.d.ts.map +1 -1
  38. package/dist/types/components/Button/Button.d.ts +7 -7
  39. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +3 -3
  40. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts.map +1 -1
  41. package/dist/types/components/Command/index.d.ts +16 -16
  42. package/dist/types/components/Command/index.d.ts.map +1 -1
  43. package/dist/types/components/Container/index.d.ts +10 -10
  44. package/dist/types/components/Container/index.d.ts.map +1 -1
  45. package/dist/types/components/CopyButton/CopyButton.content.d.ts +3 -3
  46. package/dist/types/components/CopyButton/CopyButton.content.d.ts.map +1 -1
  47. package/dist/types/components/CopyToClipboard/index.d.ts +18 -7
  48. package/dist/types/components/CopyToClipboard/index.d.ts.map +1 -1
  49. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts +25 -25
  50. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.d.ts +9 -9
  51. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.d.ts.map +1 -1
  52. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts +265 -48
  53. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts.map +1 -1
  54. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts +33 -33
  55. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts.map +1 -1
  56. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.d.ts +6 -1
  57. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.d.ts.map +1 -1
  58. package/dist/types/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts.map +1 -1
  59. package/dist/types/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.d.ts +25 -25
  60. package/dist/types/components/DictionaryFieldEditor/SaveForm/saveForm.content.d.ts +33 -33
  61. package/dist/types/components/DictionaryFieldEditor/StructureView/structureView.content.d.ts +9 -9
  62. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.d.ts +7 -7
  63. package/dist/types/components/DictionaryFieldEditor/dictionaryFieldEditor.content.d.ts +5 -5
  64. package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts +31 -31
  65. package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts.map +1 -1
  66. package/dist/types/components/ExpandCollapse/expandCollapse.content.d.ts +3 -3
  67. package/dist/types/components/Form/FormBase.d.ts +2 -2
  68. package/dist/types/components/Form/FormField.d.ts +2 -2
  69. package/dist/types/components/Form/FormItem.d.ts +2 -2
  70. package/dist/types/components/Form/FormItem.d.ts.map +1 -1
  71. package/dist/types/components/Form/elements/EditableFieldInputElement.d.ts +2 -2
  72. package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts +2 -2
  73. package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts.map +1 -1
  74. package/dist/types/components/Form/elements/FormElement.d.ts +2 -2
  75. package/dist/types/components/Form/elements/FormElement.d.ts.map +1 -1
  76. package/dist/types/components/Form/elements/MultiselectElement.d.ts +2 -2
  77. package/dist/types/components/Form/elements/MultiselectElement.d.ts.map +1 -1
  78. package/dist/types/components/Form/elements/OTPElement.d.ts +2 -2
  79. package/dist/types/components/Form/elements/OTPElement.d.ts.map +1 -1
  80. package/dist/types/components/Form/elements/SelectElement.d.ts +2 -2
  81. package/dist/types/components/Form/elements/SelectElement.d.ts.map +1 -1
  82. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts +2 -2
  83. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts.map +1 -1
  84. package/dist/types/components/IDE/CodeContext.d.ts +2 -2
  85. package/dist/types/components/IDE/CodeContext.d.ts.map +1 -1
  86. package/dist/types/components/IDE/code.content.d.ts +5 -5
  87. package/dist/types/components/IDE/copyCode.content.d.ts +5 -5
  88. package/dist/types/components/IDE/selectors.content.d.ts +13 -13
  89. package/dist/types/components/Input/Checkbox.d.ts +4 -4
  90. package/dist/types/components/Input/Checkbox.d.ts.map +1 -1
  91. package/dist/types/components/Input/Input.d.ts +3 -3
  92. package/dist/types/components/Input/Input.d.ts.map +1 -1
  93. package/dist/types/components/Input/OTPInput.d.ts +6 -6
  94. package/dist/types/components/Input/SearchInput.d.ts +2 -2
  95. package/dist/types/components/Link/Link.d.ts +5 -5
  96. package/dist/types/components/Loader/index.content.d.ts +3 -3
  97. package/dist/types/components/Loader/index.content.d.ts.map +1 -1
  98. package/dist/types/components/Loader/spinner.d.ts +2 -2
  99. package/dist/types/components/Loader/spinner.d.ts.map +1 -1
  100. package/dist/types/components/LocaleSwitcherContentDropDown/localeSwitcher.content.d.ts +17 -17
  101. package/dist/types/components/LocaleSwitcherDropDown/localeSwitcher.content.d.ts +13 -13
  102. package/dist/types/components/MarkDownRender/MarkDownRender.d.ts +1 -1
  103. package/dist/types/components/MarkDownRender/MarkDownRender.d.ts.map +1 -1
  104. package/dist/types/components/MarkDownRender/index.d.ts +2 -1
  105. package/dist/types/components/MarkDownRender/processor-adapter.d.ts +85 -0
  106. package/dist/types/components/MarkDownRender/processor-adapter.d.ts.map +1 -0
  107. package/dist/types/components/MaxWidthSmoother/index.d.ts +2 -2
  108. package/dist/types/components/Navbar/Burger.d.ts +2 -2
  109. package/dist/types/components/Navbar/Burger.d.ts.map +1 -1
  110. package/dist/types/components/Navbar/DesktopNavbar.d.ts +2 -2
  111. package/dist/types/components/Navbar/MobileNavbar.d.ts +2 -2
  112. package/dist/types/components/Navbar/MobileNavbar.d.ts.map +1 -1
  113. package/dist/types/components/Navbar/index.d.ts +2 -2
  114. package/dist/types/components/Pagination/Pagination.d.ts +4 -4
  115. package/dist/types/components/Pagination/Pagination.d.ts.map +1 -1
  116. package/dist/types/components/Pagination/pagination.content.d.ts +11 -11
  117. package/dist/types/components/Popover/static.d.ts +11 -9
  118. package/dist/types/components/Popover/static.d.ts.map +1 -1
  119. package/dist/types/components/RightDrawer/index.d.ts +2 -2
  120. package/dist/types/components/RightDrawer/rightDrawer.content.d.ts +5 -5
  121. package/dist/types/components/RightDrawer/useRightDrawer.d.ts +22 -0
  122. package/dist/types/components/RightDrawer/useRightDrawer.d.ts.map +1 -0
  123. package/dist/types/components/Select/Select.d.ts +3 -3
  124. package/dist/types/components/Select/Select.d.ts.map +1 -1
  125. package/dist/types/components/SocialNetworks/index.d.ts +2 -2
  126. package/dist/types/components/SocialNetworks/index.d.ts.map +1 -1
  127. package/dist/types/components/SwitchSelector/index.d.ts +7 -7
  128. package/dist/types/components/SwitchSelector/index.d.ts.map +1 -1
  129. package/dist/types/components/Tab/Tab.d.ts +6 -6
  130. package/dist/types/components/Tab/Tab.d.ts.map +1 -1
  131. package/dist/types/components/Tab/TabContext.d.ts +2 -2
  132. package/dist/types/components/Tab/TabContext.d.ts.map +1 -1
  133. package/dist/types/components/TabSelector/TabSelector.d.ts +5 -5
  134. package/dist/types/components/TabSelector/TabSelector.d.ts.map +1 -1
  135. package/dist/types/components/Table/table.content.d.ts +3 -3
  136. package/dist/types/components/Tag/index.d.ts +5 -5
  137. package/dist/types/components/Terminal/terminal.content.d.ts +5 -5
  138. package/dist/types/components/Terminal/terminal.content.d.ts.map +1 -1
  139. package/dist/types/components/Toaster/Toast.d.ts +2 -2
  140. package/dist/types/components/Toaster/Toast.d.ts.map +1 -1
  141. package/dist/types/components/Toaster/Toaster.d.ts +2 -2
  142. package/dist/types/components/Toaster/Toaster.d.ts.map +1 -1
  143. package/dist/types/components/index.d.ts +3 -2
  144. package/dist/types/hooks/useDevice.d.ts.map +1 -1
  145. package/dist/types/hooks/useScrollBlockage/index.d.ts.map +1 -1
  146. package/dist/types/hooks/useScrollBlockage/useScrollBlockageStore.d.ts +14 -6
  147. package/dist/types/hooks/useScrollBlockage/useScrollBlockageStore.d.ts.map +1 -1
  148. package/package.json +21 -21
  149. package/dist/esm/components/RightDrawer/useRightDrawerStore.mjs +0 -87
  150. package/dist/esm/components/RightDrawer/useRightDrawerStore.mjs.map +0 -1
  151. package/dist/types/components/RightDrawer/useRightDrawerStore.d.ts +0 -116
  152. package/dist/types/components/RightDrawer/useRightDrawerStore.d.ts.map +0 -1
@@ -39,17 +39,18 @@ const useCopyToClipboard = (text, feedbackDuration = 2e3, onCopySuccess, onCopyE
39
39
  * ```tsx
40
40
  * // Basic usage
41
41
  * <CopyToClipboard text="Hello World">
42
- * <span>Click to copy</span>
42
+ * <span>Click to copy</span>
43
43
  * </CopyToClipboard>
44
44
  *
45
- * // With custom styling and callbacks
45
+ * // With custom styling, callbacks, and icon size
46
46
  * <CopyToClipboard
47
- * text="npm install @intlayer/design-system"
48
- * className="bg-gray-100 p-2"
49
- * feedbackDuration={3000}
50
- * onCopySuccess={() => console.log('Copied!')}
47
+ * text="npm install @intlayer/design-system"
48
+ * className="bg-gray-100 p-2"
49
+ * feedbackDuration={3000}
50
+ * size={20}
51
+ * onCopySuccess={() => console.log('Copied!')}
51
52
  * >
52
- * <code>npm install @intlayer/design-system</code>
53
+ * <code>npm install @intlayer/design-system</code>
53
54
  * </CopyToClipboard>
54
55
  * ```
55
56
  *
@@ -60,7 +61,7 @@ const useCopyToClipboard = (text, feedbackDuration = 2e3, onCopySuccess, onCopyE
60
61
  * - Announces state changes to screen readers
61
62
  * - Provides visual focus indicators
62
63
  */
63
- const CopyToClipboard = ({ text, children, className, "aria-label": ariaLabel = "Copy to clipboard", "aria-copied-label": ariaCopiedLabel = "Copied to clipboard", feedbackDuration = 2e3, onCopySuccess, onCopyError, disable, preventDefault = true }) => {
64
+ const CopyToClipboard = ({ text, children, className, "aria-label": ariaLabel = "Copy to clipboard", "aria-copied-label": ariaCopiedLabel = "Copied to clipboard", feedbackDuration = 2e3, onCopySuccess, onCopyError, disable, preventDefault = true, stopPropagation = true, size = 14 }) => {
64
65
  const { isCopied, copy } = useCopyToClipboard(text, feedbackDuration, onCopySuccess, onCopyError);
65
66
  if (disable) return /* @__PURE__ */ jsx("span", {
66
67
  className,
@@ -71,6 +72,7 @@ const CopyToClipboard = ({ text, children, className, "aria-label": ariaLabel =
71
72
  };
72
73
  const handleCopy = (event) => {
73
74
  if (preventDefault) event.preventDefault();
75
+ if (stopPropagation) event.stopPropagation();
74
76
  copy();
75
77
  };
76
78
  const currentAriaLabel = isCopied ? ariaCopiedLabel : ariaLabel;
@@ -88,7 +90,8 @@ const CopyToClipboard = ({ text, children, className, "aria-label": ariaLabel =
88
90
  className: "min-w-0 break-all",
89
91
  children
90
92
  }), text && /* @__PURE__ */ jsx(IconComponent, {
91
- className: "ml-1 ml-auto size-4 min-w-4 shrink-0",
93
+ className: "ml-1 ml-auto shrink-0",
94
+ size,
92
95
  "aria-hidden": "true"
93
96
  })]
94
97
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/CopyToClipboard/index.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport { CopyCheck, CopyIcon } from 'lucide-react';\nimport {\n type FC,\n type KeyboardEvent,\n type MouseEvent,\n type PropsWithChildren,\n useState,\n} from 'react';\n\n/**\n * Props for the CopyToClipboard component\n */\nexport interface CopyToClipboardProps extends PropsWithChildren {\n /**\n * The text to copy to the clipboard when clicked\n * @example \"Hello World\"\n * @example \"npm install @intlayer/design-system\"\n */\n text: string;\n\n /**\n * Additional CSS classes for the wrapper element\n * @example \"bg-blue-100 text-blue-800\"\n */\n className?: string;\n\n /**\n * Accessible label for screen readers when copy operation is available\n * @default \"Copy to clipboard\"\n */\n 'aria-label'?: string;\n\n /**\n * Accessible label for screen readers when content has been copied\n * @default \"Copied to clipboard\"\n */\n 'aria-copied-label'?: string;\n\n /**\n * Duration in milliseconds to show the \"copied\" state\n * @default 2000\n */\n feedbackDuration?: number;\n\n /**\n * Callback function called when copy operation succeeds\n */\n onCopySuccess?: () => void;\n\n /**\n * Callback function called when copy operation fails\n */\n onCopyError?: (error: Error) => void;\n\n /**\n * Disable the copy to clipboard functionality and return the children\n * @default false\n */\n disable?: boolean;\n\n /**\n * Prevent the default behavior of the link when clicked\n * @default true\n */\n preventDefault?: boolean;\n}\n\nexport const useCopyToClipboard = (\n text?: string,\n feedbackDuration = 2000,\n onCopySuccess?: () => void,\n onCopyError?: (error: Error) => void\n) => {\n const [isCopied, setIsCopied] = useState(false);\n\n const copy = async () => {\n if (!text) return;\n\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n } else {\n onCopyError?.(new Error('Clipboard API not supported in this browser'));\n return;\n }\n\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), feedbackDuration);\n onCopySuccess?.();\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to copy to clipboard';\n onCopyError?.(error instanceof Error ? error : new Error(errorMessage));\n }\n };\n\n return { isCopied, copy };\n};\n\n/**\n * CopyToClipboard Component\n *\n * A versatile component that allows users to copy text to their clipboard with visual feedback.\n * Provides accessibility features, customizable feedback duration, and error handling.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <CopyToClipboard text=\"Hello World\">\n * <span>Click to copy</span>\n * </CopyToClipboard>\n *\n * // With custom styling and callbacks\n * <CopyToClipboard\n * text=\"npm install @intlayer/design-system\"\n * className=\"bg-gray-100 p-2\"\n * feedbackDuration={3000}\n * onCopySuccess={() => console.log('Copied!')}\n * >\n * <code>npm install @intlayer/design-system</code>\n * </CopyToClipboard>\n * ```\n *\n * @component\n * @accessibility\n * - Uses proper ARIA labels for copy and copied states\n * - Supports keyboard navigation (Enter and Space keys)\n * - Announces state changes to screen readers\n * - Provides visual focus indicators\n */\nexport const CopyToClipboard: FC<CopyToClipboardProps> = ({\n text,\n children,\n className,\n 'aria-label': ariaLabel = 'Copy to clipboard',\n 'aria-copied-label': ariaCopiedLabel = 'Copied to clipboard',\n feedbackDuration = 2000,\n onCopySuccess,\n onCopyError,\n disable,\n preventDefault = true,\n}) => {\n const { isCopied, copy } = useCopyToClipboard(\n text,\n feedbackDuration,\n onCopySuccess,\n onCopyError\n );\n\n if (disable) return <span className={className}>{children}</span>;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleCopy(event);\n }\n };\n\n const handleCopy = (event: MouseEvent | KeyboardEvent) => {\n if (preventDefault) event.preventDefault();\n\n copy();\n };\n\n const currentAriaLabel = isCopied ? ariaCopiedLabel : ariaLabel;\n\n const IconComponent = isCopied ? CopyCheck : CopyIcon;\n\n return (\n <span\n className={cn(\n 'inline-flex max-w-full cursor-pointer items-center gap-2 rounded-md p-0.5 hover:bg-neutral/10',\n className\n )}\n onClick={handleCopy}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label={currentAriaLabel}\n aria-pressed={isCopied}\n data-testid=\"copy-to-clipboard\"\n >\n <span className=\"min-w-0 break-all\">{children}</span>\n\n {text && (\n <IconComponent\n className=\"ml-1 ml-auto size-4 min-w-4 shrink-0\"\n aria-hidden=\"true\"\n />\n )}\n </span>\n );\n};\n"],"mappings":";;;;;;;;AAsEA,MAAa,sBACX,MACA,mBAAmB,KACnB,eACA,gBACG;CACH,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM;CAE/C,MAAM,OAAO,YAAY;AACvB,MAAI,CAAC,KAAM;AAEX,MAAI;AACF,OAAI,UAAU,WAAW,UACvB,OAAM,UAAU,UAAU,UAAU,KAAK;QACpC;AACL,kCAAc,IAAI,MAAM,8CAA8C,CAAC;AACvE;;AAGF,eAAY,KAAK;AACjB,oBAAiB,YAAY,MAAM,EAAE,iBAAiB;AACtD,oBAAiB;WACV,OAAO;GACd,MAAM,eACJ,iBAAiB,QAAQ,MAAM,UAAU;AAC3C,iBAAc,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,aAAa,CAAC;;;AAI3E,QAAO;EAAE;EAAU;EAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkC3B,MAAa,mBAA6C,EACxD,MACA,UACA,WACA,cAAc,YAAY,qBAC1B,qBAAqB,kBAAkB,uBACvC,mBAAmB,KACnB,eACA,aACA,SACA,iBAAiB,WACb;CACJ,MAAM,EAAE,UAAU,SAAS,mBACzB,MACA,kBACA,eACA,YACD;AAED,KAAI,QAAS,QAAO,oBAAC;EAAgB;EAAY;GAAgB;CAEjE,MAAM,iBAAiB,UAAyB;AAC9C,MAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,IACzC,YAAW,MAAM;;CAIrB,MAAM,cAAc,UAAsC;AACxD,MAAI,eAAgB,OAAM,gBAAgB;AAE1C,QAAM;;CAGR,MAAM,mBAAmB,WAAW,kBAAkB;CAEtD,MAAM,gBAAgB,WAAW,YAAY;AAE7C,QACE,qBAAC;EACC,WAAW,GACT,iGACA,UACD;EACD,SAAS;EACT,WAAW;EACX,MAAK;EACL,UAAU;EACV,cAAY;EACZ,gBAAc;EACd,eAAY;aAEZ,oBAAC;GAAK,WAAU;GAAqB;IAAgB,EAEpD,QACC,oBAAC;GACC,WAAU;GACV,eAAY;IACZ;GAEC"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/CopyToClipboard/index.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport { CopyCheck, CopyIcon } from 'lucide-react';\nimport {\n type FC,\n type KeyboardEvent,\n type MouseEvent,\n type PropsWithChildren,\n useState,\n} from 'react';\n\n/**\n * Props for the CopyToClipboard component\n */\nexport interface CopyToClipboardProps extends PropsWithChildren {\n /**\n * The text to copy to the clipboard when clicked\n * @example \"Hello World\"\n * @example \"npm install @intlayer/design-system\"\n */\n text: string;\n\n /**\n * Additional CSS classes for the wrapper element\n * @example \"bg-blue-100 text-blue-800\"\n */\n className?: string;\n\n /**\n * Accessible label for screen readers when copy operation is available\n * @default \"Copy to clipboard\"\n */\n 'aria-label'?: string;\n\n /**\n * Accessible label for screen readers when content has been copied\n * @default \"Copied to clipboard\"\n */\n 'aria-copied-label'?: string;\n\n /**\n * Duration in milliseconds to show the \"copied\" state\n * @default 2000\n */\n feedbackDuration?: number;\n\n /**\n * Callback function called when copy operation succeeds\n */\n onCopySuccess?: () => void;\n\n /**\n * Callback function called when copy operation fails\n */\n onCopyError?: (error: Error) => void;\n\n /**\n * Disable the copy to clipboard functionality and return the children\n * @default false\n */\n disable?: boolean;\n\n /**\n * Prevent the default behavior of the link when clicked\n * @default true\n */\n preventDefault?: boolean;\n\n /**\n * Stop the propagation of the event when clicked\n * @default true\n */\n stopPropagation?: boolean;\n\n /**\n * The size of the icon in pixels\n * @default 16\n */\n size?: number;\n}\n\nexport const useCopyToClipboard = (\n text?: string,\n feedbackDuration = 2000,\n onCopySuccess?: () => void,\n onCopyError?: (error: Error) => void\n) => {\n const [isCopied, setIsCopied] = useState(false);\n\n const copy = async () => {\n if (!text) return;\n\n try {\n if (navigator.clipboard?.writeText) {\n await navigator.clipboard.writeText(text);\n } else {\n onCopyError?.(new Error('Clipboard API not supported in this browser'));\n return;\n }\n\n setIsCopied(true);\n setTimeout(() => setIsCopied(false), feedbackDuration);\n onCopySuccess?.();\n } catch (error) {\n const errorMessage =\n error instanceof Error ? error.message : 'Failed to copy to clipboard';\n onCopyError?.(error instanceof Error ? error : new Error(errorMessage));\n }\n };\n\n return { isCopied, copy };\n};\n\n/**\n * CopyToClipboard Component\n *\n * A versatile component that allows users to copy text to their clipboard with visual feedback.\n * Provides accessibility features, customizable feedback duration, and error handling.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <CopyToClipboard text=\"Hello World\">\n * <span>Click to copy</span>\n * </CopyToClipboard>\n *\n * // With custom styling, callbacks, and icon size\n * <CopyToClipboard\n * text=\"npm install @intlayer/design-system\"\n * className=\"bg-gray-100 p-2\"\n * feedbackDuration={3000}\n * size={20}\n * onCopySuccess={() => console.log('Copied!')}\n * >\n * <code>npm install @intlayer/design-system</code>\n * </CopyToClipboard>\n * ```\n *\n * @component\n * @accessibility\n * - Uses proper ARIA labels for copy and copied states\n * - Supports keyboard navigation (Enter and Space keys)\n * - Announces state changes to screen readers\n * - Provides visual focus indicators\n */\nexport const CopyToClipboard: FC<CopyToClipboardProps> = ({\n text,\n children,\n className,\n 'aria-label': ariaLabel = 'Copy to clipboard',\n 'aria-copied-label': ariaCopiedLabel = 'Copied to clipboard',\n feedbackDuration = 2000,\n onCopySuccess,\n onCopyError,\n disable,\n preventDefault = true,\n stopPropagation = true,\n size = 14,\n}) => {\n const { isCopied, copy } = useCopyToClipboard(\n text,\n feedbackDuration,\n onCopySuccess,\n onCopyError\n );\n\n if (disable) return <span className={className}>{children}</span>;\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Enter' || event.key === ' ') {\n handleCopy(event);\n }\n };\n\n const handleCopy = (event: MouseEvent | KeyboardEvent) => {\n if (preventDefault) event.preventDefault();\n if (stopPropagation) event.stopPropagation();\n\n copy();\n };\n\n const currentAriaLabel = isCopied ? ariaCopiedLabel : ariaLabel;\n\n const IconComponent = isCopied ? CopyCheck : CopyIcon;\n\n return (\n <span\n className={cn(\n 'inline-flex max-w-full cursor-pointer items-center gap-2 rounded-md p-0.5 hover:bg-neutral/10',\n className\n )}\n onClick={handleCopy}\n onKeyDown={handleKeyDown}\n role=\"button\"\n tabIndex={0}\n aria-label={currentAriaLabel}\n aria-pressed={isCopied}\n data-testid=\"copy-to-clipboard\"\n >\n <span className=\"min-w-0 break-all\">{children}</span>\n\n {text && (\n <IconComponent\n className=\"ml-1 ml-auto shrink-0\"\n size={size}\n aria-hidden=\"true\"\n />\n )}\n </span>\n );\n};\n"],"mappings":";;;;;;;;AAkFA,MAAa,sBACX,MACA,mBAAmB,KACnB,eACA,gBACG;CACH,MAAM,CAAC,UAAU,eAAe,SAAS,MAAM;CAE/C,MAAM,OAAO,YAAY;AACvB,MAAI,CAAC,KAAM;AAEX,MAAI;AACF,OAAI,UAAU,WAAW,UACvB,OAAM,UAAU,UAAU,UAAU,KAAK;QACpC;AACL,kCAAc,IAAI,MAAM,8CAA8C,CAAC;AACvE;;AAGF,eAAY,KAAK;AACjB,oBAAiB,YAAY,MAAM,EAAE,iBAAiB;AACtD,oBAAiB;WACV,OAAO;GACd,MAAM,eACJ,iBAAiB,QAAQ,MAAM,UAAU;AAC3C,iBAAc,iBAAiB,QAAQ,QAAQ,IAAI,MAAM,aAAa,CAAC;;;AAI3E,QAAO;EAAE;EAAU;EAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmC3B,MAAa,mBAA6C,EACxD,MACA,UACA,WACA,cAAc,YAAY,qBAC1B,qBAAqB,kBAAkB,uBACvC,mBAAmB,KACnB,eACA,aACA,SACA,iBAAiB,MACjB,kBAAkB,MAClB,OAAO,SACH;CACJ,MAAM,EAAE,UAAU,SAAS,mBACzB,MACA,kBACA,eACA,YACD;AAED,KAAI,QAAS,QAAO,oBAAC;EAAgB;EAAY;GAAgB;CAEjE,MAAM,iBAAiB,UAAyB;AAC9C,MAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,IACzC,YAAW,MAAM;;CAIrB,MAAM,cAAc,UAAsC;AACxD,MAAI,eAAgB,OAAM,gBAAgB;AAC1C,MAAI,gBAAiB,OAAM,iBAAiB;AAE5C,QAAM;;CAGR,MAAM,mBAAmB,WAAW,kBAAkB;CAEtD,MAAM,gBAAgB,WAAW,YAAY;AAE7C,QACE,qBAAC;EACC,WAAW,GACT,iGACA,UACD;EACD,SAAS;EACT,WAAW;EACX,MAAK;EACL,UAAU;EACV,cAAY;EACZ,gBAAc;EACd,eAAY;aAEZ,oBAAC;GAAK,WAAU;GAAqB;IAAgB,EAEpD,QACC,oBAAC;GACC,WAAU;GACJ;GACN,eAAY;IACZ;GAEC"}
@@ -6,6 +6,7 @@ import { Checkbox } from "../../Input/Checkbox.mjs";
6
6
  import { useSession } from "../../../hooks/useAuth/useSession.mjs";
7
7
  import { useAuditContentDeclarationMetadata, useGetProjects, useGetTags } from "../../../hooks/reactQuery.mjs";
8
8
  import { MultiSelect } from "../../Select/Multiselect.mjs";
9
+ import { Select } from "../../Select/Select.mjs";
9
10
  import { useForm as useForm$1 } from "../../Form/FormBase.mjs";
10
11
  import { Form } from "../../Form/Form.mjs";
11
12
  import { useDictionaryDetailsSchema } from "./useDictionaryDetailsSchema.mjs";
@@ -31,7 +32,7 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
31
32
  location: dictionary.location ?? "remote"
32
33
  } });
33
34
  const { editedContent, setEditedDictionary } = useEditedContent();
34
- const { titleInput, keyInput, descriptionInput, projectInput, tagsSelect, locationSelect, filePathInput, auditButton } = useIntlayer("dictionary-details");
35
+ const { titleInput, keyInput, descriptionInput, projectInput, tagsSelect, locationSelect, importModeSelect, filePathInput, auditButton } = useIntlayer("dictionary-details");
35
36
  const { mutate: auditContentDeclaration, isPending: isAuditing } = useAuditContentDeclarationMetadata();
36
37
  const updatedDictionary = editedContent?.[dictionary.localId];
37
38
  useEffect(() => {
@@ -224,6 +225,36 @@ const DictionaryDetailsForm = ({ dictionary, mode }) => {
224
225
  }, "filePath-input")
225
226
  })]
226
227
  }),
228
+ /* @__PURE__ */ jsx("div", {
229
+ className: "grid grid-cols-2 gap-8 max-md:grid-cols-1",
230
+ children: /* @__PURE__ */ jsxs(Form.Select, {
231
+ name: "importMode",
232
+ label: importModeSelect.label.value,
233
+ description: importModeSelect.description.value,
234
+ onValueChange: (value) => {
235
+ form.setValue("importMode", value, { shouldDirty: true });
236
+ setEditedDictionary((prev) => ({
237
+ ...dictionary,
238
+ ...prev ?? {},
239
+ importMode: value
240
+ }));
241
+ },
242
+ children: [/* @__PURE__ */ jsx(Select.Trigger, { children: /* @__PURE__ */ jsx(Select.Value, { placeholder: importModeSelect.label.value }) }), /* @__PURE__ */ jsxs(Select.Content, { children: [
243
+ /* @__PURE__ */ jsx(Select.Item, {
244
+ value: "static",
245
+ children: importModeSelect.static.value
246
+ }),
247
+ /* @__PURE__ */ jsx(Select.Item, {
248
+ value: "dynamic",
249
+ children: importModeSelect.dynamic.value
250
+ }),
251
+ /* @__PURE__ */ jsx(Select.Item, {
252
+ value: "live",
253
+ children: importModeSelect.live.value
254
+ })
255
+ ] })]
256
+ })
257
+ }),
227
258
  /* @__PURE__ */ jsxs("div", {
228
259
  className: "grid grid-cols-2 gap-8 max-md:grid-cols-1",
229
260
  children: [/* @__PURE__ */ jsxs(Form.MultiSelect, {
@@ -1 +1 @@
1
- {"version":3,"file":"DictionaryDetailsForm.mjs","names":["useForm","project"],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.tsx"],"sourcesContent":["'use client';\n\nimport { ButtonColor, ButtonSize, ButtonVariant } from '@components/Button';\nimport { Container } from '@components/Container';\nimport { Form, useForm } from '@components/Form';\nimport { Checkbox } from '@components/Input';\nimport { Loader } from '@components/Loader';\nimport { MultiSelect } from '@components/Select';\nimport {\n useAuditContentDeclarationMetadata,\n useGetProjects,\n useGetTags,\n} from '@hooks/reactQuery';\nimport { useSession } from '@hooks/useAuth';\nimport { useEditedContent } from '@intlayer/editor-react';\nimport type { Dictionary, LocalDictionaryId } from '@intlayer/types';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { WandSparkles } from 'lucide-react';\nimport { type FC, useEffect } from 'react';\nimport { useWatch } from 'react-hook-form';\nimport { useIntlayer } from 'react-intlayer';\nimport { useDictionaryDetailsSchema } from './useDictionaryDetailsSchema';\n\ntype DictionaryDetailsProps = {\n dictionary: Dictionary;\n mode: ('local' | 'remote')[];\n};\n\nexport const DictionaryDetailsForm: FC<DictionaryDetailsProps> = ({\n dictionary,\n mode,\n}) => {\n const { session } = useSession();\n const { project } = session ?? {};\n const { data: projectsData, isLoading: isLoadingProjects } =\n useGetProjects() as any;\n const { data: tagsData } = useGetTags() as any;\n\n const projects = (projectsData?.data ?? []) as any[];\n const allTags = (tagsData?.data ?? []) as any[];\n\n const DictionaryDetailsSchema = useDictionaryDetailsSchema(\n String(project?.id)\n );\n const { form, isSubmitting } = useForm(DictionaryDetailsSchema, {\n defaultValues: {\n ...dictionary,\n location: dictionary.location ?? 'remote',\n },\n });\n const { editedContent, setEditedDictionary } = useEditedContent();\n const {\n titleInput,\n keyInput,\n descriptionInput,\n projectInput,\n tagsSelect,\n locationSelect,\n filePathInput,\n auditButton,\n } = useIntlayer('dictionary-details');\n const { mutate: auditContentDeclaration, isPending: isAuditing } =\n useAuditContentDeclarationMetadata();\n const updatedDictionary =\n editedContent?.[dictionary.localId as LocalDictionaryId];\n\n useEffect(() => {\n form.reset({\n ...dictionary,\n location: dictionary.location ?? 'remote',\n });\n }, [dictionary, form?.reset]);\n\n useEffect(() => {\n if (typeof updatedDictionary === 'undefined') {\n form.reset({\n ...dictionary,\n location: dictionary.location ?? 'remote',\n });\n }\n }, [updatedDictionary]);\n\n const handleOnAuditFile = () => {\n const dictionaryToAudit = {\n ...dictionary,\n ...updatedDictionary,\n };\n\n auditContentDeclaration(\n {\n fileContent: JSON.stringify(dictionaryToAudit),\n },\n {\n onSuccess: (response) => {\n if (!response?.data) return;\n\n try {\n const auditedDictionary = response.data.fileContent;\n\n setEditedDictionary((prev) => ({\n ...prev,\n ...dictionaryToAudit,\n ...auditedDictionary,\n }));\n form.reset({\n ...dictionaryToAudit,\n ...auditedDictionary,\n });\n } catch (error) {\n console.error(error);\n }\n },\n }\n );\n };\n\n const watchedLocation = useWatch({\n control: form.control,\n name: 'location',\n });\n const isLocalChecked =\n watchedLocation === 'local' || watchedLocation === 'local&remote';\n\n return (\n <Form\n className=\"flex w-full flex-col gap-8\"\n {...form}\n schema={DictionaryDetailsSchema}\n >\n <div className=\"grid grid-cols-2 gap-8 max-md:grid-cols-1\">\n <Form.EditableFieldInput\n name=\"key\"\n label={keyInput.label}\n placeholder={keyInput.label.value}\n description={keyInput.description}\n disabled={isSubmitting}\n isRequired\n onSave={(value) => {\n form.setValue('key', value, { shouldDirty: true });\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n key: value,\n }));\n }}\n />\n <Form.EditableFieldInput\n name=\"title\"\n label={titleInput.label}\n placeholder={titleInput.placeholder.value}\n description={titleInput.description}\n disabled={isSubmitting}\n onSave={(value) => {\n form.setValue('title', value, { shouldDirty: true });\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n title: value,\n }));\n }}\n />\n </div>\n <Form.EditableFieldTextArea\n name=\"description\"\n label={descriptionInput.label}\n placeholder={descriptionInput.placeholder.value}\n description={descriptionInput.description}\n disabled={isSubmitting}\n onSave={(value) => {\n form.setValue('description', value, { shouldDirty: true });\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n description: value,\n }));\n }}\n />\n <div className=\"grid grid-cols-2 gap-8 px-1 max-md:grid-cols-1\">\n <Form.Field\n control={form.control}\n name=\"location\"\n render={({ field }) => {\n const value = field.value;\n const isLocal = value === 'local' || value === 'local&remote';\n const isRemote = value === 'remote' || value === 'local&remote';\n\n const handleLocalToggle = (isChecked: boolean) => {\n if (!isChecked && !isRemote) return;\n\n const newValue: Dictionary['location'] = isChecked\n ? isRemote\n ? 'local&remote'\n : 'local'\n : 'remote';\n\n field.onChange(newValue);\n\n const newFilePath = isChecked\n ? (form.getValues('filePath') ?? dictionary.filePath)\n : undefined;\n\n if (!isChecked) {\n form.setValue('filePath', undefined);\n }\n\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n location: newValue,\n filePath: newFilePath,\n }));\n };\n\n const handleRemoteToggle = (isChecked: boolean) => {\n if (!isChecked && !isLocal) return;\n\n const newValue: Dictionary['location'] = isChecked\n ? isLocal\n ? 'local&remote'\n : 'remote'\n : 'local';\n\n field.onChange(newValue);\n\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n location: newValue,\n }));\n };\n\n return (\n <Form.Item className=\"flex flex-col gap-2 px-1\">\n <Form.Label className=\"ml-1\">{locationSelect.label}</Form.Label>\n <div className=\"ml-2 flex items-center gap-4 py-2\">\n <Checkbox\n id=\"location-local\"\n name=\"location-local\"\n label={locationSelect.local.value}\n checked={isLocal}\n disabled={\n !mode.includes('local') && !mode.includes('remote')\n }\n onChange={(e) => handleLocalToggle(e.target.checked)}\n />\n <Checkbox\n id=\"location-remote\"\n name=\"location-remote\"\n label={locationSelect.remote.value}\n checked={isRemote}\n disabled={\n !mode.includes('remote') &&\n dictionary.location !== 'remote' &&\n dictionary.location !== 'local&remote'\n }\n onChange={(e) => handleRemoteToggle(e.target.checked)}\n />\n </div>\n <Form.Description>\n {locationSelect.testDescription}\n </Form.Description>\n <Form.Message />\n </Form.Item>\n );\n }}\n />\n\n <AnimatePresence mode=\"wait\">\n {isLocalChecked && (\n <motion.div\n key=\"filePath-input\"\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: 'auto' }}\n exit={{ opacity: 0, height: 0 }}\n transition={{ duration: 0.3 }}\n className=\"overflow-hidden\"\n >\n <Form.Input\n name=\"filePath\"\n label={filePathInput.label.value}\n placeholder={filePathInput.placeholder.value}\n description={filePathInput.description.value}\n disabled={isSubmitting || !isLocalChecked}\n onChange={(e) => {\n const value = e.target.value;\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n filePath: value,\n }));\n }}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n <div className=\"grid grid-cols-2 gap-8 max-md:grid-cols-1\">\n <Form.MultiSelect\n name=\"projectIds\"\n label={projectInput.label.value}\n description={projectInput.description}\n onValueChange={(value) => {\n const valueArray = [value].flat();\n form.setValue('projectIds', valueArray, { shouldDirty: true });\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n projectIds: valueArray,\n }));\n }}\n >\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n projects?.find((project: any) => String(project.id) === value)\n ?.name ?? value\n }\n >\n <MultiSelect.Input placeholder={projectInput.placeholder.value} />\n </MultiSelect.Trigger>\n <MultiSelect.Content>\n <Loader isLoading={isLoadingProjects}>\n <MultiSelect.List>\n {projects?.map((project: any) => (\n <MultiSelect.Item\n key={String(project.id)}\n value={String(project.id)}\n >\n {project.name}\n </MultiSelect.Item>\n ))}\n </MultiSelect.List>\n </Loader>\n </MultiSelect.Content>\n </Form.MultiSelect>\n\n <Form.MultiSelect\n name=\"tags\"\n label={tagsSelect.label.value}\n description={tagsSelect.description}\n onValueChange={(value) => {\n const valueArray = [value].flat();\n form.setValue('tags', valueArray, { shouldDirty: true });\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n tags: valueArray,\n }));\n }}\n >\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n allTags?.find((tag: any) => String(tag.key) === value)?.name ??\n value\n }\n >\n <MultiSelect.Input placeholder={tagsSelect.placeholder.value} />\n </MultiSelect.Trigger>\n <MultiSelect.Content>\n <Loader isLoading={isLoadingProjects}>\n <MultiSelect.List>\n {allTags?.map((tag: any) => (\n <MultiSelect.Item\n key={String(tag.key)}\n value={String(tag.key)}\n >\n {tag.name ?? tag.key}\n </MultiSelect.Item>\n ))}\n </MultiSelect.List>\n </Loader>\n </MultiSelect.Content>\n </Form.MultiSelect>\n </div>\n\n <div className=\"flex flex-wrap items-center justify-end gap-2 max-md:flex-col\">\n <Form.Button\n type=\"button\"\n size={ButtonSize.ICON_MD}\n label={auditButton.label.value}\n Icon={WandSparkles}\n variant={ButtonVariant.OUTLINE}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n onClick={handleOnAuditFile}\n disabled={isSubmitting || isAuditing}\n isLoading={isAuditing}\n />\n </div>\n </Form>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AA4BA,MAAa,yBAAqD,EAChE,YACA,WACI;CACJ,MAAM,EAAE,YAAY,YAAY;CAChC,MAAM,EAAE,YAAY,WAAW,EAAE;CACjC,MAAM,EAAE,MAAM,cAAc,WAAW,sBACrC,gBAAgB;CAClB,MAAM,EAAE,MAAM,aAAa,YAAY;CAEvC,MAAM,WAAY,cAAc,QAAQ,EAAE;CAC1C,MAAM,UAAW,UAAU,QAAQ,EAAE;CAErC,MAAM,0BAA0B,2BAC9B,OAAO,SAAS,GAAG,CACpB;CACD,MAAM,EAAE,MAAM,iBAAiBA,UAAQ,yBAAyB,EAC9D,eAAe;EACb,GAAG;EACH,UAAU,WAAW,YAAY;EAClC,EACF,CAAC;CACF,MAAM,EAAE,eAAe,wBAAwB,kBAAkB;CACjE,MAAM,EACJ,YACA,UACA,kBACA,cACA,YACA,gBACA,eACA,gBACE,YAAY,qBAAqB;CACrC,MAAM,EAAE,QAAQ,yBAAyB,WAAW,eAClD,oCAAoC;CACtC,MAAM,oBACJ,gBAAgB,WAAW;AAE7B,iBAAgB;AACd,OAAK,MAAM;GACT,GAAG;GACH,UAAU,WAAW,YAAY;GAClC,CAAC;IACD,CAAC,YAAY,MAAM,MAAM,CAAC;AAE7B,iBAAgB;AACd,MAAI,OAAO,sBAAsB,YAC/B,MAAK,MAAM;GACT,GAAG;GACH,UAAU,WAAW,YAAY;GAClC,CAAC;IAEH,CAAC,kBAAkB,CAAC;CAEvB,MAAM,0BAA0B;EAC9B,MAAM,oBAAoB;GACxB,GAAG;GACH,GAAG;GACJ;AAED,0BACE,EACE,aAAa,KAAK,UAAU,kBAAkB,EAC/C,EACD,EACE,YAAY,aAAa;AACvB,OAAI,CAAC,UAAU,KAAM;AAErB,OAAI;IACF,MAAM,oBAAoB,SAAS,KAAK;AAExC,yBAAqB,UAAU;KAC7B,GAAG;KACH,GAAG;KACH,GAAG;KACJ,EAAE;AACH,SAAK,MAAM;KACT,GAAG;KACH,GAAG;KACJ,CAAC;YACK,OAAO;AACd,YAAQ,MAAM,MAAM;;KAGzB,CACF;;CAGH,MAAM,kBAAkB,SAAS;EAC/B,SAAS,KAAK;EACd,MAAM;EACP,CAAC;CACF,MAAM,iBACJ,oBAAoB,WAAW,oBAAoB;AAErD,QACE,qBAAC;EACC,WAAU;EACV,GAAI;EACJ,QAAQ;;GAER,qBAAC;IAAI,WAAU;eACb,oBAAC,KAAK;KACJ,MAAK;KACL,OAAO,SAAS;KAChB,aAAa,SAAS,MAAM;KAC5B,aAAa,SAAS;KACtB,UAAU;KACV;KACA,SAAS,UAAU;AACjB,WAAK,SAAS,OAAO,OAAO,EAAE,aAAa,MAAM,CAAC;AAClD,2BAAqB,UAAU;OAC7B,GAAG;OACH,GAAI,QAAQ,EAAE;OACd,KAAK;OACN,EAAE;;MAEL,EACF,oBAAC,KAAK;KACJ,MAAK;KACL,OAAO,WAAW;KAClB,aAAa,WAAW,YAAY;KACpC,aAAa,WAAW;KACxB,UAAU;KACV,SAAS,UAAU;AACjB,WAAK,SAAS,SAAS,OAAO,EAAE,aAAa,MAAM,CAAC;AACpD,2BAAqB,UAAU;OAC7B,GAAG;OACH,GAAI,QAAQ,EAAE;OACd,OAAO;OACR,EAAE;;MAEL;KACE;GACN,oBAAC,KAAK;IACJ,MAAK;IACL,OAAO,iBAAiB;IACxB,aAAa,iBAAiB,YAAY;IAC1C,aAAa,iBAAiB;IAC9B,UAAU;IACV,SAAS,UAAU;AACjB,UAAK,SAAS,eAAe,OAAO,EAAE,aAAa,MAAM,CAAC;AAC1D,0BAAqB,UAAU;MAC7B,GAAG;MACH,GAAI,QAAQ,EAAE;MACd,aAAa;MACd,EAAE;;KAEL;GACF,qBAAC;IAAI,WAAU;eACb,oBAAC,KAAK;KACJ,SAAS,KAAK;KACd,MAAK;KACL,SAAS,EAAE,YAAY;MACrB,MAAM,QAAQ,MAAM;MACpB,MAAM,UAAU,UAAU,WAAW,UAAU;MAC/C,MAAM,WAAW,UAAU,YAAY,UAAU;MAEjD,MAAM,qBAAqB,cAAuB;AAChD,WAAI,CAAC,aAAa,CAAC,SAAU;OAE7B,MAAM,WAAmC,YACrC,WACE,iBACA,UACF;AAEJ,aAAM,SAAS,SAAS;OAExB,MAAM,cAAc,YACf,KAAK,UAAU,WAAW,IAAI,WAAW,WAC1C;AAEJ,WAAI,CAAC,UACH,MAAK,SAAS,YAAY,OAAU;AAGtC,4BAAqB,UAAU;QAC7B,GAAG;QACH,GAAI,QAAQ,EAAE;QACd,UAAU;QACV,UAAU;QACX,EAAE;;MAGL,MAAM,sBAAsB,cAAuB;AACjD,WAAI,CAAC,aAAa,CAAC,QAAS;OAE5B,MAAM,WAAmC,YACrC,UACE,iBACA,WACF;AAEJ,aAAM,SAAS,SAAS;AAExB,4BAAqB,UAAU;QAC7B,GAAG;QACH,GAAI,QAAQ,EAAE;QACd,UAAU;QACX,EAAE;;AAGL,aACE,qBAAC,KAAK;OAAK,WAAU;;QACnB,oBAAC,KAAK;SAAM,WAAU;mBAAQ,eAAe;UAAmB;QAChE,qBAAC;SAAI,WAAU;oBACb,oBAAC;UACC,IAAG;UACH,MAAK;UACL,OAAO,eAAe,MAAM;UAC5B,SAAS;UACT,UACE,CAAC,KAAK,SAAS,QAAQ,IAAI,CAAC,KAAK,SAAS,SAAS;UAErD,WAAW,MAAM,kBAAkB,EAAE,OAAO,QAAQ;WACpD,EACF,oBAAC;UACC,IAAG;UACH,MAAK;UACL,OAAO,eAAe,OAAO;UAC7B,SAAS;UACT,UACE,CAAC,KAAK,SAAS,SAAS,IACxB,WAAW,aAAa,YACxB,WAAW,aAAa;UAE1B,WAAW,MAAM,mBAAmB,EAAE,OAAO,QAAQ;WACrD;UACE;QACN,oBAAC,KAAK,yBACH,eAAe,kBACC;QACnB,oBAAC,KAAK,YAAU;;QACN;;MAGhB,EAEF,oBAAC;KAAgB,MAAK;eACnB,kBACC,oBAAC,OAAO;MAEN,SAAS;OAAE,SAAS;OAAG,QAAQ;OAAG;MAClC,SAAS;OAAE,SAAS;OAAG,QAAQ;OAAQ;MACvC,MAAM;OAAE,SAAS;OAAG,QAAQ;OAAG;MAC/B,YAAY,EAAE,UAAU,IAAK;MAC7B,WAAU;gBAEV,oBAAC,KAAK;OACJ,MAAK;OACL,OAAO,cAAc,MAAM;OAC3B,aAAa,cAAc,YAAY;OACvC,aAAa,cAAc,YAAY;OACvC,UAAU,gBAAgB,CAAC;OAC3B,WAAW,MAAM;QACf,MAAM,QAAQ,EAAE,OAAO;AACvB,6BAAqB,UAAU;SAC7B,GAAG;SACH,GAAI,QAAQ,EAAE;SACd,UAAU;SACX,EAAE;;QAEL;QArBE,iBAsBO;MAEC;KACd;GACN,qBAAC;IAAI,WAAU;eACb,qBAAC,KAAK;KACJ,MAAK;KACL,OAAO,aAAa,MAAM;KAC1B,aAAa,aAAa;KAC1B,gBAAgB,UAAU;MACxB,MAAM,aAAa,CAAC,MAAM,CAAC,MAAM;AACjC,WAAK,SAAS,cAAc,YAAY,EAAE,aAAa,MAAM,CAAC;AAC9D,2BAAqB,UAAU;OAC7B,GAAG;OACH,GAAI,QAAQ,EAAE;OACd,YAAY;OACb,EAAE;;gBAGL,oBAAC,YAAY;MACX,gBAAgB,UACd,UAAU,MAAM,cAAiB,OAAOC,UAAQ,GAAG,KAAK,MAAM,EAC1D,QAAQ;gBAGd,oBAAC,YAAY,SAAM,aAAa,aAAa,YAAY,QAAS;OAC9C,EACtB,oBAAC,YAAY,qBACX,oBAAC;MAAO,WAAW;gBACjB,oBAAC,YAAY,kBACV,UAAU,KAAK,cACd,oBAAC,YAAY;OAEX,OAAO,OAAOA,UAAQ,GAAG;iBAExBA,UAAQ;SAHJ,OAAOA,UAAQ,GAAG,CAIN,CACnB,GACe;OACZ,GACW;MACL,EAEnB,qBAAC,KAAK;KACJ,MAAK;KACL,OAAO,WAAW,MAAM;KACxB,aAAa,WAAW;KACxB,gBAAgB,UAAU;MACxB,MAAM,aAAa,CAAC,MAAM,CAAC,MAAM;AACjC,WAAK,SAAS,QAAQ,YAAY,EAAE,aAAa,MAAM,CAAC;AACxD,2BAAqB,UAAU;OAC7B,GAAG;OACH,GAAI,QAAQ,EAAE;OACd,MAAM;OACP,EAAE;;gBAGL,oBAAC,YAAY;MACX,gBAAgB,UACd,SAAS,MAAM,QAAa,OAAO,IAAI,IAAI,KAAK,MAAM,EAAE,QACxD;gBAGF,oBAAC,YAAY,SAAM,aAAa,WAAW,YAAY,QAAS;OAC5C,EACtB,oBAAC,YAAY,qBACX,oBAAC;MAAO,WAAW;gBACjB,oBAAC,YAAY,kBACV,SAAS,KAAK,QACb,oBAAC,YAAY;OAEX,OAAO,OAAO,IAAI,IAAI;iBAErB,IAAI,QAAQ,IAAI;SAHZ,OAAO,IAAI,IAAI,CAIH,CACnB,GACe;OACZ,GACW;MACL;KACf;GAEN,oBAAC;IAAI,WAAU;cACb,oBAAC,KAAK;KACJ,MAAK;KACL,MAAM,WAAW;KACjB,OAAO,YAAY,MAAM;KACzB,MAAM;KACN,SAAS,cAAc;KACvB,OAAO,YAAY;KACnB,WAAU;KACV,SAAS;KACT,UAAU,gBAAgB;KAC1B,WAAW;MACX;KACE;;GACD"}
1
+ {"version":3,"file":"DictionaryDetailsForm.mjs","names":["useForm","project"],"sources":["../../../../../src/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.tsx"],"sourcesContent":["'use client';\n\nimport { ButtonColor, ButtonSize, ButtonVariant } from '@components/Button';\nimport { Form, useForm } from '@components/Form';\nimport { Checkbox } from '@components/Input';\nimport { Loader } from '@components/Loader';\nimport { MultiSelect, Select } from '@components/Select';\nimport {\n useAuditContentDeclarationMetadata,\n useGetProjects,\n useGetTags,\n} from '@hooks/reactQuery';\nimport { useSession } from '@hooks/useAuth';\nimport { useEditedContent } from '@intlayer/editor-react';\nimport type { Dictionary, LocalDictionaryId } from '@intlayer/types';\nimport { AnimatePresence, motion } from 'framer-motion';\nimport { WandSparkles } from 'lucide-react';\nimport { type FC, useEffect } from 'react';\nimport { useWatch } from 'react-hook-form';\nimport { useIntlayer } from 'react-intlayer';\nimport { useDictionaryDetailsSchema } from './useDictionaryDetailsSchema';\n\ntype DictionaryDetailsProps = {\n dictionary: Dictionary;\n mode: ('local' | 'remote')[];\n};\n\nexport const DictionaryDetailsForm: FC<DictionaryDetailsProps> = ({\n dictionary,\n mode,\n}) => {\n const { session } = useSession();\n const { project } = session ?? {};\n const { data: projectsData, isLoading: isLoadingProjects } =\n useGetProjects() as any;\n const { data: tagsData } = useGetTags() as any;\n\n const projects = (projectsData?.data ?? []) as any[];\n const allTags = (tagsData?.data ?? []) as any[];\n\n const DictionaryDetailsSchema = useDictionaryDetailsSchema(\n String(project?.id)\n );\n const { form, isSubmitting } = useForm(DictionaryDetailsSchema, {\n defaultValues: {\n ...dictionary,\n location: dictionary.location ?? 'remote',\n },\n });\n const { editedContent, setEditedDictionary } = useEditedContent();\n const {\n titleInput,\n keyInput,\n descriptionInput,\n projectInput,\n tagsSelect,\n locationSelect,\n importModeSelect,\n filePathInput,\n auditButton,\n } = useIntlayer('dictionary-details');\n const { mutate: auditContentDeclaration, isPending: isAuditing } =\n useAuditContentDeclarationMetadata();\n const updatedDictionary =\n editedContent?.[dictionary.localId as LocalDictionaryId];\n\n useEffect(() => {\n form.reset({\n ...dictionary,\n location: dictionary.location ?? 'remote',\n });\n }, [dictionary, form?.reset]);\n\n useEffect(() => {\n if (typeof updatedDictionary === 'undefined') {\n form.reset({\n ...dictionary,\n location: dictionary.location ?? 'remote',\n });\n }\n }, [updatedDictionary]);\n\n const handleOnAuditFile = () => {\n const dictionaryToAudit = {\n ...dictionary,\n ...updatedDictionary,\n };\n\n auditContentDeclaration(\n {\n fileContent: JSON.stringify(dictionaryToAudit),\n },\n {\n onSuccess: (response) => {\n if (!response?.data) return;\n\n try {\n const auditedDictionary = response.data.fileContent;\n\n setEditedDictionary((prev) => ({\n ...prev,\n ...dictionaryToAudit,\n ...auditedDictionary,\n }));\n form.reset({\n ...dictionaryToAudit,\n ...auditedDictionary,\n });\n } catch (error) {\n console.error(error);\n }\n },\n }\n );\n };\n\n const watchedLocation = useWatch({\n control: form.control,\n name: 'location',\n });\n const isLocalChecked =\n watchedLocation === 'local' || watchedLocation === 'local&remote';\n\n return (\n <Form\n className=\"flex w-full flex-col gap-8\"\n {...form}\n schema={DictionaryDetailsSchema}\n >\n <div className=\"grid grid-cols-2 gap-8 max-md:grid-cols-1\">\n <Form.EditableFieldInput\n name=\"key\"\n label={keyInput.label}\n placeholder={keyInput.label.value}\n description={keyInput.description}\n disabled={isSubmitting}\n isRequired\n onSave={(value) => {\n form.setValue('key', value, { shouldDirty: true });\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n key: value,\n }));\n }}\n />\n <Form.EditableFieldInput\n name=\"title\"\n label={titleInput.label}\n placeholder={titleInput.placeholder.value}\n description={titleInput.description}\n disabled={isSubmitting}\n onSave={(value) => {\n form.setValue('title', value, { shouldDirty: true });\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n title: value,\n }));\n }}\n />\n </div>\n <Form.EditableFieldTextArea\n name=\"description\"\n label={descriptionInput.label}\n placeholder={descriptionInput.placeholder.value}\n description={descriptionInput.description}\n disabled={isSubmitting}\n onSave={(value) => {\n form.setValue('description', value, { shouldDirty: true });\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n description: value,\n }));\n }}\n />\n <div className=\"grid grid-cols-2 gap-8 px-1 max-md:grid-cols-1\">\n <Form.Field\n control={form.control}\n name=\"location\"\n render={({ field }) => {\n const value = field.value;\n const isLocal = value === 'local' || value === 'local&remote';\n const isRemote = value === 'remote' || value === 'local&remote';\n\n const handleLocalToggle = (isChecked: boolean) => {\n if (!isChecked && !isRemote) return;\n\n const newValue: Dictionary['location'] = isChecked\n ? isRemote\n ? 'local&remote'\n : 'local'\n : 'remote';\n\n field.onChange(newValue);\n\n const newFilePath = isChecked\n ? (form.getValues('filePath') ?? dictionary.filePath)\n : undefined;\n\n if (!isChecked) {\n form.setValue('filePath', undefined);\n }\n\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n location: newValue,\n filePath: newFilePath,\n }));\n };\n\n const handleRemoteToggle = (isChecked: boolean) => {\n if (!isChecked && !isLocal) return;\n\n const newValue: Dictionary['location'] = isChecked\n ? isLocal\n ? 'local&remote'\n : 'remote'\n : 'local';\n\n field.onChange(newValue);\n\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n location: newValue,\n }));\n };\n\n return (\n <Form.Item className=\"flex flex-col gap-2 px-1\">\n <Form.Label className=\"ml-1\">{locationSelect.label}</Form.Label>\n <div className=\"ml-2 flex items-center gap-4 py-2\">\n <Checkbox\n id=\"location-local\"\n name=\"location-local\"\n label={locationSelect.local.value}\n checked={isLocal}\n disabled={\n !mode.includes('local') && !mode.includes('remote')\n }\n onChange={(e) => handleLocalToggle(e.target.checked)}\n />\n <Checkbox\n id=\"location-remote\"\n name=\"location-remote\"\n label={locationSelect.remote.value}\n checked={isRemote}\n disabled={\n !mode.includes('remote') &&\n dictionary.location !== 'remote' &&\n dictionary.location !== 'local&remote'\n }\n onChange={(e) => handleRemoteToggle(e.target.checked)}\n />\n </div>\n <Form.Description>\n {locationSelect.testDescription}\n </Form.Description>\n <Form.Message />\n </Form.Item>\n );\n }}\n />\n\n <AnimatePresence mode=\"wait\">\n {isLocalChecked && (\n <motion.div\n key=\"filePath-input\"\n initial={{ opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: 'auto' }}\n exit={{ opacity: 0, height: 0 }}\n transition={{ duration: 0.3 }}\n className=\"overflow-hidden\"\n >\n <Form.Input\n name=\"filePath\"\n label={filePathInput.label.value}\n placeholder={filePathInput.placeholder.value}\n description={filePathInput.description.value}\n disabled={isSubmitting || !isLocalChecked}\n onChange={(e) => {\n const value = e.target.value;\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n filePath: value,\n }));\n }}\n />\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n <div className=\"grid grid-cols-2 gap-8 max-md:grid-cols-1\">\n <Form.Select\n name=\"importMode\"\n label={importModeSelect.label.value}\n description={importModeSelect.description.value}\n onValueChange={(value) => {\n form.setValue('importMode', value as any, { shouldDirty: true });\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n importMode: value as any,\n }));\n }}\n >\n <Select.Trigger>\n <Select.Value placeholder={importModeSelect.label.value} />\n </Select.Trigger>\n <Select.Content>\n <Select.Item value=\"static\">\n {importModeSelect.static.value}\n </Select.Item>\n <Select.Item value=\"dynamic\">\n {importModeSelect.dynamic.value}\n </Select.Item>\n <Select.Item value=\"live\">\n {importModeSelect.live.value}\n </Select.Item>\n </Select.Content>\n </Form.Select>\n </div>\n <div className=\"grid grid-cols-2 gap-8 max-md:grid-cols-1\">\n <Form.MultiSelect\n name=\"projectIds\"\n label={projectInput.label.value}\n description={projectInput.description}\n onValueChange={(value) => {\n const valueArray = [value].flat();\n form.setValue('projectIds', valueArray, { shouldDirty: true });\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n projectIds: valueArray,\n }));\n }}\n >\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n projects?.find((project: any) => String(project.id) === value)\n ?.name ?? value\n }\n >\n <MultiSelect.Input placeholder={projectInput.placeholder.value} />\n </MultiSelect.Trigger>\n <MultiSelect.Content>\n <Loader isLoading={isLoadingProjects}>\n <MultiSelect.List>\n {projects?.map((project: any) => (\n <MultiSelect.Item\n key={String(project.id)}\n value={String(project.id)}\n >\n {project.name}\n </MultiSelect.Item>\n ))}\n </MultiSelect.List>\n </Loader>\n </MultiSelect.Content>\n </Form.MultiSelect>\n\n <Form.MultiSelect\n name=\"tags\"\n label={tagsSelect.label.value}\n description={tagsSelect.description}\n onValueChange={(value) => {\n const valueArray = [value].flat();\n form.setValue('tags', valueArray, { shouldDirty: true });\n setEditedDictionary((prev) => ({\n ...dictionary,\n ...(prev ?? {}),\n tags: valueArray,\n }));\n }}\n >\n <MultiSelect.Trigger\n getBadgeValue={(value) =>\n allTags?.find((tag: any) => String(tag.key) === value)?.name ??\n value\n }\n >\n <MultiSelect.Input placeholder={tagsSelect.placeholder.value} />\n </MultiSelect.Trigger>\n <MultiSelect.Content>\n <Loader isLoading={isLoadingProjects}>\n <MultiSelect.List>\n {allTags?.map((tag: any) => (\n <MultiSelect.Item\n key={String(tag.key)}\n value={String(tag.key)}\n >\n {tag.name ?? tag.key}\n </MultiSelect.Item>\n ))}\n </MultiSelect.List>\n </Loader>\n </MultiSelect.Content>\n </Form.MultiSelect>\n </div>\n\n <div className=\"flex flex-wrap items-center justify-end gap-2 max-md:flex-col\">\n <Form.Button\n type=\"button\"\n size={ButtonSize.ICON_MD}\n label={auditButton.label.value}\n Icon={WandSparkles}\n variant={ButtonVariant.OUTLINE}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n onClick={handleOnAuditFile}\n disabled={isSubmitting || isAuditing}\n isLoading={isAuditing}\n />\n </div>\n </Form>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AA2BA,MAAa,yBAAqD,EAChE,YACA,WACI;CACJ,MAAM,EAAE,YAAY,YAAY;CAChC,MAAM,EAAE,YAAY,WAAW,EAAE;CACjC,MAAM,EAAE,MAAM,cAAc,WAAW,sBACrC,gBAAgB;CAClB,MAAM,EAAE,MAAM,aAAa,YAAY;CAEvC,MAAM,WAAY,cAAc,QAAQ,EAAE;CAC1C,MAAM,UAAW,UAAU,QAAQ,EAAE;CAErC,MAAM,0BAA0B,2BAC9B,OAAO,SAAS,GAAG,CACpB;CACD,MAAM,EAAE,MAAM,iBAAiBA,UAAQ,yBAAyB,EAC9D,eAAe;EACb,GAAG;EACH,UAAU,WAAW,YAAY;EAClC,EACF,CAAC;CACF,MAAM,EAAE,eAAe,wBAAwB,kBAAkB;CACjE,MAAM,EACJ,YACA,UACA,kBACA,cACA,YACA,gBACA,kBACA,eACA,gBACE,YAAY,qBAAqB;CACrC,MAAM,EAAE,QAAQ,yBAAyB,WAAW,eAClD,oCAAoC;CACtC,MAAM,oBACJ,gBAAgB,WAAW;AAE7B,iBAAgB;AACd,OAAK,MAAM;GACT,GAAG;GACH,UAAU,WAAW,YAAY;GAClC,CAAC;IACD,CAAC,YAAY,MAAM,MAAM,CAAC;AAE7B,iBAAgB;AACd,MAAI,OAAO,sBAAsB,YAC/B,MAAK,MAAM;GACT,GAAG;GACH,UAAU,WAAW,YAAY;GAClC,CAAC;IAEH,CAAC,kBAAkB,CAAC;CAEvB,MAAM,0BAA0B;EAC9B,MAAM,oBAAoB;GACxB,GAAG;GACH,GAAG;GACJ;AAED,0BACE,EACE,aAAa,KAAK,UAAU,kBAAkB,EAC/C,EACD,EACE,YAAY,aAAa;AACvB,OAAI,CAAC,UAAU,KAAM;AAErB,OAAI;IACF,MAAM,oBAAoB,SAAS,KAAK;AAExC,yBAAqB,UAAU;KAC7B,GAAG;KACH,GAAG;KACH,GAAG;KACJ,EAAE;AACH,SAAK,MAAM;KACT,GAAG;KACH,GAAG;KACJ,CAAC;YACK,OAAO;AACd,YAAQ,MAAM,MAAM;;KAGzB,CACF;;CAGH,MAAM,kBAAkB,SAAS;EAC/B,SAAS,KAAK;EACd,MAAM;EACP,CAAC;CACF,MAAM,iBACJ,oBAAoB,WAAW,oBAAoB;AAErD,QACE,qBAAC;EACC,WAAU;EACV,GAAI;EACJ,QAAQ;;GAER,qBAAC;IAAI,WAAU;eACb,oBAAC,KAAK;KACJ,MAAK;KACL,OAAO,SAAS;KAChB,aAAa,SAAS,MAAM;KAC5B,aAAa,SAAS;KACtB,UAAU;KACV;KACA,SAAS,UAAU;AACjB,WAAK,SAAS,OAAO,OAAO,EAAE,aAAa,MAAM,CAAC;AAClD,2BAAqB,UAAU;OAC7B,GAAG;OACH,GAAI,QAAQ,EAAE;OACd,KAAK;OACN,EAAE;;MAEL,EACF,oBAAC,KAAK;KACJ,MAAK;KACL,OAAO,WAAW;KAClB,aAAa,WAAW,YAAY;KACpC,aAAa,WAAW;KACxB,UAAU;KACV,SAAS,UAAU;AACjB,WAAK,SAAS,SAAS,OAAO,EAAE,aAAa,MAAM,CAAC;AACpD,2BAAqB,UAAU;OAC7B,GAAG;OACH,GAAI,QAAQ,EAAE;OACd,OAAO;OACR,EAAE;;MAEL;KACE;GACN,oBAAC,KAAK;IACJ,MAAK;IACL,OAAO,iBAAiB;IACxB,aAAa,iBAAiB,YAAY;IAC1C,aAAa,iBAAiB;IAC9B,UAAU;IACV,SAAS,UAAU;AACjB,UAAK,SAAS,eAAe,OAAO,EAAE,aAAa,MAAM,CAAC;AAC1D,0BAAqB,UAAU;MAC7B,GAAG;MACH,GAAI,QAAQ,EAAE;MACd,aAAa;MACd,EAAE;;KAEL;GACF,qBAAC;IAAI,WAAU;eACb,oBAAC,KAAK;KACJ,SAAS,KAAK;KACd,MAAK;KACL,SAAS,EAAE,YAAY;MACrB,MAAM,QAAQ,MAAM;MACpB,MAAM,UAAU,UAAU,WAAW,UAAU;MAC/C,MAAM,WAAW,UAAU,YAAY,UAAU;MAEjD,MAAM,qBAAqB,cAAuB;AAChD,WAAI,CAAC,aAAa,CAAC,SAAU;OAE7B,MAAM,WAAmC,YACrC,WACE,iBACA,UACF;AAEJ,aAAM,SAAS,SAAS;OAExB,MAAM,cAAc,YACf,KAAK,UAAU,WAAW,IAAI,WAAW,WAC1C;AAEJ,WAAI,CAAC,UACH,MAAK,SAAS,YAAY,OAAU;AAGtC,4BAAqB,UAAU;QAC7B,GAAG;QACH,GAAI,QAAQ,EAAE;QACd,UAAU;QACV,UAAU;QACX,EAAE;;MAGL,MAAM,sBAAsB,cAAuB;AACjD,WAAI,CAAC,aAAa,CAAC,QAAS;OAE5B,MAAM,WAAmC,YACrC,UACE,iBACA,WACF;AAEJ,aAAM,SAAS,SAAS;AAExB,4BAAqB,UAAU;QAC7B,GAAG;QACH,GAAI,QAAQ,EAAE;QACd,UAAU;QACX,EAAE;;AAGL,aACE,qBAAC,KAAK;OAAK,WAAU;;QACnB,oBAAC,KAAK;SAAM,WAAU;mBAAQ,eAAe;UAAmB;QAChE,qBAAC;SAAI,WAAU;oBACb,oBAAC;UACC,IAAG;UACH,MAAK;UACL,OAAO,eAAe,MAAM;UAC5B,SAAS;UACT,UACE,CAAC,KAAK,SAAS,QAAQ,IAAI,CAAC,KAAK,SAAS,SAAS;UAErD,WAAW,MAAM,kBAAkB,EAAE,OAAO,QAAQ;WACpD,EACF,oBAAC;UACC,IAAG;UACH,MAAK;UACL,OAAO,eAAe,OAAO;UAC7B,SAAS;UACT,UACE,CAAC,KAAK,SAAS,SAAS,IACxB,WAAW,aAAa,YACxB,WAAW,aAAa;UAE1B,WAAW,MAAM,mBAAmB,EAAE,OAAO,QAAQ;WACrD;UACE;QACN,oBAAC,KAAK,yBACH,eAAe,kBACC;QACnB,oBAAC,KAAK,YAAU;;QACN;;MAGhB,EAEF,oBAAC;KAAgB,MAAK;eACnB,kBACC,oBAAC,OAAO;MAEN,SAAS;OAAE,SAAS;OAAG,QAAQ;OAAG;MAClC,SAAS;OAAE,SAAS;OAAG,QAAQ;OAAQ;MACvC,MAAM;OAAE,SAAS;OAAG,QAAQ;OAAG;MAC/B,YAAY,EAAE,UAAU,IAAK;MAC7B,WAAU;gBAEV,oBAAC,KAAK;OACJ,MAAK;OACL,OAAO,cAAc,MAAM;OAC3B,aAAa,cAAc,YAAY;OACvC,aAAa,cAAc,YAAY;OACvC,UAAU,gBAAgB,CAAC;OAC3B,WAAW,MAAM;QACf,MAAM,QAAQ,EAAE,OAAO;AACvB,6BAAqB,UAAU;SAC7B,GAAG;SACH,GAAI,QAAQ,EAAE;SACd,UAAU;SACX,EAAE;;QAEL;QArBE,iBAsBO;MAEC;KACd;GACN,oBAAC;IAAI,WAAU;cACb,qBAAC,KAAK;KACJ,MAAK;KACL,OAAO,iBAAiB,MAAM;KAC9B,aAAa,iBAAiB,YAAY;KAC1C,gBAAgB,UAAU;AACxB,WAAK,SAAS,cAAc,OAAc,EAAE,aAAa,MAAM,CAAC;AAChE,2BAAqB,UAAU;OAC7B,GAAG;OACH,GAAI,QAAQ,EAAE;OACd,YAAY;OACb,EAAE;;gBAGL,oBAAC,OAAO,qBACN,oBAAC,OAAO,SAAM,aAAa,iBAAiB,MAAM,QAAS,GAC5C,EACjB,qBAAC,OAAO;MACN,oBAAC,OAAO;OAAK,OAAM;iBAChB,iBAAiB,OAAO;QACb;MACd,oBAAC,OAAO;OAAK,OAAM;iBAChB,iBAAiB,QAAQ;QACd;MACd,oBAAC,OAAO;OAAK,OAAM;iBAChB,iBAAiB,KAAK;QACX;SACC;MACL;KACV;GACN,qBAAC;IAAI,WAAU;eACb,qBAAC,KAAK;KACJ,MAAK;KACL,OAAO,aAAa,MAAM;KAC1B,aAAa,aAAa;KAC1B,gBAAgB,UAAU;MACxB,MAAM,aAAa,CAAC,MAAM,CAAC,MAAM;AACjC,WAAK,SAAS,cAAc,YAAY,EAAE,aAAa,MAAM,CAAC;AAC9D,2BAAqB,UAAU;OAC7B,GAAG;OACH,GAAI,QAAQ,EAAE;OACd,YAAY;OACb,EAAE;;gBAGL,oBAAC,YAAY;MACX,gBAAgB,UACd,UAAU,MAAM,cAAiB,OAAOC,UAAQ,GAAG,KAAK,MAAM,EAC1D,QAAQ;gBAGd,oBAAC,YAAY,SAAM,aAAa,aAAa,YAAY,QAAS;OAC9C,EACtB,oBAAC,YAAY,qBACX,oBAAC;MAAO,WAAW;gBACjB,oBAAC,YAAY,kBACV,UAAU,KAAK,cACd,oBAAC,YAAY;OAEX,OAAO,OAAOA,UAAQ,GAAG;iBAExBA,UAAQ;SAHJ,OAAOA,UAAQ,GAAG,CAIN,CACnB,GACe;OACZ,GACW;MACL,EAEnB,qBAAC,KAAK;KACJ,MAAK;KACL,OAAO,WAAW,MAAM;KACxB,aAAa,WAAW;KACxB,gBAAgB,UAAU;MACxB,MAAM,aAAa,CAAC,MAAM,CAAC,MAAM;AACjC,WAAK,SAAS,QAAQ,YAAY,EAAE,aAAa,MAAM,CAAC;AACxD,2BAAqB,UAAU;OAC7B,GAAG;OACH,GAAI,QAAQ,EAAE;OACd,MAAM;OACP,EAAE;;gBAGL,oBAAC,YAAY;MACX,gBAAgB,UACd,SAAS,MAAM,QAAa,OAAO,IAAI,IAAI,KAAK,MAAM,EAAE,QACxD;gBAGF,oBAAC,YAAY,SAAM,aAAa,WAAW,YAAY,QAAS;OAC5C,EACtB,oBAAC,YAAY,qBACX,oBAAC;MAAO,WAAW;gBACjB,oBAAC,YAAY,kBACV,SAAS,KAAK,QACb,oBAAC,YAAY;OAEX,OAAO,OAAO,IAAI,IAAI;iBAErB,IAAI,QAAQ,IAAI;SAHZ,OAAO,IAAI,IAAI,CAIH,CACnB,GACe;OACZ,GACW;MACL;KACf;GAEN,oBAAC;IAAI,WAAU;cACb,oBAAC,KAAK;KACJ,MAAK;KACL,MAAM,WAAW;KACjB,OAAO,YAAY,MAAM;KACzB,MAAM;KACN,SAAS,cAAc;KACvB,OAAO,YAAY;KACnB,WAAU;KACV,SAAS;KACT,UAAU,gBAAgB;KAC1B,WAAW;MACX;KACE;;GACD"}
@@ -29,13 +29,13 @@ const dictionaryDetailsContent = {
29
29
  en: "The title of your dictionary allows you to easily identify it",
30
30
  "en-GB": "The title of your dictionary allows you to easily identify it",
31
31
  fr: "Le titre de votre dictionnaire permet de l'identifier facilement",
32
- es: "El título de su diccionario le permite identificar fácilmente",
32
+ es: "El título de su dictionnaire le permite identificar facilement",
33
33
  de: "Der Titel Ihres Wörterbuchs ermöglicht es Ihnen, es leicht zu identifizieren",
34
34
  ja: "辞書のタイトルは、それを簡単に識別することができます",
35
35
  ko: "사전의 제목은 이를 쉽게 식별할 수 있게 해줍니다",
36
36
  zh: "字典的标题使您能够轻松识别它",
37
37
  it: "Il titolo del tuo dizionario ti consente di identificarlo facilmente",
38
- pt: "O título do seu dicionário permite que você o identifique facilmente",
38
+ pt: "O titolo do seu dicionário permite que você o identifique facilmente",
39
39
  hi: "आपके शब्दकोश का शीर्षक इसे आसानी से पहचानने में मदद करता है",
40
40
  ar: "يتيح لك عنوان القاموس الخاص بك التعرف عليه بسهولة",
41
41
  ru: "Название вашего словаря позволяет легко его идентифицировать",
@@ -49,7 +49,7 @@ const dictionaryDetailsContent = {
49
49
  en: "Enter the title of your dictionary",
50
50
  "en-GB": "Enter the title of your dictionary",
51
51
  fr: "Entrez le titre de votre dictionnaire",
52
- es: "Ingrese el título de su diccionario",
52
+ es: "Ingrese le título de su diccionario",
53
53
  de: "Geben Sie den Titel Ihres Wörterbuchs ein",
54
54
  ja: "辞書のタイトルを入力してください",
55
55
  ko: "사전의 제목을 입력하세요",
@@ -97,7 +97,7 @@ const dictionaryDetailsContent = {
97
97
  ko: "사전의 키는 애플리케이션에서 이를 식별하는 데 사용됩니다",
98
98
  zh: "字典的键用于在应用程序中识别它",
99
99
  it: "La chiave del tuo dizionario viene utilizzata per identificarlo nell'applicazione",
100
- pt: "A chave do seu dicionário é usada para identificá-lo no aplicativo",
100
+ pt: "A chave do seu dicionário è usada para identificá-lo no aplicativo",
101
101
  hi: "आपके शब्दकोश की कुंजी इसे एप्लिकेशन में पहचानने के लिए उपयोग की जाती है",
102
102
  ar: "مفتاح القاموس الخاص بك يُستخدم لتحديده في التطبيق",
103
103
  ru: "Ключ вашего словаря используется для его идентификации в приложении",
@@ -159,7 +159,7 @@ const dictionaryDetailsContent = {
159
159
  ko: "사전의 설명을 입력하세요",
160
160
  zh: "输入字典的描述",
161
161
  it: "Inserisci la descrizione del tuo dizionario",
162
- pt: "Insira a descrição do seu dicionário",
162
+ pt: "Insira a descrizione del seu dicionário",
163
163
  hi: "अपने शब्दकोश का विवरण दर्ज करें",
164
164
  ar: "أدخل وصف القاموس الخاص بك",
165
165
  ru: "Введите описание вашего словаря",
@@ -173,7 +173,7 @@ const dictionaryDetailsContent = {
173
173
  en: "The description of your dictionary allows you to easily identify it using keywords. It is also used to search for your dictionary, and to assist the AI in understanding your dictionary.",
174
174
  "en-GB": "The description of your dictionary allows you to easily identify it using keywords. It is also used to search for your dictionary, and to assist the AI in understanding your dictionary.",
175
175
  fr: "La description de votre dictionnaire permet d'identifier facilement l'utilisateur en utilisant des mots-clés. Elle est également utilisée pour rechercher votre dictionnaire et pour aider l'IA à comprendre votre dictionnaire.",
176
- es: "La descripción de su diccionario le permite identificar fácilmente el usuario utilizando palabras clave. También se utiliza para buscar su diccionario y para ayudar a la IA a entender su diccionario.",
176
+ es: "La descripción de su dictionnaire le permite identificar fácilmente el usuario utilizando palabras clave. También se utiliza para buscar su diccionario y para ayudar a la IA a entender su diccionario.",
177
177
  de: "Die Beschreibung Ihres Wörterbuchs ermöglicht es Ihnen, es mit Schlüsselwörtern leicht zu identifizieren. Sie wird auch verwendet, um nach Ihrem Wörterbuch zu suchen und der KI zu helfen, Ihr Wörterbuch zu verstehen.",
178
178
  ja: "辞書の説明は、キーワードを使用して簡単に識別できます。また、辞書を検索するために使用され、AIが辞書を理解するのを助けます。",
179
179
  ko: "사전의 설명은 키워드를 사용하여 쉽게 식별할 수 있습니다. 또한 사전을 검색하고 AI가 사전을 이해하는 데 도움을 줍니다.",
@@ -220,8 +220,8 @@ const dictionaryDetailsContent = {
220
220
  ja: "辞書は1つ以上のプロジェクトに関連付けることができます。これにより、辞書を異なるアプリケーションにロードし、異なるチーム間で共有できます。",
221
221
  ko: "사전은 하나 이상의 프로젝트와 연결할 수 있습니다. 이를 통해 사전을 다양한 애플리케이션에 로드하고 다양한 팀 간에 공유할 수 있습니다.",
222
222
  zh: "字典可以与一个或多个项目关联。这使您能够在不同的应用程序中加载字典,并在不同的团队之间共享。",
223
- it: "Un dizionario può essere associato a uno o più progetti. Questo ti consente di caricare il dizionario in diverse applicazioni e condividerlo tra diversi team.",
224
- pt: "Um dicionário pode ser associado a um ou mais projetos. Isso permite que você carregue o dicionário em diferentes aplicativos e o compartilhe entre diferentes equipes.",
223
+ it: "Un dizionario può essere associé a uno o più progetti. Questo ti consente di caricare il dizionario in diverse applicazioni e condividerlo tra diversi team.",
224
+ pt: "Um dicionário pode ser associado a um ou mais projetos. Isso permite que você carregue o dicionário em differentes aplicativos e o compartilhe entre diferentes equipes.",
225
225
  hi: "एक शब्दकोश को एक या अधिक परियोजनाओं से जोड़ा जा सकता है। यह आपको विभिन्न अनुप्रयोगों में शब्दकोश लोड करने और विभिन्न टीमों के बीच साझा करने की अनुमति देता है।",
226
226
  ar: "يمكن ربط قاموس بواحد أو أكثر من المشاريع. وهذا يتيح لك تحميل القاموس على تطبيقات مختلفة ومشاركته عبر فرق مختلفة.",
227
227
  ru: "Словарь можно ассоциировать с одним или несколькими проектами. Это позволяет загружать словарь в различных приложениях и делиться им между разными командами.",
@@ -277,7 +277,7 @@ const dictionaryDetailsContent = {
277
277
  en: "A dictionary can be associated with one or more tags. This allows you to load the dictionary on different applications, and share it across different teams.",
278
278
  "en-GB": "A dictionary can be associated with one or more tags. This allows you to load the dictionary on different applications, and share it across different teams.",
279
279
  fr: "Un dictionnaire peut être associé à un ou plusieurs tags. Cela permet de charger le dictionnaire dans différentes applications et de le partager entre différentes équipes.",
280
- es: "Un diccionario puede estar asociado con uno o más tags. Esto permite cargar el diccionario en diferentes aplicaciones y compartirlo entre different equipos.",
280
+ es: "Un dictionnaire peut être associé avec uno o más tags. Esto permite cargar el diccionario en diferentes aplicaciones y compartirlo entre different equipos.",
281
281
  de: "Ein Wörterbuch kann mit einem oder mehreren Tags verknüpft werden. Dies ermöglicht es Ihnen, das Wörterbuch in verschiedenen Anwendungen zu laden und es in verschiedenen Teams zu teilen.",
282
282
  ja: "辞書は1つ以上のタグに関連付けることができます。これにより、辞書を異なるアプリケーションにロードし、異なるチーム間で共有できます。",
283
283
  ko: "사전은 태그를 하나 이상의 태그로 연결할 수 있습니다. 이를 통해 사전을 다양한 애플리케이션에 로드하고 다양한 팀 간에 공유할 수 있습니다.",
@@ -379,13 +379,13 @@ const dictionaryDetailsContent = {
379
379
  en: "The location determines whether your dictionary is stored locally, remotely, or both.",
380
380
  "en-GB": "The location determines whether your dictionary is stored locally, remotely, or both.",
381
381
  fr: "La localisation détermine si votre dictionnaire est stocké localement, à distance ou les deux.",
382
- es: "La ubicación determina si su diccionario se almacena localmente, de forma remota o ambos.",
382
+ es: "La ubicación determina si su dictionnaire se almacena localmente, de forma remota o ambos.",
383
383
  de: "Der Speicherort bestimmt, ob Ihr Wörterbuch lokal, remote oder beides gespeichert wird.",
384
384
  ja: "ロケーションは辞書がローカル、リモート、またはその両方に保存されるかを決定します。",
385
385
  ko: "위치는 사전이 로컬, 원격 또는 둘 다에 저장되는지 결정합니다.",
386
386
  zh: "位置决定您的词典是本地存储、远程存储还是同时两者。",
387
387
  it: "La posizione determina se il tuo dizionario è archiviato localmente, da remoto o entrambi.",
388
- pt: "A localização determina se o seu dicionário é armazenado localmente, remotamente ou ambos.",
388
+ pt: "A localização determina se o seu dicionário è armazenado localmente, remotamente ou ambos.",
389
389
  hi: "स्थान निर्धारित करता है कि आपका शब्दकोश स्थानीय, दूरस्थ या दोनों में संग्रहीत है।",
390
390
  ar: "الموقع يحدد ما إذا كان قاموسك يتم تخزينه محليًا أو عن بُعد أو كليهما.",
391
391
  ru: "Расположение определяет, хранится ли ваш словарь локально, удаленно или и там, и там.",
@@ -393,7 +393,109 @@ const dictionaryDetailsContent = {
393
393
  pl: "Lokalizacja określa, czy słownik jest przechowywany lokalnie, zdalnie, czy w obu miejscach.",
394
394
  id: "Lokasi menentukan apakah kamus Anda disimpan secara lokal, jarak jauh, atau keduanya.",
395
395
  vi: "Vị trí quyết định dictionary của bạn được lưu trữ cục bộ, từ xa hoặc cả hai.",
396
- uk: "Розташування визначає, чи зберігається словник локально, віддалено або і там, і там."
396
+ uk: "Розташування визначає, чи зберігається словник локально, віддалено або і там, и там."
397
+ })
398
+ },
399
+ importModeSelect: {
400
+ label: t({
401
+ en: "Import mode",
402
+ "en-GB": "Import mode",
403
+ fr: "Mode d'importation",
404
+ es: "Modo de importación",
405
+ de: "Importmodus",
406
+ ja: "インポートモード",
407
+ ko: "가져오기 모드",
408
+ zh: "导入模式",
409
+ it: "Modalità di importazione",
410
+ pt: "Modo de importação",
411
+ hi: "आयात मोड",
412
+ ar: "وضع الاستيراد",
413
+ ru: "Режим импорта",
414
+ tr: "İçe aktarma modu",
415
+ pl: "Tryb importu",
416
+ id: "Mode impor",
417
+ vi: "Chế độ nhập",
418
+ uk: "Режим імпорту"
419
+ }),
420
+ description: t({
421
+ en: "The import mode determines how your dictionary is imported in your application.",
422
+ "en-GB": "The import mode determines how your dictionary is imported in your application.",
423
+ fr: "Le mode d'importation détermine comment votre dictionnaire est importé dans votre application.",
424
+ es: "El modo de importación determina cómo se importa su dictionnaire en su aplicación.",
425
+ de: "Der Importmodus bestimmt, wie Ihr Wörterbuch in Ihre Anwendung importiert wird.",
426
+ ja: "インポートモードは、辞書がアプリケーションにどのようにインポートされるかを決定します。",
427
+ ko: "가져오기 모드는 사전이 애플리케이션에서 어떻게 가져와지는지 결정합니다.",
428
+ zh: "导入模式决定了您的词典如何导入到您的应用程序中。",
429
+ it: "La modalità di importazione determina il modo in cui il tuo dizionario viene importato nella tua aplikazione.",
430
+ pt: "O modo de importação determina como seu dicionário è importado em seu aplicativo.",
431
+ hi: "आयात मोड यह निर्धारित करता है कि आपके शब्दकोश को आपके आवेदन में कैसे आयात किया जाता है।",
432
+ ar: "يحدد وضع الاستيراد كيفية استيراد قاموسك في تطبيقك.",
433
+ ru: "Режим импорта определяет, как ваш словарь импортируется в ваше приложение.",
434
+ tr: "İçe aktarma modu, sözlüğünüzün uygulamanıza nasıl aktarılacağını belirler.",
435
+ pl: "Tryb importu określa, jak słownik jest importowany do aplikacji.",
436
+ id: "Mode impor menentukan bagaimana dictionary Anda diimpor dalam aplikasi Anda.",
437
+ vi: "Chế độ nhập quyết định cách dictionary của bạn được nhập vào ứng dụng của bạn.",
438
+ uk: "Режим імпорту визначає, как ваш словник імпортується у ваш додаток."
439
+ }),
440
+ static: t({
441
+ en: "Static",
442
+ "en-GB": "Static",
443
+ fr: "Statique",
444
+ es: "Estático",
445
+ de: "Statisch",
446
+ ja: "静的",
447
+ ko: "정적",
448
+ zh: "静态",
449
+ it: "Statico",
450
+ pt: "Estático",
451
+ hi: "स्थैतिक",
452
+ ar: "ثابت",
453
+ ru: "Статический",
454
+ tr: "Statik",
455
+ pl: "Statyczny",
456
+ id: "Statis",
457
+ vi: "Tĩnh",
458
+ uk: "Статичний"
459
+ }),
460
+ dynamic: t({
461
+ en: "Dynamic",
462
+ "en-GB": "Dynamic",
463
+ fr: "Dynamique",
464
+ es: "Dinámico",
465
+ de: "Dynamisch",
466
+ ja: "動的",
467
+ ko: "동적",
468
+ zh: "动态",
469
+ it: "Dinamico",
470
+ pt: "Dinâmico",
471
+ hi: "गतिशील",
472
+ ar: "ديناميكي",
473
+ ru: "Динамический",
474
+ tr: "Dinamik",
475
+ pl: "Dynamiczny",
476
+ id: "Dinamis",
477
+ vi: "Động",
478
+ uk: "Динамічний"
479
+ }),
480
+ live: t({
481
+ en: "Live",
482
+ "en-GB": "Live",
483
+ fr: "Live",
484
+ es: "En vivo",
485
+ de: "Live",
486
+ ja: "ライブ",
487
+ ko: "라이브",
488
+ zh: "实时",
489
+ it: "Dal vivo",
490
+ pt: "Ao vivo",
491
+ hi: "लाइव",
492
+ ar: "مباشر",
493
+ ru: "Живой",
494
+ tr: "Canlı",
495
+ pl: "Na żywo",
496
+ id: "Langsung",
497
+ vi: "Trực tiếp",
498
+ uk: "Живий"
397
499
  })
398
500
  },
399
501
  filePathInput: {
@@ -421,7 +523,7 @@ const dictionaryDetailsContent = {
421
523
  en: "The file path of your dictionary allows you to identify it in your project.",
422
524
  "en-GB": "The file path of your dictionary allows you to identify it in your project.",
423
525
  fr: "Le chemin du fichier de votre dictionnaire permet de l'identifier dans votre projet.",
424
- es: "La ruta del archivo de su diccionario le permite identificarlo en su proyecto.",
526
+ es: "La ruta del archivo de su dictionnaire le permite identificarlo en su proyecto.",
425
527
  de: "Der Dateipfad Ihres Wörterbuchs ermöglicht es Ihnen, es in Ihrem Projekt zu identifizieren.",
426
528
  ja: "辞書のファイルパスにより、プロジェクト内でそれを識別できます。",
427
529
  ko: "사전의 파일 경로를 통해 프로젝트에서 이를 식별할 수 있습니다.",
@@ -490,5 +592,5 @@ const dictionaryDetailsContent = {
490
592
  var dictionaryDetails_content_default = dictionaryDetailsContent;
491
593
 
492
594
  //#endregion
493
- export { dictionaryDetails_content_default as default, dictionaryDetailsContent };
595
+ export { dictionaryDetails_content_default as default };
494
596
  //# sourceMappingURL=dictionaryDetails.content.mjs.map