@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.
- package/output/cache-api/cache-api.d.ts +7 -1
- package/output/cache-api/cache-api.d.ts.map +1 -1
- package/output/cache-api/cache-api.js +26 -6
- package/output/cache-api/cache-api.test.js +134 -33
- package/output/catalyst/alert.d.ts +5 -5
- package/output/catalyst/alert.d.ts.map +1 -1
- package/output/catalyst/alert.js +46 -0
- package/output/catalyst/auth-layout.d.ts +1 -1
- package/output/catalyst/auth-layout.d.ts.map +1 -1
- package/output/catalyst/auth-layout.js +4 -0
- package/output/catalyst/avatar.d.ts +1 -1
- package/output/catalyst/avatar.d.ts.map +1 -1
- package/output/catalyst/{avatar.jsx → avatar.js} +5 -20
- package/output/catalyst/badge.d.ts +1 -1
- package/output/catalyst/badge.d.ts.map +1 -1
- package/output/catalyst/{badge.jsx → badge.js} +4 -11
- package/output/catalyst/button.d.ts +1 -1
- package/output/catalyst/button.d.ts.map +1 -1
- package/output/catalyst/{button.jsx → button.js} +4 -10
- package/output/catalyst/checkbox.d.ts +3 -3
- package/output/catalyst/checkbox.d.ts.map +1 -1
- package/output/catalyst/{checkbox.jsx → checkbox.js} +6 -14
- package/output/catalyst/combobox.d.ts +4 -4
- package/output/catalyst/combobox.d.ts.map +1 -1
- package/output/catalyst/combobox.js +101 -0
- package/output/catalyst/description-list.d.ts +3 -3
- package/output/catalyst/description-list.d.ts.map +1 -1
- package/output/catalyst/{description-list.jsx → description-list.js} +4 -3
- package/output/catalyst/dialog.d.ts +5 -5
- package/output/catalyst/dialog.d.ts.map +1 -1
- package/output/catalyst/dialog.js +46 -0
- package/output/catalyst/divider.d.ts +1 -1
- package/output/catalyst/divider.d.ts.map +1 -1
- package/output/catalyst/{divider.jsx → divider.js} +2 -1
- package/output/catalyst/dropdown.d.ts +11 -11
- package/output/catalyst/dropdown.d.ts.map +1 -1
- package/output/catalyst/{dropdown.jsx → dropdown.js} +15 -18
- package/output/catalyst/fieldset.d.ts +7 -7
- package/output/catalyst/fieldset.d.ts.map +1 -1
- package/output/catalyst/fieldset.js +42 -0
- package/output/catalyst/heading.d.ts +2 -2
- package/output/catalyst/heading.d.ts.map +1 -1
- package/output/catalyst/{heading.jsx → heading.js} +3 -2
- package/output/catalyst/input.d.ts +1 -1
- package/output/catalyst/input.d.ts.map +1 -1
- package/output/catalyst/input.js +70 -0
- package/output/catalyst/{link.jsx → link.js} +3 -4
- package/output/catalyst/listbox.d.ts +4 -4
- package/output/catalyst/listbox.d.ts.map +1 -1
- package/output/catalyst/listbox.js +99 -0
- package/output/catalyst/navbar.d.ts +5 -5
- package/output/catalyst/navbar.d.ts.map +1 -1
- package/output/catalyst/{navbar.jsx → navbar.js} +8 -16
- package/output/catalyst/pagination.d.ts +6 -6
- package/output/catalyst/pagination.d.ts.map +1 -1
- package/output/catalyst/pagination.js +35 -0
- package/output/catalyst/radio.d.ts +3 -3
- package/output/catalyst/radio.d.ts.map +1 -1
- package/output/catalyst/{radio.jsx → radio.js} +8 -11
- package/output/catalyst/select.js +52 -0
- package/output/catalyst/sidebar-layout.d.ts +1 -1
- package/output/catalyst/sidebar-layout.d.ts.map +1 -1
- package/output/catalyst/sidebar-layout.js +18 -0
- package/output/catalyst/sidebar.d.ts +9 -9
- package/output/catalyst/sidebar.d.ts.map +1 -1
- package/output/catalyst/{sidebar.jsx → sidebar.js} +12 -20
- package/output/catalyst/stacked-layout.d.ts +1 -1
- package/output/catalyst/stacked-layout.d.ts.map +1 -1
- package/output/catalyst/stacked-layout.js +18 -0
- package/output/catalyst/switch.d.ts +3 -3
- package/output/catalyst/switch.d.ts.map +1 -1
- package/output/catalyst/{switch.jsx → switch.js} +19 -20
- package/output/catalyst/table.d.ts +6 -6
- package/output/catalyst/table.d.ts.map +1 -1
- package/output/catalyst/table.js +56 -0
- package/output/catalyst/text.d.ts +4 -4
- package/output/catalyst/text.d.ts.map +1 -1
- package/output/catalyst/{text.jsx → text.js} +5 -4
- package/output/catalyst/{textarea.jsx → textarea.js} +21 -22
- package/output/service/{service.test.jsx → service.test.js} +6 -15
- package/output/side-cache/side-cache.d.ts +1 -0
- package/output/side-cache/side-cache.d.ts.map +1 -1
- package/output/side-cache/side-cache.js +25 -1
- package/output/side-cache/side-cache.test.js +92 -0
- package/package.json +1 -1
- package/output/catalyst/alert.jsx +0 -55
- package/output/catalyst/auth-layout.jsx +0 -7
- package/output/catalyst/combobox.jsx +0 -120
- package/output/catalyst/dialog.jsx +0 -55
- package/output/catalyst/fieldset.jsx +0 -41
- package/output/catalyst/input.jsx +0 -73
- package/output/catalyst/listbox.jsx +0 -120
- package/output/catalyst/pagination.jsx +0 -52
- package/output/catalyst/select.jsx +0 -59
- package/output/catalyst/sidebar-layout.jsx +0 -58
- package/output/catalyst/stacked-layout.jsx +0 -55
- package/output/catalyst/table.jsx +0 -68
- package/output/helpers/cache-api/cache-api.d.ts +0 -13
- package/output/helpers/cache-api/cache-api.d.ts.map +0 -1
- package/output/helpers/cache-api/cache-api.js +0 -114
- package/output/helpers/cache-api/cache-api.test.d.ts +0 -2
- package/output/helpers/cache-api/cache-api.test.d.ts.map +0 -1
- package/output/helpers/cache-api/cache-api.test.js +0 -348
- package/output/helpers/cache-api/index.d.ts +0 -2
- package/output/helpers/cache-api/index.d.ts.map +0 -1
- package/output/helpers/cache-api/index.js +0 -1
- package/output/helpers/service/index.d.ts +0 -1
- package/output/helpers/service/index.d.ts.map +0 -1
- package/output/helpers/service/index.js +0 -1
- package/output/helpers/service/service.d.ts +0 -5
- package/output/helpers/service/service.d.ts.map +0 -1
- package/output/helpers/service/service.js +0 -2
- package/output/helpers/side-cache/index.d.ts +0 -2
- package/output/helpers/side-cache/index.d.ts.map +0 -1
- package/output/helpers/side-cache/index.js +0 -1
- package/output/helpers/side-cache/side-cache.d.ts +0 -10
- package/output/helpers/side-cache/side-cache.d.ts.map +0 -1
- package/output/helpers/side-cache/side-cache.js +0 -137
- package/output/helpers/side-cache/side-cache.test.d.ts +0 -2
- package/output/helpers/side-cache/side-cache.test.d.ts.map +0 -1
- package/output/helpers/side-cache/side-cache.test.js +0 -179
- package/output/helpers/use-observer/index.d.ts +0 -2
- package/output/helpers/use-observer/index.d.ts.map +0 -1
- package/output/helpers/use-observer/index.js +0 -1
- package/output/helpers/use-observer/use-observer.d.ts +0 -3
- package/output/helpers/use-observer/use-observer.d.ts.map +0 -1
- package/output/helpers/use-observer/use-observer.js +0 -16
- package/output/helpers/use-observer/use-observer.test.d.ts +0 -2
- package/output/helpers/use-observer/use-observer.test.d.ts.map +0 -1
- package/output/use-observer/use-observer.test.jsx +0 -134
- /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
|
-
|
|
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;
|
|
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
|
|
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.
|
|
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
|
|
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
|
-
|
|
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,
|
|
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.
|
|
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.
|
|
46
|
+
await cacheApi.call('param1', 123);
|
|
47
47
|
expect(cacheApi.value).toBe(result1);
|
|
48
48
|
mockApiFunc.mockResolvedValueOnce(result2);
|
|
49
|
-
await cacheApi.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
126
|
-
await cacheApi.
|
|
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.
|
|
134
|
+
await cacheApi.call('key1', 1);
|
|
135
135
|
expect(cacheApi.value).toBe('value1');
|
|
136
|
-
await cacheApi.
|
|
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.
|
|
149
|
-
cacheApi.
|
|
150
|
-
cacheApi.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
286
|
-
const promise2 = cacheApi.
|
|
287
|
-
const promise3 = cacheApi.
|
|
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.
|
|
323
|
-
const errorPromise = cacheApi.
|
|
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'>):
|
|
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'>):
|
|
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'>):
|
|
26
|
-
export declare function AlertBody({ className, ...props }: React.ComponentPropsWithoutRef<'div'>):
|
|
27
|
-
export declare function AlertActions({ className, ...props }: React.ComponentPropsWithoutRef<'div'>):
|
|
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,
|
|
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 +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,
|
|
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'>):
|
|
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,
|
|
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
|
|
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 (
|
|
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 ? (
|
|
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'>):
|
|
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,
|
|
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"}
|