@sxl-studio/storybook-addon 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +146 -0
- package/dist/components/SxlPanel.d.ts +3 -0
- package/dist/components/SxlPanel.d.ts.map +1 -0
- package/dist/components/SxlPanel.js +102 -0
- package/dist/components/SxlPanel.js.map +1 -0
- package/dist/components/styles.d.ts +21 -0
- package/dist/components/styles.d.ts.map +1 -0
- package/dist/components/styles.js +130 -0
- package/dist/components/styles.js.map +1 -0
- package/dist/constants.d.ts +4 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +4 -0
- package/dist/constants.js.map +1 -0
- package/dist/convert.d.ts +16 -0
- package/dist/convert.d.ts.map +1 -0
- package/dist/convert.js +53 -0
- package/dist/convert.js.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -0
- package/dist/manager.d.ts +2 -0
- package/dist/manager.d.ts.map +1 -0
- package/dist/manager.js +13 -0
- package/dist/manager.js.map +1 -0
- package/dist/preset.d.ts +2 -0
- package/dist/preset.d.ts.map +1 -0
- package/dist/preset.js +7 -0
- package/dist/preset.js.map +1 -0
- package/dist/types.d.ts +55 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +60 -0
package/README.md
ADDED
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
# @sxl-studio/storybook-addon
|
|
2
|
+
|
|
3
|
+
Storybook addon for [SXL Studio](https://sxl-studio.com) — displays Figma Embed, component info, and design token status for components linked via the SXL Studio Figma plugin.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Figma Embed** — live Figma design iframe centered in the addon panel
|
|
8
|
+
- **Component info** — name, description, node ID, direct Figma link
|
|
9
|
+
- **Contract** — component properties and variant count
|
|
10
|
+
- **Statuses** — token assignment and design readiness badges
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install @sxl-studio/storybook-addon --save-dev
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Setup
|
|
19
|
+
|
|
20
|
+
### 1. Register the addon
|
|
21
|
+
|
|
22
|
+
`.storybook/main.ts`:
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
export default {
|
|
26
|
+
addons: [
|
|
27
|
+
'@sxl-studio/storybook-addon',
|
|
28
|
+
// ...other addons
|
|
29
|
+
],
|
|
30
|
+
};
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### 2. Import the registry
|
|
34
|
+
|
|
35
|
+
The SXL Studio Figma plugin generates a `sxl-codeconnect.json` (or `diff-code-connect.<fileKey>.json`) file that maps Figma components to your codebase. Import it in your Storybook preview config:
|
|
36
|
+
|
|
37
|
+
**Option A** — using `sxl-codeconnect.json` (exported from plugin):
|
|
38
|
+
|
|
39
|
+
`.storybook/preview.ts`:
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
import registry from '../sxl-codeconnect.json';
|
|
43
|
+
|
|
44
|
+
export default {
|
|
45
|
+
parameters: {
|
|
46
|
+
sxl: { registry },
|
|
47
|
+
},
|
|
48
|
+
};
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Option B** — using the existing `diff-code-connect` file:
|
|
52
|
+
|
|
53
|
+
```ts
|
|
54
|
+
import raw from '../diff-code-connect.abc123.json';
|
|
55
|
+
import { fromDiffCodeConnect } from '@sxl-studio/storybook-addon';
|
|
56
|
+
|
|
57
|
+
export default {
|
|
58
|
+
parameters: {
|
|
59
|
+
sxl: { registry: fromDiffCodeConnect(raw) },
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### 3. Match stories to Figma components
|
|
65
|
+
|
|
66
|
+
Per-story matching:
|
|
67
|
+
|
|
68
|
+
```ts
|
|
69
|
+
export const Default = {
|
|
70
|
+
parameters: {
|
|
71
|
+
sxl: { component: 'WButton' },
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Or by Figma node ID:
|
|
77
|
+
|
|
78
|
+
```ts
|
|
79
|
+
export const Default = {
|
|
80
|
+
parameters: {
|
|
81
|
+
sxl: { figmaNodeId: '1:23' },
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
You can also pass data directly without a registry:
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
export const Default = {
|
|
90
|
+
parameters: {
|
|
91
|
+
sxl: {
|
|
92
|
+
figmaUrl: 'https://www.figma.com/design/abc123?node-id=1-23',
|
|
93
|
+
description: 'Primary action button',
|
|
94
|
+
tokenStatus: 'assigned',
|
|
95
|
+
readiness: 'ready-for-dev',
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
};
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## Registry format (`sxl-codeconnect.json`)
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"version": 1,
|
|
106
|
+
"figmaFileKey": "abc123",
|
|
107
|
+
"figmaFileName": "Design System",
|
|
108
|
+
"entries": [
|
|
109
|
+
{
|
|
110
|
+
"nodeId": "1:23",
|
|
111
|
+
"displayName": "WButton",
|
|
112
|
+
"description": "Primary action button",
|
|
113
|
+
"figmaUrl": "https://www.figma.com/design/abc123?node-id=1-23",
|
|
114
|
+
"designEmbed": true,
|
|
115
|
+
"metadata": true,
|
|
116
|
+
"meta": {
|
|
117
|
+
"variantCount": 12,
|
|
118
|
+
"componentProperties": ["size", "variant", "disabled"],
|
|
119
|
+
"tokenStatus": "assigned",
|
|
120
|
+
"readiness": "ready-for-dev"
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
]
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
## Parameters reference
|
|
128
|
+
|
|
129
|
+
| Parameter | Type | Description |
|
|
130
|
+
|-----------|------|-------------|
|
|
131
|
+
| `sxl.registry` | `SxlRegistry` | Global registry object (set once in preview.ts) |
|
|
132
|
+
| `sxl.component` | `string` | Match entry by `displayName` |
|
|
133
|
+
| `sxl.figmaNodeId` | `string` | Match entry by Figma node ID |
|
|
134
|
+
| `sxl.figmaUrl` | `string` | Direct Figma URL (no registry needed) |
|
|
135
|
+
| `sxl.description` | `string` | Override description |
|
|
136
|
+
| `sxl.tokenStatus` | `"assigned" \| "partial" \| "none"` | Override token status |
|
|
137
|
+
| `sxl.readiness` | `"complete" \| "ready-for-dev" \| "in-progress" \| "backlog"` | Override readiness |
|
|
138
|
+
|
|
139
|
+
## Requirements
|
|
140
|
+
|
|
141
|
+
- Storybook 8+
|
|
142
|
+
- React 18+ or 19+
|
|
143
|
+
|
|
144
|
+
## License
|
|
145
|
+
|
|
146
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SxlPanel.d.ts","sourceRoot":"","sources":["../../src/components/SxlPanel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAuI1B,eAAO,MAAM,QAAQ,EAAE,KAAK,CAAC,EA0G5B,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import { useParameter } from "storybook/internal/manager-api";
|
|
3
|
+
import { PARAM_KEY } from "../constants";
|
|
4
|
+
import * as S from "./styles";
|
|
5
|
+
// ── Lookup helpers ──────────────────────────────────────────────
|
|
6
|
+
const TOKEN_STATUS_MAP = {
|
|
7
|
+
assigned: { label: "Assigned", color: "#1bc47d" },
|
|
8
|
+
partial: { label: "Partial", color: "#f5a623" },
|
|
9
|
+
none: { label: "None", color: "#b0b0b0" },
|
|
10
|
+
};
|
|
11
|
+
const READINESS_MAP = {
|
|
12
|
+
"complete": { label: "Complete", color: "#1bc47d" },
|
|
13
|
+
"ready-for-dev": { label: "Ready for Dev", color: "#18a0fb" },
|
|
14
|
+
"in-progress": { label: "In Progress", color: "#f5a623" },
|
|
15
|
+
"backlog": { label: "Backlog", color: "#b0b0b0" },
|
|
16
|
+
};
|
|
17
|
+
// ── Entry resolution ────────────────────────────────────────────
|
|
18
|
+
function resolveEntry(params) {
|
|
19
|
+
if (!params)
|
|
20
|
+
return null;
|
|
21
|
+
const registry = params.registry;
|
|
22
|
+
if (params.figmaUrl || params.description) {
|
|
23
|
+
return {
|
|
24
|
+
nodeId: params.figmaNodeId ?? "",
|
|
25
|
+
displayName: params.component ?? "",
|
|
26
|
+
description: params.description,
|
|
27
|
+
figmaUrl: params.figmaUrl,
|
|
28
|
+
designEmbed: !!params.figmaUrl,
|
|
29
|
+
metadata: !!params.description,
|
|
30
|
+
meta: {
|
|
31
|
+
tokenStatus: params.tokenStatus,
|
|
32
|
+
readiness: params.readiness,
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
if (!registry?.entries?.length)
|
|
37
|
+
return null;
|
|
38
|
+
let found;
|
|
39
|
+
if (params.figmaNodeId) {
|
|
40
|
+
found = registry.entries.find((e) => e.nodeId === params.figmaNodeId);
|
|
41
|
+
}
|
|
42
|
+
if (!found && params.component) {
|
|
43
|
+
const name = params.component.toLowerCase();
|
|
44
|
+
found = registry.entries.find((e) => e.displayName.toLowerCase() === name);
|
|
45
|
+
}
|
|
46
|
+
if (!found)
|
|
47
|
+
return null;
|
|
48
|
+
return {
|
|
49
|
+
...found,
|
|
50
|
+
meta: {
|
|
51
|
+
...found.meta,
|
|
52
|
+
tokenStatus: params.tokenStatus ?? found.meta?.tokenStatus,
|
|
53
|
+
readiness: params.readiness ?? found.meta?.readiness,
|
|
54
|
+
},
|
|
55
|
+
description: params.description ?? found.description,
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
function buildEmbedUrl(figmaUrl) {
|
|
59
|
+
if (figmaUrl.includes("figma.com/embed"))
|
|
60
|
+
return figmaUrl;
|
|
61
|
+
return `https://www.figma.com/embed?embed_host=storybook&url=${encodeURIComponent(figmaUrl)}`;
|
|
62
|
+
}
|
|
63
|
+
function buildDesignUrl(figmaUrl) {
|
|
64
|
+
if (figmaUrl.includes("figma.com/embed")) {
|
|
65
|
+
try {
|
|
66
|
+
const u = new URL(figmaUrl);
|
|
67
|
+
return u.searchParams.get("url") ?? figmaUrl;
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
return figmaUrl;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return figmaUrl;
|
|
74
|
+
}
|
|
75
|
+
// ── Sub-components ──────────────────────────────────────────────
|
|
76
|
+
const EmptyState = () => (_jsx("div", { style: S.container, children: _jsxs("div", { style: S.emptyState, children: [_jsx("p", { style: S.emptyTitle, children: "No SXL data for this story" }), _jsxs("p", { style: S.emptyHint, children: ["Import the registry in\u00A0", _jsx("code", { style: S.code, children: ".storybook/preview.ts" }), ":"] }), _jsx("pre", { style: S.codeBlock, children: `import registry from '../sxl-codeconnect.json';
|
|
77
|
+
|
|
78
|
+
export default {
|
|
79
|
+
parameters: {
|
|
80
|
+
sxl: { registry },
|
|
81
|
+
},
|
|
82
|
+
};` }), _jsx("p", { style: S.emptyHint, children: "Then match a story to a Figma component:" }), _jsx("pre", { style: S.codeBlock, children: `export const Default = {
|
|
83
|
+
parameters: {
|
|
84
|
+
sxl: { component: 'ButtonPrimary' },
|
|
85
|
+
},
|
|
86
|
+
};` })] }) }));
|
|
87
|
+
const StatusRow = ({ label, status, color, }) => (_jsxs("div", { style: S.infoRow, children: [_jsx("span", { style: S.infoLabel, children: label }), _jsxs("span", { style: S.statusBadge, children: [_jsx("span", { style: { ...S.statusDot, backgroundColor: color } }), status] })] }));
|
|
88
|
+
// ── Main panel ──────────────────────────────────────────────────
|
|
89
|
+
export const SxlPanel = () => {
|
|
90
|
+
const params = useParameter(PARAM_KEY);
|
|
91
|
+
const entry = resolveEntry(params);
|
|
92
|
+
if (!entry)
|
|
93
|
+
return _jsx(EmptyState, {});
|
|
94
|
+
const tokenStatus = entry.meta?.tokenStatus;
|
|
95
|
+
const readiness = entry.meta?.readiness;
|
|
96
|
+
const tokenInfo = tokenStatus ? TOKEN_STATUS_MAP[tokenStatus] : null;
|
|
97
|
+
const readinessInfo = readiness ? READINESS_MAP[readiness] : null;
|
|
98
|
+
const hasProps = !!entry.meta?.componentProperties?.length;
|
|
99
|
+
const hasStatus = !!(tokenInfo || readinessInfo);
|
|
100
|
+
return (_jsxs("div", { style: S.container, children: [entry.figmaUrl && entry.designEmbed !== false && (_jsx("div", { style: S.embedSection, children: _jsx("iframe", { title: "Figma Design", src: buildEmbedUrl(entry.figmaUrl), style: S.iframe, allowFullScreen: true }) })), (entry.displayName || entry.description || entry.nodeId) && (_jsxs("div", { style: S.section, children: [_jsx("div", { style: S.sectionTitle, children: "Component" }), entry.displayName && (_jsxs("div", { style: S.infoRow, children: [_jsx("span", { style: S.infoLabel, children: "Name" }), _jsx("span", { style: S.infoValue, children: entry.displayName })] })), entry.description && (_jsxs("div", { style: S.infoRow, children: [_jsx("span", { style: S.infoLabel, children: "Description" }), _jsx("span", { style: S.infoValue, children: entry.description })] })), entry.nodeId && (_jsxs("div", { style: S.infoRow, children: [_jsx("span", { style: S.infoLabel, children: "Node ID" }), _jsx("span", { style: { ...S.infoValue, ...S.mono }, children: entry.nodeId })] })), entry.figmaUrl && (_jsxs("div", { style: S.infoRow, children: [_jsx("span", { style: S.infoLabel, children: "Figma" }), _jsx("a", { href: buildDesignUrl(entry.figmaUrl), target: "_blank", rel: "noopener noreferrer", style: S.figmaLink, children: "Open in Figma \u2197" })] }))] })), hasProps && (_jsxs("div", { style: S.section, children: [_jsx("div", { style: S.sectionTitle, children: "Contract" }), _jsxs("div", { style: S.infoRow, children: [_jsx("span", { style: S.infoLabel, children: "Properties" }), _jsx("span", { style: S.propsList, children: entry.meta.componentProperties.map((p) => (_jsx("span", { style: S.propBadge, children: p }, p))) })] }), entry.meta.variantCount != null && (_jsxs("div", { style: S.infoRow, children: [_jsx("span", { style: S.infoLabel, children: "Variants" }), _jsx("span", { style: S.infoValue, children: entry.meta.variantCount })] }))] })), hasStatus && (_jsxs("div", { style: S.section, children: [_jsx("div", { style: S.sectionTitle, children: "Status" }), tokenInfo && (_jsx(StatusRow, { label: "Tokens", status: tokenInfo.label, color: tokenInfo.color })), readinessInfo && (_jsx(StatusRow, { label: "Readiness", status: readinessInfo.label, color: readinessInfo.color }))] }))] }));
|
|
101
|
+
};
|
|
102
|
+
//# sourceMappingURL=SxlPanel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SxlPanel.js","sourceRoot":"","sources":["../../src/components/SxlPanel.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { CSSProperties } from "react";
|
|
2
|
+
export declare const container: CSSProperties;
|
|
3
|
+
export declare const embedSection: CSSProperties;
|
|
4
|
+
export declare const iframe: CSSProperties;
|
|
5
|
+
export declare const section: CSSProperties;
|
|
6
|
+
export declare const sectionTitle: CSSProperties;
|
|
7
|
+
export declare const infoRow: CSSProperties;
|
|
8
|
+
export declare const infoLabel: CSSProperties;
|
|
9
|
+
export declare const infoValue: CSSProperties;
|
|
10
|
+
export declare const mono: CSSProperties;
|
|
11
|
+
export declare const statusBadge: CSSProperties;
|
|
12
|
+
export declare const statusDot: CSSProperties;
|
|
13
|
+
export declare const propsList: CSSProperties;
|
|
14
|
+
export declare const propBadge: CSSProperties;
|
|
15
|
+
export declare const emptyState: CSSProperties;
|
|
16
|
+
export declare const emptyTitle: CSSProperties;
|
|
17
|
+
export declare const emptyHint: CSSProperties;
|
|
18
|
+
export declare const code: CSSProperties;
|
|
19
|
+
export declare const codeBlock: CSSProperties;
|
|
20
|
+
export declare const figmaLink: CSSProperties;
|
|
21
|
+
//# sourceMappingURL=styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/components/styles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAM3C,eAAO,MAAM,SAAS,EAAE,aAQvB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,aAO1B,CAAC;AAEF,eAAO,MAAM,MAAM,EAAE,aAIpB,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,aAMrB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,aAO1B,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,aAKrB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,aAMvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,aAIvB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,aAGlB,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,aAMzB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,aAMvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,aAIvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,aAOvB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,aAGxB,CAAC;AAEF,eAAO,MAAM,UAAU,EAAE,aAMxB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,aAIvB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,aAMlB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,aAYvB,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE,aAIvB,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
const FONT_STACK = "-apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif";
|
|
2
|
+
const MONO_STACK = "'SF Mono', 'Fira Code', 'Cascadia Code', Menlo, monospace";
|
|
3
|
+
export const container = {
|
|
4
|
+
padding: "16px",
|
|
5
|
+
fontFamily: FONT_STACK,
|
|
6
|
+
fontSize: "13px",
|
|
7
|
+
lineHeight: 1.5,
|
|
8
|
+
color: "var(--sxl-text, #333)",
|
|
9
|
+
overflow: "auto",
|
|
10
|
+
height: "100%",
|
|
11
|
+
};
|
|
12
|
+
export const embedSection = {
|
|
13
|
+
marginBottom: "16px",
|
|
14
|
+
borderRadius: "8px",
|
|
15
|
+
overflow: "hidden",
|
|
16
|
+
border: "1px solid var(--sxl-border, #e6e6e6)",
|
|
17
|
+
display: "flex",
|
|
18
|
+
justifyContent: "center",
|
|
19
|
+
};
|
|
20
|
+
export const iframe = {
|
|
21
|
+
width: "100%",
|
|
22
|
+
height: "420px",
|
|
23
|
+
border: "none",
|
|
24
|
+
};
|
|
25
|
+
export const section = {
|
|
26
|
+
marginBottom: "12px",
|
|
27
|
+
padding: "12px",
|
|
28
|
+
borderRadius: "6px",
|
|
29
|
+
backgroundColor: "var(--sxl-section-bg, #fafafa)",
|
|
30
|
+
border: "1px solid var(--sxl-border, #eee)",
|
|
31
|
+
};
|
|
32
|
+
export const sectionTitle = {
|
|
33
|
+
fontSize: "11px",
|
|
34
|
+
fontWeight: 600,
|
|
35
|
+
textTransform: "uppercase",
|
|
36
|
+
letterSpacing: "0.5px",
|
|
37
|
+
color: "var(--sxl-muted, #999)",
|
|
38
|
+
marginBottom: "8px",
|
|
39
|
+
};
|
|
40
|
+
export const infoRow = {
|
|
41
|
+
display: "flex",
|
|
42
|
+
alignItems: "baseline",
|
|
43
|
+
gap: "8px",
|
|
44
|
+
marginBottom: "4px",
|
|
45
|
+
};
|
|
46
|
+
export const infoLabel = {
|
|
47
|
+
fontSize: "12px",
|
|
48
|
+
fontWeight: 500,
|
|
49
|
+
color: "var(--sxl-label, #666)",
|
|
50
|
+
minWidth: "90px",
|
|
51
|
+
flexShrink: 0,
|
|
52
|
+
};
|
|
53
|
+
export const infoValue = {
|
|
54
|
+
fontSize: "13px",
|
|
55
|
+
color: "var(--sxl-text, #333)",
|
|
56
|
+
wordBreak: "break-word",
|
|
57
|
+
};
|
|
58
|
+
export const mono = {
|
|
59
|
+
fontFamily: MONO_STACK,
|
|
60
|
+
fontSize: "12px",
|
|
61
|
+
};
|
|
62
|
+
export const statusBadge = {
|
|
63
|
+
display: "inline-flex",
|
|
64
|
+
alignItems: "center",
|
|
65
|
+
gap: "6px",
|
|
66
|
+
fontSize: "12px",
|
|
67
|
+
fontWeight: 500,
|
|
68
|
+
};
|
|
69
|
+
export const statusDot = {
|
|
70
|
+
width: "8px",
|
|
71
|
+
height: "8px",
|
|
72
|
+
borderRadius: "50%",
|
|
73
|
+
display: "inline-block",
|
|
74
|
+
flexShrink: 0,
|
|
75
|
+
};
|
|
76
|
+
export const propsList = {
|
|
77
|
+
display: "flex",
|
|
78
|
+
flexWrap: "wrap",
|
|
79
|
+
gap: "4px",
|
|
80
|
+
};
|
|
81
|
+
export const propBadge = {
|
|
82
|
+
fontSize: "11px",
|
|
83
|
+
fontFamily: MONO_STACK,
|
|
84
|
+
backgroundColor: "var(--sxl-badge-bg, #eef)",
|
|
85
|
+
color: "var(--sxl-badge-text, #336)",
|
|
86
|
+
padding: "2px 6px",
|
|
87
|
+
borderRadius: "4px",
|
|
88
|
+
};
|
|
89
|
+
export const emptyState = {
|
|
90
|
+
textAlign: "center",
|
|
91
|
+
padding: "32px 16px",
|
|
92
|
+
};
|
|
93
|
+
export const emptyTitle = {
|
|
94
|
+
fontSize: "14px",
|
|
95
|
+
fontWeight: 600,
|
|
96
|
+
color: "var(--sxl-muted, #666)",
|
|
97
|
+
marginBottom: "16px",
|
|
98
|
+
marginTop: 0,
|
|
99
|
+
};
|
|
100
|
+
export const emptyHint = {
|
|
101
|
+
fontSize: "12px",
|
|
102
|
+
color: "var(--sxl-muted, #999)",
|
|
103
|
+
marginBottom: "8px",
|
|
104
|
+
};
|
|
105
|
+
export const code = {
|
|
106
|
+
fontFamily: MONO_STACK,
|
|
107
|
+
fontSize: "11px",
|
|
108
|
+
backgroundColor: "var(--sxl-code-bg, #f0f0f0)",
|
|
109
|
+
padding: "1px 4px",
|
|
110
|
+
borderRadius: "3px",
|
|
111
|
+
};
|
|
112
|
+
export const codeBlock = {
|
|
113
|
+
fontFamily: MONO_STACK,
|
|
114
|
+
fontSize: "11px",
|
|
115
|
+
backgroundColor: "var(--sxl-code-bg, #f5f5f5)",
|
|
116
|
+
border: "1px solid var(--sxl-border, #e6e6e6)",
|
|
117
|
+
borderRadius: "6px",
|
|
118
|
+
padding: "12px",
|
|
119
|
+
textAlign: "left",
|
|
120
|
+
overflow: "auto",
|
|
121
|
+
marginBottom: "12px",
|
|
122
|
+
lineHeight: 1.6,
|
|
123
|
+
whiteSpace: "pre",
|
|
124
|
+
};
|
|
125
|
+
export const figmaLink = {
|
|
126
|
+
fontSize: "11px",
|
|
127
|
+
color: "var(--sxl-link, #18a0fb)",
|
|
128
|
+
textDecoration: "none",
|
|
129
|
+
};
|
|
130
|
+
//# sourceMappingURL=styles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.js","sourceRoot":"","sources":["../../src/components/styles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,EAAG,YAAqB,CAAC;AAC9C,eAAO,MAAM,QAAQ,oBAA+B,CAAC;AACrD,eAAO,MAAM,SAAS,EAAG,KAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,QAAQ,GAAG,YAAqB,CAAC;AAC9C,MAAM,CAAC,MAAM,QAAQ,GAAG,GAAG,QAAQ,QAAiB,CAAC;AACrD,MAAM,CAAC,MAAM,SAAS,GAAG,KAAc,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { SxlRegistry } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* Converts the plugin's `diff-code-connect.<fileKey>.json` to the addon registry format.
|
|
4
|
+
*
|
|
5
|
+
* Usage in `.storybook/preview.ts`:
|
|
6
|
+
* ```ts
|
|
7
|
+
* import raw from '../diff-code-connect.abc123.json';
|
|
8
|
+
* import { fromDiffCodeConnect } from '@sxl-studio/storybook-addon';
|
|
9
|
+
*
|
|
10
|
+
* export default {
|
|
11
|
+
* parameters: { sxl: { registry: fromDiffCodeConnect(raw) } },
|
|
12
|
+
* };
|
|
13
|
+
* ```
|
|
14
|
+
*/
|
|
15
|
+
export declare function fromDiffCodeConnect(data: unknown): SxlRegistry;
|
|
16
|
+
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAoB,MAAM,SAAS,CAAC;AAE7D;;;;;;;;;;;;GAYG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,OAAO,GAAG,WAAW,CA0C9D"}
|
package/dist/convert.js
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Converts the plugin's `diff-code-connect.<fileKey>.json` to the addon registry format.
|
|
3
|
+
*
|
|
4
|
+
* Usage in `.storybook/preview.ts`:
|
|
5
|
+
* ```ts
|
|
6
|
+
* import raw from '../diff-code-connect.abc123.json';
|
|
7
|
+
* import { fromDiffCodeConnect } from '@sxl-studio/storybook-addon';
|
|
8
|
+
*
|
|
9
|
+
* export default {
|
|
10
|
+
* parameters: { sxl: { registry: fromDiffCodeConnect(raw) } },
|
|
11
|
+
* };
|
|
12
|
+
* ```
|
|
13
|
+
*/
|
|
14
|
+
export function fromDiffCodeConnect(data) {
|
|
15
|
+
if (!data || typeof data !== "object") {
|
|
16
|
+
return { version: 1, figmaFileKey: "", entries: [] };
|
|
17
|
+
}
|
|
18
|
+
const d = data;
|
|
19
|
+
const fileKey = typeof d.$figmaFileKey === "string" ? d.$figmaFileKey : "";
|
|
20
|
+
const fileName = typeof d.$figmaFileName === "string" ? d.$figmaFileName : undefined;
|
|
21
|
+
const rawEntries = Array.isArray(d.entries) ? d.entries : [];
|
|
22
|
+
const entries = rawEntries
|
|
23
|
+
.filter((e) => {
|
|
24
|
+
if (!e || typeof e !== "object")
|
|
25
|
+
return false;
|
|
26
|
+
const o = e;
|
|
27
|
+
return o.linked === true && !!o.binding;
|
|
28
|
+
})
|
|
29
|
+
.map((e) => {
|
|
30
|
+
const b = e.binding;
|
|
31
|
+
const sb = (b.storybook ?? {});
|
|
32
|
+
const nodeId = String(e.nodeId ?? "");
|
|
33
|
+
const figmaUrl = fileKey
|
|
34
|
+
? `https://www.figma.com/design/${fileKey}?node-id=${nodeId.replace(":", "-")}`
|
|
35
|
+
: undefined;
|
|
36
|
+
return {
|
|
37
|
+
nodeId,
|
|
38
|
+
displayName: String(b.displayName ?? e.nodeName ?? ""),
|
|
39
|
+
description: sb.description ? String(sb.description) : undefined,
|
|
40
|
+
figmaUrl,
|
|
41
|
+
designEmbed: sb.designEmbed === true,
|
|
42
|
+
compositionJson: sb.compositionJson === true,
|
|
43
|
+
metadata: sb.metadata === true,
|
|
44
|
+
};
|
|
45
|
+
});
|
|
46
|
+
return {
|
|
47
|
+
version: 1,
|
|
48
|
+
figmaFileKey: fileKey,
|
|
49
|
+
figmaFileName: fileName,
|
|
50
|
+
entries,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=convert.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../src/convert.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAa;IAC/C,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,CAAC,GAAG,IAA+B,CAAC;IAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,aAAa,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3E,MAAM,QAAQ,GAAG,OAAO,CAAC,CAAC,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC;IAErF,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;IAE7D,MAAM,OAAO,GAAuB,UAAU;SAC3C,MAAM,CAAC,CAAC,CAAU,EAAkB,EAAE;QACrC,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC9C,MAAM,CAAC,GAAG,CAA4B,CAAC;QACvC,OAAO,CAAC,CAAC,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;IAC1C,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE;QACpB,MAAM,CAAC,GAAG,CAAC,CAAC,OAAkC,CAAC;QAC/C,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAA4B,CAAC;QAC1D,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,QAAQ,GAAG,OAAO;YACtB,CAAC,CAAC,gCAAgC,OAAO,YAAY,MAAM,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE;YAC/E,CAAC,CAAC,SAAS,CAAC;QAEd,OAAO;YACL,MAAM;YACN,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC,QAAQ,IAAI,EAAE,CAAC;YACtD,WAAW,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,SAAS;YAChE,QAAQ;YACR,WAAW,EAAE,EAAE,CAAC,WAAW,KAAK,IAAI;YACpC,eAAe,EAAE,EAAE,CAAC,eAAe,KAAK,IAAI;YAC5C,QAAQ,EAAE,EAAE,CAAC,QAAQ,KAAK,IAAI;SAC/B,CAAC;IACJ,CAAC,CAAC,CAAC;IAEL,OAAO;QACL,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,OAAO;QACrB,aAAa,EAAE,QAAQ;QACvB,OAAO;KACR,CAAC;AACJ,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { ADDON_ID, PANEL_ID, PARAM_KEY } from "./constants";
|
|
2
|
+
export type { SxlRegistry, SxlRegistryEntry, SxlRegistryMeta, SxlStoryParameters, SxlTokenStatus, SxlReadiness, } from "./types";
|
|
3
|
+
export { fromDiffCodeConnect } from "./convert";
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE5D,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,cAAc,EACd,YAAY,GACb,MAAM,SAAS,CAAC;AAEjB,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAW5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../src/manager.tsx"],"names":[],"mappings":""}
|
package/dist/manager.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { addons, types } from "storybook/internal/manager-api";
|
|
3
|
+
import { AddonPanel } from "storybook/internal/components";
|
|
4
|
+
import { ADDON_ID, PANEL_ID } from "./constants";
|
|
5
|
+
import { SxlPanel } from "./components/SxlPanel";
|
|
6
|
+
addons.register(ADDON_ID, () => {
|
|
7
|
+
addons.add(PANEL_ID, {
|
|
8
|
+
type: types.PANEL,
|
|
9
|
+
title: "SXL Studio",
|
|
10
|
+
render: ({ active }) => (_jsx(AddonPanel, { active: active ?? false, children: _jsx(SxlPanel, {}) })),
|
|
11
|
+
});
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manager.js","sourceRoot":"","sources":["../src/manager.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,+BAA+B,CAAC;AAC3D,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IAC7B,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE;QACnB,IAAI,EAAE,KAAK,CAAC,KAAK;QACjB,KAAK,EAAE,YAAY;QACnB,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,CACtB,KAAC,UAAU,IAAC,MAAM,EAAE,MAAM,IAAI,KAAK,YACjC,KAAC,QAAQ,KAAG,GACD,CACd;KACF,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/dist/preset.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.d.ts","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"AAKA,wBAAgB,cAAc,CAAC,KAAK,GAAE,MAAM,EAAO,GAAG,MAAM,EAAE,CAE7D"}
|
package/dist/preset.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { dirname, join } from "node:path";
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
const dir = dirname(fileURLToPath(import.meta.url));
|
|
4
|
+
export function managerEntries(entry = []) {
|
|
5
|
+
return [...entry, join(dir, "manager.js")];
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=preset.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preset.js","sourceRoot":"","sources":["../src/preset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEpD,MAAM,UAAU,cAAc,CAAC,QAAkB,EAAE;IACjD,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC,CAAC;AAC7C,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/** Token assignment status on the Figma component. */
|
|
2
|
+
export type SxlTokenStatus = "assigned" | "partial" | "none";
|
|
3
|
+
/** Design readiness stage. */
|
|
4
|
+
export type SxlReadiness = "complete" | "ready-for-dev" | "in-progress" | "backlog";
|
|
5
|
+
/** Extended metadata for a single Figma component (exported by the plugin). */
|
|
6
|
+
export type SxlRegistryMeta = {
|
|
7
|
+
variantCount?: number;
|
|
8
|
+
componentProperties?: string[];
|
|
9
|
+
tokenStatus?: SxlTokenStatus;
|
|
10
|
+
readiness?: SxlReadiness;
|
|
11
|
+
};
|
|
12
|
+
/** One component entry inside the registry. */
|
|
13
|
+
export type SxlRegistryEntry = {
|
|
14
|
+
nodeId: string;
|
|
15
|
+
displayName: string;
|
|
16
|
+
description?: string;
|
|
17
|
+
/** Direct Figma design URL (not embed). */
|
|
18
|
+
figmaUrl?: string;
|
|
19
|
+
designEmbed?: boolean;
|
|
20
|
+
compositionJson?: boolean;
|
|
21
|
+
metadata?: boolean;
|
|
22
|
+
meta?: SxlRegistryMeta;
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Root registry object — typically imported from `sxl-codeconnect.json`
|
|
26
|
+
* or generated via `fromDiffCodeConnect()`.
|
|
27
|
+
*/
|
|
28
|
+
export type SxlRegistry = {
|
|
29
|
+
version: number;
|
|
30
|
+
figmaFileKey: string;
|
|
31
|
+
figmaFileName?: string;
|
|
32
|
+
updatedAt?: string;
|
|
33
|
+
entries: SxlRegistryEntry[];
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Shape of `parameters.sxl` that the addon reads from each story.
|
|
37
|
+
* Can be set globally in `preview.ts` or per-story.
|
|
38
|
+
*/
|
|
39
|
+
export type SxlStoryParameters = {
|
|
40
|
+
/** Explicit match by display name from the registry. */
|
|
41
|
+
component?: string;
|
|
42
|
+
/** Explicit match by Figma node ID. */
|
|
43
|
+
figmaNodeId?: string;
|
|
44
|
+
/** Direct Figma design URL (overrides registry lookup). */
|
|
45
|
+
figmaUrl?: string;
|
|
46
|
+
/** Direct description (overrides registry). */
|
|
47
|
+
description?: string;
|
|
48
|
+
/** Override token status per-story. */
|
|
49
|
+
tokenStatus?: SxlTokenStatus;
|
|
50
|
+
/** Override readiness per-story. */
|
|
51
|
+
readiness?: SxlReadiness;
|
|
52
|
+
/** Registry data (typically set globally in preview.ts). */
|
|
53
|
+
registry?: SxlRegistry;
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAE7D,8BAA8B;AAC9B,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,eAAe,GAAG,aAAa,GAAG,SAAS,CAAC;AAEpF,+EAA+E;AAC/E,MAAM,MAAM,eAAe,GAAG;IAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,SAAS,CAAC,EAAE,YAAY,CAAC;CAC1B,CAAC;AAEF,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,eAAe,CAAC;CACxB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,gBAAgB,EAAE,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,wDAAwD;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uCAAuC;IACvC,WAAW,CAAC,EAAE,cAAc,CAAC;IAC7B,oCAAoC;IACpC,SAAS,CAAC,EAAE,YAAY,CAAC;IACzB,4DAA4D;IAC5D,QAAQ,CAAC,EAAE,WAAW,CAAC;CACxB,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/package.json
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@sxl-studio/storybook-addon",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Storybook addon for SXL Studio — displays Figma Embed, component info and design token status for linked components",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"types": "dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"types": "./dist/index.d.ts",
|
|
11
|
+
"default": "./dist/index.js"
|
|
12
|
+
},
|
|
13
|
+
"./manager": "./dist/manager.js",
|
|
14
|
+
"./preset": "./dist/preset.js"
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist",
|
|
18
|
+
"README.md"
|
|
19
|
+
],
|
|
20
|
+
"publishConfig": {
|
|
21
|
+
"access": "public"
|
|
22
|
+
},
|
|
23
|
+
"scripts": {
|
|
24
|
+
"build": "tsc",
|
|
25
|
+
"dev": "tsc --watch",
|
|
26
|
+
"lint": "tsc --noEmit",
|
|
27
|
+
"prepublishOnly": "npm run build"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"storybook",
|
|
31
|
+
"storybook-addon",
|
|
32
|
+
"figma",
|
|
33
|
+
"design-tokens",
|
|
34
|
+
"sxl-studio",
|
|
35
|
+
"design-system",
|
|
36
|
+
"code-connect"
|
|
37
|
+
],
|
|
38
|
+
"license": "MIT",
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
41
|
+
"storybook": "^8.0.0"
|
|
42
|
+
},
|
|
43
|
+
"devDependencies": {
|
|
44
|
+
"@types/node": "^22.19.17",
|
|
45
|
+
"@types/react": "^18.0.0",
|
|
46
|
+
"react": "^18.0.0",
|
|
47
|
+
"storybook": "^8.0.0",
|
|
48
|
+
"typescript": "^5.7.0"
|
|
49
|
+
},
|
|
50
|
+
"storybook": {
|
|
51
|
+
"supportedFrameworks": [
|
|
52
|
+
"react",
|
|
53
|
+
"vue",
|
|
54
|
+
"angular",
|
|
55
|
+
"web-components",
|
|
56
|
+
"svelte"
|
|
57
|
+
],
|
|
58
|
+
"addons": true
|
|
59
|
+
}
|
|
60
|
+
}
|