@edux-design/tree-select 0.2.4 → 0.3.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.
@@ -0,0 +1,52 @@
1
+ # DS15 interaction inventory
2
+
3
+ Inspected 29 October 2026 against Payload's installed public TreeSelect 0.2.5
4
+ and the local Edux source. Payload files were read only.
5
+
6
+ | Host | Interaction and local ownership | Replacement boundary |
7
+ | --- | --- | --- |
8
+ | Manuscripts `ManuScriptNavigationTree` | Delegated row click resolves domain metadata and aborts previous asynchronous editor navigation; filtered trees disable reordering. `onDataChange` consumes exact drag metadata. | `onNodeActivate` ID resolves existing metadata. Keep editor readiness, abort controllers and reorder transactions local. |
9
+ | Curricula `CurriculaBuilderPanel` | Delegated click opens node editor. Labels are not inline editable at any configured level; add/delete and multi-drag remain active. | `onNodeActivate`; keep mutations, expansion and selection of domain editor local. |
10
+ | Book Setup `PageBuilderBookSetupNavigationPanel` | Filtered content block tree delegates IDs to section/view changes. Rich labels include icons. | `onNodeActivate`, `currentId`, accessible name override and public row/label classes. Keep filtering and view/section routing local. |
11
+ | Rights `PermissionsWorkspaceSourceNavigation` | Rich labels contain focusable role-button and status tooltip; selected label ref locates private ancestor for nearest scroll. | Row activation/current state, `getItemLabel`, imperative `scrollToItem`; remove nested navigation button. Keep source permissions/status/search local. |
12
+ | Rights `PermissionsWorkspaceAssetNavigation` | Rich label role-button duplicates keyboard navigation; selected label ref scrapes ancestor for scroll. | Row activation/current state, `getItemLabel`, `scrollToItem`; remove nested navigation button. Keep asset mapping/search local. |
13
+
14
+ Also inspected `pages/PageBuilderBookSetupEdit`: its debug summary and section
15
+ handler scrape row IDs from DOM events, but the handler already accepts a string
16
+ ID. Passing the activation ID at the navigation-panel boundary removes the event
17
+ lookup without moving debug logging or section routing into Edux. No host source
18
+ is modified by this package task.
19
+
20
+ ## Compatibility baseline
21
+
22
+ The registry 0.2.5 archive matches the source interaction baseline. Existing
23
+ tracked source token work (`be4a9b2`) replaces registry raw state colours/drop
24
+ indicator/shadow classes with semantic equivalents; DS15 retains that source
25
+ baseline and introduces no tokens or further geometry changes. Payload's
26
+ installed 0.2.5 runtime is locally patched and has
27
+ roving row focus, tree/treeitem roles, level/position/set-size attributes,
28
+ `aria-selected` for multi-drag, labelled edit/toggle/move controls and keyboard
29
+ arrow/Home/End/F2 handling. Source and registry lack these. The extension adds supported equivalents while
30
+ preserving registry geometry, data operations and drag metadata.
31
+
32
+ The installed runtime also uses `--theme-radius` and `--theme-hover-surface`
33
+ fallbacks and `data-selected`; these are local patch hooks, not registry APIs.
34
+ The extension retains source semantic token styling and registry geometry; it
35
+ does not adopt the local theme variable overrides. Public current/selection
36
+ context and row/label classes replace host styling selectors.
37
+
38
+ ## Interaction decisions
39
+
40
+ - Current item is controlled by `currentId`. Activation never changes it implicitly;
41
+ hosts can wait for navigation success. `aria-current="page"` expresses current
42
+ location; `aria-selected` continues to mean drag selection.
43
+ - Plain row pointer clicks and row Enter/Space activate once. Ctrl/Meta/Shift/Alt
44
+ suppress activation; Ctrl/Meta/Shift retain existing multi-selection behaviour.
45
+ - `defaultPrevented`, editable inputs, row controls and interactive custom label
46
+ descendants suppress activation. Pointer selection from a drag handle never
47
+ invokes navigation. Keyboard events from descendants stay with that control.
48
+ - Visible row access is explicit: get element, focus and scroll. Collapsed,
49
+ filtered and removed targets return null/false. No method implicitly expands
50
+ or changes current item, selection, routing or domain data.
51
+ - Rich labels need an accessible name: use `getItemLabel(node)`; fallback is a
52
+ string/number label, otherwise the stable normalised ID.
@@ -0,0 +1,62 @@
1
+ # DS15 package verification
2
+
3
+ Verified 29 October 2026. The primary registry baseline was read from
4
+ `/private/tmp/edux-ds14-26-20261029/public-baselines/tree-select/package`.
5
+ Payload's installed 0.2.5 is a locally modified preview and is not used as proof
6
+ of registry capability. See [inventory](DS15_INVENTORY.md).
7
+
8
+ ## Public contract
9
+
10
+ `onNodeActivate({id,node,event,inputSource,depth,parentId,hasChildren})`, controlled
11
+ `currentId`, rich accessible names through `getItemLabel`, row/label class slots,
12
+ label state/context and a forwarded `TreeSelectHandle` are additive. The handle
13
+ exposes `getRowElement`, `focusItem` and `scrollToItem`; missing targets never
14
+ expand or navigate. Native root div attributes/events remain available; the ref
15
+ is explicitly an imperative handle rather than a div.
16
+
17
+ Mutation output is `TreeSelectNode[]` with unknown extension metadata because
18
+ built-in add operations create only id/label nodes. Activation/render contexts
19
+ retain the supplied subtype. Hosts validate/enrich created data themselves.
20
+ Existing mutation helpers and reorder metadata have not changed.
21
+
22
+ ## Checks completed
23
+
24
+ - `npm run build --workspace=@edux-design/tree-select`: ESM, CJS and public
25
+ declarations built successfully from `src/index.ts`.
26
+ - `npm run check-types --workspace=@edux-design/tree-select`: passed.
27
+ - `npx eslint --config eslint.components.config.mjs packages/tree-select/src`:
28
+ passed with no warnings.
29
+ - `npx vitest run packages/tree-select/src/elements`: 77 tests passed across
30
+ five files, including existing reorder/data/guard coverage and eight new
31
+ interaction tests. New coverage checks event payload/source, current versus
32
+ drag selection, cancellation, repeat keys, interactive children/status,
33
+ rename/actions isolation, collapsed/filtered/removed targets, focus/scroll
34
+ separation, ref cleanup/instance isolation and keyboard navigation.
35
+ - Strict positive/negative public-declaration consumer
36
+ `test/interaction-api.tsx`: passed via the built workspace package. Covers
37
+ native root events, discriminated activation events, native row access,
38
+ imperative ref, generic node metadata, existing props and rejection of invalid
39
+ IDs/ref/events/labels/expansion/unknown props and unsound mutation metadata.
40
+ - `node packages/tree-select/test/interaction-public-runtime.cjs`: passed ESM
41
+ and CJS public imports and SSR tree/current/name/level/root attribute output.
42
+ - `npm exec --workspace=docs -- vitest run --config vite.config.ts
43
+ TreeSelectInteraction.stories`: five Chromium stories passed. Explicit
44
+ `axe.run` returned no violations for navigation, editing, modifier multi-drag,
45
+ narrow filtering and four light/dark/blue/teal theme combinations. Keyboard
46
+ activation/expansion, F2 editing and drag-handle navigation isolation were
47
+ exercised. Existing Tooltip async act warnings remain in browser logs.
48
+
49
+ The first browser runs needed Vite's new dnd/axe dependencies to finish cache
50
+ optimisation; the final completed run passed. Package owner checks use workspace
51
+ builds. The coordinator owns the subsequent normal fresh-tarball installed
52
+ public types/runtime/browser gate, versioning and combined Storybook run.
53
+ No Payload source, manifests, lockfiles, versions, Changesets, publication or Git
54
+ history were modified by this package worker. The coordinator changed the
55
+ package build/dev entry to `src/index.ts`.
56
+
57
+ ## Remaining consumer boundary
58
+
59
+ The named five hosts and PageBuilder parent still require migration and host
60
+ regression acceptance. Private CSS-only selectors for per-node action suppression
61
+ are outside this API; no per-node action policy API is claimed. Routing,
62
+ permissions, filtering, editor cancellation and all mutations remain local.
package/package.json CHANGED
@@ -1,27 +1,24 @@
1
1
  {
2
2
  "name": "@edux-design/tree-select",
3
- "version": "0.2.4",
3
+ "version": "0.3.0",
4
4
  "private": false,
5
5
  "sideEffects": [
6
6
  "**/*.css"
7
7
  ],
8
8
  "files": [
9
- "dist"
9
+ "dist",
10
+ "docs",
11
+ "README.md",
12
+ "CHANGELOG.md"
10
13
  ],
11
14
  "types": "./dist/index.d.ts",
12
15
  "exports": {
13
16
  ".": {
17
+ "types": "./dist/index.d.ts",
14
18
  "import": "./dist/index.mjs",
15
- "require": "./dist/index.js",
16
- "types": "./dist/index.d.ts"
19
+ "require": "./dist/index.js"
17
20
  }
18
21
  },
19
- "scripts": {
20
- "lint": "eslint . --max-warnings 0",
21
- "build": "tsup src/index.js --format esm,cjs --dts --external react,react-dom",
22
- "dev": "tsup src/index.js --watch --format esm,cjs --dts --external react,react-dom",
23
- "check-types": "tsc --noEmit"
24
- },
25
22
  "dependencies": {
26
23
  "@dnd-kit/core": "6.3.1",
27
24
  "@dnd-kit/sortable": "^8.0.0",
@@ -36,9 +33,5 @@
36
33
  "peerDependencies": {
37
34
  "react": ">=18",
38
35
  "react-dom": ">=18"
39
- },
40
- "devDependencies": {
41
- "tsup": "^8.5.0",
42
- "typescript": "^5.9.2"
43
36
  }
44
37
  }