Skip to content

Conversation

@hotzenklotz
Copy link
Member

@hotzenklotz hotzenklotz commented Dec 17, 2025

This PR does a few things to the skeleton, comment and segments view:

  • Remove outdated skeleton name input
    • Move the remaining next/previous tree buttons into the other button group
  • Replace most fontawesome icon with antd icons for consistency, matching line width etc
  • Switch the segments view icon "buttons" into a antd button group for consistency between the 3 tabs
Screenshot 2025-12-17 at 15 09 58 Screenshot 2025-12-17 at 15 10 07 Screenshot 2025-12-17 at 15 10 17 Screenshot 2025-12-17 at 15 10 34

URL of deployed dev instance (used for testing):

  • https://___.webknossos.xyz

Steps to test:

  • Create a new annotation
  • Review the layout of the buttons in the skeleton, comments and segments tab
  • Resize right-side pane etc

Issues:


(Please delete unneeded items, merge only when none are left open)

  • Added changelog entry (create a $PR_NUMBER.md file in unreleased_changes or use ./tools/create-changelog-entry.py)
  • Added migration guide entry if applicable (edit the same file as for the changelog)
  • Updated documentation if applicable
  • Adapted wk-libs python client if relevant API parts change
  • Removed dev-only changes like prints and application.conf edits
  • Considered common edge cases
  • Needs datastore update after deployment

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Dec 17, 2025

📝 Walkthrough

Walkthrough

Refactors right-border tab UIs to use Ant Design icons and a simplified ButtonComponent API, migrates several layouts from class-based compact styles to Space.Compact block, updates related CSS, and removes two skeleton-tracing accessor exports. (49 words)

Changes

Cohort / File(s) Change Summary
Advanced search status & nav
frontend/javascripts/viewer/view/right-border-tabs/advanced_search_popover.tsx
Replaced input addon status with an always-present disabled ButtonComponent; removed compact-* class usage and addon rendering; moved navigation handlers to ButtonComponent onClick.
Comment tab sort control
frontend/javascripts/viewer/view/right-border-tabs/comment_tab/comment_tab_view.tsx
Replaced helper-based icon rendering with Ant Design SortAscendingOutlined/SortDescendingOutlined via icon prop; switched Space.Compact to block prop and changed activeComment retrieval to direct accessor.
Connectome tab layout migration
frontend/javascripts/viewer/view/right-border-tabs/connectome_tab/connectome_view.tsx
Switched Space.Compact usage from class-based compact-icons to using block prop (layout-only change).
Segments tab buttons & spacing
frontend/javascripts/viewer/view/right-border-tabs/segments_tab/segments_view.tsx
Replaced inline icons/tooltips with ButtonComponent instances (Refresh, Add, Loading, Settings); migrated SpaceSpace.Compact; removed Select size="small"; adjusted button states and labels.
Trees/skeleton tab icons & accessors
frontend/javascripts/viewer/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx
Replaced FontAwesome with Ant Design icons and ButtonComponent icon props; adjusted Space.Compact to block; removed usage and export of getActiveTree and getActiveTreeGroup from skeletontracing accessor.
Right-menu stylesheet updates
frontend/stylesheets/trace_view/_right_menu.less
Removed .compact-items / .compact-icons rules; hide .anticon-edit & .anticon-ellipsis by default (show on hover); added hover highlight and spacing/wrapping refinements.
ButtonComponent API simplification
frontend/javascripts/viewer/view/components/button_component.tsx
Removed faIcon prop and all icon-rendering branches; always renders an Antd Button (keeps blur + onClick handling and optional tooltip); updated ButtonComponentProps type.
Markdown modal control
frontend/javascripts/viewer/view/components/markdown_modal.tsx
Converted textarea to controlled state synchronized via useEffect; changed modal title/OK button text and added destroyOnHidden; minor JSX/import adjustments.

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~50 minutes

Possibly related PRs

Suggested labels

css, enhancement

Suggested reviewers

  • philippotto
  • knollengewaechs

Poem

🐰
I hopped where icons once did dwell,
Swapped little fonts for Ant Design bells,
Compact rules faded, buttons in bloom,
Accessors pruned—there’s room in the room! ✨

🚥 Pre-merge checks | ✅ 2 | ❌ 1
❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The PR title directly matches the primary objective of removing the outdated skeleton name input, which is confirmed as the first bullet point in the description.
Description check ✅ Passed The PR description comprehensively explains all changes: skeleton name input removal, button reorganization, FontAwesome to antd icon replacement, and segments view button group conversion.

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

✨ Finishing touches
  • 📝 Generate docstrings

📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 9ab51da and 6729c31.

📒 Files selected for processing (2)
  • frontend/javascripts/viewer/view/components/markdown_modal.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/comment_tab/comment_tab_view.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • frontend/javascripts/viewer/view/right-border-tabs/comment_tab/comment_tab_view.tsx
🧰 Additional context used
🧠 Learnings (6)
📓 Common learnings
Learnt from: hotzenklotz
Repo: scalableminds/webknossos PR: 9117
File: frontend/javascripts/viewer/view/nml_upload_zone_container.tsx:186-186
Timestamp: 2025-12-04T14:12:26.493Z
Learning: For Ant Design v6 component API documentation and migration guidance, use https://ant.design/llms-full.txt as the authoritative source. This llms-full.txt file contains the official v6 component APIs, including deprecated props and their replacements.
📚 Learning: 2025-09-04T10:01:56.727Z
Learnt from: knollengewaechs
Repo: scalableminds/webknossos PR: 8895
File: frontend/javascripts/viewer/view/action_bar_view.tsx:0-0
Timestamp: 2025-09-04T10:01:56.727Z
Learning: In frontend/javascripts/viewer/view/action_bar_view.tsx, knollengewaechs prefers not to use onKeyUpCapture for preventing modal close on modifier keys because: 1) holding ctrl while opening modal will still close on keyup, 2) normal case of opening modal then pressing ctrl doesn't cause issues with just onKeyDownCapture.

Applied to files:

  • frontend/javascripts/viewer/view/components/markdown_modal.tsx
📚 Learning: 2025-12-11T15:25:53.526Z
Learnt from: knollengewaechs
Repo: scalableminds/webknossos PR: 9117
File: frontend/javascripts/admin/statistic/time_tracking_overview.tsx:261-279
Timestamp: 2025-12-11T15:25:53.526Z
Learning: Ant Design v6 Select: when using the Select component, consider supplying a prefix prop to render an icon or element before the input for better visual context. Apply this guideline to TS and TSX files across the codebase where Ant Design Select is used; ensure prefix usage is accessible (e.g., provide meaningful aria-label if needed) and avoid unnecessary prefixes on simple inputs.

Applied to files:

  • frontend/javascripts/viewer/view/components/markdown_modal.tsx
📚 Learning: 2025-12-11T15:33:06.880Z
Learnt from: knollengewaechs
Repo: scalableminds/webknossos PR: 9117
File: frontend/javascripts/admin/task/task_search_form.tsx:151-151
Timestamp: 2025-12-11T15:33:06.880Z
Learning: In Ant Design v6, do not use optionFilterProp as a standalone prop on Select. Instead, pass it inside showSearch as optionFilterProp, e.g. showSearch={{ optionFilterProp: 'label' }}. showSearch accepts boolean or an object with keys like optionFilterProp, filterOption, autoClearSearchValue. Update all Select components that use optionFilterProp to adopt the new pattern and adjust types accordingly to maintain compatibility and avoid deprecation warnings.

Applied to files:

  • frontend/javascripts/viewer/view/components/markdown_modal.tsx
📚 Learning: 2025-12-18T13:11:55.113Z
Learnt from: hotzenklotz
Repo: scalableminds/webknossos PR: 9156
File: frontend/javascripts/dashboard/dataset/dataset_settings_data_tab.tsx:10-10
Timestamp: 2025-12-18T13:11:55.113Z
Learning: Guideline: When using Ant Design's Flex component in this repository, the align prop accepts standard CSS flexbox values such as 'flex-start', 'flex-end', 'center', 'baseline', and 'stretch'. These map directly to the CSS align-items property. Do not propose or implement changes to use 'end'/'start' for Ant Design Flex components; continue using the standard CSS values (e.g., 'flex-start' and 'flex-end') to ensure correct alignment behavior.

Applied to files:

  • frontend/javascripts/viewer/view/components/markdown_modal.tsx
📚 Learning: 2025-12-11T15:54:47.778Z
Learnt from: knollengewaechs
Repo: scalableminds/webknossos PR: 9117
File: frontend/javascripts/dashboard/advanced_dataset/dataset_table.tsx:131-134
Timestamp: 2025-12-11T15:54:47.778Z
Learning: In Ant Design v6, Dropdown uses a flat classNames structure: classNames={{ root: '…' }}. Other components (Select, AutoComplete, Cascader, TreeSelect) use a nested structure. The deprecated overlayClassName prop for Dropdown should be replaced with classNames.root. In reviews, flag Dropdown usage that relies on overlayClassName and replace it with classNames={{ root: '…' }}. If you encounter related components, verify the correct classNames shape (flat for Dropdown, nested for others) and update accordingly. This guideline covers TSX files under the frontend codebase where Ant Design components are used.

Applied to files:

  • frontend/javascripts/viewer/view/components/markdown_modal.tsx
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: backend-tests
  • GitHub Check: build-smoketest-push
🔇 Additional comments (7)
frontend/javascripts/viewer/view/components/markdown_modal.tsx (7)

3-4: LGTM! React imports updated to best practices.

The change to a type-only import for React and the addition of the necessary hooks (Fragment, useEffect, useState) align with modern React patterns and support the controlled component refactor.


32-36: Controlled component pattern implemented correctly.

The state management with useState and useEffect properly synchronizes the internal state with the source prop. Note that if source changes while the modal is open and a user is actively editing, their edits will be overwritten. This is likely acceptable given the typical usage pattern (modal opens → user edits → confirms/cancels → modal closes).


52-52: LGTM! Modal title simplified.

Replacing the nested span with a template string is cleaner and more maintainable.


58-60: LGTM! Button improvements enhance UX.

Adding type="primary" provides appropriate visual emphasis for the confirmation action, and "OK" is more semantically correct than the previous label.


66-74: LGTM! Fragment usage is correct.

Wrapping the Alert title content in a Fragment is proper React JSX pattern for grouping multiple elements.


84-92: LGTM! TextArea now properly controlled.

Changing from defaultValue to value completes the controlled component pattern, enabling the real-time markdown preview to update as the user types. This works correctly with the state management established earlier.


62-62: Replace destroyOnHidden with destroyOnClose.

The destroyOnHidden prop does not exist in Ant Design v6 Modal. Use destroyOnClose instead to unmount the modal content when it closes.

⛔ Skipped due to learnings
Learnt from: hotzenklotz
Repo: scalableminds/webknossos PR: 9117
File: frontend/javascripts/viewer/view/nml_upload_zone_container.tsx:186-186
Timestamp: 2025-12-04T14:12:26.493Z
Learning: For Ant Design v6 component API documentation and migration guidance, use https://ant.design/llms-full.txt as the authoritative source. This llms-full.txt file contains the official v6 component APIs, including deprecated props and their replacements.
Learnt from: hotzenklotz
Repo: scalableminds/webknossos PR: 9117
File: frontend/javascripts/viewer/view/nml_upload_zone_container.tsx:186-186
Timestamp: 2025-12-04T13:41:44.919Z
Learning: In Ant Design v6, the Alert component's `message` prop has been deprecated and replaced by `title`. When migrating from v5 to v6, Alert components should use `title` for the main content (and optionally `description` for additional details).
Learnt from: knollengewaechs
Repo: scalableminds/webknossos PR: 9117
File: frontend/javascripts/admin/task/task_search_form.tsx:151-151
Timestamp: 2025-12-11T15:33:11.738Z
Learning: In Ant Design v6, the Select component's `optionFilterProp` prop is deprecated as a standalone prop. Instead, it should be passed as part of the `showSearch` object: `showSearch={{ optionFilterProp: "label" }}`. The `showSearch` prop accepts either a boolean or an object containing properties like `optionFilterProp`, `filterOption`, `autoClearSearchValue`, etc.

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.

@hotzenklotz hotzenklotz self-assigned this Dec 17, 2025
Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

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

⚠️ Outside diff range comments (1)
frontend/stylesheets/trace_view/_right_menu.less (1)

84-90: Complete the Space.Compact migration in comment_tab_view.tsx.

The CSS changes at lines 84-90 and 139-149 correctly support the Space.Compact migration. However, the migration is incomplete: frontend/javascripts/viewer/view/right-border-tabs/comment_tab/comment_tab_view.tsx:456 still uses the old className-based pattern (<Space.Compact className="compact-items compact-icons">) without the block prop. This usage must be updated to align with the migration pattern shown in skeleton_tab_view.tsx.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 4dd772e and e42e9de.

📒 Files selected for processing (6)
  • frontend/javascripts/viewer/view/right-border-tabs/advanced_search_popover.tsx (1 hunks)
  • frontend/javascripts/viewer/view/right-border-tabs/comment_tab/comment_tab_view.tsx (2 hunks)
  • frontend/javascripts/viewer/view/right-border-tabs/connectome_tab/connectome_view.tsx (1 hunks)
  • frontend/javascripts/viewer/view/right-border-tabs/segments_tab/segments_view.tsx (4 hunks)
  • frontend/javascripts/viewer/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx (7 hunks)
  • frontend/stylesheets/trace_view/_right_menu.less (12 hunks)
🧰 Additional context used
🧠 Learnings (8)
📚 Learning: 2025-12-11T15:25:53.526Z
Learnt from: knollengewaechs
Repo: scalableminds/webknossos PR: 9117
File: frontend/javascripts/admin/statistic/time_tracking_overview.tsx:261-279
Timestamp: 2025-12-11T15:25:53.526Z
Learning: Ant Design v6 Select: when using the Select component, consider supplying a prefix prop to render an icon or element before the input for better visual context. Apply this guideline to TS and TSX files across the codebase where Ant Design Select is used; ensure prefix usage is accessible (e.g., provide meaningful aria-label if needed) and avoid unnecessary prefixes on simple inputs.

Applied to files:

  • frontend/javascripts/viewer/view/right-border-tabs/comment_tab/comment_tab_view.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/advanced_search_popover.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/connectome_tab/connectome_view.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/segments_tab/segments_view.tsx
📚 Learning: 2025-12-11T15:33:06.880Z
Learnt from: knollengewaechs
Repo: scalableminds/webknossos PR: 9117
File: frontend/javascripts/admin/task/task_search_form.tsx:151-151
Timestamp: 2025-12-11T15:33:06.880Z
Learning: In Ant Design v6, do not use optionFilterProp as a standalone prop on Select. Instead, pass it inside showSearch as optionFilterProp, e.g. showSearch={{ optionFilterProp: 'label' }}. showSearch accepts boolean or an object with keys like optionFilterProp, filterOption, autoClearSearchValue. Update all Select components that use optionFilterProp to adopt the new pattern and adjust types accordingly to maintain compatibility and avoid deprecation warnings.

Applied to files:

  • frontend/javascripts/viewer/view/right-border-tabs/comment_tab/comment_tab_view.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/advanced_search_popover.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/connectome_tab/connectome_view.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/segments_tab/segments_view.tsx
📚 Learning: 2025-12-11T15:54:47.778Z
Learnt from: knollengewaechs
Repo: scalableminds/webknossos PR: 9117
File: frontend/javascripts/dashboard/advanced_dataset/dataset_table.tsx:131-134
Timestamp: 2025-12-11T15:54:47.778Z
Learning: In Ant Design v6, Dropdown uses a flat classNames structure: classNames={{ root: '…' }}. Other components (Select, AutoComplete, Cascader, TreeSelect) use a nested structure. The deprecated overlayClassName prop for Dropdown should be replaced with classNames.root. In reviews, flag Dropdown usage that relies on overlayClassName and replace it with classNames={{ root: '…' }}. If you encounter related components, verify the correct classNames shape (flat for Dropdown, nested for others) and update accordingly. This guideline covers TSX files under the frontend codebase where Ant Design components are used.

Applied to files:

  • frontend/javascripts/viewer/view/right-border-tabs/comment_tab/comment_tab_view.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/advanced_search_popover.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/connectome_tab/connectome_view.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/segments_tab/segments_view.tsx
📚 Learning: 2025-08-14T14:12:03.293Z
Learnt from: hotzenklotz
Repo: scalableminds/webknossos PR: 8849
File: frontend/javascripts/viewer/view/action-bar/ai_job_modals/components/collapsible_split_merger_evaluation_settings.tsx:39-51
Timestamp: 2025-08-14T14:12:03.293Z
Learning: Since Ant Design version 5.18, Form.Item components support the layout prop (layout="horizontal", layout="vertical", etc.), allowing individual form items to override the parent Form's layout setting. This is a newer API addition that provides more granular control over form item layouts.

Applied to files:

  • frontend/stylesheets/trace_view/_right_menu.less
📚 Learning: 2025-08-14T14:12:03.293Z
Learnt from: hotzenklotz
Repo: scalableminds/webknossos PR: 8849
File: frontend/javascripts/viewer/view/action-bar/ai_job_modals/components/collapsible_split_merger_evaluation_settings.tsx:39-51
Timestamp: 2025-08-14T14:12:03.293Z
Learning: Since Ant Design version 5.18, Form.Item components support the layout prop (layout="horizontal", layout="vertical", layout="inline"), allowing individual form items to override the parent Form's layout setting. This enables mixed layouts within a single form and was added as a new API feature in v5.18 according to the official changelog.

Applied to files:

  • frontend/stylesheets/trace_view/_right_menu.less
📚 Learning: 2025-12-11T15:25:53.526Z
Learnt from: knollengewaechs
Repo: scalableminds/webknossos PR: 9117
File: frontend/javascripts/admin/statistic/time_tracking_overview.tsx:261-279
Timestamp: 2025-12-11T15:25:53.526Z
Learning: Ant Design v6 Select component supports the `prefix` prop for displaying an icon or element before the selector input.

Applied to files:

  • frontend/stylesheets/trace_view/_right_menu.less
📚 Learning: 2025-12-08T09:02:43.473Z
Learnt from: hotzenklotz
Repo: scalableminds/webknossos PR: 9117
File: frontend/javascripts/admin/voxelytics/task_list_view.tsx:691-700
Timestamp: 2025-12-08T09:02:43.473Z
Learning: In Ant Design v6, Select (and similar components like AutoComplete, Cascader, TreeSelect) use a nested semantic DOM structure for styles and classNames. The correct pattern is `styles={{ popup: { root: { ... } } }}` or `classNames={{ popup: { root: "..." } }}`, NOT a flat structure. This is the official v6 API for targeting semantic parts of these components.

Applied to files:

  • frontend/stylesheets/trace_view/_right_menu.less
  • frontend/javascripts/viewer/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx
  • frontend/javascripts/viewer/view/right-border-tabs/segments_tab/segments_view.tsx
📚 Learning: 2025-07-15T13:15:37.856Z
Learnt from: knollengewaechs
Repo: scalableminds/webknossos PR: 8689
File: frontend/javascripts/viewer/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx:796-804
Timestamp: 2025-07-15T13:15:37.856Z
Learning: In the WebKnossos codebase, the activeTreeId in skeleton tracing can become null when the active tree is deleted, during initialization, or when trees are deselected via deselectActiveTreeAction. The constructor of SkeletonTabView already handles this null case by setting selectedTreeIds to an empty array.

Applied to files:

  • frontend/javascripts/viewer/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx
🧬 Code graph analysis (2)
frontend/javascripts/viewer/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx (1)
frontend/javascripts/viewer/view/right-border-tabs/advanced_search_popover.tsx (1)
  • AdvancedSearchPopover (27-229)
frontend/javascripts/viewer/view/right-border-tabs/segments_tab/segments_view.tsx (1)
frontend/javascripts/viewer/model/actions/annotation_actions.ts (1)
  • maybeFetchMeshFilesAction (240-254)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (2)
  • GitHub Check: build-smoketest-push
  • GitHub Check: backend-tests
🔇 Additional comments (9)
frontend/javascripts/viewer/view/right-border-tabs/advanced_search_popover.tsx (1)

187-200: LGTM! Consistent UI refactor to ButtonComponent.

The changes successfully migrate the search navigation UI to use ButtonComponent throughout, replacing the previous addonAfter status display with a dedicated disabled button. The functionality is preserved while achieving better visual consistency across the right-border tabs.

frontend/stylesheets/trace_view/_right_menu.less (1)

37-62: LGTM! CSS updates support the ButtonComponent migration.

The changes to icon visibility (hide by default, show on hover) and hover state styling align with the broader UI refactor that moves to ButtonComponent-based controls. The addition of .is-hovered-segment background highlighting improves visual feedback.

frontend/javascripts/viewer/view/right-border-tabs/connectome_tab/connectome_view.tsx (1)

756-783: LGTM! Space.Compact block prop migration.

The addition of the block prop to Space.Compact aligns with the broader refactor across right-border-tabs. This ensures consistent block-level rendering without relying on CSS classes.

frontend/javascripts/viewer/view/right-border-tabs/comment_tab/comment_tab_view.tsx (1)

508-514: LGTM! Clean migration to Ant Design sort icons.

The Sort button now uses the icon prop with conditional rendering (SortAscendingOutlined vs SortDescendingOutlined), replacing the previous custom icon rendering logic. This aligns with the broader icon migration to Ant Design across the right-border tabs.

frontend/javascripts/viewer/view/right-border-tabs/segments_tab/segments_view.tsx (2)

997-1049: LGTM! Comprehensive ButtonComponent migration for mesh controls.

The mesh header controls have been successfully migrated to use ButtonComponent wrappers throughout:

  • Refresh button uses icon={<ReloadOutlined />}
  • Add mesh button wrapped in Popover
  • Loading state displays via ButtonComponent with LoadingOutlined
  • Settings button wrapped in Popover with SettingOutlined

This creates a consistent button-based interaction surface that aligns with the UI standardization across other right-border tabs.


856-871: LGTM! Space.Compact usage for search and mesh controls.

The layout now uses Space.Compact to group the search button and mesh header controls, providing consistent spacing and alignment. This matches the pattern used in other right-border tabs (connectome, comment, skeleton).

frontend/javascripts/viewer/view/right-border-tabs/trees_tab/skeleton_tab_view.tsx (3)

919-974: LGTM! Comprehensive UI migration to Ant Design icons and Space.Compact block.

The skeleton tab UI has been successfully updated:

  • Space.Compact now uses block prop with compact-wrap className
  • Most buttons migrated to Ant Design icons via icon prop
  • Navigation buttons (ArrowLeftOutlined, ArrowRightOutlined) replace previous implementation
  • Sort dropdown uses SortAscendingOutlined
  • Action buttons (PlusOutlined, DeleteOutlined, SearchOutlined) standardized

Note: Lines 950 and 956 still use FontAwesome icons (fa-toggle-on, fa-toggle-off) for the toggle visibility buttons. This is acceptable if these specific icons don't have direct Ant Design equivalents or if the migration is intentionally phased.


784-784: LGTM! Consistent icon usage in dropdown and notification.

The actions dropdown and notification now use Ant Design icons (SwapOutlined, ArrowsAltOutlined) consistently with the button bar updates. This ensures visual consistency across all UI surfaces in the skeleton tab.

Also applies to: 832-832, 847-847


34-38: Remove incorrect claim about export removal.

The imports no longer include getActiveTree and getActiveTreeGroup from skeletontracing_accessor—verified these functions are not used in skeleton_tab_view.tsx. However, these functions are still exported from skeletontracing_accessor.ts (lines 82, 95), so the statement that they were "removed from public exports" is incorrect. The import removal is appropriate for this file's refactoring.

import React from "react";

type ButtonComponentProps = ButtonProps & {
faIcon?: string;
Copy link
Member Author

Choose a reason for hiding this comment

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

I did not find any usages of the faIcon prop

function renderSortIcon() {
const sortAsc = isSortedAscending;
const sortNumeric = sortBy === SortByEnum.ID;
const iconClass = `fas fa-sort-${sortNumeric ? "numeric" : "alpha"}-${sortAsc ? "down" : "up"}`;
Copy link
Member Author

Choose a reason for hiding this comment

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

While this detailed icon switch is nice, I feel like it does not add much value. Antd does not have separate icons for sorting text and numbers so I simplified it to just asc/desc sorting.

</Popover>
</FastTooltip>
<ButtonComponent
title="Refresh list of available Mesh files"
Copy link
Member Author

Choose a reason for hiding this comment

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

A <ButtonComponent> is already wrapped with a FastTooltip if using the title prop.

Copy link
Member

@philippotto philippotto left a comment

Choose a reason for hiding this comment

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

overall looks good 👍 thanks for doing this. I noticed one problem during testing (however, it is already a bug on the master apparently):

when adding a comment to a skeleton node and opening the markdown modal, the text box in the modal is empty. in general, the modal text box isn't properly synced.

if you feel like it, have a look whether you can fix it in this PR. however, it's not blocking this PR.

@hotzenklotz
Copy link
Member Author

when adding a comment to a skeleton node and opening the markdown modal, the text box in the modal is empty. in general, the modal text box isn't properly synced.

I had a look into this and fixed the issue as well. see commit
6729c31

@philippotto
Copy link
Member

excellent :shipit:

@hotzenklotz hotzenklotz merged commit 06591f9 into master Jan 8, 2026
5 checks passed
@hotzenklotz hotzenklotz deleted the remove-skeleton-input branch January 8, 2026 13:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants