@mantou/gem 2.1.0 → 2.2.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.
Files changed (107) hide show
  1. package/dist/gem.es.js +1845 -1904
  2. package/dist/gem.umd.js +34 -191
  3. package/elements/base/dialog.d.ts +0 -4
  4. package/elements/base/dialog.d.ts.map +1 -1
  5. package/elements/base/dialog.js +0 -4
  6. package/elements/base/dialog.js.map +1 -1
  7. package/elements/base/gesture.d.ts +4 -14
  8. package/elements/base/gesture.d.ts.map +1 -1
  9. package/elements/base/gesture.js +34 -37
  10. package/elements/base/gesture.js.map +1 -1
  11. package/elements/base/link.d.ts +2 -19
  12. package/elements/base/link.d.ts.map +1 -1
  13. package/elements/base/link.js +29 -42
  14. package/elements/base/link.js.map +1 -1
  15. package/elements/base/modal-factory.d.ts +32 -33
  16. package/elements/base/modal-factory.d.ts.map +1 -1
  17. package/elements/base/reflect.d.ts +0 -3
  18. package/elements/base/reflect.d.ts.map +1 -1
  19. package/elements/base/reflect.js +0 -3
  20. package/elements/base/reflect.js.map +1 -1
  21. package/elements/base/route.d.ts +0 -10
  22. package/elements/base/route.d.ts.map +1 -1
  23. package/elements/base/route.js +10 -22
  24. package/elements/base/route.js.map +1 -1
  25. package/elements/base/title.d.ts +0 -6
  26. package/elements/base/title.d.ts.map +1 -1
  27. package/elements/base/title.js +13 -8
  28. package/elements/base/title.js.map +1 -1
  29. package/elements/base/unsafe.d.ts +1 -6
  30. package/elements/base/unsafe.d.ts.map +1 -1
  31. package/elements/base/unsafe.js +12 -12
  32. package/elements/base/unsafe.js.map +1 -1
  33. package/elements/base/use.d.ts +0 -4
  34. package/elements/base/use.d.ts.map +1 -1
  35. package/elements/base/use.js +15 -13
  36. package/elements/base/use.js.map +1 -1
  37. package/helper/theme.d.ts +3 -3
  38. package/helper/theme.d.ts.map +1 -1
  39. package/helper/theme.js +3 -3
  40. package/helper/theme.js.map +1 -1
  41. package/index.d.ts +0 -1
  42. package/index.d.ts.map +1 -1
  43. package/index.js +0 -1
  44. package/index.js.map +1 -1
  45. package/lib/decorators.d.ts +7 -6
  46. package/lib/decorators.d.ts.map +1 -1
  47. package/lib/decorators.js +48 -33
  48. package/lib/decorators.js.map +1 -1
  49. package/lib/directive.d.ts +83 -0
  50. package/lib/directive.d.ts.map +1 -0
  51. package/lib/directive.js +59 -0
  52. package/lib/directive.js.map +1 -0
  53. package/lib/element.d.ts +9 -23
  54. package/lib/element.d.ts.map +1 -1
  55. package/lib/element.js +61 -56
  56. package/lib/element.js.map +1 -1
  57. package/lib/lit-html.d.ts +331 -0
  58. package/lib/lit-html.d.ts.map +1 -0
  59. package/lib/lit-html.js +941 -0
  60. package/lib/lit-html.js.map +1 -0
  61. package/lib/ref.d.ts +1 -0
  62. package/lib/ref.d.ts.map +1 -0
  63. package/lib/ref.js +2 -0
  64. package/lib/ref.js.map +1 -0
  65. package/lib/repeat.d.ts +126 -0
  66. package/lib/repeat.d.ts.map +1 -0
  67. package/lib/repeat.js +533 -0
  68. package/lib/repeat.js.map +1 -0
  69. package/lib/store.d.ts +1 -1
  70. package/lib/store.d.ts.map +1 -1
  71. package/lib/store.js +4 -4
  72. package/lib/store.js.map +1 -1
  73. package/lib/utils.d.ts +1 -4
  74. package/lib/utils.d.ts.map +1 -1
  75. package/lib/utils.js +6 -15
  76. package/lib/utils.js.map +1 -1
  77. package/package.json +7 -9
  78. package/src/elements/base/dialog.ts +0 -4
  79. package/src/elements/base/gesture.ts +32 -35
  80. package/src/elements/base/link.ts +21 -41
  81. package/src/elements/base/reflect.ts +0 -3
  82. package/src/elements/base/route.ts +11 -21
  83. package/src/elements/base/title.ts +3 -7
  84. package/src/elements/base/unsafe.ts +9 -11
  85. package/src/elements/base/use.ts +8 -14
  86. package/src/helper/theme.ts +4 -4
  87. package/src/index.ts +0 -1
  88. package/src/lib/decorators.ts +53 -40
  89. package/src/lib/directive.ts +139 -0
  90. package/src/lib/element.ts +70 -79
  91. package/src/lib/lit-html.ts +1217 -0
  92. package/src/lib/repeat.ts +580 -0
  93. package/src/lib/store.ts +4 -4
  94. package/src/lib/utils.ts +6 -16
  95. package/src/test/elements/link.test.ts +1 -2
  96. package/src/test/elements/reflect.test.ts +13 -3
  97. package/src/test/elements/title.test.ts +1 -2
  98. package/src/test/gem-element/advance.test.ts +15 -8
  99. package/src/test/gem-element/basic.test.ts +22 -10
  100. package/src/test/gem-element/decorators.test.ts +6 -9
  101. package/src/test/gem-element/multi.test.ts +20 -11
  102. package/src/test/history.test.ts +2 -2
  103. package/src/test/store.test.ts +3 -3
  104. package/src/test/utils.test.ts +9 -10
  105. package/src/test/utils.ts +22 -0
  106. package/LICENSE +0 -21
  107. package/src/lib/directives.ts +0 -6
package/lib/utils.js CHANGED
@@ -1,4 +1,4 @@
1
- const { assign, setPrototypeOf, fromEntries, entries, keys } = Object;
1
+ const { assign, fromEntries, entries, keys } = Object;
2
2
  const microtaskSet = new Set();
3
3
  export function addMicrotask(func) {
4
4
  if (microtaskSet.has(func))
@@ -9,9 +9,11 @@ export function addMicrotask(func) {
9
9
  });
10
10
  microtaskSet.add(func);
11
11
  }
12
+ // 注意 typeof state === 'function' 但是没有 Function 的方法和属性
12
13
  export function createUpdater(initState, fn) {
13
14
  const state = fn;
14
- setPrototypeOf(state, null);
15
+ // https://github.com/vitejs/vite/issues/18540 现在覆盖 call 也一样会报错
16
+ // setPrototypeOf(state, null);
15
17
  delete state.name;
16
18
  delete state.length;
17
19
  assign(state, initState);
@@ -183,8 +185,8 @@ export class QueryString extends URLSearchParams {
183
185
  export function raw(arr, ...args) {
184
186
  return arr.reduce((prev, current, index) => prev + (args[index - 1] ?? '') + current);
185
187
  }
186
- // 写 css 文本,在 CSSStyleSheet 中使用
187
- export const css = raw;
188
+ // 在 html 中引用 class 时使用,仅提供高亮功能
189
+ export const styled = raw;
188
190
  export function randomStr(len = 5) {
189
191
  const str = Math.random()
190
192
  .toString(36)
@@ -193,17 +195,6 @@ export function randomStr(len = 5) {
193
195
  return str + randomStr(len - str.length);
194
196
  return str;
195
197
  }
196
- // 写 css 文本,在 CSSStyleSheet 中使用,使用 styed-components 高亮
197
- //
198
- // createCSSSheet({
199
- // red: styled.class`
200
- // background: red;
201
- // &:hover {
202
- // background: blue;
203
- // }
204
- // `,
205
- // });
206
- export const styled = { class: raw };
207
198
  export function camelToKebabCase(str) {
208
199
  return str.replace(/[A-Z]/g, ($1) => '-' + $1.toLowerCase());
209
200
  }
package/lib/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/lib/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/lib/utils.ts"],"names":[],"mappings":"AAAA,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;AAEtD,MAAM,YAAY,GAAG,IAAI,GAAG,EAAc,CAAC;AAC3C,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO;IACnC,cAAc,CAAC,GAAG,EAAE;QAClB,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,EAAE,CAAC;IACT,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACzB,CAAC;AAED,sDAAsD;AACtD,MAAM,UAAU,aAAa,CAAwC,SAAY,EAAE,EAAM;IACvF,MAAM,KAAK,GAAQ,EAAE,CAAC;IACtB,+DAA+D;IAC/D,+BAA+B;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC;IAClB,OAAO,KAAK,CAAC,MAAM,CAAC;IACpB,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;IACzB,aAAa;IACb,OAAO,KAAe,CAAC;AACzB,CAAC;AAED,gBAAgB;AAChB,MAAM,UAAU,gBAAgB,CAAC,WAAW,GAAG,EAAE,EAAE,YAAY,GAAG,EAAE;IAClE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,YAAY,EAAE,QAAQ,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC;IACxF,OAAO,QAAQ,GAAG,MAAM,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAID,MAAM,UAAU,WAAW,CACzB,MAAS,EACT,IAAU,EACV,QAAc,EACd,OAAc;IAEd,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACjD,OAAO,GAAG,EAAE,CAAC,MAAM,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACnE,CAAC;AAYD,MAAM,OAAO,UAAoB,SAAQ,WAAW;IAOlD,IAAI,GAAG,IAAI,GAAG,EAAwB,CAAC;IACvC,UAAU,CAAqB;IAC/B,SAAS,CAAqB;IAE9B,OAAO,CAAC,KAAQ;QACd,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;gBACnB,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC,IAAI,CAAC;YACnC,CAAC;YACD,IAAI,SAAS,CAAC,IAAI,EAAE,CAAC;gBACnB,SAAS,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC;YACvC,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC;YAClC,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,aAAa,CAAC,OAAsB;QAClC,IAAI,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,OAAO,IAAI,CAAC;QAC1B,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,OAAO,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC;YAC5C,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;YACvB,IAAI,CAAC,OAAO;gBAAE,OAAO,IAAI,CAAC;YAC1B,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACnB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC,KAAQ;QACX,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IAED,oBAAoB;IACpB,uCAAuC;IACvC,GAAG,CAAC,KAAQ;QACV,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC;QAC/C,CAAC;QACD,MAAM,IAAI,GAAsB,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC;QACjE,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAC3B,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACd,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;QACtB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC7B,CAAC;IAED,4BAA4B;IAC5B,MAAM,CAAC,KAAQ;QACb,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,SAAS;IACT,SAAS;IACT,GAAG;QACD,MAAM,SAAS,GAAG,IAAI,CAAC,UAAU,CAAC;QAClC,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC7B,OAAO,SAAS,CAAC,KAAK,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,YAAkD,SAAQ,OAA6B;IAClG,GAAG,CAAC,GAAM;QACR,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3B,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,EAAE,CAAC;YACX,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,eAAe;IAC9C,YAAY,KAAW;QACrB,KAAK,CAAC,KAAK,CAAC,CAAC;IACf,CAAC;IAED,iCAAiC;IACjC,MAAM,CAAC,KAAU;QACf,IAAI,KAAU,CAAC;QACf,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,KAAK,GAAG,WAAW,CAAC,IAAI,eAAe,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;QAC5D,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;YACtC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU,GAAG,CAAC,KAAU,EAAE,EAAE,CAAC,CAAC,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC;IAEzF,MAAM,CAAC,GAAW,EAAE,KAAU;QAC5B,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7D,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YACjC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IAED,MAAM,GAAG,CAAC,KAAU,EAAE,EAAE;QACtB,IAAI,CAAC,KAAK;YAAE,OAAO,IAAI,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,SAAS,CAAC,GAAW;QACnB,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;aACvB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,QAAQ;QACN,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACpC,CAAC;IAED,MAAM;QACJ,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC;IACzB,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,GAAG,CAAC,GAAyB,EAAE,GAAG,IAAW;IAC3D,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC;AACxF,CAAC;AAED,+BAA+B;AAC/B,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,CAAC;AAE1B,MAAM,UAAU,SAAS,CAAC,GAAG,GAAG,CAAC;IAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE;SACtB,QAAQ,CAAC,EAAE,CAAC;SACZ,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC;IACrB,IAAI,GAAG,CAAC,MAAM,GAAG,GAAG;QAAE,OAAO,GAAG,GAAG,SAAS,CAAC,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;IAC/D,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,EAAU,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAW;IAC1C,OAAO,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,OAAO,EAAE,EAAU,EAAE,EAAE,CAAC,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,WAAW,CAAoC,CAAI;IACjE,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAY,EAAE,EAAE;QAC/B,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC,YAAY,GAAW;QACrB,KAAK,CAAC,GAAG,CAAC,CAAC;QACX,IAAI,CAAC,OAAO,GAAG,QAAQ,IAAI,CAAC,OAAO,EAAE,CAAC;IACxC,CAAC;CACF;AAED,MAAM,UAAU,aAAa,CAAC,SAAgB,EAAE,SAAgB;IAC9D,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,IAAI,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAAyB,EACzB,QAAgB,EAChB,QAA2C;IAE3C,IAAI,MAAM,GAAG,QAAQ,CAAC;IACtB,KAAK,MAAM,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACrC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC;IAClC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAcD,gBAAgB;AAChB,MAAM,UAAU,QAAQ,CAAC,MAAmB;IAC1C,OAAO,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CACnD,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC,GAAG,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAChE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAoE;IAC3F,OAAO,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,CAAC;AAEhC,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,MAA2D;IACxF,OAAO,iBAAiB,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CACnD,KAAK,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CACvE,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantou/gem",
3
- "version": "2.1.0",
3
+ "version": "2.2.0",
4
4
  "description": "💎 使用自定义元素的轻量级 WebApp 开发框架",
5
5
  "keywords": [
6
6
  "frontend",
@@ -17,6 +17,7 @@
17
17
  "exports": {
18
18
  ".": "./index.js",
19
19
  "./lib/*": "./lib/*.js",
20
+ "./test/*": "./test/*.js",
20
21
  "./elements/*": "./elements/*.js",
21
22
  "./helper/*": "./helper/*.js"
22
23
  },
@@ -30,7 +31,7 @@
30
31
  ],
31
32
  "typings": "index.d.ts",
32
33
  "scripts": {
33
- "docs": "GEM_BOOK_REPLACE=true gem-book docs",
34
+ "docs": "cross-env GEM_BOOK_REPLACE=true gem-book docs",
34
35
  "docs:remote": "pnpm run docs",
35
36
  "build:docs": "pnpm run docs --build",
36
37
  "build:module": "tsc -p tsconfig.build.json",
@@ -39,16 +40,14 @@
39
40
  "start": "pnpm build:module --watch",
40
41
  "test": "cross-env NODE_OPTIONS=--no-experimental-fetch wtr"
41
42
  },
42
- "dependencies": {
43
- "lit-html": "^1.4.1"
44
- },
45
43
  "devDependencies": {
46
- "@esm-bundle/chai": "^4.3.4-fix.0",
47
44
  "@gemjs/config": "^2.1.0",
48
- "@open-wc/testing": "^2.5.33",
45
+ "@types/chai": "^5.0.0",
49
46
  "@types/mocha": "^10.0.7",
47
+ "@types/trusted-types": "^2.0.7",
50
48
  "@web/dev-server-esbuild": "^1.0.2",
51
49
  "@web/test-runner": "^0.18.1",
50
+ "chai": "^5.1.1",
52
51
  "rimraf": "^3.0.2",
53
52
  "typescript": "^5.6.2",
54
53
  "vite": "^5.2.10"
@@ -63,6 +62,5 @@
63
62
  "bugs": {
64
63
  "url": "https://github.com/mantou132/gem/issues"
65
64
  },
66
- "homepage": "https://github.com/mantou132/gem#readme",
67
- "gitHead": "00c0b40a5f92eaf3fce6e92b1a1f656565e69811"
65
+ "homepage": "https://github.com/mantou132/gem#readme"
68
66
  }
@@ -7,10 +7,6 @@ const final = Symbol();
7
7
  /**
8
8
  * 在模版中声明的 dialog,使用 `open` 方法 打开;
9
9
  * 模拟 top layer:https://github.com/whatwg/html/issues/4633.
10
- *
11
- * @attr label
12
- * @fires open
13
- * @fires close
14
10
  */
15
11
  @connectStore(history.store)
16
12
  @aria({ role: 'dialog', ariaModal: 'true' })
@@ -1,6 +1,6 @@
1
- import { GemElement, html } from '../../lib/element';
1
+ import { css, GemElement } from '../../lib/element';
2
2
  import type { Emitter } from '../../lib/decorators';
3
- import { attribute, emitter, mounted, shadow } from '../../lib/decorators';
3
+ import { adoptedStyle, attribute, emitter, mounted, state } from '../../lib/decorators';
4
4
 
5
5
  export type PanEventDetail = {
6
6
  // movement
@@ -44,40 +44,39 @@ function angleAB(
44
44
  );
45
45
  }
46
46
 
47
+ const style = css`
48
+ @layer {
49
+ :scope:where(:not([hidden])) {
50
+ display: block;
51
+ user-select: none;
52
+ touch-action: attr(touch-action, none);
53
+ }
54
+ }
55
+ `;
56
+
47
57
  /**
48
58
  * 块级元素,如果要设置成 `contents`,则内容块要设置 `touch-action: none`
49
59
  * https://javascript.info/pointer-events#event-pointercancel
50
60
  * 在移动端上,必须设置 `touch-action` 以允许滚动等原生动作
51
- *
52
- * @customElement gem-gesture
53
- * @event pan
54
- * @event pinch
55
- * @event rotate
56
- * @event swipe
57
- * @event press
58
- * @event end
59
- *
60
- * @attr touch-action
61
61
  */
62
- @shadow()
62
+ @adoptedStyle(style)
63
63
  export class GemGestureElement extends GemElement {
64
64
  @emitter pan: Emitter<PanEventDetail>;
65
65
  @emitter pinch: Emitter<PinchEventDetail>;
66
66
  @emitter rotate: Emitter<RotateEventDetail>;
67
67
  @emitter swipe: Emitter<SwipeEventDetail>;
68
- @emitter press: Emitter<null>;
69
- @emitter end: Emitter<null>;
68
+ @emitter press: Emitter<PointerEvent>;
69
+ @emitter end: Emitter<PointerEvent>;
70
70
 
71
71
  @attribute touchAction: string;
72
72
 
73
+ @state grabbing: boolean;
74
+
73
75
  #pressed = false; // 触发 press 之后不触发其他事件
74
76
  #pressTimer = 0;
75
77
 
76
78
  #startEventMap: Map<number, PointerEvent> = new Map();
77
79
 
78
- /** 指针移动事件记录 */
79
- movesMap: Map<number, PanEventDetail[]> = new Map();
80
-
81
80
  #getMoves = (pointerId: number) => {
82
81
  return this.movesMap.get(pointerId) || [];
83
82
  };
@@ -128,6 +127,7 @@ export class GemGestureElement extends GemElement {
128
127
  };
129
128
 
130
129
  #onStart = (evt: PointerEvent) => {
130
+ this.grabbing = true;
131
131
  evt.stopPropagation();
132
132
  this.setPointerCapture(evt.pointerId);
133
133
  this.movesMap.set(evt.pointerId, []);
@@ -135,7 +135,7 @@ export class GemGestureElement extends GemElement {
135
135
  if (evt.isPrimary) {
136
136
  this.#pressed = false;
137
137
  this.#pressTimer = window.setTimeout(() => {
138
- this.press(null);
138
+ this.press(evt);
139
139
  this.#pressed = true;
140
140
  }, 251);
141
141
  }
@@ -147,6 +147,8 @@ export class GemGestureElement extends GemElement {
147
147
  const moves = this.#getMoves(pointerId);
148
148
  const startEvent = this.#getStartEvent(pointerId);
149
149
  const lastMove = moves[moves.length - 1] || startEvent;
150
+ // Firefox contextmenu after trigger
151
+ if (!lastMove) return;
150
152
  // https://bugs.webkit.org/show_bug.cgi?id=220194
151
153
  // https://bugs.chromium.org/p/chromium/issues/detail?id=1092358
152
154
  const movementX = clientX - lastMove.clientX;
@@ -200,13 +202,14 @@ export class GemGestureElement extends GemElement {
200
202
  }
201
203
  };
202
204
 
203
- #onEnd = (evt: PointerEvent) => {
205
+ #onEnd = async (evt: PointerEvent) => {
204
206
  evt.stopPropagation();
205
207
  const { pointerId } = evt;
206
208
  window.clearTimeout(this.#pressTimer);
207
209
 
208
210
  if (this.movesMap.size === 1) {
209
- this.end(null);
211
+ this.grabbing = false;
212
+ this.end(evt);
210
213
  }
211
214
 
212
215
  // auto release: https://javascript.info/pointer-events#pointer-capturing
@@ -239,10 +242,14 @@ export class GemGestureElement extends GemElement {
239
242
  }
240
243
  }
241
244
 
242
- this.movesMap.delete(pointerId);
243
245
  this.#startEventMap.delete(pointerId);
246
+ // 确保外部 end 事件处理器中可以读取到
247
+ await Promise.resolve();
248
+ this.movesMap.delete(pointerId);
244
249
  };
245
250
 
251
+ #preventDefault = (evt: Event) => evt.preventDefault();
252
+
246
253
  @mounted()
247
254
  #init = () => {
248
255
  this.addEventListener('pointerdown', this.#onStart);
@@ -252,19 +259,9 @@ export class GemGestureElement extends GemElement {
252
259
  // 为什么空白区域会自动触发 `pointercancel`?
253
260
  this.addEventListener('pointercancel', this.#onEnd);
254
261
 
255
- this.addEventListener('dragstart', (evt) => evt.preventDefault());
262
+ this.addEventListener('dragstart', this.#preventDefault);
256
263
  };
257
264
 
258
- render() {
259
- return html`
260
- <style>
261
- :host(:where(:not([hidden]))) {
262
- display: block;
263
- user-select: none;
264
- touch-action: ${this.touchAction || 'none'};
265
- }
266
- </style>
267
- <slot></slot>
268
- `;
269
- }
265
+ /** 一次手势的指针移动事件记录 */
266
+ movesMap: Map<number, PanEventDetail[]> = new Map();
270
267
  }
@@ -1,4 +1,4 @@
1
- import { createCSSSheet, GemElement, html } from '../../lib/element';
1
+ import { css, GemElement, html } from '../../lib/element';
2
2
  import {
3
3
  attribute,
4
4
  property,
@@ -11,10 +11,10 @@ import {
11
11
  mounted,
12
12
  effect,
13
13
  boolattribute,
14
+ template,
14
15
  } from '../../lib/decorators';
15
16
  import { history, basePathStore } from '../../lib/history';
16
- import { absoluteLocation, css } from '../../lib/utils';
17
- import { ifDefined } from '../../lib/directives';
17
+ import { absoluteLocation } from '../../lib/utils';
18
18
 
19
19
  import type { RouteItem, RouteOptions } from './route';
20
20
  import { matchPath, createHistoryParams, createPath } from './route';
@@ -23,7 +23,7 @@ function isExternal(path: string) {
23
23
  return !path.startsWith('/');
24
24
  }
25
25
 
26
- const styles = createCSSSheet(css`
26
+ const styles = css`
27
27
  :host {
28
28
  /* link default style */
29
29
  cursor: pointer;
@@ -37,21 +37,10 @@ const styles = createCSSSheet(css`
37
37
  a:visited {
38
38
  color: unset;
39
39
  }
40
- `);
40
+ `;
41
41
 
42
42
  /**
43
- * @customElement gem-link
44
- * @attr href
45
- * @attr target
46
- * @attr doc-title
47
- * @attr path
48
- * @attr query
49
- * @attr hash
50
- * @attr pattern
51
- * @attr hint
52
- * @part link
53
- *
54
- * Bug: print `<link>` https://github.com/mantou132/gem/issues/36
43
+ * Bug: [can't print `<link>`](https://github.com/mantou132/gem/issues/36)
55
44
  */
56
45
  @connectStore(basePathStore)
57
46
  @adoptedStyle(styles)
@@ -85,7 +74,7 @@ export class GemLinkElement extends GemElement {
85
74
  }
86
75
 
87
76
  #onClick = async () => {
88
- const locationString = this.getLocationString();
77
+ const locationString = this._getLocationString();
89
78
 
90
79
  if (!locationString) return;
91
80
 
@@ -133,12 +122,10 @@ export class GemLinkElement extends GemElement {
133
122
  }
134
123
  };
135
124
 
136
- #preventDefault = (e: MouseEvent) => {
137
- e.preventDefault();
138
- };
125
+ #preventDefault = (e: MouseEvent) => e.preventDefault();
139
126
 
140
127
  #getHint = () => {
141
- const locationString = this.getLocationString();
128
+ const locationString = this._getLocationString();
142
129
  return isExternal(locationString)
143
130
  ? locationString
144
131
  : new URL(history.basePath + locationString, location.origin).toString();
@@ -157,23 +144,21 @@ export class GemLinkElement extends GemElement {
157
144
  this.addEventListener('pointerenter', this.#preload);
158
145
  }
159
146
 
160
- render() {
161
- return html`
162
- <a
163
- part=${this.link}
164
- @click=${this.#preventDefault}
165
- href=${ifDefined(this.#hint === 'off' ? undefined : this.#getHint())}
166
- tabindex="-1"
167
- >
168
- <slot></slot>
169
- </a>
170
- `;
171
- }
147
+ @template()
148
+ #content = () => {
149
+ return html`<a
150
+ part=${this.link}
151
+ @click=${this.#preventDefault}
152
+ href=${this.#hint === 'off' ? null : this.#getHint()}
153
+ tabindex="-1"
154
+ ><slot></slot
155
+ ></a>`;
156
+ };
172
157
 
173
158
  /**
174
159
  * 如果该元素是外部链接返回 URL,否则返回路径(不包含 basePath)
175
160
  */
176
- getLocationString() {
161
+ _getLocationString() {
177
162
  if (this.route) {
178
163
  const queryProp = this.#routeOptions?.query || '';
179
164
  const hashProp = this.#routeOptions?.hash || '';
@@ -194,11 +179,6 @@ export class GemLinkElement extends GemElement {
194
179
  }
195
180
  }
196
181
 
197
- /**
198
- * @customElement gem-active-link
199
- * @attr pattern
200
- * @state active
201
- */
202
182
  @connectStore(history.store)
203
183
  export class GemActiveLinkElement extends GemLinkElement {
204
184
  @attribute pattern: string; // 使用匹配模式设定 active
@@ -208,6 +188,6 @@ export class GemActiveLinkElement extends GemLinkElement {
208
188
  #updateState = () => {
209
189
  const { path, query, hash } = history.getParams();
210
190
  const isMatchPattern = this.pattern && matchPath(this.pattern, path);
211
- this.active = !!isMatchPattern || path + query + hash === this.getLocationString();
191
+ this.active = !!isMatchPattern || path + query + hash === this._getLocationString();
212
192
  };
213
193
  }
@@ -25,9 +25,6 @@ const getReflectFragment = (startNode: Comment) => {
25
25
  return result;
26
26
  };
27
27
 
28
- /**
29
- * @customElement gem-reflect
30
- */
31
28
  export class GemReflectElement extends GemElement {
32
29
  @attribute method: 'prepend' | 'append';
33
30
 
@@ -1,7 +1,7 @@
1
1
  import type { TemplateResult } from '../../lib/element';
2
- import { createState, GemElement, html } from '../../lib/element';
2
+ import { createState, css, GemElement, html } from '../../lib/element';
3
3
  import type { Emitter } from '../../lib/decorators';
4
- import { property, emitter, boolattribute, shadow, effect, template, light } from '../../lib/decorators';
4
+ import { property, emitter, boolattribute, shadow, effect, template, light, adoptedStyle } from '../../lib/decorators';
5
5
  import type { Store } from '../../lib/store';
6
6
  import { createStore, connect } from '../../lib/store';
7
7
  import type { UpdateHistoryParams } from '../../lib/history';
@@ -132,13 +132,6 @@ export type RouteTrigger = {
132
132
 
133
133
  const scrollPositionMap = new Map<string, number>();
134
134
 
135
- /**
136
- * @customElement gem-light-route
137
- * @attr inert 暂停路由更新
138
- * @fires routechange
139
- * @fires error
140
- * @fires loading
141
- */
142
135
  @light({ penetrable: true })
143
136
  export class GemLightRouteElement extends GemElement {
144
137
  @boolattribute transition: boolean;
@@ -283,15 +276,7 @@ export class GemLightRouteElement extends GemElement {
283
276
  return html`${content}`;
284
277
  }
285
278
 
286
- return html`
287
- <style>
288
- :host(:where(:not([hidden]))),
289
- :not(:defined) {
290
- display: contents;
291
- }
292
- </style>
293
- ${content === INIT_CONTENT ? html`<slot></slot>` : content}
294
- `;
279
+ return content === INIT_CONTENT ? html`<slot></slot>` : content;
295
280
  };
296
281
 
297
282
  // 重写 `update`,并暴露为公共字段
@@ -331,8 +316,13 @@ export class GemLightRouteElement extends GemElement {
331
316
  };
332
317
  }
333
318
 
334
- /**
335
- * @customElement gem-route
336
- */
319
+ const style = css`
320
+ :host(:where(:not([hidden]))),
321
+ :not(:defined) {
322
+ display: contents;
323
+ }
324
+ `;
325
+
337
326
  @shadow()
327
+ @adoptedStyle(style)
338
328
  export class GemRouteElement extends GemLightRouteElement {}
@@ -13,7 +13,7 @@
13
13
  */
14
14
 
15
15
  import { GemElement, html } from '../../lib/element';
16
- import { attribute, boolattribute, effect, mounted, shadow } from '../../lib/decorators';
16
+ import { attribute, boolattribute, effect, mounted, shadow, template } from '../../lib/decorators';
17
17
  import { connect } from '../../lib/store';
18
18
  import { titleStore } from '../../lib/history';
19
19
 
@@ -35,11 +35,6 @@ function setDocumentTitle(defaultTitle?: string | null, prefix = '', suffix = ''
35
35
  }
36
36
  }
37
37
 
38
- /**
39
- * @customElement gem-title
40
- * @attr prefix
41
- * @attr suffix
42
- */
43
38
  @shadow()
44
39
  export class GemTitleElement extends GemElement {
45
40
  @attribute prefix: string;
@@ -63,7 +58,8 @@ export class GemTitleElement extends GemElement {
63
58
  this.#ob.observe(this, { characterData: true, childList: true, subtree: true });
64
59
  };
65
60
 
66
- render = () => {
61
+ @template()
62
+ #content = () => {
67
63
  // 多个 <gem-title> 时,最终 document.title 按渲染顺序决定
68
64
  setDocumentTitle(this.textContent?.trim(), this.prefix, this.suffix);
69
65
  return html`${GemTitleElement.title}`;
@@ -1,27 +1,25 @@
1
1
  import { GemElement } from '../../lib/element';
2
- import { attribute, shadow } from '../../lib/decorators';
3
- import { raw } from '../../lib/utils';
2
+ import { attribute, shadow, template } from '../../lib/decorators';
4
3
 
5
- /**
6
- * @customElement gem-unsafe
7
- * @attr content
8
- * @attr contentcss
9
- */
10
4
  @shadow()
11
5
  export class GemUnsafeElement extends GemElement {
12
6
  @attribute content: string;
13
7
  @attribute contentcss: string;
14
8
 
15
- render() {
16
- this.shadowRoot!.innerHTML = raw`
9
+ @template()
10
+ #content = () => {
11
+ const style = /*html*/ `
17
12
  <style>
18
13
  :host(:where(:not([hidden]))) {
19
14
  display: contents;
20
15
  }
21
16
  ${this.contentcss}
22
17
  </style>
23
- ${this.content}
24
18
  `;
19
+
20
+ this.shadowRoot!.innerHTML = this.content + style.trim();
21
+
22
+ // 不要更新内容
25
23
  return undefined;
26
- }
24
+ };
27
25
  }
@@ -1,8 +1,7 @@
1
- import { createCSSSheet, GemElement, html } from '../../lib/element';
2
- import { adoptedStyle, attribute, property, shadow, state } from '../../lib/decorators';
3
- import { css } from '../../lib/utils';
1
+ import { css, GemElement, html } from '../../lib/element';
2
+ import { adoptedStyle, attribute, property, shadow, state, template } from '../../lib/decorators';
4
3
 
5
- const styles = createCSSSheet(css`
4
+ const styles = css`
6
5
  :host(:where(:not([hidden]))) {
7
6
  position: relative;
8
7
  display: inline-flex;
@@ -12,7 +11,7 @@ const styles = createCSSSheet(css`
12
11
  width: 100%;
13
12
  height: 100%;
14
13
  }
15
- `);
14
+ `;
16
15
 
17
16
  const eleCache = new Map<string, HTMLTemplateElement>();
18
17
  /**
@@ -20,9 +19,6 @@ const eleCache = new Map<string, HTMLTemplateElement>();
20
19
  * 此元素用来模拟 `<use>`,
21
20
  * 由于是复制元素,所以不能像 `<use>` 一样自动更新
22
21
  * slot 支持为 icon 添加效果,如涟漪,徽章
23
- *
24
- * @customElement gem-use
25
- * @attr selector
26
22
  */
27
23
  @shadow()
28
24
  @adoptedStyle(styles)
@@ -50,10 +46,8 @@ export class GemUseElement extends GemElement {
50
46
  }
51
47
  };
52
48
 
53
- render() {
54
- return html`
55
- ${this.#getContent()}
56
- <slot></slot>
57
- `;
58
- }
49
+ @template()
50
+ #content = () => {
51
+ return html`${this.#getContent()}<slot></slot>`;
52
+ };
59
53
  }
@@ -2,10 +2,10 @@ import type { Store } from '../lib/store';
2
2
  import { connect, createStore } from '../lib/store';
3
3
  import { camelToKebabCase, createUpdater, randomStr } from '../lib/utils';
4
4
  import type { GemElement } from '../lib/element';
5
- import { SheetToken, createCSSSheet } from '../lib/element';
5
+ import { SheetToken, css } from '../lib/element';
6
6
 
7
7
  export type Theme<T> = ReturnType<typeof createUpdater<T>> &
8
- ReturnType<typeof createCSSSheet> & {
8
+ ReturnType<typeof css> & {
9
9
  [K in keyof T as K extends `${string}Color`
10
10
  ? `${string & K}${'' | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900}`
11
11
  : K]: T[K];
@@ -26,7 +26,7 @@ export function getThemeProps<T>(theme: Theme<T>) {
26
26
 
27
27
  function createThemeFromProps<T extends Record<string, unknown>>(themeObj: T, props: Record<string, string> = {}) {
28
28
  const salt = randomStr();
29
- const styleSheet = createCSSSheet({})[SheetToken];
29
+ const styleSheet = css({})[SheetToken];
30
30
  const store = createStore<T>(themeObj);
31
31
  const theme: any = new Proxy(
32
32
  createUpdater({ [SheetToken]: styleSheet }, (payload: Partial<T>) => store(payload)),
@@ -63,7 +63,7 @@ function createThemeFromProps<T extends Record<string, unknown>>(themeObj: T, pr
63
63
  }
64
64
 
65
65
  /**
66
- * 用于 `@adoptedStyle(theme)`,类似 `createCSSSheet`
66
+ * 用于 `@adoptedStyle(theme)`,类似 `css`
67
67
  */
68
68
  export function createScopedTheme<T extends Record<string, unknown>>(themeObj: T) {
69
69
  return createThemeFromProps(themeObj);
package/src/index.ts CHANGED
@@ -6,4 +6,3 @@ export * from './lib/version';
6
6
 
7
7
  // 使用路径时可选模块
8
8
  export * from './lib/history';
9
- export * from './lib/directives';