@neeloong/form 0.8.0 → 0.9.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.
package/README.md CHANGED
@@ -144,7 +144,7 @@ render(store, layouts, app);
144
144
 
145
145
  ### 别名与计算值
146
146
 
147
- ```
147
+ ```html
148
148
  <div *alias1="v1" *computed="v1 + v2"></div>
149
149
  ```
150
150
 
@@ -155,6 +155,11 @@ render(store, layouts, app);
155
155
  <div +var1="123"></div>
156
156
  ```
157
157
 
158
+ ### 增强
159
+ ```html
160
+ <div ~en:attr="a" ~en@event="show($event)" ~en!bind="bindValue" ~en="value"></div>
161
+
162
+ ```
158
163
 
159
164
  ### 各用法的优先级
160
165
 
package/index.d.mts CHANGED
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * @neeloong/form v0.8.0
2
+ * @neeloong/form v0.9.0
3
3
  * (c) 2024-2025 Fierflame
4
4
  * @license Apache-2.0
5
5
  */
@@ -23,59 +23,88 @@ declare function parse(source: string, { createCalc, createEvent, simpleTag, }?:
23
23
  */
24
24
  declare function toString(value: Node | (Node | string)[], formable?: boolean): string;
25
25
 
26
- type Directives = {
26
+ type Directives = object;
27
+ type Enhancement$1 = {
28
+ events: Record<string, Node.Name | Node.Event>;
29
+ attrs: Record<string, Node.Name | Node.Calc | Node.Value>;
30
+ value?: Node.Name | Node.Calc | Node.Value<any> | undefined;
31
+ bind?: string | boolean | undefined;
32
+ };
33
+ type Options = {
34
+ createCalc?: ((t: string) => Calc) | undefined;
35
+ createEvent?: ((t: string) => EventListener) | undefined;
36
+ simpleTag?: Set<string> | undefined;
37
+ };
38
+ type Node = {
39
+ name: string;
40
+ is?: string | null | undefined;
41
+ id?: string | undefined;
42
+ attrs: Record<string, Node.Name | Node.Calc | Node.Value>;
43
+ params: Record<string, Node.Name | Node.Calc | Node.Value>;
44
+ classes: Record<string, Node.Name | Node.Calc | Node.Value>;
45
+ styles: Record<string, Node.Name | Node.Calc | Node.Value>;
46
+ events: Record<string, Node.Name | Node.Event>;
47
+ vars: Record<string, Node.Name | Node.Calc | Node.Value>;
48
+ aliases: Record<string, Node.Name | Node.Calc | Node.Value>;
49
+ enhancements: Record<string, Enhancement$1>;
27
50
  template?: string | undefined;
28
51
  fragment?: string | boolean | undefined;
29
- if?: string | Calc | undefined;
52
+ if?: Node.Name | Node.Calc | Node.Value<any> | undefined;
30
53
  else?: boolean | undefined;
31
54
  /**
32
- * 值关联(关联为列表)
55
+ * 值关联
33
56
  */
34
57
  value?: string | undefined;
35
58
  /**
36
59
  * 列表属性枚举
37
60
  */
38
- enum?: string | boolean | Calc | undefined;
61
+ enum?: Node.Name | Node.Calc | Node.Value<any> | undefined;
39
62
  bind?: string | boolean | undefined;
40
- text?: string | Calc | undefined;
41
- html?: string | Calc | undefined;
63
+ text?: Node.Name | Node.Calc | Node.Value<any> | undefined;
64
+ html?: Node.Name | Node.Calc | Node.Value<any> | undefined;
42
65
  /**
43
66
  * 注释
44
67
  */
45
68
  comment?: string | undefined;
46
- };
47
- type Options = {
48
- createCalc?: ((t: string) => Calc) | undefined;
49
- createEvent?: ((t: string) => EventListener) | undefined;
50
- simpleTag?: Set<string> | undefined;
51
- };
52
- type Node = {
53
- name: string;
54
- is?: string | null | undefined;
55
- id?: string | undefined;
56
- attrs: Record<string, string | {
57
- name: string;
58
- } | Calc>;
59
- params: Record<string, string | Calc>;
60
- classes: Record<string, string | boolean | Calc>;
61
- styles: Record<string, string | Calc>;
62
- events: Record<string, string | EventListener>;
63
- vars: Record<string, string | Calc>;
64
- aliases: Record<string, string | Calc>;
65
- directives: Directives;
66
69
  children: (Node | string)[];
67
70
  };
71
+ declare namespace Node {
72
+ type Value<T = any> = {
73
+ value: T;
74
+ name?: undefined;
75
+ calc?: undefined;
76
+ event?: undefined;
77
+ };
78
+ type Name = {
79
+ name: string;
80
+ value?: undefined;
81
+ calc?: undefined;
82
+ event?: undefined;
83
+ };
84
+ type Event = {
85
+ event: EventListener;
86
+ name?: undefined;
87
+ calc?: undefined;
88
+ value?: undefined;
89
+ };
90
+ type Calc = {
91
+ calc: Calc;
92
+ name?: undefined;
93
+ value?: undefined;
94
+ event?: undefined;
95
+ };
96
+ }
68
97
  type Calc = (env: Record<string, any>) => any;
69
98
  type EventListener = ($event: any, env: Record<string, any>) => void;
70
99
 
71
100
  type index_d_Calc = Calc;
72
101
  type index_d_Directives = Directives;
73
102
  type index_d_EventListener = EventListener;
74
- type index_d_Node = Node;
103
+ declare const index_d_Node: typeof Node;
75
104
  type index_d_Options = Options;
76
105
  declare const index_d_parse: typeof parse;
77
106
  declare namespace index_d {
78
- export { type index_d_Calc as Calc, type index_d_Directives as Directives, type index_d_EventListener as EventListener, type index_d_Node as Node, type index_d_Options as Options, index_d_parse as parse, toString as stringify };
107
+ export { type index_d_Calc as Calc, type index_d_Directives as Directives, type Enhancement$1 as Enhancement, type index_d_EventListener as EventListener, index_d_Node as Node, type index_d_Options as Options, index_d_parse as parse, toString as stringify };
79
108
  }
80
109
 
81
110
  type VerifyError = any;
@@ -108,7 +137,7 @@ declare namespace Component {
108
137
  events: [string, ($event: any) => void, AddEventListenerOptions][];
109
138
  tagAttrs: Record<string, any>;
110
139
  watchAttr: (name: any, fn: (value: any, old: any, name: string) => void) => () => void;
111
- relate: (el: Element) => () => void;
140
+ relate: (el: Element | Relatedness) => () => void;
112
141
  destroyed: boolean;
113
142
  init: boolean;
114
143
  listen: <K extends keyof Component.Context.Events>(event: K, listener: (...p: Component.Context.Events[K]) => void) => () => void;
@@ -226,6 +255,26 @@ declare namespace Schema {
226
255
  }
227
256
  type Validator = (store: Store) => string | string[] | void | null;
228
257
  type AsyncValidator = (store: Store, signal: AbortSignal) => PromiseLike<string | string[] | void | null> | string | string[] | void | null;
258
+ type Relatedness = {
259
+ focus?: (() => void) | undefined;
260
+ scrollIntoView?: (() => void) | undefined;
261
+ input?: Element | undefined;
262
+ root?: Element | undefined;
263
+ };
264
+ type Enhancement = (context: Enhancement.Context) => any;
265
+ declare namespace Enhancement {
266
+ type Context = {
267
+ events: [string, ($event: any) => void, AddEventListenerOptions][];
268
+ attrs: Record<string, any>;
269
+ watchAttr: (name: any, fn: (value: any, old: any, name: string) => void) => () => void;
270
+ destroyed: boolean;
271
+ listen: (event: "destroy", listener: () => void) => () => void;
272
+ tag: any;
273
+ root: Element;
274
+ slot?: Element | null | undefined;
275
+ value: any;
276
+ };
277
+ }
229
278
 
230
279
  declare const ref: unique symbol;
231
280
  type Ref = {
@@ -466,10 +515,11 @@ declare class Store<T = any> {
466
515
  * @param {object} [options]
467
516
  * @param {Record<string, Store | {get?(): any; set?(v: any): void; exec?(...p: any[]): any; calc?(...p: any[]): any }>} [options.global]
468
517
  * @param {(path: string[]) => Component?} [options.component]
469
- * @param {(store: Store, el: Element) => () => void} [options.relate]
518
+ * @param {(store: Store, el: Element | Relatedness) => () => void} [options.relate]
519
+ * @param {Record<string, Enhancement>} [options.enhancements]
470
520
  * @returns {() => void}
471
521
  */
472
- declare function _default(store: Store, layouts: (Node | string)[], parent: Element, { component, global, relate }?: {
522
+ declare function _default(store: Store, layouts: (Node | string)[], parent: Element, { component, global, relate, enhancements }?: {
473
523
  global?: Record<string, Store<any> | {
474
524
  get?(): any;
475
525
  set?(v: any): void;
@@ -477,7 +527,8 @@ declare function _default(store: Store, layouts: (Node | string)[], parent: Elem
477
527
  calc?(...p: any[]): any;
478
528
  }> | undefined;
479
529
  component?: ((path: string[]) => Component | null) | undefined;
480
- relate?: ((store: Store, el: Element) => () => void) | undefined;
530
+ relate?: ((store: Store, el: Element | Relatedness) => () => void) | undefined;
531
+ enhancements?: Record<string, Enhancement> | undefined;
481
532
  }): () => void;
482
533
 
483
534
  /**
@@ -497,4 +548,4 @@ declare function watch<T>(getter: () => T, callback: (value: T) => void, immedia
497
548
  */
498
549
  declare function effect(fn: () => void): () => void;
499
550
 
500
- export { type AsyncValidator, Component, index_d as Layout, type Ref, Schema, Store, type Validator, type VerifyError, effect, _default as render, watch };
551
+ export { type AsyncValidator, Component, Enhancement, index_d as Layout, type Ref, type Relatedness, Schema, Store, type Validator, type VerifyError, effect, _default as render, watch };