@webiny/lexical-editor-actions 6.4.5-beta.0 → 6.6.0-alpha.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.
@@ -1,110 +1,16 @@
1
1
  import react, { useCallback, useEffect, useMemo, useState } from "react";
2
- import styled from "@emotion/styled";
3
- import { css } from "@emotion/css";
4
2
  import { ChromePicker } from "react-color";
5
3
  import { Tooltip } from "@webiny/admin-ui";
6
4
  import { ReactComponent } from "./round-color_lens-24px.js";
7
5
  import { useRichTextEditor } from "@webiny/lexical-editor";
8
- const ColorPickerStyle = styled("div")({
9
- position: "relative",
10
- display: "flex",
11
- flexWrap: "wrap",
12
- justifyContent: "flex-start",
13
- width: 240,
14
- padding: 15,
15
- backgroundColor: "#fff"
16
- });
17
- const ColorBox = styled("div")({
18
- cursor: "pointer",
19
- width: 40,
20
- height: 40,
21
- borderRadius: "50%",
22
- margin: 5,
23
- border: "1px solid var(--mdc-theme-on-background)",
24
- padding: 3,
25
- boxSizing: "content-box"
26
- });
27
- const Color = styled("button")({
28
- cursor: "pointer",
29
- width: 40,
30
- height: 40,
31
- transition: "transform 0.1s, border 0.2s",
32
- borderColor: "transparent",
33
- display: "flex",
34
- alignItems: "center",
35
- borderRadius: "50%",
36
- "&::after": {
37
- transition: "opacity 0.5s cubic-bezier(0.165, 0.84, 0.44, 1)",
38
- content: '""',
39
- position: "absolute",
40
- top: 0,
41
- left: 0,
42
- width: "100%",
43
- height: "100%",
44
- zIndex: -1,
45
- opacity: 0
46
- },
47
- "&:hover": {
48
- transform: "scale(1.1)",
49
- boxShadow: "0 0.25rem 0.125rem 0 rgba(0,0,0,0.05)",
50
- "&::after": {
51
- opacity: 1
52
- }
53
- }
54
- });
55
- const iconPaletteStyle = css({
56
- height: 20,
57
- width: "100%",
58
- marginTop: 1,
59
- color: "var(--mdc-theme-secondary)"
60
- });
61
- const COLORS = {
62
- lightGray: "hsla(0, 0%, 97%, 1)",
63
- gray: "hsla(300, 2%, 92%, 1)",
64
- darkGray: "hsla(0, 0%, 70%, 1)",
65
- darkestGray: "hsla(0, 0%, 20%, 1)",
66
- black: "hsla(208, 100%, 5%, 1)"
67
- };
68
- const styles = {
69
- selectedColor: css({
70
- boxShadow: "inset 0px 0px 0px 10px var(--mdc-theme-secondary)",
71
- button: {
72
- border: "5px solid var(--mdc-theme-surface)"
73
- }
74
- }),
75
- button: css({
76
- cursor: "pointer",
77
- height: 30,
78
- boxSizing: "border-box",
79
- "&:hover:not(:disabled)": {
80
- backgroundColor: COLORS.gray
81
- },
82
- "&:focus:not(:disabled)": {
83
- outline: "none"
84
- },
85
- "&:disabled": {
86
- opacity: 0.5,
87
- cursor: "not-allowed"
88
- },
89
- "& svg": {
90
- width: 16,
91
- height: 16
92
- }
93
- }),
94
- color: css({
95
- width: "40px",
96
- height: "100%"
97
- })
98
- };
99
- const chromePickerStyle = css({
100
- boxShadow: "none !important",
101
- marginTop: "15px",
102
- marginLeft: "-15px",
103
- width: "240px !important"
104
- });
6
+ const colorPickerClass = "relative flex flex-wrap justify-start w-[240px] p-[15px] bg-white";
7
+ const colorBoxClass = "cursor-pointer w-10 h-10 rounded-full m-[5px] border border-solid border-[color:var(--mdc-theme-on-background)] p-[3px] box-content";
8
+ const selectedColorClass = "shadow-[inset_0px_0px_0px_10px_var(--mdc-theme-secondary)] [&_button]:border-[5px] [&_button]:border-solid [&_button]:border-[color:var(--mdc-theme-surface)]";
9
+ const colorButtonClass = "cursor-pointer w-10 h-10 flex items-center rounded-full border-transparent [transition:transform_0.1s,_border_0.2s] after:content-[''] after:absolute after:top-0 after:left-0 after:w-full after:h-full after:-z-10 after:opacity-0 after:[transition:opacity_0.5s_cubic-bezier(0.165,0.84,0.44,1)] hover:scale-110 hover:shadow-[0_0.25rem_0.125rem_0_rgba(0,0,0,0.05)] hover:after:opacity-100";
10
+ const iconPaletteClass = "h-5 w-full mt-px text-[color:var(--mdc-theme-secondary)]";
11
+ const chromePickerClass = "w-[270px]! m-[15px_-15px_-15px_-15px]";
105
12
  const showPickerStyle = {
106
- display: "block",
107
- width: "100%"
13
+ display: "block"
108
14
  };
109
15
  const hidePickerStyle = {
110
16
  display: "none"
@@ -148,13 +54,16 @@ const LexicalColorPicker = ({ value, onChange, onChangeComplete, allowCustomColo
148
54
  themeColors,
149
55
  value
150
56
  ]);
151
- return /*#__PURE__*/ react.createElement(ColorPickerStyle, null, themeColors.map((color)=>/*#__PURE__*/ react.createElement(ColorBox, {
57
+ return /*#__PURE__*/ react.createElement("div", {
58
+ className: colorPickerClass
59
+ }, themeColors.map((color)=>/*#__PURE__*/ react.createElement("div", {
152
60
  key: color.id,
153
- className: color.id === value ? styles.selectedColor : ""
61
+ className: color.id === value ? `${colorBoxClass} ${selectedColorClass}` : colorBoxClass
154
62
  }, /*#__PURE__*/ react.createElement(Tooltip, {
155
63
  content: /*#__PURE__*/ react.createElement("span", null, color.label),
156
64
  side: "bottom",
157
- trigger: /*#__PURE__*/ react.createElement(Color, {
65
+ trigger: /*#__PURE__*/ react.createElement("button", {
66
+ className: colorButtonClass,
158
67
  style: {
159
68
  backgroundColor: color.value
160
69
  },
@@ -162,23 +71,24 @@ const LexicalColorPicker = ({ value, onChange, onChangeComplete, allowCustomColo
162
71
  onChangeComplete(color.value, color.id);
163
72
  }
164
73
  })
165
- }))), allowCustomColor ? /*#__PURE__*/ react.createElement(ColorBox, {
166
- className: value && !isThemeColor ? styles.selectedColor : ""
74
+ }))), allowCustomColor ? /*#__PURE__*/ react.createElement("div", {
75
+ className: value && !isThemeColor ? `${colorBoxClass} ${selectedColorClass}` : colorBoxClass
167
76
  }, /*#__PURE__*/ react.createElement(Tooltip, {
168
77
  content: /*#__PURE__*/ react.createElement("span", null, "Color picker"),
169
78
  side: "bottom",
170
- trigger: /*#__PURE__*/ react.createElement(Color, {
79
+ trigger: /*#__PURE__*/ react.createElement("button", {
80
+ className: colorButtonClass,
171
81
  style: {
172
82
  backgroundColor: isThemeColor ? "#fff" : value
173
83
  },
174
84
  onClick: togglePicker
175
85
  }, /*#__PURE__*/ react.createElement(ReactComponent, {
176
- className: iconPaletteStyle
86
+ className: iconPaletteClass
177
87
  }))
178
88
  })) : null, /*#__PURE__*/ react.createElement("div", {
179
89
  style: showPicker ? showPickerStyle : hidePickerStyle
180
90
  }, /*#__PURE__*/ react.createElement(ChromePicker, {
181
- className: chromePickerStyle,
91
+ className: chromePickerClass,
182
92
  color: actualSelectedColor,
183
93
  disableAlpha: true,
184
94
  onChange: onColorChange,
@@ -1 +1 @@
1
- {"version":3,"file":"components/LexicalColorPicker/LexicalColorPicker.js","sources":["../../../src/components/LexicalColorPicker/LexicalColorPicker.tsx"],"sourcesContent":["import type { SyntheticEvent } from \"react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport styled from \"@emotion/styled\";\nimport { css } from \"@emotion/css\";\nimport type { ColorResult, RGBColor } from \"react-color\";\nimport { ChromePicker } from \"react-color\";\nimport { Tooltip } from \"@webiny/admin-ui\";\n\n// Icons\nimport { ReactComponent as IconPalette } from \"./round-color_lens-24px.svg\";\nimport { useRichTextEditor } from \"@webiny/lexical-editor\";\n\nconst ColorPickerStyle = styled(\"div\")({\n position: \"relative\",\n display: \"flex\",\n flexWrap: \"wrap\",\n justifyContent: \"flex-start\",\n width: 240,\n padding: 15,\n backgroundColor: \"#fff\"\n});\n\nconst ColorBox = styled(\"div\")({\n cursor: \"pointer\",\n width: 40,\n height: 40,\n borderRadius: \"50%\",\n margin: 5,\n border: \"1px solid var(--mdc-theme-on-background)\",\n padding: 3,\n boxSizing: \"content-box\"\n});\n\nconst Color = styled(\"button\")({\n cursor: \"pointer\",\n width: 40,\n height: 40,\n transition: \"transform 0.1s, border 0.2s\",\n borderColor: \"transparent\",\n display: \"flex\",\n alignItems: \"center\",\n borderRadius: \"50%\",\n \"&::after\": {\n transition: \"opacity 0.5s cubic-bezier(0.165, 0.84, 0.44, 1)\",\n content: '\"\"',\n position: \"absolute\",\n top: 0,\n left: 0,\n width: \"100%\",\n height: \"100%\",\n zIndex: -1,\n opacity: 0\n },\n \"&:hover\": {\n transform: \"scale(1.1)\",\n boxShadow: \"0 0.25rem 0.125rem 0 rgba(0,0,0,0.05)\",\n \"&::after\": {\n opacity: 1\n }\n }\n});\n\nconst iconPaletteStyle = css({\n height: 20,\n width: \"100%\",\n marginTop: 1,\n color: \"var(--mdc-theme-secondary)\"\n});\n\nconst COLORS = {\n lightGray: \"hsla(0, 0%, 97%, 1)\",\n gray: \"hsla(300, 2%, 92%, 1)\",\n darkGray: \"hsla(0, 0%, 70%, 1)\",\n darkestGray: \"hsla(0, 0%, 20%, 1)\",\n black: \"hsla(208, 100%, 5%, 1)\"\n};\n\nconst styles = {\n selectedColor: css({\n boxShadow: \"inset 0px 0px 0px 10px var(--mdc-theme-secondary)\",\n button: {\n border: \"5px solid var(--mdc-theme-surface)\"\n }\n }),\n button: css({\n cursor: \"pointer\",\n height: 30,\n boxSizing: \"border-box\",\n \"&:hover:not(:disabled)\": { backgroundColor: COLORS.gray },\n \"&:focus:not(:disabled)\": {\n outline: \"none\"\n },\n \"&:disabled\": {\n opacity: 0.5,\n cursor: \"not-allowed\"\n },\n \"& svg\": {\n width: 16,\n height: 16\n }\n }),\n color: css({\n width: \"40px\",\n height: \"100%\"\n })\n};\n\nconst chromePickerStyle = css({\n boxShadow: \"none !important\",\n marginTop: \"15px\",\n marginLeft: \"-15px\",\n width: \"240px !important\"\n});\n\ninterface LexicalColorPickerProps {\n value: string;\n onChange?: (color: string) => void;\n onChangeComplete: (color: string, name?: string) => void;\n handlerClassName?: string;\n allowCustomColor?: boolean;\n}\n\nconst showPickerStyle = { display: \"block\", width: \"100%\" };\nconst hidePickerStyle = { display: \"none\" };\n\nexport const LexicalColorPicker = ({\n value,\n onChange,\n onChangeComplete,\n allowCustomColor\n}: LexicalColorPickerProps) => {\n const [showPicker, setShowPicker] = useState(false);\n // Either a custom color or a color coming from the theme object.\n const [actualSelectedColor, setActualSelectedColor] = useState(value || \"#fff\");\n const [isThemeColor, setIsThemeColor] = useState(false);\n\n useEffect(() => {\n if (value) {\n setActualSelectedColor(value);\n }\n }, [value]);\n\n const getColorValue = useCallback((rgb: RGBColor, alpha?: number) => {\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha ?? rgb.a})`;\n }, []);\n\n const onColorChange = useCallback(\n (color: Pick<ColorResult, \"rgb\">, event: React.SyntheticEvent) => {\n event.preventDefault();\n // controls of the picker are updated as user moves the mouse\n const customColor = getColorValue(color.rgb, color.rgb.a === 0 ? 1 : color.rgb.a);\n setActualSelectedColor(customColor);\n if (typeof onChange === \"function\") {\n onChange(customColor);\n }\n },\n [onChange]\n );\n\n const onColorChangeComplete = useCallback(\n ({ rgb }: Pick<ColorResult, \"rgb\">, event: React.SyntheticEvent) => {\n event.preventDefault();\n const color = getColorValue(rgb, rgb.a === 0 ? 1 : rgb.a);\n setActualSelectedColor(color);\n onChangeComplete(color);\n },\n [onChangeComplete]\n );\n\n const togglePicker = useCallback((e: SyntheticEvent) => {\n e.stopPropagation();\n setShowPicker(state => !state);\n }, []);\n\n const { theme } = useRichTextEditor();\n\n const themeColors = useMemo(() => theme?.colors ?? [], []);\n\n useEffect(() => {\n const isThemeColor = themeColors.some(color => color.id === value);\n setIsThemeColor(isThemeColor);\n }, [themeColors, value]);\n\n return (\n <ColorPickerStyle>\n {themeColors.map(color => {\n return (\n <ColorBox\n key={color.id}\n className={color.id === value ? styles.selectedColor : \"\"}\n >\n <Tooltip\n content={<span>{color.label}</span>}\n side=\"bottom\"\n trigger={\n <Color\n style={{ backgroundColor: color.value }}\n onClick={() => {\n onChangeComplete(color.value, color.id);\n }}\n />\n }\n />\n </ColorBox>\n );\n })}\n\n {allowCustomColor ? (\n <ColorBox className={value && !isThemeColor ? styles.selectedColor : \"\"}>\n <Tooltip\n content={<span>Color picker</span>}\n side=\"bottom\"\n trigger={\n <Color\n style={{ backgroundColor: isThemeColor ? \"#fff\" : value }}\n onClick={togglePicker}\n >\n <IconPalette className={iconPaletteStyle} />\n </Color>\n }\n />\n </ColorBox>\n ) : null}\n\n <div style={showPicker ? showPickerStyle : hidePickerStyle}>\n <ChromePicker\n className={chromePickerStyle}\n color={actualSelectedColor}\n disableAlpha={true}\n onChange={onColorChange}\n onChangeComplete={onColorChangeComplete}\n />\n </div>\n </ColorPickerStyle>\n );\n};\n"],"names":["ColorPickerStyle","styled","ColorBox","Color","iconPaletteStyle","css","COLORS","styles","chromePickerStyle","showPickerStyle","hidePickerStyle","LexicalColorPicker","value","onChange","onChangeComplete","allowCustomColor","showPicker","setShowPicker","useState","actualSelectedColor","setActualSelectedColor","isThemeColor","setIsThemeColor","useEffect","getColorValue","useCallback","rgb","alpha","onColorChange","color","event","customColor","onColorChangeComplete","togglePicker","e","state","theme","useRichTextEditor","themeColors","useMemo","Tooltip","IconPalette","ChromePicker"],"mappings":"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"}
1
+ {"version":3,"file":"components/LexicalColorPicker/LexicalColorPicker.js","sources":["../../../src/components/LexicalColorPicker/LexicalColorPicker.tsx"],"sourcesContent":["import type { SyntheticEvent } from \"react\";\nimport React, { useCallback, useEffect, useMemo, useState } from \"react\";\nimport type { ColorResult, RGBColor } from \"react-color\";\nimport { ChromePicker } from \"react-color\";\nimport { Tooltip } from \"@webiny/admin-ui\";\n\n// Icons\nimport { ReactComponent as IconPalette } from \"./round-color_lens-24px.svg\";\nimport { useRichTextEditor } from \"@webiny/lexical-editor\";\n\nconst colorPickerClass = \"relative flex flex-wrap justify-start w-[240px] p-[15px] bg-white\";\n\nconst colorBoxClass =\n \"cursor-pointer w-10 h-10 rounded-full m-[5px] border border-solid border-[color:var(--mdc-theme-on-background)] p-[3px] box-content\";\n\nconst selectedColorClass =\n \"shadow-[inset_0px_0px_0px_10px_var(--mdc-theme-secondary)] [&_button]:border-[5px] [&_button]:border-solid [&_button]:border-[color:var(--mdc-theme-surface)]\";\n\nconst colorButtonClass =\n \"cursor-pointer w-10 h-10 flex items-center rounded-full border-transparent [transition:transform_0.1s,_border_0.2s] \" +\n \"after:content-[''] after:absolute after:top-0 after:left-0 after:w-full after:h-full after:-z-10 after:opacity-0 after:[transition:opacity_0.5s_cubic-bezier(0.165,0.84,0.44,1)] \" +\n \"hover:scale-110 hover:shadow-[0_0.25rem_0.125rem_0_rgba(0,0,0,0.05)] hover:after:opacity-100\";\n\nconst iconPaletteClass = \"h-5 w-full mt-px text-[color:var(--mdc-theme-secondary)]\";\n\nconst chromePickerClass = \"w-[270px]! m-[15px_-15px_-15px_-15px]\";\n\ninterface LexicalColorPickerProps {\n value: string;\n onChange?: (color: string) => void;\n onChangeComplete: (color: string, name?: string) => void;\n handlerClassName?: string;\n allowCustomColor?: boolean;\n}\n\nconst showPickerStyle = { display: \"block\" };\nconst hidePickerStyle = { display: \"none\" };\n\nexport const LexicalColorPicker = ({\n value,\n onChange,\n onChangeComplete,\n allowCustomColor\n}: LexicalColorPickerProps) => {\n const [showPicker, setShowPicker] = useState(false);\n // Either a custom color or a color coming from the theme object.\n const [actualSelectedColor, setActualSelectedColor] = useState(value || \"#fff\");\n const [isThemeColor, setIsThemeColor] = useState(false);\n\n useEffect(() => {\n if (value) {\n setActualSelectedColor(value);\n }\n }, [value]);\n\n const getColorValue = useCallback((rgb: RGBColor, alpha?: number) => {\n return `rgba(${rgb.r}, ${rgb.g}, ${rgb.b}, ${alpha ?? rgb.a})`;\n }, []);\n\n const onColorChange = useCallback(\n (color: Pick<ColorResult, \"rgb\">, event: React.SyntheticEvent) => {\n event.preventDefault();\n // controls of the picker are updated as user moves the mouse\n const customColor = getColorValue(color.rgb, color.rgb.a === 0 ? 1 : color.rgb.a);\n setActualSelectedColor(customColor);\n if (typeof onChange === \"function\") {\n onChange(customColor);\n }\n },\n [onChange]\n );\n\n const onColorChangeComplete = useCallback(\n ({ rgb }: Pick<ColorResult, \"rgb\">, event: React.SyntheticEvent) => {\n event.preventDefault();\n const color = getColorValue(rgb, rgb.a === 0 ? 1 : rgb.a);\n setActualSelectedColor(color);\n onChangeComplete(color);\n },\n [onChangeComplete]\n );\n\n const togglePicker = useCallback((e: SyntheticEvent) => {\n e.stopPropagation();\n setShowPicker(state => !state);\n }, []);\n\n const { theme } = useRichTextEditor();\n\n const themeColors = useMemo(() => theme?.colors ?? [], []);\n\n useEffect(() => {\n const isThemeColor = themeColors.some(color => color.id === value);\n setIsThemeColor(isThemeColor);\n }, [themeColors, value]);\n\n return (\n <div className={colorPickerClass}>\n {themeColors.map(color => {\n return (\n <div\n key={color.id}\n className={\n color.id === value\n ? `${colorBoxClass} ${selectedColorClass}`\n : colorBoxClass\n }\n >\n <Tooltip\n content={<span>{color.label}</span>}\n side=\"bottom\"\n trigger={\n <button\n className={colorButtonClass}\n style={{ backgroundColor: color.value }}\n onClick={() => {\n onChangeComplete(color.value, color.id);\n }}\n />\n }\n />\n </div>\n );\n })}\n\n {allowCustomColor ? (\n <div\n className={\n value && !isThemeColor\n ? `${colorBoxClass} ${selectedColorClass}`\n : colorBoxClass\n }\n >\n <Tooltip\n content={<span>Color picker</span>}\n side=\"bottom\"\n trigger={\n <button\n className={colorButtonClass}\n style={{ backgroundColor: isThemeColor ? \"#fff\" : value }}\n onClick={togglePicker}\n >\n <IconPalette className={iconPaletteClass} />\n </button>\n }\n />\n </div>\n ) : null}\n\n <div style={showPicker ? showPickerStyle : hidePickerStyle}>\n <ChromePicker\n className={chromePickerClass}\n color={actualSelectedColor}\n disableAlpha={true}\n onChange={onColorChange}\n onChangeComplete={onColorChangeComplete}\n />\n </div>\n </div>\n );\n};\n"],"names":["colorPickerClass","colorBoxClass","selectedColorClass","colorButtonClass","iconPaletteClass","chromePickerClass","showPickerStyle","hidePickerStyle","LexicalColorPicker","value","onChange","onChangeComplete","allowCustomColor","showPicker","setShowPicker","useState","actualSelectedColor","setActualSelectedColor","isThemeColor","setIsThemeColor","useEffect","getColorValue","useCallback","rgb","alpha","onColorChange","color","event","customColor","onColorChangeComplete","togglePicker","e","state","theme","useRichTextEditor","themeColors","useMemo","Tooltip","IconPalette","ChromePicker"],"mappings":"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"}
@@ -1,25 +1,26 @@
1
1
  import react from "react";
2
- import { DropDown, useFontColorPicker, useRichTextEditor } from "@webiny/lexical-editor";
2
+ import { DropDown, useFontColorPicker } from "@webiny/lexical-editor";
3
3
  import { LexicalColorPicker } from "./LexicalColorPicker/LexicalColorPicker.js";
4
- import { css } from "@emotion/css";
5
- const LexicalColorPickerDropdown = ({ allowCustomColor })=>{
4
+ const LexicalColorPickerDropdown = ({ allowCustomColor = false })=>{
6
5
  const { value, applyColor } = useFontColorPicker();
7
- const { theme } = useRichTextEditor();
8
- const buttonColorSelection = css({
9
- borderBottom: "3px solid " + value
10
- });
11
- return /*#__PURE__*/ react.createElement(DropDown, {
6
+ const wrapperStyle = {
7
+ display: "contents",
8
+ "--wby-font-color": value
9
+ };
10
+ return /*#__PURE__*/ react.createElement("span", {
11
+ style: wrapperStyle
12
+ }, /*#__PURE__*/ react.createElement(DropDown, {
12
13
  buttonClassName: "toolbar-item color-picker",
13
14
  buttonAriaLabel: "Formatting options for text color",
14
- buttonIconClassName: "icon font-color " + buttonColorSelection,
15
+ buttonIconClassName: "icon font-color [border-bottom:3px_solid_var(--wby-font-color)]",
15
16
  stopCloseOnClickSelf: true,
16
17
  disabled: false,
17
18
  showScroll: false
18
19
  }, /*#__PURE__*/ react.createElement(LexicalColorPicker, {
19
20
  value: value,
20
21
  onChangeComplete: applyColor,
21
- allowCustomColor: allowCustomColor ?? theme.allowCustomColors
22
- }));
22
+ allowCustomColor: allowCustomColor
23
+ })));
23
24
  };
24
25
  export { LexicalColorPickerDropdown };
25
26
 
@@ -1 +1 @@
1
- {"version":3,"file":"components/LexicalColorPickerDropdown.js","sources":["../../src/components/LexicalColorPickerDropdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { useFontColorPicker, useRichTextEditor, DropDown } from \"@webiny/lexical-editor\";\nimport { LexicalColorPicker } from \"~/components/LexicalColorPicker/LexicalColorPicker.js\";\nimport { css } from \"@emotion/css\";\n\nexport interface LexicalColorPickerDropdownProps {\n allowCustomColor?: boolean;\n}\n\nexport const LexicalColorPickerDropdown = ({\n allowCustomColor\n}: LexicalColorPickerDropdownProps) => {\n const { value, applyColor } = useFontColorPicker();\n const { theme } = useRichTextEditor();\n\n const buttonColorSelection = css({\n borderBottom: \"3px solid \" + value\n });\n\n return (\n <DropDown\n buttonClassName=\"toolbar-item color-picker\"\n buttonAriaLabel={\"Formatting options for text color\"}\n buttonIconClassName={\"icon font-color \" + buttonColorSelection}\n stopCloseOnClickSelf={true}\n disabled={false}\n showScroll={false}\n >\n <LexicalColorPicker\n value={value}\n onChangeComplete={applyColor}\n allowCustomColor={allowCustomColor ?? theme.allowCustomColors}\n />\n </DropDown>\n );\n};\n"],"names":["LexicalColorPickerDropdown","allowCustomColor","value","applyColor","useFontColorPicker","theme","useRichTextEditor","buttonColorSelection","css","DropDown","LexicalColorPicker"],"mappings":";;;;AASO,MAAMA,6BAA6B,CAAC,EACvCC,gBAAgB,EACc;IAC9B,MAAM,EAAEC,KAAK,EAAEC,UAAU,EAAE,GAAGC;IAC9B,MAAM,EAAEC,KAAK,EAAE,GAAGC;IAElB,MAAMC,uBAAuBC,IAAI;QAC7B,cAAc,eAAeN;IACjC;IAEA,OAAO,WAAP,GACI,oBAACO,UAAQA;QACL,iBAAgB;QAChB,iBAAiB;QACjB,qBAAqB,qBAAqBF;QAC1C,sBAAsB;QACtB,UAAU;QACV,YAAY;qBAEZ,oBAACG,oBAAkBA;QACf,OAAOR;QACP,kBAAkBC;QAClB,kBAAkBF,oBAAoBI,MAAM,iBAAiB;;AAI7E"}
1
+ {"version":3,"file":"components/LexicalColorPickerDropdown.js","sources":["../../src/components/LexicalColorPickerDropdown.tsx"],"sourcesContent":["import React from \"react\";\nimport { useFontColorPicker, DropDown } from \"@webiny/lexical-editor\";\nimport { LexicalColorPicker } from \"~/components/LexicalColorPicker/LexicalColorPicker.js\";\n\nexport interface LexicalColorPickerDropdownProps {\n allowCustomColor?: boolean;\n}\n\nexport const LexicalColorPickerDropdown = ({\n allowCustomColor = false\n}: LexicalColorPickerDropdownProps) => {\n const { value, applyColor } = useFontColorPicker();\n\n // The current color is dynamic, so it's passed as a CSS custom property on a\n // `display: contents` wrapper (no layout box) and read by the icon's static class.\n const wrapperStyle = { display: \"contents\", \"--wby-font-color\": value } as React.CSSProperties;\n\n return (\n <span style={wrapperStyle}>\n <DropDown\n buttonClassName=\"toolbar-item color-picker\"\n buttonAriaLabel={\"Formatting options for text color\"}\n buttonIconClassName={\n \"icon font-color [border-bottom:3px_solid_var(--wby-font-color)]\"\n }\n stopCloseOnClickSelf={true}\n disabled={false}\n showScroll={false}\n >\n <LexicalColorPicker\n value={value}\n onChangeComplete={applyColor}\n allowCustomColor={allowCustomColor}\n />\n </DropDown>\n </span>\n );\n};\n"],"names":["LexicalColorPickerDropdown","allowCustomColor","value","applyColor","useFontColorPicker","wrapperStyle","DropDown","LexicalColorPicker"],"mappings":";;;AAQO,MAAMA,6BAA6B,CAAC,EACvCC,mBAAmB,KAAK,EACM;IAC9B,MAAM,EAAEC,KAAK,EAAEC,UAAU,EAAE,GAAGC;IAI9B,MAAMC,eAAe;QAAE,SAAS;QAAY,oBAAoBH;IAAM;IAEtE,OAAO,WAAP,GACI,oBAAC;QAAK,OAAOG;qBACT,oBAACC,UAAQA;QACL,iBAAgB;QAChB,iBAAiB;QACjB,qBACI;QAEJ,sBAAsB;QACtB,UAAU;QACV,YAAY;qBAEZ,oBAACC,oBAAkBA;QACf,OAAOL;QACP,kBAAkBC;QAClB,kBAAkBF;;AAKtC"}
package/package.json CHANGED
@@ -1,24 +1,22 @@
1
1
  {
2
2
  "name": "@webiny/lexical-editor-actions",
3
- "version": "6.4.5-beta.0",
3
+ "version": "6.6.0-alpha.0",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./index.js",
7
7
  "./*": "./*"
8
8
  },
9
9
  "dependencies": {
10
- "@emotion/css": "11.13.5",
11
- "@emotion/styled": "11.14.1",
12
- "@lexical/selection": "0.46.0",
13
- "@webiny/admin-ui": "6.4.5-beta.0",
14
- "@webiny/lexical-editor": "6.4.5-beta.0",
10
+ "@lexical/selection": "0.48.0",
11
+ "@webiny/admin-ui": "6.6.0-alpha.0",
12
+ "@webiny/lexical-editor": "6.6.0-alpha.0",
15
13
  "react": "18.3.1",
16
14
  "react-color": "2.19.3",
17
15
  "react-dom": "18.3.1"
18
16
  },
19
17
  "devDependencies": {
20
18
  "@types/react-color": "3.0.13",
21
- "@webiny/build-tools": "6.4.5-beta.0"
19
+ "@webiny/build-tools": "6.6.0-alpha.0"
22
20
  },
23
21
  "publishConfig": {
24
22
  "access": "public"