Commit Graph
165 Commits
Author SHA1 Message Date
Ivan StarkovandOleg Isonen 3c42f8ca4b experimental: View Animations support (#4817)
## Description

ref  #2645

- [x] - Add view-timeline-name and scroll-timeline-name support, and
prefixer (use custom property for unsupported browsers)
- [x] - Add initial story

## Steps for reproduction


https://6382151c8b47d4399fb9fc69-uljkhwtbmc.chromatic.com/iframe.html?args=&globals=&id=sdk-components-animation-view-animations--in-out&viewMode=story

## 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:
0000)
- [ ] 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` file

---------

Co-authored-by: Oleg Isonen <oleg008@gmail.com>
2025-02-04 06:02:55 +03:00
Oleg Isonen 5fa6c0354f fix: Floating panel and dialog bugs (#4708)
## Description

- [x] fix maximize/minimize size/positioning
   - open, move, maximize, minimize
   - should be in the last position after moving
- [x]  fixes #4681
- [x] fixes #4684

## 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:
0000)
- [ ] 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` file
2025-01-09 17:29:08 +01:00
Bogdan Chadkin 6c5711cf2a refactor: rewrite radix tabs template with jsx (#4668)
- support `&[data-state=active]` as state in css parser
- added more theme values
- migrated radix tabs to jsx templates
2024-12-28 18:21:33 +07:00
Bogdan Chadkin 1f3e8a68b2 refactor: bump uno (#4576)
Nothing critical. Api is not asynchronous. Oklch is used by default
though I opt out into legacy color space which is supported by our
parser.
2024-12-13 18:36:24 +07:00
Bogdan Chadkin adadbe3aa2 refactor: enable isolated declatations in css data (#4476)
Moved transition related stuff into builder, simplified mdn-data and
added missing types to exports, removed popularity index.
2024-11-30 16:47:26 +07:00
Jaya Krishna Namburu d1bd5df4e1 feat: add links to mdn documentation inside tooltips for sections and properties (#4416)
## Description

fixes #4383 
Tweaked the `__generated__/properties.ts` that is generated at build
time to store `mdn_url` in it. And use these url's to show on the
tooltips for the properties and sections.

## Steps for reproduction
- Open any property, and the tooltip opens
- Inside the tooltip, you should be able to click on the external link
icon.
- The link should take you to a mdn link of the same.


![external-links](https://github.com/user-attachments/assets/9b81d2da-7d5f-4d7f-abdb-e0eaa5902a14)


## Code Review

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

- [x] made a self-review

## Before merging

- [x] tested locally and on preview environment (preview dev login:
5de6)
2024-11-15 10:20:55 +05:30
Bogdan Chadkin bb8e41ab57 refactor: migrate builder tests to vitest (#4415)
Really, this was too easy
2024-11-13 14:39:17 +04:00
Ivan Starkov b762a92214 fix: Option list changes width on hover (#4363)
## Description

closes #4300

Also simplified types instead of unions with 2300+ strings

## 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` file
2024-11-04 15:17:45 +04:00
Bogdan Chadkin 82c301372b refactor: remove css variables feature flag (#4337)
Css variables are landed. No need for conditional rendering.
2024-10-24 20:48:46 +03:00
Bogdan Chadkin e5a4b0e2c8 fix: expand border-bottom-left-radius from shorthand (#4326)
Overlooked
2024-10-21 16:42:25 +03:00
Bogdan Chadkin 8d7cf574fc fix: generate text-wrap-style: auto (#4321)
Fixes https://github.com/webstudio-is/webstudio/issues/4218

Turned out text-wrap-style got removed but supported alternative
text-wrap: wrap was not generated instead.
Now all should work.

Also removed invalid text-wrap-mode: auto
2024-10-20 11:50:41 +03:00
Bogdan Chadkin 666b7e3efb refactor: support css vars in repeated values (#4255)
Ref https://github.com/webstudio-is/webstudio/issues/3399

Here added support for computing css variables inside layers and tuples
to support cases like

```css
transition-timing-function: var(--ease), var(--ease-in);
```
2024-10-09 16:19:55 +03:00
Oleg Isonen da7e9cdce7 experimental: support nested and attribute selectors (#4213)
## Description

Needed to support all wf presets for fixing this
https://github.com/webstudio-is/webstudio/pull/4155

## 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` file
2024-10-04 17:23:09 +02:00
Bogdan Chadkin 22e8f2b239 experimental: parse length and color in css variables (#4204)
Ref https://github.com/webstudio-is/webstudio/issues/3399

Here improved parsing to automatically infer unit and color style values
in css custom properties.

This will let us in the future leverage strictly typed custom properties
for interpolation in animations.

Now the benefit is proper ui and filtering out unit in color pickers and
color in length inputs. Not implemented though yet.

![Screenshot 2024-10-03 at 13 31
20](https://github.com/user-attachments/assets/b32db3d3-8589-4cd4-b375-fb2036a308a0)
2024-10-03 14:44:50 +03:00
Bogdan Chadkin bbf37d3e61 refactor: simplify var value fallbacks (#4201)
Ref https://github.com/webstudio-is/webstudio/issues/3399

Initially css variable fallback was defined in schema as array though
it's actually a single value by spec and may contain commas. We don't
have css variables in data yet so should be safe to change schema before
too late.
2024-10-02 18:05:05 +03:00
Bogdan Chadkin ce475d4677 experimental: support copying root styles from marketplace (#4193)
Ref https://github.com/webstudio-is/webstudio/issues/3399

Now we have a way to deliver custom properties to user projects.
2024-10-02 15:06:14 +03:00
Bogdan Chadkin 84250f4cd8 experimental: add :root support (#4175)
Ref https://github.com/webstudio-is/webstudio/issues/3399

Now we have a way to change rem and define global css variables

- show root node in navigator behind flag
- show style panel when root is selected
- inherit styles from root
- show advanced styles defined on root in descendents
- show browser styles for root (`html { display: block }`)
- show initial values instead of `inherit` in root typography
- render root styles on canvas
- property label shows root as the source

Note: generated sites are not supported yet
<img width="825" alt="Screenshot 2024-09-27 at 19 24 41"
src="https://github.com/user-attachments/assets/4c17f86a-74d8-4518-8145-854dbdbee11a">

<img width="1304" alt="Screenshot 2024-09-27 at 19 09 51"
src="https://github.com/user-attachments/assets/6003fd49-5ecb-46cd-9df7-85c571f82e32">
2024-09-28 13:01:43 +02:00
Jaya Krishna Namburu 45d931715e experimental: parse linear-gradient and extract stops, angle, side-or-corner and hints from the gradient. (#4131)
## Description
This PR is to kick off the #3448 track. First of everything we need to
build the gradient selector/indicator

![image](https://github.com/user-attachments/assets/6901327d-0ba0-4b7d-a3ff-41dbcf806912)

Which should be able to parse the gradient and pick the `stops` and
`colors` and `hints` from it.


## 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` file
2024-09-19 14:34:34 +02:00
Bogdan Chadkin c81b3d502f experimental: add css custom properties support to advanced styles (#4117)
Ref https://github.com/webstudio-is/webstudio/issues/3399

- added custom properties autocomplete in advanced styles
- fixed unit value detecting to not break var()
- show inherited custom properties in advanced styles
- dropped "types" from properties meta
- parse not top level var(), for example inside layers or function as
unparsed for now

<img width="239" alt="image"
src="https://github.com/user-attachments/assets/640690d4-a52e-43a4-a3a2-6032d30c600f">
<img width="871" alt="Screenshot 2024-09-12 at 21 53 38"
src="https://github.com/user-attachments/assets/f50e52a6-1307-4554-9ee2-cb2f20dd0e2c">
<img width="862" alt="Screenshot 2024-09-12 at 21 53 47"
src="https://github.com/user-attachments/assets/09788e29-df58-41ee-a96e-c28c4006dabb">
2024-09-14 01:37:10 +02:00
Bogdan Chadkin e6b1d55e29 refactor: add repeated style utils (#4086)
Here replaced utils for adding and editing transitions with generic ones
which should cover cases for most other sections.

Can be tested adding and editing transitions and code
2024-09-09 12:30:21 +02:00
Jaya Krishna Namburu 99851a40d6 feat: Add tooltips for individual properties in style panels by the descriptions generated by ai (#3964)
## Description

This PR adds tooltips for all the layer based sections in the transform
property. The rest of the properties already have their tooltips managed
by the `PropertyName` component. I have taken our previous tooltips as
based and used a AI suggested one and proof read those. So, please let
me know if there are any suggestions to change.

## Steps for reproduction

- verify tooltips for `translate`, `scale`, `rotate` and `skew`,
`box-shadow`, `text-shadow`, `drop-shadow` properties.

## 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

- [x] made a self-review

## Before merging

- [x] tested locally and on preview environment (preview dev login:
5de6)
2024-09-03 21:23:57 +05:30
Jaya Krishna Namburu e5ec6a1475 feat: add offset-position and offset-anchor properties under advanced section (#3970)
fixes #3963 

## Description
Adds `offset-position` property to be available under the advanced
section. Of all the `offset-*` properties. Looks like only `position` is
marked as experimental in `mdn-data`. But, according to can-i-use. It
seems it has a fair amount of support among browsers.
https://caniuse.com/mdn-css_properties_offset-position
![Screenshot 2024-08-20 at 11 44
59 AM](https://github.com/user-attachments/assets/ab080a22-4e94-453a-8587-38be95cc83dc)


## Steps for reproduction
- Add `offset-position` property under the advanced tab.
- check for description of the property.
- Ability to reset the property from the advanced tab.

## 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

- [x] made a self-review
- [ ] 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)
2024-08-21 13:05:10 +02:00
Jaya Krishna Namburu d8edefa7ab experimental: parse perspective-origin property value as tuples for x and y values (#3947)
## Description

This PR allows to parse the `perspective-origin` property value as
`tuple`. And added test cases for different possible values.

## Steps for reproduction

- Allows to parse `perspective-origin` values as tuples.

## 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

- [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/blob/main/apps/builder/docs/test-cases.md)
document
- [x] added tests
2024-08-16 13:39:06 +02:00
Bogdan Chadkin 3dd8c2f482 refactor: upgrade html-tags (#3946)
The new version exports types with normal casing,
the package is completely esm and reexports json with new syntax.

https://github.com/sindresorhus/html-tags/blob/main/index.js#L1

Also reused voidHtmlTags in collapsed instance logic.
2024-08-16 11:24:57 +02:00
Bogdan Chadkin c7e88531d7 refactor: optimize html styles access (#3939)
Ref https://github.com/webstudio-is/webstudio/issues/1536

Styles are accessed for specific fields and never iterated. Here output
html styles as single map with composite key tag:property.
2024-08-15 18:26:26 +02:00
Bogdan Chadkin 3a35b6cbc3 refactor: rewrite html styles with css (#3938)
Ref https://github.com/webstudio-is/webstudio/issues/1536

We have a proper parser which can convert raw css into webstudio styles.
Rewrite should simplify maintaining and allow to change final format
without big rewrites.
2024-08-15 15:15:43 +02:00
Bogdan Chadkin 4429b19c0e build: upgrade prettier (#3892)
New prettier version wraps nullish coalescing with parens when used
inside of ternaries.
2024-08-07 14:27:37 +02:00
Jaya Krishna Namburu 1dd0bdedc0 fix: parse transform-origin property values as tuples (#3883)
## Description

The current parser is not able to parse all the possible values for
`transform-origin` property. The property takes `single`, `double` and
`triple` values. So these need to be parsed as `tuples` to support
`triple` values now.

## 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

- [x] made a self-review

## Before merging

- [x] tested locally and on preview environment (preview dev login:
5de6)
- [x] updated [test
cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md)
document
- [x] added tests
2024-08-06 10:52:01 +02:00
Bogdan Chadkin 0b72f64b80 refactor: support parsing font-family (#3849)
Added font-family parser to css value parser
2024-08-01 14:37:15 +02:00
Bogdan Chadkin cfde2f33b3 refactor: parse complex aspect ratio as unparsed value (#3740)
Fixes the issue with pasting images from webflow.
2024-07-16 17:49:09 +02:00
Bogdan Chadkin 6b52b5ad4e refactor: move filter parsers to generic value parser (#3729)
Here reuse generic css value parser for filter and backdrop-filter
properties. Added section to parse filter functions with tuple
arguments.
2024-07-15 22:56:59 +02:00
Bogdan Chadkin b1ef716ae7 refactor: move transform parser into css value parser (#3726)
Here dropped custom transform parsers in favor of generic value parser.
Also switched to layers when single value is specified in scale and
translate.
2024-07-15 15:02:03 +02:00
Bogdan Chadkin 0373c52a53 refactor: move shadow parser into value parser (#3723)
We don't need separate parsing logic for box-shadow and text-shadow
properties. Generic css value parser is able to produce the same ast.
2024-07-15 11:42:17 +02:00
Bogdan Chadkin 101fb0d8f8 experimental: optionally support parsing custom properties (#3722)
Ref https://github.com/webstudio-is/webstudio/issues/3399
https://github.com/webstudio-is/webstudio/issues/1536

Here added optional support for custom properties in css parser. Also
refactored basic style object model tests with css/jsx fixtures.
2024-07-15 10:57:46 +02:00
Bogdan Chadkin 18a0f028c9 refactor: split css literal parser (#3721)
Here refactored value parser with literal parser
which can be reused in all functions, tuples and layers.

Color parser now relies on specific ast types.

Tuples are generated for all values with multiple nodes.

This all will let us build more universal parsers with less effort.
2024-07-14 20:30:12 +02:00
Bogdan Chadkin ae35b7d8f0 refactor: add universal css fragment parser (#3712)
Here added new utility for builder to support parsing css fragments in
style controls like background, transition, shadows etc.

The idea is to use regular parseCss where possible and fallback to
specified property parsing.

This way we do not need to strip property name manually and can always
have shorthands expanded in result.

Also user can paste multiple properties at once like background-color
and background-image when describe gradient.

<img width="266" alt="Screenshot 2024-07-11 at 16 38 06"
src="https://github.com/webstudio-is/webstudio/assets/5635476/8d3b8454-0f8a-48b2-adbd-389a28993e3a">
2024-07-11 22:11:53 +02:00
Jaya Krishna Namburu d744cdef4b experimental: parse scale css property into tuples (#3705)
## Description

Adds support for parsing `scale` css property. Will be used in bringing
support for transforms ection in style panel.

## 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

- [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 added tests
2024-07-11 08:41:26 +02:00
Jaya Krishna Namburu c7a688c3c6 experimental: parse translate css property into tuples (#3696)
## Description

Parses `translate` css property and converts them into tuples. Related
to the series of PR that enables transform property #3411

## 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

- [x] made a self-review

## Before merging

- [x] tested locally and on preview environment (preview dev login:
5de6)
- [x] added tests
2024-07-11 08:24:27 +02:00
Jaya Krishna Namburu 6abceecd74 experimental: parse transform css property into tuples (#3704)
## Description

Parse `transform` value into tuples. We need to use shorthand transform
property for `skew` and `rotate` to support the UX.

- **skew** doesn't have individual property yet. So need to use this as
backup.
- **rotate** doesn support setting individual `x, y, z` properties on
the long hand property like in the design. So, we are can use transforms
as backup and allow to set individual `rotateX`, `rotateY` and `rotateZ`
values.


## Code Review

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

## Before requesting a review

- [x] made a self-review


## Before merging

- [x] tested locally and on preview environment (preview dev login:
5de6)
- [x] updated [test
cases](https://github.com/webstudio-is/webstudio/blob/main/apps/builder/docs/test-cases.md)
document
- [x] added tests
2024-07-11 08:09:25 +02:00
Ivan StarkovandBogdan Chadkin b6a164f90d fix: expandShorthands fails and prevent builder to load (#3702)
---------

Co-authored-by: Bogdan Chadkin <trysound@yandex.ru>
2024-07-10 17:37:48 +02:00
Bogdan Chadkin d7b529a118 refactor: merge timing function parser into value parser (#3694)
All value parsers can be generalized at some point to make adding new
feature easier. Here moved timing-function parser into value parser and
reused it in builder.
2024-07-07 17:52:20 +03:00
Bogdan Chadkin 56f9bc0689 refactor: drop tailwind shorthands (#3693)
We implemented expanding shorthands for css parser. Expanding logic for
tailwind classes is not longer necessary.
2024-07-07 13:02:15 +03:00
Bogdan Chadkin f988e2b918 experimental: support breakpoints in css parser (#3685)
Ref https://github.com/webstudio-is/webstudio/issues/2647

Here added additional `breakpoint` property to parsed style declaration.
It basically a sanitized media query like `(min-width:768px)` which is
easy to parse. Styles inside unsupported conditions are just stripped
away.
2024-07-06 11:13:45 +03:00
Bogdan Chadkin e19fe92f15 refactor: parse styles into flat list (#3666)
Ref https://github.com/webstudio-is/webstudio/issues/2647

We need to support more grouping properties in parsed css for example
breakpoints would require additional nesting.

Here I took slightly different approach and moved all styles into single
array with additional `selector` property.

Now we can easily support parsing styles without selectors and parsing
styles without breakpoints. And optionally we can always use
`Map.groupBy(styles, styleDecl => styleDecl.selector)` and the same
later by breakpoint.
2024-07-05 01:14:20 +03:00
Ivan Starkov 737aa3434d fix: Correct transition timing function for Webflow paste (#3652)
## Description

Numbers like `.65` were not parsed as valid.
Also I don't think we need to use regexps to check functions validity.
There can be vars calc and anything inside

## 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` file
2024-07-04 07:25:48 +03:00
Jaya Krishna Namburu c6a9a246d8 feat: show custom layer names in style-panel for redability (#3633)
## Description

fixes #3589 

This PR allows to display the layers in the style-panel in much more
readable way.

![Screenshot 2024-06-27 at 9 40
14 PM](https://github.com/webstudio-is/webstudio/assets/11075561/cfec0958-b228-476a-992b-d38b762892c6)
![Screenshot 2024-06-27 at 9 40
34 PM](https://github.com/webstudio-is/webstudio/assets/11075561/c6615957-d073-437f-b8b2-56ee191b672d)


## 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

- [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)
2024-07-03 13:52:11 +02:00
Bogdan Chadkin 18005cf5d9 experimental: parse unknown properties as unparsed value (#3658)
Ref https://github.com/webstudio-is/webstudio/issues/2647

Here improved our value parser to not output invalid type every now and
then and just represent unknown properties as unparsed. This will let us
parse it in the future without loosing anything on paste.
2024-07-02 14:16:17 +03:00
Bogdan Chadkin 373eacaf7c experimental: support last shorthands (#3657)
Ref https://github.com/webstudio-is/webstudio/issues/2647

- animation-range
- view-timeline
- caret
- position-try
- overscroll-behavior
2024-07-02 14:07:43 +03:00
Bogdan Chadkin 6c93a1a93f experimental: expand shorthands with css-wide keywords (#3656)
Ref https://github.com/webstudio-is/webstudio/issues/2647

According to spec css-wide keywords on shorthands should be passed to
all their longhands as is.
2024-07-02 13:21:30 +03:00
Bogdan Chadkin 7331b729b6 experimental: improve parsing transition-property (#3653)
Fixed parsing "none" in transition-property.
Switched to unparsed as property type to semantically distinct from
keyword.
2024-07-01 17:44:33 +03:00