@widgetic/editor 4.0.6 → 4.0.8

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 (64) hide show
  1. package/README.md +12 -1
  2. package/dist/components/WidgetPreview.svelte +42 -1
  3. package/dist/components/WidgetPreview.svelte.d.ts +8 -0
  4. package/dist/components/editors/EmbedEditor.svelte +101 -530
  5. package/dist/components/editors/EmbedEditor.svelte.d.ts +7 -17
  6. package/dist/components/editors/PropsEditor.svelte +328 -142
  7. package/dist/components/editors/PropsEditor.svelte.d.ts +13 -2
  8. package/dist/components/ic/AngleInputController.svelte +21 -7
  9. package/dist/components/ic/AngleInputController.svelte.d.ts +16 -6
  10. package/dist/components/ic/BrowserInputController.svelte +28 -15
  11. package/dist/components/ic/BrowserInputController.svelte.d.ts +25 -19
  12. package/dist/components/ic/CheckboxInputController.svelte +21 -7
  13. package/dist/components/ic/CheckboxInputController.svelte.d.ts +25 -15
  14. package/dist/components/ic/ColorPickerInputController.svelte +47 -21
  15. package/dist/components/ic/ColorPickerInputController.svelte.d.ts +42 -19
  16. package/dist/components/ic/DateFieldInputController.svelte +21 -7
  17. package/dist/components/ic/DateFieldInputController.svelte.d.ts +24 -14
  18. package/dist/components/ic/DatePickerInputController.svelte +25 -8
  19. package/dist/components/ic/DatePickerInputController.svelte.d.ts +21 -8
  20. package/dist/components/ic/DropdownInputController.svelte +69 -19
  21. package/dist/components/ic/DropdownInputController.svelte.d.ts +33 -17
  22. package/dist/components/ic/FixedPositionInputController.svelte +24 -10
  23. package/dist/components/ic/FixedPositionInputController.svelte.d.ts +16 -4
  24. package/dist/components/ic/FontInputController.svelte +53 -18
  25. package/dist/components/ic/FontInputController.svelte.d.ts +33 -18
  26. package/dist/components/ic/InputControllerRenderer.svelte +98 -0
  27. package/dist/components/ic/InputControllerRenderer.svelte.d.ts +40 -0
  28. package/dist/components/ic/NumberInputController.svelte +23 -9
  29. package/dist/components/ic/NumberInputController.svelte.d.ts +18 -7
  30. package/dist/components/ic/PositionInputController.svelte +17 -5
  31. package/dist/components/ic/PositionInputController.svelte.d.ts +20 -11
  32. package/dist/components/ic/RadioGroupInputController.svelte +21 -7
  33. package/dist/components/ic/RadioGroupInputController.svelte.d.ts +22 -12
  34. package/dist/components/ic/RangeCalendarInputController.svelte +34 -16
  35. package/dist/components/ic/RangeCalendarInputController.svelte.d.ts +25 -11
  36. package/dist/components/ic/RoundedCornersInputController.svelte +26 -22
  37. package/dist/components/ic/RoundedCornersInputController.svelte.d.ts +26 -18
  38. package/dist/components/ic/SliderInputController.svelte +41 -18
  39. package/dist/components/ic/SliderInputController.svelte.d.ts +35 -19
  40. package/dist/components/ic/SliderRangeInputController.svelte +27 -11
  41. package/dist/components/ic/SliderRangeInputController.svelte.d.ts +22 -9
  42. package/dist/components/ic/SwitchInputController.svelte +17 -5
  43. package/dist/components/ic/SwitchInputController.svelte.d.ts +14 -5
  44. package/dist/components/ic/TagsInputController.svelte +21 -7
  45. package/dist/components/ic/TagsInputController.svelte.d.ts +16 -6
  46. package/dist/components/ic/TextAreaInputController.svelte +44 -25
  47. package/dist/components/ic/TextAreaInputController.svelte.d.ts +6 -4
  48. package/dist/components/ic/TextAreaPreviewInputController.svelte +21 -7
  49. package/dist/components/ic/TextAreaPreviewInputController.svelte.d.ts +16 -6
  50. package/dist/components/ic/TextInputController.svelte +23 -8
  51. package/dist/components/ic/TextInputController.svelte.d.ts +20 -8
  52. package/dist/components/ic/TimeInputController.svelte +17 -5
  53. package/dist/components/ic/TimeInputController.svelte.d.ts +14 -5
  54. package/dist/components/ic/VectorInputController.svelte +29 -10
  55. package/dist/components/ic/VectorInputController.svelte.d.ts +33 -18
  56. package/dist/components/icons/locked.svelte +5 -1
  57. package/dist/components/icons/locked.svelte.d.ts +11 -24
  58. package/dist/components/icons/unlocked.svelte +5 -1
  59. package/dist/components/icons/unlocked.svelte.d.ts +11 -24
  60. package/dist/index.d.ts +1 -0
  61. package/dist/schemaViews.d.ts +105 -0
  62. package/dist/schemaViews.js +11 -0
  63. package/dist/utils/FontManager.js +11 -4
  64. package/package.json +16 -12
package/README.md CHANGED
@@ -9,7 +9,7 @@ Based on the Widget's design schema and content schema it generates 2 panels of
9
9
 
10
10
  1. add the component as a dependency in the npm package of the project
11
11
  2. import the component in the project:
12
- `import PropsEditor from '@widgetic/props-editor';`
12
+ `import PropsEditor from '@widgetic/editor';`
13
13
  3. load the design and content schemas and pass them as props to the component:
14
14
  ```js
15
15
  let designSchemaUrl = '/design-debug-schema.json';
@@ -71,6 +71,17 @@ npm i --legacy-peer-deps
71
71
  Note: use --legacy-peer-deps if you get peer dependency errors
72
72
  as our project uses svelte 5 and some of the dependencies are still using svelte 4.
73
73
 
74
+ ### Sibling packages
75
+
76
+ This app compiles sibling `@widgetic/*` source in dev through the dev-alias
77
+ setup `@widgetic/dev-tools` owns. The alias tables, the `$lib` remap, and
78
+ everything else the mapping needs come from the installed
79
+ `@widgetic/dev-tools` dependency. An ordinary `npm install` is the whole
80
+ setup — there is no linking step.
81
+
82
+ The why and the silent-degrade failure mode live in
83
+ [the dev-tools README](../dev-tools/README.md).
84
+
74
85
  ## Start the development server
75
86
 
76
87
  ```bash
@@ -10,6 +10,8 @@
10
10
  resize: { width: number; height: number };
11
11
  mobileViewport: { width: number; height: number };
12
12
  desktopViewport: void;
13
+ deviceView: { mobile: boolean };
14
+ fitToArea: void;
13
15
  iframeLoad: Event;
14
16
  iframeError: Event;
15
17
  retry: void;
@@ -63,6 +65,9 @@
63
65
  export let enableDrag: boolean = false;
64
66
  /** W×H number inputs in the chrome header, live-synced with resize. */
65
67
  export let showDimensionInputs: boolean = false;
68
+ /** Desktop / mobile pair in the chrome header, before the dimension inputs. */
69
+ export let showChromeDeviceToggle: boolean = false;
70
+ export let deviceMobile: boolean = false;
66
71
  /**
67
72
  * concentric — always resize from center (widget-creator / Canvas).
68
73
  * corner — opposite corner fixed; hold Alt for concentric (composition page).
@@ -192,6 +197,14 @@
192
197
  });
193
198
  }
194
199
 
200
+ /** Place the preview shell at an explicit stage coordinate (composition pair layout). */
201
+ export function setShellPosition(left: number, top: number): void {
202
+ previewShellLeft = left;
203
+ previewShellTop = top;
204
+ previewPositionReady = true;
205
+ console.log('[WidgetPreview] Set shell position', { left, top });
206
+ }
207
+
195
208
  function ensurePreviewPosition(): void {
196
209
  if (previewPositionReady) return;
197
210
  resetPreviewPosition();
@@ -604,6 +617,7 @@
604
617
 
605
618
  function handleFitToAreaClick() {
606
619
  fitToContainer();
620
+ if (debugMode) console.debug('[WidgetPreview] Fit to area:', { width: resizeWidth, height: resizeHeight });
607
621
  dispatch('fitToArea');
608
622
  }
609
623
 
@@ -876,8 +890,35 @@
876
890
  <span class="preview-chrome-drag-grip shrink-0 text-gray-400 text-xs leading-none" title="Drag preview" aria-hidden="true">⠿</span>
877
891
  {/if}
878
892
  <span class="preview-chrome-title text-[11px] font-semibold uppercase tracking-wide text-gray-500 shrink-0">Preview</span>
893
+ {#if showChromeDeviceToggle}
894
+ <div
895
+ class="preview-chrome-device-toggle ml-auto flex shrink-0 items-center overflow-hidden rounded border border-gray-300"
896
+ onpointerdown={(event) => event.stopPropagation()}
897
+ >
898
+ <button
899
+ type="button"
900
+ class="preview-chrome-device-desktop flex h-6 w-6 items-center justify-center {!deviceMobile ? 'bg-gray-100 text-gray-800' : 'bg-white text-gray-400'} hover:text-gray-800 focus:outline-none focus-visible:outline-none"
901
+ aria-label="Desktop preview"
902
+ aria-pressed={!deviceMobile}
903
+ onclick={() => dispatch('deviceView', { mobile: false })}
904
+ onpointerdown={(event) => event.stopPropagation()}
905
+ >
906
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="2" y="3" width="20" height="14" rx="2" ry="2"/><line x1="8" y1="21" x2="16" y2="21"/><line x1="12" y1="17" x2="12" y2="21"/></svg>
907
+ </button>
908
+ <button
909
+ type="button"
910
+ class="preview-chrome-device-mobile flex h-6 w-6 items-center justify-center border-l border-gray-300 {deviceMobile ? 'bg-gray-100 text-gray-800' : 'bg-white text-gray-400'} hover:text-gray-800 focus:outline-none focus-visible:outline-none"
911
+ aria-label="Mobile preview"
912
+ aria-pressed={deviceMobile}
913
+ onclick={() => dispatch('deviceView', { mobile: true })}
914
+ onpointerdown={(event) => event.stopPropagation()}
915
+ >
916
+ <svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true"><rect x="5" y="2" width="14" height="20" rx="2" ry="2"/><line x1="12" y1="18" x2="12.01" y2="18"/></svg>
917
+ </button>
918
+ </div>
919
+ {/if}
879
920
  {#if showDimensionInputs}
880
- <div class="preview-chrome-dimensions ml-auto flex items-center gap-1.5">
921
+ <div class="preview-chrome-dimensions flex items-center gap-1.5 {showChromeDeviceToggle ? '' : 'ml-auto'}">
881
922
  <label class="preview-dim-label flex items-center gap-1 text-[10px] font-semibold text-gray-500">
882
923
  <span>W</span>
883
924
  <input
@@ -45,6 +45,8 @@ declare const WidgetPreview: $$__sveltets_2_IsomorphicComponent<{
45
45
  enableResize?: boolean;
46
46
  /** Drag only via the preview chrome header (keeps iframe interactive). */ enableDrag?: boolean;
47
47
  /** W×H number inputs in the chrome header, live-synced with resize. */ showDimensionInputs?: boolean;
48
+ /** Desktop / mobile pair in the chrome header, before the dimension inputs. */ showChromeDeviceToggle?: boolean;
49
+ deviceMobile?: boolean;
48
50
  /**
49
51
  * concentric — always resize from center (widget-creator / Canvas).
50
52
  * corner — opposite corner fixed; hold Alt for concentric (composition page).
@@ -62,6 +64,7 @@ declare const WidgetPreview: $$__sveltets_2_IsomorphicComponent<{
62
64
  maxHeight: number;
63
65
  };
64
66
  resetPreviewPosition?: () => void;
67
+ setShellPosition?: (left: number, top: number) => void;
65
68
  nudgeIframePaint?: () => void;
66
69
  fitToContainer?: () => void;
67
70
  sendMessageToPreview?: (message: Record<string, unknown>) => void;
@@ -85,6 +88,10 @@ declare const WidgetPreview: $$__sveltets_2_IsomorphicComponent<{
85
88
  height: number;
86
89
  }>;
87
90
  desktopViewport: CustomEvent<void>;
91
+ deviceView: CustomEvent<{
92
+ mobile: boolean;
93
+ }>;
94
+ fitToArea: CustomEvent<void>;
88
95
  iframeLoad: CustomEvent<Event>;
89
96
  iframeError: CustomEvent<Event>;
90
97
  retry: CustomEvent<void>;
@@ -99,6 +106,7 @@ declare const WidgetPreview: $$__sveltets_2_IsomorphicComponent<{
99
106
  maxHeight: number;
100
107
  };
101
108
  resetPreviewPosition: () => void;
109
+ setShellPosition: (left: number, top: number) => void;
102
110
  nudgeIframePaint: () => void;
103
111
  fitToContainer: () => void;
104
112
  sendMessageToPreview: (message: Record<string, unknown>) => void;