Skip to content

Release/v1.2.5#12

Merged
NaviAndrei merged 33 commits intomainfrom
release/v1.2.5
Apr 3, 2026
Merged

Release/v1.2.5#12
NaviAndrei merged 33 commits intomainfrom
release/v1.2.5

Conversation

@NaviAndrei
Copy link
Copy Markdown
Owner

No description provided.

NaviAndrei and others added 30 commits March 27, 2026 09:56
Co-authored-by: devin-ai-integration[bot] <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Copilot AI review requested due to automatic review settings April 3, 2026 06:19
@NaviAndrei NaviAndrei merged commit d65db74 into main Apr 3, 2026
3 checks passed
@NaviAndrei NaviAndrei deleted the release/v1.2.5 branch April 3, 2026 06:24
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Release v1.2.5 focuses on scaling the app for larger datasets and improving UX/performance by moving primary persistence to IndexedDB, adding full-text search + advanced filtering, and introducing several sidebar utilities (templates, storage meter, cleanup suggestions).

Changes:

  • Replace localStorage persistence for core data (prompts/workspaces/history) with IndexedDB + add one-time migration hook.
  • Add in-memory full-text search (FlexSearch) and a consolidated filtering hook (search/tag/workspace/model/date-range).
  • Improve UX/perf via prompt-list refactor (virtualization, exports, drag/drop workspace moves) and new sidebar tools (templates, storage usage, cleanup assistant), plus CI enhancements.

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.

Show a summary per file
File Description
vite.config.ts Removes PWA plugin usage; adds build chunking/sourcemaps and notes about PWA compatibility.
tsconfig.app.json Tightens TS config (explicit noImplicitAny).
src/utils/db.ts Adds low-level IndexedDB wrapper with stores for prompts/workspaces/history.
src/hooks/useIndexedDB.ts New IndexedDB hook with localStorage migration + batch persistence.
src/services/SearchService.ts New singleton FlexSearch-backed service for prompt searching.
src/hooks/usePromptFilters.ts Centralizes filtering logic and maintains search index incrementally.
src/hooks/useLocalStorage.ts Adds toast feedback + emits storage-sync events on writes.
src/components/PromptList.tsx Major refactor: virtualized list mode, batch export, JSON export, DnD draggable prompts, component extraction.
src/components/WorkspaceManager.tsx Adds drop targets for moving prompts between workspaces.
src/components/VariableInjector.tsx Adds typed variables + presets saved to localStorage + improved a11y hints.
src/components/TemplateManager.tsx Adds prompt template selection/CRUD stored in localStorage.
src/components/StorageUsage.tsx Adds UI for quota/usage estimate + online/offline badge.
src/components/CleanupAssistant.tsx Adds heuristics to suggest deleting large/duplicate/stale prompts.
src/components/ErrorBoundary.tsx Adds global error boundary and wraps App in main.tsx.
src/main.tsx Wraps App with ErrorBoundary.
src/index.css Adds styles for new UI pieces (presets, DnD feedback, sidebar layout tweaks) + comment spelling fixes.
src/types/flexsearch.d.ts Adds local type declarations for FlexSearch.
src/types.ts Adds PromptTemplate + DateRange types.
src/App.tsx Switches to IndexedDB hooks, adds template integration, drag/drop move handler, and advanced filter bar.
README.md Updates feature list/stack to reflect v1.2.5.
CHANGELOG.md Adds v1.2.5 release notes.
package.json / package-lock.json Bumps version, adds flexsearch/react-window deps, adds overrides.
.github/workflows/ci.yml Adds CodeQL + separate typecheck/lint/build audit jobs.
Comments suppressed due to low confidence (1)

src/components/VariableInjector.tsx:216

  • aria-describedby / id values are built from v.name, and variable names are allowed to contain spaces ([\w\s-]+). IDs with spaces are invalid HTML and can break accessibility mappings. Generate a sanitized id (e.g., slugify/replace non-alphanumerics) or use the array index to create a stable, valid id.
                            <select
                                className="variable-input variable-input-select"
                                value={values[v.name] || ''}
                                onChange={e => handleChange(v.name, e.target.value)}
                                aria-label={`Select value for variable ${v.name}`}
                                aria-describedby={`variable-help-${v.name}`}
                            >
                                <option value="">Choose an option...</option>
                                {v.options.map(opt => (
                                    <option key={opt} value={opt}>{opt}</option>
                                ))}
                            </select>
                        ) : (
                            <input
                                type={v.type}
                                className={`variable-input ${v.type === 'number' ? 'variable-input-number' : ''}`}
                                placeholder={`Value for ${v.name}`}
                                value={values[v.name] || ''}
                                onChange={e => handleChange(v.name, e.target.value)}
                                aria-label={`Enter value for variable ${v.name}`}
                                aria-describedby={`variable-help-${v.name}`}
                            />
                        )}
                        <span id={`variable-help-${v.name}`} className="hide-visually">
                            Input value for the dynamic variable {v.name} which will be injected into the prompt.
                        </span>
                    </div>

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants