@discourser/design-system 0.24.0 → 0.25.1
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/{chunk-KIJKNZ73.cjs → chunk-QNCZYFUJ.cjs} +46 -11
- package/dist/chunk-QNCZYFUJ.cjs.map +1 -0
- package/dist/{chunk-VOH2QELR.cjs → chunk-TBLDQATQ.cjs} +377 -12
- package/dist/chunk-TBLDQATQ.cjs.map +1 -0
- package/dist/{chunk-VN2QX6S7.js → chunk-UHSL4N44.js} +378 -14
- package/dist/chunk-UHSL4N44.js.map +1 -0
- package/dist/{chunk-HN2IHIMR.js → chunk-ZPECW4N2.js} +46 -11
- package/dist/chunk-ZPECW4N2.js.map +1 -0
- package/dist/components/Badge.figma.d.ts +2 -0
- package/dist/components/Badge.figma.d.ts.map +1 -0
- package/dist/components/Button.figma.d.ts +2 -0
- package/dist/components/Button.figma.d.ts.map +1 -0
- package/dist/components/Card.figma.d.ts +2 -0
- package/dist/components/Card.figma.d.ts.map +1 -0
- package/dist/components/Icons/AudienceIcon.d.ts.map +1 -1
- package/dist/components/Input.figma.d.ts +2 -0
- package/dist/components/Input.figma.d.ts.map +1 -0
- package/dist/components/RadioGroup.figma.d.ts +2 -0
- package/dist/components/RadioGroup.figma.d.ts.map +1 -0
- package/dist/components/SettingsPopover/SettingsPopover.figma.d.ts +2 -0
- package/dist/components/SettingsPopover/SettingsPopover.figma.d.ts.map +1 -0
- package/dist/components/Slider.figma.d.ts +2 -0
- package/dist/components/Slider.figma.d.ts.map +1 -0
- package/dist/components/Stepper/Stepper.figma.d.ts +2 -0
- package/dist/components/Stepper/Stepper.figma.d.ts.map +1 -0
- package/dist/components/StudioControls/StudioControls.d.ts +3 -0
- package/dist/components/StudioControls/StudioControls.d.ts.map +1 -0
- package/dist/components/StudioControls/StudioControls.figma.d.ts +2 -0
- package/dist/components/StudioControls/StudioControls.figma.d.ts.map +1 -0
- package/dist/components/StudioControls/index.d.ts +3 -0
- package/dist/components/StudioControls/index.d.ts.map +1 -0
- package/dist/components/StudioControls/types.d.ts +17 -0
- package/dist/components/StudioControls/types.d.ts.map +1 -0
- package/dist/components/Switch.figma.d.ts +2 -0
- package/dist/components/Switch.figma.d.ts.map +1 -0
- package/dist/components/index.cjs +78 -74
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +1 -1
- package/dist/figma-codex/parser.d.ts +2 -0
- package/dist/figma-codex/parser.d.ts.map +1 -1
- package/dist/figma-codex/resolver.d.ts.map +1 -1
- package/dist/figma-codex/schema.d.ts +7 -0
- package/dist/figma-codex/schema.d.ts.map +1 -1
- package/dist/figma-codex.json +420 -2
- package/dist/index.cjs +82 -78
- package/dist/index.js +2 -2
- package/dist/preset/index.cjs +2 -2
- package/dist/preset/index.js +1 -1
- package/dist/preset/recipes/badge.d.ts.map +1 -1
- package/dist/preset/recipes/index.d.ts +1 -0
- package/dist/preset/recipes/index.d.ts.map +1 -1
- package/dist/preset/recipes/studio-controls.d.ts +2 -0
- package/dist/preset/recipes/studio-controls.d.ts.map +1 -0
- package/dist/preset/recipes/switch.d.ts.map +1 -1
- package/docs/figma-mcp-return/card-audit.json +31 -0
- package/docs/figma-mcp-return/conversation-prelaunch-audit.json +51 -0
- package/docs/figma-mcp-return/conversation_lobby-design-context.md +359 -0
- package/docs/figma-mcp-return/conversation_lobby-metadata.xml +1 -0
- package/docs/figma-mcp-return/discourser-accordion-audit.json +264 -0
- package/docs/figma-mcp-return/discourser-accordion-design-context-v2.tsx +350 -0
- package/docs/figma-mcp-return/discourser-accordion-design-context.tsx +130 -0
- package/docs/figma-mcp-return/discourser-accordion-metadata-v2.xml +1 -0
- package/docs/figma-mcp-return/discourser-accordion-metadata.xml +1 -0
- package/docs/figma-mcp-return/kai-resolution-simulation.md +181 -0
- package/docs/figma-mcp-return/prelaunch-comparison-analysis.md +126 -0
- package/docs/figma-mcp-return/prelaunch-get-design-context.md +982 -0
- package/docs/figma-mcp-return/prelaunch-get-metadata.md +7 -0
- package/docs/figma-mcp-return/prelaunch-get-metadata.xml +3 -0
- package/docs/figma-mcp-return/prelaunch-post-component-update.md +791 -0
- package/docs/figma-mcp-return/prelaunch-post-rebind-design-context.md +969 -0
- package/docs/figma-mcp-return/radio-group-audit.json +23 -0
- package/docs/figma-mcp-return/switch-audit.json +38 -0
- package/docs/session-summary-2026-03-29.md +98 -0
- package/package.json +2 -1
- package/src/components/Badge.figma.tsx +39 -0
- package/src/components/Button.figma.tsx +18 -0
- package/src/components/Card.figma.tsx +33 -0
- package/src/components/Icons/AudienceIcon.tsx +3 -1
- package/src/components/Icons/AudioSpeakerIcon.tsx +1 -1
- package/src/components/Icons/MicrophoneIcon.tsx +3 -3
- package/src/components/Icons/RecordIcon.tsx +4 -4
- package/src/components/Icons/TimerIcon.tsx +1 -1
- package/src/components/Input.figma.tsx +17 -0
- package/src/components/RadioGroup.figma.tsx +61 -0
- package/src/components/SettingsPopover/SettingsPopover.figma.tsx +17 -0
- package/src/components/Slider.figma.tsx +66 -0
- package/src/components/Stepper/Stepper.figma.tsx +19 -0
- package/src/components/StudioControls/StudioControls.figma.tsx +25 -0
- package/src/components/StudioControls/StudioControls.tsx +381 -0
- package/src/components/StudioControls/index.ts +2 -0
- package/src/components/StudioControls/types.ts +17 -0
- package/src/components/Switch.figma.tsx +49 -0
- package/src/components/index.ts +5 -0
- package/src/figma-codex/parser.ts +55 -0
- package/src/figma-codex/resolver.ts +1 -0
- package/src/figma-codex/schema.ts +9 -0
- package/src/preset/recipes/badge.ts +41 -7
- package/src/preset/recipes/index.ts +1 -0
- package/src/preset/recipes/studio-controls.ts +252 -0
- package/src/preset/recipes/switch.ts +5 -4
- package/dist/chunk-HN2IHIMR.js.map +0 -1
- package/dist/chunk-KIJKNZ73.cjs.map +0 -1
- package/dist/chunk-VN2QX6S7.js.map +0 -1
- package/dist/chunk-VOH2QELR.cjs.map +0 -1
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"auditTarget": "958:1900",
|
|
3
|
+
"componentSetName": "RadioGroup.Item",
|
|
4
|
+
"totalComponents": 72,
|
|
5
|
+
"totalUnboundNodes": 0,
|
|
6
|
+
"flagged": [],
|
|
7
|
+
"variantAxes": {
|
|
8
|
+
"Color": ["Primary", "Secondary", "Tertiary"],
|
|
9
|
+
"Stop": ["40", "50", "60", "70"],
|
|
10
|
+
"Variant": ["Solid"],
|
|
11
|
+
"Size": ["Sm", "Md", "Lg"],
|
|
12
|
+
"Checked": ["False", "True"]
|
|
13
|
+
},
|
|
14
|
+
"gridLayout": "24 cols × 3 rows (one row per Color, columns = Stop × Size × Checked)",
|
|
15
|
+
"notes": "All fills, strokes, and text bindings are bound to DDS variables. Zero hardcoded values.",
|
|
16
|
+
"variableBindings": {
|
|
17
|
+
"itemControl.fill.checked": "Primitives {color}/{stop} (bound per Color+Stop variant)",
|
|
18
|
+
"itemControl.stroke.unchecked": "Semantic outline/variant",
|
|
19
|
+
"indicator.fill": "Primitives neutral/100 (white)",
|
|
20
|
+
"itemText.fill": "Semantic onSurface"
|
|
21
|
+
},
|
|
22
|
+
"replacedNode": "944:1858"
|
|
23
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"auditTarget": "959:2032",
|
|
3
|
+
"componentSetName": "Switch",
|
|
4
|
+
"totalComponents": 96,
|
|
5
|
+
"totalUnboundNodes": 48,
|
|
6
|
+
"variantAxes": {
|
|
7
|
+
"Color": ["Primary", "Secondary", "Tertiary"],
|
|
8
|
+
"Stop": ["40", "50", "60", "70"],
|
|
9
|
+
"Variant": ["Solid"],
|
|
10
|
+
"Size": ["Xs", "Sm", "Md", "Lg"],
|
|
11
|
+
"Toggled": ["False", "True"]
|
|
12
|
+
},
|
|
13
|
+
"gridLayout": "32 cols × 3 rows (one row per Color, columns = Stop × Size × Toggled)",
|
|
14
|
+
"summary": {
|
|
15
|
+
"control [fill] — off-state alpha slot": 48
|
|
16
|
+
},
|
|
17
|
+
"notes": "48 unbound nodes are ALL expected: the off-state (Toggled=False) track fills are alpha-composited from the variable's resolved value at runtime (1 + (raw - 1) * 0.19). This is the ONLY fill category in the system that lacks boundVariables. 3 colors × 4 stops × 4 sizes = 48 off-state instances.",
|
|
18
|
+
"expectedHardcodedFills": {
|
|
19
|
+
"primary/40 off": "#dbe2cf (computed from #3f6900 at 19% over white)",
|
|
20
|
+
"primary/50 off": "#dee8cf (computed from #518500 at 19%)",
|
|
21
|
+
"primary/60 off": "#e2edcf (computed from #64a104 at 19%)",
|
|
22
|
+
"primary/70 off": "#e6f2d7 (computed from #7dbd2a at 19%)",
|
|
23
|
+
"secondary/40 off": "#dfe2db (computed from #54643f at 19%)",
|
|
24
|
+
"secondary/50 off": "#e3e6df (computed from #6c7d56 at 19%)",
|
|
25
|
+
"secondary/60 off": "#e8ebe3 (computed from #85976e at 19%)",
|
|
26
|
+
"secondary/70 off": "#edf0e8 (computed from #a0b187 at 19%)",
|
|
27
|
+
"tertiary/40 off": "#cfe3e2 (computed from #046a66 at 19%)",
|
|
28
|
+
"tertiary/50 off": "#d8e7e7 (computed from #30837f at 19%)",
|
|
29
|
+
"tertiary/60 off": "#ddeceb (computed from #4d9d98 at 19%)",
|
|
30
|
+
"tertiary/70 off": "#e2f2f1 (computed from #69b8b3 at 19%)"
|
|
31
|
+
},
|
|
32
|
+
"variableBindings": {
|
|
33
|
+
"control.fill.on": "Primitives {color}/{stop} (bound per Color+Stop variant)",
|
|
34
|
+
"thumb.fill": "Primitives neutral/100 (white)",
|
|
35
|
+
"label.fill": "Semantic onSurface"
|
|
36
|
+
},
|
|
37
|
+
"replacedNode": "946:1808"
|
|
38
|
+
}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
# Session Summary — March 29, 2026
|
|
2
|
+
# For next session pickup
|
|
3
|
+
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
## What was accomplished this session
|
|
7
|
+
|
|
8
|
+
### 1. figma-codex.json completed — 35 components
|
|
9
|
+
- Badge.figma.tsx and Card.figma.tsx created with placeholder node-id=0-0
|
|
10
|
+
(no Figma master components exist for these primitives)
|
|
11
|
+
- `pnpm codex:generate` run, verified 35 components
|
|
12
|
+
- StudioControls nodeId fixed from stale 867:1784 → correct 38:8232
|
|
13
|
+
- Accordion intentionally shares 38:8232 (it's a primitive consumed inside composites)
|
|
14
|
+
|
|
15
|
+
### 2. Variable rebinding on Conversation Prelaunch page (66:2739)
|
|
16
|
+
Two rebind passes executed via `use_figma` scripts:
|
|
17
|
+
|
|
18
|
+
**Pass 1 — Old @discourser/design-system library (103:xxxx)**
|
|
19
|
+
- 15 variables, 32 bindings → all rebound to local Primitives/Semantic
|
|
20
|
+
- Mapping: surfacecontainerhigh → surface/container/high, neutral/90 → neutral/90, etc.
|
|
21
|
+
- Zero 103:xxxx bindings remain
|
|
22
|
+
|
|
23
|
+
**Pass 2 — Mode collection shadcn-named colors**
|
|
24
|
+
- 9 variables, 72 bindings → all rebound to DDS Semantic
|
|
25
|
+
- Mapping:
|
|
26
|
+
- foreground → onSurface
|
|
27
|
+
- muted-foreground → onSurface/variant
|
|
28
|
+
- primary-foreground → onPrimary
|
|
29
|
+
- border → outline/variant
|
|
30
|
+
- custom/bg-input-30 → surface/container
|
|
31
|
+
- muted → surface/container/high
|
|
32
|
+
- shadow/2xs, shadow/md, shadow/xs → shadow
|
|
33
|
+
- Zero Mode color bindings remain
|
|
34
|
+
|
|
35
|
+
### 3. Design context re-pulled and Kai simulation completed
|
|
36
|
+
- Post-rebind get_design_context saved to:
|
|
37
|
+
docs/figma-mcp-return/prelaunch-post-rebind-design-context.md
|
|
38
|
+
- Kai resolution simulation saved to:
|
|
39
|
+
docs/figma-mcp-return/kai-resolution-simulation.md
|
|
40
|
+
- Estimated Kai fidelity: ~70% clean resolution
|
|
41
|
+
|
|
42
|
+
### 4. Remaining external bindings audited
|
|
43
|
+
- 653 numeric bindings from Park UI Theme/Spacing/Primitives collections
|
|
44
|
+
- These are spacing (p-0, p-2, p-4), radius (rounded-full), shadow dimensions,
|
|
45
|
+
font sizes, border widths — all resolve to correct pixel values
|
|
46
|
+
- NOT rebound this session — they don't affect semantic meaning
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## What's NOT done — next session priorities
|
|
51
|
+
|
|
52
|
+
### HIGH — Would move Kai fidelity from ~70% to ~85%
|
|
53
|
+
1. Create Figma variables for Accent palette (#b8a9c9, #cfc4db, #6b5a7d)
|
|
54
|
+
and Primary/500 (#c5d24d) — currently hardcoded Figma paint styles
|
|
55
|
+
2. Rebind #363636 and #2e2e2e text nodes to onSurface or onSurface/variant
|
|
56
|
+
3. Add missing hex values to Kai's figma-token-resolution.md lookup table
|
|
57
|
+
|
|
58
|
+
### MEDIUM — Would move to ~90%
|
|
59
|
+
4. Resolve Inter vs Poppins typography mismatch in Figma
|
|
60
|
+
5. Replace #e5e7eb border on RightControlPanel with outline/variant
|
|
61
|
+
6. Explore `add_code_connect_map` to get MCP to return DDS imports
|
|
62
|
+
|
|
63
|
+
### Still pending from earlier sessions
|
|
64
|
+
7. Will's corrections to Claude's workflow model
|
|
65
|
+
8. Notion documentation of session findings
|
|
66
|
+
9. Extend Figma variables for elevation, typography, spacing, border radius
|
|
67
|
+
10. Fix figma-codex parsing bug (multi-line function prop truncation on NavigationMenu)
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## Key files created/modified this session
|
|
72
|
+
|
|
73
|
+
DDS repo:
|
|
74
|
+
- src/components/Badge.figma.tsx — NEW
|
|
75
|
+
- src/components/Card.figma.tsx — NEW
|
|
76
|
+
- src/components/Accordion.figma.tsx — reverted (unchanged from start)
|
|
77
|
+
- dist/figma-codex.json — REGENERATED (35 components)
|
|
78
|
+
- docs/figma-mcp-return/prelaunch-post-rebind-design-context.md — NEW
|
|
79
|
+
- docs/figma-mcp-return/prelaunch-get-design-context.md — NEW (pre-rebind)
|
|
80
|
+
- docs/figma-mcp-return/prelaunch-get-metadata.md — NEW
|
|
81
|
+
- docs/figma-mcp-return/prelaunch-get-metadata.xml — NEW
|
|
82
|
+
- docs/figma-mcp-return/prelaunch-comparison-analysis.md — NEW
|
|
83
|
+
- docs/figma-mcp-return/kai-resolution-simulation.md — NEW
|
|
84
|
+
|
|
85
|
+
Figma file (GaHmFfmvO4loUzuZS4TgEz):
|
|
86
|
+
- Node 66:2739 — all color variable bindings rebound to local collections
|
|
87
|
+
|
|
88
|
+
---
|
|
89
|
+
|
|
90
|
+
## Key file paths (unchanged)
|
|
91
|
+
|
|
92
|
+
DDS repo: /Users/willstreeter/WebstormProjects/vibe-coding/shifu-project/Discourser-Design-System/
|
|
93
|
+
Discourser.ai repo: /Users/willstreeter/WebstormProjects/vibe-coding/shifu-project/discourser.ai/
|
|
94
|
+
Figma file key: GaHmFfmvO4loUzuZS4TgEz
|
|
95
|
+
Conversation Prelaunch node: 66:2739
|
|
96
|
+
figma-codex.json: dist/figma-codex.json
|
|
97
|
+
Kai token resolution: discourser.ai/_bmad/bmm/kai/knowledge/figma-token-resolution.md
|
|
98
|
+
Notion parent page: 3304d6019b4281969dafca1c03d29656
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@discourser/design-system",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.25.1",
|
|
4
4
|
"description": "Aesthetic-agnostic design system with Panda CSS and Ark UI",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -213,6 +213,7 @@
|
|
|
213
213
|
"verify:build": "pnpm build",
|
|
214
214
|
"codex:generate": "tsx src/figma-codex/generate.ts",
|
|
215
215
|
"codex:watch": "tsx --watch src/figma-codex/generate.ts",
|
|
216
|
+
"scaffold:figma-connect": "tsx scripts/scaffold-figma-connect.ts",
|
|
216
217
|
"figma:connect": "figma connect publish",
|
|
217
218
|
"figma:connect:dry": "figma connect publish --dry-run",
|
|
218
219
|
"figma:export": "tsx scripts/export-figma-tokens.ts",
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dds-tokens
|
|
3
|
+
* recipe: badge
|
|
4
|
+
* variantProps: variant, size, colorPalette
|
|
5
|
+
* figmaPropToRecipeProp:
|
|
6
|
+
* Variant: variant
|
|
7
|
+
* Size: size
|
|
8
|
+
* Color: colorPalette
|
|
9
|
+
*/
|
|
10
|
+
import figma from '@figma/code-connect';
|
|
11
|
+
import { Badge } from './Badge';
|
|
12
|
+
|
|
13
|
+
figma.connect(
|
|
14
|
+
Badge,
|
|
15
|
+
'https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=930-1972',
|
|
16
|
+
{
|
|
17
|
+
props: {
|
|
18
|
+
variant: figma.enum('Variant', {
|
|
19
|
+
Solid: 'solid',
|
|
20
|
+
Surface: 'surface',
|
|
21
|
+
Subtle: 'subtle',
|
|
22
|
+
Outline: 'outline',
|
|
23
|
+
Rating: 'rating',
|
|
24
|
+
}),
|
|
25
|
+
colorPalette: figma.enum('Color', {
|
|
26
|
+
Primary: 'primary',
|
|
27
|
+
Secondary: 'secondary',
|
|
28
|
+
Tertiary: 'tertiary',
|
|
29
|
+
Neutral: 'neutral',
|
|
30
|
+
Error: 'error',
|
|
31
|
+
}),
|
|
32
|
+
},
|
|
33
|
+
example: ({ variant, colorPalette }) => (
|
|
34
|
+
<Badge variant={variant} colorPalette={colorPalette}>
|
|
35
|
+
Label
|
|
36
|
+
</Badge>
|
|
37
|
+
),
|
|
38
|
+
},
|
|
39
|
+
);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import figma from '@figma/code-connect';
|
|
2
|
+
import { Button } from './Button';
|
|
3
|
+
|
|
4
|
+
figma.connect(
|
|
5
|
+
Button,
|
|
6
|
+
'https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=38-7993',
|
|
7
|
+
{
|
|
8
|
+
props: {
|
|
9
|
+
variant: figma.enum('Type', {
|
|
10
|
+
Default: 'solid',
|
|
11
|
+
Secondary: 'outline',
|
|
12
|
+
Tertiary: 'plain',
|
|
13
|
+
Neutral: 'surface',
|
|
14
|
+
}),
|
|
15
|
+
},
|
|
16
|
+
example: ({ variant }) => <Button variant={variant}>Label</Button>,
|
|
17
|
+
},
|
|
18
|
+
);
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dds-tokens
|
|
3
|
+
* recipe: card
|
|
4
|
+
* variantProps: variant
|
|
5
|
+
* figmaPropToRecipeProp:
|
|
6
|
+
* Variant: variant
|
|
7
|
+
*/
|
|
8
|
+
import figma from '@figma/code-connect';
|
|
9
|
+
import * as Card from './Card';
|
|
10
|
+
|
|
11
|
+
figma.connect(
|
|
12
|
+
Card.Root,
|
|
13
|
+
'https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=950-1681',
|
|
14
|
+
{
|
|
15
|
+
props: {
|
|
16
|
+
variant: figma.enum('Variant', {
|
|
17
|
+
Elevated: 'elevated',
|
|
18
|
+
Outline: 'outline',
|
|
19
|
+
Subtle: 'subtle',
|
|
20
|
+
}),
|
|
21
|
+
},
|
|
22
|
+
example: ({ variant }) => (
|
|
23
|
+
<Card.Root variant={variant}>
|
|
24
|
+
<Card.Header>
|
|
25
|
+
<Card.Title>Card Title</Card.Title>
|
|
26
|
+
<Card.Description>Card description</Card.Description>
|
|
27
|
+
</Card.Header>
|
|
28
|
+
<Card.Body>Content goes here</Card.Body>
|
|
29
|
+
<Card.Footer>{/* Footer actions */}</Card.Footer>
|
|
30
|
+
</Card.Root>
|
|
31
|
+
),
|
|
32
|
+
},
|
|
33
|
+
);
|
|
@@ -8,8 +8,10 @@ export type AudienceIconProps = ComponentProps<typeof StyledSvg>;
|
|
|
8
8
|
|
|
9
9
|
export const AudienceIcon = (props: AudienceIconProps) => (
|
|
10
10
|
<StyledSvg
|
|
11
|
-
viewBox="
|
|
11
|
+
viewBox="3.5 9.5 29 25"
|
|
12
12
|
fill="currentColor"
|
|
13
|
+
stroke="currentColor"
|
|
14
|
+
strokeWidth="0.5"
|
|
13
15
|
xmlns="http://www.w3.org/2000/svg"
|
|
14
16
|
width="1em"
|
|
15
17
|
height="1em"
|
|
@@ -8,7 +8,7 @@ export type AudioSpeakerIconProps = ComponentProps<typeof StyledSvg>;
|
|
|
8
8
|
|
|
9
9
|
export const AudioSpeakerIcon = (props: AudioSpeakerIconProps) => (
|
|
10
10
|
<StyledSvg
|
|
11
|
-
viewBox="
|
|
11
|
+
viewBox="-10 -3 50 34"
|
|
12
12
|
fill="none"
|
|
13
13
|
xmlns="http://www.w3.org/2000/svg"
|
|
14
14
|
width="1em"
|
|
@@ -18,21 +18,21 @@ export const MicrophoneIcon = (props: MicrophoneIconProps) => (
|
|
|
18
18
|
<path
|
|
19
19
|
d="M20 35.6665V40.6665"
|
|
20
20
|
stroke="currentColor"
|
|
21
|
-
strokeWidth="
|
|
21
|
+
strokeWidth="3"
|
|
22
22
|
strokeLinecap="round"
|
|
23
23
|
strokeLinejoin="round"
|
|
24
24
|
/>
|
|
25
25
|
<path
|
|
26
26
|
d="M31.6666 20.6665V23.9998C31.6666 27.094 30.4374 30.0615 28.2495 32.2494C26.0616 34.4373 23.0941 35.6665 19.9999 35.6665C16.9057 35.6665 13.9383 34.4373 11.7503 32.2494C9.56242 30.0615 8.33325 27.094 8.33325 23.9998V20.6665"
|
|
27
27
|
stroke="currentColor"
|
|
28
|
-
strokeWidth="
|
|
28
|
+
strokeWidth="3"
|
|
29
29
|
strokeLinecap="round"
|
|
30
30
|
strokeLinejoin="round"
|
|
31
31
|
/>
|
|
32
32
|
<path
|
|
33
33
|
d="M25 12.3335C25 9.57207 22.7614 7.3335 20 7.3335C17.2386 7.3335 15 9.57207 15 12.3335V24.0002C15 26.7616 17.2386 29.0002 20 29.0002C22.7614 29.0002 25 26.7616 25 24.0002V12.3335Z"
|
|
34
34
|
stroke="currentColor"
|
|
35
|
-
strokeWidth="
|
|
35
|
+
strokeWidth="3"
|
|
36
36
|
strokeLinecap="round"
|
|
37
37
|
strokeLinejoin="round"
|
|
38
38
|
/>
|
|
@@ -18,23 +18,23 @@ export const RecordIcon = (props: RecordIconProps) => (
|
|
|
18
18
|
<path
|
|
19
19
|
d="M27.0624 19.4998C27.0624 21.5134 25.4301 23.1457 23.4166 23.1457C21.4031 23.1457 19.7708 21.5134 19.7708 19.4998C19.7708 17.4863 21.4031 15.854 23.4166 15.854C25.4301 15.854 27.0624 17.4863 27.0624 19.4998Z"
|
|
20
20
|
stroke="currentColor"
|
|
21
|
-
strokeWidth="
|
|
21
|
+
strokeWidth="3"
|
|
22
22
|
/>
|
|
23
23
|
<path
|
|
24
24
|
d="M15.3959 19.4998C15.3959 21.5134 13.7636 23.1457 11.7501 23.1457C9.73655 23.1457 8.10425 21.5134 8.10425 19.4998C8.10425 17.4863 9.73655 15.854 11.7501 15.854C13.7636 15.854 15.3959 17.4863 15.3959 19.4998Z"
|
|
25
25
|
stroke="currentColor"
|
|
26
|
-
strokeWidth="
|
|
26
|
+
strokeWidth="3"
|
|
27
27
|
/>
|
|
28
28
|
<path
|
|
29
29
|
d="M11.75 23.1455H23.4167"
|
|
30
30
|
stroke="currentColor"
|
|
31
|
-
strokeWidth="
|
|
31
|
+
strokeWidth="3"
|
|
32
32
|
strokeLinecap="round"
|
|
33
33
|
/>
|
|
34
34
|
<path
|
|
35
35
|
d="M32.1667 19.4998C32.1667 26.3744 32.1667 29.8119 30.0309 31.9474C27.8954 34.0832 24.4579 34.0832 17.5833 34.0832C10.7087 34.0832 7.27136 34.0832 5.13569 31.9474C3 29.8119 3 26.3744 3 19.4998C3 12.6252 3 9.18786 5.13569 7.05219C7.27136 4.9165 10.7087 4.9165 17.5833 4.9165C24.4579 4.9165 27.8954 4.9165 30.0309 7.05219C31.4511 8.47223 31.9269 10.4677 32.0863 13.6665"
|
|
36
36
|
stroke="currentColor"
|
|
37
|
-
strokeWidth="
|
|
37
|
+
strokeWidth="3"
|
|
38
38
|
strokeLinecap="round"
|
|
39
39
|
/>
|
|
40
40
|
</StyledSvg>
|
|
@@ -18,7 +18,7 @@ export const TimerIcon = (props: TimerIconProps) => (
|
|
|
18
18
|
<path
|
|
19
19
|
d="M6.27333 12C4.83741 14.1451 4 16.7248 4 19.5C4 26.9559 10.0442 33 17.5 33C24.9559 33 31 26.9559 31 19.5C31 12.0442 24.9559 6 17.5 6V10.5M17.5 19.5L11.5 13.5"
|
|
20
20
|
stroke="currentColor"
|
|
21
|
-
strokeWidth="
|
|
21
|
+
strokeWidth="3"
|
|
22
22
|
strokeLinecap="round"
|
|
23
23
|
strokeLinejoin="round"
|
|
24
24
|
/>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import figma from '@figma/code-connect';
|
|
2
|
+
import { Input } from './Input';
|
|
3
|
+
|
|
4
|
+
figma.connect(
|
|
5
|
+
Input,
|
|
6
|
+
'https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=38-8909',
|
|
7
|
+
{
|
|
8
|
+
props: {
|
|
9
|
+
type: figma.enum('Type', {
|
|
10
|
+
Text: 'text',
|
|
11
|
+
File: 'file',
|
|
12
|
+
Password: 'password',
|
|
13
|
+
}),
|
|
14
|
+
},
|
|
15
|
+
example: ({ type }) => <Input type={type} placeholder="Enter value" />,
|
|
16
|
+
},
|
|
17
|
+
);
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dds-tokens
|
|
3
|
+
* recipe: radioGroup
|
|
4
|
+
* variantProps: variant, size
|
|
5
|
+
* figmaPropToRecipeProp:
|
|
6
|
+
* Checked: checked
|
|
7
|
+
* State: state
|
|
8
|
+
*/
|
|
9
|
+
import figma from '@figma/code-connect';
|
|
10
|
+
import * as RadioGroup from './RadioGroup';
|
|
11
|
+
|
|
12
|
+
// Original designer-built component — .Radio Group Radio Toggle (38:8893)
|
|
13
|
+
// Variants: Checked(False/True) × State(Default/Focus/Disabled)
|
|
14
|
+
// This is the component used in production Discourser.AI page designs.
|
|
15
|
+
//
|
|
16
|
+
// Anatomy:
|
|
17
|
+
// <RadioGroup.Root value={string} onValueChange={fn}>
|
|
18
|
+
// <RadioGroup.Item value="x">
|
|
19
|
+
// <RadioGroup.ItemControl />
|
|
20
|
+
// <RadioGroup.ItemText>Label</RadioGroup.ItemText>
|
|
21
|
+
// </RadioGroup.Item>
|
|
22
|
+
// </RadioGroup.Root>
|
|
23
|
+
//
|
|
24
|
+
// Key props on Root:
|
|
25
|
+
// value — controlled selected value (string)
|
|
26
|
+
// defaultValue — uncontrolled initial value (string)
|
|
27
|
+
// onValueChange — callback ({ value }: { value: string }) => void
|
|
28
|
+
// disabled — boolean, disables all items
|
|
29
|
+
// orientation — 'horizontal' | 'vertical' (default: 'vertical')
|
|
30
|
+
//
|
|
31
|
+
// Key props on Item:
|
|
32
|
+
// value — required unique string for this option
|
|
33
|
+
// disabled — boolean, disables this item only
|
|
34
|
+
figma.connect(
|
|
35
|
+
RadioGroup.Root,
|
|
36
|
+
'https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=38-8893',
|
|
37
|
+
{
|
|
38
|
+
props: {
|
|
39
|
+
checked: figma.enum('Checked', {
|
|
40
|
+
False: false,
|
|
41
|
+
True: true,
|
|
42
|
+
}),
|
|
43
|
+
},
|
|
44
|
+
example: ({ checked: _checked }) => (
|
|
45
|
+
<RadioGroup.Root defaultValue="option-1">
|
|
46
|
+
<RadioGroup.Item value="option-1">
|
|
47
|
+
<RadioGroup.ItemControl />
|
|
48
|
+
<RadioGroup.ItemText>Option 1</RadioGroup.ItemText>
|
|
49
|
+
</RadioGroup.Item>
|
|
50
|
+
<RadioGroup.Item value="option-2">
|
|
51
|
+
<RadioGroup.ItemControl />
|
|
52
|
+
<RadioGroup.ItemText>Option 2</RadioGroup.ItemText>
|
|
53
|
+
</RadioGroup.Item>
|
|
54
|
+
<RadioGroup.Item value="option-3">
|
|
55
|
+
<RadioGroup.ItemControl />
|
|
56
|
+
<RadioGroup.ItemText>Option 3</RadioGroup.ItemText>
|
|
57
|
+
</RadioGroup.Item>
|
|
58
|
+
</RadioGroup.Root>
|
|
59
|
+
),
|
|
60
|
+
},
|
|
61
|
+
);
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import figma from '@figma/code-connect';
|
|
2
|
+
import { SettingsPopover } from './SettingsPopover';
|
|
3
|
+
|
|
4
|
+
figma.connect(
|
|
5
|
+
SettingsPopover,
|
|
6
|
+
'https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=810-5398',
|
|
7
|
+
{
|
|
8
|
+
example: () => (
|
|
9
|
+
<SettingsPopover
|
|
10
|
+
userName={'value'}
|
|
11
|
+
userTier={'value'}
|
|
12
|
+
userEmail={'value'}
|
|
13
|
+
actions={[]}
|
|
14
|
+
/>
|
|
15
|
+
),
|
|
16
|
+
},
|
|
17
|
+
);
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @dds-tokens
|
|
3
|
+
* recipe: slider
|
|
4
|
+
* variantProps: orientation, size, variant
|
|
5
|
+
* figmaPropToRecipeProp:
|
|
6
|
+
* Orientation: orientation
|
|
7
|
+
* Size: size
|
|
8
|
+
*/
|
|
9
|
+
import figma from '@figma/code-connect';
|
|
10
|
+
import * as Slider from './Slider';
|
|
11
|
+
|
|
12
|
+
// Original designer-built component — Discourser AI Slider (38:7988)
|
|
13
|
+
// This is the component used in production Discourser.AI page designs.
|
|
14
|
+
//
|
|
15
|
+
// Import as namespace: import * as Slider from '@discourser/design-system/Slider'
|
|
16
|
+
//
|
|
17
|
+
// Anatomy:
|
|
18
|
+
// <Slider.Root defaultValue={[number]} min={number} max={number} step={number}>
|
|
19
|
+
// <Slider.Label>Label text</Slider.Label>
|
|
20
|
+
// <Slider.Control>
|
|
21
|
+
// <Slider.Track>
|
|
22
|
+
// <Slider.Range />
|
|
23
|
+
// </Slider.Track>
|
|
24
|
+
// <Slider.Thumbs /> ← convenience component, renders one Thumb per value
|
|
25
|
+
// </Slider.Control>
|
|
26
|
+
// <Slider.ValueText /> ← optional, displays current value
|
|
27
|
+
// </Slider.Root>
|
|
28
|
+
//
|
|
29
|
+
// Key props on Root:
|
|
30
|
+
// defaultValue — uncontrolled initial value array, e.g. [50]
|
|
31
|
+
// value — controlled value array, e.g. [50]
|
|
32
|
+
// onValueChange — callback ({ value }: { value: number[] }) => void
|
|
33
|
+
// min — number (default: 0)
|
|
34
|
+
// max — number (default: 100)
|
|
35
|
+
// step — number (default: 1)
|
|
36
|
+
// orientation — 'horizontal' | 'vertical' (default: 'horizontal')
|
|
37
|
+
// disabled — boolean
|
|
38
|
+
// colorPalette — 'primary' | 'secondary' | 'tertiary' | 'neutral' | 'error'
|
|
39
|
+
//
|
|
40
|
+
// Convenience components:
|
|
41
|
+
// <Slider.Thumbs /> — renders one Thumb per value entry (use instead of
|
|
42
|
+
// manually mapping Slider.Thumb with index props)
|
|
43
|
+
// <Slider.Marks marks={[0, 25, 50, 75, 100]} /> — renders a MarkerGroup
|
|
44
|
+
figma.connect(
|
|
45
|
+
Slider.Root,
|
|
46
|
+
'https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=38-7988',
|
|
47
|
+
{
|
|
48
|
+
props: {
|
|
49
|
+
orientation: figma.enum('Orientation', {
|
|
50
|
+
Horizontal: 'horizontal',
|
|
51
|
+
Vertical: 'vertical',
|
|
52
|
+
}),
|
|
53
|
+
},
|
|
54
|
+
example: ({ orientation }) => (
|
|
55
|
+
<Slider.Root defaultValue={[50]} orientation={orientation}>
|
|
56
|
+
<Slider.Label>Volume</Slider.Label>
|
|
57
|
+
<Slider.Control>
|
|
58
|
+
<Slider.Track>
|
|
59
|
+
<Slider.Range />
|
|
60
|
+
</Slider.Track>
|
|
61
|
+
<Slider.Thumbs />
|
|
62
|
+
</Slider.Control>
|
|
63
|
+
</Slider.Root>
|
|
64
|
+
),
|
|
65
|
+
},
|
|
66
|
+
);
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import figma from '@figma/code-connect';
|
|
2
|
+
import { Stepper } from './Stepper';
|
|
3
|
+
|
|
4
|
+
figma.connect(
|
|
5
|
+
Stepper,
|
|
6
|
+
'https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=38-8520',
|
|
7
|
+
{
|
|
8
|
+
example: () => (
|
|
9
|
+
<Stepper
|
|
10
|
+
steps={[
|
|
11
|
+
{ value: 'step1', title: 'Step 1' },
|
|
12
|
+
{ value: 'step2', title: 'Step 2' },
|
|
13
|
+
{ value: 'step3', title: 'Step 3' },
|
|
14
|
+
]}
|
|
15
|
+
defaultStep={0}
|
|
16
|
+
/>
|
|
17
|
+
),
|
|
18
|
+
},
|
|
19
|
+
);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import figma from '@figma/code-connect';
|
|
2
|
+
import { StudioControls } from './index';
|
|
3
|
+
|
|
4
|
+
figma.connect(
|
|
5
|
+
StudioControls,
|
|
6
|
+
'https://www.figma.com/design/GaHmFfmvO4loUzuZS4TgEz/Discourser.AI--V1?node-id=38-8232',
|
|
7
|
+
{
|
|
8
|
+
props: {
|
|
9
|
+
scenarioName: figma.string('Scenario Name'),
|
|
10
|
+
scenarioFocus: figma.string('Scenario Focus'),
|
|
11
|
+
scenarioLevel: figma.enum('Level', {
|
|
12
|
+
Beginner: 'beginner',
|
|
13
|
+
Intermediate: 'intermediate',
|
|
14
|
+
Advanced: 'advanced',
|
|
15
|
+
}),
|
|
16
|
+
},
|
|
17
|
+
example: ({ scenarioName, scenarioFocus, scenarioLevel }) => (
|
|
18
|
+
<StudioControls
|
|
19
|
+
scenarioName={scenarioName}
|
|
20
|
+
scenarioFocus={scenarioFocus}
|
|
21
|
+
scenarioLevel={scenarioLevel}
|
|
22
|
+
/>
|
|
23
|
+
),
|
|
24
|
+
},
|
|
25
|
+
);
|