@dfosco/storyboard-react 4.0.0-beta.24 → 4.0.0-beta.26
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/package.json +3 -3
- package/src/canvas/CanvasPage.bridge.test.jsx +8 -8
- package/src/canvas/CanvasPage.dragdrop.test.jsx +8 -8
- package/src/canvas/CanvasPage.jsx +170 -103
- package/src/canvas/CanvasPage.module.css +7 -0
- package/src/canvas/CanvasPage.multiselect.test.jsx +11 -11
- package/src/canvas/CanvasToolbar.jsx +2 -2
- package/src/canvas/canvasApi.js +12 -10
- package/src/canvas/useCanvas.js +9 -8
- package/src/canvas/widgets/ComponentWidget.jsx +21 -6
- package/src/canvas/widgets/ComponentWidget.module.css +5 -0
- package/src/canvas/widgets/FigmaEmbed.jsx +44 -15
- package/src/canvas/widgets/PrototypeEmbed.jsx +210 -208
- package/src/canvas/widgets/PrototypeEmbed.module.css +61 -19
- package/src/canvas/widgets/StoryWidget.jsx +135 -171
- package/src/canvas/widgets/StoryWidget.module.css +38 -28
- package/src/canvas/widgets/WidgetChrome.jsx +3 -2
- package/src/canvas/widgets/embedInteraction.test.jsx +86 -4
- package/src/canvas/widgets/embedTheme.js +20 -0
- package/src/canvas/widgets/iframeDevLogs.js +49 -0
- package/src/canvas/widgets/iframeDevLogs.test.jsx +81 -0
- package/src/canvas/widgets/snapshotDisplay.test.jsx +289 -0
- package/src/canvas/widgets/useSnapshotCapture.js +258 -0
- package/src/canvas/widgets/useSnapshotCapture.test.jsx +225 -0
- package/src/context.jsx +14 -14
- package/src/story/StoryPage.jsx +7 -7
- package/src/vite/data-plugin.js +25 -20
- package/src/vite/data-plugin.test.js +4 -4
- package/src/canvas/widgets/useViewportEntry.js +0 -93
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dfosco/storyboard-react",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.26",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@dfosco/storyboard-core": "4.0.0-beta.
|
|
7
|
-
"@dfosco/tiny-canvas": "4.0.0-beta.
|
|
6
|
+
"@dfosco/storyboard-core": "4.0.0-beta.26",
|
|
7
|
+
"@dfosco/tiny-canvas": "4.0.0-beta.26",
|
|
8
8
|
"@neodrag/react": "^2.3.1",
|
|
9
9
|
"glob": "^11.0.0",
|
|
10
10
|
"jsonc-parser": "^3.3.1",
|
|
@@ -105,11 +105,11 @@ describe('CanvasPage canvas bridge', () => {
|
|
|
105
105
|
document.addEventListener('storyboard:canvas:mounted', mountedHandler)
|
|
106
106
|
document.addEventListener('storyboard:canvas:status', statusHandler)
|
|
107
107
|
|
|
108
|
-
const { unmount } = render(<CanvasPage
|
|
108
|
+
const { unmount } = render(<CanvasPage canvasId="design-overview" />)
|
|
109
109
|
|
|
110
110
|
expect(window.__storyboardCanvasBridgeState).toEqual({
|
|
111
111
|
active: true,
|
|
112
|
-
|
|
112
|
+
canvasId: 'design-overview',
|
|
113
113
|
zoom: 100,
|
|
114
114
|
})
|
|
115
115
|
expect(mountedHandler).toHaveBeenCalled()
|
|
@@ -118,7 +118,7 @@ describe('CanvasPage canvas bridge', () => {
|
|
|
118
118
|
expect(statusHandler).toHaveBeenCalled()
|
|
119
119
|
expect(statusHandler.mock.calls.at(-1)?.[0]?.detail).toEqual({
|
|
120
120
|
active: true,
|
|
121
|
-
|
|
121
|
+
canvasId: 'design-overview',
|
|
122
122
|
zoom: 100,
|
|
123
123
|
})
|
|
124
124
|
|
|
@@ -132,13 +132,13 @@ describe('CanvasPage canvas bridge', () => {
|
|
|
132
132
|
const unmountedHandler = vi.fn()
|
|
133
133
|
document.addEventListener('storyboard:canvas:unmounted', unmountedHandler)
|
|
134
134
|
|
|
135
|
-
const { unmount } = render(<CanvasPage
|
|
135
|
+
const { unmount } = render(<CanvasPage canvasId="design-overview" />)
|
|
136
136
|
unmount()
|
|
137
137
|
|
|
138
138
|
expect(unmountedHandler).toHaveBeenCalled()
|
|
139
139
|
expect(window.__storyboardCanvasBridgeState).toEqual({
|
|
140
140
|
active: false,
|
|
141
|
-
|
|
141
|
+
canvasId: '',
|
|
142
142
|
zoom: 100,
|
|
143
143
|
})
|
|
144
144
|
|
|
@@ -146,7 +146,7 @@ describe('CanvasPage canvas bridge', () => {
|
|
|
146
146
|
})
|
|
147
147
|
|
|
148
148
|
it.skip('persists dragged JSON widgets and JSX sources to canvas JSONL via update API', async () => {
|
|
149
|
-
render(<CanvasPage
|
|
149
|
+
render(<CanvasPage canvasId="design-overview" />)
|
|
150
150
|
|
|
151
151
|
fireEvent.click(screen.getByTestId('drag-widget'))
|
|
152
152
|
// Flush the promise-based write queue
|
|
@@ -179,7 +179,7 @@ describe('CanvasPage canvas bridge', () => {
|
|
|
179
179
|
})
|
|
180
180
|
|
|
181
181
|
it.skip('clamps negative drag positions to zero', async () => {
|
|
182
|
-
render(<CanvasPage
|
|
182
|
+
render(<CanvasPage canvasId="design-overview" />)
|
|
183
183
|
|
|
184
184
|
fireEvent.click(screen.getByTestId('drag-widget-negative'))
|
|
185
185
|
await act(async () => { await new Promise((r) => setTimeout(r, 0)) })
|
|
@@ -243,7 +243,7 @@ describe('canvas target fallback', () => {
|
|
|
243
243
|
localStorage.setItem('sb-color-scheme', 'dark')
|
|
244
244
|
document.documentElement.setAttribute('data-sb-canvas-theme', 'dark')
|
|
245
245
|
|
|
246
|
-
render(<CanvasPage
|
|
246
|
+
render(<CanvasPage canvasId="design-overview" />)
|
|
247
247
|
|
|
248
248
|
const scroll = document.querySelector('[data-storyboard-canvas-scroll]')
|
|
249
249
|
const jsxWidget = document.getElementById('jsx-PrimaryButtons')
|
|
@@ -123,7 +123,7 @@ describe('CanvasPage image drag-and-drop', () => {
|
|
|
123
123
|
})
|
|
124
124
|
|
|
125
125
|
it('allows drop by preventing default on dragover with Files', () => {
|
|
126
|
-
render(<CanvasPage
|
|
126
|
+
render(<CanvasPage canvasId="test-canvas" />)
|
|
127
127
|
const scrollContainer = document.querySelector('[data-storyboard-canvas-scroll]')
|
|
128
128
|
|
|
129
129
|
const dragOverEvent = new Event('dragover', { bubbles: true, cancelable: true })
|
|
@@ -137,7 +137,7 @@ describe('CanvasPage image drag-and-drop', () => {
|
|
|
137
137
|
})
|
|
138
138
|
|
|
139
139
|
it('ignores dragover without Files type (internal widget drag)', () => {
|
|
140
|
-
render(<CanvasPage
|
|
140
|
+
render(<CanvasPage canvasId="test-canvas" />)
|
|
141
141
|
const scrollContainer = document.querySelector('[data-storyboard-canvas-scroll]')
|
|
142
142
|
|
|
143
143
|
const dragOverEvent = new Event('dragover', { bubbles: true, cancelable: true })
|
|
@@ -150,7 +150,7 @@ describe('CanvasPage image drag-and-drop', () => {
|
|
|
150
150
|
})
|
|
151
151
|
|
|
152
152
|
it('uploads image and creates widget on drop', async () => {
|
|
153
|
-
render(<CanvasPage
|
|
153
|
+
render(<CanvasPage canvasId="test-canvas" />)
|
|
154
154
|
const scrollContainer = document.querySelector('[data-storyboard-canvas-scroll]')
|
|
155
155
|
|
|
156
156
|
const imageFile = createMockImageFile('photo.png', 'image/png')
|
|
@@ -199,7 +199,7 @@ describe('CanvasPage image drag-and-drop', () => {
|
|
|
199
199
|
})
|
|
200
200
|
|
|
201
201
|
it('ignores non-image files but prevents browser default', async () => {
|
|
202
|
-
render(<CanvasPage
|
|
202
|
+
render(<CanvasPage canvasId="test-canvas" />)
|
|
203
203
|
const scrollContainer = document.querySelector('[data-storyboard-canvas-scroll]')
|
|
204
204
|
|
|
205
205
|
const textFile = new File(['text content'], 'readme.txt', { type: 'text/plain' })
|
|
@@ -225,7 +225,7 @@ describe('CanvasPage image drag-and-drop', () => {
|
|
|
225
225
|
})
|
|
226
226
|
|
|
227
227
|
it('processes multiple image files on drop', async () => {
|
|
228
|
-
render(<CanvasPage
|
|
228
|
+
render(<CanvasPage canvasId="test-canvas" />)
|
|
229
229
|
const scrollContainer = document.querySelector('[data-storyboard-canvas-scroll]')
|
|
230
230
|
|
|
231
231
|
const image1 = createMockImageFile('photo1.png', 'image/png')
|
|
@@ -253,7 +253,7 @@ describe('CanvasPage image drag-and-drop', () => {
|
|
|
253
253
|
})
|
|
254
254
|
|
|
255
255
|
it('ignores drop without Files type', async () => {
|
|
256
|
-
render(<CanvasPage
|
|
256
|
+
render(<CanvasPage canvasId="test-canvas" />)
|
|
257
257
|
const scrollContainer = document.querySelector('[data-storyboard-canvas-scroll]')
|
|
258
258
|
|
|
259
259
|
const dropEvent = new Event('drop', { bubbles: true, cancelable: true })
|
|
@@ -273,7 +273,7 @@ describe('CanvasPage image drag-and-drop', () => {
|
|
|
273
273
|
const originalSnapToGrid = mockCanvas.snapToGrid
|
|
274
274
|
mockCanvas.snapToGrid = true
|
|
275
275
|
|
|
276
|
-
render(<CanvasPage
|
|
276
|
+
render(<CanvasPage canvasId="test-canvas" />)
|
|
277
277
|
const scrollContainer = document.querySelector('[data-storyboard-canvas-scroll]')
|
|
278
278
|
|
|
279
279
|
const imageFile = createMockImageFile()
|
|
@@ -311,7 +311,7 @@ describe('CanvasPage image drag-and-drop', () => {
|
|
|
311
311
|
const originalSnapToGrid = mockCanvas.snapToGrid
|
|
312
312
|
mockCanvas.snapToGrid = false
|
|
313
313
|
|
|
314
|
-
render(<CanvasPage
|
|
314
|
+
render(<CanvasPage canvasId="test-canvas" />)
|
|
315
315
|
const scrollContainer = document.querySelector('[data-storyboard-canvas-scroll]')
|
|
316
316
|
|
|
317
317
|
const imageFile = createMockImageFile()
|