@flytedan/flytebot-design-system 0.70.0 → 0.71.1

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.
@@ -0,0 +1,42 @@
1
+ // src/components/data/markdownEscape.ts
2
+ var ESCAPABLE = /\\([!-/:-@[-`{-~])/g;
3
+ var STAND_IN_BASE = 57344;
4
+ var STAND_IN = /[-]/g;
5
+ var hideEscapes = (s) => s.replace(STAND_IN, "\uFFFD").replace(ESCAPABLE, (_, c) => String.fromCharCode(STAND_IN_BASE + c.charCodeAt(0)));
6
+ var showEscapes = (s) => s.replace(STAND_IN, (c) => String.fromCharCode(c.charCodeAt(0) - STAND_IN_BASE));
7
+ var showEscapesRaw = (s) => s.replace(STAND_IN, (c) => "\\" + String.fromCharCode(c.charCodeAt(0) - STAND_IN_BASE));
8
+ function escapeMarkdown(text) {
9
+ return String(text == null ? "" : text).replace(/\r\n?/g, "\n").replace(/[\\`*_[\]()<>!|~^]/g, "\\$&").replace(/\b(https?|mailto|tel):/gi, "$1\\:").split("\n").map(
10
+ (line) => line.replace(/^(\s*)([#>+-])/, "$1\\$2").replace(/^(\s*\d{1,9})([.)])/, "$1\\$2")
11
+ // task item `[ ]` is already covered by escaping `[`
12
+ ).join("\n");
13
+ }
14
+ var TABLE_ROW = /^\s*\|.*\|\s*$/;
15
+ var TABLE_SEPARATOR = /^\s*\|(\s*:?-{3,}:?\s*\|)+\s*$/;
16
+ var LIST_MARKER = /^\s*(?:[-*+]|\d{1,9}[.)])\s+/;
17
+ function stripBlockSyntax(s) {
18
+ let inFence = false;
19
+ return s.split("\n").flatMap((line) => {
20
+ if (/^\s*```/.test(line)) inFence = !inFence;
21
+ if (inFence || /^\s*```/.test(line)) return [line];
22
+ if (TABLE_SEPARATOR.test(line)) return [];
23
+ if (TABLE_ROW.test(line)) {
24
+ return [line.trim().slice(1, -1).split("|").map((c) => c.trim()).filter(Boolean).join(" ")];
25
+ }
26
+ return [line.replace(LIST_MARKER, "")];
27
+ }).join("\n");
28
+ }
29
+ function markdownToText(src) {
30
+ return showEscapes(
31
+ stripBlockSyntax(hideEscapes(String(src == null ? "" : src))).replace(/```[\w+#-]*\n?([\s\S]*?)```/g, (_, c) => showEscapesRaw(c)).replace(/`([^`]+)`/g, (_, c) => showEscapesRaw(c)).replace(/!\[([^\]]*)\]\([^)]*\)/g, "$1").replace(/\[([^\]]+)\]\([^)]*\)/g, "$1").replace(/^\s{0,3}#{1,6}\s+/gm, "").replace(/\*\*\*([^*]+)\*\*\*|\*\*([^*]+)\*\*|__([^_]+)__/g, "$1$2$3").replace(/(^|\W)[*_]([^*_\n]+)[*_](\W|$)/g, "$1$2$3").replace(/~~([^~]+)~~/g, "$1").replace(/^\s*>\s?/gm, "").trim()
32
+ );
33
+ }
34
+
35
+ export {
36
+ hideEscapes,
37
+ showEscapes,
38
+ showEscapesRaw,
39
+ escapeMarkdown,
40
+ markdownToText
41
+ };
42
+ //# sourceMappingURL=chunk-CGCQNBCR.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/data/markdownEscape.ts"],"sourcesContent":["/* DS-7: the one definition of the markdown escape rule, shared by the renderer\n (Markdown.tsx) and by `escapeMarkdown` (a React-free entry, so a server can import it). */\n\n/** CommonMark: a backslash before any ASCII punctuation character makes it literal. */\nexport const ESCAPABLE = /\\\\([!-/:-@[-`{-~])/g;\n\n/* An escaped character is swapped for a private-use stand-in (U+E000 + its code) before any\n syntax pattern runs, so no pattern can see it, then swapped back where text is emitted. */\nconst STAND_IN_BASE = 0xe000;\nconst STAND_IN = /[-]/g;\n\n/** Hide every escaped character from the syntax patterns. Stray stand-ins already in the input are neutralised first. */\nexport const hideEscapes = (s: string): string =>\n s.replace(STAND_IN, \"�\").replace(ESCAPABLE, (_, c: string) => String.fromCharCode(STAND_IN_BASE + c.charCodeAt(0)));\n\n/** Put escaped characters back as the literal character. */\nexport const showEscapes = (s: string): string => s.replace(STAND_IN, (c) => String.fromCharCode(c.charCodeAt(0) - STAND_IN_BASE));\n\n/** Put escaped characters back with their backslash (a code span keeps its source verbatim). */\nexport const showEscapesRaw = (s: string): string => s.replace(STAND_IN, (c) => \"\\\\\" + String.fromCharCode(c.charCodeAt(0) - STAND_IN_BASE));\n\n/**\n * Backslash-escape text so `Markdown` / `MarkdownInline` render it as exactly that text:\n * every character the renderer reads as inline syntax, the `:` that starts a bare-URL or\n * mailto autolink, and any block marker (heading, quote, list, rule, table, fence) at the\n * start of a line.\n */\nexport function escapeMarkdown(text: string): string {\n return String(text == null ? \"\" : text)\n .replace(/\\r\\n?/g, \"\\n\")\n .replace(/[\\\\`*_[\\]()<>!|~^]/g, \"\\\\$&\")\n .replace(/\\b(https?|mailto|tel):/gi, \"$1\\\\:\")\n .split(\"\\n\")\n .map((line) =>\n line\n // heading, quote, bullet, rule, fence-like markers: escape the first marker character\n .replace(/^(\\s*)([#>+-])/, \"$1\\\\$2\")\n // ordered list: escape the dot or paren after the number\n .replace(/^(\\s*\\d{1,9})([.)])/, \"$1\\\\$2\")\n // task item `[ ]` is already covered by escaping `[`\n )\n .join(\"\\n\");\n}\n\nconst TABLE_ROW = /^\\s*\\|.*\\|\\s*$/;\nconst TABLE_SEPARATOR = /^\\s*\\|(\\s*:?-{3,}:?\\s*\\|)+\\s*$/;\nconst LIST_MARKER = /^\\s*(?:[-*+]|\\d{1,9}[.)])\\s+/;\n\n/* DS-12: table pipes, the separator row and list markers are layout, not words. Escaped pipes\n and markers are already hidden, so they stay literal. Fenced code is left untouched. */\nfunction stripBlockSyntax(s: string): string {\n let inFence = false;\n return s\n .split(\"\\n\")\n .flatMap((line) => {\n if (/^\\s*```/.test(line)) inFence = !inFence;\n if (inFence || /^\\s*```/.test(line)) return [line];\n if (TABLE_SEPARATOR.test(line)) return [];\n if (TABLE_ROW.test(line)) {\n return [line.trim().slice(1, -1).split(\"|\").map((c) => c.trim()).filter(Boolean).join(\" \")];\n }\n return [line.replace(LIST_MARKER, \"\")];\n })\n .join(\"\\n\");\n}\n\n/**\n * Strip markdown to the plain text the renderer shows — for search, copy actions, titles and\n * previews. Escaped characters become literal text; only real syntax is removed, so\n * `markdownToText(escapeMarkdown(x)) === x`. A code span keeps its source verbatim.\n */\nexport function markdownToText(src: string): string {\n return showEscapes(\n stripBlockSyntax(hideEscapes(String(src == null ? \"\" : src)))\n .replace(/```[\\w+#-]*\\n?([\\s\\S]*?)```/g, (_, c: string) => showEscapesRaw(c))\n .replace(/`([^`]+)`/g, (_, c: string) => showEscapesRaw(c))\n .replace(/!\\[([^\\]]*)\\]\\([^)]*\\)/g, \"$1\")\n .replace(/\\[([^\\]]+)\\]\\([^)]*\\)/g, \"$1\")\n .replace(/^\\s{0,3}#{1,6}\\s+/gm, \"\")\n .replace(/\\*\\*\\*([^*]+)\\*\\*\\*|\\*\\*([^*]+)\\*\\*|__([^_]+)__/g, \"$1$2$3\")\n .replace(/(^|\\W)[*_]([^*_\\n]+)[*_](\\W|$)/g, \"$1$2$3\")\n .replace(/~~([^~]+)~~/g, \"$1\")\n .replace(/^\\s*>\\s?/gm, \"\")\n .trim(),\n );\n}\n"],"mappings":";AAIO,IAAM,YAAY;AAIzB,IAAM,gBAAgB;AACtB,IAAM,WAAW;AAGV,IAAM,cAAc,CAAC,MAC1B,EAAE,QAAQ,UAAU,QAAG,EAAE,QAAQ,WAAW,CAAC,GAAG,MAAc,OAAO,aAAa,gBAAgB,EAAE,WAAW,CAAC,CAAC,CAAC;AAG7G,IAAM,cAAc,CAAC,MAAsB,EAAE,QAAQ,UAAU,CAAC,MAAM,OAAO,aAAa,EAAE,WAAW,CAAC,IAAI,aAAa,CAAC;AAG1H,IAAM,iBAAiB,CAAC,MAAsB,EAAE,QAAQ,UAAU,CAAC,MAAM,OAAO,OAAO,aAAa,EAAE,WAAW,CAAC,IAAI,aAAa,CAAC;AAQpI,SAAS,eAAe,MAAsB;AACnD,SAAO,OAAO,QAAQ,OAAO,KAAK,IAAI,EACnC,QAAQ,UAAU,IAAI,EACtB,QAAQ,uBAAuB,MAAM,EACrC,QAAQ,4BAA4B,OAAO,EAC3C,MAAM,IAAI,EACV;AAAA,IAAI,CAAC,SACJ,KAEG,QAAQ,kBAAkB,QAAQ,EAElC,QAAQ,uBAAuB,QAAQ;AAAA;AAAA,EAE5C,EACC,KAAK,IAAI;AACd;AAEA,IAAM,YAAY;AAClB,IAAM,kBAAkB;AACxB,IAAM,cAAc;AAIpB,SAAS,iBAAiB,GAAmB;AAC3C,MAAI,UAAU;AACd,SAAO,EACJ,MAAM,IAAI,EACV,QAAQ,CAAC,SAAS;AACjB,QAAI,UAAU,KAAK,IAAI,EAAG,WAAU,CAAC;AACrC,QAAI,WAAW,UAAU,KAAK,IAAI,EAAG,QAAO,CAAC,IAAI;AACjD,QAAI,gBAAgB,KAAK,IAAI,EAAG,QAAO,CAAC;AACxC,QAAI,UAAU,KAAK,IAAI,GAAG;AACxB,aAAO,CAAC,KAAK,KAAK,EAAE,MAAM,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAAC;AAAA,IAC5F;AACA,WAAO,CAAC,KAAK,QAAQ,aAAa,EAAE,CAAC;AAAA,EACvC,CAAC,EACA,KAAK,IAAI;AACd;AAOO,SAAS,eAAe,KAAqB;AAClD,SAAO;AAAA,IACL,iBAAiB,YAAY,OAAO,OAAO,OAAO,KAAK,GAAG,CAAC,CAAC,EACzD,QAAQ,gCAAgC,CAAC,GAAG,MAAc,eAAe,CAAC,CAAC,EAC3E,QAAQ,cAAc,CAAC,GAAG,MAAc,eAAe,CAAC,CAAC,EACzD,QAAQ,2BAA2B,IAAI,EACvC,QAAQ,0BAA0B,IAAI,EACtC,QAAQ,uBAAuB,EAAE,EACjC,QAAQ,oDAAoD,QAAQ,EACpE,QAAQ,mCAAmC,QAAQ,EACnD,QAAQ,gBAAgB,IAAI,EAC5B,QAAQ,cAAc,EAAE,EACxB,KAAK;AAAA,EACV;AACF;","names":[]}
package/dist/index.cjs CHANGED
@@ -6363,6 +6363,26 @@ var STAND_IN = /[-]/g;
6363
6363
  var hideEscapes = (s) => s.replace(STAND_IN, "\uFFFD").replace(ESCAPABLE, (_, c) => String.fromCharCode(STAND_IN_BASE + c.charCodeAt(0)));
6364
6364
  var showEscapes = (s) => s.replace(STAND_IN, (c) => String.fromCharCode(c.charCodeAt(0) - STAND_IN_BASE));
6365
6365
  var showEscapesRaw = (s) => s.replace(STAND_IN, (c) => "\\" + String.fromCharCode(c.charCodeAt(0) - STAND_IN_BASE));
6366
+ var TABLE_ROW = /^\s*\|.*\|\s*$/;
6367
+ var TABLE_SEPARATOR = /^\s*\|(\s*:?-{3,}:?\s*\|)+\s*$/;
6368
+ var LIST_MARKER = /^\s*(?:[-*+]|\d{1,9}[.)])\s+/;
6369
+ function stripBlockSyntax(s) {
6370
+ let inFence = false;
6371
+ return s.split("\n").flatMap((line) => {
6372
+ if (/^\s*```/.test(line)) inFence = !inFence;
6373
+ if (inFence || /^\s*```/.test(line)) return [line];
6374
+ if (TABLE_SEPARATOR.test(line)) return [];
6375
+ if (TABLE_ROW.test(line)) {
6376
+ return [line.trim().slice(1, -1).split("|").map((c) => c.trim()).filter(Boolean).join(" ")];
6377
+ }
6378
+ return [line.replace(LIST_MARKER, "")];
6379
+ }).join("\n");
6380
+ }
6381
+ function markdownToText(src) {
6382
+ return showEscapes(
6383
+ stripBlockSyntax(hideEscapes(String(src == null ? "" : src))).replace(/```[\w+#-]*\n?([\s\S]*?)```/g, (_, c) => showEscapesRaw(c)).replace(/`([^`]+)`/g, (_, c) => showEscapesRaw(c)).replace(/!\[([^\]]*)\]\([^)]*\)/g, "$1").replace(/\[([^\]]+)\]\([^)]*\)/g, "$1").replace(/^\s{0,3}#{1,6}\s+/gm, "").replace(/\*\*\*([^*]+)\*\*\*|\*\*([^*]+)\*\*|__([^_]+)__/g, "$1$2$3").replace(/(^|\W)[*_]([^*_\n]+)[*_](\W|$)/g, "$1$2$3").replace(/~~([^~]+)~~/g, "$1").replace(/^\s*>\s?/gm, "").trim()
6384
+ );
6385
+ }
6366
6386
 
6367
6387
  // src/components/data/Markdown.tsx
6368
6388
  var import_jsx_runtime54 = require("react/jsx-runtime");
@@ -6597,9 +6617,6 @@ function Markdown({
6597
6617
  function MarkdownInline({ source = "", className = "", onLinkClick, size, tone }) {
6598
6618
  return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: mdClass("fd-md-inline", size, tone, className), children: inlineNodes(source, { allowImages: false, onLinkClick }, "i") });
6599
6619
  }
6600
- function markdownToText(src) {
6601
- return String(src == null ? "" : src).replace(/```[\w+#-]*\n?([\s\S]*?)```/g, "$1").replace(/`([^`]+)`/g, "$1").replace(/!\[([^\]]*)\]\([^)]*\)/g, "$1").replace(/\[([^\]]+)\]\([^)]*\)/g, "$1").replace(/^\s{0,3}#{1,6}\s+/gm, "").replace(/\*\*\*([^*]+)\*\*\*|\*\*([^*]+)\*\*|__([^_]+)__/g, "$1$2$3").replace(/(^|\W)[*_]([^*_\n]+)[*_](\W|$)/g, "$1$2$3").replace(/~~([^~]+)~~/g, "$1").replace(/^\s*>\s?/gm, "").trim();
6602
- }
6603
6620
 
6604
6621
  // src/components/data/Meter.tsx
6605
6622
  var import_jsx_runtime55 = require("react/jsx-runtime");
@@ -9469,11 +9486,11 @@ function CodeEditor({
9469
9486
  // src/components/forms/RadioGroup.tsx
9470
9487
  var React53 = __toESM(require("react"), 1);
9471
9488
  var import_jsx_runtime80 = require("react/jsx-runtime");
9472
- function RadioGroup({ label, options, value, onChange, card = false, disabled = false, name, className = "" }) {
9489
+ function RadioGroup({ label, labelledBy, options, value, onChange, card = false, disabled = false, name, className = "" }) {
9473
9490
  const autoName = React53.useId();
9474
9491
  const labelId = React53.useId();
9475
- return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { role: "radiogroup", "aria-labelledby": labelId, "aria-disabled": disabled || void 0, className: ["fd-radiogroup", className].filter(Boolean).join(" "), children: [
9476
- /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { id: labelId, className: "fd-radiogroup-label", children: label }),
9492
+ return /* @__PURE__ */ (0, import_jsx_runtime80.jsxs)("div", { role: "radiogroup", "aria-labelledby": labelledBy ?? labelId, "aria-disabled": disabled || void 0, className: ["fd-radiogroup", className].filter(Boolean).join(" "), children: [
9493
+ labelledBy === void 0 && /* @__PURE__ */ (0, import_jsx_runtime80.jsx)("span", { id: labelId, className: "fd-radiogroup-label", children: label }),
9477
9494
  options.map((o) => /* @__PURE__ */ (0, import_jsx_runtime80.jsx)(
9478
9495
  Radio,
9479
9496
  {