From 701aadce7ff915b74f33e48cba70a209d0ca4d85 Mon Sep 17 00:00:00 2001 From: Joren Broekema Date: Wed, 24 Feb 2021 20:39:17 +0100 Subject: [PATCH] fix: use Pick generic types and inherit lit static props/methods --- .changeset/soft-penguins-report.md | 17 +++++++++++++++++ packages/core/types/DelegateMixinTypes.d.ts | 6 ++++-- packages/core/types/DisabledMixinTypes.d.ts | 3 +-- .../types/DisabledWithTabIndexMixinTypes.d.ts | 8 ++++++-- packages/core/types/SlotMixinTypes.d.ts | 6 ++++-- packages/core/types/UpdateStylesMixinTypes.d.ts | 6 ++++-- packages/form-core/src/FormControlMixin.js | 1 + packages/form-core/types/FocusMixinTypes.d.ts | 8 ++++++-- .../form-core/types/FormControlMixinTypes.d.ts | 10 +++++----- packages/form-core/types/FormatMixinTypes.d.ts | 8 ++++---- .../types/InteractionStateMixinTypes.d.ts | 6 +++--- .../types/NativeTextFieldMixinTypes.d.ts | 6 ++++-- .../choice-group/ChoiceGroupMixinTypes.d.ts | 8 ++++---- .../choice-group/ChoiceInputMixinTypes.d.ts | 7 +++---- .../types/form-group/FormGroupMixinTypes.d.ts | 14 +++++++------- .../registration/FormRegisteringMixinTypes.d.ts | 6 ++++-- .../registration/FormRegistrarMixinTypes.d.ts | 6 +++--- .../FormRegistrarPortalMixinTypes.d.ts | 6 ++++-- .../types/utils/SyncUpdatableMixinTypes.d.ts | 6 ++++-- .../types/validate/ValidateMixinTypes.d.ts | 14 +++++++------- packages/listbox/types/ListboxMixinTypes.d.ts | 12 ++++++------ packages/localize/types/LocalizeMixinTypes.d.ts | 6 ++++-- packages/overlays/types/ArrowMixinTypes.d.ts | 6 ++++-- packages/overlays/types/OverlayMixinTypes.d.ts | 6 ++++-- packages/tooltip/src/LionTooltip.js | 1 + 25 files changed, 114 insertions(+), 69 deletions(-) create mode 100644 .changeset/soft-penguins-report.md diff --git a/.changeset/soft-penguins-report.md b/.changeset/soft-penguins-report.md new file mode 100644 index 000000000..8b68acc93 --- /dev/null +++ b/.changeset/soft-penguins-report.md @@ -0,0 +1,17 @@ +--- +'@lion/calendar': patch +'@lion/checkbox-group': patch +'@lion/collapsible': patch +'@lion/combobox': patch +'@lion/core': patch +'@lion/dialog': patch +'@lion/form-core': patch +'@lion/input-datepicker': patch +'@lion/listbox': patch +'@lion/localize': patch +'@lion/overlays': patch +'@lion/select-rich': patch +'@lion/tooltip': patch +--- + +Fix types of mixins to include LitElement static props and methods, and use Pick generic type instead of fake constructors. diff --git a/packages/core/types/DelegateMixinTypes.d.ts b/packages/core/types/DelegateMixinTypes.d.ts index bf6fcaaa2..48b078efa 100644 --- a/packages/core/types/DelegateMixinTypes.d.ts +++ b/packages/core/types/DelegateMixinTypes.d.ts @@ -10,7 +10,6 @@ export type Delegations = { }; export declare class DelegateHost { - constructor(...args: any[]); delegations: Delegations; protected _connectDelegateMixin(): void; @@ -51,6 +50,9 @@ export declare class DelegateHost { */ declare function DelegateMixinImplementation>( superclass: T, -): T & Constructor; +): T & + Constructor & + Pick & + Pick; export type DelegateMixin = typeof DelegateMixinImplementation; diff --git a/packages/core/types/DisabledMixinTypes.d.ts b/packages/core/types/DisabledMixinTypes.d.ts index b1f21e5d0..74c48a23b 100644 --- a/packages/core/types/DisabledMixinTypes.d.ts +++ b/packages/core/types/DisabledMixinTypes.d.ts @@ -2,7 +2,6 @@ import { Constructor } from '@open-wc/dedupe-mixin'; import { LitElement } from '../index.js'; export declare class DisabledHost { - constructor(...args: any[]); disabled: boolean; /** @@ -21,6 +20,6 @@ export declare class DisabledHost { export declare function DisabledMixinImplementation>( superclass: T, -): T & Constructor & typeof DisabledHost; +): T & Constructor & Pick; export type DisabledMixin = typeof DisabledMixinImplementation; diff --git a/packages/core/types/DisabledWithTabIndexMixinTypes.d.ts b/packages/core/types/DisabledWithTabIndexMixinTypes.d.ts index dd6f3a51e..7b26e5fe7 100644 --- a/packages/core/types/DisabledWithTabIndexMixinTypes.d.ts +++ b/packages/core/types/DisabledWithTabIndexMixinTypes.d.ts @@ -2,7 +2,6 @@ import { Constructor } from '@open-wc/dedupe-mixin'; import { DisabledHost } from './DisabledMixinTypes'; import { LitElement } from '../index.js'; export declare class DisabledWithTabIndexHost { - constructor(...args: any[]); tabIndex: number; /** * Makes request to make the element disabled and set the tabindex @@ -21,6 +20,11 @@ export declare class DisabledWithTabIndexHost { export declare function DisabledWithTabIndexMixinImplementation>( superclass: T, -): T & Constructor & Constructor; +): T & + Constructor & + Pick & + Constructor & + Pick & + Pick; export type DisabledWithTabIndexMixin = typeof DisabledWithTabIndexMixinImplementation; diff --git a/packages/core/types/SlotMixinTypes.d.ts b/packages/core/types/SlotMixinTypes.d.ts index 5595e5501..053bf0dfd 100644 --- a/packages/core/types/SlotMixinTypes.d.ts +++ b/packages/core/types/SlotMixinTypes.d.ts @@ -7,7 +7,6 @@ export type SlotsMap = { }; export declare class SlotHost { - constructor(...args: any[]); /** * Obtains all the slots to create */ @@ -51,6 +50,9 @@ export declare class SlotHost { */ export declare function SlotMixinImplementation>( superclass: T, -): T & Constructor & typeof SlotHost; +): T & + Constructor & + Pick & + Pick; export type SlotMixin = typeof SlotMixinImplementation; diff --git a/packages/core/types/UpdateStylesMixinTypes.d.ts b/packages/core/types/UpdateStylesMixinTypes.d.ts index cc1c41b80..56a4f2d32 100644 --- a/packages/core/types/UpdateStylesMixinTypes.d.ts +++ b/packages/core/types/UpdateStylesMixinTypes.d.ts @@ -21,7 +21,6 @@ export declare class UpdateStylesHost { * * @param {StylesMap} updateStyles */ - constructor(...args: any[]); public updateStyles(updateStyles: StylesMap): void; } @@ -30,6 +29,9 @@ export declare class UpdateStylesHost { */ declare function UpdateStylesMixinImplementation>( superclass: T, -): T & Constructor; +): T & + Constructor & + Pick & + Pick; export type UpdateStylesMixin = typeof UpdateStylesMixinImplementation; diff --git a/packages/form-core/src/FormControlMixin.js b/packages/form-core/src/FormControlMixin.js index 698c0db32..e2fa0065a 100644 --- a/packages/form-core/src/FormControlMixin.js +++ b/packages/form-core/src/FormControlMixin.js @@ -32,6 +32,7 @@ function uuid(prefix) { const FormControlMixinImplementation = superclass => // eslint-disable-next-line no-shadow, no-unused-vars class FormControlMixin extends FormRegisteringMixin(DisabledMixin(SlotMixin(superclass))) { + /** @type {any} */ static get properties() { return { /** diff --git a/packages/form-core/types/FocusMixinTypes.d.ts b/packages/form-core/types/FocusMixinTypes.d.ts index ce4270c6c..4f7c23606 100644 --- a/packages/form-core/types/FocusMixinTypes.d.ts +++ b/packages/form-core/types/FocusMixinTypes.d.ts @@ -3,7 +3,6 @@ import { LitElement } from '@lion/core'; import { FormControlHost } from './FormControlMixinTypes'; export declare class FocusHost { - constructor(...args: any[]); focused: boolean; connectedCallback(): void; @@ -19,6 +18,11 @@ export declare class FocusHost { export declare function FocusImplementation>( superclass: T, -): T & Constructor & FocusHost & Constructor & typeof FormControlHost; +): T & + Constructor & + Pick & + Constructor & + Pick & + Pick; export type FocusMixin = typeof FocusImplementation; diff --git a/packages/form-core/types/FormControlMixinTypes.d.ts b/packages/form-core/types/FormControlMixinTypes.d.ts index 35de99bf7..cd8ac672b 100644 --- a/packages/form-core/types/FormControlMixinTypes.d.ts +++ b/packages/form-core/types/FormControlMixinTypes.d.ts @@ -36,7 +36,6 @@ declare interface HTMLElementWithValue extends HTMLElement { } export declare class FormControlHost { - constructor(...args: any[]); static get styles(): CSSResultArray; static get properties(): { name: { @@ -176,12 +175,13 @@ export declare function FormControlImplementation & - typeof FormControlHost & + Pick & Constructor & - typeof FormRegisteringHost & + Pick & Constructor & - typeof DisabledHost & + Pick & Constructor & - typeof SlotHost; + Pick & + Pick; export type FormControlMixin = typeof FormControlImplementation; diff --git a/packages/form-core/types/FormatMixinTypes.d.ts b/packages/form-core/types/FormatMixinTypes.d.ts index 88dba6df4..207bb08b4 100644 --- a/packages/form-core/types/FormatMixinTypes.d.ts +++ b/packages/form-core/types/FormatMixinTypes.d.ts @@ -5,7 +5,6 @@ import { ValidateHost } from './validate/ValidateMixinTypes'; import { FormControlHost } from './FormControlMixinTypes'; export declare class FormatHost { - constructor(...args: any[]); formattedValue: string; serializedValue: string; formatOn: string; @@ -41,10 +40,11 @@ export declare function FormatImplementation>( superclass: T, ): T & Constructor & - FormatHost & + Pick & Constructor & - typeof ValidateHost & + Pick & Constructor & - typeof FormControlHost; + Pick & + Pick; export type FormatMixin = typeof FormatImplementation; diff --git a/packages/form-core/types/InteractionStateMixinTypes.d.ts b/packages/form-core/types/InteractionStateMixinTypes.d.ts index 1d4f2a90e..bd1949f96 100644 --- a/packages/form-core/types/InteractionStateMixinTypes.d.ts +++ b/packages/form-core/types/InteractionStateMixinTypes.d.ts @@ -3,7 +3,6 @@ import { LitElement } from '@lion/core'; import { FormControlHost } from './FormControlMixinTypes'; export declare class InteractionStateHost { - constructor(...args: any[]); prefilled: boolean; filled: boolean; touched: boolean; @@ -27,8 +26,9 @@ export declare function InteractionStateImplementation & - typeof InteractionStateHost & + Pick & Constructor & - typeof FormControlHost; + Pick & + Pick; export type InteractionStateMixin = typeof InteractionStateImplementation; diff --git a/packages/form-core/types/NativeTextFieldMixinTypes.d.ts b/packages/form-core/types/NativeTextFieldMixinTypes.d.ts index 7411f77d9..3cfb2eb2a 100644 --- a/packages/form-core/types/NativeTextFieldMixinTypes.d.ts +++ b/packages/form-core/types/NativeTextFieldMixinTypes.d.ts @@ -6,7 +6,6 @@ export declare class NativeTextField extends LionField { } export declare class NativeTextFieldHost { - constructor(...args: any[]); get selectionStart(): number; set selectionStart(value: number); get selectionEnd(): number; @@ -15,6 +14,9 @@ export declare class NativeTextFieldHost { export declare function NativeTextFieldImplementation>( superclass: T, -): T & Constructor & NativeTextFieldHost & typeof NativeTextField; +): T & + Constructor & + Pick & + Pick; export type NativeTextFieldMixin = typeof NativeTextFieldImplementation; diff --git a/packages/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts b/packages/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts index 1eb530966..e55e895d4 100644 --- a/packages/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts +++ b/packages/form-core/types/choice-group/ChoiceGroupMixinTypes.d.ts @@ -5,7 +5,6 @@ import { FormRegistrarHost } from '../registration/FormRegistrarMixinTypes'; import { InteractionStateHost } from '../InteractionStateMixinTypes'; export declare class ChoiceGroupHost { - constructor(...args: any[]); multipleChoice: boolean; connectedCallback(): void; @@ -54,10 +53,11 @@ export declare function ChoiceGroupImplementation & - ChoiceGroupHost & + Pick & Constructor & - typeof FormRegistrarHost & + Pick & Constructor & - typeof InteractionStateHost; + Pick & + Pick; export type ChoiceGroupMixin = typeof ChoiceGroupImplementation; diff --git a/packages/form-core/types/choice-group/ChoiceInputMixinTypes.d.ts b/packages/form-core/types/choice-group/ChoiceInputMixinTypes.d.ts index 1862b1c46..d3443eaa0 100644 --- a/packages/form-core/types/choice-group/ChoiceInputMixinTypes.d.ts +++ b/packages/form-core/types/choice-group/ChoiceInputMixinTypes.d.ts @@ -15,7 +15,6 @@ export interface ChoiceInputSerializedValue { } export declare class ChoiceInputHost { - constructor(...args: any[]); modelValue: ChoiceInputModelValue; serializedValue: ChoiceInputSerializedValue; @@ -79,9 +78,9 @@ export declare function ChoiceInputImplementation & - ChoiceInputHost & + Pick & Constructor & - FormatHost & - HTMLElement; + Pick & + Pick; export type ChoiceInputMixin = typeof ChoiceInputImplementation; diff --git a/packages/form-core/types/form-group/FormGroupMixinTypes.d.ts b/packages/form-core/types/form-group/FormGroupMixinTypes.d.ts index 539fddbfd..b9ca5eed6 100644 --- a/packages/form-core/types/form-group/FormGroupMixinTypes.d.ts +++ b/packages/form-core/types/form-group/FormGroupMixinTypes.d.ts @@ -7,7 +7,6 @@ import { FormRegistrarHost } from '../registration/FormRegistrarMixinTypes'; import { ValidateHost } from '../validate/ValidateMixinTypes'; export declare class FormGroupHost { - constructor(...args: any[]); protected static _addDescriptionElementIdsToField(): void; _inputNode: HTMLElement; submitGroup(): void; @@ -30,16 +29,17 @@ export declare function FormGroupImplementation & - typeof FormGroupHost & + Pick & Constructor & - typeof FormRegistrarHost & + Pick & Constructor & - typeof FormControlHost & + Pick & Constructor & - typeof ValidateHost & + Pick & Constructor & - typeof DisabledHost & + Pick & Constructor & - typeof SlotHost; + Pick & + Pick; export type FormGroupMixin = typeof FormGroupImplementation; diff --git a/packages/form-core/types/registration/FormRegisteringMixinTypes.d.ts b/packages/form-core/types/registration/FormRegisteringMixinTypes.d.ts index 8a0804d5e..8872aa60f 100644 --- a/packages/form-core/types/registration/FormRegisteringMixinTypes.d.ts +++ b/packages/form-core/types/registration/FormRegisteringMixinTypes.d.ts @@ -3,7 +3,6 @@ import { FormRegistrarHost } from './FormRegistrarMixinTypes'; import { LitElement } from '@lion/core'; export declare class FormRegisteringHost { - constructor(...args: any[]); connectedCallback(): void; disconnectedCallback(): void; _parentFormGroup?: FormRegistrarHost; @@ -11,6 +10,9 @@ export declare class FormRegisteringHost { export declare function FormRegisteringImplementation>( superclass: T, -): T & Constructor & typeof FormRegisteringHost; +): T & + Constructor & + Pick & + Pick; export type FormRegisteringMixin = typeof FormRegisteringImplementation; diff --git a/packages/form-core/types/registration/FormRegistrarMixinTypes.d.ts b/packages/form-core/types/registration/FormRegistrarMixinTypes.d.ts index 823d17c4e..95c047ed3 100644 --- a/packages/form-core/types/registration/FormRegistrarMixinTypes.d.ts +++ b/packages/form-core/types/registration/FormRegistrarMixinTypes.d.ts @@ -9,7 +9,6 @@ export declare class ElementWithParentFormGroup { } export declare class FormRegistrarHost { - constructor(...args: any[]); _isFormOrFieldset: boolean; formElements: FormControlsCollection & { [x: string]: any }; addFormElement( @@ -29,8 +28,9 @@ export declare function FormRegistrarImplementation & - typeof FormRegistrarHost & + Pick & Constructor & - typeof FormRegisteringHost; + Pick & + Pick; export type FormRegistrarMixin = typeof FormRegistrarImplementation; diff --git a/packages/form-core/types/registration/FormRegistrarPortalMixinTypes.d.ts b/packages/form-core/types/registration/FormRegistrarPortalMixinTypes.d.ts index e376d4ee2..a8a94235b 100644 --- a/packages/form-core/types/registration/FormRegistrarPortalMixinTypes.d.ts +++ b/packages/form-core/types/registration/FormRegistrarPortalMixinTypes.d.ts @@ -2,13 +2,15 @@ import { Constructor } from '@open-wc/dedupe-mixin'; import { LitElement } from '@lion/core'; export declare class FormRegistrarPortalHost { - constructor(...args: any[]); registrationTarget: HTMLElement; __redispatchEventForFormRegistrarPortalMixin(ev: CustomEvent): void; } export declare function FormRegistrarPortalImplementation>( superclass: T, -): T & Constructor & FormRegistrarPortalHost; +): T & + Constructor & + Pick & + Pick; export type FormRegistrarPortalMixin = typeof FormRegistrarPortalImplementation; diff --git a/packages/form-core/types/utils/SyncUpdatableMixinTypes.d.ts b/packages/form-core/types/utils/SyncUpdatableMixinTypes.d.ts index d47766660..c16d3a32a 100644 --- a/packages/form-core/types/utils/SyncUpdatableMixinTypes.d.ts +++ b/packages/form-core/types/utils/SyncUpdatableMixinTypes.d.ts @@ -10,7 +10,6 @@ export declare interface SyncUpdatableNamespace { } export declare class SyncUpdatableHost { - constructor(...args: any[]); static __syncUpdatableHasChanged(name: string, newValue: any, oldValue: any): boolean; updateSync(name: string, oldValue: any): void; __syncUpdatableInitialize(): void; @@ -24,6 +23,9 @@ export type SyncUpdatableHostType = typeof SyncUpdatableHost; export declare function SyncUpdatableImplementation>( superclass: T, -): T & Constructor & typeof SyncUpdatableHost; +): T & + Constructor & + Pick & + Pick; export type SyncUpdatableMixin = typeof SyncUpdatableImplementation; diff --git a/packages/form-core/types/validate/ValidateMixinTypes.d.ts b/packages/form-core/types/validate/ValidateMixinTypes.d.ts index 5849a12bd..a5b16201a 100644 --- a/packages/form-core/types/validate/ValidateMixinTypes.d.ts +++ b/packages/form-core/types/validate/ValidateMixinTypes.d.ts @@ -19,7 +19,6 @@ type FeedbackMessage = { }; export declare class ValidateHost { - constructor(...args: any[]); validators: Validator[]; hasFeedbackFor: string[]; shouldShowFeedbackFor: string[]; @@ -76,16 +75,17 @@ export declare function ValidateImplementation superclass: T, ): T & Constructor & - typeof ValidateHost & + Pick & Constructor & - typeof FormControlHost & + Pick & Constructor & - typeof SyncUpdatableHost & + Pick & Constructor & - typeof DisabledHost & + Pick & Constructor & - typeof SlotHost & + Pick & Constructor & - typeof ScopedElementsHost; + Pick & + Pick; export type ValidateMixin = typeof ValidateImplementation; diff --git a/packages/listbox/types/ListboxMixinTypes.d.ts b/packages/listbox/types/ListboxMixinTypes.d.ts index ba570226f..ae7ba245c 100644 --- a/packages/listbox/types/ListboxMixinTypes.d.ts +++ b/packages/listbox/types/ListboxMixinTypes.d.ts @@ -9,7 +9,6 @@ import { LionOptions } from '../src/LionOptions.js'; import { LionOption } from '../src/LionOption.js'; export declare class ListboxHost { - constructor(...args: any[]); /** * When true, will synchronize activedescendant and selected element on * arrow key navigation. @@ -80,14 +79,15 @@ export declare function ListboxImplementation> superclass: T, ): T & Constructor & - typeof ListboxHost & + Pick & Constructor & - typeof ChoiceGroupHost & + Pick & Constructor & - typeof SlotHost & + Pick & Constructor & - typeof FormRegistrarHost & + Pick & Constructor & - typeof FormControlHost; + Pick & + Pick; export type ListboxMixin = typeof ListboxImplementation; diff --git a/packages/localize/types/LocalizeMixinTypes.d.ts b/packages/localize/types/LocalizeMixinTypes.d.ts index 329a1416c..580d06486 100644 --- a/packages/localize/types/LocalizeMixinTypes.d.ts +++ b/packages/localize/types/LocalizeMixinTypes.d.ts @@ -56,7 +56,6 @@ interface msgOptions { } declare class LocalizeMixinHost { - constructor(...args: any[]); static get localizeNamespaces(): StringToFunctionMap[]; static get waitForLocalizeNamespaces(): boolean; @@ -83,6 +82,9 @@ declare class LocalizeMixinHost { declare function LocalizeMixinImplementation>( superclass: T, -): T & Constructor & typeof LocalizeMixinHost; +): T & + Constructor & + Pick & + Pick; export type LocalizeMixin = typeof LocalizeMixinImplementation; diff --git a/packages/overlays/types/ArrowMixinTypes.d.ts b/packages/overlays/types/ArrowMixinTypes.d.ts index 20a3d8101..4e53fc8bc 100644 --- a/packages/overlays/types/ArrowMixinTypes.d.ts +++ b/packages/overlays/types/ArrowMixinTypes.d.ts @@ -5,7 +5,6 @@ import { Options as PopperOptions, State } from '@popperjs/core/lib/popper'; import { OverlayConfig } from '../types/OverlayConfig'; export declare class ArrowHost { - constructor(...args: any[]); static get properties(): { hasArrow: { type: BooleanConstructor; @@ -30,6 +29,9 @@ export declare class ArrowHost { export declare function ArrowImplementation>( superclass: T, -): T & Constructor & ArrowHost; +): T & + Constructor & + Pick & + Pick; export type ArrowMixin = typeof ArrowImplementation; diff --git a/packages/overlays/types/OverlayMixinTypes.d.ts b/packages/overlays/types/OverlayMixinTypes.d.ts index 875cd468d..d1c7e90f3 100644 --- a/packages/overlays/types/OverlayMixinTypes.d.ts +++ b/packages/overlays/types/OverlayMixinTypes.d.ts @@ -17,7 +17,6 @@ export interface DefineOverlayConfig { } export declare class OverlayHost { - constructor(...args: any[]); public opened: Boolean; public get config(): OverlayConfig; @@ -67,6 +66,9 @@ export declare class OverlayHost { export declare function OverlayImplementation>( superclass: T, -): T & Constructor & typeof OverlayHost; +): T & + Constructor & + Pick & + Pick; export type OverlayMixin = typeof OverlayImplementation; diff --git a/packages/tooltip/src/LionTooltip.js b/packages/tooltip/src/LionTooltip.js index 0c7d04012..dfe28aadd 100644 --- a/packages/tooltip/src/LionTooltip.js +++ b/packages/tooltip/src/LionTooltip.js @@ -11,6 +11,7 @@ import { ArrowMixin, OverlayMixin } from '@lion/overlays'; * @customElement lion-tooltip */ export class LionTooltip extends ArrowMixin(OverlayMixin(LitElement)) { + /** @type {any} */ static get properties() { return { invokerRelation: {