@intlayer/design-system 9.0.0-canary.9 → 9.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1326) hide show
  1. package/dist/esm/api/hooks/ai.mjs.map +1 -1
  2. package/dist/esm/api/hooks/analytics.mjs +71 -0
  3. package/dist/esm/api/hooks/analytics.mjs.map +1 -0
  4. package/dist/esm/api/hooks/asset.mjs.map +1 -1
  5. package/dist/esm/api/hooks/audit.mjs.map +1 -1
  6. package/dist/esm/api/hooks/auth.mjs.map +1 -1
  7. package/dist/esm/api/hooks/bitbucket.mjs.map +1 -1
  8. package/dist/esm/api/hooks/dictionary.mjs +15 -3
  9. package/dist/esm/api/hooks/dictionary.mjs.map +1 -1
  10. package/dist/esm/api/hooks/discussions.mjs.map +1 -1
  11. package/dist/esm/api/hooks/editor.mjs.map +1 -1
  12. package/dist/esm/api/hooks/environment.mjs.map +1 -1
  13. package/dist/esm/api/hooks/github.mjs.map +1 -1
  14. package/dist/esm/api/hooks/gitlab.mjs.map +1 -1
  15. package/dist/esm/api/hooks/newsletter.mjs.map +1 -1
  16. package/dist/esm/api/hooks/organization.mjs +35 -3
  17. package/dist/esm/api/hooks/organization.mjs.map +1 -1
  18. package/dist/esm/api/hooks/project.mjs +13 -1
  19. package/dist/esm/api/hooks/project.mjs.map +1 -1
  20. package/dist/esm/api/hooks/reviewer.mjs.map +1 -1
  21. package/dist/esm/api/hooks/search.mjs.map +1 -1
  22. package/dist/esm/api/hooks/showcaseProject.mjs.map +1 -1
  23. package/dist/esm/api/hooks/stripe.mjs.map +1 -1
  24. package/dist/esm/api/hooks/tag.mjs.map +1 -1
  25. package/dist/esm/api/hooks/translate.mjs.map +1 -1
  26. package/dist/esm/api/hooks/user.mjs.map +1 -1
  27. package/dist/esm/api/hooks/utils.mjs.map +1 -1
  28. package/dist/esm/api/index.mjs +6 -5
  29. package/dist/esm/api/useAuth/useAuth.mjs.map +1 -1
  30. package/dist/esm/api/useAuth/useOAuth2.mjs.map +1 -1
  31. package/dist/esm/api/useAuth/useSession.mjs.map +1 -1
  32. package/dist/esm/api/useIntlayerAPI.mjs +6 -1
  33. package/dist/esm/api/useIntlayerAPI.mjs.map +1 -1
  34. package/dist/esm/api/useUser/index.mjs.map +1 -1
  35. package/dist/esm/components/Accordion/Accordion.mjs.map +1 -1
  36. package/dist/esm/components/Avatar/image.mjs.map +1 -1
  37. package/dist/esm/components/Avatar/index.mjs.map +1 -1
  38. package/dist/esm/components/Badge/index.mjs.map +1 -1
  39. package/dist/esm/components/Breadcrumb/breadcrumb.content.mjs.map +1 -1
  40. package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
  41. package/dist/esm/components/Browser/Browser.content.mjs.map +1 -1
  42. package/dist/esm/components/Browser/Browser.mjs.map +1 -1
  43. package/dist/esm/components/Browser/extractUrlFromSitemap.mjs.map +1 -1
  44. package/dist/esm/components/Button/Button.mjs.map +1 -1
  45. package/dist/esm/components/Carousel/index.content.mjs.map +1 -1
  46. package/dist/esm/components/Carousel/index.mjs +2 -1
  47. package/dist/esm/components/Carousel/index.mjs.map +1 -1
  48. package/dist/esm/components/ClickOutsideDiv/index.mjs.map +1 -1
  49. package/dist/esm/components/CollapsibleTable/CollapsibleTable.mjs.map +1 -1
  50. package/dist/esm/components/Command/index.mjs.map +1 -1
  51. package/dist/esm/components/Container/index.mjs.map +1 -1
  52. package/dist/esm/components/ContentEditor/ContentEditor.mjs.map +1 -1
  53. package/dist/esm/components/ContentEditor/ContentEditorInput.mjs.map +1 -1
  54. package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs +1 -1
  55. package/dist/esm/components/ContentEditor/ContentEditorTextArea.mjs.map +1 -1
  56. package/dist/esm/components/ContentSelector/ContentSelector.mjs.map +1 -1
  57. package/dist/esm/components/CopyButton/CopyButton.content.mjs.map +1 -1
  58. package/dist/esm/components/CopyButton/index.mjs.map +1 -1
  59. package/dist/esm/components/CopyToClipboard/index.mjs.map +1 -1
  60. package/dist/esm/components/DictionaryEditor/DictionaryEditor.mjs.map +1 -1
  61. package/dist/esm/components/DictionaryEditor/ItemLayout.mjs.map +1 -1
  62. package/dist/esm/components/DictionaryEditor/NodeWrapper/ArrayWrapper.mjs.map +1 -1
  63. package/dist/esm/components/DictionaryEditor/NodeWrapper/BooleanWrapper.mjs.map +1 -1
  64. package/dist/esm/components/DictionaryEditor/NodeWrapper/ConditionWrapper.mjs.map +1 -1
  65. package/dist/esm/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.mjs.map +1 -1
  66. package/dist/esm/components/DictionaryEditor/NodeWrapper/FileWrapper.mjs.map +1 -1
  67. package/dist/esm/components/DictionaryEditor/NodeWrapper/HtmlWrapper.mjs.map +1 -1
  68. package/dist/esm/components/DictionaryEditor/NodeWrapper/InsertionWrapper.mjs.map +1 -1
  69. package/dist/esm/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.mjs.map +1 -1
  70. package/dist/esm/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.mjs.map +1 -1
  71. package/dist/esm/components/DictionaryEditor/NodeWrapper/NumberWrapper.mjs.map +1 -1
  72. package/dist/esm/components/DictionaryEditor/NodeWrapper/PluralWrapper.mjs.map +1 -1
  73. package/dist/esm/components/DictionaryEditor/NodeWrapper/StringWrapper.mjs.map +1 -1
  74. package/dist/esm/components/DictionaryEditor/NodeWrapper/TranslationWrapper.mjs.map +1 -1
  75. package/dist/esm/components/DictionaryEditor/NodeWrapper/index.mjs.map +1 -1
  76. package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs +3 -3
  77. package/dist/esm/components/DictionaryFieldEditor/ContentEditor.mjs.map +1 -1
  78. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.mjs.map +1 -1
  79. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs +26 -24
  80. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
  81. package/dist/esm/components/DictionaryFieldEditor/ContentEditorView/object.mjs.map +1 -1
  82. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs +1 -1
  83. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs.map +1 -1
  84. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.mjs.map +1 -1
  85. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.mjs.map +1 -1
  86. package/dist/esm/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.mjs.map +1 -1
  87. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs +6 -6
  88. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
  89. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.mjs.map +1 -1
  90. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.mjs.map +1 -1
  91. package/dist/esm/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.mjs.map +1 -1
  92. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs +1 -1
  93. package/dist/esm/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
  94. package/dist/esm/components/DictionaryFieldEditor/EnumKeyInput.mjs.map +1 -1
  95. package/dist/esm/components/DictionaryFieldEditor/JSONEditor.mjs.map +1 -1
  96. package/dist/esm/components/DictionaryFieldEditor/KeyPathBreadcrumb.mjs.map +1 -1
  97. package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs +19 -14
  98. package/dist/esm/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs.map +1 -1
  99. package/dist/esm/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.mjs.map +1 -1
  100. package/dist/esm/components/DictionaryFieldEditor/NodeTypeSelector.mjs.map +1 -1
  101. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs +5 -4
  102. package/dist/esm/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
  103. package/dist/esm/components/DictionaryFieldEditor/SaveForm/saveForm.content.mjs.map +1 -1
  104. package/dist/esm/components/DictionaryFieldEditor/StructureEditor.mjs.map +1 -1
  105. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs +6 -4
  106. package/dist/esm/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
  107. package/dist/esm/components/DictionaryFieldEditor/StructureView/structureView.content.mjs.map +1 -1
  108. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs.map +1 -1
  109. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.mjs.map +1 -1
  110. package/dist/esm/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.mjs.map +1 -1
  111. package/dist/esm/components/DictionaryFieldEditor/contentEditor.content.mjs.map +1 -1
  112. package/dist/esm/components/DictionaryFieldEditor/dictionaryFieldEditor.content.mjs.map +1 -1
  113. package/dist/esm/components/DictionaryFieldEditor/getIsEditableSection.mjs.map +1 -1
  114. package/dist/esm/components/DictionaryFieldEditor/nodeTypeSelector.content.mjs.map +1 -1
  115. package/dist/esm/components/DropDown/index.mjs.map +1 -1
  116. package/dist/esm/components/EditableField/EditableFieldInput.mjs.map +1 -1
  117. package/dist/esm/components/EditableField/EditableFieldLayout.mjs.map +1 -1
  118. package/dist/esm/components/EditableField/EditableFieldTextArea.mjs.map +1 -1
  119. package/dist/esm/components/ExpandCollapse/ExpandCollapse.mjs.map +1 -1
  120. package/dist/esm/components/ExpandCollapse/expandCollapse.content.mjs.map +1 -1
  121. package/dist/esm/components/Flags/Flag.mjs.map +1 -1
  122. package/dist/esm/components/Flags/ae.mjs +9 -6
  123. package/dist/esm/components/Flags/ae.mjs.map +1 -1
  124. package/dist/esm/components/Flags/af.mjs +26 -23
  125. package/dist/esm/components/Flags/af.mjs.map +1 -1
  126. package/dist/esm/components/Flags/al.mjs +7 -5
  127. package/dist/esm/components/Flags/al.mjs.map +1 -1
  128. package/dist/esm/components/Flags/am.mjs +7 -5
  129. package/dist/esm/components/Flags/am.mjs.map +1 -1
  130. package/dist/esm/components/Flags/ar.mjs +51 -31
  131. package/dist/esm/components/Flags/ar.mjs.map +1 -1
  132. package/dist/esm/components/Flags/at.mjs +5 -4
  133. package/dist/esm/components/Flags/at.mjs.map +1 -1
  134. package/dist/esm/components/Flags/au.mjs +13 -8
  135. package/dist/esm/components/Flags/au.mjs.map +1 -1
  136. package/dist/esm/components/Flags/az.mjs +13 -8
  137. package/dist/esm/components/Flags/az.mjs.map +1 -1
  138. package/dist/esm/components/Flags/ba.mjs +8 -7
  139. package/dist/esm/components/Flags/ba.mjs.map +1 -1
  140. package/dist/esm/components/Flags/bd.mjs +5 -4
  141. package/dist/esm/components/Flags/bd.mjs.map +1 -1
  142. package/dist/esm/components/Flags/be.mjs +5 -5
  143. package/dist/esm/components/Flags/be.mjs.map +1 -1
  144. package/dist/esm/components/Flags/bg.mjs +7 -5
  145. package/dist/esm/components/Flags/bg.mjs.map +1 -1
  146. package/dist/esm/components/Flags/bh.mjs +5 -4
  147. package/dist/esm/components/Flags/bh.mjs.map +1 -1
  148. package/dist/esm/components/Flags/bn.mjs +12 -8
  149. package/dist/esm/components/Flags/bn.mjs.map +1 -1
  150. package/dist/esm/components/Flags/bo.mjs +1306 -656
  151. package/dist/esm/components/Flags/bo.mjs.map +1 -1
  152. package/dist/esm/components/Flags/br.mjs +26 -26
  153. package/dist/esm/components/Flags/br.mjs.map +1 -1
  154. package/dist/esm/components/Flags/bw.mjs +4 -4
  155. package/dist/esm/components/Flags/bw.mjs.map +1 -1
  156. package/dist/esm/components/Flags/by.mjs +11 -8
  157. package/dist/esm/components/Flags/by.mjs.map +1 -1
  158. package/dist/esm/components/Flags/bz.mjs +111 -81
  159. package/dist/esm/components/Flags/bz.mjs.map +1 -1
  160. package/dist/esm/components/Flags/ca.mjs +5 -4
  161. package/dist/esm/components/Flags/ca.mjs.map +1 -1
  162. package/dist/esm/components/Flags/ch.mjs +4 -4
  163. package/dist/esm/components/Flags/ch.mjs.map +1 -1
  164. package/dist/esm/components/Flags/cl.mjs +9 -8
  165. package/dist/esm/components/Flags/cl.mjs.map +1 -1
  166. package/dist/esm/components/Flags/cn.mjs +15 -9
  167. package/dist/esm/components/Flags/cn.mjs.map +1 -1
  168. package/dist/esm/components/Flags/co.mjs +5 -5
  169. package/dist/esm/components/Flags/co.mjs.map +1 -1
  170. package/dist/esm/components/Flags/cr.mjs +5 -5
  171. package/dist/esm/components/Flags/cr.mjs.map +1 -1
  172. package/dist/esm/components/Flags/cu.mjs +9 -8
  173. package/dist/esm/components/Flags/cu.mjs.map +1 -1
  174. package/dist/esm/components/Flags/cv.mjs +9 -8
  175. package/dist/esm/components/Flags/cv.mjs.map +1 -1
  176. package/dist/esm/components/Flags/cz.mjs +7 -5
  177. package/dist/esm/components/Flags/cz.mjs.map +1 -1
  178. package/dist/esm/components/Flags/de.mjs +7 -5
  179. package/dist/esm/components/Flags/de.mjs.map +1 -1
  180. package/dist/esm/components/Flags/dj.mjs +9 -8
  181. package/dist/esm/components/Flags/dj.mjs.map +1 -1
  182. package/dist/esm/components/Flags/dk.mjs +7 -5
  183. package/dist/esm/components/Flags/dk.mjs.map +1 -1
  184. package/dist/esm/components/Flags/do.mjs +71 -53
  185. package/dist/esm/components/Flags/do.mjs.map +1 -1
  186. package/dist/esm/components/Flags/dz.mjs +7 -5
  187. package/dist/esm/components/Flags/dz.mjs.map +1 -1
  188. package/dist/esm/components/Flags/ec.mjs +165 -122
  189. package/dist/esm/components/Flags/ec.mjs.map +1 -1
  190. package/dist/esm/components/Flags/ee.mjs +7 -5
  191. package/dist/esm/components/Flags/ee.mjs.map +1 -1
  192. package/dist/esm/components/Flags/eg.mjs +28 -25
  193. package/dist/esm/components/Flags/eg.mjs.map +1 -1
  194. package/dist/esm/components/Flags/es-ct.mjs +5 -4
  195. package/dist/esm/components/Flags/es-ct.mjs.map +1 -1
  196. package/dist/esm/components/Flags/es-ga.mjs +184 -183
  197. package/dist/esm/components/Flags/es-ga.mjs.map +1 -1
  198. package/dist/esm/components/Flags/es-pv.mjs +7 -5
  199. package/dist/esm/components/Flags/es-pv.mjs.map +1 -1
  200. package/dist/esm/components/Flags/es.mjs +1072 -531
  201. package/dist/esm/components/Flags/es.mjs.map +1 -1
  202. package/dist/esm/components/Flags/et.mjs +10 -9
  203. package/dist/esm/components/Flags/et.mjs.map +1 -1
  204. package/dist/esm/components/Flags/fi.mjs +7 -5
  205. package/dist/esm/components/Flags/fi.mjs.map +1 -1
  206. package/dist/esm/components/Flags/flags.mjs.map +1 -1
  207. package/dist/esm/components/Flags/fo.mjs +8 -7
  208. package/dist/esm/components/Flags/fo.mjs.map +1 -1
  209. package/dist/esm/components/Flags/fr.mjs +7 -5
  210. package/dist/esm/components/Flags/fr.mjs.map +1 -1
  211. package/dist/esm/components/Flags/gb-wls.mjs +10 -8
  212. package/dist/esm/components/Flags/gb-wls.mjs.map +1 -1
  213. package/dist/esm/components/Flags/gb.mjs +11 -7
  214. package/dist/esm/components/Flags/gb.mjs.map +1 -1
  215. package/dist/esm/components/Flags/ge.mjs +9 -6
  216. package/dist/esm/components/Flags/ge.mjs.map +1 -1
  217. package/dist/esm/components/Flags/gh.mjs +9 -6
  218. package/dist/esm/components/Flags/gh.mjs.map +1 -1
  219. package/dist/esm/components/Flags/gr.mjs +23 -13
  220. package/dist/esm/components/Flags/gr.mjs.map +1 -1
  221. package/dist/esm/components/Flags/gt.mjs +116 -113
  222. package/dist/esm/components/Flags/gt.mjs.map +1 -1
  223. package/dist/esm/components/Flags/gw.mjs +19 -12
  224. package/dist/esm/components/Flags/gw.mjs.map +1 -1
  225. package/dist/esm/components/Flags/hk.mjs +13 -8
  226. package/dist/esm/components/Flags/hk.mjs.map +1 -1
  227. package/dist/esm/components/Flags/hn.mjs +21 -15
  228. package/dist/esm/components/Flags/hn.mjs.map +1 -1
  229. package/dist/esm/components/Flags/hr.mjs +49 -23
  230. package/dist/esm/components/Flags/hr.mjs.map +1 -1
  231. package/dist/esm/components/Flags/hu.mjs +4 -4
  232. package/dist/esm/components/Flags/hu.mjs.map +1 -1
  233. package/dist/esm/components/Flags/id.mjs +5 -4
  234. package/dist/esm/components/Flags/id.mjs.map +1 -1
  235. package/dist/esm/components/Flags/ie.mjs +5 -5
  236. package/dist/esm/components/Flags/ie.mjs.map +1 -1
  237. package/dist/esm/components/Flags/il.mjs +10 -9
  238. package/dist/esm/components/Flags/il.mjs.map +1 -1
  239. package/dist/esm/components/Flags/in.mjs +18 -15
  240. package/dist/esm/components/Flags/in.mjs.map +1 -1
  241. package/dist/esm/components/Flags/iq.mjs +11 -8
  242. package/dist/esm/components/Flags/iq.mjs.map +1 -1
  243. package/dist/esm/components/Flags/ir.mjs +33 -32
  244. package/dist/esm/components/Flags/ir.mjs.map +1 -1
  245. package/dist/esm/components/Flags/is.mjs +8 -7
  246. package/dist/esm/components/Flags/is.mjs.map +1 -1
  247. package/dist/esm/components/Flags/it.mjs +5 -5
  248. package/dist/esm/components/Flags/it.mjs.map +1 -1
  249. package/dist/esm/components/Flags/jm.mjs +5 -5
  250. package/dist/esm/components/Flags/jm.mjs.map +1 -1
  251. package/dist/esm/components/Flags/jo.mjs +11 -10
  252. package/dist/esm/components/Flags/jo.mjs.map +1 -1
  253. package/dist/esm/components/Flags/jp.mjs +7 -6
  254. package/dist/esm/components/Flags/jp.mjs.map +1 -1
  255. package/dist/esm/components/Flags/ke.mjs +28 -19
  256. package/dist/esm/components/Flags/ke.mjs.map +1 -1
  257. package/dist/esm/components/Flags/kg.mjs +11 -10
  258. package/dist/esm/components/Flags/kg.mjs.map +1 -1
  259. package/dist/esm/components/Flags/kh.mjs +20 -18
  260. package/dist/esm/components/Flags/kh.mjs.map +1 -1
  261. package/dist/esm/components/Flags/km.mjs +12 -11
  262. package/dist/esm/components/Flags/km.mjs.map +1 -1
  263. package/dist/esm/components/Flags/kr.mjs +14 -13
  264. package/dist/esm/components/Flags/kr.mjs.map +1 -1
  265. package/dist/esm/components/Flags/kw.mjs +9 -8
  266. package/dist/esm/components/Flags/kw.mjs.map +1 -1
  267. package/dist/esm/components/Flags/kz.mjs +18 -17
  268. package/dist/esm/components/Flags/kz.mjs.map +1 -1
  269. package/dist/esm/components/Flags/la.mjs +8 -7
  270. package/dist/esm/components/Flags/la.mjs.map +1 -1
  271. package/dist/esm/components/Flags/lb.mjs +10 -9
  272. package/dist/esm/components/Flags/lb.mjs.map +1 -1
  273. package/dist/esm/components/Flags/li.mjs +33 -31
  274. package/dist/esm/components/Flags/li.mjs.map +1 -1
  275. package/dist/esm/components/Flags/lk.mjs +22 -14
  276. package/dist/esm/components/Flags/lk.mjs.map +1 -1
  277. package/dist/esm/components/Flags/lt.mjs +5 -5
  278. package/dist/esm/components/Flags/lt.mjs.map +1 -1
  279. package/dist/esm/components/Flags/lu.mjs +7 -5
  280. package/dist/esm/components/Flags/lu.mjs.map +1 -1
  281. package/dist/esm/components/Flags/lv.mjs +3 -3
  282. package/dist/esm/components/Flags/lv.mjs.map +1 -1
  283. package/dist/esm/components/Flags/ly.mjs +8 -7
  284. package/dist/esm/components/Flags/ly.mjs.map +1 -1
  285. package/dist/esm/components/Flags/ma.mjs +5 -4
  286. package/dist/esm/components/Flags/ma.mjs.map +1 -1
  287. package/dist/esm/components/Flags/mc.mjs +4 -4
  288. package/dist/esm/components/Flags/mc.mjs.map +1 -1
  289. package/dist/esm/components/Flags/md.mjs +93 -61
  290. package/dist/esm/components/Flags/md.mjs.map +1 -1
  291. package/dist/esm/components/Flags/mk.mjs +7 -5
  292. package/dist/esm/components/Flags/mk.mjs.map +1 -1
  293. package/dist/esm/components/Flags/mm.mjs +13 -10
  294. package/dist/esm/components/Flags/mm.mjs.map +1 -1
  295. package/dist/esm/components/Flags/mn.mjs +19 -12
  296. package/dist/esm/components/Flags/mn.mjs.map +1 -1
  297. package/dist/esm/components/Flags/mo.mjs +10 -7
  298. package/dist/esm/components/Flags/mo.mjs.map +1 -1
  299. package/dist/esm/components/Flags/mr.mjs +9 -6
  300. package/dist/esm/components/Flags/mr.mjs.map +1 -1
  301. package/dist/esm/components/Flags/mt.mjs +44 -39
  302. package/dist/esm/components/Flags/mt.mjs.map +1 -1
  303. package/dist/esm/components/Flags/mv.mjs +9 -6
  304. package/dist/esm/components/Flags/mv.mjs.map +1 -1
  305. package/dist/esm/components/Flags/mx.mjs +748 -377
  306. package/dist/esm/components/Flags/mx.mjs.map +1 -1
  307. package/dist/esm/components/Flags/my.mjs +21 -20
  308. package/dist/esm/components/Flags/my.mjs.map +1 -1
  309. package/dist/esm/components/Flags/mz.mjs +17 -16
  310. package/dist/esm/components/Flags/mz.mjs.map +1 -1
  311. package/dist/esm/components/Flags/ng.mjs +4 -4
  312. package/dist/esm/components/Flags/ng.mjs.map +1 -1
  313. package/dist/esm/components/Flags/ni.mjs +103 -98
  314. package/dist/esm/components/Flags/ni.mjs.map +1 -1
  315. package/dist/esm/components/Flags/nl.mjs +7 -5
  316. package/dist/esm/components/Flags/nl.mjs.map +1 -1
  317. package/dist/esm/components/Flags/no.mjs +11 -7
  318. package/dist/esm/components/Flags/no.mjs.map +1 -1
  319. package/dist/esm/components/Flags/np.mjs +7 -6
  320. package/dist/esm/components/Flags/np.mjs.map +1 -1
  321. package/dist/esm/components/Flags/nz.mjs +30 -20
  322. package/dist/esm/components/Flags/nz.mjs.map +1 -1
  323. package/dist/esm/components/Flags/om.mjs +102 -101
  324. package/dist/esm/components/Flags/om.mjs.map +1 -1
  325. package/dist/esm/components/Flags/pa.mjs +9 -8
  326. package/dist/esm/components/Flags/pa.mjs.map +1 -1
  327. package/dist/esm/components/Flags/pe.mjs +5 -4
  328. package/dist/esm/components/Flags/pe.mjs.map +1 -1
  329. package/dist/esm/components/Flags/ph.mjs +9 -6
  330. package/dist/esm/components/Flags/ph.mjs.map +1 -1
  331. package/dist/esm/components/Flags/pk.mjs +8 -7
  332. package/dist/esm/components/Flags/pk.mjs.map +1 -1
  333. package/dist/esm/components/Flags/pl.mjs +3 -3
  334. package/dist/esm/components/Flags/pl.mjs.map +1 -1
  335. package/dist/esm/components/Flags/pr.mjs +9 -8
  336. package/dist/esm/components/Flags/pr.mjs.map +1 -1
  337. package/dist/esm/components/Flags/ps.mjs +10 -9
  338. package/dist/esm/components/Flags/ps.mjs.map +1 -1
  339. package/dist/esm/components/Flags/pt.mjs +34 -31
  340. package/dist/esm/components/Flags/pt.mjs.map +1 -1
  341. package/dist/esm/components/Flags/py.mjs +17 -11
  342. package/dist/esm/components/Flags/py.mjs.map +1 -1
  343. package/dist/esm/components/Flags/qa.mjs +5 -4
  344. package/dist/esm/components/Flags/qa.mjs.map +1 -1
  345. package/dist/esm/components/Flags/ro.mjs +5 -5
  346. package/dist/esm/components/Flags/ro.mjs.map +1 -1
  347. package/dist/esm/components/Flags/rs.mjs +259 -258
  348. package/dist/esm/components/Flags/rs.mjs.map +1 -1
  349. package/dist/esm/components/Flags/ru.mjs +7 -5
  350. package/dist/esm/components/Flags/ru.mjs.map +1 -1
  351. package/dist/esm/components/Flags/sa.mjs +21 -20
  352. package/dist/esm/components/Flags/sa.mjs.map +1 -1
  353. package/dist/esm/components/Flags/sd.mjs +9 -8
  354. package/dist/esm/components/Flags/sd.mjs.map +1 -1
  355. package/dist/esm/components/Flags/se.mjs +5 -4
  356. package/dist/esm/components/Flags/se.mjs.map +1 -1
  357. package/dist/esm/components/Flags/sg.mjs +9 -8
  358. package/dist/esm/components/Flags/sg.mjs.map +1 -1
  359. package/dist/esm/components/Flags/si.mjs +14 -13
  360. package/dist/esm/components/Flags/si.mjs.map +1 -1
  361. package/dist/esm/components/Flags/sk.mjs +15 -9
  362. package/dist/esm/components/Flags/sk.mjs.map +1 -1
  363. package/dist/esm/components/Flags/so.mjs +7 -6
  364. package/dist/esm/components/Flags/so.mjs.map +1 -1
  365. package/dist/esm/components/Flags/st.mjs +17 -13
  366. package/dist/esm/components/Flags/st.mjs.map +1 -1
  367. package/dist/esm/components/Flags/sv.mjs +538 -522
  368. package/dist/esm/components/Flags/sv.mjs.map +1 -1
  369. package/dist/esm/components/Flags/sy.mjs +9 -6
  370. package/dist/esm/components/Flags/sy.mjs.map +1 -1
  371. package/dist/esm/components/Flags/td.mjs +4 -4
  372. package/dist/esm/components/Flags/td.mjs.map +1 -1
  373. package/dist/esm/components/Flags/th.mjs +4 -4
  374. package/dist/esm/components/Flags/th.mjs.map +1 -1
  375. package/dist/esm/components/Flags/tl.mjs +9 -8
  376. package/dist/esm/components/Flags/tl.mjs.map +1 -1
  377. package/dist/esm/components/Flags/tn.mjs +5 -4
  378. package/dist/esm/components/Flags/tn.mjs.map +1 -1
  379. package/dist/esm/components/Flags/tr.mjs +5 -5
  380. package/dist/esm/components/Flags/tr.mjs.map +1 -1
  381. package/dist/esm/components/Flags/tt.mjs +7 -5
  382. package/dist/esm/components/Flags/tt.mjs.map +1 -1
  383. package/dist/esm/components/Flags/tw.mjs +7 -6
  384. package/dist/esm/components/Flags/tw.mjs.map +1 -1
  385. package/dist/esm/components/Flags/tz.mjs +9 -8
  386. package/dist/esm/components/Flags/tz.mjs.map +1 -1
  387. package/dist/esm/components/Flags/ua.mjs +4 -4
  388. package/dist/esm/components/Flags/ua.mjs.map +1 -1
  389. package/dist/esm/components/Flags/ug.mjs +26 -25
  390. package/dist/esm/components/Flags/ug.mjs.map +1 -1
  391. package/dist/esm/components/Flags/us.mjs +12 -8
  392. package/dist/esm/components/Flags/us.mjs.map +1 -1
  393. package/dist/esm/components/Flags/uy.mjs +15 -12
  394. package/dist/esm/components/Flags/uy.mjs.map +1 -1
  395. package/dist/esm/components/Flags/uz.mjs +27 -21
  396. package/dist/esm/components/Flags/uz.mjs.map +1 -1
  397. package/dist/esm/components/Flags/ve.mjs +21 -16
  398. package/dist/esm/components/Flags/ve.mjs.map +1 -1
  399. package/dist/esm/components/Flags/vn.mjs +7 -6
  400. package/dist/esm/components/Flags/vn.mjs.map +1 -1
  401. package/dist/esm/components/Flags/xx.mjs +5 -4
  402. package/dist/esm/components/Flags/xx.mjs.map +1 -1
  403. package/dist/esm/components/Flags/ye.mjs +5 -5
  404. package/dist/esm/components/Flags/ye.mjs.map +1 -1
  405. package/dist/esm/components/Flags/za.mjs +12 -11
  406. package/dist/esm/components/Flags/za.mjs.map +1 -1
  407. package/dist/esm/components/Flags/zw.mjs +16 -15
  408. package/dist/esm/components/Flags/zw.mjs.map +1 -1
  409. package/dist/esm/components/Footer/index.mjs.map +1 -1
  410. package/dist/esm/components/Form/FormBase.mjs.map +1 -1
  411. package/dist/esm/components/Form/FormControl.mjs.map +1 -1
  412. package/dist/esm/components/Form/FormDescription.mjs.map +1 -1
  413. package/dist/esm/components/Form/FormField.mjs +2 -1
  414. package/dist/esm/components/Form/FormField.mjs.map +1 -1
  415. package/dist/esm/components/Form/FormItem.mjs.map +1 -1
  416. package/dist/esm/components/Form/FormLabel.mjs.map +1 -1
  417. package/dist/esm/components/Form/FormMessage.mjs.map +1 -1
  418. package/dist/esm/components/Form/elements/AutoSizeTextAreaElement.mjs.map +1 -1
  419. package/dist/esm/components/Form/elements/CheckboxElement.mjs.map +1 -1
  420. package/dist/esm/components/Form/elements/EditableFieldInputElement.mjs.map +1 -1
  421. package/dist/esm/components/Form/elements/EditableFieldTextAreaElement.mjs.map +1 -1
  422. package/dist/esm/components/Form/elements/FormElement.mjs.map +1 -1
  423. package/dist/esm/components/Form/elements/FormElementWrapper.mjs.map +1 -1
  424. package/dist/esm/components/Form/elements/InputElement.mjs.map +1 -1
  425. package/dist/esm/components/Form/elements/InputPasswordElement.mjs.map +1 -1
  426. package/dist/esm/components/Form/elements/MultiselectElement.mjs.map +1 -1
  427. package/dist/esm/components/Form/elements/OTPElement.mjs.map +1 -1
  428. package/dist/esm/components/Form/elements/SearchInputElement.mjs.map +1 -1
  429. package/dist/esm/components/Form/elements/SelectElement.mjs.map +1 -1
  430. package/dist/esm/components/Form/elements/SwitchSelectorElement.mjs.map +1 -1
  431. package/dist/esm/components/Form/elements/TextAreaElement.mjs.map +1 -1
  432. package/dist/esm/components/Form/layout/FormItemLayout.mjs.map +1 -1
  433. package/dist/esm/components/Form/layout/FormLabelLayout.mjs.map +1 -1
  434. package/dist/esm/components/Form/layout/RequiredStar.mjs.map +1 -1
  435. package/dist/esm/components/HTMLRender/HTMLRender.mjs.map +1 -1
  436. package/dist/esm/components/Headers/index.mjs.map +1 -1
  437. package/dist/esm/components/HeightResizer/index.mjs.map +1 -1
  438. package/dist/esm/components/HideShow/index.mjs.map +1 -1
  439. package/dist/esm/components/IDE/Code.mjs +1 -1
  440. package/dist/esm/components/IDE/Code.mjs.map +1 -1
  441. package/dist/esm/components/IDE/CodeBlockClient.mjs.map +1 -1
  442. package/dist/esm/components/IDE/CodeBlockHighlight.mjs.map +1 -1
  443. package/dist/esm/components/IDE/CodeBlockServer.mjs.map +1 -1
  444. package/dist/esm/components/IDE/CodeBlockShiki.mjs.map +1 -1
  445. package/dist/esm/components/IDE/CodeConditionalRenderer.mjs.map +1 -1
  446. package/dist/esm/components/IDE/CodeContext.mjs.map +1 -1
  447. package/dist/esm/components/IDE/CodeFormatSelector.mjs.map +1 -1
  448. package/dist/esm/components/IDE/ContentDeclarationFormatSelector.mjs.map +1 -1
  449. package/dist/esm/components/IDE/CopyCode.mjs.map +1 -1
  450. package/dist/esm/components/IDE/FileList.mjs.map +1 -1
  451. package/dist/esm/components/IDE/FileTree.mjs.map +1 -1
  452. package/dist/esm/components/IDE/IDE.mjs +2 -1
  453. package/dist/esm/components/IDE/IDE.mjs.map +1 -1
  454. package/dist/esm/components/IDE/MarkDownRender.mjs.map +1 -1
  455. package/dist/esm/components/IDE/MonacoCode.mjs.map +1 -1
  456. package/dist/esm/components/IDE/PackageManagerSelector.mjs.map +1 -1
  457. package/dist/esm/components/IDE/code.content.mjs.map +1 -1
  458. package/dist/esm/components/IDE/codeTransformer.mjs +7 -4
  459. package/dist/esm/components/IDE/codeTransformer.mjs.map +1 -1
  460. package/dist/esm/components/IDE/copyCode.content.mjs.map +1 -1
  461. package/dist/esm/components/IDE/createFileTree.mjs.map +1 -1
  462. package/dist/esm/components/IDE/selectors.content.mjs.map +1 -1
  463. package/dist/esm/components/InformationTag/index.mjs.map +1 -1
  464. package/dist/esm/components/Input/Checkbox.mjs.map +1 -1
  465. package/dist/esm/components/Input/Input.mjs.map +1 -1
  466. package/dist/esm/components/Input/InputPassword.mjs.map +1 -1
  467. package/dist/esm/components/Input/OTPInput.mjs +2 -1
  468. package/dist/esm/components/Input/OTPInput.mjs.map +1 -1
  469. package/dist/esm/components/Input/Radio.mjs.map +1 -1
  470. package/dist/esm/components/Input/SearchInput.mjs.map +1 -1
  471. package/dist/esm/components/KeyboardScreenAdapter/index.mjs.map +1 -1
  472. package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs +2 -1
  473. package/dist/esm/components/KeyboardShortcut/KeyboardShortcut.mjs.map +1 -1
  474. package/dist/esm/components/Label/index.mjs.map +1 -1
  475. package/dist/esm/components/LanguageBackground/LanguageBackground.mjs.map +1 -1
  476. package/dist/esm/components/LanguageBackground/LanguageSection.mjs.map +1 -1
  477. package/dist/esm/components/Link/Link.mjs.map +1 -1
  478. package/dist/esm/components/Loader/index.content.mjs.map +1 -1
  479. package/dist/esm/components/Loader/index.mjs.map +1 -1
  480. package/dist/esm/components/Loader/spinner.mjs.map +1 -1
  481. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs.map +1 -1
  482. package/dist/esm/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.mjs.map +1 -1
  483. package/dist/esm/components/LocaleSwitcherContentDropDown/localeSwitcher.content.mjs.map +1 -1
  484. package/dist/esm/components/LocaleSwitcherDropDown/LocaleSwitcher.mjs +4 -2
  485. package/dist/esm/components/LocaleSwitcherDropDown/LocaleSwitcher.mjs.map +1 -1
  486. package/dist/esm/components/LocaleSwitcherDropDown/localeSwitcher.content.mjs.map +1 -1
  487. package/dist/esm/components/Logo/Logo.mjs.map +1 -1
  488. package/dist/esm/components/Logo/LogoTextOnly.mjs.map +1 -1
  489. package/dist/esm/components/Logo/LogoWithText.mjs.map +1 -1
  490. package/dist/esm/components/Logo/LogoWithTextBelow.mjs.map +1 -1
  491. package/dist/esm/components/MarkDownRender/MarkDownIframe.mjs.map +1 -1
  492. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs +1 -1
  493. package/dist/esm/components/MarkDownRender/MarkDownRender.mjs.map +1 -1
  494. package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs +2 -3
  495. package/dist/esm/components/MarkdownEditor/MarkdownEditor.mjs.map +1 -1
  496. package/dist/esm/components/MarkdownEditor/extensions.mjs.map +1 -1
  497. package/dist/esm/components/MarkdownEditor/generative/AICompletionCommands.mjs.map +1 -1
  498. package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs +2 -1
  499. package/dist/esm/components/MarkdownEditor/generative/AISelector.mjs.map +1 -1
  500. package/dist/esm/components/MarkdownEditor/generative/AISelectorCommands.mjs.map +1 -1
  501. package/dist/esm/components/MarkdownEditor/generative/GenerativeMenuSwitch.mjs.map +1 -1
  502. package/dist/esm/components/MarkdownEditor/generative/useAICompletion.mjs.map +1 -1
  503. package/dist/esm/components/MarkdownEditor/imageUpload.mjs +2 -1
  504. package/dist/esm/components/MarkdownEditor/imageUpload.mjs.map +1 -1
  505. package/dist/esm/components/MarkdownEditor/markdownEditor.content.mjs +118 -59
  506. package/dist/esm/components/MarkdownEditor/markdownEditor.content.mjs.map +1 -1
  507. package/dist/esm/components/MarkdownEditor/novel/components/editor-bubble-item.mjs.map +1 -1
  508. package/dist/esm/components/MarkdownEditor/novel/components/editor-bubble.mjs.map +1 -1
  509. package/dist/esm/components/MarkdownEditor/novel/components/editor-command-item.mjs.map +1 -1
  510. package/dist/esm/components/MarkdownEditor/novel/components/editor-command.mjs.map +1 -1
  511. package/dist/esm/components/MarkdownEditor/novel/components/editor.mjs.map +1 -1
  512. package/dist/esm/components/MarkdownEditor/novel/extensions/ai-highlight.mjs.map +1 -1
  513. package/dist/esm/components/MarkdownEditor/novel/extensions/custom-keymap.mjs.map +1 -1
  514. package/dist/esm/components/MarkdownEditor/novel/extensions/image-resizer.mjs +91 -37
  515. package/dist/esm/components/MarkdownEditor/novel/extensions/image-resizer.mjs.map +1 -1
  516. package/dist/esm/components/MarkdownEditor/novel/extensions/index.mjs.map +1 -1
  517. package/dist/esm/components/MarkdownEditor/novel/extensions/slash-command.mjs +49 -13
  518. package/dist/esm/components/MarkdownEditor/novel/extensions/slash-command.mjs.map +1 -1
  519. package/dist/esm/components/MarkdownEditor/novel/extensions/updated-image.mjs.map +1 -1
  520. package/dist/esm/components/MarkdownEditor/novel/plugins/upload-images.mjs.map +1 -1
  521. package/dist/esm/components/MarkdownEditor/novel/utils/atoms.mjs.map +1 -1
  522. package/dist/esm/components/MarkdownEditor/novel/utils/index.mjs.map +1 -1
  523. package/dist/esm/components/MarkdownEditor/selectors/ColorSelector.mjs.map +1 -1
  524. package/dist/esm/components/MarkdownEditor/selectors/LinkSelector.mjs.map +1 -1
  525. package/dist/esm/components/MarkdownEditor/selectors/NodeSelector.mjs.map +1 -1
  526. package/dist/esm/components/MarkdownEditor/selectors/TextButtons.mjs.map +1 -1
  527. package/dist/esm/components/MarkdownEditor/slashCommand.mjs.map +1 -1
  528. package/dist/esm/components/MaxHeightSmoother/index.mjs.map +1 -1
  529. package/dist/esm/components/MaxWidthSmoother/index.mjs.map +1 -1
  530. package/dist/esm/components/Modal/Modal.mjs.map +1 -1
  531. package/dist/esm/components/Navbar/Burger.mjs.map +1 -1
  532. package/dist/esm/components/Navbar/DesktopNavbar.mjs.map +1 -1
  533. package/dist/esm/components/Navbar/MobileNavbar.mjs.map +1 -1
  534. package/dist/esm/components/Navbar/index.mjs.map +1 -1
  535. package/dist/esm/components/Navbar/useNavigation.mjs.map +1 -1
  536. package/dist/esm/components/Pagination/NumberItemsSelector.mjs.map +1 -1
  537. package/dist/esm/components/Pagination/Pagination.mjs.map +1 -1
  538. package/dist/esm/components/Pagination/ShowingResultsNumberItems.mjs.map +1 -1
  539. package/dist/esm/components/Pagination/pagination.content.mjs.map +1 -1
  540. package/dist/esm/components/Pattern/DotPattern.mjs.map +1 -1
  541. package/dist/esm/components/Pattern/GridDistortionPattern.mjs +2 -1
  542. package/dist/esm/components/Pattern/GridDistortionPattern.mjs.map +1 -1
  543. package/dist/esm/components/Pattern/GridPattern.mjs.map +1 -1
  544. package/dist/esm/components/Pattern/SpotLight.mjs.map +1 -1
  545. package/dist/esm/components/Popover/dynamic.mjs.map +1 -1
  546. package/dist/esm/components/Popover/static.mjs.map +1 -1
  547. package/dist/esm/components/PressableSpan/PressableSpan.mjs.map +1 -1
  548. package/dist/esm/components/RightDrawer/RightDrawer.mjs.map +1 -1
  549. package/dist/esm/components/RightDrawer/isElementAtTopAndNotCovered.mjs.map +1 -1
  550. package/dist/esm/components/RightDrawer/rightDrawer.content.mjs.map +1 -1
  551. package/dist/esm/components/RightDrawer/useRightDrawer.mjs.map +1 -1
  552. package/dist/esm/components/Select/Multiselect.mjs +26 -24
  553. package/dist/esm/components/Select/Multiselect.mjs.map +1 -1
  554. package/dist/esm/components/Select/Select.mjs.map +1 -1
  555. package/dist/esm/components/SocialNetworks/DiscordLogo.mjs.map +1 -1
  556. package/dist/esm/components/SocialNetworks/FacebookLogo.mjs.map +1 -1
  557. package/dist/esm/components/SocialNetworks/InstagramLogo.mjs.map +1 -1
  558. package/dist/esm/components/SocialNetworks/ProductHuntLogo.mjs.map +1 -1
  559. package/dist/esm/components/SocialNetworks/TiktokLogo.mjs.map +1 -1
  560. package/dist/esm/components/SocialNetworks/XLogo.mjs.map +1 -1
  561. package/dist/esm/components/SocialNetworks/YoutubeLogo.mjs.map +1 -1
  562. package/dist/esm/components/SocialNetworks/index.mjs.map +1 -1
  563. package/dist/esm/components/Steps/index.mjs.map +1 -1
  564. package/dist/esm/components/Steps/steps.content.mjs.map +1 -1
  565. package/dist/esm/components/SwitchSelector/SwitchSelector.mjs.map +1 -1
  566. package/dist/esm/components/SwitchSelector/VerticalSwitchSelector.mjs.map +1 -1
  567. package/dist/esm/components/SwitchSelector/useSwitchSelector.mjs.map +1 -1
  568. package/dist/esm/components/Tab/Tab.mjs +4 -2
  569. package/dist/esm/components/Tab/Tab.mjs.map +1 -1
  570. package/dist/esm/components/Tab/TabContext.mjs.map +1 -1
  571. package/dist/esm/components/TabSelector/TabSelector.mjs.map +1 -1
  572. package/dist/esm/components/Table/ExpandButton.mjs.map +1 -1
  573. package/dist/esm/components/Table/SmartTable.mjs.map +1 -1
  574. package/dist/esm/components/Table/Table.mjs.map +1 -1
  575. package/dist/esm/components/Table/TableElements.mjs.map +1 -1
  576. package/dist/esm/components/Table/table.content.mjs.map +1 -1
  577. package/dist/esm/components/Table/useTableWidths.mjs.map +1 -1
  578. package/dist/esm/components/Tag/index.mjs.map +1 -1
  579. package/dist/esm/components/TechLogo/TechLogo.mjs.map +1 -1
  580. package/dist/esm/components/TechLogo/logos/Adonis.mjs.map +1 -1
  581. package/dist/esm/components/TechLogo/logos/Angular.mjs.map +1 -1
  582. package/dist/esm/components/TechLogo/logos/Anthropic.mjs.map +1 -1
  583. package/dist/esm/components/TechLogo/logos/Astro.mjs.map +1 -1
  584. package/dist/esm/components/TechLogo/logos/Atlassian.mjs.map +1 -1
  585. package/dist/esm/components/TechLogo/logos/Bitbucket.mjs.map +1 -1
  586. package/dist/esm/components/TechLogo/logos/ChatGPT.mjs.map +1 -1
  587. package/dist/esm/components/TechLogo/logos/Claude.mjs.map +1 -1
  588. package/dist/esm/components/TechLogo/logos/DeepSeek.mjs.map +1 -1
  589. package/dist/esm/components/TechLogo/logos/Express.mjs.map +1 -1
  590. package/dist/esm/components/TechLogo/logos/Fastify.mjs.map +1 -1
  591. package/dist/esm/components/TechLogo/logos/Gemini.mjs.map +1 -1
  592. package/dist/esm/components/TechLogo/logos/GitHub.mjs.map +1 -1
  593. package/dist/esm/components/TechLogo/logos/GitLab.mjs.map +1 -1
  594. package/dist/esm/components/TechLogo/logos/Google.mjs.map +1 -1
  595. package/dist/esm/components/TechLogo/logos/GoogleAI.mjs.map +1 -1
  596. package/dist/esm/components/TechLogo/logos/Grok.mjs.map +1 -1
  597. package/dist/esm/components/TechLogo/logos/Hono.mjs.map +1 -1
  598. package/dist/esm/components/TechLogo/logos/LinkedIn.mjs.map +1 -1
  599. package/dist/esm/components/TechLogo/logos/Lit.mjs.map +1 -1
  600. package/dist/esm/components/TechLogo/logos/Lynx.mjs.map +1 -1
  601. package/dist/esm/components/TechLogo/logos/Microsoft.mjs.map +1 -1
  602. package/dist/esm/components/TechLogo/logos/Mistral.mjs.map +1 -1
  603. package/dist/esm/components/TechLogo/logos/NestJS.mjs.map +1 -1
  604. package/dist/esm/components/TechLogo/logos/Nextjs.mjs.map +1 -1
  605. package/dist/esm/components/TechLogo/logos/Node.mjs.map +1 -1
  606. package/dist/esm/components/TechLogo/logos/Nuxt.mjs.map +1 -1
  607. package/dist/esm/components/TechLogo/logos/Ollama.mjs.map +1 -1
  608. package/dist/esm/components/TechLogo/logos/OpenAI.mjs.map +1 -1
  609. package/dist/esm/components/TechLogo/logos/Perplexity.mjs.map +1 -1
  610. package/dist/esm/components/TechLogo/logos/Preact.mjs.map +1 -1
  611. package/dist/esm/components/TechLogo/logos/Reactjs.mjs.map +1 -1
  612. package/dist/esm/components/TechLogo/logos/Solid.mjs.map +1 -1
  613. package/dist/esm/components/TechLogo/logos/Svelte.mjs.map +1 -1
  614. package/dist/esm/components/TechLogo/logos/Tanstack.mjs.map +1 -1
  615. package/dist/esm/components/TechLogo/logos/Vanilla.mjs.map +1 -1
  616. package/dist/esm/components/TechLogo/logos/Vitejs.mjs.map +1 -1
  617. package/dist/esm/components/TechLogo/logos/Vuejs.mjs.map +1 -1
  618. package/dist/esm/components/Terminal/Terminal.mjs.map +1 -1
  619. package/dist/esm/components/Terminal/terminal.content.mjs.map +1 -1
  620. package/dist/esm/components/TextArea/AutoSizeTextArea.mjs +1 -2
  621. package/dist/esm/components/TextArea/AutoSizeTextArea.mjs.map +1 -1
  622. package/dist/esm/components/TextArea/AutocompleteTextArea.mjs +2 -1
  623. package/dist/esm/components/TextArea/AutocompleteTextArea.mjs.map +1 -1
  624. package/dist/esm/components/TextArea/ContentEditableTextArea.mjs +30 -15
  625. package/dist/esm/components/TextArea/ContentEditableTextArea.mjs.map +1 -1
  626. package/dist/esm/components/TextArea/TextArea.mjs.map +1 -1
  627. package/dist/esm/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs.map +1 -1
  628. package/dist/esm/components/ThemeSwitcherDropDown/MobileThemeSwitcher.mjs.map +1 -1
  629. package/dist/esm/components/Toaster/Toast.mjs.map +1 -1
  630. package/dist/esm/components/Toaster/Toaster.mjs.map +1 -1
  631. package/dist/esm/components/Toaster/useToast.mjs.map +1 -1
  632. package/dist/esm/components/WithResizer/index.mjs +3 -2
  633. package/dist/esm/components/WithResizer/index.mjs.map +1 -1
  634. package/dist/esm/hooks/useDevice.mjs.map +1 -1
  635. package/dist/esm/hooks/useGetElementById.mjs.map +1 -1
  636. package/dist/esm/hooks/useGetElementOrWindow.mjs.map +1 -1
  637. package/dist/esm/hooks/useHorizontalSwipe.mjs +2 -1
  638. package/dist/esm/hooks/useHorizontalSwipe.mjs.map +1 -1
  639. package/dist/esm/hooks/useIsDarkMode.mjs +2 -1
  640. package/dist/esm/hooks/useIsDarkMode.mjs.map +1 -1
  641. package/dist/esm/hooks/useIsMounted.mjs.map +1 -1
  642. package/dist/esm/hooks/useItemSelector.mjs.map +1 -1
  643. package/dist/esm/hooks/useKeyboardDetector.mjs.map +1 -1
  644. package/dist/esm/hooks/usePersistedStore.mjs.map +1 -1
  645. package/dist/esm/hooks/useScreenWidth.mjs.map +1 -1
  646. package/dist/esm/hooks/useScrollBlockage/index.mjs.map +1 -1
  647. package/dist/esm/hooks/useScrollBlockage/useScrollBlockageStore.mjs.map +1 -1
  648. package/dist/esm/hooks/useScrollDetection.mjs +5 -2
  649. package/dist/esm/hooks/useScrollDetection.mjs.map +1 -1
  650. package/dist/esm/hooks/useScrollY.mjs.map +1 -1
  651. package/dist/esm/hooks/useSearch.mjs.map +1 -1
  652. package/dist/esm/libs/auth.mjs.map +1 -1
  653. package/dist/esm/providers/ReactQueryProvider.mjs.map +1 -1
  654. package/dist/esm/routes.mjs +7 -1
  655. package/dist/esm/routes.mjs.map +1 -1
  656. package/dist/esm/structured-data/buildAuthorJsonLd.mjs.map +1 -1
  657. package/dist/esm/structured-data/buildBreadcrumbsJsonLd.mjs.map +1 -1
  658. package/dist/esm/structured-data/buildCreativeWorkJsonLd.mjs.map +1 -1
  659. package/dist/esm/structured-data/buildFAQPageJsonLd.mjs.map +1 -1
  660. package/dist/esm/structured-data/buildOrganizationJsonLd.mjs.map +1 -1
  661. package/dist/esm/structured-data/buildProductJsonLd.mjs.map +1 -1
  662. package/dist/esm/structured-data/buildSoftwareApplicationJsonLd.mjs +23 -4
  663. package/dist/esm/structured-data/buildSoftwareApplicationJsonLd.mjs.map +1 -1
  664. package/dist/esm/structured-data/buildWebsiteJsonLd.mjs.map +1 -1
  665. package/dist/esm/tailwind.config.mjs.map +1 -1
  666. package/dist/types/api/hooks/ai.d.ts +0 -1
  667. package/dist/types/api/hooks/ai.d.ts.map +1 -1
  668. package/dist/types/api/hooks/analytics.d.ts +27 -0
  669. package/dist/types/api/hooks/analytics.d.ts.map +1 -0
  670. package/dist/types/api/hooks/asset.d.ts +0 -1
  671. package/dist/types/api/hooks/asset.d.ts.map +1 -1
  672. package/dist/types/api/hooks/audit.d.ts +0 -1
  673. package/dist/types/api/hooks/audit.d.ts.map +1 -1
  674. package/dist/types/api/hooks/auth.d.ts.map +1 -1
  675. package/dist/types/api/hooks/bitbucket.d.ts.map +1 -1
  676. package/dist/types/api/hooks/dictionary.d.ts +2 -3
  677. package/dist/types/api/hooks/dictionary.d.ts.map +1 -1
  678. package/dist/types/api/hooks/discussions.d.ts +0 -1
  679. package/dist/types/api/hooks/discussions.d.ts.map +1 -1
  680. package/dist/types/api/hooks/editor.d.ts.map +1 -1
  681. package/dist/types/api/hooks/environment.d.ts.map +1 -1
  682. package/dist/types/api/hooks/github.d.ts +0 -1
  683. package/dist/types/api/hooks/github.d.ts.map +1 -1
  684. package/dist/types/api/hooks/gitlab.d.ts.map +1 -1
  685. package/dist/types/api/hooks/newsletter.d.ts.map +1 -1
  686. package/dist/types/api/hooks/organization.d.ts +2 -2
  687. package/dist/types/api/hooks/organization.d.ts.map +1 -1
  688. package/dist/types/api/hooks/project.d.ts +0 -1
  689. package/dist/types/api/hooks/project.d.ts.map +1 -1
  690. package/dist/types/api/hooks/reviewer.d.ts +2 -3
  691. package/dist/types/api/hooks/reviewer.d.ts.map +1 -1
  692. package/dist/types/api/hooks/search.d.ts +0 -1
  693. package/dist/types/api/hooks/search.d.ts.map +1 -1
  694. package/dist/types/api/hooks/showcaseProject.d.ts +1 -2
  695. package/dist/types/api/hooks/showcaseProject.d.ts.map +1 -1
  696. package/dist/types/api/hooks/stripe.d.ts +0 -1
  697. package/dist/types/api/hooks/stripe.d.ts.map +1 -1
  698. package/dist/types/api/hooks/tag.d.ts +0 -1
  699. package/dist/types/api/hooks/tag.d.ts.map +1 -1
  700. package/dist/types/api/hooks/translate.d.ts.map +1 -1
  701. package/dist/types/api/hooks/user.d.ts +0 -1
  702. package/dist/types/api/hooks/user.d.ts.map +1 -1
  703. package/dist/types/api/hooks/utils.d.ts +1 -6
  704. package/dist/types/api/hooks/utils.d.ts.map +1 -1
  705. package/dist/types/api/index.d.ts +5 -3
  706. package/dist/types/api/useAuth/useAuth.d.ts +1 -5
  707. package/dist/types/api/useAuth/useAuth.d.ts.map +1 -1
  708. package/dist/types/api/useAuth/useOAuth2.d.ts +1 -2
  709. package/dist/types/api/useAuth/useOAuth2.d.ts.map +1 -1
  710. package/dist/types/api/useAuth/useSession.d.ts +7 -4
  711. package/dist/types/api/useAuth/useSession.d.ts.map +1 -1
  712. package/dist/types/api/useIntlayerAPI.d.ts +44 -290
  713. package/dist/types/api/useIntlayerAPI.d.ts.map +1 -1
  714. package/dist/types/api/useUser/index.d.ts +1 -3
  715. package/dist/types/api/useUser/index.d.ts.map +1 -1
  716. package/dist/types/components/Accordion/Accordion.d.ts +1 -1
  717. package/dist/types/components/Accordion/Accordion.d.ts.map +1 -1
  718. package/dist/types/components/Avatar/image.d.ts.map +1 -1
  719. package/dist/types/components/Avatar/index.d.ts +0 -1
  720. package/dist/types/components/Avatar/index.d.ts.map +1 -1
  721. package/dist/types/components/Badge/index.d.ts +25 -16
  722. package/dist/types/components/Badge/index.d.ts.map +1 -1
  723. package/dist/types/components/Breadcrumb/breadcrumb.content.d.ts +1 -3
  724. package/dist/types/components/Breadcrumb/breadcrumb.content.d.ts.map +1 -1
  725. package/dist/types/components/Breadcrumb/index.d.ts +4 -5
  726. package/dist/types/components/Breadcrumb/index.d.ts.map +1 -1
  727. package/dist/types/components/Browser/Browser.content.d.ts +13 -15
  728. package/dist/types/components/Browser/Browser.content.d.ts.map +1 -1
  729. package/dist/types/components/Browser/Browser.d.ts +1 -14
  730. package/dist/types/components/Browser/Browser.d.ts.map +1 -1
  731. package/dist/types/components/Browser/extractUrlFromSitemap.d.ts.map +1 -1
  732. package/dist/types/components/Button/Button.d.ts +5 -7
  733. package/dist/types/components/Button/Button.d.ts.map +1 -1
  734. package/dist/types/components/Carousel/index.content.d.ts +3 -5
  735. package/dist/types/components/Carousel/index.content.d.ts.map +1 -1
  736. package/dist/types/components/Carousel/index.d.ts +0 -1
  737. package/dist/types/components/Carousel/index.d.ts.map +1 -1
  738. package/dist/types/components/ClickOutsideDiv/index.d.ts +0 -1
  739. package/dist/types/components/ClickOutsideDiv/index.d.ts.map +1 -1
  740. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +4 -6
  741. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts.map +1 -1
  742. package/dist/types/components/Command/index.d.ts +21 -25
  743. package/dist/types/components/Command/index.d.ts.map +1 -1
  744. package/dist/types/components/Container/index.d.ts +11 -12
  745. package/dist/types/components/Container/index.d.ts.map +1 -1
  746. package/dist/types/components/ContentEditor/ContentEditor.d.ts +5 -3
  747. package/dist/types/components/ContentEditor/ContentEditor.d.ts.map +1 -1
  748. package/dist/types/components/ContentEditor/ContentEditorInput.d.ts +10 -5
  749. package/dist/types/components/ContentEditor/ContentEditorInput.d.ts.map +1 -1
  750. package/dist/types/components/ContentEditor/ContentEditorTextArea.d.ts +10 -5
  751. package/dist/types/components/ContentEditor/ContentEditorTextArea.d.ts.map +1 -1
  752. package/dist/types/components/ContentSelector/ContentSelector.d.ts +0 -1
  753. package/dist/types/components/ContentSelector/ContentSelector.d.ts.map +1 -1
  754. package/dist/types/components/CopyButton/CopyButton.content.d.ts +1 -3
  755. package/dist/types/components/CopyButton/CopyButton.content.d.ts.map +1 -1
  756. package/dist/types/components/CopyButton/index.d.ts +1 -1
  757. package/dist/types/components/CopyButton/index.d.ts.map +1 -1
  758. package/dist/types/components/CopyToClipboard/index.d.ts +0 -1
  759. package/dist/types/components/CopyToClipboard/index.d.ts.map +1 -1
  760. package/dist/types/components/DictionaryEditor/DictionaryEditor.d.ts +0 -1
  761. package/dist/types/components/DictionaryEditor/DictionaryEditor.d.ts.map +1 -1
  762. package/dist/types/components/DictionaryEditor/ItemLayout.d.ts +0 -1
  763. package/dist/types/components/DictionaryEditor/ItemLayout.d.ts.map +1 -1
  764. package/dist/types/components/DictionaryEditor/NodeWrapper/ArrayWrapper.d.ts +0 -1
  765. package/dist/types/components/DictionaryEditor/NodeWrapper/ArrayWrapper.d.ts.map +1 -1
  766. package/dist/types/components/DictionaryEditor/NodeWrapper/BooleanWrapper.d.ts +0 -1
  767. package/dist/types/components/DictionaryEditor/NodeWrapper/BooleanWrapper.d.ts.map +1 -1
  768. package/dist/types/components/DictionaryEditor/NodeWrapper/ConditionWrapper.d.ts +1 -2
  769. package/dist/types/components/DictionaryEditor/NodeWrapper/ConditionWrapper.d.ts.map +1 -1
  770. package/dist/types/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.d.ts +1 -2
  771. package/dist/types/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.d.ts.map +1 -1
  772. package/dist/types/components/DictionaryEditor/NodeWrapper/FileWrapper.d.ts +0 -1
  773. package/dist/types/components/DictionaryEditor/NodeWrapper/FileWrapper.d.ts.map +1 -1
  774. package/dist/types/components/DictionaryEditor/NodeWrapper/HtmlWrapper.d.ts +1 -2
  775. package/dist/types/components/DictionaryEditor/NodeWrapper/HtmlWrapper.d.ts.map +1 -1
  776. package/dist/types/components/DictionaryEditor/NodeWrapper/InsertionWrapper.d.ts +1 -2
  777. package/dist/types/components/DictionaryEditor/NodeWrapper/InsertionWrapper.d.ts.map +1 -1
  778. package/dist/types/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.d.ts +1 -2
  779. package/dist/types/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.d.ts.map +1 -1
  780. package/dist/types/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.d.ts +0 -1
  781. package/dist/types/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.d.ts.map +1 -1
  782. package/dist/types/components/DictionaryEditor/NodeWrapper/NumberWrapper.d.ts +0 -1
  783. package/dist/types/components/DictionaryEditor/NodeWrapper/NumberWrapper.d.ts.map +1 -1
  784. package/dist/types/components/DictionaryEditor/NodeWrapper/PluralWrapper.d.ts +1 -2
  785. package/dist/types/components/DictionaryEditor/NodeWrapper/PluralWrapper.d.ts.map +1 -1
  786. package/dist/types/components/DictionaryEditor/NodeWrapper/StringWrapper.d.ts +0 -1
  787. package/dist/types/components/DictionaryEditor/NodeWrapper/StringWrapper.d.ts.map +1 -1
  788. package/dist/types/components/DictionaryEditor/NodeWrapper/TranslationWrapper.d.ts +1 -2
  789. package/dist/types/components/DictionaryEditor/NodeWrapper/TranslationWrapper.d.ts.map +1 -1
  790. package/dist/types/components/DictionaryEditor/NodeWrapper/index.d.ts +0 -1
  791. package/dist/types/components/DictionaryEditor/NodeWrapper/index.d.ts.map +1 -1
  792. package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts +0 -1
  793. package/dist/types/components/DictionaryFieldEditor/ContentEditor.d.ts.map +1 -1
  794. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.d.ts +2 -6
  795. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.d.ts.map +1 -1
  796. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts +7 -5
  797. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts.map +1 -1
  798. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/object.d.ts.map +1 -1
  799. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.d.ts +0 -1
  800. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.d.ts.map +1 -1
  801. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts +18 -20
  802. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts.map +1 -1
  803. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.d.ts +4 -6
  804. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.d.ts.map +1 -1
  805. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.d.ts +1 -2
  806. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.d.ts.map +1 -1
  807. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.d.ts +0 -1
  808. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.d.ts.map +1 -1
  809. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts +52 -54
  810. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.d.ts.map +1 -1
  811. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts +16 -18
  812. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts.map +1 -1
  813. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.d.ts +3 -4
  814. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.d.ts.map +1 -1
  815. package/dist/types/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts +0 -1
  816. package/dist/types/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts.map +1 -1
  817. package/dist/types/components/DictionaryFieldEditor/EnumKeyInput.d.ts +0 -1
  818. package/dist/types/components/DictionaryFieldEditor/EnumKeyInput.d.ts.map +1 -1
  819. package/dist/types/components/DictionaryFieldEditor/JSONEditor.d.ts +0 -1
  820. package/dist/types/components/DictionaryFieldEditor/JSONEditor.d.ts.map +1 -1
  821. package/dist/types/components/DictionaryFieldEditor/KeyPathBreadcrumb.d.ts +1 -1
  822. package/dist/types/components/DictionaryFieldEditor/KeyPathBreadcrumb.d.ts.map +1 -1
  823. package/dist/types/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.d.ts +0 -1
  824. package/dist/types/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.d.ts.map +1 -1
  825. package/dist/types/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.d.ts +10 -12
  826. package/dist/types/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.d.ts.map +1 -1
  827. package/dist/types/components/DictionaryFieldEditor/NodeTypeSelector.d.ts +0 -1
  828. package/dist/types/components/DictionaryFieldEditor/NodeTypeSelector.d.ts.map +1 -1
  829. package/dist/types/components/DictionaryFieldEditor/SaveForm/SaveForm.d.ts +0 -1
  830. package/dist/types/components/DictionaryFieldEditor/SaveForm/SaveForm.d.ts.map +1 -1
  831. package/dist/types/components/DictionaryFieldEditor/SaveForm/saveForm.content.d.ts +16 -18
  832. package/dist/types/components/DictionaryFieldEditor/SaveForm/saveForm.content.d.ts.map +1 -1
  833. package/dist/types/components/DictionaryFieldEditor/StructureEditor.d.ts +0 -1
  834. package/dist/types/components/DictionaryFieldEditor/StructureEditor.d.ts.map +1 -1
  835. package/dist/types/components/DictionaryFieldEditor/StructureView/StructureView.d.ts +0 -1
  836. package/dist/types/components/DictionaryFieldEditor/StructureView/StructureView.d.ts.map +1 -1
  837. package/dist/types/components/DictionaryFieldEditor/StructureView/structureView.content.d.ts +4 -6
  838. package/dist/types/components/DictionaryFieldEditor/StructureView/structureView.content.d.ts.map +1 -1
  839. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.d.ts +1 -2
  840. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.d.ts.map +1 -1
  841. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.d.ts +0 -1
  842. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.d.ts.map +1 -1
  843. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.d.ts +3 -5
  844. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.d.ts.map +1 -1
  845. package/dist/types/components/DictionaryFieldEditor/contentEditor.content.d.ts +3 -5
  846. package/dist/types/components/DictionaryFieldEditor/contentEditor.content.d.ts.map +1 -1
  847. package/dist/types/components/DictionaryFieldEditor/dictionaryFieldEditor.content.d.ts +2 -4
  848. package/dist/types/components/DictionaryFieldEditor/dictionaryFieldEditor.content.d.ts.map +1 -1
  849. package/dist/types/components/DictionaryFieldEditor/getIsEditableSection.d.ts +0 -1
  850. package/dist/types/components/DictionaryFieldEditor/getIsEditableSection.d.ts.map +1 -1
  851. package/dist/types/components/DictionaryFieldEditor/index.d.ts +1 -0
  852. package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts +16 -18
  853. package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts.map +1 -1
  854. package/dist/types/components/DropDown/index.d.ts +1 -1
  855. package/dist/types/components/DropDown/index.d.ts.map +1 -1
  856. package/dist/types/components/EditableField/EditableFieldInput.d.ts +4 -2
  857. package/dist/types/components/EditableField/EditableFieldInput.d.ts.map +1 -1
  858. package/dist/types/components/EditableField/EditableFieldLayout.d.ts +0 -1
  859. package/dist/types/components/EditableField/EditableFieldLayout.d.ts.map +1 -1
  860. package/dist/types/components/EditableField/EditableFieldTextArea.d.ts +4 -2
  861. package/dist/types/components/EditableField/EditableFieldTextArea.d.ts.map +1 -1
  862. package/dist/types/components/ExpandCollapse/ExpandCollapse.d.ts +7 -4
  863. package/dist/types/components/ExpandCollapse/ExpandCollapse.d.ts.map +1 -1
  864. package/dist/types/components/ExpandCollapse/expandCollapse.content.d.ts +1 -3
  865. package/dist/types/components/ExpandCollapse/expandCollapse.content.d.ts.map +1 -1
  866. package/dist/types/components/Flags/Flag.d.ts +0 -1
  867. package/dist/types/components/Flags/Flag.d.ts.map +1 -1
  868. package/dist/types/components/Flags/flags.d.ts +604 -604
  869. package/dist/types/components/Flags/flags.d.ts.map +1 -1
  870. package/dist/types/components/Footer/index.d.ts +13 -6
  871. package/dist/types/components/Footer/index.d.ts.map +1 -1
  872. package/dist/types/components/Form/Form.d.ts +2 -25
  873. package/dist/types/components/Form/Form.d.ts.map +1 -1
  874. package/dist/types/components/Form/FormBase.d.ts +3 -16
  875. package/dist/types/components/Form/FormBase.d.ts.map +1 -1
  876. package/dist/types/components/Form/FormControl.d.ts +0 -1
  877. package/dist/types/components/Form/FormControl.d.ts.map +1 -1
  878. package/dist/types/components/Form/FormDescription.d.ts +0 -1
  879. package/dist/types/components/Form/FormDescription.d.ts.map +1 -1
  880. package/dist/types/components/Form/FormField.d.ts +2 -7
  881. package/dist/types/components/Form/FormField.d.ts.map +1 -1
  882. package/dist/types/components/Form/FormItem.d.ts +1 -3
  883. package/dist/types/components/Form/FormItem.d.ts.map +1 -1
  884. package/dist/types/components/Form/FormLabel.d.ts +0 -1
  885. package/dist/types/components/Form/FormLabel.d.ts.map +1 -1
  886. package/dist/types/components/Form/FormMessage.d.ts +0 -1
  887. package/dist/types/components/Form/FormMessage.d.ts.map +1 -1
  888. package/dist/types/components/Form/elements/AutoSizeTextAreaElement.d.ts +1 -2
  889. package/dist/types/components/Form/elements/AutoSizeTextAreaElement.d.ts.map +1 -1
  890. package/dist/types/components/Form/elements/CheckboxElement.d.ts +2 -2
  891. package/dist/types/components/Form/elements/CheckboxElement.d.ts.map +1 -1
  892. package/dist/types/components/Form/elements/EditableFieldInputElement.d.ts +2 -4
  893. package/dist/types/components/Form/elements/EditableFieldInputElement.d.ts.map +1 -1
  894. package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts +2 -4
  895. package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts.map +1 -1
  896. package/dist/types/components/Form/elements/FormElement.d.ts +2 -3
  897. package/dist/types/components/Form/elements/FormElement.d.ts.map +1 -1
  898. package/dist/types/components/Form/elements/FormElementWrapper.d.ts +0 -1
  899. package/dist/types/components/Form/elements/FormElementWrapper.d.ts.map +1 -1
  900. package/dist/types/components/Form/elements/InputElement.d.ts +2 -2
  901. package/dist/types/components/Form/elements/InputElement.d.ts.map +1 -1
  902. package/dist/types/components/Form/elements/InputPasswordElement.d.ts +1 -2
  903. package/dist/types/components/Form/elements/InputPasswordElement.d.ts.map +1 -1
  904. package/dist/types/components/Form/elements/MultiselectElement.d.ts +2 -13
  905. package/dist/types/components/Form/elements/MultiselectElement.d.ts.map +1 -1
  906. package/dist/types/components/Form/elements/OTPElement.d.ts +4 -16
  907. package/dist/types/components/Form/elements/OTPElement.d.ts.map +1 -1
  908. package/dist/types/components/Form/elements/SearchInputElement.d.ts +2 -2
  909. package/dist/types/components/Form/elements/SearchInputElement.d.ts.map +1 -1
  910. package/dist/types/components/Form/elements/SelectElement.d.ts +2 -13
  911. package/dist/types/components/Form/elements/SelectElement.d.ts.map +1 -1
  912. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts +3 -13
  913. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts.map +1 -1
  914. package/dist/types/components/Form/elements/TextAreaElement.d.ts +1 -2
  915. package/dist/types/components/Form/elements/TextAreaElement.d.ts.map +1 -1
  916. package/dist/types/components/Form/index.d.ts +3 -1
  917. package/dist/types/components/Form/layout/FormItemLayout.d.ts +0 -1
  918. package/dist/types/components/Form/layout/FormItemLayout.d.ts.map +1 -1
  919. package/dist/types/components/Form/layout/FormLabelLayout.d.ts +0 -1
  920. package/dist/types/components/Form/layout/FormLabelLayout.d.ts.map +1 -1
  921. package/dist/types/components/Form/layout/RequiredStar.d.ts +0 -1
  922. package/dist/types/components/Form/layout/RequiredStar.d.ts.map +1 -1
  923. package/dist/types/components/HTMLRender/HTMLRender.d.ts +0 -1
  924. package/dist/types/components/HTMLRender/HTMLRender.d.ts.map +1 -1
  925. package/dist/types/components/Headers/index.d.ts +0 -1
  926. package/dist/types/components/Headers/index.d.ts.map +1 -1
  927. package/dist/types/components/HeightResizer/index.d.ts +0 -1
  928. package/dist/types/components/HeightResizer/index.d.ts.map +1 -1
  929. package/dist/types/components/HideShow/index.d.ts +0 -1
  930. package/dist/types/components/HideShow/index.d.ts.map +1 -1
  931. package/dist/types/components/IDE/Code.d.ts +2 -2
  932. package/dist/types/components/IDE/Code.d.ts.map +1 -1
  933. package/dist/types/components/IDE/CodeBlockClient.d.ts +0 -1
  934. package/dist/types/components/IDE/CodeBlockClient.d.ts.map +1 -1
  935. package/dist/types/components/IDE/CodeBlockHighlight.d.ts +6 -10
  936. package/dist/types/components/IDE/CodeBlockHighlight.d.ts.map +1 -1
  937. package/dist/types/components/IDE/CodeBlockServer.d.ts +0 -1
  938. package/dist/types/components/IDE/CodeBlockServer.d.ts.map +1 -1
  939. package/dist/types/components/IDE/CodeBlockShiki.d.ts +0 -1
  940. package/dist/types/components/IDE/CodeBlockShiki.d.ts.map +1 -1
  941. package/dist/types/components/IDE/CodeConditionalRenderer.d.ts +0 -1
  942. package/dist/types/components/IDE/CodeConditionalRenderer.d.ts.map +1 -1
  943. package/dist/types/components/IDE/CodeContext.d.ts +1 -3
  944. package/dist/types/components/IDE/CodeContext.d.ts.map +1 -1
  945. package/dist/types/components/IDE/CodeFormatSelector.d.ts +2 -2
  946. package/dist/types/components/IDE/CodeFormatSelector.d.ts.map +1 -1
  947. package/dist/types/components/IDE/ContentDeclarationFormatSelector.d.ts +0 -1
  948. package/dist/types/components/IDE/ContentDeclarationFormatSelector.d.ts.map +1 -1
  949. package/dist/types/components/IDE/CopyCode.d.ts +2 -2
  950. package/dist/types/components/IDE/CopyCode.d.ts.map +1 -1
  951. package/dist/types/components/IDE/FileList.d.ts +0 -1
  952. package/dist/types/components/IDE/FileList.d.ts.map +1 -1
  953. package/dist/types/components/IDE/FileTree.d.ts +0 -1
  954. package/dist/types/components/IDE/FileTree.d.ts.map +1 -1
  955. package/dist/types/components/IDE/IDE.d.ts +0 -1
  956. package/dist/types/components/IDE/IDE.d.ts.map +1 -1
  957. package/dist/types/components/IDE/MarkDownRender.d.ts +0 -1
  958. package/dist/types/components/IDE/MarkDownRender.d.ts.map +1 -1
  959. package/dist/types/components/IDE/MonacoCode.d.ts +0 -1
  960. package/dist/types/components/IDE/MonacoCode.d.ts.map +1 -1
  961. package/dist/types/components/IDE/PackageManagerSelector.d.ts +0 -1
  962. package/dist/types/components/IDE/PackageManagerSelector.d.ts.map +1 -1
  963. package/dist/types/components/IDE/code.content.d.ts +2 -4
  964. package/dist/types/components/IDE/code.content.d.ts.map +1 -1
  965. package/dist/types/components/IDE/codeTransformer.d.ts.map +1 -1
  966. package/dist/types/components/IDE/copyCode.content.d.ts +2 -4
  967. package/dist/types/components/IDE/copyCode.content.d.ts.map +1 -1
  968. package/dist/types/components/IDE/createFileTree.d.ts.map +1 -1
  969. package/dist/types/components/IDE/index.d.ts +1 -1
  970. package/dist/types/components/IDE/selectors.content.d.ts +6 -8
  971. package/dist/types/components/IDE/selectors.content.d.ts.map +1 -1
  972. package/dist/types/components/InformationTag/index.d.ts +0 -1
  973. package/dist/types/components/InformationTag/index.d.ts.map +1 -1
  974. package/dist/types/components/Input/Checkbox.d.ts +3 -5
  975. package/dist/types/components/Input/Checkbox.d.ts.map +1 -1
  976. package/dist/types/components/Input/Input.d.ts +2 -4
  977. package/dist/types/components/Input/Input.d.ts.map +1 -1
  978. package/dist/types/components/Input/InputPassword.d.ts +0 -1
  979. package/dist/types/components/Input/InputPassword.d.ts.map +1 -1
  980. package/dist/types/components/Input/OTPInput.d.ts +7 -17
  981. package/dist/types/components/Input/OTPInput.d.ts.map +1 -1
  982. package/dist/types/components/Input/Radio.d.ts +3 -5
  983. package/dist/types/components/Input/Radio.d.ts.map +1 -1
  984. package/dist/types/components/Input/SearchInput.d.ts +1 -6
  985. package/dist/types/components/Input/SearchInput.d.ts.map +1 -1
  986. package/dist/types/components/KeyboardScreenAdapter/index.d.ts +0 -1
  987. package/dist/types/components/KeyboardScreenAdapter/index.d.ts.map +1 -1
  988. package/dist/types/components/KeyboardShortcut/KeyboardShortcut.d.ts +11 -6
  989. package/dist/types/components/KeyboardShortcut/KeyboardShortcut.d.ts.map +1 -1
  990. package/dist/types/components/Label/index.d.ts +0 -1
  991. package/dist/types/components/Label/index.d.ts.map +1 -1
  992. package/dist/types/components/LanguageBackground/LanguageBackground.d.ts +0 -1
  993. package/dist/types/components/LanguageBackground/LanguageBackground.d.ts.map +1 -1
  994. package/dist/types/components/LanguageBackground/LanguageSection.d.ts +0 -1
  995. package/dist/types/components/LanguageBackground/LanguageSection.d.ts.map +1 -1
  996. package/dist/types/components/Link/Link.d.ts +7 -12
  997. package/dist/types/components/Link/Link.d.ts.map +1 -1
  998. package/dist/types/components/Loader/index.content.d.ts +1 -3
  999. package/dist/types/components/Loader/index.content.d.ts.map +1 -1
  1000. package/dist/types/components/Loader/index.d.ts +3 -2
  1001. package/dist/types/components/Loader/index.d.ts.map +1 -1
  1002. package/dist/types/components/Loader/spinner.d.ts +3 -7
  1003. package/dist/types/components/Loader/spinner.d.ts.map +1 -1
  1004. package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.d.ts +0 -1
  1005. package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.d.ts.map +1 -1
  1006. package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.d.ts +0 -1
  1007. package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.d.ts.map +1 -1
  1008. package/dist/types/components/LocaleSwitcherContentDropDown/localeSwitcher.content.d.ts +8 -10
  1009. package/dist/types/components/LocaleSwitcherContentDropDown/localeSwitcher.content.d.ts.map +1 -1
  1010. package/dist/types/components/LocaleSwitcherDropDown/LocaleSwitcher.d.ts +0 -1
  1011. package/dist/types/components/LocaleSwitcherDropDown/LocaleSwitcher.d.ts.map +1 -1
  1012. package/dist/types/components/LocaleSwitcherDropDown/localeSwitcher.content.d.ts +6 -8
  1013. package/dist/types/components/LocaleSwitcherDropDown/localeSwitcher.content.d.ts.map +1 -1
  1014. package/dist/types/components/Logo/Logo.d.ts +0 -1
  1015. package/dist/types/components/Logo/Logo.d.ts.map +1 -1
  1016. package/dist/types/components/Logo/LogoTextOnly.d.ts +0 -1
  1017. package/dist/types/components/Logo/LogoTextOnly.d.ts.map +1 -1
  1018. package/dist/types/components/Logo/LogoWithText.d.ts +0 -1
  1019. package/dist/types/components/Logo/LogoWithText.d.ts.map +1 -1
  1020. package/dist/types/components/Logo/LogoWithTextBelow.d.ts +0 -1
  1021. package/dist/types/components/Logo/LogoWithTextBelow.d.ts.map +1 -1
  1022. package/dist/types/components/MarkDownRender/MarkDownIframe.d.ts +0 -1
  1023. package/dist/types/components/MarkDownRender/MarkDownIframe.d.ts.map +1 -1
  1024. package/dist/types/components/MarkDownRender/MarkDownRender.d.ts +65 -116
  1025. package/dist/types/components/MarkDownRender/MarkDownRender.d.ts.map +1 -1
  1026. package/dist/types/components/MarkDownRender/index.d.ts +1 -1
  1027. package/dist/types/components/MarkdownEditor/MarkdownEditor.d.ts +11 -6
  1028. package/dist/types/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  1029. package/dist/types/components/MarkdownEditor/extensions.d.ts.map +1 -1
  1030. package/dist/types/components/MarkdownEditor/generative/AICompletionCommands.d.ts +1 -6
  1031. package/dist/types/components/MarkdownEditor/generative/AICompletionCommands.d.ts.map +1 -1
  1032. package/dist/types/components/MarkdownEditor/generative/AISelector.d.ts +7 -10
  1033. package/dist/types/components/MarkdownEditor/generative/AISelector.d.ts.map +1 -1
  1034. package/dist/types/components/MarkdownEditor/generative/AISelectorCommands.d.ts +1 -5
  1035. package/dist/types/components/MarkdownEditor/generative/AISelectorCommands.d.ts.map +1 -1
  1036. package/dist/types/components/MarkdownEditor/generative/GenerativeMenuSwitch.d.ts +7 -12
  1037. package/dist/types/components/MarkdownEditor/generative/GenerativeMenuSwitch.d.ts.map +1 -1
  1038. package/dist/types/components/MarkdownEditor/generative/useAICompletion.d.ts +2 -1
  1039. package/dist/types/components/MarkdownEditor/generative/useAICompletion.d.ts.map +1 -1
  1040. package/dist/types/components/MarkdownEditor/imageUpload.d.ts +6 -7
  1041. package/dist/types/components/MarkdownEditor/imageUpload.d.ts.map +1 -1
  1042. package/dist/types/components/MarkdownEditor/markdownEditor.content.d.ts +118 -61
  1043. package/dist/types/components/MarkdownEditor/markdownEditor.content.d.ts.map +1 -1
  1044. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble-item.d.ts +0 -1
  1045. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble-item.d.ts.map +1 -1
  1046. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble.d.ts +0 -1
  1047. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble.d.ts.map +1 -1
  1048. package/dist/types/components/MarkdownEditor/novel/components/editor-command-item.d.ts +4 -9
  1049. package/dist/types/components/MarkdownEditor/novel/components/editor-command-item.d.ts.map +1 -1
  1050. package/dist/types/components/MarkdownEditor/novel/components/editor-command.d.ts +6 -10
  1051. package/dist/types/components/MarkdownEditor/novel/components/editor-command.d.ts.map +1 -1
  1052. package/dist/types/components/MarkdownEditor/novel/components/editor.d.ts +5 -2
  1053. package/dist/types/components/MarkdownEditor/novel/components/editor.d.ts.map +1 -1
  1054. package/dist/types/components/MarkdownEditor/novel/extensions/ai-highlight.d.ts +0 -1
  1055. package/dist/types/components/MarkdownEditor/novel/extensions/ai-highlight.d.ts.map +1 -1
  1056. package/dist/types/components/MarkdownEditor/novel/extensions/custom-keymap.d.ts +0 -1
  1057. package/dist/types/components/MarkdownEditor/novel/extensions/custom-keymap.d.ts.map +1 -1
  1058. package/dist/types/components/MarkdownEditor/novel/extensions/image-resizer.d.ts +4 -1
  1059. package/dist/types/components/MarkdownEditor/novel/extensions/image-resizer.d.ts.map +1 -1
  1060. package/dist/types/components/MarkdownEditor/novel/extensions/index.d.ts +3 -8
  1061. package/dist/types/components/MarkdownEditor/novel/extensions/index.d.ts.map +1 -1
  1062. package/dist/types/components/MarkdownEditor/novel/extensions/slash-command.d.ts +4 -5
  1063. package/dist/types/components/MarkdownEditor/novel/extensions/slash-command.d.ts.map +1 -1
  1064. package/dist/types/components/MarkdownEditor/novel/extensions/updated-image.d.ts +1 -4
  1065. package/dist/types/components/MarkdownEditor/novel/extensions/updated-image.d.ts.map +1 -1
  1066. package/dist/types/components/MarkdownEditor/novel/index.d.ts +1 -0
  1067. package/dist/types/components/MarkdownEditor/novel/plugins/upload-images.d.ts +2 -8
  1068. package/dist/types/components/MarkdownEditor/novel/plugins/upload-images.d.ts.map +1 -1
  1069. package/dist/types/components/MarkdownEditor/novel/utils/atoms.d.ts +0 -1
  1070. package/dist/types/components/MarkdownEditor/novel/utils/atoms.d.ts.map +1 -1
  1071. package/dist/types/components/MarkdownEditor/novel/utils/index.d.ts +0 -1
  1072. package/dist/types/components/MarkdownEditor/novel/utils/index.d.ts.map +1 -1
  1073. package/dist/types/components/MarkdownEditor/selectors/ColorSelector.d.ts +0 -1
  1074. package/dist/types/components/MarkdownEditor/selectors/ColorSelector.d.ts.map +1 -1
  1075. package/dist/types/components/MarkdownEditor/selectors/LinkSelector.d.ts +0 -1
  1076. package/dist/types/components/MarkdownEditor/selectors/LinkSelector.d.ts.map +1 -1
  1077. package/dist/types/components/MarkdownEditor/selectors/NodeSelector.d.ts +1 -1
  1078. package/dist/types/components/MarkdownEditor/selectors/NodeSelector.d.ts.map +1 -1
  1079. package/dist/types/components/MarkdownEditor/selectors/TextButtons.d.ts +1 -3
  1080. package/dist/types/components/MarkdownEditor/selectors/TextButtons.d.ts.map +1 -1
  1081. package/dist/types/components/MarkdownEditor/slashCommand.d.ts +3 -5
  1082. package/dist/types/components/MarkdownEditor/slashCommand.d.ts.map +1 -1
  1083. package/dist/types/components/MaxHeightSmoother/index.d.ts +0 -1
  1084. package/dist/types/components/MaxHeightSmoother/index.d.ts.map +1 -1
  1085. package/dist/types/components/MaxWidthSmoother/index.d.ts +1 -11
  1086. package/dist/types/components/MaxWidthSmoother/index.d.ts.map +1 -1
  1087. package/dist/types/components/Modal/Modal.d.ts +0 -1
  1088. package/dist/types/components/Modal/Modal.d.ts.map +1 -1
  1089. package/dist/types/components/Navbar/Burger.d.ts +1 -7
  1090. package/dist/types/components/Navbar/Burger.d.ts.map +1 -1
  1091. package/dist/types/components/Navbar/DesktopNavbar.d.ts +9 -11
  1092. package/dist/types/components/Navbar/DesktopNavbar.d.ts.map +1 -1
  1093. package/dist/types/components/Navbar/MobileNavbar.d.ts +15 -17
  1094. package/dist/types/components/Navbar/MobileNavbar.d.ts.map +1 -1
  1095. package/dist/types/components/Navbar/index.d.ts +21 -79
  1096. package/dist/types/components/Navbar/index.d.ts.map +1 -1
  1097. package/dist/types/components/Navbar/useNavigation.d.ts +5 -2
  1098. package/dist/types/components/Navbar/useNavigation.d.ts.map +1 -1
  1099. package/dist/types/components/Pagination/NumberItemsSelector.d.ts +0 -1
  1100. package/dist/types/components/Pagination/NumberItemsSelector.d.ts.map +1 -1
  1101. package/dist/types/components/Pagination/Pagination.d.ts +4 -6
  1102. package/dist/types/components/Pagination/Pagination.d.ts.map +1 -1
  1103. package/dist/types/components/Pagination/ShowingResultsNumberItems.d.ts +0 -1
  1104. package/dist/types/components/Pagination/ShowingResultsNumberItems.d.ts.map +1 -1
  1105. package/dist/types/components/Pagination/pagination.content.d.ts +5 -7
  1106. package/dist/types/components/Pagination/pagination.content.d.ts.map +1 -1
  1107. package/dist/types/components/Pattern/DotPattern.d.ts +13 -7
  1108. package/dist/types/components/Pattern/DotPattern.d.ts.map +1 -1
  1109. package/dist/types/components/Pattern/GridDistortionPattern.d.ts +0 -1
  1110. package/dist/types/components/Pattern/GridDistortionPattern.d.ts.map +1 -1
  1111. package/dist/types/components/Pattern/GridPattern.d.ts +11 -6
  1112. package/dist/types/components/Pattern/GridPattern.d.ts.map +1 -1
  1113. package/dist/types/components/Pattern/SpotLight.d.ts +11 -6
  1114. package/dist/types/components/Pattern/SpotLight.d.ts.map +1 -1
  1115. package/dist/types/components/Popover/dynamic.d.ts +0 -1
  1116. package/dist/types/components/Popover/dynamic.d.ts.map +1 -1
  1117. package/dist/types/components/Popover/static.d.ts +15 -8
  1118. package/dist/types/components/Popover/static.d.ts.map +1 -1
  1119. package/dist/types/components/PressableSpan/PressableSpan.d.ts +0 -1
  1120. package/dist/types/components/PressableSpan/PressableSpan.d.ts.map +1 -1
  1121. package/dist/types/components/RightDrawer/RightDrawer.d.ts +5 -3
  1122. package/dist/types/components/RightDrawer/RightDrawer.d.ts.map +1 -1
  1123. package/dist/types/components/RightDrawer/isElementAtTopAndNotCovered.d.ts.map +1 -1
  1124. package/dist/types/components/RightDrawer/rightDrawer.content.d.ts +2 -4
  1125. package/dist/types/components/RightDrawer/rightDrawer.content.d.ts.map +1 -1
  1126. package/dist/types/components/RightDrawer/useRightDrawer.d.ts.map +1 -1
  1127. package/dist/types/components/Select/Multiselect.d.ts +0 -1
  1128. package/dist/types/components/Select/Multiselect.d.ts.map +1 -1
  1129. package/dist/types/components/Select/Select.d.ts +19 -12
  1130. package/dist/types/components/Select/Select.d.ts.map +1 -1
  1131. package/dist/types/components/SocialNetworks/DiscordLogo.d.ts +0 -1
  1132. package/dist/types/components/SocialNetworks/DiscordLogo.d.ts.map +1 -1
  1133. package/dist/types/components/SocialNetworks/FacebookLogo.d.ts +0 -1
  1134. package/dist/types/components/SocialNetworks/FacebookLogo.d.ts.map +1 -1
  1135. package/dist/types/components/SocialNetworks/InstagramLogo.d.ts +0 -1
  1136. package/dist/types/components/SocialNetworks/InstagramLogo.d.ts.map +1 -1
  1137. package/dist/types/components/SocialNetworks/ProductHuntLogo.d.ts +0 -1
  1138. package/dist/types/components/SocialNetworks/ProductHuntLogo.d.ts.map +1 -1
  1139. package/dist/types/components/SocialNetworks/TiktokLogo.d.ts +0 -1
  1140. package/dist/types/components/SocialNetworks/TiktokLogo.d.ts.map +1 -1
  1141. package/dist/types/components/SocialNetworks/XLogo.d.ts +0 -1
  1142. package/dist/types/components/SocialNetworks/XLogo.d.ts.map +1 -1
  1143. package/dist/types/components/SocialNetworks/YoutubeLogo.d.ts +0 -1
  1144. package/dist/types/components/SocialNetworks/YoutubeLogo.d.ts.map +1 -1
  1145. package/dist/types/components/SocialNetworks/index.d.ts +7 -7
  1146. package/dist/types/components/SocialNetworks/index.d.ts.map +1 -1
  1147. package/dist/types/components/Steps/index.d.ts +0 -1
  1148. package/dist/types/components/Steps/index.d.ts.map +1 -1
  1149. package/dist/types/components/Steps/steps.content.d.ts +2 -4
  1150. package/dist/types/components/Steps/steps.content.d.ts.map +1 -1
  1151. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts +7 -10
  1152. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts.map +1 -1
  1153. package/dist/types/components/SwitchSelector/VerticalSwitchSelector.d.ts +5 -8
  1154. package/dist/types/components/SwitchSelector/VerticalSwitchSelector.d.ts.map +1 -1
  1155. package/dist/types/components/SwitchSelector/useSwitchSelector.d.ts +14 -15
  1156. package/dist/types/components/SwitchSelector/useSwitchSelector.d.ts.map +1 -1
  1157. package/dist/types/components/Tab/Tab.d.ts +28 -22
  1158. package/dist/types/components/Tab/Tab.d.ts.map +1 -1
  1159. package/dist/types/components/Tab/TabContext.d.ts +1 -3
  1160. package/dist/types/components/Tab/TabContext.d.ts.map +1 -1
  1161. package/dist/types/components/TabSelector/TabSelector.d.ts +4 -15
  1162. package/dist/types/components/TabSelector/TabSelector.d.ts.map +1 -1
  1163. package/dist/types/components/Table/ExpandButton.d.ts +0 -1
  1164. package/dist/types/components/Table/ExpandButton.d.ts.map +1 -1
  1165. package/dist/types/components/Table/SmartTable.d.ts +0 -1
  1166. package/dist/types/components/Table/SmartTable.d.ts.map +1 -1
  1167. package/dist/types/components/Table/Table.d.ts +1 -3
  1168. package/dist/types/components/Table/Table.d.ts.map +1 -1
  1169. package/dist/types/components/Table/TableElements.d.ts +4 -18
  1170. package/dist/types/components/Table/TableElements.d.ts.map +1 -1
  1171. package/dist/types/components/Table/table.content.d.ts +2 -4
  1172. package/dist/types/components/Table/table.content.d.ts.map +1 -1
  1173. package/dist/types/components/Table/useTableWidths.d.ts +0 -1
  1174. package/dist/types/components/Table/useTableWidths.d.ts.map +1 -1
  1175. package/dist/types/components/Tag/index.d.ts +6 -8
  1176. package/dist/types/components/Tag/index.d.ts.map +1 -1
  1177. package/dist/types/components/TechLogo/TechLogo.d.ts +0 -1
  1178. package/dist/types/components/TechLogo/TechLogo.d.ts.map +1 -1
  1179. package/dist/types/components/TechLogo/logos/Adonis.d.ts +0 -1
  1180. package/dist/types/components/TechLogo/logos/Adonis.d.ts.map +1 -1
  1181. package/dist/types/components/TechLogo/logos/Angular.d.ts +0 -1
  1182. package/dist/types/components/TechLogo/logos/Angular.d.ts.map +1 -1
  1183. package/dist/types/components/TechLogo/logos/Anthropic.d.ts +0 -1
  1184. package/dist/types/components/TechLogo/logos/Anthropic.d.ts.map +1 -1
  1185. package/dist/types/components/TechLogo/logos/Astro.d.ts +0 -1
  1186. package/dist/types/components/TechLogo/logos/Astro.d.ts.map +1 -1
  1187. package/dist/types/components/TechLogo/logos/Atlassian.d.ts +0 -1
  1188. package/dist/types/components/TechLogo/logos/Atlassian.d.ts.map +1 -1
  1189. package/dist/types/components/TechLogo/logos/Bitbucket.d.ts +0 -1
  1190. package/dist/types/components/TechLogo/logos/Bitbucket.d.ts.map +1 -1
  1191. package/dist/types/components/TechLogo/logos/ChatGPT.d.ts +0 -1
  1192. package/dist/types/components/TechLogo/logos/ChatGPT.d.ts.map +1 -1
  1193. package/dist/types/components/TechLogo/logos/Claude.d.ts +0 -1
  1194. package/dist/types/components/TechLogo/logos/Claude.d.ts.map +1 -1
  1195. package/dist/types/components/TechLogo/logos/DeepSeek.d.ts +0 -1
  1196. package/dist/types/components/TechLogo/logos/DeepSeek.d.ts.map +1 -1
  1197. package/dist/types/components/TechLogo/logos/Express.d.ts +0 -1
  1198. package/dist/types/components/TechLogo/logos/Express.d.ts.map +1 -1
  1199. package/dist/types/components/TechLogo/logos/Fastify.d.ts +0 -1
  1200. package/dist/types/components/TechLogo/logos/Fastify.d.ts.map +1 -1
  1201. package/dist/types/components/TechLogo/logos/Gemini.d.ts +0 -1
  1202. package/dist/types/components/TechLogo/logos/Gemini.d.ts.map +1 -1
  1203. package/dist/types/components/TechLogo/logos/GitHub.d.ts +0 -1
  1204. package/dist/types/components/TechLogo/logos/GitHub.d.ts.map +1 -1
  1205. package/dist/types/components/TechLogo/logos/GitLab.d.ts +0 -1
  1206. package/dist/types/components/TechLogo/logos/GitLab.d.ts.map +1 -1
  1207. package/dist/types/components/TechLogo/logos/Google.d.ts +0 -1
  1208. package/dist/types/components/TechLogo/logos/Google.d.ts.map +1 -1
  1209. package/dist/types/components/TechLogo/logos/GoogleAI.d.ts +0 -1
  1210. package/dist/types/components/TechLogo/logos/GoogleAI.d.ts.map +1 -1
  1211. package/dist/types/components/TechLogo/logos/Grok.d.ts +0 -1
  1212. package/dist/types/components/TechLogo/logos/Grok.d.ts.map +1 -1
  1213. package/dist/types/components/TechLogo/logos/Hono.d.ts +0 -1
  1214. package/dist/types/components/TechLogo/logos/Hono.d.ts.map +1 -1
  1215. package/dist/types/components/TechLogo/logos/LinkedIn.d.ts +0 -1
  1216. package/dist/types/components/TechLogo/logos/LinkedIn.d.ts.map +1 -1
  1217. package/dist/types/components/TechLogo/logos/Lit.d.ts +1 -3
  1218. package/dist/types/components/TechLogo/logos/Lit.d.ts.map +1 -1
  1219. package/dist/types/components/TechLogo/logos/Lynx.d.ts +0 -1
  1220. package/dist/types/components/TechLogo/logos/Lynx.d.ts.map +1 -1
  1221. package/dist/types/components/TechLogo/logos/Microsoft.d.ts +0 -1
  1222. package/dist/types/components/TechLogo/logos/Microsoft.d.ts.map +1 -1
  1223. package/dist/types/components/TechLogo/logos/Mistral.d.ts +0 -1
  1224. package/dist/types/components/TechLogo/logos/Mistral.d.ts.map +1 -1
  1225. package/dist/types/components/TechLogo/logos/NestJS.d.ts +0 -1
  1226. package/dist/types/components/TechLogo/logos/NestJS.d.ts.map +1 -1
  1227. package/dist/types/components/TechLogo/logos/Nextjs.d.ts +0 -1
  1228. package/dist/types/components/TechLogo/logos/Nextjs.d.ts.map +1 -1
  1229. package/dist/types/components/TechLogo/logos/Node.d.ts +0 -1
  1230. package/dist/types/components/TechLogo/logos/Node.d.ts.map +1 -1
  1231. package/dist/types/components/TechLogo/logos/Nuxt.d.ts +0 -1
  1232. package/dist/types/components/TechLogo/logos/Nuxt.d.ts.map +1 -1
  1233. package/dist/types/components/TechLogo/logos/Ollama.d.ts +0 -1
  1234. package/dist/types/components/TechLogo/logos/Ollama.d.ts.map +1 -1
  1235. package/dist/types/components/TechLogo/logos/OpenAI.d.ts +0 -1
  1236. package/dist/types/components/TechLogo/logos/OpenAI.d.ts.map +1 -1
  1237. package/dist/types/components/TechLogo/logos/Perplexity.d.ts +0 -1
  1238. package/dist/types/components/TechLogo/logos/Perplexity.d.ts.map +1 -1
  1239. package/dist/types/components/TechLogo/logos/Preact.d.ts +0 -1
  1240. package/dist/types/components/TechLogo/logos/Preact.d.ts.map +1 -1
  1241. package/dist/types/components/TechLogo/logos/Reactjs.d.ts +0 -1
  1242. package/dist/types/components/TechLogo/logos/Reactjs.d.ts.map +1 -1
  1243. package/dist/types/components/TechLogo/logos/Solid.d.ts +0 -1
  1244. package/dist/types/components/TechLogo/logos/Solid.d.ts.map +1 -1
  1245. package/dist/types/components/TechLogo/logos/Svelte.d.ts +0 -1
  1246. package/dist/types/components/TechLogo/logos/Svelte.d.ts.map +1 -1
  1247. package/dist/types/components/TechLogo/logos/Tanstack.d.ts +0 -1
  1248. package/dist/types/components/TechLogo/logos/Tanstack.d.ts.map +1 -1
  1249. package/dist/types/components/TechLogo/logos/Vanilla.d.ts +1 -3
  1250. package/dist/types/components/TechLogo/logos/Vanilla.d.ts.map +1 -1
  1251. package/dist/types/components/TechLogo/logos/Vitejs.d.ts +0 -1
  1252. package/dist/types/components/TechLogo/logos/Vitejs.d.ts.map +1 -1
  1253. package/dist/types/components/TechLogo/logos/Vuejs.d.ts +0 -1
  1254. package/dist/types/components/TechLogo/logos/Vuejs.d.ts.map +1 -1
  1255. package/dist/types/components/TechLogo/techLogos.d.ts +0 -2
  1256. package/dist/types/components/TechLogo/types.d.ts.map +1 -1
  1257. package/dist/types/components/Terminal/Terminal.d.ts +0 -1
  1258. package/dist/types/components/Terminal/Terminal.d.ts.map +1 -1
  1259. package/dist/types/components/Terminal/terminal.content.d.ts +2 -4
  1260. package/dist/types/components/Terminal/terminal.content.d.ts.map +1 -1
  1261. package/dist/types/components/TextArea/AutoSizeTextArea.d.ts +3 -2
  1262. package/dist/types/components/TextArea/AutoSizeTextArea.d.ts.map +1 -1
  1263. package/dist/types/components/TextArea/AutocompleteTextArea.d.ts +3 -2
  1264. package/dist/types/components/TextArea/AutocompleteTextArea.d.ts.map +1 -1
  1265. package/dist/types/components/TextArea/ContentEditableTextArea.d.ts +2 -7
  1266. package/dist/types/components/TextArea/ContentEditableTextArea.d.ts.map +1 -1
  1267. package/dist/types/components/TextArea/TextArea.d.ts +5 -3
  1268. package/dist/types/components/TextArea/TextArea.d.ts.map +1 -1
  1269. package/dist/types/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.d.ts +0 -1
  1270. package/dist/types/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.d.ts.map +1 -1
  1271. package/dist/types/components/ThemeSwitcherDropDown/MobileThemeSwitcher.d.ts +0 -1
  1272. package/dist/types/components/ThemeSwitcherDropDown/MobileThemeSwitcher.d.ts.map +1 -1
  1273. package/dist/types/components/ThemeSwitcherDropDown/types.d.ts.map +1 -1
  1274. package/dist/types/components/Toaster/Toast.d.ts +1 -3
  1275. package/dist/types/components/Toaster/Toast.d.ts.map +1 -1
  1276. package/dist/types/components/Toaster/Toaster.d.ts +1 -3
  1277. package/dist/types/components/Toaster/Toaster.d.ts.map +1 -1
  1278. package/dist/types/components/Toaster/useToast.d.ts +10 -15
  1279. package/dist/types/components/Toaster/useToast.d.ts.map +1 -1
  1280. package/dist/types/components/WithResizer/index.d.ts +15 -8
  1281. package/dist/types/components/WithResizer/index.d.ts.map +1 -1
  1282. package/dist/types/components/index.d.ts +46 -7
  1283. package/dist/types/hooks/index.d.ts +1 -1
  1284. package/dist/types/hooks/useDevice.d.ts.map +1 -1
  1285. package/dist/types/hooks/useGetElementById.d.ts.map +1 -1
  1286. package/dist/types/hooks/useGetElementOrWindow.d.ts.map +1 -1
  1287. package/dist/types/hooks/useHorizontalSwipe.d.ts +0 -1
  1288. package/dist/types/hooks/useHorizontalSwipe.d.ts.map +1 -1
  1289. package/dist/types/hooks/useIsDarkMode.d.ts.map +1 -1
  1290. package/dist/types/hooks/useIsMounted.d.ts.map +1 -1
  1291. package/dist/types/hooks/useItemSelector.d.ts +1 -6
  1292. package/dist/types/hooks/useItemSelector.d.ts.map +1 -1
  1293. package/dist/types/hooks/useKeyboardDetector.d.ts.map +1 -1
  1294. package/dist/types/hooks/usePersistedStore.d.ts +0 -1
  1295. package/dist/types/hooks/usePersistedStore.d.ts.map +1 -1
  1296. package/dist/types/hooks/useScreenWidth.d.ts.map +1 -1
  1297. package/dist/types/hooks/useScrollBlockage/index.d.ts.map +1 -1
  1298. package/dist/types/hooks/useScrollBlockage/useScrollBlockageStore.d.ts.map +1 -1
  1299. package/dist/types/hooks/useScrollDetection.d.ts.map +1 -1
  1300. package/dist/types/hooks/useScrollY.d.ts.map +1 -1
  1301. package/dist/types/hooks/useSearch.d.ts.map +1 -1
  1302. package/dist/types/libs/auth.d.ts +1 -2
  1303. package/dist/types/libs/auth.d.ts.map +1 -1
  1304. package/dist/types/providers/ReactQueryProvider.d.ts +0 -1
  1305. package/dist/types/providers/ReactQueryProvider.d.ts.map +1 -1
  1306. package/dist/types/routes.d.ts +175 -169
  1307. package/dist/types/routes.d.ts.map +1 -1
  1308. package/dist/types/structured-data/buildAuthorJsonLd.d.ts +1 -1
  1309. package/dist/types/structured-data/buildAuthorJsonLd.d.ts.map +1 -1
  1310. package/dist/types/structured-data/buildBreadcrumbsJsonLd.d.ts +4 -7
  1311. package/dist/types/structured-data/buildBreadcrumbsJsonLd.d.ts.map +1 -1
  1312. package/dist/types/structured-data/buildCreativeWorkJsonLd.d.ts +31 -39
  1313. package/dist/types/structured-data/buildCreativeWorkJsonLd.d.ts.map +1 -1
  1314. package/dist/types/structured-data/buildFAQPageJsonLd.d.ts +5 -7
  1315. package/dist/types/structured-data/buildFAQPageJsonLd.d.ts.map +1 -1
  1316. package/dist/types/structured-data/buildOrganizationJsonLd.d.ts +16 -17
  1317. package/dist/types/structured-data/buildOrganizationJsonLd.d.ts.map +1 -1
  1318. package/dist/types/structured-data/buildProductJsonLd.d.ts +13 -15
  1319. package/dist/types/structured-data/buildProductJsonLd.d.ts.map +1 -1
  1320. package/dist/types/structured-data/buildSoftwareApplicationJsonLd.d.ts +47 -35
  1321. package/dist/types/structured-data/buildSoftwareApplicationJsonLd.d.ts.map +1 -1
  1322. package/dist/types/structured-data/buildWebsiteJsonLd.d.ts +19 -20
  1323. package/dist/types/structured-data/buildWebsiteJsonLd.d.ts.map +1 -1
  1324. package/dist/types/tailwind.config.d.ts.map +1 -1
  1325. package/package.json +64 -66
  1326. package/src/components/MarkdownEditor/markdown-editor.css +2 -8
@@ -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-0.5 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":";;;;;;;;AAeA,MAAM,YACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDF,MAAa,UAAU,EACrB,WAAW,OACX,WACA,GAAG,YAEH,qBAAC,OAAD;CACE,WAAW,GAAG,wCAAwC,UAAU;CAChE,gBAAc;CACd,iBAAe;CACf,iBAAc;CACd,MAAK;CACL,cAAY,WAAW,eAAe;CACtC,GAAI;WAPN;EASE,qBAAC,OAAD,aACE,oBAAC,OAAD,EACE,WAAW,GAAG,WAAW,WAAW,oBAAoB,WAAW,EACnE,GACF,oBAAC,OAAD,EACE,WAAW,GACT,WACA,WAAW,6BAA6B,6BACzC,EACD,EACE;EAEN,oBAAC,OAAD,YACE,oBAAC,OAAD,EAAK,WAAW,GAAG,WAAW,WAAW,cAAc,cAAc,EAAI,GACrE;EAEN,qBAAC,OAAD,aACE,oBAAC,OAAD,EACE,WAAW,GAAG,WAAW,WAAW,mBAAmB,WAAW,EAClE,GACF,oBAAC,OAAD,EACE,WAAW,GACT,WACA,WAAW,4BAA4B,4BACxC,EACD,EACE;EACF"}
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-0.5 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":";;;;;;;;AAeA,MAAM,YACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoDF,MAAa,UAAU,EACrB,WAAW,OACX,WACA,GAAG,YAEH,qBAAC,OAAD;CACE,WAAW,GAAG,wCAAwC,SAAS;CAC/D,gBAAc;CACd,iBAAe;CACf,iBAAc;CACd,MAAK;CACL,cAAY,WAAW,eAAe;CACtC,GAAI;WAPN;EASE,qBAAC,OAAD,aACE,oBAAC,OAAD,EACE,WAAW,GAAG,WAAW,WAAW,oBAAoB,UAAU,EACnE,IACD,oBAAC,OAAD,EACE,WAAW,GACT,WACA,WAAW,6BAA6B,4BAC1C,EACD,EACE;EAEL,oBAAC,OAAD,YACE,oBAAC,OAAD,EAAK,WAAW,GAAG,WAAW,WAAW,cAAc,aAAa,EAAI,GACrE;EAEL,qBAAC,OAAD,aACE,oBAAC,OAAD,EACE,WAAW,GAAG,WAAW,WAAW,mBAAmB,UAAU,EAClE,IACD,oBAAC,OAAD,EACE,WAAW,GACT,WACA,WAAW,4BAA4B,2BACzC,EACD,EACE;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 { TabSelector, type TabSelectorItemProps } 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/95 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=\"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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FA,MAAa,iBAAiD,EAC5D,MACA,UACA,YACA,qBAEA,qBAAC,OAAD;CAAK,WAAU;WAAf;EACG;EAED,oBAAC,aAAD;GACkB;GAChB,WAAU;GACV,MAAM;GACN;GACA,OAAM;GACN;EAEF,oBAAC,OAAD;GAAK,WAAU;aACZ;GACG;EACF"}
1
+ {"version":3,"file":"DesktopNavbar.mjs","names":[],"sources":["../../../../src/components/Navbar/DesktopNavbar.tsx"],"sourcesContent":["'use client';\n\nimport type { ReactElement, ReactNode } from 'react';\nimport { TabSelector, type TabSelectorItemProps } 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/95 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=\"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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0FA,MAAa,iBAAiD,EAC5D,MACA,UACA,YACA,qBAEA,qBAAC,OAAD;CAAK,WAAU;WAAf;EACG;EAED,oBAAC,aAAD;GACkB;GAChB,WAAU;GACV,MAAM;GACN;GACA,OAAM;EACP;EAED,oBAAC,OAAD;GAAK,WAAU;aACZ;EACE;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-100 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":";;;;;;;;;;;;;;;;AAoCA,MAAM,cAAwB;CAC5B,MAAM,EACJ,YAAY;EAAE,iBAAiB;EAAM,eAAe;EAAK,EAC1D;CACD,QAAQ,EACN,YAAY;EAAE,iBAAiB;EAAM,kBAAkB;EAAI,EAC5D;CACF;;;;;AAMD,MAAM,UACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFF,MAAa,gBAAgD,EAC3D,MACA,aACA,cAAc,EAAE,EAChB,gBACA,iBAAiB,EAAE,EACnB,YACA,WAAW,WACe;CAC1B,MAAM,CAAC,UAAU,eAAe,SAAkB,MAAM;CACxD,MAAM,CAAC,YAAY,iBAAiB,SAAkB,MAAM;CAE5D,MAAM,SAAS,OAAuB,KAAK;AAE3C,mBAAkB;EAChB,eAAe;EACf,KAAK;EACN,CAAC;AAEF,oBAAmB;EACjB,kBAAkB,YAAY,MAAM;EACpC,oBAAoB,YAAY,KAAK;EACrC,WAAW,CAAC,cAAc;EAC3B,CAAC;CAEF,MAAM,gBAAgB,CAAC,WAAY,OAAO,SAAS,gBAAgB,IAAK;CAExE,MAAM,iBAAiB,YAAY,SAAS,eAAe,SAAS;AAEpE,QACE,qBAAC,OAAD;EACE,WAAW,GACT,SACA,uDACA,WAAW,sBAAsB,gBAClC;EACD,IAAG;YANL,CAQE,qBAAC,OAAD;GACE,WAAU;GACV,KAAK;aAFP,CAIG,MAED,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,OAAD;KAAK,WAAU;eACZ;KACG,GAEL,kBACC,oBAAC,QAAD;KACE,UAAU;KACV,eAAe,eAAe,eAAe,CAAC,WAAW;KACzD,EAEA;MACF;MAEN,oBAAC,OAAD;GACE,WAAW,GACT,SACA,mDACD;aAED,oBAAC,mBAAD;IAAmB,UAAU,CAAC;cAC5B,qBAAC,EAAE,KAAH;KACE,WAAU;KACV,eAAe,cAAc,MAAM;KACnC,SAAS,aAAa,SAAS;KAC/B,UAAU;KACV,OAAO,EACL,QAAQ,gBAAgB,cAAc,MACvC;eAPH;MASG;MACD,qBAAC,OAAD;OAAK,WAAU;iBAAf,CACG,aACA,eACG;;MAEN,oBAAC,OAAD;OAAK,WAAU;iBACZ;OACG;MACA;;IACU;GAChB,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-100 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":";;;;;;;;;;;;;;;;AAoCA,MAAM,cAAwB;CAC5B,MAAM,EACJ,YAAY;EAAE,iBAAiB;EAAM,eAAe;CAAI,EAC1D;CACA,QAAQ,EACN,YAAY;EAAE,iBAAiB;EAAM,kBAAkB;CAAG,EAC5D;AACF;;;;;AAMA,MAAM,UACJ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgFF,MAAa,gBAAgD,EAC3D,MACA,aACA,cAAc,CAAC,GACf,gBACA,iBAAiB,CAAC,GAClB,YACA,WAAW,WACe;CAC1B,MAAM,CAAC,UAAU,eAAe,SAAkB,KAAK;CACvD,MAAM,CAAC,YAAY,iBAAiB,SAAkB,KAAK;CAE3D,MAAM,SAAS,OAAuB,IAAI;CAE1C,kBAAkB;EAChB,eAAe;EACf,KAAK;CACP,CAAC;CAED,mBAAmB;EACjB,kBAAkB,YAAY,KAAK;EACnC,oBAAoB,YAAY,IAAI;EACpC,WAAW,CAAC,cAAc;CAC5B,CAAC;CAED,MAAM,gBAAgB,CAAC,WAAY,OAAO,SAAS,gBAAgB,IAAK;CAExE,MAAM,iBAAiB,YAAY,SAAS,eAAe,SAAS;CAEpE,OACE,qBAAC,OAAD;EACE,WAAW,GACT,SACA,uDACA,WAAW,sBAAsB,eACnC;EACA,IAAG;YANL,CAQE,qBAAC,OAAD;GACE,WAAU;GACV,KAAK;aAFP,CAIG,MAED,qBAAC,OAAD;IAAK,WAAU;cAAf,CACE,oBAAC,OAAD;KAAK,WAAU;eACZ;IACE,IAEJ,kBACC,oBAAC,QAAD;KACE,UAAU;KACV,eAAe,eAAe,eAAe,CAAC,UAAU;IACzD,EAEA;KACF;MAEL,oBAAC,OAAD;GACE,WAAW,GACT,SACA,kDACF;aAEA,oBAAC,mBAAD;IAAmB,UAAU,CAAC;cAC5B,qBAAC,EAAE,KAAH;KACE,WAAU;KACV,eAAe,cAAc,KAAK;KAClC,SAAS,aAAa,SAAS;KAC/B,UAAU;KACV,OAAO,EACL,QAAQ,gBAAgB,cAAc,KACxC;eAPF;MASG;MACD,qBAAC,OAAD;OAAK,WAAU;iBAAf,CACG,aACA,cACE;;MAEL,oBAAC,OAAD;OAAK,WAAU;iBACZ;MACE;KACA;;GACU;EAChB,EACF;;AAET"}
@@ -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 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 { Burger } from './Burger';\nexport { DesktopNavbar } from './DesktopNavbar';\nexport { MobileNavbar } from './MobileNavbar';\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\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":";;;;;;;;;AA+FA,MAAa,UAA0C,EACrD,MACA,mBACA,kBAAkB,EAAE,EACpB,oBAAoB,EAAE,EACtB,sBACA,uBAAuB,EAAE,EACzB,mBACA,kBACA,gBACA,iBAAiB,WACG;CACpB,MAAM,EAAE,aAAa,UAAU,KAAK;AAEpC,QAAO,WACL,oBAAC,cAAD;EACE,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,gBAAgB;EACV;EACN,YAAY;EACZ,UAAU;EACV,IAEF,oBAAC,eAAD;EACE,UAAU;EACV,YAAY;EACN;EACU;EAChB"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/Navbar/index.tsx"],"sourcesContent":["'use client';\n\nimport { useDevice } from '@hooks/useDevice';\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 { Burger } from './Burger';\nexport { DesktopNavbar } from './DesktopNavbar';\nexport { MobileNavbar } from './MobileNavbar';\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\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":";;;;;;;;;AA+FA,MAAa,UAA0C,EACrD,MACA,mBACA,kBAAkB,CAAC,GACnB,oBAAoB,CAAC,GACrB,sBACA,uBAAuB,CAAC,GACxB,mBACA,kBACA,gBACA,iBAAiB,WACG;CACpB,MAAM,EAAE,aAAa,UAAU,IAAI;CAEnC,OAAO,WACL,oBAAC,cAAD;EACE,aAAa;EACb,aAAa;EACb,gBAAgB;EAChB,gBAAgB;EACV;EACN,YAAY;EACZ,UAAU;CACX,KAED,oBAAC,eAAD;EACE,UAAU;EACV,YAAY;EACN;EACU;CACjB;AAEL"}
@@ -1 +1 @@
1
- {"version":3,"file":"useNavigation.mjs","names":[],"sources":["../../../../src/components/Navbar/useNavigation.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Interface describing section data used for scroll detection\n */\ninterface SectionData {\n /** Unique identifier of the section element */\n id: string;\n /** Distance from top of document to section start */\n offsetTop: number;\n /** Height of the section element */\n offsetHeight: number;\n}\n\n/**\n * Navigation Actions Hook\n *\n * A comprehensive hook for managing navigation interactions and scroll-based section detection.\n * Provides automatic active section detection based on scroll position and handles smooth\n * scrolling navigation behaviors.\n *\n * Features:\n * - Automatic active section detection based on scroll position\n * - Smooth scrolling to sections within the same page\n * - Logo click handling with home navigation\n * - Section click handling with conditional scrolling vs navigation\n * - Passive scroll event listeners for optimal performance\n * - Viewport-aware active section calculation (using screen height / 4 offset)\n *\n * Active Section Detection:\n * - Monitors all `<section>` elements on the page\n * - Calculates which section is currently in the \"active\" zone\n * - Active zone is defined as the top 25% of the viewport\n * - Updates activeSection state as user scrolls\n *\n * Navigation Behaviors:\n * - Logo click: Scrolls to top if on home page, navigates to home if on other pages\n * - Section click: Smooth scrolls if on same page, executes callback if different page\n * - All scrolling uses smooth behavior for better UX\n *\n * @example\n * Basic usage in navigation component:\n * ```tsx\n * const { activeSection, onClickLogo, onClickSection } = useNavActions();\n *\n * // In navigation items\n * const navItems = sections.map(section => (\n * <TabSelectorItem\n * key={section.id}\n * isActive={activeSection === section.id}\n * onClick={() => onClickSection(section.id, section.url, section.onClick)}\n * >\n * {section.label}\n * </TabSelectorItem>\n * ));\n *\n * // In logo\n * <Logo onClick={() => onClickLogo(navigate)} />\n * ```\n *\n * @example\n * Advanced usage with routing:\n * ```tsx\n * const { activeSection, onClickLogo, onClickSection } = useNavActions();\n * const navigate = useNavigate();\n *\n * const handleLogoClick = () => {\n * onClickLogo((url) => {\n * navigate(url);\n * // Additional logic like analytics\n * trackEvent('logo_click');\n * });\n * };\n *\n * const handleSectionClick = (sectionId: string) => {\n * onClickSection(\n * sectionId,\n * `/page#${sectionId}`,\n * () => {\n * navigate(`/page#${sectionId}`);\n * trackEvent('section_navigation', { sectionId });\n * }\n * );\n * };\n * ```\n *\n * Performance Considerations:\n * - Uses passive scroll event listeners to prevent blocking\n * - Automatically cleans up event listeners on unmount\n * - Efficiently queries DOM elements using native selectors\n * - Calculates section positions dynamically for accuracy\n *\n * @returns Object containing navigation state and action handlers\n */\nexport const useNavActions = () => {\n /** Currently active section ID based on scroll position */\n const [activeSection, setActiveSection] = useState<string | null>(null);\n\n /**\n * Detects which section is currently active based on scroll position\n * Uses viewport-aware calculation to determine active section\n */\n const detectActiveSection = () => {\n const scrollY = window.scrollY;\n const sections = document.querySelectorAll('section');\n const sectionsData: SectionData[] = [];\n\n // Collect position data for all sections\n sections.forEach((section) =>\n sectionsData.push({\n id: section.id,\n offsetTop: section.offsetTop,\n offsetHeight: section.offsetHeight,\n })\n );\n\n // Find section that intersects with the active zone (top 25% of viewport)\n const currentSection = sectionsData.find(\n (section) =>\n section.offsetTop <= scrollY + window.screen.height / 4 &&\n section.offsetTop + section.offsetHeight >\n scrollY + window.screen.height / 4\n );\n\n if (currentSection) {\n setActiveSection(currentSection.id);\n }\n };\n\n // Set up scroll listener for active section detection\n useEffect(() => {\n window.addEventListener('scroll', detectActiveSection, { passive: true });\n\n return () => {\n window.removeEventListener('scroll', detectActiveSection);\n };\n }, []);\n\n /**\n * Handles logo click behavior\n * Scrolls to top if on home page, navigates to home if on other pages\n *\n * @param onClick - Callback function to handle navigation (e.g., router.push)\n */\n const onClickLogo = (onClick: (url: string) => void) => {\n setActiveSection(null);\n\n if (window.location.pathname === '/') {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n } else {\n onClick('/');\n }\n };\n\n /**\n * Handles section navigation click behavior\n * Smooth scrolls if on same page, executes callback if different page\n *\n * @param sectionId - ID of the target section element\n * @param url - URL of the page containing the section (optional)\n * @param onClick - Callback function to handle navigation (optional)\n */\n const onClickSection = (\n sectionId: string,\n url?: string,\n onClick?: () => void\n ) => {\n setActiveSection(sectionId);\n\n // If on the same page, scroll to section\n if (window.location.pathname === url) {\n const sectionEl = document.getElementById(sectionId);\n\n if (sectionEl) {\n sectionEl.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n });\n }\n } else {\n // If on different page, execute callback (typically navigation)\n onClick?.();\n }\n };\n\n return {\n /** Currently active section ID, null if no section is active */\n activeSection,\n /** Handler for logo click interactions */\n onClickLogo,\n /** Handler for section navigation clicks */\n onClickSection,\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgGA,MAAa,sBAAsB;;CAEjC,MAAM,CAAC,eAAe,oBAAoB,SAAwB,KAAK;;;;;CAMvE,MAAM,4BAA4B;EAChC,MAAM,UAAU,OAAO;EACvB,MAAM,WAAW,SAAS,iBAAiB,UAAU;EACrD,MAAM,eAA8B,EAAE;AAGtC,WAAS,SAAS,YAChB,aAAa,KAAK;GAChB,IAAI,QAAQ;GACZ,WAAW,QAAQ;GACnB,cAAc,QAAQ;GACvB,CAAC,CACH;EAGD,MAAM,iBAAiB,aAAa,MACjC,YACC,QAAQ,aAAa,UAAU,OAAO,OAAO,SAAS,KACtD,QAAQ,YAAY,QAAQ,eAC1B,UAAU,OAAO,OAAO,SAAS,EACtC;AAED,MAAI,eACF,kBAAiB,eAAe,GAAG;;AAKvC,iBAAgB;AACd,SAAO,iBAAiB,UAAU,qBAAqB,EAAE,SAAS,MAAM,CAAC;AAEzE,eAAa;AACX,UAAO,oBAAoB,UAAU,oBAAoB;;IAE1D,EAAE,CAAC;;;;;;;CAQN,MAAM,eAAe,YAAmC;AACtD,mBAAiB,KAAK;AAEtB,MAAI,OAAO,SAAS,aAAa,IAC/B,QAAO,SAAS;GAAE,KAAK;GAAG,UAAU;GAAU,CAAC;MAE/C,SAAQ,IAAI;;;;;;;;;;CAYhB,MAAM,kBACJ,WACA,KACA,YACG;AACH,mBAAiB,UAAU;AAG3B,MAAI,OAAO,SAAS,aAAa,KAAK;GACpC,MAAM,YAAY,SAAS,eAAe,UAAU;AAEpD,OAAI,UACF,WAAU,eAAe;IACvB,UAAU;IACV,OAAO;IACP,QAAQ;IACT,CAAC;QAIJ,YAAW;;AAIf,QAAO;;EAEL;;EAEA;;EAEA;EACD"}
1
+ {"version":3,"file":"useNavigation.mjs","names":[],"sources":["../../../../src/components/Navbar/useNavigation.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Interface describing section data used for scroll detection\n */\ninterface SectionData {\n /** Unique identifier of the section element */\n id: string;\n /** Distance from top of document to section start */\n offsetTop: number;\n /** Height of the section element */\n offsetHeight: number;\n}\n\n/**\n * Navigation Actions Hook\n *\n * A comprehensive hook for managing navigation interactions and scroll-based section detection.\n * Provides automatic active section detection based on scroll position and handles smooth\n * scrolling navigation behaviors.\n *\n * Features:\n * - Automatic active section detection based on scroll position\n * - Smooth scrolling to sections within the same page\n * - Logo click handling with home navigation\n * - Section click handling with conditional scrolling vs navigation\n * - Passive scroll event listeners for optimal performance\n * - Viewport-aware active section calculation (using screen height / 4 offset)\n *\n * Active Section Detection:\n * - Monitors all `<section>` elements on the page\n * - Calculates which section is currently in the \"active\" zone\n * - Active zone is defined as the top 25% of the viewport\n * - Updates activeSection state as user scrolls\n *\n * Navigation Behaviors:\n * - Logo click: Scrolls to top if on home page, navigates to home if on other pages\n * - Section click: Smooth scrolls if on same page, executes callback if different page\n * - All scrolling uses smooth behavior for better UX\n *\n * @example\n * Basic usage in navigation component:\n * ```tsx\n * const { activeSection, onClickLogo, onClickSection } = useNavActions();\n *\n * // In navigation items\n * const navItems = sections.map(section => (\n * <TabSelectorItem\n * key={section.id}\n * isActive={activeSection === section.id}\n * onClick={() => onClickSection(section.id, section.url, section.onClick)}\n * >\n * {section.label}\n * </TabSelectorItem>\n * ));\n *\n * // In logo\n * <Logo onClick={() => onClickLogo(navigate)} />\n * ```\n *\n * @example\n * Advanced usage with routing:\n * ```tsx\n * const { activeSection, onClickLogo, onClickSection } = useNavActions();\n * const navigate = useNavigate();\n *\n * const handleLogoClick = () => {\n * onClickLogo((url) => {\n * navigate(url);\n * // Additional logic like analytics\n * trackEvent('logo_click');\n * });\n * };\n *\n * const handleSectionClick = (sectionId: string) => {\n * onClickSection(\n * sectionId,\n * `/page#${sectionId}`,\n * () => {\n * navigate(`/page#${sectionId}`);\n * trackEvent('section_navigation', { sectionId });\n * }\n * );\n * };\n * ```\n *\n * Performance Considerations:\n * - Uses passive scroll event listeners to prevent blocking\n * - Automatically cleans up event listeners on unmount\n * - Efficiently queries DOM elements using native selectors\n * - Calculates section positions dynamically for accuracy\n *\n * @returns Object containing navigation state and action handlers\n */\nexport const useNavActions = () => {\n /** Currently active section ID based on scroll position */\n const [activeSection, setActiveSection] = useState<string | null>(null);\n\n /**\n * Detects which section is currently active based on scroll position\n * Uses viewport-aware calculation to determine active section\n */\n const detectActiveSection = () => {\n const scrollY = window.scrollY;\n const sections = document.querySelectorAll('section');\n const sectionsData: SectionData[] = [];\n\n // Collect position data for all sections\n sections.forEach((section) =>\n sectionsData.push({\n id: section.id,\n offsetTop: section.offsetTop,\n offsetHeight: section.offsetHeight,\n })\n );\n\n // Find section that intersects with the active zone (top 25% of viewport)\n const currentSection = sectionsData.find(\n (section) =>\n section.offsetTop <= scrollY + window.screen.height / 4 &&\n section.offsetTop + section.offsetHeight >\n scrollY + window.screen.height / 4\n );\n\n if (currentSection) {\n setActiveSection(currentSection.id);\n }\n };\n\n // Set up scroll listener for active section detection\n useEffect(() => {\n window.addEventListener('scroll', detectActiveSection, { passive: true });\n\n return () => {\n window.removeEventListener('scroll', detectActiveSection);\n };\n }, []);\n\n /**\n * Handles logo click behavior\n * Scrolls to top if on home page, navigates to home if on other pages\n *\n * @param onClick - Callback function to handle navigation (e.g., router.push)\n */\n const onClickLogo = (onClick: (url: string) => void) => {\n setActiveSection(null);\n\n if (window.location.pathname === '/') {\n window.scrollTo({ top: 0, behavior: 'smooth' });\n } else {\n onClick('/');\n }\n };\n\n /**\n * Handles section navigation click behavior\n * Smooth scrolls if on same page, executes callback if different page\n *\n * @param sectionId - ID of the target section element\n * @param url - URL of the page containing the section (optional)\n * @param onClick - Callback function to handle navigation (optional)\n */\n const onClickSection = (\n sectionId: string,\n url?: string,\n onClick?: () => void\n ) => {\n setActiveSection(sectionId);\n\n // If on the same page, scroll to section\n if (window.location.pathname === url) {\n const sectionEl = document.getElementById(sectionId);\n\n if (sectionEl) {\n sectionEl.scrollIntoView({\n behavior: 'smooth',\n block: 'center',\n inline: 'nearest',\n });\n }\n } else {\n // If on different page, execute callback (typically navigation)\n onClick?.();\n }\n };\n\n return {\n /** Currently active section ID, null if no section is active */\n activeSection,\n /** Handler for logo click interactions */\n onClickLogo,\n /** Handler for section navigation clicks */\n onClickSection,\n };\n};\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAgGA,MAAa,sBAAsB;;CAEjC,MAAM,CAAC,eAAe,oBAAoB,SAAwB,IAAI;;;;;CAMtE,MAAM,4BAA4B;EAChC,MAAM,UAAU,OAAO;EACvB,MAAM,WAAW,SAAS,iBAAiB,SAAS;EACpD,MAAM,eAA8B,CAAC;EAGrC,SAAS,SAAS,YAChB,aAAa,KAAK;GAChB,IAAI,QAAQ;GACZ,WAAW,QAAQ;GACnB,cAAc,QAAQ;EACxB,CAAC,CACH;EAGA,MAAM,iBAAiB,aAAa,MACjC,YACC,QAAQ,aAAa,UAAU,OAAO,OAAO,SAAS,KACtD,QAAQ,YAAY,QAAQ,eAC1B,UAAU,OAAO,OAAO,SAAS,CACvC;EAEA,IAAI,gBACF,iBAAiB,eAAe,EAAE;CAEtC;CAGA,gBAAgB;EACd,OAAO,iBAAiB,UAAU,qBAAqB,EAAE,SAAS,KAAK,CAAC;EAExE,aAAa;GACX,OAAO,oBAAoB,UAAU,mBAAmB;EAC1D;CACF,GAAG,CAAC,CAAC;;;;;;;CAQL,MAAM,eAAe,YAAmC;EACtD,iBAAiB,IAAI;EAErB,IAAI,OAAO,SAAS,aAAa,KAC/B,OAAO,SAAS;GAAE,KAAK;GAAG,UAAU;EAAS,CAAC;OAE9C,QAAQ,GAAG;CAEf;;;;;;;;;CAUA,MAAM,kBACJ,WACA,KACA,YACG;EACH,iBAAiB,SAAS;EAG1B,IAAI,OAAO,SAAS,aAAa,KAAK;GACpC,MAAM,YAAY,SAAS,eAAe,SAAS;GAEnD,IAAI,WACF,UAAU,eAAe;IACvB,UAAU;IACV,OAAO;IACP,QAAQ;GACV,CAAC;EAEL,OAEE,UAAU;CAEd;CAEA,OAAO;;EAEL;;EAEA;;EAEA;CACF;AACF"}
@@ -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":";;;;;;;AAaA,MAAa,uBAAqD,EAChE,OACA,eACA,MAAM,GACN,MAAM,UACF;CACJ,MAAM,EAAE,qBAAqB,mBAAmB,YAAY,aAAa;CAEzE,MAAM,QAAQ;EACZ;EAAG;EAAG;EAAG;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAM;EAAM;EAAM;EAAO;EAC9D,CAAC,QAAQ,SAAS,QAAQ,OAAO,QAAQ,IAAI;AAE9C,QACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,QAAD;GAAM,WAAU;aAAwB;GAA2B,GACnE,qBAAC,QAAD;GAAQ,OAAO,MAAM,UAAU;GAAiB;aAAhD,CACE,oBAAC,OAAO,SAAR;IAAgB,WAAU;cACxB,oBAAC,OAAO,OAAR,EAAc,aAAa,gBAAkB;IAC9B,GACjB,oBAAC,OAAO,SAAR,YACG,MAAM,KAAK,SACV,oBAAC,OAAO,MAAR;IAAwB,OAAO,KAAK,UAAU;cAC3C;IACW,EAFI,KAEJ,CACd,EACa,EACV;KACL"}
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":";;;;;;;AAaA,MAAa,uBAAqD,EAChE,OACA,eACA,MAAM,GACN,MAAM,UACF;CACJ,MAAM,EAAE,qBAAqB,mBAAmB,YAAY,YAAY;CAExE,MAAM,QAAQ;EACZ;EAAG;EAAG;EAAG;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAM;EAAM;EAAM;EAAO;CAC/D,CAAC,CAAC,QAAQ,SAAS,QAAQ,OAAO,QAAQ,GAAG;CAE7C,OACE,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,QAAD;GAAM,WAAU;aAAwB;EAA0B,IAClE,qBAAC,QAAD;GAAQ,OAAO,MAAM,SAAS;GAAkB;aAAhD,CACE,oBAAC,OAAO,SAAR;IAAgB,WAAU;cACxB,oBAAC,OAAO,OAAR,EAAc,aAAa,eAAiB;GAC9B,IAChB,oBAAC,OAAO,SAAR,YACG,MAAM,KAAK,SACV,oBAAC,OAAO,MAAR;IAAwB,OAAO,KAAK,SAAS;cAC1C;GACU,GAFK,IAEL,CACd,EACa,EACV;IACL;;AAET"}
@@ -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 { useIntlayer } from 'react-intlayer';\nimport { Button } 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 },\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 type PaginationSize = 'sm' | 'md' | 'lg';\n\nexport type PaginationVariant = 'default' | 'bordered' | 'ghost';\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 === 'sm') {\n return 'icon-sm';\n } else if (size === 'lg') {\n return 'icon-lg';\n } else {\n return '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 = 'md',\n variant = 'default',\n color = 'text',\n className,\n ...props\n}) => {\n const { goToNextPage, goToPreviousPage } = useIntlayer('pagination');\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=\"outline\"\n size={buttonSize}\n color=\"text\"\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={disabled || isFirstPage}\n label={goToPreviousPage.value}\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 const isFirstEllipsis = index === pageNumbers.indexOf('ellipsis');\n const ellipsisKey = isFirstEllipsis\n ? 'ellipsis-start'\n : 'ellipsis-end';\n return (\n <div\n key={ellipsisKey}\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={isActive ? 'default' : 'outline'}\n size={buttonSize}\n color=\"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' && 'size-10 text-base',\n isActive && 'font-semibold'\n )}\n >\n {page}\n </Button>\n );\n })}\n </div>\n\n {showPrevNext && (\n <Button\n variant=\"outline\"\n size={buttonSize}\n color=\"text\"\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={disabled || isLastPage}\n label={goToNextPage.value}\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 { useIntlayer } from 'react-intlayer';\nimport { Button } 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 },\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 type PaginationSize = 'sm' | 'md' | 'lg';\n\nexport type PaginationVariant = 'default' | 'bordered' | 'ghost';\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 === 'sm') {\n return 'icon-sm';\n } else if (size === 'lg') {\n return 'icon-lg';\n } else {\n return '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 = 'md',\n variant = 'default',\n color = 'text',\n className,\n ...props\n}) => {\n const { goToNextPage, goToPreviousPage } = useIntlayer('pagination');\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=\"outline\"\n size={buttonSize}\n color=\"text\"\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={disabled || isFirstPage}\n label={goToPreviousPage.value}\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 const isFirstEllipsis = index === pageNumbers.indexOf('ellipsis');\n const ellipsisKey = isFirstEllipsis\n ? 'ellipsis-start'\n : 'ellipsis-end';\n return (\n <div\n key={ellipsisKey}\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={isActive ? 'default' : 'outline'}\n size={buttonSize}\n color=\"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' && 'size-10 text-base',\n isActive && 'font-semibold'\n )}\n >\n {page}\n </Button>\n );\n })}\n </div>\n\n {showPrevNext && (\n <Button\n variant=\"outline\"\n size={buttonSize}\n color=\"text\"\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={disabled || isLastPage}\n label={goToNextPage.value}\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":";;;;;;;AAYA,MAAa,6BAAiE,EAC5E,aACA,UACA,iBACI;CACJ,MAAM,EAAE,mBAAmB,YAAY,aAAa;CACpD,MAAM,SAAS,WAAW;CAG1B,MAAM,eAAe,KAAK,IAAI,GAAG,SAAS;CAC1C,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,aAAa,aAAa,CAAC;CACpE,MAAM,OAAO,KAAK,IAAI,KAAK,IAAI,GAAG,YAAY,EAAE,WAAW;CAE3D,MAAM,QACJ,eAAe,IAAI,IAAI,KAAK,KAAK,OAAO,KAAK,eAAe,GAAG,WAAW;CAC5E,MAAM,MAAM,eAAe,IAAI,IAAI,KAAK,IAAI,OAAO,cAAc,WAAW;AAE5E,QACE,oBAAC,OAAD;EAAK,WAAU;YACZ,eAAe;GACd,OAAO,OAAO,MAAM;GACpB,KAAK,OAAO,IAAI;GAChB,OAAO,OAAO,WAAW;GAC1B,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":";;;;;;;AAYA,MAAa,6BAAiE,EAC5E,aACA,UACA,iBACI;CACJ,MAAM,EAAE,mBAAmB,YAAY,YAAY;CACnD,MAAM,SAAS,UAAU;CAGzB,MAAM,eAAe,KAAK,IAAI,GAAG,QAAQ;CACzC,MAAM,aAAa,KAAK,IAAI,GAAG,KAAK,KAAK,aAAa,YAAY,CAAC;CACnE,MAAM,OAAO,KAAK,IAAI,KAAK,IAAI,GAAG,WAAW,GAAG,UAAU;CAE1D,MAAM,QACJ,eAAe,IAAI,IAAI,KAAK,KAAK,OAAO,KAAK,eAAe,GAAG,UAAU;CAC3E,MAAM,MAAM,eAAe,IAAI,IAAI,KAAK,IAAI,OAAO,cAAc,UAAU;CAE3E,OACE,oBAAC,OAAD;EAAK,WAAU;YACZ,eAAe;GACd,OAAO,OAAO,KAAK;GACnB,KAAK,OAAO,GAAG;GACf,OAAO,OAAO,UAAU;EAC1B,CAAC;CACE;AAET"}
@@ -1 +1 @@
1
- {"version":3,"file":"pagination.content.mjs","names":[],"sources":["../../../../src/components/Pagination/pagination.content.ts"],"sourcesContent":["import { type Dictionary, insert, t } from 'intlayer';\n\nconst paginationContent = {\n key: 'pagination',\n content: {\n numberItemsSelector: t({\n en: 'Items per page',\n fr: 'Eléments par page',\n es: 'Items por página',\n 'en-GB': 'Items per page',\n de: 'Items pro Seite',\n ja: 'ページあたりのアイテム数',\n ko: '페이지당 아이템 수',\n zh: '每页项目数',\n it: 'Elementi per pagina',\n pt: 'Itens por página',\n hi: 'पृष्ठ पर आइटम्स',\n ar: 'عدد العناصر لكل صفحة',\n ru: 'Элементов на странице',\n tr: 'Sayfa başına öğe',\n pl: 'Elementów na stronę',\n id: 'Item per halaman',\n vi: 'Số mục trên mỗi trang',\n uk: 'Записів на сторінку',\n }),\n showingResults: insert(\n t({\n ar: 'عرض {{start}} إلى {{end}} من {{total}} نتائج',\n de: 'Zeigt {{start}} bis {{end}} von {{total}} Ergebnissen',\n en: 'Showing {{start}} to {{end}} of {{total}} results',\n 'en-GB': 'Showing {{start}} to {{end}} of {{total}} results',\n es: 'Mostrando {{start}} a {{end}} de {{total}} resultados',\n fr: 'Afficher {{start}} à {{end}} de {{total}} résultats',\n hi: '{{start}} से {{end}} तक के {{total}} परिणाम दिखा रहे हैं',\n id: 'Menampilkan {{start}} hingga {{end}} dari {{total}} hasil',\n it: 'Mostrando {{start}} a {{end}} di {{total}} risultati',\n ja: '{{start}} から {{end}} までの {{total}} 件の結果を表示',\n ko: '{{start}} 에서 {{end}} 까지의 {{total}} 개 결과 표시',\n pl: 'Wyświetlane {{start}} do {{end}} z {{total}} wyników',\n pt: 'Mostrando {{start}} a {{end}} de {{total}} resultados',\n ru: 'Показано {{start}}-{{end}} из {{total}} результатов',\n tr: '{{start}} から {{end}} までの {{total}} 件の結果を表示',\n uk: 'Показано від {{start}} до {{end}} з {{total}} результатів',\n vi: 'Hiển thị {{start}} đến {{end}} trong tổng số {{total}} kết quả',\n zh: '显示第 {{start}} 到 {{end}} 项,共 {{total}} 个结果',\n })\n ),\n selectPageSize: t({\n en: 'Select page size',\n fr: 'Sélectionner la taille de la page',\n es: 'Seleccionar tamaño de página',\n 'en-GB': 'Select page size',\n de: 'Seitegröße auswählen',\n ja: 'ページサイズを選択',\n ko: '페이지 크기 선택',\n zh: '选择页面大小',\n it: 'Seleziona una dimensione di pagina',\n pt: 'Selecionar um tamanho de página',\n hi: 'पृष्ठ आकार चुनें',\n ar: 'اختر حجم الصفحة',\n ru: 'Выберите размер страницы',\n tr: 'Sayfa boyutunu seç',\n pl: 'Wybierz liczbę elementów na stronę',\n id: 'Pilih jumlah item per halaman',\n vi: 'Chọn số mục trên mỗi trang',\n uk: 'Оберіть кількість елементів на сторінку',\n }),\n goToNextPage: t({\n en: 'Go to next page',\n fr: 'Aller à la page suivante',\n es: 'Ir a la página siguiente',\n 'en-GB': 'Go to next page',\n de: 'Zur nächsten Seite',\n ja: '次のページに移動',\n ko: '다음 페이지로 이동',\n zh: '转到下一页',\n it: 'Vai alla pagina successiva',\n pt: 'Ir para a página seguinte',\n hi: 'अगली पृष्ठ पर जाएं',\n ar: 'اذهب إلى الصفحة التالية',\n ru: 'Перейти к следующей странице',\n tr: 'Sonraki sayfaya git',\n pl: 'Przejdź do następnej strony',\n id: 'Pergi ke halaman berikutnya',\n vi: 'Chuyển sang trang tiếp theo',\n uk: 'Перейти на наступну сторінку',\n }),\n goToPreviousPage: t({\n en: 'Go to previous page',\n fr: 'Aller à la page précédente',\n es: 'Ir a la página anterior',\n 'en-GB': 'Go to previous page',\n de: 'Zur vorherigen Seite',\n ja: '前のページに移動',\n ko: '이전 페이지로 이동',\n zh: '转到上一页',\n it: 'Vai alla pagina precedente',\n pt: 'Ir para a página anterior',\n hi: 'पिछली पृष्ठ पर जाएं',\n ar: 'اذهب إلى الصفحة السابقة',\n ru: 'Перейти к предыдущей странице',\n tr: 'Önceki sayfaya git',\n pl: 'Przejdź do poprzedniej strony',\n id: 'Pergi ke halaman sebelumnya',\n vi: 'Chuyển sang trang trước',\n uk: 'Перейти на попередню сторінку',\n }),\n },\n title: 'Pagination',\n description:\n 'Content strings used for the pagination component, including labels for navigating pages and selecting items per page.',\n tags: ['pagination', 'component'],\n} satisfies Dictionary;\n\nexport default paginationContent;\n"],"mappings":";;;AAEA,MAAM,oBAAoB;CACxB,KAAK;CACL,SAAS;EACP,qBAAqB,EAAE;GACrB,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL,CAAC;EACF,gBAAgB,OACd,EAAE;GACA,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL,CAAC,CACH;EACD,gBAAgB,EAAE;GAChB,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL,CAAC;EACF,cAAc,EAAE;GACd,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL,CAAC;EACF,kBAAkB,EAAE;GAClB,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACL,CAAC;EACH;CACD,OAAO;CACP,aACE;CACF,MAAM,CAAC,cAAc,YAAY;CAClC"}
1
+ {"version":3,"file":"pagination.content.mjs","names":[],"sources":["../../../../src/components/Pagination/pagination.content.ts"],"sourcesContent":["import { type Dictionary, insert, t } from 'intlayer';\n\nconst paginationContent = {\n key: 'pagination',\n content: {\n numberItemsSelector: t({\n en: 'Items per page',\n fr: 'Eléments par page',\n es: 'Items por página',\n 'en-GB': 'Items per page',\n de: 'Items pro Seite',\n ja: 'ページあたりのアイテム数',\n ko: '페이지당 아이템 수',\n zh: '每页项目数',\n it: 'Elementi per pagina',\n pt: 'Itens por página',\n hi: 'पृष्ठ पर आइटम्स',\n ar: 'عدد العناصر لكل صفحة',\n ru: 'Элементов на странице',\n tr: 'Sayfa başına öğe',\n pl: 'Elementów na stronę',\n id: 'Item per halaman',\n vi: 'Số mục trên mỗi trang',\n uk: 'Записів на сторінку',\n }),\n showingResults: insert(\n t({\n ar: 'عرض {{start}} إلى {{end}} من {{total}} نتائج',\n de: 'Zeigt {{start}} bis {{end}} von {{total}} Ergebnissen',\n en: 'Showing {{start}} to {{end}} of {{total}} results',\n 'en-GB': 'Showing {{start}} to {{end}} of {{total}} results',\n es: 'Mostrando {{start}} a {{end}} de {{total}} resultados',\n fr: 'Afficher {{start}} à {{end}} de {{total}} résultats',\n hi: '{{start}} से {{end}} तक के {{total}} परिणाम दिखा रहे हैं',\n id: 'Menampilkan {{start}} hingga {{end}} dari {{total}} hasil',\n it: 'Mostrando {{start}} a {{end}} di {{total}} risultati',\n ja: '{{start}} から {{end}} までの {{total}} 件の結果を表示',\n ko: '{{start}} 에서 {{end}} 까지의 {{total}} 개 결과 표시',\n pl: 'Wyświetlane {{start}} do {{end}} z {{total}} wyników',\n pt: 'Mostrando {{start}} a {{end}} de {{total}} resultados',\n ru: 'Показано {{start}}-{{end}} из {{total}} результатов',\n tr: '{{start}} から {{end}} までの {{total}} 件の結果を表示',\n uk: 'Показано від {{start}} до {{end}} з {{total}} результатів',\n vi: 'Hiển thị {{start}} đến {{end}} trong tổng số {{total}} kết quả',\n zh: '显示第 {{start}} 到 {{end}} 项,共 {{total}} 个结果',\n })\n ),\n selectPageSize: t({\n en: 'Select page size',\n fr: 'Sélectionner la taille de la page',\n es: 'Seleccionar tamaño de página',\n 'en-GB': 'Select page size',\n de: 'Seitegröße auswählen',\n ja: 'ページサイズを選択',\n ko: '페이지 크기 선택',\n zh: '选择页面大小',\n it: 'Seleziona una dimensione di pagina',\n pt: 'Selecionar um tamanho de página',\n hi: 'पृष्ठ आकार चुनें',\n ar: 'اختر حجم الصفحة',\n ru: 'Выберите размер страницы',\n tr: 'Sayfa boyutunu seç',\n pl: 'Wybierz liczbę elementów na stronę',\n id: 'Pilih jumlah item per halaman',\n vi: 'Chọn số mục trên mỗi trang',\n uk: 'Оберіть кількість елементів на сторінку',\n }),\n goToNextPage: t({\n en: 'Go to next page',\n fr: 'Aller à la page suivante',\n es: 'Ir a la página siguiente',\n 'en-GB': 'Go to next page',\n de: 'Zur nächsten Seite',\n ja: '次のページに移動',\n ko: '다음 페이지로 이동',\n zh: '转到下一页',\n it: 'Vai alla pagina successiva',\n pt: 'Ir para a página seguinte',\n hi: 'अगली पृष्ठ पर जाएं',\n ar: 'اذهب إلى الصفحة التالية',\n ru: 'Перейти к следующей странице',\n tr: 'Sonraki sayfaya git',\n pl: 'Przejdź do następnej strony',\n id: 'Pergi ke halaman berikutnya',\n vi: 'Chuyển sang trang tiếp theo',\n uk: 'Перейти на наступну сторінку',\n }),\n goToPreviousPage: t({\n en: 'Go to previous page',\n fr: 'Aller à la page précédente',\n es: 'Ir a la página anterior',\n 'en-GB': 'Go to previous page',\n de: 'Zur vorherigen Seite',\n ja: '前のページに移動',\n ko: '이전 페이지로 이동',\n zh: '转到上一页',\n it: 'Vai alla pagina precedente',\n pt: 'Ir para a página anterior',\n hi: 'पिछली पृष्ठ पर जाएं',\n ar: 'اذهب إلى الصفحة السابقة',\n ru: 'Перейти к предыдущей странице',\n tr: 'Önceki sayfaya git',\n pl: 'Przejdź do poprzedniej strony',\n id: 'Pergi ke halaman sebelumnya',\n vi: 'Chuyển sang trang trước',\n uk: 'Перейти на попередню сторінку',\n }),\n },\n title: 'Pagination',\n description:\n 'Content strings used for the pagination component, including labels for navigating pages and selecting items per page.',\n tags: ['pagination', 'component'],\n} satisfies Dictionary;\n\nexport default paginationContent;\n"],"mappings":";;;AAEA,MAAM,oBAAoB;CACxB,KAAK;CACL,SAAS;EACP,qBAAqB,EAAE;GACrB,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EACN,CAAC;EACD,gBAAgB,OACd,EAAE;GACA,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EACN,CAAC,CACH;EACA,gBAAgB,EAAE;GAChB,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EACN,CAAC;EACD,cAAc,EAAE;GACd,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EACN,CAAC;EACD,kBAAkB,EAAE;GAClB,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EACN,CAAC;CACH;CACA,OAAO;CACP,aACE;CACF,MAAM,CAAC,cAAc,WAAW;AAClC"}
@@ -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 size-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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkHA,MAAa,cAAmC,EAC9C,QAAQ,IACR,SAAS,IACT,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,WACA,GAAG,YAEH,qBAAC,OAAD;CACE,eAAY;CACZ,WAAW,GACT,kEACA,UACD;CACD,GAAI;WANN,CAQE,oBAAC,QAAD,YACE,oBAAC,WAAD;EACE,IAAG;EACI;EACC;EACR,cAAa;EACb,qBAAoB;EACjB;EACA;YAEH,oBAAC,UAAD;GAAY;GAAQ;GAAI,GAAG;GAAM;EACzB,GACL,GACP,oBAAC,QAAD;EACE,OAAM;EACN,QAAO;EACP,aAAa;EACb,MAAK;EACL,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 size-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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAkHA,MAAa,cAAmC,EAC9C,QAAQ,IACR,SAAS,IACT,IAAI,GACJ,IAAI,GACJ,KAAK,GACL,KAAK,GACL,KAAK,GACL,WACA,GAAG,YAEH,qBAAC,OAAD;CACE,eAAY;CACZ,WAAW,GACT,kEACA,SACF;CACA,GAAI;WANN,CAQE,oBAAC,QAAD,YACE,oBAAC,WAAD;EACE,IAAG;EACI;EACC;EACR,cAAa;EACb,qBAAoB;EACjB;EACA;YAEH,oBAAC,UAAD;GAAY;GAAQ;GAAI,GAAG;EAAK;CACzB,GACL,IACN,oBAAC,QAAD;EACE,OAAM;EACN,QAAO;EACP,aAAa;EACb,MAAK;CACN,EACE"}
@@ -232,7 +232,8 @@ const GridDistortionPattern = ({ width = 70, height = 70, radius = 280, strength
232
232
  updateGridPoints(grid, mouseX, mouseY, mouseActive, currentRadius, currentStrength);
233
233
  const rows = grid.length;
234
234
  const columns = grid[0].length;
235
- ensurePathCount(rows * (columns - 1) + columns * (rows - 1));
235
+ const totalSegments = rows * (columns - 1) + columns * (rows - 1);
236
+ ensurePathCount(totalSegments);
236
237
  let pathIndex = 0;
237
238
  for (let rowIndex = 0; rowIndex < rows; rowIndex++) for (let columnIndex = 0; columnIndex < columns - 1; columnIndex++) {
238
239
  const p0 = grid[rowIndex][columnIndex];
@@ -1 +1 @@
1
- {"version":3,"file":"GridDistortionPattern.mjs","names":[],"sources":["../../../../src/components/Pattern/GridDistortionPattern.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport { type FC, type SVGProps, useEffect, useRef } from 'react';\nimport { useIsDarkMode } from '../../hooks/useIsDarkMode';\n\n// ---------------------------------------------------------------------------\n// Theme configuration — tweak these to adjust the grid appearance globally\n// ---------------------------------------------------------------------------\n\ntype GridTheme = {\n /** Resting line color, used far from the pointer. */\n lineColor: string;\n /**\n * Color the lines fade toward as the pointer approaches. To avoid lines\n * appearing to \"dim into the background\" near the pointer, this should be\n * brighter (higher luminance) than {@link GridTheme.lineColor} in dark mode\n * and clearly contrasting in light mode.\n */\n highlightColor: string;\n /** Stroke opacity far from the pointer — keeps the whole grid visible. */\n baseOpacity: number;\n /** Extra opacity added at the pointer's center on top of {@link GridTheme.baseOpacity}. */\n highlightOpacityBoost: number;\n};\n\n/**\n * Light mode: a visible (but subtle) gray line on white. The base opacity is\n * raised and the highlight boost lowered so the grid no longer fades to nothing\n * far from the pointer while spiking to a harsh accent underneath it.\n */\nconst LIGHT_THEME: GridTheme = {\n lineColor: '#a8a8a8',\n highlightColor: '#969696',\n baseOpacity: 0.3,\n highlightOpacityBoost: 0.3,\n};\n\n/**\n * Dark mode: a mid-gray line that brightens toward a light purple near the\n * pointer (brighter than the resting line, so the hovered segment lights up\n * instead of darkening into the black background).\n */\nconst DARK_THEME: GridTheme = {\n lineColor: '#4d4d4d',\n highlightColor: '#5c5c5c',\n baseOpacity: 0.2,\n highlightOpacityBoost: 0.2,\n};\n\n/**\n * Falloff exponent for the highlight. A gentler curve (2 = quadratic) spreads\n * the highlight over a wider area than a cubic one, smoothing the transition\n * between the resting line and the accent under the pointer.\n */\nconst HIGHLIGHT_FALLOFF_EXPONENT = 2;\n\n// ---------------------------------------------------------------------------\n// Pure helpers — defined once at module level, never recreated\n// ---------------------------------------------------------------------------\n\nconst hexToRgb = (hex: string): [number, number, number] => {\n const numericValue = parseInt(hex.replace('#', ''), 16);\n return [\n (numericValue >> 16) & 255,\n (numericValue >> 8) & 255,\n numericValue & 255,\n ];\n};\n\n/** Neutral gray used when a color string can't be parsed into RGB. */\nconst FALLBACK_RGB: [number, number, number] = [136, 136, 136];\n\n/**\n * Resolves any CSS color string — `#rrggbb`, `rgb()/hsl()`, a named color, or a\n * `var(--token)` reference — into an `[r, g, b]` triple.\n *\n * 6-digit hex is parsed directly. Everything else is resolved by the browser\n * via a throwaway probe element mounted inside `contextElement`, so custom\n * properties resolve against the correct cascade. Falls back to a neutral gray\n * when the value can't be parsed, so the grid never emits invalid\n * `rgb(NaN, …)` strokes (which browsers render as solid black).\n */\nconst resolveColorToRgb = (\n color: string,\n contextElement: Element\n): [number, number, number] => {\n const trimmed = color.trim();\n\n // Fast path: 6-digit hex needs no DOM access.\n if (/^#[0-9a-f]{6}$/i.test(trimmed)) {\n return hexToRgb(trimmed);\n }\n\n const probe = document.createElement('span');\n probe.style.color = trimmed;\n probe.style.display = 'none';\n contextElement.appendChild(probe);\n const computedColor = getComputedStyle(probe).color;\n probe.remove();\n\n const channels = computedColor.match(/-?\\d+(?:\\.\\d+)?/g);\n if (channels && channels.length >= 3) {\n return [Number(channels[0]), Number(channels[1]), Number(channels[2])];\n }\n\n return FALLBACK_RGB;\n};\n\ntype Point = { baseX: number; baseY: number; x: number; y: number };\n\nconst buildSegmentAttrs = (\n startX: number,\n startY: number,\n endX: number,\n endY: number,\n mouseX: number,\n mouseY: number,\n mouseActive: boolean,\n radius: number,\n strength: number,\n lineRgb: [number, number, number],\n highlightRgb: [number, number, number],\n baseOpacity: number,\n highlightOpacityBoost: number\n): {\n d: string;\n stroke: string;\n strokeOpacity: number;\n strokeWidth: number;\n} => {\n let red: number;\n let green: number;\n let blue: number;\n let opacity: number;\n let strokeWidth: number;\n\n if (!mouseActive) {\n [red, green, blue] = lineRgb;\n opacity = baseOpacity;\n strokeWidth = 0.8;\n } else {\n const midX = (startX + endX) / 2;\n const midY = (startY + endY) / 2;\n const deltaX = mouseX - midX;\n const deltaY = mouseY - midY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n const distanceRatio = Math.max(0, 1 - distance / radius);\n const easing = distanceRatio ** HIGHLIGHT_FALLOFF_EXPONENT;\n red = Math.round(lineRgb[0] + (highlightRgb[0] - lineRgb[0]) * easing);\n green = Math.round(lineRgb[1] + (highlightRgb[1] - lineRgb[1]) * easing);\n blue = Math.round(lineRgb[2] + (highlightRgb[2] - lineRgb[2]) * easing);\n opacity = baseOpacity + easing * highlightOpacityBoost;\n strokeWidth = 0.8 + easing * 1.2;\n void strength; // currently unused in segment coloring, kept for API compatibility\n }\n\n return {\n d: `M ${startX} ${startY} L ${endX} ${endY}`,\n stroke: `rgb(${red},${green},${blue})`,\n strokeOpacity: opacity,\n strokeWidth,\n };\n};\n\nconst updateGridPoints = (\n grid: Point[][],\n mouseX: number,\n mouseY: number,\n mouseActive: boolean,\n radius: number,\n strength: number\n): void => {\n const rows = grid.length;\n const columns = grid[0]!.length;\n\n for (let rowIndex = 0; rowIndex < rows; rowIndex++) {\n for (let columnIndex = 0; columnIndex < columns; columnIndex++) {\n const point = grid[rowIndex]![columnIndex]!;\n if (!mouseActive) {\n point.x += (point.baseX - point.x) * 0.08;\n point.y += (point.baseY - point.y) * 0.08;\n continue;\n }\n const deltaX = mouseX - point.baseX;\n const deltaY = mouseY - point.baseY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n\n if (distance < radius && distance > 0) {\n const force = (Math.cos((distance / radius) * Math.PI) + 1) / 2;\n const displacement = force * strength * radius * 0.3;\n point.x +=\n (point.baseX + (deltaX / distance) * displacement - point.x) * 0.12;\n point.y +=\n (point.baseY + (deltaY / distance) * displacement - point.y) * 0.12;\n } else {\n point.x += (point.baseX - point.x) * 0.08;\n point.y += (point.baseY - point.y) * 0.08;\n }\n }\n }\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\ntype GridDistortionPatternProps = {\n width?: number;\n height?: number;\n radius?: number;\n strength?: number;\n lineColor?: string;\n highlightColor?: string;\n} & SVGProps<SVGSVGElement>;\n\nexport const GridDistortionPattern: FC<GridDistortionPatternProps> = ({\n width = 70,\n height = 70,\n radius = 280,\n strength = 0.12,\n lineColor,\n highlightColor,\n className,\n ...props\n}) => {\n const isDarkMode = useIsDarkMode();\n const theme = isDarkMode ? DARK_THEME : LIGHT_THEME;\n\n // Explicit props win; otherwise fall back to the active theme's defaults.\n const resolvedLineColor = lineColor ?? theme.lineColor;\n const resolvedHighlightColor = highlightColor ?? theme.highlightColor;\n\n const svgRef = useRef<SVGSVGElement>(null);\n const mouse = useRef({ x: -9999, y: -9999, active: false });\n const points = useRef<Point[][]>([]);\n\n // Stable refs so the animation loop always sees the latest prop values\n // without needing to restart itself.\n const radiusRef = useRef(radius);\n const strengthRef = useRef(strength);\n // Initialized to safe placeholders; the real (possibly CSS-variable-based)\n // colors are resolved against the DOM in the effect below.\n const lineRgbRef = useRef<[number, number, number]>(FALLBACK_RGB);\n const highlightRgbRef = useRef<[number, number, number]>(FALLBACK_RGB);\n const baseOpacityRef = useRef(theme.baseOpacity);\n const highlightOpacityBoostRef = useRef(theme.highlightOpacityBoost);\n\n // Keep numeric refs in sync with props on each render (cheap assignments).\n radiusRef.current = radius;\n strengthRef.current = strength;\n baseOpacityRef.current = theme.baseOpacity;\n highlightOpacityBoostRef.current = theme.highlightOpacityBoost;\n\n // Resolve colors once mounted — getComputedStyle is required so that\n // `var(--token)` highlight/line colors resolve against the live cascade.\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg) return;\n lineRgbRef.current = resolveColorToRgb(resolvedLineColor, svg);\n highlightRgbRef.current = resolveColorToRgb(resolvedHighlightColor, svg);\n }, [resolvedLineColor, resolvedHighlightColor]);\n\n // ---------------------------------------------------------------------------\n // Resize — rebuild the point grid and resize the SVG viewBox\n // ---------------------------------------------------------------------------\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg) return;\n\n const resize = () => {\n const rect = svg.getBoundingClientRect();\n svg.setAttribute('viewBox', `0 0 ${rect.width} ${rect.height}`);\n\n const columns = Math.ceil(rect.width / width) + 2;\n const rows = Math.ceil(rect.height / height) + 2;\n const newGrid: Point[][] = [];\n\n for (let rowIndex = -1; rowIndex <= rows; rowIndex++) {\n const row: Point[] = [];\n for (let columnIndex = -1; columnIndex <= columns; columnIndex++) {\n row.push({\n baseX: columnIndex * width,\n baseY: rowIndex * height,\n x: columnIndex * width,\n y: rowIndex * height,\n });\n }\n newGrid.push(row);\n }\n points.current = newGrid;\n };\n\n resize();\n const resizeObserver = new ResizeObserver(resize);\n resizeObserver.observe(svg);\n return () => resizeObserver.disconnect();\n }, [width, height]);\n\n // ---------------------------------------------------------------------------\n // Pointer tracking — passive listeners, no React state involved\n // ---------------------------------------------------------------------------\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg) return;\n\n const handlePointerMove = (event: PointerEvent) => {\n const rect = svg.getBoundingClientRect();\n mouse.current = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n active: true,\n };\n };\n const handlePointerLeave = () => {\n mouse.current.active = false;\n };\n\n window.addEventListener('pointermove', handlePointerMove, {\n passive: true,\n });\n window.addEventListener('pointerleave', handlePointerLeave, {\n passive: true,\n });\n return () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerleave', handlePointerLeave);\n };\n }, []);\n\n // ---------------------------------------------------------------------------\n // Animation loop — writes directly to SVG DOM, no React state/re-renders\n // ---------------------------------------------------------------------------\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg) return;\n\n // We maintain a pool of <path> elements and reuse them each frame\n // to avoid GC pressure from creating/deleting DOM nodes every tick.\n const pathPool: SVGPathElement[] = [];\n let frame = 0;\n\n const ensurePathCount = (count: number) => {\n while (pathPool.length < count) {\n const el = document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'path'\n );\n el.setAttribute('fill', 'none');\n svg.appendChild(el);\n pathPool.push(el);\n }\n // Hide surplus paths\n for (let i = count; i < pathPool.length; i++) {\n pathPool[i]!.setAttribute('d', '');\n }\n };\n\n const tick = () => {\n const grid = points.current;\n if (!grid.length) {\n frame = requestAnimationFrame(tick);\n return;\n }\n\n const { x: mouseX, y: mouseY, active: mouseActive } = mouse.current;\n const currentRadius = radiusRef.current;\n const currentStrength = strengthRef.current;\n const lineRgb = lineRgbRef.current;\n const highlightRgb = highlightRgbRef.current;\n const baseOpacity = baseOpacityRef.current;\n const highlightOpacityBoost = highlightOpacityBoostRef.current;\n\n // Update point positions\n updateGridPoints(\n grid,\n mouseX,\n mouseY,\n mouseActive,\n currentRadius,\n currentStrength\n );\n\n const rows = grid.length;\n const columns = grid[0]!.length;\n\n // Count segments up front so we can size the pool\n const horizontalCount = rows * (columns - 1);\n const verticalCount = columns * (rows - 1);\n const totalSegments = horizontalCount + verticalCount;\n ensurePathCount(totalSegments);\n\n let pathIndex = 0;\n\n // Horizontal segments\n for (let rowIndex = 0; rowIndex < rows; rowIndex++) {\n for (let columnIndex = 0; columnIndex < columns - 1; columnIndex++) {\n const p0 = grid[rowIndex]![columnIndex]!;\n const p1 = grid[rowIndex]![columnIndex + 1]!;\n const attrs = buildSegmentAttrs(\n p0.x,\n p0.y,\n p1.x,\n p1.y,\n mouseX,\n mouseY,\n mouseActive,\n currentRadius,\n currentStrength,\n lineRgb,\n highlightRgb,\n baseOpacity,\n highlightOpacityBoost\n );\n const el = pathPool[pathIndex++]!;\n el.setAttribute('d', attrs.d);\n el.setAttribute('stroke', attrs.stroke);\n el.setAttribute('stroke-opacity', String(attrs.strokeOpacity));\n el.setAttribute('stroke-width', String(attrs.strokeWidth));\n }\n }\n\n // Vertical segments\n for (let columnIndex = 0; columnIndex < columns; columnIndex++) {\n for (let rowIndex = 0; rowIndex < rows - 1; rowIndex++) {\n const p0 = grid[rowIndex]![columnIndex]!;\n const p1 = grid[rowIndex + 1]![columnIndex]!;\n const attrs = buildSegmentAttrs(\n p0.x,\n p0.y,\n p1.x,\n p1.y,\n mouseX,\n mouseY,\n mouseActive,\n currentRadius,\n currentStrength,\n lineRgb,\n highlightRgb,\n baseOpacity,\n highlightOpacityBoost\n );\n const el = pathPool[pathIndex++]!;\n el.setAttribute('d', attrs.d);\n el.setAttribute('stroke', attrs.stroke);\n el.setAttribute('stroke-opacity', String(attrs.strokeOpacity));\n el.setAttribute('stroke-width', String(attrs.strokeWidth));\n }\n }\n\n frame = requestAnimationFrame(tick);\n };\n\n tick();\n\n return () => {\n cancelAnimationFrame(frame);\n // Clean up path elements we injected\n for (const el of pathPool) {\n el.remove();\n }\n };\n }, []); // no dependencies — reads everything via refs\n\n return (\n <svg\n ref={svgRef}\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute inset-0 size-full',\n className\n )}\n {...props}\n />\n );\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"GridDistortionPattern.mjs","names":[],"sources":["../../../../src/components/Pattern/GridDistortionPattern.tsx"],"sourcesContent":["'use client';\n\nimport { cn } from '@utils/cn';\nimport { type FC, type SVGProps, useEffect, useRef } from 'react';\nimport { useIsDarkMode } from '../../hooks/useIsDarkMode';\n\n// ---------------------------------------------------------------------------\n// Theme configuration — tweak these to adjust the grid appearance globally\n// ---------------------------------------------------------------------------\n\ntype GridTheme = {\n /** Resting line color, used far from the pointer. */\n lineColor: string;\n /**\n * Color the lines fade toward as the pointer approaches. To avoid lines\n * appearing to \"dim into the background\" near the pointer, this should be\n * brighter (higher luminance) than {@link GridTheme.lineColor} in dark mode\n * and clearly contrasting in light mode.\n */\n highlightColor: string;\n /** Stroke opacity far from the pointer — keeps the whole grid visible. */\n baseOpacity: number;\n /** Extra opacity added at the pointer's center on top of {@link GridTheme.baseOpacity}. */\n highlightOpacityBoost: number;\n};\n\n/**\n * Light mode: a visible (but subtle) gray line on white. The base opacity is\n * raised and the highlight boost lowered so the grid no longer fades to nothing\n * far from the pointer while spiking to a harsh accent underneath it.\n */\nconst LIGHT_THEME: GridTheme = {\n lineColor: '#a8a8a8',\n highlightColor: '#969696',\n baseOpacity: 0.3,\n highlightOpacityBoost: 0.3,\n};\n\n/**\n * Dark mode: a mid-gray line that brightens toward a light purple near the\n * pointer (brighter than the resting line, so the hovered segment lights up\n * instead of darkening into the black background).\n */\nconst DARK_THEME: GridTheme = {\n lineColor: '#4d4d4d',\n highlightColor: '#5c5c5c',\n baseOpacity: 0.2,\n highlightOpacityBoost: 0.2,\n};\n\n/**\n * Falloff exponent for the highlight. A gentler curve (2 = quadratic) spreads\n * the highlight over a wider area than a cubic one, smoothing the transition\n * between the resting line and the accent under the pointer.\n */\nconst HIGHLIGHT_FALLOFF_EXPONENT = 2;\n\n// ---------------------------------------------------------------------------\n// Pure helpers — defined once at module level, never recreated\n// ---------------------------------------------------------------------------\n\nconst hexToRgb = (hex: string): [number, number, number] => {\n const numericValue = parseInt(hex.replace('#', ''), 16);\n return [\n (numericValue >> 16) & 255,\n (numericValue >> 8) & 255,\n numericValue & 255,\n ];\n};\n\n/** Neutral gray used when a color string can't be parsed into RGB. */\nconst FALLBACK_RGB: [number, number, number] = [136, 136, 136];\n\n/**\n * Resolves any CSS color string — `#rrggbb`, `rgb()/hsl()`, a named color, or a\n * `var(--token)` reference — into an `[r, g, b]` triple.\n *\n * 6-digit hex is parsed directly. Everything else is resolved by the browser\n * via a throwaway probe element mounted inside `contextElement`, so custom\n * properties resolve against the correct cascade. Falls back to a neutral gray\n * when the value can't be parsed, so the grid never emits invalid\n * `rgb(NaN, …)` strokes (which browsers render as solid black).\n */\nconst resolveColorToRgb = (\n color: string,\n contextElement: Element\n): [number, number, number] => {\n const trimmed = color.trim();\n\n // Fast path: 6-digit hex needs no DOM access.\n if (/^#[0-9a-f]{6}$/i.test(trimmed)) {\n return hexToRgb(trimmed);\n }\n\n const probe = document.createElement('span');\n probe.style.color = trimmed;\n probe.style.display = 'none';\n contextElement.appendChild(probe);\n const computedColor = getComputedStyle(probe).color;\n probe.remove();\n\n const channels = computedColor.match(/-?\\d+(?:\\.\\d+)?/g);\n if (channels && channels.length >= 3) {\n return [Number(channels[0]), Number(channels[1]), Number(channels[2])];\n }\n\n return FALLBACK_RGB;\n};\n\ntype Point = { baseX: number; baseY: number; x: number; y: number };\n\nconst buildSegmentAttrs = (\n startX: number,\n startY: number,\n endX: number,\n endY: number,\n mouseX: number,\n mouseY: number,\n mouseActive: boolean,\n radius: number,\n strength: number,\n lineRgb: [number, number, number],\n highlightRgb: [number, number, number],\n baseOpacity: number,\n highlightOpacityBoost: number\n): {\n d: string;\n stroke: string;\n strokeOpacity: number;\n strokeWidth: number;\n} => {\n let red: number;\n let green: number;\n let blue: number;\n let opacity: number;\n let strokeWidth: number;\n\n if (!mouseActive) {\n [red, green, blue] = lineRgb;\n opacity = baseOpacity;\n strokeWidth = 0.8;\n } else {\n const midX = (startX + endX) / 2;\n const midY = (startY + endY) / 2;\n const deltaX = mouseX - midX;\n const deltaY = mouseY - midY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n const distanceRatio = Math.max(0, 1 - distance / radius);\n const easing = distanceRatio ** HIGHLIGHT_FALLOFF_EXPONENT;\n red = Math.round(lineRgb[0] + (highlightRgb[0] - lineRgb[0]) * easing);\n green = Math.round(lineRgb[1] + (highlightRgb[1] - lineRgb[1]) * easing);\n blue = Math.round(lineRgb[2] + (highlightRgb[2] - lineRgb[2]) * easing);\n opacity = baseOpacity + easing * highlightOpacityBoost;\n strokeWidth = 0.8 + easing * 1.2;\n void strength; // currently unused in segment coloring, kept for API compatibility\n }\n\n return {\n d: `M ${startX} ${startY} L ${endX} ${endY}`,\n stroke: `rgb(${red},${green},${blue})`,\n strokeOpacity: opacity,\n strokeWidth,\n };\n};\n\nconst updateGridPoints = (\n grid: Point[][],\n mouseX: number,\n mouseY: number,\n mouseActive: boolean,\n radius: number,\n strength: number\n): void => {\n const rows = grid.length;\n const columns = grid[0]!.length;\n\n for (let rowIndex = 0; rowIndex < rows; rowIndex++) {\n for (let columnIndex = 0; columnIndex < columns; columnIndex++) {\n const point = grid[rowIndex]![columnIndex]!;\n if (!mouseActive) {\n point.x += (point.baseX - point.x) * 0.08;\n point.y += (point.baseY - point.y) * 0.08;\n continue;\n }\n const deltaX = mouseX - point.baseX;\n const deltaY = mouseY - point.baseY;\n const distance = Math.sqrt(deltaX * deltaX + deltaY * deltaY);\n\n if (distance < radius && distance > 0) {\n const force = (Math.cos((distance / radius) * Math.PI) + 1) / 2;\n const displacement = force * strength * radius * 0.3;\n point.x +=\n (point.baseX + (deltaX / distance) * displacement - point.x) * 0.12;\n point.y +=\n (point.baseY + (deltaY / distance) * displacement - point.y) * 0.12;\n } else {\n point.x += (point.baseX - point.x) * 0.08;\n point.y += (point.baseY - point.y) * 0.08;\n }\n }\n }\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\ntype GridDistortionPatternProps = {\n width?: number;\n height?: number;\n radius?: number;\n strength?: number;\n lineColor?: string;\n highlightColor?: string;\n} & SVGProps<SVGSVGElement>;\n\nexport const GridDistortionPattern: FC<GridDistortionPatternProps> = ({\n width = 70,\n height = 70,\n radius = 280,\n strength = 0.12,\n lineColor,\n highlightColor,\n className,\n ...props\n}) => {\n const isDarkMode = useIsDarkMode();\n const theme = isDarkMode ? DARK_THEME : LIGHT_THEME;\n\n // Explicit props win; otherwise fall back to the active theme's defaults.\n const resolvedLineColor = lineColor ?? theme.lineColor;\n const resolvedHighlightColor = highlightColor ?? theme.highlightColor;\n\n const svgRef = useRef<SVGSVGElement>(null);\n const mouse = useRef({ x: -9999, y: -9999, active: false });\n const points = useRef<Point[][]>([]);\n\n // Stable refs so the animation loop always sees the latest prop values\n // without needing to restart itself.\n const radiusRef = useRef(radius);\n const strengthRef = useRef(strength);\n // Initialized to safe placeholders; the real (possibly CSS-variable-based)\n // colors are resolved against the DOM in the effect below.\n const lineRgbRef = useRef<[number, number, number]>(FALLBACK_RGB);\n const highlightRgbRef = useRef<[number, number, number]>(FALLBACK_RGB);\n const baseOpacityRef = useRef(theme.baseOpacity);\n const highlightOpacityBoostRef = useRef(theme.highlightOpacityBoost);\n\n // Keep numeric refs in sync with props on each render (cheap assignments).\n radiusRef.current = radius;\n strengthRef.current = strength;\n baseOpacityRef.current = theme.baseOpacity;\n highlightOpacityBoostRef.current = theme.highlightOpacityBoost;\n\n // Resolve colors once mounted — getComputedStyle is required so that\n // `var(--token)` highlight/line colors resolve against the live cascade.\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg) return;\n lineRgbRef.current = resolveColorToRgb(resolvedLineColor, svg);\n highlightRgbRef.current = resolveColorToRgb(resolvedHighlightColor, svg);\n }, [resolvedLineColor, resolvedHighlightColor]);\n\n // ---------------------------------------------------------------------------\n // Resize — rebuild the point grid and resize the SVG viewBox\n // ---------------------------------------------------------------------------\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg) return;\n\n const resize = () => {\n const rect = svg.getBoundingClientRect();\n svg.setAttribute('viewBox', `0 0 ${rect.width} ${rect.height}`);\n\n const columns = Math.ceil(rect.width / width) + 2;\n const rows = Math.ceil(rect.height / height) + 2;\n const newGrid: Point[][] = [];\n\n for (let rowIndex = -1; rowIndex <= rows; rowIndex++) {\n const row: Point[] = [];\n for (let columnIndex = -1; columnIndex <= columns; columnIndex++) {\n row.push({\n baseX: columnIndex * width,\n baseY: rowIndex * height,\n x: columnIndex * width,\n y: rowIndex * height,\n });\n }\n newGrid.push(row);\n }\n points.current = newGrid;\n };\n\n resize();\n const resizeObserver = new ResizeObserver(resize);\n resizeObserver.observe(svg);\n return () => resizeObserver.disconnect();\n }, [width, height]);\n\n // ---------------------------------------------------------------------------\n // Pointer tracking — passive listeners, no React state involved\n // ---------------------------------------------------------------------------\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg) return;\n\n const handlePointerMove = (event: PointerEvent) => {\n const rect = svg.getBoundingClientRect();\n mouse.current = {\n x: event.clientX - rect.left,\n y: event.clientY - rect.top,\n active: true,\n };\n };\n const handlePointerLeave = () => {\n mouse.current.active = false;\n };\n\n window.addEventListener('pointermove', handlePointerMove, {\n passive: true,\n });\n window.addEventListener('pointerleave', handlePointerLeave, {\n passive: true,\n });\n return () => {\n window.removeEventListener('pointermove', handlePointerMove);\n window.removeEventListener('pointerleave', handlePointerLeave);\n };\n }, []);\n\n // ---------------------------------------------------------------------------\n // Animation loop — writes directly to SVG DOM, no React state/re-renders\n // ---------------------------------------------------------------------------\n useEffect(() => {\n const svg = svgRef.current;\n if (!svg) return;\n\n // We maintain a pool of <path> elements and reuse them each frame\n // to avoid GC pressure from creating/deleting DOM nodes every tick.\n const pathPool: SVGPathElement[] = [];\n let frame = 0;\n\n const ensurePathCount = (count: number) => {\n while (pathPool.length < count) {\n const el = document.createElementNS(\n 'http://www.w3.org/2000/svg',\n 'path'\n );\n el.setAttribute('fill', 'none');\n svg.appendChild(el);\n pathPool.push(el);\n }\n // Hide surplus paths\n for (let i = count; i < pathPool.length; i++) {\n pathPool[i]!.setAttribute('d', '');\n }\n };\n\n const tick = () => {\n const grid = points.current;\n if (!grid.length) {\n frame = requestAnimationFrame(tick);\n return;\n }\n\n const { x: mouseX, y: mouseY, active: mouseActive } = mouse.current;\n const currentRadius = radiusRef.current;\n const currentStrength = strengthRef.current;\n const lineRgb = lineRgbRef.current;\n const highlightRgb = highlightRgbRef.current;\n const baseOpacity = baseOpacityRef.current;\n const highlightOpacityBoost = highlightOpacityBoostRef.current;\n\n // Update point positions\n updateGridPoints(\n grid,\n mouseX,\n mouseY,\n mouseActive,\n currentRadius,\n currentStrength\n );\n\n const rows = grid.length;\n const columns = grid[0]!.length;\n\n // Count segments up front so we can size the pool\n const horizontalCount = rows * (columns - 1);\n const verticalCount = columns * (rows - 1);\n const totalSegments = horizontalCount + verticalCount;\n ensurePathCount(totalSegments);\n\n let pathIndex = 0;\n\n // Horizontal segments\n for (let rowIndex = 0; rowIndex < rows; rowIndex++) {\n for (let columnIndex = 0; columnIndex < columns - 1; columnIndex++) {\n const p0 = grid[rowIndex]![columnIndex]!;\n const p1 = grid[rowIndex]![columnIndex + 1]!;\n const attrs = buildSegmentAttrs(\n p0.x,\n p0.y,\n p1.x,\n p1.y,\n mouseX,\n mouseY,\n mouseActive,\n currentRadius,\n currentStrength,\n lineRgb,\n highlightRgb,\n baseOpacity,\n highlightOpacityBoost\n );\n const el = pathPool[pathIndex++]!;\n el.setAttribute('d', attrs.d);\n el.setAttribute('stroke', attrs.stroke);\n el.setAttribute('stroke-opacity', String(attrs.strokeOpacity));\n el.setAttribute('stroke-width', String(attrs.strokeWidth));\n }\n }\n\n // Vertical segments\n for (let columnIndex = 0; columnIndex < columns; columnIndex++) {\n for (let rowIndex = 0; rowIndex < rows - 1; rowIndex++) {\n const p0 = grid[rowIndex]![columnIndex]!;\n const p1 = grid[rowIndex + 1]![columnIndex]!;\n const attrs = buildSegmentAttrs(\n p0.x,\n p0.y,\n p1.x,\n p1.y,\n mouseX,\n mouseY,\n mouseActive,\n currentRadius,\n currentStrength,\n lineRgb,\n highlightRgb,\n baseOpacity,\n highlightOpacityBoost\n );\n const el = pathPool[pathIndex++]!;\n el.setAttribute('d', attrs.d);\n el.setAttribute('stroke', attrs.stroke);\n el.setAttribute('stroke-opacity', String(attrs.strokeOpacity));\n el.setAttribute('stroke-width', String(attrs.strokeWidth));\n }\n }\n\n frame = requestAnimationFrame(tick);\n };\n\n tick();\n\n return () => {\n cancelAnimationFrame(frame);\n // Clean up path elements we injected\n for (const el of pathPool) {\n el.remove();\n }\n };\n }, []); // no dependencies — reads everything via refs\n\n return (\n <svg\n ref={svgRef}\n aria-hidden=\"true\"\n className={cn(\n 'pointer-events-none absolute inset-0 size-full',\n className\n )}\n {...props}\n />\n );\n};\n"],"mappings":"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"}
@@ -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":";;;;;;;;AA0BA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0GX,MAAa,eAAqC,EAChD,QAAQ,IACR,SAAS,IACT,IAAI,IACJ,IAAI,IACJ,kBAAkB,GAClB,SACA,WACA,GAAG,YAEH,qBAAC,OAAD;CACE,eAAY;CACZ,WAAW,GACT,0HACA,UACD;CACD,GAAI;WANN;EAQE,oBAAC,QAAD,YACE,oBAAC,WAAD;GACM;GACG;GACC;GACR,cAAa;GACV;GACA;aAEH,oBAAC,QAAD;IACE,GAAG,OAAO,OAAO,MAAM;IACvB,MAAK;IACY;IACjB;GACM,GACL;EACP,oBAAC,QAAD;GAAM,OAAM;GAAO,QAAO;GAAO,aAAa;GAAG,MAAM,QAAQ,GAAG;GAAM;EACvE,WACC,oBAAC,OAAD;GACK;GACA;GACH,WAAU;GACV,MAAK;GACL,cAAW;aAEV,QAAQ,KAAK,CAAC,GAAG,OAChB,oBAAC,QAAD;IACE,aAAY;IAEZ,OAAO,QAAQ;IACf,QAAQ,SAAS;IACjB,GAAG,IAAI,QAAQ;IACf,GAAG,IAAI,SAAS;IAChB,EALK,GAAG,EAAE,GAAG,IAKb,CACF;GACE;EAEJ"}
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":";;;;;;;;AA0BA,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0GX,MAAa,eAAqC,EAChD,QAAQ,IACR,SAAS,IACT,IAAI,IACJ,IAAI,IACJ,kBAAkB,GAClB,SACA,WACA,GAAG,YAEH,qBAAC,OAAD;CACE,eAAY;CACZ,WAAW,GACT,0HACA,SACF;CACA,GAAI;WANN;EAQE,oBAAC,QAAD,YACE,oBAAC,WAAD;GACM;GACG;GACC;GACR,cAAa;GACV;GACA;aAEH,oBAAC,QAAD;IACE,GAAG,OAAO,OAAO,MAAM;IACvB,MAAK;IACY;GAClB;EACM,GACL;EACN,oBAAC,QAAD;GAAM,OAAM;GAAO,QAAO;GAAO,aAAa;GAAG,MAAM,QAAQ,GAAG;EAAK;EACtE,WACC,oBAAC,OAAD;GACK;GACA;GACH,WAAU;GACV,MAAK;GACL,cAAW;aAEV,QAAQ,KAAK,CAAC,GAAG,OAChB,oBAAC,QAAD;IACE,aAAY;IAEZ,OAAO,QAAQ;IACf,QAAQ,SAAS;IACjB,GAAG,IAAI,QAAQ;IACf,GAAG,IAAI,SAAS;GACjB,GALM,GAAG,EAAE,GAAG,GAKd,CACF;EACE;CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"SpotLight.mjs","names":[],"sources":["../../../../src/components/Pattern/SpotLight.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { FC, SVGProps } from 'react';\n\n/**\n * Props for the Spotlight component\n * Extends SVGProps to inherit all standard SVG attributes\n */\ntype SpotlightProps = {\n /** Fill color for the spotlight effect (supports CSS color values) */\n fill?: string;\n /** X coordinate of the ellipse center */\n cx?: number;\n /** Y coordinate of the ellipse center */\n cy?: number;\n /** Horizontal radius of the ellipse */\n rx?: number;\n /** Vertical radius of the ellipse */\n ry?: number;\n /** Opacity of the spotlight effect (0-1) */\n opacity?: number;\n} & SVGProps<SVGSVGElement>;\n\n/**\n * Spotlight Component\n *\n * A dramatic animated SVG spotlight effect that creates a soft, glowing light beam\n * perfect for hero sections, landing pages, and attention-grabbing areas. Features\n * a sophisticated blur filter and smooth animation entrance.\n *\n * Features:\n * - Animated entrance with opacity fade-in effect\n * - Gaussian blur filter for realistic light diffusion\n * - Customizable positioning, size, and color\n * - Full-screen coverage with responsive scaling\n * - Performance optimized with CSS animations\n * - Pointer events disabled to preserve interactivity\n * - Theme-aware with currentColor support\n *\n * Technical Implementation:\n * - Uses SVG ellipse with advanced filter effects\n * - Gaussian blur with 151px standard deviation for soft edges\n * - Matrix transformation for realistic light angle (-0.822377, -0.568943)\n * - ViewBox coordinates optimized for screen coverage (3787x2842)\n * - Animation class `animate-spotlight` handles entrance effect\n * - Filter definition with unique ID prevents conflicts\n *\n * Visual Characteristics:\n * - Default: Large elliptical light beam (1924.71px radius)\n * - Positioned at (1924.71, 273.501) with soft vertical spread\n * - 21% opacity for subtle but noticeable effect\n * - Rotated and scaled for natural spotlight angle\n * - Soft gaussian blur creates realistic light falloff\n *\n * Animation Behavior:\n * - Starts with opacity: 0 (invisible)\n * - Animates to full visibility with smooth transition\n * - Animation timing and easing handled by CSS class\n * - Can be triggered on scroll or interaction events\n *\n * @example\n * Basic hero section spotlight:\n * ```tsx\n * <div className=\"relative min-h-screen bg-dark\">\n * <Spotlight className=\"top-0 left-0\" />\n * <div className=\"relative z-10 flex items-center justify-center h-screen\">\n * <h1 className=\"text-6xl font-bold text-white\">\n * Welcome to the Future\n * </h1>\n * </div>\n * </div>\n * ```\n *\n * @example\n * Custom colored spotlight:\n * ```tsx\n * <Spotlight\n * fill=\"#3b82f6\"\n * opacity={0.3}\n * className=\"top-10 -left-20\"\n * />\n * ```\n *\n * @example\n * Multiple spotlights for complex lighting:\n * ```tsx\n * <div className=\"relative\">\n * <Spotlight\n * cx={1000}\n * cy={300}\n * fill=\"rgb(59, 130, 246)\"\n * opacity={0.15}\n * />\n * <Spotlight\n * cx={2500}\n * cy={800}\n * fill=\"rgb(236, 72, 153)\"\n * opacity={0.15}\n * className=\"scale-75\"\n * />\n * </div>\n * ```\n *\n * @example\n * Responsive positioning:\n * ```tsx\n * <Spotlight\n * className=\"top-0 left-1/2 transform -translate-x-1/2 lg:left-0 lg:transform-none\"\n * opacity={0.25}\n * />\n * ```\n *\n * Styling Guidelines:\n * - Use low opacity (0.1-0.3) for subtle background effects\n * - Higher opacity (0.3-0.5) for dramatic focal points\n * - Consider theme colors when using custom fill values\n * - Position absolute with z-index management for layering\n *\n * Performance Considerations:\n * - SVG filter effects are GPU accelerated when possible\n * - Animation handled by CSS transforms for optimal performance\n * - Large viewBox size cached by browser for efficiency\n * - Pointer events disabled prevents layout recalculation\n *\n * Accessibility:\n * - Purely decorative - doesn't interfere with screen readers\n * - High contrast maintained with overlaid content\n * - Animation respects user's reduced motion preferences\n * - No semantic meaning - safe to hide from assistive tech\n *\n * CSS Requirements:\n * - Requires `animate-spotlight` animation class in Tailwind config\n * - Should define entrance animation timing and easing\n * - Consider defining custom animations for different effects\n *\n * @param props - Spotlight component props\n * @returns Animated SVG spotlight effect with blur filters\n */\nexport const Spotlight: FC<SpotlightProps> = ({\n fill = 'currentColor',\n cy = 273.501,\n rx = 1924.71,\n ry = 273.501,\n cx = 1924.71,\n opacity = 0.21,\n className,\n ...props\n}) => (\n <svg\n className={cn(\n 'pointer-events-none absolute size-screen animate-spotlight opacity-0',\n className\n )}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 3787 2842\"\n fill=\"none\"\n role=\"img\"\n aria-label=\"Spotlight\"\n {...props}\n >\n <g filter=\"url(#filter)\" transform=\"scale (-1, 1)\">\n <ellipse\n cx={cx}\n cy={cy}\n rx={rx}\n ry={ry}\n fill={fill}\n fillOpacity={opacity}\n transform=\"matrix(-0.822377 -0.568943 -0.568943 0.822377 3631.88 2291.09)\"\n ></ellipse>\n </g>\n <defs>\n <filter\n id=\"filter\"\n x=\"0.860352\"\n y=\"0.838989\"\n width=\"3785.16\"\n height=\"2840.26\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n ></feBlend>\n <feGaussianBlur\n stdDeviation=\"151\"\n result=\"effect1_foregroundBlur_1065_8\"\n ></feGaussianBlur>\n </filter>\n </defs>\n </svg>\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyIA,MAAa,aAAiC,EAC5C,OAAO,gBACP,KAAK,SACL,KAAK,SACL,KAAK,SACL,KAAK,SACL,UAAU,KACV,WACA,GAAG,YAEH,qBAAC,OAAD;CACE,WAAW,GACT,wEACA,UACD;CACD,OAAM;CACN,SAAQ;CACR,MAAK;CACL,MAAK;CACL,cAAW;CACX,GAAI;WAVN,CAYE,oBAAC,KAAD;EAAG,QAAO;EAAe,WAAU;YACjC,oBAAC,WAAD;GACM;GACA;GACA;GACA;GACE;GACN,aAAa;GACb,WAAU;GACD;EACT,GACJ,oBAAC,QAAD,YACE,qBAAC,UAAD;EACE,IAAG;EACH,GAAE;EACF,GAAE;EACF,OAAM;EACN,QAAO;EACP,aAAY;EACZ,2BAA0B;YAP5B;GASE,oBAAC,WAAD;IAAS,cAAa;IAAI,QAAO;IAA+B;GAChE,oBAAC,WAAD;IACE,MAAK;IACL,IAAG;IACH,KAAI;IACJ,QAAO;IACE;GACX,oBAAC,kBAAD;IACE,cAAa;IACb,QAAO;IACS;GACX;KACJ,EACH"}
1
+ {"version":3,"file":"SpotLight.mjs","names":[],"sources":["../../../../src/components/Pattern/SpotLight.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport type { FC, SVGProps } from 'react';\n\n/**\n * Props for the Spotlight component\n * Extends SVGProps to inherit all standard SVG attributes\n */\ntype SpotlightProps = {\n /** Fill color for the spotlight effect (supports CSS color values) */\n fill?: string;\n /** X coordinate of the ellipse center */\n cx?: number;\n /** Y coordinate of the ellipse center */\n cy?: number;\n /** Horizontal radius of the ellipse */\n rx?: number;\n /** Vertical radius of the ellipse */\n ry?: number;\n /** Opacity of the spotlight effect (0-1) */\n opacity?: number;\n} & SVGProps<SVGSVGElement>;\n\n/**\n * Spotlight Component\n *\n * A dramatic animated SVG spotlight effect that creates a soft, glowing light beam\n * perfect for hero sections, landing pages, and attention-grabbing areas. Features\n * a sophisticated blur filter and smooth animation entrance.\n *\n * Features:\n * - Animated entrance with opacity fade-in effect\n * - Gaussian blur filter for realistic light diffusion\n * - Customizable positioning, size, and color\n * - Full-screen coverage with responsive scaling\n * - Performance optimized with CSS animations\n * - Pointer events disabled to preserve interactivity\n * - Theme-aware with currentColor support\n *\n * Technical Implementation:\n * - Uses SVG ellipse with advanced filter effects\n * - Gaussian blur with 151px standard deviation for soft edges\n * - Matrix transformation for realistic light angle (-0.822377, -0.568943)\n * - ViewBox coordinates optimized for screen coverage (3787x2842)\n * - Animation class `animate-spotlight` handles entrance effect\n * - Filter definition with unique ID prevents conflicts\n *\n * Visual Characteristics:\n * - Default: Large elliptical light beam (1924.71px radius)\n * - Positioned at (1924.71, 273.501) with soft vertical spread\n * - 21% opacity for subtle but noticeable effect\n * - Rotated and scaled for natural spotlight angle\n * - Soft gaussian blur creates realistic light falloff\n *\n * Animation Behavior:\n * - Starts with opacity: 0 (invisible)\n * - Animates to full visibility with smooth transition\n * - Animation timing and easing handled by CSS class\n * - Can be triggered on scroll or interaction events\n *\n * @example\n * Basic hero section spotlight:\n * ```tsx\n * <div className=\"relative min-h-screen bg-dark\">\n * <Spotlight className=\"top-0 left-0\" />\n * <div className=\"relative z-10 flex items-center justify-center h-screen\">\n * <h1 className=\"text-6xl font-bold text-white\">\n * Welcome to the Future\n * </h1>\n * </div>\n * </div>\n * ```\n *\n * @example\n * Custom colored spotlight:\n * ```tsx\n * <Spotlight\n * fill=\"#3b82f6\"\n * opacity={0.3}\n * className=\"top-10 -left-20\"\n * />\n * ```\n *\n * @example\n * Multiple spotlights for complex lighting:\n * ```tsx\n * <div className=\"relative\">\n * <Spotlight\n * cx={1000}\n * cy={300}\n * fill=\"rgb(59, 130, 246)\"\n * opacity={0.15}\n * />\n * <Spotlight\n * cx={2500}\n * cy={800}\n * fill=\"rgb(236, 72, 153)\"\n * opacity={0.15}\n * className=\"scale-75\"\n * />\n * </div>\n * ```\n *\n * @example\n * Responsive positioning:\n * ```tsx\n * <Spotlight\n * className=\"top-0 left-1/2 transform -translate-x-1/2 lg:left-0 lg:transform-none\"\n * opacity={0.25}\n * />\n * ```\n *\n * Styling Guidelines:\n * - Use low opacity (0.1-0.3) for subtle background effects\n * - Higher opacity (0.3-0.5) for dramatic focal points\n * - Consider theme colors when using custom fill values\n * - Position absolute with z-index management for layering\n *\n * Performance Considerations:\n * - SVG filter effects are GPU accelerated when possible\n * - Animation handled by CSS transforms for optimal performance\n * - Large viewBox size cached by browser for efficiency\n * - Pointer events disabled prevents layout recalculation\n *\n * Accessibility:\n * - Purely decorative - doesn't interfere with screen readers\n * - High contrast maintained with overlaid content\n * - Animation respects user's reduced motion preferences\n * - No semantic meaning - safe to hide from assistive tech\n *\n * CSS Requirements:\n * - Requires `animate-spotlight` animation class in Tailwind config\n * - Should define entrance animation timing and easing\n * - Consider defining custom animations for different effects\n *\n * @param props - Spotlight component props\n * @returns Animated SVG spotlight effect with blur filters\n */\nexport const Spotlight: FC<SpotlightProps> = ({\n fill = 'currentColor',\n cy = 273.501,\n rx = 1924.71,\n ry = 273.501,\n cx = 1924.71,\n opacity = 0.21,\n className,\n ...props\n}) => (\n <svg\n className={cn(\n 'pointer-events-none absolute size-screen animate-spotlight opacity-0',\n className\n )}\n xmlns=\"http://www.w3.org/2000/svg\"\n viewBox=\"0 0 3787 2842\"\n fill=\"none\"\n role=\"img\"\n aria-label=\"Spotlight\"\n {...props}\n >\n <g filter=\"url(#filter)\" transform=\"scale (-1, 1)\">\n <ellipse\n cx={cx}\n cy={cy}\n rx={rx}\n ry={ry}\n fill={fill}\n fillOpacity={opacity}\n transform=\"matrix(-0.822377 -0.568943 -0.568943 0.822377 3631.88 2291.09)\"\n ></ellipse>\n </g>\n <defs>\n <filter\n id=\"filter\"\n x=\"0.860352\"\n y=\"0.838989\"\n width=\"3785.16\"\n height=\"2840.26\"\n filterUnits=\"userSpaceOnUse\"\n colorInterpolationFilters=\"sRGB\"\n >\n <feFlood floodOpacity=\"0\" result=\"BackgroundImageFix\"></feFlood>\n <feBlend\n mode=\"normal\"\n in=\"SourceGraphic\"\n in2=\"BackgroundImageFix\"\n result=\"shape\"\n ></feBlend>\n <feGaussianBlur\n stdDeviation=\"151\"\n result=\"effect1_foregroundBlur_1065_8\"\n ></feGaussianBlur>\n </filter>\n </defs>\n </svg>\n);\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyIA,MAAa,aAAiC,EAC5C,OAAO,gBACP,KAAK,SACL,KAAK,SACL,KAAK,SACL,KAAK,SACL,UAAU,KACV,WACA,GAAG,YAEH,qBAAC,OAAD;CACE,WAAW,GACT,wEACA,SACF;CACA,OAAM;CACN,SAAQ;CACR,MAAK;CACL,MAAK;CACL,cAAW;CACX,GAAI;WAVN,CAYE,oBAAC,KAAD;EAAG,QAAO;EAAe,WAAU;YACjC,oBAAC,WAAD;GACM;GACA;GACA;GACA;GACE;GACN,aAAa;GACb,WAAU;EACF;CACT,IACH,oBAAC,QAAD,YACE,qBAAC,UAAD;EACE,IAAG;EACH,GAAE;EACF,GAAE;EACF,OAAM;EACN,QAAO;EACP,aAAY;EACZ,2BAA0B;YAP5B;GASE,oBAAC,WAAD;IAAS,cAAa;IAAI,QAAO;GAA8B;GAC/D,oBAAC,WAAD;IACE,MAAK;IACL,IAAG;IACH,KAAI;IACJ,QAAO;GACC;GACV,oBAAC,kBAAD;IACE,cAAa;IACb,QAAO;GACQ;EACX;IACJ,EACH"}
@@ -1 +1 @@
1
- {"version":3,"file":"dynamic.mjs","names":["StaticDetail"],"sources":["../../../../src/components/Popover/dynamic.tsx"],"sourcesContent":["'use client';\n\nimport type { FC } from 'react';\nimport { useLayoutEffect, useRef, useState } from 'react';\nimport {\n type DetailProps,\n type PopoverProps,\n PopoverStatic,\n type PopoverType,\n Detail as StaticDetail,\n} from './static';\n\n/**\n * Popover Component (Client-side)\n *\n * Client-side wrapper around the static Popover component.\n * Reuses the server-side compatible implementation.\n *\n * @param props - Popover component props\n * @returns Trigger container with popover functionality\n */\nconst PopoverComponent: FC<PopoverProps> = (props) => {\n return <PopoverStatic {...props} />;\n};\n\n/**\n * Popover Detail Component (Client-side)\n *\n * Client-side wrapper around the static Detail component that adds automatic\n * positioning logic based on viewport constraints.\n *\n * Features:\n * - Reuses server-side compatible static Detail component\n * - Adds automatic positioning adjustment based on viewport\n * - Calculates optimal X/Y alignment to prevent overflow\n * - Dynamically adjusts max-width based on available space\n * - Listens to window resize and scroll events\n *\n * @param props - Popover Detail component props\n * @returns Positioned popover content with animations and accessibility\n */\nconst Detail: FC<DetailProps> = ({\n xAlign = 'start',\n yAlign = 'below',\n ...props\n}) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [computedXAlign, setComputedXAlign] = useState(xAlign);\n const [computedYAlign, setComputedYAlign] = useState(yAlign);\n const [maxWidth, setMaxWidth] = useState<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n const adjustPosition = () => {\n if (!popoverRef.current) return;\n\n const popoverElement = popoverRef.current;\n const triggerElement = document.getElementById(\n `unrollable-panel-button-${props.identifier}`\n );\n\n if (!triggerElement) return;\n\n const triggerRect = triggerElement.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const gap = 16; // 1rem gap\n const padding = 16; // Additional padding from viewport edges\n\n // Calculate maximum width based on viewport and trigger position\n const maxWidthFromLeft = viewportWidth - triggerRect.left - padding;\n const maxWidthFromRight = triggerRect.right - padding;\n\n // Use the larger space to ensure popover can fit\n const absoluteMaxWidth = Math.max(maxWidthFromLeft, maxWidthFromRight);\n\n setMaxWidth(absoluteMaxWidth);\n\n // Force a layout calculation by temporarily making visible if needed\n const wasInvisible = popoverElement.classList.contains('invisible');\n if (wasInvisible) {\n popoverElement.style.visibility = 'hidden';\n popoverElement.classList.remove('invisible');\n }\n\n // Small delay to ensure max-width is applied and content reflows\n requestAnimationFrame(() => {\n const popoverRect = popoverElement.getBoundingClientRect();\n\n // Restore invisible state if it was invisible\n if (wasInvisible) {\n popoverElement.style.visibility = '';\n popoverElement.classList.add('invisible');\n }\n\n // Determine optimal Y alignment\n let newYAlign = yAlign;\n const spaceBelow = viewportHeight - triggerRect.bottom - gap;\n const spaceAbove = triggerRect.top - gap;\n\n if (yAlign === 'below' && spaceBelow < popoverRect.height) {\n // Not enough space below, try above\n if (spaceAbove >= popoverRect.height) {\n newYAlign = 'above';\n }\n } else if (yAlign === 'above' && spaceAbove < popoverRect.height) {\n // Not enough space above, try below\n if (spaceBelow >= popoverRect.height) {\n newYAlign = 'below';\n }\n }\n\n // Determine optimal X alignment\n let newXAlign = xAlign;\n const spaceRight = viewportWidth - triggerRect.left - padding;\n const spaceLeft = triggerRect.right - padding;\n\n if (xAlign === 'start' && spaceRight < popoverRect.width) {\n // Not enough space on the right, try left\n if (spaceLeft >= popoverRect.width) {\n newXAlign = 'end';\n }\n } else if (xAlign === 'end' && spaceLeft < popoverRect.width) {\n // Not enough space on the left, try right\n if (spaceRight >= popoverRect.width) {\n newXAlign = 'start';\n }\n }\n\n setComputedYAlign(newYAlign);\n setComputedXAlign(newXAlign);\n });\n };\n\n // Adjust position with a slight delay to ensure DOM is ready\n const timeoutId = setTimeout(adjustPosition, 0);\n\n // Listen to mouse enter on the trigger to recalculate\n const triggerElement = document.getElementById(\n `unrollable-panel-button-${props.identifier}`\n );\n\n if (triggerElement) {\n triggerElement.addEventListener('mouseenter', adjustPosition);\n triggerElement.addEventListener('focusin', adjustPosition);\n }\n\n // Use ResizeObserver to detect popover content size changes\n const resizeObserver = new ResizeObserver(() => {\n adjustPosition();\n });\n\n if (popoverRef.current) {\n resizeObserver.observe(popoverRef.current);\n }\n\n window.addEventListener('resize', adjustPosition);\n window.addEventListener('scroll', adjustPosition, true);\n\n return () => {\n clearTimeout(timeoutId);\n if (triggerElement) {\n triggerElement.removeEventListener('mouseenter', adjustPosition);\n triggerElement.removeEventListener('focusin', adjustPosition);\n }\n resizeObserver.disconnect();\n window.removeEventListener('resize', adjustPosition);\n window.removeEventListener('scroll', adjustPosition, true);\n };\n }, [props.identifier, xAlign, yAlign]);\n\n // Use the static Detail component with computed alignment values\n return (\n <StaticDetail\n {...props}\n xAlign={computedXAlign}\n yAlign={computedYAlign}\n ref={popoverRef}\n style={{\n ...props.style,\n maxWidth: maxWidth ? `${maxWidth}px` : undefined,\n }}\n />\n );\n};\n\n// Create Popover with Detail attached\nexport const Popover: PopoverType = PopoverComponent as PopoverType;\n\nPopover.Detail = Detail;\n"],"mappings":";;;;;;;;;;;;;;;;AAqBA,MAAM,oBAAsC,UAAU;AACpD,QAAO,oBAAC,eAAD,EAAe,GAAI,OAAS;;;;;;;;;;;;;;;;;;AAmBrC,MAAM,UAA2B,EAC/B,SAAS,SACT,SAAS,SACT,GAAG,YACC;CACJ,MAAM,aAAa,OAAuB,KAAK;CAC/C,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,OAAO;CAC5D,MAAM,CAAC,gBAAgB,qBAAqB,SAAS,OAAO;CAC5D,MAAM,CAAC,UAAU,eAAe,SAA6B,OAAU;AAEvE,uBAAsB;EACpB,MAAM,uBAAuB;AAC3B,OAAI,CAAC,WAAW,QAAS;GAEzB,MAAM,iBAAiB,WAAW;GAClC,MAAM,iBAAiB,SAAS,eAC9B,2BAA2B,MAAM,aAClC;AAED,OAAI,CAAC,eAAgB;GAErB,MAAM,cAAc,eAAe,uBAAuB;GAC1D,MAAM,gBAAgB,OAAO;GAC7B,MAAM,iBAAiB,OAAO;GAC9B,MAAM,MAAM;GACZ,MAAM,UAAU;GAGhB,MAAM,mBAAmB,gBAAgB,YAAY,OAAO;GAC5D,MAAM,oBAAoB,YAAY,QAAQ;AAK9C,eAFyB,KAAK,IAAI,kBAAkB,kBAExB,CAAC;GAG7B,MAAM,eAAe,eAAe,UAAU,SAAS,YAAY;AACnE,OAAI,cAAc;AAChB,mBAAe,MAAM,aAAa;AAClC,mBAAe,UAAU,OAAO,YAAY;;AAI9C,+BAA4B;IAC1B,MAAM,cAAc,eAAe,uBAAuB;AAG1D,QAAI,cAAc;AAChB,oBAAe,MAAM,aAAa;AAClC,oBAAe,UAAU,IAAI,YAAY;;IAI3C,IAAI,YAAY;IAChB,MAAM,aAAa,iBAAiB,YAAY,SAAS;IACzD,MAAM,aAAa,YAAY,MAAM;AAErC,QAAI,WAAW,WAAW,aAAa,YAAY,QAEjD;SAAI,cAAc,YAAY,OAC5B,aAAY;eAEL,WAAW,WAAW,aAAa,YAAY,QAExD;SAAI,cAAc,YAAY,OAC5B,aAAY;;IAKhB,IAAI,YAAY;IAChB,MAAM,aAAa,gBAAgB,YAAY,OAAO;IACtD,MAAM,YAAY,YAAY,QAAQ;AAEtC,QAAI,WAAW,WAAW,aAAa,YAAY,OAEjD;SAAI,aAAa,YAAY,MAC3B,aAAY;eAEL,WAAW,SAAS,YAAY,YAAY,OAErD;SAAI,cAAc,YAAY,MAC5B,aAAY;;AAIhB,sBAAkB,UAAU;AAC5B,sBAAkB,UAAU;KAC5B;;EAIJ,MAAM,YAAY,WAAW,gBAAgB,EAAE;EAG/C,MAAM,iBAAiB,SAAS,eAC9B,2BAA2B,MAAM,aAClC;AAED,MAAI,gBAAgB;AAClB,kBAAe,iBAAiB,cAAc,eAAe;AAC7D,kBAAe,iBAAiB,WAAW,eAAe;;EAI5D,MAAM,iBAAiB,IAAI,qBAAqB;AAC9C,mBAAgB;IAChB;AAEF,MAAI,WAAW,QACb,gBAAe,QAAQ,WAAW,QAAQ;AAG5C,SAAO,iBAAiB,UAAU,eAAe;AACjD,SAAO,iBAAiB,UAAU,gBAAgB,KAAK;AAEvD,eAAa;AACX,gBAAa,UAAU;AACvB,OAAI,gBAAgB;AAClB,mBAAe,oBAAoB,cAAc,eAAe;AAChE,mBAAe,oBAAoB,WAAW,eAAe;;AAE/D,kBAAe,YAAY;AAC3B,UAAO,oBAAoB,UAAU,eAAe;AACpD,UAAO,oBAAoB,UAAU,gBAAgB,KAAK;;IAE3D;EAAC,MAAM;EAAY;EAAQ;EAAO,CAAC;AAGtC,QACE,oBAACA,UAAD;EACE,GAAI;EACJ,QAAQ;EACR,QAAQ;EACR,KAAK;EACL,OAAO;GACL,GAAG,MAAM;GACT,UAAU,WAAW,GAAG,SAAS,MAAM;GACxC;EACD;;AAKN,MAAa,UAAuB;AAEpC,QAAQ,SAAS"}
1
+ {"version":3,"file":"dynamic.mjs","names":["StaticDetail"],"sources":["../../../../src/components/Popover/dynamic.tsx"],"sourcesContent":["'use client';\n\nimport type { FC } from 'react';\nimport { useLayoutEffect, useRef, useState } from 'react';\nimport {\n type DetailProps,\n type PopoverProps,\n PopoverStatic,\n type PopoverType,\n Detail as StaticDetail,\n} from './static';\n\n/**\n * Popover Component (Client-side)\n *\n * Client-side wrapper around the static Popover component.\n * Reuses the server-side compatible implementation.\n *\n * @param props - Popover component props\n * @returns Trigger container with popover functionality\n */\nconst PopoverComponent: FC<PopoverProps> = (props) => {\n return <PopoverStatic {...props} />;\n};\n\n/**\n * Popover Detail Component (Client-side)\n *\n * Client-side wrapper around the static Detail component that adds automatic\n * positioning logic based on viewport constraints.\n *\n * Features:\n * - Reuses server-side compatible static Detail component\n * - Adds automatic positioning adjustment based on viewport\n * - Calculates optimal X/Y alignment to prevent overflow\n * - Dynamically adjusts max-width based on available space\n * - Listens to window resize and scroll events\n *\n * @param props - Popover Detail component props\n * @returns Positioned popover content with animations and accessibility\n */\nconst Detail: FC<DetailProps> = ({\n xAlign = 'start',\n yAlign = 'below',\n ...props\n}) => {\n const popoverRef = useRef<HTMLDivElement>(null);\n const [computedXAlign, setComputedXAlign] = useState(xAlign);\n const [computedYAlign, setComputedYAlign] = useState(yAlign);\n const [maxWidth, setMaxWidth] = useState<number | undefined>(undefined);\n\n useLayoutEffect(() => {\n const adjustPosition = () => {\n if (!popoverRef.current) return;\n\n const popoverElement = popoverRef.current;\n const triggerElement = document.getElementById(\n `unrollable-panel-button-${props.identifier}`\n );\n\n if (!triggerElement) return;\n\n const triggerRect = triggerElement.getBoundingClientRect();\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const gap = 16; // 1rem gap\n const padding = 16; // Additional padding from viewport edges\n\n // Calculate maximum width based on viewport and trigger position\n const maxWidthFromLeft = viewportWidth - triggerRect.left - padding;\n const maxWidthFromRight = triggerRect.right - padding;\n\n // Use the larger space to ensure popover can fit\n const absoluteMaxWidth = Math.max(maxWidthFromLeft, maxWidthFromRight);\n\n setMaxWidth(absoluteMaxWidth);\n\n // Force a layout calculation by temporarily making visible if needed\n const wasInvisible = popoverElement.classList.contains('invisible');\n if (wasInvisible) {\n popoverElement.style.visibility = 'hidden';\n popoverElement.classList.remove('invisible');\n }\n\n // Small delay to ensure max-width is applied and content reflows\n requestAnimationFrame(() => {\n const popoverRect = popoverElement.getBoundingClientRect();\n\n // Restore invisible state if it was invisible\n if (wasInvisible) {\n popoverElement.style.visibility = '';\n popoverElement.classList.add('invisible');\n }\n\n // Determine optimal Y alignment\n let newYAlign = yAlign;\n const spaceBelow = viewportHeight - triggerRect.bottom - gap;\n const spaceAbove = triggerRect.top - gap;\n\n if (yAlign === 'below' && spaceBelow < popoverRect.height) {\n // Not enough space below, try above\n if (spaceAbove >= popoverRect.height) {\n newYAlign = 'above';\n }\n } else if (yAlign === 'above' && spaceAbove < popoverRect.height) {\n // Not enough space above, try below\n if (spaceBelow >= popoverRect.height) {\n newYAlign = 'below';\n }\n }\n\n // Determine optimal X alignment\n let newXAlign = xAlign;\n const spaceRight = viewportWidth - triggerRect.left - padding;\n const spaceLeft = triggerRect.right - padding;\n\n if (xAlign === 'start' && spaceRight < popoverRect.width) {\n // Not enough space on the right, try left\n if (spaceLeft >= popoverRect.width) {\n newXAlign = 'end';\n }\n } else if (xAlign === 'end' && spaceLeft < popoverRect.width) {\n // Not enough space on the left, try right\n if (spaceRight >= popoverRect.width) {\n newXAlign = 'start';\n }\n }\n\n setComputedYAlign(newYAlign);\n setComputedXAlign(newXAlign);\n });\n };\n\n // Adjust position with a slight delay to ensure DOM is ready\n const timeoutId = setTimeout(adjustPosition, 0);\n\n // Listen to mouse enter on the trigger to recalculate\n const triggerElement = document.getElementById(\n `unrollable-panel-button-${props.identifier}`\n );\n\n if (triggerElement) {\n triggerElement.addEventListener('mouseenter', adjustPosition);\n triggerElement.addEventListener('focusin', adjustPosition);\n }\n\n // Use ResizeObserver to detect popover content size changes\n const resizeObserver = new ResizeObserver(() => {\n adjustPosition();\n });\n\n if (popoverRef.current) {\n resizeObserver.observe(popoverRef.current);\n }\n\n window.addEventListener('resize', adjustPosition);\n window.addEventListener('scroll', adjustPosition, true);\n\n return () => {\n clearTimeout(timeoutId);\n if (triggerElement) {\n triggerElement.removeEventListener('mouseenter', adjustPosition);\n triggerElement.removeEventListener('focusin', adjustPosition);\n }\n resizeObserver.disconnect();\n window.removeEventListener('resize', adjustPosition);\n window.removeEventListener('scroll', adjustPosition, true);\n };\n }, [props.identifier, xAlign, yAlign]);\n\n // Use the static Detail component with computed alignment values\n return (\n <StaticDetail\n {...props}\n xAlign={computedXAlign}\n yAlign={computedYAlign}\n ref={popoverRef}\n style={{\n ...props.style,\n maxWidth: maxWidth ? `${maxWidth}px` : undefined,\n }}\n />\n );\n};\n\n// Create Popover with Detail attached\nexport const Popover: PopoverType = PopoverComponent as PopoverType;\n\nPopover.Detail = Detail;\n"],"mappings":"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"}