@syncedco/flow 0.3.1 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/reset.css CHANGED
@@ -3,7 +3,7 @@
3
3
  @layer reset {
4
4
  *, *::before, *::after { box-sizing: border-box; }
5
5
  *:where(:not(dialog)) { margin: 0; }
6
- html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
6
+ html { font-size: 100%; -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
7
7
  body { min-block-size: 100%; }
8
8
  img, picture, video, canvas, svg { display: block; max-inline-size: 100%; }
9
9
  img, video { block-size: auto; }
@@ -91,14 +91,24 @@ intact. Leave out `utilities.css` unless static helpers such as `sf-text-*`,
91
91
  `sf-app-backdrop`, `sf-frame`, and `sf-flow`.
92
92
  - Prefer component primitives for common UI: `sf-button`, `sf-card`,
93
93
  `sf-badge`, `sf-status`, `sf-field`, `sf-input`, `sf-search`,
94
- `sf-data-table`, `sf-table-sort`, `sf-tab__count`, and `sf-toast-stack`.
94
+ `sf-input-group`, `sf-file-input`, `sf-range`, `sf-switch`,
95
+ `sf-segmented-control`, `sf-spinner`, `sf-data-table`, `sf-table-sort`,
96
+ `sf-tab__count`, and `sf-toast-stack`.
95
97
  - Use `saas-landing` for public SaaS marketing pages. Use `saas-dashboard` when
96
98
  a full authenticated starter is useful, but prefer neutral app patterns for
97
99
  reusable UI in admin panels, portals, CRMs, analytics dashboards, internal
98
100
  tools, account areas, and product workspaces.
99
101
  - Use app patterns before writing project CSS:
100
102
  `app-shell-layout`, `row-action-menu`, `tabs-with-counts`,
101
- `data-table-actions`, `search-field`, `modal-form`, and `toast-stack`.
103
+ `data-table-actions`, `search-field`, `modal-form`, `toast-stack`,
104
+ `searchable-select`, `bulk-actions-toolbar`, `complete-pagination`, and
105
+ `multi-step-form`.
106
+ - Use `switch-control` for independent binary settings and
107
+ `segmented-control` for one choice from a small set. Do not use either as a
108
+ substitute for tabs.
109
+ - Treat `searchable-select`, async loading, bulk selection, and multi-step
110
+ navigation as app-owned behavior. Flow supplies presentation and accessible
111
+ markup guidance, not JavaScript state machines.
102
112
  - Use app shell states instead of bespoke layout CSS: `data-layout="fixed-header"`
103
113
  for fixed app headers, `data-collapsed="true"` for collapsed sidebars, and
104
114
  `data-mobile="drawer"` with `data-sidebar-open="true"` for mobile drawer
@@ -160,9 +170,16 @@ pnpm flow:doctor
160
170
  For package or repo changes, also run:
161
171
 
162
172
  ```bash
173
+ pnpm check:generated
163
174
  pnpm check
164
175
  pnpm test
176
+ pnpm test:browser
177
+ pnpm test:browser:all
165
178
  pnpm pack --dry-run
166
179
  ```
167
180
 
168
- If `doctor` warns about stale CSS, run `pnpm flow:build`.
181
+ Run `pnpm check:generated` before a build or lifecycle command can refresh
182
+ tracked CSS. It covers package CSS and the plain HTML, Vite, Next, Astro, and
183
+ WordPress generated outputs. Use the Chromium browser gate during development
184
+ and all three browser engines before a release. If `doctor` warns about stale
185
+ project CSS, run `pnpm flow:build`.
package/src/index.ts CHANGED
@@ -48,10 +48,79 @@ export const fluidSystem = {
48
48
  },
49
49
  components: {
50
50
  button: 'sf-button',
51
+ buttonGroup: 'sf-button-group',
52
+ icon: 'sf-icon',
53
+ iconButton: 'sf-icon-button',
51
54
  card: 'sf-card',
55
+ surface: 'sf-surface',
56
+ hero: 'sf-hero',
57
+ logoCloud: 'sf-logo-cloud',
58
+ feature: 'sf-feature',
59
+ stats: 'sf-stats',
60
+ testimonial: 'sf-testimonial',
61
+ pricingGrid: 'sf-pricing-grid',
62
+ faq: 'sf-faq',
63
+ callToAction: 'sf-cta',
64
+ footer: 'sf-footer',
52
65
  badge: 'sf-badge',
66
+ avatar: 'sf-avatar',
67
+ alert: 'sf-alert',
68
+ status: 'sf-status',
69
+ sectionHeader: 'sf-section-header',
70
+ kicker: 'sf-kicker',
71
+ nav: 'sf-nav',
72
+ form: 'sf-form',
73
+ fieldset: 'sf-fieldset',
53
74
  field: 'sf-field',
75
+ label: 'sf-label',
76
+ help: 'sf-help',
77
+ error: 'sf-error',
54
78
  input: 'sf-input',
79
+ inputGroup: 'sf-input-group',
80
+ select: 'sf-select',
81
+ textarea: 'sf-textarea',
82
+ check: 'sf-check',
83
+ switch: 'sf-switch',
84
+ fileInput: 'sf-file-input',
85
+ range: 'sf-range',
86
+ segmentedControl: 'sf-segmented-control',
87
+ spinner: 'sf-spinner',
88
+ search: 'sf-search',
89
+ combobox: 'sf-combobox',
90
+ filterBar: 'sf-filter-bar',
91
+ bulkActions: 'sf-bulk-actions',
92
+ dataTable: 'sf-data-table',
93
+ tableSort: 'sf-table-sort',
94
+ dataList: 'sf-data-list',
95
+ emptyState: 'sf-empty-state',
96
+ settingsSection: 'sf-settings-section',
97
+ detailPanel: 'sf-detail-panel',
98
+ dialog: 'sf-dialog',
99
+ popover: 'sf-popover',
100
+ drawer: 'sf-drawer',
101
+ tooltip: 'sf-tooltip',
102
+ toast: 'sf-toast',
103
+ toastStack: 'sf-toast-stack',
104
+ banner: 'sf-banner',
105
+ disclosure: 'sf-disclosure',
106
+ accordion: 'sf-accordion',
107
+ tabs: 'sf-tabs',
108
+ tab: 'sf-tab',
109
+ menu: 'sf-menu',
110
+ breadcrumb: 'sf-breadcrumb',
111
+ pagination: 'sf-pagination',
112
+ stepper: 'sf-stepper',
113
+ wizardActions: 'sf-wizard-actions',
114
+ progress: 'sf-progress',
115
+ skeleton: 'sf-skeleton',
116
+ chart: 'sf-chart',
117
+ meter: 'sf-meter',
118
+ codeWindow: 'sf-code-window',
119
+ codeLines: 'sf-code-lines',
120
+ tokenStrip: 'sf-token-strip',
121
+ marquee: 'sf-marquee',
122
+ commandList: 'sf-command-list',
123
+ platformCard: 'sf-platform-card',
55
124
  },
56
125
  utilities: {
57
126
  visuallyHidden: 'sf-visually-hidden',
package/src/presets.mjs CHANGED
@@ -12,13 +12,13 @@ export const themePresets = {
12
12
  surfaceAlt: 'oklch(96.4% 0.011 80)',
13
13
  surfaceElevated: 'var(--sf-colour-surface-raised)',
14
14
  border: 'oklch(18% 0.026 250 / 0.12)',
15
- primary: 'oklch(68% 0.18 44)',
16
- primaryHover: 'oklch(60% 0.17 42)',
15
+ primary: 'oklch(50% 0.16 40)',
16
+ primaryHover: 'oklch(44% 0.14 40)',
17
17
  primaryForeground: 'oklch(100% 0 0)',
18
18
  accent: 'oklch(70% 0.12 205)',
19
- link: 'oklch(58% 0.17 42)',
20
- linkHover: 'oklch(68% 0.18 44)',
21
- ring: 'oklch(68% 0.18 44)',
19
+ link: 'oklch(50% 0.16 40)',
20
+ linkHover: 'oklch(44% 0.14 40)',
21
+ ring: 'oklch(50% 0.16 40)',
22
22
  },
23
23
  components: {
24
24
  button: {
package/src/tokens.mjs CHANGED
@@ -36,6 +36,8 @@ export const primitiveTokens = {
36
36
  orange500: 'oklch(74% 0.17 48)',
37
37
  orange600: 'oklch(68% 0.18 44)',
38
38
  orange700: 'oklch(58% 0.17 42)',
39
+ orange800: 'oklch(50% 0.16 40)',
40
+ orange900: 'oklch(44% 0.14 40)',
39
41
  green500: 'oklch(62% 0.13 150)',
40
42
  green600: 'oklch(54% 0.13 150)',
41
43
  green700: 'oklch(44% 0.12 150)',
@@ -82,13 +84,13 @@ export const semanticTokens = {
82
84
  border: 'oklch(18% 0.026 250 / 0.12)',
83
85
  borderStrong: 'oklch(18% 0.026 250 / 0.22)',
84
86
  backdrop: 'oklch(0% 0 0 / 0.48)',
85
- primary: 'var(--sf-colour-orange-600)',
86
- primaryHover: 'var(--sf-colour-orange-700)',
87
+ primary: 'var(--sf-colour-orange-800)',
88
+ primaryHover: 'var(--sf-colour-orange-900)',
87
89
  primaryForeground: 'var(--sf-colour-neutral-0)',
88
- primarySoft: 'oklch(68% 0.18 44 / 0.12)',
89
- primarySoftBorder: 'oklch(68% 0.18 44 / 0.28)',
90
- link: 'var(--sf-colour-orange-700)',
91
- linkHover: 'var(--sf-colour-orange-600)',
90
+ primarySoft: 'oklch(50% 0.16 40 / 0.12)',
91
+ primarySoftBorder: 'oklch(50% 0.16 40 / 0.28)',
92
+ link: 'var(--sf-colour-orange-800)',
93
+ linkHover: 'var(--sf-colour-orange-900)',
92
94
  accent: 'var(--sf-colour-cyan-500)',
93
95
  accentForeground: 'var(--sf-colour-neutral-950)',
94
96
  success: 'var(--sf-colour-green-500)',
@@ -97,7 +99,7 @@ export const semanticTokens = {
97
99
  warning: 'var(--sf-colour-amber-500)',
98
100
  warningForeground: 'var(--sf-colour-neutral-950)',
99
101
  warningSoft: 'oklch(78% 0.15 82 / 0.16)',
100
- danger: 'var(--sf-colour-red-600)',
102
+ danger: 'var(--sf-colour-red-700)',
101
103
  dangerForeground: 'var(--sf-colour-neutral-0)',
102
104
  dangerSoft: 'oklch(56% 0.2 28 / 0.12)',
103
105
  info: 'var(--sf-colour-cyan-600)',
@@ -109,7 +111,7 @@ export const semanticTokens = {
109
111
  categorical4: 'var(--sf-colour-orange-600)',
110
112
  categorical5: 'var(--sf-colour-red-600)',
111
113
  categorical6: 'oklch(58% 0.15 292)',
112
- ring: 'var(--sf-colour-orange-600)',
114
+ ring: 'var(--sf-colour-orange-800)',
113
115
  },
114
116
  }
115
117