aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/client/documents/Documents.ts301
-rw-r--r--src/client/util/CurrentUserUtils.ts3
-rw-r--r--src/client/views/LightboxView.tsx2
-rw-r--r--src/client/views/collections/TabDocView.tsx3
-rw-r--r--src/client/views/collections/TreeView.tsx2
5 files changed, 77 insertions, 234 deletions
diff --git a/src/client/documents/Documents.ts b/src/client/documents/Documents.ts
index b5b179d3a..de08040e2 100644
--- a/src/client/documents/Documents.ts
+++ b/src/client/documents/Documents.ts
@@ -25,6 +25,7 @@ import { DirectoryImportBox } from "../util/Import & Export/DirectoryImportBox";
import { LinkManager } from "../util/LinkManager";
import { Scripting } from "../util/Scripting";
import { undoBatch, UndoManager } from "../util/UndoManager";
+import { DimUnit } from "../views/collections/collectionMulticolumn/CollectionMulticolumnView";
import { CollectionDockingView } from "../views/collections/CollectionDockingView";
import { CollectionView, CollectionViewType } from "../views/collections/CollectionView";
import { ContextMenu } from "../views/ContextMenu";
@@ -59,205 +60,56 @@ import { DocumentType } from "./DocumentTypes";
const path = require('path');
const defaultNativeImageDim = Number(DFLT_IMAGE_NATIVE_DIM.replace("px", ""));
-interface dinfo {
- description: string;
- type: string;
- dflt?: any;
+class EmptyBox {
+ public static LayoutString() {
+ return "";
+ }
}
-export interface DocumentOptions {
- system?: boolean | dinfo;
- _autoHeight?: boolean | dinfo;
- _headerHeight?: number | dinfo; // height of header of custom notes
- _headerFontSize?: number | dinfo; // font size of header of custom notes
- _headerPointerEvents?: string | dinfo; // types of events the header of a custom text document can consume
- _panX?: number | dinfo;
- _panY?: number | dinfo;
- _width?: number | dinfo;
- _height?: number | dinfo;
- _nativeWidth?: number | dinfo;
- _nativeHeight?: number | dinfo;
- _dimMagnitude?: number | dinfo; // magnitude of collectionMulti{row,col} view element
- _dimUnit?: string | dinfo; // "px" or "*" (default = "*")
- _fitWidth?: boolean | dinfo;
- _fitToBox?: boolean; // whether a freeformview should zoom/scale to create a shrinkwrapped view of its contents
- _freeformLOD?: boolean; // whether to use LOD to render a freeform document
- _showTitle?: string; // field name to display in header (:hover is an optional suffix)
- _showCaption?: string; // which field to display in the caption area. leave empty to have no caption
- _scrollTop?: number; // scroll location for pdfs
- _noAutoscroll?: boolean;// whether collections autoscroll when this item is dragged
- _chromeStatus?: string;
- _searchDoc?: boolean; // is this a search document (used to change UI for search results in schema view)
- _viewType?: string; // sub type of a collection
- _gridGap?: number; // gap between items in masonry view
- _xMargin?: number; // gap between left edge of document and start of masonry/stacking layouts
- _yMargin?: number; // gap between top edge of dcoument and start of masonry/stacking layouts
- _xPadding?: number;
- _yPadding?: number;
- _itemIndex?: number; // which item index the carousel viewer is showing
- _showSidebar?: boolean; //whether an annotationsidebar should be displayed for text docuemnts
- _singleLine?: boolean; // whether text document is restricted to a single line (carriage returns make new document)
- "_carousel-caption-xMargin"?: number;
- "_carousel-caption-yMargin"?: number;
- x?: number;
- y?: number;
- z?: number;
- author?: string;
- _hideContextMenu?: boolean; // whether the context menu can be shown
- dropAction?: dropActionType;
- childDropAction?: dropActionType;
- targetDropAction?: dropActionType;
- layoutKey?: string;
+abstract class FInfo {
+ description: string = "";
type?: string;
- title?: string;
- version?: string; // version identifier for a document
- label?: string;
- hidden?: boolean;
- userDoc?: Doc; // the userDocument
- toolTip?: string; // tooltip to display on hover
- style?: string;
- page?: number;
- dontUndo?: boolean; // whether button clicks should be undoable (this is set to true for Undo/Redo/and sidebar buttons that open the siebar panel)
- description?: string; // added for links
- _viewScale?: number;
- _overflow?: string;
- forceActive?: boolean;
- layout?: string | Doc; // default layout string for a document
- contentPointerEvents?: string; // pointer events allowed for content of a document view. eg. set to "none" in menuSidebar for sharedDocs so that you can select a document, but not interact with its contents
- childLimitHeight?: number; // whether to limit the height of colleciton children. 0 - means height can be no bigger than width
- childLayoutTemplate?: Doc; // template for collection to use to render its children (see PresBox or Buxton layout in tree view)
- childLayoutString?: string; // template string for collection to use to render its children
- hideLinkButton?: boolean; // whether the blue link counter button should be hidden
- hideAllLinks?: boolean; // whether all individual blue anchor dots should be hidden
- _columnsHideIfEmpty?: boolean; // whether stacking view column headings should be hidden
- isTemplateForField?: string; // the field key for which the containing document is a rendering template
- isTemplateDoc?: boolean;
- watchedDocuments?: Doc; // list of documents to "watch" in an icon doc to display a badge
- targetScriptKey?: string; // where to write a template script (used by collections with click templates which need to target onClick, onDoubleClick, etc)
- templates?: List<string>;
- hero?: ImageField; // primary image that best represents a compound document (e.g., for a buxton device document that has multiple images)
- backgroundColor?: string | ScriptField; // background color for data doc
- _backgroundColor?: string | ScriptField; // background color for each template layout doc ( overrides backgroundColor )
- color?: string; // foreground color data doc
- _color?: string; // foreground color for each template layout doc (overrides color)
- _clipWidth?: number; // percent transition from before to after in comparisonBox
- caption?: RichTextField;
- ignoreClick?: boolean;
- lockedPosition?: boolean; // lock the x,y coordinates of the document so that it can't be dragged
- _lockedTransform?: boolean; // lock the panx,pany and scale parameters of the document so that it be panned/zoomed
- isAnnotating?: boolean; // whether we web document is annotation mode where links can't be clicked to allow annotations to be created
- opacity?: number;
- defaultBackgroundColor?: string;
- _layers?: List<string>;
- _raiseWhenDragged?: boolean; // whether a document is brought to front when dragged.
- isLinkButton?: boolean;
- isFolder?: boolean;
- _columnWidth?: number;
- _fontSize?: string;
- _fontWeight?: number;
- _fontFamily?: string;
- _curPage?: number;
- _currentTimecode?: number; // the current timecode of a time-based document (e.g., current time of a video) value is in seconds
- _currentFrame?: number; // the current frame of a frame-based collection (e.g., progressive slide)
- _timecodeToShow?: number; // the time that a document should be displayed (e.g., when an annotation shows up as a video plays)
- _timecodeToHide?: number; // the time that a document should be hidden
- _timelineLabel?: boolean; // whether the document exists on a timeline
- lastFrame?: number; // the last frame of a frame-based collection (e.g., progressive slide)
- activeFrame?: number; // the active frame of a document in a frame base collection
- appearFrame?: number; // the frame in which the document appears
- presTransition?: number; //the time taken for the transition TO a document
- presDuration?: number; //the duration of the slide in presentation view
- presProgressivize?: boolean;
- borderRounding?: string;
- boxShadow?: string;
- dontRegisterChildViews?: boolean;
- dontRegisterView?: boolean;
- lookupField?: ScriptField; // script that returns the value of a field. This script is passed the rootDoc, layoutDoc, field, and container of the document. see PresBox.
- "onDoubleClick-rawScript"?: string; // onDoubleClick script in raw text form
- "onChildDoubleClick-rawScript"?: string; // onChildDoubleClick script in raw text form
- "onChildClick-rawScript"?: string; // on ChildClick script in raw text form
- "onClick-rawScript"?: string; // onClick script in raw text form
- "onCheckedClick-rawScript"?: string; // onChecked script in raw text form
- "onCheckedClick-params"?: List<string>; // parameter list for onChecked treeview functions
- _pivotField?: string; // field key used to determine headings for sections in stacking, masonry, pivot views
- _columnHeaders?: List<SchemaHeaderField>; // headers for stacking views
- _schemaHeaders?: List<SchemaHeaderField>; // headers for schema view
- dockingConfig?: string;
- annotationOn?: Doc;
- isPushpin?: boolean;
- removeDropProperties?: List<string>; // list of properties that should be removed from a document when it is dropped. e.g., a creator button may be forceActive to allow it be dragged, but the forceActive property can be removed from the dropped document
- dbDoc?: Doc;
- iconShape?: string; // shapes of the fonticon border
- linkRelationship?: string; // type of relatinoship a link represents
- ischecked?: ScriptField; // returns whether a font icon box is checked
- activeInkPen?: Doc; // which pen document is currently active (used as the radio button state for the 'unhecked' pen tool scripts)
- onClick?: ScriptField;
- onDoubleClick?: ScriptField;
- onChildClick?: ScriptField; // script given to children of a collection to execute when they are clicked
- onChildDoubleClick?: ScriptField; // script given to children of a collection to execute when they are double clicked
- onPointerDown?: ScriptField;
- onPointerUp?: ScriptField;
- dropConverter?: ScriptField; // script to run when documents are dropped on this Document.
- dragFactory?: Doc; // document to create when dragging with a suitable onDragStart script
- clickFactory?: Doc; // document to create when clicking on a button with a suitable onClick script
- onDragStart?: ScriptField; //script to execute at start of drag operation -- e.g., when a "creator" button is dragged this script generates a different document to drop
- clipboard?: Doc;
- useCors?: boolean;
- icon?: string;
- target?: Doc; // available for use in scripts as the primary target document
- sourcePanel?: Doc; // panel to display in 'targetContainer' as the result of a button onClick script
- targetContainer?: Doc; // document whose proto will be set to 'panel' as the result of a onClick click script
- searchFileTypes?: List<string>; // file types allowed in a search query
- strokeWidth?: number;
- cloneFieldFilter?: List<string>; // fields not to copy when the document is cloned
- _stayInCollection?: boolean;// whether the document should remain in its collection when someone tries to drag and drop it elsewhere
- freezeChildren?: string; // whether children are now allowed to be added and or removed from a collection
- treeViewPreventOpen?: boolean; // ignores the treeViewOpen Doc flag which allows a treeViewItem's expand/collapse state to be independent of other views of the same document in the tree view
- treeViewHideTitle?: boolean; // whether to hide the top document title of a tree view
- treeViewHideHeader?: boolean; // whether to hide the header for a document in a tree view
- treeViewHideHeaderFields?: boolean; // whether to hide the drop down options for tree view items.
- treeViewOpen?: boolean; // whether this document is expanded in a tree view
- treeViewExpandedView?: string; // which field/thing is displayed when this item is opened in tree view
- treeViewChecked?: ScriptField; // script to call when a tree view checkbox is checked
- treeViewTruncateTitleWidth?: number;
- treeViewType?: string; // whether treeview is a Slide, file system, or (default) collection hierarchy
- treeViewLockExpandedView?: boolean; // whether the expanded view can be changed
- treeViewDefaultExpandedView?: string; // default expanded view
- sidebarColor?: string; // background color of text sidebar
- sidebarViewType?: string; // collection type of text sidebar
- limitHeight?: number; // maximum height for newly created (eg, from pasting) text documents
- // [key: string]: Opt<Field>;
- pointerHack?: boolean; // for buttons, allows onClick handler to fire onPointerDown
- textTransform?: string; // is linear view expanded
- letterSpacing?: string; // is linear view expanded
- flexDirection?: "unset" | "row" | "column" | "row-reverse" | "column-reverse";
- selectedIndex?: number;
- syntaxColor?: string; // can be applied to text for syntax highlighting all matches in the text
- searchQuery?: string; // for quersyBox
- linearViewIsExpanded?: boolean; // is linear view expanded
- isLabel?: boolean; // whether the document is a label or not (video / audio)
- useLinkSmallAnchor?: boolean; // whether links to this document should use a miniature linkAnchorBox
- border?: string; //for searchbox
- _hovercolor?: string;
+ values?: Field[];
+ layoutField?: boolean; // is this field a layout (or datadoc) field
+ // format?: string; // format to display values (e.g, decimal places, $, etc)
+ // parse?: ScriptField; // parse a value from a string
+ constructor(d: string, l: boolean = false) { this.description = d; this.layoutField = l; }
}
-
-let _docOptions: DocumentOptions = {
- system: { type: "string", description: "is document created/owned by the system", dflt: false },
- _autoHeight: { type: "boolean", description: "whether document automatically resizes vertically to display contents", dflt: false },
- _headerHeight: { type: "number", description: "height of document header used for displaying title", dflt: 20 },
- _headerFontSize: { type: "number", description: "font size of header of custom notes", dflt: 12 },
- _headerPointerEvents: { type: "string", description: "types of events the header of a custom text document can consume" },
- _panX: { type: "number", description: "horizontal pan location of a freeform view" },
- _panY: { type: "number", description: "vertical pan location of a freeform view" },
- _width: { type: "number", description: "displayed width of a document" },
- _height: { type: "number", description: "displayed height of document" },
- _nativeWidth: { type: "number", description: "native width of document contents (e.g., the pixel width of an image)" },
- _nativeHeight: { type: "number", description: "native height of document contents (e.g., the pixel height of an image)" },
- _dimMagnitude: { type: "number", description: "magnitude of collectionMulti{row,col} element's width or height" },
- _dimUnit: { type: "string", description: "units of collectionMulti{row,col} element's width or height - 'px' or '*' for pixels or relative units" },
- _fitWidth: { type: "boolean", description: "whether document should scale its contents to fit its rendered width or not (e.g., for PDFviews)" }
-
-}
-/*_fitToBox?: boolean; // whether a freeformview should zoom/scale to create a shrinkwrapped view of its contents
+class BoolInfo extends FInfo { type?= "boolean"; values?: boolean[] = [true, false]; }
+class NumInfo extends FInfo { type?= "number"; values?: number[] = []; }
+class StrInfo extends FInfo { type?= "string"; values?: string[] = []; }
+class DocInfo extends FInfo { type?= "Doc"; values?: Doc[] = []; }
+class DimInfo extends FInfo { type?= "DimUnit"; values?= [DimUnit.Pixel, DimUnit.Ratio]; }
+class PEInfo extends FInfo { type?= "pointerEvents"; values?= ["all", "none"]; }
+class DAInfo extends FInfo { type?= "dropActionType"; values?= ["alias", "copy", "move", "same", "proto", "none"]; }
+type BOOLt = BoolInfo | boolean;
+type NUMt = NumInfo | number;
+type STRt = StrInfo | string;
+type DOCt = DocInfo | Doc;
+type DIMt = DimInfo | typeof DimUnit.Pixel | typeof DimUnit.Ratio;
+type PEVt = PEInfo | "none" | "all";
+type DROPt = DAInfo | dropActionType;
+export class DocumentOptions {
+ system?: BOOLt = new BoolInfo("is this a system created/owned doc");
+ userDoc?: DOCt = new DocInfo("the user doc");
+ dropAction?: DROPt = new DAInfo("what should happen to the source document when it's dropped onto this doc ");
+ childDropAction?: DROPt = new DAInfo("what should happen to the source document when it's dropped onto a child of a collection ");
+ targetDropAction?: DROPt = new DAInfo("what should happen to the source document when ??? ");
+ backgroundColor?: STRt = new StrInfo("background color for data doc");
+ _backgroundColor?: STRt = new StrInfo("background color for each template layout doc (overrides backgroundColor)", true);
+ _autoHeight?: BOOLt = new BoolInfo("whether document automatically resizes vertically to display contents", true);
+ _headerHeight?: NUMt = new NumInfo("height of document header used for displaying title", true);
+ _headerFontSize?: NUMt = new NumInfo("font size of header of custom notes", true);
+ _headerPointerEvents?: PEVt = new PEInfo("types of events the header of a custom text document can consume", true);
+ _panX?: NUMt = new NumInfo("horizontal pan location of a freeform view", true);
+ _panY?: NUMt = new NumInfo("vertical pan location of a freeform view", true);
+ _width?: NUMt = new NumInfo("displayed width of a document", true);
+ _height?: NUMt = new NumInfo("displayed height of document", true);
+ _nativeWidth?: NUMt = new NumInfo("native width of document contents (e.g., the pixel width of an image)", true);
+ _nativeHeight?: NUMt = new NumInfo("native height of document contents (e.g., the pixel height of an image)", true);
+ _dimMagnitude?: NUMt = new NumInfo("magnitude of collectionMulti{row,col} element's width or height", true);
+ _dimUnit?: DIMt = new DimInfo("units of collectionMulti{row,col} element's width or height - 'px' or '*' for pixels or relative units", true);
+ _fitWidth?: BOOLt = new BoolInfo("whether document should scale its contents to fit its rendered width or not (e.g., for PDFviews)", true);
+ _fitToBox?: boolean; // whether a freeformview should zoom/scale to create a shrinkwrapped view of its contents
_freeformLOD?: boolean; // whether to use LOD to render a freeform document
_showTitle?: string; // field name to display in header (:hover is an optional suffix)
_showCaption?: string; // which field to display in the caption area. leave empty to have no caption
@@ -281,16 +133,12 @@ let _docOptions: DocumentOptions = {
z?: number;
author?: string;
_hideContextMenu?: boolean; // whether the context menu can be shown
- dropAction?: dropActionType;
- childDropAction?: dropActionType;
- targetDropAction?: dropActionType;
layoutKey?: string;
type?: string;
title?: string;
version?: string; // version identifier for a document
label?: string;
hidden?: boolean;
- userDoc?: Doc; // the userDocument
toolTip?: string; // tooltip to display on hover
style?: string;
page?: number;
@@ -313,8 +161,6 @@ let _docOptions: DocumentOptions = {
targetScriptKey?: string; // where to write a template script (used by collections with click templates which need to target onClick, onDoubleClick, etc)
templates?: List<string>;
hero?: ImageField; // primary image that best represents a compound document (e.g., for a buxton device document that has multiple images)
- backgroundColor?: string | ScriptField; // background color for data doc
- _backgroundColor?: string | ScriptField; // background color for each template layout doc ( overrides backgroundColor )
color?: string; // foreground color data doc
_color?: string; // foreground color for each template layout doc (overrides color)
_clipWidth?: number; // percent transition from before to after in comparisonBox
@@ -416,37 +262,34 @@ let _docOptions: DocumentOptions = {
useLinkSmallAnchor?: boolean; // whether links to this document should use a miniature linkAnchorBox
border?: string; //for searchbox
_hovercolor?: string;
-}*/
-
-class EmptyBox {
- public static LayoutString() {
- return "";
- }
}
-
export namespace Docs {
- export let FieldInfos: Doc | undefined;
+ const _docOptions = new DocumentOptions();
+
export async function setupFieldInfos() {
- const fieldDocs = await DocServer.GetRefField("FieldInfos");
- if (fieldDocs instanceof Doc) {
- Docs.FieldInfos = fieldDocs;
- } else {
+ return await DocServer.GetRefField("FieldInfos7") as Doc ??
runInAction(() => {
- const infos = Docs.FieldInfos = new Doc("FieldInfos", true);
- const keys = Object.keys(_docOptions);
- for (let i = 0; i < keys.length; i++) {
- const key = keys[i];
- const options = (_docOptions as any)[key] as dinfo;
+ const infos = new Doc("FieldInfos7", true);
+ const keys = Object.keys(new DocumentOptions());
+ for (const key of keys) {
+ const options = (_docOptions as any)[key] as FInfo;
const finfo = new Doc();
finfo.name = key;
- finfo.default = options.dflt;
+ switch (options.type) {
+ case "boolean": finfo.options = new List<boolean>(options.values as any as boolean[]); break;
+ case "number": finfo.options = new List<number>(options.values as any as number[]); break;
+ case "Doc": finfo.options = new List<Doc>(options.values as any as Doc[]); break;
+ default: // string, pointerEvents, dimUnit, dropActionType
+ finfo.options = new List<string>(options.values as any as string[]); break;
+ }
+ finfo.layoutField = options.layoutField;
finfo.description = options.description;
finfo.type = options.type;
infos[key] = finfo;
}
+ return infos;
});
- }
}
export let newAccount: boolean = false;
@@ -682,7 +525,7 @@ export namespace Docs {
// whatever options pertain to this specific prototype
const options = { title, type, baseProto: true, ...defaultOptions, ...(template.options || {}) };
options.layout = layout.view?.LayoutString(layout.dataField);
- const doc = Doc.assign(new Doc(prototypeId, true), { system: true, layoutKey: "layout", ...options });
+ const doc = Doc.assign(new Doc(prototypeId, true), { system: true, layoutKey: "layout", ...options } as any);
doc.data = template.data;
doc.layout_keyValue = KeyValueBox.LayoutString("");
return doc;
@@ -847,7 +690,7 @@ export namespace Docs {
if (value !== undefined) {
deleg[fieldKey] = value;
}
- return Doc.assign(deleg, options);
+ return Doc.assign(deleg, options as any);
}
export function ImageDocument(url: string, options: DocumentOptions = {}) {
@@ -964,8 +807,8 @@ export namespace Docs {
I.x = options.x;
I.y = options.y;
I._backgroundColor = "transparent";
- I._width = options._width;
- I._height = options._height;
+ I._width = options._width as number;
+ I._height = options._height as number;
I._fontFamily = "cursive";
I.author = Doc.CurrentUserEmail;
I.rotation = 0;
@@ -1337,7 +1180,7 @@ export namespace DocUtils {
if (type.indexOf("video") !== -1) {
ctor = Docs.Create.VideoDocument;
if (!options._width) options._width = 600;
- if (!options._height) options._height = options._width * 2 / 3;
+ if (!options._height) options._height = (options._width as number) * 2 / 3;
}
if (type.indexOf("audio") !== -1) {
ctor = Docs.Create.AudioDocument;
@@ -1345,7 +1188,7 @@ export namespace DocUtils {
if (type.indexOf("pdf") !== -1) {
ctor = Docs.Create.PdfDocument;
if (!options._width) options._width = 400;
- if (!options._height) options._height = options._width * 1200 / 927;
+ if (!options._height) options._height = (options._width as number) * 1200 / 927;
}
if (type.indexOf("html") !== -1) {
if (path.includes(window.location.hostname)) {
@@ -1356,8 +1199,8 @@ export namespace DocUtils {
const alias = Doc.MakeAlias(field);
alias.x = options.x || 0;
alias.y = options.y || 0;
- alias._width = options._width || 300;
- alias._height = options._height || options._width || 300;
+ alias._width = (options._width as number) || 300;
+ alias._height = (options._height as number) || (options._width as number) || 300;
return alias;
}
return undefined;
diff --git a/src/client/util/CurrentUserUtils.ts b/src/client/util/CurrentUserUtils.ts
index dcaf61fea..9a38c56e7 100644
--- a/src/client/util/CurrentUserUtils.ts
+++ b/src/client/util/CurrentUserUtils.ts
@@ -1050,7 +1050,7 @@ export class CurrentUserUtils {
// }
// });
setTimeout(() => DocServer.UPDATE_SERVER_CACHE(), 2500);
- doc.fieldInfos = Docs.FieldInfos;
+ doc.fieldInfos = await Docs.setupFieldInfos();
return doc;
}
@@ -1070,7 +1070,6 @@ export class CurrentUserUtils {
}
public static async loadUserDocument(id: string) {
- await Docs.setupFieldInfos();
this.curr_id = id;
await rp.get(Utils.prepend("/getUserDocumentIds")).then(ids => {
const { userDocumentId, sharingDocumentId, linkDatabaseId } = JSON.parse(ids);
diff --git a/src/client/views/LightboxView.tsx b/src/client/views/LightboxView.tsx
index e1fbea76e..15b98467c 100644
--- a/src/client/views/LightboxView.tsx
+++ b/src/client/views/LightboxView.tsx
@@ -276,6 +276,6 @@ export class LightboxTourBtn extends React.Component<LightboxTourBtnProps> {
this.props.stepInto();
},
StrCast(this.props.tourMap()?.lastElement()?.TourMap)
- )
+ );
}
} \ No newline at end of file
diff --git a/src/client/views/collections/TabDocView.tsx b/src/client/views/collections/TabDocView.tsx
index 3f8794665..68ca93f43 100644
--- a/src/client/views/collections/TabDocView.tsx
+++ b/src/client/views/collections/TabDocView.tsx
@@ -382,7 +382,8 @@ export class TabMinimapView extends React.Component<TabMinimapViewProps> {
}
}
@computed get renderBounds() {
- const bounds = this.props.tabView()?.ComponentView?.freeformData?.(true)?.bounds;
+ const compView = this.props.tabView()?.ComponentView as CollectionFreeFormView;
+ const bounds = compView?.freeformData?.(true)?.bounds;
if (!bounds) return undefined;
const xbounds = bounds.r - bounds.x;
const ybounds = bounds.b - bounds.y;
diff --git a/src/client/views/collections/TreeView.tsx b/src/client/views/collections/TreeView.tsx
index 513ef4015..6975c24d1 100644
--- a/src/client/views/collections/TreeView.tsx
+++ b/src/client/views/collections/TreeView.tsx
@@ -499,7 +499,7 @@ export class TreeView extends React.Component<TreeViewProps> {
[{ script: ScriptField.MakeFunction(`scriptContext.makeFolder()`, { scriptContext: "any" })!, label: "New Folder" }] : Doc.IsSystem(this.doc) ? [] :
this.fileSysMode && this.doc === Doc.GetProto(this.doc) ?
[{ script: ScriptField.MakeFunction(`openOnRight(getAlias(self))`)!, label: "Open Alias" }] :
- [{ script: ScriptField.MakeFunction(`DocFocusOrOpen(self)`)!, label: "Focus or Open" }];
+ [{ script: ScriptField.MakeFunction(`DocFocusOrOpen(self)`)!, label: "Focus or Open" }]
truncateTitleWidth = () => NumCast(this.props.treeView.props.Document.treeViewTruncateTitleWidth, this.props.panelWidth());
onChildClick = () => this.props.onChildClick?.() ?? (this._editTitleScript?.() || ScriptCast(this.doc.treeChildClick));
onChildDoubleClick = () => (!this.outlineMode && this._openScript?.()) || ScriptCast(this.doc.treeChildDoubleClick);