@promakeai/cli 0.7.1 → 0.8.1

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.
@@ -1,233 +1,233 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <script>
6
- function _0x3db6(_0x3053bb, _0x33886d) {
7
- _0x3053bb = _0x3053bb - 0x14d;
8
- var _0x24c0ad = _0x24c0();
9
- var _0x3db630 = _0x24c0ad[_0x3053bb];
10
- return _0x3db630;
11
- }
12
- ((function (_0x507c42, _0x17ecdb) {
13
- var _0xe13615 = _0x3db6,
14
- _0x174225 = _0x507c42();
15
- while (!![]) {
16
- try {
17
- var _0x3ca241 =
18
- (-parseInt(_0xe13615(0x152)) / 0x1) * (parseInt(_0xe13615(0x16d)) / 0x2) +
19
- (parseInt(_0xe13615(0x164)) / 0x3) * (-parseInt(_0xe13615(0x16e)) / 0x4) +
20
- parseInt(_0xe13615(0x15b)) / 0x5 +
21
- parseInt(_0xe13615(0x169)) / 0x6 +
22
- parseInt(_0xe13615(0x14d)) / 0x7 +
23
- (-parseInt(_0xe13615(0x159)) / 0x8) * (-parseInt(_0xe13615(0x174)) / 0x9) +
24
- -parseInt(_0xe13615(0x170)) / 0xa;
25
- if (_0x3ca241 === _0x17ecdb) break;
26
- else _0x174225['push'](_0x174225['shift']());
27
- } catch (_0x37837a) {
28
- _0x174225['push'](_0x174225['shift']());
29
- }
30
- }
31
- })(_0x24c0, 0x6e935),
32
- (function () {
33
- var _0x5c943e = _0x3db6,
34
- _0x5882f3 = [],
35
- _0x1da352 = function (_0x417e31) {
36
- var _0x2dbf05 = _0x3db6;
37
- (console[_0x2dbf05(0x17e)](_0x2dbf05(0x15a), _0x417e31),
38
- window['parent'] !== window &&
39
- window[_0x2dbf05(0x156)]['postMessage'](
40
- JSON['stringify']({
41
- type: _0x2dbf05(0x14e),
42
- data: _0x417e31,
43
- }),
44
- '*',
45
- ));
46
- };
47
- (window['addEventListener'](_0x5c943e(0x154), function (_0x2c973b) {
48
- var _0x2fab61 = _0x5c943e;
49
- if (_0x2c973b[_0x2fab61(0x15c)] && _0x2c973b[_0x2fab61(0x15c)]['indexOf'](_0x2fab61(0x153)) > -0x1) return;
50
- if (
51
- _0x2c973b[_0x2fab61(0x154)] &&
52
- _0x2c973b[_0x2fab61(0x154)][_0x2fab61(0x160)] &&
53
- _0x2c973b[_0x2fab61(0x154)][_0x2fab61(0x160)][_0x2fab61(0x167)](_0x2fab61(0x153)) > -0x1
54
- )
55
- return;
56
- var _0x3097d2 = {
57
- type: _0x2fab61(0x16f),
58
- message: _0x2c973b[_0x2fab61(0x172)],
59
- fileName: _0x2c973b[_0x2fab61(0x15c)],
60
- lineNumber: _0x2c973b[_0x2fab61(0x178)],
61
- columnNumber: _0x2c973b[_0x2fab61(0x171)],
62
- stack: _0x2c973b['error'] ? _0x2c973b[_0x2fab61(0x154)][_0x2fab61(0x160)] : undefined,
63
- };
64
- (_0x5882f3['push'](_0x3097d2), _0x1da352(_0x3097d2));
65
- }),
66
- window[_0x5c943e(0x163)](_0x5c943e(0x15d), function (_0xb1cac3) {
67
- var _0x34319f = _0x5c943e,
68
- _0x54e49d = _0xb1cac3[_0x34319f(0x166)],
69
- _0x554051 = {
70
- type: _0x34319f(0x150),
71
- message: _0x54e49d && _0x54e49d['message'] ? _0x54e49d['message'] : String(_0x54e49d),
72
- stack: _0x54e49d ? _0x54e49d[_0x34319f(0x160)] : undefined,
73
- fileName: _0x54e49d ? _0x54e49d[_0x34319f(0x17a)] : undefined,
74
- lineNumber: _0x54e49d ? _0x54e49d[_0x34319f(0x16a)] : undefined,
75
- columnNumber: _0x54e49d ? _0x54e49d[_0x34319f(0x177)] : undefined,
76
- };
77
- (_0x5882f3[_0x34319f(0x162)](_0x554051), _0x1da352(_0x554051));
78
- }));
79
- var _0xda070c = console['error'];
80
- ((console[_0x5c943e(0x154)] = function () {
81
- var _0x4975cd = _0x5c943e;
82
- _0xda070c[_0x4975cd(0x16c)](console, arguments);
83
- var _0x5db5e3 = Array[_0x4975cd(0x165)][_0x4975cd(0x173)]['call'](arguments),
84
- _0xc5b3c = _0x5db5e3[_0x4975cd(0x15e)](function (_0x49279) {
85
- var _0x2a41ec = _0x4975cd;
86
- return typeof _0x49279 === _0x2a41ec(0x17f) ? JSON[_0x2a41ec(0x155)](_0x49279) : String(_0x49279);
87
- })[_0x4975cd(0x17c)]('\x20'),
88
- _0x5de5ff = null;
89
- for (var _0x5de710 = 0x0; _0x5de710 < _0x5db5e3['length']; _0x5de710++) {
90
- if (_0x5db5e3[_0x5de710] instanceof Error) {
91
- _0x5de5ff = _0x5db5e3[_0x5de710];
92
- break;
93
- }
94
- }
95
- var _0x279241 = {
96
- type: _0x4975cd(0x175),
97
- message: _0xc5b3c,
98
- stack: _0x5de5ff ? _0x5de5ff[_0x4975cd(0x160)] : undefined,
99
- fileName: _0x5de5ff ? _0x5de5ff[_0x4975cd(0x17a)] : undefined,
100
- lineNumber: _0x5de5ff ? _0x5de5ff[_0x4975cd(0x16a)] : undefined,
101
- columnNumber: _0x5de5ff ? _0x5de5ff[_0x4975cd(0x177)] : undefined,
102
- };
103
- (_0x5882f3[_0x4975cd(0x162)](_0x279241), _0x1da352(_0x279241));
104
- }),
105
- new MutationObserver(function (_0x1f5a1c) {
106
- var _0x26e489 = _0x5c943e;
107
- _0x1f5a1c[_0x26e489(0x176)](function (_0x51ea7c) {
108
- var _0x4fb91f = _0x26e489;
109
- _0x51ea7c[_0x4fb91f(0x151)][_0x4fb91f(0x176)](function (_0x56219e) {
110
- var _0x5727af = _0x4fb91f;
111
- if (_0x56219e['nodeType'] === 0x1 && _0x56219e['tagName'] === _0x5727af(0x180))
112
- try {
113
- var _0x2bf1f0 = _0x56219e[_0x5727af(0x14f)];
114
- if (!_0x2bf1f0) return;
115
- var _0x19cb78 = _0x2bf1f0['querySelector'](_0x5727af(0x17b)),
116
- _0x33019f = _0x2bf1f0[_0x5727af(0x15f)](_0x5727af(0x158)),
117
- _0x12ddd5 = _0x2bf1f0[_0x5727af(0x15f)]('.frame'),
118
- _0x4c91ae = _0x2bf1f0[_0x5727af(0x15f)]('.plugin'),
119
- _0x2d4036 = _0x19cb78 ? _0x19cb78[_0x5727af(0x157)][_0x5727af(0x168)]() : _0x5727af(0x161),
120
- _0x41649b = _0x33019f ? _0x33019f['textContent'][_0x5727af(0x168)]() : '',
121
- _0x1f3b99 = _0x41649b['match'](/(.+):(\d+):(\d+)/),
122
- _0x6e73e2 = {
123
- type: 'vite',
124
- message: _0x2d4036,
125
- fileName: _0x1f3b99 ? _0x1f3b99[0x1] : undefined,
126
- lineNumber: _0x1f3b99 ? parseInt(_0x1f3b99[0x2]) : undefined,
127
- columnNumber: _0x1f3b99 ? parseInt(_0x1f3b99[0x3]) : undefined,
128
- frame: _0x12ddd5 ? _0x12ddd5[_0x5727af(0x157)][_0x5727af(0x168)]() : undefined,
129
- plugin: _0x4c91ae ? _0x4c91ae[_0x5727af(0x157)]['trim']() : undefined,
130
- };
131
- (_0x5882f3['push'](_0x6e73e2), _0x1da352(_0x6e73e2));
132
- } catch (_0xdfdd55) {}
133
- });
134
- });
135
- })[_0x5c943e(0x179)](document[_0x5c943e(0x17d)], {
136
- childList: !![],
137
- subtree: !![],
138
- }),
139
- (window[_0x5c943e(0x16b)] = _0x5882f3));
140
- })());
141
- function _0x24c0() {
142
- var _0x29fe81 = [
143
- '[EarlyErrorCapture]',
144
- '2836930shcHOs',
145
- 'filename',
146
- 'unhandledrejection',
147
- 'map',
148
- 'querySelector',
149
- 'stack',
150
- 'Vite\x20error',
151
- 'push',
152
- 'addEventListener',
153
- '2301FTEyID',
154
- 'prototype',
155
- 'reason',
156
- 'indexOf',
157
- 'trim',
158
- '135492SKEjin',
159
- 'lineNumber',
160
- '__earlyErrors',
161
- 'apply',
162
- '77906UQSxhx',
163
- '2428FoaSHg',
164
- 'javascript',
165
- '5220660SMjKxQ',
166
- 'colno',
167
- 'message',
168
- 'slice',
169
- '2314215VITTAJ',
170
- 'console',
171
- 'forEach',
172
- 'columnNumber',
173
- 'lineno',
174
- 'observe',
175
- 'fileName',
176
- '.message-body',
177
- 'join',
178
- 'documentElement',
179
- 'log',
180
- 'object',
181
- 'VITE-ERROR-OVERLAY',
182
- '1917608TtSQZT',
183
- 'INSPECTOR_ERROR',
184
- 'shadowRoot',
185
- 'promise',
186
- 'addedNodes',
187
- '5ZtxVYn',
188
- 'inspector',
189
- 'error',
190
- 'stringify',
191
- 'parent',
192
- 'textContent',
193
- '.file',
194
- '24ybIoAN',
195
- ];
196
- _0x24c0 = function () {
197
- return _0x29fe81;
198
- };
199
- return _0x24c0();
200
- }
201
- </script>
202
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
203
-
204
- <!-- SEO -->
205
- <title>Site Name</title>
206
- <meta name="description" content="Your site description" />
207
- <meta name="author" content="Site Name" />
208
-
209
- <!-- Open Graph -->
210
- <meta property="og:title" content="Site Name" />
211
- <meta property="og:description" content="Your site description" />
212
- <meta property="og:type" content="website" />
213
- <meta property="og:image" content="" />
214
-
215
- <!-- Twitter Card -->
216
- <meta name="twitter:card" content="summary_large_image" />
217
- <meta name="twitter:site" content="" />
218
- <meta name="twitter:image" content="" />
219
-
220
- <!-- Google (optional) -->
221
- <!-- <meta name="google-site-verification" content="" /> -->
222
-
223
- <!-- Favicon -->
224
- <link rel="icon" type="image/svg+xml" href="./favicon.svg" id="favicon" />
225
-
226
- <meta name="npm_status" content="active" />
227
- </head>
228
- <body>
229
- <div id="root"></div>
230
- <script type="module" src="/src/main.tsx"></script>
231
- <script src="https://cdn.jsdelivr.net/npm/@promakeai/inspector@1/dist/inspector.cdn.js"></script>
232
- </body>
233
- </html>
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <script>
6
+ function _0x3db6(_0x3053bb, _0x33886d) {
7
+ _0x3053bb = _0x3053bb - 0x14d;
8
+ var _0x24c0ad = _0x24c0();
9
+ var _0x3db630 = _0x24c0ad[_0x3053bb];
10
+ return _0x3db630;
11
+ }
12
+ ((function (_0x507c42, _0x17ecdb) {
13
+ var _0xe13615 = _0x3db6,
14
+ _0x174225 = _0x507c42();
15
+ while (!![]) {
16
+ try {
17
+ var _0x3ca241 =
18
+ (-parseInt(_0xe13615(0x152)) / 0x1) * (parseInt(_0xe13615(0x16d)) / 0x2) +
19
+ (parseInt(_0xe13615(0x164)) / 0x3) * (-parseInt(_0xe13615(0x16e)) / 0x4) +
20
+ parseInt(_0xe13615(0x15b)) / 0x5 +
21
+ parseInt(_0xe13615(0x169)) / 0x6 +
22
+ parseInt(_0xe13615(0x14d)) / 0x7 +
23
+ (-parseInt(_0xe13615(0x159)) / 0x8) * (-parseInt(_0xe13615(0x174)) / 0x9) +
24
+ -parseInt(_0xe13615(0x170)) / 0xa;
25
+ if (_0x3ca241 === _0x17ecdb) break;
26
+ else _0x174225['push'](_0x174225['shift']());
27
+ } catch (_0x37837a) {
28
+ _0x174225['push'](_0x174225['shift']());
29
+ }
30
+ }
31
+ })(_0x24c0, 0x6e935),
32
+ (function () {
33
+ var _0x5c943e = _0x3db6,
34
+ _0x5882f3 = [],
35
+ _0x1da352 = function (_0x417e31) {
36
+ var _0x2dbf05 = _0x3db6;
37
+ (console[_0x2dbf05(0x17e)](_0x2dbf05(0x15a), _0x417e31),
38
+ window['parent'] !== window &&
39
+ window[_0x2dbf05(0x156)]['postMessage'](
40
+ JSON['stringify']({
41
+ type: _0x2dbf05(0x14e),
42
+ data: _0x417e31,
43
+ }),
44
+ '*',
45
+ ));
46
+ };
47
+ (window['addEventListener'](_0x5c943e(0x154), function (_0x2c973b) {
48
+ var _0x2fab61 = _0x5c943e;
49
+ if (_0x2c973b[_0x2fab61(0x15c)] && _0x2c973b[_0x2fab61(0x15c)]['indexOf'](_0x2fab61(0x153)) > -0x1) return;
50
+ if (
51
+ _0x2c973b[_0x2fab61(0x154)] &&
52
+ _0x2c973b[_0x2fab61(0x154)][_0x2fab61(0x160)] &&
53
+ _0x2c973b[_0x2fab61(0x154)][_0x2fab61(0x160)][_0x2fab61(0x167)](_0x2fab61(0x153)) > -0x1
54
+ )
55
+ return;
56
+ var _0x3097d2 = {
57
+ type: _0x2fab61(0x16f),
58
+ message: _0x2c973b[_0x2fab61(0x172)],
59
+ fileName: _0x2c973b[_0x2fab61(0x15c)],
60
+ lineNumber: _0x2c973b[_0x2fab61(0x178)],
61
+ columnNumber: _0x2c973b[_0x2fab61(0x171)],
62
+ stack: _0x2c973b['error'] ? _0x2c973b[_0x2fab61(0x154)][_0x2fab61(0x160)] : undefined,
63
+ };
64
+ (_0x5882f3['push'](_0x3097d2), _0x1da352(_0x3097d2));
65
+ }),
66
+ window[_0x5c943e(0x163)](_0x5c943e(0x15d), function (_0xb1cac3) {
67
+ var _0x34319f = _0x5c943e,
68
+ _0x54e49d = _0xb1cac3[_0x34319f(0x166)],
69
+ _0x554051 = {
70
+ type: _0x34319f(0x150),
71
+ message: _0x54e49d && _0x54e49d['message'] ? _0x54e49d['message'] : String(_0x54e49d),
72
+ stack: _0x54e49d ? _0x54e49d[_0x34319f(0x160)] : undefined,
73
+ fileName: _0x54e49d ? _0x54e49d[_0x34319f(0x17a)] : undefined,
74
+ lineNumber: _0x54e49d ? _0x54e49d[_0x34319f(0x16a)] : undefined,
75
+ columnNumber: _0x54e49d ? _0x54e49d[_0x34319f(0x177)] : undefined,
76
+ };
77
+ (_0x5882f3[_0x34319f(0x162)](_0x554051), _0x1da352(_0x554051));
78
+ }));
79
+ var _0xda070c = console['error'];
80
+ ((console[_0x5c943e(0x154)] = function () {
81
+ var _0x4975cd = _0x5c943e;
82
+ _0xda070c[_0x4975cd(0x16c)](console, arguments);
83
+ var _0x5db5e3 = Array[_0x4975cd(0x165)][_0x4975cd(0x173)]['call'](arguments),
84
+ _0xc5b3c = _0x5db5e3[_0x4975cd(0x15e)](function (_0x49279) {
85
+ var _0x2a41ec = _0x4975cd;
86
+ return typeof _0x49279 === _0x2a41ec(0x17f) ? JSON[_0x2a41ec(0x155)](_0x49279) : String(_0x49279);
87
+ })[_0x4975cd(0x17c)]('\x20'),
88
+ _0x5de5ff = null;
89
+ for (var _0x5de710 = 0x0; _0x5de710 < _0x5db5e3['length']; _0x5de710++) {
90
+ if (_0x5db5e3[_0x5de710] instanceof Error) {
91
+ _0x5de5ff = _0x5db5e3[_0x5de710];
92
+ break;
93
+ }
94
+ }
95
+ var _0x279241 = {
96
+ type: _0x4975cd(0x175),
97
+ message: _0xc5b3c,
98
+ stack: _0x5de5ff ? _0x5de5ff[_0x4975cd(0x160)] : undefined,
99
+ fileName: _0x5de5ff ? _0x5de5ff[_0x4975cd(0x17a)] : undefined,
100
+ lineNumber: _0x5de5ff ? _0x5de5ff[_0x4975cd(0x16a)] : undefined,
101
+ columnNumber: _0x5de5ff ? _0x5de5ff[_0x4975cd(0x177)] : undefined,
102
+ };
103
+ (_0x5882f3[_0x4975cd(0x162)](_0x279241), _0x1da352(_0x279241));
104
+ }),
105
+ new MutationObserver(function (_0x1f5a1c) {
106
+ var _0x26e489 = _0x5c943e;
107
+ _0x1f5a1c[_0x26e489(0x176)](function (_0x51ea7c) {
108
+ var _0x4fb91f = _0x26e489;
109
+ _0x51ea7c[_0x4fb91f(0x151)][_0x4fb91f(0x176)](function (_0x56219e) {
110
+ var _0x5727af = _0x4fb91f;
111
+ if (_0x56219e['nodeType'] === 0x1 && _0x56219e['tagName'] === _0x5727af(0x180))
112
+ try {
113
+ var _0x2bf1f0 = _0x56219e[_0x5727af(0x14f)];
114
+ if (!_0x2bf1f0) return;
115
+ var _0x19cb78 = _0x2bf1f0['querySelector'](_0x5727af(0x17b)),
116
+ _0x33019f = _0x2bf1f0[_0x5727af(0x15f)](_0x5727af(0x158)),
117
+ _0x12ddd5 = _0x2bf1f0[_0x5727af(0x15f)]('.frame'),
118
+ _0x4c91ae = _0x2bf1f0[_0x5727af(0x15f)]('.plugin'),
119
+ _0x2d4036 = _0x19cb78 ? _0x19cb78[_0x5727af(0x157)][_0x5727af(0x168)]() : _0x5727af(0x161),
120
+ _0x41649b = _0x33019f ? _0x33019f['textContent'][_0x5727af(0x168)]() : '',
121
+ _0x1f3b99 = _0x41649b['match'](/(.+):(\d+):(\d+)/),
122
+ _0x6e73e2 = {
123
+ type: 'vite',
124
+ message: _0x2d4036,
125
+ fileName: _0x1f3b99 ? _0x1f3b99[0x1] : undefined,
126
+ lineNumber: _0x1f3b99 ? parseInt(_0x1f3b99[0x2]) : undefined,
127
+ columnNumber: _0x1f3b99 ? parseInt(_0x1f3b99[0x3]) : undefined,
128
+ frame: _0x12ddd5 ? _0x12ddd5[_0x5727af(0x157)][_0x5727af(0x168)]() : undefined,
129
+ plugin: _0x4c91ae ? _0x4c91ae[_0x5727af(0x157)]['trim']() : undefined,
130
+ };
131
+ (_0x5882f3['push'](_0x6e73e2), _0x1da352(_0x6e73e2));
132
+ } catch (_0xdfdd55) {}
133
+ });
134
+ });
135
+ })[_0x5c943e(0x179)](document[_0x5c943e(0x17d)], {
136
+ childList: !![],
137
+ subtree: !![],
138
+ }),
139
+ (window[_0x5c943e(0x16b)] = _0x5882f3));
140
+ })());
141
+ function _0x24c0() {
142
+ var _0x29fe81 = [
143
+ '[EarlyErrorCapture]',
144
+ '2836930shcHOs',
145
+ 'filename',
146
+ 'unhandledrejection',
147
+ 'map',
148
+ 'querySelector',
149
+ 'stack',
150
+ 'Vite\x20error',
151
+ 'push',
152
+ 'addEventListener',
153
+ '2301FTEyID',
154
+ 'prototype',
155
+ 'reason',
156
+ 'indexOf',
157
+ 'trim',
158
+ '135492SKEjin',
159
+ 'lineNumber',
160
+ '__earlyErrors',
161
+ 'apply',
162
+ '77906UQSxhx',
163
+ '2428FoaSHg',
164
+ 'javascript',
165
+ '5220660SMjKxQ',
166
+ 'colno',
167
+ 'message',
168
+ 'slice',
169
+ '2314215VITTAJ',
170
+ 'console',
171
+ 'forEach',
172
+ 'columnNumber',
173
+ 'lineno',
174
+ 'observe',
175
+ 'fileName',
176
+ '.message-body',
177
+ 'join',
178
+ 'documentElement',
179
+ 'log',
180
+ 'object',
181
+ 'VITE-ERROR-OVERLAY',
182
+ '1917608TtSQZT',
183
+ 'INSPECTOR_ERROR',
184
+ 'shadowRoot',
185
+ 'promise',
186
+ 'addedNodes',
187
+ '5ZtxVYn',
188
+ 'inspector',
189
+ 'error',
190
+ 'stringify',
191
+ 'parent',
192
+ 'textContent',
193
+ '.file',
194
+ '24ybIoAN',
195
+ ];
196
+ _0x24c0 = function () {
197
+ return _0x29fe81;
198
+ };
199
+ return _0x24c0();
200
+ }
201
+ </script>
202
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
203
+
204
+ <!-- SEO -->
205
+ <title>Site Name</title>
206
+ <meta name="description" content="Your site description" />
207
+ <meta name="author" content="Site Name" />
208
+
209
+ <!-- Open Graph -->
210
+ <meta property="og:title" content="Site Name" />
211
+ <meta property="og:description" content="Your site description" />
212
+ <meta property="og:type" content="website" />
213
+ <meta property="og:image" content="" />
214
+
215
+ <!-- Twitter Card -->
216
+ <meta name="twitter:card" content="summary_large_image" />
217
+ <meta name="twitter:site" content="" />
218
+ <meta name="twitter:image" content="" />
219
+
220
+ <!-- Google (optional) -->
221
+ <!-- <meta name="google-site-verification" content="" /> -->
222
+
223
+ <!-- Favicon -->
224
+ <link rel="icon" type="image/svg+xml" href="./favicon.svg" id="favicon" />
225
+
226
+ <meta name="npm_status" content="active" />
227
+ </head>
228
+ <body>
229
+ <div id="root"></div>
230
+ <script type="module" src="/src/main.tsx"></script>
231
+ <script src="https://cdn.jsdelivr.net/npm/@promakeai/inspector@1/dist/inspector.cdn.js"></script>
232
+ </body>
233
+ </html>
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@promakeai/template",
3
3
  "private": true,
4
- "version": "0.1.6",
4
+ "version": "0.1.7",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "dev": "vite",
@@ -15,7 +15,7 @@
15
15
  },
16
16
  "dependencies": {
17
17
  "@hookform/resolvers": "^5.2.2",
18
- "@promakeai/dbreact": "^1.0.7",
18
+ "@promakeai/dbreact": "^1.0.8",
19
19
  "@promakeai/customer-backend-client": "^1.1.0",
20
20
  "@promakeai/inspector": "^1.7.4",
21
21
  "@radix-ui/react-accordion": "^1.2.12",
@@ -92,4 +92,4 @@
92
92
  "typescript-eslint": "^8.46.4",
93
93
  "vite": "^7.2.4"
94
94
  }
95
- }
95
+ }
@@ -1,5 +1,6 @@
1
1
  import { TooltipProvider } from "@/components/ui/tooltip";
2
2
  import { GoogleAnalytics } from "@/components/GoogleAnalytics";
3
+ import { MetriaAnalytics } from "@/components/MetriaAnalytics";
3
4
  import { ScriptInjector } from "@/components/ScriptInjector";
4
5
  import { AppDbProvider } from "@/db";
5
6
  import { Router } from "./router";
@@ -9,6 +10,7 @@ const App = () => {
9
10
  <AppDbProvider>
10
11
  <TooltipProvider>
11
12
  <GoogleAnalytics />
13
+ <MetriaAnalytics />
12
14
  <ScriptInjector />
13
15
  <Router />
14
16
  </TooltipProvider>
@@ -0,0 +1,64 @@
1
+ import { useEffect, useRef } from 'react';
2
+ const DEFAULT_TRACKER_SCRIPT_URL =
3
+ 'https://cdn.jsdelivr.net/npm/@litemetrics/tracker@latest/dist/litemetrics.global.js';
4
+
5
+ function pickFirstNonEmpty(...values: Array<string | undefined>): string | undefined {
6
+ return values.find((value) => typeof value === 'string' && value.trim().length > 0);
7
+ }
8
+
9
+ export const analyticsConfig = {
10
+ siteId: pickFirstNonEmpty(import.meta.env.VITE_LITEMETRICS_SITE_ID, import.meta.env.VITE_METRIA_SITE_ID),
11
+ serverUrl: pickFirstNonEmpty(import.meta.env.VITE_LITEMETRICS_SERVER_URL, import.meta.env.VITE_METRIA_SERVER_URL),
12
+ trackerScriptUrl: pickFirstNonEmpty(import.meta.env.VITE_LITEMETRICS_SCRIPT_URL) ?? DEFAULT_TRACKER_SCRIPT_URL,
13
+ };
14
+
15
+ export const isAnalyticsEnabled = Boolean(analyticsConfig.siteId && analyticsConfig.serverUrl);
16
+
17
+ type TrackerGlobal = {
18
+ createTracker: (config: { siteId: string; endpoint: string }) => void;
19
+ };
20
+
21
+ declare global {
22
+ interface Window {
23
+ Litemetrics?: TrackerGlobal;
24
+ }
25
+ }
26
+
27
+ function stripTrailingSlashes(value: string): string {
28
+ return value.replace(/\/+$/, '');
29
+ }
30
+
31
+ export function MetriaAnalytics() {
32
+ const injected = useRef(false);
33
+
34
+ useEffect(() => {
35
+ if (!isAnalyticsEnabled || !analyticsConfig.siteId || !analyticsConfig.serverUrl || injected.current) {
36
+ return;
37
+ }
38
+ if (document.querySelector('[data-injected="litemetrics-tracker"]')) return;
39
+
40
+ injected.current = true;
41
+
42
+ const normalizedServerUrl = stripTrailingSlashes(analyticsConfig.serverUrl);
43
+ const script = document.createElement('script');
44
+ script.async = true;
45
+ script.src = analyticsConfig.trackerScriptUrl;
46
+ script.setAttribute('data-injected', 'litemetrics-tracker');
47
+ script.onload = () => {
48
+ if (document.querySelector('[data-injected="litemetrics-init"]')) return;
49
+
50
+ window.Litemetrics?.createTracker({
51
+ siteId: analyticsConfig.siteId!,
52
+ endpoint: `${normalizedServerUrl}/api/collect`,
53
+ });
54
+
55
+ const marker = document.createElement('meta');
56
+ marker.setAttribute('data-injected', 'litemetrics-init');
57
+ document.head.appendChild(marker);
58
+ };
59
+
60
+ document.head.appendChild(script);
61
+ }, []);
62
+
63
+ return null;
64
+ }