@discourser/design-system 0.15.0 → 0.17.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 (229) hide show
  1. package/dist/chunk-2P7Z5PVP.cjs +2151 -0
  2. package/dist/chunk-2P7Z5PVP.cjs.map +1 -0
  3. package/dist/{chunk-QC44JPCA.cjs → chunk-PFWU7QSM.cjs} +777 -15
  4. package/dist/chunk-PFWU7QSM.cjs.map +1 -0
  5. package/dist/chunk-QC7LGFM3.js +2099 -0
  6. package/dist/chunk-QC7LGFM3.js.map +1 -0
  7. package/dist/{chunk-M7J7WKJY.js → chunk-SNUJBT5R.js} +778 -16
  8. package/dist/chunk-SNUJBT5R.js.map +1 -0
  9. package/dist/components/Accordion.figma.d.ts +2 -0
  10. package/dist/components/Accordion.figma.d.ts.map +1 -0
  11. package/dist/components/Breadcrumb.d.ts +11 -0
  12. package/dist/components/Breadcrumb.d.ts.map +1 -0
  13. package/dist/components/Breadcrumb.figma.d.ts +2 -0
  14. package/dist/components/Breadcrumb.figma.d.ts.map +1 -0
  15. package/dist/components/Checkbox.d.ts +6 -6
  16. package/dist/components/ContentCard/ContentCard.d.ts +13 -0
  17. package/dist/components/ContentCard/ContentCard.d.ts.map +1 -0
  18. package/dist/components/ContentCard/ContentCard.figma.d.ts +2 -0
  19. package/dist/components/ContentCard/ContentCard.figma.d.ts.map +1 -0
  20. package/dist/components/ContentCard/index.d.ts +2 -0
  21. package/dist/components/ContentCard/index.d.ts.map +1 -0
  22. package/dist/components/{Heading.d.ts → Header.d.ts} +3 -3
  23. package/dist/components/Header.d.ts.map +1 -0
  24. package/dist/components/Header.figma.d.ts +2 -0
  25. package/dist/components/Header.figma.d.ts.map +1 -0
  26. package/dist/components/Icons/AccountIcon.d.ts +6 -0
  27. package/dist/components/Icons/AccountIcon.d.ts.map +1 -0
  28. package/dist/components/Icons/ChevronUpIcon.d.ts +6 -0
  29. package/dist/components/Icons/ChevronUpIcon.d.ts.map +1 -0
  30. package/dist/components/Icons/ClockIcon.d.ts +6 -0
  31. package/dist/components/Icons/ClockIcon.d.ts.map +1 -0
  32. package/dist/components/Icons/DashboardIcon.d.ts +6 -0
  33. package/dist/components/Icons/DashboardIcon.d.ts.map +1 -0
  34. package/dist/components/Icons/DiscourserLogo.d.ts +6 -0
  35. package/dist/components/Icons/DiscourserLogo.d.ts.map +1 -0
  36. package/dist/components/Icons/DiscourserLogo.figma.d.ts +2 -0
  37. package/dist/components/Icons/DiscourserLogo.figma.d.ts.map +1 -0
  38. package/dist/components/Icons/GripDotsVerticalIcon.d.ts +6 -0
  39. package/dist/components/Icons/GripDotsVerticalIcon.d.ts.map +1 -0
  40. package/dist/components/Icons/HelpIcon.d.ts +6 -0
  41. package/dist/components/Icons/HelpIcon.d.ts.map +1 -0
  42. package/dist/components/Icons/NotebookIcon.d.ts +6 -0
  43. package/dist/components/Icons/NotebookIcon.d.ts.map +1 -0
  44. package/dist/components/Icons/RightArrowIcon.d.ts +6 -0
  45. package/dist/components/Icons/RightArrowIcon.d.ts.map +1 -0
  46. package/dist/components/Icons/ScenarioIcon.d.ts +6 -0
  47. package/dist/components/Icons/ScenarioIcon.d.ts.map +1 -0
  48. package/dist/components/Icons/index.d.ts +11 -0
  49. package/dist/components/Icons/index.d.ts.map +1 -0
  50. package/dist/components/NavigationMenu/NavigationMenu.d.ts +3 -0
  51. package/dist/components/NavigationMenu/NavigationMenu.d.ts.map +1 -0
  52. package/dist/components/NavigationMenu/NavigationMenu.figma.d.ts +2 -0
  53. package/dist/components/NavigationMenu/NavigationMenu.figma.d.ts.map +1 -0
  54. package/dist/components/NavigationMenu/index.d.ts +3 -0
  55. package/dist/components/NavigationMenu/index.d.ts.map +1 -0
  56. package/dist/components/NavigationMenu/types.d.ts +25 -0
  57. package/dist/components/NavigationMenu/types.d.ts.map +1 -0
  58. package/dist/components/QuickStartPage/QuickStartPage.d.ts +21 -0
  59. package/dist/components/QuickStartPage/QuickStartPage.d.ts.map +1 -0
  60. package/dist/components/QuickStartPage/index.d.ts +3 -0
  61. package/dist/components/QuickStartPage/index.d.ts.map +1 -0
  62. package/dist/components/ScenarioQueue/AddScenarioDialog.d.ts +16 -0
  63. package/dist/components/ScenarioQueue/AddScenarioDialog.d.ts.map +1 -0
  64. package/dist/components/ScenarioQueue/ScenarioCard.d.ts +10 -0
  65. package/dist/components/ScenarioQueue/ScenarioCard.d.ts.map +1 -0
  66. package/dist/components/ScenarioQueue/ScenarioCardDraggable.d.ts +15 -0
  67. package/dist/components/ScenarioQueue/ScenarioCardDraggable.d.ts.map +1 -0
  68. package/dist/components/ScenarioQueue/ScenarioQueue.d.ts +3 -0
  69. package/dist/components/ScenarioQueue/ScenarioQueue.d.ts.map +1 -0
  70. package/dist/components/ScenarioQueue/ScenarioQueue.figma.d.ts +2 -0
  71. package/dist/components/ScenarioQueue/ScenarioQueue.figma.d.ts.map +1 -0
  72. package/dist/components/ScenarioQueue/index.d.ts +6 -0
  73. package/dist/components/ScenarioQueue/index.d.ts.map +1 -0
  74. package/dist/components/ScenarioQueue/types.d.ts +56 -0
  75. package/dist/components/ScenarioQueue/types.d.ts.map +1 -0
  76. package/dist/components/ScenarioSettings/ScenarioSettings.d.ts +3 -0
  77. package/dist/components/ScenarioSettings/ScenarioSettings.d.ts.map +1 -0
  78. package/dist/components/ScenarioSettings/ScenarioSettings.figma.d.ts +2 -0
  79. package/dist/components/ScenarioSettings/ScenarioSettings.figma.d.ts.map +1 -0
  80. package/dist/components/ScenarioSettings/index.d.ts +3 -0
  81. package/dist/components/ScenarioSettings/index.d.ts.map +1 -0
  82. package/dist/components/ScenarioSettings/types.d.ts +54 -0
  83. package/dist/components/ScenarioSettings/types.d.ts.map +1 -0
  84. package/dist/components/index.cjs +110 -34
  85. package/dist/components/index.d.ts +16 -1
  86. package/dist/components/index.d.ts.map +1 -1
  87. package/dist/components/index.js +1 -1
  88. package/dist/figma-codex/config.d.ts +8 -0
  89. package/dist/figma-codex/config.d.ts.map +1 -0
  90. package/dist/figma-codex/fixtures/CompoundComponent/CompoundComponent.d.ts +6 -0
  91. package/dist/figma-codex/fixtures/CompoundComponent/CompoundComponent.d.ts.map +1 -0
  92. package/dist/figma-codex/fixtures/CompoundComponent/index.d.ts +2 -0
  93. package/dist/figma-codex/fixtures/CompoundComponent/index.d.ts.map +1 -0
  94. package/dist/figma-codex/fixtures/CompoundComponent.figma.d.ts +2 -0
  95. package/dist/figma-codex/fixtures/CompoundComponent.figma.d.ts.map +1 -0
  96. package/dist/figma-codex/fixtures/SimpleComponent.d.ts +8 -0
  97. package/dist/figma-codex/fixtures/SimpleComponent.d.ts.map +1 -0
  98. package/dist/figma-codex/fixtures/SimpleComponent.figma.d.ts +2 -0
  99. package/dist/figma-codex/fixtures/SimpleComponent.figma.d.ts.map +1 -0
  100. package/dist/figma-codex/generate.d.ts +6 -0
  101. package/dist/figma-codex/generate.d.ts.map +1 -0
  102. package/dist/figma-codex/parser.d.ts +18 -0
  103. package/dist/figma-codex/parser.d.ts.map +1 -0
  104. package/dist/figma-codex/resolver.d.ts +5 -0
  105. package/dist/figma-codex/resolver.d.ts.map +1 -0
  106. package/dist/figma-codex/schema.d.ts +60 -0
  107. package/dist/figma-codex/schema.d.ts.map +1 -0
  108. package/dist/figma-codex/writer.d.ts +8 -0
  109. package/dist/figma-codex/writer.d.ts.map +1 -0
  110. package/dist/figma-codex.json +373 -0
  111. package/dist/index.cjs +114 -38
  112. package/dist/index.js +2 -2
  113. package/dist/preset/index.cjs +2 -2
  114. package/dist/preset/index.d.ts.map +1 -1
  115. package/dist/preset/index.js +1 -1
  116. package/dist/preset/recipes/accordion.d.ts.map +1 -1
  117. package/dist/preset/recipes/avatar.d.ts.map +1 -1
  118. package/dist/preset/recipes/breadcrumb.d.ts +2 -0
  119. package/dist/preset/recipes/breadcrumb.d.ts.map +1 -0
  120. package/dist/preset/recipes/checkbox.d.ts.map +1 -1
  121. package/dist/preset/recipes/content-card.d.ts +2 -0
  122. package/dist/preset/recipes/content-card.d.ts.map +1 -0
  123. package/dist/preset/recipes/field.d.ts.map +1 -1
  124. package/dist/preset/recipes/index.d.ts +7 -0
  125. package/dist/preset/recipes/index.d.ts.map +1 -1
  126. package/dist/preset/recipes/navigation-menu.d.ts +2 -0
  127. package/dist/preset/recipes/navigation-menu.d.ts.map +1 -0
  128. package/dist/preset/recipes/progress.d.ts.map +1 -1
  129. package/dist/preset/recipes/radio-group.d.ts.map +1 -1
  130. package/dist/preset/recipes/scenario-card.d.ts +2 -0
  131. package/dist/preset/recipes/scenario-card.d.ts.map +1 -0
  132. package/dist/preset/recipes/scenario-queue.d.ts +2 -0
  133. package/dist/preset/recipes/scenario-queue.d.ts.map +1 -0
  134. package/dist/preset/recipes/scenario-settings.d.ts +2 -0
  135. package/dist/preset/recipes/scenario-settings.d.ts.map +1 -0
  136. package/dist/preset/recipes/steps.d.ts.map +1 -1
  137. package/dist/preset/recipes/toast.d.ts.map +1 -1
  138. package/dist/preset/recipes/tooltip.d.ts.map +1 -1
  139. package/dist/preset/semantic-tokens.d.ts +12 -0
  140. package/dist/preset/semantic-tokens.d.ts.map +1 -1
  141. package/package.json +35 -2
  142. package/src/components/Accordion.figma.tsx +20 -0
  143. package/src/components/Breadcrumb.figma.tsx +18 -0
  144. package/src/components/Breadcrumb.tsx +52 -0
  145. package/src/components/ContentCard/ContentCard.figma.tsx +21 -0
  146. package/src/components/ContentCard/ContentCard.test.tsx +197 -0
  147. package/src/components/ContentCard/ContentCard.tsx +19 -0
  148. package/src/components/ContentCard/index.ts +13 -0
  149. package/src/components/Header.figma.tsx +25 -0
  150. package/src/components/{Heading.tsx → Header.tsx} +2 -2
  151. package/src/components/Icons/AccountIcon.tsx +26 -0
  152. package/src/components/Icons/ChevronUpIcon.tsx +24 -0
  153. package/src/components/Icons/ClockIcon.tsx +40 -0
  154. package/src/components/Icons/DashboardIcon.tsx +47 -0
  155. package/src/components/Icons/Discourser-Logo.svg +14 -0
  156. package/src/components/Icons/DiscourserLogo.figma.tsx +10 -0
  157. package/src/components/Icons/DiscourserLogo.tsx +72 -0
  158. package/src/components/Icons/GripDotsVerticalIcon.tsx +26 -0
  159. package/src/components/Icons/HelpIcon.tsx +26 -0
  160. package/src/components/Icons/NotebookIcon.tsx +26 -0
  161. package/src/components/Icons/RightArrowIcon.tsx +23 -0
  162. package/src/components/Icons/ScenarioIcon.tsx +26 -0
  163. package/src/components/Icons/index.ts +13 -0
  164. package/src/components/NavigationMenu/NavigationMenu.figma.tsx +26 -0
  165. package/src/components/NavigationMenu/NavigationMenu.test.tsx +524 -0
  166. package/src/components/NavigationMenu/NavigationMenu.tsx +102 -0
  167. package/src/components/NavigationMenu/index.ts +2 -0
  168. package/src/components/NavigationMenu/types.ts +27 -0
  169. package/src/components/QuickStartPage/QuickStartPage.tsx +627 -0
  170. package/src/components/QuickStartPage/index.ts +2 -0
  171. package/src/components/ScenarioQueue/AddScenarioDialog.tsx +137 -0
  172. package/src/components/ScenarioQueue/ScenarioCard.tsx +120 -0
  173. package/src/components/ScenarioQueue/ScenarioCardDraggable.tsx +41 -0
  174. package/src/components/ScenarioQueue/ScenarioQueue.figma.tsx +37 -0
  175. package/src/components/ScenarioQueue/ScenarioQueue.test.tsx +398 -0
  176. package/src/components/ScenarioQueue/ScenarioQueue.tsx +162 -0
  177. package/src/components/ScenarioQueue/index.ts +11 -0
  178. package/src/components/ScenarioQueue/types.ts +86 -0
  179. package/src/components/ScenarioSettings/ScenarioSettings.figma.tsx +12 -0
  180. package/src/components/ScenarioSettings/ScenarioSettings.test.tsx +406 -0
  181. package/src/components/ScenarioSettings/ScenarioSettings.tsx +386 -0
  182. package/src/components/ScenarioSettings/index.ts +11 -0
  183. package/src/components/ScenarioSettings/types.ts +70 -0
  184. package/src/components/__tests__/Breadcrumb.test.tsx +94 -0
  185. package/src/components/index.ts +54 -1
  186. package/src/figma-codex/README.md +186 -0
  187. package/src/figma-codex/__tests__/config.test.ts +63 -0
  188. package/src/figma-codex/__tests__/generate.test.ts +78 -0
  189. package/src/figma-codex/__tests__/parser.test.ts +138 -0
  190. package/src/figma-codex/__tests__/resolver.test.ts +196 -0
  191. package/src/figma-codex/__tests__/writer.test.ts +111 -0
  192. package/src/figma-codex/config.ts +42 -0
  193. package/src/figma-codex/fixtures/CompoundComponent/CompoundComponent.tsx +17 -0
  194. package/src/figma-codex/fixtures/CompoundComponent/index.ts +1 -0
  195. package/src/figma-codex/fixtures/CompoundComponent.figma.tsx +14 -0
  196. package/src/figma-codex/fixtures/SimpleComponent.figma.tsx +10 -0
  197. package/src/figma-codex/fixtures/SimpleComponent.tsx +10 -0
  198. package/src/figma-codex/fixtures/expected-output.json +78 -0
  199. package/src/figma-codex/generate.ts +106 -0
  200. package/src/figma-codex/parser.ts +138 -0
  201. package/src/figma-codex/resolver.ts +280 -0
  202. package/src/figma-codex/schema.ts +79 -0
  203. package/src/figma-codex/writer.ts +54 -0
  204. package/src/preset/index.ts +15 -0
  205. package/src/preset/recipes/accordion.ts +8 -5
  206. package/src/preset/recipes/avatar.ts +1 -2
  207. package/src/preset/recipes/breadcrumb.ts +109 -0
  208. package/src/preset/recipes/checkbox.ts +1 -2
  209. package/src/preset/recipes/content-card.ts +124 -0
  210. package/src/preset/recipes/field.ts +1 -2
  211. package/src/preset/recipes/index.ts +11 -0
  212. package/src/preset/recipes/navigation-menu.ts +97 -0
  213. package/src/preset/recipes/progress.ts +1 -2
  214. package/src/preset/recipes/radio-group.ts +1 -2
  215. package/src/preset/recipes/scenario-card.ts +151 -0
  216. package/src/preset/recipes/scenario-queue.ts +99 -0
  217. package/src/preset/recipes/scenario-settings.ts +182 -0
  218. package/src/preset/recipes/steps.ts +1 -2
  219. package/src/preset/recipes/toast.ts +1 -2
  220. package/src/preset/recipes/tooltip.ts +1 -2
  221. package/src/preset/semantic-tokens.ts +4 -0
  222. package/src/test/setup.ts +15 -0
  223. package/dist/chunk-F7LHARS4.js +0 -869
  224. package/dist/chunk-F7LHARS4.js.map +0 -1
  225. package/dist/chunk-M7J7WKJY.js.map +0 -1
  226. package/dist/chunk-QC44JPCA.cjs.map +0 -1
  227. package/dist/chunk-QP4EJI3G.cjs +0 -902
  228. package/dist/chunk-QP4EJI3G.cjs.map +0 -1
  229. package/dist/components/Heading.d.ts.map +0 -1
@@ -0,0 +1,124 @@
1
+ import { defineSlotRecipe } from '@pandacss/dev';
2
+
3
+ export const contentCard = defineSlotRecipe({
4
+ className: 'content-card',
5
+ slots: [
6
+ 'root',
7
+ 'header',
8
+ 'title',
9
+ 'badgeBar',
10
+ 'body',
11
+ 'section',
12
+ 'sectionTitle',
13
+ 'separator',
14
+ 'list',
15
+ 'listItem',
16
+ ],
17
+ base: {
18
+ root: {
19
+ bg: 'neutral.1',
20
+ borderRadius: 'xl',
21
+ borderWidth: '2px',
22
+ borderColor: 'border.default',
23
+ display: 'flex',
24
+ flexDirection: 'column',
25
+ w: 'full',
26
+ },
27
+ header: {
28
+ display: 'flex',
29
+ flexDirection: 'column',
30
+ gap: '4',
31
+ },
32
+ title: {
33
+ fontFamily: 'heading',
34
+ fontWeight: 'semibold',
35
+ fontSize: '2xl',
36
+ color: 'fg.default',
37
+ fontVariationSettings: "'SOFT' 0, 'WONK' 1",
38
+ },
39
+ badgeBar: {
40
+ display: 'flex',
41
+ flexWrap: 'wrap',
42
+ gap: '2.5',
43
+ px: '2.5',
44
+ py: '1',
45
+ },
46
+ body: {
47
+ display: 'flex',
48
+ flexDirection: 'column',
49
+ gap: '9',
50
+ fontSize: 'xl',
51
+ lineHeight: '1.4',
52
+ color: 'fg.default',
53
+ },
54
+ section: {
55
+ display: 'flex',
56
+ flexDirection: 'column',
57
+ gap: '5',
58
+ },
59
+ sectionTitle: {
60
+ fontFamily: 'heading',
61
+ fontWeight: 'semibold',
62
+ fontSize: '2xl',
63
+ color: 'fg.default',
64
+ fontVariationSettings: "'SOFT' 0, 'WONK' 1",
65
+ px: '2.5',
66
+ py: '2.5',
67
+ },
68
+ separator: {
69
+ borderTopWidth: '1px',
70
+ borderColor: 'border.default',
71
+ w: 'full',
72
+ my: '4',
73
+ },
74
+ list: {
75
+ display: 'flex',
76
+ flexDirection: 'column',
77
+ gap: '5',
78
+ listStyleType: 'disc',
79
+ ps: '8',
80
+ },
81
+ listItem: {
82
+ fontSize: 'xl',
83
+ lineHeight: '1.4',
84
+ color: 'fg.default',
85
+ },
86
+ },
87
+ variants: {
88
+ size: {
89
+ sm: {
90
+ root: { maxW: 'xl', pt: '6', px: '6', pb: '6' },
91
+ title: { fontSize: 'xl' },
92
+ body: { fontSize: 'lg' },
93
+ listItem: { fontSize: 'lg' },
94
+ },
95
+ md: {
96
+ root: { maxW: '2xl', pt: '10', px: '10', pb: '10', gap: '6' },
97
+ title: { fontSize: '2xl' },
98
+ body: { fontSize: 'xl' },
99
+ listItem: { fontSize: 'xl' },
100
+ },
101
+ lg: {
102
+ root: { maxW: '4xl', pt: '12', px: '12', pb: '12', gap: '8' },
103
+ title: { fontSize: '3xl' },
104
+ body: { fontSize: 'xl' },
105
+ listItem: { fontSize: 'xl' },
106
+ },
107
+ },
108
+ variant: {
109
+ elevated: {
110
+ root: { boxShadow: 'lg', borderWidth: '0' },
111
+ },
112
+ outline: {
113
+ root: { borderWidth: '2px', borderColor: 'border.default' },
114
+ },
115
+ flat: {
116
+ root: { borderWidth: '0', bg: 'transparent' },
117
+ },
118
+ },
119
+ },
120
+ defaultVariants: {
121
+ size: 'md',
122
+ variant: 'outline',
123
+ },
124
+ });
@@ -1,9 +1,8 @@
1
- import { fieldAnatomy } from '@ark-ui/react/anatomy'
2
1
  import { defineSlotRecipe } from '@pandacss/dev'
3
2
 
4
3
  export const field = defineSlotRecipe({
5
4
  className: 'field',
6
- slots: fieldAnatomy.keys(),
5
+ slots: ['root', 'errorText', 'helperText', 'input', 'label', 'select', 'textarea', 'requiredIndicator'],
7
6
  base: {
8
7
  root: {
9
8
  display: 'flex',
@@ -11,6 +11,10 @@ export * from './accordion';
11
11
  export * from './drawer';
12
12
  export * from './tabs';
13
13
 
14
+ // Navigation
15
+ export * from './breadcrumb';
16
+ export * from './navigation-menu';
17
+
14
18
  // Form elements
15
19
  export * from './switch';
16
20
  export * from './checkbox';
@@ -38,3 +42,10 @@ export * from './heading';
38
42
  // Utilities
39
43
  export * from './absolute-center';
40
44
  export * from './group';
45
+
46
+ // Custom Components
47
+ export * from './stepper';
48
+ export * from './content-card';
49
+ export * from './scenario-card';
50
+ export * from './scenario-queue';
51
+ export * from './scenario-settings';
@@ -0,0 +1,97 @@
1
+ import { defineSlotRecipe } from '@pandacss/dev';
2
+
3
+ export const navigationMenu = defineSlotRecipe({
4
+ className: 'navigation-menu',
5
+ slots: [
6
+ 'root',
7
+ 'section',
8
+ 'sectionTrigger',
9
+ 'sectionIcon',
10
+ 'sectionTitle',
11
+ 'sectionIndicator',
12
+ 'sectionContent',
13
+ 'itemList',
14
+ 'item',
15
+ 'itemLink',
16
+ ],
17
+ base: {
18
+ // ── Token mappings verified against Figma MCP output (node 38:4046) ──
19
+ // Figma file: GaHmFfmvO4loUzuZS4TgEz
20
+ root: {
21
+ bg: 'surface.dim', // Figma: #f5f1eb warm sage sidebar bg
22
+ width: 'full',
23
+ py: '2',
24
+ },
25
+ section: {
26
+ borderBottom: 'none',
27
+ },
28
+ sectionTrigger: {
29
+ // Layout-only props — no conflicts with accordion recipe here
30
+ display: 'flex',
31
+ alignItems: 'center',
32
+ justifyContent: 'space-between',
33
+ width: 'full',
34
+ cursor: 'pointer',
35
+ // NOTE: fontSize, fontWeight, borderRadius, p, bg, color are applied via
36
+ // css={{}} on Accordion.ItemTrigger in the component (utilities layer > recipes layer).
37
+ // See ScenarioCard.tsx for the same pattern.
38
+ _hover: {
39
+ bg: 'surface.container.high',
40
+ },
41
+ },
42
+ sectionIcon: {
43
+ flexShrink: 0,
44
+ display: 'flex',
45
+ alignItems: 'center',
46
+ justifyContent: 'center',
47
+ width: '6', // 24px container
48
+ height: '6',
49
+ color: 'primary.50', // olive green icons — Figma: #518500
50
+ fontSize: '20px', // icon SVGs use width/height: 1em → sets 20×20px
51
+ },
52
+ sectionTitle: {
53
+ flex: 1,
54
+ textAlign: 'start',
55
+ // Font styles inherited from trigger's css={{}} utility overrides
56
+ },
57
+ sectionIndicator: {
58
+ // color set via css={{}} on Accordion.ItemIndicator (utilities > recipes)
59
+ _open: {
60
+ rotate: '180deg',
61
+ },
62
+ },
63
+ sectionContent: {
64
+ overflow: 'hidden',
65
+ borderRadius: '0', // override accordion's default border-radius
66
+ },
67
+ itemList: {
68
+ display: 'flex',
69
+ flexDirection: 'column',
70
+ gap: '0.5',
71
+ pt: '1',
72
+ pb: '2',
73
+ },
74
+ item: {},
75
+ itemLink: {
76
+ display: 'block',
77
+ py: '2', // Figma: 5px top/bottom
78
+ pl: '8', // Figma: 30px left indent → spacing.8 = 32px
79
+ pr: '2', // Figma: 5px right padding
80
+ borderRadius: 'l3', // Figma: 8px
81
+ textDecoration: 'none',
82
+ fontSize: 'md', // Figma: 16px
83
+ fontWeight: 'norma', // Figma: Inter Medium 500
84
+ lineHeight: '1',
85
+ color: 'onSurface', // Figma: #363636
86
+ cursor: 'pointer',
87
+ _hover: {
88
+ bg: 'surface.container.high', // Figma: #ebe7e1
89
+ },
90
+ // Figma active state: surface.container.low (NOT primary.container)
91
+ '&[data-active="true"]': {
92
+ bg: 'surface.container.low', // Figma: #f3f4e9 → surfaceContainerLow
93
+ color: 'onSurface',
94
+ },
95
+ },
96
+ },
97
+ });
@@ -1,8 +1,7 @@
1
- import { progressAnatomy } from '@ark-ui/react/anatomy'
2
1
  import { defineSlotRecipe } from '@pandacss/dev'
3
2
 
4
3
  export const progress = defineSlotRecipe({
5
- slots: progressAnatomy.keys(),
4
+ slots: ['root', 'label', 'track', 'range', 'valueText', 'view', 'circle', 'circleTrack', 'circleRange'],
6
5
  className: 'progress',
7
6
  base: {
8
7
  root: {
@@ -1,9 +1,8 @@
1
- import { radioGroupAnatomy } from '@ark-ui/react/anatomy'
2
1
  import { defineSlotRecipe } from '@pandacss/dev'
3
2
 
4
3
  export const radioGroup = defineSlotRecipe({
5
4
  className: 'radio-group',
6
- slots: radioGroupAnatomy.keys(),
5
+ slots: ['root', 'label', 'item', 'itemText', 'itemControl', 'indicator'],
7
6
  base: {
8
7
  root: {
9
8
  display: 'flex',
@@ -0,0 +1,151 @@
1
+ import { defineSlotRecipe } from '@pandacss/dev'
2
+
3
+ export const scenarioCard = defineSlotRecipe({
4
+ className: 'scenario-card',
5
+ // Slots cover only scenario-specific styling.
6
+ // Base card appearance (bg, border, borderRadius, overflow) comes from
7
+ // Card.Root variant="outline" via the card slot recipe.
8
+ // Layout structure (flex, gap, alignment) comes from Panda CSS JSX primitives.
9
+ slots: ['root', 'positionBadge', 'dragHandle', 'title', 'switchRow', 'switchLabel', 'difficultyBadge', 'durationBadge'],
10
+ base: {
11
+ root: {
12
+ // Left accent border — inactive cards use transparent to preserve card width.
13
+ borderLeftWidth: '3px',
14
+ borderLeftStyle: 'solid',
15
+ borderLeftColor: 'transparent',
16
+ // Custom purple-tinted shadow from Figma spec (0px 2px 8px 0px rgba(167,139,250,0.15)).
17
+ // This overrides Card.Root variant="elevated" (M3 level4) which is too heavy.
18
+ // Raw value intentional: this non-standard shadow has no M3 elevation equivalent.
19
+ boxShadow: '0px 2px 8px 0px rgba(167, 139, 250, 0.15)',
20
+ // Figma cards use neutral/99 (#FDFCF5) — a warm off-white.
21
+ // neutral.surface.bg resolves to white (#FFFFFF) in light mode, so we override.
22
+ bg: 'neutral.1',
23
+ transition: 'border-color',
24
+ transitionDuration: 'normal',
25
+ },
26
+
27
+ // Circle primitive handles: w/h (size="12"), borderRadius:full, flex centering.
28
+ // Recipe handles: visual appearance (border, color, font).
29
+ positionBadge: {
30
+ fontSize: 'md',
31
+ fontWeight: 'semibold',
32
+ flexShrink: 0,
33
+ borderWidth: '1px',
34
+ borderStyle: 'solid',
35
+ borderColor: 'neutral.6',
36
+ color: 'fg.default',
37
+ bg: 'transparent',
38
+ transition: 'all',
39
+ transitionDuration: 'normal',
40
+ },
41
+
42
+ dragHandle: {
43
+ display: 'flex',
44
+ alignItems: 'center',
45
+ justifyContent: 'center',
46
+ // TODO: Create semantic token (e.g. colors.icon.subdued) that maps to secondary.6
47
+ // Using palette bridge value directly until semantic token is defined
48
+ color: 'secondary.6',
49
+ cursor: 'grab',
50
+ flexShrink: 0,
51
+ width: '9',
52
+ height: '10',
53
+ _active: { cursor: 'grabbing' },
54
+ },
55
+
56
+ title: {
57
+ width: 'full',
58
+ fontSize: 'sm',
59
+ fontWeight: 'semibold',
60
+ lineHeight: '1.4',
61
+ color: 'fg.default',
62
+ },
63
+
64
+ // HStack handles: display:flex, alignItems:center, justifyContent:space-between.
65
+ switchRow: {
66
+ width: 'full',
67
+ pt: '1',
68
+ mt: '1',
69
+ },
70
+
71
+ switchLabel: {
72
+ fontSize: 'sm',
73
+ color: 'fg.muted',
74
+ fontWeight: 'medium',
75
+ },
76
+
77
+ // Difficulty pill: M3 container tokens selected by data-difficulty attribute.
78
+ // Default (beginner) = primaryContainer; overridden for intermediate/advanced.
79
+ difficultyBadge: {
80
+ display: 'inline-flex',
81
+ alignItems: 'center',
82
+ borderRadius: 'l2',
83
+ px: '2',
84
+ h: '5',
85
+ fontSize: 'xs',
86
+ fontWeight: 'medium',
87
+ bg: 'm3Primary.container',
88
+ color: 'onM3Primary.container',
89
+ '&[data-difficulty="intermediate"]': {
90
+ bg: 'm3Secondary.container',
91
+ color: 'onM3Secondary.container',
92
+ },
93
+ '&[data-difficulty="advanced"]': {
94
+ bg: 'm3Tertiary.container',
95
+ color: 'onM3Tertiary.container',
96
+ },
97
+ },
98
+
99
+ // Duration pill: per-difficulty inverse palette colors.
100
+ // Default (beginner): inversePrimary → semanticDark.primary (#B1D18A light, #4C662B dark)
101
+ // Intermediate: inverseSecondary → semanticDark.secondary (#BFCBAD light, #586249 dark)
102
+ // Advanced: inverseTertiary → semanticDark.tertiary (#A0D0CB light, #386663 dark)
103
+ durationBadge: {
104
+ display: 'inline-flex',
105
+ alignItems: 'center',
106
+ gap: '1',
107
+ borderRadius: 'l2',
108
+ px: '2',
109
+ h: '5',
110
+ fontSize: 'xs',
111
+ fontWeight: 'medium',
112
+ bg: 'inversePrimary',
113
+ color: 'onSurface',
114
+ '&[data-difficulty="intermediate"]': {
115
+ bg: 'inverseSecondary',
116
+ },
117
+ '&[data-difficulty="advanced"]': {
118
+ bg: 'inverseTertiary',
119
+ },
120
+ },
121
+ },
122
+
123
+ variants: {
124
+ isActive: {
125
+ true: {
126
+ root: {
127
+ borderLeftColor: 'primary.6',
128
+ },
129
+ positionBadge: {
130
+ bg: 'primary.6',
131
+ color: 'white',
132
+ borderColor: 'primary.6',
133
+ },
134
+ },
135
+ false: {},
136
+ },
137
+ isDragging: {
138
+ true: {
139
+ root: {
140
+ opacity: '0.4',
141
+ },
142
+ },
143
+ false: {},
144
+ },
145
+ },
146
+
147
+ defaultVariants: {
148
+ isActive: false,
149
+ isDragging: false,
150
+ },
151
+ })
@@ -0,0 +1,99 @@
1
+ import { defineSlotRecipe } from '@pandacss/dev'
2
+
3
+ export const scenarioQueue = defineSlotRecipe({
4
+ className: 'scenario-queue',
5
+ description: 'Panel component with tabs and draggable scenario cards',
6
+
7
+ slots: [
8
+ 'root',
9
+ 'header',
10
+ 'title',
11
+ 'count',
12
+ 'tabsInner',
13
+ 'tabList',
14
+ 'tabsContent',
15
+ 'scrollArea',
16
+ 'emptyState',
17
+ 'addButtonArea',
18
+ 'addButton',
19
+ ],
20
+
21
+ base: {
22
+ root: {
23
+ display: 'flex',
24
+ flexDirection: 'column',
25
+ h: 'full',
26
+ minH: '320px',
27
+ minW: '250px',
28
+ maxW: '300px',
29
+ overflow: 'hidden',
30
+ bg: 'surface',
31
+ },
32
+
33
+ header: {
34
+ px: '4',
35
+ pt: '4',
36
+ pb: '2',
37
+ flexShrink: 0,
38
+ },
39
+
40
+ title: {
41
+ fontWeight: 'semibold',
42
+ fontSize: 'md',
43
+ color: 'fg.default',
44
+ },
45
+
46
+ count: {
47
+ fontSize: 'xs',
48
+ color: 'fg.muted',
49
+ mt: '0.5',
50
+ },
51
+
52
+ // Applied directly to Tabs.Root className — handles the flex column growth
53
+ // and scroll containment without a redundant wrapper div.
54
+ tabsInner: {
55
+ flex: '1',
56
+ minHeight: '0',
57
+ overflow: 'hidden',
58
+ display: 'flex',
59
+ flexDirection: 'column',
60
+ },
61
+
62
+ tabList: {
63
+ px: '4',
64
+ flexShrink: 0,
65
+ },
66
+
67
+ // Applied to each Tabs.Content — allows independent scrolling per tab.
68
+ tabsContent: {
69
+ flex: '1',
70
+ minHeight: '0',
71
+ overflowY: 'auto',
72
+ },
73
+
74
+ // Block layout so cards size to natural height and the container scrolls.
75
+ scrollArea: {
76
+ px: '4',
77
+ py: '3',
78
+ '& > * + *': { marginTop: '6' },
79
+ },
80
+
81
+ // Center primitive handles the flex centering; recipe provides spacing/text.
82
+ emptyState: {
83
+ py: '12',
84
+ fontSize: 'sm',
85
+ color: 'fg.muted',
86
+ },
87
+
88
+ addButtonArea: {
89
+ px: '4',
90
+ pb: '4',
91
+ pt: '2',
92
+ flexShrink: 0,
93
+ },
94
+
95
+ addButton: {
96
+ width: 'full',
97
+ },
98
+ },
99
+ })