vasille 2.0.5 → 2.2.0

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 (62) hide show
  1. package/README.md +4 -0
  2. package/cdn/es2015.js +651 -665
  3. package/cdn/es5.js +737 -675
  4. package/flow-typed/vasille.js +2643 -835
  5. package/lib/binding/attribute.js +7 -2
  6. package/lib/binding/class.js +2 -2
  7. package/lib/binding/style.js +1 -1
  8. package/lib/core/core.js +57 -7
  9. package/lib/functional/components.js +17 -0
  10. package/lib/functional/merge.js +41 -0
  11. package/lib/functional/models.js +26 -0
  12. package/lib/functional/options.js +1 -0
  13. package/lib/functional/reactivity.js +33 -0
  14. package/lib/functional/stack.js +127 -0
  15. package/lib/index.js +2 -7
  16. package/lib/models/array-model.js +9 -0
  17. package/lib/models/object-model.js +28 -14
  18. package/lib/node/app.js +20 -11
  19. package/lib/node/node.js +186 -538
  20. package/lib/node/watch.js +5 -13
  21. package/lib/spec/html.js +1 -0
  22. package/lib/spec/react.js +1 -0
  23. package/lib/spec/svg.js +1 -0
  24. package/lib/v/index.js +23 -0
  25. package/lib/value/expression.js +8 -5
  26. package/lib/views/array-view.js +6 -10
  27. package/lib/views/base-view.js +11 -22
  28. package/lib/views/map-view.js +4 -9
  29. package/lib/views/object-view.js +4 -7
  30. package/lib/views/repeat-node.js +6 -18
  31. package/lib/views/set-view.js +4 -11
  32. package/package.json +3 -1
  33. package/types/binding/attribute.d.ts +2 -2
  34. package/types/core/core.d.ts +27 -41
  35. package/types/functional/components.d.ts +4 -0
  36. package/types/functional/merge.d.ts +1 -0
  37. package/types/functional/models.d.ts +10 -0
  38. package/types/functional/options.d.ts +23 -0
  39. package/types/functional/reactivity.d.ts +11 -0
  40. package/types/functional/stack.d.ts +24 -0
  41. package/types/index.d.ts +3 -7
  42. package/types/models/array-model.d.ts +1 -0
  43. package/types/models/object-model.d.ts +2 -0
  44. package/types/node/app.d.ts +19 -17
  45. package/types/node/node.d.ts +55 -378
  46. package/types/node/watch.d.ts +9 -15
  47. package/types/spec/html.d.ts +975 -0
  48. package/types/spec/react.d.ts +4 -0
  49. package/types/spec/svg.d.ts +314 -0
  50. package/types/v/index.d.ts +32 -0
  51. package/types/value/expression.d.ts +6 -19
  52. package/types/views/array-view.d.ts +3 -4
  53. package/types/views/base-view.d.ts +8 -16
  54. package/types/views/map-view.d.ts +2 -3
  55. package/types/views/object-view.d.ts +2 -3
  56. package/types/views/repeat-node.d.ts +7 -8
  57. package/types/views/set-view.d.ts +2 -3
  58. package/types/core/executor.d.ts +0 -87
  59. package/types/core/signal.d.ts +0 -35
  60. package/types/core/slot.d.ts +0 -45
  61. package/types/node/interceptor.d.ts +0 -50
  62. package/types/views/repeater.d.ts +0 -38
@@ -1,6 +1,8 @@
1
1
  import { Reactive, ReactivePrivate } from "../core/core";
2
2
  import { IValue } from "../core/ivalue";
3
3
  import type { AppNode } from "./app";
4
+ import { Options, TagOptions } from "../functional/options";
5
+ import { AcceptedTagsMap } from "../spec/react";
4
6
  /**
5
7
  * Represents a Vasille.js node
6
8
  * @class FragmentPrivate
@@ -43,7 +45,7 @@ export declare class FragmentPrivate extends ReactivePrivate {
43
45
  * This class is symbolic
44
46
  * @extends Reactive
45
47
  */
46
- export declare class Fragment extends Reactive {
48
+ export declare class Fragment<T extends Options = Options> extends Reactive {
47
49
  /**
48
50
  * Private part
49
51
  * @protected
@@ -54,12 +56,13 @@ export declare class Fragment extends Reactive {
54
56
  * @type Array
55
57
  */
56
58
  children: Set<Fragment>;
57
- lastChild: any;
59
+ lastChild: Fragment | null;
58
60
  /**
59
61
  * Constructs a Vasille Node
62
+ * @param input
60
63
  * @param $ {FragmentPrivate}
61
64
  */
62
- constructor($?: FragmentPrivate);
65
+ constructor(input: T, $?: FragmentPrivate);
63
66
  /**
64
67
  * Gets the app of node
65
68
  */
@@ -71,20 +74,9 @@ export declare class Fragment extends Reactive {
71
74
  * @param data {*} additional data
72
75
  */
73
76
  preinit(app: AppNode, parent: Fragment, data?: unknown): void;
74
- /**
75
- * Initialize node
76
- */
77
- init(): this;
78
- /** To be overloaded: created event handler */
79
- created(): void;
80
- /** To be overloaded: mounted event handler */
81
- mounted(): void;
77
+ protected compose(input: Options): void;
82
78
  /** To be overloaded: ready event handler */
83
79
  ready(): void;
84
- /** To be overloaded: watchers creation milestone */
85
- createWatchers(): void;
86
- /** To be overloaded: DOM creation milestone */
87
- compose(): void;
88
80
  /**
89
81
  * Pushes a node to children immediately
90
82
  * @param node {Fragment} A node to push
@@ -113,45 +105,29 @@ export declare class Fragment extends Reactive {
113
105
  * @param cb {function (TextNode)} Callback if previous is slot name
114
106
  */
115
107
  text(text: string | IValue<string>, cb?: (text: TextNode) => void): void;
116
- debug(text: IValue<string>): this;
108
+ debug(text: IValue<string>): void;
117
109
  /**
118
110
  * Defines a tag element
119
111
  * @param tagName {String} the tag name
112
+ * @param input
120
113
  * @param cb {function(Tag, *)} callback
121
114
  */
122
- tag<K extends keyof HTMLElementTagNameMap>(tagName: K, cb?: (node: Tag, element: HTMLElementTagNameMap[K]) => void): void;
123
- tag<K extends keyof SVGElementTagNameMap>(tagName: K, cb?: (node: Tag, element: SVGElementTagNameMap[K]) => void): void;
124
- tag(tagName: string, cb?: (node: Tag, element: Element) => void): void;
115
+ tag<K extends keyof AcceptedTagsMap>(tagName: K, input: TagOptionsWithSlot<K>, cb?: (node: Tag<K>) => void): (HTMLElementTagNameMap & SVGElementTagNameMap)[K];
125
116
  /**
126
117
  * Defines a custom element
127
118
  * @param node {Fragment} vasille element to insert
128
119
  * @param callback {function($ : *)}
129
- * @param callback1 {function($ : *)}
130
120
  */
131
- create<T extends Fragment>(node: T, callback?: ($: T) => void, callback1?: ($: T) => void): void;
121
+ create<T extends Fragment>(node: T, callback?: T['input']['slot']): void;
132
122
  /**
133
123
  * Defines an if node
134
124
  * @param cond {IValue} condition
135
125
  * @param cb {function(Fragment)} callback to run on true
136
126
  * @return {this}
137
127
  */
138
- if(cond: IValue<boolean>, cb: (node: Fragment) => void): this;
139
- /**
140
- * Defines a if-else node
141
- * @param ifCond {IValue} `if` condition
142
- * @param ifCb {function(Fragment)} Call-back to create `if` child nodes
143
- * @param elseCb {function(Fragment)} Call-back to create `else` child nodes
144
- */
145
- if_else(ifCond: IValue<boolean>, ifCb: (node: Fragment) => void, elseCb: (node: Fragment) => void): this;
146
- /**
147
- * Defines a switch nodes: Will break after first true condition
148
- * @param cases {...{ cond : IValue, cb : function(Fragment) }} cases
149
- * @return {INode}
150
- */
151
- switch(...cases: Array<{
152
- cond: IValue<boolean>;
153
- cb: (node: Fragment) => void;
154
- }>): this;
128
+ if(cond: IValue<boolean>, cb: (node: Fragment) => void): void;
129
+ else(cb: (node: Fragment) => void): void;
130
+ elif(cond: IValue<boolean>, cb: (node: Fragment) => void): void;
155
131
  /**
156
132
  * Create a case for switch
157
133
  * @param cond {IValue<boolean>}
@@ -186,9 +162,10 @@ export declare class TextNodePrivate extends FragmentPrivate {
186
162
  /**
187
163
  * Pre-initializes a text node
188
164
  * @param app {AppNode} the app node
165
+ * @param parent
189
166
  * @param text {IValue}
190
167
  */
191
- preinitText(app: AppNode, parent: Fragment, text: IValue<string>): void;
168
+ preinitText(app: AppNode, parent: Fragment, text: IValue<string> | string): void;
192
169
  /**
193
170
  * Clear node data
194
171
  */
@@ -202,7 +179,7 @@ export declare class TextNodePrivate extends FragmentPrivate {
202
179
  export declare class TextNode extends Fragment {
203
180
  protected $: TextNodePrivate;
204
181
  constructor($?: TextNodePrivate);
205
- preinit(app: AppNode, parent: Fragment, text?: IValue<string>): void;
182
+ preinit(app: AppNode, parent: Fragment, text?: IValue<string> | string): void;
206
183
  protected findFirstChild(): Node;
207
184
  destroy(): void;
208
185
  }
@@ -230,61 +207,30 @@ export declare class INodePrivate extends FragmentPrivate {
230
207
  * @class INode
231
208
  * @extends Fragment
232
209
  */
233
- export declare class INode extends Fragment {
210
+ export declare class INode<T extends TagOptions<any> = TagOptions<any>> extends Fragment<T> {
234
211
  protected $: INodePrivate;
235
212
  /**
236
213
  * Constructs a base node
214
+ * @param input
237
215
  * @param $ {?INodePrivate}
238
216
  */
239
- constructor($?: INodePrivate);
217
+ constructor(input: T, $?: INodePrivate);
240
218
  /**
241
219
  * Get the bound node
242
220
  */
243
221
  get node(): Element;
244
- /**
245
- * Initialize node
246
- */
247
- init(): this;
248
- /** To be overloaded: attributes creation milestone */
249
- createAttrs(): void;
250
- /** To be overloaded: $style attributes creation milestone */
251
- createStyle(): void;
252
222
  /**
253
223
  * Bind attribute value
254
224
  * @param name {String} name of attribute
255
225
  * @param value {IValue} value
256
226
  */
257
- attr(name: string, value: IValue<string>): void;
258
- /**
259
- * Creates and binds a multivalued binding to attribute
260
- * @param name {String} The name of attribute
261
- * @param calculator {Function} Binding calculator (must return a value)
262
- * @param v1 {*} argument
263
- * @param v2 {*} argument
264
- * @param v3 {*} argument
265
- * @param v4 {*} argument
266
- * @param v5 {*} argument
267
- * @param v6 {*} argument
268
- * @param v7 {*} argument
269
- * @param v8 {*} argument
270
- * @param v9 {*} argument
271
- * @return {INode} A pointer to this
272
- */
273
- bindAttr<T1>(name: string, calculator: (a1: T1) => string, v1: IValue<T1>, v2?: IValue<void>, v3?: IValue<void>, v4?: IValue<void>, v5?: IValue<void>, v6?: IValue<void>, v7?: IValue<void>, v8?: IValue<void>, v9?: IValue<void>): this;
274
- bindAttr<T1, T2>(name: string, calculator: (a1: T1, a2: T2) => string, v1: IValue<T1>, v2: IValue<T2>, v3?: IValue<void>, v4?: IValue<void>, v5?: IValue<void>, v6?: IValue<void>, v7?: IValue<void>, v8?: IValue<void>, v9?: IValue<void>): this;
275
- bindAttr<T1, T2, T3>(name: string, calculator: (a1: T1, a2: T2, a3: T3) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4?: IValue<void>, v5?: IValue<void>, v6?: IValue<void>, v7?: IValue<void>, v8?: IValue<void>, v9?: IValue<void>): this;
276
- bindAttr<T1, T2, T3, T4>(name: string, calculator: (a1: T1, a2: T2, a3: T3, a4: T4) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4: IValue<T4>, v5?: IValue<void>, v6?: IValue<void>, v7?: IValue<void>, v8?: IValue<void>, v9?: IValue<void>): this;
277
- bindAttr<T1, T2, T3, T4, T5>(name: string, calculator: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4: IValue<T4>, v5: IValue<T5>, v6?: IValue<void>, v7?: IValue<void>, v8?: IValue<void>, v9?: IValue<void>): this;
278
- bindAttr<T1, T2, T3, T4, T5, T6>(name: string, calculator: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4: IValue<T4>, v5: IValue<T5>, v6: IValue<T6>, v7?: IValue<void>, v8?: IValue<void>, v9?: IValue<void>): this;
279
- bindAttr<T1, T2, T3, T4, T5, T6, T7>(name: string, calculator: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4: IValue<T4>, v5: IValue<T5>, v6: IValue<T6>, v7: IValue<T7>, v8?: IValue<void>, v9?: IValue<void>): this;
280
- bindAttr<T1, T2, T3, T4, T5, T6, T7, T8>(name: string, calculator: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4: IValue<T4>, v5: IValue<T5>, v6: IValue<T6>, v7: IValue<T7>, v8: IValue<T8>, v9?: IValue<void>): this;
281
- bindAttr<T1, T2, T3, T4, T5, T6, T7, T8, T9>(name: string, calculator: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4: IValue<T4>, v5: IValue<T5>, v6: IValue<T6>, v7: IValue<T7>, v8: IValue<T8>, v9: IValue<T9>): this;
227
+ attr(name: string, value: IValue<string | number | boolean>): void;
282
228
  /**
283
229
  * Set attribute value
284
230
  * @param name {string} name of attribute
285
231
  * @param value {string} value
286
232
  */
287
- setAttr(name: string, value: string): this;
233
+ setAttr(name: string, value: string | number | boolean): this;
288
234
  /**
289
235
  * Adds a CSS class
290
236
  * @param cl {string} Class name
@@ -294,7 +240,7 @@ export declare class INode extends Fragment {
294
240
  * Adds some CSS classes
295
241
  * @param cls {...string} classes names
296
242
  */
297
- addClasses(...cls: Array<string>): this;
243
+ removeClasse(cl: string): this;
298
244
  /**
299
245
  * Bind a CSS class
300
246
  * @param className {IValue}
@@ -312,29 +258,6 @@ export declare class INode extends Fragment {
312
258
  * @param value {IValue} value
313
259
  */
314
260
  style(name: string, value: IValue<string>): this;
315
- /**
316
- * Binds style property value
317
- * @param name {string} name of style attribute
318
- * @param calculator {function} calculator for style value
319
- * @param v1 {*} argument
320
- * @param v2 {*} argument
321
- * @param v3 {*} argument
322
- * @param v4 {*} argument
323
- * @param v5 {*} argument
324
- * @param v6 {*} argument
325
- * @param v7 {*} argument
326
- * @param v8 {*} argument
327
- * @param v9 {*} argument
328
- */
329
- bindStyle<T1>(name: string, calculator: (a1: T1) => string, v1: IValue<T1>): this;
330
- bindStyle<T1, T2>(name: string, calculator: (a1: T1, a2: T2) => string, v1: IValue<T1>, v2: IValue<T2>): this;
331
- bindStyle<T1, T2, T3>(name: string, calculator: (a1: T1, a2: T2, a3: T3) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>): this;
332
- bindStyle<T1, T2, T3, T4>(name: string, calculator: (a1: T1, a2: T2, a3: T3, a4: T4) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4: IValue<T4>): this;
333
- bindStyle<T1, T2, T3, T4, T5>(name: string, calculator: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4: IValue<T4>, v5: IValue<T5>): this;
334
- bindStyle<T1, T2, T3, T4, T5, T6>(name: string, calculator: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4: IValue<T4>, v5: IValue<T5>, v6: IValue<T6>): this;
335
- bindStyle<T1, T2, T3, T4, T5, T6, T7>(name: string, calculator: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4: IValue<T4>, v5: IValue<T5>, v6: IValue<T6>, v7: IValue<T7>): this;
336
- bindStyle<T1, T2, T3, T4, T5, T6, T7, T8>(name: string, calculator: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4: IValue<T4>, v5: IValue<T5>, v6: IValue<T6>, v7: IValue<T7>, v8: IValue<T8>): this;
337
- bindStyle<T1, T2, T3, T4, T5, T6, T7, T8, T9>(name: string, calculator: (a1: T1, a2: T2, a3: T3, a4: T4, a5: T5, a6: T6, a7: T7, a8: T8, a9: T9) => string, v1: IValue<T1>, v2: IValue<T2>, v3: IValue<T3>, v4: IValue<T4>, v5: IValue<T5>, v6: IValue<T6>, v7: IValue<T7>, v8: IValue<T8>, v9: IValue<T9>): this;
338
261
  /**
339
262
  * Sets a style property value
340
263
  * @param prop {string} Property name
@@ -348,276 +271,6 @@ export declare class INode extends Fragment {
348
271
  * @param options {Object | boolean} addEventListener options
349
272
  */
350
273
  listen(name: string, handler: (ev: Event) => void, options?: boolean | AddEventListenerOptions): this;
351
- /**
352
- * @param handler {function (MouseEvent)}
353
- * @param options {Object | boolean}
354
- */
355
- oncontextmenu(handler: (ev: MouseEvent) => void, options?: boolean | AddEventListenerOptions): this;
356
- /**
357
- * @param handler {function (MouseEvent)}
358
- * @param options {Object | boolean}
359
- */
360
- onmousedown(handler: (ev: MouseEvent) => void, options?: boolean | AddEventListenerOptions): this;
361
- /**
362
- * @param handler {function (MouseEvent)}
363
- * @param options {Object | boolean}
364
- */
365
- onmouseenter(handler: (ev: MouseEvent) => void, options?: boolean | AddEventListenerOptions): this;
366
- /**
367
- * @param handler {function (MouseEvent)}
368
- * @param options {Object | boolean}
369
- */
370
- onmouseleave(handler: (ev: MouseEvent) => void, options?: boolean | AddEventListenerOptions): this;
371
- /**
372
- * @param handler {function (MouseEvent)}
373
- * @param options {Object | boolean}
374
- */
375
- onmousemove(handler: (ev: MouseEvent) => void, options?: boolean | AddEventListenerOptions): this;
376
- /**
377
- * @param handler {function (MouseEvent)}
378
- * @param options {Object | boolean}
379
- */
380
- onmouseout(handler: (ev: MouseEvent) => void, options?: boolean | AddEventListenerOptions): this;
381
- /**
382
- * @param handler {function (MouseEvent)}
383
- * @param options {Object | boolean}
384
- */
385
- onmouseover(handler: (ev: MouseEvent) => void, options?: boolean | AddEventListenerOptions): this;
386
- /**
387
- * @param handler {function (MouseEvent)}
388
- * @param options {Object | boolean}
389
- */
390
- onmouseup(handler: (ev: MouseEvent) => void, options?: boolean | AddEventListenerOptions): this;
391
- /**
392
- * @param handler {function (MouseEvent)}
393
- * @param options {Object | boolean}
394
- */
395
- onclick(handler: (ev: MouseEvent) => void, options?: boolean | AddEventListenerOptions): this;
396
- /**
397
- * @param handler {function (MouseEvent)}
398
- * @param options {Object | boolean}
399
- */
400
- ondblclick(handler: (ev: MouseEvent) => void, options?: boolean | AddEventListenerOptions): this;
401
- /**
402
- * @param handler {function (FocusEvent)}
403
- * @param options {Object | boolean}
404
- */
405
- onblur(handler: (ev: FocusEvent) => void, options?: boolean | AddEventListenerOptions): this;
406
- /**
407
- * @param handler {function (FocusEvent)}
408
- * @param options {Object | boolean}
409
- */
410
- onfocus(handler: (ev: FocusEvent) => void, options?: boolean | AddEventListenerOptions): this;
411
- /**
412
- * @param handler {function (FocusEvent)}
413
- * @param options {Object | boolean}
414
- */
415
- onfocusin(handler: (ev: FocusEvent) => void, options?: boolean | AddEventListenerOptions): this;
416
- /**
417
- * @param handler {function (FocusEvent)}
418
- * @param options {Object | boolean}
419
- */
420
- onfocusout(handler: (ev: FocusEvent) => void, options?: boolean | AddEventListenerOptions): this;
421
- /**
422
- * @param handler {function (KeyboardEvent)}
423
- * @param options {Object | boolean}
424
- */
425
- onkeydown(handler: (ev: KeyboardEvent) => void, options?: boolean | AddEventListenerOptions): this;
426
- /**
427
- * @param handler {function (KeyboardEvent)}
428
- * @param options {Object | boolean}
429
- */
430
- onkeyup(handler: (ev: KeyboardEvent) => void, options?: boolean | AddEventListenerOptions): this;
431
- /**
432
- * @param handler {function (KeyboardEvent)}
433
- * @param options {Object | boolean}
434
- */
435
- onkeypress(handler: (ev: KeyboardEvent) => void, options?: boolean | AddEventListenerOptions): this;
436
- /**
437
- * @param handler {function (TouchEvent)}
438
- * @param options {Object | boolean}
439
- */
440
- ontouchstart(handler: (ev: TouchEvent) => void, options?: boolean | AddEventListenerOptions): this;
441
- /**
442
- * @param handler {function (TouchEvent)}
443
- * @param options {Object | boolean}
444
- */
445
- ontouchmove(handler: (ev: TouchEvent) => void, options?: boolean | AddEventListenerOptions): this;
446
- /**
447
- * @param handler {function (TouchEvent)}
448
- * @param options {Object | boolean}
449
- */
450
- ontouchend(handler: (ev: TouchEvent) => void, options?: boolean | AddEventListenerOptions): this;
451
- /**
452
- * @param handler {function (TouchEvent)}
453
- * @param options {Object | boolean}
454
- */
455
- ontouchcancel(handler: (ev: TouchEvent) => void, options?: boolean | AddEventListenerOptions): this;
456
- /**
457
- * @param handler {function (WheelEvent)}
458
- * @param options {Object | boolean}
459
- */
460
- onwheel(handler: (ev: WheelEvent) => void, options?: boolean | AddEventListenerOptions): this;
461
- /**
462
- * @param handler {function (ProgressEvent)}
463
- * @param options {Object | boolean}
464
- */
465
- onabort(handler: (ev: ProgressEvent) => void, options?: boolean | AddEventListenerOptions): this;
466
- /**
467
- * @param handler {function (ProgressEvent)}
468
- * @param options {Object | boolean}
469
- */
470
- onerror(handler: (ev: ProgressEvent) => void, options?: boolean | AddEventListenerOptions): this;
471
- /**
472
- * @param handler {function (ProgressEvent)}
473
- * @param options {Object | boolean}
474
- */
475
- onload(handler: (ev: ProgressEvent) => void, options?: boolean | AddEventListenerOptions): this;
476
- /**
477
- * @param handler {function (ProgressEvent)}
478
- * @param options {Object | boolean}
479
- */
480
- onloadend(handler: (ev: ProgressEvent) => void, options?: boolean | AddEventListenerOptions): this;
481
- /**
482
- * @param handler {function (ProgressEvent)}
483
- * @param options {Object | boolean}
484
- */
485
- onloadstart(handler: (ev: ProgressEvent) => void, options?: boolean | AddEventListenerOptions): this;
486
- /**
487
- * @param handler {function (ProgressEvent)}
488
- * @param options {Object | boolean}
489
- */
490
- onprogress(handler: (ev: ProgressEvent) => void, options?: boolean | AddEventListenerOptions): this;
491
- /**
492
- * @param handler {function (ProgressEvent)}
493
- * @param options {Object | boolean}
494
- */
495
- ontimeout(handler: (ev: ProgressEvent) => void, options?: boolean | AddEventListenerOptions): this;
496
- /**
497
- * @param handler {function (DragEvent)}
498
- * @param options {Object | boolean}
499
- */
500
- ondrag(handler: (ev: DragEvent) => void, options?: boolean | AddEventListenerOptions): this;
501
- /**
502
- * @param handler {function (DragEvent)}
503
- * @param options {Object | boolean}
504
- */
505
- ondragend(handler: (ev: DragEvent) => void, options?: boolean | AddEventListenerOptions): this;
506
- /**
507
- * @param handler {function (DragEvent)}
508
- * @param options {Object | boolean}
509
- */
510
- ondragenter(handler: (ev: DragEvent) => void, options?: boolean | AddEventListenerOptions): this;
511
- /**
512
- * @param handler {function (DragEvent)}
513
- * @param options {Object | boolean}
514
- */
515
- ondragexit(handler: (ev: DragEvent) => void, options?: boolean | AddEventListenerOptions): this;
516
- /**
517
- * @param handler {function (DragEvent)}
518
- * @param options {Object | boolean}
519
- */
520
- ondragleave(handler: (ev: DragEvent) => void, options?: boolean | AddEventListenerOptions): this;
521
- /**
522
- * @param handler {function (DragEvent)}
523
- * @param options {Object | boolean}
524
- */
525
- ondragover(handler: (ev: DragEvent) => void, options?: boolean | AddEventListenerOptions): this;
526
- /**
527
- * @param handler {function (DragEvent)}
528
- * @param options {Object | boolean}
529
- */
530
- ondragstart(handler: (ev: DragEvent) => void, options?: boolean | AddEventListenerOptions): this;
531
- /**
532
- * @param handler {function (DragEvent)}
533
- * @param options {Object | boolean}
534
- */
535
- ondrop(handler: (ev: DragEvent) => void, options?: boolean | AddEventListenerOptions): this;
536
- /**
537
- * @param handler {function (PointerEvent)}
538
- * @param options {Object | boolean}
539
- */
540
- onpointerover(handler: (ev: PointerEvent) => void, options?: boolean | AddEventListenerOptions): this;
541
- /**
542
- * @param handler {function (PointerEvent)}
543
- * @param options {Object | boolean}
544
- */
545
- onpointerenter(handler: (ev: PointerEvent) => void, options?: boolean | AddEventListenerOptions): this;
546
- /**
547
- * @param handler {function (PointerEvent)}
548
- * @param options {Object | boolean}
549
- */
550
- onpointerdown(handler: (ev: PointerEvent) => void, options?: boolean | AddEventListenerOptions): this;
551
- /**
552
- * @param handler {function (PointerEvent)}
553
- * @param options {Object | boolean}
554
- */
555
- onpointermove(handler: (ev: PointerEvent) => void, options?: boolean | AddEventListenerOptions): this;
556
- /**
557
- * @param handler {function (PointerEvent)}
558
- * @param options {Object | boolean}
559
- */
560
- onpointerup(handler: (ev: PointerEvent) => void, options?: boolean | AddEventListenerOptions): this;
561
- /**
562
- * @param handler {function (PointerEvent)}
563
- * @param options {Object | boolean}
564
- */
565
- onpointercancel(handler: (ev: PointerEvent) => void, options?: boolean | AddEventListenerOptions): this;
566
- /**
567
- * @param handler {function (PointerEvent)}
568
- * @param options {Object | boolean}
569
- */
570
- onpointerout(handler: (ev: PointerEvent) => void, options?: boolean | AddEventListenerOptions): this;
571
- /**
572
- * @param handler {function (PointerEvent)}
573
- * @param options {Object | boolean}
574
- */
575
- onpointerleave(handler: (ev: PointerEvent) => void, options?: boolean | AddEventListenerOptions): this;
576
- /**
577
- * @param handler {function (PointerEvent)}
578
- * @param options {Object | boolean}
579
- */
580
- ongotpointercapture(handler: (ev: PointerEvent) => void, options?: boolean | AddEventListenerOptions): this;
581
- /**
582
- * @param handler {function (PointerEvent)}
583
- * @param options {Object | boolean}
584
- */
585
- onlostpointercapture(handler: (ev: PointerEvent) => void, options?: boolean | AddEventListenerOptions): this;
586
- /**
587
- * @param handler {function (AnimationEvent)}
588
- * @param options {Object | boolean}
589
- */
590
- onanimationstart(handler: (ev: AnimationEvent) => void, options?: boolean | AddEventListenerOptions): this;
591
- /**
592
- * @param handler {function (AnimationEvent)}
593
- * @param options {Object | boolean}
594
- */
595
- onanimationend(handler: (ev: AnimationEvent) => void, options?: boolean | AddEventListenerOptions): this;
596
- /**
597
- * @param handler {function (AnimationEvent)}
598
- * @param options {Object | boolean}
599
- */
600
- onanimationiteraton(handler: (ev: AnimationEvent) => void, options?: boolean | AddEventListenerOptions): this;
601
- /**
602
- * @param handler {function (ClipboardEvent)}
603
- * @param options {Object | boolean}
604
- */
605
- onclipboardchange(handler: (ev: ClipboardEvent) => void, options?: boolean | AddEventListenerOptions): this;
606
- /**
607
- * @param handler {function (ClipboardEvent)}
608
- * @param options {Object | boolean}
609
- */
610
- oncut(handler: (ev: ClipboardEvent) => void, options?: boolean | AddEventListenerOptions): this;
611
- /**
612
- * @param handler {function (ClipboardEvent)}
613
- * @param options {Object | boolean}
614
- */
615
- oncopy(handler: (ev: ClipboardEvent) => void, options?: boolean | AddEventListenerOptions): this;
616
- /**
617
- * @param handler {function (ClipboardEvent)}
618
- * @param options {Object | boolean}
619
- */
620
- onpaste(handler: (ev: ClipboardEvent) => void, options?: boolean | AddEventListenerOptions): this;
621
274
  insertAdjacent(node: Node): void;
622
275
  /**
623
276
  * A v-show & ngShow alternative
@@ -628,16 +281,21 @@ export declare class INode extends Fragment {
628
281
  * bind HTML
629
282
  * @param value {IValue}
630
283
  */
631
- html(value: IValue<string>): void;
284
+ bindDomApi(name: string, value: IValue<string>): void;
285
+ protected applyOptions(options: T): void;
286
+ }
287
+ export interface TagOptionsWithSlot<K extends keyof AcceptedTagsMap> extends TagOptions<K> {
288
+ slot?: (tag: Tag<K>) => void;
632
289
  }
633
290
  /**
634
291
  * Represents an Vasille.js HTML element node
635
292
  * @class Tag
636
293
  * @extends INode
637
294
  */
638
- export declare class Tag extends INode {
639
- constructor();
295
+ export declare class Tag<K extends keyof AcceptedTagsMap> extends INode<TagOptionsWithSlot<K>> {
296
+ constructor(input: TagOptionsWithSlot<K>);
640
297
  preinit(app: AppNode, parent: Fragment, tagName?: string): void;
298
+ protected compose(input: TagOptionsWithSlot<K>): void;
641
299
  protected findFirstChild(): Node;
642
300
  insertAdjacent(node: Node): void;
643
301
  appendNode(node: Node): void;
@@ -656,9 +314,8 @@ export declare class Tag extends INode {
656
314
  * @class Extension
657
315
  * @extends INode
658
316
  */
659
- export declare class Extension extends INode {
317
+ export declare class Extension<T extends TagOptions<any> = TagOptions<any>> extends INode<T> {
660
318
  preinit(app: AppNode, parent: Fragment): void;
661
- constructor($?: INodePrivate);
662
319
  destroy(): void;
663
320
  }
664
321
  /**
@@ -666,9 +323,8 @@ export declare class Extension extends INode {
666
323
  * @class Component
667
324
  * @extends Extension
668
325
  */
669
- export declare class Component extends Extension {
670
- constructor();
671
- mounted(): void;
326
+ export declare class Component<T extends TagOptions<any>> extends Extension<T> {
327
+ ready(): void;
672
328
  preinit(app: AppNode, parent: Fragment): void;
673
329
  }
674
330
  /**
@@ -701,6 +357,27 @@ export declare class SwitchedNodePrivate extends FragmentPrivate {
701
357
  */
702
358
  destroy(): void;
703
359
  }
360
+ /**
361
+ * Defines a node witch can switch its children conditionally
362
+ */
363
+ export declare class SwitchedNode extends Fragment {
364
+ protected $: SwitchedNodePrivate;
365
+ /**
366
+ * Constructs a switch node and define a sync function
367
+ */
368
+ constructor();
369
+ addCase(case_: {
370
+ cond: IValue<boolean>;
371
+ cb: (node: Fragment) => void;
372
+ }): void;
373
+ /**
374
+ * Creates a child node
375
+ * @param cb {function(Fragment)} Call-back
376
+ */
377
+ createChild(cb: (node: Fragment) => void): void;
378
+ ready(): void;
379
+ destroy(): void;
380
+ }
704
381
  /**
705
382
  * The private part of a text node
706
383
  */
@@ -1,23 +1,17 @@
1
1
  import { Fragment } from "./node";
2
- import { Slot } from "../core/slot";
3
2
  import { IValue } from "../core/ivalue";
3
+ import { Options } from "../functional/options";
4
+ interface WatchOptions<T> extends Options {
5
+ model: IValue<T>;
6
+ slot?: (node: Fragment, value: T) => void;
7
+ }
4
8
  /**
5
9
  * Watch Node
6
10
  * @class Watch
7
11
  * @extends Fragment
8
12
  */
9
- export declare class Watch<T> extends Fragment {
10
- /**
11
- * Default slot
12
- * @type Slot
13
- */
14
- slot: Slot<Fragment, T>;
15
- /**
16
- * iValue to watch
17
- * @type IValue
18
- */
19
- model: IValue<T>;
20
- constructor();
21
- createWatchers(): void;
22
- compose(): void;
13
+ export declare class Watch<T> extends Fragment<WatchOptions<T>> {
14
+ input: WatchOptions<T>;
15
+ compose(input: WatchOptions<T>): void;
23
16
  }
17
+ export {};