@taicode/common-web 1.1.2 → 1.1.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 (131) hide show
  1. package/output/cache-api/cache-api.d.ts +7 -1
  2. package/output/cache-api/cache-api.d.ts.map +1 -1
  3. package/output/cache-api/cache-api.js +26 -6
  4. package/output/cache-api/cache-api.test.js +134 -33
  5. package/output/catalyst/alert.d.ts +5 -5
  6. package/output/catalyst/alert.d.ts.map +1 -1
  7. package/output/catalyst/alert.js +46 -0
  8. package/output/catalyst/auth-layout.d.ts +1 -1
  9. package/output/catalyst/auth-layout.d.ts.map +1 -1
  10. package/output/catalyst/auth-layout.js +4 -0
  11. package/output/catalyst/avatar.d.ts +1 -1
  12. package/output/catalyst/avatar.d.ts.map +1 -1
  13. package/output/catalyst/{avatar.jsx → avatar.js} +5 -20
  14. package/output/catalyst/badge.d.ts +1 -1
  15. package/output/catalyst/badge.d.ts.map +1 -1
  16. package/output/catalyst/{badge.jsx → badge.js} +4 -11
  17. package/output/catalyst/button.d.ts +1 -1
  18. package/output/catalyst/button.d.ts.map +1 -1
  19. package/output/catalyst/{button.jsx → button.js} +4 -10
  20. package/output/catalyst/checkbox.d.ts +3 -3
  21. package/output/catalyst/checkbox.d.ts.map +1 -1
  22. package/output/catalyst/{checkbox.jsx → checkbox.js} +6 -14
  23. package/output/catalyst/combobox.d.ts +4 -4
  24. package/output/catalyst/combobox.d.ts.map +1 -1
  25. package/output/catalyst/combobox.js +101 -0
  26. package/output/catalyst/description-list.d.ts +3 -3
  27. package/output/catalyst/description-list.d.ts.map +1 -1
  28. package/output/catalyst/{description-list.jsx → description-list.js} +4 -3
  29. package/output/catalyst/dialog.d.ts +5 -5
  30. package/output/catalyst/dialog.d.ts.map +1 -1
  31. package/output/catalyst/dialog.js +46 -0
  32. package/output/catalyst/divider.d.ts +1 -1
  33. package/output/catalyst/divider.d.ts.map +1 -1
  34. package/output/catalyst/{divider.jsx → divider.js} +2 -1
  35. package/output/catalyst/dropdown.d.ts +11 -11
  36. package/output/catalyst/dropdown.d.ts.map +1 -1
  37. package/output/catalyst/{dropdown.jsx → dropdown.js} +15 -18
  38. package/output/catalyst/fieldset.d.ts +7 -7
  39. package/output/catalyst/fieldset.d.ts.map +1 -1
  40. package/output/catalyst/fieldset.js +42 -0
  41. package/output/catalyst/heading.d.ts +2 -2
  42. package/output/catalyst/heading.d.ts.map +1 -1
  43. package/output/catalyst/{heading.jsx → heading.js} +3 -2
  44. package/output/catalyst/input.d.ts +1 -1
  45. package/output/catalyst/input.d.ts.map +1 -1
  46. package/output/catalyst/input.js +70 -0
  47. package/output/catalyst/{link.jsx → link.js} +3 -4
  48. package/output/catalyst/listbox.d.ts +4 -4
  49. package/output/catalyst/listbox.d.ts.map +1 -1
  50. package/output/catalyst/listbox.js +99 -0
  51. package/output/catalyst/navbar.d.ts +5 -5
  52. package/output/catalyst/navbar.d.ts.map +1 -1
  53. package/output/catalyst/{navbar.jsx → navbar.js} +8 -16
  54. package/output/catalyst/pagination.d.ts +6 -6
  55. package/output/catalyst/pagination.d.ts.map +1 -1
  56. package/output/catalyst/pagination.js +35 -0
  57. package/output/catalyst/radio.d.ts +3 -3
  58. package/output/catalyst/radio.d.ts.map +1 -1
  59. package/output/catalyst/{radio.jsx → radio.js} +8 -11
  60. package/output/catalyst/select.js +52 -0
  61. package/output/catalyst/sidebar-layout.d.ts +1 -1
  62. package/output/catalyst/sidebar-layout.d.ts.map +1 -1
  63. package/output/catalyst/sidebar-layout.js +18 -0
  64. package/output/catalyst/sidebar.d.ts +9 -9
  65. package/output/catalyst/sidebar.d.ts.map +1 -1
  66. package/output/catalyst/{sidebar.jsx → sidebar.js} +12 -20
  67. package/output/catalyst/stacked-layout.d.ts +1 -1
  68. package/output/catalyst/stacked-layout.d.ts.map +1 -1
  69. package/output/catalyst/stacked-layout.js +18 -0
  70. package/output/catalyst/switch.d.ts +3 -3
  71. package/output/catalyst/switch.d.ts.map +1 -1
  72. package/output/catalyst/{switch.jsx → switch.js} +19 -20
  73. package/output/catalyst/table.d.ts +6 -6
  74. package/output/catalyst/table.d.ts.map +1 -1
  75. package/output/catalyst/table.js +56 -0
  76. package/output/catalyst/text.d.ts +4 -4
  77. package/output/catalyst/text.d.ts.map +1 -1
  78. package/output/catalyst/{text.jsx → text.js} +5 -4
  79. package/output/catalyst/{textarea.jsx → textarea.js} +21 -22
  80. package/output/service/{service.test.jsx → service.test.js} +6 -15
  81. package/output/side-cache/side-cache.d.ts +1 -0
  82. package/output/side-cache/side-cache.d.ts.map +1 -1
  83. package/output/side-cache/side-cache.js +25 -1
  84. package/output/side-cache/side-cache.test.js +92 -0
  85. package/package.json +1 -1
  86. package/output/catalyst/alert.jsx +0 -55
  87. package/output/catalyst/auth-layout.jsx +0 -7
  88. package/output/catalyst/combobox.jsx +0 -120
  89. package/output/catalyst/dialog.jsx +0 -55
  90. package/output/catalyst/fieldset.jsx +0 -41
  91. package/output/catalyst/input.jsx +0 -73
  92. package/output/catalyst/listbox.jsx +0 -120
  93. package/output/catalyst/pagination.jsx +0 -52
  94. package/output/catalyst/select.jsx +0 -59
  95. package/output/catalyst/sidebar-layout.jsx +0 -58
  96. package/output/catalyst/stacked-layout.jsx +0 -55
  97. package/output/catalyst/table.jsx +0 -68
  98. package/output/helpers/cache-api/cache-api.d.ts +0 -13
  99. package/output/helpers/cache-api/cache-api.d.ts.map +0 -1
  100. package/output/helpers/cache-api/cache-api.js +0 -114
  101. package/output/helpers/cache-api/cache-api.test.d.ts +0 -2
  102. package/output/helpers/cache-api/cache-api.test.d.ts.map +0 -1
  103. package/output/helpers/cache-api/cache-api.test.js +0 -348
  104. package/output/helpers/cache-api/index.d.ts +0 -2
  105. package/output/helpers/cache-api/index.d.ts.map +0 -1
  106. package/output/helpers/cache-api/index.js +0 -1
  107. package/output/helpers/service/index.d.ts +0 -1
  108. package/output/helpers/service/index.d.ts.map +0 -1
  109. package/output/helpers/service/index.js +0 -1
  110. package/output/helpers/service/service.d.ts +0 -5
  111. package/output/helpers/service/service.d.ts.map +0 -1
  112. package/output/helpers/service/service.js +0 -2
  113. package/output/helpers/side-cache/index.d.ts +0 -2
  114. package/output/helpers/side-cache/index.d.ts.map +0 -1
  115. package/output/helpers/side-cache/index.js +0 -1
  116. package/output/helpers/side-cache/side-cache.d.ts +0 -10
  117. package/output/helpers/side-cache/side-cache.d.ts.map +0 -1
  118. package/output/helpers/side-cache/side-cache.js +0 -137
  119. package/output/helpers/side-cache/side-cache.test.d.ts +0 -2
  120. package/output/helpers/side-cache/side-cache.test.d.ts.map +0 -1
  121. package/output/helpers/side-cache/side-cache.test.js +0 -179
  122. package/output/helpers/use-observer/index.d.ts +0 -2
  123. package/output/helpers/use-observer/index.d.ts.map +0 -1
  124. package/output/helpers/use-observer/index.js +0 -1
  125. package/output/helpers/use-observer/use-observer.d.ts +0 -3
  126. package/output/helpers/use-observer/use-observer.d.ts.map +0 -1
  127. package/output/helpers/use-observer/use-observer.js +0 -16
  128. package/output/helpers/use-observer/use-observer.test.d.ts +0 -2
  129. package/output/helpers/use-observer/use-observer.test.d.ts.map +0 -1
  130. package/output/use-observer/use-observer.test.jsx +0 -134
  131. /package/output/{helpers/use-observer/use-observer.test.jsx → use-observer/use-observer.test.js} +0 -0
@@ -2,12 +2,18 @@ type ApiFunc<P extends unknown[], R = unknown> = (...args: P) => Promise<R>;
2
2
  export declare class CacheApi<P extends unknown[], R> {
3
3
  private func;
4
4
  private cache;
5
+ private lastArgs;
5
6
  private accessor pendingRequests;
6
7
  constructor(func: ApiFunc<P, R>);
7
8
  get loading(): boolean;
8
9
  get empty(): boolean;
9
10
  get value(): R | undefined;
10
- send(...args: P): Promise<R>;
11
+ call(...args: P): Promise<R>;
12
+ /**
13
+ * 使用最近一次的参数刷新数据
14
+ * @param force 强制刷新,清除缓存
15
+ */
16
+ refresh(force?: boolean): Promise<R>;
11
17
  }
12
18
  export {};
13
19
  //# sourceMappingURL=cache-api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cache-api.d.ts","sourceRoot":"","sources":["../../source/cache-api/cache-api.ts"],"names":[],"mappings":"AAKA,KAAK,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAE3E,qBAAa,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC;IAO9B,OAAO,CAAC,IAAI;IANxB,OAAO,CAAC,KAAK,CAAqB;IAIlC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAI;gBAEhB,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAIvC,IACI,OAAO,IAAI,OAAO,CAErB;IAED,IACI,KAAK,IAAI,OAAO,CAEnB;IAED,IACI,KAAK,IAAI,CAAC,GAAG,SAAS,CAEzB;IAGK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;CAmBnC"}
1
+ {"version":3,"file":"cache-api.d.ts","sourceRoot":"","sources":["../../source/cache-api/cache-api.ts"],"names":[],"mappings":"AAKA,KAAK,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,GAAG,OAAO,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAA;AAE3E,qBAAa,QAAQ,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC;IAU9B,OAAO,CAAC,IAAI;IATxB,OAAO,CAAC,KAAK,CAAqB;IAGlC,OAAO,CAAC,QAAQ,CAAe;IAI/B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAI;gBAEhB,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;IAIvC,IACI,OAAO,IAAI,OAAO,CAErB;IAED,IACI,KAAK,IAAI,OAAO,CAEnB;IAED,IACI,KAAK,IAAI,CAAC,GAAG,SAAS,CAEzB;IAGK,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAuBlC;;;OAGG;IAEG,OAAO,CAAC,KAAK,GAAE,OAAe,GAAG,OAAO,CAAC,CAAC,CAAC;CAalD"}
@@ -48,7 +48,7 @@ import { catchIt } from '@taicode/common-base';
48
48
  import { SideCache } from '../side-cache';
49
49
  let CacheApi = (() => {
50
50
  var _a, _CacheApi_pendingRequests_accessor_storage;
51
- var _b;
51
+ var _b, _c;
52
52
  let _instanceExtraInitializers = [];
53
53
  let _pendingRequests_decorators;
54
54
  let _pendingRequests_initializers = [];
@@ -56,7 +56,8 @@ let CacheApi = (() => {
56
56
  let _get_loading_decorators;
57
57
  let _get_empty_decorators;
58
58
  let _get_value_decorators;
59
- let _send_decorators;
59
+ let _call_decorators;
60
+ let _refresh_decorators;
60
61
  return _a = class CacheApi {
61
62
  // 记录当前正在进行的请求数量
62
63
  get pendingRequests() { return __classPrivateFieldGet(this, _CacheApi_pendingRequests_accessor_storage, "f"); }
@@ -67,7 +68,7 @@ let CacheApi = (() => {
67
68
  _CacheApi_pendingRequests_accessor_storage.set(this, __runInitializers(this, _pendingRequests_initializers, 0));
68
69
  __runInitializers(this, _pendingRequests_extraInitializers);
69
70
  this.func = func;
70
- this.send = this.send.bind(this);
71
+ this.call = this.call.bind(this);
71
72
  }
72
73
  get loading() {
73
74
  return this.pendingRequests > 0;
@@ -78,7 +79,9 @@ let CacheApi = (() => {
78
79
  get value() {
79
80
  return this.cache.value;
80
81
  }
81
- async send(...args) {
82
+ async call(...args) {
83
+ // 记录最近一次调用的参数
84
+ this.lastArgs = args;
82
85
  // 增加待处理请求计数
83
86
  this.pendingRequests++;
84
87
  const result = await catchIt(async () => {
@@ -93,6 +96,21 @@ let CacheApi = (() => {
93
96
  }
94
97
  return result.value;
95
98
  }
99
+ /**
100
+ * 使用最近一次的参数刷新数据
101
+ * @param force 强制刷新,清除缓存
102
+ */
103
+ async refresh(force = false) {
104
+ if (this.lastArgs === undefined) {
105
+ throw new Error('没有可用的参数来刷新数据,请先调用 call 方法');
106
+ }
107
+ if (force) {
108
+ // 强制刷新,先清除缓存
109
+ this.cache.clear(this.lastArgs);
110
+ }
111
+ // 重新调用最近一次的参数
112
+ return await this.call(...this.lastArgs);
113
+ }
96
114
  },
97
115
  _CacheApi_pendingRequests_accessor_storage = new WeakMap(),
98
116
  (() => {
@@ -101,12 +119,14 @@ let CacheApi = (() => {
101
119
  _get_loading_decorators = [computed];
102
120
  _get_empty_decorators = [computed];
103
121
  _get_value_decorators = [computed];
104
- _send_decorators = [(_b = action).bound.bind(_b)];
122
+ _call_decorators = [(_b = action).bound.bind(_b)];
123
+ _refresh_decorators = [(_c = action).bound.bind(_c)];
105
124
  __esDecorate(_a, null, _pendingRequests_decorators, { kind: "accessor", name: "pendingRequests", static: false, private: false, access: { has: obj => "pendingRequests" in obj, get: obj => obj.pendingRequests, set: (obj, value) => { obj.pendingRequests = value; } }, metadata: _metadata }, _pendingRequests_initializers, _pendingRequests_extraInitializers);
106
125
  __esDecorate(_a, null, _get_loading_decorators, { kind: "getter", name: "loading", static: false, private: false, access: { has: obj => "loading" in obj, get: obj => obj.loading }, metadata: _metadata }, null, _instanceExtraInitializers);
107
126
  __esDecorate(_a, null, _get_empty_decorators, { kind: "getter", name: "empty", static: false, private: false, access: { has: obj => "empty" in obj, get: obj => obj.empty }, metadata: _metadata }, null, _instanceExtraInitializers);
108
127
  __esDecorate(_a, null, _get_value_decorators, { kind: "getter", name: "value", static: false, private: false, access: { has: obj => "value" in obj, get: obj => obj.value }, metadata: _metadata }, null, _instanceExtraInitializers);
109
- __esDecorate(_a, null, _send_decorators, { kind: "method", name: "send", static: false, private: false, access: { has: obj => "send" in obj, get: obj => obj.send }, metadata: _metadata }, null, _instanceExtraInitializers);
128
+ __esDecorate(_a, null, _call_decorators, { kind: "method", name: "call", static: false, private: false, access: { has: obj => "call" in obj, get: obj => obj.call }, metadata: _metadata }, null, _instanceExtraInitializers);
129
+ __esDecorate(_a, null, _refresh_decorators, { kind: "method", name: "refresh", static: false, private: false, access: { has: obj => "refresh" in obj, get: obj => obj.refresh }, metadata: _metadata }, null, _instanceExtraInitializers);
110
130
  if (_metadata) Object.defineProperty(_a, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
111
131
  })(),
112
132
  _a;
@@ -25,7 +25,7 @@ describe('CacheApi', () => {
25
25
  expect(cacheApi.value).toBeUndefined();
26
26
  });
27
27
  it('应该正确绑定 send 方法', () => {
28
- const { send } = cacheApi;
28
+ const { call: send } = cacheApi;
29
29
  expect(typeof send).toBe('function');
30
30
  });
31
31
  });
@@ -36,17 +36,17 @@ describe('CacheApi', () => {
36
36
  it('应该在成功调用后返回缓存的值', async () => {
37
37
  const expectedResult = 'test-result';
38
38
  mockApiFunc.mockResolvedValue(expectedResult);
39
- await cacheApi.send('param1', 123);
39
+ await cacheApi.call('param1', 123);
40
40
  expect(cacheApi.value).toBe(expectedResult);
41
41
  });
42
42
  it('应该在多次调用后返回最新的缓存值', async () => {
43
43
  const result1 = 'result-1';
44
44
  const result2 = 'result-2';
45
45
  mockApiFunc.mockResolvedValueOnce(result1);
46
- await cacheApi.send('param1', 123);
46
+ await cacheApi.call('param1', 123);
47
47
  expect(cacheApi.value).toBe(result1);
48
48
  mockApiFunc.mockResolvedValueOnce(result2);
49
- await cacheApi.send('param2', 456);
49
+ await cacheApi.call('param2', 456);
50
50
  expect(cacheApi.value).toBe(result2);
51
51
  });
52
52
  });
@@ -56,14 +56,14 @@ describe('CacheApi', () => {
56
56
  });
57
57
  it('成功调用后应该返回 false', async () => {
58
58
  mockApiFunc.mockResolvedValue('test-result');
59
- await cacheApi.send('param1', 123);
59
+ await cacheApi.call('param1', 123);
60
60
  expect(cacheApi.empty).toBe(false);
61
61
  });
62
62
  it('即使调用失败也应该保持 true', async () => {
63
63
  const error = new Error('API Error');
64
64
  mockApiFunc.mockRejectedValue(error);
65
65
  try {
66
- await cacheApi.send('param1', 123);
66
+ await cacheApi.call('param1', 123);
67
67
  }
68
68
  catch (e) {
69
69
  // 忽略错误
@@ -81,7 +81,7 @@ describe('CacheApi', () => {
81
81
  it('应该调用传入的 API 函数', async () => {
82
82
  const expectedResult = 'api-result';
83
83
  mockApiFunc.mockResolvedValue(expectedResult);
84
- const result = await cacheApi.send('test', 42);
84
+ const result = await cacheApi.call('test', 42);
85
85
  expect(mockApiFunc).toHaveBeenCalledTimes(1);
86
86
  expect(mockApiFunc).toHaveBeenCalledWith('test', 42);
87
87
  expect(result).toBe(expectedResult);
@@ -89,19 +89,19 @@ describe('CacheApi', () => {
89
89
  it('应该正确传递多个参数', async () => {
90
90
  const params = ['hello', 999];
91
91
  mockApiFunc.mockResolvedValue('success');
92
- await cacheApi.send(...params);
92
+ await cacheApi.call(...params);
93
93
  expect(mockApiFunc).toHaveBeenCalledWith(...params);
94
94
  });
95
95
  it('应该返回 API 函数的结果', async () => {
96
96
  const expectedResult = { data: 'test', status: 'ok' };
97
97
  mockApiFunc.mockResolvedValue(expectedResult);
98
- const result = await cacheApi.send('param', 1);
98
+ const result = await cacheApi.call('param', 1);
99
99
  expect(result).toEqual(expectedResult);
100
100
  });
101
101
  it('应该处理 API 函数抛出的异常', async () => {
102
102
  const error = new Error('API Error');
103
103
  mockApiFunc.mockRejectedValue(error);
104
- await expect(cacheApi.send('param', 1)).rejects.toThrow('API Error');
104
+ await expect(cacheApi.call('param', 1)).rejects.toThrow('API Error');
105
105
  });
106
106
  });
107
107
  describe('缓存功能', () => {
@@ -109,11 +109,11 @@ describe('CacheApi', () => {
109
109
  const result = 'cached-result';
110
110
  mockApiFunc.mockResolvedValue(result);
111
111
  // 第一次调用
112
- const firstResult = await cacheApi.send('same', 123);
112
+ const firstResult = await cacheApi.call('same', 123);
113
113
  expect(firstResult).toBe(result);
114
114
  expect(cacheApi.value).toBe(result);
115
115
  // 第二次调用相同参数,应该从缓存返回
116
- const secondResult = await cacheApi.send('same', 123);
116
+ const secondResult = await cacheApi.call('same', 123);
117
117
  expect(secondResult).toBe(result);
118
118
  expect(cacheApi.value).toBe(result);
119
119
  // API 函数应该被调用两次(SideCache 的 handle 方法会每次都调用)
@@ -122,8 +122,8 @@ describe('CacheApi', () => {
122
122
  it('不同参数应该触发新的 API 调用', async () => {
123
123
  mockApiFunc.mockResolvedValueOnce('result1');
124
124
  mockApiFunc.mockResolvedValueOnce('result2');
125
- await cacheApi.send('param1', 1);
126
- await cacheApi.send('param2', 2);
125
+ await cacheApi.call('param1', 1);
126
+ await cacheApi.call('param2', 2);
127
127
  expect(mockApiFunc).toHaveBeenCalledTimes(2);
128
128
  expect(mockApiFunc).toHaveBeenNthCalledWith(1, 'param1', 1);
129
129
  expect(mockApiFunc).toHaveBeenNthCalledWith(2, 'param2', 2);
@@ -131,9 +131,9 @@ describe('CacheApi', () => {
131
131
  it('应该正确更新当前缓存的 key', async () => {
132
132
  mockApiFunc.mockResolvedValueOnce('value1');
133
133
  mockApiFunc.mockResolvedValueOnce('value2');
134
- await cacheApi.send('key1', 1);
134
+ await cacheApi.call('key1', 1);
135
135
  expect(cacheApi.value).toBe('value1');
136
- await cacheApi.send('key2', 2);
136
+ await cacheApi.call('key2', 2);
137
137
  expect(cacheApi.value).toBe('value2');
138
138
  });
139
139
  });
@@ -145,9 +145,9 @@ describe('CacheApi', () => {
145
145
  return `result-${param}-${++resolveCount}`;
146
146
  });
147
147
  const [result1, result2, result3] = await Promise.all([
148
- cacheApi.send('param1', 1),
149
- cacheApi.send('param2', 2),
150
- cacheApi.send('param3', 3)
148
+ cacheApi.call('param1', 1),
149
+ cacheApi.call('param2', 2),
150
+ cacheApi.call('param3', 3)
151
151
  ]);
152
152
  expect(result1).toMatch(/result-param1-\d/);
153
153
  expect(result2).toMatch(/result-param2-\d/);
@@ -161,7 +161,7 @@ describe('CacheApi', () => {
161
161
  return 'delayed-result';
162
162
  });
163
163
  // 开始异步操作,此时 value 应该还是之前的值
164
- const promise = cacheApi.send('test', 1);
164
+ const promise = cacheApi.call('test', 1);
165
165
  // 等待一小段时间,但还没完成
166
166
  await new Promise(resolve => setTimeout(resolve, delay / 2));
167
167
  // 完成异步操作
@@ -173,13 +173,13 @@ describe('CacheApi', () => {
173
173
  describe('边缘情况', () => {
174
174
  it('应该处理 null 返回值', async () => {
175
175
  mockApiFunc.mockResolvedValue(null);
176
- const result = await cacheApi.send('test', 1);
176
+ const result = await cacheApi.call('test', 1);
177
177
  expect(result).toBeNull();
178
178
  expect(cacheApi.value).toBeNull();
179
179
  });
180
180
  it('应该处理 undefined 返回值', async () => {
181
181
  mockApiFunc.mockResolvedValue(undefined);
182
- const result = await cacheApi.send('test', 1);
182
+ const result = await cacheApi.call('test', 1);
183
183
  expect(result).toBeUndefined();
184
184
  expect(cacheApi.value).toBeUndefined();
185
185
  });
@@ -189,13 +189,13 @@ describe('CacheApi', () => {
189
189
  complexMockFunc.mockResolvedValue('complex-result');
190
190
  // 创建一个接受复杂参数的 CacheApi
191
191
  const complexCacheApi = new CacheApi(complexMockFunc);
192
- const result = await complexCacheApi.send(complexParam);
192
+ const result = await complexCacheApi.call(complexParam);
193
193
  expect(result).toBe('complex-result');
194
194
  expect(complexMockFunc).toHaveBeenCalledWith(complexParam);
195
195
  });
196
196
  it('should handle no parameters', async () => {
197
197
  const noParamApi = new CacheApi(() => Promise.resolve('no-param-result'));
198
- const result = await noParamApi.send();
198
+ const result = await noParamApi.call();
199
199
  expect(result).toBe('no-param-result');
200
200
  });
201
201
  });
@@ -221,7 +221,7 @@ describe('CacheApi', () => {
221
221
  return reaction;
222
222
  });
223
223
  mockApiFunc.mockResolvedValue('new-value');
224
- await cacheApi.send('test', 1);
224
+ await cacheApi.call('test', 1);
225
225
  // 清理
226
226
  if (typeof disposer === 'function') {
227
227
  disposer();
@@ -237,7 +237,7 @@ describe('CacheApi', () => {
237
237
  return Promise.resolve({ result: `${str}-${num}-${bool}` });
238
238
  });
239
239
  // 正确的调用
240
- expect(() => typedApi.send('test', 42, true)).not.toThrow();
240
+ expect(() => typedApi.call('test', 42, true)).not.toThrow();
241
241
  // 以下调用在 TypeScript 中会产生编译错误(在运行时测试中跳过)
242
242
  // typedApi.send('test', 'wrong-type', true) // 第二个参数应该是 number
243
243
  // typedApi.send('test', 42) // 缺少第三个参数
@@ -254,7 +254,7 @@ describe('CacheApi', () => {
254
254
  });
255
255
  mockApiFunc.mockReturnValue(promise);
256
256
  // 开始请求
257
- const sendPromise = cacheApi.send('test', 1);
257
+ const sendPromise = cacheApi.call('test', 1);
258
258
  // 此时应该是 loading 状态
259
259
  expect(cacheApi.loading).toBe(true);
260
260
  // 完成请求
@@ -267,7 +267,7 @@ describe('CacheApi', () => {
267
267
  const error = new Error('API Error');
268
268
  mockApiFunc.mockRejectedValue(error);
269
269
  try {
270
- await cacheApi.send('test', 1);
270
+ await cacheApi.call('test', 1);
271
271
  }
272
272
  catch (e) {
273
273
  // 忽略错误
@@ -282,9 +282,9 @@ describe('CacheApi', () => {
282
282
  });
283
283
  });
284
284
  // 启动三个并发请求
285
- const promise1 = cacheApi.send('req1', 1);
286
- const promise2 = cacheApi.send('req2', 2);
287
- const promise3 = cacheApi.send('req3', 3);
285
+ const promise1 = cacheApi.call('req1', 1);
286
+ const promise2 = cacheApi.call('req2', 2);
287
+ const promise3 = cacheApi.call('req3', 3);
288
288
  // 此时应该有三个请求正在进行,loading 为 true
289
289
  expect(cacheApi.loading).toBe(true);
290
290
  // 完成第一个请求
@@ -319,8 +319,8 @@ describe('CacheApi', () => {
319
319
  }
320
320
  });
321
321
  // 启动两个请求,一个成功一个失败
322
- const successPromise = cacheApi.send('success', 1);
323
- const errorPromise = cacheApi.send('error', 2);
322
+ const successPromise = cacheApi.call('success', 1);
323
+ const errorPromise = cacheApi.call('error', 2);
324
324
  expect(cacheApi.loading).toBe(true);
325
325
  // 先让失败的请求完成
326
326
  rejectError(new Error('Failed'));
@@ -345,4 +345,105 @@ describe('CacheApi', () => {
345
345
  expect(descriptor === null || descriptor === void 0 ? void 0 : descriptor.set).toBeUndefined();
346
346
  });
347
347
  });
348
+ describe('refresh 方法', () => {
349
+ it('应该在没有调用过 call 时抛出错误', async () => {
350
+ await expect(cacheApi.refresh()).rejects.toThrow('没有可用的参数来刷新数据,请先调用 call 方法');
351
+ });
352
+ it('应该使用最近一次的参数重新调用 API', async () => {
353
+ const expectedResult1 = 'first-result';
354
+ const expectedResult2 = 'refreshed-result';
355
+ mockApiFunc.mockResolvedValueOnce(expectedResult1);
356
+ mockApiFunc.mockResolvedValueOnce(expectedResult2);
357
+ // 第一次调用
358
+ await cacheApi.call('param1', 123);
359
+ expect(cacheApi.value).toBe(expectedResult1);
360
+ expect(mockApiFunc).toHaveBeenCalledTimes(1);
361
+ expect(mockApiFunc).toHaveBeenCalledWith('param1', 123);
362
+ // 刷新
363
+ const refreshResult = await cacheApi.refresh();
364
+ expect(refreshResult).toBe(expectedResult2);
365
+ expect(cacheApi.value).toBe(expectedResult2);
366
+ expect(mockApiFunc).toHaveBeenCalledTimes(2);
367
+ expect(mockApiFunc).toHaveBeenNthCalledWith(2, 'param1', 123);
368
+ });
369
+ it('应该在多次调用后使用最新的参数进行刷新', async () => {
370
+ mockApiFunc.mockResolvedValue('result');
371
+ // 第一次调用
372
+ await cacheApi.call('param1', 123);
373
+ // 第二次调用,参数不同
374
+ await cacheApi.call('param2', 456);
375
+ // 刷新应该使用最新的参数
376
+ await cacheApi.refresh();
377
+ expect(mockApiFunc).toHaveBeenCalledTimes(3);
378
+ expect(mockApiFunc).toHaveBeenNthCalledWith(3, 'param2', 456);
379
+ });
380
+ it('应该在 force=false 时正常刷新(默认行为)', async () => {
381
+ const result1 = 'cached-result';
382
+ const result2 = 'refreshed-result';
383
+ mockApiFunc.mockResolvedValueOnce(result1);
384
+ mockApiFunc.mockResolvedValueOnce(result2);
385
+ await cacheApi.call('test', 1);
386
+ const refreshResult = await cacheApi.refresh(false);
387
+ expect(refreshResult).toBe(result2);
388
+ expect(mockApiFunc).toHaveBeenCalledTimes(2);
389
+ });
390
+ it('应该在 force=true 时强制刷新并清除缓存', async () => {
391
+ const result1 = 'cached-result';
392
+ const result2 = 'force-refreshed-result';
393
+ mockApiFunc.mockResolvedValueOnce(result1);
394
+ mockApiFunc.mockResolvedValueOnce(result2);
395
+ await cacheApi.call('test', 1);
396
+ const refreshResult = await cacheApi.refresh(true);
397
+ expect(refreshResult).toBe(result2);
398
+ expect(mockApiFunc).toHaveBeenCalledTimes(2);
399
+ });
400
+ it('应该正确处理刷新时的异常', async () => {
401
+ const error = new Error('Refresh failed');
402
+ mockApiFunc.mockResolvedValueOnce('initial-result');
403
+ mockApiFunc.mockRejectedValueOnce(error);
404
+ // 第一次调用成功
405
+ await cacheApi.call('test', 1);
406
+ expect(cacheApi.value).toBe('initial-result');
407
+ // 刷新时失败
408
+ await expect(cacheApi.refresh()).rejects.toThrow('Refresh failed');
409
+ // 值应该保持不变
410
+ expect(cacheApi.value).toBe('initial-result');
411
+ });
412
+ it('应该在刷新期间正确更新 loading 状态', async () => {
413
+ let resolveFn;
414
+ const promise = new Promise((resolve) => {
415
+ resolveFn = resolve;
416
+ });
417
+ mockApiFunc.mockResolvedValueOnce('initial');
418
+ mockApiFunc.mockReturnValueOnce(promise);
419
+ // 初始调用
420
+ await cacheApi.call('test', 1);
421
+ expect(cacheApi.loading).toBe(false);
422
+ // 开始刷新
423
+ const refreshPromise = cacheApi.refresh();
424
+ expect(cacheApi.loading).toBe(true);
425
+ // 完成刷新
426
+ resolveFn('refreshed');
427
+ await refreshPromise;
428
+ expect(cacheApi.loading).toBe(false);
429
+ });
430
+ it('应该正确处理复杂参数的刷新', async () => {
431
+ const complexParam = { id: 1, data: { nested: 'value' } };
432
+ const complexMockFunc = vi.fn();
433
+ complexMockFunc.mockResolvedValue('complex-result');
434
+ const complexCacheApi = new CacheApi(complexMockFunc);
435
+ await complexCacheApi.call(complexParam);
436
+ await complexCacheApi.refresh();
437
+ expect(complexMockFunc).toHaveBeenCalledTimes(2);
438
+ expect(complexMockFunc).toHaveBeenNthCalledWith(2, complexParam);
439
+ });
440
+ it('应该支持无参数函数的刷新', async () => {
441
+ const noParamMockFunc = vi.fn();
442
+ noParamMockFunc.mockResolvedValue('no-param-result');
443
+ const noParamCacheApi = new CacheApi(noParamMockFunc);
444
+ await noParamCacheApi.call();
445
+ await noParamCacheApi.refresh();
446
+ expect(noParamMockFunc).toHaveBeenCalledTimes(2);
447
+ });
448
+ });
348
449
  });
@@ -16,14 +16,14 @@ export declare function Alert({ size, className, children, ...props }: {
16
16
  size?: keyof typeof sizes;
17
17
  className?: string;
18
18
  children: React.ReactNode;
19
- } & Omit<Headless.DialogProps, 'as' | 'className'>): React.JSX.Element;
19
+ } & Omit<Headless.DialogProps, 'as' | 'className'>): import("react/jsx-runtime").JSX.Element;
20
20
  export declare function AlertTitle({ className, ...props }: {
21
21
  className?: string;
22
- } & Omit<Headless.DialogTitleProps, 'as' | 'className'>): React.JSX.Element;
22
+ } & Omit<Headless.DialogTitleProps, 'as' | 'className'>): import("react/jsx-runtime").JSX.Element;
23
23
  export declare function AlertDescription({ className, ...props }: {
24
24
  className?: string;
25
- } & Omit<Headless.DescriptionProps<typeof Text>, 'as' | 'className'>): React.JSX.Element;
26
- export declare function AlertBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>): React.JSX.Element;
27
- export declare function AlertActions({ className, ...props }: React.ComponentPropsWithoutRef<'div'>): React.JSX.Element;
25
+ } & Omit<Headless.DescriptionProps<typeof Text>, 'as' | 'className'>): import("react/jsx-runtime").JSX.Element;
26
+ export declare function AlertBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>): import("react/jsx-runtime").JSX.Element;
27
+ export declare function AlertActions({ className, ...props }: React.ComponentPropsWithoutRef<'div'>): import("react/jsx-runtime").JSX.Element;
28
28
  export {};
29
29
  //# sourceMappingURL=alert.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../source/catalyst/alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAE7C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,QAAA,MAAM,KAAK;;;;;;;;;;CAUV,CAAA;AAED,wBAAgB,KAAK,CAAC,EACpB,IAAW,EACX,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,GAAG,IAAI,CACpF,QAAQ,CAAC,WAAW,EACpB,IAAI,GAAG,WAAW,CACnB,qBAyBA;AAED,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,GAAG,WAAW,CAAC,qBAU9E;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,GAAG,KAAK,EACT,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,IAAI,CAAC,EAAE,IAAI,GAAG,WAAW,CAAC,qBAQ3F;AAED,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,qBAEvF;AAED,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,qBAU1F"}
1
+ {"version":3,"file":"alert.d.ts","sourceRoot":"","sources":["../../source/catalyst/alert.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAE7C,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAE7B,QAAA,MAAM,KAAK;;;;;;;;;;CAUV,CAAA;AAED,wBAAgB,KAAK,CAAC,EACpB,IAAW,EACX,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,OAAO,KAAK,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,GAAG,IAAI,CACpF,QAAQ,CAAC,WAAW,EACpB,IAAI,GAAG,WAAW,CACnB,2CAyBA;AAED,wBAAgB,UAAU,CAAC,EACzB,SAAS,EACT,GAAG,KAAK,EACT,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,GAAG,WAAW,CAAC,2CAU9E;AAED,wBAAgB,gBAAgB,CAAC,EAC/B,SAAS,EACT,GAAG,KAAK,EACT,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,OAAO,IAAI,CAAC,EAAE,IAAI,GAAG,WAAW,CAAC,2CAQ3F;AAED,wBAAgB,SAAS,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,2CAEvF;AAED,wBAAgB,YAAY,CAAC,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,KAAK,CAAC,wBAAwB,CAAC,KAAK,CAAC,2CAU1F"}
@@ -0,0 +1,46 @@
1
+ var __rest = (this && this.__rest) || function (s, e) {
2
+ var t = {};
3
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
4
+ t[p] = s[p];
5
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
6
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
7
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
8
+ t[p[i]] = s[p[i]];
9
+ }
10
+ return t;
11
+ };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
13
+ import * as Headless from '@headlessui/react';
14
+ import clsx from 'clsx';
15
+ import { Text } from './text';
16
+ const sizes = {
17
+ xs: 'sm:max-w-xs',
18
+ sm: 'sm:max-w-sm',
19
+ md: 'sm:max-w-md',
20
+ lg: 'sm:max-w-lg',
21
+ xl: 'sm:max-w-xl',
22
+ '2xl': 'sm:max-w-2xl',
23
+ '3xl': 'sm:max-w-3xl',
24
+ '4xl': 'sm:max-w-4xl',
25
+ '5xl': 'sm:max-w-5xl',
26
+ };
27
+ export function Alert(_a) {
28
+ var { size = 'md', className, children } = _a, props = __rest(_a, ["size", "className", "children"]);
29
+ return (_jsxs(Headless.Dialog, Object.assign({}, props, { children: [_jsx(Headless.DialogBackdrop, { transition: true, className: "fixed inset-0 flex w-screen justify-center overflow-y-auto bg-zinc-950/15 px-2 py-2 transition duration-100 focus:outline-0 data-closed:opacity-0 data-enter:ease-out data-leave:ease-in sm:px-6 sm:py-8 lg:px-8 lg:py-16 dark:bg-zinc-950/50" }), _jsx("div", { className: "fixed inset-0 w-screen overflow-y-auto pt-6 sm:pt-0", children: _jsx("div", { className: "grid min-h-full grid-rows-[1fr_auto_1fr] justify-items-center p-8 sm:grid-rows-[1fr_auto_3fr] sm:p-4", children: _jsx(Headless.DialogPanel, { transition: true, className: clsx(className, sizes[size], 'row-start-2 w-full rounded-2xl bg-white p-8 shadow-lg ring-1 ring-zinc-950/10 sm:rounded-2xl sm:p-6 dark:bg-zinc-900 dark:ring-white/10 forced-colors:outline', 'transition duration-100 will-change-transform data-closed:opacity-0 data-enter:ease-out data-closed:data-enter:scale-95 data-leave:ease-in'), children: children }) }) })] })));
30
+ }
31
+ export function AlertTitle(_a) {
32
+ var { className } = _a, props = __rest(_a, ["className"]);
33
+ return (_jsx(Headless.DialogTitle, Object.assign({}, props, { className: clsx(className, 'text-center text-base/6 font-semibold text-balance text-zinc-950 sm:text-left sm:text-sm/6 sm:text-wrap dark:text-white') })));
34
+ }
35
+ export function AlertDescription(_a) {
36
+ var { className } = _a, props = __rest(_a, ["className"]);
37
+ return (_jsx(Headless.Description, Object.assign({ as: Text }, props, { className: clsx(className, 'mt-2 text-center text-pretty sm:text-left') })));
38
+ }
39
+ export function AlertBody(_a) {
40
+ var { className } = _a, props = __rest(_a, ["className"]);
41
+ return _jsx("div", Object.assign({}, props, { className: clsx(className, 'mt-4') }));
42
+ }
43
+ export function AlertActions(_a) {
44
+ var { className } = _a, props = __rest(_a, ["className"]);
45
+ return (_jsx("div", Object.assign({}, props, { className: clsx(className, 'mt-6 flex flex-col-reverse items-center justify-end gap-3 *:w-full sm:mt-4 sm:flex-row sm:*:w-auto') })));
46
+ }
@@ -1,5 +1,5 @@
1
1
  import type React from 'react';
2
2
  export declare function AuthLayout({ children }: {
3
3
  children: React.ReactNode;
4
- }): React.JSX.Element;
4
+ }): import("react/jsx-runtime").JSX.Element;
5
5
  //# sourceMappingURL=auth-layout.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"auth-layout.d.ts","sourceRoot":"","sources":["../../source/catalyst/auth-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,qBAQrE"}
1
+ {"version":3,"file":"auth-layout.d.ts","sourceRoot":"","sources":["../../source/catalyst/auth-layout.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAE9B,wBAAgB,UAAU,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAAE,2CAQrE"}
@@ -0,0 +1,4 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function AuthLayout({ children }) {
3
+ return (_jsx("main", { className: "flex min-h-dvh flex-col p-2", children: _jsx("div", { className: "flex grow items-center justify-center p-6 lg:rounded-lg lg:bg-white lg:p-10 lg:shadow-xs lg:ring-1 lg:ring-zinc-950/5 dark:lg:bg-zinc-900 dark:lg:ring-white/10", children: children }) }));
4
+ }
@@ -7,7 +7,7 @@ type AvatarProps = {
7
7
  alt?: string;
8
8
  className?: string;
9
9
  };
10
- export declare function Avatar({ src, square, initials, alt, className, ...props }: AvatarProps & React.ComponentPropsWithoutRef<'span'>): React.JSX.Element;
10
+ export declare function Avatar({ src, square, initials, alt, className, ...props }: AvatarProps & React.ComponentPropsWithoutRef<'span'>): import("react/jsx-runtime").JSX.Element;
11
11
  export declare const AvatarButton: React.ForwardRefExoticComponent<(AvatarProps & (Omit<Headless.ButtonProps<"button">, "className" | "as"> | Omit<Omit<{
12
12
  href: string;
13
13
  } & Omit<React.DetailedHTMLProps<React.AnchorHTMLAttributes<HTMLAnchorElement>, HTMLAnchorElement>, "ref"> & React.RefAttributes<HTMLAnchorElement>, "ref">, "className">)) & React.RefAttributes<HTMLElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../source/catalyst/avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAE7C,OAAO,KAAqB,MAAM,OAAO,CAAA;AAIzC,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,MAAM,CAAC,EACrB,GAAU,EACV,MAAc,EACd,QAAQ,EACR,GAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,WAAW,GAAG,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,qBA6BtD;AAED,eAAO,MAAM,YAAY;;+MA+BvB,CAAA"}
1
+ {"version":3,"file":"avatar.d.ts","sourceRoot":"","sources":["../../source/catalyst/avatar.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAE7C,OAAO,KAAqB,MAAM,OAAO,CAAA;AAIzC,KAAK,WAAW,GAAG;IACjB,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAED,wBAAgB,MAAM,CAAC,EACrB,GAAU,EACV,MAAc,EACd,QAAQ,EACR,GAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,WAAW,GAAG,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,2CA6BtD;AAED,eAAO,MAAM,YAAY;;+MA+BvB,CAAA"}
@@ -9,37 +9,22 @@ var __rest = (this && this.__rest) || function (s, e) {
9
9
  }
10
10
  return t;
11
11
  };
12
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
12
13
  import * as Headless from '@headlessui/react';
13
14
  import clsx from 'clsx';
14
- import React, { forwardRef } from 'react';
15
+ import { forwardRef } from 'react';
15
16
  import { TouchTarget } from './button';
16
17
  import { Link } from './link';
17
18
  export function Avatar(_a) {
18
19
  var { src = null, square = false, initials, alt = '', className } = _a, props = __rest(_a, ["src", "square", "initials", "alt", "className"]);
19
- return (<span data-slot="avatar" {...props} className={clsx(className,
20
+ return (_jsxs("span", Object.assign({ "data-slot": "avatar" }, props, { className: clsx(className,
20
21
  // Basic layout
21
22
  'inline-grid shrink-0 align-middle [--avatar-radius:20%] *:col-start-1 *:row-start-1', 'outline -outline-offset-1 outline-black/10 dark:outline-white/10',
22
23
  // Border radius
23
- square ? 'rounded-(--avatar-radius) *:rounded-(--avatar-radius)' : 'rounded-full *:rounded-full')}>
24
- {initials && (<svg className="size-full fill-current p-[5%] text-[48px] font-medium uppercase select-none" viewBox="0 0 100 100" aria-hidden={alt ? undefined : 'true'}>
25
- {alt && <title>{alt}</title>}
26
- <text x="50%" y="50%" alignmentBaseline="middle" dominantBaseline="middle" textAnchor="middle" dy=".125em">
27
- {initials}
28
- </text>
29
- </svg>)}
30
- {src && <img className="size-full" src={src} alt={alt}/>}
31
- </span>);
24
+ square ? 'rounded-(--avatar-radius) *:rounded-(--avatar-radius)' : 'rounded-full *:rounded-full'), children: [initials && (_jsxs("svg", { className: "size-full fill-current p-[5%] text-[48px] font-medium uppercase select-none", viewBox: "0 0 100 100", "aria-hidden": alt ? undefined : 'true', children: [alt && _jsx("title", { children: alt }), _jsx("text", { x: "50%", y: "50%", alignmentBaseline: "middle", dominantBaseline: "middle", textAnchor: "middle", dy: ".125em", children: initials })] })), src && _jsx("img", { className: "size-full", src: src, alt: alt })] })));
32
25
  }
33
26
  export const AvatarButton = forwardRef(function AvatarButton(_a, ref) {
34
27
  var { src, square = false, initials, alt, className } = _a, props = __rest(_a, ["src", "square", "initials", "alt", "className"]);
35
28
  let classes = clsx(className, square ? 'rounded-[20%]' : 'rounded-full', 'relative inline-grid focus:not-data-focus:outline-hidden data-focus:outline-2 data-focus:outline-offset-2 data-focus:outline-blue-500');
36
- return 'href' in props ? (<Link {...props} className={classes} ref={ref}>
37
- <TouchTarget>
38
- <Avatar src={src} square={square} initials={initials} alt={alt}/>
39
- </TouchTarget>
40
- </Link>) : (<Headless.Button {...props} className={classes} ref={ref}>
41
- <TouchTarget>
42
- <Avatar src={src} square={square} initials={initials} alt={alt}/>
43
- </TouchTarget>
44
- </Headless.Button>);
29
+ return 'href' in props ? (_jsx(Link, Object.assign({}, props, { className: classes, ref: ref, children: _jsx(TouchTarget, { children: _jsx(Avatar, { src: src, square: square, initials: initials, alt: alt }) }) }))) : (_jsx(Headless.Button, Object.assign({}, props, { className: classes, ref: ref, children: _jsx(TouchTarget, { children: _jsx(Avatar, { src: src, square: square, initials: initials, alt: alt }) }) })));
45
30
  });
@@ -23,7 +23,7 @@ declare const colors: {
23
23
  type BadgeProps = {
24
24
  color?: keyof typeof colors;
25
25
  };
26
- export declare function Badge({ color, className, ...props }: BadgeProps & React.ComponentPropsWithoutRef<'span'>): React.JSX.Element;
26
+ export declare function Badge({ color, className, ...props }: BadgeProps & React.ComponentPropsWithoutRef<'span'>): import("react/jsx-runtime").JSX.Element;
27
27
  export declare const BadgeButton: React.ForwardRefExoticComponent<(BadgeProps & ({
28
28
  className?: string;
29
29
  children: React.ReactNode;
@@ -1 +1 @@
1
- {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../source/catalyst/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAE7C,OAAO,KAAqB,MAAM,OAAO,CAAA;AAIzC,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;CA4BX,CAAA;AAED,KAAK,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,OAAO,MAAM,CAAA;CAAE,CAAA;AAEjD,wBAAgB,KAAK,CAAC,EAAE,KAAc,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,GAAG,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,qBAWjH;AAED,eAAO,MAAM,WAAW;gBAMQ,MAAM;cAAY,KAAK,CAAC,SAAS;;;gNAwB/D,CAAA"}
1
+ {"version":3,"file":"badge.d.ts","sourceRoot":"","sources":["../../source/catalyst/badge.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,mBAAmB,CAAA;AAE7C,OAAO,KAAqB,MAAM,OAAO,CAAA;AAIzC,QAAA,MAAM,MAAM;;;;;;;;;;;;;;;;;;;CA4BX,CAAA;AAED,KAAK,UAAU,GAAG;IAAE,KAAK,CAAC,EAAE,MAAM,OAAO,MAAM,CAAA;CAAE,CAAA;AAEjD,wBAAgB,KAAK,CAAC,EAAE,KAAc,EAAE,SAAS,EAAE,GAAG,KAAK,EAAE,EAAE,UAAU,GAAG,KAAK,CAAC,wBAAwB,CAAC,MAAM,CAAC,2CAWjH;AAED,eAAO,MAAM,WAAW;gBAMQ,MAAM;cAAY,KAAK,CAAC,SAAS;;;gNAwB/D,CAAA"}