@furystack/shades 3.7.3 → 4.0.4

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 (60) hide show
  1. package/dist/component-factory.spec.js +68 -11
  2. package/dist/component-factory.spec.js.map +1 -1
  3. package/dist/components/lazy-load.spec.d.ts +2 -0
  4. package/dist/components/lazy-load.spec.d.ts.map +1 -0
  5. package/dist/components/lazy-load.spec.js +83 -0
  6. package/dist/components/lazy-load.spec.js.map +1 -0
  7. package/dist/components/route-link.d.ts.map +1 -1
  8. package/dist/components/route-link.js.map +1 -1
  9. package/dist/components/route-link.spec.d.ts +2 -0
  10. package/dist/components/route-link.spec.d.ts.map +1 -0
  11. package/dist/components/route-link.spec.js +38 -0
  12. package/dist/components/route-link.spec.js.map +1 -0
  13. package/dist/components/router.d.ts +4 -2
  14. package/dist/components/router.d.ts.map +1 -1
  15. package/dist/components/router.js +35 -26
  16. package/dist/components/router.js.map +1 -1
  17. package/dist/components/router.spec.d.ts +2 -0
  18. package/dist/components/router.spec.d.ts.map +1 -0
  19. package/dist/components/router.spec.js +93 -0
  20. package/dist/components/router.spec.js.map +1 -0
  21. package/dist/services/location-service.d.ts +1 -1
  22. package/dist/services/location-service.d.ts.map +1 -1
  23. package/dist/services/location-service.js +3 -2
  24. package/dist/services/location-service.js.map +1 -1
  25. package/dist/services/location-service.spec.js +29 -3
  26. package/dist/services/location-service.spec.js.map +1 -1
  27. package/dist/services/screen-service.d.ts +1 -1
  28. package/dist/services/screen-service.d.ts.map +1 -1
  29. package/dist/services/screen-service.js +5 -5
  30. package/dist/services/screen-service.js.map +1 -1
  31. package/dist/services/screen-service.spec.d.ts +2 -0
  32. package/dist/services/screen-service.spec.d.ts.map +1 -0
  33. package/dist/services/screen-service.spec.js +34 -0
  34. package/dist/services/screen-service.spec.js.map +1 -0
  35. package/dist/shade-resources.integration.spec.d.ts +2 -0
  36. package/dist/shade-resources.integration.spec.d.ts.map +1 -0
  37. package/dist/shade-resources.integration.spec.js +62 -0
  38. package/dist/shade-resources.integration.spec.js.map +1 -0
  39. package/dist/shade.d.ts +2 -0
  40. package/dist/shade.d.ts.map +1 -1
  41. package/dist/shade.js +22 -6
  42. package/dist/shade.js.map +1 -1
  43. package/dist/shades.integration.spec.d.ts +2 -0
  44. package/dist/shades.integration.spec.d.ts.map +1 -0
  45. package/dist/shades.integration.spec.js +123 -0
  46. package/dist/shades.integration.spec.js.map +1 -0
  47. package/package.json +8 -5
  48. package/src/component-factory.spec.tsx +97 -14
  49. package/src/components/lazy-load.spec.tsx +117 -0
  50. package/src/components/route-link.spec.tsx +50 -0
  51. package/src/components/route-link.tsx +2 -1
  52. package/src/components/router.spec.tsx +130 -0
  53. package/src/components/router.tsx +38 -29
  54. package/src/services/location-service.spec.ts +37 -3
  55. package/src/services/location-service.tsx +3 -2
  56. package/src/services/screen-service.spec.ts +39 -0
  57. package/src/services/screen-service.ts +1 -1
  58. package/src/shade-resources.integration.spec.tsx +94 -0
  59. package/src/shade.ts +29 -9
  60. package/src/shades.integration.spec.tsx +156 -0
@@ -1 +1 @@
1
- {"version":3,"file":"location-service.spec.js","sourceRoot":"","sources":["../../src/services/location-service.spec.ts"],"names":[],"mappings":";;AAAA,8CAA4C;AAC5C,4CAA6C;AAC7C,yBAAoC;AACpC,iCAA6B;AAE7B,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,GAAG,GAAG,IAAI,aAAK,EAAE,CACtB;YAAC,MAAc,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAA;YACpC,CAAC,CAAC,mBAAmB,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;YACzC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,kBAAe,CAAC,CAAA;YACxC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,kBAAe,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
1
+ {"version":3,"file":"location-service.spec.js","sourceRoot":"","sources":["../../src/services/location-service.spec.ts"],"names":[],"mappings":";;AAAA,+BAA+C;AAE/C,MAAM,CAAC,WAAW,GAAG,kBAAW,CAAA;AAChC,MAAM,CAAC,WAAW,GAAG,kBAAkB,CAAA;AAEvC,8CAA4C;AAC5C,4CAA6C;AAC7C,yBAAoC;AACpC,iCAA6B;AAE7B,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,MAAM,MAAM,GAAG,QAAQ,CAAA;IAEvB,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,QAAQ,GAAG,IAAI,aAAK,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAA;IACnD,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,GAAG,EAAE;QACZ,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAC,CAAC,CAAA;IACrE,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAA;IAE/C,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,kBAAe,CAAC,CAAA;YACxC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,kBAAe,CAAC,CAAA;QAC3C,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,gBAAgB,GAAG,IAAI,CAAC,EAAE,EAAE,CAAA;YAClC,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,kBAAe,CAAC,CAAA;YACxC,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAA;YAC/C,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAC3C,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;YACpC,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAC3C,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAA;YACvC,MAAM,CAAC,gBAAgB,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;YAE3C,iEAAiE;YACjE,+EAA+E;YAC/E,8CAA8C;YAC9C,0DAA0D;YAC1D,8CAA8C;QAChD,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -6,7 +6,7 @@ export declare type Breakpoint = {
6
6
  minSize: number;
7
7
  maxSize?: number;
8
8
  };
9
- export declare class Screen implements Disposable {
9
+ export declare class ScreenService implements Disposable {
10
10
  private getOrientation;
11
11
  readonly breakpoints: {
12
12
  [K in ScreenSize]: {
@@ -1 +1 @@
1
- {"version":3,"file":"screen-service.d.ts","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAE9D,eAAO,MAAM,WAAW,yCAA0C,CAAA;AAElE,oBAAY,UAAU,GAAG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAA;AAEnD,oBAAY,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhF,qBACa,MAAO,YAAW,UAAU;IACvC,OAAO,CAAC,cAAc,CAAyF;IAE/G,SAAgB,WAAW,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE;KAAE,CAMtE;IAEM,OAAO;IAId,SAAgB,UAAU,EAAE;QAC1B,OAAO,EAAE;aAAG,CAAC,IAAI,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC;SAAE,CAAA;KACzD,CAQA;IAED,OAAO,CAAC,iBAAiB;IAIlB,WAAW,4CAAuE;IAEzF,OAAO,CAAC,gBAAgB,CAEvB;IAED,OAAO,CAAC,aAAa;;CAWtB"}
1
+ {"version":3,"file":"screen-service.d.ts","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAE9D,eAAO,MAAM,WAAW,yCAA0C,CAAA;AAElE,oBAAY,UAAU,GAAG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAA;AAEnD,oBAAY,UAAU,GAAG;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAEhF,qBACa,aAAc,YAAW,UAAU;IAC9C,OAAO,CAAC,cAAc,CAAyF;IAE/G,SAAgB,WAAW,EAAE;SAAG,CAAC,IAAI,UAAU,GAAG;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE;KAAE,CAMtE;IAEM,OAAO;IAId,SAAgB,UAAU,EAAE;QAC1B,OAAO,EAAE;aAAG,CAAC,IAAI,UAAU,GAAG,eAAe,CAAC,OAAO,CAAC;SAAE,CAAA;KACzD,CAQA;IAED,OAAO,CAAC,iBAAiB;IAIlB,WAAW,4CAAuE;IAEzF,OAAO,CAAC,gBAAgB,CAEvB;IAED,OAAO,CAAC,aAAa;;CAWtB"}
@@ -1,11 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Screen = exports.ScreenSizes = void 0;
3
+ exports.ScreenService = exports.ScreenSizes = void 0;
4
4
  const tslib_1 = require("tslib");
5
5
  const inject_1 = require("@furystack/inject");
6
6
  const utils_1 = require("@furystack/utils");
7
7
  exports.ScreenSizes = ['xs', 'sm', 'md', 'lg', 'xl'];
8
- let Screen = class Screen {
8
+ let ScreenService = class ScreenService {
9
9
  constructor() {
10
10
  this.getOrientation = () => (window.matchMedia('(orientation:landscape').matches ? 'landscape' : 'portrait');
11
11
  this.breakpoints = {
@@ -44,9 +44,9 @@ let Screen = class Screen {
44
44
  });
45
45
  }
46
46
  };
47
- Screen = (0, tslib_1.__decorate)([
47
+ ScreenService = (0, tslib_1.__decorate)([
48
48
  (0, inject_1.Injectable)({ lifetime: 'singleton' }),
49
49
  (0, tslib_1.__metadata)("design:paramtypes", [])
50
- ], Screen);
51
- exports.Screen = Screen;
50
+ ], ScreenService);
51
+ exports.ScreenService = ScreenService;
52
52
  //# sourceMappingURL=screen-service.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"screen-service.js","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":";;;;AAAA,8CAA8C;AAC9C,4CAA8D;AAEjD,QAAA,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAA;AAOlE,IAAa,MAAM,GAAnB,MAAa,MAAM;IA4CjB;QA3CQ,mBAAc,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QAE/F,gBAAW,GAA+C;YACxE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACrB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACrB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;YACpB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;YACpB,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;SACnB,CAAA;QAMe,eAAU,GAEtB;YACF,OAAO,EAAE;gBACP,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC9D,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC9D,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC9D,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC9D,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;aAC/D;SACF,CAAA;QAMM,gBAAW,GAAG,IAAI,uBAAe,CAA2B,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;QAEjF,qBAAgB,GAAG,GAAG,EAAE;YAC9B,IAAI,CAAC,aAAa,EAAE,CAAA;QACtB,CAAC,CAAA;QAUC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACxD,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IApCM,OAAO;QACZ,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC7D,CAAC;IAcO,iBAAiB,CAAC,IAAgB;QACxC,OAAO,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;IAC5D,CAAC;IAQO,aAAa;QACnB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;QAChD,mBAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;IACJ,CAAC;CAMF,CAAA;AAhDY,MAAM;IADlB,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;;GACzB,MAAM,CAgDlB;AAhDY,wBAAM"}
1
+ {"version":3,"file":"screen-service.js","sourceRoot":"","sources":["../../src/services/screen-service.ts"],"names":[],"mappings":";;;;AAAA,8CAA8C;AAC9C,4CAA8D;AAEjD,QAAA,WAAW,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAU,CAAA;AAOlE,IAAa,aAAa,GAA1B,MAAa,aAAa;IA4CxB;QA3CQ,mBAAc,GAAG,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;QAE/F,gBAAW,GAA+C;YACxE,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACrB,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;YACrB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;YACpB,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE;YACpB,EAAE,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE;SACnB,CAAA;QAMe,eAAU,GAEtB;YACF,OAAO,EAAE;gBACP,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC9D,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC9D,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC9D,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;gBAC9D,EAAE,EAAE,IAAI,uBAAe,CAAU,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;aAC/D;SACF,CAAA;QAMM,gBAAW,GAAG,IAAI,uBAAe,CAA2B,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;QAEjF,qBAAgB,GAAG,GAAG,EAAE;YAC9B,IAAI,CAAC,aAAa,EAAE,CAAA;QACtB,CAAC,CAAA;QAUC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;QACxD,IAAI,CAAC,aAAa,EAAE,CAAA;IACtB,CAAC;IApCM,OAAO;QACZ,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAAC,gBAAgB,CAAC,CAAA;IAC7D,CAAC;IAcO,iBAAiB,CAAC,IAAgB;QACxC,OAAO,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,OAAO,CAAA;IAC5D,CAAC;IAQO,aAAa;QACnB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAA;QAChD,mBAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YAC3B,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAA;QACtE,CAAC,CAAC,CAAA;IACJ,CAAC;CAMF,CAAA;AAhDY,aAAa;IADzB,IAAA,mBAAU,EAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC;;GACzB,aAAa,CAgDzB;AAhDY,sCAAa"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=screen-service.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen-service.spec.d.ts","sourceRoot":"","sources":["../../src/services/screen-service.spec.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const util_1 = require("util");
4
+ global.TextEncoder = util_1.TextEncoder;
5
+ global.TextDecoder = util_1.TextDecoder;
6
+ const inject_1 = require("@furystack/inject");
7
+ const utils_1 = require("@furystack/utils");
8
+ const screen_service_1 = require("./screen-service");
9
+ const jsdom_1 = require("jsdom");
10
+ describe('ScreenService', () => {
11
+ const oldDoc = document;
12
+ beforeAll(() => {
13
+ globalThis.document = new jsdom_1.JSDOM().window.document;
14
+ window.matchMedia = () => ({ matches: true });
15
+ });
16
+ afterAll(() => {
17
+ globalThis.document = oldDoc;
18
+ });
19
+ beforeEach(() => (document.body.innerHTML = '<div id="root"></div>'));
20
+ afterEach(() => (document.body.innerHTML = ''));
21
+ it('Shuld be constructed', async () => {
22
+ await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
23
+ const s = i.getInstance(screen_service_1.ScreenService);
24
+ expect(s).toBeInstanceOf(screen_service_1.ScreenService);
25
+ });
26
+ });
27
+ it('Shuld update state on events', async () => {
28
+ await (0, utils_1.usingAsync)(new inject_1.Injector(), async (i) => {
29
+ i.getInstance(screen_service_1.ScreenService);
30
+ /** TODO */
31
+ });
32
+ });
33
+ });
34
+ //# sourceMappingURL=screen-service.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"screen-service.spec.js","sourceRoot":"","sources":["../../src/services/screen-service.spec.ts"],"names":[],"mappings":";;AAAA,+BAA+C;AAE/C,MAAM,CAAC,WAAW,GAAG,kBAAW,CAAA;AAChC,MAAM,CAAC,WAAW,GAAG,kBAAkB,CAAA;AAEvC,8CAA4C;AAC5C,4CAA6C;AAC7C,qDAAgD;AAChD,iCAA6B;AAE7B,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC7B,MAAM,MAAM,GAAG,QAAQ,CAAA;IAEvB,SAAS,CAAC,GAAG,EAAE;QACb,UAAU,CAAC,QAAQ,GAAG,IAAI,aAAK,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAA;QACjD,MAAM,CAAC,UAAU,GAAG,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAU,CAAA,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,QAAQ,CAAC,GAAG,EAAE;QACZ,UAAU,CAAC,QAAQ,GAAG,MAAM,CAAA;IAC9B,CAAC,CAAC,CAAA;IAEF,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,uBAAuB,CAAC,CAAC,CAAA;IACrE,SAAS,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,GAAG,EAAE,CAAC,CAAC,CAAA;IAE/C,EAAE,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;QACpC,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,CAAC,8BAAa,CAAC,CAAA;YACtC,MAAM,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,8BAAa,CAAC,CAAA;QACzC,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8BAA8B,EAAE,KAAK,IAAI,EAAE;QAC5C,MAAM,IAAA,kBAAU,EAAC,IAAI,iBAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;YAC3C,CAAC,CAAC,WAAW,CAAC,8BAAa,CAAC,CAAA;YAC5B,WAAW;QACb,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shade-resources.integration.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shade-resources.integration.spec.d.ts","sourceRoot":"","sources":["../src/shade-resources.integration.spec.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const inject_1 = require("@furystack/inject");
4
+ const util_1 = require("util");
5
+ global.TextEncoder = util_1.TextEncoder;
6
+ global.TextDecoder = util_1.TextDecoder;
7
+ const jsdom_1 = require("jsdom");
8
+ const initialize_1 = require("./initialize");
9
+ const shade_1 = require("./shade");
10
+ const shade_component_1 = require("./shade-component");
11
+ const utils_1 = require("@furystack/utils");
12
+ describe('Shade Resources integration tests', () => {
13
+ const oldDoc = document;
14
+ beforeAll(() => {
15
+ globalThis.document = new jsdom_1.JSDOM().window.document;
16
+ });
17
+ afterAll(() => {
18
+ globalThis.document = oldDoc;
19
+ });
20
+ beforeEach(() => (document.body.innerHTML = '<div id="root"></div>'));
21
+ afterEach(() => (document.body.innerHTML = ''));
22
+ it('Should update the component based on a custom observable value change', () => {
23
+ const injector = new inject_1.Injector();
24
+ const rootElement = document.getElementById('root');
25
+ const renderCounter = jest.fn();
26
+ const obs1 = new utils_1.ObservableValue(0);
27
+ const obs2 = new utils_1.ObservableValue('a');
28
+ const ExampleComponent = (0, shade_1.Shade)({
29
+ resources: ({ element }) => [
30
+ obs1.subscribe((val1) => (element.querySelector('#val1').innerHTML = val1.toString()), true),
31
+ obs2.subscribe((val2) => (element.querySelector('#val2').innerHTML = val2.toString()), true),
32
+ ],
33
+ render: () => {
34
+ renderCounter();
35
+ return ((0, shade_component_1.createComponent)("div", null,
36
+ (0, shade_component_1.createComponent)("div", { id: "val1" }),
37
+ (0, shade_component_1.createComponent)("div", { id: "val2" })));
38
+ },
39
+ shadowDomName: 'shades-example-resource',
40
+ });
41
+ expect(obs1.getObservers().length).toBe(0);
42
+ expect(obs2.getObservers().length).toBe(0);
43
+ (0, initialize_1.initializeShadeRoot)({
44
+ injector,
45
+ rootElement,
46
+ jsxElement: (0, shade_component_1.createComponent)(ExampleComponent, null),
47
+ });
48
+ expect(document.body.innerHTML).toBe('<div id="root"><shades-example-resource><div><div id="val1">0</div><div id="val2">a</div></div></shades-example-resource></div>');
49
+ expect(obs1.getObservers().length).toBe(1);
50
+ expect(obs2.getObservers().length).toBe(1);
51
+ expect(renderCounter).toBeCalledTimes(1);
52
+ obs1.setValue(1);
53
+ expect(document.body.innerHTML).toBe('<div id="root"><shades-example-resource><div><div id="val1">1</div><div id="val2">a</div></div></shades-example-resource></div>');
54
+ obs2.setValue('b');
55
+ expect(document.body.innerHTML).toBe('<div id="root"><shades-example-resource><div><div id="val1">1</div><div id="val2">b</div></div></shades-example-resource></div>');
56
+ document.body.innerHTML = '';
57
+ expect(obs1.getObservers().length).toBe(0);
58
+ expect(obs2.getObservers().length).toBe(0);
59
+ expect(renderCounter).toBeCalledTimes(1);
60
+ });
61
+ });
62
+ //# sourceMappingURL=shade-resources.integration.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shade-resources.integration.spec.js","sourceRoot":"","sources":["../src/shade-resources.integration.spec.tsx"],"names":[],"mappings":"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"}
package/dist/shade.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Disposable } from '@furystack/utils';
1
2
  import { Injector } from '@furystack/inject';
2
3
  import { ChildrenList, RenderOptions } from './models';
3
4
  export declare type ShadeOptions<TProps, TState> = {
@@ -21,6 +22,7 @@ export declare type ShadeOptions<TProps, TState> = {
21
22
  * Will be executed when the element is detached from the DOM.
22
23
  */
23
24
  onDetach?: (options: RenderOptions<TProps, TState>) => void;
25
+ resources?: (options: RenderOptions<TProps, TState>) => Disposable[];
24
26
  } & (unknown extends TState ? {} : {
25
27
  /**
26
28
  * The initial state of the component
@@ -1 +1 @@
1
- {"version":3,"file":"shade.d.ts","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA;AAEtD,oBAAY,YAAY,CAAC,MAAM,EAAE,MAAM,IAAI;IACzC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,OAAO,CAAA;IAE/D;;OAEG;IACH,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KACnC,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;IAE/E;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;IAE3D;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;CAC5D,GAAG,CAAC,OAAO,SAAS,MAAM,GACvB,EAAE,GACF;IACE;;OAEG;IACH,eAAe,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAA;CAC5E,CAAC,CAAA;AAEN;;;;;GAKG;AACH,eAAO,MAAM,KAAK,iIA0JjB,CAAA"}
1
+ {"version":3,"file":"shade.d.ts","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAE9D,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAkB,aAAa,EAAE,MAAM,UAAU,CAAA;AAEtE,oBAAY,YAAY,CAAC,MAAM,EAAE,MAAM,IAAI;IACzC;;OAEG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB;;OAEG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,OAAO,CAAA;IAE/D;;OAEG;IACH,WAAW,CAAC,EAAE,CACZ,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KACnC,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,CAAC,CAAA;IAE/E;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;IAE3D;;OAEG;IACH,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,CAAA;IAE3D,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,UAAU,EAAE,CAAA;CACrE,GAAG,CAAC,OAAO,SAAS,MAAM,GACvB,EAAE,GACF;IACE;;OAEG;IACH,eAAe,EAAE,CAAC,OAAO,EAAE;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAA;CAC5E,CAAC,CAAA;AAEN;;;;;GAKG;AACH,eAAO,MAAM,KAAK,iIA4KjB,CAAA"}
package/dist/shade.js CHANGED
@@ -33,19 +33,26 @@ const Shade = (o) => {
33
33
  this.getRenderOptions = () => {
34
34
  const props = this.props.getValue() || {};
35
35
  const getState = () => this.state.getValue();
36
- return {
36
+ const updateState = (stateChanges, skipRender) => {
37
+ const currentState = this.state.getValue();
38
+ const newState = { ...currentState, ...stateChanges };
39
+ if (JSON.stringify(currentState) !== JSON.stringify(newState)) {
40
+ this.state.setValue(newState);
41
+ !skipRender && this.updateComponent();
42
+ }
43
+ };
44
+ const returnValue = {
37
45
  props,
38
46
  getState,
39
47
  injector: this.injector,
40
- updateState: (newState, skipRender) => {
41
- this.state.setValue({ ...this.state.getValue(), ...newState });
42
- !skipRender && this.updateComponent();
43
- },
48
+ updateState,
44
49
  children: this.shadeChildren.getValue(),
45
50
  element: this,
46
51
  };
52
+ return returnValue;
47
53
  };
48
54
  this.cleanup = undefined;
55
+ this.resources = [];
49
56
  this.props = new utils_1.ObservableValue();
50
57
  this.state = new utils_1.ObservableValue();
51
58
  }
@@ -59,11 +66,16 @@ const Shade = (o) => {
59
66
  this.state.dispose();
60
67
  this.shadeChildren.dispose();
61
68
  this.cleanup && this.cleanup();
69
+ Object.values(this.resources).forEach((s) => s.dispose());
70
+ }
71
+ createResources() {
72
+ var _a;
73
+ this.resources.push(...(((_a = o.resources) === null || _a === void 0 ? void 0 : _a.call(o, this.getRenderOptions())) || []));
62
74
  }
63
75
  /**
64
76
  * Updates the component in the DOM.
65
77
  */
66
- async updateComponent() {
78
+ updateComponent() {
67
79
  const newJsx = this.render(this.getRenderOptions());
68
80
  // const selectionState = this.getSelectionState()
69
81
  if (this.hasChildNodes()) {
@@ -82,6 +94,7 @@ const Shade = (o) => {
82
94
  o.getInitialState &&
83
95
  this.state.setValue(o.getInitialState({ props: this.props.getValue(), injector: this.injector }));
84
96
  this.updateComponent();
97
+ this.createResources();
85
98
  const cleanupResult = o.constructed && o.constructed(this.getRenderOptions());
86
99
  if (cleanupResult instanceof Promise) {
87
100
  cleanupResult.then((cleanup) => (this.cleanup = cleanup));
@@ -125,6 +138,9 @@ const Shade = (o) => {
125
138
  }
126
139
  });
127
140
  }
141
+ else {
142
+ throw Error(`A custom shade with shadow DOM name '${o.shadowDomName}' has already been registered!`);
143
+ }
128
144
  return (props, children) => {
129
145
  const el = document.createElement(customElementName, {
130
146
  ...props,
package/dist/shade.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"shade.js","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":";;;AAAA,4CAAkD;AAClD,+BAAyB;AACzB,8CAA4C;AAsC5C;;;;;GAKG;AACI,MAAM,KAAK,GAAG,CAA2B,CAA+B,EAAE,EAAE;IACjF,8BAA8B;IAC9B,MAAM,iBAAiB,GAAG,CAAC,CAAC,aAAa,IAAI,SAAS,IAAA,SAAE,GAAE,EAAE,CAAA;IAE5D,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAA;IACtD,IAAI,CAAC,QAAQ,EAAE;QACb,cAAc,CAAC,MAAM,CACnB,iBAAiB,EACjB,KAAM,SAAQ,WAAW;YAgIvB,YAAY,MAAc;gBACxB,KAAK,EAAE,CAAA;gBAzGT;;mBAEG;gBACI,kBAAa,GAAG,IAAI,uBAAe,CAAe,EAAE,CAAC,CAAA;gBAE5D;;;mBAGG;gBACI,WAAM,GAAG,CAAC,OAAsC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;gBAE7E;;mBAEG;gBACK,qBAAgB,GAAG,GAAG,EAAE;oBAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAA;oBACzC,MAAM,QAAQ,GAAG,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAA;oBAC5C,OAAO;wBACL,KAAK;wBACL,QAAQ;wBACR,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,WAAW,EAAE,CAAC,QAAgB,EAAE,UAAmB,EAAE,EAAE;4BACrD,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,GAAG,QAAQ,EAAE,CAAC,CAAA;4BAC9D,CAAC,UAAU,IAAI,IAAI,CAAC,eAAe,EAAE,CAAA;wBACvC,CAAC;wBACD,QAAQ,EAAE,IAAI,CAAC,aAAa,CAAC,QAAQ,EAAE;wBACvC,OAAO,EAAE,IAAI;qBAC0B,CAAA;gBAC3C,CAAC,CAAA;gBAmCO,YAAO,GAAwB,SAAS,CAAA;gBA2C9C,IAAI,CAAC,KAAK,GAAG,IAAI,uBAAe,EAAE,CAAA;gBAClC,IAAI,CAAC,KAAK,GAAG,IAAI,uBAAe,EAAE,CAAA;YACpC,CAAC;YAnIM,iBAAiB;gBACtB,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;gBACjD,IAAI,CAAC,eAAe,EAAE,CAAA;YACxB,CAAC;YAEM,oBAAoB;gBACzB,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;gBACjD,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;gBACpB,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;gBACpB,IAAI,CAAC,aAAa,CAAC,OAAO,EAAE,CAAA;gBAC5B,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,EAAE,CAAA;YAChC,CAAC;YA0CD;;eAEG;YACI,KAAK,CAAC,eAAe;gBAC1B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;gBAEnD,kDAAkD;gBAElD,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;oBACxB,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,UAAkB,CAAC,CAAA;oBAClD,+DAA+D;iBAChE;qBAAM;oBACL,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;iBACpB;YACH,CAAC;YAED;;eAEG;YACI,eAAe;gBACpB,CAAC;gBAAC,CAAS,CAAC,eAAe;oBACzB,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAE,CAAS,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAA;gBAE5G,IAAI,CAAC,eAAe,EAAE,CAAA;gBACtB,MAAM,aAAa,GAAG,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAA;gBAC7E,IAAI,aAAa,YAAY,OAAO,EAAE;oBACpC,aAAa,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,CAAC,CAAA;iBAC1D;qBAAM;oBACL,yBAAyB;oBACzB,IAAI,CAAC,OAAO,GAAG,aAAa,CAAA;iBAC7B;YACH,CAAC;YAMO,qBAAqB;gBAC3B,IAAI,MAAM,GAAG,IAAI,CAAC,aAAa,CAAA;gBAC/B,OAAO,MAAM,EAAE;oBACb,IAAK,MAAsB,CAAC,QAAQ,EAAE;wBACpC,OAAQ,MAAsB,CAAC,QAAQ,CAAA;qBACxC;oBACD,MAAM,GAAG,MAAM,CAAC,aAAa,CAAA;iBAC9B;YACH,CAAC;YAED,IAAW,QAAQ;;gBACjB,IAAI,IAAI,CAAC,SAAS,EAAE;oBAClB,OAAO,IAAI,CAAC,SAAS,CAAA;iBACtB;gBAED,MAAM,SAAS,GAAG,MAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAU,0CAAE,QAAQ,CAAA;gBAC1D,IAAI,SAAS,IAAI,SAAS,YAAY,iBAAQ,EAAE;oBAC9C,OAAO,SAAS,CAAA;iBACjB;gBAED,MAAM,SAAS,GAAG,MAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAU,0CAAE,QAAQ,CAAA;gBAC1D,IAAI,SAAS,IAAI,SAAS,YAAY,iBAAQ,EAAE;oBAC9C,OAAO,SAAS,CAAA;iBACjB;gBAED,MAAM,UAAU,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAA;gBAC/C,IAAI,UAAU,EAAE;oBACd,IAAI,CAAC,SAAS,GAAG,UAAU,CAAA;oBAC3B,OAAO,UAAU,CAAA;iBAClB;gBACD,MAAM,KAAK,CAAC,uDAAuD,CAAC,CAAA;YACtE,CAAC;YAED,IAAW,QAAQ,CAAC,CAAW;gBAC7B,IAAI,CAAC,SAAS,GAAG,CAAC,CAAA;YACpB,CAAC;SAOiC,CACrC,CAAA;KACF;IAED,OAAO,CAAC,KAAa,EAAE,QAAsB,EAAE,EAAE;QAC/C,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,iBAAiB,EAAE;YACnD,GAAG,KAAK;SACT,CAAgC,CAAA;QACjC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;QAExB,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QACnC,OAAO,EAAiB,CAAA;IAC1B,CAAC,CAAA;AACH,CAAC,CAAA;AA1JY,QAAA,KAAK,SA0JjB"}
1
+ {"version":3,"file":"shade.js","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=shades.integration.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shades.integration.spec.d.ts","sourceRoot":"","sources":["../src/shades.integration.spec.tsx"],"names":[],"mappings":""}
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const inject_1 = require("@furystack/inject");
4
+ const util_1 = require("util");
5
+ global.TextEncoder = util_1.TextEncoder;
6
+ global.TextDecoder = util_1.TextDecoder;
7
+ const jsdom_1 = require("jsdom");
8
+ const initialize_1 = require("./initialize");
9
+ const shade_1 = require("./shade");
10
+ const shade_component_1 = require("./shade-component");
11
+ describe('Shades integration tests', () => {
12
+ const oldDoc = document;
13
+ beforeAll(() => {
14
+ globalThis.document = new jsdom_1.JSDOM().window.document;
15
+ });
16
+ afterAll(() => {
17
+ globalThis.document = oldDoc;
18
+ });
19
+ beforeEach(() => (document.body.innerHTML = '<div id="root"></div>'));
20
+ afterEach(() => (document.body.innerHTML = ''));
21
+ it('Should mount a custom component to a Shade root', () => {
22
+ const injector = new inject_1.Injector();
23
+ const rootElement = document.getElementById('root');
24
+ const ExampleComponent = (0, shade_1.Shade)({ render: () => (0, shade_component_1.createComponent)("div", null, "Hello"), shadowDomName: 'shades-example' });
25
+ (0, initialize_1.initializeShadeRoot)({
26
+ injector,
27
+ rootElement,
28
+ jsxElement: (0, shade_component_1.createComponent)(ExampleComponent, null),
29
+ });
30
+ expect(document.body.innerHTML).toBe('<div id="root"><shades-example><div>Hello</div></shades-example></div>');
31
+ });
32
+ it('Should mount nested Shades components', () => {
33
+ const injector = new inject_1.Injector();
34
+ const rootElement = document.getElementById('root');
35
+ const ExampleComponent = (0, shade_1.Shade)({
36
+ render: ({ children }) => (0, shade_component_1.createComponent)("div", null, children),
37
+ shadowDomName: 'shades-example-2',
38
+ });
39
+ const ExampleSubs = (0, shade_1.Shade)({
40
+ render: ({ props }) => (0, shade_component_1.createComponent)("div", null, props.no),
41
+ shadowDomName: 'shades-example-sub',
42
+ });
43
+ (0, initialize_1.initializeShadeRoot)({
44
+ injector,
45
+ rootElement,
46
+ jsxElement: ((0, shade_component_1.createComponent)(ExampleComponent, null,
47
+ (0, shade_component_1.createComponent)(ExampleSubs, { no: 1 }),
48
+ (0, shade_component_1.createComponent)(ExampleSubs, { no: 2 }),
49
+ (0, shade_component_1.createComponent)(ExampleSubs, { no: 3 }))),
50
+ });
51
+ expect(document.body.innerHTML).toBe('<div id="root"><shades-example-2><div><shades-example-sub><div></div></shades-example-sub><shades-example-sub><div></div></shades-example-sub><shades-example-sub><div></div></shades-example-sub></div></shades-example-2></div>');
52
+ });
53
+ it("Should execute the constructed and constructed's cleanup callback", () => {
54
+ const injector = new inject_1.Injector();
55
+ const rootElement = document.getElementById('root');
56
+ const cleanup = jest.fn();
57
+ const constructed = jest.fn(() => cleanup);
58
+ const ExampleComponent = (0, shade_1.Shade)({
59
+ constructed,
60
+ render: () => (0, shade_component_1.createComponent)("div", null, "Hello"),
61
+ });
62
+ (0, initialize_1.initializeShadeRoot)({
63
+ injector,
64
+ rootElement,
65
+ jsxElement: (0, shade_component_1.createComponent)(ExampleComponent, null),
66
+ });
67
+ expect(constructed).toBeCalled();
68
+ expect(cleanup).not.toBeCalled();
69
+ document.body.innerHTML = '';
70
+ expect(cleanup).toBeCalled();
71
+ });
72
+ it('Should execute the onAttach and onDetach callbacks', () => {
73
+ const injector = new inject_1.Injector();
74
+ const rootElement = document.getElementById('root');
75
+ const onAttach = jest.fn();
76
+ const onDetach = jest.fn();
77
+ const ExampleComponent = (0, shade_1.Shade)({
78
+ onAttach,
79
+ onDetach,
80
+ render: () => (0, shade_component_1.createComponent)("div", null, "Hello"),
81
+ });
82
+ (0, initialize_1.initializeShadeRoot)({
83
+ injector,
84
+ rootElement,
85
+ jsxElement: (0, shade_component_1.createComponent)(ExampleComponent, null),
86
+ });
87
+ expect(onAttach).toBeCalled();
88
+ expect(onDetach).not.toBeCalled();
89
+ document.body.innerHTML = '';
90
+ expect(onDetach).toBeCalled();
91
+ });
92
+ it('Should update state', () => {
93
+ const injector = new inject_1.Injector();
94
+ const rootElement = document.getElementById('root');
95
+ const ExampleComponent = (0, shade_1.Shade)({
96
+ getInitialState: () => ({ count: 0 }),
97
+ render: ({ getState, updateState }) => {
98
+ const { count } = getState();
99
+ return ((0, shade_component_1.createComponent)("div", null,
100
+ "Count is ",
101
+ getState().count.toString(),
102
+ (0, shade_component_1.createComponent)("button", { id: "plus", onclick: () => updateState({ count: count + 1 }) }, "+"),
103
+ (0, shade_component_1.createComponent)("button", { id: "minus", onclick: () => updateState({ count: count - 1 }) }, "-")));
104
+ },
105
+ });
106
+ (0, initialize_1.initializeShadeRoot)({
107
+ injector,
108
+ rootElement,
109
+ jsxElement: (0, shade_component_1.createComponent)(ExampleComponent, null),
110
+ });
111
+ const plus = () => { var _a; return (_a = document.getElementById('plus')) === null || _a === void 0 ? void 0 : _a.click(); };
112
+ const minus = () => { var _a; return (_a = document.getElementById('minus')) === null || _a === void 0 ? void 0 : _a.click(); };
113
+ expect(document.body.innerHTML).toContain('Count is 0');
114
+ plus();
115
+ expect(document.body.innerHTML).toContain('Count is 1');
116
+ plus();
117
+ expect(document.body.innerHTML).toContain('Count is 2');
118
+ minus();
119
+ minus();
120
+ expect(document.body.innerHTML).toContain('Count is 0');
121
+ });
122
+ });
123
+ //# sourceMappingURL=shades.integration.spec.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shades.integration.spec.js","sourceRoot":"","sources":["../src/shades.integration.spec.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@furystack/shades",
3
- "version": "3.7.3",
3
+ "version": "4.0.4",
4
4
  "description": "Google Authentication Provider for FuryStack",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -28,14 +28,17 @@
28
28
  "url": "https://github.com/furystack/furystack/issues"
29
29
  },
30
30
  "homepage": "https://github.com/furystack/furystack",
31
+ "devDependencies": {
32
+ "jsdom": "^19.0.0"
33
+ },
31
34
  "dependencies": {
32
- "@furystack/core": "^10.4.0",
33
- "@furystack/inject": "^4.0.76",
34
- "@furystack/utils": "^1.2.46",
35
+ "@furystack/core": "^10.4.5",
36
+ "@furystack/inject": "^5.0.2",
37
+ "@furystack/utils": "^2.0.2",
35
38
  "path-to-regexp": "^6.2.0",
36
39
  "tslib": "^2.3.1",
37
40
  "uuid": "^8.3.2"
38
41
  },
39
42
  "typings": "./dist/index.d.ts",
40
- "gitHead": "b237a004ef9cfb654c49df3f131a98c134bff889"
43
+ "gitHead": "c06b94b4dc91dd3e37ba682e95e71a969e9454d2"
41
44
  }
@@ -1,22 +1,105 @@
1
1
  import { createComponent } from './shade-component'
2
2
  import './jsx'
3
+ import { Shade } from './shade'
4
+ import { Injector } from '@furystack/inject'
3
5
 
4
6
  describe('Shades Component Factory', () => {
5
- it('Should create a simple component', () => {
6
- const component = <div>test</div>
7
- expect(component)
7
+ describe('HTML Elements', () => {
8
+ it('Should create a simple component', () => {
9
+ const component = <div>test</div>
10
+ expect(component).toBeInstanceOf(HTMLDivElement)
11
+ expect(component.innerHTML).toBe('test')
12
+ expect(component.outerHTML).toBe('<div>test</div>')
13
+ })
14
+
15
+ it('Should apply styles', () => {
16
+ const component = <div style={{ color: 'red' }}>a</div>
17
+ expect(component).toBeInstanceOf(HTMLDivElement)
18
+ expect(component.style.color).toBe('red')
19
+ })
20
+
21
+ it('Should apply data attributes', () => {
22
+ const component = <div data-testid="asd-123">a</div>
23
+ expect(component).toBeInstanceOf(HTMLDivElement)
24
+ expect(component.getAttribute('data-testid')).toBe('asd-123')
25
+ })
26
+
27
+ it('Should create a nested component', () => {
28
+ const component = (
29
+ <div style={{ display: 'flex' }}>
30
+ <h1>Hi, I'm a header</h1>
31
+ <p>paragraph... {['a', 'b', 'c']}</p>
32
+ <a target="_blank" href="https://google.com">
33
+ link
34
+ </a>
35
+ </div>
36
+ )
37
+ expect(component).toBeInstanceOf(HTMLDivElement)
38
+ expect(component.childElementCount).toBe(3)
39
+ expect(component.innerHTML).toBe(
40
+ `<h1>Hi, I'm a header</h1><p>paragraph... abc</p><a target="_blank" href="https://google.com">link</a>`,
41
+ )
42
+ })
43
+
44
+ it('Should attach listeners', () => {
45
+ const onclick = jest.fn()
46
+ const component = <div onclick={onclick}></div>
47
+ expect(component.onclick).toBe(onclick)
48
+ })
8
49
  })
9
50
 
10
- it('Should create a nested component', () => {
11
- const component = (
12
- <div style={{ display: 'flex' }}>
13
- <h1>Hi, I'm a header</h1>
14
- <p>paragraph... {['a', 'b', 'c']}</p>
15
- <a target="_blank" href="https://google.com">
16
- link
17
- </a>
18
- </div>
19
- )
20
- expect(component)
51
+ describe('Shade components', () => {
52
+ it('Should render a basic component', () => {
53
+ const Example = Shade({ render: () => <div /> })
54
+
55
+ const component = (
56
+ <div>
57
+ <Example />
58
+ </div>
59
+ )
60
+
61
+ const shade = component.firstElementChild as JSX.Element
62
+ expect(shade.props.getValue()).toBe(null)
63
+ expect(shade.state.getValue()).toBe(undefined)
64
+ expect(shade.shadeChildren.getValue()).toStrictEqual([])
65
+ })
66
+
67
+ it('Should render a component with props', () => {
68
+ const Example = Shade<{ foo: string; injector: Injector }>({ render: ({ props }) => <div>{props.foo}</div> })
69
+
70
+ const component = (
71
+ <div>
72
+ <Example foo="example" injector={new Injector()} />
73
+ </div>
74
+ )
75
+
76
+ const shade = component.firstElementChild as JSX.Element
77
+
78
+ shade.callConstructed()
79
+
80
+ expect(shade.props.getValue().foo).toStrictEqual('example')
81
+ expect(shade.state.getValue()).toBe(undefined)
82
+ expect(shade.shadeChildren.getValue()).toStrictEqual([])
83
+
84
+ expect(shade.innerHTML).toBe('<div>example</div>')
85
+ })
86
+
87
+ it('Should render a component with state', () => {
88
+ const Example = Shade<unknown, { foo: string }>({
89
+ getInitialState: () => ({ foo: 'example' }),
90
+ render: () => <div />,
91
+ })
92
+
93
+ const component = (
94
+ <div>
95
+ <Example injector={new Injector()} />
96
+ </div>
97
+ )
98
+
99
+ const shade = component.firstElementChild as JSX.Element
100
+ shade.callConstructed()
101
+ expect(shade.state.getValue()).toStrictEqual({ foo: 'example' })
102
+ expect(shade.shadeChildren.getValue()).toStrictEqual([])
103
+ })
21
104
  })
22
105
  })