@cere/cere-design-system 0.1.0 → 0.2.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.
Files changed (165) hide show
  1. package/README.md +76 -0
  2. package/dist/buttons.d.mts +27 -22
  3. package/dist/buttons.d.ts +27 -22
  4. package/dist/buttons.js +5 -5
  5. package/dist/buttons.mjs +4 -4
  6. package/dist/charts.d.mts +1 -23
  7. package/dist/charts.d.ts +1 -23
  8. package/dist/charts.js +2 -9
  9. package/dist/charts.js.map +1 -1
  10. package/dist/charts.mjs +1 -8
  11. package/dist/{chunk-THQKYTQE.js → chunk-2KDN37PQ.js} +28 -32
  12. package/dist/chunk-2KDN37PQ.js.map +1 -0
  13. package/dist/{chunk-3WCMINE5.mjs → chunk-34LFXT6C.mjs} +25 -29
  14. package/dist/chunk-34LFXT6C.mjs.map +1 -0
  15. package/dist/chunk-3KCXCVOX.mjs +411 -0
  16. package/dist/chunk-3KCXCVOX.mjs.map +1 -0
  17. package/dist/{chunk-NXTVJ6PY.js → chunk-4OKTICU5.js} +10 -10
  18. package/dist/chunk-4OKTICU5.js.map +1 -0
  19. package/dist/{chunk-FN5YL4BK.js → chunk-72TQ56EP.js} +47 -45
  20. package/dist/chunk-72TQ56EP.js.map +1 -0
  21. package/dist/{chunk-QYYQYZHV.js → chunk-7KXKK2RE.js} +3 -5
  22. package/dist/chunk-7KXKK2RE.js.map +1 -0
  23. package/dist/{chunk-CCN6M4LI.js → chunk-ARSCL4ZZ.js} +18 -10
  24. package/dist/chunk-ARSCL4ZZ.js.map +1 -0
  25. package/dist/chunk-AWVNEU6R.mjs +1478 -0
  26. package/dist/chunk-AWVNEU6R.mjs.map +1 -0
  27. package/dist/{chunk-CUCKULYC.mjs → chunk-BH4FNZKK.mjs} +74 -1260
  28. package/dist/chunk-BH4FNZKK.mjs.map +1 -0
  29. package/dist/{chunk-FFZ5S7PQ.mjs → chunk-BOQPWZIB.mjs} +6 -5
  30. package/dist/chunk-BOQPWZIB.mjs.map +1 -0
  31. package/dist/chunk-BT7XUTT5.mjs +392 -0
  32. package/dist/chunk-BT7XUTT5.mjs.map +1 -0
  33. package/dist/{chunk-ATIFLPH6.mjs → chunk-D7D25O6E.mjs} +4 -2
  34. package/dist/{chunk-ATIFLPH6.mjs.map → chunk-D7D25O6E.mjs.map} +1 -1
  35. package/dist/{chunk-JS4IB5IU.mjs → chunk-DRGMEIPT.mjs} +2 -2
  36. package/dist/chunk-DRGMEIPT.mjs.map +1 -0
  37. package/dist/{chunk-KF2Y7HO3.js → chunk-DZXNYLVG.js} +43 -246
  38. package/dist/chunk-DZXNYLVG.js.map +1 -0
  39. package/dist/{chunk-IE6GCHDI.mjs → chunk-GR52ENYI.mjs} +26 -29
  40. package/dist/chunk-GR52ENYI.mjs.map +1 -0
  41. package/dist/chunk-GTBKQXXI.js +1472 -0
  42. package/dist/chunk-GTBKQXXI.js.map +1 -0
  43. package/dist/{chunk-463SRKKD.js → chunk-HJ24WKU4.js} +14 -5
  44. package/dist/chunk-HJ24WKU4.js.map +1 -0
  45. package/dist/{chunk-EOF3QNPF.js → chunk-KKIKOIMP.js} +140 -1028
  46. package/dist/chunk-KKIKOIMP.js.map +1 -0
  47. package/dist/{chunk-MNM6HE72.js → chunk-LVJSKRX3.js} +16 -15
  48. package/dist/chunk-LVJSKRX3.js.map +1 -0
  49. package/dist/{chunk-KPDYKK3V.js → chunk-PFZZJZ64.js} +8 -8
  50. package/dist/{chunk-KPDYKK3V.js.map → chunk-PFZZJZ64.js.map} +1 -1
  51. package/dist/{chunk-KVBMZNWT.mjs → chunk-POCAW2G4.mjs} +18 -10
  52. package/dist/chunk-POCAW2G4.mjs.map +1 -0
  53. package/dist/{chunk-L2TIGA7I.js → chunk-QCFLZ7X3.js} +39 -42
  54. package/dist/chunk-QCFLZ7X3.js.map +1 -0
  55. package/dist/{chunk-6EUAU67C.mjs → chunk-SG2TD7FQ.mjs} +8 -8
  56. package/dist/chunk-SG2TD7FQ.mjs.map +1 -0
  57. package/dist/{chunk-QY65OUAC.mjs → chunk-SSFALO6S.mjs} +13 -4
  58. package/dist/chunk-SSFALO6S.mjs.map +1 -0
  59. package/dist/{chunk-PWF2NJDB.mjs → chunk-WC2TCWXK.mjs} +82 -14
  60. package/dist/chunk-WC2TCWXK.mjs.map +1 -0
  61. package/dist/{chunk-ZGCN5WCG.js → chunk-XZZZ4MZV.js} +83 -15
  62. package/dist/chunk-XZZZ4MZV.js.map +1 -0
  63. package/dist/chunk-YCDCQSYH.js +411 -0
  64. package/dist/chunk-YCDCQSYH.js.map +1 -0
  65. package/dist/{chunk-CWJ4OU6W.mjs → chunk-ZDAZYIXB.mjs} +2 -4
  66. package/dist/chunk-ZDAZYIXB.mjs.map +1 -0
  67. package/dist/feedback.d.mts +20 -8
  68. package/dist/feedback.d.ts +20 -8
  69. package/dist/feedback.js +5 -5
  70. package/dist/feedback.mjs +4 -4
  71. package/dist/fonts/HumanSans-BlackOblique.otf +0 -0
  72. package/dist/fonts/HumanSans-Thin.otf +0 -0
  73. package/dist/fonts/HumanSans-ThinOblique.otf +0 -0
  74. package/dist/fonts/human-sans-font.css +88 -0
  75. package/dist/fonts/human-sans.css +3 -0
  76. package/dist/fonts/inter.css +3 -0
  77. package/dist/icons.d.mts +2 -3
  78. package/dist/icons.d.ts +2 -3
  79. package/dist/icons.js +2 -2
  80. package/dist/icons.mjs +1 -1
  81. package/dist/index.d.mts +37 -8
  82. package/dist/index.d.ts +37 -8
  83. package/dist/index.js +23 -90
  84. package/dist/index.js.map +1 -1
  85. package/dist/index.mjs +46 -113
  86. package/dist/index.mjs.map +1 -1
  87. package/dist/inputs.d.mts +23 -3
  88. package/dist/inputs.d.ts +23 -3
  89. package/dist/inputs.js +5 -5
  90. package/dist/inputs.js.map +1 -1
  91. package/dist/inputs.mjs +15 -15
  92. package/dist/layout.d.mts +37 -283
  93. package/dist/layout.d.ts +37 -283
  94. package/dist/layout.js +8 -32
  95. package/dist/layout.js.map +1 -1
  96. package/dist/layout.mjs +16 -40
  97. package/dist/navigation.d.mts +9 -114
  98. package/dist/navigation.d.ts +9 -114
  99. package/dist/navigation.js +5 -9
  100. package/dist/navigation.js.map +1 -1
  101. package/dist/navigation.mjs +6 -10
  102. package/dist/third-party.d.mts +3 -527
  103. package/dist/third-party.d.ts +3 -527
  104. package/dist/third-party.js +2 -40
  105. package/dist/third-party.js.map +1 -1
  106. package/dist/third-party.mjs +3 -41
  107. package/dist/tokens.css +45 -71
  108. package/dist/utilities.js +2 -4
  109. package/dist/utilities.js.map +1 -1
  110. package/dist/utilities.mjs +2 -4
  111. package/package.json +23 -9
  112. package/dist/WorkflowNode-BnxXO6t_.d.mts +0 -46
  113. package/dist/WorkflowNode-BnxXO6t_.d.ts +0 -46
  114. package/dist/chunk-27JEWSWA.mjs +0 -233
  115. package/dist/chunk-27JEWSWA.mjs.map +0 -1
  116. package/dist/chunk-3WCMINE5.mjs.map +0 -1
  117. package/dist/chunk-463SRKKD.js.map +0 -1
  118. package/dist/chunk-6EUAU67C.mjs.map +0 -1
  119. package/dist/chunk-AIY6222Q.js +0 -11
  120. package/dist/chunk-AIY6222Q.js.map +0 -1
  121. package/dist/chunk-AJBM7IE6.mjs +0 -2366
  122. package/dist/chunk-AJBM7IE6.mjs.map +0 -1
  123. package/dist/chunk-CCN6M4LI.js.map +0 -1
  124. package/dist/chunk-CUCKULYC.mjs.map +0 -1
  125. package/dist/chunk-CWJ4OU6W.mjs.map +0 -1
  126. package/dist/chunk-EOF3QNPF.js.map +0 -1
  127. package/dist/chunk-FFZ5S7PQ.mjs.map +0 -1
  128. package/dist/chunk-FN5YL4BK.js.map +0 -1
  129. package/dist/chunk-HLH2VWXL.js +0 -2658
  130. package/dist/chunk-HLH2VWXL.js.map +0 -1
  131. package/dist/chunk-IE6GCHDI.mjs.map +0 -1
  132. package/dist/chunk-JS4IB5IU.mjs.map +0 -1
  133. package/dist/chunk-KF2Y7HO3.js.map +0 -1
  134. package/dist/chunk-KVBMZNWT.mjs.map +0 -1
  135. package/dist/chunk-L2TIGA7I.js.map +0 -1
  136. package/dist/chunk-MNM6HE72.js.map +0 -1
  137. package/dist/chunk-NXTVJ6PY.js.map +0 -1
  138. package/dist/chunk-PWF2NJDB.mjs.map +0 -1
  139. package/dist/chunk-QD6RLAO2.mjs +0 -11
  140. package/dist/chunk-QD6RLAO2.mjs.map +0 -1
  141. package/dist/chunk-QY65OUAC.mjs.map +0 -1
  142. package/dist/chunk-QYYQYZHV.js.map +0 -1
  143. package/dist/chunk-T7LPABOL.mjs +0 -595
  144. package/dist/chunk-T7LPABOL.mjs.map +0 -1
  145. package/dist/chunk-THQKYTQE.js.map +0 -1
  146. package/dist/chunk-X7E6GMFL.js +0 -233
  147. package/dist/chunk-X7E6GMFL.js.map +0 -1
  148. package/dist/chunk-XF66WQZE.mjs +0 -1535
  149. package/dist/chunk-XF66WQZE.mjs.map +0 -1
  150. package/dist/chunk-YQOZPLTY.js +0 -1535
  151. package/dist/chunk-YQOZPLTY.js.map +0 -1
  152. package/dist/chunk-ZGCN5WCG.js.map +0 -1
  153. package/dist/index.css +0 -79
  154. package/dist/index.css.map +0 -1
  155. /package/dist/{HumanSans-Black-C4YJONK7.otf → fonts/HumanSans-Black.otf} +0 -0
  156. /package/dist/{HumanSans-Bold-4EAJ3L3T.otf → fonts/HumanSans-Bold.otf} +0 -0
  157. /package/dist/{HumanSans-BoldOblique-4D325T4F.otf → fonts/HumanSans-BoldOblique.otf} +0 -0
  158. /package/dist/{HumanSans-ExtraLight-VL7DEKQ4.otf → fonts/HumanSans-ExtraLight.otf} +0 -0
  159. /package/dist/{HumanSans-ExtraLightOblique-VK2JTUXF.otf → fonts/HumanSans-ExtraLightOblique.otf} +0 -0
  160. /package/dist/{HumanSans-Light-YV7AFKRB.otf → fonts/HumanSans-Light.otf} +0 -0
  161. /package/dist/{HumanSans-LightOblique-VIXV7QA6.otf → fonts/HumanSans-LightOblique.otf} +0 -0
  162. /package/dist/{HumanSans-Medium-UULJ3PIR.otf → fonts/HumanSans-Medium.otf} +0 -0
  163. /package/dist/{HumanSans-MediumOblique-M7FHDZRS.otf → fonts/HumanSans-MediumOblique.otf} +0 -0
  164. /package/dist/{HumanSans-Regular-QMFEP3F6.otf → fonts/HumanSans-Regular.otf} +0 -0
  165. /package/dist/{HumanSans-RegularOblique-YPKQJAAM.otf → fonts/HumanSans-RegularOblique.otf} +0 -0
package/dist/tokens.css CHANGED
@@ -1,78 +1,52 @@
1
- /*
2
- * @cere/cere-design-system root CSS tokens.
3
- *
4
- * Mirror of `webSurfaceTokens` / `motion` / `borderRadius` / font families.
5
- * Import once at app root: import '@cere/cere-design-system/tokens.css';
6
- *
7
- * The companion test (src/theme/__tests__/webSurfaceTokens.test.ts) locks
8
- * this file against the JS token modules — if values drift, the build fails.
1
+ /**
2
+ * Do not edit directly, this file was auto-generated.
9
3
  */
10
4
 
11
5
  :root {
12
- /* Brand */
13
- --c-violet: #aa44f2;
14
- --c-violet-tint: #a54aff;
15
- --c-violet-light: #f0e0fb;
16
- --c-violet-dark: #7c59ac;
17
- --c-pink: #f941e6;
18
- --c-pink-light: #fcdff9;
19
- --c-red: #ff4f59;
20
- --c-green: #49bf63;
21
- --c-blue-light: #e7f4fe;
22
- --c-blue-dark: #598ab8;
23
-
24
- /* ROB extended */
25
- --rob-fandango: #BD32A7;
6
+ --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'HumanSans', sans-serif;
7
+ --font-display: 'Inter', sans-serif;
8
+ --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
9
+ --c-violet-light: #f0e0fb;
10
+ --c-violet: #aa44f2;
11
+ --c-violet-dark: #7c59ac;
12
+ --c-violet-tint: #a54aff;
13
+ --c-pink: #f941e6;
14
+ --c-pink-light: #fcdff9;
15
+ --c-red: #ff4f59;
16
+ --c-green: #49bf63;
17
+ --c-blue-light: #e7f4fe;
18
+ --c-blue-dark: #598ab8;
19
+ --surface-low: #f5f1f7;
20
+ --surface-mid: #f5f1f7;
21
+ --surface-high: #fefcff;
22
+ --surface-contrast: #ffffff;
23
+ --bg-default: #f5f5f5;
24
+ --bg-dim: #e6e0e9;
25
+ --bg-success: #eef5f0;
26
+ --bg-warning: #fef8e8;
27
+ --bg-danger: #f9dedc;
28
+ --text-on-danger: #8c1d18;
29
+ --text-primary: #1d1b20;
30
+ --text-secondary: #5f5c64;
31
+ --text-muted: #938f99;
32
+ --stroke-on-low: #e6e0e9;
33
+ --stroke-on-med: #dad1e0;
34
+ --rob-fandango: #BD32A7;
26
35
  --rob-electric-violet: #8B00EC;
27
- --rob-ultra-violet: #6750A4;
28
- --rob-bright-1: #5311e3;
29
- --rob-near-black-2: #0d0627;
30
- --rob-near-black-4: #23194b;
31
- --rob-periwinkle: #D0BCFF;
32
-
33
- /* Surfaces */
34
- --surface-low: #f5f1f7;
35
- --surface-mid: #f5f1f7;
36
- --surface-high: #fefcff;
37
- --surface-contrast: #ffffff;
38
-
39
- /* Backgrounds */
40
- --bg-default: #f5f5f5;
41
- --bg-dim: #e6e0e9;
42
- --bg-success: #eef5f0;
43
- --bg-warning: #fef8e8;
44
- --bg-danger: #f9dedc;
45
- /* Foreground for content sitting on var(--bg-danger). NOT a surface. */
46
- --text-on-danger: #8c1d18;
47
-
48
- /* Text */
49
- --text-primary: #1d1b20;
50
- --text-secondary: #5f5c64;
51
- --text-muted: #938f99;
52
- --text-link: #aa44f2;
53
-
54
- /* Strokes */
55
- --stroke-on-low: #e6e0e9;
56
- --stroke-on-med: #dad1e0;
57
-
58
- /* Radius */
59
- --radius-sm: 8px;
60
- --radius-md: 12px;
61
- --radius-lg: 16px;
62
- --radius-xl: 20px;
63
- --radius-pill: 999px;
64
-
65
- /* Elevation */
66
- --shadow-sm: 0px 2px 8px rgba(0,0,0,0.04);
67
- --shadow-md: 0px 4px 20px rgba(0,0,0,0.05);
36
+ --rob-ultra-violet: #6750A4;
37
+ --rob-periwinkle: #D0BCFF;
38
+ --rob-bright-1: #5311e3;
39
+ --rob-near-black-2: #0d0627;
40
+ --rob-near-black-4: #23194b;
41
+ --shadow-sm: 0px 2px 8px rgba(0,0,0,0.04);
42
+ --shadow-md: 0px 4px 20px rgba(0,0,0,0.05);
68
43
  --shadow-focus: 0 0 0 4px rgba(170,68,242,0.25);
69
-
70
- /* Motion */
44
+ --radius-sm: 8px;
45
+ --radius-md: 12px;
46
+ --radius-lg: 16px;
47
+ --radius-xl: 20px;
48
+ --radius-pill: 999px;
49
+ --dur-fast: 120ms;
71
50
  --ease-standard: cubic-bezier(0.2, 0, 0, 1);
72
- --dur-fast: 120ms;
73
-
74
- /* Type */
75
- --font-sans: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
76
- --font-display: 'Inter', sans-serif;
77
- --font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
51
+ --text-link: #aa44f2;
78
52
  }
package/dist/utilities.js CHANGED
@@ -4,16 +4,14 @@
4
4
 
5
5
 
6
6
 
7
- var _chunk463SRKKDjs = require('./chunk-463SRKKD.js');
8
7
 
8
+ var _chunkHJ24WKU4js = require('./chunk-HJ24WKU4.js');
9
9
 
10
- var _chunkAIY6222Qjs = require('./chunk-AIY6222Q.js');
11
10
 
12
11
 
13
12
 
14
13
 
15
14
 
16
15
 
17
-
18
- exports.BytesSize = _chunkAIY6222Qjs.BytesSize; exports.Markdown = _chunk463SRKKDjs.Markdown; exports.OnboardingProvider = _chunk463SRKKDjs.OnboardingProvider; exports.QRCode = _chunk463SRKKDjs.QRCode; exports.Truncate = _chunk463SRKKDjs.Truncate; exports.useOnboarding = _chunk463SRKKDjs.useOnboarding;
16
+ exports.BytesSize = _chunkHJ24WKU4js.BytesSize; exports.Markdown = _chunkHJ24WKU4js.Markdown; exports.OnboardingProvider = _chunkHJ24WKU4js.OnboardingProvider; exports.QRCode = _chunkHJ24WKU4js.QRCode; exports.Truncate = _chunkHJ24WKU4js.Truncate; exports.useOnboarding = _chunkHJ24WKU4js.useOnboarding;
19
17
  //# sourceMappingURL=utilities.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["/home/runner/work/cere-design-system/cere-design-system/dist/utilities.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,+SAAC","file":"/home/runner/work/cere-design-system/cere-design-system/dist/utilities.js"}
1
+ {"version":3,"sources":["/home/runner/work/cere-design-system/cere-design-system/dist/utilities.js"],"names":[],"mappings":"AAAA;AACE;AACA;AACA;AACA;AACA;AACA;AACF,sDAA4B;AAC5B;AACE;AACA;AACA;AACA;AACA;AACA;AACF,+SAAC","file":"/home/runner/work/cere-design-system/cere-design-system/dist/utilities.js"}
@@ -1,13 +1,11 @@
1
1
  import {
2
+ BytesSize,
2
3
  Markdown,
3
4
  OnboardingProvider,
4
5
  QRCode,
5
6
  Truncate,
6
7
  useOnboarding
7
- } from "./chunk-QY65OUAC.mjs";
8
- import {
9
- BytesSize
10
- } from "./chunk-QD6RLAO2.mjs";
8
+ } from "./chunk-SSFALO6S.mjs";
11
9
  export {
12
10
  BytesSize,
13
11
  Markdown,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cere/cere-design-system",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Cere Network Design System - UI component library built with Material UI and React",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -61,18 +61,23 @@
61
61
  "import": "./dist/carousel.mjs",
62
62
  "require": "./dist/carousel.js"
63
63
  },
64
- "./tokens.css": "./dist/tokens.css"
64
+ "./tokens.css": "./dist/tokens.css",
65
+ "./fonts/inter.css": "./dist/fonts/inter.css",
66
+ "./fonts/human-sans.css": "./dist/fonts/human-sans.css"
65
67
  },
66
68
  "sideEffects": [
67
69
  "**/*.css",
68
- "./dist/tokens.css"
70
+ "./dist/tokens.css",
71
+ "./dist/fonts/inter.css",
72
+ "./dist/fonts/human-sans.css"
69
73
  ],
70
74
  "files": [
71
75
  "dist",
72
76
  ".specify/memory"
73
77
  ],
74
78
  "scripts": {
75
- "build": "tsup",
79
+ "tokens:build": "style-dictionary build --config style-dictionary.config.mjs",
80
+ "build": "npm run tokens:build && tsup",
76
81
  "dev": "tsup --watch",
77
82
  "storybook": "storybook dev -p 6006",
78
83
  "build-storybook": "storybook build",
@@ -85,9 +90,13 @@
85
90
  "lint:fix": "eslint . --ext ts,tsx --fix",
86
91
  "type-check": "tsc --noEmit",
87
92
  "check-types:ci": "tsc --noEmit",
88
- "prepublishOnly": "npm run build"
93
+ "prepublishOnly": "npm run build",
94
+ "changeset": "changeset",
95
+ "version:changesets": "changeset version",
96
+ "release": "npm run build && changeset publish"
89
97
  },
90
98
  "dependencies": {
99
+ "@fontsource-variable/inter": "^5.2.8",
91
100
  "byte-size": "^9.0.0",
92
101
  "date-fns": "^3.6.0",
93
102
  "github-markdown-css": "^5.6.1",
@@ -110,8 +119,7 @@
110
119
  "embla-carousel-autoplay": "^8.0.0",
111
120
  "embla-carousel-react": "^8.0.0",
112
121
  "react": "^18.2.0 || ^19.0.0",
113
- "react-dom": "^18.2.0 || ^19.0.0",
114
- "reactflow": "^11.11.4"
122
+ "react-dom": "^18.2.0 || ^19.0.0"
115
123
  },
116
124
  "peerDependenciesMeta": {
117
125
  "embla-carousel-autoplay": {
@@ -123,6 +131,7 @@
123
131
  },
124
132
  "devDependencies": {
125
133
  "@axe-core/playwright": "^4.10.0",
134
+ "@changesets/cli": "^2.31.0",
126
135
  "@emotion/react": "^11.14.0",
127
136
  "@emotion/styled": "^11.14.0",
128
137
  "@jest/globals": "^29.7.0",
@@ -145,28 +154,33 @@
145
154
  "@testing-library/user-event": "^14.5.2",
146
155
  "@types/byte-size": "^8.1.2",
147
156
  "@types/jest": "^29.5.14",
157
+ "@types/jest-image-snapshot": "^6.4.1",
148
158
  "@types/node": "^22.13.10",
149
159
  "@types/react": "^18.2.64",
150
160
  "@types/react-dom": "^18.2.21",
151
161
  "@typescript-eslint/eslint-plugin": "^8.0.0",
152
162
  "@typescript-eslint/parser": "^8.0.0",
153
163
  "@vitejs/plugin-react": "^4.2.1",
164
+ "concurrently": "^9.2.3",
165
+ "embla-carousel-autoplay": "^8.6.0",
166
+ "embla-carousel-react": "^8.6.0",
154
167
  "eslint": "^8.57.0",
155
168
  "eslint-plugin-react": "^7.34.1",
156
169
  "eslint-plugin-react-hooks": "^4.6.0",
157
170
  "eslint-plugin-react-refresh": "^0.4.11",
158
171
  "eslint-plugin-storybook": "^0.11.2",
159
- "embla-carousel-autoplay": "^8.6.0",
160
- "embla-carousel-react": "^8.6.0",
172
+ "http-server": "^14.1.1",
161
173
  "identity-obj-proxy": "^3.0.0",
162
174
  "jest": "^29.7.0",
163
175
  "jest-environment-jsdom": "^29.7.0",
176
+ "jest-image-snapshot": "^6.5.2",
164
177
  "monaco-editor": "^0.55.1",
165
178
  "playwright": "^1.48.0",
166
179
  "react": "^18.2.0",
167
180
  "react-dom": "^18.2.0",
168
181
  "reactflow": "^11.11.4",
169
182
  "storybook": "^8.4.7",
183
+ "style-dictionary": "^4.4.0",
170
184
  "ts-jest": "^29.2.5",
171
185
  "tsup": "^8.3.5",
172
186
  "typescript": "^5.2.2",
@@ -1,46 +0,0 @@
1
- import React__default from 'react';
2
- import { PaperProps } from '@mui/material/Paper';
3
-
4
- /** All supported workflow node types */
5
- type WorkflowNodeType = 'start' | 'input' | 'stream' | 'rafts' | 'cubbies' | 'events' | 'trigger' | 'action' | 'aiModel' | 'aiAgent' | 'condition' | 'output' | 'end' | 'parallel' | 'merge';
6
- interface WorkflowNodeProps extends Omit<PaperProps, 'title'> {
7
- /** The workflow node type — drives accent color, default icon, and badge label */
8
- nodeType: WorkflowNodeType;
9
- /** Primary title displayed in the node */
10
- title: string;
11
- /** Optional description text below the title */
12
- description?: string;
13
- /** Override the default icon for this node type */
14
- icon?: React__default.ReactNode;
15
- /** Override the default badge label for this node type */
16
- badgeLabel?: string;
17
- /** Whether the node is currently selected (highlights border with accent color) */
18
- selected?: boolean;
19
- /** Optional className */
20
- className?: string;
21
- /** Renders left/right connector dots to match the design spec */
22
- showSideDots?: boolean;
23
- }
24
- /** Human-readable labels for each node type (matches Figma badge text) */
25
- declare const WORKFLOW_NODE_LABELS: Record<WorkflowNodeType, string>;
26
- /** Shared elevation shadow for workflow node cards and connector handles (Figma 277-8244) */
27
- declare const WORKFLOW_NODE_SHADOW = "0px 1px 3px rgba(0, 0, 0, 0.1), 0px 1px 2px rgba(0, 0, 0, 0.1)";
28
- /**
29
- * WorkflowNode — visual card for a workflow editor node.
30
- *
31
- * Renders a card with a colored left border strip, title, optional description,
32
- * and a type badge/chip. Designed to integrate with FlowEditor (ReactFlow)
33
- * via the WorkflowNodeHandle wrapper.
34
- *
35
- * @example
36
- * ```tsx
37
- * <WorkflowNode
38
- * nodeType="trigger"
39
- * title="HTTP Trigger"
40
- * description="Listens for incoming webhook calls"
41
- * />
42
- * ```
43
- */
44
- declare const WorkflowNode: React__default.FC<WorkflowNodeProps>;
45
-
46
- export { WORKFLOW_NODE_LABELS as W, WORKFLOW_NODE_SHADOW as a, WorkflowNode as b, type WorkflowNodeProps as c, type WorkflowNodeType as d };
@@ -1,46 +0,0 @@
1
- import React__default from 'react';
2
- import { PaperProps } from '@mui/material/Paper';
3
-
4
- /** All supported workflow node types */
5
- type WorkflowNodeType = 'start' | 'input' | 'stream' | 'rafts' | 'cubbies' | 'events' | 'trigger' | 'action' | 'aiModel' | 'aiAgent' | 'condition' | 'output' | 'end' | 'parallel' | 'merge';
6
- interface WorkflowNodeProps extends Omit<PaperProps, 'title'> {
7
- /** The workflow node type — drives accent color, default icon, and badge label */
8
- nodeType: WorkflowNodeType;
9
- /** Primary title displayed in the node */
10
- title: string;
11
- /** Optional description text below the title */
12
- description?: string;
13
- /** Override the default icon for this node type */
14
- icon?: React__default.ReactNode;
15
- /** Override the default badge label for this node type */
16
- badgeLabel?: string;
17
- /** Whether the node is currently selected (highlights border with accent color) */
18
- selected?: boolean;
19
- /** Optional className */
20
- className?: string;
21
- /** Renders left/right connector dots to match the design spec */
22
- showSideDots?: boolean;
23
- }
24
- /** Human-readable labels for each node type (matches Figma badge text) */
25
- declare const WORKFLOW_NODE_LABELS: Record<WorkflowNodeType, string>;
26
- /** Shared elevation shadow for workflow node cards and connector handles (Figma 277-8244) */
27
- declare const WORKFLOW_NODE_SHADOW = "0px 1px 3px rgba(0, 0, 0, 0.1), 0px 1px 2px rgba(0, 0, 0, 0.1)";
28
- /**
29
- * WorkflowNode — visual card for a workflow editor node.
30
- *
31
- * Renders a card with a colored left border strip, title, optional description,
32
- * and a type badge/chip. Designed to integrate with FlowEditor (ReactFlow)
33
- * via the WorkflowNodeHandle wrapper.
34
- *
35
- * @example
36
- * ```tsx
37
- * <WorkflowNode
38
- * nodeType="trigger"
39
- * title="HTTP Trigger"
40
- * description="Listens for incoming webhook calls"
41
- * />
42
- * ```
43
- */
44
- declare const WorkflowNode: React__default.FC<WorkflowNodeProps>;
45
-
46
- export { WORKFLOW_NODE_LABELS as W, WORKFLOW_NODE_SHADOW as a, WorkflowNode as b, type WorkflowNodeProps as c, type WorkflowNodeType as d };
@@ -1,233 +0,0 @@
1
- // src/components/layout/WorkflowNode/WorkflowNode.tsx
2
- import { Paper, Box, Typography } from "@mui/material";
3
- import PlayCircleOutlineIcon from "@mui/icons-material/PlayCircleOutline";
4
- import CloudDownloadIcon from "@mui/icons-material/CloudDownload";
5
- import WavesIcon from "@mui/icons-material/Waves";
6
- import LinkIcon from "@mui/icons-material/Link";
7
- import CloudIcon from "@mui/icons-material/Cloud";
8
- import BoltIcon from "@mui/icons-material/Bolt";
9
- import FlashOnIcon from "@mui/icons-material/FlashOn";
10
- import PlayArrowIcon from "@mui/icons-material/PlayArrow";
11
- import PsychologyIcon from "@mui/icons-material/Psychology";
12
- import SmartToyOutlinedIcon from "@mui/icons-material/SmartToyOutlined";
13
- import CallSplitIcon from "@mui/icons-material/CallSplit";
14
- import SendIcon from "@mui/icons-material/Send";
15
- import CheckCircleOutlineIcon from "@mui/icons-material/CheckCircleOutline";
16
- import ForkRightIcon from "@mui/icons-material/ForkRight";
17
- import CallMergeIcon from "@mui/icons-material/CallMerge";
18
- import { useTheme } from "@mui/material";
19
- import { jsx, jsxs } from "react/jsx-runtime";
20
- var WORKFLOW_NODE_LABELS = {
21
- start: "Start",
22
- input: "Input",
23
- stream: "Stream",
24
- rafts: "Rafts",
25
- cubbies: "Cubbies",
26
- events: "Events",
27
- trigger: "Trigger",
28
- action: "Action",
29
- aiModel: "AI Model",
30
- aiAgent: "Agent",
31
- condition: "Condition",
32
- output: "Output",
33
- end: "End",
34
- parallel: "Parallel",
35
- merge: "Merge"
36
- };
37
- var NODE_ICON_SIZE = 18;
38
- var WORKFLOW_NODE_SHADOW = "0px 1px 3px rgba(0, 0, 0, 0.1), 0px 1px 2px rgba(0, 0, 0, 0.1)";
39
- var WORKFLOW_NODE_ICONS = {
40
- start: /* @__PURE__ */ jsx(PlayCircleOutlineIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
41
- input: /* @__PURE__ */ jsx(CloudDownloadIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
42
- stream: /* @__PURE__ */ jsx(WavesIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
43
- rafts: /* @__PURE__ */ jsx(LinkIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
44
- cubbies: /* @__PURE__ */ jsx(CloudIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
45
- events: /* @__PURE__ */ jsx(BoltIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
46
- trigger: /* @__PURE__ */ jsx(FlashOnIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
47
- action: /* @__PURE__ */ jsx(PlayArrowIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
48
- aiModel: /* @__PURE__ */ jsx(PsychologyIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
49
- aiAgent: /* @__PURE__ */ jsx(SmartToyOutlinedIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
50
- condition: /* @__PURE__ */ jsx(CallSplitIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
51
- output: /* @__PURE__ */ jsx(SendIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
52
- end: /* @__PURE__ */ jsx(CheckCircleOutlineIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
53
- parallel: /* @__PURE__ */ jsx(ForkRightIcon, { sx: { fontSize: NODE_ICON_SIZE } }),
54
- merge: /* @__PURE__ */ jsx(CallMergeIcon, { sx: { fontSize: NODE_ICON_SIZE } })
55
- };
56
- var BADGE_TYPOGRAPHY = {
57
- fontSize: "12px",
58
- fontWeight: 500,
59
- lineHeight: 1.33
60
- };
61
- var SideConnectorDot = ({
62
- accentColor,
63
- side
64
- }) => /* @__PURE__ */ jsx(
65
- Box,
66
- {
67
- "data-testid": `workflow-node-dot-${side}`,
68
- sx: (theme) => ({
69
- position: "absolute",
70
- top: "50%",
71
- [side]: "-4px",
72
- transform: "translateY(-50%)",
73
- width: "8px",
74
- height: "8px",
75
- borderRadius: "999px",
76
- border: `2px solid ${theme.palette.common.white}`,
77
- backgroundColor: accentColor,
78
- boxShadow: WORKFLOW_NODE_SHADOW,
79
- zIndex: 1,
80
- pointerEvents: "none"
81
- })
82
- }
83
- );
84
- var NodeTypeBadge = ({ nodeType, badgeBackground, badgeBorder, badgeText, icon, label }) => /* @__PURE__ */ jsxs(
85
- Box,
86
- {
87
- sx: {
88
- display: "inline-flex",
89
- alignItems: "center",
90
- justifyContent: "center",
91
- gap: 1,
92
- px: 1,
93
- py: 0.5,
94
- borderRadius: "999px",
95
- backgroundColor: badgeBackground,
96
- border: `1px solid ${badgeBorder}`,
97
- flexShrink: 0
98
- },
99
- children: [
100
- /* @__PURE__ */ jsx(Box, { sx: { color: badgeText, display: "flex", alignItems: "center" }, children: icon ?? WORKFLOW_NODE_ICONS[nodeType] }),
101
- /* @__PURE__ */ jsx(
102
- Typography,
103
- {
104
- variant: "body2",
105
- component: "span",
106
- sx: {
107
- color: badgeText,
108
- fontWeight: BADGE_TYPOGRAPHY.fontWeight,
109
- fontSize: BADGE_TYPOGRAPHY.fontSize,
110
- lineHeight: BADGE_TYPOGRAPHY.lineHeight
111
- },
112
- children: label ?? WORKFLOW_NODE_LABELS[nodeType]
113
- }
114
- )
115
- ]
116
- }
117
- );
118
- var WorkflowNode = ({
119
- nodeType,
120
- title,
121
- description,
122
- icon,
123
- badgeLabel,
124
- selected = false,
125
- className,
126
- showSideDots = true,
127
- sx,
128
- ...paperProps
129
- }) => {
130
- const theme = useTheme();
131
- const nodeTokens = theme.palette.workflow.node[nodeType];
132
- const chrome = theme.palette.workflow.chrome;
133
- const accentColor = nodeTokens.accent;
134
- return /* @__PURE__ */ jsxs(
135
- Paper,
136
- {
137
- elevation: 0,
138
- className,
139
- sx: [
140
- {
141
- display: "flex",
142
- flexDirection: "row",
143
- position: "relative",
144
- overflow: "visible",
145
- border: `1px solid ${selected ? accentColor : nodeTokens.cardBorder}`,
146
- borderRadius: "14px",
147
- minWidth: 220,
148
- maxWidth: 460,
149
- minHeight: "76px",
150
- backgroundColor: "common.white",
151
- boxShadow: WORKFLOW_NODE_SHADOW,
152
- transition: "border-color 0.15s ease"
153
- },
154
- ...Array.isArray(sx) ? sx : [sx]
155
- ],
156
- ...paperProps,
157
- children: [
158
- showSideDots && /* @__PURE__ */ jsx(SideConnectorDot, { accentColor, side: "left" }),
159
- showSideDots && /* @__PURE__ */ jsx(SideConnectorDot, { accentColor, side: "right" }),
160
- /* @__PURE__ */ jsxs(
161
- Box,
162
- {
163
- sx: {
164
- flex: 1,
165
- display: "flex",
166
- justifyContent: "space-between",
167
- alignItems: "center",
168
- gap: 2,
169
- px: 2,
170
- py: 2,
171
- minWidth: 0
172
- },
173
- children: [
174
- /* @__PURE__ */ jsxs(Box, { sx: { minWidth: 0, flex: 1 }, children: [
175
- /* @__PURE__ */ jsx(
176
- Typography,
177
- {
178
- variant: "subtitle2",
179
- noWrap: true,
180
- sx: {
181
- color: chrome.titleText,
182
- fontSize: "16px",
183
- fontWeight: 500,
184
- lineHeight: "24px",
185
- letterSpacing: "-0.3125px"
186
- },
187
- children: title
188
- }
189
- ),
190
- description && /* @__PURE__ */ jsx(
191
- Typography,
192
- {
193
- variant: "body2",
194
- sx: {
195
- color: chrome.descriptionText,
196
- fontSize: "12px",
197
- lineHeight: "16px",
198
- mt: 0.25,
199
- overflow: "hidden",
200
- textOverflow: "ellipsis",
201
- display: "-webkit-box",
202
- WebkitLineClamp: 2,
203
- WebkitBoxOrient: "vertical"
204
- },
205
- children: description
206
- }
207
- )
208
- ] }),
209
- /* @__PURE__ */ jsx(
210
- NodeTypeBadge,
211
- {
212
- nodeType,
213
- badgeBackground: nodeTokens.badgeBg,
214
- badgeBorder: nodeTokens.badgeBorder,
215
- badgeText: nodeTokens.badgeText,
216
- icon,
217
- label: badgeLabel
218
- }
219
- )
220
- ]
221
- }
222
- )
223
- ]
224
- }
225
- );
226
- };
227
-
228
- export {
229
- WORKFLOW_NODE_LABELS,
230
- WORKFLOW_NODE_SHADOW,
231
- WorkflowNode
232
- };
233
- //# sourceMappingURL=chunk-27JEWSWA.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/layout/WorkflowNode/WorkflowNode.tsx"],"sourcesContent":["import React from 'react';\nimport { Paper, Box, Typography } from '@mui/material';\nimport type { PaperProps as MuiPaperProps } from '@mui/material/Paper';\nimport PlayCircleOutlineIcon from '@mui/icons-material/PlayCircleOutline';\nimport CloudDownloadIcon from '@mui/icons-material/CloudDownload';\nimport WavesIcon from '@mui/icons-material/Waves';\nimport LinkIcon from '@mui/icons-material/Link';\nimport CloudIcon from '@mui/icons-material/Cloud';\nimport BoltIcon from '@mui/icons-material/Bolt';\nimport FlashOnIcon from '@mui/icons-material/FlashOn';\nimport PlayArrowIcon from '@mui/icons-material/PlayArrow';\nimport PsychologyIcon from '@mui/icons-material/Psychology';\nimport SmartToyOutlinedIcon from '@mui/icons-material/SmartToyOutlined';\nimport CallSplitIcon from '@mui/icons-material/CallSplit';\nimport SendIcon from '@mui/icons-material/Send';\nimport CheckCircleOutlineIcon from '@mui/icons-material/CheckCircleOutline';\nimport ForkRightIcon from '@mui/icons-material/ForkRight';\nimport CallMergeIcon from '@mui/icons-material/CallMerge';\nimport { useTheme } from '@mui/material';\nimport type { Theme } from '@mui/material/styles';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** All supported workflow node types */\nexport type WorkflowNodeType =\n | 'start'\n | 'input'\n | 'stream'\n | 'rafts'\n | 'cubbies'\n | 'events'\n | 'trigger'\n | 'action'\n | 'aiModel'\n | 'aiAgent'\n | 'condition'\n | 'output'\n | 'end'\n | 'parallel'\n | 'merge';\n\nexport interface WorkflowNodeProps extends Omit<MuiPaperProps, 'title'> {\n /** The workflow node type — drives accent color, default icon, and badge label */\n nodeType: WorkflowNodeType;\n /** Primary title displayed in the node */\n title: string;\n /** Optional description text below the title */\n description?: string;\n /** Override the default icon for this node type */\n icon?: React.ReactNode;\n /** Override the default badge label for this node type */\n badgeLabel?: string;\n /** Whether the node is currently selected (highlights border with accent color) */\n selected?: boolean;\n /** Optional className */\n className?: string;\n /** Renders left/right connector dots to match the design spec */\n showSideDots?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Constants\n// ---------------------------------------------------------------------------\n\n/** Human-readable labels for each node type (matches Figma badge text) */\nexport const WORKFLOW_NODE_LABELS: Record<WorkflowNodeType, string> = {\n start: 'Start',\n input: 'Input',\n stream: 'Stream',\n rafts: 'Rafts',\n cubbies: 'Cubbies',\n events: 'Events',\n trigger: 'Trigger',\n action: 'Action',\n aiModel: 'AI Model',\n aiAgent: 'Agent',\n condition: 'Condition',\n output: 'Output',\n end: 'End',\n parallel: 'Parallel',\n merge: 'Merge',\n};\n\nconst NODE_ICON_SIZE = 18;\n\n/** Shared elevation shadow for workflow node cards and connector handles (Figma 277-8244) */\nexport const WORKFLOW_NODE_SHADOW = '0px 1px 3px rgba(0, 0, 0, 0.1), 0px 1px 2px rgba(0, 0, 0, 0.1)';\n\n/** Default icon for each node type */\nconst WORKFLOW_NODE_ICONS: Record<WorkflowNodeType, React.ReactElement> = {\n start: <PlayCircleOutlineIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n input: <CloudDownloadIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n stream: <WavesIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n rafts: <LinkIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n cubbies: <CloudIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n events: <BoltIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n trigger: <FlashOnIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n action: <PlayArrowIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n aiModel: <PsychologyIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n aiAgent: <SmartToyOutlinedIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n condition: <CallSplitIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n output: <SendIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n end: <CheckCircleOutlineIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n parallel: <ForkRightIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n merge: <CallMergeIcon sx={{ fontSize: NODE_ICON_SIZE }} />,\n};\n\nconst BADGE_TYPOGRAPHY = {\n fontSize: '12px',\n fontWeight: 500,\n lineHeight: 1.33,\n} as const;\n\n// ---------------------------------------------------------------------------\n// Sub-components\n// ---------------------------------------------------------------------------\n\n/** Circular connector marker used on left and right sides of the node card */\nconst SideConnectorDot: React.FC<{ accentColor: string; side: 'left' | 'right' }> = ({\n accentColor,\n side,\n}) => (\n <Box\n data-testid={`workflow-node-dot-${side}`}\n sx={(theme) => ({\n position: 'absolute',\n top: '50%',\n [side]: '-4px',\n transform: 'translateY(-50%)',\n width: '8px',\n height: '8px',\n borderRadius: '999px',\n border: `2px solid ${theme.palette.common.white}`,\n backgroundColor: accentColor,\n boxShadow: WORKFLOW_NODE_SHADOW,\n zIndex: 1,\n pointerEvents: 'none',\n })}\n />\n);\n\n/** Outlined soft badge pill showing node type icon + label (Figma 277-8244) */\nconst NodeTypeBadge: React.FC<{\n nodeType: WorkflowNodeType;\n badgeBackground: string;\n badgeBorder: string;\n badgeText: string;\n icon?: React.ReactNode;\n label?: string;\n}> = ({ nodeType, badgeBackground, badgeBorder, badgeText, icon, label }) => (\n <Box\n sx={{\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 1,\n px: 1,\n py: 0.5,\n borderRadius: '999px',\n backgroundColor: badgeBackground,\n border: `1px solid ${badgeBorder}`,\n flexShrink: 0,\n }}\n >\n <Box sx={{ color: badgeText, display: 'flex', alignItems: 'center' }}>\n {icon ?? WORKFLOW_NODE_ICONS[nodeType]}\n </Box>\n <Typography\n variant=\"body2\"\n component=\"span\"\n sx={{\n color: badgeText,\n fontWeight: BADGE_TYPOGRAPHY.fontWeight,\n fontSize: BADGE_TYPOGRAPHY.fontSize,\n lineHeight: BADGE_TYPOGRAPHY.lineHeight,\n }}\n >\n {label ?? WORKFLOW_NODE_LABELS[nodeType]}\n </Typography>\n </Box>\n);\n\n// ---------------------------------------------------------------------------\n// Main component\n// ---------------------------------------------------------------------------\n\n/**\n * WorkflowNode — visual card for a workflow editor node.\n *\n * Renders a card with a colored left border strip, title, optional description,\n * and a type badge/chip. Designed to integrate with FlowEditor (ReactFlow)\n * via the WorkflowNodeHandle wrapper.\n *\n * @example\n * ```tsx\n * <WorkflowNode\n * nodeType=\"trigger\"\n * title=\"HTTP Trigger\"\n * description=\"Listens for incoming webhook calls\"\n * />\n * ```\n */\nexport const WorkflowNode: React.FC<WorkflowNodeProps> = ({\n nodeType,\n title,\n description,\n icon,\n badgeLabel,\n selected = false,\n className,\n showSideDots = true,\n sx,\n ...paperProps\n}) => {\n const theme = useTheme() as Theme;\n const nodeTokens = theme.palette.workflow.node[nodeType];\n const chrome = theme.palette.workflow.chrome;\n const accentColor = nodeTokens.accent;\n\n return (\n <Paper\n elevation={0}\n className={className}\n sx={[\n {\n display: 'flex',\n flexDirection: 'row',\n position: 'relative',\n overflow: 'visible',\n border: `1px solid ${selected ? accentColor : nodeTokens.cardBorder}`,\n borderRadius: '14px',\n minWidth: 220,\n maxWidth: 460,\n minHeight: '76px',\n backgroundColor: 'common.white',\n boxShadow: WORKFLOW_NODE_SHADOW,\n transition: 'border-color 0.15s ease',\n },\n ...(Array.isArray(sx) ? sx : [sx]),\n ]}\n {...paperProps}\n >\n {showSideDots && <SideConnectorDot accentColor={accentColor} side=\"left\" />}\n {showSideDots && <SideConnectorDot accentColor={accentColor} side=\"right\" />}\n\n <Box\n sx={{\n flex: 1,\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n gap: 2,\n px: 2,\n py: 2,\n minWidth: 0,\n }}\n >\n {/* Left: title + description */}\n <Box sx={{ minWidth: 0, flex: 1 }}>\n <Typography\n variant=\"subtitle2\"\n noWrap\n sx={{\n color: chrome.titleText,\n fontSize: '16px',\n fontWeight: 500,\n lineHeight: '24px',\n letterSpacing: '-0.3125px',\n }}\n >\n {title}\n </Typography>\n {description && (\n <Typography\n variant=\"body2\"\n sx={{\n color: chrome.descriptionText,\n fontSize: '12px',\n lineHeight: '16px',\n mt: 0.25,\n overflow: 'hidden',\n textOverflow: 'ellipsis',\n display: '-webkit-box',\n WebkitLineClamp: 2,\n WebkitBoxOrient: 'vertical',\n }}\n >\n {description}\n </Typography>\n )}\n </Box>\n\n {/* Right: filled type badge */}\n <NodeTypeBadge\n nodeType={nodeType}\n badgeBackground={nodeTokens.badgeBg}\n badgeBorder={nodeTokens.badgeBorder}\n badgeText={nodeTokens.badgeText}\n icon={icon}\n label={badgeLabel}\n />\n </Box>\n </Paper>\n );\n};\n"],"mappings":"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","names":[]}