From 93d1e3383ce47e45157d70f9ba6251239dae6bc2 Mon Sep 17 00:00:00 2001 From: Maze <167211895+mazeincoding@users.noreply.github.com> Date: Mon, 23 Feb 2026 03:24:02 +0100 Subject: feat: major editor overhaul (assets, properties, timeline, fonts) (#709) * feat: major editor overhaul (assets, properties, timeline, fonts) Refactor editor core systems to standardize UI architecture and improve performance. Assets & Properties: - Replace monolithic property items with composable `Section` architecture. - Add specialized sections for Transform, Blending, and Text. - Implement `NumberField` with scrubbing and math evaluation. - Add new ColorPicker with EyeDropper and multiple format support. - Standardize asset panels using new `PanelView` layout. Fonts & Stickers: - Implement custom font atlas/sprite system for high-performance previews. - Add virtualized FontPicker with search and favorites. - Refactor stickers to use a provider-based architecture (icons, emoji, flags, shapes). - Standardize sticker IDs to `provider:value` format. Timeline & Interaction: - Convert bookmarks to rich objects with notes, colors, and duration. - Refactor drag-and-drop to use Command pattern (enabling proper undo/redo). - Add Shift modifier to disable snapping during moves/resizes. - Add new overlays for layout guides and text editing. Renderer: - Add support for multi-line text, custom line-height, and letter-spacing. - Implement global composite operation (blend modes). - Update sticker node to resolve dynamic provider IDs. Infrastructure: - Add storage migrations (v3->v6) for text weights, sticker IDs, and bookmarks. - Update global styles and core UI components (Button, Input, Popover). * add ts-nocheck directive to settings-legacy.tsx to suppress TypeScript errors * fix: correct global composite operation assignment in TextNode to ensure proper blend mode handling * deleted shadcn components with errors * formatting * fix linter issues * migrate from next middleware to proxy * add missing component back * add breadcrumb back * chore: add @radix-ui/react-primitive deps * chore: more deps * chore: add missing env vars to bun-ci * next env --- packages/ui/package.json | 34 ++++----- packages/ui/src/icons/ui.tsx | 173 +++++++++++++++++++++++++++++++++++++++++++ packages/ui/tsconfig.json | 36 ++++----- 3 files changed, 208 insertions(+), 35 deletions(-) (limited to 'packages/ui') diff --git a/packages/ui/package.json b/packages/ui/package.json index 81dbae68..7b39fb96 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,19 +1,19 @@ { - "name": "@opencut/ui", - "version": "0.0.0", - "description": "UI package for OpenCut", - "main": "./src/index.ts", - "types": "./src/index.ts", - "exports": { - "./icons": "./src/icons/index.tsx" - }, - "dependencies": { - "@iconify/react": "^6.0.2", - "@types/react": "^19.2.7", - "react": "^19.2.0" - }, - "devDependencies": { - "@types/bun": "latest", - "typescript": "^5.8.3" - } + "name": "@opencut/ui", + "version": "0.0.0", + "description": "UI package for OpenCut", + "main": "./src/index.ts", + "types": "./src/index.ts", + "exports": { + "./icons": "./src/icons/index.tsx" + }, + "dependencies": { + "@iconify/react": "^6.0.2", + "@types/react": "^19.2.7", + "react": "^19.2.0" + }, + "devDependencies": { + "@types/bun": "latest", + "typescript": "^5.8.3" + } } diff --git a/packages/ui/src/icons/ui.tsx b/packages/ui/src/icons/ui.tsx index 60231c33..382ec7bb 100644 --- a/packages/ui/src/icons/ui.tsx +++ b/packages/ui/src/icons/ui.tsx @@ -30,3 +30,176 @@ export function OcVideoIcon({ ); } + +export function OcCheckerboardIcon({ + className = "", + size = 32, +}: { + className?: string; + size?: number; +}) { + return ( + + Checkerboard + + + + + + + + + + + + + + + ); +} + +export function OcFontWeightIcon({ + className = "", + size = 32, +}: { + className?: string; + size?: number; +}) { + return ( + + Font Weight + + + + + ); +} + +export function OcSlidersVerticalIcon({ + className = "", + size = 32, +}: { + className?: string; + size?: number; +}) { + return ( + + Sliders Vertical + + + + + + ); +} + +export function OcSocialIcon({ + className = "", + size = 32, +}: { + className?: string; + size?: number; +}) { + return ( + + Social media + + + + + + + + + ); +} diff --git a/packages/ui/tsconfig.json b/packages/ui/tsconfig.json index d179b7d1..6b1c8bf9 100644 --- a/packages/ui/tsconfig.json +++ b/packages/ui/tsconfig.json @@ -1,20 +1,20 @@ { - "compilerOptions": { - "target": "ES2020", - "lib": ["ES2020", "DOM", "DOM.Iterable"], - "module": "ESNext", - "skipLibCheck": true, - "moduleResolution": "bundler", - "allowImportingTsExtensions": true, - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "strict": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "noFallthroughCasesInSwitch": true - }, - "include": ["src/**/*"], - "exclude": ["node_modules"] + "compilerOptions": { + "target": "ES2020", + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules"] } -- cgit v1.3.1