angular-grab 0.1.0 → 0.1.2

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 (132) hide show
  1. package/README.md +215 -0
  2. package/examples/angular-19-app/.editorconfig +17 -0
  3. package/examples/angular-19-app/.vscode/extensions.json +4 -0
  4. package/examples/angular-19-app/.vscode/launch.json +20 -0
  5. package/examples/angular-19-app/.vscode/mcp.json +9 -0
  6. package/examples/angular-19-app/.vscode/tasks.json +42 -0
  7. package/examples/angular-19-app/README.md +59 -0
  8. package/examples/angular-19-app/angular.json +74 -0
  9. package/examples/angular-19-app/package.json +44 -0
  10. package/examples/angular-19-app/public/favicon.ico +0 -0
  11. package/examples/angular-19-app/src/app/app.config.ts +13 -0
  12. package/examples/angular-19-app/src/app/app.css +37 -0
  13. package/examples/angular-19-app/src/app/app.html +25 -0
  14. package/examples/angular-19-app/src/app/app.routes.ts +3 -0
  15. package/examples/angular-19-app/src/app/app.spec.ts +23 -0
  16. package/examples/angular-19-app/src/app/app.ts +12 -0
  17. package/examples/angular-19-app/src/app/button/button.component.ts +25 -0
  18. package/examples/angular-19-app/src/app/card/card.component.ts +33 -0
  19. package/examples/angular-19-app/src/app/header/header.component.ts +31 -0
  20. package/examples/angular-19-app/src/app/popover/popover.component.ts +133 -0
  21. package/examples/angular-19-app/src/index.html +13 -0
  22. package/examples/angular-19-app/src/main.ts +6 -0
  23. package/examples/angular-19-app/src/styles.css +1 -0
  24. package/examples/angular-19-app/tsconfig.app.json +15 -0
  25. package/examples/angular-19-app/tsconfig.json +33 -0
  26. package/examples/angular-19-app/tsconfig.spec.json +15 -0
  27. package/package.json +14 -111
  28. package/packages/angular-grab/package.json +96 -0
  29. package/packages/angular-grab/src/angular/__tests__/context-builder.test.ts +216 -0
  30. package/packages/angular-grab/src/angular/angular-grab.service.ts +62 -0
  31. package/packages/angular-grab/src/angular/index.ts +13 -0
  32. package/packages/angular-grab/src/angular/provide-angular-grab.ts +22 -0
  33. package/packages/angular-grab/src/angular/resolvers/component-resolver.ts +71 -0
  34. package/packages/angular-grab/src/angular/resolvers/context-builder.ts +86 -0
  35. package/packages/angular-grab/src/angular/resolvers/ng-utils.ts +14 -0
  36. package/packages/angular-grab/src/angular/resolvers/source-resolver.ts +61 -0
  37. package/packages/angular-grab/src/builder/__tests__/builder.test.ts +72 -0
  38. package/packages/angular-grab/src/builder/builders/application/index.ts +13 -0
  39. package/packages/angular-grab/src/builder/builders/dev-server/index.ts +9 -0
  40. package/packages/angular-grab/src/builder/index.ts +3 -0
  41. package/packages/angular-grab/src/cli/__tests__/cli.test.ts +239 -0
  42. package/packages/angular-grab/src/cli/commands/init.ts +106 -0
  43. package/packages/angular-grab/src/cli/index.ts +15 -0
  44. package/packages/angular-grab/src/cli/utils/detect-project.ts +78 -0
  45. package/packages/angular-grab/src/cli/utils/modify-angular-json.ts +42 -0
  46. package/packages/angular-grab/src/cli/utils/modify-app-config.ts +42 -0
  47. package/packages/angular-grab/src/core/__tests__/generate-snippet.test.ts +149 -0
  48. package/packages/angular-grab/src/core/__tests__/plugin-registry.test.ts +286 -0
  49. package/packages/angular-grab/src/core/__tests__/store.test.ts +118 -0
  50. package/packages/angular-grab/src/core/__tests__/utils.test.ts +85 -0
  51. package/packages/angular-grab/src/core/clipboard/copy.ts +104 -0
  52. package/packages/angular-grab/src/core/clipboard/generate-snippet.ts +38 -0
  53. package/packages/angular-grab/src/core/constants.ts +10 -0
  54. package/packages/angular-grab/src/core/grab.ts +596 -0
  55. package/packages/angular-grab/src/core/index.global.ts +13 -0
  56. package/packages/angular-grab/src/core/index.ts +19 -0
  57. package/packages/angular-grab/src/core/keyboard/keyboard-handler.ts +163 -0
  58. package/packages/angular-grab/src/core/overlay/crosshair.ts +107 -0
  59. package/packages/angular-grab/src/core/overlay/freeze-overlay.ts +239 -0
  60. package/packages/angular-grab/src/core/overlay/overlay-renderer.ts +180 -0
  61. package/packages/angular-grab/src/core/overlay/select-feedback.ts +108 -0
  62. package/packages/angular-grab/src/core/overlay/toast.ts +175 -0
  63. package/packages/angular-grab/src/core/picker/element-picker.ts +114 -0
  64. package/packages/angular-grab/src/core/plugins/plugin-registry.ts +83 -0
  65. package/packages/angular-grab/src/core/store.ts +52 -0
  66. package/packages/angular-grab/src/core/toolbar/actions-menu.ts +178 -0
  67. package/packages/angular-grab/src/core/toolbar/comment-popover.ts +235 -0
  68. package/packages/angular-grab/src/core/toolbar/copy-actions.ts +98 -0
  69. package/packages/angular-grab/src/core/toolbar/history-popover.ts +245 -0
  70. package/packages/angular-grab/src/core/toolbar/theme-manager.ts +188 -0
  71. package/packages/angular-grab/src/core/toolbar/toolbar-icons.ts +29 -0
  72. package/packages/angular-grab/src/core/toolbar/toolbar-renderer.ts +239 -0
  73. package/packages/angular-grab/src/core/types.ts +139 -0
  74. package/packages/angular-grab/src/core/utils.ts +16 -0
  75. package/packages/angular-grab/src/esbuild-plugin/__tests__/transform.test.ts +174 -0
  76. package/packages/angular-grab/src/esbuild-plugin/index.ts +3 -0
  77. package/packages/angular-grab/src/esbuild-plugin/plugin.ts +29 -0
  78. package/packages/angular-grab/src/esbuild-plugin/scan.ts +105 -0
  79. package/packages/angular-grab/src/esbuild-plugin/transform.ts +152 -0
  80. package/packages/angular-grab/src/vite-plugin/__tests__/plugin.test.ts +84 -0
  81. package/packages/angular-grab/src/vite-plugin/index.ts +19 -0
  82. package/packages/angular-grab/src/webpack-plugin/__tests__/plugin.test.ts +72 -0
  83. package/packages/angular-grab/src/webpack-plugin/index.ts +2 -0
  84. package/packages/angular-grab/src/webpack-plugin/loader.ts +15 -0
  85. package/packages/angular-grab/src/webpack-plugin/plugin.ts +20 -0
  86. package/packages/angular-grab/tsconfig.json +15 -0
  87. package/packages/angular-grab/tsup.config.ts +119 -0
  88. package/pnpm-workspace.yaml +3 -0
  89. package/turbo.json +21 -0
  90. package/dist/angular/index.d.ts +0 -151
  91. package/dist/angular/index.js +0 -2811
  92. package/dist/angular/index.js.map +0 -1
  93. package/dist/builder/builders/application/index.js +0 -143
  94. package/dist/builder/builders/application/index.js.map +0 -1
  95. package/dist/builder/builders/dev-server/index.js +0 -139
  96. package/dist/builder/builders/dev-server/index.js.map +0 -1
  97. package/dist/builder/index.js +0 -2
  98. package/dist/builder/index.js.map +0 -1
  99. package/dist/builder/package.json +0 -1
  100. package/dist/cli/index.js +0 -223
  101. package/dist/cli/index.js.map +0 -1
  102. package/dist/core/index.cjs +0 -2589
  103. package/dist/core/index.cjs.map +0 -1
  104. package/dist/core/index.d.cts +0 -139
  105. package/dist/core/index.d.ts +0 -139
  106. package/dist/core/index.global.js +0 -542
  107. package/dist/core/index.js +0 -2560
  108. package/dist/core/index.js.map +0 -1
  109. package/dist/esbuild-plugin/index.cjs +0 -239
  110. package/dist/esbuild-plugin/index.cjs.map +0 -1
  111. package/dist/esbuild-plugin/index.d.cts +0 -26
  112. package/dist/esbuild-plugin/index.d.ts +0 -26
  113. package/dist/esbuild-plugin/index.js +0 -200
  114. package/dist/esbuild-plugin/index.js.map +0 -1
  115. package/dist/vite-plugin/index.d.ts +0 -7
  116. package/dist/vite-plugin/index.js +0 -128
  117. package/dist/vite-plugin/index.js.map +0 -1
  118. package/dist/webpack-plugin/index.cjs +0 -54
  119. package/dist/webpack-plugin/index.cjs.map +0 -1
  120. package/dist/webpack-plugin/index.d.cts +0 -5
  121. package/dist/webpack-plugin/index.d.ts +0 -5
  122. package/dist/webpack-plugin/index.js +0 -23
  123. package/dist/webpack-plugin/index.js.map +0 -1
  124. package/dist/webpack-plugin/loader.cjs +0 -155
  125. package/dist/webpack-plugin/loader.cjs.map +0 -1
  126. package/dist/webpack-plugin/loader.d.cts +0 -3
  127. package/dist/webpack-plugin/loader.d.ts +0 -3
  128. package/dist/webpack-plugin/loader.js +0 -122
  129. package/dist/webpack-plugin/loader.js.map +0 -1
  130. /package/{builders.json → packages/angular-grab/builders.json} +0 -0
  131. /package/{dist → packages/angular-grab/src}/builder/builders/application/schema.json +0 -0
  132. /package/{dist → packages/angular-grab/src}/builder/builders/dev-server/schema.json +0 -0
@@ -1,139 +0,0 @@
1
- type ThemeMode = 'dark' | 'light' | 'system';
2
- type PendingAction = {
3
- type: 'copy-element';
4
- } | {
5
- type: 'copy-styles';
6
- } | {
7
- type: 'copy-html';
8
- } | {
9
- type: 'comment';
10
- };
11
- /** Serializable subset of ElementContext — no live DOM reference. */
12
- interface HistoryContext {
13
- html: string;
14
- componentName: string | null;
15
- filePath: string | null;
16
- line: number | null;
17
- column: number | null;
18
- componentStack: ComponentStackEntry[];
19
- selector: string;
20
- cssClasses: string[];
21
- }
22
- interface HistoryEntry {
23
- id: string;
24
- context: HistoryContext;
25
- snippet: string;
26
- timestamp: number;
27
- }
28
- interface ToolbarState {
29
- visible: boolean;
30
- themeMode: ThemeMode;
31
- history: HistoryEntry[];
32
- pendingAction: PendingAction | null;
33
- }
34
- interface AngularGrabOptions {
35
- /** Keyboard shortcut to activate. Default: "Meta+C" (Mac) / "Ctrl+C" (Win) */
36
- activationKey: string;
37
- /** Whether activation requires hold or toggle. Default: 'hold' */
38
- activationMode: 'hold' | 'toggle';
39
- /** Milliseconds to hold before activating in hold mode. Default: 0 */
40
- keyHoldDuration: number;
41
- /** Max lines of HTML to include in copied context. Default: 20 */
42
- maxContextLines: number;
43
- /** Master on/off switch. Default: true */
44
- enabled: boolean;
45
- /** Allow activation while focused in input/textarea. Default: false */
46
- enableInInputs: boolean;
47
- /** Only activate in dev mode. Default: true */
48
- devOnly: boolean;
49
- /** Show the floating mini toolbar. Default: true */
50
- showToolbar: boolean;
51
- /** Theme mode for all UI. Default: 'dark' */
52
- themeMode: ThemeMode;
53
- }
54
- interface ComponentStackEntry {
55
- name: string;
56
- filePath: string | null;
57
- line: number | null;
58
- column: number | null;
59
- }
60
- interface ElementContext {
61
- element: Element;
62
- html: string;
63
- componentName: string | null;
64
- filePath: string | null;
65
- line: number | null;
66
- column: number | null;
67
- componentStack: ComponentStackEntry[];
68
- selector: string;
69
- cssClasses: string[];
70
- }
71
- interface PluginHooks {
72
- onActivate?: () => void;
73
- onDeactivate?: () => void;
74
- onElementHover?: (element: Element) => void;
75
- onElementSelect?: (context: ElementContext) => void;
76
- onBeforeCopy?: (context: ElementContext) => void;
77
- onCopySuccess?: (text: string, context: ElementContext, prompt?: string) => void;
78
- onCopyError?: (error: Error) => void;
79
- transformCopyContent?: (text: string, context: ElementContext) => string;
80
- }
81
- interface Theme {
82
- overlayBorderColor: string;
83
- overlayBgColor: string;
84
- labelBgColor: string;
85
- labelTextColor: string;
86
- toastBgColor: string;
87
- toastTextColor: string;
88
- toolbarBgColor: string;
89
- toolbarTextColor: string;
90
- toolbarAccentColor: string;
91
- popoverBgColor: string;
92
- popoverTextColor: string;
93
- popoverBorderColor: string;
94
- }
95
- interface Plugin {
96
- name: string;
97
- hooks?: PluginHooks;
98
- theme?: Partial<Theme>;
99
- options?: Partial<AngularGrabOptions>;
100
- setup?: (api: AngularGrabAPI) => PluginCleanup | void;
101
- }
102
- type PluginCleanup = () => void;
103
- type ComponentResolver = (element: Element) => {
104
- name: string | null;
105
- hostElement: Element | null;
106
- stack?: Array<{
107
- name: string;
108
- hostElement: Element | null;
109
- }>;
110
- } | null;
111
- type SourceResolver = (element: Element) => {
112
- filePath: string | null;
113
- line: number | null;
114
- column: number | null;
115
- } | null;
116
- interface AngularGrabAPI {
117
- activate(): void;
118
- deactivate(): void;
119
- toggle(): void;
120
- isActive(): boolean;
121
- setOptions(opts: Partial<AngularGrabOptions>): void;
122
- registerPlugin(plugin: Plugin): void;
123
- unregisterPlugin(name: string): void;
124
- setComponentResolver(resolver: ComponentResolver): void;
125
- setSourceResolver(resolver: SourceResolver): void;
126
- showToolbar(): void;
127
- hideToolbar(): void;
128
- setThemeMode(mode: ThemeMode): void;
129
- getHistory(): HistoryEntry[];
130
- clearHistory(): void;
131
- dispose(): void;
132
- }
133
-
134
- declare function init(options?: Partial<AngularGrabOptions>): AngularGrabAPI;
135
- declare function createGrabInstance(options?: Partial<AngularGrabOptions>): AngularGrabAPI;
136
-
137
- declare function filterAngularClasses(classList: DOMTokenList): string[];
138
-
139
- export { type AngularGrabAPI, type AngularGrabOptions, type ComponentResolver, type ComponentStackEntry, type ElementContext, type HistoryContext, type HistoryEntry, type PendingAction, type Plugin, type PluginCleanup, type PluginHooks, type SourceResolver, type Theme, type ThemeMode, type ToolbarState, createGrabInstance, filterAngularClasses, init };