@embeddables/cli 0.8.0 → 0.8.2

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 (235) hide show
  1. package/dist/auth/index.d.ts +43 -0
  2. package/dist/auth/index.d.ts.map +1 -0
  3. package/dist/auth/index.js +102 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.d.ts.map +1 -0
  6. package/dist/cli.js +210 -0
  7. package/dist/commands/branch.d.ts +4 -0
  8. package/dist/commands/branch.d.ts.map +1 -0
  9. package/dist/commands/branch.js +67 -0
  10. package/dist/commands/build-workbench.d.ts +5 -0
  11. package/dist/commands/build-workbench.d.ts.map +1 -0
  12. package/dist/commands/build-workbench.js +116 -0
  13. package/dist/commands/build.d.ts +8 -0
  14. package/dist/commands/build.d.ts.map +1 -0
  15. package/dist/commands/build.js +60 -0
  16. package/dist/commands/builder-open.d.ts +4 -0
  17. package/dist/commands/builder-open.d.ts.map +1 -0
  18. package/dist/commands/builder-open.js +74 -0
  19. package/dist/commands/dev.d.ts +12 -0
  20. package/dist/commands/dev.d.ts.map +1 -0
  21. package/dist/commands/dev.js +226 -0
  22. package/dist/commands/experiments-connect.d.ts +6 -0
  23. package/dist/commands/experiments-connect.d.ts.map +1 -0
  24. package/dist/commands/experiments-connect.js +140 -0
  25. package/dist/commands/init.d.ts +5 -0
  26. package/dist/commands/init.d.ts.map +1 -0
  27. package/dist/commands/init.js +384 -0
  28. package/dist/commands/inspect.d.ts +9 -0
  29. package/dist/commands/inspect.d.ts.map +1 -0
  30. package/dist/commands/inspect.js +293 -0
  31. package/dist/commands/login.d.ts +2 -0
  32. package/dist/commands/login.d.ts.map +1 -0
  33. package/dist/commands/login.js +117 -0
  34. package/dist/commands/logout.d.ts +2 -0
  35. package/dist/commands/logout.d.ts.map +1 -0
  36. package/dist/commands/logout.js +19 -0
  37. package/dist/commands/pull.d.ts +16 -0
  38. package/dist/commands/pull.d.ts.map +1 -0
  39. package/dist/commands/pull.js +395 -0
  40. package/dist/commands/save.d.ts +30 -0
  41. package/dist/commands/save.d.ts.map +1 -0
  42. package/dist/commands/save.js +597 -0
  43. package/dist/commands/upgrade.d.ts +2 -0
  44. package/dist/commands/upgrade.d.ts.map +1 -0
  45. package/dist/commands/upgrade.js +50 -0
  46. package/dist/compiler/errors.d.ts +20 -0
  47. package/dist/compiler/errors.d.ts.map +1 -0
  48. package/dist/compiler/errors.js +35 -0
  49. package/dist/compiler/evalStatic.d.ts +3 -0
  50. package/dist/compiler/evalStatic.d.ts.map +1 -0
  51. package/dist/compiler/evalStatic.js +57 -0
  52. package/dist/compiler/helpers/duplicateIds.d.ts +9 -0
  53. package/dist/compiler/helpers/duplicateIds.d.ts.map +1 -0
  54. package/dist/compiler/helpers/duplicateIds.js +71 -0
  55. package/dist/compiler/helpers/numericLeadingKeys.d.ts +8 -0
  56. package/dist/compiler/helpers/numericLeadingKeys.d.ts.map +1 -0
  57. package/dist/compiler/helpers/numericLeadingKeys.js +17 -0
  58. package/dist/compiler/index.d.ts +18 -0
  59. package/dist/compiler/index.d.ts.map +1 -0
  60. package/dist/compiler/index.js +1272 -0
  61. package/dist/compiler/parsePage.d.ts +15 -0
  62. package/dist/compiler/parsePage.d.ts.map +1 -0
  63. package/dist/compiler/parsePage.js +654 -0
  64. package/dist/compiler/registry.d.ts +4 -0
  65. package/dist/compiler/registry.d.ts.map +1 -0
  66. package/dist/compiler/registry.js +44 -0
  67. package/dist/compiler/reverse.d.ts +23 -0
  68. package/dist/compiler/reverse.d.ts.map +1 -0
  69. package/dist/compiler/reverse.js +1938 -0
  70. package/dist/compiler/types.d.ts +21 -0
  71. package/dist/compiler/types.d.ts.map +1 -0
  72. package/dist/compiler/types.js +1 -0
  73. package/dist/components/index.d.ts +21 -0
  74. package/dist/components/index.d.ts.map +1 -0
  75. package/dist/components/index.js +21 -0
  76. package/dist/components/primitives/BaseComponent.d.ts +33 -0
  77. package/dist/components/primitives/BaseComponent.d.ts.map +1 -0
  78. package/dist/components/primitives/BaseComponent.js +26 -0
  79. package/dist/components/primitives/BookMeeting.d.ts +18 -0
  80. package/dist/components/primitives/BookMeeting.d.ts.map +1 -0
  81. package/dist/components/primitives/BookMeeting.js +5 -0
  82. package/dist/components/primitives/Chart.d.ts +41 -0
  83. package/dist/components/primitives/Chart.d.ts.map +1 -0
  84. package/dist/components/primitives/Chart.js +5 -0
  85. package/dist/components/primitives/Container.d.ts +8 -0
  86. package/dist/components/primitives/Container.d.ts.map +1 -0
  87. package/dist/components/primitives/Container.js +5 -0
  88. package/dist/components/primitives/CustomButton.d.ts +37 -0
  89. package/dist/components/primitives/CustomButton.d.ts.map +1 -0
  90. package/dist/components/primitives/CustomButton.js +10 -0
  91. package/dist/components/primitives/CustomHTML.d.ts +8 -0
  92. package/dist/components/primitives/CustomHTML.d.ts.map +1 -0
  93. package/dist/components/primitives/CustomHTML.js +5 -0
  94. package/dist/components/primitives/FileUpload.d.ts +18 -0
  95. package/dist/components/primitives/FileUpload.d.ts.map +1 -0
  96. package/dist/components/primitives/FileUpload.js +16 -0
  97. package/dist/components/primitives/InputBox.d.ts +34 -0
  98. package/dist/components/primitives/InputBox.d.ts.map +1 -0
  99. package/dist/components/primitives/InputBox.js +25 -0
  100. package/dist/components/primitives/Lottie.d.ts +11 -0
  101. package/dist/components/primitives/Lottie.d.ts.map +1 -0
  102. package/dist/components/primitives/Lottie.js +5 -0
  103. package/dist/components/primitives/MediaEmbed.d.ts +13 -0
  104. package/dist/components/primitives/MediaEmbed.d.ts.map +1 -0
  105. package/dist/components/primitives/MediaEmbed.js +6 -0
  106. package/dist/components/primitives/MediaImage.d.ts +8 -0
  107. package/dist/components/primitives/MediaImage.d.ts.map +1 -0
  108. package/dist/components/primitives/MediaImage.js +5 -0
  109. package/dist/components/primitives/OptionSelector.d.ts +38 -0
  110. package/dist/components/primitives/OptionSelector.d.ts.map +1 -0
  111. package/dist/components/primitives/OptionSelector.js +8 -0
  112. package/dist/components/primitives/PaypalCheckout.d.ts +25 -0
  113. package/dist/components/primitives/PaypalCheckout.d.ts.map +1 -0
  114. package/dist/components/primitives/PaypalCheckout.js +5 -0
  115. package/dist/components/primitives/PlainText.d.ts +6 -0
  116. package/dist/components/primitives/PlainText.d.ts.map +1 -0
  117. package/dist/components/primitives/PlainText.js +5 -0
  118. package/dist/components/primitives/ProgressBar.d.ts +15 -0
  119. package/dist/components/primitives/ProgressBar.d.ts.map +1 -0
  120. package/dist/components/primitives/ProgressBar.js +5 -0
  121. package/dist/components/primitives/RichText.d.ts +6 -0
  122. package/dist/components/primitives/RichText.d.ts.map +1 -0
  123. package/dist/components/primitives/RichText.js +5 -0
  124. package/dist/components/primitives/RichTextMarkdown.d.ts +6 -0
  125. package/dist/components/primitives/RichTextMarkdown.d.ts.map +1 -0
  126. package/dist/components/primitives/RichTextMarkdown.js +5 -0
  127. package/dist/components/primitives/Rive.d.ts +16 -0
  128. package/dist/components/primitives/Rive.d.ts.map +1 -0
  129. package/dist/components/primitives/Rive.js +8 -0
  130. package/dist/components/primitives/StripeCheckout.d.ts +52 -0
  131. package/dist/components/primitives/StripeCheckout.d.ts.map +1 -0
  132. package/dist/components/primitives/StripeCheckout.js +5 -0
  133. package/dist/components/primitives/StripeCheckout2.d.ts +30 -0
  134. package/dist/components/primitives/StripeCheckout2.d.ts.map +1 -0
  135. package/dist/components/primitives/StripeCheckout2.js +7 -0
  136. package/dist/config/index.d.ts +23 -0
  137. package/dist/config/index.d.ts.map +1 -0
  138. package/dist/config/index.js +42 -0
  139. package/dist/constants.d.ts +9 -0
  140. package/dist/constants.d.ts.map +1 -0
  141. package/dist/constants.js +9 -0
  142. package/dist/helpers/dates.d.ts +5 -0
  143. package/dist/helpers/dates.d.ts.map +1 -0
  144. package/dist/helpers/dates.js +7 -0
  145. package/dist/helpers/json.d.ts +47 -0
  146. package/dist/helpers/json.d.ts.map +1 -0
  147. package/dist/helpers/json.js +622 -0
  148. package/dist/helpers/prompt.d.ts +15 -0
  149. package/dist/helpers/prompt.d.ts.map +1 -0
  150. package/dist/helpers/prompt.js +35 -0
  151. package/dist/helpers/utils.d.ts +13 -0
  152. package/dist/helpers/utils.d.ts.map +1 -0
  153. package/dist/helpers/utils.js +28 -0
  154. package/dist/logger.d.ts +11 -0
  155. package/dist/logger.d.ts.map +1 -0
  156. package/dist/logger.js +21 -0
  157. package/dist/patches/prompts-escape.d.ts +14 -0
  158. package/dist/patches/prompts-escape.d.ts.map +1 -0
  159. package/dist/patches/prompts-escape.js +23 -0
  160. package/dist/prompts/branches.d.ts +20 -0
  161. package/dist/prompts/branches.d.ts.map +1 -0
  162. package/dist/prompts/branches.js +86 -0
  163. package/dist/prompts/embeddables.d.ts +43 -0
  164. package/dist/prompts/embeddables.d.ts.map +1 -0
  165. package/dist/prompts/embeddables.js +200 -0
  166. package/dist/prompts/experiments.d.ts +28 -0
  167. package/dist/prompts/experiments.d.ts.map +1 -0
  168. package/dist/prompts/experiments.js +89 -0
  169. package/dist/prompts/index.d.ts +11 -0
  170. package/dist/prompts/index.d.ts.map +1 -0
  171. package/dist/prompts/index.js +6 -0
  172. package/dist/prompts/projects.d.ts +22 -0
  173. package/dist/prompts/projects.d.ts.map +1 -0
  174. package/dist/prompts/projects.js +92 -0
  175. package/dist/prompts/versions.d.ts +18 -0
  176. package/dist/prompts/versions.d.ts.map +1 -0
  177. package/dist/prompts/versions.js +95 -0
  178. package/dist/proxy/injectApiInterceptor.d.ts +6 -0
  179. package/dist/proxy/injectApiInterceptor.d.ts.map +1 -0
  180. package/dist/proxy/injectApiInterceptor.js +66 -0
  181. package/dist/proxy/injectReload.d.ts +2 -0
  182. package/dist/proxy/injectReload.d.ts.map +1 -0
  183. package/dist/proxy/injectReload.js +14 -0
  184. package/dist/proxy/injectWorkbench.d.ts +5 -0
  185. package/dist/proxy/injectWorkbench.d.ts.map +1 -0
  186. package/dist/proxy/injectWorkbench.js +22 -0
  187. package/dist/proxy/server.d.ts +11 -0
  188. package/dist/proxy/server.d.ts.map +1 -0
  189. package/dist/proxy/server.js +304 -0
  190. package/dist/proxy/sse.d.ts +5 -0
  191. package/dist/proxy/sse.d.ts.map +1 -0
  192. package/dist/proxy/sse.js +17 -0
  193. package/dist/sentry-context.d.ts +48 -0
  194. package/dist/sentry-context.d.ts.map +1 -0
  195. package/dist/sentry-context.js +156 -0
  196. package/dist/stdout.d.ts +61 -0
  197. package/dist/stdout.d.ts.map +1 -0
  198. package/dist/stdout.js +163 -0
  199. package/dist/types-builder.d.ts +800 -0
  200. package/dist/types-builder.d.ts.map +1 -0
  201. package/dist/types-builder.js +20 -0
  202. package/dist/workbench/ActionsPanel.d.ts +6 -0
  203. package/dist/workbench/ActionsPanel.d.ts.map +1 -0
  204. package/dist/workbench/ActionsPanel.js +47 -0
  205. package/dist/workbench/AutofillPanel.d.ts +6 -0
  206. package/dist/workbench/AutofillPanel.d.ts.map +1 -0
  207. package/dist/workbench/AutofillPanel.js +543 -0
  208. package/dist/workbench/ComputedFieldsPanel.d.ts +6 -0
  209. package/dist/workbench/ComputedFieldsPanel.d.ts.map +1 -0
  210. package/dist/workbench/ComputedFieldsPanel.js +31 -0
  211. package/dist/workbench/ExperimentsPanel.d.ts +6 -0
  212. package/dist/workbench/ExperimentsPanel.d.ts.map +1 -0
  213. package/dist/workbench/ExperimentsPanel.js +182 -0
  214. package/dist/workbench/FieldEditorPanel.d.ts +9 -0
  215. package/dist/workbench/FieldEditorPanel.d.ts.map +1 -0
  216. package/dist/workbench/FieldEditorPanel.js +650 -0
  217. package/dist/workbench/InspectorPanel.d.ts +6 -0
  218. package/dist/workbench/InspectorPanel.d.ts.map +1 -0
  219. package/dist/workbench/InspectorPanel.js +341 -0
  220. package/dist/workbench/PageNavigator.d.ts +6 -0
  221. package/dist/workbench/PageNavigator.d.ts.map +1 -0
  222. package/dist/workbench/PageNavigator.js +123 -0
  223. package/dist/workbench/SchemaPanel.d.ts +6 -0
  224. package/dist/workbench/SchemaPanel.d.ts.map +1 -0
  225. package/dist/workbench/SchemaPanel.js +222 -0
  226. package/dist/workbench/UserDataPanel.d.ts +6 -0
  227. package/dist/workbench/UserDataPanel.d.ts.map +1 -0
  228. package/dist/workbench/UserDataPanel.js +350 -0
  229. package/dist/workbench/WorkbenchApp.d.ts +7 -0
  230. package/dist/workbench/WorkbenchApp.d.ts.map +1 -0
  231. package/dist/workbench/WorkbenchApp.js +193 -0
  232. package/dist/workbench/index.d.ts +10 -0
  233. package/dist/workbench/index.d.ts.map +1 -0
  234. package/dist/workbench/index.js +44 -0
  235. package/package.json +2 -1
@@ -0,0 +1,193 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useEffect, useRef, useState } from 'react';
3
+ import { ActionsPanel } from './ActionsPanel.js';
4
+ import { AutofillPanel } from './AutofillPanel.js';
5
+ import { ComputedFieldsPanel } from './ComputedFieldsPanel.js';
6
+ import { ExperimentsPanel } from './ExperimentsPanel.js';
7
+ import { InspectorPanel } from './InspectorPanel.js';
8
+ import { PageNavigator } from './PageNavigator.js';
9
+ import { UserDataPanel } from './UserDataPanel.js';
10
+ const PREFS_STORAGE_KEY_PREFIX = 'embeddables:workbench:prefs:';
11
+ const MIN_WORKBENCH_HEIGHT = 140;
12
+ function loadPrefs(embeddableId) {
13
+ try {
14
+ const raw = window.localStorage.getItem(`${PREFS_STORAGE_KEY_PREFIX}${embeddableId}`);
15
+ if (!raw) {
16
+ return { collapsed: true, height: 260, activeTab: 'user-data' };
17
+ }
18
+ const parsed = JSON.parse(raw);
19
+ return {
20
+ collapsed: parsed.collapsed ?? true,
21
+ height: Math.max(MIN_WORKBENCH_HEIGHT, parsed.height ?? 260),
22
+ activeTab: parsed.activeTab ?? 'user-data',
23
+ };
24
+ }
25
+ catch {
26
+ return { collapsed: true, height: 260, activeTab: 'user-data' };
27
+ }
28
+ }
29
+ function savePrefs(embeddableId, prefs) {
30
+ try {
31
+ window.localStorage.setItem(`${PREFS_STORAGE_KEY_PREFIX}${embeddableId}`, JSON.stringify(prefs));
32
+ }
33
+ catch {
34
+ // ignore
35
+ }
36
+ }
37
+ export function WorkbenchApp({ embeddableId, localDev }) {
38
+ const [collapsed, setCollapsed] = useState(true);
39
+ const [height, setHeight] = useState(260);
40
+ const [activeTab, setActiveTab] = useState('user-data');
41
+ const [isSavvyReady, setIsSavvyReady] = useState(false);
42
+ const dragRef = useRef(null);
43
+ const containerRef = useRef(null);
44
+ // Wait for window.Savvy to be available before rendering panels
45
+ useEffect(() => {
46
+ const checkSavvyReady = () => {
47
+ const savvy = window.Savvy;
48
+ return !!savvy?.getUserData;
49
+ };
50
+ if (checkSavvyReady()) {
51
+ setIsSavvyReady(true);
52
+ return;
53
+ }
54
+ // Poll for Savvy availability with exponential backoff
55
+ let attempt = 0;
56
+ const maxAttempts = 20;
57
+ const baseDelay = 50;
58
+ const poll = () => {
59
+ if (checkSavvyReady()) {
60
+ setIsSavvyReady(true);
61
+ return;
62
+ }
63
+ attempt++;
64
+ if (attempt < maxAttempts) {
65
+ const delay = Math.min(baseDelay * Math.pow(1.5, attempt), 1000);
66
+ setTimeout(poll, delay);
67
+ }
68
+ };
69
+ const timer = setTimeout(poll, baseDelay);
70
+ return () => clearTimeout(timer);
71
+ }, []);
72
+ useEffect(() => {
73
+ const prefs = loadPrefs(embeddableId);
74
+ setCollapsed(prefs.collapsed);
75
+ setHeight(prefs.height);
76
+ setActiveTab(prefs.activeTab);
77
+ }, [embeddableId]);
78
+ // Update body margin to match workbench height
79
+ useEffect(() => {
80
+ const container = containerRef.current;
81
+ if (!container)
82
+ return;
83
+ const updateBodyMargin = () => {
84
+ const workbenchHeight = container.getBoundingClientRect().height;
85
+ document.body.style.marginBottom = `${workbenchHeight}px`;
86
+ };
87
+ // Initial update
88
+ updateBodyMargin();
89
+ // Observe size changes
90
+ const resizeObserver = new ResizeObserver(updateBodyMargin);
91
+ resizeObserver.observe(container);
92
+ return () => {
93
+ resizeObserver.disconnect();
94
+ document.body.style.marginBottom = '';
95
+ };
96
+ }, []);
97
+ useEffect(() => {
98
+ const handler = (event) => {
99
+ // Use event.code (physical key) so Option+K works on Mac; Option changes event.key
100
+ const isToggleShortcut = event.altKey && event.code === 'KeyK';
101
+ if (isToggleShortcut) {
102
+ event.preventDefault();
103
+ setCollapsed((prev) => {
104
+ const next = !prev;
105
+ savePrefs(embeddableId, { collapsed: next, height, activeTab });
106
+ return next;
107
+ });
108
+ }
109
+ };
110
+ window.addEventListener('keydown', handler);
111
+ return () => window.removeEventListener('keydown', handler);
112
+ }, [embeddableId, height, activeTab]);
113
+ const toggleCollapsed = () => {
114
+ setCollapsed((prev) => {
115
+ const next = !prev;
116
+ savePrefs(embeddableId, { collapsed: next, height, activeTab });
117
+ return next;
118
+ });
119
+ };
120
+ const switchTab = (tab) => {
121
+ setActiveTab(tab);
122
+ savePrefs(embeddableId, { collapsed, height, activeTab: tab });
123
+ };
124
+ useEffect(() => {
125
+ const onPointerMove = (event) => {
126
+ const drag = dragRef.current;
127
+ if (!drag || event.pointerId !== drag.pointerId)
128
+ return;
129
+ // Workbench is anchored to the bottom; dragging upward increases height.
130
+ const delta = drag.startY - event.clientY;
131
+ const max = Math.max(MIN_WORKBENCH_HEIGHT, window.innerHeight - 60);
132
+ const nextHeight = Math.max(MIN_WORKBENCH_HEIGHT, Math.min(max, drag.startHeight + delta));
133
+ setHeight(nextHeight);
134
+ };
135
+ const endDrag = (event) => {
136
+ const drag = dragRef.current;
137
+ if (!drag || event.pointerId !== drag.pointerId)
138
+ return;
139
+ dragRef.current = null;
140
+ try {
141
+ document.body.style.userSelect = '';
142
+ document.body.style.cursor = '';
143
+ }
144
+ catch {
145
+ // ignore
146
+ }
147
+ // Persist the final height.
148
+ savePrefs(embeddableId, { collapsed, height, activeTab });
149
+ };
150
+ window.addEventListener('pointermove', onPointerMove);
151
+ window.addEventListener('pointerup', endDrag);
152
+ window.addEventListener('pointercancel', endDrag);
153
+ return () => {
154
+ window.removeEventListener('pointermove', onPointerMove);
155
+ window.removeEventListener('pointerup', endDrag);
156
+ window.removeEventListener('pointercancel', endDrag);
157
+ };
158
+ }, [activeTab, collapsed, embeddableId, height]);
159
+ return (_jsxs("div", { ref: containerRef, className: "fixed inset-x-0 bottom-0 z-2147483647 font-sans", children: [!collapsed && (_jsx("div", { role: "separator", "aria-orientation": "horizontal", title: "Drag to resize", onPointerDown: (event) => {
160
+ event.preventDefault();
161
+ event.stopPropagation();
162
+ dragRef.current = {
163
+ pointerId: event.pointerId,
164
+ startY: event.clientY,
165
+ startHeight: height,
166
+ };
167
+ try {
168
+ ;
169
+ event.currentTarget.setPointerCapture(event.pointerId);
170
+ document.body.style.userSelect = 'none';
171
+ document.body.style.cursor = 'ns-resize';
172
+ }
173
+ catch {
174
+ // ignore
175
+ }
176
+ }, onClick: (event) => {
177
+ // Avoid toggling collapse when clicking the drag handle.
178
+ event.preventDefault();
179
+ event.stopPropagation();
180
+ }, className: "absolute left-1/2 z-10 -translate-x-1/2 -top-1.5 h-3 w-16 cursor-ns-resize touch-none rounded-full border border-slate-500 bg-slate-400 shadow-md hover:bg-slate-300 transition-colors duration-200" })), _jsxs("div", { className: "relative flex items-center justify-between gap-3 border-t border-white/10 bg-slate-950/80 px-3 py-1.5 text-slate-200 shadow-2xl shadow-black/40 backdrop-blur supports-backdrop-filter:bg-slate-950/70", children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("div", { className: "flex cursor-pointer items-center gap-2", onClick: toggleCollapsed, children: [_jsx("div", { className: "text-xs font-semibold tracking-wide text-slate-100", children: "Embeddables Workbench" }), _jsx("div", { className: "rounded-full bg-white/10 px-2 py-0.5 text-[10px] font-medium text-slate-200 ring-1 ring-inset ring-white/10", children: localDev ? 'Local' : 'Beta' })] }), !collapsed && (_jsxs("div", { className: "ml-8 flex items-center gap-1", children: [_jsx("button", { type: "button", onClick: () => switchTab('user-data'), className: `cursor-pointer rounded-lg px-2.5 py-1 text-[11px] font-medium transition-colors ${activeTab === 'user-data'
181
+ ? 'bg-white/15 text-white ring-1 ring-inset ring-white/20'
182
+ : 'text-slate-400 hover:bg-white/5 hover:text-slate-200'}`, children: "User Data" }), _jsx("button", { type: "button", onClick: () => switchTab('experiments'), className: `cursor-pointer rounded-lg px-2.5 py-1 text-[11px] font-medium transition-colors ${activeTab === 'experiments'
183
+ ? 'bg-white/15 text-white ring-1 ring-inset ring-white/20'
184
+ : 'text-slate-400 hover:bg-white/5 hover:text-slate-200'}`, children: "Experiments" }), _jsx("button", { type: "button", onClick: () => switchTab('inspector'), className: `cursor-pointer rounded-lg px-2.5 py-1 text-[11px] font-medium transition-colors ${activeTab === 'inspector'
185
+ ? 'bg-white/15 text-white ring-1 ring-inset ring-white/20'
186
+ : 'text-slate-400 hover:bg-white/5 hover:text-slate-200'}`, children: "Inspect" }), _jsx("button", { type: "button", onClick: () => switchTab('autofill'), className: `cursor-pointer rounded-lg px-2.5 py-1 text-[11px] font-medium transition-colors ${activeTab === 'autofill'
187
+ ? 'bg-white/15 text-white ring-1 ring-inset ring-white/20'
188
+ : 'text-slate-400 hover:bg-white/5 hover:text-slate-200'}`, children: "Autofill" }), _jsx("button", { type: "button", onClick: () => switchTab('actions'), className: `cursor-pointer rounded-lg px-2.5 py-1 text-[11px] font-medium transition-colors ${activeTab === 'actions'
189
+ ? 'bg-white/15 text-white ring-1 ring-inset ring-white/20'
190
+ : 'text-slate-400 hover:bg-white/5 hover:text-slate-200'}`, children: "Actions" }), _jsx("button", { type: "button", onClick: () => switchTab('computed-fields'), className: `cursor-pointer rounded-lg px-2.5 py-1 text-[11px] font-medium transition-colors ${activeTab === 'computed-fields'
191
+ ? 'bg-white/15 text-white ring-1 ring-inset ring-white/20'
192
+ : 'text-slate-400 hover:bg-white/5 hover:text-slate-200'}`, children: "Computed Fields" })] }))] }), _jsxs("div", { className: "flex items-center gap-6", children: [isSavvyReady && _jsx(PageNavigator, { embeddableId: embeddableId }), _jsxs("div", { className: "flex cursor-pointer items-center gap-2 text-slate-300", onClick: toggleCollapsed, children: [_jsxs("div", { className: "hidden text-[11px] text-slate-400 sm:block", children: [collapsed ? 'Show' : 'Hide', " \u2022", ' ', navigator.platform.toLowerCase().includes('mac') ? '⌥K' : 'Alt+K'] }), _jsx("div", { className: "grid h-7 w-7 place-items-center rounded-lg bg-white/5 ring-1 ring-inset ring-white/10", children: _jsx("span", { className: "text-sm leading-none", children: collapsed ? '▲' : '▼' }) })] })] })] }), !collapsed && (_jsx("div", { className: "flex flex-col border-t border-white/10 bg-slate-950/70 px-3 py-3 text-slate-200 shadow-2xl shadow-black/40 backdrop-blur supports-backdrop-filter:bg-slate-950/60", style: { height }, children: !isSavvyReady ? (_jsx("div", { className: "flex h-full items-center justify-center", children: _jsx("div", { className: "text-sm text-slate-400", children: "Waiting for embeddable to initialize..." }) })) : (_jsxs(_Fragment, { children: [activeTab === 'user-data' && _jsx(UserDataPanel, { embeddableId: embeddableId }), activeTab === 'experiments' && _jsx(ExperimentsPanel, { embeddableId: embeddableId }), activeTab === 'inspector' && _jsx(InspectorPanel, { embeddableId: embeddableId }), activeTab === 'autofill' && _jsx(AutofillPanel, { embeddableId: embeddableId }), activeTab === 'actions' && _jsx(ActionsPanel, { embeddableId: embeddableId }), activeTab === 'computed-fields' && (_jsx(ComputedFieldsPanel, { embeddableId: embeddableId }))] })) }))] }));
193
+ }
@@ -0,0 +1,10 @@
1
+ declare global {
2
+ interface Window {
3
+ __embeddables_bootstrap_workbench?: (config: {
4
+ embeddableId: string;
5
+ localDev?: boolean;
6
+ }) => void;
7
+ }
8
+ }
9
+ export {};
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workbench/index.tsx"],"names":[],"mappings":"AAIA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,iCAAiC,CAAC,EAAE,CAAC,MAAM,EAAE;YAC3C,YAAY,EAAE,MAAM,CAAA;YACpB,QAAQ,CAAC,EAAE,OAAO,CAAA;SACnB,KAAK,IAAI,CAAA;KACX;CACF"}
@@ -0,0 +1,44 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { createRoot } from 'react-dom/client';
3
+ import { WorkbenchApp } from './WorkbenchApp.js';
4
+ let workbenchRoot = null;
5
+ // Derive CSS URL from script's URL so it works when script is loaded from a different origin (e.g. CDN)
6
+ const scriptEl = typeof document !== 'undefined' ? document.currentScript : null;
7
+ const WORKBENCH_CSS_URL = scriptEl?.src?.replace(/\.js(\?.*)?$/i, '.css$1') ??
8
+ new URL('/__embeddables_workbench.css', window.location.origin).href;
9
+ async function bootstrapWorkbench(config) {
10
+ const rootElement = document.getElementById('__embeddables_workbench_root');
11
+ if (!rootElement) {
12
+ console.warn('[Workbench] Root element not found');
13
+ return;
14
+ }
15
+ let shadowRoot = rootElement.shadowRoot;
16
+ if (!shadowRoot) {
17
+ shadowRoot = rootElement.attachShadow({ mode: 'open' });
18
+ const cssUrl = WORKBENCH_CSS_URL;
19
+ const link = document.createElement('link');
20
+ link.rel = 'stylesheet';
21
+ link.href = cssUrl;
22
+ shadowRoot.appendChild(link);
23
+ await new Promise((resolve) => {
24
+ if (link.sheet) {
25
+ resolve();
26
+ return;
27
+ }
28
+ link.onload = () => resolve();
29
+ link.onerror = () => resolve();
30
+ });
31
+ const mountPoint = document.createElement('div');
32
+ shadowRoot.appendChild(mountPoint);
33
+ workbenchRoot = createRoot(mountPoint);
34
+ }
35
+ if (workbenchRoot) {
36
+ workbenchRoot.render(_jsx(WorkbenchApp, { embeddableId: config.embeddableId, localDev: config.localDev ?? false }));
37
+ }
38
+ }
39
+ window.__embeddables_bootstrap_workbench = bootstrapWorkbench;
40
+ // Auto-bootstrap if config is already available (fallback if onload handler doesn't fire)
41
+ if (typeof window !== 'undefined' && window.__EMBEDDABLES_WORKBENCH?.embeddableId) {
42
+ const config = window.__EMBEDDABLES_WORKBENCH;
43
+ bootstrapWorkbench({ embeddableId: config.embeddableId, localDev: config.localDev });
44
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@embeddables/cli",
3
- "version": "0.8.0",
3
+ "version": "0.8.2",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "embeddables": "./bin/embeddables.mjs"
@@ -45,6 +45,7 @@
45
45
  "test:verbose": "vitest --reporter verbose",
46
46
  "build:prompts": "node scripts/build-prompts.cjs",
47
47
  "prepack": "node scripts/readme-swap.cjs prepack",
48
+ "prepublishOnly": "npm run build",
48
49
  "postpack": "node scripts/readme-swap.cjs postpack"
49
50
  },
50
51
  "dependencies": {