@xenterprises/nuxt-x-marketing 1.15.0 → 1.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -30,6 +30,30 @@ 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.15.2] - 2026-10-19
34
+
35
+ ### Fixed
36
+
37
+ - **No more literal `[object Object]` in UButton classes.** The layer's `app.config` overrode
38
+ `ui.button.variants.size.lg` / `xl` with plain strings, but Nuxt UI defines each size as a
39
+ per-part object (`base`, `leadingIcon`, `trailingIcon`, ...). tailwind-variants joined the two
40
+ as `${object} ${string}`, so every lg/xl UButton (XMarkCTA, XMarkHero, any site button) carried
41
+ an `[object Object]` class. The overrides are now per-part objects; `gap-0`, `size-[1em]` icons
42
+ and `size-8 text-base` avatars keep the look pixel-identical to 1.15.1 (home, CTA and button
43
+ grid at 1440/390/375: 0 px difference). HTML class lists of lg/xl buttons change.
44
+
45
+ ## [1.15.1] - 2026-10-18
46
+
47
+ ### Fixed
48
+
49
+ - **`XMarkCTA` long button labels wrap on narrow screens** instead of being clipped (seen on
50
+ 375/390px phones). UButton renders its label with `truncate` (nowrap) inside an `inline-flex`
51
+ button with no max width, so a long label pushed the button past the section edge. XMarkCTA now
52
+ passes `ui: { base: "max-w-full", label: "whitespace-normal break-words text-center" }`: the
53
+ button is capped at its row, the label wraps centered, and the button grows in height.
54
+ Short labels (every width) and desktop are pixel-identical to 1.15.0. XMarkHero and the
55
+ pre-footer section use the default slot (no `truncate`) and already wrapped; they are unchanged.
56
+
33
57
  ## [1.15.0] - 2026-10-13
34
58
 
35
59
  HTML change, no visual change: screenshots at 1440 and 390 (default and `container="lg"`) are
package/app/app.config.ts CHANGED
@@ -13,9 +13,24 @@ export default defineAppConfig({
13
13
  base: "font-medium tracking-wide",
14
14
  },
15
15
  variants: {
16
+ // 1.15.2: Nuxt UI size variants are per-slot objects. tailwind-variants merges an
17
+ // app.config string with the theme object as `${themeObject} ${string}`, which put a
18
+ // literal "[object Object]" in every lg/xl button class (and dropped the theme's lg/xl
19
+ // gap, icon and avatar sizes). Per-slot objects merge cleanly; gap-0, size-[1em] and
20
+ // the md avatar classes keep the look identical to 1.15.1 (no gap, icons at 1em, 32px avatar).
16
21
  size: {
17
- lg: "px-8 py-4 text-base",
18
- xl: "px-10 py-5 text-lg",
22
+ lg: {
23
+ base: "px-8 py-4 text-base gap-0",
24
+ leadingIcon: "size-[1em]",
25
+ trailingIcon: "size-[1em]",
26
+ leadingAvatar: "size-8 text-base",
27
+ },
28
+ xl: {
29
+ base: "px-10 py-5 text-lg gap-0",
30
+ leadingIcon: "size-[1em]",
31
+ trailingIcon: "size-[1em]",
32
+ leadingAvatar: "size-8 text-base",
33
+ },
19
34
  },
20
35
  },
21
36
  },
@@ -67,6 +67,7 @@
67
67
  :icon="button.icon"
68
68
  :size="size === 'lg' ? 'lg' : 'md'"
69
69
  :class="getButtonClass(button, index)"
70
+ :ui="buttonUi"
70
71
  />
71
72
  </div>
72
73
  </div>
@@ -272,6 +273,19 @@ const buttonsClasses = computed(() => {
272
273
  return layouts[props.variant];
273
274
  });
274
275
 
276
+ /**
277
+ * 1.15.1: let long labels wrap on narrow screens. Nuxt UI's UButton puts `truncate`
278
+ * (white-space: nowrap; overflow: hidden; text-overflow: ellipsis) on the label and the
279
+ * button is inline-flex with no max width, so a long label is forced onto one line and the
280
+ * button runs past the section edge, where `overflow-hidden` clips it.
281
+ * max-w-full caps the button at its row; whitespace-normal lets the label wrap only when it
282
+ * no longer fits; text-center centres the wrapped lines. Labels that fit are unaffected.
283
+ */
284
+ const buttonUi = {
285
+ base: "max-w-full",
286
+ label: "whitespace-normal break-words text-center",
287
+ };
288
+
275
289
  const getButtonColor = (button, index) => {
276
290
  // Allow explicit color override
277
291
  if (button.color && button.color !== "white") return button.color;
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.15.0",
5
+ "version": "1.15.2",
6
6
  "main": "./nuxt.config.ts",
7
7
  "scripts": {
8
8
  "dev": "nuxi dev .playground",