@xenterprises/nuxt-x-marketing 1.4.8 → 1.4.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -30,6 +30,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
30
30
  section and its sample product data were dropped with them. Every other section of the
31
31
  demo page is unchanged.
32
32
 
33
+ ## [1.4.9] - 2026-09-06
34
+
35
+ ### Fixed
36
+
37
+ - `XMarkPricingPlans` spells billing periods as **per month** / **per year** by default (not `/month` `/year`), and normalizes common slash forms when mapping plans.
38
+
33
39
  ## [1.4.8] - 2026-09-06
34
40
 
35
41
  ### Fixed
@@ -82,7 +82,7 @@ const props = defineProps({
82
82
  {
83
83
  name: "Starter",
84
84
  price: "$9",
85
- period: "/month",
85
+ period: "per month",
86
86
  description: "Perfect for individuals and small projects.",
87
87
  features: ["5 projects", "10GB storage", "Email support"],
88
88
  button: { label: "Get Started" },
@@ -90,7 +90,7 @@ const props = defineProps({
90
90
  {
91
91
  name: "Pro",
92
92
  price: "$29",
93
- period: "/month",
93
+ period: "per month",
94
94
  description: "For growing teams that need more power.",
95
95
  features: [
96
96
  "Unlimited projects",
@@ -104,7 +104,7 @@ const props = defineProps({
104
104
  {
105
105
  name: "Enterprise",
106
106
  price: "$99",
107
- period: "/month",
107
+ period: "per month",
108
108
  description: "For large organizations with custom needs.",
109
109
  features: [
110
110
  "Unlimited everything",
@@ -171,6 +171,14 @@ const emit = defineEmits(["select"]);
171
171
 
172
172
  const billingPeriod = ref("monthly");
173
173
 
174
+ function normalizePeriod(period) {
175
+ if (!period) return period;
176
+ const trimmed = String(period).trim().toLowerCase();
177
+ if (["/month", "/mo", "mo", "month"].includes(trimmed)) return "per month";
178
+ if (["/year", "/yr", "yr", "year"].includes(trimmed)) return "per year";
179
+ return period;
180
+ }
181
+
174
182
  // Map XMark plan format to Nuxt UI format
175
183
  const mappedPlans = computed(() => {
176
184
  return props.plans.map((plan) => {
@@ -183,9 +191,13 @@ const mappedPlans = computed(() => {
183
191
  billingPeriod.value === "yearly"
184
192
  ? plan.price.yearly
185
193
  : plan.price.monthly;
186
- billingCycle = billingPeriod.value === "yearly" ? "/year" : "/month";
194
+ billingCycle =
195
+ billingPeriod.value === "yearly" ? "per year" : "per month";
187
196
  } else if (props.hasBillingToggle && !plan.period) {
188
- billingCycle = billingPeriod.value === "yearly" ? "/year" : "/month";
197
+ billingCycle =
198
+ billingPeriod.value === "yearly" ? "per year" : "per month";
199
+ } else {
200
+ billingCycle = normalizePeriod(billingCycle);
189
201
  }
190
202
 
191
203
  // Determine if this plan should be highlighted
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@xenterprises/nuxt-x-marketing",
3
3
  "license": "SEE LICENSE IN LICENSE",
4
4
  "type": "module",
5
- "version": "1.4.8",
5
+ "version": "1.4.9",
6
6
  "main": "./nuxt.config.ts",
7
7
  "scripts": {
8
8
  "dev": "nuxi dev .playground",