@mantou/gem 1.7.10 → 1.7.12

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 (67) hide show
  1. package/dist/gem.es.js +1839 -2597
  2. package/dist/gem.umd.js +23 -24
  3. package/elements/base/gesture.d.ts +1 -3
  4. package/elements/base/gesture.d.ts.map +1 -1
  5. package/elements/base/gesture.js +2 -3
  6. package/elements/base/gesture.js.map +1 -1
  7. package/elements/base/link.d.ts +2 -0
  8. package/elements/base/link.d.ts.map +1 -1
  9. package/elements/base/link.js +2 -0
  10. package/elements/base/link.js.map +1 -1
  11. package/elements/base/modal-factory.d.ts +23 -21
  12. package/elements/base/modal-factory.d.ts.map +1 -1
  13. package/elements/base/reflect.d.ts +5 -0
  14. package/elements/base/reflect.d.ts.map +1 -1
  15. package/elements/base/reflect.js +26 -7
  16. package/elements/base/reflect.js.map +1 -1
  17. package/elements/base/route.d.ts +9 -7
  18. package/elements/base/route.d.ts.map +1 -1
  19. package/elements/base/route.js +23 -7
  20. package/elements/base/route.js.map +1 -1
  21. package/elements/base/title.d.ts +1 -1
  22. package/elements/base/title.js +1 -1
  23. package/elements/base/unsafe.d.ts +1 -2
  24. package/elements/base/unsafe.d.ts.map +1 -1
  25. package/elements/base/unsafe.js +1 -2
  26. package/elements/base/unsafe.js.map +1 -1
  27. package/elements/base/use.d.ts +1 -1
  28. package/elements/base/use.js +1 -1
  29. package/helper/i18n.d.ts +1 -1
  30. package/helper/i18n.d.ts.map +1 -1
  31. package/helper/i18n.js +2 -3
  32. package/helper/i18n.js.map +1 -1
  33. package/helper/request.d.ts +17 -7
  34. package/helper/request.d.ts.map +1 -1
  35. package/helper/request.js +103 -53
  36. package/helper/request.js.map +1 -1
  37. package/lib/decorators.d.ts +1 -0
  38. package/lib/decorators.d.ts.map +1 -1
  39. package/lib/element.d.ts.map +1 -1
  40. package/lib/element.js +16 -18
  41. package/lib/element.js.map +1 -1
  42. package/lib/store.d.ts +1 -1
  43. package/lib/store.d.ts.map +1 -1
  44. package/lib/store.js +3 -1
  45. package/lib/store.js.map +1 -1
  46. package/lib/utils.d.ts +7 -7
  47. package/lib/utils.d.ts.map +1 -1
  48. package/lib/utils.js +19 -30
  49. package/lib/utils.js.map +1 -1
  50. package/lib/version.d.ts +1 -1
  51. package/lib/version.js +1 -1
  52. package/package.json +6 -5
  53. package/src/elements/base/gesture.ts +3 -3
  54. package/src/elements/base/link.ts +2 -0
  55. package/src/elements/base/reflect.ts +18 -6
  56. package/src/elements/base/route.ts +32 -11
  57. package/src/elements/base/title.ts +1 -1
  58. package/src/elements/base/unsafe.ts +1 -2
  59. package/src/elements/base/use.ts +1 -1
  60. package/src/helper/i18n.ts +2 -4
  61. package/src/helper/request.ts +122 -53
  62. package/src/lib/decorators.ts +1 -1
  63. package/src/lib/element.ts +18 -17
  64. package/src/lib/store.ts +3 -1
  65. package/src/lib/utils.ts +30 -37
  66. package/src/lib/version.ts +1 -1
  67. package/src/test/utils.test.ts +12 -4
package/src/lib/utils.ts CHANGED
@@ -257,21 +257,29 @@ export interface StyledKeyValuePair {
257
257
 
258
258
  /**
259
259
  *
260
- * 创建 style sheet 用于 `adoptedStyleSheets`,不支持样式更新
261
- * @param rules string | Record<string, string> 不能动态更新的 css
262
- * @param mediaQuery string 媒体查询 StyleSheet.media.mediaText
260
+ * 创建 style sheet 用于 `adoptedStyleSheets`,不支持样式更新,只支持自定义 CSS 属性
261
+ * @param rules string | Record<string, string>
262
+ * @param media string 媒体查询
263
263
  */
264
- export function createCSSSheet<T extends StyledKeyValuePair>(rules: T | string, mediaQuery = ''): Sheet<T> {
265
- const styleSheet = new CSSStyleSheet();
264
+ export function createCSSSheet<T extends StyledKeyValuePair>(rules: T | string, media?: string): Sheet<T> {
265
+ const styleSheet = new CSSStyleSheet({ media });
266
266
  const sheet: any = {};
267
- styleSheet.media.mediaText = mediaQuery;
268
267
  let style = '';
269
268
  if (typeof rules === 'string') {
270
269
  style = rules;
271
270
  } else {
272
271
  Object.keys(rules).forEach((key: keyof T) => {
273
272
  sheet[key] = `${key as string}-${randomStr()}`;
274
- style += rules[key].styledContent.replace(/&/g, sheet[key]);
273
+ switch (rules[key].type) {
274
+ case 'class':
275
+ style += `.${sheet[key]} {${rules[key].styledContent}}`;
276
+ break;
277
+ case 'id':
278
+ style += `#${sheet[key]} {${rules[key].styledContent}}`;
279
+ break;
280
+ default:
281
+ style += `@keyframes ${key as string} {${rules[key].styledContent}}`;
282
+ }
275
283
  });
276
284
  }
277
285
  styleSheet.replaceSync(style);
@@ -285,24 +293,7 @@ export function randomStr(len = 5): string {
285
293
  return str;
286
294
  }
287
295
 
288
- const nestingRuleRegExp = new RegExp('&.*{((.|\n)*)}', 'g');
289
- // 只支持一层嵌套
290
- // https://drafts.csswg.org/css-nesting-1/
291
- // https://bugzilla.mozilla.org/show_bug.cgi?id=1648037
292
- // https://bugs.webkit.org/show_bug.cgi?id=223497
293
- function flatStyled(style: string, type: StyledType): StyledValueObject {
294
- const nestingRules: string[] = [];
295
- let styledContent =
296
- `& {${style.replace(nestingRuleRegExp, (substr) => {
297
- nestingRules.push(substr);
298
- return '';
299
- })}}` + nestingRules.join('');
300
- styledContent = styledContent.replace(/&/g, type === 'class' ? '.&' : '#&');
301
- return { styledContent, type };
302
- }
303
-
304
296
  // 写 css 文本,在 CSSStyleSheet 中使用,使用 styed-components 高亮
305
- // 暂时不支持 `at` 规则
306
297
  //
307
298
  // createCSSSheet({
308
299
  // red: styled.class`
@@ -313,18 +304,14 @@ function flatStyled(style: string, type: StyledType): StyledValueObject {
313
304
  // `,
314
305
  // });
315
306
  export const styled = {
316
- class: (arr: TemplateStringsArray, ...args: any[]) => {
317
- const style = raw(arr, ...args);
318
- return flatStyled(style, 'class');
307
+ class: (arr: TemplateStringsArray, ...args: any[]): StyledValueObject => {
308
+ return { styledContent: raw(arr, ...args), type: 'class' };
319
309
  },
320
- id: (arr: TemplateStringsArray, ...args: any[]) => {
321
- const style = raw(arr, ...args);
322
- return flatStyled(style, 'id');
310
+ id: (arr: TemplateStringsArray, ...args: any[]): StyledValueObject => {
311
+ return { styledContent: raw(arr, ...args), type: 'id' };
323
312
  },
324
313
  keyframes: (arr: TemplateStringsArray, ...args: any[]): StyledValueObject => {
325
- const keyframesContent = raw(arr, ...args);
326
- const styledContent = `@keyframes & {${keyframesContent}}`;
327
- return { styledContent, type: 'keyframes' };
314
+ return { styledContent: raw(arr, ...args), type: 'keyframes' };
328
315
  },
329
316
  };
330
317
 
@@ -385,18 +372,24 @@ export function objectMapToString<T = any>(
385
372
  }
386
373
 
387
374
  // Wait: Typescript lib dom CSSStyleDeclaration anchor position
388
- type StyleProp = keyof CSSStyleDeclaration | `--${string}` | 'anchorDefault' | 'anchorName';
375
+ type StyleProp =
376
+ | keyof CSSStyleDeclaration
377
+ | `--${string}`
378
+ | 'scrollbarWidth'
379
+ | 'scrollbarColor'
380
+ | 'anchorDefault'
381
+ | 'anchorName';
389
382
 
390
- export type StyleObject = Partial<Record<StyleProp, string | number | undefined | null>>;
383
+ export type StyleObject = Partial<Record<StyleProp, string | number | false | undefined | null>>;
391
384
 
392
385
  // 不支持 webkit 属性
393
386
  export function styleMap(object: StyleObject) {
394
387
  return objectMapToString(object, ';', (key, value) =>
395
- value !== undefined && value !== null ? `${camelToKebabCase(key)}:${value}` : '',
388
+ value || value === 0 ? `${camelToKebabCase(key)}:${value}` : '',
396
389
  );
397
390
  }
398
391
 
399
- export function classMap(object: Record<string, boolean | string | number | undefined | null>) {
392
+ export function classMap(object: Record<string, string | number | boolean | undefined | null>) {
400
393
  return objectMapToString(object, ' ', (key, value) => (value ? key : ''));
401
394
  }
402
395
 
@@ -1 +1 @@
1
- export const version = '1.7.10';
1
+ export const version = '1.7.12';
@@ -16,6 +16,7 @@ import {
16
16
 
17
17
  declare global {
18
18
  interface CSSRuleList {
19
+ // only test style rule
19
20
  item(index: number): CSSStyleRule;
20
21
  }
21
22
  }
@@ -106,15 +107,22 @@ describe('utils 测试', () => {
106
107
  `,
107
108
  wrap: styled.id`
108
109
  position: fixed;
110
+ animation: 3s infinite alternate slideIn;
111
+ `,
112
+ slideIn: styled.keyframes`
113
+ from {
114
+ transform: translateX(0%);
115
+ }
109
116
  `,
110
117
  });
111
118
  expect(cssSheet.scroll.startsWith('scroll')).to.true;
112
119
  const rules = cssSheet[SheetToken].cssRules;
113
120
  expect(rules.item(0).selectorText.startsWith('.scroll')).to.true;
114
- expect(rules.item(0).style.background.startsWith('red')).to.true;
115
- expect(/\.scroll(-|\w)+:hover \*/.test(rules.item(1).selectorText)).to.true;
116
- expect(rules.item(1).style.background.startsWith('blue')).to.true;
117
- expect(rules.item(2).selectorText.startsWith('#wrap')).to.true;
121
+ expect(rules.item(0).style.background).to.equal('red');
122
+ expect(rules.item(0).cssRules.item(0).selectorText).to.equal('&:hover *');
123
+ expect(rules.item(0).cssRules.item(0).style.background).to.equal('blue');
124
+ expect(rules.item(1).selectorText.startsWith('#wrap')).to.true;
125
+ expect((rules.item(2) as any).name).to.equal('slideIn');
118
126
  });
119
127
  it('styleMap/classMap/exportPartsMap', () => {
120
128
  expect(styleMap({ '--x': '1px', fontSize: '14px', content: `'*'` })).to.equal(