Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
94 commits
Select commit Hold shift + click to select a range
c5a09f5
feat: symbiote v2 update
nd0ut Nov 5, 2025
6195486
chore: fix symbiote state type warnings
nd0ut Nov 5, 2025
d60cc6b
fix: use `inert` instead of `aria-hidden` to supress focus catch
nd0ut Nov 5, 2025
73a910a
feat(lit): add core Lit infrastructure and compatibility mixins
nd0ut Dec 4, 2025
4c43cac
feat(lit): add LitBlock, LitActivityBlock, and LitUploaderBlock base …
nd0ut Dec 4, 2025
b474aa9
chore: remove deprecated Block.ts and old processors
nd0ut Dec 4, 2025
0d8c5f8
refactor(blocks): migrate core uploader blocks to Lit
nd0ut Dec 4, 2025
70d09b7
refactor(cloud-image-editor): migrate editor components to Lit
nd0ut Dec 4, 2025
2b527b5
refactor(cloud-image-editor): migrate CloudImageEditorActivity to Lit
nd0ut Dec 4, 2025
3570693
refactor(solutions): migrate file uploader solutions to Lit
nd0ut Dec 4, 2025
caecbc9
refactor(img): rewrite uc-img components to TypeScript
nd0ut Dec 4, 2025
f978017
chore(locales): convert locale files from JS to TS
nd0ut Dec 4, 2025
f54efa9
refactor(abstract): update managers and utilities for Lit compatibility
nd0ut Dec 4, 2025
f5e95ce
refactor: update exports and imports for Lit migration
nd0ut Dec 4, 2025
5611261
chore: update dependencies and build config for Lit
nd0ut Dec 4, 2025
c6360cc
test: update test files for Lit migration
nd0ut Dec 4, 2025
7d67db6
chore(demo): update demo files for Lit migration
nd0ut Dec 4, 2025
5c3680a
chore: fix missed dep while rebasing
nd0ut Dec 2, 2025
021ae0a
chore: remove lit bundle
nd0ut Dec 3, 2025
e197425
chore(modal): expose dialog ref to ancestors
nd0ut Dec 3, 2025
0f9b486
chore: fix text binding
nd0ut Dec 3, 2025
f2934de
chore: fix symbiote layer unsubscribes
nd0ut Dec 3, 2025
4bdc014
chore: remove focus-visible polyfill
nd0ut Dec 3, 2025
b999992
chore: fix file-item render pause on re-render
nd0ut Dec 3, 2025
054bfa7
chore: fix ai-found memory leaks
nd0ut Dec 3, 2025
0416e02
chore: fix camera shot not freezing issue
nd0ut Dec 3, 2025
0d4f248
chore: remove unused waitForAttribute method
nd0ut Dec 3, 2025
8f3c816
chore(demo): replace real public key with demopublickey
nd0ut Dec 4, 2025
5b0a13e
chore: apply linting fixes and remove unused imports
nd0ut Dec 4, 2025
5e9a197
chore(demo): reorganize demo pages and add bundle demos
nd0ut Dec 4, 2025
08e3c4d
chore: reorganize exports in index.ts and update version
nd0ut Dec 5, 2025
0003461
chore: update tsconfig.node.json types
nd0ut Dec 5, 2025
7751173
fix: use unsafeSVG instead of unsafeHTML for SVG sprite
nd0ut Dec 5, 2025
4820e31
chore: add linked legal comments and include txt files in package
nd0ut Dec 5, 2025
12f7fa5
chore: enable minification for dist build
nd0ut Dec 5, 2025
af8c36e
chore: add NODE_ENV=production for Lit production mode and bundle lit…
nd0ut Dec 5, 2025
9d8e093
chore: use esbuild-minify-templates for HTML template minification
nd0ut Dec 5, 2025
9e46bfa
fix: remove non-existent jsx.ts entry from build items
nd0ut Dec 5, 2025
2156635
chore: update biome config and fix test
nd0ut Dec 5, 2025
908a716
chore: upgrade biome to 2.3.8
nd0ut Dec 5, 2025
c3c8e38
chore(biome): enable useConsistentMemberAccessibility rule
nd0ut Dec 5, 2025
dcdce78
refactor: enforce TS access modifiers
nd0ut Dec 6, 2025
51eb12b
chore: reorganize root exports
nd0ut Dec 6, 2025
a1dc1f2
refactor: prefix private members with underscore
nd0ut Dec 6, 2025
29850c4
fix(css): use CSS variable for progress bar opacity control
nd0ut Dec 6, 2025
e0575d3
refactor: replace @symbiotejs/symbiote with nanostores-based PubSub
nd0ut Dec 6, 2025
0535c68
refactor(types): cover shared state types
nd0ut Dec 6, 2025
ecd910e
fix(symbiote-compat): create state on initialize
nd0ut Dec 7, 2025
7d0094b
refactor(symbiote-compat): use listenKeys from nanostore to subscribe…
nd0ut Dec 7, 2025
95f1af5
chore: enable props mangling to reduce bundle size
nd0ut Dec 7, 2025
d1c9433
chore: rebuild lockfile
nd0ut Dec 7, 2025
8c660a8
style: refresh locales demo and inline uploader styles
nd0ut Dec 7, 2025
4519777
style: apply lint fixes
nd0ut Dec 7, 2025
a81068e
test: fix types test
nd0ut Dec 7, 2025
8f3d742
chore: normalize package exports API to be compatible with the origin…
nd0ut Dec 7, 2025
f52e0a2
chore: fix biome warnings
nd0ut Dec 7, 2025
9616d1f
chore: refactor jsx types
nd0ut Dec 7, 2025
6fe1278
chore: fix npm tests
nd0ut Dec 7, 2025
06da2a0
refactor: make centralized handling of shared context instances
nd0ut Dec 7, 2025
fc66679
Update config playground selects and inline preview sizing
nd0ut Dec 7, 2025
6f7ad64
fix: check for elemnt is being connected to the DOM inside async func…
nd0ut Dec 8, 2025
cd4065e
chore: fix vitest configuration
nd0ut Dec 8, 2025
23f8720
refactor(PubSub): move contexts to static field
nd0ut Dec 8, 2025
afe582e
build: reduce license in the bundles + add version and build time
nd0ut Dec 8, 2025
632465e
refactor: remove unused method
nd0ut Dec 8, 2025
6bc0dce
types: fix uc-img jsx types
nd0ut Dec 8, 2025
adb5c7e
fix: adjust aspect ratio icon rendering
nd0ut Dec 8, 2025
13c8ad5
fix: check if blocks registry still empty before destroy ctx
nd0ut Dec 8, 2025
286cc7a
refactor: uploadTrigger usage
nd0ut Dec 8, 2025
9457a2b
fix(cloud-image-editor): network problems splash + image loading loop
nd0ut Dec 10, 2025
10a1abd
chore: reactive quality-insights
nd0ut Dec 12, 2025
62d4d95
refactor: shared state minor improvements
nd0ut Dec 12, 2025
2554808
chore(config-playground): store state in URL
nd0ut Dec 12, 2025
b07e65e
fix(minimal/grid): filenames rendering layout
nd0ut Dec 12, 2025
2d75e94
fix(minimal/grid): progress bar styles
nd0ut Dec 12, 2025
875a643
chore: expose protected API for the dashboard integration
nd0ut Dec 12, 2025
a03a904
chore: fix comment
nd0ut Dec 12, 2025
3c420ba
fix: context destroy logic mistake
nd0ut Dec 12, 2025
495cf50
fix: fallback to fake uid if native crypto uuid is not supported
nd0ut Dec 12, 2025
11c0a6b
fix: few ai review fixes
nd0ut Dec 12, 2025
21cc76d
chore: add coderabbit config
nd0ut Dec 12, 2025
019271c
refactor(cloud-image-editor-activity): refactor config sync
nd0ut Dec 12, 2025
0c1a33e
refactor: remove intersection observer support checks
nd0ut Dec 12, 2025
020d9e0
fix(cloud-image-editor): generate unique id for backgrop mask
nd0ut Dec 12, 2025
224d0b4
refactor(slider): remove unused event
nd0ut Dec 12, 2025
6d390a0
refactor(btn-ui): remove unused prop
nd0ut Dec 12, 2025
80638fd
chore: fix message text spacing
nd0ut Dec 12, 2025
ab7fc93
fix(TypedCollection): fix memory leak when removing items from the co…
nd0ut Dec 12, 2025
c9d11fa
chore: add error message for removed api
nd0ut Dec 15, 2025
28a56bf
chore: apply lint
nd0ut Dec 15, 2025
d473f8e
chore: fix imports
nd0ut Dec 15, 2025
a0f9c53
chore: do not mangle package bundle
nd0ut Dec 16, 2025
136fd90
fix(cloud-image-editor): fix filter previews lazy loading
nd0ut Dec 16, 2025
8771062
fix(cloud-image-editor): fix unnecessary image requests
nd0ut Dec 16, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions .coderabbit.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# yaml-language-server: $schema=https://www.coderabbit.ai/integrations/schema.v2.json

reviews:
# Exclude demo pages from CodeRabbit reviews.
# Patterns are glob-style; entries starting with '!' are ignored.
path_filters:
- "!demo/"
- "!demo/**"
1 change: 1 addition & 0 deletions .stylelintignore
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
web
node_modules
dist
**/__coverage__/
49 changes: 43 additions & 6 deletions biome.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
{
"$schema": "https://biomejs.dev/schemas/2.2.5/schema.json",
"$schema": "https://biomejs.dev/schemas/2.3.8/schema.json",
"vcs": {
"enabled": true,
"clientKind": "git",
Expand All @@ -19,13 +19,24 @@
"recommended": true,
"suspicious": {
"noDuplicateProperties": "off",
"noExplicitAny": "warn"
"noExplicitAny": "info",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Consider the type safety implications of downgrading noExplicitAny.

The severity of noExplicitAny has been downgraded from "warn" to "info". While this may reduce noise during the Lit Element migration, it weakens type safety by making explicit any usage less visible. Consider whether this is a temporary measure or if there's a plan to address explicit any types after the migration.

🤖 Prompt for AI Agents
In biome.json around line 22, the rule "noExplicitAny" was downgraded from
"warn" to "info", which reduces visibility of explicit any usage; either revert
the setting back to "warn" to maintain type-safety, or if the downgrade is
intended as temporary, document that intent (add a comment and link to a tracked
issue/epic) and add a compensating measure such as a targeted override that
keeps "warn" for critical paths or a CI check that prevents new explicit any
occurrences until the migration is complete.

"noFocusedTests": "error"
},
"complexity": {
"noThisInStatic": "off"
},
"style": {
"noInferrableTypes": "error"
"noInferrableTypes": "error",
"useConsistentMemberAccessibility": {
"level": "error",
"options": {
"accessibility": "explicit"
}
}
},
"correctness": {
"noUnusedVariables": "error",
"noUnusedImports": "error"
}
}
},
Expand All @@ -38,8 +49,8 @@
"enabled": true,
"actions": {
"source": {
"organizeImports": "on",
"recommended": true
"recommended": true,
"organizeImports": "on"
}
}
},
Expand All @@ -54,6 +65,32 @@
}
}
}
},
{
"includes": ["**/*.test.*", "**/*.spec.*", "**/*.e2e.test.*"],
"linter": {
"rules": {
"style": {
"noNonNullAssertion": "off"
}
}
}
},
{
"includes": ["demo/**/*.html"],
"linter": {
"rules": {
"style": {
"useConsistentMemberAccessibility": "off"
}
}
}
}
],
"html": {
"experimentalFullSupportEnabled": true,
"formatter": {
"enabled": true
}
]
}
}
41 changes: 41 additions & 0 deletions demo/bundles/cloud-image-editor.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cloud Image Editor - Bundle Demo</title>
<link rel="stylesheet" href="../../web/uc-cloud-image-editor.min.css">
<style>
.uc-cloud-image-editor {
width: 100vw;
height: 100vh;
}
body {
height: 100vh;
margin: 0;
}
</style>
<script type="module">
import * as UC from '../../web/uc-cloud-image-editor.min.js';

UC.defineComponents(UC);
</script>
</head>
<body>
<uc-config
ctx-name="my-editor"
pubkey="demopublickey"
debug
quality-insights="false"
test-mode
cdn-cname="https://ucarecdn.com/"
></uc-config>
<uc-cloud-image-editor
uuid="f4dc9ebc-ed6d-4b4d-83d1-863bf1e4bb7f"
ctx-name="my-editor"
tabs="tuning,filters,crop"
crop-preset="1:1, 16:9, 4:3, 4:3, 3:4, 9:16"
class="uc-light"
></uc-cloud-image-editor>
</body>
</html>
27 changes: 27 additions & 0 deletions demo/bundles/iife.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>File Uploader - IIFE Bundle Demo</title>
<link rel="stylesheet" href="../../web/uc-basic.min.css">
<style>
@media (prefers-color-scheme: dark) {
body {
background-color: #121213;
}
}
</style>
<!-- IIFE bundle - no module required, UC is available globally -->
<script src="../../web/file-uploader.iife.min.js"></script>
<script>
// UC is available as a global variable
UC.defineComponents(UC);
</script>
</head>
<body>
<uc-file-uploader-regular ctx-name="my-uploader"></uc-file-uploader-regular>
<uc-config ctx-name="my-uploader" pubkey="demopublickey" debug quality-insights="false" test-mode></uc-config>
<uc-upload-ctx-provider ctx-name="my-uploader"></uc-upload-ctx-provider>
</body>
</html>
37 changes: 37 additions & 0 deletions demo/bundles/img.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Adaptive Image - Bundle Demo</title>
<style>
uc-img {
--uc-img-pubkey: "demopublickey";
--uc-img-breakpoints: "200, 500, 800";
display: contents;
}

uc-img > img {
transition: 1s;
}

uc-img > img[unresolved] {
transform: scale(0.8);
opacity: 0;
transition: 1s;
}

@media (prefers-color-scheme: dark) {
body {
background-color: #121213;
}
}
</style>
<script type="module">
import '../../web/uc-img.min.js';
</script>
</head>
<body>
<uc-img uuid="7124ae98-344c-42b2-ae2a-bd9aa79d76d8" width="500px"></uc-img>
</body>
</html>
33 changes: 33 additions & 0 deletions demo/bundles/inline.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>File Uploader Inline - Bundle Demo</title>
<link rel="stylesheet" href="../../web/uc-file-uploader-inline.min.css">
<style>
@media (prefers-color-scheme: dark) {
body {
background-color: #121213;
}
}
</style>
<script type="module">
import * as UC from '../../web/uc-file-uploader-inline.min.js';

UC.defineComponents(UC);
</script>
</head>
<body>
<uc-file-uploader-inline ctx-name="my-uploader"></uc-file-uploader-inline>
<uc-config
ctx-name="my-uploader"
pubkey="demopublickey"
crop-preset="1:1"
cloud-image-editor-tabs="crop"
debug
quality-insights="false"
test-mode
></uc-config>
</body>
</html>
33 changes: 33 additions & 0 deletions demo/bundles/minimal.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>File Uploader Minimal - Bundle Demo</title>
<link rel="stylesheet" href="../../web/uc-file-uploader-minimal.min.css">
<style>
@media (prefers-color-scheme: dark) {
body {
background-color: #121213;
}
}
</style>
<script type="module">
import * as UC from '../../web/uc-file-uploader-minimal.min.js';

UC.defineComponents(UC);
</script>
</head>
<body>
<uc-file-uploader-minimal ctx-name="my-uploader"></uc-file-uploader-minimal>
<uc-config
ctx-name="my-uploader"
pubkey="demopublickey"
img-only
group-output
debug
quality-insights="false"
test-mode
></uc-config>
</body>
</html>
26 changes: 26 additions & 0 deletions demo/bundles/regular.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>File Uploader Regular - Bundle Demo</title>
<link rel="stylesheet" href="../../web/uc-file-uploader-regular.min.css">
<style>
@media (prefers-color-scheme: dark) {
body {
background-color: #121213;
}
}
</style>
<script type="module">
import * as UC from '../../web/uc-file-uploader-regular.min.js';

UC.defineComponents(UC);
</script>
</head>
<body>
<uc-file-uploader-regular ctx-name="my-uploader"></uc-file-uploader-regular>
<uc-config ctx-name="my-uploader" pubkey="demopublickey" debug quality-insights="false" test-mode></uc-config>
<uc-upload-ctx-provider ctx-name="my-uploader"></uc-upload-ctx-provider>
</body>
</html>
29 changes: 0 additions & 29 deletions demo/cloud-image-editor.html

This file was deleted.

30 changes: 0 additions & 30 deletions demo/custom-icons.html

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!doctype html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script type="module">
import '@/solutions/file-uploader/regular/index.css';
import * as UC from '@/index.js';

UC.defineComponents(UC);

const config = document.querySelector('uc-config');
config.secureDeliveryProxyUrlResolver = (previewUrl) => {
return `http://localhost:3000/preview?url=${encodeURIComponent(previewUrl)}`;
};
Comment on lines +4 to +13
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical

Avoid null access when wiring secureDeliveryProxyUrlResolver

The script in <head> queries for uc-config before the body is parsed:

const config = document.querySelector('uc-config');
config.secureDeliveryProxyUrlResolver = (previewUrl) => { ... };

At that point config can be null, leading to a runtime error and a broken demo.

A minimal, robust fix is to wait for DOM readiness and guard against a missing element:

-  const config = document.querySelector('uc-config');
-  config.secureDeliveryProxyUrlResolver = (previewUrl) => {
-    return `http://localhost:3000/preview?url=${encodeURIComponent(previewUrl)}`;
-  };
+  window.addEventListener('DOMContentLoaded', () => {
+    const config = document.querySelector('uc-config');
+    if (!config) return;
+
+    config.secureDeliveryProxyUrlResolver = (previewUrl) => {
+      return `http://localhost:3000/preview?url=${encodeURIComponent(previewUrl)}`;
+    };
+  });

Alternatively, you could move the script tag to after the <uc-config> element and still keep a simple null check.

Also applies to: 17-19

🤖 Prompt for AI Agents
In demo/external-sources/preview-proxy/secure-delivery-proxy-url-resolver.html
around lines 4 to 13 (and similarly lines 17 to 19), the script queries
document.querySelector('uc-config') before the body is parsed which can return
null and cause a runtime error; fix it by ensuring the DOM is ready and guarding
against a missing element: either wrap the wiring code in a DOMContentLoaded
handler (or move the script to after the <uc-config> element) and check that
config is non-null before assigning secureDeliveryProxyUrlResolver, failing
gracefully or logging if absent.

</script>
</head>

<uc-file-uploader-regular ctx-name="my-uploader"></uc-file-uploader-regular>
<uc-config ctx-name="my-uploader" pubkey="demopublickey" debug quality-insights="false" test-mode></uc-config>
<uc-upload-ctx-provider ctx-name="my-uploader"></uc-upload-ctx-provider>
Loading
Loading