geoiq-frontend-ui-kit 2.0.2 → 2.0.4

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 (217) hide show
  1. package/dist/components/organisms/image-editor/components/line-session-bar.d.ts +20 -0
  2. package/dist/components/organisms/image-editor/components/line-session-bar.d.ts.map +1 -0
  3. package/dist/components/organisms/image-editor/components/panel-insert.d.ts.map +1 -1
  4. package/dist/components/organisms/image-editor/components/panel-selected.d.ts.map +1 -1
  5. package/dist/components/organisms/image-editor/components/panel.d.ts.map +1 -1
  6. package/dist/components/organisms/image-editor/components/saved-layers-list.d.ts +9 -0
  7. package/dist/components/organisms/image-editor/components/saved-layers-list.d.ts.map +1 -0
  8. package/dist/components/organisms/image-editor/image-editor-modal.d.ts.map +1 -1
  9. package/dist/components/organisms/image-editor/image-editor.types.d.ts +73 -0
  10. package/dist/components/organisms/image-editor/image-editor.types.d.ts.map +1 -1
  11. package/dist/components/organisms/image-editor/use-image-editor.d.ts.map +1 -1
  12. package/dist/components/ui/request-credits-view/component/request-credit-dialog.d.ts.map +1 -1
  13. package/dist/index.es100.js +147 -120
  14. package/dist/index.es100.js.map +1 -1
  15. package/dist/index.es101.js +16 -11
  16. package/dist/index.es101.js.map +1 -1
  17. package/dist/index.es102.js +7 -41
  18. package/dist/index.es102.js.map +1 -1
  19. package/dist/index.es103.js +21 -10
  20. package/dist/index.es103.js.map +1 -1
  21. package/dist/index.es104.js +7 -74
  22. package/dist/index.es104.js.map +1 -1
  23. package/dist/index.es105.js +177 -30
  24. package/dist/index.es105.js.map +1 -1
  25. package/dist/index.es106.js +45 -16
  26. package/dist/index.es106.js.map +1 -1
  27. package/dist/index.es107.js +42 -20
  28. package/dist/index.es107.js.map +1 -1
  29. package/dist/index.es108.js +22 -12
  30. package/dist/index.es108.js.map +1 -1
  31. package/dist/index.es109.js +122 -98
  32. package/dist/index.es109.js.map +1 -1
  33. package/dist/index.es11.js +1 -1
  34. package/dist/index.es110.js +33 -62
  35. package/dist/index.es110.js.map +1 -1
  36. package/dist/index.es111.js +60 -52
  37. package/dist/index.es111.js.map +1 -1
  38. package/dist/index.es112.js +10 -41
  39. package/dist/index.es112.js.map +1 -1
  40. package/dist/index.es113.js +21 -11
  41. package/dist/index.es113.js.map +1 -1
  42. package/dist/index.es114.js +42 -92
  43. package/dist/index.es114.js.map +1 -1
  44. package/dist/index.es115.js +37 -16
  45. package/dist/index.es115.js.map +1 -1
  46. package/dist/index.es116.js +12 -99
  47. package/dist/index.es116.js.map +1 -1
  48. package/dist/index.es117.js +92 -13
  49. package/dist/index.es117.js.map +1 -1
  50. package/dist/index.es118.js +13 -101
  51. package/dist/index.es118.js.map +1 -1
  52. package/dist/index.es119.js +71 -20
  53. package/dist/index.es119.js.map +1 -1
  54. package/dist/index.es12.js +1 -1
  55. package/dist/index.es120.js +34 -25
  56. package/dist/index.es120.js.map +1 -1
  57. package/dist/index.es121.js +20 -22
  58. package/dist/index.es121.js.map +1 -1
  59. package/dist/index.es122.js +16 -45
  60. package/dist/index.es122.js.map +1 -1
  61. package/dist/index.es123.js +11 -34
  62. package/dist/index.es123.js.map +1 -1
  63. package/dist/index.es124.js +96 -61
  64. package/dist/index.es124.js.map +1 -1
  65. package/dist/index.es125.js +57 -174
  66. package/dist/index.es125.js.map +1 -1
  67. package/dist/index.es126.js +50 -17
  68. package/dist/index.es126.js.map +1 -1
  69. package/dist/index.es127.js +2 -2
  70. package/dist/index.es128.js +2 -2
  71. package/dist/index.es129.js +1 -1
  72. package/dist/index.es130.js +1 -1
  73. package/dist/index.es131.js +2 -2
  74. package/dist/index.es132.js +35 -38
  75. package/dist/index.es132.js.map +1 -1
  76. package/dist/index.es133.js +41 -7
  77. package/dist/index.es133.js.map +1 -1
  78. package/dist/index.es134.js +88 -7
  79. package/dist/index.es134.js.map +1 -1
  80. package/dist/index.es135.js +14 -34
  81. package/dist/index.es135.js.map +1 -1
  82. package/dist/index.es136.js +269 -35
  83. package/dist/index.es136.js.map +1 -1
  84. package/dist/index.es137.js +7 -2
  85. package/dist/index.es137.js.map +1 -1
  86. package/dist/index.es138.js +23 -25
  87. package/dist/index.es138.js.map +1 -1
  88. package/dist/index.es139.js +169 -15
  89. package/dist/index.es139.js.map +1 -1
  90. package/dist/index.es140.js +82 -7
  91. package/dist/index.es140.js.map +1 -1
  92. package/dist/index.es141.js +73 -21
  93. package/dist/index.es141.js.map +1 -1
  94. package/dist/index.es142.js +3 -168
  95. package/dist/index.es142.js.map +1 -1
  96. package/dist/index.es143.js +56 -82
  97. package/dist/index.es143.js.map +1 -1
  98. package/dist/index.es144.js +119 -4
  99. package/dist/index.es144.js.map +1 -1
  100. package/dist/index.es145.js +405 -56
  101. package/dist/index.es145.js.map +1 -1
  102. package/dist/index.es146.js +25 -110
  103. package/dist/index.es146.js.map +1 -1
  104. package/dist/index.es147.js +60 -314
  105. package/dist/index.es147.js.map +1 -1
  106. package/dist/index.es148.js +29 -24
  107. package/dist/index.es148.js.map +1 -1
  108. package/dist/index.es149.js +21 -64
  109. package/dist/index.es149.js.map +1 -1
  110. package/dist/index.es150.js +36 -30
  111. package/dist/index.es150.js.map +1 -1
  112. package/dist/index.es151.js +211 -24
  113. package/dist/index.es151.js.map +1 -1
  114. package/dist/index.es152.js +141 -35
  115. package/dist/index.es152.js.map +1 -1
  116. package/dist/index.es153.js +141 -140
  117. package/dist/index.es153.js.map +1 -1
  118. package/dist/index.es154.js +45 -142
  119. package/dist/index.es154.js.map +1 -1
  120. package/dist/index.es155.js +353 -45
  121. package/dist/index.es155.js.map +1 -1
  122. package/dist/index.es156.js +14 -10
  123. package/dist/index.es156.js.map +1 -1
  124. package/dist/index.es157.js +10 -42
  125. package/dist/index.es157.js.map +1 -1
  126. package/dist/index.es158.js +44 -5
  127. package/dist/index.es158.js.map +1 -1
  128. package/dist/index.es159.js +5 -11
  129. package/dist/index.es159.js.map +1 -1
  130. package/dist/index.es16.js +1 -1
  131. package/dist/index.es160.js +10 -10
  132. package/dist/index.es160.js.map +1 -1
  133. package/dist/index.es161.js +11 -2
  134. package/dist/index.es161.js.map +1 -1
  135. package/dist/index.es162.js +2 -91
  136. package/dist/index.es162.js.map +1 -1
  137. package/dist/index.es163.js +2 -213
  138. package/dist/index.es163.js.map +1 -1
  139. package/dist/index.es164.js +23 -52
  140. package/dist/index.es164.js.map +1 -1
  141. package/dist/index.es165.js +88 -33
  142. package/dist/index.es165.js.map +1 -1
  143. package/dist/index.es166.js +52 -31
  144. package/dist/index.es166.js.map +1 -1
  145. package/dist/index.es167.js +32 -29
  146. package/dist/index.es167.js.map +1 -1
  147. package/dist/index.es168.js +26 -84
  148. package/dist/index.es168.js.map +1 -1
  149. package/dist/index.es169.js +27 -111
  150. package/dist/index.es169.js.map +1 -1
  151. package/dist/index.es170.js +97 -285
  152. package/dist/index.es170.js.map +1 -1
  153. package/dist/index.es171.js +251 -30
  154. package/dist/index.es171.js.map +1 -1
  155. package/dist/index.es172.js +63 -11
  156. package/dist/index.es172.js.map +1 -1
  157. package/dist/index.es173.js +284 -82
  158. package/dist/index.es173.js.map +1 -1
  159. package/dist/index.es174.js +29 -70
  160. package/dist/index.es174.js.map +1 -1
  161. package/dist/index.es175.js +10 -114
  162. package/dist/index.es175.js.map +1 -1
  163. package/dist/index.es176.js +23 -106
  164. package/dist/index.es176.js.map +1 -1
  165. package/dist/index.es177.js +19 -82
  166. package/dist/index.es177.js.map +1 -1
  167. package/dist/index.es178.js +63 -109
  168. package/dist/index.es178.js.map +1 -1
  169. package/dist/index.es179.js +63 -117
  170. package/dist/index.es179.js.map +1 -1
  171. package/dist/index.es180.js +112 -23
  172. package/dist/index.es180.js.map +1 -1
  173. package/dist/index.es181.js +103 -18
  174. package/dist/index.es181.js.map +1 -1
  175. package/dist/index.es182.js +86 -5
  176. package/dist/index.es182.js.map +1 -1
  177. package/dist/index.es183.js +133 -0
  178. package/dist/index.es183.js.map +1 -0
  179. package/dist/index.es184.js +133 -0
  180. package/dist/index.es184.js.map +1 -0
  181. package/dist/index.es185.js +9 -0
  182. package/dist/index.es185.js.map +1 -0
  183. package/dist/index.es19.js +1 -1
  184. package/dist/index.es2.js +21 -21
  185. package/dist/index.es2.js.map +1 -1
  186. package/dist/index.es20.js +1 -1
  187. package/dist/index.es21.js +3 -3
  188. package/dist/index.es22.js +1 -1
  189. package/dist/index.es25.js +1 -1
  190. package/dist/index.es27.js +1 -1
  191. package/dist/index.es28.js +2 -2
  192. package/dist/index.es30.js +1 -1
  193. package/dist/index.es32.js +1 -1
  194. package/dist/index.es33.js +1 -1
  195. package/dist/index.es45.js +48 -46
  196. package/dist/index.es45.js.map +1 -1
  197. package/dist/index.es46.js +2 -2
  198. package/dist/index.es47.js +1 -1
  199. package/dist/index.es48.js +1 -1
  200. package/dist/index.es53.js +1 -1
  201. package/dist/index.es54.js +1 -1
  202. package/dist/index.es57.js +1 -1
  203. package/dist/index.es59.js +1 -1
  204. package/dist/index.es67.js +2 -2
  205. package/dist/index.es68.js +1 -1
  206. package/dist/index.es71.js +1 -1
  207. package/dist/index.es72.js +7 -7
  208. package/dist/index.es73.js +2 -2
  209. package/dist/index.es85.js +1 -1
  210. package/dist/index.es97.js +16 -11
  211. package/dist/index.es97.js.map +1 -1
  212. package/dist/index.es98.js +89 -262
  213. package/dist/index.es98.js.map +1 -1
  214. package/dist/index.es99.js +13 -87
  215. package/dist/index.es99.js.map +1 -1
  216. package/dist/styles.css +55 -0
  217. package/package.json +2 -1
@@ -1,94 +1,36 @@
1
- import e from "react";
2
- import { Slider as s } from "./index.es30.js";
3
- import { SingleSelect as r } from "./index.es29.js";
4
- import { SwatchGrid as c } from "./index.es38.js";
5
- import { FONTS as n, SHAPES as h } from "./index.es145.js";
6
- import { ShapeIcons as i } from "./index.es180.js";
7
- import { ColorPicker as o } from "./index.es181.js";
8
- import { useImageEditorPortalContainer as p } from "./index.es140.js";
9
- const x = [
10
- { label: "Outline only", value: "stroke" },
11
- { label: "Solid fill", value: "fill" }
12
- ], d = [
13
- { label: "Marker", value: "round" },
14
- { label: "Highlighter", value: "highlight" }
1
+ import t from "react";
2
+ import { Slider as i } from "./index.es30.js";
3
+ import { SwatchGrid as n } from "./index.es38.js";
4
+ import { FILTERS as r } from "./index.es143.js";
5
+ const s = [
6
+ { key: "brightness", label: "Brightness", suffix: "%", min: 0, max: 200 },
7
+ { key: "contrast", label: "Contrast", suffix: "%", min: 0, max: 200 },
8
+ { key: "saturate", label: "Saturation", suffix: "%", min: 0, max: 200 },
9
+ { key: "sepia", label: "Warmth", suffix: "%", min: 0, max: 100 },
10
+ { key: "blur", label: "Blur", suffix: "px", min: 0, max: 12 },
11
+ { key: "hue", label: "Hue", suffix: "°", min: 0, max: 360 }
15
12
  ];
16
- function f({ ui: t, engine: l }) {
17
- const m = p();
18
- return /* @__PURE__ */ e.createElement("div", null, t.mode === "text" && /* @__PURE__ */ e.createElement("div", { className: "mb-3.5" }, /* @__PURE__ */ e.createElement("span", { className: "mb-1 block text-xs text-light-4" }, "Font"), /* @__PURE__ */ e.createElement(
19
- r,
13
+ function o({ adjustments: a, engine: l }) {
14
+ return /* @__PURE__ */ t.createElement("div", null, s.map((e) => /* @__PURE__ */ t.createElement("div", { key: e.key, className: "mb-3" }, /* @__PURE__ */ t.createElement("div", { className: "mb-1 flex justify-between text-xs" }, /* @__PURE__ */ t.createElement("span", null, e.label), /* @__PURE__ */ t.createElement("span", { className: "tabular-nums text-light-4" }, a[e.key], e.suffix)), /* @__PURE__ */ t.createElement(
15
+ i,
20
16
  {
21
- items: n,
22
- value: t.textFont,
23
- onValueChange: l.setTextFont,
24
- container: m
25
- }
26
- ), /* @__PURE__ */ e.createElement("span", { className: "mb-1 mt-2.5 block text-xs text-light-4" }, "Size"), /* @__PURE__ */ e.createElement(
27
- s,
28
- {
29
- min: 16,
30
- max: 200,
31
- step: 1,
32
- value: [t.textSize],
33
- onValueChange: ([a]) => l.setTextSize(a)
34
- }
35
- )), t.mode === "shape" && /* @__PURE__ */ e.createElement("div", { className: "mb-3.5" }, /* @__PURE__ */ e.createElement("span", { className: "mb-1 block text-xs text-light-4" }, "Shape"), /* @__PURE__ */ e.createElement(
36
- c,
37
- {
38
- columns: 3,
39
- value: t.selectedShapeType,
40
- onSelect: l.selectShapeType,
41
- items: h.map((a) => ({
42
- value: a.id,
43
- label: a.name,
44
- icon: i[a.id]
45
- }))
46
- }
47
- ), /* @__PURE__ */ e.createElement("span", { className: "mb-1 mt-2.5 block text-xs text-light-4" }, "Fill style"), /* @__PURE__ */ e.createElement(
48
- r,
49
- {
50
- items: x,
51
- value: t.shapeFill,
52
- onValueChange: (a) => l.setShapeFill(a),
53
- container: m
54
- }
55
- ), /* @__PURE__ */ e.createElement("span", { className: "mb-1 mt-2.5 block text-xs text-light-4" }, "Thickness"), /* @__PURE__ */ e.createElement(
56
- s,
57
- {
58
- min: 1,
59
- max: 40,
17
+ min: e.min,
18
+ max: e.max,
60
19
  step: 1,
61
- value: [t.shapeWidth],
62
- onValueChange: ([a]) => l.setShapeWidth(a)
63
- }
64
- )), t.mode === "draw" && /* @__PURE__ */ e.createElement("div", { className: "mb-3.5" }, /* @__PURE__ */ e.createElement("span", { className: "mb-1 block text-xs text-light-4" }, "Brush size"), /* @__PURE__ */ e.createElement(
65
- s,
66
- {
67
- min: 1,
68
- max: 60,
69
- step: 1,
70
- value: [t.brushSize],
71
- onValueChange: ([a]) => l.setBrushSize(a)
72
- }
73
- ), /* @__PURE__ */ e.createElement("span", { className: "mb-1 mt-2.5 block text-xs text-light-4" }, "Brush style"), /* @__PURE__ */ e.createElement(
74
- r,
75
- {
76
- items: d,
77
- value: t.brushStyle,
78
- onValueChange: (a) => l.setBrushStyle(a),
79
- container: m
20
+ value: [a[e.key]],
21
+ onValueChange: ([m]) => l.setAdjustment(e.key, m)
80
22
  }
81
- )), t.mode === "sticker" && /* @__PURE__ */ e.createElement("div", { className: "mb-3.5" }, /* @__PURE__ */ e.createElement(
82
- c,
23
+ ))), /* @__PURE__ */ t.createElement("div", { className: "my-3.5 h-px bg-neutral-1" }), /* @__PURE__ */ t.createElement("span", { className: "mb-2 block text-xs text-light-4" }, "Artistic filters"), /* @__PURE__ */ t.createElement(
24
+ n,
83
25
  {
84
- columns: 3,
85
- onSelect: l.addSticker,
86
- emptyMessage: /* @__PURE__ */ e.createElement(e.Fragment, null, "No stickers configured — pass a ", /* @__PURE__ */ e.createElement("code", null, "stickers"), " prop with image URLs."),
87
- items: t.stickers.map((a) => ({ value: a, thumbnail: a }))
26
+ columns: 2,
27
+ value: a.filter,
28
+ onSelect: (e) => l.setFilter(e),
29
+ items: r.map((e) => ({ value: e.id, label: e.name }))
88
30
  }
89
- )), t.mode === "text" && /* @__PURE__ */ e.createElement(o, { value: t.textColor, onChange: l.setTextColor }), t.mode === "shape" && /* @__PURE__ */ e.createElement(o, { value: t.shapeColor, onChange: l.setShapeColor }), t.mode === "draw" && /* @__PURE__ */ e.createElement(o, { value: t.drawColor, onChange: l.setDrawColor }));
31
+ ));
90
32
  }
91
33
  export {
92
- f as PanelInsert
34
+ o as PanelAdjust
93
35
  };
94
36
  //# sourceMappingURL=index.es168.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es168.js","sources":["../src/components/organisms/image-editor/components/panel-insert.tsx"],"sourcesContent":["import React from 'react'\n\nimport { Slider } from '@/components/molecules/slider'\nimport { SingleSelect } from '@/components/molecules/single-select'\nimport { SwatchGrid } from '@/components/molecules/swatch-grid'\n\nimport { ImageEditorEngine, ImageEditorUiState } from '../image-editor.types'\nimport { FONTS, SHAPES } from '../picture-studio-engine'\nimport { ShapeIcons } from './shape-icons'\nimport { ColorPicker } from './color-picker'\nimport { useImageEditorPortalContainer } from './portal-context'\n\ninterface PanelInsertProps {\n ui: ImageEditorUiState\n engine: ImageEditorEngine\n}\n\nconst FILL_ITEMS = [\n { label: 'Outline only', value: 'stroke' },\n { label: 'Solid fill', value: 'fill' },\n]\nconst BRUSH_STYLE_ITEMS = [\n { label: 'Marker', value: 'round' },\n { label: 'Highlighter', value: 'highlight' },\n]\n\nexport function PanelInsert({ ui, engine }: PanelInsertProps) {\n const container = useImageEditorPortalContainer()\n return (\n <div>\n {ui.mode === 'text' && (\n <div className=\"mb-3.5\">\n <span className=\"mb-1 block text-xs text-light-4\">Font</span>\n <SingleSelect\n items={FONTS}\n value={ui.textFont}\n onValueChange={engine.setTextFont}\n container={container}\n />\n <span className=\"mb-1 mt-2.5 block text-xs text-light-4\">Size</span>\n <Slider\n min={16}\n max={200}\n step={1}\n value={[ui.textSize]}\n onValueChange={([v]) => engine.setTextSize(v)}\n />\n </div>\n )}\n\n {ui.mode === 'shape' && (\n <div className=\"mb-3.5\">\n <span className=\"mb-1 block text-xs text-light-4\">Shape</span>\n <SwatchGrid\n columns={3}\n value={ui.selectedShapeType}\n onSelect={engine.selectShapeType}\n items={SHAPES.map((s) => ({\n value: s.id,\n label: s.name,\n icon: ShapeIcons[s.id],\n }))}\n />\n <span className=\"mb-1 mt-2.5 block text-xs text-light-4\">\n Fill style\n </span>\n <SingleSelect\n items={FILL_ITEMS}\n value={ui.shapeFill}\n onValueChange={(v) => engine.setShapeFill(v as 'stroke' | 'fill')}\n container={container}\n />\n <span className=\"mb-1 mt-2.5 block text-xs text-light-4\">\n Thickness\n </span>\n <Slider\n min={1}\n max={40}\n step={1}\n value={[ui.shapeWidth]}\n onValueChange={([v]) => engine.setShapeWidth(v)}\n />\n </div>\n )}\n\n {ui.mode === 'draw' && (\n <div className=\"mb-3.5\">\n <span className=\"mb-1 block text-xs text-light-4\">Brush size</span>\n <Slider\n min={1}\n max={60}\n step={1}\n value={[ui.brushSize]}\n onValueChange={([v]) => engine.setBrushSize(v)}\n />\n <span className=\"mb-1 mt-2.5 block text-xs text-light-4\">\n Brush style\n </span>\n <SingleSelect\n items={BRUSH_STYLE_ITEMS}\n value={ui.brushStyle}\n onValueChange={(v) =>\n engine.setBrushStyle(v as 'round' | 'highlight')\n }\n container={container}\n />\n </div>\n )}\n\n {ui.mode === 'sticker' && (\n <div className=\"mb-3.5\">\n <SwatchGrid\n columns={3}\n onSelect={engine.addSticker}\n emptyMessage={\n <>\n No stickers configured — pass a <code>stickers</code> prop with\n image URLs.\n </>\n }\n items={ui.stickers.map((src) => ({ value: src, thumbnail: src }))}\n />\n </div>\n )}\n\n {ui.mode === 'text' && (\n <ColorPicker value={ui.textColor} onChange={engine.setTextColor} />\n )}\n {ui.mode === 'shape' && (\n <ColorPicker value={ui.shapeColor} onChange={engine.setShapeColor} />\n )}\n {ui.mode === 'draw' && (\n <ColorPicker value={ui.drawColor} onChange={engine.setDrawColor} />\n )}\n </div>\n )\n}\n"],"names":["FILL_ITEMS","BRUSH_STYLE_ITEMS","PanelInsert","ui","engine","container","useImageEditorPortalContainer","React","SingleSelect","FONTS","Slider","v","SwatchGrid","SHAPES","s","ShapeIcons","src","ColorPicker"],"mappings":"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"}
1
+ {"version":3,"file":"index.es168.js","sources":["../src/components/organisms/image-editor/components/panel-adjust.tsx"],"sourcesContent":["import React from 'react'\n\nimport { Slider } from '@/components/molecules/slider'\nimport { SwatchGrid } from '@/components/molecules/swatch-grid'\n\nimport {\n ImageEditorAdjustments,\n ImageEditorEngine,\n} from '../image-editor.types'\nimport { FILTERS } from '../picture-studio-engine'\n\nconst SLIDERS: {\n key: Exclude<keyof ImageEditorAdjustments, 'filter'>\n label: string\n suffix: string\n min: number\n max: number\n}[] = [\n { key: 'brightness', label: 'Brightness', suffix: '%', min: 0, max: 200 },\n { key: 'contrast', label: 'Contrast', suffix: '%', min: 0, max: 200 },\n { key: 'saturate', label: 'Saturation', suffix: '%', min: 0, max: 200 },\n { key: 'sepia', label: 'Warmth', suffix: '%', min: 0, max: 100 },\n { key: 'blur', label: 'Blur', suffix: 'px', min: 0, max: 12 },\n { key: 'hue', label: 'Hue', suffix: '°', min: 0, max: 360 },\n]\n\ninterface PanelAdjustProps {\n adjustments: ImageEditorAdjustments\n engine: ImageEditorEngine\n}\n\nexport function PanelAdjust({ adjustments, engine }: PanelAdjustProps) {\n return (\n <div>\n {SLIDERS.map((s) => (\n <div key={s.key} className=\"mb-3\">\n <div className=\"mb-1 flex justify-between text-xs\">\n <span>{s.label}</span>\n <span className=\"tabular-nums text-light-4\">\n {adjustments[s.key]}\n {s.suffix}\n </span>\n </div>\n <Slider\n min={s.min}\n max={s.max}\n step={1}\n value={[adjustments[s.key]]}\n onValueChange={([v]) => engine.setAdjustment(s.key, v)}\n />\n </div>\n ))}\n <div className=\"my-3.5 h-px bg-neutral-1\" />\n <span className=\"mb-2 block text-xs text-light-4\">Artistic filters</span>\n <SwatchGrid\n columns={2}\n value={adjustments.filter}\n onSelect={(id) => engine.setFilter(id)}\n items={FILTERS.map((f) => ({ value: f.id, label: f.name }))}\n />\n </div>\n )\n}\n"],"names":["SLIDERS","PanelAdjust","adjustments","engine","React","s","Slider","v","SwatchGrid","id","FILTERS","f"],"mappings":";;;;AAWA,MAAMA,IAMA;AAAA,EACJ,EAAE,KAAK,cAAc,OAAO,cAAc,QAAQ,KAAK,KAAK,GAAG,KAAK,IAAA;AAAA,EACpE,EAAE,KAAK,YAAY,OAAO,YAAY,QAAQ,KAAK,KAAK,GAAG,KAAK,IAAA;AAAA,EAChE,EAAE,KAAK,YAAY,OAAO,cAAc,QAAQ,KAAK,KAAK,GAAG,KAAK,IAAA;AAAA,EAClE,EAAE,KAAK,SAAS,OAAO,UAAU,QAAQ,KAAK,KAAK,GAAG,KAAK,IAAA;AAAA,EAC3D,EAAE,KAAK,QAAQ,OAAO,QAAQ,QAAQ,MAAM,KAAK,GAAG,KAAK,GAAA;AAAA,EACzD,EAAE,KAAK,OAAO,OAAO,OAAO,QAAQ,KAAK,KAAK,GAAG,KAAK,IAAA;AACxD;AAOO,SAASC,EAAY,EAAE,aAAAC,GAAa,QAAAC,KAA4B;AACrE,SACEC,gBAAAA,EAAA,cAAC,OAAA,MACEJ,EAAQ,IAAI,CAACK,MACZD,gBAAAA,EAAA,cAAC,OAAA,EAAI,KAAKC,EAAE,KAAK,WAAU,OAAA,mCACxB,OAAA,EAAI,WAAU,oCAAA,GACbD,gBAAAA,EAAA,cAAC,QAAA,MAAMC,EAAE,KAAM,mCACd,QAAA,EAAK,WAAU,4BAAA,GACbH,EAAYG,EAAE,GAAG,GACjBA,EAAE,MACL,CACF,GACAD,gBAAAA,EAAA;AAAA,IAACE;AAAA,IAAA;AAAA,MACC,KAAKD,EAAE;AAAA,MACP,KAAKA,EAAE;AAAA,MACP,MAAM;AAAA,MACN,OAAO,CAACH,EAAYG,EAAE,GAAG,CAAC;AAAA,MAC1B,eAAe,CAAC,CAACE,CAAC,MAAMJ,EAAO,cAAcE,EAAE,KAAKE,CAAC;AAAA,IAAA;AAAA,EAAA,CAEzD,CACD,GACDH,gBAAAA,EAAA,cAAC,OAAA,EAAI,WAAU,4BAA2B,GAC1CA,gBAAAA,EAAA,cAAC,QAAA,EAAK,WAAU,kCAAA,GAAkC,kBAAgB,GAClEA,gBAAAA,EAAA;AAAA,IAACI;AAAA,IAAA;AAAA,MACC,SAAS;AAAA,MACT,OAAON,EAAY;AAAA,MACnB,UAAU,CAACO,MAAON,EAAO,UAAUM,CAAE;AAAA,MACrC,OAAOC,EAAQ,IAAI,CAACC,OAAO,EAAE,OAAOA,EAAE,IAAI,OAAOA,EAAE,KAAA,EAAO;AAAA,IAAA;AAAA,EAAA,CAE9D;AAEJ;"}
@@ -1,120 +1,36 @@
1
- import { Trash2 as c } from "lucide-react";
2
1
  import e from "react";
3
- import { Button as m } from "./index.es9.js";
4
- import { Textarea as o } from "./index.es16.js";
5
- import { Slider as n } from "./index.es30.js";
6
- import { SingleSelect as s } from "./index.es29.js";
7
- import { FONTS as i } from "./index.es145.js";
8
- import { ColorPicker as x } from "./index.es181.js";
9
- import { useImageEditorPortalContainer as p } from "./index.es140.js";
10
- const u = [
11
- { label: "Outline only", value: "stroke" },
12
- { label: "Solid fill", value: "fill" }
13
- ];
14
- function C({ selected: t, engine: a }) {
15
- const r = p();
16
- return /* @__PURE__ */ e.createElement("div", null, t.type === "text" && /* @__PURE__ */ e.createElement("div", { className: "mb-3.5" }, /* @__PURE__ */ e.createElement("span", { className: "mb-1 block text-xs text-light-4" }, "Text"), /* @__PURE__ */ e.createElement(
17
- o,
18
- {
19
- className: "min-h-[52px]",
20
- value: t.text ?? "",
21
- onChange: (l) => a.setSelectedText(l.target.value)
22
- }
23
- ), /* @__PURE__ */ e.createElement("span", { className: "mb-1 mt-2.5 block text-xs text-light-4" }, "Font"), /* @__PURE__ */ e.createElement(
24
- s,
25
- {
26
- items: i,
27
- value: t.font ?? "",
28
- onValueChange: a.setSelectedFont,
29
- container: r
30
- }
31
- ), /* @__PURE__ */ e.createElement("div", { className: "mb-1 mt-2.5 flex justify-between text-xs text-light-4" }, /* @__PURE__ */ e.createElement("span", null, "Size"), /* @__PURE__ */ e.createElement("span", null, t.size, "px")), /* @__PURE__ */ e.createElement(
32
- n,
33
- {
34
- min: 10,
35
- max: 240,
36
- step: 1,
37
- value: [t.size ?? 24],
38
- onValueChange: ([l]) => a.setSelectedTextSize(l)
39
- }
40
- ), /* @__PURE__ */ e.createElement("div", { className: "mb-1 mt-2.5 flex justify-between text-xs text-light-4" }, /* @__PURE__ */ e.createElement("span", null, "Box size"), /* @__PURE__ */ e.createElement("span", null, t.boxWidth, "px")), /* @__PURE__ */ e.createElement(
41
- n,
42
- {
43
- min: 20,
44
- max: 2e3,
45
- step: 1,
46
- value: [t.boxWidth ?? 200],
47
- onValueChange: ([l]) => a.setSelectedBoxWidth(l)
48
- }
49
- )), t.type === "shape" && /* @__PURE__ */ e.createElement("div", { className: "mb-3.5" }, /* @__PURE__ */ e.createElement("span", { className: "mb-1 block text-xs text-light-4" }, "Fill style"), /* @__PURE__ */ e.createElement(
50
- s,
51
- {
52
- items: u,
53
- value: t.fill ?? "stroke",
54
- onValueChange: (l) => a.setSelectedShapeFill(l),
55
- container: r
56
- }
57
- ), /* @__PURE__ */ e.createElement("span", { className: "mb-1 mt-2.5 block text-xs text-light-4" }, "Thickness"), /* @__PURE__ */ e.createElement(
58
- n,
59
- {
60
- min: 1,
61
- max: 40,
62
- step: 1,
63
- value: [t.width ?? 6],
64
- onValueChange: ([l]) => a.setSelectedWidth(l)
65
- }
66
- )), t.type === "stroke" && /* @__PURE__ */ e.createElement("div", { className: "mb-3.5" }, /* @__PURE__ */ e.createElement("span", { className: "mb-1 block text-xs text-light-4" }, "Brush size"), /* @__PURE__ */ e.createElement(
67
- n,
68
- {
69
- min: 1,
70
- max: 60,
71
- step: 1,
72
- value: [t.width ?? 8],
73
- onValueChange: ([l]) => a.setSelectedWidth(l)
74
- }
75
- )), t.type !== "sticker" && /* @__PURE__ */ e.createElement(
76
- x,
77
- {
78
- value: t.color ?? "#d24b2f",
79
- onChange: a.setSelectedColor
80
- }
81
- ), /* @__PURE__ */ e.createElement("div", { className: "my-3.5 h-px bg-neutral-1" }), /* @__PURE__ */ e.createElement("div", { className: "flex flex-col gap-2" }, /* @__PURE__ */ e.createElement(
82
- m,
83
- {
84
- variant: "secondary",
85
- size: "sm",
86
- onClick: a.bringSelectedToFront
87
- },
88
- "Bring to front"
89
- ), /* @__PURE__ */ e.createElement(
90
- m,
91
- {
92
- variant: "secondary",
93
- size: "sm",
94
- onClick: a.sendSelectedToBack
95
- },
96
- "Send to back"
97
- ), /* @__PURE__ */ e.createElement(
98
- m,
99
- {
100
- variant: "secondary",
101
- size: "sm",
102
- onClick: a.duplicateSelected
2
+ import { SingleSelect as l } from "./index.es29.js";
3
+ import { CROP_RATIOS as o } from "./index.es143.js";
4
+ import { useImageEditorPortalContainer as n } from "./index.es137.js";
5
+ function s({ ui: r, engine: t }) {
6
+ const a = n();
7
+ return /* @__PURE__ */ e.createElement("div", null, /* @__PURE__ */ e.createElement("p", { className: "mb-3.5 text-xs leading-relaxed text-light-4" }, "Drag a box on the image, then apply."), /* @__PURE__ */ e.createElement("span", { className: "mb-1 block text-xs text-light-4" }, "Aspect ratio"), /* @__PURE__ */ e.createElement(
8
+ l,
9
+ {
10
+ items: o,
11
+ value: r.cropRatio,
12
+ onValueChange: t.setCropRatio,
13
+ container: a
14
+ }
15
+ ), /* @__PURE__ */ e.createElement("div", { className: "my-3.5 h-px bg-neutral-1" }), /* @__PURE__ */ e.createElement(
16
+ "button",
17
+ {
18
+ type: "button",
19
+ onClick: t.applyCrop,
20
+ className: "mb-2 w-full rounded-lg bg-rest-p1 py-2.5 text-sm text-white hover:bg-hover-p1"
103
21
  },
104
- "Duplicate"
22
+ "Apply crop"
105
23
  ), /* @__PURE__ */ e.createElement(
106
- m,
24
+ "button",
107
25
  {
108
- variant: "secondary",
109
- size: "sm",
110
- onClick: a.deleteSelected,
111
- prefixIcon: /* @__PURE__ */ e.createElement(c, { className: "h-4 w-4" }),
112
- className: "text-danger-1"
26
+ type: "button",
27
+ onClick: t.cancelCrop,
28
+ className: "w-full rounded-lg border border-neutral-1 bg-white py-2.5 text-sm hover:bg-light-3"
113
29
  },
114
- "Delete layer"
115
- )));
30
+ "Cancel"
31
+ ));
116
32
  }
117
33
  export {
118
- C as PanelSelected
34
+ s as PanelCrop
119
35
  };
120
36
  //# sourceMappingURL=index.es169.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.es169.js","sources":["../src/components/organisms/image-editor/components/panel-selected.tsx"],"sourcesContent":["import { Trash2 } from 'lucide-react'\nimport React from 'react'\n\nimport { Button } from '@/components/atoms/button'\nimport { Textarea } from '@/components/atoms/textarea'\nimport { Slider } from '@/components/molecules/slider'\nimport { SingleSelect } from '@/components/molecules/single-select'\n\nimport {\n ImageEditorEngine,\n ImageEditorSelectedLayer,\n} from '../image-editor.types'\nimport { FONTS } from '../picture-studio-engine'\nimport { ColorPicker } from './color-picker'\nimport { useImageEditorPortalContainer } from './portal-context'\n\ninterface PanelSelectedProps {\n selected: ImageEditorSelectedLayer\n engine: ImageEditorEngine\n}\n\nconst FILL_ITEMS = [\n { label: 'Outline only', value: 'stroke' },\n { label: 'Solid fill', value: 'fill' },\n]\n\nexport function PanelSelected({ selected, engine }: PanelSelectedProps) {\n const container = useImageEditorPortalContainer()\n return (\n <div>\n {selected.type === 'text' && (\n <div className=\"mb-3.5\">\n <span className=\"mb-1 block text-xs text-light-4\">Text</span>\n <Textarea\n className=\"min-h-[52px]\"\n value={selected.text ?? ''}\n onChange={(e) => engine.setSelectedText(e.target.value)}\n />\n <span className=\"mb-1 mt-2.5 block text-xs text-light-4\">Font</span>\n <SingleSelect\n items={FONTS}\n value={selected.font ?? ''}\n onValueChange={engine.setSelectedFont}\n container={container}\n />\n <div className=\"mb-1 mt-2.5 flex justify-between text-xs text-light-4\">\n <span>Size</span>\n <span>{selected.size}px</span>\n </div>\n <Slider\n min={10}\n max={240}\n step={1}\n value={[selected.size ?? 24]}\n onValueChange={([v]) => engine.setSelectedTextSize(v)}\n />\n <div className=\"mb-1 mt-2.5 flex justify-between text-xs text-light-4\">\n <span>Box size</span>\n <span>{selected.boxWidth}px</span>\n </div>\n <Slider\n min={20}\n max={2000}\n step={1}\n value={[selected.boxWidth ?? 200]}\n onValueChange={([v]) => engine.setSelectedBoxWidth(v)}\n />\n </div>\n )}\n\n {selected.type === 'shape' && (\n <div className=\"mb-3.5\">\n <span className=\"mb-1 block text-xs text-light-4\">Fill style</span>\n <SingleSelect\n items={FILL_ITEMS}\n value={selected.fill ?? 'stroke'}\n onValueChange={(v) =>\n engine.setSelectedShapeFill(v as 'stroke' | 'fill')\n }\n container={container}\n />\n <span className=\"mb-1 mt-2.5 block text-xs text-light-4\">\n Thickness\n </span>\n <Slider\n min={1}\n max={40}\n step={1}\n value={[selected.width ?? 6]}\n onValueChange={([v]) => engine.setSelectedWidth(v)}\n />\n </div>\n )}\n\n {selected.type === 'stroke' && (\n <div className=\"mb-3.5\">\n <span className=\"mb-1 block text-xs text-light-4\">Brush size</span>\n <Slider\n min={1}\n max={60}\n step={1}\n value={[selected.width ?? 8]}\n onValueChange={([v]) => engine.setSelectedWidth(v)}\n />\n </div>\n )}\n\n {selected.type !== 'sticker' && (\n <ColorPicker\n value={selected.color ?? '#d24b2f'}\n onChange={engine.setSelectedColor}\n />\n )}\n\n <div className=\"my-3.5 h-px bg-neutral-1\" />\n\n <div className=\"flex flex-col gap-2\">\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={engine.bringSelectedToFront}\n >\n Bring to front\n </Button>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={engine.sendSelectedToBack}\n >\n Send to back\n </Button>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={engine.duplicateSelected}\n >\n Duplicate\n </Button>\n <Button\n variant=\"secondary\"\n size=\"sm\"\n onClick={engine.deleteSelected}\n prefixIcon={<Trash2 className=\"h-4 w-4\" />}\n className=\"text-danger-1\"\n >\n Delete layer\n </Button>\n </div>\n </div>\n )\n}\n"],"names":["FILL_ITEMS","PanelSelected","selected","engine","container","useImageEditorPortalContainer","React","Textarea","e","SingleSelect","FONTS","Slider","v","ColorPicker","Button","Trash2"],"mappings":"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"}
1
+ {"version":3,"file":"index.es169.js","sources":["../src/components/organisms/image-editor/components/panel-crop.tsx"],"sourcesContent":["import React from 'react'\n\nimport { SingleSelect } from '@/components/molecules/single-select'\n\nimport { ImageEditorEngine, ImageEditorUiState } from '../image-editor.types'\nimport { CROP_RATIOS } from '../picture-studio-engine'\nimport { useImageEditorPortalContainer } from './portal-context'\n\ninterface PanelCropProps {\n ui: ImageEditorUiState\n engine: ImageEditorEngine\n}\n\nexport function PanelCrop({ ui, engine }: PanelCropProps) {\n const container = useImageEditorPortalContainer()\n return (\n <div>\n <p className=\"mb-3.5 text-xs leading-relaxed text-light-4\">\n Drag a box on the image, then apply.\n </p>\n <span className=\"mb-1 block text-xs text-light-4\">Aspect ratio</span>\n <SingleSelect\n items={CROP_RATIOS}\n value={ui.cropRatio}\n onValueChange={engine.setCropRatio}\n container={container}\n />\n <div className=\"my-3.5 h-px bg-neutral-1\" />\n <button\n type=\"button\"\n onClick={engine.applyCrop}\n className=\"mb-2 w-full rounded-lg bg-rest-p1 py-2.5 text-sm text-white hover:bg-hover-p1\"\n >\n Apply crop\n </button>\n <button\n type=\"button\"\n onClick={engine.cancelCrop}\n className=\"w-full rounded-lg border border-neutral-1 bg-white py-2.5 text-sm hover:bg-light-3\"\n >\n Cancel\n </button>\n </div>\n )\n}\n"],"names":["PanelCrop","ui","engine","container","useImageEditorPortalContainer","React","SingleSelect","CROP_RATIOS"],"mappings":";;;;AAaO,SAASA,EAAU,EAAE,IAAAC,GAAI,QAAAC,KAA0B;AACxD,QAAMC,IAAYC,EAAA;AAClB,SACEC,gBAAAA,EAAA,cAAC,OAAA,MACCA,gBAAAA,EAAA,cAAC,KAAA,EAAE,WAAU,8CAAA,GAA8C,sCAE3D,GACAA,gBAAAA,EAAA,cAAC,QAAA,EAAK,WAAU,qCAAkC,cAAY,GAC9DA,gBAAAA,EAAA;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,OAAOC;AAAA,MACP,OAAON,EAAG;AAAA,MACV,eAAeC,EAAO;AAAA,MACtB,WAAAC;AAAA,IAAA;AAAA,EAAA,GAEFE,gBAAAA,EAAA,cAAC,OAAA,EAAI,WAAU,4BAA2B,GAC1CA,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAASH,EAAO;AAAA,MAChB,WAAU;AAAA,IAAA;AAAA,IACX;AAAA,EAAA,GAGDG,gBAAAA,EAAA;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,MAAK;AAAA,MACL,SAASH,EAAO;AAAA,MAChB,WAAU;AAAA,IAAA;AAAA,IACX;AAAA,EAAA,CAGH;AAEJ;"}