@liveblocks/react-ui 2.1.1-test2 → 2.2.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.
Files changed (69) hide show
  1. package/dist/components/Comment.js +23 -11
  2. package/dist/components/Comment.js.map +1 -1
  3. package/dist/components/Comment.mjs +23 -11
  4. package/dist/components/Comment.mjs.map +1 -1
  5. package/dist/components/Composer.js.map +1 -1
  6. package/dist/components/Composer.mjs.map +1 -1
  7. package/dist/components/InboxNotification.js.map +1 -1
  8. package/dist/components/InboxNotification.mjs.map +1 -1
  9. package/dist/components/InboxNotificationList.js.map +1 -1
  10. package/dist/components/InboxNotificationList.mjs.map +1 -1
  11. package/dist/components/Thread.js +19 -9
  12. package/dist/components/Thread.js.map +1 -1
  13. package/dist/components/Thread.mjs +20 -10
  14. package/dist/components/Thread.mjs.map +1 -1
  15. package/dist/index.d.mts +5 -12
  16. package/dist/index.d.ts +5 -12
  17. package/dist/primitives/Comment/index.js +5 -3
  18. package/dist/primitives/Comment/index.js.map +1 -1
  19. package/dist/primitives/Comment/index.mjs +5 -3
  20. package/dist/primitives/Comment/index.mjs.map +1 -1
  21. package/dist/primitives/Comment/utils.js +1 -1
  22. package/dist/primitives/Comment/utils.js.map +1 -1
  23. package/dist/primitives/Comment/utils.mjs +1 -1
  24. package/dist/primitives/Comment/utils.mjs.map +1 -1
  25. package/dist/primitives/Composer/index.js +14 -11
  26. package/dist/primitives/Composer/index.js.map +1 -1
  27. package/dist/primitives/Composer/index.mjs +14 -11
  28. package/dist/primitives/Composer/index.mjs.map +1 -1
  29. package/dist/primitives/Composer/utils.js +35 -13
  30. package/dist/primitives/Composer/utils.js.map +1 -1
  31. package/dist/primitives/Composer/utils.mjs +35 -14
  32. package/dist/primitives/Composer/utils.mjs.map +1 -1
  33. package/dist/slate/plugins/auto-links.js +16 -5
  34. package/dist/slate/plugins/auto-links.js.map +1 -1
  35. package/dist/slate/plugins/auto-links.mjs +17 -6
  36. package/dist/slate/plugins/auto-links.mjs.map +1 -1
  37. package/dist/slate/plugins/custom-links.js +71 -0
  38. package/dist/slate/plugins/custom-links.js.map +1 -0
  39. package/dist/slate/plugins/custom-links.mjs +68 -0
  40. package/dist/slate/plugins/custom-links.mjs.map +1 -0
  41. package/dist/slate/plugins/paste-html.js +105 -0
  42. package/dist/slate/plugins/paste-html.js.map +1 -0
  43. package/dist/slate/plugins/paste-html.mjs +103 -0
  44. package/dist/slate/plugins/paste-html.mjs.map +1 -0
  45. package/dist/slate/utils/is-empty.js +3 -2
  46. package/dist/slate/utils/is-empty.js.map +1 -1
  47. package/dist/slate/utils/is-empty.mjs +4 -3
  48. package/dist/slate/utils/is-empty.mjs.map +1 -1
  49. package/dist/slate/utils/is-text.js +12 -0
  50. package/dist/slate/utils/is-text.js.map +1 -0
  51. package/dist/slate/utils/is-text.mjs +9 -0
  52. package/dist/slate/utils/is-text.mjs.map +1 -0
  53. package/dist/slate/utils/selection-contains-inlines.js +36 -0
  54. package/dist/slate/utils/selection-contains-inlines.js.map +1 -0
  55. package/dist/slate/utils/selection-contains-inlines.mjs +34 -0
  56. package/dist/slate/utils/selection-contains-inlines.mjs.map +1 -0
  57. package/dist/utils/use-transition.js +6 -2
  58. package/dist/utils/use-transition.js.map +1 -1
  59. package/dist/utils/use-transition.mjs +7 -3
  60. package/dist/utils/use-transition.mjs.map +1 -1
  61. package/dist/utils/use-window-focus.js +24 -0
  62. package/dist/utils/use-window-focus.js.map +1 -0
  63. package/dist/utils/use-window-focus.mjs +22 -0
  64. package/dist/utils/use-window-focus.mjs.map +1 -0
  65. package/dist/version.js +1 -1
  66. package/dist/version.js.map +1 -1
  67. package/dist/version.mjs +1 -1
  68. package/dist/version.mjs.map +1 -1
  69. package/package.json +6 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paste-html.mjs","sources":["../../../src/slate/plugins/paste-html.ts"],"sourcesContent":["import type { Descendant, Editor, Element, Node as SlateNode } from \"slate\";\nimport { Transforms } from \"slate\";\nimport { jsx } from \"slate-hyperscript\";\n\nimport type {\n ComposerBodyAutoLink,\n ComposerBodyBlockElement,\n ComposerBodyCustomLink,\n ComposerBodyInlineElement,\n ComposerBodyParagraph,\n ComposerBodyText,\n} from \"../../types\";\n\n// Based on: https://github.com/ianstormtaylor/slate/blob/main/site/examples/paste-html.tsx\n\ntype OmitTextChildren<T> = Omit<T, \"text\" | \"children\">;\n\ntype ComposerBodyElementTag = OmitTextChildren<\n ComposerBodyBlockElement | ComposerBodyInlineElement\n>;\ntype ComposerBodyTextTag = OmitTextChildren<ComposerBodyText>;\n\ntype DeserializedNode =\n | string\n | null\n | Element\n | Descendant[]\n | ComposerBodyText[]\n | DeserializedNode[];\n\nfunction areUrlsEqual(a: string, b: string) {\n try {\n const urlA = new URL(a);\n const urlB = new URL(b);\n\n return urlA.origin === urlB.origin && urlA.pathname === urlB.pathname;\n } catch {\n return false;\n }\n}\n\nconst createParagraphElement = (): OmitTextChildren<ComposerBodyParagraph> => ({\n type: \"paragraph\",\n});\n\nconst ELEMENT_TAGS = {\n A: (\n element\n ): OmitTextChildren<ComposerBodyCustomLink | ComposerBodyAutoLink> => {\n const href = element.getAttribute(\"href\");\n const innerText = element.innerText;\n\n return {\n type: href && areUrlsEqual(href, innerText) ? \"auto-link\" : \"custom-link\",\n url: href ?? \"\",\n };\n },\n P: createParagraphElement,\n // Falling back to paragraphs for unsupported elements\n BLOCKQUOTE: createParagraphElement,\n H1: createParagraphElement,\n H2: createParagraphElement,\n H3: createParagraphElement,\n H4: createParagraphElement,\n H5: createParagraphElement,\n H6: createParagraphElement,\n LI: createParagraphElement,\n} as Record<string, (node: HTMLElement) => ComposerBodyElementTag>;\n\nconst TEXT_TAGS = {\n CODE: (): ComposerBodyTextTag => ({ code: true }),\n DEL: (): ComposerBodyTextTag => ({ strikethrough: true }),\n EM: (): ComposerBodyTextTag => ({ italic: true }),\n I: (): ComposerBodyTextTag => ({ italic: true }),\n S: (): ComposerBodyTextTag => ({ strikethrough: true }),\n STRONG: (): ComposerBodyTextTag => ({ bold: true }),\n // `B` is omitted because Google Docs uses `<b>` in weird ways\n // B: (): ComposerBodyTextTag => ({ bold: true }),\n} as Record<string, (node: HTMLElement) => ComposerBodyTextTag>;\n\nfunction flattenListItems(node: HTMLElement): HTMLElement[] {\n const listItems: HTMLElement[] = [];\n\n if (node.nodeName === \"LI\") {\n listItems.push(node);\n }\n\n node.childNodes.forEach((child) => {\n if (child.nodeType === 1) {\n listItems.push(...flattenListItems(child as HTMLElement));\n }\n });\n\n return listItems;\n}\n\nfunction deserialize(node: Node): DeserializedNode {\n if (node.nodeType === 3) {\n return node.textContent;\n } else if (node.nodeType !== 1) {\n return null;\n } else if (node.nodeName === \"BR\") {\n return \"\\n\";\n }\n\n const childNodes = Array.from(node.childNodes);\n let children = childNodes.map(deserialize).flat();\n\n // Lists aren't supported (yet), so we flatten them into paragraphs\n if (node.nodeName === \"UL\" || node.nodeName === \"OL\") {\n const listItems = flattenListItems(node as HTMLElement);\n\n children = listItems.map((li) => deserialize(li)).flat();\n }\n\n if (children.length === 0) {\n children = [{ text: \"\" }];\n }\n\n if (node.nodeName === \"BODY\") {\n return jsx(\"fragment\", {}, children);\n }\n\n if (ELEMENT_TAGS[node.nodeName]) {\n const attrs = ELEMENT_TAGS[node.nodeName](node as HTMLElement);\n\n return jsx(\"element\", attrs, children);\n }\n\n if (TEXT_TAGS[node.nodeName]) {\n const attrs = TEXT_TAGS[node.nodeName](node as HTMLElement);\n\n return children.map((child) => jsx(\"text\", attrs, child));\n }\n\n return children as DeserializedNode;\n}\n\nexport function withPasteHtml(editor: Editor) {\n const { insertData } = editor;\n\n // Deserialize rich text from HTML when pasting\n editor.insertData = (data) => {\n const html = data.getData(\"text/html\");\n\n if (html) {\n const parsed = new DOMParser().parseFromString(html, \"text/html\");\n const fragment = deserialize(parsed.body);\n\n if (fragment !== null && Array.isArray(fragment)) {\n Transforms.insertFragment(editor, fragment as SlateNode[]);\n\n return;\n }\n }\n\n insertData(data);\n };\n\n return editor;\n}\n"],"names":[],"mappings":"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"}
@@ -2,15 +2,16 @@
2
2
 
3
3
  var slate = require('slate');
4
4
  var isEmptyString = require('./is-empty-string.js');
5
+ var isText = require('./is-text.js');
5
6
 
6
7
  function isEmpty(editor, children) {
7
8
  for (const child of children) {
8
- if (slate.Text.isText(child)) {
9
+ if (isText.isText(child)) {
9
10
  if (!isEmptyString.isEmptyString(child.text)) {
10
11
  return false;
11
12
  }
12
13
  } else if (child.type === "paragraph") {
13
- if (child.children.length > 1 || !(slate.Text.isText(child.children[0]) && isEmptyString.isEmptyString(child.children[0].text))) {
14
+ if (child.children.length > 1 || !(isText.isText(child.children[0]) && isEmptyString.isEmptyString(child.children[0].text))) {
14
15
  return false;
15
16
  }
16
17
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"is-empty.js","sources":["../../../src/slate/utils/is-empty.ts"],"sourcesContent":["import type { Descendant } from \"slate\";\nimport { Editor as SlateEditor, Text as SlateText } from \"slate\";\n\nimport { isEmptyString } from \"./is-empty-string\";\n\nexport function isEmpty(editor: SlateEditor, children: Descendant[]) {\n // Check if all blocks are empty, stopping at the first non-empty block\n for (const child of children) {\n if (SlateText.isText(child)) {\n // Non-empty text\n if (!isEmptyString(child.text)) {\n return false;\n }\n } else if (child.type === \"paragraph\") {\n // Non-empty paragraph\n if (\n child.children.length > 1 ||\n !(\n SlateText.isText(child.children[0]) &&\n isEmptyString(child.children[0].text)\n )\n ) {\n return false;\n }\n } else {\n // Non-empty other block\n if (!SlateEditor.isEmpty(editor, child)) {\n return false;\n }\n }\n }\n\n return true;\n}\n"],"names":["SlateText","isEmptyString","SlateEditor"],"mappings":";;;;;AAKgB,SAAA,OAAA,CAAQ,QAAqB,QAAwB,EAAA;AAEnE,EAAA,KAAA,MAAW,SAAS,QAAU,EAAA;AAC5B,IAAI,IAAAA,UAAA,CAAU,MAAO,CAAA,KAAK,CAAG,EAAA;AAE3B,MAAA,IAAI,CAACC,2BAAA,CAAc,KAAM,CAAA,IAAI,CAAG,EAAA;AAC9B,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF,MAAA,IAAW,KAAM,CAAA,IAAA,KAAS,WAAa,EAAA;AAErC,MAAA,IACE,MAAM,QAAS,CAAA,MAAA,GAAS,CACxB,IAAA,EACED,WAAU,MAAO,CAAA,KAAA,CAAM,QAAS,CAAA,CAAA,CAAE,KAClCC,2BAAc,CAAA,KAAA,CAAM,QAAS,CAAA,CAAA,CAAA,CAAG,IAAI,CAEtC,CAAA,EAAA;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACK,MAAA;AAEL,MAAA,IAAI,CAACC,YAAA,CAAY,OAAQ,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AACvC,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"is-empty.js","sources":["../../../src/slate/utils/is-empty.ts"],"sourcesContent":["import type { Descendant } from \"slate\";\nimport { Editor as SlateEditor } from \"slate\";\n\nimport { isEmptyString } from \"./is-empty-string\";\nimport { isText } from \"./is-text\";\n\nexport function isEmpty(editor: SlateEditor, children: Descendant[]) {\n // Check if all blocks are empty, stopping at the first non-empty block\n for (const child of children) {\n if (isText(child)) {\n // Non-empty text\n if (!isEmptyString(child.text)) {\n return false;\n }\n } else if (child.type === \"paragraph\") {\n // Non-empty paragraph\n if (\n child.children.length > 1 ||\n !(isText(child.children[0]) && isEmptyString(child.children[0].text))\n ) {\n return false;\n }\n } else {\n // Non-empty other block\n if (!SlateEditor.isEmpty(editor, child)) {\n return false;\n }\n }\n }\n\n return true;\n}\n"],"names":["isText","isEmptyString","SlateEditor"],"mappings":";;;;;;AAMgB,SAAA,OAAA,CAAQ,QAAqB,QAAwB,EAAA;AAEnE,EAAA,KAAA,MAAW,SAAS,QAAU,EAAA;AAC5B,IAAI,IAAAA,aAAA,CAAO,KAAK,CAAG,EAAA;AAEjB,MAAA,IAAI,CAACC,2BAAA,CAAc,KAAM,CAAA,IAAI,CAAG,EAAA;AAC9B,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF,MAAA,IAAW,KAAM,CAAA,IAAA,KAAS,WAAa,EAAA;AAErC,MAAA,IACE,KAAM,CAAA,QAAA,CAAS,MAAS,GAAA,CAAA,IACxB,EAAED,aAAO,CAAA,KAAA,CAAM,QAAS,CAAA,CAAA,CAAE,KAAKC,2BAAc,CAAA,KAAA,CAAM,QAAS,CAAA,CAAA,CAAA,CAAG,IAAI,CACnE,CAAA,EAAA;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACK,MAAA;AAEL,MAAA,IAAI,CAACC,YAAA,CAAY,OAAQ,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AACvC,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
@@ -1,14 +1,15 @@
1
- import { Text, Editor } from 'slate';
1
+ import { Editor } from 'slate';
2
2
  import { isEmptyString } from './is-empty-string.mjs';
3
+ import { isText } from './is-text.mjs';
3
4
 
4
5
  function isEmpty(editor, children) {
5
6
  for (const child of children) {
6
- if (Text.isText(child)) {
7
+ if (isText(child)) {
7
8
  if (!isEmptyString(child.text)) {
8
9
  return false;
9
10
  }
10
11
  } else if (child.type === "paragraph") {
11
- if (child.children.length > 1 || !(Text.isText(child.children[0]) && isEmptyString(child.children[0].text))) {
12
+ if (child.children.length > 1 || !(isText(child.children[0]) && isEmptyString(child.children[0].text))) {
12
13
  return false;
13
14
  }
14
15
  } else {
@@ -1 +1 @@
1
- {"version":3,"file":"is-empty.mjs","sources":["../../../src/slate/utils/is-empty.ts"],"sourcesContent":["import type { Descendant } from \"slate\";\nimport { Editor as SlateEditor, Text as SlateText } from \"slate\";\n\nimport { isEmptyString } from \"./is-empty-string\";\n\nexport function isEmpty(editor: SlateEditor, children: Descendant[]) {\n // Check if all blocks are empty, stopping at the first non-empty block\n for (const child of children) {\n if (SlateText.isText(child)) {\n // Non-empty text\n if (!isEmptyString(child.text)) {\n return false;\n }\n } else if (child.type === \"paragraph\") {\n // Non-empty paragraph\n if (\n child.children.length > 1 ||\n !(\n SlateText.isText(child.children[0]) &&\n isEmptyString(child.children[0].text)\n )\n ) {\n return false;\n }\n } else {\n // Non-empty other block\n if (!SlateEditor.isEmpty(editor, child)) {\n return false;\n }\n }\n }\n\n return true;\n}\n"],"names":["SlateText","SlateEditor"],"mappings":";;;AAKgB,SAAA,OAAA,CAAQ,QAAqB,QAAwB,EAAA;AAEnE,EAAA,KAAA,MAAW,SAAS,QAAU,EAAA;AAC5B,IAAI,IAAAA,IAAA,CAAU,MAAO,CAAA,KAAK,CAAG,EAAA;AAE3B,MAAA,IAAI,CAAC,aAAA,CAAc,KAAM,CAAA,IAAI,CAAG,EAAA;AAC9B,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF,MAAA,IAAW,KAAM,CAAA,IAAA,KAAS,WAAa,EAAA;AAErC,MAAA,IACE,MAAM,QAAS,CAAA,MAAA,GAAS,CACxB,IAAA,EACEA,KAAU,MAAO,CAAA,KAAA,CAAM,QAAS,CAAA,CAAA,CAAE,KAClC,aAAc,CAAA,KAAA,CAAM,QAAS,CAAA,CAAA,CAAA,CAAG,IAAI,CAEtC,CAAA,EAAA;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACK,MAAA;AAEL,MAAA,IAAI,CAACC,MAAA,CAAY,OAAQ,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AACvC,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
1
+ {"version":3,"file":"is-empty.mjs","sources":["../../../src/slate/utils/is-empty.ts"],"sourcesContent":["import type { Descendant } from \"slate\";\nimport { Editor as SlateEditor } from \"slate\";\n\nimport { isEmptyString } from \"./is-empty-string\";\nimport { isText } from \"./is-text\";\n\nexport function isEmpty(editor: SlateEditor, children: Descendant[]) {\n // Check if all blocks are empty, stopping at the first non-empty block\n for (const child of children) {\n if (isText(child)) {\n // Non-empty text\n if (!isEmptyString(child.text)) {\n return false;\n }\n } else if (child.type === \"paragraph\") {\n // Non-empty paragraph\n if (\n child.children.length > 1 ||\n !(isText(child.children[0]) && isEmptyString(child.children[0].text))\n ) {\n return false;\n }\n } else {\n // Non-empty other block\n if (!SlateEditor.isEmpty(editor, child)) {\n return false;\n }\n }\n }\n\n return true;\n}\n"],"names":["SlateEditor"],"mappings":";;;;AAMgB,SAAA,OAAA,CAAQ,QAAqB,QAAwB,EAAA;AAEnE,EAAA,KAAA,MAAW,SAAS,QAAU,EAAA;AAC5B,IAAI,IAAA,MAAA,CAAO,KAAK,CAAG,EAAA;AAEjB,MAAA,IAAI,CAAC,aAAA,CAAc,KAAM,CAAA,IAAI,CAAG,EAAA;AAC9B,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF,MAAA,IAAW,KAAM,CAAA,IAAA,KAAS,WAAa,EAAA;AAErC,MAAA,IACE,KAAM,CAAA,QAAA,CAAS,MAAS,GAAA,CAAA,IACxB,EAAE,MAAO,CAAA,KAAA,CAAM,QAAS,CAAA,CAAA,CAAE,KAAK,aAAc,CAAA,KAAA,CAAM,QAAS,CAAA,CAAA,CAAA,CAAG,IAAI,CACnE,CAAA,EAAA;AACA,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACK,MAAA;AAEL,MAAA,IAAI,CAACA,MAAA,CAAY,OAAQ,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AACvC,QAAO,OAAA,KAAA,CAAA;AAAA,OACT;AAAA,KACF;AAAA,GACF;AAEA,EAAO,OAAA,IAAA,CAAA;AACT;;;;"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ function isText(element) {
4
+ return !("type" in element) && "text" in element && typeof element.text === "string";
5
+ }
6
+ function isPlainText(node) {
7
+ return isText(node) && Object.keys(node).length === 1;
8
+ }
9
+
10
+ exports.isPlainText = isPlainText;
11
+ exports.isText = isText;
12
+ //# sourceMappingURL=is-text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-text.js","sources":["../../../src/slate/utils/is-text.ts"],"sourcesContent":["import type { Node, Text } from \"slate\";\n\nexport function isText(element: Node): element is Text {\n return (\n !(\"type\" in element) &&\n \"text\" in element &&\n typeof element.text === \"string\"\n );\n}\n\nexport function isPlainText(node: Node): boolean {\n return isText(node) && Object.keys(node).length === 1;\n}\n"],"names":[],"mappings":";;AAEO,SAAS,OAAO,OAAgC,EAAA;AACrD,EAAA,OACE,EAAE,MAAU,IAAA,OAAA,CAAA,IACZ,UAAU,OACV,IAAA,OAAO,QAAQ,IAAS,KAAA,QAAA,CAAA;AAE5B,CAAA;AAEO,SAAS,YAAY,IAAqB,EAAA;AAC/C,EAAA,OAAO,OAAO,IAAI,CAAA,IAAK,OAAO,IAAK,CAAA,IAAI,EAAE,MAAW,KAAA,CAAA,CAAA;AACtD;;;;;"}
@@ -0,0 +1,9 @@
1
+ function isText(element) {
2
+ return !("type" in element) && "text" in element && typeof element.text === "string";
3
+ }
4
+ function isPlainText(node) {
5
+ return isText(node) && Object.keys(node).length === 1;
6
+ }
7
+
8
+ export { isPlainText, isText };
9
+ //# sourceMappingURL=is-text.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-text.mjs","sources":["../../../src/slate/utils/is-text.ts"],"sourcesContent":["import type { Node, Text } from \"slate\";\n\nexport function isText(element: Node): element is Text {\n return (\n !(\"type\" in element) &&\n \"text\" in element &&\n typeof element.text === \"string\"\n );\n}\n\nexport function isPlainText(node: Node): boolean {\n return isText(node) && Object.keys(node).length === 1;\n}\n"],"names":[],"mappings":"AAEO,SAAS,OAAO,OAAgC,EAAA;AACrD,EAAA,OACE,EAAE,MAAU,IAAA,OAAA,CAAA,IACZ,UAAU,OACV,IAAA,OAAO,QAAQ,IAAS,KAAA,QAAA,CAAA;AAE5B,CAAA;AAEO,SAAS,YAAY,IAAqB,EAAA;AAC/C,EAAA,OAAO,OAAO,IAAI,CAAA,IAAK,OAAO,IAAK,CAAA,IAAI,EAAE,MAAW,KAAA,CAAA,CAAA;AACtD;;;;"}
@@ -0,0 +1,36 @@
1
+ 'use strict';
2
+
3
+ var slate = require('slate');
4
+
5
+ function selectionContainsInlines(editor, match) {
6
+ const { selection } = editor;
7
+ if (!selection) {
8
+ return false;
9
+ }
10
+ const roots = Array.from(
11
+ slate.Editor.nodes(editor, {
12
+ at: selection,
13
+ match: (node) => slate.Element.isElement(node) && slate.Editor.isBlock(editor, node),
14
+ mode: "lowest"
15
+ })
16
+ );
17
+ for (const [, rootPath] of roots) {
18
+ const intersectingSelection = slate.Range.isRange(selection) ? slate.Range.intersection(selection, slate.Editor.range(editor, rootPath)) : selection;
19
+ if (!intersectingSelection) {
20
+ continue;
21
+ }
22
+ const matches = Array.from(
23
+ slate.Editor.nodes(editor, {
24
+ at: intersectingSelection,
25
+ match: (node) => slate.Editor.isInline(editor, node) && match(node)
26
+ })
27
+ );
28
+ if (matches.length > 0) {
29
+ return true;
30
+ }
31
+ }
32
+ return false;
33
+ }
34
+
35
+ exports.selectionContainsInlines = selectionContainsInlines;
36
+ //# sourceMappingURL=selection-contains-inlines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-contains-inlines.js","sources":["../../../src/slate/utils/selection-contains-inlines.ts"],"sourcesContent":["import type { Node } from \"slate\";\nimport { Editor, Element, Range } from \"slate\";\n\nexport function selectionContainsInlines(\n editor: Editor,\n match: (node: Node) => boolean\n) {\n const { selection } = editor;\n if (!selection) {\n return false;\n }\n\n const roots = Array.from(\n Editor.nodes(editor, {\n at: selection,\n match: (node) => Element.isElement(node) && Editor.isBlock(editor, node),\n mode: \"lowest\",\n })\n );\n\n for (const [, rootPath] of roots) {\n const intersectingSelection = Range.isRange(selection)\n ? Range.intersection(selection, Editor.range(editor, rootPath))\n : selection;\n\n if (!intersectingSelection) {\n continue;\n }\n\n const matches = Array.from(\n Editor.nodes(editor, {\n at: intersectingSelection,\n match: (node) =>\n Editor.isInline(editor, node as Element) && match(node),\n })\n );\n\n if (matches.length > 0) {\n return true;\n }\n }\n\n return false;\n}\n"],"names":["Editor","Element","Range"],"mappings":";;;;AAGgB,SAAA,wBAAA,CACd,QACA,KACA,EAAA;AACA,EAAM,MAAA,EAAE,WAAc,GAAA,MAAA,CAAA;AACtB,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,QAAQ,KAAM,CAAA,IAAA;AAAA,IAClBA,YAAA,CAAO,MAAM,MAAQ,EAAA;AAAA,MACnB,EAAI,EAAA,SAAA;AAAA,MACJ,KAAA,EAAO,CAAC,IAAA,KAASC,aAAQ,CAAA,SAAA,CAAU,IAAI,CAAK,IAAAD,YAAA,CAAO,OAAQ,CAAA,MAAA,EAAQ,IAAI,CAAA;AAAA,MACvE,IAAM,EAAA,QAAA;AAAA,KACP,CAAA;AAAA,GACH,CAAA;AAEA,EAAA,KAAA,MAAW,GAAG,QAAQ,CAAA,IAAK,KAAO,EAAA;AAChC,IAAA,MAAM,qBAAwB,GAAAE,WAAA,CAAM,OAAQ,CAAA,SAAS,CACjD,GAAAA,WAAA,CAAM,YAAa,CAAA,SAAA,EAAWF,YAAO,CAAA,KAAA,CAAM,MAAQ,EAAA,QAAQ,CAAC,CAC5D,GAAA,SAAA,CAAA;AAEJ,IAAA,IAAI,CAAC,qBAAuB,EAAA;AAC1B,MAAA,SAAA;AAAA,KACF;AAEA,IAAA,MAAM,UAAU,KAAM,CAAA,IAAA;AAAA,MACpBA,YAAA,CAAO,MAAM,MAAQ,EAAA;AAAA,QACnB,EAAI,EAAA,qBAAA;AAAA,QACJ,KAAA,EAAO,CAAC,IACN,KAAAA,YAAA,CAAO,SAAS,MAAQ,EAAA,IAAe,CAAK,IAAA,KAAA,CAAM,IAAI,CAAA;AAAA,OACzD,CAAA;AAAA,KACH,CAAA;AAEA,IAAI,IAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACtB,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,GACF;AAEA,EAAO,OAAA,KAAA,CAAA;AACT;;;;"}
@@ -0,0 +1,34 @@
1
+ import { Editor, Element, Range } from 'slate';
2
+
3
+ function selectionContainsInlines(editor, match) {
4
+ const { selection } = editor;
5
+ if (!selection) {
6
+ return false;
7
+ }
8
+ const roots = Array.from(
9
+ Editor.nodes(editor, {
10
+ at: selection,
11
+ match: (node) => Element.isElement(node) && Editor.isBlock(editor, node),
12
+ mode: "lowest"
13
+ })
14
+ );
15
+ for (const [, rootPath] of roots) {
16
+ const intersectingSelection = Range.isRange(selection) ? Range.intersection(selection, Editor.range(editor, rootPath)) : selection;
17
+ if (!intersectingSelection) {
18
+ continue;
19
+ }
20
+ const matches = Array.from(
21
+ Editor.nodes(editor, {
22
+ at: intersectingSelection,
23
+ match: (node) => Editor.isInline(editor, node) && match(node)
24
+ })
25
+ );
26
+ if (matches.length > 0) {
27
+ return true;
28
+ }
29
+ }
30
+ return false;
31
+ }
32
+
33
+ export { selectionContainsInlines };
34
+ //# sourceMappingURL=selection-contains-inlines.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"selection-contains-inlines.mjs","sources":["../../../src/slate/utils/selection-contains-inlines.ts"],"sourcesContent":["import type { Node } from \"slate\";\nimport { Editor, Element, Range } from \"slate\";\n\nexport function selectionContainsInlines(\n editor: Editor,\n match: (node: Node) => boolean\n) {\n const { selection } = editor;\n if (!selection) {\n return false;\n }\n\n const roots = Array.from(\n Editor.nodes(editor, {\n at: selection,\n match: (node) => Element.isElement(node) && Editor.isBlock(editor, node),\n mode: \"lowest\",\n })\n );\n\n for (const [, rootPath] of roots) {\n const intersectingSelection = Range.isRange(selection)\n ? Range.intersection(selection, Editor.range(editor, rootPath))\n : selection;\n\n if (!intersectingSelection) {\n continue;\n }\n\n const matches = Array.from(\n Editor.nodes(editor, {\n at: intersectingSelection,\n match: (node) =>\n Editor.isInline(editor, node as Element) && match(node),\n })\n );\n\n if (matches.length > 0) {\n return true;\n }\n }\n\n return false;\n}\n"],"names":[],"mappings":";;AAGgB,SAAA,wBAAA,CACd,QACA,KACA,EAAA;AACA,EAAM,MAAA,EAAE,WAAc,GAAA,MAAA,CAAA;AACtB,EAAA,IAAI,CAAC,SAAW,EAAA;AACd,IAAO,OAAA,KAAA,CAAA;AAAA,GACT;AAEA,EAAA,MAAM,QAAQ,KAAM,CAAA,IAAA;AAAA,IAClB,MAAA,CAAO,MAAM,MAAQ,EAAA;AAAA,MACnB,EAAI,EAAA,SAAA;AAAA,MACJ,KAAA,EAAO,CAAC,IAAA,KAAS,OAAQ,CAAA,SAAA,CAAU,IAAI,CAAK,IAAA,MAAA,CAAO,OAAQ,CAAA,MAAA,EAAQ,IAAI,CAAA;AAAA,MACvE,IAAM,EAAA,QAAA;AAAA,KACP,CAAA;AAAA,GACH,CAAA;AAEA,EAAA,KAAA,MAAW,GAAG,QAAQ,CAAA,IAAK,KAAO,EAAA;AAChC,IAAA,MAAM,qBAAwB,GAAA,KAAA,CAAM,OAAQ,CAAA,SAAS,CACjD,GAAA,KAAA,CAAM,YAAa,CAAA,SAAA,EAAW,MAAO,CAAA,KAAA,CAAM,MAAQ,EAAA,QAAQ,CAAC,CAC5D,GAAA,SAAA,CAAA;AAEJ,IAAA,IAAI,CAAC,qBAAuB,EAAA;AAC1B,MAAA,SAAA;AAAA,KACF;AAEA,IAAA,MAAM,UAAU,KAAM,CAAA,IAAA;AAAA,MACpB,MAAA,CAAO,MAAM,MAAQ,EAAA;AAAA,QACnB,EAAI,EAAA,qBAAA;AAAA,QACJ,KAAA,EAAO,CAAC,IACN,KAAA,MAAA,CAAO,SAAS,MAAQ,EAAA,IAAe,CAAK,IAAA,KAAA,CAAM,IAAI,CAAA;AAAA,OACzD,CAAA;AAAA,KACH,CAAA;AAEA,IAAI,IAAA,OAAA,CAAQ,SAAS,CAAG,EAAA;AACtB,MAAO,OAAA,IAAA,CAAA;AAAA,KACT;AAAA,GACF;AAEA,EAAO,OAAA,KAAA,CAAA;AACT;;;;"}
@@ -3,8 +3,12 @@
3
3
  var React = require('react');
4
4
 
5
5
  const useReactTransition = React["useTransition".toString()];
6
- function useTransitionFallback(transition) {
7
- return [false, transition];
6
+ function useTransitionFallback() {
7
+ const startTransition = React.useCallback(
8
+ (callback) => callback(),
9
+ []
10
+ );
11
+ return [false, startTransition];
8
12
  }
9
13
  const useTransition = useReactTransition ?? useTransitionFallback;
10
14
 
@@ -1 +1 @@
1
- {"version":3,"file":"use-transition.js","sources":["../../src/utils/use-transition.ts"],"sourcesContent":["import React from \"react\";\n\n// Prevent bundlers from importing `useTransition` directly\n// See https://github.com/radix-ui/primitives/pull/1028\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst useReactTransition: typeof React.useTransition = (React as any)[\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n \"useTransition\".toString()\n];\n\nfunction useTransitionFallback(transition: () => void) {\n return [false, transition] as ReturnType<typeof useReactTransition>;\n}\n\n// React's `useTransition` is only available in React >=18.\nexport const useTransition: typeof React.useTransition =\n useReactTransition ?? useTransitionFallback;\n"],"names":[],"mappings":";;;;AAKA,MAAM,kBAAA,GAAkD,KAEtD,CAAA,eAAA,CAAgB,QAAS,EAAA,CAAA,CAAA;AAG3B,SAAS,sBAAsB,UAAwB,EAAA;AACrD,EAAO,OAAA,CAAC,OAAO,UAAU,CAAA,CAAA;AAC3B,CAAA;AAGO,MAAM,gBACX,kBAAsB,IAAA;;;;"}
1
+ {"version":3,"file":"use-transition.js","sources":["../../src/utils/use-transition.ts"],"sourcesContent":["import type { TransitionFunction } from \"react\";\nimport React, { useCallback } from \"react\";\n\n// Prevent bundlers from importing `useTransition` directly\n// See https://github.com/radix-ui/primitives/pull/1028\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst useReactTransition: typeof React.useTransition = (React as any)[\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n \"useTransition\".toString()\n];\n\nfunction useTransitionFallback(): ReturnType<typeof useReactTransition> {\n const startTransition = useCallback(\n (callback: TransitionFunction) => callback(),\n []\n );\n\n return [false, startTransition];\n}\n\n// React's `useTransition` is only available in React >=18.\nexport const useTransition: typeof React.useTransition =\n useReactTransition ?? useTransitionFallback;\n"],"names":["useCallback"],"mappings":";;;;AAMA,MAAM,kBAAA,GAAkD,KAEtD,CAAA,eAAA,CAAgB,QAAS,EAAA,CAAA,CAAA;AAG3B,SAAS,qBAA+D,GAAA;AACtE,EAAA,MAAM,eAAkB,GAAAA,iBAAA;AAAA,IACtB,CAAC,aAAiC,QAAS,EAAA;AAAA,IAC3C,EAAC;AAAA,GACH,CAAA;AAEA,EAAO,OAAA,CAAC,OAAO,eAAe,CAAA,CAAA;AAChC,CAAA;AAGO,MAAM,gBACX,kBAAsB,IAAA;;;;"}
@@ -1,8 +1,12 @@
1
- import React__default from 'react';
1
+ import React__default, { useCallback } from 'react';
2
2
 
3
3
  const useReactTransition = React__default["useTransition".toString()];
4
- function useTransitionFallback(transition) {
5
- return [false, transition];
4
+ function useTransitionFallback() {
5
+ const startTransition = useCallback(
6
+ (callback) => callback(),
7
+ []
8
+ );
9
+ return [false, startTransition];
6
10
  }
7
11
  const useTransition = useReactTransition ?? useTransitionFallback;
8
12
 
@@ -1 +1 @@
1
- {"version":3,"file":"use-transition.mjs","sources":["../../src/utils/use-transition.ts"],"sourcesContent":["import React from \"react\";\n\n// Prevent bundlers from importing `useTransition` directly\n// See https://github.com/radix-ui/primitives/pull/1028\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst useReactTransition: typeof React.useTransition = (React as any)[\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n \"useTransition\".toString()\n];\n\nfunction useTransitionFallback(transition: () => void) {\n return [false, transition] as ReturnType<typeof useReactTransition>;\n}\n\n// React's `useTransition` is only available in React >=18.\nexport const useTransition: typeof React.useTransition =\n useReactTransition ?? useTransitionFallback;\n"],"names":["React"],"mappings":";;AAKA,MAAM,kBAAA,GAAkDA,cAEtD,CAAA,eAAA,CAAgB,QAAS,EAAA,CAAA,CAAA;AAG3B,SAAS,sBAAsB,UAAwB,EAAA;AACrD,EAAO,OAAA,CAAC,OAAO,UAAU,CAAA,CAAA;AAC3B,CAAA;AAGO,MAAM,gBACX,kBAAsB,IAAA;;;;"}
1
+ {"version":3,"file":"use-transition.mjs","sources":["../../src/utils/use-transition.ts"],"sourcesContent":["import type { TransitionFunction } from \"react\";\nimport React, { useCallback } from \"react\";\n\n// Prevent bundlers from importing `useTransition` directly\n// See https://github.com/radix-ui/primitives/pull/1028\n// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\nconst useReactTransition: typeof React.useTransition = (React as any)[\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n \"useTransition\".toString()\n];\n\nfunction useTransitionFallback(): ReturnType<typeof useReactTransition> {\n const startTransition = useCallback(\n (callback: TransitionFunction) => callback(),\n []\n );\n\n return [false, startTransition];\n}\n\n// React's `useTransition` is only available in React >=18.\nexport const useTransition: typeof React.useTransition =\n useReactTransition ?? useTransitionFallback;\n"],"names":["React"],"mappings":";;AAMA,MAAM,kBAAA,GAAkDA,cAEtD,CAAA,eAAA,CAAgB,QAAS,EAAA,CAAA,CAAA;AAG3B,SAAS,qBAA+D,GAAA;AACtE,EAAA,MAAM,eAAkB,GAAA,WAAA;AAAA,IACtB,CAAC,aAAiC,QAAS,EAAA;AAAA,IAC3C,EAAC;AAAA,GACH,CAAA;AAEA,EAAO,OAAA,CAAC,OAAO,eAAe,CAAA,CAAA;AAChC,CAAA;AAGO,MAAM,gBACX,kBAAsB,IAAA;;;;"}
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ var index_js = require('use-sync-external-store/shim/index.js');
4
+
5
+ function subscribe(callback) {
6
+ window.addEventListener("blur", callback);
7
+ window.addEventListener("focus", callback);
8
+ return () => {
9
+ window.removeEventListener("blur", callback);
10
+ window.removeEventListener("focus", callback);
11
+ };
12
+ }
13
+ function getSnapshot() {
14
+ return document.hasFocus();
15
+ }
16
+ function getServerSnapshot() {
17
+ return true;
18
+ }
19
+ function useWindowFocus() {
20
+ return index_js.useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
21
+ }
22
+
23
+ exports.useWindowFocus = useWindowFocus;
24
+ //# sourceMappingURL=use-window-focus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-window-focus.js","sources":["../../src/utils/use-window-focus.ts"],"sourcesContent":["import { useSyncExternalStore } from \"use-sync-external-store/shim/index.js\";\n\nfunction subscribe(callback: () => void) {\n window.addEventListener(\"blur\", callback);\n window.addEventListener(\"focus\", callback);\n\n return () => {\n window.removeEventListener(\"blur\", callback);\n window.removeEventListener(\"focus\", callback);\n };\n}\n\nfunction getSnapshot() {\n return document.hasFocus();\n}\n\nfunction getServerSnapshot() {\n return true;\n}\n\nexport function useWindowFocus() {\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n"],"names":["useSyncExternalStore"],"mappings":";;;;AAEA,SAAS,UAAU,QAAsB,EAAA;AACvC,EAAO,MAAA,CAAA,gBAAA,CAAiB,QAAQ,QAAQ,CAAA,CAAA;AACxC,EAAO,MAAA,CAAA,gBAAA,CAAiB,SAAS,QAAQ,CAAA,CAAA;AAEzC,EAAA,OAAO,MAAM;AACX,IAAO,MAAA,CAAA,mBAAA,CAAoB,QAAQ,QAAQ,CAAA,CAAA;AAC3C,IAAO,MAAA,CAAA,mBAAA,CAAoB,SAAS,QAAQ,CAAA,CAAA;AAAA,GAC9C,CAAA;AACF,CAAA;AAEA,SAAS,WAAc,GAAA;AACrB,EAAA,OAAO,SAAS,QAAS,EAAA,CAAA;AAC3B,CAAA;AAEA,SAAS,iBAAoB,GAAA;AAC3B,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEO,SAAS,cAAiB,GAAA;AAC/B,EAAO,OAAAA,6BAAA,CAAqB,SAAW,EAAA,WAAA,EAAa,iBAAiB,CAAA,CAAA;AACvE;;;;"}
@@ -0,0 +1,22 @@
1
+ import { useSyncExternalStore } from 'use-sync-external-store/shim/index.js';
2
+
3
+ function subscribe(callback) {
4
+ window.addEventListener("blur", callback);
5
+ window.addEventListener("focus", callback);
6
+ return () => {
7
+ window.removeEventListener("blur", callback);
8
+ window.removeEventListener("focus", callback);
9
+ };
10
+ }
11
+ function getSnapshot() {
12
+ return document.hasFocus();
13
+ }
14
+ function getServerSnapshot() {
15
+ return true;
16
+ }
17
+ function useWindowFocus() {
18
+ return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);
19
+ }
20
+
21
+ export { useWindowFocus };
22
+ //# sourceMappingURL=use-window-focus.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-window-focus.mjs","sources":["../../src/utils/use-window-focus.ts"],"sourcesContent":["import { useSyncExternalStore } from \"use-sync-external-store/shim/index.js\";\n\nfunction subscribe(callback: () => void) {\n window.addEventListener(\"blur\", callback);\n window.addEventListener(\"focus\", callback);\n\n return () => {\n window.removeEventListener(\"blur\", callback);\n window.removeEventListener(\"focus\", callback);\n };\n}\n\nfunction getSnapshot() {\n return document.hasFocus();\n}\n\nfunction getServerSnapshot() {\n return true;\n}\n\nexport function useWindowFocus() {\n return useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n}\n"],"names":[],"mappings":";;AAEA,SAAS,UAAU,QAAsB,EAAA;AACvC,EAAO,MAAA,CAAA,gBAAA,CAAiB,QAAQ,QAAQ,CAAA,CAAA;AACxC,EAAO,MAAA,CAAA,gBAAA,CAAiB,SAAS,QAAQ,CAAA,CAAA;AAEzC,EAAA,OAAO,MAAM;AACX,IAAO,MAAA,CAAA,mBAAA,CAAoB,QAAQ,QAAQ,CAAA,CAAA;AAC3C,IAAO,MAAA,CAAA,mBAAA,CAAoB,SAAS,QAAQ,CAAA,CAAA;AAAA,GAC9C,CAAA;AACF,CAAA;AAEA,SAAS,WAAc,GAAA;AACrB,EAAA,OAAO,SAAS,QAAS,EAAA,CAAA;AAC3B,CAAA;AAEA,SAAS,iBAAoB,GAAA;AAC3B,EAAO,OAAA,IAAA,CAAA;AACT,CAAA;AAEO,SAAS,cAAiB,GAAA;AAC/B,EAAO,OAAA,oBAAA,CAAqB,SAAW,EAAA,WAAA,EAAa,iBAAiB,CAAA,CAAA;AACvE;;;;"}
package/dist/version.js CHANGED
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
 
3
3
  const PKG_NAME = "@liveblocks/react-ui";
4
- const PKG_VERSION = "2.1.1-test2";
4
+ const PKG_VERSION = "2.2.1";
5
5
  const PKG_FORMAT = "cjs";
6
6
 
7
7
  exports.PKG_FORMAT = PKG_FORMAT;
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sources":["../src/version.ts"],"sourcesContent":["declare const __VERSION__: string;\ndeclare const ROLLUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/react-ui\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof ROLLUP_FORMAT === \"string\" && ROLLUP_FORMAT;\n"],"names":[],"mappings":";;AAGO,MAAM,QAAW,GAAA,uBAAA;AACX,MAAA,WAAA,GAAiD,cAAA;AACjD,MAAA,UAAA,GAAkD;;;;;;"}
1
+ {"version":3,"file":"version.js","sources":["../src/version.ts"],"sourcesContent":["declare const __VERSION__: string;\ndeclare const ROLLUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/react-ui\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof ROLLUP_FORMAT === \"string\" && ROLLUP_FORMAT;\n"],"names":[],"mappings":";;AAGO,MAAM,QAAW,GAAA,uBAAA;AACX,MAAA,WAAA,GAAiD,QAAA;AACjD,MAAA,UAAA,GAAkD;;;;;;"}
package/dist/version.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  const PKG_NAME = "@liveblocks/react-ui";
2
- const PKG_VERSION = "2.1.1-test2";
2
+ const PKG_VERSION = "2.2.1";
3
3
  const PKG_FORMAT = "esm";
4
4
 
5
5
  export { PKG_FORMAT, PKG_NAME, PKG_VERSION };
@@ -1 +1 @@
1
- {"version":3,"file":"version.mjs","sources":["../src/version.ts"],"sourcesContent":["declare const __VERSION__: string;\ndeclare const ROLLUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/react-ui\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof ROLLUP_FORMAT === \"string\" && ROLLUP_FORMAT;\n"],"names":[],"mappings":"AAGO,MAAM,QAAW,GAAA,uBAAA;AACX,MAAA,WAAA,GAAiD,cAAA;AACjD,MAAA,UAAA,GAAkD;;;;"}
1
+ {"version":3,"file":"version.mjs","sources":["../src/version.ts"],"sourcesContent":["declare const __VERSION__: string;\ndeclare const ROLLUP_FORMAT: string;\n\nexport const PKG_NAME = \"@liveblocks/react-ui\";\nexport const PKG_VERSION = typeof __VERSION__ === \"string\" && __VERSION__;\nexport const PKG_FORMAT = typeof ROLLUP_FORMAT === \"string\" && ROLLUP_FORMAT;\n"],"names":[],"mappings":"AAGO,MAAM,QAAW,GAAA,uBAAA;AACX,MAAA,WAAA,GAAiD,QAAA;AACjD,MAAA,UAAA,GAAkD;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@liveblocks/react-ui",
3
- "version": "2.1.1-test2",
3
+ "version": "2.2.1",
4
4
  "description": "A set of React pre-built components for the Liveblocks products. Liveblocks is the all-in-one toolkit to build collaborative products like Figma, Notion, and more.",
5
5
  "license": "Apache-2.0",
6
6
  "type": "commonjs",
@@ -63,9 +63,9 @@
63
63
  },
64
64
  "dependencies": {
65
65
  "@floating-ui/react-dom": "^2.0.8",
66
- "@liveblocks/client": "2.1.1-test2",
67
- "@liveblocks/core": "2.1.1-test2",
68
- "@liveblocks/react": "2.1.1-test2",
66
+ "@liveblocks/client": "2.2.1",
67
+ "@liveblocks/core": "2.2.1",
68
+ "@liveblocks/react": "2.2.1",
69
69
  "@radix-ui/react-dropdown-menu": "^2.0.6",
70
70
  "@radix-ui/react-popover": "^1.0.7",
71
71
  "@radix-ui/react-slot": "^1.0.2",
@@ -74,6 +74,7 @@
74
74
  "react-virtuoso": "^4.7.4",
75
75
  "slate": "^0.102.0",
76
76
  "slate-history": "^0.100.0",
77
+ "slate-hyperscript": "^0.100.0",
77
78
  "slate-react": "^0.102.0",
78
79
  "use-sync-external-store": "^1.2.2"
79
80
  },
@@ -92,6 +93,7 @@
92
93
  "eslint-plugin-react": "^7.33.2",
93
94
  "eslint-plugin-react-hooks": "^4.6.0",
94
95
  "msw": "^0.27.1",
96
+ "nanoid": "^3",
95
97
  "postcss": "^8.4.31",
96
98
  "postcss-advanced-variables": "^3.0.1",
97
99
  "postcss-combine-duplicated-selectors": "^10.0.3",