Skip to content

Commit 8ab491c

Browse files
authored
Merge branch 'develop' into packageCleanup
2 parents 6e9a77c + b5206a1 commit 8ab491c

138 files changed

Lines changed: 5379 additions & 3316 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

β€Ž.claude/settings.jsonβ€Ž

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,5 +56,9 @@
5656
},
5757
"env": {
5858
"ENABLE_LSP_TOOL": "1"
59+
},
60+
"attribution": {
61+
"commit": "",
62+
"pr": ""
5963
}
6064
}

β€Ž.github/workflows/claude.ymlβ€Ž

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ jobs:
3535
pull-requests: write
3636
issues: write
3737
actions: read # Required for Claude to read CI results on PRs
38+
id-token: write # Required for the action to fetch an OIDC token for GitHub API auth
3839
steps:
3940
- name: Checkout repository
4041
uses: actions/checkout@v6
@@ -45,7 +46,7 @@ jobs:
4546
id: claude
4647
# Pinned to the commit SHA of the v1 tag at time of pinning.
4748
# Bumped by Dependabot when newer versions of the action are released.
48-
uses: anthropics/claude-code-action@bbfaf8e1ffe3e688f7ab65ceee78de241e24a238 # v1
49+
uses: anthropics/claude-code-action@787c5a0ce96a9a6cfb050ea0c8f4c05f2447c251 # v1
4950
with:
5051
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
5152

β€Ž.github/workflows/deployRelease.ymlβ€Ž

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
- name: Validate release version
4545
# Pinned to commit SHA of xh/hoist-dev-utils master at time of pinning.
4646
# Bumped by Dependabot when newer versions of the action are released.
47-
uses: xh/hoist-dev-utils/.github/actions/validate-release-version@899c39c72b4154a3bef180e1939755a1672036c5 # master
47+
uses: xh/hoist-dev-utils/.github/actions/validate-release-version@7859ec783cee69e3f26cd81cb30cd5cab5bc44b6 # master
4848
with:
4949
version: ${{ inputs.version }}
5050
is-hotfix: ${{ inputs.is-hotfix }}
@@ -77,21 +77,46 @@ jobs:
7777
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
7878
IS_HOTFIX: ${{ inputs.is-hotfix }}
7979
run: |
80-
TAG_FLAG=""
80+
TAG_ARGS=()
8181
if [ "$IS_HOTFIX" = "true" ]; then
82-
TAG_FLAG="--tag hotfix"
82+
TAG_ARGS=(--tag hotfix)
8383
fi
84-
npm publish $TAG_FLAG
84+
npm publish "${TAG_ARGS[@]}"
8585
8686
# Note: The tag intentionally points to a commit where package.json still has the
8787
# SNAPSHOT version. We chose not to commit the version change back to the repo to
8888
# avoid paired set/reset commits on every release. The published npm artifact has
8989
# the correct release version β€” the tag is just a pointer to the source commit.
9090
# Checkout is required to be called with `fetch-depth: 0` and `fetch-tags: true`.
9191
- name: Create tag and GitHub release
92-
uses: xh/hoist-dev-utils/.github/actions/create-tag-and-github-release@899c39c72b4154a3bef180e1939755a1672036c5 # master
92+
uses: xh/hoist-dev-utils/.github/actions/create-tag-and-github-release@7859ec783cee69e3f26cd81cb30cd5cab5bc44b6 # master
9393
with:
9494
version: ${{ inputs.version }}
9595
is-hotfix: ${{ inputs.is-hotfix }}
9696
env:
9797
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
98+
99+
- name: Write job summary
100+
# Best-effort only - a summary glitch must never fail an otherwise-good release.
101+
continue-on-error: true
102+
env:
103+
VERSION: ${{ inputs.version }}
104+
run: |
105+
{
106+
echo "### πŸ“¦ Release published to npm"
107+
echo ""
108+
echo "Version: [\`$VERSION\`](https://www.npmjs.com/package/@xh/hoist/v/$VERSION)"
109+
110+
# Pack stats are a nice-to-have - skip the table silently if anything throws.
111+
if STATS=$(npm pack --dry-run --json 2>/dev/null | node -e "
112+
const [p] = JSON.parse(require('fs').readFileSync(0, 'utf8'));
113+
const mb = b => (b / 1048576).toFixed(1) + ' MB';
114+
console.log([p.entryCount.toLocaleString(), mb(p.size), mb(p.unpackedSize)].join('|'));
115+
"); then
116+
IFS='|' read -r FILES TARBALL UNPACKED <<< "$STATS"
117+
echo ""
118+
echo "| Files | Tarball | Unpacked |"
119+
echo "|---|---|---|"
120+
echo "| $FILES | $TARBALL | $UNPACKED |"
121+
fi
122+
} >> "$GITHUB_STEP_SUMMARY"

β€Ž.github/workflows/deploySnapshot.ymlβ€Ž

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,10 @@ jobs:
5151
run: yarn lint:all
5252

5353
- name: Prepare snapshot version
54+
id: snapshot
5455
# Pinned to commit SHA of xh/hoist-dev-utils master at time of pinning.
5556
# Bumped by Dependabot when newer versions of the action are released.
56-
uses: xh/hoist-dev-utils/.github/actions/prepare-npm-snapshot-version@899c39c72b4154a3bef180e1939755a1672036c5 # master
57+
uses: xh/hoist-dev-utils/.github/actions/prepare-npm-snapshot-version@7859ec783cee69e3f26cd81cb30cd5cab5bc44b6 # master
5758
with:
5859
version: ${{ inputs.version }}
5960

@@ -62,6 +63,31 @@ jobs:
6263
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
6364
run: npm publish --tag next
6465

66+
- name: Write job summary
67+
# Best-effort only - a summary glitch must never fail an otherwise-good publish.
68+
continue-on-error: true
69+
env:
70+
SNAPSHOT_VERSION: ${{ steps.snapshot.outputs.snapshot-version }}
71+
run: |
72+
{
73+
echo "### πŸ“¦ Snapshot published to npm"
74+
echo ""
75+
echo "Version: [\`$SNAPSHOT_VERSION\`](https://www.npmjs.com/package/@xh/hoist/v/$SNAPSHOT_VERSION)"
76+
77+
# Pack stats are a nice-to-have - skip the table silently if anything throws.
78+
if STATS=$(npm pack --dry-run --json 2>/dev/null | node -e "
79+
const [p] = JSON.parse(require('fs').readFileSync(0, 'utf8'));
80+
const mb = b => (b / 1048576).toFixed(1) + ' MB';
81+
console.log([p.entryCount.toLocaleString(), mb(p.size), mb(p.unpackedSize)].join('|'));
82+
"); then
83+
IFS='|' read -r FILES TARBALL UNPACKED <<< "$STATS"
84+
echo ""
85+
echo "| Files | Tarball | Unpacked |"
86+
echo "|---|---|---|"
87+
echo "| $FILES | $TARBALL | $UNPACKED |"
88+
fi
89+
} >> "$GITHUB_STEP_SUMMARY"
90+
6591
- name: Trigger Toolbox snapshot build
6692
env:
6793
GH_TOKEN: ${{ secrets.TOOLBOX_DISPATCH_TOKEN }}

β€Ž.mcp.jsonβ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
]
1818
},
1919
"jetbrains": {
20-
"url": "http://localhost:64342/sse",
20+
"url": "http://localhost:${JETBRAINS_MCP_PORT:-64342}/sse",
2121
"type": "sse"
2222
}
2323
}

β€Ž.npmignoreβ€Ž

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,7 @@ AGENTS.md
3232
CLAUDE.md
3333
CLAUDE.local.md
3434
SECURITY.md
35+
36+
# Internal docs - not served by the MCP doc registry, not useful to consumers
37+
docs/planning
38+
docs/archive

β€ŽCHANGELOG.mdβ€Ž

Lines changed: 89 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,34 +4,90 @@
44

55
### πŸ’₯ Breaking Changes (upgrade difficulty: 🟒 LOW)
66

7+
* Deprecated `HoistBase.withSpan()` and the `FetchOptions.span` / `loadSpec` fields, in favor of
8+
the `Runner` chain (`runner().span()`) and the new `CallContext` argument to fetch methods (see
9+
below for more details). Both log a warning and are scheduled for removal in v88.
10+
* Upgraded `CodeInput` to CodeMirror v6 (upgraded from v5).
11+
* Removed `editorProps` prop - most use cases now supported via first-class `CodeInput` props
12+
such as `readonly`, `language`, `lineNumbers`, and `lineWrapping`.
13+
* Replaced the `mode` prop with `language`. See
14+
[language-data](https://github.com/codemirror/language-data/blob/main/src/language-data.ts)
15+
for valid language strings (aliases and names are both accepted).
16+
* Redesigned `FileChooser`, moving configuration from component props to the `FileChooserModel`
17+
constructor config and adding a fully customizable display API.
18+
* Options such as `accept` and the file-size limits are now set on `FileChooserModel` rather
19+
than as `FileChooser` props.
20+
* Renamed `maxSize` / `minSize` to `maxFileSize` / `minFileSize`.
21+
* Removed `enableMulti` / `enableAddMulti` - use `maxFiles` (set to `1` for single-file
22+
selection).
23+
* Removed `targetText` and `showFileGrid` - customize via the new `emptyDisplay` / `fileDisplay`
24+
content props. The default `fileDisplay` is a file grid, or a compact card with replace /
25+
remove actions when `maxFiles` is 1.
726
* `DashContainerModel` no longer persists per-view `icon` in its layout state, aligning with
827
`DashCanvasModel`. Icons now always come from the `DashViewSpec`. Apps that set
928
`DashViewModel.icon` at runtime still see it render, but the override is no longer saved.
1029
* Removed the `serializeIcon()` / `deserializeIcon()` helpers from `@xh/hoist/icon`, which
1130
existed only to support the above.
12-
* `FileChooser.accept` now takes a react-dropzone `Accept` object keyed by MIME type
13-
(e.g. `{'application/pdf': ['.pdf']}`) rather than an extension string or string array. See the
14-
[react-dropzone docs](https://react-dropzone.js.org/#section-accepting-specific-file-types)
15-
for the new format.
1631

17-
### 🐞 Bug Fixes
32+
### 🎁 New Features
1833

19-
* Chart right-to-left "zoom out" gesture now activates for charts configured with the modern
20-
`chart.zooming.type = 'x'` Highcharts option, in addition to the legacy `chart.zoomType = 'x'`.
34+
* `FileChooser` gained extensive new capabilities as part of its redesign: a `maxFiles` limit,
35+
fully customizable `emptyDisplay` / `fileDisplay` content, `onFileAccepted` / `onFileRejected`
36+
callbacks, configurable rejection toasts, `maskOnDrag` / `maskOnDisabled` options, and a
37+
programmatic `openFileBrowser()` method. In multi-file mode a persistent drop target sits
38+
alongside the grid - placement set via the `dropTargetPlacement` prop (`left`, `top`, or
39+
`hidden`) - so users can keep adding files until the limit is reached.
40+
* Added the `Runner` API - a fluent builder (via `HoistBase.runner()`) that composes spanning,
41+
logging, activity tracking, metrics, and task-linking around async work and fetch calls. It
42+
threads a shared `CallContext` (trace + load state) across call boundaries, which fetch methods
43+
now accept as an optional argument.
44+
* Added a client-side `MetricsService` (`XH.metricsService`) for recording timers and counters,
45+
batched to the server's Micrometer registry. Recording requires `hoist-core >= 40.0.1`.
46+
* Trace spans can now chain onto a remote `traceparent` received off-channel (e.g. a WebSocket,
47+
SSE, or queue message), in addition to a local parent span.
2148
* Desktop `DateInput` now supports a `commitOnChange` prop (default `true`). Set to `false` to
2249
defer parsing and value commit until blur, Enter, or picker selection. Useful when configuring
2350
`parseStrings` such that one format is a prefix of another (e.g. `MM/DD/YY` and `MM/DD/YYYY`),
2451
where the eager default would reformat the user's text mid-typing.
52+
53+
### 🐞 Bug Fixes
54+
55+
* Updated the chart right-to-left "zoom out" gesture to activate for charts configured with the
56+
modern `chart.zooming.type` Highcharts option, in addition to the legacy `chart.zoomType`.
57+
* Improved desktop `Select` to no longer hijack `Home`/`End` keys, allowing native caret movement in
58+
the input. See [#3930](https://github.com/xh/hoist-react/issues/3930).
2559
* Fixed `GridFilter` column header values tab crashing with a duplicate-ID error when re-opened
2660
for a `tags`-typed field with an active filter.
27-
* Desktop `Select` no longer hijacks `Home`/`End` keys, allowing native caret movement in the
28-
input. See [#3930](https://github.com/xh/hoist-react/issues/3930).
2961
* Fixed `RelativeTimestamp` ignoring an explicitly passed `model` prop when resolving its `bind`
3062
source - the prop is now honored, falling back to the context model only when unset.
3163
* Fixed `UniqueAggregator` permanently caching `null` on grouped cube rows after a diverge β†’
3264
reconverge sequence of child updates; the aggregator now falls back to a sibling re-scan when the
3365
cache could be transitioning.
3466

67+
### 🎁 New Features
68+
69+
* Added `pathPrefix` to `PersistOptions` - an inheritable prefix prepended to the resolved `path`,
70+
concatenated through `persistOptions()`. Enables hierarchical namespacing of persistence so a
71+
parent model can scope all descendants (`@persist` properties, `markPersist` calls, child
72+
`GridModel` / `PanelModel` / etc.) under a single shared key in one backing store. See
73+
[`docs/persistence.md`](docs/persistence.md#hierarchical-namespacing-with-pathprefix).
74+
* Added exported `persistOptions()` function for merging one or more `PersistOptions` objects,
75+
with later arguments overriding earlier ones. Replaces the now-deprecated
76+
`PersistenceProvider.mergePersistOptions`.
77+
78+
### πŸ€– AI Docs + Tooling
79+
80+
* Added a `hoist-read-doc` MCP tool that reads a full document by exact ID, giving MCP parity with
81+
the `hoist-docs read` CLI and `hoist-core`'s `hoist-core-read-doc`.
82+
* The `hoist://docs/{id}` resource now tolerates a dropped `docs/` segment, so
83+
`hoist://docs/routing.md` resolves the same as the strictly-correct
84+
`hoist://docs/docs/routing.md`.
85+
* Added a `hoist-docs ping` CLI subcommand mirroring the `hoist-ping` MCP tool; both now report the
86+
indexed `@xh/hoist` library version.
87+
* MCP/CLI symbol JSDoc is no longer truncated at the first `@`-prefixed line inside a fenced code
88+
block (e.g. an `@observable.ref` in a usage example), recovering example code, "SEE ALSO" lists,
89+
and trailing prose that were previously dropped.
90+
3591
### βš™οΈ Technical
3692

3793
* Forked unmaintained `golden-layout` 1.5.9 into `kit/golden-layout/`. Removed unused code, ported
@@ -47,18 +103,31 @@
47103

48104
### πŸ“š Libraries
49105

50-
* ag-Grid `34.x β†’ 35.x`. Apps must bump their `ag-grid-community`, `ag-grid-enterprise`, and
51-
`ag-grid-react` dependencies to `35.x`. See the [AG Grid v35 upgrade guide](https://www.ag-grid.com/javascript-data-grid/upgrading-to-ag-grid-35/);
52-
no Hoist API changes required.
53-
* Removed `golden-layout` and `jquery` (replaced by the forked source above).
54-
* Note, applications with previously required `"jquery": "3.x"` pin in package.json
55-
`resolutions` should now be able to remove that pin.
106+
* @azure/msal-browser `4.29 β†’ 5.11`
107+
* Major upgrade with broad architectural changes. Several `system` config properties were
108+
renamed - notably `iFrameHashTimeout` β†’ `iframeBridgeTimeout`. Apps passing
109+
`msalClientOptions` to `MsalClient` must review
110+
the [v4 β†’ v5 migration guide](https://learn.microsoft.com/en-us/entra/msal/javascript/browser/v4-migration).
111+
* @codemirror `5.x β†’ 6.x`
112+
* Replaces the v5 monolithic `codemirror` package, with several new direct dependencies now
113+
managed by hoist-react to maintain all supported functionality.
114+
* See breaking change note above for `CodeInput` prop changes.
115+
* ag-grid `34.x β†’ 35.x`.
116+
* Apps must bump their `ag-grid-community`, `ag-grid-enterprise`, and `ag-grid-react`
117+
dependencies to `35.x`. See
118+
the [AG Grid v35 upgrade guide](https://www.ag-grid.com/javascript-data-grid/upgrading-to-ag-grid-35/);
119+
no Hoist API changes required.
120+
* golden-layout `removed`
121+
* Replaced by the forked source as described above
122+
* jquery `removed`
123+
* Was included due to golden-layouts consumer, which now no longer needs the library.
124+
* Apps with previously required `"jquery": "3.x"` pin in package.json `resolutions` should now
125+
be able to remove that pin.
126+
* react-dropzone `10.x β†’ 15.x`
127+
* See the `FileChooser` redesign note under Breaking Changes above.
128+
* react-select `4.3 β†’ 5.10`
129+
* react-windowed-select `3.1 β†’ 5.2`
56130
* semver `7.7 β†’ 7.8`
57-
* react-select `4.3 β†’ 5.10` and react-windowed-select `3.1 β†’ 5.2`. No app-level API changes.
58-
* react-dropzone `10.x β†’ 15.x`. See breaking change note above for the `FileChooser.accept` prop.
59-
* `@azure/msal-browser` `4.29 β†’ 5.11`. Apps passing `msalClientOptions` to `MsalClient` should
60-
review the [v4 β†’ v5 migration guide](https://learn.microsoft.com/en-us/entra/msal/javascript/browser/v4-migration)
61-
for breaking changes to the underlying MSAL configuration API.
62131

63132
## 85.0.0 - 2020-04-30
64133

0 commit comments

Comments
Β (0)