Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
15 changes: 15 additions & 0 deletions .github/workflows/publish-assets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ on:
- 'snapsort-v*'
- 'snapsort-svelte-v*'
- 'snapsort-react-v*'
- 'snapline-v*'
- 'snapline-svelte-v*'
- 'snapline-react-v*'

jobs:
publish:
Expand Down Expand Up @@ -61,6 +64,18 @@ jobs:
package_dir="assets/snapsort/react"
tag_version="${GITHUB_REF_NAME#snapsort-react-v}"
;;
snapline-v*)
package_dir="assets/snapline/core"
tag_version="${GITHUB_REF_NAME#snapline-v}"
;;
snapline-svelte-v*)
package_dir="assets/snapline/svelte"
tag_version="${GITHUB_REF_NAME#snapline-svelte-v}"
;;
snapline-react-v*)
package_dir="assets/snapline/react"
tag_version="${GITHUB_REF_NAME#snapline-react-v}"
;;
*)
echo "Unsupported release tag: $GITHUB_REF_NAME"
exit 1
Expand Down
11 changes: 9 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,9 +60,9 @@ Organized as npm workspaces following a consistent pattern:
- See `assets/snapsort/AGENTS.md`

### 3. SnapLine
- **Packages:** `@snap-engine/snapline`, `@snap-engine/snapline-svelte`
- **Packages:** `@snap-engine/snapline`, `@snap-engine/snapline-svelte`, `@snap-engine/snapline-react`
- **Purpose:** Node graph UI system
- **Status:** Experimental and private (not published)
- **Status:** Experimental public package
- See `assets/snapline/AGENTS.md`

### 4. SnapZap
Expand Down Expand Up @@ -180,12 +180,19 @@ git tag asset-base-svelte-v{version}
git tag asset-base-react-v{version}
git tag snapsort-v{version}
git tag snapsort-svelte-v{version}
git tag snapsort-react-v{version}
git tag snapline-v{version}
git tag snapline-svelte-v{version}
git tag snapline-react-v{version}
git push origin asset-base-v{version}
git push origin asset-base-svelte-v{version}
git push origin asset-base-react-v{version}
git push origin snapsort-v{version}
git push origin snapsort-svelte-v{version}
git push origin snapsort-react-v{version}
git push origin snapline-v{version}
git push origin snapline-svelte-v{version}
git push origin snapline-react-v{version}
```

Push release tags one at a time and verify each publish workflow before sending the next tag.
Expand Down
19 changes: 13 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
> [!WARNING]
> The engine is still in early stages of development. Expect frequent updates and breaking changes.

# Interactivity Engine for the Web
# SnapEngine: Interactivity Engine for the Web

SnapEngineJS is a collection of utilities for building interactive UI elements on the web.
SnapEngine is the shared, DOM-first foundation behind a growing family of
interaction tools for the web. It provides:

- Input handling with a common API for mouse and touch events.
- Collision detection for basic shapes and lines.
Expand All @@ -15,15 +16,21 @@ SnapEngineJS is a collection of utilities for building interactive UI elements o
- A visual debugger for inspecting engine internals.
- Zero-dependency, framework-agnostic APIs.

See the [website](https://snap-engine-js.vercel.app) for details and documentation.
Most application developers should start with
[SnapSort](https://snapengine.dev/docs/snapsort/introduction), an
unstyled drag-and-drop toolkit built on SnapEngine. See the
[website](https://snapengine.dev) to explore the ecosystem.

## Installation
## Using SnapEngine Core directly

Install Core directly when authoring an interaction tool or asset, or when an
application needs advanced custom behavior at the engine level.

```bash
npm install @snap-engine/core
```

## Quick Start
## Core example

```ts
import { Engine, ElementObject } from "@snap-engine/core";
Expand All @@ -38,7 +45,7 @@ object.schedule(() => {
object.worldPosition = [100, 200];
object.writeTransform();
}, { stage: "WRITE_1" });
````
```

## License

Expand Down
11 changes: 11 additions & 0 deletions assets/asset-base/AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,17 @@ asset-base/
**Configuration:**
- `zoomLock?: boolean` - Disable zoom
- `panLock?: boolean` - Disable pan
- `edgePan?: CameraEdgePanConfig` - Opt-in programmatic edge panning for drag owners

**Edge-pan API:**
- `startEdgePan(pointerId, position, onFrame)` begins a pointer-owned request
- `updateEdgePan(pointerId, position)` updates the screen-space pointer
- `stopEdgePan(pointerId)` ends it

The controller registers itself on `engine.edgePanController`. Motion is
continuous while the pointer remains in the configured edge zone, and
`onFrame` receives recomputed world coordinates after every camera move so a
drag owner can stay glued to a stationary pointer.

### Background
**Extends:** `ElementObject`
Expand Down
Loading
Loading