@syncedco/flow 0.1.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/CODE_OF_CONDUCT.md +26 -0
- package/CONTRIBUTING.md +54 -0
- package/LICENSE +21 -0
- package/README.md +334 -0
- package/SECURITY.md +30 -0
- package/SUPPORT.md +32 -0
- package/TRADEMARKS.md +14 -0
- package/base.css +100 -0
- package/bin/synced-flow.mjs +4639 -0
- package/components.css +1392 -0
- package/defaults.css +26 -0
- package/dist/config.d.ts +94 -0
- package/dist/config.js +3 -0
- package/dist/index.d.ts +45 -0
- package/dist/index.js +67 -0
- package/docs/accessibility-css.md +133 -0
- package/docs/ai-usage.md +112 -0
- package/docs/api-contract.md +81 -0
- package/docs/base-styling.md +113 -0
- package/docs/build-a-site-walkthrough.md +122 -0
- package/docs/cli-reference.md +230 -0
- package/docs/config-reference.md +81 -0
- package/docs/css-optimisation.md +117 -0
- package/docs/migration-from-tailwind.md +60 -0
- package/docs/native-components.md +156 -0
- package/docs/patterns.md +32 -0
- package/docs/presets.md +60 -0
- package/docs/quick-start.md +252 -0
- package/docs/recipes.md +285 -0
- package/docs/release-readiness.md +63 -0
- package/docs/system-primitives.md +150 -0
- package/docs/tailwind-comparison.md +66 -0
- package/docs/tokens.md +79 -0
- package/docs/website-patterns.md +114 -0
- package/docs/why-synced-flow.md +99 -0
- package/docs/wordpress.md +66 -0
- package/examples/README.md +16 -0
- package/examples/astro/package.json +19 -0
- package/examples/astro/src/pages/index.astro +85 -0
- package/examples/astro/src/styles/synced-flow.css +2 -0
- package/examples/astro/src/styles/synced-flow.generated.css +206 -0
- package/examples/astro/synced-flow.config.mjs +9 -0
- package/examples/next/app/layout.tsx +14 -0
- package/examples/next/app/page.tsx +92 -0
- package/examples/next/app/synced-flow.css +2 -0
- package/examples/next/app/synced-flow.generated.css +205 -0
- package/examples/next/package.json +19 -0
- package/examples/next/synced-flow.config.mjs +9 -0
- package/examples/plain-html/index.html +384 -0
- package/examples/plain-html/package.json +15 -0
- package/examples/plain-html/synced-flow.config.mjs +9 -0
- package/examples/plain-html/synced-flow.css +2 -0
- package/examples/plain-html/synced-flow.generated.css +205 -0
- package/examples/templates/README.md +22 -0
- package/examples/templates/blog-index.html +41 -0
- package/examples/templates/coming-soon.html +27 -0
- package/examples/templates/portfolio-scroll.html +45 -0
- package/examples/templates/saas-dashboard.html +171 -0
- package/examples/templates/saas-landing.html +104 -0
- package/examples/vite/index.html +2 -0
- package/examples/vite/package.json +20 -0
- package/examples/vite/src/main.jsx +27 -0
- package/examples/vite/src/synced-flow.css +2 -0
- package/examples/vite/src/synced-flow.generated.css +205 -0
- package/examples/vite/synced-flow.config.mjs +9 -0
- package/examples/wordpress/assets/css/synced-flow.css +641 -0
- package/examples/wordpress/functions.php +13 -0
- package/examples/wordpress/package.json +15 -0
- package/examples/wordpress/parts/footer.html +12 -0
- package/examples/wordpress/parts/header.html +10 -0
- package/examples/wordpress/patterns/contact-cta.php +28 -0
- package/examples/wordpress/patterns/feature-grid.php +38 -0
- package/examples/wordpress/patterns/landing-hero.php +45 -0
- package/examples/wordpress/synced-flow.config.mjs +11 -0
- package/examples/wordpress/templates/front-page.html +11 -0
- package/examples/wordpress/templates/index.html +27 -0
- package/examples/wordpress/theme.json +19 -0
- package/layout.css +365 -0
- package/package.json +93 -0
- package/reset.css +13 -0
- package/skills/synced-flow/SKILL.md +151 -0
- package/src/config.ts +98 -0
- package/src/index.ts +75 -0
- package/src/presets.d.mts +21 -0
- package/src/presets.mjs +171 -0
- package/src/tokens.mjs +138 -0
- package/src/utility-tokens.mjs +47 -0
- package/styles.css +2313 -0
- package/tokens.css +198 -0
- package/utilities.css +255 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Code Of Conduct
|
|
2
|
+
|
|
3
|
+
Synced Flow aims to be a practical, respectful open-source project.
|
|
4
|
+
|
|
5
|
+
## Expected Behaviour
|
|
6
|
+
|
|
7
|
+
- Be considerate and constructive.
|
|
8
|
+
- Keep feedback focused on the work.
|
|
9
|
+
- Assume good intent, and ask for clarification when something is unclear.
|
|
10
|
+
- Respect maintainers' time and project scope.
|
|
11
|
+
- Welcome people with different levels of CSS, design-system, WordPress, and
|
|
12
|
+
frontend experience.
|
|
13
|
+
|
|
14
|
+
## Unacceptable Behaviour
|
|
15
|
+
|
|
16
|
+
- Harassment, threats, or personal attacks.
|
|
17
|
+
- Discriminatory language or behaviour.
|
|
18
|
+
- Repeated off-topic, hostile, or bad-faith comments.
|
|
19
|
+
- Publishing private information without permission.
|
|
20
|
+
- Pressuring maintainers for unpaid commercial support.
|
|
21
|
+
|
|
22
|
+
## Reporting
|
|
23
|
+
|
|
24
|
+
Report conduct concerns to SyncedCo through [syncedco.com](https://syncedco.com).
|
|
25
|
+
Maintainers may remove comments, close issues, or block contributors when needed
|
|
26
|
+
to keep the project healthy.
|
package/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Thanks for considering a contribution to Synced Flow.
|
|
4
|
+
|
|
5
|
+
Synced Flow is an open-source fluid CSS design system maintained by SyncedCo.
|
|
6
|
+
The core project includes the CSS library, CLI, WordPress preset, examples, and
|
|
7
|
+
documentation.
|
|
8
|
+
|
|
9
|
+
## Local Setup
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
pnpm install
|
|
13
|
+
pnpm test
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Useful commands:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pnpm build
|
|
20
|
+
pnpm check
|
|
21
|
+
pnpm pack --dry-run
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Contribution Guidelines
|
|
25
|
+
|
|
26
|
+
- Keep changes focused and easy to review.
|
|
27
|
+
- Prefer modern CSS features already used by the project: cascade layers,
|
|
28
|
+
custom properties, logical properties, `clamp()`, OKLCH colour, and
|
|
29
|
+
container-aware layout.
|
|
30
|
+
- Keep new APIs small and documented.
|
|
31
|
+
- Add or update tests for CLI, package, or generated CSS behaviour.
|
|
32
|
+
- Use complete class names in docs and examples so the scanner can find them.
|
|
33
|
+
- Avoid positioning Synced Flow as a Tailwind copy or one-for-one replacement;
|
|
34
|
+
Tailwind references should only support migration from existing projects.
|
|
35
|
+
- Use British English in documentation.
|
|
36
|
+
|
|
37
|
+
## Before Opening A Pull Request
|
|
38
|
+
|
|
39
|
+
Run:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
pnpm check
|
|
43
|
+
pnpm test
|
|
44
|
+
pnpm pack --dry-run
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
For documentation-only changes, `pnpm check` is usually enough unless package
|
|
48
|
+
metadata or generated files changed.
|
|
49
|
+
|
|
50
|
+
## Commercial Work
|
|
51
|
+
|
|
52
|
+
Commercial services, premium templates, hosted tools, and paid starter kits are
|
|
53
|
+
optional work around the open-source core. They are not part of this package
|
|
54
|
+
unless explicitly released here.
|
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 SyncedCo Limited
|
|
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
ADDED
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
# Synced Flow
|
|
2
|
+
|
|
3
|
+
AI-native fluid CSS design system for brand-consistent websites, agency builds,
|
|
4
|
+
and modern frontend projects.
|
|
5
|
+
|
|
6
|
+
Synced Flow gives developers and AI coding agents a shared styling contract:
|
|
7
|
+
fluid tokens, layout primitives, accessible components, website recipes, and
|
|
8
|
+
source-scanned utility CSS.
|
|
9
|
+
|
|
10
|
+
Use it when you want AI-assisted build speed without breakpoint soup, one-off
|
|
11
|
+
brand drift, or generated class chaos.
|
|
12
|
+
|
|
13
|
+
- fluid by default: Utopia-style type and spacing with modern `clamp()` scales
|
|
14
|
+
- token-led: primitive, semantic, and component tokens using CSS custom
|
|
15
|
+
properties and OKLCH colour
|
|
16
|
+
- agent-readable: `catalog --json`, `suggest`, `recipe`, `pattern`, `lint`,
|
|
17
|
+
`doctor`, and project-local AI guidance
|
|
18
|
+
- agency-ready: presets for WordPress, Next, Astro, Vite, and plain HTML
|
|
19
|
+
- accessible defaults: visible focus states, skip links, reduced-motion
|
|
20
|
+
safeguards, and state styling
|
|
21
|
+
- lean CSS loading: modular layers plus generated utilities scanned from real
|
|
22
|
+
project usage
|
|
23
|
+
- layout primitives: container, section, stack, cluster, grid, sidebar,
|
|
24
|
+
switcher, frame, cover, hero, and flow
|
|
25
|
+
- component primitives: buttons, cards, surfaces, navigation, forms, alerts,
|
|
26
|
+
badges, avatars, charts, and section headers
|
|
27
|
+
- website patterns: logo clouds, feature blocks, stats, testimonials, pricing,
|
|
28
|
+
FAQ, CTA, and footer helpers
|
|
29
|
+
- native component styling: dialog, popover, drawer, tooltip, disclosure, tabs,
|
|
30
|
+
breadcrumbs, pagination, scroll snap, and sticky patterns
|
|
31
|
+
- AI-friendly CLI discovery: `catalog --json`, `suggest`, `lint`, `watch`, and
|
|
32
|
+
`theme init --from` for turning a site brief into reusable theme tokens
|
|
33
|
+
- project-level AI agent setup: `agents install`, `agents status`, and `skill`
|
|
34
|
+
make the packaged Synced Flow skill visible to common coding agents
|
|
35
|
+
- accessibility and base helpers: `sr-only`, `not-sr-only`, skip links, focus
|
|
36
|
+
rings, touch targets, link helpers, and list helpers
|
|
37
|
+
- accessibility state styling for invalid, required, disabled, busy, current,
|
|
38
|
+
expanded, pressed, selected, target, and forced-colors states
|
|
39
|
+
- modular CSS layer exports when a project wants a smaller imported surface
|
|
40
|
+
- modern CSS best practices: cascade layers, custom properties, logical
|
|
41
|
+
properties, `clamp()`, OKLCH colour, container-aware primitives, and
|
|
42
|
+
reduced-motion safeguards
|
|
43
|
+
|
|
44
|
+
## Links
|
|
45
|
+
|
|
46
|
+
- GitHub: [github.com/SyncedCo/synced-flow](https://github.com/SyncedCo/synced-flow)
|
|
47
|
+
- Website: [syncedco.com](https://syncedco.com)
|
|
48
|
+
- Issues: [github.com/SyncedCo/synced-flow/issues](https://github.com/SyncedCo/synced-flow/issues)
|
|
49
|
+
- Support: [SUPPORT.md](SUPPORT.md)
|
|
50
|
+
|
|
51
|
+
## Open Source
|
|
52
|
+
|
|
53
|
+
Synced Flow core is released under the [MIT licence](LICENSE). The open-source
|
|
54
|
+
core includes the CSS library, CLI, WordPress preset, modern frontend examples,
|
|
55
|
+
documentation, and recipes.
|
|
56
|
+
|
|
57
|
+
Useful project files:
|
|
58
|
+
|
|
59
|
+
- [Contributing](CONTRIBUTING.md)
|
|
60
|
+
- [Security policy](SECURITY.md)
|
|
61
|
+
- [Code of conduct](CODE_OF_CONDUCT.md)
|
|
62
|
+
- [Support](SUPPORT.md)
|
|
63
|
+
- [Trademark and brand use](TRADEMARKS.md)
|
|
64
|
+
|
|
65
|
+
The MIT licence covers the software. It does not grant rights to use Synced,
|
|
66
|
+
SyncedCo, or Synced Flow branding in a way that implies official endorsement.
|
|
67
|
+
|
|
68
|
+
## Install
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
pnpm add @syncedco/flow
|
|
72
|
+
pnpm exec synced-flow init --preset next --theme synced --agents
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
`--agents` adds project-level AI guidance so Cursor, Codex-style agents, Claude,
|
|
76
|
+
Copilot, Windsurf, Gemini, and Aider can discover the Synced Flow skill and
|
|
77
|
+
recommended CLI checks from the consuming project.
|
|
78
|
+
|
|
79
|
+
Until the package is published to a registry, install it from the GitHub repo:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
pnpm add git+https://github.com/SyncedCo/synced-flow.git
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Import
|
|
86
|
+
|
|
87
|
+
Most projects should choose one core import strategy.
|
|
88
|
+
|
|
89
|
+
Use the full stylesheet when simplicity matters:
|
|
90
|
+
|
|
91
|
+
```css
|
|
92
|
+
@import "@syncedco/flow/styles.css";
|
|
93
|
+
@import "@syncedco/flow/defaults.css";
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`styles.css` already includes the tokens, reset, base, layout, components, and
|
|
97
|
+
static utilities layers. Do not also import those modular layer files alongside
|
|
98
|
+
`styles.css`.
|
|
99
|
+
|
|
100
|
+
`defaults.css` is optional. It applies common site/UI defaults such as removing raw
|
|
101
|
+
link underlines and list markers. Leave it out for content-heavy pages that
|
|
102
|
+
should keep browser affordances by default.
|
|
103
|
+
|
|
104
|
+
For tighter CSS loading, skip `styles.css` and import only the layers the
|
|
105
|
+
project uses:
|
|
106
|
+
|
|
107
|
+
```css
|
|
108
|
+
@import "@syncedco/flow/tokens.css";
|
|
109
|
+
@import "@syncedco/flow/reset.css";
|
|
110
|
+
@import "@syncedco/flow/base.css";
|
|
111
|
+
@import "@syncedco/flow/defaults.css";
|
|
112
|
+
@import "@syncedco/flow/layout.css";
|
|
113
|
+
@import "@syncedco/flow/components.css";
|
|
114
|
+
@import "@syncedco/flow/utilities.css";
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
## CSS Size And Loading
|
|
118
|
+
|
|
119
|
+
Synced Flow is designed to avoid shipping a large universal utility stylesheet.
|
|
120
|
+
It uses modern CSS techniques and keeps CSS loading compact in three ways:
|
|
121
|
+
|
|
122
|
+
- the CLI scans source files and generates utility CSS only for discovered class
|
|
123
|
+
tokens
|
|
124
|
+
- CSS layers are exported separately, so projects can import only tokens, reset,
|
|
125
|
+
base, defaults, layout, components, or static utilities as needed
|
|
126
|
+
- generated animation keyframes are emitted only when scanned animation classes
|
|
127
|
+
need them
|
|
128
|
+
|
|
129
|
+
The core CSS is built around current browser capabilities rather than legacy
|
|
130
|
+
breakpoint-heavy patterns: fluid `clamp()` scales, CSS custom properties,
|
|
131
|
+
logical sizing and spacing, cascade layers, OKLCH colour tokens,
|
|
132
|
+
container-aware layout primitives, and `prefers-reduced-motion` handling.
|
|
133
|
+
|
|
134
|
+
Current built CSS sizes from `pnpm build` on 2026-05-28:
|
|
135
|
+
|
|
136
|
+
| File | Raw | Gzip | Purpose |
|
|
137
|
+
| --- | ---: | ---: | --- |
|
|
138
|
+
| `styles.css` | 59.1 KB | 10.5 KB | Full core stylesheet for simple setup. |
|
|
139
|
+
| `tokens.css` | 9.5 KB | 2.2 KB | Design tokens only. |
|
|
140
|
+
| `reset.css` | 0.7 KB | 0.4 KB | Reset layer only. |
|
|
141
|
+
| `base.css` | 3.4 KB | 1.2 KB | Base element styles. |
|
|
142
|
+
| `defaults.css` | 0.5 KB | 0.3 KB | Optional site/UI defaults for links, lists, and native controls. |
|
|
143
|
+
| `layout.css` | 7.5 KB | 1.9 KB | Fluid layout, app shell, scroll, sticky, media, and split primitives. |
|
|
144
|
+
| `components.css` | 31.3 KB | 5.0 KB | Button, icon, avatar, chart, card, surface, nav, form, alert, native component, website pattern, accessibility state, and input primitives. |
|
|
145
|
+
| `utilities.css` | 7.5 KB | 1.9 KB | Static `sf-*` content, positioning, motion, and helper utilities. |
|
|
146
|
+
|
|
147
|
+
CSS is not automatically tree-shaken like JavaScript in every environment. The
|
|
148
|
+
Synced Flow approach is explicit and predictable: import the core layers you
|
|
149
|
+
need, then run `synced-flow build` so project utilities are generated from real
|
|
150
|
+
usage.
|
|
151
|
+
|
|
152
|
+
For WordPress themes and plugins, `synced-flow init --preset wordpress` scans
|
|
153
|
+
PHP/template files and writes one enqueue-ready CSS file at
|
|
154
|
+
`assets/css/synced-flow.css`.
|
|
155
|
+
|
|
156
|
+
See [CSS optimisation](docs/css-optimisation.md) for the full measurements,
|
|
157
|
+
developer notes, and marketing-safe claims.
|
|
158
|
+
|
|
159
|
+
## Base Styling Decisions
|
|
160
|
+
|
|
161
|
+
Synced Flow keeps the browser affordances people rely on:
|
|
162
|
+
|
|
163
|
+
- links stay visibly underlined by default
|
|
164
|
+
- `ul` and `ol` keep their markers by default
|
|
165
|
+
- focus states are visible through `:focus-visible`
|
|
166
|
+
- reduced-motion preferences are respected
|
|
167
|
+
|
|
168
|
+
Use opt-in helpers when UI needs a different treatment: `sf-link-plain` for
|
|
169
|
+
navigation links, `sf-list-reset` for menu lists, `sr-only` for assistive text,
|
|
170
|
+
`sf-skip-link` for skip navigation, and `sf-touch-target` for compact controls.
|
|
171
|
+
For site/UI projects, include `@syncedco/flow/defaults.css` or run
|
|
172
|
+
`synced-flow add defaults` to apply those common UI defaults globally.
|
|
173
|
+
|
|
174
|
+
See [Base styling decisions](docs/base-styling.md).
|
|
175
|
+
|
|
176
|
+
## Icons
|
|
177
|
+
|
|
178
|
+
Synced Flow supports icons without shipping an icon set. Use `sf-icon` on
|
|
179
|
+
inline SVGs or external libraries such as Lucide, Heroicons, or Bootstrap Icons;
|
|
180
|
+
icons inherit `currentColor` and size from fluid system tokens.
|
|
181
|
+
|
|
182
|
+
```tsx
|
|
183
|
+
import { Settings } from "lucide-react"
|
|
184
|
+
|
|
185
|
+
<button className="sf-button">
|
|
186
|
+
<Settings className="sf-icon" aria-hidden="true" />
|
|
187
|
+
Settings
|
|
188
|
+
</button>
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
## Configure
|
|
192
|
+
|
|
193
|
+
`synced-flow init` creates `synced-flow.config.mjs`, a CSS entry file, a
|
|
194
|
+
generated CSS placeholder, and `flow:build` / `flow:check` / `flow:lint` /
|
|
195
|
+
`flow:watch` package scripts.
|
|
196
|
+
|
|
197
|
+
To add AI agent guidance to an existing project:
|
|
198
|
+
|
|
199
|
+
```bash
|
|
200
|
+
pnpm exec synced-flow agents install
|
|
201
|
+
pnpm exec synced-flow agents status
|
|
202
|
+
pnpm exec synced-flow skill
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
Use `--target all` to also add tool-specific project files for Cursor, Claude,
|
|
206
|
+
Copilot, Windsurf, Gemini, and Aider where those tools support project-local
|
|
207
|
+
instructions or skills.
|
|
208
|
+
|
|
209
|
+
Start by shaping the theme: radius style, font family, primary colour, accent
|
|
210
|
+
colour, surface treatment, and density. With AI, ask it to use the Synced Flow
|
|
211
|
+
skill and convert that brief into `synced-flow.config.mjs` theme tokens before
|
|
212
|
+
building pages.
|
|
213
|
+
|
|
214
|
+
You can also create the config by hand:
|
|
215
|
+
|
|
216
|
+
```js
|
|
217
|
+
import { defineConfig } from '@syncedco/flow/config'
|
|
218
|
+
import { themePresets } from '@syncedco/flow/presets'
|
|
219
|
+
|
|
220
|
+
export default defineConfig({
|
|
221
|
+
scan: ['app', 'components', 'lib'],
|
|
222
|
+
out: 'app/synced-flow.generated.css',
|
|
223
|
+
responsiveVariants: false,
|
|
224
|
+
theme: themePresets.synced,
|
|
225
|
+
safelist: ['hidden', 'flex'],
|
|
226
|
+
})
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Import the generated file after the core stylesheet:
|
|
230
|
+
|
|
231
|
+
```ts
|
|
232
|
+
import '@syncedco/flow/styles.css'
|
|
233
|
+
import './synced-flow.generated.css'
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Add package scripts:
|
|
237
|
+
|
|
238
|
+
```json
|
|
239
|
+
{
|
|
240
|
+
"scripts": {
|
|
241
|
+
"flow:build": "synced-flow build",
|
|
242
|
+
"flow:check": "synced-flow build --check",
|
|
243
|
+
"flow:lint": "synced-flow lint",
|
|
244
|
+
"flow:watch": "synced-flow watch",
|
|
245
|
+
"flow:doctor": "synced-flow doctor"
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Run setup checks:
|
|
251
|
+
|
|
252
|
+
```bash
|
|
253
|
+
pnpm flow:doctor
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
Discover the supported starter surface:
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
pnpm exec synced-flow tokens
|
|
260
|
+
pnpm exec synced-flow tokens --json
|
|
261
|
+
pnpm exec synced-flow catalog --json
|
|
262
|
+
pnpm exec synced-flow suggest "full page scroll portfolio"
|
|
263
|
+
pnpm exec synced-flow recipe portfolio-scroll --markup
|
|
264
|
+
pnpm exec synced-flow recipe portfolio-scroll --framework next --markup
|
|
265
|
+
pnpm exec synced-flow theme init --from brief.md
|
|
266
|
+
pnpm exec synced-flow theme init --from brief.md --preset-base neutral-saas
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## Use
|
|
270
|
+
|
|
271
|
+
```html
|
|
272
|
+
<section class="sf-section">
|
|
273
|
+
<div class="sf-container sf-stack" style="--sf-stack-space: var(--sf-space-l)">
|
|
274
|
+
<span class="sf-badge">Fluid by default</span>
|
|
275
|
+
<h1 class="sf-text-display">A styling system that adapts without layout breakpoints.</h1>
|
|
276
|
+
<p class="sf-text-lead sf-prose">Use shared tokens and layout primitives before project-specific styling.</p>
|
|
277
|
+
<a class="sf-button" href="/contact">Start a project</a>
|
|
278
|
+
</div>
|
|
279
|
+
</section>
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
The CLI also accepts flags for projects that do not want a config file:
|
|
283
|
+
|
|
284
|
+
```bash
|
|
285
|
+
synced-flow build --scan app --scan components --out app/synced-flow.generated.css
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
Use `--include-core` only when you want the generated CSS file to contain the
|
|
289
|
+
reset, base, layout, and component layers instead of importing
|
|
290
|
+
`@syncedco/flow/styles.css` separately.
|
|
291
|
+
|
|
292
|
+
For WordPress themes or plugins, use the WordPress preset. It scans PHP and
|
|
293
|
+
template files and writes one CSS file that can be enqueued directly:
|
|
294
|
+
|
|
295
|
+
```bash
|
|
296
|
+
pnpm exec synced-flow init --preset wordpress
|
|
297
|
+
pnpm flow:build
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
New projects should keep `responsiveVariants` off. Turn it on only when migrating
|
|
301
|
+
an existing codebase that still contains compatibility classes such as `sm:` or
|
|
302
|
+
`lg:`.
|
|
303
|
+
|
|
304
|
+
## Docs
|
|
305
|
+
|
|
306
|
+
- [Why Synced Flow?](docs/why-synced-flow.md)
|
|
307
|
+
- [Quick start](docs/quick-start.md)
|
|
308
|
+
- [Build a site walkthrough](docs/build-a-site-walkthrough.md)
|
|
309
|
+
- [AI usage guide](docs/ai-usage.md)
|
|
310
|
+
- [Base styling decisions](docs/base-styling.md)
|
|
311
|
+
- [Accessibility CSS](docs/accessibility-css.md)
|
|
312
|
+
- [System primitives](docs/system-primitives.md)
|
|
313
|
+
- [CSS API contract](docs/api-contract.md)
|
|
314
|
+
- [Native components](docs/native-components.md)
|
|
315
|
+
- [Website patterns](docs/website-patterns.md)
|
|
316
|
+
- [CLI reference](docs/cli-reference.md)
|
|
317
|
+
- [Config reference](docs/config-reference.md)
|
|
318
|
+
- [CSS optimisation](docs/css-optimisation.md)
|
|
319
|
+
- [Presets](docs/presets.md)
|
|
320
|
+
- [Recipes](docs/recipes.md)
|
|
321
|
+
- [Release readiness](docs/release-readiness.md)
|
|
322
|
+
- [WordPress](docs/wordpress.md)
|
|
323
|
+
- [Synced Flow skill](skills/synced-flow/SKILL.md)
|
|
324
|
+
- [Tokens guide](docs/tokens.md)
|
|
325
|
+
- [Tailwind comparison](docs/tailwind-comparison.md)
|
|
326
|
+
- [Migration from Tailwind](docs/migration-from-tailwind.md)
|
|
327
|
+
|
|
328
|
+
## Scripts
|
|
329
|
+
|
|
330
|
+
```bash
|
|
331
|
+
pnpm build
|
|
332
|
+
pnpm check
|
|
333
|
+
pnpm type-check
|
|
334
|
+
```
|
package/SECURITY.md
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Security Policy
|
|
2
|
+
|
|
3
|
+
## Supported Versions
|
|
4
|
+
|
|
5
|
+
Synced Flow is currently pre-1.0. Security fixes target the latest published
|
|
6
|
+
version and the current `main` branch.
|
|
7
|
+
|
|
8
|
+
## Reporting A Vulnerability
|
|
9
|
+
|
|
10
|
+
Please do not open a public GitHub issue for suspected vulnerabilities.
|
|
11
|
+
|
|
12
|
+
Report security concerns to SyncedCo through [syncedco.com](https://syncedco.com)
|
|
13
|
+
and include:
|
|
14
|
+
|
|
15
|
+
- affected package version or commit
|
|
16
|
+
- affected command, file, or integration
|
|
17
|
+
- reproduction steps
|
|
18
|
+
- expected and actual impact
|
|
19
|
+
- any relevant logs or generated CSS output
|
|
20
|
+
|
|
21
|
+
We will review the report, confirm whether the issue is valid, and coordinate a
|
|
22
|
+
fix before public disclosure where appropriate.
|
|
23
|
+
|
|
24
|
+
## Scope
|
|
25
|
+
|
|
26
|
+
Security reports may include issues in the CLI, generated CSS output, package
|
|
27
|
+
distribution, examples, or WordPress integration guidance.
|
|
28
|
+
|
|
29
|
+
General support questions, styling issues, and feature requests should use
|
|
30
|
+
[GitHub issues](https://github.com/SyncedCo/synced-flow/issues).
|
package/SUPPORT.md
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# Support
|
|
2
|
+
|
|
3
|
+
Synced Flow is maintained by SyncedCo.
|
|
4
|
+
|
|
5
|
+
- Website: [syncedco.com](https://syncedco.com)
|
|
6
|
+
- GitHub: [github.com/SyncedCo/synced-flow](https://github.com/SyncedCo/synced-flow)
|
|
7
|
+
- Issues: [github.com/SyncedCo/synced-flow/issues](https://github.com/SyncedCo/synced-flow/issues)
|
|
8
|
+
- Security: [SECURITY.md](SECURITY.md)
|
|
9
|
+
- Contributing: [CONTRIBUTING.md](CONTRIBUTING.md)
|
|
10
|
+
|
|
11
|
+
## Community Support
|
|
12
|
+
|
|
13
|
+
Use GitHub issues for reproducible bugs, documentation problems, CLI issues,
|
|
14
|
+
and focused feature requests for the open-source core.
|
|
15
|
+
|
|
16
|
+
Before opening an issue, please include:
|
|
17
|
+
|
|
18
|
+
- the package version
|
|
19
|
+
- the framework or environment
|
|
20
|
+
- the relevant `synced-flow.config.mjs`
|
|
21
|
+
- the command that failed
|
|
22
|
+
- the expected and actual behaviour
|
|
23
|
+
|
|
24
|
+
## Commercial And Team Support
|
|
25
|
+
|
|
26
|
+
For paid implementation, design-system audits, WordPress/theme integration,
|
|
27
|
+
training, workshops, or team support, contact SyncedCo through
|
|
28
|
+
[syncedco.com](https://syncedco.com).
|
|
29
|
+
|
|
30
|
+
Commercial services are optional support around the open-source core. Premium
|
|
31
|
+
templates, hosted tools, and paid starter kits are not included in this package
|
|
32
|
+
unless explicitly released separately.
|
package/TRADEMARKS.md
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
# Trademark And Brand Use
|
|
2
|
+
|
|
3
|
+
The MIT licence covers the Synced Flow software. It does not grant trademark,
|
|
4
|
+
brand, logo, or endorsement rights.
|
|
5
|
+
|
|
6
|
+
Names such as Synced, SyncedCo, and Synced Flow may be used to truthfully refer
|
|
7
|
+
to this project, compatibility, forks, or integrations.
|
|
8
|
+
|
|
9
|
+
Do not use Synced, SyncedCo, or Synced Flow names, logos, or branding in a way
|
|
10
|
+
that suggests official sponsorship, endorsement, partnership, or ownership
|
|
11
|
+
unless SyncedCo has given written permission.
|
|
12
|
+
|
|
13
|
+
Forks and derived projects should use a distinct name if they are distributed as
|
|
14
|
+
their own product.
|
package/base.css
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/* Generated by @syncedco/flow. Edit src/tokens.mjs or scripts/build-css.mjs, then run pnpm build. */
|
|
2
|
+
@layer reset, tokens, base, app, layout, components, utilities;
|
|
3
|
+
@layer base {
|
|
4
|
+
html {
|
|
5
|
+
background: var(--sf-colour-background);
|
|
6
|
+
color: var(--sf-colour-foreground);
|
|
7
|
+
scroll-behavior: smooth;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
body {
|
|
11
|
+
background: var(--sf-colour-background);
|
|
12
|
+
color: var(--sf-colour-foreground);
|
|
13
|
+
font-family: var(--sf-font-sans);
|
|
14
|
+
font-size: var(--sf-type-body);
|
|
15
|
+
line-height: var(--sf-line-height-body);
|
|
16
|
+
-webkit-font-smoothing: antialiased;
|
|
17
|
+
text-rendering: optimizeLegibility;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
:where(h1, h2, h3, h4, h5, h6) {
|
|
21
|
+
color: inherit;
|
|
22
|
+
font-family: var(--sf-font-display);
|
|
23
|
+
font-weight: 700;
|
|
24
|
+
line-height: var(--sf-line-height-tight);
|
|
25
|
+
text-wrap: balance;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
:where(h1) { font-size: var(--sf-type-h1); }
|
|
29
|
+
:where(h2) { font-size: var(--sf-type-h2); }
|
|
30
|
+
:where(h3) { font-size: var(--sf-type-h3); }
|
|
31
|
+
:where(h4) { font-size: var(--sf-type-h4); }
|
|
32
|
+
:where(h5) { font-size: var(--sf-type-h5); }
|
|
33
|
+
:where(h6) { font-size: var(--sf-type-h6); }
|
|
34
|
+
:where(p, li, dd, figcaption) { text-wrap: pretty; }
|
|
35
|
+
:where(a) {
|
|
36
|
+
color: var(--sf-colour-link);
|
|
37
|
+
text-decoration-color: color-mix(in oklch, currentColor 55%, transparent);
|
|
38
|
+
text-decoration-skip-ink: auto;
|
|
39
|
+
text-decoration-thickness: .08em;
|
|
40
|
+
text-underline-offset: .18em;
|
|
41
|
+
}
|
|
42
|
+
:where(a:hover) { color: var(--sf-colour-link-hover); }
|
|
43
|
+
:where(strong, b) { font-weight: 800; }
|
|
44
|
+
:where(small) { font-size: var(--sf-step--1); }
|
|
45
|
+
:where(code, kbd, samp, pre) { font-family: var(--sf-font-mono); }
|
|
46
|
+
:where(:not(pre) > code, kbd) {
|
|
47
|
+
background: var(--sf-colour-surface-alt);
|
|
48
|
+
border: 1px solid var(--sf-colour-border);
|
|
49
|
+
border-radius: var(--sf-radius-sm);
|
|
50
|
+
font-size: .9em;
|
|
51
|
+
padding: .1em .35em;
|
|
52
|
+
}
|
|
53
|
+
:where(pre) {
|
|
54
|
+
background: var(--sf-colour-surface-inset);
|
|
55
|
+
border: 1px solid var(--sf-colour-border);
|
|
56
|
+
border-radius: var(--sf-radius-panel);
|
|
57
|
+
overflow-x: auto;
|
|
58
|
+
padding: var(--sf-space-s);
|
|
59
|
+
}
|
|
60
|
+
:where(hr) {
|
|
61
|
+
border: 0;
|
|
62
|
+
border-block-start: 1px solid var(--sf-colour-border);
|
|
63
|
+
margin-block: var(--sf-space-l);
|
|
64
|
+
}
|
|
65
|
+
:where(blockquote) {
|
|
66
|
+
border-inline-start: 0.25rem solid var(--sf-colour-primary);
|
|
67
|
+
color: var(--sf-colour-muted);
|
|
68
|
+
padding-inline-start: var(--sf-space-s);
|
|
69
|
+
}
|
|
70
|
+
:where(label) { cursor: pointer; }
|
|
71
|
+
:where(input, textarea, select) { color: inherit; }
|
|
72
|
+
:where(textarea) { resize: vertical; }
|
|
73
|
+
:where(button:not(:disabled), [role="button"]:not(:disabled), a[href]) { cursor: pointer; }
|
|
74
|
+
:where(button:disabled, input:disabled, textarea:disabled, select:disabled, [aria-disabled="true"]) { cursor: not-allowed; }
|
|
75
|
+
:where(:focus-visible) { outline: 0.125rem solid var(--sf-colour-ring); outline-offset: .2rem; }
|
|
76
|
+
:where(:target) { scroll-margin-block: var(--sf-space-l); }
|
|
77
|
+
::selection { background: color-mix(in oklch, var(--sf-colour-primary) 28%, transparent); }
|
|
78
|
+
|
|
79
|
+
@media (prefers-reduced-motion: reduce) {
|
|
80
|
+
html { scroll-behavior: auto; }
|
|
81
|
+
*, *::before, *::after {
|
|
82
|
+
animation-duration: 0.01ms !important;
|
|
83
|
+
animation-iteration-count: 1 !important;
|
|
84
|
+
scroll-behavior: auto !important;
|
|
85
|
+
transition-duration: 0.01ms !important;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
@media (forced-colors: active) {
|
|
90
|
+
:where(:focus-visible) {
|
|
91
|
+
outline: 2px solid Highlight;
|
|
92
|
+
outline-offset: .2rem;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
::selection {
|
|
96
|
+
background: Highlight;
|
|
97
|
+
color: HighlightText;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
}
|