frutjam 2.0.4 → 2.0.6

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 (73) hide show
  1. package/dist/base/reboot/object.js +1 -1
  2. package/dist/base.css +2 -2
  3. package/dist/components/accordion.css +1 -1
  4. package/dist/components/alert/object.js +1 -1
  5. package/dist/components/alert.css +2 -2
  6. package/dist/components/avatar.css +1 -1
  7. package/dist/components/badge/object.js +1 -1
  8. package/dist/components/badge.css +2 -2
  9. package/dist/components/breadcrumb.css +1 -1
  10. package/dist/components/button/object.js +1 -1
  11. package/dist/components/button.css +2 -2
  12. package/dist/components/card/object.js +1 -1
  13. package/dist/components/card.css +2 -2
  14. package/dist/components/carousel.css +1 -1
  15. package/dist/components/chat/object.js +1 -1
  16. package/dist/components/chat.css +2 -2
  17. package/dist/components/checkbox.css +1 -1
  18. package/dist/components/collapsible.css +1 -1
  19. package/dist/components/combobox.css +1 -1
  20. package/dist/components/countdown.css +1 -1
  21. package/dist/components/diff.css +1 -1
  22. package/dist/components/divider.css +1 -1
  23. package/dist/components/drawer.css +1 -1
  24. package/dist/components/footer.css +1 -1
  25. package/dist/components/header.css +1 -1
  26. package/dist/components/hero.css +1 -1
  27. package/dist/components/indicator.css +1 -1
  28. package/dist/components/input.css +1 -1
  29. package/dist/components/join.css +1 -1
  30. package/dist/components/kbd.css +1 -1
  31. package/dist/components/link.css +1 -1
  32. package/dist/components/loading.css +1 -1
  33. package/dist/components/mask.css +1 -1
  34. package/dist/components/menu/object.js +1 -1
  35. package/dist/components/menu.css +2 -2
  36. package/dist/components/modal.css +1 -1
  37. package/dist/components/navbar.css +1 -1
  38. package/dist/components/popover.css +1 -1
  39. package/dist/components/progress.css +1 -1
  40. package/dist/components/radial-progress.css +1 -1
  41. package/dist/components/radio.css +1 -1
  42. package/dist/components/range.css +1 -1
  43. package/dist/components/rating.css +1 -1
  44. package/dist/components/select.css +1 -1
  45. package/dist/components/sidebar.css +1 -1
  46. package/dist/components/skeleton/object.js +1 -1
  47. package/dist/components/skeleton.css +2 -2
  48. package/dist/components/stat/object.js +1 -1
  49. package/dist/components/stat.css +2 -2
  50. package/dist/components/status.css +1 -1
  51. package/dist/components/steps.css +1 -1
  52. package/dist/components/surface.css +1 -1
  53. package/dist/components/swap.css +1 -1
  54. package/dist/components/table.css +1 -1
  55. package/dist/components/tabs/object.js +1 -1
  56. package/dist/components/tabs.css +2 -2
  57. package/dist/components/tag/object.js +1 -1
  58. package/dist/components/tag.css +2 -2
  59. package/dist/components/textarea.css +1 -1
  60. package/dist/components/timeline.css +1 -1
  61. package/dist/components/toast.css +1 -1
  62. package/dist/components/toggle.css +1 -1
  63. package/dist/components/tooltip.css +1 -1
  64. package/dist/frutjam.min.css +3 -3
  65. package/dist/plugin.js +19 -5
  66. package/dist/themes/darkberry.css +1 -1
  67. package/dist/themes/snowberry.css +1 -1
  68. package/dist/utilities/headings.css +1 -1
  69. package/dist/utilities/para.css +1 -1
  70. package/dist/utilities/typography.css +1 -1
  71. package/dist/utilities/wrapper.css +1 -1
  72. package/index.js +22 -5
  73. package/package.json +3 -1
@@ -1,2 +1,2 @@
1
- /*! frutjam v2.0.4 (c) 2026 Nezanuha | Released under the MIT License | https://frutjam.com */
1
+ /*! frutjam v2.0.6 (c) 2026 Nezanuha | Released under the MIT License | https://frutjam.com */
2
2
  @layer theme{:is([data-theme=darkberry],[data-theme=dark]){--scheme-color:dark;--border-radius:0.25rem;--color-base:oklch(10.889% 0.00301 17.398);--color-on-base:oklch(98% 0.01 270);--color-neutral:oklch(85% 0 0);--color-on-neutral:oklch(20% 0 0);--color-primary:oklch(66.385% 0.18368 285.592);--color-on-primary:oklch(10% 0.01 270);--color-secondary:oklch(65% 0.18 220);--color-on-secondary:oklch(10% 0.01 220);--color-accent:oklch(75% 0.18 50);--color-on-accent:oklch(10% 0.01 50);--color-info:oklch(91.67% .077 205.04);--color-on-info:oklch(10% 0.01 250);--color-success:oklch(65% 0.18 140);--color-on-success:oklch(10% 0.01 140);--color-warning:oklch(75% 0.20 85);--color-on-warning:oklch(10% 0.01 85);--color-error:oklch(60% 0.22 30);--color-on-error:oklch(10% 0.01 30)}}
@@ -1,2 +1,2 @@
1
- /*! frutjam v2.0.4 (c) 2026 Nezanuha | Released under the MIT License | https://frutjam.com */
1
+ /*! frutjam v2.0.6 (c) 2026 Nezanuha | Released under the MIT License | https://frutjam.com */
2
2
  @layer theme{:is([data-theme=snowberry],[data-theme=light]),:root:not([data-theme]){--scheme-color:light;--border-radius:0.25rem;--color-base:oklch(1 0 0);--color-on-base:oklch(0.22 0 0);--color-neutral:oklch(0.15 0 0);--color-on-neutral:oklch(1 0 0);--color-primary:oklch(51.1% 0.262 276.966);--color-on-primary:oklch(96.2% 0.018 272.314);--color-secondary:oklch(0.591 0.293 322.896);--color-on-secondary:oklch(1 0 0);--color-accent:oklch(0.541 0.281 293.009);--color-on-accent:oklch(1 0 0);--color-info:oklch(0.685 0.169 237.323);--color-on-info:oklch(0.15 0 0);--color-success:oklch(0.792 0.209 151.711);--color-on-success:oklch(0.15 0 0);--color-warning:oklch(0.852 0.199 91.936);--color-on-warning:oklch(0.15 0 0);--color-error:oklch(0.577 0.245 27.325);--color-on-error:oklch(1 0 0)}}
@@ -1,2 +1,2 @@
1
- /*! frutjam v2.0.4 (c) 2026 Nezanuha | Released under the MIT License | https://frutjam.com */
1
+ /*! frutjam v2.0.6 (c) 2026 Nezanuha | Released under the MIT License | https://frutjam.com */
2
2
  /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */.heading-2xl{--heading-size:1rem;--heading-size:1.5rem}.heading-2xl,.heading-3xl{color:var(--color-on-base);font-weight:700;text-wrap-style:balance;font-size:var(--heading-size);line-height:1.15}.heading-3xl{--heading-size:1rem;--heading-size:1.875rem}.heading-4xl{--heading-size:1rem;--heading-size:2.25rem}.heading-4xl,.heading-5xl{color:var(--color-on-base);font-weight:700;text-wrap-style:balance;font-size:var(--heading-size);line-height:1.15}.heading-5xl{--heading-size:1rem;--heading-size:3rem}.heading-6xl{--heading-size:1rem;--heading-size:3.75rem}.heading-6xl,.heading-7xl{color:var(--color-on-base);font-weight:700;text-wrap-style:balance;font-size:var(--heading-size);line-height:1.15}.heading-7xl{--heading-size:1rem;--heading-size:4.5rem}.heading-8xl{--heading-size:1rem;--heading-size:6rem}.heading-8xl,.heading-9xl{color:var(--color-on-base);font-weight:700;text-wrap-style:balance;font-size:var(--heading-size);line-height:1.15}.heading-9xl{--heading-size:1rem;--heading-size:8rem}.heading-lg{--heading-size:1rem;--heading-size:1.125rem}.heading-lg,.heading-md{color:var(--color-on-base);font-weight:700;text-wrap-style:balance;font-size:var(--heading-size);line-height:1.15}.heading-md{--heading-size:1rem}.heading-sm{--heading-size:1rem;--heading-size:0.875rem}.heading-sm,.heading-xl{color:var(--color-on-base);font-weight:700;text-wrap-style:balance;font-size:var(--heading-size);line-height:1.15}.heading-xl{--heading-size:1rem;--heading-size:1.25rem}.heading-xs{--heading-size:1rem;--heading-size:0.75rem}.heading,.heading-xs{color:var(--color-on-base);font-weight:700;text-wrap-style:balance;font-size:var(--heading-size);line-height:1.15}.heading{--heading-size:1rem}
@@ -1,2 +1,2 @@
1
- /*! frutjam v2.0.4 (c) 2026 Nezanuha | Released under the MIT License | https://frutjam.com */
1
+ /*! frutjam v2.0.6 (c) 2026 Nezanuha | Released under the MIT License | https://frutjam.com */
2
2
  /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */.para-2xl{font-size:var(--text-base);font-size:var(--text-2xl)}.para-2xl,.para-3xl{text-wrap-style:pretty;line-height:1.6}.para-3xl{font-size:var(--text-base);font-size:var(--text-3xl)}.para-4xl{font-size:var(--text-base);font-size:var(--text-4xl)}.para-4xl,.para-5xl{text-wrap-style:pretty;line-height:1.6}.para-5xl{font-size:var(--text-base);font-size:var(--text-5xl)}.para-6xl{font-size:var(--text-base);font-size:var(--text-6xl)}.para-6xl,.para-7xl{text-wrap-style:pretty;line-height:1.6}.para-7xl{font-size:var(--text-base);font-size:var(--text-7xl)}.para-8xl{font-size:var(--text-base);font-size:var(--text-8xl)}.para-8xl,.para-9xl{text-wrap-style:pretty;line-height:1.6}.para-9xl{font-size:var(--text-base);font-size:var(--text-9xl)}.para-lg{font-size:var(--text-base);font-size:var(--text-lg)}.para-lg,.para-md{text-wrap-style:pretty;line-height:1.6}.para-md{font-size:var(--text-base)}.para-sm{font-size:var(--text-base);font-size:var(--text-sm)}.para-sm,.para-xl{text-wrap-style:pretty;line-height:1.6}.para-xl{font-size:var(--text-base);font-size:var(--text-xl)}.para-xs{font-size:var(--text-base);font-size:var(--text-xs)}.para,.para-xs{text-wrap-style:pretty;line-height:1.6}.para{font-size:var(--text-base)}
@@ -1,2 +1,2 @@
1
- /*! frutjam v2.0.4 (c) 2026 Nezanuha | Released under the MIT License | https://frutjam.com */
1
+ /*! frutjam v2.0.6 (c) 2026 Nezanuha | Released under the MIT License | https://frutjam.com */
2
2
  .prose-frutjam{--tw-prose-body:var(--color-body);--tw-prose-headings:var(--color-on-base);--tw-prose-lead:var(--color-on-neutral);--tw-prose-bold:var(--color-on-base);--tw-prose-links:var(--color-primary);--tw-prose-counters:var(--color-neutral);--tw-prose-bullets:var(--color-neutral);--tw-prose-hr:var(--color-base-soft);--tw-prose-quotes:var(--color-on-base);--tw-prose-quote-borders:var(--color-primary);--tw-prose-code:var(--color-on-base);--tw-prose-pre-code:var(--color-on-base);--tw-prose-pre-bg:var(--color-base-soft);--tw-prose-th-borders:var(--color-base-soft);--tw-prose-td-borders:var(--color-base-soft);--tw-prose-captions:var(--color-on-neutral);--tw-prose-kbd:var(--color-body);--tw-prose-invert-body:var(--color-on-neutral);--tw-prose-invert-headings:var(--color-on-base);--tw-prose-invert-links:var(--color-primary)}
@@ -1,2 +1,2 @@
1
- /*! frutjam v2.0.4 (c) 2026 Nezanuha | Released under the MIT License | https://frutjam.com */
1
+ /*! frutjam v2.0.6 (c) 2026 Nezanuha | Released under the MIT License | https://frutjam.com */
2
2
  /*! tailwindcss v4.3.0 | MIT License | https://tailwindcss.com */.wrapper-full{width:100%;max-width:100%;box-sizing:border-box;margin-inline:auto;padding-inline:1rem;@media (width >= 40rem){padding-inline:2rem}@media (width >= 64rem){padding-inline:4rem}}.wrapper-2xl{box-sizing:border-box;max-width:1536px;margin-inline:auto;padding-inline:1rem;@media (width >= 40rem){padding-inline:2rem}@media (width >= 64rem){padding-inline:4rem}}.wrapper-lg{box-sizing:border-box;max-width:1024px;margin-inline:auto;padding-inline:1rem;@media (width >= 40rem){padding-inline:2rem}@media (width >= 64rem){padding-inline:4rem}}.wrapper-md{box-sizing:border-box;max-width:768px;margin-inline:auto;padding-inline:1rem;@media (width >= 40rem){padding-inline:2rem}@media (width >= 64rem){padding-inline:4rem}}.wrapper-sm{box-sizing:border-box;max-width:640px;margin-inline:auto;padding-inline:1rem;@media (width >= 40rem){padding-inline:2rem}@media (width >= 64rem){padding-inline:4rem}}.wrapper-xl{box-sizing:border-box;max-width:1280px;margin-inline:auto;padding-inline:1rem;@media (width >= 40rem){padding-inline:2rem}@media (width >= 64rem){padding-inline:4rem}}.wrapper-xs{box-sizing:border-box;max-width:320px;margin-inline:auto;padding-inline:1rem;@media (width >= 40rem){padding-inline:2rem}@media (width >= 64rem){padding-inline:4rem}}.wrapper{box-sizing:border-box;margin-inline:auto;padding-inline:1rem;@media (width >= 40rem){padding-inline:2rem}@media (width >= 64rem){padding-inline:4rem}}
package/index.js CHANGED
@@ -193,13 +193,19 @@ function buildCSS(prefix, themes, reset, rootSelector, include, exclude) {
193
193
 
194
194
  const combined = baseCss + "\n" + modulesCss
195
195
  const utilMap = buildUtilityMap(combined)
196
- let css = resolveCopy(combined, utilMap)
196
+
197
+ // Base CSS (theme variables, token definitions, text-color overrides) must NOT be prefixed —
198
+ // the @utility text-* declarations target the same class names as Tailwind's theme-generated
199
+ // utilities and must stay unprefixed (e.g. text-primary, not fj-text-primary).
200
+ let resolvedBase = resolveCopy(baseCss, utilMap)
201
+ let resolvedModules = resolveCopy(modulesCss, utilMap)
197
202
 
198
203
  if (rootSelector !== ":root") {
199
- css = css.replace(/:root\b/g, rootSelector)
204
+ resolvedBase = resolvedBase.replace(/:root\b/g, rootSelector)
205
+ resolvedModules = resolvedModules.replace(/:root\b/g, rootSelector)
200
206
  }
201
207
 
202
- css = applyPrefix(css, prefix)
208
+ let css = resolvedBase + "\n" + applyPrefix(resolvedModules, prefix)
203
209
 
204
210
  const customThemes = buildCustomThemes(themes)
205
211
  if (customThemes) css += "\n\n" + customThemes
@@ -212,7 +218,17 @@ function buildCSS(prefix, themes, reset, rootSelector, include, exclude) {
212
218
  css = ast.toString()
213
219
  }
214
220
 
215
- return { css, utilMap }
221
+ // Extract @utility text-* rules from base CSS and convert to plain CSS for late injection.
222
+ // In the PostCSS path, Tailwind's theme-generated text-{color} utilities take precedence over
223
+ // same-named @utility definitions. Injecting them as plain CSS at the end of @layer utilities
224
+ // via OnceExit ensures they appear after the theme-generated rules and therefore win.
225
+ const baseUtilMap = buildUtilityMap(resolvedBase)
226
+ const textColorOverrides = [...baseUtilMap.entries()]
227
+ .filter(([name]) => name.startsWith('text-'))
228
+ .map(([name, body]) => `.${name} {${body}}`)
229
+ .join('\n')
230
+
231
+ return { css, utilMap, textColorOverrides }
216
232
  }
217
233
 
218
234
  function buildLateCSS(prefix, include, exclude, utilMap = new Map()) {
@@ -284,9 +300,10 @@ export default function frutjam(options = {}) {
284
300
  const include = parseList(merged.include)
285
301
  const exclude = parseList(merged.exclude)
286
302
 
287
- const { css, utilMap } = buildCSS(prefix, themes, reset, rootSelector, include, exclude)
303
+ const { css, utilMap, textColorOverrides } = buildCSS(prefix, themes, reset, rootSelector, include, exclude)
288
304
  root.append(postcss.parse(css).nodes)
289
305
  _lateCss = buildLateCSS(prefix, include, exclude, utilMap)
306
+ if (textColorOverrides) _lateCss += '\n' + textColorOverrides
290
307
  if (logs) {
291
308
  const d = "\x1b[2m", r = "\x1b[0m"
292
309
  const badge = "\x1b[46m\x1b[30m frutjam \x1b[0m"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "frutjam",
3
- "version": "2.0.4",
3
+ "version": "2.0.6",
4
4
  "description": "A utility-first CSS UI Library for Tailwind CSS",
5
5
  "type": "module",
6
6
  "exports": {
@@ -23,6 +23,8 @@
23
23
  "packages/"
24
24
  ],
25
25
  "style": "./dist/frutjam.min.css",
26
+ "unpkg": "./dist/frutjam.min.css",
27
+ "jsdelivr": "./dist/frutjam.min.css",
26
28
  "scripts": {
27
29
  "clean": "rimraf ./dist",
28
30
  "build:cdn": "node scripts/build-cdn.mjs",