1136 Commits
Author SHA1 Message Date
Bogdan Chadkin 78196958cd Transform styles without zod (#822)
Found zod allows to pass anything in transform without type checking.
This means we can easily get unexpected result. In this case we could
get undefined as asset.

As a solution I defined two versions of types, client side and stored in
db. Conversion is implemented on db routes side.

This makes data flow more clear and let us describe only two versions of
types instead of tree (in, out, client side).
2023-01-23 20:39:48 +03:00
Bogdan Chadkin 846240abc8 Add new label for style panel (#820)
Used new local/remote terms instead of set/inherited from figma for
color here.

<img width="309" alt="Screenshot 2023-01-20 at 14 06 35"
src="https://user-images.githubusercontent.com/5635476/213681171-dcc6bd6d-2d31-42fb-9e6a-49c90da3ab6f.png">
2023-01-23 11:56:36 +03:00
Bogdan Chadkin bb288f309b Replace UserProp with PropsItem (#833)
Here is migration to new props type with more safe conversion to db
format. Added two versions StoredPropsItem for and PropsItem for client
and got rid of "as" casting.
2023-01-22 15:57:37 +03:00
Oleg Isonen 72073cb30a Dashboard redesign - project cards (#817)
## Description

Not complete, everything that needs adjustments supposed to have a todo
comment

1. Added project cards
2. Variable Inter font
3. Flex space-between


https://user-images.githubusercontent.com/52824/213592204-ffb2ee3b-b613-4561-a808-31b05889bf39.mp4


## Steps for reproduction

1. open /dashboard2

## Code Review

- [ ] hi @rpominov , I need you to do
  - conceptual review (architecture, feature-correctness)
  - detailed review (read every line)

## Before requesting a review

- [ ] made a self-review
- [ ] added inline comments where things may be not obvious (the "why",
not "what")

## Before merging

- [ ] tested locally and on preview environment (preview dev login:
5de6)
- [ ] updated [test
cases](https://github.com/webstudio-is/webstudio-designer/blob/main/apps/designer/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `designer/env-check.js` if mandatory
2023-01-21 22:40:11 +01:00
Roman Pominov 9ff8c74692 Make shadow and typography tokens available to be used in code (#821)
1. Added `@font-face`s to `designer` and `design-system` storybooks
2. Shadow tokens are now available via `theme.shadows.somthing`
3. Typography tokens are now available like this:

```ts
import { typography, styled } from '@webstudio-is/design-system'; 

const Something = styled("div", typography.something)

<div className={typography.something()} />
```
2023-01-21 08:53:52 +03:00
74f74cf77a updated success color (#823)
## Description

just updated the color of foreground/success

Co-authored-by: markxtang <122043657+markxtang@users.noreply.github.com>
Co-authored-by: Bot (build-figma-tokens.yml) <bot@localhost>
2023-01-21 08:33:07 +03:00
Bogdan Chadkin 78af54b017 Migrate InstanceProps into Tree table as props column (#819)
InstanceProps is designed to store props per each instance which
requires a lot of sql updates on every props change.

Here moved per instance props into array with props for whole tree. This
way patches are safer to apply on large trees.

```
type PropsItem = {
  id: string,
  instanceId: string,
  name: string,
  required?: boolean,
  type: 'number' | 'string' | 'boolean' | 'asset',
  value: number | string | boolean
}
```
2023-01-20 13:02:13 +03:00
markxtang 417ae2298b Figma tokens (#818)
Renamed some styles to make it more clear which styles are brand styles
as opposed to builder styles. E.g. before the brand color styles were
distributed with the other color styles, now they are all under brand.
grouping. Also renamed the atomic typography tokens such as font-size so
they are in order (smallest value to highest value corresponds to first
to last in the array)
2023-01-20 09:15:23 +03:00
Oleg Isonen 011257f0ab Dashboard redesign (#809)
## Description

The first piece of the new dashboard - empty state for the projects
section.
Lots of design system values are not coming from Figma yet because Mark
is still on it.

Its not live, only visible over /dashboard2

<img width="960" alt="Screenshot 2023-01-19 at 00 33 19"
src="https://user-images.githubusercontent.com/52824/213328060-c84a18d5-3dd2-43d6-a70d-cdf8cd504108.png">



## Steps for reproduction

1. go to /dashboard2


## Code Review

- [ ] hi @rpominov , I need you to do
  - conceptual review (architecture, feature-correctness)
  - detailed review (read every line)

## Before requesting a review

- [ ] made a self-review
- [ ] added inline comments where things may be not obvious (the "why",
not "what")

## Before merging

- [ ] tested locally and on preview environment (preview dev login:
5de6)
- [ ] updated [test
cases](https://github.com/webstudio-is/webstudio-designer/blob/main/apps/designer/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `designer/env-check.js` if mandatory
2023-01-19 16:33:35 +01:00
Roman Pominov 6ec2f5661a Add instructions on how to approve Lost-pixel test when syncing tokens from Figma (#815) 2023-01-19 18:21:08 +03:00
Bogdan Chadkin ca6bdb34a9 Deprecate label component (#810)
Gonna start over to align with design system.
2023-01-19 13:23:54 +03:00
Bogdan Chadkin 6ca1f7088a Bump packages (#814)
Let's release
2023-01-19 13:08:32 +03:00
Ivan Starkov d17b7a1b27 Fix Transaction already closed: Could not perform operation on InstanceProps (#811)
2 Issues.
- Absense of unique index caused huge update times like 100ms.
- updateMany creates implicit transaction which in prisma has very small
timeouts
2023-01-19 10:48:02 +03:00
Roman Pominov e3fb088f24 Added instructions about pull requests when syncing tokens from Figma (#804)
## Description

Added instructions about pull requests when syncing tokens from Figma:


https://github.com/webstudio-is/webstudio-designer/blob/tokens-pull-doc/packages/design-system/documentation/figma-design-tokens.md#creating-a-pull-request

Still need to add about lostpixel. I will do that once it fails next
time.
2023-01-18 17:21:16 +03:00
Bogdan Chadkin 02d5f509dd Use build-package for http-client (#806)
Forgot to migrate it to our build-package script before. Now we got rid
of tsup.

```diff
du -ckd1 node_modules
-804060
+794324
```

```diff
root> pnpm build
-16s
+10s
```
2023-01-18 16:16:58 +03:00
Bogdan Chadkin 6f5a0bcfbc Bump packages (#805)
Let's release
2023-01-18 14:06:44 +03:00
Oleg IsonenandRoman Pominov e790af958a Style source input states (#785)
## Description

1. Styling all states
<img width="353" alt="Screenshot 2023-01-14 at 15 40 54"
src="https://user-images.githubusercontent.com/52824/212480260-b37ba7c4-7fde-45c7-beba-5e79980aadd7.png">

2. Functionality overview

- Type a new input with autocomplete
- Select an existing source from a list
- Enter a new source
- Hover the source to see the menu
- Menu provides: Remove, Duplicate, Disable, Edit name
- Drag and drop to reorder
- Click to toggle select/unselect
- Double click to edit name
- Local source can only be disabled, nothing else should be possible
- Hit Backspace to delete the last Source item when you are in the input


https://user-images.githubusercontent.com/52824/212717241-eb694803-ee50-4054-bdd6-faaa6ffb197b.mp4




## Steps for reproduction

1. open stories in the designer
3. check all possible states are according to
[figma](https://www.figma.com/file/sfCE7iLS0k25qCxiifQNLE/%F0%9F%93%9A-Webstudio-Library?node-id=947%3A3701&t=GviFHhyBu6zfoxRk-4)

## Code Review

- [ ] hi @rpominov , I need you to do
  - conceptual review (architecture, feature-correctness)
  - check how I exposed buttonStyle from design system

- [ ] hi @taylornowotny 
- please try in storybook and see if you find mistakes. Autocomplete
list/menu is not done, only the style sources.
  
## Before requesting a review

- [ ] made a self-review
- [ ] added inline comments where things may be not obvious (the "why",
not "what")

## Before merging

- [ ] tested locally and on preview environment (preview dev login:
5de6)
- [ ] updated [test
cases](https://github.com/webstudio-is/webstudio-designer/blob/main/apps/designer/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `designer/env-check.js` if mandatory

Co-authored-by: Roman Pominov <rpominov+github@gmail.com>
2023-01-18 00:12:50 +01:00
Bogdan Chadkin 2c8395b4d0 Add feature-flags package (#800)
Extracted from
https://github.com/webstudio-is/webstudio-designer/pull/797 for upcoming
dashboard split into separate app

## Code Review

- [ ] hi @kof, I need you to do
  - conceptual review (architecture, feature-correctness)
  - detailed review (read every line)

## Before requesting a review

- [ ] made a self-review
- [ ] added inline comments where things may be not obvious (the "why",
not "what")

## Before merging

- [ ] tested locally and on preview environment (preview dev login:
5de6)
- [ ] updated [test
cases](https://github.com/webstudio-is/webstudio-designer/blob/main/apps/designer/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `designer/env-check.js` if mandatory
2023-01-17 20:08:35 +01:00
Roman Pominov a1edc22be1 Type-safe CSS Stitches' variables (#792)
I've replaced all `"$something$something"` CSS variables with
`variables.something.something`. Now we have autocomplete and
type-safety: if a variable is removed or renamed w/o fixing the usage
the build will fail.

This will allow designers to change design tokens and either make sure
nothing is broken or if something is broken we'll know exactly what and
it will be easy to fix.

Discussed here:
https://discord.com/channels/955905230107738152/1061992022665334837
2023-01-17 09:36:24 +03:00
Ivan Starkov 2f171e0f42 Add initial trpc interface package (#780)
## Description

ref #548

New `trpc-interface` package.

It's intended to implement various TRPC services we are going to use.
But it can act as a proxy for TRPC services implemented at SAAS and at
open source.

Exposes: `createTRPCProxyServiceClient` method, and `SharedRouter` type.

`createTRPCProxyServiceClient` creates
[createTRPCProxyClient](https://trpc.io/docs/vanilla#initialize-a-trpc-client)
for the local TRCP router, or for a remote TRPC server.
`SharedRouter` type information would be used at SAAS to check that SAAS
services have the same API interface as open-source TRPC.

The current implementation has just an example call `authorize.check`,
without any logic. And used just to check that everything works.


## Steps for reproduction


## Code Review

- [ ] hi @kof, I need you to do
  - conceptual review (architecture, feature-correctness)
  - detailed review (read every line)

- [ ] hi @TrySound , I need you to do
  - conceptual review (architecture, feature-correctness)
  - detailed review (read every line)


## Before requesting a review

- [ ] made a self-review
- [ ] added inline comments where things may be not obvious (the "why",
not "what")

## Before merging

- [ ] tested locally and on preview environment (preview dev login:
5de6)
- [ ] updated [test
cases](https://github.com/webstudio-is/webstudio-designer/blob/main/apps/designer/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `designer/env-check.js` if mandatory
2023-01-16 21:31:58 +03:00
Bogdan Chadkin 1d457b5b98 Normalize instances in db (#788)
Ref https://github.com/webstudio-is/webstudio-designer/issues/696

Here only migration and converters between tree and list on db access.
2023-01-16 14:58:49 +03:00
Bogdan Chadkin 44b96edf93 Fix styles uploads (#789)
Forgot to move uploads logic to normalized styles
2023-01-16 14:17:32 +03:00
Bogdan Chadkin 1c7ba335ac Use props from synchronize state instead of selected instance (#787)
Props state is synchronized between designer and canvas. We can safely
get rid of sending props in selectInstance event.
2023-01-15 12:19:42 +03:00
Bogdan Chadkin 35354522d9 Move props updates to designer (#784)
Props have a lot of logic to synchronize values. And after moving
updates into designer we get fresh state instantly and can simplify the
logic even more.
2023-01-14 14:11:26 +03:00
4d1a86b902 Sync tokens & Add a GitHub action that will automatically keep figma-design-tokens.ts up to date (#778)
## Description

Just another PR to sync tokens, but also I've added a GitHub action that
will automatically keep `figma-design-tokens.ts` up to date in the
`figma-tokens` branch

## Code Review

- [ ] hi @kof, I need you to do
  - conceptual review (architecture, feature-correctness)
- [ ] hi @TrySound, I need you to do
  - detailed review

## Before requesting a review

- [ ] made a self-review
- [ ] added inline comments where things may be not obvious (the "why",
not "what")

## Before merging

- [ ] tested locally and on preview environment (preview dev login:
5de6)
- [ ] updated [test
cases](https://github.com/webstudio-is/webstudio-designer/blob/main/apps/designer/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `designer/env-check.js` if mandatory

Co-authored-by: Oleg Isonen <oleg008@gmail.com>
Co-authored-by: Taylor Nowotny <86495896+taylornowotny@users.noreply.github.com>
Co-authored-by: markxtang <122043657+markxtang@users.noreply.github.com>
Co-authored-by: Bot (build-figma-tokens.yml) <bot@localhost>
2023-01-14 10:48:29 +01:00
Bogdan Chadkin f9052681a3 Simplify props state (#783)
Turns out we store whole db representation in each props each per
instance item. This is wasteful and increase complexity of code.

```
{
  [InstanceId]: {
    id: UUID,
    instanceId: InstanceId,
    treeId: TreeId,
    props: UserProp[]
  }
}
```

Where instance id is duplicated and tree id is provided as patch
context. Id can be replaced with combination of instance id and tree id.

```
{
  [InstanceId]:  UserProp[]
}
```
2023-01-14 12:46:49 +03:00
Bogdan Chadkin 3abb54a875 Migrate to nanostores (#779)
Ref https://github.com/nanostores/nanostores

Nanostores is another open source implementation of reactive states.
Supports a lot of frameworks and provides useful utilities like computed
stores. Api is slightly different

```
store.get(): Value
store.set(value: Value)
```

`useStore` resolves only value so I temporary added custom `useValue` to
not rewrite whole project. Since we gonna use computed atoms it makes
more sense to invoke useStore where atom value is used instead of
reusable hook.
2023-01-13 15:13:40 +03:00
Bogdan Chadkin 44a7083fde Drop css rules from instance (#775)
Ref https://github.com/webstudio-is/webstudio-designer/issues/696

Finally got rid of legacy instance.cssRules.
Removed style utils for working with tree.
Now will be easier to normalize tree.
2023-01-13 13:04:21 +03:00
Roman Pominov 5fac01020f Update Button (#751)
New `Button` implementation based on the component in Figma. Closes #450
2023-01-13 09:43:30 +03:00
Bogdan Chadkin 145155f12e Use normalized styles in style panel (#773)
Here rewritten style info computing with normalized styles list. Was
able to get rid of sending element css rules from canvas.
2023-01-13 00:14:54 +03:00
5d88734142 Sync figma tokens (#772)
Co-authored-by: Oleg Isonen <oleg008@gmail.com>
Co-authored-by: Taylor Nowotny <86495896+taylornowotny@users.noreply.github.com>
2023-01-12 14:08:05 +03:00
Bogdan Chadkin 2c3027d10b Improve size section layout according to design (#760)
Ref https://github.com/webstudio-is/webstudio-designer/issues/759

Spacing a little not clear so wrapped with common grid

<img width="237" alt="Screenshot 2023-01-10 at 16 55 40"
src="https://user-images.githubusercontent.com/5635476/211570996-0c3349ee-a4d7-4b95-9143-2afd8436da2d.png">
2023-01-12 13:00:03 +03:00
Oleg IsonenandRoman Pominov 6a5fa7822a Sortable style source items (#770)
## Description

1. This adds ability to drag&drop style source items

## Steps for reproduction

1. open stories
2. get 2+ items
3. start dragging

## Code Review

- [ ] hi @rpominov , I need you to do
  - conceptual review (architecture, feature-correctness)
  - detailed review (read every line)
- help finish the sortable implementation: restrict drop targets, maybe
add a preview item to the draggable, can go without it though for now



## Before requesting a review

- [ ] made a self-review
- [ ] added inline comments where things may be not obvious (the "why",
not "what")

## Before merging

- [ ] tested locally and on preview environment (preview dev login:
5de6)
- [ ] updated [test
cases](https://github.com/webstudio-is/webstudio-designer/blob/main/apps/designer/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `designer/env-check.js` if mandatory

Co-authored-by: Roman Pominov <rpominov+github@gmail.com>
2023-01-12 10:21:58 +01:00
Bogdan Chadkin 6387029b3c Synchronize canvas store with designer (#762)
Here used immerhin subscribe method to send patches from canvas to
desiger instead of uploading full states when their value is changed.

Syncrhonization is still one-way. Need more changes in immerhin to make
two-way patches work.
2023-01-11 13:15:43 +03:00
Bogdan Chadkin 8a691b92d1 Update normalized styles directly (#757)
Ref https://github.com/webstudio-is/webstudio-designer/issues/696

Migrated updating and rendering to normalized styles. There are still a
few cases to migrate so left legacy root instance updates.

Styles are updated with immerhin consistently with whole project.

Can be tested changing styles and deleting breakpoints.
2023-01-09 12:17:20 +03:00
Bogdan Chadkin 7d90c3f56c Bump packages (#753)
Gonna be big release.
2023-01-06 17:31:39 +03:00
Bogdan Chadkin 6387accf0d Render static css from normalized styles (#750)
Ref https://github.com/webstudio-is/webstudio-designer/issues/696

Gradually starting to migrate to new styles format. Here replaced
getCssRules and getPresetStylesMap with getStyleRules and
getPresetStyleRules utilities.

Will reuse both at once on release.
2023-01-06 16:44:03 +03:00
Bogdan Chadkin 7c5c737bfb Normalize styles in database (#749)
Ref https://github.com/webstudio-is/webstudio-designer/issues/696

Here only migration and transforms for load and patch. Styles have the
following type and stored in Tree.styles column.

```
Array<{
  breakpointId: string,
  instanceId: string,
  property: StyleProperty,
  value: StyleValue
}>
```

Did migration with cursor pagination with 1000 trees per transaction.
2023-01-06 14:38:21 +03:00
Bogdan Chadkin f2a851cb5b Bump remix to 1.9.0 (#740)
- https://github.com/remix-run/remix/releases/tag/remix%401.8.0
- https://github.com/remix-run/remix/releases/tag/remix%401.9.0

Build issue still not fixed
(https://github.com/webstudio-is/webstudio-designer/pull/725)
2023-01-05 21:27:55 +03:00
Bogdan Chadkin d79c96566b Store preset style separately from tree (#724)
Before we populated preset style on instance creation. This does not let
us to distinct preset style from local one.

As an option we could use preset style hardcoded in meta though this may
affect user when we change defaults.

Here I added presetStyle column in Tree table with the list of styles
for component.

```
Array<{
  component: string,
  property: string,
  value: StyleValue
}>
```

Will style controls as grey for such styles.
2023-01-05 21:27:33 +03:00
Roman Pominov 91e209e974 rename Spacing to Space (#745)
Renamed Spacing section to Space in code and in UI
2023-01-05 14:59:32 +03:00
Bogdan Chadkin f076352b29 Fix linked flex gap and replace icons (#737)
Ref https://github.com/webstudio-is/webstudio-designer/issues/538
https://github.com/webstudio-is/webstudio-designer/issues/537

Refactored linked (renamed from lock) gap. Watching values with effect
is replaced with changing row/column values in inputs callbacks.

Had to use css value input directly to maintain intermediate value for
both inputs while scrubbing.
2023-01-05 13:45:21 +03:00
Roman Pominov 1d69f953a0 Remove tokens file from the old location (#739) 2023-01-05 12:57:19 +03:00
Roman Pominov 62d870ad8e Use tokens from Figma in Stitches (#728)
Design tokens from Figma are now available in Stitches
2023-01-05 12:22:05 +03:00
Bogdan Chadkin 5fe9364cb1 Improve units in style panel (#735)
Ref https://github.com/webstudio-is/webstudio-designer/issues/366

- generate grouped units for non length values
- show unit select when initial unitless

So we get all 3 points from the issue

- all properties has only supported units
- hidden but supported units still can be entered
- unsupported values are validated

<img width="243" alt="Screenshot 2023-01-04 at 14 12 29"
src="https://user-images.githubusercontent.com/5635476/210546684-ca696096-f78c-445f-bbc3-04db7326239b.png">
<img width="224" alt="Screenshot 2023-01-04 at 14 14 54"
src="https://user-images.githubusercontent.com/5635476/210546689-396c7d42-e6f0-42a9-869c-7b231baa3d71.png">
2023-01-04 18:20:15 +03:00
Bogdan Chadkin cdba1c7149 Fix unitless initial values (#734)
Ref https://github.com/webstudio-is/webstudio-designer/issues/366

There were many unitless initial values with "px" unit. Here I extracted
all possible unit types from properties syntaxes. csstree provides a
list of unit groups which in the future will let us provide correct list
of units for css value input.
2023-01-04 13:57:54 +03:00
Oleg Isonen 9dfef774e3 Add a stylesheet name for easier debugging (#731)
## Description

Multiple style elements are easier to differentiate when they have some
hint on the purpose

## Steps for reproduction

1. select style element on canvas, see data-webstudio attribute with a
name

## Code Review

- [ ] hi @TrySound , I need you to do
  - conceptual review (architecture, feature-correctness)

## Before requesting a review

- [x] made a self-review
- [x] added inline comments where things may be not obvious (the "why",
not "what")

## Before merging

- [x] tested locally and on preview environment (preview dev login:
5de6)
- [x] updated [test
cases](https://github.com/webstudio-is/webstudio-designer/blob/main/apps/designer/docs/test-cases.md)
document
- [x] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `designer/env-check.js` if mandatory
2023-01-03 21:39:25 +01:00
Mateusz Burzyński 28a2d85465 Tweak Instance type (#732) 2023-01-03 21:27:25 +01:00
Bogdan Chadkin 81194d8422 Remove incorrect keywords from generated data (#730)
While fixing units found a lot of keywords appear from css functions
which are complex values and should be ignored. So here I changed
traversing of properties syntaxes to support only top level values and
keywords.

Mostly gone color words

```diff
-6639 lines  116 KB
+4808 lines  85.8 KB
```

See diff for more info
2023-01-03 23:23:04 +03:00
Bogdan Chadkin 5a2b3b8eec Parse properties initial value (#726)
Ref https://github.com/webstudio-is/webstudio-designer/issues/366

Parsed initial values to get correct unit instead of px for some
properties. There is still edge case with unitless values I'm gonna fix
in another PR.

Also bumped mdn-data and removed overrides fixed on mdn side.
2023-01-03 19:57:16 +03:00