Skip to content

Commit c6a0025

Browse files
committed
experimental: generate root styles for published sites
Ref #3399 - render layout hack as root preset styles - generate root user styles on published sites - bumped a couple of deps
1 parent 84250f4 commit c6a0025

File tree

26 files changed

+162
-128
lines changed

26 files changed

+162
-128
lines changed

apps/builder/app/builder/features/sidebar-left/panels/components/insert.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
1-
import { type WsComponentMeta } from "@webstudio-is/react-sdk";
1+
import { ROOT_INSTANCE_ID } from "@webstudio-is/sdk";
2+
import type { WsComponentMeta } from "@webstudio-is/react-sdk";
23
import { toast } from "@webstudio-is/design-system";
34
import {
45
$instances,
56
$registeredComponentMetas,
67
$selectedInstanceSelector,
78
$selectedPage,
8-
ROOT_INSTANCE_ID,
99
} from "~/shared/nano-states";
1010
import {
1111
computeInstancesConstraints,

apps/builder/app/builder/features/sidebar-left/panels/navigator/navigator-tree.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ import {
2525
showAttribute,
2626
WsComponentMeta,
2727
} from "@webstudio-is/react-sdk";
28-
import type { Instance } from "@webstudio-is/sdk";
28+
import { ROOT_INSTANCE_ID, type Instance } from "@webstudio-is/sdk";
2929
import { EyeconClosedIcon, EyeconOpenIcon } from "@webstudio-is/icons";
3030
import {
3131
$dragAndDropState,
@@ -39,7 +39,6 @@ import {
3939
$selectedInstanceSelector,
4040
$selectedPage,
4141
getIndexedInstanceId,
42-
ROOT_INSTANCE_ID,
4342
} from "~/shared/nano-states";
4443
import type { InstanceSelector } from "~/shared/tree-utils";
4544
import { serverSyncStore } from "~/shared/sync";

apps/builder/app/builder/features/style-panel/shared/model.tsx

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,13 @@ import {
77
type StyleProperty,
88
type StyleValue,
99
} from "@webstudio-is/css-engine";
10-
import type { Breakpoint, Instance, StyleDecl } from "@webstudio-is/sdk";
10+
import {
11+
ROOT_INSTANCE_ID,
12+
type Breakpoint,
13+
type Instance,
14+
type StyleDecl,
15+
} from "@webstudio-is/sdk";
16+
import { rootComponent } from "@webstudio-is/react-sdk";
1117
import {
1218
$breakpoints,
1319
$instances,
@@ -19,7 +25,6 @@ import {
1925
$selectedOrLastStyleSourceSelector,
2026
$styles,
2127
$styleSourceSelections,
22-
ROOT_INSTANCE_ID,
2328
} from "~/shared/nano-states";
2429
import {
2530
getComputedStyleDecl,
@@ -49,7 +54,9 @@ const $presetStyles = computed($registeredComponentMetas, (metas) => {
4954
const $instanceComponents = computed(
5055
[$selectedInstanceSelector, $instances],
5156
(instanceSelector, instances) => {
52-
const instanceComponents = new Map<Instance["id"], Instance["component"]>();
57+
const instanceComponents = new Map<Instance["id"], Instance["component"]>([
58+
[ROOT_INSTANCE_ID, rootComponent],
59+
]);
5360
if (instanceSelector === undefined) {
5461
return instanceComponents;
5562
}

apps/builder/app/canvas/instance-selected.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import type { Instance } from "@webstudio-is/sdk";
1+
import { ROOT_INSTANCE_ID, type Instance } from "@webstudio-is/sdk";
22
import { idAttribute, selectorIdAttribute } from "@webstudio-is/react-sdk";
33
import { subscribeWindowResize } from "~/shared/dom-hooks";
44
import {
@@ -14,7 +14,6 @@ import {
1414
$styles,
1515
$selectedInstanceStates,
1616
$styleSourceSelections,
17-
ROOT_INSTANCE_ID,
1817
} from "~/shared/nano-states";
1918
import htmlTags, { type HtmlTags } from "html-tags";
2019
import {

apps/builder/app/canvas/shared/styles.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import { computed } from "nanostores";
33
import { useStore } from "@nanostores/react";
44
import {
55
Instance,
6+
ROOT_INSTANCE_ID,
67
getStyleDeclKey,
78
type StyleDecl,
89
type StyleSourceSelection,
@@ -14,6 +15,7 @@ import {
1415
createImageValueTransformer,
1516
descendantComponent,
1617
type Params,
18+
rootComponent,
1719
} from "@webstudio-is/react-sdk";
1820
import {
1921
type VarValue,
@@ -32,7 +34,6 @@ import {
3234
$selectedStyleState,
3335
$styleSourceSelections,
3436
$styles,
35-
ROOT_INSTANCE_ID,
3637
} from "~/shared/nano-states";
3738
import { setDifference } from "~/shared/shim";
3839
import { $ephemeralStyles, $params } from "../stores";
@@ -330,9 +331,11 @@ export const GlobalStyles = ({ params }: { params: Params }) => {
330331
presetSheet.addMediaRule("presets");
331332
for (const [component, meta] of metas) {
332333
for (const [tag, styles] of Object.entries(meta.presetStyle ?? {})) {
333-
const rule = presetSheet.addNestingRule(
334-
`${tag}:where([data-ws-component="${component}"])`
335-
);
334+
const selector =
335+
component === rootComponent
336+
? ":root"
337+
: `${tag}:where([data-ws-component="${component}"])`;
338+
const rule = presetSheet.addNestingRule(selector);
336339
for (const declaration of styles) {
337340
rule.setDeclaration({
338341
breakpoint: "presets",

apps/builder/app/shared/instance-utils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
encodeDataSourceVariable,
2525
transpileExpression,
2626
getExpressionIdentifiers,
27+
ROOT_INSTANCE_ID,
2728
} from "@webstudio-is/sdk";
2829
import {
2930
type WsComponentMeta,
@@ -46,7 +47,6 @@ import {
4647
$pages,
4748
$resources,
4849
$selectedPage,
49-
ROOT_INSTANCE_ID,
5050
} from "./nano-states";
5151
import {
5252
type DroppableTarget,

apps/builder/app/shared/nano-states/instances.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { atom, computed } from "nanostores";
2-
import type { Instances } from "@webstudio-is/sdk";
2+
import { ROOT_INSTANCE_ID, type Instances } from "@webstudio-is/sdk";
33
import type { InstanceSelector } from "../tree-utils";
44
import { $selectedPage } from "./pages";
55
import { rootComponent } from "@webstudio-is/react-sdk";
@@ -20,8 +20,6 @@ export const $textEditingInstanceSelector = atom<
2020

2121
export const $instances = atom<Instances>(new Map());
2222

23-
export const ROOT_INSTANCE_ID = ":root";
24-
2523
export const $virtualInstances = computed($selectedPage, (selectedPage) => {
2624
const virtualInstances: Instances = new Map();
2725
if (selectedPage) {

apps/builder/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@
113113
"slugify": "^1.6.6",
114114
"strip-indent": "^4.0.0",
115115
"tiny-invariant": "^1.3.3",
116-
"title-case": "^4.3.1",
116+
"title-case": "^4.3.2",
117117
"ultraflag": "^0.1.0",
118118
"untruncate-json": "^0.0.1",
119119
"urlpattern-polyfill": "^9.0.0",

fixtures/ssg-netlify-by-project-id/app/__generated__/index.css

Lines changed: 4 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

fixtures/ssg/app/__generated__/index.css

Lines changed: 4 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)