Conversation
The pnpm workspace relies on three .npmrc settings: - script-shell=/bin/zsh - enable-pre-post-scripts=true (so prebuild/postbuild hooks run) - include-workspace-root=true (so -r and --filter include core) Previously .npmrc was gitignored, which meant these settings had to be recreated on every fresh clone. Track the file so the workspace works out of the box. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds the harness's local permission allowlist so it carries forward across branches in the v2 stack. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…separate-packages #238 Split themes + custom components into separate packages
* Create workflow for comparing PR build sizes Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
#243) The previous postpublish hook ran a script in the background after a 10s sleep, and only handled `json-edit-react`. With Changesets, a release can publish any combination of the three packages, and a postpublish hook on core won't even fire for a themes-only or components-only release. Decouple the sync from publish: - Rewrite scripts/installLatestPackage.mjs to read target versions from each package's local package.json, only update deps that the consumer actually declares, and poll npm for the exact version (up to 2 min) before running `yarn add`. - Expose it as `pnpm sync-demos`; drop the install step from postpublish (README restore still runs). - Update package-management-guide.md: add `pnpm sync-demos` as step 7 of the release flow and fix two stale references. Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
… v1 branch if needed
* Add generic type parameter `T` to JsonEditor `JsonData` collapses to `unknown`, so consumers lost their data shape at the component boundary. Introduce `JsonEditor<T = JsonData>` and thread `T` through the public callback types (`UpdateFunction`, `OnChangeFunction`, `OnErrorFunction`, `FilterFunction`, `NodeData.fullData`, etc.). Default of `JsonData` preserves source compatibility for existing consumers. The generic stays at the boundary: per-node value slots (`NodeData.value`, `UpdateFunctionProps.newValue/currentValue`, `OnErrorFunction.errorValue/ currentValue`) remain wide, since they are arbitrary-depth slices that no static type can relate to `T`. Internal types (`BaseNodeProps`, `CollectionNodeProps`, etc.) keep using the un-parameterized form which resolves to the `JsonData` default; the inner `Editor` is explicitly specialised to `JsonEditorProps<JsonData>` and the outer wrapper casts at the boundary. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Document generic `JsonEditor<T>` in README and migration guide Adds a "Typed data" subsection under Managing State with a concrete example, a `[!NOTE]` callout flagging that `T` is an input contract rather than a runtime invariant, and a one-line note in the Quick overview migration table. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Add changeset for generic `JsonEditor<T>` Major bump on `json-edit-react`: emitted `.d.ts` signatures change (though runtime behaviour and source compatibility for untyped consumers are preserved by the `T = JsonData` default). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> * Update demo apps to use generic type * Widen updateLiveData param to JsonData Aligns updateLiveData's signature with the JsonData root type used by useUndo<JsonData> in the demo, so the call site no longer needs a cast. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
PR bundle-size workflow runs on Ubuntu where /bin/zsh isn't installed. pnpm wraps every script (even single commands) in `<script-shell> -c "<body>"`, so any `pnpm <script>` invocation on a non-mac runner blows up with `spawn /bin/zsh ENOENT`. PR #240 only touched src/**, so the workflow's paths-filter routed it through `pnpm exec rollup -c` (direct binary, no shell) — the latent zsh dependency wasn't exercised. PR #257 touches packages/themes and packages/components, which invokes `pnpm --filter ... build`, exposing the issue. The zsh pin was incidental — codified from a local mac dev environment when .npmrc was first committed; no script in the workspace uses zsh-specific syntax. Removing it lets pnpm default to /bin/sh on Unix, which handles every script here and works on Linux clones / CI runners out of the box. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Implement standardisation and improved build/publish scripts * Add changeset for publish workflow standardization Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Refactor out the use of dot.strings as path identifiers * Add changeset for path identity refactor * Fix toPathString injectivity for single-empty-key path Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Standardise demo + CCL scripts, add :pack mode, fix base URL The demo and CCL had inconsistent script vocabularies (demo used `start:*`, CCL used `dev:*`) and the `:local` suffix meant two different things in the demo (`start:local` swapped package source; `build:local` only swapped Vite's base URL). Both projects also used `base: 'https://carlosnz.github.io/json-edit-react/'` — a CRA carry-over that caused `vite preview` to load the deployed assets instead of the local build, which we worked around with ad-hoc `--base=/` flags. Changes: - Switch demo's vite `base` to relative `/json-edit-react/`. Removes the need for `--base=/` overrides everywhere; deployed behaviour is unchanged because gh-pages serves at exactly that path. - Align demo + CCL script names: bare = npm source, `:local` = workspace src, `:build` = workspace build, `:pack` = locally-packed tarball. `:local` now consistently means "use local source" everywhere. - Add `:pack` mode (`pnpm pack-all`): builds and packs all three packages via their existing `preview-publish` scripts, extracts each tarball to `pack-output/<name>/package/`, strips peer/dev deps, and `npm install`s runtime deps so vite can resolve transitive imports (e.g. `react-datepicker` for components). Closest pre-publish dress rehearsal available. - Add bare `^json-edit-react$` alias in both vite configs — sub-packages' built JS imports core via that name, and in `:pack` mode their files live outside the workspace so node_modules walk-up resolution fails without it. - Replace stale `demo:package` root script (referenced non-existent `start:package`) with `demo:pack` (chains `pack-all` + `start:pack`). - Document `:pack` mode and add a "first v2 publish" reminder in package-management-guide.md about adding the scoped packages to demo/CCL `dependencies` once they're on npm — `yarn build`/`deploy` remain broken in default `npm` mode until then.' - Update SourceIndicator badge for new JRE source modes Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Remove useData, add JsonViewer * Update V2-roadmap.md * Address Copilot PR review: strip externalTriggers + fix restrictDrag in migration - JsonViewer also strips externalTriggers at runtime (TS Omit alone wouldn't help JS consumers), since useTriggers bypasses the restrict filters - Migration recipe (and changeset) include restrictDrag for the toggle case where consumers had explicitly enabled drag in v1 - Hoist NOOP to helpers and re-use across JsonEditor / JsonViewer / ValueNodeWrapper Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Test harness setup * Add additional utils tests + big re-organisation of utils file structure * Re-organise utils test to match utils folder
* Add initial RTL tests
* Add first cluster of Edit flow tests * Add next round of behavioural RTL tests * Add testing to build script
Delete the composing useTreeState hook and update all seven consumers to import only the slice(s) they actually use: useEditing, useCollapse, and useDragSource. The TreeStateProvider component stays as a thin composing wrapper for JsonEditor's render. Add a slice-isolation test suite that asserts each setter only re-renders its own slice's consumers, pinning the structural claim of the refactor. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
EditingProvider now exposes named action functions (startEdit, cancelEdit, setTabDirection, recordPreviousEdit, setPreviousValue), each wrapped in useCallback for stable identities. The four editing fields share a single useState object so multi-field transitions commit atomically. cancelOp stays in a useRef as an imperative side channel. Six consumers updated. Move ValueNodeWrapper's Tab-nav retry from the render body to a useEffect. This removes React's "Cannot update a component while rendering a different component" warning that fired whenever Tab landed on a hidden/uneditable node. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Replace the state-with-2s-timer collapse model with a pub-sub broadcast. CollapseProvider exposes `subscribe(handler)` and `setCollapseState(cmd)` — each CollectionNode subscribes on mount with a path-matching handler; the broadcast fires synchronously and is not retained anywhere. Two long-standing oddities go away: - Back-to-back identical commands now fire reliably (no need to wait out the 2s reset window). - Nodes that mount after a collapse command no longer auto-apply it. One behavioural trade-off (documented in migration-guide §7): broadcasts can't punch through a collapse boundary - newly-mounted children evaluate the current `collapseFilter` rather than replaying a recent command. For "expand a deep subtree" use cases consumers should manage the `collapse` prop as state. Path-scoped commands targeting mounted nodes behave the same as before. V2-roadmap §10 carries a "To consider" note for a future imperative `expandPath`-style helper if real-world feedback shows users need it. Tests: - New collapseBroadcasts.test.tsx with 10-scenario end-to-end coverage: Collapse-All/Expand-All, path-scoped commands with and without includeChildren, back-to-back identical commands, late-mount isolation, data-swap isolation, onCollapse callback, array-of-commands, and an explicit "no setTimeout artefacts" assertion via fake timers. - New tests in JsonEditor.test.tsx covering the perf optimization (children of collapsed nodes don't mount), a multi-criteria functional collapse filter (key match, array size, depth), a cascading filter change, and a state-dependent filter that flips collapse states across a 4-level tree on toggle. - sliceIsolation.test.tsx collapse test updated to assert the stronger pub-sub property: setCollapseState causes zero React re-renders in any consumer; the broadcast reaches a subscriber via its handler only. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Wrap each of the three providers' context-value objects in useMemo so the value identity is stable across re-renders that don't change the provider's inputs. With the setters already useCallback-stable from Parts 3 and 4, the wrapping object literal was the last source of identity churn — this closes that loop and is the precondition §16's React.memo pass needs. Audit of eslint-disabled exhaustive-deps comments across consumer files: - JsonEditor.tsx: cancelEdit added to the search-debounce effect's deps (Part 3's stability promise redeemed). - CollectionNode.tsx, useTriggers.ts, ValueNodeWrapper.tsx: comments sharpened to spell out why the missing deps are *intentionally* not listed (fire-only-on-X semantic decisions, not stability workarounds). - Others left as-is — they're idiomatic closure-stable patterns or pre-existing decisions outside §4's scope. Add a slice-isolation test pinning the memoization promise: forcing the parent above TreeStateProvider to re-render produces *reference-equal* context values from each useEditing/useCollapse/useDragSource hook. This is the property §16's React.memo consumers will rely on to bail out. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Fix Tab-nav flicker through filtered nodes (Part 3 regression) Switch the Tab-navigation retry from useEffect to useLayoutEffect. The useEffect version commits the "filtered-out node is editing" state to the DOM, paints, then redirects in a second commit — visible as a brief close/reopen of the current node's editor when there's no viable next target. useLayoutEffect runs synchronously before paint, so the redirect batches into the same paint as the commit that flagged this node, and the user sees only the final state. Roadmap §16 carries the followup: make `getNextOrPrevious` filter-aware so the Tab handler picks a viable target up front, dropping the setState-after-render pattern entirely. Doc updates PR review fixes Update migration-guide.md PR review fix PR review fixes Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Create theme-icons-spec.md * Rewrite types * Add icons to defaultTheme * Rewire theme engine to new structure * Create tests * Create iconFromSvg method, plus tests * Update README.md * Make React a peer dep of themes package * Docs * Render icons correctly in the demo * Remove collectionInner, add headerRow, valueRow to themeable elements * Add example
commit 902970c Merge: dfb5c46 3bcb9fc Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 17:11:33 2026 +1200 Merge remote-tracking branch 'origin/v2.0-dev' into r18jv-theme # Conflicts: # packages/themes/CLAUDE.md commit dfb5c46 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 17:01:13 2026 +1200 Add deploy script for V2 demo site commit 2bdecc1 Merge: e948237 686c4cb Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 16:23:17 2026 +1200 Merge branch '369-roll-icons-into-themes' into r18jv-theme commit 686c4cb Merge: 3fe57e7 ca6ab22 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 16:23:07 2026 +1200 Merge branch 'v2.0-dev' into 369-roll-icons-into-themes commit 3fe57e7 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 16:14:00 2026 +1200 Add example commit e948237 Merge: aefe2ad 6077b05 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 14:14:24 2026 +1200 Merge branch '369-roll-icons-into-themes' into r18jv-theme commit aefe2ad Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 14:13:56 2026 +1200 Update r18jv theme commit 6077b05 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 14:12:49 2026 +1200 Remove collectionInner, add headerRow, valueRow to themeable elements commit 6f7537c Merge: ff6536a ca502ef Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 13:13:20 2026 +1200 Merge branch '369-roll-icons-into-themes' into r18jv-theme commit ca502ef Merge: feef61f b71a96b Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 13:13:10 2026 +1200 Merge branch 'v2.0-dev' into 369-roll-icons-into-themes commit ff6536a Merge: 7e9595f feef61f Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 12:19:14 2026 +1200 Merge branch '369-roll-icons-into-themes' into r18jv-theme commit feef61f Merge: 41a4881 646d78b Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 12:19:03 2026 +1200 Merge branch 'v2.0-dev' into 369-roll-icons-into-themes commit 7e9595f Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 11:41:58 2026 +1200 Create index.tsx commit fda1d5c Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 11:41:09 2026 +1200 Add theme commit 41a4881 Merge: db97a27 2cfdeae Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 10:07:35 2026 +1200 Merge remote-tracking branch 'origin/v2.0-dev' into 369-roll-icons-into-themes # Conflicts: # src/contexts/ThemeProvider/ThemeProvider.tsx commit db97a27 Merge: 622ffb9 b9fef80 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 01:07:58 2026 +1200 Merge branch 'v2.0-dev' into 369-roll-icons-into-themes commit 622ffb9 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 00:46:00 2026 +1200 Render icons correctly in the demo commit 74be507 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Thu Jun 18 00:03:06 2026 +1200 Docs commit 4c1e71e Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Wed Jun 17 23:42:35 2026 +1200 Make React a peer dep of themes package commit 675831a Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Wed Jun 17 23:32:30 2026 +1200 Update README.md commit b088dcc Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Wed Jun 17 23:30:24 2026 +1200 Create iconFromSvg method, plus tests commit 7aa1043 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Wed Jun 17 18:18:23 2026 +1200 Create tests commit a4f557f Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Wed Jun 17 18:10:17 2026 +1200 Rewire theme engine to new structure commit b1f6bb2 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Wed Jun 17 17:29:12 2026 +1200 Add icons to defaultTheme commit fba7105 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Wed Jun 17 17:23:07 2026 +1200 Rewrite types commit 47af3f5 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Wed Jun 17 17:15:49 2026 +1200 Create theme-icons-spec.md
* Update README.md * README and Examples WIP * Update example to use valueDataTypes not standard * New keys/defaults example * Finish the Editing section * More README and examples WIP * Tweak * onChange/onError examples * Update README.md * Add JSONSchema validation example * Big refactor to move demo data definitions to Example pages and make them the canonical reference, but still use the demo data pages as we do now * Fix style quirks, example links * Color tweak * Generalize SearchBox * Add search to several others * Add "View source code" links to main demo * Fix Superman logo * Themeing README tidy up, more examples * README WIP * More README and examples * More README editing * Custom component section re-write, create first Example page * Add display/edit mode example * Tweak edit/display example * Add BigInt example * Changing types example * Tweak custom type example * Remove customKeys from main demo, link to example from README * Custom Collection Nodes example * Student cards example * Collection as value examples * Update README for TextEditor prop * Finish writing UI Overrides section * Setup example page import structure * Fix comment wrap * Refactor example imports * Add copy toast, tidy up example index page * Update ExamplesIndex.tsx * Change to event signals * Tweak event signals * Tidy up onEditEvent section of README * Collapse example * Create imperative control example * Update imperative handle example * Adjust README * Big README link fix sweep * Tidy up contents, remove leftovers, fix links
* Commit open edit when displaced by opening another node (#376) Opening an edit on another node (its pencil, double-clicking another value, or clicking another key to rename) now COMMITS the in-progress edit instead of cancelling it — matching Tab. Previously the two "leave this field and go edit elsewhere" gestures behaved oppositely (Tab committed, click-away discarded), silently dropping typed text. Behaviour now mirrors Tab: - changed edit -> commits (onUpdate runs), then opens the new node - unchanged edit -> closes via commit* (no onUpdate / setData), opens new - can't commit (malformed JSON, duplicate key, throwing fromStandardType) -> switch is BLOCKED; editor stays open with its inline error - object-add session -> still cancels (you can't Tab out of a new-key edit) The outgoing node registers a commit-on-displace callback in the editing store (alongside cancelOp); open() invokes it on a switch, deferring the new node's opening into the commit's onCommit. The callback forwards to the node's LIVE handleEdit via a ref so it commits the current buffer, not a stale closure. submit() now also abandons gracefully if a commit-on-displace fires for a session whose node already unmounted. Includes rewritten + new regression tests, the A8 manual-test matrix, a changeset, and migration-guide / README notes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
* Set up RTL test infrastructure * Add drag-and-drop and undo-on-cancel test coverage * Tests: address DnD review feedback — onUpdate-reject coverage, tighten editing-gate test, cleanup * Tests: split dragStart into its own act() so editing-gate test isolates the clause --------- Co-authored-by: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
commit e46f146 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Tue Jun 23 13:24:37 2026 +1200 Tweak text selection colours commit 07c95bd Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Tue Jun 23 13:10:28 2026 +1200 Add slight margin to Cancel button commit bd8ee0a Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Tue Jun 23 13:05:43 2026 +1200 Tweak Psychedlic theme commit af7fcc0 Merge: 069d1b6 0c2019a Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Tue Jun 23 12:26:43 2026 +1200 Merge branch 'v2.0-dev' into theme-improvements commit 069d1b6 Merge: 3a65163 78fe892 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Tue Jun 23 11:59:44 2026 +1200 Merge branch 'v2.0-dev' into theme-improvements commit 3a65163 Merge: 4d10092 39b7f03 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Tue Jun 23 11:21:30 2026 +1200 Merge branch 'v2.0-dev' into theme-improvements commit 4d10092 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Tue Jun 23 08:29:05 2026 +1200 Update index.tsx commit 78f9c7f Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Tue Jun 23 04:22:26 2026 +1200 Update Psychedelic theme commit 598a473 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Tue Jun 23 04:09:05 2026 +1200 Update Github themes commit 6de364b Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Tue Jun 23 03:56:27 2026 +1200 Update CandyWrapper theme commit c5150c3 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Tue Jun 23 01:11:47 2026 +1200 Remove some comments commit 162e677 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Mon Jun 22 23:24:55 2026 +1200 Update Tokyo Night theme commit 56300be Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Mon Jun 22 23:08:42 2026 +1200 Update Monokai theme commit f641a32 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Mon Jun 22 22:58:27 2026 +1200 Update Dracula theme commit 4eb7db1 Author: Carl Smith <5456533+CarlosNZ@users.noreply.github.com> Date: Mon Jun 22 22:22:40 2026 +1200 Change Solarized icons
…) (#380) * Implement new return shape * Enable Jest restoreMocks so console spies can't leak across tests Addresses PR review: a `jest.spyOn(console, 'warn')` whose manual `mockRestore()` runs only on success leaks the spy into later tests if an assertion throws first. Enable `restoreMocks: true` globally so every spy auto-restores after each test, and drop the now-redundant manual restores (in the both-keys test and the pre-existing drag-and-drop key-collision test). * Document that an undefined override key means "no override" Addresses PR review: clarify that `{ value: undefined }` / `{ data: undefined }` are deliberately treated as "no override for this key" (consistent with the protocol's top-level `undefined`/`void` = proceed, and the adjacent `error` check), rather than overriding a node to `undefined`. Comment only — no behaviour change. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
# Conflicts: # src/CollectionNode.tsx
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
All work on V2.0, now solid enough to become
mainin preparation for beta release