@furystack/shades 5.0.2 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"route-link.js","sourceRoot":"","sources":["../../src/components/route-link.tsx"],"names":[],"mappings":";;;AAAA,oCAAgC;AAEhC,0CAA6C;AAC7C,0BAAoC;AAEvB,QAAA,SAAS,GAAG,IAAA,aAAK,EAAoC;IAChE,aAAa,EAAE,YAAY;IAC3B,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxC,OAAO,CACL,mCACM,KAAK,EACT,OAAO,EAAE,CAAC,EAAc,EAAE,EAAE;gBAC1B,EAAE,CAAC,cAAc,EAAE,CAAA;gBACnB,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;gBACpD,QAAQ,CAAC,WAAW,CAAC,0BAAe,CAAC,CAAC,WAAW,EAAE,CAAA;YACrD,CAAC,IAEA,QAAQ,CACP,CACL,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"route-link.js","sourceRoot":"","sources":["../../src/components/route-link.tsx"],"names":[],"mappings":";;;AAAA,oCAAgC;AAEhC,0CAA6C;AAC7C,0BAAoC;AAIvB,QAAA,SAAS,GAAG,IAAA,aAAK,EAAiB;IAC7C,aAAa,EAAE,YAAY;IAC3B,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE;QACxC,OAAO,CACL,mCACM,KAAK,EACT,OAAO,EAAE,CAAC,EAAc,EAAE,EAAE;gBAC1B,EAAE,CAAC,cAAc,EAAE,CAAA;gBACnB,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;gBACpD,QAAQ,CAAC,WAAW,CAAC,0BAAe,CAAC,CAAC,WAAW,EAAE,CAAA;YACrD,CAAC,IAEA,QAAQ,CACP,CACL,CAAA;IACH,CAAC;CACF,CAAC,CAAA"}
@@ -41,7 +41,7 @@ exports.Router = (0, shade_1.Shade)({
41
41
  updateState({ jsx: (_c = props.notFound) === null || _c === void 0 ? void 0 : _c.call(props, currentUrl), activeRoute: undefined });
42
42
  }
43
43
  catch (e) {
44
- // as path updates can be async, this can be safely ignored
44
+ // path updates can be async, this can be ignored
45
45
  if (!(e instanceof utils_1.ObservableAlreadyDisposedError)) {
46
46
  throw e;
47
47
  }
@@ -1 +1 @@
1
- {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/components/router.tsx"],"names":[],"mappings":";;;;AAAA,oCAAgC;AAChC,wDAAoD;AACpD,0CAA6C;AAC7C,mDAA0E;AAE1E,0FAA6C;AAC7C,4CAAiE;AAsBpD,QAAA,MAAM,GAAG,IAAA,aAAK,EAA2B;IACpD,aAAa,EAAE,cAAc;IAC7B,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;QACtB,IAAI,EAAE,IAAI,+BAAS,CAAC,CAAC,CAAC;KACvB,CAAC;IACF,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC5E,QAAQ,CAAC,WAAW,CAAC,0BAAe,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;;YACrF,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAA;YAClF,IAAI;gBACF,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;gBACpB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;oBAChC,MAAM,OAAO,GAAG,IAAA,sBAAK,EAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;oBACtD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;oBACvC,IAAI,WAAW,EAAE;wBACf,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;4BAC5F,MAAM,CAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,0DAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA,CAAA;4BACzF,WAAW,CAAC;gCACV,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;gCACxD,WAAW,EAAE,KAAK;gCAClB,iBAAiB,EAAE,WAAW,CAAC,MAAM;6BACtC,CAAC,CAAA;4BACF,MAAM,CAAA,MAAA,KAAK,CAAC,OAAO,sDAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA,CAAA;yBACrF;wBACD,OAAM;qBACP;iBACF;gBACD,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,EAAE;oBACtB,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;iBACvF;gBACD,WAAW,CAAC,EAAE,GAAG,EAAE,MAAA,KAAK,CAAC,QAAQ,sDAAG,UAAU,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;aAC3E;YAAC,OAAO,CAAC,EAAE;gBACV,2DAA2D;gBAC3D,IAAI,CAAC,CAAC,CAAC,YAAY,sCAA8B,CAAC,EAAE;oBAClD,MAAM,CAAC,CAAA;iBACR;aACF;oBAAS;gBACR,IAAI,CAAC,OAAO,EAAE,CAAA;aACf;QACH,CAAC,EAAE,IAAI,CAAC;KACT;IACD,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACvB,MAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAA;QAC1B,IAAI,GAAG,EAAE;YACP,OAAO,GAAG,CAAA;SACX;QACD,OAAO,mDAAW,CAAA;IACpB,CAAC;CACF,CAAC,CAAA"}
1
+ {"version":3,"file":"router.js","sourceRoot":"","sources":["../../src/components/router.tsx"],"names":[],"mappings":";;;;AAAA,oCAAgC;AAChC,wDAAoD;AACpD,0CAA6C;AAC7C,mDAA0E;AAE1E,0FAA6C;AAC7C,4CAAiE;AAsBpD,QAAA,MAAM,GAAG,IAAA,aAAK,EAA2B;IACpD,aAAa,EAAE,cAAc;IAC7B,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;QACtB,IAAI,EAAE,IAAI,+BAAS,CAAC,CAAC,CAAC;KACvB,CAAC;IACF,SAAS,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;QAC5E,QAAQ,CAAC,WAAW,CAAC,0BAAe,CAAC,CAAC,iBAAiB,CAAC,SAAS,CAAC,KAAK,EAAE,UAAU,EAAE,EAAE;;YACrF,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,iBAAiB,EAAE,UAAU,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAA;YAClF,IAAI;gBACF,MAAM,IAAI,CAAC,OAAO,EAAE,CAAA;gBACpB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,MAAM,EAAE;oBAChC,MAAM,OAAO,GAAG,IAAA,sBAAK,EAAC,KAAK,CAAC,GAAG,EAAE,KAAK,CAAC,cAAc,CAAC,CAAA;oBACtD,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAAA;oBACvC,IAAI,WAAW,EAAE;wBACf,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE;4BAC5F,MAAM,CAAA,MAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,0DAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA,CAAA;4BACzF,WAAW,CAAC;gCACV,GAAG,EAAE,KAAK,CAAC,SAAS,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;gCACxD,WAAW,EAAE,KAAK;gCAClB,iBAAiB,EAAE,WAAW,CAAC,MAAM;6BACtC,CAAC,CAAA;4BACF,MAAM,CAAA,MAAA,KAAK,CAAC,OAAO,sDAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA,CAAA;yBACrF;wBACD,OAAM;qBACP;iBACF;gBACD,IAAI,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,OAAO,EAAE;oBACtB,MAAM,SAAS,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAA;iBACvF;gBACD,WAAW,CAAC,EAAE,GAAG,EAAE,MAAA,KAAK,CAAC,QAAQ,sDAAG,UAAU,CAAC,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAA;aAC3E;YAAC,OAAO,CAAC,EAAE;gBACV,iDAAiD;gBACjD,IAAI,CAAC,CAAC,CAAC,YAAY,sCAA8B,CAAC,EAAE;oBAClD,MAAM,CAAC,CAAA;iBACR;aACF;oBAAS;gBACR,IAAI,CAAC,OAAO,EAAE,CAAA;aACf;QACH,CAAC,EAAE,IAAI,CAAC;KACT;IACD,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;QACvB,MAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAA;QAC1B,IAAI,GAAG,EAAE;YACP,OAAO,GAAG,CAAA;SACX;QACD,OAAO,mDAAW,CAAA;IACpB,CAAC;CACF,CAAC,CAAA"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.createComponent = exports.attachDataAttributes = exports.attachStyles = exports.hasStyle = exports.appendChild = void 0;
3
+ exports.createFragment = exports.createComponent = exports.attachDataAttributes = exports.attachStyles = exports.hasStyle = exports.appendChild = void 0;
4
4
  const models_1 = require("./models");
5
5
  /**
6
6
  * Appends a list of items to a HTML element
@@ -77,4 +77,10 @@ const createComponent = (elementType, props, ...children) => {
77
77
  }
78
78
  };
79
79
  exports.createComponent = createComponent;
80
+ const createFragment = (_props, ...children) => {
81
+ const fragment = document.createDocumentFragment();
82
+ fragment.append(...children[0].flat());
83
+ return fragment;
84
+ };
85
+ exports.createFragment = createFragment;
80
86
  //# sourceMappingURL=shade-component.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"shade-component.js","sourceRoot":"","sources":["../src/shade-component.ts"],"names":[],"mappings":";;;AAAA,qCAAyE;AAEzE;;;;;GAKG;AACI,MAAM,WAAW,GAAG,CAAC,EAAe,EAAE,QAAsB,EAAE,EAAE;IACrE,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE;QAC5B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7B,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAA;SAC/C;aAAM;YACL,IAAI,KAAK,YAAY,WAAW,EAAE;gBAChC,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,CAAA;aACtB;iBAAM,IAAI,KAAK,YAAY,KAAK,EAAE;gBACjC,IAAA,mBAAW,EAAC,EAAE,EAAE,KAAK,CAAC,CAAA;aACvB;SACF;KACF;AACH,CAAC,CAAA;AAZY,QAAA,WAAW,eAYvB;AAEM,MAAM,QAAQ,GAAG,CAAC,KAAU,EAAoD,EAAE;IACvF,OAAO,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,MAAK,SAAS,CAAA;AACnC,CAAC,CAAA;AAFY,QAAA,QAAQ,YAEpB;AAED;;;GAGG;AACI,MAAM,YAAY,GAAG,CAAC,EAAe,EAAE,KAAU,EAAE,EAAE;IAC1D,IAAI,IAAA,gBAAQ,EAAC,KAAK,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,KAAK,EAAE;YAC7B,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE;gBAC1D,CAAC;gBAAC,EAAE,CAAC,KAAa,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;aAC3C;SACF;AACL,CAAC,CAAA;AAPY,QAAA,YAAY,gBAOxB;AAEM,MAAM,oBAAoB,GAAG,CAAC,EAAe,EAAE,KAAU,EAAE,EAAE;IAClE,KAAK;QACH,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC;aAClB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;aAC1C,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,YAAY,CAAC,GAAG,EAAG,KAAgB,IAAI,EAAE,CAAC,CAAC,CAAA;AAC/E,CAAC,CAAA;AALY,QAAA,oBAAoB,wBAKhC;AAED;;;;;;;GAOG;AACI,MAAM,eAAe,GAAG,CAC7B,WAA4C,EAC5C,KAAa,EACb,GAAG,QAAsB,EACzB,EAAE;IACF,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE;QACnC,MAAM,EAAE,GAAG,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAA;QAC9C,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAExB,IAAI,KAAK,IAAK,KAAa,CAAC,KAAK,EAAE;YACjC,IAAA,oBAAY,EAAC,EAAE,EAAE,KAAK,CAAC,CAAA;SACxB;QACD,IAAA,4BAAoB,EAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QAC/B,IAAI,QAAQ,EAAE;YACZ,IAAA,mBAAW,EAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;SAC1B;QACD,OAAO,EAAE,CAAA;KACV;SAAM,IAAI,IAAA,yBAAgB,EAAC,WAAW,CAAC,EAAE;QACxC,MAAM,EAAE,GAAI,WAAsC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QACnE,IAAA,oBAAY,EAAC,EAAE,EAAE,KAAK,CAAC,CAAA;QACvB,OAAO,EAAE,CAAA;KACV;AACH,CAAC,CAAA;AAtBY,QAAA,eAAe,mBAsB3B"}
1
+ {"version":3,"file":"shade-component.js","sourceRoot":"","sources":["../src/shade-component.ts"],"names":[],"mappings":"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"}
package/dist/shade.js CHANGED
@@ -17,6 +17,9 @@ const Shade = (o) => {
17
17
  customElements.define(customElementName, class extends HTMLElement {
18
18
  constructor(_props) {
19
19
  super();
20
+ this.compareState = o.compareState ||
21
+ ((oldState, newState) => Object.entries(oldState).some(([key, value]) => value !== newState[key]) ||
22
+ Object.entries(newState).some(([key, value]) => value !== oldState[key]));
20
23
  /**
21
24
  * Will be updated when on children change
22
25
  */
@@ -35,7 +38,7 @@ const Shade = (o) => {
35
38
  const updateState = (stateChanges, skipRender) => {
36
39
  const currentState = this.state.getValue();
37
40
  const newState = { ...currentState, ...stateChanges };
38
- if (JSON.stringify(currentState) !== JSON.stringify(newState)) {
41
+ if (this.compareState(currentState, newState)) {
39
42
  this.state.setValue(newState);
40
43
  !skipRender && this.updateComponent();
41
44
  }
@@ -61,11 +64,11 @@ const Shade = (o) => {
61
64
  }
62
65
  disconnectedCallback() {
63
66
  o.onDetach && o.onDetach(this.getRenderOptions());
67
+ Object.values(this.resources).forEach((s) => s.dispose());
68
+ this.cleanup && this.cleanup();
69
+ this.shadeChildren.dispose();
64
70
  this.props.dispose();
65
71
  this.state.dispose();
66
- this.shadeChildren.dispose();
67
- this.cleanup && this.cleanup();
68
- Object.values(this.resources).forEach((s) => s.dispose());
69
72
  }
70
73
  createResources() {
71
74
  var _a;
@@ -75,18 +78,29 @@ const Shade = (o) => {
75
78
  * Updates the component in the DOM.
76
79
  */
77
80
  updateComponent() {
78
- const newJsx = this.render(this.getRenderOptions());
79
- if (this.hasChildNodes()) {
80
- this.replaceChild(newJsx, this.firstChild);
81
+ const renderResult = this.render(this.getRenderOptions());
82
+ if (typeof renderResult === 'string') {
83
+ this.innerHTML = renderResult;
81
84
  }
82
- else {
83
- this.append(newJsx);
85
+ if (renderResult instanceof DocumentFragment) {
86
+ this.replaceChildren(...renderResult.children);
87
+ }
88
+ if (renderResult instanceof HTMLElement) {
89
+ if (this.hasChildNodes()) {
90
+ this.replaceChild(renderResult, this.firstChild);
91
+ }
92
+ else {
93
+ this.append(renderResult);
94
+ }
84
95
  }
85
96
  }
86
97
  /**
87
98
  * Finialize the component initialization after it gets the Props. Called by the framework internally
88
99
  */
89
100
  callConstructed() {
101
+ if (this.props.isDisposed) {
102
+ return;
103
+ }
90
104
  ;
91
105
  o.getInitialState &&
92
106
  this.state.setValue(o.getInitialState({ props: this.props.getValue(), injector: this.injector }));
@@ -128,7 +142,8 @@ const Shade = (o) => {
128
142
  this._injector = fromParent;
129
143
  return fromParent;
130
144
  }
131
- throw Error('Injector not set explicitly and not found on parents!');
145
+ // Injector not set explicitly and not found on parents!
146
+ return new inject_1.Injector();
132
147
  }
133
148
  set injector(i) {
134
149
  this._injector = i;
package/dist/shade.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"shade.js","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shade.js","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@furystack/shades",
3
- "version": "5.0.2",
3
+ "version": "6.0.0",
4
4
  "description": "Google Authentication Provider for FuryStack",
5
5
  "main": "dist/index.js",
6
6
  "files": [
@@ -29,16 +29,16 @@
29
29
  },
30
30
  "homepage": "https://github.com/furystack/furystack",
31
31
  "devDependencies": {
32
- "@types/jest": "^27.5.0",
32
+ "@types/jest": "^27.5.2",
33
33
  "@types/jsdom": "^16.2.14",
34
- "@types/node": "^17.0.31",
35
- "jsdom": "^19.0.0"
34
+ "@types/node": "^18.0.0",
35
+ "jsdom": "^20.0.0"
36
36
  },
37
37
  "dependencies": {
38
- "@furystack/core": "^11.0.2",
39
- "@furystack/inject": "^6.0.2",
40
- "@furystack/utils": "^3.0.2",
41
- "path-to-regexp": "^6.2.0",
38
+ "@furystack/core": "^11.0.4",
39
+ "@furystack/inject": "^7.0.0",
40
+ "@furystack/utils": "^3.0.4",
41
+ "path-to-regexp": "^6.2.1",
42
42
  "semaphore-async-await": "^1.5.1",
43
43
  "tslib": "^2.4.0"
44
44
  },
@@ -3,7 +3,9 @@ import { PartialElement } from '../models'
3
3
  import { LocationService } from '../services'
4
4
  import { createComponent } from '..'
5
5
 
6
- export const RouteLink = Shade<PartialElement<HTMLAnchorElement>>({
6
+ export type RouteLinkProps = PartialElement<HTMLAnchorElement>
7
+
8
+ export const RouteLink = Shade<RouteLinkProps>({
7
9
  shadowDomName: 'route-link',
8
10
  render: ({ children, props, injector }) => {
9
11
  return (
@@ -57,7 +57,7 @@ export const Router = Shade<RouterProps, RouterState>({
57
57
  }
58
58
  updateState({ jsx: props.notFound?.(currentUrl), activeRoute: undefined })
59
59
  } catch (e) {
60
- // as path updates can be async, this can be safely ignored
60
+ // path updates can be async, this can be ignored
61
61
  if (!(e instanceof ObservableAlreadyDisposedError)) {
62
62
  throw e
63
63
  }
@@ -75,3 +75,9 @@ export const createComponent = <TProps>(
75
75
  return el
76
76
  }
77
77
  }
78
+
79
+ export const createFragment = (_props: any, ...children: [[ShadeComponent[]]]) => {
80
+ const fragment = document.createDocumentFragment()
81
+ fragment.append(...(children[0].flat() as any))
82
+ return fragment
83
+ }
package/src/shade.ts CHANGED
@@ -7,10 +7,11 @@ export type ShadeOptions<TProps, TState> = {
7
7
  * Explicit shadow dom name. Will fall back to 'shade-{guid}' if not provided
8
8
  */
9
9
  shadowDomName: string
10
+
10
11
  /**
11
12
  * Render hook, this method will be executed on each and every render.
12
13
  */
13
- render: (options: RenderOptions<TProps, TState>) => JSX.Element
14
+ render: (options: RenderOptions<TProps, TState>) => JSX.Element | string | null
14
15
 
15
16
  /**
16
17
  * Construct hook. Will be executed once when the element has been constructed and initialized
@@ -29,7 +30,15 @@ export type ShadeOptions<TProps, TState> = {
29
30
  */
30
31
  onDetach?: (options: RenderOptions<TProps, TState>) => void
31
32
 
33
+ /**
34
+ * A factory method that creates a list of disposable resources that will be disposed when the element is detached.
35
+ */
32
36
  resources?: (options: RenderOptions<TProps, TState>) => Disposable[]
37
+
38
+ /**
39
+ * An optional method that checks the state for changes and returns true if the element should be rerendered.
40
+ */
41
+ compareState?: (oldState: TState, newState: TState) => boolean
33
42
  } & (unknown extends TState
34
43
  ? {}
35
44
  : {
@@ -54,6 +63,12 @@ export const Shade = <TProps, TState = unknown>(o: ShadeOptions<TProps, TState>)
54
63
  customElements.define(
55
64
  customElementName,
56
65
  class extends HTMLElement implements JSX.Element {
66
+ private compareState =
67
+ o.compareState ||
68
+ ((oldState: TState, newState: TState) =>
69
+ Object.entries(oldState).some(([key, value]) => value !== newState[key as keyof TState]) ||
70
+ Object.entries(newState).some(([key, value]) => value !== oldState[key as keyof TState]))
71
+
57
72
  public connectedCallback() {
58
73
  o.onAttach && o.onAttach(this.getRenderOptions())
59
74
  this.callConstructed()
@@ -61,11 +76,11 @@ export const Shade = <TProps, TState = unknown>(o: ShadeOptions<TProps, TState>)
61
76
 
62
77
  public disconnectedCallback() {
63
78
  o.onDetach && o.onDetach(this.getRenderOptions())
79
+ Object.values(this.resources).forEach((s) => s.dispose())
80
+ this.cleanup && this.cleanup()
81
+ this.shadeChildren.dispose()
64
82
  this.props.dispose()
65
83
  this.state.dispose()
66
- this.shadeChildren.dispose()
67
- this.cleanup && this.cleanup()
68
- Object.values(this.resources).forEach((s) => s.dispose())
69
84
  }
70
85
 
71
86
  /**
@@ -98,7 +113,7 @@ export const Shade = <TProps, TState = unknown>(o: ShadeOptions<TProps, TState>)
98
113
  const updateState = (stateChanges: PartialElement<TState>, skipRender?: boolean) => {
99
114
  const currentState = this.state.getValue()
100
115
  const newState = { ...currentState, ...stateChanges }
101
- if (JSON.stringify(currentState) !== JSON.stringify(newState)) {
116
+ if (this.compareState(currentState, newState)) {
102
117
  this.state.setValue(newState)
103
118
  !skipRender && this.updateComponent()
104
119
  }
@@ -124,11 +139,22 @@ export const Shade = <TProps, TState = unknown>(o: ShadeOptions<TProps, TState>)
124
139
  * Updates the component in the DOM.
125
140
  */
126
141
  public updateComponent() {
127
- const newJsx = this.render(this.getRenderOptions())
128
- if (this.hasChildNodes()) {
129
- this.replaceChild(newJsx, this.firstChild as Node)
130
- } else {
131
- this.append(newJsx)
142
+ const renderResult = this.render(this.getRenderOptions())
143
+
144
+ if (typeof renderResult === 'string') {
145
+ this.innerHTML = renderResult
146
+ }
147
+
148
+ if (renderResult instanceof DocumentFragment) {
149
+ this.replaceChildren(...renderResult.children)
150
+ }
151
+
152
+ if (renderResult instanceof HTMLElement) {
153
+ if (this.hasChildNodes()) {
154
+ this.replaceChild(renderResult, this.firstChild as Node)
155
+ } else {
156
+ this.append(renderResult)
157
+ }
132
158
  }
133
159
  }
134
160
 
@@ -136,6 +162,10 @@ export const Shade = <TProps, TState = unknown>(o: ShadeOptions<TProps, TState>)
136
162
  * Finialize the component initialization after it gets the Props. Called by the framework internally
137
163
  */
138
164
  public callConstructed() {
165
+ if (this.props.isDisposed) {
166
+ return
167
+ }
168
+
139
169
  ;(o as any).getInitialState &&
140
170
  this.state.setValue((o as any).getInitialState({ props: this.props.getValue(), injector: this.injector }))
141
171
 
@@ -184,7 +214,8 @@ export const Shade = <TProps, TState = unknown>(o: ShadeOptions<TProps, TState>)
184
214
  this._injector = fromParent
185
215
  return fromParent
186
216
  }
187
- throw Error('Injector not set explicitly and not found on parents!')
217
+ // Injector not set explicitly and not found on parents!
218
+ return new Injector()
188
219
  }
189
220
 
190
221
  public set injector(i: Injector) {
@@ -1,3 +1,4 @@
1
1
  import { PartialElement } from '../models';
2
- export declare const RouteLink: (props: PartialElement<HTMLAnchorElement>, children: import("..").ChildrenList) => JSX.Element<any, any>;
2
+ export declare type RouteLinkProps = PartialElement<HTMLAnchorElement>;
3
+ export declare const RouteLink: (props: RouteLinkProps, children: import("..").ChildrenList) => JSX.Element<any, any>;
3
4
  //# sourceMappingURL=route-link.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route-link.d.ts","sourceRoot":"","sources":["../../src/components/route-link.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAI1C,eAAO,MAAM,SAAS,0GAgBpB,CAAA"}
1
+ {"version":3,"file":"route-link.d.ts","sourceRoot":"","sources":["../../src/components/route-link.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAI1C,oBAAY,cAAc,GAAG,cAAc,CAAC,iBAAiB,CAAC,CAAA;AAE9D,eAAO,MAAM,SAAS,uFAgBpB,CAAA"}
@@ -24,4 +24,5 @@ export declare const attachDataAttributes: (el: HTMLElement, props: any) => void
24
24
  * @returns the created JSX element
25
25
  */
26
26
  export declare const createComponent: <TProps>(elementType: string | ShadeComponent<TProps>, props: TProps, ...children: ChildrenList) => HTMLElement | undefined;
27
+ export declare const createFragment: (_props: any, children_0: [ShadeComponent<{}>[]]) => DocumentFragment;
27
28
  //# sourceMappingURL=shade-component.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shade-component.d.ts","sourceRoot":"","sources":["../src/shade-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAoB,MAAM,UAAU,CAAA;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,WAAW,OAAQ,WAAW,iCAY1C,CAAA;AAED,eAAO,MAAM,QAAQ,UAAW,GAAG;WAAqB,QAAQ,mBAAmB,CAAC;CAEnF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,OAAQ,WAAW,SAAS,GAAG,SAOvD,CAAA;AAED,eAAO,MAAM,oBAAoB,OAAQ,WAAW,SAAS,GAAG,SAK/D,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,6HAsB3B,CAAA"}
1
+ {"version":3,"file":"shade-component.d.ts","sourceRoot":"","sources":["../src/shade-component.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,cAAc,EAAoB,MAAM,UAAU,CAAA;AAEzE;;;;;GAKG;AACH,eAAO,MAAM,WAAW,OAAQ,WAAW,iCAY1C,CAAA;AAED,eAAO,MAAM,QAAQ,UAAW,GAAG;WAAqB,QAAQ,mBAAmB,CAAC;CAEnF,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,OAAQ,WAAW,SAAS,GAAG,SAOvD,CAAA;AAED,eAAO,MAAM,oBAAoB,OAAQ,WAAW,SAAS,GAAG,SAK/D,CAAA;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,6HAsB3B,CAAA;AAED,eAAO,MAAM,cAAc,WAAY,GAAG,yDAIzC,CAAA"}
package/types/shade.d.ts CHANGED
@@ -9,7 +9,7 @@ export declare type ShadeOptions<TProps, TState> = {
9
9
  /**
10
10
  * Render hook, this method will be executed on each and every render.
11
11
  */
12
- render: (options: RenderOptions<TProps, TState>) => JSX.Element;
12
+ render: (options: RenderOptions<TProps, TState>) => JSX.Element | string | null;
13
13
  /**
14
14
  * Construct hook. Will be executed once when the element has been constructed and initialized
15
15
  */
@@ -22,7 +22,14 @@ export declare type ShadeOptions<TProps, TState> = {
22
22
  * Will be executed when the element is detached from the DOM.
23
23
  */
24
24
  onDetach?: (options: RenderOptions<TProps, TState>) => void;
25
+ /**
26
+ * A factory method that creates a list of disposable resources that will be disposed when the element is detached.
27
+ */
25
28
  resources?: (options: RenderOptions<TProps, TState>) => Disposable[];
29
+ /**
30
+ * An optional method that checks the state for changes and returns true if the element should be rerendered.
31
+ */
32
+ compareState?: (oldState: TState, newState: TState) => boolean;
26
33
  } & (unknown extends TState ? {} : {
27
34
  /**
28
35
  * The initial state of the component
@@ -1 +1 @@
1
- {"version":3,"file":"shade.d.ts","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAC9D,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,EAAE,MAAM,CAAA;IACrB;;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,iIAwKjB,CAAA"}
1
+ {"version":3,"file":"shade.d.ts","sourceRoot":"","sources":["../src/shade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAA;AAC9D,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,EAAE,MAAM,CAAA;IAErB;;OAEG;IACH,MAAM,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,GAAG,CAAC,OAAO,GAAG,MAAM,GAAG,IAAI,CAAA;IAE/E;;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;;OAEG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,UAAU,EAAE,CAAA;IAEpE;;OAEG;IACH,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAA;CAC/D,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,iIA8LjB,CAAA"}