@praxisjs/devtools 0.1.1 → 0.2.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.
- package/CHANGELOG.md +38 -0
- package/dist/index.d.ts +15 -10
- package/dist/index.js +1046 -852
- package/package.json +8 -7
- package/src/decorators/debug.ts +153 -78
- package/src/decorators/trace.ts +15 -11
- package/src/icons/ellipsis-vertical.tsx +25 -19
- package/src/icons/panel-bottom.tsx +24 -18
- package/src/icons/panel-left.tsx +24 -18
- package/src/icons/panel-right.tsx +24 -18
- package/src/icons/panel-top.tsx +24 -18
- package/src/icons/x.tsx +24 -18
- package/src/plugins/components/components/component-detail.tsx +59 -54
- package/src/plugins/components/components/component-row.tsx +36 -33
- package/src/plugins/components/components/detail-row.tsx +21 -18
- package/src/plugins/components/components/detail-section.tsx +14 -12
- package/src/plugins/components/components/status-dot.tsx +20 -11
- package/src/plugins/components/components-tab.tsx +66 -61
- package/src/plugins/signals/components/signal-detail.tsx +35 -27
- package/src/plugins/signals/components/signal-row.tsx +32 -28
- package/src/plugins/signals/signals-tab.tsx +92 -79
- package/src/plugins/timeline/components/badge.tsx +15 -9
- package/src/plugins/timeline/components/timeline-row.tsx +52 -45
- package/src/plugins/timeline/timeline-tab.tsx +90 -77
- package/src/plugins/types.ts +2 -2
- package/src/ui/dev-tools.tsx +45 -39
- package/src/ui/panel.tsx +152 -146
- package/src/ui/shared/empty-state.tsx +17 -11
- package/src/ui/shared/icon-button.tsx +28 -25
- package/src/ui/shared/panel-section.tsx +14 -12
- package/src/ui/shared/search-input.tsx +19 -15
- package/src/ui/shared/side-panel.tsx +16 -13
- package/vite.config.ts +3 -9
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@praxisjs/devtools",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -12,17 +12,18 @@
|
|
|
12
12
|
},
|
|
13
13
|
"dependencies": {
|
|
14
14
|
"@unocss/reset": "^66.6.2",
|
|
15
|
-
"@praxisjs/core": "0.
|
|
16
|
-
"@praxisjs/
|
|
17
|
-
"@praxisjs/
|
|
18
|
-
"@praxisjs/
|
|
15
|
+
"@praxisjs/core": "0.4.0",
|
|
16
|
+
"@praxisjs/decorators": "0.4.0",
|
|
17
|
+
"@praxisjs/jsx": "0.2.1",
|
|
18
|
+
"@praxisjs/runtime": "0.2.1",
|
|
19
|
+
"@praxisjs/shared": "0.2.0"
|
|
19
20
|
},
|
|
20
21
|
"devDependencies": {
|
|
21
22
|
"@types/node": "^25.3.0",
|
|
22
23
|
"@unocss/cli": "^66.6.2",
|
|
23
|
-
"@unocss/preset-wind3": "^66.6.
|
|
24
|
+
"@unocss/preset-wind3": "^66.6.6",
|
|
24
25
|
"typescript": "^5.9.3",
|
|
25
|
-
"unocss": "^66.6.
|
|
26
|
+
"unocss": "^66.6.6",
|
|
26
27
|
"vite": "^7.3.1",
|
|
27
28
|
"vite-plugin-dts": "^4.5.4"
|
|
28
29
|
},
|
package/src/decorators/debug.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { computed } from "@praxisjs/core/internal";
|
|
2
|
+
|
|
1
3
|
import { Registry } from "../core/registry";
|
|
2
4
|
|
|
3
5
|
export interface DebugOptions {
|
|
@@ -24,6 +26,15 @@ interface ComputedSlot {
|
|
|
24
26
|
unsub: () => void;
|
|
25
27
|
}
|
|
26
28
|
|
|
29
|
+
interface DebugDecorator {
|
|
30
|
+
(
|
|
31
|
+
value: (...args: unknown[]) => unknown,
|
|
32
|
+
context: ClassMethodDecoratorContext,
|
|
33
|
+
): (...args: unknown[]) => unknown;
|
|
34
|
+
(value: unknown, context: ClassGetterDecoratorContext): void;
|
|
35
|
+
(value: undefined, context: ClassFieldDecoratorContext): void;
|
|
36
|
+
}
|
|
37
|
+
|
|
27
38
|
/**
|
|
28
39
|
* Tracks state, computed values, and methods in the devtools panel.
|
|
29
40
|
*
|
|
@@ -31,28 +42,31 @@ interface ComputedSlot {
|
|
|
31
42
|
* @Debug()
|
|
32
43
|
* @State() count = 0;
|
|
33
44
|
*
|
|
34
|
-
* On
|
|
35
|
-
* @Debug()
|
|
36
|
-
*
|
|
45
|
+
* On @Computed() getters (stacked):
|
|
46
|
+
* @Debug({ label: "doubled" })
|
|
47
|
+
* @Computed()
|
|
48
|
+
* get doubled() { return this.count * 2; }
|
|
37
49
|
*
|
|
38
50
|
* On methods:
|
|
39
51
|
* @Debug()
|
|
40
52
|
* increment() { ... }
|
|
41
53
|
*/
|
|
42
|
-
export function Debug(options: DebugOptions = {}) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
54
|
+
export function Debug(options: DebugOptions = {}): DebugDecorator {
|
|
55
|
+
const impl = function (
|
|
56
|
+
value: unknown,
|
|
57
|
+
context:
|
|
58
|
+
| ClassMethodDecoratorContext
|
|
59
|
+
| ClassGetterDecoratorContext
|
|
60
|
+
| ClassFieldDecoratorContext,
|
|
61
|
+
) {
|
|
62
|
+
const label = options.label ?? (context.name as string);
|
|
50
63
|
|
|
51
64
|
// ── Method decorator ─────────────────────────────────────────────────
|
|
52
|
-
if (
|
|
53
|
-
const original =
|
|
65
|
+
if (context.kind === "method") {
|
|
66
|
+
const original = value as (...args: unknown[]) => unknown;
|
|
54
67
|
|
|
55
|
-
|
|
68
|
+
return function (this: object, ...args: unknown[]) {
|
|
69
|
+
const componentName = (this.constructor as { name: string }).name;
|
|
56
70
|
const start = performance.now();
|
|
57
71
|
let result: unknown;
|
|
58
72
|
let threw = false;
|
|
@@ -77,85 +91,146 @@ export function Debug(options: DebugOptions = {}) {
|
|
|
77
91
|
|
|
78
92
|
return result;
|
|
79
93
|
};
|
|
80
|
-
|
|
81
|
-
return;
|
|
82
94
|
}
|
|
83
95
|
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
enumerable: true,
|
|
113
|
-
configurable: true,
|
|
96
|
+
// ── Getter decorator (@Computed() getters) ────────────────────────────
|
|
97
|
+
if (context.kind === "getter") {
|
|
98
|
+
const originalGetter = value as (this: object) => unknown;
|
|
99
|
+
|
|
100
|
+
context.addInitializer(function (this: unknown) {
|
|
101
|
+
const instance = this as object & Record<string, unknown>;
|
|
102
|
+
const componentName = (instance.constructor as { name: string }).name;
|
|
103
|
+
|
|
104
|
+
// Defer until the current synchronous class initialization (including
|
|
105
|
+
// field initializers like `count = 0`) has fully completed. Without
|
|
106
|
+
// this, accessing `this.doubled` here could read state signals before
|
|
107
|
+
// their field initializers have run, producing NaN or undefined.
|
|
108
|
+
queueMicrotask(() => {
|
|
109
|
+
const c = computed(() => originalGetter.call(instance));
|
|
110
|
+
let skipFirst = true;
|
|
111
|
+
let prevValue = c();
|
|
112
|
+
|
|
113
|
+
Registry.instance.registerSignal(instance, label, prevValue, componentName);
|
|
114
|
+
|
|
115
|
+
c.subscribe((newValue) => {
|
|
116
|
+
if (skipFirst) {
|
|
117
|
+
skipFirst = false;
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
Registry.instance.updateSignal(instance, label, newValue, prevValue);
|
|
121
|
+
prevValue = newValue;
|
|
122
|
+
});
|
|
123
|
+
});
|
|
114
124
|
});
|
|
115
125
|
|
|
116
126
|
return;
|
|
117
127
|
}
|
|
118
128
|
|
|
119
|
-
// ──
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
//
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
129
|
+
// ── Field decorator ───────────────────────────────────────────────────
|
|
130
|
+
context.addInitializer(function (
|
|
131
|
+
this: unknown,
|
|
132
|
+
) {
|
|
133
|
+
const instance = this as object & Record<string, unknown>;
|
|
134
|
+
const name = context.name as string;
|
|
135
|
+
const componentName = (
|
|
136
|
+
instance.constructor as { name: string }
|
|
137
|
+
).name;
|
|
138
|
+
|
|
139
|
+
// ── Wrapping @State() getter/setter ─────────────────────────────
|
|
140
|
+
// @State() initializer runs before @Debug() initializer (inner-first),
|
|
141
|
+
// so the getter/setter is already installed on the instance here.
|
|
142
|
+
const existingDesc = Object.getOwnPropertyDescriptor(instance, name);
|
|
143
|
+
|
|
144
|
+
if (existingDesc?.get && existingDesc.set) {
|
|
145
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
146
|
+
const originalGet = existingDesc.get;
|
|
147
|
+
// eslint-disable-next-line @typescript-eslint/unbound-method
|
|
148
|
+
const originalSet = existingDesc.set;
|
|
149
|
+
|
|
150
|
+
Registry.instance.registerSignal(
|
|
151
|
+
instance,
|
|
152
|
+
label,
|
|
153
|
+
originalGet.call(instance),
|
|
154
|
+
componentName,
|
|
136
155
|
);
|
|
156
|
+
|
|
157
|
+
Object.defineProperty(instance, name, {
|
|
158
|
+
get(this: object) {
|
|
159
|
+
return originalGet.call(this) as unknown;
|
|
160
|
+
},
|
|
161
|
+
set(this: object, newValue: unknown) {
|
|
162
|
+
const oldValue: unknown = originalGet.call(this);
|
|
163
|
+
originalSet.call(this, newValue);
|
|
164
|
+
Registry.instance.updateSignal(this, label, newValue, oldValue);
|
|
165
|
+
},
|
|
166
|
+
enumerable: true,
|
|
167
|
+
configurable: true,
|
|
168
|
+
});
|
|
169
|
+
|
|
170
|
+
return;
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
// ── Computed class field ─────────────────────────────────────────
|
|
174
|
+
// The field initializer has already run, so read the assigned value.
|
|
175
|
+
const initialValue = instance[name];
|
|
176
|
+
Reflect.deleteProperty(instance, name);
|
|
177
|
+
|
|
178
|
+
if (!isComputed(initialValue)) {
|
|
179
|
+
if (initialValue !== undefined) {
|
|
180
|
+
console.warn(
|
|
181
|
+
`[PraxisJS DevTools] @Debug() on "${componentName}.${name}": ` +
|
|
182
|
+
`expected a computed() value but got ${typeof initialValue}. Skipping.`,
|
|
183
|
+
);
|
|
184
|
+
}
|
|
185
|
+
instance[name] = initialValue;
|
|
137
186
|
return;
|
|
138
187
|
}
|
|
139
188
|
|
|
140
189
|
// subscribe() calls the callback immediately (synchronously), so we
|
|
141
190
|
// use a flag to skip the first call and register via registerSignal instead.
|
|
142
|
-
let
|
|
143
|
-
|
|
191
|
+
let slot: ComputedSlot;
|
|
192
|
+
|
|
193
|
+
function subscribe(computed: TrackedComputed): () => void {
|
|
194
|
+
let skipFirst = true;
|
|
195
|
+
let prevValue = computed();
|
|
196
|
+
|
|
197
|
+
const unsub = computed.subscribe((newValue) => {
|
|
198
|
+
if (skipFirst) {
|
|
199
|
+
skipFirst = false;
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
Registry.instance.updateSignal(instance, label, newValue, prevValue);
|
|
203
|
+
prevValue = newValue;
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
Registry.instance.registerSignal(instance, label, prevValue, componentName);
|
|
207
|
+
return unsub;
|
|
208
|
+
}
|
|
144
209
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
210
|
+
slot = { computed: initialValue, unsub: subscribe(initialValue) };
|
|
211
|
+
|
|
212
|
+
Object.defineProperty(instance, name, {
|
|
213
|
+
get() {
|
|
214
|
+
return slot.computed;
|
|
215
|
+
},
|
|
216
|
+
set(newValue: unknown) {
|
|
217
|
+
slot.unsub();
|
|
218
|
+
|
|
219
|
+
if (!isComputed(newValue)) {
|
|
220
|
+
console.warn(
|
|
221
|
+
`[PraxisJS DevTools] @Debug() on "${componentName}.${name}": ` +
|
|
222
|
+
`expected a computed() value but got ${typeof newValue}. Skipping.`,
|
|
223
|
+
);
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
slot = { computed: newValue, unsub: subscribe(newValue) };
|
|
228
|
+
},
|
|
229
|
+
enumerable: true,
|
|
230
|
+
configurable: true,
|
|
152
231
|
});
|
|
153
|
-
|
|
154
|
-
slots.set(this, { computed: value, unsub });
|
|
155
|
-
Registry.instance.registerSignal(this, label, prevValue, componentName);
|
|
156
|
-
},
|
|
157
|
-
enumerable: true,
|
|
158
|
-
configurable: true,
|
|
159
232
|
});
|
|
160
233
|
};
|
|
234
|
+
|
|
235
|
+
return impl as DebugDecorator;
|
|
161
236
|
}
|
package/src/decorators/trace.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Registry } from
|
|
1
|
+
import { Registry } from "../core/registry";
|
|
2
2
|
|
|
3
3
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
4
4
|
type AnyConstructor = new (...args: any[]) => any;
|
|
@@ -9,16 +9,18 @@ type AnyConstructor = new (...args: any[]) => any;
|
|
|
9
9
|
*
|
|
10
10
|
* @Trace()
|
|
11
11
|
* @Component()
|
|
12
|
-
* class MyComponent extends
|
|
12
|
+
* class MyComponent extends StatefulComponent { ... }
|
|
13
13
|
*/
|
|
14
14
|
export function Trace() {
|
|
15
|
-
return function <T extends AnyConstructor>(constructor: T): T {
|
|
15
|
+
return function <T extends AnyConstructor>(constructor: T, _context: ClassDecoratorContext): T {
|
|
16
16
|
const name = constructor.name;
|
|
17
17
|
const registry = Registry.instance;
|
|
18
18
|
const proto = constructor.prototype as Record<string, unknown>;
|
|
19
19
|
|
|
20
20
|
// ── render() ──────────────────────────────────────────────────────────
|
|
21
|
-
const originalRender = proto.render as
|
|
21
|
+
const originalRender = proto.render as
|
|
22
|
+
| ((...args: unknown[]) => unknown)
|
|
23
|
+
| undefined;
|
|
22
24
|
|
|
23
25
|
if (originalRender) {
|
|
24
26
|
proto.render = function (this: object, ...args: unknown[]) {
|
|
@@ -37,21 +39,23 @@ export function Trace() {
|
|
|
37
39
|
|
|
38
40
|
proto.onBeforeMount = function (this: object, ...args: unknown[]) {
|
|
39
41
|
registry.registerComponent(this, name);
|
|
40
|
-
registry.recordLifecycle(this,
|
|
42
|
+
registry.recordLifecycle(this, "onBeforeMount");
|
|
41
43
|
return originalOnBeforeMount?.call(this, ...args);
|
|
42
44
|
};
|
|
43
45
|
|
|
44
46
|
// ── remaining lifecycle hooks ─────────────────────────────────────────
|
|
45
47
|
const hooks = [
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
"onMount",
|
|
49
|
+
"onUnmount",
|
|
50
|
+
"onBeforeUpdate",
|
|
51
|
+
"onUpdate",
|
|
52
|
+
"onAfterUpdate",
|
|
51
53
|
] as const;
|
|
52
54
|
|
|
53
55
|
for (const hook of hooks) {
|
|
54
|
-
const original = proto[hook] as
|
|
56
|
+
const original = proto[hook] as
|
|
57
|
+
| ((...args: unknown[]) => unknown)
|
|
58
|
+
| undefined;
|
|
55
59
|
|
|
56
60
|
proto[hook] = function (this: object, ...args: unknown[]) {
|
|
57
61
|
registry.recordLifecycle(this, hook);
|
|
@@ -1,20 +1,26 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
1
|
+
import { StatelessComponent } from "@praxisjs/core";
|
|
2
|
+
import { Component } from "@praxisjs/decorators";
|
|
3
|
+
|
|
4
|
+
@Component()
|
|
5
|
+
export class EllipsisVerticalIcon extends StatelessComponent {
|
|
6
|
+
render() {
|
|
7
|
+
return (
|
|
8
|
+
<svg
|
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
10
|
+
width="24"
|
|
11
|
+
height="24"
|
|
12
|
+
viewBox="0 0 24 24"
|
|
13
|
+
fill="none"
|
|
14
|
+
stroke="currentColor"
|
|
15
|
+
stroke-width="2"
|
|
16
|
+
stroke-linecap="round"
|
|
17
|
+
stroke-linejoin="round"
|
|
18
|
+
class="lucide lucide-ellipsis-vertical-icon lucide-ellipsis-vertical"
|
|
19
|
+
>
|
|
20
|
+
<circle cx="12" cy="12" r="1" />
|
|
21
|
+
<circle cx="12" cy="5" r="1" />
|
|
22
|
+
<circle cx="12" cy="19" r="1" />
|
|
23
|
+
</svg>
|
|
24
|
+
);
|
|
25
|
+
}
|
|
20
26
|
}
|
|
@@ -1,19 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import { StatelessComponent } from "@praxisjs/core";
|
|
2
|
+
import { Component } from "@praxisjs/decorators";
|
|
3
|
+
|
|
4
|
+
@Component()
|
|
5
|
+
export class PanelBottomIcon extends StatelessComponent {
|
|
6
|
+
render() {
|
|
7
|
+
return (
|
|
8
|
+
<svg
|
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
10
|
+
width="24"
|
|
11
|
+
height="24"
|
|
12
|
+
viewBox="0 0 24 24"
|
|
13
|
+
fill="none"
|
|
14
|
+
stroke="currentColor"
|
|
15
|
+
stroke-width="2"
|
|
16
|
+
stroke-linecap="round"
|
|
17
|
+
stroke-linejoin="round"
|
|
18
|
+
class="lucide lucide-panel-bottom-icon lucide-panel-bottom"
|
|
19
|
+
>
|
|
20
|
+
<rect width="18" height="18" x="3" y="3" rx="2" />
|
|
21
|
+
<path d="M3 15h18" />
|
|
22
|
+
</svg>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
19
25
|
}
|
package/src/icons/panel-left.tsx
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import { StatelessComponent } from "@praxisjs/core";
|
|
2
|
+
import { Component } from "@praxisjs/decorators";
|
|
3
|
+
|
|
4
|
+
@Component()
|
|
5
|
+
export class PanelLeftIcon extends StatelessComponent {
|
|
6
|
+
render() {
|
|
7
|
+
return (
|
|
8
|
+
<svg
|
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
10
|
+
width="24"
|
|
11
|
+
height="24"
|
|
12
|
+
viewBox="0 0 24 24"
|
|
13
|
+
fill="none"
|
|
14
|
+
stroke="currentColor"
|
|
15
|
+
stroke-width="2"
|
|
16
|
+
stroke-linecap="round"
|
|
17
|
+
stroke-linejoin="round"
|
|
18
|
+
class="lucide lucide-panel-left-icon lucide-panel-left"
|
|
19
|
+
>
|
|
20
|
+
<rect width="18" height="18" x="3" y="3" rx="2" />
|
|
21
|
+
<path d="M9 3v18" />
|
|
22
|
+
</svg>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
19
25
|
}
|
|
@@ -1,19 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import { StatelessComponent } from "@praxisjs/core";
|
|
2
|
+
import { Component } from "@praxisjs/decorators";
|
|
3
|
+
|
|
4
|
+
@Component()
|
|
5
|
+
export class PanelRightIcon extends StatelessComponent {
|
|
6
|
+
render() {
|
|
7
|
+
return (
|
|
8
|
+
<svg
|
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
10
|
+
width="24"
|
|
11
|
+
height="24"
|
|
12
|
+
viewBox="0 0 24 24"
|
|
13
|
+
fill="none"
|
|
14
|
+
stroke="currentColor"
|
|
15
|
+
stroke-width="2"
|
|
16
|
+
stroke-linecap="round"
|
|
17
|
+
stroke-linejoin="round"
|
|
18
|
+
class="lucide lucide-panel-right-icon lucide-panel-right"
|
|
19
|
+
>
|
|
20
|
+
<rect width="18" height="18" x="3" y="3" rx="2" />
|
|
21
|
+
<path d="M15 3v18" />
|
|
22
|
+
</svg>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
19
25
|
}
|
package/src/icons/panel-top.tsx
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import { StatelessComponent } from "@praxisjs/core";
|
|
2
|
+
import { Component } from "@praxisjs/decorators";
|
|
3
|
+
|
|
4
|
+
@Component()
|
|
5
|
+
export class PanelTopIcon extends StatelessComponent {
|
|
6
|
+
render() {
|
|
7
|
+
return (
|
|
8
|
+
<svg
|
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
10
|
+
width="24"
|
|
11
|
+
height="24"
|
|
12
|
+
viewBox="0 0 24 24"
|
|
13
|
+
fill="none"
|
|
14
|
+
stroke="currentColor"
|
|
15
|
+
stroke-width="2"
|
|
16
|
+
stroke-linecap="round"
|
|
17
|
+
stroke-linejoin="round"
|
|
18
|
+
class="lucide lucide-panel-top-icon lucide-panel-top"
|
|
19
|
+
>
|
|
20
|
+
<rect width="18" height="18" x="3" y="3" rx="2" />
|
|
21
|
+
<path d="M3 9h18" />
|
|
22
|
+
</svg>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
19
25
|
}
|
package/src/icons/x.tsx
CHANGED
|
@@ -1,19 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
1
|
+
import { StatelessComponent } from "@praxisjs/core";
|
|
2
|
+
import { Component } from "@praxisjs/decorators";
|
|
3
|
+
|
|
4
|
+
@Component()
|
|
5
|
+
export class XIcon extends StatelessComponent {
|
|
6
|
+
render() {
|
|
7
|
+
return (
|
|
8
|
+
<svg
|
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
10
|
+
width="24"
|
|
11
|
+
height="24"
|
|
12
|
+
viewBox="0 0 24 24"
|
|
13
|
+
fill="none"
|
|
14
|
+
stroke="currentColor"
|
|
15
|
+
stroke-width="2"
|
|
16
|
+
stroke-linecap="round"
|
|
17
|
+
stroke-linejoin="round"
|
|
18
|
+
class="lucide lucide-x-icon lucide-x"
|
|
19
|
+
>
|
|
20
|
+
<path d="M18 6 6 18" />
|
|
21
|
+
<path d="m6 6 12 12" />
|
|
22
|
+
</svg>
|
|
23
|
+
);
|
|
24
|
+
}
|
|
19
25
|
}
|