@arslankhan/doc-forge 0.0.0-stage → 0.1.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.
Files changed (246) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/LICENSE +13 -0
  3. package/LICENSING.md +80 -0
  4. package/README.md +547 -2
  5. package/RELEASE.md +50 -0
  6. package/dist/binding-path.d.ts +15 -0
  7. package/dist/binding-path.d.ts.map +1 -0
  8. package/dist/binding-path.js +37 -0
  9. package/dist/binding-path.js.map +1 -0
  10. package/dist/binding.d.ts +91 -0
  11. package/dist/binding.d.ts.map +1 -0
  12. package/dist/binding.js +229 -0
  13. package/dist/binding.js.map +1 -0
  14. package/dist/designer/Canvas.d.ts +51 -0
  15. package/dist/designer/Canvas.d.ts.map +1 -0
  16. package/dist/designer/Canvas.js +188 -0
  17. package/dist/designer/Canvas.js.map +1 -0
  18. package/dist/designer/DocumentDesigner.d.ts +14 -0
  19. package/dist/designer/DocumentDesigner.d.ts.map +1 -0
  20. package/dist/designer/DocumentDesigner.js +351 -0
  21. package/dist/designer/DocumentDesigner.js.map +1 -0
  22. package/dist/designer/HtmlPreview.d.ts +9 -0
  23. package/dist/designer/HtmlPreview.d.ts.map +1 -0
  24. package/dist/designer/HtmlPreview.js +20 -0
  25. package/dist/designer/HtmlPreview.js.map +1 -0
  26. package/dist/designer/ImageBindingFields.d.ts +11 -0
  27. package/dist/designer/ImageBindingFields.d.ts.map +1 -0
  28. package/dist/designer/ImageBindingFields.js +106 -0
  29. package/dist/designer/ImageBindingFields.js.map +1 -0
  30. package/dist/designer/InvoiceFields.d.ts +13 -0
  31. package/dist/designer/InvoiceFields.d.ts.map +1 -0
  32. package/dist/designer/InvoiceFields.js +85 -0
  33. package/dist/designer/InvoiceFields.js.map +1 -0
  34. package/dist/designer/PreviewDataDialog.d.ts +13 -0
  35. package/dist/designer/PreviewDataDialog.d.ts.map +1 -0
  36. package/dist/designer/PreviewDataDialog.js +16 -0
  37. package/dist/designer/PreviewDataDialog.js.map +1 -0
  38. package/dist/designer/PropertiesPanel.d.ts +15 -0
  39. package/dist/designer/PropertiesPanel.d.ts.map +1 -0
  40. package/dist/designer/PropertiesPanel.js +63 -0
  41. package/dist/designer/PropertiesPanel.js.map +1 -0
  42. package/dist/designer/ReportFields.d.ts +14 -0
  43. package/dist/designer/ReportFields.d.ts.map +1 -0
  44. package/dist/designer/ReportFields.js +257 -0
  45. package/dist/designer/ReportFields.js.map +1 -0
  46. package/dist/designer/StyleFields.d.ts +16 -0
  47. package/dist/designer/StyleFields.d.ts.map +1 -0
  48. package/dist/designer/StyleFields.js +138 -0
  49. package/dist/designer/StyleFields.js.map +1 -0
  50. package/dist/designer/TextBindingFields.d.ts +11 -0
  51. package/dist/designer/TextBindingFields.d.ts.map +1 -0
  52. package/dist/designer/TextBindingFields.js +105 -0
  53. package/dist/designer/TextBindingFields.js.map +1 -0
  54. package/dist/designer/Toolbar.d.ts +52 -0
  55. package/dist/designer/Toolbar.d.ts.map +1 -0
  56. package/dist/designer/Toolbar.js +62 -0
  57. package/dist/designer/Toolbar.js.map +1 -0
  58. package/dist/designer/Toolbox.d.ts +8 -0
  59. package/dist/designer/Toolbox.d.ts.map +1 -0
  60. package/dist/designer/Toolbox.js +43 -0
  61. package/dist/designer/Toolbox.js.map +1 -0
  62. package/dist/designer/border-preview.d.ts +15 -0
  63. package/dist/designer/border-preview.d.ts.map +1 -0
  64. package/dist/designer/border-preview.js +34 -0
  65. package/dist/designer/border-preview.js.map +1 -0
  66. package/dist/designer/history.d.ts +13 -0
  67. package/dist/designer/history.d.ts.map +1 -0
  68. package/dist/designer/history.js +51 -0
  69. package/dist/designer/history.js.map +1 -0
  70. package/dist/designer/index.d.ts +5 -0
  71. package/dist/designer/index.d.ts.map +1 -0
  72. package/dist/designer/index.js +3 -0
  73. package/dist/designer/index.js.map +1 -0
  74. package/dist/designer/page-geometry.d.ts +35 -0
  75. package/dist/designer/page-geometry.d.ts.map +1 -0
  76. package/dist/designer/page-geometry.js +123 -0
  77. package/dist/designer/page-geometry.js.map +1 -0
  78. package/dist/designer/styles.d.ts +3 -0
  79. package/dist/designer/styles.d.ts.map +1 -0
  80. package/dist/designer/styles.js +594 -0
  81. package/dist/designer/styles.js.map +1 -0
  82. package/dist/designer/template-edits.d.ts +26 -0
  83. package/dist/designer/template-edits.d.ts.map +1 -0
  84. package/dist/designer/template-edits.js +323 -0
  85. package/dist/designer/template-edits.js.map +1 -0
  86. package/dist/designer/theme.d.ts +31 -0
  87. package/dist/designer/theme.d.ts.map +1 -0
  88. package/dist/designer/theme.js +92 -0
  89. package/dist/designer/theme.js.map +1 -0
  90. package/dist/examples/bound-invoice.d.ts +143 -0
  91. package/dist/examples/bound-invoice.d.ts.map +1 -0
  92. package/dist/examples/bound-invoice.js +99 -0
  93. package/dist/examples/bound-invoice.js.map +1 -0
  94. package/dist/examples/full-invoice-data.d.ts +81 -0
  95. package/dist/examples/full-invoice-data.d.ts.map +1 -0
  96. package/dist/examples/full-invoice-data.js +86 -0
  97. package/dist/examples/full-invoice-data.js.map +1 -0
  98. package/dist/examples/full-invoice.d.ts +402 -0
  99. package/dist/examples/full-invoice.d.ts.map +1 -0
  100. package/dist/examples/full-invoice.js +199 -0
  101. package/dist/examples/full-invoice.js.map +1 -0
  102. package/dist/examples/invoice-data.d.ts +51 -0
  103. package/dist/examples/invoice-data.d.ts.map +1 -0
  104. package/dist/examples/invoice-data.js +51 -0
  105. package/dist/examples/invoice-data.js.map +1 -0
  106. package/dist/examples/invoice.d.ts +90 -0
  107. package/dist/examples/invoice.d.ts.map +1 -0
  108. package/dist/examples/invoice.js +62 -0
  109. package/dist/examples/invoice.js.map +1 -0
  110. package/dist/examples/jobs-report-data.d.ts +84 -0
  111. package/dist/examples/jobs-report-data.d.ts.map +1 -0
  112. package/dist/examples/jobs-report-data.js +79 -0
  113. package/dist/examples/jobs-report-data.js.map +1 -0
  114. package/dist/examples/jobs-report.d.ts +182 -0
  115. package/dist/examples/jobs-report.d.ts.map +1 -0
  116. package/dist/examples/jobs-report.js +96 -0
  117. package/dist/examples/jobs-report.js.map +1 -0
  118. package/dist/index.d.ts +31 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +21 -0
  121. package/dist/index.js.map +1 -0
  122. package/dist/invoice/calculate.d.ts +59 -0
  123. package/dist/invoice/calculate.d.ts.map +1 -0
  124. package/dist/invoice/calculate.js +270 -0
  125. package/dist/invoice/calculate.js.map +1 -0
  126. package/dist/invoice/context.d.ts +15 -0
  127. package/dist/invoice/context.d.ts.map +1 -0
  128. package/dist/invoice/context.js +79 -0
  129. package/dist/invoice/context.js.map +1 -0
  130. package/dist/invoice/format.d.ts +10 -0
  131. package/dist/invoice/format.d.ts.map +1 -0
  132. package/dist/invoice/format.js +95 -0
  133. package/dist/invoice/format.js.map +1 -0
  134. package/dist/license/capabilities.d.ts +17 -0
  135. package/dist/license/capabilities.d.ts.map +1 -0
  136. package/dist/license/capabilities.js +46 -0
  137. package/dist/license/capabilities.js.map +1 -0
  138. package/dist/license/client.d.ts +109 -0
  139. package/dist/license/client.d.ts.map +1 -0
  140. package/dist/license/client.js +346 -0
  141. package/dist/license/client.js.map +1 -0
  142. package/dist/license/codec.d.ts +5 -0
  143. package/dist/license/codec.d.ts.map +1 -0
  144. package/dist/license/codec.js +26 -0
  145. package/dist/license/codec.js.map +1 -0
  146. package/dist/license/errors.d.ts +11 -0
  147. package/dist/license/errors.d.ts.map +1 -0
  148. package/dist/license/errors.js +19 -0
  149. package/dist/license/errors.js.map +1 -0
  150. package/dist/license/features.d.ts +20 -0
  151. package/dist/license/features.d.ts.map +1 -0
  152. package/dist/license/features.js +28 -0
  153. package/dist/license/features.js.map +1 -0
  154. package/dist/license/index.d.ts +16 -0
  155. package/dist/license/index.d.ts.map +1 -0
  156. package/dist/license/index.js +9 -0
  157. package/dist/license/index.js.map +1 -0
  158. package/dist/license/provider.d.ts +59 -0
  159. package/dist/license/provider.d.ts.map +1 -0
  160. package/dist/license/provider.js +150 -0
  161. package/dist/license/provider.js.map +1 -0
  162. package/dist/license/redact.d.ts +4 -0
  163. package/dist/license/redact.d.ts.map +1 -0
  164. package/dist/license/redact.js +15 -0
  165. package/dist/license/redact.js.map +1 -0
  166. package/dist/license/store.d.ts +26 -0
  167. package/dist/license/store.d.ts.map +1 -0
  168. package/dist/license/store.js +90 -0
  169. package/dist/license/store.js.map +1 -0
  170. package/dist/license/token.d.ts +45 -0
  171. package/dist/license/token.d.ts.map +1 -0
  172. package/dist/license/token.js +195 -0
  173. package/dist/license/token.js.map +1 -0
  174. package/dist/pdf/browser-blocked.d.ts +12 -0
  175. package/dist/pdf/browser-blocked.d.ts.map +1 -0
  176. package/dist/pdf/browser-blocked.js +25 -0
  177. package/dist/pdf/browser-blocked.js.map +1 -0
  178. package/dist/pdf/browser.d.ts +12 -0
  179. package/dist/pdf/browser.d.ts.map +1 -0
  180. package/dist/pdf/browser.js +69 -0
  181. package/dist/pdf/browser.js.map +1 -0
  182. package/dist/pdf/errors.d.ts +6 -0
  183. package/dist/pdf/errors.d.ts.map +1 -0
  184. package/dist/pdf/errors.js +11 -0
  185. package/dist/pdf/errors.js.map +1 -0
  186. package/dist/pdf/index.d.ts +10 -0
  187. package/dist/pdf/index.d.ts.map +1 -0
  188. package/dist/pdf/index.js +9 -0
  189. package/dist/pdf/index.js.map +1 -0
  190. package/dist/pdf/options.d.ts +143 -0
  191. package/dist/pdf/options.d.ts.map +1 -0
  192. package/dist/pdf/options.js +322 -0
  193. package/dist/pdf/options.js.map +1 -0
  194. package/dist/pdf/render-pdf.d.ts +13 -0
  195. package/dist/pdf/render-pdf.d.ts.map +1 -0
  196. package/dist/pdf/render-pdf.js +195 -0
  197. package/dist/pdf/render-pdf.js.map +1 -0
  198. package/dist/render/appearance.d.ts +25 -0
  199. package/dist/render/appearance.d.ts.map +1 -0
  200. package/dist/render/appearance.js +149 -0
  201. package/dist/render/appearance.js.map +1 -0
  202. package/dist/render/css.d.ts +17 -0
  203. package/dist/render/css.d.ts.map +1 -0
  204. package/dist/render/css.js +170 -0
  205. package/dist/render/css.js.map +1 -0
  206. package/dist/render/errors.d.ts +6 -0
  207. package/dist/render/errors.d.ts.map +1 -0
  208. package/dist/render/errors.js +11 -0
  209. package/dist/render/errors.js.map +1 -0
  210. package/dist/render/escape.d.ts +7 -0
  211. package/dist/render/escape.d.ts.map +1 -0
  212. package/dist/render/escape.js +27 -0
  213. package/dist/render/escape.js.map +1 -0
  214. package/dist/render/image-policy.d.ts +21 -0
  215. package/dist/render/image-policy.d.ts.map +1 -0
  216. package/dist/render/image-policy.js +62 -0
  217. package/dist/render/image-policy.js.map +1 -0
  218. package/dist/render/render-html.d.ts +28 -0
  219. package/dist/render/render-html.d.ts.map +1 -0
  220. package/dist/render/render-html.js +364 -0
  221. package/dist/render/render-html.js.map +1 -0
  222. package/dist/render/render-report.d.ts +23 -0
  223. package/dist/render/render-report.d.ts.map +1 -0
  224. package/dist/render/render-report.js +313 -0
  225. package/dist/render/render-report.js.map +1 -0
  226. package/dist/report/process.d.ts +48 -0
  227. package/dist/report/process.d.ts.map +1 -0
  228. package/dist/report/process.js +347 -0
  229. package/dist/report/process.js.map +1 -0
  230. package/dist/schema.d.ts +30 -0
  231. package/dist/schema.d.ts.map +1 -0
  232. package/dist/schema.js +8 -0
  233. package/dist/schema.js.map +1 -0
  234. package/dist/serialize.d.ts +13 -0
  235. package/dist/serialize.d.ts.map +1 -0
  236. package/dist/serialize.js +42 -0
  237. package/dist/serialize.js.map +1 -0
  238. package/dist/types.d.ts +335 -0
  239. package/dist/types.d.ts.map +1 -0
  240. package/dist/types.js +40 -0
  241. package/dist/types.js.map +1 -0
  242. package/dist/validate.d.ts +15 -0
  243. package/dist/validate.d.ts.map +1 -0
  244. package/dist/validate.js +977 -0
  245. package/dist/validate.js.map +1 -0
  246. package/package.json +97 -4
@@ -0,0 +1,43 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ const TOOLS = [
3
+ { type: "text", label: "Text", detail: "A text block" },
4
+ { type: "image", label: "Image", detail: "Image placeholder" },
5
+ { type: "line", label: "Line", detail: "Horizontal or diagonal" },
6
+ { type: "rectangle", label: "Rectangle", detail: "Box or frame" },
7
+ { type: "items", label: "Items", detail: "Repeating invoice rows" },
8
+ { type: "totals", label: "Totals", detail: "Subtotal, tax, and total" },
9
+ { type: "reportTable", label: "Report table", detail: "Repeating rows and totals" },
10
+ ];
11
+ export function Toolbox({ onAdd }) {
12
+ return (_jsxs("aside", { className: "df-side df-side--left", "aria-label": "Element toolbox", children: [_jsx("h2", { className: "df-side-title", children: "Elements" }), _jsx("p", { className: "df-side-note", children: "Add an element to the page. It is selected immediately." }), TOOLS.map((tool) => (_jsxs("button", { type: "button", className: "df-tool", "data-element-type": tool.type, onClick: () => onAdd(tool.type), children: [_jsx("span", { className: "df-tool-icon", "aria-hidden": "true", children: _jsx(ToolIcon, { type: tool.type }) }), _jsxs("span", { children: [_jsx("strong", { children: tool.label }), _jsx("span", { children: tool.detail })] })] }, tool.type)))] }));
13
+ }
14
+ function ToolIcon({ type }) {
15
+ const common = {
16
+ width: 18,
17
+ height: 18,
18
+ viewBox: "0 0 18 18",
19
+ fill: "none",
20
+ stroke: "currentColor",
21
+ strokeWidth: 1.4,
22
+ };
23
+ if (type === "text") {
24
+ return (_jsx("svg", { ...common, children: _jsx("path", { d: "M3 4h12M9 4v10M6 14h6" }) }));
25
+ }
26
+ if (type === "image") {
27
+ return (_jsxs("svg", { ...common, children: [_jsx("rect", { x: "2.5", y: "3.5", width: "13", height: "11", rx: "1" }), _jsx("path", { d: "M4 12l3-3 2 2 2-2 3 3" }), _jsx("circle", { cx: "6.5", cy: "7", r: "0.8", fill: "currentColor", stroke: "none" })] }));
28
+ }
29
+ if (type === "line") {
30
+ return (_jsx("svg", { ...common, children: _jsx("path", { d: "M3 14L15 4" }) }));
31
+ }
32
+ if (type === "items") {
33
+ return (_jsxs("svg", { ...common, children: [_jsx("rect", { x: "2.5", y: "3", width: "13", height: "12" }), _jsx("path", { d: "M2.5 7h13M2.5 11h13M7 3v12" })] }));
34
+ }
35
+ if (type === "totals") {
36
+ return (_jsx("svg", { ...common, children: _jsx("path", { d: "M3 5h12M3 9h8M3 13h12" }) }));
37
+ }
38
+ if (type === "reportTable") {
39
+ return (_jsxs("svg", { ...common, children: [_jsx("rect", { x: "2.5", y: "3", width: "13", height: "12" }), _jsx("path", { d: "M2.5 6.5h13M6 6.5V15M11 6.5V15" })] }));
40
+ }
41
+ return (_jsx("svg", { ...common, children: _jsx("rect", { x: "3", y: "3.5", width: "12", height: "11", rx: "1" }) }));
42
+ }
43
+ //# sourceMappingURL=Toolbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Toolbox.js","sourceRoot":"","sources":["../../src/designer/Toolbox.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { ElementStyle } from "../types.js";
2
+ /**
3
+ * Canvas border for one element or table cell.
4
+ * Lengths are page pixels. Missing or zero width draws no border, so a stylesheet cannot supply a different color.
5
+ */
6
+ export declare function previewBorderCss(style: ElementStyle | undefined, pxPerUnit: number): {
7
+ borderTop?: string;
8
+ borderRight?: string;
9
+ borderBottom?: string;
10
+ borderLeft?: string;
11
+ borderStyle?: string;
12
+ borderWidth?: number;
13
+ borderColor?: string;
14
+ };
15
+ //# sourceMappingURL=border-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"border-preview.d.ts","sourceRoot":"","sources":["../../src/designer/border-preview.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,YAAY,GAAG,SAAS,EAC/B,SAAS,EAAE,MAAM,GAChB;IACD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAmBA"}
@@ -0,0 +1,34 @@
1
+ /**
2
+ * Canvas border for one element or table cell.
3
+ * Lengths are page pixels. Missing or zero width draws no border, so a stylesheet cannot supply a different color.
4
+ */
5
+ export function previewBorderCss(style, pxPerUnit) {
6
+ const line = style?.borderStyle ?? "solid";
7
+ const width = style?.borderWidth ?? 0;
8
+ const color = style?.borderColor ?? "#1c2430";
9
+ const shared = line !== "none" && width > 0 ? Math.max(width * pxPerUnit, 1) : 0;
10
+ const individual = style?.borderTop || style?.borderRight || style?.borderBottom || style?.borderLeft;
11
+ if (individual) {
12
+ return {
13
+ borderTop: sideLine(style?.borderTop, line, width, color, pxPerUnit),
14
+ borderRight: sideLine(style?.borderRight, line, width, color, pxPerUnit),
15
+ borderBottom: sideLine(style?.borderBottom, line, width, color, pxPerUnit),
16
+ borderLeft: sideLine(style?.borderLeft, line, width, color, pxPerUnit),
17
+ };
18
+ }
19
+ return {
20
+ borderStyle: shared > 0 ? line : "none",
21
+ borderWidth: shared,
22
+ borderColor: color,
23
+ };
24
+ }
25
+ function sideLine(edge, line, width, color, pxPerUnit) {
26
+ const edgeLine = edge?.style ?? line;
27
+ const edgeWidth = edge?.width ?? width;
28
+ const edgeColor = edge?.color ?? color;
29
+ if (edgeLine === "none" || edgeWidth <= 0) {
30
+ return "none";
31
+ }
32
+ return `${Math.max(edgeWidth * pxPerUnit, 1)}px ${edgeLine} ${edgeColor}`;
33
+ }
34
+ //# sourceMappingURL=border-preview.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"border-preview.js","sourceRoot":"","sources":["../../src/designer/border-preview.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAA+B,EAC/B,SAAiB;IAUjB,MAAM,IAAI,GAAG,KAAK,EAAE,WAAW,IAAI,OAAO,CAAC;IAC3C,MAAM,KAAK,GAAG,KAAK,EAAE,WAAW,IAAI,CAAC,CAAC;IACtC,MAAM,KAAK,GAAG,KAAK,EAAE,WAAW,IAAI,SAAS,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,KAAK,MAAM,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACjF,MAAM,UAAU,GAAG,KAAK,EAAE,SAAS,IAAI,KAAK,EAAE,WAAW,IAAI,KAAK,EAAE,YAAY,IAAI,KAAK,EAAE,UAAU,CAAC;IACtG,IAAI,UAAU,EAAE,CAAC;QACf,OAAO;YACL,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;YACpE,WAAW,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;YACxE,YAAY,EAAE,QAAQ,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;YAC1E,UAAU,EAAE,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,SAAS,CAAC;SACvE,CAAC;IACJ,CAAC;IACD,OAAO;QACL,WAAW,EAAE,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM;QACvC,WAAW,EAAE,MAAM;QACnB,WAAW,EAAE,KAAK;KACnB,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CACf,IAA+B,EAC/B,IAAY,EACZ,KAAa,EACb,KAAa,EACb,SAAiB;IAEjB,MAAM,QAAQ,GAAG,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC;IACrC,MAAM,SAAS,GAAG,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC;IACvC,MAAM,SAAS,GAAG,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC;IACvC,IAAI,QAAQ,KAAK,MAAM,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;QAC1C,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,GAAG,SAAS,EAAE,CAAC,CAAC,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface History<T> {
2
+ past: T[];
3
+ present: T;
4
+ future: T[];
5
+ coalescing: boolean;
6
+ }
7
+ export declare function createHistory<T>(present: T): History<T>;
8
+ export declare function sameJson<T>(left: T, right: T): boolean;
9
+ export declare function historyApply<T>(history: History<T>, next: T, coalesce: boolean, equals: (left: T, right: T) => boolean): History<T>;
10
+ export declare function historyUndo<T>(history: History<T>): History<T>;
11
+ export declare function historyRedo<T>(history: History<T>): History<T>;
12
+ export declare function historyEndGesture<T>(history: History<T>): History<T>;
13
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/designer/history.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO,CAAC,CAAC;IACxB,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,OAAO,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,CAAC,EAAE,CAAC;IACZ,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEvD;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAEtD;AAED,wBAAgB,YAAY,CAAC,CAAC,EAC5B,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,EACnB,IAAI,EAAE,CAAC,EACP,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,OAAO,GACrC,OAAO,CAAC,CAAC,CAAC,CAeZ;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAY9D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAY9D;AAED,wBAAgB,iBAAiB,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAKpE"}
@@ -0,0 +1,51 @@
1
+ export function createHistory(present) {
2
+ return { past: [], present, future: [], coalescing: false };
3
+ }
4
+ export function sameJson(left, right) {
5
+ return JSON.stringify(left) === JSON.stringify(right);
6
+ }
7
+ export function historyApply(history, next, coalesce, equals) {
8
+ if (equals(history.present, next)) {
9
+ return history;
10
+ }
11
+ if (coalesce && history.coalescing) {
12
+ return { ...history, present: next, future: [] };
13
+ }
14
+ return {
15
+ past: [...history.past, history.present].slice(-100),
16
+ present: next,
17
+ future: [],
18
+ coalescing: coalesce,
19
+ };
20
+ }
21
+ export function historyUndo(history) {
22
+ const previous = history.past[history.past.length - 1];
23
+ if (previous === undefined) {
24
+ return history;
25
+ }
26
+ return {
27
+ past: history.past.slice(0, -1),
28
+ present: previous,
29
+ future: [history.present, ...history.future],
30
+ coalescing: false,
31
+ };
32
+ }
33
+ export function historyRedo(history) {
34
+ const next = history.future[0];
35
+ if (next === undefined) {
36
+ return history;
37
+ }
38
+ return {
39
+ past: [...history.past, history.present],
40
+ present: next,
41
+ future: history.future.slice(1),
42
+ coalescing: false,
43
+ };
44
+ }
45
+ export function historyEndGesture(history) {
46
+ if (!history.coalescing) {
47
+ return history;
48
+ }
49
+ return { ...history, coalescing: false };
50
+ }
51
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/designer/history.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,aAAa,CAAI,OAAU;IACzC,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC9D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAI,IAAO,EAAE,KAAQ;IAC3C,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,OAAmB,EACnB,IAAO,EACP,QAAiB,EACjB,MAAsC;IAEtC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC;QAClC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,QAAQ,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;QACnC,OAAO,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACnD,CAAC;IAED,OAAO;QACL,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;QACpD,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,QAAQ;KACrB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,OAAmB;IAChD,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;QAC3B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC/B,OAAO,EAAE,QAAQ;QACjB,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QAC5C,UAAU,EAAE,KAAK;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAI,OAAmB;IAChD,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC/B,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC;QACxC,OAAO,EAAE,IAAI;QACb,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B,UAAU,EAAE,KAAK;KAClB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAI,OAAmB;IACtD,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,OAAO,EAAE,GAAG,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { DocumentDesigner } from "./DocumentDesigner.js";
2
+ export type { DocumentDesignerProps } from "./DocumentDesigner.js";
3
+ export { THEME_PREFERENCES, THEME_STORAGE_KEY, browserMatchMedia, browserThemeStorage, isThemePreference, readSystemPrefersDark, readThemePreference, resolveTheme, subscribeSystemTheme, writeThemePreference, } from "./theme.js";
4
+ export type { ResolvedTheme, ThemePreference, ThemeStorage } from "./theme.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/designer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,YAAY,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AACnE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,aAAa,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { DocumentDesigner } from "./DocumentDesigner.js";
2
+ export { THEME_PREFERENCES, THEME_STORAGE_KEY, browserMatchMedia, browserThemeStorage, isThemePreference, readSystemPrefersDark, readThemePreference, resolveTheme, subscribeSystemTheme, writeThemePreference, } from "./theme.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/designer/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,mBAAmB,EACnB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,YAAY,EACZ,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,YAAY,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { ElementDimensions, ElementPosition, ElementType, LengthUnit, PageConfiguration, PageMargins } from "../types.js";
2
+ export declare const GRID_SIZE = 5;
3
+ export declare const MIN_ZOOM = 0.25;
4
+ export declare const MAX_ZOOM = 2;
5
+ export declare const ZOOM_STEP = 0.1;
6
+ export declare const PAGE_FIT_PADDING = 48;
7
+ export interface ResolvedPage {
8
+ width: number;
9
+ height: number;
10
+ unit: LengthUnit;
11
+ margins: PageMargins;
12
+ }
13
+ export interface ContentBox {
14
+ x: number;
15
+ y: number;
16
+ width: number;
17
+ height: number;
18
+ }
19
+ export declare function roundUnit(value: number): number;
20
+ export declare function resolvePage(page: PageConfiguration): ResolvedPage;
21
+ export declare function pixelsPerUnit(unit: LengthUnit): number;
22
+ export declare function pagePixelSize(page: ResolvedPage): {
23
+ width: number;
24
+ height: number;
25
+ pxPerUnit: number;
26
+ };
27
+ export declare function marginBox(page: ResolvedPage): ContentBox;
28
+ /** Content area inside the margins, or the full page when the margins leave no room. */
29
+ export declare function contentBox(page: ResolvedPage): ContentBox;
30
+ export declare function snapToGrid(value: number, grid: number): number;
31
+ export declare function clampPosition(page: ResolvedPage, dimensions: ElementDimensions, position: ElementPosition): ElementPosition;
32
+ export declare function normalizeDimensions(type: ElementType, width: number, height: number, snap: boolean): ElementDimensions | null;
33
+ export declare function nextZoom(current: number, direction: -1 | 1): number;
34
+ export declare function fitZoom(viewportWidth: number, viewportHeight: number, pageWidth: number, pageHeight: number, padding: number): number;
35
+ //# sourceMappingURL=page-geometry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-geometry.d.ts","sourceRoot":"","sources":["../../src/designer/page-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,WAAW,EAAE,UAAU,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/H,eAAO,MAAM,SAAS,IAAI,CAAC;AAC3B,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,eAAO,MAAM,SAAS,MAAM,CAAC;AAC7B,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAInC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,UAAU,CAAC;IACjB,OAAO,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE/C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,YAAY,CA2BjE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAWtD;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,YAAY,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAOtG;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,CAWxD;AAED,wFAAwF;AACxF,wBAAgB,UAAU,CAAC,IAAI,EAAE,YAAY,GAAG,UAAU,CAMzD;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAK9D;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,YAAY,EAClB,UAAU,EAAE,iBAAiB,EAC7B,QAAQ,EAAE,eAAe,GACxB,eAAe,CAOjB;AAED,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,OAAO,GACZ,iBAAiB,GAAG,IAAI,CAsB1B;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAGnE;AAED,wBAAgB,OAAO,CACrB,aAAa,EAAE,MAAM,EACrB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,MAAM,GACd,MAAM,CAQR"}
@@ -0,0 +1,123 @@
1
+ import { standardPageDimensions } from "../types.js";
2
+ export const GRID_SIZE = 5;
3
+ export const MIN_ZOOM = 0.25;
4
+ export const MAX_ZOOM = 2;
5
+ export const ZOOM_STEP = 0.1;
6
+ export const PAGE_FIT_PADDING = 48;
7
+ const PIXELS_PER_INCH = 96;
8
+ export function roundUnit(value) {
9
+ return Math.round(value * 100) / 100;
10
+ }
11
+ export function resolvePage(page) {
12
+ if (page.paperSize === "custom") {
13
+ const dimensions = page.dimensions ?? { width: 210, height: 297, unit: "mm" };
14
+ return {
15
+ width: dimensions.width,
16
+ height: dimensions.height,
17
+ unit: dimensions.unit,
18
+ margins: page.margins,
19
+ };
20
+ }
21
+ if (page.dimensions) {
22
+ return {
23
+ width: page.dimensions.width,
24
+ height: page.dimensions.height,
25
+ unit: page.dimensions.unit,
26
+ margins: page.margins,
27
+ };
28
+ }
29
+ const dimensions = standardPageDimensions(page.paperSize, page.orientation);
30
+ return {
31
+ width: dimensions.width,
32
+ height: dimensions.height,
33
+ unit: dimensions.unit,
34
+ margins: page.margins,
35
+ };
36
+ }
37
+ export function pixelsPerUnit(unit) {
38
+ switch (unit) {
39
+ case "mm":
40
+ return PIXELS_PER_INCH / 25.4;
41
+ case "pt":
42
+ return PIXELS_PER_INCH / 72;
43
+ case "in":
44
+ return PIXELS_PER_INCH;
45
+ case "px":
46
+ return 1;
47
+ }
48
+ }
49
+ export function pagePixelSize(page) {
50
+ const pxPerUnit = pixelsPerUnit(page.unit);
51
+ return {
52
+ width: page.width * pxPerUnit,
53
+ height: page.height * pxPerUnit,
54
+ pxPerUnit,
55
+ };
56
+ }
57
+ export function marginBox(page) {
58
+ const left = Math.min(Math.max(page.margins.left, 0), page.width);
59
+ const top = Math.min(Math.max(page.margins.top, 0), page.height);
60
+ const right = Math.min(Math.max(page.margins.right, 0), Math.max(page.width - left, 0));
61
+ const bottom = Math.min(Math.max(page.margins.bottom, 0), Math.max(page.height - top, 0));
62
+ return {
63
+ x: left,
64
+ y: top,
65
+ width: Math.max(page.width - left - right, 0),
66
+ height: Math.max(page.height - top - bottom, 0),
67
+ };
68
+ }
69
+ /** Content area inside the margins, or the full page when the margins leave no room. */
70
+ export function contentBox(page) {
71
+ const box = marginBox(page);
72
+ if (box.width >= 10 && box.height >= 10) {
73
+ return box;
74
+ }
75
+ return { x: 0, y: 0, width: page.width, height: page.height };
76
+ }
77
+ export function snapToGrid(value, grid) {
78
+ if (grid <= 0) {
79
+ return roundUnit(value);
80
+ }
81
+ return roundUnit(Math.round(value / grid) * grid);
82
+ }
83
+ export function clampPosition(page, dimensions, position) {
84
+ const maxX = Math.max(roundUnit(page.width - Math.max(dimensions.width, 0)), 0);
85
+ const maxY = Math.max(roundUnit(page.height - Math.max(dimensions.height, 0)), 0);
86
+ return {
87
+ x: roundUnit(Math.min(Math.max(position.x, 0), maxX)),
88
+ y: roundUnit(Math.min(Math.max(position.y, 0), maxY)),
89
+ };
90
+ }
91
+ export function normalizeDimensions(type, width, height, snap) {
92
+ if (!Number.isFinite(width) || !Number.isFinite(height)) {
93
+ return null;
94
+ }
95
+ let nextWidth = snap ? snapToGrid(width, GRID_SIZE) : roundUnit(width);
96
+ let nextHeight = snap ? snapToGrid(height, GRID_SIZE) : roundUnit(height);
97
+ if (type === "line") {
98
+ nextWidth = Math.max(nextWidth, 0);
99
+ nextHeight = Math.max(nextHeight, 0);
100
+ if (nextWidth === 0 && nextHeight === 0) {
101
+ return null;
102
+ }
103
+ return { width: nextWidth, height: nextHeight };
104
+ }
105
+ if (nextWidth <= 0 || nextHeight <= 0) {
106
+ return null;
107
+ }
108
+ return { width: nextWidth, height: nextHeight };
109
+ }
110
+ export function nextZoom(current, direction) {
111
+ const stepped = roundUnit(current + direction * ZOOM_STEP);
112
+ return Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, stepped));
113
+ }
114
+ export function fitZoom(viewportWidth, viewportHeight, pageWidth, pageHeight, padding) {
115
+ const availableWidth = Math.max(viewportWidth - padding, 1);
116
+ const availableHeight = Math.max(viewportHeight - padding, 1);
117
+ if (pageWidth <= 0 || pageHeight <= 0) {
118
+ return 1;
119
+ }
120
+ const scale = Math.min(availableWidth / pageWidth, availableHeight / pageHeight);
121
+ return Math.min(MAX_ZOOM, Math.max(MIN_ZOOM, scale));
122
+ }
123
+ //# sourceMappingURL=page-geometry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-geometry.js","sourceRoot":"","sources":["../../src/designer/page-geometry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare const STYLE_ID = "doc-forge-designer-styles";
2
+ export declare const DESIGNER_CSS = "\n.df-shell {\n --df-app: #e7ebf0;\n --df-surface: #ffffff;\n --df-surface-muted: #f7f8fa;\n --df-text: #1c2430;\n --df-text-secondary: #3d4858;\n --df-text-muted: #5c6778;\n --df-border: #d5dbe3;\n --df-input-bg: #ffffff;\n --df-input-border: #c5ceda;\n --df-hover: #e8eef6;\n --df-selected: #e5eefc;\n --df-selected-border: #c5d7f5;\n --df-selected-text: #174f9e;\n --df-primary: #1b5fbf;\n --df-primary-hover: #174f9e;\n --df-primary-text: #ffffff;\n --df-focus: #1b5fbf;\n --df-workspace: #c5cad3;\n --df-shadow: rgba(20, 28, 40, 0.18);\n --df-overlay: rgba(20, 28, 40, 0.45);\n --df-danger: #9f1d1d;\n --df-danger-border: #e4b4b4;\n --df-warning: #8a5a00;\n --df-success: #0f7b4c;\n color-scheme: light;\n height: 100%;\n min-height: 560px;\n display: flex;\n flex-direction: column;\n background: var(--df-app);\n color: var(--df-text);\n font-family: \"Segoe UI\", \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n font-size: 13px;\n line-height: 1.4;\n}\n.df-shell[data-theme=\"dark\"] {\n --df-app: #12161c;\n --df-surface: #1c232d;\n --df-surface-muted: #171d26;\n --df-text: #e8eef6;\n --df-text-secondary: #c5d0de;\n --df-text-muted: #a8b3c2;\n --df-border: #313a48;\n --df-input-bg: #121820;\n --df-input-border: #465266;\n --df-hover: #283140;\n --df-selected: #1d3a5f;\n --df-selected-border: #3d6eab;\n --df-selected-text: #d6e6ff;\n --df-primary: #3d8bfd;\n --df-primary-hover: #69a6ff;\n --df-primary-text: #061018;\n --df-focus: #9ec1ff;\n --df-workspace: #0c1016;\n --df-shadow: rgba(0, 0, 0, 0.45);\n --df-overlay: rgba(0, 0, 0, 0.62);\n --df-danger: #ffb4b4;\n --df-danger-border: #8a3d3d;\n --df-warning: #f0c674;\n --df-success: #7dcea0;\n color-scheme: dark;\n}\n@media (prefers-reduced-motion: reduce) {\n .df-shell,\n .df-shell * {\n transition: none !important;\n }\n}\n.df-shell *,\n.df-shell *::before,\n.df-shell *::after {\n box-sizing: border-box;\n}\n.df-shell button,\n.df-shell input,\n.df-shell select,\n.df-shell textarea {\n font: inherit;\n}\n.df-shell input,\n.df-shell select,\n.df-shell textarea {\n color: var(--df-text);\n}\n.df-shell button:focus-visible,\n.df-shell input:focus-visible,\n.df-shell select:focus-visible,\n.df-shell textarea:focus-visible {\n outline: 2px solid var(--df-focus);\n outline-offset: 1px;\n}\n.df-toolbar {\n display: flex;\n flex-wrap: wrap;\n align-items: center;\n gap: 8px;\n padding: 8px 12px;\n background: var(--df-surface);\n border-bottom: 1px solid var(--df-border);\n}\n.df-toolbar-group {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.df-name {\n flex: 1 1 180px;\n min-width: 160px;\n}\n.df-name input,\n.df-select,\n.df-custom input,\n.df-field input,\n.df-field select,\n.df-field textarea {\n width: 100%;\n border: 1px solid var(--df-input-border);\n border-radius: 6px;\n background: var(--df-input-bg);\n color: var(--df-text);\n}\n.df-name input,\n.df-select,\n.df-custom input,\n.df-field input,\n.df-field select {\n height: 32px;\n padding: 0 8px;\n}\n.df-select {\n width: auto;\n}\n.df-custom {\n display: flex;\n align-items: center;\n gap: 8px;\n}\n.df-custom label {\n display: flex;\n align-items: center;\n gap: 4px;\n}\n.df-custom input {\n width: 72px;\n}\n.df-button {\n height: 32px;\n padding: 0 10px;\n border: 1px solid var(--df-input-border);\n border-radius: 6px;\n background: var(--df-surface);\n color: var(--df-text);\n cursor: pointer;\n}\n.df-button:hover:not(:disabled) {\n background: var(--df-hover);\n}\n.df-button:disabled {\n opacity: 0.45;\n cursor: default;\n}\n.df-button--primary {\n background: var(--df-primary);\n border-color: var(--df-primary-hover);\n color: var(--df-primary-text);\n}\n.df-button--primary:hover:not(:disabled) {\n background: var(--df-primary-hover);\n}\n.df-button--pressed {\n background: var(--df-selected);\n border-color: var(--df-primary);\n color: var(--df-selected-text);\n}\n.df-button--danger {\n width: 100%;\n color: var(--df-danger);\n border-color: var(--df-danger-border);\n background: var(--df-surface);\n}\n.df-theme {\n display: flex;\n align-items: center;\n gap: 2px;\n}\n.df-theme-button {\n width: 32px;\n height: 32px;\n display: grid;\n place-items: center;\n padding: 0;\n}\n.df-theme-button svg {\n display: block;\n}\n.df-zoom {\n min-width: 52px;\n text-align: center;\n font-variant-numeric: tabular-nums;\n color: var(--df-text-secondary);\n}\n.df-status {\n flex: 1 1 160px;\n min-height: 1.2em;\n font-size: 12px;\n}\n.df-status--ok { color: var(--df-success); }\n.df-status--error { color: var(--df-danger); }\n.df-body {\n flex: 1;\n min-height: 0;\n display: flex;\n}\n.df-side {\n width: 240px;\n flex: 0 0 240px;\n background: var(--df-surface-muted);\n overflow: auto;\n padding: 12px;\n}\n.df-side--left { border-right: 1px solid var(--df-border); }\n.df-side--right { border-left: 1px solid var(--df-border); }\n.df-side-title {\n margin: 0 0 4px;\n font-size: 12px;\n font-weight: 650;\n letter-spacing: 0.04em;\n text-transform: uppercase;\n color: var(--df-text-muted);\n}\n.df-side-note {\n margin: 0 0 12px;\n color: var(--df-text-muted);\n font-size: 12px;\n}\n.df-tool {\n display: flex;\n align-items: center;\n gap: 10px;\n width: 100%;\n margin-bottom: 6px;\n padding: 8px;\n border: 1px solid transparent;\n border-radius: 8px;\n background: transparent;\n text-align: left;\n cursor: pointer;\n}\n.df-tool:hover { background: var(--df-hover); }\n.df-tool-icon {\n width: 32px;\n height: 32px;\n display: grid;\n place-items: center;\n border: 1px solid var(--df-border);\n border-radius: 6px;\n background: var(--df-surface);\n color: var(--df-text);\n flex: 0 0 auto;\n}\n.df-tool strong { display: block; font-weight: 600; color: var(--df-text); }\n.df-tool span { display: block; color: var(--df-text-muted); font-size: 12px; }\n.df-viewport {\n flex: 1;\n min-width: 0;\n min-height: 0;\n display: flex;\n flex-direction: column;\n background: var(--df-workspace);\n}\n.df-viewport-stage {\n flex: 1;\n min-height: 0;\n overflow: auto;\n display: grid;\n place-content: safe center;\n padding: 24px;\n}\n.df-preview-banner {\n flex: 0 0 auto;\n padding: 8px 12px;\n background: var(--df-selected);\n color: var(--df-selected-text);\n border-bottom: 1px solid var(--df-selected-border);\n text-align: center;\n}\n.df-viewport-stage--html {\n display: flex;\n flex-direction: column;\n padding: 0;\n}\n.df-html-note {\n flex: 0 0 auto;\n margin: 0;\n padding: 8px 12px;\n background: var(--df-surface);\n color: var(--df-text-muted);\n border-bottom: 1px solid var(--df-border);\n}\n.df-html-frame {\n flex: 1;\n width: 100%;\n min-height: 0;\n border: 0;\n background: var(--df-workspace);\n}\n.df-page-slot { position: relative; }\n/* Document surface. These colors stay with the template and do not follow the editor theme. */\n.df-page {\n position: absolute;\n top: 0;\n left: 0;\n background: #fff;\n color: #1c2430;\n box-shadow: 0 12px 40px var(--df-shadow);\n transform-origin: top left;\n}\n.df-grid,\n.df-margins,\n.df-empty {\n position: absolute;\n pointer-events: none;\n}\n.df-grid {\n inset: 0;\n background-image:\n linear-gradient(to right, rgba(28, 36, 48, 0.12) 1px, transparent 1px),\n linear-gradient(to bottom, rgba(28, 36, 48, 0.12) 1px, transparent 1px);\n}\n.df-margins {\n border: 1px dashed rgba(27, 95, 191, 0.7);\n}\n.df-empty {\n left: 50%;\n top: 50%;\n transform: translate(-50%, -50%);\n color: #8b95a5;\n font-size: 14px;\n white-space: nowrap;\n}\n.df-element {\n position: absolute;\n touch-action: none;\n cursor: move;\n user-select: none;\n}\n.df-element--selected {\n box-shadow: 0 0 0 2px #1b5fbf;\n z-index: 2;\n}\n.df-text {\n overflow: hidden;\n white-space: pre-wrap;\n word-break: break-word;\n}\n.df-image {\n display: flex;\n align-items: center;\n justify-content: center;\n overflow: hidden;\n padding: 4px;\n text-align: center;\n color: #5c6778;\n font-size: 11px;\n background:\n repeating-linear-gradient(-45deg, #f7f8fa, #f7f8fa 6px, #eef1f5 6px, #eef1f5 12px);\n border: 1px dashed #9aa3b2;\n}\n.df-items,\n.df-report,\n.df-totals {\n width: 100%;\n height: 100%;\n overflow: hidden;\n background: #ffffff;\n color: #1c2430;\n font-size: 10px;\n pointer-events: none;\n}\n.df-items table,\n.df-report table,\n.df-totals table {\n width: 100%;\n border-collapse: collapse;\n}\n.df-items th,\n.df-items td,\n.df-report th,\n.df-report td,\n.df-totals td {\n padding: 2px 4px;\n text-align: left;\n}\n.df-totals td:last-child { text-align: right; }\n.df-report tr[data-kind=\"group\"],\n.df-report tr[data-kind=\"subtotal\"],\n.df-report tr[data-kind=\"grand\"] { font-weight: 700; }\n.df-column {\n margin: 0 0 8px;\n padding: 8px;\n border: 1px solid var(--df-border);\n border-radius: 6px;\n}\n.df-column legend { padding: 0 4px; font-size: 12px; }\n.df-image-photo {\n width: 100%;\n height: 100%;\n object-fit: contain;\n pointer-events: none;\n}\n.df-rect { overflow: hidden; }\n.df-line { overflow: visible; }\n.df-handle {\n position: absolute;\n width: 10px;\n height: 10px;\n right: -5px;\n bottom: -5px;\n padding: 0;\n border: 1px solid #1b5fbf;\n border-radius: 2px;\n background: #fff;\n cursor: nwse-resize;\n z-index: 3;\n}\n.df-style {\n border: 1px solid var(--df-border);\n border-radius: 8px;\n background: var(--df-surface);\n}\n.df-style > summary {\n cursor: pointer;\n padding: 8px 10px;\n font-size: 12px;\n font-weight: 650;\n}\n.df-style-body {\n display: grid;\n gap: 8px;\n padding: 0 10px 10px;\n}\n.df-reset { justify-self: start; font-size: 11px; }\n.df-props {\n display: grid;\n gap: 12px;\n align-content: start;\n}\n.df-props-head {\n display: flex;\n justify-content: space-between;\n align-items: center;\n gap: 8px;\n}\n.df-props-head h3 {\n margin: 0;\n font-size: 14px;\n}\n.df-link {\n border: 0;\n background: transparent;\n color: var(--df-primary);\n cursor: pointer;\n padding: 0;\n}\n.df-link:hover { color: var(--df-primary-hover); }\n.df-field {\n display: grid;\n gap: 4px;\n}\n.df-check {\n display: flex;\n align-items: center;\n gap: 6px;\n margin: 6px 0;\n font-size: 12px;\n}\n.df-field > span,\n.df-custom span {\n font-size: 11px;\n font-weight: 650;\n color: var(--df-text-muted);\n}\n.df-field-row {\n display: grid;\n grid-template-columns: 1fr 1fr;\n gap: 8px;\n}\n.df-field textarea {\n min-height: 72px;\n padding: 8px;\n resize: vertical;\n}\n.df-color {\n display: flex;\n gap: 6px;\n align-items: center;\n}\n.df-color input[type=\"color\"] {\n width: 32px;\n height: 32px;\n padding: 2px;\n flex: 0 0 auto;\n}\n.df-meta {\n margin: 0;\n color: var(--df-text-muted);\n font-size: 12px;\n}\n.df-error {\n margin: 24px;\n padding: 16px;\n border: 1px solid var(--df-danger-border);\n border-radius: 8px;\n background: var(--df-surface);\n color: var(--df-danger);\n}\n.df-error ul { margin: 8px 0 0; padding-left: 18px; }\n.df-binding {\n margin: 0;\n padding: 8px;\n border: 1px solid var(--df-border);\n border-radius: 8px;\n display: grid;\n gap: 8px;\n}\n.df-binding legend {\n padding: 0 4px;\n font-size: 11px;\n font-weight: 650;\n color: var(--df-text-muted);\n}\n.df-choice {\n display: grid;\n gap: 4px;\n}\n.df-choice label {\n display: flex;\n align-items: center;\n gap: 6px;\n}\n.df-path-note {\n margin: 0;\n font-size: 12px;\n}\n.df-path-note--ok { color: var(--df-success); }\n.df-path-note--error { color: var(--df-danger); }\n.df-path-note--muted { color: var(--df-text-muted); }\n.df-dialog-backdrop {\n position: fixed;\n inset: 0;\n z-index: 30;\n background: var(--df-overlay);\n display: grid;\n place-items: center;\n padding: 16px;\n}\n.df-dialog {\n width: min(520px, 100%);\n max-height: min(640px, 100%);\n overflow: auto;\n background: var(--df-surface);\n color: var(--df-text);\n border-radius: 10px;\n padding: 16px;\n display: grid;\n gap: 10px;\n box-shadow: 0 16px 48px var(--df-shadow);\n}\n.df-dialog h3 {\n margin: 0;\n font-size: 16px;\n}\n.df-dialog textarea {\n min-height: 240px;\n padding: 8px;\n border: 1px solid var(--df-input-border);\n border-radius: 6px;\n background: var(--df-input-bg);\n color: var(--df-text);\n font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;\n font-size: 12px;\n resize: vertical;\n}\n.df-dialog-actions {\n display: flex;\n flex-wrap: wrap;\n gap: 8px;\n justify-content: flex-end;\n}\n";
3
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/designer/styles.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,QAAQ,8BAA8B,CAAC;AAEpD,eAAO,MAAM,YAAY,m0YA+kBxB,CAAC"}