@dfosco/storyboard-react 4.2.0-beta.1 → 4.2.0-beta.17
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 +5 -4
- package/src/AuthModal/AuthModal.jsx +6 -2
- package/src/BranchBar/BranchBar.jsx +17 -5
- package/src/BranchBar/BranchBar.module.css +11 -2
- package/src/CommandPalette/CommandPalette.jsx +267 -164
- package/src/CommandPalette/command-palette.css +130 -78
- package/src/Icon.jsx +112 -48
- package/src/Viewfinder.jsx +511 -61
- package/src/Viewfinder.module.css +414 -2
- package/src/canvas/CanvasPage.bridge.test.jsx +14 -6
- package/src/canvas/CanvasPage.dragdrop.test.jsx +10 -6
- package/src/canvas/CanvasPage.jsx +157 -174
- package/src/canvas/CanvasPage.module.css +0 -15
- package/src/canvas/CanvasPage.multiselect.test.jsx +10 -6
- package/src/canvas/ConnectorLayer.jsx +5 -5
- package/src/canvas/PageSelector.test.jsx +15 -6
- package/src/canvas/useCanvas.js +1 -1
- package/src/canvas/widgets/ActionWidget.jsx +200 -0
- package/src/canvas/widgets/ActionWidget.module.css +122 -0
- package/src/canvas/widgets/FigmaEmbed.jsx +97 -29
- package/src/canvas/widgets/FigmaEmbed.module.css +61 -0
- package/src/canvas/widgets/ImageWidget.jsx +1 -1
- package/src/canvas/widgets/LinkPreview.jsx +64 -5
- package/src/canvas/widgets/LinkPreview.module.css +127 -0
- package/src/canvas/widgets/MarkdownBlock.jsx +39 -17
- package/src/canvas/widgets/MarkdownBlock.module.css +123 -0
- package/src/canvas/widgets/PrototypeEmbed.jsx +183 -20
- package/src/canvas/widgets/PrototypeEmbed.module.css +117 -0
- package/src/canvas/widgets/PrototypeEmbed.test.jsx +2 -2
- package/src/canvas/widgets/SplitExpandModal.jsx +234 -0
- package/src/canvas/widgets/SplitExpandModal.module.css +335 -0
- package/src/canvas/widgets/SplitScreenTopBar.jsx +30 -0
- package/src/canvas/widgets/SplitScreenTopBar.module.css +58 -0
- package/src/canvas/widgets/StoryWidget.jsx +7 -4
- package/src/canvas/widgets/TerminalReadWidget.jsx +140 -0
- package/src/canvas/widgets/TerminalReadWidget.module.css +92 -0
- package/src/canvas/widgets/TerminalWidget.jsx +299 -49
- package/src/canvas/widgets/TerminalWidget.module.css +155 -1
- package/src/canvas/widgets/WidgetChrome.jsx +19 -14
- package/src/canvas/widgets/WidgetChrome.module.css +10 -0
- package/src/canvas/widgets/embedInteraction.test.jsx +24 -26
- package/src/canvas/widgets/expandUtils.js +188 -0
- package/src/canvas/widgets/index.js +5 -0
- package/src/canvas/widgets/snapshotDisplay.test.jsx +23 -71
- package/src/canvas/widgets/widgetConfig.js +19 -1
- package/src/hooks/useConfig.js +14 -0
- package/src/index.js +4 -0
- package/src/vite/data-plugin.js +264 -14
package/package.json
CHANGED
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dfosco/storyboard-react",
|
|
3
|
-
"version": "4.2.0-beta.
|
|
3
|
+
"version": "4.2.0-beta.17",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"dependencies": {
|
|
6
6
|
"@base-ui/react": "^1.4.0",
|
|
7
|
-
"@dfosco/storyboard-core": "4.2.0-beta.
|
|
8
|
-
"@dfosco/tiny-canvas": "4.2.0-beta.
|
|
7
|
+
"@dfosco/storyboard-core": "4.2.0-beta.17",
|
|
8
|
+
"@dfosco/tiny-canvas": "4.2.0-beta.17",
|
|
9
9
|
"@neodrag/react": "^2.3.1",
|
|
10
|
+
"ansi-to-html": "^0.7.2",
|
|
11
|
+
"ghostty-web": "^0.4.0",
|
|
10
12
|
"glob": "^11.0.0",
|
|
11
13
|
"jsonc-parser": "^3.3.1",
|
|
12
14
|
"remark": "^15.0.1",
|
|
13
15
|
"remark-gfm": "^4.0.1",
|
|
14
|
-
"react-cmdk": "^1.3.9",
|
|
15
16
|
"remark-html": "^16.0.1"
|
|
16
17
|
},
|
|
17
18
|
"license": "MIT",
|
|
@@ -43,8 +43,12 @@ export default function AuthModal() {
|
|
|
43
43
|
try { localStorage.setItem(COMMENTS_TOKEN_KEY, trimmed) } catch { /* ignore */ }
|
|
44
44
|
|
|
45
45
|
try {
|
|
46
|
-
import('@dfosco/storyboard-core/comments').then(({ setToken }) => {
|
|
46
|
+
import('@dfosco/storyboard-core/comments').then(({ setToken, validateToken }) => {
|
|
47
47
|
setToken(trimmed)
|
|
48
|
+
// Validate to cache user info (login + avatar), then notify Viewfinder
|
|
49
|
+
validateToken(trimmed)
|
|
50
|
+
.then(() => document.dispatchEvent(new CustomEvent('storyboard:auth-changed')))
|
|
51
|
+
.catch(() => document.dispatchEvent(new CustomEvent('storyboard:auth-changed')))
|
|
48
52
|
}).catch(() => {})
|
|
49
53
|
} catch { /* comments module may not be initialized */ }
|
|
50
54
|
|
|
@@ -64,7 +68,7 @@ export default function AuthModal() {
|
|
|
64
68
|
<Dialog.Backdrop className={css.backdrop} />
|
|
65
69
|
<div className={css.popupWrap}>
|
|
66
70
|
<Dialog.Popup className={css.popup}>
|
|
67
|
-
<Dialog.Title className={css.title}>Sign in
|
|
71
|
+
<Dialog.Title className={css.title}>Sign in with GitHub</Dialog.Title>
|
|
68
72
|
<Dialog.Description className={css.desc}>
|
|
69
73
|
Leave comments for other users to see and respond, and react to! Storyboard
|
|
70
74
|
comments use Discussions as a back-end and require a GitHub PAT to be enabled.
|
|
@@ -1,13 +1,20 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* BranchBar —
|
|
2
|
+
* BranchBar — blue accent bar showing current branch and local dev status.
|
|
3
3
|
*
|
|
4
|
-
* Dev:
|
|
5
|
-
* Prod:
|
|
4
|
+
* Dev: always visible (main or branch). Shows "Local development" label.
|
|
5
|
+
* Prod: shows on non-main branches only.
|
|
6
6
|
*/
|
|
7
7
|
import { useState, useEffect, useMemo } from 'react'
|
|
8
8
|
import { GitBranchIcon } from '@primer/octicons-react'
|
|
9
9
|
import css from './BranchBar.module.css'
|
|
10
10
|
|
|
11
|
+
/** Check if we're in local dev mode (respects ?prodMode simulation). */
|
|
12
|
+
function checkLocalDev() {
|
|
13
|
+
if (typeof window === 'undefined') return false
|
|
14
|
+
if (new URLSearchParams(window.location.search).has('prodMode')) return false
|
|
15
|
+
return window.__SB_LOCAL_DEV__ === true
|
|
16
|
+
}
|
|
17
|
+
|
|
11
18
|
export default function BranchBar({ basePath }) {
|
|
12
19
|
const [hidden, setHidden] = useState(false)
|
|
13
20
|
|
|
@@ -22,6 +29,7 @@ export default function BranchBar({ basePath }) {
|
|
|
22
29
|
return m ? m[1] : 'main'
|
|
23
30
|
}, [basePath])
|
|
24
31
|
|
|
32
|
+
const isLocalDev = checkLocalDev()
|
|
25
33
|
const isOnBranch = currentBranch !== 'main'
|
|
26
34
|
|
|
27
35
|
useEffect(() => {
|
|
@@ -32,7 +40,7 @@ export default function BranchBar({ basePath }) {
|
|
|
32
40
|
return () => observer.disconnect()
|
|
33
41
|
}, [])
|
|
34
42
|
|
|
35
|
-
if (!isOnBranch || hidden || isHiddenByParam) return null
|
|
43
|
+
if ((!isOnBranch && !isLocalDev) || hidden || isHiddenByParam) return null
|
|
36
44
|
|
|
37
45
|
function hideChrome() {
|
|
38
46
|
window.dispatchEvent(new KeyboardEvent('keydown', {
|
|
@@ -42,10 +50,14 @@ export default function BranchBar({ basePath }) {
|
|
|
42
50
|
|
|
43
51
|
return (
|
|
44
52
|
<div className={css.bar} data-branch-bar>
|
|
45
|
-
<div className={css.barInner}>
|
|
53
|
+
<div className={`${css.barInner}${isLocalDev ? '' : ` ${css.barProd}`}`}>
|
|
46
54
|
<span className={css.barLabel}>
|
|
47
55
|
<GitBranchIcon size={12} />
|
|
48
56
|
<span className={css.barBranchName}>{currentBranch}</span>
|
|
57
|
+
{isLocalDev && <>
|
|
58
|
+
<span className={css.barSeparator}>·</span>
|
|
59
|
+
<span>Local development</span>
|
|
60
|
+
</>}
|
|
49
61
|
</span>
|
|
50
62
|
<div className={css.barActions}>
|
|
51
63
|
<button className={css.barAction} onClick={hideChrome}>Hide</button>
|
|
@@ -16,12 +16,16 @@
|
|
|
16
16
|
justify-content: center;
|
|
17
17
|
gap: 8px;
|
|
18
18
|
height: 32px;
|
|
19
|
-
background:
|
|
20
|
-
color:
|
|
19
|
+
background: hsl(212, 92%, 45%);
|
|
20
|
+
color: #fff;
|
|
21
21
|
padding: 4px 12px;
|
|
22
22
|
position: relative;
|
|
23
23
|
}
|
|
24
24
|
|
|
25
|
+
.barProd {
|
|
26
|
+
background: #1c2128;
|
|
27
|
+
}
|
|
28
|
+
|
|
25
29
|
.barTrigger {
|
|
26
30
|
display: flex;
|
|
27
31
|
align-items: center;
|
|
@@ -68,6 +72,11 @@
|
|
|
68
72
|
white-space: nowrap;
|
|
69
73
|
}
|
|
70
74
|
|
|
75
|
+
.barSeparator {
|
|
76
|
+
opacity: 0.6;
|
|
77
|
+
margin: 0 2px;
|
|
78
|
+
}
|
|
79
|
+
|
|
71
80
|
.barAction {
|
|
72
81
|
background: none;
|
|
73
82
|
border: none;
|