@spark-ui/components 10.13.0 → 10.14.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.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/card/index.ts","../../src/card/Backdrop.tsx","../../src/slot/Slot.tsx","../../src/card/Card.styles.tsx","../../src/card/context.tsx","../../src/card/utils.ts","../../src/card/Card.tsx","../../src/card/Content.styles.tsx","../../src/card/Content.tsx"],"sourcesContent":["import { Backdrop } from './Backdrop'\nimport { Card as Root } from './Card'\nimport { Content } from './Content'\n\nexport const Card: typeof Root & {\n Content: typeof Content\n Backdrop: typeof Backdrop\n} = Object.assign(Root, {\n Content,\n Backdrop,\n})\n\nCard.displayName = 'Card'\nContent.displayName = 'Card.Content'\nBackdrop.displayName = 'Card.Backdrop'\n\nexport { type CardProps } from './Card'\n","import { makeVariants } from '@spark-ui/internal-utils'\nimport { cva, VariantProps } from 'class-variance-authority'\n\nexport const backdropStyles = cva(\n [\n 'default:bg-surface default:bg-gradient-to-r absolute inset-x-0 top-0',\n 'h-sz-16',\n 'default:rounded-t-lg',\n 'bg-[length:200%_100%]',\n ],\n {\n variants: {\n animation: {\n none: '',\n slideRight: 'animate-slide-bg-right',\n },\n intent: makeVariants<\n 'intent',\n [\n 'main',\n 'support',\n 'accent',\n 'basic',\n 'success',\n 'alert',\n 'danger',\n 'info',\n 'neutral',\n 'surface',\n 'surfaceInverse',\n ]\n >({\n main: ['default:from-main/dim-4 default:via-main/dim-2 default:to-main/dim-4'],\n support: ['default:from-support/dim-4 default:via-support/dim-2 default:to-support/dim-4'],\n accent: ['default:from-accent/dim-4 default:via-accent/dim-2 default:to-accent/dim-4'],\n basic: ['default:from-basic/dim-4 default:via-basic/dim-2 default:to-basic/dim-4'],\n success: ['default:from-success/dim-4 default:via-success/dim-2 default:to-success/dim-4'],\n alert: ['default:from-alert/dim-4 default:via-alert/dim-2 default:to-alert/dim-4'],\n danger: ['default:from-error/dim-4 default:via-error/dim-2 default:to-error/dim-4'],\n info: ['default:from-info/dim-4 default:via-info/dim-2 default:to-info/dim-4'],\n neutral: ['default:from-neutral/dim-4 default:via-neutral/dim-2 default:to-neutral/dim-4'],\n surface: ['default:from-outline/dim-4 default:via-outline/dim-2 default:to-outline/dim-4'],\n surfaceInverse: [\n 'default:from-surface/dim-4 default:via-surface/dim-2 default:to-surface/dim-4',\n ],\n }),\n },\n defaultVariants: {\n intent: 'main',\n animation: 'none',\n },\n }\n)\n\nexport type BackdropStylesProps = VariantProps<typeof backdropStyles>\n\ninterface BackdropProps extends BackdropStylesProps {\n className?: string\n}\n\nexport const Backdrop = ({ intent = 'main', animation = 'none', ...props }: BackdropProps) => {\n return <div className={backdropStyles({ intent, animation })} {...props} />\n}\n\nBackdrop.displayName = 'Card.Backdrop'\n","import { Slot as RadixSlot } from 'radix-ui'\nimport {\n cloneElement,\n HTMLAttributes,\n isValidElement,\n PropsWithChildren,\n ReactNode,\n Ref,\n} from 'react'\n\nexport const Slottable: typeof RadixSlot.Slottable = RadixSlot.Slottable\n\nexport type SlotProps = PropsWithChildren<HTMLAttributes<HTMLElement>> & {\n ref?: Ref<HTMLElement>\n}\n\nexport const Slot = ({ ref, ...props }: SlotProps) => {\n return <RadixSlot.Root ref={ref} {...props} />\n}\n\n/**\n * When using Radix `Slot` component, it will consider its first child to merge its props with.\n * In some cases, you might need to wrap the top child with additional markup without breaking this behaviour.\n */\nexport const wrapPolymorphicSlot = (\n asChild: boolean | undefined,\n children: ReactNode,\n callback: (children: ReactNode) => ReactNode\n) => {\n if (!asChild) return callback(children) // If polymorphic behaviour is not used, we keep the original children\n\n return isValidElement(children)\n ? cloneElement(\n children,\n undefined,\n callback((children.props as { children: ReactNode }).children)\n )\n : null\n}\n","import { makeVariants, tw } from '@spark-ui/internal-utils'\nimport { cva, VariantProps } from 'class-variance-authority'\n\nexport const cardStyles = cva(\n [\n 'group relative bg-clip-padding default:rounded-lg focus-visible:u-outline',\n 'disabled:opacity-dim-3 disabled:cursor-not-allowed',\n ],\n {\n variants: {\n design: {\n filled: [],\n outlined: ['border-sm'],\n tinted: [],\n },\n hasBackdrop: {\n true: ['pt-md'],\n },\n /**\n * Color scheme of the button.\n */\n intent: makeVariants<\n 'intent',\n [\n 'main',\n 'support',\n 'accent',\n 'basic',\n 'success',\n 'alert',\n 'danger',\n 'info',\n 'neutral',\n 'surface',\n 'surfaceInverse',\n ]\n >({\n main: [],\n support: [],\n accent: [],\n basic: [],\n success: [],\n alert: [],\n danger: [],\n info: [],\n neutral: [],\n surface: [],\n surfaceInverse: [],\n }),\n },\n compoundVariants: [\n // OUTLINED\n { intent: 'main', design: 'outlined', class: tw(['border-main']) },\n { intent: 'support', design: 'outlined', class: tw(['border-support']) },\n { intent: 'accent', design: 'outlined', class: tw(['border-accent']) },\n { intent: 'basic', design: 'outlined', class: tw(['border-basic']) },\n { intent: 'success', design: 'outlined', class: tw(['border-success']) },\n { intent: 'alert', design: 'outlined', class: tw(['border-alert']) },\n { intent: 'danger', design: 'outlined', class: tw(['border-error']) },\n { intent: 'info', design: 'outlined', class: tw(['border-info']) },\n { intent: 'neutral', design: 'outlined', class: tw(['border-neutral']) },\n { intent: 'surface', design: 'outlined', class: tw(['border-outline']) },\n ],\n defaultVariants: {\n design: 'filled',\n intent: 'surface',\n },\n }\n)\n\nexport type CardStylesProps = VariantProps<typeof cardStyles>\n","import { createContext, useContext } from 'react'\n\nimport type { CardStylesProps } from './Card.styles'\n\nexport interface CardContextValue {\n design: CardStylesProps['design']\n intent: CardStylesProps['intent']\n hasBackdrop: boolean\n inset: boolean\n isInteractive: boolean\n}\n\nconst CardContext = createContext<CardContextValue | undefined>(undefined)\n\nexport const useCardContext = () => {\n const context = useContext(CardContext)\n if (!context) {\n throw new Error('useCardContext must be used within a Card component')\n }\n\n return context\n}\n\nexport { CardContext }\n","import { Children, isValidElement, ReactNode } from 'react'\n\nconst MOUSE_EVENTS = [\n 'onClick',\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseMove',\n 'onMouseOver',\n 'onMouseOut',\n 'onDoubleClick',\n 'onContextMenu',\n] as const\n\nexport const hasBackdrop = (children: ReactNode): boolean => {\n let backdropFound = false\n\n const searchForBackdrop = (node: ReactNode): void => {\n if (backdropFound) return\n\n Children.forEach(node, child => {\n if (backdropFound) return\n\n if (isValidElement(child)) {\n const isBackdropComponent =\n typeof child.type === 'function' &&\n (child.type as { displayName?: string }).displayName === 'Card.Backdrop'\n\n if (isBackdropComponent) {\n backdropFound = true\n\n return\n }\n\n const hasChildren =\n child.props && typeof child.props === 'object' && 'children' in child.props\n\n if (hasChildren) {\n const childChildren = (child.props as { children: ReactNode }).children\n if (childChildren !== undefined && childChildren !== null) {\n searchForBackdrop(childChildren)\n }\n }\n }\n })\n }\n\n searchForBackdrop(children)\n\n return backdropFound\n}\n\nexport const isInteractive = (\n children: ReactNode,\n asChild: boolean | undefined,\n props: Record<string, any>\n): boolean => {\n const hasMouseEventHandlers = MOUSE_EVENTS.some(event => event in props)\n\n if (hasMouseEventHandlers) {\n return true\n }\n\n if (!asChild) {\n return false\n }\n\n const child = Children.only(children)\n\n if (!isValidElement(child)) {\n return false\n }\n\n const interactiveElements = ['a', 'button']\n const isInteractiveElement =\n typeof child.type === 'string' && interactiveElements.includes(child.type)\n\n if (isInteractiveElement) {\n return true\n }\n\n const childProps = child.props as Record<string, any>\n const hasChildEventHandlers = MOUSE_EVENTS.some(event => event in childProps)\n\n return hasChildEventHandlers\n}\n","import { ComponentProps } from 'react'\n\nimport { Slot } from '../slot'\nimport { cardStyles, type CardStylesProps } from './Card.styles'\nimport { CardContext } from './context'\nimport { hasBackdrop, isInteractive } from './utils'\n\nexport interface CardProps extends ComponentProps<'div'>, CardStylesProps {\n /**\n * Change the component to the HTML tag or custom component of the only child.\n */\n asChild?: boolean\n /**\n * Whether the card should have an inset padding.\n */\n inset?: boolean\n}\n\nexport const Card = ({\n children,\n design = 'filled',\n intent = 'surface',\n inset = false,\n asChild,\n className,\n ref,\n ...props\n}: CardProps) => {\n const Component = asChild ? Slot : 'div'\n const backdropDetected = hasBackdrop(children)\n const interactiveDetected = isInteractive(children, asChild, props)\n\n return (\n <CardContext.Provider\n value={{\n design,\n intent,\n hasBackdrop: backdropDetected,\n inset,\n isInteractive: interactiveDetected,\n }}\n >\n <Component\n data-spark-component=\"card\"\n data-interactive={interactiveDetected}\n ref={ref}\n className={cardStyles({\n className,\n design,\n intent,\n hasBackdrop: backdropDetected,\n })}\n {...props}\n >\n {children}\n </Component>\n </CardContext.Provider>\n )\n}\n\nCard.displayName = 'Card'\n","import { makeVariants, tw } from '@spark-ui/internal-utils'\nimport { cva, VariantProps } from 'class-variance-authority'\n\nexport const contentStyles = cva(\n [\n 'relative h-full default:rounded-lg w-full focus-visible:u-outline',\n 'default:transition-colors default:duration-200 ease-linear',\n ],\n {\n variants: {\n inset: {\n false: ['default:p-lg'],\n },\n design: {\n filled: [],\n outlined: [\n 'default:bg-surface group-focus:bg-surface-hovered group-not-disabled:group-data-[interactive=true]:group-hover:bg-surface-hovered',\n ],\n tinted: [],\n },\n hasBackdrop: {\n true: ['rounded-t-[16px_8px] '],\n },\n intent: makeVariants<\n 'intent',\n [\n 'main',\n 'support',\n 'accent',\n 'basic',\n 'success',\n 'alert',\n 'danger',\n 'info',\n 'neutral',\n 'surface',\n 'surfaceInverse',\n ]\n >({\n main: [],\n support: [],\n accent: [],\n basic: [],\n success: [],\n alert: [],\n danger: [],\n info: [],\n neutral: [],\n surface: [],\n surfaceInverse: [],\n }),\n },\n compoundVariants: [\n // FILLED\n {\n intent: 'main',\n design: 'filled',\n class: tw([\n 'bg-main text-on-main group-focus:bg-main-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-main-hovered',\n ]),\n },\n {\n intent: 'support',\n design: 'filled',\n class: tw([\n 'bg-support text-on-support group-focus:bg-support-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-support-hovered',\n ]),\n },\n {\n intent: 'accent',\n design: 'filled',\n class: tw([\n 'bg-accent text-on-accent group-focus:bg-accent-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-accent-hovered',\n ]),\n },\n {\n intent: 'basic',\n design: 'filled',\n class: tw([\n 'bg-basic text-on-basic group-focus:bg-basic-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-basic-hovered',\n ]),\n },\n {\n intent: 'success',\n design: 'filled',\n class: tw([\n 'bg-success text-on-success group-focus:bg-success-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-success-hovered',\n ]),\n },\n {\n intent: 'alert',\n design: 'filled',\n class: tw([\n 'bg-alert text-on-alert group-focus:bg-alert-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-alert-hovered',\n ]),\n },\n {\n intent: 'danger',\n design: 'filled',\n class: tw([\n 'text-on-error bg-error group-focus:bg-error-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-error-hovered',\n ]),\n },\n {\n intent: 'info',\n design: 'filled',\n class: tw([\n 'text-on-error bg-info group-focus:bg-info-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-info-hovered',\n ]),\n },\n {\n intent: 'neutral',\n design: 'filled',\n class: tw([\n 'bg-neutral text-on-neutral group-focus:bg-neutral-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-neutral-hovered',\n ]),\n },\n {\n intent: 'surface',\n design: 'filled',\n class: tw([\n 'bg-surface text-on-surface group-focus:bg-surface-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-surface-hovered',\n ]),\n },\n // OUTLINED\n /**\n * Outlined styles are handled by the Card component (parent)\n */\n // TINTED\n {\n intent: 'main',\n design: 'tinted',\n class: tw([\n 'bg-main-container text-on-main-container group-focus:bg-main-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-main-container-hovered',\n ]),\n },\n {\n intent: 'support',\n design: 'tinted',\n class: tw([\n 'bg-support-container text-on-support-container group-focus:bg-support-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-support-container-hovered',\n ]),\n },\n {\n intent: 'accent',\n design: 'tinted',\n class: tw([\n 'bg-accent-container text-on-accent-container group-focus:bg-accent-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-accent-container-hovered',\n ]),\n },\n {\n intent: 'basic',\n design: 'tinted',\n class: tw([\n 'bg-basic-container text-on-basic-container group-focus:bg-basic-container-hovered',\n ]),\n },\n {\n intent: 'success',\n design: 'tinted',\n class: tw([\n 'bg-success-container text-on-success-container group-focus:bg-success-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-success-container-hovered',\n ]),\n },\n {\n intent: 'alert',\n design: 'tinted',\n class: tw([\n 'bg-alert-container text-on-alert-container group-focus:bg-alert-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-alert-container-hovered',\n ]),\n },\n {\n intent: 'danger',\n design: 'tinted',\n class: tw([\n 'bg-error-container text-on-error-container group-focus:bg-error-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-error-container-hovered',\n ]),\n },\n {\n intent: 'info',\n design: 'tinted',\n class: tw([\n 'bg-info-container text-on-info-container group-focus:bg-info-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-info-container-hovered',\n ]),\n },\n {\n intent: 'neutral',\n design: 'tinted',\n class: tw([\n 'bg-neutral-container text-on-neutral-container group-focus:bg-neutral-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-neutral-container-hovered',\n ]),\n },\n {\n intent: 'surface',\n design: 'tinted',\n class: tw([\n 'bg-surface text-on-surface group-focus:bg-surface-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-surface-hovered',\n ]),\n },\n ],\n defaultVariants: {\n design: 'filled',\n intent: 'surface',\n inset: false,\n hasBackdrop: true,\n },\n }\n)\n\nexport type ContentStylesProps = VariantProps<typeof contentStyles>\n","import { ComponentProps } from 'react'\n\nimport { Slot } from '../slot'\nimport { contentStyles } from './Content.styles'\nimport { useCardContext } from './context'\n\nexport interface ContentProps extends ComponentProps<'div'> {\n /**\n * Change the component to the HTML tag or custom component of the only child.\n */\n asChild?: boolean\n /**\n * Whether the card should have an inset padding.\n */\n inset?: boolean\n}\n\nexport const Content = ({ children, inset, asChild, className, ref, ...props }: ContentProps) => {\n const Component = asChild ? Slot : 'div'\n const { design, intent, hasBackdrop } = useCardContext()\n\n return (\n <Component\n data-spark-component=\"card-content\"\n ref={ref}\n className={contentStyles({\n className,\n design,\n intent,\n inset,\n hasBackdrop,\n })}\n {...props}\n >\n {children}\n </Component>\n )\n}\n\nContent.displayName = 'Content'\n"],"mappings":"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","names":["Card","import_jsx_runtime","RadixSlot","import_internal_utils","import_class_variance_authority","import_react","import_react","import_jsx_runtime","import_internal_utils","import_class_variance_authority","import_jsx_runtime","hasBackdrop","Card"]}
@@ -0,0 +1,470 @@
1
+ import {
2
+ Slot
3
+ } from "../chunk-6QCEPQ3U.mjs";
4
+
5
+ // src/card/Backdrop.tsx
6
+ import { makeVariants } from "@spark-ui/internal-utils";
7
+ import { cva } from "class-variance-authority";
8
+ import { jsx } from "react/jsx-runtime";
9
+ var backdropStyles = cva(
10
+ [
11
+ "default:bg-surface default:bg-gradient-to-r absolute inset-x-0 top-0",
12
+ "h-sz-16",
13
+ "default:rounded-t-lg",
14
+ "bg-[length:200%_100%]"
15
+ ],
16
+ {
17
+ variants: {
18
+ animation: {
19
+ none: "",
20
+ slideRight: "animate-slide-bg-right"
21
+ },
22
+ intent: makeVariants({
23
+ main: ["default:from-main/dim-4 default:via-main/dim-2 default:to-main/dim-4"],
24
+ support: ["default:from-support/dim-4 default:via-support/dim-2 default:to-support/dim-4"],
25
+ accent: ["default:from-accent/dim-4 default:via-accent/dim-2 default:to-accent/dim-4"],
26
+ basic: ["default:from-basic/dim-4 default:via-basic/dim-2 default:to-basic/dim-4"],
27
+ success: ["default:from-success/dim-4 default:via-success/dim-2 default:to-success/dim-4"],
28
+ alert: ["default:from-alert/dim-4 default:via-alert/dim-2 default:to-alert/dim-4"],
29
+ danger: ["default:from-error/dim-4 default:via-error/dim-2 default:to-error/dim-4"],
30
+ info: ["default:from-info/dim-4 default:via-info/dim-2 default:to-info/dim-4"],
31
+ neutral: ["default:from-neutral/dim-4 default:via-neutral/dim-2 default:to-neutral/dim-4"],
32
+ surface: ["default:from-outline/dim-4 default:via-outline/dim-2 default:to-outline/dim-4"],
33
+ surfaceInverse: [
34
+ "default:from-surface/dim-4 default:via-surface/dim-2 default:to-surface/dim-4"
35
+ ]
36
+ })
37
+ },
38
+ defaultVariants: {
39
+ intent: "main",
40
+ animation: "none"
41
+ }
42
+ }
43
+ );
44
+ var Backdrop = ({ intent = "main", animation = "none", ...props }) => {
45
+ return /* @__PURE__ */ jsx("div", { className: backdropStyles({ intent, animation }), ...props });
46
+ };
47
+ Backdrop.displayName = "Card.Backdrop";
48
+
49
+ // src/card/Card.styles.tsx
50
+ import { makeVariants as makeVariants2, tw } from "@spark-ui/internal-utils";
51
+ import { cva as cva2 } from "class-variance-authority";
52
+ var cardStyles = cva2(
53
+ [
54
+ "group relative bg-clip-padding default:rounded-lg focus-visible:u-outline",
55
+ "disabled:opacity-dim-3 disabled:cursor-not-allowed"
56
+ ],
57
+ {
58
+ variants: {
59
+ design: {
60
+ filled: [],
61
+ outlined: ["border-sm"],
62
+ tinted: []
63
+ },
64
+ hasBackdrop: {
65
+ true: ["pt-md"]
66
+ },
67
+ /**
68
+ * Color scheme of the button.
69
+ */
70
+ intent: makeVariants2({
71
+ main: [],
72
+ support: [],
73
+ accent: [],
74
+ basic: [],
75
+ success: [],
76
+ alert: [],
77
+ danger: [],
78
+ info: [],
79
+ neutral: [],
80
+ surface: [],
81
+ surfaceInverse: []
82
+ })
83
+ },
84
+ compoundVariants: [
85
+ // OUTLINED
86
+ { intent: "main", design: "outlined", class: tw(["border-main"]) },
87
+ { intent: "support", design: "outlined", class: tw(["border-support"]) },
88
+ { intent: "accent", design: "outlined", class: tw(["border-accent"]) },
89
+ { intent: "basic", design: "outlined", class: tw(["border-basic"]) },
90
+ { intent: "success", design: "outlined", class: tw(["border-success"]) },
91
+ { intent: "alert", design: "outlined", class: tw(["border-alert"]) },
92
+ { intent: "danger", design: "outlined", class: tw(["border-error"]) },
93
+ { intent: "info", design: "outlined", class: tw(["border-info"]) },
94
+ { intent: "neutral", design: "outlined", class: tw(["border-neutral"]) },
95
+ { intent: "surface", design: "outlined", class: tw(["border-outline"]) }
96
+ ],
97
+ defaultVariants: {
98
+ design: "filled",
99
+ intent: "surface"
100
+ }
101
+ }
102
+ );
103
+
104
+ // src/card/context.tsx
105
+ import { createContext, useContext } from "react";
106
+ var CardContext = createContext(void 0);
107
+ var useCardContext = () => {
108
+ const context = useContext(CardContext);
109
+ if (!context) {
110
+ throw new Error("useCardContext must be used within a Card component");
111
+ }
112
+ return context;
113
+ };
114
+
115
+ // src/card/utils.ts
116
+ import { Children, isValidElement } from "react";
117
+ var MOUSE_EVENTS = [
118
+ "onClick",
119
+ "onMouseDown",
120
+ "onMouseUp",
121
+ "onMouseEnter",
122
+ "onMouseLeave",
123
+ "onMouseMove",
124
+ "onMouseOver",
125
+ "onMouseOut",
126
+ "onDoubleClick",
127
+ "onContextMenu"
128
+ ];
129
+ var hasBackdrop = (children) => {
130
+ let backdropFound = false;
131
+ const searchForBackdrop = (node) => {
132
+ if (backdropFound) return;
133
+ Children.forEach(node, (child) => {
134
+ if (backdropFound) return;
135
+ if (isValidElement(child)) {
136
+ const isBackdropComponent = typeof child.type === "function" && child.type.displayName === "Card.Backdrop";
137
+ if (isBackdropComponent) {
138
+ backdropFound = true;
139
+ return;
140
+ }
141
+ const hasChildren = child.props && typeof child.props === "object" && "children" in child.props;
142
+ if (hasChildren) {
143
+ const childChildren = child.props.children;
144
+ if (childChildren !== void 0 && childChildren !== null) {
145
+ searchForBackdrop(childChildren);
146
+ }
147
+ }
148
+ }
149
+ });
150
+ };
151
+ searchForBackdrop(children);
152
+ return backdropFound;
153
+ };
154
+ var isInteractive = (children, asChild, props) => {
155
+ const hasMouseEventHandlers = MOUSE_EVENTS.some((event) => event in props);
156
+ if (hasMouseEventHandlers) {
157
+ return true;
158
+ }
159
+ if (!asChild) {
160
+ return false;
161
+ }
162
+ const child = Children.only(children);
163
+ if (!isValidElement(child)) {
164
+ return false;
165
+ }
166
+ const interactiveElements = ["a", "button"];
167
+ const isInteractiveElement = typeof child.type === "string" && interactiveElements.includes(child.type);
168
+ if (isInteractiveElement) {
169
+ return true;
170
+ }
171
+ const childProps = child.props;
172
+ const hasChildEventHandlers = MOUSE_EVENTS.some((event) => event in childProps);
173
+ return hasChildEventHandlers;
174
+ };
175
+
176
+ // src/card/Card.tsx
177
+ import { jsx as jsx2 } from "react/jsx-runtime";
178
+ var Card = ({
179
+ children,
180
+ design = "filled",
181
+ intent = "surface",
182
+ inset = false,
183
+ asChild,
184
+ className,
185
+ ref,
186
+ ...props
187
+ }) => {
188
+ const Component = asChild ? Slot : "div";
189
+ const backdropDetected = hasBackdrop(children);
190
+ const interactiveDetected = isInteractive(children, asChild, props);
191
+ return /* @__PURE__ */ jsx2(
192
+ CardContext.Provider,
193
+ {
194
+ value: {
195
+ design,
196
+ intent,
197
+ hasBackdrop: backdropDetected,
198
+ inset,
199
+ isInteractive: interactiveDetected
200
+ },
201
+ children: /* @__PURE__ */ jsx2(
202
+ Component,
203
+ {
204
+ "data-spark-component": "card",
205
+ "data-interactive": interactiveDetected,
206
+ ref,
207
+ className: cardStyles({
208
+ className,
209
+ design,
210
+ intent,
211
+ hasBackdrop: backdropDetected
212
+ }),
213
+ ...props,
214
+ children
215
+ }
216
+ )
217
+ }
218
+ );
219
+ };
220
+ Card.displayName = "Card";
221
+
222
+ // src/card/Content.styles.tsx
223
+ import { makeVariants as makeVariants3, tw as tw2 } from "@spark-ui/internal-utils";
224
+ import { cva as cva3 } from "class-variance-authority";
225
+ var contentStyles = cva3(
226
+ [
227
+ "relative h-full default:rounded-lg w-full focus-visible:u-outline",
228
+ "default:transition-colors default:duration-200 ease-linear"
229
+ ],
230
+ {
231
+ variants: {
232
+ inset: {
233
+ false: ["default:p-lg"]
234
+ },
235
+ design: {
236
+ filled: [],
237
+ outlined: [
238
+ "default:bg-surface group-focus:bg-surface-hovered group-not-disabled:group-data-[interactive=true]:group-hover:bg-surface-hovered"
239
+ ],
240
+ tinted: []
241
+ },
242
+ hasBackdrop: {
243
+ true: ["rounded-t-[16px_8px] "]
244
+ },
245
+ intent: makeVariants3({
246
+ main: [],
247
+ support: [],
248
+ accent: [],
249
+ basic: [],
250
+ success: [],
251
+ alert: [],
252
+ danger: [],
253
+ info: [],
254
+ neutral: [],
255
+ surface: [],
256
+ surfaceInverse: []
257
+ })
258
+ },
259
+ compoundVariants: [
260
+ // FILLED
261
+ {
262
+ intent: "main",
263
+ design: "filled",
264
+ class: tw2([
265
+ "bg-main text-on-main group-focus:bg-main-hovered",
266
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-main-hovered"
267
+ ])
268
+ },
269
+ {
270
+ intent: "support",
271
+ design: "filled",
272
+ class: tw2([
273
+ "bg-support text-on-support group-focus:bg-support-hovered",
274
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-support-hovered"
275
+ ])
276
+ },
277
+ {
278
+ intent: "accent",
279
+ design: "filled",
280
+ class: tw2([
281
+ "bg-accent text-on-accent group-focus:bg-accent-hovered",
282
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-accent-hovered"
283
+ ])
284
+ },
285
+ {
286
+ intent: "basic",
287
+ design: "filled",
288
+ class: tw2([
289
+ "bg-basic text-on-basic group-focus:bg-basic-hovered",
290
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-basic-hovered"
291
+ ])
292
+ },
293
+ {
294
+ intent: "success",
295
+ design: "filled",
296
+ class: tw2([
297
+ "bg-success text-on-success group-focus:bg-success-hovered",
298
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-success-hovered"
299
+ ])
300
+ },
301
+ {
302
+ intent: "alert",
303
+ design: "filled",
304
+ class: tw2([
305
+ "bg-alert text-on-alert group-focus:bg-alert-hovered",
306
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-alert-hovered"
307
+ ])
308
+ },
309
+ {
310
+ intent: "danger",
311
+ design: "filled",
312
+ class: tw2([
313
+ "text-on-error bg-error group-focus:bg-error-hovered",
314
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-error-hovered"
315
+ ])
316
+ },
317
+ {
318
+ intent: "info",
319
+ design: "filled",
320
+ class: tw2([
321
+ "text-on-error bg-info group-focus:bg-info-hovered",
322
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-info-hovered"
323
+ ])
324
+ },
325
+ {
326
+ intent: "neutral",
327
+ design: "filled",
328
+ class: tw2([
329
+ "bg-neutral text-on-neutral group-focus:bg-neutral-hovered",
330
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-neutral-hovered"
331
+ ])
332
+ },
333
+ {
334
+ intent: "surface",
335
+ design: "filled",
336
+ class: tw2([
337
+ "bg-surface text-on-surface group-focus:bg-surface-hovered",
338
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-surface-hovered"
339
+ ])
340
+ },
341
+ // OUTLINED
342
+ /**
343
+ * Outlined styles are handled by the Card component (parent)
344
+ */
345
+ // TINTED
346
+ {
347
+ intent: "main",
348
+ design: "tinted",
349
+ class: tw2([
350
+ "bg-main-container text-on-main-container group-focus:bg-main-container-hovered",
351
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-main-container-hovered"
352
+ ])
353
+ },
354
+ {
355
+ intent: "support",
356
+ design: "tinted",
357
+ class: tw2([
358
+ "bg-support-container text-on-support-container group-focus:bg-support-container-hovered",
359
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-support-container-hovered"
360
+ ])
361
+ },
362
+ {
363
+ intent: "accent",
364
+ design: "tinted",
365
+ class: tw2([
366
+ "bg-accent-container text-on-accent-container group-focus:bg-accent-container-hovered",
367
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-accent-container-hovered"
368
+ ])
369
+ },
370
+ {
371
+ intent: "basic",
372
+ design: "tinted",
373
+ class: tw2([
374
+ "bg-basic-container text-on-basic-container group-focus:bg-basic-container-hovered"
375
+ ])
376
+ },
377
+ {
378
+ intent: "success",
379
+ design: "tinted",
380
+ class: tw2([
381
+ "bg-success-container text-on-success-container group-focus:bg-success-container-hovered",
382
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-success-container-hovered"
383
+ ])
384
+ },
385
+ {
386
+ intent: "alert",
387
+ design: "tinted",
388
+ class: tw2([
389
+ "bg-alert-container text-on-alert-container group-focus:bg-alert-container-hovered",
390
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-alert-container-hovered"
391
+ ])
392
+ },
393
+ {
394
+ intent: "danger",
395
+ design: "tinted",
396
+ class: tw2([
397
+ "bg-error-container text-on-error-container group-focus:bg-error-container-hovered",
398
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-error-container-hovered"
399
+ ])
400
+ },
401
+ {
402
+ intent: "info",
403
+ design: "tinted",
404
+ class: tw2([
405
+ "bg-info-container text-on-info-container group-focus:bg-info-container-hovered",
406
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-info-container-hovered"
407
+ ])
408
+ },
409
+ {
410
+ intent: "neutral",
411
+ design: "tinted",
412
+ class: tw2([
413
+ "bg-neutral-container text-on-neutral-container group-focus:bg-neutral-container-hovered",
414
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-neutral-container-hovered"
415
+ ])
416
+ },
417
+ {
418
+ intent: "surface",
419
+ design: "tinted",
420
+ class: tw2([
421
+ "bg-surface text-on-surface group-focus:bg-surface-hovered",
422
+ "group-not-disabled:group-data-[interactive=true]:group-hover:bg-surface-hovered"
423
+ ])
424
+ }
425
+ ],
426
+ defaultVariants: {
427
+ design: "filled",
428
+ intent: "surface",
429
+ inset: false,
430
+ hasBackdrop: true
431
+ }
432
+ }
433
+ );
434
+
435
+ // src/card/Content.tsx
436
+ import { jsx as jsx3 } from "react/jsx-runtime";
437
+ var Content = ({ children, inset, asChild, className, ref, ...props }) => {
438
+ const Component = asChild ? Slot : "div";
439
+ const { design, intent, hasBackdrop: hasBackdrop2 } = useCardContext();
440
+ return /* @__PURE__ */ jsx3(
441
+ Component,
442
+ {
443
+ "data-spark-component": "card-content",
444
+ ref,
445
+ className: contentStyles({
446
+ className,
447
+ design,
448
+ intent,
449
+ inset,
450
+ hasBackdrop: hasBackdrop2
451
+ }),
452
+ ...props,
453
+ children
454
+ }
455
+ );
456
+ };
457
+ Content.displayName = "Content";
458
+
459
+ // src/card/index.ts
460
+ var Card2 = Object.assign(Card, {
461
+ Content,
462
+ Backdrop
463
+ });
464
+ Card2.displayName = "Card";
465
+ Content.displayName = "Card.Content";
466
+ Backdrop.displayName = "Card.Backdrop";
467
+ export {
468
+ Card2 as Card
469
+ };
470
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/card/Backdrop.tsx","../../src/card/Card.styles.tsx","../../src/card/context.tsx","../../src/card/utils.ts","../../src/card/Card.tsx","../../src/card/Content.styles.tsx","../../src/card/Content.tsx","../../src/card/index.ts"],"sourcesContent":["import { makeVariants } from '@spark-ui/internal-utils'\nimport { cva, VariantProps } from 'class-variance-authority'\n\nexport const backdropStyles = cva(\n [\n 'default:bg-surface default:bg-gradient-to-r absolute inset-x-0 top-0',\n 'h-sz-16',\n 'default:rounded-t-lg',\n 'bg-[length:200%_100%]',\n ],\n {\n variants: {\n animation: {\n none: '',\n slideRight: 'animate-slide-bg-right',\n },\n intent: makeVariants<\n 'intent',\n [\n 'main',\n 'support',\n 'accent',\n 'basic',\n 'success',\n 'alert',\n 'danger',\n 'info',\n 'neutral',\n 'surface',\n 'surfaceInverse',\n ]\n >({\n main: ['default:from-main/dim-4 default:via-main/dim-2 default:to-main/dim-4'],\n support: ['default:from-support/dim-4 default:via-support/dim-2 default:to-support/dim-4'],\n accent: ['default:from-accent/dim-4 default:via-accent/dim-2 default:to-accent/dim-4'],\n basic: ['default:from-basic/dim-4 default:via-basic/dim-2 default:to-basic/dim-4'],\n success: ['default:from-success/dim-4 default:via-success/dim-2 default:to-success/dim-4'],\n alert: ['default:from-alert/dim-4 default:via-alert/dim-2 default:to-alert/dim-4'],\n danger: ['default:from-error/dim-4 default:via-error/dim-2 default:to-error/dim-4'],\n info: ['default:from-info/dim-4 default:via-info/dim-2 default:to-info/dim-4'],\n neutral: ['default:from-neutral/dim-4 default:via-neutral/dim-2 default:to-neutral/dim-4'],\n surface: ['default:from-outline/dim-4 default:via-outline/dim-2 default:to-outline/dim-4'],\n surfaceInverse: [\n 'default:from-surface/dim-4 default:via-surface/dim-2 default:to-surface/dim-4',\n ],\n }),\n },\n defaultVariants: {\n intent: 'main',\n animation: 'none',\n },\n }\n)\n\nexport type BackdropStylesProps = VariantProps<typeof backdropStyles>\n\ninterface BackdropProps extends BackdropStylesProps {\n className?: string\n}\n\nexport const Backdrop = ({ intent = 'main', animation = 'none', ...props }: BackdropProps) => {\n return <div className={backdropStyles({ intent, animation })} {...props} />\n}\n\nBackdrop.displayName = 'Card.Backdrop'\n","import { makeVariants, tw } from '@spark-ui/internal-utils'\nimport { cva, VariantProps } from 'class-variance-authority'\n\nexport const cardStyles = cva(\n [\n 'group relative bg-clip-padding default:rounded-lg focus-visible:u-outline',\n 'disabled:opacity-dim-3 disabled:cursor-not-allowed',\n ],\n {\n variants: {\n design: {\n filled: [],\n outlined: ['border-sm'],\n tinted: [],\n },\n hasBackdrop: {\n true: ['pt-md'],\n },\n /**\n * Color scheme of the button.\n */\n intent: makeVariants<\n 'intent',\n [\n 'main',\n 'support',\n 'accent',\n 'basic',\n 'success',\n 'alert',\n 'danger',\n 'info',\n 'neutral',\n 'surface',\n 'surfaceInverse',\n ]\n >({\n main: [],\n support: [],\n accent: [],\n basic: [],\n success: [],\n alert: [],\n danger: [],\n info: [],\n neutral: [],\n surface: [],\n surfaceInverse: [],\n }),\n },\n compoundVariants: [\n // OUTLINED\n { intent: 'main', design: 'outlined', class: tw(['border-main']) },\n { intent: 'support', design: 'outlined', class: tw(['border-support']) },\n { intent: 'accent', design: 'outlined', class: tw(['border-accent']) },\n { intent: 'basic', design: 'outlined', class: tw(['border-basic']) },\n { intent: 'success', design: 'outlined', class: tw(['border-success']) },\n { intent: 'alert', design: 'outlined', class: tw(['border-alert']) },\n { intent: 'danger', design: 'outlined', class: tw(['border-error']) },\n { intent: 'info', design: 'outlined', class: tw(['border-info']) },\n { intent: 'neutral', design: 'outlined', class: tw(['border-neutral']) },\n { intent: 'surface', design: 'outlined', class: tw(['border-outline']) },\n ],\n defaultVariants: {\n design: 'filled',\n intent: 'surface',\n },\n }\n)\n\nexport type CardStylesProps = VariantProps<typeof cardStyles>\n","import { createContext, useContext } from 'react'\n\nimport type { CardStylesProps } from './Card.styles'\n\nexport interface CardContextValue {\n design: CardStylesProps['design']\n intent: CardStylesProps['intent']\n hasBackdrop: boolean\n inset: boolean\n isInteractive: boolean\n}\n\nconst CardContext = createContext<CardContextValue | undefined>(undefined)\n\nexport const useCardContext = () => {\n const context = useContext(CardContext)\n if (!context) {\n throw new Error('useCardContext must be used within a Card component')\n }\n\n return context\n}\n\nexport { CardContext }\n","import { Children, isValidElement, ReactNode } from 'react'\n\nconst MOUSE_EVENTS = [\n 'onClick',\n 'onMouseDown',\n 'onMouseUp',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseMove',\n 'onMouseOver',\n 'onMouseOut',\n 'onDoubleClick',\n 'onContextMenu',\n] as const\n\nexport const hasBackdrop = (children: ReactNode): boolean => {\n let backdropFound = false\n\n const searchForBackdrop = (node: ReactNode): void => {\n if (backdropFound) return\n\n Children.forEach(node, child => {\n if (backdropFound) return\n\n if (isValidElement(child)) {\n const isBackdropComponent =\n typeof child.type === 'function' &&\n (child.type as { displayName?: string }).displayName === 'Card.Backdrop'\n\n if (isBackdropComponent) {\n backdropFound = true\n\n return\n }\n\n const hasChildren =\n child.props && typeof child.props === 'object' && 'children' in child.props\n\n if (hasChildren) {\n const childChildren = (child.props as { children: ReactNode }).children\n if (childChildren !== undefined && childChildren !== null) {\n searchForBackdrop(childChildren)\n }\n }\n }\n })\n }\n\n searchForBackdrop(children)\n\n return backdropFound\n}\n\nexport const isInteractive = (\n children: ReactNode,\n asChild: boolean | undefined,\n props: Record<string, any>\n): boolean => {\n const hasMouseEventHandlers = MOUSE_EVENTS.some(event => event in props)\n\n if (hasMouseEventHandlers) {\n return true\n }\n\n if (!asChild) {\n return false\n }\n\n const child = Children.only(children)\n\n if (!isValidElement(child)) {\n return false\n }\n\n const interactiveElements = ['a', 'button']\n const isInteractiveElement =\n typeof child.type === 'string' && interactiveElements.includes(child.type)\n\n if (isInteractiveElement) {\n return true\n }\n\n const childProps = child.props as Record<string, any>\n const hasChildEventHandlers = MOUSE_EVENTS.some(event => event in childProps)\n\n return hasChildEventHandlers\n}\n","import { ComponentProps } from 'react'\n\nimport { Slot } from '../slot'\nimport { cardStyles, type CardStylesProps } from './Card.styles'\nimport { CardContext } from './context'\nimport { hasBackdrop, isInteractive } from './utils'\n\nexport interface CardProps extends ComponentProps<'div'>, CardStylesProps {\n /**\n * Change the component to the HTML tag or custom component of the only child.\n */\n asChild?: boolean\n /**\n * Whether the card should have an inset padding.\n */\n inset?: boolean\n}\n\nexport const Card = ({\n children,\n design = 'filled',\n intent = 'surface',\n inset = false,\n asChild,\n className,\n ref,\n ...props\n}: CardProps) => {\n const Component = asChild ? Slot : 'div'\n const backdropDetected = hasBackdrop(children)\n const interactiveDetected = isInteractive(children, asChild, props)\n\n return (\n <CardContext.Provider\n value={{\n design,\n intent,\n hasBackdrop: backdropDetected,\n inset,\n isInteractive: interactiveDetected,\n }}\n >\n <Component\n data-spark-component=\"card\"\n data-interactive={interactiveDetected}\n ref={ref}\n className={cardStyles({\n className,\n design,\n intent,\n hasBackdrop: backdropDetected,\n })}\n {...props}\n >\n {children}\n </Component>\n </CardContext.Provider>\n )\n}\n\nCard.displayName = 'Card'\n","import { makeVariants, tw } from '@spark-ui/internal-utils'\nimport { cva, VariantProps } from 'class-variance-authority'\n\nexport const contentStyles = cva(\n [\n 'relative h-full default:rounded-lg w-full focus-visible:u-outline',\n 'default:transition-colors default:duration-200 ease-linear',\n ],\n {\n variants: {\n inset: {\n false: ['default:p-lg'],\n },\n design: {\n filled: [],\n outlined: [\n 'default:bg-surface group-focus:bg-surface-hovered group-not-disabled:group-data-[interactive=true]:group-hover:bg-surface-hovered',\n ],\n tinted: [],\n },\n hasBackdrop: {\n true: ['rounded-t-[16px_8px] '],\n },\n intent: makeVariants<\n 'intent',\n [\n 'main',\n 'support',\n 'accent',\n 'basic',\n 'success',\n 'alert',\n 'danger',\n 'info',\n 'neutral',\n 'surface',\n 'surfaceInverse',\n ]\n >({\n main: [],\n support: [],\n accent: [],\n basic: [],\n success: [],\n alert: [],\n danger: [],\n info: [],\n neutral: [],\n surface: [],\n surfaceInverse: [],\n }),\n },\n compoundVariants: [\n // FILLED\n {\n intent: 'main',\n design: 'filled',\n class: tw([\n 'bg-main text-on-main group-focus:bg-main-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-main-hovered',\n ]),\n },\n {\n intent: 'support',\n design: 'filled',\n class: tw([\n 'bg-support text-on-support group-focus:bg-support-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-support-hovered',\n ]),\n },\n {\n intent: 'accent',\n design: 'filled',\n class: tw([\n 'bg-accent text-on-accent group-focus:bg-accent-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-accent-hovered',\n ]),\n },\n {\n intent: 'basic',\n design: 'filled',\n class: tw([\n 'bg-basic text-on-basic group-focus:bg-basic-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-basic-hovered',\n ]),\n },\n {\n intent: 'success',\n design: 'filled',\n class: tw([\n 'bg-success text-on-success group-focus:bg-success-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-success-hovered',\n ]),\n },\n {\n intent: 'alert',\n design: 'filled',\n class: tw([\n 'bg-alert text-on-alert group-focus:bg-alert-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-alert-hovered',\n ]),\n },\n {\n intent: 'danger',\n design: 'filled',\n class: tw([\n 'text-on-error bg-error group-focus:bg-error-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-error-hovered',\n ]),\n },\n {\n intent: 'info',\n design: 'filled',\n class: tw([\n 'text-on-error bg-info group-focus:bg-info-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-info-hovered',\n ]),\n },\n {\n intent: 'neutral',\n design: 'filled',\n class: tw([\n 'bg-neutral text-on-neutral group-focus:bg-neutral-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-neutral-hovered',\n ]),\n },\n {\n intent: 'surface',\n design: 'filled',\n class: tw([\n 'bg-surface text-on-surface group-focus:bg-surface-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-surface-hovered',\n ]),\n },\n // OUTLINED\n /**\n * Outlined styles are handled by the Card component (parent)\n */\n // TINTED\n {\n intent: 'main',\n design: 'tinted',\n class: tw([\n 'bg-main-container text-on-main-container group-focus:bg-main-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-main-container-hovered',\n ]),\n },\n {\n intent: 'support',\n design: 'tinted',\n class: tw([\n 'bg-support-container text-on-support-container group-focus:bg-support-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-support-container-hovered',\n ]),\n },\n {\n intent: 'accent',\n design: 'tinted',\n class: tw([\n 'bg-accent-container text-on-accent-container group-focus:bg-accent-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-accent-container-hovered',\n ]),\n },\n {\n intent: 'basic',\n design: 'tinted',\n class: tw([\n 'bg-basic-container text-on-basic-container group-focus:bg-basic-container-hovered',\n ]),\n },\n {\n intent: 'success',\n design: 'tinted',\n class: tw([\n 'bg-success-container text-on-success-container group-focus:bg-success-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-success-container-hovered',\n ]),\n },\n {\n intent: 'alert',\n design: 'tinted',\n class: tw([\n 'bg-alert-container text-on-alert-container group-focus:bg-alert-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-alert-container-hovered',\n ]),\n },\n {\n intent: 'danger',\n design: 'tinted',\n class: tw([\n 'bg-error-container text-on-error-container group-focus:bg-error-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-error-container-hovered',\n ]),\n },\n {\n intent: 'info',\n design: 'tinted',\n class: tw([\n 'bg-info-container text-on-info-container group-focus:bg-info-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-info-container-hovered',\n ]),\n },\n {\n intent: 'neutral',\n design: 'tinted',\n class: tw([\n 'bg-neutral-container text-on-neutral-container group-focus:bg-neutral-container-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-neutral-container-hovered',\n ]),\n },\n {\n intent: 'surface',\n design: 'tinted',\n class: tw([\n 'bg-surface text-on-surface group-focus:bg-surface-hovered',\n 'group-not-disabled:group-data-[interactive=true]:group-hover:bg-surface-hovered',\n ]),\n },\n ],\n defaultVariants: {\n design: 'filled',\n intent: 'surface',\n inset: false,\n hasBackdrop: true,\n },\n }\n)\n\nexport type ContentStylesProps = VariantProps<typeof contentStyles>\n","import { ComponentProps } from 'react'\n\nimport { Slot } from '../slot'\nimport { contentStyles } from './Content.styles'\nimport { useCardContext } from './context'\n\nexport interface ContentProps extends ComponentProps<'div'> {\n /**\n * Change the component to the HTML tag or custom component of the only child.\n */\n asChild?: boolean\n /**\n * Whether the card should have an inset padding.\n */\n inset?: boolean\n}\n\nexport const Content = ({ children, inset, asChild, className, ref, ...props }: ContentProps) => {\n const Component = asChild ? Slot : 'div'\n const { design, intent, hasBackdrop } = useCardContext()\n\n return (\n <Component\n data-spark-component=\"card-content\"\n ref={ref}\n className={contentStyles({\n className,\n design,\n intent,\n inset,\n hasBackdrop,\n })}\n {...props}\n >\n {children}\n </Component>\n )\n}\n\nContent.displayName = 'Content'\n","import { Backdrop } from './Backdrop'\nimport { Card as Root } from './Card'\nimport { Content } from './Content'\n\nexport const Card: typeof Root & {\n Content: typeof Content\n Backdrop: typeof Backdrop\n} = Object.assign(Root, {\n Content,\n Backdrop,\n})\n\nCard.displayName = 'Card'\nContent.displayName = 'Card.Content'\nBackdrop.displayName = 'Card.Backdrop'\n\nexport { type CardProps } from './Card'\n"],"mappings":"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","names":["makeVariants","cva","jsx","makeVariants","tw","cva","jsx","hasBackdrop","Card"]}
@@ -1,11 +1,11 @@
1
1
  import {
2
2
  IconButton
3
3
  } from "../chunk-MKN2Y3W6.mjs";
4
- import "../chunk-3PTXYZYN.mjs";
5
- import "../chunk-GAK4SC2F.mjs";
6
4
  import {
7
5
  Icon
8
6
  } from "../chunk-UMUMFMFB.mjs";
7
+ import "../chunk-3PTXYZYN.mjs";
8
+ import "../chunk-GAK4SC2F.mjs";
9
9
  import "../chunk-KEGAAGJW.mjs";
10
10
  import "../chunk-6QCEPQ3U.mjs";
11
11
 
@@ -4,13 +4,13 @@ import {
4
4
  import {
5
5
  IconButton
6
6
  } from "../chunk-MKN2Y3W6.mjs";
7
+ import {
8
+ Icon
9
+ } from "../chunk-UMUMFMFB.mjs";
7
10
  import "../chunk-3PTXYZYN.mjs";
8
11
  import {
9
12
  Spinner
10
13
  } from "../chunk-GAK4SC2F.mjs";
11
- import {
12
- Icon
13
- } from "../chunk-UMUMFMFB.mjs";
14
14
  import {
15
15
  VisuallyHidden
16
16
  } from "../chunk-KEGAAGJW.mjs";
@@ -2,9 +2,9 @@ import {
2
2
  Dialog
3
3
  } from "../chunk-5VKP2RR6.mjs";
4
4
  import "../chunk-MKN2Y3W6.mjs";
5
+ import "../chunk-UMUMFMFB.mjs";
5
6
  import "../chunk-3PTXYZYN.mjs";
6
7
  import "../chunk-GAK4SC2F.mjs";
7
- import "../chunk-UMUMFMFB.mjs";
8
8
  import "../chunk-KEGAAGJW.mjs";
9
9
  import "../chunk-6QCEPQ3U.mjs";
10
10
  export {