tokentrace 0.15.1 → 0.15.2

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.
package/CHANGELOG.md CHANGED
@@ -4,6 +4,12 @@ All notable changes to TokenTrace are documented here.
4
4
 
5
5
  ## Unreleased
6
6
 
7
+ ## [0.15.2] - 2026-05-23
8
+
9
+ ### Fixed
10
+
11
+ - Period filter presets (Today / 7d / 30d / 60d / 90d / Month / All time) now navigate correctly when clicked on the production webpack build. Previously the preset `<Link>` elements were rendered inside the custom-date `<form>`, and under Next.js 16 + React 19 the form was eating Link clicks, leaving the URL and rendered data unchanged. The preset links are now siblings of the form rather than children.
12
+
7
13
  ## [0.15.1] - 2026-05-22
8
14
 
9
15
  ### Changed
@@ -72,47 +72,45 @@ export function PeriodFilter({
72
72
 
73
73
  return (
74
74
  <div className="min-w-0 max-w-full rounded-lg bg-card p-3 outline-solid outline-1 outline-border sm:p-4">
75
- <form className="max-w-full" action={basePath}>
76
- <input type="hidden" name="range" value="custom" />
77
- {Object.entries(preserveParams).map(([key, value]) =>
78
- value ? <input key={key} type="hidden" name={key} value={value} /> : null
79
- )}
80
- <div className="flex min-w-0 flex-wrap items-center gap-x-3 gap-y-3 lg:flex-nowrap">
81
- <div className="flex shrink-0 items-center gap-2 text-sm font-semibold">
82
- <CalendarDays className="h-4 w-4 shrink-0 text-muted-foreground" />
83
- <span>Period</span>
84
- <span className="hidden shrink-0 whitespace-nowrap rounded-md bg-muted px-2 py-0.5 text-xs font-medium text-muted-foreground 2xl:inline-flex">
85
- {statusLabel}
86
- </span>
87
- </div>
88
-
89
- <div className="period-preset-scroll -mx-3 min-w-0 flex-1 overflow-x-auto px-3 sm:mx-0 sm:px-0 md:overflow-visible">
90
- <div className="flex w-max items-center gap-1.5 pr-1 md:w-auto md:flex-wrap">
91
- {dateRangeOptions.map((option) => (
92
- <Button
93
- key={option.key}
94
- asChild
95
- size="sm"
96
- variant={range.key === option.key ? "default" : "outline"}
97
- className="px-2.5"
98
- >
99
- <Link href={rangeHref(option.key, basePath, preserveParams)}>
100
- {compactOptionLabel(option.key, option.label)}
101
- </Link>
102
- </Button>
103
- ))}
104
- </div>
105
- </div>
75
+ <div className="flex min-w-0 flex-wrap items-center gap-x-3 gap-y-3 lg:flex-nowrap">
76
+ <div className="flex shrink-0 items-center gap-2 text-sm font-semibold">
77
+ <CalendarDays className="h-4 w-4 shrink-0 text-muted-foreground" />
78
+ <span>Period</span>
79
+ <span className="hidden shrink-0 whitespace-nowrap rounded-md bg-muted px-2 py-0.5 text-xs font-medium text-muted-foreground 2xl:inline-flex">
80
+ {statusLabel}
81
+ </span>
82
+ </div>
106
83
 
107
- <div className="period-custom-row ml-auto flex min-w-0 flex-wrap items-center gap-2 shrink-0 lg:flex-nowrap">
108
- <PeriodDateField label="From" name="from" defaultValue={range.fromInput} />
109
- <PeriodDateField label="To" name="to" defaultValue={range.toInput} />
110
- <Button size="sm" type="submit" variant={range.key === "custom" ? "default" : "outline"}>
111
- Apply
112
- </Button>
84
+ <div className="period-preset-scroll -mx-3 min-w-0 flex-1 overflow-x-auto px-3 sm:mx-0 sm:px-0 md:overflow-visible">
85
+ <div className="flex w-max items-center gap-1.5 pr-1 md:w-auto md:flex-wrap">
86
+ {dateRangeOptions.map((option) => (
87
+ <Button
88
+ key={option.key}
89
+ asChild
90
+ size="sm"
91
+ variant={range.key === option.key ? "default" : "outline"}
92
+ className="px-2.5"
93
+ >
94
+ <Link href={rangeHref(option.key, basePath, preserveParams)}>
95
+ {compactOptionLabel(option.key, option.label)}
96
+ </Link>
97
+ </Button>
98
+ ))}
113
99
  </div>
114
100
  </div>
115
- </form>
101
+
102
+ <form className="period-custom-row ml-auto flex min-w-0 flex-wrap items-center gap-2 shrink-0 lg:flex-nowrap" action={basePath}>
103
+ <input type="hidden" name="range" value="custom" />
104
+ {Object.entries(preserveParams).map(([key, value]) =>
105
+ value ? <input key={key} type="hidden" name={key} value={value} /> : null
106
+ )}
107
+ <PeriodDateField label="From" name="from" defaultValue={range.fromInput} />
108
+ <PeriodDateField label="To" name="to" defaultValue={range.toInput} />
109
+ <Button size="sm" type="submit" variant={range.key === "custom" ? "default" : "outline"}>
110
+ Apply
111
+ </Button>
112
+ </form>
113
+ </div>
116
114
  </div>
117
115
  );
118
116
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tokentrace",
3
- "version": "0.15.1",
3
+ "version": "0.15.2",
4
4
  "mcpName": "io.github.abhiyoheswaran1/tokentrace",
5
5
  "description": "Local-first dashboard for AI CLI token, cost, and session analytics.",
6
6
  "author": {
package/server.json CHANGED
@@ -8,12 +8,12 @@
8
8
  "url": "https://github.com/abhiyoheswaran1/tokentrace",
9
9
  "source": "github"
10
10
  },
11
- "version": "0.15.1",
11
+ "version": "0.15.2",
12
12
  "packages": [
13
13
  {
14
14
  "registryType": "npm",
15
15
  "identifier": "tokentrace",
16
- "version": "0.15.1",
16
+ "version": "0.15.2",
17
17
  "runtimeHint": "npx",
18
18
  "packageArguments": [
19
19
  {