vibespot 1.2.0 → 1.3.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.
- package/README.md +44 -5
- package/assets/blog-rules.md +251 -0
- package/assets/email-rules.md +390 -0
- package/assets/humanify-guide.md +300 -101
- package/assets/plan-templates/blog-content-hub.md +18 -9
- package/assets/plan-templates/email-announcement.md +41 -0
- package/assets/plan-templates/email-event-invite.md +43 -0
- package/assets/plan-templates/email-newsletter.md +41 -0
- package/assets/plan-templates/email-re-engagement.md +42 -0
- package/assets/plan-templates/email-welcome.md +41 -0
- package/dist/index.js +1460 -387
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
- package/starters/06-blog-content-hub.json +75 -0
- package/starters/06-email-welcome.json +60 -0
- package/starters/07-email-announcement.json +60 -0
- package/starters/08-email-newsletter.json +52 -0
- package/ui/chat.js +777 -63
- package/ui/code-editor.js +49 -7
- package/ui/dashboard.js +379 -93
- package/ui/docs/docs.css +29 -0
- package/ui/docs/index.html +186 -108
- package/ui/docs/screenshots/brand-kit-preview.png +0 -0
- package/ui/docs/screenshots/content-type-dropdown.png +0 -0
- package/ui/docs/screenshots/editor-full-layout.png +0 -0
- package/ui/docs/screenshots/inline-wysiwyg-editing.png +0 -0
- package/ui/docs/screenshots/multi-page-tree.png +0 -0
- package/ui/docs/screenshots/onboarding-walkthrough.png +0 -0
- package/ui/docs/screenshots/split-pane-view.png +0 -0
- package/ui/docs/screenshots/visual-controls-toolbar.png +0 -0
- package/ui/docs/screenshots/workspace-tabs.png +0 -0
- package/ui/email-preview.js +109 -0
- package/ui/field-editor.js +72 -1
- package/ui/icons.js +120 -0
- package/ui/index.html +877 -629
- package/ui/inline-edit.js +710 -0
- package/ui/plan.js +0 -0
- package/ui/preview.js +101 -198
- package/ui/section-controls.js +628 -0
- package/ui/settings.js +58 -16
- package/ui/setup.js +750 -140
- package/ui/styles.css +3430 -952
- package/ui/upload-panel.js +47 -20
package/ui/code-editor.js
CHANGED
|
@@ -77,7 +77,18 @@ function renderCodeFileList(files) {
|
|
|
77
77
|
const itemEl = document.createElement("div");
|
|
78
78
|
itemEl.className = "code-view__file-item";
|
|
79
79
|
itemEl.dataset.fileId = f.id;
|
|
80
|
-
|
|
80
|
+
// HubSpot-familiar trust signals: HubL on the templated module HTML,
|
|
81
|
+
// HubSpot fields schema on fields.json. These tell HubSpot devs "this
|
|
82
|
+
// is real CMS output, not generic web code".
|
|
83
|
+
let badge = "";
|
|
84
|
+
if (f.fileType === "html") {
|
|
85
|
+
badge = ' <span class="code-view__file-tag code-view__file-tag--hubl" title="Renders HubL — HubSpot CMS templating language">HubL</span>';
|
|
86
|
+
} else if (f.fileType === "fields") {
|
|
87
|
+
badge = ' <span class="code-view__file-tag code-view__file-tag--fields" title="HubSpot module field schema">HubSpot fields</span>';
|
|
88
|
+
}
|
|
89
|
+
itemEl.innerHTML = (FILE_ICONS[f.lang] || "")
|
|
90
|
+
+ '<span class="code-view__file-name">' + f.label + "</span>"
|
|
91
|
+
+ badge;
|
|
81
92
|
itemEl.addEventListener("click", () => openCodeFile(f));
|
|
82
93
|
groupEl.appendChild(itemEl);
|
|
83
94
|
}
|
|
@@ -348,24 +359,55 @@ async function loadCodeFiles() {
|
|
|
348
359
|
}
|
|
349
360
|
}
|
|
350
361
|
|
|
362
|
+
// ---------------------------------------------------------------------------
|
|
363
|
+
// Split view — preview + code side by side via CSS grid
|
|
364
|
+
// ---------------------------------------------------------------------------
|
|
365
|
+
|
|
366
|
+
function enterSplitView() {
|
|
367
|
+
const panelRight = document.getElementById("panel-right");
|
|
368
|
+
const previewEl = document.getElementById("preview-container");
|
|
369
|
+
const codeEl = document.getElementById("code-view");
|
|
370
|
+
|
|
371
|
+
document.querySelector(".right-split").classList.remove("hidden");
|
|
372
|
+
panelRight.classList.add("split-active");
|
|
373
|
+
previewEl.classList.remove("hidden");
|
|
374
|
+
codeEl.classList.remove("hidden");
|
|
375
|
+
loadCodeFiles();
|
|
376
|
+
}
|
|
377
|
+
|
|
378
|
+
function exitSplitView() {
|
|
379
|
+
const panelRight = document.getElementById("panel-right");
|
|
380
|
+
panelRight.classList.remove("split-active");
|
|
381
|
+
}
|
|
382
|
+
|
|
351
383
|
document.querySelectorAll(".view-toggle__btn").forEach((btn) => {
|
|
352
384
|
btn.addEventListener("click", () => {
|
|
353
385
|
const view = btn.dataset.view;
|
|
354
|
-
document.querySelectorAll(".view-toggle__btn").forEach((b) =>
|
|
355
|
-
|
|
386
|
+
document.querySelectorAll(".view-toggle__btn").forEach((b) => {
|
|
387
|
+
const isActive = b === btn;
|
|
388
|
+
b.classList.toggle("active", isActive);
|
|
389
|
+
// Only the role="tab" buttons (Preview / Split / Code) carry
|
|
390
|
+
// aria-selected — the plan sidebar toggle uses aria-pressed instead.
|
|
391
|
+
if (b.getAttribute("role") === "tab") {
|
|
392
|
+
b.setAttribute("aria-selected", isActive ? "true" : "false");
|
|
393
|
+
}
|
|
394
|
+
});
|
|
356
395
|
|
|
357
396
|
const previewEl = document.getElementById("preview-container");
|
|
358
397
|
const codeEl = document.getElementById("code-view");
|
|
359
|
-
const chromeBar = document.getElementById("browser-chrome");
|
|
360
398
|
|
|
361
|
-
|
|
362
|
-
|
|
399
|
+
exitSplitView();
|
|
400
|
+
|
|
401
|
+
if (view === "split") {
|
|
402
|
+
enterSplitView();
|
|
403
|
+
} else if (view === "code") {
|
|
404
|
+
document.querySelector(".right-split").classList.add("hidden");
|
|
363
405
|
codeEl.classList.remove("hidden");
|
|
364
406
|
loadCodeFiles();
|
|
365
407
|
} else {
|
|
408
|
+
document.querySelector(".right-split").classList.remove("hidden");
|
|
366
409
|
codeEl.classList.add("hidden");
|
|
367
410
|
previewEl.classList.remove("hidden");
|
|
368
|
-
// Refresh preview if code was saved while in code view
|
|
369
411
|
if (codeSavedSinceSwitch && typeof refreshPreview === "function") {
|
|
370
412
|
refreshPreview();
|
|
371
413
|
}
|