Skip to content

Feat/parser editor#97

Open
ginccc wants to merge 4 commits into
mainfrom
feat/parser-editor
Open

Feat/parser editor#97
ginccc wants to merge 4 commits into
mainfrom
feat/parser-editor

Conversation

@ginccc

@ginccc ginccc commented Jun 11, 2026

Copy link
Copy Markdown
Member

This pull request introduces inline editing support for parser steps in workflow pipelines, including a new parser editor, integration with the pipeline UI, and comprehensive test coverage. It also adds internationalization (i18n) strings for the parser editor in English, German, Arabic, and Spanish.

Major features and changes:

Parser Editor Integration

  • Added a new ParserEditor component and associated types in parser-editor-types.ts, including default configuration and constants for parser dictionaries, corrections, and normalizers.
  • Updated editor-registry.tsx to register the parser editor type, enabling the UI to render parser steps with the new editor. [1] [2] [3]

Pipeline Builder Enhancements

  • Modified pipeline-builder.tsx to support inline editing for parser steps (those without a config URI but with extensions), including a "Configure" button and callback (onEditInline). [1] [2] [3] [4] [5] [6] [7] [8] [9]

Testing

  • Added a new test suite parser-workflow-inline.test.tsx to verify parser step rendering, inline editing behavior, dialog interactions, and workflow state management.

Internationalization

  • Added parser editor strings and resource type labels in English, German, Arabic, and Spanish locale files, covering UI labels, dictionary/correction/normalizer types, and descriptions. [1] [2] [3] [4] [5] [6] [7]

These changes collectively enable a localized, inline configuration experience for parser steps in workflow pipelines, improving usability and maintainability.

Summary by CodeRabbit

  • New Features

    • Added a Parser resource type with a full editor for dictionaries, corrections, and normalizers
    • Inline editing for parser steps in workflows with open/cancel/apply flow and immediate dirty indicator
  • Localization

    • Parser editor UI translated into multiple languages (including EN, FR, DE, ES, JA, KO, ZH, HI, PT, AR, TH)
  • Tests

    • Comprehensive UI tests added for parser editor, workflow inline editing, and resource pages

@coderabbitai

coderabbitai Bot commented Jun 11, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: f5ccea11-7a17-469e-a33e-d1599f6587e1

📥 Commits

Reviewing files that changed from the base of the PR and between 2c4722d and 9caf9e1.

📒 Files selected for processing (19)
  • src/components/editors/__tests__/parser-workflow-inline.test.tsx
  • src/components/editors/parser-editor.tsx
  • src/components/editors/pipeline-builder.tsx
  • src/i18n/locales/ar.json
  • src/i18n/locales/de.json
  • src/i18n/locales/en.json
  • src/i18n/locales/es.json
  • src/i18n/locales/fr.json
  • src/i18n/locales/hi.json
  • src/i18n/locales/ja.json
  • src/i18n/locales/ko.json
  • src/i18n/locales/pt.json
  • src/i18n/locales/th.json
  • src/i18n/locales/zh.json
  • src/lib/api/__tests__/extensions.test.ts
  • src/pages/__tests__/resource-detail-parser.test.tsx
  • src/pages/__tests__/studio-editor-panel.test.tsx
  • src/pages/workflow-detail.tsx
  • src/test/mocks/handlers.ts
✅ Files skipped from review due to trivial changes (5)
  • src/i18n/locales/zh.json
  • src/i18n/locales/en.json
  • src/i18n/locales/th.json
  • src/i18n/locales/hi.json
  • src/i18n/locales/ko.json
🚧 Files skipped from review as they are similar to previous changes (9)
  • src/i18n/locales/es.json
  • src/i18n/locales/de.json
  • src/i18n/locales/pt.json
  • src/components/editors/tests/parser-workflow-inline.test.tsx
  • src/pages/tests/resource-detail-parser.test.tsx
  • src/pages/workflow-detail.tsx
  • src/components/editors/pipeline-builder.tsx
  • src/i18n/locales/ja.json
  • src/components/editors/parser-editor.tsx

📝 Walkthrough

Walkthrough

Adds a new "parser" resource type with ParserEditor UI, tests, editor/registry and API mappings, inline pipeline editing and modal dialog flow, localized UI strings across locales, and MSW mocks to return enriched parser payloads.

Changes

Parser Feature Implementation

Layer / File(s) Summary
Parser editor types and constants
src/components/editors/parser-editor-types.ts
Defines ParserConfig, ParserExtensionItem, ParserExtensions, ParserData, BUILTIN_DICTIONARIES, CORRECTION_TYPES, NORMALIZER_TYPES, and createDefaultParserData().
ParserEditor component and utilities
src/components/editors/parser-editor.tsx
Implements ParserEditor with Section and ToggleRow helpers; manages config, built-in/regular dictionaries, corrections (distance), and normalizers (config); immutable updates via onChange; includes extractIdFromUri.
ParserEditor tests
src/components/editors/__tests__/parser-editor.test.tsx
Vitest + RTL suite covering rendering, config toggles, built-in/regular dictionary flows (URI picker/add/remove), corrections, normalizers, read-only mode, collapse behavior, badges, and createDefaultParserData.
Editor registry & RESOURCE_TYPES
src/components/editors/editor-registry.tsx, src/lib/api/extensions.ts, src/lib/api/resources.ts
Registers parser editor in EDITOR_MAP; maps eddi://ai.labs.parserparser; inserts parser into RESOURCE_TYPES with parserstore and icon metadata.
API alignment tests
src/lib/api/__tests__/extensions.test.ts, src/lib/api/__tests__/resources.test.ts
Updates tests/fixtures to include parser extension and assert 10 RESOURCE_TYPES, parser slug presence, and hasResourceStore for parser.
PipelineBuilder inline edit support
src/components/editors/pipeline-builder.tsx
Adds optional onEditInline prop, parserstore→parser mapping, inline-editable detection, and a Pencil "Configure" button that triggers onEditInline(index).
WorkflowDetail inline parser editing flow
src/pages/workflow-detail.tsx
Adds parser edit state and handlers, initializes new parser steps with createDefaultParserData, wires onEditInline into PipelineBuilder, and renders ParserDialog modal (focus/scroll/escape/Cancel/Apply).
Workflow inline editing tests
src/components/editors/__tests__/parser-workflow-inline.test.tsx
Tests inline configure button visibility, dialog open/close, cancel behavior, and save/apply flow with dirty indicator; includes renderWorkflowPage helper.
ResourceDetail parser tests
src/pages/__tests__/resource-detail-parser.test.tsx
Tests ResourceDetailPage rendering and backend-driven parser UI elements (config, dictionaries, corrections, normalizers).
Mock API handlers for parser
src/test/mocks/handlers.ts
Enriches workflow mock to include parser config/extensions and adds GET /parserstore/parsers/:id handler returning structured parser payload (skips descriptors/includePreviousVersions).
Parser i18n across locales
src/i18n/locales/{ar,de,en,es,fr,hi,ja,ko,pt,th,zh}.json
Adds resources.types.parser and a parserEditor translation block with UI labels for config, dictionaries, corrections, and normalizers across locales.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

🐰 I found a parser in a stack of code,
Dictionaries, fixes, and a modal to show,
Inline edits hop in with a click and a tune,
Locales sing back from morning to noon,
Hooray — I nibble bugs and then I go!

🚥 Pre-merge checks | ✅ 3 | ❌ 2

❌ Failed checks (1 warning, 1 inconclusive)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 76.92% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Title check ❓ Inconclusive The title 'Feat/parser editor' is vague and generic, using a conventional feature branch naming format but lacking descriptive detail about the actual change. Replace 'Feat/parser editor' with a more descriptive title like 'Add ParserEditor component with inline workflow step editing' to clearly summarize the main contribution.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch feat/parser-editor

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

ESLint install failed due to a network error.


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Actionable comments posted: 7

🧹 Nitpick comments (4)
src/components/editors/__tests__/parser-editor.test.tsx (2)

489-495: ⚡ Quick win

Avoid badge assertions via section textContent; assert through explicit data-testid.

These checks depend on container text shape instead of stable test IDs. Add badge-level data-testid (e.g., per section badge) and assert exact values there.

As per coding guidelines, "Assert on data-testid attributes in unit tests instead of relying on rendered text or DOM structure".

Also applies to: 513-514

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/editors/__tests__/parser-editor.test.tsx` around lines 489 -
495, Replace assertions that inspect section.textContent with checks against
explicit badge-level data-testids: add a stable data-testid on the badge
elements (e.g., "parser-dictionaries-badge" and "parser-corrections-badge") in
the component that renders each section, then update the test
(parser-editor.test.tsx) to use screen.getByTestId("parser-dictionaries-badge")
and screen.getByTestId("parser-corrections-badge") and assert their exact values
(e.g., expect(...).toHaveTextContent("6") / "2"); also apply the same change for
the other occurrences noted around lines 513-514 to stop relying on
section.textContent.

Source: Coding guidelines


18-29: ⚡ Quick win

Align test bootstrap with the required renderPage(type) helper stack.

This helper directly uses render(...) and skips the mandated shared wrapper pattern (MemoryRouter, QueryClient, ThemeProvider via renderPage(type)).

As per coding guidelines, "Use renderPage(type) helper with MemoryRouter, QueryClient, and ThemeProvider in unit tests".

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/editors/__tests__/parser-editor.test.tsx` around lines 18 -
29, The test helper renderEditor currently calls render(...) directly and
bypasses the shared wrapper stack; change it to use the shared renderPage(type)
helper so tests get MemoryRouter, QueryClient and ThemeProvider applied. Update
the renderEditor function (which returns onChange and the render result) to call
renderPage(...) with the appropriate page type for this editor (instead of
render(...)) and spread/return its result along with onChange so ParserEditor is
wrapped consistently.

Source: Coding guidelines

src/components/editors/__tests__/parser-workflow-inline.test.tsx (1)

43-131: ⚡ Quick win

Strengthen test assertions to ensure parser step coverage.

Tests 2-5 use conditional checks (if (configButtons.length > 0)) that make them pass even when no parser steps exist in the mock data. This weakens test coverage because the tests won't catch regressions if the inline edit feature breaks but the mock workflow happens to lack parser steps.

Consider one of these approaches:

  1. Assert that at least one parser step exists in the mock data before testing Configure button behavior
  2. Update the mock data (in src/test/mocks/handlers.ts) to guarantee a workflow with parser steps for this test suite
  3. Use a dedicated test-only workflow ID that returns parser steps
💚 Example: Assert parser step existence
 it("shows Configure button for parser steps (no config URI)", async () => {
   renderWorkflowPage();
   await waitFor(() => {
-    // The workflow mock data should contain a parser step
-    // Check that at least one configure-inline button exists
     const configButtons = screen.queryAllByTestId(/^configure-inline-/);
-    // Parser step may or may not be in mock workflow data.
-    // If it exists, verify the button is there
-    if (configButtons.length > 0) {
-      expect(configButtons[0]).toBeInTheDocument();
-    }
+    // Assert that parser steps exist in mock data
+    expect(configButtons.length).toBeGreaterThan(0);
+    expect(configButtons[0]).toBeInTheDocument();
   });
 });
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/components/editors/__tests__/parser-workflow-inline.test.tsx` around
lines 43 - 131, The test cases ("opens parser dialog when Configure is clicked",
"closes parser dialog on cancel", "applies parser changes and marks workflow
dirty" and the Configure button presence test) silently skip when no parser step
exists because they use if (configButtons.length > 0); fix by adding a hard
assertion that a parser configure button exists before proceeding (e.g.,
expect(configButtons.length).toBeGreaterThan(0)) or ensure the test harness
returns a workflow with parser steps (update the mock in handlers.ts or use a
dedicated test workflow ID), and then proceed with the existing click and dialog
assertions (reference the test names and the
queryAllByTestId(/^configure-inline-/) lookup and
parser-edit-dialog/parser-editor/assertions).
src/pages/__tests__/resource-detail-parser.test.tsx (1)

2-3: 💤 Low value

Consider combining imports from the same module.

Both lines import from @testing-library/react and can be combined into a single import statement for better code organization.

♻️ Proposed consolidation
-import { screen, waitFor } from "`@testing-library/react`";
-import { render } from "`@testing-library/react`";
+import { render, screen, waitFor } from "`@testing-library/react`";
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@src/pages/__tests__/resource-detail-parser.test.tsx` around lines 2 - 3, The
test file imports from `@testing-library/react` in two statements; consolidate
them into one import that includes screen, waitFor, and render to clean up
redundancy—update the import lines to a single statement importing screen,
waitFor, and render (referencing the symbols screen, waitFor, render in
resource-detail-parser.test.tsx) so the file uses one organized import from
"`@testing-library/react`".
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@src/components/editors/parser-editor.tsx`:
- Around line 189-194: The new regular-dictionary entry stores the raw input
even though you validate with uri.trim(); update the creation path that
constructs ParserExtensionItem (the anonymous handler that builds newEntry with
type REGULAR_DICT_TYPE and config: { uri }) to normalize the URI before
persisting (e.g., assign a trimmed/normalized value and store that in config.uri
instead of the original input); ensure any subsequent uses of that field read
the normalized value.
- Line 434: The placeholder string for the dictionary URI is hardcoded; replace
it with an i18n call using an inline fallback (e.g.
t("parserEditor.dictionaryUriPlaceholder",
"eddi://ai.labs.dictionary/dictionarystore/dictionaries/<id>?version=<v>")).
Update the JSX placeholder prop in the ParserEditor component (the placeholder
attribute currently set to
"eddi://ai.labs.dictionary/dictionarystore/dictionaries/<id>?version=<v>") to
call t(...), and ensure the component uses the existing translation hook (e.g.,
useTranslation/t) or imports it if missing.

In `@src/i18n/locales/ar.json`:
- Around line 481-484: Replace the English value for the "snippets.description"
key with an Arabic translation so the Arabic locale is fully localized; update
the "snippets" object’s "description" entry
(resources.types.snippets.description / the "snippets": { "description": ... }
field) to a suitable Arabic string such as "مكونات قابلة لإعادة الاستخدام لبناء
موجهات النظام".

In `@src/lib/api/__tests__/extensions.test.ts`:
- Around line 206-207: The test currently excludes the parser URI from
cross-reference integrity checks by adding "eddi://ai.labs.parser" to the SKIP
Set in extensions.test.ts; remove that entry so the parser is no longer skipped
and will be validated by the test (the parser is defined in EXTENSION_TYPE_INFO,
so leaving it out weakens the contract), i.e., edit the SKIP constant to only
include "eddi://ai.labs.snippet" and "eddi://ai.labs.snippets" so
EXTENSION_TYPE_INFO's parser gets checked.

In `@src/pages/workflow-detail.tsx`:
- Around line 684-692: The Escape key handler in the useCallback (handleKeyDown)
only calls e.stopPropagation() and should also call e.preventDefault() to fully
cancel the event; update the handler for the "Escape" branch to call
e.preventDefault() before invoking onCancel() so default browser actions are
suppressed and the event is fully cancelled.
- Line 711: The className string containing "mx-4" is not RTL-aware; update the
JSX element whose className equals "relative z-10 w-full max-w-lg max-h-[85vh]
overflow-y-auto rounded-xl border border-border bg-card shadow-2xl mx-4 p-5
outline-none animate-in fade-in zoom-in-95 duration-200" to use the logical
margin utility instead of the directional one by replacing "mx-4" with
"inline-4" (preserve all other classes and variants).
- Around line 270-304: The handlers handleEditInline and handleParserSave
currently use unsafe type assertions between WorkflowExtension fields and
ParserData (lines around setParserEditData and updated[parserEditIndex]
assignments); add a small runtime validator (e.g., isValidParserData) that
checks required shape/keys of ParserData (and fallback to
createDefaultParserData() or abort/save no-op on failure), call it before
calling setParserEditData in handleEditInline and before applying parserEditData
in handleParserSave, and only cast/assign after validation to prevent corrupting
backend extensions when structure mismatches.

---

Nitpick comments:
In `@src/components/editors/__tests__/parser-editor.test.tsx`:
- Around line 489-495: Replace assertions that inspect section.textContent with
checks against explicit badge-level data-testids: add a stable data-testid on
the badge elements (e.g., "parser-dictionaries-badge" and
"parser-corrections-badge") in the component that renders each section, then
update the test (parser-editor.test.tsx) to use
screen.getByTestId("parser-dictionaries-badge") and
screen.getByTestId("parser-corrections-badge") and assert their exact values
(e.g., expect(...).toHaveTextContent("6") / "2"); also apply the same change for
the other occurrences noted around lines 513-514 to stop relying on
section.textContent.
- Around line 18-29: The test helper renderEditor currently calls render(...)
directly and bypasses the shared wrapper stack; change it to use the shared
renderPage(type) helper so tests get MemoryRouter, QueryClient and ThemeProvider
applied. Update the renderEditor function (which returns onChange and the render
result) to call renderPage(...) with the appropriate page type for this editor
(instead of render(...)) and spread/return its result along with onChange so
ParserEditor is wrapped consistently.

In `@src/components/editors/__tests__/parser-workflow-inline.test.tsx`:
- Around line 43-131: The test cases ("opens parser dialog when Configure is
clicked", "closes parser dialog on cancel", "applies parser changes and marks
workflow dirty" and the Configure button presence test) silently skip when no
parser step exists because they use if (configButtons.length > 0); fix by adding
a hard assertion that a parser configure button exists before proceeding (e.g.,
expect(configButtons.length).toBeGreaterThan(0)) or ensure the test harness
returns a workflow with parser steps (update the mock in handlers.ts or use a
dedicated test workflow ID), and then proceed with the existing click and dialog
assertions (reference the test names and the
queryAllByTestId(/^configure-inline-/) lookup and
parser-edit-dialog/parser-editor/assertions).

In `@src/pages/__tests__/resource-detail-parser.test.tsx`:
- Around line 2-3: The test file imports from `@testing-library/react` in two
statements; consolidate them into one import that includes screen, waitFor, and
render to clean up redundancy—update the import lines to a single statement
importing screen, waitFor, and render (referencing the symbols screen, waitFor,
render in resource-detail-parser.test.tsx) so the file uses one organized import
from "`@testing-library/react`".
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 24912dcf-ac45-4abf-9301-34fb9bb3a112

📥 Commits

Reviewing files that changed from the base of the PR and between 557ef74 and 2c4722d.

📒 Files selected for processing (24)
  • src/components/editors/__tests__/parser-editor.test.tsx
  • src/components/editors/__tests__/parser-workflow-inline.test.tsx
  • src/components/editors/editor-registry.tsx
  • src/components/editors/parser-editor-types.ts
  • src/components/editors/parser-editor.tsx
  • src/components/editors/pipeline-builder.tsx
  • src/i18n/locales/ar.json
  • src/i18n/locales/de.json
  • src/i18n/locales/en.json
  • src/i18n/locales/es.json
  • src/i18n/locales/fr.json
  • src/i18n/locales/hi.json
  • src/i18n/locales/ja.json
  • src/i18n/locales/ko.json
  • src/i18n/locales/pt.json
  • src/i18n/locales/th.json
  • src/i18n/locales/zh.json
  • src/lib/api/__tests__/extensions.test.ts
  • src/lib/api/__tests__/resources.test.ts
  • src/lib/api/extensions.ts
  • src/lib/api/resources.ts
  • src/pages/__tests__/resource-detail-parser.test.tsx
  • src/pages/workflow-detail.tsx
  • src/test/mocks/handlers.ts

Comment thread src/components/editors/parser-editor.tsx
Comment thread src/components/editors/parser-editor.tsx Outdated
Comment thread src/i18n/locales/ar.json
Comment thread src/lib/api/__tests__/extensions.test.ts Outdated
Comment thread src/pages/workflow-detail.tsx
Comment thread src/pages/workflow-detail.tsx
Comment thread src/pages/workflow-detail.tsx

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Pull request overview

This PR adds a dedicated Parser editor UI and wires it into both the resource detail view (standalone parser resources) and workflow pipelines (inline editing for embedded parser steps), along with expanded i18n strings and new tests.

Changes:

  • Introduces ParserEditor + shared parser types/defaults, and registers the new parser editor type in the editor registry.
  • Extends pipeline/workflow UI to support an inline “Configure” action intended for embedded parser steps.
  • Adds parser as a first-class resource type (API config + mappings), updates MSW mocks, adds/updates tests, and adds locale strings across multiple languages.

Reviewed changes

Copilot reviewed 24 out of 24 changed files in this pull request and generated 5 comments.

Show a summary per file
File Description
src/test/mocks/handlers.ts Adds MSW mock response for parser resource data (config + extensions).
src/pages/workflow-detail.tsx Adds parser inline-edit dialog wiring and parser-specific defaults when adding steps.
src/pages/tests/resource-detail-parser.test.tsx New page-level tests asserting parser editor renders in resource detail.
src/lib/api/resources.ts Adds parser to RESOURCE_TYPES for standalone resource support.
src/lib/api/extensions.ts Maps eddi://ai.labs.parser to the parser resource slug.
src/lib/api/tests/resources.test.ts Updates resource type count and asserts parser slug exists.
src/lib/api/tests/extensions.test.ts Updates counts/mappings for parser; validates resource-store mapping assumptions.
src/i18n/locales/zh.json Adds parser resource type labels + parserEditor strings.
src/i18n/locales/th.json Adds parser resource type labels + parserEditor strings.
src/i18n/locales/pt.json Adds parser resource type labels + parserEditor strings.
src/i18n/locales/ko.json Adds parser resource type labels + parserEditor strings.
src/i18n/locales/ja.json Adds parser resource type labels + parserEditor strings.
src/i18n/locales/hi.json Adds parser resource type labels + parserEditor strings.
src/i18n/locales/fr.json Adds parser resource type labels + parserEditor strings.
src/i18n/locales/es.json Adds parser resource type labels + parserEditor strings.
src/i18n/locales/en.json Adds parser resource type labels + parserEditor strings (source language).
src/i18n/locales/de.json Adds parser resource type labels + parserEditor strings.
src/i18n/locales/ar.json Adds parser resource type labels + parserEditor strings.
src/components/editors/pipeline-builder.tsx Adds inline “Configure” button hook intended for embedded parser config.
src/components/editors/parser-editor.tsx New parser form editor UI for parser config/extensions.
src/components/editors/parser-editor-types.ts New shared parser types/constants + createDefaultParserData.
src/components/editors/editor-registry.tsx Registers parser editor type and maps parser extension → slug.
src/components/editors/tests/parser-workflow-inline.test.tsx New workflow-detail tests for parser inline editing (currently conditional).
src/components/editors/tests/parser-editor.test.tsx New unit tests for parser editor behavior and defaults.

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

Comment thread src/pages/workflow-detail.tsx
Comment thread src/components/editors/pipeline-builder.tsx Outdated
Comment thread src/components/editors/__tests__/parser-workflow-inline.test.tsx Outdated
Comment thread src/lib/api/__tests__/extensions.test.ts Outdated
Comment thread src/lib/api/__tests__/extensions.test.ts
ginccc added 2 commits June 11, 2026 20:41
- Fix failing studio-editor-panel test: parser now has a registered editor
- Normalize URI (trim whitespace) before persisting regular dictionaries
- Localize dictionary URI placeholder via t() with new dictUriPlaceholder key
- Translate ar.json snippets.description from English to Arabic
- Add preventDefault() to Escape key handler in parser dialog
- Use logical CSS property mi-4 instead of mx-4 for RTL support
- Restrict isInlineEditable to parser steps only (not all steps without URI)
- Only inject default parser extensions when no configUri is provided
- Remove parser from SKIP set in extension cross-reference test
- Add parser to BACKEND_EXTENSIONS in alignment test
- Combine duplicate @testing-library/react imports
- Propagate dictUriPlaceholder i18n key to all 11 locale files
…tation

- Fix mi-4 → mx-4 (mi-4 is not a built-in Tailwind v4 utility)
- Add inline parser step (no config.uri) to workflow mock data
- Rewrite parser-workflow-inline tests: remove conditional if-guards
  that made 4/5 tests no-ops; all 6 tests now deterministic
- Fix handleAddExtension indentation (4-space → 2-space)
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.

2 participants