@stsgs1980/fab-inspector 3.4.1 → 3.5.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 (61) hide show
  1. package/README.md +27 -0
  2. package/dist/api-source-route.d.ts +14 -0
  3. package/dist/api-source-route.d.ts.map +1 -0
  4. package/dist/api-source-route.js +54 -0
  5. package/dist/api-source-route.js.map +1 -0
  6. package/dist/box-model-section.d.ts +5 -0
  7. package/dist/box-model-section.d.ts.map +1 -0
  8. package/dist/box-model-section.js +15 -0
  9. package/dist/box-model-section.js.map +1 -0
  10. package/dist/highlight-overlay.d.ts +4 -0
  11. package/dist/highlight-overlay.d.ts.map +1 -0
  12. package/dist/highlight-overlay.js +14 -0
  13. package/dist/highlight-overlay.js.map +1 -0
  14. package/dist/index.d.ts +4 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +3 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/inspector-fab.d.ts +6 -0
  19. package/dist/inspector-fab.d.ts.map +1 -0
  20. package/dist/inspector-fab.js +14 -0
  21. package/dist/inspector-fab.js.map +1 -0
  22. package/dist/inspector-panel.d.ts +14 -0
  23. package/dist/inspector-panel.d.ts.map +1 -0
  24. package/dist/inspector-panel.js +36 -0
  25. package/dist/inspector-panel.js.map +1 -0
  26. package/dist/panel-sections.d.ts +25 -0
  27. package/dist/panel-sections.d.ts.map +1 -0
  28. package/dist/panel-sections.js +48 -0
  29. package/dist/panel-sections.js.map +1 -0
  30. package/dist/plugins/data-src-plugin.d.ts +38 -0
  31. package/dist/plugins/data-src-plugin.d.ts.map +1 -0
  32. package/dist/plugins/data-src-plugin.js +90 -0
  33. package/dist/plugins/data-src-plugin.js.map +1 -0
  34. package/dist/select-element-fab.d.ts +2 -0
  35. package/dist/select-element-fab.d.ts.map +1 -0
  36. package/{select-element-fab.tsx → dist/select-element-fab.js} +8 -45
  37. package/dist/select-element-fab.js.map +1 -0
  38. package/dist/types.d.ts +43 -0
  39. package/dist/types.d.ts.map +1 -0
  40. package/dist/types.js +2 -0
  41. package/dist/types.js.map +1 -0
  42. package/dist/use-element-inspector.d.ts +19 -0
  43. package/dist/use-element-inspector.d.ts.map +1 -0
  44. package/dist/use-element-inspector.js +239 -0
  45. package/dist/use-element-inspector.js.map +1 -0
  46. package/dist/use-panel-drag.d.ts +11 -0
  47. package/dist/use-panel-drag.d.ts.map +1 -0
  48. package/dist/use-panel-drag.js +35 -0
  49. package/dist/use-panel-drag.js.map +1 -0
  50. package/package.json +25 -9
  51. package/api-source-route.ts +0 -60
  52. package/box-model-section.tsx +0 -97
  53. package/highlight-overlay.tsx +0 -23
  54. package/index.ts +0 -10
  55. package/inspector-fab.tsx +0 -63
  56. package/inspector-panel.tsx +0 -190
  57. package/panel-sections.tsx +0 -207
  58. package/plugins/data-src-plugin.ts +0 -110
  59. package/types.ts +0 -45
  60. package/use-element-inspector.ts +0 -264
  61. package/use-panel-drag.ts +0 -47
package/README.md CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  Визуальный инспектор элементов для Next.js dev mode. Плавающая FAB-кнопка с draggable панелью в GitHub Dark Theme, подсветкой синтаксиса и box-model визуализацией.
4
4
 
5
+ ![npm version](https://img.shields.io/npm/v/@stsgs1980/fab-inspector?style=flat-square&logo=npm)
5
6
  ![React 19](https://img.shields.io/badge/React-19-61DAFB?style=flat-square&logo=react)
6
7
  ![Next.js 15+](https://img.shields.io/badge/Next.js-15%2B-000000?style=flat-square&logo=nextdotjs)
7
8
  ![License: MIT](https://img.shields.io/badge/License-MIT-green?style=flat-square)
@@ -122,12 +123,30 @@ npm update @stsgs1980/fab-inspector
122
123
  - Компонент `SelectElementFab` имеет dev-only guard: `if (process.env.NODE_ENV !== 'development') return null`
123
124
  - `sideEffects: false` — tree-shaking вырезает неиспользуемый код
124
125
 
126
+ ### Сборка (v3.5.0+)
127
+
128
+ Начиная с v3.5.0 пакет публикуется **собранным** (`dist/` — ESM `.js` + `.d.ts` + sourcemaps), а не сырыми `.ts`/`.tsx`. Это значит:
129
+
130
+ - **Не нужен** `transpilePackages` в `next.config.ts` — работает из коробки
131
+ - **Не нужен** TypeScript на стороне потребителя для рантайма
132
+ - TypeScript-типы подключаются автоматически через `exports[].types`
133
+
134
+ Сборка из исходников (для контрибьюторов модуля):
135
+
136
+ ```bash
137
+ git clone https://github.com/stsgs1980/FabInspector.git
138
+ cd FabInspector/src/components/inspector
139
+ npm run build # tsc -p tsconfig.build.json → dist/
140
+ ```
141
+
125
142
  ### API-роут `/api/source`
126
143
 
127
144
  Создаётся CLI `init` автоматически. Принимает `file`, `line`, `ctx` (контекст строк). Файл валидируется по белому списку директорий (`src/components/`, `src/app/`, `src/content/`, `src/hooks/`, `src/lib/`).
128
145
 
129
146
  ## Структура модуля
130
147
 
148
+ **Исходники** (в git):
149
+
131
150
  - `index.ts` — Barrel export
132
151
  - `types.ts` — Интерфейсы (ElementInfo, SourceInfo, BoxModel, SnippetData)
133
152
  - `select-element-fab.tsx` — Корневой composer
@@ -139,7 +158,15 @@ npm update @stsgs1980/fab-inspector
139
158
  - `use-element-inspector.ts` — Хук инспекции
140
159
  - `use-panel-drag.ts` — Хук перетаскивания
141
160
  - `api-source-route.ts` — GET handler для `/api/source`
161
+ - `plugins/data-src-plugin.ts` — Turbopack plugin (Next.js 15.3+, авто-data-src)
142
162
  - `cli/init.mjs` — CLI `npx @stsgs1980/fab-inspector init`
163
+ - `tsconfig.build.json` — Конфиг сборки `dist/`
164
+
165
+ **В npm-пакете** (генерируется `npm run build`):
166
+
167
+ - `dist/` — ESM `.js` + `.d.ts` + `.js.map` для каждого исходника
168
+ - `cli/init.mjs` — CLI (как есть)
169
+ - `README.md` + `package.json`
143
170
 
144
171
  ## License
145
172
 
@@ -0,0 +1,14 @@
1
+ import { NextRequest, NextResponse } from 'next/server';
2
+ export declare function GET(request: NextRequest): Promise<NextResponse<{
3
+ error: string;
4
+ }> | NextResponse<{
5
+ file: string;
6
+ line: number;
7
+ totalLines: number;
8
+ snippet: {
9
+ startLine: number;
10
+ lines: string[];
11
+ highlightLine: number;
12
+ };
13
+ }>>;
14
+ //# sourceMappingURL=api-source-route.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-source-route.d.ts","sourceRoot":"","sources":["../api-source-route.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAoBxD,wBAAsB,GAAG,CAAC,OAAO,EAAE,WAAW;;;;;;;;;;;IAiC7C"}
@@ -0,0 +1,54 @@
1
+ // Шаблон API-роута для установки.
2
+ // В проекте-потребителе создайте src/app/api/source/route.ts:
3
+ // export { GET } from '@stsgs1980/fab-inspector/api/source';
4
+ // Либо, если модуль подключён как локальный путь:
5
+ // export { GET } from '@/components/inspector/api-source-route';
6
+ import { NextResponse } from 'next/server';
7
+ import { readFile } from 'fs/promises';
8
+ import { resolve } from 'path';
9
+ // process.cwd() в Next.js = корень проекта-потребителя.
10
+ // Никаких '..' — иначе путь уходит за пределы проекта и isAllowed() всегда false.
11
+ const PROJECT_ROOT = process.cwd();
12
+ const ALLOWED_PREFIXES = [
13
+ resolve(PROJECT_ROOT, 'src/components/'),
14
+ resolve(PROJECT_ROOT, 'src/app/'),
15
+ resolve(PROJECT_ROOT, 'src/content/'),
16
+ resolve(PROJECT_ROOT, 'src/hooks/'),
17
+ resolve(PROJECT_ROOT, 'src/lib/'),
18
+ ];
19
+ function isAllowed(filePath) {
20
+ const resolved = resolve(PROJECT_ROOT, filePath);
21
+ return ALLOWED_PREFIXES.some((prefix) => resolved.startsWith(prefix));
22
+ }
23
+ export async function GET(request) {
24
+ const { searchParams } = new URL(request.url);
25
+ const file = searchParams.get('file');
26
+ const line = parseInt(searchParams.get('line') || '1', 10);
27
+ const ctx = parseInt(searchParams.get('ctx') || '8', 10);
28
+ if (!file || !isAllowed(file)) {
29
+ return NextResponse.json({ error: 'File not allowed' }, { status: 403 });
30
+ }
31
+ try {
32
+ const filePath = resolve(PROJECT_ROOT, file);
33
+ const content = await readFile(filePath, 'utf-8');
34
+ const lines = content.split('\n');
35
+ const start = Math.max(0, line - 1 - ctx);
36
+ const end = Math.min(lines.length, line - 1 + ctx + 1);
37
+ const snippet = lines.slice(start, end);
38
+ const startLine = start + 1;
39
+ return NextResponse.json({
40
+ file,
41
+ line,
42
+ totalLines: lines.length,
43
+ snippet: {
44
+ startLine,
45
+ lines: snippet,
46
+ highlightLine: line,
47
+ },
48
+ });
49
+ }
50
+ catch {
51
+ return NextResponse.json({ error: 'File not found' }, { status: 404 });
52
+ }
53
+ }
54
+ //# sourceMappingURL=api-source-route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api-source-route.js","sourceRoot":"","sources":["../api-source-route.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,8DAA8D;AAC9D,+DAA+D;AAC/D,kDAAkD;AAClD,mEAAmE;AAEnE,OAAO,EAAe,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAE/B,wDAAwD;AACxD,kFAAkF;AAClF,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;AACnC,MAAM,gBAAgB,GAAG;IACvB,OAAO,CAAC,YAAY,EAAE,iBAAiB,CAAC;IACxC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC;IACjC,OAAO,CAAC,YAAY,EAAE,cAAc,CAAC;IACrC,OAAO,CAAC,YAAY,EAAE,YAAY,CAAC;IACnC,OAAO,CAAC,YAAY,EAAE,UAAU,CAAC;CAClC,CAAC;AAEF,SAAS,SAAS,CAAC,QAAgB;IACjC,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC;IACjD,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;AACxE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAoB;IAC5C,MAAM,EAAE,YAAY,EAAE,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;IAEzD,IAAI,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC;QAC9B,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,kBAAkB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC;QAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC,CAAC;QACvD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;QAE5B,OAAO,YAAY,CAAC,IAAI,CAAC;YACvB,IAAI;YACJ,IAAI;YACJ,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,OAAO,EAAE;gBACP,SAAS;gBACT,KAAK,EAAE,OAAO;gBACd,aAAa,EAAE,IAAI;aACpB;SACF,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
@@ -0,0 +1,5 @@
1
+ import type { BoxModel } from './types';
2
+ export declare function BoxModelSection({ boxModel }: {
3
+ boxModel: BoxModel;
4
+ }): import("react").JSX.Element;
5
+ //# sourceMappingURL=box-model-section.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box-model-section.d.ts","sourceRoot":"","sources":["../box-model-section.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAiDxC,wBAAgB,eAAe,CAAC,EAAE,QAAQ,EAAE,EAAE;IAAE,QAAQ,EAAE,QAAQ,CAAA;CAAE,+BA+CnE"}
@@ -0,0 +1,15 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ function fmt(val) {
3
+ if (val === '0px')
4
+ return '0';
5
+ return val;
6
+ }
7
+ function BoxRow({ top, right, bottom, left, color, bg, label, inner, }) {
8
+ const allSame = top === right && right === bottom && bottom === left;
9
+ const display = allSame ? fmt(top) : `${fmt(top)} ${fmt(right)} ${fmt(bottom)} ${fmt(left)}`;
10
+ return (_jsxs("div", { className: "flex items-center gap-2 text-[10px] font-mono", children: [_jsx("span", { className: "w-12 text-right text-[#8B949E] flex-shrink-0", children: label }), _jsx("div", { className: "flex-1", children: _jsxs("div", { className: "border text-center py-1 text-[#E6EDF3] rounded-sm", style: { borderColor: color, backgroundColor: bg }, children: [allSame ? (_jsx("span", { children: display })) : (_jsxs("div", { className: "flex justify-between px-1", children: [_jsx("span", { children: fmt(top) }), _jsx("span", { children: fmt(right) }), _jsx("span", { children: fmt(bottom) }), _jsx("span", { children: fmt(left) })] })), _jsx("div", { className: "mt-1", children: inner })] }) })] }));
11
+ }
12
+ export function BoxModelSection({ boxModel }) {
13
+ return (_jsxs("div", { className: "px-4 py-2.5 border-b border-[#30363D]", children: [_jsx("div", { className: "text-[11px] font-semibold text-[#8B949E] uppercase tracking-wider mb-2", children: "Box Model" }), _jsx("div", { className: "flex flex-col gap-1.5", children: _jsx(BoxRow, { top: boxModel.marginTop, right: boxModel.marginRight, bottom: boxModel.marginBottom, left: boxModel.marginLeft, color: "#D29922", bg: "rgba(210, 153, 34, 0.06)", label: "margin", inner: _jsx(BoxRow, { top: boxModel.borderTop, right: boxModel.borderRight, bottom: boxModel.borderBottom, left: boxModel.borderLeft, color: "#58A6FF", bg: "rgba(88, 166, 255, 0.06)", label: "border", inner: _jsx(BoxRow, { top: boxModel.paddingTop, right: boxModel.paddingRight, bottom: boxModel.paddingBottom, left: boxModel.paddingLeft, color: "#3FB950", bg: "rgba(63, 185, 80, 0.06)", label: "padding", inner: _jsxs("div", { className: "text-center py-1 bg-[#0D1117] rounded-sm text-[#E6EDF3]", children: [_jsx("div", { className: "text-[9px] text-[#6E7681]", children: "content" }), _jsxs("div", { children: [fmt(boxModel.width), " x ", fmt(boxModel.height)] })] }) }) }) }) })] }));
14
+ }
15
+ //# sourceMappingURL=box-model-section.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"box-model-section.js","sourceRoot":"","sources":["../box-model-section.tsx"],"names":[],"mappings":";AAEA,SAAS,GAAG,CAAC,GAAW;IACtB,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,GAAG,CAAC;IAC9B,OAAO,GAAG,CAAC;AACb,CAAC;AAED,SAAS,MAAM,CAAC,EACd,GAAG,EACH,KAAK,EACL,MAAM,EACN,IAAI,EACJ,KAAK,EACL,EAAE,EACF,KAAK,EACL,KAAK,GAKN;IACC,MAAM,OAAO,GAAG,GAAG,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,IAAI,MAAM,KAAK,IAAI,CAAC;IACrE,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;IAE7F,OAAO,CACL,eAAK,SAAS,EAAC,+CAA+C,aAC5D,eAAM,SAAS,EAAC,8CAA8C,YAAE,KAAK,GAAQ,EAC7E,cAAK,SAAS,EAAC,QAAQ,YACrB,eACE,SAAS,EAAC,mDAAmD,EAC7D,KAAK,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,eAAe,EAAE,EAAE,EAAE,aAEjD,OAAO,CAAC,CAAC,CAAC,CACT,yBAAO,OAAO,GAAQ,CACvB,CAAC,CAAC,CAAC,CACF,eAAK,SAAS,EAAC,2BAA2B,aACxC,yBAAO,GAAG,CAAC,GAAG,CAAC,GAAQ,EACvB,yBAAO,GAAG,CAAC,KAAK,CAAC,GAAQ,EACzB,yBAAO,GAAG,CAAC,MAAM,CAAC,GAAQ,EAC1B,yBAAO,GAAG,CAAC,IAAI,CAAC,GAAQ,IACpB,CACP,EACD,cAAK,SAAS,EAAC,MAAM,YAAE,KAAK,GAAO,IAC/B,GACF,IACF,CACP,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,EAAE,QAAQ,EAA0B;IAClE,OAAO,CACL,eAAK,SAAS,EAAC,uCAAuC,aACpD,cAAK,SAAS,EAAC,wEAAwE,0BAEjF,EACN,cAAK,SAAS,EAAC,uBAAuB,YACpC,KAAC,MAAM,IACL,GAAG,EAAE,QAAQ,CAAC,SAAS,EACvB,KAAK,EAAE,QAAQ,CAAC,WAAW,EAC3B,MAAM,EAAE,QAAQ,CAAC,YAAY,EAC7B,IAAI,EAAE,QAAQ,CAAC,UAAU,EACzB,KAAK,EAAC,SAAS,EACf,EAAE,EAAC,0BAA0B,EAC7B,KAAK,EAAC,QAAQ,EACd,KAAK,EACH,KAAC,MAAM,IACL,GAAG,EAAE,QAAQ,CAAC,SAAS,EACvB,KAAK,EAAE,QAAQ,CAAC,WAAW,EAC3B,MAAM,EAAE,QAAQ,CAAC,YAAY,EAC7B,IAAI,EAAE,QAAQ,CAAC,UAAU,EACzB,KAAK,EAAC,SAAS,EACf,EAAE,EAAC,0BAA0B,EAC7B,KAAK,EAAC,QAAQ,EACd,KAAK,EACH,KAAC,MAAM,IACL,GAAG,EAAE,QAAQ,CAAC,UAAU,EACxB,KAAK,EAAE,QAAQ,CAAC,YAAY,EAC5B,MAAM,EAAE,QAAQ,CAAC,aAAa,EAC9B,IAAI,EAAE,QAAQ,CAAC,WAAW,EAC1B,KAAK,EAAC,SAAS,EACf,EAAE,EAAC,yBAAyB,EAC5B,KAAK,EAAC,SAAS,EACf,KAAK,EACH,eAAK,SAAS,EAAC,yDAAyD,aACtE,cAAK,SAAS,EAAC,2BAA2B,wBAAc,EACxD,0BAAM,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAK,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAO,IACrD,GAER,GAEJ,GAEJ,GACE,IACF,CACP,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export declare function HighlightOverlay({ highlightBox, }: {
2
+ highlightBox: DOMRect;
3
+ }): import("react").JSX.Element;
4
+ //# sourceMappingURL=highlight-overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight-overlay.d.ts","sourceRoot":"","sources":["../highlight-overlay.tsx"],"names":[],"mappings":"AAAA,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,GACb,EAAE;IACD,YAAY,EAAE,OAAO,CAAC;CACvB,+BAkBA"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ export function HighlightOverlay({ highlightBox, }) {
3
+ return (_jsx("div", { "data-se-highlight": true, className: "fixed pointer-events-none z-[90]", style: {
4
+ top: highlightBox.top,
5
+ left: highlightBox.left,
6
+ width: highlightBox.width,
7
+ height: highlightBox.height,
8
+ border: '1px dashed #58A6FF',
9
+ backgroundColor: 'rgba(56, 139, 253, 0.06)',
10
+ borderRadius: '3px',
11
+ transition: 'all 0.1s ease-out',
12
+ }, "aria-hidden": "true" }));
13
+ }
14
+ //# sourceMappingURL=highlight-overlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"highlight-overlay.js","sourceRoot":"","sources":["../highlight-overlay.tsx"],"names":[],"mappings":";AAAA,MAAM,UAAU,gBAAgB,CAAC,EAC/B,YAAY,GAGb;IACC,OAAO,CACL,yCAEE,SAAS,EAAC,kCAAkC,EAC5C,KAAK,EAAE;YACL,GAAG,EAAE,YAAY,CAAC,GAAG;YACrB,IAAI,EAAE,YAAY,CAAC,IAAI;YACvB,KAAK,EAAE,YAAY,CAAC,KAAK;YACzB,MAAM,EAAE,YAAY,CAAC,MAAM;YAC3B,MAAM,EAAE,oBAAoB;YAC5B,eAAe,EAAE,0BAA0B;YAC3C,YAAY,EAAE,KAAK;YACnB,UAAU,EAAE,mBAAmB;SAChC,iBACW,MAAM,GAClB,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { SelectElementFab } from './select-element-fab';
2
+ export type { SourceInfo, ElementInfo, SnippetData, BoxModel, } from './types';
3
+ export { dataSrcPlugin } from './plugins/data-src-plugin';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,YAAY,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,QAAQ,GACT,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { SelectElementFab } from './select-element-fab';
2
+ export { dataSrcPlugin } from './plugins/data-src-plugin';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AASxD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function InspectorFab({ active, onToggle, showTooltip, }: {
2
+ active: boolean;
3
+ onToggle: () => void;
4
+ showTooltip: boolean;
5
+ }): import("react").JSX.Element;
6
+ //# sourceMappingURL=inspector-fab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector-fab.d.ts","sourceRoot":"","sources":["../inspector-fab.tsx"],"names":[],"mappings":"AAEA,wBAAgB,YAAY,CAAC,EAC3B,MAAM,EACN,QAAQ,EACR,WAAW,GACZ,EAAE;IACD,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB,+BAoDA"}
@@ -0,0 +1,14 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { motion, AnimatePresence } from 'framer-motion';
3
+ export function InspectorFab({ active, onToggle, showTooltip, }) {
4
+ return (_jsxs(_Fragment, { children: [_jsxs(motion.button, { "data-se-fab": true, onClick: onToggle, className: `
5
+ fixed bottom-6 right-6 z-[90] w-12 h-12 rounded-full
6
+ flex items-center justify-center
7
+ shadow-lg transition-all duration-200 cursor-pointer
8
+ focus:outline-none focus-visible:ring-2 focus-visible:ring-[#58A6FF] focus-visible:ring-offset-2 focus-visible:ring-offset-[#0D1117]
9
+ ${active
10
+ ? 'bg-[#1F6FEB] text-[#F0F6FC] shadow-[#1F6FEB]/30'
11
+ : 'bg-[#21262D] text-[#E6EDF3]/80 hover:bg-[#30363D] hover:text-[#E6EDF3] shadow-black/40'}
12
+ `, whileHover: { scale: 1.08 }, whileTap: { scale: 0.95 }, "aria-label": active ? 'Закрыть инспектор элементов' : 'Открыть инспектор элементов', title: active ? 'Закрыть инспектор (Esc)' : 'Инспектор элементов', children: [active ? (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M18 6 6 18" }), _jsx("path", { d: "m6 6 12 12" })] })) : (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "m19 19-14-14" }), _jsx("path", { d: "m5 5 14 0" }), _jsx("path", { d: "m5 5 0 14" })] })), _jsx("span", { className: "absolute -top-1 -right-1 min-w-[16px] h-4 px-1 rounded-full bg-[#58A6FF] text-[#0D1117] text-[9px] font-bold flex items-center justify-center leading-none select-none", children: "3.5.1" })] }), _jsx(AnimatePresence, { children: showTooltip && (_jsx(motion.div, { initial: { opacity: 0, y: 8 }, animate: { opacity: 1, y: 0 }, exit: { opacity: 0, y: 8 }, className: "fixed bottom-20 right-6 z-[90] bg-[#21262D] text-[#E6EDF3] text-xs px-3 py-1.5 rounded-lg shadow-lg border border-[#30363D] whitespace-nowrap pointer-events-none", children: "\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435 \u043D\u0430 \u044D\u043B\u0435\u043C\u0435\u043D\u0442 \u0434\u043B\u044F \u0438\u043D\u0441\u043F\u0435\u043A\u0446\u0438\u0438" })) })] }));
13
+ }
14
+ //# sourceMappingURL=inspector-fab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector-fab.js","sourceRoot":"","sources":["../inspector-fab.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,UAAU,YAAY,CAAC,EAC3B,MAAM,EACN,QAAQ,EACR,WAAW,GAKZ;IACC,OAAO,CACL,8BACE,MAAC,MAAM,CAAC,MAAM,yBAEZ,OAAO,EAAE,QAAQ,EACjB,SAAS,EAAE;;;;;YAKP,MAAM;oBACN,CAAC,CAAC,iDAAiD;oBACnD,CAAC,CAAC,wFACJ;SACD,EACD,UAAU,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAC3B,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,gBACb,MAAM,CAAC,CAAC,CAAC,6BAA6B,CAAC,CAAC,CAAC,6BAA6B,EAClF,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,qBAAqB,aAEhE,MAAM,CAAC,CAAC,CAAC,CACR,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,aAC5I,eAAM,CAAC,EAAC,YAAY,GAAG,EACvB,eAAM,CAAC,EAAC,YAAY,GAAG,IACnB,CACP,CAAC,CAAC,CAAC,CACF,eAAK,KAAK,EAAC,IAAI,EAAC,MAAM,EAAC,IAAI,EAAC,OAAO,EAAC,WAAW,EAAC,IAAI,EAAC,MAAM,EAAC,MAAM,EAAC,cAAc,EAAC,WAAW,EAAC,GAAG,EAAC,aAAa,EAAC,OAAO,EAAC,cAAc,EAAC,OAAO,aAC5I,eAAM,CAAC,EAAC,cAAc,GAAG,EACzB,eAAM,CAAC,EAAC,WAAW,GAAG,EACtB,eAAM,CAAC,EAAC,WAAW,GAAG,IAClB,CACP,EACD,eAAM,SAAS,EAAC,wKAAwK,sBAEjL,IACO,EAEhB,KAAC,eAAe,cACb,WAAW,IAAI,CACd,KAAC,MAAM,CAAC,GAAG,IACT,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAC7B,OAAO,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAC7B,IAAI,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAC1B,SAAS,EAAC,mKAAmK,mMAGlK,CACd,GACe,IACjB,CACJ,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ElementInfo, SnippetData } from './types';
2
+ export declare function InspectorPanel({ elementInfo, panelPos, isDragging, onDragStart, onClose, snippet, snippetLoading, }: {
3
+ elementInfo: ElementInfo;
4
+ panelPos: {
5
+ x: number;
6
+ y: number;
7
+ };
8
+ isDragging: boolean;
9
+ onDragStart: (e: React.MouseEvent) => void;
10
+ onClose: () => void;
11
+ snippet: SnippetData | null;
12
+ snippetLoading: boolean;
13
+ }): import("react").JSX.Element;
14
+ //# sourceMappingURL=inspector-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector-panel.d.ts","sourceRoot":"","sources":["../inspector-panel.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAYxD,wBAAgB,cAAc,CAAC,EAC7B,WAAW,EACX,QAAQ,EACR,UAAU,EACV,WAAW,EACX,OAAO,EACP,OAAO,EACP,cAAc,GACf,EAAE;IACD,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACnC,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,KAAK,IAAI,CAAC;IAC3C,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;CACzB,+BA+JA"}
@@ -0,0 +1,36 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useState } from 'react';
3
+ import { motion, AnimatePresence } from 'framer-motion';
4
+ import { SourceSection, ClassesSection, TextSection, CssPathSection, HtmlSection, StylesSection, SnippetSection, } from './panel-sections';
5
+ import { BoxModelSection } from './box-model-section';
6
+ export function InspectorPanel({ elementInfo, panelPos, isDragging, onDragStart, onClose, snippet, snippetLoading, }) {
7
+ const [expanded, setExpanded] = useState(false);
8
+ return (_jsxs(motion.div, { ref: (node) => {
9
+ if (node) {
10
+ node.setAttribute('data-se-panel', '');
11
+ }
12
+ }, initial: { opacity: 0, scale: 0.95, y: 4 }, animate: { opacity: 1, scale: 1, y: 0 }, exit: { opacity: 0, scale: 0.95, y: 4 }, transition: { duration: 0.15 }, className: `fixed z-[95] bg-[#161B22] rounded-lg shadow-[0_8px_32px_rgba(0,0,0,0.4)] border border-[#30363D] overflow-hidden${isDragging ? '' : ' cursor-default'}`, style: {
13
+ top: panelPos.y,
14
+ left: panelPos.x,
15
+ width: 400,
16
+ maxHeight: 'calc(100vh - 32px)',
17
+ userSelect: isDragging ? 'none' : 'auto',
18
+ }, onClick: (e) => e.stopPropagation(), children: [_jsxs("div", { onMouseDown: onDragStart, className: `flex items-center justify-between px-4 py-2.5 bg-[#1C2128] border-b border-[#30363D] select-none${isDragging ? ' cursor-grabbing' : ' cursor-grab'}`, children: [_jsxs("div", { className: "flex items-center gap-2 min-w-0", children: [_jsx("span", { className: "inline-flex items-center justify-center w-5 h-5 rounded bg-[#1F6FEB] text-[#F0F6FC] text-[10px] font-bold flex-shrink-0", children: "</>" }), _jsxs("span", { className: "text-sm font-semibold text-[#E6EDF3] truncate", children: [elementInfo.tag, elementInfo.id && _jsxs("span", { className: "text-[#58A6FF]", children: ["#", elementInfo.id] })] }), elementInfo.source && (_jsxs("span", { className: "text-[11px] text-[#6E7681] font-mono truncate hidden sm:inline", children: [elementInfo.source.file.split('/').pop(), ":", elementInfo.source.line] }))] }), _jsxs("div", { className: "flex items-center gap-0.5 flex-shrink-0", children: [elementInfo.source && (_jsx("button", { onClick: () => {
19
+ const lines = [
20
+ elementInfo.source ? `File: ${elementInfo.source.file}:${elementInfo.source.line}` : '',
21
+ `Tag: <${elementInfo.tag}${elementInfo.id ? `#${elementInfo.id}` : ''}>`,
22
+ elementInfo.text ? `Text: "${elementInfo.text}"` : '',
23
+ ].filter(Boolean).join('\n');
24
+ navigator.clipboard.writeText(lines).catch(() => { });
25
+ }, className: "p-1.5 rounded hover:bg-[#21262D] text-[#8B949E] hover:text-[#58A6FF] transition-colors cursor-pointer", "aria-label": "Copy task context", title: "Copy task context (file, tag, text)", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z" }), _jsx("polyline", { points: "14 2 14 8 20 8" }), _jsx("line", { x1: "16", y1: "13", x2: "8", y2: "13" }), _jsx("line", { x1: "16", y1: "17", x2: "8", y2: "17" }), _jsx("line", { x1: "10", y1: "9", x2: "8", y2: "9" })] }) })), elementInfo.source && (_jsx("button", { onClick: () => navigator.clipboard
26
+ .writeText(`${elementInfo.source.file}:${elementInfo.source.line}`)
27
+ .catch(() => { }), className: "p-1.5 rounded hover:bg-[#21262D] text-[#8B949E] hover:text-[#58A6FF] transition-colors cursor-pointer", "aria-label": "Copy file path", title: "Copy file:line", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" }), _jsx("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" })] }) })), _jsx("button", { onClick: () => {
28
+ const parts = [
29
+ `<${elementInfo.tag}${elementInfo.id ? `#${elementInfo.id}` : ''}>`,
30
+ elementInfo.classes ? elementInfo.classes : '',
31
+ elementInfo.text ? `"${elementInfo.text}"` : '',
32
+ ].filter(Boolean);
33
+ navigator.clipboard.writeText(parts.join('\n')).catch(() => { });
34
+ }, className: "p-1.5 rounded hover:bg-[#21262D] text-[#8B949E] hover:text-[#58A6FF] transition-colors cursor-pointer", "aria-label": "\u0421\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0438\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0438\u044E \u043E\u0431 \u044D\u043B\u0435\u043C\u0435\u043D\u0442\u0435", title: "\u041A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C (\u0442\u0435\u0433 + \u043A\u043B\u0430\u0441\u0441\u044B + \u0442\u0435\u043A\u0441\u0442)", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("rect", { width: "14", height: "14", x: "8", y: "8", rx: "2", ry: "2" }), _jsx("path", { d: "M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2" })] }) }), _jsx("div", { className: "w-px h-4 bg-[#30363D] mx-0.5" }), _jsx("button", { onClick: () => setExpanded((v) => !v), className: "p-1.5 rounded hover:bg-[#21262D] text-[#8B949E] hover:text-[#E6EDF3] transition-colors cursor-pointer", "aria-label": expanded ? 'Свернуть детали' : 'Развернуть детали', title: expanded ? 'Свернуть' : 'Детали', children: _jsx("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", style: { transform: expanded ? 'rotate(180deg)' : 'rotate(0deg)', transition: 'transform 0.2s' }, children: _jsx("polyline", { points: "6 9 12 15 18 9" }) }) }), _jsx("button", { onClick: onClose, className: "p-1.5 rounded hover:bg-[#DA3633]/20 text-[#8B949E] hover:text-[#F85149] transition-colors cursor-pointer", "aria-label": "\u0417\u0430\u043A\u0440\u044B\u0442\u044C \u043F\u0430\u043D\u0435\u043B\u044C", children: _jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", children: [_jsx("path", { d: "M18 6 6 18" }), _jsx("path", { d: "m6 6 12 12" })] }) })] })] }), _jsx(AnimatePresence, { initial: false, children: expanded && (_jsx(motion.div, { initial: { height: 0, opacity: 0 }, animate: { height: 'auto', opacity: 1 }, exit: { height: 0, opacity: 0 }, transition: { duration: 0.2, ease: 'easeInOut' }, className: "overflow-hidden", children: _jsxs("div", { className: "overflow-y-auto custom-scrollbar", style: { maxHeight: 'calc(100vh - 120px)' }, children: [elementInfo.source && _jsx(SourceSection, { source: elementInfo.source }), elementInfo.classes && _jsx(ClassesSection, { classes: elementInfo.classes }), elementInfo.text && _jsx(TextSection, { text: elementInfo.text }), elementInfo.cssPath && _jsx(CssPathSection, { cssPath: elementInfo.cssPath }), _jsx(HtmlSection, { outerHTML: elementInfo.outerHTML }), _jsx(StylesSection, { styles: elementInfo.computedStyles }), elementInfo.boxModel && _jsx(BoxModelSection, { boxModel: elementInfo.boxModel }), elementInfo.source && (_jsx(SnippetSection, { source: elementInfo.source, snippet: snippet, snippetLoading: snippetLoading }))] }) })) })] }));
35
+ }
36
+ //# sourceMappingURL=inspector-panel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspector-panel.js","sourceRoot":"","sources":["../inspector-panel.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ import type { ElementInfo, SnippetData } from './types';
2
+ export declare function SourceSection({ source }: {
3
+ source: NonNullable<ElementInfo['source']>;
4
+ }): import("react").JSX.Element;
5
+ export declare function ClassesSection({ classes }: {
6
+ classes: string;
7
+ }): import("react").JSX.Element;
8
+ export declare function TextSection({ text }: {
9
+ text: string;
10
+ }): import("react").JSX.Element;
11
+ export declare function CssPathSection({ cssPath }: {
12
+ cssPath: string;
13
+ }): import("react").JSX.Element;
14
+ export declare function HtmlSection({ outerHTML }: {
15
+ outerHTML: string;
16
+ }): import("react").JSX.Element;
17
+ export declare function StylesSection({ styles }: {
18
+ styles: Record<string, string>;
19
+ }): import("react").JSX.Element;
20
+ export declare function SnippetSection({ source, snippet, snippetLoading, }: {
21
+ source: NonNullable<ElementInfo['source']>;
22
+ snippet: SnippetData | null;
23
+ snippetLoading: boolean;
24
+ }): import("react").JSX.Element;
25
+ //# sourceMappingURL=panel-sections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-sections.d.ts","sourceRoot":"","sources":["../panel-sections.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAiBxD,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAA;CAAE,+BAqBvF;AAED,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,+BAiB9D;AAED,wBAAgB,WAAW,CAAC,EAAE,IAAI,EAAE,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,+BAiBrD;AAED,wBAAgB,cAAc,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,+BAgB9D;AAED,wBAAgB,WAAW,CAAC,EAAE,SAAS,EAAE,EAAE;IAAE,SAAS,EAAE,MAAM,CAAA;CAAE,+BAgB/D;AAED,wBAAgB,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,+BA6B3E;AAED,wBAAgB,cAAc,CAAC,EAC7B,MAAM,EACN,OAAO,EACP,cAAc,GACf,EAAE;IACD,MAAM,EAAE,WAAW,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC3C,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IAC5B,cAAc,EAAE,OAAO,CAAC;CACzB,+BAqDA"}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Prism as SyntaxHighlighter } from 'react-syntax-highlighter';
3
+ import { vscDarkPlus } from 'react-syntax-highlighter/dist/esm/styles/prism';
4
+ function CopyButton({ text, label }) {
5
+ const copy = () => navigator.clipboard.writeText(text).catch(() => { });
6
+ return (_jsx("button", { onClick: copy, className: "text-[10px] text-[#58A6FF] hover:text-[#79C0FF] transition-colors cursor-pointer", title: label ?? 'Копировать', children: label ?? 'копировать' }));
7
+ }
8
+ export function SourceSection({ source }) {
9
+ const copy = () => navigator.clipboard.writeText(`${source.file}:${source.line}`).catch(() => { });
10
+ return (_jsxs("div", { className: "px-4 py-2.5 bg-[#0D1117] border-b border-[#30363D]", children: [_jsxs("div", { className: "flex items-center justify-between mb-1", children: [_jsx("div", { className: "text-[11px] font-semibold text-[#58A6FF] uppercase tracking-wider", children: "\u0418\u0441\u0442\u043E\u0447\u043D\u0438\u043A" }), _jsx(CopyButton, { text: `${source.file}:${source.line}` })] }), _jsxs("div", { className: "font-mono text-xs text-[#E6EDF3] cursor-pointer hover:text-[#58A6FF] transition-colors break-all", onClick: copy, title: "\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C", children: [source.file, _jsxs("span", { className: "text-[#58A6FF]", children: [":", source.line] })] })] }));
11
+ }
12
+ export function ClassesSection({ classes }) {
13
+ const copy = () => navigator.clipboard.writeText(classes).catch(() => { });
14
+ return (_jsxs("div", { className: "px-4 py-2.5 border-b border-[#30363D]", children: [_jsxs("div", { className: "flex items-center justify-between mb-1", children: [_jsx("div", { className: "text-[11px] font-semibold text-[#8B949E] uppercase tracking-wider", children: "Classes" }), _jsx(CopyButton, { text: classes })] }), _jsx("div", { className: "font-mono text-xs text-[#E6EDF3] bg-[#0D1117] rounded px-2.5 py-1.5 break-all cursor-pointer hover:bg-[#161B22] transition-colors border border-[#30363D]", onClick: copy, title: "\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C", children: classes.length > 300 ? classes.slice(0, 300) + '...' : classes })] }));
15
+ }
16
+ export function TextSection({ text }) {
17
+ const copy = () => navigator.clipboard.writeText(text).catch(() => { });
18
+ return (_jsxs("div", { className: "px-4 py-2.5 border-b border-[#30363D]", children: [_jsxs("div", { className: "flex items-center justify-between mb-1", children: [_jsx("div", { className: "text-[11px] font-semibold text-[#8B949E] uppercase tracking-wider", children: "Text" }), _jsx(CopyButton, { text: text })] }), _jsx("div", { className: "text-xs text-[#E6EDF3] bg-[#0D1117] rounded px-2.5 py-1.5 cursor-pointer hover:bg-[#161B22] transition-colors border border-[#30363D]", onClick: copy, title: "\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C \u0442\u0435\u043A\u0441\u0442", children: text })] }));
19
+ }
20
+ export function CssPathSection({ cssPath }) {
21
+ return (_jsxs("div", { className: "px-4 py-2.5 border-b border-[#30363D]", children: [_jsxs("div", { className: "flex items-center justify-between mb-1", children: [_jsx("div", { className: "text-[11px] font-semibold text-[#8B949E] uppercase tracking-wider", children: "CSS Path" }), _jsx(CopyButton, { text: cssPath })] }), _jsx("div", { className: "font-mono text-[11px] text-[#E6EDF3] bg-[#0D1117] rounded px-2.5 py-1.5 break-all cursor-pointer hover:bg-[#161B22] transition-colors border border-[#30363D]", onClick: () => navigator.clipboard.writeText(cssPath).catch(() => { }), title: "\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C CSS-\u043F\u0443\u0442\u044C", children: cssPath })] }));
22
+ }
23
+ export function HtmlSection({ outerHTML }) {
24
+ return (_jsxs("div", { className: "px-4 py-2.5 border-b border-[#30363D]", children: [_jsxs("div", { className: "flex items-center justify-between mb-1", children: [_jsx("div", { className: "text-[11px] font-semibold text-[#8B949E] uppercase tracking-wider", children: "HTML" }), _jsx(CopyButton, { text: outerHTML })] }), _jsx("pre", { className: "font-mono text-[11px] text-[#E6EDF3] bg-[#0D1117] rounded px-2.5 py-1.5 overflow-x-auto whitespace-pre-wrap break-all cursor-pointer hover:bg-[#161B22] transition-colors max-h-40 border border-[#30363D]", onClick: () => navigator.clipboard.writeText(outerHTML).catch(() => { }), title: "\u041A\u043B\u0438\u043A\u043D\u0438\u0442\u0435, \u0447\u0442\u043E\u0431\u044B \u0441\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C HTML", children: outerHTML })] }));
25
+ }
26
+ export function StylesSection({ styles }) {
27
+ return (_jsxs("div", { className: "px-4 py-2.5 border-b border-[#30363D]", children: [_jsx("div", { className: "text-[11px] font-semibold text-[#8B949E] uppercase tracking-wider mb-1.5", children: "Styles" }), _jsxs("div", { className: "grid grid-cols-2 gap-1.5", children: [_jsxs("div", { className: "bg-[#0D1117] rounded px-2 py-1 text-[11px] font-mono text-[#E6EDF3] border border-[#30363D]", children: [styles.width, " x ", styles.height] }), _jsx("div", { className: "bg-[#0D1117] rounded px-2 py-1 text-[11px] font-mono text-[#E6EDF3] border border-[#30363D]", children: styles.fontSize }), _jsxs("div", { className: "bg-[#0D1117] rounded px-2 py-1 text-[11px] font-mono text-[#E6EDF3] border border-[#30363D]", children: ["weight: ", styles.fontWeight] }), _jsxs("div", { className: "bg-[#0D1117] rounded px-2 py-1 text-[11px] font-mono text-[#E6EDF3] border border-[#30363D]", children: ["lh: ", styles.lineHeight] })] }), _jsxs("div", { className: "mt-1.5 flex items-center gap-1.5 bg-[#0D1117] rounded px-2 py-1 text-[11px] font-mono text-[#E6EDF3] border border-[#30363D]", children: [_jsx("span", { className: "inline-block w-3 h-3 rounded-sm border border-[#30363D] flex-shrink-0", style: { backgroundColor: styles.color } }), styles.color] })] }));
28
+ }
29
+ export function SnippetSection({ source, snippet, snippetLoading, }) {
30
+ const ext = source.file.split('.').pop() || '';
31
+ const lang = ['tsx', 'jsx'].includes(ext) ? 'tsx' : 'typescript';
32
+ return (_jsxs("div", { className: "px-4 py-2.5", children: [_jsxs("div", { className: "text-[11px] font-semibold text-[#8B949E] uppercase tracking-wider mb-1.5", children: ["\u041A\u043E\u0434 (", source.file.split('/').pop(), ")"] }), snippetLoading && _jsx("div", { className: "text-xs text-[#6E7681] py-2", children: "\u0417\u0430\u0433\u0440\u0443\u0437\u043A\u0430..." }), snippet && (_jsxs("div", { className: "bg-[#0D1117] rounded-md overflow-hidden border border-[#30363D]", children: [_jsxs("div", { className: "flex items-center justify-between px-3 py-1.5 bg-[#161B22] border-b border-[#30363D]", children: [_jsxs("span", { className: "text-[#6E7681] text-[10px] font-mono", children: [snippet.snippet.startLine, "\u2013", snippet.snippet.startLine + snippet.snippet.lines.length - 1, " \u0438\u0437 ", snippet.totalLines] }), _jsx(CopyButton, { text: snippet.snippet.lines.join('\n'), label: "\u043A\u043E\u043F\u0438\u0440\u043E\u0432\u0430\u0442\u044C" })] }), _jsx(SyntaxHighlighter, { language: lang, style: vscDarkPlus, showLineNumbers: true, startingLineNumber: snippet.snippet.startLine, lineProps: (lineNumber) => ({
33
+ style: lineNumber === snippet.snippet.highlightLine
34
+ ? { background: 'rgba(56, 139, 253, 0.15)', display: 'block' }
35
+ : { display: 'block' },
36
+ }), customStyle: {
37
+ background: 'transparent',
38
+ padding: '8px',
39
+ margin: 0,
40
+ fontSize: '12px',
41
+ lineHeight: '1.6',
42
+ }, lineNumberStyle: {
43
+ color: '#484F58',
44
+ minWidth: '2.5em',
45
+ paddingRight: '1em',
46
+ }, codeTagProps: { style: { fontFamily: 'ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace' } }, children: snippet.snippet.lines.join('\n') })] })), !snippetLoading && !snippet && (_jsx("div", { className: "text-xs text-[#6E7681] py-2", children: "\u041D\u0435 \u0443\u0434\u0430\u043B\u043E\u0441\u044C \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C \u0438\u0441\u0445\u043E\u0434\u043D\u044B\u0439 \u043A\u043E\u0434 (\u0442\u043E\u043B\u044C\u043A\u043E \u0432 dev-\u0440\u0435\u0436\u0438\u043C\u0435)" }))] }));
47
+ }
48
+ //# sourceMappingURL=panel-sections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"panel-sections.js","sourceRoot":"","sources":["../panel-sections.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * data-src Injector Plugin for Turbopack (Next.js 15.3+)
3
+ *
4
+ * Автоматически добавляет data-src="file:line" атрибут на JSX-элементы.
5
+ *
6
+ * Подключение в next.config.ts:
7
+ * import { dataSrcPlugin } from './src/components/inspector/plugins/data-src-plugin';
8
+ *
9
+ * const nextConfig = {
10
+ * experimental: {
11
+ * turbo: {
12
+ * plugins: [dataSrcPlugin()],
13
+ * },
14
+ * },
15
+ * };
16
+ *
17
+ * Пропускает: node_modules, inspector/, строки с комментариями и декларациями.
18
+ * Только dev-режим (Next.js не вызывает turbo plugins в production build).
19
+ *
20
+ * ⚠️ API экспериментальное и может измениться в следующих версиях Next.js.
21
+ * При проблемах — добавляйте data-src вручную.
22
+ */
23
+ type TransformResult = {
24
+ code: string;
25
+ };
26
+ export declare const dataSrcPlugin: () => {
27
+ name: string;
28
+ setup(api: {
29
+ transform: (opts: {
30
+ filter: RegExp;
31
+ }, handler: (args: {
32
+ code: string;
33
+ resource: string;
34
+ }) => TransformResult) => void;
35
+ }): void;
36
+ };
37
+ export {};
38
+ //# sourceMappingURL=data-src-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-src-plugin.d.ts","sourceRoot":"","sources":["../../plugins/data-src-plugin.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,KAAK,eAAe,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAExC,eAAO,MAAM,aAAa;;eAGb;QACT,SAAS,EAAE,CACT,IAAI,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,EACxB,OAAO,EAAE,CAAC,IAAI,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAA;SAAE,KAAK,eAAe,KACnE,IAAI,CAAC;KACX;CAWD,CAAC"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * data-src Injector Plugin for Turbopack (Next.js 15.3+)
3
+ *
4
+ * Автоматически добавляет data-src="file:line" атрибут на JSX-элементы.
5
+ *
6
+ * Подключение в next.config.ts:
7
+ * import { dataSrcPlugin } from './src/components/inspector/plugins/data-src-plugin';
8
+ *
9
+ * const nextConfig = {
10
+ * experimental: {
11
+ * turbo: {
12
+ * plugins: [dataSrcPlugin()],
13
+ * },
14
+ * },
15
+ * };
16
+ *
17
+ * Пропускает: node_modules, inspector/, строки с комментариями и декларациями.
18
+ * Только dev-режим (Next.js не вызывает turbo plugins в production build).
19
+ *
20
+ * ⚠️ API экспериментальное и может измениться в следующих версиях Next.js.
21
+ * При проблемах — добавляйте data-src вручную.
22
+ */
23
+ export const dataSrcPlugin = () => ({
24
+ name: 'data-src-injector',
25
+ setup(api) {
26
+ api.transform({ filter: /\.(tsx|jsx)$/ }, ({ code, resource }) => {
27
+ if (resource.includes('node_modules') ||
28
+ resource.includes('/inspector/')) {
29
+ return { code };
30
+ }
31
+ return injectDataSrc(code, resource);
32
+ });
33
+ },
34
+ });
35
+ function injectDataSrc(code, resource) {
36
+ const lines = code.split('\n');
37
+ const relativePath = toRelativePath(resource);
38
+ const result = [];
39
+ for (let i = 0; i < lines.length; i++) {
40
+ const line = lines[i];
41
+ const lineNum = i + 1;
42
+ if (isJsxOpeningTag(line) && !hasDataSrc(line)) {
43
+ result.push(injectOnLine(line, relativePath, lineNum));
44
+ }
45
+ else {
46
+ result.push(line);
47
+ }
48
+ }
49
+ return { code: result.join('\n') };
50
+ }
51
+ function injectOnLine(line, path, lineNum) {
52
+ const attr = ` data-src="${path}:${lineNum}"`;
53
+ return line.replace(/(<[A-Za-z][A-Za-z0-9-]*)(\s|>)/, (_match, tag, after) => {
54
+ if (after === '>')
55
+ return `${tag}${attr}>`;
56
+ return `${tag}${attr} `;
57
+ });
58
+ }
59
+ function isJsxOpeningTag(line) {
60
+ const t = line.trimStart();
61
+ if (t.startsWith('//') ||
62
+ t.startsWith('*') ||
63
+ t.startsWith('/*') ||
64
+ t.startsWith('import ') ||
65
+ t.startsWith('export ') ||
66
+ t.startsWith('type ') ||
67
+ t.startsWith('interface ') ||
68
+ t.startsWith('function ') ||
69
+ t.startsWith('const ') ||
70
+ t.startsWith('let ') ||
71
+ t.startsWith('var ') ||
72
+ t.startsWith('{') ||
73
+ t.startsWith('}') ||
74
+ t.startsWith('return ') ||
75
+ t.startsWith('if ') ||
76
+ t.startsWith('else')) {
77
+ return false;
78
+ }
79
+ return /<[A-Za-z][A-Za-z0-9-]*[\s>]/.test(t);
80
+ }
81
+ function hasDataSrc(line) {
82
+ return /data-src\s*=/.test(line);
83
+ }
84
+ function toRelativePath(resource) {
85
+ const idx = resource.indexOf('/src/');
86
+ if (idx !== -1)
87
+ return resource.slice(idx + 1);
88
+ return resource.split('/').pop() || resource;
89
+ }
90
+ //# sourceMappingURL=data-src-plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data-src-plugin.js","sourceRoot":"","sources":["../../plugins/data-src-plugin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function SelectElementFab(): import("react").JSX.Element | null;
2
+ //# sourceMappingURL=select-element-fab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"select-element-fab.d.ts","sourceRoot":"","sources":["../select-element-fab.tsx"],"names":[],"mappings":"AAgBA,wBAAgB,gBAAgB,uCA0C/B"}