Skip to content

Component Directory

All components live under foundation/static/main/src/components/. Each feature area has its own directory with an optional __tests__/ subdirectory.


Legacy lens card grid. Shows all accessible lenses as cards with issue counts, sync agent counts, and relative timestamps. Supports hover-to-prefetch (calls prefetchLensView on mouseenter). Includes rename/delete/share kebab menus.

Replacement for LensList — a two-pane layout with a sidebar listing lenses and a preview pane showing stats, collaborators, and recent activity for the selected lens. Also contains RenameDialog and DeleteDialog modal components.

The main orchestrator component. Owns all data state for the active lens and delegates rendering to sub-components. Decomposed into 12+ custom hooks in pages/lens-view/:

HookResponsibility
useLensContextBootstrapLoad field metadata, priorities, user prefs, admin status
useLensDataLoaderFetch lens data, manage nodes/views/syncAgents state
useLensViewDraftTrack view configuration (columns, density, formatting, pipeline) with dirty/save/revert
useLensDialogStateBoolean state for all dialog/overlay open states
useLensIncrementalSyncRealtime and manual refresh — incremental node diffing
useLensRealtimeControllerForge Realtime subscription setup and teardown
useLensSchedulingControllerAuto-schedule engine coordination
useLensSelectionRow selection state and multi-select operations
useLensInspectorStateInspector panel open/close, section expand/collapse
useLensExportCSV and timeline export logic
useLensCreateControllerInline issue creation queue and state

Sub-components in pages/lens-view/:

  • LensViewMainPane — grid + Gantt split-pane layout
  • LensViewInspector — inspector panel with all sections
  • LensViewOverlays — dialogs, modals, command palette, tour

Lazy-loaded admin dashboard for feature flags and monitoring.


The largest and most complex component directory. Contains the AG Grid wrapper and all supporting renderers.

The core grid component. A forwardRef component exposing HierarchyGridHandle for imperative operations. Key responsibilities:

  • Converts HierarchyNode[] into flat rows via buildFlatRows() (depth-first tree walk)
  • Builds AG Grid ColDef[] via buildColumnDefs() from columns.tsx
  • Registers 20+ inline cell editors (TextEditor, StatusDropdown, AssigneePicker, etc.)
  • Manages row selection, context menus, insert lines, and inline create panels
  • Applies conditional formatting rules via evaluateRowRules()
  • Executes the pipeline engine (sort/group/filter) via executePipeline()
  • Handles column resize, reorder, wrap toggle, and header sort
  • Coordinates with Gantt for row height synchronization

Key exported function:

export function buildFlatRows(nodes: HierarchyNode[]): FlatRow[]

Converts the backend’s breadth-first node array into a depth-first tree-walk order using treeWalkOrder(). This ordering is critical — any component rendering content aligned with grid rows must use the same depth-first ordering.

Props interface: ~50 props covering data, callbacks, display configuration, filtering, pipeline, and animation state.

Builds AG Grid column definitions. The buildColumnDefs() function maps ColumnConfig[] to AG Grid ColDef[], handling:

  • Summary column with indentation, expand/collapse chevrons, issue type icons, and description subtitles
  • Field-specific renderers (status lozenges, priority icons, user avatars, date formatting, progress bars)
  • Custom field type detection and editor assignment
  • Column header menu integration

Per-column dropdown menu with sort, wrap text, hide column, icon toggle, and column filter options. Uses position: fixed with viewport clamping.

Custom cell renderer for the summary column. Renders the hierarchical tree structure with:

  • Depth-based indentation
  • Expand/collapse chevrons
  • Issue type icons (colored SVGs from issueTypeIcons.tsx)
  • Flex item / milestone visual indicators
  • Description subtitle (stacked below the summary text)
  • Selection checkboxes and drag handles
FilePurpose
AssigneeCellRenderer.tsxAvatar display (name, initials, or avatar image based on display mode)
StatusCellRenderer.tsxStatus lozenge with category-based coloring
DateCellRenderer.tsxFormatted date with overdue/upcoming highlighting
DateTimeRenderer.tsxDate+time display
RichTextRenderer.tsxADF (Atlassian Document Format) to HTML
IssueLinkRenderer.tsxIssue link badges
UserCard.tsxAssignee card (name + initials + avatar variants)
ProgressCellRenderer.tsxProgress bar (resolution, status category, story points, or custom percent)
RollupRenderer.tsxAggregate/rollup values for parent rows
OptionLozengeRenderer.tsxGeneric option lozenge (select field values)
UrlLinkRenderer.tsxClickable URL links
FlagIconRenderer.tsxFlagged/impediment icon
TimeTrackingRenderer.tsxTime tracking display (original/remaining/logged)
NameLozengeRenderer.tsxName-based lozenge (components, versions)
CustomUserRenderer.tsxCustom user field display
AttachmentRenderer.tsxAttachment count/indicator
FilePurpose
WrapRowRenderer.tsxRow wrapper for wrap-text mode (variable row heights)
ContextMenu.tsxRight-click context menu (indent, outdent, delete, insert, view detail)
InsertLine.tsxVisual insert indicator between rows for drag operations
InlineCreatePanel.tsxInline issue creation form that appears between grid rows
QuickAddRow.tsxQuick-add row at the bottom of the grid
EmptyLensState.tsxEmpty state with import/create guidance
SumsBar.tsxSummary bar showing totals (story points, issue count)
progress.tsProgress computation (4 modes: resolution, status, story points, percent)
rollups.tsRecursive rollup aggregation for parent nodes
statusUtils.tsStatus category color mapping
depthResolution.tsIndent/outdent depth resolution logic
gridConstants.tsGrid configuration constants
chips/Chip sub-components (labels, versions, components)

The second-largest component directory. Implements a timeline/Gantt chart visualization synchronized with the grid.

The main Gantt component. Renders a scrollable timeline with:

  • Time-scaled headers (day/week/month/quarter)
  • Horizontal bars for issues with start/end dates
  • Milestone diamonds for milestone nodes
  • Dependency arrows between linked issues
  • Group rollup brackets
  • Resource capacity indicators
  • Bar drag for date editing
  • Dependency drag-to-link

Individual Gantt bar renderer. Supports:

  • Configurable bar colors (by status, priority, issue type, or custom formatting)
  • Bar labels (headline + subhead)
  • Bar icons (issue type, priority, status, assignee avatar)
  • Progress fill
  • Drag handles for start/end date adjustment
  • Dependency connection handles
  • Critical path highlighting
FilePurpose
ganttData.tsextractGanttItems() — converts nodes to Gantt items using tree-walk ordering
types.tsGanttItem, GanttConfig, TimeScale, DependencyEdge, and 20+ type definitions
constants.tsScale constants, color palettes, dimension constants
gantt-tokens.tsDesign token mapping for Gantt-specific colors
useGanttLayout.tsLayout computation (column widths, date ranges, pixel positions)
useBarDrag.tsBar drag-and-drop for date editing with snap-to-grid
useDependencyDrag.tsDependency arrow creation via drag
useScrollSync.tsSynchronized scrolling between grid and Gantt
useGanttUndo.tsUndo/redo for Gantt date changes
useSmartNudge.tsSmart nudge for overlapping bars
useScheduleLog.tsSchedule change logging
rowGeometry.tsRow Y-position calculation (must match grid row order)
dateUtils.tsDate math (working days, date ranges, scale snapping)
labelUtils.tsBar label formatting
FilePurpose
DependencyArrowLayer.tsxSVG arrow rendering for issue dependencies
dependencyUtils.tsDependency graph utilities (cycle detection, path finding)
criticalPath.tsCritical path calculation (longest dependency chain)
scheduleEngine.tsAuto-scheduling engine (forward/backward pass)
resourceLeveling.tsResource leveling algorithm
resourceUtils.tsResource availability computation
cascadeEngine.tsDate cascade propagation (parent/child date changes)
CascadeNotification.tsxUI notification for cascading date changes
cascadeTypes.tsCascade operation type definitions
FilePurpose
GanttConfigPanel.tsxGantt configuration panel (scale, date fields, color mode)
GanttFormattingPanel.tsxGantt-specific conditional formatting rules
GanttResourcePanel.tsxResource workload panel
GanttMilestone.tsxDiamond milestone marker
GanttPointMarker.tsxPoint-in-time marker (single-date items)
GanttTimeHeader.tsxTime scale header (day/week/month/quarter labels)
GanttTooltip.tsxHover tooltip for bars
GanttDivider.tsxResizable divider between grid and Gantt
GroupBoundingBoxLayer.tsxVisual grouping boundaries
BarIcon.tsxIcon renderer inside Gantt bars
DragDateBadges.tsxDate badges shown during bar drag
DragToLinkOverlay.tsxVisual overlay during dependency drag creation
SaveStatusIndicator.tsxAuto-save status indicator
ZoomControls.tsxTimeline zoom in/out buttons
LevelingPanel.tsxResource leveling control panel
SkillsPanel.tsxSkills/capabilities panel
PlaceholderPanel.tsxPlaceholder resource panel
CapacityDetailPopup.tsxResource capacity detail popup
CrossStructureWorkloadView.tsxCross-lens workload aggregation view

All AG Grid cell editors. Each editor implements AG Grid’s cell editor interface via useGridCellEditor({}). See Inline Editing for the full system documentation.

EditorField TypeUI Pattern
TextEditor.tsxSummary, text fields<input> with focus/select on mount
NumberInput.tsxStory points, numeric<input type="number">
DatePicker.tsxDue date, start dateCalendar <input type="date">
DateTimePicker.tsxDateTime custom fieldsDate + time inputs
StatusDropdown.tsxStatus<select> with Jira transitions
PriorityDropdown.tsxPriority<select> with priorities
AssigneePicker.tsxAssigneeSearch input + avatar dropdown
ReporterPicker.tsxReporterSearch input + user dropdown
SprintDropdown.tsxSprint<select> with active/future sprints
LabelsEditor.tsxLabelsMulti-value tag input
SelectDropdown.tsxSingle-select custom<select> with field options
MultiSelectDropdown.tsxMulti-select customCheckbox list dropdown
CascadingSelectEditor.tsxCascading selectNested parent/child selects
OptionSelectEditor.tsxComplex select fieldsSearchable option picker
ComponentPicker.tsxJira componentsMulti-select component picker
VersionPicker.tsxFix versionsVersion picker
MultiVersionPicker.tsxMultiple versionsMulti-select version picker
GroupPicker.tsxUser groupsGroup picker
MultiGroupPicker.tsxMultiple groupsMulti-select group picker
CustomUserPicker.tsxCustom user fieldsUser search picker
MultiUserPicker.tsxMulti-user customMulti-user search picker
UrlTextEditor.tsxURL fieldsText input with URL validation
IssueLinkEditor.tsxIssue linksLink type + issue search
FlaggedToggleEditor.tsxFlagged/impedimentToggle editor

Main toolbar rendered above the grid. Contains:

  • Add menu (issue, flex item, milestone)
  • Sync agent controls
  • View switcher
  • Column picker
  • Sort/group menu
  • Timeline toggle
  • Density selector
  • Zoom controls
  • Search input
  • Fullscreen toggle
FilePurpose
ColumnPicker.tsxColumn visibility toggle with custom field support
CreateIssueButton.tsxIssue creation dropdown
LensSwitcherMenu.tsxQuick lens switching dropdown
QuickFilterBar.tsxQuick filter chips (status, assignee, priority, sprint, label)
SearchInput.tsxGrid search input with match count
SortGroupMenu.tsxSort and group configuration
TimelineConfigModal.tsxTimeline/Gantt configuration dialog
TimelineMenu.tsxTimeline toggle and scale selection

Right-side panel (320px, 280px in compact density) with collapsible accordion sections.

Panel shell with open/close toggle. When collapsed, shows an icon strip for quick section access. Props include section icons, active section highlighting, and expand/collapse all.

Toolbar rendered inside the inspector with section-specific controls.

Reusable collapsible section with sectionId, badge, defaultExpanded, and onToggle props. Stores expand/collapse state in localStorage keyed by foundation-{lensId}-{sectionId}.

FilePurpose
ColumnsSection.tsxColumn configuration and ordering
DisplaySection.tsxDensity, wrap rows, assignee display mode
ViewConfigSection.tsxView save/revert, view properties
TimelineSection.tsxGantt configuration (scale, date fields, colors, labels)
PreferencesSection.tsxUser preferences (new tab, date format)
ExportShareSection.tsxCSV export and sharing controls
ScheduleLogSection.tsxAuto-schedule change log
DebugSection.tsxDebug information (admin only)
MarketingCaptureSection.tsxMarketing screenshot capture

Rule builder dialog for conditional formatting. Users define rules with field, operator, value, and styling (background color, text color, scope, bold).

The formatting rule engine. Exports:

  • FormattingRule interface — rule definition with 18 operators
  • evaluateCondition(rule, row) — tests a single rule against a row
  • evaluateRowRules(rules, row) — returns combined styling for a row

Supports operators: equals, not_equals, contains, not_contains, is_empty, is_not_empty, greater_than, less_than, between, in_the_past, today, in_the_next_n_days, before, after, is_one_of, is_none_of, and more. Handles custom fields by parsing the custom_fields JSON blob.


FilePurpose
FilterPanel.tsxFull filter configuration panel
FilterBanner.tsxActive filter summary bar shown above grid
ColumnFilterDropdown.tsxPer-column filter dropdown in column headers

View tab bar for switching between saved views. Supports create, rename, delete, set default, and dirty indicator.


Visual pipeline builder for sort/group/filter operations that compose into a processing chain.

FilePurpose
PipelineStudio.tsxFull pipeline editor UI
PipelineSummary.tsxCompact summary of active pipeline operations
AddOperationMenu.tsxMenu to add sort/group/filter operations
OperationCard.tsxIndividual operation card (draggable, configurable)
FlowConnector.tsxVisual connector between pipeline steps
configs/Per-operation-type configuration forms

Custom hook wrapping @dnd-kit for tree node drag and drop. Handles:

  • Reparenting (drop on a node to make it a child)
  • Reordering (drop between nodes)
  • Visual drop indicators
  • Position calculation (gap=100 strategy)

FilePurpose
SyncAgentSection.tsxList of sync agents with execute/edit/delete controls
SyncAgentForm.tsxCreate/edit sync agent form (JQL query, type, parent node)

Permission management dialog. Lists current grants, allows adding users/groups/roles/everyone with permission levels (view, edit, control).


FilePurpose
ImportHub.tsxHub page with import options
ProjectPicker.tsxJira project search and selection for import
CsvImportWizard.tsxMulti-step CSV import wizard
BigPictureImport.tsxBigPicture app data import
StructureImport.tsxStructure app data import
ExportFileImport.tsxLens export file import
ImportSection.tsxReusable import section component

Template selection dialog for creating new lenses from predefined templates (e.g., Agile Board, Release Plan, Resource Plan).


FilePurpose
OnboardingWelcome.tsxWelcome dialog for first-time users
FirstLensTour.tsxGuided tour overlay for new lens creation
firstLensTourState.tsTour state management (queue, seen tracking)

FilePurpose
SelectBar.tsxMulti-select action bar (delete, move, change status/priority/assignee)
DeleteConfirmDialog.tsxBulk delete confirmation
selectBarUtils.tsSelection utilities (getDescendants, buildChildrenMap)

Dialog for bulk-adding multiple issues at once (by JQL or issue keys).


CommandPalette (src/components/CommandPalette/)

Section titled “CommandPalette (src/components/CommandPalette/)”

Cmd+K / Ctrl+K search overlay. Searches across issues, lenses, actions, and navigation targets.


Right-side panel showing full issue details when an issue is selected. Displays all fields, description, comments, and links.


Announcements (src/components/Announcements/)

Section titled “Announcements (src/components/Announcements/)”

Global announcement popup mounted in App.tsx. Reads from config/announcements.ts, filters by dismissed state/dates/audience, and queues multiple announcements.


FilePurpose
FeedbackButton.tsxFloating feedback button
FeedbackModal.tsxFeedback submission dialog
ChatPanel.tsxChat-style feedback panel

FilePurpose
LensMenuSidebar.tsxSidebar with lens list, search, and create
LensPreviewPane.tsxPreview pane showing stats and recent activity
LensMenuItem.tsxIndividual lens list item
PreviewCollaborators.tsxCollaborator avatars in preview
PreviewStats.tsxStat cards in preview pane

Admin monitoring dashboard showing system stats, cache health, and API usage.


ResourceAdmin (src/components/ResourceAdmin/)

Section titled “ResourceAdmin (src/components/ResourceAdmin/)”
FilePurpose
ResourceAdminModal.tsxMain resource administration modal
TeamsPanel.tsxTeam management
SkillsPanel.tsxSkills/capabilities management
AbsencePanel.tsxAbsence/leave management
HolidayCalendarPanel.tsxHoliday calendar configuration
PlaceholderPanel.tsxPlaceholder resource management

Shared UI primitives used across the application:

FilePurpose
ErrorBanner.tsxError message banner
BudgetBanner.tsxRate limit budget warning
RetryBanner.tsxNetwork retry indicator
OfflineBanner.tsxOffline state indicator
LicenseBanner.tsxLicense enforcement banner
Spinner.tsxLoading spinner
GridSkeleton.tsxGrid loading skeleton
LensLoadingScreen.tsxFull-page loading screen for lens data
Tooltip.tsxTooltip component (position: fixed, viewport-clamped)
tooltipContent.tsCentralized tooltip text definitions
InlineDialog.tsxInline dialog (popover)
HighlightText.tsxSearch term highlight in text
OpenSourceDialog.tsxOpen source license dialog