Commit Graph
6620 Commits
Author SHA1 Message Date
dependabot[bot] aee0ec6614 Bump hono from 4.12.9 to 4.12.18
Bumps [hono](https://github.com/honojs/hono) from 4.12.9 to 4.12.18.
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](https://github.com/honojs/hono/compare/v4.12.9...v4.12.18)

---
updated-dependencies:
- dependency-name: hono
  dependency-version: 4.12.18
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-08 12:31:22 +00:00
Yan edcf5bd407 stabilize event chart colors per label
Colors in the events-tab chart were assigned by the dataset index from
Object.keys(map), so changing the date range or reloading the page
reshuffled keys and produced a different color for the same event each
time.

Pick the palette slot deterministically from a hash of the label
(hex6 / FNV-1a), and walk the palette greedily in hash-sorted order so
the assignment is independent of the API response order. When two
labels prefer the same slot, the later one steps to the next free
slot, so the visible set of up to 12 events all get distinct colors.
The right shift on the hash sidesteps the FNV-1a low-bit bias mod 12
(FNV prime is close to 2^24).
2026-05-08 08:00:11 -04:00
Francis Cao fa182d0947 implement URL pageview metric/expanded metric 2026-05-07 16:59:30 -07:00
Francis Cao 1b61ee4692 Merge pull request #4247 from anvme/perf/tracker-inp-defer-sort
perf(tracker): defer INP percentile computation to flush time
2026-05-07 16:57:04 -07:00
dependabot[bot] 767bdcc43e Bump icu-minify from 4.8.4 to 4.11.0
Bumps [icu-minify](https://github.com/amannn/next-intl) from 4.8.4 to 4.11.0.
- [Release notes](https://github.com/amannn/next-intl/releases)
- [Changelog](https://github.com/amannn/next-intl/blob/main/CHANGELOG.md)
- [Commits](https://github.com/amannn/next-intl/compare/v4.8.4...v4.11.0)

---
updated-dependencies:
- dependency-name: icu-minify
  dependency-version: 4.11.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-07 23:53:36 +00:00
Francis Cao e2fcea65c0 Merge pull request #4139 from seojcarlos/fix/pages-url-query
fix: include url_query in pages report display
2026-05-07 16:16:21 -07:00
Francis Cao 73c045118b Merge branch 'dev' into fix/pages-url-query 2026-05-07 16:15:46 -07:00
Francis Cao 7fea01ecac Merge pull request #4250 from yancat160/fix/missing-peer-deps
fix: declare prop-types and react-aria-components as direct dependencies
2026-05-07 16:06:18 -07:00
Francis Cao 67f7ecf2a6 combine heatmap prisma migration 2026-05-07 15:47:42 -07:00
Mike Cao 6c2155d496 Merge branch 'dev' of https://github.com/umami-software/umami into dev 2026-05-07 14:54:25 -07:00
Mike Cao 9b18511af0 Merge branch 'heatmaps' into dev
# Conflicts:
#	db/clickhouse/schema.sql
2026-05-07 14:49:21 -07:00
Mike Cao eef10dd897 Use unknown icon for generic browser 2026-05-07 14:34:10 -07:00
Mike Cao 6672ea04f0 Label generic browser as unknown 2026-05-07 14:30:43 -07:00
Mike Cao 3d9e116424 Guard recorder custom events until ready 2026-05-07 14:28:14 -07:00
Francis Cao 17e7a4a63a exclude performance events from non-performance metrics/lists 2026-05-07 14:17:03 -07:00
Mike Cao 6be5b61442 Wait for heatmap snapshot before overlay 2026-05-07 14:06:49 -07:00
Mike Cao abac89b57f Fix heatmap snapshot timestamp query 2026-05-07 14:01:45 -07:00
Mike Cao 923b94ae8e Render heatmaps from replay snapshots 2026-05-07 13:59:30 -07:00
Francis Cao 88ccf5348e Merge pull request #4243 from anvme/fix/delete-cascade
fix: clean up link, pixel, board rows on user/team deletion
2026-05-07 13:59:08 -07:00
Francis Cao b7084bb90a Merge branch 'dev' into fix/delete-cascade 2026-05-07 13:58:29 -07:00
Mike Cao 9c31e7b601 Fix heatmap iframe sizing 2026-05-07 13:52:41 -07:00
Francis Cao b0799fe5da Merge branch 'dev' of https://github.com/umami-software/umami into analytics 2026-05-07 13:31:01 -07:00
Francis Cao 9b099408c2 add share page options enable filtering and enforce theme 2026-05-07 13:24:45 -07:00
Yan 74e8b12e39 declare prop-types and react-aria-components as direct dependencies
Both packages are required at runtime but were not declared in package.json:

- react-simple-maps imports prop-types but does not list it as a peer or
  direct dependency, so prop-types must be provided by the host project.
- @umami/react-zen lists react-aria-components in peerDependencies, so
  the host project must provide it.

These are auto-installed by pnpm 8+ when auto-install-peers is true (the
project default), which masks the issue. They are not auto-installed by
npm or by pnpm with auto-install-peers disabled, causing build failures
on a fresh checkout.
2026-05-07 15:22:17 -04:00
Francis Cao 4b6cfe8a91 Merge branch 'dev' of https://github.com/umami-software/umami into analytics 2026-05-07 10:50:17 -07:00
Francis Cao 5ccfb6d0a5 implement datatable sorting on non-analytics tables. (website/board/link/pixel/team/admin) 2026-05-07 10:46:03 -07:00
Stanislaw dcf1b8b8b5 fix(tracker): track clicks on annotated containers and gracefully handle invalid pushState URLs
Three bugs in src/tracker/index.js, all empirically reproduced.

1. handleClicks() missed clicks on container elements: closest('a,button')
   could not find a non-anchor ancestor with data-umami-event, so a click on
   any descendant of <div data-umami-event=...> went untracked. Reworked to
   closest([data-umami-event]) so any annotated ancestor matches.

2. handlePush() called new URL(url, location.href) outside normalize()'s
   try/catch, so a host page calling history.pushState({}, '', invalidUrl)
   would have umami's wrapper throw a TypeError into the host's router.
   normalize(url) already handles base resolution and catches parse errors.

3. The history hook ran the umami callback BEFORE native pushState, so a
   failed native call (SecurityError on invalid URL, etc.) would still mutate
   currentUrl/currentRef and schedule a phantom pageview. Run native first;
   if it throws, the callback never fires and tracker state stays consistent.

Bug 2 verified: 4/10 representative click scenarios missed before
(span inside div, deep span inside div, a with no href, button inside a),
all 10/10 tracked after.

Bug 1+3 verified: pushState({}, '', invalidUrl) now leaves tracker state
unchanged (currentUrl unchanged, no phantom pageview).
2026-05-07 16:04:16 +02:00
Stanislaw 3f9de35907 perf(tracker): defer INP percentile computation to flush time
The INP observer sorted Object.values(interactions) on every event entry,
even though metrics.inp is only read when sendPerformance() flushes.
Defer the sort + p98 computation to flush, and drain queued observer
entries via observer.takeRecords() to capture the most recent
interactions on pagehide/visibilitychange.

Output is identical (same INP value computed). Savings are largest on
interaction-heavy pages and low-end devices where the per-event sort
compounds.
2026-05-07 15:31:49 +02:00
Stanislaw 71ee000f21 fix: avoid restamping deletedAt + skip Redis DEL for already-soft-deleted slugs
Address Greptile review feedback on #4243.

- Cloud-mode link.updateMany / pixel.updateMany now filter where: { ..., deletedAt: null } so a previously soft-deleted row keeps its original deletion timestamp instead of being restamped with the current time.
- Pre-transaction findMany now selects deletedAt; the Redis invalidation list filters to only live slugs, avoiding harmless but wasted DEL calls for already-soft-deleted entries.

Note: the share.deleteMany cleanup still uses the broad entityId list (not filtered by deletedAt) so that orphan share rows of already-soft-deleted links/pixels are still cleaned up. Filtering the prefetch itself, as Greptile's exact suggestion proposed, would skip those shares while link.deleteMany still hard-deletes the rows, leaving orphan share rows behind. Verified empirically with a 3-scenario reproduction.
2026-05-07 04:14:38 +02:00
Stanislaw a57abbe039 fix: clean up link, pixel, board rows on user/team deletion
deleteUser and deleteTeam left link/pixel/board rows (and their share rows)
in the database after the owner was removed. /q/<slug> and /p/<slug>
also kept serving deleted entries because the routes did not filter
deletedAt and Redis cached lookups for 24h.

- deleteUser: clean up link/pixel/board + shares for the deleted user.
  Cloud mode: soft-delete link/pixel, hard-delete board, only userId-owned.
  Non-cloud: hard-delete everything matching userId or owned teamIds.
- deleteTeam: same cleanup, scoped to teamId.
- /q and /p route handlers: filter deletedAt: null at the call sites
  (not in findLink/findPixel helpers, which would null-deref the
  permission checks at src/permissions/link.ts and pixel.ts).
- Post-transaction Redis invalidation mirrors deleteWebsite.
2026-05-07 03:37:22 +02:00
Francis Cao b5c4dbfa56 Merge pull request #4207 from c0ball/fix/i18n-missing-saved-labels
🌐 fix(i18n): add missing 'saved' labels for german and swiss locales
2026-05-06 09:57:03 -07:00
Francis Cao af68bcc12c Merge branch 'dev' into fix/i18n-missing-saved-labels 2026-05-06 09:56:18 -07:00
Francis Cao 71893e4f89 fix maxheight on DialogButton 2026-05-06 09:51:28 -07:00
dependabot[bot] 2e9aaf3ae7 Bump uuid from 13.0.0 to 14.0.0
Bumps [uuid](https://github.com/uuidjs/uuid) from 13.0.0 to 14.0.0.
- [Release notes](https://github.com/uuidjs/uuid/releases)
- [Changelog](https://github.com/uuidjs/uuid/blob/main/CHANGELOG.md)
- [Commits](https://github.com/uuidjs/uuid/compare/v13.0.0...v14.0.0)

---
updated-dependencies:
- dependency-name: uuid
  dependency-version: 14.0.0
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-05-06 00:44:55 +00:00
0xSYN.dev 5e6b7d1d21 fix: normalize autofill styles across browsers 2026-05-06 00:39:26 +05:30
Francis Cao da5654a9ef rename propertyName parameter 2026-05-05 10:49:13 -07:00
Francis Cao f463a4ce3f rename propertyName parameter 2026-05-05 10:48:56 -07:00
Mike Cao 1b69ce6e90 Add scroll heatmaps. 2026-05-05 10:43:39 -07:00
Mike Cao c7f71e5758 Make heatmaps report always available. 2026-05-05 10:43:39 -07:00
Mike Cao b062484798 Merge pull request #4192 from tairosonloa/patch-1
fix: fixes #4186
2026-05-04 19:42:54 -04:00
Mike Cao a9508e7aae Merge pull request #4200 from yhyasyrian/syrian-flag
The Syrian flag has changed
2026-05-04 19:40:36 -04:00
Mike Cao 76bef132e6 Merge pull request #4231 from umami-software/dependabot/npm_and_yarn/uuid-14.0.0
Bump uuid from 13.0.0 to 14.0.0
2026-05-04 19:40:02 -04:00
Mike Cao 75e6b2461b Merge branch 'dev' into dependabot/npm_and_yarn/uuid-14.0.0 2026-05-04 19:39:55 -04:00
Mike Cao 2ffa655097 Merge pull request #4224 from JLUpengjiaji/V2.0
Flatten JSON data
2026-05-04 19:38:47 -04:00
Mike Cao 0e586dc2f9 Merge pull request #4223 from JLUpengjiaji/V1.0
Remove redundant search logic
2026-05-04 19:37:17 -04:00
Francis Cao 7e9d934697 Merge branch 'dev' of https://github.com/umami-software/umami into analytics 2026-05-04 15:46:12 -07:00
Francis Cao fbac7518fc Add MAX_PAGING_RESULTS on hooks for performance improvements. 2026-05-04 15:43:05 -07:00
Francis Cao b8062ded81 Merge branch 'dev' of https://github.com/umami-software/umami into analytics 2026-05-04 14:28:58 -07:00
Francis Cao a8c1f26775 remove duration from session property stats 2026-05-04 14:26:27 -07:00
Francis Cao ee655da851 Merge branch 'dev' of https://github.com/umami-software/umami into analytics 2026-05-04 14:18:40 -07:00