@webstudio-is/sdk-components-react 0.82.0 → 0.83.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 (168) hide show
  1. package/LICENSE +661 -21
  2. package/lib/__generated__/blockquote.props.js +30 -5
  3. package/lib/__generated__/body.props.js +30 -5
  4. package/lib/__generated__/bold.props.js +30 -5
  5. package/lib/__generated__/box.props.js +30 -5
  6. package/lib/__generated__/button.props.js +30 -5
  7. package/lib/__generated__/checkbox.props.js +31 -6
  8. package/lib/__generated__/code-text.props.js +30 -5
  9. package/lib/__generated__/form.props.js +30 -5
  10. package/lib/__generated__/heading.props.js +30 -5
  11. package/lib/__generated__/image.props.js +30 -5
  12. package/lib/__generated__/input.props.js +30 -5
  13. package/lib/__generated__/italic.props.js +30 -5
  14. package/lib/__generated__/label.props.js +30 -5
  15. package/lib/__generated__/link.props.js +30 -5
  16. package/lib/__generated__/list-item.props.js +30 -5
  17. package/lib/__generated__/list.props.js +30 -5
  18. package/lib/__generated__/paragraph.props.js +30 -5
  19. package/lib/__generated__/radio-button.props.js +31 -6
  20. package/lib/__generated__/radix-dialog.props.js +2120 -0
  21. package/lib/__generated__/radix-popover.props.js +463 -0
  22. package/lib/__generated__/radix-tooltip.props.js +473 -0
  23. package/lib/__generated__/rich-text-link.props.js +30 -5
  24. package/lib/__generated__/separator.props.js +30 -5
  25. package/lib/__generated__/span.props.js +30 -5
  26. package/lib/__generated__/subscript.props.js +30 -5
  27. package/lib/__generated__/superscript.props.js +30 -5
  28. package/lib/__generated__/text.props.js +30 -5
  29. package/lib/__generated__/textarea.props.js +30 -5
  30. package/lib/__generated__/vimeo-play-button.props.js +30 -5
  31. package/lib/__generated__/vimeo-preview-image.props.js +30 -5
  32. package/lib/__generated__/vimeo-spinner.props.js +30 -5
  33. package/lib/__generated__/vimeo.props.js +30 -5
  34. package/lib/body.ws.js +11 -1
  35. package/lib/cjs/__generated__/blockquote.props.js +30 -5
  36. package/lib/cjs/__generated__/body.props.js +30 -5
  37. package/lib/cjs/__generated__/bold.props.js +30 -5
  38. package/lib/cjs/__generated__/box.props.js +30 -5
  39. package/lib/cjs/__generated__/button.props.js +30 -5
  40. package/lib/cjs/__generated__/checkbox.props.js +31 -6
  41. package/lib/cjs/__generated__/code-text.props.js +30 -5
  42. package/lib/cjs/__generated__/form.props.js +30 -5
  43. package/lib/cjs/__generated__/heading.props.js +30 -5
  44. package/lib/cjs/__generated__/image.props.js +30 -5
  45. package/lib/cjs/__generated__/input.props.js +30 -5
  46. package/lib/cjs/__generated__/italic.props.js +30 -5
  47. package/lib/cjs/__generated__/label.props.js +30 -5
  48. package/lib/cjs/__generated__/link.props.js +30 -5
  49. package/lib/cjs/__generated__/list-item.props.js +30 -5
  50. package/lib/cjs/__generated__/list.props.js +30 -5
  51. package/lib/cjs/__generated__/paragraph.props.js +30 -5
  52. package/lib/cjs/__generated__/radio-button.props.js +31 -6
  53. package/lib/cjs/__generated__/radix-dialog.props.js +2140 -0
  54. package/lib/cjs/__generated__/radix-popover.props.js +483 -0
  55. package/lib/cjs/__generated__/radix-tooltip.props.js +493 -0
  56. package/lib/cjs/__generated__/rich-text-link.props.js +30 -5
  57. package/lib/cjs/__generated__/separator.props.js +30 -5
  58. package/lib/cjs/__generated__/span.props.js +30 -5
  59. package/lib/cjs/__generated__/subscript.props.js +30 -5
  60. package/lib/cjs/__generated__/superscript.props.js +30 -5
  61. package/lib/cjs/__generated__/text.props.js +30 -5
  62. package/lib/cjs/__generated__/textarea.props.js +30 -5
  63. package/lib/cjs/__generated__/vimeo-play-button.props.js +30 -5
  64. package/lib/cjs/__generated__/vimeo-preview-image.props.js +30 -5
  65. package/lib/cjs/__generated__/vimeo-spinner.props.js +30 -5
  66. package/lib/cjs/__generated__/vimeo.props.js +30 -5
  67. package/lib/cjs/body.ws.js +11 -1
  68. package/lib/cjs/components.js +16 -0
  69. package/lib/cjs/label.ws.js +1 -1
  70. package/lib/cjs/metas.js +16 -0
  71. package/lib/cjs/props.js +16 -0
  72. package/lib/cjs/radix-dialog.js +61 -0
  73. package/lib/cjs/radix-dialog.ws.js +300 -0
  74. package/lib/cjs/radix-popover.js +59 -0
  75. package/lib/cjs/radix-popover.ws.js +139 -0
  76. package/lib/cjs/radix-tooltip.js +51 -0
  77. package/lib/cjs/radix-tooltip.ws.js +140 -0
  78. package/lib/cjs/theme/radix-common-types.js +16 -0
  79. package/lib/cjs/theme/tailwind-classes.js +439 -0
  80. package/lib/cjs/theme/tailwind-colors.js +33 -0
  81. package/lib/cjs/theme/tailwind-theme.js +46 -0
  82. package/lib/cjs/vimeo-play-button.ws.js +1 -0
  83. package/lib/cjs/vimeo-preview-image.ws.js +1 -0
  84. package/lib/cjs/vimeo.ws.js +1 -0
  85. package/lib/components.js +24 -0
  86. package/lib/label.ws.js +2 -2
  87. package/lib/metas.js +32 -0
  88. package/lib/props.js +32 -0
  89. package/lib/radix-dialog.js +36 -0
  90. package/lib/radix-dialog.ws.js +279 -0
  91. package/lib/radix-popover.js +34 -0
  92. package/lib/radix-popover.ws.js +114 -0
  93. package/lib/radix-tooltip.js +26 -0
  94. package/lib/radix-tooltip.ws.js +115 -0
  95. package/lib/theme/radix-common-types.js +0 -0
  96. package/lib/theme/tailwind-classes.js +419 -0
  97. package/lib/theme/tailwind-colors.js +13 -0
  98. package/lib/theme/tailwind-theme.js +16 -0
  99. package/lib/types/__generated__/radix-dialog.props.d.ts +8 -0
  100. package/lib/types/__generated__/radix-popover.props.d.ts +4 -0
  101. package/lib/types/__generated__/radix-tooltip.props.d.ts +4 -0
  102. package/lib/types/components.d.ts +3 -0
  103. package/lib/types/metas.d.ts +3 -0
  104. package/lib/types/props.d.ts +3 -0
  105. package/lib/types/radix-dialog.d.ts +26 -0
  106. package/lib/types/radix-dialog.ws.d.ts +23 -0
  107. package/lib/types/radix-popover.d.ts +22 -0
  108. package/lib/types/radix-popover.ws.d.ts +15 -0
  109. package/lib/types/radix-tooltip.d.ts +22 -0
  110. package/lib/types/radix-tooltip.ws.d.ts +15 -0
  111. package/lib/types/theme/radix-common-types.d.ts +84 -0
  112. package/lib/types/theme/tailwind-classes.d.ts +69 -0
  113. package/lib/types/theme/tailwind-colors.d.ts +19 -0
  114. package/lib/types/theme/tailwind-theme.d.ts +72 -0
  115. package/lib/types/vimeo-preview-image.d.ts +6 -1
  116. package/lib/vimeo-play-button.ws.js +1 -0
  117. package/lib/vimeo-preview-image.js +1 -1
  118. package/lib/vimeo-preview-image.ws.js +2 -0
  119. package/lib/vimeo.ws.js +1 -0
  120. package/package.json +18 -13
  121. package/src/LICENSE +661 -21
  122. package/src/__generated__/blockquote.props.ts +34 -5
  123. package/src/__generated__/body.props.ts +34 -5
  124. package/src/__generated__/bold.props.ts +34 -5
  125. package/src/__generated__/box.props.ts +34 -5
  126. package/src/__generated__/button.props.ts +34 -5
  127. package/src/__generated__/checkbox.props.ts +35 -6
  128. package/src/__generated__/code-text.props.ts +34 -5
  129. package/src/__generated__/form.props.ts +34 -5
  130. package/src/__generated__/heading.props.ts +34 -5
  131. package/src/__generated__/image.props.ts +34 -5
  132. package/src/__generated__/input.props.ts +34 -5
  133. package/src/__generated__/italic.props.ts +34 -5
  134. package/src/__generated__/label.props.ts +34 -5
  135. package/src/__generated__/link.props.ts +34 -5
  136. package/src/__generated__/list-item.props.ts +34 -5
  137. package/src/__generated__/list.props.ts +34 -5
  138. package/src/__generated__/paragraph.props.ts +34 -5
  139. package/src/__generated__/radio-button.props.ts +35 -6
  140. package/src/__generated__/radix-dialog.props.ts +2363 -0
  141. package/src/__generated__/radix-popover.props.ts +510 -0
  142. package/src/__generated__/radix-tooltip.props.ts +521 -0
  143. package/src/__generated__/rich-text-link.props.ts +34 -5
  144. package/src/__generated__/separator.props.ts +34 -5
  145. package/src/__generated__/span.props.ts +34 -5
  146. package/src/__generated__/subscript.props.ts +34 -5
  147. package/src/__generated__/superscript.props.ts +34 -5
  148. package/src/__generated__/text.props.ts +34 -5
  149. package/src/__generated__/textarea.props.ts +34 -5
  150. package/src/__generated__/vimeo-play-button.props.ts +34 -5
  151. package/src/__generated__/vimeo-preview-image.props.ts +34 -5
  152. package/src/__generated__/vimeo-spinner.props.ts +34 -5
  153. package/src/__generated__/vimeo.props.ts +34 -5
  154. package/src/body.ws.tsx +11 -1
  155. package/src/components.ts +11 -0
  156. package/src/label.ws.tsx +2 -2
  157. package/src/metas.ts +21 -0
  158. package/src/props.ts +19 -0
  159. package/src/radix-dialog.tsx +91 -0
  160. package/src/radix-dialog.ws.tsx +291 -0
  161. package/src/radix-popover.tsx +89 -0
  162. package/src/radix-popover.ws.tsx +124 -0
  163. package/src/radix-tooltip.tsx +84 -0
  164. package/src/radix-tooltip.ws.tsx +125 -0
  165. package/src/theme/radix-common-types.ts +495 -0
  166. package/src/theme/tailwind-classes.ts +570 -0
  167. package/src/theme/tailwind-colors.ts +47 -0
  168. package/src/theme/tailwind-theme.ts +24 -0
@@ -0,0 +1,124 @@
1
+ import { RadioCheckedIcon } from "@webstudio-is/icons/svg";
2
+ import {
3
+ type WsComponentMeta,
4
+ type WsComponentPropsMeta,
5
+ } from "@webstudio-is/react-sdk";
6
+ import * as tc from "./theme/tailwind-classes";
7
+
8
+ import {
9
+ propsPopover,
10
+ propsPopoverContent,
11
+ propsPopoverTrigger,
12
+ } from "./__generated__/radix-popover.props";
13
+
14
+ // @todo add [data-state] to button and link
15
+ export const metaPopoverTrigger: WsComponentMeta = {
16
+ category: "hidden",
17
+ invalidAncestors: [],
18
+ type: "container",
19
+ label: "PopoverTrigger",
20
+ icon: RadioCheckedIcon,
21
+ stylable: false,
22
+ detachable: false,
23
+ };
24
+
25
+ export const metaPopoverContent: WsComponentMeta = {
26
+ category: "hidden",
27
+ invalidAncestors: [],
28
+ type: "container",
29
+ label: "PopoverContent",
30
+ icon: RadioCheckedIcon,
31
+ detachable: false,
32
+ };
33
+
34
+ /**
35
+ * Styles source without animations:
36
+ * https://github.com/shadcn-ui/ui/blob/main/apps/www/registry/default/ui/popover.tsx
37
+ *
38
+ * Attributions
39
+ * MIT License
40
+ * Copyright (c) 2023 shadcn
41
+ **/
42
+ export const metaPopover: WsComponentMeta = {
43
+ category: "radix",
44
+ invalidAncestors: [],
45
+ type: "container",
46
+ label: "Popover",
47
+ icon: RadioCheckedIcon,
48
+ order: 15,
49
+ stylable: false,
50
+ template: [
51
+ {
52
+ type: "instance",
53
+ component: "Popover",
54
+ label: "Popover",
55
+ props: [
56
+ {
57
+ name: "isOpen",
58
+ // We don't have support for boolean or undefined, instead of binding on open we bind on a string
59
+ type: "string",
60
+ value: "initial",
61
+ dataSourceRef: {
62
+ type: "variable",
63
+ name: "isOpen",
64
+ },
65
+ },
66
+ ],
67
+ children: [
68
+ {
69
+ type: "instance",
70
+ component: "PopoverTrigger",
71
+ props: [],
72
+ children: [
73
+ {
74
+ type: "instance",
75
+ component: "Button",
76
+ children: [{ type: "text", value: "Button" }],
77
+ },
78
+ ],
79
+ },
80
+ {
81
+ type: "instance",
82
+ component: "PopoverContent",
83
+ label: "Popover Content",
84
+ props: [],
85
+ /**
86
+ * z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none
87
+ **/
88
+ styles: [
89
+ tc.z(50),
90
+ tc.w(72),
91
+ tc.rounded("md"),
92
+ tc.border(),
93
+ tc.bg("popover"),
94
+ tc.p(4),
95
+ tc.text("popoverForeground"),
96
+ tc.shadow("md"),
97
+ tc.outline("none"),
98
+ ].flat(),
99
+ children: [
100
+ {
101
+ type: "instance",
102
+ component: "Text",
103
+ children: [{ type: "text", value: "The text you can edit" }],
104
+ },
105
+ ],
106
+ },
107
+ ],
108
+ },
109
+ ],
110
+ };
111
+
112
+ export const propsMetaPopover: WsComponentPropsMeta = {
113
+ props: propsPopover,
114
+ initialProps: ["isOpen", "modal"],
115
+ };
116
+
117
+ export const propsMetaPopoverTrigger: WsComponentPropsMeta = {
118
+ props: propsPopoverTrigger,
119
+ };
120
+
121
+ export const propsMetaPopoverContent: WsComponentPropsMeta = {
122
+ props: propsPopoverContent,
123
+ initialProps: ["side", "sideOffset", "align", "alignOffset"],
124
+ };
@@ -0,0 +1,84 @@
1
+ /* eslint-disable react/display-name */
2
+ // We can't use .displayName until this is merged https://github.com/styleguidist/react-docgen-typescript/pull/449
3
+
4
+ import * as TooltipPrimitive from "@radix-ui/react-tooltip";
5
+ import {
6
+ splitPropsWithWebstudioAttributes,
7
+ type WebstudioAttributes,
8
+ } from "@webstudio-is/react-sdk";
9
+
10
+ import {
11
+ forwardRef,
12
+ type ElementRef,
13
+ type ComponentPropsWithoutRef,
14
+ Children,
15
+ type ReactNode,
16
+ } from "react";
17
+
18
+ /**
19
+ * We don't have support for boolean or undefined nor in UI not at Data variables,
20
+ * instead of binding on "open" prop we bind variable on a isOpen prop to be able to show Tooltip in the builder
21
+ **/
22
+ type BuilderTooltipProps = {
23
+ isOpen: "initial" | "open" | "closed";
24
+ };
25
+
26
+ /**
27
+ * Tooltip and TooltipTrigger are HTML-less components.
28
+ * To make them work in our system, we wrap their attributes with a div that has a display: contents property.
29
+ *
30
+ * These divs function like fragments, with all web studio-related attributes attached to them.
31
+ */
32
+ const DisplayContentsStyle = { display: "contents" };
33
+
34
+ export const Tooltip = forwardRef<
35
+ ElementRef<"div">,
36
+ WebstudioAttributes &
37
+ ComponentPropsWithoutRef<typeof TooltipPrimitive.Root> &
38
+ BuilderTooltipProps
39
+ >(({ open: openProp, isOpen, ...props }, ref) => {
40
+ const [webstudioAttributes, restProps] =
41
+ splitPropsWithWebstudioAttributes(props);
42
+
43
+ const open =
44
+ openProp ??
45
+ (isOpen === "open" ? true : isOpen === "closed" ? false : undefined);
46
+
47
+ return (
48
+ <div ref={ref} style={DisplayContentsStyle} {...webstudioAttributes}>
49
+ <TooltipPrimitive.Root open={open} {...restProps} />
50
+ </div>
51
+ );
52
+ });
53
+
54
+ /**
55
+ * We're not exposing the 'asChild' property for the Trigger.
56
+ * Instead, we're enforcing 'asChild=true' for the Trigger and making it style-less.
57
+ * This avoids situations where the Trigger inadvertently passes all styles to its child,
58
+ * which would prevent us from displaying styles properly in the builder.
59
+ */
60
+ export const TooltipTrigger = forwardRef<
61
+ ElementRef<"div">,
62
+ WebstudioAttributes & { children: ReactNode }
63
+ >(({ children, ...props }, ref) => {
64
+ const firstChild = Children.toArray(children)[0];
65
+ const [webstudioAttributes, restProps] =
66
+ splitPropsWithWebstudioAttributes(props);
67
+
68
+ return (
69
+ <div ref={ref} style={DisplayContentsStyle} {...webstudioAttributes}>
70
+ <TooltipPrimitive.Trigger asChild={true} {...restProps}>
71
+ {firstChild ?? <button>Add button or link</button>}
72
+ </TooltipPrimitive.Trigger>
73
+ </div>
74
+ );
75
+ });
76
+
77
+ export const TooltipContent = forwardRef<
78
+ ElementRef<typeof TooltipPrimitive.Content>,
79
+ ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>
80
+ >(({ sideOffset = 4, ...props }, ref) => (
81
+ <TooltipPrimitive.Portal>
82
+ <TooltipPrimitive.Content ref={ref} sideOffset={sideOffset} {...props} />
83
+ </TooltipPrimitive.Portal>
84
+ ));
@@ -0,0 +1,125 @@
1
+ import { RadioCheckedIcon } from "@webstudio-is/icons/svg";
2
+ import {
3
+ type WsComponentMeta,
4
+ type WsComponentPropsMeta,
5
+ } from "@webstudio-is/react-sdk";
6
+ import * as tc from "./theme/tailwind-classes";
7
+
8
+ import {
9
+ propsTooltip,
10
+ propsTooltipContent,
11
+ propsTooltipTrigger,
12
+ } from "./__generated__/radix-tooltip.props";
13
+
14
+ // @todo add [data-state] to button and link
15
+ export const metaTooltipTrigger: WsComponentMeta = {
16
+ category: "hidden",
17
+ detachable: false,
18
+ invalidAncestors: [],
19
+ type: "container",
20
+ label: "TooltipTrigger",
21
+ icon: RadioCheckedIcon,
22
+ stylable: false,
23
+ };
24
+
25
+ export const metaTooltipContent: WsComponentMeta = {
26
+ category: "hidden",
27
+ detachable: false,
28
+ invalidAncestors: [],
29
+ type: "container",
30
+ label: "TooltipContent",
31
+ icon: RadioCheckedIcon,
32
+ };
33
+
34
+ /**
35
+ * Styles source without animations:
36
+ * https://github.com/shadcn-ui/ui/blob/main/apps/www/registry/default/ui/tooltip.tsx
37
+ *
38
+ * Attributions
39
+ * MIT License
40
+ * Copyright (c) 2023 shadcn
41
+ **/
42
+ export const metaTooltip: WsComponentMeta = {
43
+ category: "radix",
44
+ invalidAncestors: [],
45
+ type: "container",
46
+ label: "Tooltip",
47
+ icon: RadioCheckedIcon,
48
+ order: 15,
49
+ stylable: false,
50
+ template: [
51
+ {
52
+ type: "instance",
53
+ component: "Tooltip",
54
+ label: "Tooltip",
55
+ props: [
56
+ {
57
+ name: "isOpen",
58
+ // We don't have support for boolean or undefined, instead of binding on open we bind on a string
59
+ type: "string",
60
+ value: "initial",
61
+ dataSourceRef: {
62
+ type: "variable",
63
+ name: "isOpen",
64
+ },
65
+ },
66
+ ],
67
+ children: [
68
+ {
69
+ type: "instance",
70
+ component: "TooltipTrigger",
71
+ props: [],
72
+ children: [
73
+ {
74
+ type: "instance",
75
+ component: "Button",
76
+ children: [{ type: "text", value: "Button" }],
77
+ },
78
+ ],
79
+ },
80
+ {
81
+ type: "instance",
82
+ component: "TooltipContent",
83
+ label: "Tooltip Content",
84
+ props: [],
85
+ /**
86
+ * z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md
87
+ **/
88
+ styles: [
89
+ tc.z(50),
90
+ tc.overflow("hidden"),
91
+ tc.rounded("md"),
92
+ tc.border(),
93
+ tc.bg("popover"),
94
+ tc.px(3),
95
+ tc.py(1.5),
96
+ tc.text("sm"),
97
+ tc.text("popoverForeground"),
98
+ tc.shadow("md"),
99
+ ].flat(),
100
+ children: [
101
+ {
102
+ type: "instance",
103
+ component: "Text",
104
+ children: [{ type: "text", value: "The text you can edit" }],
105
+ },
106
+ ],
107
+ },
108
+ ],
109
+ },
110
+ ],
111
+ };
112
+
113
+ export const propsMetaTooltip: WsComponentPropsMeta = {
114
+ props: propsTooltip,
115
+ initialProps: ["isOpen", "delayDuration", "disableHoverableContent"],
116
+ };
117
+
118
+ export const propsMetaTooltipTrigger: WsComponentPropsMeta = {
119
+ props: propsTooltipTrigger,
120
+ };
121
+
122
+ export const propsMetaTooltipContent: WsComponentPropsMeta = {
123
+ props: propsTooltipContent,
124
+ initialProps: ["side", "sideOffset", "align", "alignOffset"],
125
+ };