diff --git a/packages/panel/src/components/Panel.svelte b/packages/panel/src/components/Panel.svelte
index fb6c434e0a..0ab7be5271 100644
--- a/packages/panel/src/components/Panel.svelte
+++ b/packages/panel/src/components/Panel.svelte
@@ -52,9 +52,9 @@
export let isFullSize = false
export let embedded = false
export let contentClasses: string | undefined = undefined
+ export let content: HTMLElement | undefined = undefined
let lastHref: string
- let scroll: HTMLDivElement
let timer: any
let lastScrollHeight: number = -1
let count: number = 0
@@ -68,16 +68,16 @@
if (scroll == null) {
return
}
- if (lastScrollHeight <= scroll.scrollHeight && count <= waitCount) {
- count = lastScrollHeight < scroll.scrollHeight ? 0 : count + 1
- lastScrollHeight = scroll.scrollHeight
+ if (content !== undefined && lastScrollHeight <= content?.scrollHeight && count <= waitCount) {
+ count = lastScrollHeight < content.scrollHeight ? 0 : count + 1
+ lastScrollHeight = content.scrollHeight
startScrollHeightCheck()
- } else {
+ } else if (content !== undefined) {
lastScrollHeight = -1
count = 0
- scroll.scrollTop = $PanelScrollTop[window.location.href]
+ content.scrollTop = $PanelScrollTop[window.location.href]
$PanelScrollTop[window.location.href] = 0
lastHref = window.location.href
}
@@ -195,7 +195,7 @@
{#if $deviceInfo.isMobile}
-
+
{#if !withoutActivity}
{#key object._id}
@@ -208,7 +208,7 @@
{:else}
{
if (lastHref === window.location.href && event && event.detail !== $PanelScrollTop[lastHref]) {
$PanelScrollTop[lastHref] = event.detail
@@ -221,7 +221,13 @@
{#key object._id}
{/key}
{/if}
diff --git a/packages/text-editor/src/components/CollaboratorEditor.svelte b/packages/text-editor/src/components/CollaboratorEditor.svelte
index a7eeba5459..ed8bdb5078 100644
--- a/packages/text-editor/src/components/CollaboratorEditor.svelte
+++ b/packages/text-editor/src/components/CollaboratorEditor.svelte
@@ -61,6 +61,7 @@
export let textNodeActions: TextNodeAction[] = []
export let editorAttributes: { [name: string]: string } = {}
export let onExtensions: () => AnyExtension[] = () => []
+ export let boundary: HTMLElement | undefined = undefined
let element: HTMLElement
@@ -227,6 +228,21 @@
...defaultExtensions,
Placeholder.configure({ placeholder: placeHolderStr }),
InlineStyleToolbarExtension.configure({
+ tippyOptions: {
+ popperOptions: {
+ modifiers: [
+ {
+ name: 'preventOverflow',
+ options: {
+ boundary,
+ padding: 8,
+ altAxis: true,
+ tether: false
+ }
+ }
+ ]
+ }
+ },
element: inlineToolbar,
isSupported: () => !readonly,
isSelectionOnly: () => false
diff --git a/packages/text-editor/src/components/ReferenceInput.svelte b/packages/text-editor/src/components/ReferenceInput.svelte
index 04c60da67e..42ccd1773d 100644
--- a/packages/text-editor/src/components/ReferenceInput.svelte
+++ b/packages/text-editor/src/components/ReferenceInput.svelte
@@ -51,6 +51,7 @@
export let extraActions: RefAction[] | undefined = undefined
export let loading: boolean = false
export let focusable: boolean = false
+ export let boundary: HTMLElement | undefined = undefined
const client = getClient()
const dispatch = createEventDispatcher()
@@ -169,6 +170,7 @@
{
if (!isEmpty || haveAttachment) {
dispatch('message', ev.detail)
diff --git a/packages/text-editor/src/components/StyledTextBox.svelte b/packages/text-editor/src/components/StyledTextBox.svelte
index 5f1ab2ecfe..b256412050 100644
--- a/packages/text-editor/src/components/StyledTextBox.svelte
+++ b/packages/text-editor/src/components/StyledTextBox.svelte
@@ -45,6 +45,7 @@
export let enableBackReferences: boolean = false
export let enableEmojiReplace: boolean = true
export let isScrollable: boolean = true
+ export let boundary: HTMLElement | undefined = undefined
export let attachFile: FileAttachFunction | undefined = undefined
@@ -212,6 +213,7 @@
{autofocus}
{isScrollable}
{extensions}
+ {boundary}
bind:content={rawValue}
bind:this={textEditor}
on:attach
diff --git a/packages/text-editor/src/components/StyledTextEditor.svelte b/packages/text-editor/src/components/StyledTextEditor.svelte
index 596835776f..17ee28ba72 100644
--- a/packages/text-editor/src/components/StyledTextEditor.svelte
+++ b/packages/text-editor/src/components/StyledTextEditor.svelte
@@ -49,6 +49,7 @@
export let full = false
export let extensions: AnyExtension[] = []
export let editorAttributes: { [name: string]: string } = {}
+ export let boundary: HTMLElement | undefined = undefined
export let textFormatCategories: TextFormatCategory[] = [
TextFormatCategory.Heading,
TextFormatCategory.TextDecoration,
@@ -249,6 +250,7 @@
on:blur
on:focus
supportSubmit={false}
+ {boundary}
/>
{/if}
diff --git a/packages/text-editor/src/components/TextEditor.svelte b/packages/text-editor/src/components/TextEditor.svelte
index e8666b8110..c512a8baf9 100644
--- a/packages/text-editor/src/components/TextEditor.svelte
+++ b/packages/text-editor/src/components/TextEditor.svelte
@@ -37,6 +37,7 @@
export let textFormatCategories: TextFormatCategory[] = []
export let supportSubmit = true
export let editorAttributes: { [name: string]: string } = {}
+ export let boundary: HTMLElement | undefined = undefined
let element: HTMLElement
let editor: Editor
@@ -137,6 +138,21 @@
Placeholder.configure({ placeholder: placeHolderStr }),
...extensions,
InlineStyleToolbarExtension.configure({
+ tippyOptions: {
+ popperOptions: {
+ modifiers: [
+ {
+ name: 'preventOverflow',
+ options: {
+ boundary,
+ padding: 8,
+ altAxis: true,
+ tether: false
+ }
+ }
+ ]
+ }
+ },
element: textEditorToolbar,
isSupported: () => true,
isSelectionOnly: () => false
diff --git a/packages/ui/src/components/Separator.svelte b/packages/ui/src/components/Separator.svelte
index df1b9bffdc..d2135d6f3e 100644
--- a/packages/ui/src/components/Separator.svelte
+++ b/packages/ui/src/components/Separator.svelte
@@ -20,7 +20,8 @@
deviceOptionsStore as deviceInfo,
getSeparators,
saveSeparator,
- SeparatedElement
+ SeparatedElement,
+ separatorsStore
} from '..'
export let prevElementSize: SeparatedItem | undefined = undefined
@@ -28,6 +29,7 @@
export let separatorSize: number = 1
export let color: string = 'var(--theme-divider-color)'
export let name: string
+ export let disabledWhen: string[] = []
export let index: number // index = -1 ; for custom sizes without saving to a localStorage
const direction: 'horizontal' | 'vertical' = 'horizontal'
@@ -52,6 +54,7 @@
maxEnd: -1
}
let parentSize: { start: number; end: number; size: number } | null = null
+ let disabled: boolean = false
const fetchSeparators = (): void => {
separators = getSeparators(name)
@@ -384,9 +387,14 @@
mounted = true
}
document.addEventListener('resize', checkSizes)
+ if ($separatorsStore.filter((f) => f === name).length === 0) $separatorsStore = [...$separatorsStore, name]
+ disabled = $separatorsStore.filter((f) => disabledWhen.findIndex((d) => d === f) !== -1).length > 0
})
onDestroy(() => {
document.removeEventListener('resize', checkSizes)
+ if ($separatorsStore.filter((f) => f === name).length > 0) {
+ $separatorsStore = $separatorsStore.filter((f) => f !== name)
+ }
})
afterUpdate(() => {
if (mounted) checkSibling()
@@ -397,6 +405,7 @@
bind:this={separator}
style:--separator-size={`${separatorSize}px`}
style:background-color={color}
+ style:pointer-events={disabled ? 'none' : 'all'}
class="antiSeparator {direction}"
class:hovered={isSeparate}
data-size={separatorSize}
diff --git a/packages/ui/src/resize.ts b/packages/ui/src/resize.ts
index 76ff5ca5c9..f00e5f75b9 100644
--- a/packages/ui/src/resize.ts
+++ b/packages/ui/src/resize.ts
@@ -10,6 +10,7 @@
//
// See the License for the specific language governing permissions and
+import { writable } from 'svelte/store'
import { DelayedCaller } from './utils'
import type { SeparatedItem, DefSeparators } from './types'
@@ -123,3 +124,5 @@ export const timeSeparators: DefSeparators = [
{ minSize: 25, size: 35, maxSize: 45 },
null
]
+
+export const separatorsStore = writable