@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.
- package/CHANGELOG.md +83 -0
- package/README.md +118 -3
- package/dist/index.css +39 -0
- package/dist/index.d.mts +92 -18
- package/dist/index.d.ts +92 -18
- package/dist/index.js +257 -66
- package/dist/index.mjs +257 -66
- package/docs/DS15_INVENTORY.md +52 -0
- package/docs/DS15_VERIFICATION.md +62 -0
- package/package.json +7 -14
|
@@ -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.
|
|
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
|
}
|