@mastra/playground-ui 35.0.0 → 35.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (220) hide show
  1. package/CHANGELOG.md +77 -0
  2. package/dist/{code-block-C4Zp_ewI.cjs → code-block-BPI6hA9o.cjs} +2 -2
  3. package/dist/{code-block-C4Zp_ewI.cjs.map → code-block-BPI6hA9o.cjs.map} +1 -1
  4. package/dist/{code-block-CnRVTecy.js → code-block-BdjHwqE4.js} +2 -2
  5. package/dist/{code-block-CnRVTecy.js.map → code-block-BdjHwqE4.js.map} +1 -1
  6. package/dist/{code-editor-DuX_CPRv.js → code-editor-CxHGOvdY.js} +3 -3
  7. package/dist/{code-editor-DuX_CPRv.js.map → code-editor-CxHGOvdY.js.map} +1 -1
  8. package/dist/{code-editor-LhRB_wMh.cjs → code-editor-DVWPuq12.cjs} +3 -3
  9. package/dist/{code-editor-LhRB_wMh.cjs.map → code-editor-DVWPuq12.cjs.map} +1 -1
  10. package/dist/combobox-DQdRtI_v.cjs +245 -0
  11. package/dist/combobox-DQdRtI_v.cjs.map +1 -0
  12. package/dist/combobox-DvRTz5eL.js +223 -0
  13. package/dist/combobox-DvRTz5eL.js.map +1 -0
  14. package/dist/{command-DPEUOKZw.js → command-CkFCH229.js} +86 -43
  15. package/dist/command-CkFCH229.js.map +1 -0
  16. package/dist/{command-D0tQ1Lpz.cjs → command-EI7t_0WS.cjs} +86 -43
  17. package/dist/command-EI7t_0WS.cjs.map +1 -0
  18. package/dist/components/CodeBlock.cjs.js +1 -1
  19. package/dist/components/CodeBlock.es.js +1 -1
  20. package/dist/components/CodeEditor.cjs.js +1 -1
  21. package/dist/components/CodeEditor.es.js +1 -1
  22. package/dist/components/Columns.cjs.js +1 -1
  23. package/dist/components/Columns.es.js +1 -1
  24. package/dist/components/Combobox.cjs.js +2 -4
  25. package/dist/components/Combobox.cjs.js.map +1 -1
  26. package/dist/components/Combobox.es.js +1 -2
  27. package/dist/components/Combobox.es.js.map +1 -1
  28. package/dist/components/Command.cjs.js +1 -1
  29. package/dist/components/Command.es.js +1 -1
  30. package/dist/components/CopyButton.cjs.js +1 -1
  31. package/dist/components/CopyButton.es.js +1 -1
  32. package/dist/components/DataCodeSection.cjs.js +1 -1
  33. package/dist/components/DataCodeSection.es.js +1 -1
  34. package/dist/components/DataDetailsPanel.cjs.js +1 -1
  35. package/dist/components/DataDetailsPanel.es.js +1 -1
  36. package/dist/components/DataKeysAndValues.cjs.js +1 -1
  37. package/dist/components/DataKeysAndValues.es.js +1 -1
  38. package/dist/components/DataList.cjs.js +2 -2
  39. package/dist/components/DataList.es.js +2 -2
  40. package/dist/components/DataPanel.cjs.js +1 -1
  41. package/dist/components/DataPanel.es.js +1 -1
  42. package/dist/components/Dialog.cjs.js +1 -1
  43. package/dist/components/Dialog.es.js +1 -1
  44. package/dist/components/HorizontalBars.cjs.js +1 -1
  45. package/dist/components/HorizontalBars.es.js +1 -1
  46. package/dist/components/LogsDataList.cjs.js +2 -2
  47. package/dist/components/LogsDataList.es.js +2 -2
  48. package/dist/components/MainSidebar.cjs.js +1 -1
  49. package/dist/components/MainSidebar.es.js +1 -1
  50. package/dist/components/MarkdownRenderer.cjs.js +1 -1
  51. package/dist/components/MarkdownRenderer.es.js +1 -1
  52. package/dist/components/MetricsDataTable.cjs.js +1 -1
  53. package/dist/components/MetricsDataTable.es.js +1 -1
  54. package/dist/components/PropertyFilter.cjs.js +1 -1
  55. package/dist/components/PropertyFilter.es.js +1 -1
  56. package/dist/components/ScrollArea.cjs.js +1 -1
  57. package/dist/components/ScrollArea.es.js +1 -1
  58. package/dist/components/SideDialog.cjs.js +1 -1
  59. package/dist/components/SideDialog.es.js +1 -1
  60. package/dist/components/Truncate.cjs.js +1 -1
  61. package/dist/components/Truncate.es.js +1 -1
  62. package/dist/{copy-button-BfiqaCtC.js → copy-button-RffVknBA.js} +2 -2
  63. package/dist/{copy-button-BfiqaCtC.js.map → copy-button-RffVknBA.js.map} +1 -1
  64. package/dist/{copy-button-BaAuAgdC.cjs → copy-button-ler9dH8g.cjs} +3 -3
  65. package/dist/{copy-button-BaAuAgdC.cjs.map → copy-button-ler9dH8g.cjs.map} +1 -1
  66. package/dist/{data-code-section-MygZlpwo.js → data-code-section-BBBffVVs.js} +3 -3
  67. package/dist/{data-code-section-MygZlpwo.js.map → data-code-section-BBBffVVs.js.map} +1 -1
  68. package/dist/{data-code-section-BtFzBCox.cjs → data-code-section-ChVXPz-i.cjs} +3 -3
  69. package/dist/{data-code-section-BtFzBCox.cjs.map → data-code-section-ChVXPz-i.cjs.map} +1 -1
  70. package/dist/{data-keys-and-values-BSeQG7jb.js → data-keys-and-values-C3pzr_d1.js} +2 -2
  71. package/dist/{data-keys-and-values-BSeQG7jb.js.map → data-keys-and-values-C3pzr_d1.js.map} +1 -1
  72. package/dist/{data-keys-and-values-Spy2O_IE.cjs → data-keys-and-values-KIwfkmc7.cjs} +3 -3
  73. package/dist/{data-keys-and-values-Spy2O_IE.cjs.map → data-keys-and-values-KIwfkmc7.cjs.map} +1 -1
  74. package/dist/{data-list-skeleton-COjCBzBF.cjs → data-list-skeleton-BlOwAki1.cjs} +5 -15
  75. package/dist/data-list-skeleton-BlOwAki1.cjs.map +1 -0
  76. package/dist/{data-list-skeleton-DmAqHgws.js → data-list-skeleton-DD7ljjgS.js} +5 -15
  77. package/dist/data-list-skeleton-DD7ljjgS.js.map +1 -0
  78. package/dist/{data-panel-DToYF7cH.cjs → data-panel-DBxE_3ux.cjs} +2 -2
  79. package/dist/{data-panel-DToYF7cH.cjs.map → data-panel-DBxE_3ux.cjs.map} +1 -1
  80. package/dist/{data-panel-DumaHQiP.js → data-panel-DPVF9Yok.js} +2 -2
  81. package/dist/{data-panel-DumaHQiP.js.map → data-panel-DPVF9Yok.js.map} +1 -1
  82. package/dist/{dialog-46zkb32X.cjs → dialog-C0gOGKEK.cjs} +31 -29
  83. package/dist/dialog-C0gOGKEK.cjs.map +1 -0
  84. package/dist/{dialog-CSSfcjSX.js → dialog-DTLHod4X.js} +31 -29
  85. package/dist/dialog-DTLHod4X.js.map +1 -0
  86. package/dist/dialog.css +2 -2
  87. package/dist/hooks/use-autoscroll.cjs.js +110 -0
  88. package/dist/hooks/use-autoscroll.cjs.js.map +1 -0
  89. package/dist/hooks/use-autoscroll.d.ts +2 -0
  90. package/dist/hooks/use-autoscroll.es.js +106 -0
  91. package/dist/hooks/use-autoscroll.es.js.map +1 -0
  92. package/dist/hooks/use-copy-to-clipboard.cjs.js +11 -0
  93. package/dist/hooks/use-copy-to-clipboard.cjs.js.map +1 -0
  94. package/dist/hooks/use-copy-to-clipboard.d.ts +2 -0
  95. package/dist/hooks/use-copy-to-clipboard.es.js +3 -0
  96. package/dist/hooks/use-copy-to-clipboard.es.js.map +1 -0
  97. package/dist/hooks/use-in-view.cjs.js +22 -0
  98. package/dist/hooks/use-in-view.cjs.js.map +1 -0
  99. package/dist/hooks/use-in-view.d.ts +2 -0
  100. package/dist/hooks/use-in-view.es.js +18 -0
  101. package/dist/hooks/use-in-view.es.js.map +1 -0
  102. package/dist/hooks/use-is-mobile.cjs.js +21 -0
  103. package/dist/hooks/use-is-mobile.cjs.js.map +1 -0
  104. package/dist/hooks/use-is-mobile.d.ts +2 -0
  105. package/dist/hooks/use-is-mobile.es.js +17 -0
  106. package/dist/hooks/use-is-mobile.es.js.map +1 -0
  107. package/dist/hooks/use-keyboard-shortcut-label.cjs.js +29 -0
  108. package/dist/hooks/use-keyboard-shortcut-label.cjs.js.map +1 -0
  109. package/dist/hooks/use-keyboard-shortcut-label.d.ts +2 -0
  110. package/dist/hooks/use-keyboard-shortcut-label.es.js +24 -0
  111. package/dist/hooks/use-keyboard-shortcut-label.es.js.map +1 -0
  112. package/dist/{horizontal-bars-DjLETHvH.js → horizontal-bars-r1aEIHUc.js} +2 -2
  113. package/dist/{horizontal-bars-DjLETHvH.js.map → horizontal-bars-r1aEIHUc.js.map} +1 -1
  114. package/dist/{horizontal-bars-C9qp4r47.cjs → horizontal-bars-uPFpgihX.cjs} +2 -2
  115. package/dist/{horizontal-bars-C9qp4r47.cjs.map → horizontal-bars-uPFpgihX.cjs.map} +1 -1
  116. package/dist/index.cjs.js +88 -79
  117. package/dist/index.cjs.js.map +1 -1
  118. package/dist/index.css +55 -30
  119. package/dist/index.es.js +72 -69
  120. package/dist/index.es.js.map +1 -1
  121. package/dist/{logs-data-list-kzBMv1MW.cjs → logs-data-list-3qmFjBz8.cjs} +2 -2
  122. package/dist/{logs-data-list-kzBMv1MW.cjs.map → logs-data-list-3qmFjBz8.cjs.map} +1 -1
  123. package/dist/{logs-data-list-Bkf7oWlx.js → logs-data-list-Dh6c7URj.js} +2 -2
  124. package/dist/{logs-data-list-Bkf7oWlx.js.map → logs-data-list-Dh6c7URj.js.map} +1 -1
  125. package/dist/{main-sidebar-Djs_3tGw.cjs → main-sidebar-ByHmwU4R.cjs} +6 -5
  126. package/dist/main-sidebar-ByHmwU4R.cjs.map +1 -0
  127. package/dist/{main-sidebar-1GVDTtcD.js → main-sidebar-DJSorgYQ.js} +6 -5
  128. package/dist/main-sidebar-DJSorgYQ.js.map +1 -0
  129. package/dist/{markdown-renderer-DyUlVfRt.cjs → markdown-renderer-Dyg_1QXx.cjs} +2 -2
  130. package/dist/{markdown-renderer-DyUlVfRt.cjs.map → markdown-renderer-Dyg_1QXx.cjs.map} +1 -1
  131. package/dist/{markdown-renderer-BYSrmn0E.js → markdown-renderer-QftQuP4g.js} +2 -2
  132. package/dist/{markdown-renderer-BYSrmn0E.js.map → markdown-renderer-QftQuP4g.js.map} +1 -1
  133. package/dist/{metrics-data-table-D7vx2WEJ.cjs → metrics-data-table-AjAA-dqH.cjs} +2 -2
  134. package/dist/{metrics-data-table-D7vx2WEJ.cjs.map → metrics-data-table-AjAA-dqH.cjs.map} +1 -1
  135. package/dist/{metrics-data-table-DryqJWoI.js → metrics-data-table-hSmtDNck.js} +2 -2
  136. package/dist/{metrics-data-table-DryqJWoI.js.map → metrics-data-table-hSmtDNck.js.map} +1 -1
  137. package/dist/{multi-column-BzL86JPK.cjs → multi-column-BbVNPvhh.cjs} +2 -2
  138. package/dist/{multi-column-BzL86JPK.cjs.map → multi-column-BbVNPvhh.cjs.map} +1 -1
  139. package/dist/{multi-column-C1sXoVG3.js → multi-column-o9qcoBXV.js} +2 -2
  140. package/dist/{multi-column-C1sXoVG3.js.map → multi-column-o9qcoBXV.js.map} +1 -1
  141. package/dist/{property-filter-creator-DU8pl6-6.cjs → property-filter-creator-CaG_zPdy.cjs} +4 -3
  142. package/dist/property-filter-creator-CaG_zPdy.cjs.map +1 -0
  143. package/dist/{property-filter-creator-B9tK0VY3.js → property-filter-creator-Cl9E6wxf.js} +4 -3
  144. package/dist/property-filter-creator-Cl9E6wxf.js.map +1 -0
  145. package/dist/scroll-area-BtcyzOxO.cjs +243 -0
  146. package/dist/scroll-area-BtcyzOxO.cjs.map +1 -0
  147. package/dist/scroll-area-DjZ6nTm5.js +221 -0
  148. package/dist/scroll-area-DjZ6nTm5.js.map +1 -0
  149. package/dist/src/ds/components/Combobox/combobox-styles.d.ts +5 -12
  150. package/dist/src/ds/components/Combobox/combobox.d.ts +13 -4
  151. package/dist/src/ds/components/Combobox/combobox.stories.d.ts +1 -0
  152. package/dist/src/ds/components/Combobox/index.d.ts +0 -1
  153. package/dist/src/ds/components/Command/command.d.ts +5 -1
  154. package/dist/src/ds/components/Command/command.stories.d.ts +1 -0
  155. package/dist/src/ds/components/DataList/data-list-root.d.ts +3 -4
  156. package/dist/src/ds/components/Dialog/dialog.d.ts +2 -0
  157. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-item-classes.d.ts +12 -0
  158. package/dist/src/ds/components/MainSidebar/main-sidebar-nav-link.d.ts +0 -13
  159. package/dist/src/ds/components/MainSidebar/main-sidebar.d.ts +2 -1
  160. package/dist/src/ds/components/ScrollArea/scroll-area.d.ts +12 -0
  161. package/dist/src/ds/components/ScrollArea/scroll-area.stories.d.ts +2 -0
  162. package/dist/src/hooks/use-copy-to-clipboard.d.ts +9 -1
  163. package/dist/src/hooks/use-keyboard-shortcut-label.d.ts +2 -0
  164. package/dist/src/index.d.ts +1 -1
  165. package/dist/src/lib/file/index.d.ts +1 -0
  166. package/dist/src/lib/file/schemes.d.ts +26 -0
  167. package/dist/{traces-data-list-BPTKzaN6.cjs → traces-data-list-BNmnKyDD.cjs} +8 -3
  168. package/dist/traces-data-list-BNmnKyDD.cjs.map +1 -0
  169. package/dist/{traces-data-list-CB7frfpp.js → traces-data-list-DRyI45Ke.js} +8 -3
  170. package/dist/traces-data-list-DRyI45Ke.js.map +1 -0
  171. package/dist/{truncate-C9bKR_02.js → truncate-B8_8wx-G.js} +2 -2
  172. package/dist/{truncate-C9bKR_02.js.map → truncate-B8_8wx-G.js.map} +1 -1
  173. package/dist/{truncate-RL2aHd1a.cjs → truncate-Csk5KmAy.cjs} +2 -2
  174. package/dist/{truncate-RL2aHd1a.cjs.map → truncate-Csk5KmAy.cjs.map} +1 -1
  175. package/dist/use-copy-to-clipboard-D7L_l6_x.js +127 -0
  176. package/dist/use-copy-to-clipboard-D7L_l6_x.js.map +1 -0
  177. package/dist/use-copy-to-clipboard-DHaJCGet.cjs +131 -0
  178. package/dist/use-copy-to-clipboard-DHaJCGet.cjs.map +1 -0
  179. package/package.json +12 -6
  180. package/dist/combobox-B2TriE9Z.cjs +0 -77
  181. package/dist/combobox-B2TriE9Z.cjs.map +0 -1
  182. package/dist/combobox-q2xPfCZc.js +0 -75
  183. package/dist/combobox-q2xPfCZc.js.map +0 -1
  184. package/dist/command-D0tQ1Lpz.cjs.map +0 -1
  185. package/dist/command-DPEUOKZw.js.map +0 -1
  186. package/dist/components/ScrollableContainer.cjs.js +0 -10
  187. package/dist/components/ScrollableContainer.cjs.js.map +0 -1
  188. package/dist/components/ScrollableContainer.d.ts +0 -2
  189. package/dist/components/ScrollableContainer.es.js +0 -2
  190. package/dist/components/ScrollableContainer.es.js.map +0 -1
  191. package/dist/data-list-skeleton-COjCBzBF.cjs.map +0 -1
  192. package/dist/data-list-skeleton-DmAqHgws.js.map +0 -1
  193. package/dist/dialog-46zkb32X.cjs.map +0 -1
  194. package/dist/dialog-CSSfcjSX.js.map +0 -1
  195. package/dist/main-sidebar-1GVDTtcD.js.map +0 -1
  196. package/dist/main-sidebar-Djs_3tGw.cjs.map +0 -1
  197. package/dist/multi-combobox-DkFLK64B.cjs +0 -193
  198. package/dist/multi-combobox-DkFLK64B.cjs.map +0 -1
  199. package/dist/multi-combobox-Y3gT0MqV.js +0 -189
  200. package/dist/multi-combobox-Y3gT0MqV.js.map +0 -1
  201. package/dist/property-filter-creator-B9tK0VY3.js.map +0 -1
  202. package/dist/property-filter-creator-DU8pl6-6.cjs.map +0 -1
  203. package/dist/scroll-area-BqJfcT94.cjs +0 -230
  204. package/dist/scroll-area-BqJfcT94.cjs.map +0 -1
  205. package/dist/scroll-area-BtDqmqBK.js +0 -208
  206. package/dist/scroll-area-BtDqmqBK.js.map +0 -1
  207. package/dist/scrollable-container-BqOFHwdb.js +0 -151
  208. package/dist/scrollable-container-BqOFHwdb.js.map +0 -1
  209. package/dist/scrollable-container-Btq-TfCL.cjs +0 -153
  210. package/dist/scrollable-container-Btq-TfCL.cjs.map +0 -1
  211. package/dist/src/ds/components/Combobox/multi-combobox.d.ts +0 -22
  212. package/dist/src/ds/components/ScrollableContainer/index.d.ts +0 -1
  213. package/dist/src/ds/components/ScrollableContainer/scrollable-container.d.ts +0 -8
  214. package/dist/src/ds/components/ScrollableContainer/scrollable-container.stories.d.ts +0 -10
  215. package/dist/traces-data-list-BPTKzaN6.cjs.map +0 -1
  216. package/dist/traces-data-list-CB7frfpp.js.map +0 -1
  217. package/dist/use-copy-to-clipboard-CGqfkXnN.js +0 -73
  218. package/dist/use-copy-to-clipboard-CGqfkXnN.js.map +0 -1
  219. package/dist/use-copy-to-clipboard-CQgIuR1c.cjs +0 -77
  220. package/dist/use-copy-to-clipboard-CQgIuR1c.cjs.map +0 -1
@@ -49,34 +49,36 @@ const DialogOverlay = React__namespace.forwardRef(({ className, ...props }, ref)
49
49
  }
50
50
  ));
51
51
  DialogOverlay.displayName = "DialogOverlay";
52
- const DialogContent = React__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { children: [
53
- /* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, {}),
54
- /* @__PURE__ */ jsxRuntime.jsxs(
55
- dialog.Dialog.Popup,
56
- {
57
- ref,
58
- "data-slot": "dialog-content",
59
- className: utils.cn(
60
- "dialog-content-anim",
61
- "fixed left-[50%] top-[50%] z-50 grid translate-x-[-50%] translate-y-[-50%]",
62
- "w-full max-w-[calc(100%-2rem)] sm:max-w-lg",
63
- "rounded-xl border border-border1/40 bg-surface2/96 backdrop-blur-md shadow-dialog",
64
- "focus-visible:outline-hidden",
65
- className
66
- ),
67
- ...props,
68
- children: [
69
- children,
70
- /* @__PURE__ */ jsxRuntime.jsx(
71
- dialog.Dialog.Close,
72
- {
73
- render: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, { variant: "ghost", size: "sm", className: "absolute top-3 right-3", "aria-label": "Close", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, {}) })
74
- }
75
- )
76
- ]
77
- }
78
- )
79
- ] }));
52
+ const DialogContent = React__namespace.forwardRef(
53
+ ({ className, children, showOverlay = true, overlayClassName, ...props }, ref) => /* @__PURE__ */ jsxRuntime.jsxs(DialogPortal, { children: [
54
+ showOverlay && /* @__PURE__ */ jsxRuntime.jsx(DialogOverlay, { className: overlayClassName }),
55
+ /* @__PURE__ */ jsxRuntime.jsxs(
56
+ dialog.Dialog.Popup,
57
+ {
58
+ ref,
59
+ "data-slot": "dialog-content",
60
+ className: utils.cn(
61
+ "dialog-content-anim",
62
+ "fixed left-[50%] top-[50%] z-50 grid translate-x-[-50%] translate-y-[-50%]",
63
+ "w-full max-w-[calc(100%-2rem)] sm:max-w-lg",
64
+ "rounded-xl border border-border1/40 bg-surface2/96 backdrop-blur-md shadow-dialog",
65
+ "focus-visible:outline-hidden",
66
+ className
67
+ ),
68
+ ...props,
69
+ children: [
70
+ children,
71
+ /* @__PURE__ */ jsxRuntime.jsx(
72
+ dialog.Dialog.Close,
73
+ {
74
+ render: /* @__PURE__ */ jsxRuntime.jsx(Button.Button, { variant: "ghost", size: "sm", className: "absolute top-3 right-3", "aria-label": "Close", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.X, {}) })
75
+ }
76
+ )
77
+ ]
78
+ }
79
+ )
80
+ ] })
81
+ );
80
82
  DialogContent.displayName = "DialogContent";
81
83
  const DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsxRuntime.jsx("div", { className: utils.cn("flex flex-col gap-0.5 px-4 py-3 text-left", className), ...props });
82
84
  DialogHeader.displayName = "DialogHeader";
@@ -102,4 +104,4 @@ exports.DialogOverlay = DialogOverlay;
102
104
  exports.DialogPortal = DialogPortal;
103
105
  exports.DialogTitle = DialogTitle;
104
106
  exports.DialogTrigger = DialogTrigger;
105
- //# sourceMappingURL=dialog-46zkb32X.cjs.map
107
+ //# sourceMappingURL=dialog-C0gOGKEK.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog-C0gOGKEK.cjs","sources":["../src/ds/components/Dialog/dialog.tsx"],"sourcesContent":["import { Dialog as DialogPrimitive } from '@base-ui/react/dialog';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '@/ds/components/Button';\nimport { asChildRenderProps } from '@/lib/as-child';\nimport { cn } from '@/lib/utils';\n\nimport './dialog.css';\n\nconst Dialog = DialogPrimitive.Root;\n\ntype DialogTriggerProps = DialogPrimitive.Trigger.Props & {\n /** @deprecated Use Base UI's `render` prop instead, e.g. `render={<Button />}`. */\n asChild?: boolean;\n};\n\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, DialogTriggerProps>(\n ({ asChild, children, ...props }, ref) => {\n return (\n <DialogPrimitive.Trigger ref={ref} {...asChildRenderProps(asChild, children)} {...props}>\n {asChild ? undefined : children}\n </DialogPrimitive.Trigger>\n );\n },\n);\nDialogTrigger.displayName = 'DialogTrigger';\n\nconst DialogPortal = DialogPrimitive.Portal;\n\ntype DialogCloseProps = DialogPrimitive.Close.Props & {\n /** @deprecated Use Base UI's `render` prop instead, e.g. `render={<Button />}`. */\n asChild?: boolean;\n};\n\nconst DialogClose = React.forwardRef<HTMLButtonElement, DialogCloseProps>(({ asChild, children, ...props }, ref) => {\n return (\n <DialogPrimitive.Close ref={ref} {...asChildRenderProps(asChild, children)} {...props}>\n {asChild ? undefined : children}\n </DialogPrimitive.Close>\n );\n});\nDialogClose.displayName = 'DialogClose';\n\ntype DialogOverlayProps = Omit<DialogPrimitive.Backdrop.Props, 'className'> & {\n className?: string;\n};\n\nconst DialogOverlay = React.forwardRef<HTMLDivElement, DialogOverlayProps>(({ className, ...props }, ref) => (\n <DialogPrimitive.Backdrop\n ref={ref}\n className={cn('dialog-overlay-anim fixed inset-0 z-50 bg-overlay backdrop-blur-xs', className)}\n {...props}\n />\n));\nDialogOverlay.displayName = 'DialogOverlay';\n\ntype DialogContentProps = Omit<DialogPrimitive.Popup.Props, 'className'> & {\n className?: string;\n showOverlay?: boolean;\n overlayClassName?: string;\n};\n\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className, children, showOverlay = true, overlayClassName, ...props }, ref) => (\n <DialogPortal>\n {showOverlay && <DialogOverlay className={overlayClassName} />}\n <DialogPrimitive.Popup\n ref={ref}\n data-slot=\"dialog-content\"\n className={cn(\n 'dialog-content-anim',\n 'fixed left-[50%] top-[50%] z-50 grid translate-x-[-50%] translate-y-[-50%]',\n 'w-full max-w-[calc(100%-2rem)] sm:max-w-lg',\n 'rounded-xl border border-border1/40 bg-surface2/96 backdrop-blur-md shadow-dialog',\n 'focus-visible:outline-hidden',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n render={\n <Button variant=\"ghost\" size=\"sm\" className=\"absolute top-3 right-3\" aria-label=\"Close\">\n <X />\n </Button>\n }\n />\n </DialogPrimitive.Popup>\n </DialogPortal>\n ),\n);\nDialogContent.displayName = 'DialogContent';\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col gap-0.5 px-4 py-3 text-left', className)} {...props} />\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col-reverse gap-1.5 px-4 py-2.5 sm:flex-row sm:justify-end', className)} {...props} />\n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogBody = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('overflow-y-auto px-4 py-3.5 max-h-[50vh]', className)} {...props} />\n);\nDialogBody.displayName = 'DialogBody';\n\ntype DialogTitleProps = Omit<DialogPrimitive.Title.Props, 'className'> & {\n className?: string;\n};\n\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, DialogTitleProps>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title ref={ref} className={cn('text-ui-md font-medium', className)} {...props} />\n));\nDialogTitle.displayName = 'DialogTitle';\n\ntype DialogDescriptionProps = Omit<DialogPrimitive.Description.Props, 'className'> & {\n className?: string;\n};\n\nconst DialogDescription = React.forwardRef<HTMLParagraphElement, DialogDescriptionProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} className={cn('sr-only', className)} {...props} />\n ),\n);\nDialogDescription.displayName = 'DialogDescription';\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogBody,\n DialogTitle,\n DialogDescription,\n};\n"],"names":["DialogPrimitive","React","asChild","jsx","asChildRenderProps","cn","jsxs","Button","X"],"mappings":"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"}
@@ -28,34 +28,36 @@ const DialogOverlay = React.forwardRef(({ className, ...props }, ref) => /* @__P
28
28
  }
29
29
  ));
30
30
  DialogOverlay.displayName = "DialogOverlay";
31
- const DialogContent = React.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
32
- /* @__PURE__ */ jsx(DialogOverlay, {}),
33
- /* @__PURE__ */ jsxs(
34
- Dialog$1.Popup,
35
- {
36
- ref,
37
- "data-slot": "dialog-content",
38
- className: cn(
39
- "dialog-content-anim",
40
- "fixed left-[50%] top-[50%] z-50 grid translate-x-[-50%] translate-y-[-50%]",
41
- "w-full max-w-[calc(100%-2rem)] sm:max-w-lg",
42
- "rounded-xl border border-border1/40 bg-surface2/96 backdrop-blur-md shadow-dialog",
43
- "focus-visible:outline-hidden",
44
- className
45
- ),
46
- ...props,
47
- children: [
48
- children,
49
- /* @__PURE__ */ jsx(
50
- Dialog$1.Close,
51
- {
52
- render: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", className: "absolute top-3 right-3", "aria-label": "Close", children: /* @__PURE__ */ jsx(X, {}) })
53
- }
54
- )
55
- ]
56
- }
57
- )
58
- ] }));
31
+ const DialogContent = React.forwardRef(
32
+ ({ className, children, showOverlay = true, overlayClassName, ...props }, ref) => /* @__PURE__ */ jsxs(DialogPortal, { children: [
33
+ showOverlay && /* @__PURE__ */ jsx(DialogOverlay, { className: overlayClassName }),
34
+ /* @__PURE__ */ jsxs(
35
+ Dialog$1.Popup,
36
+ {
37
+ ref,
38
+ "data-slot": "dialog-content",
39
+ className: cn(
40
+ "dialog-content-anim",
41
+ "fixed left-[50%] top-[50%] z-50 grid translate-x-[-50%] translate-y-[-50%]",
42
+ "w-full max-w-[calc(100%-2rem)] sm:max-w-lg",
43
+ "rounded-xl border border-border1/40 bg-surface2/96 backdrop-blur-md shadow-dialog",
44
+ "focus-visible:outline-hidden",
45
+ className
46
+ ),
47
+ ...props,
48
+ children: [
49
+ children,
50
+ /* @__PURE__ */ jsx(
51
+ Dialog$1.Close,
52
+ {
53
+ render: /* @__PURE__ */ jsx(Button, { variant: "ghost", size: "sm", className: "absolute top-3 right-3", "aria-label": "Close", children: /* @__PURE__ */ jsx(X, {}) })
54
+ }
55
+ )
56
+ ]
57
+ }
58
+ )
59
+ ] })
60
+ );
59
61
  DialogContent.displayName = "DialogContent";
60
62
  const DialogHeader = ({ className, ...props }) => /* @__PURE__ */ jsx("div", { className: cn("flex flex-col gap-0.5 px-4 py-3 text-left", className), ...props });
61
63
  DialogHeader.displayName = "DialogHeader";
@@ -71,4 +73,4 @@ const DialogDescription = React.forwardRef(
71
73
  DialogDescription.displayName = "DialogDescription";
72
74
 
73
75
  export { Dialog as D, DialogBody as a, DialogClose as b, DialogContent as c, DialogDescription as d, DialogFooter as e, DialogHeader as f, DialogOverlay as g, DialogPortal as h, DialogTitle as i, DialogTrigger as j };
74
- //# sourceMappingURL=dialog-CSSfcjSX.js.map
76
+ //# sourceMappingURL=dialog-DTLHod4X.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dialog-DTLHod4X.js","sources":["../src/ds/components/Dialog/dialog.tsx"],"sourcesContent":["import { Dialog as DialogPrimitive } from '@base-ui/react/dialog';\nimport { X } from 'lucide-react';\nimport * as React from 'react';\n\nimport { Button } from '@/ds/components/Button';\nimport { asChildRenderProps } from '@/lib/as-child';\nimport { cn } from '@/lib/utils';\n\nimport './dialog.css';\n\nconst Dialog = DialogPrimitive.Root;\n\ntype DialogTriggerProps = DialogPrimitive.Trigger.Props & {\n /** @deprecated Use Base UI's `render` prop instead, e.g. `render={<Button />}`. */\n asChild?: boolean;\n};\n\nconst DialogTrigger = React.forwardRef<HTMLButtonElement, DialogTriggerProps>(\n ({ asChild, children, ...props }, ref) => {\n return (\n <DialogPrimitive.Trigger ref={ref} {...asChildRenderProps(asChild, children)} {...props}>\n {asChild ? undefined : children}\n </DialogPrimitive.Trigger>\n );\n },\n);\nDialogTrigger.displayName = 'DialogTrigger';\n\nconst DialogPortal = DialogPrimitive.Portal;\n\ntype DialogCloseProps = DialogPrimitive.Close.Props & {\n /** @deprecated Use Base UI's `render` prop instead, e.g. `render={<Button />}`. */\n asChild?: boolean;\n};\n\nconst DialogClose = React.forwardRef<HTMLButtonElement, DialogCloseProps>(({ asChild, children, ...props }, ref) => {\n return (\n <DialogPrimitive.Close ref={ref} {...asChildRenderProps(asChild, children)} {...props}>\n {asChild ? undefined : children}\n </DialogPrimitive.Close>\n );\n});\nDialogClose.displayName = 'DialogClose';\n\ntype DialogOverlayProps = Omit<DialogPrimitive.Backdrop.Props, 'className'> & {\n className?: string;\n};\n\nconst DialogOverlay = React.forwardRef<HTMLDivElement, DialogOverlayProps>(({ className, ...props }, ref) => (\n <DialogPrimitive.Backdrop\n ref={ref}\n className={cn('dialog-overlay-anim fixed inset-0 z-50 bg-overlay backdrop-blur-xs', className)}\n {...props}\n />\n));\nDialogOverlay.displayName = 'DialogOverlay';\n\ntype DialogContentProps = Omit<DialogPrimitive.Popup.Props, 'className'> & {\n className?: string;\n showOverlay?: boolean;\n overlayClassName?: string;\n};\n\nconst DialogContent = React.forwardRef<HTMLDivElement, DialogContentProps>(\n ({ className, children, showOverlay = true, overlayClassName, ...props }, ref) => (\n <DialogPortal>\n {showOverlay && <DialogOverlay className={overlayClassName} />}\n <DialogPrimitive.Popup\n ref={ref}\n data-slot=\"dialog-content\"\n className={cn(\n 'dialog-content-anim',\n 'fixed left-[50%] top-[50%] z-50 grid translate-x-[-50%] translate-y-[-50%]',\n 'w-full max-w-[calc(100%-2rem)] sm:max-w-lg',\n 'rounded-xl border border-border1/40 bg-surface2/96 backdrop-blur-md shadow-dialog',\n 'focus-visible:outline-hidden',\n className,\n )}\n {...props}\n >\n {children}\n <DialogPrimitive.Close\n render={\n <Button variant=\"ghost\" size=\"sm\" className=\"absolute top-3 right-3\" aria-label=\"Close\">\n <X />\n </Button>\n }\n />\n </DialogPrimitive.Popup>\n </DialogPortal>\n ),\n);\nDialogContent.displayName = 'DialogContent';\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col gap-0.5 px-4 py-3 text-left', className)} {...props} />\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('flex flex-col-reverse gap-1.5 px-4 py-2.5 sm:flex-row sm:justify-end', className)} {...props} />\n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogBody = ({ className, ...props }: React.HTMLAttributes<HTMLDivElement>) => (\n <div className={cn('overflow-y-auto px-4 py-3.5 max-h-[50vh]', className)} {...props} />\n);\nDialogBody.displayName = 'DialogBody';\n\ntype DialogTitleProps = Omit<DialogPrimitive.Title.Props, 'className'> & {\n className?: string;\n};\n\nconst DialogTitle = React.forwardRef<HTMLHeadingElement, DialogTitleProps>(({ className, ...props }, ref) => (\n <DialogPrimitive.Title ref={ref} className={cn('text-ui-md font-medium', className)} {...props} />\n));\nDialogTitle.displayName = 'DialogTitle';\n\ntype DialogDescriptionProps = Omit<DialogPrimitive.Description.Props, 'className'> & {\n className?: string;\n};\n\nconst DialogDescription = React.forwardRef<HTMLParagraphElement, DialogDescriptionProps>(\n ({ className, ...props }, ref) => (\n <DialogPrimitive.Description ref={ref} className={cn('sr-only', className)} {...props} />\n ),\n);\nDialogDescription.displayName = 'DialogDescription';\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogBody,\n DialogTitle,\n DialogDescription,\n};\n"],"names":["DialogPrimitive"],"mappings":";;;;;;;;;AAUA,MAAM,SAASA,QAAA,CAAgB;AAO/B,MAAM,gBAAgB,KAAA,CAAM,UAAA;AAAA,EAC1B,CAAC,EAAE,OAAA,EAAS,UAAU,GAAG,KAAA,IAAS,GAAA,KAAQ;AACxC,IAAA,uBACE,GAAA,CAACA,QAAA,CAAgB,OAAA,EAAhB,EAAwB,KAAW,GAAG,kBAAA,CAAmB,OAAA,EAAS,QAAQ,CAAA,EAAI,GAAG,KAAA,EAC/E,QAAA,EAAA,OAAA,GAAU,SAAY,QAAA,EACzB,CAAA;AAAA,EAEJ;AACF;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,MAAM,eAAeA,QAAA,CAAgB;AAOrC,MAAM,WAAA,GAAc,KAAA,CAAM,UAAA,CAAgD,CAAC,EAAE,SAAS,QAAA,EAAU,GAAG,KAAA,EAAM,EAAG,GAAA,KAAQ;AAClH,EAAA,uBACE,GAAA,CAACA,QAAA,CAAgB,KAAA,EAAhB,EAAsB,KAAW,GAAG,kBAAA,CAAmB,OAAA,EAAS,QAAQ,CAAA,EAAI,GAAG,KAAA,EAC7E,QAAA,EAAA,OAAA,GAAU,SAAY,QAAA,EACzB,CAAA;AAEJ,CAAC;AACD,WAAA,CAAY,WAAA,GAAc,aAAA;AAM1B,MAAM,aAAA,GAAgB,MAAM,UAAA,CAA+C,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACnG,GAAA;AAAA,EAACA,QAAA,CAAgB,QAAA;AAAA,EAAhB;AAAA,IACC,GAAA;AAAA,IACA,SAAA,EAAW,EAAA,CAAG,oEAAA,EAAsE,SAAS,CAAA;AAAA,IAC5F,GAAG;AAAA;AACN,CACD;AACD,aAAA,CAAc,WAAA,GAAc,eAAA;AAQ5B,MAAM,gBAAgB,KAAA,CAAM,UAAA;AAAA,EAC1B,CAAC,EAAE,SAAA,EAAW,QAAA,EAAU,WAAA,GAAc,IAAA,EAAM,gBAAA,EAAkB,GAAG,KAAA,EAAM,EAAG,GAAA,qBACxE,IAAA,CAAC,YAAA,EAAA,EACE,QAAA,EAAA;AAAA,IAAA,WAAA,oBAAe,GAAA,CAAC,aAAA,EAAA,EAAc,SAAA,EAAW,gBAAA,EAAkB,CAAA;AAAA,oBAC5D,IAAA;AAAA,MAACA,QAAA,CAAgB,KAAA;AAAA,MAAhB;AAAA,QACC,GAAA;AAAA,QACA,WAAA,EAAU,gBAAA;AAAA,QACV,SAAA,EAAW,EAAA;AAAA,UACT,qBAAA;AAAA,UACA,4EAAA;AAAA,UACA,4CAAA;AAAA,UACA,mFAAA;AAAA,UACA,8BAAA;AAAA,UACA;AAAA,SACF;AAAA,QACC,GAAG,KAAA;AAAA,QAEH,QAAA,EAAA;AAAA,UAAA,QAAA;AAAA,0BACD,GAAA;AAAA,YAACA,QAAA,CAAgB,KAAA;AAAA,YAAhB;AAAA,cACC,MAAA,kBACE,GAAA,CAAC,MAAA,EAAA,EAAO,OAAA,EAAQ,OAAA,EAAQ,IAAA,EAAK,IAAA,EAAK,SAAA,EAAU,wBAAA,EAAyB,YAAA,EAAW,OAAA,EAC9E,QAAA,kBAAA,GAAA,CAAC,KAAE,CAAA,EACL;AAAA;AAAA;AAEJ;AAAA;AAAA;AACF,GAAA,EACF;AAEJ;AACA,aAAA,CAAc,WAAA,GAAc,eAAA;AAE5B,MAAM,YAAA,GAAe,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,qBAC1C,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,2CAAA,EAA6C,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEzF,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,MAAM,YAAA,GAAe,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,qBAC1C,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,sEAAA,EAAwE,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAEpH,YAAA,CAAa,WAAA,GAAc,cAAA;AAE3B,MAAM,UAAA,GAAa,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,qBACxC,GAAA,CAAC,KAAA,EAAA,EAAI,WAAW,EAAA,CAAG,0CAAA,EAA4C,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAExF,UAAA,CAAW,WAAA,GAAc,YAAA;AAMzB,MAAM,WAAA,GAAc,MAAM,UAAA,CAAiD,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,GAAA,qBACnG,GAAA,CAACA,SAAgB,KAAA,EAAhB,EAAsB,KAAU,SAAA,EAAW,EAAA,CAAG,0BAA0B,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO,CACjG;AACD,WAAA,CAAY,WAAA,GAAc,aAAA;AAM1B,MAAM,oBAAoB,KAAA,CAAM,UAAA;AAAA,EAC9B,CAAC,EAAE,SAAA,EAAW,GAAG,KAAA,EAAM,EAAG,wBACxB,GAAA,CAACA,QAAA,CAAgB,WAAA,EAAhB,EAA4B,KAAU,SAAA,EAAW,EAAA,CAAG,WAAW,SAAS,CAAA,EAAI,GAAG,KAAA,EAAO;AAE3F;AACA,iBAAA,CAAkB,WAAA,GAAc,mBAAA;;;;"}
package/dist/dialog.css CHANGED
@@ -51,12 +51,12 @@
51
51
 
52
52
  .dialog-overlay-anim[data-state='open'],
53
53
  .dialog-overlay-anim[data-open] {
54
- animation: dialog-overlay-in 320ms cubic-bezier(0.22, 1, 0.36, 1);
54
+ animation: dialog-overlay-in 320ms cubic-bezier(0.22, 1, 0.36, 1) both;
55
55
  }
56
56
 
57
57
  .dialog-overlay-anim[data-state='closed'],
58
58
  .dialog-overlay-anim[data-closed] {
59
- animation: dialog-overlay-out 240ms cubic-bezier(0.32, 0, 0.67, 0);
59
+ animation: dialog-overlay-out 240ms cubic-bezier(0.32, 0, 0.67, 0) both;
60
60
  }
61
61
 
62
62
  .dialog-content-anim[data-state='open'],
@@ -0,0 +1,110 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const React = require('react');
6
+
7
+ const SCROLL_END_THRESHOLD = 8;
8
+ const useAutoscroll = (ref, { enabled = true }) => {
9
+ const shouldScrollRef = React.useRef(enabled);
10
+ const scrollFrameRef = React.useRef(null);
11
+ const userScrollIntentRef = React.useRef(false);
12
+ const userScrollIntentTimeoutRef = React.useRef(null);
13
+ React.useEffect(() => {
14
+ if (!enabled) return;
15
+ if (!ref?.current) return;
16
+ const area = ref.current;
17
+ const scrollToEnd = () => {
18
+ if (!shouldScrollRef.current) return;
19
+ if (scrollFrameRef.current !== null) {
20
+ cancelAnimationFrame(scrollFrameRef.current);
21
+ }
22
+ scrollFrameRef.current = requestAnimationFrame(() => {
23
+ if (shouldScrollRef.current) {
24
+ area.scrollTop = area.scrollHeight;
25
+ }
26
+ scrollFrameRef.current = null;
27
+ });
28
+ };
29
+ const mutationObserver = new MutationObserver(scrollToEnd);
30
+ mutationObserver.observe(area, {
31
+ childList: true,
32
+ // observe direct children changes
33
+ subtree: true,
34
+ // observe all descendants
35
+ characterData: true
36
+ // observe text content changes
37
+ });
38
+ const resizeObserver = new ResizeObserver(scrollToEnd);
39
+ resizeObserver.observe(area);
40
+ const cancelPendingScroll = () => {
41
+ if (scrollFrameRef.current !== null) {
42
+ cancelAnimationFrame(scrollFrameRef.current);
43
+ scrollFrameRef.current = null;
44
+ }
45
+ };
46
+ const stopFollowing = () => {
47
+ shouldScrollRef.current = false;
48
+ cancelPendingScroll();
49
+ };
50
+ const registerUserScrollIntent = () => {
51
+ userScrollIntentRef.current = true;
52
+ if (userScrollIntentTimeoutRef.current !== null) {
53
+ window.clearTimeout(userScrollIntentTimeoutRef.current);
54
+ }
55
+ userScrollIntentTimeoutRef.current = window.setTimeout(() => {
56
+ userScrollIntentRef.current = false;
57
+ userScrollIntentTimeoutRef.current = null;
58
+ }, 250);
59
+ };
60
+ const handleWheel = (event) => {
61
+ registerUserScrollIntent();
62
+ if (event.deltaY < 0) {
63
+ stopFollowing();
64
+ }
65
+ };
66
+ const handleKeyDown = (event) => {
67
+ registerUserScrollIntent();
68
+ if (["ArrowUp", "PageUp", "Home"].includes(event.key)) {
69
+ stopFollowing();
70
+ }
71
+ };
72
+ const handleScroll = (e) => {
73
+ const scrollElement = e.target;
74
+ const currentPosition = scrollElement.scrollTop + scrollElement.clientHeight;
75
+ const totalHeight = scrollElement.scrollHeight;
76
+ const isAtEnd = currentPosition >= totalHeight - SCROLL_END_THRESHOLD;
77
+ if (isAtEnd) {
78
+ shouldScrollRef.current = true;
79
+ return;
80
+ }
81
+ if (userScrollIntentRef.current) {
82
+ shouldScrollRef.current = false;
83
+ cancelPendingScroll();
84
+ }
85
+ };
86
+ area.addEventListener("wheel", handleWheel, { passive: true });
87
+ area.addEventListener("touchmove", registerUserScrollIntent, { passive: true });
88
+ area.addEventListener("pointerdown", registerUserScrollIntent);
89
+ area.addEventListener("keydown", handleKeyDown);
90
+ area.addEventListener("scroll", handleScroll);
91
+ scrollToEnd();
92
+ return () => {
93
+ area.removeEventListener("wheel", handleWheel);
94
+ area.removeEventListener("touchmove", registerUserScrollIntent);
95
+ area.removeEventListener("pointerdown", registerUserScrollIntent);
96
+ area.removeEventListener("keydown", handleKeyDown);
97
+ area.removeEventListener("scroll", handleScroll);
98
+ mutationObserver.disconnect();
99
+ resizeObserver.disconnect();
100
+ cancelPendingScroll();
101
+ if (userScrollIntentTimeoutRef.current !== null) {
102
+ window.clearTimeout(userScrollIntentTimeoutRef.current);
103
+ userScrollIntentTimeoutRef.current = null;
104
+ }
105
+ };
106
+ }, [enabled, ref]);
107
+ };
108
+
109
+ exports.useAutoscroll = useAutoscroll;
110
+ //# sourceMappingURL=use-autoscroll.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-autoscroll.cjs.js","sources":["../../src/hooks/use-autoscroll.tsx"],"sourcesContent":["import React, { useRef } from 'react';\n\nexport interface UseAutoscrollOptions {\n enabled?: boolean;\n}\n\nconst SCROLL_END_THRESHOLD = 8;\n\nexport const useAutoscroll = (ref: React.RefObject<HTMLElement | null>, { enabled = true }: UseAutoscrollOptions) => {\n const shouldScrollRef = useRef(enabled);\n const scrollFrameRef = useRef<number | null>(null);\n const userScrollIntentRef = useRef(false);\n const userScrollIntentTimeoutRef = useRef<number | null>(null);\n\n React.useEffect(() => {\n if (!enabled) return;\n if (!ref?.current) return;\n\n const area = ref.current;\n\n const scrollToEnd = () => {\n if (!shouldScrollRef.current) return;\n\n if (scrollFrameRef.current !== null) {\n cancelAnimationFrame(scrollFrameRef.current);\n }\n\n scrollFrameRef.current = requestAnimationFrame(() => {\n if (shouldScrollRef.current) {\n area.scrollTop = area.scrollHeight;\n }\n scrollFrameRef.current = null;\n });\n };\n\n const mutationObserver = new MutationObserver(scrollToEnd);\n\n mutationObserver.observe(area, {\n childList: true, // observe direct children changes\n subtree: true, // observe all descendants\n characterData: true, // observe text content changes\n });\n\n const resizeObserver = new ResizeObserver(scrollToEnd);\n resizeObserver.observe(area);\n\n const cancelPendingScroll = () => {\n if (scrollFrameRef.current !== null) {\n cancelAnimationFrame(scrollFrameRef.current);\n scrollFrameRef.current = null;\n }\n };\n\n const stopFollowing = () => {\n shouldScrollRef.current = false;\n cancelPendingScroll();\n };\n\n const registerUserScrollIntent = () => {\n userScrollIntentRef.current = true;\n\n if (userScrollIntentTimeoutRef.current !== null) {\n window.clearTimeout(userScrollIntentTimeoutRef.current);\n }\n\n userScrollIntentTimeoutRef.current = window.setTimeout(() => {\n userScrollIntentRef.current = false;\n userScrollIntentTimeoutRef.current = null;\n }, 250);\n };\n\n const handleWheel = (event: WheelEvent) => {\n registerUserScrollIntent();\n\n if (event.deltaY < 0) {\n stopFollowing();\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n registerUserScrollIntent();\n\n if (['ArrowUp', 'PageUp', 'Home'].includes(event.key)) {\n stopFollowing();\n }\n };\n\n const handleScroll = (e: Event) => {\n const scrollElement = e.target as HTMLElement;\n const currentPosition = scrollElement.scrollTop + scrollElement.clientHeight;\n const totalHeight = scrollElement.scrollHeight;\n const isAtEnd = currentPosition >= totalHeight - SCROLL_END_THRESHOLD;\n\n if (isAtEnd) {\n shouldScrollRef.current = true;\n return;\n }\n\n if (userScrollIntentRef.current) {\n shouldScrollRef.current = false;\n cancelPendingScroll();\n }\n };\n\n area.addEventListener('wheel', handleWheel, { passive: true });\n area.addEventListener('touchmove', registerUserScrollIntent, { passive: true });\n area.addEventListener('pointerdown', registerUserScrollIntent);\n area.addEventListener('keydown', handleKeyDown);\n area.addEventListener('scroll', handleScroll);\n scrollToEnd();\n\n return () => {\n area.removeEventListener('wheel', handleWheel);\n area.removeEventListener('touchmove', registerUserScrollIntent);\n area.removeEventListener('pointerdown', registerUserScrollIntent);\n area.removeEventListener('keydown', handleKeyDown);\n area.removeEventListener('scroll', handleScroll);\n mutationObserver.disconnect();\n resizeObserver.disconnect();\n cancelPendingScroll();\n\n if (userScrollIntentTimeoutRef.current !== null) {\n window.clearTimeout(userScrollIntentTimeoutRef.current);\n userScrollIntentTimeoutRef.current = null;\n }\n };\n }, [enabled, ref]);\n};\n"],"names":["useRef"],"mappings":";;;;;;AAMA,MAAM,oBAAA,GAAuB,CAAA;AAEtB,MAAM,gBAAgB,CAAC,GAAA,EAA0C,EAAE,OAAA,GAAU,MAAK,KAA4B;AACnH,EAAA,MAAM,eAAA,GAAkBA,aAAO,OAAO,CAAA;AACtC,EAAA,MAAM,cAAA,GAAiBA,aAAsB,IAAI,CAAA;AACjD,EAAA,MAAM,mBAAA,GAAsBA,aAAO,KAAK,CAAA;AACxC,EAAA,MAAM,0BAAA,GAA6BA,aAAsB,IAAI,CAAA;AAE7D,EAAA,KAAA,CAAM,UAAU,MAAM;AACpB,IAAA,IAAI,CAAC,OAAA,EAAS;AACd,IAAA,IAAI,CAAC,KAAK,OAAA,EAAS;AAEnB,IAAA,MAAM,OAAO,GAAA,CAAI,OAAA;AAEjB,IAAA,MAAM,cAAc,MAAM;AACxB,MAAA,IAAI,CAAC,gBAAgB,OAAA,EAAS;AAE9B,MAAA,IAAI,cAAA,CAAe,YAAY,IAAA,EAAM;AACnC,QAAA,oBAAA,CAAqB,eAAe,OAAO,CAAA;AAAA,MAC7C;AAEA,MAAA,cAAA,CAAe,OAAA,GAAU,sBAAsB,MAAM;AACnD,QAAA,IAAI,gBAAgB,OAAA,EAAS;AAC3B,UAAA,IAAA,CAAK,YAAY,IAAA,CAAK,YAAA;AAAA,QACxB;AACA,QAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAAA,MAC3B,CAAC,CAAA;AAAA,IACH,CAAA;AAEA,IAAA,MAAM,gBAAA,GAAmB,IAAI,gBAAA,CAAiB,WAAW,CAAA;AAEzD,IAAA,gBAAA,CAAiB,QAAQ,IAAA,EAAM;AAAA,MAC7B,SAAA,EAAW,IAAA;AAAA;AAAA,MACX,OAAA,EAAS,IAAA;AAAA;AAAA,MACT,aAAA,EAAe;AAAA;AAAA,KAChB,CAAA;AAED,IAAA,MAAM,cAAA,GAAiB,IAAI,cAAA,CAAe,WAAW,CAAA;AACrD,IAAA,cAAA,CAAe,QAAQ,IAAI,CAAA;AAE3B,IAAA,MAAM,sBAAsB,MAAM;AAChC,MAAA,IAAI,cAAA,CAAe,YAAY,IAAA,EAAM;AACnC,QAAA,oBAAA,CAAqB,eAAe,OAAO,CAAA;AAC3C,QAAA,cAAA,CAAe,OAAA,GAAU,IAAA;AAAA,MAC3B;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,gBAAgB,MAAM;AAC1B,MAAA,eAAA,CAAgB,OAAA,GAAU,KAAA;AAC1B,MAAA,mBAAA,EAAoB;AAAA,IACtB,CAAA;AAEA,IAAA,MAAM,2BAA2B,MAAM;AACrC,MAAA,mBAAA,CAAoB,OAAA,GAAU,IAAA;AAE9B,MAAA,IAAI,0BAAA,CAA2B,YAAY,IAAA,EAAM;AAC/C,QAAA,MAAA,CAAO,YAAA,CAAa,2BAA2B,OAAO,CAAA;AAAA,MACxD;AAEA,MAAA,0BAAA,CAA2B,OAAA,GAAU,MAAA,CAAO,UAAA,CAAW,MAAM;AAC3D,QAAA,mBAAA,CAAoB,OAAA,GAAU,KAAA;AAC9B,QAAA,0BAAA,CAA2B,OAAA,GAAU,IAAA;AAAA,MACvC,GAAG,GAAG,CAAA;AAAA,IACR,CAAA;AAEA,IAAA,MAAM,WAAA,GAAc,CAAC,KAAA,KAAsB;AACzC,MAAA,wBAAA,EAAyB;AAEzB,MAAA,IAAI,KAAA,CAAM,SAAS,CAAA,EAAG;AACpB,QAAA,aAAA,EAAc;AAAA,MAChB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,aAAA,GAAgB,CAAC,KAAA,KAAyB;AAC9C,MAAA,wBAAA,EAAyB;AAEzB,MAAA,IAAI,CAAC,WAAW,QAAA,EAAU,MAAM,EAAE,QAAA,CAAS,KAAA,CAAM,GAAG,CAAA,EAAG;AACrD,QAAA,aAAA,EAAc;AAAA,MAChB;AAAA,IACF,CAAA;AAEA,IAAA,MAAM,YAAA,GAAe,CAAC,CAAA,KAAa;AACjC,MAAA,MAAM,gBAAgB,CAAA,CAAE,MAAA;AACxB,MAAA,MAAM,eAAA,GAAkB,aAAA,CAAc,SAAA,GAAY,aAAA,CAAc,YAAA;AAChE,MAAA,MAAM,cAAc,aAAA,CAAc,YAAA;AAClC,MAAA,MAAM,OAAA,GAAU,mBAAmB,WAAA,GAAc,oBAAA;AAEjD,MAAA,IAAI,OAAA,EAAS;AACX,QAAA,eAAA,CAAgB,OAAA,GAAU,IAAA;AAC1B,QAAA;AAAA,MACF;AAEA,MAAA,IAAI,oBAAoB,OAAA,EAAS;AAC/B,QAAA,eAAA,CAAgB,OAAA,GAAU,KAAA;AAC1B,QAAA,mBAAA,EAAoB;AAAA,MACtB;AAAA,IACF,CAAA;AAEA,IAAA,IAAA,CAAK,iBAAiB,OAAA,EAAS,WAAA,EAAa,EAAE,OAAA,EAAS,MAAM,CAAA;AAC7D,IAAA,IAAA,CAAK,iBAAiB,WAAA,EAAa,wBAAA,EAA0B,EAAE,OAAA,EAAS,MAAM,CAAA;AAC9E,IAAA,IAAA,CAAK,gBAAA,CAAiB,eAAe,wBAAwB,CAAA;AAC7D,IAAA,IAAA,CAAK,gBAAA,CAAiB,WAAW,aAAa,CAAA;AAC9C,IAAA,IAAA,CAAK,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAC5C,IAAA,WAAA,EAAY;AAEZ,IAAA,OAAO,MAAM;AACX,MAAA,IAAA,CAAK,mBAAA,CAAoB,SAAS,WAAW,CAAA;AAC7C,MAAA,IAAA,CAAK,mBAAA,CAAoB,aAAa,wBAAwB,CAAA;AAC9D,MAAA,IAAA,CAAK,mBAAA,CAAoB,eAAe,wBAAwB,CAAA;AAChE,MAAA,IAAA,CAAK,mBAAA,CAAoB,WAAW,aAAa,CAAA;AACjD,MAAA,IAAA,CAAK,mBAAA,CAAoB,UAAU,YAAY,CAAA;AAC/C,MAAA,gBAAA,CAAiB,UAAA,EAAW;AAC5B,MAAA,cAAA,CAAe,UAAA,EAAW;AAC1B,MAAA,mBAAA,EAAoB;AAEpB,MAAA,IAAI,0BAAA,CAA2B,YAAY,IAAA,EAAM;AAC/C,QAAA,MAAA,CAAO,YAAA,CAAa,2BAA2B,OAAO,CAAA;AACtD,QAAA,0BAAA,CAA2B,OAAA,GAAU,IAAA;AAAA,MACvC;AAAA,IACF,CAAA;AAAA,EACF,CAAA,EAAG,CAAC,OAAA,EAAS,GAAG,CAAC,CAAA;AACnB;;;;"}
@@ -0,0 +1,2 @@
1
+ export * from '../src/hooks/use-autoscroll'
2
+ export {}
@@ -0,0 +1,106 @@
1
+ import React__default, { useRef } from 'react';
2
+
3
+ const SCROLL_END_THRESHOLD = 8;
4
+ const useAutoscroll = (ref, { enabled = true }) => {
5
+ const shouldScrollRef = useRef(enabled);
6
+ const scrollFrameRef = useRef(null);
7
+ const userScrollIntentRef = useRef(false);
8
+ const userScrollIntentTimeoutRef = useRef(null);
9
+ React__default.useEffect(() => {
10
+ if (!enabled) return;
11
+ if (!ref?.current) return;
12
+ const area = ref.current;
13
+ const scrollToEnd = () => {
14
+ if (!shouldScrollRef.current) return;
15
+ if (scrollFrameRef.current !== null) {
16
+ cancelAnimationFrame(scrollFrameRef.current);
17
+ }
18
+ scrollFrameRef.current = requestAnimationFrame(() => {
19
+ if (shouldScrollRef.current) {
20
+ area.scrollTop = area.scrollHeight;
21
+ }
22
+ scrollFrameRef.current = null;
23
+ });
24
+ };
25
+ const mutationObserver = new MutationObserver(scrollToEnd);
26
+ mutationObserver.observe(area, {
27
+ childList: true,
28
+ // observe direct children changes
29
+ subtree: true,
30
+ // observe all descendants
31
+ characterData: true
32
+ // observe text content changes
33
+ });
34
+ const resizeObserver = new ResizeObserver(scrollToEnd);
35
+ resizeObserver.observe(area);
36
+ const cancelPendingScroll = () => {
37
+ if (scrollFrameRef.current !== null) {
38
+ cancelAnimationFrame(scrollFrameRef.current);
39
+ scrollFrameRef.current = null;
40
+ }
41
+ };
42
+ const stopFollowing = () => {
43
+ shouldScrollRef.current = false;
44
+ cancelPendingScroll();
45
+ };
46
+ const registerUserScrollIntent = () => {
47
+ userScrollIntentRef.current = true;
48
+ if (userScrollIntentTimeoutRef.current !== null) {
49
+ window.clearTimeout(userScrollIntentTimeoutRef.current);
50
+ }
51
+ userScrollIntentTimeoutRef.current = window.setTimeout(() => {
52
+ userScrollIntentRef.current = false;
53
+ userScrollIntentTimeoutRef.current = null;
54
+ }, 250);
55
+ };
56
+ const handleWheel = (event) => {
57
+ registerUserScrollIntent();
58
+ if (event.deltaY < 0) {
59
+ stopFollowing();
60
+ }
61
+ };
62
+ const handleKeyDown = (event) => {
63
+ registerUserScrollIntent();
64
+ if (["ArrowUp", "PageUp", "Home"].includes(event.key)) {
65
+ stopFollowing();
66
+ }
67
+ };
68
+ const handleScroll = (e) => {
69
+ const scrollElement = e.target;
70
+ const currentPosition = scrollElement.scrollTop + scrollElement.clientHeight;
71
+ const totalHeight = scrollElement.scrollHeight;
72
+ const isAtEnd = currentPosition >= totalHeight - SCROLL_END_THRESHOLD;
73
+ if (isAtEnd) {
74
+ shouldScrollRef.current = true;
75
+ return;
76
+ }
77
+ if (userScrollIntentRef.current) {
78
+ shouldScrollRef.current = false;
79
+ cancelPendingScroll();
80
+ }
81
+ };
82
+ area.addEventListener("wheel", handleWheel, { passive: true });
83
+ area.addEventListener("touchmove", registerUserScrollIntent, { passive: true });
84
+ area.addEventListener("pointerdown", registerUserScrollIntent);
85
+ area.addEventListener("keydown", handleKeyDown);
86
+ area.addEventListener("scroll", handleScroll);
87
+ scrollToEnd();
88
+ return () => {
89
+ area.removeEventListener("wheel", handleWheel);
90
+ area.removeEventListener("touchmove", registerUserScrollIntent);
91
+ area.removeEventListener("pointerdown", registerUserScrollIntent);
92
+ area.removeEventListener("keydown", handleKeyDown);
93
+ area.removeEventListener("scroll", handleScroll);
94
+ mutationObserver.disconnect();
95
+ resizeObserver.disconnect();
96
+ cancelPendingScroll();
97
+ if (userScrollIntentTimeoutRef.current !== null) {
98
+ window.clearTimeout(userScrollIntentTimeoutRef.current);
99
+ userScrollIntentTimeoutRef.current = null;
100
+ }
101
+ };
102
+ }, [enabled, ref]);
103
+ };
104
+
105
+ export { useAutoscroll };
106
+ //# sourceMappingURL=use-autoscroll.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-autoscroll.es.js","sources":["../../src/hooks/use-autoscroll.tsx"],"sourcesContent":["import React, { useRef } from 'react';\n\nexport interface UseAutoscrollOptions {\n enabled?: boolean;\n}\n\nconst SCROLL_END_THRESHOLD = 8;\n\nexport const useAutoscroll = (ref: React.RefObject<HTMLElement | null>, { enabled = true }: UseAutoscrollOptions) => {\n const shouldScrollRef = useRef(enabled);\n const scrollFrameRef = useRef<number | null>(null);\n const userScrollIntentRef = useRef(false);\n const userScrollIntentTimeoutRef = useRef<number | null>(null);\n\n React.useEffect(() => {\n if (!enabled) return;\n if (!ref?.current) return;\n\n const area = ref.current;\n\n const scrollToEnd = () => {\n if (!shouldScrollRef.current) return;\n\n if (scrollFrameRef.current !== null) {\n cancelAnimationFrame(scrollFrameRef.current);\n }\n\n scrollFrameRef.current = requestAnimationFrame(() => {\n if (shouldScrollRef.current) {\n area.scrollTop = area.scrollHeight;\n }\n scrollFrameRef.current = null;\n });\n };\n\n const mutationObserver = new MutationObserver(scrollToEnd);\n\n mutationObserver.observe(area, {\n childList: true, // observe direct children changes\n subtree: true, // observe all descendants\n characterData: true, // observe text content changes\n });\n\n const resizeObserver = new ResizeObserver(scrollToEnd);\n resizeObserver.observe(area);\n\n const cancelPendingScroll = () => {\n if (scrollFrameRef.current !== null) {\n cancelAnimationFrame(scrollFrameRef.current);\n scrollFrameRef.current = null;\n }\n };\n\n const stopFollowing = () => {\n shouldScrollRef.current = false;\n cancelPendingScroll();\n };\n\n const registerUserScrollIntent = () => {\n userScrollIntentRef.current = true;\n\n if (userScrollIntentTimeoutRef.current !== null) {\n window.clearTimeout(userScrollIntentTimeoutRef.current);\n }\n\n userScrollIntentTimeoutRef.current = window.setTimeout(() => {\n userScrollIntentRef.current = false;\n userScrollIntentTimeoutRef.current = null;\n }, 250);\n };\n\n const handleWheel = (event: WheelEvent) => {\n registerUserScrollIntent();\n\n if (event.deltaY < 0) {\n stopFollowing();\n }\n };\n\n const handleKeyDown = (event: KeyboardEvent) => {\n registerUserScrollIntent();\n\n if (['ArrowUp', 'PageUp', 'Home'].includes(event.key)) {\n stopFollowing();\n }\n };\n\n const handleScroll = (e: Event) => {\n const scrollElement = e.target as HTMLElement;\n const currentPosition = scrollElement.scrollTop + scrollElement.clientHeight;\n const totalHeight = scrollElement.scrollHeight;\n const isAtEnd = currentPosition >= totalHeight - SCROLL_END_THRESHOLD;\n\n if (isAtEnd) {\n shouldScrollRef.current = true;\n return;\n }\n\n if (userScrollIntentRef.current) {\n shouldScrollRef.current = false;\n cancelPendingScroll();\n }\n };\n\n area.addEventListener('wheel', handleWheel, { passive: true });\n area.addEventListener('touchmove', registerUserScrollIntent, { passive: true });\n area.addEventListener('pointerdown', registerUserScrollIntent);\n area.addEventListener('keydown', handleKeyDown);\n area.addEventListener('scroll', handleScroll);\n scrollToEnd();\n\n return () => {\n area.removeEventListener('wheel', handleWheel);\n area.removeEventListener('touchmove', registerUserScrollIntent);\n area.removeEventListener('pointerdown', registerUserScrollIntent);\n area.removeEventListener('keydown', handleKeyDown);\n area.removeEventListener('scroll', handleScroll);\n mutationObserver.disconnect();\n resizeObserver.disconnect();\n cancelPendingScroll();\n\n if (userScrollIntentTimeoutRef.current !== null) {\n window.clearTimeout(userScrollIntentTimeoutRef.current);\n userScrollIntentTimeoutRef.current = null;\n }\n };\n }, [enabled, ref]);\n};\n"],"names":["React"],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ require('react');
6
+ const hooks_useCopyToClipboard = require('../use-copy-to-clipboard-DHaJCGet.cjs');
7
+
8
+
9
+
10
+ exports.useCopyToClipboard = hooks_useCopyToClipboard.useCopyToClipboard;
11
+ //# sourceMappingURL=use-copy-to-clipboard.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-copy-to-clipboard.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -0,0 +1,2 @@
1
+ export * from '../src/hooks/use-copy-to-clipboard'
2
+ export {}
@@ -0,0 +1,3 @@
1
+ import 'react';
2
+ export { u as useCopyToClipboard } from '../use-copy-to-clipboard-D7L_l6_x.js';
3
+ //# sourceMappingURL=use-copy-to-clipboard.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-copy-to-clipboard.es.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,22 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const React = require('react');
6
+
7
+ const useInView = () => {
8
+ const [inView, setInView] = React.useState(false);
9
+ const setRef = React.useCallback((node) => {
10
+ if (node) {
11
+ const observer = new IntersectionObserver(([entry]) => {
12
+ setInView(entry.isIntersecting);
13
+ });
14
+ observer.observe(node);
15
+ return () => observer.disconnect();
16
+ }
17
+ }, []);
18
+ return { inView, setRef };
19
+ };
20
+
21
+ exports.useInView = useInView;
22
+ //# sourceMappingURL=use-in-view.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-in-view.cjs.js","sources":["../../src/hooks/use-in-view.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\n\n/**\n * Tracks whether or not the given element is currently in view.\n * This is to replace framer-motion's `useInView` which has issues\n * tracking a ref that is set at a time other than mount.\n */\nexport const useInView = () => {\n const [inView, setInView] = useState(false);\n\n const setRef = useCallback((node: HTMLDivElement | null) => {\n if (node) {\n const observer = new IntersectionObserver(([entry]) => {\n setInView(entry.isIntersecting);\n });\n observer.observe(node);\n return () => observer.disconnect();\n }\n }, []);\n\n return { inView, setRef };\n};\n"],"names":["useState","useCallback"],"mappings":";;;;;;AAOO,MAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAIA,eAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,MAAA,GAASC,iBAAA,CAAY,CAAC,IAAA,KAAgC;AAC1D,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,WAAW,IAAI,oBAAA,CAAqB,CAAC,CAAC,KAAK,CAAA,KAAM;AACrD,QAAA,SAAA,CAAU,MAAM,cAAc,CAAA;AAAA,MAChC,CAAC,CAAA;AACD,MAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AACrB,MAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,IACnC;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAC1B;;;;"}
@@ -0,0 +1,2 @@
1
+ export * from '../src/hooks/use-in-view'
2
+ export {}
@@ -0,0 +1,18 @@
1
+ import { useState, useCallback } from 'react';
2
+
3
+ const useInView = () => {
4
+ const [inView, setInView] = useState(false);
5
+ const setRef = useCallback((node) => {
6
+ if (node) {
7
+ const observer = new IntersectionObserver(([entry]) => {
8
+ setInView(entry.isIntersecting);
9
+ });
10
+ observer.observe(node);
11
+ return () => observer.disconnect();
12
+ }
13
+ }, []);
14
+ return { inView, setRef };
15
+ };
16
+
17
+ export { useInView };
18
+ //# sourceMappingURL=use-in-view.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-in-view.es.js","sources":["../../src/hooks/use-in-view.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\n\n/**\n * Tracks whether or not the given element is currently in view.\n * This is to replace framer-motion's `useInView` which has issues\n * tracking a ref that is set at a time other than mount.\n */\nexport const useInView = () => {\n const [inView, setInView] = useState(false);\n\n const setRef = useCallback((node: HTMLDivElement | null) => {\n if (node) {\n const observer = new IntersectionObserver(([entry]) => {\n setInView(entry.isIntersecting);\n });\n observer.observe(node);\n return () => observer.disconnect();\n }\n }, []);\n\n return { inView, setRef };\n};\n"],"names":[],"mappings":";;AAOO,MAAM,YAAY,MAAM;AAC7B,EAAA,MAAM,CAAC,MAAA,EAAQ,SAAS,CAAA,GAAI,SAAS,KAAK,CAAA;AAE1C,EAAA,MAAM,MAAA,GAAS,WAAA,CAAY,CAAC,IAAA,KAAgC;AAC1D,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,WAAW,IAAI,oBAAA,CAAqB,CAAC,CAAC,KAAK,CAAA,KAAM;AACrD,QAAA,SAAA,CAAU,MAAM,cAAc,CAAA;AAAA,MAChC,CAAC,CAAA;AACD,MAAA,QAAA,CAAS,QAAQ,IAAI,CAAA;AACrB,MAAA,OAAO,MAAM,SAAS,UAAA,EAAW;AAAA,IACnC;AAAA,EACF,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO,EAAE,QAAQ,MAAA,EAAO;AAC1B;;;;"}
@@ -0,0 +1,21 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const React = require('react');
6
+
7
+ const useIsMobile = (breakpoint = 1024) => {
8
+ const query = React.useMemo(() => `(max-width: ${breakpoint - 1}px)`, [breakpoint]);
9
+ const [isMobile, setIsMobile] = React.useState(false);
10
+ React.useLayoutEffect(() => {
11
+ const mq = window.matchMedia(query);
12
+ const update = () => setIsMobile(mq.matches);
13
+ update();
14
+ mq.addEventListener("change", update);
15
+ return () => mq.removeEventListener("change", update);
16
+ }, [query]);
17
+ return isMobile;
18
+ };
19
+
20
+ exports.useIsMobile = useIsMobile;
21
+ //# sourceMappingURL=use-is-mobile.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-is-mobile.cjs.js","sources":["../../src/hooks/use-is-mobile.ts"],"sourcesContent":["import { useLayoutEffect, useMemo, useState } from 'react';\n\n// Default breakpoint 1024 matches MainSidebar's mobile breakpoint.\nexport const useIsMobile = (breakpoint: number = 1024) => {\n const query = useMemo(() => `(max-width: ${breakpoint - 1}px)`, [breakpoint]);\n const [isMobile, setIsMobile] = useState(false);\n\n useLayoutEffect(() => {\n const mq = window.matchMedia(query);\n const update = () => setIsMobile(mq.matches);\n\n update();\n mq.addEventListener('change', update);\n return () => mq.removeEventListener('change', update);\n }, [query]);\n\n return isMobile;\n};\n"],"names":["useMemo","useState","useLayoutEffect"],"mappings":";;;;;;AAGO,MAAM,WAAA,GAAc,CAAC,UAAA,GAAqB,IAAA,KAAS;AACxD,EAAA,MAAM,KAAA,GAAQA,cAAQ,MAAM,CAAA,YAAA,EAAe,aAAa,CAAC,CAAA,GAAA,CAAA,EAAO,CAAC,UAAU,CAAC,CAAA;AAC5E,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAIC,eAAS,KAAK,CAAA;AAE9C,EAAAC,qBAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AAClC,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,EAAA,CAAG,OAAO,CAAA;AAE3C,IAAA,MAAA,EAAO;AACP,IAAA,EAAA,CAAG,gBAAA,CAAiB,UAAU,MAAM,CAAA;AACpC,IAAA,OAAO,MAAM,EAAA,CAAG,mBAAA,CAAoB,QAAA,EAAU,MAAM,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,QAAA;AACT;;;;"}
@@ -0,0 +1,2 @@
1
+ export * from '../src/hooks/use-is-mobile'
2
+ export {}
@@ -0,0 +1,17 @@
1
+ import { useMemo, useState, useLayoutEffect } from 'react';
2
+
3
+ const useIsMobile = (breakpoint = 1024) => {
4
+ const query = useMemo(() => `(max-width: ${breakpoint - 1}px)`, [breakpoint]);
5
+ const [isMobile, setIsMobile] = useState(false);
6
+ useLayoutEffect(() => {
7
+ const mq = window.matchMedia(query);
8
+ const update = () => setIsMobile(mq.matches);
9
+ update();
10
+ mq.addEventListener("change", update);
11
+ return () => mq.removeEventListener("change", update);
12
+ }, [query]);
13
+ return isMobile;
14
+ };
15
+
16
+ export { useIsMobile };
17
+ //# sourceMappingURL=use-is-mobile.es.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-is-mobile.es.js","sources":["../../src/hooks/use-is-mobile.ts"],"sourcesContent":["import { useLayoutEffect, useMemo, useState } from 'react';\n\n// Default breakpoint 1024 matches MainSidebar's mobile breakpoint.\nexport const useIsMobile = (breakpoint: number = 1024) => {\n const query = useMemo(() => `(max-width: ${breakpoint - 1}px)`, [breakpoint]);\n const [isMobile, setIsMobile] = useState(false);\n\n useLayoutEffect(() => {\n const mq = window.matchMedia(query);\n const update = () => setIsMobile(mq.matches);\n\n update();\n mq.addEventListener('change', update);\n return () => mq.removeEventListener('change', update);\n }, [query]);\n\n return isMobile;\n};\n"],"names":[],"mappings":";;AAGO,MAAM,WAAA,GAAc,CAAC,UAAA,GAAqB,IAAA,KAAS;AACxD,EAAA,MAAM,KAAA,GAAQ,QAAQ,MAAM,CAAA,YAAA,EAAe,aAAa,CAAC,CAAA,GAAA,CAAA,EAAO,CAAC,UAAU,CAAC,CAAA;AAC5E,EAAA,MAAM,CAAC,QAAA,EAAU,WAAW,CAAA,GAAI,SAAS,KAAK,CAAA;AAE9C,EAAA,eAAA,CAAgB,MAAM;AACpB,IAAA,MAAM,EAAA,GAAK,MAAA,CAAO,UAAA,CAAW,KAAK,CAAA;AAClC,IAAA,MAAM,MAAA,GAAS,MAAM,WAAA,CAAY,EAAA,CAAG,OAAO,CAAA;AAE3C,IAAA,MAAA,EAAO;AACP,IAAA,EAAA,CAAG,gBAAA,CAAiB,UAAU,MAAM,CAAA;AACpC,IAAA,OAAO,MAAM,EAAA,CAAG,mBAAA,CAAoB,QAAA,EAAU,MAAM,CAAA;AAAA,EACtD,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AAEV,EAAA,OAAO,QAAA;AACT;;;;"}
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
4
+
5
+ const React = require('react');
6
+
7
+ const APPLE_PLATFORM_PATTERN = /mac|iphone|ipad|ipod/i;
8
+ function getIsApplePlatform() {
9
+ if (typeof navigator === "undefined") return false;
10
+ const nav = navigator;
11
+ const platform = nav.userAgentData?.platform || nav.platform || "";
12
+ const userAgent = nav.userAgent || "";
13
+ return APPLE_PLATFORM_PATTERN.test(platform) || APPLE_PLATFORM_PATTERN.test(userAgent);
14
+ }
15
+ function useIsApplePlatform() {
16
+ const [isApplePlatform] = React.useState(getIsApplePlatform);
17
+ return isApplePlatform;
18
+ }
19
+ function useKeyboardShortcutLabel(key) {
20
+ const isApplePlatform = useIsApplePlatform();
21
+ return React.useMemo(() => {
22
+ const normalizedKey = key.trim().toUpperCase();
23
+ return `${isApplePlatform ? "⌘" : "Ctrl"} ${normalizedKey}`;
24
+ }, [isApplePlatform, key]);
25
+ }
26
+
27
+ exports.useIsApplePlatform = useIsApplePlatform;
28
+ exports.useKeyboardShortcutLabel = useKeyboardShortcutLabel;
29
+ //# sourceMappingURL=use-keyboard-shortcut-label.cjs.js.map