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