@hot-updater/console 0.36.7 → 1.0.0-rc.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 (262) hide show
  1. package/.output/nitro.json +1 -1
  2. package/.output/public/assets/BundleIdDisplay-D4ErdU5_.js +1 -0
  3. package/.output/public/assets/InsightsCapabilityContext-B42VqvP6.js +1 -0
  4. package/.output/public/assets/api-keys-api-DGVTTvTJ.js +1 -0
  5. package/.output/public/assets/api-keys-z16OZIP4.js +1 -0
  6. package/.output/public/assets/badge-Br_KDO0J.js +1 -0
  7. package/.output/public/assets/card-DzuEXvyJ.js +1 -0
  8. package/.output/public/assets/chart-no-axes-combined-FaYMGmQS.js +1 -0
  9. package/.output/public/assets/createServerFn-gM2-LFBy.js +3 -0
  10. package/.output/public/assets/dialog-BeAENgez.js +1 -0
  11. package/.output/public/assets/dist-Bssh_cv0.js +1 -0
  12. package/.output/public/assets/field-Buq148-A.js +1 -0
  13. package/.output/public/assets/index-uOpQAIC4.js +10 -0
  14. package/.output/public/assets/input-group-B3p5UpyW.js +1 -0
  15. package/.output/public/assets/insights-DJTr7Ozn.js +1 -0
  16. package/.output/public/assets/insights-api-DVMOoRMS.js +1 -0
  17. package/.output/public/assets/installations-BY64iIAK.js +2 -0
  18. package/.output/public/assets/installations-D5v9i3AL.js +1 -0
  19. package/.output/public/assets/lazyRouteComponent-DKYu5cZJ.js +1 -0
  20. package/.output/public/assets/preload-helper-CQ36nxok.js +1 -0
  21. package/.output/public/assets/refresh-cw-BkbfZ62O.js +1 -0
  22. package/.output/public/assets/routes-BuoI5-Cr.js +2 -0
  23. package/.output/public/assets/routes-C8fvgETO.js +1 -0
  24. package/.output/public/assets/search-qsIDvS2I.js +1 -0
  25. package/.output/public/assets/shield-check-DE_hVuHu.js +1 -0
  26. package/.output/public/assets/signing-mJD88Y4C.js +1 -0
  27. package/.output/public/assets/styles-BZIG7t42.css +2 -0
  28. package/.output/public/assets/table-RamFEclP.js +1 -0
  29. package/.output/public/assets/useCompositeListItem-ChzDqdpc.js +42 -0
  30. package/.output/public/assets/useMutation-JsGVjQMY.js +1 -0
  31. package/.output/public/assets/useOpenInteractionType-Dwfy-SpA.js +1 -0
  32. package/.output/server/__23tanstack-start-server-fn-resolver-Dftxlm2E.mjs +146 -0
  33. package/.output/server/_libs/@base-ui/react+[...].mjs +16124 -0
  34. package/.output/server/_libs/@reduxjs/toolkit+[...].mjs +1554 -0
  35. package/.output/server/_libs/@tanstack/react-router+[...].mjs +41 -10
  36. package/.output/server/_libs/@tanstack/react-router-ssr-query+[...].mjs +132 -0
  37. package/.output/server/_libs/d3-array.mjs +231 -0
  38. package/.output/server/_libs/d3-color.mjs +330 -0
  39. package/.output/server/_libs/d3-format.mjs +252 -0
  40. package/.output/server/_libs/d3-interpolate.mjs +207 -0
  41. package/.output/server/_libs/d3-path.mjs +77 -0
  42. package/.output/server/_libs/d3-scale+[...].mjs +1907 -0
  43. package/.output/server/_libs/d3-shape.mjs +818 -0
  44. package/.output/server/_libs/decimal.js-light.mjs +884 -0
  45. package/.output/server/_libs/es-toolkit.mjs +1134 -0
  46. package/.output/server/_libs/eventemitter3.mjs +236 -0
  47. package/.output/server/_libs/immer.mjs +532 -0
  48. package/.output/server/_libs/lucide-react.mjs +141 -13
  49. package/.output/server/_libs/next-themes.mjs +2 -2
  50. package/.output/server/_libs/react-redux+[...].mjs +205 -0
  51. package/.output/server/_libs/recharts+[...].mjs +14117 -0
  52. package/.output/server/_libs/sonner.mjs +2 -2
  53. package/.output/server/_libs/tanstack__query-core.mjs +114 -1
  54. package/.output/server/_libs/tanstack__react-query.mjs +3 -4
  55. package/.output/server/_runtime.mjs +10 -1
  56. package/.output/server/_ssr/BundleActivityChart-CWcdPuUn.mjs +288 -0
  57. package/.output/server/_ssr/BundleIdDisplay-BEvB3MvA.mjs +13 -0
  58. package/.output/server/_ssr/InsightsCapabilityContext-Cx8fjm2s.mjs +15 -0
  59. package/.output/server/_ssr/api-keys-CpBqHpuC.mjs +300 -0
  60. package/.output/server/_ssr/api-keys-api-Czkp57UV.mjs +60 -0
  61. package/.output/server/_ssr/api-keys-rpc-BTtMDSoR.mjs +136 -0
  62. package/.output/server/_ssr/api-rpc-BEX8ISai.mjs +1468 -0
  63. package/.output/server/_ssr/auth-BF8mbAgF.mjs +21 -0
  64. package/.output/server/_ssr/auth-rpc-BFMEC-TT.mjs +24 -0
  65. package/.output/server/_ssr/auth.server-DW71WzsD.mjs +47 -0
  66. package/.output/server/_ssr/badge-CpWXQwyF.mjs +26 -0
  67. package/.output/server/_ssr/bundle-signing-rpc-BbCFUQSu.mjs +16 -0
  68. package/.output/server/_ssr/bundle-signing.server-C4NW5mWx.mjs +12 -0
  69. package/.output/server/_ssr/card-Bsc8mRis.mjs +86 -0
  70. package/.output/server/_ssr/config-Dv8qLDZ0.mjs +13 -0
  71. package/.output/server/_ssr/config.server-DQYEr_5X.mjs +361 -0
  72. package/.output/server/_ssr/{createServerFn-DzU0k62V.mjs → createServerFn-B2hcXoPM.mjs} +1 -1
  73. package/.output/server/_ssr/createServerRpc-DB29C_5p.mjs +12 -0
  74. package/.output/server/_ssr/{sidebar-Cv_H0_Jv.mjs → createSsrRpc-DhfrxEjg.mjs} +68 -50
  75. package/.output/server/_ssr/databaseRows-QlCYLi0H.mjs +166 -0
  76. package/.output/server/_ssr/deleteBundle-Cu_XOMt0.mjs +66 -0
  77. package/.output/server/_ssr/dialog-C0vKUp8R.mjs +170 -0
  78. package/.output/server/_ssr/dist-BVSLTpoP.mjs +250 -0
  79. package/.output/server/_ssr/downloadBundle-CNnYxYO2.mjs +24 -0
  80. package/.output/server/_ssr/{empty-plugin-adapters-B4HCzgmM.mjs → empty-plugin-adapters-B5QvGpEl.mjs} +1 -1
  81. package/.output/server/_ssr/field-DASCh-5d.mjs +74 -0
  82. package/.output/server/_ssr/{getBundleChildren-CVtSiH5t.mjs → getBundleChildren-BcRMFoDF.mjs} +10 -18
  83. package/.output/server/_ssr/input-group-etIsBUqv.mjs +288 -0
  84. package/.output/server/_ssr/insights-api-C1F7UreR.mjs +71 -0
  85. package/.output/server/_ssr/insights-input-9fEJF-ZG.mjs +96 -0
  86. package/.output/server/_ssr/insights-rpc-C-8R6kED.mjs +155 -0
  87. package/.output/server/_ssr/insights-ygT_aIfo.mjs +858 -0
  88. package/.output/server/_ssr/installations-DqRT1QTd.mjs +535 -0
  89. package/.output/server/_ssr/installations-K8TCYTYh.mjs +19 -0
  90. package/.output/server/_ssr/router-BxBEvtF1.mjs +513 -0
  91. package/.output/server/_ssr/routes-BC7rn-tf.mjs +37 -0
  92. package/.output/server/_ssr/routes-CM5KAwpB.mjs +2285 -0
  93. package/.output/server/_ssr/runtime.server-la7TRAH_.mjs +527 -0
  94. package/.output/server/_ssr/server-CpzW--lT.mjs +7468 -0
  95. package/.output/server/_ssr/signing-jk4HANnl.mjs +134 -0
  96. package/.output/server/_ssr/ssr.mjs +4 -5740
  97. package/.output/server/_ssr/start-DpViQGnt.mjs +4 -0
  98. package/.output/server/_ssr/table-CU58HeI7.mjs +53 -0
  99. package/.output/server/_ssr/uuidv7-CaKuKXrV.mjs +31 -0
  100. package/.output/server/_tanstack-start-manifest_v-Mz9MmSlD.mjs +103 -0
  101. package/.output/server/index.mjs +229 -47
  102. package/README.md +29 -8
  103. package/lib/index.d.mts +35 -0
  104. package/lib/index.mjs +4 -0
  105. package/lib/vite-internal.mjs +127 -0
  106. package/lib/vite.d.mts +10 -0
  107. package/lib/vite.mjs +5 -0
  108. package/package.json +51 -29
  109. package/public/apple-touch-icon.png +0 -0
  110. package/public/favicon-16x16.png +0 -0
  111. package/public/favicon-32x32.png +0 -0
  112. package/public/favicon.ico +0 -0
  113. package/public/logo.svg +1 -0
  114. package/public/manifest.json +30 -0
  115. package/public/robots.txt +3 -0
  116. package/src/components/AppSidebar.tsx +159 -0
  117. package/src/components/BundleIdDisplay.tsx +18 -0
  118. package/src/components/ChannelBadge.tsx +31 -0
  119. package/src/components/ConsoleAccessPage.tsx +122 -0
  120. package/src/components/EnabledStatusIcon.tsx +54 -0
  121. package/src/components/HashValueDisplay.tsx +85 -0
  122. package/src/components/HotUpdaterLogo.tsx +30 -0
  123. package/src/components/NotFoundPage.tsx +33 -0
  124. package/src/components/PlatformIcon.tsx +39 -0
  125. package/src/components/RolloutPercentageBadge.tsx +28 -0
  126. package/src/components/ThemeProvider.tsx +116 -0
  127. package/src/components/TimestampDisplay.tsx +41 -0
  128. package/src/components/features/api-keys/ApiKeysPage.tsx +377 -0
  129. package/src/components/features/bundles/BundleActivityChart.tsx +193 -0
  130. package/src/components/features/bundles/BundleChildrenPanel.tsx +201 -0
  131. package/src/components/features/bundles/BundleInsightsSummary.tsx +123 -0
  132. package/src/components/features/bundles/BundleMetadata.tsx +136 -0
  133. package/src/components/features/bundles/RolloutCohortsDialog.tsx +201 -0
  134. package/src/components/features/channels/ChannelManagementDialog.tsx +228 -0
  135. package/src/components/features/insights/ActivityChart.tsx +150 -0
  136. package/src/components/features/insights/BundleDistribution.tsx +133 -0
  137. package/src/components/features/insights/BundleSelector.tsx +114 -0
  138. package/src/components/features/insights/InsightsCapabilityContext.tsx +24 -0
  139. package/src/components/features/insights/InsightsControls.tsx +115 -0
  140. package/src/components/features/insights/InsightsErrorAlert.tsx +21 -0
  141. package/src/components/features/insights/InsightsOverview.tsx +208 -0
  142. package/src/components/features/insights/InstallationHistoryCard.tsx +248 -0
  143. package/src/components/features/insights/InstallationMatchesCard.tsx +132 -0
  144. package/src/components/features/insights/InstallationPageHeader.tsx +138 -0
  145. package/src/components/features/insights/InstallationPagination.tsx +48 -0
  146. package/src/components/features/insights/InstallationSearch.tsx +230 -0
  147. package/src/components/features/insights/UpdateOutcomes.tsx +147 -0
  148. package/src/components/features/releases/ReleaseEditorSheet.tsx +879 -0
  149. package/src/components/features/releases/ReleaseStateBadge.tsx +20 -0
  150. package/src/components/features/signing/BundleSigningPage.tsx +139 -0
  151. package/src/components/ui/alert-dialog.tsx +185 -0
  152. package/src/components/ui/alert.tsx +76 -0
  153. package/src/components/ui/badge.tsx +49 -0
  154. package/src/components/ui/button.tsx +58 -0
  155. package/src/components/ui/card.tsx +89 -0
  156. package/src/components/ui/chart.tsx +371 -0
  157. package/src/components/ui/combobox.tsx +303 -0
  158. package/src/components/ui/dialog.tsx +156 -0
  159. package/src/components/ui/dropdown-menu.tsx +270 -0
  160. package/src/components/ui/field.tsx +235 -0
  161. package/src/components/ui/input-group.tsx +147 -0
  162. package/src/components/ui/input.tsx +19 -0
  163. package/src/components/ui/label.tsx +25 -0
  164. package/src/components/ui/progress.tsx +84 -0
  165. package/src/components/ui/select.tsx +205 -0
  166. package/src/components/ui/separator.tsx +23 -0
  167. package/src/components/ui/sheet.tsx +132 -0
  168. package/src/components/ui/sidebar.tsx +779 -0
  169. package/src/components/ui/skeleton.tsx +13 -0
  170. package/src/components/ui/slider.tsx +56 -0
  171. package/src/components/ui/sonner.tsx +45 -0
  172. package/src/components/ui/switch.tsx +25 -0
  173. package/src/components/ui/table.tsx +114 -0
  174. package/src/components/ui/textarea.tsx +18 -0
  175. package/src/components/ui/toggle-group.tsx +89 -0
  176. package/src/components/ui/toggle.tsx +43 -0
  177. package/src/components/ui/tooltip.tsx +66 -0
  178. package/src/hooks/use-mobile.ts +30 -0
  179. package/src/index.ts +47 -0
  180. package/src/lib/api-keys-api.ts +69 -0
  181. package/src/lib/api-keys-rpc.ts +87 -0
  182. package/src/lib/api-rpc.ts +478 -0
  183. package/src/lib/api.ts +444 -0
  184. package/src/lib/auth-rpc.ts +16 -0
  185. package/src/lib/bundle-signing-api.ts +14 -0
  186. package/src/lib/bundle-signing-rpc.ts +16 -0
  187. package/src/lib/constants.ts +1 -0
  188. package/src/lib/git.ts +51 -0
  189. package/src/lib/insights-api.ts +144 -0
  190. package/src/lib/insights-error.ts +19 -0
  191. package/src/lib/insights-input.ts +187 -0
  192. package/src/lib/insights-overview.ts +170 -0
  193. package/src/lib/insights-rpc.ts +218 -0
  194. package/src/lib/server/auth.server.ts +43 -0
  195. package/src/lib/server/bundle-signing.server.ts +23 -0
  196. package/src/lib/server/config.server.ts +109 -0
  197. package/src/lib/server/console-runtime.server.ts +61 -0
  198. package/src/lib/server/deleteBundle.ts +145 -0
  199. package/src/lib/server/downloadBundle.ts +46 -0
  200. package/src/lib/server/getBundleChildren.ts +130 -0
  201. package/src/lib/server/listReleases.ts +61 -0
  202. package/src/lib/server/releaseActivity.ts +27 -0
  203. package/src/lib/server/releaseReachability.ts +95 -0
  204. package/src/lib/server/runtime.server.ts +172 -0
  205. package/src/lib/utils.ts +9 -0
  206. package/src/logo.svg +1 -0
  207. package/src/routeTree.gen.ts +199 -0
  208. package/src/router.tsx +21 -0
  209. package/src/routes/-installations-search.ts +19 -0
  210. package/src/routes/-releases-search.ts +74 -0
  211. package/src/routes/__root.tsx +174 -0
  212. package/src/routes/api/auth/$.ts +19 -0
  213. package/src/routes/api/bundles/$bundleId/download.ts +17 -0
  214. package/src/routes/api-keys.tsx +37 -0
  215. package/src/routes/index.tsx +982 -0
  216. package/src/routes/insights.tsx +139 -0
  217. package/src/routes/installations.tsx +194 -0
  218. package/src/routes/signing.tsx +37 -0
  219. package/src/styles.css +152 -0
  220. package/src/virtual-modules.d.ts +21 -0
  221. package/src/vite-env.d.ts +1 -0
  222. package/src/vite-internal.ts +195 -0
  223. package/src/vite.ts +12 -0
  224. package/.output/public/assets/dist-DJX53faP.js +0 -3
  225. package/.output/public/assets/index-Iylis5kY.js +0 -10
  226. package/.output/public/assets/routes-HT21hs0C.js +0 -54
  227. package/.output/public/assets/styles-C0Re4quB.css +0 -2
  228. package/.output/server/__23tanstack-start-server-fn-resolver-CgwgZ0-i.mjs +0 -66
  229. package/.output/server/_libs/@floating-ui/core+[...].mjs +0 -698
  230. package/.output/server/_libs/@floating-ui/dom+[...].mjs +0 -644
  231. package/.output/server/_libs/@floating-ui/react-dom+[...].mjs +0 -839
  232. package/.output/server/_libs/@radix-ui/react-alert-dialog+[...].mjs +0 -2138
  233. package/.output/server/_libs/@radix-ui/react-popper+[...].mjs +0 -308
  234. package/.output/server/_libs/@radix-ui/react-select+[...].mjs +0 -1038
  235. package/.output/server/_libs/@tanstack/devtools-event-client+[...].mjs +0 -196
  236. package/.output/server/_libs/@tanstack/form-core+[...].mjs +0 -3228
  237. package/.output/server/_libs/@tanstack/react-form+[...].mjs +0 -430
  238. package/.output/server/_libs/@tanstack/react-table+[...].mjs +0 -2382
  239. package/.output/server/_libs/radix-ui__number.mjs +0 -6
  240. package/.output/server/_libs/radix-ui__primitive.mjs +0 -9
  241. package/.output/server/_libs/radix-ui__react-arrow.mjs +0 -23
  242. package/.output/server/_libs/radix-ui__react-collection.mjs +0 -78
  243. package/.output/server/_libs/radix-ui__react-direction.mjs +0 -13
  244. package/.output/server/_libs/radix-ui__react-label.mjs +0 -22
  245. package/.output/server/_libs/radix-ui__react-separator.mjs +0 -30
  246. package/.output/server/_libs/radix-ui__react-slider.mjs +0 -510
  247. package/.output/server/_libs/radix-ui__react-switch.mjs +0 -157
  248. package/.output/server/_libs/radix-ui__react-tooltip.mjs +0 -493
  249. package/.output/server/_ssr/api-rpc-BIbDUKSz.mjs +0 -292
  250. package/.output/server/_ssr/config.server-BSS366KT.mjs +0 -41
  251. package/.output/server/_ssr/deleteBundle-BgbZTtpW.mjs +0 -141
  252. package/.output/server/_ssr/dist-KboydRVk.mjs +0 -120
  253. package/.output/server/_ssr/router-C3hqEy3k.mjs +0 -307
  254. package/.output/server/_ssr/routes-B0lQvvlC.mjs +0 -3048
  255. package/.output/server/_ssr/start-02sLteYG.mjs +0 -4
  256. package/.output/server/_ssr/storageProfile-FVkjPoGb.mjs +0 -9
  257. package/.output/server/_tanstack-start-manifest_v-Bpx52WOU.mjs +0 -20
  258. package/.output/server/node_modules/tslib/modules/index.js +0 -70
  259. package/.output/server/node_modules/tslib/modules/package.json +0 -3
  260. package/.output/server/node_modules/tslib/package.json +0 -47
  261. package/.output/server/node_modules/tslib/tslib.js +0 -484
  262. package/.output/server/package.json +0 -9
@@ -1,493 +0,0 @@
1
- import { r as __toESM } from "../_runtime.mjs";
2
- import { u as require_react } from "./@floating-ui/react-dom+[...].mjs";
3
- import { E as useControllableState, M as createSlottable, N as useComposedRefs, O as createContextScope, P as require_jsx_runtime, S as DismissableLayer, T as Presence, b as Portal$1, k as Primitive, w as useId } from "./@radix-ui/react-alert-dialog+[...].mjs";
4
- import { m as Root } from "./@radix-ui/react-select+[...].mjs";
5
- import { t as composeEventHandlers } from "./radix-ui__primitive.mjs";
6
- import { a as createPopperScope, i as Root2, n as Arrow, r as Content, t as Anchor } from "./@radix-ui/react-popper+[...].mjs";
7
- //#region ../../node_modules/.pnpm/@radix-ui+react-tooltip@1.2.9_@types+react-dom@19.2.3_@types+react@19.2.15__@types+reac_5a451308c19916fd9d95f5d7ea3f72f6/node_modules/@radix-ui/react-tooltip/dist/index.mjs
8
- var import_react = /* @__PURE__ */ __toESM(require_react(), 1);
9
- var import_jsx_runtime = require_jsx_runtime();
10
- var [createTooltipContext, createTooltipScope] = createContextScope("Tooltip", [createPopperScope]);
11
- var usePopperScope = createPopperScope();
12
- var PROVIDER_NAME = "TooltipProvider";
13
- var DEFAULT_DELAY_DURATION = 700;
14
- var TOOLTIP_OPEN = "tooltip.open";
15
- var [TooltipProviderContextProvider, useTooltipProviderContext] = createTooltipContext(PROVIDER_NAME);
16
- var TooltipProvider = (props) => {
17
- const { __scopeTooltip, delayDuration = DEFAULT_DELAY_DURATION, skipDelayDuration = 300, disableHoverableContent = false, children } = props;
18
- const isOpenDelayedRef = import_react.useRef(true);
19
- const isPointerInTransitRef = import_react.useRef(false);
20
- const skipDelayTimerRef = import_react.useRef(0);
21
- import_react.useEffect(() => {
22
- const skipDelayTimer = skipDelayTimerRef.current;
23
- return () => window.clearTimeout(skipDelayTimer);
24
- }, []);
25
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipProviderContextProvider, {
26
- scope: __scopeTooltip,
27
- isOpenDelayedRef,
28
- delayDuration,
29
- onOpen: import_react.useCallback(() => {
30
- if (skipDelayDuration <= 0) return;
31
- window.clearTimeout(skipDelayTimerRef.current);
32
- isOpenDelayedRef.current = false;
33
- }, [skipDelayDuration]),
34
- onClose: import_react.useCallback(() => {
35
- if (skipDelayDuration <= 0) return;
36
- window.clearTimeout(skipDelayTimerRef.current);
37
- skipDelayTimerRef.current = window.setTimeout(() => isOpenDelayedRef.current = true, skipDelayDuration);
38
- }, [skipDelayDuration]),
39
- isPointerInTransitRef,
40
- onPointerInTransitChange: import_react.useCallback((inTransit) => {
41
- isPointerInTransitRef.current = inTransit;
42
- }, []),
43
- disableHoverableContent,
44
- children
45
- });
46
- };
47
- TooltipProvider.displayName = PROVIDER_NAME;
48
- var TOOLTIP_NAME = "Tooltip";
49
- var [TooltipContextProvider, useTooltipContext] = createTooltipContext(TOOLTIP_NAME);
50
- var Tooltip = (props) => {
51
- const { __scopeTooltip, children, open: openProp, defaultOpen, onOpenChange, disableHoverableContent: disableHoverableContentProp, delayDuration: delayDurationProp } = props;
52
- const providerContext = useTooltipProviderContext(TOOLTIP_NAME, props.__scopeTooltip);
53
- const popperScope = usePopperScope(__scopeTooltip);
54
- const [trigger, setTrigger] = import_react.useState(null);
55
- const contentId = useId();
56
- const openTimerRef = import_react.useRef(0);
57
- const disableHoverableContent = disableHoverableContentProp ?? providerContext.disableHoverableContent;
58
- const delayDuration = delayDurationProp ?? providerContext.delayDuration;
59
- const wasOpenDelayedRef = import_react.useRef(false);
60
- const [open, setOpen] = useControllableState({
61
- prop: openProp,
62
- defaultProp: defaultOpen ?? false,
63
- onChange: (open2) => {
64
- if (open2) {
65
- providerContext.onOpen();
66
- document.dispatchEvent(new CustomEvent(TOOLTIP_OPEN));
67
- } else providerContext.onClose();
68
- onOpenChange?.(open2);
69
- },
70
- caller: TOOLTIP_NAME
71
- });
72
- const stateAttribute = import_react.useMemo(() => {
73
- return open ? wasOpenDelayedRef.current ? "delayed-open" : "instant-open" : "closed";
74
- }, [open]);
75
- const handleOpen = import_react.useCallback(() => {
76
- window.clearTimeout(openTimerRef.current);
77
- openTimerRef.current = 0;
78
- wasOpenDelayedRef.current = false;
79
- setOpen(true);
80
- }, [setOpen]);
81
- const handleClose = import_react.useCallback(() => {
82
- window.clearTimeout(openTimerRef.current);
83
- openTimerRef.current = 0;
84
- setOpen(false);
85
- }, [setOpen]);
86
- const handleDelayedOpen = import_react.useCallback(() => {
87
- window.clearTimeout(openTimerRef.current);
88
- openTimerRef.current = window.setTimeout(() => {
89
- wasOpenDelayedRef.current = true;
90
- setOpen(true);
91
- openTimerRef.current = 0;
92
- }, delayDuration);
93
- }, [delayDuration, setOpen]);
94
- import_react.useEffect(() => {
95
- return () => {
96
- if (openTimerRef.current) {
97
- window.clearTimeout(openTimerRef.current);
98
- openTimerRef.current = 0;
99
- }
100
- };
101
- }, []);
102
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Root2, {
103
- ...popperScope,
104
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipContextProvider, {
105
- scope: __scopeTooltip,
106
- contentId,
107
- open,
108
- stateAttribute,
109
- trigger,
110
- onTriggerChange: setTrigger,
111
- onTriggerEnter: import_react.useCallback(() => {
112
- if (providerContext.isOpenDelayedRef.current) handleDelayedOpen();
113
- else handleOpen();
114
- }, [
115
- providerContext.isOpenDelayedRef,
116
- handleDelayedOpen,
117
- handleOpen
118
- ]),
119
- onTriggerLeave: import_react.useCallback(() => {
120
- if (disableHoverableContent) handleClose();
121
- else {
122
- window.clearTimeout(openTimerRef.current);
123
- openTimerRef.current = 0;
124
- }
125
- }, [handleClose, disableHoverableContent]),
126
- onOpen: handleOpen,
127
- onClose: handleClose,
128
- disableHoverableContent,
129
- children
130
- })
131
- });
132
- };
133
- Tooltip.displayName = TOOLTIP_NAME;
134
- var TRIGGER_NAME = "TooltipTrigger";
135
- var TooltipTrigger = import_react.forwardRef((props, forwardedRef) => {
136
- const { __scopeTooltip, ...triggerProps } = props;
137
- const context = useTooltipContext(TRIGGER_NAME, __scopeTooltip);
138
- const providerContext = useTooltipProviderContext(TRIGGER_NAME, __scopeTooltip);
139
- const popperScope = usePopperScope(__scopeTooltip);
140
- const composedRefs = useComposedRefs(forwardedRef, import_react.useRef(null), context.onTriggerChange);
141
- const isPointerDownRef = import_react.useRef(false);
142
- const hasPointerMoveOpenedRef = import_react.useRef(false);
143
- const handlePointerUp = import_react.useCallback(() => isPointerDownRef.current = false, []);
144
- import_react.useEffect(() => {
145
- return () => document.removeEventListener("pointerup", handlePointerUp);
146
- }, [handlePointerUp]);
147
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Anchor, {
148
- asChild: true,
149
- ...popperScope,
150
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Primitive.button, {
151
- "aria-describedby": context.open ? context.contentId : void 0,
152
- "data-state": context.stateAttribute,
153
- ...triggerProps,
154
- ref: composedRefs,
155
- onPointerMove: composeEventHandlers(props.onPointerMove, (event) => {
156
- if (event.pointerType === "touch") return;
157
- if (!hasPointerMoveOpenedRef.current && !providerContext.isPointerInTransitRef.current) {
158
- context.onTriggerEnter();
159
- hasPointerMoveOpenedRef.current = true;
160
- }
161
- }),
162
- onPointerLeave: composeEventHandlers(props.onPointerLeave, () => {
163
- context.onTriggerLeave();
164
- hasPointerMoveOpenedRef.current = false;
165
- }),
166
- onPointerDown: composeEventHandlers(props.onPointerDown, () => {
167
- if (context.open) context.onClose();
168
- isPointerDownRef.current = true;
169
- document.addEventListener("pointerup", handlePointerUp, { once: true });
170
- }),
171
- onFocus: composeEventHandlers(props.onFocus, () => {
172
- if (!isPointerDownRef.current) context.onOpen();
173
- }),
174
- onBlur: composeEventHandlers(props.onBlur, context.onClose),
175
- onClick: composeEventHandlers(props.onClick, context.onClose)
176
- })
177
- });
178
- });
179
- TooltipTrigger.displayName = TRIGGER_NAME;
180
- var PORTAL_NAME = "TooltipPortal";
181
- var [PortalProvider, usePortalContext] = createTooltipContext(PORTAL_NAME, { forceMount: void 0 });
182
- var TooltipPortal = (props) => {
183
- const { __scopeTooltip, forceMount, children, container } = props;
184
- const context = useTooltipContext(PORTAL_NAME, __scopeTooltip);
185
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(PortalProvider, {
186
- scope: __scopeTooltip,
187
- forceMount,
188
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Presence, {
189
- present: forceMount || context.open,
190
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Portal$1, {
191
- asChild: true,
192
- container,
193
- children
194
- })
195
- })
196
- });
197
- };
198
- TooltipPortal.displayName = PORTAL_NAME;
199
- var CONTENT_NAME = "TooltipContent";
200
- var TooltipContent = import_react.forwardRef((props, forwardedRef) => {
201
- const portalContext = usePortalContext(CONTENT_NAME, props.__scopeTooltip);
202
- const { forceMount = portalContext.forceMount, side = "top", ...contentProps } = props;
203
- const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);
204
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Presence, {
205
- present: forceMount || context.open,
206
- children: context.disableHoverableContent ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipContentImpl, {
207
- side,
208
- ...contentProps,
209
- ref: forwardedRef
210
- }) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipContentHoverable, {
211
- side,
212
- ...contentProps,
213
- ref: forwardedRef
214
- })
215
- });
216
- });
217
- var TooltipContentHoverable = import_react.forwardRef((props, forwardedRef) => {
218
- const context = useTooltipContext(CONTENT_NAME, props.__scopeTooltip);
219
- const providerContext = useTooltipProviderContext(CONTENT_NAME, props.__scopeTooltip);
220
- const ref = import_react.useRef(null);
221
- const composedRefs = useComposedRefs(forwardedRef, ref);
222
- const [pointerGraceArea, setPointerGraceArea] = import_react.useState(null);
223
- const { trigger, onClose } = context;
224
- const content = ref.current;
225
- const { onPointerInTransitChange } = providerContext;
226
- const handleRemoveGraceArea = import_react.useCallback(() => {
227
- setPointerGraceArea(null);
228
- onPointerInTransitChange(false);
229
- }, [onPointerInTransitChange]);
230
- const handleCreateGraceArea = import_react.useCallback((event, hoverTarget) => {
231
- const currentTarget = event.currentTarget;
232
- const exitPoint = {
233
- x: event.clientX,
234
- y: event.clientY
235
- };
236
- const paddedExitPoints = getPaddedExitPoints(exitPoint, getExitSideFromRect(exitPoint, currentTarget.getBoundingClientRect()));
237
- const hoverTargetPoints = getPointsFromRect(hoverTarget.getBoundingClientRect());
238
- setPointerGraceArea(getHull([...paddedExitPoints, ...hoverTargetPoints]));
239
- onPointerInTransitChange(true);
240
- }, [onPointerInTransitChange]);
241
- import_react.useEffect(() => {
242
- return () => handleRemoveGraceArea();
243
- }, [handleRemoveGraceArea]);
244
- import_react.useEffect(() => {
245
- if (trigger && content) {
246
- const handleTriggerLeave = (event) => handleCreateGraceArea(event, content);
247
- const handleContentLeave = (event) => handleCreateGraceArea(event, trigger);
248
- trigger.addEventListener("pointerleave", handleTriggerLeave);
249
- content.addEventListener("pointerleave", handleContentLeave);
250
- return () => {
251
- trigger.removeEventListener("pointerleave", handleTriggerLeave);
252
- content.removeEventListener("pointerleave", handleContentLeave);
253
- };
254
- }
255
- }, [
256
- trigger,
257
- content,
258
- handleCreateGraceArea,
259
- handleRemoveGraceArea
260
- ]);
261
- import_react.useEffect(() => {
262
- if (pointerGraceArea) {
263
- const handleTrackPointerGrace = (event) => {
264
- const target = event.target;
265
- const pointerPosition = {
266
- x: event.clientX,
267
- y: event.clientY
268
- };
269
- const hasEnteredTarget = trigger?.contains(target) || content?.contains(target);
270
- const isPointerOutsideGraceArea = !isPointInPolygon(pointerPosition, pointerGraceArea);
271
- if (hasEnteredTarget) handleRemoveGraceArea();
272
- else if (isPointerOutsideGraceArea) {
273
- handleRemoveGraceArea();
274
- onClose();
275
- }
276
- };
277
- document.addEventListener("pointermove", handleTrackPointerGrace);
278
- return () => document.removeEventListener("pointermove", handleTrackPointerGrace);
279
- }
280
- }, [
281
- trigger,
282
- content,
283
- pointerGraceArea,
284
- onClose,
285
- handleRemoveGraceArea
286
- ]);
287
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(TooltipContentImpl, {
288
- ...props,
289
- ref: composedRefs
290
- });
291
- });
292
- var [VisuallyHiddenContentContextProvider, useVisuallyHiddenContentContext] = createTooltipContext(TOOLTIP_NAME, { isInside: false });
293
- var Slottable = createSlottable("TooltipContent");
294
- var TooltipContentImpl = import_react.forwardRef((props, forwardedRef) => {
295
- const { __scopeTooltip, children, "aria-label": ariaLabel, onEscapeKeyDown, onPointerDownOutside, ...contentProps } = props;
296
- const context = useTooltipContext(CONTENT_NAME, __scopeTooltip);
297
- const popperScope = usePopperScope(__scopeTooltip);
298
- const { onClose } = context;
299
- import_react.useEffect(() => {
300
- document.addEventListener(TOOLTIP_OPEN, onClose);
301
- return () => document.removeEventListener(TOOLTIP_OPEN, onClose);
302
- }, [onClose]);
303
- import_react.useEffect(() => {
304
- if (context.trigger) {
305
- const handleScroll = (event) => {
306
- if (event.target instanceof Node && event.target.contains(context.trigger)) onClose();
307
- };
308
- window.addEventListener("scroll", handleScroll, { capture: true });
309
- return () => window.removeEventListener("scroll", handleScroll, { capture: true });
310
- }
311
- }, [context.trigger, onClose]);
312
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(DismissableLayer, {
313
- asChild: true,
314
- disableOutsidePointerEvents: false,
315
- onEscapeKeyDown,
316
- onPointerDownOutside,
317
- onFocusOutside: (event) => event.preventDefault(),
318
- onDismiss: onClose,
319
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(Content, {
320
- "data-state": context.stateAttribute,
321
- ...popperScope,
322
- ...contentProps,
323
- ref: forwardedRef,
324
- style: {
325
- ...contentProps.style,
326
- "--radix-tooltip-content-transform-origin": "var(--radix-popper-transform-origin)",
327
- "--radix-tooltip-content-available-width": "var(--radix-popper-available-width)",
328
- "--radix-tooltip-content-available-height": "var(--radix-popper-available-height)",
329
- "--radix-tooltip-trigger-width": "var(--radix-popper-anchor-width)",
330
- "--radix-tooltip-trigger-height": "var(--radix-popper-anchor-height)"
331
- },
332
- children: [/* @__PURE__ */ (0, import_jsx_runtime.jsx)(Slottable, { children }), /* @__PURE__ */ (0, import_jsx_runtime.jsx)(VisuallyHiddenContentContextProvider, {
333
- scope: __scopeTooltip,
334
- isInside: true,
335
- children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Root, {
336
- id: context.contentId,
337
- role: "tooltip",
338
- children: ariaLabel || children
339
- })
340
- })]
341
- })
342
- });
343
- });
344
- TooltipContent.displayName = CONTENT_NAME;
345
- var ARROW_NAME = "TooltipArrow";
346
- var TooltipArrow = import_react.forwardRef((props, forwardedRef) => {
347
- const { __scopeTooltip, ...arrowProps } = props;
348
- const popperScope = usePopperScope(__scopeTooltip);
349
- return useVisuallyHiddenContentContext(ARROW_NAME, __scopeTooltip).isInside ? null : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Arrow, {
350
- ...popperScope,
351
- ...arrowProps,
352
- ref: forwardedRef
353
- });
354
- });
355
- TooltipArrow.displayName = ARROW_NAME;
356
- function getExitSideFromRect(point, rect) {
357
- const top = Math.abs(rect.top - point.y);
358
- const bottom = Math.abs(rect.bottom - point.y);
359
- const right = Math.abs(rect.right - point.x);
360
- const left = Math.abs(rect.left - point.x);
361
- switch (Math.min(top, bottom, right, left)) {
362
- case left: return "left";
363
- case right: return "right";
364
- case top: return "top";
365
- case bottom: return "bottom";
366
- default: throw new Error("unreachable");
367
- }
368
- }
369
- function getPaddedExitPoints(exitPoint, exitSide, padding = 5) {
370
- const paddedExitPoints = [];
371
- switch (exitSide) {
372
- case "top":
373
- paddedExitPoints.push({
374
- x: exitPoint.x - padding,
375
- y: exitPoint.y + padding
376
- }, {
377
- x: exitPoint.x + padding,
378
- y: exitPoint.y + padding
379
- });
380
- break;
381
- case "bottom":
382
- paddedExitPoints.push({
383
- x: exitPoint.x - padding,
384
- y: exitPoint.y - padding
385
- }, {
386
- x: exitPoint.x + padding,
387
- y: exitPoint.y - padding
388
- });
389
- break;
390
- case "left":
391
- paddedExitPoints.push({
392
- x: exitPoint.x + padding,
393
- y: exitPoint.y - padding
394
- }, {
395
- x: exitPoint.x + padding,
396
- y: exitPoint.y + padding
397
- });
398
- break;
399
- case "right":
400
- paddedExitPoints.push({
401
- x: exitPoint.x - padding,
402
- y: exitPoint.y - padding
403
- }, {
404
- x: exitPoint.x - padding,
405
- y: exitPoint.y + padding
406
- });
407
- break;
408
- }
409
- return paddedExitPoints;
410
- }
411
- function getPointsFromRect(rect) {
412
- const { top, right, bottom, left } = rect;
413
- return [
414
- {
415
- x: left,
416
- y: top
417
- },
418
- {
419
- x: right,
420
- y: top
421
- },
422
- {
423
- x: right,
424
- y: bottom
425
- },
426
- {
427
- x: left,
428
- y: bottom
429
- }
430
- ];
431
- }
432
- function isPointInPolygon(point, polygon) {
433
- const { x, y } = point;
434
- let inside = false;
435
- for (let i = 0, j = polygon.length - 1; i < polygon.length; j = i++) {
436
- const ii = polygon[i];
437
- const jj = polygon[j];
438
- const xi = ii.x;
439
- const yi = ii.y;
440
- const xj = jj.x;
441
- const yj = jj.y;
442
- if (yi > y !== yj > y && x < (xj - xi) * (y - yi) / (yj - yi) + xi) inside = !inside;
443
- }
444
- return inside;
445
- }
446
- function getHull(points) {
447
- const newPoints = points.slice();
448
- newPoints.sort((a, b) => {
449
- if (a.x < b.x) return -1;
450
- else if (a.x > b.x) return 1;
451
- else if (a.y < b.y) return -1;
452
- else if (a.y > b.y) return 1;
453
- else return 0;
454
- });
455
- return getHullPresorted(newPoints);
456
- }
457
- function getHullPresorted(points) {
458
- if (points.length <= 1) return points.slice();
459
- const upperHull = [];
460
- for (let i = 0; i < points.length; i++) {
461
- const p = points[i];
462
- while (upperHull.length >= 2) {
463
- const q = upperHull[upperHull.length - 1];
464
- const r = upperHull[upperHull.length - 2];
465
- if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) upperHull.pop();
466
- else break;
467
- }
468
- upperHull.push(p);
469
- }
470
- upperHull.pop();
471
- const lowerHull = [];
472
- for (let i = points.length - 1; i >= 0; i--) {
473
- const p = points[i];
474
- while (lowerHull.length >= 2) {
475
- const q = lowerHull[lowerHull.length - 1];
476
- const r = lowerHull[lowerHull.length - 2];
477
- if ((q.x - r.x) * (p.y - r.y) >= (q.y - r.y) * (p.x - r.x)) lowerHull.pop();
478
- else break;
479
- }
480
- lowerHull.push(p);
481
- }
482
- lowerHull.pop();
483
- if (upperHull.length === 1 && lowerHull.length === 1 && upperHull[0].x === lowerHull[0].x && upperHull[0].y === lowerHull[0].y) return upperHull;
484
- else return upperHull.concat(lowerHull);
485
- }
486
- var Provider = TooltipProvider;
487
- var Root3 = Tooltip;
488
- var Trigger = TooltipTrigger;
489
- var Portal = TooltipPortal;
490
- var Content2 = TooltipContent;
491
- var Arrow2 = TooltipArrow;
492
- //#endregion
493
- export { Root3 as a, Provider as i, Content2 as n, Trigger as o, Portal as r, Arrow2 as t };