@intlayer/design-system 9.4.3 → 9.5.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 (724) hide show
  1. package/README.md +0 -2
  2. package/dist/esm/api/useAuth/useOAuth2.mjs +1 -1
  3. package/dist/esm/api/useAuth/useSession.mjs +2 -2
  4. package/dist/esm/components/Badge/index.mjs +2 -4
  5. package/dist/esm/components/Badge/index.mjs.map +1 -1
  6. package/dist/esm/components/Breadcrumb/index.mjs +0 -4
  7. package/dist/esm/components/Breadcrumb/index.mjs.map +1 -1
  8. package/dist/esm/components/Button/Button.mjs +2 -7
  9. package/dist/esm/components/Button/Button.mjs.map +1 -1
  10. package/dist/esm/components/Container/index.mjs +0 -2
  11. package/dist/esm/components/Container/index.mjs.map +1 -1
  12. package/dist/esm/components/CopyButton/index.mjs +1 -1
  13. package/dist/esm/components/CopyButton/index.mjs.map +1 -1
  14. package/dist/esm/components/IDE/MarkDownRender.mjs +1 -1
  15. package/dist/esm/components/Input/Checkbox.mjs +0 -2
  16. package/dist/esm/components/Input/Checkbox.mjs.map +1 -1
  17. package/dist/esm/components/Input/Radio.mjs +0 -2
  18. package/dist/esm/components/Input/Radio.mjs.map +1 -1
  19. package/dist/esm/components/Link/Link.mjs +4 -28
  20. package/dist/esm/components/Link/Link.mjs.map +1 -1
  21. package/dist/esm/components/Navbar/DesktopNavbar.mjs +1 -1
  22. package/dist/esm/components/Navbar/DesktopNavbar.mjs.map +1 -1
  23. package/dist/esm/components/Navbar/MobileNavbar.mjs +14 -3
  24. package/dist/esm/components/Navbar/MobileNavbar.mjs.map +1 -1
  25. package/dist/esm/components/Navbar/index.mjs +22 -15
  26. package/dist/esm/components/Navbar/index.mjs.map +1 -1
  27. package/dist/esm/components/Pagination/Pagination.mjs +0 -2
  28. package/dist/esm/components/Pagination/Pagination.mjs.map +1 -1
  29. package/dist/esm/components/Pattern/GridDistortionPattern.mjs +1 -1
  30. package/dist/esm/components/Status/index.mjs +1 -1
  31. package/dist/esm/components/SwitchSelector/SwitchSelector.mjs +1 -5
  32. package/dist/esm/components/SwitchSelector/SwitchSelector.mjs.map +1 -1
  33. package/dist/esm/components/SwitchSelector/VerticalSwitchSelector.mjs +2 -6
  34. package/dist/esm/components/SwitchSelector/VerticalSwitchSelector.mjs.map +1 -1
  35. package/dist/esm/components/TabSelector/TabSelector.mjs +2 -6
  36. package/dist/esm/components/TabSelector/TabSelector.mjs.map +1 -1
  37. package/dist/esm/components/Table/Table.mjs +1 -1
  38. package/dist/esm/components/Table/Table.mjs.map +1 -1
  39. package/dist/esm/components/Tag/index.mjs +0 -1
  40. package/dist/esm/components/Tag/index.mjs.map +1 -1
  41. package/dist/esm/hooks/index.mjs +2 -1
  42. package/dist/esm/hooks/useDevice.mjs +105 -37
  43. package/dist/esm/hooks/useDevice.mjs.map +1 -1
  44. package/dist/esm/hooks/useListKeyboardNavigation.mjs +73 -0
  45. package/dist/esm/hooks/useListKeyboardNavigation.mjs.map +1 -0
  46. package/dist/esm/routes.mjs +123 -122
  47. package/dist/esm/routes.mjs.map +1 -1
  48. package/dist/types/api/hooks/ai.d.ts +10 -11
  49. package/dist/types/api/hooks/ai.d.ts.map +1 -1
  50. package/dist/types/api/hooks/analytics.d.ts +3 -4
  51. package/dist/types/api/hooks/analytics.d.ts.map +1 -1
  52. package/dist/types/api/hooks/asset.d.ts +5 -6
  53. package/dist/types/api/hooks/asset.d.ts.map +1 -1
  54. package/dist/types/api/hooks/audit.d.ts +3 -4
  55. package/dist/types/api/hooks/audit.d.ts.map +1 -1
  56. package/dist/types/api/hooks/auth.d.ts +25 -26
  57. package/dist/types/api/hooks/auth.d.ts.map +1 -1
  58. package/dist/types/api/hooks/bitbucket.d.ts +4 -5
  59. package/dist/types/api/hooks/bitbucket.d.ts.map +1 -1
  60. package/dist/types/api/hooks/dictionary.d.ts +8 -9
  61. package/dist/types/api/hooks/dictionary.d.ts.map +1 -1
  62. package/dist/types/api/hooks/discussions.d.ts +2 -3
  63. package/dist/types/api/hooks/discussions.d.ts.map +1 -1
  64. package/dist/types/api/hooks/editor.d.ts +2 -3
  65. package/dist/types/api/hooks/editor.d.ts.map +1 -1
  66. package/dist/types/api/hooks/environment.d.ts +6 -7
  67. package/dist/types/api/hooks/environment.d.ts.map +1 -1
  68. package/dist/types/api/hooks/github.d.ts +6 -7
  69. package/dist/types/api/hooks/github.d.ts.map +1 -1
  70. package/dist/types/api/hooks/gitlab.d.ts +4 -5
  71. package/dist/types/api/hooks/gitlab.d.ts.map +1 -1
  72. package/dist/types/api/hooks/newsletter.d.ts +3 -4
  73. package/dist/types/api/hooks/newsletter.d.ts.map +1 -1
  74. package/dist/types/api/hooks/organization.d.ts +11 -12
  75. package/dist/types/api/hooks/organization.d.ts.map +1 -1
  76. package/dist/types/api/hooks/project.d.ts +18 -19
  77. package/dist/types/api/hooks/project.d.ts.map +1 -1
  78. package/dist/types/api/hooks/reviewer.d.ts +21 -22
  79. package/dist/types/api/hooks/reviewer.d.ts.map +1 -1
  80. package/dist/types/api/hooks/search.d.ts +1 -2
  81. package/dist/types/api/hooks/search.d.ts.map +1 -1
  82. package/dist/types/api/hooks/showcaseProject.d.ts +8 -9
  83. package/dist/types/api/hooks/showcaseProject.d.ts.map +1 -1
  84. package/dist/types/api/hooks/stripe.d.ts +24 -25
  85. package/dist/types/api/hooks/stripe.d.ts.map +1 -1
  86. package/dist/types/api/hooks/tag.d.ts +4 -5
  87. package/dist/types/api/hooks/tag.d.ts.map +1 -1
  88. package/dist/types/api/hooks/translate.d.ts +4 -5
  89. package/dist/types/api/hooks/translate.d.ts.map +1 -1
  90. package/dist/types/api/hooks/user.d.ts +6 -7
  91. package/dist/types/api/hooks/user.d.ts.map +1 -1
  92. package/dist/types/api/hooks/utils.d.ts +2 -3
  93. package/dist/types/api/hooks/utils.d.ts.map +1 -1
  94. package/dist/types/api/useAuth/useAuth.d.ts +1 -2
  95. package/dist/types/api/useAuth/useAuth.d.ts.map +1 -1
  96. package/dist/types/api/useAuth/useOAuth2.d.ts +2 -3
  97. package/dist/types/api/useAuth/useOAuth2.d.ts.map +1 -1
  98. package/dist/types/api/useAuth/useSession.d.ts +2 -3
  99. package/dist/types/api/useAuth/useSession.d.ts.map +1 -1
  100. package/dist/types/api/useIntlayerAPI.d.ts +25 -26
  101. package/dist/types/api/useIntlayerAPI.d.ts.map +1 -1
  102. package/dist/types/api/useUser/index.d.ts +1 -2
  103. package/dist/types/api/useUser/index.d.ts.map +1 -1
  104. package/dist/types/components/Accordion/Accordion.d.ts +2 -3
  105. package/dist/types/components/Accordion/Accordion.d.ts.map +1 -1
  106. package/dist/types/components/Avatar/image.d.ts +2 -3
  107. package/dist/types/components/Avatar/image.d.ts.map +1 -1
  108. package/dist/types/components/Avatar/index.d.ts +3 -4
  109. package/dist/types/components/Avatar/index.d.ts.map +1 -1
  110. package/dist/types/components/Badge/index.d.ts +8 -9
  111. package/dist/types/components/Badge/index.d.ts.map +1 -1
  112. package/dist/types/components/Breadcrumb/breadcrumb.content.d.ts +2 -2
  113. package/dist/types/components/Breadcrumb/breadcrumb.content.d.ts.map +1 -1
  114. package/dist/types/components/Breadcrumb/index.d.ts +3 -4
  115. package/dist/types/components/Breadcrumb/index.d.ts.map +1 -1
  116. package/dist/types/components/Browser/Browser.content.d.ts +2 -2
  117. package/dist/types/components/Browser/Browser.content.d.ts.map +1 -1
  118. package/dist/types/components/Browser/Browser.d.ts +2 -3
  119. package/dist/types/components/Browser/Browser.d.ts.map +1 -1
  120. package/dist/types/components/Browser/extractUrlFromSitemap.d.ts +1 -2
  121. package/dist/types/components/Browser/extractUrlFromSitemap.d.ts.map +1 -1
  122. package/dist/types/components/Button/Button.d.ts +8 -9
  123. package/dist/types/components/Button/Button.d.ts.map +1 -1
  124. package/dist/types/components/Carousel/index.d.ts +1 -2
  125. package/dist/types/components/Carousel/index.d.ts.map +1 -1
  126. package/dist/types/components/ClickOutsideDiv/index.d.ts +2 -3
  127. package/dist/types/components/ClickOutsideDiv/index.d.ts.map +1 -1
  128. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts +2 -3
  129. package/dist/types/components/CollapsibleTable/CollapsibleTable.d.ts.map +1 -1
  130. package/dist/types/components/Command/index.d.ts +2 -3
  131. package/dist/types/components/Command/index.d.ts.map +1 -1
  132. package/dist/types/components/Container/index.d.ts +11 -12
  133. package/dist/types/components/Container/index.d.ts.map +1 -1
  134. package/dist/types/components/ContentEditor/ContentEditor.d.ts +2 -3
  135. package/dist/types/components/ContentEditor/ContentEditor.d.ts.map +1 -1
  136. package/dist/types/components/ContentEditor/ContentEditorInput.d.ts +2 -3
  137. package/dist/types/components/ContentEditor/ContentEditorInput.d.ts.map +1 -1
  138. package/dist/types/components/ContentEditor/ContentEditorTextArea.d.ts +2 -3
  139. package/dist/types/components/ContentEditor/ContentEditorTextArea.d.ts.map +1 -1
  140. package/dist/types/components/ContentSelector/ContentSelector.d.ts +1 -2
  141. package/dist/types/components/ContentSelector/ContentSelector.d.ts.map +1 -1
  142. package/dist/types/components/CopyButton/CopyButton.content.d.ts +2 -2
  143. package/dist/types/components/CopyButton/CopyButton.content.d.ts.map +1 -1
  144. package/dist/types/components/CopyButton/index.d.ts +2 -3
  145. package/dist/types/components/CopyButton/index.d.ts.map +1 -1
  146. package/dist/types/components/CopyToClipboard/index.d.ts +3 -4
  147. package/dist/types/components/CopyToClipboard/index.d.ts.map +1 -1
  148. package/dist/types/components/DictionaryEditor/DictionaryEditor.d.ts +1 -2
  149. package/dist/types/components/DictionaryEditor/DictionaryEditor.d.ts.map +1 -1
  150. package/dist/types/components/DictionaryEditor/ItemLayout.d.ts +1 -2
  151. package/dist/types/components/DictionaryEditor/ItemLayout.d.ts.map +1 -1
  152. package/dist/types/components/DictionaryEditor/NodeWrapper/ArrayWrapper.d.ts +1 -2
  153. package/dist/types/components/DictionaryEditor/NodeWrapper/ArrayWrapper.d.ts.map +1 -1
  154. package/dist/types/components/DictionaryEditor/NodeWrapper/BooleanWrapper.d.ts +2 -3
  155. package/dist/types/components/DictionaryEditor/NodeWrapper/BooleanWrapper.d.ts.map +1 -1
  156. package/dist/types/components/DictionaryEditor/NodeWrapper/ConditionWrapper.d.ts +1 -2
  157. package/dist/types/components/DictionaryEditor/NodeWrapper/ConditionWrapper.d.ts.map +1 -1
  158. package/dist/types/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.d.ts +1 -2
  159. package/dist/types/components/DictionaryEditor/NodeWrapper/EnumerationWrapper.d.ts.map +1 -1
  160. package/dist/types/components/DictionaryEditor/NodeWrapper/FileWrapper.d.ts +1 -2
  161. package/dist/types/components/DictionaryEditor/NodeWrapper/FileWrapper.d.ts.map +1 -1
  162. package/dist/types/components/DictionaryEditor/NodeWrapper/HtmlWrapper.d.ts +1 -2
  163. package/dist/types/components/DictionaryEditor/NodeWrapper/HtmlWrapper.d.ts.map +1 -1
  164. package/dist/types/components/DictionaryEditor/NodeWrapper/InsertionWrapper.d.ts +1 -2
  165. package/dist/types/components/DictionaryEditor/NodeWrapper/InsertionWrapper.d.ts.map +1 -1
  166. package/dist/types/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.d.ts +1 -2
  167. package/dist/types/components/DictionaryEditor/NodeWrapper/MarkdownWrapper.d.ts.map +1 -1
  168. package/dist/types/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.d.ts +1 -2
  169. package/dist/types/components/DictionaryEditor/NodeWrapper/NestedObjectWrapper.d.ts.map +1 -1
  170. package/dist/types/components/DictionaryEditor/NodeWrapper/NumberWrapper.d.ts +2 -3
  171. package/dist/types/components/DictionaryEditor/NodeWrapper/NumberWrapper.d.ts.map +1 -1
  172. package/dist/types/components/DictionaryEditor/NodeWrapper/PluralWrapper.d.ts +1 -2
  173. package/dist/types/components/DictionaryEditor/NodeWrapper/PluralWrapper.d.ts.map +1 -1
  174. package/dist/types/components/DictionaryEditor/NodeWrapper/SelectWrapper.d.ts +1 -2
  175. package/dist/types/components/DictionaryEditor/NodeWrapper/SelectWrapper.d.ts.map +1 -1
  176. package/dist/types/components/DictionaryEditor/NodeWrapper/StringWrapper.d.ts +2 -3
  177. package/dist/types/components/DictionaryEditor/NodeWrapper/StringWrapper.d.ts.map +1 -1
  178. package/dist/types/components/DictionaryEditor/NodeWrapper/TranslationWrapper.d.ts +1 -2
  179. package/dist/types/components/DictionaryEditor/NodeWrapper/TranslationWrapper.d.ts.map +1 -1
  180. package/dist/types/components/DictionaryEditor/NodeWrapper/index.d.ts +3 -4
  181. package/dist/types/components/DictionaryEditor/NodeWrapper/index.d.ts.map +1 -1
  182. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.d.ts +1 -2
  183. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/SafeHtmlRenderer.d.ts.map +1 -1
  184. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts +4 -5
  185. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/TextEditor.d.ts.map +1 -1
  186. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/object.d.ts +2 -3
  187. package/dist/types/components/DictionaryFieldEditor/ContentEditorView/object.d.ts.map +1 -1
  188. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.d.ts +1 -2
  189. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.d.ts.map +1 -1
  190. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts +2 -2
  191. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.d.ts.map +1 -1
  192. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.d.ts +2 -2
  193. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.d.ts.map +1 -1
  194. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.d.ts +4 -5
  195. package/dist/types/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.d.ts.map +1 -1
  196. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.d.ts +1 -2
  197. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.d.ts.map +1 -1
  198. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts +2 -2
  199. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.d.ts.map +1 -1
  200. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.d.ts +2 -3
  201. package/dist/types/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.d.ts.map +1 -1
  202. package/dist/types/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts +1 -2
  203. package/dist/types/components/DictionaryFieldEditor/DictionaryFieldEditor.d.ts.map +1 -1
  204. package/dist/types/components/DictionaryFieldEditor/EnumKeyInput.d.ts +1 -2
  205. package/dist/types/components/DictionaryFieldEditor/EnumKeyInput.d.ts.map +1 -1
  206. package/dist/types/components/DictionaryFieldEditor/JSONEditor.d.ts +1 -2
  207. package/dist/types/components/DictionaryFieldEditor/JSONEditor.d.ts.map +1 -1
  208. package/dist/types/components/DictionaryFieldEditor/KeyPathBreadcrumb.d.ts +1 -2
  209. package/dist/types/components/DictionaryFieldEditor/KeyPathBreadcrumb.d.ts.map +1 -1
  210. package/dist/types/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.d.ts +3 -4
  211. package/dist/types/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.d.ts.map +1 -1
  212. package/dist/types/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.d.ts +2 -2
  213. package/dist/types/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.d.ts.map +1 -1
  214. package/dist/types/components/DictionaryFieldEditor/NodeEditor.d.ts +2 -3
  215. package/dist/types/components/DictionaryFieldEditor/NodeEditor.d.ts.map +1 -1
  216. package/dist/types/components/DictionaryFieldEditor/NodeTypeSelector.d.ts +1 -2
  217. package/dist/types/components/DictionaryFieldEditor/NodeTypeSelector.d.ts.map +1 -1
  218. package/dist/types/components/DictionaryFieldEditor/SaveForm/SaveForm.d.ts +1 -2
  219. package/dist/types/components/DictionaryFieldEditor/SaveForm/SaveForm.d.ts.map +1 -1
  220. package/dist/types/components/DictionaryFieldEditor/SaveForm/saveForm.content.d.ts +2 -2
  221. package/dist/types/components/DictionaryFieldEditor/SaveForm/saveForm.content.d.ts.map +1 -1
  222. package/dist/types/components/DictionaryFieldEditor/StructureEditor.d.ts +1 -2
  223. package/dist/types/components/DictionaryFieldEditor/StructureEditor.d.ts.map +1 -1
  224. package/dist/types/components/DictionaryFieldEditor/StructureView/StructureView.d.ts +3 -4
  225. package/dist/types/components/DictionaryFieldEditor/StructureView/StructureView.d.ts.map +1 -1
  226. package/dist/types/components/DictionaryFieldEditor/StructureView/structureView.content.d.ts +2 -2
  227. package/dist/types/components/DictionaryFieldEditor/StructureView/structureView.content.d.ts.map +1 -1
  228. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.d.ts +2 -3
  229. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.d.ts.map +1 -1
  230. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.d.ts +2 -3
  231. package/dist/types/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.d.ts.map +1 -1
  232. package/dist/types/components/DictionaryFieldEditor/dictionaryFieldEditor.content.d.ts +2 -2
  233. package/dist/types/components/DictionaryFieldEditor/dictionaryFieldEditor.content.d.ts.map +1 -1
  234. package/dist/types/components/DictionaryFieldEditor/getIsEditableSection.d.ts +1 -2
  235. package/dist/types/components/DictionaryFieldEditor/getIsEditableSection.d.ts.map +1 -1
  236. package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts +2 -2
  237. package/dist/types/components/DictionaryFieldEditor/nodeTypeSelector.content.d.ts.map +1 -1
  238. package/dist/types/components/DropDown/index.d.ts +7 -8
  239. package/dist/types/components/DropDown/index.d.ts.map +1 -1
  240. package/dist/types/components/EditableField/EditableFieldInput.d.ts +1 -2
  241. package/dist/types/components/EditableField/EditableFieldInput.d.ts.map +1 -1
  242. package/dist/types/components/EditableField/EditableFieldLayout.d.ts +1 -2
  243. package/dist/types/components/EditableField/EditableFieldLayout.d.ts.map +1 -1
  244. package/dist/types/components/EditableField/EditableFieldTextArea.d.ts +1 -2
  245. package/dist/types/components/EditableField/EditableFieldTextArea.d.ts.map +1 -1
  246. package/dist/types/components/ExpandCollapse/ExpandCollapse.d.ts +2 -3
  247. package/dist/types/components/ExpandCollapse/ExpandCollapse.d.ts.map +1 -1
  248. package/dist/types/components/Flags/Flag.d.ts +1 -2
  249. package/dist/types/components/Flags/Flag.d.ts.map +1 -1
  250. package/dist/types/components/Flags/flags.d.ts +305 -305
  251. package/dist/types/components/Flags/flags.d.ts.map +1 -1
  252. package/dist/types/components/Footer/index.d.ts +3 -4
  253. package/dist/types/components/Footer/index.d.ts.map +1 -1
  254. package/dist/types/components/Form/Form.d.ts +1 -2
  255. package/dist/types/components/Form/Form.d.ts.map +1 -1
  256. package/dist/types/components/Form/FormBase.d.ts +2 -3
  257. package/dist/types/components/Form/FormBase.d.ts.map +1 -1
  258. package/dist/types/components/Form/FormControl.d.ts +1 -2
  259. package/dist/types/components/Form/FormControl.d.ts.map +1 -1
  260. package/dist/types/components/Form/FormDescription.d.ts +1 -2
  261. package/dist/types/components/Form/FormDescription.d.ts.map +1 -1
  262. package/dist/types/components/Form/FormField.d.ts +2 -3
  263. package/dist/types/components/Form/FormField.d.ts.map +1 -1
  264. package/dist/types/components/Form/FormItem.d.ts +2 -3
  265. package/dist/types/components/Form/FormItem.d.ts.map +1 -1
  266. package/dist/types/components/Form/FormLabel.d.ts +1 -2
  267. package/dist/types/components/Form/FormLabel.d.ts.map +1 -1
  268. package/dist/types/components/Form/FormMessage.d.ts +1 -2
  269. package/dist/types/components/Form/FormMessage.d.ts.map +1 -1
  270. package/dist/types/components/Form/elements/AutoSizeTextAreaElement.d.ts +1 -2
  271. package/dist/types/components/Form/elements/AutoSizeTextAreaElement.d.ts.map +1 -1
  272. package/dist/types/components/Form/elements/CheckboxElement.d.ts +1 -2
  273. package/dist/types/components/Form/elements/CheckboxElement.d.ts.map +1 -1
  274. package/dist/types/components/Form/elements/EditableFieldInputElement.d.ts +1 -2
  275. package/dist/types/components/Form/elements/EditableFieldInputElement.d.ts.map +1 -1
  276. package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts +1 -2
  277. package/dist/types/components/Form/elements/EditableFieldTextAreaElement.d.ts.map +1 -1
  278. package/dist/types/components/Form/elements/FormElement.d.ts +2 -3
  279. package/dist/types/components/Form/elements/FormElement.d.ts.map +1 -1
  280. package/dist/types/components/Form/elements/FormElementWrapper.d.ts +1 -2
  281. package/dist/types/components/Form/elements/FormElementWrapper.d.ts.map +1 -1
  282. package/dist/types/components/Form/elements/InputElement.d.ts +1 -2
  283. package/dist/types/components/Form/elements/InputElement.d.ts.map +1 -1
  284. package/dist/types/components/Form/elements/InputPasswordElement.d.ts +1 -2
  285. package/dist/types/components/Form/elements/InputPasswordElement.d.ts.map +1 -1
  286. package/dist/types/components/Form/elements/MultiselectElement.d.ts +1 -2
  287. package/dist/types/components/Form/elements/MultiselectElement.d.ts.map +1 -1
  288. package/dist/types/components/Form/elements/OTPElement.d.ts +1 -2
  289. package/dist/types/components/Form/elements/OTPElement.d.ts.map +1 -1
  290. package/dist/types/components/Form/elements/SearchInputElement.d.ts +1 -2
  291. package/dist/types/components/Form/elements/SearchInputElement.d.ts.map +1 -1
  292. package/dist/types/components/Form/elements/SelectElement.d.ts +1 -2
  293. package/dist/types/components/Form/elements/SelectElement.d.ts.map +1 -1
  294. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts +1 -2
  295. package/dist/types/components/Form/elements/SwitchSelectorElement.d.ts.map +1 -1
  296. package/dist/types/components/Form/elements/TextAreaElement.d.ts +1 -2
  297. package/dist/types/components/Form/elements/TextAreaElement.d.ts.map +1 -1
  298. package/dist/types/components/Form/layout/FormItemLayout.d.ts +2 -3
  299. package/dist/types/components/Form/layout/FormItemLayout.d.ts.map +1 -1
  300. package/dist/types/components/Form/layout/FormLabelLayout.d.ts +2 -3
  301. package/dist/types/components/Form/layout/FormLabelLayout.d.ts.map +1 -1
  302. package/dist/types/components/Form/layout/RequiredStar.d.ts +1 -2
  303. package/dist/types/components/Form/layout/RequiredStar.d.ts.map +1 -1
  304. package/dist/types/components/HTMLRender/HTMLRender.d.ts +2 -3
  305. package/dist/types/components/HTMLRender/HTMLRender.d.ts.map +1 -1
  306. package/dist/types/components/Headers/index.d.ts +7 -8
  307. package/dist/types/components/Headers/index.d.ts.map +1 -1
  308. package/dist/types/components/HeightResizer/index.d.ts +1 -2
  309. package/dist/types/components/HeightResizer/index.d.ts.map +1 -1
  310. package/dist/types/components/HideShow/index.d.ts +2 -3
  311. package/dist/types/components/HideShow/index.d.ts.map +1 -1
  312. package/dist/types/components/IDE/Code.d.ts +2 -3
  313. package/dist/types/components/IDE/Code.d.ts.map +1 -1
  314. package/dist/types/components/IDE/CodeBlockClient.d.ts +6 -6
  315. package/dist/types/components/IDE/CodeBlockClient.d.ts.map +1 -1
  316. package/dist/types/components/IDE/CodeBlockHighlight.d.ts +1 -2
  317. package/dist/types/components/IDE/CodeBlockHighlight.d.ts.map +1 -1
  318. package/dist/types/components/IDE/CodeBlockServer.d.ts +3 -4
  319. package/dist/types/components/IDE/CodeBlockServer.d.ts.map +1 -1
  320. package/dist/types/components/IDE/CodeBlockShiki.d.ts +2 -3
  321. package/dist/types/components/IDE/CodeBlockShiki.d.ts.map +1 -1
  322. package/dist/types/components/IDE/CodeConditionalRenderer.d.ts +1 -2
  323. package/dist/types/components/IDE/CodeConditionalRenderer.d.ts.map +1 -1
  324. package/dist/types/components/IDE/CodeContext.d.ts +6 -7
  325. package/dist/types/components/IDE/CodeContext.d.ts.map +1 -1
  326. package/dist/types/components/IDE/CodeFormatSelector.d.ts +1 -2
  327. package/dist/types/components/IDE/CodeFormatSelector.d.ts.map +1 -1
  328. package/dist/types/components/IDE/ContentDeclarationFormatSelector.d.ts +1 -2
  329. package/dist/types/components/IDE/ContentDeclarationFormatSelector.d.ts.map +1 -1
  330. package/dist/types/components/IDE/CopyCode.d.ts +1 -2
  331. package/dist/types/components/IDE/CopyCode.d.ts.map +1 -1
  332. package/dist/types/components/IDE/FileList.d.ts +2 -3
  333. package/dist/types/components/IDE/FileList.d.ts.map +1 -1
  334. package/dist/types/components/IDE/FileTree.d.ts +1 -2
  335. package/dist/types/components/IDE/FileTree.d.ts.map +1 -1
  336. package/dist/types/components/IDE/IDE.d.ts +2 -3
  337. package/dist/types/components/IDE/IDE.d.ts.map +1 -1
  338. package/dist/types/components/IDE/MarkDownRender.d.ts +1 -2
  339. package/dist/types/components/IDE/MarkDownRender.d.ts.map +1 -1
  340. package/dist/types/components/IDE/MonacoCode.d.ts +1 -2
  341. package/dist/types/components/IDE/MonacoCode.d.ts.map +1 -1
  342. package/dist/types/components/IDE/PackageManagerSelector.d.ts +1 -2
  343. package/dist/types/components/IDE/PackageManagerSelector.d.ts.map +1 -1
  344. package/dist/types/components/IDE/codeTransformer.d.ts +4 -5
  345. package/dist/types/components/IDE/codeTransformer.d.ts.map +1 -1
  346. package/dist/types/components/IDE/createFileTree.d.ts +2 -3
  347. package/dist/types/components/IDE/createFileTree.d.ts.map +1 -1
  348. package/dist/types/components/IDE/shikiBundle.d.ts +9 -10
  349. package/dist/types/components/IDE/shikiBundle.d.ts.map +1 -1
  350. package/dist/types/components/IDE/shikiLanguages.d.ts +11 -12
  351. package/dist/types/components/IDE/shikiLanguages.d.ts.map +1 -1
  352. package/dist/types/components/IDE/shikiThemes.d.ts +3 -4
  353. package/dist/types/components/IDE/shikiThemes.d.ts.map +1 -1
  354. package/dist/types/components/InformationTag/index.d.ts +1 -2
  355. package/dist/types/components/InformationTag/index.d.ts.map +1 -1
  356. package/dist/types/components/Input/Checkbox.d.ts +6 -7
  357. package/dist/types/components/Input/Checkbox.d.ts.map +1 -1
  358. package/dist/types/components/Input/Input.d.ts +5 -6
  359. package/dist/types/components/Input/Input.d.ts.map +1 -1
  360. package/dist/types/components/Input/InputPassword.d.ts +1 -2
  361. package/dist/types/components/Input/InputPassword.d.ts.map +1 -1
  362. package/dist/types/components/Input/OTPInput.d.ts +13 -14
  363. package/dist/types/components/Input/OTPInput.d.ts.map +1 -1
  364. package/dist/types/components/Input/Radio.d.ts +6 -7
  365. package/dist/types/components/Input/Radio.d.ts.map +1 -1
  366. package/dist/types/components/Input/SearchInput.d.ts +1 -2
  367. package/dist/types/components/Input/SearchInput.d.ts.map +1 -1
  368. package/dist/types/components/KeyboardScreenAdapter/index.d.ts +1 -2
  369. package/dist/types/components/KeyboardScreenAdapter/index.d.ts.map +1 -1
  370. package/dist/types/components/KeyboardShortcut/KeyboardShortcut.d.ts +4 -5
  371. package/dist/types/components/KeyboardShortcut/KeyboardShortcut.d.ts.map +1 -1
  372. package/dist/types/components/Label/index.d.ts +2 -3
  373. package/dist/types/components/Label/index.d.ts.map +1 -1
  374. package/dist/types/components/LanguageBackground/LanguageBackground.d.ts +1 -2
  375. package/dist/types/components/LanguageBackground/LanguageBackground.d.ts.map +1 -1
  376. package/dist/types/components/LanguageBackground/LanguageSection.d.ts +2 -3
  377. package/dist/types/components/LanguageBackground/LanguageSection.d.ts.map +1 -1
  378. package/dist/types/components/Link/Link.d.ts +11 -12
  379. package/dist/types/components/Link/Link.d.ts.map +1 -1
  380. package/dist/types/components/Loader/index.content.d.ts +2 -2
  381. package/dist/types/components/Loader/index.content.d.ts.map +1 -1
  382. package/dist/types/components/Loader/index.d.ts +2 -3
  383. package/dist/types/components/Loader/index.d.ts.map +1 -1
  384. package/dist/types/components/Loader/spinner.d.ts +1 -2
  385. package/dist/types/components/Loader/spinner.d.ts.map +1 -1
  386. package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.d.ts +2 -3
  387. package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.d.ts.map +1 -1
  388. package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.d.ts +2 -3
  389. package/dist/types/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.d.ts.map +1 -1
  390. package/dist/types/components/LocaleSwitcherDropDown/LocaleSwitcher.d.ts +2 -3
  391. package/dist/types/components/LocaleSwitcherDropDown/LocaleSwitcher.d.ts.map +1 -1
  392. package/dist/types/components/Logo/Logo.d.ts +2 -3
  393. package/dist/types/components/Logo/Logo.d.ts.map +1 -1
  394. package/dist/types/components/Logo/LogoTextOnly.d.ts +1 -2
  395. package/dist/types/components/Logo/LogoTextOnly.d.ts.map +1 -1
  396. package/dist/types/components/Logo/LogoWithText.d.ts +1 -2
  397. package/dist/types/components/Logo/LogoWithText.d.ts.map +1 -1
  398. package/dist/types/components/Logo/LogoWithTextBelow.d.ts +2 -3
  399. package/dist/types/components/Logo/LogoWithTextBelow.d.ts.map +1 -1
  400. package/dist/types/components/MarkDownRender/MarkDownIframe.d.ts +1 -2
  401. package/dist/types/components/MarkDownRender/MarkDownIframe.d.ts.map +1 -1
  402. package/dist/types/components/MarkDownRender/MarkDownRender.d.ts +4 -4
  403. package/dist/types/components/MarkDownRender/MarkDownRender.d.ts.map +1 -1
  404. package/dist/types/components/MarkdownEditor/MarkdownEditor.d.ts +2 -3
  405. package/dist/types/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  406. package/dist/types/components/MarkdownEditor/extensions.d.ts +1 -2
  407. package/dist/types/components/MarkdownEditor/extensions.d.ts.map +1 -1
  408. package/dist/types/components/MarkdownEditor/generative/AICompletionCommands.d.ts +2 -3
  409. package/dist/types/components/MarkdownEditor/generative/AICompletionCommands.d.ts.map +1 -1
  410. package/dist/types/components/MarkdownEditor/generative/AISelector.d.ts +2 -3
  411. package/dist/types/components/MarkdownEditor/generative/AISelector.d.ts.map +1 -1
  412. package/dist/types/components/MarkdownEditor/generative/AISelectorCommands.d.ts +2 -3
  413. package/dist/types/components/MarkdownEditor/generative/AISelectorCommands.d.ts.map +1 -1
  414. package/dist/types/components/MarkdownEditor/generative/GenerativeMenuSwitch.d.ts +2 -3
  415. package/dist/types/components/MarkdownEditor/generative/GenerativeMenuSwitch.d.ts.map +1 -1
  416. package/dist/types/components/MarkdownEditor/generative/useAICompletion.d.ts +3 -4
  417. package/dist/types/components/MarkdownEditor/generative/useAICompletion.d.ts.map +1 -1
  418. package/dist/types/components/MarkdownEditor/imageUpload.d.ts +3 -4
  419. package/dist/types/components/MarkdownEditor/imageUpload.d.ts.map +1 -1
  420. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble-item.d.ts +2 -2
  421. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble-item.d.ts.map +1 -1
  422. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble.d.ts +3 -3
  423. package/dist/types/components/MarkdownEditor/novel/components/editor-bubble.d.ts.map +1 -1
  424. package/dist/types/components/MarkdownEditor/novel/components/editor-command-item.d.ts +3 -3
  425. package/dist/types/components/MarkdownEditor/novel/components/editor-command-item.d.ts.map +1 -1
  426. package/dist/types/components/MarkdownEditor/novel/components/editor-command.d.ts +4 -5
  427. package/dist/types/components/MarkdownEditor/novel/components/editor-command.d.ts.map +1 -1
  428. package/dist/types/components/MarkdownEditor/novel/components/editor.d.ts +4 -5
  429. package/dist/types/components/MarkdownEditor/novel/components/editor.d.ts.map +1 -1
  430. package/dist/types/components/MarkdownEditor/novel/extensions/ai-highlight.d.ts +6 -7
  431. package/dist/types/components/MarkdownEditor/novel/extensions/ai-highlight.d.ts.map +1 -1
  432. package/dist/types/components/MarkdownEditor/novel/extensions/code-block-shiki.d.ts +2 -3
  433. package/dist/types/components/MarkdownEditor/novel/extensions/code-block-shiki.d.ts.map +1 -1
  434. package/dist/types/components/MarkdownEditor/novel/extensions/image-resizer.d.ts +1 -2
  435. package/dist/types/components/MarkdownEditor/novel/extensions/image-resizer.d.ts.map +1 -1
  436. package/dist/types/components/MarkdownEditor/novel/extensions/slash-command.d.ts +4 -4
  437. package/dist/types/components/MarkdownEditor/novel/extensions/slash-command.d.ts.map +1 -1
  438. package/dist/types/components/MarkdownEditor/novel/plugins/upload-images.d.ts +6 -7
  439. package/dist/types/components/MarkdownEditor/novel/plugins/upload-images.d.ts.map +1 -1
  440. package/dist/types/components/MarkdownEditor/novel/utils/atoms.d.ts +4 -5
  441. package/dist/types/components/MarkdownEditor/novel/utils/atoms.d.ts.map +1 -1
  442. package/dist/types/components/MarkdownEditor/novel/utils/index.d.ts +4 -5
  443. package/dist/types/components/MarkdownEditor/novel/utils/index.d.ts.map +1 -1
  444. package/dist/types/components/MarkdownEditor/selectors/ColorSelector.d.ts +2 -3
  445. package/dist/types/components/MarkdownEditor/selectors/ColorSelector.d.ts.map +1 -1
  446. package/dist/types/components/MarkdownEditor/selectors/LinkSelector.d.ts +1 -2
  447. package/dist/types/components/MarkdownEditor/selectors/LinkSelector.d.ts.map +1 -1
  448. package/dist/types/components/MarkdownEditor/selectors/NodeSelector.d.ts +2 -3
  449. package/dist/types/components/MarkdownEditor/selectors/NodeSelector.d.ts.map +1 -1
  450. package/dist/types/components/MarkdownEditor/selectors/TextButtons.d.ts +1 -2
  451. package/dist/types/components/MarkdownEditor/selectors/TextButtons.d.ts.map +1 -1
  452. package/dist/types/components/MarkdownEditor/slashCommand.d.ts +2 -3
  453. package/dist/types/components/MarkdownEditor/slashCommand.d.ts.map +1 -1
  454. package/dist/types/components/MaxHeightSmoother/index.d.ts +1 -2
  455. package/dist/types/components/MaxHeightSmoother/index.d.ts.map +1 -1
  456. package/dist/types/components/MaxWidthSmoother/index.d.ts +1 -2
  457. package/dist/types/components/MaxWidthSmoother/index.d.ts.map +1 -1
  458. package/dist/types/components/Modal/Modal.d.ts +2 -3
  459. package/dist/types/components/Modal/Modal.d.ts.map +1 -1
  460. package/dist/types/components/Navbar/Burger.d.ts +1 -2
  461. package/dist/types/components/Navbar/Burger.d.ts.map +1 -1
  462. package/dist/types/components/Navbar/DesktopNavbar.d.ts +1 -2
  463. package/dist/types/components/Navbar/DesktopNavbar.d.ts.map +1 -1
  464. package/dist/types/components/Navbar/MobileNavbar.d.ts +8 -2
  465. package/dist/types/components/Navbar/MobileNavbar.d.ts.map +1 -1
  466. package/dist/types/components/Navbar/index.d.ts +2 -2
  467. package/dist/types/components/Navbar/index.d.ts.map +1 -1
  468. package/dist/types/components/Navbar/useNavigation.d.ts +1 -2
  469. package/dist/types/components/Navbar/useNavigation.d.ts.map +1 -1
  470. package/dist/types/components/Pagination/NumberItemsSelector.d.ts +2 -3
  471. package/dist/types/components/Pagination/NumberItemsSelector.d.ts.map +1 -1
  472. package/dist/types/components/Pagination/Pagination.d.ts +6 -7
  473. package/dist/types/components/Pagination/Pagination.d.ts.map +1 -1
  474. package/dist/types/components/Pagination/ShowingResultsNumberItems.d.ts +2 -3
  475. package/dist/types/components/Pagination/ShowingResultsNumberItems.d.ts.map +1 -1
  476. package/dist/types/components/Pattern/DotPattern.d.ts +1 -2
  477. package/dist/types/components/Pattern/DotPattern.d.ts.map +1 -1
  478. package/dist/types/components/Pattern/GridDistortionPattern.d.ts +1 -2
  479. package/dist/types/components/Pattern/GridDistortionPattern.d.ts.map +1 -1
  480. package/dist/types/components/Pattern/GridPattern.d.ts +1 -2
  481. package/dist/types/components/Pattern/GridPattern.d.ts.map +1 -1
  482. package/dist/types/components/Pattern/SpotLight.d.ts +1 -2
  483. package/dist/types/components/Pattern/SpotLight.d.ts.map +1 -1
  484. package/dist/types/components/Popover/dynamic.d.ts +1 -2
  485. package/dist/types/components/Popover/dynamic.d.ts.map +1 -1
  486. package/dist/types/components/Popover/static.d.ts +8 -8
  487. package/dist/types/components/Popover/static.d.ts.map +1 -1
  488. package/dist/types/components/PressableSpan/PressableSpan.d.ts +1 -2
  489. package/dist/types/components/PressableSpan/PressableSpan.d.ts.map +1 -1
  490. package/dist/types/components/RightDrawer/RightDrawer.d.ts +1 -2
  491. package/dist/types/components/RightDrawer/RightDrawer.d.ts.map +1 -1
  492. package/dist/types/components/RightDrawer/isElementAtTopAndNotCovered.d.ts +1 -2
  493. package/dist/types/components/RightDrawer/isElementAtTopAndNotCovered.d.ts.map +1 -1
  494. package/dist/types/components/RightDrawer/useRightDrawer.d.ts +4 -5
  495. package/dist/types/components/RightDrawer/useRightDrawer.d.ts.map +1 -1
  496. package/dist/types/components/Select/Multiselect.d.ts +1 -2
  497. package/dist/types/components/Select/Multiselect.d.ts.map +1 -1
  498. package/dist/types/components/Select/Select.d.ts +5 -6
  499. package/dist/types/components/Select/Select.d.ts.map +1 -1
  500. package/dist/types/components/SocialNetworks/DiscordLogo.d.ts +1 -2
  501. package/dist/types/components/SocialNetworks/DiscordLogo.d.ts.map +1 -1
  502. package/dist/types/components/SocialNetworks/FacebookLogo.d.ts +1 -2
  503. package/dist/types/components/SocialNetworks/FacebookLogo.d.ts.map +1 -1
  504. package/dist/types/components/SocialNetworks/InstagramLogo.d.ts +1 -2
  505. package/dist/types/components/SocialNetworks/InstagramLogo.d.ts.map +1 -1
  506. package/dist/types/components/SocialNetworks/ProductHuntLogo.d.ts +1 -2
  507. package/dist/types/components/SocialNetworks/ProductHuntLogo.d.ts.map +1 -1
  508. package/dist/types/components/SocialNetworks/TiktokLogo.d.ts +1 -2
  509. package/dist/types/components/SocialNetworks/TiktokLogo.d.ts.map +1 -1
  510. package/dist/types/components/SocialNetworks/XLogo.d.ts +1 -2
  511. package/dist/types/components/SocialNetworks/XLogo.d.ts.map +1 -1
  512. package/dist/types/components/SocialNetworks/YoutubeLogo.d.ts +1 -2
  513. package/dist/types/components/SocialNetworks/YoutubeLogo.d.ts.map +1 -1
  514. package/dist/types/components/SocialNetworks/index.d.ts +2 -2
  515. package/dist/types/components/SocialNetworks/index.d.ts.map +1 -1
  516. package/dist/types/components/Status/index.d.ts +1 -2
  517. package/dist/types/components/Status/index.d.ts.map +1 -1
  518. package/dist/types/components/Steps/index.d.ts +2 -3
  519. package/dist/types/components/Steps/index.d.ts.map +1 -1
  520. package/dist/types/components/Steps/steps.content.d.ts +2 -2
  521. package/dist/types/components/Steps/steps.content.d.ts.map +1 -1
  522. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts +13 -14
  523. package/dist/types/components/SwitchSelector/SwitchSelector.d.ts.map +1 -1
  524. package/dist/types/components/SwitchSelector/VerticalSwitchSelector.d.ts +3 -4
  525. package/dist/types/components/SwitchSelector/VerticalSwitchSelector.d.ts.map +1 -1
  526. package/dist/types/components/SwitchSelector/useSwitchSelector.d.ts +1 -2
  527. package/dist/types/components/SwitchSelector/useSwitchSelector.d.ts.map +1 -1
  528. package/dist/types/components/Tab/Tab.d.ts +3 -4
  529. package/dist/types/components/Tab/Tab.d.ts.map +1 -1
  530. package/dist/types/components/Tab/TabContext.d.ts +3 -4
  531. package/dist/types/components/Tab/TabContext.d.ts.map +1 -1
  532. package/dist/types/components/TabSelector/TabSelector.d.ts +5 -6
  533. package/dist/types/components/TabSelector/TabSelector.d.ts.map +1 -1
  534. package/dist/types/components/Table/ExpandButton.d.ts +1 -2
  535. package/dist/types/components/Table/ExpandButton.d.ts.map +1 -1
  536. package/dist/types/components/Table/SmartTable.d.ts +1 -2
  537. package/dist/types/components/Table/SmartTable.d.ts.map +1 -1
  538. package/dist/types/components/Table/Table.d.ts +2 -3
  539. package/dist/types/components/Table/Table.d.ts.map +1 -1
  540. package/dist/types/components/Table/TableElements.d.ts +4 -5
  541. package/dist/types/components/Table/TableElements.d.ts.map +1 -1
  542. package/dist/types/components/Table/useTableWidths.d.ts +1 -2
  543. package/dist/types/components/Table/useTableWidths.d.ts.map +1 -1
  544. package/dist/types/components/Tag/index.d.ts +7 -8
  545. package/dist/types/components/Tag/index.d.ts.map +1 -1
  546. package/dist/types/components/TechLogo/TechLogo.d.ts +2 -3
  547. package/dist/types/components/TechLogo/TechLogo.d.ts.map +1 -1
  548. package/dist/types/components/TechLogo/logos/Adonis.d.ts +1 -2
  549. package/dist/types/components/TechLogo/logos/Adonis.d.ts.map +1 -1
  550. package/dist/types/components/TechLogo/logos/Angular.d.ts +1 -2
  551. package/dist/types/components/TechLogo/logos/Angular.d.ts.map +1 -1
  552. package/dist/types/components/TechLogo/logos/Anthropic.d.ts +1 -2
  553. package/dist/types/components/TechLogo/logos/Anthropic.d.ts.map +1 -1
  554. package/dist/types/components/TechLogo/logos/Astro.d.ts +1 -2
  555. package/dist/types/components/TechLogo/logos/Astro.d.ts.map +1 -1
  556. package/dist/types/components/TechLogo/logos/Atlassian.d.ts +1 -2
  557. package/dist/types/components/TechLogo/logos/Atlassian.d.ts.map +1 -1
  558. package/dist/types/components/TechLogo/logos/Bitbucket.d.ts +1 -2
  559. package/dist/types/components/TechLogo/logos/Bitbucket.d.ts.map +1 -1
  560. package/dist/types/components/TechLogo/logos/ChatGPT.d.ts +1 -2
  561. package/dist/types/components/TechLogo/logos/ChatGPT.d.ts.map +1 -1
  562. package/dist/types/components/TechLogo/logos/Claude.d.ts +1 -2
  563. package/dist/types/components/TechLogo/logos/Claude.d.ts.map +1 -1
  564. package/dist/types/components/TechLogo/logos/DeepSeek.d.ts +1 -2
  565. package/dist/types/components/TechLogo/logos/DeepSeek.d.ts.map +1 -1
  566. package/dist/types/components/TechLogo/logos/Elysia.d.ts +1 -2
  567. package/dist/types/components/TechLogo/logos/Elysia.d.ts.map +1 -1
  568. package/dist/types/components/TechLogo/logos/Express.d.ts +1 -2
  569. package/dist/types/components/TechLogo/logos/Express.d.ts.map +1 -1
  570. package/dist/types/components/TechLogo/logos/Fastify.d.ts +1 -2
  571. package/dist/types/components/TechLogo/logos/Fastify.d.ts.map +1 -1
  572. package/dist/types/components/TechLogo/logos/Gemini.d.ts +1 -2
  573. package/dist/types/components/TechLogo/logos/Gemini.d.ts.map +1 -1
  574. package/dist/types/components/TechLogo/logos/GitHub.d.ts +1 -2
  575. package/dist/types/components/TechLogo/logos/GitHub.d.ts.map +1 -1
  576. package/dist/types/components/TechLogo/logos/GitLab.d.ts +1 -2
  577. package/dist/types/components/TechLogo/logos/GitLab.d.ts.map +1 -1
  578. package/dist/types/components/TechLogo/logos/Google.d.ts +1 -2
  579. package/dist/types/components/TechLogo/logos/Google.d.ts.map +1 -1
  580. package/dist/types/components/TechLogo/logos/GoogleAI.d.ts +1 -2
  581. package/dist/types/components/TechLogo/logos/GoogleAI.d.ts.map +1 -1
  582. package/dist/types/components/TechLogo/logos/Grok.d.ts +1 -2
  583. package/dist/types/components/TechLogo/logos/Grok.d.ts.map +1 -1
  584. package/dist/types/components/TechLogo/logos/HTMX.d.ts +1 -2
  585. package/dist/types/components/TechLogo/logos/HTMX.d.ts.map +1 -1
  586. package/dist/types/components/TechLogo/logos/Hono.d.ts +1 -2
  587. package/dist/types/components/TechLogo/logos/Hono.d.ts.map +1 -1
  588. package/dist/types/components/TechLogo/logos/LinkedIn.d.ts +1 -2
  589. package/dist/types/components/TechLogo/logos/LinkedIn.d.ts.map +1 -1
  590. package/dist/types/components/TechLogo/logos/Lit.d.ts +1 -2
  591. package/dist/types/components/TechLogo/logos/Lit.d.ts.map +1 -1
  592. package/dist/types/components/TechLogo/logos/Lynx.d.ts +1 -2
  593. package/dist/types/components/TechLogo/logos/Lynx.d.ts.map +1 -1
  594. package/dist/types/components/TechLogo/logos/Microsoft.d.ts +1 -2
  595. package/dist/types/components/TechLogo/logos/Microsoft.d.ts.map +1 -1
  596. package/dist/types/components/TechLogo/logos/Mistral.d.ts +1 -2
  597. package/dist/types/components/TechLogo/logos/Mistral.d.ts.map +1 -1
  598. package/dist/types/components/TechLogo/logos/NestJS.d.ts +1 -2
  599. package/dist/types/components/TechLogo/logos/NestJS.d.ts.map +1 -1
  600. package/dist/types/components/TechLogo/logos/Nextjs.d.ts +1 -2
  601. package/dist/types/components/TechLogo/logos/Nextjs.d.ts.map +1 -1
  602. package/dist/types/components/TechLogo/logos/Node.d.ts +1 -2
  603. package/dist/types/components/TechLogo/logos/Node.d.ts.map +1 -1
  604. package/dist/types/components/TechLogo/logos/Nuxt.d.ts +1 -2
  605. package/dist/types/components/TechLogo/logos/Nuxt.d.ts.map +1 -1
  606. package/dist/types/components/TechLogo/logos/Ollama.d.ts +1 -2
  607. package/dist/types/components/TechLogo/logos/Ollama.d.ts.map +1 -1
  608. package/dist/types/components/TechLogo/logos/OpenAI.d.ts +1 -2
  609. package/dist/types/components/TechLogo/logos/OpenAI.d.ts.map +1 -1
  610. package/dist/types/components/TechLogo/logos/Perplexity.d.ts +1 -2
  611. package/dist/types/components/TechLogo/logos/Perplexity.d.ts.map +1 -1
  612. package/dist/types/components/TechLogo/logos/Preact.d.ts +1 -2
  613. package/dist/types/components/TechLogo/logos/Preact.d.ts.map +1 -1
  614. package/dist/types/components/TechLogo/logos/Reactjs.d.ts +1 -2
  615. package/dist/types/components/TechLogo/logos/Reactjs.d.ts.map +1 -1
  616. package/dist/types/components/TechLogo/logos/Remix.d.ts +1 -2
  617. package/dist/types/components/TechLogo/logos/Remix.d.ts.map +1 -1
  618. package/dist/types/components/TechLogo/logos/Solid.d.ts +1 -2
  619. package/dist/types/components/TechLogo/logos/Solid.d.ts.map +1 -1
  620. package/dist/types/components/TechLogo/logos/Svelte.d.ts +1 -2
  621. package/dist/types/components/TechLogo/logos/Svelte.d.ts.map +1 -1
  622. package/dist/types/components/TechLogo/logos/Tanstack.d.ts +1 -2
  623. package/dist/types/components/TechLogo/logos/Tanstack.d.ts.map +1 -1
  624. package/dist/types/components/TechLogo/logos/Vanilla.d.ts +1 -2
  625. package/dist/types/components/TechLogo/logos/Vanilla.d.ts.map +1 -1
  626. package/dist/types/components/TechLogo/logos/Vitejs.d.ts +1 -2
  627. package/dist/types/components/TechLogo/logos/Vitejs.d.ts.map +1 -1
  628. package/dist/types/components/TechLogo/logos/Vuejs.d.ts +1 -2
  629. package/dist/types/components/TechLogo/logos/Vuejs.d.ts.map +1 -1
  630. package/dist/types/components/TechLogo/types.d.ts +1 -2
  631. package/dist/types/components/TechLogo/types.d.ts.map +1 -1
  632. package/dist/types/components/Terminal/Terminal.d.ts +2 -3
  633. package/dist/types/components/Terminal/Terminal.d.ts.map +1 -1
  634. package/dist/types/components/TextArea/AutoSizeTextArea.d.ts +2 -3
  635. package/dist/types/components/TextArea/AutoSizeTextArea.d.ts.map +1 -1
  636. package/dist/types/components/TextArea/AutocompleteTextArea.d.ts +2 -3
  637. package/dist/types/components/TextArea/AutocompleteTextArea.d.ts.map +1 -1
  638. package/dist/types/components/TextArea/ContentEditableTextArea.d.ts +4 -5
  639. package/dist/types/components/TextArea/ContentEditableTextArea.d.ts.map +1 -1
  640. package/dist/types/components/TextArea/TextArea.d.ts +2 -3
  641. package/dist/types/components/TextArea/TextArea.d.ts.map +1 -1
  642. package/dist/types/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.d.ts +1 -2
  643. package/dist/types/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.d.ts.map +1 -1
  644. package/dist/types/components/ThemeSwitcherDropDown/MobileThemeSwitcher.d.ts +1 -2
  645. package/dist/types/components/ThemeSwitcherDropDown/MobileThemeSwitcher.d.ts.map +1 -1
  646. package/dist/types/components/ThemeSwitcherDropDown/types.d.ts +1 -2
  647. package/dist/types/components/ThemeSwitcherDropDown/types.d.ts.map +1 -1
  648. package/dist/types/components/Toaster/Toast.d.ts +10 -11
  649. package/dist/types/components/Toaster/Toast.d.ts.map +1 -1
  650. package/dist/types/components/Toaster/Toaster.d.ts +1 -2
  651. package/dist/types/components/Toaster/Toaster.d.ts.map +1 -1
  652. package/dist/types/components/Toaster/useToast.d.ts +2 -2
  653. package/dist/types/components/Toaster/useToast.d.ts.map +1 -1
  654. package/dist/types/components/WithResizer/index.d.ts +1 -2
  655. package/dist/types/components/WithResizer/index.d.ts.map +1 -1
  656. package/dist/types/hooks/index.d.ts +3 -2
  657. package/dist/types/hooks/useDevice.d.ts +27 -17
  658. package/dist/types/hooks/useDevice.d.ts.map +1 -1
  659. package/dist/types/hooks/useGetElementById.d.ts +1 -2
  660. package/dist/types/hooks/useGetElementById.d.ts.map +1 -1
  661. package/dist/types/hooks/useGetElementOrWindow.d.ts +1 -2
  662. package/dist/types/hooks/useGetElementOrWindow.d.ts.map +1 -1
  663. package/dist/types/hooks/useHorizontalSwipe.d.ts +3 -4
  664. package/dist/types/hooks/useHorizontalSwipe.d.ts.map +1 -1
  665. package/dist/types/hooks/useIsMounted.d.ts +1 -2
  666. package/dist/types/hooks/useIsMounted.d.ts.map +1 -1
  667. package/dist/types/hooks/useItemSelector.d.ts +2 -3
  668. package/dist/types/hooks/useItemSelector.d.ts.map +1 -1
  669. package/dist/types/hooks/useKeyboardDetector.d.ts +1 -2
  670. package/dist/types/hooks/useKeyboardDetector.d.ts.map +1 -1
  671. package/dist/types/hooks/useListKeyboardNavigation.d.ts +31 -0
  672. package/dist/types/hooks/useListKeyboardNavigation.d.ts.map +1 -0
  673. package/dist/types/hooks/usePersistedStore.d.ts +1 -2
  674. package/dist/types/hooks/usePersistedStore.d.ts.map +1 -1
  675. package/dist/types/hooks/useScreenWidth.d.ts +1 -2
  676. package/dist/types/hooks/useScreenWidth.d.ts.map +1 -1
  677. package/dist/types/hooks/useScrollBlockage/index.d.ts +1 -2
  678. package/dist/types/hooks/useScrollBlockage/index.d.ts.map +1 -1
  679. package/dist/types/hooks/useScrollBlockage/useScrollBlockageStore.d.ts +2 -3
  680. package/dist/types/hooks/useScrollBlockage/useScrollBlockageStore.d.ts.map +1 -1
  681. package/dist/types/hooks/useScrollDetection.d.ts +1 -2
  682. package/dist/types/hooks/useScrollDetection.d.ts.map +1 -1
  683. package/dist/types/hooks/useScrollY.d.ts +1 -2
  684. package/dist/types/hooks/useScrollY.d.ts.map +1 -1
  685. package/dist/types/hooks/useSearch.d.ts +1 -2
  686. package/dist/types/hooks/useSearch.d.ts.map +1 -1
  687. package/dist/types/hooks/useStickToBottom.d.ts +2 -3
  688. package/dist/types/hooks/useStickToBottom.d.ts.map +1 -1
  689. package/dist/types/libs/auth.d.ts +2 -3
  690. package/dist/types/libs/auth.d.ts.map +1 -1
  691. package/dist/types/providers/DeferredAuthProvider.d.ts +2 -3
  692. package/dist/types/providers/DeferredAuthProvider.d.ts.map +1 -1
  693. package/dist/types/providers/ReactQueryProvider.d.ts +2 -3
  694. package/dist/types/providers/ReactQueryProvider.d.ts.map +1 -1
  695. package/dist/types/providers/ThemeProvider.d.ts +5 -6
  696. package/dist/types/providers/ThemeProvider.d.ts.map +1 -1
  697. package/dist/types/routes.d.ts +320 -320
  698. package/dist/types/routes.d.ts.map +1 -1
  699. package/dist/types/structured-data/buildAuthorJsonLd.d.ts +2 -3
  700. package/dist/types/structured-data/buildAuthorJsonLd.d.ts.map +1 -1
  701. package/dist/types/structured-data/buildBreadcrumbsJsonLd.d.ts +3 -4
  702. package/dist/types/structured-data/buildBreadcrumbsJsonLd.d.ts.map +1 -1
  703. package/dist/types/structured-data/buildCreativeWorkJsonLd.d.ts +4 -5
  704. package/dist/types/structured-data/buildCreativeWorkJsonLd.d.ts.map +1 -1
  705. package/dist/types/structured-data/buildFAQPageJsonLd.d.ts +3 -4
  706. package/dist/types/structured-data/buildFAQPageJsonLd.d.ts.map +1 -1
  707. package/dist/types/structured-data/buildItemListJsonLd.d.ts +3 -4
  708. package/dist/types/structured-data/buildItemListJsonLd.d.ts.map +1 -1
  709. package/dist/types/structured-data/buildOrganizationJsonLd.d.ts +2 -3
  710. package/dist/types/structured-data/buildOrganizationJsonLd.d.ts.map +1 -1
  711. package/dist/types/structured-data/buildProductJsonLd.d.ts +3 -4
  712. package/dist/types/structured-data/buildProductJsonLd.d.ts.map +1 -1
  713. package/dist/types/structured-data/buildSoftwareApplicationJsonLd.d.ts +2 -3
  714. package/dist/types/structured-data/buildSoftwareApplicationJsonLd.d.ts.map +1 -1
  715. package/dist/types/structured-data/buildWebsiteJsonLd.d.ts +2 -3
  716. package/dist/types/structured-data/buildWebsiteJsonLd.d.ts.map +1 -1
  717. package/dist/types/structured-data/normalizeJsonLdUrl.d.ts +2 -3
  718. package/dist/types/structured-data/normalizeJsonLdUrl.d.ts.map +1 -1
  719. package/dist/types/utils/observeScrollExtent.d.ts +1 -2
  720. package/dist/types/utils/observeScrollExtent.d.ts.map +1 -1
  721. package/dist/types/utils/scheduleFrameTask.d.ts +1 -2
  722. package/dist/types/utils/scheduleFrameTask.d.ts.map +1 -1
  723. package/package.json +55 -60
  724. package/styles/globals.css +11 -3
@@ -1 +1 @@
1
- {"version":3,"file":"Table.mjs","names":[],"sources":["../../../../src/components/Table/Table.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport { forwardRef, type HTMLAttributes } from 'react';\n\nexport interface TableProps extends HTMLAttributes<HTMLTableElement> {\n /** Enables hover states and cursor changes for interactive rows */\n isInteractive?: boolean;\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(\n ({ className, isInteractive, ...props }, ref) => (\n <table\n ref={ref}\n className={cn(\n 'w-full table-auto border-separate border-spacing-0 overflow-hidden rounded-2xl text-left text-sm',\n '[&_thead_tr:first-child_th:first-child]:rounded-tl-2xl',\n '[&_thead_tr:first-child_th:last-child]:rounded-tr-2xl',\n '[&_tbody_tr:last-child_td:first-child]:rounded-bl-2xl',\n '[&_tbody_tr:last-child_td:last-child]:rounded-br-2xl',\n 'supports-[corner-shape:squircle]:rounded-3xl',\n 'supports-[corner-shape:squircle]:[&_thead_tr:first-child_th:first-child]:rounded-tl-3xl',\n 'supports-[corner-shape:squircle]:[&_thead_tr:first-child_th:last-child]:rounded-tr-3xl',\n 'supports-[corner-shape:squircle]:[&_tbody_tr:last-child_td:first-child]:rounded-bl-3xl',\n 'supports-[corner-shape:squircle]:[&_tbody_tr:last-child_td:last-child]:rounded-br-3xl',\n isInteractive &&\n '[&_tbody_tr:hover]:bg-neutral/40 [&_tbody_tr:hover]:dark:bg-neutral-dark/40 [&_tbody_tr]:cursor-pointer [&_tbody_tr]:transition-colors',\n className\n )}\n {...props}\n />\n )\n);\n"],"mappings":";;;;;AAQA,MAAa,QAAQ,YAClB,EAAE,WAAW,eAAe,GAAG,SAAS,QACvC,oBAAC,SAAD;CACO;CACL,WAAW,GACT,oGACA,0DACA,yDACA,yDACA,wDACA,gDACA,2FACA,0FACA,0FACA,yFACA,iBACE,0IACF,SACF;CACA,GAAI;AACL,EAEL"}
1
+ {"version":3,"file":"Table.mjs","names":[],"sources":["../../../../src/components/Table/Table.tsx"],"sourcesContent":["import { cn } from '@utils/cn';\nimport { forwardRef, type HTMLAttributes } from 'react';\n\nexport interface TableProps extends HTMLAttributes<HTMLTableElement> {\n /** Enables hover states and cursor changes for interactive rows */\n isInteractive?: boolean;\n}\n\nexport const Table = forwardRef<HTMLTableElement, TableProps>(\n ({ className, isInteractive, ...props }, ref) => (\n <table\n ref={ref}\n className={cn(\n 'w-full table-auto border-separate border-spacing-0 overflow-hidden rounded-2xl text-left text-sm',\n '[&_thead_tr:first-child_th:first-child]:rounded-tl-2xl',\n '[&_thead_tr:first-child_th:last-child]:rounded-tr-2xl',\n '[&_tbody_tr:last-child_td:first-child]:rounded-bl-2xl',\n '[&_tbody_tr:last-child_td:last-child]:rounded-br-2xl',\n 'supports-[corner-shape:squircle]:rounded-3xl',\n 'supports-[corner-shape:squircle]:[&_thead_tr:first-child_th:first-child]:rounded-tl-3xl',\n 'supports-[corner-shape:squircle]:[&_thead_tr:first-child_th:last-child]:rounded-tr-3xl',\n 'supports-[corner-shape:squircle]:[&_tbody_tr:last-child_td:first-child]:rounded-bl-3xl',\n 'supports-[corner-shape:squircle]:[&_tbody_tr:last-child_td:last-child]:rounded-br-3xl',\n isInteractive &&\n '[&_tbody_tr:hover]:bg-neutral/40 [&_tbody_tr]:cursor-pointer [&_tbody_tr]:transition-colors',\n className\n )}\n {...props}\n />\n )\n);\n"],"mappings":";;;;;AAQA,MAAa,QAAQ,YAClB,EAAE,WAAW,eAAe,GAAG,SAAS,QACvC,oBAAC,SAAD;CACO;CACL,WAAW,GACT,oGACA,0DACA,yDACA,yDACA,wDACA,gDACA,2FACA,0FACA,0FACA,yFACA,iBACE,+FACF,SACF;CACA,GAAI;AACL,EAEL"}
@@ -15,7 +15,6 @@ const containerVariants = cva("w-fit backdrop-blur", {
15
15
  full: "rounded-full"
16
16
  },
17
17
  color: {
18
- primary: "border-primary bg-primary/10 text-primary",
19
18
  success: "border-success bg-success/10 text-success",
20
19
  error: "border-error bg-error/10 text-error",
21
20
  warning: "border-warning bg-warning/10 text-warning",
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/Tag/index.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport type { FC, HTMLAttributes, PropsWithChildren } from 'react';\n\n/**\n * Properties for the Tag component extending HTML div attributes and variant options\n *\n * @interface TagProps\n * @extends {PropsWithChildren<VariantProps<typeof containerVariants>>}\n * @extends {HTMLAttributes<HTMLDivElement>}\n *\n * @property {ReactNode} children - The content to display inside the tag\n * @property {TagColor} [color] - Color theme variant of the tag\n * @property {TagRoundedSize} [roundedSize] - Border radius size of the tag\n * @property {TagSize} [size] - Size variant affecting padding and font size\n * @property {TagBorder} [border] - Whether to show a border around the tag\n * @property {TagBackground} [background] - Background visibility option\n * @property [className] - Additional CSS classes for custom styling\n *\n * @example\n * ```tsx\n * // Basic tag\n * <Tag>Default Tag</Tag>\n *\n * // Success tag with border\n * <Tag color=\"success\" border=\"with\">\n * Success Status\n * </Tag>\n *\n * // Large warning tag\n * <Tag color=\"warning\" size=\"lg\">\n * Important Warning\n * </Tag>\n * ```\n */\ntype TagProps = PropsWithChildren<VariantProps<typeof containerVariants>> &\n HTMLAttributes<HTMLDivElement>;\n\n/**\n * Enumeration for tag border radius sizes\n *\n * Controls the roundedness of tag corners, from sharp edges to fully rounded pills.\n *\n * @enum TagRoundedSize\n * @property NONE - 'none' - No border radius (sharp corners)\n * @property SM - 'sm' - Small border radius (2px)\n * @property MD - 'md' - Medium border radius (6px)\n * @property LG - 'lg' - Large border radius (8px)\n * @property XL - 'xl' - Extra large border radius (12px)\n * @property XXL - '2xl' - 2x large border radius (16px)\n * @property XXXL - '3xl' - 3x large border radius (24px)\n * @property FULL - 'full' - Fully rounded (50% border radius, pill shape)\n *\n * @example\n * ```tsx\n * // Sharp corners\n * <Tag roundedSize=\"none\">Sharp Tag</Tag>\n *\n * // Pill-shaped tag\n * <Tag roundedSize=\"full\">Pill Tag</Tag>\n *\n * // Medium rounded corners\n * <Tag roundedSize=\"md\">Rounded Tag</Tag>\n * ```\n */\nexport type TagRoundedSize =\n | 'none'\n | 'sm'\n | 'md'\n | 'lg'\n | 'xl'\n | '2xl'\n | '3xl'\n | 'full';\n\n/**\n * Enumeration for tag color themes\n *\n * Provides semantic color options for different tag purposes and meanings.\n * Each color includes background, border, and text color variations.\n *\n * @enum TagColor\n * @property SUCCESS - 'success' - Green theme for positive states, success messages, or completed items\n * @property ERROR - 'error' - Red theme for error states, warnings, or failed operations\n * @property WARNING - 'warning' - Yellow/orange theme for caution, pending states, or important notices\n * @property NEUTRAL - 'neutral' - Gray theme for neutral information or secondary content\n * @property TEXT - 'text' - Default text color theme for general purpose tags\n *\n * @example\n * ```tsx\n * // Status indicators\n * <Tag color=\"success\">Completed</Tag>\n * <Tag color=\"error\">Failed</Tag>\n * <Tag color=\"warning\">Pending</Tag>\n *\n * // Category tags\n * <Tag color=\"neutral\">Category</Tag>\n * <Tag color=\"text\">General</Tag>\n * ```\n */\nexport type TagColor =\n | 'primary'\n | 'success'\n | 'error'\n | 'warning'\n | 'neutral'\n | 'text'\n | 'blue'\n | 'yellow'\n | 'green'\n | 'red'\n | 'orange'\n | 'purple'\n | 'pink'\n | 'brown'\n | 'gray'\n | 'black'\n | 'white';\n\n/**\n * Enumeration for tag size variants\n *\n * Controls the overall size of tags including padding, font size, and border thickness.\n * Sizes are designed to maintain visual hierarchy and readability.\n *\n * @enum TagSize\n * @property XS - 'xs' - Extra small (0.5rem padding, text-xs, 1.2px border)\n * @property SM - 'sm' - Small (0.5rem padding, text-sm, 1.5px border)\n * @property MD - 'md' - Medium (1rem padding, text-base, 2px border) - Default size\n * @property LG - 'lg' - Large (2rem padding, text-lg, 2px border)\n * @property XL - 'xl' - Extra large (4rem padding, text-xl, 2px border)\n *\n * @example\n * ```tsx\n * // Different sizes for hierarchy\n * <Tag size=\"xs\">Small detail</Tag>\n * <Tag size=\"sm\">Minor category</Tag>\n * <Tag size=\"md\">Standard tag</Tag>\n * <Tag size=\"lg\">Important label</Tag>\n * <Tag size=\"xl\">Hero tag</Tag>\n * ```\n */\nexport type TagSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Enumeration for tag border visibility\n *\n * Controls whether a border is displayed around the tag.\n *\n * @enum TagBorder\n * @property NONE - 'none' - No border (default)\n * @property WITH - 'with' - Show border with 1.5px thickness\n *\n * @example\n * ```tsx\n * <Tag border=\"none\">Borderless</Tag>\n * <Tag border=\"with\">With Border</Tag>\n * ```\n */\nexport type TagBorder = 'none' | 'with';\n\n/**\n * Enumeration for tag background visibility\n *\n * Controls the background styling of the tag.\n *\n * @enum TagBackground\n * @property NONE - 'none' - No background styling\n * @property WITH - 'with' - Apply background styling\n *\n * @example\n * ```tsx\n * <Tag background=\"none\">No Background</Tag>\n * <Tag background=\"with\">With Background</Tag>\n * ```\n */\nexport type TagBackground = 'none' | 'with';\n\nconst containerVariants = cva('w-fit backdrop-blur', {\n variants: {\n roundedSize: {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n [`${'xxl'}`]: 'rounded-2xl',\n [`${'xxxl'}`]: 'rounded-3xl',\n full: 'rounded-full',\n },\n color: {\n primary: 'border-primary bg-primary/10 text-primary',\n success: 'border-success bg-success/10 text-success',\n error: 'border-error bg-error/10 text-error',\n warning: 'border-warning bg-warning/10 text-warning',\n neutral: '/10 border-neutral bg-neutral/10 text-neutral',\n text: 'border-text bg-text/10 text-foreground',\n black: 'border-black bg-black/10 text-black',\n white: 'border-white bg-white/10 text-white',\n },\n size: {\n xs: 'border-[1.2px] px-2 py-0.5 text-xs',\n sm: 'border-[1.3px] px-2 py-0.5 text-sm',\n md: 'border-2 px-2 py-1 text-base',\n lg: 'border-2 px-3 py-2 text-lg',\n xl: 'border-2 px-3 py-2 text-xl',\n },\n border: {\n none: 'border-none',\n with: 'border-[1.3px] border-text',\n },\n background: {\n none: 'bg-none',\n with: '',\n },\n },\n\n defaultVariants: {\n roundedSize: 'full',\n border: 'none',\n color: 'text',\n size: 'md',\n },\n});\n\n/**\n * Tag component for displaying labels, categories, status indicators, and badges\n *\n * The Tag component is a versatile labeling element that supports multiple visual variants\n * for different use cases. It provides semantic color options, flexible sizing, and\n * customizable styling options for borders and backgrounds.\n *\n * ## Features\n * - **Semantic Colors**: Success, error, warning, neutral, and text color themes\n * - **Flexible Sizing**: Five size variants from extra small to extra large\n * - **Border Radius Options**: Eight rounding options from none to fully rounded\n * - **Border Control**: Optional borders for enhanced visual separation\n * - **Background Control**: Configurable background styling\n * - **Accessibility**: Proper HTML semantics and keyboard navigation support\n *\n * ## Use Cases\n * - **Status Indicators**: Show completion, error, or pending states\n * - **Category Labels**: Organize and categorize content\n * - **Badges**: Display counts, notifications, or achievements\n * - **Keywords**: Tag content with relevant keywords or topics\n * - **Metadata**: Show additional information like dates, authors, or types\n *\n * ## Design Principles\n * - Maintains readability across all size and color combinations\n * - Uses backdrop blur effect for subtle transparency\n * - Follows consistent spacing and typography scales\n * - Provides sufficient color contrast for accessibility\n *\n * @param {TagProps} props - The properties for the Tag component\n * @returns {JSX.Element} The rendered tag element\n *\n * @example\n * ```tsx\n * // Basic status tags\n * <Tag color=\"success\">Completed</Tag>\n * <Tag color=\"error\">Failed</Tag>\n * <Tag color=\"warning\">In Progress</Tag>\n *\n * // Category tags with borders\n * <Tag color=\"neutral\" border=\"with\">\n * Technology\n * </Tag>\n * <Tag color=\"text\" border=\"with\">\n * Design\n * </Tag>\n *\n * // Size variations for hierarchy\n * <div className=\"flex items-center gap-2\">\n * <Tag size=\"xs\" color=\"neutral\">Minor</Tag>\n * <Tag size=\"sm\" color=\"text\">Standard</Tag>\n * <Tag size=\"lg\" color=\"success\">Important</Tag>\n * </div>\n *\n * // Rounded variations\n * <div className=\"flex gap-2\">\n * <Tag roundedSize=\"none\">Sharp</Tag>\n * <Tag roundedSize=\"md\">Rounded</Tag>\n * <Tag roundedSize=\"full\">Pill</Tag>\n * </div>\n *\n * // Custom styled tag\n * <Tag\n * color=\"warning\"\n * size=\"lg\"\n * border=\"with\"\n * roundedSize=\"lg\"\n * className=\"font-bold uppercase tracking-wide\"\n * >\n * Custom Style\n * </Tag>\n *\n * // Interactive tags with click handlers\n * <Tag\n * color=\"success\"\n * onClick={() => console.log('Tag clicked')}\n * className=\"cursor-pointer hover:opacity-80 transition-opacity\"\n * >\n * Clickable Tag\n * </Tag>\n * ```\n *\n * @see {@link TagColor} - Available color theme options\n * @see {@link TagSize} - Available size variants\n * @see {@link TagRoundedSize} - Available border radius options\n * @see {@link TagBorder} - Border visibility options\n * @see {@link TagBackground} - Background styling options\n */\nexport const Tag: FC<TagProps> = ({\n children,\n color,\n roundedSize,\n size,\n border,\n background,\n className,\n ...props\n}) => {\n return (\n <div\n className={containerVariants({\n color,\n roundedSize,\n size,\n border,\n background,\n className,\n })}\n {...props}\n >\n {children}\n </div>\n );\n};\n"],"mappings":";;;;AAiLA,MAAM,oBAAoB,IAAI,uBAAuB;CACnD,UAAU;EACR,aAAa;GACX,MAAM;GACN,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;IACH,QAAa;IACb,SAAc;GACf,MAAM;EACR;EACA,OAAO;GACL,SAAS;GACT,SAAS;GACT,OAAO;GACP,SAAS;GACT,SAAS;GACT,MAAM;GACN,OAAO;GACP,OAAO;EACT;EACA,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EACN;EACA,QAAQ;GACN,MAAM;GACN,MAAM;EACR;EACA,YAAY;GACV,MAAM;GACN,MAAM;EACR;CACF;CAEA,iBAAiB;EACf,aAAa;EACb,QAAQ;EACR,OAAO;EACP,MAAM;CACR;AACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyFD,MAAa,OAAqB,EAChC,UACA,OACA,aACA,MACA,QACA,YACA,WACA,GAAG,YACC;CACJ,OACE,oBAAC,OAAD;EACE,WAAW,kBAAkB;GAC3B;GACA;GACA;GACA;GACA;GACA;EACF,CAAC;EACD,GAAI;EAEH;CACE;AAET"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../../../../src/components/Tag/index.tsx"],"sourcesContent":["import { cva, type VariantProps } from 'class-variance-authority';\nimport type { FC, HTMLAttributes, PropsWithChildren } from 'react';\n\n/**\n * Properties for the Tag component extending HTML div attributes and variant options\n *\n * @interface TagProps\n * @extends {PropsWithChildren<VariantProps<typeof containerVariants>>}\n * @extends {HTMLAttributes<HTMLDivElement>}\n *\n * @property {ReactNode} children - The content to display inside the tag\n * @property {TagColor} [color] - Color theme variant of the tag\n * @property {TagRoundedSize} [roundedSize] - Border radius size of the tag\n * @property {TagSize} [size] - Size variant affecting padding and font size\n * @property {TagBorder} [border] - Whether to show a border around the tag\n * @property {TagBackground} [background] - Background visibility option\n * @property [className] - Additional CSS classes for custom styling\n *\n * @example\n * ```tsx\n * // Basic tag\n * <Tag>Default Tag</Tag>\n *\n * // Success tag with border\n * <Tag color=\"success\" border=\"with\">\n * Success Status\n * </Tag>\n *\n * // Large warning tag\n * <Tag color=\"warning\" size=\"lg\">\n * Important Warning\n * </Tag>\n * ```\n */\ntype TagProps = PropsWithChildren<VariantProps<typeof containerVariants>> &\n HTMLAttributes<HTMLDivElement>;\n\n/**\n * Enumeration for tag border radius sizes\n *\n * Controls the roundedness of tag corners, from sharp edges to fully rounded pills.\n *\n * @enum TagRoundedSize\n * @property NONE - 'none' - No border radius (sharp corners)\n * @property SM - 'sm' - Small border radius (2px)\n * @property MD - 'md' - Medium border radius (6px)\n * @property LG - 'lg' - Large border radius (8px)\n * @property XL - 'xl' - Extra large border radius (12px)\n * @property XXL - '2xl' - 2x large border radius (16px)\n * @property XXXL - '3xl' - 3x large border radius (24px)\n * @property FULL - 'full' - Fully rounded (50% border radius, pill shape)\n *\n * @example\n * ```tsx\n * // Sharp corners\n * <Tag roundedSize=\"none\">Sharp Tag</Tag>\n *\n * // Pill-shaped tag\n * <Tag roundedSize=\"full\">Pill Tag</Tag>\n *\n * // Medium rounded corners\n * <Tag roundedSize=\"md\">Rounded Tag</Tag>\n * ```\n */\nexport type TagRoundedSize =\n | 'none'\n | 'sm'\n | 'md'\n | 'lg'\n | 'xl'\n | '2xl'\n | '3xl'\n | 'full';\n\n/**\n * Enumeration for tag color themes\n *\n * Provides semantic color options for different tag purposes and meanings.\n * Each color includes background, border, and text color variations.\n *\n * @enum TagColor\n * @property SUCCESS - 'success' - Green theme for positive states, success messages, or completed items\n * @property ERROR - 'error' - Red theme for error states, warnings, or failed operations\n * @property WARNING - 'warning' - Yellow/orange theme for caution, pending states, or important notices\n * @property NEUTRAL - 'neutral' - Gray theme for neutral information or secondary content\n * @property TEXT - 'text' - Default text color theme for general purpose tags\n *\n * @example\n * ```tsx\n * // Status indicators\n * <Tag color=\"success\">Completed</Tag>\n * <Tag color=\"error\">Failed</Tag>\n * <Tag color=\"warning\">Pending</Tag>\n *\n * // Category tags\n * <Tag color=\"neutral\">Category</Tag>\n * <Tag color=\"text\">General</Tag>\n * ```\n */\nexport type TagColor =\n | 'success'\n | 'error'\n | 'warning'\n | 'neutral'\n | 'text'\n | 'blue'\n | 'yellow'\n | 'green'\n | 'red'\n | 'orange'\n | 'purple'\n | 'pink'\n | 'brown'\n | 'gray'\n | 'black'\n | 'white';\n\n/**\n * Enumeration for tag size variants\n *\n * Controls the overall size of tags including padding, font size, and border thickness.\n * Sizes are designed to maintain visual hierarchy and readability.\n *\n * @enum TagSize\n * @property XS - 'xs' - Extra small (0.5rem padding, text-xs, 1.2px border)\n * @property SM - 'sm' - Small (0.5rem padding, text-sm, 1.5px border)\n * @property MD - 'md' - Medium (1rem padding, text-base, 2px border) - Default size\n * @property LG - 'lg' - Large (2rem padding, text-lg, 2px border)\n * @property XL - 'xl' - Extra large (4rem padding, text-xl, 2px border)\n *\n * @example\n * ```tsx\n * // Different sizes for hierarchy\n * <Tag size=\"xs\">Small detail</Tag>\n * <Tag size=\"sm\">Minor category</Tag>\n * <Tag size=\"md\">Standard tag</Tag>\n * <Tag size=\"lg\">Important label</Tag>\n * <Tag size=\"xl\">Hero tag</Tag>\n * ```\n */\nexport type TagSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Enumeration for tag border visibility\n *\n * Controls whether a border is displayed around the tag.\n *\n * @enum TagBorder\n * @property NONE - 'none' - No border (default)\n * @property WITH - 'with' - Show border with 1.5px thickness\n *\n * @example\n * ```tsx\n * <Tag border=\"none\">Borderless</Tag>\n * <Tag border=\"with\">With Border</Tag>\n * ```\n */\nexport type TagBorder = 'none' | 'with';\n\n/**\n * Enumeration for tag background visibility\n *\n * Controls the background styling of the tag.\n *\n * @enum TagBackground\n * @property NONE - 'none' - No background styling\n * @property WITH - 'with' - Apply background styling\n *\n * @example\n * ```tsx\n * <Tag background=\"none\">No Background</Tag>\n * <Tag background=\"with\">With Background</Tag>\n * ```\n */\nexport type TagBackground = 'none' | 'with';\n\nconst containerVariants = cva('w-fit backdrop-blur', {\n variants: {\n roundedSize: {\n none: 'rounded-none',\n sm: 'rounded-sm',\n md: 'rounded-md',\n lg: 'rounded-lg',\n xl: 'rounded-xl',\n [`${'xxl'}`]: 'rounded-2xl',\n [`${'xxxl'}`]: 'rounded-3xl',\n full: 'rounded-full',\n },\n color: {\n success: 'border-success bg-success/10 text-success',\n error: 'border-error bg-error/10 text-error',\n warning: 'border-warning bg-warning/10 text-warning',\n neutral: '/10 border-neutral bg-neutral/10 text-neutral',\n text: 'border-text bg-text/10 text-foreground',\n black: 'border-black bg-black/10 text-black',\n white: 'border-white bg-white/10 text-white',\n },\n size: {\n xs: 'border-[1.2px] px-2 py-0.5 text-xs',\n sm: 'border-[1.3px] px-2 py-0.5 text-sm',\n md: 'border-2 px-2 py-1 text-base',\n lg: 'border-2 px-3 py-2 text-lg',\n xl: 'border-2 px-3 py-2 text-xl',\n },\n border: {\n none: 'border-none',\n with: 'border-[1.3px] border-text',\n },\n background: {\n none: 'bg-none',\n with: '',\n },\n },\n\n defaultVariants: {\n roundedSize: 'full',\n border: 'none',\n color: 'text',\n size: 'md',\n },\n});\n\n/**\n * Tag component for displaying labels, categories, status indicators, and badges\n *\n * The Tag component is a versatile labeling element that supports multiple visual variants\n * for different use cases. It provides semantic color options, flexible sizing, and\n * customizable styling options for borders and backgrounds.\n *\n * ## Features\n * - **Semantic Colors**: Success, error, warning, neutral, and text color themes\n * - **Flexible Sizing**: Five size variants from extra small to extra large\n * - **Border Radius Options**: Eight rounding options from none to fully rounded\n * - **Border Control**: Optional borders for enhanced visual separation\n * - **Background Control**: Configurable background styling\n * - **Accessibility**: Proper HTML semantics and keyboard navigation support\n *\n * ## Use Cases\n * - **Status Indicators**: Show completion, error, or pending states\n * - **Category Labels**: Organize and categorize content\n * - **Badges**: Display counts, notifications, or achievements\n * - **Keywords**: Tag content with relevant keywords or topics\n * - **Metadata**: Show additional information like dates, authors, or types\n *\n * ## Design Principles\n * - Maintains readability across all size and color combinations\n * - Uses backdrop blur effect for subtle transparency\n * - Follows consistent spacing and typography scales\n * - Provides sufficient color contrast for accessibility\n *\n * @param {TagProps} props - The properties for the Tag component\n * @returns {JSX.Element} The rendered tag element\n *\n * @example\n * ```tsx\n * // Basic status tags\n * <Tag color=\"success\">Completed</Tag>\n * <Tag color=\"error\">Failed</Tag>\n * <Tag color=\"warning\">In Progress</Tag>\n *\n * // Category tags with borders\n * <Tag color=\"neutral\" border=\"with\">\n * Technology\n * </Tag>\n * <Tag color=\"text\" border=\"with\">\n * Design\n * </Tag>\n *\n * // Size variations for hierarchy\n * <div className=\"flex items-center gap-2\">\n * <Tag size=\"xs\" color=\"neutral\">Minor</Tag>\n * <Tag size=\"sm\" color=\"text\">Standard</Tag>\n * <Tag size=\"lg\" color=\"success\">Important</Tag>\n * </div>\n *\n * // Rounded variations\n * <div className=\"flex gap-2\">\n * <Tag roundedSize=\"none\">Sharp</Tag>\n * <Tag roundedSize=\"md\">Rounded</Tag>\n * <Tag roundedSize=\"full\">Pill</Tag>\n * </div>\n *\n * // Custom styled tag\n * <Tag\n * color=\"warning\"\n * size=\"lg\"\n * border=\"with\"\n * roundedSize=\"lg\"\n * className=\"font-bold uppercase tracking-wide\"\n * >\n * Custom Style\n * </Tag>\n *\n * // Interactive tags with click handlers\n * <Tag\n * color=\"success\"\n * onClick={() => console.log('Tag clicked')}\n * className=\"cursor-pointer hover:opacity-80 transition-opacity\"\n * >\n * Clickable Tag\n * </Tag>\n * ```\n *\n * @see {@link TagColor} - Available color theme options\n * @see {@link TagSize} - Available size variants\n * @see {@link TagRoundedSize} - Available border radius options\n * @see {@link TagBorder} - Border visibility options\n * @see {@link TagBackground} - Background styling options\n */\nexport const Tag: FC<TagProps> = ({\n children,\n color,\n roundedSize,\n size,\n border,\n background,\n className,\n ...props\n}) => {\n return (\n <div\n className={containerVariants({\n color,\n roundedSize,\n size,\n border,\n background,\n className,\n })}\n {...props}\n >\n {children}\n </div>\n );\n};\n"],"mappings":";;;;AAgLA,MAAM,oBAAoB,IAAI,uBAAuB;CACnD,UAAU;EACR,aAAa;GACX,MAAM;GACN,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;IACH,QAAa;IACb,SAAc;GACf,MAAM;EACR;EACA,OAAO;GACL,SAAS;GACT,OAAO;GACP,SAAS;GACT,SAAS;GACT,MAAM;GACN,OAAO;GACP,OAAO;EACT;EACA,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;EACN;EACA,QAAQ;GACN,MAAM;GACN,MAAM;EACR;EACA,YAAY;GACV,MAAM;GACN,MAAM;EACR;CACF;CAEA,iBAAiB;EACf,aAAa;EACb,QAAQ;EACR,OAAO;EACP,MAAM;CACR;AACF,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyFD,MAAa,OAAqB,EAChC,UACA,OACA,aACA,MACA,QACA,YACA,WACA,GAAG,YACC;CACJ,OACE,oBAAC,OAAD;EACE,WAAW,kBAAkB;GAC3B;GACA;GACA;GACA;GACA;GACA;EACF,CAAC;EACD,GAAI;EAEH;CACE;AAET"}
@@ -6,6 +6,7 @@ import { useGetElementOrWindow } from "./useGetElementOrWindow.mjs";
6
6
  import { useHorizontalSwipe } from "./useHorizontalSwipe.mjs";
7
7
  import { useIsMounted } from "./useIsMounted.mjs";
8
8
  import { useKeyboardDetector } from "./useKeyboardDetector.mjs";
9
+ import { NO_HIGHLIGHTED_INDEX, useListKeyboardNavigation } from "./useListKeyboardNavigation.mjs";
9
10
  import { useScreenWidth } from "./useScreenWidth.mjs";
10
11
  import { useScrollBlockage } from "./useScrollBlockage/index.mjs";
11
12
  import { useScrollDetection } from "./useScrollDetection.mjs";
@@ -13,4 +14,4 @@ import { useScrollY } from "./useScrollY.mjs";
13
14
  import { useSearch } from "./useSearch.mjs";
14
15
  import { useStickToBottom } from "./useStickToBottom.mjs";
15
16
 
16
- export { calculateIsMobile, checkIsIOS, checkIsIphoneOrSafariDevice, checkIsMac, checkIsMobileScreen, checkIsMobileUserAgent, getBreakpointFromSize, useDevice, useGetElementById, useGetElementOrWindow, useHorizontalSwipe, useIsMounted, useItemSelector, useKeyboardDetector, usePersistedStore, useScreenWidth, useScrollBlockage, useScrollDetection, useScrollY, useSearch, useStickToBottom };
17
+ export { NO_HIGHLIGHTED_INDEX, calculateIsMobile, checkIsIOS, checkIsIphoneOrSafariDevice, checkIsMac, checkIsMobileScreen, checkIsMobileUserAgent, getBreakpointFromSize, useDevice, useGetElementById, useGetElementOrWindow, useHorizontalSwipe, useIsMounted, useItemSelector, useKeyboardDetector, useListKeyboardNavigation, usePersistedStore, useScreenWidth, useScrollBlockage, useScrollDetection, useScrollY, useSearch, useStickToBottom };
@@ -1,19 +1,18 @@
1
1
  'use client';
2
2
 
3
- import { useEffect, useState } from "react";
3
+ import { useCallback, useSyncExternalStore } from "react";
4
4
 
5
5
  //#region src/hooks/useDevice.ts
6
- const getBreakpointFromSize = (breakpoint) => {
7
- switch (breakpoint) {
8
- case "xs": return 480;
9
- case "sm": return 640;
10
- case "md": return 768;
11
- case "lg": return 1024;
12
- case "xl": return 1280;
13
- case "2xl": return 1536;
14
- default: return breakpoint;
15
- }
6
+ /** Tailwind's breakpoints, in pixels. */
7
+ const BREAKPOINT_WIDTHS = {
8
+ xs: 480,
9
+ sm: 640,
10
+ md: 768,
11
+ lg: 1024,
12
+ xl: 1280,
13
+ "2xl": 1536
16
14
  };
15
+ const getBreakpointFromSize = (breakpoint) => typeof breakpoint === "number" ? breakpoint : BREAKPOINT_WIDTHS[breakpoint] ?? BREAKPOINT_WIDTHS.md;
17
16
  const checkIsMobileUserAgent = () => {
18
17
  if (typeof window === "undefined") return;
19
18
  const userAgent = window.navigator?.userAgent;
@@ -55,33 +54,102 @@ const calculateIsMobile = (breakpoint = "md") => {
55
54
  isMac: checkIsMac()
56
55
  };
57
56
  };
58
- const useDevice = (breakpoint = "md") => {
59
- const [result, setResult] = useState({
60
- isMobileScreen: void 0,
61
- isMobileUserAgent: void 0,
62
- isMobile: void 0,
63
- isIOS: void 0,
64
- isMac: void 0
57
+ /**
58
+ * Snapshot served while rendering on the server and while hydrating, where no
59
+ * viewport exists. Frozen and shared so every consumer reads the very same
60
+ * reference — `useSyncExternalStore` compares snapshots by identity.
61
+ */
62
+ const SERVER_SNAPSHOT = Object.freeze({
63
+ isMobileScreen: void 0,
64
+ isMobileUserAgent: void 0,
65
+ isMobile: void 0,
66
+ isIOS: void 0,
67
+ isMac: void 0
68
+ });
69
+ /** The user agent never changes within a document, so parse it once. */
70
+ let userAgentFlags;
71
+ const getUserAgentFlags = () => {
72
+ userAgentFlags ??= {
73
+ isMobileUserAgent: checkIsMobileUserAgent(),
74
+ isIOS: checkIsIOS(),
75
+ isMac: checkIsMac()
76
+ };
77
+ return userAgentFlags;
78
+ };
79
+ /**
80
+ * One store per breakpoint, shared by every component asking for it.
81
+ *
82
+ * A page mounts this hook from a dozen components; giving each its own
83
+ * `MediaQueryList`, state and effect made the browser evaluate the same query a
84
+ * dozen times and React commit a dozen separate post-hydration renders. Reading
85
+ * from a single store collapses those into one subscription and one commit.
86
+ */
87
+ const breakpointStores = /* @__PURE__ */ new Map();
88
+ const createBreakpointStore = (breakpointValue) => {
89
+ const mediaQuery = window.matchMedia(`(max-width: ${breakpointValue}px)`);
90
+ const listeners = /* @__PURE__ */ new Set();
91
+ const buildSnapshot = (isMobileScreen) => ({
92
+ ...getUserAgentFlags(),
93
+ isMobileScreen,
94
+ isMobile: isMobileScreen
65
95
  });
66
- useEffect(() => {
67
- const breakpointValue = getBreakpointFromSize(breakpoint);
68
- const mobileScreenQuery = window.matchMedia(`(max-width: ${breakpointValue}px)`);
69
- const isMobileUserAgent = checkIsMobileUserAgent();
70
- const isIOS = checkIsIOS();
71
- const isMac = checkIsMac();
72
- const applyMatches = (isMobileScreen) => setResult({
73
- isMobileScreen,
74
- isMobileUserAgent,
75
- isMobile: isMobileScreen,
76
- isIOS,
77
- isMac
78
- });
79
- applyMatches(mobileScreenQuery.matches);
80
- const handleChange = (event) => applyMatches(event.matches);
81
- mobileScreenQuery.addEventListener("change", handleChange);
82
- return () => mobileScreenQuery.removeEventListener("change", handleChange);
83
- }, [breakpoint]);
84
- return result;
96
+ let snapshot = buildSnapshot(mediaQuery.matches);
97
+ /**
98
+ * Replaces the snapshot only when the viewport actually crossed the
99
+ * breakpoint. `useSyncExternalStore` compares snapshots by identity, so
100
+ * rebuilding an equal object would schedule a render for nothing.
101
+ *
102
+ * @returns Whether the snapshot changed.
103
+ */
104
+ const refreshSnapshot = (isMobileScreen) => {
105
+ if (snapshot.isMobileScreen === isMobileScreen) return false;
106
+ snapshot = buildSnapshot(isMobileScreen);
107
+ return true;
108
+ };
109
+ const handleChange = (event) => {
110
+ if (!refreshSnapshot(event.matches)) return;
111
+ for (const listener of listeners) listener();
112
+ };
113
+ return {
114
+ subscribe: (onStoreChange) => {
115
+ if (listeners.size === 0) {
116
+ refreshSnapshot(mediaQuery.matches);
117
+ mediaQuery.addEventListener("change", handleChange);
118
+ }
119
+ listeners.add(onStoreChange);
120
+ return () => {
121
+ listeners.delete(onStoreChange);
122
+ if (listeners.size === 0) mediaQuery.removeEventListener("change", handleChange);
123
+ };
124
+ },
125
+ getSnapshot: () => snapshot
126
+ };
127
+ };
128
+ const getBreakpointStore = (breakpointValue) => {
129
+ const existingStore = breakpointStores.get(breakpointValue);
130
+ if (existingStore) return existingStore;
131
+ const store = createBreakpointStore(breakpointValue);
132
+ breakpointStores.set(breakpointValue, store);
133
+ return store;
134
+ };
135
+ const getServerSnapshot = () => SERVER_SNAPSHOT;
136
+ /**
137
+ * Reports whether the current device is mobile, and which platform it runs.
138
+ *
139
+ * Server renders — including the prerendered HTML both apps ship — resolve to
140
+ * `undefined`, then settle to the real values in a single commit once the
141
+ * browser takes over.
142
+ *
143
+ * @example
144
+ * ```tsx
145
+ * const { isMobile } = useDevice('lg');
146
+ * ```
147
+ */
148
+ const useDevice = (breakpoint = "md") => {
149
+ const breakpointValue = getBreakpointFromSize(breakpoint);
150
+ const subscribe = useCallback((onStoreChange) => getBreakpointStore(breakpointValue).subscribe(onStoreChange), [breakpointValue]);
151
+ const getSnapshot = useCallback(() => getBreakpointStore(breakpointValue).getSnapshot(), [breakpointValue]);
152
+ return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
85
153
  };
86
154
 
87
155
  //#endregion
@@ -1 +1 @@
1
- {"version":3,"file":"useDevice.mjs","names":[],"sources":["../../../src/hooks/useDevice.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useState } from 'react';\n\nexport type SizeType = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\nexport const getBreakpointFromSize = (breakpoint: SizeType | number) => {\n switch (breakpoint) {\n case 'xs':\n return 480;\n case 'sm':\n return 640;\n case 'md':\n return 768;\n case 'lg':\n return 1024;\n case 'xl':\n return 1280;\n case '2xl':\n return 1536;\n default:\n return breakpoint;\n }\n};\n\nexport const checkIsMobileUserAgent = (): boolean | undefined => {\n if (typeof window === 'undefined') return;\n\n const userAgent = window.navigator?.userAgent;\n\n if (typeof userAgent === 'undefined') return;\n\n return /android|bb\\d+|meego|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(?:hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(?:ob|in)i|palm(?: os)?|phone|p(?:ixi|re)\\/|plucker|pocket|psp|series(?:4|6)0|symbian|treo|up\\.(?:browser|link)|vodafone|wap|windows ce|windows phone|xda|xiino|zte-/i.test(\n userAgent\n );\n};\n\nexport const checkIsIphoneOrSafariDevice = (): boolean | undefined => {\n if (typeof window === 'undefined') return;\n\n const userAgent = window.navigator?.userAgent;\n\n /* 1 . is it Safari? (Chrome & co. also contain “Safari/…”, so exclude them) */\n const isSafari =\n /Safari\\/\\d/i.test(userAgent) && // has “Safari/xxx”\n !/Chrome|CriOS|FxiOS|Edg|OPR/i.test(userAgent); // …but not the other browsers\n\n /* 2. is it an Apple device? (macOS or iOS/iPadOS) */\n const isAppleDevice = /Macintosh|iP(?:hone|ad|od)/.test(userAgent);\n\n return isSafari && isAppleDevice; // true for mac-Safari & iOS-Safari\n};\n\nexport const checkIsIOS = (): boolean | undefined => {\n if (typeof window === 'undefined') return;\n\n const userAgent = window.navigator?.userAgent;\n\n if (typeof userAgent === 'undefined') return;\n\n // Check for iOS devices: iPhone, iPad, iPod\n return /iP(?:hone|ad|od)/.test(userAgent);\n};\n\nexport const checkIsMac = (): boolean | undefined => {\n if (typeof window === 'undefined') return;\n\n const userAgent = window.navigator?.userAgent;\n\n if (typeof userAgent === 'undefined') return;\n\n // Check for macOS/Mac devices\n return /Macintosh|MacIntel|Mac OS X/.test(userAgent);\n};\n\nexport const checkIsMobileScreen = (\n breakpoint: number\n): boolean | undefined => {\n if (typeof window === 'undefined') return;\n\n return (window?.innerWidth ?? 0) <= breakpoint;\n};\n\ntype UseDeviceState = {\n isMobileScreen: boolean | undefined;\n isMobileUserAgent: boolean | undefined;\n isMobile: boolean | undefined;\n isIOS: boolean | undefined;\n isMac: boolean | undefined;\n};\n\nexport const calculateIsMobile = (breakpoint: SizeType | number = 'md') => {\n const breakpointValue = getBreakpointFromSize(breakpoint);\n\n const isMobileUserAgent = checkIsMobileUserAgent();\n const isMobileScreen = checkIsMobileScreen(breakpointValue);\n const isMobile = isMobileScreen ?? isMobileUserAgent;\n const isIOS = checkIsIOS();\n const isMac = checkIsMac();\n\n return {\n isMobileScreen, // Is the screen width within a mobile breakpoint.\n isMobileUserAgent, // Is the user agent indicative of a mobile device.\n isMobile, // Combines both checks to determine if the device is mobile.\n isIOS, // Is the device running iOS (iPhone, iPad, iPod).\n isMac, // Is the device a Mac computer (macOS).\n };\n};\n\nexport const useDevice = (breakpoint: SizeType | number = 'md') => {\n const [result, setResult] = useState<UseDeviceState>({\n isMobileScreen: undefined,\n isMobileUserAgent: undefined,\n isMobile: undefined,\n isIOS: undefined,\n isMac: undefined,\n });\n\n useEffect(() => {\n const breakpointValue = getBreakpointFromSize(breakpoint);\n const mobileScreenQuery = window.matchMedia(\n `(max-width: ${breakpointValue}px)`\n );\n\n const isMobileUserAgent = checkIsMobileUserAgent();\n const isIOS = checkIsIOS();\n const isMac = checkIsMac();\n\n const applyMatches = (isMobileScreen: boolean) =>\n setResult({\n isMobileScreen,\n isMobileUserAgent,\n isMobile: isMobileScreen,\n isIOS,\n isMac,\n });\n\n applyMatches(mobileScreenQuery.matches);\n\n const handleChange = (event: MediaQueryListEvent) =>\n applyMatches(event.matches);\n\n mobileScreenQuery.addEventListener('change', handleChange);\n\n return () => mobileScreenQuery.removeEventListener('change', handleChange);\n }, [breakpoint]);\n\n return result;\n};\n"],"mappings":";;;;;AAMA,MAAa,yBAAyB,eAAkC;CACtE,QAAQ,YAAR;EACE,KAAK,MACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,MACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,SACE,OAAO;CACX;AACF;AAEA,MAAa,+BAAoD;CAC/D,IAAI,OAAO,WAAW,aAAa;CAEnC,MAAM,YAAY,OAAO,WAAW;CAEpC,IAAI,OAAO,cAAc,aAAa;CAEtC,OAAO,mVAAmV,KACxV,SACF;AACF;AAEA,MAAa,oCAAyD;CACpE,IAAI,OAAO,WAAW,aAAa;CAEnC,MAAM,YAAY,OAAO,WAAW;CAGpC,MAAM,WACJ,cAAc,KAAK,SAAS,KAC5B,CAAC,8BAA8B,KAAK,SAAS;CAG/C,MAAM,gBAAgB,6BAA6B,KAAK,SAAS;CAEjE,OAAO,YAAY;AACrB;AAEA,MAAa,mBAAwC;CACnD,IAAI,OAAO,WAAW,aAAa;CAEnC,MAAM,YAAY,OAAO,WAAW;CAEpC,IAAI,OAAO,cAAc,aAAa;CAGtC,OAAO,mBAAmB,KAAK,SAAS;AAC1C;AAEA,MAAa,mBAAwC;CACnD,IAAI,OAAO,WAAW,aAAa;CAEnC,MAAM,YAAY,OAAO,WAAW;CAEpC,IAAI,OAAO,cAAc,aAAa;CAGtC,OAAO,8BAA8B,KAAK,SAAS;AACrD;AAEA,MAAa,uBACX,eACwB;CACxB,IAAI,OAAO,WAAW,aAAa;CAEnC,QAAQ,QAAQ,cAAc,MAAM;AACtC;AAUA,MAAa,qBAAqB,aAAgC,SAAS;CACzE,MAAM,kBAAkB,sBAAsB,UAAU;CAExD,MAAM,oBAAoB,uBAAuB;CACjD,MAAM,iBAAiB,oBAAoB,eAAe;CAK1D,OAAO;EACL;EACA;EACA,UAPe,kBAAkB;EAQjC,OAPY,WAOR;EACJ,OAPY,WAOR;CACN;AACF;AAEA,MAAa,aAAa,aAAgC,SAAS;CACjE,MAAM,CAAC,QAAQ,aAAa,SAAyB;EACnD,gBAAgB;EAChB,mBAAmB;EACnB,UAAU;EACV,OAAO;EACP,OAAO;CACT,CAAC;CAED,gBAAgB;EACd,MAAM,kBAAkB,sBAAsB,UAAU;EACxD,MAAM,oBAAoB,OAAO,WAC/B,eAAe,gBAAgB,IACjC;EAEA,MAAM,oBAAoB,uBAAuB;EACjD,MAAM,QAAQ,WAAW;EACzB,MAAM,QAAQ,WAAW;EAEzB,MAAM,gBAAgB,mBACpB,UAAU;GACR;GACA;GACA,UAAU;GACV;GACA;EACF,CAAC;EAEH,aAAa,kBAAkB,OAAO;EAEtC,MAAM,gBAAgB,UACpB,aAAa,MAAM,OAAO;EAE5B,kBAAkB,iBAAiB,UAAU,YAAY;EAEzD,aAAa,kBAAkB,oBAAoB,UAAU,YAAY;CAC3E,GAAG,CAAC,UAAU,CAAC;CAEf,OAAO;AACT"}
1
+ {"version":3,"file":"useDevice.mjs","names":[],"sources":["../../../src/hooks/useDevice.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useSyncExternalStore } from 'react';\n\nexport type SizeType = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n/** Tailwind's breakpoints, in pixels. */\nconst BREAKPOINT_WIDTHS: Readonly<Record<SizeType, number>> = {\n xs: 480,\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536,\n};\n\nexport const getBreakpointFromSize = (breakpoint: SizeType | number): number =>\n typeof breakpoint === 'number'\n ? breakpoint\n : (BREAKPOINT_WIDTHS[breakpoint] ?? BREAKPOINT_WIDTHS.md);\n\nexport const checkIsMobileUserAgent = (): boolean | undefined => {\n if (typeof window === 'undefined') return;\n\n const userAgent = window.navigator?.userAgent;\n\n if (typeof userAgent === 'undefined') return;\n\n return /android|bb\\d+|meego|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(?:hone|od|ad)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(?:ob|in)i|palm(?: os)?|phone|p(?:ixi|re)\\/|plucker|pocket|psp|series(?:4|6)0|symbian|treo|up\\.(?:browser|link)|vodafone|wap|windows ce|windows phone|xda|xiino|zte-/i.test(\n userAgent\n );\n};\n\nexport const checkIsIphoneOrSafariDevice = (): boolean | undefined => {\n if (typeof window === 'undefined') return;\n\n const userAgent = window.navigator?.userAgent;\n\n /* 1 . is it Safari? (Chrome & co. also contain “Safari/…”, so exclude them) */\n const isSafari =\n /Safari\\/\\d/i.test(userAgent) && // has “Safari/xxx”\n !/Chrome|CriOS|FxiOS|Edg|OPR/i.test(userAgent); // …but not the other browsers\n\n /* 2. is it an Apple device? (macOS or iOS/iPadOS) */\n const isAppleDevice = /Macintosh|iP(?:hone|ad|od)/.test(userAgent);\n\n return isSafari && isAppleDevice; // true for mac-Safari & iOS-Safari\n};\n\nexport const checkIsIOS = (): boolean | undefined => {\n if (typeof window === 'undefined') return;\n\n const userAgent = window.navigator?.userAgent;\n\n if (typeof userAgent === 'undefined') return;\n\n // Check for iOS devices: iPhone, iPad, iPod\n return /iP(?:hone|ad|od)/.test(userAgent);\n};\n\nexport const checkIsMac = (): boolean | undefined => {\n if (typeof window === 'undefined') return;\n\n const userAgent = window.navigator?.userAgent;\n\n if (typeof userAgent === 'undefined') return;\n\n // Check for macOS/Mac devices\n return /Macintosh|MacIntel|Mac OS X/.test(userAgent);\n};\n\nexport const checkIsMobileScreen = (\n breakpoint: number\n): boolean | undefined => {\n if (typeof window === 'undefined') return;\n\n return (window?.innerWidth ?? 0) <= breakpoint;\n};\n\nexport type DeviceState = {\n /** Is the screen width within a mobile breakpoint. */\n isMobileScreen: boolean | undefined;\n /** Is the user agent indicative of a mobile device. */\n isMobileUserAgent: boolean | undefined;\n /** Combines both checks to determine if the device is mobile. */\n isMobile: boolean | undefined;\n /** Is the device running iOS (iPhone, iPad, iPod). */\n isIOS: boolean | undefined;\n /** Is the device a Mac computer (macOS). */\n isMac: boolean | undefined;\n};\n\nexport const calculateIsMobile = (\n breakpoint: SizeType | number = 'md'\n): DeviceState => {\n const breakpointValue = getBreakpointFromSize(breakpoint);\n\n const isMobileUserAgent = checkIsMobileUserAgent();\n const isMobileScreen = checkIsMobileScreen(breakpointValue);\n const isMobile = isMobileScreen ?? isMobileUserAgent;\n const isIOS = checkIsIOS();\n const isMac = checkIsMac();\n\n return { isMobileScreen, isMobileUserAgent, isMobile, isIOS, isMac };\n};\n\n/**\n * Snapshot served while rendering on the server and while hydrating, where no\n * viewport exists. Frozen and shared so every consumer reads the very same\n * reference — `useSyncExternalStore` compares snapshots by identity.\n */\nconst SERVER_SNAPSHOT: DeviceState = Object.freeze({\n isMobileScreen: undefined,\n isMobileUserAgent: undefined,\n isMobile: undefined,\n isIOS: undefined,\n isMac: undefined,\n});\n\ntype UserAgentFlags = Pick<\n DeviceState,\n 'isMobileUserAgent' | 'isIOS' | 'isMac'\n>;\n\n/** The user agent never changes within a document, so parse it once. */\nlet userAgentFlags: UserAgentFlags | undefined;\n\nconst getUserAgentFlags = (): UserAgentFlags => {\n userAgentFlags ??= {\n isMobileUserAgent: checkIsMobileUserAgent(),\n isIOS: checkIsIOS(),\n isMac: checkIsMac(),\n };\n\n return userAgentFlags;\n};\n\ntype BreakpointStore = {\n subscribe: (onStoreChange: () => void) => () => void;\n getSnapshot: () => DeviceState;\n};\n\n/**\n * One store per breakpoint, shared by every component asking for it.\n *\n * A page mounts this hook from a dozen components; giving each its own\n * `MediaQueryList`, state and effect made the browser evaluate the same query a\n * dozen times and React commit a dozen separate post-hydration renders. Reading\n * from a single store collapses those into one subscription and one commit.\n */\nconst breakpointStores = new Map<number, BreakpointStore>();\n\nconst createBreakpointStore = (breakpointValue: number): BreakpointStore => {\n const mediaQuery = window.matchMedia(`(max-width: ${breakpointValue}px)`);\n const listeners = new Set<() => void>();\n\n const buildSnapshot = (isMobileScreen: boolean): DeviceState => ({\n ...getUserAgentFlags(),\n isMobileScreen,\n isMobile: isMobileScreen,\n });\n\n let snapshot = buildSnapshot(mediaQuery.matches);\n\n /**\n * Replaces the snapshot only when the viewport actually crossed the\n * breakpoint. `useSyncExternalStore` compares snapshots by identity, so\n * rebuilding an equal object would schedule a render for nothing.\n *\n * @returns Whether the snapshot changed.\n */\n const refreshSnapshot = (isMobileScreen: boolean): boolean => {\n if (snapshot.isMobileScreen === isMobileScreen) return false;\n\n snapshot = buildSnapshot(isMobileScreen);\n\n return true;\n };\n\n const handleChange = (event: MediaQueryListEvent) => {\n if (!refreshSnapshot(event.matches)) return;\n\n for (const listener of listeners) listener();\n };\n\n return {\n subscribe: (onStoreChange) => {\n if (listeners.size === 0) {\n // The viewport may have moved while nothing was listening; React reads\n // the snapshot again right after subscribing, so refreshing it here is\n // what keeps a remounted consumer from rendering a stale width.\n refreshSnapshot(mediaQuery.matches);\n mediaQuery.addEventListener('change', handleChange);\n }\n\n listeners.add(onStoreChange);\n\n return () => {\n listeners.delete(onStoreChange);\n\n if (listeners.size === 0) {\n mediaQuery.removeEventListener('change', handleChange);\n }\n };\n },\n getSnapshot: () => snapshot,\n };\n};\n\nconst getBreakpointStore = (breakpointValue: number): BreakpointStore => {\n const existingStore = breakpointStores.get(breakpointValue);\n\n if (existingStore) return existingStore;\n\n const store = createBreakpointStore(breakpointValue);\n\n breakpointStores.set(breakpointValue, store);\n\n return store;\n};\n\nconst getServerSnapshot = (): DeviceState => SERVER_SNAPSHOT;\n\n/**\n * Reports whether the current device is mobile, and which platform it runs.\n *\n * Server renders — including the prerendered HTML both apps ship — resolve to\n * `undefined`, then settle to the real values in a single commit once the\n * browser takes over.\n *\n * @example\n * ```tsx\n * const { isMobile } = useDevice('lg');\n * ```\n */\nexport const useDevice = (\n breakpoint: SizeType | number = 'md'\n): DeviceState => {\n const breakpointValue = getBreakpointFromSize(breakpoint);\n\n const subscribe = useCallback(\n (onStoreChange: () => void) =>\n getBreakpointStore(breakpointValue).subscribe(onStoreChange),\n [breakpointValue]\n );\n\n const getSnapshot = useCallback(\n () => getBreakpointStore(breakpointValue).getSnapshot(),\n [breakpointValue]\n );\n\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n};\n"],"mappings":";;;;;;AAOA,MAAM,oBAAwD;CAC5D,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;AACT;AAEA,MAAa,yBAAyB,eACpC,OAAO,eAAe,WAClB,aACC,kBAAkB,eAAe,kBAAkB;AAE1D,MAAa,+BAAoD;CAC/D,IAAI,OAAO,WAAW,aAAa;CAEnC,MAAM,YAAY,OAAO,WAAW;CAEpC,IAAI,OAAO,cAAc,aAAa;CAEtC,OAAO,mVAAmV,KACxV,SACF;AACF;AAEA,MAAa,oCAAyD;CACpE,IAAI,OAAO,WAAW,aAAa;CAEnC,MAAM,YAAY,OAAO,WAAW;CAGpC,MAAM,WACJ,cAAc,KAAK,SAAS,KAC5B,CAAC,8BAA8B,KAAK,SAAS;CAG/C,MAAM,gBAAgB,6BAA6B,KAAK,SAAS;CAEjE,OAAO,YAAY;AACrB;AAEA,MAAa,mBAAwC;CACnD,IAAI,OAAO,WAAW,aAAa;CAEnC,MAAM,YAAY,OAAO,WAAW;CAEpC,IAAI,OAAO,cAAc,aAAa;CAGtC,OAAO,mBAAmB,KAAK,SAAS;AAC1C;AAEA,MAAa,mBAAwC;CACnD,IAAI,OAAO,WAAW,aAAa;CAEnC,MAAM,YAAY,OAAO,WAAW;CAEpC,IAAI,OAAO,cAAc,aAAa;CAGtC,OAAO,8BAA8B,KAAK,SAAS;AACrD;AAEA,MAAa,uBACX,eACwB;CACxB,IAAI,OAAO,WAAW,aAAa;CAEnC,QAAQ,QAAQ,cAAc,MAAM;AACtC;AAeA,MAAa,qBACX,aAAgC,SAChB;CAChB,MAAM,kBAAkB,sBAAsB,UAAU;CAExD,MAAM,oBAAoB,uBAAuB;CACjD,MAAM,iBAAiB,oBAAoB,eAAe;CAK1D,OAAO;EAAE;EAAgB;EAAmB,UAJ3B,kBAAkB;EAImB,OAHxC,WAG4C;EAAG,OAF/C,WAEmD;CAAE;AACrE;;;;;;AAOA,MAAM,kBAA+B,OAAO,OAAO;CACjD,gBAAgB;CAChB,mBAAmB;CACnB,UAAU;CACV,OAAO;CACP,OAAO;AACT,CAAC;;AAQD,IAAI;AAEJ,MAAM,0BAA0C;CAC9C,mBAAmB;EACjB,mBAAmB,uBAAuB;EAC1C,OAAO,WAAW;EAClB,OAAO,WAAW;CACpB;CAEA,OAAO;AACT;;;;;;;;;AAeA,MAAM,mCAAmB,IAAI,IAA6B;AAE1D,MAAM,yBAAyB,oBAA6C;CAC1E,MAAM,aAAa,OAAO,WAAW,eAAe,gBAAgB,IAAI;CACxE,MAAM,4BAAY,IAAI,IAAgB;CAEtC,MAAM,iBAAiB,oBAA0C;EAC/D,GAAG,kBAAkB;EACrB;EACA,UAAU;CACZ;CAEA,IAAI,WAAW,cAAc,WAAW,OAAO;;;;;;;;CAS/C,MAAM,mBAAmB,mBAAqC;EAC5D,IAAI,SAAS,mBAAmB,gBAAgB,OAAO;EAEvD,WAAW,cAAc,cAAc;EAEvC,OAAO;CACT;CAEA,MAAM,gBAAgB,UAA+B;EACnD,IAAI,CAAC,gBAAgB,MAAM,OAAO,GAAG;EAErC,KAAK,MAAM,YAAY,WAAW,SAAS;CAC7C;CAEA,OAAO;EACL,YAAY,kBAAkB;GAC5B,IAAI,UAAU,SAAS,GAAG;IAIxB,gBAAgB,WAAW,OAAO;IAClC,WAAW,iBAAiB,UAAU,YAAY;GACpD;GAEA,UAAU,IAAI,aAAa;GAE3B,aAAa;IACX,UAAU,OAAO,aAAa;IAE9B,IAAI,UAAU,SAAS,GACrB,WAAW,oBAAoB,UAAU,YAAY;GAEzD;EACF;EACA,mBAAmB;CACrB;AACF;AAEA,MAAM,sBAAsB,oBAA6C;CACvE,MAAM,gBAAgB,iBAAiB,IAAI,eAAe;CAE1D,IAAI,eAAe,OAAO;CAE1B,MAAM,QAAQ,sBAAsB,eAAe;CAEnD,iBAAiB,IAAI,iBAAiB,KAAK;CAE3C,OAAO;AACT;AAEA,MAAM,0BAAuC;;;;;;;;;;;;;AAc7C,MAAa,aACX,aAAgC,SAChB;CAChB,MAAM,kBAAkB,sBAAsB,UAAU;CAExD,MAAM,YAAY,aACf,kBACC,mBAAmB,eAAe,CAAC,CAAC,UAAU,aAAa,GAC7D,CAAC,eAAe,CAClB;CAEA,MAAM,cAAc,kBACZ,mBAAmB,eAAe,CAAC,CAAC,YAAY,GACtD,CAAC,eAAe,CAClB;CAEA,OAAO,qBAAqB,WAAW,aAAa,iBAAiB;AACvE"}
@@ -0,0 +1,73 @@
1
+ 'use client';
2
+
3
+ import { useCallback, useEffect, useRef, useState } from "react";
4
+
5
+ //#region src/hooks/useListKeyboardNavigation.ts
6
+ /** No row is highlighted until the user presses an arrow key. */
7
+ const NO_HIGHLIGHTED_INDEX = -1;
8
+ /**
9
+ * Clicks the row itself when it is actionable, otherwise the first link or
10
+ * button inside it.
11
+ */
12
+ const clickRowAction = (element) => {
13
+ (element.matches("a, button") ? element : element.querySelector("a, button"))?.click();
14
+ };
15
+ /**
16
+ * Arrow-key navigation over a list whose focus stays elsewhere — typically a
17
+ * search input filtering the list below it, where moving the DOM focus onto
18
+ * each row would stop the user from typing.
19
+ *
20
+ * The caller renders the highlight itself from `highlightedIndex`, registers
21
+ * each row through `setItemElement`, and forwards key events of the focused
22
+ * element to `handleKeyDown`.
23
+ */
24
+ const useListKeyboardNavigation = ({ itemCount, onActivate }) => {
25
+ const [highlightedIndex, setHighlightedIndex] = useState(-1);
26
+ /** Row elements, indexed as the rendered list is. */
27
+ const itemElementsRef = useRef([]);
28
+ const resetHighlight = useCallback(() => setHighlightedIndex(-1), []);
29
+ /** Stores a row element so the key handler can reach it later. */
30
+ const setItemElement = useCallback((index, element) => {
31
+ itemElementsRef.current[index] = element;
32
+ }, []);
33
+ const handleKeyDown = useCallback((event) => {
34
+ if (itemCount === 0) return;
35
+ if (event.key === "ArrowDown" || event.key === "ArrowUp") {
36
+ event.preventDefault();
37
+ const step = event.key === "ArrowDown" ? 1 : -1;
38
+ setHighlightedIndex((currentIndex) => {
39
+ if (currentIndex === -1) return step === 1 ? 0 : itemCount - 1;
40
+ return (currentIndex + step + itemCount) % itemCount;
41
+ });
42
+ return;
43
+ }
44
+ if (event.key === "Enter") {
45
+ const highlightedElement = itemElementsRef.current[highlightedIndex];
46
+ if (!highlightedElement) return;
47
+ event.preventDefault();
48
+ if (onActivate) {
49
+ onActivate(highlightedIndex, highlightedElement);
50
+ return;
51
+ }
52
+ clickRowAction(highlightedElement);
53
+ }
54
+ }, [
55
+ itemCount,
56
+ highlightedIndex,
57
+ onActivate
58
+ ]);
59
+ useEffect(() => {
60
+ if (highlightedIndex === -1) return;
61
+ itemElementsRef.current[highlightedIndex]?.scrollIntoView({ block: "nearest" });
62
+ }, [highlightedIndex]);
63
+ return {
64
+ highlightedIndex,
65
+ resetHighlight,
66
+ setItemElement,
67
+ handleKeyDown
68
+ };
69
+ };
70
+
71
+ //#endregion
72
+ export { NO_HIGHLIGHTED_INDEX, useListKeyboardNavigation };
73
+ //# sourceMappingURL=useListKeyboardNavigation.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useListKeyboardNavigation.mjs","names":[],"sources":["../../../src/hooks/useListKeyboardNavigation.ts"],"sourcesContent":["'use client';\n\nimport {\n type KeyboardEvent,\n useCallback,\n useEffect,\n useRef,\n useState,\n} from 'react';\n\n/** No row is highlighted until the user presses an arrow key. */\nexport const NO_HIGHLIGHTED_INDEX = -1;\n\nexport type UseListKeyboardNavigationProps<TElement extends HTMLElement> = {\n /** Number of navigable rows. The highlight wraps around it. */\n itemCount: number;\n /**\n * Activation of the highlighted row on `Enter`. Defaults to clicking the\n * first link or button the row contains, which reuses whatever navigation\n * that element already implements.\n */\n onActivate?: (index: number, element: TElement) => void;\n};\n\n/**\n * Clicks the row itself when it is actionable, otherwise the first link or\n * button inside it.\n */\nconst clickRowAction = (element: HTMLElement) => {\n const actionElement = element.matches('a, button')\n ? element\n : element.querySelector<HTMLElement>('a, button');\n\n actionElement?.click();\n};\n\n/**\n * Arrow-key navigation over a list whose focus stays elsewhere — typically a\n * search input filtering the list below it, where moving the DOM focus onto\n * each row would stop the user from typing.\n *\n * The caller renders the highlight itself from `highlightedIndex`, registers\n * each row through `setItemElement`, and forwards key events of the focused\n * element to `handleKeyDown`.\n */\nexport const useListKeyboardNavigation = <TElement extends HTMLElement>({\n itemCount,\n onActivate,\n}: UseListKeyboardNavigationProps<TElement>) => {\n const [highlightedIndex, setHighlightedIndex] =\n useState<number>(NO_HIGHLIGHTED_INDEX);\n\n /** Row elements, indexed as the rendered list is. */\n const itemElementsRef = useRef<(TElement | null)[]>([]);\n\n const resetHighlight = useCallback(\n () => setHighlightedIndex(NO_HIGHLIGHTED_INDEX),\n []\n );\n\n /** Stores a row element so the key handler can reach it later. */\n const setItemElement = useCallback(\n (index: number, element: TElement | null) => {\n itemElementsRef.current[index] = element;\n },\n []\n );\n\n const handleKeyDown = useCallback(\n (event: KeyboardEvent<HTMLElement>) => {\n if (itemCount === 0) return;\n\n if (event.key === 'ArrowDown' || event.key === 'ArrowUp') {\n event.preventDefault();\n\n const step = event.key === 'ArrowDown' ? 1 : -1;\n\n setHighlightedIndex((currentIndex) => {\n if (currentIndex === NO_HIGHLIGHTED_INDEX) {\n return step === 1 ? 0 : itemCount - 1;\n }\n\n return (currentIndex + step + itemCount) % itemCount;\n });\n\n return;\n }\n\n if (event.key === 'Enter') {\n const highlightedElement = itemElementsRef.current[highlightedIndex];\n\n if (!highlightedElement) return;\n\n event.preventDefault();\n\n if (onActivate) {\n onActivate(highlightedIndex, highlightedElement);\n return;\n }\n\n clickRowAction(highlightedElement);\n }\n },\n [itemCount, highlightedIndex, onActivate]\n );\n\n // Keeps the highlighted row inside the scrollable list.\n useEffect(() => {\n if (highlightedIndex === NO_HIGHLIGHTED_INDEX) return;\n\n itemElementsRef.current[highlightedIndex]?.scrollIntoView({\n block: 'nearest',\n });\n }, [highlightedIndex]);\n\n return {\n highlightedIndex,\n resetHighlight,\n setItemElement,\n handleKeyDown,\n };\n};\n"],"mappings":";;;;;;AAWA,MAAa,uBAAuB;;;;;AAiBpC,MAAM,kBAAkB,YAAyB;CAK/C,CAJsB,QAAQ,QAAQ,WAAW,IAC7C,UACA,QAAQ,cAA2B,WAAW,EAErC,EAAE,MAAM;AACvB;;;;;;;;;;AAWA,MAAa,6BAA2D,EACtE,WACA,iBAC8C;CAC9C,MAAM,CAAC,kBAAkB,uBACvB,WAAqC;;CAGvC,MAAM,kBAAkB,OAA4B,CAAC,CAAC;CAEtD,MAAM,iBAAiB,kBACf,sBAAwC,GAC9C,CAAC,CACH;;CAGA,MAAM,iBAAiB,aACpB,OAAe,YAA6B;EAC3C,gBAAgB,QAAQ,SAAS;CACnC,GACA,CAAC,CACH;CAEA,MAAM,gBAAgB,aACnB,UAAsC;EACrC,IAAI,cAAc,GAAG;EAErB,IAAI,MAAM,QAAQ,eAAe,MAAM,QAAQ,WAAW;GACxD,MAAM,eAAe;GAErB,MAAM,OAAO,MAAM,QAAQ,cAAc,IAAI;GAE7C,qBAAqB,iBAAiB;IACpC,IAAI,qBACF,OAAO,SAAS,IAAI,IAAI,YAAY;IAGtC,QAAQ,eAAe,OAAO,aAAa;GAC7C,CAAC;GAED;EACF;EAEA,IAAI,MAAM,QAAQ,SAAS;GACzB,MAAM,qBAAqB,gBAAgB,QAAQ;GAEnD,IAAI,CAAC,oBAAoB;GAEzB,MAAM,eAAe;GAErB,IAAI,YAAY;IACd,WAAW,kBAAkB,kBAAkB;IAC/C;GACF;GAEA,eAAe,kBAAkB;EACnC;CACF,GACA;EAAC;EAAW;EAAkB;CAAU,CAC1C;CAGA,gBAAgB;EACd,IAAI,yBAA2C;EAE/C,gBAAgB,QAAQ,iBAAiB,EAAE,eAAe,EACxD,OAAO,UACT,CAAC;CACH,GAAG,CAAC,gBAAgB,CAAC;CAErB,OAAO;EACL;EACA;EACA;EACA;CACF;AACF"}