diff --git a/package.json b/package.json index cdff35c..395465f 100644 --- a/package.json +++ b/package.json @@ -46,9 +46,9 @@ "@antfu/eslint-config": "2.8.0", "eslint": "^8.57.0", "playwright": "^1.42.1", - "typescript": "^5.3.3", + "typescript": "^5.4.2", "vite": "^5.1.5", - "vitepress": "1.0.0-rc.44", + "vitepress": "1.0.0-rc.45", "vitest": "^1.3.1", "vue": "^3.4.21", "vue-tsc": "^2.0.5" diff --git a/packages/core/package.json b/packages/core/package.json index 7da411e..f02653b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -66,10 +66,10 @@ "tabbable": "^6.2.0" }, "devDependencies": { - "@types/node": "^20.11.24", + "@types/node": "^20.11.25", "fast-glob": "^3.3.2", "lightningcss": "^1.24.0", - "typescript": "^5.3.3", + "typescript": "^5.4.2", "vite": "^5.1.5", "vite-plugin-dts": "^3.7.3" } diff --git a/packages/core/src/components/_parent.ts b/packages/core/src/components/_parent.ts index 56a9dab..bf4a0ce 100644 --- a/packages/core/src/components/_parent.ts +++ b/packages/core/src/components/_parent.ts @@ -23,10 +23,10 @@ export interface ParentOptions { */ initEvents?: boolean /** - * An Object of with events listener + * An object to instantiate events listeners * @default undefined */ - on?: Record) => void> + on?: Partial) => void | undefined>> } export interface ParentEvent { @@ -51,19 +51,6 @@ export default abstract class Parent { throw this.error('The element/selector provided cannot be found.') this.el = checkEl - - if (options.on) { - for (const key in options.on) { - if (Object.prototype.hasOwnProperty.call(options.on, key)) { - const element = options.on[key] - this.el.addEventListener( - `c.${this.name}.${key}`, - e => element(e as CustomEvent), - ) - } - } - } - this.opts = options } @@ -107,6 +94,20 @@ export default abstract class Parent { * Init the component */ public init() { + if (this.opts.on) { + for (const key in this.opts.on) { + if (Object.prototype.hasOwnProperty.call(this.opts.on, key)) { + const element = this.opts.on[key] + if (!element) + continue + this.el.addEventListener( + `c.${this.name}.${key}`, + e => element(e as CustomEvent), + ) + } + } + } + this.emitEvent('init') if (this.accessibilityStatus.styles) this.el.classList.add(`c-${this.name}--a11y`) diff --git a/packages/core/src/components/collapse.ts b/packages/core/src/components/collapse.ts index 33a6b71..f8932a8 100644 --- a/packages/core/src/components/collapse.ts +++ b/packages/core/src/components/collapse.ts @@ -10,7 +10,7 @@ declare global { export interface CollapseOptions extends ParentOptions {} -export default class Collapse extends Parent { +export default class Collapse extends Parent { declare public opts: CollapseOptions private triggers: HTMLElement[] = [] private expanded = false diff --git a/packages/core/src/components/drag.ts b/packages/core/src/components/drag.ts index 25bd92d..6b36c80 100644 --- a/packages/core/src/components/drag.ts +++ b/packages/core/src/components/drag.ts @@ -8,7 +8,7 @@ declare global { export interface DragOptions extends ParentOptions {} -export default class Drag extends Parent { +export default class Drag extends Parent { declare public opts: DragOptions private isDown = false private draggableClass = 'c-drag--draggable' diff --git a/packages/core/src/components/drilldown.ts b/packages/core/src/components/drilldown.ts index 56acfb8..7cf9b43 100644 --- a/packages/core/src/components/drilldown.ts +++ b/packages/core/src/components/drilldown.ts @@ -27,7 +27,7 @@ interface DrilldownItem { level: number } -export default class Drilldown extends Parent { +export default class Drilldown extends Parent { declare public opts: DrilldownOptions private currentEl: HTMLUListElement | null = null private wrapper: HTMLUListElement | null = null diff --git a/packages/core/src/components/dropdown.ts b/packages/core/src/components/dropdown.ts index fa5f580..6ea776a 100644 --- a/packages/core/src/components/dropdown.ts +++ b/packages/core/src/components/dropdown.ts @@ -33,7 +33,7 @@ export interface DropdownOptions extends ParentOptions { mutationObserver?: boolean } -export default class Dropdown extends Parent { +export default class Dropdown extends Parent { declare public opts: DropdownOptions private triggerEl: HTMLButtonElement | HTMLLinkElement | null = null private menuEl: HTMLUListElement | null = null diff --git a/packages/core/src/components/marquee.ts b/packages/core/src/components/marquee.ts index 318b8b2..26d8d9a 100644 --- a/packages/core/src/components/marquee.ts +++ b/packages/core/src/components/marquee.ts @@ -36,7 +36,7 @@ export interface MarqueeOptions extends ParentOptions { mutationObserver?: boolean } -export default class Marquee extends Parent { +export default class Marquee extends Parent { declare public opts: MarqueeOptions private containerEl: HTMLElement | null = null private resizeObserver?: ResizeObserver diff --git a/packages/vue/demo/package.json b/packages/vue/demo/package.json index 75d4d5a..92d7799 100644 --- a/packages/vue/demo/package.json +++ b/packages/vue/demo/package.json @@ -14,7 +14,7 @@ "devDependencies": { "@compotes/vue": "workspace:*", "@vitejs/plugin-vue": "^5.0.4", - "typescript": "^5.3.3", + "typescript": "^5.4.2", "vite": "^5.1.5", "vue-tsc": "^2.0.5" } diff --git a/packages/vue/demo/src/App.vue b/packages/vue/demo/src/App.vue index 137c241..fc6f8f6 100644 --- a/packages/vue/demo/src/App.vue +++ b/packages/vue/demo/src/App.vue @@ -1,9 +1,16 @@