@paper-design/shaders 0.0.0-canary.0d8316e
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 +201 -0
- package/NOTICE +5 -0
- package/README.md +7 -0
- package/dist/empty-pixel.d.ts +1 -0
- package/dist/empty-pixel.js +10 -0
- package/dist/empty-pixel.js.map +7 -0
- package/dist/get-shader-color-from-string.d.ts +3 -0
- package/dist/get-shader-color-from-string.js +101 -0
- package/dist/get-shader-color-from-string.js.map +7 -0
- package/dist/get-shader-noise-texture.d.ts +1 -0
- package/dist/get-shader-noise-texture.js +18 -0
- package/dist/get-shader-noise-texture.js.map +7 -0
- package/dist/html-in-canvas.d.ts +35 -0
- package/dist/html-in-canvas.js +79 -0
- package/dist/html-in-canvas.js.map +7 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.js +196 -0
- package/dist/index.js.map +7 -0
- package/dist/shader-color-spaces.d.ts +6 -0
- package/dist/shader-color-spaces.js +96 -0
- package/dist/shader-color-spaces.js.map +7 -0
- package/dist/shader-mount.d.ts +151 -0
- package/dist/shader-mount.js +605 -0
- package/dist/shader-mount.js.map +7 -0
- package/dist/shader-sizing.d.ts +30 -0
- package/dist/shader-sizing.js +38 -0
- package/dist/shader-sizing.js.map +7 -0
- package/dist/shader-utils.d.ts +10 -0
- package/dist/shader-utils.js +131 -0
- package/dist/shader-utils.js.map +7 -0
- package/dist/shaders/color-panels.d.ts +70 -0
- package/dist/shaders/color-panels.js +224 -0
- package/dist/shaders/color-panels.js.map +7 -0
- package/dist/shaders/dithering.d.ts +62 -0
- package/dist/shaders/dithering.js +271 -0
- package/dist/shaders/dithering.js.map +7 -0
- package/dist/shaders/dot-grid.d.ts +65 -0
- package/dist/shaders/dot-grid.js +110 -0
- package/dist/shaders/dot-grid.js.map +7 -0
- package/dist/shaders/dot-orbit.d.ts +57 -0
- package/dist/shaders/dot-orbit.js +123 -0
- package/dist/shaders/dot-orbit.js.map +7 -0
- package/dist/shaders/fluted-glass.d.ts +115 -0
- package/dist/shaders/fluted-glass.js +361 -0
- package/dist/shaders/fluted-glass.js.map +7 -0
- package/dist/shaders/gem-smoke.d.ts +96 -0
- package/dist/shaders/gem-smoke.js +573 -0
- package/dist/shaders/gem-smoke.js.map +7 -0
- package/dist/shaders/god-rays.d.ts +67 -0
- package/dist/shaders/god-rays.js +133 -0
- package/dist/shaders/god-rays.js.map +7 -0
- package/dist/shaders/grain-gradient.d.ts +80 -0
- package/dist/shaders/grain-gradient.js +301 -0
- package/dist/shaders/grain-gradient.js.map +7 -0
- package/dist/shaders/halftone-cmyk.d.ts +107 -0
- package/dist/shaders/halftone-cmyk.js +319 -0
- package/dist/shaders/halftone-cmyk.js.map +7 -0
- package/dist/shaders/halftone-dots.d.ts +83 -0
- package/dist/shaders/halftone-dots.js +345 -0
- package/dist/shaders/halftone-dots.js.map +7 -0
- package/dist/shaders/heatmap.d.ts +66 -0
- package/dist/shaders/heatmap.js +384 -0
- package/dist/shaders/heatmap.js.map +7 -0
- package/dist/shaders/image-dithering.d.ts +66 -0
- package/dist/shaders/image-dithering.js +209 -0
- package/dist/shaders/image-dithering.js.map +7 -0
- package/dist/shaders/lens-distortion.d.ts +100 -0
- package/dist/shaders/lens-distortion.js +290 -0
- package/dist/shaders/lens-distortion.js.map +7 -0
- package/dist/shaders/liquid-metal.d.ts +89 -0
- package/dist/shaders/liquid-metal.js +633 -0
- package/dist/shaders/liquid-metal.js.map +7 -0
- package/dist/shaders/mesh-gradient.d.ts +52 -0
- package/dist/shaders/mesh-gradient.js +131 -0
- package/dist/shaders/mesh-gradient.js.map +7 -0
- package/dist/shaders/metaballs.d.ts +51 -0
- package/dist/shaders/metaballs.js +111 -0
- package/dist/shaders/metaballs.js.map +7 -0
- package/dist/shaders/neuro-noise.d.ts +47 -0
- package/dist/shaders/neuro-noise.js +77 -0
- package/dist/shaders/neuro-noise.js.map +7 -0
- package/dist/shaders/paper-texture.d.ts +113 -0
- package/dist/shaders/paper-texture.js +541 -0
- package/dist/shaders/paper-texture.js.map +7 -0
- package/dist/shaders/perlin-noise.d.ts +52 -0
- package/dist/shaders/perlin-noise.js +167 -0
- package/dist/shaders/perlin-noise.js.map +7 -0
- package/dist/shaders/pulsing-border.d.ts +98 -0
- package/dist/shaders/pulsing-border.js +239 -0
- package/dist/shaders/pulsing-border.js.map +7 -0
- package/dist/shaders/simplex-noise.d.ts +45 -0
- package/dist/shaders/simplex-noise.js +92 -0
- package/dist/shaders/simplex-noise.js.map +7 -0
- package/dist/shaders/smoke-ring.d.ts +61 -0
- package/dist/shaders/smoke-ring.js +133 -0
- package/dist/shaders/smoke-ring.js.map +7 -0
- package/dist/shaders/spiral.d.ts +61 -0
- package/dist/shaders/spiral.js +83 -0
- package/dist/shaders/spiral.js.map +7 -0
- package/dist/shaders/static-mesh-gradient.d.ts +63 -0
- package/dist/shaders/static-mesh-gradient.js +131 -0
- package/dist/shaders/static-mesh-gradient.js.map +7 -0
- package/dist/shaders/static-radial-gradient.d.ts +72 -0
- package/dist/shaders/static-radial-gradient.js +188 -0
- package/dist/shaders/static-radial-gradient.js.map +7 -0
- package/dist/shaders/swirl.d.ts +63 -0
- package/dist/shaders/swirl.js +104 -0
- package/dist/shaders/swirl.js.map +7 -0
- package/dist/shaders/voronoi.d.ts +65 -0
- package/dist/shaders/voronoi.js +139 -0
- package/dist/shaders/voronoi.js.map +7 -0
- package/dist/shaders/warp.d.ts +70 -0
- package/dist/shaders/warp.js +130 -0
- package/dist/shaders/warp.js.map +7 -0
- package/dist/shaders/water.d.ts +63 -0
- package/dist/shaders/water.js +135 -0
- package/dist/shaders/water.js.map +7 -0
- package/dist/shaders/waves.d.ts +53 -0
- package/dist/shaders/waves.js +66 -0
- package/dist/shaders/waves.js.map +7 -0
- package/dist/types.d.ts +3 -0
- package/dist/types.js +6 -0
- package/dist/types.js.map +7 -0
- package/dist/vertex-shader.d.ts +2 -0
- package/dist/vertex-shader.js +163 -0
- package/dist/vertex-shader.js.map +7 -0
- package/package.json +29 -0
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js';
|
|
2
|
+
/**
|
|
3
|
+
* Static line pattern configurable into textures ranging from sharp zigzags to smooth flowing waves.
|
|
4
|
+
*
|
|
5
|
+
* Fragment shader uniforms:
|
|
6
|
+
* - u_colorFront (vec4): Foreground color in RGBA
|
|
7
|
+
* - u_colorBack (vec4): Background color in RGBA
|
|
8
|
+
* - u_shape (float): Line shape, 0 = zigzag, 1 = sine, 2-3 = irregular waves, fractional values morph between shapes, needs amplitude > 0, frequency > 0 (0 to 3)
|
|
9
|
+
* - u_amplitude (float): Wave amplitude, at frequency = 0 it only shifts the lines (0 to 1)
|
|
10
|
+
* - u_frequency (float): Wave frequency, needs amplitude > 0 (0 to 2)
|
|
11
|
+
* - u_spacing (float): Space between every two wavy lines (0 to 2)
|
|
12
|
+
* - u_proportion (float): Blend point between front and back colors, 0.5 = equal distribution (0 to 1)
|
|
13
|
+
* - u_softness (float): Color transition sharpness, 0 = hard edge, 1 = smooth gradient (0 to 1)
|
|
14
|
+
*
|
|
15
|
+
* Vertex shader outputs (used in fragment shader):
|
|
16
|
+
* - v_patternUV (vec2): UV coordinates for pattern with global sizing (rotation, scale, offset, etc) applied
|
|
17
|
+
*
|
|
18
|
+
* Vertex shader uniforms:
|
|
19
|
+
* - u_resolution (vec2): Canvas resolution in pixels
|
|
20
|
+
* - u_pixelRatio (float): Device pixel ratio
|
|
21
|
+
* - u_originX (float): Reference point for positioning world width in the canvas (0 to 1)
|
|
22
|
+
* - u_originY (float): Reference point for positioning world height in the canvas (0 to 1)
|
|
23
|
+
* - u_worldWidth (float): Virtual width of the graphic before it's scaled to fit the canvas
|
|
24
|
+
* - u_worldHeight (float): Virtual height of the graphic before it's scaled to fit the canvas
|
|
25
|
+
* - u_fit (float): How to fit the rendered shader into the canvas dimensions (0 = none, 1 = contain, 2 = cover)
|
|
26
|
+
* - u_scale (float): Overall zoom level of the graphics (0.01 to 4)
|
|
27
|
+
* - u_rotation (float): Overall rotation angle of the graphics in degrees (0 to 360)
|
|
28
|
+
* - u_offsetX (float): Horizontal offset of the graphics center (-1 to 1)
|
|
29
|
+
* - u_offsetY (float): Vertical offset of the graphics center (-1 to 1)
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
export declare const wavesFragmentShader: string;
|
|
33
|
+
export interface WavesUniforms extends ShaderSizingUniforms {
|
|
34
|
+
u_colorFront: [number, number, number, number];
|
|
35
|
+
u_colorBack: [number, number, number, number];
|
|
36
|
+
u_shape: number;
|
|
37
|
+
u_frequency: number;
|
|
38
|
+
u_amplitude: number;
|
|
39
|
+
u_spacing: number;
|
|
40
|
+
u_proportion: number;
|
|
41
|
+
u_softness: number;
|
|
42
|
+
}
|
|
43
|
+
export interface WavesParams extends ShaderSizingParams {
|
|
44
|
+
colorFront?: string;
|
|
45
|
+
colorBack?: string;
|
|
46
|
+
rotation?: number;
|
|
47
|
+
shape?: number;
|
|
48
|
+
frequency?: number;
|
|
49
|
+
amplitude?: number;
|
|
50
|
+
spacing?: number;
|
|
51
|
+
proportion?: number;
|
|
52
|
+
softness?: number;
|
|
53
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
2
|
+
* Paper Shaders *
|
|
3
|
+
* https://github.com/paper-design/shaders *
|
|
4
|
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
5
|
+
|
|
6
|
+
import {} from "../shader-sizing.js";
|
|
7
|
+
import { declarePI } from "../shader-utils.js";
|
|
8
|
+
const wavesFragmentShader = `#version 300 es
|
|
9
|
+
precision mediump float;
|
|
10
|
+
|
|
11
|
+
uniform vec4 u_colorFront;
|
|
12
|
+
uniform vec4 u_colorBack;
|
|
13
|
+
uniform float u_shape;
|
|
14
|
+
uniform float u_frequency;
|
|
15
|
+
uniform float u_amplitude;
|
|
16
|
+
uniform float u_spacing;
|
|
17
|
+
uniform float u_proportion;
|
|
18
|
+
uniform float u_softness;
|
|
19
|
+
|
|
20
|
+
in vec2 v_patternUV;
|
|
21
|
+
|
|
22
|
+
out vec4 fragColor;
|
|
23
|
+
|
|
24
|
+
${declarePI}
|
|
25
|
+
|
|
26
|
+
void main() {
|
|
27
|
+
vec2 shape_uv = v_patternUV;
|
|
28
|
+
shape_uv *= 4.;
|
|
29
|
+
|
|
30
|
+
float wave = .5 * cos(shape_uv.x * u_frequency * TWO_PI);
|
|
31
|
+
float zigzag = 2. * abs(fract(shape_uv.x * u_frequency) - .5);
|
|
32
|
+
float irregular = sin(shape_uv.x * .25 * u_frequency * TWO_PI) * cos(shape_uv.x * u_frequency * TWO_PI);
|
|
33
|
+
float irregular2 = .75 * (sin(shape_uv.x * u_frequency * TWO_PI) + .5 * cos(shape_uv.x * .5 * u_frequency * TWO_PI));
|
|
34
|
+
|
|
35
|
+
float offset = mix(zigzag, wave, smoothstep(0., 1., u_shape));
|
|
36
|
+
offset = mix(offset, irregular, smoothstep(1., 2., u_shape));
|
|
37
|
+
offset = mix(offset, irregular2, smoothstep(2., 3., u_shape));
|
|
38
|
+
offset *= 2. * u_amplitude;
|
|
39
|
+
|
|
40
|
+
float spacing = (.001 + u_spacing);
|
|
41
|
+
float shape = .5 + .5 * sin((shape_uv.y + offset) * PI / spacing);
|
|
42
|
+
|
|
43
|
+
float aa = .0001 + fwidth(shape);
|
|
44
|
+
float dc = 1. - clamp(u_proportion, 0., 1.);
|
|
45
|
+
float e0 = dc - u_softness - aa;
|
|
46
|
+
float e1 = dc + u_softness + aa;
|
|
47
|
+
float res = smoothstep(min(e0, e1), max(e0, e1), shape);
|
|
48
|
+
|
|
49
|
+
vec3 fgColor = u_colorFront.rgb * u_colorFront.a;
|
|
50
|
+
float fgOpacity = u_colorFront.a;
|
|
51
|
+
vec3 bgColor = u_colorBack.rgb * u_colorBack.a;
|
|
52
|
+
float bgOpacity = u_colorBack.a;
|
|
53
|
+
|
|
54
|
+
vec3 color = fgColor * res;
|
|
55
|
+
float opacity = fgOpacity * res;
|
|
56
|
+
|
|
57
|
+
color += bgColor * (1. - opacity);
|
|
58
|
+
opacity += bgOpacity * (1. - opacity);
|
|
59
|
+
|
|
60
|
+
fragColor = vec4(color, opacity);
|
|
61
|
+
}
|
|
62
|
+
`;
|
|
63
|
+
export {
|
|
64
|
+
wavesFragmentShader
|
|
65
|
+
};
|
|
66
|
+
//# sourceMappingURL=waves.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/shaders/waves.ts"],
|
|
4
|
+
"sourcesContent": ["import { type ShaderSizingParams, type ShaderSizingUniforms } from '../shader-sizing.js';\nimport { declarePI } from '../shader-utils.js';\n\n/**\n * Static line pattern configurable into textures ranging from sharp zigzags to smooth flowing waves.\n *\n * Fragment shader uniforms:\n * - u_colorFront (vec4): Foreground color in RGBA\n * - u_colorBack (vec4): Background color in RGBA\n * - u_shape (float): Line shape, 0 = zigzag, 1 = sine, 2-3 = irregular waves, fractional values morph between shapes, needs amplitude > 0, frequency > 0 (0 to 3)\n * - u_amplitude (float): Wave amplitude, at frequency = 0 it only shifts the lines (0 to 1)\n * - u_frequency (float): Wave frequency, needs amplitude > 0 (0 to 2)\n * - u_spacing (float): Space between every two wavy lines (0 to 2)\n * - u_proportion (float): Blend point between front and back colors, 0.5 = equal distribution (0 to 1)\n * - u_softness (float): Color transition sharpness, 0 = hard edge, 1 = smooth gradient (0 to 1)\n *\n * Vertex shader outputs (used in fragment shader):\n * - v_patternUV (vec2): UV coordinates for pattern with global sizing (rotation, scale, offset, etc) applied\n *\n * Vertex shader uniforms:\n * - u_resolution (vec2): Canvas resolution in pixels\n * - u_pixelRatio (float): Device pixel ratio\n * - u_originX (float): Reference point for positioning world width in the canvas (0 to 1)\n * - u_originY (float): Reference point for positioning world height in the canvas (0 to 1)\n * - u_worldWidth (float): Virtual width of the graphic before it's scaled to fit the canvas\n * - u_worldHeight (float): Virtual height of the graphic before it's scaled to fit the canvas\n * - u_fit (float): How to fit the rendered shader into the canvas dimensions (0 = none, 1 = contain, 2 = cover)\n * - u_scale (float): Overall zoom level of the graphics (0.01 to 4)\n * - u_rotation (float): Overall rotation angle of the graphics in degrees (0 to 360)\n * - u_offsetX (float): Horizontal offset of the graphics center (-1 to 1)\n * - u_offsetY (float): Vertical offset of the graphics center (-1 to 1)\n *\n */\n\n// language=GLSL\nexport const wavesFragmentShader: string = `#version 300 es\nprecision mediump float;\n\nuniform vec4 u_colorFront;\nuniform vec4 u_colorBack;\nuniform float u_shape;\nuniform float u_frequency;\nuniform float u_amplitude;\nuniform float u_spacing;\nuniform float u_proportion;\nuniform float u_softness;\n\nin vec2 v_patternUV;\n\nout vec4 fragColor;\n\n${ declarePI }\n\nvoid main() {\n vec2 shape_uv = v_patternUV;\n shape_uv *= 4.;\n\n float wave = .5 * cos(shape_uv.x * u_frequency * TWO_PI);\n float zigzag = 2. * abs(fract(shape_uv.x * u_frequency) - .5);\n float irregular = sin(shape_uv.x * .25 * u_frequency * TWO_PI) * cos(shape_uv.x * u_frequency * TWO_PI);\n float irregular2 = .75 * (sin(shape_uv.x * u_frequency * TWO_PI) + .5 * cos(shape_uv.x * .5 * u_frequency * TWO_PI));\n\n float offset = mix(zigzag, wave, smoothstep(0., 1., u_shape));\n offset = mix(offset, irregular, smoothstep(1., 2., u_shape));\n offset = mix(offset, irregular2, smoothstep(2., 3., u_shape));\n offset *= 2. * u_amplitude;\n\n float spacing = (.001 + u_spacing);\n float shape = .5 + .5 * sin((shape_uv.y + offset) * PI / spacing);\n\n float aa = .0001 + fwidth(shape);\n float dc = 1. - clamp(u_proportion, 0., 1.);\n float e0 = dc - u_softness - aa;\n float e1 = dc + u_softness + aa;\n float res = smoothstep(min(e0, e1), max(e0, e1), shape);\n\n vec3 fgColor = u_colorFront.rgb * u_colorFront.a;\n float fgOpacity = u_colorFront.a;\n vec3 bgColor = u_colorBack.rgb * u_colorBack.a;\n float bgOpacity = u_colorBack.a;\n\n vec3 color = fgColor * res;\n float opacity = fgOpacity * res;\n\n color += bgColor * (1. - opacity);\n opacity += bgOpacity * (1. - opacity);\n\n fragColor = vec4(color, opacity);\n}\n`;\n\nexport interface WavesUniforms extends ShaderSizingUniforms {\n u_colorFront: [number, number, number, number];\n u_colorBack: [number, number, number, number];\n u_shape: number;\n u_frequency: number;\n u_amplitude: number;\n u_spacing: number;\n u_proportion: number;\n u_softness: number;\n}\n\nexport interface WavesParams extends ShaderSizingParams {\n colorFront?: string;\n colorBack?: string;\n rotation?: number;\n shape?: number;\n frequency?: number;\n amplitude?: number;\n spacing?: number;\n proportion?: number;\n softness?: number;\n}\n"],
|
|
5
|
+
"mappings": ";;;;;AAAA,eAAmE;AACnE,SAAS,iBAAiB;AAkCnB,MAAM,sBAA8B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAgBxC,SAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/types.d.ts
ADDED
package/dist/types.js
ADDED
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
/** Vertex shader for the shader mount */
|
|
2
|
+
export declare const vertexShaderSource = "#version 300 es\nprecision mediump float;\n\nlayout(location = 0) in vec4 a_position;\n\nuniform vec2 u_resolution;\nuniform float u_pixelRatio;\nuniform float u_imageAspectRatio;\nuniform float u_imageIsHtml;\nuniform float u_originX;\nuniform float u_originY;\nuniform float u_worldWidth;\nuniform float u_worldHeight;\nuniform float u_fit;\nuniform float u_scale;\nuniform float u_rotation;\nuniform float u_offsetX;\nuniform float u_offsetY;\n\nout vec2 v_objectUV;\nout vec2 v_objectBoxSize;\nout vec2 v_responsiveUV;\nout vec2 v_responsiveBoxGivenSize;\nout vec2 v_patternUV;\nout vec2 v_patternBoxSize;\nout vec2 v_imageUV;\n\nvec3 getBoxSize(float boxRatio, vec2 givenBoxSize) {\n vec2 box = vec2(0.);\n // fit = none\n box.x = boxRatio * min(givenBoxSize.x / boxRatio, givenBoxSize.y);\n float noFitBoxWidth = box.x;\n if (u_fit == 1.) { // fit = contain\n box.x = boxRatio * min(u_resolution.x / boxRatio, u_resolution.y);\n } else if (u_fit == 2.) { // fit = cover\n box.x = boxRatio * max(u_resolution.x / boxRatio, u_resolution.y);\n }\n box.y = box.x / boxRatio;\n return vec3(box, noFitBoxWidth);\n}\n\nvoid main() {\n gl_Position = a_position;\n\n vec2 uv = gl_Position.xy * .5;\n vec2 boxOrigin = vec2(.5 - u_originX, u_originY - .5);\n vec2 givenBoxSize = vec2(u_worldWidth, u_worldHeight);\n givenBoxSize = max(givenBoxSize, vec2(1.)) * u_pixelRatio;\n float r = u_rotation * 3.14159265358979323846 / 180.;\n mat2 graphicRotation = mat2(cos(r), sin(r), -sin(r), cos(r));\n vec2 graphicOffset = vec2(-u_offsetX, u_offsetY);\n\n\n // ===================================================\n\n float fixedRatio = 1.;\n vec2 fixedRatioBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n\n v_objectBoxSize = getBoxSize(fixedRatio, fixedRatioBoxGivenSize).xy;\n vec2 objectWorldScale = u_resolution.xy / v_objectBoxSize;\n\n v_objectUV = uv;\n v_objectUV *= objectWorldScale;\n v_objectUV += boxOrigin * (objectWorldScale - 1.);\n v_objectUV += graphicOffset;\n v_objectUV /= u_scale;\n v_objectUV = graphicRotation * v_objectUV;\n\n // ===================================================\n\n v_responsiveBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n float responsiveRatio = v_responsiveBoxGivenSize.x / v_responsiveBoxGivenSize.y;\n vec2 responsiveBoxSize = getBoxSize(responsiveRatio, v_responsiveBoxGivenSize).xy;\n vec2 responsiveBoxScale = u_resolution.xy / responsiveBoxSize;\n\n #ifdef ADD_HELPERS\n v_responsiveHelperBox = uv;\n v_responsiveHelperBox *= responsiveBoxScale;\n v_responsiveHelperBox += boxOrigin * (responsiveBoxScale - 1.);\n #endif\n\n v_responsiveUV = uv;\n v_responsiveUV *= responsiveBoxScale;\n v_responsiveUV += boxOrigin * (responsiveBoxScale - 1.);\n v_responsiveUV += graphicOffset;\n v_responsiveUV /= u_scale;\n v_responsiveUV.x *= responsiveRatio;\n v_responsiveUV = graphicRotation * v_responsiveUV;\n v_responsiveUV.x /= responsiveRatio;\n\n // ===================================================\n\n float patternBoxRatio = givenBoxSize.x / givenBoxSize.y;\n vec2 patternBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n patternBoxRatio = patternBoxGivenSize.x / patternBoxGivenSize.y;\n\n vec3 boxSizeData = getBoxSize(patternBoxRatio, patternBoxGivenSize);\n v_patternBoxSize = boxSizeData.xy;\n float patternBoxNoFitBoxWidth = boxSizeData.z;\n vec2 patternBoxScale = u_resolution.xy / v_patternBoxSize;\n\n v_patternUV = uv;\n v_patternUV += graphicOffset / patternBoxScale;\n v_patternUV += boxOrigin;\n v_patternUV -= boxOrigin / patternBoxScale;\n v_patternUV *= u_resolution.xy;\n v_patternUV /= u_pixelRatio;\n if (u_fit > 0.) {\n v_patternUV *= (patternBoxNoFitBoxWidth / v_patternBoxSize.x);\n }\n v_patternUV /= u_scale;\n v_patternUV = graphicRotation * v_patternUV;\n v_patternUV += boxOrigin / patternBoxScale;\n v_patternUV -= boxOrigin;\n // x100 is a default multiplier between vertex and fragmant shaders\n // we use it to avoid UV presision issues\n v_patternUV *= .01;\n\n // ===================================================\n\n v_imageUV = uv;\n if (u_imageIsHtml == 0.) {\n vec2 imageBoxSize;\n if (u_fit == 1.) { // contain\n imageBoxSize.x = min(u_resolution.x / u_imageAspectRatio, u_resolution.y) * u_imageAspectRatio;\n } else if (u_fit == 2.) { // cover\n imageBoxSize.x = max(u_resolution.x / u_imageAspectRatio, u_resolution.y) * u_imageAspectRatio;\n } else {\n imageBoxSize.x = min(10.0, 10.0 / u_imageAspectRatio * u_imageAspectRatio);\n }\n imageBoxSize.y = imageBoxSize.x / u_imageAspectRatio;\n vec2 imageBoxScale = u_resolution.xy / imageBoxSize;\n\n v_imageUV *= imageBoxScale;\n v_imageUV += boxOrigin * (imageBoxScale - 1.);\n v_imageUV += graphicOffset;\n v_imageUV /= u_scale;\n v_imageUV.x *= u_imageAspectRatio;\n v_imageUV = graphicRotation * v_imageUV;\n v_imageUV.x /= u_imageAspectRatio;\n }\n\n v_imageUV += .5;\n v_imageUV.y = 1. - v_imageUV.y;\n}";
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/* * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
2
|
+
* Paper Shaders *
|
|
3
|
+
* https://github.com/paper-design/shaders *
|
|
4
|
+
* * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
5
|
+
|
|
6
|
+
const vertexShaderSource = `#version 300 es
|
|
7
|
+
precision mediump float;
|
|
8
|
+
|
|
9
|
+
layout(location = 0) in vec4 a_position;
|
|
10
|
+
|
|
11
|
+
uniform vec2 u_resolution;
|
|
12
|
+
uniform float u_pixelRatio;
|
|
13
|
+
uniform float u_imageAspectRatio;
|
|
14
|
+
uniform float u_imageIsHtml;
|
|
15
|
+
uniform float u_originX;
|
|
16
|
+
uniform float u_originY;
|
|
17
|
+
uniform float u_worldWidth;
|
|
18
|
+
uniform float u_worldHeight;
|
|
19
|
+
uniform float u_fit;
|
|
20
|
+
uniform float u_scale;
|
|
21
|
+
uniform float u_rotation;
|
|
22
|
+
uniform float u_offsetX;
|
|
23
|
+
uniform float u_offsetY;
|
|
24
|
+
|
|
25
|
+
out vec2 v_objectUV;
|
|
26
|
+
out vec2 v_objectBoxSize;
|
|
27
|
+
out vec2 v_responsiveUV;
|
|
28
|
+
out vec2 v_responsiveBoxGivenSize;
|
|
29
|
+
out vec2 v_patternUV;
|
|
30
|
+
out vec2 v_patternBoxSize;
|
|
31
|
+
out vec2 v_imageUV;
|
|
32
|
+
|
|
33
|
+
vec3 getBoxSize(float boxRatio, vec2 givenBoxSize) {
|
|
34
|
+
vec2 box = vec2(0.);
|
|
35
|
+
// fit = none
|
|
36
|
+
box.x = boxRatio * min(givenBoxSize.x / boxRatio, givenBoxSize.y);
|
|
37
|
+
float noFitBoxWidth = box.x;
|
|
38
|
+
if (u_fit == 1.) { // fit = contain
|
|
39
|
+
box.x = boxRatio * min(u_resolution.x / boxRatio, u_resolution.y);
|
|
40
|
+
} else if (u_fit == 2.) { // fit = cover
|
|
41
|
+
box.x = boxRatio * max(u_resolution.x / boxRatio, u_resolution.y);
|
|
42
|
+
}
|
|
43
|
+
box.y = box.x / boxRatio;
|
|
44
|
+
return vec3(box, noFitBoxWidth);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
void main() {
|
|
48
|
+
gl_Position = a_position;
|
|
49
|
+
|
|
50
|
+
vec2 uv = gl_Position.xy * .5;
|
|
51
|
+
vec2 boxOrigin = vec2(.5 - u_originX, u_originY - .5);
|
|
52
|
+
vec2 givenBoxSize = vec2(u_worldWidth, u_worldHeight);
|
|
53
|
+
givenBoxSize = max(givenBoxSize, vec2(1.)) * u_pixelRatio;
|
|
54
|
+
float r = u_rotation * 3.14159265358979323846 / 180.;
|
|
55
|
+
mat2 graphicRotation = mat2(cos(r), sin(r), -sin(r), cos(r));
|
|
56
|
+
vec2 graphicOffset = vec2(-u_offsetX, u_offsetY);
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
// ===================================================
|
|
60
|
+
|
|
61
|
+
float fixedRatio = 1.;
|
|
62
|
+
vec2 fixedRatioBoxGivenSize = vec2(
|
|
63
|
+
(u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,
|
|
64
|
+
(u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
v_objectBoxSize = getBoxSize(fixedRatio, fixedRatioBoxGivenSize).xy;
|
|
68
|
+
vec2 objectWorldScale = u_resolution.xy / v_objectBoxSize;
|
|
69
|
+
|
|
70
|
+
v_objectUV = uv;
|
|
71
|
+
v_objectUV *= objectWorldScale;
|
|
72
|
+
v_objectUV += boxOrigin * (objectWorldScale - 1.);
|
|
73
|
+
v_objectUV += graphicOffset;
|
|
74
|
+
v_objectUV /= u_scale;
|
|
75
|
+
v_objectUV = graphicRotation * v_objectUV;
|
|
76
|
+
|
|
77
|
+
// ===================================================
|
|
78
|
+
|
|
79
|
+
v_responsiveBoxGivenSize = vec2(
|
|
80
|
+
(u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,
|
|
81
|
+
(u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y
|
|
82
|
+
);
|
|
83
|
+
float responsiveRatio = v_responsiveBoxGivenSize.x / v_responsiveBoxGivenSize.y;
|
|
84
|
+
vec2 responsiveBoxSize = getBoxSize(responsiveRatio, v_responsiveBoxGivenSize).xy;
|
|
85
|
+
vec2 responsiveBoxScale = u_resolution.xy / responsiveBoxSize;
|
|
86
|
+
|
|
87
|
+
#ifdef ADD_HELPERS
|
|
88
|
+
v_responsiveHelperBox = uv;
|
|
89
|
+
v_responsiveHelperBox *= responsiveBoxScale;
|
|
90
|
+
v_responsiveHelperBox += boxOrigin * (responsiveBoxScale - 1.);
|
|
91
|
+
#endif
|
|
92
|
+
|
|
93
|
+
v_responsiveUV = uv;
|
|
94
|
+
v_responsiveUV *= responsiveBoxScale;
|
|
95
|
+
v_responsiveUV += boxOrigin * (responsiveBoxScale - 1.);
|
|
96
|
+
v_responsiveUV += graphicOffset;
|
|
97
|
+
v_responsiveUV /= u_scale;
|
|
98
|
+
v_responsiveUV.x *= responsiveRatio;
|
|
99
|
+
v_responsiveUV = graphicRotation * v_responsiveUV;
|
|
100
|
+
v_responsiveUV.x /= responsiveRatio;
|
|
101
|
+
|
|
102
|
+
// ===================================================
|
|
103
|
+
|
|
104
|
+
float patternBoxRatio = givenBoxSize.x / givenBoxSize.y;
|
|
105
|
+
vec2 patternBoxGivenSize = vec2(
|
|
106
|
+
(u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,
|
|
107
|
+
(u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y
|
|
108
|
+
);
|
|
109
|
+
patternBoxRatio = patternBoxGivenSize.x / patternBoxGivenSize.y;
|
|
110
|
+
|
|
111
|
+
vec3 boxSizeData = getBoxSize(patternBoxRatio, patternBoxGivenSize);
|
|
112
|
+
v_patternBoxSize = boxSizeData.xy;
|
|
113
|
+
float patternBoxNoFitBoxWidth = boxSizeData.z;
|
|
114
|
+
vec2 patternBoxScale = u_resolution.xy / v_patternBoxSize;
|
|
115
|
+
|
|
116
|
+
v_patternUV = uv;
|
|
117
|
+
v_patternUV += graphicOffset / patternBoxScale;
|
|
118
|
+
v_patternUV += boxOrigin;
|
|
119
|
+
v_patternUV -= boxOrigin / patternBoxScale;
|
|
120
|
+
v_patternUV *= u_resolution.xy;
|
|
121
|
+
v_patternUV /= u_pixelRatio;
|
|
122
|
+
if (u_fit > 0.) {
|
|
123
|
+
v_patternUV *= (patternBoxNoFitBoxWidth / v_patternBoxSize.x);
|
|
124
|
+
}
|
|
125
|
+
v_patternUV /= u_scale;
|
|
126
|
+
v_patternUV = graphicRotation * v_patternUV;
|
|
127
|
+
v_patternUV += boxOrigin / patternBoxScale;
|
|
128
|
+
v_patternUV -= boxOrigin;
|
|
129
|
+
// x100 is a default multiplier between vertex and fragmant shaders
|
|
130
|
+
// we use it to avoid UV presision issues
|
|
131
|
+
v_patternUV *= .01;
|
|
132
|
+
|
|
133
|
+
// ===================================================
|
|
134
|
+
|
|
135
|
+
v_imageUV = uv;
|
|
136
|
+
if (u_imageIsHtml == 0.) {
|
|
137
|
+
vec2 imageBoxSize;
|
|
138
|
+
if (u_fit == 1.) { // contain
|
|
139
|
+
imageBoxSize.x = min(u_resolution.x / u_imageAspectRatio, u_resolution.y) * u_imageAspectRatio;
|
|
140
|
+
} else if (u_fit == 2.) { // cover
|
|
141
|
+
imageBoxSize.x = max(u_resolution.x / u_imageAspectRatio, u_resolution.y) * u_imageAspectRatio;
|
|
142
|
+
} else {
|
|
143
|
+
imageBoxSize.x = min(10.0, 10.0 / u_imageAspectRatio * u_imageAspectRatio);
|
|
144
|
+
}
|
|
145
|
+
imageBoxSize.y = imageBoxSize.x / u_imageAspectRatio;
|
|
146
|
+
vec2 imageBoxScale = u_resolution.xy / imageBoxSize;
|
|
147
|
+
|
|
148
|
+
v_imageUV *= imageBoxScale;
|
|
149
|
+
v_imageUV += boxOrigin * (imageBoxScale - 1.);
|
|
150
|
+
v_imageUV += graphicOffset;
|
|
151
|
+
v_imageUV /= u_scale;
|
|
152
|
+
v_imageUV.x *= u_imageAspectRatio;
|
|
153
|
+
v_imageUV = graphicRotation * v_imageUV;
|
|
154
|
+
v_imageUV.x /= u_imageAspectRatio;
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
v_imageUV += .5;
|
|
158
|
+
v_imageUV.y = 1. - v_imageUV.y;
|
|
159
|
+
}`;
|
|
160
|
+
export {
|
|
161
|
+
vertexShaderSource
|
|
162
|
+
};
|
|
163
|
+
//# sourceMappingURL=vertex-shader.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/vertex-shader.ts"],
|
|
4
|
+
"sourcesContent": ["/** Vertex shader for the shader mount */\n// language=GLSL\nexport const vertexShaderSource = `#version 300 es\nprecision mediump float;\n\nlayout(location = 0) in vec4 a_position;\n\nuniform vec2 u_resolution;\nuniform float u_pixelRatio;\nuniform float u_imageAspectRatio;\nuniform float u_imageIsHtml;\nuniform float u_originX;\nuniform float u_originY;\nuniform float u_worldWidth;\nuniform float u_worldHeight;\nuniform float u_fit;\nuniform float u_scale;\nuniform float u_rotation;\nuniform float u_offsetX;\nuniform float u_offsetY;\n\nout vec2 v_objectUV;\nout vec2 v_objectBoxSize;\nout vec2 v_responsiveUV;\nout vec2 v_responsiveBoxGivenSize;\nout vec2 v_patternUV;\nout vec2 v_patternBoxSize;\nout vec2 v_imageUV;\n\nvec3 getBoxSize(float boxRatio, vec2 givenBoxSize) {\n vec2 box = vec2(0.);\n // fit = none\n box.x = boxRatio * min(givenBoxSize.x / boxRatio, givenBoxSize.y);\n float noFitBoxWidth = box.x;\n if (u_fit == 1.) { // fit = contain\n box.x = boxRatio * min(u_resolution.x / boxRatio, u_resolution.y);\n } else if (u_fit == 2.) { // fit = cover\n box.x = boxRatio * max(u_resolution.x / boxRatio, u_resolution.y);\n }\n box.y = box.x / boxRatio;\n return vec3(box, noFitBoxWidth);\n}\n\nvoid main() {\n gl_Position = a_position;\n\n vec2 uv = gl_Position.xy * .5;\n vec2 boxOrigin = vec2(.5 - u_originX, u_originY - .5);\n vec2 givenBoxSize = vec2(u_worldWidth, u_worldHeight);\n givenBoxSize = max(givenBoxSize, vec2(1.)) * u_pixelRatio;\n float r = u_rotation * 3.14159265358979323846 / 180.;\n mat2 graphicRotation = mat2(cos(r), sin(r), -sin(r), cos(r));\n vec2 graphicOffset = vec2(-u_offsetX, u_offsetY);\n\n\n // ===================================================\n\n float fixedRatio = 1.;\n vec2 fixedRatioBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n\n v_objectBoxSize = getBoxSize(fixedRatio, fixedRatioBoxGivenSize).xy;\n vec2 objectWorldScale = u_resolution.xy / v_objectBoxSize;\n\n v_objectUV = uv;\n v_objectUV *= objectWorldScale;\n v_objectUV += boxOrigin * (objectWorldScale - 1.);\n v_objectUV += graphicOffset;\n v_objectUV /= u_scale;\n v_objectUV = graphicRotation * v_objectUV;\n\n // ===================================================\n\n v_responsiveBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n float responsiveRatio = v_responsiveBoxGivenSize.x / v_responsiveBoxGivenSize.y;\n vec2 responsiveBoxSize = getBoxSize(responsiveRatio, v_responsiveBoxGivenSize).xy;\n vec2 responsiveBoxScale = u_resolution.xy / responsiveBoxSize;\n\n #ifdef ADD_HELPERS\n v_responsiveHelperBox = uv;\n v_responsiveHelperBox *= responsiveBoxScale;\n v_responsiveHelperBox += boxOrigin * (responsiveBoxScale - 1.);\n #endif\n\n v_responsiveUV = uv;\n v_responsiveUV *= responsiveBoxScale;\n v_responsiveUV += boxOrigin * (responsiveBoxScale - 1.);\n v_responsiveUV += graphicOffset;\n v_responsiveUV /= u_scale;\n v_responsiveUV.x *= responsiveRatio;\n v_responsiveUV = graphicRotation * v_responsiveUV;\n v_responsiveUV.x /= responsiveRatio;\n\n // ===================================================\n\n float patternBoxRatio = givenBoxSize.x / givenBoxSize.y;\n vec2 patternBoxGivenSize = vec2(\n (u_worldWidth == 0.) ? u_resolution.x : givenBoxSize.x,\n (u_worldHeight == 0.) ? u_resolution.y : givenBoxSize.y\n );\n patternBoxRatio = patternBoxGivenSize.x / patternBoxGivenSize.y;\n\n vec3 boxSizeData = getBoxSize(patternBoxRatio, patternBoxGivenSize);\n v_patternBoxSize = boxSizeData.xy;\n float patternBoxNoFitBoxWidth = boxSizeData.z;\n vec2 patternBoxScale = u_resolution.xy / v_patternBoxSize;\n\n v_patternUV = uv;\n v_patternUV += graphicOffset / patternBoxScale;\n v_patternUV += boxOrigin;\n v_patternUV -= boxOrigin / patternBoxScale;\n v_patternUV *= u_resolution.xy;\n v_patternUV /= u_pixelRatio;\n if (u_fit > 0.) {\n v_patternUV *= (patternBoxNoFitBoxWidth / v_patternBoxSize.x);\n }\n v_patternUV /= u_scale;\n v_patternUV = graphicRotation * v_patternUV;\n v_patternUV += boxOrigin / patternBoxScale;\n v_patternUV -= boxOrigin;\n // x100 is a default multiplier between vertex and fragmant shaders\n // we use it to avoid UV presision issues\n v_patternUV *= .01;\n\n // ===================================================\n\n v_imageUV = uv;\n if (u_imageIsHtml == 0.) {\n vec2 imageBoxSize;\n if (u_fit == 1.) { // contain\n imageBoxSize.x = min(u_resolution.x / u_imageAspectRatio, u_resolution.y) * u_imageAspectRatio;\n } else if (u_fit == 2.) { // cover\n imageBoxSize.x = max(u_resolution.x / u_imageAspectRatio, u_resolution.y) * u_imageAspectRatio;\n } else {\n imageBoxSize.x = min(10.0, 10.0 / u_imageAspectRatio * u_imageAspectRatio);\n }\n imageBoxSize.y = imageBoxSize.x / u_imageAspectRatio;\n vec2 imageBoxScale = u_resolution.xy / imageBoxSize;\n\n v_imageUV *= imageBoxScale;\n v_imageUV += boxOrigin * (imageBoxScale - 1.);\n v_imageUV += graphicOffset;\n v_imageUV /= u_scale;\n v_imageUV.x *= u_imageAspectRatio;\n v_imageUV = graphicRotation * v_imageUV;\n v_imageUV.x /= u_imageAspectRatio;\n }\n\n v_imageUV += .5;\n v_imageUV.y = 1. - v_imageUV.y;\n}`;\n"],
|
|
5
|
+
"mappings": ";;;;;AAEO,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@paper-design/shaders",
|
|
3
|
+
"version": "0.0.0-canary.0d8316e",
|
|
4
|
+
"license": "Apache-2.0",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"publishConfig": {
|
|
8
|
+
"access": "public"
|
|
9
|
+
},
|
|
10
|
+
"main": "./dist/index.js",
|
|
11
|
+
"module": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js",
|
|
17
|
+
"default": "./dist/index.js"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"dist",
|
|
22
|
+
"LICENSE",
|
|
23
|
+
"NOTICE"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"type-check": "tsc --project tsconfig.json"
|
|
27
|
+
},
|
|
28
|
+
"dependencies": {}
|
|
29
|
+
}
|