taet-ui 0.6.0-rc.3 → 0.6.0-rc.4

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
@@ -1,17 +1,27 @@
1
1
  # Tæt UI changes
2
2
 
3
+ ## 0.6.0-rc.4 - release candidate, 2026-11-03
4
+
5
+ - Clean current branding, remove the private historical CI link and update local benchmark/demo identifiers.
6
+ - Export taet-ui-theme v1 files as .taet-theme.json; keep importing the previous v1 format and bare definitions.
7
+ - Prefer taet-ui.theme-editor.v1 storage, fall back to the previous key and write only the current key; opening an editor does not migrate or erase stored data.
8
+ - Expose taetUiDocs and taetThemeEditor while retaining existing host aliases; preserve CSS selectors, CSS imports and cross-version drag MIME contracts.
9
+ - Rename the row-drag plain-text label to Tæt UI rows without changing reorder behavior.
10
+ - Add the real light/dark Atelier desktop showcase, a reproducible host example and documented consumer-trial limitations.
11
+ - Published rc.3 packages, release assets and source history remain unchanged. Publication outcomes are recorded in the matching GitHub prerelease notes.
12
+
3
13
  ## 0.6.0-rc.3 — local migration, 2026-11-03
4
14
 
5
15
  - Rename display branding to Tæt UI, package/imports/assets to taet-ui.
6
16
  - Preserve the released rc.2 framework scope and zero runtime dependencies.
7
17
  - Integrate the accepted PropertyGrid gutter-border and selection-marker CSS patch.
8
18
  - Retain legacy CSS selectors, tokens, drag/theme formats and the dense.css alias.
9
- - Start new history, preserving the original Dense UI folders/tags and provenance.
19
+ - Start new history, preserving the original project folders/tags and provenance.
10
20
  - Use owned Node HTTP fixtures for browser gates; retain all assertions.
11
21
  - Add classic TaetUI IIFE delivery alongside ESM, with minified variants and portable ZIP examples/checksums.
12
22
  - Prepare public npm metadata and the next preview channel; publication outcomes are verified separately. See docs/TAET_MIGRATION.md.
13
23
 
14
- The following Dense UI changelog is historical and keeps released identities.
24
+ The following pre-rename changelog is historical and keeps exact released versions.
15
25
 
16
26
  # Changelog
17
27
 
package/README.md CHANGED
@@ -4,7 +4,7 @@ Compact desktop UI controls for embedded WebViews. Build screens with live
4
4
  JavaScript objects, explicit ownership, events, commands and data models.
5
5
  No JSX, virtual DOM, runtime npm dependencies or CDN.
6
6
 
7
- **0.6.0-rc.3 is a pre-1.0 preview.** Grid/TreeGrid and Advanced remain experimental.
7
+ **0.6.0-rc.4 is a pre-1.0 release candidate; published rc.3 artifacts remain unchanged.** Grid/TreeGrid and Advanced remain experimental.
8
8
  Source packages and standalone WebView ZIPs are separate delivery choices.
9
9
  The npm preview channel uses `next`: `npm install taet-ui@next`; publication
10
10
  status is recorded in the matching GitHub prerelease notes.
@@ -60,6 +60,51 @@ In Windows PowerShell, use `npm.cmd run dev -- --port 5641` if the npm.ps1 shim
60
60
  consumes forwarded options. Check `node --version`, `npm --version` and
61
61
  `python --version` before starting.
62
62
 
63
+ ## Desktop showcase
64
+
65
+ [Atelier](https://github.com/edward-ap/taet-ui/tree/main/examples/desktop-showcase) is a runnable dummy IDE made from
66
+ TreeList, DockLayout/DockPanel, MdiWorkspace, PropertyGrid, TabBar, Menu, Toolbar,
67
+ Form and Dialog. Project data and build/run actions are synthetic. These are real
68
+ controls in the same live application, captured in the built-in light/dark themes
69
+ from the rc.4 candidate.
70
+
71
+ ![Light theme: project tree, overlapping MDI documents with Code and Design tabs, live form preview, property inspector and build output](https://raw.githubusercontent.com/edward-ap/taet-ui/main/.github/screenshots/desktop-ide-light.png)
72
+
73
+ *Light theme — the project tree selects the object inspected beside the MDI workspace.*
74
+
75
+ ![Dark theme of the same application with the same selected object, documents, properties and build output](https://raw.githubusercontent.com/edward-ap/taet-ui/main/.github/screenshots/desktop-ide-dark.png)
76
+
77
+ *Dark theme — switched on the same instance without losing edits or window state.*
78
+
79
+ <img src="https://raw.githubusercontent.com/edward-ap/taet-ui/main/.github/screenshots/desktop-ide-dialog.png" width="320" alt="Actual modal Run configuration dialog with program arguments, Cancel and Run preview actions">
80
+
81
+ *The run configuration uses a real modal Dialog and Form; fixed side placement is host CSS.*
82
+
83
+ UI composition uses live objects and explicit ownership. For example, the workspace
84
+ frame is ordinary JavaScript; the complete [example](https://github.com/edward-ap/taet-ui/tree/main/examples/desktop-showcase)
85
+ also wires selection, descriptor setters, commands, tabs and cleanup:
86
+
87
+ ```js
88
+ import {DataStore} from 'taet-ui';
89
+ import {TreeList} from 'taet-ui/components';
90
+ import {DockLayout, DockPanel, MdiWorkspace} from 'taet-ui/advanced';
91
+
92
+ const records = new DataStore();
93
+ records.parse([{id: 'project', parentId: null, text: 'Demo project'}]);
94
+ const dock = new DockLayout('#desktop', {leftSize: 216, rightSize: 268});
95
+ const explorer = dock.addPanel(new DockPanel({id: 'explorer', title: 'Project', area: 'left'}));
96
+ explorer.add(new TreeList({data: records, textField: 'text'}));
97
+ const center = dock.addPanel(new DockPanel({id: 'editor', title: 'Workspace', area: 'center'}));
98
+ center.add(new MdiWorkspace({width: '100%', height: '100%'}));
99
+ const destroy = () => { dock.destroy(); records.destroy(); };
100
+ ```
101
+
102
+ The host supplies data, actions and layout CSS. A WebView can serve the full ESM
103
+ profile with matching local CSS/fonts through its own origin; Node/npm are build
104
+ tools. The example explains the import map and teardown. Desktop APIs retain their
105
+ [experimental maturity](docs/STABLE_API.md); the consumer trial and its API friction
106
+ are described in the [example notes](https://github.com/edward-ap/taet-ui/tree/main/examples/desktop-showcase).
107
+
63
108
  ## Use it in a WebView
64
109
 
65
110
  Copy one built profile's JS, matching CSS, `fonts/`, `LICENSE` and
@@ -86,12 +131,12 @@ export function destroy() { screen.destroy(); } // Host calls this when closing.
86
131
  ```
87
132
 
88
133
  A source-only [minimal Tauri host](examples/tauri-minimal/README.md) demonstrates
89
- a compact Form and bounded Rust echo. Its historical Dense UI Windows smoke passed
134
+ a compact Form and bounded Rust echo. Its historical pre-rename Windows smoke passed
90
135
  7/7 programmatic checks. A renamed Tæt UI native rebuild, physical input and other OSes remain unverified.
91
136
 
92
137
  For TypeScript or resolver-based apps, `npm pack --pack-destination ..` creates
93
- the local `taet-ui-0.6.0-rc.3.tgz`. Install that file in your app with
94
- `npm install ../taet-ui-0.6.0-rc.3.tgz`. Bare package names need a resolver or
138
+ the local `taet-ui-0.6.0-rc.4.tgz`. Install that file in your app with
139
+ `npm install ../taet-ui-0.6.0-rc.4.tgz`. Bare package names need a resolver or
95
140
  browser import map; installing a tarball does not create native browser URLs.
96
141
 
97
142
  | Import | Scope |
@@ -109,7 +154,7 @@ screen, read [mutation/ownership examples](docs/MUTATIONS.md).
109
154
  ## Preview limits
110
155
 
111
156
  Current migration checks are recorded in [verification](docs/VERIFICATION.md).
112
- Earlier Dense UI results identify their original inputs and are historical evidence.
157
+ Earlier pre-rename results identify their original inputs and are historical evidence.
113
158
 
114
159
  Recorded checks include Windows browser automation and a separate Windows
115
160
  Tauri/WebView2 acceptance stand. Programmatic/synthetic input is distinguished
@@ -127,7 +172,8 @@ For contributors: [setup/checks](CONTRIBUTING.md), [AI entry point](docs/AI_CONT
127
172
  Browser tests additionally require matching Playwright binaries; `npm ci` alone
128
173
  does not install them. After npm ci, use `npx playwright install chromium firefox webkit`.
129
174
  For selective Windows project flags, use the direct-node commands in
130
- [release checks](docs/RELEASE.md). CI definitions are provided; no remote CI pass is claimed.
175
+ [release checks](docs/RELEASE.md). Exact remote CI and publication outcomes are
176
+ linked from the matching GitHub prerelease notes.
131
177
 
132
178
  Tæt UI is [MIT](LICENSE). Local Noto Sans is OFL; retain its license and
133
179
  [third-party notices](THIRD_PARTY_NOTICES.md) when distributing assets.
@@ -1,10 +1,10 @@
1
1
  # Third-party notices
2
2
 
3
- Dense UI source is licensed under [MIT](LICENSE). Core has no npm runtime dependencies. No external icon font or icon package is bundled; icons are implemented in the source registry.
3
+ Tæt UI source is licensed under [MIT](LICENSE). Core has no npm runtime dependencies. No external icon font or icon package is bundled; icons are implemented in the source registry.
4
4
 
5
- Development tests use [Playwright](https://github.com/microsoft/playwright), licensed under Apache-2.0. Installed packages and downloaded browser distributions retain their own notices and are not included in the Dense UI package.
5
+ Development tests use [Playwright](https://github.com/microsoft/playwright), licensed under Apache-2.0. Installed packages and downloaded browser distributions retain their own notices and are not included in the Tæt UI package.
6
6
 
7
- Declaration and package-consumer tests use [TypeScript](https://github.com/microsoft/TypeScript), licensed under Apache-2.0. It is a development dependency and is not shipped in the Dense UI package or required at runtime.
7
+ Declaration and package-consumer tests use [TypeScript](https://github.com/microsoft/TypeScript), licensed under Apache-2.0. It is a development dependency and is not shipped in the Tæt UI package or required at runtime.
8
8
 
9
9
  New third-party source, artwork or fonts must include attribution and license. This inventory describes the checked-in tree and manifests, not undisclosed historical provenance.
10
10
 
@@ -17,7 +17,7 @@ Copyright and full license: `src/ui/fonts/NotoSans-OFL.txt` in source/package
17
17
  delivery, or `fonts/NotoSans-OFL.txt` beside a portable bundle.
18
18
  Source/conversion provenance is in the repository file `src/ui/fonts/README.md`.
19
19
  Runtime WOFF2 SHA-256: `7ed77c38412a34312e975abcd5eb2b2848a596f1921393f925a53a27938eb116`.
20
- The font license is separate from Dense UI's MIT license.
20
+ The font license is separate from Tæt UI's MIT license.
21
21
 
22
22
  ## Optional font comparison Lab
23
23
 
@@ -38,8 +38,8 @@ No color library or new runtime dependency is included.
38
38
  ## Build tool
39
39
 
40
40
  Portable bundles use esbuild (MIT) as a development/build dependency. Its code is
41
- not a required runtime library in the Dense UI delivery. Source: https://github.com/evanw/esbuild .
41
+ not a required runtime library in the Tæt UI delivery. Source: https://github.com/evanw/esbuild .
42
42
 
43
43
  An optional Tauri source example has separate Rust host dependencies. Those are
44
- not Dense UI JavaScript runtime dependencies; source users retain their upstream
44
+ not Tæt UI JavaScript runtime dependencies; source users retain their upstream
45
45
  licenses. A distributed native binary needs its own resolved dependency notice review.
@@ -1,6 +1,6 @@
1
1
  # Tæt UI: start here
2
2
 
3
- 0.6.0-rc.3 is a dependency-free desktop/WebView preview.
3
+ 0.6.0-rc.4 is a dependency-free desktop/WebView preview.
4
4
 
5
5
  1. Read [LLM_GUIDE](LLM_GUIDE.md), then one [AI_MAP](AI_MAP.md) row.
6
6
  2. Read its exact public .d.ts and one recipe before guessing a method.
@@ -1,6 +1,6 @@
1
1
  # Native host acceptance
2
2
 
3
- A Windows Tauri acceptance stand used Dense UI 0.6.0-rc.1 from commit
3
+ A Windows Tauri acceptance stand used the pre-rename 0.6.0-rc.1 release from commit
4
4
  18c65890435e1bae97af262a20ced705e0e49e4f. It embedded one components profile,
5
5
  matching CSS, local Noto Sans and notices, with no frontend framework or CDN.
6
6
 
@@ -14,7 +14,7 @@ window probe is deliberately unavailable there.
14
14
  The author additionally reported real Grid Move and Tree Move fixture operations.
15
15
  That bounded observation does not certify the complete keyboard/mouse/IME matrix.
16
16
  The large acceptance stand, EXE, local profiles and raw diagnostic reports are not
17
- the small public example or a required runtime dependency of Dense UI.
17
+ the small public example or a required runtime dependency of this toolkit.
18
18
 
19
19
  Still unverified: actual IME composition; complete physical keyboard/pointer flow;
20
20
  screen readers; mixed-monitor DPI; native file dialogs/clipboard; other WebView hosts.
@@ -1,6 +1,6 @@
1
1
  # API maturity
2
2
 
3
- 0.6.0-rc.3 preserves the stable root and experimental status of retained APIs.
3
+ 0.6.0-rc.4 preserves the stable root and experimental status of retained APIs.
4
4
  Tier does not promote maturity: [TIERS](TIERS.md).
5
5
  Grid/TreeGrid remain experimental. Approved common-contract changes are recorded
6
6
  in the candidate manifest; maturity and tier boundaries are unchanged.
@@ -1,60 +1,61 @@
1
- # Tæt UI local migration
2
-
3
- Display name: Tæt UI. Technical/package name: taet-ui. GitHub repository:
4
- edward-ap/taet-ui (https://github.com/edward-ap/taet-ui), created public after explicit
5
- maintainer authorization on 2026-11-03. Initial commit d03a9c0 was local-only; it
6
- is preserved. A separate harness fix and release-preparation changes follow it.
7
- GitHub release/CI and npm publication outcomes are verified separately.
8
-
9
- ## Source inventory and choice
10
-
11
- | Input | Identity | Decision |
12
- | --- | --- | --- |
13
- | Original dense-ui | HEAD 18c65890435e1bae97af262a20ced705e0e49e4f with local edits | Older framework; preserved in place |
14
- | Released rc.2 source | 1e51bdc8baa99130954206b0aff6367b0764e9d6, clean | All 878 tracked files copied as baseline |
15
- | Runtime feedback base | be78df1056d1c25369b989f51d7819f37c88c8fd | Included through rc.2: Date sorting, Switch focus, fixture readiness and documentation |
16
- | Accepted PropertyGrid production patch | codex/property-grid-presentation on rc.2 | Only src/ui/styles/property-grid.css integrated: 2 insertions, 11 deletions |
17
- | SelectInput CORE_PROPOSAL.md | Investigation | Excluded; not an accepted framework patch |
18
- | Radio application styling | Application-specific 24px square arrow and polish | Excluded; external consumers unchanged |
19
- | Old archive/specialized extensions | Painter/Viewport/StockChart/FlatFile/Spectrum/Pivot | Excluded; released scope retained |
20
-
21
- The PropertyGrid patch insets category borders past the +/- gutter and compensates
22
- the triangle position; it removes only the selected-row blue pseudo-element marker.
23
- Selection background, focus, keyboard behavior and JS API are preserved.
24
- Its SHA-256 is 3c62abcc2f6bedad1b2c9da3a1b3d8255193645cf201237f2ee78135ec1a5ac2.
25
- All 47 approved Grid/TreeGrid file hashes and immutable imported provenance bytes
26
- are preserved. Candidate packageVersion alone advances to match the new package.
27
-
28
- Version 0.6.0-rc.3 identifies these changed artifacts without reusing released rc.2.
29
- No old tags/history are copied, moved or rewritten. MIT/OFL licenses and attribution
30
- are retained. Historical verification and release notes keep their original names,
31
- versions, links and exact evidence identities; they are not new migration results.
32
-
33
- ## Names and compatibility
34
-
35
- Current documentation, package imports, examples, build profiles and portable assets
36
- use taet-ui; human-facing titles use Tæt UI. Canonical CSS is taet-ui/taet-ui.css.
37
- taet-ui/dense.css and src/ui/dense.css remain import aliases for CSS migration.
38
- JavaScript export names and constructor identity remain unchanged.
39
-
40
- The dui-* classes, --dui-* tokens, semantic density values, denseUiDocs inspection global, denseThemeEditor demo
41
- host global, dense-ui.theme-editor.v1 local storage key, dense-ui-theme JSON format,
42
- application/x-dense-ui-grid-rows and application/x-dense-ui-tree-nodes MIME types
43
- remain compatibility contracts. Grid's legacy human-readable drag text also remains
44
- to preserve reviewed source bytes. Do not globally replace the word dense.
45
- Test runner configuration now uses TAET_UI_PORT/WORKERS/TEST_OUTPUT/TEST_SERVER.
46
- Portable bundles are taet-ui[.min].js/css (full/components/foundation).
47
-
48
- ## Excluded local material and publication
49
-
50
- Only baseline tracked files were selected: no old .git, node_modules, dist, reports,
51
- private notes, caches, profiles, test artifacts or application implementations.
52
- Original folders, accepted-patch worktrees and existing consumers remain in place.
53
- The destination was empty immediately before copying.
54
-
55
- The initial root private:true prevented accidental npm publication. The maintainer
56
- subsequently authorized a public repository, GitHub prerelease and npm taet-ui
57
- publication under next. Root publishConfig now selects public access/next; portable
58
- profile package.json files remain private. Read-only registry lookup does not
59
- reserve a name. No old repo visibility/tags or external consumers are changed.
60
- Native Tauri rebuild and non-Windows native acceptance are not implied by browser checks.
1
+ # Tæt UI migration and compatibility
2
+
3
+ Display name: Tæt UI. Package, import and repository name: taet-ui.
4
+ The public repository is https://github.com/edward-ap/taet-ui.
5
+ The current 0.6.0-rc.4 candidate retains published rc.3 source, npm versions,
6
+ GitHub releases and assets unchanged. Each new publication has its own version
7
+ and assets; exact outcomes are recorded in the matching GitHub prerelease notes.
8
+
9
+ ## Source inventory
10
+
11
+ - Released rc.2 baseline: 1e51bdc8baa99130954206b0aff6367b0764e9d6, 878 tracked files.
12
+ - Feedback base: be78df1056d1c25369b989f51d7819f37c88c8fd, included through rc.2.
13
+ - Original working source: 18c65890435e1bae97af262a20ced705e0e49e4f, preserved separately.
14
+ - Accepted PropertyGrid presentation patch: category-border gutter inset and removal
15
+ of the selected-row blue pseudo-element, preserving background/focus/keyboard.
16
+ Original patch SHA-256: 3c62abcc2f6bedad1b2c9da3a1b3d8255193645cf201237f2ee78135ec1a5ac2.
17
+ - Excluded: unaccepted SelectInput proposal, application-specific radio styling,
18
+ old specialized Painter/Viewport/StockChart/FlatFile/Spectrum/Pivot extensions.
19
+
20
+ Initial commit d03a9c0, harness fix 635df4a and rc.3 preparation/history remain.
21
+ The immutable imported source-snapshot.json stays byte-for-byte unchanged.
22
+ The rc.4 Grid candidate changes only the reviewed row-drag display text; the other
23
+ 46 reviewed source hashes and all imported hashes remain unchanged. No row move,
24
+ selection, event, MIME or ownership behavior is changed by that presentation edit.
25
+ Exact current hashes are in provenance/grid-candidate.json.
26
+
27
+ ## Current names and retained compatibility
28
+
29
+ Canonical CSS import: taet-ui/taet-ui.css. The taet-ui/dense.css export and
30
+ src/ui/dense.css file stay as forwarding aliases for installed consumers.
31
+ The immutable imported manifest also records that original stylesheet filename.
32
+ The dui-* classes, data-dui-* attributes and --dui-* tokens remain CSS/DOM contracts.
33
+ Semantic compact/density options and ordinary English wording retain their meaning.
34
+
35
+ Theme export writes format taet-ui-theme, version 1, and .taet-theme.json filenames.
36
+ Import also accepts dense-ui-theme version 1 and the existing bare definitions.
37
+ Older implementations do not understand the new format tag; backward reading is
38
+ provided by the new implementation, not by rewriting already published packages.
39
+
40
+ Preset storage reads taet-ui.theme-editor.v1 first and falls back to
41
+ dense-ui.theme-editor.v1 only when the current key is absent. An empty current
42
+ array is authoritative. No eager write occurs on mount. The next preset mutation
43
+ writes the full collection to the current key, leaving the previous key untouched.
44
+
45
+ Canonical documentation/example globals are taetUiDocs and taetThemeEditor.
46
+ denseUiDocs and denseThemeEditor remain aliases to the same objects for existing
47
+ inspection and documented host integrations. New examples/tests use current names.
48
+
49
+ application/x-dense-ui-grid-rows and application/x-dense-ui-tree-nodes stay as
50
+ cross-version drag MIME contracts. Their runtime strings and compatibility tests
51
+ are intentional residuals; renaming them would require a separate protocol change.
52
+ The plain-text row drag label is Tæt UI rows.
53
+
54
+ ## Boundaries
55
+
56
+ Zero runtime dependencies, existing constructors, exports and maturity tiers remain.
57
+ No external application, original source directory, historical tag or remote is edited.
58
+ Only tracked framework inputs are packaged; generated dist/distribution, dependencies,
59
+ reports, caches and private diagnostics remain out of Git. MIT/OFL attribution and
60
+ third-party license text are retained. Native rebuilds and physical-input acceptance
61
+ are separate from browser automation. See VERIFICATION.md for exact checked inputs.
@@ -1,3 +1,143 @@
1
+ # rc.4 publication preflight - 2026-11-03
2
+
3
+ The maintainer authorized a new rc.4 GitHub prerelease and npm next publication.
4
+ This preparation combines the reviewed 140478d4 cleanup and 51424a27 desktop
5
+ showcase; rc.3 versions, tags and assets are immutable. It changes release wording
6
+ and uses absolute public GitHub image/example URLs so the npm README can display
7
+ the showcase without shipping PNGs or a duplicate application in the tarball.
8
+
9
+ Production src/scripts/package inputs are unchanged from the fully checked rc.4
10
+ cleanup: content SHA-256 91a1636bc57547a47b51a3f8d9e57916865eaeec96c4c5109d149f5cf139894a.
11
+ The exact completed local gate results and the three-engine showcase checks are
12
+ recorded below. Publication re-runs, final-commit CI and registry/archive checks
13
+ are recorded separately in the matching GitHub prerelease notes. This preflight
14
+ entry does not claim those external operations succeeded.
15
+
16
+ Source review: 898 tracked files; no generated archives, dependencies, reports or
17
+ secret-pattern matches in tracked content. The three PNGs total 470481 bytes and
18
+ retain the recorded hashes. The immutable imported manifest is byte-identical;
19
+ all 47 reviewed candidate hashes pass the boundary guard. No export or maturity
20
+ changes are introduced. Final archives must use --release from the final clean
21
+ commit and embed that revision; npm must be verified independently after upload.
22
+
23
+ Native WebView/physical-input, IME, screen-reader and non-Windows native limits
24
+ remain as described below. Browser automation and remote CI do not remove them.
25
+
26
+ ---
27
+
28
+ # README desktop showcase verification - 2026-11-03
29
+
30
+ README now links a small runnable examples/desktop-showcase host and contains real
31
+ light/dark screenshots of that same application instance plus an actual Dialog
32
+ detail. Capture: local rc.4 core from 140478d4a0e8b91763b9413512b022500f46601c,
33
+ Windows Chromium 149, viewport 1200x700, DPR 2, bundled font ready before capture.
34
+ No browser chrome or machine paths appear. Synthetic records and build/run
35
+ simulation are labeled; no real compiler or native backend is claimed.
36
+
37
+ A separate model context installed public npm rc.3, using README/docs, public
38
+ declarations and checked recipes under a no-implementation-inspection constraint.
39
+ It then installed the verified local rc.4 tarball. The final identical app passed
40
+ 12 checks on each version, with no browser errors or external requests. This was
41
+ a directed trial: coordinator review added sequential-typing and positioning QA.
42
+ It is not a general model, timing or token-efficiency benchmark.
43
+
44
+ The follow-up found a consumer wiring error: same-ID selection invalidations
45
+ rebound PropertyGrid after the first typed character. A selected-ID guard fixes
46
+ it; every prefix of the 16-character edit now retains the original focused editor
47
+ and updates model/preview. Fixed host CSS prevented Dialog title dragging, so
48
+ draggable:false is explicit. Dialog-owned Form destruction is explicit and checked
49
+ after both Cancel and Run. Other friction involved aggregate declaration files,
50
+ guessed icons, Toolbar showText and TextArea css/label options. No library
51
+ implementation or runtime stylesheet was changed for these corrections.
52
+
53
+ Consumer/capture app.js raw SHA-256:
54
+ 4998845f8baf8b117d86fb0e21d4eae1b3d7aefb2abc1e51a19d825c58a74ae0.
55
+ The curated app.js/host.css normalize only line endings/EOF whitespace; their
56
+ logic/styles match the installed-package trial. The repository host only
57
+ maps public entries to this checkout and adds pagehide cleanup. The same 12 checks
58
+ also pass against this host in Chromium, Firefox and WebKit. They exercise Menu,
59
+ TreeList/PropertyGrid/model/preview synchronization including sequential typing,
60
+ MDI activation/open/close, dock collapse/menu restore, TabBar content, Dialog
61
+ cancel/primary action/content destruction, and theme state retention.
62
+
63
+ README relative image paths and alt text load in a local 896px layout preview,
64
+ with no horizontal overflow. The exact new JavaScript excerpt mounts successfully
65
+ and its cleanup removes all owned controls. All three PNGs were visually inspected;
66
+ lossless IDAT optimization preserves every pixel. Sizes: light 220154 bytes,
67
+ dark 218594, Dialog 31733; total 470481 bytes. Images live under .github/screenshots
68
+ and the small example is outside the npm files allowlist. Raw trial reports,
69
+ private test tooling, dependencies and draft captures remain outside Git.
70
+
71
+ Syntax check: 542 files. API inventory and package boundaries pass, including all
72
+ 47 approved Grid candidate hashes. Production src/scripts/package manifests are
73
+ unchanged from the preceding fully checked rc.4 commit; those full core gates were
74
+ not needlessly rerun for documentation/host assets. No new native WebView/physical
75
+ input/IME or screen-reader acceptance is claimed. Published rc.3 and remote state
76
+ were not changed. The PropertyGrid presentation baseline already existed in rc.3;
77
+ the dummy IDE does not test rc.4-specific theme-file/storage migration.
78
+
79
+ ---
80
+
81
+ # rc.4 local branding and compatibility verification - 2026-11-03
82
+
83
+ 0.6.0-rc.4 is an unpublished local candidate based on
84
+ ab75c464ed300a8680e7081b94db3744b78c4dfd. No push, registry publication,
85
+ release edit or external application change is part of this cleanup. Published
86
+ rc.3 and its six original local release assets are preserved; old local outer
87
+ manifests are retained under ignored distribution/rc.3-publication/.
88
+
89
+ Current branding, notices, the row-drag label, export filenames and local benchmark
90
+ identifiers use the current project name. The broken private historical CI link is
91
+ removed. Exact old versions/commits still identify historical native evidence;
92
+ none is relabeled as a newly executed native test.
93
+
94
+ Theme export writes taet-ui-theme v1 and .taet-theme.json. Import retains the
95
+ previous v1 tag and bare definitions. Storage reads the current key first, falls
96
+ back only when it is absent, writes the current key on mutation and never eagerly
97
+ rewrites the previous key. Canonical globals retain their old host aliases.
98
+ See [compatibility decisions](TAET_MIGRATION.md) for retained CSS/MIME/storage
99
+ names and one-way backward reading of saved files.
100
+
101
+ Reviewed Grid change: only the plain-text row drag label. New
102
+ GridRowReorderController.js SHA-256:
103
+ 83b559b6e08b7413033402e734df54a41748b6ba9a957b11b1debd230dcfd75b.
104
+ The other 46 candidate source hashes, all imported hashes and immutable
105
+ source-snapshot.json bytes are unchanged. MIT/OFL/font bytes are preserved;
106
+ notices change only this project's descriptive name.
107
+
108
+ | Check on the rc.4 working tree | Result |
109
+ | --- | --- |
110
+ | New compatibility and row-drag targeted cases | 13/13 passed |
111
+ | npm run test:all, including npm test | Passed: syntax 541, API/boundaries, 695/695 units, full Chromium 728/728 |
112
+ | Installed source-package consumers | Strict TypeScript/JSDoc, NodeNext + Bundler and browser recipes passed; 476 bindings across entries |
113
+ | Standard Firefox compatibility, port 5893, one worker | 473/473 passed |
114
+ | Standard WebKit compatibility, port 5894, one worker | 473/473 passed |
115
+ | npm run test:bundle | 42/42 across Chromium/Firefox/WebKit; readable/minified ESM/IIFE and bundled font |
116
+ | Isolated pre-commit ZIP consumers | 18/18: three profiles, two formats, three engines; live input/action, font and teardown; blocked external requests |
117
+ | Preview ZIP manifests/contents | 22 entries/profile; content hashes, relative maps, required assets/licenses/examples and secret-pattern checks passed |
118
+ | Pre-report npm pack inspection | 496 tracked entries byte-matched; zero runtime dependencies; source/types/CSS/font exports preserved |
119
+ | Scope check | One Grid presentation string; other candidate hashes, license/font bytes and six original local rc.3 release assets preserved |
120
+ | Source/artifact legacy-name scan | 39 source matches: 24 compatibility/test/documentation and 15 ordinary English; no obsolete product branding or old HTTP link |
121
+ | ZIP residuals including source maps | full 32, components 16, foundation 0; only retained MIME and backward theme/storage strings |
122
+
123
+ Full Chromium used two workers, Firefox and Windows WebKit one each, on isolated
124
+ ports/outputs. This retains the existing Windows resource mitigation and WebKit
125
+ cap; assertions and global timeouts are unchanged. Compatibility now additionally
126
+ includes the new migration cases and existing row-reorder regressions.
127
+
128
+ Build input content SHA-256: 91a1636bc57547a47b51a3f8d9e57916865eaeec96c4c5109d149f5cf139894a.
129
+ These checks identify the pre-commit rc.4 working-tree content, not the older base
130
+ commit. Final archives must be regenerated from the clean local commit with
131
+ --release and their exact revision recorded in PROVENANCE.json. Repack after this
132
+ verification-record update so the tarball contains the current documentation.
133
+
134
+ Remaining boundaries: no native Tauri/WebView2 rebuild, physical input/IME,
135
+ screen-reader, mixed-monitor or non-Windows native acceptance was rerun. Existing
136
+ applications and optional licensed-vendor benchmarks were not modified or run.
137
+ Ignored old reports/caches and preserved rc.3/history are not new release inputs.
138
+
139
+ ---
140
+
1
141
  # Publication destination correction — 2026-11-03
2
142
 
3
143
  The maintainer's final destination is **edward-ap/taet-ui**, matching npm taet-ui.
@@ -16,7 +156,7 @@ Initial local commit d03a9c065a16ffe9bf2240fffc4dc1ecc54ec587 is preserved.
16
156
  Harness fix 635df4a57ec713b3a5cc8963b0b3b9e4c46bc005 is a separate commit.
17
157
  The maintainer subsequently authorized the public edward-ap/taet-ui repository,
18
158
  GitHub prerelease/distribution and npm taet-ui publication under next. The new
19
- repository was created public; the old dense-ui repository stayed private and
159
+ repository was created public; the original project repository stayed private and
20
160
  its v0.6.0-rc.2 tag still targets 1e51bdc8baa99130954206b0aff6367b0764e9d6.
21
161
  Remote release/CI and npm registry outcomes are recorded separately in release
22
162
  notes; local checks below do not themselves claim either publication succeeded.
@@ -79,14 +219,14 @@ rejects stale build input digests and --release requires a clean commit. Final
79
219
  archive provenance identifies the exact release commit. Maps contain public code.
80
220
 
81
221
  No new native Tauri/WebView2, physical IME/screen-reader or mixed-monitor acceptance
82
- was performed. Historical native evidence below keeps its original Dense UI
222
+ was performed. Historical native evidence below keeps its original pre-rename
83
223
  identities. The new browser/distribution results do not certify native hosts.
84
224
 
85
225
  ---
86
226
 
87
227
  # Tæt UI migration verification — 2026-11-03
88
228
 
89
- These are new local checks of taet-ui 0.6.0-rc.3, based on released Dense UI
229
+ These are new local checks of taet-ui 0.6.0-rc.3, based on the pre-rename release
90
230
  1e51bdc8baa99130954206b0aff6367b0764e9d6 plus the accepted PropertyGrid CSS patch.
91
231
  See [migration inventory and naming decisions](TAET_MIGRATION.md). Historical
92
232
  results below retain their original identities and are not new Tæt UI evidence.
@@ -191,7 +331,7 @@ The intended future repository is edward-ap/taet-ui, requiring a separate action
191
331
 
192
332
  ---
193
333
 
194
- # Historical Dense UI verification (original identities preserved)
334
+ # Historical pre-rename verification (exact versions preserved)
195
335
 
196
336
  # Verification scope
197
337
 
@@ -206,7 +346,7 @@ fonts and the reviewed Grid file hashes are unchanged from that input. Final
206
346
  release checks and CI run again on the resulting release commit. Results below
207
347
  identify the feedback base and are not silently transferred to another SHA.
208
348
 
209
- [CI run 41375177487](https://github.com/edward-ap/dense-ui/actions/runs/41375177487)
349
+ Archived pre-rename CI run 41375177487 (private repository; not a public validation link)
210
350
  completed successfully on that exact feedback SHA, first attempt, all six jobs:
211
351
 
212
352
  - 692 unit tests; full Chromium 719/719 in each Windows/Linux Node22/24 job.
@@ -4,7 +4,7 @@ These are project recommendations for preview releases; the maintainer confirms
4
4
  each public version/tag. This document does not change the current version or
5
5
  create a new compatibility guarantee.
6
6
 
7
- 0.6.0-rc.3 is a preview, not a 1.0 compatibility promise. Stable root and
7
+ 0.6.0-rc.4 is a preview, not a 1.0 compatibility promise. Stable root and
8
8
  experimental API are listed separately in STABLE_API.md. Import tiers describe
9
9
  architecture; they do not change maturity.
10
10
 
@@ -19,6 +19,6 @@ A release identifies its exact Git commit and asset hashes. Validate the final
19
19
  candidate after all source/documentation edits, not only its previous runtime build.
20
20
 
21
21
  The initial migration kept private:true. Explicit maintainer authorization now
22
- prepares rc.3 for public npm publication with publishConfig.tag=next, alongside a
22
+ prepares rc.4 for public npm publication with publishConfig.tag=next, alongside a
23
23
  GitHub prerelease. These remain separate outcomes: confirm registry availability
24
24
  and remote release assets independently; a local tarball is not publication.
package/docs/src/main.js CHANGED
@@ -5,4 +5,4 @@ const shell = new DocsShell("#docs-root", {
5
5
  catalog: docsCatalog
6
6
  });
7
7
 
8
- window.denseUiDocs = { shell, catalog:docsCatalog };
8
+ window.denseUiDocs = window.taetUiDocs = { shell, catalog:docsCatalog };
@@ -84,9 +84,9 @@ export const treeListPage = {
84
84
  owner.add(actions, tree);
85
85
  tree.data.parse([
86
86
  { id: "projects", parentId: null, text: "Projects" },
87
- { id: "dense", parentId: "projects", text: "Tæt UI" },
88
- { id: "components", parentId: "dense", text: "Components" },
89
- { id: "docs", parentId: "dense", text: "Documentation" },
87
+ { id: "taet", parentId: "projects", text: "Tæt UI" },
88
+ { id: "components", parentId: "taet", text: "Components" },
89
+ { id: "docs", parentId: "taet", text: "Documentation" },
90
90
  { id: "archive", parentId: null, text: "Archive" },
91
91
  { id: "previous", parentId: "archive", text: "Previous releases" }
92
92
  ], { origin: "import" });
@@ -5,7 +5,7 @@ trimmed from the Windows acceptance stand; it does not ship that stand's EXE,
5
5
  profiles, reports, fixture data, test harness or copied Tæt UI implementation.
6
6
 
7
7
  **Windows build/run smoke verified (2026-11-01).** This trimmed source was built
8
- as a separate consumer with historical Dense UI 0.6.0-rc.1 assets from commit
8
+ as a separate consumer with historical pre-rename 0.6.0-rc.1 assets from commit
9
9
  18c65890435e1bae97af262a20ced705e0e49e4f and run in standalone WebView2
10
10
  156.0.4314.58 on Windows 11. Local JS/CSS/Noto loading, bounded Rust echo and
11
11
  programmatic Form input/button handling passed. These are this example's own
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "taet-ui",
3
- "version": "0.6.0-rc.3",
3
+ "version": "0.6.0-rc.4",
4
4
  "type": "module",
5
5
  "scripts": {
6
6
  "dev": "python scripts/dev-server.py --port 5173 --bind 127.0.0.1",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "packageVersion": "0.6.0-rc.3",
4
- "changeSet": "feedback-ci-boolean-input-focus-2026-11-02",
5
- "note": "User-approved Grid/TreeGrid contract evolution; imported provenance is preserved separately.",
3
+ "packageVersion": "0.6.0-rc.4",
4
+ "changeSet": "branding-row-drag-label-2026-11-03",
5
+ "note": "User-authorized branding cleanup; reviewed Grid delta is the row-drag plain-text label only. Imported provenance and the other 46 candidate source hashes are preserved.",
6
6
  "importManifestSha256": "9d32c9bcbbafcce32f04719b4b095b6c8b8bed1230ae7bc47aeff18bc3150d67",
7
7
  "files": [
8
8
  {
@@ -188,7 +188,7 @@
188
188
  {
189
189
  "path": "src/ui/GridRowReorderController.js",
190
190
  "importedSha256": "dfb289d6824b2538ba98fae598a80aed5e6aecf5732231c31123506c6134bf42",
191
- "sha256": "dfb289d6824b2538ba98fae598a80aed5e6aecf5732231c31123506c6134bf42"
191
+ "sha256": "83b559b6e08b7413033402e734df54a41748b6ba9a957b11b1debd230dcfd75b"
192
192
  },
193
193
  {
194
194
  "path": "src/ui/GridRowTransferController.js",
@@ -39,7 +39,7 @@ export class GridRowReorderController {
39
39
  if (!g?._canReorderRows() || !hit?.item) { event.preventDefault(); return; }
40
40
  this.state = { ids: this.ids(hit.item) };
41
41
  event.stopPropagation();
42
- event.dataTransfer?.setData('text/plain', 'Dense UI rows');
42
+ event.dataTransfer?.setData('text/plain', 'Tæt UI rows');
43
43
  if (event.dataTransfer) event.dataTransfer.effectAllowed = 'move';
44
44
  // Projection/data changes cancel the gesture; scrolling does not.
45
45
  for (const model of [g.data, g.view, g.groups]) {
@@ -31,7 +31,7 @@ export interface ThemeDesignerOptions extends BaseControlOptions {
31
31
  storage?:Pick<Storage,'getItem'|'setItem'>;
32
32
  onChange?:(event:ThemeDesignerChange)=>void;
33
33
  }
34
- /** Experimental. Include dense.css. No iframe, network, native bridge or global theme mutation. */
34
+ /** Experimental. Include taet-ui/taet-ui.css. No iframe, network, native bridge or global theme mutation. */
35
35
  export declare class ThemeDesigner extends BaseControl<{change:ThemeDesignerChange}> {
36
36
  constructor(options?:ThemeDesignerOptions);
37
37
  constructor(container:HTMLElement|string,options?:ThemeDesignerOptions);
@@ -18,13 +18,13 @@ const normalize=input=>editorDefinition(input,maxColors);
18
18
  const find=selector=>root.querySelector(selector.replace(/#([\w-]+)/g,'[data-designer-ref="$1"]'))??root.querySelector(selector);
19
19
  const body=options.body??root,storage=options.storage??null,hostConnection=createHostConnection(options.host);
20
20
  const getPreview=()=>options.preview??preview.contentWindow;
21
- const owners=[],fields={},storageKey='dense-ui.theme-editor.v1';
21
+ const owners=[],fields={},storageKey='taet-ui.theme-editor.v1',legacyStorageKey='dense-ui.theme-editor.v1';
22
22
  let lastReported='',changeMeta={origin:'api',userAction:false};
23
23
  let definition=loadPreset(presets[0]),result,frame=null,disposed=false,custom=[],selected='builtin:0',inspectedRay='a';
24
24
  const notice=createNotice(root,options.notificationDuration);owners.push(notice);
25
25
  const preview=find('#preview');
26
26
  function attempt(action){try{action();}catch(e){notice.show(e.message);}}
27
- try{const saved=JSON.parse(storage?.getItem(storageKey)??'[]');if(!Array.isArray(saved)||saved.length>50)throw Error('Invalid preset storage');custom=saved.map(p=>{if(typeof p.name!=='string'||typeof p.id!=='string')throw Error('Invalid preset');return {id:p.id,name:p.name.slice(0,80),deleted:p.deleted===true,definition:normalize(p.definition)};});}catch(e){notice.show(`Saved presets unavailable: ${e.message}`);}
27
+ try{const saved=JSON.parse(storage?.getItem(storageKey)??storage?.getItem(legacyStorageKey)??'[]');if(!Array.isArray(saved)||saved.length>50)throw Error('Invalid preset storage');custom=saved.map(p=>{if(typeof p.name!=='string'||typeof p.id!=='string')throw Error('Invalid preset');return {id:p.id,name:p.name.slice(0,80),deleted:p.deleted===true,definition:normalize(p.definition)};});}catch(e){notice.show(`Saved presets unavailable: ${e.message}`);}
28
28
  const own=c=>(owners.push(c),c);
29
29
  own(new LabelText(find('#distribution-caption'),{text:'Distribution'}));
30
30
  own(new LabelText(find('#theme-caption'),{text:'Theme'}));
@@ -33,8 +33,8 @@ export function createPresetToolbar(host,api){
33
33
  Copy:async()=>{const p=await pick('copy');if(p)await named('Copy preset',p.definition,p.name+' copy');},
34
34
  Import:()=>{file.value='';file.click();},
35
35
  Export:()=>{
36
- const p=api.current(),text=JSON.stringify({format:'dense-ui-theme',version:1,name:p.name,definition:JSON.parse(serialize(p.definition))},null,2);
37
- const url=URL.createObjectURL(new Blob([text],{type:'application/json'})),a=document.createElement('a');a.href=url;a.download=p.name.replace(/[^a-z0-9_-]/gi,'-')+'.dense-theme.json';a.click();setTimeout(()=>URL.revokeObjectURL(url),1000);
36
+ const p=api.current(),text=JSON.stringify({format:'taet-ui-theme',version:1,name:p.name,definition:JSON.parse(serialize(p.definition))},null,2);
37
+ const url=URL.createObjectURL(new Blob([text],{type:'application/json'})),a=document.createElement('a');a.href=url;a.download=p.name.replace(/[^a-z0-9_-]/gi,'-')+'.taet-theme.json';a.click();setTimeout(()=>URL.revokeObjectURL(url),1000);
38
38
  },
39
39
  Delete:async()=>{const p=api.current();if(p.readOnly)throw Error('This recovery preset is read-only.');if(await ask('Delete preset',`Permanently delete "${p.name}"?`))api.remove(p);},
40
40
  Apply:async()=>{const p=api.current();await callHost('applyPreset',{preset:{name:p.name,definition:JSON.parse(serialize(p.definition))},theme:generateTheme(p.definition),signal:abort.signal});alive();api.message('Preset applied by the host application.','success');}
@@ -44,7 +44,7 @@ export function createPresetToolbar(host,api){
44
44
  file.addEventListener('change',()=>run(async()=>{
45
45
  const selected=file.files[0];if(!selected)return;if(selected.size>24000)throw Error('Theme file is too large.');
46
46
  const text=await selected.text();alive();const data=JSON.parse(text);
47
- if(data.format!==undefined&&(data.format!=='dense-ui-theme'||data.version!==1))throw Error('Unsupported theme file format.');
47
+ if(data.format!==undefined&&(!['taet-ui-theme','dense-ui-theme'].includes(data.format)||data.version!==1))throw Error('Unsupported theme file format.');
48
48
  const definition=deserialize(data.format?JSON.stringify(data.definition):text);
49
49
  await named('Import preset',definition,typeof data.name==='string'?data.name:'Imported theme');
50
50
  }),{signal:abort.signal});