@threlte/theatre 3.0.7 → 3.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.
Files changed (49) hide show
  1. package/README.md +0 -4
  2. package/dist/index.d.ts +6 -6
  3. package/dist/index.js +4 -4
  4. package/dist/project/Project.svelte +34 -13
  5. package/dist/project/Project.svelte.d.ts +4 -2
  6. package/dist/sequence/Sequence.svelte +102 -71
  7. package/dist/sequence/Sequence.svelte.d.ts +5 -5
  8. package/dist/sequence/SequenceController.d.ts +2 -2
  9. package/dist/sequence/SequenceController.js +1 -1
  10. package/dist/sequence/useSequence.d.ts +1 -1
  11. package/dist/sheet/Sheet.svelte +34 -16
  12. package/dist/sheet/Sheet.svelte.d.ts +5 -3
  13. package/dist/sheet/types.d.ts +1 -1
  14. package/dist/sheetObject/SheetObject.svelte +108 -75
  15. package/dist/sheetObject/SheetObject.svelte.d.ts +11 -4
  16. package/dist/sheetObject/declare/Declare.svelte +23 -14
  17. package/dist/sheetObject/declare/Declare.svelte.d.ts +11 -4
  18. package/dist/sheetObject/sync/Sync.svelte +122 -85
  19. package/dist/sheetObject/sync/Sync.svelte.d.ts +15 -4
  20. package/dist/sheetObject/sync/types.d.ts +1 -1
  21. package/dist/sheetObject/sync/utils/getInitialValue.js +2 -2
  22. package/dist/sheetObject/sync/utils/isComplexProp.d.ts +1 -1
  23. package/dist/sheetObject/sync/utils/isStringProp.d.ts +1 -1
  24. package/dist/sheetObject/sync/utils/parsePropLabel.d.ts +1 -1
  25. package/dist/sheetObject/transfomers/createTransformer.d.ts +1 -1
  26. package/dist/sheetObject/transfomers/defaults/color.d.ts +1 -1
  27. package/dist/sheetObject/transfomers/defaults/color.js +2 -2
  28. package/dist/sheetObject/transfomers/defaults/degrees.d.ts +1 -1
  29. package/dist/sheetObject/transfomers/defaults/degrees.js +2 -2
  30. package/dist/sheetObject/transfomers/defaults/euler.d.ts +1 -1
  31. package/dist/sheetObject/transfomers/defaults/euler.js +2 -2
  32. package/dist/sheetObject/transfomers/defaults/generic.d.ts +1 -1
  33. package/dist/sheetObject/transfomers/defaults/generic.js +3 -3
  34. package/dist/sheetObject/transfomers/defaults/normalized.d.ts +1 -1
  35. package/dist/sheetObject/transfomers/defaults/normalized.js +2 -2
  36. package/dist/sheetObject/transfomers/defaults/side.d.ts +1 -1
  37. package/dist/sheetObject/transfomers/defaults/side.js +2 -2
  38. package/dist/sheetObject/transfomers/getDefaultTransformer.d.ts +1 -1
  39. package/dist/sheetObject/transfomers/getDefaultTransformer.js +6 -6
  40. package/dist/sheetObject/transform/Transform.svelte +145 -120
  41. package/dist/sheetObject/transform/Transform.svelte.d.ts +11 -4
  42. package/dist/studio/InnerStudio.svelte +31 -19
  43. package/dist/studio/InnerStudio.svelte.d.ts +5 -3
  44. package/dist/studio/Studio.svelte +12 -3
  45. package/dist/studio/Studio.svelte.d.ts +4 -2
  46. package/dist/studio/useStudio.js +1 -1
  47. package/dist/theatre/Theatre.svelte +15 -2
  48. package/dist/theatre/Theatre.svelte.d.ts +4 -2
  49. package/package.json +11 -12
package/README.md CHANGED
@@ -48,10 +48,6 @@ Contributions are what make the open source community such an amazing place to l
48
48
  - **Filing Issues** - if you have feature requestions or you think you spotted a bug, [submit an issue](https://github.com/threlte/threlte/issues/new).
49
49
  - **Contributing Code** - if you would like to drop us a PR, read the [contribution guide](https://github.com/threlte/threlte/blob/main/CONTRIBUTING.md) first.
50
50
 
51
- ## Sponsors
52
-
53
- [![Powered by Vercel](./assets/vercel/powered-by-vercel.svg)](https://vercel.com/?utm_source=threlte&utm_campaign=oss)
54
-
55
51
  ---
56
52
 
57
53
  ### License
package/dist/index.d.ts CHANGED
@@ -4,9 +4,9 @@ export { default as Sequence } from './sequence/Sequence.svelte';
4
4
  export { default as Sheet } from './sheet/Sheet.svelte';
5
5
  export { default as Theatre } from './theatre/Theatre.svelte';
6
6
  export { default as SheetObject } from './sheetObject/SheetObject.svelte';
7
- export { createTransformer } from './sheetObject/transfomers/createTransformer';
8
- export type { Transformer } from './sheetObject/transfomers/types';
9
- export { useStudio } from './studio/useStudio';
10
- export { useSequence } from './sequence/useSequence';
11
- export { createSheetObjectAction } from './sheet/createSheetObjectAction';
12
- export type { SequenceController } from './sequence/SequenceController';
7
+ export { createTransformer } from './sheetObject/transfomers/createTransformer.js';
8
+ export type { Transformer } from './sheetObject/transfomers/types.js';
9
+ export { useStudio } from './studio/useStudio.js';
10
+ export { useSequence } from './sequence/useSequence.js';
11
+ export { createSheetObjectAction } from './sheet/createSheetObjectAction.js';
12
+ export type { SequenceController } from './sequence/SequenceController.js';
package/dist/index.js CHANGED
@@ -6,9 +6,9 @@ export { default as Sheet } from './sheet/Sheet.svelte';
6
6
  export { default as Theatre } from './theatre/Theatre.svelte';
7
7
  // SheetObject related things
8
8
  export { default as SheetObject } from './sheetObject/SheetObject.svelte';
9
- export { createTransformer } from './sheetObject/transfomers/createTransformer';
9
+ export { createTransformer } from './sheetObject/transfomers/createTransformer.js';
10
10
  // hooks
11
- export { useStudio } from './studio/useStudio';
12
- export { useSequence } from './sequence/useSequence';
11
+ export { useStudio } from './studio/useStudio.js';
12
+ export { useSequence } from './sequence/useSequence.js';
13
13
  // actions
14
- export { createSheetObjectAction } from './sheet/createSheetObjectAction';
14
+ export { createSheetObjectAction } from './sheet/createSheetObjectAction.js';
@@ -1,16 +1,37 @@
1
- <script lang="ts">import { globalProjects } from '../consts';
2
- import { getProject } from '../theatre';
3
- import { setContext } from 'svelte';
4
- let { name = 'default', config, project = $bindable(), isReady = $bindable(), children } = $props();
5
- project = globalProjects.get(name) ?? getProject(name, config);
6
- globalProjects.set(name, project);
7
- const syncReady = async () => {
8
- await project.ready;
9
- isReady = true;
10
- };
11
- syncReady();
12
- // CHILD CONTEXT
13
- setContext(`theatre-project`, project);
1
+ <script lang="ts">
2
+ import { globalProjects } from '../consts.js'
3
+ import { getProject } from '../theatre.js'
4
+ import { setContext, type Snippet } from 'svelte'
5
+ import type { IProject, IProjectConfig } from '@theatre/core'
6
+
7
+ interface Props {
8
+ name?: string
9
+ config?: IProjectConfig | undefined
10
+ project?: IProject
11
+ isReady?: boolean
12
+ children?: Snippet<[{ project: IProject }]>
13
+ }
14
+
15
+ let {
16
+ name = 'default',
17
+ config,
18
+ project = $bindable(),
19
+ isReady = $bindable(),
20
+ children
21
+ }: Props = $props()
22
+
23
+ project = globalProjects.get(name) ?? getProject(name, config)
24
+ globalProjects.set(name, project)
25
+
26
+ const syncReady = async () => {
27
+ await project.ready
28
+ isReady = true
29
+ }
30
+ syncReady()
31
+
32
+ // CHILD CONTEXT
33
+
34
+ setContext(`theatre-project`, project)
14
35
  </script>
15
36
 
16
37
  {#await project.ready then}
@@ -1,6 +1,6 @@
1
1
  import { type Snippet } from 'svelte';
2
2
  import type { IProject, IProjectConfig } from '@theatre/core';
3
- declare const Project: import("svelte").Component<{
3
+ interface Props {
4
4
  name?: string;
5
5
  config?: IProjectConfig | undefined;
6
6
  project?: IProject;
@@ -8,5 +8,7 @@ declare const Project: import("svelte").Component<{
8
8
  children?: Snippet<[{
9
9
  project: IProject;
10
10
  }]>;
11
- }, {}, "project" | "isReady">;
11
+ }
12
+ declare const Project: import("svelte").Component<Props, {}, "project" | "isReady">;
13
+ type Project = ReturnType<typeof Project>;
12
14
  export default Project;
@@ -1,86 +1,117 @@
1
- <script lang="ts">import { getContext, onDestroy, setContext } from 'svelte';
2
- // Parent context
3
- const { sequences } = getContext('theatre-sheet');
4
- // Props
5
- let key = 'default'; // not exposed yet, will be a prop in the future
6
- // Theatre's native playback options
7
- export let rate = 1;
8
- export let range = undefined;
9
- export let iterationCount = undefined;
10
- export let direction = undefined;
11
- export let rafDriver = undefined;
12
- export let audio = undefined;
13
- // Threlte's custom playback options
14
- export let autoplay = false;
15
- export let autoreset = undefined;
16
- export let autopause = false;
17
- export let delay = 0;
18
- // Get the Sequence instance
19
- export const sequence = sequences[key];
20
- // autoplay logic
21
- if (!autoplay && delay > 0) {
1
+ <script lang="ts">
2
+ import type { IRafDriver, ISequence } from '@theatre/core'
3
+ import { getContext, onDestroy, setContext } from 'svelte'
4
+ import type { SheetContext } from '../sheet/types.js'
5
+ import type {
6
+ Autoreset,
7
+ IterationCount,
8
+ PlaybackDirection,
9
+ PlaybackRange,
10
+ SequenceAudioOptions,
11
+ SequenceOptions
12
+ } from './types.js'
13
+
14
+ // Parent context
15
+ const { sequences } = getContext<SheetContext>('theatre-sheet')
16
+
17
+ // Props
18
+ let key = 'default' // not exposed yet, will be a prop in the future
19
+
20
+ // Theatre's native playback options
21
+ export let rate: number = 1
22
+ export let range: PlaybackRange = undefined
23
+ export let iterationCount: IterationCount = undefined
24
+ export let direction: PlaybackDirection = undefined
25
+ export let rafDriver: IRafDriver | undefined = undefined
26
+ export let audio: SequenceAudioOptions | undefined = undefined
27
+
28
+ // Threlte's custom playback options
29
+ export let autoplay: boolean = false
30
+ export let autoreset: Autoreset = undefined
31
+ export let autopause: boolean = false
32
+ export let delay: number = 0
33
+
34
+ // Get the Sequence instance
35
+ export const sequence = sequences[key]
36
+
37
+ // autoplay logic
38
+ if (!autoplay && delay! > 0) {
22
39
  console.warn('Sequence: delay has no effect unless the option autoplay is enabled.', {
23
- sequence
24
- });
25
- }
26
- let delayTimer;
27
- if (autoplay) {
28
- delayTimer = setTimeout(() => sequence.play(), delay);
29
- }
30
- onDestroy(() => {
31
- clearTimeout(delayTimer);
32
- });
33
- // autopause logic
34
- onDestroy(() => {
40
+ sequence
41
+ })
42
+ }
43
+
44
+ let delayTimer: ReturnType<typeof setTimeout>
45
+
46
+ if (autoplay) {
47
+ delayTimer = setTimeout(() => sequence.play(), delay)
48
+ }
49
+
50
+ onDestroy(() => {
51
+ clearTimeout(delayTimer)
52
+ })
53
+
54
+ // autopause logic
55
+ onDestroy(() => {
35
56
  if (autopause) {
36
- sequence.pause();
57
+ sequence.pause()
37
58
  }
38
- });
39
- // autoreset logic
40
- if (autoreset === 'onMount' || autoreset === 'always') {
41
- sequence.reset();
42
- }
43
- onDestroy(() => {
59
+ })
60
+
61
+ // autoreset logic
62
+ if (autoreset === 'onMount' || autoreset === 'always') {
63
+ sequence.reset()
64
+ }
65
+
66
+ onDestroy(() => {
44
67
  if (autoreset === 'onDestroy' || autoreset === 'always') {
45
- sequence.reset();
68
+ sequence.reset()
46
69
  }
47
- });
48
- // config reactivity
49
- $: sequence.config({
70
+ })
71
+
72
+ // config reactivity
73
+ $: sequence.config({
50
74
  audio,
51
75
  rate,
52
76
  range,
53
77
  iterationCount,
54
78
  direction,
55
79
  rafDriver
56
- });
57
- // Bindings
58
- const { position: positionStore, playing: playingStore, length: lengthStore } = sequence;
59
- export let position = $positionStore;
60
- export let playing = $playingStore;
61
- export const length = $lengthStore;
62
- export const play = (opts) => sequence.play(opts);
63
- export const pause = () => sequence.pause();
64
- // position
65
- let positionChangedBy = 'user';
66
- positionStore.subscribe((value) => {
67
- positionChangedBy = 'code';
68
- position = value;
69
- });
70
- $: position,
80
+ })
81
+
82
+ // Bindings
83
+ const { position: positionStore, playing: playingStore, length: lengthStore } = sequence
84
+
85
+ export let position = $positionStore
86
+ export let playing = $playingStore
87
+ export const length = $lengthStore
88
+
89
+ export const play: ISequence['play'] = (opts?: SequenceOptions) => sequence.play(opts)
90
+ export const pause: ISequence['pause'] = () => sequence.pause()
91
+
92
+ // position
93
+ let positionChangedBy = 'user'
94
+ positionStore.subscribe((value) => {
95
+ positionChangedBy = 'code'
96
+ position = value
97
+ })
98
+ $: position,
71
99
  positionChangedBy === 'user' && ($positionStore = position),
72
- (positionChangedBy = 'user');
73
- // playing
74
- let playingChangedBy = 'user';
75
- playingStore.subscribe((value) => {
76
- playingChangedBy = 'code';
77
- playing = value;
78
- });
79
- $: playing, playingChangedBy === 'user' && ($playingStore = playing), (playingChangedBy = 'user');
80
- // pass sequence to children via context
81
- setContext('theatre-sequence', sequence);
82
- // pass to parent
83
- sequences[key] = sequence;
100
+ (positionChangedBy = 'user')
101
+
102
+ // playing
103
+ let playingChangedBy = 'user'
104
+ playingStore.subscribe((value) => {
105
+ playingChangedBy = 'code'
106
+ playing = value
107
+ })
108
+ $: playing, playingChangedBy === 'user' && ($playingStore = playing), (playingChangedBy = 'user')
109
+
110
+ // pass sequence to children via context
111
+ setContext('theatre-sequence', sequence)
112
+
113
+ // pass to parent
114
+ sequences[key] = sequence
84
115
  </script>
85
116
 
86
117
  <slot
@@ -1,5 +1,5 @@
1
1
  import type { IRafDriver, ISequence } from '@theatre/core';
2
- import type { Autoreset, IterationCount, PlaybackDirection, PlaybackRange, SequenceAudioOptions } from './types';
2
+ import type { Autoreset, IterationCount, PlaybackDirection, PlaybackRange, SequenceAudioOptions } from './types.js';
3
3
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
4
4
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
5
5
  $$bindings?: Bindings;
@@ -29,7 +29,7 @@ declare const Sequence: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsW
29
29
  autoreset?: Autoreset;
30
30
  autopause?: boolean;
31
31
  delay?: number;
32
- sequence?: import("./SequenceController").SequenceController;
32
+ sequence?: import("./SequenceController.js").SequenceController;
33
33
  position?: number;
34
34
  playing?: boolean;
35
35
  length?: number;
@@ -37,7 +37,7 @@ declare const Sequence: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsW
37
37
  pause?: ISequence["pause"];
38
38
  }, {
39
39
  default: {
40
- sequence: import("./SequenceController").SequenceController;
40
+ sequence: import("./SequenceController.js").SequenceController;
41
41
  position: number;
42
42
  playing: boolean;
43
43
  play: (conf?: {
@@ -53,7 +53,7 @@ declare const Sequence: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsW
53
53
  [evt: string]: CustomEvent<any>;
54
54
  }, {
55
55
  default: {
56
- sequence: import("./SequenceController").SequenceController;
56
+ sequence: import("./SequenceController.js").SequenceController;
57
57
  position: number;
58
58
  playing: boolean;
59
59
  play: (conf?: {
@@ -66,7 +66,7 @@ declare const Sequence: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsW
66
66
  pause: () => void;
67
67
  };
68
68
  }, {
69
- sequence: import("./SequenceController").SequenceController;
69
+ sequence: import("./SequenceController.js").SequenceController;
70
70
  length: number;
71
71
  play: ISequence["play"];
72
72
  pause: ISequence["pause"];
@@ -1,7 +1,7 @@
1
1
  import type { ISequence } from '@theatre/core';
2
2
  import type { Readable, Subscriber, Writable } from 'svelte/store';
3
- import { onChange } from '../theatre';
4
- import type { SequenceOptions } from './types';
3
+ import { onChange } from '../theatre.js';
4
+ import type { SequenceOptions } from './types.js';
5
5
  /**
6
6
  * ### `SequenceController`
7
7
  *
@@ -1,5 +1,5 @@
1
1
  import { get } from 'svelte/store';
2
- import { onChange, val } from '../theatre';
2
+ import { onChange, val } from '../theatre.js';
3
3
  /**
4
4
  * ### `SequenceController`
5
5
  *
@@ -1,4 +1,4 @@
1
- import type { SequenceController } from './SequenceController';
1
+ import type { SequenceController } from './SequenceController.js';
2
2
  /**
3
3
  * ### `useSequence`
4
4
  *
@@ -1,19 +1,37 @@
1
- <script lang="ts">import { getContext, setContext } from 'svelte';
2
- import { SequenceController } from '../sequence/SequenceController';
3
- import { globalSheets } from '../consts';
4
- // parent context
5
- export const project = getContext('theatre-project');
6
- const projectName = project.address.projectId;
7
- let { name = 'default', sheet = $bindable(), instance = undefined, children } = $props();
8
- // bindings
9
- sheet = globalSheets.get(`${projectName}-${name}-${instance}`) ?? project.sheet(name, instance);
10
- // register instance logic
11
- globalSheets.set(`${projectName}-${name}-${instance}`, sheet);
12
- // init sequence store
13
- export const sequence = new SequenceController(sheet.sequence);
14
- // child context
15
- const sequences = { default: sequence };
16
- setContext('theatre-sheet', { sheet, sequences });
1
+ <script lang="ts">
2
+ import type { IProject, ISheet } from '@theatre/core'
3
+ import { getContext, setContext, type Snippet } from 'svelte'
4
+ import { SequenceController } from '../sequence/SequenceController.js'
5
+ import { globalSheets } from '../consts.js'
6
+ import type { SheetContext } from './types.js'
7
+
8
+ // parent context
9
+ export const project = getContext('theatre-project') as IProject
10
+ const projectName = project.address.projectId
11
+
12
+ interface Props {
13
+ // props
14
+ name?: string
15
+ instance?: string | undefined
16
+ sheet?: ISheet
17
+ children?: Snippet<[{ sheet: ISheet }]>
18
+ }
19
+
20
+ let { name = 'default', sheet = $bindable(), instance = undefined, children }: Props = $props()
21
+
22
+ // bindings
23
+ sheet = globalSheets.get(`${projectName}-${name}-${instance}`) ?? project.sheet(name, instance)
24
+
25
+ // register instance logic
26
+ globalSheets.set(`${projectName}-${name}-${instance}`, sheet)
27
+
28
+ // init sequence store
29
+ export const sequence = new SequenceController(sheet.sequence)
30
+
31
+ // child context
32
+ const sequences = { default: sequence }
33
+
34
+ setContext<SheetContext>('theatre-sheet', { sheet, sequences })
17
35
  </script>
18
36
 
19
37
  {@render children?.({ sheet })}
@@ -1,15 +1,17 @@
1
1
  import type { IProject, ISheet } from '@theatre/core';
2
2
  import { type Snippet } from 'svelte';
3
- import { SequenceController } from '../sequence/SequenceController';
4
- declare const Sheet: import("svelte").Component<{
3
+ import { SequenceController } from '../sequence/SequenceController.js';
4
+ interface Props {
5
5
  name?: string;
6
6
  instance?: string | undefined;
7
7
  sheet?: ISheet;
8
8
  children?: Snippet<[{
9
9
  sheet: ISheet;
10
10
  }]>;
11
- }, {
11
+ }
12
+ declare const Sheet: import("svelte").Component<Props, {
12
13
  project: IProject;
13
14
  sequence: SequenceController;
14
15
  }, "sheet">;
16
+ type Sheet = ReturnType<typeof Sheet>;
15
17
  export default Sheet;
@@ -1,5 +1,5 @@
1
1
  import type { ISheet } from '@theatre/core';
2
- import type { SequenceController } from '../sequence/SequenceController';
2
+ import type { SequenceController } from '../sequence/SequenceController.js';
3
3
  export interface SheetContext {
4
4
  sheet: ISheet;
5
5
  sequences: {