@embeddables/cli 0.10.0 → 0.12.0

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 (61) hide show
  1. package/.prompts/custom/build-funnel.md +1 -1
  2. package/.prompts/embeddables-cli.md +308 -26
  3. package/dist/assets-manifest.d.ts +31 -0
  4. package/dist/assets-manifest.d.ts.map +1 -0
  5. package/dist/assets-manifest.js +59 -0
  6. package/dist/assets-manifest.js.map +1 -0
  7. package/dist/cli.js +283 -1
  8. package/dist/cli.js.map +1 -1
  9. package/dist/commands/assets-sync.d.ts +6 -0
  10. package/dist/commands/assets-sync.d.ts.map +1 -0
  11. package/dist/commands/assets-sync.js +35 -0
  12. package/dist/commands/assets-sync.js.map +1 -0
  13. package/dist/commands/assets-upload.d.ts +13 -0
  14. package/dist/commands/assets-upload.d.ts.map +1 -0
  15. package/dist/commands/assets-upload.js +475 -0
  16. package/dist/commands/assets-upload.js.map +1 -0
  17. package/dist/commands/experiments-connect.js +22 -19
  18. package/dist/commands/experiments-connect.js.map +1 -1
  19. package/dist/commands/init.d.ts.map +1 -1
  20. package/dist/commands/init.js +37 -91
  21. package/dist/commands/init.js.map +1 -1
  22. package/dist/commands/pull.d.ts.map +1 -1
  23. package/dist/commands/pull.js +3 -0
  24. package/dist/commands/pull.js.map +1 -1
  25. package/dist/compiler/reverse.d.ts.map +1 -1
  26. package/dist/compiler/reverse.js +19 -6
  27. package/dist/compiler/reverse.js.map +1 -1
  28. package/dist/constants/defaultTagStylesV4.d.ts +6 -0
  29. package/dist/constants/defaultTagStylesV4.d.ts.map +1 -0
  30. package/dist/constants/defaultTagStylesV4.js +659 -0
  31. package/dist/constants/defaultTagStylesV4.js.map +1 -0
  32. package/dist/constants.d.ts +2 -0
  33. package/dist/constants.d.ts.map +1 -1
  34. package/dist/constants.js +2 -0
  35. package/dist/constants.js.map +1 -1
  36. package/dist/group-context.d.ts +2 -0
  37. package/dist/group-context.d.ts.map +1 -0
  38. package/dist/group-context.js +29 -0
  39. package/dist/group-context.js.map +1 -0
  40. package/dist/helpers/typeStubs.d.ts +25 -0
  41. package/dist/helpers/typeStubs.d.ts.map +1 -0
  42. package/dist/helpers/typeStubs.js +153 -0
  43. package/dist/helpers/typeStubs.js.map +1 -0
  44. package/dist/prompts/experiments.d.ts +3 -1
  45. package/dist/prompts/experiments.d.ts.map +1 -1
  46. package/dist/prompts/experiments.js +12 -5
  47. package/dist/prompts/experiments.js.map +1 -1
  48. package/dist/workbench/FieldEditorPanel.d.ts +2 -1
  49. package/dist/workbench/FieldEditorPanel.d.ts.map +1 -1
  50. package/dist/workbench/FieldEditorPanel.js +21 -10
  51. package/dist/workbench/FieldEditorPanel.js.map +1 -1
  52. package/dist/workbench/UserDataPanel.d.ts.map +1 -1
  53. package/dist/workbench/UserDataPanel.js +103 -3
  54. package/dist/workbench/UserDataPanel.js.map +1 -1
  55. package/dist/{commands/build-workbench.d.ts → workbench/build.d.ts} +1 -1
  56. package/dist/workbench/build.d.ts.map +1 -0
  57. package/dist/{commands/build-workbench.js → workbench/build.js} +1 -1
  58. package/dist/workbench/build.js.map +1 -0
  59. package/package.json +1 -1
  60. package/dist/commands/build-workbench.d.ts.map +0 -1
  61. package/dist/commands/build-workbench.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaultTagStylesV4.js","sourceRoot":"","sources":["../../src/constants/defaultTagStylesV4.ts"],"names":[],"mappings":"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"}
@@ -4,6 +4,8 @@ export declare const BranchStatus: {
4
4
  };
5
5
  export type BranchStatus = (typeof BranchStatus)[keyof typeof BranchStatus];
6
6
  export declare const WEB_APP_BASE_URL = "https://app.embeddables.com";
7
+ /** Public Cloudflare Worker used to upload embeddable assets. */
8
+ export declare const ASSETS_UPLOAD_WORKER_BASE_URL = "https://upload-to-r2-bucket--public-flow-assets.heysavvy.workers.dev";
7
9
  /** CDN origin that hosts the pre-built workbench assets (workbench.js / workbench.css). */
8
10
  export declare const WORKBENCH_CDN_ORIGIN = "https://embeddables-workbench.heysavvy.workers.dev";
9
11
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;CAGf,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAA;AAE3E,eAAO,MAAM,gBAAgB,gCAAgC,CAAA;AAI7D,2FAA2F;AAC3F,eAAO,MAAM,oBAAoB,uDAAuD,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;CAGf,CAAA;AAEV,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAA;AAE3E,eAAO,MAAM,gBAAgB,gCAAgC,CAAA;AAI7D,iEAAiE;AACjE,eAAO,MAAM,6BAA6B,yEAC8B,CAAA;AAExE,2FAA2F;AAC3F,eAAO,MAAM,oBAAoB,uDAAuD,CAAA"}
package/dist/constants.js CHANGED
@@ -5,6 +5,8 @@ export const BranchStatus = {
5
5
  export const WEB_APP_BASE_URL = 'https://app.embeddables.com';
6
6
  // export const WEB_APP_BASE_URL = 'https://embeddables-web-fpnc2wscy-embeddables.vercel.app'
7
7
  // export const WEB_APP_BASE_URL = 'http://localhost:3000'
8
+ /** Public Cloudflare Worker used to upload embeddable assets. */
9
+ export const ASSETS_UPLOAD_WORKER_BASE_URL = 'https://upload-to-r2-bucket--public-flow-assets.heysavvy.workers.dev';
8
10
  /** CDN origin that hosts the pre-built workbench assets (workbench.js / workbench.css). */
9
11
  export const WORKBENCH_CDN_ORIGIN = 'https://embeddables-workbench.heysavvy.workers.dev';
10
12
  //# sourceMappingURL=constants.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACR,CAAA;AAIV,MAAM,CAAC,MAAM,gBAAgB,GAAG,6BAA6B,CAAA;AAC7D,6FAA6F;AAC7F,0DAA0D;AAE1D,2FAA2F;AAC3F,MAAM,CAAC,MAAM,oBAAoB,GAAG,oDAAoD,CAAA"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;CACR,CAAA;AAIV,MAAM,CAAC,MAAM,gBAAgB,GAAG,6BAA6B,CAAA;AAC7D,6FAA6F;AAC7F,0DAA0D;AAE1D,iEAAiE;AACjE,MAAM,CAAC,MAAM,6BAA6B,GACxC,sEAAsE,CAAA;AAExE,2FAA2F;AAC3F,MAAM,CAAC,MAAM,oBAAoB,GAAG,oDAAoD,CAAA"}
@@ -0,0 +1,2 @@
1
+ export declare function resolveGroupId(explicitGroupId?: string): Promise<string | null>;
2
+ //# sourceMappingURL=group-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-context.d.ts","sourceRoot":"","sources":["../src/group-context.ts"],"names":[],"mappings":"AAIA,wBAAsB,cAAc,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBrF"}
@@ -0,0 +1,29 @@
1
+ import { getAuthenticatedSupabaseClient } from './auth/index.js';
2
+ import { getProjectId, readProjectConfig } from './config/index.js';
3
+ import { promptForProject } from './prompts/index.js';
4
+ export async function resolveGroupId(explicitGroupId) {
5
+ if (explicitGroupId)
6
+ return explicitGroupId;
7
+ const config = readProjectConfig();
8
+ if (config?.org_id)
9
+ return config.org_id;
10
+ const projectId = config?.project_id ?? getProjectId();
11
+ if (projectId) {
12
+ const supabase = await getAuthenticatedSupabaseClient();
13
+ if (supabase) {
14
+ const { data } = await supabase
15
+ .from('projects')
16
+ .select('group_id')
17
+ .eq('id', projectId)
18
+ .maybeSingle();
19
+ if (data?.group_id)
20
+ return data.group_id;
21
+ }
22
+ }
23
+ const selectedProject = await promptForProject();
24
+ if (selectedProject?.org_id)
25
+ return selectedProject.org_id;
26
+ // Last-resort compatibility fallback for older local setups/tests that only know project_id.
27
+ return projectId ?? selectedProject?.id ?? null;
28
+ }
29
+ //# sourceMappingURL=group-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"group-context.js","sourceRoot":"","sources":["../src/group-context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,8BAA8B,EAAE,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAErD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,eAAwB;IAC3D,IAAI,eAAe;QAAE,OAAO,eAAe,CAAA;IAE3C,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAA;IAClC,IAAI,MAAM,EAAE,MAAM;QAAE,OAAO,MAAM,CAAC,MAAM,CAAA;IAExC,MAAM,SAAS,GAAG,MAAM,EAAE,UAAU,IAAI,YAAY,EAAE,CAAA;IACtD,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,QAAQ,GAAG,MAAM,8BAA8B,EAAE,CAAA;QACvD,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,QAAQ;iBAC5B,IAAI,CAAC,UAAU,CAAC;iBAChB,MAAM,CAAC,UAAU,CAAC;iBAClB,EAAE,CAAC,IAAI,EAAE,SAAS,CAAC;iBACnB,WAAW,EAAE,CAAA;YAChB,IAAI,IAAI,EAAE,QAAQ;gBAAE,OAAO,IAAI,CAAC,QAAQ,CAAA;QAC1C,CAAC;IACH,CAAC;IAED,MAAM,eAAe,GAAG,MAAM,gBAAgB,EAAE,CAAA;IAChD,IAAI,eAAe,EAAE,MAAM;QAAE,OAAO,eAAe,CAAC,MAAM,CAAA;IAE1D,6FAA6F;IAC7F,OAAO,SAAS,IAAI,eAAe,EAAE,EAAE,IAAI,IAAI,CAAA;AACjD,CAAC"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Generate type declaration stubs in .types/ (project root) so the editor
3
+ * can resolve imports in generated TSX files without npm install.
4
+ */
5
+ export declare function writeTypeStubs(cwd: string): void;
6
+ /**
7
+ * Ensure a tsconfig exists inside `embeddables/` so pulled page files type-check
8
+ * cleanly in the editor. The editor's TypeScript language server searches upward
9
+ * from each file for the nearest `tsconfig.json` — placing one at `embeddables/tsconfig.json`
10
+ * ensures it's found for all `embeddables/<id>/pages/*.page.tsx` files.
11
+ *
12
+ * In the CLI repo this file is committed directly; in consumer repos it's generated
13
+ * on first `pull` (using .types/ stubs created by writeTypeStubs).
14
+ *
15
+ * Skips if:
16
+ * - `embeddables/tsconfig.json` already exists, OR
17
+ * - The root `tsconfig.json` already includes `embeddables` with the required path mappings
18
+ */
19
+ export declare function ensureEmbeddablesTsconfig(cwd: string): void;
20
+ /**
21
+ * Full typing setup: write type stubs and ensure a tsconfig covers `embeddables/`.
22
+ * Called by both `init` (for consumer repos) and `pull` (for any repo including the CLI itself).
23
+ */
24
+ export declare function ensureTypingSetup(cwd: string): void;
25
+ //# sourceMappingURL=typeStubs.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeStubs.d.ts","sourceRoot":"","sources":["../../src/helpers/typeStubs.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,QA0FzC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CA6C3D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGnD"}
@@ -0,0 +1,153 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import * as stdout from '../stdout.js';
5
+ const __filename = fileURLToPath(import.meta.url);
6
+ const __dirname = path.dirname(__filename);
7
+ /**
8
+ * Generate type declaration stubs in .types/ (project root) so the editor
9
+ * can resolve imports in generated TSX files without npm install.
10
+ */
11
+ export function writeTypeStubs(cwd) {
12
+ const typesDir = path.join(cwd, '.types');
13
+ fs.mkdirSync(typesDir, { recursive: true });
14
+ // Copy compiled types-builder.d.ts → .types/types.d.ts
15
+ // When running from compiled JS: __dirname is dist/helpers/, so ../../dist/types-builder.d.ts works.
16
+ // When running via tsx in dev: __dirname is src/helpers/, so we fall back to dist/.
17
+ const candidates = [
18
+ path.join(__dirname, '..', 'types-builder.d.ts'),
19
+ path.join(__dirname, '..', '..', 'dist', 'types-builder.d.ts'),
20
+ ];
21
+ const typesBuilderDts = candidates.find((p) => fs.existsSync(p));
22
+ if (typesBuilderDts) {
23
+ fs.copyFileSync(typesBuilderDts, path.join(typesDir, 'types.d.ts'));
24
+ }
25
+ else {
26
+ stdout.warn('Could not find types-builder.d.ts — run `npm run build` first');
27
+ }
28
+ fs.writeFileSync(path.join(typesDir, 'react-jsx-runtime.d.ts'), `export namespace JSX {
29
+ type Element = any
30
+ interface IntrinsicElements {
31
+ [elemName: string]: any
32
+ }
33
+ }
34
+ export function jsx(type: any, props: any, key?: string): JSX.Element
35
+ export function jsxs(type: any, props: any, key?: string): JSX.Element
36
+ export const Fragment: unique symbol
37
+ `, 'utf8');
38
+ const componentsWithOwnType = [
39
+ 'BookMeeting',
40
+ 'Chart',
41
+ 'Container',
42
+ 'CustomButton',
43
+ 'CustomHTML',
44
+ 'FileUpload',
45
+ 'InputBox',
46
+ 'Lottie',
47
+ 'MediaEmbed',
48
+ 'MediaImage',
49
+ 'OptionSelector',
50
+ 'PaypalCheckout',
51
+ 'ProgressBar',
52
+ 'Rive',
53
+ 'StripeCheckout',
54
+ 'StripeCheckout2',
55
+ ];
56
+ const baseOnlyComponents = ['PlainText', 'RichText', 'RichTextMarkdown'];
57
+ const importAliases = componentsWithOwnType.map((name) => `${name} as ${name}JSON`).join(', ');
58
+ const importLine = `import type { Base, OptionSelectorButton, ${importAliases} } from './types'`;
59
+ const omitLine = `type JSONOnly = 'type' | 'parent_id' | 'parent_key' | '_location' | 'components' | '__hide_initially' | '__is_child_already_inserted' | 'clearable' | 'central_play_button'`;
60
+ const languagesType = `type Languages = { languages?: Record<string, Record<string, any>> }`;
61
+ const componentPropsType = `type ComponentProps = { props?: Record<string, any> }`;
62
+ const propsTypeLine = `type Props<T> = Omit<T, JSONOnly> & { children?: any } & Languages & ComponentProps`;
63
+ const buttonTypeLine = `export type OptionSelectorButtonWithLanguages = OptionSelectorButton & Languages`;
64
+ const typedExports = componentsWithOwnType
65
+ .map((name) => `export function ${name}(props: Props<${name}JSON>): any`)
66
+ .join('\n');
67
+ const baseExports = baseOnlyComponents
68
+ .map((name) => `export function ${name}(props: Props<Base>): any`)
69
+ .join('\n');
70
+ fs.writeFileSync(path.join(typesDir, 'components.d.ts'), importLine +
71
+ '\n\n' +
72
+ omitLine +
73
+ '\n' +
74
+ languagesType +
75
+ '\n' +
76
+ componentPropsType +
77
+ '\n' +
78
+ propsTypeLine +
79
+ '\n\n' +
80
+ buttonTypeLine +
81
+ '\n\n' +
82
+ typedExports +
83
+ '\n' +
84
+ baseExports +
85
+ '\n', 'utf8');
86
+ }
87
+ /**
88
+ * Ensure a tsconfig exists inside `embeddables/` so pulled page files type-check
89
+ * cleanly in the editor. The editor's TypeScript language server searches upward
90
+ * from each file for the nearest `tsconfig.json` — placing one at `embeddables/tsconfig.json`
91
+ * ensures it's found for all `embeddables/<id>/pages/*.page.tsx` files.
92
+ *
93
+ * In the CLI repo this file is committed directly; in consumer repos it's generated
94
+ * on first `pull` (using .types/ stubs created by writeTypeStubs).
95
+ *
96
+ * Skips if:
97
+ * - `embeddables/tsconfig.json` already exists, OR
98
+ * - The root `tsconfig.json` already includes `embeddables` with the required path mappings
99
+ */
100
+ export function ensureEmbeddablesTsconfig(cwd) {
101
+ const embeddablesDir = path.join(cwd, 'embeddables');
102
+ const embeddablesTsconfigPath = path.join(embeddablesDir, 'tsconfig.json');
103
+ if (fs.existsSync(embeddablesTsconfigPath))
104
+ return;
105
+ // If the root tsconfig already covers embeddables/ with correct paths, skip
106
+ const mainTsconfigPath = path.join(cwd, 'tsconfig.json');
107
+ if (fs.existsSync(mainTsconfigPath)) {
108
+ try {
109
+ const mainTsconfig = JSON.parse(fs.readFileSync(mainTsconfigPath, 'utf8'));
110
+ const include = mainTsconfig.include ?? [];
111
+ const coversEmbeddables = include.some((p) => p === 'embeddables' || p.startsWith('embeddables/'));
112
+ const paths = mainTsconfig.compilerOptions?.paths ?? {};
113
+ const hasJsxRuntimePath = 'react/jsx-runtime' in paths;
114
+ const hasComponentsPath = '@embeddables/cli/components' in paths;
115
+ if (coversEmbeddables && hasJsxRuntimePath && hasComponentsPath)
116
+ return;
117
+ }
118
+ catch {
119
+ // If we can't parse, generate the embeddables tsconfig as a safety net
120
+ }
121
+ }
122
+ // Generated for consumer repos: paths point to .types/ stubs (created by writeTypeStubs)
123
+ fs.mkdirSync(embeddablesDir, { recursive: true });
124
+ const tsconfig = {
125
+ compilerOptions: {
126
+ target: 'esnext',
127
+ module: 'esnext',
128
+ moduleResolution: 'bundler',
129
+ jsx: 'react-jsx',
130
+ noEmit: true,
131
+ strict: false,
132
+ skipLibCheck: true,
133
+ esModuleInterop: true,
134
+ baseUrl: '..',
135
+ paths: {
136
+ 'react/jsx-runtime': ['./.types/react-jsx-runtime.d.ts'],
137
+ '@embeddables/cli/components': ['./.types/components.d.ts'],
138
+ '@embeddables/cli/types': ['./.types/types.d.ts'],
139
+ },
140
+ },
141
+ include: ['.'],
142
+ };
143
+ fs.writeFileSync(embeddablesTsconfigPath, JSON.stringify(tsconfig, null, 2) + '\n', 'utf8');
144
+ }
145
+ /**
146
+ * Full typing setup: write type stubs and ensure a tsconfig covers `embeddables/`.
147
+ * Called by both `init` (for consumer repos) and `pull` (for any repo including the CLI itself).
148
+ */
149
+ export function ensureTypingSetup(cwd) {
150
+ writeTypeStubs(cwd);
151
+ ensureEmbeddablesTsconfig(cwd);
152
+ }
153
+ //# sourceMappingURL=typeStubs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeStubs.js","sourceRoot":"","sources":["../../src/helpers/typeStubs.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,10 @@ export interface ExperimentInfo {
10
10
  export interface PromptForExperimentOptions {
11
11
  /** Custom message for the prompt */
12
12
  message?: string;
13
- /** Filter out experiments already connected to this embeddable ID */
13
+ /** Filter out experiments already connected to this embeddable ID (via flow_ids on the server) */
14
14
  excludeConnectedTo?: string;
15
+ /** Filter out experiments whose experiment_id is already in the local config */
16
+ excludeExperimentIds?: string[];
15
17
  }
16
18
  /**
17
19
  * Fetch experiments for a project from Supabase (using experiments_extended view)
@@ -1 +1 @@
1
- {"version":3,"file":"experiments.d.ts","sourceRoot":"","sources":["../../src/prompts/experiments.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,qEAAqE;IACrE,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAuC1F;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAqDnE"}
1
+ {"version":3,"file":"experiments.d.ts","sourceRoot":"","sources":["../../src/prompts/experiments.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAA;IACV,aAAa,EAAE,MAAM,CAAA;IACrB,cAAc,EAAE,MAAM,CAAA;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,MAAM,EAAE,GAAG,IAAI,CAAA;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,oCAAoC;IACpC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,kGAAkG;IAClG,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,gFAAgF;IAChF,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAA;CAChC;AAED;;GAEG;AACH,wBAAsB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAuC1F;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,0BAA+B,GACvC,OAAO,CAAC;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,CAkEnE"}
@@ -46,17 +46,20 @@ export async function fetchProjectExperiments(projectId) {
46
46
  * Returns null if no experiments found or user cancels
47
47
  */
48
48
  export async function promptForExperiment(projectId, options = {}) {
49
- const { message = 'Select an experiment to connect:', excludeConnectedTo } = options;
49
+ const { message = 'Select an experiment to connect:', excludeConnectedTo, excludeExperimentIds, } = options;
50
50
  const experiments = await fetchProjectExperiments(projectId);
51
51
  let filtered = experiments;
52
+ if (excludeExperimentIds && excludeExperimentIds.length > 0) {
53
+ filtered = filtered.filter((e) => !excludeExperimentIds.includes(e.experiment_id));
54
+ }
52
55
  if (excludeConnectedTo) {
53
- filtered = experiments.filter((e) => {
56
+ filtered = filtered.filter((e) => {
54
57
  const connected = e.flow_ids ?? [e.flow_id];
55
58
  return !connected.includes(excludeConnectedTo);
56
59
  });
57
60
  }
58
61
  if (filtered.length === 0) {
59
- if (excludeConnectedTo && experiments.length > 0) {
62
+ if ((excludeConnectedTo || excludeExperimentIds?.length) && experiments.length > 0) {
60
63
  stdout.print(pc.yellow('All experiments in this project are already connected to this embeddable.'));
61
64
  }
62
65
  else {
@@ -75,8 +78,12 @@ export async function promptForExperiment(projectId, options = {}) {
75
78
  message,
76
79
  choices,
77
80
  suggest: (input, choices) => Promise.resolve(choices.filter((c) => (c.title?.toLowerCase().includes(input.toLowerCase()) ?? false) ||
78
- String(c.value.experiment_key).toLowerCase().includes(input.toLowerCase()) ||
79
- String(c.value.experiment_id).toLowerCase().includes(input.toLowerCase()))),
81
+ String(c.value.experiment_key)
82
+ .toLowerCase()
83
+ .includes(input.toLowerCase()) ||
84
+ String(c.value.experiment_id)
85
+ .toLowerCase()
86
+ .includes(input.toLowerCase()))),
80
87
  });
81
88
  const selected = response.experiment;
82
89
  if (!selected) {
@@ -1 +1 @@
1
- {"version":3,"file":"experiments.js","sourceRoot":"","sources":["../../src/prompts/experiments.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAA;AAE3B,OAAO,EAAE,8BAA8B,EAAE,MAAM,kBAAkB,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,cAAc,CAAA;AAmBtC;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,uBAAuB,CAAC,SAAiB;IAC7D,MAAM,QAAQ,GAAG,MAAM,8BAA8B,EAAE,CAAA;IACvD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,QAAQ;aACnC,IAAI,CAAC,sBAAsB,CAAC;aAC5B,MAAM,CAAC,oEAAoE,CAAC;aAC5E,EAAE,CAAC,YAAY,EAAE,SAAS,CAAC;aAC3B,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAAA;QAExD,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,gCAAgC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;YACvE,OAAO,EAAE,CAAA;QACX,CAAC;QAED,MAAM,WAAW,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;YAC7C,EAAE,EAAE,GAAG,CAAC,EAAE;YACV,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,cAAc,EAAE,GAAG,CAAC,cAAc;YAClC,IAAI,EAAE,GAAG,CAAC,IAAI,IAAI,IAAI;YACtB,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,OAAO;YAC7B,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,QAAQ,EAAE,GAAG,CAAC,QAAQ,IAAI,IAAI;SAC/B,CAAC,CAAC,CAAA;QAEH,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACxB,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,cAAc,CAAA;YACzC,MAAM,MAAM,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,cAAc,CAAA;YACzC,OAAO,MAAM,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAA;QACzE,CAAC,CAAC,CAAA;QAEF,OAAO,WAAW,CAAA;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAC,CAAA;QAC7D,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,SAAiB,EACjB,UAAsC,EAAE;IAExC,MAAM,EAAE,OAAO,GAAG,kCAAkC,EAAE,kBAAkB,EAAE,GAAG,OAAO,CAAA;IAEpF,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,SAAS,CAAC,CAAA;IAE5D,IAAI,QAAQ,GAAG,WAAW,CAAA;IAC1B,IAAI,kBAAkB,EAAE,CAAC;QACvB,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;YAClC,MAAM,SAAS,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;YAC3C,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,kBAAkB,CAAC,CAAA;QAChD,CAAC,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,IAAI,kBAAkB,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjD,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,2EAA2E,CAAC,CAAC,CAAA;QACtG,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,uCAAuC,CAAC,CAAC,CAAA;QAClE,CAAC;QACD,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACnC,KAAK,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,cAAc;QACjC,WAAW,EAAE,GAAG,CAAC,CAAC,cAAc,KAAK,CAAC,CAAC,aAAa,GAAG;QACvD,KAAK,EAAE,CAAC;KACT,CAAC,CAAC,CAAA;IAEH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC;QAC5B,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,YAAY;QAClB,OAAO;QACP,OAAO;QACP,OAAO,EAAE,CAAC,KAAa,EAAE,OAAyB,EAAE,EAAE,CACpD,OAAO,CAAC,OAAO,CACb,OAAO,CAAC,MAAM,CACZ,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI,KAAK,CAAC;YAC/D,MAAM,CAAE,CAAC,CAAC,KAAwB,CAAC,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YAC9F,MAAM,CAAE,CAAC,CAAC,KAAwB,CAAC,aAAa,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAChG,CACF;KACJ,CAAC,CAAA;IAEF,MAAM,QAAQ,GAAG,QAAQ,CAAC,UAAwC,CAAA;IAClE,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO;QACL,aAAa,EAAE,QAAQ,CAAC,aAAa;QACrC,cAAc,EAAE,QAAQ,CAAC,cAAc;KACxC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"experiments.js","sourceRoot":"","sources":["../../src/prompts/experiments.ts"],"names":[],"mappings":"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"}
@@ -3,7 +3,8 @@ type FieldEditorPanelProps = {
3
3
  rawJson: string;
4
4
  onUpdateUserData: (key: string, value: unknown) => void;
5
5
  keyFilter: string;
6
+ selectedLanguage?: string;
6
7
  };
7
- export declare function FieldEditorPanel({ embeddableId, rawJson, onUpdateUserData, keyFilter, }: FieldEditorPanelProps): import("react/jsx-runtime").JSX.Element;
8
+ export declare function FieldEditorPanel({ embeddableId, rawJson, onUpdateUserData, keyFilter, selectedLanguage, }: FieldEditorPanelProps): import("react/jsx-runtime").JSX.Element;
8
9
  export {};
9
10
  //# sourceMappingURL=FieldEditorPanel.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FieldEditorPanel.d.ts","sourceRoot":"","sources":["../../src/workbench/FieldEditorPanel.tsx"],"names":[],"mappings":"AAGA,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACvD,SAAS,EAAE,MAAM,CAAA;CAClB,CAAA;AAkND,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,SAAS,GACV,EAAE,qBAAqB,2CA+7BvB"}
1
+ {"version":3,"file":"FieldEditorPanel.d.ts","sourceRoot":"","sources":["../../src/workbench/FieldEditorPanel.tsx"],"names":[],"mappings":"AAGA,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,gBAAgB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IACvD,SAAS,EAAE,MAAM,CAAA;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAA;CAC1B,CAAA;AAqND,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,EACZ,OAAO,EACP,gBAAgB,EAChB,SAAS,EACT,gBAAuB,GACxB,EAAE,qBAAqB,2CAq8BvB"}
@@ -173,7 +173,13 @@ function generateTestValue(field) {
173
173
  return '5\'10"';
174
174
  return 'Test value';
175
175
  }
176
- export function FieldEditorPanel({ embeddableId, rawJson, onUpdateUserData, keyFilter, }) {
176
+ function getLocalizedProp(obj, prop, lang) {
177
+ if (!lang || lang === 'en')
178
+ return obj[prop];
179
+ const langKey = `lang--${lang}--${prop}`;
180
+ return langKey in obj ? obj[langKey] : obj[prop];
181
+ }
182
+ export function FieldEditorPanel({ embeddableId, rawJson, onUpdateUserData, keyFilter, selectedLanguage = 'en', }) {
177
183
  const [fields, setFields] = useState([]);
178
184
  const [allComponentFields, setAllComponentFields] = useState([]);
179
185
  const [expandedCategories, setExpandedCategories] = useState(new Set(['built-in', 'component', 'computed', 'registered', 'extra']));
@@ -206,19 +212,24 @@ export function FieldEditorPanel({ embeddableId, rawJson, onUpdateUserData, keyF
206
212
  existing.types.add(comp.type);
207
213
  if (pageId)
208
214
  existing.pageIds.add(pageId);
215
+ const compAny = comp;
209
216
  if (comp.type === 'InputBox') {
210
217
  const inputComp = comp;
211
218
  existing.inputType = inputComp.input_type;
212
- existing.label = comp.label;
219
+ existing.label = getLocalizedProp(compAny, 'label', selectedLanguage);
213
220
  }
214
221
  else if (comp.type === 'OptionSelector') {
215
222
  const optComp = comp;
216
- existing.options = optComp.buttons?.map((b) => ({ key: b.key, text: b.text })) || [];
217
- existing.label = comp.label;
223
+ existing.options =
224
+ optComp.buttons?.map((b) => ({
225
+ key: b.key,
226
+ text: getLocalizedProp(b, 'text', selectedLanguage),
227
+ })) || [];
228
+ existing.label = getLocalizedProp(compAny, 'label', selectedLanguage);
218
229
  existing.isMultiple = optComp.multiple;
219
230
  }
220
231
  else if (comp.label) {
221
- existing.label = comp.label;
232
+ existing.label = getLocalizedProp(compAny, 'label', selectedLanguage);
222
233
  }
223
234
  componentMeta.set(comp.key, existing);
224
235
  // Process nested components
@@ -339,7 +350,7 @@ export function FieldEditorPanel({ embeddableId, rawJson, onUpdateUserData, keyF
339
350
  return a.key.localeCompare(b.key);
340
351
  });
341
352
  setFields(fieldsList);
342
- }, [rawJson, embeddableId, savvy]);
353
+ }, [rawJson, embeddableId, savvy, selectedLanguage]);
343
354
  useEffect(() => {
344
355
  analyzeFields();
345
356
  }, [analyzeFields]);
@@ -529,7 +540,7 @@ export function FieldEditorPanel({ embeddableId, rawJson, onUpdateUserData, keyF
529
540
  const isFilled = field.value !== null && field.value !== undefined && field.value !== '';
530
541
  return (_jsxs("div", { className: `flex items-center gap-2 rounded-lg px-2.5 py-2 ${isFilled
531
542
  ? 'bg-emerald-500/10 ring-1 ring-inset ring-emerald-500/20'
532
- : 'bg-white/5 ring-1 ring-inset ring-white/10'}`, children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [_jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded bg-slate-800 text-xs", children: "\u2022" }), _jsx("div", { className: "min-w-0 flex-1", children: _jsx("div", { className: "truncate text-xs font-medium text-slate-100", title: field.key, children: field.key }) })] }), _jsx("div", { className: "flex shrink-0 items-center gap-2", children: hasOptions ? (_jsxs("select", { value: formatValue(field.value), onChange: (e) => handleValueChange(field, e.target.value), className: "max-w-[200px] truncate rounded-lg bg-slate-800 px-2 py-1.5 text-[11px] text-slate-100 ring-1 ring-inset ring-slate-600 focus:outline-none focus:ring-2 focus:ring-sky-500/60", children: [_jsx("option", { value: "", children: "-- Select --" }), field.options.map((opt, idx) => (_jsx("option", { value: opt.key ?? '', children: opt.text || opt.key || '(empty)' }, opt.key ?? idx)))] })) : (_jsx("input", { type: "text", value: formatValue(field.value), onChange: (e) => {
543
+ : 'bg-white/5 ring-1 ring-inset ring-white/10'}`, children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [_jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded bg-slate-800 text-xs", children: "\u2022" }), _jsx("div", { className: "min-w-0 flex-1", children: _jsx("div", { className: "truncate text-xs font-medium text-slate-100", title: field.key, children: field.key }) })] }), _jsx("div", { className: "flex shrink-0 items-center gap-2", children: hasOptions ? (_jsxs("select", { value: formatValue(field.value), onChange: (e) => handleValueChange(field, e.target.value), className: "max-w-[200px] truncate rounded-lg bg-slate-800 pl-2 pr-6 py-1.5 text-[11px] text-slate-100 ring-1 ring-inset ring-slate-600 focus:outline-none focus:ring-2 focus:ring-sky-500/60", children: [_jsx("option", { value: "", children: "-- Select --" }), field.options.map((opt, idx) => (_jsx("option", { value: opt.key ?? '', children: opt.text || opt.key || '(empty)' }, opt.key ?? idx)))] })) : (_jsx("input", { type: "text", value: formatValue(field.value), onChange: (e) => {
533
544
  const input = e.target;
534
545
  const value = input.value;
535
546
  restoreCursorAfterUpdate(input, () => handleValueChange(field, value));
@@ -571,11 +582,11 @@ export function FieldEditorPanel({ embeddableId, rawJson, onUpdateUserData, keyF
571
582
  : field.options;
572
583
  return (_jsxs("div", { className: `flex flex-col gap-2 rounded-lg px-2.5 py-2 ${isFilled
573
584
  ? 'bg-emerald-500/10 ring-1 ring-inset ring-emerald-500/20'
574
- : 'bg-white/5 ring-1 ring-inset ring-white/10'}`, children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [_jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded bg-slate-800 text-xs", title: field.componentType || field.category, children: getComponentTypeIcon(field.componentType) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: `truncate text-xs font-medium text-slate-100 ${!field.label ? 'font-mono' : ''}`, title: field.key, children: field.label || field.key }), _jsxs("div", { className: "flex items-center gap-2 text-[10px] text-slate-500", children: [field.label && field.label !== field.key && (_jsxs(_Fragment, { children: [_jsx("span", { className: "font-mono text-slate-300", children: field.key }), _jsx("span", { children: "\u2022" })] })), field.componentType && (_jsxs(_Fragment, { children: [_jsx("span", { children: field.componentType }), field.isMultiple && (_jsxs(_Fragment, { children: [_jsx("span", { children: "\u2022" }), _jsx("span", { children: "Multi-select" })] })), field.inputType && (_jsxs(_Fragment, { children: [_jsx("span", { children: "\u2022" }), _jsx("span", { className: "font-mono", children: getInputTypeLabel(field.inputType) })] }))] })), field.options && field.options.length > 0 && (_jsxs(_Fragment, { children: [_jsx("span", { children: "\u2022" }), _jsxs("span", { children: [field.options.length, " options"] })] }))] })] })] }), !isMultiSelect && (_jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [hasOptions ? (_jsxs("select", { value: formatValue(field.value), onChange: (e) => handleValueChange(field, e.target.value), className: "max-w-[180px] truncate rounded-lg bg-slate-800 px-2 py-1.5 text-[11px] text-slate-100 ring-1 ring-inset ring-slate-600 focus:outline-none focus:ring-2 focus:ring-sky-500/60", children: [_jsx("option", { value: "", children: "-- Select --" }), field.options.map((opt, idx) => (_jsx("option", { value: opt.key ?? '', children: opt.text || opt.key || '(empty)' }, opt.key ?? idx)))] })) : (_jsx("input", { type: "text", value: formatValue(field.value), onChange: (e) => {
585
+ : 'bg-white/5 ring-1 ring-inset ring-white/10'}`, children: [_jsxs("div", { className: "flex items-center gap-2", children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [_jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded bg-slate-800 text-xs", title: field.componentType || field.category, children: getComponentTypeIcon(field.componentType) }), _jsxs("div", { className: "min-w-0 flex-1", children: [_jsx("div", { className: `truncate text-xs font-medium text-slate-100 ${!field.label ? 'font-mono' : ''}`, title: field.key, children: field.label || field.key }), _jsxs("div", { className: "flex items-center gap-2 text-[10px] text-slate-500", children: [field.label && field.label !== field.key && (_jsxs(_Fragment, { children: [_jsx("span", { className: "font-mono text-slate-300", children: field.key }), _jsx("span", { children: "\u2022" })] })), field.componentType && (_jsxs(_Fragment, { children: [_jsx("span", { children: field.componentType }), field.isMultiple && (_jsxs(_Fragment, { children: [_jsx("span", { children: "\u2022" }), _jsx("span", { children: "Multi-select" })] })), field.inputType && (_jsxs(_Fragment, { children: [_jsx("span", { children: "\u2022" }), _jsx("span", { className: "font-mono", children: getInputTypeLabel(field.inputType) })] }))] })), field.options && field.options.length > 0 && (_jsxs(_Fragment, { children: [_jsx("span", { children: "\u2022" }), _jsxs("span", { children: [field.options.length, " options"] })] }))] })] })] }), !isMultiSelect && (_jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [hasOptions ? (_jsxs("select", { value: formatValue(field.value), onChange: (e) => handleValueChange(field, e.target.value), className: "max-w-[180px] truncate rounded-lg bg-slate-800 pl-2 pr-6 py-1.5 text-[11px] text-slate-100 ring-1 ring-inset ring-slate-600 focus:outline-none focus:ring-2 focus:ring-sky-500/60", children: [_jsx("option", { value: "", children: "-- Select --" }), field.options.map((opt, idx) => (_jsx("option", { value: opt.key ?? '', children: opt.text || opt.key || '(empty)' }, opt.key ?? idx)))] })) : (_jsx("input", { type: "text", value: formatValue(field.value), onChange: (e) => {
575
586
  const input = e.target;
576
587
  const value = input.value;
577
588
  restoreCursorAfterUpdate(input, () => handleValueChange(field, value));
578
- }, className: "w-32 rounded-lg bg-slate-800 px-2 py-1.5 text-[11px] font-mono text-slate-100 ring-1 ring-inset ring-slate-600 placeholder:text-slate-500 focus:outline-none focus:ring-2 focus:ring-sky-500/60", placeholder: "null" })), isFilled ? (_jsx("button", { type: "button", onClick: () => handleClear(field), className: "cursor-pointer rounded-lg bg-slate-700 px-2 py-1 text-[10px] font-semibold text-rose-300 ring-1 ring-inset ring-slate-600 hover:bg-slate-600 hover:text-rose-200", children: "Clear" })) : (_jsx("button", { type: "button", onClick: () => handleFill(field), className: "cursor-pointer rounded-lg bg-slate-700 px-2 py-1 text-[10px] font-semibold text-teal-300 ring-1 ring-inset ring-slate-600 hover:bg-slate-600 hover:text-teal-200", children: "Fill" }))] })), isMultiSelect && (_jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsxs("select", { value: "", onChange: (e) => handleMultiSelectAdd(field, e.target.value), className: "max-w-[180px] truncate rounded-lg bg-slate-800 px-2 py-1.5 text-[11px] text-slate-100 ring-1 ring-inset ring-slate-600 focus:outline-none focus:ring-2 focus:ring-sky-500/60", children: [_jsx("option", { value: "", children: "+ Add..." }), availableOptions.map((opt, idx) => (_jsx("option", { value: opt.key ?? '', children: opt.text || opt.key || '(empty)' }, opt.key ?? idx)))] }), isFilled && (_jsx("button", { type: "button", onClick: () => handleClear(field), className: "cursor-pointer rounded-lg bg-slate-700 px-2 py-1 text-[10px] font-semibold text-rose-300 ring-1 ring-inset ring-slate-600 hover:bg-slate-600 hover:text-rose-200", children: "Clear All" }))] }))] }), isMultiSelect && selectedValues.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-1.5 pl-8", children: selectedValues.map((val) => (_jsxs("span", { className: "inline-flex items-center gap-1 rounded-md bg-emerald-500/20 px-2 py-0.5 text-[11px] font-medium text-emerald-200 ring-1 ring-inset ring-emerald-500/30", children: [getOptionText(field, val), _jsx("button", { type: "button", onClick: () => handleMultiSelectRemove(field, val), className: "ml-0.5 cursor-pointer rounded hover:bg-sky-500/30 hover:text-sky-100", title: "Remove", children: _jsx("svg", { className: "h-3 w-3", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M3 3l6 6M9 3l-6 6" }) }) })] }, val))) }))] }, field.key));
589
+ }, className: "w-32 rounded-lg bg-slate-800 px-2 py-1.5 text-[11px] font-mono text-slate-100 ring-1 ring-inset ring-slate-600 placeholder:text-slate-500 focus:outline-none focus:ring-2 focus:ring-sky-500/60", placeholder: "null" })), isFilled ? (_jsx("button", { type: "button", onClick: () => handleClear(field), className: "cursor-pointer rounded-lg bg-slate-700 px-2 py-1 text-[10px] font-semibold text-rose-300 ring-1 ring-inset ring-slate-600 hover:bg-slate-600 hover:text-rose-200", children: "Clear" })) : (_jsx("button", { type: "button", onClick: () => handleFill(field), className: "cursor-pointer rounded-lg bg-slate-700 px-2 py-1 text-[10px] font-semibold text-teal-300 ring-1 ring-inset ring-slate-600 hover:bg-slate-600 hover:text-teal-200", children: "Fill" }))] })), isMultiSelect && (_jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsxs("select", { value: "", onChange: (e) => handleMultiSelectAdd(field, e.target.value), className: "max-w-[180px] truncate rounded-lg bg-slate-800 pl-2 pr-6 py-1.5 text-[11px] text-slate-100 ring-1 ring-inset ring-slate-600 focus:outline-none focus:ring-2 focus:ring-sky-500/60", children: [_jsx("option", { value: "", children: "+ Add..." }), availableOptions.map((opt, idx) => (_jsx("option", { value: opt.key ?? '', children: opt.text || opt.key || '(empty)' }, opt.key ?? idx)))] }), isFilled && (_jsx("button", { type: "button", onClick: () => handleClear(field), className: "cursor-pointer rounded-lg bg-slate-700 px-2 py-1 text-[10px] font-semibold text-rose-300 ring-1 ring-inset ring-slate-600 hover:bg-slate-600 hover:text-rose-200", children: "Clear All" }))] }))] }), isMultiSelect && selectedValues.length > 0 && (_jsx("div", { className: "flex flex-wrap gap-1.5 pl-8", children: selectedValues.map((val) => (_jsxs("span", { className: "inline-flex items-center gap-1 rounded-md bg-emerald-500/20 px-2 py-0.5 text-[11px] font-medium text-emerald-200 ring-1 ring-inset ring-emerald-500/30", children: [getOptionText(field, val), _jsx("button", { type: "button", onClick: () => handleMultiSelectRemove(field, val), className: "ml-0.5 cursor-pointer rounded hover:bg-sky-500/30 hover:text-sky-100", title: "Remove", children: _jsx("svg", { className: "h-3 w-3", viewBox: "0 0 12 12", fill: "none", stroke: "currentColor", strokeWidth: "2", children: _jsx("path", { d: "M3 3l6 6M9 3l-6 6" }) }) })] }, val))) }))] }, field.key));
579
590
  };
580
591
  // Render typed field (for computed, registered, extra)
581
592
  const renderTypedField = (field) => {
@@ -583,7 +594,7 @@ export function FieldEditorPanel({ embeddableId, rawJson, onUpdateUserData, keyF
583
594
  const isFilled = field.hasValue;
584
595
  return (_jsxs("div", { className: `flex items-center gap-2 rounded-lg px-2.5 py-2 ${isFilled
585
596
  ? 'bg-emerald-500/10 ring-1 ring-inset ring-emerald-500/20'
586
- : 'bg-white/5 ring-1 ring-inset ring-white/10'}`, children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [_jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded bg-slate-800 text-xs", children: "\u2022" }), _jsx("div", { className: "min-w-0 flex-1", children: _jsx("div", { className: "truncate text-xs font-medium text-slate-100", title: field.key, children: field.key }) })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsxs("select", { value: currentType, onChange: (e) => handleTypeChange(field.key, e.target.value, field.value), className: "w-20 rounded-lg bg-slate-800 px-2 py-1.5 text-[11px] text-slate-100 ring-1 ring-inset ring-slate-600 focus:outline-none focus:ring-2 focus:ring-sky-500/60", children: [_jsx("option", { value: "null", children: "null" }), _jsx("option", { value: "boolean", children: "boolean" }), _jsx("option", { value: "text", children: "text" }), _jsx("option", { value: "number", children: "number" }), _jsx("option", { value: "json", children: "JSON" })] }), currentType === 'null' ? (_jsx("span", { className: "w-24 rounded-lg bg-slate-800/50 px-2 py-1.5 text-center text-[11px] font-mono text-slate-500 ring-1 ring-inset ring-slate-700", children: "null" })) : currentType === 'boolean' ? (_jsxs("select", { value: String(field.value ?? false), onChange: (e) => handleTypedValueChange(field.key, 'boolean', e.target.value), className: "w-24 rounded-lg bg-slate-800 px-2 py-1.5 text-[11px] text-slate-100 ring-1 ring-inset ring-slate-600 focus:outline-none focus:ring-2 focus:ring-sky-500/60", children: [_jsx("option", { value: "true", children: "true" }), _jsx("option", { value: "false", children: "false" })] })) : currentType === 'number' ? (_jsx("input", { type: "number", value: field.value === null || field.value === undefined ? '' : String(field.value), onChange: (e) => {
597
+ : 'bg-white/5 ring-1 ring-inset ring-white/10'}`, children: [_jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [_jsx("span", { className: "flex h-6 w-6 shrink-0 items-center justify-center rounded bg-slate-800 text-xs", children: "\u2022" }), _jsx("div", { className: "min-w-0 flex-1", children: _jsx("div", { className: "truncate text-xs font-medium text-slate-100", title: field.key, children: field.key }) })] }), _jsxs("div", { className: "flex shrink-0 items-center gap-2", children: [_jsxs("select", { value: currentType, onChange: (e) => handleTypeChange(field.key, e.target.value, field.value), className: "w-20 rounded-lg bg-slate-800 pl-2 pr-6 py-1.5 text-[11px] text-slate-100 ring-1 ring-inset ring-slate-600 focus:outline-none focus:ring-2 focus:ring-sky-500/60", children: [_jsx("option", { value: "null", children: "null" }), _jsx("option", { value: "boolean", children: "boolean" }), _jsx("option", { value: "text", children: "text" }), _jsx("option", { value: "number", children: "number" }), _jsx("option", { value: "json", children: "JSON" })] }), currentType === 'null' ? (_jsx("span", { className: "w-24 rounded-lg bg-slate-800/50 px-2 py-1.5 text-center text-[11px] font-mono text-slate-500 ring-1 ring-inset ring-slate-700", children: "null" })) : currentType === 'boolean' ? (_jsxs("select", { value: String(field.value ?? false), onChange: (e) => handleTypedValueChange(field.key, 'boolean', e.target.value), className: "w-24 rounded-lg bg-slate-800 pl-2 pr-6 py-1.5 text-[11px] text-slate-100 ring-1 ring-inset ring-slate-600 focus:outline-none focus:ring-2 focus:ring-sky-500/60", children: [_jsx("option", { value: "true", children: "true" }), _jsx("option", { value: "false", children: "false" })] })) : currentType === 'number' ? (_jsx("input", { type: "number", value: field.value === null || field.value === undefined ? '' : String(field.value), onChange: (e) => {
587
598
  const input = e.target;
588
599
  const value = input.value;
589
600
  restoreCursorAfterUpdate(input, () => handleTypedValueChange(field.key, 'number', value));