@intlayer/design-system 5.7.6-canary.0 → 5.7.7

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 (367) hide show
  1. package/README.md +3 -0
  2. package/dist/.vite/manifest.json +8 -0
  3. package/dist/Form-CriPBaZk.js.map +1 -1
  4. package/dist/Form-DJrUK3mm.cjs.map +1 -1
  5. package/dist/better-auth.8zoxzg-F-BEBqzpjz.cjs.map +1 -1
  6. package/dist/better-auth.8zoxzg-F-D8e0X4ys.js.map +1 -1
  7. package/dist/components/Accordion/Accordion.cjs.map +1 -1
  8. package/dist/components/Accordion/Accordion.mjs.map +1 -1
  9. package/dist/components/Avatar/index.cjs.map +1 -1
  10. package/dist/components/Avatar/index.mjs.map +1 -1
  11. package/dist/components/Badge/index.cjs.map +1 -1
  12. package/dist/components/Badge/index.mjs.map +1 -1
  13. package/dist/components/Breadcrumb/breadcrumb.content.cjs.map +1 -1
  14. package/dist/components/Breadcrumb/breadcrumb.content.mjs.map +1 -1
  15. package/dist/components/Breadcrumb/index.cjs.map +1 -1
  16. package/dist/components/Breadcrumb/index.mjs.map +1 -1
  17. package/dist/components/Button/Button.cjs.map +1 -1
  18. package/dist/components/Button/Button.mjs.map +1 -1
  19. package/dist/components/ClickOutsideDiv/index.cjs.map +1 -1
  20. package/dist/components/ClickOutsideDiv/index.mjs.map +1 -1
  21. package/dist/components/Command/index.cjs.map +1 -1
  22. package/dist/components/Command/index.mjs.map +1 -1
  23. package/dist/components/Container/index.cjs.map +1 -1
  24. package/dist/components/Container/index.mjs.map +1 -1
  25. package/dist/components/ContentEditor/ContentEditor.cjs.map +1 -1
  26. package/dist/components/ContentEditor/ContentEditor.mjs.map +1 -1
  27. package/dist/components/ContentEditor/ContentEditorInput.cjs.map +1 -1
  28. package/dist/components/ContentEditor/ContentEditorInput.mjs.map +1 -1
  29. package/dist/components/ContentEditor/ContentEditorTextArea.cjs.map +1 -1
  30. package/dist/components/ContentEditor/ContentEditorTextArea.mjs.map +1 -1
  31. package/dist/components/ContentSelector/ContentSelector.cjs.map +1 -1
  32. package/dist/components/CopyButton/index.cjs.map +1 -1
  33. package/dist/components/CopyButton/index.mjs.map +1 -1
  34. package/dist/components/CopyToClipboard/index.cjs.map +1 -1
  35. package/dist/components/CopyToClipboard/index.mjs.map +1 -1
  36. package/dist/components/DictionaryEditor/DictionaryEditor.cjs.map +1 -1
  37. package/dist/components/DictionaryEditor/DictionaryEditor.mjs.map +1 -1
  38. package/dist/components/DictionaryEditor/ItemLayout.cjs.map +1 -1
  39. package/dist/components/DictionaryEditor/ItemLayout.mjs.map +1 -1
  40. package/dist/components/DictionaryEditor/NodeWrapper/FileWrapper.cjs.map +1 -1
  41. package/dist/components/DictionaryEditor/NodeWrapper/FileWrapper.mjs.map +1 -1
  42. package/dist/components/DictionaryEditor/NodeWrapper/StringWrapper.cjs.map +1 -1
  43. package/dist/components/DictionaryEditor/NodeWrapper/StringWrapper.mjs.map +1 -1
  44. package/dist/components/DictionaryFieldEditor/ContentEditor.cjs.map +1 -1
  45. package/dist/components/DictionaryFieldEditor/ContentEditor.mjs.map +1 -1
  46. package/dist/components/DictionaryFieldEditor/ContentEditorView/TextEditor.cjs.map +1 -1
  47. package/dist/components/DictionaryFieldEditor/ContentEditorView/TextEditor.mjs.map +1 -1
  48. package/dist/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.cjs.map +1 -1
  49. package/dist/components/DictionaryFieldEditor/DictionaryCreationForm/DictionaryCreationForm.mjs.map +1 -1
  50. package/dist/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.cjs.map +1 -1
  51. package/dist/components/DictionaryFieldEditor/DictionaryCreationForm/dictionaryCreationForm.content.mjs.map +1 -1
  52. package/dist/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.cjs.map +1 -1
  53. package/dist/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.cjs.map +1 -1
  54. package/dist/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.content.mjs.map +1 -1
  55. package/dist/components/DictionaryFieldEditor/DictionaryCreationForm/useDictionaryFormSchema.mjs.map +1 -1
  56. package/dist/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.cjs.map +1 -1
  57. package/dist/components/DictionaryFieldEditor/DictionaryDetails/DictionaryDetailsForm.mjs.map +1 -1
  58. package/dist/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.cjs.map +1 -1
  59. package/dist/components/DictionaryFieldEditor/DictionaryDetails/dictionaryDetails.content.mjs.map +1 -1
  60. package/dist/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.cjs.map +1 -1
  61. package/dist/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.cjs.map +1 -1
  62. package/dist/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.content.mjs.map +1 -1
  63. package/dist/components/DictionaryFieldEditor/DictionaryDetails/useDictionaryDetailsSchema.mjs.map +1 -1
  64. package/dist/components/DictionaryFieldEditor/DictionaryFieldEditor.cjs.map +1 -1
  65. package/dist/components/DictionaryFieldEditor/DictionaryFieldEditor.mjs.map +1 -1
  66. package/dist/components/DictionaryFieldEditor/EnumKeyInput.cjs.map +1 -1
  67. package/dist/components/DictionaryFieldEditor/EnumKeyInput.mjs.map +1 -1
  68. package/dist/components/DictionaryFieldEditor/JSONEditor.cjs.map +1 -1
  69. package/dist/components/DictionaryFieldEditor/JSONEditor.mjs.map +1 -1
  70. package/dist/components/DictionaryFieldEditor/KeyPathBreadcrumb.cjs.map +1 -1
  71. package/dist/components/DictionaryFieldEditor/KeyPathBreadcrumb.mjs.map +1 -1
  72. package/dist/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.cjs.map +1 -1
  73. package/dist/components/DictionaryFieldEditor/NavigationView/NavigationViewNode.mjs.map +1 -1
  74. package/dist/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.cjs.map +1 -1
  75. package/dist/components/DictionaryFieldEditor/NavigationView/navigationViewNode.content.mjs.map +1 -1
  76. package/dist/components/DictionaryFieldEditor/NodeTypeSelector.cjs.map +1 -1
  77. package/dist/components/DictionaryFieldEditor/NodeTypeSelector.mjs.map +1 -1
  78. package/dist/components/DictionaryFieldEditor/SaveForm/SaveForm.cjs.map +1 -1
  79. package/dist/components/DictionaryFieldEditor/SaveForm/SaveForm.mjs.map +1 -1
  80. package/dist/components/DictionaryFieldEditor/SaveForm/saveForm.content.cjs.map +1 -1
  81. package/dist/components/DictionaryFieldEditor/SaveForm/saveForm.content.mjs.map +1 -1
  82. package/dist/components/DictionaryFieldEditor/StructureEditor.cjs.map +1 -1
  83. package/dist/components/DictionaryFieldEditor/StructureEditor.mjs.map +1 -1
  84. package/dist/components/DictionaryFieldEditor/StructureView/StructureView.cjs.map +1 -1
  85. package/dist/components/DictionaryFieldEditor/StructureView/StructureView.mjs.map +1 -1
  86. package/dist/components/DictionaryFieldEditor/StructureView/structureView.content.cjs.map +1 -1
  87. package/dist/components/DictionaryFieldEditor/StructureView/structureView.content.mjs.map +1 -1
  88. package/dist/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.cjs.map +1 -1
  89. package/dist/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcher.mjs.map +1 -1
  90. package/dist/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.cjs.map +1 -1
  91. package/dist/components/DictionaryFieldEditor/VersionSwitcherDropDown/VersionSwitcherContext.mjs.map +1 -1
  92. package/dist/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.cjs.map +1 -1
  93. package/dist/components/DictionaryFieldEditor/VersionSwitcherDropDown/versionSwitcherDropDown.content.mjs.map +1 -1
  94. package/dist/components/DictionaryFieldEditor/dictionaryFieldEditor.content.cjs.map +1 -1
  95. package/dist/components/DictionaryFieldEditor/dictionaryFieldEditor.content.mjs.map +1 -1
  96. package/dist/components/DictionaryFieldEditor/getIsEditableSection.cjs.map +1 -1
  97. package/dist/components/DictionaryFieldEditor/getIsEditableSection.mjs.map +1 -1
  98. package/dist/components/DictionaryFieldEditor/nodeTypeSelector.content.cjs.map +1 -1
  99. package/dist/components/DictionaryFieldEditor/nodeTypeSelector.content.mjs.map +1 -1
  100. package/dist/components/DropDown/index.cjs.map +1 -1
  101. package/dist/components/DropDown/index.mjs.map +1 -1
  102. package/dist/components/EditableField/EditableFieldInput.cjs.map +1 -1
  103. package/dist/components/EditableField/EditableFieldInput.mjs.map +1 -1
  104. package/dist/components/EditableField/EditableFieldLayout.cjs.map +1 -1
  105. package/dist/components/EditableField/EditableFieldLayout.mjs.map +1 -1
  106. package/dist/components/EditableField/EditableFieldTextArea.cjs.map +1 -1
  107. package/dist/components/EditableField/EditableFieldTextArea.mjs.map +1 -1
  108. package/dist/components/Flags/Flag.cjs.map +1 -1
  109. package/dist/components/Flags/Flag.mjs.map +1 -1
  110. package/dist/components/Footer/index.cjs +1 -1
  111. package/dist/components/Footer/index.cjs.map +1 -1
  112. package/dist/components/Footer/index.mjs +1 -1
  113. package/dist/components/Footer/index.mjs.map +1 -1
  114. package/dist/components/Form/FormBase.cjs.map +1 -1
  115. package/dist/components/Form/FormBase.mjs.map +1 -1
  116. package/dist/components/Form/FormControl.cjs.map +1 -1
  117. package/dist/components/Form/FormControl.mjs.map +1 -1
  118. package/dist/components/Form/FormDescription.cjs.map +1 -1
  119. package/dist/components/Form/FormDescription.mjs.map +1 -1
  120. package/dist/components/Form/FormField.cjs.map +1 -1
  121. package/dist/components/Form/FormField.mjs.map +1 -1
  122. package/dist/components/Form/FormItem.cjs.map +1 -1
  123. package/dist/components/Form/FormItem.mjs.map +1 -1
  124. package/dist/components/Form/FormLabel.cjs.map +1 -1
  125. package/dist/components/Form/FormLabel.mjs.map +1 -1
  126. package/dist/components/Form/FormMessage.cjs.map +1 -1
  127. package/dist/components/Form/FormMessage.mjs.map +1 -1
  128. package/dist/components/Form/elements/FormElementWrapper.cjs.map +1 -1
  129. package/dist/components/Form/elements/FormElementWrapper.mjs.map +1 -1
  130. package/dist/components/Form/layout/FormLabelLayout.cjs.map +1 -1
  131. package/dist/components/Form/layout/FormLabelLayout.mjs.map +1 -1
  132. package/dist/components/Form/layout/RequiredStar.cjs.map +1 -1
  133. package/dist/components/Form/layout/RequiredStar.mjs.map +1 -1
  134. package/dist/components/Headers/SectionScroller.cjs.map +1 -1
  135. package/dist/components/Headers/SectionScroller.mjs.map +1 -1
  136. package/dist/components/Headers/index.cjs.map +1 -1
  137. package/dist/components/Headers/index.mjs.map +1 -1
  138. package/dist/components/HeightResizer/index.cjs.map +1 -1
  139. package/dist/components/HeightResizer/index.mjs.map +1 -1
  140. package/dist/components/IDE/Code.cjs.map +1 -1
  141. package/dist/components/IDE/Code.mjs.map +1 -1
  142. package/dist/components/IDE/CodeBlockClient.cjs.map +1 -1
  143. package/dist/components/IDE/CodeBlockClient.mjs.map +1 -1
  144. package/dist/components/IDE/CodeBlockServer.cjs.map +1 -1
  145. package/dist/components/IDE/CodeBlockServer.mjs.map +1 -1
  146. package/dist/components/IDE/CodeConditionalRenderer.cjs.map +1 -1
  147. package/dist/components/IDE/CodeConditionalRenderer.mjs.map +1 -1
  148. package/dist/components/IDE/CodeContext.cjs.map +1 -1
  149. package/dist/components/IDE/CodeContext.mjs.map +1 -1
  150. package/dist/components/IDE/CodeFormatSelector.cjs.map +1 -1
  151. package/dist/components/IDE/CodeFormatSelector.mjs.map +1 -1
  152. package/dist/components/IDE/ContentDeclarationFormatSelector.cjs.map +1 -1
  153. package/dist/components/IDE/ContentDeclarationFormatSelector.mjs.map +1 -1
  154. package/dist/components/IDE/CopyButton.content.cjs.map +1 -1
  155. package/dist/components/IDE/CopyButton.content.mjs.map +1 -1
  156. package/dist/components/IDE/CopyCode.cjs.map +1 -1
  157. package/dist/components/IDE/CopyCode.mjs.map +1 -1
  158. package/dist/components/IDE/FileList.cjs.map +1 -1
  159. package/dist/components/IDE/FileList.mjs.map +1 -1
  160. package/dist/components/IDE/FileTree.cjs.map +1 -1
  161. package/dist/components/IDE/FileTree.mjs.map +1 -1
  162. package/dist/components/IDE/IDE.cjs.map +1 -1
  163. package/dist/components/IDE/IDE.mjs.map +1 -1
  164. package/dist/components/IDE/MarkDownRender.cjs.map +1 -1
  165. package/dist/components/IDE/MarkDownRender.mjs.map +1 -1
  166. package/dist/components/IDE/MonacoCode.cjs.map +1 -1
  167. package/dist/components/IDE/MonacoCode.mjs.map +1 -1
  168. package/dist/components/IDE/PackageManagerSelector.cjs.map +1 -1
  169. package/dist/components/IDE/PackageManagerSelector.mjs.map +1 -1
  170. package/dist/components/IDE/code.content.cjs.map +1 -1
  171. package/dist/components/IDE/code.content.mjs.map +1 -1
  172. package/dist/components/IDE/copyCode.content.cjs.map +1 -1
  173. package/dist/components/IDE/copyCode.content.mjs.map +1 -1
  174. package/dist/components/IDE/createFileTree.cjs.map +1 -1
  175. package/dist/components/IDE/createFileTree.mjs.map +1 -1
  176. package/dist/components/InformationTag/index.cjs.map +1 -1
  177. package/dist/components/InformationTag/index.mjs.map +1 -1
  178. package/dist/components/Input/Checkbox.cjs.map +1 -1
  179. package/dist/components/Input/Checkbox.mjs.map +1 -1
  180. package/dist/components/Input/Input.cjs.map +1 -1
  181. package/dist/components/Input/Input.mjs.map +1 -1
  182. package/dist/components/Input/InputPassword.cjs.map +1 -1
  183. package/dist/components/Input/InputPassword.mjs.map +1 -1
  184. package/dist/components/KeyboardScreenAdapter/index.cjs.map +1 -1
  185. package/dist/components/KeyboardScreenAdapter/index.mjs.map +1 -1
  186. package/dist/components/Label/index.cjs.map +1 -1
  187. package/dist/components/Link/Link.cjs.map +1 -1
  188. package/dist/components/Link/Link.mjs.map +1 -1
  189. package/dist/components/Loader/index.cjs.map +1 -1
  190. package/dist/components/Loader/index.content.cjs.map +1 -1
  191. package/dist/components/Loader/index.content.mjs.map +1 -1
  192. package/dist/components/Loader/index.mjs.map +1 -1
  193. package/dist/components/Loader/spinner.cjs.map +1 -1
  194. package/dist/components/Loader/spinner.mjs.map +1 -1
  195. package/dist/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.cjs.map +1 -1
  196. package/dist/components/LocaleSwitcherContentDropDown/LocaleSwitcherContent.mjs.map +1 -1
  197. package/dist/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.cjs.map +1 -1
  198. package/dist/components/LocaleSwitcherContentDropDown/LocaleSwitcherContentContext.mjs.map +1 -1
  199. package/dist/components/LocaleSwitcherContentDropDown/localeSwitcher.content.cjs.map +1 -1
  200. package/dist/components/LocaleSwitcherContentDropDown/localeSwitcher.content.mjs.map +1 -1
  201. package/dist/components/LocaleSwitcherDropDown/LocaleSwitcher.cjs.map +1 -1
  202. package/dist/components/LocaleSwitcherDropDown/LocaleSwitcher.mjs.map +1 -1
  203. package/dist/components/LocaleSwitcherDropDown/localeSwitcher.content.cjs.map +1 -1
  204. package/dist/components/LocaleSwitcherDropDown/localeSwitcher.content.mjs.map +1 -1
  205. package/dist/components/Logo/Logo.cjs.map +1 -1
  206. package/dist/components/Logo/Logo.mjs.map +1 -1
  207. package/dist/components/Logo/LogoTextOnly.cjs.map +1 -1
  208. package/dist/components/Logo/LogoTextOnly.mjs.map +1 -1
  209. package/dist/components/Logo/LogoWithText.cjs.map +1 -1
  210. package/dist/components/Logo/LogoWithText.mjs.map +1 -1
  211. package/dist/components/Logo/LogoWithTextBelow.cjs.map +1 -1
  212. package/dist/components/Logo/LogoWithTextBelow.mjs.map +1 -1
  213. package/dist/components/MarkDownRender/index.cjs.map +1 -1
  214. package/dist/components/MarkDownRender/index.mjs.map +1 -1
  215. package/dist/components/MaxHeightSmoother/index.cjs.map +1 -1
  216. package/dist/components/MaxHeightSmoother/index.mjs.map +1 -1
  217. package/dist/components/MaxWidthSmoother/index.cjs.map +1 -1
  218. package/dist/components/MaxWidthSmoother/index.mjs.map +1 -1
  219. package/dist/components/Modal/Modal.cjs.map +1 -1
  220. package/dist/components/Modal/Modal.mjs.map +1 -1
  221. package/dist/components/Navbar/Burger.cjs.map +1 -1
  222. package/dist/components/Navbar/Burger.mjs.map +1 -1
  223. package/dist/components/Navbar/DesktopNavbar.cjs.map +1 -1
  224. package/dist/components/Navbar/DesktopNavbar.mjs.map +1 -1
  225. package/dist/components/Navbar/MobileNavbar.cjs.map +1 -1
  226. package/dist/components/Navbar/MobileNavbar.mjs.map +1 -1
  227. package/dist/components/Navbar/index.cjs.map +1 -1
  228. package/dist/components/Navbar/index.mjs.map +1 -1
  229. package/dist/components/Navbar/useNavigation.cjs.map +1 -1
  230. package/dist/components/Navbar/useNavigation.mjs.map +1 -1
  231. package/dist/components/Pattern/DotPattern.cjs.map +1 -1
  232. package/dist/components/Pattern/DotPattern.mjs.map +1 -1
  233. package/dist/components/Pattern/GridPattern.cjs.map +1 -1
  234. package/dist/components/Pattern/GridPattern.mjs.map +1 -1
  235. package/dist/components/Pattern/SpotLight.cjs.map +1 -1
  236. package/dist/components/Pattern/SpotLight.mjs.map +1 -1
  237. package/dist/components/Popover/index.cjs.map +1 -1
  238. package/dist/components/Popover/index.mjs.map +1 -1
  239. package/dist/components/PressableSpan/PressableSpan.cjs.map +1 -1
  240. package/dist/components/PressableSpan/PressableSpan.mjs.map +1 -1
  241. package/dist/components/RightDrawer/RightDrawer.cjs.map +1 -1
  242. package/dist/components/RightDrawer/RightDrawer.mjs.map +1 -1
  243. package/dist/components/RightDrawer/isElementAtTopAndNotCovered.cjs.map +1 -1
  244. package/dist/components/RightDrawer/isElementAtTopAndNotCovered.mjs.map +1 -1
  245. package/dist/components/RightDrawer/useRightDrawerStore.cjs.map +1 -1
  246. package/dist/components/RightDrawer/useRightDrawerStore.mjs.map +1 -1
  247. package/dist/components/Select/Multiselect.cjs.map +1 -1
  248. package/dist/components/Select/Multiselect.mjs.map +1 -1
  249. package/dist/components/Select/Select.cjs.map +1 -1
  250. package/dist/components/Select/Select.mjs.map +1 -1
  251. package/dist/components/SocialNetworks/DiscordLogo.cjs +23 -0
  252. package/dist/components/SocialNetworks/DiscordLogo.cjs.map +1 -0
  253. package/dist/components/SocialNetworks/DiscordLogo.d.ts +3 -0
  254. package/dist/components/SocialNetworks/DiscordLogo.d.ts.map +1 -0
  255. package/dist/components/SocialNetworks/DiscordLogo.mjs +23 -0
  256. package/dist/components/SocialNetworks/DiscordLogo.mjs.map +1 -0
  257. package/dist/components/SocialNetworks/FacebookLogo.cjs.map +1 -1
  258. package/dist/components/SocialNetworks/FacebookLogo.mjs.map +1 -1
  259. package/dist/components/SocialNetworks/InstagramLogo.cjs.map +1 -1
  260. package/dist/components/SocialNetworks/InstagramLogo.mjs.map +1 -1
  261. package/dist/components/SocialNetworks/LinkedInLogo.cjs.map +1 -1
  262. package/dist/components/SocialNetworks/LinkedInLogo.mjs.map +1 -1
  263. package/dist/components/SocialNetworks/ProductHuntLogo.cjs.map +1 -1
  264. package/dist/components/SocialNetworks/ProductHuntLogo.mjs.map +1 -1
  265. package/dist/components/SocialNetworks/TiktokLogo.cjs.map +1 -1
  266. package/dist/components/SocialNetworks/TiktokLogo.mjs.map +1 -1
  267. package/dist/components/SocialNetworks/XLogo.cjs.map +1 -1
  268. package/dist/components/SocialNetworks/XLogo.mjs.map +1 -1
  269. package/dist/components/SocialNetworks/YoutubeLogo.cjs.map +1 -1
  270. package/dist/components/SocialNetworks/YoutubeLogo.mjs.map +1 -1
  271. package/dist/components/SocialNetworks/index.cjs +7 -0
  272. package/dist/components/SocialNetworks/index.cjs.map +1 -1
  273. package/dist/components/SocialNetworks/index.d.ts +1 -0
  274. package/dist/components/SocialNetworks/index.d.ts.map +1 -1
  275. package/dist/components/SocialNetworks/index.mjs +7 -0
  276. package/dist/components/SocialNetworks/index.mjs.map +1 -1
  277. package/dist/components/SwitchSelector/index.cjs.map +1 -1
  278. package/dist/components/SwitchSelector/index.mjs.map +1 -1
  279. package/dist/components/TabSelector/TabSelector.cjs.map +1 -1
  280. package/dist/components/TabSelector/TabSelector.mjs.map +1 -1
  281. package/dist/components/Tag/index.cjs.map +1 -1
  282. package/dist/components/Tag/index.mjs.map +1 -1
  283. package/dist/components/TextArea/AutoSizeTextArea.cjs.map +1 -1
  284. package/dist/components/TextArea/AutoSizeTextArea.mjs.map +1 -1
  285. package/dist/components/TextArea/AutocompleteTextArea.cjs.map +1 -1
  286. package/dist/components/TextArea/AutocompleteTextArea.mjs.map +1 -1
  287. package/dist/components/TextArea/TextArea.cjs.map +1 -1
  288. package/dist/components/TextArea/TextArea.mjs.map +1 -1
  289. package/dist/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.cjs.map +1 -1
  290. package/dist/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.mjs.map +1 -1
  291. package/dist/components/ThemeSwitcherDropDown/MobileThemeSwitcher.cjs.map +1 -1
  292. package/dist/components/ThemeSwitcherDropDown/MobileThemeSwitcher.mjs.map +1 -1
  293. package/dist/components/ThemeSwitcherDropDown/types.cjs.map +1 -1
  294. package/dist/components/ThemeSwitcherDropDown/types.mjs.map +1 -1
  295. package/dist/components/Toaster/Toast.cjs.map +1 -1
  296. package/dist/components/Toaster/Toast.mjs.map +1 -1
  297. package/dist/components/Toaster/Toaster.cjs.map +1 -1
  298. package/dist/components/Toaster/Toaster.mjs.map +1 -1
  299. package/dist/components/Toaster/useToast.cjs.map +1 -1
  300. package/dist/components/Toaster/useToast.mjs.map +1 -1
  301. package/dist/components/WithResizer/index.cjs.map +1 -1
  302. package/dist/components/WithResizer/index.mjs.map +1 -1
  303. package/dist/components/index.cjs +2 -0
  304. package/dist/components/index.cjs.map +1 -1
  305. package/dist/components/index.mjs +2 -0
  306. package/dist/components/index.mjs.map +1 -1
  307. package/dist/hooks/auth.cjs.map +1 -1
  308. package/dist/hooks/auth.mjs.map +1 -1
  309. package/dist/hooks/intlayerAPIHooks.cjs.map +1 -1
  310. package/dist/hooks/intlayerAPIHooks.mjs.map +1 -1
  311. package/dist/hooks/useAsync/useAsync.cjs.map +1 -1
  312. package/dist/hooks/useAsync/useAsync.mjs.map +1 -1
  313. package/dist/hooks/useAsync/useAsyncStateStore.cjs.map +1 -1
  314. package/dist/hooks/useAsync/useAsyncStateStore.mjs.map +1 -1
  315. package/dist/hooks/useAsync/useAsyncWrapper.cjs.map +1 -1
  316. package/dist/hooks/useAsync/useAsyncWrapper.mjs.map +1 -1
  317. package/dist/hooks/useAuth/useAuth.cjs.map +1 -1
  318. package/dist/hooks/useAuth/useAuth.mjs.map +1 -1
  319. package/dist/hooks/useAuth/useOAuth2.cjs.map +1 -1
  320. package/dist/hooks/useAuth/useOAuth2.mjs.map +1 -1
  321. package/dist/hooks/useAuth/useSession.cjs.map +1 -1
  322. package/dist/hooks/useAuth/useSession.mjs.map +1 -1
  323. package/dist/hooks/useDevice.cjs.map +1 -1
  324. package/dist/hooks/useDevice.mjs.map +1 -1
  325. package/dist/hooks/useGetAllDictionaries.cjs.map +1 -1
  326. package/dist/hooks/useGetAllDictionaries.mjs.map +1 -1
  327. package/dist/hooks/useGetElementOrWindow.cjs.map +1 -1
  328. package/dist/hooks/useGetElementOrWindow.mjs.map +1 -1
  329. package/dist/hooks/useIntlayerAPI.cjs.map +1 -1
  330. package/dist/hooks/useIntlayerAPI.mjs.map +1 -1
  331. package/dist/hooks/useIsDarkMode.cjs.map +1 -1
  332. package/dist/hooks/useIsDarkMode.mjs.map +1 -1
  333. package/dist/hooks/useIsMounted.cjs.map +1 -1
  334. package/dist/hooks/useIsMounted.mjs.map +1 -1
  335. package/dist/hooks/useItemSelector.cjs.map +1 -1
  336. package/dist/hooks/useItemSelector.mjs.map +1 -1
  337. package/dist/hooks/useKeyboardDetector.cjs.map +1 -1
  338. package/dist/hooks/useKeyboardDetector.mjs.map +1 -1
  339. package/dist/hooks/usePersistedStore.cjs.map +1 -1
  340. package/dist/hooks/usePersistedStore.mjs.map +1 -1
  341. package/dist/hooks/useScreenWidth.cjs.map +1 -1
  342. package/dist/hooks/useScreenWidth.mjs.map +1 -1
  343. package/dist/hooks/useScrollBlockage/useScrollBlockageStore.cjs.map +1 -1
  344. package/dist/hooks/useScrollBlockage/useScrollBlockageStore.mjs.map +1 -1
  345. package/dist/hooks/useScrollDetection.cjs.map +1 -1
  346. package/dist/hooks/useScrollDetection.mjs.map +1 -1
  347. package/dist/hooks/useUser/index.cjs.map +1 -1
  348. package/dist/hooks/useUser/index.mjs.map +1 -1
  349. package/dist/index-BCuMWKyy.js.map +1 -1
  350. package/dist/index-BYzBot7l.cjs.map +1 -1
  351. package/dist/index-DW4Wnns5.cjs.map +1 -1
  352. package/dist/index-aPP3MzPT.js.map +1 -1
  353. package/dist/parse-BJVwmz92.cjs.map +1 -1
  354. package/dist/parse-pnJgclyf.js.map +1 -1
  355. package/dist/schemas-BIuxHDyZ.js.map +1 -1
  356. package/dist/schemas-Q6C7ZNs3.cjs.map +1 -1
  357. package/dist/tailwind.config.cjs.map +1 -1
  358. package/dist/tailwind.config.mjs.map +1 -1
  359. package/dist/utils/camelCase.cjs.map +1 -1
  360. package/dist/utils/camelCase.mjs.map +1 -1
  361. package/dist/utils/capitalize.cjs.map +1 -1
  362. package/dist/utils/capitalize.mjs.map +1 -1
  363. package/dist/utils/object.cjs.map +1 -1
  364. package/dist/utils/object.mjs.map +1 -1
  365. package/dist/zod-D4WapgbL.js.map +1 -1
  366. package/dist/zod-K7y5gPX4.cjs.map +1 -1
  367. package/package.json +16 -16
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteTextArea.cjs","sources":["../../../src/components/TextArea/AutocompleteTextArea.tsx"],"sourcesContent":["'use client';\n\nimport { useConfiguration } from '@intlayer/editor-react';\nimport { type FC, useEffect, useRef, useState } from 'react';\nimport { useAutocomplete } from '../../hooks';\nimport {\n type AutoSizedTextAreaProps,\n AutoSizedTextArea,\n} from './AutoSizeTextArea';\n\nexport const useDebounce = <T,>(value: T, delay: number): T => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cleanup the timer if value changes before 'delay' ms\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n};\n\nexport type AutocompleteTextAreaProps = AutoSizedTextAreaProps & {\n isActive?: boolean;\n suggestion?: string;\n};\n\nexport const AutoCompleteTextarea: FC<AutocompleteTextAreaProps> = ({\n isActive = true,\n suggestion: suggestionProp,\n ...props\n}) => {\n const defaultValue = String(props.value ?? props.defaultValue ?? '');\n const { autocomplete } = useAutocomplete();\n const configuration = useConfiguration();\n const [isTyped, setIsTyped] = useState(false);\n const [text, setText] = useState(defaultValue);\n const [suggestion, setSuggestion] = useState('');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const placeholderRef = useRef<HTMLSpanElement>(null);\n const ghostLayerRef = useRef<HTMLDivElement>(null);\n const [suggestionPosition, setSuggestionPosition] = useState<{\n left: number;\n top: number;\n } | null>(null);\n const [cursorAtFetch, setCursorAtFetch] = useState(-1);\n\n // Only update this “debouncedText” after the user stops typing for 200ms\n const debouncedText = useDebounce(text, 200);\n\n useEffect(() => {\n if (typeof props.value === 'undefined') return;\n setText(defaultValue);\n }, [props.value, props.defaultValue]);\n\n useEffect(() => {\n if (!isActive) return;\n if (!isTyped) return;\n\n const fetchSuggestion = async () => {\n try {\n const cursor =\n textareaRef.current?.selectionStart ?? debouncedText.length;\n const before = debouncedText.slice(0, cursor);\n const after = debouncedText.slice(cursor);\n const numLines = 5;\n const beforeLines = before.split('\\n');\n const contextBeforeLines = beforeLines.slice(\n Math.max(0, beforeLines.length - numLines - 1),\n -1\n );\n const contextBefore = contextBeforeLines.join('\\n');\n const currentLine = beforeLines[beforeLines.length - 1] ?? '';\n const afterLines = after.split('\\n');\n const contextAfter = afterLines.slice(1, numLines + 1).join('\\n');\n\n const response = await autocomplete({\n text: before,\n contextBefore,\n currentLine,\n contextAfter,\n aiOptions: {\n apiKey: configuration.ai?.apiKey,\n model: configuration.ai?.model,\n temperature: configuration.ai?.temperature,\n },\n });\n const autocompletion = response?.data?.autocompletion ?? '';\n\n setSuggestion(autocompletion);\n setCursorAtFetch(cursor);\n } catch (err) {\n console.error('Autocomplete error:', err);\n }\n };\n\n if (debouncedText.length > 3) {\n // Only fetch if user typed more than 3 chars and has paused\n setSuggestion('');\n fetchSuggestion();\n } else {\n // If typed less than threshold, clear the suggestion\n setSuggestion('');\n }\n }, [debouncedText, isActive, autocomplete, configuration]);\n\n useEffect(() => {\n if (\n !suggestion ||\n cursorAtFetch === -1 ||\n !placeholderRef.current ||\n !ghostLayerRef.current\n ) {\n setSuggestionPosition(null);\n return;\n }\n\n const rect = placeholderRef.current.getBoundingClientRect();\n const parentRect = ghostLayerRef.current.getBoundingClientRect();\n setSuggestionPosition({\n left: rect.left - parentRect.left,\n top: rect.top - parentRect.top,\n });\n }, [suggestion, cursorAtFetch, text]);\n\n const acceptSuggestion = () => {\n const currentCursor = textareaRef.current?.selectionStart ?? cursorAtFetch;\n if (currentCursor !== cursorAtFetch) return;\n const newText =\n text.slice(0, currentCursor) + suggestion + text.slice(currentCursor);\n setText(newText);\n setSuggestion('');\n setCursorAtFetch(-1);\n setTimeout(() => {\n textareaRef.current?.focus();\n const newCursorPos = currentCursor + suggestion.length;\n textareaRef.current?.setSelectionRange(newCursorPos, newCursorPos);\n }, 0);\n };\n\n return (\n <div className=\"relative w-full\">\n <div\n ref={ghostLayerRef}\n className=\"pointer-events-none absolute inset-0 whitespace-pre-wrap break-words px-1 py-3 text-base leading-[1.45rem] md:py-1 md:text-sm md:leading-[1.23rem]\"\n aria-hidden=\"true\"\n >\n {suggestion && cursorAtFetch !== -1 ? (\n <>\n <span className=\"align-text-top text-transparent\">\n {text.slice(0, cursorAtFetch)}\n </span>\n <span\n ref={placeholderRef}\n style={{ visibility: 'hidden' }}\n aria-hidden=\"true\"\n >\n {suggestion}\n </span>\n <span className=\"align-text-top text-transparent\">\n {text.slice(cursorAtFetch)}\n </span>\n </>\n ) : (\n <span className=\"align-text-top text-transparent\">{text}</span>\n )}\n {suggestionProp && (\n <span className=\"text-neutral align-text-top\">{suggestionProp}</span>\n )}\n </div>\n {suggestion && suggestionPosition && (\n <div\n className=\"pointer-events-none text-neutral whitespace-pre-wrap break-words text-base leading-[1.45rem] md:text-sm md:leading-[1.23rem]\"\n style={{\n position: 'absolute',\n left: suggestionPosition.left,\n top: suggestionPosition.top,\n }}\n >\n {suggestion}\n </div>\n )}\n <AutoSizedTextArea\n {...props}\n ref={textareaRef}\n value={text}\n onChange={(e) => {\n setIsTyped(true);\n setText(e.target.value);\n setSuggestion('');\n props.onChange?.(e);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Tab' && suggestion) {\n e.preventDefault();\n acceptSuggestion();\n }\n props.onKeyDown?.(e);\n }}\n onSelect={(e) => {\n if (\n suggestion &&\n (e.target as HTMLTextAreaElement).selectionStart !== cursorAtFetch\n ) {\n setSuggestion('');\n setCursorAtFetch(-1);\n }\n props.onSelect?.(e);\n }}\n />\n </div>\n );\n};\n"],"names":["useState","useEffect","useAutocomplete","useConfiguration","useRef","jsxs","Fragment","jsx","AutoSizedTextArea"],"mappings":"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"}
1
+ {"version":3,"file":"AutocompleteTextArea.cjs","sources":["../../../src/components/TextArea/AutocompleteTextArea.tsx"],"sourcesContent":["'use client';\n\nimport { useConfiguration } from '@intlayer/editor-react';\nimport { type FC, useEffect, useRef, useState } from 'react';\nimport { useAutocomplete } from '../../hooks';\nimport {\n type AutoSizedTextAreaProps,\n AutoSizedTextArea,\n} from './AutoSizeTextArea';\n\nexport const useDebounce = <T,>(value: T, delay: number): T => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cleanup the timer if value changes before 'delay' ms\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n};\n\nexport type AutocompleteTextAreaProps = AutoSizedTextAreaProps & {\n isActive?: boolean;\n suggestion?: string;\n};\n\nexport const AutoCompleteTextarea: FC<AutocompleteTextAreaProps> = ({\n isActive = true,\n suggestion: suggestionProp,\n ...props\n}) => {\n const defaultValue = String(props.value ?? props.defaultValue ?? '');\n const { autocomplete } = useAutocomplete();\n const configuration = useConfiguration();\n const [isTyped, setIsTyped] = useState(false);\n const [text, setText] = useState(defaultValue);\n const [suggestion, setSuggestion] = useState('');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const placeholderRef = useRef<HTMLSpanElement>(null);\n const ghostLayerRef = useRef<HTMLDivElement>(null);\n const [suggestionPosition, setSuggestionPosition] = useState<{\n left: number;\n top: number;\n } | null>(null);\n const [cursorAtFetch, setCursorAtFetch] = useState(-1);\n\n // Only update this “debouncedText” after the user stops typing for 200ms\n const debouncedText = useDebounce(text, 200);\n\n useEffect(() => {\n if (typeof props.value === 'undefined') return;\n setText(defaultValue);\n }, [props.value, props.defaultValue]);\n\n useEffect(() => {\n if (!isActive) return;\n if (!isTyped) return;\n\n const fetchSuggestion = async () => {\n try {\n const cursor =\n textareaRef.current?.selectionStart ?? debouncedText.length;\n const before = debouncedText.slice(0, cursor);\n const after = debouncedText.slice(cursor);\n const numLines = 5;\n const beforeLines = before.split('\\n');\n const contextBeforeLines = beforeLines.slice(\n Math.max(0, beforeLines.length - numLines - 1),\n -1\n );\n const contextBefore = contextBeforeLines.join('\\n');\n const currentLine = beforeLines[beforeLines.length - 1] ?? '';\n const afterLines = after.split('\\n');\n const contextAfter = afterLines.slice(1, numLines + 1).join('\\n');\n\n const response = await autocomplete({\n text: before,\n contextBefore,\n currentLine,\n contextAfter,\n aiOptions: {\n apiKey: configuration.ai?.apiKey,\n model: configuration.ai?.model,\n temperature: configuration.ai?.temperature,\n },\n });\n const autocompletion = response?.data?.autocompletion ?? '';\n\n setSuggestion(autocompletion);\n setCursorAtFetch(cursor);\n } catch (err) {\n console.error('Autocomplete error:', err);\n }\n };\n\n if (debouncedText.length > 3) {\n // Only fetch if user typed more than 3 chars and has paused\n setSuggestion('');\n fetchSuggestion();\n } else {\n // If typed less than threshold, clear the suggestion\n setSuggestion('');\n }\n }, [debouncedText, isActive, autocomplete, configuration]);\n\n useEffect(() => {\n if (\n !suggestion ||\n cursorAtFetch === -1 ||\n !placeholderRef.current ||\n !ghostLayerRef.current\n ) {\n setSuggestionPosition(null);\n return;\n }\n\n const rect = placeholderRef.current.getBoundingClientRect();\n const parentRect = ghostLayerRef.current.getBoundingClientRect();\n setSuggestionPosition({\n left: rect.left - parentRect.left,\n top: rect.top - parentRect.top,\n });\n }, [suggestion, cursorAtFetch, text]);\n\n const acceptSuggestion = () => {\n const currentCursor = textareaRef.current?.selectionStart ?? cursorAtFetch;\n if (currentCursor !== cursorAtFetch) return;\n const newText =\n text.slice(0, currentCursor) + suggestion + text.slice(currentCursor);\n setText(newText);\n setSuggestion('');\n setCursorAtFetch(-1);\n setTimeout(() => {\n textareaRef.current?.focus();\n const newCursorPos = currentCursor + suggestion.length;\n textareaRef.current?.setSelectionRange(newCursorPos, newCursorPos);\n }, 0);\n };\n\n return (\n <div className=\"relative w-full\">\n <div\n ref={ghostLayerRef}\n className=\"pointer-events-none absolute inset-0 whitespace-pre-wrap break-words px-1 py-3 text-base leading-[1.45rem] md:py-1 md:text-sm md:leading-[1.23rem]\"\n aria-hidden=\"true\"\n >\n {suggestion && cursorAtFetch !== -1 ? (\n <>\n <span className=\"align-text-top text-transparent\">\n {text.slice(0, cursorAtFetch)}\n </span>\n <span\n ref={placeholderRef}\n style={{ visibility: 'hidden' }}\n aria-hidden=\"true\"\n >\n {suggestion}\n </span>\n <span className=\"align-text-top text-transparent\">\n {text.slice(cursorAtFetch)}\n </span>\n </>\n ) : (\n <span className=\"align-text-top text-transparent\">{text}</span>\n )}\n {suggestionProp && (\n <span className=\"text-neutral align-text-top\">{suggestionProp}</span>\n )}\n </div>\n {suggestion && suggestionPosition && (\n <div\n className=\"pointer-events-none text-neutral whitespace-pre-wrap break-words text-base leading-[1.45rem] md:text-sm md:leading-[1.23rem]\"\n style={{\n position: 'absolute',\n left: suggestionPosition.left,\n top: suggestionPosition.top,\n }}\n >\n {suggestion}\n </div>\n )}\n <AutoSizedTextArea\n {...props}\n ref={textareaRef}\n value={text}\n onChange={(e) => {\n setIsTyped(true);\n setText(e.target.value);\n setSuggestion('');\n props.onChange?.(e);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Tab' && suggestion) {\n e.preventDefault();\n acceptSuggestion();\n }\n props.onKeyDown?.(e);\n }}\n onSelect={(e) => {\n if (\n suggestion &&\n (e.target as HTMLTextAreaElement).selectionStart !== cursorAtFetch\n ) {\n setSuggestion('');\n setCursorAtFetch(-1);\n }\n props.onSelect?.(e);\n }}\n />\n </div>\n );\n};\n"],"names":["useState","useEffect","useAutocomplete","useConfiguration","useRef","jsxs","Fragment","jsx","AutoSizedTextArea"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"AutocompleteTextArea.mjs","sources":["../../../src/components/TextArea/AutocompleteTextArea.tsx"],"sourcesContent":["'use client';\n\nimport { useConfiguration } from '@intlayer/editor-react';\nimport { type FC, useEffect, useRef, useState } from 'react';\nimport { useAutocomplete } from '../../hooks';\nimport {\n type AutoSizedTextAreaProps,\n AutoSizedTextArea,\n} from './AutoSizeTextArea';\n\nexport const useDebounce = <T,>(value: T, delay: number): T => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cleanup the timer if value changes before 'delay' ms\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n};\n\nexport type AutocompleteTextAreaProps = AutoSizedTextAreaProps & {\n isActive?: boolean;\n suggestion?: string;\n};\n\nexport const AutoCompleteTextarea: FC<AutocompleteTextAreaProps> = ({\n isActive = true,\n suggestion: suggestionProp,\n ...props\n}) => {\n const defaultValue = String(props.value ?? props.defaultValue ?? '');\n const { autocomplete } = useAutocomplete();\n const configuration = useConfiguration();\n const [isTyped, setIsTyped] = useState(false);\n const [text, setText] = useState(defaultValue);\n const [suggestion, setSuggestion] = useState('');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const placeholderRef = useRef<HTMLSpanElement>(null);\n const ghostLayerRef = useRef<HTMLDivElement>(null);\n const [suggestionPosition, setSuggestionPosition] = useState<{\n left: number;\n top: number;\n } | null>(null);\n const [cursorAtFetch, setCursorAtFetch] = useState(-1);\n\n // Only update this “debouncedText” after the user stops typing for 200ms\n const debouncedText = useDebounce(text, 200);\n\n useEffect(() => {\n if (typeof props.value === 'undefined') return;\n setText(defaultValue);\n }, [props.value, props.defaultValue]);\n\n useEffect(() => {\n if (!isActive) return;\n if (!isTyped) return;\n\n const fetchSuggestion = async () => {\n try {\n const cursor =\n textareaRef.current?.selectionStart ?? debouncedText.length;\n const before = debouncedText.slice(0, cursor);\n const after = debouncedText.slice(cursor);\n const numLines = 5;\n const beforeLines = before.split('\\n');\n const contextBeforeLines = beforeLines.slice(\n Math.max(0, beforeLines.length - numLines - 1),\n -1\n );\n const contextBefore = contextBeforeLines.join('\\n');\n const currentLine = beforeLines[beforeLines.length - 1] ?? '';\n const afterLines = after.split('\\n');\n const contextAfter = afterLines.slice(1, numLines + 1).join('\\n');\n\n const response = await autocomplete({\n text: before,\n contextBefore,\n currentLine,\n contextAfter,\n aiOptions: {\n apiKey: configuration.ai?.apiKey,\n model: configuration.ai?.model,\n temperature: configuration.ai?.temperature,\n },\n });\n const autocompletion = response?.data?.autocompletion ?? '';\n\n setSuggestion(autocompletion);\n setCursorAtFetch(cursor);\n } catch (err) {\n console.error('Autocomplete error:', err);\n }\n };\n\n if (debouncedText.length > 3) {\n // Only fetch if user typed more than 3 chars and has paused\n setSuggestion('');\n fetchSuggestion();\n } else {\n // If typed less than threshold, clear the suggestion\n setSuggestion('');\n }\n }, [debouncedText, isActive, autocomplete, configuration]);\n\n useEffect(() => {\n if (\n !suggestion ||\n cursorAtFetch === -1 ||\n !placeholderRef.current ||\n !ghostLayerRef.current\n ) {\n setSuggestionPosition(null);\n return;\n }\n\n const rect = placeholderRef.current.getBoundingClientRect();\n const parentRect = ghostLayerRef.current.getBoundingClientRect();\n setSuggestionPosition({\n left: rect.left - parentRect.left,\n top: rect.top - parentRect.top,\n });\n }, [suggestion, cursorAtFetch, text]);\n\n const acceptSuggestion = () => {\n const currentCursor = textareaRef.current?.selectionStart ?? cursorAtFetch;\n if (currentCursor !== cursorAtFetch) return;\n const newText =\n text.slice(0, currentCursor) + suggestion + text.slice(currentCursor);\n setText(newText);\n setSuggestion('');\n setCursorAtFetch(-1);\n setTimeout(() => {\n textareaRef.current?.focus();\n const newCursorPos = currentCursor + suggestion.length;\n textareaRef.current?.setSelectionRange(newCursorPos, newCursorPos);\n }, 0);\n };\n\n return (\n <div className=\"relative w-full\">\n <div\n ref={ghostLayerRef}\n className=\"pointer-events-none absolute inset-0 whitespace-pre-wrap break-words px-1 py-3 text-base leading-[1.45rem] md:py-1 md:text-sm md:leading-[1.23rem]\"\n aria-hidden=\"true\"\n >\n {suggestion && cursorAtFetch !== -1 ? (\n <>\n <span className=\"align-text-top text-transparent\">\n {text.slice(0, cursorAtFetch)}\n </span>\n <span\n ref={placeholderRef}\n style={{ visibility: 'hidden' }}\n aria-hidden=\"true\"\n >\n {suggestion}\n </span>\n <span className=\"align-text-top text-transparent\">\n {text.slice(cursorAtFetch)}\n </span>\n </>\n ) : (\n <span className=\"align-text-top text-transparent\">{text}</span>\n )}\n {suggestionProp && (\n <span className=\"text-neutral align-text-top\">{suggestionProp}</span>\n )}\n </div>\n {suggestion && suggestionPosition && (\n <div\n className=\"pointer-events-none text-neutral whitespace-pre-wrap break-words text-base leading-[1.45rem] md:text-sm md:leading-[1.23rem]\"\n style={{\n position: 'absolute',\n left: suggestionPosition.left,\n top: suggestionPosition.top,\n }}\n >\n {suggestion}\n </div>\n )}\n <AutoSizedTextArea\n {...props}\n ref={textareaRef}\n value={text}\n onChange={(e) => {\n setIsTyped(true);\n setText(e.target.value);\n setSuggestion('');\n props.onChange?.(e);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Tab' && suggestion) {\n e.preventDefault();\n acceptSuggestion();\n }\n props.onKeyDown?.(e);\n }}\n onSelect={(e) => {\n if (\n suggestion &&\n (e.target as HTMLTextAreaElement).selectionStart !== cursorAtFetch\n ) {\n setSuggestion('');\n setCursorAtFetch(-1);\n }\n props.onSelect?.(e);\n }}\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AutocompleteTextArea.mjs","sources":["../../../src/components/TextArea/AutocompleteTextArea.tsx"],"sourcesContent":["'use client';\n\nimport { useConfiguration } from '@intlayer/editor-react';\nimport { type FC, useEffect, useRef, useState } from 'react';\nimport { useAutocomplete } from '../../hooks';\nimport {\n type AutoSizedTextAreaProps,\n AutoSizedTextArea,\n} from './AutoSizeTextArea';\n\nexport const useDebounce = <T,>(value: T, delay: number): T => {\n const [debouncedValue, setDebouncedValue] = useState<T>(value);\n\n useEffect(() => {\n const timer = setTimeout(() => {\n setDebouncedValue(value);\n }, delay);\n\n // Cleanup the timer if value changes before 'delay' ms\n return () => clearTimeout(timer);\n }, [value, delay]);\n\n return debouncedValue;\n};\n\nexport type AutocompleteTextAreaProps = AutoSizedTextAreaProps & {\n isActive?: boolean;\n suggestion?: string;\n};\n\nexport const AutoCompleteTextarea: FC<AutocompleteTextAreaProps> = ({\n isActive = true,\n suggestion: suggestionProp,\n ...props\n}) => {\n const defaultValue = String(props.value ?? props.defaultValue ?? '');\n const { autocomplete } = useAutocomplete();\n const configuration = useConfiguration();\n const [isTyped, setIsTyped] = useState(false);\n const [text, setText] = useState(defaultValue);\n const [suggestion, setSuggestion] = useState('');\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n const placeholderRef = useRef<HTMLSpanElement>(null);\n const ghostLayerRef = useRef<HTMLDivElement>(null);\n const [suggestionPosition, setSuggestionPosition] = useState<{\n left: number;\n top: number;\n } | null>(null);\n const [cursorAtFetch, setCursorAtFetch] = useState(-1);\n\n // Only update this “debouncedText” after the user stops typing for 200ms\n const debouncedText = useDebounce(text, 200);\n\n useEffect(() => {\n if (typeof props.value === 'undefined') return;\n setText(defaultValue);\n }, [props.value, props.defaultValue]);\n\n useEffect(() => {\n if (!isActive) return;\n if (!isTyped) return;\n\n const fetchSuggestion = async () => {\n try {\n const cursor =\n textareaRef.current?.selectionStart ?? debouncedText.length;\n const before = debouncedText.slice(0, cursor);\n const after = debouncedText.slice(cursor);\n const numLines = 5;\n const beforeLines = before.split('\\n');\n const contextBeforeLines = beforeLines.slice(\n Math.max(0, beforeLines.length - numLines - 1),\n -1\n );\n const contextBefore = contextBeforeLines.join('\\n');\n const currentLine = beforeLines[beforeLines.length - 1] ?? '';\n const afterLines = after.split('\\n');\n const contextAfter = afterLines.slice(1, numLines + 1).join('\\n');\n\n const response = await autocomplete({\n text: before,\n contextBefore,\n currentLine,\n contextAfter,\n aiOptions: {\n apiKey: configuration.ai?.apiKey,\n model: configuration.ai?.model,\n temperature: configuration.ai?.temperature,\n },\n });\n const autocompletion = response?.data?.autocompletion ?? '';\n\n setSuggestion(autocompletion);\n setCursorAtFetch(cursor);\n } catch (err) {\n console.error('Autocomplete error:', err);\n }\n };\n\n if (debouncedText.length > 3) {\n // Only fetch if user typed more than 3 chars and has paused\n setSuggestion('');\n fetchSuggestion();\n } else {\n // If typed less than threshold, clear the suggestion\n setSuggestion('');\n }\n }, [debouncedText, isActive, autocomplete, configuration]);\n\n useEffect(() => {\n if (\n !suggestion ||\n cursorAtFetch === -1 ||\n !placeholderRef.current ||\n !ghostLayerRef.current\n ) {\n setSuggestionPosition(null);\n return;\n }\n\n const rect = placeholderRef.current.getBoundingClientRect();\n const parentRect = ghostLayerRef.current.getBoundingClientRect();\n setSuggestionPosition({\n left: rect.left - parentRect.left,\n top: rect.top - parentRect.top,\n });\n }, [suggestion, cursorAtFetch, text]);\n\n const acceptSuggestion = () => {\n const currentCursor = textareaRef.current?.selectionStart ?? cursorAtFetch;\n if (currentCursor !== cursorAtFetch) return;\n const newText =\n text.slice(0, currentCursor) + suggestion + text.slice(currentCursor);\n setText(newText);\n setSuggestion('');\n setCursorAtFetch(-1);\n setTimeout(() => {\n textareaRef.current?.focus();\n const newCursorPos = currentCursor + suggestion.length;\n textareaRef.current?.setSelectionRange(newCursorPos, newCursorPos);\n }, 0);\n };\n\n return (\n <div className=\"relative w-full\">\n <div\n ref={ghostLayerRef}\n className=\"pointer-events-none absolute inset-0 whitespace-pre-wrap break-words px-1 py-3 text-base leading-[1.45rem] md:py-1 md:text-sm md:leading-[1.23rem]\"\n aria-hidden=\"true\"\n >\n {suggestion && cursorAtFetch !== -1 ? (\n <>\n <span className=\"align-text-top text-transparent\">\n {text.slice(0, cursorAtFetch)}\n </span>\n <span\n ref={placeholderRef}\n style={{ visibility: 'hidden' }}\n aria-hidden=\"true\"\n >\n {suggestion}\n </span>\n <span className=\"align-text-top text-transparent\">\n {text.slice(cursorAtFetch)}\n </span>\n </>\n ) : (\n <span className=\"align-text-top text-transparent\">{text}</span>\n )}\n {suggestionProp && (\n <span className=\"text-neutral align-text-top\">{suggestionProp}</span>\n )}\n </div>\n {suggestion && suggestionPosition && (\n <div\n className=\"pointer-events-none text-neutral whitespace-pre-wrap break-words text-base leading-[1.45rem] md:text-sm md:leading-[1.23rem]\"\n style={{\n position: 'absolute',\n left: suggestionPosition.left,\n top: suggestionPosition.top,\n }}\n >\n {suggestion}\n </div>\n )}\n <AutoSizedTextArea\n {...props}\n ref={textareaRef}\n value={text}\n onChange={(e) => {\n setIsTyped(true);\n setText(e.target.value);\n setSuggestion('');\n props.onChange?.(e);\n }}\n onKeyDown={(e) => {\n if (e.key === 'Tab' && suggestion) {\n e.preventDefault();\n acceptSuggestion();\n }\n props.onKeyDown?.(e);\n }}\n onSelect={(e) => {\n if (\n suggestion &&\n (e.target as HTMLTextAreaElement).selectionStart !== cursorAtFetch\n ) {\n setSuggestion('');\n setCursorAtFetch(-1);\n }\n props.onSelect?.(e);\n }}\n />\n </div>\n );\n};\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TextArea.cjs","sources":["../../../src/components/TextArea/TextArea.tsx"],"sourcesContent":["import type { VariantProps } from 'class-variance-authority';\nimport {\n type TextareaHTMLAttributes,\n type DetailedHTMLProps,\n type FC,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { inputVariants } from '../Input';\n\nexport type TextAreaProps = DetailedHTMLProps<\n DetailedHTMLProps<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n HTMLTextAreaElement\n >,\n HTMLTextAreaElement\n> & {\n validationStyleEnabled?: boolean;\n} & Omit<VariantProps<typeof inputVariants>, 'validationStyleEnabled'>;\n\nexport const TextArea: FC<TextAreaProps> = ({\n className,\n variant,\n validationStyleEnabled = false,\n ...props\n}) => (\n <textarea\n className={cn(\n 'resize-none',\n inputVariants({\n variant,\n validationStyleEnabled: validationStyleEnabled ? 'enabled' : 'disabled',\n className,\n })\n )}\n {...props}\n />\n);\n"],"names":["jsx","cn","inputVariants"],"mappings":";;;;;;;;AAmBO,MAAM,WAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA,yBAAyB;AAAA,EACzB,GAAG;AACL,MACEA,2BAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC,SAAA;AAAA,MACT;AAAA,MACAC,qCAAc;AAAA,QACZ;AAAA,QACA,wBAAwB,yBAAyB,YAAY;AAAA,QAC7D;AAAA,MACD,CAAA;AAAA,IACH;AAAA,IACC,GAAG;AAAA,EAAA;AACN;;"}
1
+ {"version":3,"file":"TextArea.cjs","sources":["../../../src/components/TextArea/TextArea.tsx"],"sourcesContent":["import type { VariantProps } from 'class-variance-authority';\nimport {\n type TextareaHTMLAttributes,\n type DetailedHTMLProps,\n type FC,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { inputVariants } from '../Input';\n\nexport type TextAreaProps = DetailedHTMLProps<\n DetailedHTMLProps<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n HTMLTextAreaElement\n >,\n HTMLTextAreaElement\n> & {\n validationStyleEnabled?: boolean;\n} & Omit<VariantProps<typeof inputVariants>, 'validationStyleEnabled'>;\n\nexport const TextArea: FC<TextAreaProps> = ({\n className,\n variant,\n validationStyleEnabled = false,\n ...props\n}) => (\n <textarea\n className={cn(\n 'resize-none',\n inputVariants({\n variant,\n validationStyleEnabled: validationStyleEnabled ? 'enabled' : 'disabled',\n className,\n })\n )}\n {...props}\n />\n);\n"],"names":["jsx","cn","inputVariants"],"mappings":";;;;;;;;AAmBO,MAAM,WAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA,yBAAyB;AAAA,EACzB,GAAG;AACL,MACEA,2BAAAA;AAAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAWC,SAAAA;AAAAA,MACT;AAAA,MACAC,qCAAc;AAAA,QACZ;AAAA,QACA,wBAAwB,yBAAyB,YAAY;AAAA,QAC7D;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,IAEF,GAAG;AAAA,EAAA;AACN;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"TextArea.mjs","sources":["../../../src/components/TextArea/TextArea.tsx"],"sourcesContent":["import type { VariantProps } from 'class-variance-authority';\nimport {\n type TextareaHTMLAttributes,\n type DetailedHTMLProps,\n type FC,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { inputVariants } from '../Input';\n\nexport type TextAreaProps = DetailedHTMLProps<\n DetailedHTMLProps<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n HTMLTextAreaElement\n >,\n HTMLTextAreaElement\n> & {\n validationStyleEnabled?: boolean;\n} & Omit<VariantProps<typeof inputVariants>, 'validationStyleEnabled'>;\n\nexport const TextArea: FC<TextAreaProps> = ({\n className,\n variant,\n validationStyleEnabled = false,\n ...props\n}) => (\n <textarea\n className={cn(\n 'resize-none',\n inputVariants({\n variant,\n validationStyleEnabled: validationStyleEnabled ? 'enabled' : 'disabled',\n className,\n })\n )}\n {...props}\n />\n);\n"],"names":[],"mappings":";;;;;;AAmBO,MAAM,WAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA,yBAAyB;AAAA,EACzB,GAAG;AACL,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA,cAAc;AAAA,QACZ;AAAA,QACA,wBAAwB,yBAAyB,YAAY;AAAA,QAC7D;AAAA,MACD,CAAA;AAAA,IACH;AAAA,IACC,GAAG;AAAA,EAAA;AACN;"}
1
+ {"version":3,"file":"TextArea.mjs","sources":["../../../src/components/TextArea/TextArea.tsx"],"sourcesContent":["import type { VariantProps } from 'class-variance-authority';\nimport {\n type TextareaHTMLAttributes,\n type DetailedHTMLProps,\n type FC,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { inputVariants } from '../Input';\n\nexport type TextAreaProps = DetailedHTMLProps<\n DetailedHTMLProps<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n HTMLTextAreaElement\n >,\n HTMLTextAreaElement\n> & {\n validationStyleEnabled?: boolean;\n} & Omit<VariantProps<typeof inputVariants>, 'validationStyleEnabled'>;\n\nexport const TextArea: FC<TextAreaProps> = ({\n className,\n variant,\n validationStyleEnabled = false,\n ...props\n}) => (\n <textarea\n className={cn(\n 'resize-none',\n inputVariants({\n variant,\n validationStyleEnabled: validationStyleEnabled ? 'enabled' : 'disabled',\n className,\n })\n )}\n {...props}\n />\n);\n"],"names":[],"mappings":";;;;;;AAmBO,MAAM,WAA8B,CAAC;AAAA,EAC1C;AAAA,EACA;AAAA,EACA,yBAAyB;AAAA,EACzB,GAAG;AACL,MACE;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA,cAAc;AAAA,QACZ;AAAA,QACA,wBAAwB,yBAAyB,YAAY;AAAA,QAC7D;AAAA,MAAA,CACD;AAAA,IAAA;AAAA,IAEF,GAAG;AAAA,EAAA;AACN;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DesktopThemeSwitcher.cjs","sources":["../../../src/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.tsx"],"sourcesContent":["'use client';\n\nimport { Moon, Sun, CircleDashed } from 'lucide-react';\nimport { useState, type FC } from 'react';\nimport { type ButtonProps, Button } from '../Button';\nimport { Container } from '../Container';\nimport { DropDown } from '../DropDown';\nimport { Modes } from './types';\n\nconst ButtonItem: FC<ButtonProps> = ({ Icon, children, ...props }) => (\n <div className=\"relative w-full p-0.5\">\n <Button\n className=\"hover:bg-text/10 focus:bg-text-opposite/20 focus:outline-hidden w-full cursor-pointer rounded-lg p-1 text-left disabled:text-white/25\"\n Icon={Icon}\n data-mode=\"system\"\n role=\"option\"\n variant=\"none\"\n {...props}\n >\n {children}\n </Button>\n </div>\n);\n\ntype DesktopThemeSwitcherProps = {\n theme: Modes;\n setTheme: (theme: Modes) => void;\n systemTheme: Modes;\n};\n\nexport const DesktopThemeSwitcher: FC<DesktopThemeSwitcherProps> = ({\n theme,\n setTheme,\n systemTheme,\n}) => {\n const isThemeSystemTheme = systemTheme === theme;\n const defaultMode = isThemeSystemTheme ? Modes.system : theme;\n\n const [mode, setMode] = useState<Modes>(defaultMode);\n\n const switchMode = (mode: Modes) => {\n if (mode === Modes.system) {\n setTheme(systemTheme ?? Modes.light);\n } else {\n setTheme(mode);\n }\n setMode(mode);\n };\n\n const panelIdentifier = 'theme-switcher';\n\n return (\n <DropDown identifier={panelIdentifier}>\n <DropDown.Trigger\n className=\"p-2\"\n identifier={panelIdentifier}\n aria-label=\"Theme selector\"\n >\n {mode === Modes.system && <CircleDashed data-mode=\"system\" />}\n {mode === Modes.light && <Sun data-mode=\"light\" />}\n {mode === Modes.dark && <Moon data-mode=\"dark\" />}\n </DropDown.Trigger>\n\n <DropDown.Panel identifier={panelIdentifier} isFocusable isOverable>\n <Container className=\"min-w-[100px] items-start p-1\" separator=\"y\">\n <ButtonItem\n Icon={CircleDashed}\n onClick={() => switchMode(Modes.system)}\n isActive={mode === Modes.system}\n label=\"Restore to system mode\"\n >\n System\n </ButtonItem>\n <ButtonItem\n Icon={Sun}\n onClick={() => switchMode(Modes.light)}\n isActive={mode === Modes.light}\n label=\"Switch to light mode\"\n >\n Light\n </ButtonItem>\n <ButtonItem\n Icon={Moon}\n onClick={() => switchMode(Modes.dark)}\n isActive={mode === Modes.dark}\n label=\"Switch to dark mode\"\n >\n Dark\n </ButtonItem>\n </Container>\n </DropDown.Panel>\n </DropDown>\n );\n};\n"],"names":["jsx","Button","Modes","useState","mode","jsxs","DropDown","CircleDashed","Sun","Moon","Container"],"mappings":";;;;;;;;;;AASA,MAAM,aAA8B,CAAC,EAAE,MAAM,UAAU,GAAG,MAAA,MACxDA,2BAAA,IAAC,OAAI,EAAA,WAAU,yBACb,UAAAA,2BAAA;AAAA,EAACC,yBAAA;AAAA,EAAA;AAAA,IACC,WAAU;AAAA,IACV;AAAA,IACA,aAAU;AAAA,IACV,MAAK;AAAA,IACL,SAAQ;AAAA,IACP,GAAG;AAAA,IAEH;AAAA,EAAA;AACH,GACF;AASK,MAAM,uBAAsD,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,qBAAqB,gBAAgB;AACrC,QAAA,cAAc,qBAAqBC,uCAAA,MAAM,SAAS;AAExD,QAAM,CAAC,MAAM,OAAO,IAAIC,aAAAA,SAAgB,WAAW;AAE7C,QAAA,aAAa,CAACC,UAAgB;AAC9BA,QAAAA,UAASF,6CAAM,QAAQ;AAChB,eAAA,eAAeA,6CAAM,KAAK;AAAA,IAAA,OAC9B;AACL,eAASE,KAAI;AAAA,IAAA;AAEf,YAAQA,KAAI;AAAA,EACd;AAEA,QAAM,kBAAkB;AAGtB,SAAAC,2BAAA,KAACC,0BAAS,UAAA,EAAA,YAAY,iBACpB,UAAA;AAAA,IAAAD,2BAAA;AAAA,MAACC,0BAAAA,SAAS;AAAA,MAAT;AAAA,QACC,WAAU;AAAA,QACV,YAAY;AAAA,QACZ,cAAW;AAAA,QAEV,UAAA;AAAA,UAAA,SAASJ,uCAAM,MAAA,UAAWF,2BAAAA,IAAAO,YAAAA,cAAA,EAAa,aAAU,UAAS;AAAA,UAC1D,SAASL,uCAAM,MAAA,SAAUF,2BAAAA,IAAAQ,YAAAA,KAAA,EAAI,aAAU,SAAQ;AAAA,UAC/C,SAASN,uCAAM,MAAA,QAASF,2BAAAA,IAAAS,YAAAA,MAAA,EAAK,aAAU,OAAO,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACjD;AAAA,IAECT,2BAAA,IAAAM,0BAAA,SAAS,OAAT,EAAe,YAAY,iBAAiB,aAAW,MAAC,YAAU,MACjE,UAACD,2BAAAA,KAAAK,2BAAAA,WAAA,EAAU,WAAU,iCAAgC,WAAU,KAC7D,UAAA;AAAA,MAAAV,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAMO,YAAA;AAAA,UACN,SAAS,MAAM,WAAWL,uCAAA,MAAM,MAAM;AAAA,UACtC,UAAU,SAASA,uCAAAA,MAAM;AAAA,UACzB,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,MACAF,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAMQ,YAAA;AAAA,UACN,SAAS,MAAM,WAAWN,uCAAA,MAAM,KAAK;AAAA,UACrC,UAAU,SAASA,uCAAAA,MAAM;AAAA,UACzB,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,MACAF,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAMS,YAAA;AAAA,UACN,SAAS,MAAM,WAAWP,uCAAA,MAAM,IAAI;AAAA,UACpC,UAAU,SAASA,uCAAAA,MAAM;AAAA,UACzB,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,EAAA,CACF,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;;"}
1
+ {"version":3,"file":"DesktopThemeSwitcher.cjs","sources":["../../../src/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.tsx"],"sourcesContent":["'use client';\n\nimport { Moon, Sun, CircleDashed } from 'lucide-react';\nimport { useState, type FC } from 'react';\nimport { type ButtonProps, Button } from '../Button';\nimport { Container } from '../Container';\nimport { DropDown } from '../DropDown';\nimport { Modes } from './types';\n\nconst ButtonItem: FC<ButtonProps> = ({ Icon, children, ...props }) => (\n <div className=\"relative w-full p-0.5\">\n <Button\n className=\"hover:bg-text/10 focus:bg-text-opposite/20 focus:outline-hidden w-full cursor-pointer rounded-lg p-1 text-left disabled:text-white/25\"\n Icon={Icon}\n data-mode=\"system\"\n role=\"option\"\n variant=\"none\"\n {...props}\n >\n {children}\n </Button>\n </div>\n);\n\ntype DesktopThemeSwitcherProps = {\n theme: Modes;\n setTheme: (theme: Modes) => void;\n systemTheme: Modes;\n};\n\nexport const DesktopThemeSwitcher: FC<DesktopThemeSwitcherProps> = ({\n theme,\n setTheme,\n systemTheme,\n}) => {\n const isThemeSystemTheme = systemTheme === theme;\n const defaultMode = isThemeSystemTheme ? Modes.system : theme;\n\n const [mode, setMode] = useState<Modes>(defaultMode);\n\n const switchMode = (mode: Modes) => {\n if (mode === Modes.system) {\n setTheme(systemTheme ?? Modes.light);\n } else {\n setTheme(mode);\n }\n setMode(mode);\n };\n\n const panelIdentifier = 'theme-switcher';\n\n return (\n <DropDown identifier={panelIdentifier}>\n <DropDown.Trigger\n className=\"p-2\"\n identifier={panelIdentifier}\n aria-label=\"Theme selector\"\n >\n {mode === Modes.system && <CircleDashed data-mode=\"system\" />}\n {mode === Modes.light && <Sun data-mode=\"light\" />}\n {mode === Modes.dark && <Moon data-mode=\"dark\" />}\n </DropDown.Trigger>\n\n <DropDown.Panel identifier={panelIdentifier} isFocusable isOverable>\n <Container className=\"min-w-[100px] items-start p-1\" separator=\"y\">\n <ButtonItem\n Icon={CircleDashed}\n onClick={() => switchMode(Modes.system)}\n isActive={mode === Modes.system}\n label=\"Restore to system mode\"\n >\n System\n </ButtonItem>\n <ButtonItem\n Icon={Sun}\n onClick={() => switchMode(Modes.light)}\n isActive={mode === Modes.light}\n label=\"Switch to light mode\"\n >\n Light\n </ButtonItem>\n <ButtonItem\n Icon={Moon}\n onClick={() => switchMode(Modes.dark)}\n isActive={mode === Modes.dark}\n label=\"Switch to dark mode\"\n >\n Dark\n </ButtonItem>\n </Container>\n </DropDown.Panel>\n </DropDown>\n );\n};\n"],"names":["jsx","Button","Modes","useState","mode","jsxs","DropDown","CircleDashed","Sun","Moon","Container"],"mappings":";;;;;;;;;;AASA,MAAM,aAA8B,CAAC,EAAE,MAAM,UAAU,GAAG,MAAA,MACxDA,2BAAAA,IAAC,OAAA,EAAI,WAAU,yBACb,UAAAA,2BAAAA;AAAAA,EAACC,yBAAAA;AAAAA,EAAA;AAAA,IACC,WAAU;AAAA,IACV;AAAA,IACA,aAAU;AAAA,IACV,MAAK;AAAA,IACL,SAAQ;AAAA,IACP,GAAG;AAAA,IAEH;AAAA,EAAA;AACH,GACF;AASK,MAAM,uBAAsD,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,qBAAqB,gBAAgB;AAC3C,QAAM,cAAc,qBAAqBC,uCAAAA,MAAM,SAAS;AAExD,QAAM,CAAC,MAAM,OAAO,IAAIC,aAAAA,SAAgB,WAAW;AAEnD,QAAM,aAAa,CAACC,UAAgB;AAClC,QAAIA,UAASF,uCAAAA,MAAM,QAAQ;AACzB,eAAS,eAAeA,uCAAAA,MAAM,KAAK;AAAA,IACrC,OAAO;AACL,eAASE,KAAI;AAAA,IACf;AACA,YAAQA,KAAI;AAAA,EACd;AAEA,QAAM,kBAAkB;AAExB,SACEC,2BAAAA,KAACC,0BAAAA,UAAA,EAAS,YAAY,iBACpB,UAAA;AAAA,IAAAD,2BAAAA;AAAAA,MAACC,0BAAAA,SAAS;AAAA,MAAT;AAAA,QACC,WAAU;AAAA,QACV,YAAY;AAAA,QACZ,cAAW;AAAA,QAEV,UAAA;AAAA,UAAA,SAASJ,uCAAAA,MAAM,UAAUF,2BAAAA,IAACO,YAAAA,cAAA,EAAa,aAAU,UAAS;AAAA,UAC1D,SAASL,uCAAAA,MAAM,SAASF,2BAAAA,IAACQ,YAAAA,KAAA,EAAI,aAAU,SAAQ;AAAA,UAC/C,SAASN,uCAAAA,MAAM,QAAQF,2BAAAA,IAACS,YAAAA,MAAA,EAAK,aAAU,OAAA,CAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGjDT,2BAAAA,IAACM,0BAAAA,SAAS,OAAT,EAAe,YAAY,iBAAiB,aAAW,MAAC,YAAU,MACjE,UAAAD,2BAAAA,KAACK,2BAAAA,WAAA,EAAU,WAAU,iCAAgC,WAAU,KAC7D,UAAA;AAAA,MAAAV,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAMO,YAAAA;AAAAA,UACN,SAAS,MAAM,WAAWL,uCAAAA,MAAM,MAAM;AAAA,UACtC,UAAU,SAASA,uCAAAA,MAAM;AAAA,UACzB,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGDF,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAMQ,YAAAA;AAAAA,UACN,SAAS,MAAM,WAAWN,uCAAAA,MAAM,KAAK;AAAA,UACrC,UAAU,SAASA,uCAAAA,MAAM;AAAA,UACzB,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGDF,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAMS,YAAAA;AAAAA,UACN,SAAS,MAAM,WAAWP,uCAAAA,MAAM,IAAI;AAAA,UACpC,UAAU,SAASA,uCAAAA,MAAM;AAAA,UACzB,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,EAAA,CACF,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"DesktopThemeSwitcher.mjs","sources":["../../../src/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.tsx"],"sourcesContent":["'use client';\n\nimport { Moon, Sun, CircleDashed } from 'lucide-react';\nimport { useState, type FC } from 'react';\nimport { type ButtonProps, Button } from '../Button';\nimport { Container } from '../Container';\nimport { DropDown } from '../DropDown';\nimport { Modes } from './types';\n\nconst ButtonItem: FC<ButtonProps> = ({ Icon, children, ...props }) => (\n <div className=\"relative w-full p-0.5\">\n <Button\n className=\"hover:bg-text/10 focus:bg-text-opposite/20 focus:outline-hidden w-full cursor-pointer rounded-lg p-1 text-left disabled:text-white/25\"\n Icon={Icon}\n data-mode=\"system\"\n role=\"option\"\n variant=\"none\"\n {...props}\n >\n {children}\n </Button>\n </div>\n);\n\ntype DesktopThemeSwitcherProps = {\n theme: Modes;\n setTheme: (theme: Modes) => void;\n systemTheme: Modes;\n};\n\nexport const DesktopThemeSwitcher: FC<DesktopThemeSwitcherProps> = ({\n theme,\n setTheme,\n systemTheme,\n}) => {\n const isThemeSystemTheme = systemTheme === theme;\n const defaultMode = isThemeSystemTheme ? Modes.system : theme;\n\n const [mode, setMode] = useState<Modes>(defaultMode);\n\n const switchMode = (mode: Modes) => {\n if (mode === Modes.system) {\n setTheme(systemTheme ?? Modes.light);\n } else {\n setTheme(mode);\n }\n setMode(mode);\n };\n\n const panelIdentifier = 'theme-switcher';\n\n return (\n <DropDown identifier={panelIdentifier}>\n <DropDown.Trigger\n className=\"p-2\"\n identifier={panelIdentifier}\n aria-label=\"Theme selector\"\n >\n {mode === Modes.system && <CircleDashed data-mode=\"system\" />}\n {mode === Modes.light && <Sun data-mode=\"light\" />}\n {mode === Modes.dark && <Moon data-mode=\"dark\" />}\n </DropDown.Trigger>\n\n <DropDown.Panel identifier={panelIdentifier} isFocusable isOverable>\n <Container className=\"min-w-[100px] items-start p-1\" separator=\"y\">\n <ButtonItem\n Icon={CircleDashed}\n onClick={() => switchMode(Modes.system)}\n isActive={mode === Modes.system}\n label=\"Restore to system mode\"\n >\n System\n </ButtonItem>\n <ButtonItem\n Icon={Sun}\n onClick={() => switchMode(Modes.light)}\n isActive={mode === Modes.light}\n label=\"Switch to light mode\"\n >\n Light\n </ButtonItem>\n <ButtonItem\n Icon={Moon}\n onClick={() => switchMode(Modes.dark)}\n isActive={mode === Modes.dark}\n label=\"Switch to dark mode\"\n >\n Dark\n </ButtonItem>\n </Container>\n </DropDown.Panel>\n </DropDown>\n );\n};\n"],"names":["mode"],"mappings":";;;;;;;;AASA,MAAM,aAA8B,CAAC,EAAE,MAAM,UAAU,GAAG,MAAA,MACxD,oBAAC,OAAI,EAAA,WAAU,yBACb,UAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAU;AAAA,IACV;AAAA,IACA,aAAU;AAAA,IACV,MAAK;AAAA,IACL,SAAQ;AAAA,IACP,GAAG;AAAA,IAEH;AAAA,EAAA;AACH,GACF;AASK,MAAM,uBAAsD,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,qBAAqB,gBAAgB;AACrC,QAAA,cAAc,qBAAqB,MAAM,SAAS;AAExD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAgB,WAAW;AAE7C,QAAA,aAAa,CAACA,UAAgB;AAC9BA,QAAAA,UAAS,MAAM,QAAQ;AAChB,eAAA,eAAe,MAAM,KAAK;AAAA,IAAA,OAC9B;AACL,eAASA,KAAI;AAAA,IAAA;AAEf,YAAQA,KAAI;AAAA,EACd;AAEA,QAAM,kBAAkB;AAGtB,SAAA,qBAAC,UAAS,EAAA,YAAY,iBACpB,UAAA;AAAA,IAAA;AAAA,MAAC,SAAS;AAAA,MAAT;AAAA,QACC,WAAU;AAAA,QACV,YAAY;AAAA,QACZ,cAAW;AAAA,QAEV,UAAA;AAAA,UAAA,SAAS,MAAM,UAAW,oBAAA,cAAA,EAAa,aAAU,UAAS;AAAA,UAC1D,SAAS,MAAM,SAAU,oBAAA,KAAA,EAAI,aAAU,SAAQ;AAAA,UAC/C,SAAS,MAAM,QAAS,oBAAA,MAAA,EAAK,aAAU,OAAO,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IACjD;AAAA,IAEC,oBAAA,SAAS,OAAT,EAAe,YAAY,iBAAiB,aAAW,MAAC,YAAU,MACjE,UAAC,qBAAA,WAAA,EAAU,WAAU,iCAAgC,WAAU,KAC7D,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,SAAS,MAAM,WAAW,MAAM,MAAM;AAAA,UACtC,UAAU,SAAS,MAAM;AAAA,UACzB,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,SAAS,MAAM,WAAW,MAAM,KAAK;AAAA,UACrC,UAAU,SAAS,MAAM;AAAA,UACzB,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAED;AAAA,MACA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,SAAS,MAAM,WAAW,MAAM,IAAI;AAAA,UACpC,UAAU,SAAS,MAAM;AAAA,UACzB,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,EAAA,CACF,EACF,CAAA;AAAA,EAAA,GACF;AAEJ;"}
1
+ {"version":3,"file":"DesktopThemeSwitcher.mjs","sources":["../../../src/components/ThemeSwitcherDropDown/DesktopThemeSwitcher.tsx"],"sourcesContent":["'use client';\n\nimport { Moon, Sun, CircleDashed } from 'lucide-react';\nimport { useState, type FC } from 'react';\nimport { type ButtonProps, Button } from '../Button';\nimport { Container } from '../Container';\nimport { DropDown } from '../DropDown';\nimport { Modes } from './types';\n\nconst ButtonItem: FC<ButtonProps> = ({ Icon, children, ...props }) => (\n <div className=\"relative w-full p-0.5\">\n <Button\n className=\"hover:bg-text/10 focus:bg-text-opposite/20 focus:outline-hidden w-full cursor-pointer rounded-lg p-1 text-left disabled:text-white/25\"\n Icon={Icon}\n data-mode=\"system\"\n role=\"option\"\n variant=\"none\"\n {...props}\n >\n {children}\n </Button>\n </div>\n);\n\ntype DesktopThemeSwitcherProps = {\n theme: Modes;\n setTheme: (theme: Modes) => void;\n systemTheme: Modes;\n};\n\nexport const DesktopThemeSwitcher: FC<DesktopThemeSwitcherProps> = ({\n theme,\n setTheme,\n systemTheme,\n}) => {\n const isThemeSystemTheme = systemTheme === theme;\n const defaultMode = isThemeSystemTheme ? Modes.system : theme;\n\n const [mode, setMode] = useState<Modes>(defaultMode);\n\n const switchMode = (mode: Modes) => {\n if (mode === Modes.system) {\n setTheme(systemTheme ?? Modes.light);\n } else {\n setTheme(mode);\n }\n setMode(mode);\n };\n\n const panelIdentifier = 'theme-switcher';\n\n return (\n <DropDown identifier={panelIdentifier}>\n <DropDown.Trigger\n className=\"p-2\"\n identifier={panelIdentifier}\n aria-label=\"Theme selector\"\n >\n {mode === Modes.system && <CircleDashed data-mode=\"system\" />}\n {mode === Modes.light && <Sun data-mode=\"light\" />}\n {mode === Modes.dark && <Moon data-mode=\"dark\" />}\n </DropDown.Trigger>\n\n <DropDown.Panel identifier={panelIdentifier} isFocusable isOverable>\n <Container className=\"min-w-[100px] items-start p-1\" separator=\"y\">\n <ButtonItem\n Icon={CircleDashed}\n onClick={() => switchMode(Modes.system)}\n isActive={mode === Modes.system}\n label=\"Restore to system mode\"\n >\n System\n </ButtonItem>\n <ButtonItem\n Icon={Sun}\n onClick={() => switchMode(Modes.light)}\n isActive={mode === Modes.light}\n label=\"Switch to light mode\"\n >\n Light\n </ButtonItem>\n <ButtonItem\n Icon={Moon}\n onClick={() => switchMode(Modes.dark)}\n isActive={mode === Modes.dark}\n label=\"Switch to dark mode\"\n >\n Dark\n </ButtonItem>\n </Container>\n </DropDown.Panel>\n </DropDown>\n );\n};\n"],"names":["mode"],"mappings":";;;;;;;;AASA,MAAM,aAA8B,CAAC,EAAE,MAAM,UAAU,GAAG,MAAA,MACxD,oBAAC,OAAA,EAAI,WAAU,yBACb,UAAA;AAAA,EAAC;AAAA,EAAA;AAAA,IACC,WAAU;AAAA,IACV;AAAA,IACA,aAAU;AAAA,IACV,MAAK;AAAA,IACL,SAAQ;AAAA,IACP,GAAG;AAAA,IAEH;AAAA,EAAA;AACH,GACF;AASK,MAAM,uBAAsD,CAAC;AAAA,EAClE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,qBAAqB,gBAAgB;AAC3C,QAAM,cAAc,qBAAqB,MAAM,SAAS;AAExD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAgB,WAAW;AAEnD,QAAM,aAAa,CAACA,UAAgB;AAClC,QAAIA,UAAS,MAAM,QAAQ;AACzB,eAAS,eAAe,MAAM,KAAK;AAAA,IACrC,OAAO;AACL,eAASA,KAAI;AAAA,IACf;AACA,YAAQA,KAAI;AAAA,EACd;AAEA,QAAM,kBAAkB;AAExB,SACE,qBAAC,UAAA,EAAS,YAAY,iBACpB,UAAA;AAAA,IAAA;AAAA,MAAC,SAAS;AAAA,MAAT;AAAA,QACC,WAAU;AAAA,QACV,YAAY;AAAA,QACZ,cAAW;AAAA,QAEV,UAAA;AAAA,UAAA,SAAS,MAAM,UAAU,oBAAC,cAAA,EAAa,aAAU,UAAS;AAAA,UAC1D,SAAS,MAAM,SAAS,oBAAC,KAAA,EAAI,aAAU,SAAQ;AAAA,UAC/C,SAAS,MAAM,QAAQ,oBAAC,MAAA,EAAK,aAAU,OAAA,CAAO;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,IAGjD,oBAAC,SAAS,OAAT,EAAe,YAAY,iBAAiB,aAAW,MAAC,YAAU,MACjE,UAAA,qBAAC,WAAA,EAAU,WAAU,iCAAgC,WAAU,KAC7D,UAAA;AAAA,MAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,SAAS,MAAM,WAAW,MAAM,MAAM;AAAA,UACtC,UAAU,SAAS,MAAM;AAAA,UACzB,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,SAAS,MAAM,WAAW,MAAM,KAAK;AAAA,UACrC,UAAU,SAAS,MAAM;AAAA,UACzB,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAGD;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,MAAM;AAAA,UACN,SAAS,MAAM,WAAW,MAAM,IAAI;AAAA,UACpC,UAAU,SAAS,MAAM;AAAA,UACzB,OAAM;AAAA,UACP,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAED,EAAA,CACF,EAAA,CACF;AAAA,EAAA,GACF;AAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MobileThemeSwitcher.cjs","sources":["../../../src/components/ThemeSwitcherDropDown/MobileThemeSwitcher.tsx"],"sourcesContent":["'use client';\n\nimport { Moon, Sun, CircleDashed } from 'lucide-react';\nimport { useState, type FC } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Modes } from './types';\n\ntype MobileThemeSwitcherProps = {\n theme: Modes;\n systemTheme: Modes;\n setTheme: (theme: Modes) => void;\n};\n\nconst getIconStyle = ({\n isCurrentMode,\n isNextMode,\n}: {\n isCurrentMode: boolean;\n isNextMode: boolean;\n}) =>\n cn(\n `absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2`,\n `opacity-0 transition-opacity duration-300 ease-in-out`,\n isCurrentMode && `opacity-100 group-hover:opacity-0`,\n isNextMode && `group-hover:opacity-100`\n );\n\nexport const MobileThemeSwitcher: FC<MobileThemeSwitcherProps> = ({\n theme,\n systemTheme,\n setTheme,\n}) => {\n const isThemeSystemTheme = systemTheme === theme;\n const defaultMode = isThemeSystemTheme ? Modes.system : theme;\n\n const [mode, setMode] = useState<Modes>(defaultMode);\n\n const nextMode =\n // Start loop\n // If mode is system, toggle the theme inverse of the system theme\n mode === Modes.system\n ? theme === Modes.dark\n ? Modes.light\n : Modes.dark\n : // Close loop\n // If current theme same as system theme, reset by toggle the system theme\n isThemeSystemTheme\n ? Modes.system\n : // Go to next step\n // Otherwise, toggle the remaining theme\n mode === Modes.light\n ? Modes.dark\n : Modes.light;\n\n const toggleMode = () => {\n if (nextMode === Modes.system) {\n setTheme(systemTheme ?? Modes.light);\n } else {\n setTheme(nextMode);\n }\n setMode(nextMode);\n };\n\n return (\n <button className=\"group relative size-10\" aria-label=\"Theme selector\">\n <CircleDashed\n className={getIconStyle({\n isCurrentMode: mode === Modes.system,\n isNextMode: nextMode === Modes.system,\n })}\n onClick={toggleMode}\n data-mode=\"system\"\n />\n\n <Moon\n className={getIconStyle({\n isCurrentMode: mode === Modes.light,\n isNextMode: nextMode === Modes.light,\n })}\n onClick={toggleMode}\n data-mode=\"light\"\n />\n\n <Sun\n className={getIconStyle({\n isCurrentMode: mode === Modes.dark,\n isNextMode: nextMode === Modes.dark,\n })}\n onClick={toggleMode}\n data-mode=\"dark\"\n />\n </button>\n );\n};\n"],"names":["cn","Modes","useState","jsxs","jsx","CircleDashed","Moon","Sun"],"mappings":";;;;;;;;AAaA,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA;AACF,MAIEA,SAAA;AAAA,EACE;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,cAAc;AAChB;AAEK,MAAM,sBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,qBAAqB,gBAAgB;AACrC,QAAA,cAAc,qBAAqBC,uCAAA,MAAM,SAAS;AAExD,QAAM,CAAC,MAAM,OAAO,IAAIC,aAAAA,SAAgB,WAAW;AAE7C,QAAA;AAAA;AAAA;AAAA,IAGJ,SAASD,uCAAAA,MAAM,SACX,UAAUA,uCAAAA,MAAM,OACdA,uCAAA,MAAM,QACNA,uCAAAA,MAAM;AAAA;AAAA;AAAA,MAGR,qBACEA,uCAAM,MAAA;AAAA;AAAA;AAAA,QAGN,SAASA,uCAAAA,MAAM,QACbA,uCAAAA,MAAM,OACNA,uCAAAA,MAAM;AAAA;AAAA;AAAA;AAEhB,QAAM,aAAa,MAAM;AACnB,QAAA,aAAaA,6CAAM,QAAQ;AACpB,eAAA,eAAeA,6CAAM,KAAK;AAAA,IAAA,OAC9B;AACL,eAAS,QAAQ;AAAA,IAAA;AAEnB,YAAQ,QAAQ;AAAA,EAClB;AAEA,SACGE,2BAAAA,KAAA,UAAA,EAAO,WAAU,0BAAyB,cAAW,kBACpD,UAAA;AAAA,IAAAC,2BAAA;AAAA,MAACC,YAAA;AAAA,MAAA;AAAA,QACC,WAAW,aAAa;AAAA,UACtB,eAAe,SAASJ,uCAAAA,MAAM;AAAA,UAC9B,YAAY,aAAaA,6CAAM;AAAA,QAAA,CAChC;AAAA,QACD,SAAS;AAAA,QACT,aAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEAG,2BAAA;AAAA,MAACE,YAAA;AAAA,MAAA;AAAA,QACC,WAAW,aAAa;AAAA,UACtB,eAAe,SAASL,uCAAAA,MAAM;AAAA,UAC9B,YAAY,aAAaA,6CAAM;AAAA,QAAA,CAChC;AAAA,QACD,SAAS;AAAA,QACT,aAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEAG,2BAAA;AAAA,MAACG,YAAA;AAAA,MAAA;AAAA,QACC,WAAW,aAAa;AAAA,UACtB,eAAe,SAASN,uCAAAA,MAAM;AAAA,UAC9B,YAAY,aAAaA,6CAAM;AAAA,QAAA,CAChC;AAAA,QACD,SAAS;AAAA,QACT,aAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ,GACF;AAEJ;;"}
1
+ {"version":3,"file":"MobileThemeSwitcher.cjs","sources":["../../../src/components/ThemeSwitcherDropDown/MobileThemeSwitcher.tsx"],"sourcesContent":["'use client';\n\nimport { Moon, Sun, CircleDashed } from 'lucide-react';\nimport { useState, type FC } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Modes } from './types';\n\ntype MobileThemeSwitcherProps = {\n theme: Modes;\n systemTheme: Modes;\n setTheme: (theme: Modes) => void;\n};\n\nconst getIconStyle = ({\n isCurrentMode,\n isNextMode,\n}: {\n isCurrentMode: boolean;\n isNextMode: boolean;\n}) =>\n cn(\n `absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2`,\n `opacity-0 transition-opacity duration-300 ease-in-out`,\n isCurrentMode && `opacity-100 group-hover:opacity-0`,\n isNextMode && `group-hover:opacity-100`\n );\n\nexport const MobileThemeSwitcher: FC<MobileThemeSwitcherProps> = ({\n theme,\n systemTheme,\n setTheme,\n}) => {\n const isThemeSystemTheme = systemTheme === theme;\n const defaultMode = isThemeSystemTheme ? Modes.system : theme;\n\n const [mode, setMode] = useState<Modes>(defaultMode);\n\n const nextMode =\n // Start loop\n // If mode is system, toggle the theme inverse of the system theme\n mode === Modes.system\n ? theme === Modes.dark\n ? Modes.light\n : Modes.dark\n : // Close loop\n // If current theme same as system theme, reset by toggle the system theme\n isThemeSystemTheme\n ? Modes.system\n : // Go to next step\n // Otherwise, toggle the remaining theme\n mode === Modes.light\n ? Modes.dark\n : Modes.light;\n\n const toggleMode = () => {\n if (nextMode === Modes.system) {\n setTheme(systemTheme ?? Modes.light);\n } else {\n setTheme(nextMode);\n }\n setMode(nextMode);\n };\n\n return (\n <button className=\"group relative size-10\" aria-label=\"Theme selector\">\n <CircleDashed\n className={getIconStyle({\n isCurrentMode: mode === Modes.system,\n isNextMode: nextMode === Modes.system,\n })}\n onClick={toggleMode}\n data-mode=\"system\"\n />\n\n <Moon\n className={getIconStyle({\n isCurrentMode: mode === Modes.light,\n isNextMode: nextMode === Modes.light,\n })}\n onClick={toggleMode}\n data-mode=\"light\"\n />\n\n <Sun\n className={getIconStyle({\n isCurrentMode: mode === Modes.dark,\n isNextMode: nextMode === Modes.dark,\n })}\n onClick={toggleMode}\n data-mode=\"dark\"\n />\n </button>\n );\n};\n"],"names":["cn","Modes","useState","jsxs","jsx","CircleDashed","Moon","Sun"],"mappings":";;;;;;;;AAaA,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA;AACF,MAIEA,SAAAA;AAAAA,EACE;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,cAAc;AAChB;AAEK,MAAM,sBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,qBAAqB,gBAAgB;AAC3C,QAAM,cAAc,qBAAqBC,uCAAAA,MAAM,SAAS;AAExD,QAAM,CAAC,MAAM,OAAO,IAAIC,aAAAA,SAAgB,WAAW;AAEnD,QAAM;AAAA;AAAA;AAAA,IAGJ,SAASD,uCAAAA,MAAM,SACX,UAAUA,uCAAAA,MAAM,OACdA,uCAAAA,MAAM,QACNA,uCAAAA,MAAM;AAAA;AAAA;AAAA,MAGR,qBACEA,uCAAAA,MAAM;AAAA;AAAA;AAAA,QAGN,SAASA,uCAAAA,MAAM,QACbA,uCAAAA,MAAM,OACNA,uCAAAA,MAAM;AAAA;AAAA;AAAA;AAEhB,QAAM,aAAa,MAAM;AACvB,QAAI,aAAaA,uCAAAA,MAAM,QAAQ;AAC7B,eAAS,eAAeA,uCAAAA,MAAM,KAAK;AAAA,IACrC,OAAO;AACL,eAAS,QAAQ;AAAA,IACnB;AACA,YAAQ,QAAQ;AAAA,EAClB;AAEA,SACEE,2BAAAA,KAAC,UAAA,EAAO,WAAU,0BAAyB,cAAW,kBACpD,UAAA;AAAA,IAAAC,2BAAAA;AAAAA,MAACC,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW,aAAa;AAAA,UACtB,eAAe,SAASJ,uCAAAA,MAAM;AAAA,UAC9B,YAAY,aAAaA,6CAAM;AAAA,QAAA,CAChC;AAAA,QACD,SAAS;AAAA,QACT,aAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGZG,2BAAAA;AAAAA,MAACE,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW,aAAa;AAAA,UACtB,eAAe,SAASL,uCAAAA,MAAM;AAAA,UAC9B,YAAY,aAAaA,6CAAM;AAAA,QAAA,CAChC;AAAA,QACD,SAAS;AAAA,QACT,aAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGZG,2BAAAA;AAAAA,MAACG,YAAAA;AAAAA,MAAA;AAAA,QACC,WAAW,aAAa;AAAA,UACtB,eAAe,SAASN,uCAAAA,MAAM;AAAA,UAC9B,YAAY,aAAaA,6CAAM;AAAA,QAAA,CAChC;AAAA,QACD,SAAS;AAAA,QACT,aAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ,GACF;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"MobileThemeSwitcher.mjs","sources":["../../../src/components/ThemeSwitcherDropDown/MobileThemeSwitcher.tsx"],"sourcesContent":["'use client';\n\nimport { Moon, Sun, CircleDashed } from 'lucide-react';\nimport { useState, type FC } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Modes } from './types';\n\ntype MobileThemeSwitcherProps = {\n theme: Modes;\n systemTheme: Modes;\n setTheme: (theme: Modes) => void;\n};\n\nconst getIconStyle = ({\n isCurrentMode,\n isNextMode,\n}: {\n isCurrentMode: boolean;\n isNextMode: boolean;\n}) =>\n cn(\n `absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2`,\n `opacity-0 transition-opacity duration-300 ease-in-out`,\n isCurrentMode && `opacity-100 group-hover:opacity-0`,\n isNextMode && `group-hover:opacity-100`\n );\n\nexport const MobileThemeSwitcher: FC<MobileThemeSwitcherProps> = ({\n theme,\n systemTheme,\n setTheme,\n}) => {\n const isThemeSystemTheme = systemTheme === theme;\n const defaultMode = isThemeSystemTheme ? Modes.system : theme;\n\n const [mode, setMode] = useState<Modes>(defaultMode);\n\n const nextMode =\n // Start loop\n // If mode is system, toggle the theme inverse of the system theme\n mode === Modes.system\n ? theme === Modes.dark\n ? Modes.light\n : Modes.dark\n : // Close loop\n // If current theme same as system theme, reset by toggle the system theme\n isThemeSystemTheme\n ? Modes.system\n : // Go to next step\n // Otherwise, toggle the remaining theme\n mode === Modes.light\n ? Modes.dark\n : Modes.light;\n\n const toggleMode = () => {\n if (nextMode === Modes.system) {\n setTheme(systemTheme ?? Modes.light);\n } else {\n setTheme(nextMode);\n }\n setMode(nextMode);\n };\n\n return (\n <button className=\"group relative size-10\" aria-label=\"Theme selector\">\n <CircleDashed\n className={getIconStyle({\n isCurrentMode: mode === Modes.system,\n isNextMode: nextMode === Modes.system,\n })}\n onClick={toggleMode}\n data-mode=\"system\"\n />\n\n <Moon\n className={getIconStyle({\n isCurrentMode: mode === Modes.light,\n isNextMode: nextMode === Modes.light,\n })}\n onClick={toggleMode}\n data-mode=\"light\"\n />\n\n <Sun\n className={getIconStyle({\n isCurrentMode: mode === Modes.dark,\n isNextMode: nextMode === Modes.dark,\n })}\n onClick={toggleMode}\n data-mode=\"dark\"\n />\n </button>\n );\n};\n"],"names":[],"mappings":";;;;;;AAaA,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA;AACF,MAIE;AAAA,EACE;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,cAAc;AAChB;AAEK,MAAM,sBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,qBAAqB,gBAAgB;AACrC,QAAA,cAAc,qBAAqB,MAAM,SAAS;AAExD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAgB,WAAW;AAE7C,QAAA;AAAA;AAAA;AAAA,IAGJ,SAAS,MAAM,SACX,UAAU,MAAM,OACd,MAAM,QACN,MAAM;AAAA;AAAA;AAAA,MAGR,qBACE,MAAM;AAAA;AAAA;AAAA,QAGN,SAAS,MAAM,QACb,MAAM,OACN,MAAM;AAAA;AAAA;AAAA;AAEhB,QAAM,aAAa,MAAM;AACnB,QAAA,aAAa,MAAM,QAAQ;AACpB,eAAA,eAAe,MAAM,KAAK;AAAA,IAAA,OAC9B;AACL,eAAS,QAAQ;AAAA,IAAA;AAEnB,YAAQ,QAAQ;AAAA,EAClB;AAEA,SACG,qBAAA,UAAA,EAAO,WAAU,0BAAyB,cAAW,kBACpD,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,aAAa;AAAA,UACtB,eAAe,SAAS,MAAM;AAAA,UAC9B,YAAY,aAAa,MAAM;AAAA,QAAA,CAChC;AAAA,QACD,SAAS;AAAA,QACT,aAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,aAAa;AAAA,UACtB,eAAe,SAAS,MAAM;AAAA,UAC9B,YAAY,aAAa,MAAM;AAAA,QAAA,CAChC;AAAA,QACD,SAAS;AAAA,QACT,aAAU;AAAA,MAAA;AAAA,IACZ;AAAA,IAEA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,aAAa;AAAA,UACtB,eAAe,SAAS,MAAM;AAAA,UAC9B,YAAY,aAAa,MAAM;AAAA,QAAA,CAChC;AAAA,QACD,SAAS;AAAA,QACT,aAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ,GACF;AAEJ;"}
1
+ {"version":3,"file":"MobileThemeSwitcher.mjs","sources":["../../../src/components/ThemeSwitcherDropDown/MobileThemeSwitcher.tsx"],"sourcesContent":["'use client';\n\nimport { Moon, Sun, CircleDashed } from 'lucide-react';\nimport { useState, type FC } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Modes } from './types';\n\ntype MobileThemeSwitcherProps = {\n theme: Modes;\n systemTheme: Modes;\n setTheme: (theme: Modes) => void;\n};\n\nconst getIconStyle = ({\n isCurrentMode,\n isNextMode,\n}: {\n isCurrentMode: boolean;\n isNextMode: boolean;\n}) =>\n cn(\n `absolute left-1/2 top-1/2 -translate-x-1/2 -translate-y-1/2`,\n `opacity-0 transition-opacity duration-300 ease-in-out`,\n isCurrentMode && `opacity-100 group-hover:opacity-0`,\n isNextMode && `group-hover:opacity-100`\n );\n\nexport const MobileThemeSwitcher: FC<MobileThemeSwitcherProps> = ({\n theme,\n systemTheme,\n setTheme,\n}) => {\n const isThemeSystemTheme = systemTheme === theme;\n const defaultMode = isThemeSystemTheme ? Modes.system : theme;\n\n const [mode, setMode] = useState<Modes>(defaultMode);\n\n const nextMode =\n // Start loop\n // If mode is system, toggle the theme inverse of the system theme\n mode === Modes.system\n ? theme === Modes.dark\n ? Modes.light\n : Modes.dark\n : // Close loop\n // If current theme same as system theme, reset by toggle the system theme\n isThemeSystemTheme\n ? Modes.system\n : // Go to next step\n // Otherwise, toggle the remaining theme\n mode === Modes.light\n ? Modes.dark\n : Modes.light;\n\n const toggleMode = () => {\n if (nextMode === Modes.system) {\n setTheme(systemTheme ?? Modes.light);\n } else {\n setTheme(nextMode);\n }\n setMode(nextMode);\n };\n\n return (\n <button className=\"group relative size-10\" aria-label=\"Theme selector\">\n <CircleDashed\n className={getIconStyle({\n isCurrentMode: mode === Modes.system,\n isNextMode: nextMode === Modes.system,\n })}\n onClick={toggleMode}\n data-mode=\"system\"\n />\n\n <Moon\n className={getIconStyle({\n isCurrentMode: mode === Modes.light,\n isNextMode: nextMode === Modes.light,\n })}\n onClick={toggleMode}\n data-mode=\"light\"\n />\n\n <Sun\n className={getIconStyle({\n isCurrentMode: mode === Modes.dark,\n isNextMode: nextMode === Modes.dark,\n })}\n onClick={toggleMode}\n data-mode=\"dark\"\n />\n </button>\n );\n};\n"],"names":[],"mappings":";;;;;;AAaA,MAAM,eAAe,CAAC;AAAA,EACpB;AAAA,EACA;AACF,MAIE;AAAA,EACE;AAAA,EACA;AAAA,EACA,iBAAiB;AAAA,EACjB,cAAc;AAChB;AAEK,MAAM,sBAAoD,CAAC;AAAA,EAChE;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,qBAAqB,gBAAgB;AAC3C,QAAM,cAAc,qBAAqB,MAAM,SAAS;AAExD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAgB,WAAW;AAEnD,QAAM;AAAA;AAAA;AAAA,IAGJ,SAAS,MAAM,SACX,UAAU,MAAM,OACd,MAAM,QACN,MAAM;AAAA;AAAA;AAAA,MAGR,qBACE,MAAM;AAAA;AAAA;AAAA,QAGN,SAAS,MAAM,QACb,MAAM,OACN,MAAM;AAAA;AAAA;AAAA;AAEhB,QAAM,aAAa,MAAM;AACvB,QAAI,aAAa,MAAM,QAAQ;AAC7B,eAAS,eAAe,MAAM,KAAK;AAAA,IACrC,OAAO;AACL,eAAS,QAAQ;AAAA,IACnB;AACA,YAAQ,QAAQ;AAAA,EAClB;AAEA,SACE,qBAAC,UAAA,EAAO,WAAU,0BAAyB,cAAW,kBACpD,UAAA;AAAA,IAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,aAAa;AAAA,UACtB,eAAe,SAAS,MAAM;AAAA,UAC9B,YAAY,aAAa,MAAM;AAAA,QAAA,CAChC;AAAA,QACD,SAAS;AAAA,QACT,aAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGZ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,aAAa;AAAA,UACtB,eAAe,SAAS,MAAM;AAAA,UAC9B,YAAY,aAAa,MAAM;AAAA,QAAA,CAChC;AAAA,QACD,SAAS;AAAA,QACT,aAAU;AAAA,MAAA;AAAA,IAAA;AAAA,IAGZ;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,WAAW,aAAa;AAAA,UACtB,eAAe,SAAS,MAAM;AAAA,UAC9B,YAAY,aAAa,MAAM;AAAA,QAAA,CAChC;AAAA,QACD,SAAS;AAAA,QACT,aAAU;AAAA,MAAA;AAAA,IAAA;AAAA,EACZ,GACF;AAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.cjs","sources":["../../../src/components/ThemeSwitcherDropDown/types.ts"],"sourcesContent":["export enum Modes {\n dark = 'dark',\n light = 'light',\n system = 'system',\n}\n"],"names":["Modes"],"mappings":";;AAAY,IAAA,0BAAAA,WAAL;AACLA,SAAA,MAAO,IAAA;AACPA,SAAA,OAAQ,IAAA;AACRA,SAAA,QAAS,IAAA;AAHCA,SAAAA;AAAA,GAAA,SAAA,CAAA,CAAA;;"}
1
+ {"version":3,"file":"types.cjs","sources":["../../../src/components/ThemeSwitcherDropDown/types.ts"],"sourcesContent":["export enum Modes {\n dark = 'dark',\n light = 'light',\n system = 'system',\n}\n"],"names":["Modes"],"mappings":";;AAAO,IAAK,0BAAAA,WAAL;AACLA,SAAA,MAAA,IAAO;AACPA,SAAA,OAAA,IAAQ;AACRA,SAAA,QAAA,IAAS;AAHC,SAAAA;AAAA,GAAA,SAAA,CAAA,CAAA;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.mjs","sources":["../../../src/components/ThemeSwitcherDropDown/types.ts"],"sourcesContent":["export enum Modes {\n dark = 'dark',\n light = 'light',\n system = 'system',\n}\n"],"names":["Modes"],"mappings":"AAAY,IAAA,0BAAAA,WAAL;AACLA,SAAA,MAAO,IAAA;AACPA,SAAA,OAAQ,IAAA;AACRA,SAAA,QAAS,IAAA;AAHCA,SAAAA;AAAA,GAAA,SAAA,CAAA,CAAA;"}
1
+ {"version":3,"file":"types.mjs","sources":["../../../src/components/ThemeSwitcherDropDown/types.ts"],"sourcesContent":["export enum Modes {\n dark = 'dark',\n light = 'light',\n system = 'system',\n}\n"],"names":["Modes"],"mappings":"AAAO,IAAK,0BAAAA,WAAL;AACLA,SAAA,MAAA,IAAO;AACPA,SAAA,OAAA,IAAQ;AACRA,SAAA,QAAA,IAAS;AAHC,SAAAA;AAAA,GAAA,SAAA,CAAA,CAAA;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.cjs","sources":["../../../src/components/Toaster/Toast.tsx"],"sourcesContent":["'use client';\n\nimport * as ToastPrimitives from '@radix-ui/react-toast';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { X } from 'lucide-react';\nimport { type FC, type ComponentProps, type ReactElement } from 'react';\nimport { cn } from '../../utils/cn';\n\nconst ToastProvider = ToastPrimitives;\n\nconst ToastViewport: FC<ComponentProps<typeof ToastPrimitives.Viewport>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Viewport\n className={cn(\n 'fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]',\n className\n )}\n {...props}\n />\n);\n\nconst toastVariants = cva(\n 'group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md p-4 pr-6 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full',\n {\n variants: {\n variant: {\n error: 'bg-error/40 text-text',\n success: 'bg-success/30 text-text',\n default: 'bg-card/80 text-text',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nconst Toast: FC<\n ComponentProps<typeof ToastPrimitives.Root> &\n VariantProps<typeof toastVariants>\n> = ({ className, variant, ...props }) => {\n return (\n <ToastPrimitives.Root\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n};\n\nconst ToastAction: FC<ComponentProps<typeof ToastPrimitives.Action>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Action\n className={cn(\n 'hover:bg-text focus:ring-ring group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive focus:outline-hidden inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors focus:ring-1 disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n />\n);\n\nconst ToastClose: FC<ComponentProps<typeof ToastPrimitives.Close>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Close\n className={cn(\n 'text-text/50 hover:text-text/80 focus:outline-hidden absolute right-1 top-1 rounded-md p-1 opacity-0 transition-opacity focus:opacity-100 focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600',\n className\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"size-5\" />\n </ToastPrimitives.Close>\n);\nconst ToastTitle: FC<ComponentProps<typeof ToastPrimitives.Title>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Title\n className={cn('text-sm font-semibold [&+div]:text-xs', className)}\n {...props}\n />\n);\n\nconst ToastDescription: FC<\n ComponentProps<typeof ToastPrimitives.Description>\n> = ({ className, ...props }) => (\n <ToastPrimitives.Description\n className={cn('text-sm opacity-90', className)}\n {...props}\n />\n);\ntype ToastProps = ComponentProps<typeof Toast>;\n\ntype ToastActionElement = ReactElement<typeof ToastAction>;\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n"],"names":["ToastPrimitives","jsx","cn","cva","X"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM,gBAAgBA;AAEtB,MAAM,gBAAqE,CAAC;AAAA,EAC1E;AAAA,EACA,GAAG;AACL,MACEC,2BAAA;AAAA,EAACD,2BAAgB;AAAA,EAAhB;AAAA,IACC,WAAWE,SAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA,EAAA;AACN;AAGF,MAAM,gBAAgBC,uBAAA;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IAEb;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;AAEA,MAAM,QAGF,CAAC,EAAE,WAAW,SAAS,GAAG,YAAY;AAEtC,SAAAF,2BAAA;AAAA,IAACD,2BAAgB;AAAA,IAAhB;AAAA,MACC,WAAWE,SAAG,GAAA,cAAc,EAAE,QAAS,CAAA,GAAG,SAAS;AAAA,MAClD,GAAG;AAAA,IAAA;AAAA,EACN;AAEJ;AAEA,MAAM,cAAiE,CAAC;AAAA,EACtE;AAAA,EACA,GAAG;AACL,MACED,2BAAA;AAAA,EAACD,2BAAgB;AAAA,EAAhB;AAAA,IACC,WAAWE,SAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA,EAAA;AACN;AAGF,MAAM,aAA+D,CAAC;AAAA,EACpE;AAAA,EACA,GAAG;AACL,MACED,2BAAA;AAAA,EAACD,2BAAgB;AAAA,EAAhB;AAAA,IACC,WAAWE,SAAA;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA,eAAY;AAAA,IACX,GAAG;AAAA,IAEJ,UAAAD,2BAAAA,IAACG,YAAAA,GAAE,EAAA,WAAU,SAAS,CAAA;AAAA,EAAA;AACxB;AAEF,MAAM,aAA+D,CAAC;AAAA,EACpE;AAAA,EACA,GAAG;AACL,MACEH,2BAAA;AAAA,EAACD,2BAAgB;AAAA,EAAhB;AAAA,IACC,WAAWE,SAAAA,GAAG,yCAAyC,SAAS;AAAA,IAC/D,GAAG;AAAA,EAAA;AACN;AAGF,MAAM,mBAEF,CAAC,EAAE,WAAW,GAAG,MACnB,MAAAD,2BAAA;AAAA,EAACD,2BAAgB;AAAA,EAAhB;AAAA,IACC,WAAWE,SAAAA,GAAG,sBAAsB,SAAS;AAAA,IAC5C,GAAG;AAAA,EAAA;AACN;;;;;;;;"}
1
+ {"version":3,"file":"Toast.cjs","sources":["../../../src/components/Toaster/Toast.tsx"],"sourcesContent":["'use client';\n\nimport * as ToastPrimitives from '@radix-ui/react-toast';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { X } from 'lucide-react';\nimport { type FC, type ComponentProps, type ReactElement } from 'react';\nimport { cn } from '../../utils/cn';\n\nconst ToastProvider = ToastPrimitives;\n\nconst ToastViewport: FC<ComponentProps<typeof ToastPrimitives.Viewport>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Viewport\n className={cn(\n 'fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]',\n className\n )}\n {...props}\n />\n);\n\nconst toastVariants = cva(\n 'group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md p-4 pr-6 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full',\n {\n variants: {\n variant: {\n error: 'bg-error/40 text-text',\n success: 'bg-success/30 text-text',\n default: 'bg-card/80 text-text',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nconst Toast: FC<\n ComponentProps<typeof ToastPrimitives.Root> &\n VariantProps<typeof toastVariants>\n> = ({ className, variant, ...props }) => {\n return (\n <ToastPrimitives.Root\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n};\n\nconst ToastAction: FC<ComponentProps<typeof ToastPrimitives.Action>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Action\n className={cn(\n 'hover:bg-text focus:ring-ring group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive focus:outline-hidden inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors focus:ring-1 disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n />\n);\n\nconst ToastClose: FC<ComponentProps<typeof ToastPrimitives.Close>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Close\n className={cn(\n 'text-text/50 hover:text-text/80 focus:outline-hidden absolute right-1 top-1 rounded-md p-1 opacity-0 transition-opacity focus:opacity-100 focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600',\n className\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"size-5\" />\n </ToastPrimitives.Close>\n);\nconst ToastTitle: FC<ComponentProps<typeof ToastPrimitives.Title>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Title\n className={cn('text-sm font-semibold [&+div]:text-xs', className)}\n {...props}\n />\n);\n\nconst ToastDescription: FC<\n ComponentProps<typeof ToastPrimitives.Description>\n> = ({ className, ...props }) => (\n <ToastPrimitives.Description\n className={cn('text-sm opacity-90', className)}\n {...props}\n />\n);\ntype ToastProps = ComponentProps<typeof Toast>;\n\ntype ToastActionElement = ReactElement<typeof ToastAction>;\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n"],"names":["ToastPrimitives","jsx","cn","cva","X"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM,gBAAgBA;AAEtB,MAAM,gBAAqE,CAAC;AAAA,EAC1E;AAAA,EACA,GAAG;AACL,MACEC,2BAAAA;AAAAA,EAACD,2BAAgB;AAAA,EAAhB;AAAA,IACC,WAAWE,SAAAA;AAAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN;AAGF,MAAM,gBAAgBC,uBAAAA;AAAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;AAEA,MAAM,QAGF,CAAC,EAAE,WAAW,SAAS,GAAG,YAAY;AACxC,SACEF,2BAAAA;AAAAA,IAACD,2BAAgB;AAAA,IAAhB;AAAA,MACC,WAAWE,SAAAA,GAAG,cAAc,EAAE,QAAA,CAAS,GAAG,SAAS;AAAA,MAClD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,MAAM,cAAiE,CAAC;AAAA,EACtE;AAAA,EACA,GAAG;AACL,MACED,2BAAAA;AAAAA,EAACD,2BAAgB;AAAA,EAAhB;AAAA,IACC,WAAWE,SAAAA;AAAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN;AAGF,MAAM,aAA+D,CAAC;AAAA,EACpE;AAAA,EACA,GAAG;AACL,MACED,2BAAAA;AAAAA,EAACD,2BAAgB;AAAA,EAAhB;AAAA,IACC,WAAWE,SAAAA;AAAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,eAAY;AAAA,IACX,GAAG;AAAA,IAEJ,UAAAD,2BAAAA,IAACG,YAAAA,GAAA,EAAE,WAAU,SAAA,CAAS;AAAA,EAAA;AACxB;AAEF,MAAM,aAA+D,CAAC;AAAA,EACpE;AAAA,EACA,GAAG;AACL,MACEH,2BAAAA;AAAAA,EAACD,2BAAgB;AAAA,EAAhB;AAAA,IACC,WAAWE,SAAAA,GAAG,yCAAyC,SAAS;AAAA,IAC/D,GAAG;AAAA,EAAA;AACN;AAGF,MAAM,mBAEF,CAAC,EAAE,WAAW,GAAG,YACnBD,2BAAAA;AAAAA,EAACD,2BAAgB;AAAA,EAAhB;AAAA,IACC,WAAWE,SAAAA,GAAG,sBAAsB,SAAS;AAAA,IAC5C,GAAG;AAAA,EAAA;AACN;;;;;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Toast.mjs","sources":["../../../src/components/Toaster/Toast.tsx"],"sourcesContent":["'use client';\n\nimport * as ToastPrimitives from '@radix-ui/react-toast';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { X } from 'lucide-react';\nimport { type FC, type ComponentProps, type ReactElement } from 'react';\nimport { cn } from '../../utils/cn';\n\nconst ToastProvider = ToastPrimitives;\n\nconst ToastViewport: FC<ComponentProps<typeof ToastPrimitives.Viewport>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Viewport\n className={cn(\n 'fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]',\n className\n )}\n {...props}\n />\n);\n\nconst toastVariants = cva(\n 'group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md p-4 pr-6 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full',\n {\n variants: {\n variant: {\n error: 'bg-error/40 text-text',\n success: 'bg-success/30 text-text',\n default: 'bg-card/80 text-text',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nconst Toast: FC<\n ComponentProps<typeof ToastPrimitives.Root> &\n VariantProps<typeof toastVariants>\n> = ({ className, variant, ...props }) => {\n return (\n <ToastPrimitives.Root\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n};\n\nconst ToastAction: FC<ComponentProps<typeof ToastPrimitives.Action>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Action\n className={cn(\n 'hover:bg-text focus:ring-ring group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive focus:outline-hidden inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors focus:ring-1 disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n />\n);\n\nconst ToastClose: FC<ComponentProps<typeof ToastPrimitives.Close>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Close\n className={cn(\n 'text-text/50 hover:text-text/80 focus:outline-hidden absolute right-1 top-1 rounded-md p-1 opacity-0 transition-opacity focus:opacity-100 focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600',\n className\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"size-5\" />\n </ToastPrimitives.Close>\n);\nconst ToastTitle: FC<ComponentProps<typeof ToastPrimitives.Title>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Title\n className={cn('text-sm font-semibold [&+div]:text-xs', className)}\n {...props}\n />\n);\n\nconst ToastDescription: FC<\n ComponentProps<typeof ToastPrimitives.Description>\n> = ({ className, ...props }) => (\n <ToastPrimitives.Description\n className={cn('text-sm opacity-90', className)}\n {...props}\n />\n);\ntype ToastProps = ComponentProps<typeof Toast>;\n\ntype ToastActionElement = ReactElement<typeof ToastAction>;\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n"],"names":[],"mappings":";;;;;;AAQA,MAAM,gBAAgB;AAEtB,MAAM,gBAAqE,CAAC;AAAA,EAC1E;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA,EAAA;AACN;AAGF,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IAEb;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;AAEA,MAAM,QAGF,CAAC,EAAE,WAAW,SAAS,GAAG,YAAY;AAEtC,SAAA;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,WAAW,GAAG,cAAc,EAAE,QAAS,CAAA,GAAG,SAAS;AAAA,MAClD,GAAG;AAAA,IAAA;AAAA,EACN;AAEJ;AAEA,MAAM,cAAiE,CAAC;AAAA,EACtE;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACC,GAAG;AAAA,EAAA;AACN;AAGF,MAAM,aAA+D,CAAC;AAAA,EACpE;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IACF;AAAA,IACA,eAAY;AAAA,IACX,GAAG;AAAA,IAEJ,UAAA,oBAAC,GAAE,EAAA,WAAU,SAAS,CAAA;AAAA,EAAA;AACxB;AAEF,MAAM,aAA+D,CAAC;AAAA,EACpE;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW,GAAG,yCAAyC,SAAS;AAAA,IAC/D,GAAG;AAAA,EAAA;AACN;AAGF,MAAM,mBAEF,CAAC,EAAE,WAAW,GAAG,MACnB,MAAA;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW,GAAG,sBAAsB,SAAS;AAAA,IAC5C,GAAG;AAAA,EAAA;AACN;"}
1
+ {"version":3,"file":"Toast.mjs","sources":["../../../src/components/Toaster/Toast.tsx"],"sourcesContent":["'use client';\n\nimport * as ToastPrimitives from '@radix-ui/react-toast';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { X } from 'lucide-react';\nimport { type FC, type ComponentProps, type ReactElement } from 'react';\nimport { cn } from '../../utils/cn';\n\nconst ToastProvider = ToastPrimitives;\n\nconst ToastViewport: FC<ComponentProps<typeof ToastPrimitives.Viewport>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Viewport\n className={cn(\n 'fixed top-0 z-[100] flex max-h-screen w-full flex-col-reverse p-4 sm:bottom-0 sm:right-0 sm:top-auto sm:flex-col md:max-w-[420px]',\n className\n )}\n {...props}\n />\n);\n\nconst toastVariants = cva(\n 'group pointer-events-auto relative flex w-full items-center justify-between space-x-2 overflow-hidden rounded-md p-4 pr-6 shadow-[0_0_10px_-15px_rgba(0,0,0,0.3)] backdrop-blur transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full',\n {\n variants: {\n variant: {\n error: 'bg-error/40 text-text',\n success: 'bg-success/30 text-text',\n default: 'bg-card/80 text-text',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nconst Toast: FC<\n ComponentProps<typeof ToastPrimitives.Root> &\n VariantProps<typeof toastVariants>\n> = ({ className, variant, ...props }) => {\n return (\n <ToastPrimitives.Root\n className={cn(toastVariants({ variant }), className)}\n {...props}\n />\n );\n};\n\nconst ToastAction: FC<ComponentProps<typeof ToastPrimitives.Action>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Action\n className={cn(\n 'hover:bg-text focus:ring-ring group-[.destructive]:border-muted/40 group-[.destructive]:hover:border-destructive/30 group-[.destructive]:hover:bg-destructive group-[.destructive]:hover:text-destructive-foreground group-[.destructive]:focus:ring-destructive focus:outline-hidden inline-flex h-8 shrink-0 items-center justify-center rounded-md border bg-transparent px-3 text-sm font-medium transition-colors focus:ring-1 disabled:pointer-events-none disabled:opacity-50',\n className\n )}\n {...props}\n />\n);\n\nconst ToastClose: FC<ComponentProps<typeof ToastPrimitives.Close>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Close\n className={cn(\n 'text-text/50 hover:text-text/80 focus:outline-hidden absolute right-1 top-1 rounded-md p-1 opacity-0 transition-opacity focus:opacity-100 focus:ring-1 group-hover:opacity-100 group-[.destructive]:text-red-300 group-[.destructive]:hover:text-red-50 group-[.destructive]:focus:ring-red-400 group-[.destructive]:focus:ring-offset-red-600',\n className\n )}\n toast-close=\"\"\n {...props}\n >\n <X className=\"size-5\" />\n </ToastPrimitives.Close>\n);\nconst ToastTitle: FC<ComponentProps<typeof ToastPrimitives.Title>> = ({\n className,\n ...props\n}) => (\n <ToastPrimitives.Title\n className={cn('text-sm font-semibold [&+div]:text-xs', className)}\n {...props}\n />\n);\n\nconst ToastDescription: FC<\n ComponentProps<typeof ToastPrimitives.Description>\n> = ({ className, ...props }) => (\n <ToastPrimitives.Description\n className={cn('text-sm opacity-90', className)}\n {...props}\n />\n);\ntype ToastProps = ComponentProps<typeof Toast>;\n\ntype ToastActionElement = ReactElement<typeof ToastAction>;\n\nexport {\n type ToastProps,\n type ToastActionElement,\n ToastProvider,\n ToastViewport,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastAction,\n};\n"],"names":[],"mappings":";;;;;;AAQA,MAAM,gBAAgB;AAEtB,MAAM,gBAAqE,CAAC;AAAA,EAC1E;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN;AAGF,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,MAAA;AAAA,IACX;AAAA,IAEF,iBAAiB;AAAA,MACf,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;AAEA,MAAM,QAGF,CAAC,EAAE,WAAW,SAAS,GAAG,YAAY;AACxC,SACE;AAAA,IAAC,gBAAgB;AAAA,IAAhB;AAAA,MACC,WAAW,GAAG,cAAc,EAAE,QAAA,CAAS,GAAG,SAAS;AAAA,MAClD,GAAG;AAAA,IAAA;AAAA,EAAA;AAGV;AAEA,MAAM,cAAiE,CAAC;AAAA,EACtE;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAED,GAAG;AAAA,EAAA;AACN;AAGF,MAAM,aAA+D,CAAC;AAAA,EACpE;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW;AAAA,MACT;AAAA,MACA;AAAA,IAAA;AAAA,IAEF,eAAY;AAAA,IACX,GAAG;AAAA,IAEJ,UAAA,oBAAC,GAAA,EAAE,WAAU,SAAA,CAAS;AAAA,EAAA;AACxB;AAEF,MAAM,aAA+D,CAAC;AAAA,EACpE;AAAA,EACA,GAAG;AACL,MACE;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW,GAAG,yCAAyC,SAAS;AAAA,IAC/D,GAAG;AAAA,EAAA;AACN;AAGF,MAAM,mBAEF,CAAC,EAAE,WAAW,GAAG,YACnB;AAAA,EAAC,gBAAgB;AAAA,EAAhB;AAAA,IACC,WAAW,GAAG,sBAAsB,SAAS;AAAA,IAC5C,GAAG;AAAA,EAAA;AACN;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Toaster.cjs","sources":["../../../src/components/Toaster/Toaster.tsx"],"sourcesContent":["'use client';\n\nimport {\n ToastProvider,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastViewport,\n} from './Toast';\nimport { useToast } from './useToast';\n\nexport const Toaster = () => {\n const { toasts } = useToast();\n\n return (\n <ToastProvider.Provider>\n {toasts.map(({ id, title, description, action, ...props }) => (\n <Toast key={id} {...props}>\n <div className=\"grid gap-1\">\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && <ToastDescription>{description}</ToastDescription>}\n </div>\n {action}\n <ToastClose />\n </Toast>\n ))}\n <ToastViewport />\n </ToastProvider.Provider>\n );\n};\n"],"names":["useToast","jsxs","ToastProvider","Toast","jsx","ToastTitle","ToastDescription","ToastClose","ToastViewport"],"mappings":";;;;;;AAYO,MAAM,UAAU,MAAM;AACrB,QAAA,EAAE,OAAO,IAAIA,qCAAS;AAG1B,SAAAC,gCAACC,yBAAAA,cAAc,UAAd,EACE,UAAA;AAAA,IAAA,OAAO,IAAI,CAAC,EAAE,IAAI,OAAO,aAAa,QAAQ,GAAG,MAAM,MACrDD,2BAAAA,KAAAE,yBAAAA,OAAA,EAAgB,GAAG,OAClB,UAAA;AAAA,MAACF,2BAAAA,KAAA,OAAA,EAAI,WAAU,cACZ,UAAA;AAAA,QAAS,SAAAG,2BAAAA,IAACC,yBAAAA,cAAY,UAAM,MAAA,CAAA;AAAA,QAC5B,eAAgBD,2BAAAA,IAAAE,yBAAAA,kBAAA,EAAkB,UAAY,YAAA,CAAA;AAAA,MAAA,GACjD;AAAA,MACC;AAAA,qCACAC,yBAAW,YAAA,CAAA,CAAA;AAAA,IAAA,EAAA,GANF,EAOZ,CACD;AAAA,mCACAC,yBAAc,eAAA,CAAA,CAAA;AAAA,EAAA,GACjB;AAEJ;;"}
1
+ {"version":3,"file":"Toaster.cjs","sources":["../../../src/components/Toaster/Toaster.tsx"],"sourcesContent":["'use client';\n\nimport {\n ToastProvider,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastViewport,\n} from './Toast';\nimport { useToast } from './useToast';\n\nexport const Toaster = () => {\n const { toasts } = useToast();\n\n return (\n <ToastProvider.Provider>\n {toasts.map(({ id, title, description, action, ...props }) => (\n <Toast key={id} {...props}>\n <div className=\"grid gap-1\">\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && <ToastDescription>{description}</ToastDescription>}\n </div>\n {action}\n <ToastClose />\n </Toast>\n ))}\n <ToastViewport />\n </ToastProvider.Provider>\n );\n};\n"],"names":["useToast","jsxs","ToastProvider","Toast","jsx","ToastTitle","ToastDescription","ToastClose","ToastViewport"],"mappings":";;;;;;AAYO,MAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,OAAA,IAAWA,qCAAA;AAEnB,SACEC,gCAACC,yBAAAA,cAAc,UAAd,EACE,UAAA;AAAA,IAAA,OAAO,IAAI,CAAC,EAAE,IAAI,OAAO,aAAa,QAAQ,GAAG,MAAA,MAChDD,2BAAAA,KAACE,yBAAAA,OAAA,EAAgB,GAAG,OAClB,UAAA;AAAA,MAAAF,2BAAAA,KAAC,OAAA,EAAI,WAAU,cACZ,UAAA;AAAA,QAAA,SAASG,2BAAAA,IAACC,yBAAAA,cAAY,UAAA,MAAA,CAAM;AAAA,QAC5B,eAAeD,2BAAAA,IAACE,yBAAAA,kBAAA,EAAkB,UAAA,YAAA,CAAY;AAAA,MAAA,GACjD;AAAA,MACC;AAAA,qCACAC,yBAAAA,YAAA,CAAA,CAAW;AAAA,IAAA,EAAA,GANF,EAOZ,CACD;AAAA,mCACAC,yBAAAA,eAAA,CAAA,CAAc;AAAA,EAAA,GACjB;AAEJ;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Toaster.mjs","sources":["../../../src/components/Toaster/Toaster.tsx"],"sourcesContent":["'use client';\n\nimport {\n ToastProvider,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastViewport,\n} from './Toast';\nimport { useToast } from './useToast';\n\nexport const Toaster = () => {\n const { toasts } = useToast();\n\n return (\n <ToastProvider.Provider>\n {toasts.map(({ id, title, description, action, ...props }) => (\n <Toast key={id} {...props}>\n <div className=\"grid gap-1\">\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && <ToastDescription>{description}</ToastDescription>}\n </div>\n {action}\n <ToastClose />\n </Toast>\n ))}\n <ToastViewport />\n </ToastProvider.Provider>\n );\n};\n"],"names":[],"mappings":";;;;AAYO,MAAM,UAAU,MAAM;AACrB,QAAA,EAAE,OAAO,IAAI,SAAS;AAG1B,SAAA,qBAAC,cAAc,UAAd,EACE,UAAA;AAAA,IAAA,OAAO,IAAI,CAAC,EAAE,IAAI,OAAO,aAAa,QAAQ,GAAG,MAAM,MACrD,qBAAA,OAAA,EAAgB,GAAG,OAClB,UAAA;AAAA,MAAC,qBAAA,OAAA,EAAI,WAAU,cACZ,UAAA;AAAA,QAAS,SAAA,oBAAC,cAAY,UAAM,MAAA,CAAA;AAAA,QAC5B,eAAgB,oBAAA,kBAAA,EAAkB,UAAY,YAAA,CAAA;AAAA,MAAA,GACjD;AAAA,MACC;AAAA,0BACA,YAAW,CAAA,CAAA;AAAA,IAAA,EAAA,GANF,EAOZ,CACD;AAAA,wBACA,eAAc,CAAA,CAAA;AAAA,EAAA,GACjB;AAEJ;"}
1
+ {"version":3,"file":"Toaster.mjs","sources":["../../../src/components/Toaster/Toaster.tsx"],"sourcesContent":["'use client';\n\nimport {\n ToastProvider,\n Toast,\n ToastTitle,\n ToastDescription,\n ToastClose,\n ToastViewport,\n} from './Toast';\nimport { useToast } from './useToast';\n\nexport const Toaster = () => {\n const { toasts } = useToast();\n\n return (\n <ToastProvider.Provider>\n {toasts.map(({ id, title, description, action, ...props }) => (\n <Toast key={id} {...props}>\n <div className=\"grid gap-1\">\n {title && <ToastTitle>{title}</ToastTitle>}\n {description && <ToastDescription>{description}</ToastDescription>}\n </div>\n {action}\n <ToastClose />\n </Toast>\n ))}\n <ToastViewport />\n </ToastProvider.Provider>\n );\n};\n"],"names":[],"mappings":";;;;AAYO,MAAM,UAAU,MAAM;AAC3B,QAAM,EAAE,OAAA,IAAW,SAAA;AAEnB,SACE,qBAAC,cAAc,UAAd,EACE,UAAA;AAAA,IAAA,OAAO,IAAI,CAAC,EAAE,IAAI,OAAO,aAAa,QAAQ,GAAG,MAAA,MAChD,qBAAC,OAAA,EAAgB,GAAG,OAClB,UAAA;AAAA,MAAA,qBAAC,OAAA,EAAI,WAAU,cACZ,UAAA;AAAA,QAAA,SAAS,oBAAC,cAAY,UAAA,MAAA,CAAM;AAAA,QAC5B,eAAe,oBAAC,kBAAA,EAAkB,UAAA,YAAA,CAAY;AAAA,MAAA,GACjD;AAAA,MACC;AAAA,0BACA,YAAA,CAAA,CAAW;AAAA,IAAA,EAAA,GANF,EAOZ,CACD;AAAA,wBACA,eAAA,CAAA,CAAc;AAAA,EAAA,GACjB;AAEJ;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useToast.cjs","sources":["../../../src/components/Toaster/useToast.tsx"],"sourcesContent":["'use client';\n\nimport { type ReactNode, useState, useEffect } from 'react';\nimport type { ToastProps, ToastActionElement } from './Toast';\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 15 * 60 * 1000; // 15 seconds\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: ReactNode;\n description?: ReactNode;\n action?: ToastActionElement;\n};\n\nenum ActionTypes {\n ADD_TOAST = 'ADD_TOAST',\n UPDATE_TOAST = 'UPDATE_TOAST',\n DISMISS_TOAST = 'DISMISS_TOAST',\n REMOVE_TOAST = 'REMOVE_TOAST',\n}\n\nlet count = 0;\n\nconst genId = () => {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n};\n\ntype Action =\n | {\n type: ActionTypes.ADD_TOAST;\n toast: ToasterToast;\n }\n | {\n type: ActionTypes.UPDATE_TOAST;\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionTypes.DISMISS_TOAST;\n toastId?: ToasterToast['id'];\n }\n | {\n type: ActionTypes.REMOVE_TOAST;\n toastId?: ToasterToast['id'];\n };\n\ntype State = {\n toasts: ToasterToast[];\n};\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: ActionTypes.REMOVE_TOAST,\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case ActionTypes.ADD_TOAST:\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case ActionTypes.UPDATE_TOAST:\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n };\n\n case ActionTypes.DISMISS_TOAST: {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t\n ),\n };\n }\n case ActionTypes.REMOVE_TOAST:\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: ((state: State) => void)[] = [];\n\nlet memoryState: State = { toasts: [] };\n\nconst dispatch = (action: Action) => {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n};\n\ntype Toast = Omit<ToasterToast, 'id'>;\n\nconst toast = ({ ...props }: Toast) => {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: ActionTypes.UPDATE_TOAST,\n toast: { ...props, id },\n });\n const dismiss = () =>\n dispatch({ type: ActionTypes.DISMISS_TOAST, toastId: id });\n\n dispatch({\n type: ActionTypes.ADD_TOAST,\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n};\n\nconst useToast = () => {\n const [state, setState] = useState<State>(memoryState);\n\n useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) =>\n dispatch({ type: ActionTypes.DISMISS_TOAST, toastId }),\n };\n};\n\nexport { useToast, toast };\n"],"names":["toast","props","useState","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"useToast.cjs","sources":["../../../src/components/Toaster/useToast.tsx"],"sourcesContent":["'use client';\n\nimport { type ReactNode, useState, useEffect } from 'react';\nimport type { ToastProps, ToastActionElement } from './Toast';\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 15 * 60 * 1000; // 15 seconds\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: ReactNode;\n description?: ReactNode;\n action?: ToastActionElement;\n};\n\nenum ActionTypes {\n ADD_TOAST = 'ADD_TOAST',\n UPDATE_TOAST = 'UPDATE_TOAST',\n DISMISS_TOAST = 'DISMISS_TOAST',\n REMOVE_TOAST = 'REMOVE_TOAST',\n}\n\nlet count = 0;\n\nconst genId = () => {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n};\n\ntype Action =\n | {\n type: ActionTypes.ADD_TOAST;\n toast: ToasterToast;\n }\n | {\n type: ActionTypes.UPDATE_TOAST;\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionTypes.DISMISS_TOAST;\n toastId?: ToasterToast['id'];\n }\n | {\n type: ActionTypes.REMOVE_TOAST;\n toastId?: ToasterToast['id'];\n };\n\ntype State = {\n toasts: ToasterToast[];\n};\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: ActionTypes.REMOVE_TOAST,\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case ActionTypes.ADD_TOAST:\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case ActionTypes.UPDATE_TOAST:\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n };\n\n case ActionTypes.DISMISS_TOAST: {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t\n ),\n };\n }\n case ActionTypes.REMOVE_TOAST:\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: ((state: State) => void)[] = [];\n\nlet memoryState: State = { toasts: [] };\n\nconst dispatch = (action: Action) => {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n};\n\ntype Toast = Omit<ToasterToast, 'id'>;\n\nconst toast = ({ ...props }: Toast) => {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: ActionTypes.UPDATE_TOAST,\n toast: { ...props, id },\n });\n const dismiss = () =>\n dispatch({ type: ActionTypes.DISMISS_TOAST, toastId: id });\n\n dispatch({\n type: ActionTypes.ADD_TOAST,\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n};\n\nconst useToast = () => {\n const [state, setState] = useState<State>(memoryState);\n\n useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) =>\n dispatch({ type: ActionTypes.DISMISS_TOAST, toastId }),\n };\n};\n\nexport { useToast, toast };\n"],"names":["toast","props","useState","useEffect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useToast.mjs","sources":["../../../src/components/Toaster/useToast.tsx"],"sourcesContent":["'use client';\n\nimport { type ReactNode, useState, useEffect } from 'react';\nimport type { ToastProps, ToastActionElement } from './Toast';\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 15 * 60 * 1000; // 15 seconds\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: ReactNode;\n description?: ReactNode;\n action?: ToastActionElement;\n};\n\nenum ActionTypes {\n ADD_TOAST = 'ADD_TOAST',\n UPDATE_TOAST = 'UPDATE_TOAST',\n DISMISS_TOAST = 'DISMISS_TOAST',\n REMOVE_TOAST = 'REMOVE_TOAST',\n}\n\nlet count = 0;\n\nconst genId = () => {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n};\n\ntype Action =\n | {\n type: ActionTypes.ADD_TOAST;\n toast: ToasterToast;\n }\n | {\n type: ActionTypes.UPDATE_TOAST;\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionTypes.DISMISS_TOAST;\n toastId?: ToasterToast['id'];\n }\n | {\n type: ActionTypes.REMOVE_TOAST;\n toastId?: ToasterToast['id'];\n };\n\ntype State = {\n toasts: ToasterToast[];\n};\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: ActionTypes.REMOVE_TOAST,\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case ActionTypes.ADD_TOAST:\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case ActionTypes.UPDATE_TOAST:\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n };\n\n case ActionTypes.DISMISS_TOAST: {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t\n ),\n };\n }\n case ActionTypes.REMOVE_TOAST:\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: ((state: State) => void)[] = [];\n\nlet memoryState: State = { toasts: [] };\n\nconst dispatch = (action: Action) => {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n};\n\ntype Toast = Omit<ToasterToast, 'id'>;\n\nconst toast = ({ ...props }: Toast) => {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: ActionTypes.UPDATE_TOAST,\n toast: { ...props, id },\n });\n const dismiss = () =>\n dispatch({ type: ActionTypes.DISMISS_TOAST, toastId: id });\n\n dispatch({\n type: ActionTypes.ADD_TOAST,\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n};\n\nconst useToast = () => {\n const [state, setState] = useState<State>(memoryState);\n\n useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) =>\n dispatch({ type: ActionTypes.DISMISS_TOAST, toastId }),\n };\n};\n\nexport { useToast, toast };\n"],"names":["toast","props"],"mappings":"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"}
1
+ {"version":3,"file":"useToast.mjs","sources":["../../../src/components/Toaster/useToast.tsx"],"sourcesContent":["'use client';\n\nimport { type ReactNode, useState, useEffect } from 'react';\nimport type { ToastProps, ToastActionElement } from './Toast';\n\nconst TOAST_LIMIT = 1;\nconst TOAST_REMOVE_DELAY = 15 * 60 * 1000; // 15 seconds\n\ntype ToasterToast = ToastProps & {\n id: string;\n title?: ReactNode;\n description?: ReactNode;\n action?: ToastActionElement;\n};\n\nenum ActionTypes {\n ADD_TOAST = 'ADD_TOAST',\n UPDATE_TOAST = 'UPDATE_TOAST',\n DISMISS_TOAST = 'DISMISS_TOAST',\n REMOVE_TOAST = 'REMOVE_TOAST',\n}\n\nlet count = 0;\n\nconst genId = () => {\n count = (count + 1) % Number.MAX_SAFE_INTEGER;\n return count.toString();\n};\n\ntype Action =\n | {\n type: ActionTypes.ADD_TOAST;\n toast: ToasterToast;\n }\n | {\n type: ActionTypes.UPDATE_TOAST;\n toast: Partial<ToasterToast>;\n }\n | {\n type: ActionTypes.DISMISS_TOAST;\n toastId?: ToasterToast['id'];\n }\n | {\n type: ActionTypes.REMOVE_TOAST;\n toastId?: ToasterToast['id'];\n };\n\ntype State = {\n toasts: ToasterToast[];\n};\n\nconst toastTimeouts = new Map<string, ReturnType<typeof setTimeout>>();\n\nconst addToRemoveQueue = (toastId: string) => {\n if (toastTimeouts.has(toastId)) {\n return;\n }\n\n const timeout = setTimeout(() => {\n toastTimeouts.delete(toastId);\n dispatch({\n type: ActionTypes.REMOVE_TOAST,\n toastId: toastId,\n });\n }, TOAST_REMOVE_DELAY);\n\n toastTimeouts.set(toastId, timeout);\n};\n\nexport const reducer = (state: State, action: Action): State => {\n switch (action.type) {\n case ActionTypes.ADD_TOAST:\n return {\n ...state,\n toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT),\n };\n\n case ActionTypes.UPDATE_TOAST:\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === action.toast.id ? { ...t, ...action.toast } : t\n ),\n };\n\n case ActionTypes.DISMISS_TOAST: {\n const { toastId } = action;\n\n // ! Side effects ! - This could be extracted into a dismissToast() action,\n // but I'll keep it here for simplicity\n if (toastId) {\n addToRemoveQueue(toastId);\n } else {\n state.toasts.forEach((toast) => {\n addToRemoveQueue(toast.id);\n });\n }\n\n return {\n ...state,\n toasts: state.toasts.map((t) =>\n t.id === toastId || toastId === undefined\n ? {\n ...t,\n open: false,\n }\n : t\n ),\n };\n }\n case ActionTypes.REMOVE_TOAST:\n if (action.toastId === undefined) {\n return {\n ...state,\n toasts: [],\n };\n }\n return {\n ...state,\n toasts: state.toasts.filter((t) => t.id !== action.toastId),\n };\n }\n};\n\nconst listeners: ((state: State) => void)[] = [];\n\nlet memoryState: State = { toasts: [] };\n\nconst dispatch = (action: Action) => {\n memoryState = reducer(memoryState, action);\n listeners.forEach((listener) => {\n listener(memoryState);\n });\n};\n\ntype Toast = Omit<ToasterToast, 'id'>;\n\nconst toast = ({ ...props }: Toast) => {\n const id = genId();\n\n const update = (props: ToasterToast) =>\n dispatch({\n type: ActionTypes.UPDATE_TOAST,\n toast: { ...props, id },\n });\n const dismiss = () =>\n dispatch({ type: ActionTypes.DISMISS_TOAST, toastId: id });\n\n dispatch({\n type: ActionTypes.ADD_TOAST,\n toast: {\n ...props,\n id,\n open: true,\n onOpenChange: (open) => {\n if (!open) dismiss();\n },\n },\n });\n\n return {\n id: id,\n dismiss,\n update,\n };\n};\n\nconst useToast = () => {\n const [state, setState] = useState<State>(memoryState);\n\n useEffect(() => {\n listeners.push(setState);\n return () => {\n const index = listeners.indexOf(setState);\n if (index > -1) {\n listeners.splice(index, 1);\n }\n };\n }, [state]);\n\n return {\n ...state,\n toast,\n dismiss: (toastId?: string) =>\n dispatch({ type: ActionTypes.DISMISS_TOAST, toastId }),\n };\n};\n\nexport { useToast, toast };\n"],"names":["toast","props"],"mappings":";;AAKA,MAAM,cAAc;AACpB,MAAM,qBAAqB,KAAK,KAAK;AAgBrC,IAAI,QAAQ;AAEZ,MAAM,QAAQ,MAAM;AAClB,WAAS,QAAQ,KAAK,OAAO;AAC7B,SAAO,MAAM,SAAA;AACf;AAwBA,MAAM,oCAAoB,IAAA;AAE1B,MAAM,mBAAmB,CAAC,YAAoB;AAC5C,MAAI,cAAc,IAAI,OAAO,GAAG;AAC9B;AAAA,EACF;AAEA,QAAM,UAAU,WAAW,MAAM;AAC/B,kBAAc,OAAO,OAAO;AAC5B,aAAS;AAAA,MACP,MAAM;AAAA,MACN;AAAA,IAAA,CACD;AAAA,EACH,GAAG,kBAAkB;AAErB,gBAAc,IAAI,SAAS,OAAO;AACpC;AAEO,MAAM,UAAU,CAAC,OAAc,WAA0B;AAC9D,UAAQ,OAAO,MAAA;AAAA,IACb,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,CAAC,OAAO,OAAO,GAAG,MAAM,MAAM,EAAE,MAAM,GAAG,WAAW;AAAA,MAAA;AAAA,IAGhE,KAAK;AACH,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,MAAM,OAAO;AAAA,UAAI,CAAC,MACxB,EAAE,OAAO,OAAO,MAAM,KAAK,EAAE,GAAG,GAAG,GAAG,OAAO,UAAU;AAAA,QAAA;AAAA,MACzD;AAAA,IAGJ,KAAK,iBAA2B;AAC9B,YAAM,EAAE,YAAY;AAIpB,UAAI,SAAS;AACX,yBAAiB,OAAO;AAAA,MAC1B,OAAO;AACL,cAAM,OAAO,QAAQ,CAACA,WAAU;AAC9B,2BAAiBA,OAAM,EAAE;AAAA,QAC3B,CAAC;AAAA,MACH;AAEA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,MAAM,OAAO;AAAA,UAAI,CAAC,MACxB,EAAE,OAAO,WAAW,YAAY,SAC5B;AAAA,YACE,GAAG;AAAA,YACH,MAAM;AAAA,UAAA,IAER;AAAA,QAAA;AAAA,MACN;AAAA,IAEJ;AAAA,IACA,KAAK;AACH,UAAI,OAAO,YAAY,QAAW;AAChC,eAAO;AAAA,UACL,GAAG;AAAA,UACH,QAAQ,CAAA;AAAA,QAAC;AAAA,MAEb;AACA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,QAAQ,MAAM,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,OAAO,OAAO;AAAA,MAAA;AAAA,EAC5D;AAEN;AAEA,MAAM,YAAwC,CAAA;AAE9C,IAAI,cAAqB,EAAE,QAAQ,GAAC;AAEpC,MAAM,WAAW,CAAC,WAAmB;AACnC,gBAAc,QAAQ,aAAa,MAAM;AACzC,YAAU,QAAQ,CAAC,aAAa;AAC9B,aAAS,WAAW;AAAA,EACtB,CAAC;AACH;AAIA,MAAM,QAAQ,CAAC,EAAE,GAAG,YAAmB;AACrC,QAAM,KAAK,MAAA;AAEX,QAAM,SAAS,CAACC,WACd,SAAS;AAAA,IACP,MAAM;AAAA,IACN,OAAO,EAAE,GAAGA,QAAO,GAAA;AAAA,EAAG,CACvB;AACH,QAAM,UAAU,MACd,SAAS,EAAE,MAAM,iBAA2B,SAAS,IAAI;AAE3D,WAAS;AAAA,IACP,MAAM;AAAA,IACN,OAAO;AAAA,MACL,GAAG;AAAA,MACH;AAAA,MACA,MAAM;AAAA,MACN,cAAc,CAAC,SAAS;AACtB,YAAI,CAAC,KAAM,SAAA;AAAA,MACb;AAAA,IAAA;AAAA,EACF,CACD;AAED,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEJ;AAEA,MAAM,WAAW,MAAM;AACrB,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAgB,WAAW;AAErD,YAAU,MAAM;AACd,cAAU,KAAK,QAAQ;AACvB,WAAO,MAAM;AACX,YAAM,QAAQ,UAAU,QAAQ,QAAQ;AACxC,UAAI,QAAQ,IAAI;AACd,kBAAU,OAAO,OAAO,CAAC;AAAA,MAC3B;AAAA,IACF;AAAA,EACF,GAAG,CAAC,KAAK,CAAC;AAEV,SAAO;AAAA,IACL,GAAG;AAAA,IACH;AAAA,IACA,SAAS,CAAC,YACR,SAAS,EAAE,MAAM,iBAA2B,SAAS;AAAA,EAAA;AAE3D;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../src/components/WithResizer/index.tsx"],"sourcesContent":["'use client';\n\nimport React, {\n useCallback,\n useEffect,\n useRef,\n useState,\n type FC,\n type PropsWithChildren,\n} from 'react';\nimport { cn } from '../../utils/cn';\n\ntype WithResizerProps = {\n initialWidth: number;\n maxWidth?: number;\n minWidth?: number;\n};\n\nexport const WithResizer: FC<PropsWithChildren<WithResizerProps>> = ({\n initialWidth,\n maxWidth,\n minWidth = 0,\n children,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState(initialWidth);\n const [isResizing, setIsResizing] = useState(false);\n\n // Handler to start resizing\n const startResizing = useCallback(\n (\n mouseDownEvent:\n | React.MouseEvent<HTMLDivElement>\n | React.TouchEvent<HTMLDivElement>\n ) => {\n setIsResizing(true);\n mouseDownEvent.preventDefault();\n },\n []\n );\n\n // Handler to stop resizing\n const stopResizing = useCallback(() => {\n setIsResizing(false);\n }, []);\n\n // Handler to resize the div\n const resize = useCallback(\n (mouseMoveEvent: MouseEvent | TouchEvent) => {\n const container = containerRef.current;\n if (isResizing && container && parent) {\n const { left: containerLeft } = container.getBoundingClientRect();\n\n let clientX = 0;\n if (mouseMoveEvent instanceof MouseEvent) {\n clientX = mouseMoveEvent.clientX;\n } else if (mouseMoveEvent instanceof TouchEvent) {\n clientX = mouseMoveEvent.touches[0].clientX;\n }\n\n const newWidth = clientX - containerLeft;\n const correctedWidth = Math.max(newWidth, 0);\n\n setWidth(correctedWidth);\n }\n },\n [isResizing]\n );\n\n // Add event listeners for mouse move and mouse up\n useEffect(() => {\n window.addEventListener('mousemove', resize, { passive: true });\n window.addEventListener('mouseup', stopResizing);\n window.addEventListener('touchmove', resize, { passive: true });\n window.addEventListener('touchend', stopResizing);\n\n return () => {\n window.removeEventListener('mousemove', resize);\n window.removeEventListener('mouseup', stopResizing);\n window.removeEventListener('touchmove', resize);\n window.removeEventListener('touchend', stopResizing);\n };\n }, [resize, stopResizing]);\n\n return (\n <div\n className={cn(\n minWidth && `max-w-[${maxWidth}px]`,\n maxWidth && `min-w-[${minWidth}px]`,\n 'relative h-full w-full max-w-[80%] cursor-ew-resize border-r-[2px] border-neutral-200 transition dark:border-neutral-950',\n 'after:absolute after:right-0 after:top-1/2 after:block after:h-10 after:w-2 after:-translate-y-1/2 after:translate-x-1/2 after:transform after:cursor-ew-resize after:rounded-full after:bg-neutral-200 after:transition after:content-[\"\"] dark:after:bg-neutral-950',\n 'active:border-neutral-400 active:after:bg-neutral-400 dark:active:border-neutral-600 active:dark:after:bg-neutral-600'\n )}\n style={{\n width: `${width}px`,\n }}\n ref={containerRef}\n onMouseDown={startResizing}\n onTouchStart={startResizing}\n aria-valuemin={minWidth}\n aria-valuemax={maxWidth}\n aria-valuenow={width}\n aria-label=\"Resizable component\"\n role=\"slider\"\n tabIndex={0}\n >\n <div\n className=\"absolute left-0 top-0 size-full cursor-default overflow-hidden\"\n onMouseDown={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"names":["useRef","useState","useCallback","useEffect","jsx","cn"],"mappings":";;;;;;AAkBO,MAAM,cAAuD,CAAC;AAAA,EACnE;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAM;AACE,QAAA,eAAeA,oBAAuB,IAAI;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAIC,aAAAA,SAAS,YAAY;AAC/C,QAAM,CAAC,YAAY,aAAa,IAAIA,aAAAA,SAAS,KAAK;AAGlD,QAAM,gBAAgBC,aAAA;AAAA,IACpB,CACE,mBAGG;AACH,oBAAc,IAAI;AAClB,qBAAe,eAAe;AAAA,IAChC;AAAA,IACA,CAAA;AAAA,EACF;AAGM,QAAA,eAAeA,aAAAA,YAAY,MAAM;AACrC,kBAAc,KAAK;AAAA,EACrB,GAAG,EAAE;AAGL,QAAM,SAASA,aAAA;AAAA,IACb,CAAC,mBAA4C;AAC3C,YAAM,YAAY,aAAa;AAC3B,UAAA,cAAc,aAAa,QAAQ;AACrC,cAAM,EAAE,MAAM,kBAAkB,UAAU,sBAAsB;AAEhE,YAAI,UAAU;AACd,YAAI,0BAA0B,YAAY;AACxC,oBAAU,eAAe;AAAA,QAAA,WAChB,0BAA0B,YAAY;AACrC,oBAAA,eAAe,QAAQ,CAAC,EAAE;AAAA,QAAA;AAGtC,cAAM,WAAW,UAAU;AAC3B,cAAM,iBAAiB,KAAK,IAAI,UAAU,CAAC;AAE3C,iBAAS,cAAc;AAAA,MAAA;AAAA,IAE3B;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAGAC,eAAAA,UAAU,MAAM;AACd,WAAO,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM;AACvD,WAAA,iBAAiB,WAAW,YAAY;AAC/C,WAAO,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM;AACvD,WAAA,iBAAiB,YAAY,YAAY;AAEhD,WAAO,MAAM;AACJ,aAAA,oBAAoB,aAAa,MAAM;AACvC,aAAA,oBAAoB,WAAW,YAAY;AAC3C,aAAA,oBAAoB,aAAa,MAAM;AACvC,aAAA,oBAAoB,YAAY,YAAY;AAAA,IACrD;AAAA,EAAA,GACC,CAAC,QAAQ,YAAY,CAAC;AAGvB,SAAAC,2BAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,SAAA;AAAA,QACT,YAAY,UAAU,QAAQ;AAAA,QAC9B,YAAY,UAAU,QAAQ;AAAA,QAC9B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,OAAO,GAAG,KAAK;AAAA,MACjB;AAAA,MACA,KAAK;AAAA,MACL,aAAa;AAAA,MACb,cAAc;AAAA,MACd,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,cAAW;AAAA,MACX,MAAK;AAAA,MACL,UAAU;AAAA,MAEV,UAAAD,2BAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,aAAa,CAAC,MAAM,EAAE,gBAAgB;AAAA,UACtC,cAAc,CAAC,MAAM,EAAE,gBAAgB;AAAA,UAEtC;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EACF;AAEJ;;"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../src/components/WithResizer/index.tsx"],"sourcesContent":["'use client';\n\nimport React, {\n useCallback,\n useEffect,\n useRef,\n useState,\n type FC,\n type PropsWithChildren,\n} from 'react';\nimport { cn } from '../../utils/cn';\n\ntype WithResizerProps = {\n initialWidth: number;\n maxWidth?: number;\n minWidth?: number;\n};\n\nexport const WithResizer: FC<PropsWithChildren<WithResizerProps>> = ({\n initialWidth,\n maxWidth,\n minWidth = 0,\n children,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState(initialWidth);\n const [isResizing, setIsResizing] = useState(false);\n\n // Handler to start resizing\n const startResizing = useCallback(\n (\n mouseDownEvent:\n | React.MouseEvent<HTMLDivElement>\n | React.TouchEvent<HTMLDivElement>\n ) => {\n setIsResizing(true);\n mouseDownEvent.preventDefault();\n },\n []\n );\n\n // Handler to stop resizing\n const stopResizing = useCallback(() => {\n setIsResizing(false);\n }, []);\n\n // Handler to resize the div\n const resize = useCallback(\n (mouseMoveEvent: MouseEvent | TouchEvent) => {\n const container = containerRef.current;\n if (isResizing && container && parent) {\n const { left: containerLeft } = container.getBoundingClientRect();\n\n let clientX = 0;\n if (mouseMoveEvent instanceof MouseEvent) {\n clientX = mouseMoveEvent.clientX;\n } else if (mouseMoveEvent instanceof TouchEvent) {\n clientX = mouseMoveEvent.touches[0].clientX;\n }\n\n const newWidth = clientX - containerLeft;\n const correctedWidth = Math.max(newWidth, 0);\n\n setWidth(correctedWidth);\n }\n },\n [isResizing]\n );\n\n // Add event listeners for mouse move and mouse up\n useEffect(() => {\n window.addEventListener('mousemove', resize, { passive: true });\n window.addEventListener('mouseup', stopResizing);\n window.addEventListener('touchmove', resize, { passive: true });\n window.addEventListener('touchend', stopResizing);\n\n return () => {\n window.removeEventListener('mousemove', resize);\n window.removeEventListener('mouseup', stopResizing);\n window.removeEventListener('touchmove', resize);\n window.removeEventListener('touchend', stopResizing);\n };\n }, [resize, stopResizing]);\n\n return (\n <div\n className={cn(\n minWidth && `max-w-[${maxWidth}px]`,\n maxWidth && `min-w-[${minWidth}px]`,\n 'relative h-full w-full max-w-[80%] cursor-ew-resize border-r-[2px] border-neutral-200 transition dark:border-neutral-950',\n 'after:absolute after:right-0 after:top-1/2 after:block after:h-10 after:w-2 after:-translate-y-1/2 after:translate-x-1/2 after:transform after:cursor-ew-resize after:rounded-full after:bg-neutral-200 after:transition after:content-[\"\"] dark:after:bg-neutral-950',\n 'active:border-neutral-400 active:after:bg-neutral-400 dark:active:border-neutral-600 active:dark:after:bg-neutral-600'\n )}\n style={{\n width: `${width}px`,\n }}\n ref={containerRef}\n onMouseDown={startResizing}\n onTouchStart={startResizing}\n aria-valuemin={minWidth}\n aria-valuemax={maxWidth}\n aria-valuenow={width}\n aria-label=\"Resizable component\"\n role=\"slider\"\n tabIndex={0}\n >\n <div\n className=\"absolute left-0 top-0 size-full cursor-default overflow-hidden\"\n onMouseDown={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"names":["useRef","useState","useCallback","useEffect","jsx","cn"],"mappings":";;;;;;AAkBO,MAAM,cAAuD,CAAC;AAAA,EACnE;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,eAAeA,aAAAA,OAAuB,IAAI;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAIC,aAAAA,SAAS,YAAY;AAC/C,QAAM,CAAC,YAAY,aAAa,IAAIA,aAAAA,SAAS,KAAK;AAGlD,QAAM,gBAAgBC,aAAAA;AAAAA,IACpB,CACE,mBAGG;AACH,oBAAc,IAAI;AAClB,qBAAe,eAAA;AAAA,IACjB;AAAA,IACA,CAAA;AAAA,EAAC;AAIH,QAAM,eAAeA,aAAAA,YAAY,MAAM;AACrC,kBAAc,KAAK;AAAA,EACrB,GAAG,CAAA,CAAE;AAGL,QAAM,SAASA,aAAAA;AAAAA,IACb,CAAC,mBAA4C;AAC3C,YAAM,YAAY,aAAa;AAC/B,UAAI,cAAc,aAAa,QAAQ;AACrC,cAAM,EAAE,MAAM,kBAAkB,UAAU,sBAAA;AAE1C,YAAI,UAAU;AACd,YAAI,0BAA0B,YAAY;AACxC,oBAAU,eAAe;AAAA,QAC3B,WAAW,0BAA0B,YAAY;AAC/C,oBAAU,eAAe,QAAQ,CAAC,EAAE;AAAA,QACtC;AAEA,cAAM,WAAW,UAAU;AAC3B,cAAM,iBAAiB,KAAK,IAAI,UAAU,CAAC;AAE3C,iBAAS,cAAc;AAAA,MACzB;AAAA,IACF;AAAA,IACA,CAAC,UAAU;AAAA,EAAA;AAIbC,eAAAA,UAAU,MAAM;AACd,WAAO,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM;AAC9D,WAAO,iBAAiB,WAAW,YAAY;AAC/C,WAAO,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM;AAC9D,WAAO,iBAAiB,YAAY,YAAY;AAEhD,WAAO,MAAM;AACX,aAAO,oBAAoB,aAAa,MAAM;AAC9C,aAAO,oBAAoB,WAAW,YAAY;AAClD,aAAO,oBAAoB,aAAa,MAAM;AAC9C,aAAO,oBAAoB,YAAY,YAAY;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,QAAQ,YAAY,CAAC;AAEzB,SACEC,2BAAAA;AAAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC,SAAAA;AAAAA,QACT,YAAY,UAAU,QAAQ;AAAA,QAC9B,YAAY,UAAU,QAAQ;AAAA,QAC9B;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,OAAO;AAAA,QACL,OAAO,GAAG,KAAK;AAAA,MAAA;AAAA,MAEjB,KAAK;AAAA,MACL,aAAa;AAAA,MACb,cAAc;AAAA,MACd,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,cAAW;AAAA,MACX,MAAK;AAAA,MACL,UAAU;AAAA,MAEV,UAAAD,2BAAAA;AAAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,aAAa,CAAC,MAAM,EAAE,gBAAA;AAAA,UACtB,cAAc,CAAC,MAAM,EAAE,gBAAA;AAAA,UAEtB;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../../src/components/WithResizer/index.tsx"],"sourcesContent":["'use client';\n\nimport React, {\n useCallback,\n useEffect,\n useRef,\n useState,\n type FC,\n type PropsWithChildren,\n} from 'react';\nimport { cn } from '../../utils/cn';\n\ntype WithResizerProps = {\n initialWidth: number;\n maxWidth?: number;\n minWidth?: number;\n};\n\nexport const WithResizer: FC<PropsWithChildren<WithResizerProps>> = ({\n initialWidth,\n maxWidth,\n minWidth = 0,\n children,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState(initialWidth);\n const [isResizing, setIsResizing] = useState(false);\n\n // Handler to start resizing\n const startResizing = useCallback(\n (\n mouseDownEvent:\n | React.MouseEvent<HTMLDivElement>\n | React.TouchEvent<HTMLDivElement>\n ) => {\n setIsResizing(true);\n mouseDownEvent.preventDefault();\n },\n []\n );\n\n // Handler to stop resizing\n const stopResizing = useCallback(() => {\n setIsResizing(false);\n }, []);\n\n // Handler to resize the div\n const resize = useCallback(\n (mouseMoveEvent: MouseEvent | TouchEvent) => {\n const container = containerRef.current;\n if (isResizing && container && parent) {\n const { left: containerLeft } = container.getBoundingClientRect();\n\n let clientX = 0;\n if (mouseMoveEvent instanceof MouseEvent) {\n clientX = mouseMoveEvent.clientX;\n } else if (mouseMoveEvent instanceof TouchEvent) {\n clientX = mouseMoveEvent.touches[0].clientX;\n }\n\n const newWidth = clientX - containerLeft;\n const correctedWidth = Math.max(newWidth, 0);\n\n setWidth(correctedWidth);\n }\n },\n [isResizing]\n );\n\n // Add event listeners for mouse move and mouse up\n useEffect(() => {\n window.addEventListener('mousemove', resize, { passive: true });\n window.addEventListener('mouseup', stopResizing);\n window.addEventListener('touchmove', resize, { passive: true });\n window.addEventListener('touchend', stopResizing);\n\n return () => {\n window.removeEventListener('mousemove', resize);\n window.removeEventListener('mouseup', stopResizing);\n window.removeEventListener('touchmove', resize);\n window.removeEventListener('touchend', stopResizing);\n };\n }, [resize, stopResizing]);\n\n return (\n <div\n className={cn(\n minWidth && `max-w-[${maxWidth}px]`,\n maxWidth && `min-w-[${minWidth}px]`,\n 'relative h-full w-full max-w-[80%] cursor-ew-resize border-r-[2px] border-neutral-200 transition dark:border-neutral-950',\n 'after:absolute after:right-0 after:top-1/2 after:block after:h-10 after:w-2 after:-translate-y-1/2 after:translate-x-1/2 after:transform after:cursor-ew-resize after:rounded-full after:bg-neutral-200 after:transition after:content-[\"\"] dark:after:bg-neutral-950',\n 'active:border-neutral-400 active:after:bg-neutral-400 dark:active:border-neutral-600 active:dark:after:bg-neutral-600'\n )}\n style={{\n width: `${width}px`,\n }}\n ref={containerRef}\n onMouseDown={startResizing}\n onTouchStart={startResizing}\n aria-valuemin={minWidth}\n aria-valuemax={maxWidth}\n aria-valuenow={width}\n aria-label=\"Resizable component\"\n role=\"slider\"\n tabIndex={0}\n >\n <div\n className=\"absolute left-0 top-0 size-full cursor-default overflow-hidden\"\n onMouseDown={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;AAkBO,MAAM,cAAuD,CAAC;AAAA,EACnE;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAM;AACE,QAAA,eAAe,OAAuB,IAAI;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAC/C,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAGlD,QAAM,gBAAgB;AAAA,IACpB,CACE,mBAGG;AACH,oBAAc,IAAI;AAClB,qBAAe,eAAe;AAAA,IAChC;AAAA,IACA,CAAA;AAAA,EACF;AAGM,QAAA,eAAe,YAAY,MAAM;AACrC,kBAAc,KAAK;AAAA,EACrB,GAAG,EAAE;AAGL,QAAM,SAAS;AAAA,IACb,CAAC,mBAA4C;AAC3C,YAAM,YAAY,aAAa;AAC3B,UAAA,cAAc,aAAa,QAAQ;AACrC,cAAM,EAAE,MAAM,kBAAkB,UAAU,sBAAsB;AAEhE,YAAI,UAAU;AACd,YAAI,0BAA0B,YAAY;AACxC,oBAAU,eAAe;AAAA,QAAA,WAChB,0BAA0B,YAAY;AACrC,oBAAA,eAAe,QAAQ,CAAC,EAAE;AAAA,QAAA;AAGtC,cAAM,WAAW,UAAU;AAC3B,cAAM,iBAAiB,KAAK,IAAI,UAAU,CAAC;AAE3C,iBAAS,cAAc;AAAA,MAAA;AAAA,IAE3B;AAAA,IACA,CAAC,UAAU;AAAA,EACb;AAGA,YAAU,MAAM;AACd,WAAO,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM;AACvD,WAAA,iBAAiB,WAAW,YAAY;AAC/C,WAAO,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM;AACvD,WAAA,iBAAiB,YAAY,YAAY;AAEhD,WAAO,MAAM;AACJ,aAAA,oBAAoB,aAAa,MAAM;AACvC,aAAA,oBAAoB,WAAW,YAAY;AAC3C,aAAA,oBAAoB,aAAa,MAAM;AACvC,aAAA,oBAAoB,YAAY,YAAY;AAAA,IACrD;AAAA,EAAA,GACC,CAAC,QAAQ,YAAY,CAAC;AAGvB,SAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT,YAAY,UAAU,QAAQ;AAAA,QAC9B,YAAY,UAAU,QAAQ;AAAA,QAC9B;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,OAAO,GAAG,KAAK;AAAA,MACjB;AAAA,MACA,KAAK;AAAA,MACL,aAAa;AAAA,MACb,cAAc;AAAA,MACd,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,cAAW;AAAA,MACX,MAAK;AAAA,MACL,UAAU;AAAA,MAEV,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,aAAa,CAAC,MAAM,EAAE,gBAAgB;AAAA,UACtC,cAAc,CAAC,MAAM,EAAE,gBAAgB;AAAA,UAEtC;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EACF;AAEJ;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../../src/components/WithResizer/index.tsx"],"sourcesContent":["'use client';\n\nimport React, {\n useCallback,\n useEffect,\n useRef,\n useState,\n type FC,\n type PropsWithChildren,\n} from 'react';\nimport { cn } from '../../utils/cn';\n\ntype WithResizerProps = {\n initialWidth: number;\n maxWidth?: number;\n minWidth?: number;\n};\n\nexport const WithResizer: FC<PropsWithChildren<WithResizerProps>> = ({\n initialWidth,\n maxWidth,\n minWidth = 0,\n children,\n}) => {\n const containerRef = useRef<HTMLDivElement>(null);\n const [width, setWidth] = useState(initialWidth);\n const [isResizing, setIsResizing] = useState(false);\n\n // Handler to start resizing\n const startResizing = useCallback(\n (\n mouseDownEvent:\n | React.MouseEvent<HTMLDivElement>\n | React.TouchEvent<HTMLDivElement>\n ) => {\n setIsResizing(true);\n mouseDownEvent.preventDefault();\n },\n []\n );\n\n // Handler to stop resizing\n const stopResizing = useCallback(() => {\n setIsResizing(false);\n }, []);\n\n // Handler to resize the div\n const resize = useCallback(\n (mouseMoveEvent: MouseEvent | TouchEvent) => {\n const container = containerRef.current;\n if (isResizing && container && parent) {\n const { left: containerLeft } = container.getBoundingClientRect();\n\n let clientX = 0;\n if (mouseMoveEvent instanceof MouseEvent) {\n clientX = mouseMoveEvent.clientX;\n } else if (mouseMoveEvent instanceof TouchEvent) {\n clientX = mouseMoveEvent.touches[0].clientX;\n }\n\n const newWidth = clientX - containerLeft;\n const correctedWidth = Math.max(newWidth, 0);\n\n setWidth(correctedWidth);\n }\n },\n [isResizing]\n );\n\n // Add event listeners for mouse move and mouse up\n useEffect(() => {\n window.addEventListener('mousemove', resize, { passive: true });\n window.addEventListener('mouseup', stopResizing);\n window.addEventListener('touchmove', resize, { passive: true });\n window.addEventListener('touchend', stopResizing);\n\n return () => {\n window.removeEventListener('mousemove', resize);\n window.removeEventListener('mouseup', stopResizing);\n window.removeEventListener('touchmove', resize);\n window.removeEventListener('touchend', stopResizing);\n };\n }, [resize, stopResizing]);\n\n return (\n <div\n className={cn(\n minWidth && `max-w-[${maxWidth}px]`,\n maxWidth && `min-w-[${minWidth}px]`,\n 'relative h-full w-full max-w-[80%] cursor-ew-resize border-r-[2px] border-neutral-200 transition dark:border-neutral-950',\n 'after:absolute after:right-0 after:top-1/2 after:block after:h-10 after:w-2 after:-translate-y-1/2 after:translate-x-1/2 after:transform after:cursor-ew-resize after:rounded-full after:bg-neutral-200 after:transition after:content-[\"\"] dark:after:bg-neutral-950',\n 'active:border-neutral-400 active:after:bg-neutral-400 dark:active:border-neutral-600 active:dark:after:bg-neutral-600'\n )}\n style={{\n width: `${width}px`,\n }}\n ref={containerRef}\n onMouseDown={startResizing}\n onTouchStart={startResizing}\n aria-valuemin={minWidth}\n aria-valuemax={maxWidth}\n aria-valuenow={width}\n aria-label=\"Resizable component\"\n role=\"slider\"\n tabIndex={0}\n >\n <div\n className=\"absolute left-0 top-0 size-full cursor-default overflow-hidden\"\n onMouseDown={(e) => e.stopPropagation()}\n onTouchStart={(e) => e.stopPropagation()}\n >\n {children}\n </div>\n </div>\n );\n};\n"],"names":[],"mappings":";;;;AAkBO,MAAM,cAAuD,CAAC;AAAA,EACnE;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX;AACF,MAAM;AACJ,QAAM,eAAe,OAAuB,IAAI;AAChD,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAS,YAAY;AAC/C,QAAM,CAAC,YAAY,aAAa,IAAI,SAAS,KAAK;AAGlD,QAAM,gBAAgB;AAAA,IACpB,CACE,mBAGG;AACH,oBAAc,IAAI;AAClB,qBAAe,eAAA;AAAA,IACjB;AAAA,IACA,CAAA;AAAA,EAAC;AAIH,QAAM,eAAe,YAAY,MAAM;AACrC,kBAAc,KAAK;AAAA,EACrB,GAAG,CAAA,CAAE;AAGL,QAAM,SAAS;AAAA,IACb,CAAC,mBAA4C;AAC3C,YAAM,YAAY,aAAa;AAC/B,UAAI,cAAc,aAAa,QAAQ;AACrC,cAAM,EAAE,MAAM,kBAAkB,UAAU,sBAAA;AAE1C,YAAI,UAAU;AACd,YAAI,0BAA0B,YAAY;AACxC,oBAAU,eAAe;AAAA,QAC3B,WAAW,0BAA0B,YAAY;AAC/C,oBAAU,eAAe,QAAQ,CAAC,EAAE;AAAA,QACtC;AAEA,cAAM,WAAW,UAAU;AAC3B,cAAM,iBAAiB,KAAK,IAAI,UAAU,CAAC;AAE3C,iBAAS,cAAc;AAAA,MACzB;AAAA,IACF;AAAA,IACA,CAAC,UAAU;AAAA,EAAA;AAIb,YAAU,MAAM;AACd,WAAO,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM;AAC9D,WAAO,iBAAiB,WAAW,YAAY;AAC/C,WAAO,iBAAiB,aAAa,QAAQ,EAAE,SAAS,MAAM;AAC9D,WAAO,iBAAiB,YAAY,YAAY;AAEhD,WAAO,MAAM;AACX,aAAO,oBAAoB,aAAa,MAAM;AAC9C,aAAO,oBAAoB,WAAW,YAAY;AAClD,aAAO,oBAAoB,aAAa,MAAM;AAC9C,aAAO,oBAAoB,YAAY,YAAY;AAAA,IACrD;AAAA,EACF,GAAG,CAAC,QAAQ,YAAY,CAAC;AAEzB,SACE;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAW;AAAA,QACT,YAAY,UAAU,QAAQ;AAAA,QAC9B,YAAY,UAAU,QAAQ;AAAA,QAC9B;AAAA,QACA;AAAA,QACA;AAAA,MAAA;AAAA,MAEF,OAAO;AAAA,QACL,OAAO,GAAG,KAAK;AAAA,MAAA;AAAA,MAEjB,KAAK;AAAA,MACL,aAAa;AAAA,MACb,cAAc;AAAA,MACd,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,iBAAe;AAAA,MACf,cAAW;AAAA,MACX,MAAK;AAAA,MACL,UAAU;AAAA,MAEV,UAAA;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAU;AAAA,UACV,aAAa,CAAC,MAAM,EAAE,gBAAA;AAAA,UACtB,cAAc,CAAC,MAAM,EAAE,gBAAA;AAAA,UAEtB;AAAA,QAAA;AAAA,MAAA;AAAA,IACH;AAAA,EAAA;AAGN;"}
@@ -72,6 +72,7 @@ const components_Toaster_Toast = require("./Toaster/Toast.cjs");
72
72
  const components_Toaster_useToast = require("./Toaster/useToast.cjs");
73
73
  const components_Toaster_Toaster = require("./Toaster/Toaster.cjs");
74
74
  const components_WithResizer_index = require("./WithResizer/index.cjs");
75
+ const components_SocialNetworks_DiscordLogo = require("./SocialNetworks/DiscordLogo.cjs");
75
76
  const components_SocialNetworks_FacebookLogo = require("./SocialNetworks/FacebookLogo.cjs");
76
77
  const components_SocialNetworks_InstagramLogo = require("./SocialNetworks/InstagramLogo.cjs");
77
78
  const components_SocialNetworks_LinkedInLogo = require("./SocialNetworks/LinkedInLogo.cjs");
@@ -176,6 +177,7 @@ exports.toast = components_Toaster_useToast.toast;
176
177
  exports.useToast = components_Toaster_useToast.useToast;
177
178
  exports.Toaster = components_Toaster_Toaster.Toaster;
178
179
  exports.WithResizer = components_WithResizer_index.WithResizer;
180
+ exports.DiscordLogo = components_SocialNetworks_DiscordLogo.DiscordLogo;
179
181
  exports.FacebookLogo = components_SocialNetworks_FacebookLogo.FacebookLogo;
180
182
  exports.InstagramLogo = components_SocialNetworks_InstagramLogo.InstagramLogo;
181
183
  exports.LinkedInLogo = components_SocialNetworks_LinkedInLogo.LinkedInLogo;
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.cjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -70,6 +70,7 @@ import { Toast, ToastAction, ToastClose, ToastDescription, ToastProvider, ToastT
70
70
  import { reducer, toast, useToast } from "./Toaster/useToast.mjs";
71
71
  import { Toaster } from "./Toaster/Toaster.mjs";
72
72
  import { WithResizer } from "./WithResizer/index.mjs";
73
+ import { DiscordLogo } from "./SocialNetworks/DiscordLogo.mjs";
73
74
  import { FacebookLogo } from "./SocialNetworks/FacebookLogo.mjs";
74
75
  import { InstagramLogo } from "./SocialNetworks/InstagramLogo.mjs";
75
76
  import { LinkedInLogo } from "./SocialNetworks/LinkedInLogo.mjs";
@@ -98,6 +99,7 @@ export {
98
99
  DictionaryCreationForm,
99
100
  DictionaryEditor,
100
101
  DictionaryFieldEditor,
102
+ DiscordLogo,
101
103
  DotPattern,
102
104
  DropDown,
103
105
  EditableFieldInput,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}