📜 chore: Bump deps, fix TOC navigation, add Click UI tooling, code splitting#4
Merged
danny-avila merged 11 commits intomainfrom Apr 4, 2026
Merged
📜 chore: Bump deps, fix TOC navigation, add Click UI tooling, code splitting#4danny-avila merged 11 commits intomainfrom
danny-avila merged 11 commits intomainfrom
Conversation
- Bump librechat-data-provider to version 0.8.407 - Update axios to version 1.13.6
Accordion sections rendered via MultiAccordion.Item had no id attribute on the DOM, so document.getElementById returned null for parent-level TOC items — preventing scroll navigation. Pass the id prop directly to MultiAccordion.Item which spreads it onto the underlying Radix element.
- Add .claude/skills/click-ui.md for AI assistant guidance - Add eslint-plugin-click-ui (v1.1.1) in tools/ with recommended config - Patch plugin rules for ESLint 10 compatibility (context.filename) - Fix Button children→label prop in GroupsTab and RolesTab - Disable require-provider and select-requires-options (false positives) - Exclude tools/ from tsconfig
Split @clickhouse/click-ui icons and UI library into dedicated chunks for better caching. Icon SVG data (~700 kB) rarely changes and now caches independently. Main chunk reduced from 438 kB to 362 kB.
Add staleTime (60s) to profileMapOptions and resolvedConfigOptions so React Query doesn't refetch on every re-render caused by tab changes. Neither query depends on the active tab — they cover all field paths and the selected scope respectively. Add data-section-id to MultiAccordion.Item so useActiveSection can detect accordion section headers. Previously only child section headers (from FieldRenderer) had this attribute, causing the active TOC item to snap to the last visible child instead of the correct parent section.
The eslint-plugin-click-ui test uses eslintrc-format parserOptions incompatible with ESLint 10's RuleTester. Exclude tools/ from vitest. Four test files require SESSION_SECRET to import server modules — add it to the CI workflow env so all 489 tests pass.
dustinhealy
approved these changes
Apr 3, 2026
MultiAccordion.Item (Radix accordion) uses data-state="closed" and a button trigger, unlike ConfigSection/ObjectEntryCard which use config:expand events and .config-section-grid-closed. Add expandAccordionItem() to detect and click the Radix trigger so providers on the AI Providers tab expand when clicked in the TOC.
15e33c7 to
c346b93
Compare
addParams and similar record fields accept nested objects/arrays in the schema but the UI only supported primitive types. The allowed value types are now derived from the schema: - headers (Record<string, string>) → string only, type selector hidden - addParams (Record<string, union>) → string/number/boolean/json Add inferRecordKVTypes() to extract allowed KV types from the Zod schema's record value type. Fields with a single allowed type hide the type dropdown entirely. The JSON type renders a resizable textarea for raw JSON input, parsed on save.
f2cbcf2 to
f9895db
Compare
When editing a single custom endpoint, changes are now tracked at the individual entry level (endpoints.custom.2) instead of replacing the entire array. This makes the save dialog show only the changed entry's before/after diff instead of all 20+ endpoints. On the server side, mergeIndexedArrayEntries() detects indexed paths, fetches the current base config, merges updated entries into the existing array, and sends the complete array to the API. The confirm dialog resolves indexed paths to entry names (e.g., "endpoints.custom[2] (Moonshot)") for clarity. Structural changes (add/remove entries) still use full-array replacement via the existing onChange path.
f9895db to
ec4daad
Compare
Add tests for: - Schema extraction of addParams (json KV types), headers (string-only), and dropParams (array) - resolveSubSchema for endpoints.custom, numeric indices, and named provider paths - validateFieldValue for custom endpoint entries with addParams, headers, dropParams, and nested objects - serializeKVPairs for all value types including json with fallback - deepSerializeKVPairs for full endpoint objects with nested KV pairs, mixed arrays, and headers
Every keystroke in KeyValueField propagated up through onChange → onEntryChange → setEditedValues, causing full re-renders that reset cursor position. Apply the same local-state pattern used by TextField: inputs maintain local state and only commit to parent on blur/Enter. Applies to all inputs in KeyValueField: key inputs, value inputs, and the JSON textarea (react-textarea-autosize).
dustinhealy
approved these changes
Apr 4, 2026
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.
Summary
librechat-data-providerand updatebun.lockid+data-section-idonMultiAccordion.Item)staleTimetoprofileMapOptionsandresolvedConfigOptionsto prevent unnecessary API refetches on tab change.claude/skills/click-ui.mdfor AI guidance,eslint-plugin-click-ui(v1.1.1) with recommended rules, patched for ESLint 10 compatibilityTest plan
bun run buildand confirm no chunks exceed 500 kB (except icons)bun run lint— should pass clean