@tokenoftrust/cli 4.7.1 → 4.7.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tokenoftrust/cli",
3
- "version": "4.7.1",
3
+ "version": "4.7.2",
4
4
  "description": "Token of Trust developer CLI — clone a tenant store, run it locally with save→reload, and submit it for preview. Installs the `tot` command.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Token of Trust",
@@ -255,8 +255,9 @@ function pageShape(value, file) {
255
255
  case "definitions": if (!Array.isArray(section.items) || !section.items.length || section.items.some((item) => !item || !string(item.term) || !rich(item.description))) findings.push(finding("parity-section-shape", at, "definitions require string terms and RichText descriptions", "supply valid definition items")); break;
256
256
  case "callout": if (!rich(section.body) || !["info", "warning", "legal", "success"].includes(section.tone) || section.title !== undefined && !string(section.title)) findings.push(finding("parity-section-shape", at, "callout requires supported tone, RichText body, and optional string title", "supply a valid callout")); break;
257
257
  case "contact": if (section.heading !== undefined && !string(section.heading) || section.email !== undefined && !string(section.email) || section.phone !== undefined && !string(section.phone) || section.address !== undefined && (!Array.isArray(section.address) || section.address.some((line) => !string(line))) || !string(section.email) && !string(section.phone) && !(Array.isArray(section.address) && section.address.length)) findings.push(finding("parity-section-shape", at, "contact requires string members and email, phone, or address", "supply valid contact details")); break;
258
+ case "contact_form": if (["heading", "messageLabel", "submitLabel", "successMessage"].some((key) => section[key] !== undefined && !string(section[key])) || section.fields !== undefined && (!Array.isArray(section.fields) || section.fields.some((field) => field !== "name" && field !== "phone"))) findings.push(finding("parity-section-shape", at, "contact_form requires optional string copy and fields limited to name or phone", "supply a valid contact_form section")); break;
258
259
  case "needs_review": if (!string(section.reason) || section.severity !== undefined && !["blocker", "note"].includes(section.severity) || section.owner !== undefined && !string(section.owner) || section.href !== undefined && !string(section.href)) findings.push(finding("parity-section-shape", at, "needs_review requires reason and valid optional severity/owner/href", "supply a valid needs_review section")); break;
259
- default: findings.push(finding("parity-section-kind", `${at}/kind`, "section kind is not supported by the renderer", "use heading, paragraph, list, definitions, callout, contact, or needs_review"));
260
+ default: findings.push(finding("parity-section-kind", `${at}/kind`, "section kind is not supported by the renderer", "use heading, paragraph, list, definitions, callout, contact, contact_form, or needs_review"));
260
261
  }
261
262
  });
262
263
  const bodyHtml = typeof value.body_html === "string" && value.body_html.trim() !== "";
@@ -28,7 +28,7 @@
28
28
  <ul>
29
29
  <li><a href="/blogs/news">News</a></li>
30
30
  <li><a href="/pages/about-us">About</a></li>
31
- <li><a href="/pages/contact-us">Contact</a></li>
31
+ <li><a href="/contact-us">Contact</a></li>
32
32
  </ul>
33
33
  <div class="utility-nav__right">
34
34
  <span class="sel">English</span>
@@ -98,7 +98,7 @@
98
98
  <ul>
99
99
  <li><a href="/search">Search</a></li>
100
100
  <li><a href="/pages/about-us">About Us</a></li>
101
- <li><a href="/pages/contact-us">Contact Us</a></li>
101
+ <li><a href="/contact-us">Contact Us</a></li>
102
102
  <li><a href="/blogs/news">Blog</a></li>
103
103
  </ul>
104
104
  </div>
@@ -0,0 +1,22 @@
1
+ {
2
+ "slug": "contact-us",
3
+ "title": "Contact Sample Vapor Co.",
4
+ "seoTitle": "Contact | Sample Vapor Co.",
5
+ "seoDescription": "Sample contact page for the fictional Sample Vapor Co. demo store.",
6
+ "eyebrow": "Sample content",
7
+ "intro": "This is a placeholder contact page for a fictional demo store.",
8
+ "isPolicy": false,
9
+ "sections": [
10
+ { "kind": "heading", "text": "Support hours" },
11
+ { "kind": "paragraph", "text": "Sample copy: set your real support hours here." },
12
+ { "kind": "heading", "text": "Customer support" },
13
+ { "kind": "paragraph", "text": "Sample copy: describe how customers reach you." },
14
+ {
15
+ "kind": "contact_form",
16
+ "heading": "Send us a message",
17
+ "fields": ["name", "phone"],
18
+ "messageLabel": "How can we help?",
19
+ "submitLabel": "Send message"
20
+ }
21
+ ]
22
+ }
@@ -1,48 +0,0 @@
1
- <head>
2
- <title>Contact | Sample Vapor Co.</title>
3
- <meta name="description" content="Sample contact page for the fictional Sample Vapor Co. demo store.">
4
- <link rel="canonical" href="https://sample-store.example/pages/contact-us">
5
- <meta name="robots" content="noindex,nofollow">
6
- <link rel="stylesheet" href="/tenants/sample-store.example/pages/page.css">
7
- </head>
8
- <main id="main">
9
-
10
- <section class="page-hero page-hero--center section--tight">
11
- <div class="container">
12
- <nav class="crumbs" aria-label="Breadcrumb"><a href="/">Home</a> / Contact Us</nav>
13
- <h1>Contact Sample Vapor Co.</h1>
14
- <p>This is a placeholder contact page for a fictional demo store. Nothing here submits anywhere.</p>
15
- </div>
16
- </section>
17
-
18
- <section class="section" aria-labelledby="contact-h">
19
- <h2 id="contact-h" class="sr-only">Get in touch</h2>
20
- <div class="container">
21
- <div class="contact-grid">
22
- <div class="contact-card">
23
- <h3>Support hours</h3>
24
- <p>Sample copy — set your real support hours here.</p>
25
- </div>
26
- <div class="contact-card">
27
- <h3>Customer support</h3>
28
- <p>Sample copy — describe how customers reach you.</p>
29
- </div>
30
- <div class="contact-card">
31
- <h3>Track your order</h3>
32
- <p>Sample copy — link your order-tracking flow here.</p>
33
- </div>
34
- </div>
35
-
36
- <form class="contact-form" action="/api/contact" method="post">
37
- <div class="row2">
38
- <input type="text" name="name" aria-label="Name" placeholder="Name" required>
39
- <input type="email" name="email" aria-label="Email" placeholder="Email" required>
40
- </div>
41
- <input type="text" name="order" aria-label="Order number (optional)" placeholder="Order number (optional)">
42
- <textarea name="comment" aria-label="How can we help?" placeholder="How can we help?"></textarea>
43
- <button type="submit" class="btn btn-primary">Send Message</button>
44
- </form>
45
- </div>
46
- </section>
47
-
48
- </main>