@tego/web 1.3.14
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/README.md +29 -0
- package/dist/assets/4378.67e21b23.css +1 -0
- package/dist/assets/4378.9622269d.js +464 -0
- package/dist/assets/4378.9622269d.js.LICENSE.txt +1860 -0
- package/dist/assets/android-chrome-192x192.png +0 -0
- package/dist/assets/android-chrome-512x512.png +0 -0
- package/dist/assets/apple-touch-icon.png +0 -0
- package/dist/assets/async/1151.6b8adcae.js +1 -0
- package/dist/assets/async/1152.00e4d731.js +1 -0
- package/dist/assets/async/1179.964211d5.js +1 -0
- package/dist/assets/async/131.b9e3b1ea.js +1 -0
- package/dist/assets/async/1356.5ccfc7e7.js +1 -0
- package/dist/assets/async/1467.2672bba1.js +1 -0
- package/dist/assets/async/166.f5a5d259.js +1 -0
- package/dist/assets/async/1696.f16add28.js +1 -0
- package/dist/assets/async/1747.d89c6a33.js +1 -0
- package/dist/assets/async/1800.d0580635.js +1 -0
- package/dist/assets/async/1901.16a32893.js +1 -0
- package/dist/assets/async/1902.b3a213b3.js +1 -0
- package/dist/assets/async/1981.cf58ec67.js +1 -0
- package/dist/assets/async/2015.d1881f3e.js +1 -0
- package/dist/assets/async/2064.d989c659.js +1 -0
- package/dist/assets/async/208.72f66fc4.js +1 -0
- package/dist/assets/async/2204.c7696234.js +1 -0
- package/dist/assets/async/2375.971a8c23.js +1 -0
- package/dist/assets/async/2400.6b3bc1d8.js +1 -0
- package/dist/assets/async/2434.113e771a.js +1 -0
- package/dist/assets/async/2493.75d6db89.js +1 -0
- package/dist/assets/async/2518.61a2edec.js +1 -0
- package/dist/assets/async/2549.cd8d4015.js +1 -0
- package/dist/assets/async/2563.79dd0cc0.js +1 -0
- package/dist/assets/async/2606.212958ec.js +1 -0
- package/dist/assets/async/2812.97d287f4.js +1 -0
- package/dist/assets/async/2883.0a405018.js +1 -0
- package/dist/assets/async/3024.69b15566.js +1 -0
- package/dist/assets/async/304.40cf6875.js +1 -0
- package/dist/assets/async/3105.f136ab59.js +1 -0
- package/dist/assets/async/3142.8fc2d9dc.js +1 -0
- package/dist/assets/async/3310.d8deff2a.js +1 -0
- package/dist/assets/async/3352.900dab1c.js +1 -0
- package/dist/assets/async/3371.bf1c3411.js +1 -0
- package/dist/assets/async/3499.04eed93d.js +1 -0
- package/dist/assets/async/359.29df24be.js +1 -0
- package/dist/assets/async/371.59b85128.js +1 -0
- package/dist/assets/async/3829.50241783.js +1 -0
- package/dist/assets/async/388.0c3417e8.js +1 -0
- package/dist/assets/async/3940.1fe3e367.js +1 -0
- package/dist/assets/async/4128.1ee4c9d1.js +1 -0
- package/dist/assets/async/413.1c018787.js +1 -0
- package/dist/assets/async/4141.2ad67e23.js +1 -0
- package/dist/assets/async/4308.ca18943a.js +1 -0
- package/dist/assets/async/4329.ba7c7b8a.js +1 -0
- package/dist/assets/async/4403.369e9c0f.js +1 -0
- package/dist/assets/async/4500.b2bc4f59.js +1 -0
- package/dist/assets/async/4548.10dc0699.js +1 -0
- package/dist/assets/async/4563.acf73fca.js +1 -0
- package/dist/assets/async/4621.15aef3ba.js +1 -0
- package/dist/assets/async/4653.c8e74766.js +1 -0
- package/dist/assets/async/4672.dac49a3d.js +1 -0
- package/dist/assets/async/4677.224484a0.js +1 -0
- package/dist/assets/async/4775.5295dad4.js +1 -0
- package/dist/assets/async/4785.2e9285c0.js +1 -0
- package/dist/assets/async/4888.79c31031.js +1 -0
- package/dist/assets/async/499.a3937d88.js +1 -0
- package/dist/assets/async/5050.5067f8a1.js +1 -0
- package/dist/assets/async/5100.6c1df095.js +1 -0
- package/dist/assets/async/5101.58d1b0eb.js +1 -0
- package/dist/assets/async/5222.ea438e67.js +1 -0
- package/dist/assets/async/5239.88b98c1e.js +1 -0
- package/dist/assets/async/5296.264999c4.js +1 -0
- package/dist/assets/async/5319.bf507398.js +1 -0
- package/dist/assets/async/5429.f6e79d30.js +1 -0
- package/dist/assets/async/544.ed7f02be.js +1 -0
- package/dist/assets/async/5595.a787d360.js +1 -0
- package/dist/assets/async/5845.578ec465.js +1 -0
- package/dist/assets/async/5902.2768d6b3.js +1 -0
- package/dist/assets/async/6263.dd63243a.js +1 -0
- package/dist/assets/async/6340.1e1737d4.js +1 -0
- package/dist/assets/async/6360.38331c04.js +1 -0
- package/dist/assets/async/641.a97d5a6b.js +1 -0
- package/dist/assets/async/6459.3a4b0b26.js +1 -0
- package/dist/assets/async/6495.7f7e42f4.js +1 -0
- package/dist/assets/async/6611.e6c123ec.js +1 -0
- package/dist/assets/async/6636.401303f5.js +1 -0
- package/dist/assets/async/6676.3dafddff.js +1 -0
- package/dist/assets/async/6717.4c9dd409.js +1 -0
- package/dist/assets/async/6791.6614240a.js +1 -0
- package/dist/assets/async/686.e3bef76d.js +1 -0
- package/dist/assets/async/688.494ce4c5.js +1 -0
- package/dist/assets/async/6916.33872615.js +1 -0
- package/dist/assets/async/6947.0844785c.js +1 -0
- package/dist/assets/async/6987.a7e06c7c.js +1 -0
- package/dist/assets/async/700.b00ec145.js +1 -0
- package/dist/assets/async/7004.f35c81a5.js +1 -0
- package/dist/assets/async/7038.ad773261.js +1 -0
- package/dist/assets/async/716.99bdcb10.js +1 -0
- package/dist/assets/async/7180.2d0e2000.js +1 -0
- package/dist/assets/async/7189.2c89ca76.js +1 -0
- package/dist/assets/async/720.209cbef4.js +1 -0
- package/dist/assets/async/7228.e808c0c4.js +1 -0
- package/dist/assets/async/7250.9b42c00f.js +1 -0
- package/dist/assets/async/7251.6b060f8c.js +1 -0
- package/dist/assets/async/729.f65519dc.js +1 -0
- package/dist/assets/async/7417.6abef294.js +1 -0
- package/dist/assets/async/7431.5a9b8adc.js +1 -0
- package/dist/assets/async/7454.cbc58ee0.js +1 -0
- package/dist/assets/async/7467.7d4e8998.js +1 -0
- package/dist/assets/async/7482.f43e2a2c.js +1 -0
- package/dist/assets/async/7667.a6e9b7ac.js +1 -0
- package/dist/assets/async/7668.960ff944.js +1 -0
- package/dist/assets/async/770.d1b65df1.js +1 -0
- package/dist/assets/async/7783.a49565f1.js +1 -0
- package/dist/assets/async/7816.c1dd8dad.js +1 -0
- package/dist/assets/async/7937.505a4cb9.js +1 -0
- package/dist/assets/async/7943.97fcff31.js +1 -0
- package/dist/assets/async/7988.93885c8e.js +1 -0
- package/dist/assets/async/7994.c1abb4ec.js +1 -0
- package/dist/assets/async/7995.9ef8dc91.js +1 -0
- package/dist/assets/async/8031.77b7d2fc.js +1 -0
- package/dist/assets/async/8048.8331d16c.js +1 -0
- package/dist/assets/async/8168.2ea172bb.js +1 -0
- package/dist/assets/async/8194.4022b0b0.js +1 -0
- package/dist/assets/async/8195.06557e98.js +1 -0
- package/dist/assets/async/8471.b83bba92.js +1 -0
- package/dist/assets/async/8566.8642e42a.js +1 -0
- package/dist/assets/async/864.a840f5b4.js +1 -0
- package/dist/assets/async/8683.8c7cf85c.js +1 -0
- package/dist/assets/async/8712.75f3fe84.js +1 -0
- package/dist/assets/async/8731.b9a3d14a.js +1 -0
- package/dist/assets/async/8733.4e56ce45.js +1 -0
- package/dist/assets/async/9094.ea8b166b.js +1 -0
- package/dist/assets/async/9178.7ba86a75.js +1 -0
- package/dist/assets/async/9205.c294abf0.js +1 -0
- package/dist/assets/async/9215.d22f7b18.js +1 -0
- package/dist/assets/async/9253.f064d673.js +1 -0
- package/dist/assets/async/9274.36f41f3c.js +1 -0
- package/dist/assets/async/9278.01eeb29e.js +1 -0
- package/dist/assets/async/9281.6516b55e.js +1 -0
- package/dist/assets/async/9343.2916432d.js +1 -0
- package/dist/assets/async/9353.a22c5d31.js +1 -0
- package/dist/assets/async/9407.6e395dec.js +1 -0
- package/dist/assets/async/942.073c0889.js +1 -0
- package/dist/assets/async/9444.966dde99.js +1 -0
- package/dist/assets/async/9446.721084a6.js +1 -0
- package/dist/assets/async/9564.77505ac2.js +1 -0
- package/dist/assets/async/9599.3f3d2f0e.js +1 -0
- package/dist/assets/async/964.70dce3e9.js +1 -0
- package/dist/assets/async/9715.2e94ce04.js +1 -0
- package/dist/assets/async/9857.e10cc657.js +1 -0
- package/dist/assets/async/9859.576a953b.js +1 -0
- package/dist/assets/async/9861.45bc620c.js +1 -0
- package/dist/assets/async/9941.16f336f3.js +1 -0
- package/dist/assets/index.2e0e2ff5.js +2 -0
- package/dist/assets/index.2e0e2ff5.js.LICENSE.txt +6 -0
- package/dist/assets/index.3937c8bb.css +1 -0
- package/dist/assets/lib-axios.8b83dd59.js +2 -0
- package/dist/assets/lib-axios.8b83dd59.js.LICENSE.txt +18 -0
- package/dist/assets/lib-react.a86740e1.js +2 -0
- package/dist/assets/lib-react.a86740e1.js.LICENSE.txt +48 -0
- package/dist/assets/lib-router.da995a7a.js +2 -0
- package/dist/assets/lib-router.da995a7a.js.LICENSE.txt +32 -0
- package/dist/browser-checker.js +215 -0
- package/dist/favicon.ico +0 -0
- package/dist/global.css +63 -0
- package/dist/index.html +10 -0
- package/dist/manifest.webmanifest +1 -0
- package/dist/tachybase-logo.png +0 -0
- package/package.json +26 -0
- package/public/browser-checker.js +215 -0
- package/public/global.css +63 -0
- package/public/tachybase-logo.png +0 -0
- package/rsbuild.config.ts +85 -0
- package/src/.plugins/index.ts +4 -0
- package/src/App.tsx +29 -0
- package/src/PluginWeb.ts +29 -0
- package/src/assets/android-chrome-192x192.png +0 -0
- package/src/assets/android-chrome-512x512.png +0 -0
- package/src/assets/apple-touch-icon.png +0 -0
- package/src/assets/favicon.ico +0 -0
- package/src/assets/index.html +10 -0
- package/src/dynamic-import.ts +19 -0
- package/src/env.d.ts +3 -0
- package/src/index.tsx +10 -0
- package/tsconfig.json +25 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
var showLog = true;
|
|
2
|
+
function log(m) {
|
|
3
|
+
if (window.console && showLog) {
|
|
4
|
+
console.log(m);
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
function css_browser_selector(u) {
|
|
8
|
+
var uaInfo = {},
|
|
9
|
+
screens = [320, 480, 640, 768, 1024, 1152, 1280, 1440, 1680, 1920, 2560],
|
|
10
|
+
allScreens = screens.length,
|
|
11
|
+
ua = u.toLowerCase(),
|
|
12
|
+
is = function (t) {
|
|
13
|
+
return RegExp(t, 'i').test(ua);
|
|
14
|
+
},
|
|
15
|
+
version = function (p, n) {
|
|
16
|
+
n = n.replace('.', '_');
|
|
17
|
+
var i = n.indexOf('_'),
|
|
18
|
+
ver = '';
|
|
19
|
+
while (i > 0) {
|
|
20
|
+
ver += ' ' + p + n.substring(0, i);
|
|
21
|
+
i = n.indexOf('_', i + 1);
|
|
22
|
+
}
|
|
23
|
+
ver += ' ' + p + n;
|
|
24
|
+
return ver;
|
|
25
|
+
},
|
|
26
|
+
g = 'gecko',
|
|
27
|
+
w = 'webkit',
|
|
28
|
+
c = 'chrome',
|
|
29
|
+
f = 'firefox',
|
|
30
|
+
s = 'safari',
|
|
31
|
+
o = 'opera',
|
|
32
|
+
m = 'mobile',
|
|
33
|
+
a = 'android',
|
|
34
|
+
bb = 'blackberry',
|
|
35
|
+
lang = 'lang_',
|
|
36
|
+
dv = 'device_',
|
|
37
|
+
html = document.documentElement,
|
|
38
|
+
b = [
|
|
39
|
+
(!/opera|webtv/i.test(ua) && /msie\s(\d+)/.test(ua)) || /trident\/.*rv:([0-9]{1,}[.0-9]{0,})/.test(ua)
|
|
40
|
+
? 'ie ie' + (/trident\/4\.0/.test(ua) ? '8' : RegExp.$1 == '11.0' ? '11' : RegExp.$1)
|
|
41
|
+
: is('firefox/')
|
|
42
|
+
? g +
|
|
43
|
+
' ' +
|
|
44
|
+
f +
|
|
45
|
+
(/firefox\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)
|
|
46
|
+
? ' ' + f + RegExp.$2 + ' ' + f + RegExp.$2 + '_' + RegExp.$4
|
|
47
|
+
: '')
|
|
48
|
+
: is('gecko/')
|
|
49
|
+
? g
|
|
50
|
+
: is('opera')
|
|
51
|
+
? o +
|
|
52
|
+
(/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)
|
|
53
|
+
? ' ' + o + RegExp.$2 + ' ' + o + RegExp.$2 + '_' + RegExp.$4
|
|
54
|
+
: /opera(\s|\/)(\d+)\.(\d+)/.test(ua)
|
|
55
|
+
? ' ' + o + RegExp.$2 + ' ' + o + RegExp.$2 + '_' + RegExp.$3
|
|
56
|
+
: '')
|
|
57
|
+
: is('konqueror')
|
|
58
|
+
? 'konqueror'
|
|
59
|
+
: is('blackberry')
|
|
60
|
+
? bb +
|
|
61
|
+
(/Version\/(\d+)(\.(\d+)+)/i.test(ua)
|
|
62
|
+
? ' ' + bb + RegExp.$1 + ' ' + bb + RegExp.$1 + RegExp.$2.replace('.', '_')
|
|
63
|
+
: /Blackberry ?(([0-9]+)([a-z]?))[/|;]/gi.test(ua)
|
|
64
|
+
? ' ' + bb + RegExp.$2 + (RegExp.$3 ? ' ' + bb + RegExp.$2 + RegExp.$3 : '')
|
|
65
|
+
: '')
|
|
66
|
+
: is('android')
|
|
67
|
+
? a +
|
|
68
|
+
(/Version\/(\d+)(\.(\d+))+/i.test(ua)
|
|
69
|
+
? ' ' + a + RegExp.$1 + ' ' + a + RegExp.$1 + RegExp.$2.replace('.', '_')
|
|
70
|
+
: '') +
|
|
71
|
+
(/Android (.+); (.+) Build/i.test(ua)
|
|
72
|
+
? ' ' + dv + RegExp.$2.replace(/ /g, '_').replace(/-/g, '_')
|
|
73
|
+
: '')
|
|
74
|
+
: is('chrome')
|
|
75
|
+
? w +
|
|
76
|
+
' ' +
|
|
77
|
+
c +
|
|
78
|
+
(/chrome\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)
|
|
79
|
+
? ' ' + c + RegExp.$2 + (RegExp.$4 > 0 ? ' ' + c + RegExp.$2 + '_' + RegExp.$4 : '')
|
|
80
|
+
: '')
|
|
81
|
+
: is('iron')
|
|
82
|
+
? w + ' iron'
|
|
83
|
+
: is('applewebkit/')
|
|
84
|
+
? w +
|
|
85
|
+
' ' +
|
|
86
|
+
s +
|
|
87
|
+
(/version\/((\d+)(\.(\d+))(\.\d+)*)/.test(ua)
|
|
88
|
+
? ' ' + s + RegExp.$2 + ' ' + s + RegExp.$2 + RegExp.$3.replace('.', '_')
|
|
89
|
+
: / Safari\/(\d+)/i.test(ua)
|
|
90
|
+
? RegExp.$1 == '419' || RegExp.$1 == '417' || RegExp.$1 == '416' || RegExp.$1 == '412'
|
|
91
|
+
? ' ' + s + '2_0'
|
|
92
|
+
: RegExp.$1 == '312'
|
|
93
|
+
? ' ' + s + '1_3'
|
|
94
|
+
: RegExp.$1 == '125'
|
|
95
|
+
? ' ' + s + '1_2'
|
|
96
|
+
: RegExp.$1 == '85'
|
|
97
|
+
? ' ' + s + '1_0'
|
|
98
|
+
: ''
|
|
99
|
+
: '')
|
|
100
|
+
: is('mozilla/')
|
|
101
|
+
? g
|
|
102
|
+
: '',
|
|
103
|
+
is('android|mobi|mobile|j2me|iphone|ipod|ipad|blackberry|playbook|kindle|silk') ? m : '',
|
|
104
|
+
is('j2me')
|
|
105
|
+
? 'j2me'
|
|
106
|
+
: is('ipad|ipod|iphone')
|
|
107
|
+
? (/CPU( iPhone)? OS (\d+[_|.]\d+([_|.]\d+)*)/i.test(ua) ? 'ios' + version('ios', RegExp.$2) : '') +
|
|
108
|
+
' ' +
|
|
109
|
+
(/(ip(ad|od|hone))/gi.test(ua) ? RegExp.$1 : '')
|
|
110
|
+
: is('playbook')
|
|
111
|
+
? 'playbook'
|
|
112
|
+
: is('kindle|silk')
|
|
113
|
+
? 'kindle'
|
|
114
|
+
: is('playbook')
|
|
115
|
+
? 'playbook'
|
|
116
|
+
: is('mac')
|
|
117
|
+
? 'mac' +
|
|
118
|
+
(/mac os x ((\d+)[.|_](\d+))/.test(ua)
|
|
119
|
+
? ' mac' + RegExp.$2 + ' mac' + RegExp.$1.replace('.', '_')
|
|
120
|
+
: '')
|
|
121
|
+
: is('win')
|
|
122
|
+
? 'win' +
|
|
123
|
+
(is('windows nt 6.2')
|
|
124
|
+
? ' win8'
|
|
125
|
+
: is('windows nt 6.1')
|
|
126
|
+
? ' win7'
|
|
127
|
+
: is('windows nt 6.0')
|
|
128
|
+
? ' vista'
|
|
129
|
+
: is('windows nt 5.2') || is('windows nt 5.1')
|
|
130
|
+
? ' win_xp'
|
|
131
|
+
: is('windows nt 5.0')
|
|
132
|
+
? ' win_2k'
|
|
133
|
+
: is('windows nt 4.0') || is('WinNT4.0')
|
|
134
|
+
? ' win_nt'
|
|
135
|
+
: '')
|
|
136
|
+
: is('freebsd')
|
|
137
|
+
? 'freebsd'
|
|
138
|
+
: is('x11|linux')
|
|
139
|
+
? 'linux'
|
|
140
|
+
: '',
|
|
141
|
+
/[; |[](([a-z]{2})(-[a-z]{2})?)[)|;|\]]/i.test(ua)
|
|
142
|
+
? (lang + RegExp.$2).replace('-', '_') + (RegExp.$3 != '' ? (' ' + lang + RegExp.$1).replace('-', '_') : '')
|
|
143
|
+
: '',
|
|
144
|
+
is('ipad|iphone|ipod') && !is('safari') ? 'ipad_app' : '',
|
|
145
|
+
];
|
|
146
|
+
console.debug(ua);
|
|
147
|
+
function screenSize() {
|
|
148
|
+
var w = window.outerWidth || html.clientWidth;
|
|
149
|
+
var h = window.outerHeight || html.clientHeight;
|
|
150
|
+
uaInfo.orientation = w < h ? 'portrait' : 'landscape';
|
|
151
|
+
html.className = html.className.replace(/ ?orientation_\w+/g, '').replace(/ [min|max|cl]+[w|h]_\d+/g, '');
|
|
152
|
+
for (var i = allScreens - 1; i >= 0; i--) {
|
|
153
|
+
if (w >= screens[i]) {
|
|
154
|
+
uaInfo.maxw = screens[i];
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
var widthClasses = '';
|
|
159
|
+
for (var info in uaInfo) {
|
|
160
|
+
widthClasses += ' ' + info + '_' + uaInfo[info];
|
|
161
|
+
}
|
|
162
|
+
html.className = html.className + widthClasses;
|
|
163
|
+
return widthClasses;
|
|
164
|
+
}
|
|
165
|
+
window.onresize = screenSize;
|
|
166
|
+
screenSize();
|
|
167
|
+
function retina() {
|
|
168
|
+
var r = window.devicePixelRatio > 1;
|
|
169
|
+
if (r) {
|
|
170
|
+
html.className += ' retina';
|
|
171
|
+
} else {
|
|
172
|
+
html.className += ' non-retina';
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
retina();
|
|
176
|
+
var cssbs = b.join(' ') + ' js ';
|
|
177
|
+
html.className = (cssbs + html.className.replace(/\b(no[-|_]?)?js\b/g, '')).replace(/^ /, '').replace(/ +/g, ' ');
|
|
178
|
+
return cssbs;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// 适配平板设备
|
|
182
|
+
function tabletOrWebScreen() {
|
|
183
|
+
var width = Math.max(screen.width, screen.height);
|
|
184
|
+
var height = Math.min(screen.width, screen.height);
|
|
185
|
+
if (width >= 768 && height >= 768) {
|
|
186
|
+
return true;
|
|
187
|
+
}
|
|
188
|
+
return false;
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
function browser_check(u) {
|
|
192
|
+
try {
|
|
193
|
+
var isTablet = RegExp('ipad|tablet', 'i').test(u);
|
|
194
|
+
|
|
195
|
+
var isTabletScreen = tabletOrWebScreen();
|
|
196
|
+
|
|
197
|
+
if (isTablet || isTabletScreen) {
|
|
198
|
+
var meta = document.querySelector('meta[name="viewport"]');
|
|
199
|
+
if (!meta) {
|
|
200
|
+
// 如果没有找到,创建一个新的meta标签
|
|
201
|
+
meta = document.createElement('meta');
|
|
202
|
+
meta.setAttribute('name', 'viewport');
|
|
203
|
+
document.head.appendChild(meta);
|
|
204
|
+
}
|
|
205
|
+
// 设置initial-scale
|
|
206
|
+
meta.setAttribute('content', 'initial-scale=1.0');
|
|
207
|
+
}
|
|
208
|
+
} catch (error) {
|
|
209
|
+
console.log('browser_check', error);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
css_browser_selector(navigator.userAgent);
|
|
214
|
+
|
|
215
|
+
browser_check(navigator.userAgent);
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
#root {
|
|
2
|
+
width: 100%;
|
|
3
|
+
height: 100%;
|
|
4
|
+
}
|
|
5
|
+
/* width */
|
|
6
|
+
.win ::-webkit-scrollbar {
|
|
7
|
+
width: 8px;
|
|
8
|
+
height: 8px;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/* Track */
|
|
12
|
+
.win ::-webkit-scrollbar-track {
|
|
13
|
+
background: var(--colorBgScrollTrack);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/* Handle */
|
|
17
|
+
.win ::-webkit-scrollbar-thumb {
|
|
18
|
+
background: var(--colorBgScrollBar);
|
|
19
|
+
border-radius: 4px;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/* Handle on hover */
|
|
23
|
+
.win ::-webkit-scrollbar-thumb:hover {
|
|
24
|
+
background: var(--colorBgScrollBarHover);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
.win ::-webkit-scrollbar-thumb:active {
|
|
28
|
+
background: var(--colorBgScrollBarActive);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
.win .rc-virtual-list-scrollbar-thumb {
|
|
32
|
+
background: var(--colorBgScrollBar);
|
|
33
|
+
}
|
|
34
|
+
.win .rc-virtual-list-scrollbar-thumb:hover {
|
|
35
|
+
background: var(--colorBgScrollBarHover);
|
|
36
|
+
}
|
|
37
|
+
.win .rc-virtual-list-scrollbar-thumb:active {
|
|
38
|
+
background: var(--colorBgScrollBarActive);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
body a {
|
|
42
|
+
color: var(--colorPrimaryText);
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
body a:hover {
|
|
46
|
+
color: var(--colorPrimaryTextHover);
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
body a:active {
|
|
50
|
+
color: var(--colorPrimaryTextActive);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
.ant-btn-link {
|
|
54
|
+
color: var(--colorPrimaryText);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
.ant-btn-link:hover {
|
|
58
|
+
color: var(--colorPrimaryTextHover);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
.ant-btn-link:active {
|
|
62
|
+
color: var(--colorPrimaryTextActive);
|
|
63
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
|
|
3
|
+
import { defineConfig } from '@rsbuild/core';
|
|
4
|
+
import { pluginLess } from '@rsbuild/plugin-less';
|
|
5
|
+
import { pluginNodePolyfill } from '@rsbuild/plugin-node-polyfill';
|
|
6
|
+
import { pluginReact } from '@rsbuild/plugin-react';
|
|
7
|
+
import { getUmiConfig, IndexGenerator } from '@tego/devkit';
|
|
8
|
+
|
|
9
|
+
const config = getUmiConfig();
|
|
10
|
+
|
|
11
|
+
const pluginDirs = ['packages'].map((item) => path.join(process.cwd(), item));
|
|
12
|
+
|
|
13
|
+
const outputPluginPath = path.join(__dirname, 'src/.plugins');
|
|
14
|
+
const indexGenerator = new IndexGenerator(outputPluginPath, pluginDirs);
|
|
15
|
+
indexGenerator.generate();
|
|
16
|
+
|
|
17
|
+
const rsDefined = {};
|
|
18
|
+
for (const key in config.define) {
|
|
19
|
+
rsDefined[key] = JSON.stringify(config.define[key]);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default defineConfig({
|
|
23
|
+
html: {
|
|
24
|
+
title: 'Tachybase',
|
|
25
|
+
inject: 'body',
|
|
26
|
+
template: 'src/assets/index.html',
|
|
27
|
+
meta: [{ viewport: 'initial-scale=0.1' }],
|
|
28
|
+
favicon: 'src/assets/favicon.ico',
|
|
29
|
+
appIcon: {
|
|
30
|
+
name: 'Tachybase',
|
|
31
|
+
icons: [
|
|
32
|
+
{
|
|
33
|
+
src: 'src/assets/apple-touch-icon.png',
|
|
34
|
+
size: 180,
|
|
35
|
+
target: 'apple-touch-icon',
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
src: 'src/assets/android-chrome-192x192.png',
|
|
39
|
+
size: 192,
|
|
40
|
+
target: 'web-app-manifest',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
src: 'src/assets/android-chrome-512x512.png',
|
|
44
|
+
size: 512,
|
|
45
|
+
target: 'web-app-manifest',
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
source: {
|
|
51
|
+
define: {
|
|
52
|
+
...rsDefined,
|
|
53
|
+
'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV),
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
dev: {
|
|
57
|
+
hmr: false,
|
|
58
|
+
writeToDisk: false,
|
|
59
|
+
},
|
|
60
|
+
output: {
|
|
61
|
+
distPath: {
|
|
62
|
+
js: 'assets',
|
|
63
|
+
css: 'assets',
|
|
64
|
+
image: 'assets',
|
|
65
|
+
svg: 'assets',
|
|
66
|
+
font: 'assets',
|
|
67
|
+
media: 'assets',
|
|
68
|
+
},
|
|
69
|
+
minify: true,
|
|
70
|
+
overrideBrowserslist: ['chrome >= 69', 'edge >= 79', 'safari >= 12'],
|
|
71
|
+
},
|
|
72
|
+
server: {
|
|
73
|
+
port: Number(process.env.PORT || 3000),
|
|
74
|
+
open: !process.env.NO_OPEN,
|
|
75
|
+
proxy: {
|
|
76
|
+
...config.proxy,
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
plugins: [pluginReact(), pluginLess(), pluginNodePolyfill()],
|
|
80
|
+
resolve: {
|
|
81
|
+
alias: {
|
|
82
|
+
...config.alias,
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
});
|
package/src/App.tsx
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Application } from '@tachybase/client';
|
|
2
|
+
|
|
3
|
+
import devDynamicImport from './dynamic-import';
|
|
4
|
+
import { PluginWeb } from './PluginWeb';
|
|
5
|
+
|
|
6
|
+
declare global {
|
|
7
|
+
interface Window {
|
|
8
|
+
__tachybase_public_path__: string;
|
|
9
|
+
__tachybase_api_base_url__: string;
|
|
10
|
+
__tachybase_ws_url__: string;
|
|
11
|
+
__tachybase_ws_path__: string;
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export const app = new Application({
|
|
16
|
+
apiClient: {
|
|
17
|
+
baseURL: window['__tachybase_api_base_url__'] || process.env.API_BASE_URL || '/api/',
|
|
18
|
+
},
|
|
19
|
+
publicPath: window['__tachybase_public_path__'] || process.env.APP_PUBLIC_PATH || '/',
|
|
20
|
+
plugins: [PluginWeb],
|
|
21
|
+
ws: {
|
|
22
|
+
url: window['__tachybase_ws_url__'] || process.env.WEBSOCKET_URL || '',
|
|
23
|
+
basename: window['__tachybase_ws_path__'] || process.env.WS_PATH || '/ws',
|
|
24
|
+
},
|
|
25
|
+
loadRemotePlugins: true,
|
|
26
|
+
devDynamicImport: devDynamicImport as any,
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
export default app.getRootComponent();
|
package/src/PluginWeb.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Application, BuiltInPlugin, Plugin } from '@tachybase/client';
|
|
2
|
+
|
|
3
|
+
const getCurrentTimezone = () => {
|
|
4
|
+
const timezoneOffset = new Date().getTimezoneOffset() / -60;
|
|
5
|
+
const timezone = String(Math.abs(timezoneOffset)).padStart(2, '0') + ':00';
|
|
6
|
+
return (timezoneOffset > 0 ? '+' : '-') + timezone;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
function getBasename(app: Application) {
|
|
10
|
+
const publicPath = app.getPublicPath();
|
|
11
|
+
const pattern = `^${publicPath}apps/([^/]*)/`;
|
|
12
|
+
const match = location.pathname.match(new RegExp(pattern));
|
|
13
|
+
return match ? match[0] : publicPath;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export class PluginWeb extends Plugin {
|
|
17
|
+
async afterAdd() {
|
|
18
|
+
this.router.setType('browser');
|
|
19
|
+
this.router.setBasename(getBasename(this.app));
|
|
20
|
+
this.app.apiClient.axios.interceptors.request.use((config) => {
|
|
21
|
+
config.headers['X-Hostname'] = window?.location?.hostname;
|
|
22
|
+
config.headers['X-Timezone'] = getCurrentTimezone();
|
|
23
|
+
return config;
|
|
24
|
+
});
|
|
25
|
+
await this.app.pm.add(BuiltInPlugin);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export default PluginWeb;
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import * as others from '../../../packages/module-pdf/src/client';
|
|
2
|
+
|
|
3
|
+
async function devDynamicImport(packageName: string) {
|
|
4
|
+
if (process.env.NODE_ENV !== 'production') {
|
|
5
|
+
const packageMap = (await import('./.plugins/packageMap.json')).default as Record<string, string>;
|
|
6
|
+
const fileName = packageMap[packageName];
|
|
7
|
+
if (!fileName) {
|
|
8
|
+
return Promise.resolve(null);
|
|
9
|
+
}
|
|
10
|
+
// FIXME: 需要处理这个模块的加载问题
|
|
11
|
+
if (packageName === '@tachybase/module-pdf') {
|
|
12
|
+
return { ...others };
|
|
13
|
+
}
|
|
14
|
+
return await import(`./.plugins/packages/${fileName}`);
|
|
15
|
+
} else {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export default devDynamicImport;
|
package/src/env.d.ts
ADDED
package/src/index.tsx
ADDED
package/tsconfig.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"baseUrl": ".",
|
|
4
|
+
"lib": ["DOM", "ES2020"],
|
|
5
|
+
"jsx": "react-jsx",
|
|
6
|
+
"target": "ES2020",
|
|
7
|
+
"noEmit": true,
|
|
8
|
+
"skipLibCheck": true,
|
|
9
|
+
"useDefineForClassFields": true,
|
|
10
|
+
|
|
11
|
+
/* modules */
|
|
12
|
+
"module": "ESNext",
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"resolveJsonModule": true,
|
|
15
|
+
"moduleResolution": "Bundler",
|
|
16
|
+
"allowImportingTsExtensions": true,
|
|
17
|
+
|
|
18
|
+
/* type checking */
|
|
19
|
+
"strict": true,
|
|
20
|
+
"noUnusedLocals": true,
|
|
21
|
+
"noUnusedParameters": true
|
|
22
|
+
},
|
|
23
|
+
"exclude": ["node_modules"],
|
|
24
|
+
"include": ["src/"]
|
|
25
|
+
}
|