fragment-tools 0.1.13 → 0.1.15

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 (184) hide show
  1. package/.prettierignore +1 -2
  2. package/.prettierrc +23 -7
  3. package/README.md +28 -9
  4. package/bin/index.js +70 -10
  5. package/package.json +14 -6
  6. package/src/cli/build.js +125 -0
  7. package/src/cli/create.js +238 -0
  8. package/src/cli/createConfig.js +82 -0
  9. package/src/cli/createFragmentFile.js +70 -0
  10. package/src/cli/getEntries.js +85 -0
  11. package/src/cli/log.js +36 -24
  12. package/src/cli/plugins/check-dependencies.js +88 -42
  13. package/src/cli/plugins/hot-shader-replacement.js +408 -0
  14. package/src/cli/plugins/hot-sketch-reload.js +21 -25
  15. package/src/cli/plugins/save.js +101 -0
  16. package/src/cli/preview.js +55 -0
  17. package/src/cli/prompts.js +260 -0
  18. package/src/cli/run.js +131 -0
  19. package/src/cli/templates/blank/index.js +33 -0
  20. package/src/cli/templates/blank/meta.json +4 -0
  21. package/src/cli/templates/default/index.js +39 -0
  22. package/src/cli/templates/default/meta.json +5 -0
  23. package/src/cli/templates/fragment-gl/index.js +37 -0
  24. package/src/cli/templates/fragment-gl/meta.json +4 -0
  25. package/src/cli/templates/p5/index.js +32 -0
  26. package/src/cli/templates/p5/meta.json +5 -0
  27. package/src/cli/templates/p5-webgl/fragment.fs +14 -0
  28. package/src/cli/templates/p5-webgl/index.js +67 -0
  29. package/src/cli/templates/p5-webgl/meta.json +5 -0
  30. package/src/cli/templates/three-fragment/fragment.fs +10 -0
  31. package/src/cli/templates/three-fragment/index.js +95 -0
  32. package/src/cli/templates/three-fragment/meta.json +5 -0
  33. package/src/cli/templates/three-orthographic/index.js +55 -0
  34. package/src/cli/templates/three-orthographic/meta.json +5 -0
  35. package/src/cli/templates/three-perspective/index.js +52 -0
  36. package/src/cli/templates/three-perspective/meta.json +5 -0
  37. package/src/cli/utils.js +70 -0
  38. package/src/cli/ws.js +87 -78
  39. package/src/client/app/App.svelte +3 -3
  40. package/src/client/app/client.js +55 -39
  41. package/src/client/app/components/IconCross.svelte +18 -18
  42. package/src/client/app/components/Init.svelte +40 -8
  43. package/src/client/app/components/KeyBinding.svelte +22 -22
  44. package/src/client/app/helpers.js +42 -0
  45. package/src/client/app/hooks.js +20 -0
  46. package/src/client/app/inputs/Input.js +9 -9
  47. package/src/client/app/inputs/Keyboard.js +13 -15
  48. package/src/client/app/inputs/MIDI.js +14 -15
  49. package/src/client/app/inputs/Mouse.js +1 -1
  50. package/src/client/app/inputs/Webcam.js +89 -88
  51. package/src/client/app/lib/canvas-recorder/CanvasRecorder.js +41 -21
  52. package/src/client/app/lib/canvas-recorder/FrameRecorder.js +7 -6
  53. package/src/client/app/lib/canvas-recorder/H264Recorder.js +45 -0
  54. package/src/client/app/lib/canvas-recorder/MP4Recorder.js +7 -9
  55. package/src/client/app/lib/canvas-recorder/WebMRecorder.js +3 -4
  56. package/src/client/app/lib/canvas-recorder/mp4.js +1649 -15
  57. package/src/client/app/lib/canvas-recorder/utils.js +33 -17
  58. package/src/client/app/lib/gl/Geometry.js +11 -8
  59. package/src/client/app/lib/gl/Program.js +38 -19
  60. package/src/client/app/lib/gl/Renderer.js +163 -156
  61. package/src/client/app/lib/gl/Texture.js +113 -85
  62. package/src/client/app/lib/gl/index.js +12 -12
  63. package/src/client/app/lib/gl/utils.js +1 -3
  64. package/src/client/app/lib/helpers/frameDebounce.js +30 -30
  65. package/src/client/app/lib/loader/index.js +10 -10
  66. package/src/client/app/lib/loader/loadImage.js +15 -15
  67. package/src/client/app/lib/loader/loadScript.js +1 -1
  68. package/src/client/app/lib/paper-sizes.js +75 -76
  69. package/src/client/app/lib/presets.js +25 -5
  70. package/src/client/app/lib/tempo/Analyser.js +18 -17
  71. package/src/client/app/lib/tempo/Range.js +15 -12
  72. package/src/client/app/lib/tempo/index.js +34 -27
  73. package/src/client/app/modules/AudioAnalyser/Range.svelte +69 -72
  74. package/src/client/app/modules/AudioAnalyser/Spectrum.svelte +20 -19
  75. package/src/client/app/modules/AudioAnalyser.svelte +52 -35
  76. package/src/client/app/modules/Console/ConsoleLine.svelte +193 -172
  77. package/src/client/app/modules/Console.svelte +76 -74
  78. package/src/client/app/modules/Exports.svelte +62 -43
  79. package/src/client/app/modules/MidiPanel.svelte +100 -101
  80. package/src/client/app/modules/Monitor.svelte +57 -57
  81. package/src/client/app/modules/Params.svelte +128 -103
  82. package/src/client/app/renderers/2DRenderer.js +3 -3
  83. package/src/client/app/renderers/FragmentRenderer.js +30 -23
  84. package/src/client/app/renderers/P5GLRenderer.js +144 -0
  85. package/src/client/app/renderers/P5Renderer.js +10 -7
  86. package/src/client/app/renderers/THREERenderer.js +136 -94
  87. package/src/client/app/stores/audioAnalysis.js +3 -4
  88. package/src/client/app/stores/console.js +9 -10
  89. package/src/client/app/stores/errors.js +1 -1
  90. package/src/client/app/stores/exports.js +36 -20
  91. package/src/client/app/stores/index.js +2 -2
  92. package/src/client/app/stores/layout.js +143 -138
  93. package/src/client/app/stores/multisampling.js +4 -4
  94. package/src/client/app/stores/props.js +76 -13
  95. package/src/client/app/stores/renderers.js +26 -15
  96. package/src/client/app/stores/rendering.js +108 -89
  97. package/src/client/app/stores/sketches.js +7 -9
  98. package/src/client/app/stores/time.js +18 -18
  99. package/src/client/app/stores/utils.js +95 -38
  100. package/src/client/app/transitions/fade.js +3 -3
  101. package/src/client/app/transitions/index.js +6 -7
  102. package/src/client/app/transitions/splitX.js +2 -2
  103. package/src/client/app/transitions/splitY.js +2 -2
  104. package/src/client/app/triggers/Keyboard.js +88 -79
  105. package/src/client/app/triggers/MIDI.js +110 -84
  106. package/src/client/app/triggers/Mouse.js +73 -65
  107. package/src/client/app/triggers/Trigger.js +59 -58
  108. package/src/client/app/triggers/index.js +7 -7
  109. package/src/client/app/triggers/shared.js +5 -5
  110. package/src/client/app/ui/Build.svelte +70 -71
  111. package/src/client/app/ui/ErrorOverlay.svelte +118 -104
  112. package/src/client/app/ui/Field.svelte +393 -258
  113. package/src/client/app/ui/FieldGroup.svelte +106 -94
  114. package/src/client/app/ui/FieldSection.svelte +127 -116
  115. package/src/client/app/ui/FieldSpace.svelte +29 -30
  116. package/src/client/app/ui/FieldTrigger.svelte +256 -244
  117. package/src/client/app/ui/FieldTriggers.svelte +46 -46
  118. package/src/client/app/ui/FloatingParams.svelte +29 -30
  119. package/src/client/app/ui/Layout.svelte +31 -32
  120. package/src/client/app/ui/LayoutColumn.svelte +4 -4
  121. package/src/client/app/ui/LayoutComponent.svelte +239 -225
  122. package/src/client/app/ui/LayoutResizer.svelte +195 -176
  123. package/src/client/app/ui/LayoutRoot.svelte +6 -6
  124. package/src/client/app/ui/LayoutRow.svelte +4 -4
  125. package/src/client/app/ui/LayoutToolbar.svelte +191 -194
  126. package/src/client/app/ui/Module.svelte +134 -135
  127. package/src/client/app/ui/ModuleHeaderAction.svelte +81 -78
  128. package/src/client/app/ui/ModuleHeaderButton.svelte +12 -12
  129. package/src/client/app/ui/ModuleHeaderSelect.svelte +47 -37
  130. package/src/client/app/ui/ModuleRenderer.svelte +26 -27
  131. package/src/client/app/ui/OutputRenderer.svelte +112 -105
  132. package/src/client/app/ui/ParamsMultisampling.svelte +96 -95
  133. package/src/client/app/ui/ParamsOutput.svelte +130 -113
  134. package/src/client/app/ui/Preview.svelte +7 -8
  135. package/src/client/app/ui/SelectChevrons.svelte +27 -15
  136. package/src/client/app/ui/SketchRenderer.svelte +780 -667
  137. package/src/client/app/ui/SketchSelect.svelte +50 -44
  138. package/src/client/app/ui/fields/ButtonInput.svelte +61 -48
  139. package/src/client/app/ui/fields/CheckboxInput.svelte +67 -61
  140. package/src/client/app/ui/fields/ColorInput.svelte +294 -238
  141. package/src/client/app/ui/fields/FieldInputRow.svelte +8 -8
  142. package/src/client/app/ui/fields/ImageInput.svelte +123 -121
  143. package/src/client/app/ui/fields/Input.svelte +100 -111
  144. package/src/client/app/ui/fields/IntervalInput.svelte +268 -0
  145. package/src/client/app/ui/fields/ListInput.svelte +96 -96
  146. package/src/client/app/ui/fields/NumberInput.svelte +120 -116
  147. package/src/client/app/ui/fields/ProgressInput.svelte +99 -73
  148. package/src/client/app/ui/fields/Select.svelte +137 -124
  149. package/src/client/app/ui/fields/TextInput.svelte +10 -11
  150. package/src/client/app/ui/fields/VectorInput.svelte +86 -82
  151. package/src/client/app/utils/canvas.utils.js +189 -208
  152. package/src/client/app/utils/color.utils.js +138 -101
  153. package/src/client/app/utils/fields.utils.js +131 -0
  154. package/src/client/app/utils/file.utils.js +209 -37
  155. package/src/client/app/utils/glsl.utils.js +2 -2
  156. package/src/client/app/utils/glslErrors.js +49 -31
  157. package/src/client/app/utils/index.js +32 -29
  158. package/src/client/app/utils/math.utils.js +14 -10
  159. package/src/client/index.html +16 -16
  160. package/src/client/main.js +4 -4
  161. package/src/client/public/css/global.css +26 -16
  162. package/src/cli/db.js +0 -17
  163. package/src/cli/index.js +0 -198
  164. package/src/cli/plugins/db.js +0 -12
  165. package/src/cli/plugins/hot-shader-reload.js +0 -86
  166. package/src/cli/plugins/screenshot.js +0 -46
  167. package/src/cli/server.js +0 -153
  168. package/src/cli/templates/2d.js +0 -15
  169. package/src/cli/templates/blank.js +0 -13
  170. package/src/cli/templates/fragment.js +0 -18
  171. package/src/cli/templates/index.js +0 -27
  172. package/src/cli/templates/p5.js +0 -13
  173. package/src/cli/templates/three-fragment.js +0 -53
  174. package/src/cli/templates/three-orthographic.js +0 -23
  175. package/src/cli/templates/three-perspective.js +0 -20
  176. package/src/client/app/lib/canvas-recorder/FFMPEGRecorder.js +0 -56
  177. package/src/client/app/utils/props.utils.js +0 -51
  178. package/src/client/public/fonts/Inter-Bold.woff2 +0 -0
  179. package/src/client/public/fonts/Inter-Italic.woff2 +0 -0
  180. package/src/client/public/fonts/Inter-Regular.woff2 +0 -0
  181. package/src/client/public/fonts/Inter-SemiBold.woff2 +0 -0
  182. package/src/client/public/js/ffmpeg.min.js +0 -2
  183. package/src/client/public/js/ffmpeg.min.js.map +0 -1
  184. /package/src/cli/templates/{fragment.fs → fragment-gl/fragment.fs} +0 -0
@@ -1,245 +1,301 @@
1
1
  <script>
2
- import { createEventDispatcher } from "svelte";
3
- import * as color from "../../utils/color.utils.js";
4
- import TextInput from "./TextInput.svelte";
5
- import Field from "../Field.svelte";
6
-
7
- export let value;
8
- export let context = null;
9
- export let key = "";
10
-
11
- const dispatch = createEventDispatcher();
12
-
13
- $: format = color.getColorFormat(value);
14
- $: hexValue = color.toHex(value, format);
15
- $: textValue = color.toString(value, format);
16
- $: alpha = 1;
17
- $: hasAlpha = [
18
- color.FORMATS.RGBA_STRING,
19
- color.FORMATS.VEC4_STRING,
20
- color.FORMATS.VEC4_ARRAY,
21
- color.FORMATS.RGBA_OBJECT,
22
- color.FORMATS.HSLA_STRING
23
- ].includes(format);
24
- $: {
25
- if (hasAlpha) {
26
- const [r, g, b, a = 1] = color.toComponents(value);
27
- alpha = a;
28
- } else {
29
- alpha = 1;
30
- }
31
- }
32
-
33
- function dispatchChange() {
34
- const [r, g, b] = color.hexToComponents(hexValue);
35
-
36
- // support THREE.Color
37
- switch (format) {
38
- case color.FORMATS.VEC3_ARRAY:
39
- value[0] = r;
40
- value[1] = g;
41
- value[2] = b;
42
- dispatch('change', value);
43
- break;
44
- case color.FORMATS.VEC4_ARRAY:
45
- value[0] = r;
46
- value[1] = g;
47
- value[2] = b;
48
- value[3] = alpha;
49
- dispatch('change', value);
50
- break;
51
- case color.FORMATS.THREE:
52
- case color.FORMATS.RGB_OBJECT:
53
- value.r = r;
54
- value.g = g;
55
- value.b = b;
56
-
57
- dispatch('change', value);
58
- break;
59
- case color.FORMATS.RGBA_OBJECT:
60
- value.r = r;
61
- value.g = g;
62
- value.b = b;
63
- value.a = alpha;
64
-
65
- dispatch('change', value);
66
- break;
67
- default:
68
- dispatch('change', textValue);
69
- }
70
- }
71
-
72
- function handleBlur() {
73
- dispatchChange();
74
- }
75
-
76
- function onChangeText(event) {
77
- const newColor = event.detail;
78
-
79
- if (color.isColor(newColor)) {
80
- textValue = newColor;
81
- } else {
82
- // newColor is not a color, reset value
83
- textValue = color.toString(value, format);
84
- }
85
-
86
- hexValue = color.toHex(textValue);
87
- dispatchChange();
88
- }
89
-
90
- function onChangeAlpha(event) {
91
- alpha = event.detail;
92
-
93
- const [r, g, b] = color.hexToComponents(hexValue);
94
-
95
- switch(format) {
96
- case color.FORMATS.RGBA_STRING:
97
- case color.FORMATS.RGBA_OBJECT:
98
- textValue = color.componentsToRGBAString([r, g, b, alpha]);
99
- break;
100
- case color.FORMATS.VEC4_STRING:
101
- textValue = color.componentsToVec4String([r, g, b, alpha]);
102
- break;
103
- case color.FORMATS.HSLA_STRING:
104
- const [h, s, l] = color.hslToHSLComponents(textValue);
105
- textValue = color.hslaToHSLAString([h, s, l, alpha]);
106
- break;
107
- }
108
-
109
- dispatchChange();
110
- }
111
-
112
- function onInput(event) {
113
- hexValue = event.currentTarget.value;
114
-
115
- const [r, g, b] = color.hexToComponents(hexValue);
116
-
117
- switch(format) {
118
- case color.FORMATS.RGBA_STRING:
119
- case color.FORMATS.RGBA_OBJECT:
120
- textValue = color.toRGBAString({ r, g, b, a: alpha });
121
- break;
122
- case color.FORMATS.VEC3_STRING:
123
- textValue = color.componentsToVec3String([r, g, b]);
124
- break;
125
- case color.FORMATS.VEC4_STRING:
126
- textValue = color.componentsToVec4String([r, g, b, alpha]);
127
- break;
128
- case color.FORMATS.RGB_STRING:
129
- case color.FORMATS.RGB_OBJECT:
130
- textValue = color.toRGBString(hexValue);
131
- break;
132
- case color.FORMATS.HSL_STRING:
133
- textValue = color.componentsToHSLString([r, g, b]);
134
- break;
135
- case color.FORMATS.HSLA_STRING:
136
- textValue = color.componentsToHSLAString([r, g, b, alpha]);
137
- break;
138
- default:
139
- textValue = color.toString(hexValue);
140
- break;
141
- }
142
-
143
- dispatchChange();
144
- }
145
-
2
+ import { createEventDispatcher } from 'svelte';
3
+ import * as color from '../../utils/color.utils.js';
4
+ import TextInput from './TextInput.svelte';
5
+ import Field from '../Field.svelte';
6
+
7
+ export let value;
8
+ export let context = null;
9
+ export let key = '';
10
+ export let disabled = false;
11
+
12
+ const dispatch = createEventDispatcher();
13
+
14
+ $: format = color.getColorFormat(value);
15
+ $: hexValue = color.toHex(value, format);
16
+ $: textValue = color.toString(value, format);
17
+ $: alpha = 1;
18
+ $: hasAlpha = [
19
+ color.FORMATS.RGBA_STRING,
20
+ color.FORMATS.VEC4_STRING,
21
+ color.FORMATS.VEC4_ARRAY,
22
+ color.FORMATS.RGBA_OBJECT,
23
+ color.FORMATS.HSLA_STRING,
24
+ ].includes(format);
25
+ $: {
26
+ if (hasAlpha) {
27
+ const [r, g, b, a = 1] = color.toComponents(value);
28
+ alpha = a;
29
+ } else {
30
+ alpha = 1;
31
+ }
32
+ }
33
+
34
+ function dispatchChange() {
35
+ const [r, g, b] = color.hexToComponents(hexValue);
36
+
37
+ // support THREE.Color
38
+ switch (format) {
39
+ case color.FORMATS.VEC3_ARRAY:
40
+ value[0] = r;
41
+ value[1] = g;
42
+ value[2] = b;
43
+ dispatch('change', value);
44
+ break;
45
+ case color.FORMATS.VEC4_ARRAY:
46
+ value[0] = r;
47
+ value[1] = g;
48
+ value[2] = b;
49
+ value[3] = alpha;
50
+ dispatch('change', value);
51
+ break;
52
+ case color.FORMATS.THREE:
53
+ case color.FORMATS.RGB_OBJECT:
54
+ value.r = r;
55
+ value.g = g;
56
+ value.b = b;
57
+
58
+ dispatch('change', value);
59
+ break;
60
+ case color.FORMATS.RGBA_OBJECT:
61
+ value.r = r;
62
+ value.g = g;
63
+ value.b = b;
64
+ value.a = alpha;
65
+
66
+ dispatch('change', value);
67
+ break;
68
+ default:
69
+ dispatch('change', textValue);
70
+ }
71
+ }
72
+
73
+ function handleBlur() {
74
+ dispatchChange();
75
+ }
76
+
77
+ function onChangeText(event) {
78
+ const newColor = event.detail;
79
+
80
+ if (color.isColor(newColor)) {
81
+ textValue = newColor;
82
+ } else {
83
+ // newColor is not a color, reset value
84
+ textValue = color.toString(value, format);
85
+ }
86
+
87
+ hexValue = color.toHex(textValue);
88
+ dispatchChange();
89
+ }
90
+
91
+ function onChangeAlpha(event) {
92
+ alpha = event.detail;
93
+
94
+ const [r, g, b] = color.hexToComponents(hexValue);
95
+
96
+ switch (format) {
97
+ case color.FORMATS.RGBA_STRING:
98
+ case color.FORMATS.RGBA_OBJECT:
99
+ textValue = color.componentsToRGBAString([r, g, b, alpha]);
100
+ break;
101
+ case color.FORMATS.VEC4_STRING:
102
+ textValue = color.componentsToVec4String([r, g, b, alpha]);
103
+ break;
104
+ case color.FORMATS.HSLA_STRING:
105
+ const [h, s, l] = color.hslToHSLComponents(textValue);
106
+ textValue = color.hslaToHSLAString([h, s, l, alpha]);
107
+ break;
108
+ }
109
+
110
+ dispatchChange();
111
+ }
112
+
113
+ function onInput(event) {
114
+ hexValue = event.currentTarget.value;
115
+
116
+ const [r, g, b] = color.hexToComponents(hexValue);
117
+
118
+ switch (format) {
119
+ case color.FORMATS.RGBA_STRING:
120
+ case color.FORMATS.RGBA_OBJECT:
121
+ textValue = color.toRGBAString({ r, g, b, a: alpha });
122
+ break;
123
+ case color.FORMATS.VEC3_STRING:
124
+ textValue = color.componentsToVec3String([r, g, b]);
125
+ break;
126
+ case color.FORMATS.VEC4_STRING:
127
+ textValue = color.componentsToVec4String([r, g, b, alpha]);
128
+ break;
129
+ case color.FORMATS.RGB_STRING:
130
+ case color.FORMATS.RGB_OBJECT:
131
+ textValue = color.toRGBString(hexValue);
132
+ break;
133
+ case color.FORMATS.HSL_STRING:
134
+ textValue = color.componentsToHSLString([r, g, b]);
135
+ break;
136
+ case color.FORMATS.HSLA_STRING:
137
+ textValue = color.componentsToHSLAString([r, g, b, alpha]);
138
+ break;
139
+ default:
140
+ textValue = color.toString(hexValue);
141
+ break;
142
+ }
143
+
144
+ dispatchChange();
145
+ }
146
146
  </script>
147
147
 
148
- <div class="color-input">
149
- <div class="layout">
150
- <div class="mirror" style="--currentColor: {hexValue}; --opacity: {alpha}">
151
- {#if hasAlpha }
152
- <svg width="calc(100% - 2px)" height="calc(100% - 2px)" class="alpha-svg">
153
- <pattern id="checker" x="0" y="0" width="7.2" height="7.2" patternUnits="userSpaceOnUse">
154
- <rect fill="white" x="0" width="3.6" height="3.6" y="0"></rect>
155
- <rect fill="grey" x="3.6" width="3.6" height="3.6" y="0"></rect>
156
- <rect fill="white" x="3.6" width="3.6" height="3.6" y="3.6"></rect>
157
- <rect fill="grey" x="0" width="3.6" height="3.6" y="3.6"></rect>
158
- </pattern>
159
- <!-- The canvas with our applied pattern -->
160
- <rect x="0" y="0" width="100%" height="100%" fill="url(#checker)"></rect>
161
- </svg>
162
- {/if}
163
- <!-- svelte-ignore -->
164
- <input class="input" type="color" bind:value={hexValue} on:blur={handleBlur} on:input={onInput} />
165
- </div>
166
- <TextInput {context} {key} bind:value={textValue} on:change={onChangeText} />
167
- </div>
168
- {#if hasAlpha }
169
- <Field
170
- key={`${key}.alpha`}
171
- value={alpha}
172
- params={{label: "alpha", min: 0, max: 1, step: 0.01}}
173
- {context}
174
- on:change={onChangeAlpha}
175
- />
176
- {/if }
148
+ <div class="color-input" class:disabled>
149
+ <div class="layout">
150
+ <div
151
+ class="mirror"
152
+ style="--currentColor: {hexValue}; --opacity: {alpha}"
153
+ >
154
+ {#if hasAlpha}
155
+ <svg
156
+ width="calc(100% - 2px)"
157
+ height="calc(100% - 2px)"
158
+ class="alpha-svg"
159
+ >
160
+ <pattern
161
+ id="checker"
162
+ x="0"
163
+ y="0"
164
+ width="7.2"
165
+ height="7.2"
166
+ patternUnits="userSpaceOnUse"
167
+ >
168
+ <rect
169
+ fill="white"
170
+ x="0"
171
+ width="3.6"
172
+ height="3.6"
173
+ y="0"
174
+ />
175
+ <rect
176
+ fill="grey"
177
+ x="3.6"
178
+ width="3.6"
179
+ height="3.6"
180
+ y="0"
181
+ />
182
+ <rect
183
+ fill="white"
184
+ x="3.6"
185
+ width="3.6"
186
+ height="3.6"
187
+ y="3.6"
188
+ />
189
+ <rect
190
+ fill="grey"
191
+ x="0"
192
+ width="3.6"
193
+ height="3.6"
194
+ y="3.6"
195
+ />
196
+ </pattern>
197
+ <!-- The canvas with our applied pattern -->
198
+ <rect
199
+ x="0"
200
+ y="0"
201
+ width="100%"
202
+ height="100%"
203
+ fill="url(#checker)"
204
+ />
205
+ </svg>
206
+ {/if}
207
+ <!-- svelte-ignore -->
208
+ <input
209
+ class="input"
210
+ type="color"
211
+ disabled={disabled ? 'disabled' : null}
212
+ bind:value={hexValue}
213
+ on:blur={handleBlur}
214
+ on:input={onInput}
215
+ />
216
+ </div>
217
+ <TextInput
218
+ {context}
219
+ {key}
220
+ {disabled}
221
+ bind:value={textValue}
222
+ on:change={onChangeText}
223
+ />
224
+ </div>
225
+ {#if hasAlpha}
226
+ <Field
227
+ key={`${key}.alpha`}
228
+ value={alpha}
229
+ params={{ label: 'alpha', min: 0, max: 1, step: 0.01 }}
230
+ {context}
231
+ on:change={onChangeAlpha}
232
+ />
233
+ {/if}
177
234
  </div>
178
235
 
179
236
  <style>
180
- .color-input {
181
- position: relative;
182
- width: 100%;
183
- }
184
-
185
- .layout {
186
- display: grid;
187
- column-gap: var(--column-gap);
188
- grid-template-columns: 0.35fr 0.65fr;
189
- align-items: center;
190
- }
191
-
192
- .alpha-svg {
193
- position: absolute;
194
- top: 1px;
195
- left: 1px;
196
- right: 1px;
197
- bottom: 1px;
198
-
199
- border-radius: calc(var(--border-radius-input) * 0.5);
200
- }
201
-
202
- .mirror {
203
- position: relative;
204
-
205
- height: var(--height-input);
206
-
207
- border-radius: var(--border-radius-input);
208
- box-shadow: inset 0 0 0 1px var(--color-border-input);
209
- }
210
-
211
- .mirror:after {
212
- --gap: 1px;
213
-
214
- content: '';
215
- position: absolute;
216
- z-index: 1;
217
- top: var(--gap);
218
- left: var(--gap);
219
- right: var(--gap);
220
- bottom: var(--gap);
221
-
222
- background-color: var(--currentColor);
223
- border-radius: calc(var(--border-radius-input) * 0.5);
224
- opacity: var(--opacity, 1);
225
- pointer-events: none;
226
- }
227
-
228
- .mirror:hover {
229
- box-shadow: inset 0 0 0 1px var(--box-shadow-color, var(--color-active));
230
- }
231
-
232
- .mirror:focus-within {
233
- box-shadow: 0 0 0 2px var(--box-shadow-color, var(--color-active));
234
- }
235
-
236
- .input {
237
- width: 100%;
238
- height: 100%;
239
- opacity: 0;
240
- cursor: pointer;
241
- background: transparent;
242
- border: none;
243
- }
244
-
237
+ .color-input {
238
+ position: relative;
239
+ width: 100%;
240
+ }
241
+
242
+ .layout {
243
+ display: grid;
244
+ column-gap: var(--column-gap);
245
+ grid-template-columns: 0.35fr 0.65fr;
246
+ align-items: center;
247
+ }
248
+
249
+ .alpha-svg {
250
+ position: absolute;
251
+ top: 1px;
252
+ left: 1px;
253
+ right: 1px;
254
+ bottom: 1px;
255
+
256
+ border-radius: calc(var(--border-radius-input) * 0.5);
257
+ }
258
+
259
+ .mirror {
260
+ position: relative;
261
+
262
+ height: var(--height-input);
263
+
264
+ border-radius: var(--border-radius-input);
265
+ box-shadow: inset 0 0 0 1px var(--color-border-input);
266
+ }
267
+
268
+ .mirror:after {
269
+ --gap: 1px;
270
+
271
+ content: '';
272
+ position: absolute;
273
+ z-index: 1;
274
+ top: var(--gap);
275
+ left: var(--gap);
276
+ right: var(--gap);
277
+ bottom: var(--gap);
278
+
279
+ background-color: var(--currentColor);
280
+ border-radius: calc(var(--border-radius-input) * 0.5);
281
+ opacity: var(--opacity, 1);
282
+ pointer-events: none;
283
+ }
284
+
285
+ .mirror:hover {
286
+ box-shadow: inset 0 0 0 1px var(--box-shadow-color, var(--color-active));
287
+ }
288
+
289
+ .mirror:focus-within {
290
+ box-shadow: 0 0 0 2px var(--box-shadow-color, var(--color-active));
291
+ }
292
+
293
+ .input {
294
+ width: 100%;
295
+ height: 100%;
296
+ opacity: 0;
297
+ cursor: pointer;
298
+ background: transparent;
299
+ border: none;
300
+ }
245
301
  </style>
@@ -1,13 +1,13 @@
1
1
  <div class="row">
2
- <slot></slot>
2
+ <slot />
3
3
  </div>
4
4
 
5
5
  <style>
6
- .row {
7
- display: grid;
8
- width: 100%;
9
- column-gap: var(--column-gap);
10
- grid-template-columns: var(--grid-template-columns, 1fr);
11
- align-items: center;
12
- }
6
+ .row {
7
+ display: grid;
8
+ width: 100%;
9
+ column-gap: var(--column-gap);
10
+ grid-template-columns: var(--grid-template-columns, 1fr);
11
+ align-items: center;
12
+ }
13
13
  </style>