@intlayer/design-system 8.7.6 → 8.7.8-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 (117) hide show
  1. package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
  2. package/dist/esm/components/Browser/Browser.mjs.map +1 -1
  3. package/dist/esm/components/Carousel/index.mjs.map +1 -1
  4. package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs +1 -1
  5. package/dist/esm/components/DictionaryEditor/NodeWrapper/BooleanWrapper.mjs.map +1 -1
  6. package/dist/esm/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.mjs.map +1 -1
  7. package/dist/esm/components/DictionaryEditor/NodeWrapper/NumberWrapper.mjs.map +1 -1
  8. package/dist/esm/components/DictionaryEditor/NodeWrapper/index.mjs.map +1 -1
  9. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs +2 -2
  10. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs +1 -1
  11. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs +3 -3
  12. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +1 -1
  13. package/dist/esm/components/DictionaryFieldEditor/EnumKeyInput.mjs.map +1 -1
  14. package/dist/esm/components/DictionaryFieldEditor/KeyPathBreadcrumb.mjs.map +1 -1
  15. package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs +2 -2
  16. package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs.map +1 -1
  17. package/dist/esm/components/DictionaryFieldEditor/NodeTypeSelector.mjs.map +1 -1
  18. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +2 -2
  19. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
  20. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs +1 -1
  21. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
  22. package/dist/esm/components/EditableField/EditableFieldInput.mjs.map +1 -1
  23. package/dist/esm/components/Flags/Flag.mjs.map +1 -1
  24. package/dist/esm/components/Form/FormField.mjs.map +1 -1
  25. package/dist/esm/components/Form/FormItem.mjs.map +1 -1
  26. package/dist/esm/components/Form/elements/FormElementWrapper.mjs.map +1 -1
  27. package/dist/esm/components/Form/elements/OTPElement.mjs +1 -1
  28. package/dist/esm/components/HTMLRender/HTMLRender.mjs.map +1 -1
  29. package/dist/esm/components/Headers/index.mjs.map +1 -1
  30. package/dist/esm/components/HeightResizer/index.mjs +25 -0
  31. package/dist/esm/components/HeightResizer/index.mjs.map +1 -1
  32. package/dist/esm/components/IDE/Code.mjs +96 -13
  33. package/dist/esm/components/IDE/Code.mjs.map +1 -1
  34. package/dist/esm/components/IDE/CodeBlockHighlight.mjs +77 -0
  35. package/dist/esm/components/IDE/CodeBlockHighlight.mjs.map +1 -0
  36. package/dist/esm/components/IDE/CodeBlockServer.mjs.map +1 -1
  37. package/dist/esm/components/IDE/CodeConditionalRenderer.mjs +15 -4
  38. package/dist/esm/components/IDE/CodeConditionalRenderer.mjs.map +1 -1
  39. package/dist/esm/components/IDE/CodeFormatSelector.mjs +5 -4
  40. package/dist/esm/components/IDE/CodeFormatSelector.mjs.map +1 -1
  41. package/dist/esm/components/IDE/FileTree.mjs.map +1 -1
  42. package/dist/esm/components/IDE/IDE.mjs.map +1 -1
  43. package/dist/esm/components/IDE/codeTransformer.mjs +228 -0
  44. package/dist/esm/components/IDE/codeTransformer.mjs.map +1 -0
  45. package/dist/esm/components/Input/OTPInput.mjs.map +1 -1
  46. package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs.map +1 -1
  47. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs +1 -1
  48. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs.map +1 -1
  49. package/dist/esm/components/LocaleSwitcherDropDown/LocaleSwitcher.mjs.map +1 -1
  50. package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs +101 -0
  51. package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs.map +1 -0
  52. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs +2 -9
  53. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
  54. package/dist/esm/components/Modal/Modal.mjs +2 -2
  55. package/dist/esm/components/Navbar/MobileNavbar.mjs +1 -1
  56. package/dist/esm/components/Navbar/index.mjs +1 -3
  57. package/dist/esm/components/Navbar/index.mjs.map +1 -1
  58. package/dist/esm/components/Navbar/useNavigation.mjs +3 -0
  59. package/dist/esm/components/Navbar/useNavigation.mjs.map +1 -1
  60. package/dist/esm/components/Pagination/Pagination.mjs +1 -1
  61. package/dist/esm/components/Popover/dynamic.mjs.map +1 -1
  62. package/dist/esm/components/RightDrawer/RightDrawer.mjs +3 -3
  63. package/dist/esm/components/Select/Multiselect.mjs.map +1 -1
  64. package/dist/esm/components/Tab/Tab.mjs.map +1 -1
  65. package/dist/esm/components/TechLogo/TechLogo.mjs.map +1 -1
  66. package/dist/esm/components/TextArea/AutocompleteTextArea.mjs.map +1 -1
  67. package/dist/esm/components/TextArea/ContentEditableTextArea.mjs.map +1 -1
  68. package/dist/esm/components/Toaster/Toast.mjs +6 -1
  69. package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
  70. package/dist/esm/components/WithResizer/index.mjs +24 -0
  71. package/dist/esm/components/WithResizer/index.mjs.map +1 -1
  72. package/dist/esm/hooks/index.mjs +11 -11
  73. package/dist/esm/hooks/reactQuery.mjs +49 -2
  74. package/dist/esm/hooks/reactQuery.mjs.map +1 -1
  75. package/dist/esm/hooks/useAuth/useOAuth2.mjs +1 -1
  76. package/dist/esm/hooks/useAuth/useOAuth2.mjs.map +1 -1
  77. package/dist/esm/hooks/useAuth/useSession.mjs +1 -1
  78. package/dist/esm/hooks/useAuth/useSession.mjs.map +1 -1
  79. package/dist/esm/hooks/useDevice.mjs.map +1 -1
  80. package/dist/esm/hooks/useHorizontalSwipe.mjs.map +1 -1
  81. package/dist/esm/hooks/useIsDarkMode.mjs.map +1 -1
  82. package/dist/esm/hooks/useKeyboardDetector.mjs.map +1 -1
  83. package/dist/esm/hooks/useScrollBlockage/useScrollBlockageStore.mjs.map +1 -1
  84. package/dist/esm/libs/auth.mjs +1 -1
  85. package/dist/esm/libs/auth.mjs.map +1 -1
  86. package/dist/esm/providers/ReactQueryProvider.mjs.map +1 -1
  87. package/dist/esm/tailwind.config.mjs.map +1 -1
  88. package/dist/types/components/Badge/index.d.ts +2 -2
  89. package/dist/types/components/Button/Button.d.ts +4 -4
  90. package/dist/types/components/Command/index.d.ts +1 -1
  91. package/dist/types/components/Container/index.d.ts +7 -7
  92. package/dist/types/components/HeightResizer/index.d.ts.map +1 -1
  93. package/dist/types/components/IDE/Code.d.ts +3 -3
  94. package/dist/types/components/IDE/Code.d.ts.map +1 -1
  95. package/dist/types/components/IDE/CodeBlockHighlight.d.ts +20 -0
  96. package/dist/types/components/IDE/CodeBlockHighlight.d.ts.map +1 -0
  97. package/dist/types/components/IDE/CodeConditionalRenderer.d.ts.map +1 -1
  98. package/dist/types/components/IDE/CodeFormatSelector.d.ts +5 -1
  99. package/dist/types/components/IDE/CodeFormatSelector.d.ts.map +1 -1
  100. package/dist/types/components/IDE/codeTransformer.d.ts +25 -0
  101. package/dist/types/components/IDE/codeTransformer.d.ts.map +1 -0
  102. package/dist/types/components/Input/Checkbox.d.ts +2 -2
  103. package/dist/types/components/Link/Link.d.ts +4 -4
  104. package/dist/types/components/MarkDownRender/MarkDownIframe.d.ts +7 -0
  105. package/dist/types/components/MarkDownRender/MarkDownIframe.d.ts.map +1 -0
  106. package/dist/types/components/MarkDownRender/MarkDownRender.d.ts.map +1 -1
  107. package/dist/types/components/Pagination/Pagination.d.ts +1 -1
  108. package/dist/types/components/SwitchSelector/index.d.ts +1 -1
  109. package/dist/types/components/Tab/Tab.d.ts +1 -1
  110. package/dist/types/components/TabSelector/TabSelector.d.ts +1 -1
  111. package/dist/types/components/Tag/index.d.ts +3 -3
  112. package/dist/types/components/Toaster/Toast.d.ts +1 -1
  113. package/dist/types/components/WithResizer/index.d.ts.map +1 -1
  114. package/dist/types/hooks/index.d.ts +2 -2
  115. package/dist/types/hooks/reactQuery.d.ts +8 -1
  116. package/dist/types/hooks/reactQuery.d.ts.map +1 -1
  117. package/package.json +25 -25
@@ -1,16 +1,16 @@
1
1
  'use client';
2
2
 
3
3
  import { cn } from "../../../utils/cn.mjs";
4
- import { ButtonColor, ButtonVariant } from "../../Button/Button.mjs";
5
4
  import { useAuth } from "../../../hooks/useAuth/useAuth.mjs";
6
5
  import { useDeleteDictionary, usePushDictionaries, useWriteDictionary } from "../../../hooks/reactQuery.mjs";
6
+ import { ButtonColor, ButtonVariant } from "../../Button/Button.mjs";
7
7
  import { Modal, ModalSize } from "../../Modal/Modal.mjs";
8
8
  import { Form } from "../../Form/Form.mjs";
9
9
  import { useState } from "react";
10
10
  import { ArrowUpFromLine, Download, RotateCcw, Save, Trash } from "lucide-react";
11
11
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
12
- import { useIntlayer } from "react-intlayer";
13
12
  import { useDictionariesRecordActions, useEditedContent } from "@intlayer/editor-react";
13
+ import { useIntlayer } from "react-intlayer";
14
14
 
15
15
  //#region src/components/DictionaryFieldEditor/SaveForm/SaveForm.tsx
16
16
  const SaveForm = ({ dictionary, mode, className, onDelete, onSave, ...props }) => {
@@ -1 +1 @@
1
- {"version":3,"file":"SaveForm.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/SaveForm/SaveForm.tsx"],"sourcesContent":["'use client';\n\nimport { ButtonColor, ButtonVariant } from '@components/Button';\nimport { Form } from '@components/Form';\nimport { Modal, ModalSize } from '@components/Modal';\nimport {\n useAuth,\n useDeleteDictionary,\n usePushDictionaries,\n useWriteDictionary,\n} from '@hooks/index';\nimport type { Dictionary as DistantDictionary } from '@intlayer/backend';\nimport {\n useDictionariesRecordActions,\n useEditedContent,\n} from '@intlayer/editor-react';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { cn } from '@utils/cn';\nimport {\n ArrowUpFromLine,\n Download,\n RotateCcw,\n Save,\n Trash,\n} from 'lucide-react';\nimport {\n type DetailedHTMLProps,\n type FC,\n type FormHTMLAttributes,\n useState,\n} from 'react';\nimport { useIntlayer } from 'react-intlayer';\n\ntype DictionaryDetailsProps = {\n dictionary: Dictionary;\n mode: ('local' | 'remote')[];\n onDelete?: () => void;\n onSave?: () => void;\n} & DetailedHTMLProps<FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>;\n\nexport const SaveForm: FC<DictionaryDetailsProps> = ({\n dictionary,\n mode,\n className,\n onDelete,\n onSave,\n ...props\n}) => {\n const [isFormatAlertModalOpen, setIsFormatAlertModalOpen] = useState(false);\n const { setLocaleDictionary } = useDictionariesRecordActions();\n const { mutate: deleteDictionary, isPending: isDeleting } =\n useDeleteDictionary();\n const { mutate: writeDictionary, isPending: isWriting } =\n useWriteDictionary();\n const { mutate: pushDictionaries, isPending: isPushing } =\n usePushDictionaries();\n const isLoading = isWriting || isPushing;\n\n const { editedContent, restoreEditedContent } = useEditedContent();\n const {\n deleteButton,\n resetButton,\n saveButton,\n publishButton,\n downloadButton,\n confirmation,\n } = useIntlayer('save-dictionary-details');\n const { isAuthenticated } = useAuth();\n\n const editedDictionary = editedContent?.[dictionary.localId!];\n\n const isEdited =\n editedDictionary &&\n JSON.stringify(editedDictionary) !== JSON.stringify(dictionary);\n\n const isDistantDictionary =\n typeof (dictionary as unknown as DistantDictionary)?.id !== 'undefined';\n\n const handleSaveDictionaryConfirmation = async () => {\n if (!editedContent?.[dictionary.localId!]) return;\n\n const updatedDictionary = {\n ...dictionary,\n ...editedContent?.[dictionary.localId!],\n };\n\n writeDictionary(\n {\n dictionary: updatedDictionary,\n },\n {\n onSuccess: () => {\n setLocaleDictionary(editedContent?.[dictionary.localId!]);\n restoreEditedContent(dictionary.localId!);\n setIsFormatAlertModalOpen(false);\n onSave?.();\n },\n }\n );\n };\n\n const handlePushDictionary = () => {\n const updatedDictionary = {\n ...dictionary,\n ...editedContent?.[dictionary.localId!],\n };\n\n pushDictionaries(\n { dictionaries: [updatedDictionary] },\n {\n onSuccess: (res) => {\n if (res) {\n setLocaleDictionary(updatedDictionary);\n restoreEditedContent(dictionary.localId!);\n onSave?.();\n }\n },\n }\n );\n };\n\n const handleDeleteDictionary = () => {\n if (!dictionary.id) return;\n\n deleteDictionary(\n {\n dictionaryId: dictionary.id,\n },\n {\n onSuccess: (res) => {\n if (res) {\n onDelete?.();\n }\n },\n }\n );\n };\n\n return (\n <>\n <Modal\n isOpen={isFormatAlertModalOpen}\n title={confirmation.title.value}\n size={ModalSize.MD}\n onClose={() => setIsFormatAlertModalOpen(false)}\n padding=\"md\"\n >\n <form className=\"size-full\">\n <p className=\"py-4 text-neutral text-sm\">{confirmation.message}</p>\n\n <div className=\"mt-12 flex justify-end gap-2 max-md:flex-col\">\n <Form.Button\n label={confirmation.cancelButton.label.value}\n disabled={!isEdited || isLoading}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n variant={ButtonVariant.OUTLINE}\n onClick={() => setIsFormatAlertModalOpen(false)}\n >\n {confirmation.cancelButton.text}\n </Form.Button>\n <Form.Button\n label={confirmation.confirmButton.label.value}\n disabled={!isEdited || isLoading}\n Icon={Save}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n isLoading={isPushing}\n onClick={handleSaveDictionaryConfirmation}\n >\n {confirmation.confirmButton.text}\n </Form.Button>\n </div>\n </form>\n </Modal>\n <form\n className={cn('flex justify-end gap-2 max-md:flex-col', className)}\n {...props}\n >\n {mode.includes('remote') &&\n isDistantDictionary &&\n onDelete &&\n isAuthenticated && (\n <Form.Button\n label={deleteButton.label.value}\n Icon={Trash}\n color={ButtonColor.ERROR}\n variant={ButtonVariant.OUTLINE}\n className=\"max-md:w-full\"\n isLoading={isDeleting}\n onClick={handleDeleteDictionary}\n >\n {deleteButton.text}\n </Form.Button>\n )}\n {isEdited && (\n <Form.Button\n label={resetButton.label.value}\n disabled={!isEdited}\n Icon={RotateCcw}\n variant={ButtonVariant.OUTLINE}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n onClick={() => restoreEditedContent(dictionary.localId!)}\n >\n {resetButton.text}\n </Form.Button>\n )}\n {mode.includes('local') && (\n <Form.Button\n label={downloadButton.label.value}\n disabled={!isEdited || isLoading}\n Icon={Download}\n color={ButtonColor.TEXT}\n variant={\n isAuthenticated ? ButtonVariant.OUTLINE : ButtonVariant.DEFAULT\n }\n className=\"max-md:w-full\"\n isLoading={isWriting}\n onClick={() => setIsFormatAlertModalOpen(true)}\n >\n {downloadButton.text}\n </Form.Button>\n )}\n {mode.includes('remote') && isAuthenticated && !isDistantDictionary && (\n <Form.Button\n label={publishButton.label.value}\n disabled={isLoading}\n Icon={ArrowUpFromLine}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n isLoading={isPushing}\n onClick={handlePushDictionary}\n >\n {publishButton.text}\n </Form.Button>\n )}\n {mode.includes('remote') &&\n isAuthenticated &&\n isDistantDictionary &&\n isEdited && (\n <Form.Button\n label={saveButton.label.value}\n disabled={!isEdited || isLoading}\n Icon={Save}\n color=\"text\"\n className=\"max-md:w-full\"\n isLoading={isPushing}\n onClick={handlePushDictionary}\n >\n {saveButton.text}\n </Form.Button>\n )}\n </form>\n </>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"SaveForm.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/SaveForm/SaveForm.tsx"],"sourcesContent":["'use client';\n\nimport { ButtonColor, ButtonVariant } from '@components/Button';\nimport { Form } from '@components/Form';\nimport { Modal, ModalSize } from '@components/Modal';\nimport {\n useAuth,\n useDeleteDictionary,\n usePushDictionaries,\n useWriteDictionary,\n} from '@hooks/index';\nimport type { Dictionary as DistantDictionary } from '@intlayer/backend';\nimport {\n useDictionariesRecordActions,\n useEditedContent,\n} from '@intlayer/editor-react';\nimport type { Dictionary } from '@intlayer/types/dictionary';\nimport { cn } from '@utils/cn';\nimport {\n ArrowUpFromLine,\n Download,\n RotateCcw,\n Save,\n Trash,\n} from 'lucide-react';\nimport {\n type DetailedHTMLProps,\n type FC,\n type FormHTMLAttributes,\n useState,\n} from 'react';\nimport { useIntlayer } from 'react-intlayer';\n\ntype DictionaryDetailsProps = {\n dictionary: Dictionary;\n mode: ('local' | 'remote')[];\n onDelete?: () => void;\n onSave?: () => void;\n} & DetailedHTMLProps<FormHTMLAttributes<HTMLFormElement>, HTMLFormElement>;\n\nexport const SaveForm: FC<DictionaryDetailsProps> = ({\n dictionary,\n mode,\n className,\n onDelete,\n onSave,\n ...props\n}) => {\n const [isFormatAlertModalOpen, setIsFormatAlertModalOpen] = useState(false);\n const { setLocaleDictionary } = useDictionariesRecordActions();\n const { mutate: deleteDictionary, isPending: isDeleting } =\n useDeleteDictionary();\n const { mutate: writeDictionary, isPending: isWriting } =\n useWriteDictionary();\n const { mutate: pushDictionaries, isPending: isPushing } =\n usePushDictionaries();\n const isLoading = isWriting || isPushing;\n\n const { editedContent, restoreEditedContent } = useEditedContent();\n const {\n deleteButton,\n resetButton,\n saveButton,\n publishButton,\n downloadButton,\n confirmation,\n } = useIntlayer('save-dictionary-details');\n const { isAuthenticated } = useAuth();\n\n const editedDictionary = editedContent?.[dictionary.localId!];\n\n const isEdited =\n editedDictionary &&\n JSON.stringify(editedDictionary) !== JSON.stringify(dictionary);\n\n const isDistantDictionary =\n typeof (dictionary as unknown as DistantDictionary)?.id !== 'undefined';\n\n const handleSaveDictionaryConfirmation = async () => {\n if (!editedContent?.[dictionary.localId!]) return;\n\n const updatedDictionary = {\n ...dictionary,\n ...editedContent?.[dictionary.localId!],\n };\n\n writeDictionary(\n {\n dictionary: updatedDictionary,\n },\n {\n onSuccess: () => {\n setLocaleDictionary(editedContent?.[dictionary.localId!]);\n restoreEditedContent(dictionary.localId!);\n setIsFormatAlertModalOpen(false);\n onSave?.();\n },\n }\n );\n };\n\n const handlePushDictionary = () => {\n const updatedDictionary = {\n ...dictionary,\n ...editedContent?.[dictionary.localId!],\n };\n\n pushDictionaries(\n { dictionaries: [updatedDictionary] },\n {\n onSuccess: (res) => {\n if (res) {\n setLocaleDictionary(updatedDictionary);\n restoreEditedContent(dictionary.localId!);\n onSave?.();\n }\n },\n }\n );\n };\n\n const handleDeleteDictionary = () => {\n if (!dictionary.id) return;\n\n deleteDictionary(\n {\n dictionaryId: dictionary.id,\n },\n {\n onSuccess: (res) => {\n if (res) {\n onDelete?.();\n }\n },\n }\n );\n };\n\n return (\n <>\n <Modal\n isOpen={isFormatAlertModalOpen}\n title={confirmation.title.value}\n size={ModalSize.MD}\n onClose={() => setIsFormatAlertModalOpen(false)}\n padding=\"md\"\n >\n <form className=\"size-full\">\n <p className=\"py-4 text-neutral text-sm\">{confirmation.message}</p>\n\n <div className=\"mt-12 flex justify-end gap-2 max-md:flex-col\">\n <Form.Button\n label={confirmation.cancelButton.label.value}\n disabled={!isEdited || isLoading}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n variant={ButtonVariant.OUTLINE}\n onClick={() => setIsFormatAlertModalOpen(false)}\n >\n {confirmation.cancelButton.text}\n </Form.Button>\n <Form.Button\n label={confirmation.confirmButton.label.value}\n disabled={!isEdited || isLoading}\n Icon={Save}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n isLoading={isPushing}\n onClick={handleSaveDictionaryConfirmation}\n >\n {confirmation.confirmButton.text}\n </Form.Button>\n </div>\n </form>\n </Modal>\n <form\n className={cn('flex justify-end gap-2 max-md:flex-col', className)}\n {...props}\n >\n {mode.includes('remote') &&\n isDistantDictionary &&\n onDelete &&\n isAuthenticated && (\n <Form.Button\n label={deleteButton.label.value}\n Icon={Trash}\n color={ButtonColor.ERROR}\n variant={ButtonVariant.OUTLINE}\n className=\"max-md:w-full\"\n isLoading={isDeleting}\n onClick={handleDeleteDictionary}\n >\n {deleteButton.text}\n </Form.Button>\n )}\n {isEdited && (\n <Form.Button\n label={resetButton.label.value}\n disabled={!isEdited}\n Icon={RotateCcw}\n variant={ButtonVariant.OUTLINE}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n onClick={() => restoreEditedContent(dictionary.localId!)}\n >\n {resetButton.text}\n </Form.Button>\n )}\n {mode.includes('local') && (\n <Form.Button\n label={downloadButton.label.value}\n disabled={!isEdited || isLoading}\n Icon={Download}\n color={ButtonColor.TEXT}\n variant={\n isAuthenticated ? ButtonVariant.OUTLINE : ButtonVariant.DEFAULT\n }\n className=\"max-md:w-full\"\n isLoading={isWriting}\n onClick={() => setIsFormatAlertModalOpen(true)}\n >\n {downloadButton.text}\n </Form.Button>\n )}\n {mode.includes('remote') && isAuthenticated && !isDistantDictionary && (\n <Form.Button\n label={publishButton.label.value}\n disabled={isLoading}\n Icon={ArrowUpFromLine}\n color={ButtonColor.TEXT}\n className=\"max-md:w-full\"\n isLoading={isPushing}\n onClick={handlePushDictionary}\n >\n {publishButton.text}\n </Form.Button>\n )}\n {mode.includes('remote') &&\n isAuthenticated &&\n isDistantDictionary &&\n isEdited && (\n <Form.Button\n label={saveButton.label.value}\n disabled={!isEdited || isLoading}\n Icon={Save}\n color=\"text\"\n className=\"max-md:w-full\"\n isLoading={isPushing}\n onClick={handlePushDictionary}\n >\n {saveButton.text}\n </Form.Button>\n )}\n </form>\n </>\n );\n};\n"],"mappings":"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"}
@@ -7,8 +7,8 @@ import { EditableFieldInput } from "../../EditableField/EditableFieldInput.mjs";
7
7
  import { NodeTypeSelector } from "../NodeTypeSelector.mjs";
8
8
  import { Plus, Trash } from "lucide-react";
9
9
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
10
- import { useIntlayer } from "react-intlayer";
11
10
  import { useConfiguration, useEditedContentActions, useFocusUnmergedDictionary } from "@intlayer/editor-react";
11
+ import { useIntlayer } from "react-intlayer";
12
12
  import { getDefaultNode, getNodeChildren, getNodeType } from "@intlayer/core/dictionaryManipulator";
13
13
  import * as NodeTypes from "@intlayer/types/nodeType";
14
14
  import { isSameKeyPath } from "@intlayer/core/utils";
@@ -1 +1 @@
1
- {"version":3,"file":"StructureView.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/StructureView/StructureView.tsx"],"sourcesContent":["'use client';\n\nimport {\n Button,\n ButtonColor,\n ButtonSize,\n ButtonVariant,\n} from '@components/Button';\nimport { Container } from '@components/Container';\nimport { EditableFieldInput } from '@components/EditableField';\nimport { InputVariant } from '@components/Input';\nimport { camelCaseToSentence } from '@intlayer/config/client';\nimport {\n getDefaultNode,\n getNodeChildren,\n getNodeType,\n} from '@intlayer/core/dictionaryManipulator';\nimport { isSameKeyPath } from '@intlayer/core/utils';\nimport {\n useConfiguration,\n useEditedContentActions,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport type { LocalDictionaryId, TypedNode } from '@intlayer/types/dictionary';\nimport type { KeyPath } from '@intlayer/types/keyPath';\nimport * as NodeTypes from '@intlayer/types/nodeType';\nimport type { ContentNode } from 'intlayer';\nimport { Plus, Trash } from 'lucide-react';\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { NodeTypeSelector } from '../NodeTypeSelector';\n\ntype NodeTypeViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n onNodeTypeChange: (content?: ContentNode) => void;\n};\n\nconst NodeTypeView: FC<NodeTypeViewProps> = ({\n section,\n dictionaryLocalId,\n keyPath,\n onNodeTypeChange: onNodeTypeChangeProp,\n}) => {\n const locales = useConfiguration()?.internationalization.locales ?? [];\n const nodeType = getNodeType(section);\n const children = getNodeChildren(section);\n\n const onNodeTypeChange = (content?: ContentNode) => {\n const transformedContent = getDefaultNode(\n nodeType,\n locales,\n content\n ) as ContentNode;\n\n onNodeTypeChangeProp(transformedContent);\n };\n\n if (\n nodeType === NodeTypes.TRANSLATION ||\n nodeType === NodeTypes.CONDITION ||\n nodeType === NodeTypes.GENDER ||\n nodeType === NodeTypes.ENUMERATION\n ) {\n const firstKey = Object.keys(\n (section as unknown as TypedNode)[nodeType as keyof typeof section]\n )[0];\n const childrenKeyPath = [\n ...keyPath,\n { type: nodeType, key: firstKey },\n ] as KeyPath[];\n\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n\n <NodeTypeView\n section={children}\n keyPath={childrenKeyPath}\n dictionaryLocalId={dictionaryLocalId}\n onNodeTypeChange={onNodeTypeChange}\n />\n </div>\n );\n }\n\n if (nodeType === NodeTypes.ARRAY) {\n const childrenKeyPath = [...keyPath, { type: nodeType, key: 0 } as KeyPath];\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n\n <NodeTypeView\n section={children}\n keyPath={childrenKeyPath}\n dictionaryLocalId={dictionaryLocalId}\n onNodeTypeChange={onNodeTypeChange}\n />\n </div>\n );\n }\n\n if (nodeType === NodeTypes.OBJECT) {\n return (\n <>\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n <div className=\"mt-6 ml-10\">\n <StructureView\n keyPath={keyPath}\n section={section}\n dictionaryLocalId={dictionaryLocalId}\n />\n </div>\n </>\n );\n }\n\n return (\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(getDefaultNode(nodeType, locales) as ContentNode)\n }\n />\n );\n};\n\ntype NodeWrapperProps = {\n sectionKey?: string;\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const NodeView: FC<NodeWrapperProps> = ({\n sectionKey,\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n const { focusedContent, setFocusedContentKeyPath } =\n useFocusUnmergedDictionary();\n const { renameEditedContent, addEditedContent } = useEditedContentActions();\n\n const { titleInput, deleteButton } = useIntlayer('structure-view');\n\n const handleRenameNodeKey = (keyName: string) => {\n renameEditedContent(dictionaryLocalId, keyName, keyPath);\n const prevKeyPath: KeyPath[] = keyPath.slice(0, -1);\n const lastKeyPath: KeyPath = keyPath[keyPath.length - 1];\n const newKeyPath: KeyPath[] = [\n ...prevKeyPath,\n { ...lastKeyPath, key: keyName } as KeyPath,\n ];\n setFocusedContentKeyPath(newKeyPath);\n };\n\n return (\n <Container\n transparency=\"xl\"\n roundedSize=\"xl\"\n className=\"w-full min-w-80 gap-2 overflow-auto px-5 py-2\"\n border\n borderColor=\"text\"\n background=\"none\"\n aria-selected={isSameKeyPath(keyPath, focusedContent?.keyPath ?? [])}\n onClick={() => setFocusedContentKeyPath(keyPath)}\n >\n <div className=\"flex w-full flex-col items-start justify-between gap-3\">\n {typeof sectionKey === 'string' && (\n <div className=\"w-full\">\n <div className=\"flex w-full items-center justify-between gap-10\">\n <EditableFieldInput\n name=\"key\"\n aria-label=\"Key\"\n placeholder={titleInput.placeholder.value}\n defaultValue={sectionKey}\n onSave={(value) => handleRenameNodeKey(value)}\n variant={InputVariant.INVISIBLE}\n />\n <Button\n label={deleteButton.label.value}\n variant={ButtonVariant.HOVERABLE}\n size={ButtonSize.ICON_SM}\n color={ButtonColor.TEXT}\n className=\"translate-x-2\"\n Icon={Trash}\n onClick={() => {\n addEditedContent(dictionaryLocalId, undefined, keyPath);\n\n const parentKeyPath: KeyPath[] = keyPath.slice(0, -1);\n setFocusedContentKeyPath(parentKeyPath);\n }}\n />\n </div>\n\n <span className=\"ml-3 text-neutral text-sm\">\n ( {camelCaseToSentence(sectionKey)} )\n </span>\n </div>\n )}\n <NodeTypeView\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n section={section}\n onNodeTypeChange={(content) => {\n addEditedContent(dictionaryLocalId, content, keyPath);\n }}\n />\n </div>\n </Container>\n );\n};\n\ntype ObjectViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const ObjectView: FC<ObjectViewProps> = ({\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n const { addNodeButton } = useIntlayer('structure-view');\n const { setFocusedContentKeyPath } = useFocusUnmergedDictionary();\n const { addEditedContent } = useEditedContentActions();\n\n if (!section || typeof section !== 'object') {\n return <div>Not an object</div>;\n }\n\n return (\n <div className=\"flex flex-col gap-2 overflow-y-auto\">\n <ul className=\"mr-auto flex flex-col gap-4\">\n {Object.keys(section).map((key) => (\n <li\n key={`${JSON.stringify(keyPath)}-object-${key}`}\n className=\"flex w-full\"\n >\n <NodeView\n sectionKey={key}\n section={section?.[key as keyof typeof section]}\n keyPath={[...keyPath, { type: NodeTypes.OBJECT, key }]}\n dictionaryLocalId={dictionaryLocalId}\n />\n </li>\n ))}\n </ul>\n <Button\n label={addNodeButton.label.value}\n variant={ButtonVariant.HOVERABLE}\n size={ButtonSize.MD}\n color={ButtonColor.TEXT}\n Icon={Plus}\n className=\"flex-1\"\n onClick={() => {\n const newKey = 'newKey';\n const newKeyPath = [\n ...keyPath,\n { type: NodeTypes.OBJECT, key: newKey },\n ] as KeyPath[];\n addEditedContent(dictionaryLocalId, '', newKeyPath);\n setFocusedContentKeyPath(newKeyPath);\n }}\n >\n {addNodeButton.text}\n </Button>\n </div>\n );\n};\n\ntype StructureViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const StructureView: FC<StructureViewProps> = ({\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n if (\n !section ||\n typeof section !== 'object' ||\n typeof section.nodeType === 'string'\n ) {\n return (\n <NodeView\n sectionKey={'content'}\n section={section}\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n />\n );\n }\n\n return (\n <ObjectView\n section={section}\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n />\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;AAuCA,MAAM,gBAAuC,EAC3C,SACA,mBACA,SACA,kBAAkB,2BACd;CACJ,MAAM,UAAU,kBAAkB,EAAE,qBAAqB,WAAW,EAAE;CACtE,MAAM,WAAW,YAAY,QAAQ;CACrC,MAAM,WAAW,gBAAgB,QAAQ;CAEzC,MAAM,oBAAoB,YAA0B;AAOlD,uBAN2B,eACzB,UACA,SACA,QACD,CAEuC;;AAG1C,KACE,aAAa,UAAU,eACvB,aAAa,UAAU,aACvB,aAAa,UAAU,UACvB,aAAa,UAAU,aACvB;EACA,MAAM,WAAW,OAAO,KACrB,QAAiC,UACnC,CAAC;EACF,MAAM,kBAAkB,CACtB,GAAG,SACH;GAAE,MAAM;GAAU,KAAK;GAAU,CAClC;AAED,SACE,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,kBAAD;IACW;IACT,gBAAgB,aACd,qBACE,eAAe,UAAU,QAAQ,CAClC;IAEH,GAEF,oBAAC,cAAD;IACE,SAAS;IACT,SAAS;IACU;IACD;IAClB,EACE;;;AAIV,KAAI,aAAa,UAAU,OAAO;EAChC,MAAM,kBAAkB,CAAC,GAAG,SAAS;GAAE,MAAM;GAAU,KAAK;GAAG,CAAY;AAC3E,SACE,qBAAC,OAAD;GAAK,WAAU;aAAf,CACE,oBAAC,kBAAD;IACW;IACT,gBAAgB,aACd,qBACE,eAAe,UAAU,QAAQ,CAClC;IAEH,GAEF,oBAAC,cAAD;IACE,SAAS;IACT,SAAS;IACU;IACD;IAClB,EACE;;;AAIV,KAAI,aAAa,UAAU,OACzB,QACE,4CACE,oBAAC,kBAAD;EACW;EACT,gBAAgB,aACd,qBACE,eAAe,UAAU,QAAQ,CAClC;EAEH,GACF,oBAAC,OAAD;EAAK,WAAU;YACb,oBAAC,eAAD;GACW;GACA;GACU;GACnB;EACE,EACL;AAIP,QACE,oBAAC,kBAAD;EACW;EACT,gBAAgB,aACd,qBAAqB,eAAe,UAAU,QAAQ,CAAgB;EAExE;;AAWN,MAAa,YAAkC,EAC7C,YACA,SACA,SACA,wBACI;CACJ,MAAM,EAAE,gBAAgB,6BACtB,4BAA4B;CAC9B,MAAM,EAAE,qBAAqB,qBAAqB,yBAAyB;CAE3E,MAAM,EAAE,YAAY,iBAAiB,YAAY,iBAAiB;CAElE,MAAM,uBAAuB,YAAoB;AAC/C,sBAAoB,mBAAmB,SAAS,QAAQ;EACxD,MAAM,cAAyB,QAAQ,MAAM,GAAG,GAAG;EACnD,MAAM,cAAuB,QAAQ,QAAQ,SAAS;AAKtD,2BAJ8B,CAC5B,GAAG,aACH;GAAE,GAAG;GAAa,KAAK;GAAS,CACjC,CACmC;;AAGtC,QACE,oBAAC,WAAD;EACE,cAAa;EACb,aAAY;EACZ,WAAU;EACV;EACA,aAAY;EACZ,YAAW;EACX,iBAAe,cAAc,SAAS,gBAAgB,WAAW,EAAE,CAAC;EACpE,eAAe,yBAAyB,QAAQ;YAEhD,qBAAC,OAAD;GAAK,WAAU;aAAf,CACG,OAAO,eAAe,YACrB,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,qBAAC,OAAD;KAAK,WAAU;eAAf,CACE,oBAAC,oBAAD;MACE,MAAK;MACL,cAAW;MACX,aAAa,WAAW,YAAY;MACpC,cAAc;MACd,SAAS,UAAU,oBAAoB,MAAM;MAC7C;MACA,GACF,oBAAC,QAAD;MACE,OAAO,aAAa,MAAM;MAC1B;MACA;MACA;MACA,WAAU;MACV,MAAM;MACN,eAAe;AACb,wBAAiB,mBAAmB,QAAW,QAAQ;AAGvD,gCADiC,QAAQ,MAAM,GAAG,GAAG,CACd;;MAEzC,EACE;QAEN,qBAAC,QAAD;KAAM,WAAU;eAAhB;MAA4C;MACvC,oBAAoB,WAAW;MAAC;MAC9B;OACH;OAER,oBAAC,cAAD;IACW;IACU;IACV;IACT,mBAAmB,YAAY;AAC7B,sBAAiB,mBAAmB,SAAS,QAAQ;;IAEvD,EACE;;EACI;;AAUhB,MAAa,cAAmC,EAC9C,SACA,SACA,wBACI;CACJ,MAAM,EAAE,kBAAkB,YAAY,iBAAiB;CACvD,MAAM,EAAE,6BAA6B,4BAA4B;CACjE,MAAM,EAAE,qBAAqB,yBAAyB;AAEtD,KAAI,CAAC,WAAW,OAAO,YAAY,SACjC,QAAO,oBAAC,OAAD,YAAK,iBAAmB;AAGjC,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,MAAD;GAAI,WAAU;aACX,OAAO,KAAK,QAAQ,CAAC,KAAK,QACzB,oBAAC,MAAD;IAEE,WAAU;cAEV,oBAAC,UAAD;KACE,YAAY;KACZ,SAAS,UAAU;KACnB,SAAS,CAAC,GAAG,SAAS;MAAE,MAAM,UAAU;MAAQ;MAAK,CAAC;KACnC;KACnB;IACC,EATE,GAAG,KAAK,UAAU,QAAQ,CAAC,UAAU,MASvC,CACL;GACC,GACL,oBAAC,QAAD;GACE,OAAO,cAAc,MAAM;GAC3B;GACA;GACA;GACA,MAAM;GACN,WAAU;GACV,eAAe;IACb,MAAM,SAAS;IACf,MAAM,aAAa,CACjB,GAAG,SACH;KAAE,MAAM,UAAU;KAAQ,KAAK;KAAQ,CACxC;AACD,qBAAiB,mBAAmB,IAAI,WAAW;AACnD,6BAAyB,WAAW;;aAGrC,cAAc;GACR,EACL;;;AAUV,MAAa,iBAAyC,EACpD,SACA,SACA,wBACI;AACJ,KACE,CAAC,WACD,OAAO,YAAY,YACnB,OAAO,QAAQ,aAAa,SAE5B,QACE,oBAAC,UAAD;EACE,YAAY;EACH;EACA;EACU;EACnB;AAIN,QACE,oBAAC,YAAD;EACW;EACA;EACU;EACnB"}
1
+ {"version":3,"file":"StructureView.mjs","names":[],"sources":["../../../../../src/components/DictionaryFieldEditor/StructureView/StructureView.tsx"],"sourcesContent":["'use client';\n\nimport {\n Button,\n ButtonColor,\n ButtonSize,\n ButtonVariant,\n} from '@components/Button';\nimport { Container } from '@components/Container';\nimport { EditableFieldInput } from '@components/EditableField';\nimport { InputVariant } from '@components/Input';\nimport { camelCaseToSentence } from '@intlayer/config/client';\nimport {\n getDefaultNode,\n getNodeChildren,\n getNodeType,\n} from '@intlayer/core/dictionaryManipulator';\nimport { isSameKeyPath } from '@intlayer/core/utils';\nimport {\n useConfiguration,\n useEditedContentActions,\n useFocusUnmergedDictionary,\n} from '@intlayer/editor-react';\nimport type { LocalDictionaryId, TypedNode } from '@intlayer/types/dictionary';\nimport type { KeyPath } from '@intlayer/types/keyPath';\nimport * as NodeTypes from '@intlayer/types/nodeType';\nimport type { ContentNode } from 'intlayer';\nimport { Plus, Trash } from 'lucide-react';\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { NodeTypeSelector } from '../NodeTypeSelector';\n\ntype NodeTypeViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n onNodeTypeChange: (content?: ContentNode) => void;\n};\n\nconst NodeTypeView: FC<NodeTypeViewProps> = ({\n section,\n dictionaryLocalId,\n keyPath,\n onNodeTypeChange: onNodeTypeChangeProp,\n}) => {\n const locales = useConfiguration()?.internationalization.locales ?? [];\n const nodeType = getNodeType(section);\n const children = getNodeChildren(section);\n\n const onNodeTypeChange = (content?: ContentNode) => {\n const transformedContent = getDefaultNode(\n nodeType,\n locales,\n content\n ) as ContentNode;\n\n onNodeTypeChangeProp(transformedContent);\n };\n\n if (\n nodeType === NodeTypes.TRANSLATION ||\n nodeType === NodeTypes.CONDITION ||\n nodeType === NodeTypes.GENDER ||\n nodeType === NodeTypes.ENUMERATION\n ) {\n const firstKey = Object.keys(\n (section as unknown as TypedNode)[nodeType as keyof typeof section]\n )[0];\n const childrenKeyPath = [\n ...keyPath,\n { type: nodeType, key: firstKey },\n ] as KeyPath[];\n\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n\n <NodeTypeView\n section={children}\n keyPath={childrenKeyPath}\n dictionaryLocalId={dictionaryLocalId}\n onNodeTypeChange={onNodeTypeChange}\n />\n </div>\n );\n }\n\n if (nodeType === NodeTypes.ARRAY) {\n const childrenKeyPath = [...keyPath, { type: nodeType, key: 0 } as KeyPath];\n return (\n <div className=\"flex w-full flex-col gap-1\">\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n\n <NodeTypeView\n section={children}\n keyPath={childrenKeyPath}\n dictionaryLocalId={dictionaryLocalId}\n onNodeTypeChange={onNodeTypeChange}\n />\n </div>\n );\n }\n\n if (nodeType === NodeTypes.OBJECT) {\n return (\n <>\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(\n getDefaultNode(nodeType, locales) as ContentNode\n )\n }\n />\n <div className=\"mt-6 ml-10\">\n <StructureView\n keyPath={keyPath}\n section={section}\n dictionaryLocalId={dictionaryLocalId}\n />\n </div>\n </>\n );\n }\n\n return (\n <NodeTypeSelector\n section={section}\n onValueChange={(nodeType) =>\n onNodeTypeChangeProp(getDefaultNode(nodeType, locales) as ContentNode)\n }\n />\n );\n};\n\ntype NodeWrapperProps = {\n sectionKey?: string;\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const NodeView: FC<NodeWrapperProps> = ({\n sectionKey,\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n const { focusedContent, setFocusedContentKeyPath } =\n useFocusUnmergedDictionary();\n const { renameEditedContent, addEditedContent } = useEditedContentActions();\n\n const { titleInput, deleteButton } = useIntlayer('structure-view');\n\n const handleRenameNodeKey = (keyName: string) => {\n renameEditedContent(dictionaryLocalId, keyName, keyPath);\n const prevKeyPath: KeyPath[] = keyPath.slice(0, -1);\n const lastKeyPath: KeyPath = keyPath[keyPath.length - 1];\n const newKeyPath: KeyPath[] = [\n ...prevKeyPath,\n { ...lastKeyPath, key: keyName } as KeyPath,\n ];\n setFocusedContentKeyPath(newKeyPath);\n };\n\n return (\n <Container\n transparency=\"xl\"\n roundedSize=\"xl\"\n className=\"w-full min-w-80 gap-2 overflow-auto px-5 py-2\"\n border\n borderColor=\"text\"\n background=\"none\"\n aria-selected={isSameKeyPath(keyPath, focusedContent?.keyPath ?? [])}\n onClick={() => setFocusedContentKeyPath(keyPath)}\n >\n <div className=\"flex w-full flex-col items-start justify-between gap-3\">\n {typeof sectionKey === 'string' && (\n <div className=\"w-full\">\n <div className=\"flex w-full items-center justify-between gap-10\">\n <EditableFieldInput\n name=\"key\"\n aria-label=\"Key\"\n placeholder={titleInput.placeholder.value}\n defaultValue={sectionKey}\n onSave={(value) => handleRenameNodeKey(value)}\n variant={InputVariant.INVISIBLE}\n />\n <Button\n label={deleteButton.label.value}\n variant={ButtonVariant.HOVERABLE}\n size={ButtonSize.ICON_SM}\n color={ButtonColor.TEXT}\n className=\"translate-x-2\"\n Icon={Trash}\n onClick={() => {\n addEditedContent(dictionaryLocalId, undefined, keyPath);\n\n const parentKeyPath: KeyPath[] = keyPath.slice(0, -1);\n setFocusedContentKeyPath(parentKeyPath);\n }}\n />\n </div>\n\n <span className=\"ml-3 text-neutral text-sm\">\n ( {camelCaseToSentence(sectionKey)} )\n </span>\n </div>\n )}\n <NodeTypeView\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n section={section}\n onNodeTypeChange={(content) => {\n addEditedContent(dictionaryLocalId, content, keyPath);\n }}\n />\n </div>\n </Container>\n );\n};\n\ntype ObjectViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const ObjectView: FC<ObjectViewProps> = ({\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n const { addNodeButton } = useIntlayer('structure-view');\n const { setFocusedContentKeyPath } = useFocusUnmergedDictionary();\n const { addEditedContent } = useEditedContentActions();\n\n if (!section || typeof section !== 'object') {\n return <div>Not an object</div>;\n }\n\n return (\n <div className=\"flex flex-col gap-2 overflow-y-auto\">\n <ul className=\"mr-auto flex flex-col gap-4\">\n {Object.keys(section).map((key) => (\n <li\n key={`${JSON.stringify(keyPath)}-object-${key}`}\n className=\"flex w-full\"\n >\n <NodeView\n sectionKey={key}\n section={section?.[key as keyof typeof section]}\n keyPath={[...keyPath, { type: NodeTypes.OBJECT, key }]}\n dictionaryLocalId={dictionaryLocalId}\n />\n </li>\n ))}\n </ul>\n <Button\n label={addNodeButton.label.value}\n variant={ButtonVariant.HOVERABLE}\n size={ButtonSize.MD}\n color={ButtonColor.TEXT}\n Icon={Plus}\n className=\"flex-1\"\n onClick={() => {\n const newKey = 'newKey';\n const newKeyPath = [\n ...keyPath,\n { type: NodeTypes.OBJECT, key: newKey },\n ] as KeyPath[];\n addEditedContent(dictionaryLocalId, '', newKeyPath);\n setFocusedContentKeyPath(newKeyPath);\n }}\n >\n {addNodeButton.text}\n </Button>\n </div>\n );\n};\n\ntype StructureViewProps = {\n dictionaryLocalId: LocalDictionaryId;\n keyPath: KeyPath[];\n section: ContentNode;\n};\n\nexport const StructureView: FC<StructureViewProps> = ({\n section,\n keyPath,\n dictionaryLocalId,\n}) => {\n if (\n !section ||\n typeof section !== 'object' ||\n typeof section.nodeType === 'string'\n ) {\n return (\n <NodeView\n sectionKey={'content'}\n section={section}\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n />\n );\n }\n\n return (\n <ObjectView\n section={section}\n keyPath={keyPath}\n dictionaryLocalId={dictionaryLocalId}\n />\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"EditableFieldInput.mjs","names":[],"sources":["../../../../src/components/EditableField/EditableFieldInput.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, type Ref, useImperativeHandle, useMemo, useRef } from 'react';\nimport { Input, type InputProps } from '../Input';\nimport { EditableFieldLayout } from './EditableFieldLayout';\n\n/**\n * Props for the EditableFieldInput component, extending standard Input props\n */\ntype EditableFieldInputProps = InputProps & {\n /** Callback function called when the user saves the edited value */\n onSave?: (value: string) => void;\n /** Callback function called when the user cancels the edit operation */\n onCancel?: () => void;\n};\n\n/**\n * EditableFieldInput Component\n *\n * An inline editable input field that displays as read-only text until clicked.\n * When activated, it shows an input field with save and cancel buttons.\n *\n * @example\n * ```tsx\n * <EditableFieldInput\n * defaultValue=\"Edit me\"\n * placeholder=\"Click to edit...\"\n * onSave={(value) => console.log('Saved:', value)}\n * onCancel={() => console.log('Cancelled')}\n * />\n * ```\n *\n * ## Features\n * - **Inline Editing**: Click to edit, displays as text when not editing\n * - **Save/Cancel Actions**: Built-in save and cancel buttons with callbacks\n * - **Keyboard Support**: Accessible keyboard navigation\n * - **Input Variants**: Supports all Input component variants and sizes\n * - **Auto-save on Click Away**: Saves automatically when clicking outside\n * - **Ref Forwarding**: Exposes the underlying input element reference\n *\n * ## Accessibility\n * - Uses semantic HTML with proper ARIA attributes\n * - Keyboard accessible with tab navigation\n * - Screen reader friendly with descriptive labels\n * - Focus management for edit mode transitions\n *\n * @param props - EditableFieldInputProps extending InputProps\n * @returns React functional component\n */\nexport const EditableFieldInput: FC<EditableFieldInputProps> = ({\n onSave,\n onCancel,\n ref,\n ...props\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleSave = () => {\n // Your save logic here\n onSave?.(inputRef.current?.value ?? '');\n };\n\n const handleCancel = () => {\n if (inputRef.current) {\n inputRef.current.value = inputRef.current.defaultValue ?? '';\n }\n onCancel?.();\n };\n\n // Expose the input ref to parent components\n useImperativeHandle(ref as Ref<HTMLElement>, () => inputRef.current!);\n\n const value = useMemo(\n () =>\n (props.value as string) ??\n inputRef.current?.value ??\n (props.defaultValue as string),\n\n [props.value, props.defaultValue, inputRef.current?.value]\n );\n\n return (\n <EditableFieldLayout\n value={value}\n onCancel={handleCancel}\n onSave={handleSave}\n >\n <Input ref={inputRef} {...props} />\n </EditableFieldLayout>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,MAAa,sBAAmD,EAC9D,QACA,UACA,KACA,GAAG,YACC;CACJ,MAAM,WAAW,OAAyB,KAAK;CAE/C,MAAM,mBAAmB;AAEvB,WAAS,SAAS,SAAS,SAAS,GAAG;;CAGzC,MAAM,qBAAqB;AACzB,MAAI,SAAS,QACX,UAAS,QAAQ,QAAQ,SAAS,QAAQ,gBAAgB;AAE5D,cAAY;;AAId,qBAAoB,WAA+B,SAAS,QAAS;AAWrE,QACE,oBAAC,qBAAD;EACE,OAXU,cAET,MAAM,SACP,SAAS,SAAS,SACjB,MAAM,cAET;GAAC,MAAM;GAAO,MAAM;GAAc,SAAS,SAAS;GAAM,CAC3D;EAKG,UAAU;EACV,QAAQ;YAER,oBAAC,OAAD;GAAO,KAAK;GAAU,GAAI;GAAS;EACf"}
1
+ {"version":3,"file":"EditableFieldInput.mjs","names":[],"sources":["../../../../src/components/EditableField/EditableFieldInput.tsx"],"sourcesContent":["'use client';\n\nimport { type FC, type Ref, useImperativeHandle, useMemo, useRef } from 'react';\nimport { Input, type InputProps } from '../Input';\nimport { EditableFieldLayout } from './EditableFieldLayout';\n\n/**\n * Props for the EditableFieldInput component, extending standard Input props\n */\ntype EditableFieldInputProps = InputProps & {\n /** Callback function called when the user saves the edited value */\n onSave?: (value: string) => void;\n /** Callback function called when the user cancels the edit operation */\n onCancel?: () => void;\n};\n\n/**\n * EditableFieldInput Component\n *\n * An inline editable input field that displays as read-only text until clicked.\n * When activated, it shows an input field with save and cancel buttons.\n *\n * @example\n * ```tsx\n * <EditableFieldInput\n * defaultValue=\"Edit me\"\n * placeholder=\"Click to edit...\"\n * onSave={(value) => console.log('Saved:', value)}\n * onCancel={() => console.log('Cancelled')}\n * />\n * ```\n *\n * ## Features\n * - **Inline Editing**: Click to edit, displays as text when not editing\n * - **Save/Cancel Actions**: Built-in save and cancel buttons with callbacks\n * - **Keyboard Support**: Accessible keyboard navigation\n * - **Input Variants**: Supports all Input component variants and sizes\n * - **Auto-save on Click Away**: Saves automatically when clicking outside\n * - **Ref Forwarding**: Exposes the underlying input element reference\n *\n * ## Accessibility\n * - Uses semantic HTML with proper ARIA attributes\n * - Keyboard accessible with tab navigation\n * - Screen reader friendly with descriptive labels\n * - Focus management for edit mode transitions\n *\n * @param props - EditableFieldInputProps extending InputProps\n * @returns React functional component\n */\nexport const EditableFieldInput: FC<EditableFieldInputProps> = ({\n onSave,\n onCancel,\n ref,\n ...props\n}) => {\n const inputRef = useRef<HTMLInputElement>(null);\n\n const handleSave = () => {\n // Your save logic here\n onSave?.(inputRef.current?.value ?? '');\n };\n\n const handleCancel = () => {\n if (inputRef.current) {\n inputRef.current.value = inputRef.current.defaultValue ?? '';\n }\n onCancel?.();\n };\n\n // Expose the input ref to parent components\n useImperativeHandle(ref as Ref<HTMLElement>, () => inputRef.current!);\n\n const value = useMemo(\n () =>\n (props.value as string) ??\n inputRef.current?.value ??\n (props.defaultValue as string),\n\n [props.value, props.defaultValue, inputRef.current?.value]\n );\n\n return (\n <EditableFieldLayout\n value={value}\n onCancel={handleCancel}\n onSave={handleSave}\n >\n <Input ref={inputRef} {...props} />\n </EditableFieldLayout>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiDA,MAAa,sBAAmD,EAC9D,QACA,UACA,KACA,GAAG,YACC;CACJ,MAAM,WAAW,OAAyB,KAAK;CAE/C,MAAM,mBAAmB;AAEvB,WAAS,SAAS,SAAS,SAAS,GAAG;;CAGzC,MAAM,qBAAqB;AACzB,MAAI,SAAS,QACX,UAAS,QAAQ,QAAQ,SAAS,QAAQ,gBAAgB;AAE5D,cAAY;;AAId,qBAAoB,WAA+B,SAAS,QAAS;AAWrE,QACE,oBAAC,qBAAD;EACE,OAXU,cAET,MAAM,SACP,SAAS,SAAS,SACjB,MAAM,cAET;GAAC,MAAM;GAAO,MAAM;GAAc,SAAS,SAAS;GAAM,CAK5C;EACZ,UAAU;EACV,QAAQ;YAER,oBAAC,OAAD;GAAO,KAAK;GAAU,GAAI;GAAS;EACf"}
@@ -1 +1 @@
1
- {"version":3,"file":"Flag.mjs","names":[],"sources":["../../../../src/components/Flags/Flag.tsx"],"sourcesContent":["import type { Locale } from '@intlayer/types/allLocales';\nimport * as Locales from '@intlayer/types/locales';\nimport {\n type FC,\n type ImgHTMLAttributes,\n type JSX,\n lazy,\n Suspense,\n} from 'react';\n\ntype FlagProps = ImgHTMLAttributes<HTMLImageElement> & {\n locale: Locale;\n};\n\n// This ensures React.lazy always receives a valid component,\n// regardless of how your bundler loads SVGs.\nconst dynamicFlag = (importFn: () => Promise<any>) =>\n lazy(async () => {\n const module = await importFn();\n const asset = module.default;\n\n // Case A: Bundler returns a URL string (e.g. file-loader)\n // We wrap it in a simple img component\n if (typeof asset === 'string') {\n return {\n default: (props: any) => <img src={asset} alt=\"flag\" {...props} />,\n };\n }\n\n // Case B: Bundler returns a React Component (SVGR)\n // We return it as-is\n return { default: asset };\n });\n\nconst flagRecord: Partial<Record<Locale, ReturnType<typeof dynamicFlag>>> = {\n [Locales.ENGLISH]: dynamicFlag(() => import('./us.svg')),\n [Locales.FRENCH]: dynamicFlag(() => import('./fr.svg')),\n [Locales.SPANISH]: dynamicFlag(() => import('./es.svg')),\n [Locales.PORTUGUESE]: dynamicFlag(() => import('./pt.svg')),\n [Locales.GERMAN]: dynamicFlag(() => import('./de.svg')),\n [Locales.AFRIKAANS]: dynamicFlag(() => import('./za.svg')),\n [Locales.ARABIC]: dynamicFlag(() => import('./sa.svg')),\n [Locales.AZERI_LATIN]: dynamicFlag(() => import('./az.svg')),\n [Locales.BELARUSIAN]: dynamicFlag(() => import('./by.svg')),\n [Locales.BULGARIAN]: dynamicFlag(() => import('./bg.svg')),\n [Locales.BOSNIAN]: dynamicFlag(() => import('./ba.svg')),\n [Locales.CATALAN]: dynamicFlag(() => import('./es-ct.svg')),\n [Locales.CZECH]: dynamicFlag(() => import('./cz.svg')),\n [Locales.WELSH]: dynamicFlag(() => import('./gb-wls.svg')),\n [Locales.DANISH]: dynamicFlag(() => import('./dk.svg')),\n [Locales.DIVEHI]: dynamicFlag(() => import('./mv.svg')),\n [Locales.GREEK]: dynamicFlag(() => import('./gr.svg')),\n [Locales.ESPERANTO]: dynamicFlag(() => import('./xx.svg')), // No specific flag\n [Locales.ESTONIAN]: dynamicFlag(() => import('./ee.svg')),\n [Locales.BASQUE]: dynamicFlag(() => import('./es-pv.svg')),\n [Locales.FARSI]: dynamicFlag(() => import('./ir.svg')),\n [Locales.FINNISH]: dynamicFlag(() => import('./fi.svg')),\n [Locales.FAROESE]: dynamicFlag(() => import('./fo.svg')),\n [Locales.GALICIAN]: dynamicFlag(() => import('./es-ga.svg')),\n [Locales.GUJARATI]: dynamicFlag(() => import('./in.svg')),\n [Locales.HEBREW]: dynamicFlag(() => import('./il.svg')),\n [Locales.HINDI]: dynamicFlag(() => import('./in.svg')),\n [Locales.CROATIAN]: dynamicFlag(() => import('./hr.svg')),\n [Locales.HUNGARIAN]: dynamicFlag(() => import('./hu.svg')),\n [Locales.ARMENIAN]: dynamicFlag(() => import('./am.svg')),\n [Locales.INDONESIAN]: dynamicFlag(() => import('./id.svg')),\n [Locales.ICELANDIC]: dynamicFlag(() => import('./is.svg')),\n [Locales.ITALIAN]: dynamicFlag(() => import('./it.svg')),\n [Locales.JAPANESE]: dynamicFlag(() => import('./jp.svg')),\n [Locales.GEORGIAN]: dynamicFlag(() => import('./ge.svg')),\n [Locales.KAZAKH]: dynamicFlag(() => import('./kz.svg')),\n [Locales.KANNADA]: dynamicFlag(() => import('./in.svg')),\n [Locales.KOREAN]: dynamicFlag(() => import('./kr.svg')),\n [Locales.KONKANI]: dynamicFlag(() => import('./in.svg')),\n [Locales.KYRGYZ]: dynamicFlag(() => import('./kg.svg')),\n [Locales.LITHUANIAN]: dynamicFlag(() => import('./lt.svg')),\n [Locales.LATVIAN]: dynamicFlag(() => import('./lv.svg')),\n [Locales.MAORI]: dynamicFlag(() => import('./nz.svg')),\n [Locales.FYRO_MACEDONIAN]: dynamicFlag(() => import('./mk.svg')),\n [Locales.MONGOLIAN]: dynamicFlag(() => import('./mn.svg')),\n [Locales.MARATHI]: dynamicFlag(() => import('./in.svg')),\n [Locales.MALAY]: dynamicFlag(() => import('./my.svg')),\n [Locales.MALTESE]: dynamicFlag(() => import('./mt.svg')),\n [Locales.NORWEGIAN_BOKMAL]: dynamicFlag(() => import('./no.svg')),\n [Locales.DUTCH]: dynamicFlag(() => import('./nl.svg')),\n [Locales.NORTHERN_SOTHO]: dynamicFlag(() => import('./za.svg')),\n [Locales.PUNJABI]: dynamicFlag(() => import('./in.svg')),\n [Locales.POLISH]: dynamicFlag(() => import('./pl.svg')),\n [Locales.PASHTO]: dynamicFlag(() => import('./af.svg')),\n [Locales.QUECHUA]: dynamicFlag(() => import('./pe.svg')),\n [Locales.ROMANIAN]: dynamicFlag(() => import('./ro.svg')),\n [Locales.RUSSIAN]: dynamicFlag(() => import('./ru.svg')),\n [Locales.SANSKRIT]: dynamicFlag(() => import('./in.svg')),\n [Locales.SAMI_NORTHERN]: dynamicFlag(() => import('./no.svg')), // No specific flag, assuming Norway\n [Locales.SLOVAK]: dynamicFlag(() => import('./sk.svg')),\n [Locales.SLOVENIAN]: dynamicFlag(() => import('./si.svg')),\n [Locales.ALBANIAN]: dynamicFlag(() => import('./al.svg')),\n [Locales.SERBIAN_LATIN]: dynamicFlag(() => import('./rs.svg')),\n [Locales.SWEDISH]: dynamicFlag(() => import('./se.svg')),\n [Locales.SWEDISH_FINLAND]: dynamicFlag(() => import('./fi.svg')),\n [Locales.SWEDISH_SWEDEN]: dynamicFlag(() => import('./se.svg')),\n [Locales.SWAHILI]: dynamicFlag(() => import('./ke.svg')),\n [Locales.SYRIAC]: dynamicFlag(() => import('./sy.svg')),\n [Locales.TAMIL]: dynamicFlag(() => import('./in.svg')),\n [Locales.TELUGU]: dynamicFlag(() => import('./in.svg')),\n [Locales.THAI]: dynamicFlag(() => import('./th.svg')),\n [Locales.TAGALOG]: dynamicFlag(() => import('./ph.svg')),\n [Locales.TSWANA]: dynamicFlag(() => import('./za.svg')),\n [Locales.TURKISH]: dynamicFlag(() => import('./tr.svg')),\n [Locales.TATAR]: dynamicFlag(() => import('./ru.svg')), // Assuming Russian Federation\n [Locales.UKRAINIAN]: dynamicFlag(() => import('./ua.svg')),\n [Locales.URDU]: dynamicFlag(() => import('./pk.svg')),\n [Locales.UZBEK_LATIN]: dynamicFlag(() => import('./uz.svg')),\n [Locales.VIETNAMESE]: dynamicFlag(() => import('./vn.svg')),\n [Locales.XHOSA]: dynamicFlag(() => import('./za.svg')),\n [Locales.CHINESE_SIMPLIFIED]: dynamicFlag(() => import('./cn.svg')),\n [Locales.CHINESE_TRADITIONAL]: dynamicFlag(() => import('./tw.svg')),\n [Locales.ZULU]: dynamicFlag(() => import('./za.svg')),\n [Locales.AFRIKAANS_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.ARABIC_UNITED_ARAB_EMIRATES]: dynamicFlag(() => import('./ae.svg')),\n [Locales.ARABIC_BAHRAIN]: dynamicFlag(() => import('./bh.svg')),\n [Locales.ARABIC_ALGERIA]: dynamicFlag(() => import('./dz.svg')),\n [Locales.ARABIC_EGYPT]: dynamicFlag(() => import('./eg.svg')),\n [Locales.ARABIC_IRAQ]: dynamicFlag(() => import('./iq.svg')),\n [Locales.ARABIC_JORDAN]: dynamicFlag(() => import('./jo.svg')),\n [Locales.ARABIC_KUWAIT]: dynamicFlag(() => import('./kw.svg')),\n [Locales.ARABIC_LEBANON]: dynamicFlag(() => import('./lb.svg')),\n [Locales.ARABIC_LIBYA]: dynamicFlag(() => import('./ly.svg')),\n [Locales.ARABIC_MOROCCO]: dynamicFlag(() => import('./ma.svg')),\n [Locales.ARABIC_OMAN]: dynamicFlag(() => import('./om.svg')),\n [Locales.ARABIC_QATAR]: dynamicFlag(() => import('./qa.svg')),\n [Locales.ARABIC_SAUDI_ARABIA]: dynamicFlag(() => import('./sa.svg')),\n [Locales.ARABIC_SYRIA]: dynamicFlag(() => import('./sy.svg')),\n [Locales.ARABIC_TUNISIA]: dynamicFlag(() => import('./tn.svg')),\n [Locales.ARABIC_YEMEN]: dynamicFlag(() => import('./ye.svg')),\n [Locales.AZERI_LATIN_AZERBAIJAN]: dynamicFlag(() => import('./az.svg')),\n [Locales.BELARUSIAN_BELARUS]: dynamicFlag(() => import('./by.svg')),\n [Locales.BULGARIAN_BULGARIA]: dynamicFlag(() => import('./bg.svg')),\n [Locales.BOSNIAN_BOSNIA_AND_HERZEGOVINA]: dynamicFlag(\n () => import('./ba.svg')\n ),\n [Locales.CATALAN_SPAIN]: dynamicFlag(() => import('./es-ct.svg')),\n [Locales.CZECH_CZECH_REPUBLIC]: dynamicFlag(() => import('./cz.svg')),\n [Locales.WELSH_UNITED_KINGDOM]: dynamicFlag(() => import('./gb-wls.svg')),\n [Locales.DANISH_DENMARK]: dynamicFlag(() => import('./dk.svg')),\n [Locales.GERMAN_AUSTRIA]: dynamicFlag(() => import('./at.svg')),\n [Locales.GERMAN_SWITZERLAND]: dynamicFlag(() => import('./ch.svg')),\n [Locales.GERMAN_GERMANY]: dynamicFlag(() => import('./de.svg')),\n [Locales.GERMAN_LIECHTENSTEIN]: dynamicFlag(() => import('./li.svg')),\n [Locales.GERMAN_LUXEMBOURG]: dynamicFlag(() => import('./lu.svg')),\n [Locales.DIVEHI_MALDIVES]: dynamicFlag(() => import('./mv.svg')),\n [Locales.GREEK_GREECE]: dynamicFlag(() => import('./gr.svg')),\n [Locales.ENGLISH_AUSTRALIA]: dynamicFlag(() => import('./au.svg')),\n [Locales.ENGLISH_BELIZE]: dynamicFlag(() => import('./bz.svg')),\n [Locales.ENGLISH_CANADA]: dynamicFlag(() => import('./ca.svg')),\n [Locales.ENGLISH_CARIBBEAN]: dynamicFlag(() => import('./jm.svg')), // Using Jamaica as representative of English-speaking Caribbean\n [Locales.ENGLISH_UNITED_KINGDOM]: dynamicFlag(() => import('./gb.svg')),\n [Locales.ENGLISH_IRELAND]: dynamicFlag(() => import('./ie.svg')),\n [Locales.ENGLISH_JAMAICA]: dynamicFlag(() => import('./jm.svg')),\n [Locales.ENGLISH_NEW_ZEALAND]: dynamicFlag(() => import('./nz.svg')),\n [Locales.ENGLISH_PHILIPPINES]: dynamicFlag(() => import('./ph.svg')),\n [Locales.ENGLISH_TRINIDAD_AND_TOBAGO]: dynamicFlag(() => import('./tt.svg')),\n [Locales.ENGLISH_UNITED_STATES]: dynamicFlag(() => import('./us.svg')),\n [Locales.ENGLISH_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.ENGLISH_ZIMBABWE]: dynamicFlag(() => import('./zw.svg')),\n [Locales.SPANISH_ARGENTINA]: dynamicFlag(() => import('./ar.svg')),\n [Locales.SPANISH_BOLIVIA]: dynamicFlag(() => import('./bo.svg')),\n [Locales.SPANISH_CHILE]: dynamicFlag(() => import('./cl.svg')),\n [Locales.SPANISH_COLOMBIA]: dynamicFlag(() => import('./co.svg')),\n [Locales.SPANISH_COSTA_RICA]: dynamicFlag(() => import('./cr.svg')),\n [Locales.SPANISH_DOMINICAN_REPUBLIC]: dynamicFlag(() => import('./do.svg')),\n [Locales.SPANISH_ECUADOR]: dynamicFlag(() => import('./ec.svg')),\n [Locales.SPANISH_SPAIN]: dynamicFlag(() => import('./es.svg')),\n [Locales.SPANISH_GUATEMALA]: dynamicFlag(() => import('./gt.svg')),\n [Locales.SPANISH_HONDURAS]: dynamicFlag(() => import('./hn.svg')),\n [Locales.SPANISH_MEXICO]: dynamicFlag(() => import('./mx.svg')),\n [Locales.SPANISH_NICARAGUA]: dynamicFlag(() => import('./ni.svg')),\n [Locales.SPANISH_PANAMA]: dynamicFlag(() => import('./pa.svg')),\n [Locales.SPANISH_PERU]: dynamicFlag(() => import('./pe.svg')),\n [Locales.SPANISH_PUERTO_RICO]: dynamicFlag(() => import('./pr.svg')),\n [Locales.SPANISH_PARAGUAY]: dynamicFlag(() => import('./py.svg')),\n [Locales.SPANISH_EL_SALVADOR]: dynamicFlag(() => import('./sv.svg')),\n [Locales.SPANISH_URUGUAY]: dynamicFlag(() => import('./uy.svg')),\n [Locales.SPANISH_VENEZUELA]: dynamicFlag(() => import('./ve.svg')),\n [Locales.ESTONIAN_ESTONIA]: dynamicFlag(() => import('./ee.svg')),\n [Locales.BASQUE_SPAIN]: dynamicFlag(() => import('./es-pv.svg')),\n [Locales.FARSI_IRAN]: dynamicFlag(() => import('./ir.svg')),\n [Locales.FINNISH_FINLAND]: dynamicFlag(() => import('./fi.svg')),\n [Locales.FAROESE_FAROE_ISLANDS]: dynamicFlag(() => import('./fo.svg')),\n [Locales.FRENCH_BELGIUM]: dynamicFlag(() => import('./be.svg')),\n [Locales.FRENCH_CANADA]: dynamicFlag(() => import('./ca.svg')),\n [Locales.FRENCH_SWITZERLAND]: dynamicFlag(() => import('./ch.svg')),\n [Locales.FRENCH_FRANCE]: dynamicFlag(() => import('./fr.svg')),\n [Locales.FRENCH_LUXEMBOURG]: dynamicFlag(() => import('./lu.svg')),\n [Locales.FRENCH_PRINCIPALITY_OF_MONACO]: dynamicFlag(\n () => import('./mc.svg')\n ),\n [Locales.GALICIAN_SPAIN]: dynamicFlag(() => import('./es-ga.svg')),\n [Locales.GUJARATI_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.HEBREW_ISRAEL]: dynamicFlag(() => import('./il.svg')),\n [Locales.HINDI_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.CROATIAN_BOSNIA_AND_HERZEGOVINA]: dynamicFlag(\n () => import('./ba.svg')\n ),\n [Locales.CROATIAN_CROATIA]: dynamicFlag(() => import('./hr.svg')),\n [Locales.HUNGARIAN_HUNGARY]: dynamicFlag(() => import('./hu.svg')),\n [Locales.ARMENIAN_ARMENIA]: dynamicFlag(() => import('./am.svg')),\n [Locales.INDONESIAN_INDONESIA]: dynamicFlag(() => import('./id.svg')),\n [Locales.ICELANDIC_ICELAND]: dynamicFlag(() => import('./is.svg')),\n [Locales.ITALIAN_SWITZERLAND]: dynamicFlag(() => import('./ch.svg')),\n [Locales.ITALIAN_ITALY]: dynamicFlag(() => import('./it.svg')),\n [Locales.JAPANESE_JAPAN]: dynamicFlag(() => import('./jp.svg')),\n [Locales.GEORGIAN_GEORGIA]: dynamicFlag(() => import('./ge.svg')),\n [Locales.KAZAKH_KAZAKHSTAN]: dynamicFlag(() => import('./kz.svg')),\n [Locales.KANNADA_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.KOREAN_KOREA]: dynamicFlag(() => import('./kr.svg')),\n [Locales.KONKANI_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.KYRGYZ_KYRGYZSTAN]: dynamicFlag(() => import('./kg.svg')),\n [Locales.LITHUANIAN_LITHUANIA]: dynamicFlag(() => import('./lt.svg')),\n [Locales.LATVIAN_LATVIA]: dynamicFlag(() => import('./lv.svg')),\n [Locales.MAORI_NEW_ZEALAND]: dynamicFlag(() => import('./nz.svg')),\n [Locales.FYRO_MACEDONIAN_MACEDONIA]: dynamicFlag(() => import('./mk.svg')),\n [Locales.MONGOLIAN_MONGOLIA]: dynamicFlag(() => import('./mn.svg')),\n [Locales.MARATHI_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.MALAY_BRUNEI_DARUSSALAM]: dynamicFlag(() => import('./bn.svg')),\n [Locales.MALAY_MALAYSIA]: dynamicFlag(() => import('./my.svg')),\n [Locales.MALTESE_MALTA]: dynamicFlag(() => import('./mt.svg')),\n [Locales.NORWEGIAN_BOKMAL_NORWAY]: dynamicFlag(() => import('./no.svg')),\n [Locales.DUTCH_BELGIUM]: dynamicFlag(() => import('./be.svg')),\n [Locales.DUTCH_NETHERLANDS]: dynamicFlag(() => import('./nl.svg')),\n [Locales.NORWEGIAN_NYNORSK_NORWAY]: dynamicFlag(() => import('./no.svg')),\n [Locales.NORTHERN_SOTHO_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.PUNJABI_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.POLISH_POLAND]: dynamicFlag(() => import('./pl.svg')),\n [Locales.PASHTO_AFGHANISTAN]: dynamicFlag(() => import('./af.svg')),\n [Locales.PORTUGUESE_BRAZIL]: dynamicFlag(() => import('./br.svg')),\n [Locales.PORTUGUESE_PORTUGAL]: dynamicFlag(() => import('./pt.svg')),\n [Locales.QUECHUA_BOLIVIA]: dynamicFlag(() => import('./bo.svg')),\n [Locales.QUECHUA_ECUADOR]: dynamicFlag(() => import('./ec.svg')),\n [Locales.QUECHUA_PERU]: dynamicFlag(() => import('./pe.svg')),\n [Locales.ROMANIAN_ROMANIA]: dynamicFlag(() => import('./ro.svg')),\n [Locales.RUSSIAN_RUSSIA]: dynamicFlag(() => import('./ru.svg')),\n [Locales.SANSKRIT_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.SAMI_NORTHERN_FINLAND]: dynamicFlag(() => import('./fi.svg')),\n [Locales.SAMI_NORTHERN_NORWAY]: dynamicFlag(() => import('./no.svg')),\n [Locales.SAMI_NORTHERN_SWEDEN]: dynamicFlag(() => import('./se.svg')),\n [Locales.SLOVAK_SLOVAKIA]: dynamicFlag(() => import('./sk.svg')),\n [Locales.SLOVENIAN_SLOVENIA]: dynamicFlag(() => import('./si.svg')),\n [Locales.ALBANIAN_ALBANIA]: dynamicFlag(() => import('./al.svg')),\n [Locales.SERBIAN_LATIN_BOSNIA_AND_HERZEGOVINA]: dynamicFlag(\n () => import('./ba.svg')\n ),\n [Locales.SERBIAN_LATIN_SERBIA_AND_MONTENEGRO]: dynamicFlag(\n () => import('./rs.svg')\n ),\n [Locales.SWAHILI_KENYA]: dynamicFlag(() => import('./ke.svg')),\n [Locales.SYRIAC_SYRIA]: dynamicFlag(() => import('./sy.svg')),\n [Locales.TAMIL_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.TELUGU_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.THAI_THAILAND]: dynamicFlag(() => import('./th.svg')),\n [Locales.TAGALOG_PHILIPPINES]: dynamicFlag(() => import('./ph.svg')),\n [Locales.TSWANA_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.TURKISH_TURKEY]: dynamicFlag(() => import('./tr.svg')),\n [Locales.TATAR_RUSSIA]: dynamicFlag(() => import('./ru.svg')),\n [Locales.TSOGA]: dynamicFlag(() => import('./xx.svg')), // No specific flag\n [Locales.UKRAINIAN_UKRAINE]: dynamicFlag(() => import('./ua.svg')),\n [Locales.URDU_ISLAMIC_REPUBLIC_OF_PAKISTAN]: dynamicFlag(\n () => import('./pk.svg')\n ),\n [Locales.UZBEK_LATIN_UZBEKISTAN]: dynamicFlag(() => import('./uz.svg')),\n [Locales.VIETNAMESE_VIET_NAM]: dynamicFlag(() => import('./vn.svg')),\n [Locales.XHOSA_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.CHINESE]: dynamicFlag(() => import('./cn.svg')),\n [Locales.CHINESE_SIMPLIFIED_CHINA]: dynamicFlag(() => import('./cn.svg')),\n [Locales.CHINESE_HONG_KONG]: dynamicFlag(() => import('./hk.svg')),\n [Locales.CHINESE_MACAU]: dynamicFlag(() => import('./mo.svg')),\n [Locales.CHINESE_SINGAPORE]: dynamicFlag(() => import('./sg.svg')),\n [Locales.ZULU_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.BENGALI]: dynamicFlag(() => import('./in.svg')),\n [Locales.BENGALI_BANGLADESH]: dynamicFlag(() => import('./bd.svg')),\n [Locales.BENGALI_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.BENGALI_MYANMAR]: dynamicFlag(() => import('./mm.svg')),\n [Locales.BURMESE]: dynamicFlag(() => import('./mm.svg')),\n [Locales.BURMESE_MYANMAR]: dynamicFlag(() => import('./mm.svg')),\n [Locales.KHMER]: dynamicFlag(() => import('./kh.svg')),\n [Locales.KHMER_CAMBODIA]: dynamicFlag(() => import('./kh.svg')),\n [Locales.LAO]: dynamicFlag(() => import('./la.svg')),\n [Locales.LAO_LAOS]: dynamicFlag(() => import('./la.svg')),\n [Locales.YORUBA]: dynamicFlag(() => import('./ng.svg')),\n [Locales.YORUBA_NIGERIA]: dynamicFlag(() => import('./ng.svg')),\n [Locales.AMHARIC]: dynamicFlag(() => import('./et.svg')),\n [Locales.AMHARIC_ETHIOPIA]: dynamicFlag(() => import('./et.svg')),\n [Locales.NEPALI]: dynamicFlag(() => import('./np.svg')),\n [Locales.NEPALI_NEPAL]: dynamicFlag(() => import('./np.svg')),\n [Locales.IRISH]: dynamicFlag(() => import('./ie.svg')),\n [Locales.IRISH_IRELAND]: dynamicFlag(() => import('./ie.svg')),\n [Locales.SCOTTISH_GAELIC]: dynamicFlag(() => import('./gb.svg')),\n [Locales.SCOTTISH_GAELIC_UNITED_KINGDOM]: dynamicFlag(\n () => import('./gb.svg')\n ),\n [Locales.KURDISH]: dynamicFlag(() => import('./tr.svg')),\n [Locales.KURDISH_TURKEY]: dynamicFlag(() => import('./tr.svg')),\n [Locales.MALAYALAM]: dynamicFlag(() => import('./in.svg')),\n [Locales.MALAYALAM_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.NORWEGIAN]: dynamicFlag(() => import('./no.svg')),\n [Locales.NORWEGIAN_NYNORSK]: dynamicFlag(() => import('./no.svg')),\n [Locales.ROMANIAN_MOLDOVA]: dynamicFlag(() => import('./md.svg')),\n [Locales.ROMANSH]: dynamicFlag(() => import('./ch.svg')),\n [Locales.ROMANSH_SWITZERLAND]: dynamicFlag(() => import('./ch.svg')),\n [Locales.RUSSIAN_MOLDOVA]: dynamicFlag(() => import('./md.svg')),\n [Locales.UPPER_SORBIAN]: dynamicFlag(() => import('./de.svg')),\n [Locales.UPPER_SORBIAN_GERMANY]: dynamicFlag(() => import('./de.svg')),\n [Locales.LOWER_SORBIAN]: dynamicFlag(() => import('./de.svg')),\n [Locales.LOWER_SORBIAN_GERMANY]: dynamicFlag(() => import('./de.svg')),\n [Locales.VENDA]: dynamicFlag(() => import('./za.svg')),\n [Locales.VENDA_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.YIDDISH]: dynamicFlag(() => import('./il.svg')),\n [Locales.YIDDISH_WORLD]: dynamicFlag(() => import('./il.svg')),\n [Locales.SINHALA]: dynamicFlag(() => import('./lk.svg')),\n [Locales.SINHALA_SRI_LANKA]: dynamicFlag(() => import('./lk.svg')),\n [Locales.SERBIAN_CYRILLIC]: dynamicFlag(() => import('./rs.svg')),\n [Locales.SERBIAN_CYRILLIC_SERBIA]: dynamicFlag(() => import('./rs.svg')),\n [Locales.ENGLISH_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.ENGLISH_SINGAPORE]: dynamicFlag(() => import('./sg.svg')),\n [Locales.ENGLISH_HONG_KONG]: dynamicFlag(() => import('./hk.svg')),\n [Locales.ENGLISH_NIGERIA]: dynamicFlag(() => import('./ng.svg')),\n [Locales.ENGLISH_PAKISTAN]: dynamicFlag(() => import('./pk.svg')),\n [Locales.ENGLISH_MALAYSIA]: dynamicFlag(() => import('./my.svg')),\n [Locales.ENGLISH_BOTSWANA]: dynamicFlag(() => import('./bw.svg')),\n [Locales.ENGLISH_KENYA]: dynamicFlag(() => import('./ke.svg')),\n [Locales.ENGLISH_TANZANIA]: dynamicFlag(() => import('./tz.svg')),\n [Locales.ENGLISH_GHANA]: dynamicFlag(() => import('./gh.svg')),\n [Locales.ENGLISH_UGANDA]: dynamicFlag(() => import('./ug.svg')),\n [Locales.SPANISH_CUBA]: dynamicFlag(() => import('./cu.svg')),\n [Locales.SPANISH_UNITED_STATES]: dynamicFlag(() => import('./us.svg')),\n [Locales.PORTUGUESE_GUINEA_BISSAU]: dynamicFlag(() => import('./gw.svg')),\n [Locales.PORTUGUESE_MOZAMBIQUE]: dynamicFlag(() => import('./mz.svg')),\n [Locales.PORTUGUESE_SAO_TOME_AND_PRINCIPE]: dynamicFlag(\n () => import('./st.svg')\n ),\n [Locales.PORTUGUESE_CAPE_VERDE]: dynamicFlag(() => import('./cv.svg')),\n [Locales.PORTUGUESE_TIMOR_LESTE]: dynamicFlag(() => import('./tl.svg')),\n [Locales.PORTUGUESE_MACAU]: dynamicFlag(() => import('./mo.svg')),\n [Locales.CHINESE_TAIWAN]: dynamicFlag(() => import('./tw.svg')),\n [Locales.ARABIC_MAURITANIA]: dynamicFlag(() => import('./mr.svg')),\n [Locales.ARABIC_PALESTINE]: dynamicFlag(() => import('./ps.svg')),\n [Locales.ARABIC_SUDAN]: dynamicFlag(() => import('./sd.svg')),\n [Locales.ARABIC_DJIBOUTI]: dynamicFlag(() => import('./dj.svg')),\n [Locales.ARABIC_SOMALIA]: dynamicFlag(() => import('./so.svg')),\n [Locales.ARABIC_CHAD]: dynamicFlag(() => import('./td.svg')),\n [Locales.ARABIC_COMOROS]: dynamicFlag(() => import('./km.svg')),\n};\n\nexport const Flag: FC<FlagProps> = ({ locale, alt, ...props }): JSX.Element => {\n const LazyFlag = flagRecord[locale] ?? dynamicFlag(() => import('./xx.svg'));\n\n return (\n <Suspense>\n <LazyFlag alt={alt ?? `${locale} flag`} {...(props as any)} role=\"img\" />\n </Suspense>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Flag.mjs","names":[],"sources":["../../../../src/components/Flags/Flag.tsx"],"sourcesContent":["import type { Locale } from '@intlayer/types/allLocales';\nimport * as Locales from '@intlayer/types/locales';\nimport {\n type FC,\n type ImgHTMLAttributes,\n type JSX,\n lazy,\n Suspense,\n} from 'react';\n\ntype FlagProps = ImgHTMLAttributes<HTMLImageElement> & {\n locale: Locale;\n};\n\n// This ensures React.lazy always receives a valid component,\n// regardless of how your bundler loads SVGs.\nconst dynamicFlag = (importFn: () => Promise<any>) =>\n lazy(async () => {\n const module = await importFn();\n const asset = module.default;\n\n // Case A: Bundler returns a URL string (e.g. file-loader)\n // We wrap it in a simple img component\n if (typeof asset === 'string') {\n return {\n default: (props: any) => <img src={asset} alt=\"flag\" {...props} />,\n };\n }\n\n // Case B: Bundler returns a React Component (SVGR)\n // We return it as-is\n return { default: asset };\n });\n\nconst flagRecord: Partial<Record<Locale, ReturnType<typeof dynamicFlag>>> = {\n [Locales.ENGLISH]: dynamicFlag(() => import('./us.svg')),\n [Locales.FRENCH]: dynamicFlag(() => import('./fr.svg')),\n [Locales.SPANISH]: dynamicFlag(() => import('./es.svg')),\n [Locales.PORTUGUESE]: dynamicFlag(() => import('./pt.svg')),\n [Locales.GERMAN]: dynamicFlag(() => import('./de.svg')),\n [Locales.AFRIKAANS]: dynamicFlag(() => import('./za.svg')),\n [Locales.ARABIC]: dynamicFlag(() => import('./sa.svg')),\n [Locales.AZERI_LATIN]: dynamicFlag(() => import('./az.svg')),\n [Locales.BELARUSIAN]: dynamicFlag(() => import('./by.svg')),\n [Locales.BULGARIAN]: dynamicFlag(() => import('./bg.svg')),\n [Locales.BOSNIAN]: dynamicFlag(() => import('./ba.svg')),\n [Locales.CATALAN]: dynamicFlag(() => import('./es-ct.svg')),\n [Locales.CZECH]: dynamicFlag(() => import('./cz.svg')),\n [Locales.WELSH]: dynamicFlag(() => import('./gb-wls.svg')),\n [Locales.DANISH]: dynamicFlag(() => import('./dk.svg')),\n [Locales.DIVEHI]: dynamicFlag(() => import('./mv.svg')),\n [Locales.GREEK]: dynamicFlag(() => import('./gr.svg')),\n [Locales.ESPERANTO]: dynamicFlag(() => import('./xx.svg')), // No specific flag\n [Locales.ESTONIAN]: dynamicFlag(() => import('./ee.svg')),\n [Locales.BASQUE]: dynamicFlag(() => import('./es-pv.svg')),\n [Locales.FARSI]: dynamicFlag(() => import('./ir.svg')),\n [Locales.FINNISH]: dynamicFlag(() => import('./fi.svg')),\n [Locales.FAROESE]: dynamicFlag(() => import('./fo.svg')),\n [Locales.GALICIAN]: dynamicFlag(() => import('./es-ga.svg')),\n [Locales.GUJARATI]: dynamicFlag(() => import('./in.svg')),\n [Locales.HEBREW]: dynamicFlag(() => import('./il.svg')),\n [Locales.HINDI]: dynamicFlag(() => import('./in.svg')),\n [Locales.CROATIAN]: dynamicFlag(() => import('./hr.svg')),\n [Locales.HUNGARIAN]: dynamicFlag(() => import('./hu.svg')),\n [Locales.ARMENIAN]: dynamicFlag(() => import('./am.svg')),\n [Locales.INDONESIAN]: dynamicFlag(() => import('./id.svg')),\n [Locales.ICELANDIC]: dynamicFlag(() => import('./is.svg')),\n [Locales.ITALIAN]: dynamicFlag(() => import('./it.svg')),\n [Locales.JAPANESE]: dynamicFlag(() => import('./jp.svg')),\n [Locales.GEORGIAN]: dynamicFlag(() => import('./ge.svg')),\n [Locales.KAZAKH]: dynamicFlag(() => import('./kz.svg')),\n [Locales.KANNADA]: dynamicFlag(() => import('./in.svg')),\n [Locales.KOREAN]: dynamicFlag(() => import('./kr.svg')),\n [Locales.KONKANI]: dynamicFlag(() => import('./in.svg')),\n [Locales.KYRGYZ]: dynamicFlag(() => import('./kg.svg')),\n [Locales.LITHUANIAN]: dynamicFlag(() => import('./lt.svg')),\n [Locales.LATVIAN]: dynamicFlag(() => import('./lv.svg')),\n [Locales.MAORI]: dynamicFlag(() => import('./nz.svg')),\n [Locales.FYRO_MACEDONIAN]: dynamicFlag(() => import('./mk.svg')),\n [Locales.MONGOLIAN]: dynamicFlag(() => import('./mn.svg')),\n [Locales.MARATHI]: dynamicFlag(() => import('./in.svg')),\n [Locales.MALAY]: dynamicFlag(() => import('./my.svg')),\n [Locales.MALTESE]: dynamicFlag(() => import('./mt.svg')),\n [Locales.NORWEGIAN_BOKMAL]: dynamicFlag(() => import('./no.svg')),\n [Locales.DUTCH]: dynamicFlag(() => import('./nl.svg')),\n [Locales.NORTHERN_SOTHO]: dynamicFlag(() => import('./za.svg')),\n [Locales.PUNJABI]: dynamicFlag(() => import('./in.svg')),\n [Locales.POLISH]: dynamicFlag(() => import('./pl.svg')),\n [Locales.PASHTO]: dynamicFlag(() => import('./af.svg')),\n [Locales.QUECHUA]: dynamicFlag(() => import('./pe.svg')),\n [Locales.ROMANIAN]: dynamicFlag(() => import('./ro.svg')),\n [Locales.RUSSIAN]: dynamicFlag(() => import('./ru.svg')),\n [Locales.SANSKRIT]: dynamicFlag(() => import('./in.svg')),\n [Locales.SAMI_NORTHERN]: dynamicFlag(() => import('./no.svg')), // No specific flag, assuming Norway\n [Locales.SLOVAK]: dynamicFlag(() => import('./sk.svg')),\n [Locales.SLOVENIAN]: dynamicFlag(() => import('./si.svg')),\n [Locales.ALBANIAN]: dynamicFlag(() => import('./al.svg')),\n [Locales.SERBIAN_LATIN]: dynamicFlag(() => import('./rs.svg')),\n [Locales.SWEDISH]: dynamicFlag(() => import('./se.svg')),\n [Locales.SWEDISH_FINLAND]: dynamicFlag(() => import('./fi.svg')),\n [Locales.SWEDISH_SWEDEN]: dynamicFlag(() => import('./se.svg')),\n [Locales.SWAHILI]: dynamicFlag(() => import('./ke.svg')),\n [Locales.SYRIAC]: dynamicFlag(() => import('./sy.svg')),\n [Locales.TAMIL]: dynamicFlag(() => import('./in.svg')),\n [Locales.TELUGU]: dynamicFlag(() => import('./in.svg')),\n [Locales.THAI]: dynamicFlag(() => import('./th.svg')),\n [Locales.TAGALOG]: dynamicFlag(() => import('./ph.svg')),\n [Locales.TSWANA]: dynamicFlag(() => import('./za.svg')),\n [Locales.TURKISH]: dynamicFlag(() => import('./tr.svg')),\n [Locales.TATAR]: dynamicFlag(() => import('./ru.svg')), // Assuming Russian Federation\n [Locales.UKRAINIAN]: dynamicFlag(() => import('./ua.svg')),\n [Locales.URDU]: dynamicFlag(() => import('./pk.svg')),\n [Locales.UZBEK_LATIN]: dynamicFlag(() => import('./uz.svg')),\n [Locales.VIETNAMESE]: dynamicFlag(() => import('./vn.svg')),\n [Locales.XHOSA]: dynamicFlag(() => import('./za.svg')),\n [Locales.CHINESE_SIMPLIFIED]: dynamicFlag(() => import('./cn.svg')),\n [Locales.CHINESE_TRADITIONAL]: dynamicFlag(() => import('./tw.svg')),\n [Locales.ZULU]: dynamicFlag(() => import('./za.svg')),\n [Locales.AFRIKAANS_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.ARABIC_UNITED_ARAB_EMIRATES]: dynamicFlag(() => import('./ae.svg')),\n [Locales.ARABIC_BAHRAIN]: dynamicFlag(() => import('./bh.svg')),\n [Locales.ARABIC_ALGERIA]: dynamicFlag(() => import('./dz.svg')),\n [Locales.ARABIC_EGYPT]: dynamicFlag(() => import('./eg.svg')),\n [Locales.ARABIC_IRAQ]: dynamicFlag(() => import('./iq.svg')),\n [Locales.ARABIC_JORDAN]: dynamicFlag(() => import('./jo.svg')),\n [Locales.ARABIC_KUWAIT]: dynamicFlag(() => import('./kw.svg')),\n [Locales.ARABIC_LEBANON]: dynamicFlag(() => import('./lb.svg')),\n [Locales.ARABIC_LIBYA]: dynamicFlag(() => import('./ly.svg')),\n [Locales.ARABIC_MOROCCO]: dynamicFlag(() => import('./ma.svg')),\n [Locales.ARABIC_OMAN]: dynamicFlag(() => import('./om.svg')),\n [Locales.ARABIC_QATAR]: dynamicFlag(() => import('./qa.svg')),\n [Locales.ARABIC_SAUDI_ARABIA]: dynamicFlag(() => import('./sa.svg')),\n [Locales.ARABIC_SYRIA]: dynamicFlag(() => import('./sy.svg')),\n [Locales.ARABIC_TUNISIA]: dynamicFlag(() => import('./tn.svg')),\n [Locales.ARABIC_YEMEN]: dynamicFlag(() => import('./ye.svg')),\n [Locales.AZERI_LATIN_AZERBAIJAN]: dynamicFlag(() => import('./az.svg')),\n [Locales.BELARUSIAN_BELARUS]: dynamicFlag(() => import('./by.svg')),\n [Locales.BULGARIAN_BULGARIA]: dynamicFlag(() => import('./bg.svg')),\n [Locales.BOSNIAN_BOSNIA_AND_HERZEGOVINA]: dynamicFlag(\n () => import('./ba.svg')\n ),\n [Locales.CATALAN_SPAIN]: dynamicFlag(() => import('./es-ct.svg')),\n [Locales.CZECH_CZECH_REPUBLIC]: dynamicFlag(() => import('./cz.svg')),\n [Locales.WELSH_UNITED_KINGDOM]: dynamicFlag(() => import('./gb-wls.svg')),\n [Locales.DANISH_DENMARK]: dynamicFlag(() => import('./dk.svg')),\n [Locales.GERMAN_AUSTRIA]: dynamicFlag(() => import('./at.svg')),\n [Locales.GERMAN_SWITZERLAND]: dynamicFlag(() => import('./ch.svg')),\n [Locales.GERMAN_GERMANY]: dynamicFlag(() => import('./de.svg')),\n [Locales.GERMAN_LIECHTENSTEIN]: dynamicFlag(() => import('./li.svg')),\n [Locales.GERMAN_LUXEMBOURG]: dynamicFlag(() => import('./lu.svg')),\n [Locales.DIVEHI_MALDIVES]: dynamicFlag(() => import('./mv.svg')),\n [Locales.GREEK_GREECE]: dynamicFlag(() => import('./gr.svg')),\n [Locales.ENGLISH_AUSTRALIA]: dynamicFlag(() => import('./au.svg')),\n [Locales.ENGLISH_BELIZE]: dynamicFlag(() => import('./bz.svg')),\n [Locales.ENGLISH_CANADA]: dynamicFlag(() => import('./ca.svg')),\n [Locales.ENGLISH_CARIBBEAN]: dynamicFlag(() => import('./jm.svg')), // Using Jamaica as representative of English-speaking Caribbean\n [Locales.ENGLISH_UNITED_KINGDOM]: dynamicFlag(() => import('./gb.svg')),\n [Locales.ENGLISH_IRELAND]: dynamicFlag(() => import('./ie.svg')),\n [Locales.ENGLISH_JAMAICA]: dynamicFlag(() => import('./jm.svg')),\n [Locales.ENGLISH_NEW_ZEALAND]: dynamicFlag(() => import('./nz.svg')),\n [Locales.ENGLISH_PHILIPPINES]: dynamicFlag(() => import('./ph.svg')),\n [Locales.ENGLISH_TRINIDAD_AND_TOBAGO]: dynamicFlag(() => import('./tt.svg')),\n [Locales.ENGLISH_UNITED_STATES]: dynamicFlag(() => import('./us.svg')),\n [Locales.ENGLISH_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.ENGLISH_ZIMBABWE]: dynamicFlag(() => import('./zw.svg')),\n [Locales.SPANISH_ARGENTINA]: dynamicFlag(() => import('./ar.svg')),\n [Locales.SPANISH_BOLIVIA]: dynamicFlag(() => import('./bo.svg')),\n [Locales.SPANISH_CHILE]: dynamicFlag(() => import('./cl.svg')),\n [Locales.SPANISH_COLOMBIA]: dynamicFlag(() => import('./co.svg')),\n [Locales.SPANISH_COSTA_RICA]: dynamicFlag(() => import('./cr.svg')),\n [Locales.SPANISH_DOMINICAN_REPUBLIC]: dynamicFlag(() => import('./do.svg')),\n [Locales.SPANISH_ECUADOR]: dynamicFlag(() => import('./ec.svg')),\n [Locales.SPANISH_SPAIN]: dynamicFlag(() => import('./es.svg')),\n [Locales.SPANISH_GUATEMALA]: dynamicFlag(() => import('./gt.svg')),\n [Locales.SPANISH_HONDURAS]: dynamicFlag(() => import('./hn.svg')),\n [Locales.SPANISH_MEXICO]: dynamicFlag(() => import('./mx.svg')),\n [Locales.SPANISH_NICARAGUA]: dynamicFlag(() => import('./ni.svg')),\n [Locales.SPANISH_PANAMA]: dynamicFlag(() => import('./pa.svg')),\n [Locales.SPANISH_PERU]: dynamicFlag(() => import('./pe.svg')),\n [Locales.SPANISH_PUERTO_RICO]: dynamicFlag(() => import('./pr.svg')),\n [Locales.SPANISH_PARAGUAY]: dynamicFlag(() => import('./py.svg')),\n [Locales.SPANISH_EL_SALVADOR]: dynamicFlag(() => import('./sv.svg')),\n [Locales.SPANISH_URUGUAY]: dynamicFlag(() => import('./uy.svg')),\n [Locales.SPANISH_VENEZUELA]: dynamicFlag(() => import('./ve.svg')),\n [Locales.ESTONIAN_ESTONIA]: dynamicFlag(() => import('./ee.svg')),\n [Locales.BASQUE_SPAIN]: dynamicFlag(() => import('./es-pv.svg')),\n [Locales.FARSI_IRAN]: dynamicFlag(() => import('./ir.svg')),\n [Locales.FINNISH_FINLAND]: dynamicFlag(() => import('./fi.svg')),\n [Locales.FAROESE_FAROE_ISLANDS]: dynamicFlag(() => import('./fo.svg')),\n [Locales.FRENCH_BELGIUM]: dynamicFlag(() => import('./be.svg')),\n [Locales.FRENCH_CANADA]: dynamicFlag(() => import('./ca.svg')),\n [Locales.FRENCH_SWITZERLAND]: dynamicFlag(() => import('./ch.svg')),\n [Locales.FRENCH_FRANCE]: dynamicFlag(() => import('./fr.svg')),\n [Locales.FRENCH_LUXEMBOURG]: dynamicFlag(() => import('./lu.svg')),\n [Locales.FRENCH_PRINCIPALITY_OF_MONACO]: dynamicFlag(\n () => import('./mc.svg')\n ),\n [Locales.GALICIAN_SPAIN]: dynamicFlag(() => import('./es-ga.svg')),\n [Locales.GUJARATI_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.HEBREW_ISRAEL]: dynamicFlag(() => import('./il.svg')),\n [Locales.HINDI_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.CROATIAN_BOSNIA_AND_HERZEGOVINA]: dynamicFlag(\n () => import('./ba.svg')\n ),\n [Locales.CROATIAN_CROATIA]: dynamicFlag(() => import('./hr.svg')),\n [Locales.HUNGARIAN_HUNGARY]: dynamicFlag(() => import('./hu.svg')),\n [Locales.ARMENIAN_ARMENIA]: dynamicFlag(() => import('./am.svg')),\n [Locales.INDONESIAN_INDONESIA]: dynamicFlag(() => import('./id.svg')),\n [Locales.ICELANDIC_ICELAND]: dynamicFlag(() => import('./is.svg')),\n [Locales.ITALIAN_SWITZERLAND]: dynamicFlag(() => import('./ch.svg')),\n [Locales.ITALIAN_ITALY]: dynamicFlag(() => import('./it.svg')),\n [Locales.JAPANESE_JAPAN]: dynamicFlag(() => import('./jp.svg')),\n [Locales.GEORGIAN_GEORGIA]: dynamicFlag(() => import('./ge.svg')),\n [Locales.KAZAKH_KAZAKHSTAN]: dynamicFlag(() => import('./kz.svg')),\n [Locales.KANNADA_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.KOREAN_KOREA]: dynamicFlag(() => import('./kr.svg')),\n [Locales.KONKANI_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.KYRGYZ_KYRGYZSTAN]: dynamicFlag(() => import('./kg.svg')),\n [Locales.LITHUANIAN_LITHUANIA]: dynamicFlag(() => import('./lt.svg')),\n [Locales.LATVIAN_LATVIA]: dynamicFlag(() => import('./lv.svg')),\n [Locales.MAORI_NEW_ZEALAND]: dynamicFlag(() => import('./nz.svg')),\n [Locales.FYRO_MACEDONIAN_MACEDONIA]: dynamicFlag(() => import('./mk.svg')),\n [Locales.MONGOLIAN_MONGOLIA]: dynamicFlag(() => import('./mn.svg')),\n [Locales.MARATHI_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.MALAY_BRUNEI_DARUSSALAM]: dynamicFlag(() => import('./bn.svg')),\n [Locales.MALAY_MALAYSIA]: dynamicFlag(() => import('./my.svg')),\n [Locales.MALTESE_MALTA]: dynamicFlag(() => import('./mt.svg')),\n [Locales.NORWEGIAN_BOKMAL_NORWAY]: dynamicFlag(() => import('./no.svg')),\n [Locales.DUTCH_BELGIUM]: dynamicFlag(() => import('./be.svg')),\n [Locales.DUTCH_NETHERLANDS]: dynamicFlag(() => import('./nl.svg')),\n [Locales.NORWEGIAN_NYNORSK_NORWAY]: dynamicFlag(() => import('./no.svg')),\n [Locales.NORTHERN_SOTHO_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.PUNJABI_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.POLISH_POLAND]: dynamicFlag(() => import('./pl.svg')),\n [Locales.PASHTO_AFGHANISTAN]: dynamicFlag(() => import('./af.svg')),\n [Locales.PORTUGUESE_BRAZIL]: dynamicFlag(() => import('./br.svg')),\n [Locales.PORTUGUESE_PORTUGAL]: dynamicFlag(() => import('./pt.svg')),\n [Locales.QUECHUA_BOLIVIA]: dynamicFlag(() => import('./bo.svg')),\n [Locales.QUECHUA_ECUADOR]: dynamicFlag(() => import('./ec.svg')),\n [Locales.QUECHUA_PERU]: dynamicFlag(() => import('./pe.svg')),\n [Locales.ROMANIAN_ROMANIA]: dynamicFlag(() => import('./ro.svg')),\n [Locales.RUSSIAN_RUSSIA]: dynamicFlag(() => import('./ru.svg')),\n [Locales.SANSKRIT_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.SAMI_NORTHERN_FINLAND]: dynamicFlag(() => import('./fi.svg')),\n [Locales.SAMI_NORTHERN_NORWAY]: dynamicFlag(() => import('./no.svg')),\n [Locales.SAMI_NORTHERN_SWEDEN]: dynamicFlag(() => import('./se.svg')),\n [Locales.SLOVAK_SLOVAKIA]: dynamicFlag(() => import('./sk.svg')),\n [Locales.SLOVENIAN_SLOVENIA]: dynamicFlag(() => import('./si.svg')),\n [Locales.ALBANIAN_ALBANIA]: dynamicFlag(() => import('./al.svg')),\n [Locales.SERBIAN_LATIN_BOSNIA_AND_HERZEGOVINA]: dynamicFlag(\n () => import('./ba.svg')\n ),\n [Locales.SERBIAN_LATIN_SERBIA_AND_MONTENEGRO]: dynamicFlag(\n () => import('./rs.svg')\n ),\n [Locales.SWAHILI_KENYA]: dynamicFlag(() => import('./ke.svg')),\n [Locales.SYRIAC_SYRIA]: dynamicFlag(() => import('./sy.svg')),\n [Locales.TAMIL_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.TELUGU_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.THAI_THAILAND]: dynamicFlag(() => import('./th.svg')),\n [Locales.TAGALOG_PHILIPPINES]: dynamicFlag(() => import('./ph.svg')),\n [Locales.TSWANA_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.TURKISH_TURKEY]: dynamicFlag(() => import('./tr.svg')),\n [Locales.TATAR_RUSSIA]: dynamicFlag(() => import('./ru.svg')),\n [Locales.TSOGA]: dynamicFlag(() => import('./xx.svg')), // No specific flag\n [Locales.UKRAINIAN_UKRAINE]: dynamicFlag(() => import('./ua.svg')),\n [Locales.URDU_ISLAMIC_REPUBLIC_OF_PAKISTAN]: dynamicFlag(\n () => import('./pk.svg')\n ),\n [Locales.UZBEK_LATIN_UZBEKISTAN]: dynamicFlag(() => import('./uz.svg')),\n [Locales.VIETNAMESE_VIET_NAM]: dynamicFlag(() => import('./vn.svg')),\n [Locales.XHOSA_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.CHINESE]: dynamicFlag(() => import('./cn.svg')),\n [Locales.CHINESE_SIMPLIFIED_CHINA]: dynamicFlag(() => import('./cn.svg')),\n [Locales.CHINESE_HONG_KONG]: dynamicFlag(() => import('./hk.svg')),\n [Locales.CHINESE_MACAU]: dynamicFlag(() => import('./mo.svg')),\n [Locales.CHINESE_SINGAPORE]: dynamicFlag(() => import('./sg.svg')),\n [Locales.ZULU_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.BENGALI]: dynamicFlag(() => import('./in.svg')),\n [Locales.BENGALI_BANGLADESH]: dynamicFlag(() => import('./bd.svg')),\n [Locales.BENGALI_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.BENGALI_MYANMAR]: dynamicFlag(() => import('./mm.svg')),\n [Locales.BURMESE]: dynamicFlag(() => import('./mm.svg')),\n [Locales.BURMESE_MYANMAR]: dynamicFlag(() => import('./mm.svg')),\n [Locales.KHMER]: dynamicFlag(() => import('./kh.svg')),\n [Locales.KHMER_CAMBODIA]: dynamicFlag(() => import('./kh.svg')),\n [Locales.LAO]: dynamicFlag(() => import('./la.svg')),\n [Locales.LAO_LAOS]: dynamicFlag(() => import('./la.svg')),\n [Locales.YORUBA]: dynamicFlag(() => import('./ng.svg')),\n [Locales.YORUBA_NIGERIA]: dynamicFlag(() => import('./ng.svg')),\n [Locales.AMHARIC]: dynamicFlag(() => import('./et.svg')),\n [Locales.AMHARIC_ETHIOPIA]: dynamicFlag(() => import('./et.svg')),\n [Locales.NEPALI]: dynamicFlag(() => import('./np.svg')),\n [Locales.NEPALI_NEPAL]: dynamicFlag(() => import('./np.svg')),\n [Locales.IRISH]: dynamicFlag(() => import('./ie.svg')),\n [Locales.IRISH_IRELAND]: dynamicFlag(() => import('./ie.svg')),\n [Locales.SCOTTISH_GAELIC]: dynamicFlag(() => import('./gb.svg')),\n [Locales.SCOTTISH_GAELIC_UNITED_KINGDOM]: dynamicFlag(\n () => import('./gb.svg')\n ),\n [Locales.KURDISH]: dynamicFlag(() => import('./tr.svg')),\n [Locales.KURDISH_TURKEY]: dynamicFlag(() => import('./tr.svg')),\n [Locales.MALAYALAM]: dynamicFlag(() => import('./in.svg')),\n [Locales.MALAYALAM_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.NORWEGIAN]: dynamicFlag(() => import('./no.svg')),\n [Locales.NORWEGIAN_NYNORSK]: dynamicFlag(() => import('./no.svg')),\n [Locales.ROMANIAN_MOLDOVA]: dynamicFlag(() => import('./md.svg')),\n [Locales.ROMANSH]: dynamicFlag(() => import('./ch.svg')),\n [Locales.ROMANSH_SWITZERLAND]: dynamicFlag(() => import('./ch.svg')),\n [Locales.RUSSIAN_MOLDOVA]: dynamicFlag(() => import('./md.svg')),\n [Locales.UPPER_SORBIAN]: dynamicFlag(() => import('./de.svg')),\n [Locales.UPPER_SORBIAN_GERMANY]: dynamicFlag(() => import('./de.svg')),\n [Locales.LOWER_SORBIAN]: dynamicFlag(() => import('./de.svg')),\n [Locales.LOWER_SORBIAN_GERMANY]: dynamicFlag(() => import('./de.svg')),\n [Locales.VENDA]: dynamicFlag(() => import('./za.svg')),\n [Locales.VENDA_SOUTH_AFRICA]: dynamicFlag(() => import('./za.svg')),\n [Locales.YIDDISH]: dynamicFlag(() => import('./il.svg')),\n [Locales.YIDDISH_WORLD]: dynamicFlag(() => import('./il.svg')),\n [Locales.SINHALA]: dynamicFlag(() => import('./lk.svg')),\n [Locales.SINHALA_SRI_LANKA]: dynamicFlag(() => import('./lk.svg')),\n [Locales.SERBIAN_CYRILLIC]: dynamicFlag(() => import('./rs.svg')),\n [Locales.SERBIAN_CYRILLIC_SERBIA]: dynamicFlag(() => import('./rs.svg')),\n [Locales.ENGLISH_INDIA]: dynamicFlag(() => import('./in.svg')),\n [Locales.ENGLISH_SINGAPORE]: dynamicFlag(() => import('./sg.svg')),\n [Locales.ENGLISH_HONG_KONG]: dynamicFlag(() => import('./hk.svg')),\n [Locales.ENGLISH_NIGERIA]: dynamicFlag(() => import('./ng.svg')),\n [Locales.ENGLISH_PAKISTAN]: dynamicFlag(() => import('./pk.svg')),\n [Locales.ENGLISH_MALAYSIA]: dynamicFlag(() => import('./my.svg')),\n [Locales.ENGLISH_BOTSWANA]: dynamicFlag(() => import('./bw.svg')),\n [Locales.ENGLISH_KENYA]: dynamicFlag(() => import('./ke.svg')),\n [Locales.ENGLISH_TANZANIA]: dynamicFlag(() => import('./tz.svg')),\n [Locales.ENGLISH_GHANA]: dynamicFlag(() => import('./gh.svg')),\n [Locales.ENGLISH_UGANDA]: dynamicFlag(() => import('./ug.svg')),\n [Locales.SPANISH_CUBA]: dynamicFlag(() => import('./cu.svg')),\n [Locales.SPANISH_UNITED_STATES]: dynamicFlag(() => import('./us.svg')),\n [Locales.PORTUGUESE_GUINEA_BISSAU]: dynamicFlag(() => import('./gw.svg')),\n [Locales.PORTUGUESE_MOZAMBIQUE]: dynamicFlag(() => import('./mz.svg')),\n [Locales.PORTUGUESE_SAO_TOME_AND_PRINCIPE]: dynamicFlag(\n () => import('./st.svg')\n ),\n [Locales.PORTUGUESE_CAPE_VERDE]: dynamicFlag(() => import('./cv.svg')),\n [Locales.PORTUGUESE_TIMOR_LESTE]: dynamicFlag(() => import('./tl.svg')),\n [Locales.PORTUGUESE_MACAU]: dynamicFlag(() => import('./mo.svg')),\n [Locales.CHINESE_TAIWAN]: dynamicFlag(() => import('./tw.svg')),\n [Locales.ARABIC_MAURITANIA]: dynamicFlag(() => import('./mr.svg')),\n [Locales.ARABIC_PALESTINE]: dynamicFlag(() => import('./ps.svg')),\n [Locales.ARABIC_SUDAN]: dynamicFlag(() => import('./sd.svg')),\n [Locales.ARABIC_DJIBOUTI]: dynamicFlag(() => import('./dj.svg')),\n [Locales.ARABIC_SOMALIA]: dynamicFlag(() => import('./so.svg')),\n [Locales.ARABIC_CHAD]: dynamicFlag(() => import('./td.svg')),\n [Locales.ARABIC_COMOROS]: dynamicFlag(() => import('./km.svg')),\n};\n\nexport const Flag: FC<FlagProps> = ({ locale, alt, ...props }): JSX.Element => {\n const LazyFlag = flagRecord[locale] ?? dynamicFlag(() => import('./xx.svg'));\n\n return (\n <Suspense>\n <LazyFlag alt={alt ?? `${locale} flag`} {...(props as any)} role=\"img\" />\n </Suspense>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FormField.mjs","names":[],"sources":["../../../../src/components/Form/FormField.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, useMemo } from 'react';\nimport {\n Controller,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n useFormContext,\n} from 'react-hook-form';\nimport { FormItemContext } from './FormItem';\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n);\n\nexport const FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n const memoValue = useMemo(\n () => ({\n name: props.name,\n }),\n [props.name]\n );\n\n return (\n <FormFieldContext value={memoValue}>\n <Controller {...props} />\n </FormFieldContext>\n );\n};\n\nexport const useFormField = () => {\n const fieldContext = useContext(FormFieldContext);\n const itemContext = useContext(FormItemContext);\n const { getFieldState, formState } = useFormContext();\n\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error('useFormField should be used within <FormField>');\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n"],"mappings":";;;;;;;;AAmBA,MAAM,mBAAmB,cACvB,EAAE,CACH;AAED,MAAa,aAGX,EACA,GAAG,YACuC;AAQ1C,QACE,oBAAC,kBAAD;EAAkB,OARF,eACT,EACL,MAAM,MAAM,MACb,GACD,CAAC,MAAM,KAAK,CACb;YAIG,oBAAC,YAAD,EAAY,GAAI,OAAS;EACR;;AAIvB,MAAa,qBAAqB;CAChC,MAAM,eAAe,WAAW,iBAAiB;CACjD,MAAM,cAAc,WAAW,gBAAgB;CAC/C,MAAM,EAAE,eAAe,cAAc,gBAAgB;CAErD,MAAM,aAAa,cAAc,aAAa,MAAM,UAAU;AAE9D,KAAI,CAAC,aACH,OAAM,IAAI,MAAM,iDAAiD;CAGnE,MAAM,EAAE,OAAO;AAEf,QAAO;EACL;EACA,MAAM,aAAa;EACnB,YAAY,GAAG,GAAG;EAClB,mBAAmB,GAAG,GAAG;EACzB,eAAe,GAAG,GAAG;EACrB,GAAG;EACJ"}
1
+ {"version":3,"file":"FormField.mjs","names":[],"sources":["../../../../src/components/Form/FormField.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, useContext, useMemo } from 'react';\nimport {\n Controller,\n type ControllerProps,\n type FieldPath,\n type FieldValues,\n useFormContext,\n} from 'react-hook-form';\nimport { FormItemContext } from './FormItem';\n\ntype FormFieldContextValue<\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n> = {\n name: TName;\n};\n\nconst FormFieldContext = createContext<FormFieldContextValue>(\n {} as FormFieldContextValue\n);\n\nexport const FormField = <\n TFieldValues extends FieldValues = FieldValues,\n TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,\n>({\n ...props\n}: ControllerProps<TFieldValues, TName>) => {\n const memoValue = useMemo(\n () => ({\n name: props.name,\n }),\n [props.name]\n );\n\n return (\n <FormFieldContext value={memoValue}>\n <Controller {...props} />\n </FormFieldContext>\n );\n};\n\nexport const useFormField = () => {\n const fieldContext = useContext(FormFieldContext);\n const itemContext = useContext(FormItemContext);\n const { getFieldState, formState } = useFormContext();\n\n const fieldState = getFieldState(fieldContext.name, formState);\n\n if (!fieldContext) {\n throw new Error('useFormField should be used within <FormField>');\n }\n\n const { id } = itemContext;\n\n return {\n id,\n name: fieldContext.name,\n formItemId: `${id}-form-item`,\n formDescriptionId: `${id}-form-item-description`,\n formMessageId: `${id}-form-item-message`,\n ...fieldState,\n };\n};\n"],"mappings":";;;;;;;;AAmBA,MAAM,mBAAmB,cACvB,EAAE,CACH;AAED,MAAa,aAGX,EACA,GAAG,YACuC;AAQ1C,QACE,oBAAC,kBAAD;EAAkB,OARF,eACT,EACL,MAAM,MAAM,MACb,GACD,CAAC,MAAM,KAAK,CAIsB;YAChC,oBAAC,YAAD,EAAY,GAAI,OAAS;EACR;;AAIvB,MAAa,qBAAqB;CAChC,MAAM,eAAe,WAAW,iBAAiB;CACjD,MAAM,cAAc,WAAW,gBAAgB;CAC/C,MAAM,EAAE,eAAe,cAAc,gBAAgB;CAErD,MAAM,aAAa,cAAc,aAAa,MAAM,UAAU;AAE9D,KAAI,CAAC,aACH,OAAM,IAAI,MAAM,iDAAiD;CAGnE,MAAM,EAAE,OAAO;AAEf,QAAO;EACL;EACA,MAAM,aAAa;EACnB,YAAY,GAAG,GAAG;EAClB,mBAAmB,GAAG,GAAG;EACzB,eAAe,GAAG,GAAG;EACrB,GAAG;EACJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"FormItem.mjs","names":[],"sources":["../../../../src/components/Form/FormItem.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, type FC, type HTMLAttributes, useId } from 'react';\n\nexport const FormItem: FC<HTMLAttributes<HTMLDivElement>> = ({\n id: idProp,\n ...props\n}) => {\n const generatedId = useId();\n const stableId = idProp ?? generatedId;\n\n const memoValue = {\n id: stableId,\n };\n\n return (\n <FormItemContext value={memoValue}>\n <div\n className=\"flex flex-col gap-2 p-2\"\n id={stableId}\n suppressHydrationWarning\n {...props}\n />\n </FormItemContext>\n );\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nexport const FormItemContext = createContext<FormItemContextValue>(\n {} as FormItemContextValue\n);\n"],"mappings":";;;;;;AAIA,MAAa,YAAgD,EAC3D,IAAI,QACJ,GAAG,YACC;CACJ,MAAM,cAAc,OAAO;CAC3B,MAAM,WAAW,UAAU;AAM3B,QACE,oBAAC,iBAAD;EAAiB,OALD,EAChB,IAAI,UACL;YAIG,oBAAC,OAAD;GACE,WAAU;GACV,IAAI;GACJ;GACA,GAAI;GACJ;EACc;;AAQtB,MAAa,kBAAkB,cAC7B,EAAE,CACH"}
1
+ {"version":3,"file":"FormItem.mjs","names":[],"sources":["../../../../src/components/Form/FormItem.tsx"],"sourcesContent":["'use client';\n\nimport { createContext, type FC, type HTMLAttributes, useId } from 'react';\n\nexport const FormItem: FC<HTMLAttributes<HTMLDivElement>> = ({\n id: idProp,\n ...props\n}) => {\n const generatedId = useId();\n const stableId = idProp ?? generatedId;\n\n const memoValue = {\n id: stableId,\n };\n\n return (\n <FormItemContext value={memoValue}>\n <div\n className=\"flex flex-col gap-2 p-2\"\n id={stableId}\n suppressHydrationWarning\n {...props}\n />\n </FormItemContext>\n );\n};\n\ntype FormItemContextValue = {\n id: string;\n};\n\nexport const FormItemContext = createContext<FormItemContextValue>(\n {} as FormItemContextValue\n);\n"],"mappings":";;;;;;AAIA,MAAa,YAAgD,EAC3D,IAAI,QACJ,GAAG,YACC;CACJ,MAAM,cAAc,OAAO;CAC3B,MAAM,WAAW,UAAU;AAM3B,QACE,oBAAC,iBAAD;EAAiB,OAAO,EAJxB,IAAI,UAI6B;YAC/B,oBAAC,OAAD;GACE,WAAU;GACV,IAAI;GACJ;GACA,GAAI;GACJ;EACc;;AAQtB,MAAa,kBAAkB,cAC7B,EAAE,CACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"FormElementWrapper.mjs","names":[],"sources":["../../../../../src/components/Form/elements/FormElementWrapper.tsx"],"sourcesContent":["'use client';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport type { FC, SubmitEvent, HTMLProps } from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { z } from 'zod/v4';\n\nconst Schema = z.object({\n test: z.string().min(3, 'test error'),\n});\n\ntype FormElementWrapperProps = HTMLProps<HTMLFormElement> & {\n schema?: z.ZodObject;\n values?: z.infer<z.ZodObject>;\n};\n\nexport const FormElementWrapper: FC<FormElementWrapperProps> = (props) => {\n const objectFormSchema = props.schema ?? Schema;\n\n const form = useForm<z.infer<typeof objectFormSchema>>({\n resolver: zodResolver(objectFormSchema as any),\n values: props.values,\n });\n\n const { children, onSubmit, ...rest } = props;\n\n const onSubmitForm = (\n values: z.infer<typeof objectFormSchema>,\n event: SubmitEvent<HTMLFormElement>\n ) => {\n const parsedValues = objectFormSchema.safeParse(values);\n if (parsedValues.success) {\n onSubmit?.(event);\n }\n };\n\n return (\n <FormProvider {...form}>\n <form\n {...rest}\n onSubmit={(e) => {\n e.preventDefault();\n form.handleSubmit((values) => onSubmitForm(values, e));\n }}\n >\n {children}\n </form>\n </FormProvider>\n );\n};\n"],"mappings":";;;;;;;;AAOA,MAAM,SAAS,EAAE,OAAO,EACtB,MAAM,EAAE,QAAQ,CAAC,IAAI,GAAG,aAAa,EACtC,CAAC;AAOF,MAAa,sBAAmD,UAAU;CACxE,MAAM,mBAAmB,MAAM,UAAU;CAEzC,MAAM,OAAO,QAA0C;EACrD,UAAU,YAAY,iBAAwB;EAC9C,QAAQ,MAAM;EACf,CAAC;CAEF,MAAM,EAAE,UAAU,UAAU,GAAG,SAAS;CAExC,MAAM,gBACJ,QACA,UACG;AAEH,MADqB,iBAAiB,UAAU,OAAO,CACtC,QACf,YAAW,MAAM;;AAIrB,QACE,oBAAC,cAAD;EAAc,GAAI;YAChB,oBAAC,QAAD;GACE,GAAI;GACJ,WAAW,MAAM;AACf,MAAE,gBAAgB;AAClB,SAAK,cAAc,WAAW,aAAa,QAAQ,EAAE,CAAC;;GAGvD;GACI;EACM"}
1
+ {"version":3,"file":"FormElementWrapper.mjs","names":[],"sources":["../../../../../src/components/Form/elements/FormElementWrapper.tsx"],"sourcesContent":["'use client';\n\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport type { FC, SubmitEvent, HTMLProps } from 'react';\nimport { FormProvider, useForm } from 'react-hook-form';\nimport { z } from 'zod/v4';\n\nconst Schema = z.object({\n test: z.string().min(3, 'test error'),\n});\n\ntype FormElementWrapperProps = HTMLProps<HTMLFormElement> & {\n schema?: z.ZodObject;\n values?: z.infer<z.ZodObject>;\n};\n\nexport const FormElementWrapper: FC<FormElementWrapperProps> = (props) => {\n const objectFormSchema = props.schema ?? Schema;\n\n const form = useForm<z.infer<typeof objectFormSchema>>({\n resolver: zodResolver(objectFormSchema as any),\n values: props.values,\n });\n\n const { children, onSubmit, ...rest } = props;\n\n const onSubmitForm = (\n values: z.infer<typeof objectFormSchema>,\n event: SubmitEvent<HTMLFormElement>\n ) => {\n const parsedValues = objectFormSchema.safeParse(values);\n if (parsedValues.success) {\n onSubmit?.(event);\n }\n };\n\n return (\n <FormProvider {...form}>\n <form\n {...rest}\n onSubmit={(e) => {\n e.preventDefault();\n form.handleSubmit((values) => onSubmitForm(values, e));\n }}\n >\n {children}\n </form>\n </FormProvider>\n );\n};\n"],"mappings":";;;;;;;;AAOA,MAAM,SAAS,EAAE,OAAO,EACtB,MAAM,EAAE,QAAQ,CAAC,IAAI,GAAG,aAAa,EACtC,CAAC;AAOF,MAAa,sBAAmD,UAAU;CACxE,MAAM,mBAAmB,MAAM,UAAU;CAEzC,MAAM,OAAO,QAA0C;EACrD,UAAU,YAAY,iBAAwB;EAC9C,QAAQ,MAAM;EACf,CAAC;CAEF,MAAM,EAAE,UAAU,UAAU,GAAG,SAAS;CAExC,MAAM,gBACJ,QACA,UACG;AAEH,MADqB,iBAAiB,UAAU,OAChC,CAAC,QACf,YAAW,MAAM;;AAIrB,QACE,oBAAC,cAAD;EAAc,GAAI;YAChB,oBAAC,QAAD;GACE,GAAI;GACJ,WAAW,MAAM;AACf,MAAE,gBAAgB;AAClB,SAAK,cAAc,WAAW,aAAa,QAAQ,EAAE,CAAC;;GAGvD;GACI;EACM"}
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
- import { InputIndicator, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from "../../Input/OTPInput.mjs";
4
3
  import { useItemSelector } from "../../../hooks/useItemSelector.mjs";
4
+ import { InputIndicator, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot } from "../../Input/OTPInput.mjs";
5
5
  import { useFormField } from "../FormField.mjs";
6
6
  import { FormItemLayout } from "../layout/FormItemLayout.mjs";
7
7
  import { Form } from "../Form.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"HTMLRender.mjs","names":[],"sources":["../../../../src/components/HTMLRender/HTMLRender.tsx"],"sourcesContent":["import type { LocalesValues } from '@intlayer/types/module_augmentation';\nimport type { ComponentProps, FC } from 'react';\nimport {\n type HTMLRenderer as HTMLRendererIntlayer,\n type RenderHTMLProps,\n renderHTML,\n} from 'react-intlayer/html';\nimport { H1, H2, H3, H4, H5, H6 } from '../Headers';\nimport { Link } from '../Link';\n\ntype HTMLRendererProps = {\n children: string;\n isDarkMode?: boolean;\n locale?: LocalesValues;\n components?: ComponentProps<typeof HTMLRendererIntlayer>['components'];\n};\n\nexport const getIntlayerHTMLOptions: (isDarkMode: boolean) => RenderHTMLProps =\n () => ({\n components: {\n h1: (props) => <H1 isClickable={true} {...props} />,\n h2: (props) => <H2 isClickable={true} className=\"mt-16\" {...props} />,\n h3: (props) => <H3 isClickable={true} className=\"mt-5\" {...props} />,\n h4: (props) => <H4 isClickable={true} className=\"mt-3\" {...props} />,\n h5: (props) => <H5 isClickable={true} className=\"mt-3\" {...props} />,\n h6: (props) => <H6 isClickable={true} className=\"mt-3\" {...props} />,\n a: (props) => (\n <Link\n isExternalLink={props.href?.startsWith('http')}\n underlined={true}\n label=\"\"\n {...props}\n color=\"neutral\"\n />\n ),\n },\n });\n\n/**\n * HTMLRenderer Component\n *\n * A comprehensive HTML renderer that transforms HTML text into rich,\n * interactive content with custom styling and Intlayer integration.\n */\nexport const HTMLRenderer: FC<HTMLRendererProps> = ({\n children,\n isDarkMode,\n locale,\n components: componentsProp,\n}) => {\n const htmlOptions = getIntlayerHTMLOptions(isDarkMode ?? false);\n\n const htmlContent = renderHTML(children, {\n components: {\n ...htmlOptions.components,\n a: (props) => (\n <Link\n isExternalLink={props.href?.startsWith('http')}\n underlined={true}\n locale={locale}\n label=\"\"\n {...props}\n color=\"neutral\"\n />\n ),\n ...componentsProp,\n },\n });\n\n return <>{htmlContent}</>;\n};\n"],"mappings":";;;;;;AAiBA,MAAa,gCACJ,EACL,YAAY;CACV,KAAK,UAAU,oBAAC,IAAD;EAAI,aAAa;EAAM,GAAI;EAAS;CACnD,KAAK,UAAU,oBAAC,IAAD;EAAI,aAAa;EAAM,WAAU;EAAQ,GAAI;EAAS;CACrE,KAAK,UAAU,oBAAC,IAAD;EAAI,aAAa;EAAM,WAAU;EAAO,GAAI;EAAS;CACpE,KAAK,UAAU,oBAAC,IAAD;EAAI,aAAa;EAAM,WAAU;EAAO,GAAI;EAAS;CACpE,KAAK,UAAU,oBAAC,IAAD;EAAI,aAAa;EAAM,WAAU;EAAO,GAAI;EAAS;CACpE,KAAK,UAAU,oBAAC,IAAD;EAAI,aAAa;EAAM,WAAU;EAAO,GAAI;EAAS;CACpE,IAAI,UACF,oBAAC,MAAD;EACE,gBAAgB,MAAM,MAAM,WAAW,OAAO;EAC9C,YAAY;EACZ,OAAM;EACN,GAAI;EACJ,OAAM;EACN;CAEL,EACF;;;;;;;AAQH,MAAa,gBAAuC,EAClD,UACA,YACA,QACA,YAAY,qBACR;AAoBJ,QAAO,0CAjBa,WAAW,UAAU,EACvC,YAAY;EACV,GAJgB,uBAAuB,cAAc,MAAM,CAI5C;EACf,IAAI,UACF,oBAAC,MAAD;GACE,gBAAgB,MAAM,MAAM,WAAW,OAAO;GAC9C,YAAY;GACJ;GACR,OAAM;GACN,GAAI;GACJ,OAAM;GACN;EAEJ,GAAG;EACJ,EACF,CAAC,EAEuB"}
1
+ {"version":3,"file":"HTMLRender.mjs","names":[],"sources":["../../../../src/components/HTMLRender/HTMLRender.tsx"],"sourcesContent":["import type { LocalesValues } from '@intlayer/types/module_augmentation';\nimport type { ComponentProps, FC } from 'react';\nimport {\n type HTMLRenderer as HTMLRendererIntlayer,\n type RenderHTMLProps,\n renderHTML,\n} from 'react-intlayer/html';\nimport { H1, H2, H3, H4, H5, H6 } from '../Headers';\nimport { Link } from '../Link';\n\ntype HTMLRendererProps = {\n children: string;\n isDarkMode?: boolean;\n locale?: LocalesValues;\n components?: ComponentProps<typeof HTMLRendererIntlayer>['components'];\n};\n\nexport const getIntlayerHTMLOptions: (isDarkMode: boolean) => RenderHTMLProps =\n () => ({\n components: {\n h1: (props) => <H1 isClickable={true} {...props} />,\n h2: (props) => <H2 isClickable={true} className=\"mt-16\" {...props} />,\n h3: (props) => <H3 isClickable={true} className=\"mt-5\" {...props} />,\n h4: (props) => <H4 isClickable={true} className=\"mt-3\" {...props} />,\n h5: (props) => <H5 isClickable={true} className=\"mt-3\" {...props} />,\n h6: (props) => <H6 isClickable={true} className=\"mt-3\" {...props} />,\n a: (props) => (\n <Link\n isExternalLink={props.href?.startsWith('http')}\n underlined={true}\n label=\"\"\n {...props}\n color=\"neutral\"\n />\n ),\n },\n });\n\n/**\n * HTMLRenderer Component\n *\n * A comprehensive HTML renderer that transforms HTML text into rich,\n * interactive content with custom styling and Intlayer integration.\n */\nexport const HTMLRenderer: FC<HTMLRendererProps> = ({\n children,\n isDarkMode,\n locale,\n components: componentsProp,\n}) => {\n const htmlOptions = getIntlayerHTMLOptions(isDarkMode ?? false);\n\n const htmlContent = renderHTML(children, {\n components: {\n ...htmlOptions.components,\n a: (props) => (\n <Link\n isExternalLink={props.href?.startsWith('http')}\n underlined={true}\n locale={locale}\n label=\"\"\n {...props}\n color=\"neutral\"\n />\n ),\n ...componentsProp,\n },\n });\n\n return <>{htmlContent}</>;\n};\n"],"mappings":";;;;;;AAiBA,MAAa,gCACJ,EACL,YAAY;CACV,KAAK,UAAU,oBAAC,IAAD;EAAI,aAAa;EAAM,GAAI;EAAS;CACnD,KAAK,UAAU,oBAAC,IAAD;EAAI,aAAa;EAAM,WAAU;EAAQ,GAAI;EAAS;CACrE,KAAK,UAAU,oBAAC,IAAD;EAAI,aAAa;EAAM,WAAU;EAAO,GAAI;EAAS;CACpE,KAAK,UAAU,oBAAC,IAAD;EAAI,aAAa;EAAM,WAAU;EAAO,GAAI;EAAS;CACpE,KAAK,UAAU,oBAAC,IAAD;EAAI,aAAa;EAAM,WAAU;EAAO,GAAI;EAAS;CACpE,KAAK,UAAU,oBAAC,IAAD;EAAI,aAAa;EAAM,WAAU;EAAO,GAAI;EAAS;CACpE,IAAI,UACF,oBAAC,MAAD;EACE,gBAAgB,MAAM,MAAM,WAAW,OAAO;EAC9C,YAAY;EACZ,OAAM;EACN,GAAI;EACJ,OAAM;EACN;CAEL,EACF;;;;;;;AAQH,MAAa,gBAAuC,EAClD,UACA,YACA,QACA,YAAY,qBACR;AAoBJ,QAAO,0CAjBa,WAAW,UAAU,EACvC,YAAY;EACV,GAJgB,uBAAuB,cAAc,MAIvC,CAAC;EACf,IAAI,UACF,oBAAC,MAAD;GACE,gBAAgB,MAAM,MAAM,WAAW,OAAO;GAC9C,YAAY;GACJ;GACR,OAAM;GACN,GAAI;GACJ,OAAM;GACN;EAEJ,GAAG;EACJ,EACF,CAEoB,EAAI"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/Headers/index.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { FC, HTMLAttributes, JSX, MouseEvent } from 'react';\n\nconst styledHeading = `relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8`;\nconst styledAfter = `after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:absolute after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100`;\n\n/**\n * Styled H1 Component\n *\n * Primary heading component for page titles and main content headers.\n * Does not include clickable anchor functionality.\n */\nconst StyledH1: FC<HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => <h1 className={cn('font-bold text-2xl', className)} {...props} />;\n\n/**\n * Styled H2 Component\n *\n * Secondary heading component with anchor link functionality when wrapped.\n * Used for major section headers in content.\n */\nconst StyledH2: FC<HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h2\n className={cn('mb-2 font-bold text-2xl', styledHeading, className)}\n {...props}\n />\n);\n\n/**\n * Styled H3 Component\n *\n * Tertiary heading component with anchor link functionality when wrapped.\n * Used for subsection headers in content.\n */\nconst StyledH3: FC<HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h3\n className={cn('mb-2 font-bold text-xl', styledHeading, className)}\n {...props}\n />\n);\n\n/**\n * Styled H4 Component\n *\n * Quaternary heading component with anchor link functionality when wrapped.\n * Used for minor section headers in content.\n */\nconst StyledH4: FC<HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h4\n className={cn('font-bold text-lg', styledHeading, className)}\n {...props}\n />\n);\n\n/**\n * Styled H5 Component\n *\n * Fifth-level heading component with anchor link functionality when wrapped.\n * Used for detailed subsection headers in content.\n */\nconst StyledH5: FC<HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h5\n className={cn('font-bold text-base', styledHeading, className)}\n {...props}\n />\n);\n\nconst StyledH6: FC<HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h6\n className={cn('ml-3 font-bold text-base', styledHeading, className)}\n {...props}\n />\n);\n\n/**\n * Props for heading components\n */\nexport type HeadingProps = HTMLAttributes<HTMLHeadingElement> & {\n /**\n * Whether the heading should be clickable with anchor link functionality.\n * Enables copy-to-clipboard URL behavior and smooth scrolling.\n * @default false (for H1), true (for H2-H5)\n */\n isClickable?: boolean;\n};\n\n/**\n * Internal props for the HeadingWrapper component\n */\ninterface HeadingGlobalProps extends HeadingProps {\n /** The styled heading component to render */\n H: FC<HTMLAttributes<HTMLHeadingElement>>;\n}\n\ntype HeadingType = (props: HeadingGlobalProps) => JSX.Element;\n\n/**\n * Utility function to generate URL-friendly ID from heading text\n * @param children - The heading text content\n * @returns URL-friendly string for use as element ID\n */\nconst getId = (children: string) =>\n String(children)\n // replace accents\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n // replace spaces\n .replace(/\\s+/g, '-')\n .toLowerCase();\n\n/**\n * Utility function to smoothly scroll to an element by ID\n * @param id - The element ID to scroll to\n */\nconst scrollToHash = (id: string) => {\n const element = document.getElementById(id);\n const offset = 150;\n const y =\n (element?.getBoundingClientRect()?.top ?? 0) + window.scrollY - offset;\n\n window.scrollTo({ top: y, behavior: 'smooth' });\n};\n\n/**\n * Utility function to detect if the pseudo-element (#) after the heading was clicked\n * @param parentElem - The heading element\n * @param e - Mouse event\n * @returns Whether the after pseudo-element was clicked\n */\nconst afterClick = (parentElem: Element, e: MouseEvent<HTMLHeadingElement>) => {\n const parentLeft = parentElem.getBoundingClientRect().left;\n const parentTop = parentElem.getBoundingClientRect().top;\n\n const after = window.getComputedStyle(parentElem, ':after');\n\n const afterStart = parentLeft + parseInt(after.getPropertyValue('left'), 10);\n const afterEnd = afterStart + parseInt(after.width, 10);\n\n const afterYStart = parentTop + parseInt(after.getPropertyValue('top'), 10);\n const afterYEnd = afterYStart + parseInt(after.height, 10);\n\n const mouseX = e.clientX;\n const mouseY = e.clientY;\n\n const isAfterClicked: boolean =\n mouseX >= afterStart &&\n mouseX <= afterEnd &&\n mouseY >= afterYStart &&\n mouseY <= afterYEnd;\n\n return isAfterClicked;\n};\n\n/**\n * HeadingWrapper Component\n *\n * Internal wrapper component that adds anchor link functionality to headings.\n * Handles ID generation, click-to-copy URL behavior, and smooth scrolling.\n *\n * @component\n * @accessibility\n * - Generates URL-friendly IDs for deep linking\n * - Provides accessible labels for anchor link functionality\n * - Maintains proper heading hierarchy and semantics\n * - Supports keyboard navigation and screen readers\n */\nconst HeadingWrapper: HeadingType = ({\n H,\n children,\n className,\n isClickable,\n ...props\n}) => {\n const id = typeof children === 'string' ? getId(children) : undefined;\n\n const onClick = (e: MouseEvent<HTMLHeadingElement>) => {\n const { id } = e.currentTarget;\n\n const isAfterClicker = afterClick(e.currentTarget, e);\n\n if (isAfterClicker && typeof id === 'string') {\n const urlWithoutHash = window.location.href.split('#')[0];\n const url = `${urlWithoutHash}#${id}`;\n\n // copy the url to the clipboard\n navigator.clipboard.writeText(url);\n\n scrollToHash(id);\n }\n };\n\n return (\n <H\n id={id}\n onClick={isClickable ? onClick : undefined}\n aria-label={\n isClickable\n ? `Click to scroll to section ${id} and copy the link to the clipboard`\n : undefined\n }\n className={cn(isClickable && styledAfter, className)}\n {...props}\n >\n {children}\n </H>\n );\n};\n\n/**\n * H1 Component\n *\n * Primary page heading component. Does not include clickable anchor functionality\n * as it's typically used for main page titles rather than content sections.\n *\n * @example\n * ```tsx\n * <H1>Welcome to Our Website</H1>\n * <H1 className=\"text-blue-600\">Custom Styled Title</H1>\n * ```\n */\nexport const H1: FC<HeadingProps> = ({ isClickable: _, ...props }) => (\n <StyledH1 {...props} />\n);\n\n/**\n * H2 Component\n *\n * Secondary heading component with optional anchor link functionality.\n * Perfect for major section headers with deep-linking capabilities.\n *\n * @example\n * ```tsx\n * <H2>Getting Started</H2>\n * <H2 isClickable>API Reference</H2>\n * ```\n */\nexport const H2: FC<HeadingProps> = ({ isClickable = false, ...props }) => (\n <HeadingWrapper H={StyledH2} isClickable={isClickable} {...props} />\n);\n\n/**\n * H3 Component\n *\n * Tertiary heading component with optional anchor link functionality.\n * Used for subsection headers within major sections.\n *\n * @example\n * ```tsx\n * <H3>Configuration Options</H3>\n * <H3 isClickable>Advanced Settings</H3>\n * ```\n */\nexport const H3: FC<HeadingProps> = ({ isClickable = false, ...props }) => (\n <HeadingWrapper H={StyledH3} isClickable={isClickable} {...props} />\n);\n\n/**\n * H4 Component\n *\n * Fourth-level heading component with optional anchor link functionality.\n * Used for detailed section organization.\n *\n * @example\n * ```tsx\n * <H4>Implementation Details</H4>\n * <H4 isClickable>Code Examples</H4>\n * ```\n */\nexport const H4: FC<HeadingProps> = ({ isClickable = false, ...props }) => (\n <HeadingWrapper H={StyledH4} isClickable={isClickable} {...props} />\n);\n\n/**\n * H5 Component\n *\n * Fifth-level heading component with optional anchor link functionality.\n * Used for fine-grained content organization.\n *\n * @example\n * ```tsx\n * <H5>Technical Notes</H5>\n * <H5 isClickable>Best Practices</H5>\n * ```\n */\nexport const H5: FC<HeadingProps> = ({ isClickable = false, ...props }) => (\n <HeadingWrapper H={StyledH5} isClickable={isClickable} {...props} />\n);\n\nexport const H6: FC<HeadingProps> = ({ isClickable = false, ...props }) => (\n <HeadingWrapper H={StyledH6} isClickable={isClickable} {...props} />\n);\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/Headers/index.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { FC, HTMLAttributes, JSX, MouseEvent } from 'react';\n\nconst styledHeading = `relative scroll-mb-8 scroll-mt-[30vh] scroll-p-8`;\nconst styledAfter = `after:content-['#'] after:scale-75 after:px-6 after:text-neutral after:absolute after:top-0 after:h-full after:-left-12 after:absolute after:to-neutral after:md:opacity-0 after:transition-opacity hover:after:opacity-80 after:duration-200 after:delay-100`;\n\n/**\n * Styled H1 Component\n *\n * Primary heading component for page titles and main content headers.\n * Does not include clickable anchor functionality.\n */\nconst StyledH1: FC<HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => <h1 className={cn('font-bold text-2xl', className)} {...props} />;\n\n/**\n * Styled H2 Component\n *\n * Secondary heading component with anchor link functionality when wrapped.\n * Used for major section headers in content.\n */\nconst StyledH2: FC<HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h2\n className={cn('mb-2 font-bold text-2xl', styledHeading, className)}\n {...props}\n />\n);\n\n/**\n * Styled H3 Component\n *\n * Tertiary heading component with anchor link functionality when wrapped.\n * Used for subsection headers in content.\n */\nconst StyledH3: FC<HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h3\n className={cn('mb-2 font-bold text-xl', styledHeading, className)}\n {...props}\n />\n);\n\n/**\n * Styled H4 Component\n *\n * Quaternary heading component with anchor link functionality when wrapped.\n * Used for minor section headers in content.\n */\nconst StyledH4: FC<HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h4\n className={cn('font-bold text-lg', styledHeading, className)}\n {...props}\n />\n);\n\n/**\n * Styled H5 Component\n *\n * Fifth-level heading component with anchor link functionality when wrapped.\n * Used for detailed subsection headers in content.\n */\nconst StyledH5: FC<HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h5\n className={cn('font-bold text-base', styledHeading, className)}\n {...props}\n />\n);\n\nconst StyledH6: FC<HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h6\n className={cn('ml-3 font-bold text-base', styledHeading, className)}\n {...props}\n />\n);\n\n/**\n * Props for heading components\n */\nexport type HeadingProps = HTMLAttributes<HTMLHeadingElement> & {\n /**\n * Whether the heading should be clickable with anchor link functionality.\n * Enables copy-to-clipboard URL behavior and smooth scrolling.\n * @default false (for H1), true (for H2-H5)\n */\n isClickable?: boolean;\n};\n\n/**\n * Internal props for the HeadingWrapper component\n */\ninterface HeadingGlobalProps extends HeadingProps {\n /** The styled heading component to render */\n H: FC<HTMLAttributes<HTMLHeadingElement>>;\n}\n\ntype HeadingType = (props: HeadingGlobalProps) => JSX.Element;\n\n/**\n * Utility function to generate URL-friendly ID from heading text\n * @param children - The heading text content\n * @returns URL-friendly string for use as element ID\n */\nconst getId = (children: string) =>\n String(children)\n // replace accents\n .normalize('NFD')\n .replace(/[\\u0300-\\u036f]/g, '')\n // replace spaces\n .replace(/\\s+/g, '-')\n .toLowerCase();\n\n/**\n * Utility function to smoothly scroll to an element by ID\n * @param id - The element ID to scroll to\n */\nconst scrollToHash = (id: string) => {\n const element = document.getElementById(id);\n const offset = 150;\n const y =\n (element?.getBoundingClientRect()?.top ?? 0) + window.scrollY - offset;\n\n window.scrollTo({ top: y, behavior: 'smooth' });\n};\n\n/**\n * Utility function to detect if the pseudo-element (#) after the heading was clicked\n * @param parentElem - The heading element\n * @param e - Mouse event\n * @returns Whether the after pseudo-element was clicked\n */\nconst afterClick = (parentElem: Element, e: MouseEvent<HTMLHeadingElement>) => {\n const parentLeft = parentElem.getBoundingClientRect().left;\n const parentTop = parentElem.getBoundingClientRect().top;\n\n const after = window.getComputedStyle(parentElem, ':after');\n\n const afterStart = parentLeft + parseInt(after.getPropertyValue('left'), 10);\n const afterEnd = afterStart + parseInt(after.width, 10);\n\n const afterYStart = parentTop + parseInt(after.getPropertyValue('top'), 10);\n const afterYEnd = afterYStart + parseInt(after.height, 10);\n\n const mouseX = e.clientX;\n const mouseY = e.clientY;\n\n const isAfterClicked: boolean =\n mouseX >= afterStart &&\n mouseX <= afterEnd &&\n mouseY >= afterYStart &&\n mouseY <= afterYEnd;\n\n return isAfterClicked;\n};\n\n/**\n * HeadingWrapper Component\n *\n * Internal wrapper component that adds anchor link functionality to headings.\n * Handles ID generation, click-to-copy URL behavior, and smooth scrolling.\n *\n * @component\n * @accessibility\n * - Generates URL-friendly IDs for deep linking\n * - Provides accessible labels for anchor link functionality\n * - Maintains proper heading hierarchy and semantics\n * - Supports keyboard navigation and screen readers\n */\nconst HeadingWrapper: HeadingType = ({\n H,\n children,\n className,\n isClickable,\n ...props\n}) => {\n const id = typeof children === 'string' ? getId(children) : undefined;\n\n const onClick = (e: MouseEvent<HTMLHeadingElement>) => {\n const { id } = e.currentTarget;\n\n const isAfterClicker = afterClick(e.currentTarget, e);\n\n if (isAfterClicker && typeof id === 'string') {\n const urlWithoutHash = window.location.href.split('#')[0];\n const url = `${urlWithoutHash}#${id}`;\n\n // copy the url to the clipboard\n navigator.clipboard.writeText(url);\n\n scrollToHash(id);\n }\n };\n\n return (\n <H\n id={id}\n onClick={isClickable ? onClick : undefined}\n aria-label={\n isClickable\n ? `Click to scroll to section ${id} and copy the link to the clipboard`\n : undefined\n }\n className={cn(isClickable && styledAfter, className)}\n {...props}\n >\n {children}\n </H>\n );\n};\n\n/**\n * H1 Component\n *\n * Primary page heading component. Does not include clickable anchor functionality\n * as it's typically used for main page titles rather than content sections.\n *\n * @example\n * ```tsx\n * <H1>Welcome to Our Website</H1>\n * <H1 className=\"text-blue-600\">Custom Styled Title</H1>\n * ```\n */\nexport const H1: FC<HeadingProps> = ({ isClickable: _, ...props }) => (\n <StyledH1 {...props} />\n);\n\n/**\n * H2 Component\n *\n * Secondary heading component with optional anchor link functionality.\n * Perfect for major section headers with deep-linking capabilities.\n *\n * @example\n * ```tsx\n * <H2>Getting Started</H2>\n * <H2 isClickable>API Reference</H2>\n * ```\n */\nexport const H2: FC<HeadingProps> = ({ isClickable = false, ...props }) => (\n <HeadingWrapper H={StyledH2} isClickable={isClickable} {...props} />\n);\n\n/**\n * H3 Component\n *\n * Tertiary heading component with optional anchor link functionality.\n * Used for subsection headers within major sections.\n *\n * @example\n * ```tsx\n * <H3>Configuration Options</H3>\n * <H3 isClickable>Advanced Settings</H3>\n * ```\n */\nexport const H3: FC<HeadingProps> = ({ isClickable = false, ...props }) => (\n <HeadingWrapper H={StyledH3} isClickable={isClickable} {...props} />\n);\n\n/**\n * H4 Component\n *\n * Fourth-level heading component with optional anchor link functionality.\n * Used for detailed section organization.\n *\n * @example\n * ```tsx\n * <H4>Implementation Details</H4>\n * <H4 isClickable>Code Examples</H4>\n * ```\n */\nexport const H4: FC<HeadingProps> = ({ isClickable = false, ...props }) => (\n <HeadingWrapper H={StyledH4} isClickable={isClickable} {...props} />\n);\n\n/**\n * H5 Component\n *\n * Fifth-level heading component with optional anchor link functionality.\n * Used for fine-grained content organization.\n *\n * @example\n * ```tsx\n * <H5>Technical Notes</H5>\n * <H5 isClickable>Best Practices</H5>\n * ```\n */\nexport const H5: FC<HeadingProps> = ({ isClickable = false, ...props }) => (\n <HeadingWrapper H={StyledH5} isClickable={isClickable} {...props} />\n);\n\nexport const H6: FC<HeadingProps> = ({ isClickable = false, ...props }) => (\n <HeadingWrapper H={StyledH6} isClickable={isClickable} {...props} />\n);\n"],"mappings":"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"}
@@ -5,6 +5,7 @@ import { useCallback, useEffect, useRef, useState } from "react";
5
5
  import { jsx } from "react/jsx-runtime";
6
6
 
7
7
  //#region src/components/HeightResizer/index.tsx
8
+ const HANDLE_DOUBLE_CLICK_ZONE_PX = 16;
8
9
  /**
9
10
  * HeightResizer Component
10
11
  *
@@ -77,6 +78,7 @@ const HeightResizer = ({ initialHeight, maxHeight, minHeight = 0, children, clas
77
78
  const containerRef = useRef(null);
78
79
  const [height, setHeight] = useState(initialHeight);
79
80
  const [isResizing, setIsResizing] = useState(false);
81
+ const lastExpandedHeightRef = useRef(initialHeight);
80
82
  /**
81
83
  * Handler to initiate the resizing process
82
84
  * Prevents default browser behavior and sets the resizing state
@@ -133,6 +135,27 @@ const HeightResizer = ({ initialHeight, maxHeight, minHeight = 0, children, clas
133
135
  window.removeEventListener("touchend", stopResizing);
134
136
  };
135
137
  }, [resize, stopResizing]);
138
+ useEffect(() => {
139
+ if (height > minHeight) lastExpandedHeightRef.current = height;
140
+ }, [height, minHeight]);
141
+ const handleDoubleClick = useCallback((event) => {
142
+ const el = containerRef.current;
143
+ if (!el) return;
144
+ const { top } = el.getBoundingClientRect();
145
+ if (event.clientY - top > HANDLE_DOUBLE_CLICK_ZONE_PX) return;
146
+ event.preventDefault();
147
+ event.stopPropagation();
148
+ if (height > minHeight) {
149
+ setHeight(minHeight);
150
+ return;
151
+ }
152
+ const capped = maxHeight !== void 0 ? Math.min(lastExpandedHeightRef.current, maxHeight) : lastExpandedHeightRef.current;
153
+ setHeight(Math.max(capped, minHeight));
154
+ }, [
155
+ height,
156
+ maxHeight,
157
+ minHeight
158
+ ]);
136
159
  return /* @__PURE__ */ jsx("div", {
137
160
  className: cn("relative h-full max-h-[80%] w-full cursor-ns-resize border-neutral-200 border-t-[2px] transition dark:border-neutral-950", "before:absolute before:top-0 before:left-1/2 before:z-10 before:block before:h-2 before:w-10 before:-translate-x-1/2 before:-translate-y-1/2 before:transform before:cursor-ns-resize before:rounded-full before:bg-neutral-200 before:transition before:content-[\"\"] dark:before:bg-neutral-950", "active:border-neutral-400 active:before:bg-neutral-400 dark:active:border-neutral-600 active:dark:before:bg-neutral-600", className),
138
161
  style: {
@@ -143,6 +166,7 @@ const HeightResizer = ({ initialHeight, maxHeight, minHeight = 0, children, clas
143
166
  ref: containerRef,
144
167
  onMouseDown: startResizing,
145
168
  onTouchStart: startResizing,
169
+ onDoubleClick: handleDoubleClick,
146
170
  "aria-valuemin": minHeight,
147
171
  "aria-valuemax": maxHeight,
148
172
  "aria-valuenow": height,
@@ -151,6 +175,7 @@ const HeightResizer = ({ initialHeight, maxHeight, minHeight = 0, children, clas
151
175
  tabIndex: 0,
152
176
  ...props,
153
177
  children: /* @__PURE__ */ jsx("div", {
178
+ role: "presentation",
154
179
  className: "absolute top-0 left-0 size-full cursor-default overflow-hidden",
155
180
  onMouseDown: (e) => e.stopPropagation(),
156
181
  onTouchStart: (e) => e.stopPropagation(),
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/HeightResizer/index.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport type React from 'react';\nimport {\n type DetailedHTMLProps,\n type FC,\n type HTMLAttributes,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\n/**\n * Props for the HeightResizer component\n *\n * @interface HeightResizerProps\n */\ntype HeightResizerProps = {\n /**\n * Initial height in pixels for the resizable container\n * Sets the default size when the component first loads\n * @example 200\n */\n initialHeight: number;\n\n /**\n * Maximum height in pixels that the user can resize to (optional)\n * When undefined, no maximum limit is enforced\n * @example 500\n */\n maxHeight?: number;\n\n /**\n * Minimum height in pixels that the user can resize to (optional)\n * Prevents the container from being resized below this threshold\n * @default 0\n * @example 50\n */\n minHeight?: number;\n} & DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;\n\n/**\n * HeightResizer Component\n *\n * A resizable container component that allows users to dynamically adjust the height\n * by dragging a visual handle at the top. Provides smooth resizing with optional\n * minimum and maximum height constraints.\n *\n * ## Key Features\n * - **Interactive Resizing**: Drag handle to resize container vertically\n * - **Touch Support**: Full support for touch devices and mobile interactions\n * - **Height Constraints**: Optional minimum and maximum height limits\n * - **Visual Feedback**: Handle with hover and active states for clear interaction\n * - **Accessibility**: ARIA slider role with value announcements for screen readers\n * - **Smooth Animation**: CSS transitions for polished user experience\n *\n * ## Use Cases\n * - Code editors with resizable panels\n * - Chat interfaces with adjustable message areas\n * - Dashboard widgets with user-customizable sizes\n * - Documentation viewers with resizable content panes\n * - Settings panels with expandable sections\n *\n * ## Interaction Model\n * The component uses a drag interaction model where users click and drag the visual\n * handle (rounded bar) at the top of the container. The resize calculation is based\n * on the difference between the current cursor position and the container's top edge.\n *\n * ## Accessibility Features\n * - **ARIA Slider**: Proper slider role for assistive technologies\n * - **Value Announcements**: Current, min, and max values announced to screen readers\n * - **Keyboard Navigation**: Focusable with standard slider keyboard support\n * - **Visual Indicators**: Clear visual handle for drag interaction\n *\n * @component\n * @example\n * ```tsx\n * // Basic usage\n * <HeightResizer initialHeight={200}>\n * <div>Your resizable content here</div>\n * </HeightResizer>\n *\n * // With height constraints\n * <HeightResizer\n * initialHeight={300}\n * minHeight={100}\n * maxHeight={600}\n * >\n * <div>Content with size limits</div>\n * </HeightResizer>\n *\n * // In a code editor context\n * <HeightResizer\n * initialHeight={400}\n * minHeight={150}\n * className=\"border rounded-lg\"\n * >\n * <CodeEditor />\n * </HeightResizer>\n * ```\n *\n * @param props - HeightResizer component props\n * @param props.initialHeight - Starting height in pixels\n * @param props.minHeight - Optional minimum height constraint\n * @param props.maxHeight - Optional maximum height constraint\n * @param props.children - Content to display in the resizable container\n * @param props.className - Additional CSS classes for styling\n * @returns Interactive resizable container component\n */\nexport const HeightResizer: FC<PropsWithChildren<HeightResizerProps>> = ({\n initialHeight,\n maxHeight,\n minHeight = 0,\n children,\n className,\n ...props\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState(initialHeight);\n const [isResizing, setIsResizing] = useState(false);\n\n /**\n * Handler to initiate the resizing process\n * Prevents default browser behavior and sets the resizing state\n *\n * @param mouseDownEvent - Mouse or touch event from the drag handle\n */\n const startResizing = useCallback(\n (\n mouseDownEvent:\n | React.MouseEvent<HTMLDivElement>\n | React.TouchEvent<HTMLDivElement>\n ) => {\n setIsResizing(true);\n mouseDownEvent.preventDefault();\n },\n []\n );\n\n /**\n * Handler to stop the resizing process\n * Resets the resizing state when user releases the drag handle\n */\n const stopResizing = useCallback(() => {\n setIsResizing(false);\n }, []);\n\n /**\n * Core resize logic that calculates new height based on cursor position\n * Handles both mouse and touch events with boundary checking\n *\n * @param mouseMoveEvent - Mouse or touch move event during drag\n */\n const resize = useCallback(\n (mouseMoveEvent: MouseEvent | TouchEvent) => {\n const container = containerRef.current;\n if (isResizing && container) {\n const { height: containerHeight, top: containerTop } =\n container.getBoundingClientRect();\n\n let clientY = 0;\n if (mouseMoveEvent instanceof MouseEvent) {\n clientY = mouseMoveEvent.clientY;\n } else if (mouseMoveEvent instanceof TouchEvent) {\n clientY = mouseMoveEvent.touches[0].clientY;\n }\n\n const resizeDifference = clientY - containerTop;\n const newHeight = containerHeight - resizeDifference;\n\n // Apply height constraints\n let correctedHeight = Math.max(newHeight, minHeight);\n if (maxHeight !== undefined) {\n correctedHeight = Math.min(correctedHeight, maxHeight);\n }\n\n setHeight(correctedHeight);\n }\n },\n [isResizing, minHeight, maxHeight]\n );\n\n /**\n * Effect to manage global event listeners for resize interactions\n * Handles both mouse and touch events with proper cleanup\n */\n useEffect(() => {\n window.addEventListener('mousemove', resize, { passive: true });\n window.addEventListener('mouseup', stopResizing);\n window.addEventListener('touchmove', resize, { passive: true });\n window.addEventListener('touchend', stopResizing);\n\n return () => {\n window.removeEventListener('mousemove', resize);\n window.removeEventListener('mouseup', stopResizing);\n window.removeEventListener('touchmove', resize);\n window.removeEventListener('touchend', stopResizing);\n };\n }, [resize, stopResizing]);\n\n return (\n <div\n className={cn(\n 'relative h-full max-h-[80%] w-full cursor-ns-resize border-neutral-200 border-t-[2px] transition dark:border-neutral-950',\n 'before:absolute before:top-0 before:left-1/2 before:z-10 before:block before:h-2 before:w-10 before:-translate-x-1/2 before:-translate-y-1/2 before:transform before:cursor-ns-resize before:rounded-full before:bg-neutral-200 before:transition before:content-[\"\"] dark:before:bg-neutral-950',\n 'active:border-neutral-400 active:before:bg-neutral-400 dark:active:border-neutral-600 active:dark:before:bg-neutral-600',\n className\n )}\n style={{\n height: `${height}px`,\n maxHeight: maxHeight ? `${maxHeight}px` : undefined,\n minHeight: `${minHeight}px`,\n }}\n ref={containerRef}\n onMouseDown={startResizing}\n onTouchStart={startResizing}\n aria-valuemin={minHeight}\n aria-valuemax={maxHeight}\n aria-valuenow={height}\n aria-label=\"Resizable component - drag the handle to adjust height\"\n role=\"slider\"\n tabIndex={0}\n {...props}\n >\n <div\n className=\"absolute top-0 left-0 size-full cursor-default overflow-hidden\"\n onMouseDown={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgHA,MAAa,iBAA4D,EACvE,eACA,WACA,YAAY,GACZ,UACA,WACA,GAAG,YACC;CACJ,MAAM,eAAe,OAAuB,KAAK;CACjD,MAAM,CAAC,QAAQ,aAAa,SAAS,cAAc;CACnD,MAAM,CAAC,YAAY,iBAAiB,SAAS,MAAM;;;;;;;CAQnD,MAAM,gBAAgB,aAElB,mBAGG;AACH,gBAAc,KAAK;AACnB,iBAAe,gBAAgB;IAEjC,EAAE,CACH;;;;;CAMD,MAAM,eAAe,kBAAkB;AACrC,gBAAc,MAAM;IACnB,EAAE,CAAC;;;;;;;CAQN,MAAM,SAAS,aACZ,mBAA4C;EAC3C,MAAM,YAAY,aAAa;AAC/B,MAAI,cAAc,WAAW;GAC3B,MAAM,EAAE,QAAQ,iBAAiB,KAAK,iBACpC,UAAU,uBAAuB;GAEnC,IAAI,UAAU;AACd,OAAI,0BAA0B,WAC5B,WAAU,eAAe;YAChB,0BAA0B,WACnC,WAAU,eAAe,QAAQ,GAAG;GAItC,MAAM,YAAY,mBADO,UAAU;GAInC,IAAI,kBAAkB,KAAK,IAAI,WAAW,UAAU;AACpD,OAAI,cAAc,OAChB,mBAAkB,KAAK,IAAI,iBAAiB,UAAU;AAGxD,aAAU,gBAAgB;;IAG9B;EAAC;EAAY;EAAW;EAAU,CACnC;;;;;AAMD,iBAAgB;AACd,SAAO,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM,CAAC;AAC/D,SAAO,iBAAiB,WAAW,aAAa;AAChD,SAAO,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM,CAAC;AAC/D,SAAO,iBAAiB,YAAY,aAAa;AAEjD,eAAa;AACX,UAAO,oBAAoB,aAAa,OAAO;AAC/C,UAAO,oBAAoB,WAAW,aAAa;AACnD,UAAO,oBAAoB,aAAa,OAAO;AAC/C,UAAO,oBAAoB,YAAY,aAAa;;IAErD,CAAC,QAAQ,aAAa,CAAC;AAE1B,QACE,oBAAC,OAAD;EACE,WAAW,GACT,4HACA,sSACA,2HACA,UACD;EACD,OAAO;GACL,QAAQ,GAAG,OAAO;GAClB,WAAW,YAAY,GAAG,UAAU,MAAM;GAC1C,WAAW,GAAG,UAAU;GACzB;EACD,KAAK;EACL,aAAa;EACb,cAAc;EACd,iBAAe;EACf,iBAAe;EACf,iBAAe;EACf,cAAW;EACX,MAAK;EACL,UAAU;EACV,GAAI;YAEJ,oBAAC,OAAD;GACE,WAAU;GACV,cAAc,MAAM,EAAE,iBAAiB;GACvC,eAAe,MAAM,EAAE,iBAAiB;GAEvC;GACG;EACF"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/HeightResizer/index.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport type React from 'react';\nimport {\n type DetailedHTMLProps,\n type FC,\n type HTMLAttributes,\n type PropsWithChildren,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\nconst HANDLE_DOUBLE_CLICK_ZONE_PX = 16;\n\n/**\n * Props for the HeightResizer component\n *\n * @interface HeightResizerProps\n */\ntype HeightResizerProps = {\n /**\n * Initial height in pixels for the resizable container\n * Sets the default size when the component first loads\n * @example 200\n */\n initialHeight: number;\n\n /**\n * Maximum height in pixels that the user can resize to (optional)\n * When undefined, no maximum limit is enforced\n * @example 500\n */\n maxHeight?: number;\n\n /**\n * Minimum height in pixels that the user can resize to (optional)\n * Prevents the container from being resized below this threshold\n * @default 0\n * @example 50\n */\n minHeight?: number;\n} & DetailedHTMLProps<HTMLAttributes<HTMLDivElement>, HTMLDivElement>;\n\n/**\n * HeightResizer Component\n *\n * A resizable container component that allows users to dynamically adjust the height\n * by dragging a visual handle at the top. Provides smooth resizing with optional\n * minimum and maximum height constraints.\n *\n * ## Key Features\n * - **Interactive Resizing**: Drag handle to resize container vertically\n * - **Touch Support**: Full support for touch devices and mobile interactions\n * - **Height Constraints**: Optional minimum and maximum height limits\n * - **Visual Feedback**: Handle with hover and active states for clear interaction\n * - **Accessibility**: ARIA slider role with value announcements for screen readers\n * - **Smooth Animation**: CSS transitions for polished user experience\n *\n * ## Use Cases\n * - Code editors with resizable panels\n * - Chat interfaces with adjustable message areas\n * - Dashboard widgets with user-customizable sizes\n * - Documentation viewers with resizable content panes\n * - Settings panels with expandable sections\n *\n * ## Interaction Model\n * The component uses a drag interaction model where users click and drag the visual\n * handle (rounded bar) at the top of the container. The resize calculation is based\n * on the difference between the current cursor position and the container's top edge.\n *\n * ## Accessibility Features\n * - **ARIA Slider**: Proper slider role for assistive technologies\n * - **Value Announcements**: Current, min, and max values announced to screen readers\n * - **Keyboard Navigation**: Focusable with standard slider keyboard support\n * - **Visual Indicators**: Clear visual handle for drag interaction\n *\n * @component\n * @example\n * ```tsx\n * // Basic usage\n * <HeightResizer initialHeight={200}>\n * <div>Your resizable content here</div>\n * </HeightResizer>\n *\n * // With height constraints\n * <HeightResizer\n * initialHeight={300}\n * minHeight={100}\n * maxHeight={600}\n * >\n * <div>Content with size limits</div>\n * </HeightResizer>\n *\n * // In a code editor context\n * <HeightResizer\n * initialHeight={400}\n * minHeight={150}\n * className=\"border rounded-lg\"\n * >\n * <CodeEditor />\n * </HeightResizer>\n * ```\n *\n * @param props - HeightResizer component props\n * @param props.initialHeight - Starting height in pixels\n * @param props.minHeight - Optional minimum height constraint\n * @param props.maxHeight - Optional maximum height constraint\n * @param props.children - Content to display in the resizable container\n * @param props.className - Additional CSS classes for styling\n * @returns Interactive resizable container component\n */\nexport const HeightResizer: FC<PropsWithChildren<HeightResizerProps>> = ({\n initialHeight,\n maxHeight,\n minHeight = 0,\n children,\n className,\n ...props\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState(initialHeight);\n const [isResizing, setIsResizing] = useState(false);\n const lastExpandedHeightRef = useRef(initialHeight);\n\n /**\n * Handler to initiate the resizing process\n * Prevents default browser behavior and sets the resizing state\n *\n * @param mouseDownEvent - Mouse or touch event from the drag handle\n */\n const startResizing = useCallback(\n (\n mouseDownEvent:\n | React.MouseEvent<HTMLDivElement>\n | React.TouchEvent<HTMLDivElement>\n ) => {\n setIsResizing(true);\n mouseDownEvent.preventDefault();\n },\n []\n );\n\n /**\n * Handler to stop the resizing process\n * Resets the resizing state when user releases the drag handle\n */\n const stopResizing = useCallback(() => {\n setIsResizing(false);\n }, []);\n\n /**\n * Core resize logic that calculates new height based on cursor position\n * Handles both mouse and touch events with boundary checking\n *\n * @param mouseMoveEvent - Mouse or touch move event during drag\n */\n const resize = useCallback(\n (mouseMoveEvent: MouseEvent | TouchEvent) => {\n const container = containerRef.current;\n if (isResizing && container) {\n const { height: containerHeight, top: containerTop } =\n container.getBoundingClientRect();\n\n let clientY = 0;\n if (mouseMoveEvent instanceof MouseEvent) {\n clientY = mouseMoveEvent.clientY;\n } else if (mouseMoveEvent instanceof TouchEvent) {\n clientY = mouseMoveEvent.touches[0].clientY;\n }\n\n const resizeDifference = clientY - containerTop;\n const newHeight = containerHeight - resizeDifference;\n\n // Apply height constraints\n let correctedHeight = Math.max(newHeight, minHeight);\n if (maxHeight !== undefined) {\n correctedHeight = Math.min(correctedHeight, maxHeight);\n }\n\n setHeight(correctedHeight);\n }\n },\n [isResizing, minHeight, maxHeight]\n );\n\n /**\n * Effect to manage global event listeners for resize interactions\n * Handles both mouse and touch events with proper cleanup\n */\n useEffect(() => {\n window.addEventListener('mousemove', resize, { passive: true });\n window.addEventListener('mouseup', stopResizing);\n window.addEventListener('touchmove', resize, { passive: true });\n window.addEventListener('touchend', stopResizing);\n\n return () => {\n window.removeEventListener('mousemove', resize);\n window.removeEventListener('mouseup', stopResizing);\n window.removeEventListener('touchmove', resize);\n window.removeEventListener('touchend', stopResizing);\n };\n }, [resize, stopResizing]);\n\n useEffect(() => {\n if (height > minHeight) {\n lastExpandedHeightRef.current = height;\n }\n }, [height, minHeight]);\n\n const handleDoubleClick = useCallback(\n (event: React.MouseEvent<HTMLDivElement>) => {\n const el = containerRef.current;\n if (!el) return;\n\n const { top } = el.getBoundingClientRect();\n if (event.clientY - top > HANDLE_DOUBLE_CLICK_ZONE_PX) return;\n\n event.preventDefault();\n event.stopPropagation();\n\n if (height > minHeight) {\n setHeight(minHeight);\n return;\n }\n\n const capped =\n maxHeight !== undefined\n ? Math.min(lastExpandedHeightRef.current, maxHeight)\n : lastExpandedHeightRef.current;\n setHeight(Math.max(capped, minHeight));\n },\n [height, maxHeight, minHeight]\n );\n\n return (\n <div\n className={cn(\n 'relative h-full max-h-[80%] w-full cursor-ns-resize border-neutral-200 border-t-[2px] transition dark:border-neutral-950',\n 'before:absolute before:top-0 before:left-1/2 before:z-10 before:block before:h-2 before:w-10 before:-translate-x-1/2 before:-translate-y-1/2 before:transform before:cursor-ns-resize before:rounded-full before:bg-neutral-200 before:transition before:content-[\"\"] dark:before:bg-neutral-950',\n 'active:border-neutral-400 active:before:bg-neutral-400 dark:active:border-neutral-600 active:dark:before:bg-neutral-600',\n className\n )}\n style={{\n height: `${height}px`,\n maxHeight: maxHeight ? `${maxHeight}px` : undefined,\n minHeight: `${minHeight}px`,\n }}\n ref={containerRef}\n onMouseDown={startResizing}\n onTouchStart={startResizing}\n onDoubleClick={handleDoubleClick}\n aria-valuemin={minHeight}\n aria-valuemax={maxHeight}\n aria-valuenow={height}\n aria-label=\"Resizable component - drag the handle to adjust height\"\n role=\"slider\"\n tabIndex={0}\n {...props}\n >\n {/* biome-ignore lint/a11y/noStaticElementInteractions: Stops content clicks from triggering resize on the parent slider */}\n <div\n role=\"presentation\"\n className=\"absolute top-0 left-0 size-full cursor-default overflow-hidden\"\n onMouseDown={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"mappings":";;;;;;;AAeA,MAAM,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmGpC,MAAa,iBAA4D,EACvE,eACA,WACA,YAAY,GACZ,UACA,WACA,GAAG,YACC;CACJ,MAAM,eAAe,OAAuB,KAAK;CACjD,MAAM,CAAC,QAAQ,aAAa,SAAS,cAAc;CACnD,MAAM,CAAC,YAAY,iBAAiB,SAAS,MAAM;CACnD,MAAM,wBAAwB,OAAO,cAAc;;;;;;;CAQnD,MAAM,gBAAgB,aAElB,mBAGG;AACH,gBAAc,KAAK;AACnB,iBAAe,gBAAgB;IAEjC,EAAE,CACH;;;;;CAMD,MAAM,eAAe,kBAAkB;AACrC,gBAAc,MAAM;IACnB,EAAE,CAAC;;;;;;;CAQN,MAAM,SAAS,aACZ,mBAA4C;EAC3C,MAAM,YAAY,aAAa;AAC/B,MAAI,cAAc,WAAW;GAC3B,MAAM,EAAE,QAAQ,iBAAiB,KAAK,iBACpC,UAAU,uBAAuB;GAEnC,IAAI,UAAU;AACd,OAAI,0BAA0B,WAC5B,WAAU,eAAe;YAChB,0BAA0B,WACnC,WAAU,eAAe,QAAQ,GAAG;GAItC,MAAM,YAAY,mBADO,UAAU;GAInC,IAAI,kBAAkB,KAAK,IAAI,WAAW,UAAU;AACpD,OAAI,cAAc,OAChB,mBAAkB,KAAK,IAAI,iBAAiB,UAAU;AAGxD,aAAU,gBAAgB;;IAG9B;EAAC;EAAY;EAAW;EAAU,CACnC;;;;;AAMD,iBAAgB;AACd,SAAO,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM,CAAC;AAC/D,SAAO,iBAAiB,WAAW,aAAa;AAChD,SAAO,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM,CAAC;AAC/D,SAAO,iBAAiB,YAAY,aAAa;AAEjD,eAAa;AACX,UAAO,oBAAoB,aAAa,OAAO;AAC/C,UAAO,oBAAoB,WAAW,aAAa;AACnD,UAAO,oBAAoB,aAAa,OAAO;AAC/C,UAAO,oBAAoB,YAAY,aAAa;;IAErD,CAAC,QAAQ,aAAa,CAAC;AAE1B,iBAAgB;AACd,MAAI,SAAS,UACX,uBAAsB,UAAU;IAEjC,CAAC,QAAQ,UAAU,CAAC;CAEvB,MAAM,oBAAoB,aACvB,UAA4C;EAC3C,MAAM,KAAK,aAAa;AACxB,MAAI,CAAC,GAAI;EAET,MAAM,EAAE,QAAQ,GAAG,uBAAuB;AAC1C,MAAI,MAAM,UAAU,MAAM,4BAA6B;AAEvD,QAAM,gBAAgB;AACtB,QAAM,iBAAiB;AAEvB,MAAI,SAAS,WAAW;AACtB,aAAU,UAAU;AACpB;;EAGF,MAAM,SACJ,cAAc,SACV,KAAK,IAAI,sBAAsB,SAAS,UAAU,GAClD,sBAAsB;AAC5B,YAAU,KAAK,IAAI,QAAQ,UAAU,CAAC;IAExC;EAAC;EAAQ;EAAW;EAAU,CAC/B;AAED,QACE,oBAAC,OAAD;EACE,WAAW,GACT,4HACA,sSACA,2HACA,UACD;EACD,OAAO;GACL,QAAQ,GAAG,OAAO;GAClB,WAAW,YAAY,GAAG,UAAU,MAAM;GAC1C,WAAW,GAAG,UAAU;GACzB;EACD,KAAK;EACL,aAAa;EACb,cAAc;EACd,eAAe;EACf,iBAAe;EACf,iBAAe;EACf,iBAAe;EACf,cAAW;EACX,MAAK;EACL,UAAU;EACV,GAAI;YAGJ,oBAAC,OAAD;GACE,MAAK;GACL,WAAU;GACV,cAAc,MAAM,EAAE,iBAAiB;GACvC,eAAe,MAAM,EAAE,iBAAiB;GAEvC;GACG;EACF"}