tailwind-styled-v4 4.0.0 → 5.0.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 +398 -0
- package/LICENSE +21 -0
- package/README.md +532 -0
- package/dist/analyzer.d.mts +114 -0
- package/dist/analyzer.d.ts +114 -0
- package/dist/analyzer.js +1555 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/analyzer.mjs +1544 -0
- package/dist/analyzer.mjs.map +1 -0
- package/dist/animate.d.mts +46 -0
- package/dist/animate.d.ts +41 -112
- package/dist/animate.js +792 -235
- package/dist/animate.js.map +1 -1
- package/dist/animate.mjs +782 -0
- package/dist/animate.mjs.map +1 -0
- package/dist/atomic.d.mts +18 -0
- package/dist/atomic.d.ts +18 -0
- package/dist/atomic.js +191 -0
- package/dist/atomic.js.map +1 -0
- package/dist/atomic.mjs +185 -0
- package/dist/atomic.mjs.map +1 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +6063 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.mjs +6053 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/{compiler.d.cts → compiler.d.mts} +503 -210
- package/dist/compiler.d.ts +503 -210
- package/dist/compiler.js +1549 -566
- package/dist/compiler.js.map +1 -1
- package/dist/{compiler.cjs → compiler.mjs} +1476 -627
- package/dist/compiler.mjs.map +1 -0
- package/dist/dashboard.d.mts +272 -0
- package/dist/dashboard.d.ts +272 -0
- package/dist/dashboard.js +249 -0
- package/dist/dashboard.js.map +1 -0
- package/dist/dashboard.mjs +239 -0
- package/dist/dashboard.mjs.map +1 -0
- package/dist/devtools.js +336 -211
- package/dist/devtools.js.map +1 -1
- package/dist/{devtools.cjs → devtools.mjs} +331 -220
- package/dist/devtools.mjs.map +1 -0
- package/dist/engine.d.mts +84 -0
- package/dist/engine.d.ts +84 -0
- package/dist/engine.js +3014 -0
- package/dist/engine.js.map +1 -0
- package/dist/engine.mjs +3005 -0
- package/dist/engine.mjs.map +1 -0
- package/dist/{index.d.cts → index.d.mts} +75 -4
- package/dist/index.d.ts +75 -4
- package/dist/index.js +1341 -149
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2162 -0
- package/dist/index.mjs.map +1 -0
- package/dist/liveTokenEngine-DYN3Zale.d.mts +34 -0
- package/dist/liveTokenEngine-DYN3Zale.d.ts +34 -0
- package/dist/next.d.mts +55 -0
- package/dist/next.d.ts +30 -20
- package/dist/next.js +6947 -149
- package/dist/next.js.map +1 -1
- package/dist/next.mjs +7050 -0
- package/dist/next.mjs.map +1 -0
- package/dist/plugin.d.mts +90 -0
- package/dist/plugin.d.ts +90 -0
- package/dist/plugin.js +185 -0
- package/dist/plugin.js.map +1 -0
- package/dist/plugin.mjs +174 -0
- package/dist/plugin.mjs.map +1 -0
- package/dist/pluginRegistry.d.mts +83 -0
- package/dist/pluginRegistry.d.ts +83 -0
- package/dist/pluginRegistry.js +303 -0
- package/dist/pluginRegistry.js.map +1 -0
- package/dist/pluginRegistry.mjs +298 -0
- package/dist/pluginRegistry.mjs.map +1 -0
- package/dist/{preset.d.cts → preset.d.mts} +29 -2
- package/dist/preset.d.ts +29 -2
- package/dist/preset.js +318 -21
- package/dist/preset.js.map +1 -1
- package/dist/preset.mjs +414 -0
- package/dist/preset.mjs.map +1 -0
- package/dist/rspack.d.mts +33 -0
- package/dist/rspack.d.ts +33 -0
- package/dist/rspack.js +55 -0
- package/dist/rspack.js.map +1 -0
- package/dist/rspack.mjs +45 -0
- package/dist/rspack.mjs.map +1 -0
- package/dist/runtime.d.mts +62 -0
- package/dist/runtime.d.ts +62 -0
- package/dist/runtime.js +207 -0
- package/dist/runtime.js.map +1 -0
- package/dist/runtime.mjs +188 -0
- package/dist/runtime.mjs.map +1 -0
- package/dist/runtimeCss.d.mts +65 -0
- package/dist/runtimeCss.d.ts +65 -0
- package/dist/runtimeCss.js +188 -0
- package/dist/runtimeCss.js.map +1 -0
- package/dist/runtimeCss.mjs +173 -0
- package/dist/runtimeCss.mjs.map +1 -0
- package/dist/scanner.d.mts +25 -0
- package/dist/scanner.d.ts +25 -0
- package/dist/scanner.js +717 -0
- package/dist/scanner.js.map +1 -0
- package/dist/scanner.mjs +703 -0
- package/dist/scanner.mjs.map +1 -0
- package/dist/shared.d.mts +85 -0
- package/dist/shared.d.ts +85 -0
- package/dist/shared.js +255 -0
- package/dist/shared.js.map +1 -0
- package/dist/shared.mjs +233 -0
- package/dist/shared.mjs.map +1 -0
- package/dist/storybookAddon.d.mts +108 -0
- package/dist/storybookAddon.d.ts +108 -0
- package/dist/storybookAddon.js +95 -0
- package/dist/storybookAddon.js.map +1 -0
- package/dist/storybookAddon.mjs +88 -0
- package/dist/storybookAddon.mjs.map +1 -0
- package/dist/svelte.d.mts +114 -0
- package/dist/svelte.d.ts +114 -0
- package/dist/svelte.js +67 -0
- package/dist/svelte.js.map +1 -0
- package/dist/svelte.mjs +59 -0
- package/dist/svelte.mjs.map +1 -0
- package/dist/testing.d.mts +185 -0
- package/dist/testing.d.ts +185 -0
- package/dist/testing.js +173 -0
- package/dist/testing.js.map +1 -0
- package/dist/testing.mjs +158 -0
- package/dist/testing.mjs.map +1 -0
- package/dist/{theme.d.cts → theme.d.mts} +18 -11
- package/dist/theme.d.ts +18 -11
- package/dist/theme.js +205 -19
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +311 -0
- package/dist/theme.mjs.map +1 -0
- package/dist/types-DXr2PmGP.d.mts +31 -0
- package/dist/types-DXr2PmGP.d.ts +31 -0
- package/dist/vite.d.mts +51 -0
- package/dist/vite.d.ts +35 -6
- package/dist/vite.js +4254 -57
- package/dist/vite.js.map +1 -1
- package/dist/vite.mjs +4281 -0
- package/dist/vite.mjs.map +1 -0
- package/dist/vue.d.mts +89 -0
- package/dist/vue.d.ts +89 -0
- package/dist/vue.js +104 -0
- package/dist/vue.js.map +1 -0
- package/dist/vue.mjs +96 -0
- package/dist/vue.mjs.map +1 -0
- package/package.json +173 -67
- package/dist/animate.cjs +0 -252
- package/dist/animate.cjs.map +0 -1
- package/dist/animate.d.cts +0 -117
- package/dist/astTransform-ua-eapqs.d.cts +0 -41
- package/dist/astTransform-ua-eapqs.d.ts +0 -41
- package/dist/compiler.cjs.map +0 -1
- package/dist/css.cjs +0 -71
- package/dist/css.cjs.map +0 -1
- package/dist/css.d.cts +0 -45
- package/dist/css.d.ts +0 -45
- package/dist/css.js +0 -62
- package/dist/css.js.map +0 -1
- package/dist/devtools.cjs.map +0 -1
- package/dist/index.cjs +0 -1058
- package/dist/index.cjs.map +0 -1
- package/dist/next.cjs +0 -268
- package/dist/next.cjs.map +0 -1
- package/dist/next.d.cts +0 -45
- package/dist/plugins.cjs +0 -396
- package/dist/plugins.cjs.map +0 -1
- package/dist/plugins.d.cts +0 -231
- package/dist/plugins.d.ts +0 -231
- package/dist/plugins.js +0 -381
- package/dist/plugins.js.map +0 -1
- package/dist/preset.cjs +0 -129
- package/dist/preset.cjs.map +0 -1
- package/dist/theme.cjs +0 -154
- package/dist/theme.cjs.map +0 -1
- package/dist/turbopackLoader.cjs +0 -2689
- package/dist/turbopackLoader.cjs.map +0 -1
- package/dist/turbopackLoader.d.cts +0 -22
- package/dist/turbopackLoader.d.ts +0 -22
- package/dist/turbopackLoader.js +0 -2681
- package/dist/turbopackLoader.js.map +0 -1
- package/dist/vite.cjs +0 -105
- package/dist/vite.cjs.map +0 -1
- package/dist/vite.d.cts +0 -22
- package/dist/webpackLoader.cjs +0 -2670
- package/dist/webpackLoader.cjs.map +0 -1
- package/dist/webpackLoader.d.cts +0 -24
- package/dist/webpackLoader.d.ts +0 -24
- package/dist/webpackLoader.js +0 -2662
- package/dist/webpackLoader.js.map +0 -1
- /package/dist/{devtools.d.cts → devtools.d.mts} +0 -0
|
@@ -1,31 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import React, { useState, useRef, useEffect, useCallback } from 'react';
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
6
|
-
|
|
7
|
-
var React__default = /*#__PURE__*/_interopDefault(React);
|
|
8
|
-
|
|
9
|
-
/* tailwind-styled-v4 v4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
10
|
-
var __defProp = Object.defineProperty;
|
|
11
|
-
var __defProps = Object.defineProperties;
|
|
12
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
13
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
14
|
-
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
15
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
16
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
17
|
-
var __spreadValues = (a, b) => {
|
|
18
|
-
for (var prop in b || (b = {}))
|
|
19
|
-
if (__hasOwnProp.call(b, prop))
|
|
20
|
-
__defNormalProp(a, prop, b[prop]);
|
|
21
|
-
if (__getOwnPropSymbols)
|
|
22
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
23
|
-
if (__propIsEnum.call(b, prop))
|
|
24
|
-
__defNormalProp(a, prop, b[prop]);
|
|
25
|
-
}
|
|
26
|
-
return a;
|
|
27
|
-
};
|
|
28
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
3
|
+
/* tailwind-styled-v4 v5.0.1 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
|
|
29
4
|
function parseDataTw(dataTw) {
|
|
30
5
|
if (!dataTw) return { name: "Unknown", classes: [] };
|
|
31
6
|
const colonIdx = dataTw.indexOf(":");
|
|
@@ -38,15 +13,14 @@ function parseVariantAttr(v) {
|
|
|
38
13
|
if (!v) return {};
|
|
39
14
|
try {
|
|
40
15
|
return JSON.parse(v);
|
|
41
|
-
} catch
|
|
16
|
+
} catch {
|
|
42
17
|
return {};
|
|
43
18
|
}
|
|
44
19
|
}
|
|
45
20
|
function findNearestTwElement(el) {
|
|
46
|
-
var _a;
|
|
47
21
|
let cur = el;
|
|
48
22
|
while (cur) {
|
|
49
|
-
if (
|
|
23
|
+
if (cur.dataset?.tw) return cur;
|
|
50
24
|
cur = cur.parentElement;
|
|
51
25
|
}
|
|
52
26
|
return null;
|
|
@@ -93,60 +67,61 @@ function InspectorPanel({
|
|
|
93
67
|
pinned: _pinned
|
|
94
68
|
}) {
|
|
95
69
|
if (!inspected) {
|
|
96
|
-
return
|
|
70
|
+
return React.createElement(
|
|
97
71
|
"div",
|
|
98
72
|
{ style: S.emptyPanel },
|
|
99
|
-
|
|
73
|
+
React.createElement("span", { style: { opacity: 0.4 } }, "Hover an element to inspect")
|
|
100
74
|
);
|
|
101
75
|
}
|
|
102
|
-
return
|
|
76
|
+
return React.createElement(
|
|
103
77
|
"div",
|
|
104
78
|
{ style: S.scrollArea },
|
|
105
79
|
// Variant props
|
|
106
|
-
Object.keys(inspected.variantProps).length > 0 &&
|
|
80
|
+
Object.keys(inspected.variantProps).length > 0 && React.createElement(
|
|
107
81
|
"div",
|
|
108
82
|
{ style: S.section },
|
|
109
|
-
|
|
83
|
+
React.createElement("div", { style: S.sectionTitle }, "Variants"),
|
|
110
84
|
Object.entries(inspected.variantProps).map(
|
|
111
|
-
([k, v]) =>
|
|
85
|
+
([k, v]) => React.createElement(
|
|
112
86
|
"div",
|
|
113
87
|
{ key: k, style: S.row },
|
|
114
|
-
|
|
115
|
-
|
|
88
|
+
React.createElement("span", { style: S.varKey }, k),
|
|
89
|
+
React.createElement("span", { style: S.varValue }, `"${v}"`)
|
|
116
90
|
)
|
|
117
91
|
)
|
|
118
92
|
),
|
|
119
93
|
// Active states
|
|
120
|
-
Object.keys(inspected.activeStates).length > 0 &&
|
|
94
|
+
Object.keys(inspected.activeStates).length > 0 && React.createElement(
|
|
121
95
|
"div",
|
|
122
96
|
{ style: S.section },
|
|
123
|
-
|
|
97
|
+
React.createElement("div", { style: S.sectionTitle }, "Active Data Attrs"),
|
|
124
98
|
Object.entries(inspected.activeStates).map(
|
|
125
|
-
([k, v]) =>
|
|
99
|
+
([k, v]) => React.createElement(
|
|
126
100
|
"div",
|
|
127
101
|
{ key: k, style: S.row },
|
|
128
|
-
|
|
129
|
-
|
|
102
|
+
React.createElement("code", { style: { ...S.varKey, color: "#f59e0b" } }, `data-${k}`),
|
|
103
|
+
React.createElement("span", { style: { ...S.varValue, color: "#34d399" } }, `"${v}"`)
|
|
130
104
|
)
|
|
131
105
|
)
|
|
132
106
|
),
|
|
133
107
|
// State names
|
|
134
|
-
inspected.stateNames.length > 0 &&
|
|
108
|
+
inspected.stateNames.length > 0 && React.createElement(
|
|
135
109
|
"div",
|
|
136
110
|
{ style: S.section },
|
|
137
|
-
|
|
138
|
-
|
|
111
|
+
React.createElement("div", { style: S.sectionTitle }, "Reactive States"),
|
|
112
|
+
React.createElement(
|
|
139
113
|
"div",
|
|
140
114
|
{ style: S.classGrid },
|
|
141
115
|
inspected.stateNames.map(
|
|
142
|
-
(s) =>
|
|
116
|
+
(s) => React.createElement(
|
|
143
117
|
"code",
|
|
144
118
|
{
|
|
145
119
|
key: s,
|
|
146
|
-
style:
|
|
120
|
+
style: {
|
|
121
|
+
...S.classChip,
|
|
147
122
|
background: inspected.activeStates[s] === "true" ? "#065f46" : "#18181b",
|
|
148
123
|
borderColor: inspected.activeStates[s] === "true" ? "#34d399" : "#27272a"
|
|
149
|
-
}
|
|
124
|
+
}
|
|
150
125
|
},
|
|
151
126
|
s
|
|
152
127
|
)
|
|
@@ -154,32 +129,32 @@ function InspectorPanel({
|
|
|
154
129
|
)
|
|
155
130
|
),
|
|
156
131
|
// Container breakpoints
|
|
157
|
-
inspected.containerBps.length > 0 &&
|
|
132
|
+
inspected.containerBps.length > 0 && React.createElement(
|
|
158
133
|
"div",
|
|
159
134
|
{ style: S.section },
|
|
160
|
-
|
|
161
|
-
|
|
135
|
+
React.createElement("div", { style: S.sectionTitle }, "Container Breakpoints"),
|
|
136
|
+
React.createElement(
|
|
162
137
|
"div",
|
|
163
138
|
{ style: S.classGrid },
|
|
164
139
|
inspected.containerBps.map(
|
|
165
|
-
(bp) =>
|
|
140
|
+
(bp) => React.createElement(
|
|
166
141
|
"code",
|
|
167
|
-
{ key: bp, style:
|
|
142
|
+
{ key: bp, style: { ...S.classChip, color: "#818cf8" } },
|
|
168
143
|
bp
|
|
169
144
|
)
|
|
170
145
|
)
|
|
171
146
|
)
|
|
172
147
|
),
|
|
173
148
|
// Tailwind classes
|
|
174
|
-
inspected.twClasses.length > 0 &&
|
|
149
|
+
inspected.twClasses.length > 0 && React.createElement(
|
|
175
150
|
"div",
|
|
176
151
|
{ style: S.section },
|
|
177
|
-
|
|
178
|
-
|
|
152
|
+
React.createElement("div", { style: S.sectionTitle }, "Classes"),
|
|
153
|
+
React.createElement(
|
|
179
154
|
"div",
|
|
180
155
|
{ style: S.classGrid },
|
|
181
156
|
inspected.twClasses.map(
|
|
182
|
-
(cls) =>
|
|
157
|
+
(cls) => React.createElement(
|
|
183
158
|
"code",
|
|
184
159
|
{ key: cls, style: S.classChip, title: inspected.atomicMap[cls] },
|
|
185
160
|
cls
|
|
@@ -188,13 +163,12 @@ function InspectorPanel({
|
|
|
188
163
|
)
|
|
189
164
|
),
|
|
190
165
|
// Copy
|
|
191
|
-
|
|
166
|
+
React.createElement(
|
|
192
167
|
"button",
|
|
193
168
|
{
|
|
194
169
|
style: S.copyBtn,
|
|
195
170
|
onClick: () => {
|
|
196
|
-
|
|
197
|
-
(_a = navigator.clipboard) == null ? void 0 : _a.writeText(
|
|
171
|
+
navigator.clipboard?.writeText(
|
|
198
172
|
JSON.stringify(
|
|
199
173
|
{
|
|
200
174
|
component: inspected.componentName,
|
|
@@ -213,8 +187,8 @@ function InspectorPanel({
|
|
|
213
187
|
);
|
|
214
188
|
}
|
|
215
189
|
function StatePanel() {
|
|
216
|
-
const [entries, setEntries] =
|
|
217
|
-
|
|
190
|
+
const [entries, setEntries] = useState([]);
|
|
191
|
+
useEffect(() => {
|
|
218
192
|
const refresh = () => {
|
|
219
193
|
const reg = window.__TW_STATE_REGISTRY__;
|
|
220
194
|
setEntries(reg ? Array.from(reg.values()) : []);
|
|
@@ -224,60 +198,61 @@ function StatePanel() {
|
|
|
224
198
|
return () => clearInterval(interval);
|
|
225
199
|
}, []);
|
|
226
200
|
if (entries.length === 0) {
|
|
227
|
-
return
|
|
201
|
+
return React.createElement(
|
|
228
202
|
"div",
|
|
229
203
|
{ style: S.emptyPanel },
|
|
230
|
-
|
|
204
|
+
React.createElement(
|
|
231
205
|
"span",
|
|
232
206
|
{ style: { opacity: 0.4 } },
|
|
233
207
|
"No state-enabled components found."
|
|
234
208
|
),
|
|
235
|
-
|
|
236
|
-
|
|
209
|
+
React.createElement("br", null),
|
|
210
|
+
React.createElement(
|
|
237
211
|
"span",
|
|
238
212
|
{ style: { opacity: 0.3, fontSize: "11px" } },
|
|
239
213
|
'Use tw.button({ state: { active: "..." } }) to register.'
|
|
240
214
|
)
|
|
241
215
|
);
|
|
242
216
|
}
|
|
243
|
-
return
|
|
217
|
+
return React.createElement(
|
|
244
218
|
"div",
|
|
245
219
|
{ style: S.scrollArea },
|
|
246
220
|
entries.map(
|
|
247
|
-
(entry) =>
|
|
221
|
+
(entry) => React.createElement(
|
|
248
222
|
"div",
|
|
249
223
|
{ key: entry.id, style: S.section },
|
|
250
|
-
|
|
224
|
+
React.createElement(
|
|
251
225
|
"div",
|
|
252
226
|
{ style: S.sectionTitle },
|
|
253
|
-
|
|
254
|
-
|
|
227
|
+
React.createElement("span", { style: { color: "#60a5fa" } }, entry.tag.toUpperCase()),
|
|
228
|
+
React.createElement(
|
|
255
229
|
"span",
|
|
256
230
|
{ style: { marginLeft: "8px", color: "#52525b", fontSize: "10px" } },
|
|
257
231
|
entry.id
|
|
258
232
|
)
|
|
259
233
|
),
|
|
260
|
-
|
|
234
|
+
React.createElement(
|
|
261
235
|
"div",
|
|
262
236
|
{ style: S.classGrid },
|
|
263
237
|
entry.states.map(
|
|
264
|
-
(s) =>
|
|
238
|
+
(s) => React.createElement(
|
|
265
239
|
"code",
|
|
266
|
-
{ key: s, style:
|
|
240
|
+
{ key: s, style: { ...S.classChip, color: "#f59e0b" } },
|
|
267
241
|
`data-${s}`
|
|
268
242
|
)
|
|
269
243
|
)
|
|
270
244
|
),
|
|
271
|
-
|
|
245
|
+
React.createElement(
|
|
272
246
|
"div",
|
|
273
|
-
{ style:
|
|
274
|
-
|
|
247
|
+
{ style: { ...S.row, marginTop: "4px" } },
|
|
248
|
+
React.createElement(
|
|
275
249
|
"span",
|
|
276
250
|
{
|
|
277
|
-
style:
|
|
251
|
+
style: {
|
|
252
|
+
...S.sectionTitle,
|
|
278
253
|
marginBottom: 0,
|
|
279
254
|
color: entry.cssInjected ? "#34d399" : "#ef4444"
|
|
280
|
-
}
|
|
255
|
+
}
|
|
281
256
|
},
|
|
282
257
|
entry.cssInjected ? "\u25CF CSS injected" : "\u25CB CSS pending"
|
|
283
258
|
)
|
|
@@ -287,8 +262,8 @@ function StatePanel() {
|
|
|
287
262
|
);
|
|
288
263
|
}
|
|
289
264
|
function ContainerPanel() {
|
|
290
|
-
const [entries, setEntries] =
|
|
291
|
-
|
|
265
|
+
const [entries, setEntries] = useState([]);
|
|
266
|
+
useEffect(() => {
|
|
292
267
|
const refresh = () => {
|
|
293
268
|
const reg = window.__TW_CONTAINER_REGISTRY__;
|
|
294
269
|
setEntries(reg ? Array.from(reg.values()) : []);
|
|
@@ -298,57 +273,57 @@ function ContainerPanel() {
|
|
|
298
273
|
return () => clearInterval(interval);
|
|
299
274
|
}, []);
|
|
300
275
|
if (entries.length === 0) {
|
|
301
|
-
return
|
|
276
|
+
return React.createElement(
|
|
302
277
|
"div",
|
|
303
278
|
{ style: S.emptyPanel },
|
|
304
|
-
|
|
279
|
+
React.createElement(
|
|
305
280
|
"span",
|
|
306
281
|
{ style: { opacity: 0.4 } },
|
|
307
282
|
"No container query components found."
|
|
308
283
|
),
|
|
309
|
-
|
|
310
|
-
|
|
284
|
+
React.createElement("br", null),
|
|
285
|
+
React.createElement(
|
|
311
286
|
"span",
|
|
312
287
|
{ style: { opacity: 0.3, fontSize: "11px" } },
|
|
313
288
|
'Use tw.div({ container: { md: "flex-row" } }) to register.'
|
|
314
289
|
)
|
|
315
290
|
);
|
|
316
291
|
}
|
|
317
|
-
return
|
|
292
|
+
return React.createElement(
|
|
318
293
|
"div",
|
|
319
294
|
{ style: S.scrollArea },
|
|
320
295
|
entries.map(
|
|
321
|
-
(entry) =>
|
|
296
|
+
(entry) => React.createElement(
|
|
322
297
|
"div",
|
|
323
298
|
{ key: entry.id, style: S.section },
|
|
324
|
-
|
|
299
|
+
React.createElement(
|
|
325
300
|
"div",
|
|
326
301
|
{ style: S.sectionTitle },
|
|
327
|
-
|
|
328
|
-
entry.containerName &&
|
|
302
|
+
React.createElement("span", { style: { color: "#60a5fa" } }, entry.tag.toUpperCase()),
|
|
303
|
+
entry.containerName && React.createElement(
|
|
329
304
|
"span",
|
|
330
305
|
{ style: { marginLeft: "6px", color: "#818cf8" } },
|
|
331
306
|
`[${entry.containerName}]`
|
|
332
307
|
),
|
|
333
|
-
|
|
308
|
+
React.createElement(
|
|
334
309
|
"span",
|
|
335
310
|
{ style: { marginLeft: "8px", color: "#52525b", fontSize: "10px" } },
|
|
336
311
|
entry.id
|
|
337
312
|
)
|
|
338
313
|
),
|
|
339
|
-
|
|
314
|
+
React.createElement(
|
|
340
315
|
"div",
|
|
341
316
|
null,
|
|
342
317
|
entry.breakpoints.map(
|
|
343
|
-
(bp, i) =>
|
|
318
|
+
(bp, i) => React.createElement(
|
|
344
319
|
"div",
|
|
345
|
-
{ key: i, style:
|
|
346
|
-
|
|
320
|
+
{ key: i, style: { ...S.row, marginBottom: "2px" } },
|
|
321
|
+
React.createElement(
|
|
347
322
|
"code",
|
|
348
323
|
{ style: { color: "#818cf8", fontSize: "11px" } },
|
|
349
324
|
`\u2265 ${bp.minWidth}`
|
|
350
325
|
),
|
|
351
|
-
|
|
326
|
+
React.createElement(
|
|
352
327
|
"span",
|
|
353
328
|
{ style: { color: "#6b7280", fontSize: "11px" } },
|
|
354
329
|
bp.classes
|
|
@@ -361,45 +336,45 @@ function ContainerPanel() {
|
|
|
361
336
|
);
|
|
362
337
|
}
|
|
363
338
|
function TokensPanel() {
|
|
364
|
-
const [tokens, setTokens_] =
|
|
365
|
-
|
|
339
|
+
const [tokens, setTokens_] = useState({});
|
|
340
|
+
useEffect(() => {
|
|
366
341
|
const engine = window.__TW_TOKEN_ENGINE__;
|
|
367
342
|
if (!engine) return;
|
|
368
343
|
setTokens_(engine.getTokens());
|
|
369
|
-
const unsub = engine.subscribe((t) => setTokens_(
|
|
344
|
+
const unsub = engine.subscribe((t) => setTokens_({ ...t }));
|
|
370
345
|
return unsub;
|
|
371
346
|
}, []);
|
|
372
347
|
const entries = Object.entries(tokens);
|
|
373
348
|
if (entries.length === 0) {
|
|
374
|
-
return
|
|
349
|
+
return React.createElement(
|
|
375
350
|
"div",
|
|
376
351
|
{ style: S.emptyPanel },
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
352
|
+
React.createElement("span", { style: { opacity: 0.4 } }, "No live tokens registered."),
|
|
353
|
+
React.createElement("br", null),
|
|
354
|
+
React.createElement(
|
|
380
355
|
"span",
|
|
381
356
|
{ style: { opacity: 0.3, fontSize: "11px" } },
|
|
382
357
|
'Use liveToken({ primary: "#3b82f6" }) to register tokens.'
|
|
383
358
|
)
|
|
384
359
|
);
|
|
385
360
|
}
|
|
386
|
-
return
|
|
361
|
+
return React.createElement(
|
|
387
362
|
"div",
|
|
388
363
|
{ style: S.scrollArea },
|
|
389
|
-
|
|
364
|
+
React.createElement(
|
|
390
365
|
"div",
|
|
391
|
-
{ style:
|
|
366
|
+
{ style: { ...S.sectionTitle, padding: "8px 12px 4px", color: "#52525b" } },
|
|
392
367
|
"Click color to edit \xB7 Changes apply instantly"
|
|
393
368
|
),
|
|
394
369
|
entries.map(([name, value]) => {
|
|
395
370
|
const isColor = value.startsWith("#") || value.startsWith("rgb") || value.startsWith("hsl");
|
|
396
|
-
return
|
|
371
|
+
return React.createElement(
|
|
397
372
|
"div",
|
|
398
|
-
{ key: name, style:
|
|
399
|
-
|
|
373
|
+
{ key: name, style: { ...S.row, padding: "6px 12px", borderBottom: "1px solid #18181b" } },
|
|
374
|
+
React.createElement(
|
|
400
375
|
"div",
|
|
401
376
|
{ style: { display: "flex", alignItems: "center", gap: "8px" } },
|
|
402
|
-
isColor &&
|
|
377
|
+
isColor && React.createElement("div", {
|
|
403
378
|
style: {
|
|
404
379
|
width: "16px",
|
|
405
380
|
height: "16px",
|
|
@@ -409,9 +384,9 @@ function TokensPanel() {
|
|
|
409
384
|
flexShrink: 0
|
|
410
385
|
}
|
|
411
386
|
}),
|
|
412
|
-
|
|
387
|
+
React.createElement("span", { style: { color: "#a1a1aa", fontSize: "12px" } }, name)
|
|
413
388
|
),
|
|
414
|
-
isColor ?
|
|
389
|
+
isColor ? React.createElement("input", {
|
|
415
390
|
type: "color",
|
|
416
391
|
defaultValue: value.startsWith("#") ? value : "#000000",
|
|
417
392
|
style: {
|
|
@@ -425,7 +400,7 @@ function TokensPanel() {
|
|
|
425
400
|
const engine = window.__TW_TOKEN_ENGINE__;
|
|
426
401
|
if (engine) engine.setToken(name, e.target.value);
|
|
427
402
|
}
|
|
428
|
-
}) :
|
|
403
|
+
}) : React.createElement("input", {
|
|
429
404
|
type: "text",
|
|
430
405
|
defaultValue: value,
|
|
431
406
|
style: {
|
|
@@ -448,18 +423,39 @@ function TokensPanel() {
|
|
|
448
423
|
);
|
|
449
424
|
}
|
|
450
425
|
function AnalyzerPanel() {
|
|
451
|
-
const [scanning, setScanning] =
|
|
452
|
-
const [results, setResults] =
|
|
453
|
-
const
|
|
426
|
+
const [scanning, setScanning] = useState(false);
|
|
427
|
+
const [results, setResults] = useState(null);
|
|
428
|
+
const [engineMetrics, setEngineMetrics] = useState(null);
|
|
429
|
+
const [metricsFetching, setMetricsFetching] = useState(false);
|
|
430
|
+
const [metricsError, setMetricsError] = useState(null);
|
|
431
|
+
const loadEngineMetrics = useCallback(async () => {
|
|
432
|
+
setMetricsFetching(true);
|
|
433
|
+
setMetricsError(null);
|
|
434
|
+
try {
|
|
435
|
+
const res = await fetch("http://localhost:3000/metrics", {
|
|
436
|
+
signal: AbortSignal.timeout(2e3)
|
|
437
|
+
});
|
|
438
|
+
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
439
|
+
const data = await res.json();
|
|
440
|
+
setEngineMetrics(data);
|
|
441
|
+
} catch (e) {
|
|
442
|
+
const msg = e instanceof Error ? e.message : String(e);
|
|
443
|
+
setMetricsError(
|
|
444
|
+
msg.includes("Failed to fetch") || msg.includes("NetworkError") ? "Dashboard tidak berjalan. Jalankan: tw dashboard" : msg
|
|
445
|
+
);
|
|
446
|
+
setEngineMetrics(null);
|
|
447
|
+
} finally {
|
|
448
|
+
setMetricsFetching(false);
|
|
449
|
+
}
|
|
450
|
+
}, []);
|
|
451
|
+
const runScan = useCallback(() => {
|
|
454
452
|
setScanning(true);
|
|
455
453
|
setTimeout(() => {
|
|
456
|
-
var _a, _b, _c, _d;
|
|
457
454
|
const twEls = document.querySelectorAll("[data-tw]");
|
|
458
455
|
const classMap = /* @__PURE__ */ new Map();
|
|
459
456
|
for (const el of twEls) {
|
|
460
457
|
const { name, classes } = (() => {
|
|
461
|
-
|
|
462
|
-
const dTw = (_a2 = el.dataset.tw) != null ? _a2 : null;
|
|
458
|
+
const dTw = el.dataset.tw ?? null;
|
|
463
459
|
if (!dTw) return { name: "?", classes: [] };
|
|
464
460
|
const ci = dTw.indexOf(":");
|
|
465
461
|
return {
|
|
@@ -477,70 +473,186 @@ function AnalyzerPanel() {
|
|
|
477
473
|
const tokenEngine = window.__TW_TOKEN_ENGINE__;
|
|
478
474
|
setResults({
|
|
479
475
|
duplicates,
|
|
480
|
-
stateCount:
|
|
481
|
-
containerCount:
|
|
482
|
-
tokenCount: Object.keys(
|
|
476
|
+
stateCount: stateReg?.size ?? 0,
|
|
477
|
+
containerCount: containerReg?.size ?? 0,
|
|
478
|
+
tokenCount: Object.keys(tokenEngine?.getTokens?.() ?? {}).length
|
|
483
479
|
});
|
|
484
480
|
setScanning(false);
|
|
485
481
|
}, 100);
|
|
486
482
|
}, []);
|
|
487
|
-
return
|
|
483
|
+
return React.createElement(
|
|
488
484
|
"div",
|
|
489
485
|
{ style: S.scrollArea },
|
|
490
|
-
|
|
486
|
+
React.createElement(
|
|
491
487
|
"div",
|
|
492
488
|
{ style: { padding: "10px 12px" } },
|
|
493
|
-
|
|
489
|
+
// ── DOM Scan ──────────────────────────────────────────────────────────
|
|
490
|
+
React.createElement(
|
|
494
491
|
"button",
|
|
495
492
|
{
|
|
496
|
-
style:
|
|
493
|
+
style: { ...S.copyBtn, borderTop: "none", color: "#60a5fa", fontWeight: "600" },
|
|
497
494
|
onClick: runScan,
|
|
498
495
|
disabled: scanning
|
|
499
496
|
},
|
|
500
497
|
scanning ? "Scanning DOM..." : "\u25B6 Run DOM Scan"
|
|
501
498
|
),
|
|
502
|
-
|
|
499
|
+
// ── Engine Metrics (dari dashboard) ───────────────────────────────────
|
|
500
|
+
React.createElement(
|
|
501
|
+
"div",
|
|
502
|
+
{ style: { ...S.section, marginTop: "8px" } },
|
|
503
|
+
React.createElement(
|
|
504
|
+
"div",
|
|
505
|
+
{ style: { ...S.sectionTitle, marginBottom: "6px" } },
|
|
506
|
+
"\u26A1 Engine Metrics"
|
|
507
|
+
),
|
|
508
|
+
engineMetrics ? React.createElement(
|
|
509
|
+
"div",
|
|
510
|
+
null,
|
|
511
|
+
React.createElement(
|
|
512
|
+
"div",
|
|
513
|
+
{ style: S.row },
|
|
514
|
+
React.createElement("span", { style: S.varKey }, "Build"),
|
|
515
|
+
React.createElement(
|
|
516
|
+
"span",
|
|
517
|
+
{ style: { ...S.varValue, color: "#34d399" } },
|
|
518
|
+
engineMetrics.buildMs != null ? `${engineMetrics.buildMs}ms` : "\u2014"
|
|
519
|
+
)
|
|
520
|
+
),
|
|
521
|
+
React.createElement(
|
|
522
|
+
"div",
|
|
523
|
+
{ style: S.row },
|
|
524
|
+
React.createElement("span", { style: S.varKey }, "Classes"),
|
|
525
|
+
React.createElement(
|
|
526
|
+
"span",
|
|
527
|
+
{ style: { ...S.varValue, color: "#34d399" } },
|
|
528
|
+
String(engineMetrics.classCount ?? "\u2014")
|
|
529
|
+
)
|
|
530
|
+
),
|
|
531
|
+
React.createElement(
|
|
532
|
+
"div",
|
|
533
|
+
{ style: S.row },
|
|
534
|
+
React.createElement("span", { style: S.varKey }, "Files"),
|
|
535
|
+
React.createElement(
|
|
536
|
+
"span",
|
|
537
|
+
{ style: { ...S.varValue, color: "#34d399" } },
|
|
538
|
+
String(engineMetrics.fileCount ?? "\u2014")
|
|
539
|
+
)
|
|
540
|
+
),
|
|
541
|
+
React.createElement(
|
|
542
|
+
"div",
|
|
543
|
+
{ style: S.row },
|
|
544
|
+
React.createElement("span", { style: S.varKey }, "Mode"),
|
|
545
|
+
React.createElement(
|
|
546
|
+
"span",
|
|
547
|
+
{ style: { color: "#a1a1aa", fontSize: "11px" } },
|
|
548
|
+
String(engineMetrics.mode ?? "\u2014")
|
|
549
|
+
)
|
|
550
|
+
),
|
|
551
|
+
React.createElement(
|
|
552
|
+
"button",
|
|
553
|
+
{
|
|
554
|
+
style: {
|
|
555
|
+
...S.copyBtn,
|
|
556
|
+
borderTop: "none",
|
|
557
|
+
color: "#52525b",
|
|
558
|
+
fontSize: "10px",
|
|
559
|
+
padding: "4px 0"
|
|
560
|
+
},
|
|
561
|
+
onClick: loadEngineMetrics,
|
|
562
|
+
disabled: metricsFetching
|
|
563
|
+
},
|
|
564
|
+
"\u21BB Refresh"
|
|
565
|
+
)
|
|
566
|
+
) : metricsError ? React.createElement(
|
|
567
|
+
"div",
|
|
568
|
+
null,
|
|
569
|
+
React.createElement(
|
|
570
|
+
"div",
|
|
571
|
+
{ style: { color: "#f87171", fontSize: "11px", marginBottom: "6px" } },
|
|
572
|
+
metricsError
|
|
573
|
+
),
|
|
574
|
+
React.createElement(
|
|
575
|
+
"button",
|
|
576
|
+
{
|
|
577
|
+
style: { ...S.copyBtn, borderTop: "none", color: "#34d399", fontWeight: "600" },
|
|
578
|
+
onClick: loadEngineMetrics,
|
|
579
|
+
disabled: metricsFetching
|
|
580
|
+
},
|
|
581
|
+
metricsFetching ? "Connecting..." : "\u21BB Retry"
|
|
582
|
+
)
|
|
583
|
+
) : React.createElement(
|
|
584
|
+
"div",
|
|
585
|
+
null,
|
|
586
|
+
React.createElement(
|
|
587
|
+
"div",
|
|
588
|
+
{
|
|
589
|
+
style: {
|
|
590
|
+
color: "#71717a",
|
|
591
|
+
fontSize: "11px",
|
|
592
|
+
lineHeight: 1.6,
|
|
593
|
+
marginBottom: "6px"
|
|
594
|
+
}
|
|
595
|
+
},
|
|
596
|
+
"Rust analyzer hanya tersedia via CLI atau dashboard.",
|
|
597
|
+
React.createElement("br", null),
|
|
598
|
+
React.createElement(
|
|
599
|
+
"code",
|
|
600
|
+
{ style: { color: "#52525b", fontSize: "10px" } },
|
|
601
|
+
"tw analyze . | tw dashboard"
|
|
602
|
+
)
|
|
603
|
+
),
|
|
604
|
+
React.createElement(
|
|
605
|
+
"button",
|
|
606
|
+
{
|
|
607
|
+
style: { ...S.copyBtn, borderTop: "none", color: "#34d399", fontWeight: "600" },
|
|
608
|
+
onClick: loadEngineMetrics,
|
|
609
|
+
disabled: metricsFetching
|
|
610
|
+
},
|
|
611
|
+
metricsFetching ? "Connecting..." : "\u26A1 Load from Dashboard"
|
|
612
|
+
)
|
|
613
|
+
)
|
|
614
|
+
),
|
|
615
|
+
// ── DOM Scan Results ──────────────────────────────────────────────────
|
|
616
|
+
results && React.createElement(
|
|
503
617
|
"div",
|
|
504
618
|
null,
|
|
505
|
-
|
|
506
|
-
React__default.default.createElement(
|
|
619
|
+
React.createElement(
|
|
507
620
|
"div",
|
|
508
621
|
{ style: S.section },
|
|
509
|
-
|
|
510
|
-
|
|
622
|
+
React.createElement("div", { style: S.sectionTitle }, "Summary"),
|
|
623
|
+
React.createElement(
|
|
511
624
|
"div",
|
|
512
625
|
{ style: S.row },
|
|
513
|
-
|
|
514
|
-
|
|
626
|
+
React.createElement("span", { style: S.varKey }, "State components"),
|
|
627
|
+
React.createElement("span", { style: S.varValue }, String(results.stateCount))
|
|
515
628
|
),
|
|
516
|
-
|
|
629
|
+
React.createElement(
|
|
517
630
|
"div",
|
|
518
631
|
{ style: S.row },
|
|
519
|
-
|
|
520
|
-
|
|
632
|
+
React.createElement("span", { style: S.varKey }, "Container components"),
|
|
633
|
+
React.createElement("span", { style: S.varValue }, String(results.containerCount))
|
|
521
634
|
),
|
|
522
|
-
|
|
635
|
+
React.createElement(
|
|
523
636
|
"div",
|
|
524
637
|
{ style: S.row },
|
|
525
|
-
|
|
526
|
-
|
|
638
|
+
React.createElement("span", { style: S.varKey }, "Live tokens"),
|
|
639
|
+
React.createElement("span", { style: S.varValue }, String(results.tokenCount))
|
|
527
640
|
)
|
|
528
641
|
),
|
|
529
|
-
|
|
530
|
-
results.duplicates.length > 0 ? React__default.default.createElement(
|
|
642
|
+
results.duplicates.length > 0 ? React.createElement(
|
|
531
643
|
"div",
|
|
532
644
|
{ style: S.section },
|
|
533
|
-
|
|
645
|
+
React.createElement("div", { style: S.sectionTitle }, "Duplicate Class Sets"),
|
|
534
646
|
results.duplicates.map(
|
|
535
|
-
(d, i) =>
|
|
647
|
+
(d, i) => React.createElement(
|
|
536
648
|
"div",
|
|
537
649
|
{ key: i, style: { marginBottom: "8px" } },
|
|
538
|
-
|
|
650
|
+
React.createElement(
|
|
539
651
|
"div",
|
|
540
652
|
{ style: { color: "#f59e0b", fontSize: "11px", marginBottom: "2px" } },
|
|
541
653
|
d.names.join(", ")
|
|
542
654
|
),
|
|
543
|
-
|
|
655
|
+
React.createElement(
|
|
544
656
|
"code",
|
|
545
657
|
{
|
|
546
658
|
style: {
|
|
@@ -553,10 +665,10 @@ function AnalyzerPanel() {
|
|
|
553
665
|
)
|
|
554
666
|
)
|
|
555
667
|
)
|
|
556
|
-
) :
|
|
668
|
+
) : React.createElement(
|
|
557
669
|
"div",
|
|
558
670
|
{ style: S.section },
|
|
559
|
-
|
|
671
|
+
React.createElement(
|
|
560
672
|
"span",
|
|
561
673
|
{ style: { color: "#34d399", fontSize: "12px" } },
|
|
562
674
|
"\u2713 No duplicate class sets in current DOM"
|
|
@@ -568,73 +680,69 @@ function AnalyzerPanel() {
|
|
|
568
680
|
}
|
|
569
681
|
function TwDevTools() {
|
|
570
682
|
if (process.env.NODE_ENV === "production") return null;
|
|
571
|
-
const [state, setState] =
|
|
683
|
+
const [state, setState] = useState({
|
|
572
684
|
open: false,
|
|
573
685
|
panel: "inspector",
|
|
574
686
|
pinned: false,
|
|
575
687
|
inspected: null,
|
|
576
688
|
position: { x: 0, y: 0 }
|
|
577
689
|
});
|
|
578
|
-
const overlayRef =
|
|
690
|
+
const overlayRef = useRef(null);
|
|
579
691
|
const isInspecting = state.open && state.panel === "inspector";
|
|
580
|
-
|
|
692
|
+
useEffect(() => {
|
|
581
693
|
const onKey = (e) => {
|
|
582
694
|
if (e.ctrlKey && e.shiftKey && e.key === "D") {
|
|
583
695
|
e.preventDefault();
|
|
584
|
-
setState((s) =>
|
|
696
|
+
setState((s) => ({ ...s, open: !s.open, inspected: null }));
|
|
585
697
|
}
|
|
586
698
|
if (e.key === "Escape")
|
|
587
|
-
setState((s) =>
|
|
588
|
-
if (e.key === "1") setState((s) => s.open ?
|
|
589
|
-
if (e.key === "2") setState((s) => s.open ?
|
|
590
|
-
if (e.key === "3") setState((s) => s.open ?
|
|
591
|
-
if (e.key === "4") setState((s) => s.open ?
|
|
592
|
-
if (e.key === "5") setState((s) => s.open ?
|
|
699
|
+
setState((s) => ({ ...s, open: false, pinned: false, inspected: null }));
|
|
700
|
+
if (e.key === "1") setState((s) => s.open ? { ...s, panel: "inspector" } : s);
|
|
701
|
+
if (e.key === "2") setState((s) => s.open ? { ...s, panel: "state" } : s);
|
|
702
|
+
if (e.key === "3") setState((s) => s.open ? { ...s, panel: "container" } : s);
|
|
703
|
+
if (e.key === "4") setState((s) => s.open ? { ...s, panel: "tokens" } : s);
|
|
704
|
+
if (e.key === "5") setState((s) => s.open ? { ...s, panel: "analyzer" } : s);
|
|
593
705
|
};
|
|
594
706
|
window.addEventListener("keydown", onKey);
|
|
595
707
|
return () => window.removeEventListener("keydown", onKey);
|
|
596
708
|
}, []);
|
|
597
|
-
const onMouseMove =
|
|
709
|
+
const onMouseMove = useCallback(
|
|
598
710
|
(e) => {
|
|
599
|
-
var _a;
|
|
600
711
|
if (!isInspecting || state.pinned) return;
|
|
601
712
|
const twEl = findNearestTwElement(e.target);
|
|
602
713
|
if (!twEl) {
|
|
603
|
-
setState((s) =>
|
|
714
|
+
setState((s) => ({ ...s, inspected: null, position: { x: e.clientX, y: e.clientY } }));
|
|
604
715
|
return;
|
|
605
716
|
}
|
|
606
|
-
const { name, classes } = parseDataTw(
|
|
607
|
-
setState((s) => {
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
});
|
|
624
|
-
});
|
|
717
|
+
const { name, classes } = parseDataTw(twEl.dataset.tw ?? null);
|
|
718
|
+
setState((s) => ({
|
|
719
|
+
...s,
|
|
720
|
+
position: { x: e.clientX, y: e.clientY },
|
|
721
|
+
inspected: {
|
|
722
|
+
componentName: name,
|
|
723
|
+
element: twEl,
|
|
724
|
+
rect: twEl.getBoundingClientRect(),
|
|
725
|
+
twClasses: classes,
|
|
726
|
+
variantProps: parseVariantAttr(twEl.dataset.twVariants ?? null),
|
|
727
|
+
atomicMap: getAtomicMap(classes),
|
|
728
|
+
rawClassName: twEl.className,
|
|
729
|
+
stateNames: getStateNames(twEl),
|
|
730
|
+
activeStates: getActiveStates(twEl),
|
|
731
|
+
containerBps: getContainerBps(twEl)
|
|
732
|
+
}
|
|
733
|
+
}));
|
|
625
734
|
},
|
|
626
735
|
[isInspecting, state.pinned]
|
|
627
736
|
);
|
|
628
|
-
const onClick =
|
|
737
|
+
const onClick = useCallback(
|
|
629
738
|
(e) => {
|
|
630
|
-
var _a;
|
|
631
739
|
if (!isInspecting) return;
|
|
632
|
-
if (
|
|
633
|
-
setState((s) =>
|
|
740
|
+
if (overlayRef.current?.contains(e.target)) return;
|
|
741
|
+
setState((s) => ({ ...s, pinned: !s.pinned && !!s.inspected }));
|
|
634
742
|
},
|
|
635
743
|
[isInspecting]
|
|
636
744
|
);
|
|
637
|
-
|
|
745
|
+
useEffect(() => {
|
|
638
746
|
if (!isInspecting) return;
|
|
639
747
|
window.addEventListener("mousemove", onMouseMove);
|
|
640
748
|
window.addEventListener("click", onClick);
|
|
@@ -644,10 +752,10 @@ function TwDevTools() {
|
|
|
644
752
|
};
|
|
645
753
|
}, [isInspecting, onMouseMove, onClick]);
|
|
646
754
|
if (!state.open) {
|
|
647
|
-
return
|
|
755
|
+
return React.createElement(
|
|
648
756
|
"button",
|
|
649
757
|
{
|
|
650
|
-
onClick: () => setState((s) =>
|
|
758
|
+
onClick: () => setState((s) => ({ ...s, open: true })),
|
|
651
759
|
style: S.toggleBtn,
|
|
652
760
|
title: "tailwind-styled-v4 DevTools (Ctrl+Shift+D)"
|
|
653
761
|
},
|
|
@@ -661,20 +769,21 @@ function TwDevTools() {
|
|
|
661
769
|
{ id: "tokens", label: "Tokens", icon: "\u{1F3A8}" },
|
|
662
770
|
{ id: "analyzer", label: "Analyzer", icon: "\u{1F4CA}" }
|
|
663
771
|
];
|
|
664
|
-
return
|
|
772
|
+
return React.createElement(
|
|
665
773
|
"div",
|
|
666
774
|
{ style: S.root },
|
|
667
775
|
// ── Element highlight (inspector only) ──────────────────────────────
|
|
668
|
-
isInspecting && state.inspected &&
|
|
669
|
-
style:
|
|
776
|
+
isInspecting && state.inspected && React.createElement("div", {
|
|
777
|
+
style: {
|
|
778
|
+
...S.highlight,
|
|
670
779
|
top: state.inspected.rect.top + window.scrollY,
|
|
671
780
|
left: state.inspected.rect.left + window.scrollX,
|
|
672
781
|
width: state.inspected.rect.width,
|
|
673
782
|
height: state.inspected.rect.height
|
|
674
|
-
}
|
|
783
|
+
}
|
|
675
784
|
}),
|
|
676
785
|
// ── Component name label ────────────────────────────────────────────
|
|
677
|
-
isInspecting && state.inspected &&
|
|
786
|
+
isInspecting && state.inspected && React.createElement(
|
|
678
787
|
"div",
|
|
679
788
|
{
|
|
680
789
|
style: {
|
|
@@ -694,58 +803,61 @@ function TwDevTools() {
|
|
|
694
803
|
state.inspected.componentName
|
|
695
804
|
),
|
|
696
805
|
// ── Main DevTools panel ─────────────────────────────────────────────
|
|
697
|
-
|
|
806
|
+
React.createElement(
|
|
698
807
|
"div",
|
|
699
808
|
{
|
|
700
809
|
ref: overlayRef,
|
|
701
|
-
style: state.panel === "inspector" && state.inspected ?
|
|
810
|
+
style: state.panel === "inspector" && state.inspected ? {
|
|
811
|
+
...S.panel,
|
|
702
812
|
top: Math.min(state.position.y + 16, window.innerHeight - 460),
|
|
703
813
|
left: Math.min(state.position.x + 16, window.innerWidth - 320)
|
|
704
|
-
}
|
|
814
|
+
} : {
|
|
815
|
+
...S.panel,
|
|
705
816
|
top: "auto",
|
|
706
817
|
bottom: "40px",
|
|
707
818
|
right: "12px",
|
|
708
819
|
left: "auto"
|
|
709
|
-
}
|
|
820
|
+
}
|
|
710
821
|
},
|
|
711
822
|
// Header
|
|
712
|
-
|
|
823
|
+
React.createElement(
|
|
713
824
|
"div",
|
|
714
825
|
{ style: S.header },
|
|
715
|
-
|
|
826
|
+
React.createElement(
|
|
716
827
|
"span",
|
|
717
828
|
{ style: S.componentName },
|
|
718
829
|
state.inspected && state.panel === "inspector" ? state.inspected.componentName : "tailwind-styled-v4"
|
|
719
830
|
),
|
|
720
|
-
|
|
831
|
+
React.createElement(
|
|
721
832
|
"div",
|
|
722
833
|
{ style: S.headerActions },
|
|
723
|
-
state.pinned &&
|
|
724
|
-
|
|
834
|
+
state.pinned && React.createElement("span", { style: S.pinBadge }, "\u{1F4CC}"),
|
|
835
|
+
React.createElement(
|
|
725
836
|
"button",
|
|
726
837
|
{
|
|
727
838
|
style: S.closeBtn,
|
|
728
|
-
onClick: () => setState((s) =>
|
|
839
|
+
onClick: () => setState((s) => ({ ...s, open: false, pinned: false, inspected: null }))
|
|
729
840
|
},
|
|
730
841
|
"\u2715"
|
|
731
842
|
)
|
|
732
843
|
)
|
|
733
844
|
),
|
|
734
845
|
// Tab bar
|
|
735
|
-
|
|
846
|
+
React.createElement(
|
|
736
847
|
"div",
|
|
737
848
|
{ style: S.tabBar },
|
|
738
849
|
PANELS.map(
|
|
739
|
-
(p) =>
|
|
850
|
+
(p) => React.createElement(
|
|
740
851
|
"button",
|
|
741
852
|
{
|
|
742
853
|
key: p.id,
|
|
743
|
-
style:
|
|
854
|
+
style: {
|
|
855
|
+
...S.tab,
|
|
744
856
|
background: state.panel === p.id ? "#18181b" : "none",
|
|
745
857
|
color: state.panel === p.id ? "#e4e4e7" : "#52525b",
|
|
746
858
|
borderBottom: state.panel === p.id ? "2px solid #3b82f6" : "2px solid transparent"
|
|
747
|
-
}
|
|
748
|
-
onClick: () => setState((s) =>
|
|
859
|
+
},
|
|
860
|
+
onClick: () => setState((s) => ({ ...s, panel: p.id })),
|
|
749
861
|
title: `${p.label} (${PANELS.findIndex((x) => x.id === p.id) + 1})`
|
|
750
862
|
},
|
|
751
863
|
`${p.icon} ${p.label}`
|
|
@@ -753,22 +865,22 @@ function TwDevTools() {
|
|
|
753
865
|
)
|
|
754
866
|
),
|
|
755
867
|
// Panel content
|
|
756
|
-
state.panel === "inspector" &&
|
|
868
|
+
state.panel === "inspector" && React.createElement(InspectorPanel, {
|
|
757
869
|
inspected: state.inspected,
|
|
758
870
|
position: state.position,
|
|
759
871
|
pinned: state.pinned
|
|
760
872
|
}),
|
|
761
|
-
state.panel === "state" &&
|
|
762
|
-
state.panel === "container" &&
|
|
763
|
-
state.panel === "tokens" &&
|
|
764
|
-
state.panel === "analyzer" &&
|
|
873
|
+
state.panel === "state" && React.createElement(StatePanel, null),
|
|
874
|
+
state.panel === "container" && React.createElement(ContainerPanel, null),
|
|
875
|
+
state.panel === "tokens" && React.createElement(TokensPanel, null),
|
|
876
|
+
state.panel === "analyzer" && React.createElement(AnalyzerPanel, null)
|
|
765
877
|
),
|
|
766
878
|
// ── Status bar ──────────────────────────────────────────────────────
|
|
767
|
-
|
|
879
|
+
React.createElement(
|
|
768
880
|
"div",
|
|
769
881
|
{ style: S.statusBar },
|
|
770
|
-
|
|
771
|
-
|
|
882
|
+
React.createElement("span", null, "\u{1F3A8} tailwind-styled-v4 DevTools"),
|
|
883
|
+
React.createElement(
|
|
772
884
|
"span",
|
|
773
885
|
{ style: { opacity: 0.6, fontSize: "10px" } },
|
|
774
886
|
state.pinned ? "Click to unpin" : isInspecting ? "Hover to inspect \xB7 Click to pin \xB7 1-5 switch panel \xB7 Esc close" : "Ctrl+Shift+D close \xB7 1-5 switch panel"
|
|
@@ -950,10 +1062,9 @@ var S = {
|
|
|
950
1062
|
};
|
|
951
1063
|
function DevToolsProvider() {
|
|
952
1064
|
if (process.env.NODE_ENV === "production") return null;
|
|
953
|
-
return
|
|
1065
|
+
return React.createElement(TwDevTools);
|
|
954
1066
|
}
|
|
955
1067
|
|
|
956
|
-
|
|
957
|
-
|
|
958
|
-
//# sourceMappingURL=devtools.
|
|
959
|
-
//# sourceMappingURL=devtools.cjs.map
|
|
1068
|
+
export { DevToolsProvider, TwDevTools };
|
|
1069
|
+
//# sourceMappingURL=devtools.mjs.map
|
|
1070
|
+
//# sourceMappingURL=devtools.mjs.map
|