@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.
package/dist/badge.cjs ADDED
@@ -0,0 +1,56 @@
1
+ "use client";
2
+ 'use strict';
3
+
4
+ var jsxRuntime = require('react/jsx-runtime');
5
+
6
+ // src/badge-overlay.tsx
7
+ var BADGE_DEFAULT_POS = {
8
+ numero: { x: 6, y: 84 },
9
+ label: { x: 36, y: 88 }
10
+ };
11
+ var BADGE_BASE_CQW = { numero: 15, label: 3.5 };
12
+ function BadgeOverlay({ badge }) {
13
+ if (!badge) return null;
14
+ const showNumero = !!badge.numero && badge.numeroEnabled !== false;
15
+ const showLabel = !!badge.label && badge.labelEnabled !== false;
16
+ if (!showNumero && !showLabel) return null;
17
+ const numSizeCqw = BADGE_BASE_CQW.numero * ((badge.numeroSize ?? 100) / 100);
18
+ const labelSizeCqw = BADGE_BASE_CQW.label * ((badge.labelSize ?? 100) / 100);
19
+ const numX = badge.numeroOffsetX ?? BADGE_DEFAULT_POS.numero.x;
20
+ const numY = badge.numeroOffsetY ?? BADGE_DEFAULT_POS.numero.y;
21
+ const labelX = badge.labelOffsetX ?? BADGE_DEFAULT_POS.label.x;
22
+ const labelY = badge.labelOffsetY ?? BADGE_DEFAULT_POS.label.y;
23
+ const numeroColor = badge.numeroColor || "var(--ie-accent, #556FFF)";
24
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
25
+ showNumero && /* @__PURE__ */ jsxRuntime.jsx(
26
+ "span",
27
+ {
28
+ className: "pointer-events-none absolute z-10 whitespace-nowrap font-extrabold leading-none tracking-tight",
29
+ style: {
30
+ left: `${numX}%`,
31
+ top: `${numY}%`,
32
+ fontSize: `${numSizeCqw}cqw`,
33
+ color: numeroColor
34
+ },
35
+ children: badge.numero
36
+ }
37
+ ),
38
+ showLabel && /* @__PURE__ */ jsxRuntime.jsx(
39
+ "span",
40
+ {
41
+ className: "pointer-events-none absolute z-10 whitespace-pre-line font-semibold leading-tight text-white",
42
+ style: {
43
+ left: `${labelX}%`,
44
+ top: `${labelY}%`,
45
+ fontSize: `${labelSizeCqw}cqw`,
46
+ color: badge.labelColor || void 0
47
+ },
48
+ children: badge.label
49
+ }
50
+ )
51
+ ] });
52
+ }
53
+
54
+ exports.BadgeOverlay = BadgeOverlay;
55
+ //# sourceMappingURL=badge.cjs.map
56
+ //# sourceMappingURL=badge.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/badge-overlay.tsx"],"names":["jsxs","Fragment","jsx"],"mappings":";;;;;AAgBA,IAAM,iBAAA,GAAoB;AAAA,EACxB,MAAA,EAAQ,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,EACtB,KAAA,EAAO,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA;AACrB,CAAA;AASA,IAAM,cAAA,GAAiB,EAAE,MAAA,EAAQ,EAAA,EAAI,OAAO,GAAA,EAAI;AAOzC,SAAS,YAAA,CAAa,EAAE,KAAA,EAAM,EAAsB;AACzD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,aAAa,CAAC,CAAC,KAAA,CAAM,MAAA,IAAU,MAAM,aAAA,KAAkB,KAAA;AAC7D,EAAA,MAAM,YAAY,CAAC,CAAC,KAAA,CAAM,KAAA,IAAS,MAAM,YAAA,KAAiB,KAAA;AAC1D,EAAA,IAAI,CAAC,UAAA,IAAc,CAAC,SAAA,EAAW,OAAO,IAAA;AAItC,EAAA,MAAM,UAAA,GAAa,cAAA,CAAe,MAAA,IAAA,CAAW,KAAA,CAAM,cAAc,GAAA,IAAO,GAAA,CAAA;AACxE,EAAA,MAAM,YAAA,GAAe,cAAA,CAAe,KAAA,IAAA,CAAU,KAAA,CAAM,aAAa,GAAA,IAAO,GAAA,CAAA;AACxE,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,aAAA,IAAiB,iBAAA,CAAkB,MAAA,CAAO,CAAA;AAC7D,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,aAAA,IAAiB,iBAAA,CAAkB,MAAA,CAAO,CAAA;AAC7D,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,YAAA,IAAgB,iBAAA,CAAkB,KAAA,CAAM,CAAA;AAC7D,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,YAAA,IAAgB,iBAAA,CAAkB,KAAA,CAAM,CAAA;AAE7D,EAAA,MAAM,WAAA,GACJ,MAAM,WAAA,IAAe,2BAAA;AACvB,EAAA,uBACEA,eAAA,CAAAC,mBAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,UAAA,oBACCC,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,gGAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,GAAG,IAAI,CAAA,CAAA,CAAA;AAAA,UACb,GAAA,EAAK,GAAG,IAAI,CAAA,CAAA,CAAA;AAAA,UACZ,QAAA,EAAU,GAAG,UAAU,CAAA,GAAA,CAAA;AAAA,UACvB,KAAA,EAAO;AAAA,SACT;AAAA,QAEC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,KACT;AAAA,IAED,SAAA,oBACCA,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,8FAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,GAAG,MAAM,CAAA,CAAA,CAAA;AAAA,UACf,GAAA,EAAK,GAAG,MAAM,CAAA,CAAA,CAAA;AAAA,UACd,QAAA,EAAU,GAAG,YAAY,CAAA,GAAA,CAAA;AAAA,UACzB,KAAA,EAAO,MAAM,UAAA,IAAc;AAAA,SAC7B;AAAA,QAEC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT,GAAA,EAEJ,CAAA;AAEJ","file":"badge.cjs","sourcesContent":["'use client'\n\n/**\n * Replica visual do badge (número + label) sobreposto a uma foto. Renderer\n * de produção pode estar em outro pacote (ex `@chrono-os/lp-react/hero`);\n * aqui usamos pra preview no admin/editor.\n *\n * Defaults em % (top-left do span dentro do container 3:4 da foto):\n * numero: left ~6% (24px em 400px W) · top ~84%\n * label: depois do numero (~36% W) · top ~88%\n *\n * Tamanho via container-query (cqw) — pai precisa `containerType:'inline-size'`.\n */\n\nimport type { BadgeData } from './types'\n\nconst BADGE_DEFAULT_POS = {\n numero: { x: 6, y: 84 },\n label: { x: 36, y: 88 },\n}\n\n/**\n * Tamanho base em % do container width (cqw). Casam com o renderer real:\n * numero: 60px em container 400px = 15% W\n * label: 14px em container 400px = 3.5% W\n * Slider 50-500% multiplica esses bases — assim qualquer tamanho de preview\n * (sm 128px, md 200px, prod 400px+) renderiza visualmente proporcional.\n */\nconst BADGE_BASE_CQW = { numero: 15, label: 3.5 }\n\nexport interface BadgeOverlayProps {\n badge?: BadgeData\n size?: 'sm' | 'md'\n}\n\nexport function BadgeOverlay({ badge }: BadgeOverlayProps) {\n if (!badge) return null\n const showNumero = !!badge.numero && badge.numeroEnabled !== false\n const showLabel = !!badge.label && badge.labelEnabled !== false\n if (!showNumero && !showLabel) return null\n // Font-size em cqw (% da width do container) — requer parent com\n // `containerType: 'inline-size'`. Proporcionalidade idêntica entre admin\n // e produção sem precisar de fator de escala.\n const numSizeCqw = BADGE_BASE_CQW.numero * ((badge.numeroSize ?? 100) / 100)\n const labelSizeCqw = BADGE_BASE_CQW.label * ((badge.labelSize ?? 100) / 100)\n const numX = badge.numeroOffsetX ?? BADGE_DEFAULT_POS.numero.x\n const numY = badge.numeroOffsetY ?? BADGE_DEFAULT_POS.numero.y\n const labelX = badge.labelOffsetX ?? BADGE_DEFAULT_POS.label.x\n const labelY = badge.labelOffsetY ?? BADGE_DEFAULT_POS.label.y\n // Default color: usa CSS var `--ie-accent` (consumer overrida via theme.css).\n const numeroColor =\n badge.numeroColor || 'var(--ie-accent, #556FFF)'\n return (\n <>\n {showNumero && (\n <span\n className=\"pointer-events-none absolute z-10 whitespace-nowrap font-extrabold leading-none tracking-tight\"\n style={{\n left: `${numX}%`,\n top: `${numY}%`,\n fontSize: `${numSizeCqw}cqw`,\n color: numeroColor,\n }}\n >\n {badge.numero}\n </span>\n )}\n {showLabel && (\n <span\n className=\"pointer-events-none absolute z-10 whitespace-pre-line font-semibold leading-tight text-white\"\n style={{\n left: `${labelX}%`,\n top: `${labelY}%`,\n fontSize: `${labelSizeCqw}cqw`,\n color: badge.labelColor || undefined,\n }}\n >\n {badge.label}\n </span>\n )}\n </>\n )\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export { B as BadgeData, a as BadgeOverlay } from './badge-BRjFgV8X.cjs';
2
+ import 'react/jsx-runtime';
3
+ import 'react';
@@ -0,0 +1,3 @@
1
+ export { B as BadgeData, a as BadgeOverlay } from './badge-BRjFgV8X.js';
2
+ import 'react/jsx-runtime';
3
+ import 'react';
package/dist/badge.js ADDED
@@ -0,0 +1,4 @@
1
+ "use client";
2
+ export { BadgeOverlay } from './chunk-P77DHS6Z.js';
3
+ //# sourceMappingURL=badge.js.map
4
+ //# sourceMappingURL=badge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"badge.js"}
@@ -0,0 +1,53 @@
1
+ import { jsxs, Fragment, jsx } from 'react/jsx-runtime';
2
+
3
+ // src/badge-overlay.tsx
4
+ var BADGE_DEFAULT_POS = {
5
+ numero: { x: 6, y: 84 },
6
+ label: { x: 36, y: 88 }
7
+ };
8
+ var BADGE_BASE_CQW = { numero: 15, label: 3.5 };
9
+ function BadgeOverlay({ badge }) {
10
+ if (!badge) return null;
11
+ const showNumero = !!badge.numero && badge.numeroEnabled !== false;
12
+ const showLabel = !!badge.label && badge.labelEnabled !== false;
13
+ if (!showNumero && !showLabel) return null;
14
+ const numSizeCqw = BADGE_BASE_CQW.numero * ((badge.numeroSize ?? 100) / 100);
15
+ const labelSizeCqw = BADGE_BASE_CQW.label * ((badge.labelSize ?? 100) / 100);
16
+ const numX = badge.numeroOffsetX ?? BADGE_DEFAULT_POS.numero.x;
17
+ const numY = badge.numeroOffsetY ?? BADGE_DEFAULT_POS.numero.y;
18
+ const labelX = badge.labelOffsetX ?? BADGE_DEFAULT_POS.label.x;
19
+ const labelY = badge.labelOffsetY ?? BADGE_DEFAULT_POS.label.y;
20
+ const numeroColor = badge.numeroColor || "var(--ie-accent, #556FFF)";
21
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
22
+ showNumero && /* @__PURE__ */ jsx(
23
+ "span",
24
+ {
25
+ className: "pointer-events-none absolute z-10 whitespace-nowrap font-extrabold leading-none tracking-tight",
26
+ style: {
27
+ left: `${numX}%`,
28
+ top: `${numY}%`,
29
+ fontSize: `${numSizeCqw}cqw`,
30
+ color: numeroColor
31
+ },
32
+ children: badge.numero
33
+ }
34
+ ),
35
+ showLabel && /* @__PURE__ */ jsx(
36
+ "span",
37
+ {
38
+ className: "pointer-events-none absolute z-10 whitespace-pre-line font-semibold leading-tight text-white",
39
+ style: {
40
+ left: `${labelX}%`,
41
+ top: `${labelY}%`,
42
+ fontSize: `${labelSizeCqw}cqw`,
43
+ color: badge.labelColor || void 0
44
+ },
45
+ children: badge.label
46
+ }
47
+ )
48
+ ] });
49
+ }
50
+
51
+ export { BadgeOverlay };
52
+ //# sourceMappingURL=chunk-P77DHS6Z.js.map
53
+ //# sourceMappingURL=chunk-P77DHS6Z.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/badge-overlay.tsx"],"names":[],"mappings":";;;AAgBA,IAAM,iBAAA,GAAoB;AAAA,EACxB,MAAA,EAAQ,EAAE,CAAA,EAAG,CAAA,EAAG,GAAG,EAAA,EAAG;AAAA,EACtB,KAAA,EAAO,EAAE,CAAA,EAAG,EAAA,EAAI,GAAG,EAAA;AACrB,CAAA;AASA,IAAM,cAAA,GAAiB,EAAE,MAAA,EAAQ,EAAA,EAAI,OAAO,GAAA,EAAI;AAOzC,SAAS,YAAA,CAAa,EAAE,KAAA,EAAM,EAAsB;AACzD,EAAA,IAAI,CAAC,OAAO,OAAO,IAAA;AACnB,EAAA,MAAM,aAAa,CAAC,CAAC,KAAA,CAAM,MAAA,IAAU,MAAM,aAAA,KAAkB,KAAA;AAC7D,EAAA,MAAM,YAAY,CAAC,CAAC,KAAA,CAAM,KAAA,IAAS,MAAM,YAAA,KAAiB,KAAA;AAC1D,EAAA,IAAI,CAAC,UAAA,IAAc,CAAC,SAAA,EAAW,OAAO,IAAA;AAItC,EAAA,MAAM,UAAA,GAAa,cAAA,CAAe,MAAA,IAAA,CAAW,KAAA,CAAM,cAAc,GAAA,IAAO,GAAA,CAAA;AACxE,EAAA,MAAM,YAAA,GAAe,cAAA,CAAe,KAAA,IAAA,CAAU,KAAA,CAAM,aAAa,GAAA,IAAO,GAAA,CAAA;AACxE,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,aAAA,IAAiB,iBAAA,CAAkB,MAAA,CAAO,CAAA;AAC7D,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,aAAA,IAAiB,iBAAA,CAAkB,MAAA,CAAO,CAAA;AAC7D,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,YAAA,IAAgB,iBAAA,CAAkB,KAAA,CAAM,CAAA;AAC7D,EAAA,MAAM,MAAA,GAAS,KAAA,CAAM,YAAA,IAAgB,iBAAA,CAAkB,KAAA,CAAM,CAAA;AAE7D,EAAA,MAAM,WAAA,GACJ,MAAM,WAAA,IAAe,2BAAA;AACvB,EAAA,uBACE,IAAA,CAAA,QAAA,EAAA,EACG,QAAA,EAAA;AAAA,IAAA,UAAA,oBACC,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,gGAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,GAAG,IAAI,CAAA,CAAA,CAAA;AAAA,UACb,GAAA,EAAK,GAAG,IAAI,CAAA,CAAA,CAAA;AAAA,UACZ,QAAA,EAAU,GAAG,UAAU,CAAA,GAAA,CAAA;AAAA,UACvB,KAAA,EAAO;AAAA,SACT;AAAA,QAEC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA,KACT;AAAA,IAED,SAAA,oBACC,GAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACC,SAAA,EAAU,8FAAA;AAAA,QACV,KAAA,EAAO;AAAA,UACL,IAAA,EAAM,GAAG,MAAM,CAAA,CAAA,CAAA;AAAA,UACf,GAAA,EAAK,GAAG,MAAM,CAAA,CAAA,CAAA;AAAA,UACd,QAAA,EAAU,GAAG,YAAY,CAAA,GAAA,CAAA;AAAA,UACzB,KAAA,EAAO,MAAM,UAAA,IAAc;AAAA,SAC7B;AAAA,QAEC,QAAA,EAAA,KAAA,CAAM;AAAA;AAAA;AACT,GAAA,EAEJ,CAAA;AAEJ","file":"chunk-P77DHS6Z.js","sourcesContent":["'use client'\n\n/**\n * Replica visual do badge (número + label) sobreposto a uma foto. Renderer\n * de produção pode estar em outro pacote (ex `@chrono-os/lp-react/hero`);\n * aqui usamos pra preview no admin/editor.\n *\n * Defaults em % (top-left do span dentro do container 3:4 da foto):\n * numero: left ~6% (24px em 400px W) · top ~84%\n * label: depois do numero (~36% W) · top ~88%\n *\n * Tamanho via container-query (cqw) — pai precisa `containerType:'inline-size'`.\n */\n\nimport type { BadgeData } from './types'\n\nconst BADGE_DEFAULT_POS = {\n numero: { x: 6, y: 84 },\n label: { x: 36, y: 88 },\n}\n\n/**\n * Tamanho base em % do container width (cqw). Casam com o renderer real:\n * numero: 60px em container 400px = 15% W\n * label: 14px em container 400px = 3.5% W\n * Slider 50-500% multiplica esses bases — assim qualquer tamanho de preview\n * (sm 128px, md 200px, prod 400px+) renderiza visualmente proporcional.\n */\nconst BADGE_BASE_CQW = { numero: 15, label: 3.5 }\n\nexport interface BadgeOverlayProps {\n badge?: BadgeData\n size?: 'sm' | 'md'\n}\n\nexport function BadgeOverlay({ badge }: BadgeOverlayProps) {\n if (!badge) return null\n const showNumero = !!badge.numero && badge.numeroEnabled !== false\n const showLabel = !!badge.label && badge.labelEnabled !== false\n if (!showNumero && !showLabel) return null\n // Font-size em cqw (% da width do container) — requer parent com\n // `containerType: 'inline-size'`. Proporcionalidade idêntica entre admin\n // e produção sem precisar de fator de escala.\n const numSizeCqw = BADGE_BASE_CQW.numero * ((badge.numeroSize ?? 100) / 100)\n const labelSizeCqw = BADGE_BASE_CQW.label * ((badge.labelSize ?? 100) / 100)\n const numX = badge.numeroOffsetX ?? BADGE_DEFAULT_POS.numero.x\n const numY = badge.numeroOffsetY ?? BADGE_DEFAULT_POS.numero.y\n const labelX = badge.labelOffsetX ?? BADGE_DEFAULT_POS.label.x\n const labelY = badge.labelOffsetY ?? BADGE_DEFAULT_POS.label.y\n // Default color: usa CSS var `--ie-accent` (consumer overrida via theme.css).\n const numeroColor =\n badge.numeroColor || 'var(--ie-accent, #556FFF)'\n return (\n <>\n {showNumero && (\n <span\n className=\"pointer-events-none absolute z-10 whitespace-nowrap font-extrabold leading-none tracking-tight\"\n style={{\n left: `${numX}%`,\n top: `${numY}%`,\n fontSize: `${numSizeCqw}cqw`,\n color: numeroColor,\n }}\n >\n {badge.numero}\n </span>\n )}\n {showLabel && (\n <span\n className=\"pointer-events-none absolute z-10 whitespace-pre-line font-semibold leading-tight text-white\"\n style={{\n left: `${labelX}%`,\n top: `${labelY}%`,\n fontSize: `${labelSizeCqw}cqw`,\n color: badge.labelColor || undefined,\n }}\n >\n {badge.label}\n </span>\n )}\n </>\n )\n}\n"]}