@glint/environment-ember-loose
Version:
A Glint environment to support loose-mode Ember.js projects
40 lines (33 loc) • 1.18 kB
TypeScript
import { ComponentLike } from '@glint/template';
import { ComponentReturn, DirectInvokable, NamedArgs } from '@glint/template/-private/integration';
type RequireAtLeastOne<T, Keys extends keyof T = keyof T> = Pick<T, Exclude<keyof T, Keys>> &
{
[K in Keys]-?: Required<Pick<T, K>> & Partial<Pick<T, Exclude<Keys, K>>>;
}[Keys];
type LinkToArgs = RequireAtLeastOne<
{
route?: string;
model?: unknown;
models?: unknown[];
query?: Record<string, unknown>;
disabled?: boolean;
activeClass?: string;
'current-when'?: string | boolean;
preventDefault?: boolean;
replace?: boolean;
tagName?: string;
},
'route' | 'model' | 'models' | 'query'
>;
type LinkToReturn = ComponentReturn<{ default: [] }, HTMLAnchorElement>;
export type LinkToKeyword = DirectInvokable<{
// `{{link-to}}` classic invocation
(route: string, ...params: Array<unknown>): LinkToReturn;
// `<LinkTo>` invocation, but accessed via `'link-to'` e.g. with `{{component}}`
(named: NamedArgs<LinkToArgs>): LinkToReturn;
}>;
export type LinkToComponent = ComponentLike<{
Args: LinkToArgs;
Blocks: { default: [] };
Element: HTMLAnchorElement;
}>;