@liveblocks/react-tiptap 3.19.4-test1 → 3.19.4

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 (52) hide show
  1. package/dist/LiveblocksExtension.cjs +5 -51
  2. package/dist/LiveblocksExtension.cjs.map +1 -1
  3. package/dist/LiveblocksExtension.js +5 -51
  4. package/dist/LiveblocksExtension.js.map +1 -1
  5. package/dist/ai/AiExtension.cjs +1 -2
  6. package/dist/ai/AiExtension.cjs.map +1 -1
  7. package/dist/ai/AiExtension.js +1 -2
  8. package/dist/ai/AiExtension.js.map +1 -1
  9. package/dist/comments/CommentsExtension.cjs +1 -7
  10. package/dist/comments/CommentsExtension.cjs.map +1 -1
  11. package/dist/comments/CommentsExtension.js +1 -7
  12. package/dist/comments/CommentsExtension.js.map +1 -1
  13. package/dist/index.d.cts +0 -5
  14. package/dist/index.d.ts +0 -5
  15. package/dist/mentions/MentionExtension.cjs +1 -4
  16. package/dist/mentions/MentionExtension.cjs.map +1 -1
  17. package/dist/mentions/MentionExtension.js +1 -4
  18. package/dist/mentions/MentionExtension.js.map +1 -1
  19. package/dist/types.cjs.map +1 -1
  20. package/dist/types.js.map +1 -1
  21. package/dist/version.cjs +1 -1
  22. package/dist/version.cjs.map +1 -1
  23. package/dist/version.js +1 -1
  24. package/dist/version.js.map +1 -1
  25. package/package.json +6 -6
  26. package/src/styles/index.css +4 -12
  27. package/styles.css +1 -1
  28. package/styles.css.map +1 -1
  29. package/dist/collaboration-liveblocks/cursors.cjs +0 -267
  30. package/dist/collaboration-liveblocks/cursors.cjs.map +0 -1
  31. package/dist/collaboration-liveblocks/cursors.js +0 -264
  32. package/dist/collaboration-liveblocks/cursors.js.map +0 -1
  33. package/dist/collaboration-liveblocks/mapping.cjs +0 -218
  34. package/dist/collaboration-liveblocks/mapping.cjs.map +0 -1
  35. package/dist/collaboration-liveblocks/mapping.js +0 -207
  36. package/dist/collaboration-liveblocks/mapping.js.map +0 -1
  37. package/dist/collaboration-liveblocks/plugin.cjs +0 -250
  38. package/dist/collaboration-liveblocks/plugin.cjs.map +0 -1
  39. package/dist/collaboration-liveblocks/plugin.js +0 -247
  40. package/dist/collaboration-liveblocks/plugin.js.map +0 -1
  41. package/dist/collaboration-liveblocks/remote.cjs +0 -196
  42. package/dist/collaboration-liveblocks/remote.cjs.map +0 -1
  43. package/dist/collaboration-liveblocks/remote.js +0 -193
  44. package/dist/collaboration-liveblocks/remote.js.map +0 -1
  45. package/dist/collaboration-liveblocks/schema.cjs +0 -150
  46. package/dist/collaboration-liveblocks/schema.cjs.map +0 -1
  47. package/dist/collaboration-liveblocks/schema.js +0 -135
  48. package/dist/collaboration-liveblocks/schema.js.map +0 -1
  49. package/dist/collaboration-liveblocks/steps.cjs +0 -359
  50. package/dist/collaboration-liveblocks/steps.cjs.map +0 -1
  51. package/dist/collaboration-liveblocks/steps.js +0 -356
  52. package/dist/collaboration-liveblocks/steps.js.map +0 -1
package/styles.css CHANGED
@@ -1 +1 @@
1
- .lb-tiptap-suggestions-list{margin:0;padding:0;list-style:none}.lb-tiptap-suggestions{animation-duration:var(--lb-transition-duration);animation-timing-function:var(--lb-transition-easing);will-change:transform, opacity;padding:4px}.lb-tiptap-suggestions-list-item{padding:calc(.25 * var(--lb-spacing)) calc(.5 * var(--lb-spacing));border-radius:calc(var(--lb-radius) - .75 * 4px);color:var(--lb-foreground-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;align-items:center;scroll-margin-block:4px;font-size:.875rem;transition-property:background,color,opacity;display:flex}.lb-tiptap-suggestions-list-item:where([data-highlighted]:not([data-highlighted=false]),[data-selected]:not([data-selected=false])){background:var(--lb-foreground-subtle);transition-duration:calc(var(--lb-transition-duration) / 2)}.lb-tiptap-suggestions-list-item:where(:disabled,[data-disabled]:not([data-disabled=false])){opacity:.5;cursor:not-allowed}.lb-tiptap-suggestions:where([data-side=top]){animation-name:lb-animation-slide-up}.lb-tiptap-suggestions:where([data-side=bottom]){animation-name:lb-animation-slide-down}.lb-tiptap-suggestions:where([data-state=closed]){animation-name:lb-animation-disappear}.lb-tiptap-mention-suggestions{--lb-tiptap-mention-suggestion-avatar-size:1.25rem}.lb-tiptap-mention-suggestion{padding-inline-start:calc(.5 * var(--lb-spacing));padding-inline-end:calc(.625 * var(--lb-spacing));padding-block:calc(.25 * var(--lb-spacing))}.lb-tiptap-mention-suggestion-avatar{inline-size:var(--lb-tiptap-mention-suggestion-avatar-size);block-size:var(--lb-tiptap-mention-suggestion-avatar-size);margin-inline-start:calc(-.125 * var(--lb-spacing));margin-inline-end:calc(.5 * var(--lb-spacing));margin-block:calc(.125 * var(--lb-spacing));justify-content:center;align-items:center;display:flex}.lb-tiptap-mention-suggestion-avatar:where(.lb-avatar){background:var(--lb-foreground-subtle);color:var(--lb-foreground-moderate)}.lb-tiptap-mention-suggestion-avatar :where(.lb-icon){color:var(--lb-foreground-moderate)}.lb-tiptap-mention-suggestion-group-description{color:var(--lb-foreground-tertiary);align-self:baseline;margin-inline-start:calc(.625 * var(--lb-spacing));font-size:.875em}.lb-tiptap-mention{border-radius:calc(.675 * var(--lb-radius));background:var(--lb-accent-subtle);color:var(--lb-accent);-webkit-box-decoration-break:clone;box-decoration-break:clone;cursor:default;padding:.1em .3em;font-weight:500}.lb-tiptap-mention::selection{background:0 0}.lb-tiptap-mention ::selection{background:0 0}.lb-mention-selected{background:var(--lb-accent);color:var(--lb-accent-foreground)}:where(.lb-tiptap-thread-mark:not([data-orphan=true],[data-hidden])){background:var(--lb-accent-subtle);color:var(--lb-foreground);text-decoration-line:underline;-webkit-text-decoration-color:var(--lb-foreground-moderate);text-decoration-color:var(--lb-foreground-moderate);text-underline-offset:2px;outline:none;font-weight:500;transition-property:color,text-decoration-color}:where(.lb-tiptap-thread-mark:not([data-orphan=true],[data-hidden]) .lb-tiptap-thread-mark-selected){color:var(--lb-accent);text-decoration-line:underline;-webkit-text-decoration-color:var(--lb-accent-moderate);text-decoration-color:var(--lb-accent-moderate);text-underline-offset:2px}.lb-tiptap-thread-mark{scroll-margin-block:var(--lb-spacing)}.lb-tiptap-anchored-threads{--lb-tiptap-anchored-threads-gap:1.25rem;--lb-tiptap-anchored-threads-active-thread-offset:-.75rem}.lb-tiptap-anchored-threads-thread-container{transition-duration:calc(var(--lb-transition-duration) * 2);transition-property:transform}.lb-tiptap-anchored-threads-thread{border-radius:var(--lb-radius);background:var(--lb-dynamic-background);transition-property:background,box-shadow;position:relative;overflow:hidden;box-shadow:0 0 0 1px #0000000a,0 2px 6px #0000000a,0 6px 20px #0000000f}.lb-tiptap-anchored-threads-thread:after{content:"";z-index:1;border-radius:inherit;box-shadow:var(--lb-inset-shadow);pointer-events:none;position:absolute;inset:0}.lb-tiptap-anchored-threads-thread:where([data-state=active]){box-shadow:0 0 0 1px #0000000a,0 2px 6px #00000014,0 8px 26px #0000001f}.lb-tiptap-floating{--lb-tiptap-floating-size:350px}.lb-tiptap-floating-threads-thread{inline-size:var(--lb-tiptap-floating-size)}.lb-tiptap-floating-threads-thread:where(:not(:last-of-type)){border-block-end:1px solid var(--lb-foreground-subtle)}.lb-tiptap-floating-composer{inline-size:var(--lb-tiptap-floating-size)}.lb-tiptap-active-selection{background:var(--lb-selection,#00f3);pointer-events:none}.lb-tiptap-toolbar{--lb-tiptap-toolbar-spacing:calc(.25 * var(--lb-spacing));gap:var(--lb-tiptap-toolbar-spacing);padding:var(--lb-tiptap-toolbar-spacing);background:var(--lb-background);-ms-overflow-style:none;scrollbar-width:none;flex-direction:row;align-items:center;display:flex;position:relative;overflow-x:auto}.lb-tiptap-toolbar::-webkit-scrollbar{display:none}.lb-tiptap-toolbar>*{flex:none}.lb-tiptap-floating-toolbar{--lb-tiptap-toolbar-spacing:4px}.lb-tiptap-toolbar-separator{pointer-events:none;align-self:stretch;inline-size:1px;margin-inline:1px;position:relative}.lb-tiptap-toolbar-separator:before{content:"";background:var(--lb-foreground-subtle);position:absolute;inset:10% 0}.lb-tiptap-ai-selection{background:var(--lb-selection,#00f3);pointer-events:none}.lb-tiptap-ai-toolbar-portal{inline-size:var(--lb-tiptap-editor-width);pointer-events:none;outline:none;flex-direction:column;gap:8px;display:flex}.lb-tiptap-ai-toolbar-portal:where([data-liveblocks-ai-toolbar-flip]){flex-direction:column-reverse}.lb-tiptap-ai-toolbar-container{--lb-tiptap-ai-toolbar-padding:calc(.5 * var(--lb-spacing));--lb-tiptap-ai-toolbar-height:calc(calc(2 * .25 * var(--lb-spacing) + var(--lb-icon-size)) + 2 * var(--lb-tiptap-ai-toolbar-padding));min-block-size:var(--lb-tiptap-ai-toolbar-height);position:relative}.lb-tiptap-ai-toolbar{color:var(--lb-foreground);pointer-events:auto;flex-direction:column;display:flex}.lb-tiptap-ai-toolbar-response-container,.lb-tiptap-ai-toolbar-content{max-block-size:calc(6lh + 2 * var(--lb-tiptap-ai-toolbar-padding));overflow-y:auto}.lb-tiptap-ai-toolbar-content{inline-size:100%;min-inline-size:0;padding:var(--lb-tiptap-ai-toolbar-padding);outline:none;grid-template-columns:auto 1fr auto;display:grid}.lb-tiptap-ai-toolbar-response-container{--lb-line-height-crop:calc(1lh - 1em) / -2;padding:calc(var(--lb-spacing) + var(--lb-line-height-crop)) var(--lb-spacing);border-block-end:1px solid var(--lb-foreground-subtle);flex-direction:column;display:flex}.lb-tiptap-ai-toolbar-response{white-space:pre-wrap}.lb-tiptap-ai-toolbar-response:before{content:"";vertical-align:middle;-webkit-user-select:none;user-select:none;display:inline-block}.lb-tiptap-ai-toolbar-icon-container,.lb-tiptap-ai-toolbar-actions{block-size:calc(2 * .25 * var(--lb-spacing) + var(--lb-icon-size));flex:none;display:flex}.lb-tiptap-ai-toolbar-icon-container{color:var(--lb-foreground-moderate);align-self:start;align-items:center;position:sticky;inset-block-start:0}.lb-tiptap-ai-toolbar-actions{gap:var(--lb-tiptap-ai-toolbar-padding);align-self:end;position:sticky;inset-block-end:0}.lb-tiptap-ai-toolbar-custom-prompt{all:unset;color:var(--lb-foreground);resize:none;background:0 0;outline:none}.lb-tiptap-ai-toolbar-custom-prompt::placeholder{color:var(--lb-foreground-moderate)}.lb-tiptap-ai-toolbar-custom-prompt-container{z-index:auto;margin-block:calc(-1 * var(--lb-tiptap-ai-toolbar-padding));display:grid;position:relative}.lb-tiptap-ai-toolbar-custom-prompt-container:before{content:attr(data-value) " ";visibility:hidden}.lb-tiptap-ai-toolbar-custom-prompt,.lb-tiptap-ai-toolbar-custom-prompt-container:before{box-sizing:inherit;inline-size:100%;min-inline-size:0;padding:calc(var(--lb-tiptap-ai-toolbar-padding) + (calc(2 * .25 * var(--lb-spacing) + var(--lb-icon-size)) - 1lh) / 2) var(--lb-tiptap-ai-toolbar-padding);font:inherit;letter-spacing:inherit;white-space:pre-wrap;grid-area:1/1/2/2}.lb-tiptap-ai-toolbar-error{--lb-dynamic-background:var(--lb-background-destructive-subtle);gap:calc(.5 * var(--lb-spacing));padding:var(--lb-tiptap-ai-toolbar-padding);background:var(--lb-dynamic-background);color:var(--lb-destructive);text-wrap:balance;align-items:center;font-size:.875em;display:flex;position:relative}.lb-tiptap-ai-toolbar-error:after{content:"";border-block-start:1px solid var(--lb-destructive-moderate);opacity:.35;pointer-events:none;position:absolute;inset:0}.lb-tiptap-ai-toolbar-error :where(.lb-icon-container){color:var(--lb-destructive-secondary)}.lb-tiptap-ai-toolbar-halo{--lb-tiptap-ai-toolbar-halo-blur:16px;--lb-tiptap-ai-toolbar-halo-outset:8px;inset:calc(-1 * var(--lb-tiptap-ai-toolbar-halo-outset));z-index:-1;border-radius:calc(var(--lb-radius) + var(--lb-tiptap-ai-toolbar-halo-outset));filter:blur(var(--lb-tiptap-ai-toolbar-halo-blur));pointer-events:none;transition-property:opacity;transition-duration:1s;animation:1s cubic-bezier(.165,.84,.44,1) both lb-animation-ai-toolbar-halo-scale-in;position:absolute;overflow:hidden}.lb-tiptap-ai-toolbar-halo:where(:not([data-active])){opacity:.5}:is(.lb-tiptap-ai-toolbar-halo-horizontal,.lb-tiptap-ai-toolbar-halo-vertical){position:absolute;inset:0}:is(.lb-tiptap-ai-toolbar-halo-horizontal,.lb-tiptap-ai-toolbar-halo-vertical):before,:is(.lb-tiptap-ai-toolbar-halo-horizontal,.lb-tiptap-ai-toolbar-halo-vertical):after{content:"";opacity:.175;animation-timing-function:cubic-bezier(.455,.03,.515,.955);animation-iteration-count:infinite;position:absolute;inset:0}.lb-tiptap-ai-toolbar-halo-horizontal:before{background:linear-gradient(30deg, transparent 20%, var(--lb-accent) 50%, transparent 80%);background-position:0 0;background-size:50% 100%;block-size:100%;inline-size:200%;animation-name:lb-animation-ai-toolbar-halo-horizontal;animation-duration:8s;animation-direction:alternate}.lb-tiptap-ai-toolbar-halo-horizontal:after{background:linear-gradient(90deg, transparent 20%, var(--lb-accent) 50%, transparent 80%);background-position:0 0;background-size:75% 100%;block-size:100%;inline-size:400%;animation-name:lb-animation-ai-toolbar-halo-horizontal;animation-duration:6s;animation-direction:alternate-reverse;animation-delay:-2s;inset-inline-start:-50%}.lb-tiptap-ai-toolbar-halo-vertical:before{background:linear-gradient(1deg, transparent 40%, var(--lb-accent) 50%, transparent 60%);background-position:0 0;background-repeat:round;background-size:100% 600px;block-size:400%;inline-size:100%;animation-name:lb-animation-ai-toolbar-halo-vertical;animation-duration:4s;animation-direction:alternate-reverse;animation-delay:-2s;inset-block-start:-50%}.lb-tiptap-ai-toolbar-halo-vertical:after{background:linear-gradient(-2deg, transparent 40%, var(--lb-accent) 50%, transparent 60%);background-position:0 0;background-repeat:round;background-size:100% 400px;block-size:400%;inline-size:100%;animation-name:lb-animation-ai-toolbar-halo-vertical;animation-duration:3s;animation-direction:alternate;animation-delay:-1s;inset-block-start:-50%}.lb-tiptap-ai-toolbar-thinking{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;max-inline-size:fit-content;padding-inline:var(--lb-tiptap-ai-toolbar-padding);color:var(--lb-foreground-tertiary);-webkit-user-select:none;user-select:none;align-self:center;animation:5s linear infinite lb-animation-shimmer-text;overflow:hidden}.lb-tiptap-ai-toolbar-dropdown{pointer-events:auto;inline-size:min(250px,100%)}.lb-tiptap-change-removed{color:color-mix(in srgb, currentcolor 40%, transparent);text-decoration:line-through;text-decoration-thickness:1px}.lb-tiptap-change-added{background:color-mix(in srgb, var(--lb-accent) calc(var(--lb-accent-contrast) * 1.5), transparent);color:var(--lb-accent)}.collaboration-carets__caret,.collaboration-cursor__caret{word-break:normal;pointer-events:none;position:relative}.collaboration-carets__caret:after,.collaboration-cursor__caret:after{content:"";border-inline-start-style:solid;border-inline-start-width:2px;border-inline-start-color:inherit;block-size:1.3em;position:absolute;inset-block-start:-.15em;inset-inline-start:-1px}.collaboration-carets__label,.collaboration-cursor__label{border-radius:6px;color:#fff;white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none;border-end-start-radius:0;padding:2px 6px;font-size:14px;font-style:normal;font-weight:600;line-height:normal;position:absolute;inset-block-start:-1.4em;inset-inline-start:-1px}@keyframes lb-animation-ai-toolbar-halo-scale-in{0%{transform:scale(.5)}to{transform:scale(1)}}@keyframes lb-animation-ai-toolbar-halo-horizontal{0%{transform:translate(-50%)}to{transform:translate(0)}}@keyframes lb-animation-ai-toolbar-halo-vertical{0%{transform:translateY(0)}to{transform:translateY(-50%)}}@media (prefers-reduced-motion){.lb-tiptap-suggestions:where(:not([data-state=closed])){animation-name:lb-animation-appear}.lb-tiptap-anchored-threads-thread-container{transition-duration:0s}}
1
+ .lb-tiptap-suggestions-list{margin:0;padding:0;list-style:none}.lb-tiptap-suggestions{animation-duration:var(--lb-transition-duration);animation-timing-function:var(--lb-transition-easing);will-change:transform, opacity;padding:4px}.lb-tiptap-suggestions-list-item{padding:calc(.25 * var(--lb-spacing)) calc(.5 * var(--lb-spacing));border-radius:calc(var(--lb-radius) - .75 * 4px);color:var(--lb-foreground-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;outline:none;align-items:center;scroll-margin-block:4px;font-size:.875rem;transition-property:background,color,opacity;display:flex}.lb-tiptap-suggestions-list-item:where([data-highlighted]:not([data-highlighted=false]),[data-selected]:not([data-selected=false])){background:var(--lb-foreground-subtle);transition-duration:calc(var(--lb-transition-duration) / 2)}.lb-tiptap-suggestions-list-item:where(:disabled,[data-disabled]:not([data-disabled=false])){opacity:.5;cursor:not-allowed}.lb-tiptap-suggestions:where([data-side=top]){animation-name:lb-animation-slide-up}.lb-tiptap-suggestions:where([data-side=bottom]){animation-name:lb-animation-slide-down}.lb-tiptap-suggestions:where([data-state=closed]){animation-name:lb-animation-disappear}.lb-tiptap-mention-suggestions{--lb-tiptap-mention-suggestion-avatar-size:1.25rem}.lb-tiptap-mention-suggestion{padding-inline-start:calc(.5 * var(--lb-spacing));padding-inline-end:calc(.625 * var(--lb-spacing));padding-block:calc(.25 * var(--lb-spacing))}.lb-tiptap-mention-suggestion-avatar{inline-size:var(--lb-tiptap-mention-suggestion-avatar-size);block-size:var(--lb-tiptap-mention-suggestion-avatar-size);margin-inline-start:calc(-.125 * var(--lb-spacing));margin-inline-end:calc(.5 * var(--lb-spacing));margin-block:calc(.125 * var(--lb-spacing));justify-content:center;align-items:center;display:flex}.lb-tiptap-mention-suggestion-avatar:where(.lb-avatar){background:var(--lb-foreground-subtle);color:var(--lb-foreground-moderate)}.lb-tiptap-mention-suggestion-avatar :where(.lb-icon){color:var(--lb-foreground-moderate)}.lb-tiptap-mention-suggestion-group-description{color:var(--lb-foreground-tertiary);align-self:baseline;margin-inline-start:calc(.625 * var(--lb-spacing));font-size:.875em}.lb-tiptap-mention{border-radius:calc(.675 * var(--lb-radius));background:var(--lb-accent-subtle);color:var(--lb-accent);-webkit-box-decoration-break:clone;box-decoration-break:clone;cursor:default;padding:.1em .3em;font-weight:500}.lb-tiptap-mention::selection{background:0 0}.lb-tiptap-mention ::selection{background:0 0}.lb-mention-selected{background:var(--lb-accent);color:var(--lb-accent-foreground)}:where(.lb-tiptap-thread-mark:not([data-orphan=true],[data-hidden])){background:var(--lb-accent-subtle);color:var(--lb-foreground);text-decoration-line:underline;-webkit-text-decoration-color:var(--lb-foreground-moderate);text-decoration-color:var(--lb-foreground-moderate);text-underline-offset:2px;outline:none;font-weight:500;transition-property:color,text-decoration-color}:where(.lb-tiptap-thread-mark:not([data-orphan=true],[data-hidden]) .lb-tiptap-thread-mark-selected){color:var(--lb-accent);text-decoration-line:underline;-webkit-text-decoration-color:var(--lb-accent-moderate);text-decoration-color:var(--lb-accent-moderate);text-underline-offset:2px}.lb-tiptap-thread-mark{scroll-margin-block:var(--lb-spacing)}.lb-tiptap-anchored-threads{--lb-tiptap-anchored-threads-gap:1.25rem;--lb-tiptap-anchored-threads-active-thread-offset:-.75rem}.lb-tiptap-anchored-threads-thread-container{transition-duration:calc(var(--lb-transition-duration) * 2);transition-property:transform}.lb-tiptap-anchored-threads-thread{border-radius:var(--lb-radius);background:var(--lb-dynamic-background);transition-property:background,box-shadow;position:relative;overflow:hidden;box-shadow:0 0 0 1px #0000000a,0 2px 6px #0000000a,0 6px 20px #0000000f}.lb-tiptap-anchored-threads-thread:after{content:"";z-index:1;border-radius:inherit;box-shadow:var(--lb-inset-shadow);pointer-events:none;position:absolute;inset:0}.lb-tiptap-anchored-threads-thread:where([data-state=active]){box-shadow:0 0 0 1px #0000000a,0 2px 6px #00000014,0 8px 26px #0000001f}.lb-tiptap-floating{--lb-tiptap-floating-size:350px}.lb-tiptap-floating-threads-thread{inline-size:var(--lb-tiptap-floating-size)}.lb-tiptap-floating-threads-thread:where(:not(:last-of-type)){border-block-end:1px solid var(--lb-foreground-subtle)}.lb-tiptap-floating-composer{inline-size:var(--lb-tiptap-floating-size)}.lb-tiptap-active-selection{background:var(--lb-selection,#00f3);pointer-events:none}.lb-tiptap-toolbar{--lb-tiptap-toolbar-spacing:calc(.25 * var(--lb-spacing));gap:var(--lb-tiptap-toolbar-spacing);padding:var(--lb-tiptap-toolbar-spacing);background:var(--lb-background);-ms-overflow-style:none;scrollbar-width:none;flex-direction:row;align-items:center;display:flex;position:relative;overflow-x:auto}.lb-tiptap-toolbar::-webkit-scrollbar{display:none}.lb-tiptap-toolbar>*{flex:none}.lb-tiptap-floating-toolbar{--lb-tiptap-toolbar-spacing:4px}.lb-tiptap-toolbar-separator{pointer-events:none;align-self:stretch;inline-size:1px;margin-inline:1px;position:relative}.lb-tiptap-toolbar-separator:before{content:"";background:var(--lb-foreground-subtle);position:absolute;inset:10% 0}.lb-tiptap-ai-selection{background:var(--lb-selection,#00f3);pointer-events:none}.lb-tiptap-ai-toolbar-portal{inline-size:var(--lb-tiptap-editor-width);pointer-events:none;outline:none;flex-direction:column;gap:8px;display:flex}.lb-tiptap-ai-toolbar-portal:where([data-liveblocks-ai-toolbar-flip]){flex-direction:column-reverse}.lb-tiptap-ai-toolbar-container{--lb-tiptap-ai-toolbar-padding:calc(.5 * var(--lb-spacing));--lb-tiptap-ai-toolbar-height:calc(calc(2 * .25 * var(--lb-spacing) + var(--lb-icon-size)) + 2 * var(--lb-tiptap-ai-toolbar-padding));min-block-size:var(--lb-tiptap-ai-toolbar-height);position:relative}.lb-tiptap-ai-toolbar{color:var(--lb-foreground);pointer-events:auto;flex-direction:column;display:flex}.lb-tiptap-ai-toolbar-response-container,.lb-tiptap-ai-toolbar-content{max-block-size:calc(6lh + 2 * var(--lb-tiptap-ai-toolbar-padding));overflow-y:auto}.lb-tiptap-ai-toolbar-content{inline-size:100%;min-inline-size:0;padding:var(--lb-tiptap-ai-toolbar-padding);outline:none;grid-template-columns:auto 1fr auto;display:grid}.lb-tiptap-ai-toolbar-response-container{--lb-line-height-crop:calc(1lh - 1em) / -2;padding:calc(var(--lb-spacing) + var(--lb-line-height-crop)) var(--lb-spacing);border-block-end:1px solid var(--lb-foreground-subtle);flex-direction:column;display:flex}.lb-tiptap-ai-toolbar-response{white-space:pre-wrap}.lb-tiptap-ai-toolbar-response:before{content:"";vertical-align:middle;-webkit-user-select:none;user-select:none;display:inline-block}.lb-tiptap-ai-toolbar-icon-container,.lb-tiptap-ai-toolbar-actions{block-size:calc(2 * .25 * var(--lb-spacing) + var(--lb-icon-size));flex:none;display:flex}.lb-tiptap-ai-toolbar-icon-container{color:var(--lb-foreground-moderate);align-self:start;align-items:center;position:sticky;inset-block-start:0}.lb-tiptap-ai-toolbar-actions{gap:var(--lb-tiptap-ai-toolbar-padding);align-self:end;position:sticky;inset-block-end:0}.lb-tiptap-ai-toolbar-custom-prompt{all:unset;color:var(--lb-foreground);resize:none;background:0 0;outline:none}.lb-tiptap-ai-toolbar-custom-prompt::placeholder{color:var(--lb-foreground-moderate)}.lb-tiptap-ai-toolbar-custom-prompt-container{z-index:auto;margin-block:calc(-1 * var(--lb-tiptap-ai-toolbar-padding));display:grid;position:relative}.lb-tiptap-ai-toolbar-custom-prompt-container:before{content:attr(data-value) " ";visibility:hidden}.lb-tiptap-ai-toolbar-custom-prompt,.lb-tiptap-ai-toolbar-custom-prompt-container:before{box-sizing:inherit;inline-size:100%;min-inline-size:0;padding:calc(var(--lb-tiptap-ai-toolbar-padding) + (calc(2 * .25 * var(--lb-spacing) + var(--lb-icon-size)) - 1lh) / 2) var(--lb-tiptap-ai-toolbar-padding);font:inherit;letter-spacing:inherit;white-space:pre-wrap;grid-area:1/1/2/2}.lb-tiptap-ai-toolbar-error{--lb-dynamic-background:var(--lb-background-destructive-subtle);gap:calc(.5 * var(--lb-spacing));padding:var(--lb-tiptap-ai-toolbar-padding);background:var(--lb-dynamic-background);color:var(--lb-destructive);text-wrap:balance;align-items:center;font-size:.875em;display:flex;position:relative}.lb-tiptap-ai-toolbar-error:after{content:"";border-block-start:1px solid var(--lb-destructive-moderate);opacity:.35;pointer-events:none;position:absolute;inset:0}.lb-tiptap-ai-toolbar-error :where(.lb-icon-container){color:var(--lb-destructive-secondary)}.lb-tiptap-ai-toolbar-halo{--lb-tiptap-ai-toolbar-halo-blur:16px;--lb-tiptap-ai-toolbar-halo-outset:8px;inset:calc(-1 * var(--lb-tiptap-ai-toolbar-halo-outset));z-index:-1;border-radius:calc(var(--lb-radius) + var(--lb-tiptap-ai-toolbar-halo-outset));filter:blur(var(--lb-tiptap-ai-toolbar-halo-blur));pointer-events:none;transition-property:opacity;transition-duration:1s;animation:1s cubic-bezier(.165,.84,.44,1) both lb-animation-ai-toolbar-halo-scale-in;position:absolute;overflow:hidden}.lb-tiptap-ai-toolbar-halo:where(:not([data-active])){opacity:.5}:is(.lb-tiptap-ai-toolbar-halo-horizontal,.lb-tiptap-ai-toolbar-halo-vertical){position:absolute;inset:0}:is(.lb-tiptap-ai-toolbar-halo-horizontal,.lb-tiptap-ai-toolbar-halo-vertical):before,:is(.lb-tiptap-ai-toolbar-halo-horizontal,.lb-tiptap-ai-toolbar-halo-vertical):after{content:"";opacity:.175;animation-timing-function:cubic-bezier(.455,.03,.515,.955);animation-iteration-count:infinite;position:absolute;inset:0}.lb-tiptap-ai-toolbar-halo-horizontal:before{background:linear-gradient(30deg, transparent 20%, var(--lb-accent) 50%, transparent 80%);background-position:0 0;background-size:50% 100%;block-size:100%;inline-size:200%;animation-name:lb-animation-ai-toolbar-halo-horizontal;animation-duration:8s;animation-direction:alternate}.lb-tiptap-ai-toolbar-halo-horizontal:after{background:linear-gradient(90deg, transparent 20%, var(--lb-accent) 50%, transparent 80%);background-position:0 0;background-size:75% 100%;block-size:100%;inline-size:400%;animation-name:lb-animation-ai-toolbar-halo-horizontal;animation-duration:6s;animation-direction:alternate-reverse;animation-delay:-2s;inset-inline-start:-50%}.lb-tiptap-ai-toolbar-halo-vertical:before{background:linear-gradient(1deg, transparent 40%, var(--lb-accent) 50%, transparent 60%);background-position:0 0;background-repeat:round;background-size:100% 600px;block-size:400%;inline-size:100%;animation-name:lb-animation-ai-toolbar-halo-vertical;animation-duration:4s;animation-direction:alternate-reverse;animation-delay:-2s;inset-block-start:-50%}.lb-tiptap-ai-toolbar-halo-vertical:after{background:linear-gradient(-2deg, transparent 40%, var(--lb-accent) 50%, transparent 60%);background-position:0 0;background-repeat:round;background-size:100% 400px;block-size:400%;inline-size:100%;animation-name:lb-animation-ai-toolbar-halo-vertical;animation-duration:3s;animation-direction:alternate;animation-delay:-1s;inset-block-start:-50%}.lb-tiptap-ai-toolbar-thinking{text-overflow:ellipsis;white-space:nowrap;min-inline-size:0;max-inline-size:fit-content;padding-inline:var(--lb-tiptap-ai-toolbar-padding);color:var(--lb-foreground-tertiary);-webkit-user-select:none;user-select:none;align-self:center;animation:5s linear infinite lb-animation-shimmer-text;overflow:hidden}.lb-tiptap-ai-toolbar-dropdown{pointer-events:auto;inline-size:min(250px,100%)}.lb-tiptap-change-removed{color:color-mix(in srgb, currentcolor 40%, transparent);text-decoration:line-through;text-decoration-thickness:1px}.lb-tiptap-change-added{background:color-mix(in srgb, var(--lb-accent) calc(var(--lb-accent-contrast) * 1.5), transparent);color:var(--lb-accent)}.collaboration-carets__caret,.collaboration-cursor__caret{word-break:normal;pointer-events:none;border-inline:1px solid #0d0d0d;margin-inline:-1px;position:relative}.collaboration-carets__label,.collaboration-cursor__label{border-radius:6px;color:#fff;white-space:nowrap;pointer-events:none;-webkit-user-select:none;user-select:none;border-end-start-radius:0;padding:2px 6px;font-size:14px;font-style:normal;font-weight:600;line-height:normal;position:absolute;inset-block-start:-1.4em;inset-inline-start:-1px}@keyframes lb-animation-ai-toolbar-halo-scale-in{0%{transform:scale(.5)}to{transform:scale(1)}}@keyframes lb-animation-ai-toolbar-halo-horizontal{0%{transform:translate(-50%)}to{transform:translate(0)}}@keyframes lb-animation-ai-toolbar-halo-vertical{0%{transform:translateY(0)}to{transform:translateY(-50%)}}@media (prefers-reduced-motion){.lb-tiptap-suggestions:where(:not([data-state=closed])){animation-name:lb-animation-appear}.lb-tiptap-anchored-threads-thread-container{transition-duration:0s}}
package/styles.css.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["src/styles/src/styles/index.css","src/styles/src/styles/utils.css"],"names":[],"mappings":"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","file":"styles.css","sourcesContent":["/* stylelint-disable selector-class-pattern */\n@import \"./utils\";\n@import \"./constants\";\n\n/*************************************\n * Suggestions *\n *************************************/\n\n.lb-tiptap-suggestions-list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n/*************************************\n * Elevation lists *\n *************************************/\n\n.lb-tiptap-suggestions {\n padding: $lb-elevation-padding;\n animation-duration: var(--lb-transition-duration);\n animation-timing-function: var(--lb-transition-easing);\n will-change: transform, opacity;\n}\n\n.lb-tiptap-suggestions-list-item {\n display: flex;\n align-items: center;\n padding: calc(0.25 * var(--lb-spacing)) calc(0.5 * var(--lb-spacing));\n border-radius: calc(var(--lb-radius) - 0.75 * $lb-elevation-padding);\n color: var(--lb-foreground-secondary);\n outline: none;\n font-size: 0.875rem;\n cursor: pointer;\n user-select: none;\n transition-property: background, color, opacity;\n scroll-margin-block: $lb-elevation-padding;\n}\n\n:is(.lb-tiptap-suggestions-list-item) {\n &:where(\n [data-highlighted]:not([data-highlighted=\"false\"]),\n [data-selected]:not([data-selected=\"false\"])\n ) {\n background: var(--lb-foreground-subtle);\n transition-duration: calc(var(--lb-transition-duration) / 2);\n }\n\n &:where(:disabled, [data-disabled]:not([data-disabled=\"false\"])) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n}\n\n/*************************************\n * Floating animations *\n *************************************/\n\n:is(.lb-tiptap-suggestions) {\n &:where([data-side=\"top\"]) {\n animation-name: lb-animation-slide-up;\n }\n\n &:where([data-side=\"bottom\"]) {\n animation-name: lb-animation-slide-down;\n }\n\n &:where([data-state=\"closed\"]) {\n animation-name: lb-animation-disappear;\n }\n}\n\n@media (prefers-reduced-motion) {\n .lb-tiptap-suggestions:where(:not([data-state=\"closed\"])) {\n animation-name: lb-animation-appear;\n }\n}\n\n/*************************************\n * Mention suggestions *\n *************************************/\n\n.lb-tiptap-mention-suggestions {\n --lb-tiptap-mention-suggestion-avatar-size: 1.25rem;\n}\n\n.lb-tiptap-mention-suggestion {\n padding-inline-start: calc(0.5 * var(--lb-spacing));\n padding-inline-end: calc(0.625 * var(--lb-spacing));\n padding-block: calc(0.25 * var(--lb-spacing));\n}\n\n.lb-tiptap-mention-suggestion-avatar {\n display: flex;\n justify-content: center;\n align-items: center;\n inline-size: var(--lb-tiptap-mention-suggestion-avatar-size);\n block-size: var(--lb-tiptap-mention-suggestion-avatar-size);\n margin-inline-start: calc(-0.125 * var(--lb-spacing));\n margin-inline-end: calc(0.5 * var(--lb-spacing));\n margin-block: calc(0.125 * var(--lb-spacing));\n\n &:where(.lb-avatar) {\n background: var(--lb-foreground-subtle);\n color: var(--lb-foreground-moderate);\n }\n\n :where(.lb-icon) {\n color: var(--lb-foreground-moderate);\n }\n}\n\n.lb-tiptap-mention-suggestion-group-description {\n align-self: baseline;\n margin-inline-start: calc(0.625 * var(--lb-spacing));\n color: var(--lb-foreground-tertiary);\n font-size: 0.875em;\n}\n\n/*************************************\n * Mention *\n *************************************/\n\n.lb-tiptap-mention {\n padding: 0.1em 0.3em;\n border-radius: calc(0.675 * var(--lb-radius));\n background: var(--lb-accent-subtle);\n color: var(--lb-accent);\n box-decoration-break: clone;\n font-weight: 500;\n cursor: default;\n\n @include invisible-selection;\n}\n\n.lb-mention-selected {\n background: var(--lb-accent);\n color: var(--lb-accent-foreground);\n}\n\n/*************************************\n * Thread mark *\n *************************************/\n\n:where(.lb-tiptap-thread-mark:not([data-orphan=\"true\"], [data-hidden])) {\n background: var(--lb-accent-subtle);\n color: var(--lb-foreground);\n outline: none;\n font-weight: 500;\n transition-property: color, text-decoration-color;\n text-decoration-line: underline;\n text-decoration-color: var(--lb-foreground-moderate);\n text-underline-offset: 2px;\n}\n\n:where(\n .lb-tiptap-thread-mark:not([data-orphan=\"true\"], [data-hidden])\n .lb-tiptap-thread-mark-selected\n) {\n color: var(--lb-accent);\n text-decoration-line: underline;\n text-decoration-color: var(--lb-accent-moderate);\n text-underline-offset: 2px;\n}\n\n.lb-tiptap-thread-mark {\n /* Add some space above/below when scrolling to it. */\n scroll-margin-block: var(--lb-spacing);\n}\n\n/*************************************\n * Anchored threads *\n *************************************/\n\n.lb-tiptap-anchored-threads {\n --lb-tiptap-anchored-threads-gap: 1.25rem;\n --lb-tiptap-anchored-threads-active-thread-offset: -0.75rem;\n}\n\n.lb-tiptap-anchored-threads-thread-container {\n transition-duration: calc(var(--lb-transition-duration) * 2);\n transition-property: transform;\n}\n\n@media (prefers-reduced-motion) {\n .lb-tiptap-anchored-threads-thread-container {\n transition-duration: 0s;\n }\n}\n\n.lb-tiptap-anchored-threads-thread {\n position: relative;\n overflow: hidden;\n border-radius: var(--lb-radius);\n background: var(--lb-dynamic-background);\n box-shadow: $lb-tiptap-anchored-threads-shadow;\n transition-property: background, box-shadow;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: 1;\n border-radius: inherit;\n box-shadow: var(--lb-inset-shadow);\n pointer-events: none;\n }\n\n &:where([data-state=\"active\"]) {\n box-shadow: $lb-tiptap-anchored-threads-active-shadow;\n }\n}\n\n/*************************************\n * Floating components *\n *************************************/\n\n.lb-tiptap-floating {\n --lb-tiptap-floating-size: 350px;\n}\n\n/*************************************\n * Floating threads *\n *************************************/\n\n.lb-tiptap-floating-threads-thread {\n inline-size: var(--lb-tiptap-floating-size);\n\n &:where(:not(:last-of-type)) {\n border-block-end: 1px solid var(--lb-foreground-subtle);\n }\n}\n\n/*************************************\n * Floating composer *\n *************************************/\n\n.lb-tiptap-floating-composer {\n inline-size: var(--lb-tiptap-floating-size);\n}\n\n/*************************************\n * Active selection *\n *************************************/\n\n.lb-tiptap-active-selection {\n background: var(--lb-selection, rgb(0 0 255 / 20%));\n pointer-events: none;\n}\n\n/*************************************\n * Toolbar *\n *************************************/\n\n.lb-tiptap-toolbar {\n --lb-tiptap-toolbar-spacing: calc(0.25 * var(--lb-spacing));\n\n position: relative;\n display: flex;\n flex-direction: row;\n gap: var(--lb-tiptap-toolbar-spacing);\n align-items: center;\n padding: var(--lb-tiptap-toolbar-spacing);\n background: var(--lb-background);\n\n /* overflow-inline: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-x: auto;\n\n @include invisible-scrollbar;\n\n > * {\n flex: none;\n }\n}\n\n.lb-tiptap-floating-toolbar {\n --lb-tiptap-toolbar-spacing: $lb-elevation-padding;\n}\n\n.lb-tiptap-toolbar-separator {\n position: relative;\n align-self: stretch;\n inline-size: 1px;\n margin-inline: 1px;\n pointer-events: none;\n\n &::before {\n content: \"\";\n position: absolute;\n inset: 10% 0;\n background: var(--lb-foreground-subtle);\n }\n}\n\n/*************************************\n * AI Toolbar *\n *************************************/\n\n.lb-tiptap-ai-selection {\n background: var(--lb-selection, rgb(0 0 255 / 20%));\n pointer-events: none;\n}\n\n.lb-tiptap-ai-toolbar-portal {\n display: flex;\n flex-direction: column;\n gap: 8px;\n inline-size: var(--lb-tiptap-editor-width);\n outline: none;\n pointer-events: none;\n\n &:where([data-liveblocks-ai-toolbar-flip]) {\n flex-direction: column-reverse;\n }\n}\n\n.lb-tiptap-ai-toolbar-container {\n --lb-tiptap-ai-toolbar-padding: calc(0.5 * var(--lb-spacing));\n --lb-tiptap-ai-toolbar-height: calc(\n $lb-button-size + 2 * var(--lb-tiptap-ai-toolbar-padding)\n );\n\n position: relative;\n min-block-size: var(--lb-tiptap-ai-toolbar-height);\n}\n\n.lb-tiptap-ai-toolbar {\n display: flex;\n flex-direction: column;\n color: var(--lb-foreground);\n pointer-events: auto;\n}\n\n.lb-tiptap-ai-toolbar-response-container,\n.lb-tiptap-ai-toolbar-content {\n max-block-size: calc(6lh + 2 * var(--lb-tiptap-ai-toolbar-padding));\n\n /* overflow-block: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: auto;\n}\n\n.lb-tiptap-ai-toolbar-content {\n display: grid;\n grid-template-columns: auto 1fr auto;\n inline-size: 100%;\n min-inline-size: 0;\n padding: var(--lb-tiptap-ai-toolbar-padding);\n outline: none;\n}\n\n.lb-tiptap-ai-toolbar-response-container {\n --lb-line-height-crop: calc(1lh - 1em) / -2;\n\n display: flex;\n flex-direction: column;\n padding: calc(var(--lb-spacing) + var(--lb-line-height-crop))\n var(--lb-spacing);\n border-block-end: 1px solid var(--lb-foreground-subtle);\n}\n\n.lb-tiptap-ai-toolbar-response {\n white-space: pre-wrap;\n\n &::before {\n content: \"\\FEFF\";\n display: inline-block;\n vertical-align: middle;\n user-select: none;\n }\n}\n\n.lb-tiptap-ai-toolbar-icon-container,\n.lb-tiptap-ai-toolbar-actions {\n display: flex;\n flex: none;\n block-size: $lb-button-size;\n}\n\n.lb-tiptap-ai-toolbar-icon-container {\n position: sticky;\n inset-block-start: 0;\n align-items: center;\n align-self: start;\n color: var(--lb-foreground-moderate);\n}\n\n.lb-tiptap-ai-toolbar-actions {\n position: sticky;\n inset-block-end: 0;\n gap: var(--lb-tiptap-ai-toolbar-padding);\n align-self: end;\n}\n\n.lb-tiptap-ai-toolbar-custom-prompt {\n all: unset;\n background: transparent;\n color: var(--lb-foreground);\n outline: none;\n resize: none;\n\n &::placeholder {\n color: var(--lb-foreground-moderate);\n }\n}\n\n.lb-tiptap-ai-toolbar-custom-prompt-container {\n position: relative;\n z-index: auto;\n display: grid;\n margin-block: calc(-1 * var(--lb-tiptap-ai-toolbar-padding));\n\n &::before {\n /* The space is important when handling new lines */\n content: attr(data-value) \" \";\n visibility: hidden;\n }\n}\n\n.lb-tiptap-ai-toolbar-custom-prompt,\n.lb-tiptap-ai-toolbar-custom-prompt-container::before {\n /* Overlap the textarea and its value to auto-size it */\n grid-area: 1 / 1 / 2 / 2;\n box-sizing: inherit;\n inline-size: 100%;\n min-inline-size: 0;\n padding: calc(\n var(--lb-tiptap-ai-toolbar-padding) + ($lb-button-size - 1lh) / 2\n )\n var(--lb-tiptap-ai-toolbar-padding);\n font: inherit;\n letter-spacing: inherit;\n white-space: pre-wrap;\n}\n\n.lb-tiptap-ai-toolbar-error {\n --lb-dynamic-background: var(--lb-background-destructive-subtle);\n\n position: relative;\n display: flex;\n gap: calc(0.5 * var(--lb-spacing));\n align-items: center;\n padding: var(--lb-tiptap-ai-toolbar-padding);\n background: var(--lb-dynamic-background);\n color: var(--lb-destructive);\n font-size: 0.875em;\n text-wrap: balance;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-block-start: 1px solid var(--lb-destructive-moderate);\n opacity: 0.35;\n pointer-events: none;\n }\n\n :where(.lb-icon-container) {\n color: var(--lb-destructive-secondary);\n }\n}\n\n.lb-tiptap-ai-toolbar-halo {\n --lb-tiptap-ai-toolbar-halo-blur: 16px;\n --lb-tiptap-ai-toolbar-halo-outset: 8px;\n\n position: absolute;\n inset: calc(-1 * var(--lb-tiptap-ai-toolbar-halo-outset));\n z-index: -1;\n overflow: hidden;\n border-radius: calc(\n var(--lb-radius) + var(--lb-tiptap-ai-toolbar-halo-outset)\n );\n filter: blur(var(--lb-tiptap-ai-toolbar-halo-blur));\n pointer-events: none;\n transition-duration: 1s;\n transition-property: opacity;\n animation: lb-animation-ai-toolbar-halo-scale-in 1s\n cubic-bezier(0.165, 0.84, 0.44, 1) both;\n\n &:where(:not([data-active])) {\n opacity: 0.5;\n }\n}\n\n:is(\n .lb-tiptap-ai-toolbar-halo-horizontal,\n .lb-tiptap-ai-toolbar-halo-vertical\n) {\n position: absolute;\n inset: 0;\n\n &::before,\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n opacity: 0.175;\n animation-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955);\n animation-iteration-count: infinite;\n }\n}\n\n.lb-tiptap-ai-toolbar-halo-horizontal {\n &::before {\n inline-size: 200%;\n block-size: 100%;\n background: linear-gradient(\n 30deg,\n transparent 20%,\n var(--lb-accent) 50%,\n transparent 80%\n );\n background-position: top left;\n background-size: 50% 100%;\n animation-name: lb-animation-ai-toolbar-halo-horizontal;\n animation-duration: 8s;\n animation-direction: alternate;\n }\n\n &::after {\n inset-inline-start: -50%;\n inline-size: 400%;\n block-size: 100%;\n background: linear-gradient(\n 90deg,\n transparent 20%,\n var(--lb-accent) 50%,\n transparent 80%\n );\n background-position: top left;\n background-size: 75% 100%;\n animation-name: lb-animation-ai-toolbar-halo-horizontal;\n animation-duration: 6s;\n animation-delay: -2s;\n animation-direction: alternate-reverse;\n }\n}\n\n.lb-tiptap-ai-toolbar-halo-vertical {\n &::before {\n inset-block-start: -50%;\n inline-size: 100%;\n block-size: 400%;\n background: linear-gradient(\n 1deg,\n transparent 40%,\n var(--lb-accent) 50%,\n transparent 60%\n );\n background-position: top left;\n background-size: 100% 600px;\n background-repeat: round;\n animation-name: lb-animation-ai-toolbar-halo-vertical;\n animation-duration: 4s;\n animation-delay: -2s;\n animation-direction: alternate-reverse;\n }\n\n &::after {\n inset-block-start: -50%;\n inline-size: 100%;\n block-size: 400%;\n background: linear-gradient(\n -2deg,\n transparent 40%,\n var(--lb-accent) 50%,\n transparent 60%\n );\n background-position: top left;\n background-size: 100% 400px;\n background-repeat: round;\n animation-name: lb-animation-ai-toolbar-halo-vertical;\n animation-duration: 3s;\n animation-delay: -1s;\n animation-direction: alternate;\n }\n}\n\n.lb-tiptap-ai-toolbar-thinking {\n @include truncate;\n\n align-self: center;\n min-inline-size: 0;\n max-inline-size: fit-content;\n padding-inline: var(--lb-tiptap-ai-toolbar-padding);\n color: var(--lb-foreground-tertiary);\n user-select: none;\n animation: lb-animation-shimmer-text 5s linear infinite;\n}\n\n.lb-tiptap-ai-toolbar-dropdown {\n inline-size: min(250px, 100%);\n pointer-events: auto;\n}\n\n/*************************************\n * Diff Changes *\n *************************************/\n\n.lb-tiptap-change-removed {\n color: color-mix(in srgb, currentcolor 40%, transparent);\n text-decoration: line-through;\n text-decoration-thickness: 1px;\n}\n\n.lb-tiptap-change-added {\n background: color-mix(\n in srgb,\n var(--lb-accent) calc(var(--lb-accent-contrast) * 1.5),\n transparent\n );\n color: var(--lb-accent);\n}\n\n/*************************************\n * Collaboration cursors *\n *************************************/\n\n/* Give a remote user a caret */\n.collaboration-carets__caret,\n.collaboration-cursor__caret {\n position: relative;\n word-break: normal;\n pointer-events: none;\n}\n\n.collaboration-carets__caret::after,\n.collaboration-cursor__caret::after {\n content: \"\";\n position: absolute;\n inset-inline-start: -1px;\n inset-block-start: -0.15em;\n block-size: 1.3em;\n border-inline-start-width: 2px;\n border-inline-start-style: solid;\n border-inline-start-color: inherit;\n}\n\n/* Render the username above the caret */\n.collaboration-carets__label,\n.collaboration-cursor__label {\n position: absolute;\n inset-inline-start: -1px;\n inset-block-start: -1.4em;\n padding: 2px 6px;\n border-radius: 6px;\n border-end-start-radius: 0;\n color: #fff;\n font-weight: 600;\n font-style: normal;\n font-size: 14px;\n line-height: normal;\n white-space: nowrap;\n pointer-events: none;\n user-select: none;\n}\n\n/*************************************\n * Animations *\n *************************************/\n\n@keyframes lb-animation-ai-toolbar-halo-scale-in {\n from {\n transform: scale(0.5);\n }\n\n to {\n transform: scale(1);\n }\n}\n\n@keyframes lb-animation-ai-toolbar-halo-horizontal {\n from {\n transform: translateX(-50%);\n }\n\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes lb-animation-ai-toolbar-halo-vertical {\n from {\n transform: translateY(0);\n }\n\n to {\n transform: translateY(-50%);\n }\n}\n","@mixin invisible-selection {\n &::selection,\n *::selection {\n background: transparent;\n }\n}\n\n@mixin invisible-scrollbar {\n & {\n -ms-overflow-style: none;\n scrollbar-width: none;\n }\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n@mixin truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n"]}
1
+ {"version":3,"sources":["src/styles/src/styles/index.css","src/styles/src/styles/utils.css"],"names":[],"mappings":"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","file":"styles.css","sourcesContent":["/* stylelint-disable selector-class-pattern */\n@import \"./utils\";\n@import \"./constants\";\n\n/*************************************\n * Suggestions *\n *************************************/\n\n.lb-tiptap-suggestions-list {\n margin: 0;\n padding: 0;\n list-style: none;\n}\n\n/*************************************\n * Elevation lists *\n *************************************/\n\n.lb-tiptap-suggestions {\n padding: $lb-elevation-padding;\n animation-duration: var(--lb-transition-duration);\n animation-timing-function: var(--lb-transition-easing);\n will-change: transform, opacity;\n}\n\n.lb-tiptap-suggestions-list-item {\n display: flex;\n align-items: center;\n padding: calc(0.25 * var(--lb-spacing)) calc(0.5 * var(--lb-spacing));\n border-radius: calc(var(--lb-radius) - 0.75 * $lb-elevation-padding);\n color: var(--lb-foreground-secondary);\n outline: none;\n font-size: 0.875rem;\n cursor: pointer;\n user-select: none;\n transition-property: background, color, opacity;\n scroll-margin-block: $lb-elevation-padding;\n}\n\n:is(.lb-tiptap-suggestions-list-item) {\n &:where(\n [data-highlighted]:not([data-highlighted=\"false\"]),\n [data-selected]:not([data-selected=\"false\"])\n ) {\n background: var(--lb-foreground-subtle);\n transition-duration: calc(var(--lb-transition-duration) / 2);\n }\n\n &:where(:disabled, [data-disabled]:not([data-disabled=\"false\"])) {\n opacity: 0.5;\n cursor: not-allowed;\n }\n}\n\n/*************************************\n * Floating animations *\n *************************************/\n\n:is(.lb-tiptap-suggestions) {\n &:where([data-side=\"top\"]) {\n animation-name: lb-animation-slide-up;\n }\n\n &:where([data-side=\"bottom\"]) {\n animation-name: lb-animation-slide-down;\n }\n\n &:where([data-state=\"closed\"]) {\n animation-name: lb-animation-disappear;\n }\n}\n\n@media (prefers-reduced-motion) {\n .lb-tiptap-suggestions:where(:not([data-state=\"closed\"])) {\n animation-name: lb-animation-appear;\n }\n}\n\n/*************************************\n * Mention suggestions *\n *************************************/\n\n.lb-tiptap-mention-suggestions {\n --lb-tiptap-mention-suggestion-avatar-size: 1.25rem;\n}\n\n.lb-tiptap-mention-suggestion {\n padding-inline-start: calc(0.5 * var(--lb-spacing));\n padding-inline-end: calc(0.625 * var(--lb-spacing));\n padding-block: calc(0.25 * var(--lb-spacing));\n}\n\n.lb-tiptap-mention-suggestion-avatar {\n display: flex;\n justify-content: center;\n align-items: center;\n inline-size: var(--lb-tiptap-mention-suggestion-avatar-size);\n block-size: var(--lb-tiptap-mention-suggestion-avatar-size);\n margin-inline-start: calc(-0.125 * var(--lb-spacing));\n margin-inline-end: calc(0.5 * var(--lb-spacing));\n margin-block: calc(0.125 * var(--lb-spacing));\n\n &:where(.lb-avatar) {\n background: var(--lb-foreground-subtle);\n color: var(--lb-foreground-moderate);\n }\n\n :where(.lb-icon) {\n color: var(--lb-foreground-moderate);\n }\n}\n\n.lb-tiptap-mention-suggestion-group-description {\n align-self: baseline;\n margin-inline-start: calc(0.625 * var(--lb-spacing));\n color: var(--lb-foreground-tertiary);\n font-size: 0.875em;\n}\n\n/*************************************\n * Mention *\n *************************************/\n\n.lb-tiptap-mention {\n padding: 0.1em 0.3em;\n border-radius: calc(0.675 * var(--lb-radius));\n background: var(--lb-accent-subtle);\n color: var(--lb-accent);\n box-decoration-break: clone;\n font-weight: 500;\n cursor: default;\n\n @include invisible-selection;\n}\n\n.lb-mention-selected {\n background: var(--lb-accent);\n color: var(--lb-accent-foreground);\n}\n\n/*************************************\n * Thread mark *\n *************************************/\n\n:where(.lb-tiptap-thread-mark:not([data-orphan=\"true\"], [data-hidden])) {\n background: var(--lb-accent-subtle);\n color: var(--lb-foreground);\n outline: none;\n font-weight: 500;\n transition-property: color, text-decoration-color;\n text-decoration-line: underline;\n text-decoration-color: var(--lb-foreground-moderate);\n text-underline-offset: 2px;\n}\n\n:where(\n .lb-tiptap-thread-mark:not([data-orphan=\"true\"], [data-hidden])\n .lb-tiptap-thread-mark-selected\n) {\n color: var(--lb-accent);\n text-decoration-line: underline;\n text-decoration-color: var(--lb-accent-moderate);\n text-underline-offset: 2px;\n}\n\n.lb-tiptap-thread-mark {\n /* Add some space above/below when scrolling to it. */\n scroll-margin-block: var(--lb-spacing);\n}\n\n/*************************************\n * Anchored threads *\n *************************************/\n\n.lb-tiptap-anchored-threads {\n --lb-tiptap-anchored-threads-gap: 1.25rem;\n --lb-tiptap-anchored-threads-active-thread-offset: -0.75rem;\n}\n\n.lb-tiptap-anchored-threads-thread-container {\n transition-duration: calc(var(--lb-transition-duration) * 2);\n transition-property: transform;\n}\n\n@media (prefers-reduced-motion) {\n .lb-tiptap-anchored-threads-thread-container {\n transition-duration: 0s;\n }\n}\n\n.lb-tiptap-anchored-threads-thread {\n position: relative;\n overflow: hidden;\n border-radius: var(--lb-radius);\n background: var(--lb-dynamic-background);\n box-shadow: $lb-tiptap-anchored-threads-shadow;\n transition-property: background, box-shadow;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n z-index: 1;\n border-radius: inherit;\n box-shadow: var(--lb-inset-shadow);\n pointer-events: none;\n }\n\n &:where([data-state=\"active\"]) {\n box-shadow: $lb-tiptap-anchored-threads-active-shadow;\n }\n}\n\n/*************************************\n * Floating components *\n *************************************/\n\n.lb-tiptap-floating {\n --lb-tiptap-floating-size: 350px;\n}\n\n/*************************************\n * Floating threads *\n *************************************/\n\n.lb-tiptap-floating-threads-thread {\n inline-size: var(--lb-tiptap-floating-size);\n\n &:where(:not(:last-of-type)) {\n border-block-end: 1px solid var(--lb-foreground-subtle);\n }\n}\n\n/*************************************\n * Floating composer *\n *************************************/\n\n.lb-tiptap-floating-composer {\n inline-size: var(--lb-tiptap-floating-size);\n}\n\n/*************************************\n * Active selection *\n *************************************/\n\n.lb-tiptap-active-selection {\n background: var(--lb-selection, rgb(0 0 255 / 20%));\n pointer-events: none;\n}\n\n/*************************************\n * Toolbar *\n *************************************/\n\n.lb-tiptap-toolbar {\n --lb-tiptap-toolbar-spacing: calc(0.25 * var(--lb-spacing));\n\n position: relative;\n display: flex;\n flex-direction: row;\n gap: var(--lb-tiptap-toolbar-spacing);\n align-items: center;\n padding: var(--lb-tiptap-toolbar-spacing);\n background: var(--lb-background);\n\n /* overflow-inline: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-x: auto;\n\n @include invisible-scrollbar;\n\n > * {\n flex: none;\n }\n}\n\n.lb-tiptap-floating-toolbar {\n --lb-tiptap-toolbar-spacing: $lb-elevation-padding;\n}\n\n.lb-tiptap-toolbar-separator {\n position: relative;\n align-self: stretch;\n inline-size: 1px;\n margin-inline: 1px;\n pointer-events: none;\n\n &::before {\n content: \"\";\n position: absolute;\n inset: 10% 0;\n background: var(--lb-foreground-subtle);\n }\n}\n\n/*************************************\n * AI Toolbar *\n *************************************/\n\n.lb-tiptap-ai-selection {\n background: var(--lb-selection, rgb(0 0 255 / 20%));\n pointer-events: none;\n}\n\n.lb-tiptap-ai-toolbar-portal {\n display: flex;\n flex-direction: column;\n gap: 8px;\n inline-size: var(--lb-tiptap-editor-width);\n outline: none;\n pointer-events: none;\n\n &:where([data-liveblocks-ai-toolbar-flip]) {\n flex-direction: column-reverse;\n }\n}\n\n.lb-tiptap-ai-toolbar-container {\n --lb-tiptap-ai-toolbar-padding: calc(0.5 * var(--lb-spacing));\n --lb-tiptap-ai-toolbar-height: calc(\n $lb-button-size + 2 * var(--lb-tiptap-ai-toolbar-padding)\n );\n\n position: relative;\n min-block-size: var(--lb-tiptap-ai-toolbar-height);\n}\n\n.lb-tiptap-ai-toolbar {\n display: flex;\n flex-direction: column;\n color: var(--lb-foreground);\n pointer-events: auto;\n}\n\n.lb-tiptap-ai-toolbar-response-container,\n.lb-tiptap-ai-toolbar-content {\n max-block-size: calc(6lh + 2 * var(--lb-tiptap-ai-toolbar-padding));\n\n /* overflow-block: auto; doesn't work as expected */\n /* stylelint-disable-next-line plugin/use-logical-properties-and-values */\n overflow-y: auto;\n}\n\n.lb-tiptap-ai-toolbar-content {\n display: grid;\n grid-template-columns: auto 1fr auto;\n inline-size: 100%;\n min-inline-size: 0;\n padding: var(--lb-tiptap-ai-toolbar-padding);\n outline: none;\n}\n\n.lb-tiptap-ai-toolbar-response-container {\n --lb-line-height-crop: calc(1lh - 1em) / -2;\n\n display: flex;\n flex-direction: column;\n padding: calc(var(--lb-spacing) + var(--lb-line-height-crop))\n var(--lb-spacing);\n border-block-end: 1px solid var(--lb-foreground-subtle);\n}\n\n.lb-tiptap-ai-toolbar-response {\n white-space: pre-wrap;\n\n &::before {\n content: \"\\FEFF\";\n display: inline-block;\n vertical-align: middle;\n user-select: none;\n }\n}\n\n.lb-tiptap-ai-toolbar-icon-container,\n.lb-tiptap-ai-toolbar-actions {\n display: flex;\n flex: none;\n block-size: $lb-button-size;\n}\n\n.lb-tiptap-ai-toolbar-icon-container {\n position: sticky;\n inset-block-start: 0;\n align-items: center;\n align-self: start;\n color: var(--lb-foreground-moderate);\n}\n\n.lb-tiptap-ai-toolbar-actions {\n position: sticky;\n inset-block-end: 0;\n gap: var(--lb-tiptap-ai-toolbar-padding);\n align-self: end;\n}\n\n.lb-tiptap-ai-toolbar-custom-prompt {\n all: unset;\n background: transparent;\n color: var(--lb-foreground);\n outline: none;\n resize: none;\n\n &::placeholder {\n color: var(--lb-foreground-moderate);\n }\n}\n\n.lb-tiptap-ai-toolbar-custom-prompt-container {\n position: relative;\n z-index: auto;\n display: grid;\n margin-block: calc(-1 * var(--lb-tiptap-ai-toolbar-padding));\n\n &::before {\n /* The space is important when handling new lines */\n content: attr(data-value) \" \";\n visibility: hidden;\n }\n}\n\n.lb-tiptap-ai-toolbar-custom-prompt,\n.lb-tiptap-ai-toolbar-custom-prompt-container::before {\n /* Overlap the textarea and its value to auto-size it */\n grid-area: 1 / 1 / 2 / 2;\n box-sizing: inherit;\n inline-size: 100%;\n min-inline-size: 0;\n padding: calc(\n var(--lb-tiptap-ai-toolbar-padding) + ($lb-button-size - 1lh) / 2\n )\n var(--lb-tiptap-ai-toolbar-padding);\n font: inherit;\n letter-spacing: inherit;\n white-space: pre-wrap;\n}\n\n.lb-tiptap-ai-toolbar-error {\n --lb-dynamic-background: var(--lb-background-destructive-subtle);\n\n position: relative;\n display: flex;\n gap: calc(0.5 * var(--lb-spacing));\n align-items: center;\n padding: var(--lb-tiptap-ai-toolbar-padding);\n background: var(--lb-dynamic-background);\n color: var(--lb-destructive);\n font-size: 0.875em;\n text-wrap: balance;\n\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n border-block-start: 1px solid var(--lb-destructive-moderate);\n opacity: 0.35;\n pointer-events: none;\n }\n\n :where(.lb-icon-container) {\n color: var(--lb-destructive-secondary);\n }\n}\n\n.lb-tiptap-ai-toolbar-halo {\n --lb-tiptap-ai-toolbar-halo-blur: 16px;\n --lb-tiptap-ai-toolbar-halo-outset: 8px;\n\n position: absolute;\n inset: calc(-1 * var(--lb-tiptap-ai-toolbar-halo-outset));\n z-index: -1;\n overflow: hidden;\n border-radius: calc(\n var(--lb-radius) + var(--lb-tiptap-ai-toolbar-halo-outset)\n );\n filter: blur(var(--lb-tiptap-ai-toolbar-halo-blur));\n pointer-events: none;\n transition-duration: 1s;\n transition-property: opacity;\n animation: lb-animation-ai-toolbar-halo-scale-in 1s\n cubic-bezier(0.165, 0.84, 0.44, 1) both;\n\n &:where(:not([data-active])) {\n opacity: 0.5;\n }\n}\n\n:is(\n .lb-tiptap-ai-toolbar-halo-horizontal,\n .lb-tiptap-ai-toolbar-halo-vertical\n) {\n position: absolute;\n inset: 0;\n\n &::before,\n &::after {\n content: \"\";\n position: absolute;\n inset: 0;\n opacity: 0.175;\n animation-timing-function: cubic-bezier(0.455, 0.03, 0.515, 0.955);\n animation-iteration-count: infinite;\n }\n}\n\n.lb-tiptap-ai-toolbar-halo-horizontal {\n &::before {\n inline-size: 200%;\n block-size: 100%;\n background: linear-gradient(\n 30deg,\n transparent 20%,\n var(--lb-accent) 50%,\n transparent 80%\n );\n background-position: top left;\n background-size: 50% 100%;\n animation-name: lb-animation-ai-toolbar-halo-horizontal;\n animation-duration: 8s;\n animation-direction: alternate;\n }\n\n &::after {\n inset-inline-start: -50%;\n inline-size: 400%;\n block-size: 100%;\n background: linear-gradient(\n 90deg,\n transparent 20%,\n var(--lb-accent) 50%,\n transparent 80%\n );\n background-position: top left;\n background-size: 75% 100%;\n animation-name: lb-animation-ai-toolbar-halo-horizontal;\n animation-duration: 6s;\n animation-delay: -2s;\n animation-direction: alternate-reverse;\n }\n}\n\n.lb-tiptap-ai-toolbar-halo-vertical {\n &::before {\n inset-block-start: -50%;\n inline-size: 100%;\n block-size: 400%;\n background: linear-gradient(\n 1deg,\n transparent 40%,\n var(--lb-accent) 50%,\n transparent 60%\n );\n background-position: top left;\n background-size: 100% 600px;\n background-repeat: round;\n animation-name: lb-animation-ai-toolbar-halo-vertical;\n animation-duration: 4s;\n animation-delay: -2s;\n animation-direction: alternate-reverse;\n }\n\n &::after {\n inset-block-start: -50%;\n inline-size: 100%;\n block-size: 400%;\n background: linear-gradient(\n -2deg,\n transparent 40%,\n var(--lb-accent) 50%,\n transparent 60%\n );\n background-position: top left;\n background-size: 100% 400px;\n background-repeat: round;\n animation-name: lb-animation-ai-toolbar-halo-vertical;\n animation-duration: 3s;\n animation-delay: -1s;\n animation-direction: alternate;\n }\n}\n\n.lb-tiptap-ai-toolbar-thinking {\n @include truncate;\n\n align-self: center;\n min-inline-size: 0;\n max-inline-size: fit-content;\n padding-inline: var(--lb-tiptap-ai-toolbar-padding);\n color: var(--lb-foreground-tertiary);\n user-select: none;\n animation: lb-animation-shimmer-text 5s linear infinite;\n}\n\n.lb-tiptap-ai-toolbar-dropdown {\n inline-size: min(250px, 100%);\n pointer-events: auto;\n}\n\n/*************************************\n * Diff Changes *\n *************************************/\n\n.lb-tiptap-change-removed {\n color: color-mix(in srgb, currentcolor 40%, transparent);\n text-decoration: line-through;\n text-decoration-thickness: 1px;\n}\n\n.lb-tiptap-change-added {\n background: color-mix(\n in srgb,\n var(--lb-accent) calc(var(--lb-accent-contrast) * 1.5),\n transparent\n );\n color: var(--lb-accent);\n}\n\n/*************************************\n * Collaboration cursors *\n *************************************/\n\n/* Give a remote user a caret */\n.collaboration-carets__caret,\n.collaboration-cursor__caret {\n position: relative;\n margin-inline-start: -1px;\n margin-inline-end: -1px;\n border-inline-start: 1px solid #0d0d0d;\n border-inline-end: 1px solid #0d0d0d;\n word-break: normal;\n pointer-events: none;\n}\n\n/* Render the username above the caret */\n.collaboration-carets__label,\n.collaboration-cursor__label {\n position: absolute;\n inset-inline-start: -1px;\n inset-block-start: -1.4em;\n padding: 2px 6px;\n border-radius: 6px;\n border-end-start-radius: 0;\n color: #fff;\n font-weight: 600;\n font-style: normal;\n font-size: 14px;\n line-height: normal;\n white-space: nowrap;\n pointer-events: none;\n user-select: none;\n}\n\n/*************************************\n * Animations *\n *************************************/\n\n@keyframes lb-animation-ai-toolbar-halo-scale-in {\n from {\n transform: scale(0.5);\n }\n\n to {\n transform: scale(1);\n }\n}\n\n@keyframes lb-animation-ai-toolbar-halo-horizontal {\n from {\n transform: translateX(-50%);\n }\n\n to {\n transform: translateX(0);\n }\n}\n\n@keyframes lb-animation-ai-toolbar-halo-vertical {\n from {\n transform: translateY(0);\n }\n\n to {\n transform: translateY(-50%);\n }\n}\n","@mixin invisible-selection {\n &::selection,\n *::selection {\n background: transparent;\n }\n}\n\n@mixin invisible-scrollbar {\n & {\n -ms-overflow-style: none;\n scrollbar-width: none;\n }\n\n &::-webkit-scrollbar {\n display: none;\n }\n}\n\n@mixin truncate {\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n"]}
@@ -1,267 +0,0 @@
1
- 'use strict';
2
-
3
- var core = require('@tiptap/core');
4
- var state = require('@tiptap/pm/state');
5
- var view = require('@tiptap/pm/view');
6
- var plugin = require('./plugin.cjs');
7
-
8
- const PRESENCE_KEY = "liveblocksTiptap";
9
- const LIVEBLOCKS_CARET_PLUGIN_KEY = new state.PluginKey("liveblocks-collaboration-caret");
10
- function isCursorPresence(value) {
11
- return typeof value === "object" && value !== null && typeof value.field === "string" && typeof value.anchor === "number" && typeof value.head === "number";
12
- }
13
- function getCursorUser(value) {
14
- if (typeof value !== "object" || value === null) {
15
- return void 0;
16
- }
17
- const user = value;
18
- const name = typeof user.name === "string" ? user.name : void 0;
19
- const color = typeof user.color === "string" ? user.color : void 0;
20
- return name !== void 0 || color !== void 0 ? { name, color } : void 0;
21
- }
22
- function presencePatch(presence) {
23
- const user = getCursorUser(presence.user);
24
- return {
25
- [PRESENCE_KEY]: {
26
- field: presence.field,
27
- anchor: presence.anchor,
28
- head: presence.head,
29
- ...user !== void 0 ? { user } : {}
30
- }
31
- };
32
- }
33
- function createCursorElement(user) {
34
- const color = user?.color ?? "#0f83ff";
35
- const name = user?.name ?? "Anonymous";
36
- const cursor = document.createElement("span");
37
- cursor.classList.add("collaboration-carets__caret");
38
- cursor.setAttribute("style", `border-color: ${color}`);
39
- const label = document.createElement("div");
40
- label.classList.add("collaboration-carets__label");
41
- label.setAttribute("style", `background-color: ${color}`);
42
- label.insertBefore(document.createTextNode(name), null);
43
- cursor.insertBefore(label, null);
44
- return cursor;
45
- }
46
- function clampPosition(position, doc) {
47
- return Math.max(0, Math.min(position, doc.content.size));
48
- }
49
- function normalizeCaretPosition(position, doc) {
50
- const clampedPosition = clampPosition(position, doc);
51
- const $position = doc.resolve(clampedPosition);
52
- if ($position.parent.isTextblock) {
53
- return clampedPosition;
54
- }
55
- return state.Selection.near($position, -1).anchor;
56
- }
57
- function getRemoteCursors(room, field, previousCursors = []) {
58
- const cursors = [];
59
- for (const other of room.getOthers()) {
60
- const rawPresence = other.presence[PRESENCE_KEY];
61
- if (!isCursorPresence(rawPresence) || rawPresence.field !== field) {
62
- continue;
63
- }
64
- const user = getCursorUser(rawPresence.user) ?? getCursorUser(other.info);
65
- const previousCursor = previousCursors.find(
66
- (cursor) => cursor.connectionId === other.connectionId
67
- );
68
- const hasPresencePositionChanged = previousCursor === void 0 || previousCursor.rawAnchor !== rawPresence.anchor || previousCursor.rawHead !== rawPresence.head;
69
- cursors.push({
70
- anchor: hasPresencePositionChanged ? rawPresence.anchor : previousCursor.anchor,
71
- connectionId: other.connectionId,
72
- head: hasPresencePositionChanged ? rawPresence.head : previousCursor.head,
73
- rawAnchor: rawPresence.anchor,
74
- rawHead: rawPresence.head,
75
- user
76
- });
77
- }
78
- return cursors;
79
- }
80
- function buildDecorationsFromCursors(cursors, doc) {
81
- const decorations = [];
82
- for (const cursor of cursors) {
83
- const anchor = clampPosition(cursor.anchor, doc);
84
- const head = clampPosition(cursor.head, doc);
85
- const from = Math.min(anchor, head);
86
- const to = Math.max(anchor, head);
87
- const user = cursor.user;
88
- const color = user?.color ?? "#0f83ff";
89
- if (from !== to) {
90
- decorations.push(
91
- view.Decoration.inline(from, to, {
92
- class: "collaboration-carets__selection",
93
- style: `background-color: ${color}33`
94
- })
95
- );
96
- }
97
- decorations.push(
98
- view.Decoration.widget(
99
- normalizeCaretPosition(head, doc),
100
- () => createCursorElement(user),
101
- {
102
- key: `liveblocks-caret-${cursor.connectionId}`,
103
- side: -1
104
- }
105
- )
106
- );
107
- }
108
- return view.DecorationSet.create(doc, decorations);
109
- }
110
- function createLiveblocksCaretPlugin(options, storage) {
111
- const room = options.room;
112
- if (room === void 0) {
113
- throw new Error("[Liveblocks] The Liveblocks caret plugin requires a room.");
114
- }
115
- let view$1;
116
- let unsubscribe;
117
- const updatePresence = (nextView) => {
118
- const { anchor, head } = nextView.state.selection;
119
- room.updatePresence(
120
- presencePatch({
121
- field: options.field,
122
- anchor,
123
- head,
124
- user: options.user
125
- })
126
- );
127
- };
128
- const updateDecorations = () => {
129
- if (view$1 === void 0) {
130
- return;
131
- }
132
- storage.users = room.getOthers().map((other) => {
133
- const rawPresence = other.presence[PRESENCE_KEY];
134
- const cursorPresence = isCursorPresence(rawPresence) ? rawPresence : void 0;
135
- return {
136
- clientId: other.connectionId,
137
- ...getCursorUser(cursorPresence?.user) ?? getCursorUser(other.info)
138
- };
139
- });
140
- const previousCursors = LIVEBLOCKS_CARET_PLUGIN_KEY.getState(view$1.state)?.cursors ?? [];
141
- const cursors = getRemoteCursors(room, options.field, previousCursors);
142
- view$1.dispatch(
143
- view$1.state.tr.setMeta(LIVEBLOCKS_CARET_PLUGIN_KEY, {
144
- cursors
145
- })
146
- );
147
- };
148
- return new state.Plugin({
149
- key: LIVEBLOCKS_CARET_PLUGIN_KEY,
150
- state: {
151
- init(_, state) {
152
- return {
153
- cursors: [],
154
- decorations: view.DecorationSet.create(state.doc, [])
155
- };
156
- },
157
- apply(tr, state) {
158
- const meta = tr.getMeta(LIVEBLOCKS_CARET_PLUGIN_KEY);
159
- if (meta !== void 0) {
160
- return {
161
- cursors: meta.cursors,
162
- decorations: buildDecorationsFromCursors(meta.cursors, tr.doc)
163
- };
164
- }
165
- if (!tr.docChanged) {
166
- return state;
167
- }
168
- if (!tr.getMeta(plugin.LIVEBLOCKS_COLLABORATION_PLUGIN_KEY)) {
169
- const cursors = state.cursors.map((cursor) => ({
170
- ...cursor,
171
- anchor: tr.mapping.map(cursor.anchor, -1),
172
- head: tr.mapping.map(cursor.head, -1)
173
- }));
174
- return {
175
- cursors,
176
- decorations: buildDecorationsFromCursors(cursors, tr.doc)
177
- };
178
- }
179
- return {
180
- cursors: state.cursors,
181
- decorations: buildDecorationsFromCursors(state.cursors, tr.doc)
182
- };
183
- }
184
- },
185
- props: {
186
- decorations(state) {
187
- return LIVEBLOCKS_CARET_PLUGIN_KEY.getState(state)?.decorations ?? view.DecorationSet.empty;
188
- }
189
- },
190
- view(editorView) {
191
- view$1 = editorView;
192
- updatePresence(editorView);
193
- updateDecorations();
194
- unsubscribe = room.events.others.subscribe(updateDecorations);
195
- return {
196
- update(nextView, prevState) {
197
- view$1 = nextView;
198
- if (!nextView.state.selection.eq(prevState.selection)) {
199
- updatePresence(nextView);
200
- }
201
- },
202
- destroy() {
203
- unsubscribe?.();
204
- unsubscribe = void 0;
205
- view$1 = void 0;
206
- room.updatePresence({ [PRESENCE_KEY]: null });
207
- }
208
- };
209
- }
210
- });
211
- }
212
- const LiveblocksCollaborationCaret = core.Extension.create({
213
- name: "collaborationCaret",
214
- priority: 999,
215
- addOptions() {
216
- return {
217
- room: void 0,
218
- field: "default",
219
- user: {
220
- name: void 0,
221
- color: void 0
222
- }
223
- };
224
- },
225
- addStorage() {
226
- return {
227
- users: []
228
- };
229
- },
230
- addCommands() {
231
- return {
232
- updateUser: (attributes) => ({ editor }) => {
233
- const nextUser = getCursorUser({
234
- ...this.options.user,
235
- name: typeof attributes.name === "string" ? attributes.name : this.options.user.name,
236
- color: typeof attributes.color === "string" ? attributes.color : this.options.user.color
237
- }) ?? {};
238
- if (nextUser.name === this.options.user.name && nextUser.color === this.options.user.color) {
239
- return true;
240
- }
241
- this.options.user = nextUser;
242
- if (this.options.room !== void 0) {
243
- const { anchor, head } = editor.state.selection;
244
- this.options.room.updatePresence(
245
- presencePatch({
246
- field: this.options.field,
247
- anchor,
248
- head,
249
- user: this.options.user
250
- })
251
- );
252
- }
253
- return true;
254
- },
255
- user: (attributes) => ({ editor }) => {
256
- return editor.commands.updateUser(attributes);
257
- }
258
- };
259
- },
260
- addProseMirrorPlugins() {
261
- return [createLiveblocksCaretPlugin(this.options, this.storage)];
262
- }
263
- });
264
-
265
- exports.LIVEBLOCKS_CARET_PLUGIN_KEY = LIVEBLOCKS_CARET_PLUGIN_KEY;
266
- exports.LiveblocksCollaborationCaret = LiveblocksCollaborationCaret;
267
- //# sourceMappingURL=cursors.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"cursors.cjs","sources":["../../src/collaboration-liveblocks/cursors.ts"],"sourcesContent":["import type { JsonObject } from \"@liveblocks/client\";\nimport { Extension } from \"@tiptap/core\";\nimport type { Node as ProseMirrorNode } from \"@tiptap/pm/model\";\nimport { Plugin, PluginKey, Selection } from \"@tiptap/pm/state\";\nimport type { EditorView } from \"@tiptap/pm/view\";\nimport { Decoration, DecorationSet } from \"@tiptap/pm/view\";\n\nimport { LIVEBLOCKS_COLLABORATION_PLUGIN_KEY } from \"./plugin\";\nimport type { LiveblocksTiptapRoom } from \"./types\";\n\nconst PRESENCE_KEY = \"liveblocksTiptap\";\n\ntype CursorUser = {\n name?: string;\n color?: string;\n};\n\ntype CursorPresence = {\n field: string;\n anchor: number;\n head: number;\n user?: CursorUser;\n};\n\ntype CollaborationCaretStorage = {\n users: { clientId: number; [key: string]: unknown }[];\n};\n\ntype RemoteCursor = {\n anchor: number;\n connectionId: number;\n head: number;\n rawAnchor: number;\n rawHead: number;\n user?: CursorUser;\n};\n\ntype CollaborationCaretPluginState = {\n cursors: RemoteCursor[];\n decorations: DecorationSet;\n};\n\ntype CollaborationCaretOptions = {\n room?: LiveblocksTiptapRoom;\n field: string;\n user: CursorUser;\n};\n\nexport const LIVEBLOCKS_CARET_PLUGIN_KEY =\n new PluginKey<CollaborationCaretPluginState>(\"liveblocks-collaboration-caret\");\n\nfunction isCursorPresence(value: unknown): value is CursorPresence {\n return (\n typeof value === \"object\" &&\n value !== null &&\n typeof (value as { field?: unknown }).field === \"string\" &&\n typeof (value as { anchor?: unknown }).anchor === \"number\" &&\n typeof (value as { head?: unknown }).head === \"number\"\n );\n}\n\nfunction getCursorUser(value: unknown): CursorUser | undefined {\n if (typeof value !== \"object\" || value === null) {\n return undefined;\n }\n\n const user = value as { name?: unknown; color?: unknown };\n const name = typeof user.name === \"string\" ? user.name : undefined;\n const color = typeof user.color === \"string\" ? user.color : undefined;\n\n return name !== undefined || color !== undefined ? { name, color } : undefined;\n}\n\nfunction presencePatch(presence: CursorPresence): JsonObject {\n const user = getCursorUser(presence.user);\n\n return {\n [PRESENCE_KEY]: {\n field: presence.field,\n anchor: presence.anchor,\n head: presence.head,\n ...(user !== undefined ? { user } : {}),\n },\n };\n}\n\nfunction createCursorElement(user: CursorUser | undefined): HTMLElement {\n const color = user?.color ?? \"#0f83ff\";\n const name = user?.name ?? \"Anonymous\";\n const cursor = document.createElement(\"span\");\n\n cursor.classList.add(\"collaboration-carets__caret\");\n cursor.setAttribute(\"style\", `border-color: ${color}`);\n\n const label = document.createElement(\"div\");\n label.classList.add(\"collaboration-carets__label\");\n label.setAttribute(\"style\", `background-color: ${color}`);\n label.insertBefore(document.createTextNode(name), null);\n cursor.insertBefore(label, null);\n\n return cursor;\n}\n\nfunction clampPosition(position: number, doc: ProseMirrorNode): number {\n return Math.max(0, Math.min(position, doc.content.size));\n}\n\nfunction normalizeCaretPosition(position: number, doc: ProseMirrorNode): number {\n const clampedPosition = clampPosition(position, doc);\n const $position = doc.resolve(clampedPosition);\n\n if ($position.parent.isTextblock) {\n return clampedPosition;\n }\n\n return Selection.near($position, -1).anchor;\n}\n\nfunction getRemoteCursors(\n room: LiveblocksTiptapRoom,\n field: string,\n previousCursors: readonly RemoteCursor[] = []\n): RemoteCursor[] {\n const cursors: RemoteCursor[] = [];\n\n for (const other of room.getOthers()) {\n const rawPresence: unknown = other.presence[PRESENCE_KEY];\n if (!isCursorPresence(rawPresence) || rawPresence.field !== field) {\n continue;\n }\n\n const user = getCursorUser(rawPresence.user) ?? getCursorUser(other.info);\n const previousCursor = previousCursors.find(\n (cursor) => cursor.connectionId === other.connectionId\n );\n const hasPresencePositionChanged =\n previousCursor === undefined ||\n previousCursor.rawAnchor !== rawPresence.anchor ||\n previousCursor.rawHead !== rawPresence.head;\n\n cursors.push({\n anchor: hasPresencePositionChanged\n ? rawPresence.anchor\n : previousCursor.anchor,\n connectionId: other.connectionId,\n head: hasPresencePositionChanged ? rawPresence.head : previousCursor.head,\n rawAnchor: rawPresence.anchor,\n rawHead: rawPresence.head,\n user,\n });\n }\n\n return cursors;\n}\n\nfunction buildDecorationsFromCursors(\n cursors: readonly RemoteCursor[],\n doc: ProseMirrorNode\n): DecorationSet {\n const decorations: Decoration[] = [];\n\n for (const cursor of cursors) {\n const anchor = clampPosition(cursor.anchor, doc);\n const head = clampPosition(cursor.head, doc);\n const from = Math.min(anchor, head);\n const to = Math.max(anchor, head);\n const user = cursor.user;\n const color = user?.color ?? \"#0f83ff\";\n\n if (from !== to) {\n decorations.push(\n Decoration.inline(from, to, {\n class: \"collaboration-carets__selection\",\n style: `background-color: ${color}33`,\n })\n );\n }\n\n decorations.push(\n Decoration.widget(\n normalizeCaretPosition(head, doc),\n () => createCursorElement(user),\n {\n key: `liveblocks-caret-${cursor.connectionId}`,\n side: -1,\n }\n )\n );\n }\n\n return DecorationSet.create(doc, decorations);\n}\n\nfunction createLiveblocksCaretPlugin(\n options: CollaborationCaretOptions,\n storage: CollaborationCaretStorage\n): Plugin {\n const room = options.room;\n if (room === undefined) {\n throw new Error(\"[Liveblocks] The Liveblocks caret plugin requires a room.\");\n }\n\n let view: EditorView | undefined;\n let unsubscribe: (() => void) | undefined;\n\n const updatePresence = (nextView: EditorView) => {\n const { anchor, head } = nextView.state.selection;\n room.updatePresence(\n presencePatch({\n field: options.field,\n anchor,\n head,\n user: options.user,\n })\n );\n };\n\n const updateDecorations = () => {\n if (view === undefined) {\n return;\n }\n\n storage.users = room.getOthers().map((other) => {\n const rawPresence: unknown = other.presence[PRESENCE_KEY];\n const cursorPresence = isCursorPresence(rawPresence)\n ? rawPresence\n : undefined;\n\n return {\n clientId: other.connectionId,\n ...(getCursorUser(cursorPresence?.user) ?? getCursorUser(other.info)),\n };\n });\n\n const previousCursors =\n LIVEBLOCKS_CARET_PLUGIN_KEY.getState(view.state)?.cursors ?? [];\n const cursors = getRemoteCursors(room, options.field, previousCursors);\n\n view.dispatch(\n view.state.tr.setMeta(LIVEBLOCKS_CARET_PLUGIN_KEY, {\n cursors,\n })\n );\n };\n\n return new Plugin({\n key: LIVEBLOCKS_CARET_PLUGIN_KEY,\n state: {\n init(_, state): CollaborationCaretPluginState {\n return {\n cursors: [],\n decorations: DecorationSet.create(state.doc, []),\n };\n },\n apply(tr, state): CollaborationCaretPluginState {\n const meta = tr.getMeta(LIVEBLOCKS_CARET_PLUGIN_KEY) as\n | { cursors: RemoteCursor[] }\n | undefined;\n\n if (meta !== undefined) {\n return {\n cursors: meta.cursors,\n decorations: buildDecorationsFromCursors(meta.cursors, tr.doc),\n };\n }\n\n if (!tr.docChanged) {\n return state;\n }\n\n if (!tr.getMeta(LIVEBLOCKS_COLLABORATION_PLUGIN_KEY)) {\n const cursors = state.cursors.map((cursor) => ({\n ...cursor,\n anchor: tr.mapping.map(cursor.anchor, -1),\n head: tr.mapping.map(cursor.head, -1),\n }));\n\n return {\n cursors,\n decorations: buildDecorationsFromCursors(cursors, tr.doc),\n };\n }\n\n // Remote presence can arrive before the matching remote document\n // update. Keep the stored cursor positions and rebuild them against\n // the new document so pre-arrived presence is no longer clamped to the\n // old document size.\n return {\n cursors: state.cursors,\n decorations: buildDecorationsFromCursors(state.cursors, tr.doc),\n };\n },\n },\n props: {\n decorations(state) {\n return (\n LIVEBLOCKS_CARET_PLUGIN_KEY.getState(state)?.decorations ??\n DecorationSet.empty\n );\n },\n },\n view(editorView) {\n view = editorView;\n updatePresence(editorView);\n updateDecorations();\n unsubscribe = room.events.others.subscribe(updateDecorations);\n\n return {\n update(nextView, prevState) {\n view = nextView;\n\n if (!nextView.state.selection.eq(prevState.selection)) {\n updatePresence(nextView);\n }\n\n },\n destroy() {\n unsubscribe?.();\n unsubscribe = undefined;\n view = undefined;\n room.updatePresence({ [PRESENCE_KEY]: null });\n },\n };\n },\n });\n}\n\ndeclare module \"@tiptap/core\" {\n interface Commands<ReturnType> {\n collaborationCaret: {\n updateUser: (attributes: Record<string, any>) => ReturnType;\n user: (attributes: Record<string, any>) => ReturnType;\n };\n }\n}\n\nexport const LiveblocksCollaborationCaret = Extension.create<\n CollaborationCaretOptions,\n CollaborationCaretStorage\n>({\n name: \"collaborationCaret\",\n priority: 999,\n\n addOptions() {\n return {\n room: undefined,\n field: \"default\",\n user: {\n name: undefined,\n color: undefined,\n },\n };\n },\n\n addStorage() {\n return {\n users: [],\n };\n },\n\n addCommands() {\n return {\n updateUser:\n (attributes) =>\n ({ editor }) => {\n const nextUser = getCursorUser({\n ...this.options.user,\n name:\n typeof attributes.name === \"string\"\n ? attributes.name\n : this.options.user.name,\n color:\n typeof attributes.color === \"string\"\n ? attributes.color\n : this.options.user.color,\n }) ?? {};\n\n if (\n nextUser.name === this.options.user.name &&\n nextUser.color === this.options.user.color\n ) {\n return true;\n }\n\n this.options.user = nextUser;\n\n if (this.options.room !== undefined) {\n const { anchor, head } = editor.state.selection;\n this.options.room.updatePresence(\n presencePatch({\n field: this.options.field,\n anchor,\n head,\n user: this.options.user,\n })\n );\n }\n return true;\n },\n user:\n (attributes) =>\n ({ editor }) => {\n return editor.commands.updateUser(attributes);\n },\n };\n },\n\n addProseMirrorPlugins() {\n return [createLiveblocksCaretPlugin(this.options, this.storage)];\n },\n});\n"],"names":["PluginKey","Selection","Decoration","DecorationSet","view","Plugin","LIVEBLOCKS_COLLABORATION_PLUGIN_KEY","Extension"],"mappings":"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"}