@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.
- package/README.md +12 -1
- package/dist/components/WidgetPreview.svelte +42 -1
- package/dist/components/WidgetPreview.svelte.d.ts +8 -0
- package/dist/components/editors/EmbedEditor.svelte +101 -530
- package/dist/components/editors/EmbedEditor.svelte.d.ts +7 -17
- package/dist/components/editors/PropsEditor.svelte +328 -142
- package/dist/components/editors/PropsEditor.svelte.d.ts +13 -2
- package/dist/components/ic/AngleInputController.svelte +21 -7
- package/dist/components/ic/AngleInputController.svelte.d.ts +16 -6
- package/dist/components/ic/BrowserInputController.svelte +28 -15
- package/dist/components/ic/BrowserInputController.svelte.d.ts +25 -19
- package/dist/components/ic/CheckboxInputController.svelte +21 -7
- package/dist/components/ic/CheckboxInputController.svelte.d.ts +25 -15
- package/dist/components/ic/ColorPickerInputController.svelte +47 -21
- package/dist/components/ic/ColorPickerInputController.svelte.d.ts +42 -19
- package/dist/components/ic/DateFieldInputController.svelte +21 -7
- package/dist/components/ic/DateFieldInputController.svelte.d.ts +24 -14
- package/dist/components/ic/DatePickerInputController.svelte +25 -8
- package/dist/components/ic/DatePickerInputController.svelte.d.ts +21 -8
- package/dist/components/ic/DropdownInputController.svelte +69 -19
- package/dist/components/ic/DropdownInputController.svelte.d.ts +33 -17
- package/dist/components/ic/FixedPositionInputController.svelte +24 -10
- package/dist/components/ic/FixedPositionInputController.svelte.d.ts +16 -4
- package/dist/components/ic/FontInputController.svelte +53 -18
- package/dist/components/ic/FontInputController.svelte.d.ts +33 -18
- package/dist/components/ic/InputControllerRenderer.svelte +98 -0
- package/dist/components/ic/InputControllerRenderer.svelte.d.ts +40 -0
- package/dist/components/ic/NumberInputController.svelte +23 -9
- package/dist/components/ic/NumberInputController.svelte.d.ts +18 -7
- package/dist/components/ic/PositionInputController.svelte +17 -5
- package/dist/components/ic/PositionInputController.svelte.d.ts +20 -11
- package/dist/components/ic/RadioGroupInputController.svelte +21 -7
- package/dist/components/ic/RadioGroupInputController.svelte.d.ts +22 -12
- package/dist/components/ic/RangeCalendarInputController.svelte +34 -16
- package/dist/components/ic/RangeCalendarInputController.svelte.d.ts +25 -11
- package/dist/components/ic/RoundedCornersInputController.svelte +26 -22
- package/dist/components/ic/RoundedCornersInputController.svelte.d.ts +26 -18
- package/dist/components/ic/SliderInputController.svelte +41 -18
- package/dist/components/ic/SliderInputController.svelte.d.ts +35 -19
- package/dist/components/ic/SliderRangeInputController.svelte +27 -11
- package/dist/components/ic/SliderRangeInputController.svelte.d.ts +22 -9
- package/dist/components/ic/SwitchInputController.svelte +17 -5
- package/dist/components/ic/SwitchInputController.svelte.d.ts +14 -5
- package/dist/components/ic/TagsInputController.svelte +21 -7
- package/dist/components/ic/TagsInputController.svelte.d.ts +16 -6
- package/dist/components/ic/TextAreaInputController.svelte +44 -25
- package/dist/components/ic/TextAreaInputController.svelte.d.ts +6 -4
- package/dist/components/ic/TextAreaPreviewInputController.svelte +21 -7
- package/dist/components/ic/TextAreaPreviewInputController.svelte.d.ts +16 -6
- package/dist/components/ic/TextInputController.svelte +23 -8
- package/dist/components/ic/TextInputController.svelte.d.ts +20 -8
- package/dist/components/ic/TimeInputController.svelte +17 -5
- package/dist/components/ic/TimeInputController.svelte.d.ts +14 -5
- package/dist/components/ic/VectorInputController.svelte +29 -10
- package/dist/components/ic/VectorInputController.svelte.d.ts +33 -18
- package/dist/components/icons/locked.svelte +5 -1
- package/dist/components/icons/locked.svelte.d.ts +11 -24
- package/dist/components/icons/unlocked.svelte +5 -1
- package/dist/components/icons/unlocked.svelte.d.ts +11 -24
- package/dist/index.d.ts +1 -0
- package/dist/schemaViews.d.ts +105 -0
- package/dist/schemaViews.js +11 -0
- package/dist/utils/FontManager.js +11 -4
- 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/
|
|
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
|
|
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;
|