# Sceneweave 1.0

A free original responsive jQuery image slider and local integration studio. Choose fade, slide or reveal entry transitions, set duration, navigate image thumbnails and export a portable result. The complete plugin is included under LICENSE.txt. No account, checkout, paid API or remote runtime dependency.

## Start

Extract the ZIP with all folders together. Open app/index.html in a modern browser, or serve the extracted folder using `python3 -m http.server 8797 --bind 127.0.0.1` then open http://127.0.0.1:8797/app/index.html. Nothing is uploaded. Python is optional and the slider itself does not need a server. The Field Notes sample includes three original fictional landscape illustrations.

Add PNG, JPEG or WebP images; choose a thumbnail to edit its caption, image description and optional absolute HTTP/HTTPS link. Apply settings to commit edits. Reorder or remove the selected slide. Bounds:1–12 images,4MB each,24million decoded pixels/image,32MB project, transition0–1500ms, interval2–20seconds. SVG and script/credential links are rejected. Failed imports keep the valid project.

Save project downloads complete JSON, including embedded artwork, title, selected image, transition, duration, aspect, interval and autoplay. Open project uses that saved JSON. A browser draft is a convenience; downloading is your portable backup. Clear browser storage only after making backups. Sample replaces the current browser draft; downloaded backups stay unchanged. Browser storage quota failures show a download reminder.

Export standalone HTML creates one file containing jQuery, plugin, CSS and images. Open that actual downloaded file to use it anywhere permitted by your site's content-security policy. No network tracking is embedded. The integration HTML field instead uses app/sceneweave.css, app/sceneweave.js and vendor/jquery-3.7.1.min.js from the ZIP; copy these folders to your site and adapt paths. Copy integration HTML uses the clipboard when permitted, with a select-and-copy fallback. It contains your embedded images; keep large code blocks in your own files rather than a CMS field with a small limit.

## Developer integration

samples/integration.html demonstrates two independent plugin instances, destroy and reinitialize. A minimal setup (supply a validated object shaped like samples/field-notes.sceneweave.json):

```html
<link rel="stylesheet" href="app/sceneweave.css">
<div id="gallery"></div>
<script src="vendor/jquery-3.7.1.min.js"></script>
<script src="app/sceneweave.js"></script>
<script>jQuery('#gallery').sceneweave(options);</script>
```

Options: title, slides[{image,alt,title,href}], index0, effect fade|slide|reveal, duration450ms, aspect16:9|4:3|1:1, interval5seconds, autoplayfalse. Images are embedded PNG/JPEG/WebP data URLs, not remote URLs. A runtime standalone plugin accepts that same bounded shape; the studio performs full file decoding/size validation before commit. Use app/project.js SceneweaveProject.validate for full project validation outside the studio. Do not disable CSP on an existing site just to run an inline export; use external assets with approved policy instead.

```js
jQuery('#gallery').sceneweave('next');
jQuery('#gallery').sceneweave('previous');
jQuery('#gallery').sceneweave('goTo', 2); // zero-based; wraps
jQuery('#gallery').sceneweave('play');
jQuery('#gallery').sceneweave('pause');
const state = jQuery('#gallery').sceneweave('getState');
jQuery('#gallery').sceneweave('destroy');
jQuery('#gallery').on('sceneweave:change', (event, state) => console.log(state.index));
```

Methods next,previous,goTo,play,pause,destroy remain chainable; getState returns a copy including index,slideCount,playing,running,reducedMotion,effect,duration. Events: sceneweave:ready/change/playback/error. Initialize before observing ready, attach the event handler first if needed. Reinitialize validates before replacing the previous instance. Destroy clears timers/listeners, restores original DOM nodes/classes/role/tabindex/label and removes instance data.

## Input and motion

Focus the slider region and use arrows, Home/End or Space. Buttons and links keep their normal keyboard behavior. Drag horizontally more than50px for pointer swipe; vertical page scrolling remains available. Autoplay defaults off and pauses during hover, focus or hidden-document state; changing slides while interacting is manual. A reduced-motion preference disables entry animation and initial autoplay. Explicit Play is still a user choice and may remain paused until focus/hover leaves the component. Thumbnail buttons announce scene titles; captions are text, optional links open with noopener/noreferrer. This is a bounded component, not a full WCAG, physical-device or cross-engine certification.

## Privacy, free terms and maintenance

Offline studio, integration and exported viewers contain no telemetry. Optional hosted.html + hosted-metrics.js are publisher-only preparation, excluded from the customer ZIP; they activate only on exact approved HTTPS nishvault.com routes, respect DNT/GPC and emit fixed anonymous event fields without artwork, URLs, names, filenames or project contents. Local adapter tests are not production persistence or organic traffic proof. No guaranteed support, SLA or update schedule is included. Integration services would be separate agreed work, not a restriction on this free plugin.

Developer sources contain `npm ci --ignore-scripts` and `node --test tests/project.test.cjs tests/plugin.test.cjs tests/metrics.test.cjs` (jsdom development only), `node scripts/build_sample.cjs` and `python3 scripts/package.py`. Original artwork generation uses Python Pillow. Customer ZIP omits dev tests, hosted files and aggregate QA reports. Keep license and third-party notices. Independent QC and publication are separate from local production acceptance.
