@cere/cere-design-system 0.0.45 → 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/WorkflowNode-BnxXO6t_.d.mts +46 -0
- package/dist/WorkflowNode-BnxXO6t_.d.ts +46 -0
- package/dist/buttons.d.mts +114 -0
- package/dist/buttons.d.ts +114 -0
- package/dist/buttons.js +19 -0
- package/dist/buttons.js.map +1 -0
- package/dist/buttons.mjs +19 -0
- package/dist/buttons.mjs.map +1 -0
- package/dist/carousel.d.mts +51 -0
- package/dist/carousel.d.ts +51 -0
- package/dist/carousel.js +185 -0
- package/dist/carousel.js.map +1 -0
- package/dist/carousel.mjs +185 -0
- package/dist/carousel.mjs.map +1 -0
- package/dist/charts.d.mts +209 -0
- package/dist/charts.d.ts +209 -0
- package/dist/charts.js +20 -0
- package/dist/charts.js.map +1 -0
- package/dist/charts.mjs +20 -0
- package/dist/charts.mjs.map +1 -0
- package/dist/chunk-27JEWSWA.mjs +233 -0
- package/dist/chunk-27JEWSWA.mjs.map +1 -0
- package/dist/chunk-2EBCST6X.js +25 -0
- package/dist/chunk-2EBCST6X.js.map +1 -0
- package/dist/chunk-3WCMINE5.mjs +490 -0
- package/dist/chunk-3WCMINE5.mjs.map +1 -0
- package/dist/chunk-463SRKKD.js +111 -0
- package/dist/chunk-463SRKKD.js.map +1 -0
- package/dist/chunk-5ASG6G6U.mjs +40 -0
- package/dist/chunk-5ASG6G6U.mjs.map +1 -0
- package/dist/chunk-6EUAU67C.mjs +374 -0
- package/dist/chunk-6EUAU67C.mjs.map +1 -0
- package/dist/chunk-AIY6222Q.js +11 -0
- package/dist/chunk-AIY6222Q.js.map +1 -0
- package/dist/chunk-AJBM7IE6.mjs +2366 -0
- package/dist/chunk-AJBM7IE6.mjs.map +1 -0
- package/dist/chunk-ATIFLPH6.mjs +278 -0
- package/dist/chunk-ATIFLPH6.mjs.map +1 -0
- package/dist/chunk-BIZK6FUD.js +37 -0
- package/dist/chunk-BIZK6FUD.js.map +1 -0
- package/dist/chunk-CCN6M4LI.js +103 -0
- package/dist/chunk-CCN6M4LI.js.map +1 -0
- package/dist/chunk-CUCKULYC.mjs +2658 -0
- package/dist/chunk-CUCKULYC.mjs.map +1 -0
- package/dist/chunk-CWJ4OU6W.mjs +45 -0
- package/dist/chunk-CWJ4OU6W.mjs.map +1 -0
- package/dist/chunk-EOF3QNPF.js +2366 -0
- package/dist/chunk-EOF3QNPF.js.map +1 -0
- package/dist/chunk-FFZ5S7PQ.mjs +146 -0
- package/dist/chunk-FFZ5S7PQ.mjs.map +1 -0
- package/dist/chunk-FN5YL4BK.js +278 -0
- package/dist/chunk-FN5YL4BK.js.map +1 -0
- package/dist/chunk-HLH2VWXL.js +2658 -0
- package/dist/chunk-HLH2VWXL.js.map +1 -0
- package/dist/chunk-IE6GCHDI.mjs +530 -0
- package/dist/chunk-IE6GCHDI.mjs.map +1 -0
- package/dist/chunk-JBHRAAN3.js +31 -0
- package/dist/chunk-JBHRAAN3.js.map +1 -0
- package/dist/chunk-JS4IB5IU.mjs +162 -0
- package/dist/chunk-JS4IB5IU.mjs.map +1 -0
- package/dist/chunk-KF2Y7HO3.js +595 -0
- package/dist/chunk-KF2Y7HO3.js.map +1 -0
- package/dist/chunk-KPDYKK3V.js +162 -0
- package/dist/chunk-KPDYKK3V.js.map +1 -0
- package/dist/chunk-KVBMZNWT.mjs +103 -0
- package/dist/chunk-KVBMZNWT.mjs.map +1 -0
- package/dist/chunk-L2TIGA7I.js +530 -0
- package/dist/chunk-L2TIGA7I.js.map +1 -0
- package/dist/chunk-MNM6HE72.js +146 -0
- package/dist/chunk-MNM6HE72.js.map +1 -0
- package/dist/chunk-NXTVJ6PY.js +374 -0
- package/dist/chunk-NXTVJ6PY.js.map +1 -0
- package/dist/chunk-OWWDNDF4.js +40 -0
- package/dist/chunk-OWWDNDF4.js.map +1 -0
- package/dist/chunk-PHMNZK2R.mjs +18 -0
- package/dist/chunk-PHMNZK2R.mjs.map +1 -0
- package/dist/chunk-PWF2NJDB.mjs +377 -0
- package/dist/chunk-PWF2NJDB.mjs.map +1 -0
- package/dist/chunk-QBCRH7YF.mjs +37 -0
- package/dist/chunk-QBCRH7YF.mjs.map +1 -0
- package/dist/chunk-QD6RLAO2.mjs +11 -0
- package/dist/chunk-QD6RLAO2.mjs.map +1 -0
- package/dist/chunk-QY65OUAC.mjs +111 -0
- package/dist/chunk-QY65OUAC.mjs.map +1 -0
- package/dist/chunk-QYYQYZHV.js +45 -0
- package/dist/chunk-QYYQYZHV.js.map +1 -0
- package/dist/chunk-T7LPABOL.mjs +595 -0
- package/dist/chunk-T7LPABOL.mjs.map +1 -0
- package/dist/chunk-THQKYTQE.js +490 -0
- package/dist/chunk-THQKYTQE.js.map +1 -0
- package/dist/chunk-U2QHFISG.js +18 -0
- package/dist/chunk-U2QHFISG.js.map +1 -0
- package/dist/chunk-UPGFBPFX.mjs +25 -0
- package/dist/chunk-UPGFBPFX.mjs.map +1 -0
- package/dist/chunk-X7E6GMFL.js +233 -0
- package/dist/chunk-X7E6GMFL.js.map +1 -0
- package/dist/chunk-XF66WQZE.mjs +1535 -0
- package/dist/chunk-XF66WQZE.mjs.map +1 -0
- package/dist/chunk-YQOZPLTY.js +1535 -0
- package/dist/chunk-YQOZPLTY.js.map +1 -0
- package/dist/chunk-ZGCN5WCG.js +377 -0
- package/dist/chunk-ZGCN5WCG.js.map +1 -0
- package/dist/chunk-ZP26PGMS.mjs +31 -0
- package/dist/chunk-ZP26PGMS.mjs.map +1 -0
- package/dist/feedback.d.mts +356 -0
- package/dist/feedback.d.ts +356 -0
- package/dist/feedback.js +43 -0
- package/dist/feedback.js.map +1 -0
- package/dist/feedback.mjs +43 -0
- package/dist/feedback.mjs.map +1 -0
- package/dist/icons.d.mts +22 -0
- package/dist/icons.d.ts +22 -0
- package/dist/icons.js +23 -0
- package/dist/icons.js.map +1 -0
- package/dist/icons.mjs +23 -0
- package/dist/icons.mjs.map +1 -0
- package/dist/index.d.mts +165 -3080
- package/dist/index.d.ts +165 -3080
- package/dist/index.js +320 -10082
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +262 -9983
- package/dist/index.mjs.map +1 -1
- package/dist/inputs.d.mts +109 -0
- package/dist/inputs.d.ts +109 -0
- package/dist/inputs.js +43 -0
- package/dist/inputs.js.map +1 -0
- package/dist/inputs.mjs +43 -0
- package/dist/inputs.mjs.map +1 -0
- package/dist/layout.d.mts +927 -0
- package/dist/layout.d.ts +927 -0
- package/dist/layout.js +122 -0
- package/dist/layout.js.map +1 -0
- package/dist/layout.mjs +122 -0
- package/dist/layout.mjs.map +1 -0
- package/dist/navigation.d.mts +716 -0
- package/dist/navigation.d.ts +716 -0
- package/dist/navigation.js +58 -0
- package/dist/navigation.js.map +1 -0
- package/dist/navigation.mjs +58 -0
- package/dist/navigation.mjs.map +1 -0
- package/dist/third-party.d.mts +637 -0
- package/dist/third-party.d.ts +637 -0
- package/dist/third-party.js +45 -0
- package/dist/third-party.js.map +1 -0
- package/dist/third-party.mjs +45 -0
- package/dist/third-party.mjs.map +1 -0
- package/dist/utilities.d.mts +39 -0
- package/dist/utilities.d.ts +39 -0
- package/dist/utilities.js +19 -0
- package/dist/utilities.js.map +1 -0
- package/dist/utilities.mjs +19 -0
- package/dist/utilities.mjs.map +1 -0
- package/package.json +55 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/theme/spacing.ts","../src/theme/surfaceVariants/webLight.ts","../src/theme/surfaceVariants/index.ts","../src/theme/index.ts","../src/theme/semantic.ts","../src/theme/components.ts"],"sourcesContent":["/**\n * Spacing and sizing tokens for the design system.\n *\n * Centralizes border-radius, component-specific sizing, and spacing\n * constants that were previously scattered across component files.\n */\n\nexport const borderRadius = {\n /** Small: alerts, compact elements */\n sm: 8,\n /** Medium: buttons, inputs, selects */\n md: 12,\n /** Large: chips, cards, global default */\n lg: 16,\n /** Extra large: hero surfaces, dialogs */\n xl: 20,\n /** Pill: fully rounded badges, on-gradient buttons */\n pill: 999,\n} as const;\n\nexport const componentSizing = {\n workflow: {\n nodeIconSize: 18,\n inspectorWidth: 320,\n },\n deployment: {\n entityIconSize: 16,\n chevronSize: 16,\n panelRadius: 12,\n },\n} as const;\n","/**\n * Surface variant: web-light.\n *\n * The marketplace + vault product palette. Both apps render on a light\n * surface; the older audit synthesis (which assumed marketplace was dark)\n * was wrong. There is no shipping dark variant today; that lands as part\n * of the dark-mode work (blocker `B5` in `DESIGN_SYSTEM_TODO.md`).\n *\n * This variant currently mirrors `webSurfaceTokens` verbatim. Future\n * work may diverge (e.g. a vault-specific accent override), at which\n * point a new named variant should be added rather than forking values\n * in app land.\n *\n * See `company-memory-bank/00-foundations/design-system.md` §4.\n */\n\nimport { webSurfaceTokens } from '../webSurfaceTokens';\n\nexport const webLight = webSurfaceTokens;\nexport type WebLightVariant = typeof webLight;\n","import { webLight } from './webLight';\n\n/**\n * Named surface variants. Consumers pick one variant per product surface\n * by importing the matching CSS layer (`@cere/cere-design-system/surfaces/<name>.css`)\n * AND optionally referencing the typed token bag here at the TS layer.\n *\n * Today there is only `webLight` (the shipped marketplace + vault\n * palette). A future `webDark` lands with the dark-mode work\n * (`DESIGN_SYSTEM_TODO.md` blocker `B5`).\n *\n * See `company-memory-bank/00-foundations/design-system.md` §4.\n */\nexport const surfaceVariants = { webLight } as const;\nexport type SurfaceVariant = keyof typeof surfaceVariants;\n\nexport { webLight };\nexport type { WebLightVariant } from './webLight';\n","/**\n * Design system theme barrel.\n *\n * Composes the MUI theme from token modules and re-exports everything\n * the public API needs. Internal structure:\n *\n * primitives.ts - Tier 1: raw color values (hue + shade)\n * semantic.ts - Tier 2: intent-based tokens\n * typography.ts - Font family and type scale\n * components.ts - MUI component style overrides\n * spacing.ts - Border radius and sizing constants\n */\n\nimport { createTheme, Theme } from '@mui/material/styles';\n// Side-effect: register custom Typography variants with MUI's type system.\nimport './typography-augment';\n\n// Token modules\nimport { primitives, deploymentEntityColors, deploymentStatusColors, workflowNodeColors, workflowConnectionColors, workflowChromeColors } from './primitives';\nimport { semantic } from './semantic';\nimport { typography } from './typography';\nimport { components } from './components';\nimport { borderRadius } from './spacing';\n\n// ---------------------------------------------------------------------------\n// Module augmentation: type-safe access to theme.palette.deployment/workflow\n// ---------------------------------------------------------------------------\ndeclare module '@mui/material/styles' {\n interface TypeBackground {\n selected: string;\n }\n interface Palette {\n deployment: {\n entity: typeof deploymentEntityColors;\n status: typeof deploymentStatusColors;\n };\n workflow: {\n node: typeof workflowNodeColors;\n connection: typeof workflowConnectionColors;\n chrome: typeof workflowChromeColors;\n };\n }\n interface PaletteOptions {\n deployment?: {\n entity?: Record<string, string>;\n status?: Record<string, string>;\n };\n workflow?: {\n node?: Partial<typeof workflowNodeColors>;\n connection?: Partial<typeof workflowConnectionColors>;\n chrome?: Partial<typeof workflowChromeColors>;\n };\n }\n}\n\n// ---------------------------------------------------------------------------\n// Backwards-compatible `colors` object (same shape, derived from tokens)\n// ---------------------------------------------------------------------------\nconst colors = {\n primary: {\n main: semantic.action.primary,\n light: semantic.action.primary,\n dark: semantic.action.primaryHover,\n contrastText: semantic.text.contrast,\n },\n secondary: {\n main: primitives.neutral[600],\n light: primitives.neutral[900],\n dark: primitives.neutral[300],\n contrastText: semantic.text.contrast,\n },\n success: {\n main: semantic.feedback.success.main,\n light: semantic.feedback.success.light,\n dark: semantic.feedback.success.dark,\n contrastText: semantic.text.contrast,\n },\n error: {\n main: semantic.feedback.error.main,\n light: semantic.feedback.error.light,\n dark: semantic.feedback.error.dark,\n contrastText: semantic.text.contrast,\n },\n warning: {\n main: semantic.feedback.warning.main,\n light: semantic.feedback.warning.light,\n dark: semantic.feedback.warning.dark,\n contrastText: semantic.text.contrast,\n },\n tertiary: {\n main: semantic.feedback.warning.main,\n light: semantic.feedback.warning.light,\n dark: semantic.feedback.warning.dark,\n contrastText: primitives.nearBlack,\n },\n grey: primitives.grey,\n text: {\n primary: semantic.text.primary,\n secondary: semantic.text.secondary,\n disabled: semantic.text.disabled,\n },\n background: {\n default: semantic.surface.default,\n paper: semantic.surface.paper,\n selected: semantic.surface.selected,\n },\n};\n\n// ---------------------------------------------------------------------------\n// Theme composition\n// ---------------------------------------------------------------------------\nconst baseTheme = createTheme({\n cssVariables: true,\n palette: {\n mode: 'light',\n primary: colors.primary,\n secondary: colors.secondary,\n success: colors.success,\n error: colors.error,\n warning: colors.warning,\n grey: colors.grey,\n text: colors.text,\n background: colors.background,\n },\n typography,\n shape: {\n borderRadius: borderRadius.lg,\n },\n components,\n});\n\n// Extend palette with deployment dashboard and workflow tokens\nexport const theme: Theme = createTheme(baseTheme, {\n palette: {\n deployment: {\n entity: deploymentEntityColors,\n status: deploymentStatusColors,\n },\n workflow: {\n node: workflowNodeColors,\n connection: workflowConnectionColors,\n chrome: workflowChromeColors,\n },\n },\n});\n\n// ---------------------------------------------------------------------------\n// Public exports (preserve every name the old barrel exported)\n// ---------------------------------------------------------------------------\nexport { colors };\nexport { semantic, deploymentSurfaceTokens } from './semantic';\nexport {\n primitives,\n robPrimaryPalette,\n robPaletteExtended,\n deploymentEntityColors,\n deploymentStatusColors,\n workflowNodeColors,\n workflowConnectionColors,\n workflowChromeColors,\n deploymentSurface,\n} from './primitives';\nexport { borderRadius, componentSizing } from './spacing';\nexport { motion } from './motion';\nexport { webSurfaceTokens } from './webSurfaceTokens';\nexport type { WebSurfaceTokenKey } from './webSurfaceTokens';\nexport { surfaceVariants, webLight } from './surfaceVariants';\nexport type { SurfaceVariant, WebLightVariant } from './surfaceVariants';\n","/**\n * Tier 2: Semantic color tokens.\n *\n * Intent-based tokens that map primitives to UI roles. Components\n * should reference these (or theme.palette) instead of raw hex values.\n *\n * To change the color scheme: edit the mappings here. Zero component changes.\n */\n\nimport { primitives, deploymentSurface } from './primitives';\n\nexport const semantic = {\n action: {\n primary: primitives.violet[500],\n primaryHover: primitives.violet[600],\n disabled: primitives.grey[400],\n },\n surface: {\n default: primitives.white,\n paper: primitives.white,\n selected: 'rgba(123, 44, 191, 0.1)',\n hover: 'rgba(0, 0, 0, 0.04)',\n },\n text: {\n primary: primitives.nearBlack,\n secondary: primitives.neutral[600],\n disabled: primitives.neutral[900],\n contrast: primitives.white,\n },\n border: {\n default: primitives.grey[300],\n subtle: 'rgba(0, 0, 0, 0.05)',\n },\n feedback: {\n success: {\n main: primitives.green[500],\n light: primitives.green[400],\n dark: primitives.green[600],\n },\n error: {\n main: primitives.red[500],\n light: primitives.red[400],\n dark: primitives.red[600],\n },\n warning: {\n main: primitives.amber[500],\n light: primitives.amber[400],\n dark: primitives.amber[600],\n },\n },\n} as const;\n\n/**\n * Shared Figma surface/stroke tokens used across deployment dashboard\n * components. Referenced by semantic name rather than raw hex.\n */\nexport const deploymentSurfaceTokens = {\n /** Surface/high background (Figma #fefcff) */\n surfaceHigh: deploymentSurface.surfaceHigh,\n /** Stroke/Outside border (Figma #e6e6e6) */\n strokeOutside: deploymentSurface.strokeOutside,\n /** Default card border (Figma #cdcccd) */\n borderDefault: deploymentSurface.borderDefault,\n /** Primary text (Figma #1d1b20) */\n textPrimary: deploymentSurface.textPrimary,\n /** Secondary/muted text (Figma #818083) */\n textSecondary: deploymentSurface.textSecondary,\n /** Accent blue for workspace border, capacity bar, chevrons (Figma #5865f2) */\n accentBlue: deploymentSurface.accentBlue,\n /** Workspace card shadow */\n workspaceShadow: '0px 8px 12px rgba(26, 10, 124, 0.1)',\n /** Hover state for context menu items */\n hoverLight: deploymentSurface.hoverLight,\n /** Generic hover overlay (buttons, icon-buttons, rows) */\n hoverOverlay: 'rgba(0, 0, 0, 0.04)',\n /** Blue-50 highlight background for active menu items (Figma blue-50) */\n highlightBg: deploymentSurface.highlightBg,\n /** Blue-50 highlight background hover state */\n highlightBgHover: deploymentSurface.highlightBgHover,\n /** Blue-100 highlight border for active menu items (Figma blue-100) */\n highlightBorder: deploymentSurface.highlightBorder,\n /** Switch track enabled (Figma basic/green #53b96a) */\n switchGreen: deploymentSurface.switchGreen,\n /** Switch track disabled/off (Figma neutral track) */\n switchTrackOff: deploymentSurface.switchTrackOff,\n} as const;\n","/**\n * MUI component style overrides for the design system.\n *\n * Centralized overrides applied via createTheme({ components }).\n * Keeps the theme barrel focused on composition.\n */\n\nimport type { Components, Theme } from '@mui/material/styles';\nimport { borderRadius } from './spacing';\n\nexport const components: Components<Omit<Theme, 'components'>> = {\n MuiButton: {\n styleOverrides: {\n root: {\n textTransform: 'none',\n borderRadius: borderRadius.md,\n fontWeight: 600,\n padding: '8px 24px',\n boxShadow: 'none',\n '&:hover': {\n boxShadow: 'none',\n },\n },\n sizeSmall: {\n padding: '4px 12px',\n fontSize: '12px',\n },\n sizeMedium: {\n padding: '8px 24px',\n fontSize: '14px',\n },\n sizeLarge: {\n padding: '12px 24px',\n fontSize: '16px',\n },\n },\n },\n MuiTextField: {\n styleOverrides: {\n root: {\n '& .MuiOutlinedInput-root': {\n borderRadius: borderRadius.md,\n },\n },\n },\n },\n MuiSelect: {\n styleOverrides: {\n root: {\n borderRadius: borderRadius.md,\n },\n },\n },\n MuiChip: {\n styleOverrides: {\n root: {\n borderRadius: borderRadius.lg,\n fontWeight: 500,\n },\n },\n },\n MuiPaper: {\n styleOverrides: {\n root: {\n boxShadow: '0px 4px 20px rgba(0, 0, 0, 0.05)',\n border: '1px solid rgba(0, 0, 0, 0.05)',\n },\n },\n },\n MuiDrawer: {\n styleOverrides: {\n paper: {\n borderRight: '1px solid rgba(0, 0, 0, 0.05)',\n },\n },\n },\n MuiAlert: {\n styleOverrides: {\n root: {\n borderRadius: borderRadius.sm,\n },\n filled: {\n borderRadius: borderRadius.sm,\n },\n },\n },\n};\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/components/feedback/Badge.tsx
|
|
2
|
+
var _Badge = require('@mui/material/Badge'); var _Badge2 = _interopRequireDefault(_Badge);
|
|
3
|
+
var _styles = require('@mui/material/styles');
|
|
4
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
5
|
+
var getBadgeColor = (variant, theme) => {
|
|
6
|
+
switch (variant) {
|
|
7
|
+
case "primary":
|
|
8
|
+
return theme.palette.primary.main;
|
|
9
|
+
case "success":
|
|
10
|
+
return theme.palette.success.main;
|
|
11
|
+
case "error":
|
|
12
|
+
return theme.palette.error.main;
|
|
13
|
+
default:
|
|
14
|
+
return theme.palette.grey[400];
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var StyledBadge = _styles.styled.call(void 0, _Badge2.default, {
|
|
18
|
+
shouldForwardProp: (prop) => prop !== "badgeVariant"
|
|
19
|
+
})(({ theme, badgeVariant = "default" }) => ({
|
|
20
|
+
"& .MuiBadge-badge": {
|
|
21
|
+
backgroundColor: getBadgeColor(badgeVariant, theme),
|
|
22
|
+
color: theme.palette.common.white
|
|
23
|
+
}
|
|
24
|
+
}));
|
|
25
|
+
var Badge = ({
|
|
26
|
+
variant = "default",
|
|
27
|
+
children,
|
|
28
|
+
badgeContent,
|
|
29
|
+
...props
|
|
30
|
+
}) => {
|
|
31
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, StyledBadge, { badgeVariant: variant, badgeContent, ...props, children });
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
exports.Badge = Badge;
|
|
37
|
+
//# sourceMappingURL=chunk-BIZK6FUD.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/cere-design-system/cere-design-system/dist/chunk-BIZK6FUD.js","../src/components/feedback/Badge.tsx"],"names":[],"mappings":"AAAA;ACCA,0FAAsD;AACtD,8CAA8B;AAsC1B,+CAAA;AA7BJ,IAAM,cAAA,EAAgB,CAAC,OAAA,EAAuB,KAAA,EAAA,GAAiB;AAC7D,EAAA,OAAA,CAAQ,OAAA,EAAS;AAAA,IACf,KAAK,SAAA;AACH,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IAC/B,KAAK,SAAA;AACH,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,OAAA,CAAQ,IAAA;AAAA,IAC/B,KAAK,OAAA;AACH,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,KAAA,CAAM,IAAA;AAAA,IAC7B,OAAA;AACE,MAAA,OAAO,KAAA,CAAM,OAAA,CAAQ,IAAA,CAAK,GAAG,CAAA;AAAA,EACjC;AACF,CAAA;AAEA,IAAM,YAAA,EAAc,4BAAA,eAAO,EAAU;AAAA,EACnC,iBAAA,EAAmB,CAAC,IAAA,EAAA,GAAS,KAAA,IAAS;AACxC,CAAC,CAAA,CAAmC,CAAC,EAAE,KAAA,EAAO,aAAA,EAAe,UAAU,CAAA,EAAA,GAAA,CAAO;AAAA,EAC5E,mBAAA,EAAqB;AAAA,IACnB,eAAA,EAAiB,aAAA,CAAc,YAAA,EAAc,KAAK,CAAA;AAAA,IAClD,KAAA,EAAO,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO;AAAA,EAC9B;AACF,CAAA,CAAE,CAAA;AAEK,IAAM,MAAA,EAA8B,CAAC;AAAA,EAC1C,QAAA,EAAU,SAAA;AAAA,EACV,QAAA;AAAA,EACA,YAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAA,GAAM;AACJ,EAAA,uBACE,6BAAA,WAAC,EAAA,EAAY,YAAA,EAAc,OAAA,EAAS,YAAA,EAA6B,GAAG,KAAA,EACjE,SAAA,CACH,CAAA;AAEJ,CAAA;ADZA;AACA;AACE;AACF,sBAAC","file":"/home/runner/work/cere-design-system/cere-design-system/dist/chunk-BIZK6FUD.js","sourcesContent":[null,"import React from 'react';\nimport MuiBadge, { BadgeProps as MuiBadgeProps } from '@mui/material/Badge';\nimport { styled, Theme } from '@mui/material/styles';\n\nexport type BadgeVariant = 'default' | 'primary' | 'success' | 'error';\n\nexport interface BadgeProps extends Omit<MuiBadgeProps, 'color' | 'variant'> {\n variant?: BadgeVariant;\n children?: React.ReactNode;\n}\n\nconst getBadgeColor = (variant: BadgeVariant, theme: Theme) => {\n switch (variant) {\n case 'primary':\n return theme.palette.primary.main;\n case 'success':\n return theme.palette.success.main;\n case 'error':\n return theme.palette.error.main;\n default:\n return theme.palette.grey[400];\n }\n};\n\nconst StyledBadge = styled(MuiBadge, {\n shouldForwardProp: (prop) => prop !== 'badgeVariant',\n})<{ badgeVariant?: BadgeVariant }>(({ theme, badgeVariant = 'default' }) => ({\n '& .MuiBadge-badge': {\n backgroundColor: getBadgeColor(badgeVariant, theme),\n color: theme.palette.common.white,\n },\n}));\n\nexport const Badge: React.FC<BadgeProps> = ({\n variant = 'default',\n children,\n badgeContent,\n ...props\n}) => {\n return (\n <StyledBadge badgeVariant={variant} badgeContent={badgeContent} {...props}>\n {children}\n </StyledBadge>\n );\n};\n\n"]}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }// src/components/layout/Card.tsx
|
|
2
|
+
var _react = require('react'); var _react2 = _interopRequireDefault(_react);
|
|
3
|
+
var _Card = require('@mui/material/Card'); var _Card2 = _interopRequireDefault(_Card);
|
|
4
|
+
var _CardContent = require('@mui/material/CardContent'); var _CardContent2 = _interopRequireDefault(_CardContent);
|
|
5
|
+
var _CardHeader = require('@mui/material/CardHeader'); var _CardHeader2 = _interopRequireDefault(_CardHeader);
|
|
6
|
+
var _CardActions = require('@mui/material/CardActions'); var _CardActions2 = _interopRequireDefault(_CardActions);
|
|
7
|
+
var _CardMedia = require('@mui/material/CardMedia'); var _CardMedia2 = _interopRequireDefault(_CardMedia);
|
|
8
|
+
var _ButtonBase = require('@mui/material/ButtonBase'); var _ButtonBase2 = _interopRequireDefault(_ButtonBase);
|
|
9
|
+
var _styles = require('@mui/material/styles');
|
|
10
|
+
var _jsxruntime = require('react/jsx-runtime');
|
|
11
|
+
var CardMedia = (props) => /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _CardMedia2.default, { ...props });
|
|
12
|
+
var StyledCard = _styles.styled.call(void 0, _Card2.default, {
|
|
13
|
+
shouldForwardProp: (prop) => prop !== "hoverable" && prop !== "clickable" && prop !== "dsVariant" && prop !== "asButton"
|
|
14
|
+
})(
|
|
15
|
+
({ theme, hoverable, clickable, dsVariant, asButton }) => ({
|
|
16
|
+
borderRadius: 8,
|
|
17
|
+
transition: "all 0.2s ease-in-out",
|
|
18
|
+
...dsVariant === "standard" && {
|
|
19
|
+
boxShadow: theme.shadows[1],
|
|
20
|
+
backgroundColor: theme.palette.background.paper
|
|
21
|
+
},
|
|
22
|
+
...dsVariant === "tinted" && {
|
|
23
|
+
boxShadow: "none",
|
|
24
|
+
backgroundColor: theme.palette.action.hover,
|
|
25
|
+
border: `1px solid ${theme.palette.divider}`
|
|
26
|
+
},
|
|
27
|
+
...dsVariant === "outlined" && {
|
|
28
|
+
boxShadow: "none",
|
|
29
|
+
backgroundColor: theme.palette.background.paper,
|
|
30
|
+
border: `1px solid ${theme.palette.divider}`
|
|
31
|
+
},
|
|
32
|
+
...(clickable || asButton) && {
|
|
33
|
+
cursor: "pointer"
|
|
34
|
+
},
|
|
35
|
+
...asButton && {
|
|
36
|
+
// Neutralise ButtonBase defaults (inline-flex + center alignment) so the
|
|
37
|
+
// card lays out exactly like a non-clickable Card. We render as a column
|
|
38
|
+
// flex so consumers can still stack GradientSurface + meta inside.
|
|
39
|
+
display: "flex",
|
|
40
|
+
flexDirection: "column",
|
|
41
|
+
alignItems: "stretch",
|
|
42
|
+
justifyContent: "flex-start",
|
|
43
|
+
width: "100%",
|
|
44
|
+
textAlign: "left",
|
|
45
|
+
verticalAlign: "top",
|
|
46
|
+
font: "inherit",
|
|
47
|
+
color: "inherit",
|
|
48
|
+
padding: 0,
|
|
49
|
+
"&:focus-visible": {
|
|
50
|
+
outline: "none",
|
|
51
|
+
boxShadow: "0 0 0 4px rgba(170,68,242,0.25)"
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
...hoverable && {
|
|
55
|
+
"&:hover": {
|
|
56
|
+
boxShadow: theme.shadows[4],
|
|
57
|
+
transform: "translateY(-2px)"
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
})
|
|
61
|
+
);
|
|
62
|
+
var Card = _react2.default.forwardRef(function Card2({ variant = "standard", hoverable = false, clickable = false, onClick, children, ...props }, ref) {
|
|
63
|
+
const asButton = clickable && typeof onClick === "function";
|
|
64
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
65
|
+
StyledCard,
|
|
66
|
+
{
|
|
67
|
+
ref,
|
|
68
|
+
dsVariant: variant,
|
|
69
|
+
hoverable,
|
|
70
|
+
clickable,
|
|
71
|
+
asButton,
|
|
72
|
+
variant: "elevation",
|
|
73
|
+
onClick,
|
|
74
|
+
...asButton ? { component: _ButtonBase2.default } : {},
|
|
75
|
+
...props,
|
|
76
|
+
children
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
});
|
|
80
|
+
var CardContent = _react2.default.forwardRef(
|
|
81
|
+
function CardContent2(props, ref) {
|
|
82
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _CardContent2.default, { ref, ...props });
|
|
83
|
+
}
|
|
84
|
+
);
|
|
85
|
+
var CardHeader = (props) => {
|
|
86
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _CardHeader2.default, { ...props });
|
|
87
|
+
};
|
|
88
|
+
var CardActions = (props) => {
|
|
89
|
+
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _CardActions2.default, { ...props });
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
// src/components/layout/Typography.tsx
|
|
93
|
+
var _material = require('@mui/material');
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
exports.CardMedia = CardMedia; exports.Card = Card; exports.CardContent = CardContent; exports.CardHeader = CardHeader; exports.CardActions = CardActions; exports.Typography = _material.Typography;
|
|
103
|
+
//# sourceMappingURL=chunk-CCN6M4LI.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["/home/runner/work/cere-design-system/cere-design-system/dist/chunk-CCN6M4LI.js","../src/components/layout/Card.tsx","../src/components/layout/Typography.tsx"],"names":[],"mappings":"AAAA;ACAA,4EAAkB;AAClB,sFAAmD;AACnD,kHAAiD;AACjD,8GAA+C;AAC/C,kHAAiD;AACjD,0GAAkE;AAClE,8GAAuB;AACvB,8CAAuB;AAGuC,+CAAA;AAAvD,IAAM,UAAA,EAAsC,CAAC,KAAA,EAAA,mBAAU,6BAAA,mBAAC,EAAA,EAAc,GAAG,MAAA,CAAO,CAAA;AAqBvF,IAAM,WAAA,EAAa,4BAAA,cAAO,EAAS;AAAA,EACjC,iBAAA,EAAmB,CAAC,IAAA,EAAA,GAClB,KAAA,IAAS,YAAA,GAAe,KAAA,IAAS,YAAA,GAAe,KAAA,IAAS,YAAA,GAAe,KAAA,IAAS;AACrF,CAAC,CAAA;AAAA,EACC,CAAC,EAAE,KAAA,EAAO,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,SAAS,CAAA,EAAA,GAAA,CAAO;AAAA,IACzD,YAAA,EAAc,CAAA;AAAA,IACd,UAAA,EAAY,sBAAA;AAAA,IACZ,GAAI,UAAA,IAAc,WAAA,GAAc;AAAA,MAC9B,SAAA,EAAW,KAAA,CAAM,OAAA,CAAQ,CAAC,CAAA;AAAA,MAC1B,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,UAAA,CAAW;AAAA,IAC5C,CAAA;AAAA,IACA,GAAI,UAAA,IAAc,SAAA,GAAY;AAAA,MAC5B,SAAA,EAAW,MAAA;AAAA,MACX,eAAA,EAAiB,KAAA,CAAM,OAAA,CAAQ,MAAA,CAAO,KAAA;AAAA,MACtC,MAAA,EAAQ,CAAA,UAAA,EAAa,KAAA,CAAM,OAAA,CAAQ,OAAO,CAAA;AAAA,IAAA;AAC5C,IAAA;AACgC,MAAA;AACnB,MAAA;AAC+B,MAAA;AACA,IAAA;AAC5C,IAAA;AAC+B,MAAA;AACrB,IAAA;AACV,IAAA;AACgB;AAAA;AAAA;AAAA,MAAA;AAIL,MAAA;AACM,MAAA;AACH,MAAA;AACI,MAAA;AACT,MAAA;AACI,MAAA;AACI,MAAA;AACT,MAAA;AACC,MAAA;AACE,MAAA;AACU,QAAA;AACR,QAAA;AACE,MAAA;AACb,IAAA;AACF,IAAA;AACiB,MAAA;AACJ,QAAA;AACiB,QAAA;AACf,MAAA;AACb,IAAA;AACF,EAAA;AAEJ;AAEO;AAQL,EAAA;AACA,EAAA;AACE,IAAA;AAAC,IAAA;AAAA,MAAA;AACC,MAAA;AACW,MAAA;AACX,MAAA;AACA,MAAA;AACA,MAAA;AAGQ,MAAA;AACR,MAAA;AAG6C,MAAA;AACzC,MAAA;AAEH,IAAA;AAAA,EAAA;AAGP;AAEO;AAA0B,EAAA;AAE7B,IAAA;AAA4C,EAAA;AAEhD;AAEO;AACL,EAAA;AACF;AAEO;AACL,EAAA;AACF;ADnCA;AACA;AE3FA;AF6FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA","file":"/home/runner/work/cere-design-system/cere-design-system/dist/chunk-CCN6M4LI.js","sourcesContent":[null,"import React from 'react';\nimport MuiCard, { CardProps as MuiCardProps } from '@mui/material/Card';\nimport MuiCardContent, { CardContentProps } from '@mui/material/CardContent';\nimport MuiCardHeader, { CardHeaderProps } from '@mui/material/CardHeader';\nimport MuiCardActions, { CardActionsProps } from '@mui/material/CardActions';\nimport MuiCardMedia, { CardMediaProps as MuiCardMediaProps } from '@mui/material/CardMedia';\nimport ButtonBase from '@mui/material/ButtonBase';\nimport { styled } from '@mui/material/styles';\n\nexport type CardMediaProps = MuiCardMediaProps;\nexport const CardMedia: React.FC<CardMediaProps> = (props) => <MuiCardMedia {...props} />;\n\nexport type CardVariant = 'standard' | 'tinted' | 'outlined';\n\nexport interface CardProps extends Omit<MuiCardProps, 'variant'> {\n /** Visual treatment. @default 'standard' */\n variant?: CardVariant;\n hoverable?: boolean;\n /**\n * Opt the card into being a real interactive element. When combined with\n * `onClick`, the root renders via MUI ButtonBase — focusable button,\n * Enter/Space activation, `:focus-visible` ring. When `clickable` is set\n * without `onClick`, only the pointer cursor changes (back-compat).\n *\n * `<Card onClick={...}>` WITHOUT `clickable` keeps a `<div>` root and just\n * forwards the click handler, so consumers using onClick for analytics or\n * non-clickable side effects are not silently turned into buttons.\n */\n clickable?: boolean;\n}\n\nconst StyledCard = styled(MuiCard, {\n shouldForwardProp: (prop) =>\n prop !== 'hoverable' && prop !== 'clickable' && prop !== 'dsVariant' && prop !== 'asButton',\n})<{ hoverable?: boolean; clickable?: boolean; dsVariant: CardVariant; asButton?: boolean }>(\n ({ theme, hoverable, clickable, dsVariant, asButton }) => ({\n borderRadius: 8,\n transition: 'all 0.2s ease-in-out',\n ...(dsVariant === 'standard' && {\n boxShadow: theme.shadows[1],\n backgroundColor: theme.palette.background.paper,\n }),\n ...(dsVariant === 'tinted' && {\n boxShadow: 'none',\n backgroundColor: theme.palette.action.hover,\n border: `1px solid ${theme.palette.divider}`,\n }),\n ...(dsVariant === 'outlined' && {\n boxShadow: 'none',\n backgroundColor: theme.palette.background.paper,\n border: `1px solid ${theme.palette.divider}`,\n }),\n ...((clickable || asButton) && {\n cursor: 'pointer',\n }),\n ...(asButton && {\n // Neutralise ButtonBase defaults (inline-flex + center alignment) so the\n // card lays out exactly like a non-clickable Card. We render as a column\n // flex so consumers can still stack GradientSurface + meta inside.\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'stretch',\n justifyContent: 'flex-start',\n width: '100%',\n textAlign: 'left',\n verticalAlign: 'top',\n font: 'inherit',\n color: 'inherit',\n padding: 0,\n '&:focus-visible': {\n outline: 'none',\n boxShadow: '0 0 0 4px rgba(170,68,242,0.25)',\n },\n }),\n ...(hoverable && {\n '&:hover': {\n boxShadow: theme.shadows[4],\n transform: 'translateY(-2px)',\n },\n }),\n }),\n);\n\nexport const Card = React.forwardRef<HTMLElement, CardProps>(function Card(\n { variant = 'standard', hoverable = false, clickable = false, onClick, children, ...props },\n ref,\n) {\n // Only render as a real button when the consumer EXPLICITLY opts in via\n // `clickable` AND wires an onClick. Inferring from onClick alone would\n // silently turn analytics-tracking cards into <button>s with role=button\n // and break nested forms/links.\n const asButton = clickable && typeof onClick === 'function';\n return (\n <StyledCard\n ref={ref as React.Ref<HTMLDivElement>}\n dsVariant={variant}\n hoverable={hoverable}\n clickable={clickable}\n asButton={asButton}\n // MUI Card accepts a 'variant' prop too (elevation | outlined); we always\n // drive visual via dsVariant + box-shadow, so suppress MUI's default border.\n variant=\"elevation\"\n onClick={onClick}\n // When clickable, render the root as a focusable button so the entire\n // card becomes a real interactive element instead of needing an overlay.\n {...(asButton ? { component: ButtonBase } : {})}\n {...props}\n >\n {children}\n </StyledCard>\n );\n});\n\nexport const CardContent = React.forwardRef<HTMLDivElement, CardContentProps>(\n function CardContent(props, ref) {\n return <MuiCardContent ref={ref} {...props} />;\n },\n);\n\nexport const CardHeader: React.FC<CardHeaderProps> = (props) => {\n return <MuiCardHeader {...props} />;\n};\n\nexport const CardActions: React.FC<CardActionsProps> = (props) => {\n return <MuiCardActions {...props} />;\n};\n","export { Typography } from '@mui/material';\nexport type { TypographyProps } from '@mui/material';\n\n"]}
|