fragment-tools 0.1.20 → 0.2.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 (104) hide show
  1. package/bin/index.js +2 -2
  2. package/package.json +5 -6
  3. package/src/cli/build.js +1 -1
  4. package/src/cli/run.js +1 -1
  5. package/src/cli/templates/three-fragment/index.js +6 -6
  6. package/src/cli/templates/three-orthographic/index.js +3 -3
  7. package/src/cli/templates/three-perspective/index.js +3 -3
  8. package/src/client/app/actions/resize.js +14 -0
  9. package/src/client/app/components/HintLoading.svelte +94 -0
  10. package/src/client/app/components/HintPaused.svelte +88 -0
  11. package/src/client/app/components/HintRecord.svelte +62 -0
  12. package/src/client/app/components/IconLocked.svelte +51 -0
  13. package/src/client/app/components/IconTriggers.svelte +48 -0
  14. package/src/client/app/components/Init.svelte +14 -27
  15. package/src/client/app/components/KeyBinding.svelte +3 -6
  16. package/src/client/app/helpers.js +4 -40
  17. package/src/client/app/hooks.js +41 -17
  18. package/src/client/app/inputs/MIDI.js +2 -1
  19. package/src/client/app/lib/canvas-recorder/CanvasRecorder.js +6 -1
  20. package/src/client/app/lib/gl/Renderer.js +1 -0
  21. package/src/client/app/lib/svelte-json-tree/ErrorNode.svelte +28 -0
  22. package/src/client/app/lib/svelte-json-tree/ErrorStack.svelte +31 -0
  23. package/src/client/app/lib/svelte-json-tree/Expandable.svelte +25 -0
  24. package/src/client/app/lib/svelte-json-tree/JSONArrayNode.svelte +38 -0
  25. package/src/client/app/lib/svelte-json-tree/JSONArrow.svelte +47 -0
  26. package/src/client/app/lib/svelte-json-tree/JSONFunctionNode.svelte +114 -0
  27. package/src/client/app/lib/svelte-json-tree/JSONIterableArrayNode.svelte +60 -0
  28. package/src/client/app/lib/svelte-json-tree/JSONIterableMapNode.svelte +87 -0
  29. package/src/client/app/lib/svelte-json-tree/JSONNested.svelte +94 -0
  30. package/src/client/app/lib/svelte-json-tree/JSONNode.svelte +91 -0
  31. package/src/client/app/lib/svelte-json-tree/JSONObjectNode.svelte +40 -0
  32. package/src/client/app/lib/svelte-json-tree/JSONStringNode.svelte +31 -0
  33. package/src/client/app/lib/svelte-json-tree/JSONValueNode.svelte +31 -0
  34. package/src/client/app/lib/svelte-json-tree/PreviewList.svelte +38 -0
  35. package/src/client/app/lib/svelte-json-tree/RegExpNode.svelte +42 -0
  36. package/src/client/app/lib/svelte-json-tree/Root.svelte +75 -0
  37. package/src/client/app/lib/svelte-json-tree/Summary.svelte +9 -0
  38. package/src/client/app/lib/svelte-json-tree/TypedArrayNode.svelte +56 -0
  39. package/src/client/app/lib/svelte-json-tree/index.js +1 -0
  40. package/src/client/app/lib/svelte-json-tree/utils.js +57 -0
  41. package/src/client/app/modules/Console/ConsoleLine.svelte +12 -11
  42. package/src/client/app/modules/Console.svelte +82 -17
  43. package/src/client/app/modules/Exports.svelte +48 -48
  44. package/src/client/app/modules/MidiPanel.svelte +12 -19
  45. package/src/client/app/modules/Monitor.svelte +147 -55
  46. package/src/client/app/modules/Params.svelte +127 -80
  47. package/src/client/app/renderers/2DRenderer.js +1 -0
  48. package/src/client/app/renderers/FragmentRenderer.js +1 -1
  49. package/src/client/app/renderers/P5GLRenderer.js +11 -5
  50. package/src/client/app/renderers/P5Renderer.js +7 -3
  51. package/src/client/app/renderers/THREERenderer.js +42 -79
  52. package/src/client/app/state/Sketch.svelte.js +538 -0
  53. package/src/client/app/state/errors.svelte.js +17 -0
  54. package/src/client/app/state/exports.svelte.js +152 -0
  55. package/src/client/app/state/layout.svelte.js +205 -0
  56. package/src/client/app/state/monitors.svelte.js +36 -0
  57. package/src/client/app/state/renderers.svelte.js +77 -0
  58. package/src/client/app/state/rendering.svelte.js +697 -0
  59. package/src/client/app/state/sketches.svelte.js +73 -0
  60. package/src/client/app/state/utils.svelte.js +65 -0
  61. package/src/client/app/ui/Build.svelte +53 -60
  62. package/src/client/app/ui/ErrorOverlay.svelte +2 -2
  63. package/src/client/app/ui/Field.svelte +63 -189
  64. package/src/client/app/ui/FieldGroup.svelte +4 -5
  65. package/src/client/app/ui/FieldSection.svelte +14 -9
  66. package/src/client/app/ui/FieldSpace.svelte +1 -1
  67. package/src/client/app/ui/FieldTrigger.svelte +86 -84
  68. package/src/client/app/ui/FieldTriggers.svelte +25 -24
  69. package/src/client/app/ui/FloatingParams.svelte +50 -12
  70. package/src/client/app/ui/Layout.svelte +24 -13
  71. package/src/client/app/ui/LayoutColumn.svelte +2 -2
  72. package/src/client/app/ui/LayoutComponent.svelte +86 -195
  73. package/src/client/app/ui/LayoutResizer.svelte +25 -37
  74. package/src/client/app/ui/LayoutRoot.svelte +3 -5
  75. package/src/client/app/ui/LayoutRow.svelte +2 -2
  76. package/src/client/app/ui/LayoutToolbar.svelte +17 -76
  77. package/src/client/app/ui/Module.svelte +31 -35
  78. package/src/client/app/ui/ModuleHeaderAction.svelte +23 -16
  79. package/src/client/app/ui/ModuleHeaderButton.svelte +3 -3
  80. package/src/client/app/ui/ModuleHeaderSelect.svelte +4 -12
  81. package/src/client/app/ui/ModuleRenderer.svelte +84 -22
  82. package/src/client/app/ui/ParamsOutput.svelte +61 -77
  83. package/src/client/app/ui/Preview.svelte +15 -4
  84. package/src/client/app/ui/SelectChevrons.svelte +1 -2
  85. package/src/client/app/ui/SketchRenderer.svelte +89 -701
  86. package/src/client/app/ui/SketchSelect.svelte +14 -49
  87. package/src/client/app/ui/fields/ButtonInput.svelte +14 -11
  88. package/src/client/app/ui/fields/CheckboxInput.svelte +5 -12
  89. package/src/client/app/ui/fields/ColorInput.svelte +46 -121
  90. package/src/client/app/ui/fields/FieldInputRow.svelte +5 -1
  91. package/src/client/app/ui/fields/ImageInput.svelte +14 -14
  92. package/src/client/app/ui/fields/Input.svelte +19 -25
  93. package/src/client/app/ui/fields/IntervalInput.svelte +22 -22
  94. package/src/client/app/ui/fields/NumberInput.svelte +32 -38
  95. package/src/client/app/ui/fields/ProgressInput.svelte +14 -13
  96. package/src/client/app/ui/fields/Select.svelte +34 -45
  97. package/src/client/app/ui/fields/TextInput.svelte +10 -6
  98. package/src/client/app/ui/fields/VectorInput.svelte +25 -30
  99. package/src/client/app/utils/canvas.utils.js +8 -8
  100. package/src/client/app/utils/color.utils.js +46 -13
  101. package/src/client/app/utils/fields.utils.js +1 -1
  102. package/src/client/app/utils/glsl.utils.js +1 -1
  103. package/src/client/app/utils/glslErrors.js +1 -1
  104. package/src/client/main.js +2 -2
@@ -1,49 +1,44 @@
1
- <script context="module">
2
- let MODULE_ID = 0;
3
-
4
- export let getModuleID = () => {
5
- return MODULE_ID++;
6
- };
7
- </script>
8
-
9
1
  <script>
10
2
  import { getContext } from 'svelte';
11
- import { layout } from '../stores/layout.js';
12
-
13
- export let mID = undefined;
14
- export let name;
15
- export let slug = name;
16
- export let scrollable = true;
17
- export let hasHeader = true;
3
+ import { layout } from '../state/layout.svelte.js';
4
+ import { resize } from '../actions/resize.js';
5
+
6
+ let {
7
+ id,
8
+ name,
9
+ slug = name,
10
+ scrollable = true,
11
+ headless = false,
12
+ children,
13
+ headerLeft,
14
+ headerRight,
15
+ onresize,
16
+ } = $props();
18
17
 
19
18
  const parent = getContext('parent');
19
+ const minimize = getContext('minimize');
20
20
 
21
- const current = {
22
- mID: !isNaN(mID) ? mID : MODULE_ID++,
21
+ const current = layout.createComponent({
22
+ id,
23
23
  type: 'module',
24
24
  name: slug,
25
- hasHeader,
26
- };
27
-
28
- MODULE_ID = Math.max(MODULE_ID, !isNaN(current.mID) ? current.mID + 1 : 0);
29
-
30
- parent.registerChild(current);
31
-
32
- const m = getContext('module');
33
- m.set(current);
25
+ headless,
26
+ origin: parent,
27
+ });
34
28
  </script>
35
29
 
36
30
  <div
37
31
  class="module module--{slug}"
38
32
  class:scrollable
39
- class:no-header={!hasHeader}
40
- class:editing={$layout.editing}
33
+ class:headless
34
+ class:editing={layout.editing}
35
+ bind:this={current.node}
41
36
  >
42
- {#if hasHeader && name}
43
- <header class="module__header">
37
+ {#if !headless && name}
38
+ <header class="module__header" onclick={minimize}>
44
39
  <div class="header__col">
45
40
  <div class="slot slot--left">
46
- <slot name="header-left" />
41
+ {@render headerLeft?.()}
47
42
  </div>
48
43
  </div>
49
44
  <div class="header__col">
@@ -51,13 +46,14 @@
51
46
  </div>
52
47
  <div class="header__col">
53
48
  <div class="slot slot--right">
54
- <slot name="header-right" />
49
+ {@render headerRight?.()}
50
+ <!-- <slot name="header-right" /> -->
55
51
  </div>
56
52
  </div>
57
53
  </header>
58
54
  {/if}
59
- <div class="module__container">
60
- <slot />
55
+ <div class="module__container" use:resize={onresize}>
56
+ {@render children?.()}
61
57
  </div>
62
58
  </div>
63
59
 
@@ -71,7 +67,7 @@
71
67
  align-items: stretch;
72
68
  }
73
69
 
74
- .module.no-header {
70
+ .module.headless {
75
71
  --header-height: 0px;
76
72
  grid-template-rows: minmax(0px, auto);
77
73
  }
@@ -2,14 +2,20 @@
2
2
  import ModuleHeaderSelect from './ModuleHeaderSelect.svelte';
3
3
  import ModuleHeaderButton from './ModuleHeaderButton.svelte';
4
4
 
5
- export let label = '';
6
- export let permanent = false;
7
- export let value = null;
8
- export let border = false;
9
- export let margin = true;
10
- export let options = [];
11
-
12
- $: disabled = options.length === 1;
5
+ let {
6
+ label = '',
7
+ permanent = false,
8
+ value,
9
+ border = false,
10
+ margin = true,
11
+ options = [],
12
+ onchange,
13
+ onclick,
14
+ children,
15
+ icon,
16
+ } = $props();
17
+
18
+ let disabled = $derived(options.length === 1);
13
19
  </script>
14
20
 
15
21
  <div
@@ -20,15 +26,16 @@
20
26
  class:disabled
21
27
  >
22
28
  {#if options.length > 0}
23
- <ModuleHeaderSelect {options} {value} {disabled} on:change />
29
+ <ModuleHeaderSelect {options} {value} {disabled} {onchange} />
24
30
  {:else}
25
- <ModuleHeaderButton {label} on:click>
26
- <slot name="text">
27
- <div class="text">
28
- <slot />
29
- </div>
30
- </slot>
31
- <slot name="icon" />
31
+ <ModuleHeaderButton {label} {onclick}>
32
+ {#snippet text()}{/snippet}
33
+ {#if icon}
34
+ {@render icon?.()}
35
+ {/if}
36
+ <div class="text">
37
+ {@render children?.()}
38
+ </div>
32
39
  </ModuleHeaderButton>
33
40
  {/if}
34
41
  </div>
@@ -1,9 +1,9 @@
1
1
  <script>
2
- export let label;
2
+ let { label, children, onclick } = $props();
3
3
  </script>
4
4
 
5
- <button class="module-header-action__button" aria-label={label} on:click>
6
- <slot />
5
+ <button class="module-header-action__button" aria-label={label} {onclick}>
6
+ {@render children?.()}
7
7
  </button>
8
8
 
9
9
  <style>
@@ -1,23 +1,15 @@
1
1
  <script>
2
- import { createEventDispatcher } from 'svelte';
3
-
4
2
  import SelectChevrons from './SelectChevrons.svelte';
5
3
 
6
- export let value;
7
- export let options = [];
8
- export let disabled = false;
9
-
10
- const dispatch = createEventDispatcher();
11
-
12
- function handleChange(event) {
13
- dispatch('change', event.currentTarget.value);
14
- }
4
+ let { value, options = [], disabled = false, onchange } = $props();
15
5
  </script>
16
6
 
17
7
  <div class="module-header-select">
18
8
  <select
19
9
  class="select"
20
- on:change={handleChange}
10
+ {value}
11
+ {onchange}
12
+ onclick={(e) => e.stopPropagation()}
21
13
  class:single={options.length === 1}
22
14
  {disabled}
23
15
  >
@@ -9,29 +9,91 @@
9
9
  </script>
10
10
 
11
11
  <script>
12
- import Module from './Module.svelte';
13
-
14
- export let mID = undefined;
15
- export let name;
16
- export let hasHeader = true;
17
-
18
- const moduleList = {
19
- monitor: () => import('../modules/Monitor.svelte'),
20
- params: () => import('../modules/Params.svelte'),
21
- midi: () => import('../modules/MidiPanel.svelte'),
22
- console: () => import('../modules/Console.svelte'),
23
- exports: () => import('../modules/Exports.svelte'),
24
- };
12
+ import Monitor from '../modules/Monitor.svelte';
13
+ import Exports from '../modules/Exports.svelte';
14
+ import MidiPanel from '../modules/MidiPanel.svelte';
15
+ import Console from '../modules/Console.svelte';
16
+ import Params from '../modules/Params.svelte';
17
+ let { id, name, headless = false, params = {} } = $props();
18
+
19
+ // const moduleList = {
20
+ // monitor: () => import('../modules/Monitor.svelte'),
21
+ // params: () => import('../modules/Params.svelte'),
22
+ // };
23
+
24
+ // if (!__BUILD__) {
25
+ // Object.assign(moduleList, {
26
+ // midi: () => import('../modules/MidiPanel.svelte'),
27
+ // console: () => import('../modules/Console.svelte'),
28
+ // exports: () => import('../modules/Exports.svelte'),
29
+ // });
30
+ // }
25
31
  </script>
26
32
 
27
- {#if moduleList[name]}
28
- {#await moduleList[name]()}
29
- <Module {hasHeader} {mID} {name} />
30
- {:then value}
31
- <svelte:component this={value.default} {mID} {hasHeader} />
32
- {:catch error}
33
- <p>Something went wrong: {error.message}</p>
34
- {/await}
33
+ {#if name === 'monitor'}
34
+ <Monitor {id} {headless} {params} />
35
+ {:else if name === 'exports'}
36
+ <Exports {id} {headless} {params} />
37
+ {:else if name === 'console'}
38
+ <Console {id} {headless} {params} />
39
+ {:else if name === 'params'}
40
+ <Params {id} {headless} {params} />
41
+ {:else if name === 'midi'}
42
+ <MidiPanel {id} {headless} {params} />
35
43
  {:else}
36
- <Module {hasHeader} {mID} {name} />
44
+ <div class="module-renderer">
45
+ <header class="module-renderer-header">
46
+ <span>Error</span>
47
+ </header>
48
+ <div class="module-renderer-error">
49
+ <div>
50
+ <p class="message">
51
+ Something went wrong while loading module:
52
+ <span class="module-name">{name}</span>
53
+ </p>
54
+ <p class="error">{error.message}</p>
55
+ </div>
56
+ </div>
57
+ </div>
37
58
  {/if}
59
+
60
+ <style>
61
+ .module-renderer {
62
+ display: grid;
63
+ grid-template-rows: 25px 1fr;
64
+ }
65
+
66
+ .module-renderer-header {
67
+ display: flex;
68
+ height: 25px;
69
+ flex-shrink: 0;
70
+ justify-content: center;
71
+ align-items: center;
72
+
73
+ color: white;
74
+ font-size: 10px;
75
+ text-transform: capitalize;
76
+ user-select: none;
77
+
78
+ background-color: var(--color-lightblack);
79
+ }
80
+
81
+ .module-renderer-error {
82
+ display: flex;
83
+ flex-direction: column;
84
+ justify-content: center;
85
+ color: var(--color-red);
86
+ font-size: 11px;
87
+ text-align: center;
88
+ background: #2a0000;
89
+ border-color: #5c0000;
90
+ }
91
+
92
+ .message {
93
+ color: var(--color-text);
94
+ }
95
+
96
+ .module-name {
97
+ text-transform: capitalize;
98
+ }
99
+ </style>
@@ -1,156 +1,140 @@
1
1
  <script>
2
- import { rendering, SIZES, monitors } from '../stores/rendering.js';
3
- import { sketchesCount } from '../stores/sketches.js';
2
+ import { SIZES, rendering } from '../state/rendering.svelte';
4
3
  import Field from './Field.svelte';
5
4
  import presets, {
6
5
  PRESET_ORIENTATIONS,
7
6
  getDimensionsForPreset,
8
7
  } from '../lib/presets';
9
- import { exports } from '../stores';
10
- import ParamsMultisampling from './ParamsMultisampling.svelte';
8
+ import { exports } from '../state/exports.svelte';
9
+ // import ParamsMultisampling from './ParamsMultisampling.svelte';
11
10
  import Select from './fields/Select.svelte';
12
11
  import FieldInputRow from './fields/FieldInputRow.svelte';
13
12
 
14
- let canvasWidth = $rendering.width;
15
- let canvasHeight = $rendering.height;
16
-
17
- function handleChangeDimensions(event) {
18
- const [width, height] = event.detail;
19
- const needsUpdate = canvasWidth !== width || canvasHeight !== height;
13
+ function handleChangeDimensions({ width, height }) {
14
+ const needsUpdate =
15
+ rendering.width !== width || rendering.height !== height;
20
16
 
21
17
  if (needsUpdate) {
22
- canvasWidth = width;
23
- canvasHeight = height;
18
+ rendering.width = width;
19
+ rendering.height = height;
24
20
 
25
- rendering.update((curr) => {
26
- return {
27
- ...curr,
28
- width,
29
- height,
30
- };
31
- });
21
+ if (rendering.resizing === SIZES.FIXED) {
22
+ rendering.fixedWidth = width;
23
+ rendering.fixedHeight = height;
24
+ }
32
25
  }
33
26
  }
34
27
 
35
28
  let sizes = Object.values(SIZES);
36
- $: dimensionsEnabled = [SIZES.FIXED, SIZES.SCALE].includes(
37
- $rendering.resizing,
29
+ let dimensions = $derived({
30
+ width: rendering.width,
31
+ height: rendering.height,
32
+ });
33
+ let dimensionsEnabled = $derived(
34
+ [SIZES.FIXED, SIZES.SCALE].includes(rendering.resizing),
38
35
  );
36
+ let dimensionsParams = $state({
37
+ step: 1,
38
+ suffix: 'px',
39
+ locked: false,
40
+ });
39
41
 
40
- $: {
41
- if ($rendering.resizing === SIZES.PRESET) {
42
- const { preset } = $rendering;
42
+ $effect(() => {
43
+ if (rendering.resizing === SIZES.PRESET) {
44
+ const { preset } = rendering;
43
45
  const [width, height] = getDimensionsForPreset(preset, {
44
46
  pixelsPerInch: 300,
45
- orientation: $rendering.presetOrientation,
47
+ orientation: rendering.presetOrientation,
46
48
  });
47
49
 
48
- rendering.update((curr) => {
49
- return {
50
- ...curr,
51
- width,
52
- height,
53
- };
54
- });
50
+ rendering.width = width;
51
+ rendering.height = height;
55
52
  }
56
- }
53
+ });
57
54
  </script>
58
55
 
59
56
  <Field
60
57
  key="dimensions"
61
- value={[$rendering.width, $rendering.height]}
62
- on:change={handleChangeDimensions}
63
- params={{
64
- step: 1,
65
- suffix: 'px',
66
- locked: false,
67
- }}
58
+ value={dimensions}
59
+ onchange={handleChangeDimensions}
60
+ bind:params={dimensionsParams}
68
61
  disabled={!dimensionsEnabled}
69
62
  />
70
63
  <Field
71
64
  key="canvasSize"
72
- value={$rendering.resizing}
73
- on:change={(event) => {
74
- const resizing = event.detail;
75
- let aspectRatio = 1;
65
+ value={rendering.resizing}
66
+ onchange={(resizing) => {
67
+ exports.pixelsPerInch = resizing === SIZES.PRESET ? 300 : 72;
76
68
 
77
- if (resizing === SIZES.ASPECT_RATIO) {
78
- // compute aspect ratio based on previous props
79
- aspectRatio = $rendering.width / $rendering.height;
69
+ if (rendering.resizing !== SIZES.FIXED && resizing === SIZES.FIXED) {
70
+ rendering.width = rendering.fixedWidth;
71
+ rendering.height = rendering.fixedHeight;
80
72
  }
81
73
 
82
- $exports.pixelsPerInch = resizing === SIZES.PRESET ? 300 : 72;
83
-
84
- rendering.update((curr) => {
85
- return {
86
- ...curr,
87
- resizing,
88
- aspectRatio,
89
- };
90
- });
74
+ rendering.resizing = resizing;
91
75
  }}
92
76
  params={{
93
77
  options: sizes,
94
78
  }}
95
79
  />
96
- {#if $rendering.resizing === SIZES.ASPECT_RATIO}
80
+ {#if rendering.resizing === SIZES.ASPECT_RATIO}
97
81
  <Field
98
82
  key="aspectRatio"
99
- value={$rendering.aspectRatio}
100
- on:change={(event) => {
101
- $rendering.aspectRatio = event.detail;
83
+ value={rendering.aspectRatio}
84
+ onchange={(aspectRatio) => {
85
+ rendering.aspectRatio = aspectRatio;
102
86
  }}
103
87
  params={{
104
88
  step: 0.01,
105
89
  }}
106
90
  />
107
91
  {/if}
108
- {#if $rendering.resizing === SIZES.SCALE}
92
+ {#if rendering.resizing === SIZES.SCALE}
109
93
  <Field
110
94
  key="zoom"
111
- value={$rendering.scale}
112
- on:change={(event) => {
113
- $rendering.scale = event.detail;
95
+ value={rendering.scale}
96
+ onchange={(event) => {
97
+ rendering.scale = event;
114
98
  }}
115
99
  params={{
116
100
  step: 0.01,
117
101
  }}
118
102
  />
119
103
  {/if}
120
- {#if $rendering.resizing === SIZES.PRESET}
104
+ <!-- {#if rendering.resizing === SIZES.PRESET}
121
105
  <Field key="preset">
122
106
  <FieldInputRow --grid-template-columns="1fr 1fr">
123
107
  <Select
124
- value={$rendering.preset}
108
+ value={rendering.preset}
125
109
  options={presets}
126
- on:change={(event) => {
127
- $rendering.preset = event.detail;
110
+ onchange={(preset) => {
111
+ rendering.preset = preset;
128
112
  }}
129
113
  />
130
114
  <Select
131
- value={$rendering.presetOrientation}
115
+ value={rendering.presetOrientation}
132
116
  options={[
133
117
  PRESET_ORIENTATIONS.PORTRAIT,
134
118
  PRESET_ORIENTATIONS.LANDSCAPE,
135
119
  ]}
136
- on:change={(event) => {
137
- $rendering.presetOrientation = event.detail;
120
+ onchange={(presetOrientation) => {
121
+ rendering.presetOrientation = presetOrientation;
138
122
  }}
139
123
  />
140
124
  </FieldInputRow>
141
125
  </Field>
142
- {/if}
126
+ {/if} -->
143
127
 
144
- {#if $rendering.resizing !== SIZES.PRESET}
128
+ {#if rendering.resizing !== SIZES.PRESET}
145
129
  <Field
146
130
  key="pixelRatio"
147
- value={Number($rendering.pixelRatio)}
148
- on:change={(event) => ($rendering.pixelRatio = event.detail)}
131
+ value={Number(rendering.pixelRatio)}
132
+ onchange={(pixelRatio) => (rendering.pixelRatio = pixelRatio)}
149
133
  params={{
150
134
  step: 0.1,
151
135
  }}
152
136
  />
153
137
  {/if}
154
- {#if $sketchesCount > 1 && $monitors.length > 1}
138
+ <!-- {#if $sketchesCount > 1 && $monitors.length > 1}
155
139
  <ParamsMultisampling />
156
- {/if}
140
+ {/if} -->
@@ -1,13 +1,24 @@
1
1
  <script>
2
- import { onDestroy } from 'svelte';
2
+ import { onDestroy, onMount } from 'svelte';
3
3
 
4
- import { rendering } from '../stores/rendering';
4
+ import { rendering } from '../state/rendering.svelte';
5
5
  import Build from './Build.svelte';
6
6
 
7
- let saved = $rendering;
7
+ const { resizing, width, height, pixelRatio, aspectRatio, scale, preset } =
8
+ rendering;
8
9
 
9
10
  onDestroy(() => {
10
- $rendering = saved;
11
+ const prevRendering = {
12
+ resizing,
13
+ width,
14
+ height,
15
+ pixelRatio,
16
+ aspectRatio,
17
+ scale,
18
+ preset,
19
+ };
20
+
21
+ rendering.override(prevRendering);
11
22
  });
12
23
  </script>
13
24
 
@@ -1,6 +1,5 @@
1
1
  <script>
2
- export let width = 24;
3
- export let height = 24;
2
+ let { width = 24, height = width } = $props();
4
3
  </script>
5
4
 
6
5
  <div class="chevrons" style={`width: ${width}px;`}>