@qwik.dev/devtools 2.0.0-beta.43 → 2.0.0-beta.45

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 (85) hide show
  1. package/dist/kit/index.mjs +4 -6
  2. package/dist/plugin/codegen.mjs +1 -1
  3. package/dist/plugin/{create-hook-runtime-ChnIePeB.mjs → create-hook-runtime-CoRDu99E.mjs} +2 -4
  4. package/dist/plugin/index.mjs +4 -7
  5. package/dist/ui/{bundle-graph-CoI___e1.json → bundle-graph-DNRrO_5W.json} +1 -1
  6. package/dist/ui/entry.extension.qwik.mjs +3 -2
  7. package/dist/ui/node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/handle/element.qwik.mjs +2 -2
  8. package/dist/ui/node_modules/.pnpm/hast-util-to-html@9.0.5/node_modules/hast-util-to-html/lib/index.qwik.mjs +1 -1
  9. package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/html.qwik.mjs +11 -1
  10. package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/svg.qwik.mjs +2 -0
  11. package/dist/ui/packages/devtools/kit/src/overlay-paths.qwik.mjs +4 -4
  12. package/dist/ui/packages/devtools/ui/src/components/DevtoolsButton/DevtoolsButton.qwik.mjs +15 -13
  13. package/dist/ui/packages/devtools/ui/src/components/DevtoolsContainer/DevtoolsContainer.qwik.mjs +4 -1
  14. package/dist/ui/packages/devtools/ui/src/components/DevtoolsPanel/DevtoolsPanel.qwik.mjs +82 -69
  15. package/dist/ui/packages/devtools/ui/src/components/IconButton/IconButton.qwik.mjs +3 -2
  16. package/dist/ui/packages/devtools/ui/src/components/Icons/Icons.qwik.mjs +178 -96
  17. package/dist/ui/packages/devtools/ui/src/components/InfoBanner/InfoBanner.qwik.mjs +4 -2
  18. package/dist/ui/packages/devtools/ui/src/components/Tab/Tab.qwik.mjs +5 -6
  19. package/dist/ui/packages/devtools/ui/src/components/TabContent/TabContent.qwik.mjs +1 -1
  20. package/dist/ui/packages/devtools/ui/src/components/TabTitle/TabTitle.qwik.mjs +1 -1
  21. package/dist/ui/packages/devtools/ui/src/components/ThemeToggle/QwikThemeToggle.qwik.mjs +4 -4
  22. package/dist/ui/packages/devtools/ui/src/components/ThemeToggle/theme-script.qwik.mjs +1 -1
  23. package/dist/ui/packages/devtools/ui/src/components/Tree/Tree.qwik.mjs +36 -19
  24. package/dist/ui/packages/devtools/ui/src/devtools/CommandPalette.qwik.mjs +40 -26
  25. package/dist/ui/packages/devtools/ui/src/devtools/CustomizeTabsPanel.qwik.mjs +39 -28
  26. package/dist/ui/packages/devtools/ui/src/devtools/DevtoolsContent.qwik.mjs +30 -45
  27. package/dist/ui/packages/devtools/ui/src/devtools/DevtoolsSidebar.qwik.mjs +26 -20
  28. package/dist/ui/packages/devtools/ui/src/devtools/QwikDevtools.qwik.mjs +7 -7
  29. package/dist/ui/packages/devtools/ui/src/devtools/QwikDevtoolsExtension.qwik.mjs +3 -2
  30. package/dist/ui/packages/devtools/ui/src/devtools/command-palette.qwik.mjs +24 -12
  31. package/dist/ui/packages/devtools/ui/src/devtools/page-data-source.qwik.mjs +4 -2
  32. package/dist/ui/packages/devtools/ui/src/devtools/rpc.qwik.mjs +6 -4
  33. package/dist/ui/packages/devtools/ui/src/devtools/sidebar-tabs.qwik.mjs +24 -13
  34. package/dist/ui/packages/devtools/ui/src/devtools/tabs.qwik.mjs +10 -10
  35. package/dist/ui/packages/devtools/ui/src/features/Assets/Assets.qwik.mjs +2 -2
  36. package/dist/ui/packages/devtools/ui/src/features/BuildAnalysis/BuildAnalysis.qwik.mjs +10 -8
  37. package/dist/ui/packages/devtools/ui/src/features/CodeBreak/CodeBreak.qwik.mjs +19 -21
  38. package/dist/ui/packages/devtools/ui/src/features/CodeBreak/HtmlParser.qwik.mjs +10 -8
  39. package/dist/ui/packages/devtools/ui/src/features/CodeBreak/StateParser.qwik.mjs +10 -8
  40. package/dist/ui/packages/devtools/ui/src/features/HookTree/HookTree.qwik.mjs +67 -56
  41. package/dist/ui/packages/devtools/ui/src/features/HookTree/hookTreeHelpers.qwik.mjs +6 -3
  42. package/dist/ui/packages/devtools/ui/src/features/Inspect/Inspect.qwik.mjs +12 -11
  43. package/dist/ui/packages/devtools/ui/src/features/Inspect/iframe-theme.qwik.mjs +2 -1
  44. package/dist/ui/packages/devtools/ui/src/features/Overview/Overview.qwik.mjs +14 -10
  45. package/dist/ui/packages/devtools/ui/src/features/Packages/Packages.qwik.mjs +24 -23
  46. package/dist/ui/packages/devtools/ui/src/features/Packages/components/DependencyCard/DependencyCard.qwik.mjs +34 -24
  47. package/dist/ui/packages/devtools/ui/src/features/Packages/components/DependencyOperationFeedback/DependencyOperationFeedback.qwik.mjs +4 -3
  48. package/dist/ui/packages/devtools/ui/src/features/Packages/components/DependencyToolbar/DependencyToolbar.qwik.mjs +19 -18
  49. package/dist/ui/packages/devtools/ui/src/features/Packages/components/InstalledDependencyList/InstalledDependencyList.qwik.mjs +4 -4
  50. package/dist/ui/packages/devtools/ui/src/features/Packages/components/PackageIcon/PackageIcon.qwik.mjs +2 -2
  51. package/dist/ui/packages/devtools/ui/src/features/Packages/components/PackageSearchResults/PackageSearchResults.qwik.mjs +6 -5
  52. package/dist/ui/packages/devtools/ui/src/features/Packages/components/SearchResultCard/SearchResultCard.qwik.mjs +25 -14
  53. package/dist/ui/packages/devtools/ui/src/features/Performance/Performance.qwik.mjs +14 -10
  54. package/dist/ui/packages/devtools/ui/src/features/Performance/components/ComponentCard.qwik.mjs +3 -1
  55. package/dist/ui/packages/devtools/ui/src/features/Performance/components/HookDetailsPanel.qwik.mjs +10 -6
  56. package/dist/ui/packages/devtools/ui/src/features/Performance/components/PerformanceOverview.qwik.mjs +11 -9
  57. package/dist/ui/packages/devtools/ui/src/features/Performance/components/StatCard.qwik.mjs +2 -2
  58. package/dist/ui/packages/devtools/ui/src/features/Performance/computePerfViewModel.qwik.mjs +4 -2
  59. package/dist/ui/packages/devtools/ui/src/features/Preloads/Preloads.qwik.mjs +84 -72
  60. package/dist/ui/packages/devtools/ui/src/features/RenderTree/RenderTree.qwik.mjs +25 -21
  61. package/dist/ui/packages/devtools/ui/src/features/RenderTree/components/HighlightedCodeList.qwik.mjs +2 -1
  62. package/dist/ui/packages/devtools/ui/src/features/RenderTree/components/HookFiltersCard.qwik.mjs +16 -17
  63. package/dist/ui/packages/devtools/ui/src/features/RenderTree/components/RenderTreeTabs.qwik.mjs +4 -2
  64. package/dist/ui/packages/devtools/ui/src/features/RenderTree/components/StateTreeNodeLabel.qwik.mjs +8 -7
  65. package/dist/ui/packages/devtools/ui/src/features/Routes/Routes.qwik.mjs +10 -6
  66. package/dist/ui/q-manifest.json +180 -180
  67. package/package.json +8 -8
  68. /package/dist/ui/node_modules/.pnpm/{debug@4.4.3_supports-color@10.2.2 → debug@4.4.3_supports-color@11.0.0}/node_modules/debug/src/browser.qwik.mjs +0 -0
  69. /package/dist/ui/node_modules/.pnpm/{debug@4.4.3_supports-color@10.2.2 → debug@4.4.3_supports-color@11.0.0}/node_modules/debug/src/common.qwik.mjs +0 -0
  70. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/index.qwik.mjs +0 -0
  71. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/aria.qwik.mjs +0 -0
  72. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/find.qwik.mjs +0 -0
  73. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/normalize.qwik.mjs +0 -0
  74. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/util/case-insensitive-transform.qwik.mjs +0 -0
  75. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/util/case-sensitive-transform.qwik.mjs +0 -0
  76. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/util/create.qwik.mjs +0 -0
  77. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/util/defined-info.qwik.mjs +0 -0
  78. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/util/info.qwik.mjs +0 -0
  79. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/util/merge.qwik.mjs +0 -0
  80. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/util/schema.qwik.mjs +0 -0
  81. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/util/types.qwik.mjs +0 -0
  82. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/xlink.qwik.mjs +0 -0
  83. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/xml.qwik.mjs +0 -0
  84. /package/dist/ui/node_modules/.pnpm/{property-information@7.1.0 → property-information@7.2.0}/node_modules/property-information/lib/xmlns.qwik.mjs +0 -0
  85. /package/dist/ui/node_modules/.pnpm/{vite-hot-client@2.1.0_vite@8.2.1_@types_node@24.10.0_esbuild@0.28.2_jiti@2.6.1_terser@5.46.0_tsx@4.21.0_yaml@2.8.3_ → vite-hot-client@2.2.0_vite@8.2.1_@types_node@25.6.0_esbuild@0.28.2_jiti@2.7.0_terser@5.46.0_tsx@4.21.0_yaml@2.9.0_}/node_modules/vite-hot-client/dist/index.qwik.mjs +0 -0
@@ -14,7 +14,8 @@ import { _captures, _jsxSorted, componentQrl, inlinedQrl, useStore, useVisibleTa
14
14
  * The outer `.qwik-devtools` wrapper is required because the Tailwind utilities are scoped under
15
15
  * `.qwik-devtools .{class}` in the CSS build. It must be a separate element so descendant selectors
16
16
  * match.
17
- */ var QwikDevtoolsExtension = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(() => {
17
+ */
18
+ var QwikDevtoolsExtension = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(() => {
18
19
  const state = useStore(createDevtoolsState({ isExtension: true }));
19
20
  useVisibleTaskQrl(/*#__PURE__*/ inlinedQrl(async () => {
20
21
  const state = _captures[0];
@@ -26,6 +27,6 @@ import { _captures, _jsxSorted, componentQrl, inlinedQrl, useStore, useVisibleTa
26
27
  }, /*#__PURE__*/ _jsxSorted("div", null, {
27
28
  class: "flex overflow-hidden",
28
29
  style: "height: 100%; width: 100%;"
29
- }, [/*#__PURE__*/ _jsxSorted(DevtoolsSidebar, null, { state }, null, 3, "Nl_0"), /*#__PURE__*/ _jsxSorted("div", null, { class: "custom-scrollbar min-h-0 flex-1 overflow-y-auto p-4" }, /*#__PURE__*/ _jsxSorted(DevtoolsContent, null, { state }, null, 3, "Nl_1"), 1, null)], 1, null), 1, "Nl_2");
30
+ }, [/*#__PURE__*/ _jsxSorted(DevtoolsSidebar, null, { state }, null, 3, "jJ_0"), /*#__PURE__*/ _jsxSorted("div", null, { class: "custom-scrollbar min-h-0 flex-1 overflow-y-auto p-4" }, /*#__PURE__*/ _jsxSorted(DevtoolsContent, null, { state }, null, 3, "jJ_1"), 1, null)], 1, null), 1, "jJ_2");
30
31
  }, "QwikDevtoolsExtension_component_EdZTDUSLNrE"));
31
32
  export { QwikDevtoolsExtension };
@@ -1,14 +1,16 @@
1
1
  import { devtoolsTabs } from "./tabs.qwik.mjs";
2
2
  var RECENTS_STORAGE_KEY = "qwik-devtools:palette-recents";
3
3
  var MAX_RECENTS = 5;
4
- /** Categories always render in this order. */ var CATEGORY_ORDER = [
4
+ /** Categories always render in this order. */
5
+ var CATEGORY_ORDER = [
5
6
  "Tabs",
6
7
  "Components",
7
8
  "Routes",
8
9
  "Packages",
9
10
  "Actions"
10
11
  ];
11
- /** Tabs reachable in the current context (Vite-only tabs are hidden in the extension). */ function getTabResults(state) {
12
+ /** Tabs reachable in the current context (Vite-only tabs are hidden in the extension). */
13
+ function getTabResults(state) {
12
14
  return devtoolsTabs.filter((tab) => !(state.isExtension && tab.viteOnly)).map((tab) => ({
13
15
  id: `tab:${tab.id}`,
14
16
  category: "Tabs",
@@ -31,7 +33,8 @@ function getComponentResults(state) {
31
33
  }
32
34
  }));
33
35
  }
34
- /** Routes live behind the Vite-only Routes tab, so they are excluded in the extension. */ function getRouteResults(state) {
36
+ /** Routes live behind the Vite-only Routes tab, so they are excluded in the extension. */
37
+ function getRouteResults(state) {
35
38
  if (state.isExtension || !state.routes) return [];
36
39
  return state.routes.map((route) => ({
37
40
  id: `route:${route.relativePath}`,
@@ -44,7 +47,8 @@ function getComponentResults(state) {
44
47
  }
45
48
  }));
46
49
  }
47
- /** Packages live behind the Vite-only Packages tab, so they are excluded in the extension. */ function getPackageResults(state) {
50
+ /** Packages live behind the Vite-only Packages tab, so they are excluded in the extension. */
51
+ function getPackageResults(state) {
48
52
  if (state.isExtension) return [];
49
53
  return state.npmPackages.map(([name, version]) => ({
50
54
  id: `package:${name}`,
@@ -57,7 +61,8 @@ function getComponentResults(state) {
57
61
  }
58
62
  }));
59
63
  }
60
- /** Common quick actions available in the current context. */ function getActionResults(state) {
64
+ /** Common quick actions available in the current context. */
65
+ function getActionResults(state) {
61
66
  const actions = [
62
67
  {
63
68
  id: "action:toggleTheme",
@@ -98,7 +103,8 @@ function getComponentResults(state) {
98
103
  });
99
104
  return actions;
100
105
  }
101
- /** Every searchable result for the current context (tabs, components, routes, packages). */ function buildPaletteSources(state) {
106
+ /** Every searchable result for the current context (tabs, components, routes, packages). */
107
+ function buildPaletteSources(state) {
102
108
  return [
103
109
  ...getTabResults(state),
104
110
  ...getComponentResults(state),
@@ -106,12 +112,14 @@ function getComponentResults(state) {
106
112
  ...getPackageResults(state)
107
113
  ];
108
114
  }
109
- /** Filters results by a substring match against label and hint; an empty query returns nothing. */ function filterResults(results, query) {
115
+ /** Filters results by a substring match against label and hint; an empty query returns nothing. */
116
+ function filterResults(results, query) {
110
117
  const normalized = query.trim().toLowerCase();
111
118
  if (!normalized) return [];
112
119
  return results.filter((result) => result.label.toLowerCase().includes(normalized) || (result.hint?.toLowerCase().includes(normalized) ?? false));
113
120
  }
114
- /** Groups results by category, preserving the fixed category order and dropping empty groups. */ function groupResults(results) {
121
+ /** Groups results by category, preserving the fixed category order and dropping empty groups. */
122
+ function groupResults(results) {
115
123
  const groups = [];
116
124
  for (const category of CATEGORY_ORDER) {
117
125
  const inCategory = results.filter((result) => result.category === category);
@@ -122,7 +130,8 @@ function getComponentResults(state) {
122
130
  }
123
131
  return groups;
124
132
  }
125
- /** Reads the persisted recent-selection ids, newest first; empty when nothing valid is stored. */ function loadRecentIds() {
133
+ /** Reads the persisted recent-selection ids, newest first; empty when nothing valid is stored. */
134
+ function loadRecentIds() {
126
135
  try {
127
136
  const raw = localStorage.getItem(RECENTS_STORAGE_KEY);
128
137
  if (!raw) return [];
@@ -133,18 +142,21 @@ function getComponentResults(state) {
133
142
  return [];
134
143
  }
135
144
  }
136
- /** Persists the recent-selection ids. Storage failures (private mode, quota) are ignored. */ function saveRecentIds(ids) {
145
+ /** Persists the recent-selection ids. Storage failures (private mode, quota) are ignored. */
146
+ function saveRecentIds(ids) {
137
147
  try {
138
148
  localStorage.setItem(RECENTS_STORAGE_KEY, JSON.stringify(ids));
139
149
  } catch {}
140
150
  }
141
- /** Returns a new list with `id` moved to the front, de-duped and capped at MAX_RECENTS. */ function addRecentId(recentIds, id) {
151
+ /** Returns a new list with `id` moved to the front, de-duped and capped at MAX_RECENTS. */
152
+ function addRecentId(recentIds, id) {
142
153
  return [id, ...recentIds.filter((existing) => existing !== id)].slice(0, MAX_RECENTS);
143
154
  }
144
155
  /**
145
156
  * Resolves persisted recent ids to their current results, dropping entries that no longer exist
146
157
  * (e.g. a component that unmounted or a package that was removed). Actions are resolvable too.
147
- */ function resolveRecents(recentIds, state) {
158
+ */
159
+ function resolveRecents(recentIds, state) {
148
160
  const byId = /* @__PURE__ */ new Map();
149
161
  for (const result of [...buildPaletteSources(state), ...getActionResults(state)]) byId.set(result.id, result);
150
162
  const resolved = [];
@@ -3,7 +3,8 @@ import { QWIK_DEVTOOLS_GLOBAL, createInPageBridge, getQwikDevtoolsGlobal } from
3
3
  /**
4
4
  * Default implementation that reads directly from `window` globals. Used when the devtools UI runs
5
5
  * as an in-app overlay (same document).
6
- */ var InPageDataSource = class {
6
+ */
7
+ var InPageDataSource = class {
7
8
  constructor() {
8
9
  this.bridge = createInPageBridge({ isBrowser });
9
10
  }
@@ -52,7 +53,8 @@ var defaultSource = new InPageDataSource();
52
53
  *
53
54
  * When the Qwik DevTools root has a `pageDataSource` (by the browser extension entry point), that
54
55
  * source is used. Otherwise the default in-page source is returned.
55
- */ function getPageDataSource() {
56
+ */
57
+ function getPageDataSource() {
56
58
  const source = isBrowser ? getQwikDevtoolsGlobal(window)?.[QWIK_DEVTOOLS_GLOBAL.props.pageDataSource] : void 0;
57
59
  if (source) return source;
58
60
  return defaultSource;
@@ -1,6 +1,6 @@
1
1
  import { __toESM } from "../../../../../_virtual/_rolldown/runtime.qwik.mjs";
2
- import { require_browser } from "../../../../../node_modules/.pnpm/debug@4.4.3_supports-color@10.2.2/node_modules/debug/src/browser.qwik.mjs";
3
- import { tryCreateHotContext } from "../../../../../node_modules/.pnpm/vite-hot-client@2.1.0_vite@8.2.1_@types_node@24.10.0_esbuild@0.28.2_jiti@2.6.1_terser@5.46.0_tsx@4.21.0_yaml@2.8.3_/node_modules/vite-hot-client/dist/index.qwik.mjs";
2
+ import { require_browser } from "../../../../../node_modules/.pnpm/debug@4.4.3_supports-color@11.0.0/node_modules/debug/src/browser.qwik.mjs";
3
+ import { tryCreateHotContext } from "../../../../../node_modules/.pnpm/vite-hot-client@2.2.0_vite@8.2.1_@types_node@25.6.0_esbuild@0.28.2_jiti@2.7.0_terser@5.46.0_tsx@4.21.0_yaml@2.9.0_/node_modules/vite-hot-client/dist/index.qwik.mjs";
4
4
  import { noSerialize } from "@qwik.dev/core";
5
5
  import { QWIK_DEVTOOLS_GLOBAL, RouteType, createClientRpc, getQwikDevtoolsGlobal, getViteClientRpc, setViteClientContext } from "@qwik.dev/devtools/kit";
6
6
  var log = (0, (/* @__PURE__ */ __toESM(require_browser(), 1)).default)("qwik:devtools:devtools");
@@ -33,7 +33,8 @@ function getDevtoolsRpc() {
33
33
  /**
34
34
  * Default data provider that loads data via Vite HMR RPC. Used when the devtools UI runs as an
35
35
  * in-app overlay.
36
- */ var viteDataProvider = { async loadData(state) {
36
+ */
37
+ var viteDataProvider = { async loadData(state) {
37
38
  const rpc = await getDevtoolsRpc();
38
39
  const primaryDataPromise = Promise.allSettled([
39
40
  rpc.getAssetsFromPublicDir(),
@@ -65,7 +66,8 @@ function getDevtoolsRpc() {
65
66
  *
66
67
  * When the Qwik DevTools root has a `dataProvider` (e.g. from the browser extension entry point),
67
68
  * that provider is used. Otherwise, falls back to the default Vite HMR RPC provider.
68
- */ async function loadDevtoolsData(state) {
69
+ */
70
+ async function loadDevtoolsData(state) {
69
71
  await (getQwikDevtoolsGlobal(window)?.[QWIK_DEVTOOLS_GLOBAL.props.dataProvider] ?? viteDataProvider).loadData(state);
70
72
  }
71
73
  export { getDevtoolsRpc, loadDevtoolsData };
@@ -1,18 +1,26 @@
1
1
  import { devtoolsTabs } from "./tabs.qwik.mjs";
2
2
  var STORAGE_KEY = "qwik-devtools:visible-tabs";
3
- /** Tab configs keyed by id, for resolving an ordered id list. */ var tabsById = new Map(devtoolsTabs.map((tab) => [tab.id, tab]));
3
+ /** Tab configs keyed by id, for resolving an ordered id list. */
4
+ var tabsById = new Map(devtoolsTabs.map((tab) => [tab.id, tab]));
4
5
  var KNOWN_TAB_IDS = new Set(devtoolsTabs.map((tab) => tab.id));
5
6
  function isDevtoolsTabId(id) {
6
7
  return KNOWN_TAB_IDS.has(id);
7
8
  }
8
- /** Default sidebar configuration: every tab visible, in registry order. */ function getDefaultVisibleTabIds() {
9
+ /** Default sidebar configuration: every tab visible, in registry order. */
10
+ function getDefaultVisibleTabIds() {
9
11
  return devtoolsTabs.map((tab) => tab.id);
10
12
  }
11
- /** Tabs not currently visible (reachable via the More panel), in registry order. */ function getAvailableTabIds(visibleTabIds) {
13
+ /** Tabs not currently visible (reachable via the More panel), in registry order. */
14
+ function getAvailableTabIds(visibleTabIds) {
12
15
  const visible = new Set(visibleTabIds);
13
16
  return devtoolsTabs.map((tab) => tab.id).filter((id) => !visible.has(id));
14
17
  }
15
- /** Moves `draggedId` to sit just before `targetId` in the list, returning a new list. */ function reorderVisibleTabs(visibleTabIds, draggedId, targetId) {
18
+ /** Hidden tabs resolved to their configs (the More panel contents), in registry order. */
19
+ function getAvailableTabs(visibleTabIds) {
20
+ return resolveTabs(getAvailableTabIds(visibleTabIds));
21
+ }
22
+ /** Moves `draggedId` to sit just before `targetId` in the list, returning a new list. */
23
+ function reorderVisibleTabs(visibleTabIds, draggedId, targetId) {
16
24
  if (draggedId === targetId) return visibleTabIds;
17
25
  const without = visibleTabIds.filter((id) => id !== draggedId);
18
26
  const targetIndex = without.indexOf(targetId);
@@ -20,11 +28,13 @@ function isDevtoolsTabId(id) {
20
28
  without.splice(targetIndex, 0, draggedId);
21
29
  return without;
22
30
  }
23
- /** Adds (appends) or removes a tab from the ordered visible list, returning a new list. */ function setTabVisible(visibleTabIds, id, visible) {
31
+ /** Adds (appends) or removes a tab from the ordered visible list, returning a new list. */
32
+ function setTabVisible(visibleTabIds, id, visible) {
24
33
  if (visible) return visibleTabIds.includes(id) ? visibleTabIds : [...visibleTabIds, id];
25
34
  return visibleTabIds.filter((tabId) => tabId !== id);
26
35
  }
27
- /** Drops ids no longer in the registry and de-dupes, preserving the stored order. */ function normalizeVisibleTabIds(ids) {
36
+ /** Drops ids no longer in the registry and de-dupes, preserving the stored order. */
37
+ function normalizeVisibleTabIds(ids) {
28
38
  const seen = /* @__PURE__ */ new Set();
29
39
  const result = [];
30
40
  for (const id of ids) if (isDevtoolsTabId(id) && !seen.has(id)) {
@@ -37,7 +47,8 @@ function isDevtoolsTabId(id) {
37
47
  * Reads the persisted visible-tabs list, or null when nothing valid is stored so the caller falls
38
48
  * back to the default. An empty list is honored (the user hid every tab). Tabs added to the
39
49
  * registry since the last save stay hidden (reachable via the More panel) until opted in.
40
- */ function loadVisibleTabIds() {
50
+ */
51
+ function loadVisibleTabIds() {
41
52
  try {
42
53
  const raw = localStorage.getItem(STORAGE_KEY);
43
54
  if (!raw) return null;
@@ -48,12 +59,14 @@ function isDevtoolsTabId(id) {
48
59
  return null;
49
60
  }
50
61
  }
51
- /** Persists the visible-tabs list. Storage failures (private mode, quota) are ignored. */ function saveVisibleTabIds(visibleTabIds) {
62
+ /** Persists the visible-tabs list. Storage failures (private mode, quota) are ignored. */
63
+ function saveVisibleTabIds(visibleTabIds) {
52
64
  try {
53
65
  localStorage.setItem(STORAGE_KEY, JSON.stringify(visibleTabIds));
54
66
  } catch {}
55
67
  }
56
- /** Resolves an ordered id list to its tab configs, dropping unknown ids. */ function resolveTabs(ids) {
68
+ /** Resolves an ordered id list to its tab configs, dropping unknown ids. */
69
+ function resolveTabs(ids) {
57
70
  const tabs = [];
58
71
  for (const id of ids) {
59
72
  const tab = tabsById.get(id);
@@ -61,13 +74,11 @@ function isDevtoolsTabId(id) {
61
74
  }
62
75
  return tabs;
63
76
  }
64
- /** Hidden tabs resolved to their configs (the More panel contents), in registry order. */ function getAvailableTabs(visibleTabIds) {
65
- return resolveTabs(getAvailableTabIds(visibleTabIds));
66
- }
67
77
  /**
68
78
  * Resolves the ordered visible ids to their tab configs, dropping, in the extension, tabs that
69
79
  * require the Vite plugin.
70
- */ function getVisibleTabs(visibleTabIds, isExtension) {
80
+ */
81
+ function getVisibleTabs(visibleTabIds, isExtension) {
71
82
  return resolveTabs(visibleTabIds).filter((tab) => !(isExtension && tab.viteOnly));
72
83
  }
73
84
  export { getAvailableTabIds, getAvailableTabs, getDefaultVisibleTabIds, getVisibleTabs, loadVisibleTabIds, reorderVisibleTabs, resolveTabs, saveVisibleTabIds, setTabVisible };
@@ -4,56 +4,56 @@ var devtoolsTabs = [
4
4
  {
5
5
  id: "overview",
6
6
  title: "Overview",
7
- renderIcon: () => /*#__PURE__*/ _jsxSorted(IconBoltOutline, null, { class: "h-6 w-6" }, null, 3, "0V_0")
7
+ renderIcon: () => /*#__PURE__*/ _jsxSorted(IconBoltOutline, null, { class: "h-6 w-6" }, null, 3, "NS_0")
8
8
  },
9
9
  {
10
10
  id: "packages",
11
11
  title: "Packages",
12
- renderIcon: () => /*#__PURE__*/ _jsxSorted(IconCubeOutline, null, { class: "h-6 w-6" }, null, 3, "0V_1"),
12
+ renderIcon: () => /*#__PURE__*/ _jsxSorted(IconCubeOutline, null, { class: "h-6 w-6" }, null, 3, "NS_1"),
13
13
  viteOnly: true
14
14
  },
15
15
  {
16
16
  id: "renderTree",
17
17
  title: "Render Tree",
18
- renderIcon: () => /*#__PURE__*/ _jsxSorted(IconDiagram3, null, { class: "h-6 w-6" }, null, 3, "0V_2")
18
+ renderIcon: () => /*#__PURE__*/ _jsxSorted(IconDiagram3, null, { class: "h-6 w-6" }, null, 3, "NS_2")
19
19
  },
20
20
  {
21
21
  id: "routes",
22
22
  title: "Routes",
23
- renderIcon: () => /*#__PURE__*/ _jsxSorted(IconFolderTree, null, { class: "h-6 w-6" }, null, 3, "0V_3"),
23
+ renderIcon: () => /*#__PURE__*/ _jsxSorted(IconFolderTree, null, { class: "h-6 w-6" }, null, 3, "NS_3"),
24
24
  viteOnly: true
25
25
  },
26
26
  {
27
27
  id: "assets",
28
28
  title: "Assets",
29
- renderIcon: () => /*#__PURE__*/ _jsxSorted(IconPhotoOutline, null, { class: "h-6 w-6" }, null, 3, "0V_4"),
29
+ renderIcon: () => /*#__PURE__*/ _jsxSorted(IconPhotoOutline, null, { class: "h-6 w-6" }, null, 3, "NS_4"),
30
30
  viteOnly: true
31
31
  },
32
32
  {
33
33
  id: "inspect",
34
34
  title: "Inspect",
35
- renderIcon: () => /*#__PURE__*/ _jsxSorted(IconMegaphoneMini, null, { class: "h-6 w-6" }, null, 3, "0V_5"),
35
+ renderIcon: () => /*#__PURE__*/ _jsxSorted(IconMegaphoneMini, null, { class: "h-6 w-6" }, null, 3, "NS_5"),
36
36
  viteOnly: true
37
37
  },
38
38
  {
39
39
  id: "codeBreak",
40
40
  title: "Code Break",
41
- renderIcon: () => /*#__PURE__*/ _jsxSorted(IconCodeBracketSolid, null, { class: "h-6 w-6" }, null, 3, "0V_6")
41
+ renderIcon: () => /*#__PURE__*/ _jsxSorted(IconCodeBracketSolid, null, { class: "h-6 w-6" }, null, 3, "NS_6")
42
42
  },
43
43
  {
44
44
  id: "performance",
45
45
  title: "Performance",
46
- renderIcon: () => /*#__PURE__*/ _jsxSorted(IconClockOutline, null, { class: "h-6 w-6" }, null, 3, "0V_7")
46
+ renderIcon: () => /*#__PURE__*/ _jsxSorted(IconClockOutline, null, { class: "h-6 w-6" }, null, 3, "NS_7")
47
47
  },
48
48
  {
49
49
  id: "preloads",
50
50
  title: "Preloads",
51
- renderIcon: () => /*#__PURE__*/ _jsxSorted(IconArrowDownTray, null, { class: "h-6 w-6" }, null, 3, "0V_8")
51
+ renderIcon: () => /*#__PURE__*/ _jsxSorted(IconArrowDownTray, null, { class: "h-6 w-6" }, null, 3, "NS_8")
52
52
  },
53
53
  {
54
54
  id: "buildAnalysis",
55
55
  title: "Build Analysis",
56
- renderIcon: () => /*#__PURE__*/ _jsxSorted(IconChartBarOutline, null, { class: "h-6 w-6" }, null, 3, "0V_9"),
56
+ renderIcon: () => /*#__PURE__*/ _jsxSorted(IconChartBarOutline, null, { class: "h-6 w-6" }, null, 3, "NS_9"),
57
57
  viteOnly: true
58
58
  }
59
59
  ];
@@ -10,7 +10,7 @@ var Assets = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl((_rawProps) =>
10
10
  width: 176,
11
11
  height: 176,
12
12
  class: "h-full w-full object-cover"
13
- }, null, 3, null), 1, "LV_0") : /*#__PURE__*/ _jsxSorted("div", null, { class: "bg-foreground/5 flex aspect-square items-center justify-center" }, /*#__PURE__*/ _jsxSorted("span", null, { class: "text-muted-foreground font-mono text-2xl" }, fileExt, 1, null), 1, "LV_1"), /*#__PURE__*/ _jsxSorted("div", null, { class: "space-y-2 p-4" }, [/*#__PURE__*/ _jsxSorted("div", { title: _wrapProp(asset, "path") }, { class: "truncate text-sm" }, asset.path.split("/").pop(), 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "text-muted-foreground flex items-center justify-between text-xs" }, [/*#__PURE__*/ _jsxSorted("span", null, null, [(asset.size / 1024).toFixed(2), " KB"], 1, null), /*#__PURE__*/ _jsxSorted("span", null, { class: "bg-foreground/5 rounded-full px-2 py-1" }, fileExt, 1, null)], 1, null)], 1, null)], 1, asset.filePath);
14
- }), 1, "LV_2");
13
+ }, null, 3, null), 1, "El_0") : /*#__PURE__*/ _jsxSorted("div", null, { class: "bg-foreground/5 flex aspect-square items-center justify-center" }, /*#__PURE__*/ _jsxSorted("span", null, { class: "text-muted-foreground font-mono text-2xl" }, fileExt, 1, null), 1, "El_1"), /*#__PURE__*/ _jsxSorted("div", null, { class: "space-y-2 p-4" }, [/*#__PURE__*/ _jsxSorted("div", { title: _wrapProp(asset, "path") }, { class: "truncate text-sm" }, asset.path.split("/").pop(), 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "text-muted-foreground flex items-center justify-between text-xs" }, [/*#__PURE__*/ _jsxSorted("span", null, null, [(asset.size / 1024).toFixed(2), " KB"], 1, null), /*#__PURE__*/ _jsxSorted("span", null, { class: "bg-foreground/5 rounded-full px-2 py-1" }, fileExt, 1, null)], 1, null)], 1, null)], 1, asset.filePath);
14
+ }), 1, "El_2");
15
15
  }, "Assets_component_3McbsijSMd8"));
16
16
  export { Assets };
@@ -2,7 +2,9 @@ import { getDevtoolsRpc } from "../../devtools/rpc.qwik.mjs";
2
2
  import { _captures, _fnSignal, _jsxSorted, _wrapProp, componentQrl, inlinedQrl, isBrowser, useSignal, useVisibleTaskQrl } from "@qwik.dev/core";
3
3
  import { Fragment } from "@qwik.dev/core/jsx-runtime";
4
4
  var _hf0 = (p0) => p0.value ? "Rebuilding..." : "Rebuild Report";
5
+ var _hf0_str = "p0.value?\"Rebuilding...\":\"Rebuild Report\"";
5
6
  var _hf1 = (p0) => p0.value ? "Building..." : "Build Report";
7
+ var _hf1_str = "p0.value?\"Building...\":\"Build Report\"";
6
8
  var BUILD_ANALYSIS_VIEW_PATH = "/__qwik_devtools/build-analysis/report";
7
9
  function getBuildAnalysisIframeSrc(version, origin) {
8
10
  const baseOrigin = origin ?? (isBrowser ? location.origin : "");
@@ -92,22 +94,22 @@ var BuildAnalysis = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(() => {
92
94
  return /*#__PURE__*/ _jsxSorted("div", null, { class: "flex h-full min-h-0 flex-col gap-4" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg rounded-2xl border p-5" }, /*#__PURE__*/ _jsxSorted("div", null, { class: "flex flex-col gap-3" }, [
93
95
  /*#__PURE__*/ _jsxSorted("div", null, { class: "text-lg font-semibold" }, "Build Analysis", 3, null),
94
96
  /*#__PURE__*/ _jsxSorted("div", null, { class: "text-muted-foreground max-w-3xl text-sm leading-6" }, "This tab embeds the HTML report generated by the visualizer plugin after a build.", 3, null),
95
- buildCommand.value ? /*#__PURE__*/ _jsxSorted("code", null, { class: "text-muted-foreground bg-foreground/5 rounded-lg px-3 py-2 text-xs" }, _wrapProp(buildCommand), 3, "iP_0") : null,
96
- buildTriggerHint.value ? /*#__PURE__*/ _jsxSorted("div", null, { class: "rounded-xl border border-amber-500/20 bg-amber-500/10 px-3 py-2 text-sm text-amber-200" }, _wrapProp(buildTriggerHint), 3, "iP_1") : null,
97
- errorMessage.value ? /*#__PURE__*/ _jsxSorted("div", null, { class: "rounded-xl border border-red-500/20 bg-red-500/10 px-3 py-2 text-sm text-red-300" }, _wrapProp(errorMessage), 3, "iP_2") : null
98
- ], 1, null), 1, null), isChecking.value ? /*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg text-muted-foreground rounded-2xl border p-6 text-sm" }, "Checking build analysis report...", 3, "iP_3") : hasReport.value ? /*#__PURE__*/ _jsxSorted(Fragment, null, null, [/*#__PURE__*/ _jsxSorted("div", null, { class: "flex items-center justify-end gap-3" }, [buildCommand.value && canTriggerBuild.value ? /*#__PURE__*/ _jsxSorted("button", null, {
97
+ buildCommand.value ? /*#__PURE__*/ _jsxSorted("code", null, { class: "text-muted-foreground bg-foreground/5 rounded-lg px-3 py-2 text-xs" }, _wrapProp(buildCommand), 3, "td_0") : null,
98
+ buildTriggerHint.value ? /*#__PURE__*/ _jsxSorted("div", null, { class: "rounded-xl border border-amber-500/20 bg-amber-500/10 px-3 py-2 text-sm text-amber-200" }, _wrapProp(buildTriggerHint), 3, "td_1") : null,
99
+ errorMessage.value ? /*#__PURE__*/ _jsxSorted("div", null, { class: "rounded-xl border border-red-500/20 bg-red-500/10 px-3 py-2 text-sm text-red-300" }, _wrapProp(errorMessage), 3, "td_2") : null
100
+ ], 1, null), 1, null), isChecking.value ? /*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg text-muted-foreground rounded-2xl border p-6 text-sm" }, "Checking build analysis report...", 3, "td_3") : hasReport.value ? /*#__PURE__*/ _jsxSorted(Fragment, null, null, [/*#__PURE__*/ _jsxSorted("div", null, { class: "flex items-center justify-end gap-3" }, [buildCommand.value && canTriggerBuild.value ? /*#__PURE__*/ _jsxSorted("button", null, {
99
101
  type: "button",
100
102
  "q-e:click": buildReport,
101
103
  disabled: _wrapProp(isBuilding),
102
104
  class: "border-border bg-foreground/5 hover:bg-foreground/10 rounded-xl border px-4 py-2 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50"
103
- }, _fnSignal(_hf0, [isBuilding]), 3, "iP_4") : null, /*#__PURE__*/ _jsxSorted("button", null, {
105
+ }, _fnSignal(_hf0, [isBuilding], _hf0_str), 3, "td_4") : null, /*#__PURE__*/ _jsxSorted("button", null, {
104
106
  type: "button",
105
107
  "q-e:click": refreshFrame,
106
108
  class: "border-border bg-foreground/5 hover:bg-foreground/10 rounded-xl border px-4 py-2 text-sm transition-colors"
107
109
  }, "Reload Report", 3, null)], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg min-h-0 flex-1 overflow-hidden rounded-2xl border" }, /*#__PURE__*/ _jsxSorted("iframe", { src: getBuildAnalysisIframeSrc(iframeVersion.value) }, {
108
110
  title: "Build Analysis Report",
109
111
  class: "h-full min-h-[680px] w-full border-0 bg-white"
110
- }, null, 3, getBuildAnalysisIframeSrc(iframeVersion.value)), 1, null)], 1, "iP_5") : /*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg rounded-2xl border p-6" }, /*#__PURE__*/ _jsxSorted("div", null, { class: "flex max-w-3xl flex-col gap-4" }, [
112
+ }, null, 3, getBuildAnalysisIframeSrc(iframeVersion.value)), 1, null)], 1, "td_5") : /*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg rounded-2xl border p-6" }, /*#__PURE__*/ _jsxSorted("div", null, { class: "flex max-w-3xl flex-col gap-4" }, [
111
113
  /*#__PURE__*/ _jsxSorted("div", null, { class: "text-base font-semibold" }, "No build analysis report yet", 3, null),
112
114
  /*#__PURE__*/ _jsxSorted("div", null, { class: "text-muted-foreground text-sm leading-6" }, canTriggerBuild.value ? "The visualizer HTML file does not exist yet. You need to build the current project first, and DevTools will ask for your confirmation before running that build." : "The visualizer HTML file does not exist yet. Run the build command locally to generate it, or reconnect from localhost if you want DevTools to trigger it for you.", 1, null),
113
115
  /*#__PURE__*/ _jsxSorted("code", null, { class: "text-muted-foreground bg-foreground/5 rounded-lg px-3 py-2 text-xs" }, _wrapProp(reportPath), 3, null),
@@ -116,7 +118,7 @@ var BuildAnalysis = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(() => {
116
118
  "q-e:click": buildReport,
117
119
  disabled: _wrapProp(isBuilding),
118
120
  class: "border-border bg-foreground/5 hover:bg-foreground/10 rounded-xl border px-4 py-2 text-sm transition-colors disabled:cursor-not-allowed disabled:opacity-50"
119
- }, _fnSignal(_hf1, [isBuilding]), 3, "iP_6") : null, 1, null)
120
- ], 1, null), 1, "iP_7")], 1, "iP_8");
121
+ }, _fnSignal(_hf1, [isBuilding], _hf1_str), 3, "td_6") : null, 1, null)
122
+ ], 1, null), 1, "td_7")], 1, "td_8");
121
123
  }, "BuildAnalysis_component_wViM53DMgX4"));
122
124
  export { BuildAnalysis, getBuildAnalysisIframeSrc };
@@ -1,6 +1,6 @@
1
1
  import { StateParser } from "./StateParser.qwik.mjs";
2
2
  import { HtmlParser } from "./HtmlParser.qwik.mjs";
3
- import { _jsxSorted, componentQrl, inlinedQrl, useSignal, useStylesQrl } from "@qwik.dev/core";
3
+ import { _captures, _jsxSorted, componentQrl, inlinedQrl, useSignal, useStylesQrl } from "@qwik.dev/core";
4
4
  var CodeBreak = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(() => {
5
5
  useStylesQrl(/*#__PURE__*/ inlinedQrl(`
6
6
  .code-output-container {
@@ -18,25 +18,23 @@ var CodeBreak = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(() => {
18
18
  `, "CodeBreak_component_useStyles_lHrOlzOysW0"));
19
19
  const currentTab = useSignal("state");
20
20
  return /*#__PURE__*/ _jsxSorted("div", null, { class: "h-full space-y-6 overflow-hidden" }, [
21
- /*#__PURE__*/ _jsxSorted("div", null, { class: "flex justify-center" }, /*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg inline-flex rounded-xl border p-0.5" }, [/*#__PURE__*/ _jsxSorted("button", {
22
- class: {
23
- "rounded-lg px-3 py-2 text-sm font-medium transition-colors md:px-4": true,
24
- "bg-accent text-white shadow": currentTab.value === "state",
25
- "text-muted-foreground hover:bg-foreground/5": currentTab.value !== "state"
26
- },
27
- "q-e:click": /*#__PURE__*/ inlinedQrl((_, _1, currentTab) => currentTab.value = "state", "CodeBreak_component_div_div_div_button_q_e_click_xWgXsjQPkqw").m(),
28
- "q:p": currentTab
29
- }, null, "State Parser", 6, null), /*#__PURE__*/ _jsxSorted("button", {
30
- class: {
31
- "rounded-lg px-3 py-2 text-sm font-medium transition-colors md:px-4": true,
32
- "bg-accent text-white shadow": currentTab.value === "html",
33
- "text-muted-foreground hover:bg-foreground/5": currentTab.value !== "html"
34
- },
35
- "q-e:click": /*#__PURE__*/ inlinedQrl((_, _1, currentTab) => currentTab.value = "html", "CodeBreak_component_div_div_div_button_q_e_click_1_LC2WyereJ0c").m(),
36
- "q:p": currentTab
37
- }, null, "HTML Parser", 6, null)], 1, null), 1, null),
38
- currentTab.value === "state" && /*#__PURE__*/ _jsxSorted(StateParser, null, null, null, 3, "on_0"),
39
- currentTab.value === "html" && /*#__PURE__*/ _jsxSorted(HtmlParser, null, null, null, 3, "on_1")
40
- ], 1, "on_2");
21
+ /*#__PURE__*/ _jsxSorted("div", null, { class: "flex justify-center" }, /*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg inline-flex rounded-xl border p-0.5" }, [/*#__PURE__*/ _jsxSorted("button", { class: {
22
+ "rounded-lg px-3 py-2 text-sm font-medium transition-colors md:px-4": true,
23
+ "bg-accent text-white shadow": currentTab.value === "state",
24
+ "text-muted-foreground hover:bg-foreground/5": currentTab.value !== "state"
25
+ } }, { "q-e:click": /*#__PURE__*/ inlinedQrl(() => {
26
+ const currentTab = _captures[0];
27
+ return currentTab.value = "state";
28
+ }, "CodeBreak_component_div_div_div_button_q_e_click_xWgXsjQPkqw", [currentTab]) }, "State Parser", 3, null), /*#__PURE__*/ _jsxSorted("button", { class: {
29
+ "rounded-lg px-3 py-2 text-sm font-medium transition-colors md:px-4": true,
30
+ "bg-accent text-white shadow": currentTab.value === "html",
31
+ "text-muted-foreground hover:bg-foreground/5": currentTab.value !== "html"
32
+ } }, { "q-e:click": /*#__PURE__*/ inlinedQrl(() => {
33
+ const currentTab = _captures[0];
34
+ return currentTab.value = "html";
35
+ }, "CodeBreak_component_div_div_div_button_q_e_click_1_LC2WyereJ0c", [currentTab]) }, "HTML Parser", 3, null)], 1, null), 1, null),
36
+ currentTab.value === "state" && /*#__PURE__*/ _jsxSorted(StateParser, null, null, null, 3, "Qk_0"),
37
+ currentTab.value === "html" && /*#__PURE__*/ _jsxSorted(HtmlParser, null, null, null, 3, "Qk_1")
38
+ ], 1, "Qk_2");
41
39
  }, "CodeBreak_component_TGxTKTmWfNE"));
42
40
  export { CodeBreak };
@@ -2,6 +2,7 @@ import { getHighlighter } from "../../utils/shiki.qwik.mjs";
2
2
  import { _captures, _fnSignal, _jsxSorted, _wrapProp, componentQrl, inlinedQrl, useSignal, useStylesQrl, useVisibleTaskQrl } from "@qwik.dev/core";
3
3
  import { _getDomContainer, _vnode_toString } from "@qwik.dev/core/internal";
4
4
  var _hf0 = (p0) => p0.value || "";
5
+ var _hf0_str = "p0.value||\"\"";
5
6
  var HtmlParser = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(() => {
6
7
  useStylesQrl(/*#__PURE__*/ inlinedQrl(`
7
8
  pre.shiki { overflow: auto; padding: 10px; height: 100%; }
@@ -68,19 +69,20 @@ var HtmlParser = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(() => {
68
69
  htmlResult,
69
70
  shikiRef
70
71
  ]));
71
- return /*#__PURE__*/ _jsxSorted("div", null, { class: "grid grid-cols-1 gap-4 md:grid-cols-2" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg flex h-[60vh] min-h-0 flex-col rounded-xl border" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border flex items-center justify-between border-b p-3" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "text-sm font-medium" }, "Input HTML", 3, null), parsingTime.value !== null && /*#__PURE__*/ _jsxSorted("span", null, { class: "border-glass-border text-muted-foreground rounded-full border px-2 py-0.5 text-xs" }, [_wrapProp(parsingTime), "ms"], 3, "la_0")], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "min-h-0 flex-1 flex-col space-y-3 p-3" }, [/*#__PURE__*/ _jsxSorted("textarea", {
72
- "q-e:input": /*#__PURE__*/ inlinedQrl((e, t, inputHtml) => inputHtml.value = t.value, "HtmlParser_component_div_div_div_textarea_q_e_input_XIyjbAjuy8w").m(),
73
- "q:p": inputHtml
74
- }, {
72
+ return /*#__PURE__*/ _jsxSorted("div", null, { class: "grid grid-cols-1 gap-4 md:grid-cols-2" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg flex h-[60vh] min-h-0 flex-col rounded-xl border" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border flex items-center justify-between border-b p-3" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "text-sm font-medium" }, "Input HTML", 3, null), parsingTime.value !== null && /*#__PURE__*/ _jsxSorted("span", null, { class: "border-glass-border text-muted-foreground rounded-full border px-2 py-0.5 text-xs" }, [_wrapProp(parsingTime), "ms"], 3, "nu_0")], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "min-h-0 flex-1 flex-col space-y-3 p-3" }, [/*#__PURE__*/ _jsxSorted("textarea", null, {
75
73
  value: _wrapProp(inputHtml),
74
+ "q-e:input": /*#__PURE__*/ inlinedQrl((e, t) => {
75
+ const inputHtml = _captures[0];
76
+ return inputHtml.value = t.value;
77
+ }, "HtmlParser_component_div_div_div_textarea_q_e_input_XIyjbAjuy8w", [inputHtml]),
76
78
  placeholder: "Paste HTML and click to parse/format.",
77
79
  class: "border-glass-border bg-card-item-bg text-foreground placeholder:text-muted-foreground h-full min-h-0 w-full flex-1 resize-none rounded-md border p-3 font-mono text-sm"
78
- }, null, 6, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "flex items-center gap-3" }, /*#__PURE__*/ _jsxSorted("button", null, {
80
+ }, null, 3, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "flex items-center gap-3" }, /*#__PURE__*/ _jsxSorted("button", null, {
79
81
  "q-e:click": onParseHtml$,
80
82
  class: "bg-accent rounded-md px-3 py-1.5 text-sm text-white hover:opacity-90"
81
- }, "Parse HTML", 3, null), 3, null)], 1, null)], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg flex h-[60vh] min-h-0 flex-col overflow-hidden rounded-xl border" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border flex items-center justify-between border-b p-3" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "text-sm font-medium" }, "VNode Tree", 3, null), parsingTime.value !== null && /*#__PURE__*/ _jsxSorted("span", null, { class: "border-glass-border text-muted-foreground rounded-full border px-2 py-0.5 text-xs" }, [_wrapProp(parsingTime), "ms"], 3, "la_1")], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "h-full min-h-0 flex-1" }, /*#__PURE__*/ _jsxSorted("pre", null, {
83
+ }, "Parse HTML", 3, null), 3, null)], 3, null)], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg flex h-[60vh] min-h-0 flex-col overflow-hidden rounded-xl border" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border flex items-center justify-between border-b p-3" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "text-sm font-medium" }, "VNode Tree", 3, null), parsingTime.value !== null && /*#__PURE__*/ _jsxSorted("span", null, { class: "border-glass-border text-muted-foreground rounded-full border px-2 py-0.5 text-xs" }, [_wrapProp(parsingTime), "ms"], 3, "nu_1")], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "h-full min-h-0 flex-1" }, /*#__PURE__*/ _jsxSorted("pre", null, {
82
84
  class: "h-full overflow-auto",
83
- dangerouslySetInnerHTML: _fnSignal(_hf0, [highlightedHtml])
84
- }, null, 3, null), 3, null)], 1, null)], 1, "la_2");
85
+ dangerouslySetInnerHTML: _fnSignal(_hf0, [highlightedHtml], _hf0_str)
86
+ }, null, 3, null), 3, null)], 1, null)], 1, "nu_2");
85
87
  }, "HtmlParser_component_9YnEezFEUMA"));
86
88
  export { HtmlParser };
@@ -2,6 +2,7 @@ import { getHighlighter } from "../../utils/shiki.qwik.mjs";
2
2
  import { _captures, _fnSignal, _jsxSorted, _wrapProp, componentQrl, inlinedQrl, useSignal, useStylesQrl, useVisibleTaskQrl } from "@qwik.dev/core";
3
3
  import { _dumpState, _preprocessState } from "@qwik.dev/core/internal";
4
4
  var _hf0 = (p0) => p0.value || "";
5
+ var _hf0_str = "p0.value||\"\"";
5
6
  var StateParser = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(() => {
6
7
  useStylesQrl(/*#__PURE__*/ inlinedQrl(`
7
8
  pre.shiki { overflow: auto; padding: 10px; height: 100%; }
@@ -94,19 +95,20 @@ var StateParser = /*#__PURE__*/ componentQrl(/*#__PURE__*/ inlinedQrl(() => {
94
95
  shikiRef,
95
96
  stateResult
96
97
  ]));
97
- return /*#__PURE__*/ _jsxSorted("div", null, { class: "grid grid-cols-1 gap-4 md:grid-cols-2" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg flex h-[60vh] min-h-0 flex-col rounded-xl border" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border flex items-center justify-between gap-3 border-b p-3" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "flex items-center gap-3" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "text-sm font-medium" }, "Input State", 3, null), parsingTime.value !== null && /*#__PURE__*/ _jsxSorted("span", null, { class: "border-glass-border text-muted-foreground rounded-full border px-2 py-0.5 text-xs" }, [_wrapProp(parsingTime), "ms"], 3, "O4_0")], 1, null), /*#__PURE__*/ _jsxSorted("button", null, {
98
+ return /*#__PURE__*/ _jsxSorted("div", null, { class: "grid grid-cols-1 gap-4 md:grid-cols-2" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg flex h-[60vh] min-h-0 flex-col rounded-xl border" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border flex items-center justify-between gap-3 border-b p-3" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "flex items-center gap-3" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "text-sm font-medium" }, "Input State", 3, null), parsingTime.value !== null && /*#__PURE__*/ _jsxSorted("span", null, { class: "border-glass-border text-muted-foreground rounded-full border px-2 py-0.5 text-xs" }, [_wrapProp(parsingTime), "ms"], 3, "97_0")], 1, null), /*#__PURE__*/ _jsxSorted("button", null, {
98
99
  "q-e:click": onParseState$,
99
100
  class: "bg-accent rounded-md px-3 py-1.5 text-sm text-white hover:opacity-90"
100
- }, "Parse State", 3, null)], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "flex min-h-0 flex-1 flex-col p-3" }, /*#__PURE__*/ _jsxSorted("textarea", {
101
- "q-e:input": /*#__PURE__*/ inlinedQrl((e, t, inputState) => inputState.value = t.value, "StateParser_component_div_div_div_textarea_q_e_input_kcp2t0mamTI").m(),
102
- "q:p": inputState
103
- }, {
101
+ }, "Parse State", 3, null)], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "flex min-h-0 flex-1 flex-col p-3" }, /*#__PURE__*/ _jsxSorted("textarea", null, {
104
102
  value: _wrapProp(inputState),
103
+ "q-e:input": /*#__PURE__*/ inlinedQrl((e, t) => {
104
+ const inputState = _captures[0];
105
+ return inputState.value = t.value;
106
+ }, "StateParser_component_div_div_div_textarea_q_e_input_kcp2t0mamTI", [inputState]),
105
107
  placeholder: "Paste Qwik state and click to parse/format.",
106
108
  class: "border-glass-border bg-card-item-bg text-foreground placeholder:text-muted-foreground min-h-0 w-full flex-1 resize-none rounded-md border p-3 font-mono text-sm"
107
- }, null, 6, null), 1, null)], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg flex h-[60vh] min-h-0 flex-col overflow-hidden rounded-xl border" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border flex items-center justify-between border-b p-3" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "text-sm font-medium" }, "Parsed State", 3, null), parsingTime.value !== null && /*#__PURE__*/ _jsxSorted("span", null, { class: "border-glass-border text-muted-foreground rounded-full border px-2 py-0.5 text-xs" }, [_wrapProp(parsingTime), "ms"], 3, "O4_1")], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "h-full min-h-0 flex-1" }, /*#__PURE__*/ _jsxSorted("pre", null, {
109
+ }, null, 3, null), 3, null)], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border bg-card-item-bg flex h-[60vh] min-h-0 flex-col overflow-hidden rounded-xl border" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "border-glass-border flex items-center justify-between border-b p-3" }, [/*#__PURE__*/ _jsxSorted("div", null, { class: "text-sm font-medium" }, "Parsed State", 3, null), parsingTime.value !== null && /*#__PURE__*/ _jsxSorted("span", null, { class: "border-glass-border text-muted-foreground rounded-full border px-2 py-0.5 text-xs" }, [_wrapProp(parsingTime), "ms"], 3, "97_1")], 1, null), /*#__PURE__*/ _jsxSorted("div", null, { class: "h-full min-h-0 flex-1" }, /*#__PURE__*/ _jsxSorted("pre", null, {
108
110
  class: "h-full overflow-auto",
109
- dangerouslySetInnerHTML: _fnSignal(_hf0, [highlightedState])
110
- }, null, 3, null), 3, null)], 1, null)], 1, "O4_2");
111
+ dangerouslySetInnerHTML: _fnSignal(_hf0, [highlightedState], _hf0_str)
112
+ }, null, 3, null), 3, null)], 1, null)], 1, "97_2");
111
113
  }, "StateParser_component_WYGTcR6czK0"));
112
114
  export { StateParser };