Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add glint types #1861

Draft
wants to merge 11 commits into
base: master
Choose a base branch
from
14 changes: 11 additions & 3 deletions .eslintrc.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

module.exports = {
root: true,
parser: 'babel-eslint',
parser: '@typescript-eslint/parser',
parserOptions: {
ecmaVersion: 2018,
sourceType: 'module',
Expand All @@ -12,8 +12,14 @@ module.exports = {
},
// Disabling hbs plugin until https://github.com/ember-template-lint/eslint-plugin-hbs/issues/42 is resolved
// plugins: ['ember', 'hbs'],
plugins: ['ember'],
extends: ['eslint:recommended', 'plugin:ember/recommended', 'plugin:prettier/recommended'],
plugins: ['ember', '@typescript-eslint', 'prettier'],
extends: [
'eslint:recommended',
'plugin:ember/recommended',
'plugin:prettier/recommended',
'plugin:@typescript-eslint/eslint-recommended',
'plugin:@typescript-eslint/recommended',
],
env: {
browser: true,
},
Expand All @@ -34,6 +40,8 @@ module.exports = {
'ember/no-classic-components': 'warn',
'ember/classic-decorator-no-classic-methods': 'warn',
'ember/classic-decorator-hooks': 'warn',
'ember/no-empty-glimmer-component-classes': 'warn',
'prettier/prettier': ['error', { endOfLine: 'auto' }],
},
overrides: [
// node files
Expand Down
34 changes: 34 additions & 0 deletions addon/components/bs-accordion.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import BsAccordionItem from './bs-accordion/item';

import Component from '@glimmer/component';

export interface BsAccordionActions<T> {
doChange: (newValue: T) => void;
}

interface BsAccordionSignature<T> {
Element: HTMLDivElement;
Args: {
selected?: T;
onChange?: (e?: Event, value?: T) => void;
};
Blocks: {
default: [
{
item: typeof BsAccordionItem;
actions: BsAccordionActions<T>;
}
];
};
}

export declare class BsAccordion<T> extends Component<BsAccordionSignature<T>> {}

export default BsAccordion;

declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
BsAccordion: typeof BsAccordion;
'bs-accordion': typeof BsAccordion;
}
}
34 changes: 34 additions & 0 deletions addon/components/bs-accordion/item.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
import { BsButtonType } from '../bs-button';

import Component from '@glimmer/component';
import BsAccordionItemBody from './item/body';
import BsAccordionItemTitle from './item/title';

interface BsAccordionItemSignature<T> {
Element: HTMLDivElement;
Args: {
title?: string;
type?: 'default' | 'light' | 'dark' | BsButtonType | string;
value?: T;
onClick?: (e?: Event, value?: T) => void;
};
Blocks: {
default: [
{
body: typeof BsAccordionItemBody;
title: typeof BsAccordionItemTitle;
}
];
};
}

export declare class BsAccordionItem<T> extends Component<BsAccordionItemSignature<T>> {}

export default BsAccordionItem;

declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
'BsAccordion::Item': typeof BsAccordionItem;
'bs-accordion/item': typeof BsAccordionItem;
}
}
22 changes: 22 additions & 0 deletions addon/components/bs-accordion/item/body.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import Component from '@glimmer/component';

interface BsAccordionItemBodySignature {
Element: HTMLDivElement;
Args: {
collapsed?: boolean;
};
Blocks: {
default: [];
};
}

export declare class BsAccordionItemBody extends Component<BsAccordionItemBodySignature> {}

export default BsAccordionItemBody;

declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
'BsAccordion::Item::Body': typeof BsAccordionItemBody;
'bs-accordion/item/body': typeof BsAccordionItemBody;
}
}
23 changes: 23 additions & 0 deletions addon/components/bs-accordion/item/title.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import Component from '@glimmer/component';

interface BsAccordionItemTitleSignature<T> {
Element: HTMLDivElement;
Args: {
collapsed?: boolean;
onClick?: (e?: Event, value?: T) => void;
};
Blocks: {
default: [];
};
}

export declare class BsAccordionItemTitle<T> extends Component<BsAccordionItemTitleSignature<T>> {}

export default BsAccordionItemTitle;

declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
'BsAccordion::Item::Title': typeof BsAccordionItemTitle;
'bs-accordion/item/title': typeof BsAccordionItemTitle;
}
}
32 changes: 32 additions & 0 deletions addon/components/bs-alert.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { BsButtonType } from './bs-button';

import Component from '@glimmer/component';

interface BsAlertSignature {
Element: HTMLDivElement;
Args: {
dismissible?: boolean;
fade?: boolean;
fadeDuration?: number;
type?: BsButtonType;
visible?: boolean;
onDismiss?: (e?: Event) => void;
onDismissed?: (e?: Event) => void;
};
Blocks: {
default: [];
header: [];
body: [];
};
}

export declare class BsAlert extends Component<BsAlertSignature> {}

export default BsAlert;

declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
BsAlert: typeof BsAlert;
'bs-alert': typeof BsAlert;
}
}
37 changes: 37 additions & 0 deletions addon/components/bs-button-group.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import Component from '@glimmer/component';
import BsButtonGroupButton from './bs-button-group/button';

interface BsButtonGroupSignature<T> {
Element: HTMLDivElement;
Args: {
justified?: boolean;
size?: 'lg' | 'sm' | 'xs';
type?: null | 'radio' | 'checkbox';
value?: Array<T>;
vertical?: boolean;
onChange?: (e?: Event, value?: T) => void;
};
Blocks: {
default: [
{
button: typeof BsButtonGroupButton;
actions: BsButtonGroupActions<T>;
}
];
};
}

export interface BsButtonGroupActions<T> {
buttonPressed: (pressedValue: T) => void;
}

export declare class BsButtonGroup<T> extends Component<BsButtonGroupSignature<T>> {}

export default BsButtonGroup;

declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
BsButtonGroup: typeof BsButtonGroup;
'bs-button-group': typeof BsButtonGroup;
}
}
12 changes: 12 additions & 0 deletions addon/components/bs-button-group/button.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
import BsButton from '../bs-button';

export declare class BsButtonGroupButton extends BsButton {}

export default BsButtonGroupButton;

declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
'BsButtonGroup::Button': typeof BsButtonGroupButton;
'bs-button-group/button': typeof BsButtonGroupButton;
}
}
54 changes: 54 additions & 0 deletions addon/components/bs-button.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import Component from '@glimmer/component';

export type BsButtonType = 'primary' | 'secondary' | 'success' | 'danger' | 'warning' | 'info' | 'light' | 'dark';
vlascik marked this conversation as resolved.
Show resolved Hide resolved

interface BsButtonSignature {
Element: HTMLButtonElement;
Args: {
active?: boolean;
block?: boolean;
bubble?: boolean;
buttonType?: 'button' | 'submit' | 'reset';
defaultText?: string;
fulfilledText?: string;
icon?: string;
iconActive?: string;
iconInactive?: string;
outline?: boolean;
pendingText?: string;
preventConcurrency?: boolean;
rejectedText?: string;
reset?: boolean;
size?: string;
type?: string;
value?: unknown;
onClick?: (e?: Event, value?: unknown) => Promise<void> | void;
};
Blocks: {
default: [
{
isFulfilled: boolean;
isPending: boolean;
isRejected: boolean;
isSettled: boolean;
actions: BsButtonActions;
vlascik marked this conversation as resolved.
Show resolved Hide resolved
}
];
};
}

export interface BsButtonActions {
resetState: () => void;
handleClick: (e: Event) => void;
}

export declare class BsButton extends Component<BsButtonSignature> {}

export default BsButton;

declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
BsButton: typeof BsButton;
'bs-button': typeof BsButton;
}
}
53 changes: 53 additions & 0 deletions addon/components/bs-carousel.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import BsCarouselSlide from './bs-carousel/slide';

import Component from '@glimmer/component';

interface BsCarouselSignature {
Element: HTMLDivElement;
Args: {
autoPlay?: boolean;
index?: number;
interval?: number;
keyboard?: boolean;
ltr?: boolean;
nextControlIcon?: string;
nextControlLabel?: string;
pauseOnMouseEnter?: boolean;
prevControlIcon?: string;
prevControlLabel?: string;
showControls?: boolean;
showIndicators?: boolean;
transition?: 'fade' | 'slide';
transitionDuration?: number;
wrap?: boolean;
onSlideChanged?: (e?: Event, toIndex?: unknown) => void;
};
Blocks: {
default: [
{
slide: typeof BsCarouselSlide;
actions: BsCarouselActions;
}
];
};
}

export interface BsCarouselActions {
toSlide: (toIndex: number) => void;
toNextSlide: () => void;
toPrevSlide: () => void;
handleMouseEnter: () => void;
handleMouseLeave: () => void;
handleKeyDown: () => void;
}

export declare class BsCarousel extends Component<BsCarouselSignature> {}

export default BsCarousel;

declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
BsCarousel: typeof BsCarousel;
'bs-carousel': typeof BsCarousel;
}
}
20 changes: 20 additions & 0 deletions addon/components/bs-carousel/slide.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
import Component from '@glimmer/component';

interface BsCarouselSlideSignature {
Element: HTMLDivElement;
Args: {};
Blocks: {
default: [];
};
}

export declare class BsCarouselSlide extends Component<BsCarouselSlideSignature> {}

export default BsCarouselSlide;

declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
'BsCarousel::Slide': typeof BsCarouselSlide;
'bs-carousel/slide': typeof BsCarouselSlide;
}
}
32 changes: 32 additions & 0 deletions addon/components/bs-collapse.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import Component from '@glimmer/component';

export interface BsCollapseSignature {
Element: HTMLDivElement;
Args: {
collapsed?: boolean;
collapseDimension?: 'height' | 'width';
collapsedSize?: number;
expandedSize?: number;
transitionDuration?: number;

onHidden?: (e?: Event) => void;
onHide?: (e?: Event) => void;
onShow?: (e?: Event) => void;
onShown?: (e?: Event) => void;
};
Blocks: {
default: [];
};
}

// eslint-disable-next-line ember/no-empty-glimmer-component-classes
export declare class BsCollapse extends Component<BsCollapseSignature> {}

export default BsCollapse;

declare module '@glint/environment-ember-loose/registry' {
export default interface Registry {
BsCollapse: typeof BsCollapse;
'bs-collapse': typeof BsCollapse;
}
}