ahoy_analytics 0.1.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 (198) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +163 -0
  4. data/Rakefile +6 -0
  5. data/app/assets/ahoy_analytics/build/assets/Combination-BpSXUjp9.js +41 -0
  6. data/app/assets/ahoy_analytics/build/assets/analytics-5KyfCxh6.css +1 -0
  7. data/app/assets/ahoy_analytics/build/assets/analytics-dashboard-uOXx8zYZ.js +1 -0
  8. data/app/assets/ahoy_analytics/build/assets/analytics-layout-ClAft5OU.js +1 -0
  9. data/app/assets/ahoy_analytics/build/assets/analytics-tracker-B3f8P98z.js +1 -0
  10. data/app/assets/ahoy_analytics/build/assets/analytics-ui-DMSkNqd6.js +90 -0
  11. data/app/assets/ahoy_analytics/build/assets/behaviors-panel-ChNGYbdH.js +1 -0
  12. data/app/assets/ahoy_analytics/build/assets/button-JVCrlR4s.js +1 -0
  13. data/app/assets/ahoy_analytics/build/assets/cable-DO-7y1-E.js +1 -0
  14. data/app/assets/ahoy_analytics/build/assets/createLucideIcon-BGzacY2v.js +1 -0
  15. data/app/assets/ahoy_analytics/build/assets/date-range-dialog-DWDp3cLG.js +1 -0
  16. data/app/assets/ahoy_analytics/build/assets/details-button-NqKfSGEG.js +1 -0
  17. data/app/assets/ahoy_analytics/build/assets/devices-panel-cXvlmNBY.js +1 -0
  18. data/app/assets/ahoy_analytics/build/assets/dialog-path-BBPNlB4Z.js +1 -0
  19. data/app/assets/ahoy_analytics/build/assets/dropdown-menu-Adj3O5fh.js +1 -0
  20. data/app/assets/ahoy_analytics/build/assets/filter-dialog-BN-rf4lp.js +1 -0
  21. data/app/assets/ahoy_analytics/build/assets/index-B1K1NTKT.js +3 -0
  22. data/app/assets/ahoy_analytics/build/assets/index-BcHeb-Rh.js +1 -0
  23. data/app/assets/ahoy_analytics/build/assets/index-DzpzLoG4.js +1 -0
  24. data/app/assets/ahoy_analytics/build/assets/index-vX97OY1J.js +1 -0
  25. data/app/assets/ahoy_analytics/build/assets/input-e4v_v0kE.js +1 -0
  26. data/app/assets/ahoy_analytics/build/assets/jsx-runtime-u17CrQMm.js +1 -0
  27. data/app/assets/ahoy_analytics/build/assets/last-load-context-De5uA95L.js +1 -0
  28. data/app/assets/ahoy_analytics/build/assets/list-table-ChHEzzF9.js +1 -0
  29. data/app/assets/ahoy_analytics/build/assets/live-Cp2MHECh.js +2 -0
  30. data/app/assets/ahoy_analytics/build/assets/locations-panel-BaISRmaQ.js +1 -0
  31. data/app/assets/ahoy_analytics/build/assets/mercator-BnxX5RzL.js +1 -0
  32. data/app/assets/ahoy_analytics/build/assets/pages-panel-Bh25L8mP.js +1 -0
  33. data/app/assets/ahoy_analytics/build/assets/panel-tabs-B2kvGFJx.js +1 -0
  34. data/app/assets/ahoy_analytics/build/assets/query-context-B-PgE00D.js +1 -0
  35. data/app/assets/ahoy_analytics/build/assets/remote-details-dialog-DDTcKaM5.js +1 -0
  36. data/app/assets/ahoy_analytics/build/assets/show-CCRicksg.js +1 -0
  37. data/app/assets/ahoy_analytics/build/assets/simple-tabs-D6G6Bs0k.js +1 -0
  38. data/app/assets/ahoy_analytics/build/assets/site-context-BNteYRlR.js +1 -0
  39. data/app/assets/ahoy_analytics/build/assets/sources-panel-DyB21hxD.js +1 -0
  40. data/app/assets/ahoy_analytics/build/assets/top-bar-FSiLBjq6.js +1 -0
  41. data/app/assets/ahoy_analytics/build/assets/top-stats-context-DU15P9jS.js +1 -0
  42. data/app/assets/ahoy_analytics/build/assets/use-debounce-VBpXQRL8.js +1 -0
  43. data/app/assets/ahoy_analytics/build/assets/user-context-DbYteluY.js +1 -0
  44. data/app/assets/ahoy_analytics/build/assets/visitor-globe-BWLDihid.js +4789 -0
  45. data/app/assets/ahoy_analytics/build/assets/visitor-graph-uKXjLvcu.js +1 -0
  46. data/app/assets/ahoy_analytics/images/icon/browser/brave.svg +1 -0
  47. data/app/assets/ahoy_analytics/images/icon/browser/chrome.svg +1 -0
  48. data/app/assets/ahoy_analytics/images/icon/browser/chromium.svg +1 -0
  49. data/app/assets/ahoy_analytics/images/icon/browser/duckduckgo.svg +2151 -0
  50. data/app/assets/ahoy_analytics/images/icon/browser/edge.svg +1 -0
  51. data/app/assets/ahoy_analytics/images/icon/browser/fallback.svg +5 -0
  52. data/app/assets/ahoy_analytics/images/icon/browser/firefox.svg +1 -0
  53. data/app/assets/ahoy_analytics/images/icon/browser/opera.svg +1 -0
  54. data/app/assets/ahoy_analytics/images/icon/browser/safari.png +0 -0
  55. data/app/assets/ahoy_analytics/images/icon/browser/samsung-internet.svg +1 -0
  56. data/app/assets/ahoy_analytics/images/icon/browser/uc.svg +1 -0
  57. data/app/assets/ahoy_analytics/images/icon/browser/vivaldi.svg +1 -0
  58. data/app/assets/ahoy_analytics/images/icon/browser/yandex.png +0 -0
  59. data/app/assets/ahoy_analytics/images/icon/os/android.png +0 -0
  60. data/app/assets/ahoy_analytics/images/icon/os/chrome_os.png +0 -0
  61. data/app/assets/ahoy_analytics/images/icon/os/fallback.svg +5 -0
  62. data/app/assets/ahoy_analytics/images/icon/os/fedora.png +0 -0
  63. data/app/assets/ahoy_analytics/images/icon/os/freebsd.png +0 -0
  64. data/app/assets/ahoy_analytics/images/icon/os/gnu_linux.png +0 -0
  65. data/app/assets/ahoy_analytics/images/icon/os/ios.png +0 -0
  66. data/app/assets/ahoy_analytics/images/icon/os/ipad_os.png +0 -0
  67. data/app/assets/ahoy_analytics/images/icon/os/mac.png +0 -0
  68. data/app/assets/ahoy_analytics/images/icon/os/ubuntu.png +0 -0
  69. data/app/assets/ahoy_analytics/images/icon/os/windows.png +0 -0
  70. data/app/assets/stylesheets/ahoy_analytics/application.css +15 -0
  71. data/app/channels/ahoy_analytics/analytics_channel.rb +9 -0
  72. data/app/controllers/ahoy_analytics/analytics_controller.rb +9 -0
  73. data/app/controllers/ahoy_analytics/application_controller.rb +8 -0
  74. data/app/controllers/ahoy_analytics/assets_controller.rb +46 -0
  75. data/app/controllers/ahoy_analytics/base_controller.rb +285 -0
  76. data/app/controllers/ahoy_analytics/behaviors_controller.rb +14 -0
  77. data/app/controllers/ahoy_analytics/devices_controller.rb +14 -0
  78. data/app/controllers/ahoy_analytics/export_controller.rb +12 -0
  79. data/app/controllers/ahoy_analytics/live_controller.rb +9 -0
  80. data/app/controllers/ahoy_analytics/locations_controller.rb +14 -0
  81. data/app/controllers/ahoy_analytics/main_graph_controller.rb +10 -0
  82. data/app/controllers/ahoy_analytics/pages_controller.rb +14 -0
  83. data/app/controllers/ahoy_analytics/referrers_controller.rb +34 -0
  84. data/app/controllers/ahoy_analytics/search_terms_controller.rb +47 -0
  85. data/app/controllers/ahoy_analytics/sources_controller.rb +14 -0
  86. data/app/controllers/ahoy_analytics/top_stats_controller.rb +13 -0
  87. data/app/controllers/concerns/ahoy_analytics/set_current_request.rb +17 -0
  88. data/app/frontend/components/analytics/hex-highlights.tsx +165 -0
  89. data/app/frontend/components/analytics/hex-land-layer.tsx +61 -0
  90. data/app/frontend/components/analytics/metric-card.tsx +138 -0
  91. data/app/frontend/components/analytics/sessions-by-location.tsx +62 -0
  92. data/app/frontend/components/analytics/visitor-globe.tsx +424 -0
  93. data/app/frontend/components/ui/accordion.tsx +64 -0
  94. data/app/frontend/components/ui/alert.tsx +66 -0
  95. data/app/frontend/components/ui/avatar.tsx +53 -0
  96. data/app/frontend/components/ui/badge.tsx +46 -0
  97. data/app/frontend/components/ui/button.tsx +62 -0
  98. data/app/frontend/components/ui/calendar.tsx +212 -0
  99. data/app/frontend/components/ui/card.tsx +91 -0
  100. data/app/frontend/components/ui/checkbox.tsx +32 -0
  101. data/app/frontend/components/ui/dropdown-menu.tsx +255 -0
  102. data/app/frontend/components/ui/input.tsx +21 -0
  103. data/app/frontend/components/ui/label.tsx +22 -0
  104. data/app/frontend/components/ui/popover.tsx +46 -0
  105. data/app/frontend/components/ui/select.tsx +183 -0
  106. data/app/frontend/components/ui/separator.tsx +26 -0
  107. data/app/frontend/components/ui/sheet.tsx +139 -0
  108. data/app/frontend/components/ui/sidebar.tsx +726 -0
  109. data/app/frontend/components/ui/skeleton.tsx +13 -0
  110. data/app/frontend/components/ui/sonner.tsx +33 -0
  111. data/app/frontend/components/ui/tooltip.tsx +59 -0
  112. data/app/frontend/data/countries-110m.json +1 -0
  113. data/app/frontend/data/globe-data.json +1 -0
  114. data/app/frontend/entrypoints/analytics-tracker.ts +680 -0
  115. data/app/frontend/entrypoints/analytics-ui.tsx +26 -0
  116. data/app/frontend/entrypoints/analytics.css +77 -0
  117. data/app/frontend/layouts/analytics-layout.tsx +28 -0
  118. data/app/frontend/lib/cable.ts +13 -0
  119. data/app/frontend/lib/geocode.ts +65 -0
  120. data/app/frontend/lib/utils.ts +6 -0
  121. data/app/frontend/pages/admin/analytics/api.ts +221 -0
  122. data/app/frontend/pages/admin/analytics/hooks/use-debounce.ts +36 -0
  123. data/app/frontend/pages/admin/analytics/last-load-context.tsx +29 -0
  124. data/app/frontend/pages/admin/analytics/lib/base-path.ts +28 -0
  125. data/app/frontend/pages/admin/analytics/lib/dialog-path.ts +242 -0
  126. data/app/frontend/pages/admin/analytics/lib/number-formatter.ts +100 -0
  127. data/app/frontend/pages/admin/analytics/live.tsx +608 -0
  128. data/app/frontend/pages/admin/analytics/query-context.tsx +61 -0
  129. data/app/frontend/pages/admin/analytics/show.tsx +40 -0
  130. data/app/frontend/pages/admin/analytics/site-context.tsx +22 -0
  131. data/app/frontend/pages/admin/analytics/top-stats-context.tsx +37 -0
  132. data/app/frontend/pages/admin/analytics/types.ts +161 -0
  133. data/app/frontend/pages/admin/analytics/ui/analytics-dashboard.tsx +60 -0
  134. data/app/frontend/pages/admin/analytics/ui/behaviors-panel.tsx +456 -0
  135. data/app/frontend/pages/admin/analytics/ui/date-range-dialog.tsx +173 -0
  136. data/app/frontend/pages/admin/analytics/ui/details-button.tsx +33 -0
  137. data/app/frontend/pages/admin/analytics/ui/devices-panel.tsx +474 -0
  138. data/app/frontend/pages/admin/analytics/ui/filter-dialog.tsx +558 -0
  139. data/app/frontend/pages/admin/analytics/ui/list-table.tsx +346 -0
  140. data/app/frontend/pages/admin/analytics/ui/locations-panel.tsx +566 -0
  141. data/app/frontend/pages/admin/analytics/ui/pages-panel.tsx +207 -0
  142. data/app/frontend/pages/admin/analytics/ui/panel-tabs.tsx +65 -0
  143. data/app/frontend/pages/admin/analytics/ui/remote-details-dialog.tsx +356 -0
  144. data/app/frontend/pages/admin/analytics/ui/simple-tabs.tsx +54 -0
  145. data/app/frontend/pages/admin/analytics/ui/sources-panel.tsx +771 -0
  146. data/app/frontend/pages/admin/analytics/ui/top-bar.tsx +793 -0
  147. data/app/frontend/pages/admin/analytics/ui/visitor-graph.tsx +891 -0
  148. data/app/frontend/pages/admin/analytics/user-context.tsx +22 -0
  149. data/app/frontend/styles/shared.css +156 -0
  150. data/app/helpers/ahoy_analytics/application_helper.rb +96 -0
  151. data/app/jobs/ahoy_analytics/application_job.rb +4 -0
  152. data/app/jobs/ahoy_analytics/update_job.rb +12 -0
  153. data/app/mailers/ahoy_analytics/application_mailer.rb +6 -0
  154. data/app/models/ahoy/event/filters.rb +7 -0
  155. data/app/models/ahoy/event.rb +9 -0
  156. data/app/models/ahoy/visit/cache_key.rb +15 -0
  157. data/app/models/ahoy/visit/constants.rb +11 -0
  158. data/app/models/ahoy/visit/devices.rb +144 -0
  159. data/app/models/ahoy/visit/export.rb +24 -0
  160. data/app/models/ahoy/visit/filters.rb +286 -0
  161. data/app/models/ahoy/visit/imports.rb +36 -0
  162. data/app/models/ahoy/visit/locations.rb +276 -0
  163. data/app/models/ahoy/visit/metrics.rb +473 -0
  164. data/app/models/ahoy/visit/ordering.rb +110 -0
  165. data/app/models/ahoy/visit/pages.rb +533 -0
  166. data/app/models/ahoy/visit/pagination.rb +17 -0
  167. data/app/models/ahoy/visit/ranges.rb +227 -0
  168. data/app/models/ahoy/visit/series.rb +177 -0
  169. data/app/models/ahoy/visit/sources.rb +418 -0
  170. data/app/models/ahoy/visit/url_labels.rb +32 -0
  171. data/app/models/ahoy/visit.rb +143 -0
  172. data/app/models/ahoy_analytics/application_record.rb +5 -0
  173. data/app/models/ahoy_analytics/current.rb +8 -0
  174. data/app/models/ahoy_analytics/funnel.rb +16 -0
  175. data/app/models/ahoy_analytics/imported_entry_page.rb +5 -0
  176. data/app/models/ahoy_analytics/imported_exit_page.rb +5 -0
  177. data/app/models/ahoy_analytics/imported_page.rb +5 -0
  178. data/app/models/ahoy_analytics/live_stats.rb +152 -0
  179. data/app/models/ahoy_analytics/setting.rb +19 -0
  180. data/app/models/analytics/source_catalog.rb +48 -0
  181. data/app/views/layouts/ahoy_analytics/application.html.erb +15 -0
  182. data/config/routes.rb +21 -0
  183. data/config/vite.json +22 -0
  184. data/db/migrate/20251006104056_create_ahoy_visits_and_events.rb +62 -0
  185. data/db/migrate/20251006105012_add_analytics_fields_to_ahoy_visits.rb +11 -0
  186. data/db/migrate/20251012090000_create_analytics_funnels_and_imports.rb +52 -0
  187. data/db/migrate/20251013021500_add_analytics_indexes.rb +14 -0
  188. data/lib/ahoy_analytics/ahoy_store.rb +429 -0
  189. data/lib/ahoy_analytics/asset_manifest.rb +56 -0
  190. data/lib/ahoy_analytics/device_bucket.rb +39 -0
  191. data/lib/ahoy_analytics/engine.rb +55 -0
  192. data/lib/ahoy_analytics/maxmind_geo.rb +77 -0
  193. data/lib/ahoy_analytics/version.rb +3 -0
  194. data/lib/ahoy_analytics.rb +52 -0
  195. data/lib/generators/ahoy_analytics/install/install_generator.rb +111 -0
  196. data/lib/generators/ahoy_analytics/install/templates/initializer.rb +28 -0
  197. data/lib/tasks/ahoy_analytics_tasks.rake +4 -0
  198. metadata +352 -0
@@ -0,0 +1 @@
1
+ import{j as O}from"./jsx-runtime-u17CrQMm.js";import{L as vt,C as yt,a as $t,b as xt,P as Mt,c as bt,p as St,d as Dt,e as Ct,i as wt}from"./index-B1K1NTKT.js";import{g as ut,r as P}from"./analytics-ui-DMSkNqd6.js";import{B as pt}from"./button-JVCrlR4s.js";import{D as Yt,a as Lt,b as Ot,c as _t}from"./dropdown-menu-Adj3O5fh.js";import{c as Nt}from"./index-vX97OY1J.js";import{u as gt,k as Tt,l as It}from"./query-context-B-PgE00D.js";import{useLastLoadContext as kt}from"./last-load-context-De5uA95L.js";import{useSiteContext as jt}from"./site-context-BNteYRlR.js";import{useTopStatsContext as Ht}from"./top-stats-context-DU15P9jS.js";import{C as Et}from"./Combination-BpSXUjp9.js";/* empty css */import"./index-BcHeb-Rh.js";import"./index-DzpzLoG4.js";import"./createLucideIcon-BGzacY2v.js";var rt={exports:{}},Rt=rt.exports,lt;function Ft(){return lt||(lt=1,(function(t,l){(function(i,f){t.exports=f()})(Rt,(function(){var i=1e3,f=6e4,$=36e5,x="millisecond",v="second",u="minute",a="hour",M="day",d="week",C="month",p="quarter",y="year",s="date",o="Invalid Date",S=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,I=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,Y={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(m){var r=["th","st","nd","rd"],e=m%100;return"["+m+(r[(e-20)%10]||r[e]||r[0])+"]"}},w=function(m,r,e){var c=String(m);return!c||c.length>=r?m:""+Array(r+1-c.length).join(e)+m},k={s:w,z:function(m){var r=-m.utcOffset(),e=Math.abs(r),c=Math.floor(e/60),n=e%60;return(r<=0?"+":"-")+w(c,2,"0")+":"+w(n,2,"0")},m:function m(r,e){if(r.date()<e.date())return-m(e,r);var c=12*(e.year()-r.year())+(e.month()-r.month()),n=r.clone().add(c,C),h=e-n<0,g=r.clone().add(c+(h?-1:1),C);return+(-(c+(e-n)/(h?n-g:g-n))||0)},a:function(m){return m<0?Math.ceil(m)||0:Math.floor(m)},p:function(m){return{M:C,y,w:d,d:M,D:s,h:a,m:u,s:v,ms:x,Q:p}[m]||String(m||"").toLowerCase().replace(/s$/,"")},u:function(m){return m===void 0}},N="en",F={};F[N]=Y;var D="$isDayjsObject",_=function(m){return m instanceof X||!(!m||!m[D])},j=function m(r,e,c){var n;if(!r)return N;if(typeof r=="string"){var h=r.toLowerCase();F[h]&&(n=h),e&&(F[h]=e,n=h);var g=r.split("-");if(!n&&g.length>1)return m(g[0])}else{var T=r.name;F[T]=r,n=T}return!c&&n&&(N=n),n||!c&&N},L=function(m,r){if(_(m))return m.clone();var e=typeof r=="object"?r:{};return e.date=m,e.args=arguments,new X(e)},b=k;b.l=j,b.i=_,b.w=function(m,r){return L(m,{locale:r.$L,utc:r.$u,x:r.$x,$offset:r.$offset})};var X=(function(){function m(e){this.$L=j(e.locale,null,!0),this.parse(e),this.$x=this.$x||e.x||{},this[D]=!0}var r=m.prototype;return r.parse=function(e){this.$d=(function(c){var n=c.date,h=c.utc;if(n===null)return new Date(NaN);if(b.u(n))return new Date;if(n instanceof Date)return new Date(n);if(typeof n=="string"&&!/Z$/i.test(n)){var g=n.match(S);if(g){var T=g[2]-1||0,E=(g[7]||"0").substring(0,3);return h?new Date(Date.UTC(g[1],T,g[3]||1,g[4]||0,g[5]||0,g[6]||0,E)):new Date(g[1],T,g[3]||1,g[4]||0,g[5]||0,g[6]||0,E)}}return new Date(n)})(e),this.init()},r.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},r.$utils=function(){return b},r.isValid=function(){return this.$d.toString()!==o},r.isSame=function(e,c){var n=L(e);return this.startOf(c)<=n&&n<=this.endOf(c)},r.isAfter=function(e,c){return L(e)<this.startOf(c)},r.isBefore=function(e,c){return this.endOf(c)<L(e)},r.$g=function(e,c,n){return b.u(e)?this[c]:this.set(n,e)},r.unix=function(){return Math.floor(this.valueOf()/1e3)},r.valueOf=function(){return this.$d.getTime()},r.startOf=function(e,c){var n=this,h=!!b.u(c)||c,g=b.p(e),T=function(A,z){var B=b.w(n.$u?Date.UTC(n.$y,z,A):new Date(n.$y,z,A),n);return h?B:B.endOf(M)},E=function(A,z){return b.w(n.toDate()[A].apply(n.toDate("s"),(h?[0,0,0,0]:[23,59,59,999]).slice(z)),n)},H=this.$W,R=this.$M,U=this.$D,q="set"+(this.$u?"UTC":"");switch(g){case y:return h?T(1,0):T(31,11);case C:return h?T(1,R):T(0,R+1);case d:var Z=this.$locale().weekStart||0,G=(H<Z?H+7:H)-Z;return T(h?U-G:U+(6-G),R);case M:case s:return E(q+"Hours",0);case a:return E(q+"Minutes",1);case u:return E(q+"Seconds",2);case v:return E(q+"Milliseconds",3);default:return this.clone()}},r.endOf=function(e){return this.startOf(e,!1)},r.$set=function(e,c){var n,h=b.p(e),g="set"+(this.$u?"UTC":""),T=(n={},n[M]=g+"Date",n[s]=g+"Date",n[C]=g+"Month",n[y]=g+"FullYear",n[a]=g+"Hours",n[u]=g+"Minutes",n[v]=g+"Seconds",n[x]=g+"Milliseconds",n)[h],E=h===M?this.$D+(c-this.$W):c;if(h===C||h===y){var H=this.clone().set(s,1);H.$d[T](E),H.init(),this.$d=H.set(s,Math.min(this.$D,H.daysInMonth())).$d}else T&&this.$d[T](E);return this.init(),this},r.set=function(e,c){return this.clone().$set(e,c)},r.get=function(e){return this[b.p(e)]()},r.add=function(e,c){var n,h=this;e=Number(e);var g=b.p(c),T=function(R){var U=L(h);return b.w(U.date(U.date()+Math.round(R*e)),h)};if(g===C)return this.set(C,this.$M+e);if(g===y)return this.set(y,this.$y+e);if(g===M)return T(1);if(g===d)return T(7);var E=(n={},n[u]=f,n[a]=$,n[v]=i,n)[g]||1,H=this.$d.getTime()+e*E;return b.w(H,this)},r.subtract=function(e,c){return this.add(-1*e,c)},r.format=function(e){var c=this,n=this.$locale();if(!this.isValid())return n.invalidDate||o;var h=e||"YYYY-MM-DDTHH:mm:ssZ",g=b.z(this),T=this.$H,E=this.$m,H=this.$M,R=n.weekdays,U=n.months,q=n.meridiem,Z=function(z,B,K,tt){return z&&(z[B]||z(c,h))||K[B].slice(0,tt)},G=function(z){return b.s(T%12||12,z,"0")},A=q||function(z,B,K){var tt=z<12?"AM":"PM";return K?tt.toLowerCase():tt};return h.replace(I,(function(z,B){return B||(function(K){switch(K){case"YY":return String(c.$y).slice(-2);case"YYYY":return b.s(c.$y,4,"0");case"M":return H+1;case"MM":return b.s(H+1,2,"0");case"MMM":return Z(n.monthsShort,H,U,3);case"MMMM":return Z(U,H);case"D":return c.$D;case"DD":return b.s(c.$D,2,"0");case"d":return String(c.$W);case"dd":return Z(n.weekdaysMin,c.$W,R,2);case"ddd":return Z(n.weekdaysShort,c.$W,R,3);case"dddd":return R[c.$W];case"H":return String(T);case"HH":return b.s(T,2,"0");case"h":return G(1);case"hh":return G(2);case"a":return A(T,E,!0);case"A":return A(T,E,!1);case"m":return String(E);case"mm":return b.s(E,2,"0");case"s":return String(c.$s);case"ss":return b.s(c.$s,2,"0");case"SSS":return b.s(c.$ms,3,"0");case"Z":return g}return null})(z)||g.replace(":","")}))},r.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},r.diff=function(e,c,n){var h,g=this,T=b.p(c),E=L(e),H=(E.utcOffset()-this.utcOffset())*f,R=this-E,U=function(){return b.m(g,E)};switch(T){case y:h=U()/12;break;case C:h=U();break;case p:h=U()/3;break;case d:h=(R-H)/6048e5;break;case M:h=(R-H)/864e5;break;case a:h=R/$;break;case u:h=R/f;break;case v:h=R/i;break;default:h=R}return n?h:b.a(h)},r.daysInMonth=function(){return this.endOf(C).$D},r.$locale=function(){return F[this.$L]},r.locale=function(e,c){if(!e)return this.$L;var n=this.clone(),h=j(e,c,!0);return h&&(n.$L=h),n},r.clone=function(){return b.w(this.$d,this)},r.toDate=function(){return new Date(this.valueOf())},r.toJSON=function(){return this.isValid()?this.toISOString():null},r.toISOString=function(){return this.$d.toISOString()},r.toString=function(){return this.$d.toUTCString()},m})(),W=X.prototype;return L.prototype=W,[["$ms",x],["$s",v],["$m",u],["$H",a],["$W",M],["$M",C],["$y",y],["$D",s]].forEach((function(m){W[m[1]]=function(r){return this.$g(r,m[0],m[1])}})),L.extend=function(m,r){return m.$i||(m(r,X,L),m.$i=!0),L},L.locale=j,L.isDayjs=_,L.unix=function(m){return L(1e3*m)},L.en=F[N],L.Ls=F,L.p={},L}))})(rt)),rt.exports}var At=Ft();const V=ut(At);var nt={exports:{}},zt=nt.exports,ft;function Ut(){return ft||(ft=1,(function(t,l){(function(i,f){t.exports=f()})(zt,(function(){var i="minute",f=/[+-]\d\d(?::?\d\d)?/g,$=/([+-]|\d\d)/g;return function(x,v,u){var a=v.prototype;u.utc=function(o){var S={date:o,utc:!0,args:arguments};return new v(S)},a.utc=function(o){var S=u(this.toDate(),{locale:this.$L,utc:!0});return o?S.add(this.utcOffset(),i):S},a.local=function(){return u(this.toDate(),{locale:this.$L,utc:!1})};var M=a.parse;a.parse=function(o){o.utc&&(this.$u=!0),this.$utils().u(o.$offset)||(this.$offset=o.$offset),M.call(this,o)};var d=a.init;a.init=function(){if(this.$u){var o=this.$d;this.$y=o.getUTCFullYear(),this.$M=o.getUTCMonth(),this.$D=o.getUTCDate(),this.$W=o.getUTCDay(),this.$H=o.getUTCHours(),this.$m=o.getUTCMinutes(),this.$s=o.getUTCSeconds(),this.$ms=o.getUTCMilliseconds()}else d.call(this)};var C=a.utcOffset;a.utcOffset=function(o,S){var I=this.$utils().u;if(I(o))return this.$u?0:I(this.$offset)?C.call(this):this.$offset;if(typeof o=="string"&&(o=(function(N){N===void 0&&(N="");var F=N.match(f);if(!F)return null;var D=(""+F[0]).match($)||["-",0,0],_=D[0],j=60*+D[1]+ +D[2];return j===0?0:_==="+"?j:-j})(o),o===null))return this;var Y=Math.abs(o)<=16?60*o:o;if(Y===0)return this.utc(S);var w=this.clone();if(S)return w.$offset=Y,w.$u=!1,w;var k=this.$u?this.toDate().getTimezoneOffset():-1*this.utcOffset();return(w=this.local().add(Y+k,i)).$offset=Y,w.$x.$localOffset=k,w};var p=a.format;a.format=function(o){var S=o||(this.$u?"YYYY-MM-DDTHH:mm:ss[Z]":"");return p.call(this,S)},a.valueOf=function(){var o=this.$utils().u(this.$offset)?0:this.$offset+(this.$x.$localOffset||this.$d.getTimezoneOffset());return this.$d.valueOf()-6e4*o},a.isUTC=function(){return!!this.$u},a.toISOString=function(){return this.toDate().toISOString()},a.toString=function(){return this.toDate().toUTCString()};var y=a.toDate;a.toDate=function(o){return o==="s"&&this.$offset?u(this.format("YYYY-MM-DD HH:mm:ss:SSS")).toDate():y.call(this)};var s=a.diff;a.diff=function(o,S,I){if(o&&this.$u===o.$u)return s.call(this,o,S,I);var Y=this.local(),w=u(o).local();return s.call(Y,w,S,I)}}}))})(nt)),nt.exports}var Bt=Ut();const Pt=ut(Bt);var ot={exports:{}},Vt=ot.exports,dt;function Wt(){return dt||(dt=1,(function(t,l){(function(i,f){t.exports=f()})(Vt,(function(){var i={year:0,month:1,day:2,hour:3,minute:4,second:5},f={};return function($,x,v){var u,a=function(p,y,s){s===void 0&&(s={});var o=new Date(p),S=(function(I,Y){Y===void 0&&(Y={});var w=Y.timeZoneName||"short",k=I+"|"+w,N=f[k];return N||(N=new Intl.DateTimeFormat("en-US",{hour12:!1,timeZone:I,year:"numeric",month:"2-digit",day:"2-digit",hour:"2-digit",minute:"2-digit",second:"2-digit",timeZoneName:w}),f[k]=N),N})(y,s);return S.formatToParts(o)},M=function(p,y){for(var s=a(p,y),o=[],S=0;S<s.length;S+=1){var I=s[S],Y=I.type,w=I.value,k=i[Y];k>=0&&(o[k]=parseInt(w,10))}var N=o[3],F=N===24?0:N,D=o[0]+"-"+o[1]+"-"+o[2]+" "+F+":"+o[4]+":"+o[5]+":000",_=+p;return(v.utc(D).valueOf()-(_-=_%1e3))/6e4},d=x.prototype;d.tz=function(p,y){p===void 0&&(p=u);var s,o=this.utcOffset(),S=this.toDate(),I=S.toLocaleString("en-US",{timeZone:p}),Y=Math.round((S-new Date(I))/1e3/60),w=15*-Math.round(S.getTimezoneOffset()/15)-Y;if(!Number(w))s=this.utcOffset(0,y);else if(s=v(I,{locale:this.$L}).$set("millisecond",this.$ms).utcOffset(w,!0),y){var k=s.utcOffset();s=s.add(o-k,"minute")}return s.$x.$timezone=p,s},d.offsetName=function(p){var y=this.$x.$timezone||v.tz.guess(),s=a(this.valueOf(),y,{timeZoneName:p}).find((function(o){return o.type.toLowerCase()==="timezonename"}));return s&&s.value};var C=d.startOf;d.startOf=function(p,y){if(!this.$x||!this.$x.$timezone)return C.call(this,p,y);var s=v(this.format("YYYY-MM-DD HH:mm:ss:SSS"),{locale:this.$L});return C.call(s,p,y).tz(this.$x.$timezone,!0)},v.tz=function(p,y,s){var o=s&&y,S=s||y||u,I=M(+v(),S);if(typeof p!="string")return v(p).tz(S);var Y=(function(F,D,_){var j=F-60*D*1e3,L=M(j,_);if(D===L)return[j,D];var b=M(j-=60*(L-D)*1e3,_);return L===b?[j,L]:[F-60*Math.min(L,b)*1e3,Math.max(L,b)]})(v.utc(p,o).valueOf(),I,S),w=Y[0],k=Y[1],N=v(w).utcOffset(k);return N.$x.$timezone=S,N},v.tz.guess=function(){return Intl.DateTimeFormat().resolvedOptions().timeZone},v.tz.setDefault=function(p){u=p}}}))})(ot)),ot.exports}var Zt=Wt();const qt=ut(Zt);function Gt({className:t,...l}){return O.jsx("div",{"data-slot":"skeleton",className:Nt("bg-accent animate-pulse rounded-md",t),...l})}V.extend(Pt);V.extend(qt);yt.register($t,xt,Mt,bt,St,Dt,Ct,wt);const mt={minute:"Minutes",hour:"Hours",day:"Days",week:"Weeks",month:"Months"},st="admin.analytics";function Xt(){return new Intl.DateTimeFormat(navigator.language,{hour:"numeric"}).resolvedOptions().hour12??!1}function J(t,l){const i=V.utc(t).tz(l);return Xt()?i.format("ha"):i.format("HH:mm")}function Q(t,l,i){const f=V.utc(t).tz(i);return l?f.format("D MMM YY"):f.format("D MMM")}function it(t,l){return V.utc(t).tz(l).format("MMMM YYYY")}function et(t){const l=t.filter(i=>typeof i=="string").map(i=>i.split("-")[0]);return new Set(l).size>1}function $e({initialGraph:t}){const{query:l,updateQuery:i}=gt(),{payload:f,update:$}=Ht(),{touch:x}=kt(),v=jt(),[u,a]=P.useState(t),[M,d]=P.useState(!1),[C,p]=P.useState(()=>t.metric),[y,s]=P.useState(()=>t.interval),o=P.useRef(null),S=P.useRef(null),I=f.graphableMetrics;P.useEffect(()=>{const D=localStorage.getItem(`${st}.${v.domain}.metric`);D&&I.includes(D)&&p(D)},[I,v.domain]);const Y=P.useCallback(async(D,_,j)=>{const L=await Tt(l,{metric:D,interval:_},j.signal);a(L)},[l]);P.useEffect(()=>{const D=new AbortController;return o.current?.abort(),o.current=D,d(!0),It(l,D.signal).then(_=>{$(_),x();const j=(()=>{const b=localStorage.getItem(`${st}.${v.domain}.metric`);return b&&_.graphableMetrics.includes(b)?b:_.graphableMetrics[0]??"visitors"})();p(j);const L=_.interval||y;return s(L),Y(j,L,D)}).catch(_=>{_.name!=="AbortError"&&console.error(_)}).finally(()=>{d(!1)}),()=>D.abort()},[Y,l,v.domain,$]);const w=P.useCallback(D=>{p(D),localStorage.setItem(`${st}.${v.domain}.metric`,D);const _=new AbortController;o.current?.abort(),o.current=_,d(!0),Y(D,y,_).catch(j=>{j.name!=="AbortError"&&console.error(j)}).finally(()=>d(!1))},[Y,y,v.domain]),k=P.useCallback(D=>{s(D);const _=new AbortController;o.current?.abort(),o.current=_,d(!0),Y(C,D,_).catch(j=>{j.name!=="AbortError"&&console.error(j)}).finally(()=>d(!1))},[Y,C]),N=P.useMemo(()=>Qt(u),[u]),F=P.useMemo(()=>Kt({...u,metric:C},l.period,v.timezone,S),[u,C,l.period,v.timezone]);return O.jsx("section",{className:"rounded-xl border border-border bg-card shadow-[0_12px_26px_rgba(7,9,16,0.32)]",children:O.jsxs("div",{className:"space-y-4 p-4 sm:p-6",children:[O.jsx(te,{stats:f.topStats,graphableMetrics:I,selectedMetric:C,onSelectMetric:w,comparingFrom:f.comparingFrom,comparingTo:f.comparingTo,period:l.period,timezone:v.timezone,showComparison:!!(l.comparison&&f.comparingFrom),primaryFrom:f.from,primaryTo:f.to}),O.jsxs("div",{className:"relative mt-4",children:[M&&O.jsx("div",{className:"absolute inset-0 z-10 flex items-center justify-center rounded-xs bg-card/75 backdrop-blur-sm",children:O.jsx(Jt,{})}),O.jsxs("div",{className:"flex justify-end gap-2 pb-2",children:[f.withImportedSwitch.visible&&O.jsx(pt,{variant:l.withImported?"default":"outline",size:"sm",onClick:()=>i(D=>({...D,withImported:!D.withImported})),disabled:!f.withImportedSwitch.togglable,children:l.withImported?"Showing imported":"Show imported"}),O.jsx(ne,{interval:y,onChange:k})]}),O.jsx("div",{className:"h-96",children:O.jsx(vt,{options:F,data:N})})]})]})})}function Jt(){return O.jsxs("div",{className:"flex items-center gap-2 text-sm text-muted-foreground",children:[O.jsx(Gt,{className:"size-6 rounded-full"}),"Loading…"]})}function Qt(t){const l="rgba(56, 189, 248, 1)",i="rgba(56, 189, 248, 0.55)",f="rgba(56, 189, 248, 0.10)",$="rgba(56, 189, 248, 0.08)",x=l,v=f,u=i,a=i,M="rgba(56, 189, 248, 0.9)",d=$,C=[{label:t.metric,data:t.plot,borderColor:x,backgroundColor:p=>{const s=p.chart.ctx.createLinearGradient(0,0,0,300);return s.addColorStop(0,v),s.addColorStop(1,"rgba(101, 116, 205, 0)"),s},tension:0,fill:!0,pointRadius:0,pointBackgroundColor:x,pointHoverBackgroundColor:"rgba(71, 87, 193, 1)",pointBorderColor:"transparent",pointHoverRadius:3,borderWidth:2.25}];return t.comparisonPlot&&C.push({label:"Comparison",data:t.comparisonPlot,borderDash:[5,4],borderColor:u,backgroundColor:p=>{const s=p.chart.ctx.createLinearGradient(0,0,0,300);return s.addColorStop(0,d),s.addColorStop(1,"rgba(101, 116, 205, 0)"),s},tension:0,pointRadius:0,pointBackgroundColor:a,pointHoverBackgroundColor:M,pointBorderColor:"transparent",pointHoverRadius:3,fill:!0,borderWidth:2,yAxisID:"y"}),{labels:t.labels,datasets:C}}function Kt(t,l,i,f){const $={visitors:"Visitors",visits:"Visits",pageviews:"Pageviews",views_per_visit:"Views per visit",bounce_rate:"Bounce rate",visit_duration:"Visit duration"},x=u=>{const a=t.metric;return a==="visit_duration"?ct(u):a==="bounce_rate"||a==="conversion_rate"||a==="scroll_depth"?`${u.toFixed(2)}%`:a==="views_per_visit"?u.toFixed(2):at(u)};return{responsive:!0,maintainAspectRatio:!1,onHover:(u,a,M)=>{if(u.native){const d=M.canvas.getBoundingClientRect();f.current=u.native.clientY-d.top}M.canvas.style.cursor="pointer"},interaction:{mode:"index",intersect:!1},plugins:{legend:{display:!1},tooltip:{enabled:!1,external:u=>{const{chart:a,tooltip:M}=u;let d=a.canvas.parentNode.querySelector(".analytics-tooltip");if(d||(d=document.createElement("div"),d.className="analytics-tooltip",d.style.position="absolute",d.style.pointerEvents="none",d.style.background="rgba(17, 19, 27, 0.95)",d.style.border="1px solid rgba(255,255,255,0.12)",d.style.borderRadius="10px",d.style.padding="10px 12px",d.style.color="rgba(255,255,255,0.9)",d.style.zIndex="60",d.style.minWidth="220px",d.style.boxShadow="0 8px 24px rgba(0,0,0,0.35)",a.canvas.parentNode.appendChild(d)),M.opacity===0){d.style.opacity="0";return}const C=M.dataPoints?.[0]?.dataIndex??0,p=t.labels[C],y=t.comparisonLabels?.[C],s=et(t.labels),o=$[t.metric]||t.metric,S=p?t.interval==="hour"?`${Q(p,s,i)}, ${J(p,i)}`:t.interval==="minute"?J(p,i):t.interval==="month"?it(p,i):Q(p,s,i):"",I=y?t.interval==="hour"?`${Q(y,et(t.comparisonLabels||[]),i)}, ${J(y,i)}`:t.interval==="minute"?J(y,i):t.interval==="month"?it(y,i):Q(y,et(t.comparisonLabels||[]),i):null,Y=Number(t.plot[C]??0),w=t.comparisonPlot?Number(t.comparisonPlot[C]??0):null,k=w&&w!==0?(Y-w)/w*100:null,N=k!=null&&k>=0,F=k==null?"":`${N?"▲":"▼"} ${Math.round(Math.abs(k))}%`,D=N?"#34d399":"#fb7185",_=a.config.data.datasets||[],j=_[0]?.borderColor||"rgba(96,165,250,1)",L=_[1]?.borderColor||"rgba(167,139,250,0.75)",b=x(Y),X=w==null?null:x(w),W=document.createElement("div");W.style.display="flex",W.style.alignItems="center",W.style.gap="12px",W.style.marginBottom="6px";const m=document.createElement("div");if(m.style.fontWeight="800",m.style.fontSize="16px",m.style.lineHeight="1.2",m.textContent=o,W.appendChild(m),k!=null){const A=document.createElement("div");A.style.marginLeft="auto",A.style.fontWeight="600",A.style.color=D,A.textContent=F,W.appendChild(A)}const r=document.createElement("div");r.style.display="grid",r.style.gridTemplateColumns="auto 1fr auto",r.style.gap="6px 10px",r.style.alignItems="center";const e=document.createElement("span");e.style.width="10px",e.style.height="10px",e.style.borderRadius="50%",e.style.background=j,e.style.display="inline-block";const c=document.createElement("div");c.style.opacity="0.85",c.style.fontSize="13px",c.textContent=S;const n=document.createElement("div");if(n.style.fontWeight="800",n.style.fontSize="16px",n.textContent=b,r.appendChild(e),r.appendChild(c),r.appendChild(n),X!=null){const A=document.createElement("span");A.style.width="10px",A.style.height="10px",A.style.borderRadius="50%",A.style.background=L,A.style.display="inline-block",A.style.opacity="0.7";const z=document.createElement("div");z.style.opacity="0.65",z.style.fontSize="13px",z.textContent=I||"";const B=document.createElement("div");B.style.fontWeight="800",B.style.fontSize="16px",B.style.opacity="0.85",B.textContent=X,r.appendChild(A),r.appendChild(z),r.appendChild(B)}d.replaceChildren(W,r);const h=a.canvas.parentNode,{offsetLeft:g,offsetTop:T}=a.canvas;d.style.opacity="1";const E=f.current??M.caretY;let H=g+M.caretX,R=T+E;const U=6,q=h.clientWidth-d.offsetWidth-6,Z=6,G=h.clientHeight-d.offsetHeight-6;H<U&&(H=U),H>q&&(H=q),R<Z&&(R=Z),R>G&&(R=G),d.style.left=H+"px",d.style.top=R+"px"}}},scales:{y:{beginAtZero:!0,ticks:{precision:0,color:"rgba(255, 255, 255, 0.5)",callback:function(u){const a=Number(u);return t.metric==="views_per_visit"?String(Math.round(a)):x(a)}},grid:{color:"rgba(255, 255, 255, 0.06)",drawBorder:!1}},x:{ticks:{maxRotation:0,maxTicksLimit:8,autoSkip:!0,autoSkipPadding:20,color:"rgba(255, 255, 255, 0.5)",callback:function(u){const M=this.getLabelForValue(u);if(!M||M==="__blank__")return"";const d=et(t.labels);if(t.interval==="hour"&&l!=="day"){const C=Q(M,d,i),p=J(M,i);return`${C}, ${p}`}if(t.interval==="minute"&&l!=="realtime")return J(M,i);switch(t.interval){case"minute":case"hour":return J(M,i);case"day":case"week":return Q(M,d,i);case"month":return it(M,i);default:return Q(M,d,i)}}},grid:{display:!1}}}}}function te({stats:t,graphableMetrics:l,selectedMetric:i,onSelectMetric:f,comparingFrom:$,comparingTo:x,period:v="day",timezone:u=V.tz.guess(),showComparison:a=!1,primaryFrom:M,primaryTo:d}){const C=new Set(l),y=t.filter(s=>s.graphMetric!=="currentVisitors").map(s=>{const o=s.graphMetric&&C.has(s.graphMetric),S=o&&s.graphMetric===i,I=["group flex min-w-[140px] flex-1 flex-col gap-1 px-4 py-3 text-left transition",o?"hover:bg-white/5 focus:bg-white/8 focus:outline-hidden":"cursor-default",S?"bg-cyan-400/5":""].filter(Boolean).join(" "),Y=re(v,M,d,u),w=a&&typeof s.comparisonValue=="number"&&!Number.isNaN(s.comparisonValue);let k=null,N=null;if(w){const F={...s,value:s.comparisonValue};k=ht(F),N=ee($,x,v,u)}return O.jsxs("button",{type:"button",className:I,onClick:()=>{o&&s.graphMetric&&f(s.graphMetric)},disabled:!o,children:[O.jsx("span",{className:["text-[11px] font-semibold uppercase tracking-wide w-fit border-b",S?"text-cyan-400/70 border-cyan-400":"text-foreground/60 border-transparent group-hover:text-cyan-400/50"].join(" "),children:s.name}),O.jsx("span",{className:"text-xl font-bold tabular-nums text-foreground/90",children:ht(s)}),Y&&a?O.jsx("span",{className:"text-xs text-foreground/60",children:Y}):null,k?O.jsxs(O.Fragment,{children:[O.jsx("span",{className:"text-xl font-bold tabular-nums text-foreground/60",children:k}),N?O.jsx("span",{className:"text-xs text-foreground/60",children:N}):null]}):null,!a&&s.change!=null?O.jsxs("span",{className:`inline-flex items-center gap-1 text-xs font-medium ${s.change>=0?"text-emerald-400":"text-rose-400"}`,children:[s.change>=0?"▲":"▼"," ",Math.round(Math.abs(s.change)*1e3)/10,"%"]}):null]},s.name)});return O.jsx("div",{className:"flex flex-wrap divide-y divide-white/12 border-b border-white/12 sm:divide-y-0 sm:divide-x",children:y})}function at(t){if(t>=1e3&&t<1e6){const u=t/1e3;return u===Math.floor(u)||t>=1e5?Math.floor(u)+"k":Math.floor(u*10)/10+"k"}else if(t>=1e6&&t<1e9){const u=t/1e6;return u===Math.floor(u)||t>=1e8?Math.floor(u)+"M":Math.floor(u*10)/10+"M"}else if(t>=1e9){const u=t/1e9;return u===Math.floor(u)||t>=1e11?Math.floor(u)+"B":Math.floor(u*10)/10+"B"}else return t.toString()}function ct(t){const l=Math.floor(t/60/60),i=Math.floor(t/60)%60,f=Math.floor(t-i*60-l*60*60);if(l>0)return`${l}h ${i}m ${f}s`;if(i>0){const $=f.toString().padStart(2,"0");return`${i}m ${$}s`}else return`${f}s`}function ht(t){const l=Number(t.value??0);switch((t.graphMetric||"").toString().toLowerCase()){case"bounce_rate":case"conversion_rate":case"scroll_depth":return`${l.toFixed(2)}%`;case"visit_duration":return ct(l);case"views_per_visit":return l.toFixed(2);case"visitors":case"visits":case"pageviews":return at(l);default:{const f=(t.name||"").toLowerCase();return f.includes("rate")||f.includes("scroll")?`${l.toFixed(2)}%`:f.includes("duration")||f.includes("time on")?ct(l):f.includes("views per")?l.toFixed(2):at(l)}}}function ee(t,l,i="day",f=V.tz.guess()){if(!t&&!l)return"";const $=t?V.utc(t).tz(f):null,x=l?V.utc(l).tz(f):null,v=a=>a.format("ddd, D MMM YYYY"),u=a=>a.format("MMM YYYY");return i==="day"&&$?v($):i==="month"&&$&&x&&$.date()===1&&x.endOf("month").isSame(x)?u($):i==="year"&&$&&x&&$.month()===0&&$.date()===1&&x.month()===11&&x.date()===31?$.format("YYYY"):$&&x?`${$.format("D MMM YYYY")} – ${x.format("D MMM YYYY")}`:$?v($):x?v(x):""}function re(t,l,i,f=V.tz.guess()){if(!t)return"";if(l){const $=V.utc(l).tz(f),x=i?V.utc(i).tz(f):null;switch(t){case"day":return $.format("ddd, D MMM");case"month":return $.format("MMM YYYY");case"year":return $.format("YYYY");default:return x?`${$.format("D MMM YYYY")} – ${x.format("D MMM YYYY")}`:$.format("D MMM YYYY")}}return""}function ne({interval:t,onChange:l}){const{query:i}=gt(),f=(()=>{switch(i.period){case"realtime":return["minute"];case"day":return["minute","hour"];case"7d":return["hour","day"];case"28d":case"30d":return["day","week"];case"91d":return["day","week","month"];case"month":return["day","week"];case"12mo":case"year":case"all":case"custom":return["day","week","month"];default:return["day"]}})(),$=mt[t]||t;return O.jsxs(Yt,{children:[O.jsx(Lt,{asChild:!0,children:O.jsxs(pt,{variant:"link",size:"sm",className:"text-primary",children:[$,O.jsx(Et,{className:"ml-1 h-4 w-4"})]})}),O.jsx(Ot,{align:"end",children:f.map(x=>O.jsx(_t,{onClick:()=>l(x),"data-selected":x===t,children:O.jsx("span",{className:x===t?"font-semibold":"",children:mt[x]})},x))})]})}export{$e as default};
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 2770 2770"><linearGradient id="a" y1="51%" y2="51%"><stop offset=".4" stop-color="#f50"/><stop offset=".6" stop-color="#ff2000"/></linearGradient><linearGradient id="b" x1="2%" y1="51%" y2="51%"><stop offset="0" stop-color="#ff452a"/><stop offset="1" stop-color="#ff2000"/></linearGradient><path fill="url(#a)" d="M2395 723l60-147-170-176c-92-92-288-38-288-38l-222-252H992L769 363s-196-53-288 37L311 575l60 147-75 218 250 953c52 204 87 283 234 387l457 310c44 27 98 74 147 74s103-47 147-74l457-310c147-104 182-183 234-387l250-953z"/><path fill="#fff" d="M1935 524s287 347 287 420c0 75-36 94-72 133l-215 230c-20 20-63 54-38 113 25 60 60 134 20 210-40 77-110 128-155 120a820 820 0 01-190-90c-38-25-160-126-160-165s126-110 150-124c23-16 130-78 132-102s2-30-30-90-88-140-80-192c10-52 100-80 167-105l207-78c16-8 12-15-36-20-48-4-183-22-244-5s-163 43-173 57c-8 14-16 14-7 62l58 315c4 40 12 67-30 77-44 10-117 27-142 27s-99-17-142-27-35-37-30-77c4-40 48-268 57-315 10-48 1-48-7-62-10-14-113-40-174-57-60-17-196 1-244 6-48 4-52 10-36 20l207 77c66 25 158 53 167 105 10 53-47 132-80 192s-32 66-30 90 110 86 132 102c24 15 150 85 150 124s-119 140-159 165a820 820 0 01-190 90c-45 8-115-43-156-120-40-76-4-150 20-210 25-60-17-92-38-113l-215-230c-35-37-71-57-71-131s287-420 287-420l273 44c32 0 103-27 168-50 65-20 110-22 110-22s44 0 110 22 136 50 168 50c33 0 275-47 275-47zm-215 1328c18 10 7 32-10 44l-254 198c-20 20-52 50-73 50s-52-30-73-50a13200 13200 0 00-255-198c-16-12-27-33-10-44l150-80a870 870 0 01188-73c15 0 110 34 187 73l150 80z"/><path fill="url(#b)" d="M1999 363l-224-253H992L769 363s-196-53-288 37c0 0 260-23 350 123l276 47c32 0 103-27 168-50 65-20 110-22 110-22s44 0 110 22 136 50 168 50c33 0 275-47 275-47 90-146 350-123 350-123-92-92-288-38-288-38"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-10 -10 276 276"><linearGradient id="a" x1="145" x2="34" y1="253" y2="61" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1e8e3e"/><stop offset="1" stop-color="#34a853"/></linearGradient><linearGradient id="b" x1="111" x2="222" y1="254" y2="62" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#fcc934"/><stop offset="1" stop-color="#fbbc04"/></linearGradient><linearGradient id="c" x1="17" x2="239" y1="80" y2="80" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#d93025"/><stop offset="1" stop-color="#ea4335"/></linearGradient><circle cx="128" cy="128" r="64" fill="#fff"/><path fill="url(#a)" d="M96 183.4A63.7 63.7 0 0 1 72.6 160L17.2 64A128 128 0 0 0 128 256l55.4-96A64 64 0 0 1 96 183.4Z"/><path fill="url(#b)" d="M192 128a63.7 63.7 0 0 1-8.6 32L128 256A128 128 0 0 0 238.9 64h-111a64 64 0 0 1 64 64Z"/><circle cx="128" cy="128" r="52" fill="#1a73e8"/><path fill="url(#c)" d="M96 72.6a63.7 63.7 0 0 1 32-8.6h110.8a128 128 0 0 0-221.7 0l55.5 96A64 64 0 0 1 96 72.6Z"/></svg>
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="-10 -10 276 276"><circle cx="128" cy="128" r="64" fill="#fff"/><path fill="#669df6" d="M96 183.4A63.7 63.7 0 0 1 72.6 160L17.2 64A128 128 0 0 0 128 256l55.4-96A64 64 0 0 1 96 183.4Z"/><path fill="#aecbfa" d="M192 128a63.7 63.7 0 0 1-8.6 32L128 256A128 128 0 0 0 238.9 64h-111a64 64 0 0 1 64 64Z"/><circle cx="128" cy="128" r="52" fill="#1a73e8"/><path fill="#1967d2" d="M96 72.6a63.7 63.7 0 0 1 32-8.6h110.8a128 128 0 0 0-221.7 0l55.5 96A64 64 0 0 1 96 72.6Z"/></svg>