@music-vine/cadence 3.0.1 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/badge.d.ts +2 -2
- package/dist/components/badge.js +1 -1
- package/dist/components/badge.js.map +1 -1
- package/dist/components/button.d.ts +5 -5
- package/dist/components/input.d.ts +1 -1
- package/dist/components/textarea.d.ts +1 -1
- package/dist/components/typography/list.d.ts +1 -1
- package/dist/lib/utils.d.ts +19 -6
- package/dist/lib/utils.d.ts.map +1 -1
- package/dist/lib/utils.js +2 -54
- package/dist/lib/utils.js.map +2 -2
- package/package.json +2 -12
|
@@ -29,8 +29,8 @@ import type * as React from "react";
|
|
|
29
29
|
* Includes color variants matching Button component for consistency.
|
|
30
30
|
*/
|
|
31
31
|
declare const badgeVariants: (props?: ({
|
|
32
|
-
variant?: "
|
|
33
|
-
size?: "
|
|
32
|
+
variant?: "bold" | "white" | "transparent" | "light" | "subtle" | "brand" | "brandSecondary" | "contrast" | "success" | "error" | "primary" | "secondary" | "destructive" | "brandLight" | "outline" | null | undefined;
|
|
33
|
+
size?: "default" | "icon" | "xs" | "sm" | "lg" | null | undefined;
|
|
34
34
|
shadow?: boolean | null | undefined;
|
|
35
35
|
strong?: boolean | null | undefined;
|
|
36
36
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
package/dist/components/badge.js
CHANGED
|
@@ -27,7 +27,7 @@ const badgeVariants = cva(
|
|
|
27
27
|
size: {
|
|
28
28
|
default: "h-8 px-4 py-2 leading-8",
|
|
29
29
|
xs: "h-5 gap-1.5 px-2 text-xs leading-5",
|
|
30
|
-
sm: "h-6 px-2.5 leading-6
|
|
30
|
+
sm: "h-6 px-2.5 text-sm leading-6",
|
|
31
31
|
lg: "h-10 gap-4 px-8 text-lg leading-10",
|
|
32
32
|
icon: "h-8 w-8 leading-8"
|
|
33
33
|
},
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/components/badge.tsx"],
|
|
4
|
-
"sourcesContent": ["/**\n * @module Badge\n *\n * Small status indicators and labels for highlighting information.\n * Supports multiple color variants and sizes for different contexts.\n *\n * @see {@link https://ui.shadcn.com/docs/components/badge Shadcn Badge}\n *\n * @example\n * // Basic badge\n * <Badge>New</Badge>\n *\n * @example\n * // Badge variants\n * <Badge variant=\"brand\">Premium</Badge>\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"error\">Expired</Badge>\n *\n * @example\n * // As a child element (e.g., wrapping a link)\n * <Badge asChild variant=\"outline\">\n * <a href=\"/pricing\">View Plans</a>\n * </Badge>\n */\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * CVA variants for Badge styling.\n * Includes color variants matching Button component for consistency.\n */\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border transition-colors focus:outline-hidden focus-visible:ring-2 focus-visible:ring-gray-950 focus-visible:ring-offset-2 dark:focus-visible:ring-gray-300\",\n {\n variants: {\n variant: {\n // Matching button variants (without hover/disabled states)\n subtle:\n \"border-1 border-gray-150 border-solid bg-white text-gray-950 dark:border-gray-800 dark:bg-gray-950 dark:text-white\",\n brand:\n \"border-1 border-brand-primary border-solid bg-brand-primary text-white\",\n brandSecondary:\n \"border-1 border-brand-secondary border-solid bg-brand-secondary text-brand-primary-hover dark:border-gray-900 dark:bg-gray-900 dark:text-white\",\n bold: \"border-gray-950 bg-gray-950 text-white dark:border-white dark:bg-white dark:text-gray-950\",\n light:\n \"border-gray-150 bg-gray-100 text-gray-950 dark:border-gray-800 dark:bg-gray-800 dark:text-white\",\n transparent:\n \"border-transparent bg-transparent text-gray-950 dark:text-white\",\n contrast: \"border-white bg-white text-gray-950\",\n success:\n \"border-green-600 bg-green-600 text-white dark:border-green-500 dark:bg-green-500\",\n error:\n \"border-red-600 bg-red-600 text-white dark:border-red-500 dark:bg-red-500\",\n primary:\n \"border-gray-900 bg-gray-900 text-white dark:border-gray-50 dark:bg-gray-50 dark:text-gray-950\",\n secondary:\n \"border-gray-150 bg-gray-100 text-gray-950 dark:border-gray-800 dark:bg-gray-800 dark:text-white\",\n destructive: \"border-red bg-red text-white\",\n white: \"border-gray-200 bg-white text-brand-primary\",\n brandLight:\n \"border-brand-secondary bg-brand-secondary text-brand-primary-hover\",\n outline:\n \"border border-gray-200 border-solid bg-transparent text-gray-800 focus-visible:ring-gray-500 dark:border-gray-800 dark:bg-transparent dark:text-white dark:focus-visible:ring-gray-400\",\n },\n size: {\n default: \"h-8 px-4 py-2 leading-8\",\n xs: \"h-5 gap-1.5 px-2 text-xs leading-5\",\n sm: \"h-6 px-2.5 leading-6
|
|
4
|
+
"sourcesContent": ["/**\n * @module Badge\n *\n * Small status indicators and labels for highlighting information.\n * Supports multiple color variants and sizes for different contexts.\n *\n * @see {@link https://ui.shadcn.com/docs/components/badge Shadcn Badge}\n *\n * @example\n * // Basic badge\n * <Badge>New</Badge>\n *\n * @example\n * // Badge variants\n * <Badge variant=\"brand\">Premium</Badge>\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"error\">Expired</Badge>\n *\n * @example\n * // As a child element (e.g., wrapping a link)\n * <Badge asChild variant=\"outline\">\n * <a href=\"/pricing\">View Plans</a>\n * </Badge>\n */\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { Slot as SlotPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\n/**\n * CVA variants for Badge styling.\n * Includes color variants matching Button component for consistency.\n */\nconst badgeVariants = cva(\n \"inline-flex items-center rounded-full border transition-colors focus:outline-hidden focus-visible:ring-2 focus-visible:ring-gray-950 focus-visible:ring-offset-2 dark:focus-visible:ring-gray-300\",\n {\n variants: {\n variant: {\n // Matching button variants (without hover/disabled states)\n subtle:\n \"border-1 border-gray-150 border-solid bg-white text-gray-950 dark:border-gray-800 dark:bg-gray-950 dark:text-white\",\n brand:\n \"border-1 border-brand-primary border-solid bg-brand-primary text-white\",\n brandSecondary:\n \"border-1 border-brand-secondary border-solid bg-brand-secondary text-brand-primary-hover dark:border-gray-900 dark:bg-gray-900 dark:text-white\",\n bold: \"border-gray-950 bg-gray-950 text-white dark:border-white dark:bg-white dark:text-gray-950\",\n light:\n \"border-gray-150 bg-gray-100 text-gray-950 dark:border-gray-800 dark:bg-gray-800 dark:text-white\",\n transparent:\n \"border-transparent bg-transparent text-gray-950 dark:text-white\",\n contrast: \"border-white bg-white text-gray-950\",\n success:\n \"border-green-600 bg-green-600 text-white dark:border-green-500 dark:bg-green-500\",\n error:\n \"border-red-600 bg-red-600 text-white dark:border-red-500 dark:bg-red-500\",\n primary:\n \"border-gray-900 bg-gray-900 text-white dark:border-gray-50 dark:bg-gray-50 dark:text-gray-950\",\n secondary:\n \"border-gray-150 bg-gray-100 text-gray-950 dark:border-gray-800 dark:bg-gray-800 dark:text-white\",\n destructive: \"border-red bg-red text-white\",\n white: \"border-gray-200 bg-white text-brand-primary\",\n brandLight:\n \"border-brand-secondary bg-brand-secondary text-brand-primary-hover\",\n outline:\n \"border border-gray-200 border-solid bg-transparent text-gray-800 focus-visible:ring-gray-500 dark:border-gray-800 dark:bg-transparent dark:text-white dark:focus-visible:ring-gray-400\",\n },\n size: {\n default: \"h-8 px-4 py-2 leading-8\",\n xs: \"h-5 gap-1.5 px-2 text-xs leading-5\",\n sm: \"h-6 px-2.5 text-sm leading-6\",\n lg: \"h-10 gap-4 px-8 text-lg leading-10\",\n icon: \"h-8 w-8 leading-8\",\n },\n shadow: {\n true: \"shadow\",\n false: \"\",\n },\n strong: {\n true: \"font-semibold\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"bold\",\n size: \"default\",\n shadow: false,\n strong: false,\n },\n }\n);\n\n/**\n * Props for the Badge component.\n *\n * @property variant - Color scheme: `brand`, `brandSecondary`, `success`, `error`, `subtle`, `bold`, etc.\n * @property size - Size variant: `xs`, `sm`, `default`, `lg`, `icon`\n * @property shadow - Add drop shadow when true\n * @property strong - Use semibold font weight when true\n * @property asChild - Render as child element (uses Radix Slot)\n * @property ref - Ref to the underlying div element\n */\nexport interface BadgeProps\n extends React.HTMLAttributes<HTMLDivElement>,\n VariantProps<typeof badgeVariants> {\n asChild?: boolean;\n ref?: React.Ref<HTMLDivElement>;\n}\n\n/**\n * Displays a small label or status indicator.\n *\n * Common use cases:\n * - Subscription status (Free, Premium)\n * - Item counts\n * - Status indicators (New, Sale, Popular)\n * - Tags and categories\n */\nconst Badge = ({\n className,\n variant,\n size,\n shadow,\n strong,\n asChild = false,\n ref,\n ...props\n}: BadgeProps) => {\n const Comp = asChild ? SlotPrimitive.Slot : \"div\";\n\n return (\n <Comp\n className={cn(\n badgeVariants({ variant, size, shadow, strong }),\n className\n )}\n ref={ref}\n {...props}\n />\n );\n};\n\nexport { Badge, badgeVariants };\n"],
|
|
5
5
|
"mappings": "AAmII;AA3GJ,SAAS,WAA8B;AACvC,SAAS,QAAQ,qBAAqB;AAGtC,SAAS,UAAU;AAMnB,MAAM,gBAAgB;AAAA,EACpB;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,SAAS;AAAA;AAAA,QAEP,QACE;AAAA,QACF,OACE;AAAA,QACF,gBACE;AAAA,QACF,MAAM;AAAA,QACN,OACE;AAAA,QACF,aACE;AAAA,QACF,UAAU;AAAA,QACV,SACE;AAAA,QACF,OACE;AAAA,QACF,SACE;AAAA,QACF,WACE;AAAA,QACF,aAAa;AAAA,QACb,OAAO;AAAA,QACP,YACE;AAAA,QACF,SACE;AAAA,MACJ;AAAA,MACA,MAAM;AAAA,QACJ,SAAS;AAAA,QACT,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,MAAM;AAAA,MACR;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AA4BA,MAAM,QAAQ,CAAC;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACL,MAAkB;AAChB,QAAM,OAAO,UAAU,cAAc,OAAO;AAE5C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW;AAAA,QACT,cAAc,EAAE,SAAS,MAAM,QAAQ,OAAO,CAAC;AAAA,QAC/C;AAAA,MACF;AAAA,MACA;AAAA,MACC,GAAG;AAAA;AAAA,EACN;AAEJ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -47,10 +47,10 @@ import type { ButtonHTMLAttributes, Ref } from "react";
|
|
|
47
47
|
type ButtonSize = "default" | "xs" | "sm" | "lg" | "icon" | "xl";
|
|
48
48
|
type ButtonFontSize = "xxs" | "xs" | "sm" | "base" | "lg" | "xl" | null;
|
|
49
49
|
declare const buttonVariants: (props?: ({
|
|
50
|
-
variant?: "
|
|
51
|
-
size?: "
|
|
52
|
-
fontSize?: "
|
|
53
|
-
borderRadius?: "
|
|
50
|
+
variant?: "bold" | "transparent" | "light" | "subtle" | "brand" | "brandSecondary" | "contrast" | "success" | "error" | null | undefined;
|
|
51
|
+
size?: "default" | "icon" | "xs" | "sm" | "lg" | "xl" | null | undefined;
|
|
52
|
+
fontSize?: "base" | "xs" | "sm" | "lg" | "xl" | "xxs" | "null" | null | undefined;
|
|
53
|
+
borderRadius?: "default" | "sm" | "rounded" | "full" | null | undefined;
|
|
54
54
|
border?: boolean | null | undefined;
|
|
55
55
|
noFeedback?: boolean | null | undefined;
|
|
56
56
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
@@ -96,7 +96,7 @@ export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement>, Om
|
|
|
96
96
|
declare const Button: ({ className, variant, size, borderRadius, border, noFeedback, asChild, type, children, fontSize, icon, ref, ...props }: ButtonProps) => import("react/jsx-runtime").JSX.Element;
|
|
97
97
|
/** CVA variants for Loading spinner sizing */
|
|
98
98
|
declare const loadingVariants: (props?: ({
|
|
99
|
-
size?: "
|
|
99
|
+
size?: "default" | "icon" | "xs" | "sm" | "lg" | "xl" | null | undefined;
|
|
100
100
|
visible?: boolean | null | undefined;
|
|
101
101
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
102
102
|
/**
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
import { type VariantProps } from "class-variance-authority";
|
|
36
36
|
import type { Ref } from "react";
|
|
37
37
|
declare const inputVariants: (props?: ({
|
|
38
|
-
size?: "
|
|
38
|
+
size?: "default" | "auto" | "sm" | null | undefined;
|
|
39
39
|
hasLeftIcon?: boolean | null | undefined;
|
|
40
40
|
hasRightIcon?: boolean | null | undefined;
|
|
41
41
|
type?: "search" | null | undefined;
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
import { type VariantProps } from "class-variance-authority";
|
|
19
19
|
import type { Ref } from "react";
|
|
20
20
|
declare const textareaVariants: (props?: ({
|
|
21
|
-
size?: "
|
|
21
|
+
size?: "default" | "sm" | null | undefined;
|
|
22
22
|
resize?: "none" | "horizontal" | "vertical" | "both" | null | undefined;
|
|
23
23
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
24
24
|
/**
|
|
@@ -2,7 +2,7 @@ import { type VariantProps } from "class-variance-authority";
|
|
|
2
2
|
import type * as React from "react";
|
|
3
3
|
import type { Ref } from "react";
|
|
4
4
|
declare const listVariants: (props?: ({
|
|
5
|
-
size?: "
|
|
5
|
+
size?: "default" | "sm" | "lg" | null | undefined;
|
|
6
6
|
variant?: "ordered" | "custom" | "unordered" | null | undefined;
|
|
7
7
|
color?: "default" | "modal" | null | undefined;
|
|
8
8
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
package/dist/lib/utils.d.ts
CHANGED
|
@@ -1,12 +1,25 @@
|
|
|
1
1
|
import { type ClassValue } from "clsx";
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* `twMerge` from `fluid-tailwindcss/tailwind-merge` is a tailwind-merge
|
|
4
|
+
* instance preconfigured to recognise every `fl-*` utility (padding,
|
|
5
|
+
* margin, gap, text, sizing, inset, border-radius, …) so merging works
|
|
6
|
+
* correctly out of the box:
|
|
6
7
|
*
|
|
7
|
-
* Fluid
|
|
8
|
-
*
|
|
9
|
-
* -
|
|
8
|
+
* - Fluid and standard utilities conflict at the same modifier level
|
|
9
|
+
* (e.g. `@md:fl-text-2xl/3xl` overrides `@md:text-5xl`).
|
|
10
|
+
* - A container-prefixed fluid utility does NOT override its un-prefixed
|
|
11
|
+
* counterpart (e.g. `@md:fl-text-2xl/3xl` leaves `text-4xl` intact),
|
|
12
|
+
* matching the CSS cascade — the prefixed rule only applies inside the
|
|
13
|
+
* container query, so the base utility must survive as the mobile
|
|
14
|
+
* fallback.
|
|
15
|
+
*
|
|
16
|
+
* This replaces the previous hand-rolled adapter that was ported from
|
|
17
|
+
* `fluid-tailwind` (the `~`-prefix variant). The codebase no longer uses
|
|
18
|
+
* `~`-prefixed fluid classes — `fluid-tailwindcss` is the sole fluid plugin.
|
|
19
|
+
*/
|
|
20
|
+
/**
|
|
21
|
+
* Merge Tailwind CSS classes with clsx and tailwind-merge, with fluid utility
|
|
22
|
+
* conflict resolution.
|
|
10
23
|
*/
|
|
11
24
|
export declare function cn(...inputs: ClassValue[]): string;
|
|
12
25
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/lib/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/lib/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAQ,MAAM,MAAM,CAAC;AAG7C;;;;;;;;;;;;;;;;;GAiBG;AAEH;;;GAGG;AACH,wBAAgB,EAAE,CAAC,GAAG,MAAM,EAAE,UAAU,EAAE,UAEzC"}
|
package/dist/lib/utils.js
CHANGED
|
@@ -1,59 +1,7 @@
|
|
|
1
1
|
import { clsx } from "clsx";
|
|
2
|
-
import {
|
|
3
|
-
const isFluidTextSize = (classPart) => {
|
|
4
|
-
const fluidPattern = /^fl-text-([a-z0-9]+)\/([a-z0-9]+)$/;
|
|
5
|
-
const match = classPart.match(fluidPattern);
|
|
6
|
-
if (!match) {
|
|
7
|
-
return false;
|
|
8
|
-
}
|
|
9
|
-
const [, startSize, endSize] = match;
|
|
10
|
-
const validSizes = [
|
|
11
|
-
"xs",
|
|
12
|
-
"sm",
|
|
13
|
-
"base",
|
|
14
|
-
"lg",
|
|
15
|
-
"xl",
|
|
16
|
-
"2xl",
|
|
17
|
-
"3xl",
|
|
18
|
-
"4xl",
|
|
19
|
-
"5xl",
|
|
20
|
-
"6xl",
|
|
21
|
-
"7xl",
|
|
22
|
-
"8xl",
|
|
23
|
-
"9xl"
|
|
24
|
-
];
|
|
25
|
-
return validSizes.includes(startSize) && validSizes.includes(endSize);
|
|
26
|
-
};
|
|
27
|
-
const customTwMerge = extendTailwindMerge((config) => {
|
|
28
|
-
return mergeConfigs(config, {
|
|
29
|
-
extend: {
|
|
30
|
-
classGroups: {
|
|
31
|
-
// Extend font-size class group to support fluid syntax
|
|
32
|
-
// Top-level validator receives the full className (e.g., "fl-text-2xl/3xl")
|
|
33
|
-
"font-size": [isFluidTextSize]
|
|
34
|
-
}
|
|
35
|
-
},
|
|
36
|
-
// Parse className to extract modifiers and base class name
|
|
37
|
-
// For @md:fl-text-4xl/5xl → modifiers:[@md], baseClassName:fl-text-4xl/5xl
|
|
38
|
-
experimentalParseClassName: ({ className, parseClassName }) => {
|
|
39
|
-
return parseClassName(className);
|
|
40
|
-
}
|
|
41
|
-
});
|
|
42
|
-
});
|
|
2
|
+
import { twMerge } from "fluid-tailwindcss/tailwind-merge";
|
|
43
3
|
function cn(...inputs) {
|
|
44
|
-
|
|
45
|
-
const expanded = classList.split(" ").flatMap((className) => {
|
|
46
|
-
const fluidWithModifier = className.match(
|
|
47
|
-
/^(@[\w-]+):fl-text-(\w+)\/(\w+)$/
|
|
48
|
-
);
|
|
49
|
-
if (fluidWithModifier) {
|
|
50
|
-
const [, modifier, startSize, endSize] = fluidWithModifier;
|
|
51
|
-
const baseFluid = `fl-text-${startSize}/${endSize}`;
|
|
52
|
-
return [className, baseFluid];
|
|
53
|
-
}
|
|
54
|
-
return [className];
|
|
55
|
-
});
|
|
56
|
-
return customTwMerge(expanded.join(" "));
|
|
4
|
+
return twMerge(clsx(inputs));
|
|
57
5
|
}
|
|
58
6
|
export {
|
|
59
7
|
cn
|
package/dist/lib/utils.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/lib/utils.ts"],
|
|
4
|
-
"sourcesContent": ["import { type ClassValue, clsx } from \"clsx\";\nimport {
|
|
5
|
-
"mappings": "AAAA,SAA0B,YAAY;AACtC,SAAS,
|
|
4
|
+
"sourcesContent": ["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"fluid-tailwindcss/tailwind-merge\";\n\n/**\n * `twMerge` from `fluid-tailwindcss/tailwind-merge` is a tailwind-merge\n * instance preconfigured to recognise every `fl-*` utility (padding,\n * margin, gap, text, sizing, inset, border-radius, \u2026) so merging works\n * correctly out of the box:\n *\n * - Fluid and standard utilities conflict at the same modifier level\n * (e.g. `@md:fl-text-2xl/3xl` overrides `@md:text-5xl`).\n * - A container-prefixed fluid utility does NOT override its un-prefixed\n * counterpart (e.g. `@md:fl-text-2xl/3xl` leaves `text-4xl` intact),\n * matching the CSS cascade \u2014 the prefixed rule only applies inside the\n * container query, so the base utility must survive as the mobile\n * fallback.\n *\n * This replaces the previous hand-rolled adapter that was ported from\n * `fluid-tailwind` (the `~`-prefix variant). The codebase no longer uses\n * `~`-prefixed fluid classes \u2014 `fluid-tailwindcss` is the sole fluid plugin.\n */\n\n/**\n * Merge Tailwind CSS classes with clsx and tailwind-merge, with fluid utility\n * conflict resolution.\n */\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAA0B,YAAY;AACtC,SAAS,eAAe;AAyBjB,SAAS,MAAM,QAAsB;AAC1C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@music-vine/cadence",
|
|
3
|
-
"version": "3.0
|
|
3
|
+
"version": "3.1.0",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -94,6 +94,7 @@
|
|
|
94
94
|
"class-variance-authority": "^0.7.1",
|
|
95
95
|
"clsx": "^2.1.1",
|
|
96
96
|
"embla-carousel-react": "^8.5.1",
|
|
97
|
+
"fluid-tailwindcss": "^1.0.5",
|
|
97
98
|
"lodash": "^4.18.1",
|
|
98
99
|
"lucide-react": "^0.531.0",
|
|
99
100
|
"motion": "^12.0.0",
|
|
@@ -105,7 +106,6 @@
|
|
|
105
106
|
},
|
|
106
107
|
"devDependencies": {
|
|
107
108
|
"@biomejs/biome": "^2.3.3",
|
|
108
|
-
"@playwright/test": "^1.58.2",
|
|
109
109
|
"@storybook/addon-a11y": "^10.1.11",
|
|
110
110
|
"@storybook/addon-docs": "^10.1.11",
|
|
111
111
|
"@storybook/addon-links": "^10.1.11",
|
|
@@ -116,7 +116,6 @@
|
|
|
116
116
|
"@testing-library/react": "^16.3.0",
|
|
117
117
|
"@testing-library/user-event": "^14.6.1",
|
|
118
118
|
"@types/lodash": "^4.17.13",
|
|
119
|
-
"@types/pixelmatch": "^5.2.6",
|
|
120
119
|
"@types/react": "^19.0.0",
|
|
121
120
|
"@types/react-dom": "^19.0.0",
|
|
122
121
|
"@vitest/coverage-v8": "^3.2.4",
|
|
@@ -125,14 +124,10 @@
|
|
|
125
124
|
"esbuild": "^0.25.0",
|
|
126
125
|
"glob": "^11.0.0",
|
|
127
126
|
"jsdom": "^26.1.0",
|
|
128
|
-
"pixelmatch": "^7.1.0",
|
|
129
|
-
"pngjs": "^7.0.0",
|
|
130
127
|
"postcss": "^8.5.13",
|
|
131
128
|
"rimraf": "^6.0.1",
|
|
132
129
|
"storybook": "^10.2.10",
|
|
133
130
|
"tailwindcss": "^4.1.18",
|
|
134
|
-
"tailwindcss-v3": "npm:tailwindcss@^3.4.18",
|
|
135
|
-
"tsx": "^4.21.0",
|
|
136
131
|
"typescript": "^5.2.2",
|
|
137
132
|
"vite": "^8.0.10",
|
|
138
133
|
"vitest": "^3.2.4"
|
|
@@ -146,11 +141,6 @@
|
|
|
146
141
|
"test:ui": "vitest --ui",
|
|
147
142
|
"test:run": "vitest run",
|
|
148
143
|
"test:coverage": "vitest run --coverage",
|
|
149
|
-
"test:visual": "pnpm run test:visual:build && playwright test --config visual-tests/playwright.config.ts",
|
|
150
|
-
"test:visual:build": "pnpm run build && tsx visual-tests/fixtures/build-fixtures.ts",
|
|
151
|
-
"test:visual:update": "pnpm run test:visual -- --update-snapshots",
|
|
152
|
-
"test:visual:ui": "playwright test --config visual-tests/playwright.config.ts --ui",
|
|
153
|
-
"test:visual:report": "playwright show-report visual-tests/reports",
|
|
154
144
|
"storybook": "storybook dev -p 6007",
|
|
155
145
|
"build-storybook": "storybook build --output-dir storybook-static",
|
|
156
146
|
"preview-storybook": "npx http-server storybook-static -p 6007"
|