@embeddables/cli 0.15.0-beta.0 → 0.15.1-beta.1

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 (99) hide show
  1. package/.prompts/custom/build-funnel.md +1 -1
  2. package/.prompts/embeddables-cli.md +1 -1
  3. package/.prompts/short-rule-body.md +2 -2
  4. package/dist/commands/dev.d.ts.map +1 -1
  5. package/dist/commands/dev.js +3 -0
  6. package/dist/commands/dev.js.map +1 -1
  7. package/dist/commands/inspect.d.ts.map +1 -1
  8. package/dist/commands/inspect.js +24 -16
  9. package/dist/commands/inspect.js.map +1 -1
  10. package/dist/commands/pull.d.ts.map +1 -1
  11. package/dist/commands/pull.js +20 -59
  12. package/dist/commands/pull.js.map +1 -1
  13. package/dist/commands/save.js +8 -1
  14. package/dist/commands/save.js.map +1 -1
  15. package/dist/commands/update-project-files.d.ts.map +1 -1
  16. package/dist/commands/update-project-files.js +45 -26
  17. package/dist/commands/update-project-files.js.map +1 -1
  18. package/dist/compiler/errors.d.ts +13 -0
  19. package/dist/compiler/errors.d.ts.map +1 -1
  20. package/dist/compiler/errors.js +16 -0
  21. package/dist/compiler/errors.js.map +1 -1
  22. package/dist/compiler/reverse.d.ts.map +1 -1
  23. package/dist/compiler/reverse.js +8 -7
  24. package/dist/compiler/reverse.js.map +1 -1
  25. package/dist/constants.d.ts +8 -1
  26. package/dist/constants.d.ts.map +1 -1
  27. package/dist/constants.js +9 -1
  28. package/dist/constants.js.map +1 -1
  29. package/dist/helpers/reverseCompileWithRetry.d.ts +60 -0
  30. package/dist/helpers/reverseCompileWithRetry.d.ts.map +1 -0
  31. package/dist/helpers/reverseCompileWithRetry.js +96 -0
  32. package/dist/helpers/reverseCompileWithRetry.js.map +1 -0
  33. package/dist/proxy/injectWorkbench.d.ts +4 -0
  34. package/dist/proxy/injectWorkbench.d.ts.map +1 -1
  35. package/dist/proxy/injectWorkbench.js +5 -1
  36. package/dist/proxy/injectWorkbench.js.map +1 -1
  37. package/dist/proxy/server.d.ts +1 -0
  38. package/dist/proxy/server.d.ts.map +1 -1
  39. package/dist/proxy/server.js +12 -0
  40. package/dist/proxy/server.js.map +1 -1
  41. package/dist/workbench/FeedbackPanel.d.ts +4 -0
  42. package/dist/workbench/FeedbackPanel.d.ts.map +1 -1
  43. package/dist/workbench/FeedbackPanel.js +924 -57
  44. package/dist/workbench/FeedbackPanel.js.map +1 -1
  45. package/dist/workbench/FieldEditorPanel.d.ts.map +1 -1
  46. package/dist/workbench/FieldEditorPanel.js +3 -2
  47. package/dist/workbench/FieldEditorPanel.js.map +1 -1
  48. package/dist/workbench/InspectorPanel.d.ts.map +1 -1
  49. package/dist/workbench/InspectorPanel.js +3 -172
  50. package/dist/workbench/InspectorPanel.js.map +1 -1
  51. package/dist/workbench/MediaLightbox.d.ts +20 -0
  52. package/dist/workbench/MediaLightbox.d.ts.map +1 -0
  53. package/dist/workbench/MediaLightbox.js +76 -0
  54. package/dist/workbench/MediaLightbox.js.map +1 -0
  55. package/dist/workbench/PageThumbnailStrip.d.ts +14 -1
  56. package/dist/workbench/PageThumbnailStrip.d.ts.map +1 -1
  57. package/dist/workbench/PageThumbnailStrip.js +227 -47
  58. package/dist/workbench/PageThumbnailStrip.js.map +1 -1
  59. package/dist/workbench/WorkbenchApp.d.ts +8 -1
  60. package/dist/workbench/WorkbenchApp.d.ts.map +1 -1
  61. package/dist/workbench/WorkbenchApp.js +14 -5
  62. package/dist/workbench/WorkbenchApp.js.map +1 -1
  63. package/dist/workbench/WorkbenchModalOverlay.d.ts +20 -0
  64. package/dist/workbench/WorkbenchModalOverlay.d.ts.map +1 -0
  65. package/dist/workbench/WorkbenchModalOverlay.js +45 -0
  66. package/dist/workbench/WorkbenchModalOverlay.js.map +1 -0
  67. package/dist/workbench/cloudflare/public/_headers +4 -0
  68. package/dist/workbench/cloudflare/public/workbench.css +2148 -0
  69. package/dist/workbench/cloudflare/public/workbench.js +709 -0
  70. package/dist/workbench/cloudflare/wrangler.jsonc +9 -0
  71. package/dist/workbench/conditionEvaluator.d.ts +6 -0
  72. package/dist/workbench/conditionEvaluator.d.ts.map +1 -0
  73. package/dist/workbench/conditionEvaluator.js +111 -0
  74. package/dist/workbench/conditionEvaluator.js.map +1 -0
  75. package/dist/workbench/feedbackSessionsStorage.d.ts +24 -0
  76. package/dist/workbench/feedbackSessionsStorage.d.ts.map +1 -0
  77. package/dist/workbench/feedbackSessionsStorage.js +80 -0
  78. package/dist/workbench/feedbackSessionsStorage.js.map +1 -0
  79. package/dist/workbench/index.d.ts +4 -0
  80. package/dist/workbench/index.d.ts.map +1 -1
  81. package/dist/workbench/index.js +42 -2
  82. package/dist/workbench/index.js.map +1 -1
  83. package/dist/workbench/pageKeyDisplay.d.ts +9 -0
  84. package/dist/workbench/pageKeyDisplay.d.ts.map +1 -0
  85. package/dist/workbench/pageKeyDisplay.js +18 -0
  86. package/dist/workbench/pageKeyDisplay.js.map +1 -0
  87. package/dist/workbench/stringUtils.d.ts +6 -0
  88. package/dist/workbench/stringUtils.d.ts.map +1 -0
  89. package/dist/workbench/stringUtils.js +24 -0
  90. package/dist/workbench/stringUtils.js.map +1 -0
  91. package/dist/workbench/types.d.ts +4 -0
  92. package/dist/workbench/types.d.ts.map +1 -1
  93. package/dist/workbench/workbench.css +542 -8
  94. package/dist/workbench/workbench.js +644 -12
  95. package/dist/workbench/workbenchShadowPortal.d.ts +4 -0
  96. package/dist/workbench/workbenchShadowPortal.d.ts.map +1 -0
  97. package/dist/workbench/workbenchShadowPortal.js +18 -0
  98. package/dist/workbench/workbenchShadowPortal.js.map +1 -0
  99. package/package.json +6 -1
@@ -0,0 +1,9 @@
1
+ {
2
+ // Embeddables Workbench - Static Assets
3
+ // Deploy: npx wrangler deploy
4
+ "name": "embeddables-workbench",
5
+ "compatibility_date": "2024-01-01",
6
+ "assets": {
7
+ "directory": "./public"
8
+ }
9
+ }
@@ -0,0 +1,6 @@
1
+ import type { Condition } from '../types-builder.js';
2
+ export declare function doesElementPassConditions({ conditions, userData, }: {
3
+ conditions?: Condition[];
4
+ userData?: Record<string, unknown>;
5
+ }): boolean;
6
+ //# sourceMappingURL=conditionEvaluator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditionEvaluator.d.ts","sourceRoot":"","sources":["../../src/workbench/conditionEvaluator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAkB,MAAM,qBAAqB,CAAA;AAqBpE,wBAAgB,yBAAyB,CAAC,EACxC,UAAU,EACV,QAAQ,GACT,EAAE;IACD,UAAU,CAAC,EAAE,SAAS,EAAE,CAAA;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACnC,GAAG,OAAO,CAwGV"}
@@ -0,0 +1,111 @@
1
+ const TRUE = '_true';
2
+ const FALSE = '_false';
3
+ const NO_VALUE = '_no_value';
4
+ function exists(value) {
5
+ return value !== undefined && value !== null;
6
+ }
7
+ function valueMapper(v) {
8
+ switch (v) {
9
+ case TRUE:
10
+ return [true];
11
+ case FALSE:
12
+ return [false];
13
+ default:
14
+ return [v];
15
+ }
16
+ }
17
+ export function doesElementPassConditions({ conditions, userData, }) {
18
+ if (!conditions)
19
+ return true;
20
+ if (!userData)
21
+ return false;
22
+ let conditionsList = conditions;
23
+ if (!Array.isArray(conditionsList))
24
+ conditionsList = [conditionsList];
25
+ let conditionCompliance = true;
26
+ for (let i = 0; i < conditionsList.length; i++) {
27
+ try {
28
+ const condition = conditionsList[i];
29
+ const { key, operator, values } = condition;
30
+ const seenValues = new Set((values || []).reduce((acc, v) => {
31
+ acc.push(...valueMapper(v));
32
+ return acc;
33
+ }, []));
34
+ const valuesInCondition = Array.from(seenValues);
35
+ const selectedValues = userData[key];
36
+ switch (operator) {
37
+ case '==': {
38
+ conditionCompliance = Array.isArray(selectedValues)
39
+ ? valuesInCondition.some((value) => selectedValues.includes(value) ||
40
+ (value === NO_VALUE && selectedValues.some((v) => !exists(v))))
41
+ : (valuesInCondition && valuesInCondition.includes(selectedValues)) ||
42
+ (valuesInCondition.includes(NO_VALUE) && !exists(selectedValues));
43
+ break;
44
+ }
45
+ case '!=': {
46
+ conditionCompliance = Array.isArray(selectedValues)
47
+ ? !valuesInCondition.some((value) => (selectedValues && selectedValues.includes(value)) ||
48
+ (value === NO_VALUE && selectedValues.every((v) => exists(v))))
49
+ : !valuesInCondition ||
50
+ (!valuesInCondition.includes(selectedValues) &&
51
+ (valuesInCondition.includes(NO_VALUE) ? exists(selectedValues) : true));
52
+ break;
53
+ }
54
+ case 'exists': {
55
+ conditionCompliance = Array.isArray(selectedValues)
56
+ ? Boolean(selectedValues.filter(exists).length)
57
+ : exists(selectedValues);
58
+ break;
59
+ }
60
+ case '!exists': {
61
+ conditionCompliance = Array.isArray(selectedValues)
62
+ ? selectedValues.filter(exists).length === 0
63
+ : !exists(selectedValues);
64
+ break;
65
+ }
66
+ case 'is-true': {
67
+ conditionCompliance = selectedValues === true;
68
+ break;
69
+ }
70
+ case 'is-not-true': {
71
+ conditionCompliance = selectedValues !== true;
72
+ break;
73
+ }
74
+ case 'is-false': {
75
+ conditionCompliance = selectedValues === false;
76
+ break;
77
+ }
78
+ case 'is-not-false': {
79
+ conditionCompliance = selectedValues !== false;
80
+ break;
81
+ }
82
+ case 'is-empty': {
83
+ conditionCompliance =
84
+ selectedValues === undefined ||
85
+ selectedValues === null ||
86
+ (Array.isArray(selectedValues) && selectedValues.length === 0) ||
87
+ (typeof selectedValues === 'string' && selectedValues.trim() === '');
88
+ break;
89
+ }
90
+ case 'is-not-empty': {
91
+ conditionCompliance =
92
+ selectedValues !== undefined &&
93
+ selectedValues !== null &&
94
+ ((Array.isArray(selectedValues) && selectedValues.length !== 0) ||
95
+ (typeof selectedValues === 'string' && selectedValues.trim() !== ''));
96
+ break;
97
+ }
98
+ default:
99
+ conditionCompliance = true;
100
+ }
101
+ }
102
+ catch (error) {
103
+ console.error(error);
104
+ conditionCompliance = false;
105
+ }
106
+ if (!conditionCompliance)
107
+ break;
108
+ }
109
+ return conditionCompliance;
110
+ }
111
+ //# sourceMappingURL=conditionEvaluator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditionEvaluator.js","sourceRoot":"","sources":["../../src/workbench/conditionEvaluator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export type StoredFeedbackSessionRef = {
2
+ reviewId: string;
3
+ projectId: string;
4
+ embeddableId: string;
5
+ addedAt: string;
6
+ };
7
+ export declare function readMyFeedbackSessionRefs(): StoredFeedbackSessionRef[];
8
+ export declare function readSharedFeedbackSessionRefs(): StoredFeedbackSessionRef[];
9
+ export declare function appendMyFeedbackSession(entry: {
10
+ reviewId: string;
11
+ projectId: string;
12
+ embeddableId: string;
13
+ }): void;
14
+ /** Remove a session from the local "My" list only (does not delete remote storage). */
15
+ export declare function removeMyFeedbackSession(reviewId: string, projectId: string): void;
16
+ export declare function appendSharedFeedbackSession(entry: {
17
+ reviewId: string;
18
+ projectId: string;
19
+ embeddableId: string;
20
+ }): void;
21
+ /** Remove a session from the local "Shared with me" list only (does not delete remote storage). */
22
+ export declare function removeSharedFeedbackSession(reviewId: string, projectId: string): void;
23
+ export declare function openFeedbackSessionInPageUrl(reviewId: string, projectId: string): void;
24
+ //# sourceMappingURL=feedbackSessionsStorage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedbackSessionsStorage.d.ts","sourceRoot":"","sources":["../../src/workbench/feedbackSessionsStorage.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AA8CD,wBAAgB,yBAAyB,IAAI,wBAAwB,EAAE,CAEtE;AAED,wBAAgB,6BAA6B,IAAI,wBAAwB,EAAE,CAE1E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE;IAC7C,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;CACrB,GAAG,IAAI,CAMP;AAED,uFAAuF;AACvF,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAIjF;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE;IACjD,QAAQ,EAAE,MAAM,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;CACrB,GAAG,IAAI,CAMP;AAED,mGAAmG;AACnG,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAIrF;AAED,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAKtF"}
@@ -0,0 +1,80 @@
1
+ const LS_MY = 'embeddables:feedback:sessions:my';
2
+ const LS_SHARED = 'embeddables:feedback:sessions:shared';
3
+ function isValidRef(x) {
4
+ if (!x || typeof x !== 'object')
5
+ return false;
6
+ const o = x;
7
+ return (typeof o.reviewId === 'string' &&
8
+ typeof o.projectId === 'string' &&
9
+ typeof o.embeddableId === 'string' &&
10
+ typeof o.addedAt === 'string');
11
+ }
12
+ function readList(key) {
13
+ try {
14
+ const raw = window.localStorage.getItem(key);
15
+ if (!raw)
16
+ return [];
17
+ const parsed = JSON.parse(raw);
18
+ if (!Array.isArray(parsed))
19
+ return [];
20
+ return parsed.filter(isValidRef);
21
+ }
22
+ catch {
23
+ return [];
24
+ }
25
+ }
26
+ function writeList(key, list) {
27
+ try {
28
+ window.localStorage.setItem(key, JSON.stringify(list));
29
+ }
30
+ catch {
31
+ // ignore quota / private mode
32
+ }
33
+ }
34
+ function refKey(r) {
35
+ return `${r.reviewId}\0${r.projectId}`;
36
+ }
37
+ function upsertFront(list, entry) {
38
+ const k = refKey(entry);
39
+ const filtered = list.filter((r) => refKey(r) !== k);
40
+ return [entry, ...filtered];
41
+ }
42
+ export function readMyFeedbackSessionRefs() {
43
+ return readList(LS_MY);
44
+ }
45
+ export function readSharedFeedbackSessionRefs() {
46
+ return readList(LS_SHARED);
47
+ }
48
+ export function appendMyFeedbackSession(entry) {
49
+ const row = {
50
+ ...entry,
51
+ addedAt: new Date().toISOString(),
52
+ };
53
+ writeList(LS_MY, upsertFront(readList(LS_MY), row));
54
+ }
55
+ /** Remove a session from the local "My" list only (does not delete remote storage). */
56
+ export function removeMyFeedbackSession(reviewId, projectId) {
57
+ const k = refKey({ reviewId, projectId });
58
+ const list = readList(LS_MY).filter((r) => refKey(r) !== k);
59
+ writeList(LS_MY, list);
60
+ }
61
+ export function appendSharedFeedbackSession(entry) {
62
+ const row = {
63
+ ...entry,
64
+ addedAt: new Date().toISOString(),
65
+ };
66
+ writeList(LS_SHARED, upsertFront(readList(LS_SHARED), row));
67
+ }
68
+ /** Remove a session from the local "Shared with me" list only (does not delete remote storage). */
69
+ export function removeSharedFeedbackSession(reviewId, projectId) {
70
+ const k = refKey({ reviewId, projectId });
71
+ const list = readList(LS_SHARED).filter((r) => refKey(r) !== k);
72
+ writeList(LS_SHARED, list);
73
+ }
74
+ export function openFeedbackSessionInPageUrl(reviewId, projectId) {
75
+ const url = new URL(window.location.href);
76
+ url.searchParams.set('feedbackReview', reviewId);
77
+ url.searchParams.set('feedbackProject', projectId);
78
+ window.location.assign(url.toString());
79
+ }
80
+ //# sourceMappingURL=feedbackSessionsStorage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedbackSessionsStorage.js","sourceRoot":"","sources":["../../src/workbench/feedbackSessionsStorage.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,10 @@ declare global {
3
3
  __embeddables_bootstrap_workbench?: (config: {
4
4
  embeddableId: string;
5
5
  localDev?: boolean;
6
+ openFeedbackTab?: boolean;
7
+ feedbackReviewId?: string;
8
+ feedbackProjectId?: string;
9
+ projectId?: string;
6
10
  }) => void;
7
11
  }
8
12
  }
@@ -1 +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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/workbench/index.tsx"],"names":[],"mappings":"AAKA,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;YAClB,eAAe,CAAC,EAAE,OAAO,CAAA;YACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;YACzB,iBAAiB,CAAC,EAAE,MAAM,CAAA;YAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;SACnB,KAAK,IAAI,CAAA;KACX;CACF"}
@@ -1,7 +1,30 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { createRoot } from 'react-dom/client';
3
3
  import { WorkbenchApp } from './WorkbenchApp.js';
4
+ import { WORKBENCH_SHADOW_PORTAL_ID } from './workbenchShadowPortal.js';
4
5
  let workbenchRoot = null;
6
+ /**
7
+ * Merge `feedbackReview` / `feedbackProject` / `project` / `feedback=true` from the page URL into
8
+ * bootstrap config. The inline `onload` bootstrap only receives injected `__EMBEDDABLES_WORKBENCH`
9
+ * values, so shared links that rely on query params must be merged here or the Feedback tab and
10
+ * props are lost on the second render.
11
+ */
12
+ function mergeFeedbackParamsFromWindow(config) {
13
+ if (typeof window === 'undefined')
14
+ return config;
15
+ const params = new URLSearchParams(window.location.search);
16
+ const feedbackReviewId = config.feedbackReviewId ?? params.get('feedbackReview') ?? undefined;
17
+ const feedbackProjectId = config.feedbackProjectId ?? params.get('feedbackProject') ?? undefined;
18
+ const projectId = config.projectId ?? params.get('project') ?? undefined;
19
+ const openFeedbackTab = config.openFeedbackTab || params.get('feedback') === 'true';
20
+ return {
21
+ ...config,
22
+ feedbackReviewId,
23
+ feedbackProjectId,
24
+ projectId,
25
+ openFeedbackTab,
26
+ };
27
+ }
5
28
  // Derive CSS URL from script's URL so it works when script is loaded from a different origin (e.g. CDN)
6
29
  const scriptEl = typeof document !== 'undefined' ? document.currentScript : null;
7
30
  const WORKBENCH_CSS_URL = scriptEl?.src?.replace(/\.js(\?.*)?$/i, '.css$1') ??
@@ -30,16 +53,33 @@ async function bootstrapWorkbench(config) {
30
53
  });
31
54
  const mountPoint = document.createElement('div');
32
55
  shadowRoot.appendChild(mountPoint);
56
+ const portalMount = document.createElement('div');
57
+ portalMount.id = WORKBENCH_SHADOW_PORTAL_ID;
58
+ shadowRoot.appendChild(portalMount);
33
59
  workbenchRoot = createRoot(mountPoint);
34
60
  }
35
61
  if (workbenchRoot) {
36
- workbenchRoot.render(_jsx(WorkbenchApp, { embeddableId: config.embeddableId, localDev: config.localDev ?? false }));
62
+ const merged = mergeFeedbackParamsFromWindow(config);
63
+ // Open feedback tab when ?feedback=true or ?feedbackReview=id (URL merged above).
64
+ const initialTab = merged.openFeedbackTab || merged.feedbackReviewId
65
+ ? 'feedback'
66
+ : undefined;
67
+ // Shared feedback links include both IDs — expand the workbench so Feedback mode is visible.
68
+ const initialExpanded = !!(merged.feedbackReviewId && merged.feedbackProjectId);
69
+ workbenchRoot.render(_jsx(WorkbenchApp, { embeddableId: merged.embeddableId, localDev: merged.localDev ?? false, initialTab: initialTab, initialExpanded: initialExpanded, feedbackReviewId: merged.feedbackReviewId, feedbackProjectId: merged.feedbackProjectId, projectId: merged.projectId }));
37
70
  }
38
71
  }
39
72
  window.__embeddables_bootstrap_workbench = bootstrapWorkbench;
40
73
  // Auto-bootstrap if config is already available (fallback if onload handler doesn't fire)
41
74
  if (typeof window !== 'undefined' && window.__EMBEDDABLES_WORKBENCH?.embeddableId) {
42
75
  const config = window.__EMBEDDABLES_WORKBENCH;
43
- bootstrapWorkbench({ embeddableId: config.embeddableId, localDev: config.localDev });
76
+ bootstrapWorkbench(mergeFeedbackParamsFromWindow({
77
+ embeddableId: config.embeddableId,
78
+ localDev: config.localDev,
79
+ openFeedbackTab: config.openFeedbackTab,
80
+ feedbackReviewId: config.feedbackReviewId,
81
+ feedbackProjectId: config.feedbackProjectId,
82
+ projectId: config.projectId,
83
+ }));
44
84
  }
45
85
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workbench/index.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAWhD,IAAI,aAAa,GAAyC,IAAI,CAAA;AAE9D,wGAAwG;AACxG,MAAM,QAAQ,GACZ,OAAO,QAAQ,KAAK,WAAW,CAAC,CAAC,CAAE,QAAQ,CAAC,aAA0C,CAAC,CAAC,CAAC,IAAI,CAAA;AAC/F,MAAM,iBAAiB,GACrB,QAAQ,EAAE,GAAG,EAAE,OAAO,CAAC,eAAe,EAAE,QAAQ,CAAC;IACjD,IAAI,GAAG,CAAC,8BAA8B,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAA;AAEtE,KAAK,UAAU,kBAAkB,CAAC,MAAoD;IACpF,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,8BAA8B,CAAC,CAAA;IAC3E,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAA;QAClD,OAAM;IACR,CAAC;IAED,IAAI,UAAU,GAAG,WAAW,CAAC,UAAU,CAAA;IACvC,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,UAAU,GAAG,WAAW,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;QAEvD,MAAM,MAAM,GAAG,iBAAiB,CAAA;QAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAA;QAC3C,IAAI,CAAC,GAAG,GAAG,YAAY,CAAA;QACvB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAA;QAClB,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;QAE5B,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACf,OAAO,EAAE,CAAA;gBACT,OAAM;YACR,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;YAC7B,IAAI,CAAC,OAAO,GAAG,GAAG,EAAE,CAAC,OAAO,EAAE,CAAA;QAChC,CAAC,CAAC,CAAA;QAEF,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;QAChD,UAAU,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;QAElC,aAAa,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,aAAa,EAAE,CAAC;QAClB,aAAa,CAAC,MAAM,CAClB,KAAC,YAAY,IAAC,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,KAAK,GAAI,CACxF,CAAA;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,iCAAiC,GAAG,kBAAkB,CAAA;AAE7D,0FAA0F;AAC1F,IAAI,OAAO,MAAM,KAAK,WAAW,IAAK,MAAc,CAAC,uBAAuB,EAAE,YAAY,EAAE,CAAC;IAC3F,MAAM,MAAM,GAAI,MAAc,CAAC,uBAAuB,CAAA;IACtD,kBAAkB,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAA;AACtF,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/workbench/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Formats a long page key for compact UI: show start and end with an ellipsis in the middle
3
+ * (e.g. `authed_heal…_micro` instead of only truncating the tail).
4
+ */
5
+ export declare function formatPageKeyMiddleEllipsis({ key, maxChars, }: {
6
+ key: string;
7
+ maxChars: number;
8
+ }): string;
9
+ //# sourceMappingURL=pageKeyDisplay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageKeyDisplay.d.ts","sourceRoot":"","sources":["../../src/workbench/pageKeyDisplay.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,EAC1C,GAAG,EACH,QAAQ,GACT,EAAE;IACD,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;CACjB,GAAG,MAAM,CAYT"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Formats a long page key for compact UI: show start and end with an ellipsis in the middle
3
+ * (e.g. `authed_heal…_micro` instead of only truncating the tail).
4
+ */
5
+ export function formatPageKeyMiddleEllipsis({ key, maxChars, }) {
6
+ if (maxChars < 5) {
7
+ return key.slice(0, Math.max(0, maxChars));
8
+ }
9
+ if (key.length <= maxChars) {
10
+ return key;
11
+ }
12
+ const ellipsis = '…';
13
+ const inner = maxChars - ellipsis.length;
14
+ const leftLen = Math.ceil(inner / 2);
15
+ const rightLen = Math.floor(inner / 2);
16
+ return key.slice(0, leftLen) + ellipsis + key.slice(-rightLen);
17
+ }
18
+ //# sourceMappingURL=pageKeyDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageKeyDisplay.js","sourceRoot":"","sources":["../../src/workbench/pageKeyDisplay.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,2BAA2B,CAAC,EAC1C,GAAG,EACH,QAAQ,GAIT;IACC,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;QACjB,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;IAC5C,CAAC;IACD,IAAI,GAAG,CAAC,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAA;IACZ,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAA;IACpB,MAAM,KAAK,GAAG,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAA;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAA;IACtC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAA;AAChE,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Format a component type for display: PascalCase → Title Case.
3
+ * Spaced phrases (e.g. "Multiple Types") are normalized to title case per word.
4
+ */
5
+ export declare function pascalCaseToTitleCase(raw: string): string;
6
+ //# sourceMappingURL=stringUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringUtils.d.ts","sourceRoot":"","sources":["../../src/workbench/stringUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAiBzD"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Format a component type for display: PascalCase → Title Case.
3
+ * Spaced phrases (e.g. "Multiple Types") are normalized to title case per word.
4
+ */
5
+ export function pascalCaseToTitleCase(raw) {
6
+ const s = raw.trim();
7
+ if (!s)
8
+ return s;
9
+ if (/\s/.test(s)) {
10
+ return s
11
+ .split(/\s+/)
12
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())
13
+ .join(' ');
14
+ }
15
+ const spaced = s
16
+ .replace(/([A-Z]+)([A-Z][a-z])/g, '$1 $2')
17
+ .replace(/([a-z\d])([A-Z])/g, '$1 $2');
18
+ return spaced
19
+ .split(/\s+/)
20
+ .filter(Boolean)
21
+ .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())
22
+ .join(' ');
23
+ }
24
+ //# sourceMappingURL=stringUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringUtils.js","sourceRoot":"","sources":["../../src/workbench/stringUtils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAA;IACpB,IAAI,CAAC,CAAC;QAAE,OAAO,CAAC,CAAA;IAChB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACjB,OAAO,CAAC;aACL,KAAK,CAAC,KAAK,CAAC;aACZ,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;aAChE,IAAI,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IACD,MAAM,MAAM,GAAG,CAAC;SACb,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,OAAO,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAA;IACxC,OAAO,MAAM;SACV,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;SAChE,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC"}
@@ -21,5 +21,9 @@ export type UserData = {
21
21
  export type PageInfo = {
22
22
  id: string;
23
23
  key: string;
24
+ hide?: boolean;
25
+ hasConditions?: boolean;
26
+ hasExperimentConditions?: boolean;
27
+ passesConditions?: boolean;
24
28
  };
25
29
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workbench/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,MAAM,MAAM,WAAW,GAAG,MAAM,GAC9B,OAAO,UAAU,GAAG;IAClB,KAAK,CAAC,EAAE;QACN,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAA;QAC9C,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,QAAQ,GAAG,SAAS,CAAA;QAClD,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;QAClE,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;QAC/C,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;QACnC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;KACpC,CAAA;CACF,CAAA;AAEH,MAAM,MAAM,QAAQ,GAAG;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/workbench/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAA;AAE/C,MAAM,MAAM,WAAW,GAAG,MAAM,GAC9B,OAAO,UAAU,GAAG;IAClB,KAAK,CAAC,EAAE;QACN,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,GAAG,SAAS,CAAA;QAC9C,WAAW,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,QAAQ,GAAG,SAAS,CAAA;QAClD,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,CAAA;QAClE,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAA;QAC/C,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;QACnC,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;KACpC,CAAA;CACF,CAAA;AAEH,MAAM,MAAM,QAAQ,GAAG;IACrB,eAAe,EAAE,MAAM,CAAA;IACvB,gBAAgB,EAAE,MAAM,CAAA;IACxB,kBAAkB,EAAE,MAAM,CAAA;IAC1B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB,CAAA;AAED,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,uBAAuB,CAAC,EAAE,OAAO,CAAA;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,CAAA"}