@forjacms/sections 1.7.5 → 1.7.7

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 (82) hide show
  1. package/dist/cjs/altcha-J8QlF6y1.js +36 -0
  2. package/dist/cjs/forja-contact.cjs.entry.js +25 -2
  3. package/dist/cjs/forja-newsletter.cjs.entry.js +16 -1
  4. package/dist/cjs/forja-portfolio.cjs.entry.js +1 -1
  5. package/dist/cjs/forja-pricing.cjs.entry.js +1 -1
  6. package/dist/cjs/forja-projects.cjs.entry.js +1 -1
  7. package/dist/cjs/forja-sections.cjs.js +1 -1
  8. package/dist/cjs/forja-stats.cjs.entry.js +1 -1
  9. package/dist/cjs/forja-tag-cloud.cjs.entry.js +1 -1
  10. package/dist/cjs/forja-team.cjs.entry.js +1 -1
  11. package/dist/cjs/forja-testimonials.cjs.entry.js +1 -1
  12. package/dist/cjs/forja-text-block.cjs.entry.js +1 -1
  13. package/dist/cjs/forja-timeline.cjs.entry.js +1 -1
  14. package/dist/cjs/forja-video.cjs.entry.js +1 -1
  15. package/dist/cjs/loader.cjs.js +1 -1
  16. package/dist/collection/components/forja-contact/forja-contact.js +69 -2
  17. package/dist/collection/components/forja-newsletter/forja-newsletter.js +60 -1
  18. package/dist/collection/components/forja-portfolio/forja-portfolio.js +1 -1
  19. package/dist/collection/components/forja-pricing/forja-pricing.js +1 -1
  20. package/dist/collection/components/forja-projects/forja-projects.js +1 -1
  21. package/dist/collection/components/forja-stats/forja-stats.js +1 -1
  22. package/dist/collection/components/forja-tag-cloud/forja-tag-cloud.js +1 -1
  23. package/dist/collection/components/forja-team/forja-team.js +1 -1
  24. package/dist/collection/components/forja-testimonials/forja-testimonials.js +1 -1
  25. package/dist/collection/components/forja-text-block/forja-text-block.js +1 -1
  26. package/dist/collection/components/forja-timeline/forja-timeline.js +1 -1
  27. package/dist/collection/components/forja-video/forja-video.js +1 -1
  28. package/dist/collection/utils/altcha.js +30 -0
  29. package/dist/components/forja-contact.js +1 -1
  30. package/dist/components/forja-newsletter.js +1 -1
  31. package/dist/components/forja-portfolio.js +1 -1
  32. package/dist/components/forja-pricing.js +1 -1
  33. package/dist/components/forja-projects.js +1 -1
  34. package/dist/components/forja-stats.js +1 -1
  35. package/dist/components/forja-tag-cloud.js +1 -1
  36. package/dist/components/forja-team.js +1 -1
  37. package/dist/components/forja-testimonials.js +1 -1
  38. package/dist/components/forja-text-block.js +1 -1
  39. package/dist/components/forja-timeline.js +1 -1
  40. package/dist/components/forja-video.js +1 -1
  41. package/dist/components/p-B8qlvoCH.js +1 -0
  42. package/dist/esm/altcha-BaQIumM3.js +33 -0
  43. package/dist/esm/forja-contact.entry.js +25 -2
  44. package/dist/esm/forja-newsletter.entry.js +16 -1
  45. package/dist/esm/forja-portfolio.entry.js +1 -1
  46. package/dist/esm/forja-pricing.entry.js +1 -1
  47. package/dist/esm/forja-projects.entry.js +1 -1
  48. package/dist/esm/forja-sections.js +1 -1
  49. package/dist/esm/forja-stats.entry.js +1 -1
  50. package/dist/esm/forja-tag-cloud.entry.js +1 -1
  51. package/dist/esm/forja-team.entry.js +1 -1
  52. package/dist/esm/forja-testimonials.entry.js +1 -1
  53. package/dist/esm/forja-text-block.entry.js +1 -1
  54. package/dist/esm/forja-timeline.entry.js +1 -1
  55. package/dist/esm/forja-video.entry.js +1 -1
  56. package/dist/esm/loader.js +1 -1
  57. package/dist/forja-sections/forja-sections.esm.js +1 -1
  58. package/dist/forja-sections/p-0ZAX27KB.js +1 -0
  59. package/dist/forja-sections/{p-082156fb.entry.js → p-2374ab45.entry.js} +1 -1
  60. package/dist/forja-sections/{p-8caea1c1.entry.js → p-28d89696.entry.js} +1 -1
  61. package/dist/forja-sections/p-44c37ec0.entry.js +1 -0
  62. package/dist/forja-sections/{p-89b5326c.entry.js → p-52608627.entry.js} +1 -1
  63. package/dist/forja-sections/p-53d27751.entry.js +1 -0
  64. package/dist/forja-sections/p-680fe800.entry.js +1 -0
  65. package/dist/forja-sections/p-73d4139c.entry.js +1 -0
  66. package/dist/forja-sections/{p-a37a69c8.entry.js → p-7cd82cee.entry.js} +1 -1
  67. package/dist/forja-sections/p-7dff4916.entry.js +1 -0
  68. package/dist/forja-sections/{p-d763435e.entry.js → p-a4cc2ee9.entry.js} +1 -1
  69. package/dist/forja-sections/p-da58a406.entry.js +1 -0
  70. package/dist/forja-sections/p-df44677a.entry.js +1 -0
  71. package/dist/types/components/forja-contact/forja-contact.d.ts +18 -0
  72. package/dist/types/components/forja-newsletter/forja-newsletter.d.ts +8 -0
  73. package/dist/types/components.d.ts +40 -0
  74. package/dist/types/utils/altcha.d.ts +16 -0
  75. package/package.json +1 -1
  76. package/dist/forja-sections/p-37f0e324.entry.js +0 -1
  77. package/dist/forja-sections/p-450084d2.entry.js +0 -1
  78. package/dist/forja-sections/p-5d5eea44.entry.js +0 -1
  79. package/dist/forja-sections/p-8513ce7a.entry.js +0 -1
  80. package/dist/forja-sections/p-86732956.entry.js +0 -1
  81. package/dist/forja-sections/p-b37e7f5c.entry.js +0 -1
  82. package/dist/forja-sections/p-c61df346.entry.js +0 -1
@@ -3,7 +3,7 @@ import { sectionLabel } from "../../utils/a11y";
3
3
  export class ForjaPricing {
4
4
  render() {
5
5
  const hasTiers = this.tiers && this.tiers.length > 0;
6
- return (h("section", { key: 'bae1df3d72dc351c1e55506fdfaad535f45814f6', class: "forja-pricing", "aria-label": sectionLabel(this.sectionTitle, 'Pricing') }, h("slot", { key: '343e7d5490dfc07cc2024661d404b1c2a44c46a9', name: "before" }), (this.sectionTitle || this.text) && (h("div", { key: 'e91c8e1945da57bc28bbc6ee09b72dca1dd03d22', class: "forja-pricing__header" }, this.sectionTitle && h("h2", { key: '81000892bb72e034613283df85928c1c667a4f95', class: "forja-pricing__title" }, this.sectionTitle), this.text && h("div", { key: '56363c268fb40a5512ab90005463bf43402e8c2f', class: "forja-pricing__text", innerHTML: 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: 'd4ed110c1c8ab8a865ba7c1066caf5867c36494c', name: "after" })));
6
+ return (h("section", { key: 'ecb73e364f3f4892d3d937fc7fa5df7b1f1a338e', class: "forja-pricing", "aria-label": sectionLabel(this.sectionTitle, 'Pricing') }, h("slot", { key: '08905beca81a6eb6afb74d161f47bc7e0f5b69c4', name: "before" }), (this.sectionTitle || this.text) && (h("div", { key: 'fa94236ab6731c6e2f7401075bba874ed39206b9', class: "forja-pricing__header" }, this.sectionTitle && h("h2", { key: '8ced20c10ac8235fd2525c6cbbc4b5689c10fe18', class: "forja-pricing__title" }, this.sectionTitle), this.text && h("div", { key: 'bf6f79ee461263f8e5bd9af2c2233683fe6cf110', class: "forja-pricing__text", innerHTML: 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: '138c32c758745fc0c225c981e15da56557659395', name: "after" })));
7
7
  }
8
8
  static get is() { return "forja-pricing"; }
9
9
  static get properties() {
@@ -3,7 +3,7 @@ import { sectionLabel } from "../../utils/a11y";
3
3
  export class ForjaProjects {
4
4
  render() {
5
5
  const hasItems = this.items && this.items.length > 0;
6
- return (h("section", { key: '15db32b9f5878409c28debb36ded1047f657ce2a', class: "forja-projects", "aria-label": sectionLabel(this.sectionTitle, 'Projects') }, h("slot", { key: 'f5dd2f0ca808fcfeaa11c4006dfaa88723ea4a47', name: "before" }), this.sectionTitle && h("h2", { key: 'fd5e121eb42bba78d4dc5b2719c1129182ebc030', class: "forja-projects__title" }, this.sectionTitle), this.text && h("div", { key: 'dd82836aaf6934f7420fa2cce02e9574e27b4781', class: "forja-projects__text", innerHTML: 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: 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: 'b7772bead8f5c04f3b3e857bc9da18adc29e38b7', name: "after" })));
6
+ return (h("section", { key: '4fddb0d0031673c60d81741111e6fff5ebbb20a6', class: "forja-projects", "aria-label": sectionLabel(this.sectionTitle, 'Projects') }, h("slot", { key: '0a295eabcbfa33f584f1538b84b70cb85fd012ae', name: "before" }), this.sectionTitle && h("h2", { key: '3792ed7f5e6e86dc9fd36274a361bffcc1267d8e', class: "forja-projects__title" }, this.sectionTitle), this.text && h("div", { key: '246daa3ff95477f019d70c1d2c3c24ccade0ecb1', class: "forja-projects__text", innerHTML: 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: 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: '605aa0a889bdc8199dca6895248f3cf19d8d4c83', name: "after" })));
7
7
  }
8
8
  static get is() { return "forja-projects"; }
9
9
  static get properties() {
@@ -7,7 +7,7 @@ export class ForjaStats {
7
7
  'forja-stats',
8
8
  this.statsStyle && `forja-stats--${this.statsStyle}`,
9
9
  ].filter(Boolean).join(' ');
10
- return (h("section", { key: '3aa6f2f843bb0e295dcb84740af6c9fda39d8309', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Statistics') }, h("slot", { key: '9565f67c2e7192f8b965be5555eb7f43e271692c', name: "before" }), this.sectionTitle && h("h2", { key: 'cbf15bf5bc0e62702590a1725a6e188bea96639c', class: "forja-stats__title" }, this.sectionTitle), this.text && h("div", { key: '0beb283e6387a04c20a2ba853266b12769ac9725', class: "forja-stats__text", innerHTML: 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: '7a2ffd297dd37c72d0c16a42b268e8a6f607ad40', name: "after" })));
10
+ return (h("section", { key: 'cf1a9139a3b18e099e66f5abcfdcf7f5c90cdf74', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Statistics') }, h("slot", { key: 'fc61e06e592f1cc1d1f36d47b2b8fd33b520f421', name: "before" }), this.sectionTitle && h("h2", { key: '42026c0e7b55f0f7b185d969ca1219b1c44f7632', class: "forja-stats__title" }, this.sectionTitle), this.text && h("div", { key: 'd6f9d119958786dbef4aa39e6bae82a22465e21a', class: "forja-stats__text", innerHTML: 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: '468c62818cee963c316c57891964bac3d4f793a6', name: "after" })));
11
11
  }
12
12
  static get is() { return "forja-stats"; }
13
13
  static get properties() {
@@ -3,7 +3,7 @@ import { sectionLabel } from "../../utils/a11y";
3
3
  export class ForjaTagCloud {
4
4
  render() {
5
5
  const hasTags = this.tags && this.tags.length > 0;
6
- return (h("section", { key: 'dc9015d823c69a88c8252115948517887e7ce400', class: "forja-tag-cloud", "aria-label": sectionLabel(this.sectionTitle, 'Tags') }, h("slot", { key: '4a860c211a75f97d67755a1811db76c20840740f', name: "before" }), this.sectionTitle && h("h2", { key: 'bfae3b68ba76c7ce14d01d52ee47a5b5b6f04f89', class: "forja-tag-cloud__title" }, this.sectionTitle), this.text && h("div", { key: '7175c987bfadf8e4bb433e2cb8b856412818c0d0', class: "forja-tag-cloud__text", innerHTML: 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: '673878f83e689016cf1a001e87774fe66c4c7baa', name: "after" })));
6
+ return (h("section", { key: 'eb6d00e49fa790e23e2397f4927e20d545222217', class: "forja-tag-cloud", "aria-label": sectionLabel(this.sectionTitle, 'Tags') }, h("slot", { key: '8a34fd949d2f96dd8fd92d6479a052373fc09d00', name: "before" }), this.sectionTitle && h("h2", { key: '90fd03b82e40b74a16c91ba8c86100e9868239bb', class: "forja-tag-cloud__title" }, this.sectionTitle), this.text && h("div", { key: '7cf8c4c19943defa0e23f852ab27372307fa45b8', class: "forja-tag-cloud__text", innerHTML: 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: '9d24cb03b6ea67f87f11dd97410ae25ae389276b', name: "after" })));
7
7
  }
8
8
  static get is() { return "forja-tag-cloud"; }
9
9
  static get properties() {
@@ -7,7 +7,7 @@ export class ForjaTeam {
7
7
  }
8
8
  render() {
9
9
  const hasMembers = this.members && this.members.length > 0;
10
- return (h("section", { key: 'b5d2dcb808386048367cfa97b31c6075732ba828', class: "forja-team", "aria-label": sectionLabel(this.sectionTitle, 'Team') }, h("slot", { key: 'df3d484b90a7d755eda0a784f21edbd921e71401', name: "before" }), this.sectionTitle && h("h2", { key: '2818b057df2f2c6319af8d17a43537714a62db34', class: "forja-team__title" }, this.sectionTitle), this.text && h("div", { key: '265903df6beaae84ff4d6cc1a9d11ae3f51f15d5', class: "forja-team__text", innerHTML: 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: '81263f35ba229207c4978b65890c527590dfdae5', name: "after" })));
10
+ return (h("section", { key: '65ab08dab0a410e178ce2b0a010987533b575bcd', class: "forja-team", "aria-label": sectionLabel(this.sectionTitle, 'Team') }, h("slot", { key: 'daa75a84eb8bf43d21057b9f3620f96407d65007', name: "before" }), this.sectionTitle && h("h2", { key: '682f5ee8cf15e378cdb6b33cc80e078886ca29ce', class: "forja-team__title" }, this.sectionTitle), this.text && h("div", { key: '4ce99703de2127a6637bd7e86c3bc0944c6b5960', class: "forja-team__text", innerHTML: 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: '97fff600c6ed995066a34008edee4a73a9c954d2', name: "after" })));
11
11
  }
12
12
  static get is() { return "forja-team"; }
13
13
  static get properties() {
@@ -3,7 +3,7 @@ import { sectionLabel } from "../../utils/a11y";
3
3
  export class ForjaTestimonials {
4
4
  render() {
5
5
  const hasItems = this.items && this.items.length > 0;
6
- return (h("section", { key: '608ac151afb59df61bf99ea38f5eba2d819ef6ac', class: "forja-testimonials", "aria-label": sectionLabel(this.sectionTitle, 'Testimonials') }, h("slot", { key: '016f3b316cec3979efaee8dd4e19497a623ca292', name: "before" }), this.sectionTitle && h("h2", { key: '5d0f9dac43cbd4e6d7ded6236c98a4d428d3723a', class: "forja-testimonials__title" }, this.sectionTitle), this.text && h("div", { key: '8d5bd0fd2c9b39aba0a461bef14df16a4b8197ba', class: "forja-testimonials__text", innerHTML: 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: 'f5079a207668e548632b607f174e630a46854cc8', name: "after" })));
6
+ return (h("section", { key: '348a3aea6d842d43dcbb8506111d2146347ecf65', class: "forja-testimonials", "aria-label": sectionLabel(this.sectionTitle, 'Testimonials') }, h("slot", { key: '4d372a82bb34fc2408cb168f349550f5213c1152', name: "before" }), this.sectionTitle && h("h2", { key: '52323f5e292192065b3ab8a54efb76bc2cb9247f', class: "forja-testimonials__title" }, this.sectionTitle), this.text && h("div", { key: 'f285a90d384919c0a6221b02ef2bdddf584c8636', class: "forja-testimonials__text", innerHTML: 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: '5c88e789b532b1039e2b0c74ec0afc4fb63185fb', name: "after" })));
7
7
  }
8
8
  static get is() { return "forja-testimonials"; }
9
9
  static get properties() {
@@ -11,7 +11,7 @@ export class ForjaTextBlock {
11
11
  `forja-text--${this.width}`,
12
12
  `forja-text--${this.alignment}`,
13
13
  ].join(' ');
14
- return (h("section", { key: '2cc7f40271cc449ec8b4fc88576398a0b0763aca', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Content') }, h("slot", { key: '7da4597bc3dde56e4ae4179ae871f08f332c1c7f', name: "before" }), this.sectionTitle && h("h2", { key: 'ba03ee398659bf8926d6c434012b553e430a9413', class: "forja-text__title" }, this.sectionTitle), this.text ? (h("div", { class: "forja-text__content", innerHTML: this.text })) : (h("div", { class: "forja-text__content" }, h("slot", null))), h("slot", { key: '138eeef4fa534fd22772da123bbd6b7b30c20078', name: "after" })));
14
+ return (h("section", { key: '797f9ac88c3c03e2c41e7b8b3bf54b4d43dc3fd9', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Content') }, h("slot", { key: 'dc6cc88ac6fde0dc315651f0d7372c3fb44527fc', name: "before" }), this.sectionTitle && h("h2", { key: 'c3e5c0b9bbd3037a9c54db36027928b67a14318f', class: "forja-text__title" }, this.sectionTitle), this.text ? (h("div", { class: "forja-text__content", innerHTML: this.text })) : (h("div", { class: "forja-text__content" }, h("slot", null))), h("slot", { key: '8fe560073c81469ef6669ff945df4d102699152c', name: "after" })));
15
15
  }
16
16
  static get is() { return "forja-text-block"; }
17
17
  static get properties() {
@@ -8,7 +8,7 @@ export class ForjaTimeline {
8
8
  render() {
9
9
  const hasEvents = this.events && this.events.length > 0;
10
10
  const classes = ['forja-timeline', `forja-timeline--${this.layout}`].join(' ');
11
- return (h("section", { key: 'cebf45a5dea290fa21d427394db4916b4224df54', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Timeline') }, h("slot", { key: 'cf344c1df40eb02608a4255ec4b176f9efcd0ada', name: "before" }), this.sectionTitle && h("h2", { key: 'fab8e6c374c2e57fa345d092fc9453b0e4fc16ec', class: "forja-timeline__title" }, this.sectionTitle), this.text && h("div", { key: '0282811543111b55001d8b4fbe7e02cb7d944a7e', class: "forja-timeline__text", innerHTML: 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: event.text })))))) : (h("slot", null)), h("slot", { key: 'b56de78fa2dee0850de2ef5c0ca48243f8cf6e2c', name: "after" })));
11
+ return (h("section", { key: '2dce62c902a967d64dd5b6a611a177335db92965', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Timeline') }, h("slot", { key: 'a68408fe55ac0b4ff1717d90abf94df9744395e8', name: "before" }), this.sectionTitle && h("h2", { key: '59f55ce9bc8783f510050851f19d124e1e10c869', class: "forja-timeline__title" }, this.sectionTitle), this.text && h("div", { key: '16c053110be832993154c4e88b9f29370d3b66e0', class: "forja-timeline__text", innerHTML: 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: event.text })))))) : (h("slot", null)), h("slot", { key: '112addeae24306716d65f4500fb6a2dbafb8a977', name: "after" })));
12
12
  }
13
13
  static get is() { return "forja-timeline"; }
14
14
  static get properties() {
@@ -19,7 +19,7 @@ export class ForjaVideo {
19
19
  }
20
20
  render() {
21
21
  const classes = ['forja-video', this.getAspectClass()].join(' ');
22
- return (h("section", { key: '8f7dd28af86bfa7a3a1418bef19e6f9658d49cc6', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Video') }, h("slot", { key: '7b34145bcee01a80095725a5adba5266dc1af703', name: "before" }), this.sectionTitle && h("h2", { key: '4959dd55b6c5e146482c14057ebeffd39c45bedd', class: "forja-video__title" }, this.sectionTitle), this.text && h("div", { key: '42af3c36bad0c44ae1194f17217e969d46a01e8d', class: "forja-video__text", innerHTML: this.text }), this.videoUrl && (h("figure", { key: 'da0c9136b339b00f4f699deb077daff0bcc48715', 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: '9c6b4f1345c7470b773c265a9884b799218a6d5f', name: "after" })));
22
+ return (h("section", { key: '3243f9bd00cd257d706cf6ca3ee463fc2f1de542', class: classes, "aria-label": sectionLabel(this.sectionTitle, 'Video') }, h("slot", { key: 'a95a30fcd2ce9e696a614b3e5614c32f23bb887c', name: "before" }), this.sectionTitle && h("h2", { key: 'd43d21c2d9e78ac33670d6c7073180d813c2d868', class: "forja-video__title" }, this.sectionTitle), this.text && h("div", { key: '98a11b54335f07c79f8ed7a0576378d223f91bfb', class: "forja-video__text", innerHTML: this.text }), this.videoUrl && (h("figure", { key: 'b6e4b9436e7c4f0040b00d8173ac2cf417acd575', 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: '788a8b32e8e0e524cf681995cd25f3b4ed565371', name: "after" })));
23
23
  }
24
24
  static get is() { return "forja-video"; }
25
25
  static get properties() {
@@ -0,0 +1,30 @@
1
+ import { h } from "@stencil/core";
2
+ /**
3
+ * Self-hosted ALTCHA helpers shared by the form sections (#773).
4
+ *
5
+ * The open-source `<altcha-widget>` custom element solves a server-issued
6
+ * proof-of-work challenge and injects a hidden `altcha` input carrying the
7
+ * solved payload. Forms forward that payload to the API as the submission's
8
+ * `bot_protection_token`. No Sentinel / paid features are involved; the host
9
+ * page registers the widget (e.g. `import 'altcha'`).
10
+ */
11
+ /** True once the widget has injected a non-empty solved `altcha` input. */
12
+ export function altchaSolved(form) {
13
+ const input = form.querySelector('input[name="altcha"]');
14
+ return !!input && input.value.length > 0;
15
+ }
16
+ /**
17
+ * Render the ALTCHA widget bound to a per-form challenge endpoint. `testId`
18
+ * lets each section namespace its widget for e2e targeting.
19
+ */
20
+ export function renderAltchaWidget(challengeUrl, testId) {
21
+ return h('altcha-widget', {
22
+ class: { 'forja-altcha': true },
23
+ name: 'altcha',
24
+ // altcha v3 renamed `challengeurl` → `challenge` (a string is the URL to
25
+ // fetch a fresh challenge from). The old attribute is silently ignored by
26
+ // v3, leaving the widget to fetch the host page instead of the challenge.
27
+ challenge: challengeUrl,
28
+ 'data-testid': testId,
29
+ });
30
+ }
@@ -1 +1 @@
1
- import{t,p as a,H as e,c,h as o}from"./p-B8rQMNWH.js";import{a as s,s as r}from"./p-CTbyYfdB.js";const i=a(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.forjaSubmit=c(this,"forjaSubmit"),this.handleSubmit=t=>{t.preventDefault(),this.forjaSubmit.emit(new FormData(t.target))}}render(){const t=this.fields&&this.fields.length>0;return o("section",{key:"15bb71d6aa6d3d73c85ab4cdd7346696f3145074",class:"forja-contact","aria-label":r(this.sectionTitle,"Contact")},o("slot",{key:"63820a89dd1c9812dc0b931fd8ce7b17a7b1782e",name:"before"}),o("div",{key:"b74c9c884de525c6a08a92c982f0a1c8a2235c02",class:"forja-contact__content"},this.sectionTitle&&o("h2",{key:"53014e550127a34a191adcef4b8eaa3b01dfec7a",class:"forja-contact__title"},this.sectionTitle),this.text&&o("div",{key:"38d9ff63e255d33328da1113a3b7f2fe82871a23",class:"forja-contact__text",innerHTML:this.text}),this.buttonText&&this.buttonHref&&o("a",{key:"15ebb06b95b3cb6d58fb3d4caaa1e713126a201a",href:this.buttonHref,class:"forja-contact__cta"},this.buttonText)),t?o("form",{class:"forja-contact__form",action:this.formAction,method:this.formAction?"post":void 0,onSubmit:this.handleSubmit},this.fields.map((t=>{const a=s(t.name,"contact");return o("div",{class:"forja-contact__field"},o("label",{class:"forja-contact__label",htmlFor:a},t.label,t.required&&o("span",{"aria-hidden":"true"}," *")),"textarea"===t.type?o("textarea",{id:a,name:t.name,class:"forja-contact__input forja-contact__input--textarea",required:t.required,"aria-required":t.required?"true":void 0,placeholder:t.placeholder}):o("input",{id:a,name:t.name,type:t.type,class:"forja-contact__input",required:t.required,"aria-required":t.required?"true":void 0,placeholder:t.placeholder}))})),o("button",{type:"submit",class:"forja-contact__submit"},this.buttonText||"Send")):o("slot",null),o("slot",{key:"7ec1b5c2ee966906cbd6fa05a2c8a5a2ca13d7e2",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"]}]);function n(){"undefined"!=typeof customElements&&["forja-contact"].forEach((a=>{"forja-contact"===a&&(customElements.get(t(a))||customElements.define(t(a),i))}))}n();const d=i,f=n;export{d as ForjaContact,f as defineCustomElement}
1
+ import{t,p as a,H as e,c as o,h as c}from"./p-B8rQMNWH.js";import{a as s,s as r}from"./p-CTbyYfdB.js";import{a as i,r as n}from"./p-B8qlvoCH.js";const f=a(class extends e{constructor(t){super(),!1!==t&&this.__registerHost(),this.forjaSubmit=o(this,"forjaSubmit"),this.botProtection="none",this.botProtectionUnsolved=!1,this.handleSubmit=t=>{t.preventDefault();const a=t.target;!this.requiresAltcha||i(a)?(this.botProtectionUnsolved=!1,this.forjaSubmit.emit(new FormData(a))):this.botProtectionUnsolved=!0}}get requiresAltcha(){return"mandatory"===this.botProtection}render(){const t=this.fields&&this.fields.length>0;return c("section",{key:"f5fa0e767bf2ed4abf6cf716b170fba8ac8fc569",class:"forja-contact","aria-label":r(this.sectionTitle,"Contact")},c("slot",{key:"ee7559a984260125a9f7bbece28a3383e5b8d383",name:"before"}),c("div",{key:"0ed33ac797e6f9e540d8b62a81f060b3d94f3303",class:"forja-contact__content"},this.sectionTitle&&c("h2",{key:"40d2850b9d1add8cd37b0238818c9bd351db2c0f",class:"forja-contact__title"},this.sectionTitle),this.text&&c("div",{key:"03487d7fdd10dfc55044eb320a26bc9ba69e122e",class:"forja-contact__text",innerHTML:this.text}),this.buttonText&&this.buttonHref&&c("a",{key:"7836f8b9458ce0a90309ccca829fb5a452d2eeec",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 a=s(t.name,"contact");return c("div",{class:"forja-contact__field"},c("label",{class:"forja-contact__label",htmlFor:a},t.label,t.required&&c("span",{"aria-hidden":"true"}," *")),"textarea"===t.type?c("textarea",{id:a,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:a,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&&n(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:"71b4d6ede8b21c3e841a74477c1093a5e8fc33fa",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 l(){"undefined"!=typeof customElements&&["forja-contact"].forEach((a=>{"forja-contact"===a&&(customElements.get(t(a))||customElements.define(t(a),f))}))}l();const d=f,h=l;export{d as ForjaContact,h as defineCustomElement}
@@ -1 +1 @@
1
- import{t as e,p as t,H as a,c as s,h as f}from"./p-B8rQMNWH.js";import{a as r,s as i}from"./p-CTbyYfdB.js";const c=t(class extends a{constructor(e){super(),!1!==e&&this.__registerHost(),this.forjaSubmit=s(this,"forjaSubmit"),this.buttonText="Subscribe",this.handleSubmit=e=>{e.preventDefault(),this.forjaSubmit.emit(new FormData(e.target))}}render(){const e=r(this.sectionTitle,"newsletter-email"),t=r(this.sectionTitle,"newsletter-name");return f("section",{key:"2b01646d3aa10d12c9568551edc2f8836a1e6199",class:"forja-newsletter","aria-label":i(this.sectionTitle,"Newsletter")},f("slot",{key:"020fd3a2e10a86f6bec4f9499e217818c534885f",name:"before"}),this.sectionTitle&&f("h2",{key:"e540517a30deb49e8d3b1271b8099fe2c5167f02",class:"forja-newsletter__title"},this.sectionTitle),this.text&&f("div",{key:"c31f0ad333733992f426ca1b564a609603ce7f43",class:"forja-newsletter__text",innerHTML:this.text}),f("form",{key:"08ba3a98b082670794797a08048ab1cc683aaef4",class:"forja-newsletter__form",action:this.formAction,method:this.formAction?"post":void 0,onSubmit:this.handleSubmit},this.showName&&f("div",{key:"9537213f04bdd4d2e2008a783bc70a7e7a268865",class:"forja-newsletter__field"},f("label",{key:"8feb551b009eb8f288cbcb54b18360c9fe09a694",class:"forja-newsletter__label",htmlFor:t},"Name"),f("input",{key:"b2df119a4d000e46a8e1cfb1ab2a2514be2f28a4",id:t,name:"name",type:"text",class:"forja-newsletter__input"})),f("div",{key:"7fff741fe589ee3bc7f5eb278f07dfb78a4363c1",class:"forja-newsletter__field"},f("label",{key:"2dda48f90d5303de371101b1da09e0402291a704",class:"forja-newsletter__label",htmlFor:e},"Email"),f("input",{key:"7c913bcd86483511926cd2c6df3b2d8fae202a3b",id:e,name:"email",type:"email",class:"forja-newsletter__input",required:!0,"aria-required":"true"})),f("button",{key:"374357cafdc13172944199b9537f32fa252fa274",type:"submit",class:"forja-newsletter__submit"},this.buttonText)),f("slot",{key:"253f3650ec3839083c2ef1a768c78627fef141b3",name:"after"}))}},[260,"forja-newsletter",{sectionTitle:[1,"section-title"],text:[1],buttonText:[1,"button-text"],formAction:[1,"form-action"],showName:[4,"show-name"]}]);function l(){"undefined"!=typeof customElements&&["forja-newsletter"].forEach((t=>{"forja-newsletter"===t&&(customElements.get(e(t))||customElements.define(e(t),c))}))}l();const o=c,n=l;export{o as ForjaNewsletter,n as defineCustomElement}
1
+ import{t as e,p as t,H as a,c as s,h as r}from"./p-B8rQMNWH.js";import{a as o,s as i}from"./p-CTbyYfdB.js";import{a as l,r as c}from"./p-B8qlvoCH.js";const n=t(class extends a{constructor(e){super(),!1!==e&&this.__registerHost(),this.forjaSubmit=s(this,"forjaSubmit"),this.buttonText="Subscribe",this.botProtection="none",this.botProtectionUnsolved=!1,this.handleSubmit=e=>{e.preventDefault();const t=e.target;!this.requiresAltcha||l(t)?(this.botProtectionUnsolved=!1,this.forjaSubmit.emit(new FormData(t))):this.botProtectionUnsolved=!0}}get requiresAltcha(){return"mandatory"===this.botProtection}render(){const e=o(this.sectionTitle,"newsletter-email"),t=o(this.sectionTitle,"newsletter-name");return r("section",{key:"0d15c9d013c2f1250999ad86d853cbb5126bbddc",class:"forja-newsletter","aria-label":i(this.sectionTitle,"Newsletter")},r("slot",{key:"aba062b799c952a6936267573bf841fb7403a350",name:"before"}),this.sectionTitle&&r("h2",{key:"f00db5dd8b536dca31d1f39453753e4e9126f97f",class:"forja-newsletter__title"},this.sectionTitle),this.text&&r("div",{key:"857102c1929b0615a5782d97ffc969d12bb3bec6",class:"forja-newsletter__text",innerHTML:this.text}),r("form",{key:"9ac77419043d02719d05c949e8ac6e13f411affe",class:"forja-newsletter__form",action:this.formAction,method:this.formAction?"post":void 0,onSubmit:this.handleSubmit},this.showName&&r("div",{key:"073625ebadd2dd040dc19e48f136adb4919d428b",class:"forja-newsletter__field"},r("label",{key:"3133a36ccdf1c7f8a7204e2e83c71b16b1e4dcf2",class:"forja-newsletter__label",htmlFor:t},"Name"),r("input",{key:"f49b6e4e3b7f1037e6b7aaa18a6a4b10cb15d730",id:t,name:"name",type:"text",class:"forja-newsletter__input"})),r("div",{key:"59b5408e884026f6351b1397e536fc184ac2c1de",class:"forja-newsletter__field"},r("label",{key:"436373562856e04f27addcacba5083805155c913",class:"forja-newsletter__label",htmlFor:e},"Email"),r("input",{key:"042c434c7fab15fd4235e1fe2d6b509db81d1e43",id:e,name:"email",type:"email",class:"forja-newsletter__input",required:!0,"aria-required":"true"})),this.requiresAltcha&&c(this.altchaChallengeUrl,"forja-newsletter-altcha"),this.botProtectionUnsolved&&r("p",{key:"4375ea4a0f67a9dad1b6e1797e898c4b90125dfb",class:"forja-newsletter__error",role:"alert","data-testid":"forja-newsletter-altcha-error"},"Please complete the verification before submitting."),r("button",{key:"7eddc2c91799598f71af799af6c46159d688195a",type:"submit",class:"forja-newsletter__submit"},this.buttonText)),r("slot",{key:"f13a320d972bbb402cb218ee6d4d2650f5f15161",name:"after"}))}},[260,"forja-newsletter",{sectionTitle:[1,"section-title"],text:[1],buttonText:[1,"button-text"],formAction:[1,"form-action"],showName:[4,"show-name"],botProtection:[1,"bot-protection"],altchaChallengeUrl:[1,"altcha-challenge-url"],botProtectionUnsolved:[32]}]);function f(){"undefined"!=typeof customElements&&["forja-newsletter"].forEach((t=>{"forja-newsletter"===t&&(customElements.get(e(t))||customElements.define(e(t),n))}))}f();const d=n,b=f;export{d as ForjaNewsletter,b as defineCustomElement}
@@ -1 +1 @@
1
- import{t as o,p as s,H as r,h as l}from"./p-B8rQMNWH.js";import{s as t}from"./p-CTbyYfdB.js";const i=s(class extends r{constructor(o){super(),!1!==o&&this.__registerHost()}renderExperiences(){return this.experiences&&0!==this.experiences.length?l("div",{class:"forja-portfolio__experiences"},l("h3",{class:"forja-portfolio__group-title"},"Experience"),l("ol",{class:"forja-portfolio__list"},this.experiences.map((o=>l("li",{class:"forja-portfolio__entry"},l("article",{class:"forja-portfolio__card"},o.logoUrl&&l("img",{src:o.logoUrl,alt:"",class:"forja-portfolio__logo",loading:"lazy"}),l("div",{class:"forja-portfolio__details"},l("h4",{class:"forja-portfolio__role"},o.role),l("p",{class:"forja-portfolio__company"},o.company),o.period&&l("time",{class:"forja-portfolio__period"},o.period),o.description&&l("div",{class:"forja-portfolio__description",innerHTML:o.description})))))))):null}renderEducation(){return this.education&&0!==this.education.length?l("div",{class:"forja-portfolio__education"},l("h3",{class:"forja-portfolio__group-title"},"Education"),l("ol",{class:"forja-portfolio__list"},this.education.map((o=>l("li",{class:"forja-portfolio__entry"},l("article",{class:"forja-portfolio__card"},l("div",{class:"forja-portfolio__details"},l("h4",{class:"forja-portfolio__role"},o.degree),l("p",{class:"forja-portfolio__company"},o.institution),o.period&&l("time",{class:"forja-portfolio__period"},o.period),o.description&&l("div",{class:"forja-portfolio__description",innerHTML:o.description})))))))):null}renderSkills(){if(!this.skills||0===this.skills.length)return null;const o=this.skills.reduce(((o,s)=>{const r=s.category||"General";return o[r]||(o[r]=[]),o[r].push(s),o}),{});return l("div",{class:"forja-portfolio__skills"},l("h3",{class:"forja-portfolio__group-title"},"Skills"),Object.entries(o).map((([s,r])=>l("div",{class:"forja-portfolio__skill-group"},Object.keys(o).length>1&&l("h4",{class:"forja-portfolio__skill-category"},s),l("ul",{class:"forja-portfolio__skill-list","data-columns":this.columns},r.map((o=>l("li",{class:"forja-portfolio__skill"},o.name))))))))}render(){return l("section",{key:"96e2ad1a4250c58f0785ccf1dcf38c7ac5b8d53a",class:"forja-portfolio","aria-label":t(this.sectionTitle,"Portfolio")},l("slot",{key:"a4f4d1379d09a2019e5e92de5bf0f65d8a78bf62",name:"before"}),this.sectionTitle&&l("h2",{key:"3419d7e33cda89d94ad2166c02df2b5451715ca7",class:"forja-portfolio__title"},this.sectionTitle),this.text&&l("div",{key:"1dc200413658bde80829bd57b166772e6e27b8be",class:"forja-portfolio__text",innerHTML:this.text}),this.renderExperiences(),this.renderEducation(),this.renderSkills(),l("slot",{key:"4ea0373f8e21524b516dd3f4b5a967acd3c7d7cf",name:"after"}))}},[260,"forja-portfolio",{sectionTitle:[1,"section-title"],text:[1],experiences:[16],education:[16],skills:[16],columns:[2]}]);function a(){"undefined"!=typeof customElements&&["forja-portfolio"].forEach((s=>{"forja-portfolio"===s&&(customElements.get(o(s))||customElements.define(o(s),i))}))}a();const e=i,f=a;export{e as ForjaPortfolio,f as defineCustomElement}
1
+ import{t as o,p as s,H as r,h as l}from"./p-B8rQMNWH.js";import{s as t}from"./p-CTbyYfdB.js";const i=s(class extends r{constructor(o){super(),!1!==o&&this.__registerHost()}renderExperiences(){return this.experiences&&0!==this.experiences.length?l("div",{class:"forja-portfolio__experiences"},l("h3",{class:"forja-portfolio__group-title"},"Experience"),l("ol",{class:"forja-portfolio__list"},this.experiences.map((o=>l("li",{class:"forja-portfolio__entry"},l("article",{class:"forja-portfolio__card"},o.logoUrl&&l("img",{src:o.logoUrl,alt:"",class:"forja-portfolio__logo",loading:"lazy"}),l("div",{class:"forja-portfolio__details"},l("h4",{class:"forja-portfolio__role"},o.role),l("p",{class:"forja-portfolio__company"},o.company),o.period&&l("time",{class:"forja-portfolio__period"},o.period),o.description&&l("div",{class:"forja-portfolio__description",innerHTML:o.description})))))))):null}renderEducation(){return this.education&&0!==this.education.length?l("div",{class:"forja-portfolio__education"},l("h3",{class:"forja-portfolio__group-title"},"Education"),l("ol",{class:"forja-portfolio__list"},this.education.map((o=>l("li",{class:"forja-portfolio__entry"},l("article",{class:"forja-portfolio__card"},l("div",{class:"forja-portfolio__details"},l("h4",{class:"forja-portfolio__role"},o.degree),l("p",{class:"forja-portfolio__company"},o.institution),o.period&&l("time",{class:"forja-portfolio__period"},o.period),o.description&&l("div",{class:"forja-portfolio__description",innerHTML:o.description})))))))):null}renderSkills(){if(!this.skills||0===this.skills.length)return null;const o=this.skills.reduce(((o,s)=>{const r=s.category||"General";return o[r]||(o[r]=[]),o[r].push(s),o}),{});return l("div",{class:"forja-portfolio__skills"},l("h3",{class:"forja-portfolio__group-title"},"Skills"),Object.entries(o).map((([s,r])=>l("div",{class:"forja-portfolio__skill-group"},Object.keys(o).length>1&&l("h4",{class:"forja-portfolio__skill-category"},s),l("ul",{class:"forja-portfolio__skill-list","data-columns":this.columns},r.map((o=>l("li",{class:"forja-portfolio__skill"},o.name))))))))}render(){return l("section",{key:"506011a5c845a8cbee32a77a2081a269efa3c2d4",class:"forja-portfolio","aria-label":t(this.sectionTitle,"Portfolio")},l("slot",{key:"f4c91d111a4e49a2492a5056376b1c2245d7db1f",name:"before"}),this.sectionTitle&&l("h2",{key:"801b3d72f636ed6e5d51f37748ad980970acc72c",class:"forja-portfolio__title"},this.sectionTitle),this.text&&l("div",{key:"2770e9835554376f00a46ad670cc2530651e6dfc",class:"forja-portfolio__text",innerHTML:this.text}),this.renderExperiences(),this.renderEducation(),this.renderSkills(),l("slot",{key:"48ded21e8a2ac6d279ea1e39d6fa6eaec32ef7aa",name:"after"}))}},[260,"forja-portfolio",{sectionTitle:[1,"section-title"],text:[1],experiences:[16],education:[16],skills:[16],columns:[2]}]);function a(){"undefined"!=typeof customElements&&["forja-portfolio"].forEach((s=>{"forja-portfolio"===s&&(customElements.get(o(s))||customElements.define(o(s),i))}))}a();const e=i,f=a;export{e as ForjaPortfolio,f as defineCustomElement}
@@ -1 +1 @@
1
- import{t as i,p as s,H as c,h as r}from"./p-B8rQMNWH.js";import{s as a}from"./p-CTbyYfdB.js";const e=s(class extends c{constructor(i){super(),!1!==i&&this.__registerHost()}render(){const i=this.tiers&&this.tiers.length>0;return r("section",{key:"bae1df3d72dc351c1e55506fdfaad535f45814f6",class:"forja-pricing","aria-label":a(this.sectionTitle,"Pricing")},r("slot",{key:"343e7d5490dfc07cc2024661d404b1c2a44c46a9",name:"before"}),(this.sectionTitle||this.text)&&r("div",{key:"e91c8e1945da57bc28bbc6ee09b72dca1dd03d22",class:"forja-pricing__header"},this.sectionTitle&&r("h2",{key:"81000892bb72e034613283df85928c1c667a4f95",class:"forja-pricing__title"},this.sectionTitle),this.text&&r("div",{key:"56363c268fb40a5512ab90005463bf43402e8c2f",class:"forja-pricing__text",innerHTML:this.text})),r("div",{class:"forja-pricing__tiers",role:"list","data-columns":this.columns},i?this.tiers.map((i=>r("div",{class:"forja-pricing__tier"+(i.highlighted?" forja-pricing__tier--highlighted":""),role:"listitem"},r("h3",{class:"forja-pricing__tier-name"},i.name),r("div",{class:"forja-pricing__price"},r("span",{class:"forja-pricing__amount"},i.price),i.period&&r("span",{class:"forja-pricing__period"},i.period)),i.description&&r("p",{class:"forja-pricing__description"},i.description),i.features&&i.features.length>0&&r("ul",{class:"forja-pricing__features"},i.features.map((i=>r("li",{class:"forja-pricing__feature"},i)))),i.buttonText&&i.buttonHref&&r("a",{href:i.buttonHref,class:"forja-pricing__cta"},i.buttonText)))):r("slot",null)),r("slot",{key:"d4ed110c1c8ab8a865ba7c1066caf5867c36494c",name:"after"}))}},[260,"forja-pricing",{sectionTitle:[1,"section-title"],text:[1],tiers:[16],columns:[2]}]);function t(){"undefined"!=typeof customElements&&["forja-pricing"].forEach((s=>{"forja-pricing"===s&&(customElements.get(i(s))||customElements.define(i(s),e))}))}t();const n=e,o=t;export{n as ForjaPricing,o as defineCustomElement}
1
+ import{t as i,p as s,H as e,h as c}from"./p-B8rQMNWH.js";import{s as r}from"./p-CTbyYfdB.js";const a=s(class extends e{constructor(i){super(),!1!==i&&this.__registerHost()}render(){const i=this.tiers&&this.tiers.length>0;return c("section",{key:"ecb73e364f3f4892d3d937fc7fa5df7b1f1a338e",class:"forja-pricing","aria-label":r(this.sectionTitle,"Pricing")},c("slot",{key:"08905beca81a6eb6afb74d161f47bc7e0f5b69c4",name:"before"}),(this.sectionTitle||this.text)&&c("div",{key:"fa94236ab6731c6e2f7401075bba874ed39206b9",class:"forja-pricing__header"},this.sectionTitle&&c("h2",{key:"8ced20c10ac8235fd2525c6cbbc4b5689c10fe18",class:"forja-pricing__title"},this.sectionTitle),this.text&&c("div",{key:"bf6f79ee461263f8e5bd9af2c2233683fe6cf110",class:"forja-pricing__text",innerHTML:this.text})),c("div",{class:"forja-pricing__tiers",role:"list","data-columns":this.columns},i?this.tiers.map((i=>c("div",{class:"forja-pricing__tier"+(i.highlighted?" forja-pricing__tier--highlighted":""),role:"listitem"},c("h3",{class:"forja-pricing__tier-name"},i.name),c("div",{class:"forja-pricing__price"},c("span",{class:"forja-pricing__amount"},i.price),i.period&&c("span",{class:"forja-pricing__period"},i.period)),i.description&&c("p",{class:"forja-pricing__description"},i.description),i.features&&i.features.length>0&&c("ul",{class:"forja-pricing__features"},i.features.map((i=>c("li",{class:"forja-pricing__feature"},i)))),i.buttonText&&i.buttonHref&&c("a",{href:i.buttonHref,class:"forja-pricing__cta"},i.buttonText)))):c("slot",null)),c("slot",{key:"138c32c758745fc0c225c981e15da56557659395",name:"after"}))}},[260,"forja-pricing",{sectionTitle:[1,"section-title"],text:[1],tiers:[16],columns:[2]}]);function t(){"undefined"!=typeof customElements&&["forja-pricing"].forEach((s=>{"forja-pricing"===s&&(customElements.get(i(s))||customElements.define(i(s),a))}))}t();const f=a,n=t;export{f as ForjaPricing,n as defineCustomElement}
@@ -1 +1 @@
1
- import{t as s,p as e,H as t,h as a}from"./p-B8rQMNWH.js";import{s as c}from"./p-CTbyYfdB.js";const o=e(class extends t{constructor(s){super(),!1!==s&&this.__registerHost()}render(){const s=this.items&&this.items.length>0;return a("section",{key:"15db32b9f5878409c28debb36ded1047f657ce2a",class:"forja-projects","aria-label":c(this.sectionTitle,"Projects")},a("slot",{key:"f5dd2f0ca808fcfeaa11c4006dfaa88723ea4a47",name:"before"}),this.sectionTitle&&a("h2",{key:"fd5e121eb42bba78d4dc5b2719c1129182ebc030",class:"forja-projects__title"},this.sectionTitle),this.text&&a("div",{key:"dd82836aaf6934f7420fa2cce02e9574e27b4781",class:"forja-projects__text",innerHTML:this.text}),s?a("div",{class:"forja-projects__grid",role:"list","data-columns":this.columns},this.items.map((s=>a("article",{class:"forja-projects__card",role:"listitem"},s.imageUrl&&a("img",{src:s.imageUrl,alt:"",class:"forja-projects__image",loading:"lazy"}),a("div",{class:"forja-projects__content"},a("div",{class:"forja-projects__header"},a("h3",{class:"forja-projects__name"},s.href?a("a",{href:s.href,class:"forja-projects__link"},s.title):s.title),s.status&&a("span",{class:"forja-projects__status"},s.status)),s.description&&a("div",{class:"forja-projects__description",innerHTML:s.description}),s.tags&&s.tags.length>0&&a("ul",{class:"forja-projects__tags"},s.tags.map((s=>a("li",{class:"forja-projects__tag"},s))))))))):a("slot",null),a("slot",{key:"b7772bead8f5c04f3b3e857bc9da18adc29e38b7",name:"after"}))}},[260,"forja-projects",{sectionTitle:[1,"section-title"],text:[1],items:[16],columns:[2]}]);function r(){"undefined"!=typeof customElements&&["forja-projects"].forEach((e=>{"forja-projects"===e&&(customElements.get(s(e))||customElements.define(s(e),o))}))}r();const i=o,l=r;export{i as ForjaProjects,l as defineCustomElement}
1
+ import{t as s,p as e,H as t,h as a}from"./p-B8rQMNWH.js";import{s as c}from"./p-CTbyYfdB.js";const o=e(class extends t{constructor(s){super(),!1!==s&&this.__registerHost()}render(){const s=this.items&&this.items.length>0;return a("section",{key:"4fddb0d0031673c60d81741111e6fff5ebbb20a6",class:"forja-projects","aria-label":c(this.sectionTitle,"Projects")},a("slot",{key:"0a295eabcbfa33f584f1538b84b70cb85fd012ae",name:"before"}),this.sectionTitle&&a("h2",{key:"3792ed7f5e6e86dc9fd36274a361bffcc1267d8e",class:"forja-projects__title"},this.sectionTitle),this.text&&a("div",{key:"246daa3ff95477f019d70c1d2c3c24ccade0ecb1",class:"forja-projects__text",innerHTML:this.text}),s?a("div",{class:"forja-projects__grid",role:"list","data-columns":this.columns},this.items.map((s=>a("article",{class:"forja-projects__card",role:"listitem"},s.imageUrl&&a("img",{src:s.imageUrl,alt:"",class:"forja-projects__image",loading:"lazy"}),a("div",{class:"forja-projects__content"},a("div",{class:"forja-projects__header"},a("h3",{class:"forja-projects__name"},s.href?a("a",{href:s.href,class:"forja-projects__link"},s.title):s.title),s.status&&a("span",{class:"forja-projects__status"},s.status)),s.description&&a("div",{class:"forja-projects__description",innerHTML:s.description}),s.tags&&s.tags.length>0&&a("ul",{class:"forja-projects__tags"},s.tags.map((s=>a("li",{class:"forja-projects__tag"},s))))))))):a("slot",null),a("slot",{key:"605aa0a889bdc8199dca6895248f3cf19d8d4c83",name:"after"}))}},[260,"forja-projects",{sectionTitle:[1,"section-title"],text:[1],items:[16],columns:[2]}]);function r(){"undefined"!=typeof customElements&&["forja-projects"].forEach((e=>{"forja-projects"===e&&(customElements.get(s(e))||customElements.define(s(e),o))}))}r();const f=o,i=r;export{f as ForjaProjects,i as defineCustomElement}
@@ -1 +1 @@
1
- import{t as s,p as t,H as a,h as e}from"./p-B8rQMNWH.js";import{s as o}from"./p-CTbyYfdB.js";const c=t(class extends a{constructor(s){super(),!1!==s&&this.__registerHost()}render(){const s=this.items&&this.items.length>0,t=["forja-stats",this.statsStyle&&"forja-stats--"+this.statsStyle].filter(Boolean).join(" ");return e("section",{key:"3aa6f2f843bb0e295dcb84740af6c9fda39d8309",class:t,"aria-label":o(this.sectionTitle,"Statistics")},e("slot",{key:"9565f67c2e7192f8b965be5555eb7f43e271692c",name:"before"}),this.sectionTitle&&e("h2",{key:"cbf15bf5bc0e62702590a1725a6e188bea96639c",class:"forja-stats__title"},this.sectionTitle),this.text&&e("div",{key:"0beb283e6387a04c20a2ba853266b12769ac9725",class:"forja-stats__text",innerHTML:this.text}),s?e("dl",{class:"forja-stats__list","data-columns":this.columns},this.items.map((s=>e("div",{class:"forja-stats__item"},e("dd",{class:"forja-stats__value"},s.value),e("dt",{class:"forja-stats__label"},s.label))))):e("slot",null),e("slot",{key:"7a2ffd297dd37c72d0c16a42b268e8a6f607ad40",name:"after"}))}},[260,"forja-stats",{sectionTitle:[1,"section-title"],text:[1],items:[16],columns:[2],statsStyle:[1,"stats-style"]}]);function f(){"undefined"!=typeof customElements&&["forja-stats"].forEach((t=>{"forja-stats"===t&&(customElements.get(s(t))||customElements.define(s(t),c))}))}f();const i=c,l=f;export{i as ForjaStats,l as defineCustomElement}
1
+ import{t as s,p as t,H as a,h as e}from"./p-B8rQMNWH.js";import{s as c}from"./p-CTbyYfdB.js";const o=t(class extends a{constructor(s){super(),!1!==s&&this.__registerHost()}render(){const s=this.items&&this.items.length>0,t=["forja-stats",this.statsStyle&&"forja-stats--"+this.statsStyle].filter(Boolean).join(" ");return e("section",{key:"cf1a9139a3b18e099e66f5abcfdcf7f5c90cdf74",class:t,"aria-label":c(this.sectionTitle,"Statistics")},e("slot",{key:"fc61e06e592f1cc1d1f36d47b2b8fd33b520f421",name:"before"}),this.sectionTitle&&e("h2",{key:"42026c0e7b55f0f7b185d969ca1219b1c44f7632",class:"forja-stats__title"},this.sectionTitle),this.text&&e("div",{key:"d6f9d119958786dbef4aa39e6bae82a22465e21a",class:"forja-stats__text",innerHTML:this.text}),s?e("dl",{class:"forja-stats__list","data-columns":this.columns},this.items.map((s=>e("div",{class:"forja-stats__item"},e("dd",{class:"forja-stats__value"},s.value),e("dt",{class:"forja-stats__label"},s.label))))):e("slot",null),e("slot",{key:"468c62818cee963c316c57891964bac3d4f793a6",name:"after"}))}},[260,"forja-stats",{sectionTitle:[1,"section-title"],text:[1],items:[16],columns:[2],statsStyle:[1,"stats-style"]}]);function f(){"undefined"!=typeof customElements&&["forja-stats"].forEach((t=>{"forja-stats"===t&&(customElements.get(s(t))||customElements.define(s(t),o))}))}f();const i=o,l=f;export{i as ForjaStats,l as defineCustomElement}
@@ -1 +1 @@
1
- import{t as a,p as s,H as t,h as l}from"./p-B8rQMNWH.js";import{s as e}from"./p-CTbyYfdB.js";const c=s(class extends t{constructor(a){super(),!1!==a&&this.__registerHost()}render(){const a=this.tags&&this.tags.length>0;return l("section",{key:"dc9015d823c69a88c8252115948517887e7ce400",class:"forja-tag-cloud","aria-label":e(this.sectionTitle,"Tags")},l("slot",{key:"4a860c211a75f97d67755a1811db76c20840740f",name:"before"}),this.sectionTitle&&l("h2",{key:"bfae3b68ba76c7ce14d01d52ee47a5b5b6f04f89",class:"forja-tag-cloud__title"},this.sectionTitle),this.text&&l("div",{key:"7175c987bfadf8e4bb433e2cb8b856412818c0d0",class:"forja-tag-cloud__text",innerHTML:this.text}),a?l("nav",{class:"forja-tag-cloud__nav","aria-label":"Tags"},l("ul",{class:"forja-tag-cloud__list",role:"list"},this.tags.map((a=>l("li",{class:"forja-tag-cloud__item"},a.href?l("a",{href:a.href,class:"forja-tag-cloud__tag"},l("span",{class:"forja-tag-cloud__label"},a.label),null!=a.count&&l("span",{class:"forja-tag-cloud__count","aria-label":a.count+" items"},"(",a.count,")")):l("span",{class:"forja-tag-cloud__tag"},l("span",{class:"forja-tag-cloud__label"},a.label),null!=a.count&&l("span",{class:"forja-tag-cloud__count","aria-label":a.count+" items"},"(",a.count,")"))))))):l("slot",null),l("slot",{key:"673878f83e689016cf1a001e87774fe66c4c7baa",name:"after"}))}},[260,"forja-tag-cloud",{sectionTitle:[1,"section-title"],text:[1],tags:[16]}]);function o(){"undefined"!=typeof customElements&&["forja-tag-cloud"].forEach((s=>{"forja-tag-cloud"===s&&(customElements.get(a(s))||customElements.define(a(s),c))}))}o();const r=c,f=o;export{r as ForjaTagCloud,f as defineCustomElement}
1
+ import{t as a,p as s,H as t,h as l}from"./p-B8rQMNWH.js";import{s as e}from"./p-CTbyYfdB.js";const o=s(class extends t{constructor(a){super(),!1!==a&&this.__registerHost()}render(){const a=this.tags&&this.tags.length>0;return l("section",{key:"eb6d00e49fa790e23e2397f4927e20d545222217",class:"forja-tag-cloud","aria-label":e(this.sectionTitle,"Tags")},l("slot",{key:"8a34fd949d2f96dd8fd92d6479a052373fc09d00",name:"before"}),this.sectionTitle&&l("h2",{key:"90fd03b82e40b74a16c91ba8c86100e9868239bb",class:"forja-tag-cloud__title"},this.sectionTitle),this.text&&l("div",{key:"7cf8c4c19943defa0e23f852ab27372307fa45b8",class:"forja-tag-cloud__text",innerHTML:this.text}),a?l("nav",{class:"forja-tag-cloud__nav","aria-label":"Tags"},l("ul",{class:"forja-tag-cloud__list",role:"list"},this.tags.map((a=>l("li",{class:"forja-tag-cloud__item"},a.href?l("a",{href:a.href,class:"forja-tag-cloud__tag"},l("span",{class:"forja-tag-cloud__label"},a.label),null!=a.count&&l("span",{class:"forja-tag-cloud__count","aria-label":a.count+" items"},"(",a.count,")")):l("span",{class:"forja-tag-cloud__tag"},l("span",{class:"forja-tag-cloud__label"},a.label),null!=a.count&&l("span",{class:"forja-tag-cloud__count","aria-label":a.count+" items"},"(",a.count,")"))))))):l("slot",null),l("slot",{key:"9d24cb03b6ea67f87f11dd97410ae25ae389276b",name:"after"}))}},[260,"forja-tag-cloud",{sectionTitle:[1,"section-title"],text:[1],tags:[16]}]);function c(){"undefined"!=typeof customElements&&["forja-tag-cloud"].forEach((s=>{"forja-tag-cloud"===s&&(customElements.get(a(s))||customElements.define(a(s),o))}))}c();const f=o,r=c;export{f as ForjaTagCloud,r as defineCustomElement}
@@ -1 +1 @@
1
- import{t as s,p as a,H as e,h as t}from"./p-B8rQMNWH.js";import{s as o}from"./p-CTbyYfdB.js";const r=a(class extends e{constructor(s){super(),!1!==s&&this.__registerHost(),this.showRole=!0,this.showBio=!0}render(){const s=this.members&&this.members.length>0;return t("section",{key:"b5d2dcb808386048367cfa97b31c6075732ba828",class:"forja-team","aria-label":o(this.sectionTitle,"Team")},t("slot",{key:"df3d484b90a7d755eda0a784f21edbd921e71401",name:"before"}),this.sectionTitle&&t("h2",{key:"2818b057df2f2c6319af8d17a43537714a62db34",class:"forja-team__title"},this.sectionTitle),this.text&&t("div",{key:"265903df6beaae84ff4d6cc1a9d11ae3f51f15d5",class:"forja-team__text",innerHTML:this.text}),s?t("ul",{class:"forja-team__grid",role:"list","data-columns":this.columns},this.members.map((s=>t("li",{class:"forja-team__member"},s.imageUrl&&t("figure",{class:"forja-team__photo"},t("img",{src:s.imageUrl,alt:s.name,class:"forja-team__image",loading:"lazy"})),t("h3",{class:"forja-team__name"},s.name),this.showRole&&s.role&&t("p",{class:"forja-team__role"},s.role),this.showBio&&s.bio&&t("p",{class:"forja-team__bio"},s.bio))))):t("slot",null),t("slot",{key:"81263f35ba229207c4978b65890c527590dfdae5",name:"after"}))}},[260,"forja-team",{sectionTitle:[1,"section-title"],text:[1],members:[16],columns:[2],showRole:[4,"show-role"],showBio:[4,"show-bio"]}]);function i(){"undefined"!=typeof customElements&&["forja-team"].forEach((a=>{"forja-team"===a&&(customElements.get(s(a))||customElements.define(s(a),r))}))}i();const l=r,f=i;export{l as ForjaTeam,f as defineCustomElement}
1
+ import{t as e,p as s,H as a,h as t}from"./p-B8rQMNWH.js";import{s as o}from"./p-CTbyYfdB.js";const c=s(class extends a{constructor(e){super(),!1!==e&&this.__registerHost(),this.showRole=!0,this.showBio=!0}render(){const e=this.members&&this.members.length>0;return t("section",{key:"65ab08dab0a410e178ce2b0a010987533b575bcd",class:"forja-team","aria-label":o(this.sectionTitle,"Team")},t("slot",{key:"daa75a84eb8bf43d21057b9f3620f96407d65007",name:"before"}),this.sectionTitle&&t("h2",{key:"682f5ee8cf15e378cdb6b33cc80e078886ca29ce",class:"forja-team__title"},this.sectionTitle),this.text&&t("div",{key:"4ce99703de2127a6637bd7e86c3bc0944c6b5960",class:"forja-team__text",innerHTML:this.text}),e?t("ul",{class:"forja-team__grid",role:"list","data-columns":this.columns},this.members.map((e=>t("li",{class:"forja-team__member"},e.imageUrl&&t("figure",{class:"forja-team__photo"},t("img",{src:e.imageUrl,alt:e.name,class:"forja-team__image",loading:"lazy"})),t("h3",{class:"forja-team__name"},e.name),this.showRole&&e.role&&t("p",{class:"forja-team__role"},e.role),this.showBio&&e.bio&&t("p",{class:"forja-team__bio"},e.bio))))):t("slot",null),t("slot",{key:"97fff600c6ed995066a34008edee4a73a9c954d2",name:"after"}))}},[260,"forja-team",{sectionTitle:[1,"section-title"],text:[1],members:[16],columns:[2],showRole:[4,"show-role"],showBio:[4,"show-bio"]}]);function r(){"undefined"!=typeof customElements&&["forja-team"].forEach((s=>{"forja-team"===s&&(customElements.get(e(s))||customElements.define(e(s),c))}))}r();const i=c,l=r;export{i as ForjaTeam,l as defineCustomElement}
@@ -1 +1 @@
1
- import{t as s,p as t,H as a,h as e}from"./p-B8rQMNWH.js";import{s as i}from"./p-CTbyYfdB.js";const o=t(class extends a{constructor(s){super(),!1!==s&&this.__registerHost()}render(){const s=this.items&&this.items.length>0;return e("section",{key:"608ac151afb59df61bf99ea38f5eba2d819ef6ac",class:"forja-testimonials","aria-label":i(this.sectionTitle,"Testimonials")},e("slot",{key:"016f3b316cec3979efaee8dd4e19497a623ca292",name:"before"}),this.sectionTitle&&e("h2",{key:"5d0f9dac43cbd4e6d7ded6236c98a4d428d3723a",class:"forja-testimonials__title"},this.sectionTitle),this.text&&e("div",{key:"8d5bd0fd2c9b39aba0a461bef14df16a4b8197ba",class:"forja-testimonials__text",innerHTML:this.text}),e("div",{class:"forja-testimonials__list",role:"list","data-columns":this.columns},s?this.items.map((s=>e("blockquote",{class:"forja-testimonials__item",role:"listitem"},e("p",{class:"forja-testimonials__quote"},s.quote),e("footer",{class:"forja-testimonials__attribution"},s.avatarUrl&&e("img",{src:s.avatarUrl,alt:"",class:"forja-testimonials__avatar",loading:"lazy"}),e("cite",{class:"forja-testimonials__author"},e("span",{class:"forja-testimonials__name"},s.author),s.role&&e("span",{class:"forja-testimonials__role"},s.role)))))):e("slot",null)),e("slot",{key:"f5079a207668e548632b607f174e630a46854cc8",name:"after"}))}},[260,"forja-testimonials",{sectionTitle:[1,"section-title"],text:[1],items:[16],columns:[2]}]);function l(){"undefined"!=typeof customElements&&["forja-testimonials"].forEach((t=>{"forja-testimonials"===t&&(customElements.get(s(t))||customElements.define(s(t),o))}))}l();const n=o,c=l;export{n as ForjaTestimonials,c as defineCustomElement}
1
+ import{t as s,p as t,H as a,h as e}from"./p-B8rQMNWH.js";import{s as i}from"./p-CTbyYfdB.js";const o=t(class extends a{constructor(s){super(),!1!==s&&this.__registerHost()}render(){const s=this.items&&this.items.length>0;return e("section",{key:"348a3aea6d842d43dcbb8506111d2146347ecf65",class:"forja-testimonials","aria-label":i(this.sectionTitle,"Testimonials")},e("slot",{key:"4d372a82bb34fc2408cb168f349550f5213c1152",name:"before"}),this.sectionTitle&&e("h2",{key:"52323f5e292192065b3ab8a54efb76bc2cb9247f",class:"forja-testimonials__title"},this.sectionTitle),this.text&&e("div",{key:"f285a90d384919c0a6221b02ef2bdddf584c8636",class:"forja-testimonials__text",innerHTML:this.text}),e("div",{class:"forja-testimonials__list",role:"list","data-columns":this.columns},s?this.items.map((s=>e("blockquote",{class:"forja-testimonials__item",role:"listitem"},e("p",{class:"forja-testimonials__quote"},s.quote),e("footer",{class:"forja-testimonials__attribution"},s.avatarUrl&&e("img",{src:s.avatarUrl,alt:"",class:"forja-testimonials__avatar",loading:"lazy"}),e("cite",{class:"forja-testimonials__author"},e("span",{class:"forja-testimonials__name"},s.author),s.role&&e("span",{class:"forja-testimonials__role"},s.role)))))):e("slot",null)),e("slot",{key:"5c88e789b532b1039e2b0c74ec0afc4fb63185fb",name:"after"}))}},[260,"forja-testimonials",{sectionTitle:[1,"section-title"],text:[1],items:[16],columns:[2]}]);function l(){"undefined"!=typeof customElements&&["forja-testimonials"].forEach((t=>{"forja-testimonials"===t&&(customElements.get(s(t))||customElements.define(s(t),o))}))}l();const n=o,c=l;export{n as ForjaTestimonials,c as defineCustomElement}
@@ -1 +1 @@
1
- import{t,p as e,H as s,h as o}from"./p-B8rQMNWH.js";import{s as a}from"./p-CTbyYfdB.js";const c=e(class extends s{constructor(t){super(),!1!==t&&this.__registerHost(),this.width="default",this.alignment="left"}render(){return o("section",{key:"2cc7f40271cc449ec8b4fc88576398a0b0763aca",class:["forja-text","forja-text--"+this.width,"forja-text--"+this.alignment].join(" "),"aria-label":a(this.sectionTitle,"Content")},o("slot",{key:"7da4597bc3dde56e4ae4179ae871f08f332c1c7f",name:"before"}),this.sectionTitle&&o("h2",{key:"ba03ee398659bf8926d6c434012b553e430a9413",class:"forja-text__title"},this.sectionTitle),this.text?o("div",{class:"forja-text__content",innerHTML:this.text}):o("div",{class:"forja-text__content"},o("slot",null)),o("slot",{key:"138eeef4fa534fd22772da123bbd6b7b30c20078",name:"after"}))}},[260,"forja-text-block",{sectionTitle:[1,"section-title"],text:[1],width:[1],alignment:[1]}]);function n(){"undefined"!=typeof customElements&&["forja-text-block"].forEach((e=>{"forja-text-block"===e&&(customElements.get(t(e))||customElements.define(t(e),c))}))}n();const f=c,i=n;export{f as ForjaTextBlock,i as defineCustomElement}
1
+ import{t,p as e,H as s,h as c}from"./p-B8rQMNWH.js";import{s as o}from"./p-CTbyYfdB.js";const f=e(class extends s{constructor(t){super(),!1!==t&&this.__registerHost(),this.width="default",this.alignment="left"}render(){return c("section",{key:"797f9ac88c3c03e2c41e7b8b3bf54b4d43dc3fd9",class:["forja-text","forja-text--"+this.width,"forja-text--"+this.alignment].join(" "),"aria-label":o(this.sectionTitle,"Content")},c("slot",{key:"dc6cc88ac6fde0dc315651f0d7372c3fb44527fc",name:"before"}),this.sectionTitle&&c("h2",{key:"c3e5c0b9bbd3037a9c54db36027928b67a14318f",class:"forja-text__title"},this.sectionTitle),this.text?c("div",{class:"forja-text__content",innerHTML:this.text}):c("div",{class:"forja-text__content"},c("slot",null)),c("slot",{key:"8fe560073c81469ef6669ff945df4d102699152c",name:"after"}))}},[260,"forja-text-block",{sectionTitle:[1,"section-title"],text:[1],width:[1],alignment:[1]}]);function a(){"undefined"!=typeof customElements&&["forja-text-block"].forEach((e=>{"forja-text-block"===e&&(customElements.get(t(e))||customElements.define(t(e),f))}))}a();const n=f,i=a;export{n as ForjaTextBlock,i as defineCustomElement}
@@ -1 +1 @@
1
- import{t as e,p as t,H as s,h as i}from"./p-B8rQMNWH.js";import{s as a}from"./p-CTbyYfdB.js";const l=t(class extends s{constructor(e){super(),!1!==e&&this.__registerHost(),this.layout="vertical",this.showDates=!0}render(){const e=this.events&&this.events.length>0;return i("section",{key:"cebf45a5dea290fa21d427394db4916b4224df54",class:["forja-timeline","forja-timeline--"+this.layout].join(" "),"aria-label":a(this.sectionTitle,"Timeline")},i("slot",{key:"cf344c1df40eb02608a4255ec4b176f9efcd0ada",name:"before"}),this.sectionTitle&&i("h2",{key:"fab8e6c374c2e57fa345d092fc9453b0e4fc16ec",class:"forja-timeline__title"},this.sectionTitle),this.text&&i("div",{key:"0282811543111b55001d8b4fbe7e02cb7d944a7e",class:"forja-timeline__text",innerHTML:this.text}),e?i("ol",{class:"forja-timeline__list"},this.events.map((e=>i("li",{class:"forja-timeline__item"},this.showDates&&e.date&&i("time",{class:"forja-timeline__date"},e.date),i("h3",{class:"forja-timeline__event-title"},e.title),e.text&&i("div",{class:"forja-timeline__event-text",innerHTML:e.text}))))):i("slot",null),i("slot",{key:"b56de78fa2dee0850de2ef5c0ca48243f8cf6e2c",name:"after"}))}},[260,"forja-timeline",{sectionTitle:[1,"section-title"],text:[1],events:[16],layout:[1],showDates:[4,"show-dates"]}]);function n(){"undefined"!=typeof customElements&&["forja-timeline"].forEach((t=>{"forja-timeline"===t&&(customElements.get(e(t))||customElements.define(e(t),l))}))}n();const o=l,c=n;export{o as ForjaTimeline,c as defineCustomElement}
1
+ import{t as e,p as t,H as s,h as i}from"./p-B8rQMNWH.js";import{s as a}from"./p-CTbyYfdB.js";const l=t(class extends s{constructor(e){super(),!1!==e&&this.__registerHost(),this.layout="vertical",this.showDates=!0}render(){const e=this.events&&this.events.length>0;return i("section",{key:"2dce62c902a967d64dd5b6a611a177335db92965",class:["forja-timeline","forja-timeline--"+this.layout].join(" "),"aria-label":a(this.sectionTitle,"Timeline")},i("slot",{key:"a68408fe55ac0b4ff1717d90abf94df9744395e8",name:"before"}),this.sectionTitle&&i("h2",{key:"59f55ce9bc8783f510050851f19d124e1e10c869",class:"forja-timeline__title"},this.sectionTitle),this.text&&i("div",{key:"16c053110be832993154c4e88b9f29370d3b66e0",class:"forja-timeline__text",innerHTML:this.text}),e?i("ol",{class:"forja-timeline__list"},this.events.map((e=>i("li",{class:"forja-timeline__item"},this.showDates&&e.date&&i("time",{class:"forja-timeline__date"},e.date),i("h3",{class:"forja-timeline__event-title"},e.title),e.text&&i("div",{class:"forja-timeline__event-text",innerHTML:e.text}))))):i("slot",null),i("slot",{key:"112addeae24306716d65f4500fb6a2dbafb8a977",name:"after"}))}},[260,"forja-timeline",{sectionTitle:[1,"section-title"],text:[1],events:[16],layout:[1],showDates:[4,"show-dates"]}]);function n(){"undefined"!=typeof customElements&&["forja-timeline"].forEach((t=>{"forja-timeline"===t&&(customElements.get(e(t))||customElements.define(e(t),l))}))}n();const o=l,f=n;export{o as ForjaTimeline,f as defineCustomElement}
@@ -1 +1 @@
1
- import{t as e,p as t,H as s,h as o}from"./p-B8rQMNWH.js";import{s as a}from"./p-CTbyYfdB.js";const i=t(class extends s{constructor(e){super(),!1!==e&&this.__registerHost(),this.provider="youtube",this.autoplay=!1,this.aspectRatio="16:9"}getAspectClass(){return{"16:9":"forja-video--16-9","4:3":"forja-video--4-3","1:1":"forja-video--1-1"}[this.aspectRatio]||"forja-video--16-9"}isSelfHosted(){return"self-hosted"===this.provider}render(){const e=["forja-video",this.getAspectClass()].join(" ");return o("section",{key:"8f7dd28af86bfa7a3a1418bef19e6f9658d49cc6",class:e,"aria-label":a(this.sectionTitle,"Video")},o("slot",{key:"7b34145bcee01a80095725a5adba5266dc1af703",name:"before"}),this.sectionTitle&&o("h2",{key:"4959dd55b6c5e146482c14057ebeffd39c45bedd",class:"forja-video__title"},this.sectionTitle),this.text&&o("div",{key:"42af3c36bad0c44ae1194f17217e969d46a01e8d",class:"forja-video__text",innerHTML:this.text}),this.videoUrl&&o("figure",{key:"da0c9136b339b00f4f699deb077daff0bcc48715",class:"forja-video__container"},this.isSelfHosted()?o("video",{class:"forja-video__player",src:this.videoUrl,controls:!0,autoplay:this.autoplay},o("track",{kind:"captions"})):o("iframe",{class:"forja-video__embed",src:this.autoplay?this.videoUrl+"?autoplay=1":this.videoUrl,title:this.sectionTitle||"Embedded video",allowFullScreen:!0,loading:"lazy"})),o("slot",{key:"9c6b4f1345c7470b773c265a9884b799218a6d5f",name:"after"}))}},[260,"forja-video",{sectionTitle:[1,"section-title"],text:[1],videoUrl:[1,"video-url"],provider:[1],autoplay:[4],aspectRatio:[1,"aspect-ratio"]}]);function d(){"undefined"!=typeof customElements&&["forja-video"].forEach((t=>{"forja-video"===t&&(customElements.get(e(t))||customElements.define(e(t),i))}))}d();const r=i,c=d;export{r as ForjaVideo,c as defineCustomElement}
1
+ import{t as e,p as t,H as s,h as o}from"./p-B8rQMNWH.js";import{s as i}from"./p-CTbyYfdB.js";const a=t(class extends s{constructor(e){super(),!1!==e&&this.__registerHost(),this.provider="youtube",this.autoplay=!1,this.aspectRatio="16:9"}getAspectClass(){return{"16:9":"forja-video--16-9","4:3":"forja-video--4-3","1:1":"forja-video--1-1"}[this.aspectRatio]||"forja-video--16-9"}isSelfHosted(){return"self-hosted"===this.provider}render(){const e=["forja-video",this.getAspectClass()].join(" ");return o("section",{key:"3243f9bd00cd257d706cf6ca3ee463fc2f1de542",class:e,"aria-label":i(this.sectionTitle,"Video")},o("slot",{key:"a95a30fcd2ce9e696a614b3e5614c32f23bb887c",name:"before"}),this.sectionTitle&&o("h2",{key:"d43d21c2d9e78ac33670d6c7073180d813c2d868",class:"forja-video__title"},this.sectionTitle),this.text&&o("div",{key:"98a11b54335f07c79f8ed7a0576378d223f91bfb",class:"forja-video__text",innerHTML:this.text}),this.videoUrl&&o("figure",{key:"b6e4b9436e7c4f0040b00d8173ac2cf417acd575",class:"forja-video__container"},this.isSelfHosted()?o("video",{class:"forja-video__player",src:this.videoUrl,controls:!0,autoplay:this.autoplay},o("track",{kind:"captions"})):o("iframe",{class:"forja-video__embed",src:this.autoplay?this.videoUrl+"?autoplay=1":this.videoUrl,title:this.sectionTitle||"Embedded video",allowFullScreen:!0,loading:"lazy"})),o("slot",{key:"788a8b32e8e0e524cf681995cd25f3b4ed565371",name:"after"}))}},[260,"forja-video",{sectionTitle:[1,"section-title"],text:[1],videoUrl:[1,"video-url"],provider:[1],autoplay:[4],aspectRatio:[1,"aspect-ratio"]}]);function d(){"undefined"!=typeof customElements&&["forja-video"].forEach((t=>{"forja-video"===t&&(customElements.get(e(t))||customElements.define(e(t),a))}))}d();const c=a,r=d;export{c as ForjaVideo,r as defineCustomElement}
@@ -0,0 +1 @@
1
+ import{h as a}from"./p-B8rQMNWH.js";function t(a){const t=a.querySelector('input[name="altcha"]');return!!t&&t.value.length>0}function n(t,n){return a("altcha-widget",{class:{"forja-altcha":!0},name:"altcha",challenge:t,"data-testid":n})}export{t as a,n as r}
@@ -0,0 +1,33 @@
1
+ import { h } from './index-CJAmAUMU.js';
2
+
3
+ /**
4
+ * Self-hosted ALTCHA helpers shared by the form sections (#773).
5
+ *
6
+ * The open-source `<altcha-widget>` custom element solves a server-issued
7
+ * proof-of-work challenge and injects a hidden `altcha` input carrying the
8
+ * solved payload. Forms forward that payload to the API as the submission's
9
+ * `bot_protection_token`. No Sentinel / paid features are involved; the host
10
+ * page registers the widget (e.g. `import 'altcha'`).
11
+ */
12
+ /** True once the widget has injected a non-empty solved `altcha` input. */
13
+ function altchaSolved(form) {
14
+ const input = form.querySelector('input[name="altcha"]');
15
+ return !!input && input.value.length > 0;
16
+ }
17
+ /**
18
+ * Render the ALTCHA widget bound to a per-form challenge endpoint. `testId`
19
+ * lets each section namespace its widget for e2e targeting.
20
+ */
21
+ function renderAltchaWidget(challengeUrl, testId) {
22
+ return h('altcha-widget', {
23
+ class: { 'forja-altcha': true },
24
+ name: 'altcha',
25
+ // altcha v3 renamed `challengeurl` → `challenge` (a string is the URL to
26
+ // fetch a fresh challenge from). The old attribute is silently ignored by
27
+ // v3, leaving the widget to fetch the host page instead of the challenge.
28
+ challenge: challengeUrl,
29
+ 'data-testid': testId,
30
+ });
31
+ }
32
+
33
+ export { altchaSolved as a, renderAltchaWidget as r };
@@ -1,22 +1,45 @@
1
1
  import { r as registerInstance, c as createEvent, h } from './index-CJAmAUMU.js';
2
2
  import { a as sectionId, s as sectionLabel } from './a11y-CTbyYfdB.js';
3
+ import { a as altchaSolved, r as renderAltchaWidget } from './altcha-BaQIumM3.js';
3
4
 
4
5
  const ForjaContact = class {
5
6
  constructor(hostRef) {
6
7
  registerInstance(this, hostRef);
7
8
  this.forjaSubmit = createEvent(this, "forjaSubmit");
9
+ /**
10
+ * Bot-protection requirement for this form (#773). When `'mandatory'`, a
11
+ * self-hosted ALTCHA widget is rendered and submission is blocked until the
12
+ * visitor's browser has solved the proof-of-work. The open-source
13
+ * `<altcha-widget>` element must be registered by the host page (e.g.
14
+ * `import 'altcha'`) — no Sentinel/paid features are used.
15
+ */
16
+ this.botProtection = 'none';
17
+ /** Set when a Mandatory form is submitted before ALTCHA is solved. */
18
+ this.botProtectionUnsolved = false;
8
19
  this.handleSubmit = (e) => {
9
20
  e.preventDefault();
10
21
  const form = e.target;
22
+ // Block submission until the ALTCHA widget has injected a solved hidden
23
+ // `altcha` input. Checks the DOM directly (not FormData) so the gate is
24
+ // independent of the form-serialization step.
25
+ if (this.requiresAltcha && !altchaSolved(form)) {
26
+ this.botProtectionUnsolved = true;
27
+ return;
28
+ }
29
+ this.botProtectionUnsolved = false;
11
30
  this.forjaSubmit.emit(new FormData(form));
12
31
  };
13
32
  }
33
+ get requiresAltcha() {
34
+ return this.botProtection === 'mandatory';
35
+ }
14
36
  render() {
15
37
  const hasFields = this.fields && this.fields.length > 0;
16
- return (h("section", { key: '15bb71d6aa6d3d73c85ab4cdd7346696f3145074', class: "forja-contact", "aria-label": sectionLabel(this.sectionTitle, 'Contact') }, h("slot", { key: '63820a89dd1c9812dc0b931fd8ce7b17a7b1782e', name: "before" }), h("div", { key: 'b74c9c884de525c6a08a92c982f0a1c8a2235c02', class: "forja-contact__content" }, this.sectionTitle && h("h2", { key: '53014e550127a34a191adcef4b8eaa3b01dfec7a', class: "forja-contact__title" }, this.sectionTitle), this.text && h("div", { key: '38d9ff63e255d33328da1113a3b7f2fe82871a23', class: "forja-contact__text", innerHTML: this.text }), this.buttonText && this.buttonHref && (h("a", { key: '15ebb06b95b3cb6d58fb3d4caaa1e713126a201a', 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 => {
38
+ return (h("section", { key: 'f5fa0e767bf2ed4abf6cf716b170fba8ac8fc569', class: "forja-contact", "aria-label": sectionLabel(this.sectionTitle, 'Contact') }, h("slot", { key: 'ee7559a984260125a9f7bbece28a3383e5b8d383', name: "before" }), h("div", { key: '0ed33ac797e6f9e540d8b62a81f060b3d94f3303', class: "forja-contact__content" }, this.sectionTitle && h("h2", { key: '40d2850b9d1add8cd37b0238818c9bd351db2c0f', class: "forja-contact__title" }, this.sectionTitle), this.text && h("div", { key: '03487d7fdd10dfc55044eb320a26bc9ba69e122e', class: "forja-contact__text", innerHTML: this.text }), this.buttonText && this.buttonHref && (h("a", { key: '7836f8b9458ce0a90309ccca829fb5a452d2eeec', 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 => {
17
39
  const fieldId = sectionId(field.name, 'contact');
18
40
  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 }))));
19
- }), h("button", { type: "submit", class: "forja-contact__submit" }, this.buttonText || 'Send'))) : (h("slot", null)), h("slot", { key: '7ec1b5c2ee966906cbd6fa05a2c8a5a2ca13d7e2', name: "after" })));
41
+ }), this.requiresAltcha &&
42
+ 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: '71b4d6ede8b21c3e841a74477c1093a5e8fc33fa', name: "after" })));
20
43
  }
21
44
  };
22
45
 
@@ -1,21 +1,36 @@
1
1
  import { r as registerInstance, c as createEvent, h } from './index-CJAmAUMU.js';
2
2
  import { a as sectionId, s as sectionLabel } from './a11y-CTbyYfdB.js';
3
+ import { a as altchaSolved, r as renderAltchaWidget } from './altcha-BaQIumM3.js';
3
4
 
4
5
  const ForjaNewsletter = class {
5
6
  constructor(hostRef) {
6
7
  registerInstance(this, hostRef);
7
8
  this.forjaSubmit = createEvent(this, "forjaSubmit");
8
9
  this.buttonText = 'Subscribe';
10
+ /** Bot-protection requirement (#773). When `'mandatory'`, renders a
11
+ * self-hosted ALTCHA widget and gates submission until it is solved. */
12
+ this.botProtection = 'none';
13
+ /** Set when a Mandatory form is submitted before ALTCHA is solved. */
14
+ this.botProtectionUnsolved = false;
9
15
  this.handleSubmit = (e) => {
10
16
  e.preventDefault();
11
17
  const form = e.target;
18
+ if (this.requiresAltcha && !altchaSolved(form)) {
19
+ this.botProtectionUnsolved = true;
20
+ return;
21
+ }
22
+ this.botProtectionUnsolved = false;
12
23
  this.forjaSubmit.emit(new FormData(form));
13
24
  };
14
25
  }
26
+ get requiresAltcha() {
27
+ return this.botProtection === 'mandatory';
28
+ }
15
29
  render() {
16
30
  const emailId = sectionId(this.sectionTitle, 'newsletter-email');
17
31
  const nameId = sectionId(this.sectionTitle, 'newsletter-name');
18
- return (h("section", { key: '2b01646d3aa10d12c9568551edc2f8836a1e6199', class: "forja-newsletter", "aria-label": sectionLabel(this.sectionTitle, 'Newsletter') }, h("slot", { key: '020fd3a2e10a86f6bec4f9499e217818c534885f', name: "before" }), this.sectionTitle && h("h2", { key: 'e540517a30deb49e8d3b1271b8099fe2c5167f02', class: "forja-newsletter__title" }, this.sectionTitle), this.text && h("div", { key: 'c31f0ad333733992f426ca1b564a609603ce7f43', class: "forja-newsletter__text", innerHTML: this.text }), h("form", { key: '08ba3a98b082670794797a08048ab1cc683aaef4', class: "forja-newsletter__form", action: this.formAction, method: this.formAction ? 'post' : undefined, onSubmit: this.handleSubmit }, this.showName && (h("div", { key: '9537213f04bdd4d2e2008a783bc70a7e7a268865', class: "forja-newsletter__field" }, h("label", { key: '8feb551b009eb8f288cbcb54b18360c9fe09a694', class: "forja-newsletter__label", htmlFor: nameId }, "Name"), h("input", { key: 'b2df119a4d000e46a8e1cfb1ab2a2514be2f28a4', id: nameId, name: "name", type: "text", class: "forja-newsletter__input" }))), h("div", { key: '7fff741fe589ee3bc7f5eb278f07dfb78a4363c1', class: "forja-newsletter__field" }, h("label", { key: '2dda48f90d5303de371101b1da09e0402291a704', class: "forja-newsletter__label", htmlFor: emailId }, "Email"), h("input", { key: '7c913bcd86483511926cd2c6df3b2d8fae202a3b', id: emailId, name: "email", type: "email", class: "forja-newsletter__input", required: true, "aria-required": "true" })), h("button", { key: '374357cafdc13172944199b9537f32fa252fa274', type: "submit", class: "forja-newsletter__submit" }, this.buttonText)), h("slot", { key: '253f3650ec3839083c2ef1a768c78627fef141b3', name: "after" })));
32
+ return (h("section", { key: '0d15c9d013c2f1250999ad86d853cbb5126bbddc', class: "forja-newsletter", "aria-label": sectionLabel(this.sectionTitle, 'Newsletter') }, h("slot", { key: 'aba062b799c952a6936267573bf841fb7403a350', name: "before" }), this.sectionTitle && h("h2", { key: 'f00db5dd8b536dca31d1f39453753e4e9126f97f', class: "forja-newsletter__title" }, this.sectionTitle), this.text && h("div", { key: '857102c1929b0615a5782d97ffc969d12bb3bec6', class: "forja-newsletter__text", innerHTML: this.text }), h("form", { key: '9ac77419043d02719d05c949e8ac6e13f411affe', class: "forja-newsletter__form", action: this.formAction, method: this.formAction ? 'post' : undefined, onSubmit: this.handleSubmit }, this.showName && (h("div", { key: '073625ebadd2dd040dc19e48f136adb4919d428b', class: "forja-newsletter__field" }, h("label", { key: '3133a36ccdf1c7f8a7204e2e83c71b16b1e4dcf2', class: "forja-newsletter__label", htmlFor: nameId }, "Name"), h("input", { key: 'f49b6e4e3b7f1037e6b7aaa18a6a4b10cb15d730', id: nameId, name: "name", type: "text", class: "forja-newsletter__input" }))), h("div", { key: '59b5408e884026f6351b1397e536fc184ac2c1de', class: "forja-newsletter__field" }, h("label", { key: '436373562856e04f27addcacba5083805155c913', class: "forja-newsletter__label", htmlFor: emailId }, "Email"), h("input", { key: '042c434c7fab15fd4235e1fe2d6b509db81d1e43', id: emailId, name: "email", type: "email", class: "forja-newsletter__input", required: true, "aria-required": "true" })), this.requiresAltcha &&
33
+ renderAltchaWidget(this.altchaChallengeUrl, 'forja-newsletter-altcha'), this.botProtectionUnsolved && (h("p", { key: '4375ea4a0f67a9dad1b6e1797e898c4b90125dfb', class: "forja-newsletter__error", role: "alert", "data-testid": "forja-newsletter-altcha-error" }, "Please complete the verification before submitting.")), h("button", { key: '7eddc2c91799598f71af799af6c46159d688195a', type: "submit", class: "forja-newsletter__submit" }, this.buttonText)), h("slot", { key: 'f13a320d972bbb402cb218ee6d4d2650f5f15161', name: "after" })));
19
34
  }
20
35
  };
21
36
 
@@ -28,7 +28,7 @@ const ForjaPortfolio = class {
28
28
  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)))))))));
29
29
  }
30
30
  render() {
31
- return (h("section", { key: '96e2ad1a4250c58f0785ccf1dcf38c7ac5b8d53a', class: "forja-portfolio", "aria-label": sectionLabel(this.sectionTitle, 'Portfolio') }, h("slot", { key: 'a4f4d1379d09a2019e5e92de5bf0f65d8a78bf62', name: "before" }), this.sectionTitle && h("h2", { key: '3419d7e33cda89d94ad2166c02df2b5451715ca7', class: "forja-portfolio__title" }, this.sectionTitle), this.text && h("div", { key: '1dc200413658bde80829bd57b166772e6e27b8be', class: "forja-portfolio__text", innerHTML: this.text }), this.renderExperiences(), this.renderEducation(), this.renderSkills(), h("slot", { key: '4ea0373f8e21524b516dd3f4b5a967acd3c7d7cf', name: "after" })));
31
+ return (h("section", { key: '506011a5c845a8cbee32a77a2081a269efa3c2d4', class: "forja-portfolio", "aria-label": sectionLabel(this.sectionTitle, 'Portfolio') }, h("slot", { key: 'f4c91d111a4e49a2492a5056376b1c2245d7db1f', name: "before" }), this.sectionTitle && h("h2", { key: '801b3d72f636ed6e5d51f37748ad980970acc72c', class: "forja-portfolio__title" }, this.sectionTitle), this.text && h("div", { key: '2770e9835554376f00a46ad670cc2530651e6dfc', class: "forja-portfolio__text", innerHTML: this.text }), this.renderExperiences(), this.renderEducation(), this.renderSkills(), h("slot", { key: '48ded21e8a2ac6d279ea1e39d6fa6eaec32ef7aa', name: "after" })));
32
32
  }
33
33
  };
34
34
 
@@ -7,7 +7,7 @@ const ForjaPricing = class {
7
7
  }
8
8
  render() {
9
9
  const hasTiers = this.tiers && this.tiers.length > 0;
10
- return (h("section", { key: 'bae1df3d72dc351c1e55506fdfaad535f45814f6', class: "forja-pricing", "aria-label": sectionLabel(this.sectionTitle, 'Pricing') }, h("slot", { key: '343e7d5490dfc07cc2024661d404b1c2a44c46a9', name: "before" }), (this.sectionTitle || this.text) && (h("div", { key: 'e91c8e1945da57bc28bbc6ee09b72dca1dd03d22', class: "forja-pricing__header" }, this.sectionTitle && h("h2", { key: '81000892bb72e034613283df85928c1c667a4f95', class: "forja-pricing__title" }, this.sectionTitle), this.text && h("div", { key: '56363c268fb40a5512ab90005463bf43402e8c2f', class: "forja-pricing__text", innerHTML: 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: 'd4ed110c1c8ab8a865ba7c1066caf5867c36494c', name: "after" })));
10
+ return (h("section", { key: 'ecb73e364f3f4892d3d937fc7fa5df7b1f1a338e', class: "forja-pricing", "aria-label": sectionLabel(this.sectionTitle, 'Pricing') }, h("slot", { key: '08905beca81a6eb6afb74d161f47bc7e0f5b69c4', name: "before" }), (this.sectionTitle || this.text) && (h("div", { key: 'fa94236ab6731c6e2f7401075bba874ed39206b9', class: "forja-pricing__header" }, this.sectionTitle && h("h2", { key: '8ced20c10ac8235fd2525c6cbbc4b5689c10fe18', class: "forja-pricing__title" }, this.sectionTitle), this.text && h("div", { key: 'bf6f79ee461263f8e5bd9af2c2233683fe6cf110', class: "forja-pricing__text", innerHTML: 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: '138c32c758745fc0c225c981e15da56557659395', name: "after" })));
11
11
  }
12
12
  };
13
13
 
@@ -7,7 +7,7 @@ const ForjaProjects = class {
7
7
  }
8
8
  render() {
9
9
  const hasItems = this.items && this.items.length > 0;
10
- return (h("section", { key: '15db32b9f5878409c28debb36ded1047f657ce2a', class: "forja-projects", "aria-label": sectionLabel(this.sectionTitle, 'Projects') }, h("slot", { key: 'f5dd2f0ca808fcfeaa11c4006dfaa88723ea4a47', name: "before" }), this.sectionTitle && h("h2", { key: 'fd5e121eb42bba78d4dc5b2719c1129182ebc030', class: "forja-projects__title" }, this.sectionTitle), this.text && h("div", { key: 'dd82836aaf6934f7420fa2cce02e9574e27b4781', class: "forja-projects__text", innerHTML: 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: 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: 'b7772bead8f5c04f3b3e857bc9da18adc29e38b7', name: "after" })));
10
+ return (h("section", { key: '4fddb0d0031673c60d81741111e6fff5ebbb20a6', class: "forja-projects", "aria-label": sectionLabel(this.sectionTitle, 'Projects') }, h("slot", { key: '0a295eabcbfa33f584f1538b84b70cb85fd012ae', name: "before" }), this.sectionTitle && h("h2", { key: '3792ed7f5e6e86dc9fd36274a361bffcc1267d8e', class: "forja-projects__title" }, this.sectionTitle), this.text && h("div", { key: '246daa3ff95477f019d70c1d2c3c24ccade0ecb1', class: "forja-projects__text", innerHTML: 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: 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: '605aa0a889bdc8199dca6895248f3cf19d8d4c83', name: "after" })));
11
11
  }
12
12
  };
13
13