@webiny/lexical-editor 0.0.0-unstable.ecd8734205 → 5.35.0-beta.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.
- package/commands/webiny-list.d.ts +7 -0
- package/commands/webiny-list.js +13 -0
- package/commands/webiny-list.js.map +1 -0
- package/commands/webiny-quote.d.ts +5 -0
- package/commands/webiny-quote.js +9 -0
- package/commands/webiny-quote.js.map +1 -0
- package/components/AddRichTextEditorNodeType.js.map +1 -1
- package/components/AddRichTextEditorPlugin.d.ts +2 -0
- package/components/AddRichTextEditorPlugin.js +4 -2
- package/components/AddRichTextEditorPlugin.js.map +1 -1
- package/components/AddToolbarAction.js.map +1 -1
- package/components/Editor/HeadingEditor.js +2 -1
- package/components/Editor/HeadingEditor.js.map +1 -1
- package/components/Editor/ParagraphEditor.js +3 -3
- package/components/Editor/ParagraphEditor.js.map +1 -1
- package/components/Editor/RichTextEditor.d.ts +4 -1
- package/components/Editor/RichTextEditor.js +37 -6
- package/components/Editor/RichTextEditor.js.map +1 -1
- package/components/LexicalEditorConfig/LexicalEditorConfig.d.ts +9 -0
- package/components/LexicalEditorConfig/LexicalEditorConfig.js +17 -0
- package/components/LexicalEditorConfig/LexicalEditorConfig.js.map +1 -0
- package/components/LexicalHtmlRenderer.d.ts +8 -1
- package/components/LexicalHtmlRenderer.js +29 -6
- package/components/LexicalHtmlRenderer.js.map +1 -1
- package/components/Toolbar/HeadingToolbar.js.map +1 -1
- package/components/Toolbar/ParagraphToolbar.js.map +1 -1
- package/components/Toolbar/Toolbar.css +9 -0
- package/components/Toolbar/Toolbar.js +25 -5
- package/components/Toolbar/Toolbar.js.map +1 -1
- package/components/ToolbarActions/BoldAction.d.ts +0 -3
- package/components/ToolbarActions/BoldAction.js +8 -3
- package/components/ToolbarActions/BoldAction.js.map +1 -1
- package/components/ToolbarActions/BulletListAction.d.ts +0 -3
- package/components/ToolbarActions/BulletListAction.js +17 -55
- package/components/ToolbarActions/BulletListAction.js.map +1 -1
- package/components/ToolbarActions/CodeHighlightAction.d.ts +0 -4
- package/components/ToolbarActions/CodeHighlightAction.js +8 -4
- package/components/ToolbarActions/CodeHighlightAction.js.map +1 -1
- package/components/ToolbarActions/FontColorAction.d.ts +11 -0
- package/components/ToolbarActions/FontColorAction.js +83 -0
- package/components/ToolbarActions/FontColorAction.js.map +1 -0
- package/components/ToolbarActions/FontSizeAction.js +0 -3
- package/components/ToolbarActions/FontSizeAction.js.map +1 -1
- package/components/ToolbarActions/ItalicAction.d.ts +0 -3
- package/components/ToolbarActions/ItalicAction.js +8 -3
- package/components/ToolbarActions/ItalicAction.js.map +1 -1
- package/components/ToolbarActions/LinkAction.d.ts +0 -5
- package/components/ToolbarActions/LinkAction.js +0 -5
- package/components/ToolbarActions/LinkAction.js.map +1 -1
- package/components/ToolbarActions/NumberedListAction.d.ts +0 -3
- package/components/ToolbarActions/NumberedListAction.js +17 -53
- package/components/ToolbarActions/NumberedListAction.js.map +1 -1
- package/components/ToolbarActions/QuoteAction.d.ts +0 -2
- package/components/ToolbarActions/QuoteAction.js +16 -29
- package/components/ToolbarActions/QuoteAction.js.map +1 -1
- package/components/ToolbarActions/TypographyAction.d.ts +11 -0
- package/components/ToolbarActions/TypographyAction.js +118 -0
- package/components/ToolbarActions/TypographyAction.js.map +1 -0
- package/components/ToolbarActions/UnderlineAction.d.ts +0 -3
- package/components/ToolbarActions/UnderlineAction.js +8 -3
- package/components/ToolbarActions/UnderlineAction.js.map +1 -1
- package/components/ToolbarPresets/HeadingToolbarPreset.js +8 -0
- package/components/ToolbarPresets/HeadingToolbarPreset.js.map +1 -1
- package/components/ToolbarPresets/ParagraphToolbarPreset.js +8 -0
- package/components/ToolbarPresets/ParagraphToolbarPreset.js.map +1 -1
- package/context/FontColorActionContext.d.ts +6 -0
- package/context/FontColorActionContext.js +10 -0
- package/context/FontColorActionContext.js.map +1 -0
- package/context/RichTextEditorContext.d.ts +10 -0
- package/context/RichTextEditorContext.js +28 -1
- package/context/RichTextEditorContext.js.map +1 -1
- package/context/SharedHistoryContext.d.ts +11 -0
- package/context/SharedHistoryContext.js +26 -0
- package/context/SharedHistoryContext.js.map +1 -0
- package/context/TypographyActionContext.d.ts +7 -0
- package/context/TypographyActionContext.js +10 -0
- package/context/TypographyActionContext.js.map +1 -0
- package/hooks/useFontColorPicker.d.ts +2 -0
- package/hooks/useFontColorPicker.js +15 -0
- package/hooks/useFontColorPicker.js.map +1 -0
- package/hooks/useRichTextEditor.js.map +1 -1
- package/hooks/useTypographyAction.d.ts +1 -0
- package/hooks/useTypographyAction.js +15 -0
- package/hooks/useTypographyAction.js.map +1 -0
- package/hooks/useWebinyList.d.ts +2 -0
- package/hooks/useWebinyList.js +39 -0
- package/hooks/useWebinyList.js.map +1 -0
- package/hooks/useWebinyQuote.d.ts +2 -0
- package/hooks/useWebinyQuote.js +20 -0
- package/hooks/useWebinyQuote.js.map +1 -0
- package/images/icons/font-color.svg +1 -0
- package/index.d.ts +7 -1
- package/index.js +44 -2
- package/index.js.map +1 -1
- package/nodes/FontColorNode.d.ts +43 -0
- package/nodes/FontColorNode.js +127 -0
- package/nodes/FontColorNode.js.map +1 -0
- package/nodes/TypographyElementNode.d.ts +42 -0
- package/nodes/TypographyElementNode.js +154 -0
- package/nodes/TypographyElementNode.js.map +1 -0
- package/nodes/WebinyQuoteNode.d.ts +29 -0
- package/nodes/WebinyQuoteNode.js +148 -0
- package/nodes/WebinyQuoteNode.js.map +1 -0
- package/nodes/list-node/WebinyListItemNode.d.ts +46 -0
- package/nodes/list-node/WebinyListItemNode.js +441 -0
- package/nodes/list-node/WebinyListItemNode.js.map +1 -0
- package/nodes/list-node/WebinyListNode.d.ts +38 -0
- package/nodes/list-node/WebinyListNode.js +253 -0
- package/nodes/list-node/WebinyListNode.js.map +1 -0
- package/nodes/list-node/formatList.d.ts +12 -0
- package/nodes/list-node/formatList.js +423 -0
- package/nodes/list-node/formatList.js.map +1 -0
- package/nodes/webinyNodes.d.ts +6 -1
- package/nodes/webinyNodes.js +8 -2
- package/nodes/webinyNodes.js.map +1 -1
- package/package.json +9 -6
- package/plugins/AutoLinkPlugin/AutoLinkPlugin.js.map +1 -1
- package/plugins/AutoLinkPlugin/index.js.map +1 -1
- package/plugins/BlurEventPlugin/BlurEventPlugin.js.map +1 -1
- package/plugins/ClickableLinkPlugin/ClickableLinkPlugin.js.map +1 -1
- package/plugins/ClickableLinkPlugin/index.js.map +1 -1
- package/plugins/CodeHighlightPlugin/CodeHighlightPlugin.js.map +1 -1
- package/plugins/CodeHighlightPlugin/index.js.map +1 -1
- package/plugins/FloatingLinkEditorPlugin/FloatingLinkEditorPlugin.js.map +1 -1
- package/plugins/FloatingLinkEditorPlugin/index.js.map +1 -1
- package/plugins/FontColorPlugin/FontColorPlugin.d.ts +2 -0
- package/plugins/FontColorPlugin/FontColorPlugin.js +38 -0
- package/plugins/FontColorPlugin/FontColorPlugin.js.map +1 -0
- package/plugins/LexicalUpdateStatePlugin/LexicalUpdateStatePlugin.js.map +1 -1
- package/plugins/LexicalUpdateStatePlugin/index.js.map +1 -1
- package/plugins/TypographyPlugin/TypographyPlugin.d.ts +2 -0
- package/plugins/TypographyPlugin/TypographyPlugin.js +31 -0
- package/plugins/TypographyPlugin/TypographyPlugin.js.map +1 -0
- package/plugins/WebinyListPLugin/WebinyListPlugin.d.ts +1 -0
- package/plugins/WebinyListPLugin/WebinyListPlugin.js +25 -0
- package/plugins/WebinyListPLugin/WebinyListPlugin.js.map +1 -0
- package/plugins/WebinyQuoteNodePlugin/WebinyQuoteNodePlugin.d.ts +1 -0
- package/plugins/WebinyQuoteNodePlugin/WebinyQuoteNodePlugin.js +24 -0
- package/plugins/WebinyQuoteNodePlugin/WebinyQuoteNodePlugin.js.map +1 -0
- package/themes/webinyLexicalTheme.css +0 -2
- package/themes/webinyLexicalTheme.d.ts +7 -8
- package/themes/webinyLexicalTheme.js +7 -27
- package/themes/webinyLexicalTheme.js.map +1 -1
- package/types.d.ts +59 -0
- package/types.js +8 -1
- package/types.js.map +1 -1
- package/ui/Divider.js.map +1 -1
- package/ui/DropDown.d.ts +2 -1
- package/ui/DropDown.js +7 -2
- package/ui/DropDown.js.map +1 -1
- package/ui/LinkPreview.js.map +1 -1
- package/ui/Placeholder.js.map +1 -1
- package/ui/TextInput.js.map +1 -1
- package/ui/ToolbarActionDialog.d.ts +12 -0
- package/ui/ToolbarActionDialog.js +106 -0
- package/ui/ToolbarActionDialog.js.map +1 -0
- package/utils/generateInitialLexicalValue.js.map +1 -1
- package/utils/getDOMRangeRect.js.map +1 -1
- package/utils/getLexicalTextSelectionState.d.ts +5 -0
- package/utils/getLexicalTextSelectionState.js +141 -0
- package/utils/getLexicalTextSelectionState.js.map +1 -0
- package/utils/getSelectedNode.js.map +1 -1
- package/utils/isValidJSON.js.map +1 -1
- package/utils/isValidLexicalData.js.map +1 -1
- package/utils/nodes/clearNodeFormating.d.ts +2 -0
- package/utils/nodes/clearNodeFormating.js +28 -0
- package/utils/nodes/clearNodeFormating.js.map +1 -0
- package/utils/nodes/formatToParagraph.d.ts +2 -0
- package/utils/nodes/formatToParagraph.js +19 -0
- package/utils/nodes/formatToParagraph.js.map +1 -0
- package/utils/nodes/formatToQuote.d.ts +2 -0
- package/utils/nodes/formatToQuote.js +20 -0
- package/utils/nodes/formatToQuote.js.map +1 -0
- package/utils/nodes/list-node.d.ts +11 -0
- package/utils/nodes/list-node.js +107 -0
- package/utils/nodes/list-node.js.map +1 -0
- package/utils/point.js.map +1 -1
- package/utils/rect.js.map +1 -1
- package/utils/sanitizeUrl.js.map +1 -1
- package/utils/setFloatingElemPosition.js.map +1 -1
- package/utils/styleObjectToString.d.ts +2 -0
- package/utils/styleObjectToString.js +22 -0
- package/utils/styleObjectToString.js.map +1 -0
- package/utils/toTypographyEmotionMap.d.ts +3 -0
- package/utils/toTypographyEmotionMap.js +36 -0
- package/utils/toTypographyEmotionMap.js.map +1 -0
package/ui/DropDown.js
CHANGED
|
@@ -45,6 +45,8 @@ function DropDownItem(_ref) {
|
|
|
45
45
|
function DropDownItems(_ref2) {
|
|
46
46
|
var children = _ref2.children,
|
|
47
47
|
dropDownRef = _ref2.dropDownRef,
|
|
48
|
+
_ref2$showScroll = _ref2.showScroll,
|
|
49
|
+
showScroll = _ref2$showScroll === void 0 ? true : _ref2$showScroll,
|
|
48
50
|
onClose = _ref2.onClose;
|
|
49
51
|
var _useState = (0, React.useState)(),
|
|
50
52
|
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
@@ -102,7 +104,7 @@ function DropDownItems(_ref2) {
|
|
|
102
104
|
return /*#__PURE__*/React.createElement(DropDownContext.Provider, {
|
|
103
105
|
value: contextValue
|
|
104
106
|
}, /*#__PURE__*/React.createElement("div", {
|
|
105
|
-
className: "lexical-dropdown",
|
|
107
|
+
className: "lexical-dropdown ".concat(showScroll ? "" : "no-scroll"),
|
|
106
108
|
ref: dropDownRef !== null && dropDownRef !== void 0 ? dropDownRef : null,
|
|
107
109
|
onKeyDown: handleKeyDown
|
|
108
110
|
}, children));
|
|
@@ -115,7 +117,9 @@ function DropDown(_ref3) {
|
|
|
115
117
|
buttonClassName = _ref3.buttonClassName,
|
|
116
118
|
buttonIconClassName = _ref3.buttonIconClassName,
|
|
117
119
|
children = _ref3.children,
|
|
118
|
-
stopCloseOnClickSelf = _ref3.stopCloseOnClickSelf
|
|
120
|
+
stopCloseOnClickSelf = _ref3.stopCloseOnClickSelf,
|
|
121
|
+
_ref3$showScroll = _ref3.showScroll,
|
|
122
|
+
showScroll = _ref3$showScroll === void 0 ? true : _ref3$showScroll;
|
|
119
123
|
var buttonRef = (0, React.useRef)(null);
|
|
120
124
|
var _useState5 = (0, React.useState)(false),
|
|
121
125
|
_useState6 = (0, _slicedToArray2.default)(_useState5, 2),
|
|
@@ -163,6 +167,7 @@ function DropDown(_ref3) {
|
|
|
163
167
|
}), showDropDown && /*#__PURE__*/React.createElement("div", {
|
|
164
168
|
className: "lexical-dropdown-container"
|
|
165
169
|
}, /*#__PURE__*/React.createElement(DropDownItems, {
|
|
170
|
+
showScroll: showScroll,
|
|
166
171
|
onClose: handleClose
|
|
167
172
|
}, children)));
|
|
168
173
|
}
|
package/ui/DropDown.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","_interopRequireWildcard","require","DropDownContext","createContext","DropDownItem","_ref","children","className","onClick","title","ref","useRef","dropDownContext","useContext","Error","registerItem","useEffect","current","createElement","DropDownItems","_ref2","dropDownRef","onClose","_useState","useState","_useState2","_slicedToArray2","default","items","setItems","_useState3","_useState4","highlightedItem","setHighlightedItem","useCallback","itemRef","prev","concat","_toConsumableArray2","handleKeyDown","event","key","includes","preventDefault","index","indexOf","length","contextValue","useMemo","focus","Provider","value","onKeyDown","DropDown","_ref3","_ref3$disabled","disabled","buttonLabel","buttonAriaLabel","buttonClassName","buttonIconClassName","stopCloseOnClickSelf","buttonRef","_useState5","_useState6","showDropDown","setShowDropDown","handleClose","button","handle","target","contains","document","addEventListener","removeEventListener","style","position"],"sources":["DropDown.tsx"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { ReactNode, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport * as React from \"react\";\n\ntype DropDownContextType = {\n registerItem: (ref: React.RefObject<HTMLButtonElement>) => void;\n};\n\nconst DropDownContext = React.createContext<DropDownContextType | null>(null);\n\nexport function DropDownItem({\n children,\n className,\n onClick,\n title\n}: {\n children: React.ReactNode;\n className: string;\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;\n title?: string;\n}) {\n const ref = useRef<HTMLButtonElement>(null);\n\n const dropDownContext = React.useContext(DropDownContext);\n\n if (dropDownContext === null) {\n throw new Error(\"DropDownItem must be used within a DropDown\");\n }\n\n const { registerItem } = dropDownContext;\n\n useEffect(() => {\n if (ref && ref.current) {\n registerItem(ref);\n }\n }, [ref, registerItem]);\n\n return (\n <button className={className} onClick={onClick} ref={ref} title={title}>\n {children}\n </button>\n );\n}\n\nfunction DropDownItems({\n children,\n dropDownRef,\n onClose\n}: {\n children: React.ReactNode;\n dropDownRef?: React.Ref<HTMLDivElement>;\n onClose: () => void;\n}) {\n const [items, setItems] = useState<React.RefObject<HTMLButtonElement>[]>();\n const [highlightedItem, setHighlightedItem] = useState<React.RefObject<HTMLButtonElement>>();\n\n const registerItem = useCallback(\n (itemRef: React.RefObject<HTMLButtonElement>) => {\n setItems(prev => (prev ? [...prev, itemRef] : [itemRef]));\n },\n [setItems]\n );\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!items) {\n return;\n }\n\n const key = event.key;\n\n if ([\"Escape\", \"ArrowUp\", \"ArrowDown\", \"Tab\"].includes(key)) {\n event.preventDefault();\n }\n\n if (key === \"Escape\" || key === \"Tab\") {\n onClose();\n } else if (key === \"ArrowUp\") {\n setHighlightedItem(prev => {\n if (!prev) {\n return items[0];\n }\n const index = items.indexOf(prev) - 1;\n return items[index === -1 ? items.length - 1 : index];\n });\n } else if (key === \"ArrowDown\") {\n setHighlightedItem(prev => {\n if (!prev) {\n return items[0];\n }\n return items[items.indexOf(prev) + 1];\n });\n }\n };\n\n const contextValue = useMemo(\n () => ({\n registerItem\n }),\n [registerItem]\n );\n\n useEffect(() => {\n if (items && !highlightedItem) {\n setHighlightedItem(items[0]);\n }\n\n if (highlightedItem && highlightedItem.current) {\n highlightedItem.current.focus();\n }\n }, [items, highlightedItem]);\n\n return (\n <DropDownContext.Provider value={contextValue}>\n <div className=\"lexical-dropdown\" ref={dropDownRef ?? null} onKeyDown={handleKeyDown}>\n {children}\n </div>\n </DropDownContext.Provider>\n );\n}\n\nexport function DropDown({\n disabled = false,\n buttonLabel,\n buttonAriaLabel,\n buttonClassName,\n buttonIconClassName,\n children,\n stopCloseOnClickSelf\n}: {\n disabled?: boolean;\n buttonAriaLabel?: string;\n buttonClassName: string;\n buttonIconClassName?: string;\n buttonLabel?: string;\n children: ReactNode;\n stopCloseOnClickSelf?: boolean;\n}): JSX.Element {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const [showDropDown, setShowDropDown] = useState(false);\n\n const handleClose = () => {\n setShowDropDown(false);\n if (buttonRef && buttonRef.current) {\n buttonRef.current.focus();\n }\n };\n\n useEffect(() => {\n const button = buttonRef.current;\n if (button === null || !showDropDown) {\n return;\n }\n\n const handle = (event: MouseEvent) => {\n const target = event.target;\n if (!button.contains(target as Node)) {\n setShowDropDown(false);\n }\n };\n document.addEventListener(\"click\", handle);\n\n return () => {\n document.removeEventListener(\"click\", handle);\n };\n }, [buttonRef, showDropDown, stopCloseOnClickSelf]);\n\n return (\n <button\n style={{ position: \"relative\" }}\n disabled={disabled}\n aria-label={buttonAriaLabel || buttonLabel}\n className={buttonClassName}\n onClick={() => setShowDropDown(!showDropDown)}\n ref={buttonRef}\n >\n {buttonIconClassName && <span className={buttonIconClassName} />}\n {buttonLabel && <span className=\"text dropdown-button-text\">{buttonLabel}</span>}\n <i className=\"chevron-down\" />\n {showDropDown && (\n <div className={\"lexical-dropdown-container\"}>\n <DropDownItems onClose={handleClose}>{children}</DropDownItems>\n </div>\n )}\n </button>\n );\n}\n"],"mappings":";;;;;;;;;;;AAQA,IAAAA,KAAA,GAAAC,uBAAA,CAAAC,OAAA;AARA;AACA;AACA;AACA;AACA;AACA;AACA;;AASA,IAAMC,eAAe,gBAAGH,KAAK,CAACI,aAAa,CAA6B,IAAI,CAAC;AAEtE,SAASC,YAAYA,CAAAC,IAAA,EAUzB;EAAA,IATCC,QAAQ,GAAAD,IAAA,CAARC,QAAQ;IACRC,SAAS,GAAAF,IAAA,CAATE,SAAS;IACTC,OAAO,GAAAH,IAAA,CAAPG,OAAO;IACPC,KAAK,GAAAJ,IAAA,CAALI,KAAK;EAOL,IAAMC,GAAG,GAAG,IAAAC,YAAM,EAAoB,IAAI,CAAC;EAE3C,IAAMC,eAAe,GAAGb,KAAK,CAACc,UAAU,CAACX,eAAe,CAAC;EAEzD,IAAIU,eAAe,KAAK,IAAI,EAAE;IAC1B,MAAM,IAAIE,KAAK,CAAC,6CAA6C,CAAC;EAClE;EAEA,IAAQC,YAAY,GAAKH,eAAe,CAAhCG,YAAY;EAEpB,IAAAC,eAAS,EAAC,YAAM;IACZ,IAAIN,GAAG,IAAIA,GAAG,CAACO,OAAO,EAAE;MACpBF,YAAY,CAACL,GAAG,CAAC;IACrB;EACJ,CAAC,EAAE,CAACA,GAAG,EAAEK,YAAY,CAAC,CAAC;EAEvB,oBACIhB,KAAA,CAAAmB,aAAA;IAAQX,SAAS,EAAEA,SAAU;IAACC,OAAO,EAAEA,OAAQ;IAACE,GAAG,EAAEA,GAAI;IAACD,KAAK,EAAEA;EAAM,GAClEH,QAAQ,CACJ;AAEjB;AAEA,SAASa,aAAaA,CAAAC,KAAA,EAQnB;EAAA,IAPCd,QAAQ,GAAAc,KAAA,CAARd,QAAQ;IACRe,WAAW,GAAAD,KAAA,CAAXC,WAAW;IACXC,OAAO,GAAAF,KAAA,CAAPE,OAAO;EAMP,IAAAC,SAAA,GAA0B,IAAAC,cAAQ,GAAwC;IAAAC,UAAA,OAAAC,eAAA,CAAAC,OAAA,EAAAJ,SAAA;IAAnEK,KAAK,GAAAH,UAAA;IAAEI,QAAQ,GAAAJ,UAAA;EACtB,IAAAK,UAAA,GAA8C,IAAAN,cAAQ,GAAsC;IAAAO,UAAA,OAAAL,eAAA,CAAAC,OAAA,EAAAG,UAAA;IAArFE,eAAe,GAAAD,UAAA;IAAEE,kBAAkB,GAAAF,UAAA;EAE1C,IAAMhB,YAAY,GAAG,IAAAmB,iBAAW,EAC5B,UAACC,OAA2C,EAAK;IAC7CN,QAAQ,CAAC,UAAAO,IAAI;MAAA,OAAKA,IAAI,MAAAC,MAAA,KAAAC,mBAAA,CAAAX,OAAA,EAAOS,IAAI,IAAED,OAAO,KAAI,CAACA,OAAO,CAAC;IAAA,CAAC,CAAC;EAC7D,CAAC,EACD,CAACN,QAAQ,CAAC,CACb;EAED,IAAMU,aAAa,GAAG,SAAhBA,aAAaA,CAAIC,KAA0C,EAAK;IAClE,IAAI,CAACZ,KAAK,EAAE;MACR;IACJ;IAEA,IAAMa,GAAG,GAAGD,KAAK,CAACC,GAAG;IAErB,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,CAACC,QAAQ,CAACD,GAAG,CAAC,EAAE;MACzDD,KAAK,CAACG,cAAc,EAAE;IAC1B;IAEA,IAAIF,GAAG,KAAK,QAAQ,IAAIA,GAAG,KAAK,KAAK,EAAE;MACnCnB,OAAO,EAAE;IACb,CAAC,MAAM,IAAImB,GAAG,KAAK,SAAS,EAAE;MAC1BR,kBAAkB,CAAC,UAAAG,IAAI,EAAI;QACvB,IAAI,CAACA,IAAI,EAAE;UACP,OAAOR,KAAK,CAAC,CAAC,CAAC;QACnB;QACA,IAAMgB,KAAK,GAAGhB,KAAK,CAACiB,OAAO,CAACT,IAAI,CAAC,GAAG,CAAC;QACrC,OAAOR,KAAK,CAACgB,KAAK,KAAK,CAAC,CAAC,GAAGhB,KAAK,CAACkB,MAAM,GAAG,CAAC,GAAGF,KAAK,CAAC;MACzD,CAAC,CAAC;IACN,CAAC,MAAM,IAAIH,GAAG,KAAK,WAAW,EAAE;MAC5BR,kBAAkB,CAAC,UAAAG,IAAI,EAAI;QACvB,IAAI,CAACA,IAAI,EAAE;UACP,OAAOR,KAAK,CAAC,CAAC,CAAC;QACnB;QACA,OAAOA,KAAK,CAACA,KAAK,CAACiB,OAAO,CAACT,IAAI,CAAC,GAAG,CAAC,CAAC;MACzC,CAAC,CAAC;IACN;EACJ,CAAC;EAED,IAAMW,YAAY,GAAG,IAAAC,aAAO,EACxB;IAAA,OAAO;MACHjC,YAAY,EAAZA;IACJ,CAAC;EAAA,CAAC,EACF,CAACA,YAAY,CAAC,CACjB;EAED,IAAAC,eAAS,EAAC,YAAM;IACZ,IAAIY,KAAK,IAAI,CAACI,eAAe,EAAE;MAC3BC,kBAAkB,CAACL,KAAK,CAAC,CAAC,CAAC,CAAC;IAChC;IAEA,IAAII,eAAe,IAAIA,eAAe,CAACf,OAAO,EAAE;MAC5Ce,eAAe,CAACf,OAAO,CAACgC,KAAK,EAAE;IACnC;EACJ,CAAC,EAAE,CAACrB,KAAK,EAAEI,eAAe,CAAC,CAAC;EAE5B,oBACIjC,KAAA,CAAAmB,aAAA,CAAChB,eAAe,CAACgD,QAAQ;IAACC,KAAK,EAAEJ;EAAa,gBAC1ChD,KAAA,CAAAmB,aAAA;IAAKX,SAAS,EAAC,kBAAkB;IAACG,GAAG,EAAEW,WAAW,aAAXA,WAAW,cAAXA,WAAW,GAAI,IAAK;IAAC+B,SAAS,EAAEb;EAAc,GAChFjC,QAAQ,CACP,CACiB;AAEnC;AAEO,SAAS+C,QAAQA,CAAAC,KAAA,EAgBR;EAAA,IAAAC,cAAA,GAAAD,KAAA,CAfZE,QAAQ;IAARA,QAAQ,GAAAD,cAAA,cAAG,KAAK,GAAAA,cAAA;IAChBE,WAAW,GAAAH,KAAA,CAAXG,WAAW;IACXC,eAAe,GAAAJ,KAAA,CAAfI,eAAe;IACfC,eAAe,GAAAL,KAAA,CAAfK,eAAe;IACfC,mBAAmB,GAAAN,KAAA,CAAnBM,mBAAmB;IACnBtD,QAAQ,GAAAgD,KAAA,CAARhD,QAAQ;IACRuD,oBAAoB,GAAAP,KAAA,CAApBO,oBAAoB;EAUpB,IAAMC,SAAS,GAAG,IAAAnD,YAAM,EAAoB,IAAI,CAAC;EACjD,IAAAoD,UAAA,GAAwC,IAAAvC,cAAQ,EAAC,KAAK,CAAC;IAAAwC,UAAA,OAAAtC,eAAA,CAAAC,OAAA,EAAAoC,UAAA;IAAhDE,YAAY,GAAAD,UAAA;IAAEE,eAAe,GAAAF,UAAA;EAEpC,IAAMG,WAAW,GAAG,SAAdA,WAAWA,CAAA,EAAS;IACtBD,eAAe,CAAC,KAAK,CAAC;IACtB,IAAIJ,SAAS,IAAIA,SAAS,CAAC7C,OAAO,EAAE;MAChC6C,SAAS,CAAC7C,OAAO,CAACgC,KAAK,EAAE;IAC7B;EACJ,CAAC;EAED,IAAAjC,eAAS,EAAC,YAAM;IACZ,IAAMoD,MAAM,GAAGN,SAAS,CAAC7C,OAAO;IAChC,IAAImD,MAAM,KAAK,IAAI,IAAI,CAACH,YAAY,EAAE;MAClC;IACJ;IAEA,IAAMI,MAAM,GAAG,SAATA,MAAMA,CAAI7B,KAAiB,EAAK;MAClC,IAAM8B,MAAM,GAAG9B,KAAK,CAAC8B,MAAM;MAC3B,IAAI,CAACF,MAAM,CAACG,QAAQ,CAACD,MAAM,CAAS,EAAE;QAClCJ,eAAe,CAAC,KAAK,CAAC;MAC1B;IACJ,CAAC;IACDM,QAAQ,CAACC,gBAAgB,CAAC,OAAO,EAAEJ,MAAM,CAAC;IAE1C,OAAO,YAAM;MACTG,QAAQ,CAACE,mBAAmB,CAAC,OAAO,EAAEL,MAAM,CAAC;IACjD,CAAC;EACL,CAAC,EAAE,CAACP,SAAS,EAAEG,YAAY,EAAEJ,oBAAoB,CAAC,CAAC;EAEnD,oBACI9D,KAAA,CAAAmB,aAAA;IACIyD,KAAK,EAAE;MAAEC,QAAQ,EAAE;IAAW,CAAE;IAChCpB,QAAQ,EAAEA,QAAS;IACnB,cAAYE,eAAe,IAAID,WAAY;IAC3ClD,SAAS,EAAEoD,eAAgB;IAC3BnD,OAAO,EAAE,SAAAA,QAAA;MAAA,OAAM0D,eAAe,CAAC,CAACD,YAAY,CAAC;IAAA,CAAC;IAC9CvD,GAAG,EAAEoD;EAAU,GAEdF,mBAAmB,iBAAI7D,KAAA,CAAAmB,aAAA;IAAMX,SAAS,EAAEqD;EAAoB,EAAG,EAC/DH,WAAW,iBAAI1D,KAAA,CAAAmB,aAAA;IAAMX,SAAS,EAAC;EAA2B,GAAEkD,WAAW,CAAQ,eAChF1D,KAAA,CAAAmB,aAAA;IAAGX,SAAS,EAAC;EAAc,EAAG,EAC7B0D,YAAY,iBACTlE,KAAA,CAAAmB,aAAA;IAAKX,SAAS,EAAE;EAA6B,gBACzCR,KAAA,CAAAmB,aAAA,CAACC,aAAa;IAACG,OAAO,EAAE6C;EAAY,GAAE7D,QAAQ,CAAiB,CAEtE,CACI;AAEjB"}
|
|
1
|
+
{"version":3,"names":["DropDownContext","React","createContext","DropDownItem","children","className","onClick","title","ref","useRef","dropDownContext","useContext","Error","registerItem","useEffect","current","DropDownItems","dropDownRef","showScroll","onClose","useState","items","setItems","highlightedItem","setHighlightedItem","useCallback","itemRef","prev","handleKeyDown","event","key","includes","preventDefault","index","indexOf","length","contextValue","useMemo","focus","DropDown","disabled","buttonLabel","buttonAriaLabel","buttonClassName","buttonIconClassName","stopCloseOnClickSelf","buttonRef","showDropDown","setShowDropDown","handleClose","button","handle","target","contains","document","addEventListener","removeEventListener","position"],"sources":["DropDown.tsx"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport { ReactNode, useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport * as React from \"react\";\n\ntype DropDownContextType = {\n registerItem: (ref: React.RefObject<HTMLButtonElement>) => void;\n};\n\nconst DropDownContext = React.createContext<DropDownContextType | null>(null);\n\nexport function DropDownItem({\n children,\n className,\n onClick,\n title\n}: {\n children: React.ReactNode;\n className: string;\n onClick: (event: React.MouseEvent<HTMLButtonElement>) => void;\n title?: string;\n}) {\n const ref = useRef<HTMLButtonElement>(null);\n\n const dropDownContext = React.useContext(DropDownContext);\n\n if (dropDownContext === null) {\n throw new Error(\"DropDownItem must be used within a DropDown\");\n }\n\n const { registerItem } = dropDownContext;\n\n useEffect(() => {\n if (ref && ref.current) {\n registerItem(ref);\n }\n }, [ref, registerItem]);\n\n return (\n <button className={className} onClick={onClick} ref={ref} title={title}>\n {children}\n </button>\n );\n}\n\nfunction DropDownItems({\n children,\n dropDownRef,\n showScroll = true,\n onClose\n}: {\n children: React.ReactNode;\n dropDownRef?: React.Ref<HTMLDivElement>;\n showScroll?: boolean;\n onClose: () => void;\n}) {\n const [items, setItems] = useState<React.RefObject<HTMLButtonElement>[]>();\n const [highlightedItem, setHighlightedItem] = useState<React.RefObject<HTMLButtonElement>>();\n\n const registerItem = useCallback(\n (itemRef: React.RefObject<HTMLButtonElement>) => {\n setItems(prev => (prev ? [...prev, itemRef] : [itemRef]));\n },\n [setItems]\n );\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (!items) {\n return;\n }\n\n const key = event.key;\n\n if ([\"Escape\", \"ArrowUp\", \"ArrowDown\", \"Tab\"].includes(key)) {\n event.preventDefault();\n }\n\n if (key === \"Escape\" || key === \"Tab\") {\n onClose();\n } else if (key === \"ArrowUp\") {\n setHighlightedItem(prev => {\n if (!prev) {\n return items[0];\n }\n const index = items.indexOf(prev) - 1;\n return items[index === -1 ? items.length - 1 : index];\n });\n } else if (key === \"ArrowDown\") {\n setHighlightedItem(prev => {\n if (!prev) {\n return items[0];\n }\n return items[items.indexOf(prev) + 1];\n });\n }\n };\n\n const contextValue = useMemo(\n () => ({\n registerItem\n }),\n [registerItem]\n );\n\n useEffect(() => {\n if (items && !highlightedItem) {\n setHighlightedItem(items[0]);\n }\n\n if (highlightedItem && highlightedItem.current) {\n highlightedItem.current.focus();\n }\n }, [items, highlightedItem]);\n\n return (\n <DropDownContext.Provider value={contextValue}>\n <div\n className={`lexical-dropdown ${showScroll ? \"\" : \"no-scroll\"}`}\n ref={dropDownRef ?? null}\n onKeyDown={handleKeyDown}\n >\n {children}\n </div>\n </DropDownContext.Provider>\n );\n}\n\nexport function DropDown({\n disabled = false,\n buttonLabel,\n buttonAriaLabel,\n buttonClassName,\n buttonIconClassName,\n children,\n stopCloseOnClickSelf,\n showScroll = true\n}: {\n disabled?: boolean;\n buttonAriaLabel?: string;\n buttonClassName: string;\n buttonIconClassName?: string;\n buttonLabel?: string;\n children: ReactNode;\n stopCloseOnClickSelf?: boolean;\n showScroll?: boolean;\n}): JSX.Element {\n const buttonRef = useRef<HTMLButtonElement>(null);\n const [showDropDown, setShowDropDown] = useState(false);\n\n const handleClose = () => {\n setShowDropDown(false);\n if (buttonRef && buttonRef.current) {\n buttonRef.current.focus();\n }\n };\n\n useEffect(() => {\n const button = buttonRef.current;\n if (button === null || !showDropDown) {\n return;\n }\n\n const handle = (event: MouseEvent) => {\n const target = event.target;\n if (!button.contains(target as Node)) {\n setShowDropDown(false);\n }\n };\n document.addEventListener(\"click\", handle);\n\n return () => {\n document.removeEventListener(\"click\", handle);\n };\n }, [buttonRef, showDropDown, stopCloseOnClickSelf]);\n\n return (\n <button\n style={{ position: \"relative\" }}\n disabled={disabled}\n aria-label={buttonAriaLabel || buttonLabel}\n className={buttonClassName}\n onClick={() => setShowDropDown(!showDropDown)}\n ref={buttonRef}\n >\n {buttonIconClassName && <span className={buttonIconClassName} />}\n {buttonLabel && <span className=\"text dropdown-button-text\">{buttonLabel}</span>}\n <i className=\"chevron-down\" />\n {showDropDown && (\n <div className={\"lexical-dropdown-container\"}>\n <DropDownItems showScroll={showScroll} onClose={handleClose}>\n {children}\n </DropDownItems>\n </div>\n )}\n </button>\n );\n}\n"],"mappings":"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"}
|
package/ui/LinkPreview.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["PREVIEW_CACHE","URL_MATCHER","useSuspenseRequest","url","cached","match","preview","fetch","encodeURI","then","response","json","catch","Promise","LinkPreviewContent","img","title","domain","description","Glimmer","props","animationDelay","String","index","style","LinkPreview","height","width"],"sources":["LinkPreview.tsx"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport \"./LinkPreview.css\";\n\nimport * as React from \"react\";\nimport { CSSProperties, Suspense } from \"react\";\n\ntype Preview = {\n title: string;\n description: string;\n img: string;\n domain: string;\n} | null;\n\n// Cached responses or running request promises\nconst PREVIEW_CACHE: Record<string, Promise<Preview> | { preview: Preview }> = {};\n\nconst URL_MATCHER =\n /((https?:\\/\\/(www\\.)?)|(www\\.))[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/;\n\nfunction useSuspenseRequest(url: string) {\n let cached = PREVIEW_CACHE[url];\n\n if (!url.match(URL_MATCHER)) {\n return { preview: null };\n }\n\n if (!cached) {\n cached = PREVIEW_CACHE[url] = fetch(`/api/link-preview?url=${encodeURI(url)}`)\n .then(response => response.json())\n .then(preview => {\n PREVIEW_CACHE[url] = preview;\n return preview;\n })\n .catch(() => {\n PREVIEW_CACHE[url] = { preview: null };\n });\n }\n\n if (cached instanceof Promise) {\n throw cached;\n }\n\n return cached;\n}\n\nfunction LinkPreviewContent({\n url\n}: Readonly<{\n url: string;\n}>): JSX.Element | null {\n const { preview } = useSuspenseRequest(url);\n if (preview === null) {\n return null;\n }\n return (\n <div className=\"LinkPreview__container\">\n {preview.img && (\n <div className=\"LinkPreview__imageWrapper\">\n <img src={preview.img} alt={preview.title} className=\"LinkPreview__image\" />\n </div>\n )}\n {preview.domain && <div className=\"LinkPreview__domain\">{preview.domain}</div>}\n {preview.title && <div className=\"LinkPreview__title\">{preview.title}</div>}\n {preview.description && (\n <div className=\"LinkPreview__description\">{preview.description}</div>\n )}\n </div>\n );\n}\n\nfunction Glimmer(props: { style: CSSProperties; index: number }): JSX.Element {\n return (\n <div\n className=\"LinkPreview__glimmer\"\n {...props}\n style={{\n animationDelay: String((props.index || 0) * 300),\n ...(props.style || {})\n }}\n />\n );\n}\n\nexport function LinkPreview({\n url\n}: Readonly<{\n url: string;\n}>): JSX.Element {\n return (\n <Suspense\n fallback={\n <>\n <Glimmer style={{ height: \"80px\" }} index={0} />\n <Glimmer style={{ width: \"60%\" }} index={1} />\n <Glimmer style={{ width: \"80%\" }} index={2} />\n </>\n }\n >\n <LinkPreviewContent url={url} />\n </Suspense>\n );\n}\n"],"mappings":";;;;;;;;;AAQA;AAEA;AAVA;AACA;AACA;AACA;AACA;AACA;AACA;;AAcA;AACA,IAAMA,aAAsE,GAAG,CAAC,CAAC;AAEjF,IAAMC,WAAW,GACb,iHAAiH;AAErH,SAASC,kBAAkB,CAACC,GAAW,EAAE;EACrC,IAAIC,MAAM,GAAGJ,aAAa,CAACG,GAAG,CAAC;EAE/B,IAAI,CAACA,GAAG,CAACE,KAAK,CAACJ,WAAW,CAAC,EAAE;IACzB,OAAO;MAAEK,OAAO,EAAE;IAAK,CAAC;EAC5B;EAEA,IAAI,CAACF,MAAM,EAAE;IACTA,MAAM,GAAGJ,aAAa,CAACG,GAAG,CAAC,GAAGI,KAAK,iCAA0BC,SAAS,CAACL,GAAG,CAAC,EAAG,CACzEM,IAAI,CAAC,UAAAC,QAAQ;MAAA,OAAIA,QAAQ,CAACC,IAAI,EAAE;IAAA,EAAC,CACjCF,IAAI,CAAC,UAAAH,OAAO,EAAI;MACbN,aAAa,CAACG,GAAG,CAAC,GAAGG,OAAO;MAC5B,OAAOA,OAAO;IAClB,CAAC,CAAC,CACDM,KAAK,CAAC,YAAM;MACTZ,aAAa,CAACG,GAAG,CAAC,GAAG;QAAEG,OAAO,EAAE;MAAK,CAAC;IAC1C,CAAC,CAAC;EACV;EAEA,IAAIF,MAAM,YAAYS,OAAO,EAAE;IAC3B,MAAMT,MAAM;EAChB;EAEA,OAAOA,MAAM;AACjB;AAEA,SAASU,kBAAkB,OAIH;EAAA,IAHpBX,GAAG,QAAHA,GAAG;EAIH,0BAAoBD,kBAAkB,CAACC,GAAG,CAAC;IAAnCG,OAAO,uBAAPA,OAAO;EACf,IAAIA,OAAO,KAAK,IAAI,EAAE;IAClB,OAAO,IAAI;EACf;EACA,oBACI;IAAK,SAAS,EAAC;EAAwB,GAClCA,OAAO,CAACS,GAAG,iBACR;IAAK,SAAS,EAAC;EAA2B,gBACtC;IAAK,GAAG,EAAET,OAAO,CAACS,GAAI;IAAC,GAAG,EAAET,OAAO,CAACU,KAAM;IAAC,SAAS,EAAC;EAAoB,EAAG,CAEnF,EACAV,OAAO,CAACW,MAAM,iBAAI;IAAK,SAAS,EAAC;EAAqB,GAAEX,OAAO,CAACW,MAAM,CAAO,EAC7EX,OAAO,CAACU,KAAK,iBAAI;IAAK,SAAS,EAAC;EAAoB,GAAEV,OAAO,CAACU,KAAK,CAAO,EAC1EV,OAAO,CAACY,WAAW,iBAChB;IAAK,SAAS,EAAC;EAA0B,GAAEZ,OAAO,CAACY,WAAW,CACjE,CACC;AAEd;AAEA,SAASC,OAAO,CAACC,KAA8C,EAAe;EAC1E,oBACI;IACI,SAAS,EAAC;EAAsB,GAC5BA,KAAK;IACT,KAAK;MACDC,cAAc,EAAEC,MAAM,CAAC,CAACF,KAAK,CAACG,KAAK,IAAI,CAAC,IAAI,GAAG;IAAC,GAC5CH,KAAK,CAACI,KAAK,IAAI,CAAC,CAAC;EACvB,GACJ;AAEV;AAEO,SAASC,WAAW,QAIV;EAAA,IAHbtB,GAAG,SAAHA,GAAG;EAIH,oBACI,oBAAC,cAAQ;IACL,QAAQ,eACJ,uDACI,oBAAC,OAAO;MAAC,KAAK,EAAE;QAAEuB,MAAM,EAAE;MAAO,CAAE;MAAC,KAAK,EAAE;IAAE,EAAG,eAChD,oBAAC,OAAO;MAAC,KAAK,EAAE;QAAEC,KAAK,EAAE;MAAM,CAAE;MAAC,KAAK,EAAE;IAAE,EAAG,eAC9C,oBAAC,OAAO;MAAC,KAAK,EAAE;QAAEA,KAAK,EAAE;MAAM,CAAE;MAAC,KAAK,EAAE;IAAE,EAAG;EAErD,gBAED,oBAAC,kBAAkB;IAAC,GAAG,EAAExB;EAAI,EAAG,CACzB;AAEnB"}
|
package/ui/Placeholder.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["Placeholder","children","className"],"sources":["Placeholder.tsx"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport \"./Placeholder.css\";\n\nimport * as React from \"react\";\nimport { ReactNode } from \"react\";\n\nexport function Placeholder({\n children,\n className\n}: {\n children: ReactNode;\n className?: string;\n}): JSX.Element {\n return <div className={className || \"Placeholder__root\"}>{children}</div>;\n}\n"],"mappings":";;;;;;;AAQA;AAEA;AAVA;AACA;AACA;AACA;AACA;AACA;AACA;;AAOO,SAASA,WAAW,OAMX;EAAA,IALZC,QAAQ,QAARA,QAAQ;IACRC,SAAS,QAATA,SAAS;EAKT,oBAAO;IAAK,SAAS,EAAEA,SAAS,IAAI;EAAoB,GAAED,QAAQ,CAAO;AAC7E"}
|
package/ui/TextInput.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["TextInput","label","value","onChange","placeholder","dataTestId","e","target"],"sources":["TextInput.tsx"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\n\nimport \"./Input.css\";\n\nimport * as React from \"react\";\n\ntype Props = Readonly<{\n \"data-test-id\"?: string;\n label: string;\n onChange: (val: string) => void;\n placeholder?: string;\n value: string;\n}>;\n\nexport default function TextInput({\n label,\n value,\n onChange,\n placeholder = \"\",\n \"data-test-id\": dataTestId\n}: Props): JSX.Element {\n return (\n <div className=\"Input__wrapper\">\n <label className=\"Input__label\">{label}</label>\n <input\n type=\"text\"\n className=\"Input__input\"\n placeholder={placeholder}\n value={value}\n onChange={e => {\n onChange(e.target.value);\n }}\n data-test-id={dataTestId}\n />\n </div>\n );\n}\n"],"mappings":";;;;;;;AAQA;AAEA;AAVA;AACA;AACA;AACA;AACA;AACA;AACA;;AAce,SAASA,SAAS,OAMV;EAAA,IALnBC,KAAK,QAALA,KAAK;IACLC,KAAK,QAALA,KAAK;IACLC,SAAQ,QAARA,QAAQ;IAAA,wBACRC,WAAW;IAAXA,WAAW,iCAAG,EAAE;IACAC,UAAU,QAA1B,cAAc;EAEd,oBACI;IAAK,SAAS,EAAC;EAAgB,gBAC3B;IAAO,SAAS,EAAC;EAAc,GAAEJ,KAAK,CAAS,eAC/C;IACI,IAAI,EAAC,MAAM;IACX,SAAS,EAAC,cAAc;IACxB,WAAW,EAAEG,WAAY;IACzB,KAAK,EAAEF,KAAM;IACb,QAAQ,EAAE,kBAAAI,CAAC,EAAI;MACXH,SAAQ,CAACG,CAAC,CAACC,MAAM,CAACL,KAAK,CAAC;IAC5B,CAAE;IACF,gBAAcG;EAAW,EAC3B,CACA;AAEd"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
interface ToolbarActionDialogProps {
|
|
3
|
+
disabled: boolean;
|
|
4
|
+
buttonLabel?: string;
|
|
5
|
+
buttonAriaLabel: string;
|
|
6
|
+
buttonClassName: string;
|
|
7
|
+
buttonIconClassName: string;
|
|
8
|
+
children: React.ReactNode | React.ReactNode[];
|
|
9
|
+
stopCloseOnClickSelf?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare const ToolbarActionDialog: React.FC<ToolbarActionDialogProps>;
|
|
12
|
+
export {};
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default;
|
|
4
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
5
|
+
Object.defineProperty(exports, "__esModule", {
|
|
6
|
+
value: true
|
|
7
|
+
});
|
|
8
|
+
exports.ToolbarActionDialog = void 0;
|
|
9
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
10
|
+
var React = _interopRequireWildcard(require("react"));
|
|
11
|
+
function MenuContainer(_ref) {
|
|
12
|
+
var children = _ref.children,
|
|
13
|
+
menuContainerRef = _ref.menuContainerRef,
|
|
14
|
+
onClose = _ref.onClose;
|
|
15
|
+
var handleKeyDown = function handleKeyDown(event) {
|
|
16
|
+
var key = event.key;
|
|
17
|
+
if (["Escape", "ArrowUp", "ArrowDown", "Tab"].includes(key)) {
|
|
18
|
+
event.preventDefault();
|
|
19
|
+
}
|
|
20
|
+
if (key === "Escape" || key === "Tab") {
|
|
21
|
+
onClose();
|
|
22
|
+
}
|
|
23
|
+
};
|
|
24
|
+
var handleContainerClick = function handleContainerClick(e) {
|
|
25
|
+
e.preventDefault();
|
|
26
|
+
console.log("click", e);
|
|
27
|
+
};
|
|
28
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
29
|
+
style: {
|
|
30
|
+
position: "relative"
|
|
31
|
+
}
|
|
32
|
+
}, /*#__PURE__*/React.createElement("div", {
|
|
33
|
+
onClick: function onClick(e) {
|
|
34
|
+
return handleContainerClick(e);
|
|
35
|
+
},
|
|
36
|
+
style: {
|
|
37
|
+
position: "absolute",
|
|
38
|
+
top: -10,
|
|
39
|
+
left: 0,
|
|
40
|
+
width: 240,
|
|
41
|
+
backgroundColor: "#fff"
|
|
42
|
+
},
|
|
43
|
+
ref: menuContainerRef !== null && menuContainerRef !== void 0 ? menuContainerRef : null,
|
|
44
|
+
onKeyDown: handleKeyDown
|
|
45
|
+
}, children));
|
|
46
|
+
}
|
|
47
|
+
var ToolbarActionDialog = function ToolbarActionDialog(_ref2) {
|
|
48
|
+
var disabled = _ref2.disabled,
|
|
49
|
+
buttonAriaLabel = _ref2.buttonAriaLabel,
|
|
50
|
+
buttonClassName = _ref2.buttonClassName,
|
|
51
|
+
buttonIconClassName = _ref2.buttonIconClassName,
|
|
52
|
+
buttonLabel = _ref2.buttonLabel,
|
|
53
|
+
children = _ref2.children,
|
|
54
|
+
stopCloseOnClickSelf = _ref2.stopCloseOnClickSelf;
|
|
55
|
+
var menuWindowRef = (0, React.useRef)(null);
|
|
56
|
+
var _useState = (0, React.useState)(false),
|
|
57
|
+
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
|
|
58
|
+
showDropDown = _useState2[0],
|
|
59
|
+
setShowDropDown = _useState2[1];
|
|
60
|
+
var handleClose = function handleClose() {
|
|
61
|
+
if (menuWindowRef && menuWindowRef.current) {
|
|
62
|
+
setShowDropDown(false);
|
|
63
|
+
menuWindowRef.current.focus();
|
|
64
|
+
}
|
|
65
|
+
};
|
|
66
|
+
(0, React.useEffect)(function () {
|
|
67
|
+
if (!showDropDown) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
var handle = function handle(event) {
|
|
71
|
+
/* const target = event.target;
|
|
72
|
+
if (!button.contains(target as Node)) {
|
|
73
|
+
setShowDropDown(false);
|
|
74
|
+
}*/
|
|
75
|
+
console.log("handle", event);
|
|
76
|
+
};
|
|
77
|
+
document.addEventListener("click", handle);
|
|
78
|
+
return function () {
|
|
79
|
+
document.removeEventListener("click", handle);
|
|
80
|
+
};
|
|
81
|
+
}, [showDropDown, stopCloseOnClickSelf]);
|
|
82
|
+
return /*#__PURE__*/React.createElement("div", {
|
|
83
|
+
style: {
|
|
84
|
+
position: "relative"
|
|
85
|
+
}
|
|
86
|
+
}, /*#__PURE__*/React.createElement("button", {
|
|
87
|
+
style: {
|
|
88
|
+
position: "relative"
|
|
89
|
+
},
|
|
90
|
+
disabled: disabled,
|
|
91
|
+
"aria-label": buttonAriaLabel || buttonLabel,
|
|
92
|
+
className: buttonClassName,
|
|
93
|
+
onClick: function onClick() {
|
|
94
|
+
setShowDropDown(!showDropDown);
|
|
95
|
+
}
|
|
96
|
+
}, buttonIconClassName && /*#__PURE__*/React.createElement("span", {
|
|
97
|
+
className: buttonIconClassName
|
|
98
|
+
}), buttonLabel && /*#__PURE__*/React.createElement("span", {
|
|
99
|
+
className: "text dropdown-button-text"
|
|
100
|
+
}, buttonLabel), /*#__PURE__*/React.createElement("i", {
|
|
101
|
+
className: "chevron-down"
|
|
102
|
+
})), showDropDown && /*#__PURE__*/React.createElement(MenuContainer, {
|
|
103
|
+
onClose: handleClose
|
|
104
|
+
}, children));
|
|
105
|
+
};
|
|
106
|
+
exports.ToolbarActionDialog = ToolbarActionDialog;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["MenuContainer","children","menuContainerRef","onClose","handleKeyDown","event","key","includes","preventDefault","handleContainerClick","e","console","log","position","top","left","width","backgroundColor","ToolbarActionDialog","disabled","buttonAriaLabel","buttonClassName","buttonIconClassName","buttonLabel","stopCloseOnClickSelf","menuWindowRef","useRef","useState","showDropDown","setShowDropDown","handleClose","current","focus","useEffect","handle","document","addEventListener","removeEventListener"],"sources":["ToolbarActionDialog.tsx"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport * as React from \"react\";\n\nfunction MenuContainer({\n children,\n menuContainerRef,\n onClose\n}: {\n children: React.ReactNode | React.ReactNode[];\n menuContainerRef?: React.Ref<HTMLDivElement>;\n onClose: () => void;\n}) {\n const handleKeyDown = (event: React.KeyboardEvent<HTMLDivElement>) => {\n const key = event.key;\n\n if ([\"Escape\", \"ArrowUp\", \"ArrowDown\", \"Tab\"].includes(key)) {\n event.preventDefault();\n }\n\n if (key === \"Escape\" || key === \"Tab\") {\n onClose();\n }\n };\n\n const handleContainerClick = (e: React.MouseEvent<HTMLDivElement, MouseEvent>) => {\n e.preventDefault();\n console.log(\"click\", e);\n };\n\n return (\n <div style={{ position: \"relative\" }}>\n <div\n onClick={e => handleContainerClick(e)}\n style={{\n position: \"absolute\",\n top: -10,\n left: 0,\n width: 240,\n backgroundColor: \"#fff\"\n }}\n ref={menuContainerRef ?? null}\n onKeyDown={handleKeyDown}\n >\n {children}\n </div>\n </div>\n );\n}\ninterface ToolbarActionDialogProps {\n disabled: boolean;\n buttonLabel?: string;\n buttonAriaLabel: string;\n buttonClassName: string;\n buttonIconClassName: string;\n children: React.ReactNode | React.ReactNode[];\n stopCloseOnClickSelf?: boolean;\n}\n\nexport const ToolbarActionDialog: React.FC<ToolbarActionDialogProps> = ({\n disabled,\n buttonAriaLabel,\n buttonClassName,\n buttonIconClassName,\n buttonLabel,\n children,\n stopCloseOnClickSelf\n}): JSX.Element => {\n const menuWindowRef = useRef<HTMLDivElement>(null);\n const [showDropDown, setShowDropDown] = useState(false);\n\n const handleClose = () => {\n if (menuWindowRef && menuWindowRef.current) {\n setShowDropDown(false);\n menuWindowRef.current.focus();\n }\n };\n\n useEffect(() => {\n if (!showDropDown) {\n return;\n }\n\n const handle = (event: MouseEvent) => {\n /* const target = event.target;\n if (!button.contains(target as Node)) {\n setShowDropDown(false);\n }*/\n console.log(\"handle\", event);\n };\n document.addEventListener(\"click\", handle);\n\n return () => {\n document.removeEventListener(\"click\", handle);\n };\n }, [showDropDown, stopCloseOnClickSelf]);\n\n return (\n <div style={{ position: \"relative\" }}>\n <button\n style={{ position: \"relative\" }}\n disabled={disabled}\n aria-label={buttonAriaLabel || buttonLabel}\n className={buttonClassName}\n onClick={() => {\n setShowDropDown(!showDropDown);\n }}\n >\n {buttonIconClassName && <span className={buttonIconClassName} />}\n {buttonLabel && <span className=\"text dropdown-button-text\">{buttonLabel}</span>}\n <i className=\"chevron-down\" />\n </button>\n {showDropDown && <MenuContainer onClose={handleClose}>{children}</MenuContainer>}\n </div>\n );\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["generateInitialLexicalValue","JSON","stringify","root","children","direction","format","indent","type","version"
|
|
1
|
+
{"version":3,"names":["generateInitialLexicalValue","JSON","stringify","root","children","direction","format","indent","type","version"],"sources":["generateInitialLexicalValue.ts"],"sourcesContent":["import { LexicalValue } from \"~/types\";\n\n/**\n * @description Basic JSON data string that will initialize the editor.\n */\nexport const generateInitialLexicalValue = (): LexicalValue => {\n return JSON.stringify({\n root: {\n children: [\n {\n children: [],\n direction: null,\n format: \"\",\n indent: 0,\n type: \"paragraph\",\n version: 1\n }\n ],\n direction: null,\n format: \"\",\n indent: 0,\n type: \"root\",\n version: 1\n }\n });\n};\n"],"mappings":";;;;;;AAEA;AACA;AACA;AACO,IAAMA,2BAA2B,GAAG,SAA9BA,2BAA2B,GAAuB;EAC3D,OAAOC,IAAI,CAACC,SAAS,CAAC;IAClBC,IAAI,EAAE;MACFC,QAAQ,EAAE,CACN;QACIA,QAAQ,EAAE,EAAE;QACZC,SAAS,EAAE,IAAI;QACfC,MAAM,EAAE,EAAE;QACVC,MAAM,EAAE,CAAC;QACTC,IAAI,EAAE,WAAW;QACjBC,OAAO,EAAE;MACb,CAAC,CACJ;MACDJ,SAAS,EAAE,IAAI;MACfC,MAAM,EAAE,EAAE;MACVC,MAAM,EAAE,CAAC;MACTC,IAAI,EAAE,MAAM;MACZC,OAAO,EAAE;IACb;EACJ,CAAC,CAAC;AACN,CAAC;AAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getDOMRangeRect","nativeSelection","rootElement","domRange","getRangeAt","rect","anchorNode","inner","firstElementChild","getBoundingClientRect"],"sources":["getDOMRangeRect.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nexport function getDOMRangeRect(nativeSelection: Selection, rootElement: HTMLElement): DOMRect {\n const domRange = nativeSelection.getRangeAt(0);\n\n let rect;\n\n if (nativeSelection.anchorNode === rootElement) {\n let inner = rootElement;\n while (inner.firstElementChild != null) {\n inner = inner.firstElementChild as HTMLElement;\n }\n rect = inner.getBoundingClientRect();\n } else {\n rect = domRange.getBoundingClientRect();\n }\n\n return rect;\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,
|
|
1
|
+
{"version":3,"names":["getDOMRangeRect","nativeSelection","rootElement","domRange","getRangeAt","rect","anchorNode","inner","firstElementChild","getBoundingClientRect"],"sources":["getDOMRangeRect.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nexport function getDOMRangeRect(nativeSelection: Selection, rootElement: HTMLElement): DOMRect {\n const domRange = nativeSelection.getRangeAt(0);\n\n let rect;\n\n if (nativeSelection.anchorNode === rootElement) {\n let inner = rootElement;\n while (inner.firstElementChild != null) {\n inner = inner.firstElementChild as HTMLElement;\n }\n rect = inner.getBoundingClientRect();\n } else {\n rect = domRange.getBoundingClientRect();\n }\n\n return rect;\n}\n"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASA,eAAe,CAACC,eAA0B,EAAEC,WAAwB,EAAW;EAC3F,IAAMC,QAAQ,GAAGF,eAAe,CAACG,UAAU,CAAC,CAAC,CAAC;EAE9C,IAAIC,IAAI;EAER,IAAIJ,eAAe,CAACK,UAAU,KAAKJ,WAAW,EAAE;IAC5C,IAAIK,KAAK,GAAGL,WAAW;IACvB,OAAOK,KAAK,CAACC,iBAAiB,IAAI,IAAI,EAAE;MACpCD,KAAK,GAAGA,KAAK,CAACC,iBAAgC;IAClD;IACAH,IAAI,GAAGE,KAAK,CAACE,qBAAqB,EAAE;EACxC,CAAC,MAAM;IACHJ,IAAI,GAAGF,QAAQ,CAACM,qBAAqB,EAAE;EAC3C;EAEA,OAAOJ,IAAI;AACf"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { TextFormatting, TextBlockSelection, ToolbarState } from "../types";
|
|
2
|
+
import { ElementNode, LexicalEditor, LexicalNode, RangeSelection, TextNode } from "lexical";
|
|
3
|
+
export declare const getSelectionTextFormat: (selection: RangeSelection | undefined) => TextFormatting;
|
|
4
|
+
export declare const getToolbarState: (selection: RangeSelection, node: LexicalNode, parent: LexicalNode | null, element: LexicalNode | null, anchorNode: ElementNode | TextNode) => ToolbarState;
|
|
5
|
+
export declare const getLexicalTextSelectionState: (activeEditor: LexicalEditor, selection: RangeSelection) => TextBlockSelection | null;
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default;
|
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
|
5
|
+
value: true
|
|
6
|
+
});
|
|
7
|
+
exports.getToolbarState = exports.getSelectionTextFormat = exports.getLexicalTextSelectionState = void 0;
|
|
8
|
+
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
|
|
9
|
+
var _lexical = require("lexical");
|
|
10
|
+
var _utils = require("@lexical/utils");
|
|
11
|
+
var _getSelectedNode = require("./getSelectedNode");
|
|
12
|
+
var _link = require("@lexical/link");
|
|
13
|
+
var _WebinyListNode = require("../nodes/list-node/WebinyListNode");
|
|
14
|
+
var _richText = require("@lexical/rich-text");
|
|
15
|
+
var _TypographyElementNode = require("../nodes/TypographyElementNode");
|
|
16
|
+
var _FontColorNode = require("../nodes/FontColorNode");
|
|
17
|
+
var _WebinyQuoteNode = require("../nodes/WebinyQuoteNode");
|
|
18
|
+
var getSelectionTextFormat = function getSelectionTextFormat(selection) {
|
|
19
|
+
return !(0, _lexical.$isRangeSelection)(selection) ? {
|
|
20
|
+
italic: false,
|
|
21
|
+
bold: false,
|
|
22
|
+
underline: false,
|
|
23
|
+
code: false
|
|
24
|
+
} : {
|
|
25
|
+
bold: selection.hasFormat("bold"),
|
|
26
|
+
italic: selection.hasFormat("italic"),
|
|
27
|
+
underline: selection.hasFormat("underline"),
|
|
28
|
+
code: selection.hasFormat("code")
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
exports.getSelectionTextFormat = getSelectionTextFormat;
|
|
32
|
+
var getDefaultToolbarState = function getDefaultToolbarState() {
|
|
33
|
+
return {
|
|
34
|
+
bold: false,
|
|
35
|
+
italic: false,
|
|
36
|
+
underline: false,
|
|
37
|
+
code: false,
|
|
38
|
+
link: {
|
|
39
|
+
isSelected: false
|
|
40
|
+
},
|
|
41
|
+
list: {
|
|
42
|
+
isSelected: false
|
|
43
|
+
},
|
|
44
|
+
typography: {
|
|
45
|
+
isSelected: false
|
|
46
|
+
},
|
|
47
|
+
fontColor: {
|
|
48
|
+
isSelected: false
|
|
49
|
+
},
|
|
50
|
+
quote: {
|
|
51
|
+
isSelected: false
|
|
52
|
+
},
|
|
53
|
+
textType: undefined
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
var getToolbarState = function getToolbarState(selection, node, parent, element, anchorNode) {
|
|
57
|
+
var textFormat = getSelectionTextFormat(selection);
|
|
58
|
+
var state = getDefaultToolbarState();
|
|
59
|
+
state = (0, _objectSpread2.default)((0, _objectSpread2.default)({}, state), {}, {
|
|
60
|
+
bold: textFormat.bold,
|
|
61
|
+
italic: textFormat.italic,
|
|
62
|
+
underline: textFormat.underline,
|
|
63
|
+
code: textFormat.code
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// link
|
|
67
|
+
state.link.isSelected = (0, _link.$isLinkNode)(parent) || (0, _link.$isLinkNode)(node);
|
|
68
|
+
if (state.link.isSelected) {
|
|
69
|
+
state.textType = "link";
|
|
70
|
+
}
|
|
71
|
+
// font color
|
|
72
|
+
if ((0, _FontColorNode.$isFontColorNode)(node)) {
|
|
73
|
+
state.fontColor.isSelected = true;
|
|
74
|
+
}
|
|
75
|
+
if ((0, _WebinyListNode.$isWebinyListNode)(element)) {
|
|
76
|
+
var parentList = (0, _utils.$getNearestNodeOfType)(anchorNode, _WebinyListNode.WebinyListNode);
|
|
77
|
+
var type = parentList ? parentList.getListType() : element.getListType();
|
|
78
|
+
state.textType = type;
|
|
79
|
+
}
|
|
80
|
+
if ((0, _richText.$isHeadingNode)(node) || (0, _richText.$isHeadingNode)(element)) {
|
|
81
|
+
state.textType = "heading";
|
|
82
|
+
}
|
|
83
|
+
if ((0, _lexical.$isParagraphNode)(element)) {
|
|
84
|
+
state.textType = "paragraph";
|
|
85
|
+
}
|
|
86
|
+
if ((0, _TypographyElementNode.$isTypographyElementNode)(element)) {
|
|
87
|
+
state.typography.isSelected = true;
|
|
88
|
+
var value = element === null || element === void 0 ? void 0 : element.getTypographyValue();
|
|
89
|
+
if (value.tag.includes("h")) {
|
|
90
|
+
state.textType = "heading";
|
|
91
|
+
}
|
|
92
|
+
if (value.tag.includes("p")) {
|
|
93
|
+
state.textType = "paragraph";
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
if ((0, _TypographyElementNode.$isTypographyElementNode)(element)) {
|
|
97
|
+
state.fontColor.isSelected = true;
|
|
98
|
+
}
|
|
99
|
+
if ((0, _WebinyQuoteNode.$isWebinyQuoteNode)(element)) {
|
|
100
|
+
state.textType = "quoteblock";
|
|
101
|
+
state.quote.isSelected = true;
|
|
102
|
+
}
|
|
103
|
+
return state;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* @desc Get selection data and provide processed toolbar state and data about the text, element and parent nodes.
|
|
108
|
+
*/
|
|
109
|
+
exports.getToolbarState = getToolbarState;
|
|
110
|
+
var getLexicalTextSelectionState = function getLexicalTextSelectionState(activeEditor, selection) {
|
|
111
|
+
if ((0, _lexical.$isRangeSelection)(selection)) {
|
|
112
|
+
var anchorNode = selection.anchor.getNode();
|
|
113
|
+
var element = anchorNode.getKey() === "root" ? anchorNode : (0, _utils.$findMatchingParent)(anchorNode, function (e) {
|
|
114
|
+
var parent = e.getParent();
|
|
115
|
+
return parent !== null && (0, _lexical.$isRootOrShadowRoot)(parent);
|
|
116
|
+
});
|
|
117
|
+
if (element === null) {
|
|
118
|
+
element = anchorNode.getTopLevelElementOrThrow();
|
|
119
|
+
}
|
|
120
|
+
var elementKey = element.getKey();
|
|
121
|
+
var elementDOM = activeEditor.getElementByKey(elementKey);
|
|
122
|
+
|
|
123
|
+
// Update links
|
|
124
|
+
var node = (0, _getSelectedNode.getSelectedNode)(selection);
|
|
125
|
+
var parent = node.getParent();
|
|
126
|
+
var isElementDom = elementDOM !== null;
|
|
127
|
+
return {
|
|
128
|
+
// node/element data from selection
|
|
129
|
+
elementKey: elementKey,
|
|
130
|
+
element: element,
|
|
131
|
+
parent: parent,
|
|
132
|
+
node: node,
|
|
133
|
+
anchorNode: anchorNode,
|
|
134
|
+
selection: selection,
|
|
135
|
+
isElementDom: isElementDom,
|
|
136
|
+
state: getToolbarState(selection, node, parent, element, anchorNode)
|
|
137
|
+
};
|
|
138
|
+
}
|
|
139
|
+
return null;
|
|
140
|
+
};
|
|
141
|
+
exports.getLexicalTextSelectionState = getLexicalTextSelectionState;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["getSelectionTextFormat","selection","$isRangeSelection","italic","bold","underline","code","hasFormat","getDefaultToolbarState","link","isSelected","list","typography","fontColor","quote","textType","undefined","getToolbarState","node","parent","element","anchorNode","textFormat","state","$isLinkNode","$isFontColorNode","$isWebinyListNode","parentList","$getNearestNodeOfType","WebinyListNode","type","getListType","$isHeadingNode","$isParagraphNode","$isTypographyElementNode","value","getTypographyValue","tag","includes","$isWebinyQuoteNode","getLexicalTextSelectionState","activeEditor","anchor","getNode","getKey","$findMatchingParent","e","getParent","$isRootOrShadowRoot","getTopLevelElementOrThrow","elementKey","elementDOM","getElementByKey","getSelectedNode","isElementDom"],"sources":["getLexicalTextSelectionState.ts"],"sourcesContent":["import { TextFormatting, TextBlockSelection, ToolbarState, TypographyValue } from \"~/types\";\nimport {\n $isParagraphNode,\n $isRangeSelection,\n $isRootOrShadowRoot,\n ElementNode,\n LexicalEditor,\n LexicalNode,\n RangeSelection,\n TextNode\n} from \"lexical\";\nimport { $findMatchingParent, $getNearestNodeOfType } from \"@lexical/utils\";\nimport { getSelectedNode } from \"~/utils/getSelectedNode\";\nimport { $isLinkNode } from \"@lexical/link\";\nimport { $isWebinyListNode, WebinyListNode } from \"~/nodes/list-node/WebinyListNode\";\nimport { $isHeadingNode } from \"@lexical/rich-text\";\nimport { $isTypographyElementNode } from \"~/nodes/TypographyElementNode\";\nimport { $isFontColorNode } from \"~/nodes/FontColorNode\";\nimport { $isWebinyQuoteNode } from \"~/nodes/WebinyQuoteNode\";\n\nexport const getSelectionTextFormat = (selection: RangeSelection | undefined): TextFormatting => {\n return !$isRangeSelection(selection)\n ? {\n italic: false,\n bold: false,\n underline: false,\n code: false\n }\n : {\n bold: selection.hasFormat(\"bold\"),\n italic: selection.hasFormat(\"italic\"),\n underline: selection.hasFormat(\"underline\"),\n code: selection.hasFormat(\"code\")\n };\n};\n\nconst getDefaultToolbarState = (): ToolbarState => {\n return {\n bold: false,\n italic: false,\n underline: false,\n code: false,\n link: { isSelected: false },\n list: { isSelected: false },\n typography: { isSelected: false },\n fontColor: { isSelected: false },\n quote: { isSelected: false },\n textType: undefined\n };\n};\n\nexport const getToolbarState = (\n selection: RangeSelection,\n node: LexicalNode,\n parent: LexicalNode | null,\n element: LexicalNode | null,\n anchorNode: ElementNode | TextNode\n): ToolbarState => {\n const textFormat = getSelectionTextFormat(selection);\n let state: ToolbarState = getDefaultToolbarState();\n state = {\n ...state,\n bold: textFormat.bold,\n italic: textFormat.italic,\n underline: textFormat.underline,\n code: textFormat.code\n };\n\n // link\n state.link.isSelected = $isLinkNode(parent) || $isLinkNode(node);\n if (state.link.isSelected) {\n state.textType = \"link\";\n }\n // font color\n if ($isFontColorNode(node)) {\n state.fontColor.isSelected = true;\n }\n if ($isWebinyListNode(element)) {\n const parentList = $getNearestNodeOfType<WebinyListNode>(anchorNode, WebinyListNode);\n const type = parentList ? parentList.getListType() : element.getListType();\n state.textType = type;\n }\n if ($isHeadingNode(node) || $isHeadingNode(element)) {\n state.textType = \"heading\";\n }\n if ($isParagraphNode(element)) {\n state.textType = \"paragraph\";\n }\n if ($isTypographyElementNode(element)) {\n state.typography.isSelected = true;\n const value = element?.getTypographyValue() as TypographyValue;\n if (value.tag.includes(\"h\")) {\n state.textType = \"heading\";\n }\n if (value.tag.includes(\"p\")) {\n state.textType = \"paragraph\";\n }\n }\n if ($isTypographyElementNode(element)) {\n state.fontColor.isSelected = true;\n }\n if ($isWebinyQuoteNode(element)) {\n state.textType = \"quoteblock\";\n state.quote.isSelected = true;\n }\n\n return state;\n};\n\n/*\n * @desc Get selection data and provide processed toolbar state and data about the text, element and parent nodes.\n */\nexport const getLexicalTextSelectionState = (\n activeEditor: LexicalEditor,\n selection: RangeSelection\n): TextBlockSelection | null => {\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n let element =\n anchorNode.getKey() === \"root\"\n ? anchorNode\n : $findMatchingParent(anchorNode, e => {\n const parent = e.getParent();\n return parent !== null && $isRootOrShadowRoot(parent);\n });\n\n if (element === null) {\n element = anchorNode.getTopLevelElementOrThrow();\n }\n\n const elementKey = element.getKey();\n const elementDOM = activeEditor.getElementByKey(elementKey);\n\n // Update links\n const node = getSelectedNode(selection);\n const parent = node.getParent();\n const isElementDom = elementDOM !== null;\n\n return {\n // node/element data from selection\n elementKey,\n element,\n parent,\n node,\n anchorNode,\n selection,\n isElementDom,\n state: getToolbarState(selection, node, parent, element, anchorNode)\n };\n }\n return null;\n};\n"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["getSelectedNode","selection","anchor","focus","anchorNode","getNode","focusNode","isBackward","$isAtNodeEnd"],"sources":["getSelectedNode.ts"],"sourcesContent":["/**\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n *\n */\nimport { $isAtNodeEnd } from \"@lexical/selection\";\nimport { ElementNode, RangeSelection, TextNode } from \"lexical\";\n\nexport function getSelectedNode(selection: RangeSelection): TextNode | ElementNode {\n const anchor = selection.anchor;\n const focus = selection.focus;\n const anchorNode = selection.anchor.getNode();\n const focusNode = selection.focus.getNode();\n if (anchorNode === focusNode) {\n return anchorNode;\n }\n const isBackward = selection.isBackward();\n if (isBackward) {\n return $isAtNodeEnd(focus) ? anchorNode : focusNode;\n } else {\n return $isAtNodeEnd(anchor) ? focusNode : anchorNode;\n }\n}\n"],"mappings":";;;;;;AAOA;AAPA;AACA;AACA;AACA;AACA;AACA;AACA;;AAIO,SAASA,eAAe,CAACC,SAAyB,EAA0B;EAC/E,IAAMC,MAAM,GAAGD,SAAS,CAACC,MAAM;EAC/B,IAAMC,KAAK,GAAGF,SAAS,CAACE,KAAK;EAC7B,IAAMC,UAAU,GAAGH,SAAS,CAACC,MAAM,CAACG,OAAO,EAAE;EAC7C,IAAMC,SAAS,GAAGL,SAAS,CAACE,KAAK,CAACE,OAAO,EAAE;EAC3C,IAAID,UAAU,KAAKE,SAAS,EAAE;IAC1B,OAAOF,UAAU;EACrB;EACA,IAAMG,UAAU,GAAGN,SAAS,CAACM,UAAU,EAAE;EACzC,IAAIA,UAAU,EAAE;IACZ,OAAO,IAAAC,uBAAY,EAACL,KAAK,CAAC,GAAGC,UAAU,GAAGE,SAAS;EACvD,CAAC,MAAM;IACH,OAAO,IAAAE,uBAAY,EAACN,MAAM,CAAC,GAAGI,SAAS,GAAGF,UAAU;EACxD;AACJ"}
|
package/utils/isValidJSON.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["isValidJSON","value","o","JSON","parse","Array","isArray"
|
|
1
|
+
{"version":3,"names":["isValidJSON","value","o","JSON","parse","Array","isArray"],"sources":["isValidJSON.ts"],"sourcesContent":["export const isValidJSON = (value: string | undefined | null): boolean => {\n if (!value) {\n return false;\n }\n try {\n const o = JSON.parse(value);\n return !!o && typeof o === \"object\" && !Array.isArray(o);\n } catch {\n return false;\n }\n};\n"],"mappings":";;;;;;AAAO,IAAMA,WAAW,GAAG,SAAdA,WAAW,CAAIC,KAAgC,EAAc;EACtE,IAAI,CAACA,KAAK,EAAE;IACR,OAAO,KAAK;EAChB;EACA,IAAI;IACA,IAAMC,CAAC,GAAGC,IAAI,CAACC,KAAK,CAACH,KAAK,CAAC;IAC3B,OAAO,CAAC,CAACC,CAAC,IAAI,OAAOA,CAAC,KAAK,QAAQ,IAAI,CAACG,KAAK,CAACC,OAAO,CAACJ,CAAC,CAAC;EAC5D,CAAC,CAAC,gBAAM;IACJ,OAAO,KAAK;EAChB;AACJ,CAAC;AAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["
|
|
1
|
+
{"version":3,"names":["isValidLexicalData","editorStateValue","isValidJSON","data","JSON","parse"],"sources":["isValidLexicalData.ts"],"sourcesContent":["import { isValidJSON } from \"~/utils/isValidJSON\";\nimport { LexicalValue } from \"~/types\";\n/*\n * @description Checks for valid lexical data.\n *\n * Check for first level of properties that empty editor state data need to have.\n * @see generateInitialLexicalValue\n */\nexport const isValidLexicalData = (editorStateValue: LexicalValue | null): boolean => {\n if (!editorStateValue) {\n return false;\n }\n if (!isValidJSON(editorStateValue)) {\n return false;\n }\n const data = JSON.parse(editorStateValue);\n return !!data[\"root\"];\n};\n"],"mappings":";;;;;;AAAA;AAEA;AACA;AACA;AACA;AACA;AACA;AACO,IAAMA,kBAAkB,GAAG,SAArBA,kBAAkB,CAAIC,gBAAqC,EAAc;EAClF,IAAI,CAACA,gBAAgB,EAAE;IACnB,OAAO,KAAK;EAChB;EACA,IAAI,CAAC,IAAAC,wBAAW,EAACD,gBAAgB,CAAC,EAAE;IAChC,OAAO,KAAK;EAChB;EACA,IAAME,IAAI,GAAGC,IAAI,CAACC,KAAK,CAACJ,gBAAgB,CAAC;EACzC,OAAO,CAAC,CAACE,IAAI,CAAC,MAAM,CAAC;AACzB,CAAC;AAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.clearNodeFormatting = void 0;
|
|
7
|
+
var _lexical = require("lexical");
|
|
8
|
+
var _selection = require("@lexical/selection");
|
|
9
|
+
var _utils = require("@lexical/utils");
|
|
10
|
+
var _LexicalDecoratorBlockNode = require("@lexical/react/LexicalDecoratorBlockNode");
|
|
11
|
+
var clearNodeFormatting = function clearNodeFormatting(activeEditor, selection) {
|
|
12
|
+
activeEditor.update(function () {
|
|
13
|
+
if ((0, _lexical.$isRangeSelection)(selection)) {
|
|
14
|
+
(0, _selection.$selectAll)(selection);
|
|
15
|
+
selection.getNodes().forEach(function (node) {
|
|
16
|
+
if ((0, _lexical.$isTextNode)(node)) {
|
|
17
|
+
node.setFormat(0);
|
|
18
|
+
node.setStyle("");
|
|
19
|
+
(0, _utils.$getNearestBlockElementAncestorOrThrow)(node).setFormat("");
|
|
20
|
+
}
|
|
21
|
+
if ((0, _LexicalDecoratorBlockNode.$isDecoratorBlockNode)(node)) {
|
|
22
|
+
node.setFormat("");
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
};
|
|
28
|
+
exports.clearNodeFormatting = clearNodeFormatting;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["clearNodeFormatting","activeEditor","selection","update","$isRangeSelection","$selectAll","getNodes","forEach","node","$isTextNode","setFormat","setStyle","$getNearestBlockElementAncestorOrThrow","$isDecoratorBlockNode"],"sources":["clearNodeFormating.ts"],"sourcesContent":["import {\n $isRangeSelection,\n $isTextNode,\n GridSelection,\n LexicalEditor,\n NodeSelection,\n RangeSelection\n} from \"lexical\";\nimport { $selectAll } from \"@lexical/selection\";\nimport { $getNearestBlockElementAncestorOrThrow } from \"@lexical/utils\";\nimport { $isDecoratorBlockNode } from \"@lexical/react/LexicalDecoratorBlockNode\";\n\nexport const clearNodeFormatting = (\n activeEditor: LexicalEditor,\n selection: RangeSelection | NodeSelection | GridSelection | null\n) => {\n activeEditor.update(() => {\n if ($isRangeSelection(selection)) {\n $selectAll(selection);\n selection.getNodes().forEach(node => {\n if ($isTextNode(node)) {\n node.setFormat(0);\n node.setStyle(\"\");\n $getNearestBlockElementAncestorOrThrow(node).setFormat(\"\");\n }\n if ($isDecoratorBlockNode(node)) {\n node.setFormat(\"\");\n }\n });\n }\n });\n};\n"],"mappings":";;;;;;AAAA;AAQA;AACA;AACA;AAEO,IAAMA,mBAAmB,GAAG,SAAtBA,mBAAmB,CAC5BC,YAA2B,EAC3BC,SAAgE,EAC/D;EACDD,YAAY,CAACE,MAAM,CAAC,YAAM;IACtB,IAAI,IAAAC,0BAAiB,EAACF,SAAS,CAAC,EAAE;MAC9B,IAAAG,qBAAU,EAACH,SAAS,CAAC;MACrBA,SAAS,CAACI,QAAQ,EAAE,CAACC,OAAO,CAAC,UAAAC,IAAI,EAAI;QACjC,IAAI,IAAAC,oBAAW,EAACD,IAAI,CAAC,EAAE;UACnBA,IAAI,CAACE,SAAS,CAAC,CAAC,CAAC;UACjBF,IAAI,CAACG,QAAQ,CAAC,EAAE,CAAC;UACjB,IAAAC,6CAAsC,EAACJ,IAAI,CAAC,CAACE,SAAS,CAAC,EAAE,CAAC;QAC9D;QACA,IAAI,IAAAG,gDAAqB,EAACL,IAAI,CAAC,EAAE;UAC7BA,IAAI,CAACE,SAAS,CAAC,EAAE,CAAC;QACtB;MACJ,CAAC,CAAC;IACN;EACJ,CAAC,CAAC;AACN,CAAC;AAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.formatToParagraph = void 0;
|
|
7
|
+
var _lexical = require("lexical");
|
|
8
|
+
var _selection = require("@lexical/selection");
|
|
9
|
+
var formatToParagraph = function formatToParagraph(editor) {
|
|
10
|
+
editor.update(function () {
|
|
11
|
+
var selection = (0, _lexical.$getSelection)();
|
|
12
|
+
if ((0, _lexical.$isRangeSelection)(selection) || (0, _lexical.DEPRECATED_$isGridSelection)(selection)) {
|
|
13
|
+
(0, _selection.$wrapNodes)(selection, function () {
|
|
14
|
+
return (0, _lexical.$createParagraphNode)();
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
exports.formatToParagraph = formatToParagraph;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["formatToParagraph","editor","update","selection","$getSelection","$isRangeSelection","DEPRECATED_$isGridSelection","$wrapNodes","$createParagraphNode"],"sources":["formatToParagraph.ts"],"sourcesContent":["import {\n $createParagraphNode,\n $getSelection,\n $isRangeSelection,\n DEPRECATED_$isGridSelection,\n LexicalEditor\n} from \"lexical\";\nimport { $wrapNodes } from \"@lexical/selection\";\n\nexport const formatToParagraph = (editor: LexicalEditor) => {\n editor.update(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection) || DEPRECATED_$isGridSelection(selection)) {\n $wrapNodes(selection, () => $createParagraphNode());\n }\n });\n};\n"],"mappings":";;;;;;AAAA;AAOA;AAEO,IAAMA,iBAAiB,GAAG,SAApBA,iBAAiB,CAAIC,MAAqB,EAAK;EACxDA,MAAM,CAACC,MAAM,CAAC,YAAM;IAChB,IAAMC,SAAS,GAAG,IAAAC,sBAAa,GAAE;IAEjC,IAAI,IAAAC,0BAAiB,EAACF,SAAS,CAAC,IAAI,IAAAG,oCAA2B,EAACH,SAAS,CAAC,EAAE;MACxE,IAAAI,qBAAU,EAACJ,SAAS,EAAE;QAAA,OAAM,IAAAK,6BAAoB,GAAE;MAAA,EAAC;IACvD;EACJ,CAAC,CAAC;AACN,CAAC;AAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.formatToQuote = void 0;
|
|
7
|
+
var _lexical = require("lexical");
|
|
8
|
+
var _selection = require("@lexical/selection");
|
|
9
|
+
var _WebinyQuoteNode = require("../../nodes/WebinyQuoteNode");
|
|
10
|
+
var formatToQuote = function formatToQuote(editor, themeStyleId) {
|
|
11
|
+
editor.update(function () {
|
|
12
|
+
var selection = (0, _lexical.$getSelection)();
|
|
13
|
+
if ((0, _lexical.$isRangeSelection)(selection) || (0, _lexical.DEPRECATED_$isGridSelection)(selection)) {
|
|
14
|
+
(0, _selection.$wrapNodes)(selection, function () {
|
|
15
|
+
return (0, _WebinyQuoteNode.$createWebinyQuoteNode)(themeStyleId);
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
};
|
|
20
|
+
exports.formatToQuote = formatToQuote;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["formatToQuote","editor","themeStyleId","update","selection","$getSelection","$isRangeSelection","DEPRECATED_$isGridSelection","$wrapNodes","$createWebinyQuoteNode"],"sources":["formatToQuote.ts"],"sourcesContent":["import {\n $getSelection,\n $isRangeSelection,\n DEPRECATED_$isGridSelection,\n LexicalEditor\n} from \"lexical\";\nimport { $wrapNodes } from \"@lexical/selection\";\nimport { $createWebinyQuoteNode } from \"~/nodes/WebinyQuoteNode\";\n\nexport const formatToQuote = (editor: LexicalEditor, themeStyleId?: string) => {\n editor.update(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection) || DEPRECATED_$isGridSelection(selection)) {\n $wrapNodes(selection, () => $createWebinyQuoteNode(themeStyleId));\n }\n });\n};\n"],"mappings":";;;;;;AAAA;AAMA;AACA;AAEO,IAAMA,aAAa,GAAG,SAAhBA,aAAa,CAAIC,MAAqB,EAAEC,YAAqB,EAAK;EAC3ED,MAAM,CAACE,MAAM,CAAC,YAAM;IAChB,IAAMC,SAAS,GAAG,IAAAC,sBAAa,GAAE;IACjC,IAAI,IAAAC,0BAAiB,EAACF,SAAS,CAAC,IAAI,IAAAG,oCAA2B,EAACH,SAAS,CAAC,EAAE;MACxE,IAAAI,qBAAU,EAACJ,SAAS,EAAE;QAAA,OAAM,IAAAK,uCAAsB,EAACP,YAAY,CAAC;MAAA,EAAC;IACrE;EACJ,CAAC,CAAC;AACN,CAAC;AAAC"}
|