@webstudio-is/react-sdk 0.58.0 → 0.60.0

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.
Files changed (96) hide show
  1. package/lib/app/custom-components/shared/remix-link.js +2 -2
  2. package/lib/app/index.js +0 -1
  3. package/lib/cjs/app/custom-components/shared/remix-link.js +2 -2
  4. package/lib/cjs/app/index.js +0 -1
  5. package/lib/cjs/components/__generated__/blockquote.props.js +5 -0
  6. package/lib/cjs/components/__generated__/body.props.js +5 -0
  7. package/lib/cjs/components/__generated__/bold.props.js +5 -0
  8. package/lib/cjs/components/__generated__/box.props.js +5 -0
  9. package/lib/cjs/components/__generated__/button.props.js +5 -1
  10. package/lib/cjs/components/__generated__/code.props.js +5 -0
  11. package/lib/cjs/components/__generated__/form.props.js +5 -0
  12. package/lib/cjs/components/__generated__/heading.props.js +5 -0
  13. package/lib/cjs/components/__generated__/image.props.js +5 -0
  14. package/lib/cjs/components/__generated__/input.props.js +11 -2
  15. package/lib/cjs/components/__generated__/italic.props.js +5 -0
  16. package/lib/cjs/components/__generated__/link-block.props.js +5 -1
  17. package/lib/cjs/components/__generated__/link.props.js +5 -1
  18. package/lib/cjs/components/__generated__/list-item.props.js +5 -0
  19. package/lib/cjs/components/__generated__/list.props.js +5 -0
  20. package/lib/cjs/components/__generated__/paragraph.props.js +5 -0
  21. package/lib/cjs/components/__generated__/rich-text-link.props.js +5 -1
  22. package/lib/cjs/components/__generated__/separator.props.js +5 -0
  23. package/lib/cjs/components/__generated__/span.props.js +5 -0
  24. package/lib/cjs/components/__generated__/subscript.props.js +5 -0
  25. package/lib/cjs/components/__generated__/superscript.props.js +5 -0
  26. package/lib/cjs/components/__generated__/text-block.props.js +5 -0
  27. package/lib/cjs/components/body.ws.js +0 -8
  28. package/lib/cjs/components/component-meta.js +6 -0
  29. package/lib/cjs/components/link-block.ws.js +1 -0
  30. package/lib/cjs/components/link.js +1 -1
  31. package/lib/cjs/components/link.ws.js +1 -0
  32. package/lib/components/__generated__/blockquote.props.js +5 -0
  33. package/lib/components/__generated__/body.props.js +5 -0
  34. package/lib/components/__generated__/bold.props.js +5 -0
  35. package/lib/components/__generated__/box.props.js +5 -0
  36. package/lib/components/__generated__/button.props.js +5 -1
  37. package/lib/components/__generated__/code.props.js +5 -0
  38. package/lib/components/__generated__/form.props.js +5 -0
  39. package/lib/components/__generated__/heading.props.js +5 -0
  40. package/lib/components/__generated__/image.props.js +5 -0
  41. package/lib/components/__generated__/input.props.js +11 -2
  42. package/lib/components/__generated__/italic.props.js +5 -0
  43. package/lib/components/__generated__/link-block.props.js +5 -1
  44. package/lib/components/__generated__/link.props.js +5 -1
  45. package/lib/components/__generated__/list-item.props.js +5 -0
  46. package/lib/components/__generated__/list.props.js +5 -0
  47. package/lib/components/__generated__/paragraph.props.js +5 -0
  48. package/lib/components/__generated__/rich-text-link.props.js +5 -1
  49. package/lib/components/__generated__/separator.props.js +5 -0
  50. package/lib/components/__generated__/span.props.js +5 -0
  51. package/lib/components/__generated__/subscript.props.js +5 -0
  52. package/lib/components/__generated__/superscript.props.js +5 -0
  53. package/lib/components/__generated__/text-block.props.js +5 -0
  54. package/lib/components/body.ws.js +0 -8
  55. package/lib/components/component-meta.js +6 -0
  56. package/lib/components/link-block.ws.js +2 -1
  57. package/lib/components/link.js +1 -1
  58. package/lib/components/link.ws.js +1 -0
  59. package/lib/types/app/index.d.ts +0 -1
  60. package/lib/types/components/component-meta.d.ts +29 -0
  61. package/lib/types/index.d.ts +1 -1
  62. package/package.json +13 -17
  63. package/src/app/custom-components/shared/remix-link.tsx +2 -2
  64. package/src/app/index.ts +0 -1
  65. package/src/components/__generated__/blockquote.props.ts +5 -0
  66. package/src/components/__generated__/body.props.ts +5 -0
  67. package/src/components/__generated__/bold.props.ts +5 -0
  68. package/src/components/__generated__/box.props.ts +5 -0
  69. package/src/components/__generated__/button.props.ts +5 -1
  70. package/src/components/__generated__/code.props.ts +5 -0
  71. package/src/components/__generated__/form.props.ts +5 -0
  72. package/src/components/__generated__/heading.props.ts +5 -0
  73. package/src/components/__generated__/image.props.ts +5 -0
  74. package/src/components/__generated__/input.props.ts +11 -2
  75. package/src/components/__generated__/italic.props.ts +5 -0
  76. package/src/components/__generated__/link-block.props.ts +5 -1
  77. package/src/components/__generated__/link.props.ts +5 -1
  78. package/src/components/__generated__/list-item.props.ts +5 -0
  79. package/src/components/__generated__/list.props.ts +5 -0
  80. package/src/components/__generated__/paragraph.props.ts +5 -0
  81. package/src/components/__generated__/rich-text-link.props.ts +5 -1
  82. package/src/components/__generated__/separator.props.ts +5 -0
  83. package/src/components/__generated__/span.props.ts +5 -0
  84. package/src/components/__generated__/subscript.props.ts +5 -0
  85. package/src/components/__generated__/superscript.props.ts +5 -0
  86. package/src/components/__generated__/text-block.props.ts +5 -0
  87. package/src/components/body.ws.tsx +0 -10
  88. package/src/components/component-meta.ts +8 -0
  89. package/src/components/link-block.ws.tsx +2 -1
  90. package/src/components/link.tsx +1 -1
  91. package/src/components/link.ws.tsx +1 -0
  92. package/src/index.ts +1 -0
  93. package/lib/app/handle-request.server.js +0 -16
  94. package/lib/cjs/app/handle-request.server.js +0 -36
  95. package/lib/types/app/handle-request.server.d.ts +0 -2
  96. package/src/app/handle-request.server.tsx +0 -21
@@ -17,6 +17,7 @@ export const props: Record<string, PropMeta> = {
17
17
  type: "boolean",
18
18
  },
19
19
  accessKey: { required: false, control: "text", type: "string" },
20
+ autoFocus: { required: false, control: "boolean", type: "boolean" },
20
21
  className: { required: false, control: "text", type: "string" },
21
22
  contentEditable: { required: false, control: "text", type: "string" },
22
23
  contextMenu: { required: false, control: "text", type: "string" },
@@ -25,6 +26,7 @@ export const props: Record<string, PropMeta> = {
25
26
  hidden: { required: false, control: "boolean", type: "boolean" },
26
27
  id: { required: false, control: "text", type: "string" },
27
28
  lang: { required: false, control: "text", type: "string" },
29
+ nonce: { required: false, control: "text", type: "string" },
28
30
  placeholder: { required: false, control: "text", type: "string" },
29
31
  spellCheck: { required: false, control: "boolean", type: "boolean" },
30
32
  tabIndex: { required: false, control: "number", type: "number" },
@@ -37,11 +39,14 @@ export const props: Record<string, PropMeta> = {
37
39
  radioGroup: { required: false, control: "text", type: "string" },
38
40
  role: { required: false, control: "text", type: "string" },
39
41
  about: { required: false, control: "text", type: "string" },
42
+ content: { required: false, control: "text", type: "string" },
40
43
  datatype: { required: false, control: "text", type: "string" },
41
44
  inlist: { required: false, control: "text", type: "string" },
42
45
  prefix: { required: false, control: "text", type: "string" },
43
46
  property: { required: false, control: "text", type: "string" },
47
+ rel: { required: false, control: "text", type: "string" },
44
48
  resource: { required: false, control: "text", type: "string" },
49
+ rev: { required: false, control: "text", type: "string" },
45
50
  typeof: { required: false, control: "text", type: "string" },
46
51
  vocab: { required: false, control: "text", type: "string" },
47
52
  autoCapitalize: { required: false, control: "text", type: "string" },
@@ -17,6 +17,7 @@ export const props: Record<string, PropMeta> = {
17
17
  type: "boolean",
18
18
  },
19
19
  accessKey: { required: false, control: "text", type: "string" },
20
+ autoFocus: { required: false, control: "boolean", type: "boolean" },
20
21
  className: { required: false, control: "text", type: "string" },
21
22
  contentEditable: { required: false, control: "text", type: "string" },
22
23
  contextMenu: { required: false, control: "text", type: "string" },
@@ -25,6 +26,7 @@ export const props: Record<string, PropMeta> = {
25
26
  hidden: { required: false, control: "boolean", type: "boolean" },
26
27
  id: { required: false, control: "text", type: "string" },
27
28
  lang: { required: false, control: "text", type: "string" },
29
+ nonce: { required: false, control: "text", type: "string" },
28
30
  placeholder: { required: false, control: "text", type: "string" },
29
31
  spellCheck: { required: false, control: "boolean", type: "boolean" },
30
32
  tabIndex: { required: false, control: "number", type: "number" },
@@ -37,11 +39,14 @@ export const props: Record<string, PropMeta> = {
37
39
  radioGroup: { required: false, control: "text", type: "string" },
38
40
  role: { required: false, control: "text", type: "string" },
39
41
  about: { required: false, control: "text", type: "string" },
42
+ content: { required: false, control: "text", type: "string" },
40
43
  datatype: { required: false, control: "text", type: "string" },
41
44
  inlist: { required: false, control: "text", type: "string" },
42
45
  prefix: { required: false, control: "text", type: "string" },
43
46
  property: { required: false, control: "text", type: "string" },
47
+ rel: { required: false, control: "text", type: "string" },
44
48
  resource: { required: false, control: "text", type: "string" },
49
+ rev: { required: false, control: "text", type: "string" },
45
50
  typeof: { required: false, control: "text", type: "string" },
46
51
  vocab: { required: false, control: "text", type: "string" },
47
52
  autoCapitalize: { required: false, control: "text", type: "string" },
@@ -17,6 +17,7 @@ export const props: Record<string, PropMeta> = {
17
17
  type: "boolean",
18
18
  },
19
19
  accessKey: { required: false, control: "text", type: "string" },
20
+ autoFocus: { required: false, control: "boolean", type: "boolean" },
20
21
  className: { required: false, control: "text", type: "string" },
21
22
  contentEditable: { required: false, control: "text", type: "string" },
22
23
  contextMenu: { required: false, control: "text", type: "string" },
@@ -25,6 +26,7 @@ export const props: Record<string, PropMeta> = {
25
26
  hidden: { required: false, control: "boolean", type: "boolean" },
26
27
  id: { required: false, control: "text", type: "string" },
27
28
  lang: { required: false, control: "text", type: "string" },
29
+ nonce: { required: false, control: "text", type: "string" },
28
30
  placeholder: { required: false, control: "text", type: "string" },
29
31
  spellCheck: { required: false, control: "boolean", type: "boolean" },
30
32
  tabIndex: { required: false, control: "number", type: "number" },
@@ -37,11 +39,14 @@ export const props: Record<string, PropMeta> = {
37
39
  radioGroup: { required: false, control: "text", type: "string" },
38
40
  role: { required: false, control: "text", type: "string" },
39
41
  about: { required: false, control: "text", type: "string" },
42
+ content: { required: false, control: "text", type: "string" },
40
43
  datatype: { required: false, control: "text", type: "string" },
41
44
  inlist: { required: false, control: "text", type: "string" },
42
45
  prefix: { required: false, control: "text", type: "string" },
43
46
  property: { required: false, control: "text", type: "string" },
47
+ rel: { required: false, control: "text", type: "string" },
44
48
  resource: { required: false, control: "text", type: "string" },
49
+ rev: { required: false, control: "text", type: "string" },
45
50
  typeof: { required: false, control: "text", type: "string" },
46
51
  vocab: { required: false, control: "text", type: "string" },
47
52
  autoCapitalize: { required: false, control: "text", type: "string" },
@@ -15,11 +15,6 @@ const presetStyle = {
15
15
  value: 100,
16
16
  },
17
17
 
18
- backgroundColor: {
19
- type: "keyword",
20
- value: "white",
21
- },
22
-
23
18
  fontFamily: {
24
19
  type: "keyword",
25
20
  value: "Arial",
@@ -36,11 +31,6 @@ const presetStyle = {
36
31
  unit: "number",
37
32
  value: 1.5,
38
33
  },
39
-
40
- color: {
41
- type: "keyword",
42
- value: "#232323",
43
- },
44
34
  },
45
35
  } as const satisfies Record<typeof defaultTag, Style>;
46
36
 
@@ -23,6 +23,13 @@ export const componentCategories = [
23
23
  "forms",
24
24
  ] as const;
25
25
 
26
+ export const ComponentState = z.object({
27
+ selector: z.string(),
28
+ label: z.string(),
29
+ });
30
+
31
+ export type ComponentState = z.infer<typeof ComponentState>;
32
+
26
33
  const WsComponentMeta = z.object({
27
34
  category: z.enum(componentCategories).optional(),
28
35
  // container - can accept other components with dnd
@@ -40,6 +47,7 @@ const WsComponentMeta = z.object({
40
47
  label: z.string(),
41
48
  Icon: z.function(),
42
49
  presetStyle: z.optional(z.any()),
50
+ states: z.optional(z.array(ComponentState)),
43
51
  children: z.optional(z.array(z.string())),
44
52
  });
45
53
 
@@ -1,7 +1,7 @@
1
1
  import { BoxLinkIcon } from "@webstudio-is/icons";
2
2
  import type { WsComponentMeta, WsComponentPropsMeta } from "./component-meta";
3
3
  import { props } from "./__generated__/link-block.props";
4
- import { propsMeta as linkPropsMeta } from "./link.ws";
4
+ import { meta as linkMeta, propsMeta as linkPropsMeta } from "./link.ws";
5
5
  import type { defaultTag } from "./link-block";
6
6
  import type { Style } from "@webstudio-is/css-data";
7
7
  import { a } from "../css/normalize";
@@ -21,6 +21,7 @@ export const meta: WsComponentMeta = {
21
21
  type: "container",
22
22
  label: "Link Block",
23
23
  Icon: BoxLinkIcon,
24
+ states: linkMeta.states,
24
25
  presetStyle,
25
26
  };
26
27
 
@@ -23,7 +23,7 @@ export const Link = forwardRef<HTMLAnchorElement, Props>((props, ref) => {
23
23
 
24
24
  switch (href?.type) {
25
25
  case "page":
26
- url = href.page.path;
26
+ url = href.page.path === "" ? "/" : href.page.path;
27
27
  if (href.hash !== undefined) {
28
28
  url += `#${href.hash}`;
29
29
  }
@@ -26,6 +26,7 @@ export const meta: WsComponentMeta = {
26
26
  label: "Link Text",
27
27
  Icon: LinkIcon,
28
28
  presetStyle,
29
+ states: [{ selector: "[aria-current=page]", label: "Current page" }],
29
30
  children: ["Link text you can edit"],
30
31
  };
31
32
 
package/src/index.ts CHANGED
@@ -13,5 +13,6 @@ export {
13
13
  export {
14
14
  type WsComponentPropsMeta,
15
15
  type WsComponentMeta,
16
+ type ComponentState,
16
17
  componentCategories,
17
18
  } from "./components/component-meta";
@@ -1,16 +0,0 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { renderToString } from "react-dom/server";
3
- import { RemixServer } from "@remix-run/react";
4
- const handleRequest = (request, responseStatusCode, responseHeaders, remixContext) => {
5
- const markup = renderToString(
6
- /* @__PURE__ */ jsx(RemixServer, { context: remixContext, url: request.url })
7
- );
8
- responseHeaders.set("Content-Type", "text/html");
9
- return new Response(`<!DOCTYPE html>${markup}`, {
10
- status: responseStatusCode,
11
- headers: responseHeaders
12
- });
13
- };
14
- export {
15
- handleRequest
16
- };
@@ -1,36 +0,0 @@
1
- "use strict";
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __export = (target, all) => {
7
- for (var name in all)
8
- __defProp(target, name, { get: all[name], enumerable: true });
9
- };
10
- var __copyProps = (to, from, except, desc) => {
11
- if (from && typeof from === "object" || typeof from === "function") {
12
- for (let key of __getOwnPropNames(from))
13
- if (!__hasOwnProp.call(to, key) && key !== except)
14
- __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
- }
16
- return to;
17
- };
18
- var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var handle_request_server_exports = {};
20
- __export(handle_request_server_exports, {
21
- handleRequest: () => handleRequest
22
- });
23
- module.exports = __toCommonJS(handle_request_server_exports);
24
- var import_jsx_runtime = require("react/jsx-runtime");
25
- var import_server = require("react-dom/server");
26
- var import_react = require("@remix-run/react");
27
- const handleRequest = (request, responseStatusCode, responseHeaders, remixContext) => {
28
- const markup = (0, import_server.renderToString)(
29
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.RemixServer, { context: remixContext, url: request.url })
30
- );
31
- responseHeaders.set("Content-Type", "text/html");
32
- return new Response(`<!DOCTYPE html>${markup}`, {
33
- status: responseStatusCode,
34
- headers: responseHeaders
35
- });
36
- };
@@ -1,2 +0,0 @@
1
- import type { EntryContext } from "@remix-run/node";
2
- export declare const handleRequest: (request: Request, responseStatusCode: number, responseHeaders: Headers, remixContext: EntryContext) => Response;
@@ -1,21 +0,0 @@
1
- import { renderToString } from "react-dom/server";
2
- import { RemixServer } from "@remix-run/react";
3
- import type { EntryContext } from "@remix-run/node";
4
-
5
- export const handleRequest = (
6
- request: Request,
7
- responseStatusCode: number,
8
- responseHeaders: Headers,
9
- remixContext: EntryContext
10
- ) => {
11
- const markup = renderToString(
12
- <RemixServer context={remixContext} url={request.url} />
13
- );
14
-
15
- responseHeaders.set("Content-Type", "text/html");
16
-
17
- return new Response(`<!DOCTYPE html>${markup}`, {
18
- status: responseStatusCode,
19
- headers: responseHeaders,
20
- });
21
- };