aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--eslint.config.mjs67
-rw-r--r--package-lock.json15
-rw-r--r--package.json10
-rw-r--r--src/client/util/Scripting.ts4
-rw-r--r--src/client/views/nodes/PDFBox.scss16
-rw-r--r--src/client/views/nodes/PDFBox.tsx37
-rw-r--r--src/client/views/smartdraw/AnnotationPalette.tsx14
-rw-r--r--src/client/views/smartdraw/SmartDrawHandler.tsx15
8 files changed, 59 insertions, 119 deletions
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 619966f20..12ad3300a 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -1,57 +1,14 @@
-import pluginJs from '@eslint/js';
-import pluginReactConfig from 'eslint-plugin-react/configs/recommended.js';
-import globals from 'globals';
-import tseslint from 'typescript-eslint';
+import globals from "globals";
+import pluginJs from "@eslint/js";
+import tseslint from "typescript-eslint";
+import pluginReact from "eslint-plugin-react";
-export default [
- {
- languageOptions: { globals: { ...globals.browser, ...globals.node } },
- },
- pluginJs.configs.recommended,
- ...tseslint.configs.recommended,
- {
- rules: {
- 'node/no-missing-import': 0,
- 'no-console': 'off',
- 'func-names': 'off',
- 'no-process-exit': 'off',
- 'object-shorthand': 'off',
- 'class-methods-use-this': 'off',
- 'single-quote': 'off',
- 'max-classes-per-file': 0,
-
- 'react/jsx-filename-extension': [
- 2,
- {
- extensions: ['.js', '.jsx', '.ts', '.tsx'],
- },
- ],
- 'import/prefer-default-export': 'off',
- 'no-unused-expressions': 'off',
- '@typescript-eslint/no-unused-expressions': 'off',
- 'prefer-template': 'off',
- 'no-inner-declarations': 'off',
- 'no-plusplus': 'off',
- 'no-multi-assign': 'off',
- 'no-underscore-dangle': 'off',
- 'no-nested-ternary': 'off',
- 'lines-between-class-members': 'off',
- 'no-shadow': 'off',
- '@typescript-eslint/no-shadow': 'warn',
- 'no-unused-vars': 'off',
- '@typescript-eslint/no-unused-vars': 'error',
- '@typescript-eslint/no-namespace': 'off',
- 'react/destructuring-assignment': 0,
- 'prefer-arrow-callback': 'error',
- 'no-return-assign': 'error',
- 'no-await-in-loop': 'error',
- 'no-loop-func': 'error',
- 'no-cond-assign': 'error',
- 'no-use-before-define': 'error',
- 'no-explicit-any': 'error',
- 'no-restricted-globals': ['error', 'event'],
- },
- },
- pluginReactConfig,
-];
+export default [
+ {files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"]},
+ {files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}},
+ {languageOptions: { globals: globals.browser }},
+ pluginJs.configs.recommended,
+ ...tseslint.configs.recommended,
+ pluginReact.configs.flat.recommended,
+]; \ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 81f5976d6..c4d69bbcf 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -249,7 +249,7 @@
"xregexp": "^5.1.1"
},
"devDependencies": {
- "@eslint/js": "^9.1.1",
+ "@eslint/js": "^9.9.1",
"@types/adm-zip": "^0.5.5",
"@types/animejs": "^3.1.12",
"@types/archiver": "^6.0.2",
@@ -298,9 +298,9 @@
"@types/youtube": "^0.1.0",
"chai": "^5.0.0",
"cross-env": "^7.0.3",
- "eslint": "^9.9.0",
- "eslint-plugin-react": "^7.34.1",
- "globals": "^15.1.0",
+ "eslint": "^9.9.1",
+ "eslint-plugin-react": "^7.35.0",
+ "globals": "^15.9.0",
"jsdom": "^25.0.0",
"mocha": "^10.2.0",
"prettier": "^3.1.0",
@@ -309,7 +309,7 @@
"ts-loader": "^9.5.1",
"ts-node": "^10.9.1",
"ts-node-dev": "^2.0.0",
- "typescript-eslint": "^8.2.0",
+ "typescript-eslint": "^8.3.0",
"webpack-dev-server": "^5.0.4"
},
"engines": {
@@ -2681,6 +2681,7 @@
"version": "9.9.1",
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.9.1.tgz",
"integrity": "sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==",
+ "license": "MIT",
"engines": {
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
}
@@ -17478,6 +17479,7 @@
"version": "9.9.1",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.9.1.tgz",
"integrity": "sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==",
+ "license": "MIT",
"dependencies": {
"@eslint-community/eslint-utils": "^4.2.0",
"@eslint-community/regexpp": "^4.11.0",
@@ -17537,6 +17539,7 @@
"resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.35.0.tgz",
"integrity": "sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"array-includes": "^3.1.8",
"array.prototype.findlast": "^1.2.5",
@@ -19332,6 +19335,7 @@
"resolved": "https://registry.npmjs.org/globals/-/globals-15.9.0.tgz",
"integrity": "sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=18"
},
@@ -32652,6 +32656,7 @@
"resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.3.0.tgz",
"integrity": "sha512-EvWjwWLwwKDIJuBjk2I6UkV8KEQcwZ0VM10nR1rIunRDIP67QJTZAHBXTX0HW/oI1H10YESF8yWie8fRQxjvFA==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/eslint-plugin": "8.3.0",
"@typescript-eslint/parser": "8.3.0",
diff --git a/package.json b/package.json
index 0b17d9b60..51e7cf8a9 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,7 @@
"tsc": "tsc -t es5"
},
"devDependencies": {
- "@eslint/js": "^9.1.1",
+ "@eslint/js": "^9.9.1",
"@types/adm-zip": "^0.5.5",
"@types/animejs": "^3.1.12",
"@types/archiver": "^6.0.2",
@@ -72,9 +72,9 @@
"@types/youtube": "^0.1.0",
"chai": "^5.0.0",
"cross-env": "^7.0.3",
- "eslint": "^9.9.0",
- "eslint-plugin-react": "^7.34.1",
- "globals": "^15.1.0",
+ "eslint": "^9.9.1",
+ "eslint-plugin-react": "^7.35.0",
+ "globals": "^15.9.0",
"jsdom": "^25.0.0",
"mocha": "^10.2.0",
"prettier": "^3.1.0",
@@ -83,7 +83,7 @@
"ts-loader": "^9.5.1",
"ts-node": "^10.9.1",
"ts-node-dev": "^2.0.0",
- "typescript-eslint": "^8.2.0",
+ "typescript-eslint": "^8.3.0",
"webpack-dev-server": "^5.0.4"
},
"dependencies": {
diff --git a/src/client/util/Scripting.ts b/src/client/util/Scripting.ts
index c63d3d7cb..cb314e3f1 100644
--- a/src/client/util/Scripting.ts
+++ b/src/client/util/Scripting.ts
@@ -1,7 +1,7 @@
// export const ts = (window as any).ts;
// import * as typescriptlib from '!!raw-loader!../../../node_modules/typescript/lib/lib.d.ts'
// import * as typescriptes5 from '!!raw-loader!../../../node_modules/typescript/lib/lib.es5.d.ts'
-import typescriptlib from 'type_decls.d';
+// import typescriptlib from 'type_decls.d';
import * as ts from 'typescript';
import { Doc, FieldType } from '../../fields/Doc';
import { RefField } from '../../fields/RefField';
@@ -248,7 +248,7 @@ export function CompileScript(script: string, options: ScriptOptions = {}): Comp
const funcScript = `(function(${paramString})${reqTypes} { ${body} })`;
host.writeFile('file.ts', funcScript);
- if (typecheck) host.writeFile('node_modules/typescript/lib/lib.d.ts', typescriptlib);
+ // if (typecheck) host.writeFile('node_modules/typescript/lib/lib.d.ts', typescriptlib);
const program = ts.createProgram(['file.ts'], {}, host);
const testResult = program.emit();
const outputText = host.readFile('file.js');
diff --git a/src/client/views/nodes/PDFBox.scss b/src/client/views/nodes/PDFBox.scss
index 6e24b2931..7bca1230f 100644
--- a/src/client/views/nodes/PDFBox.scss
+++ b/src/client/views/nodes/PDFBox.scss
@@ -20,27 +20,15 @@
top: 0;
left: 0;
- .pdfBox-sidebarBtn-container {
- display: flex;
- flex-direction: row;
- position: absolute;
- width: 53px;
- height: 33px;
- right: 5px;
- align-items: center;
- justify-content: space-between;
- z-index: 1;
- }
-
// glr: This should really be the same component as text and PDFs
.pdfBox-sidebarBtn {
background: $black;
height: 25px;
width: 25px;
- // right: 5px;
+ right: 5px;
color: $white;
display: flex;
- // position: absolute;
+ position: absolute;
align-items: center;
justify-content: center;
border-radius: 3px;
diff --git a/src/client/views/nodes/PDFBox.tsx b/src/client/views/nodes/PDFBox.tsx
index 08f14193a..b17275a1e 100644
--- a/src/client/views/nodes/PDFBox.tsx
+++ b/src/client/views/nodes/PDFBox.tsx
@@ -1,6 +1,4 @@
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
-import { IconButton } from 'browndash-components';
-import { black } from 'colors';
import { action, computed, IReactionDisposer, makeObservable, observable, reaction, runInAction } from 'mobx';
import { observer } from 'mobx-react';
import * as Pdfjs from 'pdfjs-dist';
@@ -505,30 +503,17 @@ export class PDFBox extends ViewBoxAnnotatableComponent<FieldViewProps>() {
}
@computed get sidebarHandle() {
return (
- <div className="pdfBox-sidebarBtn-container">
- <div
- className="pdfBox-sidebarBtn"
- key="sidebar"
- title="Toggle Sidebar"
- style={{
- display: !this._props.isContentActive() ? 'none' : undefined,
- top: StrCast(this.layoutDoc._layout_showTitle) === 'title' ? 20 : 5,
- backgroundColor: this.SidebarShown ? Colors.MEDIUM_BLUE : Colors.BLACK,
- }}>
- {/* // onPointerDown={e => this.sidebarBtnDown(e, true)} */}
- <IconButton tooltip="Toggle Annotation Palette" icon={<FontAwesomeIcon style={{ color: Colors.WHITE }} icon="palette" />} onPointerDown={e => this.sidebarBtnDown(e, true)} />
- </div>
- <div
- className="pdfBox-sidebarBtn"
- key="sidebar"
- title="Toggle Sidebar"
- style={{
- display: !this._props.isContentActive() ? 'none' : undefined,
- top: StrCast(this.layoutDoc._layout_showTitle) === 'title' ? 20 : 5,
- backgroundColor: this.SidebarShown ? Colors.MEDIUM_BLUE : Colors.BLACK,
- }}>
- <IconButton tooltip="Toggle Sidebar" icon={<FontAwesomeIcon style={{ color: Colors.WHITE }} icon="comment-alt" size="sm" />} onPointerDown={e => this.sidebarBtnDown(e, true)} />
- </div>
+ <div
+ className="pdfBox-sidebarBtn"
+ key="sidebar"
+ title="Toggle Sidebar"
+ style={{
+ display: !this._props.isContentActive() ? 'none' : undefined,
+ top: StrCast(this.layoutDoc._layout_showTitle) === 'title' ? 20 : 5,
+ backgroundColor: this.SidebarShown ? Colors.MEDIUM_BLUE : Colors.BLACK,
+ }}
+ onPointerDown={e => this.sidebarBtnDown(e, true)}>
+ <FontAwesomeIcon style={{ color: Colors.WHITE }} icon="comment-alt" size="sm" />
</div>
);
}
diff --git a/src/client/views/smartdraw/AnnotationPalette.tsx b/src/client/views/smartdraw/AnnotationPalette.tsx
index b57907152..c296138a8 100644
--- a/src/client/views/smartdraw/AnnotationPalette.tsx
+++ b/src/client/views/smartdraw/AnnotationPalette.tsx
@@ -1,4 +1,3 @@
-import { faLaptopHouse } from '@fortawesome/free-solid-svg-icons';
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import { Slider, Switch } from '@mui/material';
import { Button } from 'browndash-components';
@@ -16,9 +15,8 @@ import { Docs } from '../../documents/Documents';
import { makeUserTemplateImage } from '../../util/DropConverter';
import { SettingsManager } from '../../util/SettingsManager';
import { Transform } from '../../util/Transform';
-import { undoable, undoBatch } from '../../util/UndoManager';
-import { CollectionFreeFormView, MarqueeOptionsMenu, MarqueeView } from '../collections/collectionFreeForm';
-import { ActiveArrowEnd, ActiveArrowStart, ActiveDash, ActiveFillColor, ActiveInkBezierApprox, ActiveInkColor, ActiveIsInkMask, DocumentView, DocumentViewInternal } from '../nodes/DocumentView';
+import { undoBatch } from '../../util/UndoManager';
+import { DocumentView, DocumentViewInternal } from '../nodes/DocumentView';
import { FieldView } from '../nodes/FieldView';
import { ObservableReactComponent } from '../ObservableReactComponent';
import { DefaultStyleProvider } from '../StyleProvider';
@@ -26,7 +24,6 @@ import './AnnotationPalette.scss';
import { DrawingOptions, SmartDrawHandler } from './SmartDrawHandler';
import { DocumentType } from '../../documents/DocumentTypes';
import { ImageField } from '../../../fields/URLField';
-import { CollectionCarousel3DView } from '../collections/CollectionCarousel3DView';
import { Copy } from '../../../fields/FieldSymbols';
interface AnnotationPaletteProps {
@@ -45,7 +42,7 @@ export class AnnotationPalette extends ObservableReactComponent<AnnotationPalett
@observable private _opts: DrawingOptions = { text: '', complexity: 5, size: 200, autoColor: true, x: 0, y: 0 };
private _gptRes: string[] = [];
- constructor(props: any) {
+ constructor(props: AnnotationPaletteProps) {
super(props);
makeObservable(this);
}
@@ -140,7 +137,7 @@ export class AnnotationPalette extends ObservableReactComponent<AnnotationPalett
generateDrawings = action(async () => {
this._isLoading = true;
this._props.Document[DocData].data = undefined;
- for (var i = 0; i < 3; i++) {
+ for (let i = 0; i < 3; i++) {
try {
SmartDrawHandler.Instance.AddDrawing = this.addDrawing;
this._canInteract = false;
@@ -150,9 +147,10 @@ export class AnnotationPalette extends ObservableReactComponent<AnnotationPalett
await SmartDrawHandler.Instance.drawWithGPT({ X: 0, Y: 0 }, this._userInput, this._opts.complexity, this._opts.size, this._opts.autoColor);
}
} catch (e) {
- console.log('Error generating drawing');
+ console.log('Error generating drawing', e);
}
}
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
this._opts.text !== '' ? (this._opts.text = `${this._opts.text} ~~~ ${this._userInput}`) : (this._opts.text = this._userInput);
this._userInput = '';
this._isLoading = false;
diff --git a/src/client/views/smartdraw/SmartDrawHandler.tsx b/src/client/views/smartdraw/SmartDrawHandler.tsx
index 4ec787e07..368970f75 100644
--- a/src/client/views/smartdraw/SmartDrawHandler.tsx
+++ b/src/client/views/smartdraw/SmartDrawHandler.tsx
@@ -10,7 +10,7 @@ import { AiOutlineSend } from 'react-icons/ai';
import { gptAPICall, GPTCallType, gptDrawingColor } from '../../apis/gpt/GPT';
import { InkData, InkField, InkTool } from '../../../fields/InkField';
import { SVGToBezier } from '../../util/bezierFit';
-const { parse } = require('svgson');
+import { INode, parse } from 'svgson';
import { Slider, Switch } from '@mui/material';
import { Doc, DocListCast } from '../../../fields/Doc';
import { DocData } from '../../../fields/DocSymbols';
@@ -35,6 +35,7 @@ export interface DrawingOptions {
}
@observer
+// eslint-disable-next-line @typescript-eslint/no-empty-object-type
export class SmartDrawHandler extends ObservableReactComponent<{}> {
static Instance: SmartDrawHandler;
@@ -59,7 +60,7 @@ export class SmartDrawHandler extends ObservableReactComponent<{}> {
private _errorOccurredOnce = false;
public RemoveDrawing: (doc?: Doc) => void = unimplementedFunction;
- public CreateDrawingDoc: (strokeList: [InkData, string, string][], opts: DrawingOptions, gptRes: string, containerDoc?: Doc) => Doc | undefined = (strokeList: [InkData, string, string][], opts: DrawingOptions, gptRes: string) => {
+ public CreateDrawingDoc: (strokeList: [InkData, string, string][], opts: DrawingOptions, gptRes: string, containerDoc?: Doc) => Doc | undefined = (strokeList: [InkData, string, string][], opts: DrawingOptions) => {
const drawing: Doc[] = [];
strokeList.forEach((stroke: [InkData, string, string]) => {
const bounds = InkField.getBounds(stroke[0]);
@@ -89,6 +90,7 @@ export class SmartDrawHandler extends ObservableReactComponent<{}> {
};
public AddDrawing: (doc: Doc, opts: DrawingOptions, gptRes: string) => void = unimplementedFunction;
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
constructor(props: any) {
super(props);
makeObservable(this);
@@ -223,6 +225,7 @@ export class SmartDrawHandler extends ObservableReactComponent<{}> {
console.log(res);
const strokeData = await this.parseSvg(res, startPt, false, autoColor);
const drawingDoc = strokeData && this.CreateDrawingDoc(strokeData?.data, strokeData?.lastInput, strokeData?.lastRes);
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
drawingDoc && this.AddDrawing(drawingDoc, this._lastInput, res);
this._errorOccurredOnce = false;
@@ -253,8 +256,10 @@ export class SmartDrawHandler extends ObservableReactComponent<{}> {
}
console.log(res);
const strokeData = await this.parseSvg(res, { X: this._lastInput.x, Y: this._lastInput.y }, true, lastInput?.autoColor || this._autoColor);
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
this.RemoveDrawing !== unimplementedFunction && this.RemoveDrawing(this._selectedDoc);
const drawingDoc = strokeData && this.CreateDrawingDoc(strokeData?.data, strokeData?.lastInput, strokeData?.lastRes);
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
drawingDoc && this.AddDrawing(drawingDoc, this._lastInput, res);
return strokeData;
} catch (err) {
@@ -271,8 +276,9 @@ export class SmartDrawHandler extends ObservableReactComponent<{}> {
if (svg) {
this._lastResponse = svg[0];
const svgObject = await parse(svg[0]);
- const svgStrokes: any = svgObject.children;
+ const svgStrokes: INode[] = svgObject.children;
const strokeData: [InkData, string, string][] = [];
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
svgStrokes.forEach((child: any) => {
const convertedBezier: InkData = SVGToBezier(child.name, child.attributes);
strokeData.push([
@@ -318,7 +324,7 @@ export class SmartDrawHandler extends ObservableReactComponent<{}> {
console.log(colorResponse);
this.colorStrokes(colorResponse, drawing);
} catch (error) {
- console.log('GPT call failed');
+ console.log('GPT call failed', error);
}
};
@@ -335,6 +341,7 @@ export class SmartDrawHandler extends ObservableReactComponent<{}> {
strokes[index][DocData].color = strokeAndFill[0];
const inkStroke = DocumentView.getDocumentView(strokes[index])?.ComponentView as InkingStroke;
const { inkData } = inkStroke.inkScaledData();
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
InkingStroke.IsClosed(inkData) ? (strokes[index][DocData].fillColor = strokeAndFill[1]) : (strokes[index][DocData].fillColor = undefined);
}
});