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.
Files changed (194) hide show
  1. package/CHANGELOG.md +398 -0
  2. package/LICENSE +21 -0
  3. package/README.md +532 -0
  4. package/dist/analyzer.d.mts +114 -0
  5. package/dist/analyzer.d.ts +114 -0
  6. package/dist/analyzer.js +1555 -0
  7. package/dist/analyzer.js.map +1 -0
  8. package/dist/analyzer.mjs +1544 -0
  9. package/dist/analyzer.mjs.map +1 -0
  10. package/dist/animate.d.mts +46 -0
  11. package/dist/animate.d.ts +41 -112
  12. package/dist/animate.js +792 -235
  13. package/dist/animate.js.map +1 -1
  14. package/dist/animate.mjs +782 -0
  15. package/dist/animate.mjs.map +1 -0
  16. package/dist/atomic.d.mts +18 -0
  17. package/dist/atomic.d.ts +18 -0
  18. package/dist/atomic.js +191 -0
  19. package/dist/atomic.js.map +1 -0
  20. package/dist/atomic.mjs +185 -0
  21. package/dist/atomic.mjs.map +1 -0
  22. package/dist/cli.d.mts +1 -0
  23. package/dist/cli.d.ts +1 -0
  24. package/dist/cli.js +6063 -0
  25. package/dist/cli.js.map +1 -0
  26. package/dist/cli.mjs +6053 -0
  27. package/dist/cli.mjs.map +1 -0
  28. package/dist/{compiler.d.cts → compiler.d.mts} +503 -210
  29. package/dist/compiler.d.ts +503 -210
  30. package/dist/compiler.js +1549 -566
  31. package/dist/compiler.js.map +1 -1
  32. package/dist/{compiler.cjs → compiler.mjs} +1476 -627
  33. package/dist/compiler.mjs.map +1 -0
  34. package/dist/dashboard.d.mts +272 -0
  35. package/dist/dashboard.d.ts +272 -0
  36. package/dist/dashboard.js +249 -0
  37. package/dist/dashboard.js.map +1 -0
  38. package/dist/dashboard.mjs +239 -0
  39. package/dist/dashboard.mjs.map +1 -0
  40. package/dist/devtools.js +336 -211
  41. package/dist/devtools.js.map +1 -1
  42. package/dist/{devtools.cjs → devtools.mjs} +331 -220
  43. package/dist/devtools.mjs.map +1 -0
  44. package/dist/engine.d.mts +84 -0
  45. package/dist/engine.d.ts +84 -0
  46. package/dist/engine.js +3014 -0
  47. package/dist/engine.js.map +1 -0
  48. package/dist/engine.mjs +3005 -0
  49. package/dist/engine.mjs.map +1 -0
  50. package/dist/{index.d.cts → index.d.mts} +75 -4
  51. package/dist/index.d.ts +75 -4
  52. package/dist/index.js +1341 -149
  53. package/dist/index.js.map +1 -1
  54. package/dist/index.mjs +2162 -0
  55. package/dist/index.mjs.map +1 -0
  56. package/dist/liveTokenEngine-DYN3Zale.d.mts +34 -0
  57. package/dist/liveTokenEngine-DYN3Zale.d.ts +34 -0
  58. package/dist/next.d.mts +55 -0
  59. package/dist/next.d.ts +30 -20
  60. package/dist/next.js +6947 -149
  61. package/dist/next.js.map +1 -1
  62. package/dist/next.mjs +7050 -0
  63. package/dist/next.mjs.map +1 -0
  64. package/dist/plugin.d.mts +90 -0
  65. package/dist/plugin.d.ts +90 -0
  66. package/dist/plugin.js +185 -0
  67. package/dist/plugin.js.map +1 -0
  68. package/dist/plugin.mjs +174 -0
  69. package/dist/plugin.mjs.map +1 -0
  70. package/dist/pluginRegistry.d.mts +83 -0
  71. package/dist/pluginRegistry.d.ts +83 -0
  72. package/dist/pluginRegistry.js +303 -0
  73. package/dist/pluginRegistry.js.map +1 -0
  74. package/dist/pluginRegistry.mjs +298 -0
  75. package/dist/pluginRegistry.mjs.map +1 -0
  76. package/dist/{preset.d.cts → preset.d.mts} +29 -2
  77. package/dist/preset.d.ts +29 -2
  78. package/dist/preset.js +318 -21
  79. package/dist/preset.js.map +1 -1
  80. package/dist/preset.mjs +414 -0
  81. package/dist/preset.mjs.map +1 -0
  82. package/dist/rspack.d.mts +33 -0
  83. package/dist/rspack.d.ts +33 -0
  84. package/dist/rspack.js +55 -0
  85. package/dist/rspack.js.map +1 -0
  86. package/dist/rspack.mjs +45 -0
  87. package/dist/rspack.mjs.map +1 -0
  88. package/dist/runtime.d.mts +62 -0
  89. package/dist/runtime.d.ts +62 -0
  90. package/dist/runtime.js +207 -0
  91. package/dist/runtime.js.map +1 -0
  92. package/dist/runtime.mjs +188 -0
  93. package/dist/runtime.mjs.map +1 -0
  94. package/dist/runtimeCss.d.mts +65 -0
  95. package/dist/runtimeCss.d.ts +65 -0
  96. package/dist/runtimeCss.js +188 -0
  97. package/dist/runtimeCss.js.map +1 -0
  98. package/dist/runtimeCss.mjs +173 -0
  99. package/dist/runtimeCss.mjs.map +1 -0
  100. package/dist/scanner.d.mts +25 -0
  101. package/dist/scanner.d.ts +25 -0
  102. package/dist/scanner.js +717 -0
  103. package/dist/scanner.js.map +1 -0
  104. package/dist/scanner.mjs +703 -0
  105. package/dist/scanner.mjs.map +1 -0
  106. package/dist/shared.d.mts +85 -0
  107. package/dist/shared.d.ts +85 -0
  108. package/dist/shared.js +255 -0
  109. package/dist/shared.js.map +1 -0
  110. package/dist/shared.mjs +233 -0
  111. package/dist/shared.mjs.map +1 -0
  112. package/dist/storybookAddon.d.mts +108 -0
  113. package/dist/storybookAddon.d.ts +108 -0
  114. package/dist/storybookAddon.js +95 -0
  115. package/dist/storybookAddon.js.map +1 -0
  116. package/dist/storybookAddon.mjs +88 -0
  117. package/dist/storybookAddon.mjs.map +1 -0
  118. package/dist/svelte.d.mts +114 -0
  119. package/dist/svelte.d.ts +114 -0
  120. package/dist/svelte.js +67 -0
  121. package/dist/svelte.js.map +1 -0
  122. package/dist/svelte.mjs +59 -0
  123. package/dist/svelte.mjs.map +1 -0
  124. package/dist/testing.d.mts +185 -0
  125. package/dist/testing.d.ts +185 -0
  126. package/dist/testing.js +173 -0
  127. package/dist/testing.js.map +1 -0
  128. package/dist/testing.mjs +158 -0
  129. package/dist/testing.mjs.map +1 -0
  130. package/dist/{theme.d.cts → theme.d.mts} +18 -11
  131. package/dist/theme.d.ts +18 -11
  132. package/dist/theme.js +205 -19
  133. package/dist/theme.js.map +1 -1
  134. package/dist/theme.mjs +311 -0
  135. package/dist/theme.mjs.map +1 -0
  136. package/dist/types-DXr2PmGP.d.mts +31 -0
  137. package/dist/types-DXr2PmGP.d.ts +31 -0
  138. package/dist/vite.d.mts +51 -0
  139. package/dist/vite.d.ts +35 -6
  140. package/dist/vite.js +4254 -57
  141. package/dist/vite.js.map +1 -1
  142. package/dist/vite.mjs +4281 -0
  143. package/dist/vite.mjs.map +1 -0
  144. package/dist/vue.d.mts +89 -0
  145. package/dist/vue.d.ts +89 -0
  146. package/dist/vue.js +104 -0
  147. package/dist/vue.js.map +1 -0
  148. package/dist/vue.mjs +96 -0
  149. package/dist/vue.mjs.map +1 -0
  150. package/package.json +173 -67
  151. package/dist/animate.cjs +0 -252
  152. package/dist/animate.cjs.map +0 -1
  153. package/dist/animate.d.cts +0 -117
  154. package/dist/astTransform-ua-eapqs.d.cts +0 -41
  155. package/dist/astTransform-ua-eapqs.d.ts +0 -41
  156. package/dist/compiler.cjs.map +0 -1
  157. package/dist/css.cjs +0 -71
  158. package/dist/css.cjs.map +0 -1
  159. package/dist/css.d.cts +0 -45
  160. package/dist/css.d.ts +0 -45
  161. package/dist/css.js +0 -62
  162. package/dist/css.js.map +0 -1
  163. package/dist/devtools.cjs.map +0 -1
  164. package/dist/index.cjs +0 -1058
  165. package/dist/index.cjs.map +0 -1
  166. package/dist/next.cjs +0 -268
  167. package/dist/next.cjs.map +0 -1
  168. package/dist/next.d.cts +0 -45
  169. package/dist/plugins.cjs +0 -396
  170. package/dist/plugins.cjs.map +0 -1
  171. package/dist/plugins.d.cts +0 -231
  172. package/dist/plugins.d.ts +0 -231
  173. package/dist/plugins.js +0 -381
  174. package/dist/plugins.js.map +0 -1
  175. package/dist/preset.cjs +0 -129
  176. package/dist/preset.cjs.map +0 -1
  177. package/dist/theme.cjs +0 -154
  178. package/dist/theme.cjs.map +0 -1
  179. package/dist/turbopackLoader.cjs +0 -2689
  180. package/dist/turbopackLoader.cjs.map +0 -1
  181. package/dist/turbopackLoader.d.cts +0 -22
  182. package/dist/turbopackLoader.d.ts +0 -22
  183. package/dist/turbopackLoader.js +0 -2681
  184. package/dist/turbopackLoader.js.map +0 -1
  185. package/dist/vite.cjs +0 -105
  186. package/dist/vite.cjs.map +0 -1
  187. package/dist/vite.d.cts +0 -22
  188. package/dist/webpackLoader.cjs +0 -2670
  189. package/dist/webpackLoader.cjs.map +0 -1
  190. package/dist/webpackLoader.d.cts +0 -24
  191. package/dist/webpackLoader.d.ts +0 -24
  192. package/dist/webpackLoader.js +0 -2662
  193. package/dist/webpackLoader.js.map +0 -1
  194. /package/dist/{devtools.d.cts → devtools.d.mts} +0 -0
package/dist/devtools.js CHANGED
@@ -1,25 +1,12 @@
1
- import React, { useState, useRef, useEffect, useCallback } from 'react';
1
+ 'use strict';
2
2
 
3
- /* tailwind-styled-v4 v4 | MIT | https://github.com/dictionar32/tailwind-styled-v4 */
4
- var __defProp = Object.defineProperty;
5
- var __defProps = Object.defineProperties;
6
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
7
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
8
- var __hasOwnProp = Object.prototype.hasOwnProperty;
9
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
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 (e) {
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 ((_a = cur.dataset) == null ? void 0 : _a.tw) return cur;
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 React.createElement(
76
+ return React__default.default.createElement(
91
77
  "div",
92
78
  { style: S.emptyPanel },
93
- React.createElement("span", { style: { opacity: 0.4 } }, "Hover an element to inspect")
79
+ React__default.default.createElement("span", { style: { opacity: 0.4 } }, "Hover an element to inspect")
94
80
  );
95
81
  }
96
- return React.createElement(
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 && React.createElement(
86
+ Object.keys(inspected.variantProps).length > 0 && React__default.default.createElement(
101
87
  "div",
102
88
  { style: S.section },
103
- React.createElement("div", { style: S.sectionTitle }, "Variants"),
89
+ React__default.default.createElement("div", { style: S.sectionTitle }, "Variants"),
104
90
  Object.entries(inspected.variantProps).map(
105
- ([k, v]) => React.createElement(
91
+ ([k, v]) => React__default.default.createElement(
106
92
  "div",
107
93
  { key: k, style: S.row },
108
- React.createElement("span", { style: S.varKey }, k),
109
- React.createElement("span", { style: S.varValue }, `"${v}"`)
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 && React.createElement(
100
+ Object.keys(inspected.activeStates).length > 0 && React__default.default.createElement(
115
101
  "div",
116
102
  { style: S.section },
117
- React.createElement("div", { style: S.sectionTitle }, "Active Data Attrs"),
103
+ React__default.default.createElement("div", { style: S.sectionTitle }, "Active Data Attrs"),
118
104
  Object.entries(inspected.activeStates).map(
119
- ([k, v]) => React.createElement(
105
+ ([k, v]) => React__default.default.createElement(
120
106
  "div",
121
107
  { key: k, style: S.row },
122
- React.createElement("code", { style: __spreadProps(__spreadValues({}, S.varKey), { color: "#f59e0b" }) }, `data-${k}`),
123
- React.createElement("span", { style: __spreadProps(__spreadValues({}, S.varValue), { color: "#34d399" }) }, `"${v}"`)
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 && React.createElement(
114
+ inspected.stateNames.length > 0 && React__default.default.createElement(
129
115
  "div",
130
116
  { style: S.section },
131
- React.createElement("div", { style: S.sectionTitle }, "Reactive States"),
132
- React.createElement(
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) => React.createElement(
122
+ (s) => React__default.default.createElement(
137
123
  "code",
138
124
  {
139
125
  key: s,
140
- style: __spreadProps(__spreadValues({}, S.classChip), {
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 && React.createElement(
138
+ inspected.containerBps.length > 0 && React__default.default.createElement(
152
139
  "div",
153
140
  { style: S.section },
154
- React.createElement("div", { style: S.sectionTitle }, "Container Breakpoints"),
155
- React.createElement(
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) => React.createElement(
146
+ (bp) => React__default.default.createElement(
160
147
  "code",
161
- { key: bp, style: __spreadProps(__spreadValues({}, S.classChip), { color: "#818cf8" }) },
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 && React.createElement(
155
+ inspected.twClasses.length > 0 && React__default.default.createElement(
169
156
  "div",
170
157
  { style: S.section },
171
- React.createElement("div", { style: S.sectionTitle }, "Classes"),
172
- React.createElement(
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) => React.createElement(
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
- React.createElement(
172
+ React__default.default.createElement(
186
173
  "button",
187
174
  {
188
175
  style: S.copyBtn,
189
176
  onClick: () => {
190
- var _a;
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 React.createElement(
207
+ return React__default.default.createElement(
222
208
  "div",
223
209
  { style: S.emptyPanel },
224
- React.createElement(
210
+ React__default.default.createElement(
225
211
  "span",
226
212
  { style: { opacity: 0.4 } },
227
213
  "No state-enabled components found."
228
214
  ),
229
- React.createElement("br", null),
230
- React.createElement(
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 React.createElement(
223
+ return React__default.default.createElement(
238
224
  "div",
239
225
  { style: S.scrollArea },
240
226
  entries.map(
241
- (entry) => React.createElement(
227
+ (entry) => React__default.default.createElement(
242
228
  "div",
243
229
  { key: entry.id, style: S.section },
244
- React.createElement(
230
+ React__default.default.createElement(
245
231
  "div",
246
232
  { style: S.sectionTitle },
247
- React.createElement("span", { style: { color: "#60a5fa" } }, entry.tag.toUpperCase()),
248
- React.createElement(
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
- React.createElement(
240
+ React__default.default.createElement(
255
241
  "div",
256
242
  { style: S.classGrid },
257
243
  entry.states.map(
258
- (s) => React.createElement(
244
+ (s) => React__default.default.createElement(
259
245
  "code",
260
- { key: s, style: __spreadProps(__spreadValues({}, S.classChip), { color: "#f59e0b" }) },
246
+ { key: s, style: { ...S.classChip, color: "#f59e0b" } },
261
247
  `data-${s}`
262
248
  )
263
249
  )
264
250
  ),
265
- React.createElement(
251
+ React__default.default.createElement(
266
252
  "div",
267
- { style: __spreadProps(__spreadValues({}, S.row), { marginTop: "4px" }) },
268
- React.createElement(
253
+ { style: { ...S.row, marginTop: "4px" } },
254
+ React__default.default.createElement(
269
255
  "span",
270
256
  {
271
- style: __spreadProps(__spreadValues({}, S.sectionTitle), {
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 React.createElement(
282
+ return React__default.default.createElement(
296
283
  "div",
297
284
  { style: S.emptyPanel },
298
- React.createElement(
285
+ React__default.default.createElement(
299
286
  "span",
300
287
  { style: { opacity: 0.4 } },
301
288
  "No container query components found."
302
289
  ),
303
- React.createElement("br", null),
304
- React.createElement(
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 React.createElement(
298
+ return React__default.default.createElement(
312
299
  "div",
313
300
  { style: S.scrollArea },
314
301
  entries.map(
315
- (entry) => React.createElement(
302
+ (entry) => React__default.default.createElement(
316
303
  "div",
317
304
  { key: entry.id, style: S.section },
318
- React.createElement(
305
+ React__default.default.createElement(
319
306
  "div",
320
307
  { style: S.sectionTitle },
321
- React.createElement("span", { style: { color: "#60a5fa" } }, entry.tag.toUpperCase()),
322
- entry.containerName && React.createElement(
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
- React.createElement(
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
- React.createElement(
320
+ React__default.default.createElement(
334
321
  "div",
335
322
  null,
336
323
  entry.breakpoints.map(
337
- (bp, i) => React.createElement(
324
+ (bp, i) => React__default.default.createElement(
338
325
  "div",
339
- { key: i, style: __spreadProps(__spreadValues({}, S.row), { marginBottom: "2px" }) },
340
- React.createElement(
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
- React.createElement(
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_(__spreadValues({}, t)));
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 React.createElement(
355
+ return React__default.default.createElement(
369
356
  "div",
370
357
  { style: S.emptyPanel },
371
- React.createElement("span", { style: { opacity: 0.4 } }, "No live tokens registered."),
372
- React.createElement("br", null),
373
- React.createElement(
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 React.createElement(
367
+ return React__default.default.createElement(
381
368
  "div",
382
369
  { style: S.scrollArea },
383
- React.createElement(
370
+ React__default.default.createElement(
384
371
  "div",
385
- { style: __spreadProps(__spreadValues({}, S.sectionTitle), { padding: "8px 12px 4px", color: "#52525b" }) },
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 React.createElement(
377
+ return React__default.default.createElement(
391
378
  "div",
392
- { key: name, style: __spreadProps(__spreadValues({}, S.row), { padding: "6px 12px", borderBottom: "1px solid #18181b" }) },
393
- React.createElement(
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 && React.createElement("div", {
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
- React.createElement("span", { style: { color: "#a1a1aa", fontSize: "12px" } }, name)
393
+ React__default.default.createElement("span", { style: { color: "#a1a1aa", fontSize: "12px" } }, name)
407
394
  ),
408
- isColor ? React.createElement("input", {
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
- }) : React.createElement("input", {
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 runScan = useCallback(() => {
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
- var _a2;
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: (_a = stateReg == null ? void 0 : stateReg.size) != null ? _a : 0,
475
- containerCount: (_b = containerReg == null ? void 0 : containerReg.size) != null ? _b : 0,
476
- tokenCount: Object.keys((_d = (_c = tokenEngine == null ? void 0 : tokenEngine.getTokens) == null ? void 0 : _c.call(tokenEngine)) != null ? _d : {}).length
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 React.createElement(
489
+ return React__default.default.createElement(
482
490
  "div",
483
491
  { style: S.scrollArea },
484
- React.createElement(
492
+ React__default.default.createElement(
485
493
  "div",
486
494
  { style: { padding: "10px 12px" } },
487
- React.createElement(
495
+ // ── DOM Scan ──────────────────────────────────────────────────────────
496
+ React__default.default.createElement(
488
497
  "button",
489
498
  {
490
- style: __spreadProps(__spreadValues({}, S.copyBtn), { borderTop: "none", color: "#60a5fa", fontWeight: "600" }),
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
- results && React.createElement(
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
- // Summary
500
- React.createElement(
625
+ React__default.default.createElement(
501
626
  "div",
502
627
  { style: S.section },
503
- React.createElement("div", { style: S.sectionTitle }, "Summary"),
504
- React.createElement(
628
+ React__default.default.createElement("div", { style: S.sectionTitle }, "Summary"),
629
+ React__default.default.createElement(
505
630
  "div",
506
631
  { style: S.row },
507
- React.createElement("span", { style: S.varKey }, "State components"),
508
- React.createElement("span", { style: S.varValue }, String(results.stateCount))
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
- React.createElement(
635
+ React__default.default.createElement(
511
636
  "div",
512
637
  { style: S.row },
513
- React.createElement("span", { style: S.varKey }, "Container components"),
514
- React.createElement("span", { style: S.varValue }, String(results.containerCount))
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
- React.createElement(
641
+ React__default.default.createElement(
517
642
  "div",
518
643
  { style: S.row },
519
- React.createElement("span", { style: S.varKey }, "Live tokens"),
520
- React.createElement("span", { style: S.varValue }, String(results.tokenCount))
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
- // Duplicates
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
- React.createElement("div", { style: S.sectionTitle }, "Duplicate Class Sets"),
651
+ React__default.default.createElement("div", { style: S.sectionTitle }, "Duplicate Class Sets"),
528
652
  results.duplicates.map(
529
- (d, i) => React.createElement(
653
+ (d, i) => React__default.default.createElement(
530
654
  "div",
531
655
  { key: i, style: { marginBottom: "8px" } },
532
- React.createElement(
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
- React.createElement(
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
- ) : results && React.createElement(
674
+ ) : React__default.default.createElement(
551
675
  "div",
552
676
  { style: S.section },
553
- React.createElement(
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) => __spreadProps(__spreadValues({}, s), { open: !s.open, inspected: null }));
702
+ setState((s) => ({ ...s, open: !s.open, inspected: null }));
579
703
  }
580
704
  if (e.key === "Escape")
581
- setState((s) => __spreadProps(__spreadValues({}, s), { open: false, pinned: false, inspected: null }));
582
- if (e.key === "1") setState((s) => s.open ? __spreadProps(__spreadValues({}, s), { panel: "inspector" }) : s);
583
- if (e.key === "2") setState((s) => s.open ? __spreadProps(__spreadValues({}, s), { panel: "state" }) : s);
584
- if (e.key === "3") setState((s) => s.open ? __spreadProps(__spreadValues({}, s), { panel: "container" }) : s);
585
- if (e.key === "4") setState((s) => s.open ? __spreadProps(__spreadValues({}, s), { panel: "tokens" }) : s);
586
- if (e.key === "5") setState((s) => s.open ? __spreadProps(__spreadValues({}, s), { panel: "analyzer" }) : s);
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) => __spreadProps(__spreadValues({}, s), { inspected: null, position: { x: e.clientX, y: e.clientY } }));
720
+ setState((s) => ({ ...s, inspected: null, position: { x: e.clientX, y: e.clientY } }));
598
721
  return;
599
722
  }
600
- const { name, classes } = parseDataTw((_a = twEl.dataset.tw) != null ? _a : null);
601
- setState((s) => {
602
- var _a2;
603
- return __spreadProps(__spreadValues({}, s), {
604
- position: { x: e.clientX, y: e.clientY },
605
- inspected: {
606
- componentName: name,
607
- element: twEl,
608
- rect: twEl.getBoundingClientRect(),
609
- twClasses: classes,
610
- variantProps: parseVariantAttr((_a2 = twEl.dataset.twVariants) != null ? _a2 : null),
611
- atomicMap: getAtomicMap(classes),
612
- rawClassName: twEl.className,
613
- stateNames: getStateNames(twEl),
614
- activeStates: getActiveStates(twEl),
615
- containerBps: getContainerBps(twEl)
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 ((_a = overlayRef.current) == null ? void 0 : _a.contains(e.target)) return;
627
- setState((s) => __spreadProps(__spreadValues({}, s), { pinned: !s.pinned && !!s.inspected }));
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 React.createElement(
761
+ return React__default.default.createElement(
642
762
  "button",
643
763
  {
644
- onClick: () => setState((s) => __spreadProps(__spreadValues({}, s), { open: true })),
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 React.createElement(
778
+ return React__default.default.createElement(
659
779
  "div",
660
780
  { style: S.root },
661
781
  // ── Element highlight (inspector only) ──────────────────────────────
662
- isInspecting && state.inspected && React.createElement("div", {
663
- style: __spreadProps(__spreadValues({}, S.highlight), {
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 && React.createElement(
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
- React.createElement(
812
+ React__default.default.createElement(
692
813
  "div",
693
814
  {
694
815
  ref: overlayRef,
695
- style: state.panel === "inspector" && state.inspected ? __spreadProps(__spreadValues({}, S.panel), {
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
- }) : __spreadProps(__spreadValues({}, S.panel), {
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
- React.createElement(
829
+ React__default.default.createElement(
707
830
  "div",
708
831
  { style: S.header },
709
- React.createElement(
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
- React.createElement(
837
+ React__default.default.createElement(
715
838
  "div",
716
839
  { style: S.headerActions },
717
- state.pinned && React.createElement("span", { style: S.pinBadge }, "\u{1F4CC}"),
718
- React.createElement(
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) => __spreadProps(__spreadValues({}, s), { open: false, pinned: false, inspected: null }))
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
- React.createElement(
852
+ React__default.default.createElement(
730
853
  "div",
731
854
  { style: S.tabBar },
732
855
  PANELS.map(
733
- (p) => React.createElement(
856
+ (p) => React__default.default.createElement(
734
857
  "button",
735
858
  {
736
859
  key: p.id,
737
- style: __spreadProps(__spreadValues({}, S.tab), {
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) => __spreadProps(__spreadValues({}, s), { panel: p.id })),
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" && React.createElement(InspectorPanel, {
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" && React.createElement(StatePanel, null),
756
- state.panel === "container" && React.createElement(ContainerPanel, null),
757
- state.panel === "tokens" && React.createElement(TokensPanel, null),
758
- state.panel === "analyzer" && React.createElement(AnalyzerPanel, null)
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
- React.createElement(
885
+ React__default.default.createElement(
762
886
  "div",
763
887
  { style: S.statusBar },
764
- React.createElement("span", null, "\u{1F3A8} tailwind-styled-v4 DevTools"),
765
- React.createElement(
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 React.createElement(TwDevTools);
1071
+ return React__default.default.createElement(TwDevTools);
948
1072
  }
949
1073
 
950
- export { DevToolsProvider, TwDevTools };
1074
+ exports.DevToolsProvider = DevToolsProvider;
1075
+ exports.TwDevTools = TwDevTools;
951
1076
  //# sourceMappingURL=devtools.js.map
952
1077
  //# sourceMappingURL=devtools.js.map