MCPcopy Create free account
hub / github.com/anomalyco/opencode / RunFooterMenu

Function RunFooterMenu

packages/opencode/src/cli/cmd/run/footer.menu.tsx:117–351  ·  view source on GitHub ↗
(props: {
  theme: Accessor<RunFooterTheme>
  items: Accessor<RunFooterMenuItem[]>
  selected: Accessor<number>
  offset: Accessor<number>
  rows: Accessor<number>
  limit?: number
  empty?: string
  border?: boolean
  paddingLeft?: number
  paddingRight?: number
  grouped?: boolean
  background?: boolean
  headerColor?: ColorInput
})

Source from the content-addressed store, hash-verified

115}
116
117export function RunFooterMenu(props: {
118 theme: Accessor<RunFooterTheme>
119 items: Accessor<RunFooterMenuItem[]>
120 selected: Accessor<number>
121 offset: Accessor<number>
122 rows: Accessor<number>
123 limit?: number
124 empty?: string
125 border?: boolean
126 paddingLeft?: number
127 paddingRight?: number
128 grouped?: boolean
129 background?: boolean
130 headerColor?: ColorInput
131}) {
132 const term = useTerminalDimensions()
133 const limit = () => props.limit ?? FOOTER_MENU_ROWS
134 const border = () => props.border ?? true
135 const [groupOffset, setGroupOffset] = createSignal(0)
136 let previous = -1
137 const groupedRows = createMemo<RunFooterMenuRow[]>(() => {
138 const all: RunFooterMenuRow[] = []
139 let category = ""
140 props.items().forEach((item, index) => {
141 if (item.category && item.category !== category) {
142 if (all.length > 0) {
143 all.push({ type: "spacer" })
144 }
145
146 category = item.category
147 all.push({ type: "header", label: item.category })
148 }
149
150 all.push({ type: "item", item, index })
151 })
152 return all
153 })
154
155 createEffect(() => {
156 if (!props.grouped) {
157 return
158 }
159
160 const all = groupedRows()
161 const selected = all.findIndex((item) => item.type === "item" && item.index === props.selected())
162 if (all.length === 0 || selected === -1) {
163 setGroupOffset(0)
164 previous = props.selected()
165 return
166 }
167
168 const dir = props.selected() === previous + 1 ? 1 : props.selected() === previous - 1 ? -1 : undefined
169 setGroupOffset((value) =>
170 dir
171 ? moveOffset(value, { count: all.length, limit: limit(), selected, dir })
172 : revealOffset(value, { count: all.length, limit: limit(), selected }),
173 )
174 previous = props.selected()

Callers

nothing calls this directly

Calls 9

moveOffsetFunction · 0.85
limitFunction · 0.85
revealOffsetFunction · 0.85
borderFunction · 0.85
descriptionPadFunction · 0.85
descriptionTextFunction · 0.85
pushMethod · 0.80
backgroundFunction · 0.70
activeFunction · 0.70

Tested by

no test coverage detected