@protoyard/decks-ui 0.0.0-stage → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +172 -2
- package/dist/app/CustomSlide.svelte +42 -0
- package/dist/app/CustomSlide.svelte.d.ts +60 -0
- package/dist/app/DeckApp.svelte +527 -0
- package/dist/app/DeckApp.svelte.d.ts +41 -0
- package/dist/app/FreeBlock.svelte +66 -0
- package/dist/app/FreeBlock.svelte.d.ts +10 -0
- package/dist/app/FreeSlide.svelte +135 -0
- package/dist/app/FreeSlide.svelte.d.ts +5 -0
- package/dist/app/context.d.ts +14 -0
- package/dist/app/context.js +11 -0
- package/dist/app/fit.d.ts +39 -0
- package/dist/app/fit.js +97 -0
- package/dist/app/free-prefetch.d.ts +3 -0
- package/dist/app/free-prefetch.js +13 -0
- package/dist/app/index.d.ts +6 -0
- package/dist/app/index.js +5 -0
- package/dist/app/interactive.d.ts +3 -0
- package/dist/app/interactive.js +25 -0
- package/dist/app/renderers.d.ts +14 -0
- package/dist/app/renderers.js +49 -0
- package/dist/app/stage-deck.d.ts +40 -0
- package/dist/app/stage-deck.js +65 -0
- package/dist/debug/BlockOutline.svelte +117 -0
- package/dist/debug/BlockOutline.svelte.d.ts +12 -0
- package/dist/debug/DeckDebugPanel.svelte +205 -0
- package/dist/debug/DeckDebugPanel.svelte.d.ts +18 -0
- package/dist/debug/availability.d.ts +19 -0
- package/dist/debug/availability.js +27 -0
- package/dist/debug/format.d.ts +12 -0
- package/dist/debug/format.js +39 -0
- package/dist/debug/index.d.ts +10 -0
- package/dist/debug/index.js +10 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +7 -0
- package/dist/layouts/CustomSlideHost.svelte +97 -0
- package/dist/layouts/CustomSlideHost.svelte.d.ts +14 -0
- package/dist/layouts/custom-slides.d.ts +28 -0
- package/dist/layouts/custom-slides.js +20 -0
- package/dist/layouts/index.d.ts +7 -0
- package/dist/layouts/index.js +7 -0
- package/dist/player.css +6 -0
- package/dist/player.css.d.ts +1 -0
- package/dist/studio/DeckStudioPanel.svelte +261 -0
- package/dist/studio/DeckStudioPanel.svelte.d.ts +8 -0
- package/dist/studio/StudioIcon.svelte +9 -0
- package/dist/studio/StudioIcon.svelte.d.ts +6 -0
- package/dist/studio/index.d.ts +26 -0
- package/dist/studio/index.js +21 -0
- package/dist/studio/studio.svelte.d.ts +565 -0
- package/dist/studio/studio.svelte.js +85 -0
- package/dist/styles.css +5 -0
- package/dist/styles.css.d.ts +1 -0
- package/package.json +106 -3
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { parseDeckHash } from '@protoyard/decks';
|
|
2
|
+
import { applyDeckEdits, compatibleLayouts, } from '@protoyard/decks/patch';
|
|
3
|
+
/** Re-roots every operation of a deck patch under `pointer`. */
|
|
4
|
+
export function prefixDeckPatch(patch, pointer = '') {
|
|
5
|
+
if (!pointer)
|
|
6
|
+
return patch;
|
|
7
|
+
return patch.map((op) => ({ ...op, path: `${pointer}${op.path}` }));
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Deck Studio state: the source deck, the edits made so far, and everything
|
|
11
|
+
* derived from them — the live `preview` deck (hand it to `DeckApp`), the RFC
|
|
12
|
+
* 6902 `patch` that turns the source JSON into that preview, and any schema
|
|
13
|
+
* `issues`. Edits stay in memory: nothing is written to tables or files.
|
|
14
|
+
*/
|
|
15
|
+
export function createDeckStudio(sourceDeck, studioOptions = {}) {
|
|
16
|
+
const source = structuredClone(sourceDeck);
|
|
17
|
+
let edits = $state({ style: {}, slides: {} });
|
|
18
|
+
let slideId = $state(source.slides[0]?.id ?? '');
|
|
19
|
+
const result = $derived(applyDeckEdits(source, edits));
|
|
20
|
+
const preview = $derived(result.ok ? result.deck : source);
|
|
21
|
+
const patch = $derived(prefixDeckPatch(result.patch, studioOptions.pointer));
|
|
22
|
+
const patchJson = $derived(JSON.stringify(patch, null, 2));
|
|
23
|
+
const slide = $derived(preview.slides.find((item) => item.id === slideId));
|
|
24
|
+
const layoutChoices = $derived(slide ? compatibleLayouts(slide) : []);
|
|
25
|
+
const selectSlide = (id) => {
|
|
26
|
+
if (source.slides.some((item) => item.id === id))
|
|
27
|
+
slideId = id;
|
|
28
|
+
};
|
|
29
|
+
return {
|
|
30
|
+
source,
|
|
31
|
+
get edits() {
|
|
32
|
+
return edits;
|
|
33
|
+
},
|
|
34
|
+
/** The slide the slide controls edit (follows the deck's `#/<id>/<step>` hash). */
|
|
35
|
+
get slideId() {
|
|
36
|
+
return slideId;
|
|
37
|
+
},
|
|
38
|
+
/** The edited deck, or the source while the edits do not validate. */
|
|
39
|
+
get preview() {
|
|
40
|
+
return preview;
|
|
41
|
+
},
|
|
42
|
+
/** The RFC 6902 patch for the source file (rooted at `pointer`). */
|
|
43
|
+
get patch() {
|
|
44
|
+
return patch;
|
|
45
|
+
},
|
|
46
|
+
get patchJson() {
|
|
47
|
+
return patchJson;
|
|
48
|
+
},
|
|
49
|
+
get issues() {
|
|
50
|
+
return result.ok ? [] : result.issues;
|
|
51
|
+
},
|
|
52
|
+
get slide() {
|
|
53
|
+
return slide;
|
|
54
|
+
},
|
|
55
|
+
/** Layouts the current slide's content already fits, so switching never drops content. */
|
|
56
|
+
get layoutChoices() {
|
|
57
|
+
return layoutChoices;
|
|
58
|
+
},
|
|
59
|
+
setStyle(key, value) {
|
|
60
|
+
edits = { ...edits, style: { ...edits.style, [key]: value } };
|
|
61
|
+
},
|
|
62
|
+
setSlide(key, value) {
|
|
63
|
+
if (!slideId)
|
|
64
|
+
return;
|
|
65
|
+
const slides = { ...edits.slides };
|
|
66
|
+
slides[slideId] = { ...slides[slideId], [key]: value };
|
|
67
|
+
edits = { ...edits, slides };
|
|
68
|
+
},
|
|
69
|
+
selectSlide,
|
|
70
|
+
reset() {
|
|
71
|
+
edits = { style: {}, slides: {} };
|
|
72
|
+
},
|
|
73
|
+
/** Follows the deck hash so the slide controls edit what is on screen. Returns a stop function. */
|
|
74
|
+
followHash(target = window) {
|
|
75
|
+
const sync = () => {
|
|
76
|
+
const location = parseDeckHash(target.location.hash);
|
|
77
|
+
if (location)
|
|
78
|
+
selectSlide(location.slideId);
|
|
79
|
+
};
|
|
80
|
+
sync();
|
|
81
|
+
target.addEventListener('hashchange', sync);
|
|
82
|
+
return () => target.removeEventListener('hashchange', sync);
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
package/dist/styles.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,109 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@protoyard/decks-ui",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "1.1.0",
|
|
4
|
+
"description": "Svelte 5 deck host for Protoyard: DeckApp on the @texuli/slides stage, with Protoyard's free and custom slides, Deck Studio and the Debug for agents panel, each on its own lazy subpath.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": [
|
|
8
|
+
"**/*.css",
|
|
9
|
+
"**/*.svelte",
|
|
10
|
+
"dist/**/*.css",
|
|
11
|
+
"dist/**/*.svelte"
|
|
12
|
+
],
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"svelte": "./dist/index.js",
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
|
+
},
|
|
19
|
+
"./app": {
|
|
20
|
+
"types": "./dist/app/index.d.ts",
|
|
21
|
+
"svelte": "./dist/app/index.js",
|
|
22
|
+
"default": "./dist/app/index.js"
|
|
23
|
+
},
|
|
24
|
+
"./layouts": {
|
|
25
|
+
"types": "./dist/layouts/index.d.ts",
|
|
26
|
+
"svelte": "./dist/layouts/index.js",
|
|
27
|
+
"default": "./dist/layouts/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./studio": {
|
|
30
|
+
"types": "./dist/studio/index.d.ts",
|
|
31
|
+
"svelte": "./dist/studio/index.js",
|
|
32
|
+
"default": "./dist/studio/index.js"
|
|
33
|
+
},
|
|
34
|
+
"./debug": {
|
|
35
|
+
"types": "./dist/debug/index.d.ts",
|
|
36
|
+
"svelte": "./dist/debug/index.js",
|
|
37
|
+
"default": "./dist/debug/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./styles.css": {
|
|
40
|
+
"types": "./dist/styles.css.d.ts",
|
|
41
|
+
"svelte": "./dist/styles.css",
|
|
42
|
+
"default": "./dist/styles.css"
|
|
43
|
+
},
|
|
44
|
+
"./player.css": {
|
|
45
|
+
"types": "./dist/player.css.d.ts",
|
|
46
|
+
"svelte": "./dist/player.css",
|
|
47
|
+
"default": "./dist/player.css"
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@lucide/svelte": "^1.61.0",
|
|
52
|
+
"@protoyard/blocks": "1.1.0",
|
|
53
|
+
"@protoyard/blocks-ui": "1.1.0",
|
|
54
|
+
"@protoyard/decks": "1.1.0",
|
|
55
|
+
"@texuli/deck": "0.12.0",
|
|
56
|
+
"@texuli/slides": "0.12.0",
|
|
57
|
+
"texuli": "0.12.0"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"svelte": "^5.57.2"
|
|
61
|
+
},
|
|
62
|
+
"peerDependencies": {
|
|
63
|
+
"svelte": "^5.57.0"
|
|
64
|
+
},
|
|
65
|
+
"protoyard": {
|
|
66
|
+
"build": {
|
|
67
|
+
"assets": [
|
|
68
|
+
"src/player.css"
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"files": [
|
|
73
|
+
"dist",
|
|
74
|
+
"README.md",
|
|
75
|
+
"LICENSE"
|
|
76
|
+
],
|
|
77
|
+
"publishConfig": {
|
|
78
|
+
"access": "public",
|
|
79
|
+
"provenance": true,
|
|
80
|
+
"files": [
|
|
81
|
+
"dist",
|
|
82
|
+
"README.md",
|
|
83
|
+
"LICENSE"
|
|
84
|
+
]
|
|
85
|
+
},
|
|
86
|
+
"repository": {
|
|
87
|
+
"type": "git",
|
|
88
|
+
"url": "https://github.com/DailybotHQ/protoyard",
|
|
89
|
+
"directory": "packages/decks-ui"
|
|
90
|
+
},
|
|
91
|
+
"homepage": "https://protoyard.app",
|
|
92
|
+
"bugs": {
|
|
93
|
+
"url": "https://github.com/DailybotHQ/protoyard/issues"
|
|
94
|
+
},
|
|
95
|
+
"engines": {
|
|
96
|
+
"node": ">=24.20.0"
|
|
97
|
+
},
|
|
98
|
+
"keywords": [
|
|
99
|
+
"protoyard",
|
|
100
|
+
"svelte",
|
|
101
|
+
"slides",
|
|
102
|
+
"deck",
|
|
103
|
+
"presentation"
|
|
104
|
+
],
|
|
105
|
+
"scripts": {
|
|
106
|
+
"typecheck": "svelte-check --tsconfig ./tsconfig.json --threshold error"
|
|
107
|
+
},
|
|
108
|
+
"types": "./dist/index.d.ts"
|
|
6
109
|
}
|