@liveblocks/react-ui 2.24.0 → 2.25.0-aiprivatebeta0

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.
Files changed (68) hide show
  1. package/dist/_private/index.cjs +6 -0
  2. package/dist/_private/index.cjs.map +1 -1
  3. package/dist/_private/index.d.cts +166 -10
  4. package/dist/_private/index.d.ts +166 -10
  5. package/dist/_private/index.js +3 -0
  6. package/dist/_private/index.js.map +1 -1
  7. package/dist/components/AiChat/AiChat.cjs +200 -0
  8. package/dist/components/AiChat/AiChat.cjs.map +1 -0
  9. package/dist/components/AiChat/AiChat.js +198 -0
  10. package/dist/components/AiChat/AiChat.js.map +1 -0
  11. package/dist/components/internal/AiChatAssistantMessage.cjs +353 -0
  12. package/dist/components/internal/AiChatAssistantMessage.cjs.map +1 -0
  13. package/dist/components/internal/AiChatAssistantMessage.js +351 -0
  14. package/dist/components/internal/AiChatAssistantMessage.js.map +1 -0
  15. package/dist/components/internal/AiChatComposer.cjs +385 -0
  16. package/dist/components/internal/AiChatComposer.cjs.map +1 -0
  17. package/dist/components/internal/AiChatComposer.js +379 -0
  18. package/dist/components/internal/AiChatComposer.js.map +1 -0
  19. package/dist/components/internal/AiChatUserMessage.cjs +187 -0
  20. package/dist/components/internal/AiChatUserMessage.cjs.map +1 -0
  21. package/dist/components/internal/AiChatUserMessage.js +185 -0
  22. package/dist/components/internal/AiChatUserMessage.js.map +1 -0
  23. package/dist/icons/Copy.cjs +26 -0
  24. package/dist/icons/Copy.cjs.map +1 -0
  25. package/dist/icons/Copy.js +24 -0
  26. package/dist/icons/Copy.js.map +1 -0
  27. package/dist/index.cjs +2 -0
  28. package/dist/index.cjs.map +1 -1
  29. package/dist/index.d.cts +65 -4
  30. package/dist/index.d.ts +65 -4
  31. package/dist/index.js +1 -0
  32. package/dist/index.js.map +1 -1
  33. package/dist/overrides.cjs +13 -1
  34. package/dist/overrides.cjs.map +1 -1
  35. package/dist/overrides.js +13 -1
  36. package/dist/overrides.js.map +1 -1
  37. package/dist/primitives/Chat/Composer/index.cjs +323 -0
  38. package/dist/primitives/Chat/Composer/index.cjs.map +1 -0
  39. package/dist/primitives/Chat/Composer/index.js +315 -0
  40. package/dist/primitives/Chat/Composer/index.js.map +1 -0
  41. package/dist/primitives/index.cjs +9 -4
  42. package/dist/primitives/index.cjs.map +1 -1
  43. package/dist/primitives/index.d.cts +108 -2
  44. package/dist/primitives/index.d.ts +108 -2
  45. package/dist/primitives/index.js +1 -0
  46. package/dist/primitives/index.js.map +1 -1
  47. package/dist/primitives/internal/Collapsible.cjs +99 -0
  48. package/dist/primitives/internal/Collapsible.cjs.map +1 -0
  49. package/dist/primitives/internal/Collapsible.js +95 -0
  50. package/dist/primitives/internal/Collapsible.js.map +1 -0
  51. package/dist/primitives/internal/Markdown.cjs +444 -0
  52. package/dist/primitives/internal/Markdown.cjs.map +1 -0
  53. package/dist/primitives/internal/Markdown.js +440 -0
  54. package/dist/primitives/internal/Markdown.js.map +1 -0
  55. package/dist/version.cjs +1 -1
  56. package/dist/version.cjs.map +1 -1
  57. package/dist/version.js +1 -1
  58. package/dist/version.js.map +1 -1
  59. package/package.json +5 -5
  60. package/src/styles/constants.css +4 -0
  61. package/src/styles/dark/index.css +1 -0
  62. package/src/styles/index.css +510 -0
  63. package/styles/dark/attributes.css +1 -1
  64. package/styles/dark/attributes.css.map +1 -1
  65. package/styles/dark/media-query.css +1 -1
  66. package/styles/dark/media-query.css.map +1 -1
  67. package/styles.css +1 -1
  68. package/styles.css.map +1 -1
@@ -0,0 +1,99 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var react = require('react');
5
+
6
+ const RootContext = react.createContext(null);
7
+ const Root = react.forwardRef(function Root2({ open, onOpenChange, disabled = false, ...props }, forwardedRef) {
8
+ const id = react.useId();
9
+ return /* @__PURE__ */ jsxRuntime.jsx(RootContext.Provider, {
10
+ value: { open, onOpenChange, disabled, contentId: id },
11
+ children: /* @__PURE__ */ jsxRuntime.jsx("div", {
12
+ ...props,
13
+ ref: forwardedRef,
14
+ "data-state": open ? "open" : "closed",
15
+ "data-disabled": disabled ? "" : void 0
16
+ })
17
+ });
18
+ });
19
+ const Trigger = react.forwardRef(
20
+ function Trigger2({ onClick, ...props }, forwardedRef) {
21
+ const context = react.useContext(RootContext);
22
+ if (!context) {
23
+ throw new Error("Collapsible.Trigger must be a descendant of Root");
24
+ }
25
+ const { open, disabled, contentId, onOpenChange } = context;
26
+ return /* @__PURE__ */ jsxRuntime.jsx("button", {
27
+ ...props,
28
+ ref: forwardedRef,
29
+ type: "button",
30
+ "aria-controls": contentId,
31
+ "aria-expanded": open || false,
32
+ "data-state": open ? "open" : "closed",
33
+ "data-disabled": disabled ? "" : void 0,
34
+ disabled,
35
+ onClick: (event) => {
36
+ onClick?.(event);
37
+ if (event.defaultPrevented)
38
+ return;
39
+ if (disabled)
40
+ return;
41
+ onOpenChange(!open);
42
+ }
43
+ });
44
+ }
45
+ );
46
+ const Content = react.forwardRef(
47
+ function Content2(props, forwardedRef) {
48
+ const rootContext = react.useContext(RootContext);
49
+ const divRef = react.useRef(null);
50
+ if (!rootContext)
51
+ throw new Error("Missing RootContext Provider");
52
+ const { open, onOpenChange, disabled, contentId } = rootContext;
53
+ react.useEffect(() => {
54
+ const element = divRef.current;
55
+ if (element === null)
56
+ return;
57
+ const isHiddenUntilFoundSupported = "onbeforematch" in document.body;
58
+ if (!isHiddenUntilFoundSupported)
59
+ return;
60
+ function handleBeforeMatch() {
61
+ onOpenChange(true);
62
+ }
63
+ element.addEventListener("beforematch", handleBeforeMatch);
64
+ return () => {
65
+ element.removeEventListener("beforematch", handleBeforeMatch);
66
+ };
67
+ }, [onOpenChange]);
68
+ react.useEffect(() => {
69
+ const element = divRef.current;
70
+ if (element === null)
71
+ return;
72
+ if (open)
73
+ return;
74
+ const isHiddenUntilFoundSupported = "onbeforematch" in document.body;
75
+ if (!isHiddenUntilFoundSupported)
76
+ return;
77
+ element.setAttribute("hidden", "until-found");
78
+ return () => {
79
+ element.removeAttribute("hidden");
80
+ };
81
+ }, [open]);
82
+ react.useImperativeHandle(forwardedRef, () => {
83
+ return divRef.current;
84
+ }, []);
85
+ return /* @__PURE__ */ jsxRuntime.jsx("div", {
86
+ ...props,
87
+ ref: divRef,
88
+ "data-state": open ? "open" : "closed",
89
+ "data-disabled": disabled ? "" : void 0,
90
+ id: contentId,
91
+ hidden: !open
92
+ });
93
+ }
94
+ );
95
+
96
+ exports.Content = Content;
97
+ exports.Root = Root;
98
+ exports.Trigger = Trigger;
99
+ //# sourceMappingURL=Collapsible.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.cjs","sources":["../../../src/primitives/internal/Collapsible.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n} from \"react\";\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\nconst RootContext = createContext<{\n open: boolean;\n onOpenChange(open: boolean): void;\n\n disabled: boolean;\n contentId: string;\n} | null>(null);\n\nexport interface RootProps extends HTMLAttributes<HTMLDivElement> {\n open: boolean;\n onOpenChange(open: boolean): void;\n disabled?: boolean;\n}\n\nexport const Root = forwardRef<HTMLDivElement, RootProps>(function Root(\n { open, onOpenChange, disabled = false, ...props },\n forwardedRef\n) {\n const id = useId();\n\n return (\n <RootContext.Provider\n value={{ open, onOpenChange, disabled, contentId: id }}\n >\n <div\n {...props}\n ref={forwardedRef}\n data-state={open ? \"open\" : \"closed\"}\n data-disabled={disabled ? \"\" : undefined}\n />\n </RootContext.Provider>\n );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\ninterface TriggerProps extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const Trigger = forwardRef<HTMLButtonElement, TriggerProps>(\n function Trigger({ onClick, ...props }, forwardedRef) {\n const context = useContext(RootContext);\n\n if (!context) {\n throw new Error(\"Collapsible.Trigger must be a descendant of Root\");\n }\n\n const { open, disabled, contentId, onOpenChange } = context;\n\n return (\n <button\n {...props}\n ref={forwardedRef}\n type=\"button\"\n aria-controls={contentId}\n aria-expanded={open || false}\n data-state={open ? \"open\" : \"closed\"}\n data-disabled={disabled ? \"\" : undefined}\n disabled={disabled}\n onClick={(event) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n if (disabled) return;\n onOpenChange(!open);\n }}\n />\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Content\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ContentProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Content = forwardRef<HTMLDivElement, ContentProps>(\n function Content(props, forwardedRef) {\n const rootContext = useContext(RootContext);\n const divRef = useRef<HTMLDivElement>(null);\n\n if (!rootContext) throw new Error(\"Missing RootContext Provider\");\n\n const { open, onOpenChange, disabled, contentId } = rootContext;\n\n useEffect(() => {\n const element = divRef.current;\n if (element === null) return;\n\n const isHiddenUntilFoundSupported = \"onbeforematch\" in document.body;\n if (!isHiddenUntilFoundSupported) return;\n\n function handleBeforeMatch() {\n onOpenChange(true);\n }\n\n // https://developer.chrome.com/articles/hidden-until-found/\n element.addEventListener(\"beforematch\", handleBeforeMatch);\n return () => {\n element.removeEventListener(\"beforematch\", handleBeforeMatch);\n };\n }, [onOpenChange]);\n\n // Passing `string` to `hidden` in JSX is not currently supported: https://github.com/facebook/react/issues/24740\n useEffect(() => {\n const element = divRef.current;\n if (element === null) return;\n\n if (open) return;\n\n const isHiddenUntilFoundSupported = \"onbeforematch\" in document.body;\n if (!isHiddenUntilFoundSupported) return;\n\n element.setAttribute(\"hidden\", \"until-found\");\n return () => {\n element.removeAttribute(\"hidden\");\n };\n }, [open]);\n\n useImperativeHandle<\n HTMLDivElement | null,\n HTMLDivElement | null\n >(forwardedRef, () => {\n return divRef.current;\n }, []);\n\n return (\n <div\n {...props}\n ref={divRef}\n data-state={open ? \"open\" : \"closed\"}\n data-disabled={disabled ? \"\" : undefined}\n id={contentId}\n hidden={!open}\n />\n );\n }\n);\n"],"names":["createContext","forwardRef","Root","useId","jsx","Trigger","useContext","Content","useRef","useEffect","useImperativeHandle"],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import { jsx } from 'react/jsx-runtime';
2
+ import { createContext, forwardRef, useId, useContext, useRef, useEffect, useImperativeHandle } from 'react';
3
+
4
+ const RootContext = createContext(null);
5
+ const Root = forwardRef(function Root2({ open, onOpenChange, disabled = false, ...props }, forwardedRef) {
6
+ const id = useId();
7
+ return /* @__PURE__ */ jsx(RootContext.Provider, {
8
+ value: { open, onOpenChange, disabled, contentId: id },
9
+ children: /* @__PURE__ */ jsx("div", {
10
+ ...props,
11
+ ref: forwardedRef,
12
+ "data-state": open ? "open" : "closed",
13
+ "data-disabled": disabled ? "" : void 0
14
+ })
15
+ });
16
+ });
17
+ const Trigger = forwardRef(
18
+ function Trigger2({ onClick, ...props }, forwardedRef) {
19
+ const context = useContext(RootContext);
20
+ if (!context) {
21
+ throw new Error("Collapsible.Trigger must be a descendant of Root");
22
+ }
23
+ const { open, disabled, contentId, onOpenChange } = context;
24
+ return /* @__PURE__ */ jsx("button", {
25
+ ...props,
26
+ ref: forwardedRef,
27
+ type: "button",
28
+ "aria-controls": contentId,
29
+ "aria-expanded": open || false,
30
+ "data-state": open ? "open" : "closed",
31
+ "data-disabled": disabled ? "" : void 0,
32
+ disabled,
33
+ onClick: (event) => {
34
+ onClick?.(event);
35
+ if (event.defaultPrevented)
36
+ return;
37
+ if (disabled)
38
+ return;
39
+ onOpenChange(!open);
40
+ }
41
+ });
42
+ }
43
+ );
44
+ const Content = forwardRef(
45
+ function Content2(props, forwardedRef) {
46
+ const rootContext = useContext(RootContext);
47
+ const divRef = useRef(null);
48
+ if (!rootContext)
49
+ throw new Error("Missing RootContext Provider");
50
+ const { open, onOpenChange, disabled, contentId } = rootContext;
51
+ useEffect(() => {
52
+ const element = divRef.current;
53
+ if (element === null)
54
+ return;
55
+ const isHiddenUntilFoundSupported = "onbeforematch" in document.body;
56
+ if (!isHiddenUntilFoundSupported)
57
+ return;
58
+ function handleBeforeMatch() {
59
+ onOpenChange(true);
60
+ }
61
+ element.addEventListener("beforematch", handleBeforeMatch);
62
+ return () => {
63
+ element.removeEventListener("beforematch", handleBeforeMatch);
64
+ };
65
+ }, [onOpenChange]);
66
+ useEffect(() => {
67
+ const element = divRef.current;
68
+ if (element === null)
69
+ return;
70
+ if (open)
71
+ return;
72
+ const isHiddenUntilFoundSupported = "onbeforematch" in document.body;
73
+ if (!isHiddenUntilFoundSupported)
74
+ return;
75
+ element.setAttribute("hidden", "until-found");
76
+ return () => {
77
+ element.removeAttribute("hidden");
78
+ };
79
+ }, [open]);
80
+ useImperativeHandle(forwardedRef, () => {
81
+ return divRef.current;
82
+ }, []);
83
+ return /* @__PURE__ */ jsx("div", {
84
+ ...props,
85
+ ref: divRef,
86
+ "data-state": open ? "open" : "closed",
87
+ "data-disabled": disabled ? "" : void 0,
88
+ id: contentId,
89
+ hidden: !open
90
+ });
91
+ }
92
+ );
93
+
94
+ export { Content, Root, Trigger };
95
+ //# sourceMappingURL=Collapsible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Collapsible.js","sources":["../../../src/primitives/internal/Collapsible.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport {\n createContext,\n forwardRef,\n useContext,\n useEffect,\n useId,\n useImperativeHandle,\n useRef,\n} from \"react\";\n\n/* -------------------------------------------------------------------------------------------------\n * Root\n * -----------------------------------------------------------------------------------------------*/\n\nconst RootContext = createContext<{\n open: boolean;\n onOpenChange(open: boolean): void;\n\n disabled: boolean;\n contentId: string;\n} | null>(null);\n\nexport interface RootProps extends HTMLAttributes<HTMLDivElement> {\n open: boolean;\n onOpenChange(open: boolean): void;\n disabled?: boolean;\n}\n\nexport const Root = forwardRef<HTMLDivElement, RootProps>(function Root(\n { open, onOpenChange, disabled = false, ...props },\n forwardedRef\n) {\n const id = useId();\n\n return (\n <RootContext.Provider\n value={{ open, onOpenChange, disabled, contentId: id }}\n >\n <div\n {...props}\n ref={forwardedRef}\n data-state={open ? \"open\" : \"closed\"}\n data-disabled={disabled ? \"\" : undefined}\n />\n </RootContext.Provider>\n );\n});\n\n/* -------------------------------------------------------------------------------------------------\n * Trigger\n * -----------------------------------------------------------------------------------------------*/\ninterface TriggerProps extends HTMLAttributes<HTMLButtonElement> {}\n\nexport const Trigger = forwardRef<HTMLButtonElement, TriggerProps>(\n function Trigger({ onClick, ...props }, forwardedRef) {\n const context = useContext(RootContext);\n\n if (!context) {\n throw new Error(\"Collapsible.Trigger must be a descendant of Root\");\n }\n\n const { open, disabled, contentId, onOpenChange } = context;\n\n return (\n <button\n {...props}\n ref={forwardedRef}\n type=\"button\"\n aria-controls={contentId}\n aria-expanded={open || false}\n data-state={open ? \"open\" : \"closed\"}\n data-disabled={disabled ? \"\" : undefined}\n disabled={disabled}\n onClick={(event) => {\n onClick?.(event);\n if (event.defaultPrevented) return;\n if (disabled) return;\n onOpenChange(!open);\n }}\n />\n );\n }\n);\n\n/* -------------------------------------------------------------------------------------------------\n * Content\n * -----------------------------------------------------------------------------------------------*/\n\ninterface ContentProps extends HTMLAttributes<HTMLDivElement> {}\n\nexport const Content = forwardRef<HTMLDivElement, ContentProps>(\n function Content(props, forwardedRef) {\n const rootContext = useContext(RootContext);\n const divRef = useRef<HTMLDivElement>(null);\n\n if (!rootContext) throw new Error(\"Missing RootContext Provider\");\n\n const { open, onOpenChange, disabled, contentId } = rootContext;\n\n useEffect(() => {\n const element = divRef.current;\n if (element === null) return;\n\n const isHiddenUntilFoundSupported = \"onbeforematch\" in document.body;\n if (!isHiddenUntilFoundSupported) return;\n\n function handleBeforeMatch() {\n onOpenChange(true);\n }\n\n // https://developer.chrome.com/articles/hidden-until-found/\n element.addEventListener(\"beforematch\", handleBeforeMatch);\n return () => {\n element.removeEventListener(\"beforematch\", handleBeforeMatch);\n };\n }, [onOpenChange]);\n\n // Passing `string` to `hidden` in JSX is not currently supported: https://github.com/facebook/react/issues/24740\n useEffect(() => {\n const element = divRef.current;\n if (element === null) return;\n\n if (open) return;\n\n const isHiddenUntilFoundSupported = \"onbeforematch\" in document.body;\n if (!isHiddenUntilFoundSupported) return;\n\n element.setAttribute(\"hidden\", \"until-found\");\n return () => {\n element.removeAttribute(\"hidden\");\n };\n }, [open]);\n\n useImperativeHandle<\n HTMLDivElement | null,\n HTMLDivElement | null\n >(forwardedRef, () => {\n return divRef.current;\n }, []);\n\n return (\n <div\n {...props}\n ref={divRef}\n data-state={open ? \"open\" : \"closed\"}\n data-disabled={disabled ? \"\" : undefined}\n id={contentId}\n hidden={!open}\n />\n );\n }\n);\n"],"names":["Root","Trigger","Content"],"mappings":";;;AAeA,MAAM,WAAA,GAAc,cAMV,IAAI,CAAA,CAAA;AAQD,MAAA,IAAA,GAAO,UAAsC,CAAA,SAASA,KACjE,CAAA,EAAE,IAAM,EAAA,YAAA,EAAc,QAAW,GAAA,KAAA,EAAA,GAAU,KAAM,EAAA,EACjD,YACA,EAAA;AACA,EAAA,MAAM,KAAK,KAAM,EAAA,CAAA;AAEjB,EACE,uBAAA,GAAA,CAAC,YAAY,QAAZ,EAAA;AAAA,IACC,OAAO,EAAE,IAAA,EAAM,YAAc,EAAA,QAAA,EAAU,WAAW,EAAG,EAAA;AAAA,IAErD,QAAC,kBAAA,GAAA,CAAA,KAAA,EAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAK,EAAA,YAAA;AAAA,MACL,YAAA,EAAY,OAAO,MAAS,GAAA,QAAA;AAAA,MAC5B,eAAA,EAAe,WAAW,EAAK,GAAA,KAAA,CAAA;AAAA,KACjC,CAAA;AAAA,GACF,CAAA,CAAA;AAEJ,CAAC,EAAA;AAOM,MAAM,OAAU,GAAA,UAAA;AAAA,EACrB,SAASC,QAAQ,CAAA,EAAE,OAAY,EAAA,GAAA,KAAA,IAAS,YAAc,EAAA;AACpD,IAAM,MAAA,OAAA,GAAU,WAAW,WAAW,CAAA,CAAA;AAEtC,IAAA,IAAI,CAAC,OAAS,EAAA;AACZ,MAAM,MAAA,IAAI,MAAM,kDAAkD,CAAA,CAAA;AAAA,KACpE;AAEA,IAAA,MAAM,EAAE,IAAA,EAAM,QAAU,EAAA,SAAA,EAAW,cAAiB,GAAA,OAAA,CAAA;AAEpD,IAAA,uBACG,GAAA,CAAA,QAAA,EAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAK,EAAA,YAAA;AAAA,MACL,IAAK,EAAA,QAAA;AAAA,MACL,eAAe,EAAA,SAAA;AAAA,MACf,iBAAe,IAAQ,IAAA,KAAA;AAAA,MACvB,YAAA,EAAY,OAAO,MAAS,GAAA,QAAA;AAAA,MAC5B,eAAA,EAAe,WAAW,EAAK,GAAA,KAAA,CAAA;AAAA,MAC/B,QAAA;AAAA,MACA,OAAA,EAAS,CAAC,KAAU,KAAA;AAClB,QAAA,OAAA,GAAU,KAAK,CAAA,CAAA;AACf,QAAA,IAAI,KAAM,CAAA,gBAAA;AAAkB,UAAA,OAAA;AAC5B,QAAI,IAAA,QAAA;AAAU,UAAA,OAAA;AACd,QAAA,YAAA,CAAa,CAAC,IAAI,CAAA,CAAA;AAAA,OACpB;AAAA,KACF,CAAA,CAAA;AAAA,GAEJ;AACF,EAAA;AAQO,MAAM,OAAU,GAAA,UAAA;AAAA,EACrB,SAASC,QAAQ,CAAA,KAAA,EAAO,YAAc,EAAA;AACpC,IAAM,MAAA,WAAA,GAAc,WAAW,WAAW,CAAA,CAAA;AAC1C,IAAM,MAAA,MAAA,GAAS,OAAuB,IAAI,CAAA,CAAA;AAE1C,IAAA,IAAI,CAAC,WAAA;AAAa,MAAM,MAAA,IAAI,MAAM,8BAA8B,CAAA,CAAA;AAEhE,IAAA,MAAM,EAAE,IAAA,EAAM,YAAc,EAAA,QAAA,EAAU,WAAc,GAAA,WAAA,CAAA;AAEpD,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,MAAM,UAAU,MAAO,CAAA,OAAA,CAAA;AACvB,MAAA,IAAI,OAAY,KAAA,IAAA;AAAM,QAAA,OAAA;AAEtB,MAAM,MAAA,2BAAA,GAA8B,mBAAmB,QAAS,CAAA,IAAA,CAAA;AAChE,MAAA,IAAI,CAAC,2BAAA;AAA6B,QAAA,OAAA;AAElC,MAAA,SAAS,iBAAoB,GAAA;AAC3B,QAAA,YAAA,CAAa,IAAI,CAAA,CAAA;AAAA,OACnB;AAGA,MAAQ,OAAA,CAAA,gBAAA,CAAiB,eAAe,iBAAiB,CAAA,CAAA;AACzD,MAAA,OAAO,MAAM;AACX,QAAQ,OAAA,CAAA,mBAAA,CAAoB,eAAe,iBAAiB,CAAA,CAAA;AAAA,OAC9D,CAAA;AAAA,KACF,EAAG,CAAC,YAAY,CAAC,CAAA,CAAA;AAGjB,IAAA,SAAA,CAAU,MAAM;AACd,MAAA,MAAM,UAAU,MAAO,CAAA,OAAA,CAAA;AACvB,MAAA,IAAI,OAAY,KAAA,IAAA;AAAM,QAAA,OAAA;AAEtB,MAAI,IAAA,IAAA;AAAM,QAAA,OAAA;AAEV,MAAM,MAAA,2BAAA,GAA8B,mBAAmB,QAAS,CAAA,IAAA,CAAA;AAChE,MAAA,IAAI,CAAC,2BAAA;AAA6B,QAAA,OAAA;AAElC,MAAQ,OAAA,CAAA,YAAA,CAAa,UAAU,aAAa,CAAA,CAAA;AAC5C,MAAA,OAAO,MAAM;AACX,QAAA,OAAA,CAAQ,gBAAgB,QAAQ,CAAA,CAAA;AAAA,OAClC,CAAA;AAAA,KACF,EAAG,CAAC,IAAI,CAAC,CAAA,CAAA;AAET,IAAA,mBAAA,CAGE,cAAc,MAAM;AACpB,MAAA,OAAO,MAAO,CAAA,OAAA,CAAA;AAAA,KAChB,EAAG,EAAE,CAAA,CAAA;AAEL,IAAA,uBACG,GAAA,CAAA,KAAA,EAAA;AAAA,MACE,GAAG,KAAA;AAAA,MACJ,GAAK,EAAA,MAAA;AAAA,MACL,YAAA,EAAY,OAAO,MAAS,GAAA,QAAA;AAAA,MAC5B,eAAA,EAAe,WAAW,EAAK,GAAA,KAAA,CAAA;AAAA,MAC/B,EAAI,EAAA,SAAA;AAAA,MACJ,QAAQ,CAAC,IAAA;AAAA,KACX,CAAA,CAAA;AAAA,GAEJ;AACF;;;;"}
@@ -0,0 +1,444 @@
1
+ 'use strict';
2
+
3
+ var jsxRuntime = require('react/jsx-runtime');
4
+ var marked = require('marked');
5
+ var react = require('react');
6
+
7
+ function Markdown({ content }) {
8
+ const tokens = react.useMemo(() => {
9
+ return new marked.Lexer().lex(content);
10
+ }, [content]);
11
+ return tokens.map((token, index) => {
12
+ return /* @__PURE__ */ jsxRuntime.jsx(BlockTokenComp, {
13
+ token
14
+ }, index);
15
+ });
16
+ }
17
+ function BlockTokenComp({ token }) {
18
+ switch (token.type) {
19
+ case "space": {
20
+ return null;
21
+ }
22
+ case "code": {
23
+ let language = null;
24
+ if (token.lang !== void 0) {
25
+ language = token.lang.match(/^\S*/)?.[0] ?? null;
26
+ }
27
+ return /* @__PURE__ */ jsxRuntime.jsx("pre", {
28
+ "data-language": language || void 0,
29
+ children: /* @__PURE__ */ jsxRuntime.jsx("code", {
30
+ children: token.text
31
+ })
32
+ });
33
+ }
34
+ case "blockquote": {
35
+ const tokens = [];
36
+ for (let i = 0; i < token.tokens.length; i++) {
37
+ switch (token.tokens[i].type) {
38
+ case "space":
39
+ case "code":
40
+ case "blockquote":
41
+ case "html":
42
+ case "heading":
43
+ case "hr":
44
+ case "list":
45
+ case "paragraph":
46
+ case "table": {
47
+ tokens.push(token.tokens[i]);
48
+ break;
49
+ }
50
+ case "text": {
51
+ const texts = [token.tokens[i]];
52
+ while (i + 1 < token.tokens.length && token.tokens[i + 1].type === "text") {
53
+ i++;
54
+ texts.push(token.tokens[i]);
55
+ }
56
+ tokens.push({
57
+ type: "paragraph",
58
+ tokens: texts,
59
+ raw: texts.map((text) => text.raw).join(""),
60
+ text: texts.map((text) => text.text).join("")
61
+ });
62
+ break;
63
+ }
64
+ default: {
65
+ continue;
66
+ }
67
+ }
68
+ }
69
+ return /* @__PURE__ */ jsxRuntime.jsx("blockquote", {
70
+ children: tokens.map((token2, index) => {
71
+ return /* @__PURE__ */ jsxRuntime.jsx(BlockTokenComp, {
72
+ token: token2
73
+ }, index);
74
+ })
75
+ });
76
+ }
77
+ case "html": {
78
+ return token.text;
79
+ }
80
+ case "heading": {
81
+ let HeadingTag;
82
+ switch (token.depth) {
83
+ case 1:
84
+ HeadingTag = "h1";
85
+ break;
86
+ case 2:
87
+ HeadingTag = "h2";
88
+ break;
89
+ case 3:
90
+ HeadingTag = "h3";
91
+ break;
92
+ case 4:
93
+ HeadingTag = "h4";
94
+ break;
95
+ case 5:
96
+ HeadingTag = "h5";
97
+ break;
98
+ case 6:
99
+ HeadingTag = "h6";
100
+ break;
101
+ default:
102
+ HeadingTag = "h1";
103
+ break;
104
+ }
105
+ return /* @__PURE__ */ jsxRuntime.jsx(HeadingTag, {
106
+ children: token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
107
+ token: token2
108
+ }, index))
109
+ });
110
+ }
111
+ case "hr": {
112
+ return /* @__PURE__ */ jsxRuntime.jsx("hr", {});
113
+ }
114
+ case "list": {
115
+ const ListTag = token.ordered ? "ol" : "ul";
116
+ return /* @__PURE__ */ jsxRuntime.jsx(ListTag, {
117
+ children: token.items.map((item, index) => {
118
+ if (item.loose) {
119
+ if (item.task) {
120
+ const tokens = [...item.tokens];
121
+ if (tokens[0]?.type === "paragraph") {
122
+ const token2 = tokens[0];
123
+ token2.tokens.unshift(
124
+ {
125
+ type: "checkbox",
126
+ checked: item.checked,
127
+ raw: ""
128
+ },
129
+ {
130
+ type: "text",
131
+ text: " ",
132
+ raw: " ",
133
+ escaped: false
134
+ }
135
+ );
136
+ } else {
137
+ tokens.unshift(
138
+ {
139
+ type: "checkbox",
140
+ checked: item.checked,
141
+ raw: ""
142
+ },
143
+ {
144
+ type: "text",
145
+ text: " ",
146
+ raw: " ",
147
+ escaped: false
148
+ }
149
+ );
150
+ }
151
+ const items = [];
152
+ for (let i = 0; i < tokens.length; i++) {
153
+ switch (tokens[i].type) {
154
+ case "space":
155
+ case "code":
156
+ case "blockquote":
157
+ case "html":
158
+ case "heading":
159
+ case "hr":
160
+ case "list":
161
+ case "paragraph":
162
+ case "table": {
163
+ items.push(tokens[i]);
164
+ break;
165
+ }
166
+ case "text":
167
+ case "checkbox": {
168
+ const texts = [
169
+ tokens[i]
170
+ ];
171
+ while (i + 1 < tokens.length && tokens[i + 1].type === "text") {
172
+ i++;
173
+ texts.push(tokens[i]);
174
+ }
175
+ items.push({
176
+ type: "paragraph",
177
+ tokens: texts,
178
+ raw: texts.map((text) => text.raw).join(""),
179
+ text: texts.map((text) => text.text).join("")
180
+ });
181
+ break;
182
+ }
183
+ default: {
184
+ continue;
185
+ }
186
+ }
187
+ }
188
+ return /* @__PURE__ */ jsxRuntime.jsx("li", {
189
+ children: items.map((token2, index2) => {
190
+ return /* @__PURE__ */ jsxRuntime.jsx(BlockTokenComp, {
191
+ token: token2
192
+ }, index2);
193
+ })
194
+ }, index);
195
+ } else {
196
+ const tokens = [];
197
+ for (let i = 0; i < item.tokens.length; i++) {
198
+ switch (item.tokens[i].type) {
199
+ case "space":
200
+ case "code":
201
+ case "blockquote":
202
+ case "html":
203
+ case "heading":
204
+ case "hr":
205
+ case "list":
206
+ case "paragraph":
207
+ case "table": {
208
+ tokens.push(item.tokens[i]);
209
+ break;
210
+ }
211
+ case "text": {
212
+ const texts = [
213
+ item.tokens[i]
214
+ ];
215
+ while (i + 1 < item.tokens.length && item.tokens[i + 1].type === "text") {
216
+ i++;
217
+ texts.push(item.tokens[i]);
218
+ }
219
+ tokens.push({
220
+ type: "paragraph",
221
+ tokens: texts,
222
+ raw: texts.map((text) => text.raw).join(""),
223
+ text: texts.map((text) => text.text).join("")
224
+ });
225
+ break;
226
+ }
227
+ default: {
228
+ continue;
229
+ }
230
+ }
231
+ }
232
+ return /* @__PURE__ */ jsxRuntime.jsx("li", {
233
+ children: tokens.map((token2, index2) => {
234
+ return /* @__PURE__ */ jsxRuntime.jsx(BlockTokenComp, {
235
+ token: token2
236
+ }, index2);
237
+ })
238
+ }, index);
239
+ }
240
+ } else {
241
+ const Items = item.tokens.map((token2, index2) => {
242
+ switch (token2.type) {
243
+ case "space":
244
+ case "code":
245
+ case "blockquote":
246
+ case "html":
247
+ case "heading":
248
+ case "hr":
249
+ case "list":
250
+ case "paragraph":
251
+ case "table": {
252
+ return /* @__PURE__ */ jsxRuntime.jsx(BlockTokenComp, {
253
+ token: token2
254
+ }, index2);
255
+ }
256
+ case "text": {
257
+ return /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
258
+ token: token2
259
+ }, index2);
260
+ }
261
+ default: {
262
+ return null;
263
+ }
264
+ }
265
+ });
266
+ if (item.task) {
267
+ return /* @__PURE__ */ jsxRuntime.jsxs("li", {
268
+ children: [
269
+ /* @__PURE__ */ jsxRuntime.jsx("input", {
270
+ type: "checkbox",
271
+ disabled: true,
272
+ checked: item.checked
273
+ }),
274
+ " ",
275
+ Items
276
+ ]
277
+ }, index);
278
+ } else {
279
+ return /* @__PURE__ */ jsxRuntime.jsx("li", {
280
+ children: Items
281
+ }, index);
282
+ }
283
+ }
284
+ })
285
+ });
286
+ }
287
+ case "paragraph": {
288
+ return /* @__PURE__ */ jsxRuntime.jsx("p", {
289
+ children: token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
290
+ token: token2
291
+ }, index))
292
+ });
293
+ }
294
+ case "table": {
295
+ return /* @__PURE__ */ jsxRuntime.jsxs("table", {
296
+ children: [
297
+ /* @__PURE__ */ jsxRuntime.jsx("thead", {
298
+ children: /* @__PURE__ */ jsxRuntime.jsx("tr", {
299
+ children: token.header.map((cell, index) => {
300
+ return /* @__PURE__ */ jsxRuntime.jsx("th", {
301
+ align: cell.align ?? void 0,
302
+ children: cell.tokens.map((token2, index2) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
303
+ token: token2
304
+ }, index2))
305
+ }, index);
306
+ })
307
+ })
308
+ }),
309
+ /* @__PURE__ */ jsxRuntime.jsx("tbody", {
310
+ children: token.rows.map((row, index) => {
311
+ return /* @__PURE__ */ jsxRuntime.jsx("tr", {
312
+ children: row.map((cell, index2) => {
313
+ return /* @__PURE__ */ jsxRuntime.jsx("td", {
314
+ align: cell.align ?? void 0,
315
+ children: cell.tokens.map((token2, index3) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
316
+ token: token2
317
+ }, index3))
318
+ }, index2);
319
+ })
320
+ }, index);
321
+ })
322
+ })
323
+ ]
324
+ });
325
+ }
326
+ }
327
+ }
328
+ function InlineTokenComp({
329
+ token
330
+ }) {
331
+ switch (token.type) {
332
+ case "strong": {
333
+ return /* @__PURE__ */ jsxRuntime.jsx("strong", {
334
+ children: token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
335
+ token: token2
336
+ }, index))
337
+ });
338
+ }
339
+ case "em": {
340
+ return /* @__PURE__ */ jsxRuntime.jsx("em", {
341
+ children: token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
342
+ token: token2
343
+ }, index))
344
+ });
345
+ }
346
+ case "codespan": {
347
+ return /* @__PURE__ */ jsxRuntime.jsx("code", {
348
+ children: parseHtmlEntities(token.text)
349
+ });
350
+ }
351
+ case "br": {
352
+ return /* @__PURE__ */ jsxRuntime.jsx("br", {});
353
+ }
354
+ case "del": {
355
+ return /* @__PURE__ */ jsxRuntime.jsx("del", {
356
+ children: token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
357
+ token: token2
358
+ }, index))
359
+ });
360
+ }
361
+ case "link": {
362
+ let href;
363
+ try {
364
+ const url = new URL(token.href);
365
+ if (url.protocol === "http:" || url.protocol === "https:") {
366
+ href = url.toString();
367
+ } else {
368
+ href = null;
369
+ }
370
+ } catch {
371
+ href = null;
372
+ }
373
+ if (href === null) {
374
+ return token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
375
+ token: token2
376
+ }, index));
377
+ }
378
+ return /* @__PURE__ */ jsxRuntime.jsx("a", {
379
+ href,
380
+ title: token.title ? token.title : void 0,
381
+ target: "_blank",
382
+ rel: "noopener noreferrer",
383
+ children: token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
384
+ token: token2
385
+ }, index))
386
+ });
387
+ }
388
+ case "image": {
389
+ let href;
390
+ try {
391
+ const url = new URL(token.href);
392
+ if (url.protocol === "http:" || url.protocol === "https:") {
393
+ href = url.toString();
394
+ } else {
395
+ href = null;
396
+ }
397
+ } catch {
398
+ href = null;
399
+ }
400
+ if (href === null) {
401
+ return token.text;
402
+ }
403
+ return /* @__PURE__ */ jsxRuntime.jsx("img", {
404
+ src: href,
405
+ alt: token.text,
406
+ title: token.title ?? void 0
407
+ });
408
+ }
409
+ case "text": {
410
+ if (token.tokens !== void 0) {
411
+ return token.tokens.map((token2, index) => /* @__PURE__ */ jsxRuntime.jsx(InlineTokenComp, {
412
+ token: token2
413
+ }, index));
414
+ } else {
415
+ return parseHtmlEntities(token.text);
416
+ }
417
+ }
418
+ case "escape": {
419
+ return token.text;
420
+ }
421
+ case "checkbox": {
422
+ return /* @__PURE__ */ jsxRuntime.jsx("input", {
423
+ type: "checkbox",
424
+ disabled: true,
425
+ checked: token.checked
426
+ });
427
+ }
428
+ default: {
429
+ return null;
430
+ }
431
+ }
432
+ }
433
+ function parseHtmlEntities(input) {
434
+ const document = new DOMParser().parseFromString(
435
+ `<!doctype html><body>${input}`,
436
+ "text/html"
437
+ );
438
+ return document.body.textContent;
439
+ }
440
+
441
+ exports.BlockTokenComp = BlockTokenComp;
442
+ exports.Markdown = Markdown;
443
+ exports.parseHtmlEntities = parseHtmlEntities;
444
+ //# sourceMappingURL=Markdown.cjs.map