@frontify/guideline-blocks-settings 2.0.0 → 2.0.2
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/dist/components/Attachments/AttachmentItem.es.js +83 -83
- package/dist/components/Attachments/AttachmentItem.es.js.map +1 -1
- package/dist/components/Attachments/Attachments.es.js +51 -54
- package/dist/components/Attachments/Attachments.es.js.map +1 -1
- package/dist/components/BlockInjectButton/BlockInjectButton.es.js +56 -57
- package/dist/components/BlockInjectButton/BlockInjectButton.es.js.map +1 -1
- package/dist/components/BlockItemWrapper/BlockItemWrapper.es.js +25 -25
- package/dist/components/BlockItemWrapper/BlockItemWrapper.es.js.map +1 -1
- package/dist/components/BlockItemWrapper/Toolbar/context/MultiFlyoutContext.es.js +3 -3
- package/dist/components/Link/LinkInput.es.js +35 -35
- package/dist/components/Link/LinkInput.es.js.map +1 -1
- package/dist/components/Link/LinkSelector/LinkSelector.es.js +31 -31
- package/dist/components/Link/LinkSelector/LinkSelector.es.js.map +1 -1
- package/dist/components/Link/helpers/filterDocumentSectionsWithUnreadableTitles.es.js +2 -5
- package/dist/components/Link/helpers/filterDocumentSectionsWithUnreadableTitles.es.js.map +1 -1
- package/dist/components/Link/utils/getUrl.es.js +9 -15
- package/dist/components/Link/utils/getUrl.es.js.map +1 -1
- package/dist/components/RichTextEditor/RichTextEditor.es.js +39 -39
- package/dist/components/RichTextEditor/RichTextEditor.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/ButtonMarkupElement/ButtonMarkupElementNode.es.js +24 -25
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/ButtonMarkupElement/ButtonMarkupElementNode.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/components/ButtonButton.es.js +6 -6
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/components/ButtonButton.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/components/FloatingButton/InsertButtonModal/useInsertModal.es.js +25 -25
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/components/FloatingButton/InsertButtonModal/useInsertModal.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/createButtonPlugin.es.js +29 -33
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/createButtonPlugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/transforms/submitFloatingButton.es.js +6 -6
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/transforms/submitFloatingButton.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/transforms/unwrapButton.es.js +22 -23
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/transforms/unwrapButton.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/transforms/upsertButton.es.js +61 -63
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/transforms/upsertButton.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/transforms/upsertButtonText.es.js +6 -6
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/transforms/upsertButtonText.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/utils/getButtonStyle.es.js +6 -7
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/utils/getButtonStyle.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/withButton.es.js +21 -21
- package/dist/components/RichTextEditor/plugins/ButtonPlugin/withButton.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/ColumnBreakPlugin/ColumnBreakPlugin.es.js +15 -19
- package/dist/components/RichTextEditor/plugins/ColumnBreakPlugin/ColumnBreakPlugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/LinkPlugin/FloatingLink/CustomFloatingLink.es.js +5 -5
- package/dist/components/RichTextEditor/plugins/LinkPlugin/FloatingLink/InsertLinkModal/InsertModal.es.js +13 -13
- package/dist/components/RichTextEditor/plugins/LinkPlugin/FloatingLink/InsertLinkModal/InsertModal.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/LinkPlugin/FloatingLink/InsertLinkModal/useInsertModal.es.js +23 -23
- package/dist/components/RichTextEditor/plugins/LinkPlugin/FloatingLink/InsertLinkModal/useInsertModal.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/LinkPlugin/LinkMarkupElement/LinkMarkupElementNode.es.js +7 -8
- package/dist/components/RichTextEditor/plugins/LinkPlugin/LinkMarkupElement/LinkMarkupElementNode.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/LinkPlugin/index.es.js +23 -27
- package/dist/components/RichTextEditor/plugins/LinkPlugin/index.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/LinkPlugin/utils/getUrl.es.js +6 -9
- package/dist/components/RichTextEditor/plugins/LinkPlugin/utils/getUrl.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom1Plugin.es.js +24 -28
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom1Plugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom2Plugin.es.js +24 -28
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom2Plugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom3Plugin.es.js +24 -28
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/custom3Plugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading1Plugin.es.js +24 -28
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading1Plugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading2Plugin.es.js +24 -28
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading2Plugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading3Plugin.es.js +24 -28
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading3Plugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading4Plugin.es.js +24 -28
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/heading4Plugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/imageCaptionPlugin.es.js +25 -29
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/imageCaptionPlugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/imageTitlePlugin.es.js +25 -29
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/imageTitlePlugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/paragraphPlugin.es.js +26 -30
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/paragraphPlugin.es.js.map +1 -1
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/quotePlugin.es.js +26 -30
- package/dist/components/RichTextEditor/plugins/TextStylePlugins/quotePlugin.es.js.map +1 -1
- package/dist/helpers/customCoordinatesGetterFactory.es.js +18 -18
- package/dist/helpers/customCoordinatesGetterFactory.es.js.map +1 -1
- package/dist/hooks/useAttachments.es.js +6 -6
- package/dist/hooks/useAttachments.es.js.map +1 -1
- package/dist/index.cjs.js +7 -7
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.d.ts +0 -15
- package/dist/index.es.js +208 -208
- package/dist/index.umd.js +7 -7
- package/dist/index.umd.js.map +1 -1
- package/dist/settings/background.es.js +4 -4
- package/dist/settings/background.es.js.map +1 -1
- package/dist/settings/border.es.js +17 -17
- package/dist/settings/border.es.js.map +1 -1
- package/dist/settings/borderRadius.es.js +12 -15
- package/dist/settings/borderRadius.es.js.map +1 -1
- package/dist/settings/borderRadiusExtended.es.js +25 -28
- package/dist/settings/borderRadiusExtended.es.js.map +1 -1
- package/dist/settings/gutter.es.js +17 -20
- package/dist/settings/gutter.es.js.map +1 -1
- package/dist/settings/margin.es.js +14 -14
- package/dist/settings/margin.es.js.map +1 -1
- package/dist/settings/marginExtended.es.js +29 -29
- package/dist/settings/marginExtended.es.js.map +1 -1
- package/dist/settings/padding.es.js +14 -14
- package/dist/settings/padding.es.js.map +1 -1
- package/dist/settings/paddingExtended.es.js +28 -28
- package/dist/settings/paddingExtended.es.js.map +1 -1
- package/dist/settings/securityDownloadable.es.js +8 -11
- package/dist/settings/securityDownloadable.es.js.map +1 -1
- package/dist/styles.css +1 -1
- package/dist/utilities/color/getReadableColor.es.js +6 -6
- package/dist/utilities/color/getReadableColor.es.js.map +1 -1
- package/dist/utilities/color/isDark.es.js +4 -4
- package/dist/utilities/color/isDark.es.js.map +1 -1
- package/package.json +16 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkSelector.es.js","sources":["../../../../src/components/Link/LinkSelector/LinkSelector.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type Document, type DocumentPage, type DocumentSection } from '@frontify/app-bridge';\nimport { Button, Dialog, ScrollArea } from '@frontify/fondue/components';\nimport { IconLink } from '@frontify/fondue/icons';\nimport { type KeyboardEvent, type ReactElement, useEffect, useState } from 'react';\n\nimport './LinkSelector.css';\nimport { DocumentLinks } from './DocumentLinks';\n\ntype LinkSelectorProps = {\n url: string;\n onUrlChange?: (value: string) => void;\n buttonSize?: 'small' | 'medium' | 'large';\n getAllDocuments: () => Promise<Document[]>;\n getDocumentSectionsByDocumentPageId: (documentPageId: number) => Promise<DocumentSection[]>;\n getDocumentPagesByDocumentId: (documentId: number) => Promise<DocumentPage[]>;\n};\n\nexport const LinkSelector = ({\n url,\n onUrlChange,\n buttonSize = 'medium',\n getAllDocuments,\n getDocumentPagesByDocumentId,\n getDocumentSectionsByDocumentPageId,\n}: LinkSelectorProps): ReactElement => {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [selectedUrl, setSelectedUrl] = useState<string>(url);\n\n const onSelectUrl = (url: string) => {\n setSelectedUrl(url);\n };\n\n const onPressEnter = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n saveLink();\n }\n };\n\n useEffect(() => {\n if (url && !selectedUrl) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setSelectedUrl(url);\n }\n }, [url, selectedUrl]);\n\n const saveLink = () => {\n onUrlChange?.(selectedUrl);\n setIsModalOpen(false);\n };\n\n const dialogProps = {\n onOpenAutoFocus: () => {},\n showUnderlay: true,\n 'data-is-underlay': true,\n minWidth: '800px',\n };\n\n return (\n // eslint-disable-next-line jsx-a11y-x/no-static-element-interactions\n <div\n onPointerDownCapture={(event) => {\n event.stopPropagation();\n event.preventDefault();\n }}\n onFocusCapture={(event) => {\n event.stopPropagation();\n event.preventDefault();\n }}\n data-test-id=\"internal-link-selector\"\n onKeyDown={onPressEnter}\n >\n <Dialog.Root modal open={isModalOpen} onOpenChange={setIsModalOpen}>\n <Dialog.Trigger asChild>\n <Button size={buttonSize} emphasis=\"default\">\n <IconLink size=\"20\" />\n Internal link\n </Button>\n </Dialog.Trigger>\n <Dialog.Content {...dialogProps}>\n <Dialog.Header>\n <Dialog.Title>Select internal link</Dialog.Title>\n </Dialog.Header>\n <Dialog.Body padding=\"none\">\n <ScrollArea padding=\"compact\">\n <DocumentLinks\n selectedUrl={selectedUrl}\n onSelectUrl={onSelectUrl}\n getAllDocuments={getAllDocuments}\n getDocumentPagesByDocumentId={getDocumentPagesByDocumentId}\n getDocumentSectionsByDocumentPageId={getDocumentSectionsByDocumentPageId}\n />\n </ScrollArea>\n </Dialog.Body>\n <Dialog.Footer>\n <Button size={buttonSize} emphasis=\"default\" onPress={() => setIsModalOpen(false)}>\n Cancel\n </Button>\n <Button size={buttonSize} disabled={!selectedUrl} emphasis=\"strong\" onPress={() => saveLink()}>\n Choose\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n </div>\n );\n};\n"],"names":["LinkSelector","url","onUrlChange","buttonSize","getAllDocuments","getDocumentPagesByDocumentId","getDocumentSectionsByDocumentPageId","isModalOpen","setIsModalOpen","useState","selectedUrl","setSelectedUrl","onSelectUrl","onPressEnter","event","saveLink","useEffect","dialogProps","jsx","jsxs","Dialog","Button","IconLink","ScrollArea","DocumentLinks"],"mappings":";;;;;;AAmBO,MAAMA,IAAe,CAAC;AAAA,EACzB,KAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,iBAAAC;AAAA,EACA,8BAAAC;AAAA,EACA,qCAAAC;AACJ,MAAuC;AACnC,QAAM,CAACC,GAAaC,CAAc,IAAIC,EAAS,EAAK,GAC9C,CAACC,GAAaC,CAAc,IAAIF,EAAiBR,CAAG,GAEpDW,IAAc,CAACX,MAAgB;AACjC,IAAAU,EAAeV,CAAG;AAAA,EACtB,GAEMY,IAAe,CAACC,MAA2C;AAC7D,IAAIA,EAAM,QAAQ,YACdA,EAAM,eAAA,GACNC,EAAA;AAAA,EAER;AAEA,EAAAC,EAAU,MAAM;AACZ,IAAIf,KAAO,CAACS,KAERC,EAAeV,CAAG;AAAA,EAE1B,GAAG,CAACA,GAAKS,CAAW,CAAC;AAErB,QAAMK,IAAW,MAAM;AACnB,IAAAb,
|
|
1
|
+
{"version":3,"file":"LinkSelector.es.js","sources":["../../../../src/components/Link/LinkSelector/LinkSelector.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type Document, type DocumentPage, type DocumentSection } from '@frontify/app-bridge';\nimport { Button, Dialog, ScrollArea } from '@frontify/fondue/components';\nimport { IconLink } from '@frontify/fondue/icons';\nimport { type KeyboardEvent, type ReactElement, useEffect, useState } from 'react';\n\nimport './LinkSelector.css';\nimport { DocumentLinks } from './DocumentLinks';\n\ntype LinkSelectorProps = {\n url: string;\n onUrlChange?: (value: string) => void;\n buttonSize?: 'small' | 'medium' | 'large';\n getAllDocuments: () => Promise<Document[]>;\n getDocumentSectionsByDocumentPageId: (documentPageId: number) => Promise<DocumentSection[]>;\n getDocumentPagesByDocumentId: (documentId: number) => Promise<DocumentPage[]>;\n};\n\nexport const LinkSelector = ({\n url,\n onUrlChange,\n buttonSize = 'medium',\n getAllDocuments,\n getDocumentPagesByDocumentId,\n getDocumentSectionsByDocumentPageId,\n}: LinkSelectorProps): ReactElement => {\n const [isModalOpen, setIsModalOpen] = useState(false);\n const [selectedUrl, setSelectedUrl] = useState<string>(url);\n\n const onSelectUrl = (url: string) => {\n setSelectedUrl(url);\n };\n\n const onPressEnter = (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key === 'Enter') {\n event.preventDefault();\n saveLink();\n }\n };\n\n useEffect(() => {\n if (url && !selectedUrl) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setSelectedUrl(url);\n }\n }, [url, selectedUrl]);\n\n const saveLink = () => {\n onUrlChange?.(selectedUrl);\n setIsModalOpen(false);\n };\n\n const dialogProps = {\n onOpenAutoFocus: () => {},\n showUnderlay: true,\n 'data-is-underlay': true,\n minWidth: '800px',\n };\n\n return (\n // eslint-disable-next-line jsx-a11y-x/no-static-element-interactions\n <div\n onPointerDownCapture={(event) => {\n event.stopPropagation();\n event.preventDefault();\n }}\n onFocusCapture={(event) => {\n event.stopPropagation();\n event.preventDefault();\n }}\n data-test-id=\"internal-link-selector\"\n onKeyDown={onPressEnter}\n >\n <Dialog.Root modal open={isModalOpen} onOpenChange={setIsModalOpen}>\n <Dialog.Trigger asChild>\n <Button size={buttonSize} emphasis=\"default\">\n <IconLink size=\"20\" />\n Internal link\n </Button>\n </Dialog.Trigger>\n <Dialog.Content {...dialogProps}>\n <Dialog.Header>\n <Dialog.Title>Select internal link</Dialog.Title>\n </Dialog.Header>\n <Dialog.Body padding=\"none\">\n <ScrollArea padding=\"compact\">\n <DocumentLinks\n selectedUrl={selectedUrl}\n onSelectUrl={onSelectUrl}\n getAllDocuments={getAllDocuments}\n getDocumentPagesByDocumentId={getDocumentPagesByDocumentId}\n getDocumentSectionsByDocumentPageId={getDocumentSectionsByDocumentPageId}\n />\n </ScrollArea>\n </Dialog.Body>\n <Dialog.Footer>\n <Button size={buttonSize} emphasis=\"default\" onPress={() => setIsModalOpen(false)}>\n Cancel\n </Button>\n <Button size={buttonSize} disabled={!selectedUrl} emphasis=\"strong\" onPress={() => saveLink()}>\n Choose\n </Button>\n </Dialog.Footer>\n </Dialog.Content>\n </Dialog.Root>\n </div>\n );\n};\n"],"names":["LinkSelector","url","onUrlChange","buttonSize","getAllDocuments","getDocumentPagesByDocumentId","getDocumentSectionsByDocumentPageId","isModalOpen","setIsModalOpen","useState","selectedUrl","setSelectedUrl","onSelectUrl","onPressEnter","event","saveLink","useEffect","dialogProps","jsx","jsxs","Dialog","Button","IconLink","ScrollArea","DocumentLinks"],"mappings":";;;;;;AAmBO,MAAMA,IAAe,CAAC;AAAA,EACzB,KAAAC;AAAA,EACA,aAAAC;AAAA,EACA,YAAAC,IAAa;AAAA,EACb,iBAAAC;AAAA,EACA,8BAAAC;AAAA,EACA,qCAAAC;AACJ,MAAuC;AACnC,QAAM,CAACC,GAAaC,CAAc,IAAIC,EAAS,EAAK,GAC9C,CAACC,GAAaC,CAAc,IAAIF,EAAiBR,CAAG,GAEpDW,IAAc,CAACX,MAAgB;AACjC,IAAAU,EAAeV,CAAG;AAAA,EACtB,GAEMY,IAAe,CAACC,MAA2C;AAC7D,IAAIA,EAAM,QAAQ,YACdA,EAAM,eAAA,GACNC,EAAA;AAAA,EAER;AAEA,EAAAC,EAAU,MAAM;AACZ,IAAIf,KAAO,CAACS,KAERC,EAAeV,CAAG;AAAA,EAE1B,GAAG,CAACA,GAAKS,CAAW,CAAC;AAErB,QAAMK,IAAW,MAAM;AACnB,IAAAb,IAAcQ,CAAW,GACzBF,EAAe,EAAK;AAAA,EACxB,GAEMS,IAAc;AAAA,IAChB,iBAAiB,MAAM;AAAA,IAAC;AAAA,IACxB,cAAc;AAAA,IACd,oBAAoB;AAAA,IACpB,UAAU;AAAA,EAAA;AAGd;AAAA;AAAA,IAEI,gBAAAC;AAAA,MAAC;AAAA,MAAA;AAAA,QACG,sBAAsB,CAACJ,MAAU;AAC7B,UAAAA,EAAM,gBAAA,GACNA,EAAM,eAAA;AAAA,QACV;AAAA,QACA,gBAAgB,CAACA,MAAU;AACvB,UAAAA,EAAM,gBAAA,GACNA,EAAM,eAAA;AAAA,QACV;AAAA,QACA,gBAAa;AAAA,QACb,WAAWD;AAAA,QAEX,UAAA,gBAAAM,EAACC,EAAO,MAAP,EAAY,OAAK,IAAC,MAAMb,GAAa,cAAcC,GAChD,UAAA;AAAA,UAAA,gBAAAU,EAACE,EAAO,SAAP,EAAe,SAAO,IACnB,4BAACC,GAAA,EAAO,MAAMlB,GAAY,UAAS,WAC/B,UAAA;AAAA,YAAA,gBAAAe,EAACI,GAAA,EAAS,MAAK,KAAA,CAAK;AAAA,YAAE;AAAA,UAAA,EAAA,CAE1B,EAAA,CACJ;AAAA,UACA,gBAAAH,EAACC,EAAO,SAAP,EAAgB,GAAGH,GAChB,UAAA;AAAA,YAAA,gBAAAC,EAACE,EAAO,QAAP,EACG,UAAA,gBAAAF,EAACE,EAAO,OAAP,EAAa,kCAAoB,EAAA,CACtC;AAAA,YACA,gBAAAF,EAACE,EAAO,MAAP,EAAY,SAAQ,QACjB,UAAA,gBAAAF,EAACK,GAAA,EAAW,SAAQ,WAChB,UAAA,gBAAAL;AAAA,cAACM;AAAA,cAAA;AAAA,gBACG,aAAAd;AAAA,gBACA,aAAAE;AAAA,gBACA,iBAAAR;AAAA,gBACA,8BAAAC;AAAA,gBACA,qCAAAC;AAAA,cAAA;AAAA,YAAA,GAER,EAAA,CACJ;AAAA,YACA,gBAAAa,EAACC,EAAO,QAAP,EACG,UAAA;AAAA,cAAA,gBAAAF,EAACG,GAAA,EAAO,MAAMlB,GAAY,UAAS,WAAU,SAAS,MAAMK,EAAe,EAAK,GAAG,UAAA,SAAA,CAEnF;AAAA,cACA,gBAAAU,EAACG,GAAA,EAAO,MAAMlB,GAAY,UAAU,CAACO,GAAa,UAAS,UAAS,SAAS,MAAMK,EAAA,GAAY,UAAA,SAAA,CAE/F;AAAA,YAAA,EAAA,CACJ;AAAA,UAAA,EAAA,CACJ;AAAA,QAAA,EAAA,CACJ;AAAA,MAAA;AAAA,IAAA;AAAA;AAGZ;"}
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
const
|
|
2
|
-
var t;
|
|
3
|
-
return !!((t = i.title) != null && t.trim());
|
|
4
|
-
});
|
|
1
|
+
const i = (t) => t.filter((e) => !!e.title?.trim());
|
|
5
2
|
export {
|
|
6
|
-
|
|
3
|
+
i as filterDocumentSectionsWithUnreadableTitles
|
|
7
4
|
};
|
|
8
5
|
//# sourceMappingURL=filterDocumentSectionsWithUnreadableTitles.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filterDocumentSectionsWithUnreadableTitles.es.js","sources":["../../../../src/components/Link/helpers/filterDocumentSectionsWithUnreadableTitles.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type DocumentSection } from '@frontify/app-bridge';\n\nimport { type DocumentSectionWithTitle } from '../types';\n\nexport const filterDocumentSectionsWithUnreadableTitles = (sections: DocumentSection[]) =>\n sections.filter((section) => !!section.title?.trim()) as DocumentSectionWithTitle[];\n"],"names":["filterDocumentSectionsWithUnreadableTitles","sections","section"
|
|
1
|
+
{"version":3,"file":"filterDocumentSectionsWithUnreadableTitles.es.js","sources":["../../../../src/components/Link/helpers/filterDocumentSectionsWithUnreadableTitles.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type DocumentSection } from '@frontify/app-bridge';\n\nimport { type DocumentSectionWithTitle } from '../types';\n\nexport const filterDocumentSectionsWithUnreadableTitles = (sections: DocumentSection[]) =>\n sections.filter((section) => !!section.title?.trim()) as DocumentSectionWithTitle[];\n"],"names":["filterDocumentSectionsWithUnreadableTitles","sections","section"],"mappings":"AAMO,MAAMA,IAA6C,CAACC,MACvDA,EAAS,OAAO,CAACC,MAAY,CAAC,CAACA,EAAQ,OAAO,KAAA,CAAM;"}
|
|
@@ -1,18 +1,12 @@
|
|
|
1
|
-
import { getAboveNode as
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
return Array.isArray(
|
|
5
|
-
}, L = (r) =>
|
|
6
|
-
var t, o;
|
|
7
|
-
return ((o = (t = e.chosenLink) == null ? void 0 : t.searchResult) == null ? void 0 : o.link) || "";
|
|
8
|
-
}), l = (r) => n(r, (e) => e.url || ""), i = (r) => {
|
|
9
|
-
var e, t;
|
|
10
|
-
return r.url || ((t = (e = r.chosenLink) == null ? void 0 : e.searchResult) == null ? void 0 : t.link) || "";
|
|
11
|
-
}, g = (r) => n(r, i);
|
|
1
|
+
import { getAboveNode as o, ELEMENT_LINK as c } from "@frontify/fondue/rte";
|
|
2
|
+
const t = (r, e) => {
|
|
3
|
+
const n = o(r, { match: { type: c } });
|
|
4
|
+
return Array.isArray(n) ? e(n[0]) : "";
|
|
5
|
+
}, u = (r) => t(r, (e) => e.chosenLink?.searchResult?.link || ""), L = (r) => t(r, (e) => e.url || ""), s = (r) => r.url || r.chosenLink?.searchResult?.link || "", l = (r) => t(r, s);
|
|
12
6
|
export {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
7
|
+
u as getLegacyUrl,
|
|
8
|
+
l as getLinkFromEditor,
|
|
9
|
+
L as getUrl,
|
|
10
|
+
s as getUrlFromLinkOrLegacyLink
|
|
17
11
|
};
|
|
18
12
|
//# sourceMappingURL=getUrl.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getUrl.es.js","sources":["../../../../src/components/Link/utils/getUrl.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { ELEMENT_LINK, type PlateEditor, getAboveNode } from '@frontify/fondue/rte';\n\nimport { type TLinkElement } from '../../RichTextEditor/plugins/LinkPlugin/types';\n\nconst getLinkNode = (editor: PlateEditor, cb: (link: TLinkElement) => string): string => {\n const linkNode = getAboveNode<TLinkElement>(editor, { match: { type: ELEMENT_LINK } });\n\n if (!Array.isArray(linkNode)) {\n return '';\n }\n\n return cb(linkNode[0]);\n};\n\nexport const getLegacyUrl = (editor: PlateEditor) => {\n return getLinkNode(editor, (link) => link.chosenLink?.searchResult?.link || '');\n};\n\nexport const getUrl = (editor: PlateEditor) => {\n return getLinkNode(editor, (link) => link.url || '');\n};\n\nexport const getUrlFromLinkOrLegacyLink = (link: TLinkElement): string => {\n return link.url || link.chosenLink?.searchResult?.link || '';\n};\n\nexport const getLinkFromEditor = (editor: PlateEditor) => {\n return getLinkNode(editor, getUrlFromLinkOrLegacyLink);\n};\n"],"names":["getLinkNode","editor","cb","linkNode","getAboveNode","ELEMENT_LINK","getLegacyUrl","link","
|
|
1
|
+
{"version":3,"file":"getUrl.es.js","sources":["../../../../src/components/Link/utils/getUrl.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { ELEMENT_LINK, type PlateEditor, getAboveNode } from '@frontify/fondue/rte';\n\nimport { type TLinkElement } from '../../RichTextEditor/plugins/LinkPlugin/types';\n\nconst getLinkNode = (editor: PlateEditor, cb: (link: TLinkElement) => string): string => {\n const linkNode = getAboveNode<TLinkElement>(editor, { match: { type: ELEMENT_LINK } });\n\n if (!Array.isArray(linkNode)) {\n return '';\n }\n\n return cb(linkNode[0]);\n};\n\nexport const getLegacyUrl = (editor: PlateEditor) => {\n return getLinkNode(editor, (link) => link.chosenLink?.searchResult?.link || '');\n};\n\nexport const getUrl = (editor: PlateEditor) => {\n return getLinkNode(editor, (link) => link.url || '');\n};\n\nexport const getUrlFromLinkOrLegacyLink = (link: TLinkElement): string => {\n return link.url || link.chosenLink?.searchResult?.link || '';\n};\n\nexport const getLinkFromEditor = (editor: PlateEditor) => {\n return getLinkNode(editor, getUrlFromLinkOrLegacyLink);\n};\n"],"names":["getLinkNode","editor","cb","linkNode","getAboveNode","ELEMENT_LINK","getLegacyUrl","link","getUrl","getUrlFromLinkOrLegacyLink","getLinkFromEditor"],"mappings":";AAMA,MAAMA,IAAc,CAACC,GAAqBC,MAA+C;AACrF,QAAMC,IAAWC,EAA2BH,GAAQ,EAAE,OAAO,EAAE,MAAMI,EAAA,GAAgB;AAErF,SAAK,MAAM,QAAQF,CAAQ,IAIpBD,EAAGC,EAAS,CAAC,CAAC,IAHV;AAIf,GAEaG,IAAe,CAACL,MAClBD,EAAYC,GAAQ,CAACM,MAASA,EAAK,YAAY,cAAc,QAAQ,EAAE,GAGrEC,IAAS,CAACP,MACZD,EAAYC,GAAQ,CAACM,MAASA,EAAK,OAAO,EAAE,GAG1CE,IAA6B,CAACF,MAChCA,EAAK,OAAOA,EAAK,YAAY,cAAc,QAAQ,IAGjDG,IAAoB,CAACT,MACvBD,EAAYC,GAAQQ,CAA0B;"}
|
|
@@ -1,67 +1,67 @@
|
|
|
1
1
|
import { jsx as a } from "react/jsx-runtime";
|
|
2
|
-
import { RichTextEditor as
|
|
3
|
-
import { useRef as
|
|
4
|
-
import { useIsInViewport as
|
|
5
|
-
import { SerializedText as
|
|
6
|
-
import { getResponsiveColumnClasses as
|
|
7
|
-
import { floatingButtonSelectors as
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
},
|
|
2
|
+
import { RichTextEditor as C } from "@frontify/fondue/rte";
|
|
3
|
+
import { useRef as R, useState as m, useCallback as c, useEffect as p, memo as V, useId as T } from "react";
|
|
4
|
+
import { useIsInViewport as v } from "../../hooks/useIsInViewport.es.js";
|
|
5
|
+
import { SerializedText as I } from "./SerializedText.es.js";
|
|
6
|
+
import { getResponsiveColumnClasses as P } from "./plugins/ColumnBreakPlugin/helpers.es.js";
|
|
7
|
+
import { floatingButtonSelectors as L, floatingButtonActions as S } from "./plugins/ButtonPlugin/components/FloatingButton/floatingButtonStore.es.js";
|
|
8
|
+
const y = (o) => {
|
|
9
|
+
L.isOpen(o) && S.reset();
|
|
10
|
+
}, g = V(
|
|
11
11
|
({
|
|
12
|
-
isEnabled:
|
|
12
|
+
isEnabled: o,
|
|
13
13
|
value: e,
|
|
14
14
|
columns: l,
|
|
15
|
-
gap:
|
|
15
|
+
gap: r,
|
|
16
16
|
placeholder: t,
|
|
17
|
-
plugins:
|
|
18
|
-
onTextChange:
|
|
17
|
+
plugins: i,
|
|
18
|
+
onTextChange: s,
|
|
19
19
|
showSerializedText: d
|
|
20
20
|
}) => {
|
|
21
|
-
const
|
|
22
|
-
(
|
|
23
|
-
|
|
21
|
+
const E = P(l), [f, h] = m(!1), w = T(), x = c(
|
|
22
|
+
(n) => {
|
|
23
|
+
n !== e && s?.(n), h(!1);
|
|
24
24
|
},
|
|
25
|
-
[
|
|
26
|
-
),
|
|
25
|
+
[s, e]
|
|
26
|
+
), b = c(() => h(!0), []);
|
|
27
27
|
return p(() => {
|
|
28
|
-
const
|
|
29
|
-
|
|
28
|
+
const n = (u) => {
|
|
29
|
+
u.preventDefault(), u.returnValue = "Unprocessed changes";
|
|
30
30
|
};
|
|
31
|
-
return f && window.addEventListener("beforeunload",
|
|
32
|
-
}, [f]),
|
|
33
|
-
|
|
31
|
+
return f && window.addEventListener("beforeunload", n), () => window.removeEventListener("beforeunload", n);
|
|
32
|
+
}, [f]), o ? /* @__PURE__ */ a(
|
|
33
|
+
C,
|
|
34
34
|
{
|
|
35
|
-
id:
|
|
35
|
+
id: w,
|
|
36
36
|
value: e,
|
|
37
37
|
border: !1,
|
|
38
38
|
placeholder: t,
|
|
39
|
-
plugins:
|
|
40
|
-
onValueChanged:
|
|
41
|
-
onTextChange:
|
|
42
|
-
hideExternalFloatingModals:
|
|
39
|
+
plugins: i,
|
|
40
|
+
onValueChanged: b,
|
|
41
|
+
onTextChange: x,
|
|
42
|
+
hideExternalFloatingModals: y,
|
|
43
43
|
placeholderOpacity: "high"
|
|
44
44
|
}
|
|
45
45
|
) : /* @__PURE__ */ a(
|
|
46
|
-
|
|
46
|
+
I,
|
|
47
47
|
{
|
|
48
48
|
value: e,
|
|
49
|
-
gap:
|
|
50
|
-
customClass:
|
|
49
|
+
gap: r,
|
|
50
|
+
customClass: E,
|
|
51
51
|
show: d,
|
|
52
|
-
plugins:
|
|
52
|
+
plugins: i
|
|
53
53
|
}
|
|
54
54
|
);
|
|
55
55
|
}
|
|
56
56
|
);
|
|
57
|
-
|
|
58
|
-
const j = (
|
|
59
|
-
const e =
|
|
60
|
-
d &&
|
|
57
|
+
g.displayName = "InternalRichTextEditor";
|
|
58
|
+
const j = (o) => {
|
|
59
|
+
const e = R(null), [l, r] = m(!1), { isEditing: t, ...i } = o, s = c((d) => {
|
|
60
|
+
d && r(!0);
|
|
61
61
|
}, []);
|
|
62
|
-
return
|
|
63
|
-
t ||
|
|
64
|
-
}, [t]), /* @__PURE__ */ a("div", { "data-test-id": "rich-text-editor-container", className: "tw-block tw-w-full tw-@container", ref: e, children: /* @__PURE__ */ a(
|
|
62
|
+
return v({ ref: e, disabled: !t, onChange: s }), p(() => {
|
|
63
|
+
t || r(!1);
|
|
64
|
+
}, [t]), /* @__PURE__ */ a("div", { "data-test-id": "rich-text-editor-container", className: "tw-block tw-w-full tw-@container", ref: e, children: /* @__PURE__ */ a(g, { ...i, isEnabled: t && l }) });
|
|
65
65
|
};
|
|
66
66
|
export {
|
|
67
67
|
j as RichTextEditor
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RichTextEditor.es.js","sources":["../../../src/components/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { RichTextEditor as FondueRichTextEditor } from '@frontify/fondue/rte';\nimport { memo, useCallback, useEffect, useId, useRef, useState } from 'react';\n\nimport { useIsInViewport } from '../../hooks/useIsInViewport';\n\nimport { SerializedText } from './SerializedText';\nimport { floatingButtonActions, floatingButtonSelectors } from './plugins/ButtonPlugin/components';\nimport { getResponsiveColumnClasses } from './plugins/ColumnBreakPlugin/helpers';\nimport { type RichTextEditorProps } from './types';\n\nconst handleHideExternalFloatingModals = (editorId: string) => {\n if (floatingButtonSelectors.isOpen(editorId)) {\n floatingButtonActions.reset();\n }\n};\n\nconst InternalRichTextEditor = memo(\n ({\n isEnabled,\n value,\n columns,\n gap,\n placeholder,\n plugins,\n onTextChange,\n showSerializedText,\n }: Omit<RichTextEditorProps, 'isEditing'> & { isEnabled: boolean }) => {\n const customClass = getResponsiveColumnClasses(columns);\n const [shouldPreventPageLeave, setShouldPreventPageLeave] = useState(false);\n const editorId = useId();\n\n const handleTextChange = useCallback(\n (newContent: string) => {\n if (newContent !== value) {\n onTextChange?.(newContent);\n }\n setShouldPreventPageLeave(false);\n },\n [onTextChange, value],\n );\n\n const handleValueChange = useCallback(() => setShouldPreventPageLeave(true), []);\n\n useEffect(() => {\n const unloadHandler = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n event.returnValue = 'Unprocessed changes';\n };\n\n if (shouldPreventPageLeave) {\n window.addEventListener('beforeunload', unloadHandler);\n }\n\n return () => window.removeEventListener('beforeunload', unloadHandler);\n }, [shouldPreventPageLeave]);\n\n if (isEnabled) {\n return (\n <FondueRichTextEditor\n id={editorId}\n value={value}\n border={false}\n placeholder={placeholder}\n plugins={plugins}\n onValueChanged={handleValueChange}\n onTextChange={handleTextChange}\n hideExternalFloatingModals={handleHideExternalFloatingModals}\n placeholderOpacity=\"high\"\n />\n );\n }\n return (\n <SerializedText\n value={value}\n gap={gap}\n customClass={customClass}\n show={showSerializedText}\n plugins={plugins}\n />\n );\n },\n);\nInternalRichTextEditor.displayName = 'InternalRichTextEditor';\n\nexport const RichTextEditor = (props: RichTextEditorProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const [hasEnteredViewport, setHasEnteredViewport] = useState(false);\n\n const { isEditing, ...internalRteProps } = props;\n\n const onViewportVisibilityChange = useCallback((isInViewport: boolean) => {\n if (isInViewport) {\n setHasEnteredViewport(true);\n }\n }, []);\n\n useIsInViewport({ ref, disabled: !isEditing, onChange: onViewportVisibilityChange });\n\n useEffect(() => {\n if (!isEditing) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setHasEnteredViewport(false);\n }\n }, [isEditing]);\n\n return (\n <div data-test-id=\"rich-text-editor-container\" className=\"tw-block tw-w-full tw-@container\" ref={ref}>\n <InternalRichTextEditor {...internalRteProps} isEnabled={isEditing && hasEnteredViewport} />\n </div>\n );\n};\n"],"names":["handleHideExternalFloatingModals","editorId","floatingButtonSelectors","floatingButtonActions","InternalRichTextEditor","memo","isEnabled","value","columns","gap","placeholder","plugins","onTextChange","showSerializedText","customClass","getResponsiveColumnClasses","shouldPreventPageLeave","setShouldPreventPageLeave","useState","useId","handleTextChange","useCallback","newContent","handleValueChange","useEffect","unloadHandler","event","jsx","FondueRichTextEditor","SerializedText","RichTextEditor","props","ref","useRef","hasEnteredViewport","setHasEnteredViewport","isEditing","internalRteProps","onViewportVisibilityChange","isInViewport","useIsInViewport"],"mappings":";;;;;;;AAYA,MAAMA,IAAmC,CAACC,MAAqB;AAC3D,EAAIC,EAAwB,OAAOD,CAAQ,KACvCE,EAAsB,MAAA;AAE9B,GAEMC,IAAyBC;AAAA,EAC3B,CAAC;AAAA,IACG,WAAAC;AAAA,IACA,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,KAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,cAAAC;AAAA,IACA,oBAAAC;AAAA,EAAA,MACmE;AACnE,UAAMC,IAAcC,EAA2BP,CAAO,GAChD,CAACQ,GAAwBC,CAAyB,IAAIC,EAAS,EAAK,GACpEjB,IAAWkB,EAAA,GAEXC,IAAmBC;AAAA,MACrB,CAACC,MAAuB;AACpB,QAAIA,MAAef,
|
|
1
|
+
{"version":3,"file":"RichTextEditor.es.js","sources":["../../../src/components/RichTextEditor/RichTextEditor.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { RichTextEditor as FondueRichTextEditor } from '@frontify/fondue/rte';\nimport { memo, useCallback, useEffect, useId, useRef, useState } from 'react';\n\nimport { useIsInViewport } from '../../hooks/useIsInViewport';\n\nimport { SerializedText } from './SerializedText';\nimport { floatingButtonActions, floatingButtonSelectors } from './plugins/ButtonPlugin/components';\nimport { getResponsiveColumnClasses } from './plugins/ColumnBreakPlugin/helpers';\nimport { type RichTextEditorProps } from './types';\n\nconst handleHideExternalFloatingModals = (editorId: string) => {\n if (floatingButtonSelectors.isOpen(editorId)) {\n floatingButtonActions.reset();\n }\n};\n\nconst InternalRichTextEditor = memo(\n ({\n isEnabled,\n value,\n columns,\n gap,\n placeholder,\n plugins,\n onTextChange,\n showSerializedText,\n }: Omit<RichTextEditorProps, 'isEditing'> & { isEnabled: boolean }) => {\n const customClass = getResponsiveColumnClasses(columns);\n const [shouldPreventPageLeave, setShouldPreventPageLeave] = useState(false);\n const editorId = useId();\n\n const handleTextChange = useCallback(\n (newContent: string) => {\n if (newContent !== value) {\n onTextChange?.(newContent);\n }\n setShouldPreventPageLeave(false);\n },\n [onTextChange, value],\n );\n\n const handleValueChange = useCallback(() => setShouldPreventPageLeave(true), []);\n\n useEffect(() => {\n const unloadHandler = (event: BeforeUnloadEvent) => {\n event.preventDefault();\n event.returnValue = 'Unprocessed changes';\n };\n\n if (shouldPreventPageLeave) {\n window.addEventListener('beforeunload', unloadHandler);\n }\n\n return () => window.removeEventListener('beforeunload', unloadHandler);\n }, [shouldPreventPageLeave]);\n\n if (isEnabled) {\n return (\n <FondueRichTextEditor\n id={editorId}\n value={value}\n border={false}\n placeholder={placeholder}\n plugins={plugins}\n onValueChanged={handleValueChange}\n onTextChange={handleTextChange}\n hideExternalFloatingModals={handleHideExternalFloatingModals}\n placeholderOpacity=\"high\"\n />\n );\n }\n return (\n <SerializedText\n value={value}\n gap={gap}\n customClass={customClass}\n show={showSerializedText}\n plugins={plugins}\n />\n );\n },\n);\nInternalRichTextEditor.displayName = 'InternalRichTextEditor';\n\nexport const RichTextEditor = (props: RichTextEditorProps) => {\n const ref = useRef<HTMLDivElement>(null);\n const [hasEnteredViewport, setHasEnteredViewport] = useState(false);\n\n const { isEditing, ...internalRteProps } = props;\n\n const onViewportVisibilityChange = useCallback((isInViewport: boolean) => {\n if (isInViewport) {\n setHasEnteredViewport(true);\n }\n }, []);\n\n useIsInViewport({ ref, disabled: !isEditing, onChange: onViewportVisibilityChange });\n\n useEffect(() => {\n if (!isEditing) {\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setHasEnteredViewport(false);\n }\n }, [isEditing]);\n\n return (\n <div data-test-id=\"rich-text-editor-container\" className=\"tw-block tw-w-full tw-@container\" ref={ref}>\n <InternalRichTextEditor {...internalRteProps} isEnabled={isEditing && hasEnteredViewport} />\n </div>\n );\n};\n"],"names":["handleHideExternalFloatingModals","editorId","floatingButtonSelectors","floatingButtonActions","InternalRichTextEditor","memo","isEnabled","value","columns","gap","placeholder","plugins","onTextChange","showSerializedText","customClass","getResponsiveColumnClasses","shouldPreventPageLeave","setShouldPreventPageLeave","useState","useId","handleTextChange","useCallback","newContent","handleValueChange","useEffect","unloadHandler","event","jsx","FondueRichTextEditor","SerializedText","RichTextEditor","props","ref","useRef","hasEnteredViewport","setHasEnteredViewport","isEditing","internalRteProps","onViewportVisibilityChange","isInViewport","useIsInViewport"],"mappings":";;;;;;;AAYA,MAAMA,IAAmC,CAACC,MAAqB;AAC3D,EAAIC,EAAwB,OAAOD,CAAQ,KACvCE,EAAsB,MAAA;AAE9B,GAEMC,IAAyBC;AAAA,EAC3B,CAAC;AAAA,IACG,WAAAC;AAAA,IACA,OAAAC;AAAA,IACA,SAAAC;AAAA,IACA,KAAAC;AAAA,IACA,aAAAC;AAAA,IACA,SAAAC;AAAA,IACA,cAAAC;AAAA,IACA,oBAAAC;AAAA,EAAA,MACmE;AACnE,UAAMC,IAAcC,EAA2BP,CAAO,GAChD,CAACQ,GAAwBC,CAAyB,IAAIC,EAAS,EAAK,GACpEjB,IAAWkB,EAAA,GAEXC,IAAmBC;AAAA,MACrB,CAACC,MAAuB;AACpB,QAAIA,MAAef,KACfK,IAAeU,CAAU,GAE7BL,EAA0B,EAAK;AAAA,MACnC;AAAA,MACA,CAACL,GAAcL,CAAK;AAAA,IAAA,GAGlBgB,IAAoBF,EAAY,MAAMJ,EAA0B,EAAI,GAAG,CAAA,CAAE;AAe/E,WAbAO,EAAU,MAAM;AACZ,YAAMC,IAAgB,CAACC,MAA6B;AAChD,QAAAA,EAAM,eAAA,GACNA,EAAM,cAAc;AAAA,MACxB;AAEA,aAAIV,KACA,OAAO,iBAAiB,gBAAgBS,CAAa,GAGlD,MAAM,OAAO,oBAAoB,gBAAgBA,CAAa;AAAA,IACzE,GAAG,CAACT,CAAsB,CAAC,GAEvBV,IAEI,gBAAAqB;AAAA,MAACC;AAAAA,MAAA;AAAA,QACG,IAAI3B;AAAA,QACJ,OAAAM;AAAA,QACA,QAAQ;AAAA,QACR,aAAAG;AAAA,QACA,SAAAC;AAAA,QACA,gBAAgBY;AAAA,QAChB,cAAcH;AAAA,QACd,4BAA4BpB;AAAA,QAC5B,oBAAmB;AAAA,MAAA;AAAA,IAAA,IAK3B,gBAAA2B;AAAA,MAACE;AAAA,MAAA;AAAA,QACG,OAAAtB;AAAA,QACA,KAAAE;AAAA,QACA,aAAAK;AAAA,QACA,MAAMD;AAAA,QACN,SAAAF;AAAA,MAAA;AAAA,IAAA;AAAA,EAGZ;AACJ;AACAP,EAAuB,cAAc;AAE9B,MAAM0B,IAAiB,CAACC,MAA+B;AAC1D,QAAMC,IAAMC,EAAuB,IAAI,GACjC,CAACC,GAAoBC,CAAqB,IAAIjB,EAAS,EAAK,GAE5D,EAAE,WAAAkB,GAAW,GAAGC,EAAA,IAAqBN,GAErCO,IAA6BjB,EAAY,CAACkB,MAA0B;AACtE,IAAIA,KACAJ,EAAsB,EAAI;AAAA,EAElC,GAAG,CAAA,CAAE;AAEL,SAAAK,EAAgB,EAAE,KAAAR,GAAK,UAAU,CAACI,GAAW,UAAUE,GAA4B,GAEnFd,EAAU,MAAM;AACZ,IAAKY,KAEDD,EAAsB,EAAK;AAAA,EAEnC,GAAG,CAACC,CAAS,CAAC,GAGV,gBAAAT,EAAC,OAAA,EAAI,gBAAa,8BAA6B,WAAU,oCAAmC,KAAAK,GACxF,UAAA,gBAAAL,EAACvB,GAAA,EAAwB,GAAGiC,GAAkB,WAAWD,KAAaF,GAAoB,GAC9F;AAER;"}
|
|
@@ -1,41 +1,40 @@
|
|
|
1
|
-
import { jsx as
|
|
2
|
-
import { useState as
|
|
3
|
-
import { BlockButtonStyles as
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
i,
|
|
1
|
+
import { jsx as u } from "react/jsx-runtime";
|
|
2
|
+
import { useState as a } from "react";
|
|
3
|
+
import { BlockButtonStyles as c } from "../utils/styles.es.js";
|
|
4
|
+
const v = (e) => {
|
|
5
|
+
const { attributes: t, children: o } = e, r = e.element.url || e.element.chosenLink?.searchResult?.link || "", l = e.element.target || "_self", n = String(e.element.buttonStyle) || "primary";
|
|
6
|
+
return /* @__PURE__ */ u(
|
|
7
|
+
m,
|
|
9
8
|
{
|
|
10
9
|
attributes: t,
|
|
11
|
-
href:
|
|
12
|
-
target:
|
|
13
|
-
styles:
|
|
14
|
-
children:
|
|
10
|
+
href: r,
|
|
11
|
+
target: l,
|
|
12
|
+
styles: c[`button${n.charAt(0).toUpperCase() + n.slice(1)}`],
|
|
13
|
+
children: o
|
|
15
14
|
}
|
|
16
15
|
);
|
|
17
|
-
},
|
|
16
|
+
}, m = ({
|
|
18
17
|
attributes: e,
|
|
19
18
|
styles: t = { hover: {} },
|
|
20
|
-
children:
|
|
21
|
-
href:
|
|
22
|
-
target:
|
|
19
|
+
children: o,
|
|
20
|
+
href: r = "#",
|
|
21
|
+
target: l
|
|
23
22
|
}) => {
|
|
24
|
-
const [
|
|
25
|
-
return /* @__PURE__ */
|
|
23
|
+
const [n, s] = a(!1);
|
|
24
|
+
return /* @__PURE__ */ u(
|
|
26
25
|
"a",
|
|
27
26
|
{
|
|
28
27
|
...e,
|
|
29
|
-
onMouseEnter: () =>
|
|
30
|
-
onMouseLeave: () =>
|
|
31
|
-
href:
|
|
32
|
-
target:
|
|
33
|
-
style:
|
|
34
|
-
children:
|
|
28
|
+
onMouseEnter: () => s(!0),
|
|
29
|
+
onMouseLeave: () => s(!1),
|
|
30
|
+
href: r,
|
|
31
|
+
target: l,
|
|
32
|
+
style: n ? { ...t, ...t.hover } : t,
|
|
33
|
+
children: o
|
|
35
34
|
}
|
|
36
35
|
);
|
|
37
36
|
};
|
|
38
37
|
export {
|
|
39
|
-
|
|
38
|
+
v as ButtonMarkupElementNode
|
|
40
39
|
};
|
|
41
40
|
//# sourceMappingURL=ButtonMarkupElementNode.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonMarkupElementNode.es.js","sources":["../../../../../../src/components/RichTextEditor/plugins/ButtonPlugin/ButtonMarkupElement/ButtonMarkupElementNode.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type PlateRenderElementProps, type Value } from '@frontify/fondue/rte';\nimport { type CSSProperties, type HTMLAttributeAnchorTarget, type ReactElement, type ReactNode, useState } from 'react';\n\nimport { type TButtonElement } from '../types';\nimport { BlockButtonStyles } from '../utils';\n\nexport type ButtonRootProps = PlateRenderElementProps<Value, TButtonElement>;\n\nexport const ButtonMarkupElementNode = (props: ButtonRootProps) => {\n const { attributes, children } = props;\n const href = props.element.url || props.element.chosenLink?.searchResult?.link || '';\n const target = props.element.target || '_self';\n const buttonStyle = String(props.element.buttonStyle) || 'primary';\n return (\n <HoverableButtonLink\n attributes={attributes}\n href={href}\n target={target}\n styles={BlockButtonStyles[`button${buttonStyle.charAt(0).toUpperCase() + buttonStyle.slice(1)}`]}\n >\n {children}\n </HoverableButtonLink>\n );\n};\n\ntype Props = {\n attributes: ButtonRootProps['attributes'];\n children: ReactNode;\n styles?: CSSProperties & { hover?: CSSProperties };\n href?: string;\n target?: HTMLAttributeAnchorTarget;\n};\n\nconst HoverableButtonLink = ({\n attributes,\n styles = { hover: {} },\n children,\n href = '#',\n target,\n}: Props): ReactElement => {\n const [hovered, setHovered] = useState(false);\n\n return (\n <a\n {...attributes}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n href={href}\n target={target}\n style={hovered ? { ...styles, ...styles.hover } : styles}\n >\n {children}\n </a>\n );\n};\n"],"names":["ButtonMarkupElementNode","props","attributes","children","href","
|
|
1
|
+
{"version":3,"file":"ButtonMarkupElementNode.es.js","sources":["../../../../../../src/components/RichTextEditor/plugins/ButtonPlugin/ButtonMarkupElement/ButtonMarkupElementNode.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type PlateRenderElementProps, type Value } from '@frontify/fondue/rte';\nimport { type CSSProperties, type HTMLAttributeAnchorTarget, type ReactElement, type ReactNode, useState } from 'react';\n\nimport { type TButtonElement } from '../types';\nimport { BlockButtonStyles } from '../utils';\n\nexport type ButtonRootProps = PlateRenderElementProps<Value, TButtonElement>;\n\nexport const ButtonMarkupElementNode = (props: ButtonRootProps) => {\n const { attributes, children } = props;\n const href = props.element.url || props.element.chosenLink?.searchResult?.link || '';\n const target = props.element.target || '_self';\n const buttonStyle = String(props.element.buttonStyle) || 'primary';\n return (\n <HoverableButtonLink\n attributes={attributes}\n href={href}\n target={target}\n styles={BlockButtonStyles[`button${buttonStyle.charAt(0).toUpperCase() + buttonStyle.slice(1)}`]}\n >\n {children}\n </HoverableButtonLink>\n );\n};\n\ntype Props = {\n attributes: ButtonRootProps['attributes'];\n children: ReactNode;\n styles?: CSSProperties & { hover?: CSSProperties };\n href?: string;\n target?: HTMLAttributeAnchorTarget;\n};\n\nconst HoverableButtonLink = ({\n attributes,\n styles = { hover: {} },\n children,\n href = '#',\n target,\n}: Props): ReactElement => {\n const [hovered, setHovered] = useState(false);\n\n return (\n <a\n {...attributes}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n href={href}\n target={target}\n style={hovered ? { ...styles, ...styles.hover } : styles}\n >\n {children}\n </a>\n );\n};\n"],"names":["ButtonMarkupElementNode","props","attributes","children","href","target","buttonStyle","jsx","HoverableButtonLink","BlockButtonStyles","styles","hovered","setHovered","useState"],"mappings":";;;AAUO,MAAMA,IAA0B,CAACC,MAA2B;AAC/D,QAAM,EAAE,YAAAC,GAAY,UAAAC,EAAA,IAAaF,GAC3BG,IAAOH,EAAM,QAAQ,OAAOA,EAAM,QAAQ,YAAY,cAAc,QAAQ,IAC5EI,IAASJ,EAAM,QAAQ,UAAU,SACjCK,IAAc,OAAOL,EAAM,QAAQ,WAAW,KAAK;AACzD,SACI,gBAAAM;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,YAAAN;AAAA,MACA,MAAAE;AAAA,MACA,QAAAC;AAAA,MACA,QAAQI,EAAkB,SAASH,EAAY,OAAO,CAAC,EAAE,YAAA,IAAgBA,EAAY,MAAM,CAAC,CAAC,EAAE;AAAA,MAE9F,UAAAH;AAAA,IAAA;AAAA,EAAA;AAGb,GAUMK,IAAsB,CAAC;AAAA,EACzB,YAAAN;AAAA,EACA,QAAAQ,IAAS,EAAE,OAAO,GAAC;AAAA,EACnB,UAAAP;AAAA,EACA,MAAAC,IAAO;AAAA,EACP,QAAAC;AACJ,MAA2B;AACvB,QAAM,CAACM,GAASC,CAAU,IAAIC,EAAS,EAAK;AAE5C,SACI,gBAAAN;AAAA,IAAC;AAAA,IAAA;AAAA,MACI,GAAGL;AAAA,MACJ,cAAc,MAAMU,EAAW,EAAI;AAAA,MACnC,cAAc,MAAMA,EAAW,EAAK;AAAA,MACpC,MAAAR;AAAA,MACA,QAAAC;AAAA,MACA,OAAOM,IAAU,EAAE,GAAGD,GAAQ,GAAGA,EAAO,UAAUA;AAAA,MAEjD,UAAAP;AAAA,IAAA;AAAA,EAAA;AAGb;"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { jsx as e } from "react/jsx-runtime";
|
|
2
|
-
import { useEditorState as
|
|
2
|
+
import { useEditorState as l, useEventPlateId as a, isRangeInSameBlock as c, getPluginType as d, someNode as m, getTooltip as p, getHotkeyByPlatform as u } from "@frontify/fondue/rte";
|
|
3
3
|
import { ELEMENT_BUTTON as B } from "../createButtonPlugin.es.js";
|
|
4
4
|
import { ButtonToolbarButton as f } from "./ButtonToolbarButton.es.js";
|
|
5
5
|
const y = ({ editorId: n, id: i }) => {
|
|
6
|
-
const t =
|
|
6
|
+
const t = l(a(n)), o = !!c(t, {
|
|
7
7
|
at: t.selection
|
|
8
|
-
}), s =
|
|
8
|
+
}), s = d(t, B), r = !!t?.selection && m(t, { match: { type: s } });
|
|
9
9
|
return /* @__PURE__ */ e("div", { "data-plugin-id": i, children: /* @__PURE__ */ e(
|
|
10
10
|
f,
|
|
11
11
|
{
|
|
12
|
-
pressed:
|
|
12
|
+
pressed: r,
|
|
13
13
|
disabled: !o,
|
|
14
|
-
tooltip:
|
|
14
|
+
tooltip: p(
|
|
15
15
|
o ? `Button
|
|
16
|
-
${
|
|
16
|
+
${u("Ctrl+Shift+K")}` : "Buttons can only be set for a single text block."
|
|
17
17
|
)
|
|
18
18
|
}
|
|
19
19
|
) });
|
package/dist/components/RichTextEditor/plugins/ButtonPlugin/components/ButtonButton.es.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonButton.es.js","sources":["../../../../../../src/components/RichTextEditor/plugins/ButtonPlugin/components/ButtonButton.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n type PluginButtonProps,\n getHotkeyByPlatform,\n getPluginType,\n getTooltip,\n isRangeInSameBlock,\n someNode,\n useEditorState,\n useEventPlateId,\n} from '@frontify/fondue/rte';\n\nimport { ELEMENT_BUTTON } from '../createButtonPlugin';\n\nimport { ButtonToolbarButton } from './ButtonToolbarButton';\n\nexport const ButtonButton = ({ editorId, id }: PluginButtonProps) => {\n const editor = useEditorState(useEventPlateId(editorId));\n const isEnabled = !!isRangeInSameBlock(editor, {\n at: editor.selection,\n });\n const type = getPluginType(editor, ELEMENT_BUTTON);\n const isLink = !!editor?.selection && someNode(editor, { match: { type } });\n\n return (\n <div data-plugin-id={id}>\n <ButtonToolbarButton\n pressed={isLink}\n disabled={!isEnabled} // maybe pressed\n tooltip={getTooltip(\n isEnabled\n ? `Button\\n${getHotkeyByPlatform('Ctrl+Shift+K')}`\n : 'Buttons can only be set for a single text block.',\n )}\n />\n </div>\n );\n};\n"],"names":["ButtonButton","editorId","id","editor","useEditorState","useEventPlateId","isEnabled","isRangeInSameBlock","type","getPluginType","ELEMENT_BUTTON","isLink","someNode","jsx","ButtonToolbarButton","getTooltip","getHotkeyByPlatform"],"mappings":";;;;AAiBO,MAAMA,IAAe,CAAC,EAAE,UAAAC,GAAU,IAAAC,QAA4B;AACjE,QAAMC,IAASC,EAAeC,EAAgBJ,CAAQ,CAAC,GACjDK,IAAY,CAAC,CAACC,EAAmBJ,GAAQ;AAAA,IAC3C,IAAIA,EAAO;AAAA,EAAA,CACd,GACKK,IAAOC,EAAcN,GAAQO,CAAc,GAC3CC,IAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"ButtonButton.es.js","sources":["../../../../../../src/components/RichTextEditor/plugins/ButtonPlugin/components/ButtonButton.tsx"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport {\n type PluginButtonProps,\n getHotkeyByPlatform,\n getPluginType,\n getTooltip,\n isRangeInSameBlock,\n someNode,\n useEditorState,\n useEventPlateId,\n} from '@frontify/fondue/rte';\n\nimport { ELEMENT_BUTTON } from '../createButtonPlugin';\n\nimport { ButtonToolbarButton } from './ButtonToolbarButton';\n\nexport const ButtonButton = ({ editorId, id }: PluginButtonProps) => {\n const editor = useEditorState(useEventPlateId(editorId));\n const isEnabled = !!isRangeInSameBlock(editor, {\n at: editor.selection,\n });\n const type = getPluginType(editor, ELEMENT_BUTTON);\n const isLink = !!editor?.selection && someNode(editor, { match: { type } });\n\n return (\n <div data-plugin-id={id}>\n <ButtonToolbarButton\n pressed={isLink}\n disabled={!isEnabled} // maybe pressed\n tooltip={getTooltip(\n isEnabled\n ? `Button\\n${getHotkeyByPlatform('Ctrl+Shift+K')}`\n : 'Buttons can only be set for a single text block.',\n )}\n />\n </div>\n );\n};\n"],"names":["ButtonButton","editorId","id","editor","useEditorState","useEventPlateId","isEnabled","isRangeInSameBlock","type","getPluginType","ELEMENT_BUTTON","isLink","someNode","jsx","ButtonToolbarButton","getTooltip","getHotkeyByPlatform"],"mappings":";;;;AAiBO,MAAMA,IAAe,CAAC,EAAE,UAAAC,GAAU,IAAAC,QAA4B;AACjE,QAAMC,IAASC,EAAeC,EAAgBJ,CAAQ,CAAC,GACjDK,IAAY,CAAC,CAACC,EAAmBJ,GAAQ;AAAA,IAC3C,IAAIA,EAAO;AAAA,EAAA,CACd,GACKK,IAAOC,EAAcN,GAAQO,CAAc,GAC3CC,IAAS,CAAC,CAACR,GAAQ,aAAaS,EAAST,GAAQ,EAAE,OAAO,EAAE,MAAAK,EAAA,GAAQ;AAE1E,SACI,gBAAAK,EAAC,OAAA,EAAI,kBAAgBX,GACjB,UAAA,gBAAAW;AAAA,IAACC;AAAA,IAAA;AAAA,MACG,SAASH;AAAA,MACT,UAAU,CAACL;AAAA,MACX,SAASS;AAAA,QACLT,IACM;AAAA,EAAWU,EAAoB,cAAc,CAAC,KAC9C;AAAA,MAAA;AAAA,IACV;AAAA,EAAA,GAER;AAER;"}
|
|
@@ -12,17 +12,17 @@ const U = {
|
|
|
12
12
|
buttonStyle: "primary",
|
|
13
13
|
newTab: !1
|
|
14
14
|
}, h = () => {
|
|
15
|
-
const [n, o] = g((
|
|
15
|
+
const [n, o] = g((t, s) => {
|
|
16
16
|
const { type: l, payload: u } = s;
|
|
17
17
|
switch (l) {
|
|
18
18
|
case "NEW_TAB":
|
|
19
19
|
return {
|
|
20
|
-
...
|
|
20
|
+
...t,
|
|
21
21
|
newTab: !0
|
|
22
22
|
};
|
|
23
23
|
case "SAME_TAB":
|
|
24
24
|
return {
|
|
25
|
-
...
|
|
25
|
+
...t,
|
|
26
26
|
newTab: !1
|
|
27
27
|
};
|
|
28
28
|
case "URL":
|
|
@@ -30,52 +30,52 @@ const U = {
|
|
|
30
30
|
case "BUTTON_STYLE":
|
|
31
31
|
case "INIT":
|
|
32
32
|
return {
|
|
33
|
-
...
|
|
33
|
+
...t,
|
|
34
34
|
...u
|
|
35
35
|
};
|
|
36
36
|
default:
|
|
37
|
-
return
|
|
37
|
+
return t;
|
|
38
38
|
}
|
|
39
39
|
}, U);
|
|
40
40
|
return [n, o];
|
|
41
|
-
},
|
|
42
|
-
const n = d(), [o,
|
|
41
|
+
}, v = () => {
|
|
42
|
+
const n = d(), [o, t] = h();
|
|
43
43
|
E(() => {
|
|
44
|
-
const
|
|
45
|
-
|
|
44
|
+
const e = N(n);
|
|
45
|
+
t({
|
|
46
46
|
type: "INIT",
|
|
47
47
|
payload: {
|
|
48
48
|
text: a.text() || a.url(),
|
|
49
|
-
buttonStyle:
|
|
49
|
+
buttonStyle: e,
|
|
50
50
|
newTab: !!a.newTab(),
|
|
51
51
|
url: a.url()
|
|
52
52
|
}
|
|
53
53
|
});
|
|
54
|
-
}, [
|
|
55
|
-
const s = (
|
|
56
|
-
|
|
54
|
+
}, [t, n]);
|
|
55
|
+
const s = (e) => {
|
|
56
|
+
t({
|
|
57
57
|
type: "TEXT",
|
|
58
|
-
payload: { text:
|
|
58
|
+
payload: { text: e }
|
|
59
59
|
});
|
|
60
|
-
}, l = (
|
|
61
|
-
|
|
60
|
+
}, l = (e) => {
|
|
61
|
+
t({
|
|
62
62
|
type: "BUTTON_STYLE",
|
|
63
|
-
payload: { buttonStyle:
|
|
63
|
+
payload: { buttonStyle: e }
|
|
64
64
|
});
|
|
65
|
-
}, u = (
|
|
66
|
-
|
|
65
|
+
}, u = (e) => {
|
|
66
|
+
t({
|
|
67
67
|
type: "URL",
|
|
68
|
-
payload: { url:
|
|
68
|
+
payload: { url: e }
|
|
69
69
|
});
|
|
70
|
-
}, i = (
|
|
71
|
-
e
|
|
70
|
+
}, i = (e) => {
|
|
71
|
+
t(e ? { type: "NEW_TAB" } : { type: "SAME_TAB" });
|
|
72
72
|
}, y = () => {
|
|
73
73
|
r.reset();
|
|
74
|
-
}, T = (
|
|
74
|
+
}, T = (e) => {
|
|
75
75
|
if (!p(o.url) || !c)
|
|
76
76
|
return;
|
|
77
77
|
const f = w(o.url);
|
|
78
|
-
r.text(o.text), r.url(f), r.buttonStyle(o.buttonStyle), r.newTab(o.newTab), x(n) &&
|
|
78
|
+
r.text(o.text), r.url(f), r.buttonStyle(o.buttonStyle), r.newTab(o.newTab), x(n) && e?.preventDefault();
|
|
79
79
|
}, c = o.url !== "" && o.text !== "", { appBridge: m } = S(n, B);
|
|
80
80
|
return b(
|
|
81
81
|
"enter",
|
|
@@ -99,6 +99,6 @@ const U = {
|
|
|
99
99
|
};
|
|
100
100
|
export {
|
|
101
101
|
h as InsertModalState,
|
|
102
|
-
|
|
102
|
+
v as useInsertModal
|
|
103
103
|
};
|
|
104
104
|
//# sourceMappingURL=useInsertModal.es.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInsertModal.es.js","sources":["../../../../../../../../src/components/RichTextEditor/plugins/ButtonPlugin/components/FloatingButton/InsertButtonModal/useInsertModal.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type AppBridgeBlock } from '@frontify/app-bridge';\nimport { getPluginOptions, useEditorRef, useHotkeys } from '@frontify/fondue/rte';\nimport { type Dispatch, type Reducer, useEffect, useReducer } from 'react';\n\nimport { addHttps } from '../../../../../../../helpers';\nimport { isValidUrlOrEmpty } from '../../../../../../Link/utils/url';\nimport { ELEMENT_BUTTON } from '../../../createButtonPlugin';\nimport { submitFloatingButton } from '../../../transforms/submitFloatingButton';\nimport { type RichTextButtonStyle } from '../../../types';\nimport { getButtonStyle } from '../../../utils/getButtonStyle';\nimport { floatingButtonActions, floatingButtonSelectors } from '../floatingButtonStore';\n\nimport { type InsertModalDispatchType, type InsertModalStateProps } from './types';\n\nconst initialState: InsertModalStateProps = {\n url: '',\n text: '',\n buttonStyle: 'primary',\n newTab: false,\n};\n\nexport const InsertModalState = (): [InsertModalStateProps, Dispatch<InsertModalDispatchType>] => {\n const [state, dispatch] = useReducer<Reducer<InsertModalStateProps, InsertModalDispatchType>>((state, action) => {\n const { type, payload } = action;\n\n switch (type) {\n case 'NEW_TAB':\n return {\n ...state,\n newTab: true,\n };\n case 'SAME_TAB':\n return {\n ...state,\n newTab: false,\n };\n case 'URL':\n case 'TEXT':\n case 'BUTTON_STYLE':\n case 'INIT':\n return {\n ...state,\n ...payload,\n };\n default:\n return state;\n }\n }, initialState);\n\n return [state, dispatch];\n};\n\nexport const useInsertModal = () => {\n const editor = useEditorRef();\n const [state, dispatch] = InsertModalState();\n\n useEffect(() => {\n const buttonStyle = getButtonStyle(editor);\n\n dispatch({\n type: 'INIT',\n payload: {\n text: floatingButtonSelectors.text() || floatingButtonSelectors.url(),\n buttonStyle,\n newTab: !!floatingButtonSelectors.newTab(),\n url: floatingButtonSelectors.url(),\n },\n });\n }, [dispatch, editor]);\n\n const onTextChange = (value: string) => {\n dispatch({\n type: 'TEXT',\n payload: { text: value },\n });\n };\n\n const onButtonStyleChange = (value: RichTextButtonStyle) => {\n dispatch({\n type: 'BUTTON_STYLE',\n payload: { buttonStyle: value },\n });\n };\n\n const onUrlChange = (value: string) => {\n dispatch({\n type: 'URL',\n payload: { url: value },\n });\n };\n\n const onToggleTab = (checked: boolean) => {\n checked ? dispatch({ type: 'NEW_TAB' }) : dispatch({ type: 'SAME_TAB' });\n };\n\n const onCancel = () => {\n floatingButtonActions.reset();\n };\n\n const onSave = (event: React.MouseEvent<HTMLButtonElement, MouseEvent> | KeyboardEvent | undefined) => {\n if (!isValidUrlOrEmpty(state.url) || !hasValues) {\n return;\n }\n\n const urlToSave = addHttps(state.url);\n\n floatingButtonActions.text(state.text);\n floatingButtonActions.url(urlToSave);\n floatingButtonActions.buttonStyle(state.buttonStyle);\n floatingButtonActions.newTab(state.newTab);\n\n if (submitFloatingButton(editor)) {\n event?.preventDefault();\n }\n };\n\n const hasValues = state.url !== '' && state.text !== '';\n\n const { appBridge } = getPluginOptions<{ appBridge: AppBridgeBlock }>(editor, ELEMENT_BUTTON);\n\n useHotkeys(\n 'enter',\n onSave,\n {\n enableOnFormTags: ['INPUT'],\n },\n [],\n );\n\n return {\n state,\n onTextChange,\n onButtonStyleChange,\n onUrlChange,\n onToggleTab,\n onCancel,\n onSave,\n hasValues,\n isValidUrlOrEmpty,\n appBridge,\n };\n};\n"],"names":["initialState","InsertModalState","state","dispatch","useReducer","action","type","payload","useInsertModal","editor","useEditorRef","useEffect","buttonStyle","getButtonStyle","floatingButtonSelectors","onTextChange","value","onButtonStyleChange","onUrlChange","onToggleTab","checked","onCancel","floatingButtonActions","onSave","event","isValidUrlOrEmpty","hasValues","urlToSave","addHttps","submitFloatingButton","appBridge","getPluginOptions","ELEMENT_BUTTON","useHotkeys"],"mappings":";;;;;;;;AAgBA,MAAMA,IAAsC;AAAA,EACxC,KAAK;AAAA,EACL,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AACZ,GAEaC,IAAmB,MAAkE;AAC9F,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAoE,CAACF,GAAOG,MAAW;AAC7G,UAAM,EAAE,MAAAC,GAAM,SAAAC,EAAA,IAAYF;AAE1B,YAAQC,GAAA;AAAA,MACJ,KAAK;AACD,eAAO;AAAA,UACH,GAAGJ;AAAAA,UACH,QAAQ;AAAA,QAAA;AAAA,MAEhB,KAAK;AACD,eAAO;AAAA,UACH,GAAGA;AAAAA,UACH,QAAQ;AAAA,QAAA;AAAA,MAEhB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,eAAO;AAAA,UACH,GAAGA;AAAAA,UACH,GAAGK;AAAA,QAAA;AAAA,MAEX;AACI,eAAOL;AAAAA,IAAA;AAAA,EAEnB,GAAGF,CAAY;AAEf,SAAO,CAACE,GAAOC,CAAQ;AAC3B,GAEaK,IAAiB,MAAM;AAChC,QAAMC,IAASC,EAAA,GACT,CAACR,GAAOC,CAAQ,IAAIF,EAAA;AAE1B,EAAAU,EAAU,MAAM;AACZ,UAAMC,IAAcC,EAAeJ,CAAM;AAEzC,IAAAN,EAAS;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,QACL,MAAMW,EAAwB,UAAUA,EAAwB,IAAA;AAAA,QAChE,aAAAF;AAAA,QACA,QAAQ,CAAC,CAACE,EAAwB,OAAA;AAAA,QAClC,KAAKA,EAAwB,IAAA;AAAA,MAAI;AAAA,IACrC,CACH;AAAA,EACL,GAAG,CAACX,GAAUM,CAAM,CAAC;AAErB,QAAMM,IAAe,CAACC,MAAkB;AACpC,IAAAb,EAAS;AAAA,MACL,MAAM;AAAA,MACN,SAAS,EAAE,MAAMa,EAAA;AAAA,IAAM,CAC1B;AAAA,EACL,GAEMC,IAAsB,CAACD,MAA+B;AACxD,IAAAb,EAAS;AAAA,MACL,MAAM;AAAA,MACN,SAAS,EAAE,aAAaa,EAAA;AAAA,IAAM,CACjC;AAAA,EACL,GAEME,IAAc,CAACF,MAAkB;AACnC,IAAAb,EAAS;AAAA,MACL,MAAM;AAAA,MACN,SAAS,EAAE,KAAKa,EAAA;AAAA,IAAM,CACzB;AAAA,EACL,GAEMG,IAAc,CAACC,MAAqB;AACtC,IAAUjB,EAAViB,IAAmB,EAAE,MAAM,UAAA,IAAwB,EAAE,MAAM,YAArB;AAAA,EAC1C,GAEMC,IAAW,MAAM;AACnB,IAAAC,EAAsB,MAAA;AAAA,EAC1B,GAEMC,IAAS,CAACC,MAAuF;AACnG,QAAI,CAACC,EAAkBvB,EAAM,GAAG,KAAK,CAACwB;AAClC;AAGJ,UAAMC,IAAYC,EAAS1B,EAAM,GAAG;AAEpC,IAAAoB,EAAsB,KAAKpB,EAAM,IAAI,GACrCoB,EAAsB,IAAIK,CAAS,GACnCL,EAAsB,YAAYpB,EAAM,WAAW,GACnDoB,EAAsB,OAAOpB,EAAM,MAAM,GAErC2B,EAAqBpB,CAAM,
|
|
1
|
+
{"version":3,"file":"useInsertModal.es.js","sources":["../../../../../../../../src/components/RichTextEditor/plugins/ButtonPlugin/components/FloatingButton/InsertButtonModal/useInsertModal.ts"],"sourcesContent":["/* (c) Copyright Frontify Ltd., all rights reserved. */\n\nimport { type AppBridgeBlock } from '@frontify/app-bridge';\nimport { getPluginOptions, useEditorRef, useHotkeys } from '@frontify/fondue/rte';\nimport { type Dispatch, type Reducer, useEffect, useReducer } from 'react';\n\nimport { addHttps } from '../../../../../../../helpers';\nimport { isValidUrlOrEmpty } from '../../../../../../Link/utils/url';\nimport { ELEMENT_BUTTON } from '../../../createButtonPlugin';\nimport { submitFloatingButton } from '../../../transforms/submitFloatingButton';\nimport { type RichTextButtonStyle } from '../../../types';\nimport { getButtonStyle } from '../../../utils/getButtonStyle';\nimport { floatingButtonActions, floatingButtonSelectors } from '../floatingButtonStore';\n\nimport { type InsertModalDispatchType, type InsertModalStateProps } from './types';\n\nconst initialState: InsertModalStateProps = {\n url: '',\n text: '',\n buttonStyle: 'primary',\n newTab: false,\n};\n\nexport const InsertModalState = (): [InsertModalStateProps, Dispatch<InsertModalDispatchType>] => {\n const [state, dispatch] = useReducer<Reducer<InsertModalStateProps, InsertModalDispatchType>>((state, action) => {\n const { type, payload } = action;\n\n switch (type) {\n case 'NEW_TAB':\n return {\n ...state,\n newTab: true,\n };\n case 'SAME_TAB':\n return {\n ...state,\n newTab: false,\n };\n case 'URL':\n case 'TEXT':\n case 'BUTTON_STYLE':\n case 'INIT':\n return {\n ...state,\n ...payload,\n };\n default:\n return state;\n }\n }, initialState);\n\n return [state, dispatch];\n};\n\nexport const useInsertModal = () => {\n const editor = useEditorRef();\n const [state, dispatch] = InsertModalState();\n\n useEffect(() => {\n const buttonStyle = getButtonStyle(editor);\n\n dispatch({\n type: 'INIT',\n payload: {\n text: floatingButtonSelectors.text() || floatingButtonSelectors.url(),\n buttonStyle,\n newTab: !!floatingButtonSelectors.newTab(),\n url: floatingButtonSelectors.url(),\n },\n });\n }, [dispatch, editor]);\n\n const onTextChange = (value: string) => {\n dispatch({\n type: 'TEXT',\n payload: { text: value },\n });\n };\n\n const onButtonStyleChange = (value: RichTextButtonStyle) => {\n dispatch({\n type: 'BUTTON_STYLE',\n payload: { buttonStyle: value },\n });\n };\n\n const onUrlChange = (value: string) => {\n dispatch({\n type: 'URL',\n payload: { url: value },\n });\n };\n\n const onToggleTab = (checked: boolean) => {\n checked ? dispatch({ type: 'NEW_TAB' }) : dispatch({ type: 'SAME_TAB' });\n };\n\n const onCancel = () => {\n floatingButtonActions.reset();\n };\n\n const onSave = (event: React.MouseEvent<HTMLButtonElement, MouseEvent> | KeyboardEvent | undefined) => {\n if (!isValidUrlOrEmpty(state.url) || !hasValues) {\n return;\n }\n\n const urlToSave = addHttps(state.url);\n\n floatingButtonActions.text(state.text);\n floatingButtonActions.url(urlToSave);\n floatingButtonActions.buttonStyle(state.buttonStyle);\n floatingButtonActions.newTab(state.newTab);\n\n if (submitFloatingButton(editor)) {\n event?.preventDefault();\n }\n };\n\n const hasValues = state.url !== '' && state.text !== '';\n\n const { appBridge } = getPluginOptions<{ appBridge: AppBridgeBlock }>(editor, ELEMENT_BUTTON);\n\n useHotkeys(\n 'enter',\n onSave,\n {\n enableOnFormTags: ['INPUT'],\n },\n [],\n );\n\n return {\n state,\n onTextChange,\n onButtonStyleChange,\n onUrlChange,\n onToggleTab,\n onCancel,\n onSave,\n hasValues,\n isValidUrlOrEmpty,\n appBridge,\n };\n};\n"],"names":["initialState","InsertModalState","state","dispatch","useReducer","action","type","payload","useInsertModal","editor","useEditorRef","useEffect","buttonStyle","getButtonStyle","floatingButtonSelectors","onTextChange","value","onButtonStyleChange","onUrlChange","onToggleTab","checked","onCancel","floatingButtonActions","onSave","event","isValidUrlOrEmpty","hasValues","urlToSave","addHttps","submitFloatingButton","appBridge","getPluginOptions","ELEMENT_BUTTON","useHotkeys"],"mappings":";;;;;;;;AAgBA,MAAMA,IAAsC;AAAA,EACxC,KAAK;AAAA,EACL,MAAM;AAAA,EACN,aAAa;AAAA,EACb,QAAQ;AACZ,GAEaC,IAAmB,MAAkE;AAC9F,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAoE,CAACF,GAAOG,MAAW;AAC7G,UAAM,EAAE,MAAAC,GAAM,SAAAC,EAAA,IAAYF;AAE1B,YAAQC,GAAA;AAAA,MACJ,KAAK;AACD,eAAO;AAAA,UACH,GAAGJ;AAAAA,UACH,QAAQ;AAAA,QAAA;AAAA,MAEhB,KAAK;AACD,eAAO;AAAA,UACH,GAAGA;AAAAA,UACH,QAAQ;AAAA,QAAA;AAAA,MAEhB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACD,eAAO;AAAA,UACH,GAAGA;AAAAA,UACH,GAAGK;AAAA,QAAA;AAAA,MAEX;AACI,eAAOL;AAAAA,IAAA;AAAA,EAEnB,GAAGF,CAAY;AAEf,SAAO,CAACE,GAAOC,CAAQ;AAC3B,GAEaK,IAAiB,MAAM;AAChC,QAAMC,IAASC,EAAA,GACT,CAACR,GAAOC,CAAQ,IAAIF,EAAA;AAE1B,EAAAU,EAAU,MAAM;AACZ,UAAMC,IAAcC,EAAeJ,CAAM;AAEzC,IAAAN,EAAS;AAAA,MACL,MAAM;AAAA,MACN,SAAS;AAAA,QACL,MAAMW,EAAwB,UAAUA,EAAwB,IAAA;AAAA,QAChE,aAAAF;AAAA,QACA,QAAQ,CAAC,CAACE,EAAwB,OAAA;AAAA,QAClC,KAAKA,EAAwB,IAAA;AAAA,MAAI;AAAA,IACrC,CACH;AAAA,EACL,GAAG,CAACX,GAAUM,CAAM,CAAC;AAErB,QAAMM,IAAe,CAACC,MAAkB;AACpC,IAAAb,EAAS;AAAA,MACL,MAAM;AAAA,MACN,SAAS,EAAE,MAAMa,EAAA;AAAA,IAAM,CAC1B;AAAA,EACL,GAEMC,IAAsB,CAACD,MAA+B;AACxD,IAAAb,EAAS;AAAA,MACL,MAAM;AAAA,MACN,SAAS,EAAE,aAAaa,EAAA;AAAA,IAAM,CACjC;AAAA,EACL,GAEME,IAAc,CAACF,MAAkB;AACnC,IAAAb,EAAS;AAAA,MACL,MAAM;AAAA,MACN,SAAS,EAAE,KAAKa,EAAA;AAAA,IAAM,CACzB;AAAA,EACL,GAEMG,IAAc,CAACC,MAAqB;AACtC,IAAUjB,EAAViB,IAAmB,EAAE,MAAM,UAAA,IAAwB,EAAE,MAAM,YAArB;AAAA,EAC1C,GAEMC,IAAW,MAAM;AACnB,IAAAC,EAAsB,MAAA;AAAA,EAC1B,GAEMC,IAAS,CAACC,MAAuF;AACnG,QAAI,CAACC,EAAkBvB,EAAM,GAAG,KAAK,CAACwB;AAClC;AAGJ,UAAMC,IAAYC,EAAS1B,EAAM,GAAG;AAEpC,IAAAoB,EAAsB,KAAKpB,EAAM,IAAI,GACrCoB,EAAsB,IAAIK,CAAS,GACnCL,EAAsB,YAAYpB,EAAM,WAAW,GACnDoB,EAAsB,OAAOpB,EAAM,MAAM,GAErC2B,EAAqBpB,CAAM,KAC3Be,GAAO,eAAA;AAAA,EAEf,GAEME,IAAYxB,EAAM,QAAQ,MAAMA,EAAM,SAAS,IAE/C,EAAE,WAAA4B,EAAA,IAAcC,EAAgDtB,GAAQuB,CAAc;AAE5F,SAAAC;AAAA,IACI;AAAA,IACAV;AAAA,IACA;AAAA,MACI,kBAAkB,CAAC,OAAO;AAAA,IAAA;AAAA,IAE9B,CAAA;AAAA,EAAC,GAGE;AAAA,IACH,OAAArB;AAAA,IACA,cAAAa;AAAA,IACA,qBAAAE;AAAA,IACA,aAAAC;AAAA,IACA,aAAAC;AAAA,IACA,UAAAE;AAAA,IACA,QAAAE;AAAA,IACA,WAAAG;AAAA,IACA,mBAAAD;AAAA,IACA,WAAAK;AAAA,EAAA;AAER;"}
|
|
@@ -1,33 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import { ButtonButton as d } from "./components/ButtonButton.es.js";
|
|
8
|
-
import { CustomFloatingButton as p } from "./components/FloatingButton/CustomFloatingButton.es.js";
|
|
9
|
-
import { withButton as B } from "./withButton.es.js";
|
|
1
|
+
import { Plugin as i, createPluginFactory as n } from "@frontify/fondue/rte";
|
|
2
|
+
import { isValidUrl as s } from "../../../Link/utils/url.es.js";
|
|
3
|
+
import { ButtonMarkupElement as u } from "./ButtonMarkupElement/index.es.js";
|
|
4
|
+
import { ButtonButton as a } from "./components/ButtonButton.es.js";
|
|
5
|
+
import { CustomFloatingButton as l } from "./components/FloatingButton/CustomFloatingButton.es.js";
|
|
6
|
+
import { withButton as p } from "./withButton.es.js";
|
|
10
7
|
import { BlockButtonStyles as m } from "./utils/styles.es.js";
|
|
11
|
-
const
|
|
12
|
-
key:
|
|
8
|
+
const g = "button", d = "button-plugin", B = (e) => n({
|
|
9
|
+
key: g,
|
|
13
10
|
isElement: !0,
|
|
14
11
|
isInline: !0,
|
|
15
12
|
props: ({ element: t }) => ({
|
|
16
|
-
nodeProps: { href: t
|
|
13
|
+
nodeProps: { href: t?.url, target: t?.target }
|
|
17
14
|
}),
|
|
18
|
-
withOverrides:
|
|
19
|
-
renderAfterEditable:
|
|
15
|
+
withOverrides: p,
|
|
16
|
+
renderAfterEditable: l,
|
|
20
17
|
options: {
|
|
21
|
-
isUrl:
|
|
18
|
+
isUrl: s,
|
|
22
19
|
rangeBeforeOptions: {
|
|
23
20
|
matchString: " ",
|
|
24
21
|
skipInvalid: !0,
|
|
25
22
|
afterMatch: !0
|
|
26
23
|
},
|
|
27
24
|
triggerFloatingButtonHotkeys: "command+shift+k, ctrl+shift+k",
|
|
28
|
-
appBridge:
|
|
25
|
+
appBridge: e
|
|
29
26
|
},
|
|
30
|
-
then: (t, { type:
|
|
27
|
+
then: (t, { type: r }) => ({
|
|
31
28
|
deserializeHtml: {
|
|
32
29
|
rules: [
|
|
33
30
|
{
|
|
@@ -36,32 +33,31 @@ const c = "button", f = "button-plugin", h = (r) => a({
|
|
|
36
33
|
}
|
|
37
34
|
],
|
|
38
35
|
getNode: (o) => ({
|
|
39
|
-
type:
|
|
36
|
+
type: r,
|
|
40
37
|
url: o.getAttribute("href"),
|
|
41
38
|
target: o.getAttribute("target") || "_blank"
|
|
42
39
|
})
|
|
43
40
|
}
|
|
44
41
|
})
|
|
45
42
|
})();
|
|
46
|
-
class
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
this.styles = i, this.appBridge = o == null ? void 0 : o.appBridge;
|
|
43
|
+
class y extends i {
|
|
44
|
+
styles = {};
|
|
45
|
+
appBridge;
|
|
46
|
+
constructor({ styles: t = m, ...r }) {
|
|
47
|
+
super(d, {
|
|
48
|
+
button: a,
|
|
49
|
+
markupElement: new u(),
|
|
50
|
+
...r
|
|
51
|
+
}), this.styles = t, this.appBridge = r?.appBridge;
|
|
56
52
|
}
|
|
57
53
|
plugins() {
|
|
58
|
-
return [
|
|
54
|
+
return [B(this.appBridge)];
|
|
59
55
|
}
|
|
60
56
|
}
|
|
61
57
|
export {
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
58
|
+
d as BUTTON_PLUGIN,
|
|
59
|
+
y as ButtonPlugin,
|
|
60
|
+
g as ELEMENT_BUTTON,
|
|
61
|
+
B as createButtonPlugin
|
|
66
62
|
};
|
|
67
63
|
//# sourceMappingURL=createButtonPlugin.es.js.map
|