@epilot/spark-ui 0.26.1 → 0.27.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/alert-dialog.cjs +1 -1
- package/dist/components/alert-dialog.js +1 -1
- package/dist/components/attachment.d.cts +2 -2
- package/dist/components/attachment.d.ts +2 -2
- package/dist/components/avatar.d.cts +1 -1
- package/dist/components/avatar.d.ts +1 -1
- package/dist/components/badge.cjs +10 -2
- package/dist/components/badge.cjs.map +1 -1
- package/dist/components/badge.d.cts +2 -1
- package/dist/components/badge.d.ts +2 -1
- package/dist/components/badge.js +10 -2
- package/dist/components/badge.js.map +1 -1
- package/dist/components/banner.d.cts +1 -1
- package/dist/components/banner.d.ts +1 -1
- package/dist/components/box.d.cts +1 -1
- package/dist/components/box.d.ts +1 -1
- package/dist/components/bubble.cjs +1 -1
- package/dist/components/bubble.cjs.map +1 -1
- package/dist/components/bubble.d.cts +1 -1
- package/dist/components/bubble.d.ts +1 -1
- package/dist/components/bubble.js +1 -1
- package/dist/components/bubble.js.map +1 -1
- package/dist/components/button-group.d.cts +1 -1
- package/dist/components/button-group.d.ts +1 -1
- package/dist/components/button.cjs +27 -6
- package/dist/components/button.cjs.map +1 -1
- package/dist/components/button.d.cts +8 -7
- package/dist/components/button.d.ts +8 -7
- package/dist/components/button.js +27 -6
- package/dist/components/button.js.map +1 -1
- package/dist/components/callout.d.cts +1 -1
- package/dist/components/callout.d.ts +1 -1
- package/dist/components/card.cjs +8 -4
- package/dist/components/card.cjs.map +1 -1
- package/dist/components/card.d.cts +6 -2
- package/dist/components/card.d.ts +6 -2
- package/dist/components/card.js +8 -4
- package/dist/components/card.js.map +1 -1
- package/dist/components/checkbox-group.cjs +31 -0
- package/dist/components/checkbox-group.cjs.map +1 -0
- package/dist/components/checkbox-group.d.cts +27 -0
- package/dist/components/checkbox-group.d.ts +27 -0
- package/dist/components/checkbox-group.js +28 -0
- package/dist/components/checkbox-group.js.map +1 -0
- package/dist/components/checkbox.d.cts +1 -1
- package/dist/components/checkbox.d.ts +1 -1
- package/dist/components/dialog.cjs +1 -1
- package/dist/components/dialog.js +1 -1
- package/dist/components/empty-state.d.cts +3 -3
- package/dist/components/empty-state.d.ts +3 -3
- package/dist/components/field.cjs +110 -15
- package/dist/components/field.cjs.map +1 -1
- package/dist/components/field.d.cts +16 -3
- package/dist/components/field.d.ts +16 -3
- package/dist/components/field.js +111 -17
- package/dist/components/field.js.map +1 -1
- package/dist/components/input-group.cjs +9 -9
- package/dist/components/input-group.cjs.map +1 -1
- package/dist/components/input-group.d.cts +1 -1
- package/dist/components/input-group.d.ts +1 -1
- package/dist/components/input-group.js +9 -9
- package/dist/components/input-group.js.map +1 -1
- package/dist/components/input.d.cts +1 -1
- package/dist/components/input.d.ts +1 -1
- package/dist/components/list.cjs +21 -5
- package/dist/components/list.cjs.map +1 -1
- package/dist/components/list.d.cts +13 -5
- package/dist/components/list.d.ts +13 -5
- package/dist/components/list.js +21 -5
- package/dist/components/list.js.map +1 -1
- package/dist/components/marker.cjs +1 -1
- package/dist/components/marker.cjs.map +1 -1
- package/dist/components/marker.d.cts +1 -1
- package/dist/components/marker.d.ts +1 -1
- package/dist/components/marker.js +1 -1
- package/dist/components/marker.js.map +1 -1
- package/dist/components/page-header.d.cts +1 -1
- package/dist/components/page-header.d.ts +1 -1
- package/dist/components/pill.d.cts +1 -1
- package/dist/components/pill.d.ts +1 -1
- package/dist/components/radio.cjs +6 -2
- package/dist/components/radio.cjs.map +1 -1
- package/dist/components/radio.d.cts +4 -2
- package/dist/components/radio.d.ts +4 -2
- package/dist/components/radio.js +6 -2
- package/dist/components/radio.js.map +1 -1
- package/dist/components/rating.cjs +167 -0
- package/dist/components/rating.cjs.map +1 -0
- package/dist/components/rating.d.cts +50 -0
- package/dist/components/rating.d.ts +50 -0
- package/dist/components/rating.js +162 -0
- package/dist/components/rating.js.map +1 -0
- package/dist/components/scroll-area.cjs +9 -2
- package/dist/components/scroll-area.cjs.map +1 -1
- package/dist/components/scroll-area.d.cts +1 -1
- package/dist/components/scroll-area.d.ts +1 -1
- package/dist/components/scroll-area.js +10 -3
- package/dist/components/scroll-area.js.map +1 -1
- package/dist/components/segmented-control.d.cts +1 -1
- package/dist/components/segmented-control.d.ts +1 -1
- package/dist/components/select.d.cts +1 -1
- package/dist/components/select.d.ts +1 -1
- package/dist/components/selection-item.cjs +42 -0
- package/dist/components/selection-item.cjs.map +1 -0
- package/dist/components/selection-item.d.cts +25 -0
- package/dist/components/selection-item.d.ts +25 -0
- package/dist/components/selection-item.js +39 -0
- package/dist/components/selection-item.js.map +1 -0
- package/dist/components/sheet.cjs +1 -1
- package/dist/components/sheet.js +1 -1
- package/dist/components/skeleton.cjs +1 -1
- package/dist/components/skeleton.cjs.map +1 -1
- package/dist/components/skeleton.js +1 -1
- package/dist/components/skeleton.js.map +1 -1
- package/dist/components/slider.cjs +1 -1
- package/dist/components/slider.cjs.map +1 -1
- package/dist/components/slider.js +1 -1
- package/dist/components/slider.js.map +1 -1
- package/dist/components/spinner.cjs +81 -8
- package/dist/components/spinner.cjs.map +1 -1
- package/dist/components/spinner.js +81 -8
- package/dist/components/spinner.js.map +1 -1
- package/dist/components/stepper.cjs +3 -2
- package/dist/components/stepper.cjs.map +1 -1
- package/dist/components/stepper.js +3 -2
- package/dist/components/stepper.js.map +1 -1
- package/dist/components/switch-group.cjs +32 -0
- package/dist/components/switch-group.cjs.map +1 -0
- package/dist/components/switch-group.d.cts +26 -0
- package/dist/components/switch-group.d.ts +26 -0
- package/dist/components/switch-group.js +29 -0
- package/dist/components/switch-group.js.map +1 -0
- package/dist/components/switch.d.cts +1 -1
- package/dist/components/switch.d.ts +1 -1
- package/dist/components/tabs.cjs +32 -23
- package/dist/components/tabs.cjs.map +1 -1
- package/dist/components/tabs.d.cts +5 -5
- package/dist/components/tabs.d.ts +5 -5
- package/dist/components/tabs.js +32 -23
- package/dist/components/tabs.js.map +1 -1
- package/dist/components/textarea.d.cts +1 -1
- package/dist/components/textarea.d.ts +1 -1
- package/dist/components/theme.cjs +44 -2
- package/dist/components/theme.cjs.map +1 -1
- package/dist/components/theme.d.cts +4 -2
- package/dist/components/theme.d.ts +4 -2
- package/dist/components/theme.js +44 -2
- package/dist/components/theme.js.map +1 -1
- package/dist/components/toast.cjs +1 -1
- package/dist/components/toast.js +1 -1
- package/dist/components/toggle-group.d.cts +1 -1
- package/dist/components/toggle-group.d.ts +1 -1
- package/dist/components/toggle.d.cts +2 -2
- package/dist/components/toggle.d.ts +2 -2
- package/dist/lib/accent-theme.d.cts +1 -1
- package/dist/lib/accent-theme.d.ts +1 -1
- package/dist/lib/container-chrome.cjs +4 -4
- package/dist/lib/container-chrome.cjs.map +1 -1
- package/dist/lib/container-chrome.d.cts +1 -1
- package/dist/lib/container-chrome.d.ts +1 -1
- package/dist/lib/container-chrome.js +4 -4
- package/dist/lib/container-chrome.js.map +1 -1
- package/dist/lib/input-box-variants.cjs +8 -8
- package/dist/lib/input-box-variants.cjs.map +1 -1
- package/dist/lib/input-box-variants.d.cts +1 -1
- package/dist/lib/input-box-variants.d.ts +1 -1
- package/dist/lib/input-box-variants.js +8 -8
- package/dist/lib/input-box-variants.js.map +1 -1
- package/dist/lib/selection-list.cjs +17 -0
- package/dist/lib/selection-list.cjs.map +1 -0
- package/dist/lib/selection-list.d.cts +11 -0
- package/dist/lib/selection-list.d.ts +11 -0
- package/dist/lib/selection-list.js +15 -0
- package/dist/lib/selection-list.js.map +1 -0
- package/dist/lib/theme-types.cjs.map +1 -1
- package/dist/lib/theme-types.d.cts +2 -2
- package/dist/lib/theme-types.d.ts +2 -2
- package/dist/lib/theme-types.js.map +1 -1
- package/dist/lib/toggle-group-context.d.cts +2 -1
- package/dist/lib/toggle-group-context.d.ts +2 -1
- package/dist/styles/spark-default.css +12 -1
- package/dist/styles/theme.css +98 -0
- package/dist/{theme-types-Bn5E15-P.d.ts → theme-types-CKZzOmSa.d.cts} +11 -2
- package/dist/{theme-types-Bn5E15-P.d.cts → theme-types-CKZzOmSa.d.ts} +11 -2
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"button.js","names":["React","ButtonPrimitive"],"sources":["../../src/components/button.tsx"],"sourcesContent":["'use client'\n\nimport { Button as ButtonPrimitive } from '@base-ui/react/button'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\nimport { accentByColor } from '../lib/accent-colors'\nimport type {
|
|
1
|
+
{"version":3,"file":"button.js","names":["React","ButtonPrimitive"],"sources":["../../src/components/button.tsx"],"sourcesContent":["'use client'\n\nimport { Button as ButtonPrimitive } from '@base-ui/react/button'\nimport { cva, type VariantProps } from 'class-variance-authority'\nimport * as React from 'react'\nimport { accentByColor } from '../lib/accent-colors'\nimport type {\n SparkButtonColor,\n SparkButtonEmphasis,\n SparkStyle,\n} from '../lib/theme-types'\nimport { cn } from '../utils/cn'\nimport { useTheme } from './theme'\n\nconst buttonVariants = cva(\n 'group/button touch-target inline-flex cursor-pointer items-center justify-center gap-2 rounded-[max(var(--spark-rounded-md),var(--spark-rounded-full))] text-base font-medium whitespace-nowrap transition-colors focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 motion-reduce:transition-none [&_[data-slot=spinner]]:text-current [&_svg]:pointer-events-none [&_svg]:shrink-0',\n {\n variants: {\n variant: {\n primary:\n 'bg-(--spark-style-bg,var(--color-primary)) text-(--spark-style-fg,var(--color-primary-foreground)) hover:bg-(--spark-style-bg-hover,var(--color-primary-hover))',\n secondary:\n 'bg-gray-2 text-gray-a11 shadow-[inset_0_0_0_1px_var(--neutral-a7)] hover:bg-gray-a3',\n tertiary: 'bg-transparent text-gray-a11 hover:bg-gray-a3',\n bare: 'rounded-none! text-gray-12 outline-hidden!',\n destructive:\n 'bg-destructive-soft text-destructive-soft-foreground hover:bg-destructive-soft-hover focus-visible:ring-destructive',\n },\n color: {\n accent: '',\n primary: '',\n neutral: '',\n danger: 'focus-visible:ring-destructive',\n destructive: 'focus-visible:ring-destructive',\n },\n size: {\n small:\n 'h-9 px-3 text-sm [--spark-icon-size:16px] [&_svg:not([class*=size-])]:size-4',\n default:\n 'h-10 px-3 [--spark-icon-size:20px] [&_svg:not([class*=size-])]:size-5',\n medium:\n 'h-11 px-4 [--spark-icon-size:24px] [&_svg:not([class*=size-])]:size-6',\n 'icon-small':\n 'size-9 [--spark-icon-size:16px] [&_svg:not([class*=size-])]:size-4',\n icon: 'size-10 [--spark-icon-size:20px] [&_svg:not([class*=size-])]:size-5',\n 'icon-medium':\n 'size-11 [--spark-icon-size:24px] [&_svg:not([class*=size-])]:size-6',\n },\n },\n defaultVariants: {\n size: 'default',\n },\n },\n)\n\nconst buttonRecipe =\n 'bg-(--spark-style-bg,var(--color-primary)) text-(--spark-style-fg,var(--color-primary-foreground)) hover:bg-(--spark-style-bg-hover,var(--color-primary-hover)) shadow-[inset_0_0_0_var(--spark-style-border-width,1px)_var(--spark-style-border,transparent)]'\n\nconst mediaRecipe =\n 'bg-(--spark-button-media-bg,color-mix(in_srgb,black_50%,transparent)) text-(--spark-button-media-fg,white) shadow-none backdrop-blur-md hover:bg-(--spark-button-media-bg-hover,color-mix(in_srgb,black_65%,transparent))'\n\nexport type { SparkButtonColor, SparkButtonEmphasis }\n\nconst defaultStyleByEmphasis: Record<\n SparkButtonEmphasis,\n SparkStyle | undefined\n> = {\n primary: undefined,\n secondary: 'soft',\n tertiary: 'ghost',\n}\n\nfunction useEmphasisLook(\n emphasis: SparkButtonEmphasis | undefined,\n styleVariant: ButtonProps['styleVariant'],\n color: SparkButtonColor | undefined,\n) {\n const roles = useTheme().buttons\n if (!emphasis) return { styleVariant, color }\n const role = roles?.[emphasis]\n return {\n styleVariant:\n styleVariant ?? role?.style ?? defaultStyleByEmphasis[emphasis],\n color: color ?? role?.color,\n }\n}\n\nexport interface ButtonProps\n extends\n Omit<React.ComponentProps<typeof ButtonPrimitive>, 'ref'>,\n Omit<VariantProps<typeof buttonVariants>, 'variant' | 'color'> {\n /** `media`: translucent dark fill for actions over images; ignores `color`. */\n styleVariant?: SparkStyle | 'media'\n color?: SparkButtonColor\n /** Draws the look the enclosing `<Theme buttons>` gives this role; `styleVariant` / `color` still win. */\n emphasis?: SparkButtonEmphasis\n /**\n * @deprecated Not a `<Button>` prop and silently ignored -- use `styleVariant`\n * (`solid | soft | surface | ghost | outline`) and `color`\n * (`primary | neutral | destructive`) instead. The `variant` axis on\n * `buttonVariants` exists only for class-string callers.\n */\n variant?: never\n}\n\n// forwardRef keeps refs working for React 18 consumers (ref-as-prop is 19-only)\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n className,\n emphasis,\n styleVariant: ownStyleVariant,\n color: ownColor,\n size,\n render,\n nativeButton,\n // oxlint-disable-next-line typescript/no-deprecated -- strips deprecated back-compat prop before DOM spread\n variant: _variant,\n ...props\n },\n ref,\n) {\n const { styleVariant, color } = useEmphasisLook(\n emphasis,\n ownStyleVariant,\n ownColor,\n )\n const media = styleVariant === 'media'\n const hasLook = styleVariant !== undefined || color !== undefined\n const dataStyle = hasLook && !media ? (styleVariant ?? 'solid') : undefined\n const dataAccentColor = color && !media ? accentByColor[color] : undefined\n\n return (\n <ButtonPrimitive\n data-style={dataStyle}\n data-accent-color={dataAccentColor}\n nativeButton={nativeButton ?? render === undefined}\n render={render}\n className={cn(\n buttonVariants({ size, color: media ? undefined : color }),\n buttonRecipe,\n media && mediaRecipe,\n className,\n )}\n ref={ref}\n {...props}\n />\n )\n})\n\nButton.displayName = 'Button'\n\nexport { Button, buttonVariants }\n"],"mappings":";;;;;;;;;;AAcA,MAAM,iBAAiB,IACrB,+fACA;CACE,UAAU;EACR,SAAS;GACP,SACE;GACF,WACE;GACF,UAAU;GACV,MAAM;GACN,aACE;EACJ;EACA,OAAO;GACL,QAAQ;GACR,SAAS;GACT,SAAS;GACT,QAAQ;GACR,aAAa;EACf;EACA,MAAM;GACJ,OACE;GACF,SACE;GACF,QACE;GACF,cACE;GACF,MAAM;GACN,eACE;EACJ;CACF;CACA,iBAAiB,EACf,MAAM,UACR;AACF,CACF;AAEA,MAAM,eACJ;AAEF,MAAM,cACJ;AAIF,MAAM,yBAGF;CACF,SAAS,KAAA;CACT,WAAW;CACX,UAAU;AACZ;AAEA,SAAS,gBACP,UACA,cACA,OACA;CACA,MAAM,QAAQ,SAAS,EAAE;CACzB,IAAI,CAAC,UAAU,OAAO;EAAE;EAAc;CAAM;CAC5C,MAAM,OAAO,QAAQ;CACrB,OAAO;EACL,cACE,gBAAgB,MAAM,SAAS,uBAAuB;EACxD,OAAO,SAAS,MAAM;CACxB;AACF;AAqBA,MAAM,SAASA,QAAM,WAA2C,SAAS,OACvE,EACE,WACA,UACA,cAAc,iBACd,OAAO,UACP,MACA,QACA,cAEA,SAAS,UACT,GAAG,SAEL,KACA;CACA,MAAM,EAAE,cAAc,UAAU,gBAC9B,UACA,iBACA,QACF;CACA,MAAM,QAAQ,iBAAiB;CAK/B,OACE,oBAACC,UAAD;EACE,eANY,iBAAiB,KAAA,KAAa,UAAU,KAAA,MAC3B,CAAC,QAAS,gBAAgB,UAAW,KAAA;EAM9D,qBALoB,SAAS,CAAC,QAAQ,cAAc,SAAS,KAAA;EAM7D,cAAc,gBAAgB,WAAW,KAAA;EACjC;EACR,WAAW,GACT,eAAe;GAAE;GAAM,OAAO,QAAQ,KAAA,IAAY;EAAM,CAAC,GACzD,cACA,SAAS,aACT,SACF;EACK;EACL,GAAI;CACL,CAAA;AAEL,CAAC;AAED,OAAO,cAAc"}
|
|
@@ -8,7 +8,7 @@ import { SparkIcon } from "@epilot/spark-icons";
|
|
|
8
8
|
//#region src/components/callout.d.ts
|
|
9
9
|
type CalloutVariant = 'error' | 'info' | 'neutral' | 'success' | 'warning';
|
|
10
10
|
declare const calloutVariants: (props?: ({
|
|
11
|
-
variant?: "
|
|
11
|
+
variant?: "neutral" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
12
12
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
13
13
|
interface CalloutProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof calloutVariants> {
|
|
14
14
|
/** Overrides the variant's default icon; the variant's color is kept. `false` renders no icon. */
|
|
@@ -8,7 +8,7 @@ import { VariantProps } from "class-variance-authority";
|
|
|
8
8
|
//#region src/components/callout.d.ts
|
|
9
9
|
type CalloutVariant = 'error' | 'info' | 'neutral' | 'success' | 'warning';
|
|
10
10
|
declare const calloutVariants: (props?: ({
|
|
11
|
-
variant?: "
|
|
11
|
+
variant?: "neutral" | "success" | "warning" | "error" | "info" | null | undefined;
|
|
12
12
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
13
13
|
interface CalloutProps extends React$1.HTMLAttributes<HTMLDivElement>, VariantProps<typeof calloutVariants> {
|
|
14
14
|
/** Overrides the variant's default icon; the variant's color is kept. `false` renders no icon. */
|
package/dist/components/card.cjs
CHANGED
|
@@ -50,10 +50,14 @@ const CardIcon = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__
|
|
|
50
50
|
...props
|
|
51
51
|
}));
|
|
52
52
|
CardIcon.displayName = "CardIcon";
|
|
53
|
-
const CardTitle = react.forwardRef(({ className, ...props }, ref) =>
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
53
|
+
const CardTitle = react.forwardRef(({ className, render, ...props }, ref) => (0, _base_ui_react_use_render.useRender)({
|
|
54
|
+
defaultTagName: "h3",
|
|
55
|
+
render,
|
|
56
|
+
props: {
|
|
57
|
+
className: (0, cn.cn)("text-base leading-5 font-medium text-(--spark-card-fg,var(--neutral-a12))", className),
|
|
58
|
+
ref,
|
|
59
|
+
...props
|
|
60
|
+
}
|
|
57
61
|
}));
|
|
58
62
|
CardTitle.displayName = "CardTitle";
|
|
59
63
|
const CardDescription = react.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.cjs","names":["containerChrome","containerPaddingX","React","radiusClasses","containerInteractiveClasses"],"sources":["../../src/components/card.tsx"],"sourcesContent":["import { useRender } from '@base-ui/react/use-render'\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport {\n containerChrome,\n containerElevated,\n containerInteractiveClasses,\n containerPaddingX,\n radiusClasses,\n type ContainerRadius,\n} from '../lib/container-chrome'\nimport type { SparkCardColor, SparkCardVariant } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\n\ntype CardRadius = ContainerRadius\n\nconst cardVariants = cva('relative flex w-full flex-col gap-1 py-3', {\n variants: {\n variant: {\n ambient: cn(containerChrome.ambient, containerPaddingX.ambient),\n soft: cn(containerChrome.soft, containerPaddingX.soft),\n surface: cn(containerChrome.surface, containerPaddingX.surface),\n outline: cn(containerChrome.outline, containerPaddingX.outline),\n ghost: cn(containerChrome.ghost, containerPaddingX.ghost),\n solid: cn(containerChrome.solid, containerPaddingX.solid),\n },\n },\n defaultVariants: {\n variant: 'ambient',\n },\n})\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Container chrome scoped to this card — NOT the ambient `data-style` knob\n * (that drives controls and would cascade into the card's content). Unset →\n * follows the app-level `[data-card-variant]` knob (default soft-neutral).\n */\n variant?: SparkCardVariant\n /** Chrome palette. `neutral` (default) tracks the app neutral; `accent` tints with the brand accent. */\n color?: SparkCardColor\n /** Corner radius, as a named step. Unset → `lg`, today's fixed behaviour. */\n radius?: CardRadius\n /**\n * Lift the card off an arbitrary backdrop (a photo, not the flat app canvas):\n * an opaque `--spark-elevated` fill plus a shadow, so no `variant`/`color`\n * combination — including a translucent one like `soft` — can bleed it through.\n */\n elevated?: boolean\n /**\n * Base UI polymorphism. Pass `<a href/>` or `<button/>` to make the whole\n * card interactive (hover tint, focus ring, disabled styles). Omit → static.\n */\n render?: useRender.RenderProp\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n { className, variant, color, radius = 'lg', elevated, render, ...props },\n ref,\n ) => {\n const interactive = render != null\n const resolved = variant ?? 'ambient'\n return useRender({\n defaultTagName: 'div',\n render,\n props: {\n 'data-slot': 'card',\n 'data-variant': variant,\n 'data-card-color': color,\n 'data-elevated': elevated ? '' : undefined,\n className: cn(\n cardVariants({ variant }),\n radiusClasses[radius],\n elevated && containerElevated,\n interactive && containerInteractiveClasses(resolved, elevated),\n className,\n ),\n ref,\n ...props,\n },\n })\n },\n)\n\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn('flex items-center gap-4', className)}\n ref={ref}\n {...props}\n />\n))\n\nCardHeader.displayName = 'CardHeader'\n\nconst CardIcon = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex shrink-0 items-center justify-center text-(--spark-card-icon,var(--spark-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardIcon.displayName = 'CardIcon'\n\
|
|
1
|
+
{"version":3,"file":"card.cjs","names":["containerChrome","containerPaddingX","React","radiusClasses","containerInteractiveClasses"],"sources":["../../src/components/card.tsx"],"sourcesContent":["import { useRender } from '@base-ui/react/use-render'\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport {\n containerChrome,\n containerElevated,\n containerInteractiveClasses,\n containerPaddingX,\n radiusClasses,\n type ContainerRadius,\n} from '../lib/container-chrome'\nimport type { SparkCardColor, SparkCardVariant } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\n\ntype CardRadius = ContainerRadius\n\nconst cardVariants = cva('relative flex w-full flex-col gap-1 py-3', {\n variants: {\n variant: {\n ambient: cn(containerChrome.ambient, containerPaddingX.ambient),\n soft: cn(containerChrome.soft, containerPaddingX.soft),\n surface: cn(containerChrome.surface, containerPaddingX.surface),\n outline: cn(containerChrome.outline, containerPaddingX.outline),\n ghost: cn(containerChrome.ghost, containerPaddingX.ghost),\n solid: cn(containerChrome.solid, containerPaddingX.solid),\n },\n },\n defaultVariants: {\n variant: 'ambient',\n },\n})\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Container chrome scoped to this card — NOT the ambient `data-style` knob\n * (that drives controls and would cascade into the card's content). Unset →\n * follows the app-level `[data-card-variant]` knob (default soft-neutral).\n */\n variant?: SparkCardVariant\n /** Chrome palette. `neutral` (default) tracks the app neutral; `accent` tints with the brand accent. */\n color?: SparkCardColor\n /** Corner radius, as a named step. Unset → `lg`, today's fixed behaviour. */\n radius?: CardRadius\n /**\n * Lift the card off an arbitrary backdrop (a photo, not the flat app canvas):\n * an opaque `--spark-elevated` fill plus a shadow, so no `variant`/`color`\n * combination — including a translucent one like `soft` — can bleed it through.\n */\n elevated?: boolean\n /**\n * Base UI polymorphism. Pass `<a href/>` or `<button/>` to make the whole\n * card interactive (hover tint, focus ring, disabled styles). Omit → static.\n */\n render?: useRender.RenderProp\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n { className, variant, color, radius = 'lg', elevated, render, ...props },\n ref,\n ) => {\n const interactive = render != null\n const resolved = variant ?? 'ambient'\n return useRender({\n defaultTagName: 'div',\n render,\n props: {\n 'data-slot': 'card',\n 'data-variant': variant,\n 'data-card-color': color,\n 'data-elevated': elevated ? '' : undefined,\n className: cn(\n cardVariants({ variant }),\n radiusClasses[radius],\n elevated && containerElevated,\n interactive && containerInteractiveClasses(resolved, elevated),\n className,\n ),\n ref,\n ...props,\n },\n })\n },\n)\n\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn('flex items-center gap-4', className)}\n ref={ref}\n {...props}\n />\n))\n\nCardHeader.displayName = 'CardHeader'\n\nconst CardIcon = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex shrink-0 items-center justify-center text-(--spark-card-icon,var(--spark-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardIcon.displayName = 'CardIcon'\n\ninterface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n /** Base UI polymorphism. Pass `<h2/>` etc. to change the heading level. Omit → `<h3>`. */\n render?: useRender.RenderProp\n}\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, render, ...props }, ref) =>\n useRender({\n defaultTagName: 'h3',\n render,\n props: {\n className: cn(\n 'text-base leading-5 font-medium text-(--spark-card-fg,var(--neutral-a12))',\n className,\n ),\n ref,\n ...props,\n },\n }),\n)\n\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n className={cn(\n 'text-sm leading-5 text-(--spark-card-fg-muted,var(--neutral-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div className={cn('', className)} ref={ref} {...props} />\n))\n\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex items-center justify-end gap-2 pt-2 text-(--spark-card-fg,var(--neutral-a12))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardFooter.displayName = 'CardFooter'\n\nconst CardSkeleton = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'relative flex w-full items-center gap-4 rounded-lg bg-spark-a3 p-4 opacity-80',\n className,\n )}\n ref={ref}\n {...props}\n >\n <div className=\"size-10 shrink-0 animate-pulse rounded-full bg-base-gray-soft motion-reduce:animate-none\" />\n <div className=\"flex flex-1 flex-col gap-y-2\">\n <div className=\"h-5 w-1/3 max-w-32 animate-pulse rounded-md bg-base-gray-soft motion-reduce:animate-none\" />\n <div className=\"h-4 w-1/2 max-w-48 animate-pulse rounded-md bg-base-gray-soft motion-reduce:animate-none\" />\n </div>\n </div>\n))\n\nCardSkeleton.displayName = 'CardSkeleton'\n\nexport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardIcon,\n CardSkeleton,\n CardTitle,\n}\nexport type { CardProps, CardRadius }\n"],"mappings":";;;;;;;;;;;AAgBA,MAAM,gBAAA,GAAA,yBAAA,KAAmB,4CAA4C;CACnE,UAAU,EACR,SAAS;EACP,UAAA,GAAA,GAAA,IAAYA,6BAAAA,gBAAgB,SAASC,6BAAAA,kBAAkB,OAAO;EAC9D,OAAA,GAAA,GAAA,IAASD,6BAAAA,gBAAgB,MAAMC,6BAAAA,kBAAkB,IAAI;EACrD,UAAA,GAAA,GAAA,IAAYD,6BAAAA,gBAAgB,SAASC,6BAAAA,kBAAkB,OAAO;EAC9D,UAAA,GAAA,GAAA,IAAYD,6BAAAA,gBAAgB,SAASC,6BAAAA,kBAAkB,OAAO;EAC9D,QAAA,GAAA,GAAA,IAAUD,6BAAAA,gBAAgB,OAAOC,6BAAAA,kBAAkB,KAAK;EACxD,QAAA,GAAA,GAAA,IAAUD,6BAAAA,gBAAgB,OAAOC,6BAAAA,kBAAkB,KAAK;CAC1D,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CAAC;AA0BD,MAAM,OAAOC,MAAM,YAEf,EAAE,WAAW,SAAS,OAAO,SAAS,MAAM,UAAU,QAAQ,GAAG,SACjE,QACG;CACH,MAAM,cAAc,UAAU;CAC9B,MAAM,WAAW,WAAW;CAC5B,QAAA,GAAA,0BAAA,WAAiB;EACf,gBAAgB;EAChB;EACA,OAAO;GACL,aAAa;GACb,gBAAgB;GAChB,mBAAmB;GACnB,iBAAiB,WAAW,KAAK,KAAA;GACjC,YAAA,GAAA,GAAA,IACE,aAAa,EAAE,QAAQ,CAAC,GACxBC,6BAAAA,cAAc,SACd,YAAA,kLACA,eAAeC,6BAAAA,4BAA4B,UAAU,QAAQ,GAC7D,SACF;GACA;GACA,GAAG;EACL;CACF,CAAC;AACH,CACF;AAEA,KAAK,cAAc;AAEnB,MAAM,aAAaF,MAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,GAAA,IAAc,2BAA2B,SAAS;CAC7C;CACL,GAAI;AACL,CAAA,CACF;AAED,WAAW,cAAc;AAEzB,MAAM,WAAWA,MAAM,YAGpB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,GAAA,IACE,uFACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,SAAS,cAAc;AAOvB,MAAM,YAAYA,MAAM,YACrB,EAAE,WAAW,QAAQ,GAAG,SAAS,SAAA,GAAA,0BAAA,WACtB;CACR,gBAAgB;CAChB;CACA,OAAO;EACL,YAAA,GAAA,GAAA,IACE,6EACA,SACF;EACA;EACA,GAAG;CACL;AACF,CAAC,CACL;AAEA,UAAU,cAAc;AAExB,MAAM,kBAAkBA,MAAM,YAG3B,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,KAAD;CACE,YAAA,GAAA,GAAA,IACE,qEACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,gBAAgB,cAAc;AAE9B,MAAM,cAAcA,MAAM,YAGvB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,OAAD;CAAK,YAAA,GAAA,GAAA,IAAc,IAAI,SAAS;CAAQ;CAAK,GAAI;AAAQ,CAAA,CAC1D;AAED,YAAY,cAAc;AAE1B,MAAM,aAAaA,MAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,KAAC,OAAD;CACE,YAAA,GAAA,GAAA,IACE,sFACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,WAAW,cAAc;AAEzB,MAAM,eAAeA,MAAM,YAGxB,EAAE,WAAW,GAAG,SAAS,QAC1B,iBAAA,GAAA,kBAAA,MAAC,OAAD;CACE,YAAA,GAAA,GAAA,IACE,iFACA,SACF;CACK;CACL,GAAI;WANN,CAQE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,GAC3G,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,WAAU;YAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,GAC3G,iBAAA,GAAA,kBAAA,KAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,CACxG;GACF;EACN;AAED,aAAa,cAAc"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { o as SparkCardColor, s as SparkCardVariant } from "../theme-types-CKZzOmSa.cjs";
|
|
4
4
|
import { ContainerRadius } from "../lib/container-chrome.cjs";
|
|
5
5
|
import * as React$1 from "react";
|
|
6
6
|
import { useRender } from "@base-ui/react/use-render";
|
|
@@ -33,7 +33,11 @@ interface CardProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
|
33
33
|
declare const Card: React$1.ForwardRefExoticComponent<CardProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
34
34
|
declare const CardHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
35
35
|
declare const CardIcon: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
36
|
-
|
|
36
|
+
interface CardTitleProps extends React$1.HTMLAttributes<HTMLHeadingElement> {
|
|
37
|
+
/** Base UI polymorphism. Pass `<h2/>` etc. to change the heading level. Omit → `<h3>`. */
|
|
38
|
+
render?: useRender.RenderProp;
|
|
39
|
+
}
|
|
40
|
+
declare const CardTitle: React$1.ForwardRefExoticComponent<CardTitleProps & React$1.RefAttributes<HTMLHeadingElement>>;
|
|
37
41
|
declare const CardDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
|
|
38
42
|
declare const CardContent: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
39
43
|
declare const CardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { o as SparkCardColor, s as SparkCardVariant } from "../theme-types-CKZzOmSa.js";
|
|
4
4
|
import { ContainerRadius } from "../lib/container-chrome.js";
|
|
5
5
|
import * as React$1 from "react";
|
|
6
6
|
import { useRender } from "@base-ui/react/use-render";
|
|
@@ -33,7 +33,11 @@ interface CardProps extends React$1.HTMLAttributes<HTMLDivElement> {
|
|
|
33
33
|
declare const Card: React$1.ForwardRefExoticComponent<CardProps & React$1.RefAttributes<HTMLDivElement>>;
|
|
34
34
|
declare const CardHeader: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
35
35
|
declare const CardIcon: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
36
|
-
|
|
36
|
+
interface CardTitleProps extends React$1.HTMLAttributes<HTMLHeadingElement> {
|
|
37
|
+
/** Base UI polymorphism. Pass `<h2/>` etc. to change the heading level. Omit → `<h3>`. */
|
|
38
|
+
render?: useRender.RenderProp;
|
|
39
|
+
}
|
|
40
|
+
declare const CardTitle: React$1.ForwardRefExoticComponent<CardTitleProps & React$1.RefAttributes<HTMLHeadingElement>>;
|
|
37
41
|
declare const CardDescription: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLParagraphElement> & React$1.RefAttributes<HTMLParagraphElement>>;
|
|
38
42
|
declare const CardContent: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
|
39
43
|
declare const CardFooter: React$1.ForwardRefExoticComponent<React$1.HTMLAttributes<HTMLDivElement> & React$1.RefAttributes<HTMLDivElement>>;
|
package/dist/components/card.js
CHANGED
|
@@ -47,10 +47,14 @@ const CardIcon = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE
|
|
|
47
47
|
...props
|
|
48
48
|
}));
|
|
49
49
|
CardIcon.displayName = "CardIcon";
|
|
50
|
-
const CardTitle = React$1.forwardRef(({ className, ...props }, ref) =>
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
50
|
+
const CardTitle = React$1.forwardRef(({ className, render, ...props }, ref) => useRender({
|
|
51
|
+
defaultTagName: "h3",
|
|
52
|
+
render,
|
|
53
|
+
props: {
|
|
54
|
+
className: cn("text-base leading-5 font-medium text-(--spark-card-fg,var(--neutral-a12))", className),
|
|
55
|
+
ref,
|
|
56
|
+
...props
|
|
57
|
+
}
|
|
54
58
|
}));
|
|
55
59
|
CardTitle.displayName = "CardTitle";
|
|
56
60
|
const CardDescription = React$1.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ jsx("p", {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"card.js","names":["React"],"sources":["../../src/components/card.tsx"],"sourcesContent":["import { useRender } from '@base-ui/react/use-render'\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport {\n containerChrome,\n containerElevated,\n containerInteractiveClasses,\n containerPaddingX,\n radiusClasses,\n type ContainerRadius,\n} from '../lib/container-chrome'\nimport type { SparkCardColor, SparkCardVariant } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\n\ntype CardRadius = ContainerRadius\n\nconst cardVariants = cva('relative flex w-full flex-col gap-1 py-3', {\n variants: {\n variant: {\n ambient: cn(containerChrome.ambient, containerPaddingX.ambient),\n soft: cn(containerChrome.soft, containerPaddingX.soft),\n surface: cn(containerChrome.surface, containerPaddingX.surface),\n outline: cn(containerChrome.outline, containerPaddingX.outline),\n ghost: cn(containerChrome.ghost, containerPaddingX.ghost),\n solid: cn(containerChrome.solid, containerPaddingX.solid),\n },\n },\n defaultVariants: {\n variant: 'ambient',\n },\n})\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Container chrome scoped to this card — NOT the ambient `data-style` knob\n * (that drives controls and would cascade into the card's content). Unset →\n * follows the app-level `[data-card-variant]` knob (default soft-neutral).\n */\n variant?: SparkCardVariant\n /** Chrome palette. `neutral` (default) tracks the app neutral; `accent` tints with the brand accent. */\n color?: SparkCardColor\n /** Corner radius, as a named step. Unset → `lg`, today's fixed behaviour. */\n radius?: CardRadius\n /**\n * Lift the card off an arbitrary backdrop (a photo, not the flat app canvas):\n * an opaque `--spark-elevated` fill plus a shadow, so no `variant`/`color`\n * combination — including a translucent one like `soft` — can bleed it through.\n */\n elevated?: boolean\n /**\n * Base UI polymorphism. Pass `<a href/>` or `<button/>` to make the whole\n * card interactive (hover tint, focus ring, disabled styles). Omit → static.\n */\n render?: useRender.RenderProp\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n { className, variant, color, radius = 'lg', elevated, render, ...props },\n ref,\n ) => {\n const interactive = render != null\n const resolved = variant ?? 'ambient'\n return useRender({\n defaultTagName: 'div',\n render,\n props: {\n 'data-slot': 'card',\n 'data-variant': variant,\n 'data-card-color': color,\n 'data-elevated': elevated ? '' : undefined,\n className: cn(\n cardVariants({ variant }),\n radiusClasses[radius],\n elevated && containerElevated,\n interactive && containerInteractiveClasses(resolved, elevated),\n className,\n ),\n ref,\n ...props,\n },\n })\n },\n)\n\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn('flex items-center gap-4', className)}\n ref={ref}\n {...props}\n />\n))\n\nCardHeader.displayName = 'CardHeader'\n\nconst CardIcon = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex shrink-0 items-center justify-center text-(--spark-card-icon,var(--spark-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardIcon.displayName = 'CardIcon'\n\
|
|
1
|
+
{"version":3,"file":"card.js","names":["React"],"sources":["../../src/components/card.tsx"],"sourcesContent":["import { useRender } from '@base-ui/react/use-render'\nimport { cva } from 'class-variance-authority'\nimport * as React from 'react'\nimport {\n containerChrome,\n containerElevated,\n containerInteractiveClasses,\n containerPaddingX,\n radiusClasses,\n type ContainerRadius,\n} from '../lib/container-chrome'\nimport type { SparkCardColor, SparkCardVariant } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\n\ntype CardRadius = ContainerRadius\n\nconst cardVariants = cva('relative flex w-full flex-col gap-1 py-3', {\n variants: {\n variant: {\n ambient: cn(containerChrome.ambient, containerPaddingX.ambient),\n soft: cn(containerChrome.soft, containerPaddingX.soft),\n surface: cn(containerChrome.surface, containerPaddingX.surface),\n outline: cn(containerChrome.outline, containerPaddingX.outline),\n ghost: cn(containerChrome.ghost, containerPaddingX.ghost),\n solid: cn(containerChrome.solid, containerPaddingX.solid),\n },\n },\n defaultVariants: {\n variant: 'ambient',\n },\n})\n\ninterface CardProps extends React.HTMLAttributes<HTMLDivElement> {\n /**\n * Container chrome scoped to this card — NOT the ambient `data-style` knob\n * (that drives controls and would cascade into the card's content). Unset →\n * follows the app-level `[data-card-variant]` knob (default soft-neutral).\n */\n variant?: SparkCardVariant\n /** Chrome palette. `neutral` (default) tracks the app neutral; `accent` tints with the brand accent. */\n color?: SparkCardColor\n /** Corner radius, as a named step. Unset → `lg`, today's fixed behaviour. */\n radius?: CardRadius\n /**\n * Lift the card off an arbitrary backdrop (a photo, not the flat app canvas):\n * an opaque `--spark-elevated` fill plus a shadow, so no `variant`/`color`\n * combination — including a translucent one like `soft` — can bleed it through.\n */\n elevated?: boolean\n /**\n * Base UI polymorphism. Pass `<a href/>` or `<button/>` to make the whole\n * card interactive (hover tint, focus ring, disabled styles). Omit → static.\n */\n render?: useRender.RenderProp\n}\n\nconst Card = React.forwardRef<HTMLDivElement, CardProps>(\n (\n { className, variant, color, radius = 'lg', elevated, render, ...props },\n ref,\n ) => {\n const interactive = render != null\n const resolved = variant ?? 'ambient'\n return useRender({\n defaultTagName: 'div',\n render,\n props: {\n 'data-slot': 'card',\n 'data-variant': variant,\n 'data-card-color': color,\n 'data-elevated': elevated ? '' : undefined,\n className: cn(\n cardVariants({ variant }),\n radiusClasses[radius],\n elevated && containerElevated,\n interactive && containerInteractiveClasses(resolved, elevated),\n className,\n ),\n ref,\n ...props,\n },\n })\n },\n)\n\nCard.displayName = 'Card'\n\nconst CardHeader = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn('flex items-center gap-4', className)}\n ref={ref}\n {...props}\n />\n))\n\nCardHeader.displayName = 'CardHeader'\n\nconst CardIcon = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex shrink-0 items-center justify-center text-(--spark-card-icon,var(--spark-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardIcon.displayName = 'CardIcon'\n\ninterface CardTitleProps extends React.HTMLAttributes<HTMLHeadingElement> {\n /** Base UI polymorphism. Pass `<h2/>` etc. to change the heading level. Omit → `<h3>`. */\n render?: useRender.RenderProp\n}\n\nconst CardTitle = React.forwardRef<HTMLHeadingElement, CardTitleProps>(\n ({ className, render, ...props }, ref) =>\n useRender({\n defaultTagName: 'h3',\n render,\n props: {\n className: cn(\n 'text-base leading-5 font-medium text-(--spark-card-fg,var(--neutral-a12))',\n className,\n ),\n ref,\n ...props,\n },\n }),\n)\n\nCardTitle.displayName = 'CardTitle'\n\nconst CardDescription = React.forwardRef<\n HTMLParagraphElement,\n React.HTMLAttributes<HTMLParagraphElement>\n>(({ className, ...props }, ref) => (\n <p\n className={cn(\n 'text-sm leading-5 text-(--spark-card-fg-muted,var(--neutral-a11))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardDescription.displayName = 'CardDescription'\n\nconst CardContent = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div className={cn('', className)} ref={ref} {...props} />\n))\n\nCardContent.displayName = 'CardContent'\n\nconst CardFooter = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'flex items-center justify-end gap-2 pt-2 text-(--spark-card-fg,var(--neutral-a12))',\n className,\n )}\n ref={ref}\n {...props}\n />\n))\n\nCardFooter.displayName = 'CardFooter'\n\nconst CardSkeleton = React.forwardRef<\n HTMLDivElement,\n React.HTMLAttributes<HTMLDivElement>\n>(({ className, ...props }, ref) => (\n <div\n className={cn(\n 'relative flex w-full items-center gap-4 rounded-lg bg-spark-a3 p-4 opacity-80',\n className,\n )}\n ref={ref}\n {...props}\n >\n <div className=\"size-10 shrink-0 animate-pulse rounded-full bg-base-gray-soft motion-reduce:animate-none\" />\n <div className=\"flex flex-1 flex-col gap-y-2\">\n <div className=\"h-5 w-1/3 max-w-32 animate-pulse rounded-md bg-base-gray-soft motion-reduce:animate-none\" />\n <div className=\"h-4 w-1/2 max-w-48 animate-pulse rounded-md bg-base-gray-soft motion-reduce:animate-none\" />\n </div>\n </div>\n))\n\nCardSkeleton.displayName = 'CardSkeleton'\n\nexport {\n Card,\n CardContent,\n CardDescription,\n CardFooter,\n CardHeader,\n CardIcon,\n CardSkeleton,\n CardTitle,\n}\nexport type { CardProps, CardRadius }\n"],"mappings":";;;;;;;;AAgBA,MAAM,eAAe,IAAI,4CAA4C;CACnE,UAAU,EACR,SAAS;EACP,SAAS,GAAG,gBAAgB,SAAS,kBAAkB,OAAO;EAC9D,MAAM,GAAG,gBAAgB,MAAM,kBAAkB,IAAI;EACrD,SAAS,GAAG,gBAAgB,SAAS,kBAAkB,OAAO;EAC9D,SAAS,GAAG,gBAAgB,SAAS,kBAAkB,OAAO;EAC9D,OAAO,GAAG,gBAAgB,OAAO,kBAAkB,KAAK;EACxD,OAAO,GAAG,gBAAgB,OAAO,kBAAkB,KAAK;CAC1D,EACF;CACA,iBAAiB,EACf,SAAS,UACX;AACF,CAAC;AA0BD,MAAM,OAAOA,QAAM,YAEf,EAAE,WAAW,SAAS,OAAO,SAAS,MAAM,UAAU,QAAQ,GAAG,SACjE,QACG;CACH,MAAM,cAAc,UAAU;CAC9B,MAAM,WAAW,WAAW;CAC5B,OAAO,UAAU;EACf,gBAAgB;EAChB;EACA,OAAO;GACL,aAAa;GACb,gBAAgB;GAChB,mBAAmB;GACnB,iBAAiB,WAAW,KAAK,KAAA;GACjC,WAAW,GACT,aAAa,EAAE,QAAQ,CAAC,GACxB,cAAc,SACd,YAAA,kLACA,eAAe,4BAA4B,UAAU,QAAQ,GAC7D,SACF;GACA;GACA,GAAG;EACL;CACF,CAAC;AACH,CACF;AAEA,KAAK,cAAc;AAEnB,MAAM,aAAaA,QAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,OAAD;CACE,WAAW,GAAG,2BAA2B,SAAS;CAC7C;CACL,GAAI;AACL,CAAA,CACF;AAED,WAAW,cAAc;AAEzB,MAAM,WAAWA,QAAM,YAGpB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,OAAD;CACE,WAAW,GACT,uFACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,SAAS,cAAc;AAOvB,MAAM,YAAYA,QAAM,YACrB,EAAE,WAAW,QAAQ,GAAG,SAAS,QAChC,UAAU;CACR,gBAAgB;CAChB;CACA,OAAO;EACL,WAAW,GACT,6EACA,SACF;EACA;EACA,GAAG;CACL;AACF,CAAC,CACL;AAEA,UAAU,cAAc;AAExB,MAAM,kBAAkBA,QAAM,YAG3B,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,KAAD;CACE,WAAW,GACT,qEACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,gBAAgB,cAAc;AAE9B,MAAM,cAAcA,QAAM,YAGvB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,OAAD;CAAK,WAAW,GAAG,IAAI,SAAS;CAAQ;CAAK,GAAI;AAAQ,CAAA,CAC1D;AAED,YAAY,cAAc;AAE1B,MAAM,aAAaA,QAAM,YAGtB,EAAE,WAAW,GAAG,SAAS,QAC1B,oBAAC,OAAD;CACE,WAAW,GACT,sFACA,SACF;CACK;CACL,GAAI;AACL,CAAA,CACF;AAED,WAAW,cAAc;AAEzB,MAAM,eAAeA,QAAM,YAGxB,EAAE,WAAW,GAAG,SAAS,QAC1B,qBAAC,OAAD;CACE,WAAW,GACT,iFACA,SACF;CACK;CACL,GAAI;WANN,CAQE,oBAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,GAC3G,qBAAC,OAAD;EAAK,WAAU;YAAf,CACE,oBAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,GAC3G,oBAAC,OAAD,EAAK,WAAU,2FAA4F,CAAA,CACxG;GACF;EACN;AAED,aAAa,cAAc"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const require_chunk = require("../chunk-DY84GLCh.cjs");
|
|
4
|
+
const require_lib_accent_colors = require("../lib/accent-colors.cjs");
|
|
5
|
+
const require_components_field = require("./field.cjs");
|
|
6
|
+
const require_lib_selection_list = require("../lib/selection-list.cjs");
|
|
7
|
+
let react = require("react");
|
|
8
|
+
react = require_chunk.__toESM(react);
|
|
9
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
10
|
+
let _base_ui_react_checkbox_group = require("@base-ui/react/checkbox-group");
|
|
11
|
+
let cn = require("cn");
|
|
12
|
+
//#region src/components/checkbox-group.tsx
|
|
13
|
+
function CheckboxGroup({ className, styleVariant, color, gap = 3, listStyle, style, ...props }) {
|
|
14
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_base_ui_react_checkbox_group.CheckboxGroup, {
|
|
15
|
+
"data-slot": "checkbox-group",
|
|
16
|
+
"data-style": styleVariant !== void 0 || color !== void 0 ? styleVariant ?? "solid" : void 0,
|
|
17
|
+
"data-accent-color": color ? require_lib_accent_colors.accentByColor[color] : void 0,
|
|
18
|
+
"data-list-style": listStyle,
|
|
19
|
+
"data-invalid": require_components_field.useFieldSetInvalid(),
|
|
20
|
+
className: (0, cn.cn)("grid", listStyle ? require_lib_selection_list.selectionListClasses[listStyle] : "gap-[calc(var(--spark-layout-gap)*var(--checkbox-group-gap-steps,3))]", className),
|
|
21
|
+
style: {
|
|
22
|
+
"--checkbox-group-gap-steps": gap,
|
|
23
|
+
...style
|
|
24
|
+
},
|
|
25
|
+
...props
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
//#endregion
|
|
29
|
+
exports.CheckboxGroup = CheckboxGroup;
|
|
30
|
+
|
|
31
|
+
//# sourceMappingURL=checkbox-group.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox-group.cjs","names":["CheckboxGroupPrimitive","accentByColor","useFieldSetInvalid","selectionListClasses"],"sources":["../../src/components/checkbox-group.tsx"],"sourcesContent":["import { CheckboxGroup as CheckboxGroupPrimitive } from '@base-ui/react/checkbox-group'\nimport * as React from 'react'\nimport { accentByColor } from '../lib/accent-colors'\nimport { selectionListClasses } from '../lib/selection-list'\nimport type { SparkInputStyle, SparkStyle } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\nimport type { SparkCheckboxColor } from './checkbox'\nimport { useFieldSetInvalid } from './field'\n\ntype CheckboxGroupProps = Omit<\n React.ComponentProps<typeof CheckboxGroupPrimitive>,\n 'style'\n> & {\n styleVariant?: SparkStyle\n color?: SparkCheckboxColor\n /** How many `--spark-layout-gap` units apart each checkbox sits. */\n gap?: number\n /** Shows the options as a styled list of `SelectionItem` rows; ignores `gap`. */\n listStyle?: SparkInputStyle\n // Base UI's own `style` also accepts a state-callback form; the gap-steps var below\n // needs a plain object to merge into, so narrow it to that here.\n style?: React.CSSProperties\n}\n\nfunction CheckboxGroup({\n className,\n styleVariant,\n color,\n gap = 3,\n listStyle,\n style,\n ...props\n}: CheckboxGroupProps) {\n const hasLook = styleVariant !== undefined || color !== undefined\n const dataStyle = hasLook ? (styleVariant ?? 'solid') : undefined\n const dataAccentColor = color ? accentByColor[color] : undefined\n const invalid = useFieldSetInvalid()\n\n return (\n <CheckboxGroupPrimitive\n data-slot=\"checkbox-group\"\n data-style={dataStyle}\n data-accent-color={dataAccentColor}\n data-list-style={listStyle}\n data-invalid={invalid}\n className={cn(\n 'grid',\n listStyle\n ? selectionListClasses[listStyle]\n : 'gap-[calc(var(--spark-layout-gap)*var(--checkbox-group-gap-steps,3))]',\n className,\n )}\n style={\n { '--checkbox-group-gap-steps': gap, ...style } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { CheckboxGroup }\nexport type { CheckboxGroupProps }\n"],"mappings":";;;;;;;;;;;;AAwBA,SAAS,cAAc,EACrB,WACA,cACA,OACA,MAAM,GACN,WACA,OACA,GAAG,SACkB;CAMrB,OACE,iBAAA,GAAA,kBAAA,KAACA,8BAAAA,eAAD;EACE,aAAU;EACV,cARY,iBAAiB,KAAA,KAAa,UAAU,KAAA,IAC3B,gBAAgB,UAAW,KAAA;EAQpD,qBAPoB,QAAQC,0BAAAA,cAAc,SAAS,KAAA;EAQnD,mBAAiB;EACjB,gBARYC,yBAAAA,mBAQQ;EACpB,YAAA,GAAA,GAAA,IACE,QACA,YACIC,2BAAAA,qBAAqB,aACrB,yEACJ,SACF;EACA,OACE;GAAE,8BAA8B;GAAK,GAAG;EAAM;EAEhD,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { g as SparkStyle, l as SparkInputStyle } from "../theme-types-CKZzOmSa.cjs";
|
|
4
|
+
import { SparkCheckboxColor } from "./checkbox.cjs";
|
|
5
|
+
import * as React$1 from "react";
|
|
6
|
+
import { CheckboxGroup as CheckboxGroup$1 } from "@base-ui/react/checkbox-group";
|
|
7
|
+
|
|
8
|
+
//#region src/components/checkbox-group.d.ts
|
|
9
|
+
type CheckboxGroupProps = Omit<React$1.ComponentProps<typeof CheckboxGroup$1>, 'style'> & {
|
|
10
|
+
styleVariant?: SparkStyle;
|
|
11
|
+
color?: SparkCheckboxColor; /** How many `--spark-layout-gap` units apart each checkbox sits. */
|
|
12
|
+
gap?: number; /** Shows the options as a styled list of `SelectionItem` rows; ignores `gap`. */
|
|
13
|
+
listStyle?: SparkInputStyle;
|
|
14
|
+
style?: React$1.CSSProperties;
|
|
15
|
+
};
|
|
16
|
+
declare function CheckboxGroup({
|
|
17
|
+
className,
|
|
18
|
+
styleVariant,
|
|
19
|
+
color,
|
|
20
|
+
gap,
|
|
21
|
+
listStyle,
|
|
22
|
+
style,
|
|
23
|
+
...props
|
|
24
|
+
}: CheckboxGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { CheckboxGroup, type CheckboxGroupProps };
|
|
27
|
+
//# sourceMappingURL=checkbox-group.d.cts.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
|
|
3
|
+
import { g as SparkStyle, l as SparkInputStyle } from "../theme-types-CKZzOmSa.js";
|
|
4
|
+
import { SparkCheckboxColor } from "./checkbox.js";
|
|
5
|
+
import * as React$1 from "react";
|
|
6
|
+
import { CheckboxGroup as CheckboxGroup$1 } from "@base-ui/react/checkbox-group";
|
|
7
|
+
|
|
8
|
+
//#region src/components/checkbox-group.d.ts
|
|
9
|
+
type CheckboxGroupProps = Omit<React$1.ComponentProps<typeof CheckboxGroup$1>, 'style'> & {
|
|
10
|
+
styleVariant?: SparkStyle;
|
|
11
|
+
color?: SparkCheckboxColor; /** How many `--spark-layout-gap` units apart each checkbox sits. */
|
|
12
|
+
gap?: number; /** Shows the options as a styled list of `SelectionItem` rows; ignores `gap`. */
|
|
13
|
+
listStyle?: SparkInputStyle;
|
|
14
|
+
style?: React$1.CSSProperties;
|
|
15
|
+
};
|
|
16
|
+
declare function CheckboxGroup({
|
|
17
|
+
className,
|
|
18
|
+
styleVariant,
|
|
19
|
+
color,
|
|
20
|
+
gap,
|
|
21
|
+
listStyle,
|
|
22
|
+
style,
|
|
23
|
+
...props
|
|
24
|
+
}: CheckboxGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { CheckboxGroup, type CheckboxGroupProps };
|
|
27
|
+
//# sourceMappingURL=checkbox-group.d.ts.map
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { cn } from "../utils/cn.js";
|
|
3
|
+
import { accentByColor } from "../lib/accent-colors.js";
|
|
4
|
+
import { useFieldSetInvalid } from "./field.js";
|
|
5
|
+
import { selectionListClasses } from "../lib/selection-list.js";
|
|
6
|
+
import "react";
|
|
7
|
+
import { jsx } from "react/jsx-runtime";
|
|
8
|
+
import { CheckboxGroup as CheckboxGroup$1 } from "@base-ui/react/checkbox-group";
|
|
9
|
+
//#region src/components/checkbox-group.tsx
|
|
10
|
+
function CheckboxGroup({ className, styleVariant, color, gap = 3, listStyle, style, ...props }) {
|
|
11
|
+
return /* @__PURE__ */ jsx(CheckboxGroup$1, {
|
|
12
|
+
"data-slot": "checkbox-group",
|
|
13
|
+
"data-style": styleVariant !== void 0 || color !== void 0 ? styleVariant ?? "solid" : void 0,
|
|
14
|
+
"data-accent-color": color ? accentByColor[color] : void 0,
|
|
15
|
+
"data-list-style": listStyle,
|
|
16
|
+
"data-invalid": useFieldSetInvalid(),
|
|
17
|
+
className: cn("grid", listStyle ? selectionListClasses[listStyle] : "gap-[calc(var(--spark-layout-gap)*var(--checkbox-group-gap-steps,3))]", className),
|
|
18
|
+
style: {
|
|
19
|
+
"--checkbox-group-gap-steps": gap,
|
|
20
|
+
...style
|
|
21
|
+
},
|
|
22
|
+
...props
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { CheckboxGroup };
|
|
27
|
+
|
|
28
|
+
//# sourceMappingURL=checkbox-group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkbox-group.js","names":["CheckboxGroupPrimitive"],"sources":["../../src/components/checkbox-group.tsx"],"sourcesContent":["import { CheckboxGroup as CheckboxGroupPrimitive } from '@base-ui/react/checkbox-group'\nimport * as React from 'react'\nimport { accentByColor } from '../lib/accent-colors'\nimport { selectionListClasses } from '../lib/selection-list'\nimport type { SparkInputStyle, SparkStyle } from '../lib/theme-types'\nimport { cn } from '../utils/cn'\nimport type { SparkCheckboxColor } from './checkbox'\nimport { useFieldSetInvalid } from './field'\n\ntype CheckboxGroupProps = Omit<\n React.ComponentProps<typeof CheckboxGroupPrimitive>,\n 'style'\n> & {\n styleVariant?: SparkStyle\n color?: SparkCheckboxColor\n /** How many `--spark-layout-gap` units apart each checkbox sits. */\n gap?: number\n /** Shows the options as a styled list of `SelectionItem` rows; ignores `gap`. */\n listStyle?: SparkInputStyle\n // Base UI's own `style` also accepts a state-callback form; the gap-steps var below\n // needs a plain object to merge into, so narrow it to that here.\n style?: React.CSSProperties\n}\n\nfunction CheckboxGroup({\n className,\n styleVariant,\n color,\n gap = 3,\n listStyle,\n style,\n ...props\n}: CheckboxGroupProps) {\n const hasLook = styleVariant !== undefined || color !== undefined\n const dataStyle = hasLook ? (styleVariant ?? 'solid') : undefined\n const dataAccentColor = color ? accentByColor[color] : undefined\n const invalid = useFieldSetInvalid()\n\n return (\n <CheckboxGroupPrimitive\n data-slot=\"checkbox-group\"\n data-style={dataStyle}\n data-accent-color={dataAccentColor}\n data-list-style={listStyle}\n data-invalid={invalid}\n className={cn(\n 'grid',\n listStyle\n ? selectionListClasses[listStyle]\n : 'gap-[calc(var(--spark-layout-gap)*var(--checkbox-group-gap-steps,3))]',\n className,\n )}\n style={\n { '--checkbox-group-gap-steps': gap, ...style } as React.CSSProperties\n }\n {...props}\n />\n )\n}\n\nexport { CheckboxGroup }\nexport type { CheckboxGroupProps }\n"],"mappings":";;;;;;;;;AAwBA,SAAS,cAAc,EACrB,WACA,cACA,OACA,MAAM,GACN,WACA,OACA,GAAG,SACkB;CAMrB,OACE,oBAACA,iBAAD;EACE,aAAU;EACV,cARY,iBAAiB,KAAA,KAAa,UAAU,KAAA,IAC3B,gBAAgB,UAAW,KAAA;EAQpD,qBAPoB,QAAQ,cAAc,SAAS,KAAA;EAQnD,mBAAiB;EACjB,gBARY,mBAQQ;EACpB,WAAW,GACT,QACA,YACI,qBAAqB,aACrB,yEACJ,SACF;EACA,OACE;GAAE,8BAA8B;GAAK,GAAG;EAAM;EAEhD,GAAI;CACL,CAAA;AAEL"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
3
|
const require_chunk = require("../chunk-DY84GLCh.cjs");
|
|
4
|
-
const require_components_button = require("./button.cjs");
|
|
5
4
|
const require_components_theme = require("./theme.cjs");
|
|
5
|
+
const require_components_button = require("./button.cjs");
|
|
6
6
|
let react = require("react");
|
|
7
7
|
react = require_chunk.__toESM(react);
|
|
8
8
|
let _epilot_spark_icons = require("@epilot/spark-icons");
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { cn } from "../utils/cn.js";
|
|
3
|
-
import { buttonVariants } from "./button.js";
|
|
4
3
|
import { PortalTheme } from "./theme.js";
|
|
4
|
+
import { buttonVariants } from "./button.js";
|
|
5
5
|
import "react";
|
|
6
6
|
import { Close } from "@epilot/spark-icons";
|
|
7
7
|
import { jsx } from "react/jsx-runtime";
|
|
@@ -6,9 +6,9 @@ import { SparkIcon } from "@epilot/spark-icons";
|
|
|
6
6
|
|
|
7
7
|
//#region src/components/empty-state.d.ts
|
|
8
8
|
declare const emptyStateVariants: (props?: ({
|
|
9
|
-
variant?: "
|
|
10
|
-
size?: "
|
|
11
|
-
layout?: "
|
|
9
|
+
variant?: "ghost" | "dashed" | null | undefined;
|
|
10
|
+
size?: "sm" | "default" | null | undefined;
|
|
11
|
+
layout?: "inline" | "stacked" | null | undefined;
|
|
12
12
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
13
13
|
type EmptyStateVariants = VariantProps<typeof emptyStateVariants>;
|
|
14
14
|
interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>, Pick<EmptyStateVariants, 'variant'> {
|
|
@@ -6,9 +6,9 @@ import { VariantProps } from "class-variance-authority";
|
|
|
6
6
|
|
|
7
7
|
//#region src/components/empty-state.d.ts
|
|
8
8
|
declare const emptyStateVariants: (props?: ({
|
|
9
|
-
variant?: "
|
|
10
|
-
size?: "
|
|
11
|
-
layout?: "
|
|
9
|
+
variant?: "ghost" | "dashed" | null | undefined;
|
|
10
|
+
size?: "sm" | "default" | null | undefined;
|
|
11
|
+
layout?: "inline" | "stacked" | null | undefined;
|
|
12
12
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
13
13
|
type EmptyStateVariants = VariantProps<typeof emptyStateVariants>;
|
|
14
14
|
interface EmptyStateProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'>, Pick<EmptyStateVariants, 'variant'> {
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
4
4
|
const require_chunk = require("../chunk-DY84GLCh.cjs");
|
|
5
5
|
const require_components_theme = require("./theme.cjs");
|
|
6
|
+
const require_components_callout = require("./callout.cjs");
|
|
6
7
|
const require_components_separator = require("./separator.cjs");
|
|
7
8
|
const require_components_skeleton = require("./skeleton.cjs");
|
|
8
9
|
let react = require("react");
|
|
@@ -35,19 +36,96 @@ function useFieldControl(options) {
|
|
|
35
36
|
inputColor
|
|
36
37
|
};
|
|
37
38
|
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
39
|
+
const FieldSetContext = react.createContext(null);
|
|
40
|
+
/** True when the nearest enclosing FieldSet has an error; ignores outer sets. */
|
|
41
|
+
function useFieldSetInvalid() {
|
|
42
|
+
return react.useContext(FieldSetContext)?.invalid || void 0;
|
|
43
|
+
}
|
|
44
|
+
function useSlotCount() {
|
|
45
|
+
const [count, setCount] = react.useState(0);
|
|
46
|
+
const setHas = react.useCallback((has) => setCount((n) => n + (has ? 1 : -1)), []);
|
|
47
|
+
return [count > 0, setHas];
|
|
48
|
+
}
|
|
49
|
+
function FieldSet({ className, indicator, indicatorLabel, "aria-describedby": ariaDescribedByProp, ...props }) {
|
|
50
|
+
const id = (0, react.useId)();
|
|
51
|
+
const [hasDescription, setHasDescription] = useSlotCount();
|
|
52
|
+
const [hasError, setHasError] = useSlotCount();
|
|
53
|
+
const [hasUnlinkedError, setHasUnlinkedError] = useSlotCount();
|
|
54
|
+
const invalid = hasError || hasUnlinkedError;
|
|
55
|
+
const fieldSetId = `field-set-${id}`;
|
|
56
|
+
const descriptionId = `${fieldSetId}-description`;
|
|
57
|
+
const errorId = `${fieldSetId}-error`;
|
|
58
|
+
const value = react.useMemo(() => ({
|
|
59
|
+
descriptionId,
|
|
60
|
+
hasDescription,
|
|
61
|
+
setHasDescription,
|
|
62
|
+
errorId,
|
|
63
|
+
hasError,
|
|
64
|
+
setHasError,
|
|
65
|
+
setHasUnlinkedError,
|
|
66
|
+
invalid,
|
|
67
|
+
indicator,
|
|
68
|
+
indicatorLabel
|
|
69
|
+
}), [
|
|
70
|
+
descriptionId,
|
|
71
|
+
hasDescription,
|
|
72
|
+
setHasDescription,
|
|
73
|
+
errorId,
|
|
74
|
+
hasError,
|
|
75
|
+
setHasError,
|
|
76
|
+
setHasUnlinkedError,
|
|
77
|
+
invalid,
|
|
78
|
+
indicator,
|
|
79
|
+
indicatorLabel
|
|
80
|
+
]);
|
|
81
|
+
const ariaDescribedBy = [
|
|
82
|
+
hasError && errorId,
|
|
83
|
+
hasDescription && descriptionId,
|
|
84
|
+
ariaDescribedByProp
|
|
85
|
+
].filter(Boolean).join(" ") || void 0;
|
|
86
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(FieldSetContext.Provider, {
|
|
87
|
+
value,
|
|
88
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("fieldset", {
|
|
89
|
+
"data-slot": "field-set",
|
|
90
|
+
"data-invalid": invalid || void 0,
|
|
91
|
+
"aria-describedby": ariaDescribedBy,
|
|
92
|
+
className: (0, cn.cn)("group/field-set flex flex-col gap-[calc(var(--spark-layout-gap)*4)]", className),
|
|
93
|
+
...props
|
|
94
|
+
})
|
|
43
95
|
});
|
|
44
96
|
}
|
|
45
|
-
function FieldLegend({ className, variant = "legend", ...props }) {
|
|
46
|
-
|
|
97
|
+
function FieldLegend({ className, variant = "legend", children, ...props }) {
|
|
98
|
+
const fieldSet = react.useContext(FieldSetContext);
|
|
99
|
+
const indicator = fieldSet?.indicator;
|
|
100
|
+
const indicatorLabel = fieldSet?.indicatorLabel ?? indicator;
|
|
101
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("legend", {
|
|
102
|
+
"data-invalid": fieldSet?.invalid || void 0,
|
|
47
103
|
"data-slot": "field-legend",
|
|
48
104
|
"data-variant": variant,
|
|
49
|
-
className: (0, cn.cn)("mb-1.5 font-medium text-gray data-[variant=label]:text-sm data-[variant=legend]:text-base", className),
|
|
50
|
-
...props
|
|
105
|
+
className: (0, cn.cn)("mb-1.5 font-medium text-gray data-[invalid=true]:text-error-active! data-[variant=label]:text-sm data-[variant=legend]:text-base", className),
|
|
106
|
+
...props,
|
|
107
|
+
children: [
|
|
108
|
+
children,
|
|
109
|
+
indicator === "required" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [
|
|
110
|
+
" ",
|
|
111
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
112
|
+
"aria-hidden": "true",
|
|
113
|
+
children: "*"
|
|
114
|
+
}),
|
|
115
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
|
|
116
|
+
className: "sr-only",
|
|
117
|
+
children: indicatorLabel
|
|
118
|
+
})
|
|
119
|
+
] }),
|
|
120
|
+
indicator === "optional" && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [" ", /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("span", {
|
|
121
|
+
className: "font-normal text-gray-light",
|
|
122
|
+
children: [
|
|
123
|
+
"(",
|
|
124
|
+
indicatorLabel,
|
|
125
|
+
")"
|
|
126
|
+
]
|
|
127
|
+
})] })
|
|
128
|
+
]
|
|
51
129
|
});
|
|
52
130
|
}
|
|
53
131
|
function FieldGroup({ className, ...props }) {
|
|
@@ -246,7 +324,9 @@ function FieldTitle({ className, ...props }) {
|
|
|
246
324
|
}
|
|
247
325
|
function FieldDescription({ className, id, ...props }) {
|
|
248
326
|
const field = useFieldContext();
|
|
249
|
-
const
|
|
327
|
+
const fieldSet = react.useContext(FieldSetContext);
|
|
328
|
+
const owner = field ?? fieldSet;
|
|
329
|
+
const setHasDescription = owner?.setHasDescription;
|
|
250
330
|
react.useEffect(() => {
|
|
251
331
|
if (!setHasDescription) return;
|
|
252
332
|
setHasDescription(true);
|
|
@@ -254,7 +334,7 @@ function FieldDescription({ className, id, ...props }) {
|
|
|
254
334
|
}, [setHasDescription]);
|
|
255
335
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
256
336
|
"data-slot": "field-description",
|
|
257
|
-
id: id ??
|
|
337
|
+
id: id ?? owner?.descriptionId,
|
|
258
338
|
className: (0, cn.cn)("text-sm leading-normal text-gray-light", className),
|
|
259
339
|
...props
|
|
260
340
|
});
|
|
@@ -274,7 +354,8 @@ function FieldSeparator({ children, className, ...props }) {
|
|
|
274
354
|
}
|
|
275
355
|
function FieldError({ className, children, errors, id, ...props }) {
|
|
276
356
|
const field = useFieldContext();
|
|
277
|
-
const
|
|
357
|
+
const fieldSet = react.useContext(FieldSetContext);
|
|
358
|
+
const setHasError = (field ?? fieldSet)?.setHasError;
|
|
278
359
|
const content = react.useMemo(() => {
|
|
279
360
|
if (children) return children;
|
|
280
361
|
if (!errors?.length) return null;
|
|
@@ -287,16 +368,29 @@ function FieldError({ className, children, errors, id, ...props }) {
|
|
|
287
368
|
}, [children, errors]);
|
|
288
369
|
const hasContent = Boolean(content);
|
|
289
370
|
const hasCustomId = id != null;
|
|
371
|
+
const setSetUnlinked = !field ? fieldSet?.setHasUnlinkedError : void 0;
|
|
290
372
|
react.useEffect(() => {
|
|
291
|
-
if (!
|
|
292
|
-
setHasError
|
|
293
|
-
|
|
373
|
+
if (!hasContent) return;
|
|
374
|
+
const set = hasCustomId ? setSetUnlinked : setHasError;
|
|
375
|
+
if (!set) return;
|
|
376
|
+
set(true);
|
|
377
|
+
return () => set(false);
|
|
294
378
|
}, [
|
|
295
379
|
setHasError,
|
|
380
|
+
setSetUnlinked,
|
|
296
381
|
hasContent,
|
|
297
382
|
hasCustomId
|
|
298
383
|
]);
|
|
299
384
|
if (!content) return null;
|
|
385
|
+
if (!field && fieldSet) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_callout.Callout, {
|
|
386
|
+
variant: "error",
|
|
387
|
+
role: "alert",
|
|
388
|
+
"data-slot": "field-error",
|
|
389
|
+
id: id ?? fieldSet.errorId,
|
|
390
|
+
className,
|
|
391
|
+
...props,
|
|
392
|
+
children: content
|
|
393
|
+
});
|
|
300
394
|
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
|
|
301
395
|
role: "alert",
|
|
302
396
|
"data-slot": "field-error",
|
|
@@ -321,5 +415,6 @@ exports.FieldTitle = FieldTitle;
|
|
|
321
415
|
exports.FieldValue = FieldValue;
|
|
322
416
|
exports.useFieldContext = useFieldContext;
|
|
323
417
|
exports.useFieldControl = useFieldControl;
|
|
418
|
+
exports.useFieldSetInvalid = useFieldSetInvalid;
|
|
324
419
|
|
|
325
420
|
//# sourceMappingURL=field.cjs.map
|