@johnfmorton/some-shade 0.1.0-beta.1 → 0.1.0-beta.3

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 (2) hide show
  1. package/README.md +234 -0
  2. package/package.json +3 -2
package/README.md ADDED
@@ -0,0 +1,234 @@
1
+ # Some Shade
2
+
3
+ WebGL image effects as a web component. Drop `<some-shade-image>` into any page to apply shader-based visual effects to images.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm install @johnfmorton/some-shade
9
+ ```
10
+
11
+ `lit` is a dependency and will be installed automatically.
12
+
13
+ ## Quick Start
14
+
15
+ ```html
16
+ <script type="module">
17
+ import '@johnfmorton/some-shade';
18
+ </script>
19
+
20
+ <some-shade-image
21
+ src="photo.jpg"
22
+ effect="halftone-cmyk"
23
+ dot-radius="4"
24
+ grid-size="8"
25
+ ></some-shade-image>
26
+ ```
27
+
28
+ ## Effects
29
+
30
+ ### CMYK Halftone
31
+
32
+ Simulates a CMYK halftone print screen with per-channel angle control.
33
+
34
+ ```html
35
+ <some-shade-image
36
+ src="photo.jpg"
37
+ effect="halftone-cmyk"
38
+ dot-radius="4"
39
+ grid-size="8"
40
+ angle-c="15"
41
+ angle-m="75"
42
+ angle-y="0"
43
+ angle-k="45"
44
+ ></some-shade-image>
45
+ ```
46
+
47
+ ### Duotone Halftone
48
+
49
+ Halftone effect using a single custom color.
50
+
51
+ ```html
52
+ <some-shade-image
53
+ src="photo.jpg"
54
+ effect="halftone-duotone"
55
+ dot-radius="4"
56
+ grid-size="8"
57
+ duotone-color="#0099cc"
58
+ angle="0"
59
+ ></some-shade-image>
60
+ ```
61
+
62
+ ### Pixel Sort
63
+
64
+ Sorts pixels by luminance along a configurable direction.
65
+
66
+ ```html
67
+ <some-shade-image
68
+ src="photo.jpg"
69
+ effect="pixel-sort"
70
+ threshold="0.5"
71
+ sort-direction="0"
72
+ sort-span="64"
73
+ ></some-shade-image>
74
+ ```
75
+
76
+ ### Dot Grid
77
+
78
+ Renders the image as a grid of dots with a customizable background.
79
+
80
+ ```html
81
+ <some-shade-image
82
+ src="photo.jpg"
83
+ effect="dot-grid"
84
+ dot-radius="4"
85
+ grid-size="8"
86
+ dot-offset-x="0.5"
87
+ dot-offset-y="0.5"
88
+ bg-color="#ffffff"
89
+ ></some-shade-image>
90
+ ```
91
+
92
+ ## Attributes Reference
93
+
94
+ | Attribute | Type | Default | Effects |
95
+ |-----------|------|---------|---------|
96
+ | `src` | string | `""` | all |
97
+ | `effect` | string | `"halftone-cmyk"` | all |
98
+ | `dot-radius` | number | `4` | halftone-cmyk, halftone-duotone, dot-grid |
99
+ | `grid-size` | number | `8` | halftone-cmyk, halftone-duotone, dot-grid |
100
+ | `angle-c` | number | `15` | halftone-cmyk |
101
+ | `angle-m` | number | `75` | halftone-cmyk |
102
+ | `angle-y` | number | `0` | halftone-cmyk |
103
+ | `angle-k` | number | `45` | halftone-cmyk |
104
+ | `duotone-color` | string (hex) | `"#0099cc"` | halftone-duotone |
105
+ | `angle` | number | `0` | halftone-duotone |
106
+ | `threshold` | number | `0.5` | pixel-sort |
107
+ | `sort-direction` | number | `0` | pixel-sort |
108
+ | `sort-span` | number | `64` | pixel-sort |
109
+ | `dot-offset-x` | number | `0.5` | dot-grid |
110
+ | `dot-offset-y` | number | `0.5` | dot-grid |
111
+ | `bg-color` | string (hex) | `"#ffffff"` | dot-grid |
112
+
113
+ ## Framework Usage
114
+
115
+ The component works in any framework. Import `@johnfmorton/some-shade` once to register the custom element, then use `<some-shade-image>` in your templates.
116
+
117
+ ### React
118
+
119
+ ```tsx
120
+ import '@johnfmorton/some-shade';
121
+
122
+ declare global {
123
+ namespace JSX {
124
+ interface IntrinsicElements {
125
+ 'some-shade-image': React.DetailedHTMLProps<
126
+ React.HTMLAttributes<HTMLElement> & {
127
+ src?: string;
128
+ effect?: string;
129
+ 'dot-radius'?: number;
130
+ 'grid-size'?: number;
131
+ },
132
+ HTMLElement
133
+ >;
134
+ }
135
+ }
136
+ }
137
+
138
+ function App() {
139
+ return (
140
+ <some-shade-image
141
+ src="photo.jpg"
142
+ effect="halftone-cmyk"
143
+ dot-radius={4}
144
+ grid-size={8}
145
+ />
146
+ );
147
+ }
148
+ ```
149
+
150
+ ## Custom Effects
151
+
152
+ Register your own shader effects using the `register()` API:
153
+
154
+ ```ts
155
+ import { register } from '@johnfmorton/some-shade';
156
+
157
+ register({
158
+ name: 'my-effect',
159
+ vertexShader: `
160
+ attribute vec2 a_position;
161
+ attribute vec2 a_texCoord;
162
+ varying vec2 v_texCoord;
163
+ void main() {
164
+ gl_Position = vec4(a_position, 0.0, 1.0);
165
+ v_texCoord = a_texCoord;
166
+ }
167
+ `,
168
+ fragmentShader: `
169
+ precision mediump float;
170
+ uniform sampler2D u_image;
171
+ varying vec2 v_texCoord;
172
+ uniform float u_intensity;
173
+ void main() {
174
+ gl_FragColor = texture2D(u_image, v_texCoord) * u_intensity;
175
+ }
176
+ `,
177
+ uniforms: [
178
+ { name: 'u_intensity', type: 'float', default: 1.0, attribute: 'intensity' },
179
+ ],
180
+ });
181
+ ```
182
+
183
+ Then use it:
184
+
185
+ ```html
186
+ <some-shade-image src="photo.jpg" effect="my-effect" intensity="0.8"></some-shade-image>
187
+ ```
188
+
189
+ ### `EffectDefinition`
190
+
191
+ ```ts
192
+ interface EffectDefinition {
193
+ name: string;
194
+ fragmentShader: string;
195
+ vertexShader: string;
196
+ uniforms: UniformDefinition[];
197
+ }
198
+
199
+ interface UniformDefinition {
200
+ name: string;
201
+ type: 'float' | 'vec2' | 'vec3' | 'vec4';
202
+ default: number | number[];
203
+ attribute?: string;
204
+ }
205
+ ```
206
+
207
+ ## Programmatic API
208
+
209
+ ```ts
210
+ import { register, get, list, SomeShadeImage } from '@johnfmorton/some-shade';
211
+
212
+ register(effectDef); // Register a custom effect
213
+ get('halftone-cmyk'); // Get an effect definition by name
214
+ list(); // List all registered effect names
215
+ ```
216
+
217
+ `SomeShadeImage` is the Lit component class, exported for subclassing or direct use.
218
+
219
+ ## Browser Support
220
+
221
+ Requires WebGL. If WebGL is unavailable, the component falls back to a plain `<img>` element.
222
+
223
+ ## Development
224
+
225
+ ```bash
226
+ pnpm install
227
+ pnpm dev # Watch mode (component + playground)
228
+ pnpm build # Build everything
229
+ pnpm build:component # Build web component only
230
+ ```
231
+
232
+ ## License
233
+
234
+ ISC
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@johnfmorton/some-shade",
3
- "version": "0.1.0-beta.1",
3
+ "version": "0.1.0-beta.3",
4
4
  "type": "module",
5
5
  "main": "./dist/some-shade.cjs.js",
6
6
  "module": "./dist/some-shade.es.js",
@@ -13,7 +13,8 @@
13
13
  }
14
14
  },
15
15
  "files": [
16
- "dist"
16
+ "dist",
17
+ "README.md"
17
18
  ],
18
19
  "dependencies": {
19
20
  "lit": "^3.2.0"