420 Commits
Author SHA1 Message Date
Bogdan Chadkin b2355e828f refactor: cleanup system variable (#3213)
Use sdk type for system variable and make it required in pages since it
was added to all pages with migration.
2024-04-20 17:44:01 +07:00
Bogdan Chadkin 201ffd5fb8 refactor: generalize css api and add test (#3081)
Here just small refactoring. generateCss will accept only maps instead
of arrays of tuples. Also added one test to not break on changes.
2024-04-03 19:26:06 +07:00
Bogdan Chadkin e34aa862bb refactor: move remix root into template (#3071)
React sdk not necessary to depend on remix. It will even complicate
remix upgrade.
2024-03-30 19:13:51 +07:00
Oleg Isonen d9eb1e2941 fix: keep the execution order of scripts when executing HTML Embed on the client (#3046)
https://share.descript.com/view/q8jpNCbmOxP

## Description

Originally all remote scripts in html embed were executed async, no
matter if they have async attribute or not.
Now they respect the order and only execute async if there is async
attribute.

## Steps for reproduction

This should fail on first load because first script is loaded async and
second script depends on it
```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.3/gsap.min.js" async=""></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.3/ScrollTrigger.min.js"></script>
<script>
console.log('gsap', gsap)  
</script>
```

This should not fail
```html
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.3/gsap.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/3.12.3/ScrollTrigger.min.js"></script>
<script>
console.log('gsap', gsap)  
</script>
```

## Code Review

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

## 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/blob/main/apps/builder/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `builder/env-check.js` if mandatory
2024-03-25 13:47:21 +01:00
Oleg Isonen cd0174807d chore: use console.info instead of console.log (#3049)
## Description

We allow console.info (btw we should also allow warn/error/info), we
only disallow console.log in the linter because that's what we use for
debugging.

## Steps for reproduction

1. click button
2. expect xyz

## Code Review

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

## 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/blob/main/apps/builder/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `builder/env-check.js` if mandatory
2024-03-24 12:52:46 +01:00
Bogdan Chadkin 20df0cef32 refactor: move forms properties into server module (#3034)
Here moved forms properties, page meta and remix params into server
module as used only in loader and never executed on client. Especially
forms properties may contain user credentials and remix does not
guarantee it to not appear in client side bundle.

Also moved those into sdk as universal generators.
2024-03-20 16:42:51 +07:00
Bogdan Chadkin dad898e6a4 refactor: move expressions into base sdk (#3032)
We need to move stuff not related to react out of react-sdk into
universal sdk package.
2024-03-19 02:02:07 +07:00
Bogdan Chadkin 99d0e53035 refactor: drop jsep parser (#3029)
We fully switched to acorn for parsing expressions and no longer need
for jsep and its plugins. User will stop getting esm false positives
when build with remix.
2024-03-18 20:47:20 +07:00
Bogdan Chadkin df579f7c72 refactor: switch to acorn expressions everywhere (#3028)
Ref https://github.com/webstudio-is/webstudio/issues/2903

Here switched the rest of usages to acorn based expressions. Added
getExpressionIdentifiers utility to extract used variables names to
avoid using transpiler replaceVariable callback for this.
2024-03-18 14:41:57 +07:00
Bogdan Chadkin 61f751adab refactor: switch to acorn for expression linting (#3026)
Ref https://github.com/webstudio-is/webstudio/issues/2903

Here added new lintExpression utility to provide diagnostics when
parsing error happens or not supported language feature is used.

Additionally it no longer forbids template literals and ternary
operators. Btw still need to get rid from legacy implementation to make
them work.

<img width="465" alt="Screenshot 2024-03-17 at 20 41 49"
src="https://github.com/webstudio-is/webstudio/assets/5635476/e208c360-7f2a-471a-aa54-983ff0a14247">
2024-03-18 11:01:40 +07:00
Bogdan Chadkin 3c99452716 refactor: transpile expression without code generation (#3022)
Ref https://github.com/webstudio-is/webstudio/issues/2903

Our code generation with jsep has a big problem of not preserving
parenthesis entered by user. And jsep is not able to provide the
information.

As a solution I suggest to switch parser to acorn. It is 10 times bigger
than jsep but provides more strict parsing with location info for every
node. Here I use it to transpile simply with string manipulation which
does not touch spaces or parenthesis entered by user.
2024-03-17 13:17:52 +07:00
Bogdan Chadkin e17f1e082a experimental: support system variable in compiler (#3009)
Ref https://github.com/webstudio-is/webstudio/issues/2903

Here switched to system variable in resources, page meta and component
generator. Removed legacy path params variable from schema.
2024-03-14 00:09:44 +07:00
Bogdan Chadkin 7b629b6908 experimental: navigate to dynamic path without reload (#2982)
Ref https://github.com/webstudio-is/webstudio/issues/2903

Here fixed the issue with navigating to dynamic paths. The page get full
reload because provided path does not match pages list and remix link is
not used.

Solved by using the following heuristic: use remix link when the path is
relative and not asset. It will cover manually specified link href or
computed with expression one.

Now we can remove pagePaths from generated code.
2024-03-09 11:25:15 +07:00
f66a6bee31 experimental: Marketplace settings (#2949)
## Description

- split project settings
- add marketplace settings

## Steps for reproduction

1. click button
2. expect xyz

## Code Review

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

## 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/blob/main/apps/builder/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `builder/env-check.js` if mandatory

---------

Co-authored-by: Bogdan Chadkin <trysound@yandex.ru>
Co-authored-by: istarkov <istarkov@gmail.com>
2024-03-04 13:06:49 +01:00
Bogdan Chadkin 1b9bdd83d8 experimental: allow customizing page language (#2928)
Ref https://github.com/webstudio-is/webstudio/issues/2903

Here added language field to page settings and changed page generation
to render whole html instead of just outlet, which let us modify html
lang attribute.

Also fixed cms banner on pro account.
2024-02-29 21:14:51 +07:00
Bogdan Chadkin 8722b15ab2 refactor: check literals with parser (#2950)
Here improved detecting literal values in expressions without executing
with potentially global variables.

Also fixed expression errors
2024-02-28 00:46:25 +07:00
Oleg IsonenandBogdan Chadkin dd425afd6d experimental: marketplace for templates (#2916)
## Description

Foundation for the future marketplace where free and paid templates,
apps and other integrations can be offered. This first version is
limited to a few items that we will add there.

Generally, we call items we list on that marketplace "products" and they
can open an iframe either in the same left panel or in a dialog.

1. Product listing is effectively a webstudio website that can also be
functional standalone as well as inside the builder.
2. That website wraps individual section templates with a utility
component that handles click-to-insert

<img width="281" alt="image"
src="https://github.com/webstudio-is/webstudio/assets/52824/0511f516-fb95-41b4-afa5-7a91f238c353">
<img width="290" alt="image"
src="https://github.com/webstudio-is/webstudio/assets/52824/881fdee8-47ac-4d3a-ac01-7fdb9fdab236">


https://share.descript.com/view/bIgPI8aGiYA


## Steps for reproduction

1. no need to test for now

## Code Review

- [ ] 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/blob/main/apps/builder/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `builder/env-check.js` if mandatory

---------

Co-authored-by: Bogdan Chadkin <trysound@yandex.ru>
2024-02-26 10:01:36 +01:00
Bogdan Chadkin 1fe3a842b0 fix: replace unknown variables on paste (#2945)
Here fixing the issue with saving expressions with variables not
available in the scope which leads to user confusion and compilation
errors.

<img width="481" alt="image"
src="https://github.com/webstudio-is/webstudio/assets/5635476/176a0e1e-a74c-433f-8e7f-fdba9d4b8c71">
2024-02-26 12:03:20 +07:00
Bogdan Chadkin 727978b2c9 fix: prevent generating unused variables in resoures (#2929)
Here improved the resources generator to not produce variables unused in
resource fields.

Also enforced unused variables to be always provided to avoid issues
with not generated variables.
2024-02-20 13:10:38 +07:00
Bogdan Chadkin be2b5ce31a refactor: rename page.pathVariableId to pathParamsDataSourceId (#2915)
Ref https://github.com/webstudio-is/webstudio/issues/2903

Small renaming for clarity
2024-02-15 19:31:55 +07:00
Bogdan Chadkin 4c20e2d317 refactor: avoid generating unused variables in page components (#2906)
Here improved component generator logic to not generate unused
variables. This way later we will be able to avoid requesting unused
resources as well.
2024-02-14 11:50:10 +07:00
Bogdan Chadkin 646245f21a experimental: allow changing page status (#2905)
Ref https://github.com/webstudio-is/webstudio/issues/2903

Here added support for changing page status in page settings. This works
for both redirect and content rendering.

User can render error message based on received cms data and give 404
status code.
2024-02-13 18:37:24 +07:00
Bogdan Chadkin 231f91c69c experimental: add redirect field to page settings (#2900)
Here added new field to page settings ui and page meta schema to
redirect page when specified. Having bindings support redirect can be
specified conditionally based on cms cata.

Tested locally, works with both urls and paths.

<img width="702" alt="Screenshot 2024-02-12 at 15 58 11"
src="https://github.com/webstudio-is/webstudio/assets/5635476/a4c171b4-8091-4241-b36f-401fc543427c">
2024-02-13 00:01:52 +07:00
Bogdan Chadkin 4a6c91bf31 experimental: generate variables for page meta website (#2898)
Here added support for variables in page meta in generated websites.
Prevented creating unused variables. We can reuse the same way for other
generated parts later.
2024-02-11 20:53:19 +07:00
Oleg Isonen 4f868c5a5f fix: Normalize border style (#2867)
## Description

We don't support inset/outset in the style panel which is the initial
for inputs/buttons

New defaults are:

- input, textarea, button - solid
- radio, checkbox - none (already was none, no change,but we didn't
reflect that in sp)

## Steps for reproduction

1. add those components to canvas
2. see that input, textarea, button - have solid border style in style
panel
3. see that radio, checkbox - show none

## Code Review

- [ ] hi @istarkov , I need you to do
  - conceptual review (architecture, feature-correctness)
  - detailed review (read every line)
  - test it on preview

## 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/blob/main/apps/builder/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `builder/env-check.js` if mandatory
2024-02-05 18:34:04 +01:00
Bogdan Chadkin 84fc906721 refactor: convert page meta fields into expressions (#2853)
Here added huge migration to convert page meta into expressions and
adapted the code to compute those.
2024-02-01 14:20:18 +07:00
Bogdan Chadkin 443fa5a50c feat: support social image url (#2845)
To integrate cms we need to be able to specify arbitary url as social
image instead of just asset.

Here added input which overrides selected asset. Hidden behind the flag.

<img width="538" alt="Screenshot 2024-01-30 at 21 27 40"
src="https://github.com/webstudio-is/webstudio/assets/5635476/e472028c-1cea-4e7d-9320-75d0cb9d2eff">
2024-01-30 23:39:40 +07:00
Bogdan Chadkin 35fbcb9fc4 refactor: generate page meta in loader (#2844)
Here refactored page meta with simpler type than full page data and
moved it into factory which is invoked lazily in loader.

This will let us support variables and resources in page settings later.
2024-01-30 21:24:55 +07:00
Bogdan Chadkin d0395d072e refactor: generalize generating components (#2816)
Ref https://github.com/webstudio-is/webstudio/issues/2791

Here renamed generatePageComponent to generateWebstudioComponent and
refactored to use it later for slots.

"Page Params" variable is now passed as parameter. Similar way we will
support parameters in design components.
2024-01-25 23:17:17 +07:00
Bogdan Chadkin a474d92069 refactor: inline actions into props (#2813)
Ref https://github.com/webstudio-is/webstudio/issues/2791

Here refactored actions generation and computing
to simplify rendering slots as components.

before

```ts
const onClick = () => {
variableName = 1
set$variableName(variableName)
}
...
<Box
data-ws-id="..."
data-ws-component="Box"
onClick={onClick}>
```

after

```ts
<Box
data-ws-id="..."
data-ws-component="Box"
onClick={() => {
variableName = 1
set$variableName(variableName)
}}>
```

Similar thing done in builder. Actions are generated and executed per
each prop when compute prop values instead of precomputing globally
along with variables.
2024-01-25 12:50:59 +07:00
Bogdan Chadkin f620e2e1f2 refactor: generalize transferrable fragments (#2780)
Here added two new types

WebstudioFragment - reusable fragment of webstudio data which can be
generated (markdown, embed template), transferred (copied or stored in
marketplace) and inserted.

WebstudioData - all available normalized data to allow composing
multiple operations within single transaction like delete instance and
then insert into other part of the page.
2024-01-19 22:24:59 +07:00
Bogdan Chadkin 8d073e598d refactor: pass resources to page with context (#2777)
Resources should not be part of component props.
Drilling resources to nested custom components
would be more complex so using context can
simplify this part and prepare for rendering
slots as separate components.
2024-01-18 23:33:54 +07:00
Oleg Isonen 8e2e07ea23 feat: Allow selecting a nested path for link href (#2773)
Ref https://github.com/webstudio-is/webstudio/issues/404

## Description

- can select a nested path for link pages
- can click in preview to get to the page

## Steps for reproduction

1. click button
2. expect xyz

## Code Review

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

## 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/blob/main/apps/builder/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `builder/env-check.js` if mandatory
2024-01-17 19:02:41 +01:00
Oleg Isonen 65d0df8213 feat: Nested routes compiler (#2766)
Ref https://github.com/webstudio-is/webstudio/issues/404

## Description

- generate remix app with nested routes

## Steps for reproduction

1. create nested routes 
2.  generate app using cli

## Code Review

- [ ] hi @istarkov , I need you to do
  - conceptual review (architecture, feature-correctness)
  - detailed review (read every line)
  - test it on preview

## 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/blob/main/apps/builder/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `builder/env-check.js` if mandatory
2024-01-16 17:03:54 +01:00
Bogdan Chadkin c0702ba10a fix: polish collection component (#2767)
Ref https://github.com/webstudio-is/webstudio/issues/2532

- fixed collection icon color
- allow to specify expression in embed template children
- tweaked default collection template
- allow to specify variable aliases in embed template children
- renamed collectionItem variable to Collection Item
- moved collection component to "Data" category
- fix broken canvas when bind object to text content
- add better tooltips why cannot remove parameter and used variables
2024-01-16 15:13:18 +07:00
Oleg Isonen 5a5382c975 feat: Page folders (#2745)
Ref https://github.com/webstudio-is/webstudio/issues/404

## Description

Implement ablity to organize pages in folders, not a complete
implementation, only:

- Implements data structure for folders
- Allows to create folders and select a parent folder from a folder
- Reparents orphaned pages/folders for the future collaboration mode

## Steps for reproduction

1. open pages
2. add folders
3. nest folders
4. delete folders

## Code Review

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

## 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/blob/main/apps/builder/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `builder/env-check.js` if mandatory
2024-01-13 16:39:57 +01:00
Bogdan Chadkin ed188ef215 feat: support binding in text content (#2756)
Ref https://github.com/webstudio-is/webstudio/issues/2532

- added new expression type to instance children
- added binding to text content setting
- prevented deleting variable bound to instance child
- rendered computed child in canvas and preview
- supported expression child in component generator

What's missing

- copy paste support (will add later)

<img width="880" alt="Screenshot 2024-01-13 at 09 59 58"
src="https://github.com/webstudio-is/webstudio/assets/5635476/1275d5b3-420b-4f97-9d72-407ff39932e5">
2024-01-13 16:50:08 +07:00
Bogdan Chadkin 8fa0d7590f feat: support editing text content in settings panel (#2754)
Ref https://github.com/webstudio-is/webstudio/issues/2532

Here added "Text Content" system prop to all elements which allows to
edit plain text content though settings panel.

It will be used to support instance content binding instead of using
HtmlEmbed with code binding.

<img width="879" alt="Screenshot 2024-01-12 at 11 51 39"
src="https://github.com/webstudio-is/webstudio/assets/5635476/d88e1d56-7f6b-4ec1-9ea3-04cd40baa618">
2024-01-12 20:33:08 +07:00
Oleg Isonen 692bc16590 fix: Escape user-provided class (#2721)
## Description

Realized that user can put in a quote that will break the rendering

We also need an actual validation in the UI for class name, because its
not just an arbitrary string.


## Code Review

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

## 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/blob/main/apps/builder/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `builder/env-check.js` if mandatory
2023-12-31 21:00:17 +01:00
Oleg Isonen c6bdef5084 feat: CSS engine has now a Style Sheet rendering with atomic classes which will lead to a 10x smaller bundle size (#2713)
## Description

CSS engine has now a Style Sheet rendering with atomic classes which
will lead to a much smaller bundle size

## Steps for reproduction

1. click button
2. expect xyz

## Code Review

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

## 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/blob/main/apps/builder/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `builder/env-check.js` if mandatory
2023-12-30 21:08:37 +01:00
Oleg Isonen 5930064678 feat: Rename Site to Project because we are not just building a site builder (#2718)
## Description

Site is too narrow name for things that are pssible with webstudio


## Code Review

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

## 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/blob/main/apps/builder/docs/test-cases.md)
document
- [ ] added tests
- [ ] if any new env variables are added, added them to `.env.example`
and the `builder/env-check.js` if mandatory
2023-12-30 10:40:09 +01:00
Bogdan Chadkin f0b7a41824 fix: improve generating resources (#2715)
Ref https://github.com/webstudio-is/webstudio/issues/2532

Here added resources fixture and fixed a few issues with it

- add optional chaining to collection?.map to safely skip iterating
missing data
- added any to resource responses to access remote data without type
errors
- always generate empty headers array
- skip empty body in generated resources
2023-12-27 23:42:50 +07:00
Bogdan Chadkin 842c017c11 refactor: make resources universal (#2710)
Refactored resources generator to use universal http resource which
cover most cases.
- loadResource is imported from sdk
- accepts url (expression), method, headers (value is expression) and
body (expression)
- all variables and page params parameter are available for loader
expressions
2023-12-24 01:03:44 +07:00
Bogdan Chadkin dcd989108e feat: generate resource loaders (#2701)
Ref https://github.com/webstudio-is/webstudio/issues/2532

Here added generation of server modules with resource loaders. These
loaders are invoked in remix loader and result is passed to page
component.

Check fixtures and tests.
2023-12-18 21:24:50 +07:00
Bogdan Chadkin 02534730de feat: support resources in schema and compiler (#2698)
Ref https://github.com/webstudio-is/webstudio/issues/2532

Here added new schema type "Resources" to contain configuration of
requests to services. Their first use case is referencing from variable
to store loaded data.

For now added only client side generation. Later add support for server
code generation as part of remix loaders.
2023-12-16 15:44:49 +07:00
Bogdan Chadkin 7fe4b770d6 feat: support page path params in site compiler (#2682)
Ref https://github.com/webstudio-is/webstudio/issues/2532

Here remix route params are adapted to URLPattern format and passed to
generate page component as prop.

For this added 2 remix specific utilities
- convert subset of url pattern to remix route
- generate utility to adapt remix params to URLPattern params for
example for `/*` `params['*']` is replaced with `params[0]` and for
`/:slug*` `params['*']` is replaced with `params['slug']`
2023-12-15 00:34:51 +07:00
Bogdan Chadkin 61d664fc87 refactor: support parameter data source for collection item (#2671)
Ref https://github.com/webstudio-is/webstudio/issues/2532

Here added dataSource.type = 'parameter' without initial value because
value is always provided by context. It let us fix a few issues with
variables without complicating logic.

- prevent deleting parameter variable (collection item) in variables
panel
- allow changing only name of parameter variable
- show only name in the list of variables
- fix removing expression from collection data
- hide item parameter from collection variable list
- prevent editing parameter value from props
- make collection unstylable
2023-12-08 11:42:18 +07:00
Bogdan Chadkin d361c9ecee feat: add collection component to builder (#2657)
Ref https://github.com/webstudio-is/webstudio/issues/2532

Here added a "core" collection component to support iterating over json
arrays.

There is a lot of room for unification of all this logic though would
require building reactive tree abstraction.

Canvas automatically renders stub component for collection to make it
droppable. We can do the same for slot component.

Slot and Fragment eventually will go to "core" components too.

Added json/parameter prop types to embed template to support collection.

Fixed loosing focus while typing in json prop.

## Steps for reproduction

1. Drop collection component
2. play with it
2023-11-29 17:07:28 +03:00
Bogdan Chadkin 33509db139 refactor: reimplement duplicating instances (#2663)
Part of https://github.com/webstudio-is/webstudio/issues/2516

Here added new copy implementation. There are 2 differences

- it does not change existing instances and not change their children,
we will need this to copy pages
- it handles cross-project copy of portals (slots) properly, now each
portal content is inserted separately if the root does not exist and
skips otherwise
- much better covered with tests

## Steps for reproduction

1. try duplicating form and change form state prop
2. try duplicating form error message and change form state prop
2023-11-29 13:45:09 +03:00
Bogdan Chadkin 3cfa10ae22 refactor: compute props contextually (#2628)
Ref https://github.com/webstudio-is/webstudio/issues/2532

Here refactored props values computing to reuse in both canvas and
settings panel and support future collections which need to provide
different values for same variables.

Grouped whole logic and covered with tests.

## Testing

- check image src is working
- check link switch page in preview
2023-11-18 20:54:51 +03:00