@syncline-design/cli 0.0.0-stage → 0.1.0-sandbox.39
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/LICENSE +21 -0
- package/README.md +304 -2
- package/THIRD-PARTY-NOTICES.txt +95 -0
- package/bin.js +10 -0
- package/index.js +2 -0
- package/package.json +27 -4
- package/run-CJxtM1bN.js +16483 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Istvan Polacsek
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,3 +1,305 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @syncline-design/cli
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Generates a React component library from a Figma export. It needs only Node:
|
|
4
|
+
no nx, no monorepo tooling, and the generated library has no dependency on it.
|
|
5
|
+
|
|
6
|
+
```bash
|
|
7
|
+
npx @syncline-design/cli generate # write the generated files
|
|
8
|
+
npx @syncline-design/cli generate --check # write nothing; exit 1 if they are out of date
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Two release channels share this package:
|
|
12
|
+
|
|
13
|
+
- **`@sandbox`**: `npx @syncline-design/cli@sandbox …` talks to the sandbox bridge by
|
|
14
|
+
default, so AI enrichment needs no bridge configuration.
|
|
15
|
+
- **`latest`**: the stable release. It has no bridge baked in; enrichment is off
|
|
16
|
+
until you point it at one (see below).
|
|
17
|
+
|
|
18
|
+
Until the first stable release only the `sandbox` tag exists.
|
|
19
|
+
|
|
20
|
+
## What it reads and writes
|
|
21
|
+
|
|
22
|
+
| | |
|
|
23
|
+
| ------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
24
|
+
| Reads | `.figma/design.json` (required), `.figma/assets.json`, `.figma/annotations.json` and `.figma/design.enriched.json` (optional), `syncline.config.json` (optional) |
|
|
25
|
+
| Writes | components, stories, vector assets, the theme and its `ThemeProvider`, Storybook docs and wiring (`.storybook/`), and the `tsconfig.json` entry for the theme typings |
|
|
26
|
+
|
|
27
|
+
Output is formatted with **your own prettier config**, so it matches what your
|
|
28
|
+
commit hooks produce and a re-run shows no formatting churn.
|
|
29
|
+
|
|
30
|
+
Hand-editable files are written once and never overwritten unless you ask:
|
|
31
|
+
stories (`stories.overwrite`), docs guidelines (`docs.overwriteGuidelines`) and
|
|
32
|
+
a hand-written `.storybook/manager.ts`.
|
|
33
|
+
|
|
34
|
+
## Options
|
|
35
|
+
|
|
36
|
+
| Option | |
|
|
37
|
+
| ----------------- | ----------------------------------------------------------------------------------------------- |
|
|
38
|
+
| `--config <file>` | Config file (default `syncline.config.json`; every setting has a default, so no file is needed) |
|
|
39
|
+
| `--cwd <dir>` | Project root (default: the current directory) |
|
|
40
|
+
| `--check` | Drift check for CI: nothing is written; exit 1 if the output differs from what is on disk |
|
|
41
|
+
| `--verbose` | List every warning instead of a per-phase count |
|
|
42
|
+
| `--accept <path>` | After a merge conflict you resolved by hand: keep the file and record the new base (repeatable) |
|
|
43
|
+
|
|
44
|
+
Warnings are design feedback (for example a fill that is not bound to a Figma
|
|
45
|
+
variable), never failures.
|
|
46
|
+
|
|
47
|
+
## `syncline.config.json`
|
|
48
|
+
|
|
49
|
+
Every key is optional; this is the full shape with its defaults. The Figma plugin's first sync into a repo with no config adds one (framework, styling, library name and the paths below, for a single-level repo); after that it is yours to edit and syncs never touch it.
|
|
50
|
+
|
|
51
|
+
```jsonc
|
|
52
|
+
{
|
|
53
|
+
"framework": "react",
|
|
54
|
+
"styling": "styled-components",
|
|
55
|
+
"libraryName": "design-system", // names the docs and the Storybook chrome
|
|
56
|
+
"inputs": {
|
|
57
|
+
"design": ".figma/design.json",
|
|
58
|
+
"enriched": ".figma/design.enriched.json", // absent on disk => raw tier
|
|
59
|
+
"assets": ".figma/assets.json",
|
|
60
|
+
"annotations": ".figma/annotations.json", // the designer's intents; absent => none
|
|
61
|
+
},
|
|
62
|
+
"paths": {
|
|
63
|
+
"components": "src/components",
|
|
64
|
+
"assetsRoot": "src", // the design's `assets/...` paths are relative to it
|
|
65
|
+
"theme": "src/providers/ThemeProvider",
|
|
66
|
+
"docs": "src/docs",
|
|
67
|
+
"storybook": ".storybook", // null: leave Storybook alone
|
|
68
|
+
"tsconfig": "tsconfig.json", // null: don't add theme.d.ts to `files`
|
|
69
|
+
},
|
|
70
|
+
"stories": {
|
|
71
|
+
"enabled": true,
|
|
72
|
+
"target": "react-vite", // or "react-native"
|
|
73
|
+
"typesPackage": null, // override the Storybook types package
|
|
74
|
+
"groupByPage": false, // title stories "<Figma page>/<Component>"; otherwise "Components/<Component>" (never ungrouped)
|
|
75
|
+
"overwrite": false,
|
|
76
|
+
},
|
|
77
|
+
"tests": {
|
|
78
|
+
"enabled": false, // a Vitest + Testing Library spec per component; needs vitest, jsdom and @testing-library/react
|
|
79
|
+
"overwrite": false, // specs are hand-owned: an existing file is kept
|
|
80
|
+
},
|
|
81
|
+
"merge": {
|
|
82
|
+
"enabled": false, // keep hand edits to generated components when the design changes
|
|
83
|
+
"baseDir": ".figma/base", // the last generated version of each component; commit it
|
|
84
|
+
"llm": false, // paid: let the bridge resolve what a 3-way merge can't
|
|
85
|
+
"sendSource": false, // required with llm: the conflicting files' source is sent to the bridge
|
|
86
|
+
},
|
|
87
|
+
"theme": {
|
|
88
|
+
"cssReset": false, // global page state, so opt-in
|
|
89
|
+
"backgroundToken": "Background/Default/Default",
|
|
90
|
+
"brand": {
|
|
91
|
+
"title": "My DS",
|
|
92
|
+
"image": "src/assets/logo.svg", // inlined as a data URI, up to 100 KB
|
|
93
|
+
"colorToken": "Brand/60",
|
|
94
|
+
"surfaceToken": "Brand/Grey",
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
"dependencies": {
|
|
98
|
+
"install": false, // true: add missing react/styled-components/Storybook packages with your package manager
|
|
99
|
+
},
|
|
100
|
+
"docs": {
|
|
101
|
+
"enabled": true,
|
|
102
|
+
"includeHidden": false, // tokens hidden from publishing in Figma
|
|
103
|
+
"overwriteGuidelines": false,
|
|
104
|
+
},
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## For AI agents (`agent.enabled`)
|
|
109
|
+
|
|
110
|
+
Off by default. With `"agent": { "enabled": true, "packageName": "@acme/ds" }` the run also writes what a coding agent needs to use the library without reading its sources:
|
|
111
|
+
|
|
112
|
+
| File | Purpose |
|
|
113
|
+
| ------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
114
|
+
| `agent/llms.txt` | Index of every component, one line each ([llmstxt.org](https://llmstxt.org) layout) |
|
|
115
|
+
| `agent/components/<Name>.json` | One component's contract: props (types, options, defaults), what it renders / what renders it, widget behaviour **and what it does not cover**, a compiling example |
|
|
116
|
+
| `agent/components.json` | The same for all components in one file (used by `syncline mcp`) |
|
|
117
|
+
| `agent/tokens.json` | Every token: name, the `theme[...]` expression, value per mode, the designer's note |
|
|
118
|
+
| `agent/eslint-tokens.mjs` | ESLint flat-config fragment that flags raw colours in app code |
|
|
119
|
+
| `AGENTS.md` | The library's rules for an agent. Written once, then yours to edit |
|
|
120
|
+
| `src/index.ts` | A package entry exporting every component and the theme. Only written while the file is missing, `export {};` or generated by us; a hand-written entry is left alone (a diagnostic says so) |
|
|
121
|
+
|
|
122
|
+
Options: `agent.dir` (default `agent`), `agent.entry` (`src/index.ts`), `agent.guide` (`AGENTS.md`). Ship `agent/` in the published package so the files travel with the library.
|
|
123
|
+
|
|
124
|
+
`syncline mcp` serves the same data to an agent over MCP (stdio) with the tools `list_components`, `search_components`, `get_component` and `search_tokens`:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
claude mcp add design-system -- npx @syncline-design/cli mcp
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
## Storybook preview (paid)
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npx @syncline-design/cli preview publish --dir storybook-static
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
Uploads a built Storybook to the bridge, which hosts it until the pull request
|
|
137
|
+
closes and links it from the sync in the Figma plugin. It needs the same bridge
|
|
138
|
+
and credentials as enrichment, the paid plan, and a `pull_request` run of a PR a
|
|
139
|
+
sync opened. Anything missing is reported and skipped (exit 0); only an unusable
|
|
140
|
+
build directory (no `index.html`, unhostable file names, over the size limits)
|
|
141
|
+
exits 1. The workflow a sync seeds runs it for accounts that have the plan.
|
|
142
|
+
`generate` also writes a minimal `.storybook/main.ts` when the repo has none.
|
|
143
|
+
|
|
144
|
+
## Push token (for the seeded workflow)
|
|
145
|
+
|
|
146
|
+
`syncline ci push-token` asks the bridge for a short-lived token that lets the
|
|
147
|
+
generation job push to the sync's pull request as the GitHub App. In Actions it
|
|
148
|
+
masks the token and writes `token`, `name` and `email` to `$GITHUB_OUTPUT`;
|
|
149
|
+
without one (no bridge, no credentials, app not installed) it says why and exits
|
|
150
|
+
0, and the workflow pushes with its own token instead.
|
|
151
|
+
|
|
152
|
+
## TypeScript and Storybook defaults
|
|
153
|
+
|
|
154
|
+
- **`tsconfig.json`:** the generated components, ThemeProvider and Storybook decorator
|
|
155
|
+
use the automatic JSX runtime, so the project needs `"jsx": "react-jsx"`. A
|
|
156
|
+
repository with no tsconfig gets a minimal one (written once, never overwritten);
|
|
157
|
+
an existing self-contained one without `jsx` gets a warning instead of an edit.
|
|
158
|
+
`"paths": { "tsconfig": null }` opts out.
|
|
159
|
+
- **Generated tests** (`tests.enabled`, off by default): `<Component>/<Component>.spec.tsx`,
|
|
160
|
+
written from what the generated component provably does (renders and its root tag,
|
|
161
|
+
ref and native props, the suggested aria attributes, bound and toggled text, every
|
|
162
|
+
variant option, `onClick`/`disabled` on a button root, the input and progressbar
|
|
163
|
+
behaviour of those archetypes). A case the component's shape can't prove is left
|
|
164
|
+
out. No model and no network are involved. The file declares its own jsdom
|
|
165
|
+
environment, so it runs with a plain `vitest run`; it is hand-owned once written.
|
|
166
|
+
- **Stories are always titled** (`<Figma page>/<Name>` with `stories.groupByPage`,
|
|
167
|
+
else `Components/<Name>`), because Storybook lists ungrouped components above
|
|
168
|
+
every group. Existing stories files are hand-owned: set `stories.overwrite` once
|
|
169
|
+
to re-title them.
|
|
170
|
+
- **Branding:** the Storybook chrome (title, logo, colours, docs theme) is generated
|
|
171
|
+
only with `theme.brand`. The first sync seeds it from what the designer picked in
|
|
172
|
+
the plugin's Branding group (or, without a choice, a guess from the design):
|
|
173
|
+
`{ "title": "<library name>", "image": "src/assets/<Logo>/<Logo>.svg",
|
|
174
|
+
"colorToken": "Brand/…", "surfaceToken": "Brand/…" }`. `image` is a logo inlined up
|
|
175
|
+
to 100 KB; it may be one of the design's own exported assets even on the very
|
|
176
|
+
first run (the file does not need to exist yet). `colorToken` is the accent,
|
|
177
|
+
`surfaceToken` the sidebar background; both are colour variable names from
|
|
178
|
+
`design.json`. Edit them in the config afterwards.
|
|
179
|
+
|
|
180
|
+
## Keeping hand edits (merge)
|
|
181
|
+
|
|
182
|
+
By default a generated component is rewritten on every run, so a hand edit to
|
|
183
|
+
it is lost. With `merge.enabled` the CLI records what it generated under
|
|
184
|
+
`merge.baseDir` (`<path>.base` files, **commit them**) and the next run does a
|
|
185
|
+
3-way merge of base, your file and the new output, for component sources only
|
|
186
|
+
(`<Name>/<Name>.tsx`; stories, tests and guidelines are already yours):
|
|
187
|
+
|
|
188
|
+
- you changed nothing: the new output is written, as before;
|
|
189
|
+
- the generator changed nothing in that file: your file stays;
|
|
190
|
+
- you and the generator changed different places: both changes are merged;
|
|
191
|
+
- the same lines: **a conflict**. Your file stays untouched, the run reports it
|
|
192
|
+
(`--check` fails), and the base does not move, so it keeps being reported.
|
|
193
|
+
Resolve it by hand, then run `syncline generate --accept <path>` to record it.
|
|
194
|
+
|
|
195
|
+
A repo with no recorded base behaves as before (the output wins). Conflict
|
|
196
|
+
markers are never written into a source file.
|
|
197
|
+
|
|
198
|
+
With `merge.llm` and `merge.sendSource` (both required) the paid bridge may
|
|
199
|
+
resolve a conflict: **the base, your version and the new generated version of
|
|
200
|
+
each conflicting component are sent to the bridge** (at most 5 files of 60,000
|
|
201
|
+
characters per request; nothing else leaves the repo, and the bridge neither
|
|
202
|
+
stores nor logs them). The answer is checked before it is used (it must parse,
|
|
203
|
+
keep every export, and contain no conflict markers); anything else leaves the
|
|
204
|
+
conflict to you. `--check` never calls the bridge, and a run without a bridge,
|
|
205
|
+
credentials or the paid plan just reports the conflicts.
|
|
206
|
+
|
|
207
|
+
## Dependencies
|
|
208
|
+
|
|
209
|
+
The generated code imports `react`, `react-dom`, `styled-components` and, with
|
|
210
|
+
stories, Storybook (`storybook`, `@storybook/react-vite`, `@storybook/addon-docs`,
|
|
211
|
+
`vite`) and, with `tests.enabled`, `vitest`, `jsdom` and Testing Library. After writing, `generate` compares that list with the `package.json`
|
|
212
|
+
files from the project up to the repository root and **warns** about what is
|
|
213
|
+
missing. With `"dependencies": { "install": true }` it **installs** them as dev
|
|
214
|
+
dependencies instead, using the package manager the repo's lockfile names (npm
|
|
215
|
+
when there is none, creating a minimal `package.json` and `.gitignore` if the
|
|
216
|
+
repo has neither). A failed install is a warning, never a failure; `--check`
|
|
217
|
+
never installs.
|
|
218
|
+
|
|
219
|
+
## In CI
|
|
220
|
+
|
|
221
|
+
Regenerate after a design sync PR merges, and fail pull requests whose
|
|
222
|
+
generated files are stale:
|
|
223
|
+
|
|
224
|
+
```yaml
|
|
225
|
+
name: synclineon:
|
|
226
|
+
push:
|
|
227
|
+
branches: [main]
|
|
228
|
+
paths: ['.figma/**', 'syncline.config.json']
|
|
229
|
+
pull_request:
|
|
230
|
+
|
|
231
|
+
jobs:
|
|
232
|
+
generate:
|
|
233
|
+
runs-on: ubuntu-latest
|
|
234
|
+
permissions:
|
|
235
|
+
contents: write
|
|
236
|
+
steps:
|
|
237
|
+
- uses: actions/checkout@v4
|
|
238
|
+
- uses: actions/setup-node@v4
|
|
239
|
+
with:
|
|
240
|
+
node-version: 24
|
|
241
|
+
- run: npm ci
|
|
242
|
+
# Pull requests: fail when the committed output is out of date.
|
|
243
|
+
- if: github.event_name == 'pull_request'
|
|
244
|
+
run: npx @syncline-design/cli generate --check
|
|
245
|
+
# Main: regenerate and commit the result.
|
|
246
|
+
- if: github.event_name == 'push'
|
|
247
|
+
run: |
|
|
248
|
+
npx @syncline-design/cli generate
|
|
249
|
+
git config user.name "syncline[bot]"
|
|
250
|
+
git config user.email "syncline[bot]@users.noreply.github.com"
|
|
251
|
+
git add -A
|
|
252
|
+
git diff --cached --quiet || git commit -m "chore: regenerate from Figma" && git push
|
|
253
|
+
```
|
|
254
|
+
|
|
255
|
+
## AI enrichment (paid)
|
|
256
|
+
|
|
257
|
+
Enrichment gives components semantic HTML tags, ARIA attributes and JSDoc. It
|
|
258
|
+
runs on the hosted bridge, so it needs a bridge URL and credentials, and the
|
|
259
|
+
GitHub account that owns the repository needs the paid plan with the bridge's
|
|
260
|
+
GitHub App installed on the repository. Without any of that the CLI generates
|
|
261
|
+
the raw tier and says why; **enrichment never makes a run fail**.
|
|
262
|
+
|
|
263
|
+
```yaml
|
|
264
|
+
permissions:
|
|
265
|
+
contents: write
|
|
266
|
+
id-token: write # lets the job request a GitHub OIDC token for the bridge
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
| | |
|
|
270
|
+
| ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
271
|
+
| Bridge URL | `SYNCLINE_URL`, then `enrich.bridgeUrl` in the config, then the build's own default (the sandbox build defaults to the sandbox bridge; `latest` has none) |
|
|
272
|
+
| Credentials | GitHub Actions' OIDC token (needs `id-token: write`), or `SYNCLINE_TOKEN` for local runs and other CI systems |
|
|
273
|
+
|
|
274
|
+
How a run behaves:
|
|
275
|
+
|
|
276
|
+
- The result is written to `.figma/design.enriched.json`, which is also the
|
|
277
|
+
cache: a component is only sent again when its facts or the bridge's prompt
|
|
278
|
+
version change. Commit the file, so the next run (and `--check`) reuses it.
|
|
279
|
+
- A component that fails is retried once, then left on the raw tier and retried
|
|
280
|
+
next run; everything that succeeded is kept. If the daily allowance runs out
|
|
281
|
+
mid-run, the rest are left for the next day.
|
|
282
|
+
- `--check` never calls the bridge, so a drift check is free and repeatable.
|
|
283
|
+
- The bridge only ever receives small per-component summaries, never
|
|
284
|
+
`design.json`.
|
|
285
|
+
|
|
286
|
+
## Annotation overlay
|
|
287
|
+
|
|
288
|
+
`.figma/annotations.json` holds the same annotation lines a Figma component
|
|
289
|
+
description can carry (`@select`, `@input search`, `@continuous Progress 0..100`,
|
|
290
|
+
see the generated _Figma annotations_ guideline), keyed by the component's Figma
|
|
291
|
+
key, plus page entries (`@iconset` / `@iconset off`) for icon-set merging. The
|
|
292
|
+
plugin's review step writes it into the sync PR so the Figma file stays
|
|
293
|
+
untouched; you can also edit it by hand.
|
|
294
|
+
|
|
295
|
+
```json
|
|
296
|
+
{
|
|
297
|
+
"version": 1,
|
|
298
|
+
"components": { "<component key>": "@select" },
|
|
299
|
+
"pages": { "Icons": "@iconset" }
|
|
300
|
+
}
|
|
301
|
+
```
|
|
302
|
+
|
|
303
|
+
A line already in the component's Figma description wins. Entries that match no
|
|
304
|
+
component, or lines the generator does not read, are reported (`--verbose`) and
|
|
305
|
+
skipped; a malformed file stops the run instead of being ignored.
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
THIRD-PARTY NOTICES
|
|
2
|
+
|
|
3
|
+
This package bundles the third-party software listed below. Their licences
|
|
4
|
+
require the following notices to accompany copies of it.
|
|
5
|
+
|
|
6
|
+
------------------------------------------------------------------------------
|
|
7
|
+
|
|
8
|
+
fflate@0.8.3 (MIT)
|
|
9
|
+
https://github.com/101arrowz/fflate
|
|
10
|
+
|
|
11
|
+
MIT License
|
|
12
|
+
|
|
13
|
+
Copyright (c) 2026 Arjun Barrett
|
|
14
|
+
|
|
15
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
16
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
17
|
+
in the Software without restriction, including without limitation the rights
|
|
18
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
19
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
20
|
+
furnished to do so, subject to the following conditions:
|
|
21
|
+
|
|
22
|
+
The above copyright notice and this permission notice shall be included in all
|
|
23
|
+
copies or substantial portions of the Software.
|
|
24
|
+
|
|
25
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
26
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
27
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
28
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
29
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
30
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
31
|
+
SOFTWARE.
|
|
32
|
+
|
|
33
|
+
------------------------------------------------------------------------------
|
|
34
|
+
|
|
35
|
+
node-diff3@3.2.1 (MIT)
|
|
36
|
+
https://github.com/bhousel/node-diff3
|
|
37
|
+
|
|
38
|
+
### The MIT License (MIT)
|
|
39
|
+
|
|
40
|
+
diff function extracted from Project Synchrotron.
|
|
41
|
+
|
|
42
|
+
For more detail please visit:
|
|
43
|
+
- https://leastfixedpoint.com/tonyg/kcbbs/projects/synchrotron.html
|
|
44
|
+
- https://github.com/tonyg/synchrotron
|
|
45
|
+
|
|
46
|
+
Copyright (c) 2006, 2008 Tony Garnock-Jones <tonyg@lshift.net><br/>
|
|
47
|
+
Copyright (c) 2006, 2008 LShift Ltd. <query@lshift.net><br/>
|
|
48
|
+
Copyright (c) 2019-2026 Bryan Housel <bhousel@gmail.com><br/>
|
|
49
|
+
|
|
50
|
+
Permission is hereby granted, free of charge, to any person
|
|
51
|
+
obtaining a copy of this software and associated documentation files
|
|
52
|
+
(the "Software"), to deal in the Software without restriction,
|
|
53
|
+
including without limitation the rights to use, copy, modify, merge,
|
|
54
|
+
publish, distribute, sublicense, and/or sell copies of the Software,
|
|
55
|
+
and to permit persons to whom the Software is furnished to do so,
|
|
56
|
+
subject to the following conditions:
|
|
57
|
+
|
|
58
|
+
The above copyright notice and this permission notice shall be
|
|
59
|
+
included in all copies or substantial portions of the Software.
|
|
60
|
+
|
|
61
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
62
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
63
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
64
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
|
|
65
|
+
BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
|
|
66
|
+
ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
67
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
68
|
+
SOFTWARE.
|
|
69
|
+
|
|
70
|
+
------------------------------------------------------------------------------
|
|
71
|
+
|
|
72
|
+
zod@4.6.5 (MIT)
|
|
73
|
+
https://github.com/colinhacks/zod
|
|
74
|
+
|
|
75
|
+
MIT License
|
|
76
|
+
|
|
77
|
+
Copyright (c) 2025 Colin McDonnell
|
|
78
|
+
|
|
79
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
80
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
81
|
+
in the Software without restriction, including without limitation the rights
|
|
82
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
83
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
84
|
+
furnished to do so, subject to the following conditions:
|
|
85
|
+
|
|
86
|
+
The above copyright notice and this permission notice shall be included in all
|
|
87
|
+
copies or substantial portions of the Software.
|
|
88
|
+
|
|
89
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
90
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
91
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
92
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
93
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
94
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
95
|
+
SOFTWARE.
|
package/bin.js
ADDED
package/index.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import { a as e, c as t, d as n, f as r, g as i, h as a, i as o, l as s, m as c, n as l, o as u, p as d, r as f, s as p, t as m, u as h } from "./run-CJxtM1bN.js";
|
|
2
|
+
export { r as BridgeError, m as CLI_NAME, i as CLI_VERSION, c as CliConfigSchema, a as DEFAULT_CONFIG_FILE, t as bridgeClientProvider, d as createBridgeClient, s as enrichDesign, u as formatFiles, e as generate, n as getBridgeToken, h as hashFacts, l as helpText, o as loadCliConfig, f as run, p as runEnrichStep };
|
package/package.json
CHANGED
|
@@ -1,6 +1,29 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@syncline-design/cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0-sandbox.39",
|
|
4
|
+
"description": "Generates a React component library from a Figma export (Syncline).",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+https://github.com/istvanpolacsek/ui-kit.git"
|
|
9
|
+
},
|
|
10
|
+
"type": "module",
|
|
11
|
+
"bin": {
|
|
12
|
+
"syncline": "./bin.js"
|
|
13
|
+
},
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=20"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
"*.js",
|
|
19
|
+
"README.md",
|
|
20
|
+
"LICENSE",
|
|
21
|
+
"THIRD-PARTY-NOTICES.txt"
|
|
22
|
+
],
|
|
23
|
+
"publishConfig": {
|
|
24
|
+
"access": "public"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"prettier": "^3.9.6"
|
|
28
|
+
}
|
|
29
|
+
}
|