@ibyar/core 0.2.0 → 0.3.6
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/LICENSE +1 -1
- package/README.md +18 -0
- package/annotation/decorators.d.ts +1 -1
- package/annotation/decorators.js +12 -2
- package/annotation/decorators.js.map +1 -1
- package/component/component.d.ts +4 -0
- package/component/component.js +45 -24
- package/component/component.js.map +1 -1
- package/component/custom-element.d.ts +6 -0
- package/component/custom-element.js.map +1 -1
- package/component/events.d.ts +1 -1
- package/component/events.js +11 -11
- package/component/events.js.map +1 -1
- package/component/provider.d.ts +12 -0
- package/component/provider.js +29 -0
- package/component/provider.js.map +1 -0
- package/context/stack.d.ts +2 -18
- package/context/stack.js +9 -48
- package/context/stack.js.map +1 -1
- package/directive/directive.d.ts +5 -4
- package/directive/directive.js +3 -0
- package/directive/directive.js.map +1 -1
- package/directive/providers.d.ts +7 -4
- package/directive/providers.js +3 -5
- package/directive/providers.js.map +1 -1
- package/html/expression.js +24 -12
- package/html/expression.js.map +1 -1
- package/html/update.d.ts +12 -0
- package/html/update.js +24 -0
- package/html/update.js.map +1 -0
- package/index.d.ts +1 -0
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/package.json +11 -8
- package/pipe/pipe.d.ts +3 -3
- package/pipe/pipe.js +5 -5
- package/pipe/pipe.js.map +1 -1
- package/providers/injector.js.map +1 -1
- package/providers/provider.js +9 -9
- package/providers/provider.js.map +1 -1
- package/view/base-view.js +43 -28
- package/view/base-view.js.map +1 -1
- package/view/form-view.js +1 -1
- package/view/form-view.js.map +1 -1
- package/view/render.d.ts +15 -13
- package/view/render.js +65 -35
- package/view/render.js.map +1 -1
- package/view/view.d.ts +2 -1
- package/view/view.js +26 -33
- package/view/view.js.map +1 -1
package/view/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/core/view/render.ts"],"names":[],"mappings":"AACA,OAAO,EACN,WAAW,EAAE,gBAAgB,EAC7B,cAAc,EAAE,eAAe,EAC/B,eAAe,EAAE,wBAAwB,EAC1B,eAAe,EAAE,WAAW,EAC3C,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAiB,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAChF,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEjE,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,EACN,iBAAiB,EAAE,OAAO,EACF,aAAa,EAAE,aAAa,EACpD,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAiB,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAEnE,SAAS,kBAAkB,CAAC,OAAoB,EAAE,WAAmB;IACpE,IAAI,WAAW,KAAK,OAAO,EAAE;QAC5B,IAAI,OAAO,YAAY,gBAAgB,EAAE;YACxC,OAAO,OAAO,CAAC;SACf;aAAM,IAAI,OAAO,YAAY,iBAAiB;eAC3C,OAAO,YAAY,mBAAmB,EAAE;YAC3C,OAAO,QAAQ,CAAC;SAChB;KACD;IACD,OAAO,WAAW,CAAC;AACpB,CAAC;AACD,MAAM,OAAO,eAAe;IAO3B,YAAmB,IAAsB;QAAtB,SAAI,GAAJ,IAAI,CAAkB;QACxC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QAChD,IAAI,CAAC,cAAc,GAAG,CAAC,yCAAyC,CAAC,CAAC;QAClE,IAAI,CAAC,YAAY,GAAG,aAAa,CAAC,QAAQ,EAAE,CAAC;QAC7C,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IACD,QAAQ;QACP,IAAI,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE;YAC/B,IAAI,OAAO,IAAI,CAAC,YAAY,CAAC,QAAQ,KAAK,UAAU,EAAE;gBACrD,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;aAC7D;iBAAM;gBACN,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;aAC3C;YAED,IAAI,OAAiC,CAAC;YACtC,IAAI,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE;gBAClC,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAkB;oBACzC,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;iBAC/B;qBAAuB;oBACvB,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAe,CAAC;oBAC9D,OAAO,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;iBACjD;aACD;iBAAM;gBACN,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC;aACpB;YACD,MAAM,YAAY,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;YACvD,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC;YACzE,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;SAU7B;IACF,CAAC;IACD,gBAAgB;QACf,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CACvC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAC7C,CAAC;IACH,CAAC;IACD,kBAAkB,CAAC,QAAqB;QACvC,IAAI,SAAS,GAAW,QAAQ,CAAC,SAAS,EAAE,MAA4B,CAAC;QACzE,IAAI,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACrC,MAAM,WAAW,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;YACnE,SAAS,GAAG,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5D,IAAI,QAAQ,KAAK,WAAW,CAAC,WAAW,EAAE,EAAE;gBAC3C,MAAM,GAAG,MAAM,CAAC;gBAChB,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,KAAU,EAAE,EAAE;oBAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC;gBACrD,CAAC,CAAC,CAAC;gBACH,OAAO;aACP;iBAAM,IAAI,WAAW,IAAI,IAAI,CAAC,IAAI,EAAE;gBACpC,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;gBAC7C,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE;oBACnC,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,KAAU,EAAE,EAAE;wBAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC;oBACrD,CAAC,CAAC,CAAC;oBACH,OAAO;iBACP;aACD;iBAAM;gBACN,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;aACnB;SACD;aAAM;YACN,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC;SACnB;QACD,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAiD,CAAC;QAClG,MAAM,MAAM,GAAG,qBAAqB,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;QACvE,IAAI,MAAM,EAAE;YACX,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,SAAS,CAAC,CAAC,KAAU,EAAE,EAAE;gBAC1D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;SACH;aACI,IAAI,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,GAAG,SAAS,CAAC,EAAE;YAC/C,IAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,CAAC,KAAU,EAAE,EAAE;gBAC7D,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,CAAC;YACrD,CAAC,CAAC,CAAC;SACH;aAII;YAGJ,iBAAiB,CAAC,WAAW,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;SAChG;IACF,CAAC;IACD,sBAAsB,CAAC,MAA4B,EAAE,SAAiB,EAAE,YAAsB;QAC7F,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAY,EAAE,EAAE;YACnD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,gBAAgB,CAAC,IAAY;QAC5B,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACrC,CAAC;IACD,eAAe,CAAC,SAA2C,EAAE,OAAgB,EAAE,cAA6B;QAC3G,MAAM,YAAY,GAAG,qBAAqB,CAAC,eAAe,CAAI,SAAS,CAAC,aAAa,CAAC,CAAC;QACvF,IAAI,YAAY,EAAE;YAEjB,MAAM,UAAU,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;YACzF,IAAI,QAAQ,CAAC,UAAU,CAAC,EAAE;gBACzB,UAAU,CAAC,MAAM,EAAE,CAAC;aACpB;YACD,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE;gBAC5B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC;aACzE;SACD;aAAM;SAGN;IACF,CAAC;IACD,aAAa,CAAC,IAAiB;QAC9B,OAAO,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,CAAC;IACD,UAAU,CAAC,IAAiB;QAC3B,OAAO,IAAI,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,cAAc,CAAC,QAAyC,EAAE,YAA2B;QACpF,MAAM,QAAQ,GAAG,IAAI,IAAI,CAAC,EAAE,CAAC,CAAC;QAC9B,YAAY,GAAG,YAAY,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACzD,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;QAChD,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,sBAAsB,CAAC,IAAqC,EAAE,YAA2B;QACxF,MAAM,QAAQ,GAAG,QAAQ,CAAC,sBAAsB,EAAE,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE,YAAY,CAAC,EAAE,YAAY,CAAC,CAAC;QACtG,OAAO,QAAQ,CAAC;IACjB,CAAC;IACD,mBAAmB,CAAC,MAAsC,EAAE,KAA8B,EAAE,YAA2B;QACtH,IAAI,KAAK,YAAY,cAAc,EAAE;YACpC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;SACvD;aAAM,IAAI,KAAK,YAAY,gBAAgB,EAAE;YAC7C,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;YAChG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACvB,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,KAAK,CAAC,aAAa,KAAK,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC;YAClG,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC3B,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,YAAY,CAAC,QAAQ,EAAE,CAAC,CAAC;SAC9D;aAAM,IAAI,KAAK,YAAY,eAAe,EAAE;YAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;SACxD;aAAM,IAAI,KAAK,YAAY,WAAW,EAAE;YACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;SACtC;aAAM,IAAI,KAAK,YAAY,WAAW,EAAE;YACxC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;SACzC;aAAM,IAAI,KAAK,YAAY,eAAe,EAAE;YAC5C,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC;SAChE;IACF,CAAC;IACD,sBAAsB,CAAC,IAAoC,EAAE,YAA2B;QACvF,IAAI,OAAoB,CAAC;QACzB,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAC3C,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/C,IAAI,OAAO,CAAC,WAAW,CAAC,IAAI,KAAK,aAAa,EAAE;gBAC/C,cAAc,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE;oBAClD,cAAc,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBAChC,IAAI,SAAS,GAAG,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBACjD,IAAI,CAAC,CAAC,OAAO,YAAY,SAAS,CAAC,EAAE;wBACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;wBACxD,OAAO,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;qBAC9B;gBACF,CAAC,CAAC,CAAC;aACH;SACD;aAAM,IAAI,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE;YAEzC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;SACtF;aAAM;YAEN,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC/C;QACD,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE;YAC7B,OAAO,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACtC;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,aAAa,CAAC,IAAoC,EAAE,YAA2B;QAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;QAEhE,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACtD,YAAY,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC;QACvC,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAC5B,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;QAChD,IAAI,IAAI,CAAC,eAAe,EAAE;YACzB,IAAI,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;YACnG,IAAI,IAAI,EAAE;gBACT,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;aACvD;iBAAM;gBAGN,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,KAAK,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;aAChG;SACD;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE;gBAClC,IAAI,CAAC,mBAAmB,CAAC,OAAO,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC;aACvD;SACD;QACD,OAAO,OAAO,CAAC;IAChB,CAAC;IACD,aAAa,CAAC,OAAoB,EAAE,IAAoC,EAAE,YAA2B;QACpG,IAAI,IAAI,CAAC,UAAU,EAAE;YACpB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAI9B,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,MAAM,EAAE;oBACX,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,EAAE;wBACzB,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;qBACnC;yBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;wBAC/B,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;qBACpC;yBAAM;wBACN,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAe,CAAC,CAAC;qBACtD;iBACD;qBAAM;oBACN,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;iBAC5C;YAEF,CAAC,CAAC,CAAC;SACH;QACD,IAAI,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;SACH;QACD,IAAI,IAAI,CAAC,MAAM,EAAE;YAChB,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC1B,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;SACH;QACD,IAAI,IAAI,CAAC,OAAO,EAAE;YACjB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;gBAC5B,IAAI,QAAkB,CAAC;gBAUvB,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE;oBACpC,QAAQ,GAAG,CAAC,MAAa,EAAE,EAAE;wBAC5B,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBAC3E,CAAC,CAAC;iBACF;qBAA0D;oBAE1D,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;iBACvB;gBACD,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAW,EAAE,QAAe,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;SACH;QACD,IAAI,IAAI,CAAC,aAAa,EAAE;YACvB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACjC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;YAC5C,CAAC,CAAC,CAAC;SACH;IACF,CAAC;IAED,QAAQ,CAAC,OAA2B,EAAE,IAAqE,EAAE,YAA2B;QACvI,MAAM,QAAQ,GAAG,GAAG,EAAE;YACrB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC,CAAC;QACF,IAAI,CAAC,uBAAuB,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1F,QAAQ,EAAE,CAAC;IACZ,CAAC;IACD,uBAAuB,CAAC,IAAoB,EAAE,YAA2B,EAAE,QAAgC,EAAE,MAAe,EAAE,QAAiB;QAC9I,IAAI,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAChC,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,OAAO,EAAE;gBACZ,IAAI,iBAAiB,CAAC,gBAAgB,KAAK,OAAO,EAAE;oBACnD,MAAM,IAAI,GAA4B,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAClE,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;oBAC3D,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;wBACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;qBACnE;oBACD,MAAM,WAAW,GAAiC,EAAE,CAAC;oBACrD,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnD,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;iBACtC;qBAAM,IAAI,YAAY,CAAC,WAAW,KAAK,OAAO,EAAE;oBAChD,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;iBAC9D;aACD;QACF,CAAC,CAAC,CAAC;IACJ,CAAC;IACD,QAAQ,CAAC,OAAoB,EAAE,IAAmC,EAAE,YAA2B;QAC9F,MAAM,SAAS,GAAG,GAAG,EAAE;YACtB,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QACnC,CAAC,CAAC;QACF,MAAM,SAAS,GAAG,GAAG,EAAE;YACtB,IAAI,CAAC,kBAAkB,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC3C,CAAC,CAAC;QACF,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE;YAC3C,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;YACtD,IAAI,OAAO,EAAE;gBACZ,IAAI,iBAAiB,CAAC,gBAAgB,KAAK,OAAO,EAAE;oBACnD,MAAM,IAAI,GAA4B,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;oBAClE,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;oBACzE,IAAI,WAAW,CAAC,IAAI,CAAC,EAAE;wBACtB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,cAAc,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;qBACnE;oBACD,MAAM,WAAW,GAAgC,EAAE,CAAC;oBACpD,WAAW,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnD,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;iBACtC;qBAAM,IAAI,YAAY,CAAC,WAAW,KAAK,OAAO,EAAE;oBAChD,aAAa,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;iBAC5E;aACD;QACF,CAAC,CAAC,CAAC;QAEH,SAAS,EAAE,CAAC;QACZ,MAAM,eAAe,GAAG,kBAAkB,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/D,IAAI,CAAC,eAAe,KAAK,OAAO,IAAI,eAAe,KAAK,QAAQ,CAAC;eAC7D,OAAO,CAAC,OAAO,CAAC,EAAE;YACrB,OAAO,CAAC,gBAAgB,CAAC,eAAe,EAAE,GAAG,EAAE;gBAC9C,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC,CAAC,CAAC;SACH;aACI,IAAI,eAAe,CAAC,OAAO,CAAC,EAAE;SAElC;aACI;YACJ,IAAI,CAAC,IAAI,CAAC,qBAAqB,EAAE;gBAChC,IAAI,CAAC,qBAAqB,GAAG,IAAI,eAAe,EAAE,CAAC;aACnD;YACD,IAAI,CAAC,qBAAqB,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,GAAG,EAAE;gBAC7D,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;oBACrB,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACnC;YACF,CAAC,CAAC,CAAC;SACH;IACF,CAAC;CAED","sourcesContent":["import { ExpressionNode, StackProvider } from '@ibyar/expressions';\nimport {\n\tCommentNode, DOMDirectiveNode,\n\tDOMElementNode, DOMFragmentNode, DOMNode,\n\tisTagNameNative, isValidCustomElementName,\n\tLiveAttribute, LiveTextContent, TextContent\n} from '@ibyar/elements';\nimport { ComponentRef, ListenerRef } from '../component/component.js';\nimport { ElementMutation } from './mutation.js';\nimport { HTMLComponent, isHTMLComponent } from '../component/custom-element.js';\nimport { documentStack } from '../context/stack.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\nimport { EventEmitter } from '../component/events.js';\nimport { isOnDestroy, isOnInit } from '../component/lifecycle.js';\nimport { hasAttr } from '../utils/elements-util.js';\nimport {\n\taddChangeListener, isModel, Model,\n\tSourceFollowerCallback, subscribe1way, subscribe2way\n} from '../model/change-detection.js';\nimport { AsyncPipeProvider, PipeProvider, PipeTransform } from '../pipe/pipe.js';\nimport { ElementContextProvider } from '../directive/providers.js';\n\nfunction getChangeEventName(element: HTMLElement, elementAttr: string): 'input' | 'change' | string {\n\tif (elementAttr === 'value') {\n\t\tif (element instanceof HTMLInputElement) {\n\t\t\treturn 'input';\n\t\t} else if (element instanceof HTMLSelectElement\n\t\t\t|| element instanceof HTMLTextAreaElement) {\n\t\t\treturn 'change';\n\t\t}\n\t}\n\treturn elementAttr;\n}\nexport class ComponentRender<T> {\n\tcomponentRef: ComponentRef<T>;\n\ttemplate: DOMNode<ExpressionNode>;\n\ttemplateRegExp: RegExp;\n\tnativeElementMutation: ElementMutation;\n\t// viewChildMap: { [name: string]: any };\n\tcontextStack: StackProvider;\n\tconstructor(public view: HTMLComponent<T>) {\n\t\tthis.componentRef = this.view.getComponentRef();\n\t\tthis.templateRegExp = (/\\{\\{((\\w| |\\.|\\+|-|\\*|\\\\)*(\\(\\))?)\\}\\}/g);\n\t\tthis.contextStack = documentStack.newStack();\n\t\tthis.contextStack.addProvider(this.view);\n\t\tthis.contextStack.addProvider(this.view._model);\n\t}\n\tinitView(): void {\n\t\tif (this.componentRef.template) {\n\t\t\tif (typeof this.componentRef.template === 'function') {\n\t\t\t\tthis.template = this.componentRef.template(this.view._model);\n\t\t\t} else {\n\t\t\t\tthis.template = this.componentRef.template;\n\t\t\t}\n\n\t\t\tlet rootRef: HTMLElement | ShadowRoot;\n\t\t\tif (this.componentRef.isShadowDom) {\n\t\t\t\tif (this.view.shadowRoot /* OPEN MODE */) {\n\t\t\t\t\trootRef = this.view.shadowRoot;\n\t\t\t\t} else /* CLOSED MODE*/ {\n\t\t\t\t\trootRef = Reflect.get(this.view, '_shadowRoot') as ShadowRoot;\n\t\t\t\t\tReflect.deleteProperty(this.view, '_shadowRoot');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trootRef = this.view;\n\t\t\t}\n\t\t\tconst rootFragment = document.createDocumentFragment();\n\t\t\tthis.appendChildToParent(rootFragment, this.template, this.contextStack);\n\t\t\trootRef.append(rootFragment);\n\t\t\t// this.componentRef.viewChild\n\t\t\t// \t.filter(child => child.selector instanceof HTMLElement)\n\t\t\t// \t.forEach(child => {\n\t\t\t// \t\t// view child support by child class reference, matching with the first 'HTMLElement' element\n\t\t\t// \t\t// let selectorName: string = view.selector as string;\n\t\t\t// \t\t// if (Reflect.has(this.viewChildMap, selectorName)) {\n\t\t\t// \t\t// \tReflect.set(this.view._model, view.modelName, this.viewChildMap[selectorName]);\n\t\t\t// \t\t// }\n\t\t\t// \t});\n\t\t}\n\t}\n\tinitHostListener(): void {\n\t\tthis.componentRef.hostListeners?.forEach(\n\t\t\tlistener => this.handelHostListener(listener)\n\t\t);\n\t}\n\thandelHostListener(listener: ListenerRef) {\n\t\tlet eventName: string = listener.eventName, source: HTMLElement | Window;\n\t\tif (listener.eventName.includes(':')) {\n\t\t\tconst eventSource = eventName.substring(0, eventName.indexOf(':'));\n\t\t\teventName = eventName.substring(eventName.indexOf(':') + 1);\n\t\t\tif ('window' === eventSource.toLowerCase()) {\n\t\t\t\tsource = window;\n\t\t\t\tthis.addNativeEventListener(source, eventName, (event: any) => {\n\t\t\t\t\tthis.view._model[listener.modelCallbackName](event);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t} else if (eventSource in this.view) {\n\t\t\t\tsource = Reflect.get(this.view, eventSource);\n\t\t\t\tif (!Reflect.has(source, '_model')) {\n\t\t\t\t\tthis.addNativeEventListener(source, eventName, (event: any) => {\n\t\t\t\t\t\tthis.view._model[listener.modelCallbackName](event);\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsource = this.view;\n\t\t\t}\n\t\t} else {\n\t\t\tsource = this.view;\n\t\t}\n\t\tconst sourceModel = Reflect.get(source, '_model') as Model & { [key: string]: EventEmitter<any> };\n\t\tconst output = ClassRegistryProvider.hasOutput(sourceModel, eventName);\n\t\tif (output) {\n\t\t\tsourceModel[output.modelProperty].subscribe((value: any) => {\n\t\t\t\tthis.view._model[listener.modelCallbackName](value);\n\t\t\t});\n\t\t}\n\t\telse if (Reflect.has(source, 'on' + eventName)) {\n\t\t\tthis.addNativeEventListener(source, eventName, (event: any) => {\n\t\t\t\tthis.view._model[listener.modelCallbackName](event);\n\t\t\t});\n\t\t}\n\t\t// else if (this.componentRef.encapsulation === 'template' && !this.view.hasParentComponent()) {\n\t\t// \tthis.addNativeEventListener(this.view, eventName, eventCallback);\n\t\t// }\n\t\telse {\n\t\t\t// listen to internal changes\n\t\t\t// TODO: need to resolve paramter\n\t\t\taddChangeListener(sourceModel, eventName, () => this.view._model[listener.modelCallbackName]());\n\t\t}\n\t}\n\taddNativeEventListener(source: HTMLElement | Window, eventName: string, funcCallback: Function) {\n\t\tsource.addEventListener(eventName, (event: Event) => {\n\t\t\tfuncCallback.call(this.view._model, event);\n\t\t});\n\t}\n\tgetElementByName(name: string) {\n\t\treturn Reflect.get(this.view, name);\n\t}\n\tcreateDirective(directive: DOMDirectiveNode<ExpressionNode>, comment: Comment, directiveStack: StackProvider): void {\n\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<T>(directive.directiveName);\n\t\tif (directiveRef) {\n\t\t\t// structural directive selector\n\t\t\tconst structural = new directiveRef.modelClass(this, comment, directive, directiveStack);\n\t\t\tif (isOnInit(structural)) {\n\t\t\t\tstructural.onInit();\n\t\t\t}\n\t\t\tif (isOnDestroy(structural)) {\n\t\t\t\tthis.view._model.subscribeModel('destroy', () => structural.onDestroy());\n\t\t\t}\n\t\t} else {\n\t\t\t// didn't find directive or it is not define yet.\n\t\t\t// class registry should have 'when defined' callback\n\t\t}\n\t}\n\tcreateComment(node: CommentNode): Comment {\n\t\treturn document.createComment(`${node.comment}`);\n\t}\n\tcreateText(node: TextContent): Text {\n\t\treturn new Text(node.value);\n\t}\n\tcreateLiveText(textNode: LiveTextContent<ExpressionNode>, contextStack: StackProvider): Text {\n\t\tconst liveText = new Text('');\n\t\tcontextStack = contextStack.stackFor({ this: liveText });\n\t\tthis.bind1Way(liveText, textNode, contextStack);\n\t\treturn liveText;\n\t}\n\tcreateDocumentFragment(node: DOMFragmentNode<ExpressionNode>, contextStack: StackProvider): DocumentFragment {\n\t\tconst fragment = document.createDocumentFragment();\n\t\tnode.children.forEach(child => this.appendChildToParent(fragment, child, contextStack), contextStack);\n\t\treturn fragment;\n\t}\n\tappendChildToParent(parent: HTMLElement | DocumentFragment, child: DOMNode<ExpressionNode>, contextStack: StackProvider) {\n\t\tif (child instanceof DOMElementNode) {\n\t\t\tparent.append(this.createElement(child, contextStack));\n\t\t} else if (child instanceof DOMDirectiveNode) {\n\t\t\tconst comment = document.createComment(`start ${child.directiveName}: ${child.directiveValue}`);\n\t\t\tparent.append(comment);\n\t\t\tconst lastComment = document.createComment(`end ${child.directiveName}: ${child.directiveValue}`);\n\t\t\tcomment.after(lastComment);\n\t\t\tthis.createDirective(child, comment, contextStack.newStack());\n\t\t} else if (child instanceof LiveTextContent) {\n\t\t\tparent.append(this.createLiveText(child, contextStack));\n\t\t} else if (child instanceof TextContent) {\n\t\t\tparent.append(this.createText(child));\n\t\t} else if (child instanceof CommentNode) {\n\t\t\tparent.append(this.createComment(child));\n\t\t} else if (child instanceof DOMFragmentNode) {\n\t\t\tparent.append(this.createDocumentFragment(child, contextStack));\n\t\t}\n\t}\n\tcreateElementByTagName(node: DOMElementNode<ExpressionNode>, contextStack: StackProvider): HTMLElement {\n\t\tlet element: HTMLElement;\n\t\tif (isValidCustomElementName(node.tagName)) {\n\t\t\telement = document.createElement(node.tagName);\n\t\t\tif (element.constructor.name === 'HTMLElement') {\n\t\t\t\tcustomElements.whenDefined(node.tagName).then(() => {\n\t\t\t\t\tcustomElements.upgrade(element);\n\t\t\t\t\tlet ViewClass = customElements.get(node.tagName);\n\t\t\t\t\tif (!(element instanceof ViewClass)) {\n\t\t\t\t\t\tconst newChild = this.createElement(node, contextStack);\n\t\t\t\t\t\telement.replaceWith(newChild);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (isTagNameNative(node.tagName)) {\n\t\t\t// native tags // and custom tags can be used her\n\t\t\telement = document.createElement(node.tagName, node.is ? { is: node.is } : undefined);\n\t\t} else {\n\t\t\t// html unknown element\n\t\t\telement = document.createElement(node.tagName);\n\t\t}\n\t\tif (isHTMLComponent(element)) {\n\t\t\telement.setParentComponent(this.view);\n\t\t}\n\t\treturn element;\n\t}\n\tcreateElement(node: DOMElementNode<ExpressionNode>, contextStack: StackProvider): HTMLElement {\n\t\tconst element = this.createElementByTagName(node, contextStack);\n\n\t\tconst elContext = new ElementContextProvider(element);\n\t\tcontextStack = contextStack.newStack();\n\t\tcontextStack.add(elContext);\n\t\tthis.initAttribute(element, node, contextStack);\n\t\tif (node.templateRefName) {\n\t\t\tlet view = this.componentRef.viewChild.find(child => child.selector === node.templateRefName.name);\n\t\t\tif (view) {\n\t\t\t\tReflect.set(this.view._model, view.modelName, element);\n\t\t\t} else {\n\t\t\t\t// <form #form=\"formDirective\"></form>\n\t\t\t\t// try to search in this element 'attribute directive' list\n\t\t\t\tview = this.componentRef.viewChild.find(child => child.selector === node.templateRefName.value);\n\t\t\t}\n\t\t}\n\t\tif (node.children) {\n\t\t\tfor (const child of node.children) {\n\t\t\t\tthis.appendChildToParent(element, child, contextStack);\n\t\t\t}\n\t\t}\n\t\treturn element;\n\t}\n\tinitAttribute(element: HTMLElement, node: DOMElementNode<ExpressionNode>, contextStack: StackProvider): void {\n\t\tif (node.attributes) {\n\t\t\tnode.attributes.forEach(attr => {\n\t\t\t\t/**\n\t\t\t\t * <input id=\"23\" name=\"person-name\" />\n\t\t\t\t */\n\t\t\t\tconst isAttr = hasAttr(element, attr.name);\n\t\t\t\tif (isAttr) {\n\t\t\t\t\tif (attr.value === false) {\n\t\t\t\t\t\telement.removeAttribute(attr.name);\n\t\t\t\t\t} else if (attr.value === true) {\n\t\t\t\t\t\telement.setAttribute(attr.name, '');\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.setAttribute(attr.name, attr.value as string);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tReflect.set(element, attr.name, attr.value);\n\t\t\t\t}\n\t\t\t\t// (attr.node as ExpressionNode).set(contextStack, attr.value);\n\t\t\t});\n\t\t}\n\t\tif (node.twoWayBinding) {\n\t\t\tnode.twoWayBinding.forEach(attr => {\n\t\t\t\tthis.bind2Way(element, attr, contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.inputs) {\n\t\t\tnode.inputs.forEach(attr => {\n\t\t\t\tthis.bind1Way(element, attr, contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.outputs) {\n\t\t\tnode.outputs.forEach(event => {\n\t\t\t\tlet listener: Function;\n\t\t\t\t/**\n\t\t\t\t * <a (click)=\"onLinkClick($event)\"></a>\n\t\t\t\t * <a @click=\"onLinkClick($event)\"></a>\n\t\t\t\t * <input [(value)]=\"person.name\" />\n\t\t\t\t * <input (value)=\"person.name\" />\n\t\t\t\t * <!-- <input (value)=\"person.name = $event\" /> -->\n\t\t\t\t * \n\t\t\t\t * TODO: diff of event listener and back-way data binding\n\t\t\t\t */\n\t\t\t\tif (typeof event.value === 'string') {\n\t\t\t\t\tlistener = ($event: Event) => {\n\t\t\t\t\t\tevent.expression.get(contextStack.stackFor({ $event }), this.view._model);\n\t\t\t\t\t};\n\t\t\t\t} else /* if (typeof event.sourceHandler === 'function')*/ {\n\t\t\t\t\t// let eventName: keyof HTMLElementEventMap = event.eventName;\n\t\t\t\t\tlistener = event.value;\n\t\t\t\t}\n\t\t\t\telement.addEventListener(event.name as any, listener as any);\n\t\t\t});\n\t\t}\n\t\tif (node.templateAttrs) {\n\t\t\tnode.templateAttrs.forEach(attr => {\n\t\t\t\tthis.bind1Way(element, attr, contextStack);\n\t\t\t});\n\t\t}\n\t}\n\n\tbind1Way(element: HTMLElement | Text, attr: LiveAttribute<ExpressionNode> | LiveTextContent<ExpressionNode>, contextStack: StackProvider) {\n\t\tconst callback = () => {\n\t\t\tattr.expression.get(contextStack);\n\t\t};\n\t\tthis.subscribeExpressionNode(attr.expression, contextStack, callback, element, attr.name);\n\t\tcallback();\n\t}\n\tsubscribeExpressionNode(node: ExpressionNode, contextStack: StackProvider, callback: SourceFollowerCallback, object?: object, attrName?: string) {\n\t\tnode.event().forEach(eventName => {\n\t\t\tconst context = contextStack.getProviderBy(eventName);\n\t\t\tif (context) {\n\t\t\t\tif (AsyncPipeProvider.AsyncPipeContext === context) {\n\t\t\t\t\tconst pipe: PipeTransform<any, any> = contextStack.get(eventName);\n\t\t\t\t\tsubscribe1way(pipe, eventName, callback, object, attrName);\n\t\t\t\t\tif (isOnDestroy(pipe)) {\n\t\t\t\t\t\tthis.view._model.subscribeModel('destroy', () => pipe.onDestroy());\n\t\t\t\t\t}\n\t\t\t\t\tconst pipeContext: { [key: string]: Function; } = {};\n\t\t\t\t\tpipeContext[eventName] = pipe.transform.bind(pipe);\n\t\t\t\t\tcontextStack.addProvider(pipeContext);\n\t\t\t\t} else if (PipeProvider.PipeContext !== context) {\n\t\t\t\t\tsubscribe1way(context, eventName, callback, object, attrName);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tbind2Way(element: HTMLElement, attr: LiveAttribute<ExpressionNode>, contextStack: StackProvider) {\n\t\tconst callback1 = () => {\n\t\t\tattr.expression.get(contextStack);\n\t\t};\n\t\tconst callback2 = () => {\n\t\t\tattr.callbackExpression.get(contextStack);\n\t\t};\n\t\tattr.expression.event().forEach(eventName => {\n\t\t\tconst context = contextStack.getProviderBy(eventName);\n\t\t\tif (context) {\n\t\t\t\tif (AsyncPipeProvider.AsyncPipeContext === context) {\n\t\t\t\t\tconst pipe: PipeTransform<any, any> = contextStack.get(eventName);\n\t\t\t\t\tsubscribe2way(pipe, eventName, callback1, element, attr.name, callback2);\n\t\t\t\t\tif (isOnDestroy(pipe)) {\n\t\t\t\t\t\tthis.view._model.subscribeModel('destroy', () => pipe.onDestroy());\n\t\t\t\t\t}\n\t\t\t\t\tconst pipeContext: { [key: string]: Function } = {};\n\t\t\t\t\tpipeContext[eventName] = pipe.transform.bind(pipe);\n\t\t\t\t\tcontextStack.addProvider(pipeContext);\n\t\t\t\t} else if (PipeProvider.PipeContext !== context) {\n\t\t\t\t\tsubscribe2way(context, eventName, callback1, element, attr.name, callback2);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tcallback1();\n\t\tconst changeEventName = getChangeEventName(element, attr.name);\n\t\tif ((changeEventName === 'input' || changeEventName === 'change')\n\t\t\t&& isModel(element)) {\n\t\t\telement.addEventListener(changeEventName, () => {\n\t\t\t\telement.emitChangeModel(attr.name);\n\t\t\t});\n\t\t}\n\t\telse if (isHTMLComponent(element)) {\n\t\t\t// ignore, it is applied by default\n\t\t}\n\t\telse {\n\t\t\tif (!this.nativeElementMutation) {\n\t\t\t\tthis.nativeElementMutation = new ElementMutation();\n\t\t\t}\n\t\t\tthis.nativeElementMutation.subscribe(element, attr.name, () => {\n\t\t\t\tif (isModel(element)) {\n\t\t\t\t\telement.emitChangeModel(attr.name);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n}\n"]}
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../../src/core/view/render.ts"],"names":[],"mappings":"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","sourcesContent":["import { ExpressionNode, Stack } from '@ibyar/expressions';\nimport {\n\tCommentNode, DOMDirectiveNode,\n\tDOMElementNode, DOMFragmentNode, DOMNode,\n\tisTagNameNative, isValidCustomElementName,\n\tLiveAttribute, LiveTextContent, TextContent\n} from '@ibyar/elements';\nimport { ComponentRef, ListenerRef } from '../component/component.js';\nimport { ElementMutation } from './mutation.js';\nimport { HTMLComponent, isHTMLComponent } from '../component/custom-element.js';\nimport { documentStack } from '../context/stack.js';\nimport { ClassRegistryProvider } from '../providers/provider.js';\nimport { EventEmitter } from '../component/events.js';\nimport { isOnDestroy, isOnInit } from '../component/lifecycle.js';\nimport { hasAttr } from '../utils/elements-util.js';\nimport {\n\taddChangeListener, isModel, Model,\n\tSourceFollowerCallback, subscribe1way, subscribe2way\n} from '../model/change-detection.js';\nimport { AsyncPipeProvider, PipeProvider, PipeTransform } from '../pipe/pipe.js';\nimport { ElementReactiveScope } from '../directive/providers.js';\n\nfunction getChangeEventName(element: HTMLElement, elementAttr: string): 'input' | 'change' | string {\n\tif (elementAttr === 'value') {\n\t\tif (element instanceof HTMLInputElement) {\n\t\t\treturn 'input';\n\t\t} else if (element instanceof HTMLSelectElement\n\t\t\t|| element instanceof HTMLTextAreaElement) {\n\t\t\treturn 'change';\n\t\t}\n\t}\n\treturn elementAttr;\n}\nexport class ComponentRender<T> {\n\tcomponentRef: ComponentRef<T>;\n\ttemplate: DOMNode<ExpressionNode>;\n\tnativeElementMutation: ElementMutation;\n\tcontextStack: Stack;\n\ttemplateRefMap = new Map<string, DOMElementNode<ExpressionNode>>();\n\tconstructor(public view: HTMLComponent<T>) {\n\t\tthis.componentRef = this.view.getComponentRef();\n\t\tthis.contextStack = documentStack.copyStack();\n\t\tthis.contextStack.pushFunctionScope(); // to protect documentStack\n\t\tthis.contextStack.pushScope(this.view._viewScope);\n\t\tthis.contextStack.pushScope(this.view._modelScope);\n\t}\n\tinitView(): void {\n\t\tif (this.componentRef.template) {\n\t\t\tif (typeof this.componentRef.template === 'function') {\n\t\t\t\tthis.template = this.componentRef.template(this.view._model);\n\t\t\t} else {\n\t\t\t\tthis.template = this.componentRef.template;\n\t\t\t}\n\n\t\t\tlet rootRef: HTMLElement | ShadowRoot;\n\t\t\tif (this.componentRef.isShadowDom) {\n\t\t\t\tif (this.view.shadowRoot /* OPEN MODE */) {\n\t\t\t\t\trootRef = this.view.shadowRoot;\n\t\t\t\t} else /* CLOSED MODE*/ {\n\t\t\t\t\trootRef = Reflect.get(this.view, '_shadowRoot') as ShadowRoot;\n\t\t\t\t\tReflect.deleteProperty(this.view, '_shadowRoot');\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\trootRef = this.view;\n\t\t\t}\n\t\t\tthis.initTemplateRefMap(this.template);\n\t\t\tconst rootFragment = document.createDocumentFragment();\n\t\t\tthis.appendChildToParent(rootFragment, this.template, this.contextStack);\n\t\t\trootRef.append(rootFragment);\n\t\t}\n\t}\n\tisTemplateRefName(template: DOMNode<ExpressionNode>): template is DOMElementNode<ExpressionNode> {\n\t\tif (template instanceof DOMElementNode) {\n\t\t\tif (template.tagName === 'template' && template.templateRefName) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\tinitTemplateRefMap(domNode: DOMNode<ExpressionNode>) {\n\t\tif (domNode instanceof DOMElementNode || domNode instanceof DOMDirectiveNode || domNode instanceof DOMFragmentNode) {\n\t\t\tif (domNode.children) {\n\t\t\t\tconst toRemove: { index: number, template: DOMElementNode<ExpressionNode> }[] = [];\n\t\t\t\tfor (let index = 0; index < domNode.children.length; index++) {\n\t\t\t\t\tconst child = domNode.children[index];\n\t\t\t\t\tif (this.isTemplateRefName(child)) {\n\t\t\t\t\t\ttoRemove.unshift({ index, template: child });\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.initTemplateRefMap(child);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttoRemove.forEach(info => {\n\t\t\t\t\tthis.templateRefMap.set(info.template.templateRefName.name, info.template);\n\t\t\t\t\tdomNode.children.splice(info.index, 1);\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\tinitHostListener(): void {\n\t\tthis.componentRef.hostListeners?.forEach(\n\t\t\tlistener => this.handelHostListener(listener)\n\t\t);\n\t}\n\thandelHostListener(listener: ListenerRef) {\n\t\tlet eventName: string = listener.eventName, source: HTMLElement | Window;\n\t\tif (listener.eventName.includes(':')) {\n\t\t\tconst eventSource = eventName.substring(0, eventName.indexOf(':'));\n\t\t\teventName = eventName.substring(eventName.indexOf(':') + 1);\n\t\t\tif ('window' === eventSource.toLowerCase()) {\n\t\t\t\tsource = window;\n\t\t\t\tthis.addNativeEventListener(source, eventName, (event: any) => {\n\t\t\t\t\tthis.view._model[listener.modelCallbackName](event);\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t} else if (eventSource in this.view) {\n\t\t\t\tsource = Reflect.get(this.view, eventSource);\n\t\t\t\tif (!Reflect.has(source, '_model')) {\n\t\t\t\t\tthis.addNativeEventListener(source, eventName, (event: any) => {\n\t\t\t\t\t\tthis.view._model[listener.modelCallbackName](event);\n\t\t\t\t\t});\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsource = this.view;\n\t\t\t}\n\t\t} else {\n\t\t\tsource = this.view;\n\t\t}\n\t\tconst sourceModel = Reflect.get(source, '_model') as Model & { [key: string]: EventEmitter<any> };\n\t\tconst output = ClassRegistryProvider.hasOutput(sourceModel, eventName);\n\t\tif (output) {\n\t\t\tsourceModel[output.modelProperty].subscribe((value: any) => {\n\t\t\t\tthis.view._model[listener.modelCallbackName](value);\n\t\t\t});\n\t\t}\n\t\telse if (Reflect.has(source, 'on' + eventName)) {\n\t\t\tthis.addNativeEventListener(source, eventName, (event: any) => {\n\t\t\t\tthis.view._model[listener.modelCallbackName](event);\n\t\t\t});\n\t\t}\n\t\t// else if (this.componentRef.encapsulation === 'template' && !this.view.hasParentComponent()) {\n\t\t// \tthis.addNativeEventListener(this.view, eventName, eventCallback);\n\t\t// }\n\t\telse {\n\t\t\t// listen to internal changes\n\t\t\t// TODO: need to resolve parameter\n\t\t\taddChangeListener(sourceModel, eventName, () => this.view._model[listener.modelCallbackName]());\n\t\t}\n\t}\n\taddNativeEventListener(source: HTMLElement | Window, eventName: string, funcCallback: Function) {\n\t\tsource.addEventListener(eventName, (event: Event) => {\n\t\t\tfuncCallback.call(this.view._model, event);\n\t\t});\n\t}\n\tgetElementByName(name: string) {\n\t\treturn Reflect.get(this.view, name);\n\t}\n\tcreateDirective(directive: DOMDirectiveNode<ExpressionNode>, comment: Comment, directiveStack: Stack): void {\n\t\tconst directiveRef = ClassRegistryProvider.getDirectiveRef<T>(directive.directiveName);\n\t\tif (directiveRef) {\n\t\t\t// structural directive selector\n\t\t\tconst structural = new directiveRef.modelClass(this, comment, directive, directiveStack.copyStack());\n\t\t\tif (isOnInit(structural)) {\n\t\t\t\tstructural.onInit();\n\t\t\t}\n\t\t\tif (isOnDestroy(structural)) {\n\t\t\t\tthis.view._model.subscribeModel('destroy', () => structural.onDestroy());\n\t\t\t}\n\t\t} else {\n\t\t\t// didn't find directive or it is not define yet.\n\t\t\t// class registry should have 'when defined' callback\n\t\t}\n\t}\n\tcreateComment(node: CommentNode): Comment {\n\t\treturn document.createComment(`${node.comment}`);\n\t}\n\tcreateText(node: TextContent): Text {\n\t\treturn new Text(node.value);\n\t}\n\tcreateLiveText(textNode: LiveTextContent<ExpressionNode>, contextStack: Stack): Text {\n\t\tconst liveText = new Text('');\n\t\tcontextStack = contextStack.copyStack();\n\t\tcontextStack.pushBlockScopeFor({ this: liveText });\n\t\tthis.bind1Way(liveText, textNode, contextStack);\n\t\treturn liveText;\n\t}\n\tcreateDocumentFragment(node: DOMFragmentNode<ExpressionNode>, contextStack: Stack): DocumentFragment {\n\t\tconst fragment = document.createDocumentFragment();\n\t\tnode.children.forEach(child => this.appendChildToParent(fragment, child, contextStack));\n\t\treturn fragment;\n\t}\n\tappendChildToParent(parent: HTMLElement | DocumentFragment, child: DOMNode<ExpressionNode>, contextStack: Stack) {\n\t\tif (child instanceof DOMElementNode) {\n\t\t\tparent.append(this.createElement(child, contextStack));\n\t\t} else if (child instanceof DOMDirectiveNode) {\n\t\t\tconst comment = document.createComment(`start ${child.directiveName}: ${child.directiveValue}`);\n\t\t\tparent.append(comment);\n\t\t\tconst lastComment = document.createComment(`end ${child.directiveName}: ${child.directiveValue}`);\n\t\t\tcomment.after(lastComment);\n\t\t\tthis.createDirective(child, comment, contextStack);\n\t\t} else if (child instanceof LiveTextContent) {\n\t\t\tparent.append(this.createLiveText(child, contextStack));\n\t\t} else if (child instanceof TextContent) {\n\t\t\tparent.append(this.createText(child));\n\t\t} else if (child instanceof CommentNode) {\n\t\t\tparent.append(this.createComment(child));\n\t\t} else if (child instanceof DOMFragmentNode) {\n\t\t\tparent.append(this.createDocumentFragment(child, contextStack));\n\t\t}\n\t}\n\tcreateElementByTagName(node: DOMElementNode<ExpressionNode>): HTMLElement {\n\t\tlet element: HTMLElement;\n\t\tif (isValidCustomElementName(node.tagName)) {\n\t\t\tconst ViewClass = customElements.get(node.tagName) as ((new () => HTMLElement) | undefined);\n\t\t\tif (ViewClass) {\n\t\t\t\telement = new ViewClass();\n\t\t\t} else {\n\t\t\t\telement = document.createElement(node.tagName);\n\t\t\t\tif (element.constructor.name === 'HTMLElement') {\n\t\t\t\t\tcustomElements.whenDefined(node.tagName).then(() => customElements.upgrade(element));\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (isTagNameNative(node.tagName)) {\n\t\t\t// native tags // and custom tags can be used her\n\t\t\telement = document.createElement(node.tagName, node.is ? { is: node.is } : undefined);\n\t\t} else {\n\t\t\t// html unknown element\n\t\t\telement = document.createElement(node.tagName);\n\t\t}\n\t\tif (isHTMLComponent(element)) {\n\t\t\telement.setParentComponent(this.view);\n\t\t}\n\t\treturn element;\n\t}\n\tcreateElement(node: DOMElementNode<ExpressionNode>, contextStack: Stack): HTMLElement {\n\t\tconst element = this.createElementByTagName(node);\n\t\tconst elContext = isHTMLComponent(element) ? element._viewScope : new ElementReactiveScope(element);\n\t\tcontextStack = contextStack.copyStack();\n\t\tcontextStack.pushScope(elContext);\n\t\tthis.initAttribute(element, node, contextStack);\n\t\tif (node.templateRefName) {\n\t\t\tReflect.set(this.view, node.templateRefName.name, element);\n\t\t\tconst view = this.componentRef.viewChild.find(child => child.selector === node.templateRefName.name);\n\t\t\tif (view) {\n\t\t\t\tReflect.set(this.view._model, view.modelName, element);\n\t\t\t}\n\t\t}\n\t\tif (node.children) {\n\t\t\tfor (const child of node.children) {\n\t\t\t\tthis.appendChildToParent(element, child, contextStack);\n\t\t\t}\n\t\t}\n\t\treturn element;\n\t}\n\tinitAttribute(element: HTMLElement, node: DOMElementNode<ExpressionNode>, contextStack: Stack): void {\n\t\tif (node.attributes) {\n\t\t\tnode.attributes.forEach(attr => {\n\t\t\t\t/**\n\t\t\t\t * <input id=\"23\" name=\"person-name\" />\n\t\t\t\t */\n\t\t\t\tconst isAttr = hasAttr(element, attr.name);\n\t\t\t\tif (isAttr) {\n\t\t\t\t\tif (attr.value === false) {\n\t\t\t\t\t\telement.removeAttribute(attr.name);\n\t\t\t\t\t} else if (attr.value === true) {\n\t\t\t\t\t\telement.setAttribute(attr.name, '');\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.setAttribute(attr.name, attr.value as string);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tReflect.set(element, attr.name, attr.value);\n\t\t\t\t}\n\t\t\t\t// (attr.node as ExpressionNode).set(contextStack, attr.value);\n\t\t\t});\n\t\t}\n\t\tif (node.twoWayBinding) {\n\t\t\tnode.twoWayBinding.forEach(attr => {\n\t\t\t\tthis.bind2Way(element, attr, contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.inputs) {\n\t\t\tnode.inputs.forEach(attr => {\n\t\t\t\tthis.bind1Way(element, attr, contextStack);\n\t\t\t});\n\t\t}\n\t\tif (node.outputs) {\n\t\t\tnode.outputs.forEach(event => {\n\t\t\t\tlet listener: Function;\n\t\t\t\t/**\n\t\t\t\t * <a (click)=\"onLinkClick($event)\"></a>\n\t\t\t\t * <a @click=\"onLinkClick($event)\"></a>\n\t\t\t\t * <input [(value)]=\"person.name\" />\n\t\t\t\t * <input (value)=\"person.name\" />\n\t\t\t\t * <!-- <input (value)=\"person.name = $event\" /> -->\n\t\t\t\t * \n\t\t\t\t * TODO: diff of event listener and back-way data binding\n\t\t\t\t */\n\t\t\t\tif (typeof event.value === 'string') {\n\t\t\t\t\tlistener = ($event: Event) => {\n\t\t\t\t\t\tconst stack = contextStack.copyStack();\n\t\t\t\t\t\tstack.pushBlockScopeFor({ $event });\n\t\t\t\t\t\tevent.expression.get(stack, this.view._model);\n\t\t\t\t\t};\n\t\t\t\t} else /* if (typeof event.sourceHandler === 'function')*/ {\n\t\t\t\t\t// let eventName: keyof HTMLElementEventMap = event.eventName;\n\t\t\t\t\tlistener = event.value;\n\t\t\t\t}\n\t\t\t\telement.addEventListener(event.name as any, listener as any);\n\t\t\t});\n\t\t}\n\t\tif (node.templateAttrs) {\n\t\t\tnode.templateAttrs.forEach(attr => {\n\t\t\t\tthis.bind1Way(element, attr, contextStack);\n\t\t\t});\n\t\t}\n\t}\n\n\tbind1Way(element: HTMLElement | Text, attr: LiveAttribute<ExpressionNode> | LiveTextContent<ExpressionNode>, contextStack: Stack) {\n\t\tconst callback = () => {\n\t\t\tattr.expression.get(contextStack);\n\t\t};\n\t\tthis.subscribeExpressionNode(attr.expression, contextStack, callback, element, attr.name);\n\t\tcallback();\n\t}\n\tsubscribeExpressionNode(node: ExpressionNode, contextStack: Stack, callback: SourceFollowerCallback, object?: object, attrName?: string) {\n\t\tnode.events().forEach(eventName => {\n\t\t\tconst context = contextStack.findScope(eventName)?.getContext();\n\t\t\tif (context) {\n\t\t\t\tif (AsyncPipeProvider.AsyncPipeContext === context) {\n\t\t\t\t\tconst pipe: PipeTransform<any, any> = contextStack.get(eventName);\n\t\t\t\t\tsubscribe1way(pipe, eventName, callback, object, attrName);\n\t\t\t\t\tif (isOnDestroy(pipe)) {\n\t\t\t\t\t\tthis.view._model.subscribeModel('destroy', () => pipe.onDestroy());\n\t\t\t\t\t}\n\t\t\t\t\tconst pipeContext: { [key: string]: Function; } = {};\n\t\t\t\t\tpipeContext[eventName] = pipe.transform.bind(pipe);\n\t\t\t\t\tcontextStack.pushBlockScopeFor(pipeContext);\n\t\t\t\t} else if (PipeProvider.PipeContext !== context) {\n\t\t\t\t\tsubscribe1way(context, eventName, callback, object, attrName);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t}\n\tbind2Way(element: HTMLElement, attr: LiveAttribute<ExpressionNode>, contextStack: Stack) {\n\t\tconst callback1 = () => {\n\t\t\tattr.expression.get(contextStack);\n\t\t};\n\t\tconst callback2 = () => {\n\t\t\tattr.callbackExpression.get(contextStack);\n\t\t};\n\t\tattr.expression.events().forEach(eventName => {\n\t\t\tconst context = contextStack.findScope(eventName)?.getContext();\n\t\t\tif (context) {\n\t\t\t\tif (AsyncPipeProvider.AsyncPipeContext === context) {\n\t\t\t\t\tconst pipe: PipeTransform<any, any> = contextStack.get(eventName);\n\t\t\t\t\tsubscribe2way(pipe, eventName, callback1, element, attr.name, callback2);\n\t\t\t\t\tif (isOnDestroy(pipe)) {\n\t\t\t\t\t\tthis.view._model.subscribeModel('destroy', () => pipe.onDestroy());\n\t\t\t\t\t}\n\t\t\t\t\tconst pipeContext: { [key: string]: Function } = {};\n\t\t\t\t\tpipeContext[eventName] = pipe.transform.bind(pipe);\n\t\t\t\t\tcontextStack.pushBlockScopeFor(pipeContext);\n\t\t\t\t} else if (PipeProvider.PipeContext !== context) {\n\t\t\t\t\tsubscribe2way(context, eventName, callback1, element, attr.name, callback2);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tcallback1();\n\t\tconst changeEventName = getChangeEventName(element, attr.name);\n\t\tif ((changeEventName === 'input' || changeEventName === 'change')\n\t\t\t&& isModel(element)) {\n\t\t\telement.addEventListener(changeEventName, () => {\n\t\t\t\telement.emitChangeModel(attr.name);\n\t\t\t});\n\t\t}\n\t\telse if (isHTMLComponent(element)) {\n\t\t\t// ignore, it is applied by default\n\t\t}\n\t\telse {\n\t\t\tif (!this.nativeElementMutation) {\n\t\t\t\tthis.nativeElementMutation = new ElementMutation();\n\t\t\t}\n\t\t\tthis.nativeElementMutation.subscribe(element, attr.name, () => {\n\t\t\t\tif (isModel(element)) {\n\t\t\t\t\telement.emitChangeModel(attr.name);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n\n}\n"]}
|
package/view/view.d.ts
CHANGED
|
@@ -11,5 +11,6 @@ export declare type ComponentModelClass = Constructable & {
|
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
13
|
export declare function isComponentModelClass(target: Constructable): target is ComponentModelClass;
|
|
14
|
-
export declare function addViewToModelClass<T>(modelClass: TypeOf<T>, selector: string, viewClass: TypeOf<HTMLComponent<T
|
|
14
|
+
export declare function addViewToModelClass<T>(modelClass: TypeOf<T>, selector: string, viewClass: TypeOf<HTMLComponent<T>>, htmlViewClassName: string): void;
|
|
15
|
+
export declare function buildViewClassNameFromSelector(selector: string): string;
|
|
15
16
|
export declare function ComponentView<T>(modelClass: TypeOf<T>, selector?: string): TypeOf<HTMLComponent<T>> | undefined;
|
package/view/view.js
CHANGED
|
@@ -5,37 +5,26 @@ import { baseFormFactoryView } from './form-view.js';
|
|
|
5
5
|
export function initCustomElementView(modelClass, componentRef) {
|
|
6
6
|
const htmlParent = componentRef.extend.classRef;
|
|
7
7
|
let viewClass;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
constructor() {
|
|
19
|
-
super(componentRef, modelClass);
|
|
20
|
-
}
|
|
21
|
-
};
|
|
8
|
+
const viewClassName = buildViewClassNameFromSelector(componentRef.selector);
|
|
9
|
+
const htmlViewClassName = `HTML${viewClassName}Element`;
|
|
10
|
+
const parentClass = componentRef.extend.name
|
|
11
|
+
? (isFormElement(componentRef.extend.name)
|
|
12
|
+
? baseFormFactoryView(htmlParent)
|
|
13
|
+
: baseFactoryView(htmlParent))
|
|
14
|
+
: baseFactoryView(HTMLElement);
|
|
15
|
+
viewClass = ({
|
|
16
|
+
[htmlViewClassName]: class extends parentClass {
|
|
17
|
+
constructor() { super(componentRef, modelClass); }
|
|
22
18
|
}
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
viewClass = class extends baseFactoryView(HTMLElement) {
|
|
26
|
-
constructor() {
|
|
27
|
-
super(componentRef, modelClass);
|
|
28
|
-
}
|
|
29
|
-
};
|
|
30
|
-
}
|
|
19
|
+
})[htmlViewClassName];
|
|
31
20
|
componentRef.inputs.forEach((input) => {
|
|
32
|
-
|
|
21
|
+
const parentProperty = Object.getOwnPropertyDescriptor(htmlParent.prototype, input.viewAttribute);
|
|
33
22
|
Object.defineProperty(viewClass.prototype, input.viewAttribute, {
|
|
34
23
|
get() {
|
|
35
24
|
return this._model[input.modelProperty] || parentProperty?.get?.call(this);
|
|
36
25
|
},
|
|
37
26
|
set(value) {
|
|
38
|
-
this.
|
|
27
|
+
this._modelScope.set(input.modelProperty, value);
|
|
39
28
|
if (parentProperty?.set) {
|
|
40
29
|
parentProperty.set.call(this, value);
|
|
41
30
|
}
|
|
@@ -87,26 +76,30 @@ export function initCustomElementView(modelClass, componentRef) {
|
|
|
87
76
|
}
|
|
88
77
|
});
|
|
89
78
|
}
|
|
90
|
-
addViewToModelClass(modelClass, componentRef.selector, viewClass);
|
|
79
|
+
addViewToModelClass(modelClass, componentRef.selector, viewClass, htmlViewClassName);
|
|
80
|
+
if (!Reflect.has(window, htmlViewClassName)) {
|
|
81
|
+
Reflect.set(window, htmlViewClassName, viewClass);
|
|
82
|
+
}
|
|
91
83
|
return viewClass;
|
|
92
84
|
}
|
|
93
85
|
export function isComponentModelClass(target) {
|
|
94
86
|
return Reflect.has(target, 'component');
|
|
95
87
|
}
|
|
96
|
-
export function addViewToModelClass(modelClass, selector, viewClass) {
|
|
97
|
-
|
|
98
|
-
.split('-')
|
|
99
|
-
.map(name => name.replace(/^\w/, char => char.toUpperCase()))
|
|
100
|
-
.join('');
|
|
101
|
-
Object.defineProperty(viewClass, 'name', { value: viewClassName });
|
|
102
|
-
Object.defineProperty(modelClass, viewClassName, { value: viewClass });
|
|
88
|
+
export function addViewToModelClass(modelClass, selector, viewClass, htmlViewClassName) {
|
|
89
|
+
Object.defineProperty(modelClass, htmlViewClassName, { value: viewClass });
|
|
103
90
|
if (!isComponentModelClass(modelClass)) {
|
|
104
91
|
Reflect.set(modelClass, 'component', {});
|
|
105
92
|
}
|
|
106
93
|
if (isComponentModelClass(modelClass)) {
|
|
107
|
-
modelClass.component[selector] =
|
|
94
|
+
modelClass.component[selector] = htmlViewClassName;
|
|
108
95
|
}
|
|
109
96
|
}
|
|
97
|
+
export function buildViewClassNameFromSelector(selector) {
|
|
98
|
+
return selector
|
|
99
|
+
.split('-')
|
|
100
|
+
.map(name => name.replace(/^\w/, char => char.toUpperCase()))
|
|
101
|
+
.join('');
|
|
102
|
+
}
|
|
110
103
|
export function ComponentView(modelClass, selector) {
|
|
111
104
|
if (isComponentModelClass(modelClass)) {
|
|
112
105
|
let viewClassName;
|
package/view/view.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/core/view/view.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAIhD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAOrD,MAAM,UAAU,qBAAqB,CAAmB,UAAqB,EAAE,YAA6B;IAC3G,MAAM,UAAU,GAAG,YAAY,CAAC,MAAM,CAAC,QAA+B,CAAC;IACvE,IAAI,SAAmC,CAAC;IACxC,
|
|
1
|
+
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../../src/core/view/view.ts"],"names":[],"mappings":"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","sourcesContent":["import type { TypeOf } from '../utils/typeof.js';\nimport { isFormElement } from '@ibyar/elements';\nimport { ComponentRef } from '../component/component.js';\nimport { HTMLComponent } from '../component/custom-element.js';\nimport { EventEmitter, Subscription } from '../component/events.js';\nimport { ToCamelCase } from '../utils/utils.js';\nimport { Constructable } from '../providers/injector.js';\nimport { baseFactoryView } from './base-view.js';\nimport { baseFormFactoryView } from './form-view.js';\n\n/**\n * \n * @param modelClass \n * @param componentRef \n */\nexport function initCustomElementView<T extends Object>(modelClass: TypeOf<T>, componentRef: ComponentRef<T>): TypeOf<HTMLComponent<T>> {\n\tconst htmlParent = componentRef.extend.classRef as TypeOf<HTMLElement>;\n\tlet viewClass: TypeOf<HTMLComponent<T>>;\n\tconst viewClassName = buildViewClassNameFromSelector(componentRef.selector);\n\tconst htmlViewClassName = `HTML${viewClassName}Element`;\n\tconst parentClass = componentRef.extend.name\n\t\t? (isFormElement(componentRef.extend.name)\n\t\t\t? baseFormFactoryView<T>(htmlParent)\n\t\t\t: baseFactoryView<T>(htmlParent)\n\t\t)\n\t\t: baseFactoryView<T>(HTMLElement);\n\tviewClass = ({\n\t\t[htmlViewClassName]: class extends parentClass { constructor() { super(componentRef, modelClass); } }\n\t})[htmlViewClassName];\n\n\tcomponentRef.inputs.forEach((input) => {\n\t\tconst parentProperty = Object.getOwnPropertyDescriptor(\n\t\t\thtmlParent.prototype,\n\t\t\tinput.viewAttribute\n\t\t);\n\t\tObject.defineProperty(viewClass.prototype, input.viewAttribute, {\n\t\t\tget(this: HTMLComponent<T>): any {\n\t\t\t\treturn this._model[input.modelProperty] || parentProperty?.get?.call(this);\n\t\t\t},\n\t\t\tset(this: HTMLComponent<{ [key: string]: any; }>, value: any) {\n\t\t\t\tthis._modelScope.set(input.modelProperty, value);\n\t\t\t\t// this._model[input.modelProperty] = value;\n\t\t\t\tif (parentProperty?.set) {\n\t\t\t\t\tparentProperty.set.call(this, value);\n\t\t\t\t}\n\t\t\t},\n\t\t\tenumerable: true,\n\t\t});\n\t});\n\n\tcomponentRef.outputs.forEach(output => {\n\t\tObject.defineProperty(viewClass.prototype, output.viewAttribute, {\n\t\t\tget(): EventEmitter<any> {\n\t\t\t\treturn this._model[output.modelProperty];\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t\tlet eventListener: Function | undefined;\n\t\tlet subscription: Subscription<any>;\n\t\tObject.defineProperty(viewClass.prototype, 'on' + ToCamelCase(output.viewAttribute), {\n\t\t\t// get(): EventEmitter<any> {\n\t\t\t// \t// return this._model[output.modelProperty];\n\t\t\t// },\n\t\t\tget(): Function | undefined {\n\t\t\t\t// return this._model[output.modelProperty];\n\t\t\t\treturn eventListener;\n\t\t\t},\n\t\t\tset(this: HTMLComponent<T>, event: string | Function): void {\n\t\t\t\tif (!event) {\n\t\t\t\t\tif (subscription) {\n\t\t\t\t\t\tsubscription.unsubscribe();\n\t\t\t\t\t\teventListener = undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (typeof event === 'string') {\n\t\t\t\t\tif (event.endsWith('()')) {\n\t\t\t\t\t\tevent = event.substring(0, event.length - 2);\n\t\t\t\t\t}\n\t\t\t\t\tevent = Reflect.get(window, event);\n\t\t\t\t}\n\t\t\t\teventListener = event as Function;\n\t\t\t\tsubscription = (this._model[output.modelProperty] as EventEmitter<any>).subscribe(event);\n\t\t\t},\n\t\t\tenumerable: true\n\t\t});\n\t});\n\tObject.defineProperty(viewClass, 'observedAttributes', {\n\t\tget() {\n\t\t\treturn componentRef.inputs.map(input => input.viewAttribute);\n\t\t}\n\t});\n\t// https://html.spec.whatwg.org/multipage/custom-elements.html#custom-elements-face-example\n\tif (false) {\n\t\tObject.defineProperty(viewClass, 'formAssociated', {\n\t\t\tget() {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t});\n\t}\n\taddViewToModelClass<T>(modelClass, componentRef.selector, viewClass, htmlViewClassName);\n\tif (!Reflect.has(window, htmlViewClassName)) {\n\t\tReflect.set(window, htmlViewClassName, viewClass);\n\t}\n\treturn viewClass;\n}\n\nexport type ComponentModelClass = Constructable & { [key: string]: string } & { component: { [key: string]: string } };\n\nexport function isComponentModelClass(target: Constructable): target is ComponentModelClass {\n\treturn Reflect.has(target, 'component');\n}\n\nexport function addViewToModelClass<T>(modelClass: TypeOf<T>, selector: string, viewClass: TypeOf<HTMLComponent<T>>, htmlViewClassName: string) {\n\tObject.defineProperty(modelClass, htmlViewClassName, { value: viewClass });\n\n\tif (!isComponentModelClass(modelClass)) {\n\t\tReflect.set(modelClass, 'component', {});\n\t}\n\n\tif (isComponentModelClass(modelClass)) {\n\t\tmodelClass.component[selector] = htmlViewClassName;\n\t}\n}\n\nexport function buildViewClassNameFromSelector(selector: string) {\n\treturn selector\n\t\t.split('-')\n\t\t.map(name => name.replace(/^\\w/, char => char.toUpperCase()))\n\t\t.join('');\n}\n\nexport function ComponentView<T>(modelClass: TypeOf<T>, selector?: string): TypeOf<HTMLComponent<T>> | undefined {\n\tif (isComponentModelClass(modelClass)) {\n\t\tlet viewClassName: string;\n\t\tif (selector) {\n\t\t\tviewClassName = modelClass.component[selector];\n\t\t\tif (!viewClassName) {\n\t\t\t\tthrow new Error(`${modelClass.name} doesn't have ${selector} as view`);\n\t\t\t}\n\t\t} else {\n\t\t\tviewClassName = Object.keys(modelClass.component)[0];\n\t\t}\n\t\treturn Reflect.get(modelClass, viewClassName);\n\t}\n}\n"]}
|