@primitiv-ui/harmoni-wasm 0.1.32 → 0.1.34

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/harmoni_wasm.d.ts CHANGED
@@ -216,8 +216,33 @@ export function generate_alpha_ramp(anchor: string): AlphaRamp;
216
216
  */
217
217
  export function generate_alpha_ramp_with_steps(anchor: string, steps: number): AlphaRamp;
218
218
 
219
+ /**
220
+ * A neutral ramp in both modes from anchors that are **already** tinted, for a
221
+ * caller that did its own tinting (or wants none).
222
+ *
223
+ * [`generate_tinted_neutral_pair`] is the one to reach for. This is the seam
224
+ * underneath it, kept public because the anchors are a legitimate thing to hold
225
+ * directly — the Harmoni project stores its own `SoftNeutrals`.
226
+ */
227
+ export function generate_neutral_pair(white: string, black: string, tint: TintMode, bow: number, steps: number): PaletteSet;
228
+
219
229
  export function generate_neutral_ramp(white: string, black: string, tint: TintMode, bow: number): Palette;
220
230
 
231
+ /**
232
+ * Builds a neutral ramp of `steps` steps, so the neutral ramp can match the
233
+ * length of the solid ramps it sits beside — a ten-step neutral against a
234
+ * seven-step brand would otherwise carry two different label sets for one
235
+ * palette. Labels come from the same ladder `generate_palette_with_steps`
236
+ * walks. `steps` outside the range `supported_step_range` reports is rejected
237
+ * rather than clamped.
238
+ *
239
+ * Like every `palette_to_js` entry point, this has no native test:
240
+ * `serde_wasm_bindgen::to_value` needs a JS runtime, so the whole function is
241
+ * unreachable off-target. The step-count and label decisions it forwards are
242
+ * covered where they are actually made — `api::neutral_tests`.
243
+ */
244
+ export function generate_neutral_ramp_with_steps(white: string, black: string, tint: TintMode, bow: number, steps: number): Palette;
245
+
221
246
  export function generate_palette(hex: string, light_padding: number, dark_padding: number): Palette;
222
247
 
223
248
  export function generate_palette_pair(hex: string, light_lightness: Array<any>, dark_lightness: Array<any>, light_padding: number, dark_padding: number): PaletteSet;
@@ -248,6 +273,23 @@ export function generate_palette_with_lightness(hex: string, lightness: Array<an
248
273
  */
249
274
  export function generate_palette_with_steps(hex: string, steps: number, light_padding: number, dark_padding: number): Palette;
250
275
 
276
+ /**
277
+ * A neutral ramp in **both modes**, with its tint applied — the plugin's whole
278
+ * neutral generation in one call.
279
+ *
280
+ * This exists to take work away from TypeScript. The plugin's adapter was
281
+ * choosing between `tint_neutrals` and `tint_neutrals_duotone`, splitting the
282
+ * source hue by the spread, zeroing `bow` when untinted, and calling the
283
+ * generator twice with the anchors swapped. Every one of those is a colour
284
+ * decision, and colour decisions belong to the engine — the adapter's job is to
285
+ * marshal input in and results out, nothing else.
286
+ *
287
+ * `tint_source` of `None` is an untinted grey, which is what `tint === null` has
288
+ * always meant on the plugin side. `strength`, `spread` and `bow` are ignored in
289
+ * that case rather than shaping nothing.
290
+ */
291
+ export function generate_tinted_neutral_pair(white: string, black: string, tint_source: string | null | undefined, strength: number, spread: number, bow: number, steps: number): PaletteSet;
292
+
251
293
  export function get_contrast_rating(bg: string, fg: string): ContrastResult;
252
294
 
253
295
  /**
@@ -350,7 +392,9 @@ export interface InitOutput {
350
392
  readonly describe_oklch: (a: number, b: number, c: number) => any;
351
393
  readonly generate_alpha_ramp: (a: number, b: number) => [number, number, number];
352
394
  readonly generate_alpha_ramp_with_steps: (a: number, b: number, c: number) => [number, number, number];
395
+ readonly generate_neutral_pair: (a: number, b: number, c: number, d: number, e: any, f: number, g: number) => [number, number, number];
353
396
  readonly generate_neutral_ramp: (a: number, b: number, c: number, d: number, e: any, f: number) => [number, number, number];
397
+ readonly generate_neutral_ramp_with_steps: (a: number, b: number, c: number, d: number, e: any, f: number, g: number) => [number, number, number];
354
398
  readonly generate_palette: (a: number, b: number, c: number, d: number) => [number, number, number];
355
399
  readonly generate_palette_pair: (a: number, b: number, c: any, d: any, e: number, f: number) => [number, number, number];
356
400
  readonly generate_palette_pair_with_curve: (a: number, b: number, c: number, d: number, e: number, f: any) => [number, number, number];
@@ -358,6 +402,7 @@ export interface InitOutput {
358
402
  readonly generate_palette_with_light_padding: (a: number, b: number, c: number) => [number, number, number];
359
403
  readonly generate_palette_with_lightness: (a: number, b: number, c: any, d: number, e: number) => [number, number, number];
360
404
  readonly generate_palette_with_steps: (a: number, b: number, c: number, d: number, e: number) => [number, number, number];
405
+ readonly generate_tinted_neutral_pair: (a: number, b: number, c: number, d: number, e: number, f: number, g: number, h: number, i: number, j: number) => [number, number, number];
361
406
  readonly get_contrast_rating: (a: number, b: number, c: number, d: number) => [number, number, number];
362
407
  readonly grade: (a: number, b: any) => any;
363
408
  readonly max_in_gamut_chroma: (a: number, b: number, c: any) => number;
package/harmoni_wasm.js CHANGED
@@ -140,6 +140,32 @@ export function generate_alpha_ramp_with_steps(anchor, steps) {
140
140
  return takeFromExternrefTable0(ret[0]);
141
141
  }
142
142
 
143
+ /**
144
+ * A neutral ramp in both modes from anchors that are **already** tinted, for a
145
+ * caller that did its own tinting (or wants none).
146
+ *
147
+ * [`generate_tinted_neutral_pair`] is the one to reach for. This is the seam
148
+ * underneath it, kept public because the anchors are a legitimate thing to hold
149
+ * directly — the Harmoni project stores its own `SoftNeutrals`.
150
+ * @param {string} white
151
+ * @param {string} black
152
+ * @param {TintMode} tint
153
+ * @param {number} bow
154
+ * @param {number} steps
155
+ * @returns {PaletteSet}
156
+ */
157
+ export function generate_neutral_pair(white, black, tint, bow, steps) {
158
+ const ptr0 = passStringToWasm0(white, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
159
+ const len0 = WASM_VECTOR_LEN;
160
+ const ptr1 = passStringToWasm0(black, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
161
+ const len1 = WASM_VECTOR_LEN;
162
+ const ret = wasm.generate_neutral_pair(ptr0, len0, ptr1, len1, tint, bow, steps);
163
+ if (ret[2]) {
164
+ throw takeFromExternrefTable0(ret[1]);
165
+ }
166
+ return takeFromExternrefTable0(ret[0]);
167
+ }
168
+
143
169
  /**
144
170
  * @param {string} white
145
171
  * @param {string} black
@@ -159,6 +185,37 @@ export function generate_neutral_ramp(white, black, tint, bow) {
159
185
  return takeFromExternrefTable0(ret[0]);
160
186
  }
161
187
 
188
+ /**
189
+ * Builds a neutral ramp of `steps` steps, so the neutral ramp can match the
190
+ * length of the solid ramps it sits beside — a ten-step neutral against a
191
+ * seven-step brand would otherwise carry two different label sets for one
192
+ * palette. Labels come from the same ladder `generate_palette_with_steps`
193
+ * walks. `steps` outside the range `supported_step_range` reports is rejected
194
+ * rather than clamped.
195
+ *
196
+ * Like every `palette_to_js` entry point, this has no native test:
197
+ * `serde_wasm_bindgen::to_value` needs a JS runtime, so the whole function is
198
+ * unreachable off-target. The step-count and label decisions it forwards are
199
+ * covered where they are actually made — `api::neutral_tests`.
200
+ * @param {string} white
201
+ * @param {string} black
202
+ * @param {TintMode} tint
203
+ * @param {number} bow
204
+ * @param {number} steps
205
+ * @returns {Palette}
206
+ */
207
+ export function generate_neutral_ramp_with_steps(white, black, tint, bow, steps) {
208
+ const ptr0 = passStringToWasm0(white, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
209
+ const len0 = WASM_VECTOR_LEN;
210
+ const ptr1 = passStringToWasm0(black, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
211
+ const len1 = WASM_VECTOR_LEN;
212
+ const ret = wasm.generate_neutral_ramp_with_steps(ptr0, len0, ptr1, len1, tint, bow, steps);
213
+ if (ret[2]) {
214
+ throw takeFromExternrefTable0(ret[1]);
215
+ }
216
+ return takeFromExternrefTable0(ret[0]);
217
+ }
218
+
162
219
  /**
163
220
  * @param {string} hex
164
221
  * @param {number} light_padding
@@ -287,6 +344,43 @@ export function generate_palette_with_steps(hex, steps, light_padding, dark_padd
287
344
  return takeFromExternrefTable0(ret[0]);
288
345
  }
289
346
 
347
+ /**
348
+ * A neutral ramp in **both modes**, with its tint applied — the plugin's whole
349
+ * neutral generation in one call.
350
+ *
351
+ * This exists to take work away from TypeScript. The plugin's adapter was
352
+ * choosing between `tint_neutrals` and `tint_neutrals_duotone`, splitting the
353
+ * source hue by the spread, zeroing `bow` when untinted, and calling the
354
+ * generator twice with the anchors swapped. Every one of those is a colour
355
+ * decision, and colour decisions belong to the engine — the adapter's job is to
356
+ * marshal input in and results out, nothing else.
357
+ *
358
+ * `tint_source` of `None` is an untinted grey, which is what `tint === null` has
359
+ * always meant on the plugin side. `strength`, `spread` and `bow` are ignored in
360
+ * that case rather than shaping nothing.
361
+ * @param {string} white
362
+ * @param {string} black
363
+ * @param {string | null | undefined} tint_source
364
+ * @param {number} strength
365
+ * @param {number} spread
366
+ * @param {number} bow
367
+ * @param {number} steps
368
+ * @returns {PaletteSet}
369
+ */
370
+ export function generate_tinted_neutral_pair(white, black, tint_source, strength, spread, bow, steps) {
371
+ const ptr0 = passStringToWasm0(white, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
372
+ const len0 = WASM_VECTOR_LEN;
373
+ const ptr1 = passStringToWasm0(black, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
374
+ const len1 = WASM_VECTOR_LEN;
375
+ var ptr2 = isLikeNone(tint_source) ? 0 : passStringToWasm0(tint_source, wasm.__wbindgen_malloc, wasm.__wbindgen_realloc);
376
+ var len2 = WASM_VECTOR_LEN;
377
+ const ret = wasm.generate_tinted_neutral_pair(ptr0, len0, ptr1, len1, ptr2, len2, strength, spread, bow, steps);
378
+ if (ret[2]) {
379
+ throw takeFromExternrefTable0(ret[1]);
380
+ }
381
+ return takeFromExternrefTable0(ret[0]);
382
+ }
383
+
290
384
  /**
291
385
  * @param {string} bg
292
386
  * @param {string} fg
Binary file
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@primitiv-ui/harmoni-wasm",
3
3
  "type": "module",
4
4
  "description": "Public wasm-pack build of harmoni-core, the Primitiv palette engine.",
5
- "version": "0.1.32",
5
+ "version": "0.1.34",
6
6
  "license": "MIT",
7
7
  "repository": {
8
8
  "type": "git",