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 (
+
+ );
+}
+
+export function OcFontWeightIcon({
+ className = "",
+ size = 32,
+}: {
+ className?: string;
+ size?: number;
+}) {
+ return (
+
+ );
+}
+
+export function OcSlidersVerticalIcon({
+ className = "",
+ size = 32,
+}: {
+ className?: string;
+ size?: number;
+}) {
+ return (
+
+ );
+}
+
+export function OcSocialIcon({
+ className = "",
+ size = 32,
+}: {
+ className?: string;
+ size?: number;
+}) {
+ return (
+
+ );
+}
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