@promakeai/inspector-hook 1.2.8 → 1.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,7 +1,7 @@
1
1
  import { RefObject } from "react";
2
- import type { InspectorCallbacks, InspectorLabels, InspectorTheme, UseInspectorReturn } from "@promakeai/inspector-types";
3
- export declare function useInspector(iframeRef: RefObject<HTMLIFrameElement>, callbacks?: InspectorCallbacks, labels?: InspectorLabels, theme?: InspectorTheme): UseInspectorReturn;
4
- export type { ComponentInfo, ElementPosition, SelectedElementData, UrlChangeData, PromptSubmittedData, TextUpdatedData, ImageUpdatedData, StyleChanges, StyleUpdatedData, ErrorData, HighlightOptions, ElementInfoData, ElementDeletedData, ElementDuplicatedData, ChangeType, ChangeHistoryEntry, InspectorChange, InspectorChangeType, InspectorChangesSavedData, InspectorLabels, InspectorTheme, ContentInputRequestData, InspectorCallbacks, UseInspectorReturn, InspectorTab, } from "@promakeai/inspector-types";
2
+ import type { InspectorCallbacks, InspectorLabels, InspectorTheme, InspectorInitialConfig, UseInspectorReturn } from "@promakeai/inspector-types";
3
+ export declare function useInspector(iframeRef: RefObject<HTMLIFrameElement>, callbacks?: InspectorCallbacks, labels?: InspectorLabels, theme?: InspectorTheme, initialConfig?: InspectorInitialConfig): UseInspectorReturn;
4
+ export type { ComponentInfo, ElementPosition, SelectedElementData, UrlChangeData, PromptSubmittedData, TextUpdatedData, ImageUpdatedData, StyleChanges, StyleUpdatedData, ErrorData, HighlightOptions, ElementInfoData, ElementDeletedData, ElementDuplicatedData, ChangeType, ChangeHistoryEntry, InspectorChange, InspectorChangeType, InspectorChangesSavedData, InspectorLabels, InspectorTheme, ContentInputRequestData, InspectorCallbacks, UseInspectorReturn, InspectorTab, InspectorInitialConfig, InspectorInitializedData, } from "@promakeai/inspector-types";
5
5
  export { updateJSXSource, deleteJSXElement, duplicateJSXElement, updateTextContent, applyChangesToJSXSource, } from "./utils/jsxUpdater.js";
6
6
  export type { UpdateJSXSourceOptions, UpdateJSXSourceResult, DeleteJSXElementOptions, DuplicateJSXElementOptions, UpdateTextContentOptions, ApplyChangesOptions, ApplyChangesResult, ChangeApplicationResult, } from "./utils/jsxUpdater.js";
7
7
  export { inspectorHookPlugin } from "./vite-plugin.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoC,SAAS,EAAE,MAAM,OAAO,CAAC;AACpE,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,kBAAkB,EAenB,MAAM,4BAA4B,CAAC;AAsHpC,wBAAgB,YAAY,CAC1B,SAAS,EAAE,SAAS,CAAC,iBAAiB,CAAC,EACvC,SAAS,CAAC,EAAE,kBAAkB,EAC9B,MAAM,CAAC,EAAE,eAAe,EACxB,KAAK,CAAC,EAAE,cAAc,GACrB,kBAAkB,CAqVpB;AAGD,YAAY,EACV,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,GACb,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4C,SAAS,EAAE,MAAM,OAAO,CAAC;AAC5E,OAAO,KAAK,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,sBAAsB,EAEtB,kBAAkB,EAenB,MAAM,4BAA4B,CAAC;AA0IpC,wBAAgB,YAAY,CAC1B,SAAS,EAAE,SAAS,CAAC,iBAAiB,CAAC,EACvC,SAAS,CAAC,EAAE,kBAAkB,EAC9B,MAAM,CAAC,EAAE,eAAe,EACxB,KAAK,CAAC,EAAE,cAAc,EACtB,aAAa,CAAC,EAAE,sBAAsB,GACrC,kBAAkB,CAydpB;AAGD,YAAY,EACV,aAAa,EACb,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,qBAAqB,EACrB,UAAU,EACV,kBAAkB,EAClB,eAAe,EACf,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,cAAc,EACd,uBAAuB,EACvB,kBAAkB,EAClB,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACtB,wBAAwB,GACzB,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,0BAA0B,EAC1B,wBAAwB,EACxB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,GACxB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,8 @@
1
- import { useEffect, useState, useCallback } from "react";
2
- export function useInspector(iframeRef, callbacks, labels, theme) {
1
+ import { useEffect, useState, useCallback, useRef } from "react";
2
+ export function useInspector(iframeRef, callbacks, labels, theme, initialConfig) {
3
3
  const [isInspecting, setIsInspecting] = useState(false);
4
+ const [isReady, setIsReady] = useState(false);
5
+ const initialConfigSentRef = useRef(false);
4
6
  /**
5
7
  * Send message to iframe
6
8
  */
@@ -155,6 +157,36 @@ export function useInspector(iframeRef, callbacks, labels, theme) {
155
157
  enabled: enabled,
156
158
  });
157
159
  }, [sendMessage]);
160
+ /**
161
+ * Allow/disallow editing elements with multiple instances
162
+ * When false and element has multiple instances, only prompt input is shown
163
+ */
164
+ const setAllowEditForMultipleInstances = useCallback((enabled) => {
165
+ sendMessage({
166
+ type: "SET_ALLOW_EDIT_FOR_MULTIPLE_INSTANCES",
167
+ enabled: enabled,
168
+ });
169
+ }, [sendMessage]);
170
+ /**
171
+ * Enable/disable ControlBox dragging
172
+ * When false, drag handle is hidden and dragging is disabled
173
+ */
174
+ const setIsDraggable = useCallback((enabled) => {
175
+ sendMessage({
176
+ type: "SET_IS_DRAGGABLE",
177
+ enabled: enabled,
178
+ });
179
+ }, [sendMessage]);
180
+ /**
181
+ * Enable/disable ControlBox resizing
182
+ * When false, resize cursors are hidden and resizing is disabled
183
+ */
184
+ const setIsResizable = useCallback((enabled) => {
185
+ sendMessage({
186
+ type: "SET_IS_RESIZABLE",
187
+ enabled: enabled,
188
+ });
189
+ }, [sendMessage]);
158
190
  /**
159
191
  * Listen for messages from iframe
160
192
  */
@@ -221,6 +253,14 @@ export function useInspector(iframeRef, callbacks, labels, theme) {
221
253
  case "INSPECTOR_GO_TO_CODE":
222
254
  callbacks?.onGoToCode?.(messageData.data);
223
255
  break;
256
+ case "INSPECTOR_UNMOUNTED":
257
+ setIsInspecting(false);
258
+ callbacks?.onInspectorUnmounted?.();
259
+ break;
260
+ case "INSPECTOR_INITIALIZED":
261
+ setIsReady(true);
262
+ callbacks?.onInspectorInitialized?.(messageData.data);
263
+ break;
224
264
  default:
225
265
  // Unknown message type - ignore
226
266
  break;
@@ -231,6 +271,78 @@ export function useInspector(iframeRef, callbacks, labels, theme) {
231
271
  window.removeEventListener("message", handleMessage);
232
272
  };
233
273
  }, [callbacks]);
274
+ /**
275
+ * Send initial config when inspector is ready
276
+ * Priority: method calls > initialConfig > inspector defaults
277
+ */
278
+ useEffect(() => {
279
+ if (isReady && initialConfig && !initialConfigSentRef.current) {
280
+ initialConfigSentRef.current = true;
281
+ // Send behavior settings
282
+ if (initialConfig.inspectOnRightClick !== undefined) {
283
+ sendMessage({
284
+ type: "SET_INSPECT_ON_RIGHT_CLICK",
285
+ enabled: initialConfig.inspectOnRightClick,
286
+ });
287
+ }
288
+ if (initialConfig.allowEditForMultipleInstances !== undefined) {
289
+ sendMessage({
290
+ type: "SET_ALLOW_EDIT_FOR_MULTIPLE_INSTANCES",
291
+ enabled: initialConfig.allowEditForMultipleInstances,
292
+ });
293
+ }
294
+ if (initialConfig.isDraggable !== undefined) {
295
+ sendMessage({
296
+ type: "SET_IS_DRAGGABLE",
297
+ enabled: initialConfig.isDraggable,
298
+ });
299
+ }
300
+ if (initialConfig.isResizable !== undefined) {
301
+ sendMessage({
302
+ type: "SET_IS_RESIZABLE",
303
+ enabled: initialConfig.isResizable,
304
+ });
305
+ }
306
+ // Send visibility settings
307
+ if (initialConfig.showContentInput !== undefined) {
308
+ sendMessage({
309
+ type: "SHOW_CONTENT_INPUT",
310
+ show: initialConfig.showContentInput,
311
+ });
312
+ }
313
+ if (initialConfig.showImageInput !== undefined) {
314
+ sendMessage({
315
+ type: "SHOW_IMAGE_INPUT",
316
+ show: initialConfig.showImageInput,
317
+ });
318
+ }
319
+ if (initialConfig.showStyleEditor !== undefined) {
320
+ sendMessage({
321
+ type: "SHOW_STYLE_EDITOR",
322
+ show: initialConfig.showStyleEditor,
323
+ });
324
+ }
325
+ if (initialConfig.showActionsTab !== undefined) {
326
+ sendMessage({
327
+ type: "SHOW_ACTIONS_TAB",
328
+ show: initialConfig.showActionsTab,
329
+ });
330
+ }
331
+ if (initialConfig.showChildBorders !== undefined) {
332
+ sendMessage({
333
+ type: "SET_SHOW_CHILD_BORDERS",
334
+ show: initialConfig.showChildBorders,
335
+ });
336
+ }
337
+ if (initialConfig.badgeVisible !== undefined) {
338
+ sendMessage({
339
+ type: "SET_BADGE_VISIBLE",
340
+ visible: initialConfig.badgeVisible,
341
+ badgeText: labels?.badgeText,
342
+ });
343
+ }
344
+ }
345
+ }, [isReady, initialConfig, sendMessage, labels]);
234
346
  /**
235
347
  * Cleanup: Turn off inspector on unmount
236
348
  */
@@ -263,6 +375,9 @@ export function useInspector(iframeRef, callbacks, labels, theme) {
263
375
  setActiveTab,
264
376
  setLoading,
265
377
  setInspectOnRightClick,
378
+ setAllowEditForMultipleInstances,
379
+ setIsDraggable,
380
+ setIsResizable,
266
381
  };
267
382
  }
268
383
  // Export utility functions
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@promakeai/inspector-hook",
3
- "version": "1.2.8",
3
+ "version": "1.3.1",
4
4
  "description": "React hook for controlling inspector in parent applications",
5
5
  "author": "Promake",
6
6
  "type": "module",
@@ -45,7 +45,7 @@
45
45
  }
46
46
  },
47
47
  "devDependencies": {
48
- "@promakeai/inspector-types": "1.0.2",
48
+ "@promakeai/inspector-types": "1.3.1",
49
49
  "vitest": "^1.0.0"
50
50
  },
51
51
  "publishConfig": {