@chrono-os/image-editor-react 0.2.0

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.
@@ -0,0 +1,163 @@
1
+ import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import { C as CropValue, b as ImagePickerProps, R as RecentColorsAdapter } from './badge-BRjFgV8X.js';
3
+ export { B as BadgeData, a as BadgeOverlay, I as ImagePickerAspect, c as ImagePreset, U as UploadAdapter, d as UploadItem, e as UploadedImage } from './badge-BRjFgV8X.js';
4
+ import 'react';
5
+
6
+ /**
7
+ * Constrói valor CSS `filter` baseado nas opções. Idêntico ao helper do
8
+ * `@chrono-os/lp-react` — mantém preview e render em sincronia visual.
9
+ */
10
+ declare function buildImageFilter(opts: {
11
+ grayscale?: number;
12
+ saturation?: number;
13
+ sepia?: number;
14
+ sepiaColor?: string;
15
+ }): string | undefined;
16
+ interface ImageCropPickerProps {
17
+ imageUrl: string;
18
+ /** Aspect ratio do destino (frame). Ex: 3/4, 16/9. */
19
+ targetAspect: number;
20
+ value: CropValue;
21
+ onChange: (next: CropValue) => void;
22
+ /**
23
+ * Limita a altura do painel do editor (em px). Quando ausente, usa
24
+ * `min(60vh, 520px)`. Use pra prevenir scroll quando o modal pai tem
25
+ * altura fixa.
26
+ */
27
+ maxHeight?: number;
28
+ }
29
+ declare const MIN_SCALE = 0.2;
30
+ declare const MAX_SCALE = 5;
31
+ /** Calcula a fração visível (cover) do source numa dimensão.
32
+ * source_wider: vw_base = target/img; source_taller: vw_base = 1. */
33
+ declare function computeVisibleBase(imgAspect: number, targetAspect: number): {
34
+ vwBase: number;
35
+ vhBase: number;
36
+ };
37
+ /**
38
+ * Geometria explícita do <img> dentro de container relative+overflow-hidden
39
+ * com aspect ratio TARGET. focal = posição da imagem no container (0=left,
40
+ * 100=right, 50=centro). Mesma math do renderer em prod — paridade total.
41
+ */
42
+ declare function buildImageGeometry(opts: {
43
+ imgAspect: number;
44
+ targetAspect: number;
45
+ focalX: number;
46
+ focalY: number;
47
+ scale: number;
48
+ }): {
49
+ width: string;
50
+ height: string;
51
+ left: string;
52
+ top: string;
53
+ renderedW: number;
54
+ renderedH: number;
55
+ };
56
+ declare function parsePosition(raw: string | undefined): {
57
+ x: number;
58
+ y: number;
59
+ };
60
+ declare function formatPos(x: number, y: number): string;
61
+ /**
62
+ * Converte um ponto focal (0-100, fração do source onde o "centro da visão"
63
+ * deve ficar) em valor de CSS object-position (0-100).
64
+ *
65
+ * `visible` é a fração do source visível naquela dimensão DEPOIS de cover
66
+ * crop + scale. Quando não há overflow (visible >= 1), object-position é
67
+ * irrelevante; devolve 50 como neutro.
68
+ */
69
+ declare function focalToOp(focal: number, visible: number): number;
70
+ /** Inverso de focalToOp: dado object-position, devolve o focal point. */
71
+ declare function opToFocal(op: number, visible: number): number;
72
+ declare function ImageCropPicker({ imageUrl, targetAspect, value, onChange, maxHeight, }: ImageCropPickerProps): react_jsx_runtime.JSX.Element | null;
73
+
74
+ declare function ImagePicker({ value, onChange, uploadAdapter, label, hint, aspect, crop, onCropChange, badge, extraCards, presets, }: ImagePickerProps): react_jsx_runtime.JSX.Element;
75
+
76
+ interface BadgePartState {
77
+ enabled?: boolean;
78
+ text?: string;
79
+ color?: string;
80
+ size?: number;
81
+ offsetX?: number;
82
+ offsetY?: number;
83
+ }
84
+ interface BadgeEditorCardProps {
85
+ /** Título do subcard (ex "Badge — Número"). */
86
+ title: string;
87
+ value: BadgePartState;
88
+ onChange: (next: BadgePartState) => void;
89
+ /** Cor default mostrada quando `value.color` é undefined. */
90
+ defaultColor: string;
91
+ /** Posição X default exibida no slider quando `value.offsetX` é undefined. */
92
+ defaultPosX: number;
93
+ /** Posição Y default exibida no slider quando `value.offsetY` é undefined. */
94
+ defaultPosY: number;
95
+ /** Label da checkbox de exibir. Default "Exibir". */
96
+ enabledLabel?: string;
97
+ /** Placeholder do campo Texto. */
98
+ textPlaceholder?: string;
99
+ /** Adapter opcional de cores recentes pro `<BadgePartControls>`. */
100
+ recentColors?: RecentColorsAdapter;
101
+ /** Kind de cor (default 'text'). */
102
+ recentKind?: string;
103
+ /** Sementes neutras pros swatches (default ['#FFFFFF', '#000000']). */
104
+ seedColors?: string[];
105
+ /** Min/max do slider de tamanho (% — default 50-500). */
106
+ sizeMin?: number;
107
+ sizeMax?: number;
108
+ }
109
+ declare function BadgeEditorCard({ title, value, onChange, defaultColor, defaultPosX, defaultPosY, enabledLabel, textPlaceholder, recentColors, recentKind, seedColors, sizeMin, sizeMax, }: BadgeEditorCardProps): react_jsx_runtime.JSX.Element;
110
+
111
+ interface BadgePartControlsProps {
112
+ color: string | undefined;
113
+ defaultColor: string;
114
+ size: number | undefined;
115
+ offsetX: number | undefined;
116
+ offsetY: number | undefined;
117
+ defaultPosX: number;
118
+ defaultPosY: number;
119
+ onColorChange: (v: string | undefined) => void;
120
+ onSizeChange: (v: number | undefined) => void;
121
+ onOffsetXChange: (v: number | undefined) => void;
122
+ onOffsetYChange: (v: number | undefined) => void;
123
+ /** Adapter de cores recentes (opcional). Sem ele, sumir a linha "Recentes". */
124
+ recentColors?: RecentColorsAdapter;
125
+ /** Kind de cor pra integrar com o adapter (default 'text'). */
126
+ recentKind?: string;
127
+ /** Sementes neutras quando recentes acabam. Default: ['#FFFFFF', '#000000']. */
128
+ seedColors?: string[];
129
+ /** Min/max do slider de tamanho (% — default 50-500). */
130
+ sizeMin?: number;
131
+ sizeMax?: number;
132
+ }
133
+ declare function BadgePartControls({ color, defaultColor, size, offsetX, offsetY, defaultPosX, defaultPosY, onColorChange, onSizeChange, onOffsetXChange, onOffsetYChange, recentColors, recentKind, seedColors, sizeMin, sizeMax, }: BadgePartControlsProps): react_jsx_runtime.JSX.Element;
134
+
135
+ /**
136
+ * Linha de slider padronizada usada nos controles do badge (Tamanho, Pos. X,
137
+ * Pos. Y). Garante mesma estrutura e larguras em todas as rows:
138
+ *
139
+ * w-20 label · flex-1 range · w-12 valor · w-10 reset (ou spacer)
140
+ *
141
+ * O accent do range vem da CSS var `--ie-accent` (fallback `#556FFF`); o
142
+ * consumer overrida via tema (`@chrono-os/image-editor-react/theme.css` ou
143
+ * regra própria em `:root`/`.image-editor-root`).
144
+ */
145
+ interface SliderRowProps {
146
+ label: string;
147
+ min: number;
148
+ max: number;
149
+ step: number;
150
+ /** Valor atual (undefined = usar `fallback` no render). */
151
+ value: number | undefined;
152
+ /** Valor exibido quando `value` é undefined. */
153
+ fallback: number;
154
+ /** Formatador do valor (ex `v => ${v}%`). */
155
+ format: (v: number) => string;
156
+ /** True quando o user mexeu (mostra botão `reset`). */
157
+ isCustom: boolean;
158
+ onChange: (v: number) => void;
159
+ onReset: () => void;
160
+ }
161
+ declare function SliderRow({ label, min, max, step, value, fallback, format, isCustom, onChange, onReset, }: SliderRowProps): react_jsx_runtime.JSX.Element;
162
+
163
+ export { BadgeEditorCard, BadgePartControls, type BadgePartState, CropValue, ImageCropPicker, ImagePicker, ImagePickerProps, MAX_SCALE, MIN_SCALE, RecentColorsAdapter, SliderRow, buildImageFilter, buildImageGeometry, computeVisibleBase, focalToOp, formatPos, opToFocal, parsePosition };