@genesislcap/foundation-events 14.67.2 → 14.67.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (51) hide show
  1. package/README.md +5 -1
  2. package/dist/dts/eventEmitter/eventEmitterDI.d.ts +43 -4
  3. package/dist/dts/eventEmitter/eventEmitterDI.d.ts.map +1 -1
  4. package/dist/dts/eventEmitter/eventEmitterMixin.d.ts +57 -317
  5. package/dist/dts/eventEmitter/eventEmitterMixin.d.ts.map +1 -1
  6. package/dist/dts/index.d.ts +1 -0
  7. package/dist/dts/index.d.ts.map +1 -1
  8. package/dist/dts/tsdoc-metadata.json +11 -0
  9. package/dist/dts/types.d.ts +78 -10
  10. package/dist/dts/types.d.ts.map +1 -1
  11. package/dist/dts/utils/index.d.ts +2 -0
  12. package/dist/dts/utils/index.d.ts.map +1 -0
  13. package/dist/dts/utils/logger.d.ts +5 -0
  14. package/dist/dts/utils/logger.d.ts.map +1 -0
  15. package/dist/esm/eventEmitter/eventEmitterDI.js +14 -0
  16. package/dist/esm/eventEmitter/eventEmitterMixin.js +57 -4
  17. package/dist/esm/index.js +1 -0
  18. package/dist/esm/types.js +48 -0
  19. package/dist/esm/utils/index.js +1 -0
  20. package/dist/esm/utils/logger.js +5 -0
  21. package/dist/foundation-events.api.json +1374 -0
  22. package/dist/foundation-events.d.ts +246 -0
  23. package/docs/.gitattributes +2 -0
  24. package/docs/api/foundation-events.constructabletypedeventemitter.md +16 -0
  25. package/docs/api/foundation-events.createinputemitter.md +27 -0
  26. package/docs/api/foundation-events.createselectemitter.md +27 -0
  27. package/docs/api/foundation-events.customevent.md +12 -0
  28. package/docs/api/foundation-events.customeventmap.md +16 -0
  29. package/docs/api/foundation-events.defaulteventemitterdi.emit.md +22 -0
  30. package/docs/api/foundation-events.defaulteventemitterdi.md +21 -0
  31. package/docs/api/foundation-events.emitargs.md +14 -0
  32. package/docs/api/foundation-events.emitoptions.md +12 -0
  33. package/docs/api/foundation-events.emitorigin.md +12 -0
  34. package/docs/api/foundation-events.emitreturn.md +12 -0
  35. package/docs/api/foundation-events.eventdetailmap.md +12 -0
  36. package/docs/api/foundation-events.eventemitter.md +59 -0
  37. package/docs/api/foundation-events.eventemitterdi.emit.md +22 -0
  38. package/docs/api/foundation-events.eventemitterdi.md +48 -0
  39. package/docs/api/foundation-events.eventemittertarget.md +16 -0
  40. package/docs/api/foundation-events.getbaseemitargs.md +12 -0
  41. package/docs/api/foundation-events.keysmatching.md +14 -0
  42. package/docs/api/foundation-events.logger.md +12 -0
  43. package/docs/api/foundation-events.md +47 -0
  44. package/docs/api/foundation-events.registeremitter.md +13 -0
  45. package/docs/api/foundation-events.targetfirstselectedvalue.md +12 -0
  46. package/docs/api/foundation-events.targetvalue.md +12 -0
  47. package/docs/api/foundation-events.typedemitter._emit.md +22 -0
  48. package/docs/api/foundation-events.typedemitter.md +19 -0
  49. package/docs/api/index.md +12 -0
  50. package/docs/api-report.md +106 -0
  51. package/package.json +24 -4
@@ -0,0 +1,246 @@
1
+ import { Binding } from '@microsoft/fast-element';
2
+ import { Constructable } from '@microsoft/fast-element';
3
+ import { Controller } from '@microsoft/fast-element';
4
+ import { ExecutionContext } from '@microsoft/fast-element';
5
+ import { FASTElement } from '@microsoft/fast-element';
6
+ import { InterfaceSymbol } from '@microsoft/fast-foundation';
7
+ import { Logger } from '@genesislcap/foundation-utils';
8
+
9
+ /**
10
+ * @deprecated - Use {@link EventEmitterTarget} type instead.
11
+ * @public
12
+ */
13
+ export declare type ConstructableTypedEventEmitter = Constructable<FASTElement & HTMLElement>;
14
+
15
+ /**
16
+ * `<input>` template emit helper.
17
+ *
18
+ * @remarks
19
+ * In some.template.ts file you create the helper upfront by passing in the full event map.
20
+ *
21
+ * @example
22
+ * ```ts
23
+ * const inputEmit = createInputEmitter<EventMap>();
24
+ * ...
25
+ * <zero-text-field @change="${inputEmit('some-input-changed')}">
26
+ * ```
27
+ *
28
+ * @public
29
+ */
30
+ export declare const createInputEmitter: <TEventDetailMap extends EventDetailMap>() => <K extends KeysMatching<TEventDetailMap, string>>(type: K, options?: EmitOptions) => Binding;
31
+
32
+ /**
33
+ * `<select>` template emit helper.
34
+ *
35
+ * @remarks
36
+ * In some.template.ts file you create the helper upfront by passing in the full event map.
37
+ *
38
+ * @example
39
+ * ```ts
40
+ * const selectEmit = createSelectEmitter<EventMap>();
41
+ * ...
42
+ * <zero-select @change="${selectEmit('some-select-changed')}">
43
+ * ```
44
+ *
45
+ * @public
46
+ */
47
+ export declare const createSelectEmitter: <TEventDetailMap extends EventDetailMap>() => <K extends KeysMatching<TEventDetailMap, string>>(type: K, options?: EmitOptions) => Binding;
48
+
49
+ /**
50
+ * @public
51
+ */
52
+ export declare const customEvent: <TEventDetail = void>(ctx: ExecutionContext) => CustomEvent<TEventDetail>;
53
+
54
+ /**
55
+ * @public
56
+ */
57
+ export declare type CustomEventMap<TEventDetailMap extends EventDetailMap> = {
58
+ [K in keyof TEventDetailMap]: CustomEvent<TEventDetailMap[K]>;
59
+ };
60
+
61
+ /**
62
+ * Default EventEmitterDI.
63
+ * @typeParam TEventDetailMap - The {@link EventDetailMap}.
64
+ * @public
65
+ */
66
+ export declare class DefaultEventEmitterDI<TEventDetailMap extends EventDetailMap> implements EventEmitterDI<TEventDetailMap> {
67
+ emit<K extends keyof TEventDetailMap>(...args: TEventDetailMap[K] extends void ? [origin: EmitOrigin, type: K, options?: EmitOptions] : [origin: EmitOrigin, type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
68
+ }
69
+
70
+ /**
71
+ * @public
72
+ */
73
+ export declare type EmitArgs = [string, {} | undefined, EmitOptions | undefined];
74
+
75
+ /**
76
+ * @public
77
+ */
78
+ export declare type EmitOptions = Omit<CustomEventInit, 'detail'>;
79
+
80
+ /**
81
+ * @public
82
+ */
83
+ export declare type EmitOrigin = FASTElement;
84
+
85
+ /**
86
+ * @public
87
+ */
88
+ export declare type EmitReturn = boolean | void;
89
+
90
+ /**
91
+ * @public
92
+ */
93
+ export declare type EventDetailMap = Record<string, unknown>;
94
+
95
+ /**
96
+ * EventEmitter mixin.
97
+ *
98
+ * @remarks
99
+ * Strongly types the components `$emit` method, allowing only the mapped events to be emitted.
100
+ *
101
+ * @example
102
+ * Apply mixin to the base {@link @microsoft/fast-element#FASTElement | FASTElement}
103
+ *
104
+ * # Import
105
+ * ```ts
106
+ * import { EventEmitter, SomeSystemLevelEventDetailMap } from '@genesislcap/foundation-events';
107
+ * import { StoreEventDetailMap, TradeEntryEventDetailMap } from '../store'; // < custom app level event maps
108
+ * ```
109
+ *
110
+ * # Create event map
111
+ * ```ts
112
+ * type EventMap = SomeSystemLevelEventDetailMap & StoreEventDetailMap & TradeEntryEventDetailMap;
113
+ * ```
114
+ *
115
+ * # Apply Mixin
116
+ * ```ts
117
+ * export class MyComponent extends EventEmitter<EventMap>(FASTElement) {
118
+ * onSomeComponentEvent() {
119
+ * this.$emit('some-allowed-event', { foo: 'expected data structure' });
120
+ * }
121
+ * }
122
+ * ```
123
+ *
124
+ * @example
125
+ * Apply mixin to a class in the inheritance chain requires a second generic type param.
126
+ *
127
+ * # Apply Mixin to MyComponent that extends MyBaseComponent (which might be abstract). Mixin can be applied at different levels.
128
+ * # Please note there's a current limitation on retaining protected member access with this approach, so apply to base where possible.
129
+ * # Also, super classes cannot emit typed events via inheritance. Each level must have an explicit map. Devs can use a Union and Pick to create these.
130
+ * ```ts
131
+ * export class MyComponent extends EventEmitter<EventMap, MyBaseComponent>(MyBaseComponent) {}
132
+ * ```
133
+ *
134
+ * @privateRemarks
135
+ * Failed to retain protected member access when the mixin is applied while keeping the typed emitter, we can revisit if needed.
136
+ * So in the last example, if `MyBaseComponent` had a protected member, `MyComponent` wouldn't be able to access it with the mixin
137
+ * applied. Public members are fine. It may be a limitation of TypeScript. Suggestions welcome, but be warned it's a time sink.
138
+ *
139
+ * @typeParam TEventDetailMap - The {@link EventDetailMap}.
140
+ * @typeParam TTarget - The target class.
141
+ * @param Target - The class to apply the mixin to which ultimately extends {@link @microsoft/fast-element#FASTElement | FASTElement}.
142
+ * @public
143
+ */
144
+ export declare const EventEmitter: <TEventDetailMap extends EventDetailMap, TTarget extends FASTElement = FASTElement>(Target: EventEmitterTarget<TTarget>) => abstract new (...args: any[]) => {
145
+ $emit<K extends keyof TEventDetailMap & string>(...args: TEventDetailMap[K] extends void ? [type: K, options?: EmitOptions] : [type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
146
+ readonly $fastController: Controller;
147
+ connectedCallback(): void;
148
+ disconnectedCallback(): void;
149
+ attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
150
+ };
151
+
152
+ /**
153
+ * EventEmitterDI interface.
154
+ *
155
+ * @remarks
156
+ * A strongly typed event emitter with events typed to {@link EventDetailMap} pairings. This is closely related to the
157
+ * {@link EventEmitter} mixin in terms of functionality, however its purpose is different. This allows you to create
158
+ * pre-configured EventEmitters that can be injected anywhere. These can emit typed events from an origin html element,
159
+ * without that element needing to be an actual {@link @microsoft/fast-element#FASTElement | FASTElement}. If you are
160
+ * starting out, we recommend using the {@link EventEmitter} mixin where possible.
161
+ *
162
+ * @example Create an emitter within the DI.
163
+ * ```ts
164
+ * import {registerEmitter} from '@genesislcap/foundation-events';
165
+ * ...
166
+ * export const MyEventEmitter = registerEmitter<MyEventDetailMap>();
167
+ * ```
168
+ *
169
+ * @example Use that emitter.
170
+ * ```ts
171
+ * export class MyComponent extends FASTElement {
172
+ * @observable someElement!: HTMLElement;
173
+ * @MyEventEmitter emitter: MyEventEmitter;
174
+ * connectedCallback() {
175
+ * this.emitter.emit(this.someElement, 'some-event', {foo: 'bar'});
176
+ * }
177
+ * }
178
+ * ```
179
+ *
180
+ * @typeParam TEventDetailMap - The {@link EventDetailMap}.
181
+ * @public
182
+ */
183
+ export declare interface EventEmitterDI<TEventDetailMap extends EventDetailMap> {
184
+ emit<K extends keyof TEventDetailMap>(...args: TEventDetailMap[K] extends void ? [origin: EmitOrigin, type: K, options?: EmitOptions] : [origin: EmitOrigin, type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
185
+ }
186
+
187
+ /**
188
+ * EventEmitterDI DI key.
189
+ * @internal
190
+ */
191
+ export declare const EventEmitterDI: InterfaceSymbol<EventEmitterDI<EventDetailMap>>;
192
+
193
+ /**
194
+ * @remarks
195
+ * Using `abstract` here should cover mixing into both concrete and abstract classes.
196
+ * @public
197
+ */
198
+ export declare type EventEmitterTarget<TBase extends FASTElement> = abstract new (...args: any[]) => TBase;
199
+
200
+ /**
201
+ * @public
202
+ */
203
+ export declare const getBaseEmitArgs: (...args: unknown[]) => EmitArgs;
204
+
205
+ /**
206
+ * @public
207
+ */
208
+ export declare type KeysMatching<T, V> = {
209
+ [K in keyof T]-?: T[K] extends V ? K : never;
210
+ }[keyof T];
211
+
212
+ /**
213
+ * @public
214
+ */
215
+ export declare const logger: Logger;
216
+
217
+ /**
218
+ * Register an emitter with the DI.
219
+ * @typeParam TEventDetailMap - The {@link EventDetailMap}.
220
+ * @public
221
+ */
222
+ export declare const registerEmitter: <TEventDetailMap extends EventDetailMap>() => InterfaceSymbol<EventEmitterDI<TEventDetailMap>>;
223
+
224
+ /**
225
+ * @public
226
+ */
227
+ export declare const targetFirstSelectedValue: ValueGetter;
228
+
229
+ /**
230
+ * @public
231
+ */
232
+ export declare const targetValue: ValueGetter;
233
+
234
+ /**
235
+ * @public
236
+ */
237
+ export declare interface TypedEmitter<TEventDetailMap extends EventDetailMap> {
238
+ $emit<K extends keyof TEventDetailMap & string>(...args: TEventDetailMap[K] extends void ? [type: K, options?: EmitOptions] : [type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
239
+ }
240
+
241
+ /**
242
+ * @internal
243
+ */
244
+ declare type ValueGetter = (ctx: ExecutionContext) => any;
245
+
246
+ export { }
@@ -0,0 +1,2 @@
1
+ *.md -diff
2
+ *.md linguist-generated
@@ -0,0 +1,16 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [ConstructableTypedEventEmitter](./foundation-events.constructabletypedeventemitter.md)
4
+
5
+ ## ConstructableTypedEventEmitter type
6
+
7
+ > Warning: This API is now obsolete.
8
+ >
9
+ > - Use [EventEmitterTarget](./foundation-events.eventemittertarget.md) type instead.
10
+ >
11
+
12
+ **Signature:**
13
+
14
+ ```typescript
15
+ export type ConstructableTypedEventEmitter = Constructable<FASTElement & HTMLElement>;
16
+ ```
@@ -0,0 +1,27 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [createInputEmitter](./foundation-events.createinputemitter.md)
4
+
5
+ ## createInputEmitter variable
6
+
7
+ `<input>` template emit helper.
8
+
9
+ **Signature:**
10
+
11
+ ```typescript
12
+ createInputEmitter: <TEventDetailMap extends EventDetailMap>() => <K extends KeysMatching<TEventDetailMap, string>>(type: K, options?: EmitOptions) => Binding
13
+ ```
14
+
15
+ ## Remarks
16
+
17
+ In some.template.ts file you create the helper upfront by passing in the full event map.
18
+
19
+ ## Example
20
+
21
+
22
+ ```ts
23
+ const inputEmit = createInputEmitter<EventMap>();
24
+ ...
25
+ <zero-text-field @change="${inputEmit('some-input-changed')}">
26
+ ```
27
+
@@ -0,0 +1,27 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [createSelectEmitter](./foundation-events.createselectemitter.md)
4
+
5
+ ## createSelectEmitter variable
6
+
7
+ `<select>` template emit helper.
8
+
9
+ **Signature:**
10
+
11
+ ```typescript
12
+ createSelectEmitter: <TEventDetailMap extends EventDetailMap>() => <K extends KeysMatching<TEventDetailMap, string>>(type: K, options?: EmitOptions) => Binding
13
+ ```
14
+
15
+ ## Remarks
16
+
17
+ In some.template.ts file you create the helper upfront by passing in the full event map.
18
+
19
+ ## Example
20
+
21
+
22
+ ```ts
23
+ const selectEmit = createSelectEmitter<EventMap>();
24
+ ...
25
+ <zero-select @change="${selectEmit('some-select-changed')}">
26
+ ```
27
+
@@ -0,0 +1,12 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [customEvent](./foundation-events.customevent.md)
4
+
5
+ ## customEvent variable
6
+
7
+
8
+ **Signature:**
9
+
10
+ ```typescript
11
+ customEvent: <TEventDetail = void>(ctx: ExecutionContext) => CustomEvent<TEventDetail>
12
+ ```
@@ -0,0 +1,16 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [CustomEventMap](./foundation-events.customeventmap.md)
4
+
5
+ ## CustomEventMap type
6
+
7
+
8
+ **Signature:**
9
+
10
+ ```typescript
11
+ export type CustomEventMap<TEventDetailMap extends EventDetailMap> = {
12
+ [K in keyof TEventDetailMap]: CustomEvent<TEventDetailMap[K]>;
13
+ };
14
+ ```
15
+ **References:** [EventDetailMap](./foundation-events.eventdetailmap.md)
16
+
@@ -0,0 +1,22 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [DefaultEventEmitterDI](./foundation-events.defaulteventemitterdi.md) &gt; [emit](./foundation-events.defaulteventemitterdi.emit.md)
4
+
5
+ ## DefaultEventEmitterDI.emit() method
6
+
7
+ **Signature:**
8
+
9
+ ```typescript
10
+ emit<K extends keyof TEventDetailMap>(...args: TEventDetailMap[K] extends void ? [origin: EmitOrigin, type: K, options?: EmitOptions] : [origin: EmitOrigin, type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
11
+ ```
12
+
13
+ ## Parameters
14
+
15
+ | Parameter | Type | Description |
16
+ | --- | --- | --- |
17
+ | args | TEventDetailMap\[K\] extends void ? \[origin: [EmitOrigin](./foundation-events.emitorigin.md)<!-- -->, type: K, options?: [EmitOptions](./foundation-events.emitoptions.md)<!-- -->\] : \[origin: [EmitOrigin](./foundation-events.emitorigin.md)<!-- -->, type: K, detail: TEventDetailMap\[K\], options?: [EmitOptions](./foundation-events.emitoptions.md)<!-- -->\] | |
18
+
19
+ **Returns:**
20
+
21
+ [EmitReturn](./foundation-events.emitreturn.md)
22
+
@@ -0,0 +1,21 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [DefaultEventEmitterDI](./foundation-events.defaulteventemitterdi.md)
4
+
5
+ ## DefaultEventEmitterDI class
6
+
7
+ Default EventEmitterDI.
8
+
9
+ **Signature:**
10
+
11
+ ```typescript
12
+ export declare class DefaultEventEmitterDI<TEventDetailMap extends EventDetailMap> implements EventEmitterDI<TEventDetailMap>
13
+ ```
14
+ **Implements:** [EventEmitterDI](./foundation-events.eventemitterdi.md)<!-- -->&lt;TEventDetailMap&gt;
15
+
16
+ ## Methods
17
+
18
+ | Method | Modifiers | Description |
19
+ | --- | --- | --- |
20
+ | [emit(args)](./foundation-events.defaulteventemitterdi.emit.md) | | |
21
+
@@ -0,0 +1,14 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [EmitArgs](./foundation-events.emitargs.md)
4
+
5
+ ## EmitArgs type
6
+
7
+
8
+ **Signature:**
9
+
10
+ ```typescript
11
+ export type EmitArgs = [string, {} | undefined, EmitOptions | undefined];
12
+ ```
13
+ **References:** [EmitOptions](./foundation-events.emitoptions.md)
14
+
@@ -0,0 +1,12 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [EmitOptions](./foundation-events.emitoptions.md)
4
+
5
+ ## EmitOptions type
6
+
7
+
8
+ **Signature:**
9
+
10
+ ```typescript
11
+ export type EmitOptions = Omit<CustomEventInit, 'detail'>;
12
+ ```
@@ -0,0 +1,12 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [EmitOrigin](./foundation-events.emitorigin.md)
4
+
5
+ ## EmitOrigin type
6
+
7
+
8
+ **Signature:**
9
+
10
+ ```typescript
11
+ export type EmitOrigin = FASTElement;
12
+ ```
@@ -0,0 +1,12 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [EmitReturn](./foundation-events.emitreturn.md)
4
+
5
+ ## EmitReturn type
6
+
7
+
8
+ **Signature:**
9
+
10
+ ```typescript
11
+ export type EmitReturn = boolean | void;
12
+ ```
@@ -0,0 +1,12 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [EventDetailMap](./foundation-events.eventdetailmap.md)
4
+
5
+ ## EventDetailMap type
6
+
7
+
8
+ **Signature:**
9
+
10
+ ```typescript
11
+ export type EventDetailMap = Record<string, unknown>;
12
+ ```
@@ -0,0 +1,59 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [EventEmitter](./foundation-events.eventemitter.md)
4
+
5
+ ## EventEmitter variable
6
+
7
+ EventEmitter mixin.
8
+
9
+ **Signature:**
10
+
11
+ ```typescript
12
+ EventEmitter: <TEventDetailMap extends EventDetailMap, TTarget extends FASTElement = FASTElement>(Target: EventEmitterTarget<TTarget>) => abstract new (...args: any[]) => {
13
+ $emit<K extends keyof TEventDetailMap & string>(...args: TEventDetailMap[K] extends void ? [type: K, options?: EmitOptions] : [type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
14
+ readonly $fastController: import("@microsoft/fast-element").Controller;
15
+ connectedCallback(): void;
16
+ disconnectedCallback(): void;
17
+ attributeChangedCallback(name: string, oldValue: string, newValue: string): void;
18
+ }
19
+ ```
20
+
21
+ ## Remarks
22
+
23
+ Strongly types the components `$emit` method, allowing only the mapped events to be emitted.
24
+
25
+ ## Example 1
26
+
27
+ Apply mixin to the base
28
+
29
+ \# Import
30
+
31
+ ```ts
32
+ import { EventEmitter, SomeSystemLevelEventDetailMap } from '@genesislcap/foundation-events';
33
+ import { StoreEventDetailMap, TradeEntryEventDetailMap } from '../store'; // < custom app level event maps
34
+ ```
35
+ \# Create event map
36
+
37
+ ```ts
38
+ type EventMap = SomeSystemLevelEventDetailMap & StoreEventDetailMap & TradeEntryEventDetailMap;
39
+ ```
40
+ \# Apply Mixin
41
+
42
+ ```ts
43
+ export class MyComponent extends EventEmitter<EventMap>(FASTElement) {
44
+ onSomeComponentEvent() {
45
+ this.$emit('some-allowed-event', { foo: 'expected data structure' });
46
+ }
47
+ }
48
+ ```
49
+
50
+ ## Example 2
51
+
52
+ Apply mixin to a class in the inheritance chain requires a second generic type param.
53
+
54
+ \# Apply Mixin to MyComponent that extends MyBaseComponent (which might be abstract). Mixin can be applied at different levels. \# Please note there's a current limitation on retaining protected member access with this approach, so apply to base where possible. \# Also, super classes cannot emit typed events via inheritance. Each level must have an explicit map. Devs can use a Union and Pick to create these.
55
+
56
+ ```ts
57
+ export class MyComponent extends EventEmitter<EventMap, MyBaseComponent>(MyBaseComponent) {}
58
+ ```
59
+
@@ -0,0 +1,22 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [EventEmitterDI](./foundation-events.eventemitterdi.md) &gt; [emit](./foundation-events.eventemitterdi.emit.md)
4
+
5
+ ## EventEmitterDI.emit() method
6
+
7
+ **Signature:**
8
+
9
+ ```typescript
10
+ emit<K extends keyof TEventDetailMap>(...args: TEventDetailMap[K] extends void ? [origin: EmitOrigin, type: K, options?: EmitOptions] : [origin: EmitOrigin, type: K, detail: TEventDetailMap[K], options?: EmitOptions]): EmitReturn;
11
+ ```
12
+
13
+ ## Parameters
14
+
15
+ | Parameter | Type | Description |
16
+ | --- | --- | --- |
17
+ | args | TEventDetailMap\[K\] extends void ? \[origin: [EmitOrigin](./foundation-events.emitorigin.md)<!-- -->, type: K, options?: [EmitOptions](./foundation-events.emitoptions.md)<!-- -->\] : \[origin: [EmitOrigin](./foundation-events.emitorigin.md)<!-- -->, type: K, detail: TEventDetailMap\[K\], options?: [EmitOptions](./foundation-events.emitoptions.md)<!-- -->\] | |
18
+
19
+ **Returns:**
20
+
21
+ [EmitReturn](./foundation-events.emitreturn.md)
22
+
@@ -0,0 +1,48 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [EventEmitterDI](./foundation-events.eventemitterdi.md)
4
+
5
+ ## EventEmitterDI interface
6
+
7
+ EventEmitterDI interface.
8
+
9
+ **Signature:**
10
+
11
+ ```typescript
12
+ export interface EventEmitterDI<TEventDetailMap extends EventDetailMap>
13
+ ```
14
+
15
+ ## Remarks
16
+
17
+ A strongly typed event emitter with events typed to [EventDetailMap](./foundation-events.eventdetailmap.md) pairings. This is closely related to the [EventEmitter](./foundation-events.eventemitter.md) mixin in terms of functionality, however its purpose is different. This allows you to create pre-configured EventEmitters that can be injected anywhere. These can emit typed events from an origin html element, without that element needing to be an actual . If you are starting out, we recommend using the [EventEmitter](./foundation-events.eventemitter.md) mixin where possible.
18
+
19
+ ## Example 1
20
+
21
+ Create an emitter within the DI.
22
+
23
+ ```ts
24
+ import {registerEmitter} from '@genesislcap/foundation-events';
25
+ ...
26
+ export const MyEventEmitter = registerEmitter<MyEventDetailMap>();
27
+ ```
28
+
29
+ ## Example 2
30
+
31
+ Use that emitter.
32
+
33
+ ```ts
34
+ export class MyComponent extends FASTElement {
35
+ @observable someElement!: HTMLElement;
36
+ @MyEventEmitter emitter: MyEventEmitter;
37
+ connectedCallback() {
38
+ this.emitter.emit(this.someElement, 'some-event', {foo: 'bar'});
39
+ }
40
+ }
41
+ ```
42
+
43
+ ## Methods
44
+
45
+ | Method | Description |
46
+ | --- | --- |
47
+ | [emit(args)](./foundation-events.eventemitterdi.emit.md) | |
48
+
@@ -0,0 +1,16 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [EventEmitterTarget](./foundation-events.eventemittertarget.md)
4
+
5
+ ## EventEmitterTarget type
6
+
7
+ **Signature:**
8
+
9
+ ```typescript
10
+ export type EventEmitterTarget<TBase extends FASTElement> = abstract new (...args: any[]) => TBase;
11
+ ```
12
+
13
+ ## Remarks
14
+
15
+ Using `abstract` here should cover mixing into both concrete and abstract classes.
16
+
@@ -0,0 +1,12 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [getBaseEmitArgs](./foundation-events.getbaseemitargs.md)
4
+
5
+ ## getBaseEmitArgs variable
6
+
7
+
8
+ **Signature:**
9
+
10
+ ```typescript
11
+ getBaseEmitArgs: (...args: unknown[]) => EmitArgs
12
+ ```
@@ -0,0 +1,14 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [KeysMatching](./foundation-events.keysmatching.md)
4
+
5
+ ## KeysMatching type
6
+
7
+
8
+ **Signature:**
9
+
10
+ ```typescript
11
+ export type KeysMatching<T, V> = {
12
+ [K in keyof T]-?: T[K] extends V ? K : never;
13
+ }[keyof T];
14
+ ```
@@ -0,0 +1,12 @@
1
+ <!-- Do not edit this file. It is automatically generated by API Documenter. -->
2
+
3
+ [Home](./index.md) &gt; [@genesislcap/foundation-events](./foundation-events.md) &gt; [logger](./foundation-events.logger.md)
4
+
5
+ ## logger variable
6
+
7
+
8
+ **Signature:**
9
+
10
+ ```typescript
11
+ logger: import("@genesislcap/foundation-utils").Logger
12
+ ```