@mantou/gem 1.7.5 → 1.7.7

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 (45) hide show
  1. package/dist/gem.es.js +59 -50
  2. package/dist/gem.umd.js +23 -23
  3. package/elements/base/modal-factory.d.ts +2 -1
  4. package/elements/base/modal-factory.d.ts.map +1 -1
  5. package/elements/base/route.d.ts +1 -1
  6. package/elements/base/route.d.ts.map +1 -1
  7. package/elements/base/title.d.ts +3 -1
  8. package/elements/base/title.d.ts.map +1 -1
  9. package/elements/base/title.js +15 -16
  10. package/elements/base/title.js.map +1 -1
  11. package/helper/theme.d.ts +3 -0
  12. package/helper/theme.d.ts.map +1 -1
  13. package/helper/theme.js +6 -0
  14. package/helper/theme.js.map +1 -1
  15. package/lib/element.d.ts +1 -1
  16. package/lib/element.d.ts.map +1 -1
  17. package/lib/element.js +16 -18
  18. package/lib/element.js.map +1 -1
  19. package/lib/history.d.ts.map +1 -1
  20. package/lib/history.js +18 -13
  21. package/lib/history.js.map +1 -1
  22. package/lib/store.d.ts +2 -9
  23. package/lib/store.d.ts.map +1 -1
  24. package/lib/store.js +7 -9
  25. package/lib/store.js.map +1 -1
  26. package/lib/utils.d.ts +21 -4
  27. package/lib/utils.d.ts.map +1 -1
  28. package/lib/utils.js +87 -1
  29. package/lib/utils.js.map +1 -1
  30. package/lib/version.d.ts +1 -1
  31. package/lib/version.js +1 -1
  32. package/package.json +11 -7
  33. package/src/elements/base/route.ts +1 -1
  34. package/src/elements/base/title.ts +14 -11
  35. package/src/helper/theme.ts +7 -0
  36. package/src/lib/element.ts +10 -10
  37. package/src/lib/history.ts +18 -13
  38. package/src/lib/store.ts +7 -17
  39. package/src/lib/utils.ts +102 -5
  40. package/src/lib/version.ts +1 -1
  41. package/src/test/gem-element/advance.test.ts +12 -1
  42. package/src/test/gem-element/decorators.test.ts +17 -21
  43. package/src/test/gem-element/multi.test.ts +8 -5
  44. package/src/test/store.test.ts +1 -3
  45. package/src/test/utils.test.ts +24 -0
package/dist/gem.es.js CHANGED
@@ -1133,7 +1133,7 @@ function styleMap(object) {
1133
1133
  return objectMapToString(
1134
1134
  object,
1135
1135
  ";",
1136
- (key2, value) => value !== void 0 ? `${camelToKebabCase(key2)}:${value}` : ""
1136
+ (key2, value) => value !== void 0 && value !== null ? `${camelToKebabCase(key2)}:${value}` : ""
1137
1137
  );
1138
1138
  }
1139
1139
  function classMap(object) {
@@ -1155,29 +1155,27 @@ function createStore(originStore) {
1155
1155
  StoreListenerMap.set(originStore, /* @__PURE__ */ new Set());
1156
1156
  return originStore;
1157
1157
  }
1158
- function createStoreSet(originStoreSet) {
1159
- const keys = Object.keys(originStoreSet);
1160
- keys.forEach((key2) => {
1161
- createStore(originStoreSet[key2]);
1162
- });
1163
- return originStoreSet;
1164
- }
1165
1158
  function updateStore(store2, value) {
1159
+ var _a2;
1166
1160
  Object.assign(store2, value);
1167
- const listeners = StoreListenerMap.get(store2);
1168
- listeners == null ? void 0 : listeners.forEach((func) => {
1161
+ (_a2 = StoreListenerMap.get(store2)) == null ? void 0 : _a2.forEach((func) => {
1169
1162
  addMicrotask(func);
1170
1163
  });
1171
1164
  }
1165
+ function useStore(originStore) {
1166
+ const store2 = createStore(originStore);
1167
+ return [store2, (value) => updateStore(store2, value)];
1168
+ }
1172
1169
  function connect(store2, func) {
1173
1170
  const listeners = StoreListenerMap.get(store2);
1174
1171
  listeners == null ? void 0 : listeners.add(func);
1172
+ return () => listeners == null ? void 0 : listeners.delete(func);
1175
1173
  }
1176
1174
  function disconnect(store2, func) {
1177
1175
  const listeners = StoreListenerMap.get(store2);
1178
1176
  listeners == null ? void 0 : listeners.delete(func);
1179
1177
  }
1180
- const version = "1.7.5";
1178
+ const version = "1.7.7";
1181
1179
  var VersionExports = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
1182
1180
  __proto__: null,
1183
1181
  version
@@ -1392,7 +1390,7 @@ var __privateSet$1 = (obj, member, value, setter) => {
1392
1390
  setter ? setter.call(obj, value) : member.set(obj, value);
1393
1391
  return value;
1394
1392
  };
1395
- var _final, _renderRoot, _internals, _isAppendReason, _isMounted, _isAsync, _effectList, _memoList, _unmountCallback, _exec, _execEffect, _execMemo, _initEffect, _render, _shouldUpdate, _updateCallback, _update, _updated, _connectedCallback, _filterEffect;
1393
+ var _final, _renderRoot, _internals, _isAppendReason, _isMounted, _isAsync, _effectList, _memoList, _unmountCallback, _exec, _execEffect, _execMemo, _initEffect, _render, _shouldUpdate, _updateCallback, _update, _updated, _disconnectStore, _connectedCallback, _filterEffect;
1396
1394
  function emptyFunction() {
1397
1395
  }
1398
1396
  function execCallback(fun) {
@@ -1512,6 +1510,7 @@ const _GemElement = class extends HTMLElement {
1512
1510
  var _a2;
1513
1511
  (_a2 = this.updated) == null ? void 0 : _a2.call(this);
1514
1512
  });
1513
+ __privateAdd$1(this, _disconnectStore, void 0);
1515
1514
  __privateAdd$1(this, _connectedCallback, () => {
1516
1515
  var _a2, _b2, _c;
1517
1516
  if (__privateGet$1(this, _isAppendReason)) {
@@ -1521,15 +1520,13 @@ const _GemElement = class extends HTMLElement {
1521
1520
  Reflect.set(this, constructorSymbol, false);
1522
1521
  (_a2 = this.willMount) == null ? void 0 : _a2.call(this);
1523
1522
  const { observedStores, rootElement: rootElement2 } = this.constructor;
1524
- observedStores == null ? void 0 : observedStores.forEach((store2) => {
1525
- connect(store2, __privateGet$1(this, _update));
1526
- });
1523
+ __privateSet$1(this, _disconnectStore, observedStores == null ? void 0 : observedStores.map((store2) => connect(store2, __privateGet$1(this, _update))));
1527
1524
  const temp = __privateGet$1(this, _render).call(this);
1528
1525
  temp !== void 0 && render(temp, __privateGet$1(this, _renderRoot));
1529
1526
  __privateSet$1(this, _isMounted, true);
1530
1527
  __privateSet$1(this, _unmountCallback, (_b2 = this.mounted) == null ? void 0 : _b2.call(this));
1531
1528
  __privateGet$1(this, _initEffect).call(this);
1532
- if (rootElement2 && ((_c = this.getRootNode().host) == null ? void 0 : _c.tagName) !== rootElement2.toUpperCase()) {
1529
+ if (rootElement2 && this.isConnected && ((_c = this.getRootNode().host) == null ? void 0 : _c.tagName) !== rootElement2.toUpperCase()) {
1533
1530
  throw new GemError(`not allow current root type`);
1534
1531
  }
1535
1532
  });
@@ -1609,7 +1606,7 @@ const _GemElement = class extends HTMLElement {
1609
1606
  return getRootElement(this);
1610
1607
  }
1611
1608
  connectedCallback() {
1612
- if (__privateGet$1(this, _isAsync)) {
1609
+ if (this.isConnected && __privateGet$1(this, _isAsync)) {
1613
1610
  asyncRenderTaskList.add(__privateGet$1(this, _connectedCallback));
1614
1611
  } else {
1615
1612
  __privateGet$1(this, _connectedCallback).call(this);
@@ -1620,21 +1617,18 @@ const _GemElement = class extends HTMLElement {
1620
1617
  return __privateGet$1(_GemElement, _final);
1621
1618
  }
1622
1619
  disconnectedCallback() {
1623
- var _a2, _b2, _c, _d;
1620
+ var _a2, _b2, _c, _d, _e;
1624
1621
  if (this.isConnected) {
1625
1622
  __privateSet$1(this, _isAppendReason, true);
1626
1623
  return;
1627
1624
  }
1628
1625
  __privateSet$1(this, _isMounted, false);
1629
- const { observedStores } = this.constructor;
1630
- observedStores == null ? void 0 : observedStores.forEach((store2) => {
1631
- disconnect(store2, __privateGet$1(this, _update));
1632
- });
1626
+ (_a2 = __privateGet$1(this, _disconnectStore)) == null ? void 0 : _a2.forEach((disconnect2) => disconnect2());
1633
1627
  execCallback(__privateGet$1(this, _unmountCallback));
1634
- (_a2 = this.unmounted) == null ? void 0 : _a2.call(this);
1635
- (_b2 = __privateGet$1(this, _effectList)) == null ? void 0 : _b2.forEach(({ preCallback }) => execCallback(preCallback));
1636
- __privateSet$1(this, _effectList, (_c = __privateGet$1(this, _effectList)) == null ? void 0 : _c.filter(__privateGet$1(this, _filterEffect)));
1637
- __privateSet$1(this, _memoList, (_d = __privateGet$1(this, _memoList)) == null ? void 0 : _d.filter(__privateGet$1(this, _filterEffect)));
1628
+ (_b2 = this.unmounted) == null ? void 0 : _b2.call(this);
1629
+ (_c = __privateGet$1(this, _effectList)) == null ? void 0 : _c.forEach(({ preCallback }) => execCallback(preCallback));
1630
+ __privateSet$1(this, _effectList, (_d = __privateGet$1(this, _effectList)) == null ? void 0 : _d.filter(__privateGet$1(this, _filterEffect)));
1631
+ __privateSet$1(this, _memoList, (_e = __privateGet$1(this, _memoList)) == null ? void 0 : _e.filter(__privateGet$1(this, _filterEffect)));
1638
1632
  return __privateGet$1(_GemElement, _final);
1639
1633
  }
1640
1634
  };
@@ -1657,6 +1651,7 @@ _shouldUpdate = /* @__PURE__ */ new WeakMap();
1657
1651
  _updateCallback = /* @__PURE__ */ new WeakMap();
1658
1652
  _update = /* @__PURE__ */ new WeakMap();
1659
1653
  _updated = /* @__PURE__ */ new WeakMap();
1654
+ _disconnectStore = /* @__PURE__ */ new WeakMap();
1660
1655
  _connectedCallback = /* @__PURE__ */ new WeakMap();
1661
1656
  _filterEffect = /* @__PURE__ */ new WeakMap();
1662
1657
  __privateAdd$1(GemElement, _final, Symbol());
@@ -1884,7 +1879,7 @@ const nativePushState = nativeHistory.pushState.bind(nativeHistory);
1884
1879
  const nativeReplaceState = nativeHistory.replaceState.bind(nativeHistory);
1885
1880
  let key = 0;
1886
1881
  const getKey = () => `${performance.now()}-${++key}`;
1887
- const store = createStore({
1882
+ const [store, updateHistoryStore] = useStore({
1888
1883
  $hasCloseHandle: false,
1889
1884
  $hasOpenHandle: false,
1890
1885
  $hasShouldCloseHandle: false,
@@ -1931,10 +1926,12 @@ function updateHistory(p, native) {
1931
1926
  $hasOpenHandle: !!open2,
1932
1927
  $hasShouldCloseHandle: !!shouldClose,
1933
1928
  $key: getKey(),
1929
+ $title: title,
1934
1930
  ...data
1935
1931
  };
1936
1932
  paramsMap.set(state2.$key, params);
1937
- updateStore(cleanObject(store), state2);
1933
+ cleanObject(store);
1934
+ updateHistoryStore(state2);
1938
1935
  const url = getUrlBarPath(path) + new QueryString(query) + hash;
1939
1936
  const prevHash = decodeURIComponent(location.hash);
1940
1937
  native(state2, title, url);
@@ -1945,19 +1942,21 @@ function updateHistoryByNative(data, title, originUrl, native) {
1945
1942
  validData(data);
1946
1943
  const state2 = {
1947
1944
  $key: getKey(),
1945
+ $title: title,
1948
1946
  ...data || {}
1949
1947
  };
1950
1948
  const { pathname, search, hash } = new URL(originUrl, location.origin + location.pathname);
1951
1949
  const params = normalizeParams({ path: pathname, query: new QueryString(search), hash, title, data });
1952
1950
  paramsMap.set(state2.$key, params);
1953
- updateStore(cleanObject(store), state2);
1951
+ cleanObject(store);
1952
+ updateHistoryStore(state2);
1954
1953
  const url = getUrlBarPath(pathname) + params.query + hash;
1955
1954
  const prevHash = location.hash;
1956
1955
  native(state2, title, url);
1957
1956
  if (prevHash !== hash)
1958
1957
  window.dispatchEvent(new CustomEvent("hashchange"));
1959
1958
  }
1960
- const gemBasePathStore = createStore({
1959
+ const [gemBasePathStore, updateBasePathStore] = useStore({
1961
1960
  basePath: ""
1962
1961
  });
1963
1962
  class GemHistory {
@@ -1968,7 +1967,7 @@ class GemHistory {
1968
1967
  return gemBasePathStore.basePath;
1969
1968
  }
1970
1969
  set basePath(basePath) {
1971
- updateStore(gemBasePathStore, { basePath });
1970
+ updateBasePathStore({ basePath });
1972
1971
  Object.assign(paramsMap.get(store.$key), { path: getInternalPath(location.pathname) });
1973
1972
  }
1974
1973
  getParams() {
@@ -1976,7 +1975,7 @@ class GemHistory {
1976
1975
  }
1977
1976
  updateParams(params) {
1978
1977
  Object.assign(paramsMap.get(store.$key), params);
1979
- updateStore(store, {});
1978
+ updateHistoryStore();
1980
1979
  }
1981
1980
  push(params) {
1982
1981
  updateHistory(params, nativePushState);
@@ -2001,7 +2000,7 @@ class GemHistory {
2001
2000
  }
2002
2001
  }
2003
2002
  const gemHistory = new GemHistory();
2004
- const gemTitleStore = createStore({ title: "" });
2003
+ const [gemTitleStore, updateTitleStore] = useStore({ title: "" });
2005
2004
  const _GEMHISTORY = { history: gemHistory, titleStore: gemTitleStore, basePathStore: gemBasePathStore };
2006
2005
  if (!window._GEMHISTORY) {
2007
2006
  window._GEMHISTORY = _GEMHISTORY;
@@ -2020,13 +2019,13 @@ if (!window._GEMHISTORY) {
2020
2019
  const { pathname, search, hash } = location;
2021
2020
  gemHistory.replace({ path: pathname, query: search, hash });
2022
2021
  } else if (nativeHistory.state.$hasCloseHandle) {
2023
- updateStore(store, nativeHistory.state);
2022
+ updateHistoryStore(nativeHistory.state);
2024
2023
  const params = normalizeParams({ title: document.title });
2025
2024
  paramsMap.set(store.$key, params);
2026
2025
  gemHistory.back();
2027
2026
  } else {
2028
2027
  const params = normalizeParams({ title: document.title, hash: location.hash });
2029
- updateStore(store, {
2028
+ updateHistoryStore({
2030
2029
  $key: getKey(),
2031
2030
  ...nativeHistory.state || {}
2032
2031
  });
@@ -2041,7 +2040,7 @@ if (!window._GEMHISTORY) {
2041
2040
  connect(store, () => {
2042
2041
  const { title } = gemHistory.getParams();
2043
2042
  if (title !== gemTitleStore.title) {
2044
- updateStore(gemTitleStore, { title });
2043
+ updateTitleStore({ title });
2045
2044
  }
2046
2045
  });
2047
2046
  let navigating = false;
@@ -2061,7 +2060,7 @@ if (!window._GEMHISTORY) {
2061
2060
  path: pathname,
2062
2061
  query: new QueryString(search),
2063
2062
  hash,
2064
- title: document.title,
2063
+ title: newState.$title,
2065
2064
  data: newState
2066
2065
  });
2067
2066
  }
@@ -2087,7 +2086,8 @@ if (!window._GEMHISTORY) {
2087
2086
  }
2088
2087
  }
2089
2088
  }
2090
- updateStore(cleanObject(store), newState);
2089
+ cleanObject(store);
2090
+ updateHistoryStore(newState);
2091
2091
  });
2092
2092
  }
2093
2093
  const { history, titleStore, basePathStore } = window._GEMHISTORY;
@@ -2525,7 +2525,7 @@ var __decorateClass$4 = (decorators, target, key2, kind) => {
2525
2525
  return result;
2526
2526
  };
2527
2527
  const defaultTitle = document.title;
2528
- function updateTitle(str, prefix = "", suffix = "") {
2528
+ function setDocumentTitle(str, prefix = "", suffix = "") {
2529
2529
  const title = titleStore.title || str;
2530
2530
  if (title && title !== defaultTitle) {
2531
2531
  GemTitleElement.title = title;
@@ -2535,11 +2535,18 @@ function updateTitle(str, prefix = "", suffix = "") {
2535
2535
  document.title = GemTitleElement.title;
2536
2536
  }
2537
2537
  }
2538
+ connect(titleStore, setDocumentTitle);
2538
2539
  const PREFIX = `${defaultTitle} | `;
2539
2540
  const SUFFIX = ` - ${defaultTitle}`;
2540
- let GemTitleElement = class extends GemElement {
2541
+ const _GemTitleElement = class extends GemElement {
2541
2542
  constructor() {
2542
2543
  super();
2544
+ this.mounted = () => {
2545
+ this.effect(
2546
+ () => !this.inert && connect(titleStore, this.update),
2547
+ () => [this.inert]
2548
+ );
2549
+ };
2543
2550
  new MutationObserver(() => this.update()).observe(this, {
2544
2551
  characterData: true,
2545
2552
  subtree: true
@@ -2549,13 +2556,12 @@ let GemTitleElement = class extends GemElement {
2549
2556
  updateStore(titleStore, { title });
2550
2557
  }
2551
2558
  render() {
2552
- updateTitle(this.textContent, this.prefix, this.suffix);
2553
- if (this.hidden) {
2554
- return html``;
2555
- }
2556
- return html`${GemTitleElement.title}`;
2559
+ var _a2;
2560
+ setDocumentTitle((_a2 = this.textContent) == null ? void 0 : _a2.trim(), this.prefix, this.suffix);
2561
+ return html`${_GemTitleElement.title}`;
2557
2562
  }
2558
2563
  };
2564
+ let GemTitleElement = _GemTitleElement;
2559
2565
  GemTitleElement.title = document.title;
2560
2566
  GemTitleElement.defaultPrefix = PREFIX;
2561
2567
  GemTitleElement.defaultSuffix = SUFFIX;
@@ -2565,10 +2571,9 @@ __decorateClass$4([
2565
2571
  __decorateClass$4([
2566
2572
  attribute
2567
2573
  ], GemTitleElement.prototype, "suffix", 2);
2568
- GemTitleElement = __decorateClass$4([
2569
- connectStore(titleStore)
2570
- ], GemTitleElement);
2571
- connect(titleStore, updateTitle);
2574
+ __decorateClass$4([
2575
+ boolattribute
2576
+ ], GemTitleElement.prototype, "inert", 2);
2572
2577
  customElements.define("gem-title", GemTitleElement);
2573
2578
  var __defProp$3 = Object.defineProperty;
2574
2579
  var __getOwnPropDesc$3 = Object.getOwnPropertyDescriptor;
@@ -2887,6 +2892,10 @@ function updateTheme(theme, newThemeObj) {
2887
2892
  updateStore(getThemeStore(theme), newThemeObj);
2888
2893
  setThemeFnMap.get(theme)();
2889
2894
  }
2895
+ function useTheme(themeObj) {
2896
+ const theme = createTheme(themeObj);
2897
+ return [theme, (newThemeObj) => updateTheme(theme, newThemeObj)];
2898
+ }
2890
2899
  const splitReg = /\$\d(?:<[^>]*>)?/;
2891
2900
  const matchReg = /\$(\d)(<([^>]*)>)?/g;
2892
2901
  const matchStrIndex = 3;
@@ -3178,4 +3187,4 @@ const mediaQuery = {
3178
3187
  return match(this.WIDTHSCREEN);
3179
3188
  }
3180
3189
  };
3181
- export { GemActiveLinkElement, GemDialogBaseElement, GemElement, GemError, GemLightRouteElement, GemLinkElement, GemReflectElement, GemRouteElement, GemTitleElement, GemUnsafeElement, GemUseElement, I18n, LinkedList, PREFIX, PropProxyMap, QueryString, SUFFIX, SVGTemplateResult, SheetToken, StoreListenerMap, TemplateResult, absoluteLocation, addMicrotask, addMicrotaskToStack, adoptedStyle, attribute, basePathStore, boolattribute, camelToKebabCase, classMap, cleanObject, connect, connectStore, createCSSSheet, createHistoryParams, createModalClass, createPath, createStore, createStoreSet, createTheme, css, customElement, defaultReqInit, defineAttribute, defineCSSState, defineProperty, defineRef, del, directive, disconnect, emitter, exportPartsMap, get, getThemeProps, getThemeStore, globalemitter, guard, history, html, ifDefined, isArrayChange, kebabToCamelCase, matchPath, mediaQuery, nativeDefineElement, numattribute, objectMapToString, part, partMap, post, property, put, randomStr, raw, refobject, removeItems, render, repeat, request, rootElement, slot, splice, state, styleMap, styled, svg, titleStore, updateStore, updateTheme, version };
3190
+ export { GemActiveLinkElement, GemDialogBaseElement, GemElement, GemError, GemLightRouteElement, GemLinkElement, GemReflectElement, GemRouteElement, GemTitleElement, GemUnsafeElement, GemUseElement, I18n, LinkedList, PREFIX, PropProxyMap, QueryString, SUFFIX, SVGTemplateResult, SheetToken, StoreListenerMap, TemplateResult, absoluteLocation, addMicrotask, addMicrotaskToStack, adoptedStyle, attribute, basePathStore, boolattribute, camelToKebabCase, classMap, cleanObject, connect, connectStore, createCSSSheet, createHistoryParams, createModalClass, createPath, createStore, createTheme, css, customElement, defaultReqInit, defineAttribute, defineCSSState, defineProperty, defineRef, del, directive, disconnect, emitter, exportPartsMap, get, getThemeProps, getThemeStore, globalemitter, guard, history, html, ifDefined, isArrayChange, kebabToCamelCase, matchPath, mediaQuery, nativeDefineElement, numattribute, objectMapToString, part, partMap, post, property, put, randomStr, raw, refobject, removeItems, render, repeat, request, rootElement, slot, splice, state, styleMap, styled, svg, titleStore, updateStore, updateTheme, useStore, useTheme, version };