ics-ui-kit 0.1.19 → 1.0.0-alpha.1

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 (325) hide show
  1. package/README.md +36 -36
  2. package/dist/AlertContext-CxjW1LVL.js.map +1 -1
  3. package/dist/AlertIcon-BphnEYvV.js.map +1 -1
  4. package/dist/{Button-BZ3ON1Tj.js → Button-_qdP4hSf.js} +2 -2
  5. package/dist/Button-_qdP4hSf.js.map +1 -0
  6. package/dist/{ButtonBase-jgu7EolU.js → ButtonBase-CbWrYcx-.js} +2 -2
  7. package/dist/ButtonBase-CbWrYcx-.js.map +1 -0
  8. package/dist/{CheckboxField-limFbMk2.js → CheckboxField-xDqHgXHh.js} +32 -32
  9. package/dist/CheckboxField-xDqHgXHh.js.map +1 -0
  10. package/dist/Combination-DeIugdgY.js.map +1 -1
  11. package/dist/{Command-B7ZRyW8w.js → Command-WsAKNQrY.js} +8 -8
  12. package/dist/Command-WsAKNQrY.js.map +1 -0
  13. package/dist/ComponentVariantProvider-brk0g-hm.js.map +1 -1
  14. package/dist/Description-BTPMlTT-.js.map +1 -1
  15. package/dist/{Dialog-CdnsGyJD.js → Dialog-i_Y-phdM.js} +42 -43
  16. package/dist/Dialog-i_Y-phdM.js.map +1 -0
  17. package/dist/Divider-DPW5ZhZ8.js.map +1 -1
  18. package/dist/EmptyState-DRKjscH-.js.map +1 -1
  19. package/dist/ErrorState-B26k67-z.js.map +1 -1
  20. package/dist/FeatureIcon-BGE0Orkc.js.map +1 -1
  21. package/dist/{Field-CP_-li9L.js → Field-BcwUtgGr.js} +2 -2
  22. package/dist/Field-BcwUtgGr.js.map +1 -0
  23. package/dist/{FieldLabel-eyKmeWRn.js → FieldLabel-DYu1AcGH.js} +2 -2
  24. package/dist/FieldLabel-DYu1AcGH.js.map +1 -0
  25. package/dist/FolderSvg-cw0DxNVy.js.map +1 -1
  26. package/dist/{FormFooterTemplate-DdNnLu2-.js → FormFooterTemplate-CHlas_Pp.js} +5 -5
  27. package/dist/FormFooterTemplate-CHlas_Pp.js.map +1 -0
  28. package/dist/{FormHeader--F6b2aRk.js → FormHeader-PE63OqG9.js} +3 -3
  29. package/dist/FormHeader-PE63OqG9.js.map +1 -0
  30. package/dist/FormStack-DfoaOry7.js +1205 -0
  31. package/dist/FormStack-DfoaOry7.js.map +1 -0
  32. package/dist/HintState-BxrCAWqq.js.map +1 -1
  33. package/dist/Icon-DH3ev9GK.js.map +1 -1
  34. package/dist/{IconButton-uGJ3cQtk.js → IconButton-DAg1oMwz.js} +2 -2
  35. package/dist/IconButton-DAg1oMwz.js.map +1 -0
  36. package/dist/{IconTooltip-RSxvnBgH.js → IconTooltip-R6_6_f40.js} +2 -2
  37. package/dist/IconTooltip-R6_6_f40.js.map +1 -0
  38. package/dist/Indicator-AqxHWPA9.js.map +1 -1
  39. package/dist/{InputGroup-AVAtosX_.js → InputGroup-CW55G5nE.js} +5 -5
  40. package/dist/InputGroup-CW55G5nE.js.map +1 -0
  41. package/dist/{InputOTP-B2e1nfSO.js → InputOTP-DkVh6bBz.js} +2 -2
  42. package/dist/InputOTP-DkVh6bBz.js.map +1 -0
  43. package/dist/Loader-BpHiL6W-.js.map +1 -1
  44. package/dist/{MenuItem-d19Ty84F.js → MenuItem-C51uFz3V.js} +11 -11
  45. package/dist/MenuItem-C51uFz3V.js.map +1 -0
  46. package/dist/MenuItemShortcut-D1faeIXp.js.map +1 -1
  47. package/dist/MenuItemText-CRpaPbvg.js.map +1 -1
  48. package/dist/{Overlay-CVt011mY.js → Overlay-E0UvxzIc.js} +2 -2
  49. package/dist/Overlay-E0UvxzIc.js.map +1 -0
  50. package/dist/{Popover-KjZXxxl3.js → Popover-XrJa7lyb.js} +51 -52
  51. package/dist/Popover-XrJa7lyb.js.map +1 -0
  52. package/dist/{RichButton-B1wjK7Bk.js → RichButton-Bt0yUShU.js} +2 -2
  53. package/dist/RichButton-Bt0yUShU.js.map +1 -0
  54. package/dist/ScrollArea-CuuTeDn3.js.map +1 -1
  55. package/dist/ScrollShadowContainer-DdrnF8qU.js.map +1 -1
  56. package/dist/{SearchSelectTag-CA7Ie3Nx.js → SearchSelectTag-Dp5_OvZp.js} +16 -16
  57. package/dist/SearchSelectTag-Dp5_OvZp.js.map +1 -0
  58. package/dist/{Select-D9juHX8o.js → Select-DO02vXt3.js} +189 -190
  59. package/dist/Select-DO02vXt3.js.map +1 -0
  60. package/dist/{Sheet-qTIXsqm0.js → Sheet-C2UoHLL0.js} +40 -41
  61. package/dist/Sheet-C2UoHLL0.js.map +1 -0
  62. package/dist/Shortcut-D8L15_ed.js.map +1 -1
  63. package/dist/Skeleton-y6I-i9q5.js.map +1 -1
  64. package/dist/{TableFillHandle-C_yvCTSl.js → TableFillHandle-CHHoUi6s.js} +7 -7
  65. package/dist/TableFillHandle-CHHoUi6s.js.map +1 -0
  66. package/dist/{Tag-DdHXTyKF.js → Tag-Cf6HftP-.js} +4 -4
  67. package/dist/Tag-Cf6HftP-.js.map +1 -0
  68. package/dist/Text-DeBE8AKl.js.map +1 -1
  69. package/dist/{TextInput-5BuZtWV6.js → TextInput-CoL8nOyt.js} +3 -3
  70. package/dist/TextInput-CoL8nOyt.js.map +1 -0
  71. package/dist/{TextOverflowTooltip-B1I5qwAT.js → TextOverflowTooltip-XPDdO9Dz.js} +2 -2
  72. package/dist/{TextOverflowTooltip-B1I5qwAT.js.map → TextOverflowTooltip-XPDdO9Dz.js.map} +1 -1
  73. package/dist/{Toggle-v_HT3Gm2.js → Toggle-CmalMf4O.js} +2 -2
  74. package/dist/Toggle-CmalMf4O.js.map +1 -0
  75. package/dist/{Tooltip-7Duaau0S.js → Tooltip-D2XvRS0c.js} +64 -65
  76. package/dist/Tooltip-D2XvRS0c.js.map +1 -0
  77. package/dist/{TriggerButton-Bakr8Boi.js → TriggerButton-CoAgB4lx.js} +2 -2
  78. package/dist/TriggerButton-CoAgB4lx.js.map +1 -0
  79. package/dist/blocks/auth/otp-form.js +3240 -204
  80. package/dist/blocks/auth/otp-form.js.map +1 -1
  81. package/dist/cn-dsXlqdJg.js.map +1 -1
  82. package/dist/components/alert-dialog/AlertDialog.d.ts +2 -4
  83. package/dist/components/alert-dialog.js +71 -72
  84. package/dist/components/alert-dialog.js.map +1 -1
  85. package/dist/components/alert.js +1 -1
  86. package/dist/components/alert.js.map +1 -1
  87. package/dist/components/avatar.js.map +1 -1
  88. package/dist/components/background-pattern.js.map +1 -1
  89. package/dist/components/badge.js.map +1 -1
  90. package/dist/components/banner.js.map +1 -1
  91. package/dist/components/breadcrumb.js.map +1 -1
  92. package/dist/components/button.js +5 -5
  93. package/dist/components/button.js.map +1 -1
  94. package/dist/components/calendar.js +2889 -71
  95. package/dist/components/calendar.js.map +1 -1
  96. package/dist/components/card.js +2 -2
  97. package/dist/components/card.js.map +1 -1
  98. package/dist/components/carousel.js +1 -1
  99. package/dist/components/carousel.js.map +1 -1
  100. package/dist/components/checkbox.js +1 -1
  101. package/dist/components/collapsible.js.map +1 -1
  102. package/dist/components/color-tile.js.map +1 -1
  103. package/dist/components/command.js +1 -1
  104. package/dist/components/container.js.map +1 -1
  105. package/dist/components/context-menu.js +6 -6
  106. package/dist/components/context-menu.js.map +1 -1
  107. package/dist/components/counter.js +1 -1
  108. package/dist/components/counter.js.map +1 -1
  109. package/dist/components/dialog/Dialog.d.ts +2 -4
  110. package/dist/components/dialog.js +3 -3
  111. package/dist/components/dialog.js.map +1 -1
  112. package/dist/components/divider.js.map +1 -1
  113. package/dist/components/drawer/components/drawer-content/DrawerContent.d.ts +1 -2
  114. package/dist/components/drawer.js +98 -99
  115. package/dist/components/drawer.js.map +1 -1
  116. package/dist/components/dropdown/Dropdown.d.ts +2 -4
  117. package/dist/components/dropdown.js +258 -259
  118. package/dist/components/dropdown.js.map +1 -1
  119. package/dist/components/error-state.js +1 -1
  120. package/dist/components/error-state.js.map +1 -1
  121. package/dist/components/field.js +1 -1
  122. package/dist/components/file-upload.js +3 -3
  123. package/dist/components/file-upload.js.map +1 -1
  124. package/dist/components/form/Form.d.ts +14 -0
  125. package/dist/components/form/components/form-field/FormField.d.ts +4 -0
  126. package/dist/components/form.js +5 -5
  127. package/dist/components/form.js.map +1 -1
  128. package/dist/components/glass-toolbar.js +6 -6
  129. package/dist/components/glass-toolbar.js.map +1 -1
  130. package/dist/components/icon-tooltip.js +1 -1
  131. package/dist/components/image-placeholder.js.map +1 -1
  132. package/dist/components/image-preview.js +2 -2
  133. package/dist/components/image-preview.js.map +1 -1
  134. package/dist/components/image-uploader.js +1 -1
  135. package/dist/components/image-uploader.js.map +1 -1
  136. package/dist/components/input-otp.js +1 -1
  137. package/dist/components/input.js +5 -5
  138. package/dist/components/input.js.map +1 -1
  139. package/dist/components/label.js +1 -1
  140. package/dist/components/menu-item.js +6 -6
  141. package/dist/components/menu-item.js.map +1 -1
  142. package/dist/components/overflow-tooltip.js +1 -1
  143. package/dist/components/overlay.js +1 -1
  144. package/dist/components/page-state.js +7 -7
  145. package/dist/components/page-state.js.map +1 -1
  146. package/dist/components/popover/Popover.d.ts +1 -2
  147. package/dist/components/popover.js +1 -1
  148. package/dist/components/progress-circle.js +1 -1
  149. package/dist/components/progress-circle.js.map +1 -1
  150. package/dist/components/progress.js +3 -3
  151. package/dist/components/progress.js.map +1 -1
  152. package/dist/components/prose.js.map +1 -1
  153. package/dist/components/radio-group.js +1 -1
  154. package/dist/components/radio-group.js.map +1 -1
  155. package/dist/components/resizable/Resizable.d.ts +1 -1
  156. package/dist/components/resizable.js +1 -1
  157. package/dist/components/resizable.js.map +1 -1
  158. package/dist/components/scheduler.js +1 -1
  159. package/dist/components/scheduler.js.map +1 -1
  160. package/dist/components/search-select/multi-select/MultiSelect.d.ts +1 -1
  161. package/dist/components/search-select.js +4 -4
  162. package/dist/components/search-select.js.map +1 -1
  163. package/dist/components/select/Select.d.ts +1 -2
  164. package/dist/components/select.js +1 -1
  165. package/dist/components/sheet/Sheet.d.ts +1 -2
  166. package/dist/components/sheet.js +1 -1
  167. package/dist/components/sidebar.js +90 -90
  168. package/dist/components/sidebar.js.map +1 -1
  169. package/dist/components/slider.js +1 -1
  170. package/dist/components/slider.js.map +1 -1
  171. package/dist/components/stepper.js +1 -1
  172. package/dist/components/stepper.js.map +1 -1
  173. package/dist/components/switch.js +2 -2
  174. package/dist/components/switch.js.map +1 -1
  175. package/dist/components/system-state.js +1 -1
  176. package/dist/components/system-state.js.map +1 -1
  177. package/dist/components/table/editable/editableCell.d.ts +2 -2
  178. package/dist/components/table/editable.js +1 -1
  179. package/dist/components/table/tree.js +1 -1
  180. package/dist/components/table.js +2 -2
  181. package/dist/components/tabs.js +2 -2
  182. package/dist/components/tabs.js.map +1 -1
  183. package/dist/components/tag-input.js +5 -5
  184. package/dist/components/tag-input.js.map +1 -1
  185. package/dist/components/tag.js +1 -1
  186. package/dist/components/textarea.js +1 -1
  187. package/dist/components/textarea.js.map +1 -1
  188. package/dist/components/timer.js.map +1 -1
  189. package/dist/components/toast.js +6 -6
  190. package/dist/components/toast.js.map +1 -1
  191. package/dist/components/toggle-group.js +1 -1
  192. package/dist/components/toggle-group.js.map +1 -1
  193. package/dist/components/toggle.js +1 -1
  194. package/dist/components/toolbar.js +1 -1
  195. package/dist/components/toolbar.js.map +1 -1
  196. package/dist/components/tooltip/Tooltip.d.ts +2 -4
  197. package/dist/components/tooltip.js +1 -1
  198. package/dist/design-tokens.source.json +1 -0
  199. package/dist/docs/tailwind-utilities/ScrollFade.stories.d.ts +28 -0
  200. package/dist/docs/tailwind-utilities/Shimmer.stories.d.ts +32 -0
  201. package/dist/floating-ui.react-dom-BwDfy92G.js.map +1 -1
  202. package/dist/font-smoothing.css +4 -0
  203. package/dist/formatBytes-C4QXq5lC.js.map +1 -1
  204. package/dist/index-0ioNhtNM.js.map +1 -1
  205. package/dist/index-1SnkxfPR.js.map +1 -1
  206. package/dist/index-437EL2iq.js.map +1 -1
  207. package/dist/index-BDrapWDv.js.map +1 -1
  208. package/dist/index-BGQepRFJ.js.map +1 -1
  209. package/dist/index-BVqs-uqP.js.map +1 -1
  210. package/dist/index-BZPx6jYI.js.map +1 -1
  211. package/dist/index-Bb23HztA.js.map +1 -1
  212. package/dist/index-BjtNfqNq.js.map +1 -1
  213. package/dist/index-BpWB3aFK.js.map +1 -1
  214. package/dist/index-ByaXH_ih.js.map +1 -1
  215. package/dist/index-CCKe-Mpx.js.map +1 -1
  216. package/dist/index-CFaU3UXv.js.map +1 -1
  217. package/dist/index-CLuiUUQ8.js.map +1 -1
  218. package/dist/index-CMxHunQ4.js.map +1 -1
  219. package/dist/index-CmBeyp2d.js.map +1 -1
  220. package/dist/index-DFZozV_h.js.map +1 -1
  221. package/dist/index-DHsfW5Rj.js.map +1 -1
  222. package/dist/index-DHyZ_0Ut.js.map +1 -1
  223. package/dist/index-DLcqcWxM.js.map +1 -1
  224. package/dist/index-DnnQs07z.js.map +1 -1
  225. package/dist/index-Uiy0Xwy2.js.map +1 -1
  226. package/dist/index-_ITz1IyW.js.map +1 -1
  227. package/dist/index.js.map +1 -1
  228. package/dist/{inputBaseStyles-BfZIWuQ6.js → inputBaseStyles-CZwQWSub.js} +7 -7
  229. package/dist/inputBaseStyles-CZwQWSub.js.map +1 -0
  230. package/dist/lib/utils.js.map +1 -1
  231. package/dist/opaqueCell-D95h1mFM.js.map +1 -1
  232. package/dist/tailwind.css +408 -0
  233. package/dist/theme.css +360 -360
  234. package/dist/{treeModel-BlJWP4sc.js → treeModel-CUO1A5s7.js} +11 -11
  235. package/dist/treeModel-CUO1A5s7.js.map +1 -0
  236. package/dist/types/css.d.ts +4 -4
  237. package/dist/useBreakpoints-DHvp74UL.js.map +1 -1
  238. package/dist/useDebounce-BRah78CF.js.map +1 -1
  239. package/dist/useFileUpload-Bnl3P8mP.js.map +1 -1
  240. package/dist/useItemsKeyboardNavigation-CmeOR30y.js.map +1 -1
  241. package/dist/useMergeRefs-qoKniYqT.js.map +1 -1
  242. package/package.json +28 -28
  243. package/dist/Button-BZ3ON1Tj.js.map +0 -1
  244. package/dist/ButtonBase-jgu7EolU.js.map +0 -1
  245. package/dist/CheckboxField-limFbMk2.js.map +0 -1
  246. package/dist/Command-B7ZRyW8w.js.map +0 -1
  247. package/dist/DayPicker-4hE1QEvO.js +0 -2452
  248. package/dist/DayPicker-4hE1QEvO.js.map +0 -1
  249. package/dist/Dialog-CdnsGyJD.js.map +0 -1
  250. package/dist/Field-CP_-li9L.js.map +0 -1
  251. package/dist/FieldLabel-eyKmeWRn.js.map +0 -1
  252. package/dist/FormFooterTemplate-DdNnLu2-.js.map +0 -1
  253. package/dist/FormHeader--F6b2aRk.js.map +0 -1
  254. package/dist/FormStack-Cc_ELdWL.js +0 -127
  255. package/dist/FormStack-Cc_ELdWL.js.map +0 -1
  256. package/dist/IconButton-uGJ3cQtk.js.map +0 -1
  257. package/dist/IconTooltip-RSxvnBgH.js.map +0 -1
  258. package/dist/InputGroup-AVAtosX_.js.map +0 -1
  259. package/dist/InputOTP-B2e1nfSO.js.map +0 -1
  260. package/dist/MenuItem-d19Ty84F.js.map +0 -1
  261. package/dist/Overlay-CVt011mY.js.map +0 -1
  262. package/dist/Popover-KjZXxxl3.js.map +0 -1
  263. package/dist/RichButton-B1wjK7Bk.js.map +0 -1
  264. package/dist/SearchSelectTag-CA7Ie3Nx.js.map +0 -1
  265. package/dist/Select-D9juHX8o.js.map +0 -1
  266. package/dist/Sheet-qTIXsqm0.js.map +0 -1
  267. package/dist/TableFillHandle-C_yvCTSl.js.map +0 -1
  268. package/dist/Tag-DdHXTyKF.js.map +0 -1
  269. package/dist/TextInput-5BuZtWV6.js.map +0 -1
  270. package/dist/Toggle-v_HT3Gm2.js.map +0 -1
  271. package/dist/Tooltip-7Duaau0S.js.map +0 -1
  272. package/dist/TriggerButton-Bakr8Boi.js.map +0 -1
  273. package/dist/buildMatchPatternFn-d7GTeGl_.js +0 -68
  274. package/dist/buildMatchPatternFn-d7GTeGl_.js.map +0 -1
  275. package/dist/components/portal-container/PortalContainer.d.ts +0 -10
  276. package/dist/components/portal-container/index.d.ts +0 -2
  277. package/dist/components/portal-container/portalContainerEvents.d.ts +0 -12
  278. package/dist/components/portal-container/usePortalContainer.d.ts +0 -10
  279. package/dist/components/portal-container.d.ts +0 -2
  280. package/dist/components/portal-container.js +0 -14
  281. package/dist/components/portal-container.js.map +0 -1
  282. package/dist/index.esm-CXA6i4d7.js +0 -1282
  283. package/dist/index.esm-CXA6i4d7.js.map +0 -1
  284. package/dist/inputBaseStyles-BfZIWuQ6.js.map +0 -1
  285. package/dist/lib/utils/styles.d.ts +0 -10
  286. package/dist/normalizeDates-9A3c9WYM.js +0 -32
  287. package/dist/normalizeDates-9A3c9WYM.js.map +0 -1
  288. package/dist/styles-scoped.css +0 -6605
  289. package/dist/styles-scoped.d.ts +0 -1
  290. package/dist/styles.css +0 -6594
  291. package/dist/styles.d.ts +0 -1
  292. package/dist/treeModel-BlJWP4sc.js.map +0 -1
  293. package/dist/usePortalContainer-BAIp0kSF.js +0 -44
  294. package/dist/usePortalContainer-BAIp0kSF.js.map +0 -1
  295. package/dist/vendors/date-fns/index.d.ts +0 -12
  296. package/dist/vendors/date-fns/locale/en-US/index.d.ts +0 -5
  297. package/dist/vendors/date-fns/locale/en-US.d.ts +0 -2
  298. package/dist/vendors/date-fns/locale/en-US.js +0 -372
  299. package/dist/vendors/date-fns/locale/en-US.js.map +0 -1
  300. package/dist/vendors/date-fns/locale/ru/index.d.ts +0 -5
  301. package/dist/vendors/date-fns/locale/ru.d.ts +0 -2
  302. package/dist/vendors/date-fns/locale/ru.js +0 -569
  303. package/dist/vendors/date-fns/locale/ru.js.map +0 -1
  304. package/dist/vendors/date-fns.d.ts +0 -2
  305. package/dist/vendors/date-fns.js +0 -2
  306. package/dist/vendors/date-fns.js.map +0 -1
  307. package/dist/vendors/react-day-picker/index.d.ts +0 -13
  308. package/dist/vendors/react-day-picker.d.ts +0 -2
  309. package/dist/vendors/react-day-picker.js +0 -87
  310. package/dist/vendors/react-day-picker.js.map +0 -1
  311. package/dist/vendors/react-hook-form/index.d.ts +0 -14
  312. package/dist/vendors/react-hook-form.d.ts +0 -2
  313. package/dist/vendors/react-hook-form.js +0 -19
  314. package/dist/vendors/react-hook-form.js.map +0 -1
  315. package/dist/vendors/tanstack/react-table/index.d.ts +0 -13
  316. package/dist/vendors/tanstack/react-table.d.ts +0 -2
  317. package/dist/vendors/tanstack/react-table.js +0 -2090
  318. package/dist/vendors/tanstack/react-table.js.map +0 -1
  319. package/dist/vendors/zod/index.d.ts +0 -13
  320. package/dist/vendors/zod.d.ts +0 -2
  321. package/dist/vendors/zod.js +0 -3080
  322. package/dist/vendors/zod.js.map +0 -1
  323. package/dist/zod-BMNoK3aM.js +0 -75
  324. package/dist/zod-BMNoK3aM.js.map +0 -1
  325. package/tailwind.preset.js +0 -452
@@ -1,7 +1,7 @@
1
1
  import { jsxs as x, jsx as d } from "react/jsx-runtime";
2
2
  import S, { useState as I, useRef as b, useEffect as y, useCallback as h, useMemo as V } from "react";
3
3
  import { u as k } from "./useMergeRefs-qoKniYqT.js";
4
- import { a as w, c as v, b as A, d as g } from "./InputGroup-AVAtosX_.js";
4
+ import { a as w, c as v, b as A, d as g } from "./InputGroup-CW55G5nE.js";
5
5
  import { T } from "./index-BVqs-uqP.js";
6
6
  import { C as E } from "./circle-x-u75Rx3Tj.js";
7
7
  import { C as N } from "./check-CeyaOoZv.js";
@@ -127,7 +127,7 @@ const B = T({
127
127
  base: "",
128
128
  slots: {
129
129
  action: "hidden group-focus-within/input-group:block group-hover/input-group:block",
130
- startIcon: "!border-r-0 pr-0 text-muted",
130
+ startIcon: "border-r-0! pr-0 text-muted",
131
131
  endIcon: "border-l-0 pl-0 text-muted",
132
132
  input: ""
133
133
  },
@@ -202,4 +202,4 @@ export {
202
202
  H as T,
203
203
  z as u
204
204
  };
205
- //# sourceMappingURL=TextInput-5BuZtWV6.js.map
205
+ //# sourceMappingURL=TextInput-CoL8nOyt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TextInput-CoL8nOyt.js","sources":["../node_modules/.pnpm/lucide-react@0.460.0_react@18.3.1/node_modules/lucide-react/dist/esm/icons/copy.js","../src/hooks/useControlledValue.ts","../src/hooks/useCopyAction.ts","../src/hooks/useAutofill.ts","../src/hooks/useInputWithActions.ts","../src/components/input/text-input/TextInput.tsx"],"sourcesContent":["/**\n * @license lucide-react v0.460.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst Copy = createLucideIcon(\"Copy\", [\n [\"rect\", { width: \"14\", height: \"14\", x: \"8\", y: \"8\", rx: \"2\", ry: \"2\", key: \"17jyea\" }],\n [\"path\", { d: \"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2\", key: \"zix9uf\" }]\n]);\n\nexport { Copy as default };\n//# sourceMappingURL=copy.js.map\n","import { useCallback, useEffect, useRef, useState } from \"react\";\r\n\r\n/**\r\n * Хук для управления контролируемым и неконтролируемым состоянием\r\n */\r\nexport function useControlledValue(\r\n\tvalue: string | number | readonly string[] | undefined,\r\n\tdefaultValue: string | number | readonly string[] | undefined,\r\n\tonChange?: (value: string | null) => void\r\n) {\r\n\tconst [uncontrolledValue, setUncontrolledValue] = useState(\r\n\t\ttypeof defaultValue === \"string\" ? defaultValue : String(defaultValue ?? \"\")\r\n\t);\r\n\tconst inputRef = useRef<HTMLInputElement>(null);\r\n\r\n\t// Добавляем обработчик для отслеживания изменений в uncontrolled режиме\r\n\tuseEffect(() => {\r\n\t\tif (value !== undefined) return;\r\n\r\n\t\tconst input = inputRef.current;\r\n\t\tif (!input) return;\r\n\r\n\t\tconst handleInput = () => {\r\n\t\t\tsetUncontrolledValue(input.value);\r\n\t\t};\r\n\r\n\t\tinput.addEventListener(\"input\", handleInput);\r\n\t\treturn () => input.removeEventListener(\"input\", handleInput);\r\n\t}, [value, inputRef]);\r\n\r\n\tconst getCurrentValue = useCallback(() => {\r\n\t\tif (value !== undefined) return String(value);\r\n\t\treturn uncontrolledValue;\r\n\t}, [value, uncontrolledValue]);\r\n\r\n\tconst handleChange = useCallback(\r\n\t\t(e: React.ChangeEvent<HTMLInputElement>) => {\r\n\t\t\tonChange?.(e.target.value);\r\n\t\t},\r\n\t\t[onChange]\r\n\t);\r\n\r\n\treturn {\r\n\t\tinputRef,\r\n\t\tgetCurrentValue,\r\n\t\thandleChange,\r\n\t\tcurrentValue: getCurrentValue()\r\n\t};\r\n}\r\n","import { useCallback, useEffect, useState } from \"react\";\r\n\r\n/**\r\n * Хук для копирования содержимого в буфер обмена\r\n */\r\nexport function useCopyAction() {\r\n\tconst [hasCopied, setHasCopied] = useState(false);\r\n\r\n\t// Эффект для сброса статуса копирования\r\n\tuseEffect(() => {\r\n\t\tif (!hasCopied) return;\r\n\t\tconst timeout = setTimeout(() => {\r\n\t\t\tsetHasCopied(false);\r\n\t\t}, 2000);\r\n\t\treturn () => clearTimeout(timeout);\r\n\t}, [hasCopied]);\r\n\r\n\tconst handleCopy = useCallback((value: string) => {\r\n\t\tif (value) {\r\n\t\t\tnavigator.clipboard.writeText(value);\r\n\t\t\tsetHasCopied(true);\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\thasCopied,\r\n\t\thandleCopy\r\n\t};\r\n}\r\n","import { useEffect, useRef, useState } from \"react\";\r\n\r\n/**\r\n * Хук для определения состояния автозаполнения input'а\r\n */\r\nexport function useAutofill() {\r\n\tconst [isAutofilled, setIsAutofilled] = useState(false);\r\n\tconst inputRef = useRef<HTMLInputElement>(null);\r\n\r\n\tuseEffect(() => {\r\n\t\tconst input = inputRef.current;\r\n\t\tif (!input) return;\r\n\r\n\t\tconst checkAutofill = (element: Element): boolean => {\r\n\t\t\ttry {\r\n\t\t\t\treturn element.matches(\":-webkit-autofill\");\r\n\t\t\t} catch {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\tconst updateAutofillState = () => {\r\n\t\t\tconst autofilled = checkAutofill(input);\r\n\t\t\tsetIsAutofilled(autofilled);\r\n\t\t};\r\n\r\n\t\tinput.addEventListener(\"input\", updateAutofillState);\r\n\r\n\t\tlet intervalCounter = 0;\r\n\t\tconst intervalTime = 25;\r\n\t\t// Максимальное время ожидания появления autofill, в ms\r\n\t\tconst intervalTimeLimit = 1000;\r\n\r\n\t\tconst interval = setInterval(() => {\r\n\t\t\tintervalCounter += intervalTime;\r\n\t\t\tif (intervalCounter > intervalTimeLimit) {\r\n\t\t\t\tclearInterval(interval);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (checkAutofill(input)) {\r\n\t\t\t\tsetIsAutofilled(true);\r\n\t\t\t\tclearInterval(interval);\r\n\t\t\t}\r\n\t\t}, intervalTime);\r\n\r\n\t\tupdateAutofillState();\r\n\r\n\t\treturn () => {\r\n\t\t\tclearInterval(interval);\r\n\t\t\tinput.removeEventListener(\"input\", updateAutofillState);\r\n\t\t};\r\n\t}, []);\r\n\r\n\treturn {\r\n\t\tisAutofilled,\r\n\t\tinputRef\r\n\t};\r\n}\r\n","import { useCallback, useMemo } from \"react\";\r\nimport { useControlledValue } from \"./useControlledValue\";\r\nimport { useCopyAction } from \"./useCopyAction\";\r\nimport { useAutofill } from \"./useAutofill\";\r\n\r\nexport interface UseInputWithActionsOptions {\r\n\t/** Значение input (для контролируемого режима) */\r\n\tvalue?: string | number | readonly string[];\r\n\t/** Значение по умолчанию (для неконтролируемого режима) */\r\n\tdefaultValue?: string | number | readonly string[];\r\n\t/** Колбэк на изменение значения */\r\n\tonChange?: (value: string | null) => void;\r\n\t/** Флаг только для чтения */\r\n\treadOnly?: boolean;\r\n\t/** Флаг отключения */\r\n\tdisabled?: boolean;\r\n\t/** Флаг для отображения кнопки очистки */\r\n\tshowClearIcon?: boolean;\r\n\t/** Флаг для отображения кнопки копирования */\r\n\tshowCopyIcon?: boolean;\r\n}\r\n\r\n/**\r\n * Общий хук для input с полным функционалом копирования и очистки\r\n */\r\nexport function useInputWithActions({\r\n\tvalue,\r\n\tdefaultValue,\r\n\tonChange,\r\n\treadOnly,\r\n\tdisabled,\r\n\tshowClearIcon = false,\r\n\tshowCopyIcon = false\r\n}: UseInputWithActionsOptions) {\r\n\tconst controlledValue = useControlledValue(value, defaultValue, onChange);\r\n\tconst copyAction = useCopyAction();\r\n\tconst { isAutofilled } = useAutofill();\r\n\r\n\tconst isEditable = useMemo(() => {\r\n\t\treturn !readOnly && !disabled;\r\n\t}, [readOnly, disabled]);\r\n\r\n\tconst handleClear = useCallback(() => {\r\n\t\tif (value !== undefined) {\r\n\t\t\t// Controlled mode\r\n\t\t\tonChange?.(\"\");\r\n\t\t} else {\r\n\t\t\t// Uncontrolled mode\r\n\t\t\tif (controlledValue.inputRef.current) {\r\n\t\t\t\tcontrolledValue.inputRef.current.value = \"\";\r\n\t\t\t\tcontrolledValue.inputRef.current.dispatchEvent(new Event(\"input\", { bubbles: true }));\r\n\t\t\t}\r\n\t\t}\r\n\t}, [onChange, value, controlledValue.inputRef]);\r\n\r\n\tconst handleCopyValue = useCallback(() => {\r\n\t\tcopyAction.handleCopy(String(controlledValue.currentValue));\r\n\t}, [copyAction.handleCopy, controlledValue.currentValue]);\r\n\r\n\tconst shouldShowClearIcon = showClearIcon && isEditable && controlledValue.currentValue;\r\n\tconst shouldShowCopyIcon = showCopyIcon && controlledValue.currentValue;\r\n\r\n\treturn {\r\n\t\t// Значения и состояние\r\n\t\tcurrentValue: controlledValue.currentValue,\r\n\t\tinputRef: controlledValue.inputRef,\r\n\t\tisEditable,\r\n\r\n\t\t// Обработчики\r\n\t\thandleChange: controlledValue.handleChange,\r\n\t\thandleClear,\r\n\t\thandleCopy: handleCopyValue,\r\n\r\n\t\t// Состояние копирования\r\n\t\thasCopied: copyAction.hasCopied,\r\n\r\n\t\t// Состояние автозаполнения\r\n\t\tisAutofilled,\r\n\r\n\t\t// Флаги видимости кнопок\r\n\t\tshouldShowClearIcon,\r\n\t\tshouldShowCopyIcon\r\n\t};\r\n}\r\n","import React, { HTMLAttributes } from \"react\";\r\nimport { useMergeRefs } from \"@/hooks/useMergeRefs\";\r\nimport { useInputWithActions } from \"@/hooks/useInputWithActions\";\r\nimport { InputGroup, InputGroupInput, InputGroupButton, InputGroupText } from \"../input-group/InputGroup\";\r\nimport { CircleX, Copy, Check } from \"lucide-react\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { InputProps } from \"../input/Input\";\r\n\r\nconst textInputStyles = tv({\r\n\tbase: \"\",\r\n\tslots: {\r\n\t\taction: \"hidden group-focus-within/input-group:block group-hover/input-group:block\",\r\n\t\tstartIcon: \"border-r-0! pr-0 text-muted\",\r\n\t\tendIcon: \"border-l-0 pl-0 text-muted\",\r\n\t\tinput: \"\"\r\n\t},\r\n\tvariants: {\r\n\t\thasStartIcon: { true: { input: \"pl-2\" } }\r\n\t}\r\n});\r\n\r\nexport interface TextInputProps\r\n\textends Omit<InputProps, \"onChange\">,\r\n\t\tOmit<HTMLAttributes<HTMLInputElement>, \"onChange\"> {\r\n\t/** Иконка, отображаемая в начале текстового поля */\r\n\tstartIcon?: React.ReactNode;\r\n\t/** Иконка, отображаемая в конце текстового поля */\r\n\tendIcon?: React.ReactNode;\r\n\t/** Флаг для отображения кнопки очистки значения */\r\n\tshowClearIcon?: boolean;\r\n\t/** Флаг для отображения кнопки копирования значения */\r\n\tshowCopyIcon?: boolean;\r\n\t/** Колбэк на изменение значения */\r\n\tonChange?: (value: string | null) => void;\r\n}\r\n\r\n/**\r\n * Компонент текстового поля ввода с поддержкой иконок и дополнительных действий.\r\n */\r\nexport const TextInput = React.forwardRef<HTMLInputElement, TextInputProps>(\r\n\t(\r\n\t\t{\r\n\t\t\tstartIcon,\r\n\t\t\tendIcon,\r\n\t\t\tshowClearIcon,\r\n\t\t\tshowCopyIcon,\r\n\t\t\tvalue,\r\n\t\t\tdefaultValue,\r\n\t\t\tonChange,\r\n\t\t\treadOnly,\r\n\t\t\tdisabled,\r\n\t\t\terror,\r\n\t\t\tclassName,\r\n\t\t\t...props\r\n\t\t},\r\n\t\tref\r\n\t) => {\r\n\t\tconst styles = textInputStyles();\r\n\r\n\t\tconst inputActions = useInputWithActions({\r\n\t\t\tvalue,\r\n\t\t\tdefaultValue,\r\n\t\t\tonChange,\r\n\t\t\treadOnly,\r\n\t\t\tdisabled,\r\n\t\t\tshowClearIcon,\r\n\t\t\tshowCopyIcon\r\n\t\t});\r\n\r\n\t\tconst mergedRef = useMergeRefs(ref, inputActions.inputRef);\r\n\r\n\t\treturn (\r\n\t\t\t<InputGroup className={styles.base({ className })}>\r\n\t\t\t\t{startIcon && <InputGroupText className={styles.startIcon()}>{startIcon}</InputGroupText>}\r\n\r\n\t\t\t\t<InputGroupInput\r\n\t\t\t\t\tref={mergedRef}\r\n\t\t\t\t\tvalue={value}\r\n\t\t\t\t\tdefaultValue={defaultValue}\r\n\t\t\t\t\tonChange={inputActions.handleChange}\r\n\t\t\t\t\treadOnly={readOnly}\r\n\t\t\t\t\tdisabled={disabled}\r\n\t\t\t\t\terror={error}\r\n\t\t\t\t\tclassName={styles.input({ hasStartIcon: !!startIcon })}\r\n\t\t\t\t\t{...props}\r\n\t\t\t\t/>\r\n\r\n\t\t\t\t{inputActions.shouldShowClearIcon && (\r\n\t\t\t\t\t<InputGroupButton\r\n\t\t\t\t\t\ticon={CircleX}\r\n\t\t\t\t\t\tonClick={inputActions.handleClear}\r\n\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\tclassName={styles.action()}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{inputActions.shouldShowCopyIcon && (\r\n\t\t\t\t\t<InputGroupButton\r\n\t\t\t\t\t\ticon={inputActions.hasCopied ? Check : Copy}\r\n\t\t\t\t\t\tonClick={inputActions.handleCopy}\r\n\t\t\t\t\t\ttype=\"button\"\r\n\t\t\t\t\t\tclassName={styles.action()}\r\n\t\t\t\t\t/>\r\n\t\t\t\t)}\r\n\r\n\t\t\t\t{endIcon && <InputGroupText className={styles.endIcon()}>{endIcon}</InputGroupText>}\r\n\t\t\t</InputGroup>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nTextInput.displayName = \"TextInput\";\r\n\r\nexport default TextInput;\r\n"],"names":["Copy","createLucideIcon","useControlledValue","value","defaultValue","onChange","uncontrolledValue","setUncontrolledValue","useState","inputRef","useRef","useEffect","input","handleInput","getCurrentValue","useCallback","handleChange","e","useCopyAction","hasCopied","setHasCopied","timeout","handleCopy","useAutofill","isAutofilled","setIsAutofilled","checkAutofill","element","updateAutofillState","autofilled","intervalCounter","intervalTime","intervalTimeLimit","interval","useInputWithActions","readOnly","disabled","showClearIcon","showCopyIcon","controlledValue","copyAction","isEditable","useMemo","handleClear","handleCopyValue","shouldShowClearIcon","shouldShowCopyIcon","textInputStyles","tv","TextInput","React","startIcon","endIcon","error","className","props","ref","styles","inputActions","mergedRef","useMergeRefs","jsxs","InputGroup","InputGroupText","jsx","InputGroupInput","InputGroupButton","CircleX","Check"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,6 +1,6 @@
1
1
  import { jsx as t, jsxs as p } from "react/jsx-runtime";
2
2
  import { c as n } from "./cn-dsXlqdJg.js";
3
- import { a as u, T, b as g, c as m } from "./Tooltip-7Duaau0S.js";
3
+ import { a as u, T, b as g, c as m } from "./Tooltip-D2XvRS0c.js";
4
4
  import { useState as O, useRef as h, useCallback as d } from "react";
5
5
  const w = (o) => o.scrollWidth > o.offsetWidth || o.scrollHeight > o.offsetHeight, x = () => {
6
6
  const [o, r] = O(!1), e = h(null), s = d((l) => {
@@ -33,4 +33,4 @@ export {
33
33
  v as T,
34
34
  x as u
35
35
  };
36
- //# sourceMappingURL=TextOverflowTooltip-B1I5qwAT.js.map
36
+ //# sourceMappingURL=TextOverflowTooltip-XPDdO9Dz.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextOverflowTooltip-B1I5qwAT.js","sources":["../src/lib/utils/dom.ts","../src/components/overflow-tooltip/useOverflowTooltip.ts","../src/components/overflow-tooltip/OverflowTooltip.tsx","../src/components/overflow-tooltip/TextOverflowTooltip.tsx"],"sourcesContent":["/**\n * Проверяет, переполнен ли элемент (дочерние элементы выходят за пределы родительского элемента)\n * @param element - HTML элемент для проверки\n * @returns true, если элемент переполнен по ширине или высоте\n *\n * @example\n * // подсказку показываем только там, где текст обрезан\n * const truncated = isElementOverflowing(labelRef.current);\n */\nexport const isElementOverflowing = (element: HTMLElement): boolean => {\n\treturn element.scrollWidth > element.offsetWidth || element.scrollHeight > element.offsetHeight;\n};\n\n/**\n * Canvas для измерения текста переиспользуется: на каждый вызов создавать его расточительно.\n *\n * Контекст один на все поля страницы, и это безопасно ровно до тех пор, пока каждое\n * измерение выставляет **все** влияющие на ширину свойства. Условное присваивание оставило бы\n * настройку от предыдущего поля: соседняя таблица со своим `letter-spacing` мерила бы текст\n * чужим трекингом. Поэтому свойства ниже пишутся всегда, а сам canvas остаётся приватным\n * для этого модуля — иначе инвариант незаметно нарушит следующий пользователь.\n */\nlet measureContext: CanvasRenderingContext2D | null | undefined;\n\nconst getMeasureContext = () => {\n\tif (measureContext === undefined) measureContext = document.createElement(\"canvas\").getContext(\"2d\");\n\treturn measureContext;\n};\n\n/**\n * Ставит каретку в `input`/`textarea` по горизонтальной координате указателя (`clientX`).\n *\n * Нужно там, где поле появляется по клику уже после самого клика — например, при переходе\n * ячейки таблицы в режим редактирования по двойному щелчку: без этого каретка встаёт\n * в начало или конец, а не туда, куда целился пользователь.\n *\n * `caretPositionFromPoint` / `caretRangeFromPoint` здесь бесполезны: содержимое `input`\n * не является частью DOM-дерева, и Range/Selection API до него не достаёт — вернётся сам\n * элемент, а не позиция в тексте. Поэтому индекс считается вручную: текст измеряется\n * на offscreen canvas тем же шрифтом, и выбирается ближайшая к точке граница символа.\n * Ширины префиксов монотонно растут, так что перебор обрывается, как только начал удаляться\n * от цели.\n *\n * Учитывается только горизонталь, поэтому для многострочного текста функция не годится —\n * там нужен `placeCaretAtClientPoint` по `contenteditable`.\n *\n * Возвращает `false`, если поставить каретку не удалось (поле пустое, тип поля не поддерживает\n * выделение или canvas недоступен) — вызывающему коду в этом случае стоит оставить поведение\n * по умолчанию.\n *\n * @example\n * // координата запоминается на dblclick, применяется, когда поле получило фокус\n * <input\n * autoFocus\n * onFocus={(event) => {\n * const input = event.currentTarget;\n * if (!placeCaretAtPoint(input, caretX)) placeCaretAtEnd(input);\n * }}\n * />\n */\nexport const placeCaretAtPoint = (element: HTMLInputElement | HTMLTextAreaElement, clientX: number): boolean => {\n\tconst value = element.value;\n\tif (!value) return false;\n\n\t// У `type=number|email|date|time|color` выделения нет, а `setSelectionRange` на них кидает\n\t// `InvalidStateError`. Тип полей задаёт прикладной код, поэтому проверяем, а не полагаемся.\n\tif (element.selectionStart === null) return false;\n\n\tconst context = getMeasureContext();\n\tif (!context) return false;\n\n\tconst style = window.getComputedStyle(element);\n\tcontext.font = `${style.fontStyle} ${style.fontWeight} ${style.fontSize} ${style.fontFamily}`;\n\t// `letterSpacing` у canvas принимает только длину: `normal` из вычисленных стилей его сломает.\n\t// Пишется на каждом вызове — иначе значение утечёт в следующее поле, см. `measureContext`.\n\tif (\"letterSpacing\" in context) {\n\t\tcontext.letterSpacing = style.letterSpacing.endsWith(\"px\") ? style.letterSpacing : \"0px\";\n\t}\n\n\tconst rect = element.getBoundingClientRect();\n\tconst borderLeft = parseFloat(style.borderLeftWidth) || 0;\n\tconst borderRight = parseFloat(style.borderRightWidth) || 0;\n\tconst paddingLeft = parseFloat(style.paddingLeft) || 0;\n\tconst paddingRight = parseFloat(style.paddingRight) || 0;\n\tconst contentLeft = rect.left + borderLeft + paddingLeft;\n\tconst contentWidth = rect.width - borderLeft - borderRight - paddingLeft - paddingRight;\n\n\t// Текст короче поля прижимается по `text-align`, и отсчитывать позицию от левого края\n\t// нельзя — у выровненного вправо поля это промах на всю свободную ширину.\n\tconst slack = contentWidth - context.measureText(value).width;\n\tlet originX = contentLeft - element.scrollLeft;\n\tif (slack > 0) {\n\t\tif (style.textAlign === \"right\" || style.textAlign === \"end\") originX += slack;\n\t\telse if (style.textAlign === \"center\") originX += slack / 2;\n\t}\n\n\tconst targetX = clientX - originX;\n\tlet bestIndex = 0;\n\tlet bestDistance = Infinity;\n\tfor (let index = 0; index <= value.length; index++) {\n\t\tconst distance = Math.abs(context.measureText(value.slice(0, index)).width - targetX);\n\t\tif (distance > bestDistance) break;\n\t\tbestDistance = distance;\n\t\tbestIndex = index;\n\t}\n\n\telement.setSelectionRange(bestIndex, bestIndex);\n\treturn true;\n};\n\n/**\n * Ставит каретку в `contenteditable` по точке указателя.\n *\n * В отличие от `input`, текст здесь — обычные узлы DOM, поэтому измерять ничего не нужно:\n * браузер сам отдаёт позицию по координатам. Работает и с переносами, так что это тот случай,\n * когда многострочная правка делается редактируемым `div`, а не `textarea`.\n *\n * Возвращает `false`, если точка не попала в текст элемента, — вызывающему коду стоит\n * поставить каретку в конец через `placeCaretAtEnd`.\n *\n * @example\n * const editor = event.currentTarget;\n * if (!placeCaretAtClientPoint(editor, event.clientX, event.clientY)) placeCaretAtEnd(editor);\n */\nexport const placeCaretAtClientPoint = (element: HTMLElement, clientX: number, clientY: number): boolean => {\n\tconst selection = window.getSelection();\n\tif (!selection) return false;\n\n\tconst range = caretRangeAtPoint(clientX, clientY);\n\t// Точка могла прийтись на отступ ячейки или на соседний узел: чужую позицию не ставим.\n\tif (!range || !element.contains(range.startContainer)) return false;\n\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n\treturn true;\n};\n\n/**\n * Оба способа спросить у браузера позицию каретки по координатам — объявлены здесь сами.\n *\n * `caretPositionFromPoint` — стандартный, но в `lib.dom` TS 5.6 его ещё нет.\n * `caretRangeFromPoint` — легаси WebKit, в `lib.dom` он помечен `@deprecated`; берётся\n * только фолбэком для Safari до 17.4, где стандартного метода ещё не было. Объявление\n * собрано в одном месте намеренно: обращение идёт к нему, а не к устаревшему члену `Document`,\n * и причина использования легаси видна рядом, а не прячется за подавленной подсказкой.\n */\ntype DocumentWithCaretApi = Document & {\n\tcaretPositionFromPoint?: (x: number, y: number) => { offsetNode: Node; offset: number } | null;\n\tcaretRangeFromPoint?: (x: number, y: number) => Range | null;\n};\n\nconst caretRangeAtPoint = (clientX: number, clientY: number): Range | null => {\n\tconst doc = document as DocumentWithCaretApi;\n\n\tif (doc.caretPositionFromPoint) {\n\t\tconst position = doc.caretPositionFromPoint(clientX, clientY);\n\t\tif (!position) return null;\n\t\tconst range = document.createRange();\n\t\trange.setStart(position.offsetNode, position.offset);\n\t\trange.collapse(true);\n\t\treturn range;\n\t}\n\n\treturn doc.caretRangeFromPoint?.(clientX, clientY) ?? null;\n};\n\n/**\n * Ставит каретку в конец содержимого `contenteditable` — поведение F2 в Excel.\n *\n * @example\n * // F2 открывает правку с кареткой в конце\n * if (event.key === \"F2\") placeCaretAtEnd(editorRef.current);\n */\nexport const placeCaretAtEnd = (element: HTMLElement): void => {\n\tconst selection = window.getSelection();\n\tif (!selection) return;\n\n\tconst range = document.createRange();\n\trange.selectNodeContents(element);\n\trange.collapse(false);\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n};\n\n/**\n * Вставляет текст в текущую позицию каретки внутри `contenteditable`, заменяя выделенное.\n *\n * Нужно на вставке из буфера: по умолчанию `contenteditable` принимает разметку, и в ячейку\n * приезжает чужое форматирование вместе с текстом.\n *\n * @example\n * onPaste={(event) => {\n * event.preventDefault();\n * insertTextAtCaret(event.currentTarget, event.clipboardData.getData(\"text/plain\"));\n * }}\n */\nexport const insertTextAtCaret = (element: HTMLElement, text: string): void => {\n\tconst selection = window.getSelection();\n\tif (!selection?.rangeCount) return;\n\n\tconst range = selection.getRangeAt(0);\n\tif (!element.contains(range.startContainer)) return;\n\n\trange.deleteContents();\n\tconst node = document.createTextNode(text);\n\trange.insertNode(node);\n\trange.setStartAfter(node);\n\trange.collapse(true);\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n};\n","import { useCallback, useRef, useState } from \"react\";\nimport { isElementOverflowing } from \"../../lib/utils/dom\";\n\nexport const useOverflowTooltip = <T extends HTMLElement>() => {\n\tconst [open, setOpen] = useState(false);\n\tconst ref = useRef<T>(null);\n\n\tconst onOpenChange = useCallback((newOpen: boolean) => {\n\t\tif (newOpen === false) {\n\t\t\tsetOpen(false);\n\t\t\treturn;\n\t\t}\n\t\tif (!ref.current) return;\n\t\tif (isElementOverflowing(ref.current)) {\n\t\t\tsetOpen(true);\n\t\t}\n\t}, []);\n\n\treturn { open, onOpenChange, ref };\n};\n","import { cn } from \"@/lib/utils\";\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"../tooltip\";\nimport { useOverflowTooltip } from \"./useOverflowTooltip\";\nimport React from \"react\";\n\ntype OverflowTooltipProps = {\n\tchildren: React.ReactNode;\n\t/**\n\t * HTML-элемент для обертки содержимого.\n\t * Используется для соблюдения правильной HTML-семантики.\n\t * Например:\n\t * - span (по умолчанию) для текста и инлайн-элементов\n\t * - div для блочного содержимого и сложных структур\n\t * @default span\n\t */\n\ttriggerTag?: React.ElementType;\n\t/**\n\t * Классы для обработки переполненного содержимого.\n\t * Например: \"truncate\", \"line-clamp-3\" и т.д.\n\t */\n\tclassName?: string;\n\t/**\n\t * Классы для содержимого тултипа.\n\t * С помощью них можно управлять стилями тултипа, например шириной, переносом текста и т.д.\n\t */\n\ttooltipClassName?: string;\n\tfocus?: \"high\";\n};\n\nexport const OverflowTooltip = ({ children, className, focus, triggerTag, tooltipClassName }: OverflowTooltipProps) => {\n\tconst { open, onOpenChange, ref } = useOverflowTooltip<HTMLDivElement>();\n\tconst TriggerTag = triggerTag || \"span\";\n\treturn (\n\t\t<TooltipProvider>\n\t\t\t<Tooltip open={open} onOpenChange={onOpenChange}>\n\t\t\t\t<TooltipTrigger asChild>\n\t\t\t\t\t<TriggerTag ref={ref} className={cn(className)}>\n\t\t\t\t\t\t{children}\n\t\t\t\t\t</TriggerTag>\n\t\t\t\t</TooltipTrigger>\n\t\t\t\t<TooltipContent focus={focus} className={cn(\"max-w-xs\", tooltipClassName)}>\n\t\t\t\t\t{children}\n\t\t\t\t</TooltipContent>\n\t\t\t</Tooltip>\n\t\t</TooltipProvider>\n\t);\n};\n\nOverflowTooltip.displayName = \"OverflowTooltip\";\n","import { cn } from \"@/lib/utils\";\nimport React from \"react\";\nimport { OverflowTooltip } from \"./OverflowTooltip\";\n\ntype TextOverflowTooltipProps = {\n\tchildren?: React.ReactNode;\n\tclassName?: string;\n\ttooltipClassName?: string;\n};\n\nexport const TextOverflowTooltip = ({ children, className, tooltipClassName }: TextOverflowTooltipProps) => {\n\treturn (\n\t\t<OverflowTooltip\n\t\t\tclassName={cn(\"inline-block max-w-full truncate\", className)}\n\t\t\ttooltipClassName={tooltipClassName}\n\t\t>\n\t\t\t{children}\n\t\t</OverflowTooltip>\n\t);\n};\n\nTextOverflowTooltip.displayName = \"TextOverflowTooltip\";\n"],"names":["isElementOverflowing","element","useOverflowTooltip","open","setOpen","useState","ref","useRef","onOpenChange","useCallback","newOpen","OverflowTooltip","children","className","focus","triggerTag","tooltipClassName","jsx","TooltipProvider","jsxs","Tooltip","TooltipTrigger","cn","TooltipContent","TextOverflowTooltip"],"mappings":";;;;AASa,MAAAA,IAAuB,CAACC,MAC7BA,EAAQ,cAAcA,EAAQ,eAAeA,EAAQ,eAAeA,EAAQ,cCPvEC,IAAqB,MAA6B;AAC9D,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChCC,IAAMC,EAAU,IAAI,GAEpBC,IAAeC,EAAY,CAACC,MAAqB;AACtD,QAAIA,MAAY,IAAO;AACtB,MAAAN,EAAQ,EAAK;AACb;AAAA,IAAA;AAEG,IAACE,EAAI,WACLN,EAAqBM,EAAI,OAAO,KACnCF,EAAQ,EAAI;AAAA,EAEd,GAAG,EAAE;AAEE,SAAA,EAAE,MAAAD,GAAM,cAAAK,GAAc,KAAAF,EAAI;AAClC,GCUaK,IAAkB,CAAC,EAAE,UAAAC,GAAU,WAAAC,GAAW,OAAAC,GAAO,YAAAC,GAAY,kBAAAC,QAA6C;AACtH,QAAM,EAAE,MAAAb,GAAM,cAAAK,GAAc,KAAAF,EAAA,IAAQJ,EAAmC;AAEvE,SACE,gBAAAe,EAAAC,GAAA,EACA,UAAC,gBAAAC,EAAAC,GAAA,EAAQ,MAAAjB,GAAY,cAAAK,GACpB,UAAA;AAAA,IAAC,gBAAAS,EAAAI,GAAA,EAAe,SAAO,IACtB,UAAC,gBAAAJ,EALcF,KAAc,QAK5B,EAAW,KAAAT,GAAU,WAAWgB,EAAGT,CAAS,GAC3C,UAAAD,EACF,CAAA,GACD;AAAA,IACA,gBAAAK,EAACM,KAAe,OAAAT,GAAc,WAAWQ,EAAG,YAAYN,CAAgB,GACtE,UAAAJ,EACF,CAAA;AAAA,EAAA,EAAA,CACD,EACD,CAAA;AAEF;AAEAD,EAAgB,cAAc;ACtCvB,MAAMa,IAAsB,CAAC,EAAE,UAAAZ,GAAU,WAAAC,GAAW,kBAAAG,QAEzD,gBAAAC;AAAA,EAACN;AAAA,EAAA;AAAA,IACA,WAAWW,EAAG,oCAAoCT,CAAS;AAAA,IAC3D,kBAAAG;AAAA,IAEC,UAAAJ;AAAA,EAAA;AACF;AAIFY,EAAoB,cAAc;"}
1
+ {"version":3,"file":"TextOverflowTooltip-XPDdO9Dz.js","sources":["../src/lib/utils/dom.ts","../src/components/overflow-tooltip/useOverflowTooltip.ts","../src/components/overflow-tooltip/OverflowTooltip.tsx","../src/components/overflow-tooltip/TextOverflowTooltip.tsx"],"sourcesContent":["/**\n * Проверяет, переполнен ли элемент (дочерние элементы выходят за пределы родительского элемента)\n * @param element - HTML элемент для проверки\n * @returns true, если элемент переполнен по ширине или высоте\n *\n * @example\n * // подсказку показываем только там, где текст обрезан\n * const truncated = isElementOverflowing(labelRef.current);\n */\nexport const isElementOverflowing = (element: HTMLElement): boolean => {\n\treturn element.scrollWidth > element.offsetWidth || element.scrollHeight > element.offsetHeight;\n};\n\n/**\n * Canvas для измерения текста переиспользуется: на каждый вызов создавать его расточительно.\n *\n * Контекст один на все поля страницы, и это безопасно ровно до тех пор, пока каждое\n * измерение выставляет **все** влияющие на ширину свойства. Условное присваивание оставило бы\n * настройку от предыдущего поля: соседняя таблица со своим `letter-spacing` мерила бы текст\n * чужим трекингом. Поэтому свойства ниже пишутся всегда, а сам canvas остаётся приватным\n * для этого модуля — иначе инвариант незаметно нарушит следующий пользователь.\n */\nlet measureContext: CanvasRenderingContext2D | null | undefined;\n\nconst getMeasureContext = () => {\n\tif (measureContext === undefined) measureContext = document.createElement(\"canvas\").getContext(\"2d\");\n\treturn measureContext;\n};\n\n/**\n * Ставит каретку в `input`/`textarea` по горизонтальной координате указателя (`clientX`).\n *\n * Нужно там, где поле появляется по клику уже после самого клика — например, при переходе\n * ячейки таблицы в режим редактирования по двойному щелчку: без этого каретка встаёт\n * в начало или конец, а не туда, куда целился пользователь.\n *\n * `caretPositionFromPoint` / `caretRangeFromPoint` здесь бесполезны: содержимое `input`\n * не является частью DOM-дерева, и Range/Selection API до него не достаёт — вернётся сам\n * элемент, а не позиция в тексте. Поэтому индекс считается вручную: текст измеряется\n * на offscreen canvas тем же шрифтом, и выбирается ближайшая к точке граница символа.\n * Ширины префиксов монотонно растут, так что перебор обрывается, как только начал удаляться\n * от цели.\n *\n * Учитывается только горизонталь, поэтому для многострочного текста функция не годится —\n * там нужен `placeCaretAtClientPoint` по `contenteditable`.\n *\n * Возвращает `false`, если поставить каретку не удалось (поле пустое, тип поля не поддерживает\n * выделение или canvas недоступен) — вызывающему коду в этом случае стоит оставить поведение\n * по умолчанию.\n *\n * @example\n * // координата запоминается на dblclick, применяется, когда поле получило фокус\n * <input\n * autoFocus\n * onFocus={(event) => {\n * const input = event.currentTarget;\n * if (!placeCaretAtPoint(input, caretX)) placeCaretAtEnd(input);\n * }}\n * />\n */\nexport const placeCaretAtPoint = (element: HTMLInputElement | HTMLTextAreaElement, clientX: number): boolean => {\n\tconst value = element.value;\n\tif (!value) return false;\n\n\t// У `type=number|email|date|time|color` выделения нет, а `setSelectionRange` на них кидает\n\t// `InvalidStateError`. Тип полей задаёт прикладной код, поэтому проверяем, а не полагаемся.\n\tif (element.selectionStart === null) return false;\n\n\tconst context = getMeasureContext();\n\tif (!context) return false;\n\n\tconst style = window.getComputedStyle(element);\n\tcontext.font = `${style.fontStyle} ${style.fontWeight} ${style.fontSize} ${style.fontFamily}`;\n\t// `letterSpacing` у canvas принимает только длину: `normal` из вычисленных стилей его сломает.\n\t// Пишется на каждом вызове — иначе значение утечёт в следующее поле, см. `measureContext`.\n\tif (\"letterSpacing\" in context) {\n\t\tcontext.letterSpacing = style.letterSpacing.endsWith(\"px\") ? style.letterSpacing : \"0px\";\n\t}\n\n\tconst rect = element.getBoundingClientRect();\n\tconst borderLeft = parseFloat(style.borderLeftWidth) || 0;\n\tconst borderRight = parseFloat(style.borderRightWidth) || 0;\n\tconst paddingLeft = parseFloat(style.paddingLeft) || 0;\n\tconst paddingRight = parseFloat(style.paddingRight) || 0;\n\tconst contentLeft = rect.left + borderLeft + paddingLeft;\n\tconst contentWidth = rect.width - borderLeft - borderRight - paddingLeft - paddingRight;\n\n\t// Текст короче поля прижимается по `text-align`, и отсчитывать позицию от левого края\n\t// нельзя — у выровненного вправо поля это промах на всю свободную ширину.\n\tconst slack = contentWidth - context.measureText(value).width;\n\tlet originX = contentLeft - element.scrollLeft;\n\tif (slack > 0) {\n\t\tif (style.textAlign === \"right\" || style.textAlign === \"end\") originX += slack;\n\t\telse if (style.textAlign === \"center\") originX += slack / 2;\n\t}\n\n\tconst targetX = clientX - originX;\n\tlet bestIndex = 0;\n\tlet bestDistance = Infinity;\n\tfor (let index = 0; index <= value.length; index++) {\n\t\tconst distance = Math.abs(context.measureText(value.slice(0, index)).width - targetX);\n\t\tif (distance > bestDistance) break;\n\t\tbestDistance = distance;\n\t\tbestIndex = index;\n\t}\n\n\telement.setSelectionRange(bestIndex, bestIndex);\n\treturn true;\n};\n\n/**\n * Ставит каретку в `contenteditable` по точке указателя.\n *\n * В отличие от `input`, текст здесь — обычные узлы DOM, поэтому измерять ничего не нужно:\n * браузер сам отдаёт позицию по координатам. Работает и с переносами, так что это тот случай,\n * когда многострочная правка делается редактируемым `div`, а не `textarea`.\n *\n * Возвращает `false`, если точка не попала в текст элемента, — вызывающему коду стоит\n * поставить каретку в конец через `placeCaretAtEnd`.\n *\n * @example\n * const editor = event.currentTarget;\n * if (!placeCaretAtClientPoint(editor, event.clientX, event.clientY)) placeCaretAtEnd(editor);\n */\nexport const placeCaretAtClientPoint = (element: HTMLElement, clientX: number, clientY: number): boolean => {\n\tconst selection = window.getSelection();\n\tif (!selection) return false;\n\n\tconst range = caretRangeAtPoint(clientX, clientY);\n\t// Точка могла прийтись на отступ ячейки или на соседний узел: чужую позицию не ставим.\n\tif (!range || !element.contains(range.startContainer)) return false;\n\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n\treturn true;\n};\n\n/**\n * Оба способа спросить у браузера позицию каретки по координатам — объявлены здесь сами.\n *\n * `caretPositionFromPoint` — стандартный, но в `lib.dom` TS 5.6 его ещё нет.\n * `caretRangeFromPoint` — легаси WebKit, в `lib.dom` он помечен `@deprecated`; берётся\n * только фолбэком для Safari до 17.4, где стандартного метода ещё не было. Объявление\n * собрано в одном месте намеренно: обращение идёт к нему, а не к устаревшему члену `Document`,\n * и причина использования легаси видна рядом, а не прячется за подавленной подсказкой.\n */\ntype DocumentWithCaretApi = Document & {\n\tcaretPositionFromPoint?: (x: number, y: number) => { offsetNode: Node; offset: number } | null;\n\tcaretRangeFromPoint?: (x: number, y: number) => Range | null;\n};\n\nconst caretRangeAtPoint = (clientX: number, clientY: number): Range | null => {\n\tconst doc = document as DocumentWithCaretApi;\n\n\tif (doc.caretPositionFromPoint) {\n\t\tconst position = doc.caretPositionFromPoint(clientX, clientY);\n\t\tif (!position) return null;\n\t\tconst range = document.createRange();\n\t\trange.setStart(position.offsetNode, position.offset);\n\t\trange.collapse(true);\n\t\treturn range;\n\t}\n\n\treturn doc.caretRangeFromPoint?.(clientX, clientY) ?? null;\n};\n\n/**\n * Ставит каретку в конец содержимого `contenteditable` — поведение F2 в Excel.\n *\n * @example\n * // F2 открывает правку с кареткой в конце\n * if (event.key === \"F2\") placeCaretAtEnd(editorRef.current);\n */\nexport const placeCaretAtEnd = (element: HTMLElement): void => {\n\tconst selection = window.getSelection();\n\tif (!selection) return;\n\n\tconst range = document.createRange();\n\trange.selectNodeContents(element);\n\trange.collapse(false);\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n};\n\n/**\n * Вставляет текст в текущую позицию каретки внутри `contenteditable`, заменяя выделенное.\n *\n * Нужно на вставке из буфера: по умолчанию `contenteditable` принимает разметку, и в ячейку\n * приезжает чужое форматирование вместе с текстом.\n *\n * @example\n * onPaste={(event) => {\n * event.preventDefault();\n * insertTextAtCaret(event.currentTarget, event.clipboardData.getData(\"text/plain\"));\n * }}\n */\nexport const insertTextAtCaret = (element: HTMLElement, text: string): void => {\n\tconst selection = window.getSelection();\n\tif (!selection?.rangeCount) return;\n\n\tconst range = selection.getRangeAt(0);\n\tif (!element.contains(range.startContainer)) return;\n\n\trange.deleteContents();\n\tconst node = document.createTextNode(text);\n\trange.insertNode(node);\n\trange.setStartAfter(node);\n\trange.collapse(true);\n\tselection.removeAllRanges();\n\tselection.addRange(range);\n};\n","import { useCallback, useRef, useState } from \"react\";\r\nimport { isElementOverflowing } from \"../../lib/utils/dom\";\r\n\r\nexport const useOverflowTooltip = <T extends HTMLElement>() => {\r\n\tconst [open, setOpen] = useState(false);\r\n\tconst ref = useRef<T>(null);\r\n\r\n\tconst onOpenChange = useCallback((newOpen: boolean) => {\r\n\t\tif (newOpen === false) {\r\n\t\t\tsetOpen(false);\r\n\t\t\treturn;\r\n\t\t}\r\n\t\tif (!ref.current) return;\r\n\t\tif (isElementOverflowing(ref.current)) {\r\n\t\t\tsetOpen(true);\r\n\t\t}\r\n\t}, []);\r\n\r\n\treturn { open, onOpenChange, ref };\r\n};\r\n","import { cn } from \"@/lib/utils\";\r\nimport { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from \"../tooltip\";\r\nimport { useOverflowTooltip } from \"./useOverflowTooltip\";\r\nimport React from \"react\";\r\n\r\ntype OverflowTooltipProps = {\r\n\tchildren: React.ReactNode;\r\n\t/**\r\n\t * HTML-элемент для обертки содержимого.\r\n\t * Используется для соблюдения правильной HTML-семантики.\r\n\t * Например:\r\n\t * - span (по умолчанию) для текста и инлайн-элементов\r\n\t * - div для блочного содержимого и сложных структур\r\n\t * @default span\r\n\t */\r\n\ttriggerTag?: React.ElementType;\r\n\t/**\r\n\t * Классы для обработки переполненного содержимого.\r\n\t * Например: \"truncate\", \"line-clamp-3\" и т.д.\r\n\t */\r\n\tclassName?: string;\r\n\t/**\r\n\t * Классы для содержимого тултипа.\r\n\t * С помощью них можно управлять стилями тултипа, например шириной, переносом текста и т.д.\r\n\t */\r\n\ttooltipClassName?: string;\r\n\tfocus?: \"high\";\r\n};\r\n\r\nexport const OverflowTooltip = ({ children, className, focus, triggerTag, tooltipClassName }: OverflowTooltipProps) => {\r\n\tconst { open, onOpenChange, ref } = useOverflowTooltip<HTMLDivElement>();\r\n\tconst TriggerTag = triggerTag || \"span\";\r\n\treturn (\r\n\t\t<TooltipProvider>\r\n\t\t\t<Tooltip open={open} onOpenChange={onOpenChange}>\r\n\t\t\t\t<TooltipTrigger asChild>\r\n\t\t\t\t\t<TriggerTag ref={ref} className={cn(className)}>\r\n\t\t\t\t\t\t{children}\r\n\t\t\t\t\t</TriggerTag>\r\n\t\t\t\t</TooltipTrigger>\r\n\t\t\t\t<TooltipContent focus={focus} className={cn(\"max-w-xs\", tooltipClassName)}>\r\n\t\t\t\t\t{children}\r\n\t\t\t\t</TooltipContent>\r\n\t\t\t</Tooltip>\r\n\t\t</TooltipProvider>\r\n\t);\r\n};\r\n\r\nOverflowTooltip.displayName = \"OverflowTooltip\";\r\n","import { cn } from \"@/lib/utils\";\r\nimport React from \"react\";\r\nimport { OverflowTooltip } from \"./OverflowTooltip\";\r\n\r\ntype TextOverflowTooltipProps = {\r\n\tchildren?: React.ReactNode;\r\n\tclassName?: string;\r\n\ttooltipClassName?: string;\r\n};\r\n\r\nexport const TextOverflowTooltip = ({ children, className, tooltipClassName }: TextOverflowTooltipProps) => {\r\n\treturn (\r\n\t\t<OverflowTooltip\r\n\t\t\tclassName={cn(\"inline-block max-w-full truncate\", className)}\r\n\t\t\ttooltipClassName={tooltipClassName}\r\n\t\t>\r\n\t\t\t{children}\r\n\t\t</OverflowTooltip>\r\n\t);\r\n};\r\n\r\nTextOverflowTooltip.displayName = \"TextOverflowTooltip\";\r\n"],"names":["isElementOverflowing","element","useOverflowTooltip","open","setOpen","useState","ref","useRef","onOpenChange","useCallback","newOpen","OverflowTooltip","children","className","focus","triggerTag","tooltipClassName","jsx","TooltipProvider","jsxs","Tooltip","TooltipTrigger","cn","TooltipContent","TextOverflowTooltip"],"mappings":";;;;AASa,MAAAA,IAAuB,CAACC,MAC7BA,EAAQ,cAAcA,EAAQ,eAAeA,EAAQ,eAAeA,EAAQ,cCPvEC,IAAqB,MAA6B;AAC9D,QAAM,CAACC,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAChCC,IAAMC,EAAU,IAAI,GAEpBC,IAAeC,EAAY,CAACC,MAAqB;AACtD,QAAIA,MAAY,IAAO;AACtB,MAAAN,EAAQ,EAAK;AACb;AAAA,IAAA;AAEG,IAACE,EAAI,WACLN,EAAqBM,EAAI,OAAO,KACnCF,EAAQ,EAAI;AAAA,EAEd,GAAG,EAAE;AAEE,SAAA,EAAE,MAAAD,GAAM,cAAAK,GAAc,KAAAF,EAAI;AAClC,GCUaK,IAAkB,CAAC,EAAE,UAAAC,GAAU,WAAAC,GAAW,OAAAC,GAAO,YAAAC,GAAY,kBAAAC,QAA6C;AACtH,QAAM,EAAE,MAAAb,GAAM,cAAAK,GAAc,KAAAF,EAAA,IAAQJ,EAAmC;AAEvE,SACE,gBAAAe,EAAAC,GAAA,EACA,UAAC,gBAAAC,EAAAC,GAAA,EAAQ,MAAAjB,GAAY,cAAAK,GACpB,UAAA;AAAA,IAAC,gBAAAS,EAAAI,GAAA,EAAe,SAAO,IACtB,UAAC,gBAAAJ,EALcF,KAAc,QAK5B,EAAW,KAAAT,GAAU,WAAWgB,EAAGT,CAAS,GAC3C,UAAAD,EACF,CAAA,GACD;AAAA,IACA,gBAAAK,EAACM,KAAe,OAAAT,GAAc,WAAWQ,EAAG,YAAYN,CAAgB,GACtE,UAAAJ,EACF,CAAA;AAAA,EAAA,EAAA,CACD,EACD,CAAA;AAEF;AAEAD,EAAgB,cAAc;ACtCvB,MAAMa,IAAsB,CAAC,EAAE,UAAAZ,GAAU,WAAAC,GAAW,kBAAAG,QAEzD,gBAAAC;AAAA,EAACN;AAAA,EAAA;AAAA,IACA,WAAWW,EAAG,oCAAoCT,CAAS;AAAA,IAC3D,kBAAAG;AAAA,IAEC,UAAAJ;AAAA,EAAA;AACF;AAIFY,EAAoB,cAAc;"}
@@ -7,7 +7,7 @@ const p = m({
7
7
  base: [
8
8
  "inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium leading-none text-primary-fg transition-colors",
9
9
  "hover:bg-secondary-bg-hover hover:text-muted",
10
- "focus-visible:border-secondary-border focus-visible:shadow-focus focus-visible:outline-none",
10
+ "focus-visible:border-secondary-border focus-visible:shadow-focus focus-visible:outline-hidden",
11
11
  "disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50",
12
12
  "data-[state=on]:bg-primary-bg-hover data-[state=on]:text-primary-fg",
13
13
  "[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0"
@@ -37,4 +37,4 @@ export {
37
37
  g as T,
38
38
  p as t
39
39
  };
40
- //# sourceMappingURL=Toggle-v_HT3Gm2.js.map
40
+ //# sourceMappingURL=Toggle-CmalMf4O.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toggle-CmalMf4O.js","sources":["../src/components/toggle/Toggle.tsx"],"sourcesContent":["import * as React from \"react\";\r\nimport * as TogglePrimitive from \"@radix-ui/react-toggle\";\r\nimport { cn } from \"@/lib/utils\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { VariantsConfig } from \"@/lib/utils/variants\";\r\n\r\nexport interface ToggleVariants {\r\n\tvariant?: \"default\" | \"outline\" | \"ghost\";\r\n\tsize?: \"2xs\" | \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\r\n}\r\n\r\nconst toggleStyles = tv({\r\n\tbase: [\r\n\t\t\"inline-flex items-center justify-center gap-2 rounded-md text-sm font-medium leading-none text-primary-fg transition-colors\",\r\n\t\t\"hover:bg-secondary-bg-hover hover:text-muted\",\r\n\t\t\"focus-visible:border-secondary-border focus-visible:shadow-focus focus-visible:outline-hidden\",\r\n\t\t\"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\r\n\t\t\"data-[state=on]:bg-primary-bg-hover data-[state=on]:text-primary-fg\",\r\n\t\t\"[&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\"\r\n\t],\r\n\tvariants: {\r\n\t\tvariant: {\r\n\t\t\tdefault: \"bg-transparent\",\r\n\t\t\toutline:\r\n\t\t\t\t\"border border-secondary-border bg-secondary-bg shadow-soft-sm data-[state=on]:border-primary-border\",\r\n\t\t\tghost: \"bg-transparent hover:text-primary-fg hover:opacity-65 data-[state=on]:bg-secondary-bg-hover\"\r\n\t\t},\r\n\t\tsize: {\r\n\t\t\t\"2xs\": \"h-6 min-w-6 gap-1 rounded-sm p-1\",\r\n\t\t\txs: \"h-7 min-w-7 gap-1.5 rounded-sm p-1.5\",\r\n\t\t\tsm: \"h-8 min-w-8 rounded-sm p-2\",\r\n\t\t\tmd: \"h-9 min-w-9 p-2.5\",\r\n\t\t\tlg: \"h-10 min-w-10 px-3 py-2\",\r\n\t\t\txl: \"h-11 min-w-11 px-4 py-3 text-base leading-none [&_svg]:size-5\"\r\n\t\t}\r\n\t} satisfies VariantsConfig<ToggleVariants>,\r\n\tdefaultVariants: {\r\n\t\tvariant: \"default\",\r\n\t\tsize: \"md\"\r\n\t}\r\n});\r\n\r\nconst Toggle = React.forwardRef<\r\n\tReact.ElementRef<typeof TogglePrimitive.Root>,\r\n\tReact.ComponentPropsWithoutRef<typeof TogglePrimitive.Root> & ToggleVariants\r\n>(({ className, variant, size, ...props }, ref) => (\r\n\t<TogglePrimitive.Root ref={ref} className={cn(toggleStyles({ variant, size, className }))} {...props} />\r\n));\r\n\r\nToggle.displayName = TogglePrimitive.Root.displayName;\r\n\r\nexport { Toggle, toggleStyles as toggleVariants };\r\n"],"names":["toggleStyles","tv","Toggle","React","className","variant","size","props","ref","jsx","TogglePrimitive.Root","cn"],"mappings":";;;;;AAWA,MAAMA,IAAeC,EAAG;AAAA,EACvB,MAAM;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACD;AAAA,EACA,UAAU;AAAA,IACT,SAAS;AAAA,MACR,SAAS;AAAA,MACT,SACC;AAAA,MACD,OAAO;AAAA,IACR;AAAA,IACA,MAAM;AAAA,MACL,OAAO;AAAA,MACP,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,MACJ,IAAI;AAAA,IAAA;AAAA,EAEN;AAAA,EACA,iBAAiB;AAAA,IAChB,SAAS;AAAA,IACT,MAAM;AAAA,EAAA;AAER,CAAC,GAEKC,IAASC,EAAM,WAGnB,CAAC,EAAE,WAAAC,GAAW,SAAAC,GAAS,MAAAC,GAAM,GAAGC,KAASC,MACzC,gBAAAC,EAAAC,GAAA,EAAqB,KAAAF,GAAU,WAAWG,EAAGX,EAAa,EAAE,SAAAK,GAAS,MAAAC,GAAM,WAAAF,EAAW,CAAA,CAAC,GAAI,GAAGG,GAAO,CACtG;AAEDL,EAAO,cAAcQ,EAAqB;"}
@@ -12,14 +12,13 @@ import { R as me } from "./index-Uiy0Xwy2.js";
12
12
  import { T as w } from "./index-BVqs-uqP.js";
13
13
  import { I as ve } from "./Icon-DH3ev9GK.js";
14
14
  import { S as Te } from "./Shortcut-D8L15_ed.js";
15
- import { u as ge } from "./usePortalContainer-BAIp0kSF.js";
16
- import { T as xe } from "./Text-DeBE8AKl.js";
17
- var [L, ye] = ae("Tooltip", [
15
+ import { T as ge } from "./Text-DeBE8AKl.js";
16
+ var [L, xe] = ae("Tooltip", [
18
17
  X
19
- ]), A = X(), W = "TooltipProvider", Ce = 700, O = "tooltip.open", [be, D] = L(W), I = (t) => {
18
+ ]), A = X(), W = "TooltipProvider", ye = 700, O = "tooltip.open", [Ce, D] = L(W), I = (t) => {
20
19
  const {
21
20
  __scopeTooltip: o,
22
- delayDuration: e = Ce,
21
+ delayDuration: e = ye,
23
22
  skipDelayDuration: r = 300,
24
23
  disableHoverableContent: n = !1,
25
24
  children: i
@@ -28,7 +27,7 @@ var [L, ye] = ae("Tooltip", [
28
27
  const d = l.current;
29
28
  return () => window.clearTimeout(d);
30
29
  }, []), /* @__PURE__ */ c(
31
- be,
30
+ Ce,
32
31
  {
33
32
  scope: o,
34
33
  isOpenDelayedRef: a,
@@ -52,7 +51,7 @@ var [L, ye] = ae("Tooltip", [
52
51
  );
53
52
  };
54
53
  I.displayName = W;
55
- var _ = "Tooltip", [we, k] = L(_), M = (t) => {
54
+ var _ = "Tooltip", [be, k] = L(_), M = (t) => {
56
55
  const {
57
56
  __scopeTooltip: o,
58
57
  children: e,
@@ -80,7 +79,7 @@ var _ = "Tooltip", [we, k] = L(_), M = (t) => {
80
79
  return s.useEffect(() => () => {
81
80
  p.current && (window.clearTimeout(p.current), p.current = 0);
82
81
  }, []), /* @__PURE__ */ c(ue, { ...d, children: /* @__PURE__ */ c(
83
- we,
82
+ be,
84
83
  {
85
84
  scope: o,
86
85
  contentId: m,
@@ -131,24 +130,24 @@ var S = "TooltipTrigger", H = s.forwardRef(
131
130
  }
132
131
  );
133
132
  H.displayName = S;
134
- var j = "TooltipPortal", [Pe, Re] = L(j, {
133
+ var j = "TooltipPortal", [we, Pe] = L(j, {
135
134
  forceMount: void 0
136
135
  }), G = (t) => {
137
136
  const { __scopeTooltip: o, forceMount: e, children: r, container: n } = t, i = k(j, o);
138
- return /* @__PURE__ */ c(Pe, { scope: o, forceMount: e, children: /* @__PURE__ */ c(K, { present: e || i.open, children: /* @__PURE__ */ c(ie, { asChild: !0, container: n, children: r }) }) });
137
+ return /* @__PURE__ */ c(we, { scope: o, forceMount: e, children: /* @__PURE__ */ c(K, { present: e || i.open, children: /* @__PURE__ */ c(ie, { asChild: !0, container: n, children: r }) }) });
139
138
  };
140
139
  G.displayName = j;
141
140
  var b = "TooltipContent", $ = s.forwardRef(
142
141
  (t, o) => {
143
- const e = Re(b, t.__scopeTooltip), { forceMount: r = e.forceMount, side: n = "top", ...i } = t, a = k(b, t.__scopeTooltip);
144
- return /* @__PURE__ */ c(K, { present: r || a.open, children: a.disableHoverableContent ? /* @__PURE__ */ c(Z, { side: n, ...i, ref: o }) : /* @__PURE__ */ c(Ee, { side: n, ...i, ref: o }) });
142
+ const e = Pe(b, t.__scopeTooltip), { forceMount: r = e.forceMount, side: n = "top", ...i } = t, a = k(b, t.__scopeTooltip);
143
+ return /* @__PURE__ */ c(K, { present: r || a.open, children: a.disableHoverableContent ? /* @__PURE__ */ c(Z, { side: n, ...i, ref: o }) : /* @__PURE__ */ c(Re, { side: n, ...i, ref: o }) });
145
144
  }
146
- ), Ee = s.forwardRef((t, o) => {
145
+ ), Re = s.forwardRef((t, o) => {
147
146
  const e = k(b, t.__scopeTooltip), r = D(b, t.__scopeTooltip), n = s.useRef(null), i = q(o, n), [a, h] = s.useState(null), { trigger: l, onClose: d } = e, u = n.current, { onPointerInTransitChange: f } = r, m = s.useCallback(() => {
148
147
  h(null), f(!1);
149
148
  }, [f]), p = s.useCallback(
150
149
  (v, g) => {
151
- const T = v.currentTarget, y = { x: v.clientX, y: v.clientY }, x = Le(y, T.getBoundingClientRect()), P = Ae(y, x), R = Oe(g.getBoundingClientRect()), E = De([...P, ...R]);
150
+ const T = v.currentTarget, y = { x: v.clientX, y: v.clientY }, x = Ne(y, T.getBoundingClientRect()), P = Le(y, x), R = Ae(g.getBoundingClientRect()), E = Se([...P, ...R]);
152
151
  h(E), f(!0);
153
152
  },
154
153
  [f]
@@ -163,13 +162,13 @@ var b = "TooltipContent", $ = s.forwardRef(
163
162
  }, [l, u, p, m]), s.useEffect(() => {
164
163
  if (a) {
165
164
  const v = (g) => {
166
- const T = g.target, y = { x: g.clientX, y: g.clientY }, x = l?.contains(T) || u?.contains(T), P = !Se(y, a);
165
+ const T = g.target, y = { x: g.clientX, y: g.clientY }, x = l?.contains(T) || u?.contains(T), P = !Oe(y, a);
167
166
  x ? m() : P && (m(), d());
168
167
  };
169
168
  return document.addEventListener("pointermove", v), () => document.removeEventListener("pointermove", v);
170
169
  }
171
170
  }, [l, u, a, d, m]), /* @__PURE__ */ c(Z, { ...t, ref: i });
172
- }), [_e, ke] = L(_, { isInside: !1 }), Ne = se("TooltipContent"), Z = s.forwardRef(
171
+ }), [Ee, _e] = L(_, { isInside: !1 }), ke = se("TooltipContent"), Z = s.forwardRef(
173
172
  (t, o) => {
174
173
  const {
175
174
  __scopeTooltip: e,
@@ -211,8 +210,8 @@ var b = "TooltipContent", $ = s.forwardRef(
211
210
  "--radix-tooltip-trigger-height": "var(--radix-popper-anchor-height)"
212
211
  },
213
212
  children: [
214
- /* @__PURE__ */ c(Ne, { children: r }),
215
- /* @__PURE__ */ c(_e, { scope: e, isInside: !0, children: /* @__PURE__ */ c(me, { id: l.contentId, role: "tooltip", children: n || r }) })
213
+ /* @__PURE__ */ c(ke, { children: r }),
214
+ /* @__PURE__ */ c(Ee, { scope: e, isInside: !0, children: /* @__PURE__ */ c(me, { id: l.contentId, role: "tooltip", children: n || r }) })
216
215
  ]
217
216
  }
218
217
  )
@@ -224,14 +223,14 @@ $.displayName = b;
224
223
  var J = "TooltipArrow", z = s.forwardRef(
225
224
  (t, o) => {
226
225
  const { __scopeTooltip: e, ...r } = t, n = A(e);
227
- return ke(
226
+ return _e(
228
227
  J,
229
228
  e
230
229
  ).isInside ? null : /* @__PURE__ */ c(de, { ...n, ...r, ref: o });
231
230
  }
232
231
  );
233
232
  z.displayName = J;
234
- function Le(t, o) {
233
+ function Ne(t, o) {
235
234
  const e = Math.abs(o.top - t.y), r = Math.abs(o.bottom - t.y), n = Math.abs(o.right - t.x), i = Math.abs(o.left - t.x);
236
235
  switch (Math.min(e, r, n, i)) {
237
236
  case i:
@@ -246,7 +245,7 @@ function Le(t, o) {
246
245
  throw new Error("unreachable");
247
246
  }
248
247
  }
249
- function Ae(t, o, e = 5) {
248
+ function Le(t, o, e = 5) {
250
249
  const r = [];
251
250
  switch (o) {
252
251
  case "top":
@@ -276,7 +275,7 @@ function Ae(t, o, e = 5) {
276
275
  }
277
276
  return r;
278
277
  }
279
- function Oe(t) {
278
+ function Ae(t) {
280
279
  const { top: o, right: e, bottom: r, left: n } = t;
281
280
  return [
282
281
  { x: n, y: o },
@@ -285,7 +284,7 @@ function Oe(t) {
285
284
  { x: n, y: r }
286
285
  ];
287
286
  }
288
- function Se(t, o) {
287
+ function Oe(t, o) {
289
288
  const { x: e, y: r } = t;
290
289
  let n = !1;
291
290
  for (let i = 0, a = o.length - 1; i < o.length; a = i++) {
@@ -294,11 +293,11 @@ function Se(t, o) {
294
293
  }
295
294
  return n;
296
295
  }
297
- function De(t) {
296
+ function Se(t) {
298
297
  const o = t.slice();
299
- return o.sort((e, r) => e.x < r.x ? -1 : e.x > r.x ? 1 : e.y < r.y ? -1 : e.y > r.y ? 1 : 0), Ie(o);
298
+ return o.sort((e, r) => e.x < r.x ? -1 : e.x > r.x ? 1 : e.y < r.y ? -1 : e.y > r.y ? 1 : 0), De(o);
300
299
  }
301
- function Ie(t) {
300
+ function De(t) {
302
301
  if (t.length <= 1) return t.slice();
303
302
  const o = [];
304
303
  for (let r = 0; r < t.length; r++) {
@@ -324,7 +323,7 @@ function Ie(t) {
324
323
  return e.pop(), o.length === 1 && e.length === 1 && o[0].x === e[0].x && o[0].y === e[0].y ? o : o.concat(e);
325
324
  }
326
325
  var Q = I, ee = M, te = H, oe = G, F = $, B = z;
327
- const ct = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
326
+ const it = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
328
327
  __proto__: null,
329
328
  Arrow: B,
330
329
  Content: F,
@@ -338,8 +337,8 @@ const ct = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
338
337
  TooltipProvider: I,
339
338
  TooltipTrigger: H,
340
339
  Trigger: te,
341
- createTooltipScope: ye
342
- }, Symbol.toStringTag, { value: "Module" })), re = s.createContext({}), N = () => s.useContext(re), ut = Q, pt = ee, dt = te, Me = w({
340
+ createTooltipScope: xe
341
+ }, Symbol.toStringTag, { value: "Module" })), re = s.createContext({}), N = () => s.useContext(re), lt = Q, ct = ee, ut = te, Ie = w({
343
342
  slots: {
344
343
  fill: "fill-status-neutral-fg",
345
344
  stroke: "stroke-primary-border stroke-[0.5px]",
@@ -353,9 +352,9 @@ const ct = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
353
352
  }
354
353
  }
355
354
  }
356
- }), He = s.forwardRef(
355
+ }), Me = s.forwardRef(
357
356
  ({ width: t, height: o, className: e, ...r }, n) => {
358
- const { focus: i } = N(), a = Me({ focus: i });
357
+ const { focus: i } = N(), a = Ie({ focus: i });
359
358
  return /* @__PURE__ */ c(B, { ref: n, asChild: !0, ...r, children: /* @__PURE__ */ Y(
360
359
  "svg",
361
360
  {
@@ -380,8 +379,8 @@ const ct = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
380
379
  ) });
381
380
  }
382
381
  );
383
- He.displayName = B.displayName;
384
- const je = w({
382
+ Me.displayName = B.displayName;
383
+ const He = w({
385
384
  base: [
386
385
  "z-50 rounded-lg border-[0.5px] px-2 py-1.5 text-xs backdrop-blur animate-in fade-in-0 zoom-in-95",
387
386
  "border-primary-border bg-alpha-30 text-primary-fg shadow-soft-sm",
@@ -393,81 +392,81 @@ const je = w({
393
392
  high: "border-0 bg-alpha-high-20 text-inverse-primary-fg shadow-soft-base"
394
393
  }
395
394
  }
396
- }), Ge = s.forwardRef(
395
+ }), je = s.forwardRef(
397
396
  ({ className: t, sideOffset: o = 8, portalContainer: e, focus: r, ...n }, i) => {
398
- const a = ge(e);
397
+ const a = e;
399
398
  return /* @__PURE__ */ c(re.Provider, { value: { focus: r }, children: /* @__PURE__ */ c(oe, { container: a, children: /* @__PURE__ */ c(
400
399
  F,
401
400
  {
402
401
  ref: i,
403
402
  sideOffset: o,
404
- className: je({ className: t, focus: r }),
403
+ className: He({ className: t, focus: r }),
405
404
  ...n
406
405
  }
407
406
  ) }) });
408
407
  }
409
408
  );
410
- Ge.displayName = F.displayName;
411
- const $e = w({
409
+ je.displayName = F.displayName;
410
+ const Ge = w({
412
411
  base: "text-sm font-medium text-primary-fg",
413
412
  variants: {
414
413
  focus: {
415
414
  high: "text-inverse-primary-fg"
416
415
  }
417
416
  }
418
- }), ze = s.forwardRef(({ className: t, children: o, ...e }, r) => {
417
+ }), $e = s.forwardRef(({ className: t, children: o, ...e }, r) => {
419
418
  const { focus: n } = N();
420
- return /* @__PURE__ */ c("div", { ref: r, className: $e({ className: t, focus: n }), ...e, children: o });
419
+ return /* @__PURE__ */ c("div", { ref: r, className: Ge({ className: t, focus: n }), ...e, children: o });
421
420
  });
422
- ze.displayName = "TooltipTitle";
423
- const Fe = w({
421
+ $e.displayName = "TooltipTitle";
422
+ const ze = w({
424
423
  base: "",
425
424
  variants: {
426
425
  focus: {
427
426
  high: "text-inverse-secondary-fg"
428
427
  }
429
428
  }
430
- }), Be = s.forwardRef(({ className: t, children: o, ...e }, r) => {
429
+ }), Fe = s.forwardRef(({ className: t, children: o, ...e }, r) => {
431
430
  const { focus: n } = N();
432
- return /* @__PURE__ */ c(xe, { ref: r, size: "xs", className: Fe({ className: t, focus: n }), ...e, children: o });
431
+ return /* @__PURE__ */ c(ge, { ref: r, size: "xs", className: ze({ className: t, focus: n }), ...e, children: o });
433
432
  });
434
- Be.displayName = "TooltipText";
435
- const Ue = w({
436
- base: "flex-shrink-0 text-xs text-primary-fg",
433
+ Fe.displayName = "TooltipText";
434
+ const Be = w({
435
+ base: "shrink-0 text-xs text-primary-fg",
437
436
  variants: {
438
437
  focus: {
439
438
  high: "text-inverse-primary-fg"
440
439
  }
441
440
  }
442
- }), Ve = s.forwardRef(({ className: t, ...o }, e) => {
441
+ }), Ue = s.forwardRef(({ className: t, ...o }, e) => {
443
442
  const { focus: r } = N();
444
- return /* @__PURE__ */ c(ve, { size: "lg", className: Ue({ className: t, focus: r }), ref: e, ...o });
443
+ return /* @__PURE__ */ c(ve, { size: "lg", className: Be({ className: t, focus: r }), ref: e, ...o });
445
444
  });
446
- Ve.displayName = "TooltipIcon";
447
- const Ye = w({
445
+ Ue.displayName = "TooltipIcon";
446
+ const Ve = w({
448
447
  base: "h-auto p-0 text-xs text-muted",
449
448
  variants: {
450
449
  focus: {
451
450
  high: "text-inverse-secondary-fg opacity-70"
452
451
  }
453
452
  }
454
- }), qe = s.forwardRef(({ className: t, ...o }, e) => {
453
+ }), Ye = s.forwardRef(({ className: t, ...o }, e) => {
455
454
  const { focus: r } = N();
456
- return /* @__PURE__ */ c(Te, { variant: "ghost", className: Ye({ className: t, focus: r }), ref: e, ...o });
455
+ return /* @__PURE__ */ c(Te, { variant: "ghost", className: Ve({ className: t, focus: r }), ref: e, ...o });
457
456
  });
458
- qe.displayName = "TooltipShortcut";
457
+ Ye.displayName = "TooltipShortcut";
459
458
  export {
460
- pt as T,
461
- ut as a,
462
- dt as b,
463
- Ge as c,
464
- He as d,
465
- ze as e,
466
- Be as f,
467
- Ve as g,
468
- qe as h,
459
+ ct as T,
460
+ lt as a,
461
+ ut as b,
462
+ je as c,
463
+ Me as d,
464
+ $e as e,
465
+ Fe as f,
466
+ Ue as g,
467
+ Ye as h,
469
468
  re as i,
470
- ct as j,
469
+ it as j,
471
470
  N as u
472
471
  };
473
- //# sourceMappingURL=Tooltip-7Duaau0S.js.map
472
+ //# sourceMappingURL=Tooltip-D2XvRS0c.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tooltip-D2XvRS0c.js","sources":["../node_modules/.pnpm/@radix-ui+react-tooltip@1.2_c0a573e5fee67df1b7628ac6f2833e9e/node_modules/@radix-ui/react-tooltip/dist/index.mjs","../src/components/tooltip/useTooltipContext.ts","../src/components/tooltip/Tooltip.tsx"],"sourcesContent":["\"use client\";\n\n// src/tooltip.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlottable } from \"@radix-ui/react-slot\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport * as VisuallyHiddenPrimitive from \"@radix-ui/react-visually-hidden\";\nimport { jsx, jsxs } from \"react/jsx-runtime\";\nvar [createTooltipContext, createTooltipScope] = createContextScope(\"Tooltip\", [\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar PROVIDER_NAME = \"TooltipProvider\";\nvar DEFAULT_DELAY_DURATION = 700;\nvar TOOLTIP_OPEN = \"tooltip.open\";\nvar [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);\nvar TooltipProvider = (props) => {\n const {\n __scopeTooltip,\n delayDuration = DEFAULT_DELAY_DURATION,\n skipDelayDuration = 300,\n disableHoverableContent = false,\n children\n } = props;\n const isOpenDelayedRef = React.useRef(true);\n const isPointerInTransitRef = React.useRef(false);\n const skipDelayTimerRef = React.useRef(0);\n React.useEffect(() => {\n const skipDelayTimer = skipDelayTimerRef.current;\n return () => window.clearTimeout(skipDelayTimer);\n }, []);\n return /* @__PURE__ */ jsx(\n TooltipProviderContextProvider,\n {\n scope: __scopeTooltip,\n isOpenDelayedRef,\n delayDuration,\n onOpen: React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n isOpenDelayedRef.current = false;\n }, []),\n onClose: React.useCallback(() => {\n window.clearTimeout(skipDelayTimerRef.current);\n skipDelayTimerRef.current = window.setTimeout(\n () => isOpenDelayedRef.current = true,\n skipDelayDuration\n );\n }, [skipDelayDuration]),\n isPointerInTransitRef,\n onPointerInTransitChange: React.useCallback((inTransit) => {\n isPointerInTransitRef.current = inTransit;\n }, []),\n disableHoverableContent,\n children\n }\n );\n};\nTooltipProvider.displayName = PROVIDER_NAME;\nvar TOOLTIP_NAME = \"Tooltip\";\nvar [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);\nvar Tooltip = (props) => {\n const {\n __scopeTooltip,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n disableHoverableContent: disableHoverableContentProp,\n delayDuration: delayDurationProp\n } = props;\n const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const [trigger, setTrigger] = React.useState(null);\n const contentId = useId();\n const openTimerRef = React.useRef(0);\n const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;\n const delayDuration = delayDurationProp ?? providerContext.delayDuration;\n const wasOpenDelayedRef = React.useRef(false);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: (open2) => {\n if (open2) {\n providerContext.onOpen();\n document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));\n } else {\n providerContext.onClose();\n }\n onOpenChange?.(open2);\n },\n caller: TOOLTIP_NAME\n });\n const stateAttribute = React.useMemo(() => {\n return open ? wasOpenDelayedRef.current ? \"delayed-open\" : \"instant-open\" : \"closed\";\n }, [open]);\n const handleOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n wasOpenDelayedRef.current = false;\n setOpen(true);\n }, [setOpen]);\n const handleClose = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n setOpen(false);\n }, [setOpen]);\n const handleDelayedOpen = React.useCallback(() => {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = window.setTimeout(() => {\n wasOpenDelayedRef.current = true;\n setOpen(true);\n openTimerRef.current = 0;\n }, delayDuration);\n }, [delayDuration, setOpen]);\n React.useEffect(() => {\n return () => {\n if (openTimerRef.current) {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n };\n }, []);\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsx(\n TooltipContextProvider,\n {\n scope: __scopeTooltip,\n contentId,\n open,\n stateAttribute,\n trigger,\n onTriggerChange: setTrigger,\n onTriggerEnter: React.useCallback(() => {\n if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();\n else handleOpen();\n }, [providerContext.isOpenDelayedRef, handleDelayedOpen, handleOpen]),\n onTriggerLeave: React.useCallback(() => {\n if (disableHoverableContent) {\n handleClose();\n } else {\n window.clearTimeout(openTimerRef.current);\n openTimerRef.current = 0;\n }\n }, [handleClose, disableHoverableContent]),\n onOpen: handleOpen,\n onClose: handleClose,\n disableHoverableContent,\n children\n }\n ) });\n};\nTooltip.displayName = TOOLTIP_NAME;\nvar TRIGGER_NAME = \"TooltipTrigger\";\nvar TooltipTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTooltip, ...triggerProps } = props;\n const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);\n const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref, context.onTriggerChange);\n const isPointerDownRef = React.useRef(false);\n const hasPointerMoveOpenedRef = React.useRef(false);\n const handlePointerUp = React.useCallback(() => isPointerDownRef.current = false, []);\n React.useEffect(() => {\n return () => document.removeEventListener(\"pointerup\", handlePointerUp);\n }, [handlePointerUp]);\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n \"aria-describedby\": context.open ? context.contentId : void 0,\n \"data-state\": context.stateAttribute,\n ...triggerProps,\n ref: composedRefs,\n onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {\n if (event.pointerType === \"touch\") return;\n if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {\n context.onTriggerEnter();\n hasPointerMoveOpenedRef.current = true;\n }\n }),\n onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {\n context.onTriggerLeave();\n hasPointerMoveOpenedRef.current = false;\n }),\n onPointerDown: composeEventHandlers(props.onPointerDown, () => {\n if (context.open) {\n context.onClose();\n }\n isPointerDownRef.current = true;\n document.addEventListener(\"pointerup\", handlePointerUp, { once: true });\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n if (!isPointerDownRef.current) context.onOpen();\n }),\n onBlur: composeEventHandlers(props.onBlur, context.onClose),\n onClick: composeEventHandlers(props.onClick, context.onClose)\n }\n ) });\n }\n);\nTooltipTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"TooltipPortal\";\nvar [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar TooltipPortal = (props) => {\n const { __scopeTooltip, forceMount, children, container } = props;\n const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeTooltip, forceMount, children: /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children }) }) });\n};\nTooltipPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"TooltipContent\";\nvar TooltipContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);\n const { forceMount = portalContext.forceMount, side = \"top\", ...contentProps } = props;\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.disableHoverableContent ? /* @__PURE__ */ jsx(TooltipContentImpl, { side, ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(TooltipContentHoverable, { side, ...contentProps, ref: forwardedRef }) });\n }\n);\nvar TooltipContentHoverable = React.forwardRef((props, forwardedRef) => {\n const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);\n const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const [pointerGraceArea, setPointerGraceArea] = React.useState(null);\n const { trigger, onClose } = context;\n const content = ref.current;\n const { onPointerInTransitChange } = providerContext;\n const handleRemoveGraceArea = React.useCallback(() => {\n setPointerGraceArea(null);\n onPointerInTransitChange(false);\n }, [onPointerInTransitChange]);\n const handleCreateGraceArea = React.useCallback(\n (event, hoverTarget) => {\n const currentTarget = event.currentTarget;\n const exitPoint = { x: event.clientX, y: event.clientY };\n const exitSide = getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect());\n const paddedExitPoints = getPaddedExitPoints(exitPoint, exitSide);\n const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());\n const graceArea = getHull([...paddedExitPoints, ...hoverTargetPoints]);\n setPointerGraceArea(graceArea);\n onPointerInTransitChange(true);\n },\n [onPointerInTransitChange]\n );\n React.useEffect(() => {\n return () => handleRemoveGraceArea();\n }, [handleRemoveGraceArea]);\n React.useEffect(() => {\n if (trigger && content) {\n const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);\n const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);\n trigger.addEventListener(\"pointerleave\", handleTriggerLeave);\n content.addEventListener(\"pointerleave\", handleContentLeave);\n return () => {\n trigger.removeEventListener(\"pointerleave\", handleTriggerLeave);\n content.removeEventListener(\"pointerleave\", handleContentLeave);\n };\n }\n }, [trigger, content, handleCreateGraceArea, handleRemoveGraceArea]);\n React.useEffect(() => {\n if (pointerGraceArea) {\n const handleTrackPointerGrace = (event) => {\n const target = event.target;\n const pointerPosition = { x: event.clientX, y: event.clientY };\n const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);\n const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);\n if (hasEnteredTarget) {\n handleRemoveGraceArea();\n } else if (isPointerOutsideGraceArea) {\n handleRemoveGraceArea();\n onClose();\n }\n };\n document.addEventListener(\"pointermove\", handleTrackPointerGrace);\n return () => document.removeEventListener(\"pointermove\", handleTrackPointerGrace);\n }\n }, [trigger, content, pointerGraceArea, onClose, handleRemoveGraceArea]);\n return /* @__PURE__ */ jsx(TooltipContentImpl, { ...props, ref: composedRefs });\n});\nvar [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });\nvar Slottable = createSlottable(\"TooltipContent\");\nvar TooltipContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTooltip,\n children,\n \"aria-label\": ariaLabel,\n onEscapeKeyDown,\n onPointerDownOutside,\n ...contentProps\n } = props;\n const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);\n const popperScope = usePopperScope(__scopeTooltip);\n const { onClose } = context;\n React.useEffect(() => {\n document.addEventListener(TOOLTIP_OPEN, onClose);\n return () => document.removeEventListener(TOOLTIP_OPEN, onClose);\n }, [onClose]);\n React.useEffect(() => {\n if (context.trigger) {\n const handleScroll = (event) => {\n const target = event.target;\n if (target?.contains(context.trigger)) onClose();\n };\n window.addEventListener(\"scroll\", handleScroll, { capture: true });\n return () => window.removeEventListener(\"scroll\", handleScroll, { capture: true });\n }\n }, [context.trigger, onClose]);\n return /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: onClose,\n children: /* @__PURE__ */ jsxs(\n PopperPrimitive.Content,\n {\n \"data-state\": context.stateAttribute,\n ...popperScope,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...contentProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-tooltip-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-tooltip-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-tooltip-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-tooltip-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-tooltip-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n },\n children: [\n /* @__PURE__ */ jsx(Slottable, { children }),\n /* @__PURE__ */ jsx(VisuallyHiddenContentContextProvider, { scope: __scopeTooltip, isInside: true, children: /* @__PURE__ */ jsx(VisuallyHiddenPrimitive.Root, { id: context.contentId, role: \"tooltip\", children: ariaLabel || children }) })\n ]\n }\n )\n }\n );\n }\n);\nTooltipContent.displayName = CONTENT_NAME;\nvar ARROW_NAME = \"TooltipArrow\";\nvar TooltipArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTooltip, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeTooltip);\n const visuallyHiddenContentContext = useVisuallyHiddenContentContext(\n ARROW_NAME,\n __scopeTooltip\n );\n return visuallyHiddenContentContext.isInside ? null : /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef });\n }\n);\nTooltipArrow.displayName = ARROW_NAME;\nfunction getExitSideFromRect(point, rect) {\n const top = Math.abs(rect.top - point.y);\n const bottom = Math.abs(rect.bottom - point.y);\n const right = Math.abs(rect.right - point.x);\n const left = Math.abs(rect.left - point.x);\n switch (Math.min(top, bottom, right, left)) {\n case left:\n return \"left\";\n case right:\n return \"right\";\n case top:\n return \"top\";\n case bottom:\n return \"bottom\";\n default:\n throw new Error(\"unreachable\");\n }\n}\nfunction getPaddedExitPoints(exitPoint, exitSide, padding = 5) {\n const paddedExitPoints = [];\n switch (exitSide) {\n case \"top\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y + padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"bottom\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y - padding }\n );\n break;\n case \"left\":\n paddedExitPoints.push(\n { x: exitPoint.x + padding, y: exitPoint.y - padding },\n { x: exitPoint.x + padding, y: exitPoint.y + padding }\n );\n break;\n case \"right\":\n paddedExitPoints.push(\n { x: exitPoint.x - padding, y: exitPoint.y - padding },\n { x: exitPoint.x - padding, y: exitPoint.y + padding }\n );\n break;\n }\n return paddedExitPoints;\n}\nfunction getPointsFromRect(rect) {\n const { top, right, bottom, left } = rect;\n return [\n { x: left, y: top },\n { x: right, y: top },\n { x: right, y: bottom },\n { x: left, y: bottom }\n ];\n}\nfunction isPointInPolygon(point, polygon) {\n const { x, y } = point;\n let inside = false;\n for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {\n const ii = polygon[i];\n const jj = polygon[j];\n const xi = ii.x;\n const yi = ii.y;\n const xj = jj.x;\n const yj = jj.y;\n const intersect = yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n}\nfunction getHull(points) {\n const newPoints = points.slice();\n newPoints.sort((a, b) => {\n if (a.x < b.x) return -1;\n else if (a.x > b.x) return 1;\n else if (a.y < b.y) return -1;\n else if (a.y > b.y) return 1;\n else return 0;\n });\n return getHullPresorted(newPoints);\n}\nfunction getHullPresorted(points) {\n if (points.length <= 1) return points.slice();\n const upperHull = [];\n for (let i = 0; i < points.length; i++) {\n const p = points[i];\n while (upperHull.length >= 2) {\n const q = upperHull[upperHull.length - 1];\n const r = upperHull[upperHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();\n else break;\n }\n upperHull.push(p);\n }\n upperHull.pop();\n const lowerHull = [];\n for (let i = points.length - 1; i >= 0; i--) {\n const p = points[i];\n while (lowerHull.length >= 2) {\n const q = lowerHull[lowerHull.length - 1];\n const r = lowerHull[lowerHull.length - 2];\n if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();\n else break;\n }\n lowerHull.push(p);\n }\n lowerHull.pop();\n if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) {\n return upperHull;\n } else {\n return upperHull.concat(lowerHull);\n }\n}\nvar Provider = TooltipProvider;\nvar Root3 = Tooltip;\nvar Trigger = TooltipTrigger;\nvar Portal = TooltipPortal;\nvar Content2 = TooltipContent;\nvar Arrow2 = TooltipArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Portal,\n Provider,\n Root3 as Root,\n Tooltip,\n TooltipArrow,\n TooltipContent,\n TooltipPortal,\n TooltipProvider,\n TooltipTrigger,\n Trigger,\n createTooltipScope\n};\n//# sourceMappingURL=index.mjs.map\n","import * as React from \"react\";\r\n\r\nexport type TooltipVariants = {\r\n\tfocus?: \"high\";\r\n};\r\n\r\nexport const TooltipContext = React.createContext<TooltipVariants>({});\r\n\r\nexport const useTooltipContext = () => {\r\n\tconst context = React.useContext(TooltipContext);\r\n\treturn context;\r\n};\r\n","import * as React from \"react\";\r\nimport * as TooltipPrimitive from \"@radix-ui/react-tooltip\";\r\nimport { tv } from \"tailwind-variants\";\r\nimport { Icon, IconProps } from \"../icon/Icon\";\r\nimport { Shortcut } from \"../shortcut\";\r\nimport { VariantsConfig } from \"@/lib/utils/variants\";\r\nimport { TooltipContext, TooltipVariants, useTooltipContext } from \"./useTooltipContext\";\r\nimport { Text } from \"@/components/text\";\r\n\r\nconst TooltipProvider = TooltipPrimitive.Provider;\r\n\r\nconst Tooltip = TooltipPrimitive.Root;\r\n\r\nconst TooltipTrigger = TooltipPrimitive.Trigger;\r\n\r\nconst tooltipArrowStyles = tv({\r\n\tslots: {\r\n\t\tfill: \"fill-status-neutral-fg\",\r\n\t\tstroke: \"stroke-primary-border stroke-[0.5px]\",\r\n\t\tsvg: \"rotate-180\"\r\n\t},\r\n\tvariants: {\r\n\t\tfocus: {\r\n\t\t\thigh: {\r\n\t\t\t\tfill: \"fill-alpha-high-20\",\r\n\t\t\t\tstroke: \"stroke-none\"\r\n\t\t\t}\r\n\t\t}\r\n\t} satisfies VariantsConfig<TooltipVariants>\r\n});\r\n\r\ntype TooltipArrowProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Arrow>;\r\n\r\nconst TooltipArrow = React.forwardRef<React.ElementRef<typeof TooltipPrimitive.Arrow>, TooltipArrowProps>(\r\n\t({ width, height, className, ...props }, ref) => {\r\n\t\tconst { focus } = useTooltipContext();\r\n\t\tconst styles = tooltipArrowStyles({ focus });\r\n\r\n\t\treturn (\r\n\t\t\t<TooltipPrimitive.Arrow ref={ref} asChild {...props}>\r\n\t\t\t\t<svg\r\n\t\t\t\t\twidth={width || \"10\"}\r\n\t\t\t\t\theight={height || \"5\"}\r\n\t\t\t\t\tviewBox=\"0 0 10 5\"\r\n\t\t\t\t\tfill=\"none\"\r\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\r\n\t\t\t\t\tclassName={styles.svg({ className })}\r\n\t\t\t\t>\r\n\t\t\t\t\t<path d=\"M5.00082 0.248638L10 5.99523L0 6.00001L5.00082 0.248638Z\" className={styles.fill()} />\r\n\t\t\t\t\t<path\r\n\t\t\t\t\t\td=\"M9.57422 5.25L5.37732 0.433047C5.17793 0.204195 4.82228 0.204345 4.62308 0.433365L0.433594 5.25\"\r\n\t\t\t\t\t\tclassName={styles.stroke()}\r\n\t\t\t\t\t\tstrokeLinecap=\"round\"\r\n\t\t\t\t\t/>\r\n\t\t\t\t</svg>\r\n\t\t\t</TooltipPrimitive.Arrow>\r\n\t\t);\r\n\t}\r\n);\r\n\r\nTooltipArrow.displayName = TooltipPrimitive.Arrow.displayName;\r\n\r\nconst tooltipContentStyles = tv({\r\n\tbase: [\r\n\t\t\"z-50 rounded-lg border-[0.5px] px-2 py-1.5 text-xs backdrop-blur animate-in fade-in-0 zoom-in-95\",\r\n\t\t\"border-primary-border bg-alpha-30 text-primary-fg shadow-soft-sm\",\r\n\t\t\"data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\r\n\t\t\"data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2\"\r\n\t],\r\n\tvariants: {\r\n\t\tfocus: {\r\n\t\t\thigh: \"border-0 bg-alpha-high-20 text-inverse-primary-fg shadow-soft-base\"\r\n\t\t}\r\n\t} satisfies VariantsConfig<TooltipVariants>\r\n});\r\n\r\nexport type TooltipContentProps = React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content> &\r\n\tTooltipVariants & {\r\n\t\t/**\r\n\t\t * Контейнер для портала. Если не указан, портал рендерится в document.body\r\n\t\t */\r\n\t\tportalContainer?: HTMLElement;\r\n\t};\r\n\r\nconst TooltipContent = React.forwardRef<React.ElementRef<typeof TooltipPrimitive.Content>, TooltipContentProps>(\r\n\t({ className, sideOffset = 8, portalContainer, focus, ...props }, ref) => {\r\n\t\tconst container = portalContainer;\r\n\r\n\t\treturn (\r\n\t\t\t<TooltipContext.Provider value={{ focus }}>\r\n\t\t\t\t<TooltipPrimitive.Portal container={container}>\r\n\t\t\t\t\t<TooltipPrimitive.Content\r\n\t\t\t\t\t\tref={ref}\r\n\t\t\t\t\t\tsideOffset={sideOffset}\r\n\t\t\t\t\t\tclassName={tooltipContentStyles({ className, focus })}\r\n\t\t\t\t\t\t{...props}\r\n\t\t\t\t\t/>\r\n\t\t\t\t</TooltipPrimitive.Portal>\r\n\t\t\t</TooltipContext.Provider>\r\n\t\t);\r\n\t}\r\n);\r\nTooltipContent.displayName = TooltipPrimitive.Content.displayName;\r\n\r\nconst tooltipTitleStyles = tv({\r\n\tbase: \"text-sm font-medium text-primary-fg\",\r\n\tvariants: {\r\n\t\tfocus: {\r\n\t\t\thigh: \"text-inverse-primary-fg\"\r\n\t\t}\r\n\t} satisfies VariantsConfig<TooltipVariants>\r\n});\r\n\r\ntype TooltipTitleProps = React.HTMLAttributes<HTMLDivElement>;\r\n\r\nconst TooltipTitle = React.forwardRef<HTMLDivElement, TooltipTitleProps>(({ className, children, ...props }, ref) => {\r\n\tconst { focus } = useTooltipContext();\r\n\treturn (\r\n\t\t<div ref={ref} className={tooltipTitleStyles({ className, focus })} {...props}>\r\n\t\t\t{children}\r\n\t\t</div>\r\n\t);\r\n});\r\nTooltipTitle.displayName = \"TooltipTitle\";\r\n\r\nconst tooltipTextStyles = tv({\r\n\tbase: \"\",\r\n\tvariants: {\r\n\t\tfocus: {\r\n\t\t\thigh: \"text-inverse-secondary-fg\"\r\n\t\t}\r\n\t} satisfies VariantsConfig<TooltipVariants>\r\n});\r\n\r\ntype TooltipTextProps = React.HTMLAttributes<HTMLDivElement>;\r\n\r\nconst TooltipText = React.forwardRef<HTMLDivElement, TooltipTextProps>(({ className, children, ...props }, ref) => {\r\n\tconst { focus } = useTooltipContext();\r\n\treturn (\r\n\t\t<Text ref={ref} size=\"xs\" className={tooltipTextStyles({ className, focus })} {...props}>\r\n\t\t\t{children}\r\n\t\t</Text>\r\n\t);\r\n});\r\nTooltipText.displayName = \"TooltipText\";\r\n\r\nconst tooltipIconStyles = tv({\r\n\tbase: \"shrink-0 text-xs text-primary-fg\",\r\n\tvariants: {\r\n\t\tfocus: {\r\n\t\t\thigh: \"text-inverse-primary-fg\"\r\n\t\t}\r\n\t} satisfies VariantsConfig<TooltipVariants>\r\n});\r\n\r\ntype TooltipIconProps = IconProps;\r\n\r\nconst TooltipIcon = React.forwardRef<SVGSVGElement, TooltipIconProps>(({ className, ...props }, ref) => {\r\n\tconst { focus } = useTooltipContext();\r\n\treturn <Icon size=\"lg\" className={tooltipIconStyles({ className, focus })} ref={ref} {...props} />;\r\n});\r\nTooltipIcon.displayName = \"TooltipIcon\";\r\n\r\nconst tooltipShortcutStyles = tv({\r\n\tbase: \"h-auto p-0 text-xs text-muted\",\r\n\tvariants: {\r\n\t\tfocus: {\r\n\t\t\thigh: \"text-inverse-secondary-fg opacity-70\"\r\n\t\t}\r\n\t} satisfies VariantsConfig<TooltipVariants>\r\n});\r\n\r\ntype TooltipShortcutProps = React.HTMLAttributes<HTMLDivElement>;\r\n\r\nconst TooltipShortcut = React.forwardRef<HTMLDivElement, TooltipShortcutProps>(({ className, ...props }, ref) => {\r\n\tconst { focus } = useTooltipContext();\r\n\treturn <Shortcut variant=\"ghost\" className={tooltipShortcutStyles({ className, focus })} ref={ref} {...props} />;\r\n});\r\nTooltipShortcut.displayName = \"TooltipShortcut\";\r\n\r\nexport {\r\n\tTooltip,\r\n\tTooltipTrigger,\r\n\tTooltipContent,\r\n\tTooltipArrow,\r\n\tTooltipProvider,\r\n\tTooltipTitle,\r\n\tTooltipText,\r\n\tTooltipIcon,\r\n\tTooltipShortcut\r\n};\r\n"],"names":["createTooltipContext","createTooltipScope","createContextScope","createPopperScope","usePopperScope","PROVIDER_NAME","DEFAULT_DELAY_DURATION","TOOLTIP_OPEN","TooltipProviderContextProvider","useTooltipProviderContext","TooltipProvider","props","__scopeTooltip","delayDuration","skipDelayDuration","disableHoverableContent","children","isOpenDelayedRef","React","isPointerInTransitRef","skipDelayTimerRef","skipDelayTimer","jsx","inTransit","TOOLTIP_NAME","TooltipContextProvider","useTooltipContext","Tooltip","openProp","defaultOpen","onOpenChange","disableHoverableContentProp","delayDurationProp","providerContext","popperScope","trigger","setTrigger","contentId","useId","openTimerRef","wasOpenDelayedRef","open","setOpen","useControllableState","open2","stateAttribute","handleOpen","handleClose","handleDelayedOpen","PopperPrimitive.Root","TRIGGER_NAME","TooltipTrigger","forwardedRef","triggerProps","context","ref","composedRefs","useComposedRefs","isPointerDownRef","hasPointerMoveOpenedRef","handlePointerUp","PopperPrimitive.Anchor","Primitive","composeEventHandlers","event","PORTAL_NAME","PortalProvider","usePortalContext","TooltipPortal","forceMount","container","Presence","PortalPrimitive","CONTENT_NAME","TooltipContent","portalContext","side","contentProps","TooltipContentImpl","TooltipContentHoverable","pointerGraceArea","setPointerGraceArea","onClose","content","onPointerInTransitChange","handleRemoveGraceArea","handleCreateGraceArea","hoverTarget","currentTarget","exitPoint","exitSide","getExitSideFromRect","paddedExitPoints","getPaddedExitPoints","hoverTargetPoints","getPointsFromRect","graceArea","getHull","handleTriggerLeave","handleContentLeave","handleTrackPointerGrace","target","pointerPosition","hasEnteredTarget","isPointerOutsideGraceArea","isPointInPolygon","VisuallyHiddenContentContextProvider","useVisuallyHiddenContentContext","Slottable","createSlottable","ariaLabel","onEscapeKeyDown","onPointerDownOutside","handleScroll","DismissableLayer","jsxs","PopperPrimitive.Content","VisuallyHiddenPrimitive.Root","ARROW_NAME","TooltipArrow","arrowProps","PopperPrimitive.Arrow","point","rect","top","bottom","right","left","padding","polygon","x","y","inside","j","ii","jj","xi","yi","xj","yj","points","newPoints","a","b","getHullPresorted","upperHull","i","p","q","r","lowerHull","Provider","Root3","Trigger","Portal","Content2","Arrow2","TooltipContext","TooltipPrimitive.Provider","TooltipPrimitive.Root","TooltipPrimitive.Trigger","tooltipArrowStyles","tv","width","height","className","focus","styles","TooltipPrimitive.Arrow","tooltipContentStyles","sideOffset","portalContainer","TooltipPrimitive.Portal","TooltipPrimitive.Content","tooltipTitleStyles","TooltipTitle","tooltipTextStyles","TooltipText","Text","tooltipIconStyles","TooltipIcon","Icon","tooltipShortcutStyles","TooltipShortcut","Shortcut"],"mappings":"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","x_google_ignoreList":[0]}