Skip to content

151 continue refactoring UI into components#152

Merged
eviltester merged 7 commits into
masterfrom
151-continue-refactoring-ui-into-components
Jun 4, 2026
Merged

151 continue refactoring UI into components#152
eviltester merged 7 commits into
masterfrom
151-continue-refactoring-ui-into-components

Conversation

@eviltester

@eviltester eviltester commented Jun 3, 2026

Copy link
Copy Markdown
Owner

closes #151

Summary by CodeRabbit

  • Refactor

    • Modernized import/export workspace and preview/editor flows for more reliable preview, copy, and download interactions.
  • Stories

    • Added workspace stories demonstrating import/export busy, unsupported, and error states; updated editor and panel story descriptions.
  • Documentation

    • Updated architecture and migration docs to reflect legacy UI removal progress and new component contracts.
  • Tests

    • Added workspace controller and services tests; removed obsolete legacy tests and updated test harnesses.

Copilot AI review requested due to automatic review settings June 3, 2026 22:09
@eviltester eviltester linked an issue Jun 3, 2026 that may be closed by this pull request
@coderabbitai

coderabbitai Bot commented Jun 3, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@eviltester, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 2 minutes and 4 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more in the billing tab.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: 9d01ff54-5f2a-4f94-ad43-bc5af07b58ae

📥 Commits

Reviewing files that changed from the base of the PR and between 26d96b6 and b307524.

📒 Files selected for processing (5)
  • apps/web/src/stories/export-preview-story-harness.js
  • docs/frontend-component-migration-plan.md
  • docs/frontend-ui-matrix-rationalization-plan.md
  • packages/core-ui/src/tests/app/import-export-workspace-services.test.js
  • packages/core-ui/src/tests/interaction/matrix/ui-schema-interaction-parity.test.js
📝 Walkthrough

Walkthrough

Moves import/export orchestration into a workspace component with service-based preview/import/export flows; removes legacy controls and imperative options panels; introduces a declarative FormatOptionsPanel system; updates Storybook stories, controllers, views, and tests to the new contracts.

Changes

Workspace & Format-Options Migration

Layer / File(s) Summary
Format-option primitives & per-format defs
packages/core-ui/js/gui_components/shared/format-options-panel/*
Adds shared field factories, DOM helpers, help-tip application, base and code format definition modules used to declare option panels.
Declarative panel class & factory
packages/core-ui/js/gui_components/shared/format-options-panel/format-option-panel-definition.js
Implements DeclarativeFormatOptionPanel with render/read/write lifecycle, field rendering, and factory/getter helpers; exports merged FORMAT_OPTION_DEFINITIONS.
FormatOptionsPanel view & index integration
packages/core-ui/js/gui_components/shared/format-options-panel/format-options-panel-view.js, .../index.js
View now creates panels from definitions via services.getPanelDefinitions/createPanelFromDefinition and uses panel.read() for GUI options.
Workspace services & orchestration
packages/core-ui/js/gui_components/app/import-export-workspace/import-export-workspace-services.js
Adds preview-row limit normalization, data-table limiting, preview/full text generation, previewThenImportToGrid orchestration, clipboard/download helpers, and yield-to-UI helper.
Controller state normalization
packages/core-ui/js/gui_components/app/import-export-workspace/import-export-workspace-controller.js, .../import-export-toolbar-controller.js
Normalize previewRowLimit and coerce boolean/message props; update canSetGridFromText gating.
Workspace factory & API
packages/core-ui/js/gui_components/app/import-export-workspace/index.js
Refactors factory to accept windowObj, wires services (confirm/clipboard/download/file-read/yield), implements import/read/download/copy/toggle flows, and exposes a workspace API (applyCurrentTypeOptions, renderTextFromGrid, fileDownload, copyText, etc.).
Workspace view: options panel & splitter
packages/core-ui/js/gui_components/app/import-export-workspace/import-export-workspace-view.js
Adds lazy format-options panel creation, resizable splitter (pointer/keyboard), ARIA updates, toolbar callback wiring, and expanded destroy teardown.
Toolbar & TextPreviewEditor
packages/core-ui/js/gui_components/app/import-export-toolbar/*, .../text-preview-editor/*
Toolbar accepts callbacks/services, binds file-import adapter, renders status/loading, and cleans up listeners; TextPreviewEditor exposes text accessors and forwards input/copy events via controller callbacks.
Story harness & stories
apps/web/src/stories/export-preview-story-harness.js, apps/web/src/stories/import-export-workspace.stories.js, apps/web/src/stories/text-preview-editor.stories.js
Rewrites harness to use workspace; removes scoped document shims; emits story actions from workspace overrides; adds ImportBusy/ExportBusy/UnsupportedFormat/ErrorState stories and updates docs.
Legacy removal & adapters
packages/core-ui/js/gui_components/app/import-export-adapters/*, packages/core-ui/js/gui_components/app/import-export-controls.js, packages/core-ui/js/gui_components/app/exportControls.js, packages/core-ui/js/gui_components/options_panels/*
Removes legacy export-actions adapter, import-export-controls, exportControls, and many imperative options_panel implementations; narrows adapter exports.
Tests & harness updates
packages/core-ui/src/tests/*, apps/web/src/tests/jest/*
Adds tests for workspace controller/services and declarative panels; migrates workspace tests to injected-service harness; removes many legacy option-panel class tests.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

Possibly related PRs

"🐰 I hopped through the code with gentle cheer,
New workspace springs, old shims disappear.
Panels declared, splitters glide, previews hum,
Stories and tests now sing where changes come.
A tiny hop — the UI tidy and clear."

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch 151-continue-refactoring-ui-into-components

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

Pull request overview

Refactors the Import/Export workspace to fully own its behavior via controller/view/services, removing remaining legacy *Controls orchestration and updating tests/stories/docs to match the new component boundaries (closes #151).

Changes:

  • Removed legacy ImportExportControls, ExportControls, and the export-actions adapter; workspace now coordinates preview/edit, import, file read, copy, and download via injected services.
  • Introduced workspace services + controller state model for preview row limiting, preview-then-import flow, clipboard/download, and “yield-to-UI”.
  • Reworked Jest tests and Storybook stories/harnesses to exercise the new component-owned behavior and updated migration documentation.

Reviewed changes

Copilot reviewed 26 out of 26 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
packages/core-ui/src/tests/utils/import-export-controls-mode.test.js Removed legacy-control-focused tests after migrating behavior into workspace components/services.
packages/core-ui/src/tests/utils/export-controls.test.js Removed legacy ExportControls tests now that download/copy are workspace services.
packages/core-ui/src/tests/app/import-export-workspace.test.js Updated workspace tests to validate new component-owned behavior (preview limits, dirty state, file read, download/copy).
packages/core-ui/src/tests/app/import-export-workspace-services.test.js Added unit tests for the new workspace service functions (normalization, preview text, preview-then-import).
packages/core-ui/src/tests/app/import-export-workspace-controller.test.js Added controller tests for normalized limits and state transitions/guards.
packages/core-ui/src/tests/app/import-export-adapters.test.js Removed adapter test coverage tied to deleted export-actions adapter.
packages/core-ui/js/gui_components/app/text-preview-editor/text-preview-editor-view.js Added text-input + copy button event wiring and view helpers for text/copy.
packages/core-ui/js/gui_components/app/text-preview-editor/text-preview-editor-controller.js Added controller callbacks for text input and copy actions.
packages/core-ui/js/gui_components/app/text-preview-editor/index.js Exposed text/copy helpers on the component API for workspace coordination.
packages/core-ui/js/gui_components/app/import-export-workspace/index.js Replaced legacy controls with workspace-owned orchestration (services, busy/status, preview/import/download/copy).
packages/core-ui/js/gui_components/app/import-export-workspace/import-export-workspace-view.js Added options panel + splitter behavior and integrates toolbar/editor updates via state.
packages/core-ui/js/gui_components/app/import-export-workspace/import-export-workspace-services.js Introduced shared service helpers (row limiting, preview text, clipboard/download, yield-to-UI, preview-then-import).
packages/core-ui/js/gui_components/app/import-export-workspace/import-export-workspace-controller.js Expanded state model and added state helpers (busy/status/support state, dirty tracking).
packages/core-ui/js/gui_components/app/import-export-toolbar/index.js Extended toolbar component to accept callbacks/services for actions and file bindings.
packages/core-ui/js/gui_components/app/import-export-toolbar/import-export-toolbar-view.js Toolbar now binds buttons, manages file bindings, and renders busy/status/support state.
packages/core-ui/js/gui_components/app/import-export-toolbar/import-export-toolbar-controller.js Added toolbar state fields and canSetGridFromText() logic.
packages/core-ui/js/gui_components/app/import-export-controls.js Deleted legacy coordinator (replaced by workspace controller/services).
packages/core-ui/js/gui_components/app/import-export-adapters/index.js Removed exports for deleted export-actions adapter utilities.
packages/core-ui/js/gui_components/app/import-export-adapters/export-actions-adapter.js Deleted legacy export/copy/download adapter.
packages/core-ui/js/gui_components/app/exportControls.js Deleted legacy ExportControls class.
docs/frontend-legacy-ui-elimination-plan.md Marked Phase 0/1 items complete and documented the new workspace/component-owned state.
docs/frontend-component-migration-plan.md Added status note directing readers to the stricter legacy elimination plan.
docs/frontend-component-architecture.md Updated Storybook exception note now that export-preview harness no longer requires document scoping hacks.
apps/web/src/stories/text-preview-editor.stories.js Updated docs description to reflect expanded TextPreviewEditor responsibilities.
apps/web/src/stories/import-export-workspace.stories.js Added stories/args for busy/error/unsupported states and aligned story setup with new API.
apps/web/src/stories/export-preview-story-harness.js Updated harness to mount the workspace directly and removed scoped-document monkey patching.

Comment thread apps/web/src/stories/export-preview-story-harness.js Outdated

@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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
apps/web/src/stories/export-preview-story-harness.js (2)

441-454: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

onSetGridFromTextFailed cannot fire from this listener.

This handler only awaits Promise.resolve(), so the catch block never observes the real import/parsing failure from the workspace click path. As written, the failure action is dead and the story cannot surface import errors through this callback.

🤖 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 `@apps/web/src/stories/export-preview-story-harness.js` around lines 441 - 454,
The click listener attached to setGridFromTextButton only awaits
Promise.resolve(), so real parse/import errors never reach the catch and
onSetGridFromTextFailed cannot fire; replace the noop await with the actual
import/parsing call used by the workspace click flow (the same function that
consumes markdownarea.value and the export type from
getActiveExportSelection(surface)), await its promise inside the try, and on
failure emitAction('onSetGridFromTextFailed', { type, message: error?.message ||
'Unable to parse input into data table.', sourceTextLength: textToImport.length
}) so errors from the import/parsing routine are surfaced.

419-438: ⚠️ Potential issue | 🟡 Minor | ⚡ Quick win

Avoid double-emitting onPreviewRendered for one button click.

This button already goes through the workspace handler, and the overridden workspace.renderTextFromGrid emits onPreviewRendered once. Emitting it again here makes one user action produce two preview-render events, which pollutes Storybook actions and makes interaction assertions flaky.

Proposed fix
   setTextFromGridButton?.addEventListener('click', () => {
     emitAction('onSetTextFromGrid', {
       ...getPreviewActionPayload(
         surface,
         exporter,
         workspace.getPreviewRowLimit(),
         workspace.isPreviewTextMode() ? 'preview' : 'edit'
       ),
       trigger: 'button',
     });
-    emitAction(
-      'onPreviewRendered',
-      getPreviewActionPayload(
-        surface,
-        exporter,
-        workspace.getPreviewRowLimit(),
-        workspace.isPreviewTextMode() ? 'preview' : 'edit'
-      )
-    );
   });
🤖 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 `@apps/web/src/stories/export-preview-story-harness.js` around lines 419 - 438,
The click handler for setTextFromGridButton is double-emitting
onPreviewRendered; remove the extra emitAction('onPreviewRendered', ...) call in
the setTextFromGridButton click listener (leave the
emitAction('onSetTextFromGrid', ...) and the getPreviewActionPayload usage
intact) so that the overridden workspace.renderTextFromGrid continues to emit
onPreviewRendered once and the button click does not emit it again.
🤖 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 `@apps/web/src/stories/export-preview-story-harness.js`:
- Around line 332-339: The downloadService.downloadText mock ignores the
exported text argument and computes textLength from the DOM; update the
downloadText implementation (the downloadService.downloadText function in this
harness) to accept and use the second parameter (text) passed by callers and set
textLength based on that text (e.g., text?.length || 0) when calling
emitAction('onDownloadRequested'), while still preserving fileExtension via
filename.replace and including the export type from
getActiveExportSelection(surface).

In `@docs/frontend-component-migration-plan.md`:
- Around line 12-14: The Phase 6 status text in
docs/frontend-component-migration-plan.md is stale and contradicts the new
guidance that legacy UI may still be present; update the Phase 6 status section
to reflect current reality by removing the explicit claim that the workspace
still uses the old import/export control path (or clearly mark it as
partial/legacy-present) and add a line instructing maintainers to treat updates
to this document as part of the Definition of Done for migration tasks,
referencing the follow-on plan docs/frontend-legacy-ui-elimination-plan.md for
stricter legacy-elimination steps so readers see consistent, actionable status
and next-step ownership.

In
`@packages/core-ui/js/gui_components/app/import-export-workspace/import-export-workspace-services.js`:
- Around line 115-116: The code currently uses optional chaining so a missing
importer.setGridFromGenericDataTable is treated as success; change this to
enforce the contract by verifying importer exists and typeof
importer.setGridFromGenericDataTable === 'function' before calling it (and if
missing, call setImportStatus with an error message and false/abort), then await
importer.setGridFromGenericDataTable(dataTable) normally and only call
setImportStatus('Import complete.', false) after the awaited call succeeds;
reference the importer object and setGridFromGenericDataTable method and the
setImportStatus call to locate where to add the guard and error path.

In `@packages/core-ui/js/gui_components/app/import-export-workspace/index.js`:
- Around line 372-379: renderOptionsPanel() is never called on initial mount or
when the exporter is changed, so format-specific options are missing until
update() runs; ensure renderOptionsPanel is invoked after view.mount() completes
and inside setExporter() (the exporter-change path) in addition to the existing
update() flow. Specifically, after view.mount() and after setExporter(...)
finishes, call renderOptionsPanel() (and any helper like
setOptionsViewForFormatType() if needed) so the options panel initializes on
first render and when the exporter changes; keep the existing
controller.updateProps/ syncSupportState/ setOptionsViewForFormatType calls in
update() untouched.
- Around line 75-82: syncSupportState currently enables import/export when
adapters are missing by defaulting supportsImport/supportsExport to true; change
the logic so missing importer/exporter are treated as unsupported: compute
supportsImport by returning false if importer is falsy, otherwise call
importer.canImport(type) if it’s a function (false if no function), and compute
supportsExport similarly for exporter; for fileExtension only call
importer.getFileExtensionFor or exporter.getFileExtensionFor when those adapters
exist and fall back to `.${type || 'csv'}` if neither provides one; then call
controller.setSupportState({ supportsImport, supportsExport, fileExtension })
and render() as before.
- Around line 137-176: The edit-mode path in importTextArea calls await
importer.importText(type, text) without setting the busy state, updating
importStatus, or catching errors; wrap that call in the same busy/error flow
used by preview: call setImportBusy(true) before the async call, await the
import inside a try/catch, on success call setImportStatus('Import complete',
true) and render(), and in finally call setImportBusy(false); in the catch log
the error, call setImportStatus('Import failed. Check file format/options.',
false) and return undefined (or false) to mirror the preview branch behavior;
ensure you reference importTextArea, importer.importText, setImportBusy,
setImportStatus, render, and yieldToUi if needed.
- Around line 407-409: setFileFormatType currently just aliases syncSupportState
so calling setFileFormatType('json') doesn't change selectedFormat; modify
setFileFormatType to perform the same state update path used by the format
selector (i.e. set the controller's selectedFormat state to the passed value)
and then call syncSupportState if a re-sync is required. Specifically, change
setFileFormatType to update the selectedFormat variable/state used by the format
selector (the same setter or dispatch used in the selector UI) and only delegate
to syncSupportState for resync behavior, ensuring the controller reflects the
requested format immediately.

---

Outside diff comments:
In `@apps/web/src/stories/export-preview-story-harness.js`:
- Around line 441-454: The click listener attached to setGridFromTextButton only
awaits Promise.resolve(), so real parse/import errors never reach the catch and
onSetGridFromTextFailed cannot fire; replace the noop await with the actual
import/parsing call used by the workspace click flow (the same function that
consumes markdownarea.value and the export type from
getActiveExportSelection(surface)), await its promise inside the try, and on
failure emitAction('onSetGridFromTextFailed', { type, message: error?.message ||
'Unable to parse input into data table.', sourceTextLength: textToImport.length
}) so errors from the import/parsing routine are surfaced.
- Around line 419-438: The click handler for setTextFromGridButton is
double-emitting onPreviewRendered; remove the extra
emitAction('onPreviewRendered', ...) call in the setTextFromGridButton click
listener (leave the emitAction('onSetTextFromGrid', ...) and the
getPreviewActionPayload usage intact) so that the overridden
workspace.renderTextFromGrid continues to emit onPreviewRendered once and the
button click does not emit it again.
🪄 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 Plus

Run ID: 4e5bb0ef-992c-48b6-b431-46f678efc832

📥 Commits

Reviewing files that changed from the base of the PR and between d48a049 and 81e555b.

📒 Files selected for processing (26)
  • apps/web/src/stories/export-preview-story-harness.js
  • apps/web/src/stories/import-export-workspace.stories.js
  • apps/web/src/stories/text-preview-editor.stories.js
  • docs/frontend-component-architecture.md
  • docs/frontend-component-migration-plan.md
  • docs/frontend-legacy-ui-elimination-plan.md
  • packages/core-ui/js/gui_components/app/exportControls.js
  • packages/core-ui/js/gui_components/app/import-export-adapters/export-actions-adapter.js
  • packages/core-ui/js/gui_components/app/import-export-adapters/index.js
  • packages/core-ui/js/gui_components/app/import-export-controls.js
  • packages/core-ui/js/gui_components/app/import-export-toolbar/import-export-toolbar-controller.js
  • packages/core-ui/js/gui_components/app/import-export-toolbar/import-export-toolbar-view.js
  • packages/core-ui/js/gui_components/app/import-export-toolbar/index.js
  • packages/core-ui/js/gui_components/app/import-export-workspace/import-export-workspace-controller.js
  • packages/core-ui/js/gui_components/app/import-export-workspace/import-export-workspace-services.js
  • packages/core-ui/js/gui_components/app/import-export-workspace/import-export-workspace-view.js
  • packages/core-ui/js/gui_components/app/import-export-workspace/index.js
  • packages/core-ui/js/gui_components/app/text-preview-editor/index.js
  • packages/core-ui/js/gui_components/app/text-preview-editor/text-preview-editor-controller.js
  • packages/core-ui/js/gui_components/app/text-preview-editor/text-preview-editor-view.js
  • packages/core-ui/src/tests/app/import-export-adapters.test.js
  • packages/core-ui/src/tests/app/import-export-workspace-controller.test.js
  • packages/core-ui/src/tests/app/import-export-workspace-services.test.js
  • packages/core-ui/src/tests/app/import-export-workspace.test.js
  • packages/core-ui/src/tests/utils/export-controls.test.js
  • packages/core-ui/src/tests/utils/import-export-controls-mode.test.js
💤 Files with no reviewable changes (7)
  • packages/core-ui/src/tests/utils/import-export-controls-mode.test.js
  • packages/core-ui/src/tests/utils/export-controls.test.js
  • packages/core-ui/js/gui_components/app/import-export-adapters/export-actions-adapter.js
  • packages/core-ui/src/tests/app/import-export-adapters.test.js
  • packages/core-ui/js/gui_components/app/import-export-controls.js
  • packages/core-ui/js/gui_components/app/exportControls.js
  • packages/core-ui/js/gui_components/app/import-export-adapters/index.js

Comment thread apps/web/src/stories/export-preview-story-harness.js
Comment thread docs/frontend-component-migration-plan.md
Comment thread packages/core-ui/js/gui_components/app/import-export-workspace/index.js Outdated

@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: 2

🤖 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
`@packages/core-ui/js/gui_components/shared/format-options-panel/format-option-panel-definition-shared.js`:
- Around line 163-170: The default for the asPropertyNamed option is an empty
string causing {"": [...] } when asObject is used; change the defaultValue for
the option with key 'asPropertyNamed' (name 'propertynamed', className
'propertynamed') from '' to a sensible default like 'data' so object-mode output
uses a valid property name when users don't edit it.

In
`@packages/core-ui/js/gui_components/shared/format-options-panel/format-option-panel-definition.js`:
- Around line 9-15: resolveMappedValue currently returns fallback directly when
value is undefined, breaking the expected {selected, custom} shape used by the
consumers; update resolveMappedValue so it always returns an object with
selected and custom properties—if fallback is provided and already matches the
shape accept it, otherwise return a safe default like { selected: 'custom',
custom: '' }—so callers of resolveMappedValue (the function named
resolveMappedValue referenced around the select/custom input logic) never
receive a raw non-object fallback.
🪄 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 Plus

Run ID: dc14a79e-1fef-4bdf-96d5-ffed7a57acd6

📥 Commits

Reviewing files that changed from the base of the PR and between 81e555b and 361d498.

📒 Files selected for processing (78)
  • apps/web/src/stories/export-preview-story-harness.js
  • apps/web/src/stories/format-option-panel-basic.stories.js
  • apps/web/src/tests/jest/utils/help-content-coverage.test.js
  • docs/frontend-component-architecture.md
  • docs/frontend-legacy-ui-elimination-plan.md
  • packages/core-ui/js/gui_components/generator/options/options-ui-schema.js
  • packages/core-ui/js/gui_components/options_panels/html-options-data-utils.js
  • packages/core-ui/js/gui_components/options_panels/options-ascii-table.js
  • packages/core-ui/js/gui_components/options_panels/options-csharp-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-csv-delimited-controls.js
  • packages/core-ui/js/gui_components/options_panels/options-delimited-controls.js
  • packages/core-ui/js/gui_components/options_panels/options-gherkin-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-help-tips.js
  • packages/core-ui/js/gui_components/options_panels/options-html-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-java-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-javascript-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-json-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-kotlin-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-markdown-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-perl-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-php-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-python-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-ruby-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-sql-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-test-framework-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-typescript-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-xml-panel.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/asciitable-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/csv-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/dsv-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/gherkin-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/html-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/index.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/json-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/markdown-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/sql-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/xml-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/code-unit-test/test-framework-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/code/csharp-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/code/index.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/code/java-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/code/javascript-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/code/kotlin-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/code/perl-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/code/php-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/code/python-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/code/ruby-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/code/typescript-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/format-option-help.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/format-option-panel-definition-shared.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/format-option-panel-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/format-option-panel-dom.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/format-options-panel-view.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/index.js
  • packages/core-ui/src/tests/shared/format-option-panel-definition.test.js
  • packages/core-ui/src/tests/shared/format-options-panel-view.test.js
  • packages/core-ui/src/tests/utils/html-options-data-utils.test.js
  • packages/core-ui/src/tests/utils/options-ascii-table.test.js
  • packages/core-ui/src/tests/utils/options-csharp-panel.test.js
  • packages/core-ui/src/tests/utils/options-csv-delimited-controls.test.js
  • packages/core-ui/src/tests/utils/options-delimited-controls.test.js
  • packages/core-ui/src/tests/utils/options-gherkin-panel.test.js
  • packages/core-ui/src/tests/utils/options-help-parity.test.js
  • packages/core-ui/src/tests/utils/options-html-panel.test.js
  • packages/core-ui/src/tests/utils/options-java-panel.test.js
  • packages/core-ui/src/tests/utils/options-javascript-panel.test.js
  • packages/core-ui/src/tests/utils/options-json-panel.test.js
  • packages/core-ui/src/tests/utils/options-kotlin-panel.test.js
  • packages/core-ui/src/tests/utils/options-markdown-panel.test.js
  • packages/core-ui/src/tests/utils/options-panel-nesting.test.js
  • packages/core-ui/src/tests/utils/options-perl-panel.test.js
  • packages/core-ui/src/tests/utils/options-php-panel.test.js
  • packages/core-ui/src/tests/utils/options-python-panel.test.js
  • packages/core-ui/src/tests/utils/options-ruby-panel.test.js
  • packages/core-ui/src/tests/utils/options-sql-panel.test.js
  • packages/core-ui/src/tests/utils/options-test-framework-panel.test.js
  • packages/core-ui/src/tests/utils/options-typescript-panel.test.js
  • packages/core-ui/src/tests/utils/options-xml-panel.test.js
💤 Files with no reviewable changes (44)
  • packages/core-ui/js/gui_components/options_panels/options-csharp-panel.js
  • packages/core-ui/src/tests/utils/options-javascript-panel.test.js
  • packages/core-ui/src/tests/utils/options-python-panel.test.js
  • packages/core-ui/js/gui_components/options_panels/options-gherkin-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-kotlin-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-help-tips.js
  • packages/core-ui/src/tests/utils/options-ruby-panel.test.js
  • packages/core-ui/src/tests/utils/options-delimited-controls.test.js
  • packages/core-ui/js/gui_components/options_panels/options-json-panel.js
  • packages/core-ui/src/tests/utils/options-json-panel.test.js
  • packages/core-ui/src/tests/utils/options-kotlin-panel.test.js
  • packages/core-ui/js/gui_components/options_panels/options-ruby-panel.js
  • packages/core-ui/src/tests/utils/options-perl-panel.test.js
  • packages/core-ui/js/gui_components/options_panels/options-xml-panel.js
  • packages/core-ui/src/tests/utils/options-panel-nesting.test.js
  • packages/core-ui/src/tests/utils/options-html-panel.test.js
  • packages/core-ui/src/tests/utils/options-sql-panel.test.js
  • packages/core-ui/js/gui_components/options_panels/options-ascii-table.js
  • packages/core-ui/src/tests/utils/options-ascii-table.test.js
  • packages/core-ui/src/tests/utils/options-xml-panel.test.js
  • packages/core-ui/src/tests/utils/options-help-parity.test.js
  • packages/core-ui/js/gui_components/options_panels/options-python-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-javascript-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-typescript-panel.js
  • packages/core-ui/src/tests/utils/options-test-framework-panel.test.js
  • packages/core-ui/js/gui_components/options_panels/options-html-panel.js
  • packages/core-ui/src/tests/utils/options-php-panel.test.js
  • packages/core-ui/src/tests/utils/options-markdown-panel.test.js
  • packages/core-ui/js/gui_components/options_panels/options-markdown-panel.js
  • packages/core-ui/src/tests/utils/options-gherkin-panel.test.js
  • packages/core-ui/js/gui_components/options_panels/options-csv-delimited-controls.js
  • packages/core-ui/src/tests/utils/options-typescript-panel.test.js
  • packages/core-ui/js/gui_components/options_panels/options-delimited-controls.js
  • packages/core-ui/js/gui_components/options_panels/options-java-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-sql-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-perl-panel.js
  • packages/core-ui/js/gui_components/options_panels/options-test-framework-panel.js
  • packages/core-ui/src/tests/utils/html-options-data-utils.test.js
  • packages/core-ui/js/gui_components/options_panels/options-php-panel.js
  • packages/core-ui/src/tests/utils/options-java-panel.test.js
  • packages/core-ui/src/tests/utils/options-csv-delimited-controls.test.js
  • packages/core-ui/js/gui_components/options_panels/html-options-data-utils.js
  • packages/core-ui/src/tests/utils/options-csharp-panel.test.js
  • apps/web/src/stories/export-preview-story-harness.js
✅ Files skipped from review due to trivial changes (9)
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/xml-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/dsv-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/markdown-definition.js
  • packages/core-ui/src/tests/shared/format-option-panel-definition.test.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/base/csv-definition.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/code/kotlin-definition.js
  • docs/frontend-component-architecture.md
  • apps/web/src/stories/format-option-panel-basic.stories.js
  • docs/frontend-legacy-ui-elimination-plan.md

@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: 1

🤖 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 `@packages/core-ui/src/tests/app/import-export-workspace-services.test.js`:
- Line 107: Replace the flaky last-call assertion with a never-emitted
assertion: in the test that references setImportStatus (in
import-export-workspace-services.test.js), change the assertion using
not.toHaveBeenLastCalledWith('Import complete.', false) to
not.toHaveBeenCalledWith('Import complete.', false) so the test guarantees that
the exact status tuple was never emitted at any point (locate the expect call
referencing setImportStatus and update the matcher accordingly).
🪄 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 Plus

Run ID: ebaabb6f-939e-4a7d-8c28-cee680081bd4

📥 Commits

Reviewing files that changed from the base of the PR and between 361d498 and 26d96b6.

📒 Files selected for processing (10)
  • apps/web/src/stories/export-preview-story-harness.js
  • docs/frontend-component-migration-plan.md
  • packages/core-ui/js/gui_components/app/import-export-toolbar/import-export-toolbar-view.js
  • packages/core-ui/js/gui_components/app/import-export-workspace/import-export-workspace-services.js
  • packages/core-ui/js/gui_components/app/import-export-workspace/index.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/format-option-panel-definition-shared.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/format-option-panel-definition.js
  • packages/core-ui/src/tests/app/import-export-workspace-services.test.js
  • packages/core-ui/src/tests/app/import-export-workspace.test.js
  • packages/core-ui/src/tests/shared/format-option-panel-definition.test.js
✅ Files skipped from review due to trivial changes (1)
  • docs/frontend-component-migration-plan.md
🚧 Files skipped from review as they are similar to previous changes (7)
  • packages/core-ui/src/tests/app/import-export-workspace.test.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/format-option-panel-definition-shared.js
  • packages/core-ui/js/gui_components/app/import-export-toolbar/import-export-toolbar-view.js
  • packages/core-ui/js/gui_components/app/import-export-workspace/import-export-workspace-services.js
  • packages/core-ui/js/gui_components/shared/format-options-panel/format-option-panel-definition.js
  • packages/core-ui/js/gui_components/app/import-export-workspace/index.js
  • apps/web/src/stories/export-preview-story-harness.js

Comment thread packages/core-ui/src/tests/app/import-export-workspace-services.test.js Outdated
@eviltester eviltester merged commit 88568ba into master Jun 4, 2026
14 checks passed
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.

continue refactoring ui into components

2 participants