mirror of
https://github.com/langgenius/dify.git
synced 2026-08-29 03:45:08 +08:00
fix(web): align goto anything autocomplete behavior (#41258)
This commit is contained in:
@@ -22,8 +22,8 @@ vi.mock('@/next/navigation', () => ({
|
||||
}))
|
||||
|
||||
let debouncedSearchQuery: string | undefined
|
||||
vi.mock('ahooks', () => ({
|
||||
useDebounce: <T,>(value: T) => (debouncedSearchQuery ?? value) as T,
|
||||
vi.mock('foxact/use-debounced-value', () => ({
|
||||
useDebouncedValue: <T,>(value: T) => (debouncedSearchQuery ?? value) as T,
|
||||
}))
|
||||
|
||||
const isMac = detectPlatform() === 'mac'
|
||||
@@ -39,6 +39,7 @@ function triggerSearchShortcut(target: Document | HTMLElement = document) {
|
||||
type RemoteQueryState = {
|
||||
data: TestSearchResult[]
|
||||
isLoading: boolean
|
||||
isFetching?: boolean
|
||||
isError: boolean
|
||||
error: Error | null
|
||||
}
|
||||
@@ -61,6 +62,8 @@ let remoteQueryStates: Record<
|
||||
agent: emptyRemoteQueryState(),
|
||||
}
|
||||
let enabledRemoteQueryKeys: string[] = []
|
||||
let enabledRemoteSearches: Array<[keyof typeof remoteQueryStates, string]> = []
|
||||
let previousRemoteData: Partial<Record<keyof typeof remoteQueryStates, TestSearchResult[]>> = {}
|
||||
|
||||
function setRemoteResults(results: TestSearchResult[]) {
|
||||
results.forEach((result) => {
|
||||
@@ -76,30 +79,46 @@ function setRemoteResults(results: TestSearchResult[]) {
|
||||
}
|
||||
|
||||
vi.mock('@tanstack/react-query', () => ({
|
||||
useQuery: (options: { queryKey: [key: keyof typeof remoteQueryStates]; enabled?: boolean }) => {
|
||||
if (options.enabled) enabledRemoteQueryKeys.push(options.queryKey[0])
|
||||
return options.enabled ? remoteQueryStates[options.queryKey[0]] : emptyRemoteQueryState()
|
||||
keepPreviousData: (previousData: unknown) => previousData,
|
||||
useQuery: (options: {
|
||||
queryKey: [key: keyof typeof remoteQueryStates, searchTerm: string]
|
||||
enabled?: boolean
|
||||
placeholderData?: (previousData: unknown) => unknown
|
||||
}) => {
|
||||
const provider = options.queryKey[0]
|
||||
if (!options.enabled) return emptyRemoteQueryState()
|
||||
|
||||
enabledRemoteQueryKeys.push(provider)
|
||||
enabledRemoteSearches.push(options.queryKey)
|
||||
const state = remoteQueryStates[provider]
|
||||
let data = state.data
|
||||
if (state.isFetching && data.length === 0 && options.placeholderData)
|
||||
data = (options.placeholderData(previousRemoteData[provider]) as TestSearchResult[]) ?? []
|
||||
if (!state.isLoading && !state.isFetching && !state.isError)
|
||||
previousRemoteData[provider] = state.data
|
||||
|
||||
return { ...state, data }
|
||||
},
|
||||
}))
|
||||
|
||||
vi.mock('../actions/app', () => ({
|
||||
appSearchQueryOptions: () => ({ queryKey: ['app'] }),
|
||||
appSearchQueryOptions: (searchTerm: string) => ({ queryKey: ['app', searchTerm] }),
|
||||
}))
|
||||
|
||||
vi.mock('../actions/knowledge', () => ({
|
||||
knowledgeSearchQueryOptions: () => ({ queryKey: ['knowledge'] }),
|
||||
knowledgeSearchQueryOptions: (searchTerm: string) => ({ queryKey: ['knowledge', searchTerm] }),
|
||||
}))
|
||||
|
||||
vi.mock('../actions/plugin', () => ({
|
||||
pluginSearchQueryOptions: () => ({ queryKey: ['plugin'] }),
|
||||
pluginSearchQueryOptions: (searchTerm: string) => ({ queryKey: ['plugin', searchTerm] }),
|
||||
}))
|
||||
|
||||
vi.mock('../actions/skill', () => ({
|
||||
skillSearchQueryOptions: () => ({ queryKey: ['skill'] }),
|
||||
skillSearchQueryOptions: (searchTerm: string) => ({ queryKey: ['skill', searchTerm] }),
|
||||
}))
|
||||
|
||||
vi.mock('../actions/agent', () => ({
|
||||
agentSearchQueryOptions: () => ({ queryKey: ['agent'] }),
|
||||
agentSearchQueryOptions: (searchTerm: string) => ({ queryKey: ['agent', searchTerm] }),
|
||||
}))
|
||||
|
||||
const visibilityState = vi.hoisted(() => ({
|
||||
@@ -141,6 +160,10 @@ const createRemoteAction = (key: ActionItem['key'], shortcut: string): ActionIte
|
||||
source: 'remote',
|
||||
})
|
||||
|
||||
const slashSearchMock = vi.fn(
|
||||
(_query: string, _searchTerm: string, _locale?: string): SearchResult[] => [],
|
||||
)
|
||||
|
||||
const actionsMock = {
|
||||
slash: {
|
||||
key: '/',
|
||||
@@ -149,7 +172,7 @@ const actionsMock = {
|
||||
description: '/ desc',
|
||||
source: 'local',
|
||||
action: vi.fn(),
|
||||
search: vi.fn(() => []),
|
||||
search: slashSearchMock,
|
||||
} satisfies ActionItem,
|
||||
app: createRemoteAction('@app', '@app'),
|
||||
knowledge: createRemoteAction('@knowledge', '@kb'),
|
||||
@@ -232,12 +255,16 @@ describe('GotoAnything', () => {
|
||||
}
|
||||
debouncedSearchQuery = undefined
|
||||
enabledRemoteQueryKeys = []
|
||||
enabledRemoteSearches = []
|
||||
previousRemoteData = {}
|
||||
matchActionMock.mockReset()
|
||||
visibilityState.agentEnabled = true
|
||||
visibilityState.canManageAgents = true
|
||||
visibilityState.datasetOperator = false
|
||||
mockFindCommand = null
|
||||
mockAvailableCommands = []
|
||||
actionsMock.slash.search.mockReset()
|
||||
actionsMock.slash.search.mockReturnValue([])
|
||||
})
|
||||
|
||||
describe('modal behavior', () => {
|
||||
@@ -449,7 +476,7 @@ describe('GotoAnything', () => {
|
||||
expect(routerPush).toHaveBeenCalledTimes(1)
|
||||
})
|
||||
|
||||
it('should loop from the last command to the first with ArrowDown', async () => {
|
||||
it('should navigate and loop within a command grid row with ArrowRight', async () => {
|
||||
const user = userEvent.setup()
|
||||
mockAvailableCommands = [
|
||||
{ name: 'theme', description: 'Change theme' },
|
||||
@@ -463,15 +490,15 @@ describe('GotoAnything', () => {
|
||||
})
|
||||
|
||||
await user.type(input, '/')
|
||||
const options = screen.getAllByRole('option')
|
||||
const options = screen.getAllByRole('gridcell')
|
||||
expect(options).toHaveLength(2)
|
||||
const [firstOption, secondOption] = options
|
||||
if (!firstOption || !secondOption) throw new Error('Expected two command options')
|
||||
|
||||
await user.keyboard('{ArrowDown}')
|
||||
await user.keyboard('{ArrowRight}')
|
||||
expect(input).toHaveAttribute('aria-activedescendant', secondOption.id)
|
||||
|
||||
await user.keyboard('{ArrowDown}')
|
||||
await user.keyboard('{ArrowRight}')
|
||||
expect(input).toHaveAttribute('aria-activedescendant', firstOption.id)
|
||||
})
|
||||
|
||||
@@ -523,7 +550,7 @@ describe('GotoAnything', () => {
|
||||
await user.type(input, '@')
|
||||
|
||||
expect(
|
||||
screen.getByRole('option', {
|
||||
screen.getByRole('gridcell', {
|
||||
name: /@kb app\.gotoAnything\.actions\.searchKnowledgeBasesDesc/,
|
||||
}),
|
||||
).toBeInTheDocument()
|
||||
@@ -544,6 +571,164 @@ describe('GotoAnything', () => {
|
||||
expect(screen.queryByText('Fallback description')).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('keeps an exact submenu command in the grid until selection commits it', async () => {
|
||||
const user = userEvent.setup()
|
||||
mockAvailableCommands = [{ name: 'theme', description: 'Change theme' }]
|
||||
matchActionMock.mockImplementation((query: string) =>
|
||||
query.startsWith('/theme ') ? actionsMock.slash : undefined,
|
||||
)
|
||||
actionsMock.slash.search.mockReturnValue([
|
||||
{
|
||||
id: 'theme-dark',
|
||||
type: 'command',
|
||||
title: 'Dark Theme',
|
||||
description: 'Use dark appearance',
|
||||
data: { command: 'theme.set', args: { value: 'dark' } },
|
||||
},
|
||||
])
|
||||
|
||||
renderGotoAnything(<GotoAnything />)
|
||||
triggerSearchShortcut()
|
||||
const input = await screen.findByRole('combobox', {
|
||||
name: 'app.gotoAnything.searchTitle',
|
||||
})
|
||||
|
||||
await user.type(input, '/theme')
|
||||
|
||||
expect(input).toHaveValue('/theme')
|
||||
expect(screen.getByRole('gridcell', { name: /\/theme/ })).toBeInTheDocument()
|
||||
expect(screen.queryByText('Dark Theme')).not.toBeInTheDocument()
|
||||
|
||||
await user.keyboard('{Enter}')
|
||||
|
||||
expect(input).toHaveValue('/theme ')
|
||||
expect(screen.getByRole('option', { name: /Dark Theme/ })).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('keeps a submenu root result visible while the committed delimiter catches up', async () => {
|
||||
const user = userEvent.setup()
|
||||
mockAvailableCommands = [{ name: 'theme', description: 'Change theme' }]
|
||||
matchActionMock.mockImplementation((query: string) =>
|
||||
query.startsWith('/theme ') ? actionsMock.slash : undefined,
|
||||
)
|
||||
actionsMock.slash.search.mockImplementation((query: string) =>
|
||||
query === '/theme '
|
||||
? [
|
||||
{
|
||||
id: 'theme-dark',
|
||||
type: 'command',
|
||||
title: 'Dark Theme',
|
||||
data: { command: 'theme.set', args: { value: 'dark' } },
|
||||
},
|
||||
]
|
||||
: [],
|
||||
)
|
||||
|
||||
renderGotoAnything(<GotoAnything />)
|
||||
triggerSearchShortcut()
|
||||
const input = await screen.findByRole('combobox', {
|
||||
name: 'app.gotoAnything.searchTitle',
|
||||
})
|
||||
await user.type(input, '/theme')
|
||||
|
||||
debouncedSearchQuery = '/theme'
|
||||
await user.keyboard('{Enter}')
|
||||
await user.type(input, 'unknown')
|
||||
|
||||
expect(input).toHaveValue('/theme unknown')
|
||||
expect(screen.getByRole('option', { name: /Dark Theme/ })).toBeInTheDocument()
|
||||
expect(screen.getByRole('status')).toHaveTextContent('app.gotoAnything.searching')
|
||||
expect(screen.queryByText('app.gotoAnything.noResults')).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('does not leak a pending remote search into command or local-result contexts', async () => {
|
||||
const user = userEvent.setup()
|
||||
mockAvailableCommands = [{ name: 'theme', description: 'Change theme' }]
|
||||
matchActionMock.mockImplementation((query: string) =>
|
||||
query.startsWith('/theme ') ? actionsMock.slash : undefined,
|
||||
)
|
||||
actionsMock.slash.search.mockReturnValue([
|
||||
{
|
||||
id: 'theme-dark',
|
||||
type: 'command',
|
||||
title: 'Dark Theme',
|
||||
data: { command: 'theme.set', args: { value: 'dark' } },
|
||||
},
|
||||
])
|
||||
setRemoteResults([
|
||||
{
|
||||
id: 'app-1',
|
||||
type: 'app',
|
||||
title: 'Stale Remote App',
|
||||
path: '/apps/stale',
|
||||
data: {},
|
||||
},
|
||||
])
|
||||
|
||||
renderGotoAnything(<GotoAnything />)
|
||||
triggerSearchShortcut()
|
||||
const input = await screen.findByRole('combobox', {
|
||||
name: 'app.gotoAnything.searchTitle',
|
||||
})
|
||||
await user.type(input, 'search')
|
||||
expect(await screen.findByText('Stale Remote App')).toBeInTheDocument()
|
||||
|
||||
debouncedSearchQuery = 'search'
|
||||
remoteQueryStates.app = {
|
||||
...emptyRemoteQueryState(),
|
||||
isFetching: true,
|
||||
}
|
||||
await user.clear(input)
|
||||
await user.type(input, '/')
|
||||
|
||||
expect(screen.getByRole('gridcell', { name: /\/theme/ })).toBeInTheDocument()
|
||||
expect(screen.queryByText('Stale Remote App')).not.toBeInTheDocument()
|
||||
|
||||
await user.keyboard('{Enter}')
|
||||
|
||||
expect(input).toHaveValue('/theme ')
|
||||
expect(screen.getByRole('option', { name: /Dark Theme/ })).toBeInTheDocument()
|
||||
expect(screen.queryByText('Stale Remote App')).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('keeps submenu results visible while its argument is being debounced', async () => {
|
||||
const user = userEvent.setup()
|
||||
const darkThemeResult: SearchResult = {
|
||||
id: 'theme-dark',
|
||||
type: 'command',
|
||||
title: 'Dark Theme',
|
||||
description: 'Use dark appearance',
|
||||
data: { command: 'theme.set', args: { value: 'dark' } },
|
||||
}
|
||||
matchActionMock.mockImplementation((query: string) =>
|
||||
query.startsWith('/theme ') ? actionsMock.slash : undefined,
|
||||
)
|
||||
actionsMock.slash.search.mockImplementation((query: string) =>
|
||||
query === '/theme ' ? [darkThemeResult] : [],
|
||||
)
|
||||
|
||||
renderGotoAnything(<GotoAnything />)
|
||||
triggerSearchShortcut()
|
||||
const input = await screen.findByRole('combobox', {
|
||||
name: 'app.gotoAnything.searchTitle',
|
||||
})
|
||||
await user.type(input, '/theme ')
|
||||
expect(screen.getByRole('option', { name: /Dark Theme/ })).toBeInTheDocument()
|
||||
|
||||
debouncedSearchQuery = '/theme '
|
||||
await user.type(input, 'unknown')
|
||||
|
||||
expect(screen.getByRole('option', { name: /Dark Theme/ })).toBeInTheDocument()
|
||||
expect(screen.getByRole('status')).toHaveTextContent('app.gotoAnything.searching')
|
||||
expect(screen.queryByText('app.gotoAnything.noResults')).not.toBeInTheDocument()
|
||||
|
||||
debouncedSearchQuery = '/theme unknownx'
|
||||
await user.type(input, 'x')
|
||||
|
||||
expect(await screen.findByText('app.gotoAnything.noResults')).toBeInTheDocument()
|
||||
expect(screen.queryByText('Dark Theme')).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('queries skills and agents during ordinary search', async () => {
|
||||
const user = userEvent.setup()
|
||||
renderGotoAnything(<GotoAnything />)
|
||||
@@ -559,6 +744,74 @@ describe('GotoAnything', () => {
|
||||
)
|
||||
})
|
||||
|
||||
it('trims trailing whitespace before an ordinary remote search', async () => {
|
||||
const user = userEvent.setup()
|
||||
renderGotoAnything(<GotoAnything />)
|
||||
triggerSearchShortcut()
|
||||
const input = await screen.findByRole('combobox', {
|
||||
name: 'app.gotoAnything.searchTitle',
|
||||
})
|
||||
|
||||
await user.type(input, 'research ')
|
||||
|
||||
expect(enabledRemoteSearches).toEqual(
|
||||
expect.arrayContaining([
|
||||
['app', 'research'],
|
||||
['knowledge', 'research'],
|
||||
['plugin', 'research'],
|
||||
]),
|
||||
)
|
||||
expect(enabledRemoteSearches).not.toEqual(
|
||||
expect.arrayContaining([
|
||||
['app', 'research '],
|
||||
['knowledge', 'research '],
|
||||
['plugin', 'research '],
|
||||
]),
|
||||
)
|
||||
})
|
||||
|
||||
it('keeps general local results aligned with the debounced remote result set', async () => {
|
||||
const user = userEvent.setup()
|
||||
const nodeResult = {
|
||||
id: 'node-1',
|
||||
type: 'workflow-node',
|
||||
title: 'Stable Node',
|
||||
data: {},
|
||||
} as SearchResult
|
||||
const nodeSearch = vi.fn((query: string) => (query === 'node' ? [nodeResult] : []))
|
||||
createActionsMock.mockImplementationOnce(() => ({
|
||||
...actionsMock,
|
||||
node: {
|
||||
key: '@node',
|
||||
shortcut: '@node',
|
||||
title: '@node title',
|
||||
description: '@node desc',
|
||||
source: 'local',
|
||||
search: nodeSearch,
|
||||
},
|
||||
}))
|
||||
|
||||
renderGotoAnything(<GotoAnything />)
|
||||
triggerSearchShortcut()
|
||||
const input = await screen.findByRole('combobox', {
|
||||
name: 'app.gotoAnything.searchTitle',
|
||||
})
|
||||
await user.type(input, 'node')
|
||||
expect(await screen.findByText('Stable Node')).toBeInTheDocument()
|
||||
|
||||
debouncedSearchQuery = 'node'
|
||||
await user.type(input, 'x')
|
||||
|
||||
expect(screen.getByText('Stable Node')).toBeInTheDocument()
|
||||
expect(screen.getByRole('status')).toHaveTextContent('app.gotoAnything.searching')
|
||||
|
||||
debouncedSearchQuery = 'nodex2'
|
||||
await user.type(input, '2')
|
||||
|
||||
expect(await screen.findByText('app.gotoAnything.noResults')).toBeInTheDocument()
|
||||
expect(screen.queryByText('Stable Node')).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it.each([
|
||||
['@skill', actionsMock.skill, 'skill'],
|
||||
['@agents', actionsMock.agent, 'agent'],
|
||||
@@ -653,6 +906,8 @@ describe('GotoAnything', () => {
|
||||
const searchingTexts = screen.getAllByText('app.gotoAnything.searching')
|
||||
expect(searchingTexts.length).toBeGreaterThanOrEqual(1)
|
||||
expect(screen.getByRole('status')).toHaveTextContent('app.gotoAnything.searching')
|
||||
const list = screen.getByRole('listbox')
|
||||
expect(input).toHaveAttribute('aria-controls', list.id)
|
||||
expect(document.querySelector('[aria-busy="true"]')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
@@ -681,6 +936,7 @@ describe('GotoAnything', () => {
|
||||
|
||||
expect(screen.getByRole('status')).toHaveTextContent('app.gotoAnything.searchFailed')
|
||||
expect(screen.getAllByText('app.gotoAnything.searchFailed')).toHaveLength(2)
|
||||
expect(screen.queryByText('app.gotoAnything.someServicesUnavailable')).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should preserve successful results when one provider fails', async () => {
|
||||
@@ -730,11 +986,19 @@ describe('GotoAnything', () => {
|
||||
] as const
|
||||
|
||||
for (const [scope, icon] of expectedScopeIcons) {
|
||||
const option = await screen.findByRole('option', { name: new RegExp(scope) })
|
||||
const option = await screen.findByRole('gridcell', { name: new RegExp(scope) })
|
||||
expect(option.querySelector(`.${icon}`)).toBeInTheDocument()
|
||||
}
|
||||
|
||||
const input = screen.getByRole('combobox', { name: 'app.gotoAnything.searchTitle' })
|
||||
expect(input).toHaveAttribute('aria-haspopup', 'grid')
|
||||
expect(screen.getByRole('grid')).toHaveAttribute('id', input.getAttribute('aria-controls'))
|
||||
expect(screen.getByRole('rowgroup')).toBeInTheDocument()
|
||||
for (const cell of screen.getAllByRole('gridcell'))
|
||||
expect(cell.parentElement).toHaveAttribute('role', 'row')
|
||||
expect(screen.getByText('app.gotoAnything.selectSearchType')).toBeInTheDocument()
|
||||
expect(screen.queryByText('app.gotoAnything.resultCount:{"count":5}')).not.toBeInTheDocument()
|
||||
expect(screen.getByText('app.gotoAnything.activate')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should show no results state when search returns empty', async () => {
|
||||
@@ -753,6 +1017,51 @@ describe('GotoAnything', () => {
|
||||
|
||||
expect(await screen.findByText('app.gotoAnything.noResults')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('keeps previous results visible while the next query is pending', async () => {
|
||||
const user = userEvent.setup()
|
||||
setRemoteResults([
|
||||
{
|
||||
id: 'app-1',
|
||||
type: 'app',
|
||||
title: 'Stable App',
|
||||
path: '/apps/stable',
|
||||
data: {},
|
||||
},
|
||||
])
|
||||
|
||||
renderGotoAnything(<GotoAnything />)
|
||||
triggerSearchShortcut()
|
||||
const input = await screen.findByRole('combobox', {
|
||||
name: 'app.gotoAnything.searchTitle',
|
||||
})
|
||||
await user.type(input, 'app')
|
||||
expect(await screen.findByText('Stable App')).toBeInTheDocument()
|
||||
|
||||
debouncedSearchQuery = 'app'
|
||||
remoteQueryStates.app = {
|
||||
...emptyRemoteQueryState(),
|
||||
isFetching: true,
|
||||
}
|
||||
await user.type(input, 'x')
|
||||
|
||||
expect(screen.getByText('Stable App')).toBeInTheDocument()
|
||||
expect(screen.getByRole('status')).toHaveTextContent('app.gotoAnything.searching')
|
||||
expect(screen.queryByText('app.gotoAnything.noResults')).not.toBeInTheDocument()
|
||||
|
||||
remoteQueryStates = {
|
||||
app: emptyRemoteQueryState(),
|
||||
knowledge: emptyRemoteQueryState(),
|
||||
plugin: emptyRemoteQueryState(),
|
||||
skill: emptyRemoteQueryState(),
|
||||
agent: emptyRemoteQueryState(),
|
||||
}
|
||||
debouncedSearchQuery = 'appx2'
|
||||
await user.type(input, '2')
|
||||
|
||||
expect(await screen.findByText('app.gotoAnything.noResults')).toBeInTheDocument()
|
||||
expect(screen.queryByText('Stable App')).not.toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
describe('plugin installation', () => {
|
||||
|
||||
@@ -143,12 +143,19 @@ describe('matchAction', () => {
|
||||
expect(matchAction(query, actions)?.key).toBe(key)
|
||||
})
|
||||
|
||||
it('matches complete submenu commands but leaves direct commands in the command picker', () => {
|
||||
it('requires a delimiter before entering a scoped search', () => {
|
||||
expect(matchAction('@app', actions)).toBeUndefined()
|
||||
expect(matchAction('@app ', actions)?.key).toBe('@app')
|
||||
})
|
||||
|
||||
it('requires a delimiter for submenu commands and leaves direct commands in the picker', () => {
|
||||
vi.mocked(slashCommandRegistry.getAllCommands).mockReturnValue([
|
||||
{ name: 'theme', mode: 'submenu', description: '', search: vi.fn(() => []) },
|
||||
{ name: 'docs', mode: 'direct', description: '', search: vi.fn(() => []) },
|
||||
])
|
||||
|
||||
expect(matchAction('/theme', actions)).toBeUndefined()
|
||||
expect(matchAction('/theme ', actions)?.key).toBe('/')
|
||||
expect(matchAction('/theme dark', actions)?.key).toBe('/')
|
||||
expect(matchAction('/docs', actions)).toBeUndefined()
|
||||
expect(matchAction('/the', actions)).toBeUndefined()
|
||||
|
||||
@@ -57,10 +57,10 @@ export function matchAction(query: string, actions: Record<string, ActionItem>)
|
||||
if (command.mode === 'direct') return false
|
||||
|
||||
const commandPattern = `/${command.name}`
|
||||
return query === commandPattern || query.startsWith(`${commandPattern} `)
|
||||
return query.startsWith(`${commandPattern} `)
|
||||
})
|
||||
}
|
||||
|
||||
return new RegExp(`^(${action.key}|${action.shortcut})(?:\\s|$)`).test(query)
|
||||
return new RegExp(`^(${action.key}|${action.shortcut})\\s`).test(query)
|
||||
})
|
||||
}
|
||||
|
||||
@@ -2,47 +2,31 @@ import { render, screen } from '@testing-library/react'
|
||||
import { Footer } from '../footer'
|
||||
|
||||
const defaultProps = {
|
||||
resultCount: 0,
|
||||
searchMode: 'general',
|
||||
isLoading: false,
|
||||
hasUnavailableServices: false,
|
||||
isCommandsMode: false,
|
||||
hasQuery: false,
|
||||
resultCount: null,
|
||||
canActivate: false,
|
||||
hasPartialFailure: false,
|
||||
}
|
||||
|
||||
describe('Footer', () => {
|
||||
it('shows the result count and active scope', () => {
|
||||
render(<Footer {...defaultProps} resultCount={3} searchMode="@app" hasQuery />)
|
||||
it('shows the result count and activation hint without search-mode actions', () => {
|
||||
render(<Footer {...defaultProps} resultCount={3} canActivate />)
|
||||
|
||||
expect(screen.getByText('app.gotoAnything.resultCount:{"count":3}')).toBeInTheDocument()
|
||||
expect(screen.getByText('app.gotoAnything.inScope:{"scope":"app"}')).toBeInTheDocument()
|
||||
expect(screen.getByText('app.gotoAnything.clearToSearchAll')).toBeInTheDocument()
|
||||
expect(screen.getByText('app.gotoAnything.activate')).toBeInTheDocument()
|
||||
expect(screen.getByText('Enter')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('reports partial provider failure even when results remain available', () => {
|
||||
render(<Footer {...defaultProps} resultCount={2} hasUnavailableServices hasQuery />)
|
||||
render(<Footer {...defaultProps} resultCount={2} canActivate hasPartialFailure />)
|
||||
|
||||
expect(screen.getByText('app.gotoAnything.someServicesUnavailable')).toHaveClass('text-red-500')
|
||||
expect(screen.getByText('app.gotoAnything.useAtForSpecific')).toBeInTheDocument()
|
||||
expect(screen.getByText('app.gotoAnything.someServicesUnavailable')).toBeInTheDocument()
|
||||
expect(screen.getByText('app.gotoAnything.activate')).toBeInTheDocument()
|
||||
expect(screen.getByText('Enter')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('reports pending remote search', () => {
|
||||
render(<Footer {...defaultProps} isLoading hasQuery />)
|
||||
|
||||
expect(screen.getByText('app.gotoAnything.searching')).toBeInTheDocument()
|
||||
expect(screen.getByText('app.gotoAnything.tips')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('reports command selection mode', () => {
|
||||
render(<Footer {...defaultProps} isCommandsMode />)
|
||||
|
||||
expect(screen.getByText('app.gotoAnything.selectToNavigate')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('shows the idle shortcut hint', () => {
|
||||
it('shows only the close shortcut when there are no actionable results', () => {
|
||||
render(<Footer {...defaultProps} />)
|
||||
|
||||
expect(screen.getByText('app.gotoAnything.startTyping')).toBeInTheDocument()
|
||||
expect(screen.getByText('app.gotoAnything.pressEscToClose')).toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
import type { ActionItem } from '../actions/types'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
|
||||
type EmptyStateVariant = 'no-results' | 'error' | 'default' | 'loading'
|
||||
type EmptyStateVariant = 'no-results' | 'error' | 'loading'
|
||||
|
||||
type EmptyStateProps = {
|
||||
variant: EmptyStateVariant
|
||||
@@ -49,23 +49,6 @@ export function EmptyState({
|
||||
)
|
||||
}
|
||||
|
||||
if (variant === 'default') {
|
||||
return (
|
||||
<div className="flex items-center justify-center py-8 text-center text-text-tertiary">
|
||||
<div>
|
||||
<div className="text-sm font-medium">
|
||||
{t(($) => $['gotoAnything.searchTitle'], { ns: 'app' })}
|
||||
</div>
|
||||
<div className="mt-3 space-y-1 text-xs text-text-quaternary">
|
||||
<div>{t(($) => $['gotoAnything.searchHint'], { ns: 'app' })}</div>
|
||||
<div>{t(($) => $['gotoAnything.commandHint'], { ns: 'app' })}</div>
|
||||
<div>{t(($) => $['gotoAnything.slashHint'], { ns: 'app' })}</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
const isCommandSearch = searchMode !== 'general'
|
||||
const commandType = isCommandSearch ? searchMode.replace('@', '') : ''
|
||||
|
||||
|
||||
@@ -1,28 +1,19 @@
|
||||
'use client'
|
||||
|
||||
import { Kbd } from '@langgenius/dify-ui/kbd'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
|
||||
type FooterProps = {
|
||||
resultCount: number
|
||||
searchMode: string
|
||||
isLoading: boolean
|
||||
hasUnavailableServices: boolean
|
||||
isCommandsMode: boolean
|
||||
hasQuery: boolean
|
||||
resultCount: number | null
|
||||
canActivate: boolean
|
||||
hasPartialFailure: boolean
|
||||
}
|
||||
|
||||
export function Footer({
|
||||
resultCount,
|
||||
searchMode,
|
||||
isLoading,
|
||||
hasUnavailableServices,
|
||||
isCommandsMode,
|
||||
hasQuery,
|
||||
}: FooterProps) {
|
||||
export function Footer({ resultCount, canActivate, hasPartialFailure }: FooterProps) {
|
||||
const { t } = useTranslation()
|
||||
|
||||
const renderLeftContent = () => {
|
||||
if (hasUnavailableServices) {
|
||||
if (hasPartialFailure) {
|
||||
return (
|
||||
<span className="text-red-500">
|
||||
{t(($) => $['gotoAnything.someServicesUnavailable'], { ns: 'app' })}
|
||||
@@ -30,51 +21,24 @@ export function Footer({
|
||||
)
|
||||
}
|
||||
|
||||
if (resultCount > 0) {
|
||||
return (
|
||||
<>
|
||||
{t(($) => $['gotoAnything.resultCount'], { ns: 'app', count: resultCount })}
|
||||
{searchMode !== 'general' && (
|
||||
<span className="ml-2 opacity-60">
|
||||
{t(($) => $['gotoAnything.inScope'], {
|
||||
ns: 'app',
|
||||
scope: searchMode.replace('@', ''),
|
||||
})}
|
||||
</span>
|
||||
)}
|
||||
</>
|
||||
)
|
||||
if (resultCount !== null && resultCount > 0) {
|
||||
return t(($) => $['gotoAnything.resultCount'], { ns: 'app', count: resultCount })
|
||||
}
|
||||
|
||||
return (
|
||||
<span className="opacity-60">
|
||||
{(() => {
|
||||
if (isCommandsMode) return t(($) => $['gotoAnything.selectToNavigate'], { ns: 'app' })
|
||||
|
||||
if (isLoading) return t(($) => $['gotoAnything.searching'], { ns: 'app' })
|
||||
|
||||
return t(($) => $['gotoAnything.startTyping'], { ns: 'app' })
|
||||
})()}
|
||||
</span>
|
||||
)
|
||||
return null
|
||||
}
|
||||
|
||||
const renderRightContent = () => {
|
||||
if (resultCount > 0 || hasUnavailableServices) {
|
||||
return (
|
||||
<span className="opacity-60">
|
||||
{searchMode !== 'general'
|
||||
? t(($) => $['gotoAnything.clearToSearchAll'], { ns: 'app' })
|
||||
: t(($) => $['gotoAnything.useAtForSpecific'], { ns: 'app' })}
|
||||
</span>
|
||||
)
|
||||
}
|
||||
|
||||
return (
|
||||
<span className="opacity-60">
|
||||
{hasQuery || isCommandsMode
|
||||
? t(($) => $['gotoAnything.tips'], { ns: 'app' })
|
||||
: t(($) => $['gotoAnything.pressEscToClose'], { ns: 'app' })}
|
||||
{canActivate ? (
|
||||
<span className="flex items-center gap-1">
|
||||
<span>{t(($) => $['gotoAnything.activate'], { ns: 'app' })}</span>
|
||||
<Kbd>Enter</Kbd>
|
||||
</span>
|
||||
) : (
|
||||
t(($) => $['gotoAnything.pressEscToClose'], { ns: 'app' })
|
||||
)}
|
||||
</span>
|
||||
)
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@ import {
|
||||
AutocompleteInputGroup,
|
||||
AutocompleteItem,
|
||||
AutocompleteList,
|
||||
AutocompleteRow,
|
||||
AutocompleteStatus,
|
||||
} from '@langgenius/dify-ui/autocomplete'
|
||||
import {
|
||||
@@ -31,8 +32,8 @@ import {
|
||||
ScrollAreaViewport,
|
||||
} from '@langgenius/dify-ui/scroll-area'
|
||||
import { formatForDisplay, useHotkey } from '@tanstack/react-hotkeys'
|
||||
import { useQuery } from '@tanstack/react-query'
|
||||
import { useDebounce } from 'ahooks'
|
||||
import { keepPreviousData, useQuery } from '@tanstack/react-query'
|
||||
import { useDebouncedValue } from 'foxact/use-debounced-value'
|
||||
import { useAtomValue } from 'jotai'
|
||||
import { useMemo, useRef, useState } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
@@ -155,12 +156,6 @@ function isEditableShortcutTarget(target: EventTarget | null) {
|
||||
return target.isContentEditable || ['INPUT', 'TEXTAREA', 'SELECT'].includes(target.tagName)
|
||||
}
|
||||
|
||||
function getSearchModeLabel(searchMode: string) {
|
||||
if (searchMode === 'scopes') return 'SCOPES'
|
||||
if (searchMode === 'commands') return 'COMMANDS'
|
||||
return searchMode.replace('@', '').toUpperCase()
|
||||
}
|
||||
|
||||
function getSearchMode(
|
||||
searchQuery: string,
|
||||
isCommandsMode: boolean,
|
||||
@@ -168,7 +163,7 @@ function getSearchMode(
|
||||
) {
|
||||
if (isCommandsMode) return searchQuery.trim().startsWith('/') ? 'commands' : 'scopes'
|
||||
|
||||
const action = matchAction(searchQuery.trim().toLowerCase(), actions)
|
||||
const action = matchAction(searchQuery.trimStart().toLowerCase(), actions)
|
||||
if (!action) return 'general'
|
||||
|
||||
return action.key === '/' ? '@command' : action.key
|
||||
@@ -180,10 +175,29 @@ function isCommandSelectionQuery(query: string, actions: Record<string, ActionIt
|
||||
|
||||
return (
|
||||
(trimmedQuery.startsWith('@') || trimmedQuery.startsWith('/')) &&
|
||||
!matchAction(trimmedQuery, actions)
|
||||
!matchAction(query.trimStart().toLowerCase(), actions)
|
||||
)
|
||||
}
|
||||
|
||||
function getActionIdentity(query: string, action: ActionItem) {
|
||||
if (action.key !== '/') return action.key
|
||||
return query.split(/\s/, 1)[0]
|
||||
}
|
||||
|
||||
function getActionBaseQuery(query: string, action: ActionItem) {
|
||||
if (action.key === '/') return `${getActionIdentity(query, action)} `
|
||||
return `${query.split(/\s/, 1)[0] ?? action.shortcut} `
|
||||
}
|
||||
|
||||
function getRemoteSearchIdentity(
|
||||
query: string,
|
||||
isCommandsMode: boolean,
|
||||
action: ActionItem | undefined,
|
||||
) {
|
||||
if (!query.trim() || isCommandsMode || action?.source === 'local') return null
|
||||
return action?.key ?? 'general'
|
||||
}
|
||||
|
||||
function dedupeSearchResults(results: SearchResult[]) {
|
||||
const seen = new Set<string>()
|
||||
return results.filter((result) => {
|
||||
@@ -204,6 +218,13 @@ function groupSearchResults(results: SearchResult[]) {
|
||||
}, {})
|
||||
}
|
||||
|
||||
function chunkArray<T>(items: readonly T[], size: number): T[][] {
|
||||
const rows: T[][] = []
|
||||
for (let index = 0; index < items.length; index += size)
|
||||
rows.push(items.slice(index, index + size))
|
||||
return rows
|
||||
}
|
||||
|
||||
function GotoAnythingDialog() {
|
||||
const { t } = useTranslation()
|
||||
const pathname = usePathname()
|
||||
@@ -229,16 +250,18 @@ function GotoAnythingDialog() {
|
||||
[agentsAvailable, isWorkflowPage, isRagPipelinePage, skillsAvailable],
|
||||
)
|
||||
const trimmedSearchQuery = searchQuery.trim()
|
||||
const normalizedSearchQuery = searchQuery.trimStart().toLowerCase()
|
||||
const isCommandsMode = isCommandSelectionQuery(searchQuery, actions)
|
||||
const searchMode = getSearchMode(searchQuery, isCommandsMode, actions)
|
||||
const debouncedSearchQuery = useDebounce(searchQuery, { wait: 300 })
|
||||
const normalizedDebouncedQuery = debouncedSearchQuery.trim().toLowerCase()
|
||||
const currentAction = matchAction(normalizedSearchQuery, actions)
|
||||
const debouncedSearchQuery = useDebouncedValue(searchQuery, 300)
|
||||
const normalizedDebouncedQuery = debouncedSearchQuery.trimStart().toLowerCase()
|
||||
const isDebouncedCommandsMode = isCommandSelectionQuery(debouncedSearchQuery, actions)
|
||||
const debouncedAction = matchAction(normalizedDebouncedQuery, actions)
|
||||
const debouncedSearchTerm = debouncedAction
|
||||
? getActionSearchTerm(normalizedDebouncedQuery, debouncedAction)
|
||||
: normalizedDebouncedQuery
|
||||
const remoteSearchEnabled = Boolean(normalizedDebouncedQuery) && !isDebouncedCommandsMode
|
||||
: normalizedDebouncedQuery.trimEnd()
|
||||
const remoteSearchEnabled = Boolean(normalizedDebouncedQuery.trim()) && !isDebouncedCommandsMode
|
||||
const appSearchEnabled =
|
||||
remoteSearchEnabled && (!debouncedAction || debouncedAction.key === '@app')
|
||||
const knowledgeSearchEnabled =
|
||||
@@ -254,32 +277,54 @@ function GotoAnythingDialog() {
|
||||
const appSearchQuery = useQuery({
|
||||
...appSearchQueryOptions(debouncedSearchTerm, debouncedAction?.key === '@app'),
|
||||
enabled: appSearchEnabled,
|
||||
placeholderData: keepPreviousData,
|
||||
})
|
||||
const knowledgeSearchQuery = useQuery({
|
||||
...knowledgeSearchQueryOptions(debouncedSearchTerm),
|
||||
enabled: knowledgeSearchEnabled,
|
||||
placeholderData: keepPreviousData,
|
||||
})
|
||||
const pluginSearchQuery = useQuery({
|
||||
...pluginSearchQueryOptions(debouncedSearchTerm, defaultLocale),
|
||||
enabled: pluginSearchEnabled,
|
||||
placeholderData: keepPreviousData,
|
||||
})
|
||||
const skillSearchQuery = useQuery({
|
||||
...skillSearchQueryOptions(debouncedSearchTerm),
|
||||
enabled: skillSearchEnabled,
|
||||
placeholderData: keepPreviousData,
|
||||
})
|
||||
const agentSearchQuery = useQuery({
|
||||
...agentSearchQueryOptions(debouncedSearchTerm),
|
||||
enabled: agentSearchEnabled,
|
||||
placeholderData: keepPreviousData,
|
||||
})
|
||||
const isSameLocalAction =
|
||||
currentAction?.source === 'local' &&
|
||||
debouncedAction?.source === 'local' &&
|
||||
getActionIdentity(normalizedSearchQuery, currentAction) ===
|
||||
getActionIdentity(normalizedDebouncedQuery, debouncedAction)
|
||||
const isLocalSearchDebouncing =
|
||||
currentAction?.source === 'local' && normalizedSearchQuery !== normalizedDebouncedQuery
|
||||
const isSameGeneralSearch =
|
||||
currentAction === undefined &&
|
||||
debouncedAction === undefined &&
|
||||
!isCommandsMode &&
|
||||
!isDebouncedCommandsMode &&
|
||||
Boolean(normalizedSearchQuery.trim()) &&
|
||||
Boolean(normalizedDebouncedQuery.trim())
|
||||
let localSearchQuery = normalizedSearchQuery
|
||||
if (isSameLocalAction || isSameGeneralSearch) localSearchQuery = normalizedDebouncedQuery
|
||||
else if (isLocalSearchDebouncing)
|
||||
localSearchQuery = getActionBaseQuery(normalizedSearchQuery, currentAction)
|
||||
const localSearchResults = useMemo(() => {
|
||||
if (!trimmedSearchQuery || isCommandsMode) return []
|
||||
|
||||
const normalizedQuery = trimmedSearchQuery.toLowerCase()
|
||||
const action = matchAction(normalizedQuery, actions)
|
||||
const action = matchAction(localSearchQuery, actions)
|
||||
if (action?.source === 'local') {
|
||||
return action.search(
|
||||
normalizedQuery,
|
||||
getActionSearchTerm(normalizedQuery, action),
|
||||
localSearchQuery,
|
||||
getActionSearchTerm(localSearchQuery, action),
|
||||
defaultLocale,
|
||||
)
|
||||
}
|
||||
@@ -287,27 +332,43 @@ function GotoAnythingDialog() {
|
||||
|
||||
return Object.values(actions).flatMap((candidate) => {
|
||||
if (candidate.source !== 'local' || candidate.key === '/') return []
|
||||
return candidate.search(normalizedQuery, normalizedQuery, defaultLocale)
|
||||
const generalSearchTerm = localSearchQuery.trimEnd()
|
||||
return candidate.search(generalSearchTerm, generalSearchTerm, defaultLocale)
|
||||
})
|
||||
}, [actions, defaultLocale, isCommandsMode, trimmedSearchQuery])
|
||||
const activeRemoteQueries = [
|
||||
}, [actions, defaultLocale, isCommandsMode, localSearchQuery, trimmedSearchQuery])
|
||||
const debouncedRemoteQueries = [
|
||||
appSearchEnabled ? appSearchQuery : undefined,
|
||||
knowledgeSearchEnabled ? knowledgeSearchQuery : undefined,
|
||||
pluginSearchEnabled ? pluginSearchQuery : undefined,
|
||||
skillSearchEnabled ? skillSearchQuery : undefined,
|
||||
agentSearchEnabled ? agentSearchQuery : undefined,
|
||||
].filter((query) => query !== undefined)
|
||||
const isDebouncing = remoteSearchEnabled && searchQuery.trim() !== debouncedSearchQuery.trim()
|
||||
const isLoading = isDebouncing || activeRemoteQueries.some((query) => query.isLoading)
|
||||
const failedRemoteQueries = activeRemoteQueries.filter((query) => query.isError)
|
||||
const currentRemoteSearchIdentity = getRemoteSearchIdentity(
|
||||
normalizedSearchQuery,
|
||||
isCommandsMode,
|
||||
currentAction,
|
||||
)
|
||||
const debouncedRemoteSearchIdentity = getRemoteSearchIdentity(
|
||||
normalizedDebouncedQuery,
|
||||
isDebouncedCommandsMode,
|
||||
debouncedAction,
|
||||
)
|
||||
const isSameRemoteSearch =
|
||||
currentRemoteSearchIdentity !== null &&
|
||||
currentRemoteSearchIdentity === debouncedRemoteSearchIdentity
|
||||
const currentRemoteQueries = isSameRemoteSearch ? debouncedRemoteQueries : []
|
||||
const isRemoteSearchDebouncing =
|
||||
currentRemoteSearchIdentity !== null && normalizedSearchQuery !== normalizedDebouncedQuery
|
||||
const isDebouncing = isRemoteSearchDebouncing || isLocalSearchDebouncing
|
||||
const isLoading =
|
||||
isDebouncing || currentRemoteQueries.some((query) => query.isLoading || query.isFetching)
|
||||
const failedRemoteQueries = currentRemoteQueries.filter((query) => query.isError)
|
||||
const isError =
|
||||
activeRemoteQueries.length > 0 && failedRemoteQueries.length === activeRemoteQueries.length
|
||||
currentRemoteQueries.length > 0 && failedRemoteQueries.length === currentRemoteQueries.length
|
||||
const hasUnavailableServices = failedRemoteQueries.length > 0
|
||||
const queryError = failedRemoteQueries[0]?.error
|
||||
const error = queryError instanceof Error ? queryError : null
|
||||
const remoteSearchResults = isDebouncing
|
||||
? []
|
||||
: activeRemoteQueries.flatMap((query) => query.data ?? [])
|
||||
const remoteSearchResults = currentRemoteQueries.flatMap((query) => query.data ?? [])
|
||||
const searchResults = [...localSearchResults, ...remoteSearchResults]
|
||||
const dedupedResults = dedupeSearchResults(searchResults)
|
||||
const groupedResults = groupSearchResults(dedupedResults)
|
||||
@@ -410,8 +471,9 @@ function GotoAnythingDialog() {
|
||||
|
||||
const commandOptions = getCommandOptions(actions, searchQuery)
|
||||
const autocompleteOptions: GotoAnythingOption[] = isCommandsMode ? commandOptions : dedupedResults
|
||||
const visibleOptions = isLoading || isError ? [] : autocompleteOptions
|
||||
const visibleOptions = isError ? [] : autocompleteOptions
|
||||
const autocompleteResultCount = visibleOptions.length
|
||||
const commandRows = chunkArray(commandOptions, 2)
|
||||
|
||||
let autocompleteStatus: string | null = null
|
||||
if (isLoading) autocompleteStatus = t(($) => $['gotoAnything.searching'], { ns: 'app' })
|
||||
@@ -424,10 +486,9 @@ function GotoAnythingDialog() {
|
||||
count: autocompleteResultCount,
|
||||
})
|
||||
|
||||
let emptyStateVariant: 'loading' | 'error' | 'default' | 'no-results' | null = null
|
||||
if (isLoading) emptyStateVariant = 'loading'
|
||||
let emptyStateVariant: 'loading' | 'error' | 'no-results' | null = null
|
||||
if (isLoading && autocompleteResultCount === 0) emptyStateVariant = 'loading'
|
||||
else if (isError) emptyStateVariant = 'error'
|
||||
else if (!trimmedSearchQuery && autocompleteResultCount === 0) emptyStateVariant = 'default'
|
||||
else if (autocompleteResultCount === 0 && !isCommandsMode) emptyStateVariant = 'no-results'
|
||||
|
||||
return (
|
||||
@@ -458,6 +519,7 @@ function GotoAnythingDialog() {
|
||||
onOpenChange={handleAutocompleteOpenChange}
|
||||
itemToStringValue={optionToInputValue}
|
||||
filter={null}
|
||||
grid={isCommandsMode}
|
||||
open
|
||||
inline
|
||||
autoHighlight="always"
|
||||
@@ -477,11 +539,6 @@ function GotoAnythingDialog() {
|
||||
placeholder={t(($) => $['gotoAnything.searchPlaceholder'], { ns: 'app' })}
|
||||
className="px-0"
|
||||
/>
|
||||
{searchMode !== 'general' && (
|
||||
<div className="flex items-center gap-1 rounded-sm bg-gray-100 px-2 py-0.5 text-xs font-medium text-gray-700 dark:bg-gray-800 dark:text-gray-300">
|
||||
<span>{getSearchModeLabel(searchMode)}</span>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<KbdGroup>
|
||||
{GOTO_ANYTHING_HOTKEY.split('+').map((key) => (
|
||||
@@ -518,42 +575,6 @@ function GotoAnythingDialog() {
|
||||
</div>
|
||||
)}
|
||||
|
||||
{!isLoading && !isError && isCommandsMode && autocompleteResultCount > 0 && (
|
||||
<AutocompleteList className="max-h-none overflow-visible p-0">
|
||||
<AutocompleteGroup items={commandOptions}>
|
||||
<AutocompleteGroupLabel className="px-4 pt-4 pb-2 text-left font-mono text-[11px] font-medium tracking-[0.12em] text-text-tertiary uppercase">
|
||||
{isSlashMode
|
||||
? t(($) => $['gotoAnything.groups.commands'], { ns: 'app' })
|
||||
: t(($) => $['gotoAnything.selectSearchType'], { ns: 'app' })}
|
||||
</AutocompleteGroupLabel>
|
||||
<div className="grid grid-cols-1 gap-2 px-4 pb-4 sm:grid-cols-2">
|
||||
<AutocompleteCollection<CommandOption>>
|
||||
{(option) => (
|
||||
<AutocompleteItem
|
||||
key={option.shortcut}
|
||||
value={option}
|
||||
className="group m-0 min-h-18 items-start gap-3 rounded-xl border-[0.5px] border-components-card-border bg-components-card-bg/90 p-3 shadow-xs shadow-shadow-shadow-3 backdrop-blur-sm hover:border-divider-regular hover:bg-state-base-hover-alt data-highlighted:border-state-accent-solid data-highlighted:bg-state-base-hover"
|
||||
onClick={() => selectOption(option)}
|
||||
>
|
||||
<span className="flex size-8 shrink-0 items-center justify-center rounded-lg border-[0.5px] border-divider-regular bg-background-default text-text-tertiary group-data-highlighted:text-text-accent">
|
||||
<span aria-hidden className={`${option.icon} size-4`} />
|
||||
</span>
|
||||
<span className="min-w-0 flex-1 text-left">
|
||||
<span className="block truncate font-mono text-xs font-semibold tracking-[-0.01em] text-text-primary">
|
||||
{option.shortcut}
|
||||
</span>
|
||||
<span className="mt-1 line-clamp-2 block text-xs leading-4 text-text-tertiary">
|
||||
{getCommandOptionDescription(option)}
|
||||
</span>
|
||||
</span>
|
||||
</AutocompleteItem>
|
||||
)}
|
||||
</AutocompleteCollection>
|
||||
</div>
|
||||
</AutocompleteGroup>
|
||||
</AutocompleteList>
|
||||
)}
|
||||
|
||||
{!isLoading && !isError && !isCommandsMode && emptyStateVariant && (
|
||||
<EmptyState
|
||||
variant={emptyStateVariant}
|
||||
@@ -562,46 +583,83 @@ function GotoAnythingDialog() {
|
||||
/>
|
||||
)}
|
||||
|
||||
{!isLoading &&
|
||||
!isError &&
|
||||
!isCommandsMode &&
|
||||
!emptyStateVariant &&
|
||||
autocompleteResultCount > 0 && (
|
||||
<AutocompleteList className="max-h-none overflow-visible p-0">
|
||||
{Object.entries(groupedResults).map(([type, results]) => (
|
||||
<AutocompleteGroup key={type} items={results}>
|
||||
<AutocompleteGroupLabel className="px-4 pt-3 pb-2 text-text-secondary capitalize">
|
||||
{getGroupLabel(type)}
|
||||
</AutocompleteGroupLabel>
|
||||
<AutocompleteCollection<SearchResult>>
|
||||
{(result) => (
|
||||
<AutocompleteList className="max-h-none overflow-visible p-0">
|
||||
{!isLoading && !isError && isCommandsMode && autocompleteResultCount > 0 && (
|
||||
<AutocompleteGroup items={commandOptions} role="rowgroup">
|
||||
<AutocompleteGroupLabel className="px-4 pt-4 pb-2 text-left font-mono text-[11px] font-medium tracking-[0.12em] text-text-tertiary uppercase">
|
||||
{isSlashMode
|
||||
? t(($) => $['gotoAnything.groups.commands'], { ns: 'app' })
|
||||
: t(($) => $['gotoAnything.selectSearchType'], { ns: 'app' })}
|
||||
</AutocompleteGroupLabel>
|
||||
<div className="px-4 pb-4" role="presentation">
|
||||
{commandRows.map((row) => (
|
||||
<AutocompleteRow
|
||||
key={row.map((option) => option.shortcut).join(':')}
|
||||
className="grid grid-cols-2 gap-2"
|
||||
>
|
||||
{row.map((option) => (
|
||||
<AutocompleteItem
|
||||
key={`${result.type}-${result.id}`}
|
||||
value={result}
|
||||
className="mx-2 gap-3 p-3"
|
||||
onClick={() => selectOption(result)}
|
||||
key={option.shortcut}
|
||||
value={option}
|
||||
className="group m-0 min-h-18 items-start gap-3 rounded-xl border-[0.5px] border-components-card-border bg-components-card-bg/90 p-3 shadow-xs shadow-shadow-shadow-3 backdrop-blur-sm hover:border-divider-regular hover:bg-state-base-hover-alt data-highlighted:border-state-accent-solid data-highlighted:bg-state-base-hover"
|
||||
onClick={() => selectOption(option)}
|
||||
>
|
||||
{result.icon}
|
||||
<div className="min-w-0 flex-1">
|
||||
<div className="truncate font-medium text-text-secondary">
|
||||
{result.title}
|
||||
</div>
|
||||
{result.description && (
|
||||
<div className="mt-0.5 truncate text-xs text-text-quaternary">
|
||||
{result.description}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<div className="text-xs text-text-quaternary capitalize">
|
||||
{result.type}
|
||||
</div>
|
||||
<span className="flex size-8 shrink-0 items-center justify-center rounded-lg border-[0.5px] border-divider-regular bg-background-default text-text-tertiary group-data-highlighted:text-text-accent">
|
||||
<span aria-hidden className={`${option.icon} size-4`} />
|
||||
</span>
|
||||
<span className="min-w-0 flex-1 text-left">
|
||||
<span className="block truncate font-mono text-xs font-semibold tracking-[-0.01em] text-text-primary">
|
||||
{option.shortcut}
|
||||
</span>
|
||||
<span className="mt-1 line-clamp-2 block text-xs leading-4 text-text-tertiary">
|
||||
{getCommandOptionDescription(option)}
|
||||
</span>
|
||||
</span>
|
||||
</AutocompleteItem>
|
||||
)}
|
||||
</AutocompleteCollection>
|
||||
</AutocompleteGroup>
|
||||
))}
|
||||
</AutocompleteList>
|
||||
))}
|
||||
</AutocompleteRow>
|
||||
))}
|
||||
</div>
|
||||
</AutocompleteGroup>
|
||||
)}
|
||||
|
||||
{!isError &&
|
||||
!isCommandsMode &&
|
||||
!emptyStateVariant &&
|
||||
autocompleteResultCount > 0 &&
|
||||
Object.entries(groupedResults).map(([type, results]) => (
|
||||
<AutocompleteGroup key={type} items={results}>
|
||||
<AutocompleteGroupLabel className="px-4 pt-3 pb-2 text-text-secondary capitalize">
|
||||
{getGroupLabel(type)}
|
||||
</AutocompleteGroupLabel>
|
||||
<AutocompleteCollection<SearchResult>>
|
||||
{(result) => (
|
||||
<AutocompleteItem
|
||||
key={`${result.type}-${result.id}`}
|
||||
value={result}
|
||||
className="mx-2 gap-3 p-3"
|
||||
onClick={() => selectOption(result)}
|
||||
>
|
||||
{result.icon}
|
||||
<div className="min-w-0 flex-1">
|
||||
<div className="truncate font-medium text-text-secondary">
|
||||
{result.title}
|
||||
</div>
|
||||
{result.description && (
|
||||
<div className="mt-0.5 truncate text-xs text-text-quaternary">
|
||||
{result.description}
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<div className="text-xs text-text-quaternary capitalize">
|
||||
{result.type}
|
||||
</div>
|
||||
</AutocompleteItem>
|
||||
)}
|
||||
</AutocompleteCollection>
|
||||
</AutocompleteGroup>
|
||||
))}
|
||||
</AutocompleteList>
|
||||
</ScrollAreaContent>
|
||||
</ScrollAreaViewport>
|
||||
<ScrollAreaScrollbar>
|
||||
@@ -610,12 +668,9 @@ function GotoAnythingDialog() {
|
||||
</ScrollArea>
|
||||
|
||||
<Footer
|
||||
resultCount={autocompleteResultCount}
|
||||
searchMode={searchMode}
|
||||
isLoading={isLoading}
|
||||
hasUnavailableServices={hasUnavailableServices}
|
||||
isCommandsMode={isCommandsMode}
|
||||
hasQuery={!!searchQuery.trim()}
|
||||
resultCount={trimmedSearchQuery ? autocompleteResultCount : null}
|
||||
canActivate={autocompleteResultCount > 0}
|
||||
hasPartialFailure={hasUnavailableServices && !isError}
|
||||
/>
|
||||
</Autocomplete>
|
||||
<DialogClose className="sr-only">
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "استخدم المظهر الفاتح",
|
||||
"gotoAnything.actions.themeSystem": "سمة النظام",
|
||||
"gotoAnything.actions.themeSystemDesc": "اتبع مظهر نظام التشغيل",
|
||||
"gotoAnything.clearToSearchAll": "امسح @ للبحث في الكل",
|
||||
"gotoAnything.commandHint": "اكتب @ للتصفح حسب الفئة",
|
||||
"gotoAnything.activate": "تفعيل",
|
||||
"gotoAnything.emptyState.noAppsFound": "لم يتم العثور على تطبيقات",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "لم يتم العثور على قواعد معرفة",
|
||||
"gotoAnything.emptyState.noPluginsFound": "لم يتم العثور على إضافات",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "قواعد المعرفة",
|
||||
"gotoAnything.groups.plugins": "إضافات",
|
||||
"gotoAnything.groups.workflowNodes": "عقد سير العمل",
|
||||
"gotoAnything.inScope": "في {{scope}}",
|
||||
"gotoAnything.noMatchingCommands": "لم يتم العثور على أوامر مطابقة",
|
||||
"gotoAnything.noResults": "لم يتم العثور على نتائج",
|
||||
"gotoAnything.pressEscToClose": "اضغط ESC للإغلاق",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} نتيجة",
|
||||
"gotoAnything.resultCount_other": "{{count}} نتائج",
|
||||
"gotoAnything.searchFailed": "فشل البحث",
|
||||
"gotoAnything.searchHint": "ابدأ الكتابة للبحث عن كل شيء على الفور",
|
||||
"gotoAnything.searchPlaceholder": "ابحث أو اكتب @ أو / للأوامر...",
|
||||
"gotoAnything.searchPlaceholder": "ابحث عن أي شيء…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "البحث غير متاح مؤقتًا",
|
||||
"gotoAnything.searchTitle": "ابحث عن أي شيء",
|
||||
"gotoAnything.searching": "جاري البحث...",
|
||||
"gotoAnything.searching": "جاري البحث…",
|
||||
"gotoAnything.selectSearchType": "اختر ما تريد البحث عنه",
|
||||
"gotoAnything.selectToNavigate": "اختر للانتقال",
|
||||
"gotoAnything.servicesUnavailableMessage": "قد تواجه بعض خدمات البحث مشكلات. حاول مرة أخرى لاحقًا.",
|
||||
"gotoAnything.slashHint": "اكتب / لرؤية جميع الأوامر المتاحة",
|
||||
"gotoAnything.someServicesUnavailable": "بعض خدمات البحث غير متوفرة",
|
||||
"gotoAnything.startTyping": "ابدأ الكتابة للبحث",
|
||||
"gotoAnything.tips": "اضغط ↑↓ للتنقل",
|
||||
"gotoAnything.tryDifferentSearch": "جرب مصطلح بحث مختلف",
|
||||
"gotoAnything.useAtForSpecific": "استخدم @ لأنواع محددة",
|
||||
"iconPicker.cancel": "إلغاء",
|
||||
"iconPicker.emoji": "رموز تعبيرية",
|
||||
"iconPicker.image": "صورة",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Verwenden Sie das helle Erscheinungsbild",
|
||||
"gotoAnything.actions.themeSystem": "Systemthema",
|
||||
"gotoAnything.actions.themeSystemDesc": "Folgen Sie dem Aussehen Ihres Betriebssystems",
|
||||
"gotoAnything.clearToSearchAll": "Löschen Sie @, um alle zu durchsuchen",
|
||||
"gotoAnything.commandHint": "Geben Sie @ ein, um nach Kategorie zu suchen",
|
||||
"gotoAnything.activate": "Aktivieren",
|
||||
"gotoAnything.emptyState.noAppsFound": "Keine Apps gefunden",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Keine Wissensdatenbanken gefunden",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Keine Integrationen gefunden",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Wissensdatenbanken",
|
||||
"gotoAnything.groups.plugins": "Integrationen",
|
||||
"gotoAnything.groups.workflowNodes": "Workflow-Knoten",
|
||||
"gotoAnything.inScope": "in {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "Keine übereinstimmenden Befehle gefunden",
|
||||
"gotoAnything.noResults": "Keine Ergebnisse gefunden",
|
||||
"gotoAnything.pressEscToClose": "Drücken Sie ESC, um zu schließen",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} Ergebnis",
|
||||
"gotoAnything.resultCount_other": "{{count}} Ergebnisse",
|
||||
"gotoAnything.searchFailed": "Suche fehlgeschlagen",
|
||||
"gotoAnything.searchHint": "Beginnen Sie mit der Eingabe, um alles sofort zu durchsuchen",
|
||||
"gotoAnything.searchPlaceholder": "Suchen Sie nach Befehlen, oder geben Sie @ ein...",
|
||||
"gotoAnything.searchPlaceholder": "Suchen Sie nach irgendetwas…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Suche vorübergehend nicht verfügbar",
|
||||
"gotoAnything.searchTitle": "Suchen Sie nach irgendetwas",
|
||||
"gotoAnything.searching": "Suche...",
|
||||
"gotoAnything.searching": "Suche…",
|
||||
"gotoAnything.selectSearchType": "Wählen Sie aus, wonach gesucht werden soll",
|
||||
"gotoAnything.selectToNavigate": "Auswählen, um zu navigieren",
|
||||
"gotoAnything.servicesUnavailableMessage": "Bei einigen Suchdiensten können Probleme auftreten. Versuchen Sie es gleich noch einmal.",
|
||||
"gotoAnything.slashHint": "Geben Sie / ein, um alle verfügbaren Befehle anzuzeigen.",
|
||||
"gotoAnything.someServicesUnavailable": "Einige Suchdienste sind nicht verfügbar",
|
||||
"gotoAnything.startTyping": "Beginnen Sie mit der Eingabe, um zu suchen",
|
||||
"gotoAnything.tips": "Drücken Sie ↑↓, um zu navigieren",
|
||||
"gotoAnything.tryDifferentSearch": "Versuchen Sie es mit einem anderen Suchbegriff",
|
||||
"gotoAnything.useAtForSpecific": "Verwenden von @ für bestimmte Typen",
|
||||
"iconPicker.cancel": "Abbrechen",
|
||||
"iconPicker.emoji": "Emoji",
|
||||
"iconPicker.image": "Bild",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Use light appearance",
|
||||
"gotoAnything.actions.themeSystem": "System Theme",
|
||||
"gotoAnything.actions.themeSystemDesc": "Follow your OS appearance",
|
||||
"gotoAnything.clearToSearchAll": "Clear @ to search all",
|
||||
"gotoAnything.commandHint": "Type @ to browse by category",
|
||||
"gotoAnything.activate": "Activate",
|
||||
"gotoAnything.emptyState.noAppsFound": "No apps found",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "No knowledge bases found",
|
||||
"gotoAnything.emptyState.noPluginsFound": "No integrations found",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Knowledge Bases",
|
||||
"gotoAnything.groups.plugins": "Integrations",
|
||||
"gotoAnything.groups.workflowNodes": "Workflow Nodes",
|
||||
"gotoAnything.inScope": "in {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "No matching commands found",
|
||||
"gotoAnything.noResults": "No results found",
|
||||
"gotoAnything.pressEscToClose": "Press ESC to close",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} result",
|
||||
"gotoAnything.resultCount_other": "{{count}} results",
|
||||
"gotoAnything.searchFailed": "Search failed",
|
||||
"gotoAnything.searchHint": "Start typing to search everything instantly",
|
||||
"gotoAnything.searchPlaceholder": "Search or type @ or / for commands...",
|
||||
"gotoAnything.searchPlaceholder": "Search for anything…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Search temporarily unavailable",
|
||||
"gotoAnything.searchTitle": "Search for anything",
|
||||
"gotoAnything.searching": "Searching...",
|
||||
"gotoAnything.searching": "Searching…",
|
||||
"gotoAnything.selectSearchType": "Choose what to search for",
|
||||
"gotoAnything.selectToNavigate": "Select to navigate",
|
||||
"gotoAnything.servicesUnavailableMessage": "Some search services may be experiencing issues. Try again in a moment.",
|
||||
"gotoAnything.slashHint": "Type / to see all available commands",
|
||||
"gotoAnything.someServicesUnavailable": "Some search services unavailable",
|
||||
"gotoAnything.startTyping": "Start typing to search",
|
||||
"gotoAnything.tips": "Press ↑↓ to navigate",
|
||||
"gotoAnything.tryDifferentSearch": "Try a different search term",
|
||||
"gotoAnything.useAtForSpecific": "Use @ for specific types",
|
||||
"iconPicker.cancel": "Cancel",
|
||||
"iconPicker.emoji": "Emoji",
|
||||
"iconPicker.image": "Image",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Usar apariencia clara",
|
||||
"gotoAnything.actions.themeSystem": "Tema del sistema",
|
||||
"gotoAnything.actions.themeSystemDesc": "Sigue la apariencia de tu sistema operativo",
|
||||
"gotoAnything.clearToSearchAll": "Borrar @ para buscar todo",
|
||||
"gotoAnything.commandHint": "Escriba @ para buscar por categoría",
|
||||
"gotoAnything.activate": "Activar",
|
||||
"gotoAnything.emptyState.noAppsFound": "No se encontraron aplicaciones",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "No se han encontrado bases de conocimiento",
|
||||
"gotoAnything.emptyState.noPluginsFound": "No se encontraron complementos",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Bases de conocimiento",
|
||||
"gotoAnything.groups.plugins": "Complementos",
|
||||
"gotoAnything.groups.workflowNodes": "Nodos de flujo de trabajo",
|
||||
"gotoAnything.inScope": "en {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "No se encontraron comandos coincidentes",
|
||||
"gotoAnything.noResults": "No se han encontrado resultados",
|
||||
"gotoAnything.pressEscToClose": "Presiona ESC para cerrar",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} resultado",
|
||||
"gotoAnything.resultCount_other": "{{count}} resultados",
|
||||
"gotoAnything.searchFailed": "Error de búsqueda",
|
||||
"gotoAnything.searchHint": "Empieza a escribir para buscar todo al instante",
|
||||
"gotoAnything.searchPlaceholder": "Busque o escriba @ para los comandos...",
|
||||
"gotoAnything.searchPlaceholder": "Busca cualquier cosa…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "La búsqueda no está disponible temporalmente",
|
||||
"gotoAnything.searchTitle": "Busca cualquier cosa",
|
||||
"gotoAnything.searching": "Buscando...",
|
||||
"gotoAnything.searching": "Buscando…",
|
||||
"gotoAnything.selectSearchType": "Elige qué buscar",
|
||||
"gotoAnything.selectToNavigate": "Seleccionar para navegar",
|
||||
"gotoAnything.servicesUnavailableMessage": "Algunos servicios de búsqueda pueden estar experimentando problemas. Inténtalo de nuevo en un momento.",
|
||||
"gotoAnything.slashHint": "Escribe / para ver todos los comandos disponibles",
|
||||
"gotoAnything.someServicesUnavailable": "Algunos servicios de búsqueda no están disponibles",
|
||||
"gotoAnything.startTyping": "Empieza a escribir para buscar",
|
||||
"gotoAnything.tips": "Presiona ↑↓ para navegar",
|
||||
"gotoAnything.tryDifferentSearch": "Prueba con un término de búsqueda diferente",
|
||||
"gotoAnything.useAtForSpecific": "Use @ para tipos específicos",
|
||||
"iconPicker.cancel": "Cancelar",
|
||||
"iconPicker.emoji": "Emoji",
|
||||
"iconPicker.image": "Imagen",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "از ظاهر روشن استفاده کنید",
|
||||
"gotoAnything.actions.themeSystem": "تم سیستم",
|
||||
"gotoAnything.actions.themeSystemDesc": "به ظاهر سیستمعامل خود پایبند باشید",
|
||||
"gotoAnything.clearToSearchAll": "پاک کردن @ برای جستجوی همه",
|
||||
"gotoAnything.commandHint": "@ را برای مرور بر اساس دسته بندی تایپ کنید",
|
||||
"gotoAnything.activate": "فعال کردن",
|
||||
"gotoAnything.emptyState.noAppsFound": "هیچ برنامه ای یافت نشد",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "هیچ پایگاه دانش یافت نشد",
|
||||
"gotoAnything.emptyState.noPluginsFound": "هیچ یکپارچهسازی ای یافت نشد",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "پایگاه های دانش",
|
||||
"gotoAnything.groups.plugins": "یکپارچهسازی",
|
||||
"gotoAnything.groups.workflowNodes": "گره های گردش کار",
|
||||
"gotoAnything.inScope": "در {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "هیچ دستوری منطبق یافت نشد",
|
||||
"gotoAnything.noResults": "هیچ نتیجه ای یافت نشد",
|
||||
"gotoAnything.pressEscToClose": "برای بستن ESC را فشار دهید",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} نتیجه",
|
||||
"gotoAnything.resultCount_other": "{{count}} نتیجه",
|
||||
"gotoAnything.searchFailed": "جستجو انجام نشد",
|
||||
"gotoAnything.searchHint": "شروع به تایپ کنید تا فورا همه چیز را جستجو کنید",
|
||||
"gotoAnything.searchPlaceholder": "جستجو یا تایپ @ برای دستورات...",
|
||||
"gotoAnything.searchPlaceholder": "هر چیزی را جستجو کنید…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "جستجو به طور موقت در دسترس نیست",
|
||||
"gotoAnything.searchTitle": "هر چیزی را جستجو کنید",
|
||||
"gotoAnything.searching": "جستجو...",
|
||||
"gotoAnything.searching": "جستجو…",
|
||||
"gotoAnything.selectSearchType": "انتخاب کنید چه چیزی را جستجو کنید",
|
||||
"gotoAnything.selectToNavigate": "انتخاب کنید تا برای حرکت",
|
||||
"gotoAnything.servicesUnavailableMessage": "برخی از سرویس های جستجو ممکن است با مشکل مواجه شوند. یک لحظه دیگر دوباره امتحان کنید.",
|
||||
"gotoAnything.slashHint": "برای مشاهده تمام دستورات موجود / را تایپ کنید",
|
||||
"gotoAnything.someServicesUnavailable": "برخی از سرویس های جستجو دردسترس نیستند",
|
||||
"gotoAnything.startTyping": "برای جستجو شروع به تایپ کنید",
|
||||
"gotoAnything.tips": "برای حرکت به بالا و پایین کلیدهای ↑ و ↓ را فشار دهید",
|
||||
"gotoAnything.tryDifferentSearch": "عبارت جستجوی دیگری را امتحان کنید",
|
||||
"gotoAnything.useAtForSpecific": "از @ برای انواع خاص استفاده کنید",
|
||||
"iconPicker.cancel": "لغو",
|
||||
"iconPicker.emoji": "ایموجی",
|
||||
"iconPicker.image": "تصویر",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Utiliser une apparence légère",
|
||||
"gotoAnything.actions.themeSystem": "Thème du système",
|
||||
"gotoAnything.actions.themeSystemDesc": "Suivez l'apparence de votre système d'exploitation",
|
||||
"gotoAnything.clearToSearchAll": "Effacer @ pour rechercher tout",
|
||||
"gotoAnything.commandHint": "Tapez @ pour parcourir par catégorie",
|
||||
"gotoAnything.activate": "Activer",
|
||||
"gotoAnything.emptyState.noAppsFound": "Aucune application trouvée",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Aucune base de connaissances trouvée",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Aucun intégration trouvé",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Bases de connaissances",
|
||||
"gotoAnything.groups.plugins": "Plug-ins",
|
||||
"gotoAnything.groups.workflowNodes": "Nœuds de flux de travail",
|
||||
"gotoAnything.inScope": "dans {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "Aucune commande correspondante n’a été trouvée",
|
||||
"gotoAnything.noResults": "Aucun résultat trouvé",
|
||||
"gotoAnything.pressEscToClose": "Appuyez sur Échap pour fermer",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} résultat",
|
||||
"gotoAnything.resultCount_other": "{{count}} résultats",
|
||||
"gotoAnything.searchFailed": "Echec de la recherche",
|
||||
"gotoAnything.searchHint": "Commencez à taper pour tout rechercher instantanément",
|
||||
"gotoAnything.searchPlaceholder": "Recherchez ou tapez @ pour les commandes...",
|
||||
"gotoAnything.searchPlaceholder": "Recherchez n'importe quoi…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Recherche temporairement indisponible",
|
||||
"gotoAnything.searchTitle": "Recherchez n'importe quoi",
|
||||
"gotoAnything.searching": "Recherche...",
|
||||
"gotoAnything.searching": "Recherche…",
|
||||
"gotoAnything.selectSearchType": "Choisissez les éléments de recherche",
|
||||
"gotoAnything.selectToNavigate": "Sélectionnez pour naviguer",
|
||||
"gotoAnything.servicesUnavailableMessage": "Certains services de recherche peuvent rencontrer des problèmes. Réessayez dans un instant.",
|
||||
"gotoAnything.slashHint": "Tapez / pour voir toutes les commandes disponibles",
|
||||
"gotoAnything.someServicesUnavailable": "Certains services de recherche indisponibles",
|
||||
"gotoAnything.startTyping": "Commencez à taper pour rechercher",
|
||||
"gotoAnything.tips": "Appuyez sur ↑↓ pour naviguer",
|
||||
"gotoAnything.tryDifferentSearch": "Essayez un autre terme de recherche",
|
||||
"gotoAnything.useAtForSpecific": "Utilisez @ pour des types spécifiques",
|
||||
"iconPicker.cancel": "Annuler",
|
||||
"iconPicker.emoji": "Emoji",
|
||||
"iconPicker.image": "Image",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "हल्की उपस्थिति का प्रयोग करें",
|
||||
"gotoAnything.actions.themeSystem": "सिस्टम थीम",
|
||||
"gotoAnything.actions.themeSystemDesc": "अपने ऑपरेटिंग सिस्टम की उपस्थिति का पालन करें",
|
||||
"gotoAnything.clearToSearchAll": "साफ़ @ सभी खोजने के लिए",
|
||||
"gotoAnything.commandHint": "@ का उपयोग कर श्रेणी के अनुसार ब्राउज़ करें",
|
||||
"gotoAnything.activate": "सक्रिय करें",
|
||||
"gotoAnything.emptyState.noAppsFound": "कोई ऐप्स नहीं मिले",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "कोई ज्ञान आधार नहीं मिले",
|
||||
"gotoAnything.emptyState.noPluginsFound": "कोई एकीकरण नहीं मिले",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "ज्ञान आधार",
|
||||
"gotoAnything.groups.plugins": "एकीकरण",
|
||||
"gotoAnything.groups.workflowNodes": "कार्यप्रवाह नोड्स",
|
||||
"gotoAnything.inScope": "{{scope}}s में",
|
||||
"gotoAnything.noMatchingCommands": "कोई मिलती-जुलती कमांड्स नहीं मिलीं",
|
||||
"gotoAnything.noResults": "कोई परिणाम नहीं मिले",
|
||||
"gotoAnything.pressEscToClose": "बंद करने के लिए ESC दबाएं",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} परिणाम",
|
||||
"gotoAnything.resultCount_other": "{{count}} परिणाम",
|
||||
"gotoAnything.searchFailed": "खोज विफल रहा",
|
||||
"gotoAnything.searchHint": "सब कुछ तुरंत खोजने के लिए टाइप करना शुरू करें",
|
||||
"gotoAnything.searchPlaceholder": "कमांड के लिए खोजें या टाइप करें @...",
|
||||
"gotoAnything.searchPlaceholder": "किसी भी चीज़ की खोज करें…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "खोज अस्थायी रूप से उपलब्ध नहीं है",
|
||||
"gotoAnything.searchTitle": "किसी भी चीज़ की खोज करें",
|
||||
"gotoAnything.searching": "खोजना...",
|
||||
"gotoAnything.searching": "खोजना…",
|
||||
"gotoAnything.selectSearchType": "खोजने के लिए क्या चुनें",
|
||||
"gotoAnything.selectToNavigate": "नेविगेट करने के लिए चुनें",
|
||||
"gotoAnything.servicesUnavailableMessage": "कुछ खोज सेवाएँ समस्याओं का सामना कर सकती हैं। थोड़ी देर बाद फिर से प्रयास करें।",
|
||||
"gotoAnything.slashHint": "सभी उपलब्ध कमांड देखने के लिए टाइप करें /",
|
||||
"gotoAnything.someServicesUnavailable": "कुछ खोज सेवाएँ उपलब्ध नहीं हैं",
|
||||
"gotoAnything.startTyping": "खोजने के लिए टाइप करना शुरू करें",
|
||||
"gotoAnything.tips": "नेविगेट करने के लिए ↑↓ दबाएँ",
|
||||
"gotoAnything.tryDifferentSearch": "एक अलग खोज शब्द आजमाएँ",
|
||||
"gotoAnything.useAtForSpecific": "@ का उपयोग विशिष्ट प्रकारों के लिए करें",
|
||||
"iconPicker.cancel": "रद्द करें",
|
||||
"iconPicker.emoji": "इमोजी",
|
||||
"iconPicker.image": "छवि",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Gunakan penampilan ringan",
|
||||
"gotoAnything.actions.themeSystem": "Tema Sistem",
|
||||
"gotoAnything.actions.themeSystemDesc": "Ikuti tampilan OS Anda",
|
||||
"gotoAnything.clearToSearchAll": "Hapus @ untuk mencari semua",
|
||||
"gotoAnything.commandHint": "Ketik @ untuk menelusuri berdasarkan kategori",
|
||||
"gotoAnything.activate": "Aktifkan",
|
||||
"gotoAnything.emptyState.noAppsFound": "Tidak ada aplikasi yang ditemukan",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Tidak ada basis pengetahuan yang ditemukan",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Tidak ada integrasi yang ditemukan",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Basis Pengetahuan",
|
||||
"gotoAnything.groups.plugins": "Integrasi",
|
||||
"gotoAnything.groups.workflowNodes": "Node Alur Kerja",
|
||||
"gotoAnything.inScope": "di {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "Tidak ada perintah yang cocok ditemukan",
|
||||
"gotoAnything.noResults": "Tidak ada hasil yang ditemukan",
|
||||
"gotoAnything.pressEscToClose": "Tekan ESC untuk menutup",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "hasil {{count}}",
|
||||
"gotoAnything.resultCount_other": "hasil {{count}}",
|
||||
"gotoAnything.searchFailed": "Pencarian gagal",
|
||||
"gotoAnything.searchHint": "Mulailah mengetik untuk mencari semuanya secara instan",
|
||||
"gotoAnything.searchPlaceholder": "Cari atau ketik @ atau / untuk perintah...",
|
||||
"gotoAnything.searchPlaceholder": "Cari apa pun…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Penelusuran tidak tersedia untuk sementara",
|
||||
"gotoAnything.searchTitle": "Cari apa pun",
|
||||
"gotoAnything.searching": "Mencari...",
|
||||
"gotoAnything.searching": "Mencari…",
|
||||
"gotoAnything.selectSearchType": "Pilih apa yang akan dicari",
|
||||
"gotoAnything.selectToNavigate": "Pilih untuk menavigasi",
|
||||
"gotoAnything.servicesUnavailableMessage": "Beberapa layanan penelusuran mungkin mengalami masalah. Coba lagi sebentar lagi.",
|
||||
"gotoAnything.slashHint": "Ketik / untuk melihat semua perintah yang tersedia",
|
||||
"gotoAnything.someServicesUnavailable": "Beberapa layanan penelusuran tidak tersedia",
|
||||
"gotoAnything.startTyping": "Mulai mengetik untuk mencari",
|
||||
"gotoAnything.tips": "Tekan ↑↓ untuk menavigasi",
|
||||
"gotoAnything.tryDifferentSearch": "Coba istilah penelusuran lain",
|
||||
"gotoAnything.useAtForSpecific": "Gunakan @ untuk jenis tertentu",
|
||||
"iconPicker.cancel": "Batal",
|
||||
"iconPicker.emoji": "Emoji",
|
||||
"iconPicker.image": "Citra",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Usa un aspetto chiaro",
|
||||
"gotoAnything.actions.themeSystem": "Tema di sistema",
|
||||
"gotoAnything.actions.themeSystemDesc": "Segui l'aspetto del tuo sistema operativo",
|
||||
"gotoAnything.clearToSearchAll": "Cancella @ per cercare tutto",
|
||||
"gotoAnything.commandHint": "Digita @ per sfogliare per categoria",
|
||||
"gotoAnything.activate": "Attiva",
|
||||
"gotoAnything.emptyState.noAppsFound": "Nessuna app trovata",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Nessuna base di conoscenza trovata",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Nessun integrazione trovato",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Basi di conoscenza",
|
||||
"gotoAnything.groups.plugins": "Integrazione",
|
||||
"gotoAnything.groups.workflowNodes": "Nodi del flusso di lavoro",
|
||||
"gotoAnything.inScope": "in {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "Nessun comando corrispondente trovato",
|
||||
"gotoAnything.noResults": "Nessun risultato trovato",
|
||||
"gotoAnything.pressEscToClose": "Premi ESC per chiudere",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} risultato",
|
||||
"gotoAnything.resultCount_other": "{{count}} risultati",
|
||||
"gotoAnything.searchFailed": "Ricerca non riuscita",
|
||||
"gotoAnything.searchHint": "Inizia a digitare per cercare tutto all'istante",
|
||||
"gotoAnything.searchPlaceholder": "Cerca o digita @ per i comandi...",
|
||||
"gotoAnything.searchPlaceholder": "Cerca qualsiasi cosa…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Ricerca temporaneamente non disponibile",
|
||||
"gotoAnything.searchTitle": "Cerca qualsiasi cosa",
|
||||
"gotoAnything.searching": "Ricerca in corso...",
|
||||
"gotoAnything.searching": "Ricerca in corso…",
|
||||
"gotoAnything.selectSearchType": "Scegli cosa cercare",
|
||||
"gotoAnything.selectToNavigate": "Seleziona per navigare",
|
||||
"gotoAnything.servicesUnavailableMessage": "Alcuni servizi di ricerca potrebbero riscontrare problemi. Riprova tra un attimo.",
|
||||
"gotoAnything.slashHint": "Digita / per vedere tutti i comandi disponibili",
|
||||
"gotoAnything.someServicesUnavailable": "Alcuni servizi di ricerca non sono disponibili",
|
||||
"gotoAnything.startTyping": "Inizia a digitare per cercare",
|
||||
"gotoAnything.tips": "Premi ↑↓ per navigare",
|
||||
"gotoAnything.tryDifferentSearch": "Prova un termine di ricerca diverso",
|
||||
"gotoAnything.useAtForSpecific": "Utilizzare @ per tipi specifici",
|
||||
"iconPicker.cancel": "Annulla",
|
||||
"iconPicker.emoji": "Emoji",
|
||||
"iconPicker.image": "Immagine",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "明るい外観を使用する",
|
||||
"gotoAnything.actions.themeSystem": "システムテーマ",
|
||||
"gotoAnything.actions.themeSystemDesc": "OSの外観に従ってください",
|
||||
"gotoAnything.clearToSearchAll": "@ をクリアしてすべてを検索",
|
||||
"gotoAnything.commandHint": "@ を入力してカテゴリ別に参照",
|
||||
"gotoAnything.activate": "実行",
|
||||
"gotoAnything.emptyState.noAppsFound": "アプリが見つかりません",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "ナレッジベースが見つかりません",
|
||||
"gotoAnything.emptyState.noPluginsFound": "インテグレーションが見つかりません",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "ナレッジベース",
|
||||
"gotoAnything.groups.plugins": "インテグレーション",
|
||||
"gotoAnything.groups.workflowNodes": "ワークフローノード",
|
||||
"gotoAnything.inScope": "{{scope}}s 内",
|
||||
"gotoAnything.noMatchingCommands": "一致するコマンドが見つかりません",
|
||||
"gotoAnything.noResults": "結果が見つかりません",
|
||||
"gotoAnything.pressEscToClose": "ESC で閉じる",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} 件の結果",
|
||||
"gotoAnything.resultCount_other": "{{count}} 件の結果",
|
||||
"gotoAnything.searchFailed": "検索に失敗しました",
|
||||
"gotoAnything.searchHint": "入力を開始してすべてを瞬時に検索",
|
||||
"gotoAnything.searchPlaceholder": "検索するか、@ を入力してコマンドを使用...",
|
||||
"gotoAnything.searchPlaceholder": "何でも検索…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "検索が一時的に利用できません",
|
||||
"gotoAnything.searchTitle": "何でも検索",
|
||||
"gotoAnything.searching": "検索中...",
|
||||
"gotoAnything.searching": "検索中…",
|
||||
"gotoAnything.selectSearchType": "検索対象を選択",
|
||||
"gotoAnything.selectToNavigate": "選択してナビゲート",
|
||||
"gotoAnything.servicesUnavailableMessage": "一部の検索サービスで問題が発生している可能性があります。しばらくしてからもう一度お試しください。",
|
||||
"gotoAnything.slashHint": "/ を入力してすべてのコマンドを表示",
|
||||
"gotoAnything.someServicesUnavailable": "一部の検索サービスが利用できません",
|
||||
"gotoAnything.startTyping": "入力を開始して検索",
|
||||
"gotoAnything.tips": "↑↓ でナビゲート",
|
||||
"gotoAnything.tryDifferentSearch": "別の検索語句をお試しください",
|
||||
"gotoAnything.useAtForSpecific": "特定のタイプには @ を使用",
|
||||
"iconPicker.cancel": "キャンセル",
|
||||
"iconPicker.emoji": "絵文字",
|
||||
"iconPicker.image": "画像",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "밝은 외관 사용",
|
||||
"gotoAnything.actions.themeSystem": "시스템 테마",
|
||||
"gotoAnything.actions.themeSystemDesc": "운영 체제의 외관을 따르세요",
|
||||
"gotoAnything.clearToSearchAll": "@를 지우면 모두 검색됩니다.",
|
||||
"gotoAnything.commandHint": "@를 입력하여 카테고리별로 찾아봅니다.",
|
||||
"gotoAnything.activate": "실행",
|
||||
"gotoAnything.emptyState.noAppsFound": "앱을 찾을 수 없습니다.",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "기술 자료를 찾을 수 없습니다.",
|
||||
"gotoAnything.emptyState.noPluginsFound": "통합을 찾을 수 없습니다.",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "기술 자료",
|
||||
"gotoAnything.groups.plugins": "통합",
|
||||
"gotoAnything.groups.workflowNodes": "워크플로 노드",
|
||||
"gotoAnything.inScope": "{{scope}}s 내에서",
|
||||
"gotoAnything.noMatchingCommands": "일치하는 명령을 찾을 수 없습니다.",
|
||||
"gotoAnything.noResults": "결과를 찾을 수 없습니다.",
|
||||
"gotoAnything.pressEscToClose": "ESC를 눌러 닫기",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} 개 결과",
|
||||
"gotoAnything.resultCount_other": "{{count}} 개 결과",
|
||||
"gotoAnything.searchFailed": "검색 실패",
|
||||
"gotoAnything.searchHint": "즉시 모든 것을 검색하려면 입력을 시작하세요.",
|
||||
"gotoAnything.searchPlaceholder": "명령을 검색하거나 @를 입력합니다...",
|
||||
"gotoAnything.searchPlaceholder": "무엇이든 검색…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "일시적으로 검색할 수 없음",
|
||||
"gotoAnything.searchTitle": "무엇이든 검색",
|
||||
"gotoAnything.searching": "검색...",
|
||||
"gotoAnything.searching": "검색…",
|
||||
"gotoAnything.selectSearchType": "검색할 항목 선택",
|
||||
"gotoAnything.selectToNavigate": "선택하여 탐색하기",
|
||||
"gotoAnything.servicesUnavailableMessage": "일부 검색 서비스에서 문제가 발생할 수 있습니다. 잠시 후에 다시 시도하십시오.",
|
||||
"gotoAnything.slashHint": "모든 사용 가능한 명령을 보려면 /를 입력하세요.",
|
||||
"gotoAnything.someServicesUnavailable": "일부 검색 서비스를 사용할 수 없습니다.",
|
||||
"gotoAnything.startTyping": "검색하려면 타이핑을 시작하세요",
|
||||
"gotoAnything.tips": "↑↓ 키를 눌러 탐색하세요",
|
||||
"gotoAnything.tryDifferentSearch": "다른 검색어 사용해 보기",
|
||||
"gotoAnything.useAtForSpecific": "특정 형식에 @ 사용",
|
||||
"iconPicker.cancel": "취소",
|
||||
"iconPicker.emoji": "이모지",
|
||||
"iconPicker.image": "이미지",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "ໃຊ້ຮູບແບບສີແຈ້ງ",
|
||||
"gotoAnything.actions.themeSystem": "ຮູບແບບຕາມລະບົບ",
|
||||
"gotoAnything.actions.themeSystemDesc": "ໃຊ້ຮູບແບບຕາມການຕັ້ງຄ່າຂອງລະບົບປະຕິບັດການ",
|
||||
"gotoAnything.clearToSearchAll": "ລຶບ @ ເພື່ອຄົ້ນຫາທັງໝົດ",
|
||||
"gotoAnything.commandHint": "ພິມ @ ເພື່ອເບິ່ງຕາມໝວດໝູ່",
|
||||
"gotoAnything.activate": "ເປີດໃຊ້ງານ",
|
||||
"gotoAnything.emptyState.noAppsFound": "ບໍ່ພົບແອັບ",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "ບໍ່ພົບຄັງຄວາມຮູ້",
|
||||
"gotoAnything.emptyState.noPluginsFound": "ບໍ່ພົບການເຊື່ອມຕໍ່",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "ຄັງຄວາມຮູ້",
|
||||
"gotoAnything.groups.plugins": "ການເຊື່ອມຕໍ່",
|
||||
"gotoAnything.groups.workflowNodes": "ໂນດໃນ Workflow",
|
||||
"gotoAnything.inScope": "ໃນ {{scope}}",
|
||||
"gotoAnything.noMatchingCommands": "ບໍ່ພົບຄຳສັ່ງທີ່ກົງກັນ",
|
||||
"gotoAnything.noResults": "ບໍ່ພົບຜົນການຄົ້ນຫາ",
|
||||
"gotoAnything.pressEscToClose": "ກົດ ESC ເພື່ອປິດ",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} ຜົນລາຍການ",
|
||||
"gotoAnything.resultCount_other": "{{count}} ຜົນລາຍການ",
|
||||
"gotoAnything.searchFailed": "ການຄົ້ນຫາລົ້ມເຫຼວ",
|
||||
"gotoAnything.searchHint": "ເລີ່ມພິມເພື່ອຄົ້ນຫາທຸກຢ່າງທັນທີ",
|
||||
"gotoAnything.searchPlaceholder": "ຄົ້ນຫາ ຫຼື ພິມ @ ຫຼື / ສຳລັບຄຳສັ່ງ...",
|
||||
"gotoAnything.searchPlaceholder": "ຄົ້ນຫາທຸກສິ່ງ…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "ການຄົ້ນຫາບໍ່ສາມາດໃຊ້ງານໄດ້ຊົ່ວຄາວ",
|
||||
"gotoAnything.searchTitle": "ຄົ້ນຫາທຸກສິ່ງ",
|
||||
"gotoAnything.searching": "ກຳລັງຄົ້ນຫາ...",
|
||||
"gotoAnything.searching": "ກຳລັງຄົ້ນຫາ…",
|
||||
"gotoAnything.selectSearchType": "ເລືອກສິ່ງທີ່ຕ້ອງການຄົ້ນຫາ",
|
||||
"gotoAnything.selectToNavigate": "ເລືອກເພື່ອໄປຫາ",
|
||||
"gotoAnything.servicesUnavailableMessage": "ບໍລິການຄົ້ນຫາບາງຢ່າງອາດມີບັນຫາ. ກະລຸນາລອງໃໝ່ໃນອີກຈັກບຶດ.",
|
||||
"gotoAnything.slashHint": "ພິມ / ເພື່ອເບິ່ງຄຳສັ່ງທັງໝົດທີ່ມີ",
|
||||
"gotoAnything.someServicesUnavailable": "ບາງບໍລິການຄົ້ນຫາບໍ່ສາມາດໃຊ້ງານໄດ້",
|
||||
"gotoAnything.startTyping": "ເລີ່ມພິມເພື່ອຄົ້ນຫາ",
|
||||
"gotoAnything.tips": "ກົດ ↑↓ ເພື່ອເລື່ອນ",
|
||||
"gotoAnything.tryDifferentSearch": "ລອງໃຊ້ຄຳຄົ້ນຫາອື່ນ",
|
||||
"gotoAnything.useAtForSpecific": "ໃຊ້ @ ສຳລັບປະເພດສະເພາະ",
|
||||
"iconPicker.cancel": "ຍົກເລີກ",
|
||||
"iconPicker.emoji": "ອີໂມຈິ",
|
||||
"iconPicker.image": "ຮູບພາບ",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Use light appearance",
|
||||
"gotoAnything.actions.themeSystem": "System Theme",
|
||||
"gotoAnything.actions.themeSystemDesc": "Follow your OS appearance",
|
||||
"gotoAnything.clearToSearchAll": "Clear @ to search all",
|
||||
"gotoAnything.commandHint": "Type @ to browse by category",
|
||||
"gotoAnything.activate": "Activeren",
|
||||
"gotoAnything.emptyState.noAppsFound": "No apps found",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "No knowledge bases found",
|
||||
"gotoAnything.emptyState.noPluginsFound": "No integraties found",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Knowledge Bases",
|
||||
"gotoAnything.groups.plugins": "Integraties",
|
||||
"gotoAnything.groups.workflowNodes": "Workflow Nodes",
|
||||
"gotoAnything.inScope": "in {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "No matching commands found",
|
||||
"gotoAnything.noResults": "No results found",
|
||||
"gotoAnything.pressEscToClose": "Press ESC to close",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} result",
|
||||
"gotoAnything.resultCount_other": "{{count}} results",
|
||||
"gotoAnything.searchFailed": "Search failed",
|
||||
"gotoAnything.searchHint": "Start typing to search everything instantly",
|
||||
"gotoAnything.searchPlaceholder": "Search or type @ or / for commands...",
|
||||
"gotoAnything.searchPlaceholder": "Search for anything…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Search temporarily unavailable",
|
||||
"gotoAnything.searchTitle": "Search for anything",
|
||||
"gotoAnything.searching": "Searching...",
|
||||
"gotoAnything.searching": "Searching…",
|
||||
"gotoAnything.selectSearchType": "Choose what to search for",
|
||||
"gotoAnything.selectToNavigate": "Select to navigate",
|
||||
"gotoAnything.servicesUnavailableMessage": "Some search services may be experiencing issues. Try again in a moment.",
|
||||
"gotoAnything.slashHint": "Type / to see all available commands",
|
||||
"gotoAnything.someServicesUnavailable": "Some search services unavailable",
|
||||
"gotoAnything.startTyping": "Start typing to search",
|
||||
"gotoAnything.tips": "Press ↑↓ to navigate",
|
||||
"gotoAnything.tryDifferentSearch": "Try a different search term",
|
||||
"gotoAnything.useAtForSpecific": "Use @ for specific types",
|
||||
"iconPicker.cancel": "Cancel",
|
||||
"iconPicker.emoji": "Emoji",
|
||||
"iconPicker.image": "Image",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Użyj jasnego wyglądu",
|
||||
"gotoAnything.actions.themeSystem": "Motyw systemu",
|
||||
"gotoAnything.actions.themeSystemDesc": "Podążaj za wyglądem swojego systemu operacyjnego",
|
||||
"gotoAnything.clearToSearchAll": "Wyczyść @, aby przeszukać wszystko",
|
||||
"gotoAnything.commandHint": "Wpisz @, aby przeglądać według kategorii",
|
||||
"gotoAnything.activate": "Aktywuj",
|
||||
"gotoAnything.emptyState.noAppsFound": "Nie znaleziono aplikacji",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Nie znaleziono baz wiedzy",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Nie znaleziono wtyczek",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Bazy wiedzy",
|
||||
"gotoAnything.groups.plugins": "Integracje",
|
||||
"gotoAnything.groups.workflowNodes": "Węzły przepływu pracy",
|
||||
"gotoAnything.inScope": "w {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "Nie znaleziono pasujących poleceń",
|
||||
"gotoAnything.noResults": "Nie znaleziono wyników",
|
||||
"gotoAnything.pressEscToClose": "Naciśnij ESC, aby zamknąć",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} wynik",
|
||||
"gotoAnything.resultCount_other": "{{count}} wyników",
|
||||
"gotoAnything.searchFailed": "Wyszukiwanie nie powiodło się",
|
||||
"gotoAnything.searchHint": "Zacznij pisać, aby natychmiast wszystko przeszukać",
|
||||
"gotoAnything.searchPlaceholder": "Wyszukaj lub wpisz @ dla poleceń...",
|
||||
"gotoAnything.searchPlaceholder": "Szukaj czegokolwiek…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Wyszukiwanie chwilowo niedostępne",
|
||||
"gotoAnything.searchTitle": "Szukaj czegokolwiek",
|
||||
"gotoAnything.searching": "Wyszukiwanie...",
|
||||
"gotoAnything.searching": "Wyszukiwanie…",
|
||||
"gotoAnything.selectSearchType": "Wybierz, czego chcesz szukać",
|
||||
"gotoAnything.selectToNavigate": "Wybierz, aby nawigować",
|
||||
"gotoAnything.servicesUnavailableMessage": "W przypadku niektórych usług wyszukiwania mogą występować problemy. Spróbuj ponownie za chwilę.",
|
||||
"gotoAnything.slashHint": "Wpisz / aby zobaczyć wszystkie dostępne polecenia",
|
||||
"gotoAnything.someServicesUnavailable": "Niektóre usługi wyszukiwania są niedostępne",
|
||||
"gotoAnything.startTyping": "Zacznij pisać, aby wyszukać",
|
||||
"gotoAnything.tips": "Naciśnij ↑↓, aby nawigować",
|
||||
"gotoAnything.tryDifferentSearch": "Spróbuj użyć innego hasła",
|
||||
"gotoAnything.useAtForSpecific": "Użyj @ dla określonych typów",
|
||||
"iconPicker.cancel": "Anuluj",
|
||||
"iconPicker.emoji": "Emoji",
|
||||
"iconPicker.image": "Obraz",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Use aparência clara",
|
||||
"gotoAnything.actions.themeSystem": "Tema do Sistema",
|
||||
"gotoAnything.actions.themeSystemDesc": "Siga a aparência do seu sistema operacional",
|
||||
"gotoAnything.clearToSearchAll": "Desmarque @ para pesquisar tudo",
|
||||
"gotoAnything.commandHint": "Digite @ para navegar por categoria",
|
||||
"gotoAnything.activate": "Ativar",
|
||||
"gotoAnything.emptyState.noAppsFound": "Nenhum aplicativo encontrado",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Nenhuma base de conhecimento encontrada",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Nenhum integração encontrado",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Bases de conhecimento",
|
||||
"gotoAnything.groups.plugins": "Integrações",
|
||||
"gotoAnything.groups.workflowNodes": "Nós de fluxo de trabalho",
|
||||
"gotoAnything.inScope": "em {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "Nenhum comando correspondente encontrado",
|
||||
"gotoAnything.noResults": "Nenhum resultado encontrado",
|
||||
"gotoAnything.pressEscToClose": "Pressione ESC para fechar",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} resultado",
|
||||
"gotoAnything.resultCount_other": "{{count}} resultados",
|
||||
"gotoAnything.searchFailed": "Falha na pesquisa",
|
||||
"gotoAnything.searchHint": "Comece a digitar para pesquisar tudo instantaneamente",
|
||||
"gotoAnything.searchPlaceholder": "Pesquise ou digite @ para comandos...",
|
||||
"gotoAnything.searchPlaceholder": "Pesquisar qualquer coisa…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Pesquisa temporariamente indisponível",
|
||||
"gotoAnything.searchTitle": "Pesquisar qualquer coisa",
|
||||
"gotoAnything.searching": "Procurando...",
|
||||
"gotoAnything.searching": "Procurando…",
|
||||
"gotoAnything.selectSearchType": "Escolha o que pesquisar",
|
||||
"gotoAnything.selectToNavigate": "Selecione para navegar",
|
||||
"gotoAnything.servicesUnavailableMessage": "Alguns serviços de pesquisa podem estar enfrentando problemas. Tente novamente em um momento.",
|
||||
"gotoAnything.slashHint": "Digite / para ver todos os comandos disponíveis",
|
||||
"gotoAnything.someServicesUnavailable": "Alguns serviços de pesquisa indisponíveis",
|
||||
"gotoAnything.startTyping": "Comece a digitar para pesquisar",
|
||||
"gotoAnything.tips": "Pressione ↑↓ para navegar",
|
||||
"gotoAnything.tryDifferentSearch": "Tente um termo de pesquisa diferente",
|
||||
"gotoAnything.useAtForSpecific": "Use @ para tipos específicos",
|
||||
"iconPicker.cancel": "Cancelar",
|
||||
"iconPicker.emoji": "Emoji",
|
||||
"iconPicker.image": "Imagem",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Folosește aspectul luminos",
|
||||
"gotoAnything.actions.themeSystem": "Tema sistemului",
|
||||
"gotoAnything.actions.themeSystemDesc": "Urmăriți aspectul sistemului de operare",
|
||||
"gotoAnything.clearToSearchAll": "Ștergeți @ pentru a căuta toate",
|
||||
"gotoAnything.commandHint": "Tastați @ pentru a naviga după categorie",
|
||||
"gotoAnything.activate": "Activează",
|
||||
"gotoAnything.emptyState.noAppsFound": "Nu s-au găsit aplicații",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Nu au fost găsite baze de cunoștințe",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Nu au fost găsite integrare-uri",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Baze de cunoștințe",
|
||||
"gotoAnything.groups.plugins": "Integrări",
|
||||
"gotoAnything.groups.workflowNodes": "Noduri de flux de lucru",
|
||||
"gotoAnything.inScope": "în {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "Nu s-au găsit comenzi potrivite",
|
||||
"gotoAnything.noResults": "Nu s-au găsit rezultate",
|
||||
"gotoAnything.pressEscToClose": "Apăsați ESC pentru a închide",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} rezultat",
|
||||
"gotoAnything.resultCount_other": "{{count}} rezultate",
|
||||
"gotoAnything.searchFailed": "Căutarea a eșuat",
|
||||
"gotoAnything.searchHint": "Începeți să tastați pentru a căuta totul instantaneu",
|
||||
"gotoAnything.searchPlaceholder": "Căutați sau tastați @ pentru comenzi...",
|
||||
"gotoAnything.searchPlaceholder": "Căutați orice…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Căutare temporar indisponibilă",
|
||||
"gotoAnything.searchTitle": "Căutați orice",
|
||||
"gotoAnything.searching": "Căutarea...",
|
||||
"gotoAnything.searching": "Căutarea…",
|
||||
"gotoAnything.selectSearchType": "Alegeți ce să căutați",
|
||||
"gotoAnything.selectToNavigate": "Selectați pentru a naviga",
|
||||
"gotoAnything.servicesUnavailableMessage": "Este posibil ca unele servicii de căutare să întâmpine probleme. Încercați din nou într-o clipă.",
|
||||
"gotoAnything.slashHint": "Tastați / pentru a vedea toate comenzile disponibile",
|
||||
"gotoAnything.someServicesUnavailable": "Unele servicii de căutare nu sunt disponibile",
|
||||
"gotoAnything.startTyping": "Începeți să tastați pentru a căuta",
|
||||
"gotoAnything.tips": "Apăsați ↑↓ pentru a naviga",
|
||||
"gotoAnything.tryDifferentSearch": "Încercați un alt termen de căutare",
|
||||
"gotoAnything.useAtForSpecific": "Utilizați @ pentru anumite tipuri",
|
||||
"iconPicker.cancel": "Anulează",
|
||||
"iconPicker.emoji": "Emoji",
|
||||
"iconPicker.image": "Imagine",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Используйте светлый внешний вид",
|
||||
"gotoAnything.actions.themeSystem": "Системная тема",
|
||||
"gotoAnything.actions.themeSystemDesc": "Следуйте внешнему виду вашей операционной системы",
|
||||
"gotoAnything.clearToSearchAll": "Очистите @ для поиска по всем",
|
||||
"gotoAnything.commandHint": "Введите @ для просмотра по категориям",
|
||||
"gotoAnything.activate": "Активировать",
|
||||
"gotoAnything.emptyState.noAppsFound": "Приложения не найдены",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Базы знаний не найдены",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Интеграции не найдены",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Базы знаний",
|
||||
"gotoAnything.groups.plugins": "Интеграции",
|
||||
"gotoAnything.groups.workflowNodes": "Узлы рабочих процессов",
|
||||
"gotoAnything.inScope": "в {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "Соответствующие команды не найдены",
|
||||
"gotoAnything.noResults": "Ничего не найдено",
|
||||
"gotoAnything.pressEscToClose": "Нажмите ESC для закрытия",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} результат",
|
||||
"gotoAnything.resultCount_other": "{{count}} результатов",
|
||||
"gotoAnything.searchFailed": "Ошибка поиска",
|
||||
"gotoAnything.searchHint": "Начните печатать, чтобы мгновенно искать все",
|
||||
"gotoAnything.searchPlaceholder": "Найдите или введите @ для команд...",
|
||||
"gotoAnything.searchPlaceholder": "Ищите что угодно…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Поиск временно недоступен",
|
||||
"gotoAnything.searchTitle": "Ищите что угодно",
|
||||
"gotoAnything.searching": "Поиск...",
|
||||
"gotoAnything.searching": "Поиск…",
|
||||
"gotoAnything.selectSearchType": "Выберите, что искать",
|
||||
"gotoAnything.selectToNavigate": "Выберите для навигации",
|
||||
"gotoAnything.servicesUnavailableMessage": "В некоторых поисковых службах могут возникать проблемы. Повторите попытку через мгновение.",
|
||||
"gotoAnything.slashHint": "Введите / чтобы увидеть все доступные команды",
|
||||
"gotoAnything.someServicesUnavailable": "Некоторые поисковые сервисы недоступны",
|
||||
"gotoAnything.startTyping": "Начните вводить для поиска",
|
||||
"gotoAnything.tips": "Нажмите ↑↓ для навигации",
|
||||
"gotoAnything.tryDifferentSearch": "Попробуйте использовать другой поисковый запрос",
|
||||
"gotoAnything.useAtForSpecific": "Используйте @ для определенных типов",
|
||||
"iconPicker.cancel": "Отмена",
|
||||
"iconPicker.emoji": "Эмодзи",
|
||||
"iconPicker.image": "Изображение",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Uporabite svetlo prikazovanje",
|
||||
"gotoAnything.actions.themeSystem": "Sistem tema",
|
||||
"gotoAnything.actions.themeSystemDesc": "Sledite videzu svojega operacijskega sistema",
|
||||
"gotoAnything.clearToSearchAll": "Počisti @ za iskanje vseh",
|
||||
"gotoAnything.commandHint": "Vnesite @ za brskanje po kategoriji",
|
||||
"gotoAnything.activate": "Aktiviraj",
|
||||
"gotoAnything.emptyState.noAppsFound": "Ni bilo najdenih aplikacij",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Zbirk znanja ni mogoče najti",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Integracijaov ni mogoče najti",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Baze znanja",
|
||||
"gotoAnything.groups.plugins": "Integracije",
|
||||
"gotoAnything.groups.workflowNodes": "Vozlišča poteka dela",
|
||||
"gotoAnything.inScope": "v {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "Ujemajoči se ukazi niso našli",
|
||||
"gotoAnything.noResults": "Ni najdenih rezultatov",
|
||||
"gotoAnything.pressEscToClose": "Pritisnite ESC za zapiranje",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} rezultat",
|
||||
"gotoAnything.resultCount_other": "{{count}} rezultatov",
|
||||
"gotoAnything.searchFailed": "Iskanje ni uspelo",
|
||||
"gotoAnything.searchHint": "Začnite tipkati, da takoj preiščete vse",
|
||||
"gotoAnything.searchPlaceholder": "Poiščite ali vnesite @ za ukaze ...",
|
||||
"gotoAnything.searchPlaceholder": "Poiščite karkoli…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Iskanje začasno ni na voljo",
|
||||
"gotoAnything.searchTitle": "Poiščite karkoli",
|
||||
"gotoAnything.searching": "Iskanje...",
|
||||
"gotoAnything.searching": "Iskanje…",
|
||||
"gotoAnything.selectSearchType": "Izberite, kaj želite iskati",
|
||||
"gotoAnything.selectToNavigate": "Izberite za navigacijo",
|
||||
"gotoAnything.servicesUnavailableMessage": "Pri nekaterih iskalnih storitvah se morda pojavljajo težave. Poskusite znova čez trenutek.",
|
||||
"gotoAnything.slashHint": "Vnesite / za ogled vseh razpoložljivih ukazov",
|
||||
"gotoAnything.someServicesUnavailable": "Nekatere iskalne storitve niso na voljo",
|
||||
"gotoAnything.startTyping": "Začnite vnašati za iskanje",
|
||||
"gotoAnything.tips": "Pritisnite ↑↓ za navigacijo",
|
||||
"gotoAnything.tryDifferentSearch": "Poskusite uporabiti drug iskalni izraz",
|
||||
"gotoAnything.useAtForSpecific": "Uporaba znaka @ za določene vrste",
|
||||
"iconPicker.cancel": "Prekliči",
|
||||
"iconPicker.emoji": "Emoji",
|
||||
"iconPicker.image": "Slika",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "ใช้รูปลักษณ์ที่มีความสว่าง",
|
||||
"gotoAnything.actions.themeSystem": "ธีมระบบ",
|
||||
"gotoAnything.actions.themeSystemDesc": "ติดตามรูปลักษณ์ของระบบปฏิบัติการของคุณ",
|
||||
"gotoAnything.clearToSearchAll": "ล้าง @ เพื่อค้นหาทั้งหมด",
|
||||
"gotoAnything.commandHint": "พิมพ์ @ เพื่อเรียกดูตามหมวดหมู่",
|
||||
"gotoAnything.activate": "เปิดใช้งาน",
|
||||
"gotoAnything.emptyState.noAppsFound": "ไม่พบแอป",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "ไม่พบฐานความรู้",
|
||||
"gotoAnything.emptyState.noPluginsFound": "ไม่พบการผสานรวม",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "ฐานความรู้",
|
||||
"gotoAnything.groups.plugins": "การผสานรวม",
|
||||
"gotoAnything.groups.workflowNodes": "โหนดเวิร์กโฟลว์",
|
||||
"gotoAnything.inScope": "ใน {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "ไม่พบคำสั่งที่ตรงกัน",
|
||||
"gotoAnything.noResults": "ไม่พบผลลัพธ์",
|
||||
"gotoAnything.pressEscToClose": "กด ESC เพื่อปิด",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} ผลลัพธ์",
|
||||
"gotoAnything.resultCount_other": "{{count}} ผลลัพธ์",
|
||||
"gotoAnything.searchFailed": "การค้นหาล้มเหลว",
|
||||
"gotoAnything.searchHint": "เริ่มพิมพ์เพื่อค้นหาทุกอย่างได้ทันที",
|
||||
"gotoAnything.searchPlaceholder": "ค้นหาหรือพิมพ์ @ สำหรับคำสั่ง...",
|
||||
"gotoAnything.searchPlaceholder": "ค้นหาอะไรก็ได้…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "การค้นหาไม่พร้อมใช้งานชั่วคราว",
|
||||
"gotoAnything.searchTitle": "ค้นหาอะไรก็ได้",
|
||||
"gotoAnything.searching": "กำลังค้นหา...",
|
||||
"gotoAnything.searching": "กำลังค้นหา…",
|
||||
"gotoAnything.selectSearchType": "เลือกสิ่งที่จะค้นหา",
|
||||
"gotoAnything.selectToNavigate": "เลือกเพื่อนำทาง",
|
||||
"gotoAnything.servicesUnavailableMessage": "บริการค้นหาบางบริการอาจประสบปัญหา ลองอีกครั้งในอีกสักครู่",
|
||||
"gotoAnything.slashHint": "พิมพ์ / เพื่อดูคำสั่งที่มีให้ทั้งหมด",
|
||||
"gotoAnything.someServicesUnavailable": "บริการค้นหาบางบริการไม่พร้อมใช้งาน",
|
||||
"gotoAnything.startTyping": "เริ่มพิมพ์เพื่อค้นหา",
|
||||
"gotoAnything.tips": "กด ↑↓ เพื่อเลื่อนดู",
|
||||
"gotoAnything.tryDifferentSearch": "ลองใช้ข้อความค้นหาอื่น",
|
||||
"gotoAnything.useAtForSpecific": "ใช้ @ สําหรับบางประเภท",
|
||||
"iconPicker.cancel": "ยกเลิก",
|
||||
"iconPicker.emoji": "อิโมจิ",
|
||||
"iconPicker.image": "ภาพ",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Aydınlık görünüm kullan",
|
||||
"gotoAnything.actions.themeSystem": "Sistem Teması",
|
||||
"gotoAnything.actions.themeSystemDesc": "İşletim sisteminizin görünümünü takip edin",
|
||||
"gotoAnything.clearToSearchAll": "Tümünü aramak için @ işaretini kaldırın",
|
||||
"gotoAnything.commandHint": "Kategoriye göre göz atmak için @ yazın",
|
||||
"gotoAnything.activate": "Etkinleştir",
|
||||
"gotoAnything.emptyState.noAppsFound": "Uygulama bulunamadı",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Bilgi bankası bulunamadı",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Entegrasyon bulunamadı",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Bilgi Tabanları",
|
||||
"gotoAnything.groups.plugins": "Entegrasyonlar",
|
||||
"gotoAnything.groups.workflowNodes": "İş Akışı Düğümleri",
|
||||
"gotoAnything.inScope": "{{scope}}s içinde",
|
||||
"gotoAnything.noMatchingCommands": "Eşleşen komut bulunamadı",
|
||||
"gotoAnything.noResults": "Sonuç bulunamadı",
|
||||
"gotoAnything.pressEscToClose": "Kapatmak için ESC tuşuna basın",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} sonuç",
|
||||
"gotoAnything.resultCount_other": "{{count}} sonuç",
|
||||
"gotoAnything.searchFailed": "Arama başarısız oldu",
|
||||
"gotoAnything.searchHint": "Her şeyi anında aramak için yazmaya başlayın",
|
||||
"gotoAnything.searchPlaceholder": "Komutlar için @ arayın veya yazın...",
|
||||
"gotoAnything.searchPlaceholder": "Her şeyi arayın…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Arama geçici olarak kullanılamıyor",
|
||||
"gotoAnything.searchTitle": "Her şeyi arayın",
|
||||
"gotoAnything.searching": "Aranıyor...",
|
||||
"gotoAnything.searching": "Aranıyor…",
|
||||
"gotoAnything.selectSearchType": "Ne arayacağınızı seçin",
|
||||
"gotoAnything.selectToNavigate": "Gezinmek için seçin",
|
||||
"gotoAnything.servicesUnavailableMessage": "Bazı arama hizmetlerinde sorunlar yaşanıyor olabilir. Kısa bir süre sonra tekrar deneyin.",
|
||||
"gotoAnything.slashHint": "Tüm mevcut komutları görmek için / yazın",
|
||||
"gotoAnything.someServicesUnavailable": "Bazı arama hizmetleri kullanılamıyor",
|
||||
"gotoAnything.startTyping": "Arama yapmak için yazmaya başlayın",
|
||||
"gotoAnything.tips": "Navigasyon için ↑↓ tuşlarına basın",
|
||||
"gotoAnything.tryDifferentSearch": "Farklı bir arama terimi deneyin",
|
||||
"gotoAnything.useAtForSpecific": "Belirli türler için @ kullanın",
|
||||
"iconPicker.cancel": "İptal",
|
||||
"iconPicker.emoji": "Emoji",
|
||||
"iconPicker.image": "Görsel",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Використовуйте світлий вигляд",
|
||||
"gotoAnything.actions.themeSystem": "Системна тема",
|
||||
"gotoAnything.actions.themeSystemDesc": "Дотримуйтесь зовнішнього вигляду вашої операційної системи",
|
||||
"gotoAnything.clearToSearchAll": "Очистіть @ для пошуку всіх",
|
||||
"gotoAnything.commandHint": "Введіть @ для навігації за категоріями",
|
||||
"gotoAnything.activate": "Активувати",
|
||||
"gotoAnything.emptyState.noAppsFound": "Не знайдено додатків",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Баз знань не знайдено",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Інтеграціяів не знайдено",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Бази знань",
|
||||
"gotoAnything.groups.plugins": "Інтеграції",
|
||||
"gotoAnything.groups.workflowNodes": "Вузли документообігу",
|
||||
"gotoAnything.inScope": "у {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "Відповідних команд не знайдено",
|
||||
"gotoAnything.noResults": "Результатів не знайдено",
|
||||
"gotoAnything.pressEscToClose": "Натисніть ESC, щоб закрити",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} результат",
|
||||
"gotoAnything.resultCount_other": "{{count}} результатів",
|
||||
"gotoAnything.searchFailed": "Пошук не вдався",
|
||||
"gotoAnything.searchHint": "Почніть вводити текст, щоб миттєво шукати все",
|
||||
"gotoAnything.searchPlaceholder": "Виконайте пошук або введіть @ для команд...",
|
||||
"gotoAnything.searchPlaceholder": "Шукайте що завгодно…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Пошук тимчасово недоступний",
|
||||
"gotoAnything.searchTitle": "Шукайте що завгодно",
|
||||
"gotoAnything.searching": "Пошук...",
|
||||
"gotoAnything.searching": "Пошук…",
|
||||
"gotoAnything.selectSearchType": "Виберіть, що шукати",
|
||||
"gotoAnything.selectToNavigate": "Виберіть, щоб перейти",
|
||||
"gotoAnything.servicesUnavailableMessage": "У деяких пошукових службах можуть виникати проблеми. Повторіть спробу за мить.",
|
||||
"gotoAnything.slashHint": "Наберіть / , щоб побачити всі доступні команди",
|
||||
"gotoAnything.someServicesUnavailable": "Деякі пошукові сервіси недоступні",
|
||||
"gotoAnything.startTyping": "Почніть вводити для пошуку",
|
||||
"gotoAnything.tips": "Натисніть ↑↓ для навігації",
|
||||
"gotoAnything.tryDifferentSearch": "Спробуйте інший пошуковий термін",
|
||||
"gotoAnything.useAtForSpecific": "Використовуйте @ для конкретних типів",
|
||||
"iconPicker.cancel": "Скасувати",
|
||||
"iconPicker.emoji": "Емодзі",
|
||||
"iconPicker.image": "Зображення",
|
||||
|
||||
+3
-11
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "Sử dụng giao diện sáng",
|
||||
"gotoAnything.actions.themeSystem": "Chủ đề hệ thống",
|
||||
"gotoAnything.actions.themeSystemDesc": "Theo giao diện của hệ điều hành của bạn",
|
||||
"gotoAnything.clearToSearchAll": "Xóa @ để tìm kiếm tất cả",
|
||||
"gotoAnything.commandHint": "Nhập @ để duyệt theo danh mục",
|
||||
"gotoAnything.activate": "Kích hoạt",
|
||||
"gotoAnything.emptyState.noAppsFound": "Không tìm thấy ứng dụng nào",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "Không tìm thấy cơ sở kiến thức",
|
||||
"gotoAnything.emptyState.noPluginsFound": "Không tìm thấy tích hợp",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "Cơ sở kiến thức",
|
||||
"gotoAnything.groups.plugins": "Tích hợp",
|
||||
"gotoAnything.groups.workflowNodes": "Nút quy trình làm việc",
|
||||
"gotoAnything.inScope": "trong {{scope}}s",
|
||||
"gotoAnything.noMatchingCommands": "Không tìm thấy lệnh phù hợp",
|
||||
"gotoAnything.noResults": "Không tìm thấy kết quả",
|
||||
"gotoAnything.pressEscToClose": "Nhấn ESC để đóng",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} kết quả",
|
||||
"gotoAnything.resultCount_other": "{{count}} kết quả",
|
||||
"gotoAnything.searchFailed": "Tìm kiếm không thành công",
|
||||
"gotoAnything.searchHint": "Bắt đầu nhập để tìm kiếm mọi thứ ngay lập tức",
|
||||
"gotoAnything.searchPlaceholder": "Tìm kiếm hoặc nhập @ cho các lệnh...",
|
||||
"gotoAnything.searchPlaceholder": "Tìm kiếm bất cứ thứ gì…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "Tìm kiếm tạm thời không khả dụng",
|
||||
"gotoAnything.searchTitle": "Tìm kiếm bất cứ thứ gì",
|
||||
"gotoAnything.searching": "Tìm kiếm...",
|
||||
"gotoAnything.searching": "Tìm kiếm…",
|
||||
"gotoAnything.selectSearchType": "Chọn nội dung để tìm kiếm",
|
||||
"gotoAnything.selectToNavigate": "Chọn để điều hướng",
|
||||
"gotoAnything.servicesUnavailableMessage": "Một số dịch vụ tìm kiếm có thể gặp sự cố. Thử lại trong giây lát.",
|
||||
"gotoAnything.slashHint": "Gõ / để xem tất cả các lệnh có sẵn",
|
||||
"gotoAnything.someServicesUnavailable": "Một số dịch vụ tìm kiếm không khả dụng",
|
||||
"gotoAnything.startTyping": "Bắt đầu gõ để tìm kiếm",
|
||||
"gotoAnything.tips": "Nhấn ↑↓ để duyệt",
|
||||
"gotoAnything.tryDifferentSearch": "Thử một cụm từ tìm kiếm khác",
|
||||
"gotoAnything.useAtForSpecific": "Sử dụng @ cho các loại cụ thể",
|
||||
"iconPicker.cancel": "Hủy",
|
||||
"iconPicker.emoji": "Biểu tượng cảm xúc",
|
||||
"iconPicker.image": "Hình ảnh",
|
||||
|
||||
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "使用浅色外观",
|
||||
"gotoAnything.actions.themeSystem": "系统主题",
|
||||
"gotoAnything.actions.themeSystemDesc": "跟随系统外观",
|
||||
"gotoAnything.clearToSearchAll": "清除 @ 以搜索全部",
|
||||
"gotoAnything.commandHint": "输入 @ 按类别浏览",
|
||||
"gotoAnything.activate": "执行",
|
||||
"gotoAnything.emptyState.noAppsFound": "未找到应用",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "未找到知识库",
|
||||
"gotoAnything.emptyState.noPluginsFound": "未找到集成",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "知识库",
|
||||
"gotoAnything.groups.plugins": "集成",
|
||||
"gotoAnything.groups.workflowNodes": "工作流节点",
|
||||
"gotoAnything.inScope": "在 {{scope}}s 中",
|
||||
"gotoAnything.noMatchingCommands": "未找到匹配的命令",
|
||||
"gotoAnything.noResults": "未找到结果",
|
||||
"gotoAnything.pressEscToClose": "按 ESC 关闭",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} 个结果",
|
||||
"gotoAnything.resultCount_other": "{{count}} 个结果",
|
||||
"gotoAnything.searchFailed": "搜索失败",
|
||||
"gotoAnything.searchHint": "开始输入即可立即搜索所有内容",
|
||||
"gotoAnything.searchPlaceholder": "搜索或输入 @ 或 / 以使用命令...",
|
||||
"gotoAnything.searchPlaceholder": "搜索任何内容…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "搜索暂时不可用",
|
||||
"gotoAnything.searchTitle": "搜索任何内容",
|
||||
"gotoAnything.searching": "搜索中...",
|
||||
"gotoAnything.searching": "搜索中…",
|
||||
"gotoAnything.selectSearchType": "选择搜索内容",
|
||||
"gotoAnything.selectToNavigate": "选择以导航",
|
||||
"gotoAnything.servicesUnavailableMessage": "某些搜索服务可能遇到问题,请稍后再试。",
|
||||
"gotoAnything.slashHint": "输入 / 查看所有可用命令",
|
||||
"gotoAnything.someServicesUnavailable": "某些搜索服务不可用",
|
||||
"gotoAnything.startTyping": "开始输入以搜索",
|
||||
"gotoAnything.tips": "按 ↑↓ 导航",
|
||||
"gotoAnything.tryDifferentSearch": "请尝试不同的搜索词",
|
||||
"gotoAnything.useAtForSpecific": "使用 @ 进行特定类型搜索",
|
||||
"iconPicker.cancel": "取消",
|
||||
"iconPicker.emoji": "表情符号",
|
||||
"iconPicker.image": "图片",
|
||||
|
||||
@@ -82,8 +82,7 @@
|
||||
"gotoAnything.actions.themeLightDesc": "使用輕盈的外觀",
|
||||
"gotoAnything.actions.themeSystem": "系統主題",
|
||||
"gotoAnything.actions.themeSystemDesc": "遵循你的操作系統外觀",
|
||||
"gotoAnything.clearToSearchAll": "清除 @ 以搜尋全部",
|
||||
"gotoAnything.commandHint": "鍵入 @ 按類別流覽",
|
||||
"gotoAnything.activate": "執行",
|
||||
"gotoAnything.emptyState.noAppsFound": "未找到應用",
|
||||
"gotoAnything.emptyState.noKnowledgeBasesFound": "未找到知識庫",
|
||||
"gotoAnything.emptyState.noPluginsFound": "未找到集成",
|
||||
@@ -95,7 +94,6 @@
|
||||
"gotoAnything.groups.knowledgeBases": "知識庫",
|
||||
"gotoAnything.groups.plugins": "集成",
|
||||
"gotoAnything.groups.workflowNodes": "工作流節點",
|
||||
"gotoAnything.inScope": "在 {{scope}}s 中",
|
||||
"gotoAnything.noMatchingCommands": "未找到匹配的命令",
|
||||
"gotoAnything.noResults": "未找到結果",
|
||||
"gotoAnything.pressEscToClose": "按 ESC 鍵關閉",
|
||||
@@ -103,20 +101,14 @@
|
||||
"gotoAnything.resultCount": "{{count}} 個結果",
|
||||
"gotoAnything.resultCount_other": "{{count}} 個結果",
|
||||
"gotoAnything.searchFailed": "搜索失敗",
|
||||
"gotoAnything.searchHint": "開始輸入以立即搜索所有內容",
|
||||
"gotoAnything.searchPlaceholder": "搜尋或鍵入 @ 以取得命令...",
|
||||
"gotoAnything.searchPlaceholder": "搜索任何內容…",
|
||||
"gotoAnything.searchTemporarilyUnavailable": "搜索暫時不可用",
|
||||
"gotoAnything.searchTitle": "搜索任何內容",
|
||||
"gotoAnything.searching": "搜索中...",
|
||||
"gotoAnything.searching": "搜索中…",
|
||||
"gotoAnything.selectSearchType": "選擇要搜索的內容",
|
||||
"gotoAnything.selectToNavigate": "選擇以進行導航",
|
||||
"gotoAnything.servicesUnavailableMessage": "某些搜索服務可能遇到問題。稍後再試一次。",
|
||||
"gotoAnything.slashHint": "輸入 / 以查看所有可用的指令",
|
||||
"gotoAnything.someServicesUnavailable": "某些搜索服務不可用",
|
||||
"gotoAnything.startTyping": "開始輸入以進行搜尋",
|
||||
"gotoAnything.tips": "按 ↑ ↓ 鍵進行導航",
|
||||
"gotoAnything.tryDifferentSearch": "嘗試其他搜尋字詞",
|
||||
"gotoAnything.useAtForSpecific": "對特定類型使用 @",
|
||||
"iconPicker.cancel": "取消",
|
||||
"iconPicker.emoji": "表情符號",
|
||||
"iconPicker.image": "圖片",
|
||||
|
||||
Reference in New Issue
Block a user