@flamingo-stack/openframe-frontend-core 0.0.744 → 0.0.745
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/build/export-map.json +1 -1
- package/dist/{chunk-NURAL5HD.cjs → chunk-3LX5AGZO.cjs} +9 -9
- package/dist/{chunk-PYWHDPVC.cjs → chunk-6IQDQQ56.cjs} +25 -25
- package/dist/{chunk-FTYQS6VI.cjs → chunk-75BF7YJR.cjs} +7 -7
- package/dist/{chunk-H62FNZGG.cjs → chunk-7KHQHYXL.cjs} +11 -11
- package/dist/{chunk-65LJNDR2.cjs → chunk-7PQOZLVP.cjs} +9 -9
- package/dist/{chunk-7YDF3QBN.cjs → chunk-DJO7YMT3.cjs} +126 -13
- package/dist/{chunk-2JRCJV3M.cjs → chunk-FNIFUCXU.cjs} +3 -3
- package/dist/{chunk-35IQLGV3.cjs → chunk-GEEKJ7SH.cjs} +37 -37
- package/dist/{chunk-OC2LBQQJ.cjs → chunk-GOTEXQZN.cjs} +15 -15
- package/dist/{chunk-HHL23RFC.cjs → chunk-GQ2TRIOV.cjs} +33 -33
- package/dist/{chunk-2UBR53AN.cjs → chunk-HMSCUL4R.cjs} +4 -4
- package/dist/{chunk-HMSUYWSB.cjs → chunk-HVR7DPAY.cjs} +4 -4
- package/dist/{chunk-AT6ZI4CO.cjs → chunk-M4FKV2U5.cjs} +6 -6
- package/dist/{chunk-QZYF2YQ3.cjs → chunk-NFINQ7IZ.cjs} +4 -4
- package/dist/{chunk-HTQJYN47.cjs → chunk-PM5ELQBL.cjs} +17 -17
- package/dist/{chunk-HJ4KGA2M.cjs → chunk-QES5NV4T.cjs} +716 -532
- package/dist/{chunk-QSO56JZ2.cjs → chunk-RIGSZEXS.cjs} +66 -66
- package/dist/{cloud-tenants-JPXAXSPE.cjs → cloud-tenants-DECPWIYQ.cjs} +4 -4
- package/dist/components/case-studies/index.cjs +14 -14
- package/dist/components/chat/index.cjs +3 -3
- package/dist/components/contact/index.cjs +5 -5
- package/dist/components/docs/index.cjs +8 -8
- package/dist/components/embeds/index.cjs +5 -5
- package/dist/components/embeds/reddit-embed-client.d.ts +3 -1
- package/dist/components/embeds/reddit-embed-client.d.ts.map +1 -1
- package/dist/components/embeds/reddit-embed-client.js +5 -3
- package/dist/components/embeds/twitter-embed-client.d.ts +3 -1
- package/dist/components/embeds/twitter-embed-client.d.ts.map +1 -1
- package/dist/components/embeds/twitter-embed-client.js +5 -3
- package/dist/components/faq/index.cjs +6 -6
- package/dist/components/features/index.cjs +4 -4
- package/dist/components/help-center-pages/index.cjs +74 -74
- package/dist/components/index.cjs +41 -37
- package/dist/components/meeting-scheduler/index.cjs +22 -22
- package/dist/components/navigation/index.cjs +7 -7
- package/dist/components/onboarding-guides/index.cjs +6 -6
- package/dist/components/product-demo/index.cjs +7 -7
- package/dist/components/tickets/index.cjs +9 -9
- package/dist/components/ui/index.cjs +8 -4
- package/dist/components/ui/index.d.ts +1 -0
- package/dist/components/ui/index.d.ts.map +1 -1
- package/dist/components/ui/index.js +1 -0
- package/dist/components/ui/markdown/base-components.d.ts.map +1 -1
- package/dist/components/ui/markdown/base-components.js +3 -2
- package/dist/components/ui/markdown/rich/embed-overrides.d.ts.map +1 -1
- package/dist/components/ui/markdown/rich/embed-overrides.js +11 -8
- package/dist/components/ui/markdown-editor.d.ts.map +1 -1
- package/dist/components/ui/markdown-editor.js +4 -0
- package/dist/components/ui/markdown-link-command.d.ts +37 -0
- package/dist/components/ui/markdown-link-command.d.ts.map +1 -0
- package/dist/components/ui/markdown-link-command.js +180 -0
- package/dist/{devices-ONC4JOVH.cjs → devices-HJKDRWQX.cjs} +5 -5
- package/dist/{embeddable-chat-7ZEGCDVF.cjs → embeddable-chat-3SKFBO2P.cjs} +64 -64
- package/dist/index.cjs +24 -8
- package/dist/{knowledge-G7XU5YST.cjs → knowledge-NH2CGY2C.cjs} +5 -5
- package/dist/{logs-5B7NY4G6.cjs → logs-KZYIDYQK.cjs} +12 -12
- package/dist/{policies-OYR3SLJN.cjs → policies-UAVTPIKM.cjs} +8 -8
- package/dist/{scripts-6CWHTY6U.cjs → scripts-FRPY43KU.cjs} +9 -9
- package/dist/{software-update-AJPIY4SQ.cjs → software-update-AEJJNLX5.cjs} +7 -7
- package/dist/utils/index.cjs +119 -4
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/markdown-link.d.ts +44 -0
- package/dist/utils/markdown-link.d.ts.map +1 -0
- package/dist/utils/markdown-link.js +83 -0
- package/dist/utils/markdown-to-plain.d.ts +3 -16
- package/dist/utils/markdown-to-plain.d.ts.map +1 -1
- package/dist/utils/markdown-to-plain.js +33 -3
- package/package.json +3 -1
- package/src/components/embeds/reddit-embed-client.tsx +7 -3
- package/src/components/embeds/twitter-embed-client.tsx +7 -3
- package/src/components/ui/index.ts +1 -0
- package/src/components/ui/markdown/base-components.tsx +5 -2
- package/src/components/ui/markdown/rich/embed-overrides.tsx +12 -9
- package/src/components/ui/markdown-editor.tsx +6 -0
- package/src/components/ui/markdown-link-command.tsx +252 -0
- package/src/utils/index.ts +1 -0
- package/src/utils/markdown-link.ts +148 -0
- package/src/utils/markdown-to-plain.ts +64 -22
|
@@ -138,6 +138,7 @@ export * from './hidden-tags-popup';
|
|
|
138
138
|
export * from './tag-search-input';
|
|
139
139
|
export * from './tag-key-value-filter';
|
|
140
140
|
export * from './markdown-editor';
|
|
141
|
+
export * from './markdown-link-command';
|
|
141
142
|
export * from './file-upload';
|
|
142
143
|
export * from './image-uploader';
|
|
143
144
|
export * from './ticket-status-tag';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ui/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -157,6 +157,7 @@ export * from "./hidden-tags-popup.js";
|
|
|
157
157
|
export * from "./tag-search-input.js";
|
|
158
158
|
export * from "./tag-key-value-filter.js";
|
|
159
159
|
export * from "./markdown-editor.js";
|
|
160
|
+
export * from "./markdown-link-command.js";
|
|
160
161
|
export * from "./file-upload.js";
|
|
161
162
|
export * from "./image-uploader.js";
|
|
162
163
|
export * from "./ticket-status-tag.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base-components.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/markdown/base-components.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAU7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"base-components.d.ts","sourceRoot":"","sources":["../../../../src/components/ui/markdown/base-components.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAU7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAOnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;;;;;;GASG;AACH,MAAM,MAAM,aAAa,CAAC,GAAG,SAAS,MAAM,KAAK,CAAC,GAAG,CAAC,iBAAiB,IAAI,KAAK,CAAC,wBAAwB,CAAC,GAAG,CAAC,GAC5G,UAAU,CAAC;AAEb;;;;;;GAMG;AACH,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC;IAC3D,UAAU,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,YAAY,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC;IACvE,GAAG,EAAE,CAAC,KAAK,EAAE,aAAa,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,YAAY,CAAC;CAC1D;AAoCD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAE5D;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IAC3C,oBAAoB,EAAE,OAAO,CAAC;IAC9B,WAAW,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mBAAmB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/G,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC,iBAAiB,CAAC,CAAC;CACnF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,0BAA0B,CAAC,EACzC,SAAS,GACV,EAAE;IACD,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;CAC5C,GAAG,qBAAqB,CA4DxB;AAED,wBAAgB,mBAAmB,CAAC,EAClC,SAAS,EACT,oBAAoB,EACpB,WAAW,EACX,WAAW,EAAE,eAAe,EAC5B,mBAAmB,EACnB,aAAa,GACd,EAAE,0BAA0B,GAAG,UAAU,CAyOzC"}
|
|
@@ -5,6 +5,7 @@ import Link from "../../../embed-shims/next-link.js";
|
|
|
5
5
|
import { useAuthedImageSrc } from "../../../hooks/use-authed-image-src.js";
|
|
6
6
|
import { cn } from "../../../utils/cn.js";
|
|
7
7
|
import { slugifyHeadingText } from "../../../utils/markdown-heading-id.js";
|
|
8
|
+
import { renderedLinkRel } from "../../../utils/markdown-link.js";
|
|
8
9
|
import { getHashTargetElement, navigateSamePageHash, HUB_HEADER_OFFSET_PX } from "../../../utils/same-page-hash-nav.js";
|
|
9
10
|
import { extractText, resolveFallbackHeadingId, useAssignedHeadingIds, useHeadingId } from "./heading-ids.js";
|
|
10
11
|
import { MermaidDiagram } from "./mermaid-diagram.js";
|
|
@@ -105,7 +106,7 @@ function buildBaseComponents({
|
|
|
105
106
|
// --- paragraph ---
|
|
106
107
|
p: ({ children }) => /* @__PURE__ */ jsx("p", { className: cn("mb-4 leading-relaxed text-ods-text-primary first:mt-0 last:mb-0", textSizes.p), children }),
|
|
107
108
|
// --- links ---
|
|
108
|
-
a: ({ href, children, className: linkClassName }) => {
|
|
109
|
+
a: ({ href, children, className: linkClassName, rel: authoredRel }) => {
|
|
109
110
|
const isBroken = href !== void 0 && brokenLinks.includes(href);
|
|
110
111
|
const isInternalDocLink = propCurrentPath !== void 0 && propCurrentPath !== null && !!href && !href.startsWith("http") && !href.startsWith("#");
|
|
111
112
|
if (isBroken) {
|
|
@@ -168,7 +169,7 @@ function buildBaseComponents({
|
|
|
168
169
|
href,
|
|
169
170
|
className: `relative text-ods-accent no-underline transition-colors duration-200 after:absolute after:-bottom-0.5 after:left-0 after:h-0.5 after:w-0 after:bg-ods-accent after:transition-all after:duration-300 after:content-[''] hover:after:w-full ${linkClassName || ""}`,
|
|
170
171
|
target: href?.startsWith("http") ? "_blank" : void 0,
|
|
171
|
-
rel: href?.startsWith("http")
|
|
172
|
+
rel: renderedLinkRel(authoredRel, href?.startsWith("http") ?? false),
|
|
172
173
|
onClick: inPageAnchorId !== null ? handleAnchorClick : void 0,
|
|
173
174
|
children
|
|
174
175
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"embed-overrides.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/markdown/rich/embed-overrides.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAUjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"embed-overrides.d.ts","sourceRoot":"","sources":["../../../../../src/components/ui/markdown/rich/embed-overrides.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAUjD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAkCpD,MAAM,WAAW,8BAA8B;IAC7C,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;CAC5C;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,EACtC,YAAY,EACZ,cAAc,EACd,SAAS,GACV,EAAE,8BAA8B,GAAG,OAAO,CAAC,UAAU,CAAC,CAwKtD"}
|
|
@@ -9,14 +9,17 @@ import { RedditEmbedClient } from "../../../embeds/reddit-embed-client.js";
|
|
|
9
9
|
import { TwitterEmbedClient } from "../../../embeds/twitter-embed-client.js";
|
|
10
10
|
import { Video } from "../../../features/video.js";
|
|
11
11
|
import { buildStandardLeafRenderers, hasRenderableSrc } from "../base-components.js";
|
|
12
|
-
function
|
|
12
|
+
function findFirstLink(node, hostRe) {
|
|
13
13
|
if (!node || node.type !== "element") return null;
|
|
14
14
|
if (node.tagName === "a") {
|
|
15
|
-
const href = node.properties
|
|
16
|
-
if (typeof href === "string" && hostRe.test(href))
|
|
15
|
+
const { href, rel } = node.properties;
|
|
16
|
+
if (typeof href === "string" && hostRe.test(href)) {
|
|
17
|
+
const relText = Array.isArray(rel) ? rel.join(" ") : typeof rel === "string" ? rel : void 0;
|
|
18
|
+
return { href, rel: relText };
|
|
19
|
+
}
|
|
17
20
|
}
|
|
18
21
|
for (const child of node.children) {
|
|
19
|
-
const found =
|
|
22
|
+
const found = findFirstLink(child, hostRe);
|
|
20
23
|
if (found) return found;
|
|
21
24
|
}
|
|
22
25
|
return null;
|
|
@@ -149,12 +152,12 @@ function buildRichEmbedOverrides({
|
|
|
149
152
|
const { node, className } = bqProps;
|
|
150
153
|
const classNames = Array.isArray(className) ? className.join(" ") : className ?? "";
|
|
151
154
|
if (classNames.includes("reddit-embed-bq")) {
|
|
152
|
-
const
|
|
153
|
-
if (
|
|
155
|
+
const post = findFirstLink(node, /reddit\.com/);
|
|
156
|
+
if (post) return /* @__PURE__ */ jsx(RedditEmbedClient, { url: post.href, rel: post.rel });
|
|
154
157
|
}
|
|
155
158
|
if (classNames.includes("twitter-tweet")) {
|
|
156
|
-
const
|
|
157
|
-
if (
|
|
159
|
+
const tweet = findFirstLink(node, /(?:twitter\.com|x\.com)\/[^/]+\/status\//);
|
|
160
|
+
if (tweet) return /* @__PURE__ */ jsx(TwitterEmbedClient, { url: tweet.href, rel: tweet.rel });
|
|
158
161
|
}
|
|
159
162
|
return standard.blockquote(bqProps);
|
|
160
163
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"markdown-editor.d.ts","sourceRoot":"","sources":["../../../src/components/ui/markdown-editor.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"markdown-editor.d.ts","sourceRoot":"","sources":["../../../src/components/ui/markdown-editor.tsx"],"names":[],"mappings":"AAIA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AA4F/B,MAAM,WAAW,mBAAmB;IAClC,8BAA8B;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,4CAA4C;IAC5C,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,kDAAkD;IAClD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qCAAqC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uFAAuF;IACvF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,IAAI,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC/C,gEAAgE;IAChE,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,CAAC;IACzD,oEAAoE;IACpE,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,KAAK,CAAC,SAAS,CAAC;CACrD;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,QAAQ,EACR,WAAgB,EAChB,QAAgB,EAChB,MAAY,EACZ,SAAe,EACf,SAAS,EACT,YAAY,EACZ,cAAc,EACd,aAAa,GACd,EAAE,mBAAmB,qBAyQrB"}
|
|
@@ -5,6 +5,7 @@ import { useRef, useCallback, useState, useEffect } from "react";
|
|
|
5
5
|
import dynamic from "../../embed-shims/next-dynamic.js";
|
|
6
6
|
import { cn } from "../../utils/cn.js";
|
|
7
7
|
import { IMAGE_FILE_ACCEPT, fileMediaType } from "../../utils/media-type.js";
|
|
8
|
+
import { useMarkdownLinkCommand } from "./markdown-link-command.js";
|
|
8
9
|
const MDEditor = dynamic(() => import("@uiw/react-md-editor"), { ssr: false });
|
|
9
10
|
const MARKDOWN_EDITOR_STYLE_ID = "ods-markdown-editor-styles";
|
|
10
11
|
const mdEditorCSS = `
|
|
@@ -102,6 +103,7 @@ function MarkdownEditor({
|
|
|
102
103
|
const [isUploading, setIsUploading] = useState(false);
|
|
103
104
|
const [uploadProgress, setUploadProgress] = useState("");
|
|
104
105
|
const [defaultExtraCommands, setDefaultExtraCommands] = useState([]);
|
|
106
|
+
const { commands: toolbarCommands, linkDialog } = useMarkdownLinkCommand();
|
|
105
107
|
useEffect(() => {
|
|
106
108
|
let cancelled = false;
|
|
107
109
|
void (async () => {
|
|
@@ -287,6 +289,7 @@ function MarkdownEditor({
|
|
|
287
289
|
visibleDragbar: true,
|
|
288
290
|
height,
|
|
289
291
|
minHeight,
|
|
292
|
+
commands: toolbarCommands,
|
|
290
293
|
extraCommands,
|
|
291
294
|
style: {
|
|
292
295
|
"--md-editor-text-color": "var(--color-text-primary)",
|
|
@@ -314,6 +317,7 @@ function MarkdownEditor({
|
|
|
314
317
|
}
|
|
315
318
|
),
|
|
316
319
|
uploadProgress && /* @__PURE__ */ jsx("p", { className: "mt-1 text-ods-text-secondary text-h6", children: uploadProgress }),
|
|
320
|
+
linkDialog,
|
|
317
321
|
/* @__PURE__ */ jsx(MarkdownEditorStyles, {})
|
|
318
322
|
] });
|
|
319
323
|
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { ICommand } from '@uiw/react-md-editor';
|
|
2
|
+
import { type ReactNode } from 'react';
|
|
3
|
+
import { type MarkdownLinkFields } from '../../utils/markdown-link';
|
|
4
|
+
export interface MarkdownLinkDialogProps {
|
|
5
|
+
isOpen: boolean;
|
|
6
|
+
/** The link being edited, or the selection a new link starts from. */
|
|
7
|
+
initial: MarkdownLinkFields;
|
|
8
|
+
/** True when `initial` is a link already in the text: the dialog then offers to remove it. */
|
|
9
|
+
editing: boolean;
|
|
10
|
+
onSubmit: (link: MarkdownLinkFields) => void;
|
|
11
|
+
/** Replaces the link with its text. */
|
|
12
|
+
onRemove: () => void;
|
|
13
|
+
onClose: () => void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The link dialog of the markdown editors: the link's text, its address, and what it tells search
|
|
17
|
+
* engines: Follow (the default), Nofollow, Sponsored or UGC. Any choice but Follow writes the link
|
|
18
|
+
* as `<a rel="…">`. A link that carries several values (`rel="ugc nofollow"`) keeps them all until
|
|
19
|
+
* the choice is changed.
|
|
20
|
+
*/
|
|
21
|
+
export declare function MarkdownLinkDialog({ isOpen, initial, editing, onSubmit, onRemove, onClose }: MarkdownLinkDialogProps): import("react").JSX.Element;
|
|
22
|
+
export interface MarkdownLinkCommand {
|
|
23
|
+
/**
|
|
24
|
+
* The editor's toolbar: the vendor's commands with its `link` command replaced by this dialog.
|
|
25
|
+
* `undefined` until the vendor's commands have loaded (the editor then shows its own defaults).
|
|
26
|
+
*/
|
|
27
|
+
commands: ICommand[] | undefined;
|
|
28
|
+
/** The dialog. Render it beside the editor. */
|
|
29
|
+
linkDialog: ReactNode;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* The link command every markdown editor uses: the toolbar's link button and Ctrl/Cmd+L open
|
|
33
|
+
* {@link MarkdownLinkDialog} on the link under the caret (markdown or HTML), or on the selection
|
|
34
|
+
* for a new link, and write the result back as one undoable edit.
|
|
35
|
+
*/
|
|
36
|
+
export declare function useMarkdownLinkCommand(): MarkdownLinkCommand;
|
|
37
|
+
//# sourceMappingURL=markdown-link-command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-link-command.d.ts","sourceRoot":"","sources":["../../../src/components/ui/markdown-link-command.tsx"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAA8B,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,KAAK,SAAS,EAAuC,MAAM,OAAO,CAAC;AAC5E,OAAO,EAIL,KAAK,kBAAkB,EACxB,MAAM,2BAA2B,CAAC;AAkCnC,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,OAAO,EAAE,kBAAkB,CAAC;IAC5B,8FAA8F;IAC9F,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,IAAI,CAAC;IAC7C,uCAAuC;IACvC,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE,uBAAuB,+BAiFpH;AAkBD,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,QAAQ,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IACjC,+CAA+C;IAC/C,UAAU,EAAE,SAAS,CAAC;CACvB;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,CA4E5D"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
3
|
+
import { useEffect, useId, useMemo, useState } from "react";
|
|
4
|
+
import {
|
|
5
|
+
findMarkdownLinkAt,
|
|
6
|
+
formatMarkdownLink
|
|
7
|
+
} from "../../utils/markdown-link.js";
|
|
8
|
+
import { Button } from "./button/index.js";
|
|
9
|
+
import { Input } from "./input.js";
|
|
10
|
+
import { ModalV2, ModalV2Footer, ModalV2Header, ModalV2Title } from "./modal-v2.js";
|
|
11
|
+
import { TabSelector } from "./tab-selector.js";
|
|
12
|
+
const LINK_REL_CHOICES = [
|
|
13
|
+
{ id: "follow", label: "Follow", hint: "Search engines follow this link. This is the default." },
|
|
14
|
+
{
|
|
15
|
+
id: "nofollow",
|
|
16
|
+
label: "Nofollow",
|
|
17
|
+
hint: 'Search engines are asked not to follow this link (rel="nofollow").'
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
id: "sponsored",
|
|
21
|
+
label: "Sponsored",
|
|
22
|
+
hint: 'For ads, paid placements and sponsorships (rel="sponsored").'
|
|
23
|
+
},
|
|
24
|
+
{ id: "ugc", label: "UGC", hint: 'For links in content written by users, such as comments (rel="ugc").' }
|
|
25
|
+
];
|
|
26
|
+
const LINK_REL_ITEMS = LINK_REL_CHOICES.map(({ id, label }) => ({ id, label }));
|
|
27
|
+
function choiceOf(rel) {
|
|
28
|
+
if (rel.includes("sponsored")) return "sponsored";
|
|
29
|
+
if (rel.includes("ugc")) return "ugc";
|
|
30
|
+
if (rel.includes("nofollow")) return "nofollow";
|
|
31
|
+
return "follow";
|
|
32
|
+
}
|
|
33
|
+
function MarkdownLinkDialog({ isOpen, initial, editing, onSubmit, onRemove, onClose }) {
|
|
34
|
+
const formId = useId();
|
|
35
|
+
const [text, setText] = useState(initial.text);
|
|
36
|
+
const [url, setUrl] = useState(initial.url);
|
|
37
|
+
const [rel, setRel] = useState(initial.rel);
|
|
38
|
+
const [seededWith, setSeededWith] = useState({ isOpen, initial });
|
|
39
|
+
if (seededWith.isOpen !== isOpen || seededWith.initial !== initial) {
|
|
40
|
+
setSeededWith({ isOpen, initial });
|
|
41
|
+
if (isOpen) {
|
|
42
|
+
setText(initial.text);
|
|
43
|
+
setUrl(initial.url);
|
|
44
|
+
setRel(initial.rel);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
const choice = choiceOf(rel);
|
|
48
|
+
const trimmedUrl = url.trim();
|
|
49
|
+
const submit = () => {
|
|
50
|
+
if (!trimmedUrl) return;
|
|
51
|
+
onSubmit({ text: text.trim(), url: trimmedUrl, rel });
|
|
52
|
+
};
|
|
53
|
+
return /* @__PURE__ */ jsxs(ModalV2, { isOpen, onClose, className: "text-left md:max-w-[560px]", children: [
|
|
54
|
+
/* @__PURE__ */ jsx(ModalV2Header, { children: /* @__PURE__ */ jsx(ModalV2Title, { children: editing ? "Edit link" : "Add link" }) }),
|
|
55
|
+
/* @__PURE__ */ jsxs(
|
|
56
|
+
"form",
|
|
57
|
+
{
|
|
58
|
+
id: formId,
|
|
59
|
+
className: "flex w-full flex-col gap-[var(--spacing-system-l)]",
|
|
60
|
+
onSubmit: (event) => {
|
|
61
|
+
event.preventDefault();
|
|
62
|
+
submit();
|
|
63
|
+
},
|
|
64
|
+
children: [
|
|
65
|
+
/* @__PURE__ */ jsx(Input, { label: "Text", value: text, onChange: (event) => setText(event.target.value), placeholder: "Link text" }),
|
|
66
|
+
/* @__PURE__ */ jsx(
|
|
67
|
+
Input,
|
|
68
|
+
{
|
|
69
|
+
label: "URL",
|
|
70
|
+
value: url,
|
|
71
|
+
onChange: (event) => setUrl(event.target.value),
|
|
72
|
+
placeholder: "https://",
|
|
73
|
+
autoFocus: true,
|
|
74
|
+
inputMode: "url"
|
|
75
|
+
}
|
|
76
|
+
),
|
|
77
|
+
/* @__PURE__ */ jsxs("div", { className: "flex flex-col gap-[var(--spacing-system-xsf)]", children: [
|
|
78
|
+
/* @__PURE__ */ jsx(
|
|
79
|
+
TabSelector,
|
|
80
|
+
{
|
|
81
|
+
label: "Search engines",
|
|
82
|
+
value: choice,
|
|
83
|
+
onValueChange: (value) => {
|
|
84
|
+
const next = LINK_REL_CHOICES.find((option) => option.id === value)?.id ?? "follow";
|
|
85
|
+
setRel(next === "follow" ? [] : [next]);
|
|
86
|
+
},
|
|
87
|
+
items: LINK_REL_ITEMS,
|
|
88
|
+
variant: "secondary"
|
|
89
|
+
}
|
|
90
|
+
),
|
|
91
|
+
/* @__PURE__ */ jsx("p", { className: "text-ods-text-secondary text-h6", children: LINK_REL_CHOICES.find((option) => option.id === choice)?.hint })
|
|
92
|
+
] })
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
),
|
|
96
|
+
/* @__PURE__ */ jsxs(ModalV2Footer, { children: [
|
|
97
|
+
editing ? /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", onClick: onRemove, className: "flex-1", children: "Remove link" }) : /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", onClick: onClose, className: "flex-1", children: "Cancel" }),
|
|
98
|
+
/* @__PURE__ */ jsx(Button, { type: "submit", form: formId, variant: "accent", disabled: !trimmedUrl, className: "flex-1", children: editing ? "Save" : "Add link" })
|
|
99
|
+
] })
|
|
100
|
+
] });
|
|
101
|
+
}
|
|
102
|
+
const EMPTY_LINK = { text: "", url: "", rel: [] };
|
|
103
|
+
const LOOKS_LIKE_URL = /^(?:https?:\/\/|www\.|mailto:|\/|#)\S*$/i;
|
|
104
|
+
function initialFieldsFromSelection(selectedText) {
|
|
105
|
+
const selected = selectedText.trim();
|
|
106
|
+
return LOOKS_LIKE_URL.test(selected) ? { text: "", url: selected, rel: [] } : { text: selected, url: "", rel: [] };
|
|
107
|
+
}
|
|
108
|
+
function useMarkdownLinkCommand() {
|
|
109
|
+
const [vendorCommands, setVendorCommands] = useState(void 0);
|
|
110
|
+
const [pending, setPending] = useState(null);
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
let cancelled = false;
|
|
113
|
+
void (async () => {
|
|
114
|
+
try {
|
|
115
|
+
const mod = await import("@uiw/react-md-editor");
|
|
116
|
+
if (!cancelled && mod.commands?.getCommands) setVendorCommands(mod.commands.getCommands());
|
|
117
|
+
} catch (error) {
|
|
118
|
+
console.error("Failed to load markdown editor toolbar commands:", error);
|
|
119
|
+
}
|
|
120
|
+
})();
|
|
121
|
+
return () => {
|
|
122
|
+
cancelled = true;
|
|
123
|
+
};
|
|
124
|
+
}, []);
|
|
125
|
+
const commands = useMemo(() => {
|
|
126
|
+
if (!vendorCommands) return void 0;
|
|
127
|
+
return vendorCommands.map((command) => {
|
|
128
|
+
if (command.name !== "link") return command;
|
|
129
|
+
const linkCommand = {
|
|
130
|
+
name: "link",
|
|
131
|
+
keyCommand: "link",
|
|
132
|
+
shortcuts: "ctrlcmd+l",
|
|
133
|
+
buttonProps: { "aria-label": "Add or edit a link (ctrl + l)", title: "Add or edit a link (ctrl + l)" },
|
|
134
|
+
icon: command.icon,
|
|
135
|
+
execute: (state, api) => {
|
|
136
|
+
const existing = findMarkdownLinkAt(state.text, state.selection.start, state.selection.end);
|
|
137
|
+
setPending(
|
|
138
|
+
existing ? {
|
|
139
|
+
api,
|
|
140
|
+
range: { start: existing.start, end: existing.end },
|
|
141
|
+
initial: { text: existing.text, url: existing.url, rel: existing.rel },
|
|
142
|
+
editing: true
|
|
143
|
+
} : {
|
|
144
|
+
api,
|
|
145
|
+
range: state.selection,
|
|
146
|
+
initial: initialFieldsFromSelection(state.selectedText),
|
|
147
|
+
editing: false
|
|
148
|
+
}
|
|
149
|
+
);
|
|
150
|
+
}
|
|
151
|
+
};
|
|
152
|
+
return linkCommand;
|
|
153
|
+
});
|
|
154
|
+
}, [vendorCommands]);
|
|
155
|
+
const write = (current, text) => {
|
|
156
|
+
setPending(null);
|
|
157
|
+
current.api.setSelectionRange(current.range);
|
|
158
|
+
current.api.replaceSelection(text);
|
|
159
|
+
};
|
|
160
|
+
const linkDialog = /* @__PURE__ */ jsx(
|
|
161
|
+
MarkdownLinkDialog,
|
|
162
|
+
{
|
|
163
|
+
isOpen: pending !== null,
|
|
164
|
+
initial: pending?.initial ?? EMPTY_LINK,
|
|
165
|
+
editing: pending?.editing ?? false,
|
|
166
|
+
onSubmit: (link) => {
|
|
167
|
+
if (pending) write(pending, formatMarkdownLink(link));
|
|
168
|
+
},
|
|
169
|
+
onRemove: () => {
|
|
170
|
+
if (pending) write(pending, pending.initial.text);
|
|
171
|
+
},
|
|
172
|
+
onClose: () => setPending(null)
|
|
173
|
+
}
|
|
174
|
+
);
|
|
175
|
+
return { commands, linkDialog };
|
|
176
|
+
}
|
|
177
|
+
export {
|
|
178
|
+
MarkdownLinkDialog,
|
|
179
|
+
useMarkdownLinkCommand
|
|
180
|
+
};
|
|
@@ -11,7 +11,7 @@ require('./chunk-DKOLQPE7.cjs');
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
var
|
|
14
|
+
var _chunkQES5NV4Tcjs = require('./chunk-QES5NV4T.cjs');
|
|
15
15
|
require('./chunk-URVIPSAJ.cjs');
|
|
16
16
|
require('./chunk-NTGIQP7O.cjs');
|
|
17
17
|
require('./chunk-U2O5YQRP.cjs');
|
|
@@ -24,8 +24,8 @@ require('./chunk-A6P6DHEZ.cjs');
|
|
|
24
24
|
require('./chunk-MZ4KBSH7.cjs');
|
|
25
25
|
require('./chunk-GAGNKWOC.cjs');
|
|
26
26
|
require('./chunk-YUMFVQIN.cjs');
|
|
27
|
-
require('./chunk-
|
|
28
|
-
require('./chunk-
|
|
27
|
+
require('./chunk-GOTEXQZN.cjs');
|
|
28
|
+
require('./chunk-DJO7YMT3.cjs');
|
|
29
29
|
require('./chunk-OWGLRE74.cjs');
|
|
30
30
|
require('./chunk-3RFQPQ7Z.cjs');
|
|
31
31
|
require('./chunk-5TCIRWHL.cjs');
|
|
@@ -1865,14 +1865,14 @@ require('./chunk-3ATAYP36.cjs');
|
|
|
1865
1865
|
// src/components/product-demo/screens/devices.tsx
|
|
1866
1866
|
var _react = require('react');
|
|
1867
1867
|
var _jsxruntime = require('react/jsx-runtime');
|
|
1868
|
-
var TOOLBAR = { ...
|
|
1868
|
+
var TOOLBAR = { ..._chunkQES5NV4Tcjs.IDLE_DEVICES_TOOLBAR, searchValue: _chunk7AM3AFM4cjs.DEVICES_SEARCH_QUERY };
|
|
1869
1869
|
var NO_HEADER = /* @__PURE__ */ _jsxruntime.jsx.call(void 0, _jsxruntime.Fragment, {});
|
|
1870
1870
|
var HIDDEN_WHEN_COMPACT = ["organization"];
|
|
1871
1871
|
function DevicesScreen({ compact = false }) {
|
|
1872
1872
|
const cast = _chunkSTEJZPIOcjs.useProductDemoCast.call(void 0, );
|
|
1873
1873
|
const fixture = _react.useMemo.call(void 0, () => _chunk7AM3AFM4cjs.buildWindowsDevicesFixture.call(void 0, cast), [cast]);
|
|
1874
1874
|
return /* @__PURE__ */ _jsxruntime.jsx.call(void 0, "div", { className: "h-full bg-ods-bg", children: /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
|
|
1875
|
-
|
|
1875
|
+
_chunkQES5NV4Tcjs.DevicesPanelView,
|
|
1876
1876
|
{
|
|
1877
1877
|
className: "p-[var(--spacing-system-l)]",
|
|
1878
1878
|
headerSlot: NO_HEADER,
|