@intlayer/design-system 8.2.1 → 8.2.3

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 (186) hide show
  1. package/dist/esm/components/Accordion/Accordion.mjs.map +1 -1
  2. package/dist/esm/components/Avatar/index.mjs.map +1 -1
  3. package/dist/esm/components/Badge/index.mjs.map +1 -1
  4. package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
  5. package/dist/esm/components/Browser/Browser.mjs.map +1 -1
  6. package/dist/esm/components/Button/Button.mjs.map +1 -1
  7. package/dist/esm/components/Carousel/index.mjs.map +1 -1
  8. package/dist/esm/components/ClickOutsideDiv/index.mjs.map +1 -1
  9. package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs.map +1 -1
  10. package/dist/esm/components/Command/index.mjs.map +1 -1
  11. package/dist/esm/components/Container/index.mjs.map +1 -1
  12. package/dist/esm/components/ContentEditor/ContentEditor.mjs.map +1 -1
  13. package/dist/esm/components/ContentEditor/ContentEditorInput.mjs.map +1 -1
  14. package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs.map +1 -1
  15. package/dist/esm/components/ContentSelector/ContentSelector.mjs.map +1 -1
  16. package/dist/esm/components/CopyButton/index.mjs.map +1 -1
  17. package/dist/esm/components/CopyToClipboard/index.mjs.map +1 -1
  18. package/dist/esm/components/DictionaryEditor/DictionaryEditor.mjs.map +1 -1
  19. package/dist/esm/components/DictionaryEditor/ItemLayout.mjs.map +1 -1
  20. package/dist/esm/components/DictionaryEditor/NodeWrapper/ArrayWrapper.mjs.map +1 -1
  21. package/dist/esm/components/DictionaryEditor/NodeWrapper/ConditionWrapper.mjs.map +1 -1
  22. package/dist/esm/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.mjs.map +1 -1
  23. package/dist/esm/components/DictionaryEditor/NodeWrapper/FileWrapper.mjs.map +1 -1
  24. package/dist/esm/components/DictionaryEditor/NodeWrapper/HtmlWrapper.mjs.map +1 -1
  25. package/dist/esm/components/DictionaryEditor/NodeWrapper/InsertionWrapper.mjs.map +1 -1
  26. package/dist/esm/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.mjs.map +1 -1
  27. package/dist/esm/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.mjs.map +1 -1
  28. package/dist/esm/components/DictionaryEditor/NodeWrapper/StringWrapper.mjs.map +1 -1
  29. package/dist/esm/components/DictionaryEditor/NodeWrapper/TranslationWrapper.mjs.map +1 -1
  30. package/dist/esm/components/DictionaryEditor/NodeWrapper/index.mjs.map +1 -1
  31. package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs.map +1 -1
  32. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
  33. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs.map +1 -1
  34. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
  35. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
  36. package/dist/esm/components/DictionaryFieldEditor/EnumKeyInput.mjs.map +1 -1
  37. package/dist/esm/components/DictionaryFieldEditor/JSONEditor.mjs.map +1 -1
  38. package/dist/esm/components/DictionaryFieldEditor/KeyPathBreadcrumb.mjs.map +1 -1
  39. package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs.map +1 -1
  40. package/dist/esm/components/DictionaryFieldEditor/NodeTypeSelector.mjs.map +1 -1
  41. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
  42. package/dist/esm/components/DictionaryFieldEditor/StructureEditor.mjs.map +1 -1
  43. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
  44. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs.map +1 -1
  45. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.mjs.map +1 -1
  46. package/dist/esm/components/DropDown/index.mjs.map +1 -1
  47. package/dist/esm/components/EditableField/EditableFieldInput.mjs.map +1 -1
  48. package/dist/esm/components/EditableField/EditableFieldLayout.mjs.map +1 -1
  49. package/dist/esm/components/EditableField/EditableFieldTextArea.mjs.map +1 -1
  50. package/dist/esm/components/ExpandCollapse/ExpandCollapse.mjs.map +1 -1
  51. package/dist/esm/components/Flags/Flag.mjs.map +1 -1
  52. package/dist/esm/components/Footer/index.mjs.map +1 -1
  53. package/dist/esm/components/Form/FormBase.mjs.map +1 -1
  54. package/dist/esm/components/Form/FormControl.mjs.map +1 -1
  55. package/dist/esm/components/Form/FormDescription.mjs.map +1 -1
  56. package/dist/esm/components/Form/FormField.mjs.map +1 -1
  57. package/dist/esm/components/Form/FormItem.mjs.map +1 -1
  58. package/dist/esm/components/Form/FormLabel.mjs.map +1 -1
  59. package/dist/esm/components/Form/FormMessage.mjs.map +1 -1
  60. package/dist/esm/components/Form/elements/AutoSizeTextAreaElement.mjs.map +1 -1
  61. package/dist/esm/components/Form/elements/CheckboxElement.mjs.map +1 -1
  62. package/dist/esm/components/Form/elements/EditableFieldInputElement.mjs.map +1 -1
  63. package/dist/esm/components/Form/elements/EditableFieldTextAreaElement.mjs.map +1 -1
  64. package/dist/esm/components/Form/elements/FormElement.mjs.map +1 -1
  65. package/dist/esm/components/Form/elements/FormElementWrapper.mjs.map +1 -1
  66. package/dist/esm/components/Form/elements/InputElement.mjs.map +1 -1
  67. package/dist/esm/components/Form/elements/InputPasswordElement.mjs.map +1 -1
  68. package/dist/esm/components/Form/elements/MultiselectElement.mjs.map +1 -1
  69. package/dist/esm/components/Form/elements/OTPElement.mjs.map +1 -1
  70. package/dist/esm/components/Form/elements/SearchInputElement.mjs.map +1 -1
  71. package/dist/esm/components/Form/elements/SelectElement.mjs.map +1 -1
  72. package/dist/esm/components/Form/elements/SwitchSelectorElement.mjs.map +1 -1
  73. package/dist/esm/components/Form/elements/TextAreaElement.mjs.map +1 -1
  74. package/dist/esm/components/Form/layout/FormItemLayout.mjs.map +1 -1
  75. package/dist/esm/components/Form/layout/FormLabelLayout.mjs.map +1 -1
  76. package/dist/esm/components/Form/layout/RequiredStar.mjs.map +1 -1
  77. package/dist/esm/components/HTMLRender/HTMLRender.mjs.map +1 -1
  78. package/dist/esm/components/Headers/index.mjs.map +1 -1
  79. package/dist/esm/components/HeightResizer/index.mjs.map +1 -1
  80. package/dist/esm/components/HideShow/index.mjs.map +1 -1
  81. package/dist/esm/components/IDE/Code.mjs.map +1 -1
  82. package/dist/esm/components/IDE/CodeBlockClient.mjs.map +1 -1
  83. package/dist/esm/components/IDE/CodeBlockServer.mjs.map +1 -1
  84. package/dist/esm/components/IDE/CodeBlockShiki.mjs.map +1 -1
  85. package/dist/esm/components/IDE/CodeConditionalRenderer.mjs.map +1 -1
  86. package/dist/esm/components/IDE/CodeContext.mjs.map +1 -1
  87. package/dist/esm/components/IDE/CodeFormatSelector.mjs.map +1 -1
  88. package/dist/esm/components/IDE/ContentDeclarationFormatSelector.mjs.map +1 -1
  89. package/dist/esm/components/IDE/CopyCode.mjs.map +1 -1
  90. package/dist/esm/components/IDE/FileList.mjs.map +1 -1
  91. package/dist/esm/components/IDE/FileTree.mjs.map +1 -1
  92. package/dist/esm/components/IDE/IDE.mjs.map +1 -1
  93. package/dist/esm/components/IDE/MarkDownRender.mjs.map +1 -1
  94. package/dist/esm/components/IDE/MonacoCode.mjs.map +1 -1
  95. package/dist/esm/components/IDE/PackageManagerSelector.mjs.map +1 -1
  96. package/dist/esm/components/InformationTag/index.mjs.map +1 -1
  97. package/dist/esm/components/Input/Checkbox.mjs.map +1 -1
  98. package/dist/esm/components/Input/Input.mjs.map +1 -1
  99. package/dist/esm/components/Input/InputPassword.mjs.map +1 -1
  100. package/dist/esm/components/Input/OTPInput.mjs.map +1 -1
  101. package/dist/esm/components/Input/SearchInput.mjs.map +1 -1
  102. package/dist/esm/components/KeyboardScreenAdapter/index.mjs.map +1 -1
  103. package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs.map +1 -1
  104. package/dist/esm/components/Label/index.mjs.map +1 -1
  105. package/dist/esm/components/LanguageBackground/index.mjs.map +1 -1
  106. package/dist/esm/components/Link/Link.mjs.map +1 -1
  107. package/dist/esm/components/Loader/index.mjs.map +1 -1
  108. package/dist/esm/components/Loader/spinner.mjs.map +1 -1
  109. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs.map +1 -1
  110. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.mjs.map +1 -1
  111. package/dist/esm/components/LocaleSwitcherDropDown/LocaleSwitcher.mjs.map +1 -1
  112. package/dist/esm/components/Logo/Logo.mjs.map +1 -1
  113. package/dist/esm/components/Logo/LogoTextOnly.mjs.map +1 -1
  114. package/dist/esm/components/Logo/LogoWithText.mjs.map +1 -1
  115. package/dist/esm/components/Logo/LogoWithTextBelow.mjs.map +1 -1
  116. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
  117. package/dist/esm/components/MaxHeightSmoother/index.mjs.map +1 -1
  118. package/dist/esm/components/MaxWidthSmoother/index.mjs.map +1 -1
  119. package/dist/esm/components/Modal/Modal.mjs.map +1 -1
  120. package/dist/esm/components/Navbar/Burger.mjs.map +1 -1
  121. package/dist/esm/components/Navbar/DesktopNavbar.mjs.map +1 -1
  122. package/dist/esm/components/Navbar/MobileNavbar.mjs.map +1 -1
  123. package/dist/esm/components/Navbar/index.mjs.map +1 -1
  124. package/dist/esm/components/Pagination/NumberItemsSelector.mjs.map +1 -1
  125. package/dist/esm/components/Pagination/Pagination.mjs.map +1 -1
  126. package/dist/esm/components/Pagination/ShowingResultsNumberItems.mjs.map +1 -1
  127. package/dist/esm/components/Pattern/DotPattern.mjs.map +1 -1
  128. package/dist/esm/components/Pattern/GridPattern.mjs.map +1 -1
  129. package/dist/esm/components/Pattern/SpotLight.mjs.map +1 -1
  130. package/dist/esm/components/Popover/dynamic.mjs.map +1 -1
  131. package/dist/esm/components/Popover/static.mjs +1 -1
  132. package/dist/esm/components/Popover/static.mjs.map +1 -1
  133. package/dist/esm/components/PressableSpan/PressableSpan.mjs.map +1 -1
  134. package/dist/esm/components/RightDrawer/RightDrawer.mjs.map +1 -1
  135. package/dist/esm/components/Select/Multiselect.mjs.map +1 -1
  136. package/dist/esm/components/Select/Select.mjs.map +1 -1
  137. package/dist/esm/components/SocialNetworks/DiscordLogo.mjs.map +1 -1
  138. package/dist/esm/components/SocialNetworks/FacebookLogo.mjs.map +1 -1
  139. package/dist/esm/components/SocialNetworks/InstagramLogo.mjs.map +1 -1
  140. package/dist/esm/components/SocialNetworks/LinkedInLogo.mjs.map +1 -1
  141. package/dist/esm/components/SocialNetworks/ProductHuntLogo.mjs.map +1 -1
  142. package/dist/esm/components/SocialNetworks/TiktokLogo.mjs.map +1 -1
  143. package/dist/esm/components/SocialNetworks/XLogo.mjs.map +1 -1
  144. package/dist/esm/components/SocialNetworks/YoutubeLogo.mjs.map +1 -1
  145. package/dist/esm/components/SocialNetworks/index.mjs.map +1 -1
  146. package/dist/esm/components/SwitchSelector/index.mjs.map +1 -1
  147. package/dist/esm/components/Tab/Tab.mjs.map +1 -1
  148. package/dist/esm/components/Tab/TabContext.mjs.map +1 -1
  149. package/dist/esm/components/TabSelector/TabSelector.mjs.map +1 -1
  150. package/dist/esm/components/Table/Table.mjs.map +1 -1
  151. package/dist/esm/components/Tag/index.mjs.map +1 -1
  152. package/dist/esm/components/Terminal/Terminal.mjs.map +1 -1
  153. package/dist/esm/components/TextArea/AutoSizeTextArea.mjs.map +1 -1
  154. package/dist/esm/components/TextArea/AutocompleteTextArea.mjs.map +1 -1
  155. package/dist/esm/components/TextArea/TextArea.mjs.map +1 -1
  156. package/dist/esm/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs.map +1 -1
  157. package/dist/esm/components/ThemeSwitcherDropDown/MobileThemeSwitcher.mjs.map +1 -1
  158. package/dist/esm/components/ThemeSwitcherDropDown/types.mjs.map +1 -1
  159. package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
  160. package/dist/esm/components/Toaster/Toaster.mjs.map +1 -1
  161. package/dist/esm/components/Toaster/useToast.mjs.map +1 -1
  162. package/dist/esm/components/WithResizer/index.mjs.map +1 -1
  163. package/dist/esm/hooks/index.mjs +1 -1
  164. package/dist/esm/hooks/reactQuery.mjs +1 -1
  165. package/dist/esm/hooks/reactQuery.mjs.map +1 -1
  166. package/dist/esm/providers/ReactQueryProvider.mjs.map +1 -1
  167. package/dist/esm/utils/image.mjs.map +1 -1
  168. package/dist/types/components/Badge/index.d.ts +3 -3
  169. package/dist/types/components/Button/Button.d.ts +4 -4
  170. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +1 -1
  171. package/dist/types/components/Command/index.d.ts +2 -2
  172. package/dist/types/components/Container/index.d.ts +6 -6
  173. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.d.ts +1 -1
  174. package/dist/types/components/Input/Checkbox.d.ts +2 -2
  175. package/dist/types/components/Input/Input.d.ts +1 -1
  176. package/dist/types/components/Link/Link.d.ts +3 -3
  177. package/dist/types/components/Pagination/Pagination.d.ts +1 -1
  178. package/dist/types/components/Popover/static.d.ts.map +1 -1
  179. package/dist/types/components/SwitchSelector/index.d.ts +2 -2
  180. package/dist/types/components/Tab/Tab.d.ts +1 -1
  181. package/dist/types/components/TabSelector/TabSelector.d.ts +1 -1
  182. package/dist/types/components/Tag/index.d.ts +3 -3
  183. package/dist/types/hooks/index.d.ts +2 -2
  184. package/dist/types/hooks/reactQuery.d.ts +12 -1
  185. package/dist/types/hooks/reactQuery.d.ts.map +1 -1
  186. package/package.json +27 -28
@@ -1 +1 @@
1
- {"version":3,"file":"LogoWithTextBelow.mjs","names":[],"sources":["../../../../src/components/Logo/LogoWithTextBelow.tsx"],"sourcesContent":["import type { FC, SVGProps } from 'react';\n\nexport type LogoBaseProps = SVGProps<SVGSVGElement> & {\n bgColor?: string;\n};\n\nexport const LogoWithTextBelow: FC<LogoBaseProps> = ({ bgColor, ...props }) => (\n <svg\n width=\"1868\"\n height=\"1215\"\n viewBox=\"0 0 1868 1215\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Intlayer logo\"\n preserveAspectRatio=\"xMidYMid\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M697 46C697 21.1472 717.147 1 742 1H987C1011.85 1 1032 21.1472 1032 46C1032 70.8528 1011.85 91 987 91H742C717.147 91 697 70.8528 697 46ZM742 176C717.147 176 697 196.147 697 221C697 245.853 717.147 266 742 266H1122C1146.85 266 1167 245.853 1167 221C1167 196.147 1146.85 176 1122 176H742ZM742 349C717.147 349 697 369.147 697 394C697 418.853 717.147 439 742 439H922C946.853 439 967 418.853 967 394C967 369.147 946.853 349 922 349H742ZM5 736V1101H78V736H5ZM154.715 841V1101H223.715V948C223.715 937 226.215 927.5 231.215 919.5C236.548 911.167 243.882 904.667 253.215 900C262.548 895 273.215 892.5 285.215 892.5C301.215 892.5 312.882 897.5 320.215 907.5C327.548 917.167 331.215 932.833 331.215 954.5V1101H399.715V941C399.715 904.667 392.215 878.167 377.215 861.5C362.548 844.5 339.548 836 308.215 836C289.548 836 273.048 839 258.715 845C244.715 850.667 232.382 859.5 221.715 871.5H220.715L220.215 841H154.715ZM505.02 1087C519.02 1099.67 541.686 1106 573.02 1106C584.02 1106 594.686 1105.17 605.02 1103.5C615.353 1102.17 626.186 1099.83 637.52 1096.5L632.02 1042C625.353 1044.33 618.02 1046.17 610.02 1047.5C602.353 1048.83 595.02 1049.5 588.02 1049.5C575.02 1049.5 566.02 1046.5 561.02 1040.5C556.02 1034.17 553.52 1023.17 553.52 1007.5V894.5H638.02V841H553.52V756H484.52V841H428.02V894.5H484.52V1024.5C484.52 1053.5 491.353 1074.33 505.02 1087ZM700.207 736V1101H770.207V736H700.207ZM844.691 1084.5C859.691 1098.83 880.025 1106 905.691 1106C922.691 1106 939.358 1102.83 955.691 1096.5C972.025 1090.17 984.858 1081.67 994.191 1071H994.691L995.691 1101H1061.19V937C1061.19 912 1057.69 892.167 1050.69 877.5C1043.69 862.5 1032.52 851.833 1017.19 845.5C1001.86 839.167 980.858 836 954.191 836C933.191 836 912.025 837.833 890.691 841.5C869.691 844.833 850.525 849.667 833.191 856L841.691 909C857.691 902.667 874.691 897.833 892.691 894.5C910.691 890.833 928.025 889 944.691 889C957.358 889 967.025 890.333 973.691 893C980.691 895.333 985.525 899.667 988.191 906C991.191 912.333 992.691 921.333 992.691 933H958.191C914.858 933 881.358 941.167 857.691 957.5C834.358 973.833 822.691 997 822.691 1027C822.691 1051 830.025 1070.17 844.691 1084.5ZM962.191 1048C952.858 1052 942.358 1054 930.691 1054C917.025 1054 906.358 1051 898.691 1045C891.358 1039 887.691 1030.67 887.691 1020C887.691 1005.67 894.358 995.167 907.691 988.5C921.025 981.5 941.191 978 968.191 978H992.691V1007.5C992.691 1016.17 989.858 1024.17 984.191 1031.5C978.858 1038.5 971.525 1044 962.191 1048ZM1188.61 1099.5L1145.61 1206H1218.11L1361.11 841H1287.11L1223.61 1033.5H1222.61L1159.61 841L1086.11 841.5L1188.61 1099.5ZM1414.96 1071C1440.29 1094.33 1476.29 1106 1522.96 1106C1539.63 1106 1556.13 1104.5 1572.46 1101.5C1589.13 1098.83 1603.63 1095 1615.96 1090L1607.96 1037.5C1595.63 1042.17 1581.46 1045.83 1565.46 1048.5C1549.46 1051.17 1534.29 1052.5 1519.96 1052.5C1494.63 1052.5 1475.79 1047 1463.46 1036C1453.25 1026.89 1447.27 1013.56 1445.51 996H1627.96C1628.29 993 1628.46 988.5 1628.46 982.5C1628.79 976.5 1628.96 971.167 1628.96 966.5C1628.96 924.833 1618.29 892.667 1596.96 870C1575.96 847.333 1545.96 836 1506.96 836C1466.63 836 1434.96 848 1411.96 872C1388.96 896 1377.46 929 1377.46 971C1377.46 1014.33 1389.96 1047.67 1414.96 1071ZM1445.69 948.5C1447.45 930.347 1452.37 916.18 1460.46 906C1470.79 892.667 1486.29 886 1506.96 886C1526.63 886 1541.13 892.333 1550.46 905C1558.24 915.188 1562.88 929.688 1564.41 948.5H1445.69ZM1746.59 841H1680.59V1101H1750.09V981C1750.09 965 1755.09 950.5 1765.09 937.5C1775.09 924.167 1788.59 913.667 1805.59 906C1822.59 898.333 1841.43 894.5 1862.09 894.5V836C1847.09 836 1832.43 838.167 1818.09 842.5C1804.09 846.5 1791.09 852.5 1779.09 860.5C1767.43 868.167 1757.26 877.833 1748.59 889.5H1747.09L1746.59 841Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M697 46C697 21.1472 717.147 1 742 1H987C1011.85 1 1032 21.1472 1032 46C1032 70.8528 1011.85 91 987 91H742C717.147 91 697 70.8528 697 46ZM742 176C717.147 176 697 196.147 697 221C697 245.853 717.147 266 742 266H1122C1146.85 266 1167 245.853 1167 221C1167 196.147 1146.85 176 1122 176H742ZM742 349C717.147 349 697 369.147 697 394C697 418.853 717.147 439 742 439H922C946.853 439 967 418.853 967 394C967 369.147 946.853 349 922 349H742ZM5 736V1101H78V736H5ZM154.715 841V1101H223.715V948C223.715 937 226.215 927.5 231.215 919.5C236.548 911.167 243.882 904.667 253.215 900C262.548 895 273.215 892.5 285.215 892.5C301.215 892.5 312.882 897.5 320.215 907.5C327.548 917.167 331.215 932.833 331.215 954.5V1101H399.715V941C399.715 904.667 392.215 878.167 377.215 861.5C362.548 844.5 339.548 836 308.215 836C289.548 836 273.048 839 258.715 845C244.715 850.667 232.382 859.5 221.715 871.5H220.715L220.215 841H154.715ZM505.02 1087C519.02 1099.67 541.686 1106 573.02 1106C584.02 1106 594.686 1105.17 605.02 1103.5C615.353 1102.17 626.186 1099.83 637.52 1096.5L632.02 1042C625.353 1044.33 618.02 1046.17 610.02 1047.5C602.353 1048.83 595.02 1049.5 588.02 1049.5C575.02 1049.5 566.02 1046.5 561.02 1040.5C556.02 1034.17 553.52 1023.17 553.52 1007.5V894.5H638.02V841H553.52V756H484.52V841H428.02V894.5H484.52V1024.5C484.52 1053.5 491.353 1074.33 505.02 1087ZM700.207 736V1101H770.207V736H700.207ZM844.691 1084.5C859.691 1098.83 880.025 1106 905.691 1106C922.691 1106 939.358 1102.83 955.691 1096.5C972.025 1090.17 984.858 1081.67 994.191 1071H994.691L995.691 1101H1061.19V937C1061.19 912 1057.69 892.167 1050.69 877.5C1043.69 862.5 1032.52 851.833 1017.19 845.5C1001.86 839.167 980.858 836 954.191 836C933.191 836 912.025 837.833 890.691 841.5C869.691 844.833 850.525 849.667 833.191 856L841.691 909C857.691 902.667 874.691 897.833 892.691 894.5C910.691 890.833 928.025 889 944.691 889C957.358 889 967.025 890.333 973.691 893C980.691 895.333 985.525 899.667 988.191 906C991.191 912.333 992.691 921.333 992.691 933H958.191C914.858 933 881.358 941.167 857.691 957.5C834.358 973.833 822.691 997 822.691 1027C822.691 1051 830.025 1070.17 844.691 1084.5ZM962.191 1048C952.858 1052 942.358 1054 930.691 1054C917.025 1054 906.358 1051 898.691 1045C891.358 1039 887.691 1030.67 887.691 1020C887.691 1005.67 894.358 995.167 907.691 988.5C921.025 981.5 941.191 978 968.191 978H992.691V1007.5C992.691 1016.17 989.858 1024.17 984.191 1031.5C978.858 1038.5 971.525 1044 962.191 1048ZM1188.61 1099.5L1145.61 1206H1218.11L1361.11 841H1287.11L1223.61 1033.5H1222.61L1159.61 841L1086.11 841.5L1188.61 1099.5ZM1414.96 1071C1440.29 1094.33 1476.29 1106 1522.96 1106C1539.63 1106 1556.13 1104.5 1572.46 1101.5C1589.13 1098.83 1603.63 1095 1615.96 1090L1607.96 1037.5C1595.63 1042.17 1581.46 1045.83 1565.46 1048.5C1549.46 1051.17 1534.29 1052.5 1519.96 1052.5C1494.63 1052.5 1475.79 1047 1463.46 1036C1453.25 1026.89 1447.27 1013.56 1445.51 996H1627.96C1628.29 993 1628.46 988.5 1628.46 982.5C1628.79 976.5 1628.96 971.167 1628.96 966.5C1628.96 924.833 1618.29 892.667 1596.96 870C1575.96 847.333 1545.96 836 1506.96 836C1466.63 836 1434.96 848 1411.96 872C1388.96 896 1377.46 929 1377.46 971C1377.46 1014.33 1389.96 1047.67 1414.96 1071ZM1445.69 948.5C1447.45 930.347 1452.37 916.18 1460.46 906C1470.79 892.667 1486.29 886 1506.96 886C1526.63 886 1541.13 892.333 1550.46 905C1558.24 915.188 1562.88 929.688 1564.41 948.5H1445.69ZM1746.59 841H1680.59V1101H1750.09V981C1750.09 965 1755.09 950.5 1765.09 937.5C1775.09 924.167 1788.59 913.667 1805.59 906C1822.59 898.333 1841.43 894.5 1862.09 894.5V836C1847.09 836 1832.43 838.167 1818.09 842.5C1804.09 846.5 1791.09 852.5 1779.09 860.5C1767.43 868.167 1757.26 877.833 1748.59 889.5H1747.09L1746.59 841Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M5 1101H4V1102H5V1101ZM5 736V735H4V736H5ZM78 1101V1102H79V1101H78ZM78 736H79V735H78V736ZM154.715 1101H153.715V1102H154.715V1101ZM154.715 841V840H153.715V841H154.715ZM223.715 1101V1102H224.715V1101H223.715ZM231.215 919.5L230.373 918.961L230.367 918.97L231.215 919.5ZM253.215 900L253.662 900.894L253.675 900.888L253.687 900.881L253.215 900ZM320.215 907.5L319.408 908.091L319.413 908.098L319.418 908.104L320.215 907.5ZM331.215 1101H330.215V1102H331.215V1101ZM399.715 1101V1102H400.715V1101H399.715ZM377.215 861.5L376.458 862.153L376.465 862.161L376.472 862.169L377.215 861.5ZM258.715 845L259.09 845.927L259.101 845.922L258.715 845ZM221.715 871.5V872.5H222.164L222.462 872.164L221.715 871.5ZM220.715 871.5L219.715 871.516L219.731 872.5H220.715V871.5ZM220.215 841L221.215 840.984L221.199 840H220.215V841ZM505.02 1087L504.34 1087.73L504.349 1087.74L505.02 1087ZM605.02 1103.5L604.892 1102.51L604.876 1102.51L604.86 1102.51L605.02 1103.5ZM637.52 1096.5L637.802 1097.46L638.598 1097.23L638.514 1096.4L637.52 1096.5ZM632.02 1042L633.014 1041.9L632.887 1040.64L631.689 1041.06L632.02 1042ZM610.02 1047.5L609.855 1046.51L609.848 1046.51L610.02 1047.5ZM561.02 1040.5L560.235 1041.12L560.243 1041.13L560.251 1041.14L561.02 1040.5ZM553.52 894.5V893.5H552.52V894.5H553.52ZM638.02 894.5V895.5H639.02V894.5H638.02ZM638.02 841H639.02V840H638.02V841ZM553.52 841H552.52V842H553.52V841ZM553.52 756H554.52V755H553.52V756ZM484.52 756V755H483.52V756H484.52ZM484.52 841V842H485.52V841H484.52ZM428.02 841V840H427.02V841H428.02ZM428.02 894.5H427.02V895.5H428.02V894.5ZM484.52 894.5H485.52V893.5H484.52V894.5ZM700.207 1101H699.207V1102H700.207V1101ZM700.207 736V735H699.207V736H700.207ZM770.207 1101V1102H771.207V1101H770.207ZM770.207 736H771.207V735H770.207V736ZM844.691 1084.5L843.992 1085.22L844.001 1085.22L844.691 1084.5ZM994.191 1071V1070H993.738L993.439 1070.34L994.191 1071ZM994.691 1071L995.691 1070.97L995.659 1070H994.691V1071ZM995.691 1101L994.692 1101.03L994.724 1102H995.691V1101ZM1061.19 1101V1102H1062.19V1101H1061.19ZM1050.69 877.5L1049.79 877.923L1049.79 877.931L1050.69 877.5ZM1017.19 845.5L1016.81 846.424L1016.81 846.424L1017.19 845.5ZM890.691 841.5L890.848 842.488L890.861 842.486L890.691 841.5ZM833.191 856L832.848 855.061L832.073 855.344L832.204 856.158L833.191 856ZM841.691 909L840.704 909.158L840.901 910.388L842.059 909.93L841.691 909ZM892.691 894.5L892.873 895.483L892.882 895.482L892.891 895.48L892.691 894.5ZM973.691 893L973.32 893.928L973.347 893.939L973.375 893.949L973.691 893ZM988.191 906L987.27 906.388L987.278 906.408L987.288 906.428L988.191 906ZM992.691 933V934H993.691V933H992.691ZM857.691 957.5L857.123 956.677L857.118 956.681L857.691 957.5ZM898.691 1045L898.058 1045.77L898.067 1045.78L898.075 1045.79L898.691 1045ZM907.691 988.5L908.139 989.394L908.147 989.39L908.156 989.385L907.691 988.5ZM992.691 978H993.691V977H992.691V978ZM984.191 1031.5L983.4 1030.89L983.396 1030.89L984.191 1031.5ZM1145.61 1206L1144.68 1205.63L1144.12 1207H1145.61V1206ZM1188.61 1099.5L1189.53 1099.87L1189.68 1099.5L1189.53 1099.13L1188.61 1099.5ZM1218.11 1206V1207H1218.79L1219.04 1206.36L1218.11 1206ZM1361.11 841L1362.04 841.365L1362.57 840H1361.11V841ZM1287.11 841V840H1286.38L1286.16 840.687L1287.11 841ZM1223.61 1033.5V1034.5H1224.33L1224.56 1033.81L1223.61 1033.5ZM1222.61 1033.5L1221.66 1033.81L1221.88 1034.5H1222.61V1033.5ZM1159.61 841L1160.56 840.689L1160.33 839.995L1159.6 840L1159.61 841ZM1086.11 841.5L1086.1 840.5L1084.64 840.51L1085.18 841.869L1086.11 841.5ZM1414.96 1071L1414.28 1071.73L1414.28 1071.74L1414.96 1071ZM1572.46 1101.5L1572.3 1100.51L1572.29 1100.51L1572.28 1100.52L1572.46 1101.5ZM1615.96 1090L1616.34 1090.93L1617.07 1090.63L1616.95 1089.85L1615.96 1090ZM1607.96 1037.5L1608.95 1037.35L1608.76 1036.13L1607.61 1036.56L1607.96 1037.5ZM1463.46 1036L1464.13 1035.25L1464.13 1035.25L1463.46 1036ZM1445.51 996V995H1444.4L1444.51 996.1L1445.51 996ZM1627.96 996V997H1628.86L1628.95 996.11L1627.96 996ZM1628.46 982.5L1627.46 982.445L1627.46 982.472V982.5H1628.46ZM1596.96 870L1596.23 870.68L1596.23 870.685L1596.96 870ZM1460.46 906L1461.24 906.622L1461.25 906.613L1460.46 906ZM1445.69 948.5L1444.69 948.404L1444.59 949.5H1445.69V948.5ZM1550.46 905L1549.66 905.593L1549.66 905.6L1549.67 905.607L1550.46 905ZM1564.41 948.5V949.5H1565.49L1565.4 948.419L1564.41 948.5ZM1680.59 841V840H1679.59V841H1680.59ZM1746.59 841L1747.59 840.99L1747.58 840H1746.59V841ZM1680.59 1101H1679.59V1102H1680.59V1101ZM1750.09 1101V1102H1751.09V1101H1750.09ZM1765.09 937.5L1765.89 938.11L1765.89 938.1L1765.09 937.5ZM1862.09 894.5V895.5H1863.09V894.5H1862.09ZM1862.09 836H1863.09V835H1862.09V836ZM1818.09 842.5L1818.37 843.462L1818.38 843.459L1818.38 843.457L1818.09 842.5ZM1779.09 860.5L1779.64 861.336L1779.65 861.332L1779.09 860.5ZM1748.59 889.5V890.5H1749.1L1749.4 890.096L1748.59 889.5ZM1747.09 889.5L1746.09 889.51L1746.1 890.5H1747.09V889.5ZM742 0C716.595 0 696 20.5949 696 46H698C698 21.6995 717.7 2 742 2V0ZM987 0H742V2H987V0ZM1033 46C1033 20.5949 1012.41 0 987 0V2C1011.3 2 1031 21.6995 1031 46H1033ZM987 92C1012.41 92 1033 71.4051 1033 46H1031C1031 70.3005 1011.3 90 987 90V92ZM742 92H987V90H742V92ZM696 46C696 71.4051 716.595 92 742 92V90C717.7 90 698 70.3005 698 46H696ZM698 221C698 196.699 717.699 177 742 177V175C716.595 175 696 195.595 696 221H698ZM742 265C717.699 265 698 245.301 698 221H696C696 246.405 716.595 267 742 267V265ZM1122 265H742V267H1122V265ZM1166 221C1166 245.301 1146.3 265 1122 265V267C1147.41 267 1168 246.405 1168 221H1166ZM1122 177C1146.3 177 1166 196.699 1166 221H1168C1168 195.595 1147.41 175 1122 175V177ZM742 177H1122V175H742V177ZM698 394C698 369.699 717.7 350 742 350V348C716.595 348 696 368.595 696 394H698ZM742 438C717.7 438 698 418.3 698 394H696C696 419.405 716.595 440 742 440V438ZM922 438H742V440H922V438ZM966 394C966 418.3 946.3 438 922 438V440C947.405 440 968 419.405 968 394H966ZM922 350C946.3 350 966 369.699 966 394H968C968 368.595 947.405 348 922 348V350ZM742 350H922V348H742V350ZM6 1101V736H4V1101H6ZM78 1100H5V1102H78V1100ZM77 736V1101H79V736H77ZM5 737H78V735H5V737ZM155.715 1101V841H153.715V1101H155.715ZM223.715 1100H154.715V1102H223.715V1100ZM222.715 948V1101H224.715V948H222.715ZM230.367 918.97C225.252 927.154 222.715 936.844 222.715 948H224.715C224.715 937.156 227.178 927.846 232.063 920.03L230.367 918.97ZM252.768 899.106C243.282 903.848 235.809 910.467 230.373 918.961L232.057 920.039C237.288 911.866 244.481 905.485 253.662 900.894L252.768 899.106ZM285.215 891.5C273.072 891.5 262.24 894.031 252.743 899.119L253.687 900.881C262.857 895.969 273.357 893.5 285.215 893.5V891.5ZM321.021 906.909C313.446 896.579 301.432 891.5 285.215 891.5V893.5C300.998 893.5 312.317 898.421 319.408 908.091L321.021 906.909ZM332.215 954.5C332.215 932.767 328.546 916.827 321.012 906.896L319.418 908.104C326.551 917.506 330.215 932.9 330.215 954.5H332.215ZM332.215 1101V954.5H330.215V1101H332.215ZM399.715 1100H331.215V1102H399.715V1100ZM398.715 941V1101H400.715V941H398.715ZM376.472 862.169C391.23 878.567 398.715 904.769 398.715 941H400.715C400.715 904.564 393.2 877.766 377.958 860.831L376.472 862.169ZM308.215 837C339.377 837 362.047 845.45 376.458 862.153L377.972 860.847C363.049 843.55 339.719 835 308.215 835V837ZM259.101 845.922C273.29 839.983 289.655 837 308.215 837V835C289.442 835 272.806 838.017 258.329 844.078L259.101 845.922ZM222.462 872.164C233.033 860.272 245.242 851.532 259.09 845.927L258.34 844.073C244.188 849.801 231.73 858.728 220.967 870.836L222.462 872.164ZM220.715 872.5H221.715V870.5H220.715V872.5ZM219.215 841.016L219.715 871.516L221.715 871.484L221.215 840.984L219.215 841.016ZM154.715 842H220.215V840H154.715V842ZM573.02 1105C541.781 1105 519.418 1098.68 505.69 1086.26L504.349 1087.74C518.621 1100.65 541.591 1107 573.02 1107V1105ZM604.86 1102.51C594.582 1104.17 583.969 1105 573.02 1105V1107C584.07 1107 594.79 1106.16 605.179 1104.49L604.86 1102.51ZM637.237 1095.54C625.948 1098.86 615.166 1101.18 604.892 1102.51L605.148 1104.49C615.539 1103.15 626.424 1100.81 637.802 1097.46L637.237 1095.54ZM631.025 1042.1L636.525 1096.6L638.514 1096.4L633.014 1041.9L631.025 1042.1ZM610.184 1048.49C618.232 1047.14 625.622 1045.3 632.35 1042.94L631.689 1041.06C625.084 1043.37 617.807 1045.19 609.855 1046.51L610.184 1048.49ZM588.02 1050.5C595.083 1050.5 602.474 1049.83 610.191 1048.49L609.848 1046.51C602.232 1047.84 594.956 1048.5 588.02 1048.5V1050.5ZM560.251 1041.14C565.537 1047.48 574.915 1050.5 588.02 1050.5V1048.5C575.124 1048.5 566.502 1045.52 561.788 1039.86L560.251 1041.14ZM552.52 1007.5C552.52 1023.21 555.014 1034.51 560.235 1041.12L561.804 1039.88C557.025 1033.83 554.52 1023.12 554.52 1007.5H552.52ZM552.52 894.5V1007.5H554.52V894.5H552.52ZM638.02 893.5H553.52V895.5H638.02V893.5ZM637.02 841V894.5H639.02V841H637.02ZM553.52 842H638.02V840H553.52V842ZM552.52 756V841H554.52V756H552.52ZM484.52 757H553.52V755H484.52V757ZM485.52 841V756H483.52V841H485.52ZM428.02 842H484.52V840H428.02V842ZM429.02 894.5V841H427.02V894.5H429.02ZM484.52 893.5H428.02V895.5H484.52V893.5ZM485.52 1024.5V894.5H483.52V1024.5H485.52ZM505.699 1086.27C492.327 1073.87 485.52 1053.37 485.52 1024.5H483.52C483.52 1053.63 490.379 1074.79 504.34 1087.73L505.699 1086.27ZM701.207 1101V736H699.207V1101H701.207ZM770.207 1100H700.207V1102H770.207V1100ZM769.207 736V1101H771.207V736H769.207ZM700.207 737H770.207V735H700.207V737ZM905.691 1105C880.218 1105 860.154 1097.89 845.382 1083.78L844.001 1085.22C859.228 1099.77 879.832 1107 905.691 1107V1105ZM955.33 1095.57C939.108 1101.86 922.564 1105 905.691 1105V1107C922.819 1107 939.608 1103.81 956.053 1097.43L955.33 1095.57ZM993.439 1070.34C984.234 1080.86 971.548 1089.28 955.33 1095.57L956.053 1097.43C972.502 1091.05 985.482 1082.47 994.944 1071.66L993.439 1070.34ZM994.691 1070H994.191V1072H994.691V1070ZM996.691 1100.97L995.691 1070.97L993.692 1071.03L994.692 1101.03L996.691 1100.97ZM1061.19 1100H995.691V1102H1061.19V1100ZM1060.19 937V1101H1062.19V937H1060.19ZM1049.79 877.931C1056.7 892.41 1060.19 912.077 1060.19 937H1062.19C1062.19 911.923 1058.68 891.923 1051.59 877.069L1049.79 877.931ZM1016.81 846.424C1031.91 852.662 1042.89 863.15 1049.79 877.923L1051.6 877.077C1044.49 861.85 1033.14 851.004 1017.57 844.576L1016.81 846.424ZM954.191 837C980.797 837 1001.65 840.162 1016.81 846.424L1017.57 844.576C1002.07 838.171 980.919 835 954.191 835V837ZM890.861 842.486C912.14 838.828 933.25 837 954.191 837V835C933.133 835 911.91 836.838 890.522 840.514L890.861 842.486ZM833.535 856.939C850.799 850.631 869.902 845.812 890.848 842.488L890.535 840.512C869.48 843.854 850.25 848.702 832.848 855.061L833.535 856.939ZM842.679 908.842L834.179 855.842L832.204 856.158L840.704 909.158L842.679 908.842ZM892.509 893.517C874.45 896.861 857.387 901.712 841.323 908.07L842.059 909.93C857.996 903.622 874.933 898.806 892.873 895.483L892.509 893.517ZM944.691 888C927.951 888 910.551 889.841 892.492 893.52L892.891 895.48C910.832 891.825 928.098 890 944.691 890V888ZM974.063 892.072C967.22 889.334 957.403 888 944.691 888V890C957.313 890 966.829 891.332 973.32 893.928L974.063 892.072ZM989.113 905.612C986.326 898.992 981.258 894.468 974.008 892.051L973.375 893.949C980.125 896.199 984.724 900.341 987.27 906.388L989.113 905.612ZM993.691 933C993.691 921.271 992.187 912.1 989.095 905.572L987.288 906.428C990.196 912.567 991.691 921.395 991.691 933H993.691ZM958.191 934H992.691V932H958.191V934ZM858.259 958.323C881.694 942.15 914.964 934 958.191 934V932C914.752 932 881.022 940.184 857.123 956.677L858.259 958.323ZM823.691 1027C823.691 997.306 835.215 974.454 858.265 958.319L857.118 956.681C833.501 973.213 821.691 996.694 821.691 1027H823.691ZM845.39 1083.78C830.949 1069.67 823.691 1050.78 823.691 1027H821.691C821.691 1051.22 829.1 1070.66 843.992 1085.22L845.39 1083.78ZM930.691 1055C942.473 1055 953.11 1052.98 962.585 1048.92L961.797 1047.08C952.606 1051.02 942.243 1053 930.691 1053V1055ZM898.075 1045.79C905.977 1051.97 916.89 1055 930.691 1055V1053C917.16 1053 906.74 1050.03 899.308 1044.21L898.075 1045.79ZM886.691 1020C886.691 1030.92 890.462 1039.56 898.058 1045.77L899.325 1044.23C892.255 1038.44 888.691 1030.41 888.691 1020H886.691ZM907.244 987.606C900.448 991.004 895.296 995.408 891.847 1000.84C888.397 1006.27 886.691 1012.67 886.691 1020H888.691C888.691 1012.99 890.319 1006.98 893.536 1001.91C896.754 996.842 901.602 992.663 908.139 989.394L907.244 987.606ZM968.191 977C941.139 977 920.776 980.501 907.227 987.615L908.156 989.385C921.273 982.499 941.244 979 968.191 979V977ZM992.691 977H968.191V979H992.691V977ZM993.691 1007.5V978H991.691V1007.5H993.691ZM984.983 1032.11C990.775 1024.62 993.691 1016.4 993.691 1007.5H991.691C991.691 1015.93 988.942 1023.72 983.4 1030.89L984.983 1032.11ZM962.585 1048.92C972.053 1044.86 979.534 1039.26 984.987 1032.11L983.396 1030.89C978.182 1037.74 970.997 1043.14 961.797 1047.08L962.585 1048.92ZM1146.53 1206.37L1189.53 1099.87L1187.68 1099.13L1144.68 1205.63L1146.53 1206.37ZM1218.11 1205H1145.61V1207H1218.11V1205ZM1360.17 840.635L1217.17 1205.64L1219.04 1206.36L1362.04 841.365L1360.17 840.635ZM1287.11 842H1361.11V840H1287.11V842ZM1224.56 1033.81L1288.06 841.313L1286.16 840.687L1222.66 1033.19L1224.56 1033.81ZM1222.61 1034.5H1223.61V1032.5H1222.61V1034.5ZM1158.66 841.311L1221.66 1033.81L1223.56 1033.19L1160.56 840.689L1158.66 841.311ZM1086.11 842.5L1159.61 842L1159.6 840L1086.1 840.5L1086.11 842.5ZM1189.53 1099.13L1087.03 841.131L1085.18 841.869L1187.68 1099.87L1189.53 1099.13ZM1522.96 1105C1476.45 1105 1440.73 1093.38 1415.64 1070.26L1414.28 1071.74C1439.86 1095.29 1476.13 1107 1522.96 1107V1105ZM1572.28 1100.52C1556.01 1103.51 1539.57 1105 1522.96 1105V1107C1539.69 1107 1556.25 1105.49 1572.64 1102.48L1572.28 1100.52ZM1615.59 1089.07C1603.34 1094.04 1588.91 1097.85 1572.3 1100.51L1572.62 1102.49C1589.34 1099.81 1603.92 1095.96 1616.34 1090.93L1615.59 1089.07ZM1606.97 1037.65L1614.97 1090.15L1616.95 1089.85L1608.95 1037.35L1606.97 1037.65ZM1565.63 1049.49C1581.68 1046.81 1595.91 1043.13 1608.31 1038.44L1607.61 1036.56C1595.35 1041.2 1581.25 1044.86 1565.3 1047.51L1565.63 1049.49ZM1519.96 1053.5C1534.36 1053.5 1549.58 1052.16 1565.63 1049.49L1565.3 1047.51C1549.34 1050.17 1534.23 1051.5 1519.96 1051.5V1053.5ZM1462.8 1036.75C1475.39 1047.98 1494.51 1053.5 1519.96 1053.5V1051.5C1494.75 1051.5 1476.2 1046.02 1464.13 1035.25L1462.8 1036.75ZM1444.51 996.1C1446.29 1013.83 1452.35 1027.43 1462.8 1036.75L1464.13 1035.25C1454.15 1026.36 1448.24 1013.29 1446.5 995.9L1444.51 996.1ZM1627.96 995H1445.51V997H1627.96V995ZM1627.46 982.5C1627.46 988.492 1627.29 992.947 1626.97 995.89L1628.95 996.11C1629.29 993.053 1629.46 988.508 1629.46 982.5H1627.46ZM1627.96 966.5C1627.96 971.144 1627.8 976.458 1627.46 982.445L1629.46 982.555C1629.79 976.542 1629.96 971.189 1629.96 966.5H1627.96ZM1596.23 870.685C1617.34 893.111 1627.96 925 1627.96 966.5H1629.96C1629.96 924.667 1619.25 892.222 1597.69 869.315L1596.23 870.685ZM1506.96 837C1545.76 837 1575.46 848.268 1596.23 870.68L1597.69 869.32C1576.46 846.399 1546.16 835 1506.96 835V837ZM1412.68 872.692C1435.46 848.93 1466.84 837 1506.96 837V835C1466.42 835 1434.47 847.07 1411.24 871.308L1412.68 872.692ZM1378.46 971C1378.46 929.187 1389.91 896.46 1412.68 872.692L1411.24 871.308C1388.02 895.54 1376.46 928.813 1376.46 971H1378.46ZM1415.64 1070.27C1390.9 1047.17 1378.46 1014.13 1378.46 971H1376.46C1376.46 1014.53 1389.02 1048.16 1414.28 1071.73L1415.64 1070.27ZM1459.68 905.378C1451.43 915.759 1446.46 930.133 1444.69 948.404L1446.69 948.596C1448.43 930.561 1453.31 916.602 1461.24 906.622L1459.68 905.378ZM1506.96 885C1486.06 885 1470.24 891.755 1459.67 905.387L1461.25 906.613C1471.35 893.579 1486.53 887 1506.96 887V885ZM1551.27 904.407C1541.7 891.421 1526.86 885 1506.96 885V887C1526.4 887 1540.56 893.246 1549.66 905.593L1551.27 904.407ZM1565.4 948.419C1563.87 929.501 1559.19 914.789 1551.26 904.393L1549.67 905.607C1557.28 915.586 1561.9 929.874 1563.41 948.581L1565.4 948.419ZM1445.69 949.5H1564.41V947.5H1445.69V949.5ZM1680.59 842H1746.59V840H1680.59V842ZM1681.59 1101V841H1679.59V1101H1681.59ZM1750.09 1100H1680.59V1102H1750.09V1100ZM1749.09 981V1101H1751.09V981H1749.09ZM1764.3 936.89C1754.17 950.06 1749.09 964.774 1749.09 981H1751.09C1751.09 965.226 1756.02 950.94 1765.89 938.11L1764.3 936.89ZM1805.18 905.088C1788.05 912.816 1774.41 923.416 1764.29 936.9L1765.89 938.1C1775.78 924.917 1789.14 914.517 1806 906.912L1805.18 905.088ZM1862.09 893.5C1841.3 893.5 1822.33 897.357 1805.18 905.088L1806 906.912C1822.86 899.309 1841.55 895.5 1862.09 895.5V893.5ZM1861.09 836V894.5H1863.09V836H1861.09ZM1818.38 843.457C1832.62 839.152 1847.19 837 1862.09 837V835C1847 835 1832.23 837.181 1817.8 841.543L1818.38 843.457ZM1779.65 861.332C1791.56 853.39 1804.47 847.433 1818.37 843.462L1817.82 841.538C1803.72 845.567 1790.63 851.61 1778.54 859.668L1779.65 861.332ZM1749.4 890.096C1758 878.52 1768.08 868.935 1779.64 861.336L1778.54 859.664C1766.78 867.398 1756.52 877.147 1747.79 888.904L1749.4 890.096ZM1747.09 890.5H1748.59V888.5H1747.09V890.5ZM1745.59 841.01L1746.09 889.51L1748.09 889.49L1747.59 840.99L1745.59 841.01Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n"],"mappings":"kDAMA,MAAa,GAAwC,CAAE,UAAS,GAAG,KACjE,EAAC,MAAA,CACC,MAAM,OACN,OAAO,OACP,QAAQ,gBACR,KAAK,OACL,MAAM,6BACN,KAAK,MACL,aAAW,gBACX,oBAAoB,WACpB,GAAI,YAEJ,EAAC,OAAA,CACC,SAAS,UACT,SAAS,UACT,EAAE,moHACF,CACF,EAAC,OAAA,CACC,SAAS,UACT,SAAS,UACT,EAAE,koHACF,KAAK,gBACL,CACF,EAAC,OAAA,CACC,EAAE,whhBACF,KAAK,gBACL,GACE"}
1
+ {"version":3,"file":"LogoWithTextBelow.mjs","names":[],"sources":["../../../../src/components/Logo/LogoWithTextBelow.tsx"],"sourcesContent":["import type { FC, SVGProps } from 'react';\n\nexport type LogoBaseProps = SVGProps<SVGSVGElement> & {\n bgColor?: string;\n};\n\nexport const LogoWithTextBelow: FC<LogoBaseProps> = ({ bgColor, ...props }) => (\n <svg\n width=\"1868\"\n height=\"1215\"\n viewBox=\"0 0 1868 1215\"\n fill=\"none\"\n xmlns=\"http://www.w3.org/2000/svg\"\n role=\"img\"\n aria-label=\"Intlayer logo\"\n preserveAspectRatio=\"xMidYMid\"\n {...props}\n >\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M697 46C697 21.1472 717.147 1 742 1H987C1011.85 1 1032 21.1472 1032 46C1032 70.8528 1011.85 91 987 91H742C717.147 91 697 70.8528 697 46ZM742 176C717.147 176 697 196.147 697 221C697 245.853 717.147 266 742 266H1122C1146.85 266 1167 245.853 1167 221C1167 196.147 1146.85 176 1122 176H742ZM742 349C717.147 349 697 369.147 697 394C697 418.853 717.147 439 742 439H922C946.853 439 967 418.853 967 394C967 369.147 946.853 349 922 349H742ZM5 736V1101H78V736H5ZM154.715 841V1101H223.715V948C223.715 937 226.215 927.5 231.215 919.5C236.548 911.167 243.882 904.667 253.215 900C262.548 895 273.215 892.5 285.215 892.5C301.215 892.5 312.882 897.5 320.215 907.5C327.548 917.167 331.215 932.833 331.215 954.5V1101H399.715V941C399.715 904.667 392.215 878.167 377.215 861.5C362.548 844.5 339.548 836 308.215 836C289.548 836 273.048 839 258.715 845C244.715 850.667 232.382 859.5 221.715 871.5H220.715L220.215 841H154.715ZM505.02 1087C519.02 1099.67 541.686 1106 573.02 1106C584.02 1106 594.686 1105.17 605.02 1103.5C615.353 1102.17 626.186 1099.83 637.52 1096.5L632.02 1042C625.353 1044.33 618.02 1046.17 610.02 1047.5C602.353 1048.83 595.02 1049.5 588.02 1049.5C575.02 1049.5 566.02 1046.5 561.02 1040.5C556.02 1034.17 553.52 1023.17 553.52 1007.5V894.5H638.02V841H553.52V756H484.52V841H428.02V894.5H484.52V1024.5C484.52 1053.5 491.353 1074.33 505.02 1087ZM700.207 736V1101H770.207V736H700.207ZM844.691 1084.5C859.691 1098.83 880.025 1106 905.691 1106C922.691 1106 939.358 1102.83 955.691 1096.5C972.025 1090.17 984.858 1081.67 994.191 1071H994.691L995.691 1101H1061.19V937C1061.19 912 1057.69 892.167 1050.69 877.5C1043.69 862.5 1032.52 851.833 1017.19 845.5C1001.86 839.167 980.858 836 954.191 836C933.191 836 912.025 837.833 890.691 841.5C869.691 844.833 850.525 849.667 833.191 856L841.691 909C857.691 902.667 874.691 897.833 892.691 894.5C910.691 890.833 928.025 889 944.691 889C957.358 889 967.025 890.333 973.691 893C980.691 895.333 985.525 899.667 988.191 906C991.191 912.333 992.691 921.333 992.691 933H958.191C914.858 933 881.358 941.167 857.691 957.5C834.358 973.833 822.691 997 822.691 1027C822.691 1051 830.025 1070.17 844.691 1084.5ZM962.191 1048C952.858 1052 942.358 1054 930.691 1054C917.025 1054 906.358 1051 898.691 1045C891.358 1039 887.691 1030.67 887.691 1020C887.691 1005.67 894.358 995.167 907.691 988.5C921.025 981.5 941.191 978 968.191 978H992.691V1007.5C992.691 1016.17 989.858 1024.17 984.191 1031.5C978.858 1038.5 971.525 1044 962.191 1048ZM1188.61 1099.5L1145.61 1206H1218.11L1361.11 841H1287.11L1223.61 1033.5H1222.61L1159.61 841L1086.11 841.5L1188.61 1099.5ZM1414.96 1071C1440.29 1094.33 1476.29 1106 1522.96 1106C1539.63 1106 1556.13 1104.5 1572.46 1101.5C1589.13 1098.83 1603.63 1095 1615.96 1090L1607.96 1037.5C1595.63 1042.17 1581.46 1045.83 1565.46 1048.5C1549.46 1051.17 1534.29 1052.5 1519.96 1052.5C1494.63 1052.5 1475.79 1047 1463.46 1036C1453.25 1026.89 1447.27 1013.56 1445.51 996H1627.96C1628.29 993 1628.46 988.5 1628.46 982.5C1628.79 976.5 1628.96 971.167 1628.96 966.5C1628.96 924.833 1618.29 892.667 1596.96 870C1575.96 847.333 1545.96 836 1506.96 836C1466.63 836 1434.96 848 1411.96 872C1388.96 896 1377.46 929 1377.46 971C1377.46 1014.33 1389.96 1047.67 1414.96 1071ZM1445.69 948.5C1447.45 930.347 1452.37 916.18 1460.46 906C1470.79 892.667 1486.29 886 1506.96 886C1526.63 886 1541.13 892.333 1550.46 905C1558.24 915.188 1562.88 929.688 1564.41 948.5H1445.69ZM1746.59 841H1680.59V1101H1750.09V981C1750.09 965 1755.09 950.5 1765.09 937.5C1775.09 924.167 1788.59 913.667 1805.59 906C1822.59 898.333 1841.43 894.5 1862.09 894.5V836C1847.09 836 1832.43 838.167 1818.09 842.5C1804.09 846.5 1791.09 852.5 1779.09 860.5C1767.43 868.167 1757.26 877.833 1748.59 889.5H1747.09L1746.59 841Z\"\n />\n <path\n fillRule=\"evenodd\"\n clipRule=\"evenodd\"\n d=\"M697 46C697 21.1472 717.147 1 742 1H987C1011.85 1 1032 21.1472 1032 46C1032 70.8528 1011.85 91 987 91H742C717.147 91 697 70.8528 697 46ZM742 176C717.147 176 697 196.147 697 221C697 245.853 717.147 266 742 266H1122C1146.85 266 1167 245.853 1167 221C1167 196.147 1146.85 176 1122 176H742ZM742 349C717.147 349 697 369.147 697 394C697 418.853 717.147 439 742 439H922C946.853 439 967 418.853 967 394C967 369.147 946.853 349 922 349H742ZM5 736V1101H78V736H5ZM154.715 841V1101H223.715V948C223.715 937 226.215 927.5 231.215 919.5C236.548 911.167 243.882 904.667 253.215 900C262.548 895 273.215 892.5 285.215 892.5C301.215 892.5 312.882 897.5 320.215 907.5C327.548 917.167 331.215 932.833 331.215 954.5V1101H399.715V941C399.715 904.667 392.215 878.167 377.215 861.5C362.548 844.5 339.548 836 308.215 836C289.548 836 273.048 839 258.715 845C244.715 850.667 232.382 859.5 221.715 871.5H220.715L220.215 841H154.715ZM505.02 1087C519.02 1099.67 541.686 1106 573.02 1106C584.02 1106 594.686 1105.17 605.02 1103.5C615.353 1102.17 626.186 1099.83 637.52 1096.5L632.02 1042C625.353 1044.33 618.02 1046.17 610.02 1047.5C602.353 1048.83 595.02 1049.5 588.02 1049.5C575.02 1049.5 566.02 1046.5 561.02 1040.5C556.02 1034.17 553.52 1023.17 553.52 1007.5V894.5H638.02V841H553.52V756H484.52V841H428.02V894.5H484.52V1024.5C484.52 1053.5 491.353 1074.33 505.02 1087ZM700.207 736V1101H770.207V736H700.207ZM844.691 1084.5C859.691 1098.83 880.025 1106 905.691 1106C922.691 1106 939.358 1102.83 955.691 1096.5C972.025 1090.17 984.858 1081.67 994.191 1071H994.691L995.691 1101H1061.19V937C1061.19 912 1057.69 892.167 1050.69 877.5C1043.69 862.5 1032.52 851.833 1017.19 845.5C1001.86 839.167 980.858 836 954.191 836C933.191 836 912.025 837.833 890.691 841.5C869.691 844.833 850.525 849.667 833.191 856L841.691 909C857.691 902.667 874.691 897.833 892.691 894.5C910.691 890.833 928.025 889 944.691 889C957.358 889 967.025 890.333 973.691 893C980.691 895.333 985.525 899.667 988.191 906C991.191 912.333 992.691 921.333 992.691 933H958.191C914.858 933 881.358 941.167 857.691 957.5C834.358 973.833 822.691 997 822.691 1027C822.691 1051 830.025 1070.17 844.691 1084.5ZM962.191 1048C952.858 1052 942.358 1054 930.691 1054C917.025 1054 906.358 1051 898.691 1045C891.358 1039 887.691 1030.67 887.691 1020C887.691 1005.67 894.358 995.167 907.691 988.5C921.025 981.5 941.191 978 968.191 978H992.691V1007.5C992.691 1016.17 989.858 1024.17 984.191 1031.5C978.858 1038.5 971.525 1044 962.191 1048ZM1188.61 1099.5L1145.61 1206H1218.11L1361.11 841H1287.11L1223.61 1033.5H1222.61L1159.61 841L1086.11 841.5L1188.61 1099.5ZM1414.96 1071C1440.29 1094.33 1476.29 1106 1522.96 1106C1539.63 1106 1556.13 1104.5 1572.46 1101.5C1589.13 1098.83 1603.63 1095 1615.96 1090L1607.96 1037.5C1595.63 1042.17 1581.46 1045.83 1565.46 1048.5C1549.46 1051.17 1534.29 1052.5 1519.96 1052.5C1494.63 1052.5 1475.79 1047 1463.46 1036C1453.25 1026.89 1447.27 1013.56 1445.51 996H1627.96C1628.29 993 1628.46 988.5 1628.46 982.5C1628.79 976.5 1628.96 971.167 1628.96 966.5C1628.96 924.833 1618.29 892.667 1596.96 870C1575.96 847.333 1545.96 836 1506.96 836C1466.63 836 1434.96 848 1411.96 872C1388.96 896 1377.46 929 1377.46 971C1377.46 1014.33 1389.96 1047.67 1414.96 1071ZM1445.69 948.5C1447.45 930.347 1452.37 916.18 1460.46 906C1470.79 892.667 1486.29 886 1506.96 886C1526.63 886 1541.13 892.333 1550.46 905C1558.24 915.188 1562.88 929.688 1564.41 948.5H1445.69ZM1746.59 841H1680.59V1101H1750.09V981C1750.09 965 1755.09 950.5 1765.09 937.5C1775.09 924.167 1788.59 913.667 1805.59 906C1822.59 898.333 1841.43 894.5 1862.09 894.5V836C1847.09 836 1832.43 838.167 1818.09 842.5C1804.09 846.5 1791.09 852.5 1779.09 860.5C1767.43 868.167 1757.26 877.833 1748.59 889.5H1747.09L1746.59 841Z\"\n fill=\"currentColor\"\n />\n <path\n d=\"M5 1101H4V1102H5V1101ZM5 736V735H4V736H5ZM78 1101V1102H79V1101H78ZM78 736H79V735H78V736ZM154.715 1101H153.715V1102H154.715V1101ZM154.715 841V840H153.715V841H154.715ZM223.715 1101V1102H224.715V1101H223.715ZM231.215 919.5L230.373 918.961L230.367 918.97L231.215 919.5ZM253.215 900L253.662 900.894L253.675 900.888L253.687 900.881L253.215 900ZM320.215 907.5L319.408 908.091L319.413 908.098L319.418 908.104L320.215 907.5ZM331.215 1101H330.215V1102H331.215V1101ZM399.715 1101V1102H400.715V1101H399.715ZM377.215 861.5L376.458 862.153L376.465 862.161L376.472 862.169L377.215 861.5ZM258.715 845L259.09 845.927L259.101 845.922L258.715 845ZM221.715 871.5V872.5H222.164L222.462 872.164L221.715 871.5ZM220.715 871.5L219.715 871.516L219.731 872.5H220.715V871.5ZM220.215 841L221.215 840.984L221.199 840H220.215V841ZM505.02 1087L504.34 1087.73L504.349 1087.74L505.02 1087ZM605.02 1103.5L604.892 1102.51L604.876 1102.51L604.86 1102.51L605.02 1103.5ZM637.52 1096.5L637.802 1097.46L638.598 1097.23L638.514 1096.4L637.52 1096.5ZM632.02 1042L633.014 1041.9L632.887 1040.64L631.689 1041.06L632.02 1042ZM610.02 1047.5L609.855 1046.51L609.848 1046.51L610.02 1047.5ZM561.02 1040.5L560.235 1041.12L560.243 1041.13L560.251 1041.14L561.02 1040.5ZM553.52 894.5V893.5H552.52V894.5H553.52ZM638.02 894.5V895.5H639.02V894.5H638.02ZM638.02 841H639.02V840H638.02V841ZM553.52 841H552.52V842H553.52V841ZM553.52 756H554.52V755H553.52V756ZM484.52 756V755H483.52V756H484.52ZM484.52 841V842H485.52V841H484.52ZM428.02 841V840H427.02V841H428.02ZM428.02 894.5H427.02V895.5H428.02V894.5ZM484.52 894.5H485.52V893.5H484.52V894.5ZM700.207 1101H699.207V1102H700.207V1101ZM700.207 736V735H699.207V736H700.207ZM770.207 1101V1102H771.207V1101H770.207ZM770.207 736H771.207V735H770.207V736ZM844.691 1084.5L843.992 1085.22L844.001 1085.22L844.691 1084.5ZM994.191 1071V1070H993.738L993.439 1070.34L994.191 1071ZM994.691 1071L995.691 1070.97L995.659 1070H994.691V1071ZM995.691 1101L994.692 1101.03L994.724 1102H995.691V1101ZM1061.19 1101V1102H1062.19V1101H1061.19ZM1050.69 877.5L1049.79 877.923L1049.79 877.931L1050.69 877.5ZM1017.19 845.5L1016.81 846.424L1016.81 846.424L1017.19 845.5ZM890.691 841.5L890.848 842.488L890.861 842.486L890.691 841.5ZM833.191 856L832.848 855.061L832.073 855.344L832.204 856.158L833.191 856ZM841.691 909L840.704 909.158L840.901 910.388L842.059 909.93L841.691 909ZM892.691 894.5L892.873 895.483L892.882 895.482L892.891 895.48L892.691 894.5ZM973.691 893L973.32 893.928L973.347 893.939L973.375 893.949L973.691 893ZM988.191 906L987.27 906.388L987.278 906.408L987.288 906.428L988.191 906ZM992.691 933V934H993.691V933H992.691ZM857.691 957.5L857.123 956.677L857.118 956.681L857.691 957.5ZM898.691 1045L898.058 1045.77L898.067 1045.78L898.075 1045.79L898.691 1045ZM907.691 988.5L908.139 989.394L908.147 989.39L908.156 989.385L907.691 988.5ZM992.691 978H993.691V977H992.691V978ZM984.191 1031.5L983.4 1030.89L983.396 1030.89L984.191 1031.5ZM1145.61 1206L1144.68 1205.63L1144.12 1207H1145.61V1206ZM1188.61 1099.5L1189.53 1099.87L1189.68 1099.5L1189.53 1099.13L1188.61 1099.5ZM1218.11 1206V1207H1218.79L1219.04 1206.36L1218.11 1206ZM1361.11 841L1362.04 841.365L1362.57 840H1361.11V841ZM1287.11 841V840H1286.38L1286.16 840.687L1287.11 841ZM1223.61 1033.5V1034.5H1224.33L1224.56 1033.81L1223.61 1033.5ZM1222.61 1033.5L1221.66 1033.81L1221.88 1034.5H1222.61V1033.5ZM1159.61 841L1160.56 840.689L1160.33 839.995L1159.6 840L1159.61 841ZM1086.11 841.5L1086.1 840.5L1084.64 840.51L1085.18 841.869L1086.11 841.5ZM1414.96 1071L1414.28 1071.73L1414.28 1071.74L1414.96 1071ZM1572.46 1101.5L1572.3 1100.51L1572.29 1100.51L1572.28 1100.52L1572.46 1101.5ZM1615.96 1090L1616.34 1090.93L1617.07 1090.63L1616.95 1089.85L1615.96 1090ZM1607.96 1037.5L1608.95 1037.35L1608.76 1036.13L1607.61 1036.56L1607.96 1037.5ZM1463.46 1036L1464.13 1035.25L1464.13 1035.25L1463.46 1036ZM1445.51 996V995H1444.4L1444.51 996.1L1445.51 996ZM1627.96 996V997H1628.86L1628.95 996.11L1627.96 996ZM1628.46 982.5L1627.46 982.445L1627.46 982.472V982.5H1628.46ZM1596.96 870L1596.23 870.68L1596.23 870.685L1596.96 870ZM1460.46 906L1461.24 906.622L1461.25 906.613L1460.46 906ZM1445.69 948.5L1444.69 948.404L1444.59 949.5H1445.69V948.5ZM1550.46 905L1549.66 905.593L1549.66 905.6L1549.67 905.607L1550.46 905ZM1564.41 948.5V949.5H1565.49L1565.4 948.419L1564.41 948.5ZM1680.59 841V840H1679.59V841H1680.59ZM1746.59 841L1747.59 840.99L1747.58 840H1746.59V841ZM1680.59 1101H1679.59V1102H1680.59V1101ZM1750.09 1101V1102H1751.09V1101H1750.09ZM1765.09 937.5L1765.89 938.11L1765.89 938.1L1765.09 937.5ZM1862.09 894.5V895.5H1863.09V894.5H1862.09ZM1862.09 836H1863.09V835H1862.09V836ZM1818.09 842.5L1818.37 843.462L1818.38 843.459L1818.38 843.457L1818.09 842.5ZM1779.09 860.5L1779.64 861.336L1779.65 861.332L1779.09 860.5ZM1748.59 889.5V890.5H1749.1L1749.4 890.096L1748.59 889.5ZM1747.09 889.5L1746.09 889.51L1746.1 890.5H1747.09V889.5ZM742 0C716.595 0 696 20.5949 696 46H698C698 21.6995 717.7 2 742 2V0ZM987 0H742V2H987V0ZM1033 46C1033 20.5949 1012.41 0 987 0V2C1011.3 2 1031 21.6995 1031 46H1033ZM987 92C1012.41 92 1033 71.4051 1033 46H1031C1031 70.3005 1011.3 90 987 90V92ZM742 92H987V90H742V92ZM696 46C696 71.4051 716.595 92 742 92V90C717.7 90 698 70.3005 698 46H696ZM698 221C698 196.699 717.699 177 742 177V175C716.595 175 696 195.595 696 221H698ZM742 265C717.699 265 698 245.301 698 221H696C696 246.405 716.595 267 742 267V265ZM1122 265H742V267H1122V265ZM1166 221C1166 245.301 1146.3 265 1122 265V267C1147.41 267 1168 246.405 1168 221H1166ZM1122 177C1146.3 177 1166 196.699 1166 221H1168C1168 195.595 1147.41 175 1122 175V177ZM742 177H1122V175H742V177ZM698 394C698 369.699 717.7 350 742 350V348C716.595 348 696 368.595 696 394H698ZM742 438C717.7 438 698 418.3 698 394H696C696 419.405 716.595 440 742 440V438ZM922 438H742V440H922V438ZM966 394C966 418.3 946.3 438 922 438V440C947.405 440 968 419.405 968 394H966ZM922 350C946.3 350 966 369.699 966 394H968C968 368.595 947.405 348 922 348V350ZM742 350H922V348H742V350ZM6 1101V736H4V1101H6ZM78 1100H5V1102H78V1100ZM77 736V1101H79V736H77ZM5 737H78V735H5V737ZM155.715 1101V841H153.715V1101H155.715ZM223.715 1100H154.715V1102H223.715V1100ZM222.715 948V1101H224.715V948H222.715ZM230.367 918.97C225.252 927.154 222.715 936.844 222.715 948H224.715C224.715 937.156 227.178 927.846 232.063 920.03L230.367 918.97ZM252.768 899.106C243.282 903.848 235.809 910.467 230.373 918.961L232.057 920.039C237.288 911.866 244.481 905.485 253.662 900.894L252.768 899.106ZM285.215 891.5C273.072 891.5 262.24 894.031 252.743 899.119L253.687 900.881C262.857 895.969 273.357 893.5 285.215 893.5V891.5ZM321.021 906.909C313.446 896.579 301.432 891.5 285.215 891.5V893.5C300.998 893.5 312.317 898.421 319.408 908.091L321.021 906.909ZM332.215 954.5C332.215 932.767 328.546 916.827 321.012 906.896L319.418 908.104C326.551 917.506 330.215 932.9 330.215 954.5H332.215ZM332.215 1101V954.5H330.215V1101H332.215ZM399.715 1100H331.215V1102H399.715V1100ZM398.715 941V1101H400.715V941H398.715ZM376.472 862.169C391.23 878.567 398.715 904.769 398.715 941H400.715C400.715 904.564 393.2 877.766 377.958 860.831L376.472 862.169ZM308.215 837C339.377 837 362.047 845.45 376.458 862.153L377.972 860.847C363.049 843.55 339.719 835 308.215 835V837ZM259.101 845.922C273.29 839.983 289.655 837 308.215 837V835C289.442 835 272.806 838.017 258.329 844.078L259.101 845.922ZM222.462 872.164C233.033 860.272 245.242 851.532 259.09 845.927L258.34 844.073C244.188 849.801 231.73 858.728 220.967 870.836L222.462 872.164ZM220.715 872.5H221.715V870.5H220.715V872.5ZM219.215 841.016L219.715 871.516L221.715 871.484L221.215 840.984L219.215 841.016ZM154.715 842H220.215V840H154.715V842ZM573.02 1105C541.781 1105 519.418 1098.68 505.69 1086.26L504.349 1087.74C518.621 1100.65 541.591 1107 573.02 1107V1105ZM604.86 1102.51C594.582 1104.17 583.969 1105 573.02 1105V1107C584.07 1107 594.79 1106.16 605.179 1104.49L604.86 1102.51ZM637.237 1095.54C625.948 1098.86 615.166 1101.18 604.892 1102.51L605.148 1104.49C615.539 1103.15 626.424 1100.81 637.802 1097.46L637.237 1095.54ZM631.025 1042.1L636.525 1096.6L638.514 1096.4L633.014 1041.9L631.025 1042.1ZM610.184 1048.49C618.232 1047.14 625.622 1045.3 632.35 1042.94L631.689 1041.06C625.084 1043.37 617.807 1045.19 609.855 1046.51L610.184 1048.49ZM588.02 1050.5C595.083 1050.5 602.474 1049.83 610.191 1048.49L609.848 1046.51C602.232 1047.84 594.956 1048.5 588.02 1048.5V1050.5ZM560.251 1041.14C565.537 1047.48 574.915 1050.5 588.02 1050.5V1048.5C575.124 1048.5 566.502 1045.52 561.788 1039.86L560.251 1041.14ZM552.52 1007.5C552.52 1023.21 555.014 1034.51 560.235 1041.12L561.804 1039.88C557.025 1033.83 554.52 1023.12 554.52 1007.5H552.52ZM552.52 894.5V1007.5H554.52V894.5H552.52ZM638.02 893.5H553.52V895.5H638.02V893.5ZM637.02 841V894.5H639.02V841H637.02ZM553.52 842H638.02V840H553.52V842ZM552.52 756V841H554.52V756H552.52ZM484.52 757H553.52V755H484.52V757ZM485.52 841V756H483.52V841H485.52ZM428.02 842H484.52V840H428.02V842ZM429.02 894.5V841H427.02V894.5H429.02ZM484.52 893.5H428.02V895.5H484.52V893.5ZM485.52 1024.5V894.5H483.52V1024.5H485.52ZM505.699 1086.27C492.327 1073.87 485.52 1053.37 485.52 1024.5H483.52C483.52 1053.63 490.379 1074.79 504.34 1087.73L505.699 1086.27ZM701.207 1101V736H699.207V1101H701.207ZM770.207 1100H700.207V1102H770.207V1100ZM769.207 736V1101H771.207V736H769.207ZM700.207 737H770.207V735H700.207V737ZM905.691 1105C880.218 1105 860.154 1097.89 845.382 1083.78L844.001 1085.22C859.228 1099.77 879.832 1107 905.691 1107V1105ZM955.33 1095.57C939.108 1101.86 922.564 1105 905.691 1105V1107C922.819 1107 939.608 1103.81 956.053 1097.43L955.33 1095.57ZM993.439 1070.34C984.234 1080.86 971.548 1089.28 955.33 1095.57L956.053 1097.43C972.502 1091.05 985.482 1082.47 994.944 1071.66L993.439 1070.34ZM994.691 1070H994.191V1072H994.691V1070ZM996.691 1100.97L995.691 1070.97L993.692 1071.03L994.692 1101.03L996.691 1100.97ZM1061.19 1100H995.691V1102H1061.19V1100ZM1060.19 937V1101H1062.19V937H1060.19ZM1049.79 877.931C1056.7 892.41 1060.19 912.077 1060.19 937H1062.19C1062.19 911.923 1058.68 891.923 1051.59 877.069L1049.79 877.931ZM1016.81 846.424C1031.91 852.662 1042.89 863.15 1049.79 877.923L1051.6 877.077C1044.49 861.85 1033.14 851.004 1017.57 844.576L1016.81 846.424ZM954.191 837C980.797 837 1001.65 840.162 1016.81 846.424L1017.57 844.576C1002.07 838.171 980.919 835 954.191 835V837ZM890.861 842.486C912.14 838.828 933.25 837 954.191 837V835C933.133 835 911.91 836.838 890.522 840.514L890.861 842.486ZM833.535 856.939C850.799 850.631 869.902 845.812 890.848 842.488L890.535 840.512C869.48 843.854 850.25 848.702 832.848 855.061L833.535 856.939ZM842.679 908.842L834.179 855.842L832.204 856.158L840.704 909.158L842.679 908.842ZM892.509 893.517C874.45 896.861 857.387 901.712 841.323 908.07L842.059 909.93C857.996 903.622 874.933 898.806 892.873 895.483L892.509 893.517ZM944.691 888C927.951 888 910.551 889.841 892.492 893.52L892.891 895.48C910.832 891.825 928.098 890 944.691 890V888ZM974.063 892.072C967.22 889.334 957.403 888 944.691 888V890C957.313 890 966.829 891.332 973.32 893.928L974.063 892.072ZM989.113 905.612C986.326 898.992 981.258 894.468 974.008 892.051L973.375 893.949C980.125 896.199 984.724 900.341 987.27 906.388L989.113 905.612ZM993.691 933C993.691 921.271 992.187 912.1 989.095 905.572L987.288 906.428C990.196 912.567 991.691 921.395 991.691 933H993.691ZM958.191 934H992.691V932H958.191V934ZM858.259 958.323C881.694 942.15 914.964 934 958.191 934V932C914.752 932 881.022 940.184 857.123 956.677L858.259 958.323ZM823.691 1027C823.691 997.306 835.215 974.454 858.265 958.319L857.118 956.681C833.501 973.213 821.691 996.694 821.691 1027H823.691ZM845.39 1083.78C830.949 1069.67 823.691 1050.78 823.691 1027H821.691C821.691 1051.22 829.1 1070.66 843.992 1085.22L845.39 1083.78ZM930.691 1055C942.473 1055 953.11 1052.98 962.585 1048.92L961.797 1047.08C952.606 1051.02 942.243 1053 930.691 1053V1055ZM898.075 1045.79C905.977 1051.97 916.89 1055 930.691 1055V1053C917.16 1053 906.74 1050.03 899.308 1044.21L898.075 1045.79ZM886.691 1020C886.691 1030.92 890.462 1039.56 898.058 1045.77L899.325 1044.23C892.255 1038.44 888.691 1030.41 888.691 1020H886.691ZM907.244 987.606C900.448 991.004 895.296 995.408 891.847 1000.84C888.397 1006.27 886.691 1012.67 886.691 1020H888.691C888.691 1012.99 890.319 1006.98 893.536 1001.91C896.754 996.842 901.602 992.663 908.139 989.394L907.244 987.606ZM968.191 977C941.139 977 920.776 980.501 907.227 987.615L908.156 989.385C921.273 982.499 941.244 979 968.191 979V977ZM992.691 977H968.191V979H992.691V977ZM993.691 1007.5V978H991.691V1007.5H993.691ZM984.983 1032.11C990.775 1024.62 993.691 1016.4 993.691 1007.5H991.691C991.691 1015.93 988.942 1023.72 983.4 1030.89L984.983 1032.11ZM962.585 1048.92C972.053 1044.86 979.534 1039.26 984.987 1032.11L983.396 1030.89C978.182 1037.74 970.997 1043.14 961.797 1047.08L962.585 1048.92ZM1146.53 1206.37L1189.53 1099.87L1187.68 1099.13L1144.68 1205.63L1146.53 1206.37ZM1218.11 1205H1145.61V1207H1218.11V1205ZM1360.17 840.635L1217.17 1205.64L1219.04 1206.36L1362.04 841.365L1360.17 840.635ZM1287.11 842H1361.11V840H1287.11V842ZM1224.56 1033.81L1288.06 841.313L1286.16 840.687L1222.66 1033.19L1224.56 1033.81ZM1222.61 1034.5H1223.61V1032.5H1222.61V1034.5ZM1158.66 841.311L1221.66 1033.81L1223.56 1033.19L1160.56 840.689L1158.66 841.311ZM1086.11 842.5L1159.61 842L1159.6 840L1086.1 840.5L1086.11 842.5ZM1189.53 1099.13L1087.03 841.131L1085.18 841.869L1187.68 1099.87L1189.53 1099.13ZM1522.96 1105C1476.45 1105 1440.73 1093.38 1415.64 1070.26L1414.28 1071.74C1439.86 1095.29 1476.13 1107 1522.96 1107V1105ZM1572.28 1100.52C1556.01 1103.51 1539.57 1105 1522.96 1105V1107C1539.69 1107 1556.25 1105.49 1572.64 1102.48L1572.28 1100.52ZM1615.59 1089.07C1603.34 1094.04 1588.91 1097.85 1572.3 1100.51L1572.62 1102.49C1589.34 1099.81 1603.92 1095.96 1616.34 1090.93L1615.59 1089.07ZM1606.97 1037.65L1614.97 1090.15L1616.95 1089.85L1608.95 1037.35L1606.97 1037.65ZM1565.63 1049.49C1581.68 1046.81 1595.91 1043.13 1608.31 1038.44L1607.61 1036.56C1595.35 1041.2 1581.25 1044.86 1565.3 1047.51L1565.63 1049.49ZM1519.96 1053.5C1534.36 1053.5 1549.58 1052.16 1565.63 1049.49L1565.3 1047.51C1549.34 1050.17 1534.23 1051.5 1519.96 1051.5V1053.5ZM1462.8 1036.75C1475.39 1047.98 1494.51 1053.5 1519.96 1053.5V1051.5C1494.75 1051.5 1476.2 1046.02 1464.13 1035.25L1462.8 1036.75ZM1444.51 996.1C1446.29 1013.83 1452.35 1027.43 1462.8 1036.75L1464.13 1035.25C1454.15 1026.36 1448.24 1013.29 1446.5 995.9L1444.51 996.1ZM1627.96 995H1445.51V997H1627.96V995ZM1627.46 982.5C1627.46 988.492 1627.29 992.947 1626.97 995.89L1628.95 996.11C1629.29 993.053 1629.46 988.508 1629.46 982.5H1627.46ZM1627.96 966.5C1627.96 971.144 1627.8 976.458 1627.46 982.445L1629.46 982.555C1629.79 976.542 1629.96 971.189 1629.96 966.5H1627.96ZM1596.23 870.685C1617.34 893.111 1627.96 925 1627.96 966.5H1629.96C1629.96 924.667 1619.25 892.222 1597.69 869.315L1596.23 870.685ZM1506.96 837C1545.76 837 1575.46 848.268 1596.23 870.68L1597.69 869.32C1576.46 846.399 1546.16 835 1506.96 835V837ZM1412.68 872.692C1435.46 848.93 1466.84 837 1506.96 837V835C1466.42 835 1434.47 847.07 1411.24 871.308L1412.68 872.692ZM1378.46 971C1378.46 929.187 1389.91 896.46 1412.68 872.692L1411.24 871.308C1388.02 895.54 1376.46 928.813 1376.46 971H1378.46ZM1415.64 1070.27C1390.9 1047.17 1378.46 1014.13 1378.46 971H1376.46C1376.46 1014.53 1389.02 1048.16 1414.28 1071.73L1415.64 1070.27ZM1459.68 905.378C1451.43 915.759 1446.46 930.133 1444.69 948.404L1446.69 948.596C1448.43 930.561 1453.31 916.602 1461.24 906.622L1459.68 905.378ZM1506.96 885C1486.06 885 1470.24 891.755 1459.67 905.387L1461.25 906.613C1471.35 893.579 1486.53 887 1506.96 887V885ZM1551.27 904.407C1541.7 891.421 1526.86 885 1506.96 885V887C1526.4 887 1540.56 893.246 1549.66 905.593L1551.27 904.407ZM1565.4 948.419C1563.87 929.501 1559.19 914.789 1551.26 904.393L1549.67 905.607C1557.28 915.586 1561.9 929.874 1563.41 948.581L1565.4 948.419ZM1445.69 949.5H1564.41V947.5H1445.69V949.5ZM1680.59 842H1746.59V840H1680.59V842ZM1681.59 1101V841H1679.59V1101H1681.59ZM1750.09 1100H1680.59V1102H1750.09V1100ZM1749.09 981V1101H1751.09V981H1749.09ZM1764.3 936.89C1754.17 950.06 1749.09 964.774 1749.09 981H1751.09C1751.09 965.226 1756.02 950.94 1765.89 938.11L1764.3 936.89ZM1805.18 905.088C1788.05 912.816 1774.41 923.416 1764.29 936.9L1765.89 938.1C1775.78 924.917 1789.14 914.517 1806 906.912L1805.18 905.088ZM1862.09 893.5C1841.3 893.5 1822.33 897.357 1805.18 905.088L1806 906.912C1822.86 899.309 1841.55 895.5 1862.09 895.5V893.5ZM1861.09 836V894.5H1863.09V836H1861.09ZM1818.38 843.457C1832.62 839.152 1847.19 837 1862.09 837V835C1847 835 1832.23 837.181 1817.8 841.543L1818.38 843.457ZM1779.65 861.332C1791.56 853.39 1804.47 847.433 1818.37 843.462L1817.82 841.538C1803.72 845.567 1790.63 851.61 1778.54 859.668L1779.65 861.332ZM1749.4 890.096C1758 878.52 1768.08 868.935 1779.64 861.336L1778.54 859.664C1766.78 867.398 1756.52 877.147 1747.79 888.904L1749.4 890.096ZM1747.09 890.5H1748.59V888.5H1747.09V890.5ZM1745.59 841.01L1746.09 889.51L1748.09 889.49L1747.59 840.99L1745.59 841.01Z\"\n fill=\"currentColor\"\n />\n </svg>\n);\n"],"mappings":"kDAMA,MAAa,GAAwC,CAAE,UAAS,GAAG,KACjE,EAAC,MAAD,CACE,MAAM,OACN,OAAO,OACP,QAAQ,gBACR,KAAK,OACL,MAAM,6BACN,KAAK,MACL,aAAW,gBACX,oBAAoB,WACpB,GAAI,WATN,CAWE,EAAC,OAAD,CACE,SAAS,UACT,SAAS,UACT,EAAE,koHACF,CAAA,CACF,EAAC,OAAD,CACE,SAAS,UACT,SAAS,UACT,EAAE,koHACF,KAAK,eACL,CAAA,CACF,EAAC,OAAD,CACE,EAAE,whhBACF,KAAK,eACL,CAAA,CACE"}
@@ -1 +1 @@
1
- {"version":3,"file":"MarkDownRender.mjs","names":[],"sources":["../../../../src/components/MarkDownRender/MarkDownRender.tsx"],"sourcesContent":["import type { LocalesValues } from '@intlayer/types';\nimport { cn } from '@utils/cn';\nimport type { ComponentProps, ComponentPropsWithoutRef, FC } from 'react';\nimport {\n type MarkdownRenderer as MarkdownRendererIntlayer,\n type RenderMarkdownProps,\n renderMarkdown,\n} from 'react-intlayer';\nimport type { BundledLanguage } from 'shiki/bundle/web';\nimport { H1, H2, H3, H4, H5, H6 } from '../Headers';\nimport { Code } from '../IDE/Code';\nimport { CodeProvider } from '../IDE/CodeContext';\nimport { Link } from '../Link';\nimport { Tab } from '../Tab';\nimport { TabProvider } from '../Tab/TabContext';\nimport { Table } from '../Table';\n\ntype MarkdownRendererProps = {\n children: string;\n isDarkMode?: boolean;\n locale?: LocalesValues;\n forceBlock?: boolean;\n preserveFrontmatter?: boolean;\n tagfilter?: boolean;\n components?: ComponentProps<typeof MarkdownRendererIntlayer>['components'];\n wrapper?: ComponentProps<typeof MarkdownRendererIntlayer>['wrapper'];\n};\n\nexport const getIntlayerMarkdownOptions: (\n isDarkMode: boolean\n) => RenderMarkdownProps = (isDarkMode) => ({\n components: {\n h1: (props) => <H1 isClickable={true} className=\"text-text\" {...props} />,\n h2: (props) => (\n <H2 isClickable={true} className=\"mt-16 text-text\" {...props} />\n ),\n h3: (props) => (\n <H3 isClickable={true} className=\"mt-5 text-text\" {...props} />\n ),\n h4: (props) => (\n <H4 isClickable={true} className=\"mt-3 text-text\" {...props} />\n ),\n h5: (props) => (\n <H5 isClickable={true} className=\"mt-3 text-text\" {...props} />\n ),\n h6: (props) => (\n <H6 isClickable={true} className=\"mt-3 text-text\" {...props} />\n ),\n strong: (props) => <strong className=\"text-text\" {...props} />,\n\n code: ({ className, children, ...rest }: ComponentProps<'code'>) => {\n // Ensure children is a string (Markdown renderer might pass ReactNodes)\n const content = String(children ?? '').replace(/\\n$/, '');\n\n // Determine if it is inline code or a code block\n // Code blocks usually have a className like 'language-ts'\n const isBlock = !!className;\n\n if (!isBlock) {\n return (\n <code className=\"rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm\">\n {content}\n </code>\n );\n }\n\n // Extract language from className (e.g., \"language-typescript\" -> \"typescript\")\n const language = (className?.replace(/lang(?:uage)?-/, '') ||\n 'plaintext') as BundledLanguage;\n\n return (\n <Code\n {...rest}\n language={language}\n showHeader={true}\n isDarkMode={isDarkMode} // Ensure this variable is available in scope\n >\n {content}\n </Code>\n );\n },\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn(\n 'mt-5 gap-3 border-card border-l-4 pl-5 text-neutral',\n '[&_strong]:text-neutral',\n className\n )}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn(\n 'mt-5 flex list-disc flex-col gap-3 pl-5 marker:text-neutral/80',\n className\n )}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn(\n 'mt-5 flex list-decimal flex-col gap-3 pl-5 marker:text-neutral/80',\n className\n )}\n {...props}\n />\n ),\n img: ({ className, ...props }) => (\n <img\n {...props}\n alt={props.alt ?? ''}\n loading=\"lazy\"\n className={cn('max-h-[80vh] max-w-full rounded-md', className)}\n src={`${props.src}?raw=true`}\n />\n ),\n a: (props) => (\n // @ts-expect-error - label is not required in LinkProps\n <Link\n isExternalLink={props.href?.startsWith('http')}\n underlined={true}\n // locale={locale}\n {...props}\n />\n ),\n pre: (props) => props.children,\n\n table: (props: ComponentProps<typeof Table>) => (\n <Table isRollable={true} {...props} />\n ),\n th: ({ className, ...props }) => (\n <th\n className={cn('border-neutral border-b bg-neutral/10 p-4', className)}\n {...props}\n />\n ),\n tr: ({ className, ...props }) => (\n <tr\n className={cn('hover:/10 hover:bg-neutral/10', className)}\n {...props}\n />\n ),\n td: ({ className, ...props }) => (\n <td\n className={cn('border-neutral-500/50 border-b p-4', className)}\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr className={cn('mx-6 mt-16 text-neutral', className)} {...props} />\n ),\n Tabs: (props: ComponentProps<typeof Tab>) => (\n <Tab\n {...props}\n className=\"rounded-xl border border-card\"\n headerClassName=\"sticky rounded-xl top-24 z-5 bg-background/70 backdrop-blur overflow-x-auto\"\n />\n ),\n Tab: Tab.Item,\n Columns: ({ className, ...props }: ComponentPropsWithoutRef<'div'>) => (\n <div className={cn('flex gap-4 max-md:flex-col', className)} {...props} />\n ),\n Column: ({ className, ...props }: ComponentPropsWithoutRef<'div'>) => (\n <div className={cn('flex-1', className)} {...props} />\n ),\n },\n});\n\n/**\n * MarkdownRenderer Component\n *\n * A comprehensive markdown renderer that transforms markdown text into rich,\n * interactive HTML with custom styling and Intlayer integration. Supports\n * code syntax highlighting, responsive tables, internationalized links,\n * and automatic frontmatter stripping.\n *\n * @component\n */\nexport const MarkdownRenderer: FC<MarkdownRendererProps> = ({\n children,\n isDarkMode,\n locale,\n forceBlock,\n preserveFrontmatter,\n tagfilter,\n components: componentsProp,\n wrapper,\n}) => {\n const markdownOptions = getIntlayerMarkdownOptions(isDarkMode ?? false);\n\n const markdownContent = renderMarkdown(children, {\n components: {\n ...markdownOptions.components,\n // Pass dynamic props to components\n code: ({ className, children, ...rest }: ComponentProps<'code'>) => {\n // Ensure children is a string (Markdown renderer might pass ReactNodes)\n const content = String(children ?? '').replace(/\\n$/, '');\n\n // Determine if it is inline code or a code block\n // Code blocks usually have a className like 'language-ts'\n const isBlock = !!className;\n\n if (!isBlock) {\n return (\n <code className=\"rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm\">\n {content}\n </code>\n );\n }\n\n // Extract language from className (e.g., \"language-typescript\" -> \"typescript\")\n const language = (className?.replace(/lang(?:uage)?-/, '') ||\n 'plaintext') as BundledLanguage;\n\n return (\n <Code\n {...rest}\n language={language}\n showHeader={true}\n isDarkMode={isDarkMode} // Ensure this variable is available in scope\n >\n {content}\n </Code>\n );\n },\n\n a: (props) => (\n <Link\n isExternalLink={props.href?.startsWith('http')}\n underlined={true}\n locale={locale}\n label=\"\"\n {...props}\n color=\"text\"\n />\n ),\n ...componentsProp,\n },\n wrapper: wrapper ?? markdownOptions.wrapper,\n forceBlock: forceBlock ?? markdownOptions.forceBlock,\n preserveFrontmatter:\n preserveFrontmatter ?? markdownOptions.preserveFrontmatter,\n tagfilter: tagfilter ?? markdownOptions.tagfilter,\n });\n\n return (\n <CodeProvider>\n <TabProvider>{markdownContent}</TabProvider>\n </CodeProvider>\n );\n};\n"],"mappings":"2dA4BA,MAAa,EAEe,IAAgB,CAC1C,WAAY,CACV,GAAK,GAAU,EAAC,EAAA,CAAG,YAAa,GAAM,UAAU,YAAY,GAAI,GAAS,CACzE,GAAK,GACH,EAAC,EAAA,CAAG,YAAa,GAAM,UAAU,kBAAkB,GAAI,GAAS,CAElE,GAAK,GACH,EAAC,EAAA,CAAG,YAAa,GAAM,UAAU,iBAAiB,GAAI,GAAS,CAEjE,GAAK,GACH,EAAC,EAAA,CAAG,YAAa,GAAM,UAAU,iBAAiB,GAAI,GAAS,CAEjE,GAAK,GACH,EAAC,EAAA,CAAG,YAAa,GAAM,UAAU,iBAAiB,GAAI,GAAS,CAEjE,GAAK,GACH,EAAC,EAAA,CAAG,YAAa,GAAM,UAAU,iBAAiB,GAAI,GAAS,CAEjE,OAAS,GAAU,EAAC,SAAA,CAAO,UAAU,YAAY,GAAI,GAAS,CAE9D,MAAO,CAAE,YAAW,WAAU,GAAG,KAAmC,CAElE,IAAM,EAAU,OAAO,GAAY,GAAG,CAAC,QAAQ,MAAO,GAAG,CAMzD,GAAI,CAFc,EAGhB,OACE,EAAC,OAAA,CAAK,UAAU,+GACb,GACI,CAKX,IAAM,EAAY,GAAW,QAAQ,iBAAkB,GAAG,EACxD,YAEF,OACE,EAAC,EAAA,CACC,GAAI,EACM,WACV,WAAY,GACA,sBAEX,GACI,EAGX,YAAa,CAAE,YAAW,GAAG,KAC3B,EAAC,aAAA,CACC,UAAW,EACT,sDACA,0BACA,EACD,CACD,GAAI,GACJ,CAEJ,IAAK,CAAE,YAAW,GAAG,KACnB,EAAC,KAAA,CACC,UAAW,EACT,iEACA,EACD,CACD,GAAI,GACJ,CAEJ,IAAK,CAAE,YAAW,GAAG,KACnB,EAAC,KAAA,CACC,UAAW,EACT,oEACA,EACD,CACD,GAAI,GACJ,CAEJ,KAAM,CAAE,YAAW,GAAG,KACpB,EAAC,MAAA,CACC,GAAI,EACJ,IAAK,EAAM,KAAO,GAClB,QAAQ,OACR,UAAW,EAAG,qCAAsC,EAAU,CAC9D,IAAK,GAAG,EAAM,IAAI,YAClB,CAEJ,EAAI,GAEF,EAAC,EAAA,CACC,eAAgB,EAAM,MAAM,WAAW,OAAO,CAC9C,WAAY,GAEZ,GAAI,GACJ,CAEJ,IAAM,GAAU,EAAM,SAEtB,MAAQ,GACN,EAAC,EAAA,CAAM,WAAY,GAAM,GAAI,GAAS,CAExC,IAAK,CAAE,YAAW,GAAG,KACnB,EAAC,KAAA,CACC,UAAW,EAAG,4CAA6C,EAAU,CACrE,GAAI,GACJ,CAEJ,IAAK,CAAE,YAAW,GAAG,KACnB,EAAC,KAAA,CACC,UAAW,EAAG,gCAAiC,EAAU,CACzD,GAAI,GACJ,CAEJ,IAAK,CAAE,YAAW,GAAG,KACnB,EAAC,KAAA,CACC,UAAW,EAAG,qCAAsC,EAAU,CAC9D,GAAI,GACJ,CAEJ,IAAK,CAAE,YAAW,GAAG,KACnB,EAAC,KAAA,CAAG,UAAW,EAAG,0BAA2B,EAAU,CAAE,GAAI,GAAS,CAExE,KAAO,GACL,EAAC,EAAA,CACC,GAAI,EACJ,UAAU,gCACV,gBAAgB,+EAChB,CAEJ,IAAK,EAAI,KACT,SAAU,CAAE,YAAW,GAAG,KACxB,EAAC,MAAA,CAAI,UAAW,EAAG,6BAA8B,EAAU,CAAE,GAAI,GAAS,CAE5E,QAAS,CAAE,YAAW,GAAG,KACvB,EAAC,MAAA,CAAI,UAAW,EAAG,SAAU,EAAU,CAAE,GAAI,GAAS,CAEzD,CACF,EAYY,GAA+C,CAC1D,WACA,aACA,SACA,aACA,sBACA,YACA,WAAY,EACZ,aACI,CACJ,IAAM,EAAkB,EAA2B,GAAc,GAAM,CAyDvE,OACE,EAAC,EAAA,CAAA,SACC,EAAC,EAAA,CAAA,SAzDmB,EAAe,EAAU,CAC/C,WAAY,CACV,GAAG,EAAgB,WAEnB,MAAO,CAAE,YAAW,WAAU,GAAG,KAAmC,CAElE,IAAM,EAAU,OAAO,GAAY,GAAG,CAAC,QAAQ,MAAO,GAAG,CAMzD,GAAI,CAFc,EAGhB,OACE,EAAC,OAAA,CAAK,UAAU,+GACb,GACI,CAKX,IAAM,EAAY,GAAW,QAAQ,iBAAkB,GAAG,EACxD,YAEF,OACE,EAAC,EAAA,CACC,GAAI,EACM,WACV,WAAY,GACA,sBAEX,GACI,EAIX,EAAI,GACF,EAAC,EAAA,CACC,eAAgB,EAAM,MAAM,WAAW,OAAO,CAC9C,WAAY,GACJ,SACR,MAAM,GACN,GAAI,EACJ,MAAM,QACN,CAEJ,GAAG,EACJ,CACD,QAAS,GAAW,EAAgB,QACpC,WAAY,GAAc,EAAgB,WAC1C,oBACE,GAAuB,EAAgB,oBACzC,UAAW,GAAa,EAAgB,UACzC,CAAC,CAAA,CAI8C,CAAA,CAC/B"}
1
+ {"version":3,"file":"MarkDownRender.mjs","names":[],"sources":["../../../../src/components/MarkDownRender/MarkDownRender.tsx"],"sourcesContent":["import type { LocalesValues } from '@intlayer/types';\nimport { cn } from '@utils/cn';\nimport type { ComponentProps, ComponentPropsWithoutRef, FC } from 'react';\nimport {\n type MarkdownRenderer as MarkdownRendererIntlayer,\n type RenderMarkdownProps,\n renderMarkdown,\n} from 'react-intlayer';\nimport type { BundledLanguage } from 'shiki/bundle/web';\nimport { H1, H2, H3, H4, H5, H6 } from '../Headers';\nimport { Code } from '../IDE/Code';\nimport { CodeProvider } from '../IDE/CodeContext';\nimport { Link } from '../Link';\nimport { Tab } from '../Tab';\nimport { TabProvider } from '../Tab/TabContext';\nimport { Table } from '../Table';\n\ntype MarkdownRendererProps = {\n children: string;\n isDarkMode?: boolean;\n locale?: LocalesValues;\n forceBlock?: boolean;\n preserveFrontmatter?: boolean;\n tagfilter?: boolean;\n components?: ComponentProps<typeof MarkdownRendererIntlayer>['components'];\n wrapper?: ComponentProps<typeof MarkdownRendererIntlayer>['wrapper'];\n};\n\nexport const getIntlayerMarkdownOptions: (\n isDarkMode: boolean\n) => RenderMarkdownProps = (isDarkMode) => ({\n components: {\n h1: (props) => <H1 isClickable={true} className=\"text-text\" {...props} />,\n h2: (props) => (\n <H2 isClickable={true} className=\"mt-16 text-text\" {...props} />\n ),\n h3: (props) => (\n <H3 isClickable={true} className=\"mt-5 text-text\" {...props} />\n ),\n h4: (props) => (\n <H4 isClickable={true} className=\"mt-3 text-text\" {...props} />\n ),\n h5: (props) => (\n <H5 isClickable={true} className=\"mt-3 text-text\" {...props} />\n ),\n h6: (props) => (\n <H6 isClickable={true} className=\"mt-3 text-text\" {...props} />\n ),\n strong: (props) => <strong className=\"text-text\" {...props} />,\n\n code: ({ className, children, ...rest }: ComponentProps<'code'>) => {\n // Ensure children is a string (Markdown renderer might pass ReactNodes)\n const content = String(children ?? '').replace(/\\n$/, '');\n\n // Determine if it is inline code or a code block\n // Code blocks usually have a className like 'language-ts'\n const isBlock = !!className;\n\n if (!isBlock) {\n return (\n <code className=\"rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm\">\n {content}\n </code>\n );\n }\n\n // Extract language from className (e.g., \"language-typescript\" -> \"typescript\")\n const language = (className?.replace(/lang(?:uage)?-/, '') ||\n 'plaintext') as BundledLanguage;\n\n return (\n <Code\n {...rest}\n language={language}\n showHeader={true}\n isDarkMode={isDarkMode} // Ensure this variable is available in scope\n >\n {content}\n </Code>\n );\n },\n blockquote: ({ className, ...props }) => (\n <blockquote\n className={cn(\n 'mt-5 gap-3 border-card border-l-4 pl-5 text-neutral',\n '[&_strong]:text-neutral',\n className\n )}\n {...props}\n />\n ),\n ul: ({ className, ...props }) => (\n <ul\n className={cn(\n 'mt-5 flex list-disc flex-col gap-3 pl-5 marker:text-neutral/80',\n className\n )}\n {...props}\n />\n ),\n ol: ({ className, ...props }) => (\n <ol\n className={cn(\n 'mt-5 flex list-decimal flex-col gap-3 pl-5 marker:text-neutral/80',\n className\n )}\n {...props}\n />\n ),\n img: ({ className, ...props }) => (\n <img\n {...props}\n alt={props.alt ?? ''}\n loading=\"lazy\"\n className={cn('max-h-[80vh] max-w-full rounded-md', className)}\n src={`${props.src}?raw=true`}\n />\n ),\n a: (props) => (\n // @ts-expect-error - label is not required in LinkProps\n <Link\n isExternalLink={props.href?.startsWith('http')}\n underlined={true}\n // locale={locale}\n {...props}\n />\n ),\n pre: (props) => props.children,\n\n table: (props: ComponentProps<typeof Table>) => (\n <Table isRollable={true} {...props} />\n ),\n th: ({ className, ...props }) => (\n <th\n className={cn('border-neutral border-b bg-neutral/10 p-4', className)}\n {...props}\n />\n ),\n tr: ({ className, ...props }) => (\n <tr\n className={cn('hover:/10 hover:bg-neutral/10', className)}\n {...props}\n />\n ),\n td: ({ className, ...props }) => (\n <td\n className={cn('border-neutral-500/50 border-b p-4', className)}\n {...props}\n />\n ),\n hr: ({ className, ...props }) => (\n <hr className={cn('mx-6 mt-16 text-neutral', className)} {...props} />\n ),\n Tabs: (props: ComponentProps<typeof Tab>) => (\n <Tab\n {...props}\n className=\"rounded-xl border border-card\"\n headerClassName=\"sticky rounded-xl top-24 z-5 bg-background/70 backdrop-blur overflow-x-auto\"\n />\n ),\n Tab: Tab.Item,\n Columns: ({ className, ...props }: ComponentPropsWithoutRef<'div'>) => (\n <div className={cn('flex gap-4 max-md:flex-col', className)} {...props} />\n ),\n Column: ({ className, ...props }: ComponentPropsWithoutRef<'div'>) => (\n <div className={cn('flex-1', className)} {...props} />\n ),\n },\n});\n\n/**\n * MarkdownRenderer Component\n *\n * A comprehensive markdown renderer that transforms markdown text into rich,\n * interactive HTML with custom styling and Intlayer integration. Supports\n * code syntax highlighting, responsive tables, internationalized links,\n * and automatic frontmatter stripping.\n *\n * @component\n */\nexport const MarkdownRenderer: FC<MarkdownRendererProps> = ({\n children,\n isDarkMode,\n locale,\n forceBlock,\n preserveFrontmatter,\n tagfilter,\n components: componentsProp,\n wrapper,\n}) => {\n const markdownOptions = getIntlayerMarkdownOptions(isDarkMode ?? false);\n\n const markdownContent = renderMarkdown(children, {\n components: {\n ...markdownOptions.components,\n // Pass dynamic props to components\n code: ({ className, children, ...rest }: ComponentProps<'code'>) => {\n // Ensure children is a string (Markdown renderer might pass ReactNodes)\n const content = String(children ?? '').replace(/\\n$/, '');\n\n // Determine if it is inline code or a code block\n // Code blocks usually have a className like 'language-ts'\n const isBlock = !!className;\n\n if (!isBlock) {\n return (\n <code className=\"rounded-md border border-neutral/30 bg-card/60 box-decoration-clone px-1.5 py-0.5 font-mono text-sm\">\n {content}\n </code>\n );\n }\n\n // Extract language from className (e.g., \"language-typescript\" -> \"typescript\")\n const language = (className?.replace(/lang(?:uage)?-/, '') ||\n 'plaintext') as BundledLanguage;\n\n return (\n <Code\n {...rest}\n language={language}\n showHeader={true}\n isDarkMode={isDarkMode} // Ensure this variable is available in scope\n >\n {content}\n </Code>\n );\n },\n\n a: (props) => (\n <Link\n isExternalLink={props.href?.startsWith('http')}\n underlined={true}\n locale={locale}\n label=\"\"\n {...props}\n color=\"text\"\n />\n ),\n ...componentsProp,\n },\n wrapper: wrapper ?? markdownOptions.wrapper,\n forceBlock: forceBlock ?? markdownOptions.forceBlock,\n preserveFrontmatter:\n preserveFrontmatter ?? markdownOptions.preserveFrontmatter,\n tagfilter: tagfilter ?? markdownOptions.tagfilter,\n });\n\n return (\n <CodeProvider>\n <TabProvider>{markdownContent}</TabProvider>\n </CodeProvider>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/MaxHeightSmoother/index.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { FC, HTMLAttributes, ReactNode } from 'react';\n\n/**\n * Props for the MaxHeightSmoother component\n */\ninterface MaxHeightSmootherProps extends HTMLAttributes<HTMLDivElement> {\n /** Content to render within the smoother container */\n children: ReactNode;\n /** Controls collapse state. When true, content is collapsed; when false, expanded; when undefined, relies on hover/focus behavior */\n isHidden?: boolean;\n /** Enable expand-on-hover behavior */\n isOverable?: boolean;\n /** Enable expand-on-focus behavior for accessibility and keyboard navigation */\n isFocusable?: boolean;\n /** Minimum height in pixels for the collapsed state */\n minHeight?: number;\n}\n\n/**\n * MaxHeightSmoother Component\n *\n * A sophisticated container component that provides smooth height transitions\n * for collapsible content. Uses CSS Grid's fractional rows to create fluid\n * animations without JavaScript height calculations, making it performant\n * and smooth across all devices and screen sizes.\n *\n * @component\n * @example\n * Basic controlled usage:\n * ```tsx\n * const [isCollapsed, setIsCollapsed] = useState(true);\n *\n * <MaxHeightSmoother isHidden={isCollapsed}>\n * <div>Your collapsible content here</div>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * Hover-triggered expansion:\n * ```tsx\n * <MaxHeightSmoother isOverable={true}>\n * <div>\n * <p>This content expands when you hover over the container.</p>\n * <p>Perfect for preview cards or tooltips.</p>\n * </div>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * Accessible focus-triggered expansion:\n * ```tsx\n * <MaxHeightSmoother isFocusable={true}>\n * <div>\n * <h3>Expandable Section</h3>\n * <p>Tab to focus this container to expand the content.</p>\n * <p>Great for accessible progressive disclosure.</p>\n * </div>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * With minimum height for preview:\n * ```tsx\n * <MaxHeightSmoother\n * isOverable={true}\n * minHeight={100}\n * className=\"border rounded-lg p-4\"\n * >\n * <div>\n * <h3>Article Preview</h3>\n * <p>This article preview shows the first few lines...</p>\n * <p>Hover to see the full content with smooth expansion.</p>\n * <p>The minHeight ensures some content is always visible.</p>\n * </div>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * Combined hover and focus behavior:\n * ```tsx\n * <MaxHeightSmoother\n * isOverable={true}\n * isFocusable={true}\n * minHeight={80}\n * >\n * <div>\n * <h4>Interactive Card</h4>\n * <p>Expands on both hover and keyboard focus.</p>\n * <p>Accessible to both mouse and keyboard users.</p>\n * </div>\n * </MaxHeightSmoother>\n * ```\n *\n * Features:\n * - Smooth CSS Grid-based height transitions (700ms duration)\n * - Three interaction modes: controlled, hover, and focus\n * - Configurable minimum height for collapsed state\n * - Accessible keyboard navigation support\n * - Overflow handling with smooth scrolling\n * - ARIA attributes for screen reader compatibility\n * - Performance-optimized with CSS-only animations\n * - Responsive design that works on all screen sizes\n *\n * Animation Technique:\n * Uses CSS Grid `grid-rows-[0fr]` to `grid-rows-[1fr]` transitions\n * instead of height animations, which provides:\n * - Smooth animations without knowing content height\n * - Better performance (no layout recalculations)\n * - More reliable across different content types\n * - Automatic adaptation to dynamic content changes\n *\n * Interaction Modes:\n * 1. **Controlled**: Use `isHidden` prop for external state control\n * 2. **Hover**: Set `isOverable={true}` for mouse hover expansion\n * 3. **Focus**: Set `isFocusable={true}` for keyboard focus expansion\n * 4. **Combined**: Use both `isOverable` and `isFocusable` together\n *\n * Accessibility Features:\n * - `role=\"button\"` when focusable for proper screen reader context\n * - `tabIndex={0}` for keyboard navigation when focusable\n * - `aria-hidden` attribute for screen reader control\n * - Semantic focus management with focus-within pseudo-class\n * - High contrast focus indicators\n * - Respects prefers-reduced-motion settings\n *\n * Use Cases:\n * - FAQ accordions and expandable sections\n * - Article previews and read-more functionality\n * - Card hover effects and content previews\n * - Progressive disclosure for complex forms\n * - Tooltip and popover content containers\n * - Mobile-friendly collapsible navigation\n * - Dashboard widget expansion\n * - Email preview in mail clients\n *\n * Performance Considerations:\n * - Pure CSS animations (no JavaScript timer overhead)\n * - GPU acceleration through transform-based animations\n * - Minimal repaints and layout shifts\n * - Efficient event handling with CSS pseudo-classes\n * - No DOM measurements or calculations required\n *\n * @param props - Component props extending HTML div attributes\n * @param props.children - Content to render within the container\n * @param props.isHidden - Controlled collapse state (true=collapsed, false=expanded)\n * @param props.isOverable - Enable hover-to-expand behavior\n * @param props.isFocusable - Enable focus-to-expand behavior with keyboard navigation\n * @param props.minHeight - Minimum height in pixels for collapsed state (default: 0)\n * @param props.className - Additional CSS classes for styling\n * @param props.style - Inline styles (note: minHeight style will be applied)\n * @param props.role - ARIA role (automatically set to \"button\" when focusable)\n * @param props.tabIndex - Tab index (automatically set to 0 when focusable)\n * @param props.aria-hidden - ARIA hidden state (controlled by isHidden when focusable)\n * @param props.onClick - Click event handler\n * @param props.onMouseEnter - Mouse enter event handler\n * @param props.onMouseLeave - Mouse leave event handler\n * @param props.onFocus - Focus event handler\n * @param props.onBlur - Blur event handler\n * @param props...rest - All other standard HTML div attributes\n *\n * @returns A smooth height-transitioning container with configurable interaction modes\n */\nexport const MaxHeightSmoother: FC<MaxHeightSmootherProps> = ({\n children,\n isHidden,\n className = '',\n isOverable = false,\n isFocusable = false,\n minHeight = 0,\n ...props\n}) => (\n <div\n aria-hidden={isFocusable ? isHidden : undefined}\n tabIndex={isFocusable ? 0 : undefined}\n role={isFocusable ? 'button' : 'none'}\n className={cn(\n 'group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out',\n typeof isHidden !== 'undefined' &&\n !isHidden &&\n 'grid-rows-[1fr] overflow-x-auto',\n isOverable && 'hover:grid-rows-[1fr] hover:overflow-x-auto',\n isFocusable &&\n 'focus-within:grid-rows-[1fr] focus-within:overflow-x-auto focus:grid-rows-[1fr] focus:overflow-x-auto',\n className\n )}\n {...props}\n >\n <div\n style={{\n minHeight: `${minHeight}px`,\n }}\n className={cn(\n isOverable && 'group-hover/height-smoother:visible',\n isFocusable && 'group-focus/height-smoother:visible',\n className\n )}\n >\n {children}\n </div>\n </div>\n);\n"],"mappings":"gFAmKA,MAAa,GAAiD,CAC5D,WACA,WACA,YAAY,GACZ,aAAa,GACb,cAAc,GACd,YAAY,EACZ,GAAG,KAEH,EAAC,MAAA,CACC,cAAa,EAAc,EAAW,IAAA,GACtC,SAAU,EAAc,EAAI,IAAA,GAC5B,KAAM,EAAc,SAAW,OAC/B,UAAW,EACT,qHACO,IAAa,QAClB,CAAC,GACD,kCACF,GAAc,8CACd,GACE,wGACF,EACD,CACD,GAAI,WAEJ,EAAC,MAAA,CACC,MAAO,CACL,UAAW,GAAG,EAAU,IACzB,CACD,UAAW,EACT,GAAc,sCACd,GAAe,sCACf,EACD,CAEA,YACG,EACF"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/MaxHeightSmoother/index.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { FC, HTMLAttributes, ReactNode } from 'react';\n\n/**\n * Props for the MaxHeightSmoother component\n */\ninterface MaxHeightSmootherProps extends HTMLAttributes<HTMLDivElement> {\n /** Content to render within the smoother container */\n children: ReactNode;\n /** Controls collapse state. When true, content is collapsed; when false, expanded; when undefined, relies on hover/focus behavior */\n isHidden?: boolean;\n /** Enable expand-on-hover behavior */\n isOverable?: boolean;\n /** Enable expand-on-focus behavior for accessibility and keyboard navigation */\n isFocusable?: boolean;\n /** Minimum height in pixels for the collapsed state */\n minHeight?: number;\n}\n\n/**\n * MaxHeightSmoother Component\n *\n * A sophisticated container component that provides smooth height transitions\n * for collapsible content. Uses CSS Grid's fractional rows to create fluid\n * animations without JavaScript height calculations, making it performant\n * and smooth across all devices and screen sizes.\n *\n * @component\n * @example\n * Basic controlled usage:\n * ```tsx\n * const [isCollapsed, setIsCollapsed] = useState(true);\n *\n * <MaxHeightSmoother isHidden={isCollapsed}>\n * <div>Your collapsible content here</div>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * Hover-triggered expansion:\n * ```tsx\n * <MaxHeightSmoother isOverable={true}>\n * <div>\n * <p>This content expands when you hover over the container.</p>\n * <p>Perfect for preview cards or tooltips.</p>\n * </div>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * Accessible focus-triggered expansion:\n * ```tsx\n * <MaxHeightSmoother isFocusable={true}>\n * <div>\n * <h3>Expandable Section</h3>\n * <p>Tab to focus this container to expand the content.</p>\n * <p>Great for accessible progressive disclosure.</p>\n * </div>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * With minimum height for preview:\n * ```tsx\n * <MaxHeightSmoother\n * isOverable={true}\n * minHeight={100}\n * className=\"border rounded-lg p-4\"\n * >\n * <div>\n * <h3>Article Preview</h3>\n * <p>This article preview shows the first few lines...</p>\n * <p>Hover to see the full content with smooth expansion.</p>\n * <p>The minHeight ensures some content is always visible.</p>\n * </div>\n * </MaxHeightSmoother>\n * ```\n *\n * @example\n * Combined hover and focus behavior:\n * ```tsx\n * <MaxHeightSmoother\n * isOverable={true}\n * isFocusable={true}\n * minHeight={80}\n * >\n * <div>\n * <h4>Interactive Card</h4>\n * <p>Expands on both hover and keyboard focus.</p>\n * <p>Accessible to both mouse and keyboard users.</p>\n * </div>\n * </MaxHeightSmoother>\n * ```\n *\n * Features:\n * - Smooth CSS Grid-based height transitions (700ms duration)\n * - Three interaction modes: controlled, hover, and focus\n * - Configurable minimum height for collapsed state\n * - Accessible keyboard navigation support\n * - Overflow handling with smooth scrolling\n * - ARIA attributes for screen reader compatibility\n * - Performance-optimized with CSS-only animations\n * - Responsive design that works on all screen sizes\n *\n * Animation Technique:\n * Uses CSS Grid `grid-rows-[0fr]` to `grid-rows-[1fr]` transitions\n * instead of height animations, which provides:\n * - Smooth animations without knowing content height\n * - Better performance (no layout recalculations)\n * - More reliable across different content types\n * - Automatic adaptation to dynamic content changes\n *\n * Interaction Modes:\n * 1. **Controlled**: Use `isHidden` prop for external state control\n * 2. **Hover**: Set `isOverable={true}` for mouse hover expansion\n * 3. **Focus**: Set `isFocusable={true}` for keyboard focus expansion\n * 4. **Combined**: Use both `isOverable` and `isFocusable` together\n *\n * Accessibility Features:\n * - `role=\"button\"` when focusable for proper screen reader context\n * - `tabIndex={0}` for keyboard navigation when focusable\n * - `aria-hidden` attribute for screen reader control\n * - Semantic focus management with focus-within pseudo-class\n * - High contrast focus indicators\n * - Respects prefers-reduced-motion settings\n *\n * Use Cases:\n * - FAQ accordions and expandable sections\n * - Article previews and read-more functionality\n * - Card hover effects and content previews\n * - Progressive disclosure for complex forms\n * - Tooltip and popover content containers\n * - Mobile-friendly collapsible navigation\n * - Dashboard widget expansion\n * - Email preview in mail clients\n *\n * Performance Considerations:\n * - Pure CSS animations (no JavaScript timer overhead)\n * - GPU acceleration through transform-based animations\n * - Minimal repaints and layout shifts\n * - Efficient event handling with CSS pseudo-classes\n * - No DOM measurements or calculations required\n *\n * @param props - Component props extending HTML div attributes\n * @param props.children - Content to render within the container\n * @param props.isHidden - Controlled collapse state (true=collapsed, false=expanded)\n * @param props.isOverable - Enable hover-to-expand behavior\n * @param props.isFocusable - Enable focus-to-expand behavior with keyboard navigation\n * @param props.minHeight - Minimum height in pixels for collapsed state (default: 0)\n * @param props.className - Additional CSS classes for styling\n * @param props.style - Inline styles (note: minHeight style will be applied)\n * @param props.role - ARIA role (automatically set to \"button\" when focusable)\n * @param props.tabIndex - Tab index (automatically set to 0 when focusable)\n * @param props.aria-hidden - ARIA hidden state (controlled by isHidden when focusable)\n * @param props.onClick - Click event handler\n * @param props.onMouseEnter - Mouse enter event handler\n * @param props.onMouseLeave - Mouse leave event handler\n * @param props.onFocus - Focus event handler\n * @param props.onBlur - Blur event handler\n * @param props...rest - All other standard HTML div attributes\n *\n * @returns A smooth height-transitioning container with configurable interaction modes\n */\nexport const MaxHeightSmoother: FC<MaxHeightSmootherProps> = ({\n children,\n isHidden,\n className = '',\n isOverable = false,\n isFocusable = false,\n minHeight = 0,\n ...props\n}) => (\n <div\n aria-hidden={isFocusable ? isHidden : undefined}\n tabIndex={isFocusable ? 0 : undefined}\n role={isFocusable ? 'button' : 'none'}\n className={cn(\n 'group/height-smoother relative grid w-full grid-rows-[0fr] overflow-hidden transition-all duration-700 ease-in-out',\n typeof isHidden !== 'undefined' &&\n !isHidden &&\n 'grid-rows-[1fr] overflow-x-auto',\n isOverable && 'hover:grid-rows-[1fr] hover:overflow-x-auto',\n isFocusable &&\n 'focus-within:grid-rows-[1fr] focus-within:overflow-x-auto focus:grid-rows-[1fr] focus:overflow-x-auto',\n className\n )}\n {...props}\n >\n <div\n style={{\n minHeight: `${minHeight}px`,\n }}\n className={cn(\n isOverable && 'group-hover/height-smoother:visible',\n isFocusable && 'group-focus/height-smoother:visible',\n className\n )}\n >\n {children}\n </div>\n </div>\n);\n"],"mappings":"gFAmKA,MAAa,GAAiD,CAC5D,WACA,WACA,YAAY,GACZ,aAAa,GACb,cAAc,GACd,YAAY,EACZ,GAAG,KAEH,EAAC,MAAD,CACE,cAAa,EAAc,EAAW,IAAA,GACtC,SAAU,EAAc,EAAI,IAAA,GAC5B,KAAM,EAAc,SAAW,OAC/B,UAAW,EACT,qHACO,IAAa,QAClB,CAAC,GACD,kCACF,GAAc,8CACd,GACE,wGACF,EACD,CACD,GAAI,WAEJ,EAAC,MAAD,CACE,MAAO,CACL,UAAW,GAAG,EAAU,IACzB,CACD,UAAW,EACT,GAAc,sCACd,GAAe,sCACf,EACD,CAEA,WACG,CAAA,CACF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/MaxWidthSmoother/index.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { HTMLAttributes } from 'react';\n\ntype Align = 'left' | 'right';\n\ntype MaxWidthSmootherProps = HTMLAttributes<HTMLDivElement> & {\n isHidden: boolean;\n minWidth?: number;\n align?: Align;\n};\n\nexport const MaxWidthSmoother = ({\n children,\n isHidden,\n minWidth = 0,\n align = 'left',\n className,\n ...props\n}: MaxWidthSmootherProps) => (\n <div\n className={cn(\n 'relative grid h-full grid-cols-[0fr] overflow-x-hidden overflow-y-hidden transition-all duration-500 ease-in-out',\n isHidden ? '' : 'grid-cols-[1fr]',\n className\n )}\n aria-hidden={isHidden}\n inert={isHidden ? true : undefined}\n {...props}\n >\n <div\n style={{\n minWidth: `${minWidth}px`,\n }}\n className={cn(align === 'right' && 'ml-auto')}\n >\n {children}\n </div>\n </div>\n);\n"],"mappings":"gFAWA,MAAa,GAAoB,CAC/B,WACA,WACA,WAAW,EACX,QAAQ,OACR,YACA,GAAG,KAEH,EAAC,MAAA,CACC,UAAW,EACT,mHACA,EAAW,GAAK,kBAChB,EACD,CACD,cAAa,EACb,MAAO,EAAW,GAAO,IAAA,GACzB,GAAI,WAEJ,EAAC,MAAA,CACC,MAAO,CACL,SAAU,GAAG,EAAS,IACvB,CACD,UAAW,EAAG,IAAU,SAAW,UAAU,CAE5C,YACG,EACF"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/MaxWidthSmoother/index.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { HTMLAttributes } from 'react';\n\ntype Align = 'left' | 'right';\n\ntype MaxWidthSmootherProps = HTMLAttributes<HTMLDivElement> & {\n isHidden: boolean;\n minWidth?: number;\n align?: Align;\n};\n\nexport const MaxWidthSmoother = ({\n children,\n isHidden,\n minWidth = 0,\n align = 'left',\n className,\n ...props\n}: MaxWidthSmootherProps) => (\n <div\n className={cn(\n 'relative grid h-full grid-cols-[0fr] overflow-x-hidden overflow-y-hidden transition-all duration-500 ease-in-out',\n isHidden ? '' : 'grid-cols-[1fr]',\n className\n )}\n aria-hidden={isHidden}\n inert={isHidden ? true : undefined}\n {...props}\n >\n <div\n style={{\n minWidth: `${minWidth}px`,\n }}\n className={cn(align === 'right' && 'ml-auto')}\n >\n {children}\n </div>\n </div>\n);\n"],"mappings":"gFAWA,MAAa,GAAoB,CAC/B,WACA,WACA,WAAW,EACX,QAAQ,OACR,YACA,GAAG,KAEH,EAAC,MAAD,CACE,UAAW,EACT,mHACA,EAAW,GAAK,kBAChB,EACD,CACD,cAAa,EACb,MAAO,EAAW,GAAO,IAAA,GACzB,GAAI,WAEJ,EAAC,MAAD,CACE,MAAO,CACL,SAAU,GAAG,EAAS,IACvB,CACD,UAAW,EAAG,IAAU,SAAW,UAAU,CAE5C,WACG,CAAA,CACF,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Modal.mjs","names":["m"],"sources":["../../../../src/components/Modal/Modal.tsx"],"sourcesContent":["'use client';\n\nimport { useGetElementOrWindow, useScrollBlockage } from '@hooks/index';\nimport { cn } from '@utils/cn';\nimport { cva } from 'class-variance-authority';\nimport { motion as m } from 'framer-motion';\nimport { X } from 'lucide-react';\nimport { type FC, type ReactNode, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button, ButtonColor, ButtonSize, ButtonVariant } from '../Button';\nimport { Container, type ContainerProps } from '../Container';\nimport { H3 } from '../Headers';\n\n/**\n * Enumeration of available modal sizes\n */\nexport enum ModalSize {\n SM = 'sm',\n MD = 'md',\n LG = 'lg',\n XL = 'xl',\n UNSET = 'unset',\n}\n\ntype ModalProps = {\n children: ReactNode;\n isOpen: boolean;\n onClose?: () => void;\n container?: HTMLElement;\n disableScroll?: boolean;\n hasCloseButton?: boolean;\n title?: ReactNode;\n size?: ModalSize | `${ModalSize}`;\n /**\n * Defines if the modal content area is scrollable.\n */\n isScrollable?: boolean | 'x' | 'y';\n} & Pick<\n ContainerProps,\n | 'className'\n | 'transparency'\n | 'border'\n | 'background'\n | 'roundedSize'\n | 'borderColor'\n | 'padding'\n | 'separator'\n | 'gap'\n>;\n\nconst modalVariants = cva(\n 'flex cursor-default flex-col overflow-hidden shadow-sm',\n {\n variants: {\n size: {\n sm: 'h-auto max-h-[30vh] w-[95vw] max-w-xl',\n md: 'h-auto max-h-[50vh] w-[95vw] max-w-xl',\n lg: 'h-auto max-h-[70vh] w-[95vw] max-w-4xl',\n xl: 'h-auto max-h-[95vh] w-[95vw] max-w-6xl',\n unset: 'h-auto max-h-[95vh] w-[95vw]',\n },\n },\n defaultVariants: {\n size: 'unset',\n },\n }\n);\n\n// Mapped from Container/index.tsx to apply internally\nconst contentPaddingVariants = {\n none: 'p-0',\n sm: 'px-2 py-4',\n md: 'px-4 py-6',\n lg: 'px-6 py-8',\n xl: 'px-8 py-10',\n '2xl': 'px-10 py-12',\n};\n\nconst MotionModal = m.create(Container);\n\n/**\n * Modal Component\n *\n * A highly customizable modal dialog component with portal rendering, Framer Motion animations,\n * and comprehensive accessibility features. Supports multiple size variants and scroll management.\n *\n * Features:\n * - Portal rendering to any container element (defaults to document.body)\n * - Smooth animations with Framer Motion\n * - Size variants: SM, MD, LG, XL, UNSET with responsive sizing\n * - Optional title and close button\n * - Background scroll prevention\n * - Click-outside-to-close functionality\n * - Full accessibility support with ARIA attributes\n * - Keyboard navigation support (ESC to close)\n * - Extensible styling with Container props\n *\n * @example\n * Basic usage:\n * ```jsx\n * <Modal isOpen={isModalOpen} onClose={() => setIsModalOpen(false)}>\n * <p>Modal content goes here</p>\n * </Modal>\n * ```\n *\n * @example\n * With title and close button:\n * ```jsx\n * <Modal\n * isOpen={isOpen}\n * onClose={onClose}\n * title=\"Confirm Action\"\n * hasCloseButton\n * size={ModalSize.LG}\n * >\n * <div>\n * <p>Are you sure you want to continue?</p>\n * <Button onClick={onConfirm}>Confirm</Button>\n * </div>\n * </Modal>\n * ```\n *\n * @example\n * Custom container and styling:\n * ```jsx\n * <Modal\n * isOpen={isOpen}\n * onClose={onClose}\n * container={customContainer}\n * background=\"card\"\n * padding=\"lg\"\n * border=\"default\"\n * >\n * Content with custom styling\n * </Modal>\n * ```\n *\n * Accessibility Notes:\n * - Modal receives focus when opened\n * - Background content is hidden from screen readers when modal is open\n * - ESC key closes modal (handled by browser for role=\"dialog\")\n * - Click outside modal closes it\n * - Close button has descriptive label for screen readers\n *\n * @param props - Modal component props\n * @returns JSX element rendered via createPortal\n */\nexport const Modal: FC<ModalProps> = ({\n children,\n isOpen,\n container,\n onClose,\n hasCloseButton = false,\n title,\n size = ModalSize.MD,\n className,\n isScrollable = false, // Enable the scroll of the content\n disableScroll = true, // Disable the scroll of the background\n padding = 'none', // Extract padding here\n ...props\n}) => {\n const containerElement = useGetElementOrWindow(container);\n\n useScrollBlockage({ key: 'modal', disableScroll: isOpen && disableScroll });\n\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen && onClose) {\n onClose();\n }\n };\n document.addEventListener('keydown', handleEscape);\n return () => {\n document.removeEventListener('keydown', handleEscape);\n };\n }, [isOpen, onClose]);\n\n if (!containerElement) return <></>;\n\n const hasTitle = Boolean(title);\n\n // Determine the class for the inner content based on the padding prop\n const contentPaddingClass =\n contentPaddingVariants[\n (padding as keyof typeof contentPaddingVariants) || 'none'\n ];\n\n return createPortal(\n <m.div\n className=\"invisible fixed top-0 left-0 z-50 flex size-full cursor-pointer items-center justify-center overflow-hidden bg-background/40 backdrop-blur\"\n animate={isOpen ? 'visible' : 'invisible'}\n variants={{\n visible: {\n opacity: 1,\n visibility: 'visible',\n transition: { duration: 0.1, when: 'beforeChildren' },\n },\n invisible: {\n opacity: 0,\n visibility: 'hidden',\n transition: { duration: 0.1, when: 'afterChildren' },\n },\n }}\n onClick={(e) => {\n e.stopPropagation();\n onClose?.();\n }}\n aria-hidden={!isOpen}\n >\n <MotionModal\n onClick={(e) => e.stopPropagation()}\n initial={{ scale: isOpen ? 0.5 : 1 }}\n animate={{ scale: isOpen ? 1 : 0.5 }}\n transition={{ duration: 0.3 }}\n className={modalVariants({ size, className })}\n role=\"dialog\"\n aria-modal\n roundedSize=\"4xl\"\n // Force the outer container to have no padding so scrollbars hit the edge\n padding=\"none\"\n {...props}\n >\n {/* HEADER SECTION */}\n <div\n className={cn(\n 'relative flex-none px-4 pt-4',\n hasCloseButton && hasTitle\n ? `flex items-start`\n : hasCloseButton\n ? `flex justify-end`\n : hasTitle\n ? `items-center`\n : `hidden`\n )}\n >\n {hasTitle && (\n <H3 className=\"mb-2 ml-1 flex items-center justify-center font-bold text-lg\">\n {title}\n </H3>\n )}\n {hasCloseButton && (\n <Button\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.TEXT}\n label=\"Close modal\"\n className=\"ml-auto\"\n onClick={(e) => {\n e.stopPropagation();\n onClose?.();\n }}\n Icon={X}\n size={ButtonSize.ICON_MD}\n />\n )}\n </div>\n\n {/* SCROLLABLE WRAPPER - Full width, no padding */}\n <div\n className={cn(\n 'flex min-h-0 w-full flex-1 flex-col',\n // Scrollbars will now appear at the very edge of this div (the modal edge)\n isScrollable === true && 'overflow-auto',\n isScrollable === 'y' && 'overflow-y-auto overflow-x-hidden',\n isScrollable === 'x' && 'overflow-x-auto overflow-y-hidden',\n !isScrollable && 'overflow-visible'\n )}\n >\n {/* CONTENT PADDING WRAPPER */}\n {/* We apply the padding class here, effectively putting content inside the scroll area */}\n <div\n className={cn(\n 'flex h-full w-full flex-1 flex-col',\n contentPaddingClass\n )}\n >\n {children}\n </div>\n </div>\n </MotionModal>\n </m.div>,\n containerElement\n );\n};\n"],"mappings":"gpBAgBA,IAAY,EAAA,SAAA,EAAL,OACL,GAAA,GAAA,KACA,EAAA,GAAA,KACA,EAAA,GAAA,KACA,EAAA,GAAA,KACA,EAAA,MAAA,eA6BF,MAAM,EAAgB,EACpB,yDACA,CACE,SAAU,CACR,KAAM,CACJ,GAAI,wCACJ,GAAI,wCACJ,GAAI,yCACJ,GAAI,yCACJ,MAAO,+BACR,CACF,CACD,gBAAiB,CACf,KAAM,QACP,CACF,CACF,CAGK,EAAyB,CAC7B,KAAM,MACN,GAAI,YACJ,GAAI,YACJ,GAAI,YACJ,GAAI,aACJ,MAAO,cACR,CAEK,EAAcA,EAAE,OAAO,EAAU,CAqE1B,GAAyB,CACpC,WACA,SACA,YACA,UACA,iBAAiB,GACjB,QACA,OAAO,EAAU,GACjB,YACA,eAAe,GACf,gBAAgB,GAChB,UAAU,OACV,GAAG,KACC,CACJ,IAAM,EAAmB,EAAsB,EAAU,CAgBzD,GAdA,EAAkB,CAAE,IAAK,QAAS,cAAe,GAAU,EAAe,CAAC,CAE3E,MAAgB,CACd,IAAM,EAAgB,GAAyB,CACzC,EAAM,MAAQ,UAAY,GAAU,GACtC,GAAS,EAIb,OADA,SAAS,iBAAiB,UAAW,EAAa,KACrC,CACX,SAAS,oBAAoB,UAAW,EAAa,GAEtD,CAAC,EAAQ,EAAQ,CAAC,CAEjB,CAAC,EAAkB,OAAO,EAAA,EAAA,EAAA,CAAK,CAEnC,IAAM,EAAW,EAAQ,EAGnB,EACJ,EACG,GAAmD,QAGxD,OAAO,EACL,EAACA,EAAE,IAAA,CACD,UAAU,6IACV,QAAS,EAAS,UAAY,YAC9B,SAAU,CACR,QAAS,CACP,QAAS,EACT,WAAY,UACZ,WAAY,CAAE,SAAU,GAAK,KAAM,iBAAkB,CACtD,CACD,UAAW,CACT,QAAS,EACT,WAAY,SACZ,WAAY,CAAE,SAAU,GAAK,KAAM,gBAAiB,CACrD,CACF,CACD,QAAU,GAAM,CACd,EAAE,iBAAiB,CACnB,KAAW,EAEb,cAAa,CAAC,WAEd,EAAC,EAAA,CACC,QAAU,GAAM,EAAE,iBAAiB,CACnC,QAAS,CAAE,MAAO,EAAS,GAAM,EAAG,CACpC,QAAS,CAAE,MAAO,EAAS,EAAI,GAAK,CACpC,WAAY,CAAE,SAAU,GAAK,CAC7B,UAAW,EAAc,CAAE,OAAM,YAAW,CAAC,CAC7C,KAAK,SACL,aAAA,GACA,YAAY,MAEZ,QAAQ,OACR,GAAI,YAGJ,EAAC,MAAA,CACC,UAAW,EACT,+BACA,GAAkB,EACd,mBACA,EACE,mBACA,EACE,eACA,SACT,WAEA,GACC,EAAC,EAAA,CAAG,UAAU,wEACX,GACE,CAEN,GACC,EAAC,EAAA,CACC,QAAS,EAAc,UACvB,MAAO,EAAY,KACnB,MAAM,cACN,UAAU,UACV,QAAU,GAAM,CACd,EAAE,iBAAiB,CACnB,KAAW,EAEb,KAAM,EACN,KAAM,EAAW,SACjB,CAAA,EAEA,CAGN,EAAC,MAAA,CACC,UAAW,EACT,sCAEA,IAAiB,IAAQ,gBACzB,IAAiB,KAAO,oCACxB,IAAiB,KAAO,oCACxB,CAAC,GAAgB,mBAClB,UAID,EAAC,MAAA,CACC,UAAW,EACT,qCACA,EACD,CAEA,YACG,EACF,CAAA,EACM,EACR,CACR,EACD"}
1
+ {"version":3,"file":"Modal.mjs","names":["m"],"sources":["../../../../src/components/Modal/Modal.tsx"],"sourcesContent":["'use client';\n\nimport { useGetElementOrWindow, useScrollBlockage } from '@hooks/index';\nimport { cn } from '@utils/cn';\nimport { cva } from 'class-variance-authority';\nimport { motion as m } from 'framer-motion';\nimport { X } from 'lucide-react';\nimport { type FC, type ReactNode, useEffect } from 'react';\nimport { createPortal } from 'react-dom';\nimport { Button, ButtonColor, ButtonSize, ButtonVariant } from '../Button';\nimport { Container, type ContainerProps } from '../Container';\nimport { H3 } from '../Headers';\n\n/**\n * Enumeration of available modal sizes\n */\nexport enum ModalSize {\n SM = 'sm',\n MD = 'md',\n LG = 'lg',\n XL = 'xl',\n UNSET = 'unset',\n}\n\ntype ModalProps = {\n children: ReactNode;\n isOpen: boolean;\n onClose?: () => void;\n container?: HTMLElement;\n disableScroll?: boolean;\n hasCloseButton?: boolean;\n title?: ReactNode;\n size?: ModalSize | `${ModalSize}`;\n /**\n * Defines if the modal content area is scrollable.\n */\n isScrollable?: boolean | 'x' | 'y';\n} & Pick<\n ContainerProps,\n | 'className'\n | 'transparency'\n | 'border'\n | 'background'\n | 'roundedSize'\n | 'borderColor'\n | 'padding'\n | 'separator'\n | 'gap'\n>;\n\nconst modalVariants = cva(\n 'flex cursor-default flex-col overflow-hidden shadow-sm',\n {\n variants: {\n size: {\n sm: 'h-auto max-h-[30vh] w-[95vw] max-w-xl',\n md: 'h-auto max-h-[50vh] w-[95vw] max-w-xl',\n lg: 'h-auto max-h-[70vh] w-[95vw] max-w-4xl',\n xl: 'h-auto max-h-[95vh] w-[95vw] max-w-6xl',\n unset: 'h-auto max-h-[95vh] w-[95vw]',\n },\n },\n defaultVariants: {\n size: 'unset',\n },\n }\n);\n\n// Mapped from Container/index.tsx to apply internally\nconst contentPaddingVariants = {\n none: 'p-0',\n sm: 'px-2 py-4',\n md: 'px-4 py-6',\n lg: 'px-6 py-8',\n xl: 'px-8 py-10',\n '2xl': 'px-10 py-12',\n};\n\nconst MotionModal = m.create(Container);\n\n/**\n * Modal Component\n *\n * A highly customizable modal dialog component with portal rendering, Framer Motion animations,\n * and comprehensive accessibility features. Supports multiple size variants and scroll management.\n *\n * Features:\n * - Portal rendering to any container element (defaults to document.body)\n * - Smooth animations with Framer Motion\n * - Size variants: SM, MD, LG, XL, UNSET with responsive sizing\n * - Optional title and close button\n * - Background scroll prevention\n * - Click-outside-to-close functionality\n * - Full accessibility support with ARIA attributes\n * - Keyboard navigation support (ESC to close)\n * - Extensible styling with Container props\n *\n * @example\n * Basic usage:\n * ```jsx\n * <Modal isOpen={isModalOpen} onClose={() => setIsModalOpen(false)}>\n * <p>Modal content goes here</p>\n * </Modal>\n * ```\n *\n * @example\n * With title and close button:\n * ```jsx\n * <Modal\n * isOpen={isOpen}\n * onClose={onClose}\n * title=\"Confirm Action\"\n * hasCloseButton\n * size={ModalSize.LG}\n * >\n * <div>\n * <p>Are you sure you want to continue?</p>\n * <Button onClick={onConfirm}>Confirm</Button>\n * </div>\n * </Modal>\n * ```\n *\n * @example\n * Custom container and styling:\n * ```jsx\n * <Modal\n * isOpen={isOpen}\n * onClose={onClose}\n * container={customContainer}\n * background=\"card\"\n * padding=\"lg\"\n * border=\"default\"\n * >\n * Content with custom styling\n * </Modal>\n * ```\n *\n * Accessibility Notes:\n * - Modal receives focus when opened\n * - Background content is hidden from screen readers when modal is open\n * - ESC key closes modal (handled by browser for role=\"dialog\")\n * - Click outside modal closes it\n * - Close button has descriptive label for screen readers\n *\n * @param props - Modal component props\n * @returns JSX element rendered via createPortal\n */\nexport const Modal: FC<ModalProps> = ({\n children,\n isOpen,\n container,\n onClose,\n hasCloseButton = false,\n title,\n size = ModalSize.MD,\n className,\n isScrollable = false, // Enable the scroll of the content\n disableScroll = true, // Disable the scroll of the background\n padding = 'none', // Extract padding here\n ...props\n}) => {\n const containerElement = useGetElementOrWindow(container);\n\n useScrollBlockage({ key: 'modal', disableScroll: isOpen && disableScroll });\n\n useEffect(() => {\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape' && isOpen && onClose) {\n onClose();\n }\n };\n document.addEventListener('keydown', handleEscape);\n return () => {\n document.removeEventListener('keydown', handleEscape);\n };\n }, [isOpen, onClose]);\n\n if (!containerElement) return <></>;\n\n const hasTitle = Boolean(title);\n\n // Determine the class for the inner content based on the padding prop\n const contentPaddingClass =\n contentPaddingVariants[\n (padding as keyof typeof contentPaddingVariants) || 'none'\n ];\n\n return createPortal(\n <m.div\n className=\"invisible fixed top-0 left-0 z-50 flex size-full cursor-pointer items-center justify-center overflow-hidden bg-background/40 backdrop-blur\"\n animate={isOpen ? 'visible' : 'invisible'}\n variants={{\n visible: {\n opacity: 1,\n visibility: 'visible',\n transition: { duration: 0.1, when: 'beforeChildren' },\n },\n invisible: {\n opacity: 0,\n visibility: 'hidden',\n transition: { duration: 0.1, when: 'afterChildren' },\n },\n }}\n onClick={(e) => {\n e.stopPropagation();\n onClose?.();\n }}\n aria-hidden={!isOpen}\n >\n <MotionModal\n onClick={(e) => e.stopPropagation()}\n initial={{ scale: isOpen ? 0.5 : 1 }}\n animate={{ scale: isOpen ? 1 : 0.5 }}\n transition={{ duration: 0.3 }}\n className={modalVariants({ size, className })}\n role=\"dialog\"\n aria-modal\n roundedSize=\"4xl\"\n // Force the outer container to have no padding so scrollbars hit the edge\n padding=\"none\"\n {...props}\n >\n {/* HEADER SECTION */}\n <div\n className={cn(\n 'relative flex-none px-4 pt-4',\n hasCloseButton && hasTitle\n ? `flex items-start`\n : hasCloseButton\n ? `flex justify-end`\n : hasTitle\n ? `items-center`\n : `hidden`\n )}\n >\n {hasTitle && (\n <H3 className=\"mb-2 ml-1 flex items-center justify-center font-bold text-lg\">\n {title}\n </H3>\n )}\n {hasCloseButton && (\n <Button\n variant={ButtonVariant.HOVERABLE}\n color={ButtonColor.TEXT}\n label=\"Close modal\"\n className=\"ml-auto\"\n onClick={(e) => {\n e.stopPropagation();\n onClose?.();\n }}\n Icon={X}\n size={ButtonSize.ICON_MD}\n />\n )}\n </div>\n\n {/* SCROLLABLE WRAPPER - Full width, no padding */}\n <div\n className={cn(\n 'flex min-h-0 w-full flex-1 flex-col',\n // Scrollbars will now appear at the very edge of this div (the modal edge)\n isScrollable === true && 'overflow-auto',\n isScrollable === 'y' && 'overflow-y-auto overflow-x-hidden',\n isScrollable === 'x' && 'overflow-x-auto overflow-y-hidden',\n !isScrollable && 'overflow-visible'\n )}\n >\n {/* CONTENT PADDING WRAPPER */}\n {/* We apply the padding class here, effectively putting content inside the scroll area */}\n <div\n className={cn(\n 'flex h-full w-full flex-1 flex-col',\n contentPaddingClass\n )}\n >\n {children}\n </div>\n </div>\n </MotionModal>\n </m.div>,\n containerElement\n );\n};\n"],"mappings":"gpBAgBA,IAAY,EAAL,SAAA,EAAA,OACL,GAAA,GAAA,KACA,EAAA,GAAA,KACA,EAAA,GAAA,KACA,EAAA,GAAA,KACA,EAAA,MAAA,cACD,CA4BD,MAAM,EAAgB,EACpB,yDACA,CACE,SAAU,CACR,KAAM,CACJ,GAAI,wCACJ,GAAI,wCACJ,GAAI,yCACJ,GAAI,yCACJ,MAAO,+BACR,CACF,CACD,gBAAiB,CACf,KAAM,QACP,CACF,CACF,CAGK,EAAyB,CAC7B,KAAM,MACN,GAAI,YACJ,GAAI,YACJ,GAAI,YACJ,GAAI,aACJ,MAAO,cACR,CAEK,EAAcA,EAAE,OAAO,EAAU,CAqE1B,GAAyB,CACpC,WACA,SACA,YACA,UACA,iBAAiB,GACjB,QACA,OAAO,EAAU,GACjB,YACA,eAAe,GACf,gBAAgB,GAChB,UAAU,OACV,GAAG,KACC,CACJ,IAAM,EAAmB,EAAsB,EAAU,CAgBzD,GAdA,EAAkB,CAAE,IAAK,QAAS,cAAe,GAAU,EAAe,CAAC,CAE3E,MAAgB,CACd,IAAM,EAAgB,GAAyB,CACzC,EAAM,MAAQ,UAAY,GAAU,GACtC,GAAS,EAIb,OADA,SAAS,iBAAiB,UAAW,EAAa,KACrC,CACX,SAAS,oBAAoB,UAAW,EAAa,GAEtD,CAAC,EAAQ,EAAQ,CAAC,CAEjB,CAAC,EAAkB,OAAO,EAAA,EAAA,EAAK,CAAA,CAEnC,IAAM,EAAW,EAAQ,EAGnB,EACJ,EACG,GAAmD,QAGxD,OAAO,EACL,EAACA,EAAE,IAAH,CACE,UAAU,6IACV,QAAS,EAAS,UAAY,YAC9B,SAAU,CACR,QAAS,CACP,QAAS,EACT,WAAY,UACZ,WAAY,CAAE,SAAU,GAAK,KAAM,iBAAkB,CACtD,CACD,UAAW,CACT,QAAS,EACT,WAAY,SACZ,WAAY,CAAE,SAAU,GAAK,KAAM,gBAAiB,CACrD,CACF,CACD,QAAU,GAAM,CACd,EAAE,iBAAiB,CACnB,KAAW,EAEb,cAAa,CAAC,WAEd,EAAC,EAAD,CACE,QAAU,GAAM,EAAE,iBAAiB,CACnC,QAAS,CAAE,MAAO,EAAS,GAAM,EAAG,CACpC,QAAS,CAAE,MAAO,EAAS,EAAI,GAAK,CACpC,WAAY,CAAE,SAAU,GAAK,CAC7B,UAAW,EAAc,CAAE,OAAM,YAAW,CAAC,CAC7C,KAAK,SACL,aAAA,GACA,YAAY,MAEZ,QAAQ,OACR,GAAI,WAXN,CAcE,EAAC,MAAD,CACE,UAAW,EACT,+BACA,GAAkB,EACd,mBACA,EACE,mBACA,EACE,eACA,SACT,UAVH,CAYG,GACC,EAAC,EAAD,CAAI,UAAU,wEACX,EACE,CAAA,CAEN,GACC,EAAC,EAAD,CACE,QAAS,EAAc,UACvB,MAAO,EAAY,KACnB,MAAM,cACN,UAAU,UACV,QAAU,GAAM,CACd,EAAE,iBAAiB,CACnB,KAAW,EAEb,KAAM,EACN,KAAM,EAAW,QACjB,CAAA,CAEA,GAGN,EAAC,MAAD,CACE,UAAW,EACT,sCAEA,IAAiB,IAAQ,gBACzB,IAAiB,KAAO,oCACxB,IAAiB,KAAO,oCACxB,CAAC,GAAgB,mBAClB,UAID,EAAC,MAAD,CACE,UAAW,EACT,qCACA,EACD,CAEA,WACG,CAAA,CACF,CAAA,CACM,GACR,CAAA,CACR,EACD"}
@@ -1 +1 @@
1
- {"version":3,"file":"Burger.mjs","names":[],"sources":["../../../../src/components/Navbar/Burger.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { HTMLAttributes } from 'react';\n\n/**\n * Props for the Burger menu component\n */\ninterface BurgerProps extends HTMLAttributes<HTMLDivElement> {\n /** Whether the burger menu is in active/open state */\n isActive?: boolean;\n}\n\n/**\n * Shared styles for burger menu lines\n * Creates the classic hamburger menu appearance with smooth transitions\n */\nconst lineStyle =\n 'bg-text absolute top-1/2 block h-[2px] w-8 transition duration-300';\n\n/**\n * Burger Menu Component\n *\n * An animated hamburger menu icon that transforms between closed and open states.\n * Commonly used in mobile navigation to toggle menu visibility.\n *\n * Features:\n * - Smooth CSS transitions between states (300ms duration)\n * - Accessible with proper ARIA attributes\n * - Screen reader support with descriptive labels\n * - Role-based interaction (switch role for toggle behavior)\n * - Responsive sizing (40px × 40px clickable area)\n * - Classic three-line hamburger design\n *\n * Animation States:\n * - Closed: Three horizontal parallel lines\n * - Open: Top and bottom lines rotate to form an X, middle line fades out\n *\n * Accessibility Features:\n * - `role=\"switch\"` indicates toggle behavior\n * - `aria-expanded` reflects current menu state\n * - `aria-checked` provides current selection state\n * - `aria-controls` links to controlled menu element\n * - Dynamic `aria-label` describes current action\n *\n * @example\n * Basic usage:\n * ```tsx\n * const [isMenuOpen, setIsMenuOpen] = useState(false);\n *\n * <Burger\n * isActive={isMenuOpen}\n * onClick={() => setIsMenuOpen(!isMenuOpen)}\n * />\n * ```\n *\n * @example\n * With custom styling:\n * ```tsx\n * <Burger\n * isActive={isMenuOpen}\n * onClick={toggleMenu}\n * className=\"lg:hidden\"\n * style={{ zIndex: 1000 }}\n * />\n * ```\n *\n * @param props - Burger component props\n * @returns Animated burger menu JSX element\n */\nexport const Burger = ({\n isActive = false,\n className,\n ...props\n}: BurgerProps) => (\n <div\n className={cn('relative mr-3 size-10 cursor-pointer', className)}\n aria-checked={isActive}\n aria-expanded={isActive}\n aria-controls=\"mobile-menu\"\n role=\"switch\"\n aria-label={isActive ? 'Close menu' : 'Open menu'}\n {...props}\n >\n <div>\n <div\n className={cn(lineStyle, isActive ? 'rotate-[-45deg]' : 'rotate-0')}\n />\n <div\n className={cn(\n lineStyle,\n isActive ? '-translate-y-3 opacity-0' : '-translate-y-2 opacity-100'\n )}\n />\n </div>\n\n <div>\n <div className={cn(lineStyle, isActive ? 'opacity-0' : 'opacity-100')} />\n </div>\n\n <div>\n <div\n className={cn(lineStyle, isActive ? 'rotate-[45deg]' : 'rotate-0')}\n />\n <div\n className={cn(\n lineStyle,\n isActive ? 'translate-y-3 opacity-0' : 'translate-y-2 opacity-100'\n )}\n />\n </div>\n </div>\n);\n"],"mappings":"0FAeA,MAAM,EACJ,sEAoDW,GAAU,CACrB,WAAW,GACX,YACA,GAAG,KAEH,EAAC,MAAA,CACC,UAAW,EAAG,uCAAwC,EAAU,CAChE,eAAc,EACd,gBAAe,EACf,gBAAc,cACd,KAAK,SACL,aAAY,EAAW,aAAe,YACtC,GAAI,YAEJ,EAAC,MAAA,CAAA,SAAA,CACC,EAAC,MAAA,CACC,UAAW,EAAG,EAAW,EAAW,kBAAoB,WAAW,CAAA,CACnE,CACF,EAAC,MAAA,CACC,UAAW,EACT,EACA,EAAW,2BAA6B,6BACzC,CAAA,CACD,CAAA,CAAA,CACE,CAEN,EAAC,MAAA,CAAA,SACC,EAAC,MAAA,CAAI,UAAW,EAAG,EAAW,EAAW,YAAc,cAAc,CAAA,CAAI,CAAA,CACrE,CAEN,EAAC,MAAA,CAAA,SAAA,CACC,EAAC,MAAA,CACC,UAAW,EAAG,EAAW,EAAW,iBAAmB,WAAW,CAAA,CAClE,CACF,EAAC,MAAA,CACC,UAAW,EACT,EACA,EAAW,0BAA4B,4BACxC,CAAA,CACD,CAAA,CAAA,CACE,GACF"}
1
+ {"version":3,"file":"Burger.mjs","names":[],"sources":["../../../../src/components/Navbar/Burger.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { HTMLAttributes } from 'react';\n\n/**\n * Props for the Burger menu component\n */\ninterface BurgerProps extends HTMLAttributes<HTMLDivElement> {\n /** Whether the burger menu is in active/open state */\n isActive?: boolean;\n}\n\n/**\n * Shared styles for burger menu lines\n * Creates the classic hamburger menu appearance with smooth transitions\n */\nconst lineStyle =\n 'bg-text absolute top-1/2 block h-[2px] w-8 transition duration-300';\n\n/**\n * Burger Menu Component\n *\n * An animated hamburger menu icon that transforms between closed and open states.\n * Commonly used in mobile navigation to toggle menu visibility.\n *\n * Features:\n * - Smooth CSS transitions between states (300ms duration)\n * - Accessible with proper ARIA attributes\n * - Screen reader support with descriptive labels\n * - Role-based interaction (switch role for toggle behavior)\n * - Responsive sizing (40px × 40px clickable area)\n * - Classic three-line hamburger design\n *\n * Animation States:\n * - Closed: Three horizontal parallel lines\n * - Open: Top and bottom lines rotate to form an X, middle line fades out\n *\n * Accessibility Features:\n * - `role=\"switch\"` indicates toggle behavior\n * - `aria-expanded` reflects current menu state\n * - `aria-checked` provides current selection state\n * - `aria-controls` links to controlled menu element\n * - Dynamic `aria-label` describes current action\n *\n * @example\n * Basic usage:\n * ```tsx\n * const [isMenuOpen, setIsMenuOpen] = useState(false);\n *\n * <Burger\n * isActive={isMenuOpen}\n * onClick={() => setIsMenuOpen(!isMenuOpen)}\n * />\n * ```\n *\n * @example\n * With custom styling:\n * ```tsx\n * <Burger\n * isActive={isMenuOpen}\n * onClick={toggleMenu}\n * className=\"lg:hidden\"\n * style={{ zIndex: 1000 }}\n * />\n * ```\n *\n * @param props - Burger component props\n * @returns Animated burger menu JSX element\n */\nexport const Burger = ({\n isActive = false,\n className,\n ...props\n}: BurgerProps) => (\n <div\n className={cn('relative mr-3 size-10 cursor-pointer', className)}\n aria-checked={isActive}\n aria-expanded={isActive}\n aria-controls=\"mobile-menu\"\n role=\"switch\"\n aria-label={isActive ? 'Close menu' : 'Open menu'}\n {...props}\n >\n <div>\n <div\n className={cn(lineStyle, isActive ? 'rotate-[-45deg]' : 'rotate-0')}\n />\n <div\n className={cn(\n lineStyle,\n isActive ? '-translate-y-3 opacity-0' : '-translate-y-2 opacity-100'\n )}\n />\n </div>\n\n <div>\n <div className={cn(lineStyle, isActive ? 'opacity-0' : 'opacity-100')} />\n </div>\n\n <div>\n <div\n className={cn(lineStyle, isActive ? 'rotate-[45deg]' : 'rotate-0')}\n />\n <div\n className={cn(\n lineStyle,\n isActive ? 'translate-y-3 opacity-0' : 'translate-y-2 opacity-100'\n )}\n />\n </div>\n </div>\n);\n"],"mappings":"0FAeA,MAAM,EACJ,sEAoDW,GAAU,CACrB,WAAW,GACX,YACA,GAAG,KAEH,EAAC,MAAD,CACE,UAAW,EAAG,uCAAwC,EAAU,CAChE,eAAc,EACd,gBAAe,EACf,gBAAc,cACd,KAAK,SACL,aAAY,EAAW,aAAe,YACtC,GAAI,WAPN,CASE,EAAC,MAAD,CAAA,SAAA,CACE,EAAC,MAAD,CACE,UAAW,EAAG,EAAW,EAAW,kBAAoB,WAAW,CACnE,CAAA,CACF,EAAC,MAAD,CACE,UAAW,EACT,EACA,EAAW,2BAA6B,6BACzC,CACD,CAAA,CACE,CAAA,CAAA,CAEN,EAAC,MAAD,CAAA,SACE,EAAC,MAAD,CAAK,UAAW,EAAG,EAAW,EAAW,YAAc,cAAc,CAAI,CAAA,CACrE,CAAA,CAEN,EAAC,MAAD,CAAA,SAAA,CACE,EAAC,MAAD,CACE,UAAW,EAAG,EAAW,EAAW,iBAAmB,WAAW,CAClE,CAAA,CACF,EAAC,MAAD,CACE,UAAW,EACT,EACA,EAAW,0BAA4B,4BACxC,CACD,CAAA,CACE,CAAA,CAAA,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"DesktopNavbar.mjs","names":[],"sources":["../../../../src/components/Navbar/DesktopNavbar.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactElement, ReactNode } from 'react';\nimport {\n TabSelector,\n TabSelectorColor,\n type TabSelectorItemProps,\n} from '../TabSelector';\n\n/**\n * Props for the DesktopNavbar component\n * @template T - The tab props type extending TabProps\n */\ntype DesktopNavbarProps<T extends TabSelectorItemProps> = {\n /** Logo component or element displayed on the left side */\n logo: ReactNode;\n /** Array of navigation sections as tab elements */\n sections: ReactElement<T>[];\n /** Right-aligned items (e.g., user menu, search, settings) */\n rightItems?: ReactNode;\n /** Currently selected tab key for highlighting active state */\n selectedChoice: T['key'];\n};\n\n/**\n * Desktop Navigation Bar Component\n *\n * A horizontal navigation bar optimized for desktop and tablet viewports.\n * Features a sticky header with backdrop blur, left-aligned logo, center navigation tabs,\n * and right-aligned utility items.\n *\n * Features:\n * - Sticky positioning with z-index layering (z-50)\n * - Semi-transparent backdrop with blur effect for modern glass-morphism design\n * - Responsive spacing that adapts across screen sizes\n * - Horizontal scrollable tabs for overflow content\n * - Left-to-right layout: Logo → Navigation → Utility Items\n * - Integrated with TabSelector for consistent tab behavior\n *\n * Layout Structure:\n * ```\n * [Logo] -------- [Nav Tab 1] [Nav Tab 2] [Nav Tab 3] -------- [Right Items]\n * ```\n *\n * Responsive Behavior:\n * - Base: 2vw margin-left, 3-unit gap between tabs\n * - Large (≥1024px): 5vw margin-left, 3-unit gap between tabs\n * - Extra Large (≥1280px): 10vw margin-left, 6-unit gap between tabs\n * - Right items: 2-unit gap on mobile, 4-unit gap on medium screens\n *\n * Styling Features:\n * - Semi-transparent card background (`bg-card/80`)\n * - Subtle shadow with controlled blur (`shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)]`)\n * - Backdrop blur effect for content behind navbar\n * - Horizontal overflow scrolling for tab content\n *\n * @example\n * Basic usage:\n * ```tsx\n * const navigationTabs = [\n * { key: 'home', label: 'Home', href: '/' },\n * { key: 'products', label: 'Products', href: '/products' },\n * { key: 'about', label: 'About', href: '/about' }\n * ];\n *\n * <DesktopNavbar\n * logo={<CompanyLogo />}\n * sections={navigationTabs}\n * selectedChoice=\"home\"\n * rightItems={<UserProfileMenu />}\n * />\n * ```\n *\n * @example\n * With multiple right items:\n * ```tsx\n * <DesktopNavbar\n * logo={<Logo />}\n * sections={navSections}\n * selectedChoice={currentPage}\n * rightItems={\n * <>\n * <SearchButton />\n * <NotificationBell />\n * <UserMenu />\n * </>\n * }\n * />\n * ```\n *\n * @template T - Tab properties type extending TabProps for type safety\n * @param props - DesktopNavbar component props\n * @returns Horizontal desktop navigation JSX element\n */\nexport const DesktopNavbar = <T extends TabSelectorItemProps>({\n logo,\n sections,\n rightItems,\n selectedChoice,\n}: DesktopNavbarProps<T>) => (\n <nav className=\"sticky top-0 z-50 flex w-full items-center bg-card/80 px-4 py-3 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur\">\n {logo}\n\n <TabSelector\n selectedChoice={selectedChoice}\n className=\"ml-[2vw] h-auto gap-3 overflow-x-auto text-neutral tracking-wide lg:ml-[5vw] lg:gap-3 xl:ml-[10vw] xl:gap-6\"\n tabs={sections}\n hoverable\n color={TabSelectorColor.TEXT}\n />\n\n <div className=\"mr-4 flex items-center justify-end gap-2 md:gap-4\">\n {rightItems}\n </div>\n </nav>\n);\n"],"mappings":"kJA8FA,MAAa,GAAiD,CAC5D,OACA,WACA,aACA,oBAEA,EAAC,MAAA,CAAI,UAAU,kIACZ,EAED,EAAC,EAAA,CACiB,iBAChB,UAAU,8GACV,KAAM,EACN,UAAA,GACA,MAAO,EAAiB,MACxB,CAEF,EAAC,MAAA,CAAI,UAAU,6DACZ,GACG,GACF"}
1
+ {"version":3,"file":"DesktopNavbar.mjs","names":[],"sources":["../../../../src/components/Navbar/DesktopNavbar.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactElement, ReactNode } from 'react';\nimport {\n TabSelector,\n TabSelectorColor,\n type TabSelectorItemProps,\n} from '../TabSelector';\n\n/**\n * Props for the DesktopNavbar component\n * @template T - The tab props type extending TabProps\n */\ntype DesktopNavbarProps<T extends TabSelectorItemProps> = {\n /** Logo component or element displayed on the left side */\n logo: ReactNode;\n /** Array of navigation sections as tab elements */\n sections: ReactElement<T>[];\n /** Right-aligned items (e.g., user menu, search, settings) */\n rightItems?: ReactNode;\n /** Currently selected tab key for highlighting active state */\n selectedChoice: T['key'];\n};\n\n/**\n * Desktop Navigation Bar Component\n *\n * A horizontal navigation bar optimized for desktop and tablet viewports.\n * Features a sticky header with backdrop blur, left-aligned logo, center navigation tabs,\n * and right-aligned utility items.\n *\n * Features:\n * - Sticky positioning with z-index layering (z-50)\n * - Semi-transparent backdrop with blur effect for modern glass-morphism design\n * - Responsive spacing that adapts across screen sizes\n * - Horizontal scrollable tabs for overflow content\n * - Left-to-right layout: Logo → Navigation → Utility Items\n * - Integrated with TabSelector for consistent tab behavior\n *\n * Layout Structure:\n * ```\n * [Logo] -------- [Nav Tab 1] [Nav Tab 2] [Nav Tab 3] -------- [Right Items]\n * ```\n *\n * Responsive Behavior:\n * - Base: 2vw margin-left, 3-unit gap between tabs\n * - Large (≥1024px): 5vw margin-left, 3-unit gap between tabs\n * - Extra Large (≥1280px): 10vw margin-left, 6-unit gap between tabs\n * - Right items: 2-unit gap on mobile, 4-unit gap on medium screens\n *\n * Styling Features:\n * - Semi-transparent card background (`bg-card/80`)\n * - Subtle shadow with controlled blur (`shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)]`)\n * - Backdrop blur effect for content behind navbar\n * - Horizontal overflow scrolling for tab content\n *\n * @example\n * Basic usage:\n * ```tsx\n * const navigationTabs = [\n * { key: 'home', label: 'Home', href: '/' },\n * { key: 'products', label: 'Products', href: '/products' },\n * { key: 'about', label: 'About', href: '/about' }\n * ];\n *\n * <DesktopNavbar\n * logo={<CompanyLogo />}\n * sections={navigationTabs}\n * selectedChoice=\"home\"\n * rightItems={<UserProfileMenu />}\n * />\n * ```\n *\n * @example\n * With multiple right items:\n * ```tsx\n * <DesktopNavbar\n * logo={<Logo />}\n * sections={navSections}\n * selectedChoice={currentPage}\n * rightItems={\n * <>\n * <SearchButton />\n * <NotificationBell />\n * <UserMenu />\n * </>\n * }\n * />\n * ```\n *\n * @template T - Tab properties type extending TabProps for type safety\n * @param props - DesktopNavbar component props\n * @returns Horizontal desktop navigation JSX element\n */\nexport const DesktopNavbar = <T extends TabSelectorItemProps>({\n logo,\n sections,\n rightItems,\n selectedChoice,\n}: DesktopNavbarProps<T>) => (\n <nav className=\"sticky top-0 z-50 flex w-full items-center bg-card/80 px-4 py-3 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur\">\n {logo}\n\n <TabSelector\n selectedChoice={selectedChoice}\n className=\"ml-[2vw] h-auto gap-3 overflow-x-auto text-neutral tracking-wide lg:ml-[5vw] lg:gap-3 xl:ml-[10vw] xl:gap-6\"\n tabs={sections}\n hoverable\n color={TabSelectorColor.TEXT}\n />\n\n <div className=\"mr-4 flex items-center justify-end gap-2 md:gap-4\">\n {rightItems}\n </div>\n </nav>\n);\n"],"mappings":"kJA8FA,MAAa,GAAiD,CAC5D,OACA,WACA,aACA,oBAEA,EAAC,MAAD,CAAK,UAAU,iIAAf,CACG,EAED,EAAC,EAAD,CACkB,iBAChB,UAAU,8GACV,KAAM,EACN,UAAA,GACA,MAAO,EAAiB,KACxB,CAAA,CAEF,EAAC,MAAD,CAAK,UAAU,6DACZ,EACG,CAAA,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"MobileNavbar.mjs","names":[],"sources":["../../../../src/components/Navbar/MobileNavbar.tsx"],"sourcesContent":["'use client';\n\nimport { useScrollBlockage } from '@hooks/useScrollBlockage';\nimport { useScrollDetection } from '@hooks/useScrollDetection';\nimport { cn } from '@utils/cn';\nimport { m, type Variants } from 'framer-motion';\nimport { type ReactElement, type ReactNode, useRef, useState } from 'react';\nimport { MaxHeightSmoother } from '../MaxHeightSmoother';\nimport type { TabSelectorItemProps } from '../TabSelector';\nimport { Burger } from './Burger';\n\n/**\n * Props for the MobileNavbar component\n * @template T - The tab props type extending TabProps\n */\ntype MobileNavbarProps<T extends TabSelectorItemProps> = {\n /** Logo component or element displayed in the header */\n logo: ReactNode;\n /** Additional content displayed at the top of expanded mobile menu */\n topChildren?: ReactNode;\n /** Navigation sections displayed in the top area of expanded menu */\n topSections?: ReactElement<T>[];\n /** Additional content displayed at the bottom of expanded mobile menu */\n bottomChildren?: ReactNode;\n /** Navigation sections displayed in the bottom area of expanded menu */\n bottomSections?: ReactElement<T>[];\n /** Right-aligned items in the collapsed header (e.g., search, notifications) */\n rightItems?: ReactNode;\n /** Whether the navbar should be rollable (default: true) */\n rollable?: boolean;\n};\n\n/**\n * Framer Motion animation variants for staggered menu item reveals\n * Creates a smooth cascading effect when menu opens/closes\n */\nconst navVariants: Variants = {\n open: {\n transition: { staggerChildren: 0.07, delayChildren: 0.2 },\n },\n closed: {\n transition: { staggerChildren: 0.05, staggerDirection: -1 },\n },\n};\n\n/**\n * Shared background styling for mobile navbar components\n * Provides glass-morphism effect with blur and transparency\n */\nconst bgStyle =\n 'bg-card/95 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur';\n\n/**\n * Mobile Navigation Bar Component\n *\n * A sophisticated mobile-first navigation component with rollable full-screen menu,\n * scroll-aware behavior, and smooth animations. Optimized for touch interactions and\n * mobile user experience patterns.\n *\n * Features:\n * - rollable hamburger menu with full-screen overlay\n * - Auto-hide on scroll down, show on scroll up for screen space optimization\n * - Background scroll prevention when menu is open\n * - Staggered animations for smooth menu item reveals\n * - Flexible content areas (top/bottom children and sections)\n * - Responsive layout with viewport-aware sizing\n * - Backdrop blur effects for modern glass-morphism design\n *\n * Layout Structure:\n * ```\n * [Logo] ----------- [Right Items] [Burger]\n * (when expanded)\n * ┌─────────────────────────────────────────┐\n * │ [Top Children] │\n * │ [Top Sections - Navigation Items] │\n * │ [Bottom Sections - Navigation Items] │\n * │ [Bottom Children] │\n * └─────────────────────────────────────────┘\n * ```\n *\n * Behavioral Features:\n * - Sticky positioning with dynamic hide/show based on scroll direction\n * - Background scroll locking when menu is expanded\n * - Click outside to close expanded menu\n * - Smooth height animations with MaxHeightSmoother\n * - Intelligent burger button visibility (only shown if sections exist)\n *\n * Animation Details:\n * - Menu items animate in with staggered timing (70ms delay between items)\n * - Exit animations are reversed with 50ms stagger\n * - Initial delay of 200ms before items start animating in\n * - Full viewport height menu with dynamic height calculation\n *\n * @example\n * Basic mobile navbar:\n * ```tsx\n * <MobileNavbar\n * logo={<MobileLogo />}\n * topSections={primaryNavItems}\n * rightItems={<SearchIcon />}\n * />\n * ```\n *\n * @example\n * Full-featured mobile navbar:\n * ```tsx\n * <MobileNavbar\n * logo={<Logo />}\n * topChildren={<WelcomeMessage />}\n * topSections={mainNavItems}\n * bottomSections={utilityNavItems}\n * bottomChildren={<UserProfile />}\n * rightItems={\n * <>\n * <NotificationIcon />\n * <SearchIcon />\n * </>\n * }\n * />\n * ```\n *\n * Accessibility Features:\n * - Menu expanded state communicated via aria-expanded\n * - Focus management and keyboard navigation support\n * - Screen reader friendly with semantic nav structure\n *\n * @template T - Tab properties type extending TabProps for type safety\n * @param props - MobileNavbar component props\n * @returns Mobile navigation with rollable full-screen menu\n */\nexport const MobileNavbar = <T extends TabSelectorItemProps>({\n logo,\n topChildren,\n topSections = [],\n bottomChildren,\n bottomSections = [],\n rightItems,\n rollable = true,\n}: MobileNavbarProps<T>) => {\n const [isHidden, setIsHidden] = useState<boolean>(false);\n const [isUnrolled, setIsUnrolled] = useState<boolean>(false);\n\n const navRef = useRef<HTMLDivElement>(null);\n\n useScrollBlockage({\n disableScroll: rollable,\n key: 'mobile_nav',\n });\n\n useScrollDetection({\n onScrollUp: () => setIsHidden(false),\n onScrollDown: () => setIsHidden(true),\n isEnabled: !isUnrolled && rollable,\n });\n\n const backDivHeight = !isHidden ? (navRef.current?.clientHeight ?? 0) : 0;\n\n const isBurgerShowed = topSections.length + bottomSections.length > 0;\n\n return (\n <nav\n className={cn(\n bgStyle,\n 'sticky top-0 z-50 flex w-screen flex-col transition',\n isHidden ? '-translate-y-full' : 'translate-y-0'\n )}\n id=\"mobile-menu\"\n >\n <div\n className=\"flex w-full items-center justify-between gap-1 px-4 py-3 md:gap-[10vw]\"\n ref={navRef}\n >\n {logo}\n\n <div className=\"flex w-full flex-1 items-center justify-end gap-6\">\n <div className=\"flex w-full items-center justify-end gap-1\">\n {rightItems}\n </div>\n\n {isBurgerShowed && (\n <Burger\n isActive={isUnrolled}\n onClick={() => setIsUnrolled((isUnrolled) => !isUnrolled)}\n />\n )}\n </div>\n </div>\n\n <div\n className={cn(\n bgStyle,\n 'absolute bottom-0 left-0 w-full translate-y-full'\n )}\n >\n <MaxHeightSmoother isHidden={!isUnrolled}>\n <m.div\n className=\"flex w-full flex-col pt-10 pb-[20%] text-lg text-text tracking-wide\"\n onClick={() => setIsUnrolled(false)}\n animate={isUnrolled ? 'open' : 'closed'}\n variants={navVariants}\n style={{\n height: `calc(100vh - ${backDivHeight}px)`,\n }}\n >\n {topChildren}\n <div className=\"flex h-full flex-col justify-center\">\n {topSections}\n {bottomSections}\n </div>\n\n <div className=\"m-auto flex w-full max-w-[400px] items-center justify-center gap-1 px-5 py-3\">\n {bottomChildren}\n </div>\n </m.div>\n </MaxHeightSmoother>\n </div>\n </nav>\n );\n};\n"],"mappings":"mbAoCA,MAAM,EAAwB,CAC5B,KAAM,CACJ,WAAY,CAAE,gBAAiB,IAAM,cAAe,GAAK,CAC1D,CACD,OAAQ,CACN,WAAY,CAAE,gBAAiB,IAAM,iBAAkB,GAAI,CAC5D,CACF,CAMK,EACJ,mEAgFW,GAAgD,CAC3D,OACA,cACA,cAAc,EAAE,CAChB,iBACA,iBAAiB,EAAE,CACnB,aACA,WAAW,MACe,CAC1B,GAAM,CAAC,EAAU,GAAe,EAAkB,GAAM,CAClD,CAAC,EAAY,GAAiB,EAAkB,GAAM,CAEtD,EAAS,EAAuB,KAAK,CAE3C,EAAkB,CAChB,cAAe,EACf,IAAK,aACN,CAAC,CAEF,EAAmB,CACjB,eAAkB,EAAY,GAAM,CACpC,iBAAoB,EAAY,GAAK,CACrC,UAAW,CAAC,GAAc,EAC3B,CAAC,CAEF,IAAM,EAAiB,EAAiD,EAArC,EAAO,SAAS,cAAgB,EAE7D,EAAiB,EAAY,OAAS,EAAe,OAAS,EAEpE,OACE,EAAC,MAAA,CACC,UAAW,EACT,EACA,sDACA,EAAW,oBAAsB,gBAClC,CACD,GAAG,wBAEH,EAAC,MAAA,CACC,UAAU,yEACV,IAAK,YAEJ,EAED,EAAC,MAAA,CAAI,UAAU,8DACb,EAAC,MAAA,CAAI,UAAU,sDACZ,GACG,CAEL,GACC,EAAC,EAAA,CACC,SAAU,EACV,YAAe,EAAe,GAAe,CAAC,EAAW,EACzD,CAAA,EAEA,CAAA,EACF,CAEN,EAAC,MAAA,CACC,UAAW,EACT,EACA,mDACD,UAED,EAAC,EAAA,CAAkB,SAAU,CAAC,WAC5B,EAAC,EAAE,IAAA,CACD,UAAU,sEACV,YAAe,EAAc,GAAM,CACnC,QAAS,EAAa,OAAS,SAC/B,SAAU,EACV,MAAO,CACL,OAAQ,gBAAgB,EAAc,KACvC,WAEA,EACD,EAAC,MAAA,CAAI,UAAU,gDACZ,EACA,EAAA,EACG,CAEN,EAAC,MAAA,CAAI,UAAU,wFACZ,GACG,GACA,EACU,EAChB,CAAA,EACF"}
1
+ {"version":3,"file":"MobileNavbar.mjs","names":[],"sources":["../../../../src/components/Navbar/MobileNavbar.tsx"],"sourcesContent":["'use client';\n\nimport { useScrollBlockage } from '@hooks/useScrollBlockage';\nimport { useScrollDetection } from '@hooks/useScrollDetection';\nimport { cn } from '@utils/cn';\nimport { m, type Variants } from 'framer-motion';\nimport { type ReactElement, type ReactNode, useRef, useState } from 'react';\nimport { MaxHeightSmoother } from '../MaxHeightSmoother';\nimport type { TabSelectorItemProps } from '../TabSelector';\nimport { Burger } from './Burger';\n\n/**\n * Props for the MobileNavbar component\n * @template T - The tab props type extending TabProps\n */\ntype MobileNavbarProps<T extends TabSelectorItemProps> = {\n /** Logo component or element displayed in the header */\n logo: ReactNode;\n /** Additional content displayed at the top of expanded mobile menu */\n topChildren?: ReactNode;\n /** Navigation sections displayed in the top area of expanded menu */\n topSections?: ReactElement<T>[];\n /** Additional content displayed at the bottom of expanded mobile menu */\n bottomChildren?: ReactNode;\n /** Navigation sections displayed in the bottom area of expanded menu */\n bottomSections?: ReactElement<T>[];\n /** Right-aligned items in the collapsed header (e.g., search, notifications) */\n rightItems?: ReactNode;\n /** Whether the navbar should be rollable (default: true) */\n rollable?: boolean;\n};\n\n/**\n * Framer Motion animation variants for staggered menu item reveals\n * Creates a smooth cascading effect when menu opens/closes\n */\nconst navVariants: Variants = {\n open: {\n transition: { staggerChildren: 0.07, delayChildren: 0.2 },\n },\n closed: {\n transition: { staggerChildren: 0.05, staggerDirection: -1 },\n },\n};\n\n/**\n * Shared background styling for mobile navbar components\n * Provides glass-morphism effect with blur and transparency\n */\nconst bgStyle =\n 'bg-card/95 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur';\n\n/**\n * Mobile Navigation Bar Component\n *\n * A sophisticated mobile-first navigation component with rollable full-screen menu,\n * scroll-aware behavior, and smooth animations. Optimized for touch interactions and\n * mobile user experience patterns.\n *\n * Features:\n * - rollable hamburger menu with full-screen overlay\n * - Auto-hide on scroll down, show on scroll up for screen space optimization\n * - Background scroll prevention when menu is open\n * - Staggered animations for smooth menu item reveals\n * - Flexible content areas (top/bottom children and sections)\n * - Responsive layout with viewport-aware sizing\n * - Backdrop blur effects for modern glass-morphism design\n *\n * Layout Structure:\n * ```\n * [Logo] ----------- [Right Items] [Burger]\n * (when expanded)\n * ┌─────────────────────────────────────────┐\n * │ [Top Children] │\n * │ [Top Sections - Navigation Items] │\n * │ [Bottom Sections - Navigation Items] │\n * │ [Bottom Children] │\n * └─────────────────────────────────────────┘\n * ```\n *\n * Behavioral Features:\n * - Sticky positioning with dynamic hide/show based on scroll direction\n * - Background scroll locking when menu is expanded\n * - Click outside to close expanded menu\n * - Smooth height animations with MaxHeightSmoother\n * - Intelligent burger button visibility (only shown if sections exist)\n *\n * Animation Details:\n * - Menu items animate in with staggered timing (70ms delay between items)\n * - Exit animations are reversed with 50ms stagger\n * - Initial delay of 200ms before items start animating in\n * - Full viewport height menu with dynamic height calculation\n *\n * @example\n * Basic mobile navbar:\n * ```tsx\n * <MobileNavbar\n * logo={<MobileLogo />}\n * topSections={primaryNavItems}\n * rightItems={<SearchIcon />}\n * />\n * ```\n *\n * @example\n * Full-featured mobile navbar:\n * ```tsx\n * <MobileNavbar\n * logo={<Logo />}\n * topChildren={<WelcomeMessage />}\n * topSections={mainNavItems}\n * bottomSections={utilityNavItems}\n * bottomChildren={<UserProfile />}\n * rightItems={\n * <>\n * <NotificationIcon />\n * <SearchIcon />\n * </>\n * }\n * />\n * ```\n *\n * Accessibility Features:\n * - Menu expanded state communicated via aria-expanded\n * - Focus management and keyboard navigation support\n * - Screen reader friendly with semantic nav structure\n *\n * @template T - Tab properties type extending TabProps for type safety\n * @param props - MobileNavbar component props\n * @returns Mobile navigation with rollable full-screen menu\n */\nexport const MobileNavbar = <T extends TabSelectorItemProps>({\n logo,\n topChildren,\n topSections = [],\n bottomChildren,\n bottomSections = [],\n rightItems,\n rollable = true,\n}: MobileNavbarProps<T>) => {\n const [isHidden, setIsHidden] = useState<boolean>(false);\n const [isUnrolled, setIsUnrolled] = useState<boolean>(false);\n\n const navRef = useRef<HTMLDivElement>(null);\n\n useScrollBlockage({\n disableScroll: rollable,\n key: 'mobile_nav',\n });\n\n useScrollDetection({\n onScrollUp: () => setIsHidden(false),\n onScrollDown: () => setIsHidden(true),\n isEnabled: !isUnrolled && rollable,\n });\n\n const backDivHeight = !isHidden ? (navRef.current?.clientHeight ?? 0) : 0;\n\n const isBurgerShowed = topSections.length + bottomSections.length > 0;\n\n return (\n <nav\n className={cn(\n bgStyle,\n 'sticky top-0 z-50 flex w-screen flex-col transition',\n isHidden ? '-translate-y-full' : 'translate-y-0'\n )}\n id=\"mobile-menu\"\n >\n <div\n className=\"flex w-full items-center justify-between gap-1 px-4 py-3 md:gap-[10vw]\"\n ref={navRef}\n >\n {logo}\n\n <div className=\"flex w-full flex-1 items-center justify-end gap-6\">\n <div className=\"flex w-full items-center justify-end gap-1\">\n {rightItems}\n </div>\n\n {isBurgerShowed && (\n <Burger\n isActive={isUnrolled}\n onClick={() => setIsUnrolled((isUnrolled) => !isUnrolled)}\n />\n )}\n </div>\n </div>\n\n <div\n className={cn(\n bgStyle,\n 'absolute bottom-0 left-0 w-full translate-y-full'\n )}\n >\n <MaxHeightSmoother isHidden={!isUnrolled}>\n <m.div\n className=\"flex w-full flex-col pt-10 pb-[20%] text-lg text-text tracking-wide\"\n onClick={() => setIsUnrolled(false)}\n animate={isUnrolled ? 'open' : 'closed'}\n variants={navVariants}\n style={{\n height: `calc(100vh - ${backDivHeight}px)`,\n }}\n >\n {topChildren}\n <div className=\"flex h-full flex-col justify-center\">\n {topSections}\n {bottomSections}\n </div>\n\n <div className=\"m-auto flex w-full max-w-[400px] items-center justify-center gap-1 px-5 py-3\">\n {bottomChildren}\n </div>\n </m.div>\n </MaxHeightSmoother>\n </div>\n </nav>\n );\n};\n"],"mappings":"mbAoCA,MAAM,EAAwB,CAC5B,KAAM,CACJ,WAAY,CAAE,gBAAiB,IAAM,cAAe,GAAK,CAC1D,CACD,OAAQ,CACN,WAAY,CAAE,gBAAiB,IAAM,iBAAkB,GAAI,CAC5D,CACF,CAMK,EACJ,mEAgFW,GAAgD,CAC3D,OACA,cACA,cAAc,EAAE,CAChB,iBACA,iBAAiB,EAAE,CACnB,aACA,WAAW,MACe,CAC1B,GAAM,CAAC,EAAU,GAAe,EAAkB,GAAM,CAClD,CAAC,EAAY,GAAiB,EAAkB,GAAM,CAEtD,EAAS,EAAuB,KAAK,CAE3C,EAAkB,CAChB,cAAe,EACf,IAAK,aACN,CAAC,CAEF,EAAmB,CACjB,eAAkB,EAAY,GAAM,CACpC,iBAAoB,EAAY,GAAK,CACrC,UAAW,CAAC,GAAc,EAC3B,CAAC,CAEF,IAAM,EAAiB,EAAiD,EAArC,EAAO,SAAS,cAAgB,EAE7D,EAAiB,EAAY,OAAS,EAAe,OAAS,EAEpE,OACE,EAAC,MAAD,CACE,UAAW,EACT,EACA,sDACA,EAAW,oBAAsB,gBAClC,CACD,GAAG,uBANL,CAQE,EAAC,MAAD,CACE,UAAU,yEACV,IAAK,WAFP,CAIG,EAED,EAAC,MAAD,CAAK,UAAU,6DAAf,CACE,EAAC,MAAD,CAAK,UAAU,sDACZ,EACG,CAAA,CAEL,GACC,EAAC,EAAD,CACE,SAAU,EACV,YAAe,EAAe,GAAe,CAAC,EAAW,CACzD,CAAA,CAEA,GACF,GAEN,EAAC,MAAD,CACE,UAAW,EACT,EACA,mDACD,UAED,EAAC,EAAD,CAAmB,SAAU,CAAC,WAC5B,EAAC,EAAE,IAAH,CACE,UAAU,sEACV,YAAe,EAAc,GAAM,CACnC,QAAS,EAAa,OAAS,SAC/B,SAAU,EACV,MAAO,CACL,OAAQ,gBAAgB,EAAc,KACvC,UAPH,CASG,EACD,EAAC,MAAD,CAAK,UAAU,+CAAf,CACG,EACA,EACG,GAEN,EAAC,MAAD,CAAK,UAAU,wFACZ,EACG,CAAA,CACA,GACU,CAAA,CAChB,CAAA,CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/Navbar/index.tsx"],"sourcesContent":["'use client';\n\nimport { useDevice } from '@hooks/useDevice';\nimport { useIsMounted } from '@hooks/useIsMounted';\nimport type { ReactElement, ReactNode } from 'react';\nimport type { TabSelectorItemProps } from '../TabSelector';\nimport { DesktopNavbar } from './DesktopNavbar';\nimport { MobileNavbar } from './MobileNavbar';\n\n/**\n * Props for the responsive Navbar component\n * @template T - The tab props type extending TabProps\n */\ntype NavbarProps<T extends TabSelectorItemProps> = {\n /** Logo component or element to display in navbar */\n logo: ReactNode;\n /** Currently selected tab key for active state management */\n selectedChoice: T['key'];\n /** Navigation sections displayed on desktop layout */\n desktopSections?: ReactElement<T>[];\n /** Additional content displayed at top of mobile navbar */\n mobileTopChildren?: ReactNode;\n /** Navigation sections displayed at top of mobile navbar */\n mobileTopSections?: ReactElement<T>[];\n /** Additional content displayed at bottom of mobile navbar */\n mobileBottomChildren?: ReactNode;\n /** Navigation sections displayed at bottom of mobile navbar */\n mobileBottomSections?: ReactElement<T>[];\n /** Right-aligned items for desktop navbar (e.g., user menu, settings) */\n rightItemsDesktop?: ReactNode;\n /** Right-aligned items for mobile navbar */\n rightItemsMobile?: ReactNode;\n /** Whether the mobile navbar should be rollable (default: true) */\n mobileRollable?: boolean;\n};\n\n/**\n * Responsive Navbar Component\n *\n * A highly adaptable navigation component that automatically switches between desktop and mobile\n * layouts based on screen size. Provides comprehensive navigation structure with flexible content areas.\n *\n * Features:\n * - Automatic responsive switching at 'lg' breakpoint (1024px)\n * - Separate section configurations for desktop and mobile layouts\n * - Support for logo placement and right-aligned utility items\n * - Generic typing for tab properties and selected states\n * - Mobile-specific top/bottom content areas for enhanced mobile UX\n * - Hydration-safe rendering with useIsMounted hook\n *\n * @example\n * Basic usage:\n * ```tsx\n * const navSections = [\n * { key: 'home', label: 'Home', href: '/' },\n * { key: 'about', label: 'About', href: '/about' }\n * ];\n *\n * <Navbar\n * logo={<Logo />}\n * selectedChoice=\"home\"\n * desktopSections={navSections}\n * mobileTopSections={navSections}\n * rightItemsDesktop={<UserMenu />}\n * />\n * ```\n *\n * @example\n * Advanced mobile configuration:\n * ```tsx\n * <Navbar\n * logo={<Logo />}\n * selectedChoice={activeTab}\n * desktopSections={mainNavItems}\n * mobileTopSections={primaryMobileNavItems}\n * mobileTopChildren={<SearchBar />}\n * mobileBottomSections={secondaryMobileNavItems}\n * mobileBottomChildren={<UserProfile />}\n * rightItemsDesktop={<DesktopActions />}\n * rightItemsMobile={<MobileActions />}\n * />\n * ```\n *\n * Responsive Behavior:\n * - Desktop (≥1024px): Shows DesktopNavbar with horizontal layout\n * - Mobile (<1024px): Shows MobileNavbar with collapsible vertical layout\n * - Automatic detection with no flash of unstyled content\n *\n * @template T - Tab properties type extending TabProps for type safety\n * @param props - Navbar component props\n * @returns Responsive navbar JSX element\n */\nexport const Navbar = <T extends TabSelectorItemProps>({\n logo,\n mobileTopChildren,\n desktopSections = [],\n mobileTopSections = [],\n mobileBottomChildren,\n mobileBottomSections = [],\n rightItemsDesktop,\n rightItemsMobile,\n selectedChoice,\n mobileRollable = true,\n}: NavbarProps<T>) => {\n const { isMobile } = useDevice('lg');\n const isMoUnted = useIsMounted();\n\n if (!isMoUnted) return <></>;\n\n return isMobile ? (\n <MobileNavbar\n topChildren={mobileTopChildren}\n topSections={mobileTopSections}\n bottomChildren={mobileBottomChildren}\n bottomSections={mobileBottomSections}\n logo={logo}\n rightItems={rightItemsMobile}\n rollable={mobileRollable}\n />\n ) : (\n <DesktopNavbar\n sections={desktopSections}\n rightItems={rightItemsDesktop}\n logo={logo}\n selectedChoice={selectedChoice}\n />\n );\n};\n"],"mappings":"2RA4FA,MAAa,GAA0C,CACrD,OACA,oBACA,kBAAkB,EAAE,CACpB,oBAAoB,EAAE,CACtB,uBACA,uBAAuB,EAAE,CACzB,oBACA,mBACA,iBACA,iBAAiB,MACG,CACpB,GAAM,CAAE,YAAa,EAAU,KAAK,CAKpC,OAJkB,GAAc,CAIzB,EACL,EAAC,EAAA,CACC,YAAa,EACb,YAAa,EACb,eAAgB,EAChB,eAAgB,EACV,OACN,WAAY,EACZ,SAAU,GACV,CAEF,EAAC,EAAA,CACC,SAAU,EACV,WAAY,EACN,OACU,kBAChB,CAlBmB,EAAA,EAAA,EAAA,CAAK"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/Navbar/index.tsx"],"sourcesContent":["'use client';\n\nimport { useDevice } from '@hooks/useDevice';\nimport { useIsMounted } from '@hooks/useIsMounted';\nimport type { ReactElement, ReactNode } from 'react';\nimport type { TabSelectorItemProps } from '../TabSelector';\nimport { DesktopNavbar } from './DesktopNavbar';\nimport { MobileNavbar } from './MobileNavbar';\n\n/**\n * Props for the responsive Navbar component\n * @template T - The tab props type extending TabProps\n */\ntype NavbarProps<T extends TabSelectorItemProps> = {\n /** Logo component or element to display in navbar */\n logo: ReactNode;\n /** Currently selected tab key for active state management */\n selectedChoice: T['key'];\n /** Navigation sections displayed on desktop layout */\n desktopSections?: ReactElement<T>[];\n /** Additional content displayed at top of mobile navbar */\n mobileTopChildren?: ReactNode;\n /** Navigation sections displayed at top of mobile navbar */\n mobileTopSections?: ReactElement<T>[];\n /** Additional content displayed at bottom of mobile navbar */\n mobileBottomChildren?: ReactNode;\n /** Navigation sections displayed at bottom of mobile navbar */\n mobileBottomSections?: ReactElement<T>[];\n /** Right-aligned items for desktop navbar (e.g., user menu, settings) */\n rightItemsDesktop?: ReactNode;\n /** Right-aligned items for mobile navbar */\n rightItemsMobile?: ReactNode;\n /** Whether the mobile navbar should be rollable (default: true) */\n mobileRollable?: boolean;\n};\n\n/**\n * Responsive Navbar Component\n *\n * A highly adaptable navigation component that automatically switches between desktop and mobile\n * layouts based on screen size. Provides comprehensive navigation structure with flexible content areas.\n *\n * Features:\n * - Automatic responsive switching at 'lg' breakpoint (1024px)\n * - Separate section configurations for desktop and mobile layouts\n * - Support for logo placement and right-aligned utility items\n * - Generic typing for tab properties and selected states\n * - Mobile-specific top/bottom content areas for enhanced mobile UX\n * - Hydration-safe rendering with useIsMounted hook\n *\n * @example\n * Basic usage:\n * ```tsx\n * const navSections = [\n * { key: 'home', label: 'Home', href: '/' },\n * { key: 'about', label: 'About', href: '/about' }\n * ];\n *\n * <Navbar\n * logo={<Logo />}\n * selectedChoice=\"home\"\n * desktopSections={navSections}\n * mobileTopSections={navSections}\n * rightItemsDesktop={<UserMenu />}\n * />\n * ```\n *\n * @example\n * Advanced mobile configuration:\n * ```tsx\n * <Navbar\n * logo={<Logo />}\n * selectedChoice={activeTab}\n * desktopSections={mainNavItems}\n * mobileTopSections={primaryMobileNavItems}\n * mobileTopChildren={<SearchBar />}\n * mobileBottomSections={secondaryMobileNavItems}\n * mobileBottomChildren={<UserProfile />}\n * rightItemsDesktop={<DesktopActions />}\n * rightItemsMobile={<MobileActions />}\n * />\n * ```\n *\n * Responsive Behavior:\n * - Desktop (≥1024px): Shows DesktopNavbar with horizontal layout\n * - Mobile (<1024px): Shows MobileNavbar with collapsible vertical layout\n * - Automatic detection with no flash of unstyled content\n *\n * @template T - Tab properties type extending TabProps for type safety\n * @param props - Navbar component props\n * @returns Responsive navbar JSX element\n */\nexport const Navbar = <T extends TabSelectorItemProps>({\n logo,\n mobileTopChildren,\n desktopSections = [],\n mobileTopSections = [],\n mobileBottomChildren,\n mobileBottomSections = [],\n rightItemsDesktop,\n rightItemsMobile,\n selectedChoice,\n mobileRollable = true,\n}: NavbarProps<T>) => {\n const { isMobile } = useDevice('lg');\n const isMoUnted = useIsMounted();\n\n if (!isMoUnted) return <></>;\n\n return isMobile ? (\n <MobileNavbar\n topChildren={mobileTopChildren}\n topSections={mobileTopSections}\n bottomChildren={mobileBottomChildren}\n bottomSections={mobileBottomSections}\n logo={logo}\n rightItems={rightItemsMobile}\n rollable={mobileRollable}\n />\n ) : (\n <DesktopNavbar\n sections={desktopSections}\n rightItems={rightItemsDesktop}\n logo={logo}\n selectedChoice={selectedChoice}\n />\n );\n};\n"],"mappings":"2RA4FA,MAAa,GAA0C,CACrD,OACA,oBACA,kBAAkB,EAAE,CACpB,oBAAoB,EAAE,CACtB,uBACA,uBAAuB,EAAE,CACzB,oBACA,mBACA,iBACA,iBAAiB,MACG,CACpB,GAAM,CAAE,YAAa,EAAU,KAAK,CAKpC,OAJkB,GAAc,CAIzB,EACL,EAAC,EAAD,CACE,YAAa,EACb,YAAa,EACb,eAAgB,EAChB,eAAgB,EACV,OACN,WAAY,EACZ,SAAU,EACV,CAAA,CAEF,EAAC,EAAD,CACE,SAAU,EACV,WAAY,EACN,OACU,iBAChB,CAAA,CAlBmB,EAAA,EAAA,EAAK,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"NumberItemsSelector.mjs","names":[],"sources":["../../../../src/components/Pagination/NumberItemsSelector.tsx"],"sourcesContent":["'use client';\n\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { Select } from '../Select';\n\nexport type NumberItemsSelectorProps = {\n value: string | number;\n onValueChange: (value: string) => void;\n min?: number;\n max?: number;\n};\n\nexport const NumberItemsSelector: FC<NumberItemsSelectorProps> = ({\n value,\n onValueChange,\n min = 5,\n max = 500,\n}) => {\n const { numberItemsSelector, selectPageSize } = useIntlayer('pagination');\n\n const items = [\n 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 100000,\n ].filter((item) => item >= min && item <= max);\n\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-neutral text-sm\">{numberItemsSelector}</span>\n <Select value={value.toString()} onValueChange={onValueChange}>\n <Select.Trigger className=\"w-20\">\n <Select.Value placeholder={selectPageSize} />\n </Select.Trigger>\n <Select.Content>\n {items.map((item) => (\n <Select.Item key={item} value={item.toString()}>\n {item}\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n </div>\n );\n};\n"],"mappings":"0JAaA,MAAa,GAAqD,CAChE,QACA,gBACA,MAAM,EACN,MAAM,OACF,CACJ,GAAM,CAAE,sBAAqB,kBAAmB,EAAY,aAAa,CAEnE,EAAQ,CACZ,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAM,IAAM,IAAM,IAAO,IAC9D,CAAC,OAAQ,GAAS,GAAQ,GAAO,GAAQ,EAAI,CAE9C,OACE,EAAC,MAAA,CAAI,UAAU,oCACb,EAAC,OAAA,CAAK,UAAU,gCAAwB,GAA2B,CACnE,EAAC,EAAA,CAAO,MAAO,EAAM,UAAU,CAAiB,0BAC9C,EAAC,EAAO,QAAA,CAAQ,UAAU,gBACxB,EAAC,EAAO,MAAA,CAAM,YAAa,EAAA,CAAkB,EAC9B,CACjB,EAAC,EAAO,QAAA,CAAA,SACL,EAAM,IAAK,GACV,EAAC,EAAO,KAAA,CAAgB,MAAO,EAAK,UAAU,UAC3C,GADe,EAEJ,CACd,CAAA,CACa,CAAA,EACV,CAAA,EACL"}
1
+ {"version":3,"file":"NumberItemsSelector.mjs","names":[],"sources":["../../../../src/components/Pagination/NumberItemsSelector.tsx"],"sourcesContent":["'use client';\n\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { Select } from '../Select';\n\nexport type NumberItemsSelectorProps = {\n value: string | number;\n onValueChange: (value: string) => void;\n min?: number;\n max?: number;\n};\n\nexport const NumberItemsSelector: FC<NumberItemsSelectorProps> = ({\n value,\n onValueChange,\n min = 5,\n max = 500,\n}) => {\n const { numberItemsSelector, selectPageSize } = useIntlayer('pagination');\n\n const items = [\n 1, 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000, 100000,\n ].filter((item) => item >= min && item <= max);\n\n return (\n <div className=\"flex items-center gap-2\">\n <span className=\"text-neutral text-sm\">{numberItemsSelector}</span>\n <Select value={value.toString()} onValueChange={onValueChange}>\n <Select.Trigger className=\"w-20\">\n <Select.Value placeholder={selectPageSize} />\n </Select.Trigger>\n <Select.Content>\n {items.map((item) => (\n <Select.Item key={item} value={item.toString()}>\n {item}\n </Select.Item>\n ))}\n </Select.Content>\n </Select>\n </div>\n );\n};\n"],"mappings":"0JAaA,MAAa,GAAqD,CAChE,QACA,gBACA,MAAM,EACN,MAAM,OACF,CACJ,GAAM,CAAE,sBAAqB,kBAAmB,EAAY,aAAa,CAEnE,EAAQ,CACZ,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAM,IAAM,IAAM,IAAO,IAC9D,CAAC,OAAQ,GAAS,GAAQ,GAAO,GAAQ,EAAI,CAE9C,OACE,EAAC,MAAD,CAAK,UAAU,mCAAf,CACE,EAAC,OAAD,CAAM,UAAU,gCAAwB,EAA2B,CAAA,CACnE,EAAC,EAAD,CAAQ,MAAO,EAAM,UAAU,CAAiB,yBAAhD,CACE,EAAC,EAAO,QAAR,CAAgB,UAAU,gBACxB,EAAC,EAAO,MAAR,CAAc,YAAa,EAAkB,CAAA,CAC9B,CAAA,CACjB,EAAC,EAAO,QAAR,CAAA,SACG,EAAM,IAAK,GACV,EAAC,EAAO,KAAR,CAAwB,MAAO,EAAK,UAAU,UAC3C,EACW,CAFI,EAEJ,CACd,CACa,CAAA,CACV,GACL"}
@@ -1 +1 @@
1
- {"version":3,"file":"Pagination.mjs","names":[],"sources":["../../../../src/components/Pagination/Pagination.tsx"],"sourcesContent":["'use client';\n\nimport { useItemSelector } from '@hooks/useItemSelector';\nimport { cn } from '@utils/cn';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react';\nimport {\n type ComponentProps,\n type FC,\n type HTMLAttributes,\n useEffect,\n useRef,\n} from 'react';\nimport { Button, ButtonColor, ButtonSize, ButtonVariant } from '../Button';\n\nexport const paginationVariants = cva(\n 'flex items-center justify-center gap-1',\n {\n variants: {\n size: {\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-3',\n },\n color: {\n text: 'background-text',\n primary: 'background-primary',\n secondary: 'background-secondary',\n neutral: 'background-neutral',\n destructive: 'background-destructive',\n },\n variant: {\n default: '',\n bordered: 'rounded-lg border border-border p-2',\n ghost: 'bg-transparent',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n }\n);\n\nexport enum PaginationSize {\n SM = 'sm',\n MD = 'md',\n LG = 'lg',\n}\n\nexport enum PaginationVariant {\n DEFAULT = 'default',\n BORDERED = 'bordered',\n GHOST = 'ghost',\n}\n\nexport type PaginationProps = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof paginationVariants> & {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n showFirstLast?: boolean;\n showPrevNext?: boolean;\n maxVisiblePages?: number;\n disabled?: boolean;\n };\n\nconst generatePageNumbers = (\n currentPage: number,\n totalPages: number,\n maxVisiblePages: number\n): (number | 'ellipsis')[] => {\n if (totalPages <= maxVisiblePages) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const pages: (number | 'ellipsis')[] = [];\n const halfVisible = Math.floor(maxVisiblePages / 2);\n\n pages.push(1);\n\n if (currentPage <= halfVisible + 2) {\n for (let i = 2; i <= Math.min(maxVisiblePages - 1, totalPages - 1); i++) {\n pages.push(i);\n }\n if (totalPages > maxVisiblePages) {\n pages.push('ellipsis');\n }\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n } else if (currentPage >= totalPages - halfVisible - 1) {\n if (totalPages > maxVisiblePages) {\n pages.push('ellipsis');\n }\n for (\n let i = Math.max(2, totalPages - maxVisiblePages + 2);\n i <= totalPages;\n i++\n ) {\n pages.push(i);\n }\n } else {\n pages.push('ellipsis');\n const start = currentPage - halfVisible;\n const end = currentPage + halfVisible;\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n pages.push('ellipsis');\n pages.push(totalPages);\n }\n\n return pages;\n};\n\nconst selector = (option: HTMLElement) =>\n option?.getAttribute('aria-current') === 'true';\n\nconst getButtonSize = (size?: PaginationSize | `${PaginationSize}` | null) => {\n if (size === PaginationSize.SM) {\n return ButtonSize.ICON_SM;\n } else if (size === PaginationSize.LG) {\n return ButtonSize.ICON_LG;\n } else {\n return ButtonSize.ICON_MD;\n }\n};\n\nconst InputIndicator: FC<ComponentProps<'div'>> = (props) => (\n <div\n className=\"absolute top-0 z-0 h-full w-auto rounded-xl bg-text/20 ring-4 ring-text/10 transition-[left,width] duration-300 ease-in-out [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl motion-reduce:transition-none\"\n {...props}\n />\n);\n\nexport const Pagination: FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n showFirstLast = false,\n showPrevNext = true,\n maxVisiblePages = 5,\n disabled = false,\n size = PaginationSize.MD,\n variant = PaginationVariant.DEFAULT,\n color = ButtonColor.TEXT,\n className,\n ...props\n}) => {\n const pageNumbers = generatePageNumbers(\n currentPage,\n totalPages,\n maxVisiblePages\n );\n\n const buttonSize = getButtonSize(size);\n const isFirstPage = currentPage === 1;\n const isLastPage = currentPage === totalPages;\n\n const optionsRefs = useRef<HTMLElement[]>([]);\n const indicatorRef = useRef<HTMLDivElement | null>(null);\n const { choiceIndicatorPosition, calculatePosition } = useItemSelector(\n optionsRefs,\n {\n selector,\n isHoverable: true,\n }\n );\n\n useEffect(() => {\n const timer = setTimeout(() => {\n calculatePosition();\n }, 300);\n\n return () => clearTimeout(timer);\n }, [currentPage, calculatePosition]);\n\n if (totalPages <= 1) return null;\n\n const handlePageChange = (page: number) => {\n if (!disabled && page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page);\n }\n };\n\n return (\n <div\n className={cn(paginationVariants({ size, variant }), className)}\n {...props}\n >\n <div className=\"relative flex items-center gap-1\">\n {choiceIndicatorPosition && (\n <InputIndicator style={choiceIndicatorPosition} ref={indicatorRef} />\n )}\n\n {showPrevNext && (\n <Button\n variant={ButtonVariant.OUTLINE}\n size={buttonSize}\n color={ButtonColor.TEXT}\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={disabled || isFirstPage}\n label=\"Go to previous page\"\n Icon={ChevronLeft}\n ref={(el) => {\n if (el) optionsRefs.current[0] = el;\n }}\n className=\"min-w-0 px-2\"\n />\n )}\n\n <div className=\"flex items-center gap-1 max-md:gap-0.5\">\n {pageNumbers.map((page, index) => {\n if (page === 'ellipsis') {\n return (\n <div\n key={`ellipsis-${page}-${index}`}\n className=\"flex h-8 min-w-8 items-center justify-center px-1\"\n >\n <MoreHorizontal className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n );\n }\n\n const isActive = page === currentPage;\n // Calculate ref index: offset by 1 if showPrevNext, then count only non-ellipsis items\n const refIndex =\n (showPrevNext ? 1 : 0) +\n pageNumbers.slice(0, index).filter((p) => p !== 'ellipsis')\n .length;\n\n return (\n <Button\n key={page}\n variant={\n isActive ? ButtonVariant.DEFAULT : ButtonVariant.OUTLINE\n }\n size={buttonSize}\n color={ButtonColor.TEXT}\n onClick={() => handlePageChange(page)}\n disabled={disabled}\n label={`Go to page ${page}`}\n aria-current={isActive ? 'true' : 'false'}\n ref={(el) => {\n if (el) optionsRefs.current[refIndex] = el;\n }}\n className={cn(\n 'flex aspect-square h-8 w-8 min-w-0 items-center justify-center p-0 text-sm',\n size === 'sm' && 'h-6 w-6 text-xs',\n size === 'lg' && 'h-10 w-10 text-base',\n isActive && 'font-semibold'\n )}\n >\n {page}\n </Button>\n );\n })}\n </div>\n\n {showPrevNext && (\n <Button\n variant={ButtonVariant.OUTLINE}\n size={buttonSize}\n color={ButtonColor.TEXT}\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={disabled || isLastPage}\n label=\"Go to next page\"\n Icon={ChevronRight}\n ref={(el) => {\n const lastRefIndex =\n (showPrevNext ? 1 : 0) +\n pageNumbers.filter((p) => p !== 'ellipsis').length;\n if (el) optionsRefs.current[lastRefIndex] = el;\n }}\n className=\"min-w-0 px-2\"\n />\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"Pagination.mjs","names":[],"sources":["../../../../src/components/Pagination/Pagination.tsx"],"sourcesContent":["'use client';\n\nimport { useItemSelector } from '@hooks/useItemSelector';\nimport { cn } from '@utils/cn';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { ChevronLeft, ChevronRight, MoreHorizontal } from 'lucide-react';\nimport {\n type ComponentProps,\n type FC,\n type HTMLAttributes,\n useEffect,\n useRef,\n} from 'react';\nimport { Button, ButtonColor, ButtonSize, ButtonVariant } from '../Button';\n\nexport const paginationVariants = cva(\n 'flex items-center justify-center gap-1',\n {\n variants: {\n size: {\n sm: 'gap-1',\n md: 'gap-2',\n lg: 'gap-3',\n },\n color: {\n text: 'background-text',\n primary: 'background-primary',\n secondary: 'background-secondary',\n neutral: 'background-neutral',\n destructive: 'background-destructive',\n },\n variant: {\n default: '',\n bordered: 'rounded-lg border border-border p-2',\n ghost: 'bg-transparent',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n }\n);\n\nexport enum PaginationSize {\n SM = 'sm',\n MD = 'md',\n LG = 'lg',\n}\n\nexport enum PaginationVariant {\n DEFAULT = 'default',\n BORDERED = 'bordered',\n GHOST = 'ghost',\n}\n\nexport type PaginationProps = HTMLAttributes<HTMLDivElement> &\n VariantProps<typeof paginationVariants> & {\n currentPage: number;\n totalPages: number;\n onPageChange: (page: number) => void;\n showFirstLast?: boolean;\n showPrevNext?: boolean;\n maxVisiblePages?: number;\n disabled?: boolean;\n };\n\nconst generatePageNumbers = (\n currentPage: number,\n totalPages: number,\n maxVisiblePages: number\n): (number | 'ellipsis')[] => {\n if (totalPages <= maxVisiblePages) {\n return Array.from({ length: totalPages }, (_, i) => i + 1);\n }\n\n const pages: (number | 'ellipsis')[] = [];\n const halfVisible = Math.floor(maxVisiblePages / 2);\n\n pages.push(1);\n\n if (currentPage <= halfVisible + 2) {\n for (let i = 2; i <= Math.min(maxVisiblePages - 1, totalPages - 1); i++) {\n pages.push(i);\n }\n if (totalPages > maxVisiblePages) {\n pages.push('ellipsis');\n }\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n } else if (currentPage >= totalPages - halfVisible - 1) {\n if (totalPages > maxVisiblePages) {\n pages.push('ellipsis');\n }\n for (\n let i = Math.max(2, totalPages - maxVisiblePages + 2);\n i <= totalPages;\n i++\n ) {\n pages.push(i);\n }\n } else {\n pages.push('ellipsis');\n const start = currentPage - halfVisible;\n const end = currentPage + halfVisible;\n for (let i = start; i <= end; i++) {\n pages.push(i);\n }\n pages.push('ellipsis');\n pages.push(totalPages);\n }\n\n return pages;\n};\n\nconst selector = (option: HTMLElement) =>\n option?.getAttribute('aria-current') === 'true';\n\nconst getButtonSize = (size?: PaginationSize | `${PaginationSize}` | null) => {\n if (size === PaginationSize.SM) {\n return ButtonSize.ICON_SM;\n } else if (size === PaginationSize.LG) {\n return ButtonSize.ICON_LG;\n } else {\n return ButtonSize.ICON_MD;\n }\n};\n\nconst InputIndicator: FC<ComponentProps<'div'>> = (props) => (\n <div\n className=\"absolute top-0 z-0 h-full w-auto rounded-xl bg-text/20 ring-4 ring-text/10 transition-[left,width] duration-300 ease-in-out [corner-shape:squircle] supports-[corner-shape:squircle]:rounded-2xl motion-reduce:transition-none\"\n {...props}\n />\n);\n\nexport const Pagination: FC<PaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n showFirstLast = false,\n showPrevNext = true,\n maxVisiblePages = 5,\n disabled = false,\n size = PaginationSize.MD,\n variant = PaginationVariant.DEFAULT,\n color = ButtonColor.TEXT,\n className,\n ...props\n}) => {\n const pageNumbers = generatePageNumbers(\n currentPage,\n totalPages,\n maxVisiblePages\n );\n\n const buttonSize = getButtonSize(size);\n const isFirstPage = currentPage === 1;\n const isLastPage = currentPage === totalPages;\n\n const optionsRefs = useRef<HTMLElement[]>([]);\n const indicatorRef = useRef<HTMLDivElement | null>(null);\n const { choiceIndicatorPosition, calculatePosition } = useItemSelector(\n optionsRefs,\n {\n selector,\n isHoverable: true,\n }\n );\n\n useEffect(() => {\n const timer = setTimeout(() => {\n calculatePosition();\n }, 300);\n\n return () => clearTimeout(timer);\n }, [currentPage, calculatePosition]);\n\n if (totalPages <= 1) return null;\n\n const handlePageChange = (page: number) => {\n if (!disabled && page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page);\n }\n };\n\n return (\n <div\n className={cn(paginationVariants({ size, variant }), className)}\n {...props}\n >\n <div className=\"relative flex items-center gap-1\">\n {choiceIndicatorPosition && (\n <InputIndicator style={choiceIndicatorPosition} ref={indicatorRef} />\n )}\n\n {showPrevNext && (\n <Button\n variant={ButtonVariant.OUTLINE}\n size={buttonSize}\n color={ButtonColor.TEXT}\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={disabled || isFirstPage}\n label=\"Go to previous page\"\n Icon={ChevronLeft}\n ref={(el) => {\n if (el) optionsRefs.current[0] = el;\n }}\n className=\"min-w-0 px-2\"\n />\n )}\n\n <div className=\"flex items-center gap-1 max-md:gap-0.5\">\n {pageNumbers.map((page, index) => {\n if (page === 'ellipsis') {\n return (\n <div\n key={`ellipsis-${page}-${index}`}\n className=\"flex h-8 min-w-8 items-center justify-center px-1\"\n >\n <MoreHorizontal className=\"h-4 w-4 text-muted-foreground\" />\n </div>\n );\n }\n\n const isActive = page === currentPage;\n // Calculate ref index: offset by 1 if showPrevNext, then count only non-ellipsis items\n const refIndex =\n (showPrevNext ? 1 : 0) +\n pageNumbers.slice(0, index).filter((p) => p !== 'ellipsis')\n .length;\n\n return (\n <Button\n key={page}\n variant={\n isActive ? ButtonVariant.DEFAULT : ButtonVariant.OUTLINE\n }\n size={buttonSize}\n color={ButtonColor.TEXT}\n onClick={() => handlePageChange(page)}\n disabled={disabled}\n label={`Go to page ${page}`}\n aria-current={isActive ? 'true' : 'false'}\n ref={(el) => {\n if (el) optionsRefs.current[refIndex] = el;\n }}\n className={cn(\n 'flex aspect-square h-8 w-8 min-w-0 items-center justify-center p-0 text-sm',\n size === 'sm' && 'h-6 w-6 text-xs',\n size === 'lg' && 'h-10 w-10 text-base',\n isActive && 'font-semibold'\n )}\n >\n {page}\n </Button>\n );\n })}\n </div>\n\n {showPrevNext && (\n <Button\n variant={ButtonVariant.OUTLINE}\n size={buttonSize}\n color={ButtonColor.TEXT}\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={disabled || isLastPage}\n label=\"Go to next page\"\n Icon={ChevronRight}\n ref={(el) => {\n const lastRefIndex =\n (showPrevNext ? 1 : 0) +\n pageNumbers.filter((p) => p !== 'ellipsis').length;\n if (el) optionsRefs.current[lastRefIndex] = el;\n }}\n className=\"min-w-0 px-2\"\n />\n )}\n </div>\n </div>\n );\n};\n"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ShowingResultsNumberItems.mjs","names":[],"sources":["../../../../src/components/Pagination/ShowingResultsNumberItems.tsx"],"sourcesContent":["'use client';\n\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { useNumber } from 'react-intlayer/format';\n\nexport type ShowingResultsNumberItemsProps = {\n currentPage: number;\n pageSize: number;\n totalItems: number;\n};\n\nexport const ShowingResultsNumberItems: FC<ShowingResultsNumberItemsProps> = ({\n currentPage,\n pageSize,\n totalItems,\n}) => {\n const { showingResults } = useIntlayer('pagination');\n const number = useNumber();\n\n // Guard against weird inputs\n const safePageSize = Math.max(1, pageSize);\n const totalPages = Math.max(1, Math.ceil(totalItems / safePageSize));\n const page = Math.min(Math.max(1, currentPage), totalPages);\n\n const start =\n totalItems === 0 ? 0 : Math.min((page - 1) * safePageSize + 1, totalItems);\n const end = totalItems === 0 ? 0 : Math.min(page * safePageSize, totalItems);\n\n return (\n <div className=\"text-neutral text-sm\">\n {showingResults({\n start: number(start),\n end: number(end),\n total: number(totalItems),\n })}\n </div>\n );\n};\n"],"mappings":"oJAYA,MAAa,GAAiE,CAC5E,cACA,WACA,gBACI,CACJ,GAAM,CAAE,kBAAmB,EAAY,aAAa,CAC9C,EAAS,GAAW,CAGpB,EAAe,KAAK,IAAI,EAAG,EAAS,CACpC,EAAa,KAAK,IAAI,EAAG,KAAK,KAAK,EAAa,EAAa,CAAC,CAC9D,EAAO,KAAK,IAAI,KAAK,IAAI,EAAG,EAAY,CAAE,EAAW,CAErD,EACJ,IAAe,EAAI,EAAI,KAAK,KAAK,EAAO,GAAK,EAAe,EAAG,EAAW,CACtE,EAAM,IAAe,EAAI,EAAI,KAAK,IAAI,EAAO,EAAc,EAAW,CAE5E,OACE,EAAC,MAAA,CAAI,UAAU,gCACZ,EAAe,CACd,MAAO,EAAO,EAAM,CACpB,IAAK,EAAO,EAAI,CAChB,MAAO,EAAO,EAAW,CAC1B,CAAC,EACE"}
1
+ {"version":3,"file":"ShowingResultsNumberItems.mjs","names":[],"sources":["../../../../src/components/Pagination/ShowingResultsNumberItems.tsx"],"sourcesContent":["'use client';\n\nimport type { FC } from 'react';\nimport { useIntlayer } from 'react-intlayer';\nimport { useNumber } from 'react-intlayer/format';\n\nexport type ShowingResultsNumberItemsProps = {\n currentPage: number;\n pageSize: number;\n totalItems: number;\n};\n\nexport const ShowingResultsNumberItems: FC<ShowingResultsNumberItemsProps> = ({\n currentPage,\n pageSize,\n totalItems,\n}) => {\n const { showingResults } = useIntlayer('pagination');\n const number = useNumber();\n\n // Guard against weird inputs\n const safePageSize = Math.max(1, pageSize);\n const totalPages = Math.max(1, Math.ceil(totalItems / safePageSize));\n const page = Math.min(Math.max(1, currentPage), totalPages);\n\n const start =\n totalItems === 0 ? 0 : Math.min((page - 1) * safePageSize + 1, totalItems);\n const end = totalItems === 0 ? 0 : Math.min(page * safePageSize, totalItems);\n\n return (\n <div className=\"text-neutral text-sm\">\n {showingResults({\n start: number(start),\n end: number(end),\n total: number(totalItems),\n })}\n </div>\n );\n};\n"],"mappings":"oJAYA,MAAa,GAAiE,CAC5E,cACA,WACA,gBACI,CACJ,GAAM,CAAE,kBAAmB,EAAY,aAAa,CAC9C,EAAS,GAAW,CAGpB,EAAe,KAAK,IAAI,EAAG,EAAS,CACpC,EAAa,KAAK,IAAI,EAAG,KAAK,KAAK,EAAa,EAAa,CAAC,CAC9D,EAAO,KAAK,IAAI,KAAK,IAAI,EAAG,EAAY,CAAE,EAAW,CAErD,EACJ,IAAe,EAAI,EAAI,KAAK,KAAK,EAAO,GAAK,EAAe,EAAG,EAAW,CACtE,EAAM,IAAe,EAAI,EAAI,KAAK,IAAI,EAAO,EAAc,EAAW,CAE5E,OACE,EAAC,MAAD,CAAK,UAAU,gCACZ,EAAe,CACd,MAAO,EAAO,EAAM,CACpB,IAAK,EAAO,EAAI,CAChB,MAAO,EAAO,EAAW,CAC1B,CAAC,CACE,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"DotPattern.mjs","names":[],"sources":["../../../../src/components/Pattern/DotPattern.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { FC, SVGProps } from 'react';\n\n/**\n * Props for the DotPattern component\n * Extends SVGProps to inherit all standard SVG attributes\n */\ntype DotPatternProps = {\n /** Width of the pattern tile in pixels */\n width?: number;\n /** Height of the pattern tile in pixels */\n height?: number;\n /** Horizontal offset of the pattern */\n x?: number;\n /** Vertical offset of the pattern */\n y?: number;\n /** X coordinate of the dot center within the pattern tile */\n cx?: number;\n /** Y coordinate of the dot center within the pattern tile */\n cy?: number;\n /** Radius of each dot in the pattern */\n cr?: number;\n} & SVGProps<SVGSVGElement>;\n\n/**\n * Dot Pattern Component\n *\n * A decorative SVG component that generates a repeating dot pattern background.\n * Perfect for adding subtle texture and visual interest to sections, cards, or hero areas\n * without interfering with content readability.\n *\n * Features:\n * - Scalable vector-based pattern that looks crisp at any size\n * - Customizable dot spacing, size, and positioning\n * - Semi-transparent fill for subtle visual effect\n * - Accessibility-friendly with aria-hidden attribute\n * - Pointer events disabled to avoid interaction interference\n * - Unique pattern ID generation to prevent conflicts\n * - Full coverage with absolute positioning\n *\n * Technical Implementation:\n * - Uses SVG `<pattern>` element for efficient rendering\n * - Pattern repeats using userSpaceOnUse coordinate system\n * - Generates unique IDs using React's useId hook\n * - Fills entire container with 100% width and height\n * - Pattern tile coordinates defined in userSpaceOnUse units\n *\n * Visual Characteristics:\n * - Default: 16x16px tile with 1px radius dots\n * - Semi-transparent neutral fill (30% opacity)\n * - Dots positioned at (1,1) within each tile by default\n * - Absolute positioning covers entire parent container\n *\n * @example\n * Basic usage as background pattern:\n * ```tsx\n * <div className=\"relative min-h-screen\">\n * <DotPattern />\n * <div className=\"relative z-10\">\n * <h1>Content over dot pattern</h1>\n * </div>\n * </div>\n * ```\n *\n * @example\n * Custom dot spacing and size:\n * ```tsx\n * <DotPattern\n * width={24}\n * height={24}\n * cr={1.5}\n * className=\"fill-primary/20\"\n * />\n * ```\n *\n * @example\n * Offset pattern positioning:\n * ```tsx\n * <DotPattern\n * x={8}\n * y={8}\n * cx={2}\n * cy={2}\n * className=\"fill-accent/25\"\n * />\n * ```\n *\n * @example\n * Large sparse dots:\n * ```tsx\n * <DotPattern\n * width={32}\n * height={32}\n * cr={2}\n * cx={16}\n * cy={16}\n * className=\"fill-neutral/10\"\n * />\n * ```\n *\n * Styling Notes:\n * - Use `fill-*` classes to customize dot color and opacity\n * - Pattern automatically fills parent container\n * - Consider contrast with overlaid content\n * - Semi-transparent fills work best for backgrounds\n *\n * Accessibility:\n * - Marked as `aria-hidden=\"true\"` since it's decorative\n * - Pointer events disabled to maintain interactivity of overlaid content\n * - Does not interfere with screen readers or keyboard navigation\n *\n * @param props - DotPattern component props\n * @returns SVG element with repeating dot pattern\n */\nexport const DotPattern: FC<DotPatternProps> = ({\n width = 16,\n height = 16,\n x = 0,\n y = 0,\n cx = 1,\n cy = 1,\n cr = 1,\n className,\n ...props\n}) => (\n <svg\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute inset-0 h-full w-full fill-neutral/30',\n className\n )}\n {...props}\n >\n <defs>\n <pattern\n id=\"pattern-circle\"\n width={width}\n height={height}\n patternUnits=\"userSpaceOnUse\"\n patternContentUnits=\"userSpaceOnUse\"\n x={x}\n y={y}\n >\n <circle cx={cx} cy={cy} r={cr} />\n </pattern>\n </defs>\n <rect\n width=\"100%\"\n height=\"100%\"\n strokeWidth={0}\n fill={`url(#pattern-circle)`}\n />\n </svg>\n);\n"],"mappings":"0FAkHA,MAAa,GAAmC,CAC9C,QAAQ,GACR,SAAS,GACT,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,EACL,YACA,GAAG,KAEH,EAAC,MAAA,CACC,cAAY,OACZ,UAAW,EACT,qEACA,EACD,CACD,GAAI,YAEJ,EAAC,OAAA,CAAA,SACC,EAAC,UAAA,CACC,GAAG,iBACI,QACC,SACR,aAAa,iBACb,oBAAoB,iBACjB,IACA,aAEH,EAAC,SAAA,CAAW,KAAQ,KAAI,EAAG,GAAM,EACzB,CAAA,CACL,CACP,EAAC,OAAA,CACC,MAAM,OACN,OAAO,OACP,YAAa,EACb,KAAM,wBACN,CAAA,EACE"}
1
+ {"version":3,"file":"DotPattern.mjs","names":[],"sources":["../../../../src/components/Pattern/DotPattern.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { FC, SVGProps } from 'react';\n\n/**\n * Props for the DotPattern component\n * Extends SVGProps to inherit all standard SVG attributes\n */\ntype DotPatternProps = {\n /** Width of the pattern tile in pixels */\n width?: number;\n /** Height of the pattern tile in pixels */\n height?: number;\n /** Horizontal offset of the pattern */\n x?: number;\n /** Vertical offset of the pattern */\n y?: number;\n /** X coordinate of the dot center within the pattern tile */\n cx?: number;\n /** Y coordinate of the dot center within the pattern tile */\n cy?: number;\n /** Radius of each dot in the pattern */\n cr?: number;\n} & SVGProps<SVGSVGElement>;\n\n/**\n * Dot Pattern Component\n *\n * A decorative SVG component that generates a repeating dot pattern background.\n * Perfect for adding subtle texture and visual interest to sections, cards, or hero areas\n * without interfering with content readability.\n *\n * Features:\n * - Scalable vector-based pattern that looks crisp at any size\n * - Customizable dot spacing, size, and positioning\n * - Semi-transparent fill for subtle visual effect\n * - Accessibility-friendly with aria-hidden attribute\n * - Pointer events disabled to avoid interaction interference\n * - Unique pattern ID generation to prevent conflicts\n * - Full coverage with absolute positioning\n *\n * Technical Implementation:\n * - Uses SVG `<pattern>` element for efficient rendering\n * - Pattern repeats using userSpaceOnUse coordinate system\n * - Generates unique IDs using React's useId hook\n * - Fills entire container with 100% width and height\n * - Pattern tile coordinates defined in userSpaceOnUse units\n *\n * Visual Characteristics:\n * - Default: 16x16px tile with 1px radius dots\n * - Semi-transparent neutral fill (30% opacity)\n * - Dots positioned at (1,1) within each tile by default\n * - Absolute positioning covers entire parent container\n *\n * @example\n * Basic usage as background pattern:\n * ```tsx\n * <div className=\"relative min-h-screen\">\n * <DotPattern />\n * <div className=\"relative z-10\">\n * <h1>Content over dot pattern</h1>\n * </div>\n * </div>\n * ```\n *\n * @example\n * Custom dot spacing and size:\n * ```tsx\n * <DotPattern\n * width={24}\n * height={24}\n * cr={1.5}\n * className=\"fill-primary/20\"\n * />\n * ```\n *\n * @example\n * Offset pattern positioning:\n * ```tsx\n * <DotPattern\n * x={8}\n * y={8}\n * cx={2}\n * cy={2}\n * className=\"fill-accent/25\"\n * />\n * ```\n *\n * @example\n * Large sparse dots:\n * ```tsx\n * <DotPattern\n * width={32}\n * height={32}\n * cr={2}\n * cx={16}\n * cy={16}\n * className=\"fill-neutral/10\"\n * />\n * ```\n *\n * Styling Notes:\n * - Use `fill-*` classes to customize dot color and opacity\n * - Pattern automatically fills parent container\n * - Consider contrast with overlaid content\n * - Semi-transparent fills work best for backgrounds\n *\n * Accessibility:\n * - Marked as `aria-hidden=\"true\"` since it's decorative\n * - Pointer events disabled to maintain interactivity of overlaid content\n * - Does not interfere with screen readers or keyboard navigation\n *\n * @param props - DotPattern component props\n * @returns SVG element with repeating dot pattern\n */\nexport const DotPattern: FC<DotPatternProps> = ({\n width = 16,\n height = 16,\n x = 0,\n y = 0,\n cx = 1,\n cy = 1,\n cr = 1,\n className,\n ...props\n}) => (\n <svg\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute inset-0 h-full w-full fill-neutral/30',\n className\n )}\n {...props}\n >\n <defs>\n <pattern\n id=\"pattern-circle\"\n width={width}\n height={height}\n patternUnits=\"userSpaceOnUse\"\n patternContentUnits=\"userSpaceOnUse\"\n x={x}\n y={y}\n >\n <circle cx={cx} cy={cy} r={cr} />\n </pattern>\n </defs>\n <rect\n width=\"100%\"\n height=\"100%\"\n strokeWidth={0}\n fill={`url(#pattern-circle)`}\n />\n </svg>\n);\n"],"mappings":"0FAkHA,MAAa,GAAmC,CAC9C,QAAQ,GACR,SAAS,GACT,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,KAAK,EACL,KAAK,EACL,YACA,GAAG,KAEH,EAAC,MAAD,CACE,cAAY,OACZ,UAAW,EACT,qEACA,EACD,CACD,GAAI,WANN,CAQE,EAAC,OAAD,CAAA,SACE,EAAC,UAAD,CACE,GAAG,iBACI,QACC,SACR,aAAa,iBACb,oBAAoB,iBACjB,IACA,aAEH,EAAC,SAAD,CAAY,KAAQ,KAAI,EAAG,EAAM,CAAA,CACzB,CAAA,CACL,CAAA,CACP,EAAC,OAAD,CACE,MAAM,OACN,OAAO,OACP,YAAa,EACb,KAAM,uBACN,CAAA,CACE"}
@@ -1 +1 @@
1
- {"version":3,"file":"GridPattern.mjs","names":[],"sources":["../../../../src/components/Pattern/GridPattern.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { FC, SVGProps } from 'react';\n\n/**\n * Props for the GridPattern component\n * Extends SVGProps to inherit all standard SVG attributes\n */\ntype GridPatternProps = {\n /** Width of each grid cell in pixels */\n width?: number;\n /** Height of each grid cell in pixels */\n height?: number;\n /** Horizontal offset of the pattern */\n x?: number;\n /** Vertical offset of the pattern */\n y?: number;\n /** Array of grid coordinates to highlight as filled squares */\n squares?: [x: number, y: number][];\n /** Dash pattern for grid lines (0 = solid, positive = dashed) */\n strokeDasharray?: number;\n} & SVGProps<SVGSVGElement>;\n\n/**\n * Unique identifier for the grid pattern definition\n * Static to ensure consistent referencing across instances\n */\nconst id = 'grid-pattern';\n\n/**\n * Grid Pattern Component\n *\n * A versatile SVG component that generates a repeating grid pattern background with\n * optional highlighted squares. Ideal for technical layouts, dashboards, design mockups,\n * and any interface requiring structured visual organization.\n *\n * Features:\n * - Scalable vector-based grid that renders crisp at any zoom level\n * - Customizable cell dimensions and spacing\n * - Optional square highlighting for emphasis or data visualization\n * - Configurable stroke patterns (solid or dashed lines)\n * - Theme-aware styling with automatic dark mode support\n * - Accessibility-friendly with screen reader exclusion\n * - Performance optimized with pointer events disabled\n * - Full container coverage with responsive sizing\n *\n * Technical Architecture:\n * - Uses SVG `<pattern>` for memory-efficient repetition\n * - Grid lines drawn with path elements for precision\n * - Highlighted squares rendered as separate rect elements\n * - Pattern coordinates use userSpaceOnUse for consistency\n * - Static pattern ID prevents conflicts between instances\n *\n * Visual Design:\n * - Default: 40x40px grid cells with subtle neutral strokes\n * - Light mode: 10% fill opacity, 15% stroke opacity\n * - Dark mode: Enhanced 30% stroke opacity for visibility\n * - Slight offset (-1px) for optimal line rendering\n * - Optional dashed lines for more subtle appearance\n *\n * Highlighted Squares:\n * - Defined by coordinate arrays [x, y] where x,y are grid positions\n * - Automatically sized to fit within grid cells (width-1, height-1)\n * - Positioned with 1px offset for visual separation from grid lines\n * - Inherit theme-based fill colors for consistency\n *\n * @example\n * Basic grid background:\n * ```tsx\n * <div className=\"relative min-h-screen\">\n * <GridPattern />\n * <div className=\"relative z-10\">\n * <h1>Content over grid</h1>\n * </div>\n * </div>\n * ```\n *\n * @example\n * Custom grid size with dashed lines:\n * ```tsx\n * <GridPattern\n * width={60}\n * height={60}\n * strokeDasharray={2}\n * className=\"stroke-primary/20\"\n * />\n * ```\n *\n * @example\n * Data visualization with highlighted squares:\n * ```tsx\n * <GridPattern\n * width={30}\n * height={30}\n * squares={[\n * [0, 1], [1, 1], [2, 1],\n * [1, 2], [3, 0], [4, 2]\n * ]}\n * className=\"fill-accent/20 stroke-accent/30\"\n * />\n * ```\n *\n * @example\n * Fine grid for technical layouts:\n * ```tsx\n * <GridPattern\n * width={20}\n * height={20}\n * strokeDasharray={1}\n * className=\"stroke-neutral/8 fill-neutral/5\"\n * />\n * ```\n *\n * Styling Guidelines:\n * - Use low opacity values (5-30%) for background subtlety\n * - Consider theme contrast when customizing colors\n * - Dashed patterns work well for secondary grids\n * - Match grid colors with overall design system\n *\n * Performance Notes:\n * - Pattern definition reused efficiently across large areas\n * - Highlighted squares rendered individually for flexibility\n * - Pointer events disabled to prevent interaction blocking\n * - SVG optimized for browser rendering performance\n *\n * Accessibility:\n * - Hidden from screen readers with aria-hidden=\"true\"\n * - Purely decorative - doesn't convey essential information\n * - Maintains sufficient contrast with overlaid content\n *\n * @param props - GridPattern component props\n * @returns SVG element with repeating grid pattern and optional highlights\n */\nexport const GridPattern: FC<GridPatternProps> = ({\n width = 40,\n height = 40,\n x = -1,\n y = -1,\n strokeDasharray = 0,\n squares,\n className,\n ...props\n}) => (\n <svg\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute inset-0 h-full max-h-full w-full fill-neutral/10 stroke-neutral/15 dark:stroke-neutral/30',\n className\n )}\n {...props}\n >\n <defs>\n <pattern\n id={id}\n width={width}\n height={height}\n patternUnits=\"userSpaceOnUse\"\n x={x}\n y={y}\n >\n <path\n d={`M.5 ${height}V.5H${width}`}\n fill=\"none\"\n strokeDasharray={strokeDasharray}\n />\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" strokeWidth={0} fill={`url(#${id})`} />\n {squares && (\n <svg\n x={x}\n y={y}\n className=\"overflow-visible\"\n role=\"img\"\n aria-label=\"Grid pattern\"\n >\n {squares.map(([x, y]) => (\n <rect\n strokeWidth=\"0\"\n key={`${x}-${y}`}\n width={width - 1}\n height={height - 1}\n x={x * width + 1}\n y={y * height + 1}\n />\n ))}\n </svg>\n )}\n </svg>\n);\n"],"mappings":"0FA0BA,MAAM,EAAK,eA0GE,GAAqC,CAChD,QAAQ,GACR,SAAS,GACT,IAAI,GACJ,IAAI,GACJ,kBAAkB,EAClB,UACA,YACA,GAAG,KAEH,EAAC,MAAA,CACC,cAAY,OACZ,UAAW,EACT,yHACA,EACD,CACD,GAAI,YAEJ,EAAC,OAAA,CAAA,SACC,EAAC,UAAA,CACK,KACG,QACC,SACR,aAAa,iBACV,IACA,aAEH,EAAC,OAAA,CACC,EAAG,OAAO,EAAO,MAAM,IACvB,KAAK,OACY,mBACjB,EACM,CAAA,CACL,CACP,EAAC,OAAA,CAAK,MAAM,OAAO,OAAO,OAAO,YAAa,EAAG,KAAM,QAAQ,EAAG,IAAM,CACvE,GACC,EAAC,MAAA,CACI,IACA,IACH,UAAU,mBACV,KAAK,MACL,aAAW,wBAEV,EAAQ,KAAK,CAAC,EAAG,KAChB,EAAC,OAAA,CACC,YAAY,IAEZ,MAAO,EAAQ,EACf,OAAQ,EAAS,EACjB,EAAG,EAAI,EAAQ,EACf,EAAG,EAAI,EAAS,GAJX,GAAG,EAAE,GAAG,IAKb,CACF,EACE,GAEJ"}
1
+ {"version":3,"file":"GridPattern.mjs","names":[],"sources":["../../../../src/components/Pattern/GridPattern.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { FC, SVGProps } from 'react';\n\n/**\n * Props for the GridPattern component\n * Extends SVGProps to inherit all standard SVG attributes\n */\ntype GridPatternProps = {\n /** Width of each grid cell in pixels */\n width?: number;\n /** Height of each grid cell in pixels */\n height?: number;\n /** Horizontal offset of the pattern */\n x?: number;\n /** Vertical offset of the pattern */\n y?: number;\n /** Array of grid coordinates to highlight as filled squares */\n squares?: [x: number, y: number][];\n /** Dash pattern for grid lines (0 = solid, positive = dashed) */\n strokeDasharray?: number;\n} & SVGProps<SVGSVGElement>;\n\n/**\n * Unique identifier for the grid pattern definition\n * Static to ensure consistent referencing across instances\n */\nconst id = 'grid-pattern';\n\n/**\n * Grid Pattern Component\n *\n * A versatile SVG component that generates a repeating grid pattern background with\n * optional highlighted squares. Ideal for technical layouts, dashboards, design mockups,\n * and any interface requiring structured visual organization.\n *\n * Features:\n * - Scalable vector-based grid that renders crisp at any zoom level\n * - Customizable cell dimensions and spacing\n * - Optional square highlighting for emphasis or data visualization\n * - Configurable stroke patterns (solid or dashed lines)\n * - Theme-aware styling with automatic dark mode support\n * - Accessibility-friendly with screen reader exclusion\n * - Performance optimized with pointer events disabled\n * - Full container coverage with responsive sizing\n *\n * Technical Architecture:\n * - Uses SVG `<pattern>` for memory-efficient repetition\n * - Grid lines drawn with path elements for precision\n * - Highlighted squares rendered as separate rect elements\n * - Pattern coordinates use userSpaceOnUse for consistency\n * - Static pattern ID prevents conflicts between instances\n *\n * Visual Design:\n * - Default: 40x40px grid cells with subtle neutral strokes\n * - Light mode: 10% fill opacity, 15% stroke opacity\n * - Dark mode: Enhanced 30% stroke opacity for visibility\n * - Slight offset (-1px) for optimal line rendering\n * - Optional dashed lines for more subtle appearance\n *\n * Highlighted Squares:\n * - Defined by coordinate arrays [x, y] where x,y are grid positions\n * - Automatically sized to fit within grid cells (width-1, height-1)\n * - Positioned with 1px offset for visual separation from grid lines\n * - Inherit theme-based fill colors for consistency\n *\n * @example\n * Basic grid background:\n * ```tsx\n * <div className=\"relative min-h-screen\">\n * <GridPattern />\n * <div className=\"relative z-10\">\n * <h1>Content over grid</h1>\n * </div>\n * </div>\n * ```\n *\n * @example\n * Custom grid size with dashed lines:\n * ```tsx\n * <GridPattern\n * width={60}\n * height={60}\n * strokeDasharray={2}\n * className=\"stroke-primary/20\"\n * />\n * ```\n *\n * @example\n * Data visualization with highlighted squares:\n * ```tsx\n * <GridPattern\n * width={30}\n * height={30}\n * squares={[\n * [0, 1], [1, 1], [2, 1],\n * [1, 2], [3, 0], [4, 2]\n * ]}\n * className=\"fill-accent/20 stroke-accent/30\"\n * />\n * ```\n *\n * @example\n * Fine grid for technical layouts:\n * ```tsx\n * <GridPattern\n * width={20}\n * height={20}\n * strokeDasharray={1}\n * className=\"stroke-neutral/8 fill-neutral/5\"\n * />\n * ```\n *\n * Styling Guidelines:\n * - Use low opacity values (5-30%) for background subtlety\n * - Consider theme contrast when customizing colors\n * - Dashed patterns work well for secondary grids\n * - Match grid colors with overall design system\n *\n * Performance Notes:\n * - Pattern definition reused efficiently across large areas\n * - Highlighted squares rendered individually for flexibility\n * - Pointer events disabled to prevent interaction blocking\n * - SVG optimized for browser rendering performance\n *\n * Accessibility:\n * - Hidden from screen readers with aria-hidden=\"true\"\n * - Purely decorative - doesn't convey essential information\n * - Maintains sufficient contrast with overlaid content\n *\n * @param props - GridPattern component props\n * @returns SVG element with repeating grid pattern and optional highlights\n */\nexport const GridPattern: FC<GridPatternProps> = ({\n width = 40,\n height = 40,\n x = -1,\n y = -1,\n strokeDasharray = 0,\n squares,\n className,\n ...props\n}) => (\n <svg\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute inset-0 h-full max-h-full w-full fill-neutral/10 stroke-neutral/15 dark:stroke-neutral/30',\n className\n )}\n {...props}\n >\n <defs>\n <pattern\n id={id}\n width={width}\n height={height}\n patternUnits=\"userSpaceOnUse\"\n x={x}\n y={y}\n >\n <path\n d={`M.5 ${height}V.5H${width}`}\n fill=\"none\"\n strokeDasharray={strokeDasharray}\n />\n </pattern>\n </defs>\n <rect width=\"100%\" height=\"100%\" strokeWidth={0} fill={`url(#${id})`} />\n {squares && (\n <svg\n x={x}\n y={y}\n className=\"overflow-visible\"\n role=\"img\"\n aria-label=\"Grid pattern\"\n >\n {squares.map(([x, y]) => (\n <rect\n strokeWidth=\"0\"\n key={`${x}-${y}`}\n width={width - 1}\n height={height - 1}\n x={x * width + 1}\n y={y * height + 1}\n />\n ))}\n </svg>\n )}\n </svg>\n);\n"],"mappings":"0FA0BA,MAAM,EAAK,eA0GE,GAAqC,CAChD,QAAQ,GACR,SAAS,GACT,IAAI,GACJ,IAAI,GACJ,kBAAkB,EAClB,UACA,YACA,GAAG,KAEH,EAAC,MAAD,CACE,cAAY,OACZ,UAAW,EACT,yHACA,EACD,CACD,GAAI,WANN,CAQE,EAAC,OAAD,CAAA,SACE,EAAC,UAAD,CACM,KACG,QACC,SACR,aAAa,iBACV,IACA,aAEH,EAAC,OAAD,CACE,EAAG,OAAO,EAAO,MAAM,IACvB,KAAK,OACY,kBACjB,CAAA,CACM,CAAA,CACL,CAAA,CACP,EAAC,OAAD,CAAM,MAAM,OAAO,OAAO,OAAO,YAAa,EAAG,KAAM,QAAQ,EAAG,GAAM,CAAA,CACvE,GACC,EAAC,MAAD,CACK,IACA,IACH,UAAU,mBACV,KAAK,MACL,aAAW,wBAEV,EAAQ,KAAK,CAAC,EAAG,KAChB,EAAC,OAAD,CACE,YAAY,IAEZ,MAAO,EAAQ,EACf,OAAQ,EAAS,EACjB,EAAG,EAAI,EAAQ,EACf,EAAG,EAAI,EAAS,EAChB,CALK,GAAG,EAAE,GAAG,IAKb,CACF,CACE,CAAA,CAEJ"}