basalt-ui 1.26.0 → 1.27.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 (107) hide show
  1. package/AGENTS.md +1 -1
  2. package/CHANGELOG.md +8 -0
  3. package/MIGRATING.md +299 -33
  4. package/agent/rules/basalt-controls.md +17 -12
  5. package/agent/rules/basalt-state.md +5 -0
  6. package/configs/oxlint-plugin.js +251 -66
  7. package/configs/oxlint-plugin.test.ts +243 -0
  8. package/configs/oxlint.json +5 -5
  9. package/dist/controls/enum-filter.d.ts +11 -2
  10. package/dist/controls/enum-filter.d.ts.map +1 -1
  11. package/dist/controls/enum-filter.js +4 -2
  12. package/dist/controls/filter-context.d.ts +7 -2
  13. package/dist/controls/filter-context.d.ts.map +1 -1
  14. package/dist/controls/index.d.ts +1 -0
  15. package/dist/controls/index.d.ts.map +1 -1
  16. package/dist/controls/index.js +2 -0
  17. package/dist/controls/multi-select-filter.js +2 -2
  18. package/dist/controls/number-filter.d.ts +26 -0
  19. package/dist/controls/number-filter.d.ts.map +1 -0
  20. package/dist/controls/number-filter.js +143 -0
  21. package/dist/controls/range-filter.d.ts +19 -5
  22. package/dist/controls/range-filter.d.ts.map +1 -1
  23. package/dist/controls/range-filter.js +22 -7
  24. package/dist/controls/range-filter.type-guard.test.d.ts +2 -0
  25. package/dist/controls/range-filter.type-guard.test.d.ts.map +1 -0
  26. package/dist/controls/search-filter.js +1 -1
  27. package/dist/controls/toggle-filter.js +1 -1
  28. package/dist/dashboard/index.d.ts +1 -1
  29. package/dist/dashboard/index.d.ts.map +1 -1
  30. package/dist/dashboard/index.js +3 -1
  31. package/dist/dashboard/stat-card.d.ts +52 -1
  32. package/dist/dashboard/stat-card.d.ts.map +1 -1
  33. package/dist/dashboard/stat-card.js +42 -15
  34. package/dist/dashboard/stat-card.module.css +71 -0
  35. package/dist/dashboard/stat-card.module.css.d.ts +4 -0
  36. package/dist/data/data-table.d.ts.map +1 -1
  37. package/dist/data/data-table.js +8 -0
  38. package/dist/guard/grace.test.d.ts.map +1 -1
  39. package/dist/guard/index.d.ts +1 -1
  40. package/dist/guard/index.d.ts.map +1 -1
  41. package/dist/guard/index.js +6 -10
  42. package/dist/index.d.ts +2 -2
  43. package/dist/index.d.ts.map +1 -1
  44. package/dist/router-tanstack/field.d.ts +1 -1
  45. package/dist/router-tanstack/field.d.ts.map +1 -1
  46. package/dist/router-tanstack/index.d.ts +1 -1
  47. package/dist/router-tanstack/index.d.ts.map +1 -1
  48. package/dist/router-tanstack/search-store.d.ts +4 -1
  49. package/dist/router-tanstack/search-store.d.ts.map +1 -1
  50. package/dist/router-tanstack/search-store.js +91 -7
  51. package/dist/shell/page-bar.d.ts +1 -1
  52. package/dist/state/fields.d.ts +209 -36
  53. package/dist/state/fields.d.ts.map +1 -1
  54. package/dist/state/fields.js +68 -32
  55. package/dist/state/persisted.d.ts +12 -0
  56. package/dist/state/persisted.d.ts.map +1 -1
  57. package/dist/state/persisted.js +36 -18
  58. package/dist/state/persisted.test.d.ts +2 -0
  59. package/dist/state/persisted.test.d.ts.map +1 -0
  60. package/dist/state.d.ts +1 -1
  61. package/dist/state.d.ts.map +1 -1
  62. package/dist/surfaces.d.ts +1 -1
  63. package/dist/surfaces.d.ts.map +1 -1
  64. package/dist/surfaces.js +4 -3
  65. package/dist/widget-header/widget-header.d.ts +31 -1
  66. package/dist/widget-header/widget-header.d.ts.map +1 -1
  67. package/dist/widget-header/widget-header.js +13 -1
  68. package/dist/widget-header/widget-header.module.css +15 -0
  69. package/dist/widget-header/widget-header.module.css.d.ts +1 -0
  70. package/llms.txt +3 -3
  71. package/package.json +1 -1
  72. package/src/controls/controls.router.test.tsx +416 -0
  73. package/src/controls/enum-filter.tsx +14 -3
  74. package/src/controls/filter-context.tsx +7 -2
  75. package/src/controls/index.ts +1 -0
  76. package/src/controls/multi-select-filter.tsx +2 -2
  77. package/src/controls/number-filter.tsx +291 -0
  78. package/src/controls/props-contract.test.tsx +31 -0
  79. package/src/controls/range-filter.tsx +64 -11
  80. package/src/controls/range-filter.type-guard.test.tsx +122 -0
  81. package/src/controls/search-filter.tsx +1 -1
  82. package/src/controls/toggle-filter.tsx +1 -1
  83. package/src/dashboard/index.ts +6 -1
  84. package/src/dashboard/stat-card.module.css +71 -0
  85. package/src/dashboard/stat-card.module.css.d.ts +4 -0
  86. package/src/dashboard/stat-card.test.tsx +231 -0
  87. package/src/dashboard/stat-card.tsx +81 -0
  88. package/src/data/data-table.tsx +8 -0
  89. package/src/guard/check-source.test.ts +35 -2
  90. package/src/guard/grace.test.ts +14 -5
  91. package/src/guard/index.ts +30 -17
  92. package/src/index.ts +5 -0
  93. package/src/router-tanstack/field.ts +4 -0
  94. package/src/router-tanstack/index.ts +4 -0
  95. package/src/router-tanstack/search-store.router.test.tsx +232 -11
  96. package/src/router-tanstack/search-store.test.ts +160 -0
  97. package/src/router-tanstack/search-store.ts +177 -11
  98. package/src/shell/page-bar.tsx +1 -1
  99. package/src/state/fields.test.tsx +254 -0
  100. package/src/state/fields.ts +328 -70
  101. package/src/state/persisted.test.ts +91 -0
  102. package/src/state/persisted.ts +76 -26
  103. package/src/state.ts +6 -0
  104. package/src/surfaces.ts +4 -3
  105. package/src/widget-header/widget-header.module.css +15 -0
  106. package/src/widget-header/widget-header.module.css.d.ts +1 -0
  107. package/src/widget-header/widget-header.tsx +46 -1
@@ -19,10 +19,29 @@ function warnWriteHasNowhereToGo(input) {
19
19
  `[basalt-ui] createSearchStore('${key}'): wrote field '${name}' from a route that does not validate \`${param}\`, and the field is \`persist: false\` \u2014 so the write was dropped. Either render this control on the route wired to \`validateSearch\`, or give the field the localStorage lane (drop \`persist: false\`) so a write from elsewhere survives until the owning route reads it. (dev only)`
20
20
  );
21
21
  }
22
+ function patchOwnsFieldMessage(input) {
23
+ const { key, name, owner, param } = input;
24
+ return `basalt-ui: createSearchStore('${key}'): set('${name}', \u2026, { patch }) carries \`${param}\`, which this store's field '${owner}' owns \u2014 the URL would take it while the localStorage mirror kept the old value, so the next paramless visit and every \`linkSearch\` link disagree with the page the write happened on. Write it through \`field.${owner}.use()[1]\` instead; a \`patch\` is for keys the store does NOT own.`;
25
+ }
26
+ function warnPatchDropped(input) {
27
+ const { key, name, param } = input;
28
+ console.warn(
29
+ `[basalt-ui] createSearchStore('${key}'): wrote field '${name}' with a \`patch\` from a route that does not validate \`${param}\` \u2014 the field's value persisted (A1), but the patch was DROPPED: there is no navigate to merge it into. Render the control on the route wired to \`validateSearch\`, or apply that sibling param on the route that owns it. (dev only)`
30
+ );
31
+ }
32
+ function assertNoLazyUrlFallback(key, fields) {
33
+ for (const [name, f] of Object.entries(fields)) {
34
+ if (typeof f.fallback !== "function" || !f.lane.url) continue;
35
+ throw new Error(
36
+ `basalt-ui: createSearchStore('${key}'): field '${name}' has a thunk fallback on the URL lane \u2014 \`validateSearch\` would evaluate it on every navigation and pin the result into the URL. Pass a value instead, or move the field off the URL lane (\`{ url: false }\`, or \`createLocalStore\`), where a lazy fallback is resolved per read.`
37
+ );
38
+ }
39
+ }
22
40
  function isMemoryLane(entry) {
23
41
  return !entry.codec.lane.url && !entry.codec.lane.persist;
24
42
  }
25
43
  function buildSearchStore(o) {
44
+ assertNoLazyUrlFallback(o.key, o.fields);
26
45
  const core = createStoreCore(o);
27
46
  let readerWired = false;
28
47
  let warned = false;
@@ -30,6 +49,27 @@ function buildSearchStore(o) {
30
49
  readerWired = true;
31
50
  };
32
51
  const nowhereWarned = /* @__PURE__ */ new Set();
52
+ const patchDroppedWarned = /* @__PURE__ */ new Set();
53
+ const patchOwnerLogged = /* @__PURE__ */ new Set();
54
+ const paramOwners = /* @__PURE__ */ new Map();
55
+ for (const entry of core.urlEntries) {
56
+ for (const param of entry.codec.params) paramOwners.set(param, entry.name);
57
+ }
58
+ const persistedNames = new Set(
59
+ core.entries.filter((entry) => entry.codec.lane.persist).map((entry) => entry.name)
60
+ );
61
+ const urlClear = /* @__PURE__ */ new Map();
62
+ const assertPatchNotOwned = (entry, patch) => {
63
+ for (const param of Object.keys(patch)) {
64
+ const owner = paramOwners.get(param);
65
+ if (owner === void 0 || entry.codec.params.includes(param)) continue;
66
+ const message = patchOwnsFieldMessage({ key: o.key, name: entry.name, owner, param });
67
+ if (process.env["NODE_ENV"] !== "production") throw new Error(message);
68
+ if (patchOwnerLogged.has(param)) continue;
69
+ patchOwnerLogged.add(param);
70
+ console.error(message);
71
+ }
72
+ };
33
73
  const flatten = (search, record) => {
34
74
  const out = {};
35
75
  for (const entry of core.urlEntries) {
@@ -74,13 +114,40 @@ function buildSearchStore(o) {
74
114
  markReaderWired();
75
115
  const value = core.resolve(entry, search, record);
76
116
  const validated = Object.hasOwn(search, entry.codec.primary);
117
+ urlClear.set(entry.name, () => {
118
+ if (!validated) return;
119
+ navigate({
120
+ to: ".",
121
+ search: (prev) => ({
122
+ ...prev,
123
+ ...entry.codec.toSearch(entry.codec.fallback)
124
+ }),
125
+ replace: true,
126
+ resetScroll: false
127
+ });
128
+ });
77
129
  return [
78
130
  value,
79
- (next) => {
131
+ (next, opts) => {
132
+ const patch = opts?.patch;
133
+ if (patch !== void 0 && Object.keys(patch).length > 0) {
134
+ assertPatchNotOwned(entry, patch);
135
+ if (!validated && !patchDroppedWarned.has(entry.name) && process.env["NODE_ENV"] !== "production") {
136
+ patchDroppedWarned.add(entry.name);
137
+ warnPatchDropped({ key: o.key, name: entry.name, param: entry.codec.primary });
138
+ }
139
+ }
80
140
  if (validated) {
81
141
  navigate({
82
142
  to: ".",
83
- search: (prev) => ({ ...prev, ...entry.codec.toSearch(next) }),
143
+ // `patch` FIRST, the field's own params last: a patch is for keys the store does not
144
+ // own (clearing a sibling `detailDate` with `undefined`), so it must never be able to
145
+ // overwrite the value this very call is setting.
146
+ search: (prev) => ({
147
+ ...prev,
148
+ ...opts?.patch,
149
+ ...entry.codec.toSearch(next)
150
+ }),
84
151
  replace: entry.codec.lane.history === "replace",
85
152
  // A filter lives halfway down a page as often as it lives in the bar, and the router's
86
153
  // default scroll restoration treats this same-route search write as a navigation — so
@@ -109,10 +176,21 @@ function buildSearchStore(o) {
109
176
  ];
110
177
  };
111
178
  const memoryEntries = core.entries.filter(isMemoryLane);
179
+ const clearFor = (entry) => () => {
180
+ if (entry.codec.lane.persist) core.clearField(entry.name);
181
+ else if (!entry.codec.lane.url) core.clearMemory(entry.name);
182
+ if (!entry.codec.lane.url) return;
183
+ const clearUrl = urlClear.get(entry.name);
184
+ if (clearUrl !== void 0) clearUrl();
185
+ };
112
186
  const field = {};
113
187
  for (const entry of core.entries) {
114
188
  const use = entry.codec.lane.url ? urlUse(entry) : entry.codec.lane.persist ? localUse(entry) : core.memoryUse(entry);
115
- field[entry.name] = core.handle(entry, use);
189
+ field[entry.name] = core.handle(
190
+ entry,
191
+ use,
192
+ clearFor(entry)
193
+ );
116
194
  }
117
195
  const useValues = () => {
118
196
  const search = useCurrentSearch();
@@ -155,11 +233,17 @@ function buildSearchStore(o) {
155
233
  }
156
234
  if (memoryEntries.length > 0) core.resetMemory();
157
235
  if (!core.anyPersisted) return;
158
- const next = { ...core.readRecord() };
159
- for (const entry of core.entries) {
160
- if (entry.codec.lane.persist) next[entry.name] = entry.codec.fallback;
236
+ const record = core.readRecord();
237
+ const next = {};
238
+ let dropped = false;
239
+ for (const [name, value] of Object.entries(record)) {
240
+ if (persistedNames.has(name)) {
241
+ dropped = true;
242
+ continue;
243
+ }
244
+ next[name] = value;
161
245
  }
162
- setRecord(next);
246
+ if (dropped) setRecord(next);
163
247
  };
164
248
  };
165
249
  const store = {
@@ -38,7 +38,7 @@ export type PageBarProps = {
38
38
  * sticky wrapper (`data-basalt-page-bar="shell"`) inside a `BasaltShell`. The seam for the two
39
39
  * things only the consumer's own layout knows: bleeding the sticky bar across its container's
40
40
  * gutters (`margin-inline: calc(var(--gutter) * -1); padding-inline: var(--gutter)`) and drawing
41
- * a hairline under it (`border-bottom: 1px solid var(--vx-border)`).
41
+ * a hairline under it (`border-bottom: 1px solid var(--vx-surface-hairline)`).
42
42
  *
43
43
  * Scope that CSS through this class, not through a global `[data-basalt-page-bar]` selector: the
44
44
  * data attributes are stable enough to READ (a shell-less consumer can style
@@ -39,6 +39,28 @@ export type ResolveLane<L> = {
39
39
  history: 'push';
40
40
  } ? 'push' : 'replace';
41
41
  };
42
+ /**
43
+ * A field's fallback: the value, or a THUNK evaluated at read time (`field.string({ fallback: () =>
44
+ * todayIso() })`). A thunk is re-evaluated on every read while nothing is written, and is never
45
+ * itself persisted — a write stores the value the control produced, like any other.
46
+ *
47
+ * The LOCAL and MEMORY lanes only. `createSearchStore` throws at definition for a thunk on a
48
+ * URL-lane field: `validateSearch` would evaluate it on every navigation and pin the result into the
49
+ * URL, so a deep link would carry a value nobody chose.
50
+ */
51
+ export type FieldFallback<T> = T | (() => T);
52
+ /** Resolves a per-preset window at call time. Returns ISO dates — what `toWindow` hands an API. */
53
+ export type RangeWindow = (now: Date) => {
54
+ from: string;
55
+ to: string;
56
+ };
57
+ /**
58
+ * Per-preset window resolvers for a range field. A preset WITH one resolves through `toWindow()` to
59
+ * `{ from, to }`; a preset without keeps `{ window: preset }` — which is what lets a derived preset
60
+ * (`3m`, `ytd`) live in the same field as a server-understood one (`7d`) instead of forcing a
61
+ * hand-rolled `presetToParams` beside the store.
62
+ */
63
+ export type RangeWindows<P extends string> = Partial<Record<P, RangeWindow>>;
42
64
  /** The value of a range field: one preset, plus two ISO dates when the preset is `'custom'`. */
43
65
  export type RangeValue<P extends string> = {
44
66
  preset: P;
@@ -54,34 +76,50 @@ export type RangeParams = {
54
76
  export type EnumField<T extends string = string, Ln extends ResolvedLane = ResolvedLane> = {
55
77
  readonly kind: 'enum';
56
78
  readonly values: readonly T[];
57
- readonly fallback: T;
79
+ readonly fallback: FieldFallback<T>;
58
80
  readonly lane: Ln;
59
81
  };
60
82
  export type MultiField<T extends string = string, Ln extends ResolvedLane = ResolvedLane> = {
61
83
  readonly kind: 'multi';
62
84
  readonly values: readonly T[];
63
- readonly fallback: readonly T[];
85
+ readonly fallback: FieldFallback<readonly T[]>;
64
86
  readonly lane: Ln;
65
87
  };
66
- export type RangeField<P extends string = string, C extends boolean = boolean, Pm extends RangeParams = RangeParams, Ln extends ResolvedLane = ResolvedLane> = {
88
+ export type RangeField<P extends string = string, C extends boolean = boolean, Pm extends RangeParams = RangeParams, Ln extends ResolvedLane = ResolvedLane, W extends string = never> = {
67
89
  readonly kind: 'range';
68
90
  /** The declared presets — `'custom'` is NOT one of them, it is `custom: true`'s consequence. */
69
91
  readonly presets: readonly P[];
70
- readonly fallback: RangeValue<P>;
92
+ readonly fallback: FieldFallback<RangeValue<P>>;
71
93
  /** `true` → the preset `'custom'` plus `from`/`to` ISO dates are legal values. */
72
94
  readonly custom: C;
73
95
  readonly params: Pm;
96
+ /**
97
+ * The declared window resolvers, keyed by preset — `W` is exactly the presets that HAVE one, so
98
+ * `toWindow`'s return type can drop them from its `{ window }` branch and an API param type
99
+ * accepts the result with no cast.
100
+ *
101
+ * `W` defaults to `never` (`window: {}`), which is what keeps every `RangeField<P>` assignable to
102
+ * the widened `AnyField` a control's props take: a narrower resolver map is assignable to `{}`,
103
+ * and a widened handle's `toWindow` then excludes nothing rather than everything.
104
+ */
105
+ readonly window: RangeWindows<W>;
74
106
  readonly lane: Ln;
75
107
  };
76
108
  /**
77
109
  * The preset union a range field's VALUES range over: the declared presets, plus `'custom'` unless
78
- * the field opted out. `C` widened to `boolean` (a `RangeField<P>` in a control's props) keeps
79
- * `'custom'`, so a widened handle can still carry a custom window.
110
+ * the field opted out.
111
+ *
112
+ * `C` widened to `boolean` (a bare `RangeField<P>`) keeps `'custom'` — but a PROP typed that way
113
+ * accepts only a custom-capable handle, because the handle's setter is contravariant in the value:
114
+ * `field.range` without `custom: true` hands out a `RangeField<P, false>`, whose setter refuses a
115
+ * `'custom'` preset. A wrapper that must take any range handle is generic over the flag
116
+ * (`<P extends string, C extends boolean>` + `FieldHandle<RangeField<P, C>>`); one that only ever
117
+ * takes the preset-only shape pins `RangeField<P, false>`.
80
118
  */
81
119
  export type RangePresets<P, C> = (P & string) | (C extends false ? never : 'custom');
82
120
  export type NumberField<Ln extends ResolvedLane = ResolvedLane> = {
83
121
  readonly kind: 'number';
84
- readonly fallback: number;
122
+ readonly fallback: FieldFallback<number>;
85
123
  readonly min: number | undefined;
86
124
  readonly max: number | undefined;
87
125
  readonly int: boolean;
@@ -89,12 +127,12 @@ export type NumberField<Ln extends ResolvedLane = ResolvedLane> = {
89
127
  };
90
128
  export type BooleanField<Ln extends ResolvedLane = ResolvedLane> = {
91
129
  readonly kind: 'boolean';
92
- readonly fallback: boolean;
130
+ readonly fallback: FieldFallback<boolean>;
93
131
  readonly lane: Ln;
94
132
  };
95
133
  export type StringField<Ln extends ResolvedLane = ResolvedLane> = {
96
134
  readonly kind: 'string';
97
- readonly fallback: string;
135
+ readonly fallback: FieldFallback<string>;
98
136
  readonly max: number | undefined;
99
137
  readonly lane: Ln;
100
138
  };
@@ -118,6 +156,30 @@ export type FieldValue<F extends AnyField> = F extends {
118
156
  } ? boolean : F extends {
119
157
  kind: 'string';
120
158
  } ? string : never;
159
+ /**
160
+ * The second, optional argument of a `FieldHandle` setter.
161
+ *
162
+ * @example field.tab.use()[1]('overview', { patch: { detailDate: undefined } })
163
+ */
164
+ export type FieldSetOptions = {
165
+ /**
166
+ * Extra search params merged into the SAME navigate as the field's own write — the URL lane only
167
+ * (a local/memory-lane write has no navigate to merge into, and ignores this). For keys the STORE
168
+ * DOES NOT OWN: clearing a sibling param the page put there (`{ detailDate: undefined }`) used to
169
+ * need a second `navigate` beside the setter, which either lost the field's write or produced two
170
+ * history entries. The field's own params always win, so a `patch` cannot corrupt the value being
171
+ * set.
172
+ *
173
+ * A key ANOTHER field of the same store owns is refused — it would reach the URL while the
174
+ * mirror kept the old value, so the next paramless visit and every `linkSearch` link disagree
175
+ * with the page the write happened on. `createSearchStore` throws in dev and logs in production;
176
+ * write that field through its own setter instead.
177
+ *
178
+ * A write from a route that does not validate the field persists only (A1) and drops the patch
179
+ * with it — there is no navigate to merge into. Dev warns once per field.
180
+ */
181
+ readonly patch?: Record<string, unknown>;
182
+ };
121
183
  /** One option of an enum / multi / range field, labelled through `store.labels()`. */
122
184
  export type FieldOption = {
123
185
  value: string;
@@ -128,13 +190,24 @@ type RangeHandleExtras<F> = F extends {
128
190
  kind: 'range';
129
191
  presets: readonly (infer P)[];
130
192
  custom: infer C;
193
+ window: RangeWindows<infer W>;
131
194
  } ? {
132
195
  /**
133
196
  * The API-facing projection of a range value: a preset becomes `{ window }`, a custom range
134
197
  * becomes `{ from, to }`. Replaces every hand-rolled `presetToParams`.
198
+ *
199
+ * A preset declared with a `window` resolver (`field.range({ window: { '3m': ... } })`)
200
+ * becomes `{ from, to }` too — the resolver runs at CALL time with the current `Date`, so a
201
+ * derived window (`3m`, `ytd`) is never stale and never leaves the store.
202
+ *
203
+ * Those presets are EXCLUDED from the `{ window }` branch, so the result assigns to an API
204
+ * param type that only knows the server-understood windows with no cast — which is the half
205
+ * that lets a consumer delete the switch rather than move it. A `custom: true` field keeps
206
+ * `'custom'` in the union: a custom preset with no dates resolves to `{ window: 'custom' }`,
207
+ * so that one still needs a guard before it reaches such a type.
135
208
  */
136
209
  readonly toWindow: (v: RangeValue<RangePresets<P, C>>) => {
137
- window: RangePresets<P, C>;
210
+ window: Exclude<RangePresets<P, C>, W>;
138
211
  } | {
139
212
  from: string;
140
213
  to: string;
@@ -142,6 +215,34 @@ type RangeHandleExtras<F> = F extends {
142
215
  } : {
143
216
  readonly toWindow?: undefined;
144
217
  };
218
+ /**
219
+ * A number handle's declared bounds, republished from the field — `RangeHandleExtras`' shape for the
220
+ * numeric kind, and there for the same reason: a control cannot ask the field descriptor anything,
221
+ * it only ever sees the handle.
222
+ *
223
+ * The codec has always CLAMPED to these on write, so before this the only way a `NumberFilter` could
224
+ * learn its own limits was for the call site to pass them a second time — a second answer to a
225
+ * question the field already owns, and one that silently stops matching the moment the field moves.
226
+ * With them on the handle the input can bound its own stepper, which turns the clamp from a
227
+ * correction the user watches happen into a value they cannot type in the first place.
228
+ *
229
+ * `int` is the third member because it is the same class of fact: it decides the stepper's grain
230
+ * (`step` 1, decimals refused), and the codec already rejects a non-integer for that field.
231
+ */
232
+ type NumberHandleExtras<F> = F extends {
233
+ kind: 'number';
234
+ } ? {
235
+ /** The field's `min`, or `undefined` when it declared none. Clamped on write regardless. */
236
+ readonly min: number | undefined;
237
+ /** The field's `max`, or `undefined` when it declared none. Clamped on write regardless. */
238
+ readonly max: number | undefined;
239
+ /** `field.number({ int: true })` — a non-integer is refused by the codec, not rounded. */
240
+ readonly int: boolean;
241
+ } : {
242
+ readonly min?: undefined;
243
+ readonly max?: undefined;
244
+ readonly int?: undefined;
245
+ };
145
246
  /**
146
247
  * The binding every basalt control takes instead of `value`/`onChange` (C2). One field, both lanes,
147
248
  * one resolution law. Handed out by `createSearchStore().field.<name>` /
@@ -157,9 +258,58 @@ export type FieldHandle<F extends AnyField> = {
157
258
  * so a control renders on a sibling or child route with no `from`), else localStorage, else the
158
259
  * fallback. Writes navigate when the matched route validates the param, then persist.
159
260
  */
160
- use(): readonly [FieldValue<F>, (next: FieldValue<F>) => void];
261
+ use(): readonly [FieldValue<F>, (next: FieldValue<F>, opts?: FieldSetOptions) => void];
262
+ /**
263
+ * UNSET the field — what a control's reset calls, and deliberately not `set(fallback)`. The
264
+ * persist lane DELETES the field's key from the mirror, the memory lane drops its value, and the
265
+ * URL lane navigates back to the fallback params (plus dropping the mirror key under it).
266
+ *
267
+ * Writing the fallback instead pins it: a THUNK fallback (`() => todayIso()`) resolves at the
268
+ * moment of the reset, so a reader who pressed `Reset all` today was handed today's date
269
+ * tomorrow, with the field counted as active in `Filters (n)`. Unsetting lets the fallback keep
270
+ * resolving, which is what `FieldFallback`'s contract says it does.
271
+ *
272
+ * Callable outside render (an event handler is the only realistic caller); on the URL lane it
273
+ * navigates through the last render of `use()`, so a handle that no mount has read clears the
274
+ * mirror only.
275
+ */
276
+ clear(): void;
161
277
  isDefault(v: FieldValue<F>): boolean;
162
- } & RangeHandleExtras<F>;
278
+ } & RangeHandleExtras<F> & NumberHandleExtras<F>;
279
+ /**
280
+ * `field.range`'s options. `C` is the `custom` flag, pinned per overload — never inferred; `W` is
281
+ * inferred from `window`'s KEYS (constrained to the declared presets, so a typo is still an error
282
+ * here) and is what carries the resolved presets into `toWindow`'s return type.
283
+ */
284
+ type RangeOptions<P extends string, C extends boolean, Pm extends RangeParams, W extends P> = {
285
+ presets: readonly P[];
286
+ fallback: FieldFallback<NoInfer<P>>;
287
+ custom?: C;
288
+ params?: Pm;
289
+ /** Per-preset window resolvers — the presets `toWindow()` answers with `{ from, to }`. */
290
+ window?: RangeWindows<W>;
291
+ };
292
+ /**
293
+ * A time window: THREE URL params (preset + `from` + `to`, each renamable through `params`), so a
294
+ * consumer's existing deep links and loaders keep their shape. `custom: true` additionally
295
+ * allows the preset `'custom'` with two ISO dates. `window` resolves a DERIVED preset (`3m`, `ytd`)
296
+ * to `{ from, to }` through `toWindow()` while it stays one preset in the URL.
297
+ *
298
+ * A second `field.range` in the same store — or a second range store composed into the same
299
+ * route's `validateSearch` — MUST rename `from`/`to` via `params`: every range defaults to the
300
+ * literal param names `'from'`/`'to'`, and two fields silently sharing them makes the later one's
301
+ * `toSearch` overwrite the earlier one's dates. `createStoreCore` throws at definition for the
302
+ * in-store case; the cross-store case is not detectable by either store alone.
303
+ *
304
+ * THREE overloads, one per `custom` shape, because a single `custom?: C` signature is inferred
305
+ * against `AnyField` when the call sits inline in `createSearchStore({ fields })` — the contextual
306
+ * return type wins, `C` widens to `boolean`, and every value type gains a `'custom'` preset the
307
+ * field never allowed. Overloads have no `C` to widen: an omitted or `false` flag picks the first,
308
+ * a literal `true` the second, and a value typed `boolean` the third (widened, as declared).
309
+ */
310
+ declare function rangeField<const P extends string, const Pm extends RangeParams = RangeParams, const L extends FieldLane = FieldLane, const W extends P = never>(o: RangeOptions<P, false, Pm, W>, lane?: L): RangeField<P, false, Pm, ResolveLane<L>, W>;
311
+ declare function rangeField<const P extends string, const Pm extends RangeParams = RangeParams, const L extends FieldLane = FieldLane, const W extends P = never>(o: RangeOptions<P, true, Pm, W>, lane?: L): RangeField<P, true, Pm, ResolveLane<L>, W>;
312
+ declare function rangeField<const P extends string, const Pm extends RangeParams = RangeParams, const L extends FieldLane = FieldLane, const W extends P = never>(o: RangeOptions<P, boolean, Pm, W>, lane?: L): RangeField<P, boolean, Pm, ResolveLane<L>, W>;
163
313
  /**
164
314
  * The field vocabulary. Every builder returns plain declarative data — no closures, no router, no
165
315
  * storage — which is what lets one field definition drive `createSearchStore` (URL + storage) and
@@ -179,38 +329,22 @@ export type FieldHandle<F extends AnyField> = {
179
329
  */
180
330
  export declare const field: {
181
331
  /** A closed string enum — a tab, a compare mode, a single-select filter. */
182
- enum<const T extends string, const L extends FieldLane = FieldLane>(values: readonly T[], fallback: NoInfer<T>, lane?: L): EnumField<T, ResolveLane<L>>;
332
+ enum<const T extends string, const L extends FieldLane = FieldLane>(values: readonly T[], fallback: FieldFallback<NoInfer<T>>, lane?: L): EnumField<T, ResolveLane<L>>;
183
333
  /** An any-of set over the same closed enum. Decoding is deduped and canonically re-sorted. */
184
- multi<const T extends string, const L extends FieldLane = FieldLane>(values: readonly T[], fallback?: readonly NoInfer<T>[], lane?: L): MultiField<T, ResolveLane<L>>;
185
- /**
186
- * A time window: THREE URL params (preset + `from` + `to`, each renamable through `params`), so a
187
- * consumer's existing deep links and loaders keep their shape. `custom: true` additionally
188
- * allows the preset `'custom'` with two ISO dates.
189
- *
190
- * A second `field.range` in the same store — or a second range store composed into the same
191
- * route's `validateSearch` — MUST rename `from`/`to` via `params`: every range defaults to the
192
- * literal param names `'from'`/`'to'`, and two fields silently sharing them makes the later one's
193
- * `toSearch` overwrite the earlier one's dates. `createStoreCore` throws at definition for the
194
- * in-store case; the cross-store case is not detectable by either store alone.
195
- */
196
- range<const P extends string, const C extends boolean = false, const Pm extends RangeParams = RangeParams, const L extends FieldLane = FieldLane>(o: {
197
- presets: readonly P[];
198
- fallback: NoInfer<P>;
199
- custom?: C;
200
- params?: Pm;
201
- }, lane?: L): RangeField<P, C, Pm, ResolveLane<L>>;
334
+ multi<const T extends string, const L extends FieldLane = FieldLane>(values: readonly T[], fallback?: FieldFallback<readonly NoInfer<T>[]>, lane?: L): MultiField<T, ResolveLane<L>>;
335
+ range: typeof rangeField;
202
336
  /** A number — pagination, a threshold. Out-of-range input clamps to `min`/`max`. */
203
337
  number<const L extends FieldLane = FieldLane>(o: {
204
- fallback: number;
338
+ fallback: FieldFallback<number>;
205
339
  min?: number;
206
340
  max?: number;
207
341
  int?: boolean;
208
342
  }, lane?: L): NumberField<ResolveLane<L>>;
209
343
  /** A toggle. Accepts `true`/`false` and the strings `'true'`/`'false'` from a hand-typed URL. */
210
- boolean<const L extends FieldLane = FieldLane>(fallback: boolean, lane?: L): BooleanField<ResolveLane<L>>;
344
+ boolean<const L extends FieldLane = FieldLane>(fallback: FieldFallback<boolean>, lane?: L): BooleanField<ResolveLane<L>>;
211
345
  /** Free text — a search box. Defaults to `history: 'replace'` like every other field. */
212
346
  string<const L extends FieldLane = FieldLane>(o?: {
213
- fallback?: string;
347
+ fallback?: FieldFallback<string>;
214
348
  max?: number;
215
349
  }, lane?: L): StringField<ResolveLane<L>>;
216
350
  };
@@ -267,7 +401,24 @@ export type FieldCodec = {
267
401
  * route does not, and a write there persists only (A1).
268
402
  */
269
403
  readonly primary: string;
404
+ /**
405
+ * The fallback, ALREADY resolved — a getter, because `field.*({ fallback: () => … })` is a thunk
406
+ * that must run at read time and re-run while nothing is written. Every call site reads it as a
407
+ * plain value, which is why the laziness is invisible past this line.
408
+ */
270
409
  readonly fallback: unknown;
410
+ /** Range only: the per-preset window resolvers `toWindow` answers a derived preset through. */
411
+ readonly windows?: RangeWindows<string>;
412
+ /**
413
+ * Number only: the declared bounds and grain the codec clamps to, republished so `handle` can put
414
+ * them on the handle. The codec is the only thing that reads the field descriptor, so a control
415
+ * that needs a limit has to be handed it from here — see {@link NumberHandleExtras}.
416
+ */
417
+ readonly bounds?: {
418
+ readonly min: number | undefined;
419
+ readonly max: number | undefined;
420
+ readonly int: boolean;
421
+ };
271
422
  /**
272
423
  * Validate a STORED (or caller-supplied) value. `null` = unusable.
273
424
  *
@@ -295,6 +446,15 @@ export declare function resolveFieldCodec(name: string, f: AnyField, opts?: {
295
446
  legacyMultiEmpty?: boolean;
296
447
  }): FieldCodec;
297
448
  type StoreRecord = Record<string, unknown>;
449
+ /**
450
+ * A field's write, untyped — the shape both factories build and `handle` hands out. `opts` is the
451
+ * public `FieldSetOptions`; only the URL lane can act on it.
452
+ *
453
+ * @internal — see `FieldCodec`.
454
+ */
455
+ export type FieldWrite = (next: unknown, opts?: FieldSetOptions) => void;
456
+ /** One field's `use()`, untyped. @internal — see `FieldCodec`. */
457
+ export type FieldUse = () => readonly [unknown, FieldWrite];
298
458
  /** One named field plus its codec, in declaration order. @internal — see `FieldCodec`. */
299
459
  export type StoreEntry = {
300
460
  readonly name: string;
@@ -334,16 +494,25 @@ export type StoreCore = {
334
494
  * Lives here rather than in either factory because BOTH have such a field: `createLocalStore`'s
335
495
  * `persist: false`, and `createSearchStore`'s `{ url: false, persist: false }`.
336
496
  */
337
- memoryUse(entry: StoreEntry): () => readonly [unknown, (next: unknown) => void];
497
+ memoryUse(entry: StoreEntry): FieldUse;
338
498
  /** The memory lane's value for one field, resolved — its fallback while nothing was written. */
339
499
  readMemoryValue(entry: StoreEntry): unknown;
340
500
  /** Subscribes to the whole memory lane. The snapshot is a write counter, so it is always stable. */
341
501
  useMemoryVersion(): number;
342
502
  /** Drops every memory value, so the next read resolves to the fallback. What `useReset` calls. */
343
503
  resetMemory(): void;
504
+ /**
505
+ * Deletes ONE field's key from the localStorage record, so the next read falls through to the
506
+ * live fallback. Not a hook: `FieldHandle.clear()` runs in an event handler, where the persisted
507
+ * setter from `usePersistedRecord()` is not in reach — it writes through the same envelope and
508
+ * wakes the same per-key listeners (`writePersistedValue`).
509
+ */
510
+ clearField(name: string): void;
511
+ /** The memory lane's half of the same: drops ONE field's value. */
512
+ clearMemory(name: string): void;
344
513
  /** Every stored field, flattened into URL-param shape, `undefined` entries dropped. */
345
514
  readStoredFlat(): StoreRecord;
346
- handle(entry: StoreEntry, use: () => readonly [unknown, (next: unknown) => void]): FieldHandle<AnyField>;
515
+ handle(entry: StoreEntry, use: FieldUse, clear: () => void): FieldHandle<AnyField>;
347
516
  };
348
517
  /** @internal — the seam behind `createSearchStore` and `createLocalStore`. */
349
518
  export declare function createStoreCore(o: StoreCoreOptions): StoreCore;
@@ -373,6 +542,10 @@ export type LocalStore<S extends Record<string, AnyField>> = {
373
542
  * That is the honest home for a value a reader should not be handed back tomorrow (a scratch
374
543
  * comparison, a temporary drill-down) without dropping to `useState` and losing the handle.
375
544
  *
545
+ * A fallback may be a THUNK (`field.string({ fallback: () => todayIso() })`) — resolved at read
546
+ * time, re-resolved while nothing is written, and never persisted on its own. Every lane here
547
+ * qualifies; `createSearchStore` allows it off the URL lane only, and throws otherwise.
548
+ *
376
549
  * @example
377
550
  * const chart = createLocalStore({
378
551
  * key: 'momentum-chart',
@@ -1 +1 @@
1
- {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/state/fields.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../../src/state/fields.ts"],"names":[],"mappings":"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"}