wenay-react2 1.0.40 → 1.0.41

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.
@@ -0,0 +1,401 @@
1
+ # wenay-react2 Project Functionality
2
+
3
+ This document describes what this project provides and why each area exists.
4
+ It is not a README and not a full API reference.
5
+
6
+ Read this together with:
7
+
8
+ - `doc/wenay-react2.md` for everyday signatures.
9
+ - `doc/wenay-react2-rare.md` for low-level details and edge cases.
10
+ - `doc/EXAMPLE_USAGE.md` for usage standards and examples.
11
+ - `src/common/testUseReact/qa.tsx` for the live QA stand.
12
+
13
+ ## Project Role
14
+
15
+ `wenay-react2` is a shared React UI/controller package for wenay apps.
16
+ Its main job is to package recurring UI infrastructure so products do not keep
17
+ rebuilding table buffers, floating windows, context menus, settings editors,
18
+ toolbar persistence, React subscriptions, and replay/store adapters.
19
+
20
+ The package should stay generic. It may know lifecycle, rendering,
21
+ persistence mechanics, and UI contracts. It must not know product business
22
+ terms such as exchange names, portfolio rules, strategy policy, domain column
23
+ groups, account behavior, or screen-specific layout decisions.
24
+
25
+ ## Core Design Contract
26
+
27
+ New shared functionality should follow these rules:
28
+
29
+ - A primitive owns one generic problem.
30
+ - App policy belongs in an app wrapper above the primitive.
31
+ - Shared behavior starts as a headless hook/controller whenever it has lifecycle, state, persistence, subscription, selection, or user interaction rules.
32
+ - React hooks own subscription/lifecycle wiring and may return a small API, not only plain X/Y data.
33
+ - Controllers expose a small imperative API when state must outlive a render.
34
+ - Serializable UI config is stored through `memoryGetOrCreate` and announced
35
+ through `memoryCache`, but the app decides when to write storage.
36
+ - Visual components and QA stand layers should be thin renderers over the hook/controller surface.
37
+ - Demos should prove the primitive's contract, not hide product policy inside
38
+ the library.
39
+
40
+ Canonical controller vocabulary:
41
+
42
+ ```ts
43
+ open / close / set / replace // modal-like state
44
+ update / remove / clean / sync // buffered data state
45
+ fit / flush // ag-grid lifecycle
46
+ props / bind // spreadable DOM props
47
+ get / set / reset / cancel // local controller state
48
+ on -> off // subscriptions
49
+ ```
50
+
51
+ ## Public Entry
52
+
53
+ Consumers import from the package root:
54
+
55
+ ```ts
56
+ import { createToolbar, useAgGrid, createColumnState } from "wenay-react2"
57
+ ```
58
+
59
+ `src/common/api.tsx` is the root export aggregator. It also exports `kit` for
60
+ large files that prefer grouped namespaces:
61
+
62
+ ```ts
63
+ import { kit } from "wenay-react2"
64
+
65
+ kit.grid
66
+ kit.modal
67
+ kit.menu
68
+ kit.logs
69
+ kit.updateBy
70
+ ```
71
+
72
+ ## Compatibility Policy
73
+
74
+ New hook/controller surfaces should prefer migration without breaking old public APIs, but compatibility is not absolute. An aggressive migration is allowed only as an explicit migration cut: separate task, changelog, migration notes, and a clear list of changed imports/behavior. Default visual styles have a stricter rule: do not remove a default class/style contract unless the replacement class/token path already exists and is documented.
75
+
76
+ For diagnostics, the library may expose local counters/listeners, but it must not send hidden analytics. Apps decide whether to read, persist, or report those counters.
77
+
78
+ ## Functional Areas
79
+
80
+ ### Render Memory
81
+
82
+ Purpose: bridge external mutable objects into React renders.
83
+
84
+ Main APIs:
85
+
86
+ - `updateBy`, `useUpdateBy`, `renderBy`, `renderByRevers`, `renderByLast`
87
+ - `createUpdateApi`, `useUpdateByApi`
88
+ - `memoryGetOrCreate`, `memoryUpdate`, `memoryMarkDirty`, `memoryCache`
89
+
90
+ Use this when a module-level controller or persisted config needs React views
91
+ to refresh without moving all state into component-local `useState`.
92
+
93
+ Do not use this as a default replacement for normal React state. If a state is
94
+ local to one component and has no external lifecycle, `useState` is simpler.
95
+
96
+ ### Persistence And Memory Cache
97
+
98
+ Purpose: centralize process/browser memory maps used by shared UI surfaces.
99
+
100
+ Shared primitives can mark config as dirty. They do not choose a write policy.
101
+ The application should call `memoryCache.load()` on startup and decide whether
102
+ to save on debounce, route leave, visibility change, pagehide, or explicit user
103
+ action.
104
+
105
+ This matters because toolbar layout, UI slot placement, column state, floating
106
+ window geometry, and resize maps are all user-facing preferences. The library
107
+ should not silently write storage at surprising times.
108
+
109
+ ### Outside Click, Buttons, And Floating UI
110
+
111
+ Purpose: reusable interaction wrappers for menus, popups, and floating panels.
112
+
113
+ Main APIs:
114
+
115
+ - `useOutside`, `OutsideClickArea`
116
+ - `Button`, `OutsideButton`, `HoverButton`, `AbsoluteButton`
117
+ - `FloatingWindow`, `useFloatingWindowController`
118
+ - `useDraggableApi`, `useReorder`, `useReorderBoard`
119
+
120
+ Use these when the UI problem is generic: outside-click closing, draggable
121
+ position, ordered drag-and-drop, or a persistent floating window. Use `useFloatingWindowController` only for custom chrome around the same geometry/stack/resize behavior.
122
+
123
+ Do not hide business flow inside these components. For example, a trade ticket
124
+ window is an app component that may use `FloatingWindow`, not a library
125
+ primitive.
126
+
127
+ ### Modal And Input Helpers
128
+
129
+ Purpose: common modal lifecycle and simple text/file input flows.
130
+
131
+ Main APIs:
132
+
133
+ - `ModalProvider`, `useModal`
134
+ - `FreeModal`, `TextInputModal`, `FileInputModal`
135
+ - `inputModal`, `confirmModal` for low-level compatibility paths
136
+
137
+ Use `ModalProvider` + `useModal` for new code. Low-level JSX stores exist for
138
+ compatibility and rare cases.
139
+
140
+ ### Settings Dialog, UI Slot, And Toolbar
141
+
142
+ Purpose: configurable product chrome without each app inventing its own
143
+ settings registry, placement switcher, and toolbar editor.
144
+
145
+ Main APIs:
146
+
147
+ - `SettingsDialog`, `useSettingsDialogController`, `registerSettingsSection`
148
+ - `createUiSlot`
149
+ - `createToolbar`, `registerToolbarDensity`, `toolbarItemIcon`
150
+
151
+ Use `SettingsDialog` when the app has multiple settings sections or needs a
152
+ searchable settings tree. Use `useSettingsDialogController` when custom settings
153
+ chrome needs the same open/search/tree/history/resize behavior.
154
+
155
+ Use `createUiSlot` when the same UI fragment may live in several places and
156
+ the user can choose the placement.
157
+
158
+ Use `createToolbar` when a command strip needs:
159
+
160
+ - persistent item order and visibility;
161
+ - density modes such as icon-only or icon+label;
162
+ - a reusable settings editor;
163
+ - optional source-owned order/visibility via `UiListSource`.
164
+
165
+ `createToolbar({source})` is important: it lets the toolbar become a view over
166
+ another config. The main example is `columnState.api.listSource`, where grid,
167
+ column menu, and toolbar should all mirror one column order/visibility source.
168
+
169
+ ### Menus
170
+
171
+ Purpose: generic menu rendering and context-menu coordination.
172
+
173
+ Main APIs:
174
+
175
+ - `Menu`
176
+ - `contextMenu.Layer`
177
+ - `contextMenu.openAt(event, items)`
178
+ - `DropdownMenu`
179
+ - `useRightMenuController`
180
+
181
+ Use `contextMenu.openAt(e, items)` for new right-click integrations. It opens
182
+ one current menu from a concrete event/point. Older queued/global paths remain
183
+ for compatibility through `1.x` but should not be taught in new examples.
184
+
185
+ `DropdownMenu` is a floating action menu with caller-owned trigger/content
186
+ styling. It is not the main right-click primitive. `useRightMenuController`
187
+ keeps open/fixed/select/submenu/drag state reusable for custom floating-menu views.
188
+
189
+ Menu diagnostics should start from the right-click surface: count `openAt` vs legacy queued opens, sources/layers, close reasons, item clicks by explicit stable keys, submenu opens, and async menu errors. These counters should be local/opt-in, not hidden analytics.
190
+
191
+ ### agGrid4
192
+
193
+ Purpose: shared ag-grid lifecycle, row buffering, dynamic columns, and common
194
+ grid defaults.
195
+
196
+ Main APIs:
197
+
198
+ - `createGridBuffer`
199
+ - `useAgGrid`
200
+ - `AgGridTable`
201
+ - `createColumnBuffer`
202
+ - `useAgGridTheme`, `buildAgTheme`
203
+ - `numericComparator`, `colDefCentered`, `colDefWrap`
204
+
205
+ Use plain `AgGridTable` for declarative `rowData`.
206
+
207
+ Use `useAgGrid` or `createGridBuffer` when row updates arrive as patches,
208
+ streams, or imperative transactions.
209
+
210
+ Use overlay mode when React-owned `rowData` owns the row set and external
211
+ patches should update only already-present rows.
212
+
213
+ Use `createColumnBuffer` for generic dynamic column-name lifecycle. The shared
214
+ buffer stores names and replays them; the app wrapper decides target group,
215
+ column shape, `colId`, labels, and domain rules.
216
+
217
+ Low-level `applyGridRows` exists, but it is not the preferred path for new
218
+ React examples. Prefer the controller path because it owns attach/detach/sync
219
+ and reduces race conditions around grid readiness.
220
+
221
+ ### Column State
222
+
223
+ Purpose: one persisted column config that can drive desktop grids, icon menus,
224
+ toolbars, and mobile card views.
225
+
226
+ Main APIs:
227
+
228
+ - `createColumnState`
229
+ - `ColumnsMenu`, `MenuStrip`
230
+ - `ColumnDots`
231
+ - `CardList`
232
+ - `columnState.grid.attach(api)` and `detach()`
233
+ - `columnState.api.listSource`
234
+
235
+ Use this when the user can change column order, visibility, width, sort,
236
+ filter, or mobile field selection.
237
+
238
+ Key idea: column config is independent from ag-grid. ag-grid is one adapter
239
+ over it. Mobile cards and toolbar buttons read the same config without needing
240
+ ag-grid at all.
241
+
242
+ Runtime presence (`setPresent`, `setPresentGate`) is not persisted. It is for
243
+ modes where some stable schema columns are currently unavailable.
244
+
245
+ ### Observe React Adapter
246
+
247
+ Purpose: React hooks around `wenay-common2` Observe stores and listen objects.
248
+
249
+ Main APIs:
250
+
251
+ - `useStoreNode`, `useStoreKeys`, `useStoreSelect`
252
+ - `useStoreMirror`
253
+ - `useStoreEach`
254
+ - `useListenEffect`, `useListenValue`, `useListenArgs`
255
+
256
+ Use these when React needs to subscribe to external stores or listens. Network
257
+ sync stays explicit through `useStoreMirror`; merely reading a node should not
258
+ start hidden transport work.
259
+
260
+ ### Replay React Adapter
261
+
262
+ Purpose: React-side lifecycle over `wenay-common2` Replay lines, store replay,
263
+ route hand-off, pull frames, and archive playback.
264
+
265
+ Main APIs:
266
+
267
+ - `useReplaySubscribe`
268
+ - `useReplayRouteSubscribe`
269
+ - `useStoreReplaySync`, `useStoreReplayMirror`
270
+ - `useStoreReplayRouteSync`, `useStoreReplayRouteMirror`
271
+ - `useStoreReplayEach`
272
+ - `useReplayFrame`
273
+ - `useReplayHistory`
274
+
275
+ Use these for high-frequency event lines, state sync from a replay source, and
276
+ route hand-off between relay/direct transports.
277
+
278
+ Avoid storing every frame in React state. High-frequency lines should fold into
279
+ canvas, refs, external stores, or grid controllers. The controller exposes
280
+ `seq()` and related getters so consumers can observe position without
281
+ rerendering on every event.
282
+
283
+ ### Logs
284
+
285
+ Purpose: shared logging UI and notification/table chrome.
286
+
287
+ Main APIs:
288
+
289
+ - `logsApi`
290
+ - `getLogsApi`
291
+ - `createLogsController`
292
+ - `logsApi.React.Message`, `PageLogs`, `Setting`
293
+ - context logger hooks/components in the rare surface (`useLogsTableController`, `useLogsNotificationsController`)
294
+
295
+ Use `logsApi` for quick global logging. Use `createLogsController` when an app needs headless append/limit/settings state without the shared UI. Use context logger components when an app needs a larger logger surface.
296
+
297
+ ### Params
298
+
299
+ Purpose: editable parameter UIs over `wenay-common2` Params structures and
300
+ simple row/section editors.
301
+
302
+ Main APIs:
303
+
304
+ - `ParamsEditor`
305
+ - `useParamsEditorController`
306
+ - `ParamsEdit`
307
+ - `ParamRow`
308
+ - `useTextInputPanel`, `useFileInputPanel`
309
+ - `TextInputPanel`, `FileInputPanel`
310
+
311
+ Use these for generic param editing. `useParamsEditorController` owns the draft clone,
312
+ immediate/delayed change notification, expand callback, and cleanup for custom renderers.
313
+ Product-specific validation and save policy stay in the app.
314
+
315
+ ### Styles And Theme
316
+
317
+ Purpose: shared visual tokens and theme hooks for library primitives.
318
+
319
+ Main files:
320
+
321
+ - `src/style/tokens.css`
322
+ - `src/common/src/styles/tokens.ts`
323
+ - `src/style/style.css`
324
+ - `src/style/menuRight.css`
325
+ - `src/common/src/styles/styleGrid.ts`
326
+ - `src/common/src/grid/agGrid4/theme.ts`
327
+
328
+ New shared UI should try existing tokens first. Add tokens when the value is
329
+ part of a reusable primitive or expected to be themed by apps. One-off QA or
330
+ app styles should stay in the app/demo wrapper.
331
+
332
+ Default styles are part of the public usability contract. A primitive should remain usable after importing the package CSS; apps may override variables, but should not need to copy internal CSS just to avoid a broken surface. Runtime geometry can stay inline when it is computed from state; colors, spacing, borders, shadows, typography, and hover/active states should move to classes and CSS variables.
333
+
334
+ ### Charts
335
+
336
+ Purpose: low-level chart engine and React chart demo surface.
337
+
338
+ Main APIs:
339
+
340
+ - `MyChartEngine`
341
+ - `createChartCanvas`
342
+ - chart engine internals exported through the rare surface
343
+
344
+ The chart engine is intentionally low-level. Product apps should wrap it before
345
+ using it as a domain chart.
346
+
347
+ ## QA Stand
348
+
349
+ The live stand is `src/common/testUseReact/qa.tsx`.
350
+
351
+ Run:
352
+
353
+ ```sh
354
+ npm run testReact
355
+ ```
356
+
357
+ The stand has active cards and an archive. Use active cards as the strongest
358
+ signal for current behavior. Archive cards are regression checks and may show
359
+ older or lower-level API paths.
360
+
361
+ Important current cards:
362
+
363
+ - 23-26: Replay hooks, store sync, per-key feed, route hand-off.
364
+ - 28: `createColumnState` with ag-grid adapter.
365
+ - 29: mobile `ColumnDots` + `CardList`.
366
+ - 30: grouped sub-column mode above toolbar/columnState.
367
+ - 31: `createToolbar` over `columnState.api.listSource`.
368
+
369
+ Known audit note: archive card 5 and `src/common/testUseReact/useGrid.tsx`
370
+ still demonstrate direct `applyGridRows`. That is useful as a regression
371
+ check for the low-level helper, but new examples should teach `useAgGrid`,
372
+ `AgGridTable`, or `createGridBuffer` first.
373
+
374
+ ## Adding A New Feature
375
+
376
+ Before adding a shared primitive:
377
+
378
+ 1. Check whether an existing primitive already owns the problem.
379
+ 2. Decide the generic boundary: what belongs in the library, what belongs in
380
+ the product wrapper.
381
+ 3. Add an everyday example to `doc/wenay-react2.md` only if it is a public
382
+ everyday API.
383
+ 4. Prefer a `use*` hook or `create*` controller as the public behavior surface; add a visual component only as a layer over it.
384
+ 5. Add edge-case details to `doc/wenay-react2-rare.md`.
385
+ 6. Add or update a QA stand card when behavior is visual, interactive, or hard
386
+ to prove through unit tests alone.
387
+ 7. Add a changelog entry under `doc/changes/`.
388
+
389
+ ## Non-Goals
390
+
391
+ `wenay-react2` should not become:
392
+
393
+ - a product shell;
394
+ - a business-domain library;
395
+ - a hidden persistence service;
396
+ - a transport selector;
397
+ - a replacement for normal React local state;
398
+ - a place for one-off app styling.
399
+
400
+ The package should provide strong generic tools. Apps compose those tools into
401
+ business behavior.
@@ -0,0 +1,80 @@
1
+ # Project Rules
2
+
3
+ These rules are mandatory for maintainers and AI agents working in this repository.
4
+
5
+ ## README
6
+
7
+ `README.md` is a documentation index only.
8
+
9
+ It should say where the important files are, not teach the API, duplicate examples, or contain release history. Keep API explanations in the brief/rare docs and keep version notes in `doc/changes/`.
10
+
11
+ Canonical documentation locations:
12
+
13
+ - `doc/wenay-react2.md` - brief everyday API for this package.
14
+ - `doc/wenay-react2-rare.md` - detailed, rare, compatibility, and migration notes for this package.
15
+ - `doc/PROJECT_FUNCTIONALITY.md` - project functionality map: what each subsystem is for and what belongs outside the library.
16
+ - `doc/EXAMPLE_USAGE.md` - example usage standards: which primitive to choose, how to use it, and why.
17
+ - `doc/WENAY_REACT2_RENAMES.md` - breaking rename map for this package.
18
+ - `doc/changes/` - recent version changes.
19
+
20
+ `wenay-common2` documentation is not canonical in this repository. When common2 behavior matters, read the installed package/module docs and summarize only the React-facing impact in `doc/wenay-react2.md` or `doc/wenay-react2-rare.md`.
21
+
22
+ ## wenay-common2 / common2 Updates
23
+
24
+ In this repository, `common2` is the short name for `wenay-common2`. If a request says to check updates, update common/common2, read what changed in common, or similar, and no other dependency is named, assume it means `wenay-common2`.
25
+
26
+ Before summarizing or acting on such an update, read:
27
+
28
+ - `node_modules/wenay-common2/package.json` for the installed version.
29
+ - `node_modules/wenay-common2/doc/changes/README.md` and the newest files in `node_modules/wenay-common2/doc/changes/` for what changed.
30
+
31
+ If the package is updated, read the changelog from the newly installed package before changing React-facing docs or code. Keep local docs focused on the React-facing impact.
32
+
33
+ ## Target Backlog
34
+
35
+ - `doc/target/` is the durable queue for dictated tasks and imported task direction. Read `doc/target/README.md` before acting on a request that starts from `target`.
36
+ - `doc/target/my.md` must show task status. Before implementation, move/normalize the selected item into `In Progress`; when implementation is believed complete, move it to `Verify`; remove it from the queue only after acceptance checks pass and durable results are recorded.
37
+ - `doc/progress/` is temporary and must not be used as the only task-status record. If a progress file is deleted at completion, `doc/target/my.md` must already be cleaned, moved to `Verify`, or otherwise updated with the next required check.
38
+ - `target/*.md` files are source specs/prompts. Do not edit or delete them merely for progress tracking unless the user explicitly asks.
39
+ ## Work Progress Files
40
+
41
+ - For any task that is more than a tiny/local edit, create a temporary progress file before starting broad changes.
42
+ - Put progress files under `doc/progress/`. This is the working-doc area, separate from public docs, roadmap docs, and release notes.
43
+ - Name them by task, for example `doc/progress/replay-route-handoff.md`.
44
+ - Keep the file short: goal, current checkpoints, notable decisions, blockers, and verification already run or still needed.
45
+ - Update the progress file as checkpoints are completed, especially before switching context or making broad edits.
46
+ - When the task is finished, delete the progress file.
47
+ - Preserve only the durable outcome: final response, commit message, and, for publishable changes, the matching changelog/release-note entry.
48
+ - If work is paused or blocked locally, leave the progress file in place and make the next required action explicit.
49
+ - If the paused state must be committed or handed off, promote the useful part into a durable doc such as `ROADMAP`, `RECOMMENDATIONS`, `doc/target`, or `doc/changes`, instead of relying on an ignored progress file.
50
+
51
+ ## Recent Changes Catalog
52
+
53
+ Every meaningful code, public API, dependency, migration, or documentation-policy change must add or update a file in `doc/changes/`.
54
+
55
+ Rules:
56
+
57
+ - Use one file per version: `doc/changes/vX.Y.Z.md`.
58
+ - The version name is mandatory and must be visible in the file title.
59
+ - Write the entry like a commit summary: what changed, why it matters, and how it was checked.
60
+ - If several related changes land before the next publish, append them to the same version file.
61
+ - Keep only the latest 10 version files in `doc/changes/`; when adding the 11th, delete the oldest version file.
62
+ - Do not move old release notes into `README.md`.
63
+
64
+ Recommended entry shape:
65
+
66
+ ```md
67
+ # vX.Y.Z
68
+
69
+ Date: YYYY-MM-DD
70
+
71
+ - Changed: ...
72
+ - Reason: ...
73
+ - Verification: ...
74
+ ```
75
+
76
+ ## Style / Theme / Cleanup Notes
77
+
78
+ When changing shared styles, tokens, theme contracts, QA stand behavior, or cleanup decisions, update `doc/wenay-react2-rare.md`. Keep README as an index and keep broad API examples in `doc/wenay-react2.md`.
79
+
80
+ Do not delete public exports as cleanup in the same pass that identifies them. First document suspicious exports in the rare-doc cleanup inventory, then remove or move them only in a deliberate breaking change.
@@ -0,0 +1,177 @@
1
+ # wenay-react2 Rename Map
2
+
3
+ Date: 2026-07-08
4
+
5
+ This is a breaking rename map. The package does not keep old aliases for these names.
6
+
7
+ ## Root
8
+
9
+ | Old | New |
10
+ | --- | --- |
11
+ | `v2` | `kit` |
12
+ | `test()` | removed |
13
+ | `LegacyMenuElement` | `MenuItemElement` |
14
+
15
+ ## Persistent Memory
16
+
17
+ | Old | New |
18
+ | --- | --- |
19
+ | `Cash` | `memoryCache` |
20
+ | `MemoryMap` | `memoryMaps` |
21
+ | `staticGetAdd` | `memoryGetOrCreate` |
22
+ | `staticGetById` | `memoryGetById` |
23
+ | `staticSet` | `memorySet` |
24
+ | `staticGet` | `memoryGet` |
25
+ | `staticUpdate` | `memoryUpdate` |
26
+ | `staticMarkDirty` | `memoryMarkDirty` |
27
+ | `staticProps` | `memoryProps` |
28
+ | `mapMemory.tsx` | `memoryStore.tsx` |
29
+
30
+ ## Outside Click And Keyboard
31
+
32
+ | Old | New |
33
+ | --- | --- |
34
+ | `DivOutsideClick` | `OutsideClickArea` |
35
+ | `DivOutsideClick2` | `OutsideClickArea` |
36
+ | `ButtonOutClick` | `OutsideButton` |
37
+ | `ButtonHover` | `HoverButton` |
38
+ | `ButtonAbs` | `AbsoluteButton` |
39
+ | `StyleOtherColum` | `StyleOtherColumn` |
40
+ | `useOutsideOld` | `useOutsideRef` |
41
+ | `useAddDownAnyKey` | `useKeyboard` |
42
+ | `useKeyDown` | `useKeyboard` |
43
+ | `useAnyKey` | `useKeyboard` |
44
+ | `keyDownApi` | `keyboard` |
45
+ | `KeyDown` | `keyboardState` |
46
+ | `AnyKeyDownApi` | `KeyboardApi` |
47
+ | `addDownAnyKey` | removed |
48
+ | `useAddDownAnyKeyOld` | removed |
49
+ | `useAddDownAnyKey.ts` | `useKeyboard.ts` |
50
+
51
+ ## Floating Windows And Drag
52
+
53
+ | Old | New |
54
+ | --- | --- |
55
+ | `DraggableOutlineDiv` | `OutlineDragDemo` |
56
+ | `DivRnd3` | `FloatingWindow` |
57
+ | `DivRndBase3` | `FloatingWindowBase` |
58
+ | `ExRNDMap3` | `floatingWindowMap` |
59
+ | `tRndUpdate` | `FloatingWindowUpdate` |
60
+ | `Drag22` | `DragBox` |
61
+ | `Drag2Props` | `DragBoxProps` |
62
+ | `Drag2` | `DragArea` |
63
+ | `RNDFunc3.tsx` | `FloatingWindow.tsx` |
64
+ | `RNDFunc.tsx` | `DragArea.tsx` |
65
+
66
+ ## Modal And Inputs
67
+
68
+ | Old | New |
69
+ | --- | --- |
70
+ | `InputPage` | `TextInputPanel` |
71
+ | `InputPageModal` | `TextInputModal` |
72
+ | `InputFile` | `FileInputPanel` |
73
+ | `InputFileModal` | `FileInputModal` |
74
+ | `PageModalFree` | `FreeModal` |
75
+ | `GetModalJSX` | `createModalElementStore` |
76
+ | `GetModalFuncJSX` | `createModalRenderStore` |
77
+ | `setModalJSX` argument | `modal` argument |
78
+ | `LegacyModalSetter` | `ModalSetter` |
79
+ | `useModalOld` | removed |
80
+ | `useModalApi` | removed |
81
+
82
+ ## Params
83
+
84
+ | Old | New |
85
+ | --- | --- |
86
+ | `ParametersReact` | `ParamsEditor` |
87
+ | `ParametersBaseReact` | `ParamsEditorBase` |
88
+ | `ParametersEngine.tsx` | `ParamsEditor.tsx` |
89
+ | `EditParams2` | `ParamsEdit` |
90
+ | `EditParams3` | `ParamsArrayEdit` |
91
+ | `CParameter` | `ParamRow` |
92
+ | `FButton` | `ParamLabelContent` |
93
+ | `FNameButton` | `ParamToggleLabel` |
94
+ | `SetAutoStepForElement` | `setAutoStepForElement` |
95
+
96
+ ## Menu
97
+
98
+ | Old | New |
99
+ | --- | --- |
100
+ | `MenuBase` | `Menu` |
101
+ | `MenuBaseProps` | `MenuProps` |
102
+ | `tMenuReact` | `MenuItem` |
103
+ | `tMenuReactStrictly` | `MenuItemStrict` |
104
+ | `TimeNum` | `MenuProgress` |
105
+ | `tCounters` | `MenuProgressCounters` |
106
+ | `GetMouseMenuApi` | `createContextMenu` |
107
+ | `mouseMenuApi` | `contextMenu` |
108
+ | `ReactMouse` | `Layer` |
109
+ | `ReactMenu` | `MenuView` |
110
+ | `GetMenuR` | `createRightClickMenu` |
111
+ | `MenuRightApi` | `createRightMenuController` |
112
+ | `DropdownMenuTest` | `RightMenuDemo` |
113
+
114
+ ## Buttons And Grid
115
+
116
+ | Old | New |
117
+ | --- | --- |
118
+ | `MiniButton2` | `PopupButton` |
119
+ | `MiniButton3` | removed |
120
+ | `AgGridMy` | `AgGridTable` |
121
+ | `AgGridMyProps` | `AgGridTableProps` |
122
+ | `AgGridMyInner` | `AgGridTableInner` |
123
+ | `applyTransactionAsyncUpdate2` | `applyGridRows` |
124
+ | `applyTransactionAsyncUpdate` | removed; use `applyGridRows` or `useAgGrid` |
125
+ | `getUpdateTable` | removed |
126
+ | `getComparatorGrid` | removed; use `numericComparator` |
127
+ | `applyTransactionAsyncUpdate.tsx` | `gridRows.ts` |
128
+
129
+
130
+
131
+ ## Cache Helpers
132
+
133
+ | Old | New |
134
+ | --- | --- |
135
+ | `tDirtyListener` | `DirtyListener` |
136
+ | `IServerSaveBasePromise` | `CacheStorage` |
137
+ | `CSaveToCache` | `BrowserCacheStorage` |
138
+ | `CSaveToLocalStorage` | `LocalStorageCache` |
139
+ | `CacheG` | `browserCacheStorage` |
140
+ | `CacheLocal` | `localStorageCache` |
141
+ | `CacheFuncMapBase` | `createCacheMapWithStorage` |
142
+ | `CacheFuncMap` | `createCacheMap` |
143
+ | `ObjectStringToDate` | `restoreDates` |
144
+ ## Public Type Prefix Cleanup
145
+
146
+ | Old | New |
147
+ | --- | --- |
148
+ | `tToolbarItem` | `ToolbarItem` |
149
+ | `tToolbarConfig` | `ToolbarConfig` |
150
+ | `tToolbarDensity` | `ToolbarDensity` |
151
+ | `tUiListConfig` | `UiListConfig` |
152
+ | `tUiListSource` | `UiListSource` |
153
+ | `tColumnMeta` | `ColumnMeta` |
154
+ | `tColumnsSort` | `ColumnsSort` |
155
+ | `tColumnsConfig` | `ColumnsConfig` |
156
+ | `tMenuStripItem` | `MenuStripItem` |
157
+ | `tReorderOptions` | `ReorderOptions` |
158
+ | `tReorderItem` | `ReorderItem` |
159
+ | `tReorderBoardOptions` | `ReorderBoardOptions` |
160
+ | `tBoardPos` | `BoardPosition` |
161
+ | `tBoardColumn` | `BoardColumn` |
162
+ | `tSettingsSection` | `SettingsSection` |
163
+ | `tThemeMode` | `ThemeMode` |
164
+ | `tMapChangeListener` | `MapChangeListener` |
165
+ | `tCallFuncAgGrid` | `AgGridClassRule` |
166
+ | `tLogsInput` | `LogInput` |
167
+ | `tLogs` | `LogEntry` |
168
+ | `MenuRightPosition2` | `MenuRightVerticalPosition` |
169
+ | `position2` prop/state | `verticalPosition` |
170
+ | `PageLogs2` | `LogsPage` |
171
+ | `logs3.tsx` | `logsContext.tsx` |
172
+ ## wenay-common2 Names Used Here
173
+
174
+ | Old common2 alias | New name used in this package |
175
+ | --- | --- |
176
+ | `GetDblPrecision` / `GetDblPrecision2` | `decimals` |
177
+ | `NormalizeDouble` | `round` |
@@ -0,0 +1,26 @@
1
+ # v1.0.35
2
+
3
+ Date: 2026-07-08
4
+
5
+ - Changed: Migrated this repository to the published `wenay-common2@1.0.62` naming surface (`Observe`, `listen`, `Replay.replayListen`, `promiseProgress`) and updated matching React docs/tests.
6
+ - Changed: Made `README.md` a documentation index only and added the project rule file plus `doc/changes/` catalog.
7
+ - Reason: Keep the repository aligned with the breaking rename publication and make future AI edits record version-scoped changes consistently.
8
+ - Verification: `npm run build`; `npm run testjest -- --runInBand`.
9
+ - Changed: Updated `wenay-common2` from `1.0.62` to `1.0.64` and refreshed the pulled `doc/wenay-common2*.md` / `doc/NAMING_RENAMES.md` files from the npm package.
10
+ - Reason: `wenay-common2@1.0.63` adds `Observe.createStoreManager` / `Observe.managedStore` for declarative mirror/replay/offline startup; `1.0.64` packages documentation and recent-change notes into npm.
11
+ - React impact: no required hook migration in `wenay-react2`; the new manager remains a common2 resource-planning layer, while React hooks can keep wrapping concrete stores/remotes.
12
+ - Changed: Applied a breaking `wenay-react2` naming cleanup across public exports, internal imports, docs, and source filenames; added `doc/WENAY_REACT2_RENAMES.md`.
13
+ - Reason: Remove old compatibility aliases and make the package surface concise (`kit`, `memoryCache`, `FloatingWindow`, `ParamsEditor`, `Menu`, `AgGridTable`, `applyGridRows`).
14
+ - Verification: `npm run build`; `npm run testjest -- --runInBand`.
15
+ - Changed: Added a style/token audit, QA stand note, and cleanup inventory to doc/wenay-react2-rare.md; added project rules requiring rare-doc updates for style/theme/cleanup decisions.
16
+ - Changed: Updated the QA stand Vite middleware from the removed `ObserveAll2` name to the current `Observe` export from `wenay-common2`.
17
+ - Reason: Make style normalization and suspected-trash decisions explicit without deleting public exports blindly, and keep the stand runnable after the common2 rename publication.
18
+ - Verification: `npm run testReact -- --host 127.0.0.1 --port 3002` starts and `http://127.0.0.1:3002/` returns HTTP 200; `npm run build`; `npm run testjest -- --runInBand`.
19
+ - Changed: Refactored `contextMenu` around explicit `openAt` / `close` / `getState` controller methods while keeping the old `map` as a legacy Layer queue; updated QA/demo/logger callers to use `openAt`.
20
+ - Changed: Made `DropdownMenu` trigger glyph/content, class names, and inline style slots configurable (`trigger`, `classNames`, `styles`) instead of hardcoding all right-menu visuals.
21
+ - Changed: Updated both `doc/wenay-react2.md` and `doc/wenay-react2-rare.md` to describe `contextMenu.openAt` as the primary right-click integration path and `contextMenu.map` as legacy.
22
+ - Reason: Make the right-click path more logical and reduce visual lock-in from the shared library while preserving current default behavior.
23
+ - Verification: `npm run build`; `npm run testjest -- --runInBand`; QA stand `http://127.0.0.1:3002/` returns HTTP 200.
24
+ - Changed: Removed pulled `wenay-common2` docs from the README/project-rules canonical documentation list; `wenay-react2` docs now remain the only local docs that agents should update for this package.
25
+ - Reason: `wenay-common2` is an external dependency and its current docs should be read from the installed module/package; this repo should only record React-facing impact in `doc/wenay-react2.md` and `doc/wenay-react2-rare.md`.
26
+ - Verification: documentation-only update.