uhuu-components 0.2.95 → 0.2.96

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/index.d.ts CHANGED
@@ -258,7 +258,7 @@ export interface PageFilterConfig {
258
258
  export interface PrintConfig {
259
259
  label: string;
260
260
  filter: PageFilterConfig | null;
261
- pageFormat?: { bleed?: number; [key: string]: unknown };
261
+ pageFormat?: { bleed?: number; binding?: BindingConfig | null; [key: string]: unknown };
262
262
  }
263
263
 
264
264
  export type PrintConfigMap = Record<string, PrintConfig>;
@@ -273,7 +273,15 @@ export interface PageEditorProps {
273
273
  templateConfig: Record<string, unknown>;
274
274
  payload?: Record<string, unknown>;
275
275
  onPayloadChange?: (nextPayload: Record<string, unknown>) => void;
276
- pageFormat?: { width: number; height: number; preview?: string; bleed?: number; [key: string]: unknown };
276
+ pageFormat?: {
277
+ width: number;
278
+ height: number;
279
+ preview?: string;
280
+ bleed?: number;
281
+ /** Perfect-binding spine/glue; only applied while `pageFilter.mode === 'cover'`. */
282
+ binding?: BindingConfig | null;
283
+ [key: string]: unknown;
284
+ };
277
285
  pageOptions?: unknown[];
278
286
  pageFilter?: PageFilterConfig;
279
287
  printConfigs?: PrintConfigMap;
@@ -340,6 +348,65 @@ export interface StaticSheetProps {
340
348
  "data-page-key"?: string;
341
349
  }
342
350
 
351
+ /**
352
+ * Passed as `spread` to cover page components while PageEditor composes a
353
+ * perfect-binding cover spread (`pageFormat.binding` + `pageFilter.mode: 'cover'`).
354
+ * Absent for plain single-page renders. mm.
355
+ */
356
+ export interface SpreadInfo {
357
+ sheet: CoverSheetKind;
358
+ side: CoverPanelSide;
359
+ spine: number;
360
+ glue: number;
361
+ bleed: number;
362
+ }
363
+
364
+ /** Props of `templateConfig.spine.component`, rendered on the outer cover sheet's spine strip. */
365
+ export interface SpineComponentProps {
366
+ payload?: Record<string, unknown>;
367
+ sheet: "outer";
368
+ spine: number;
369
+ glue: number;
370
+ bleed: number;
371
+ /** Trim page height (mm); the strip is `height + 2 × bleed` tall and `spine` wide. */
372
+ height: number;
373
+ totalPages?: number;
374
+ pages: { left?: PageEditorItem; right?: PageEditorItem };
375
+ }
376
+
377
+ /** `templateConfig.spine` — optional artwork for the spine of a perfect-bound cover. */
378
+ export interface PageEditorSpineConfig {
379
+ component?: ComponentType<SpineComponentProps>;
380
+ }
381
+
382
+ export interface StaticCoverSpreadOverlayArgs {
383
+ pageNo: number;
384
+ side: CoverPanelSide;
385
+ sheet: CoverSheetKind;
386
+ }
387
+
388
+ /** One physical cover sheet of a perfect-bound product. See docs/printer-cover-spine-support.md. */
389
+ export interface StaticCoverSpreadProps {
390
+ /** `outer` = back cover · spine · front cover. `inner` = inside front · blank spine + glue · inside back. */
391
+ sheet: CoverSheetKind;
392
+ left: ReactNode;
393
+ right: ReactNode;
394
+ /** Spine artwork, outer sheet only. */
395
+ spine?: ReactNode;
396
+ /** Original document page numbers `[left, right]`. */
397
+ pageNo?: [number, number];
398
+ overlay?: (args: StaticCoverSpreadOverlayArgs) => ReactNode;
399
+ /** Overrides `binding` from the Pagination setup. */
400
+ binding?: BindingConfig | null;
401
+ showBleed?: boolean;
402
+ className?: string;
403
+ style?: CSSProperties;
404
+ leftClassName?: string;
405
+ rightClassName?: string;
406
+ leftPageKey?: string;
407
+ rightPageKey?: string;
408
+ }
409
+
343
410
  export interface StaticPaginationProps {
344
411
  children: ReactNode;
345
412
  className?: string;
@@ -458,6 +525,73 @@ export interface StaticFlowDocumentProps {
458
525
  parseHtml?: (html: string) => unknown[];
459
526
  }
460
527
 
528
+ // --- Perfect-binding cover spread (src/uhuu/pagination-static/spread-core.js) ---
529
+ // dist ships this file alone, so the module's types are mirrored here. All values mm.
530
+
531
+ export type BindingType = "perfect" | "saddle";
532
+
533
+ /** `pageFormat.binding` / `Pagination setup.binding`. Only applied in `cover` filter mode. */
534
+ export interface BindingConfig {
535
+ type?: BindingType;
536
+ /** Spine width. The printer supplies this number. */
537
+ spine: number;
538
+ /** Ink-free margin on each side of the spine, inner sheet only. Default 0. */
539
+ glue?: number;
540
+ }
541
+
542
+ export interface ResolvedBinding {
543
+ type: "perfect";
544
+ spine: number;
545
+ glue: number;
546
+ }
547
+
548
+ export interface SpreadBox {
549
+ x: number;
550
+ y: number;
551
+ width: number;
552
+ height: number;
553
+ }
554
+
555
+ export type CoverSheetKind = "outer" | "inner";
556
+ export type CoverPanelSide = "left" | "right";
557
+
558
+ export interface CoverSpreadPageInput {
559
+ width?: number;
560
+ height?: number;
561
+ bleed?: number;
562
+ binding?: BindingConfig | null;
563
+ }
564
+
565
+ export interface CoverSheetSize {
566
+ width: number;
567
+ height: number;
568
+ trimWidth: number;
569
+ trimHeight: number;
570
+ spread: boolean;
571
+ }
572
+
573
+ export interface CoverSpreadPanel<TPage = unknown> {
574
+ side: CoverPanelSide;
575
+ page: TPage;
576
+ trim: SpreadBox;
577
+ bleedBox: SpreadBox;
578
+ }
579
+
580
+ export interface CoverSpreadSheet<TPage = unknown> {
581
+ sheet: CoverSheetKind;
582
+ index: number;
583
+ panels: CoverSpreadPanel<TPage>[];
584
+ spine: SpreadBox & { blank: boolean };
585
+ glueZones: Array<SpreadBox & { side: CoverPanelSide }>;
586
+ }
587
+
588
+ export interface CoverSpreadPlan<TPage = unknown> {
589
+ binding: ResolvedBinding;
590
+ page: { width: number; height: number; bleed: number };
591
+ sheet: { width: number; height: number; trimWidth: number; trimHeight: number };
592
+ sheets: CoverSpreadSheet<TPage>[];
593
+ }
594
+
461
595
  export const Static: {
462
596
  Pagination: ComponentType<StaticPaginationProps>;
463
597
  Sheet: ComponentType<StaticSheetProps>;
@@ -478,4 +612,11 @@ export const Static: {
478
612
  html?: string,
479
613
  options?: Record<string, unknown>
480
614
  ) => HtmlFlowItem[];
615
+ /** Plan perfect-binding cover sheets (outer/inner) for the filtered cover pages. */
616
+ planCoverSpread: <TPage = unknown>(
617
+ input?: CoverSpreadPageInput & { coverPages?: TPage[] }
618
+ ) => CoverSpreadPlan<TPage> | null;
619
+ /** Physical sheet size incl. bleed; the wide cover sheet when `binding.spine > 0`. */
620
+ resolveSheetSize: (input?: CoverSpreadPageInput) => CoverSheetSize | null;
621
+ CoverSpread: ComponentType<StaticCoverSpreadProps>;
481
622
  };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.2.95",
2
+ "version": "0.2.96",
3
3
  "name": "uhuu-components",
4
4
  "main": "uhuu-components.umd.cjs",
5
5
  "module": "uhuu-components.es.js",