@eigenpal/docx-js-editor 0.0.19 → 0.0.21

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 (201) hide show
  1. package/README.md +83 -0
  2. package/dist/{ClipboardManager-EZ0C6Onq.d.cts → ClipboardManager-B1jZrC6h.d.cts} +1 -1
  3. package/dist/{ClipboardManager-D6dkOFg6.d.ts → ClipboardManager-jqJVxB6g.d.ts} +1 -1
  4. package/dist/{DocumentAgent-BcCDg7i2.d.ts → DocumentAgent-CnJ9AEl_.d.cts} +31 -3
  5. package/dist/{DocumentAgent-B0EC8lPC.d.cts → DocumentAgent-CrbsDniO.d.ts} +31 -3
  6. package/dist/{FindReplaceDialog-AWQXKEUQ.js → FindReplaceDialog-AQFR4OCT.js} +1 -2
  7. package/dist/FindReplaceDialog-J3DI3U5I.cjs +1 -0
  8. package/dist/{FootnotePropertiesDialog-73VT2ZVZ.cjs → FootnotePropertiesDialog-DO5DCAW6.cjs} +1 -2
  9. package/dist/{FootnotePropertiesDialog-ZM3EF3EF.js → FootnotePropertiesDialog-YYIZU5U6.js} +1 -2
  10. package/dist/{HyperlinkDialog-BA25XUT5.js → HyperlinkDialog-HGZ2S37Z.js} +1 -2
  11. package/dist/HyperlinkDialog-PEPS3C2G.cjs +1 -0
  12. package/dist/{ImagePositionDialog-AIAMKPFK.js → ImagePositionDialog-DQ4JWS4F.js} +1 -2
  13. package/dist/{ImagePositionDialog-KMK7ROV2.cjs → ImagePositionDialog-UYXYHSP4.cjs} +1 -2
  14. package/dist/{ImagePropertiesDialog-ERFCUVCW.js → ImagePropertiesDialog-GJMGLM6G.js} +1 -2
  15. package/dist/{ImagePropertiesDialog-USMMRK6X.cjs → ImagePropertiesDialog-V6SVKINO.cjs} +1 -2
  16. package/dist/{TablePropertiesDialog-72CIUAZT.cjs → TablePropertiesDialog-A36OXG3A.cjs} +1 -2
  17. package/dist/{TablePropertiesDialog-EMUEVYB3.js → TablePropertiesDialog-STZOGHJB.js} +1 -2
  18. package/dist/{agentApi-BFVyKagE.d.cts → agentApi-DfsWRyrP.d.cts} +1 -1
  19. package/dist/{agentApi-BFVyKagE.d.ts → agentApi-DfsWRyrP.d.ts} +1 -1
  20. package/dist/{chunk-FDANI5P4.cjs → chunk-2VHQ7YOQ.cjs} +1 -2
  21. package/dist/chunk-2Y6FLZ5Q.js +3 -0
  22. package/dist/chunk-32HMU2UV.js +111 -0
  23. package/dist/chunk-4CUGBNL2.cjs +1 -0
  24. package/dist/chunk-5GFXHUMP.js +1 -0
  25. package/dist/chunk-6NDMKJIE.js +9 -0
  26. package/dist/chunk-6NYA53QC.cjs +258 -0
  27. package/dist/chunk-7KJ3YVDQ.js +10 -0
  28. package/dist/{chunk-JOYPFQW2.js → chunk-AARNCPWR.js} +1 -2
  29. package/dist/{chunk-4QT5LPBA.cjs → chunk-B7TICMXD.cjs} +16 -17
  30. package/dist/{chunk-2QOEHCBX.js → chunk-BUEMG4NW.js} +1 -2
  31. package/dist/{chunk-CV5WFE7K.js → chunk-CLDB6TL7.js} +2 -3
  32. package/dist/{chunk-M2T6XKT5.js → chunk-CTYOM6BE.js} +1 -2
  33. package/dist/chunk-EH3NY2DQ.cjs +26 -0
  34. package/dist/{chunk-FGVGZLBL.js → chunk-FVUGBRDD.js} +1 -2
  35. package/dist/chunk-FXJAIFPR.js +59 -0
  36. package/dist/chunk-GICVJSFJ.cjs +9 -0
  37. package/dist/{chunk-Y6VCTLCJ.js → chunk-H5NTJZO4.js} +1 -2
  38. package/dist/chunk-HT2Z33YM.cjs +111 -0
  39. package/dist/chunk-JRRTZZ72.cjs +1 -0
  40. package/dist/{chunk-T2HQYRA7.cjs → chunk-NVAQQYBJ.cjs} +1 -2
  41. package/dist/chunk-P3AEZKQO.cjs +3 -0
  42. package/dist/{chunk-GWBTKVFD.cjs → chunk-P7ZF45KZ.cjs} +1 -2
  43. package/dist/{chunk-QEBO3EQP.cjs → chunk-PCJ5ACUV.cjs} +1 -2
  44. package/dist/{chunk-Q6HUGWO6.js → chunk-PJVI53AH.js} +1 -2
  45. package/dist/chunk-Q7YYC75E.js +258 -0
  46. package/dist/{chunk-7JSPKVOW.js → chunk-QVPR2W5S.js} +1 -2
  47. package/dist/{chunk-XZNOV52K.cjs → chunk-TAF6KYDM.cjs} +4 -5
  48. package/dist/chunk-USRMBYI6.js +3 -0
  49. package/dist/chunk-UTWPV2I4.js +26 -0
  50. package/dist/{chunk-DJAEBZ33.cjs → chunk-VTAS7VZ6.cjs} +1 -2
  51. package/dist/chunk-XQNCLN4T.cjs +3 -0
  52. package/dist/{chunk-S26DZVRQ.cjs → chunk-XS2AQFMF.cjs} +1 -2
  53. package/dist/chunk-Y6QBJGMO.cjs +59 -0
  54. package/dist/{chunk-WD2HTKRR.cjs → chunk-YS7FDEZ4.cjs} +1 -2
  55. package/dist/chunk-ZTVQA46Q.js +1 -0
  56. package/dist/{clipboard-beGtyabO.d.ts → clipboard-BE8E-szx.d.ts} +1 -1
  57. package/dist/{clipboard-CqE-UZ2d.d.cts → clipboard-DkfAv07F.d.cts} +1 -1
  58. package/dist/{colorResolver-B5YbO_a4.d.ts → colorResolver-CYttioMe.d.ts} +46 -3
  59. package/dist/{colorResolver-Cu46bSKr.d.cts → colorResolver-Dr8kQZAQ.d.cts} +46 -3
  60. package/dist/core-plugins-reexport.cjs +1 -2
  61. package/dist/core-plugins-reexport.d.cts +4 -4
  62. package/dist/core-plugins-reexport.d.ts +4 -4
  63. package/dist/core-plugins-reexport.js +1 -2
  64. package/dist/core-reexport.cjs +1 -2
  65. package/dist/core-reexport.d.cts +10 -10
  66. package/dist/core-reexport.d.ts +10 -10
  67. package/dist/core-reexport.js +1 -2
  68. package/dist/executor-JGWZ7S6Z.cjs +1 -0
  69. package/dist/executor-L2MVKMXO.js +1 -0
  70. package/dist/{fontLoader-CFKpg0Ri.d.ts → fontLoader-BsqQnB4v.d.ts} +1 -1
  71. package/dist/{fontLoader-HZYfILUm.d.cts → fontLoader-DECXIoMr.d.cts} +1 -1
  72. package/dist/headless-reexport.cjs +4 -5
  73. package/dist/headless-reexport.d.cts +7 -7
  74. package/dist/headless-reexport.d.ts +7 -7
  75. package/dist/headless-reexport.js +4 -5
  76. package/dist/index.cjs +6 -7
  77. package/dist/index.css +0 -1
  78. package/dist/index.d.cts +12 -12
  79. package/dist/index.d.ts +12 -12
  80. package/dist/index.js +6 -7
  81. package/dist/lib-GD2QD2JK.js +1 -0
  82. package/dist/lib-HOLGQI5K.cjs +1 -0
  83. package/dist/mcp-reexport.cjs +9 -10
  84. package/dist/mcp-reexport.d.cts +2 -2
  85. package/dist/mcp-reexport.d.ts +2 -2
  86. package/dist/mcp-reexport.js +4 -5
  87. package/dist/{processTemplate-G37IM66O.js → processTemplate-3HN7Q3KT.js} +1 -2
  88. package/dist/processTemplate-BXZKWRQD.cjs +1 -0
  89. package/dist/{react-BjOCdeTs.d.ts → react-C6bgHDFl.d.ts} +8 -6
  90. package/dist/{react-UzAn4o7l.d.cts → react-CAlVCYa4.d.cts} +8 -6
  91. package/dist/react.cjs +1 -2
  92. package/dist/react.css +0 -1
  93. package/dist/react.d.cts +5 -5
  94. package/dist/react.d.ts +5 -5
  95. package/dist/react.js +1 -2
  96. package/dist/{registry-DjacfR6Q.d.cts → registry-BU-FbHh-.d.cts} +1 -1
  97. package/dist/{registry-CV6nYWqP.d.ts → registry-gRbkCooh.d.ts} +1 -1
  98. package/dist/selectionRects-7QU337P5.cjs +1 -0
  99. package/dist/selectionRects-V5RC2BYX.js +1 -0
  100. package/dist/styles.css +1 -1
  101. package/dist/{types-DwZ3xysp.d.ts → types-7wjInVMW.d.ts} +1 -1
  102. package/dist/{types-Bnp8rvJn.d.cts → types-DEEpBL9H.d.cts} +1 -1
  103. package/dist/ui.cjs +1 -2
  104. package/dist/ui.d.cts +32 -85
  105. package/dist/ui.d.ts +32 -85
  106. package/dist/ui.js +1 -2
  107. package/dist/{variableDetector-CMhJtM96.d.cts → variableDetector-B4oQJa2e.d.cts} +33 -2
  108. package/dist/{variableDetector-BaDeXz7D.d.ts → variableDetector-BXJaTkiB.d.ts} +33 -2
  109. package/package.json +2 -1
  110. package/dist/FindReplaceDialog-AWQXKEUQ.js.map +0 -1
  111. package/dist/FindReplaceDialog-I4SZDSVP.cjs +0 -2
  112. package/dist/FindReplaceDialog-I4SZDSVP.cjs.map +0 -1
  113. package/dist/FootnotePropertiesDialog-73VT2ZVZ.cjs.map +0 -1
  114. package/dist/FootnotePropertiesDialog-ZM3EF3EF.js.map +0 -1
  115. package/dist/HyperlinkDialog-BA25XUT5.js.map +0 -1
  116. package/dist/HyperlinkDialog-V63LPOT2.cjs +0 -2
  117. package/dist/HyperlinkDialog-V63LPOT2.cjs.map +0 -1
  118. package/dist/ImagePositionDialog-AIAMKPFK.js.map +0 -1
  119. package/dist/ImagePositionDialog-KMK7ROV2.cjs.map +0 -1
  120. package/dist/ImagePropertiesDialog-ERFCUVCW.js.map +0 -1
  121. package/dist/ImagePropertiesDialog-USMMRK6X.cjs.map +0 -1
  122. package/dist/TablePropertiesDialog-72CIUAZT.cjs.map +0 -1
  123. package/dist/TablePropertiesDialog-EMUEVYB3.js.map +0 -1
  124. package/dist/chunk-2CHPKB5A.cjs +0 -112
  125. package/dist/chunk-2CHPKB5A.cjs.map +0 -1
  126. package/dist/chunk-2QOEHCBX.js.map +0 -1
  127. package/dist/chunk-4QT5LPBA.cjs.map +0 -1
  128. package/dist/chunk-5DYSI4O4.cjs +0 -60
  129. package/dist/chunk-5DYSI4O4.cjs.map +0 -1
  130. package/dist/chunk-5FJXHXFV.cjs +0 -2
  131. package/dist/chunk-5FJXHXFV.cjs.map +0 -1
  132. package/dist/chunk-6FEWNF6B.js +0 -4
  133. package/dist/chunk-6FEWNF6B.js.map +0 -1
  134. package/dist/chunk-6LF5HZCV.js +0 -10
  135. package/dist/chunk-6LF5HZCV.js.map +0 -1
  136. package/dist/chunk-7JSPKVOW.js.map +0 -1
  137. package/dist/chunk-C33XDRDJ.cjs +0 -28
  138. package/dist/chunk-C33XDRDJ.cjs.map +0 -1
  139. package/dist/chunk-CV5WFE7K.js.map +0 -1
  140. package/dist/chunk-CXJRNISO.js +0 -2
  141. package/dist/chunk-CXJRNISO.js.map +0 -1
  142. package/dist/chunk-DJAEBZ33.cjs.map +0 -1
  143. package/dist/chunk-DP6Q75ZD.js +0 -28
  144. package/dist/chunk-DP6Q75ZD.js.map +0 -1
  145. package/dist/chunk-FDANI5P4.cjs.map +0 -1
  146. package/dist/chunk-FGVGZLBL.js.map +0 -1
  147. package/dist/chunk-GJ4GKSDU.cjs +0 -2
  148. package/dist/chunk-GJ4GKSDU.cjs.map +0 -1
  149. package/dist/chunk-GWBTKVFD.cjs.map +0 -1
  150. package/dist/chunk-JOYPFQW2.js.map +0 -1
  151. package/dist/chunk-L54YNLSE.js +0 -2
  152. package/dist/chunk-L54YNLSE.js.map +0 -1
  153. package/dist/chunk-LPGMLJMO.js +0 -259
  154. package/dist/chunk-LPGMLJMO.js.map +0 -1
  155. package/dist/chunk-M2T6XKT5.js.map +0 -1
  156. package/dist/chunk-OHG7ROFC.js +0 -11
  157. package/dist/chunk-OHG7ROFC.js.map +0 -1
  158. package/dist/chunk-PANKMCFX.cjs +0 -4
  159. package/dist/chunk-PANKMCFX.cjs.map +0 -1
  160. package/dist/chunk-Q6HUGWO6.js.map +0 -1
  161. package/dist/chunk-QDV75OJ4.js +0 -112
  162. package/dist/chunk-QDV75OJ4.js.map +0 -1
  163. package/dist/chunk-QEBO3EQP.cjs.map +0 -1
  164. package/dist/chunk-QVIZ775M.cjs +0 -259
  165. package/dist/chunk-QVIZ775M.cjs.map +0 -1
  166. package/dist/chunk-RMUMR42R.cjs +0 -10
  167. package/dist/chunk-RMUMR42R.cjs.map +0 -1
  168. package/dist/chunk-S26DZVRQ.cjs.map +0 -1
  169. package/dist/chunk-T2HQYRA7.cjs.map +0 -1
  170. package/dist/chunk-ULXNEG66.js +0 -60
  171. package/dist/chunk-ULXNEG66.js.map +0 -1
  172. package/dist/chunk-WD2HTKRR.cjs.map +0 -1
  173. package/dist/chunk-XZNOV52K.cjs.map +0 -1
  174. package/dist/chunk-Y6VCTLCJ.js.map +0 -1
  175. package/dist/core-plugins-reexport.cjs.map +0 -1
  176. package/dist/core-plugins-reexport.js.map +0 -1
  177. package/dist/core-reexport.cjs.map +0 -1
  178. package/dist/core-reexport.js.map +0 -1
  179. package/dist/executor-K5RXUTTR.js +0 -2
  180. package/dist/executor-K5RXUTTR.js.map +0 -1
  181. package/dist/executor-XIPIU3H4.cjs +0 -2
  182. package/dist/executor-XIPIU3H4.cjs.map +0 -1
  183. package/dist/headless-reexport.cjs.map +0 -1
  184. package/dist/headless-reexport.js.map +0 -1
  185. package/dist/index.cjs.map +0 -1
  186. package/dist/index.css.map +0 -1
  187. package/dist/index.js.map +0 -1
  188. package/dist/mcp-reexport.cjs.map +0 -1
  189. package/dist/mcp-reexport.js.map +0 -1
  190. package/dist/processTemplate-G37IM66O.js.map +0 -1
  191. package/dist/processTemplate-RFBGVH7T.cjs +0 -2
  192. package/dist/processTemplate-RFBGVH7T.cjs.map +0 -1
  193. package/dist/react.cjs.map +0 -1
  194. package/dist/react.css.map +0 -1
  195. package/dist/react.js.map +0 -1
  196. package/dist/selectionRects-6DU7HN7E.js +0 -2
  197. package/dist/selectionRects-6DU7HN7E.js.map +0 -1
  198. package/dist/selectionRects-YZSC24ZP.cjs +0 -2
  199. package/dist/selectionRects-YZSC24ZP.cjs.map +0 -1
  200. package/dist/ui.cjs.map +0 -1
  201. package/dist/ui.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { D as Document, d as DocumentBody, a as Paragraph } from './agentApi-BFVyKagE.cjs';
1
+ import { D as Document, d as DocumentBody, a as Paragraph } from './agentApi-DfsWRyrP.cjs';
2
2
 
3
3
  /**
4
4
  * DOCX Repacker - Repack modified document into valid DOCX
@@ -51,6 +51,15 @@ interface RepackOptions {
51
51
  * @throws Error if document has no original buffer for round-trip
52
52
  */
53
53
  declare function repackDocx(doc: Document, options?: RepackOptions): Promise<ArrayBuffer>;
54
+ /**
55
+ * Update multiple files in a DOCX buffer
56
+ *
57
+ * @param originalBuffer - Original DOCX as ArrayBuffer
58
+ * @param updates - Map of path -> content for files to update
59
+ * @param options - Optional repack options
60
+ * @returns Promise resolving to DOCX as ArrayBuffer
61
+ */
62
+ declare function updateMultipleFiles(originalBuffer: ArrayBuffer, updates: Map<string, string | ArrayBuffer>, options?: RepackOptions): Promise<ArrayBuffer>;
54
63
  /**
55
64
  * Create a new DOCX from a Document (without requiring original buffer)
56
65
  *
@@ -59,6 +68,28 @@ declare function repackDocx(doc: Document, options?: RepackOptions): Promise<Arr
59
68
  */
60
69
  declare function createDocx(doc: Document): Promise<ArrayBuffer>;
61
70
 
71
+ interface PatchValidationResult {
72
+ safe: boolean;
73
+ reason?: string;
74
+ }
75
+ /**
76
+ * Validate that a selective patch can be safely applied.
77
+ *
78
+ * Checks:
79
+ * - All changed paraIds exist in original XML (exactly once)
80
+ * - All changed paraIds exist in serialized XML (exactly once)
81
+ * - Paragraph count matches between original and serialized
82
+ */
83
+ declare function validatePatchSafety(originalXml: string, serializedXml: string, changedIds: Set<string>): PatchValidationResult;
84
+ /**
85
+ * Build a patched document.xml by splicing new paragraph XML into
86
+ * the original at the correct offsets. Only changed paragraphs
87
+ * are replaced; everything else is preserved byte-for-byte.
88
+ *
89
+ * Returns null if any step fails.
90
+ */
91
+ declare function buildPatchedDocumentXml(originalXml: string, serializedXml: string, changedIds: Set<string>): string | null;
92
+
62
93
  /**
63
94
  * Variable Detector Utility
64
95
  *
@@ -170,4 +201,4 @@ declare function removeVariables(text: string, placeholder?: string): string;
170
201
  */
171
202
  declare function documentHasVariables(doc: Document): boolean;
172
203
 
173
- export { type VariableDetectionResult as V, type VariableOccurrence as a, detectVariablesDetailed as b, createDocx as c, detectVariables as d, detectVariablesInBody as e, detectVariablesInParagraph as f, documentHasVariables as g, extractVariablesFromText as h, formatVariable as i, hasTemplateVariables as j, isValidVariableName as k, repackDocx as l, replaceVariables as m, parseVariable as p, removeVariables as r, sanitizeVariableName as s };
204
+ export { type VariableDetectionResult as V, type VariableOccurrence as a, buildPatchedDocumentXml as b, createDocx as c, detectVariables as d, detectVariablesDetailed as e, detectVariablesInBody as f, detectVariablesInParagraph as g, documentHasVariables as h, extractVariablesFromText as i, formatVariable as j, hasTemplateVariables as k, isValidVariableName as l, repackDocx as m, replaceVariables as n, parseVariable as p, removeVariables as r, sanitizeVariableName as s, updateMultipleFiles as u, validatePatchSafety as v };
@@ -1,4 +1,4 @@
1
- import { D as Document, d as DocumentBody, a as Paragraph } from './agentApi-BFVyKagE.js';
1
+ import { D as Document, d as DocumentBody, a as Paragraph } from './agentApi-DfsWRyrP.js';
2
2
 
3
3
  /**
4
4
  * DOCX Repacker - Repack modified document into valid DOCX
@@ -51,6 +51,15 @@ interface RepackOptions {
51
51
  * @throws Error if document has no original buffer for round-trip
52
52
  */
53
53
  declare function repackDocx(doc: Document, options?: RepackOptions): Promise<ArrayBuffer>;
54
+ /**
55
+ * Update multiple files in a DOCX buffer
56
+ *
57
+ * @param originalBuffer - Original DOCX as ArrayBuffer
58
+ * @param updates - Map of path -> content for files to update
59
+ * @param options - Optional repack options
60
+ * @returns Promise resolving to DOCX as ArrayBuffer
61
+ */
62
+ declare function updateMultipleFiles(originalBuffer: ArrayBuffer, updates: Map<string, string | ArrayBuffer>, options?: RepackOptions): Promise<ArrayBuffer>;
54
63
  /**
55
64
  * Create a new DOCX from a Document (without requiring original buffer)
56
65
  *
@@ -59,6 +68,28 @@ declare function repackDocx(doc: Document, options?: RepackOptions): Promise<Arr
59
68
  */
60
69
  declare function createDocx(doc: Document): Promise<ArrayBuffer>;
61
70
 
71
+ interface PatchValidationResult {
72
+ safe: boolean;
73
+ reason?: string;
74
+ }
75
+ /**
76
+ * Validate that a selective patch can be safely applied.
77
+ *
78
+ * Checks:
79
+ * - All changed paraIds exist in original XML (exactly once)
80
+ * - All changed paraIds exist in serialized XML (exactly once)
81
+ * - Paragraph count matches between original and serialized
82
+ */
83
+ declare function validatePatchSafety(originalXml: string, serializedXml: string, changedIds: Set<string>): PatchValidationResult;
84
+ /**
85
+ * Build a patched document.xml by splicing new paragraph XML into
86
+ * the original at the correct offsets. Only changed paragraphs
87
+ * are replaced; everything else is preserved byte-for-byte.
88
+ *
89
+ * Returns null if any step fails.
90
+ */
91
+ declare function buildPatchedDocumentXml(originalXml: string, serializedXml: string, changedIds: Set<string>): string | null;
92
+
62
93
  /**
63
94
  * Variable Detector Utility
64
95
  *
@@ -170,4 +201,4 @@ declare function removeVariables(text: string, placeholder?: string): string;
170
201
  */
171
202
  declare function documentHasVariables(doc: Document): boolean;
172
203
 
173
- export { type VariableDetectionResult as V, type VariableOccurrence as a, detectVariablesDetailed as b, createDocx as c, detectVariables as d, detectVariablesInBody as e, detectVariablesInParagraph as f, documentHasVariables as g, extractVariablesFromText as h, formatVariable as i, hasTemplateVariables as j, isValidVariableName as k, repackDocx as l, replaceVariables as m, parseVariable as p, removeVariables as r, sanitizeVariableName as s };
204
+ export { type VariableDetectionResult as V, type VariableOccurrence as a, buildPatchedDocumentXml as b, createDocx as c, detectVariables as d, detectVariablesDetailed as e, detectVariablesInBody as f, detectVariablesInParagraph as g, documentHasVariables as h, extractVariablesFromText as i, formatVariable as j, hasTemplateVariables as k, isValidVariableName as l, repackDocx as m, replaceVariables as n, parseVariable as p, removeVariables as r, sanitizeVariableName as s, updateMultipleFiles as u, validatePatchSafety as v };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eigenpal/docx-js-editor",
3
- "version": "0.0.19",
3
+ "version": "0.0.21",
4
4
  "description": "A browser-based DOCX template editor with variable insertion support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",
@@ -75,6 +75,7 @@
75
75
  "scripts": {
76
76
  "build": "tsup && bun run build:css",
77
77
  "build:css": "tailwindcss -c ../../tailwind.config.lib.js -i ./src/styles/editor.css -o ./dist/styles.css --minify",
78
+ "prepublishOnly": "sed -e 's|\\./assets/|https://raw.githubusercontent.com/eigenpal/docx-js-editor/main/assets/|g' -e 's|(packages/|(https://github.com/eigenpal/docx-js-editor/tree/main/packages/|g' -e 's|(docs/|(https://github.com/eigenpal/docx-js-editor/blob/main/docs/|g' -e 's|(examples/|(https://github.com/eigenpal/docx-js-editor/tree/main/examples/|g' ../../README.md > README.md",
78
79
  "typecheck": "tsc --noEmit"
79
80
  },
80
81
  "peerDependencies": {
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"FindReplaceDialog-AWQXKEUQ.js"}
@@ -1,2 +0,0 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunkDJAEBZ33_cjs=require('./chunk-DJAEBZ33.cjs');require('./chunk-QEBO3EQP.cjs');Object.defineProperty(exports,"FindReplaceDialog",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.n}});Object.defineProperty(exports,"createDefaultFindOptions",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.a}});Object.defineProperty(exports,"createSearchPattern",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.c}});Object.defineProperty(exports,"default",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.o}});Object.defineProperty(exports,"escapeRegexString",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.b}});Object.defineProperty(exports,"findAllMatches",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.d}});Object.defineProperty(exports,"findInDocument",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.j}});Object.defineProperty(exports,"findInParagraph",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.k}});Object.defineProperty(exports,"getDefaultHighlightOptions",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.i}});Object.defineProperty(exports,"getMatchCountText",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.g}});Object.defineProperty(exports,"isEmptySearch",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.h}});Object.defineProperty(exports,"replaceAllInContent",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.e}});Object.defineProperty(exports,"replaceFirstInContent",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.f}});Object.defineProperty(exports,"scrollToMatch",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.l}});Object.defineProperty(exports,"useFindReplace",{enumerable:true,get:function(){return chunkDJAEBZ33_cjs.m}});//# sourceMappingURL=FindReplaceDialog-I4SZDSVP.cjs.map
2
- //# sourceMappingURL=FindReplaceDialog-I4SZDSVP.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"FindReplaceDialog-I4SZDSVP.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dialogs/FootnotePropertiesDialog.tsx"],"names":["overlayStyle","dialogStyle","sectionStyle","labelStyle","selectStyle","inputStyle","buttonRowStyle","buttonStyle","primaryButtonStyle","numberFormatOptions","FootnotePropertiesDialog","isOpen","onClose","onApply","footnotePr","endnotePr","fnPosition","setFnPosition","useState","fnNumFmt","setFnNumFmt","fnNumStart","setFnNumStart","fnRestart","setFnRestart","enPosition","setEnPosition","enNumFmt","setEnNumFmt","enNumStart","setEnNumStart","enRestart","setEnRestart","handleApply","useCallback","jsx","jsxs","o"],"mappings":"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","file":"FootnotePropertiesDialog-73VT2ZVZ.cjs","sourcesContent":["/**\n * Footnote & Endnote Properties Dialog\n *\n * Edits position, numbering format, start number, and restart rules.\n */\n\nimport React, { useState, useCallback } from 'react';\nimport type { CSSProperties } from 'react';\nimport type {\n FootnoteProperties,\n EndnoteProperties,\n FootnotePosition,\n EndnotePosition,\n NoteNumberRestart,\n NumberFormat,\n} from '@eigenpal/docx-core/types/document';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface FootnotePropertiesDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onApply: (footnoteProps: FootnoteProperties, endnoteProps: EndnoteProperties) => void;\n footnotePr?: FootnoteProperties;\n endnotePr?: EndnoteProperties;\n}\n\n// ============================================================================\n// STYLES\n// ============================================================================\n\nconst overlayStyle: CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n};\n\nconst dialogStyle: CSSProperties = {\n backgroundColor: 'white',\n borderRadius: 8,\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.15)',\n padding: 24,\n minWidth: 400,\n maxWidth: 500,\n};\n\nconst sectionStyle: CSSProperties = {\n marginBottom: 16,\n padding: 12,\n border: '1px solid #e0e0e0',\n borderRadius: 4,\n};\n\nconst labelStyle: CSSProperties = {\n display: 'block',\n fontSize: 12,\n color: '#666',\n marginBottom: 4,\n};\n\nconst selectStyle: CSSProperties = {\n width: '100%',\n padding: '4px 8px',\n border: '1px solid #ccc',\n borderRadius: 4,\n fontSize: 13,\n marginBottom: 8,\n};\n\nconst inputStyle: CSSProperties = {\n width: 60,\n padding: '4px 8px',\n border: '1px solid #ccc',\n borderRadius: 4,\n fontSize: 13,\n marginBottom: 8,\n};\n\nconst buttonRowStyle: CSSProperties = {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 8,\n marginTop: 16,\n};\n\nconst buttonStyle: CSSProperties = {\n padding: '6px 16px',\n border: '1px solid #ccc',\n borderRadius: 4,\n cursor: 'pointer',\n fontSize: 13,\n backgroundColor: 'white',\n};\n\nconst primaryButtonStyle: CSSProperties = {\n ...buttonStyle,\n backgroundColor: '#2563eb',\n color: 'white',\n border: '1px solid #2563eb',\n};\n\n// ============================================================================\n// NUMBER FORMAT OPTIONS\n// ============================================================================\n\nconst numberFormatOptions: { value: NumberFormat; label: string }[] = [\n { value: 'decimal', label: '1, 2, 3, ...' },\n { value: 'lowerRoman', label: 'i, ii, iii, ...' },\n { value: 'upperRoman', label: 'I, II, III, ...' },\n { value: 'lowerLetter', label: 'a, b, c, ...' },\n { value: 'upperLetter', label: 'A, B, C, ...' },\n { value: 'chicago', label: '*, \\u2020, \\u2021, ...' },\n];\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function FootnotePropertiesDialog({\n isOpen,\n onClose,\n onApply,\n footnotePr,\n endnotePr,\n}: FootnotePropertiesDialogProps): React.ReactElement | null {\n const [fnPosition, setFnPosition] = useState<FootnotePosition>(\n footnotePr?.position ?? 'pageBottom'\n );\n const [fnNumFmt, setFnNumFmt] = useState<NumberFormat>(footnotePr?.numFmt ?? 'decimal');\n const [fnNumStart, setFnNumStart] = useState<number>(footnotePr?.numStart ?? 1);\n const [fnRestart, setFnRestart] = useState<NoteNumberRestart>(\n footnotePr?.numRestart ?? 'continuous'\n );\n\n const [enPosition, setEnPosition] = useState<EndnotePosition>(endnotePr?.position ?? 'docEnd');\n const [enNumFmt, setEnNumFmt] = useState<NumberFormat>(endnotePr?.numFmt ?? 'lowerRoman');\n const [enNumStart, setEnNumStart] = useState<number>(endnotePr?.numStart ?? 1);\n const [enRestart, setEnRestart] = useState<NoteNumberRestart>(\n endnotePr?.numRestart ?? 'continuous'\n );\n\n const handleApply = useCallback(() => {\n onApply(\n { position: fnPosition, numFmt: fnNumFmt, numStart: fnNumStart, numRestart: fnRestart },\n { position: enPosition, numFmt: enNumFmt, numStart: enNumStart, numRestart: enRestart }\n );\n onClose();\n }, [\n fnPosition,\n fnNumFmt,\n fnNumStart,\n fnRestart,\n enPosition,\n enNumFmt,\n enNumStart,\n enRestart,\n onApply,\n onClose,\n ]);\n\n if (!isOpen) return null;\n\n return (\n <div style={overlayStyle} onClick={onClose}>\n <div style={dialogStyle} onClick={(e) => e.stopPropagation()}>\n <h3 style={{ margin: '0 0 16px', fontSize: 16 }}>Footnote & Endnote Properties</h3>\n\n {/* Footnote section */}\n <div style={sectionStyle}>\n <h4 style={{ margin: '0 0 8px', fontSize: 14 }}>Footnotes</h4>\n\n <label style={labelStyle}>Position</label>\n <select\n style={selectStyle}\n value={fnPosition}\n onChange={(e) => setFnPosition(e.target.value as FootnotePosition)}\n >\n <option value=\"pageBottom\">Bottom of page</option>\n <option value=\"beneathText\">Below text</option>\n </select>\n\n <label style={labelStyle}>Number format</label>\n <select\n style={selectStyle}\n value={fnNumFmt}\n onChange={(e) => setFnNumFmt(e.target.value as NumberFormat)}\n >\n {numberFormatOptions.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n\n <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>\n <div>\n <label style={labelStyle}>Start at</label>\n <input\n type=\"number\"\n min={1}\n style={inputStyle}\n value={fnNumStart}\n onChange={(e) => setFnNumStart(parseInt(e.target.value, 10) || 1)}\n />\n </div>\n <div style={{ flex: 1 }}>\n <label style={labelStyle}>Numbering</label>\n <select\n style={selectStyle}\n value={fnRestart}\n onChange={(e) => setFnRestart(e.target.value as NoteNumberRestart)}\n >\n <option value=\"continuous\">Continuous</option>\n <option value=\"eachSect\">Restart each section</option>\n <option value=\"eachPage\">Restart each page</option>\n </select>\n </div>\n </div>\n </div>\n\n {/* Endnote section */}\n <div style={sectionStyle}>\n <h4 style={{ margin: '0 0 8px', fontSize: 14 }}>Endnotes</h4>\n\n <label style={labelStyle}>Position</label>\n <select\n style={selectStyle}\n value={enPosition}\n onChange={(e) => setEnPosition(e.target.value as EndnotePosition)}\n >\n <option value=\"docEnd\">End of document</option>\n <option value=\"sectEnd\">End of section</option>\n </select>\n\n <label style={labelStyle}>Number format</label>\n <select\n style={selectStyle}\n value={enNumFmt}\n onChange={(e) => setEnNumFmt(e.target.value as NumberFormat)}\n >\n {numberFormatOptions.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n\n <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>\n <div>\n <label style={labelStyle}>Start at</label>\n <input\n type=\"number\"\n min={1}\n style={inputStyle}\n value={enNumStart}\n onChange={(e) => setEnNumStart(parseInt(e.target.value, 10) || 1)}\n />\n </div>\n <div style={{ flex: 1 }}>\n <label style={labelStyle}>Numbering</label>\n <select\n style={selectStyle}\n value={enRestart}\n onChange={(e) => setEnRestart(e.target.value as NoteNumberRestart)}\n >\n <option value=\"continuous\">Continuous</option>\n <option value=\"eachSect\">Restart each section</option>\n </select>\n </div>\n </div>\n </div>\n\n <div style={buttonRowStyle}>\n <button style={buttonStyle} onClick={onClose}>\n Cancel\n </button>\n <button style={primaryButtonStyle} onClick={handleApply}>\n Apply\n </button>\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dialogs/FootnotePropertiesDialog.tsx"],"names":["overlayStyle","dialogStyle","sectionStyle","labelStyle","selectStyle","inputStyle","buttonRowStyle","buttonStyle","primaryButtonStyle","numberFormatOptions","FootnotePropertiesDialog","isOpen","onClose","onApply","footnotePr","endnotePr","fnPosition","setFnPosition","useState","fnNumFmt","setFnNumFmt","fnNumStart","setFnNumStart","fnRestart","setFnRestart","enPosition","setEnPosition","enNumFmt","setEnNumFmt","enNumStart","setEnNumStart","enRestart","setEnRestart","handleApply","useCallback","jsx","jsxs","o"],"mappings":"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","file":"FootnotePropertiesDialog-ZM3EF3EF.js","sourcesContent":["/**\n * Footnote & Endnote Properties Dialog\n *\n * Edits position, numbering format, start number, and restart rules.\n */\n\nimport React, { useState, useCallback } from 'react';\nimport type { CSSProperties } from 'react';\nimport type {\n FootnoteProperties,\n EndnoteProperties,\n FootnotePosition,\n EndnotePosition,\n NoteNumberRestart,\n NumberFormat,\n} from '@eigenpal/docx-core/types/document';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface FootnotePropertiesDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onApply: (footnoteProps: FootnoteProperties, endnoteProps: EndnoteProperties) => void;\n footnotePr?: FootnoteProperties;\n endnotePr?: EndnoteProperties;\n}\n\n// ============================================================================\n// STYLES\n// ============================================================================\n\nconst overlayStyle: CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n};\n\nconst dialogStyle: CSSProperties = {\n backgroundColor: 'white',\n borderRadius: 8,\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.15)',\n padding: 24,\n minWidth: 400,\n maxWidth: 500,\n};\n\nconst sectionStyle: CSSProperties = {\n marginBottom: 16,\n padding: 12,\n border: '1px solid #e0e0e0',\n borderRadius: 4,\n};\n\nconst labelStyle: CSSProperties = {\n display: 'block',\n fontSize: 12,\n color: '#666',\n marginBottom: 4,\n};\n\nconst selectStyle: CSSProperties = {\n width: '100%',\n padding: '4px 8px',\n border: '1px solid #ccc',\n borderRadius: 4,\n fontSize: 13,\n marginBottom: 8,\n};\n\nconst inputStyle: CSSProperties = {\n width: 60,\n padding: '4px 8px',\n border: '1px solid #ccc',\n borderRadius: 4,\n fontSize: 13,\n marginBottom: 8,\n};\n\nconst buttonRowStyle: CSSProperties = {\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 8,\n marginTop: 16,\n};\n\nconst buttonStyle: CSSProperties = {\n padding: '6px 16px',\n border: '1px solid #ccc',\n borderRadius: 4,\n cursor: 'pointer',\n fontSize: 13,\n backgroundColor: 'white',\n};\n\nconst primaryButtonStyle: CSSProperties = {\n ...buttonStyle,\n backgroundColor: '#2563eb',\n color: 'white',\n border: '1px solid #2563eb',\n};\n\n// ============================================================================\n// NUMBER FORMAT OPTIONS\n// ============================================================================\n\nconst numberFormatOptions: { value: NumberFormat; label: string }[] = [\n { value: 'decimal', label: '1, 2, 3, ...' },\n { value: 'lowerRoman', label: 'i, ii, iii, ...' },\n { value: 'upperRoman', label: 'I, II, III, ...' },\n { value: 'lowerLetter', label: 'a, b, c, ...' },\n { value: 'upperLetter', label: 'A, B, C, ...' },\n { value: 'chicago', label: '*, \\u2020, \\u2021, ...' },\n];\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function FootnotePropertiesDialog({\n isOpen,\n onClose,\n onApply,\n footnotePr,\n endnotePr,\n}: FootnotePropertiesDialogProps): React.ReactElement | null {\n const [fnPosition, setFnPosition] = useState<FootnotePosition>(\n footnotePr?.position ?? 'pageBottom'\n );\n const [fnNumFmt, setFnNumFmt] = useState<NumberFormat>(footnotePr?.numFmt ?? 'decimal');\n const [fnNumStart, setFnNumStart] = useState<number>(footnotePr?.numStart ?? 1);\n const [fnRestart, setFnRestart] = useState<NoteNumberRestart>(\n footnotePr?.numRestart ?? 'continuous'\n );\n\n const [enPosition, setEnPosition] = useState<EndnotePosition>(endnotePr?.position ?? 'docEnd');\n const [enNumFmt, setEnNumFmt] = useState<NumberFormat>(endnotePr?.numFmt ?? 'lowerRoman');\n const [enNumStart, setEnNumStart] = useState<number>(endnotePr?.numStart ?? 1);\n const [enRestart, setEnRestart] = useState<NoteNumberRestart>(\n endnotePr?.numRestart ?? 'continuous'\n );\n\n const handleApply = useCallback(() => {\n onApply(\n { position: fnPosition, numFmt: fnNumFmt, numStart: fnNumStart, numRestart: fnRestart },\n { position: enPosition, numFmt: enNumFmt, numStart: enNumStart, numRestart: enRestart }\n );\n onClose();\n }, [\n fnPosition,\n fnNumFmt,\n fnNumStart,\n fnRestart,\n enPosition,\n enNumFmt,\n enNumStart,\n enRestart,\n onApply,\n onClose,\n ]);\n\n if (!isOpen) return null;\n\n return (\n <div style={overlayStyle} onClick={onClose}>\n <div style={dialogStyle} onClick={(e) => e.stopPropagation()}>\n <h3 style={{ margin: '0 0 16px', fontSize: 16 }}>Footnote & Endnote Properties</h3>\n\n {/* Footnote section */}\n <div style={sectionStyle}>\n <h4 style={{ margin: '0 0 8px', fontSize: 14 }}>Footnotes</h4>\n\n <label style={labelStyle}>Position</label>\n <select\n style={selectStyle}\n value={fnPosition}\n onChange={(e) => setFnPosition(e.target.value as FootnotePosition)}\n >\n <option value=\"pageBottom\">Bottom of page</option>\n <option value=\"beneathText\">Below text</option>\n </select>\n\n <label style={labelStyle}>Number format</label>\n <select\n style={selectStyle}\n value={fnNumFmt}\n onChange={(e) => setFnNumFmt(e.target.value as NumberFormat)}\n >\n {numberFormatOptions.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n\n <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>\n <div>\n <label style={labelStyle}>Start at</label>\n <input\n type=\"number\"\n min={1}\n style={inputStyle}\n value={fnNumStart}\n onChange={(e) => setFnNumStart(parseInt(e.target.value, 10) || 1)}\n />\n </div>\n <div style={{ flex: 1 }}>\n <label style={labelStyle}>Numbering</label>\n <select\n style={selectStyle}\n value={fnRestart}\n onChange={(e) => setFnRestart(e.target.value as NoteNumberRestart)}\n >\n <option value=\"continuous\">Continuous</option>\n <option value=\"eachSect\">Restart each section</option>\n <option value=\"eachPage\">Restart each page</option>\n </select>\n </div>\n </div>\n </div>\n\n {/* Endnote section */}\n <div style={sectionStyle}>\n <h4 style={{ margin: '0 0 8px', fontSize: 14 }}>Endnotes</h4>\n\n <label style={labelStyle}>Position</label>\n <select\n style={selectStyle}\n value={enPosition}\n onChange={(e) => setEnPosition(e.target.value as EndnotePosition)}\n >\n <option value=\"docEnd\">End of document</option>\n <option value=\"sectEnd\">End of section</option>\n </select>\n\n <label style={labelStyle}>Number format</label>\n <select\n style={selectStyle}\n value={enNumFmt}\n onChange={(e) => setEnNumFmt(e.target.value as NumberFormat)}\n >\n {numberFormatOptions.map((o) => (\n <option key={o.value} value={o.value}>\n {o.label}\n </option>\n ))}\n </select>\n\n <div style={{ display: 'flex', gap: 12, alignItems: 'center' }}>\n <div>\n <label style={labelStyle}>Start at</label>\n <input\n type=\"number\"\n min={1}\n style={inputStyle}\n value={enNumStart}\n onChange={(e) => setEnNumStart(parseInt(e.target.value, 10) || 1)}\n />\n </div>\n <div style={{ flex: 1 }}>\n <label style={labelStyle}>Numbering</label>\n <select\n style={selectStyle}\n value={enRestart}\n onChange={(e) => setEnRestart(e.target.value as NoteNumberRestart)}\n >\n <option value=\"continuous\">Continuous</option>\n <option value=\"eachSect\">Restart each section</option>\n </select>\n </div>\n </div>\n </div>\n\n <div style={buttonRowStyle}>\n <button style={buttonStyle} onClick={onClose}>\n Cancel\n </button>\n <button style={primaryButtonStyle} onClick={handleApply}>\n Apply\n </button>\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"HyperlinkDialog-BA25XUT5.js"}
@@ -1,2 +0,0 @@
1
- 'use strict';Object.defineProperty(exports,'__esModule',{value:true});var chunkS26DZVRQ_cjs=require('./chunk-S26DZVRQ.cjs');require('./chunk-QEBO3EQP.cjs');Object.defineProperty(exports,"HyperlinkDialog",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.d}});Object.defineProperty(exports,"createBookmarkLinkData",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.f}});Object.defineProperty(exports,"createHyperlinkData",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.e}});Object.defineProperty(exports,"default",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.n}});Object.defineProperty(exports,"emailToMailto",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.j}});Object.defineProperty(exports,"extractBookmarksForDialog",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.l}});Object.defineProperty(exports,"getDisplayText",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.i}});Object.defineProperty(exports,"getUrlType",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.c}});Object.defineProperty(exports,"isBookmarkHyperlinkData",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.h}});Object.defineProperty(exports,"isExternalHyperlinkData",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.g}});Object.defineProperty(exports,"isValidUrl",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.a}});Object.defineProperty(exports,"normalizeUrl",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.b}});Object.defineProperty(exports,"phoneToTel",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.k}});Object.defineProperty(exports,"useHyperlinkDialog",{enumerable:true,get:function(){return chunkS26DZVRQ_cjs.m}});//# sourceMappingURL=HyperlinkDialog-V63LPOT2.cjs.map
2
- //# sourceMappingURL=HyperlinkDialog-V63LPOT2.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":[],"names":[],"mappings":"","file":"HyperlinkDialog-V63LPOT2.cjs"}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dialogs/ImagePositionDialog.tsx"],"names":["overlayStyle","dialogStyle","headerStyle","bodyStyle","sectionStyle","sectionLabelStyle","rowStyle","labelStyle","inputStyle","selectStyle","footerStyle","btnStyle","ImagePositionDialog","isOpen","onClose","onApply","currentData","hMode","setHMode","useState","hAlign","setHAlign","hRelativeTo","setHRelativeTo","hOffset","setHOffset","vMode","setVMode","vAlign","setVAlign","vRelativeTo","setVRelativeTo","vOffset","setVOffset","distTop","setDistTop","distBottom","setDistBottom","distLeft","setDistLeft","distRight","setDistRight","useEffect","h","v","handleApply","useCallback","data","handleKeyDown","jsx","jsxs"],"mappings":"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","file":"ImagePositionDialog-AIAMKPFK.js","sourcesContent":["/**\n * Image Position Dialog\n *\n * Modal for editing image positioning settings:\n * - Horizontal: alignment or offset, relative to page/column/margin/paragraph\n * - Vertical: alignment or offset, relative to page/margin/paragraph/line\n * - Distance from text (top/bottom/left/right)\n */\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ImagePositionData {\n horizontal?: {\n relativeTo?: string;\n posOffset?: number;\n align?: string;\n };\n vertical?: {\n relativeTo?: string;\n posOffset?: number;\n align?: string;\n };\n distTop?: number;\n distBottom?: number;\n distLeft?: number;\n distRight?: number;\n}\n\nexport interface ImagePositionDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onApply: (data: ImagePositionData) => void;\n currentData?: ImagePositionData;\n}\n\n// ============================================================================\n// STYLES\n// ============================================================================\n\nconst overlayStyle: CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n};\n\nconst dialogStyle: CSSProperties = {\n backgroundColor: 'white',\n borderRadius: 8,\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.15)',\n minWidth: 400,\n maxWidth: 480,\n width: '100%',\n margin: 20,\n};\n\nconst headerStyle: CSSProperties = {\n padding: '16px 20px 12px',\n borderBottom: '1px solid var(--doc-border)',\n fontSize: 16,\n fontWeight: 600,\n};\n\nconst bodyStyle: CSSProperties = {\n padding: '16px 20px',\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n};\n\nconst sectionStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n};\n\nconst sectionLabelStyle: CSSProperties = {\n fontSize: 13,\n fontWeight: 600,\n color: 'var(--doc-text)',\n};\n\nconst rowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n};\n\nconst labelStyle: CSSProperties = {\n width: 75,\n fontSize: 12,\n color: 'var(--doc-text-muted)',\n};\n\nconst inputStyle: CSSProperties = {\n flex: 1,\n padding: '4px 6px',\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n fontSize: 12,\n};\n\nconst selectStyle: CSSProperties = {\n ...inputStyle,\n};\n\nconst footerStyle: CSSProperties = {\n padding: '12px 20px 16px',\n borderTop: '1px solid var(--doc-border)',\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 8,\n};\n\nconst btnStyle: CSSProperties = {\n padding: '6px 16px',\n fontSize: 13,\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n cursor: 'pointer',\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function ImagePositionDialog({\n isOpen,\n onClose,\n onApply,\n currentData,\n}: ImagePositionDialogProps): React.ReactElement | null {\n const [hMode, setHMode] = useState<'align' | 'offset'>('align');\n const [hAlign, setHAlign] = useState('center');\n const [hRelativeTo, setHRelativeTo] = useState('column');\n const [hOffset, setHOffset] = useState(0);\n\n const [vMode, setVMode] = useState<'align' | 'offset'>('align');\n const [vAlign, setVAlign] = useState('top');\n const [vRelativeTo, setVRelativeTo] = useState('paragraph');\n const [vOffset, setVOffset] = useState(0);\n\n const [distTop, setDistTop] = useState(0);\n const [distBottom, setDistBottom] = useState(0);\n const [distLeft, setDistLeft] = useState(0);\n const [distRight, setDistRight] = useState(0);\n\n useEffect(() => {\n if (!isOpen) return;\n const h = currentData?.horizontal;\n const v = currentData?.vertical;\n if (h?.align) {\n setHMode('align');\n setHAlign(h.align);\n } else if (h?.posOffset != null) {\n setHMode('offset');\n setHOffset(h.posOffset);\n }\n if (h?.relativeTo) setHRelativeTo(h.relativeTo);\n\n if (v?.align) {\n setVMode('align');\n setVAlign(v.align);\n } else if (v?.posOffset != null) {\n setVMode('offset');\n setVOffset(v.posOffset);\n }\n if (v?.relativeTo) setVRelativeTo(v.relativeTo);\n\n setDistTop(currentData?.distTop ?? 0);\n setDistBottom(currentData?.distBottom ?? 0);\n setDistLeft(currentData?.distLeft ?? 0);\n setDistRight(currentData?.distRight ?? 0);\n }, [isOpen, currentData]);\n\n const handleApply = useCallback(() => {\n const data: ImagePositionData = {};\n data.horizontal = {\n relativeTo: hRelativeTo,\n ...(hMode === 'align' ? { align: hAlign } : { posOffset: hOffset }),\n };\n data.vertical = {\n relativeTo: vRelativeTo,\n ...(vMode === 'align' ? { align: vAlign } : { posOffset: vOffset }),\n };\n data.distTop = distTop;\n data.distBottom = distBottom;\n data.distLeft = distLeft;\n data.distRight = distRight;\n onApply(data);\n onClose();\n }, [\n hMode,\n hAlign,\n hRelativeTo,\n hOffset,\n vMode,\n vAlign,\n vRelativeTo,\n vOffset,\n distTop,\n distBottom,\n distLeft,\n distRight,\n onApply,\n onClose,\n ]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n if (e.key === 'Enter') handleApply();\n },\n [onClose, handleApply]\n );\n\n if (!isOpen) return null;\n\n return (\n <div style={overlayStyle} onClick={onClose} onKeyDown={handleKeyDown}>\n <div\n style={dialogStyle}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-label=\"Image position\"\n >\n <div style={headerStyle}>Image Position</div>\n\n <div style={bodyStyle}>\n {/* Horizontal positioning */}\n <div style={sectionStyle}>\n <div style={sectionLabelStyle}>Horizontal</div>\n <div style={rowStyle}>\n <label style={labelStyle}>Position</label>\n <select\n style={selectStyle}\n value={hMode}\n onChange={(e) => setHMode(e.target.value as 'align' | 'offset')}\n >\n <option value=\"align\">Alignment</option>\n <option value=\"offset\">Offset</option>\n </select>\n </div>\n {hMode === 'align' ? (\n <div style={rowStyle}>\n <label style={labelStyle}>Align</label>\n <select\n style={selectStyle}\n value={hAlign}\n onChange={(e) => setHAlign(e.target.value)}\n >\n <option value=\"left\">Left</option>\n <option value=\"center\">Center</option>\n <option value=\"right\">Right</option>\n </select>\n </div>\n ) : (\n <div style={rowStyle}>\n <label style={labelStyle}>Offset (px)</label>\n <input\n type=\"number\"\n style={inputStyle}\n value={hOffset}\n onChange={(e) => setHOffset(Number(e.target.value) || 0)}\n />\n </div>\n )}\n <div style={rowStyle}>\n <label style={labelStyle}>Relative to</label>\n <select\n style={selectStyle}\n value={hRelativeTo}\n onChange={(e) => setHRelativeTo(e.target.value)}\n >\n <option value=\"page\">Page</option>\n <option value=\"column\">Column</option>\n <option value=\"margin\">Margin</option>\n <option value=\"character\">Character</option>\n </select>\n </div>\n </div>\n\n {/* Vertical positioning */}\n <div style={sectionStyle}>\n <div style={sectionLabelStyle}>Vertical</div>\n <div style={rowStyle}>\n <label style={labelStyle}>Position</label>\n <select\n style={selectStyle}\n value={vMode}\n onChange={(e) => setVMode(e.target.value as 'align' | 'offset')}\n >\n <option value=\"align\">Alignment</option>\n <option value=\"offset\">Offset</option>\n </select>\n </div>\n {vMode === 'align' ? (\n <div style={rowStyle}>\n <label style={labelStyle}>Align</label>\n <select\n style={selectStyle}\n value={vAlign}\n onChange={(e) => setVAlign(e.target.value)}\n >\n <option value=\"top\">Top</option>\n <option value=\"center\">Center</option>\n <option value=\"bottom\">Bottom</option>\n </select>\n </div>\n ) : (\n <div style={rowStyle}>\n <label style={labelStyle}>Offset (px)</label>\n <input\n type=\"number\"\n style={inputStyle}\n value={vOffset}\n onChange={(e) => setVOffset(Number(e.target.value) || 0)}\n />\n </div>\n )}\n <div style={rowStyle}>\n <label style={labelStyle}>Relative to</label>\n <select\n style={selectStyle}\n value={vRelativeTo}\n onChange={(e) => setVRelativeTo(e.target.value)}\n >\n <option value=\"page\">Page</option>\n <option value=\"margin\">Margin</option>\n <option value=\"paragraph\">Paragraph</option>\n <option value=\"line\">Line</option>\n </select>\n </div>\n </div>\n\n {/* Distance from text */}\n <div style={sectionStyle}>\n <div style={sectionLabelStyle}>Distance from text (px)</div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\n <div style={rowStyle}>\n <label style={{ ...labelStyle, width: 45 }}>Top</label>\n <input\n type=\"number\"\n style={inputStyle}\n min={0}\n value={distTop}\n onChange={(e) => setDistTop(Number(e.target.value) || 0)}\n />\n </div>\n <div style={rowStyle}>\n <label style={{ ...labelStyle, width: 45 }}>Bottom</label>\n <input\n type=\"number\"\n style={inputStyle}\n min={0}\n value={distBottom}\n onChange={(e) => setDistBottom(Number(e.target.value) || 0)}\n />\n </div>\n <div style={rowStyle}>\n <label style={{ ...labelStyle, width: 45 }}>Left</label>\n <input\n type=\"number\"\n style={inputStyle}\n min={0}\n value={distLeft}\n onChange={(e) => setDistLeft(Number(e.target.value) || 0)}\n />\n </div>\n <div style={rowStyle}>\n <label style={{ ...labelStyle, width: 45 }}>Right</label>\n <input\n type=\"number\"\n style={inputStyle}\n min={0}\n value={distRight}\n onChange={(e) => setDistRight(Number(e.target.value) || 0)}\n />\n </div>\n </div>\n </div>\n </div>\n\n <div style={footerStyle}>\n <button type=\"button\" style={btnStyle} onClick={onClose}>\n Cancel\n </button>\n <button\n type=\"button\"\n style={{\n ...btnStyle,\n backgroundColor: 'var(--doc-primary)',\n color: 'white',\n borderColor: 'var(--doc-primary)',\n }}\n onClick={handleApply}\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dialogs/ImagePositionDialog.tsx"],"names":["overlayStyle","dialogStyle","headerStyle","bodyStyle","sectionStyle","sectionLabelStyle","rowStyle","labelStyle","inputStyle","selectStyle","footerStyle","btnStyle","ImagePositionDialog","isOpen","onClose","onApply","currentData","hMode","setHMode","useState","hAlign","setHAlign","hRelativeTo","setHRelativeTo","hOffset","setHOffset","vMode","setVMode","vAlign","setVAlign","vRelativeTo","setVRelativeTo","vOffset","setVOffset","distTop","setDistTop","distBottom","setDistBottom","distLeft","setDistLeft","distRight","setDistRight","useEffect","h","v","handleApply","useCallback","data","handleKeyDown","jsx","jsxs"],"mappings":"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","file":"ImagePositionDialog-KMK7ROV2.cjs","sourcesContent":["/**\n * Image Position Dialog\n *\n * Modal for editing image positioning settings:\n * - Horizontal: alignment or offset, relative to page/column/margin/paragraph\n * - Vertical: alignment or offset, relative to page/margin/paragraph/line\n * - Distance from text (top/bottom/left/right)\n */\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ImagePositionData {\n horizontal?: {\n relativeTo?: string;\n posOffset?: number;\n align?: string;\n };\n vertical?: {\n relativeTo?: string;\n posOffset?: number;\n align?: string;\n };\n distTop?: number;\n distBottom?: number;\n distLeft?: number;\n distRight?: number;\n}\n\nexport interface ImagePositionDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onApply: (data: ImagePositionData) => void;\n currentData?: ImagePositionData;\n}\n\n// ============================================================================\n// STYLES\n// ============================================================================\n\nconst overlayStyle: CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n};\n\nconst dialogStyle: CSSProperties = {\n backgroundColor: 'white',\n borderRadius: 8,\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.15)',\n minWidth: 400,\n maxWidth: 480,\n width: '100%',\n margin: 20,\n};\n\nconst headerStyle: CSSProperties = {\n padding: '16px 20px 12px',\n borderBottom: '1px solid var(--doc-border)',\n fontSize: 16,\n fontWeight: 600,\n};\n\nconst bodyStyle: CSSProperties = {\n padding: '16px 20px',\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n};\n\nconst sectionStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n};\n\nconst sectionLabelStyle: CSSProperties = {\n fontSize: 13,\n fontWeight: 600,\n color: 'var(--doc-text)',\n};\n\nconst rowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n};\n\nconst labelStyle: CSSProperties = {\n width: 75,\n fontSize: 12,\n color: 'var(--doc-text-muted)',\n};\n\nconst inputStyle: CSSProperties = {\n flex: 1,\n padding: '4px 6px',\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n fontSize: 12,\n};\n\nconst selectStyle: CSSProperties = {\n ...inputStyle,\n};\n\nconst footerStyle: CSSProperties = {\n padding: '12px 20px 16px',\n borderTop: '1px solid var(--doc-border)',\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 8,\n};\n\nconst btnStyle: CSSProperties = {\n padding: '6px 16px',\n fontSize: 13,\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n cursor: 'pointer',\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function ImagePositionDialog({\n isOpen,\n onClose,\n onApply,\n currentData,\n}: ImagePositionDialogProps): React.ReactElement | null {\n const [hMode, setHMode] = useState<'align' | 'offset'>('align');\n const [hAlign, setHAlign] = useState('center');\n const [hRelativeTo, setHRelativeTo] = useState('column');\n const [hOffset, setHOffset] = useState(0);\n\n const [vMode, setVMode] = useState<'align' | 'offset'>('align');\n const [vAlign, setVAlign] = useState('top');\n const [vRelativeTo, setVRelativeTo] = useState('paragraph');\n const [vOffset, setVOffset] = useState(0);\n\n const [distTop, setDistTop] = useState(0);\n const [distBottom, setDistBottom] = useState(0);\n const [distLeft, setDistLeft] = useState(0);\n const [distRight, setDistRight] = useState(0);\n\n useEffect(() => {\n if (!isOpen) return;\n const h = currentData?.horizontal;\n const v = currentData?.vertical;\n if (h?.align) {\n setHMode('align');\n setHAlign(h.align);\n } else if (h?.posOffset != null) {\n setHMode('offset');\n setHOffset(h.posOffset);\n }\n if (h?.relativeTo) setHRelativeTo(h.relativeTo);\n\n if (v?.align) {\n setVMode('align');\n setVAlign(v.align);\n } else if (v?.posOffset != null) {\n setVMode('offset');\n setVOffset(v.posOffset);\n }\n if (v?.relativeTo) setVRelativeTo(v.relativeTo);\n\n setDistTop(currentData?.distTop ?? 0);\n setDistBottom(currentData?.distBottom ?? 0);\n setDistLeft(currentData?.distLeft ?? 0);\n setDistRight(currentData?.distRight ?? 0);\n }, [isOpen, currentData]);\n\n const handleApply = useCallback(() => {\n const data: ImagePositionData = {};\n data.horizontal = {\n relativeTo: hRelativeTo,\n ...(hMode === 'align' ? { align: hAlign } : { posOffset: hOffset }),\n };\n data.vertical = {\n relativeTo: vRelativeTo,\n ...(vMode === 'align' ? { align: vAlign } : { posOffset: vOffset }),\n };\n data.distTop = distTop;\n data.distBottom = distBottom;\n data.distLeft = distLeft;\n data.distRight = distRight;\n onApply(data);\n onClose();\n }, [\n hMode,\n hAlign,\n hRelativeTo,\n hOffset,\n vMode,\n vAlign,\n vRelativeTo,\n vOffset,\n distTop,\n distBottom,\n distLeft,\n distRight,\n onApply,\n onClose,\n ]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n if (e.key === 'Enter') handleApply();\n },\n [onClose, handleApply]\n );\n\n if (!isOpen) return null;\n\n return (\n <div style={overlayStyle} onClick={onClose} onKeyDown={handleKeyDown}>\n <div\n style={dialogStyle}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-label=\"Image position\"\n >\n <div style={headerStyle}>Image Position</div>\n\n <div style={bodyStyle}>\n {/* Horizontal positioning */}\n <div style={sectionStyle}>\n <div style={sectionLabelStyle}>Horizontal</div>\n <div style={rowStyle}>\n <label style={labelStyle}>Position</label>\n <select\n style={selectStyle}\n value={hMode}\n onChange={(e) => setHMode(e.target.value as 'align' | 'offset')}\n >\n <option value=\"align\">Alignment</option>\n <option value=\"offset\">Offset</option>\n </select>\n </div>\n {hMode === 'align' ? (\n <div style={rowStyle}>\n <label style={labelStyle}>Align</label>\n <select\n style={selectStyle}\n value={hAlign}\n onChange={(e) => setHAlign(e.target.value)}\n >\n <option value=\"left\">Left</option>\n <option value=\"center\">Center</option>\n <option value=\"right\">Right</option>\n </select>\n </div>\n ) : (\n <div style={rowStyle}>\n <label style={labelStyle}>Offset (px)</label>\n <input\n type=\"number\"\n style={inputStyle}\n value={hOffset}\n onChange={(e) => setHOffset(Number(e.target.value) || 0)}\n />\n </div>\n )}\n <div style={rowStyle}>\n <label style={labelStyle}>Relative to</label>\n <select\n style={selectStyle}\n value={hRelativeTo}\n onChange={(e) => setHRelativeTo(e.target.value)}\n >\n <option value=\"page\">Page</option>\n <option value=\"column\">Column</option>\n <option value=\"margin\">Margin</option>\n <option value=\"character\">Character</option>\n </select>\n </div>\n </div>\n\n {/* Vertical positioning */}\n <div style={sectionStyle}>\n <div style={sectionLabelStyle}>Vertical</div>\n <div style={rowStyle}>\n <label style={labelStyle}>Position</label>\n <select\n style={selectStyle}\n value={vMode}\n onChange={(e) => setVMode(e.target.value as 'align' | 'offset')}\n >\n <option value=\"align\">Alignment</option>\n <option value=\"offset\">Offset</option>\n </select>\n </div>\n {vMode === 'align' ? (\n <div style={rowStyle}>\n <label style={labelStyle}>Align</label>\n <select\n style={selectStyle}\n value={vAlign}\n onChange={(e) => setVAlign(e.target.value)}\n >\n <option value=\"top\">Top</option>\n <option value=\"center\">Center</option>\n <option value=\"bottom\">Bottom</option>\n </select>\n </div>\n ) : (\n <div style={rowStyle}>\n <label style={labelStyle}>Offset (px)</label>\n <input\n type=\"number\"\n style={inputStyle}\n value={vOffset}\n onChange={(e) => setVOffset(Number(e.target.value) || 0)}\n />\n </div>\n )}\n <div style={rowStyle}>\n <label style={labelStyle}>Relative to</label>\n <select\n style={selectStyle}\n value={vRelativeTo}\n onChange={(e) => setVRelativeTo(e.target.value)}\n >\n <option value=\"page\">Page</option>\n <option value=\"margin\">Margin</option>\n <option value=\"paragraph\">Paragraph</option>\n <option value=\"line\">Line</option>\n </select>\n </div>\n </div>\n\n {/* Distance from text */}\n <div style={sectionStyle}>\n <div style={sectionLabelStyle}>Distance from text (px)</div>\n <div style={{ display: 'grid', gridTemplateColumns: '1fr 1fr', gap: 8 }}>\n <div style={rowStyle}>\n <label style={{ ...labelStyle, width: 45 }}>Top</label>\n <input\n type=\"number\"\n style={inputStyle}\n min={0}\n value={distTop}\n onChange={(e) => setDistTop(Number(e.target.value) || 0)}\n />\n </div>\n <div style={rowStyle}>\n <label style={{ ...labelStyle, width: 45 }}>Bottom</label>\n <input\n type=\"number\"\n style={inputStyle}\n min={0}\n value={distBottom}\n onChange={(e) => setDistBottom(Number(e.target.value) || 0)}\n />\n </div>\n <div style={rowStyle}>\n <label style={{ ...labelStyle, width: 45 }}>Left</label>\n <input\n type=\"number\"\n style={inputStyle}\n min={0}\n value={distLeft}\n onChange={(e) => setDistLeft(Number(e.target.value) || 0)}\n />\n </div>\n <div style={rowStyle}>\n <label style={{ ...labelStyle, width: 45 }}>Right</label>\n <input\n type=\"number\"\n style={inputStyle}\n min={0}\n value={distRight}\n onChange={(e) => setDistRight(Number(e.target.value) || 0)}\n />\n </div>\n </div>\n </div>\n </div>\n\n <div style={footerStyle}>\n <button type=\"button\" style={btnStyle} onClick={onClose}>\n Cancel\n </button>\n <button\n type=\"button\"\n style={{\n ...btnStyle,\n backgroundColor: 'var(--doc-primary)',\n color: 'white',\n borderColor: 'var(--doc-primary)',\n }}\n onClick={handleApply}\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dialogs/ImagePropertiesDialog.tsx"],"names":["overlayStyle","dialogStyle","headerStyle","bodyStyle","sectionStyle","sectionLabelStyle","rowStyle","labelStyle","inputStyle","selectStyle","textareaStyle","footerStyle","btnStyle","ImagePropertiesDialog","isOpen","onClose","onApply","currentData","alt","setAlt","useState","borderWidth","setBorderWidth","borderColor","setBorderColor","borderStyle","setBorderStyle","useEffect","handleApply","useCallback","handleKeyDown","e","jsx","jsxs"],"mappings":"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","file":"ImagePropertiesDialog-ERFCUVCW.js","sourcesContent":["/**\n * Image Properties Dialog\n *\n * Modal for editing image properties:\n * - Alt text for accessibility\n * - Border/outline style, color, and width\n */\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ImagePropertiesData {\n alt?: string;\n borderWidth?: number;\n borderColor?: string;\n borderStyle?: string;\n}\n\nexport interface ImagePropertiesDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onApply: (data: ImagePropertiesData) => void;\n currentData?: ImagePropertiesData;\n}\n\n// ============================================================================\n// STYLES\n// ============================================================================\n\nconst overlayStyle: CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n};\n\nconst dialogStyle: CSSProperties = {\n backgroundColor: 'white',\n borderRadius: 8,\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.15)',\n minWidth: 380,\n maxWidth: 440,\n width: '100%',\n margin: 20,\n};\n\nconst headerStyle: CSSProperties = {\n padding: '16px 20px 12px',\n borderBottom: '1px solid var(--doc-border)',\n fontSize: 16,\n fontWeight: 600,\n};\n\nconst bodyStyle: CSSProperties = {\n padding: '16px 20px',\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n};\n\nconst sectionStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n};\n\nconst sectionLabelStyle: CSSProperties = {\n fontSize: 13,\n fontWeight: 600,\n color: 'var(--doc-text)',\n};\n\nconst rowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n};\n\nconst labelStyle: CSSProperties = {\n width: 60,\n fontSize: 12,\n color: 'var(--doc-text-muted)',\n};\n\nconst inputStyle: CSSProperties = {\n flex: 1,\n padding: '4px 6px',\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n fontSize: 12,\n};\n\nconst selectStyle: CSSProperties = {\n ...inputStyle,\n};\n\nconst textareaStyle: CSSProperties = {\n ...inputStyle,\n minHeight: 60,\n resize: 'vertical' as const,\n fontFamily: 'inherit',\n};\n\nconst footerStyle: CSSProperties = {\n padding: '12px 20px 16px',\n borderTop: '1px solid var(--doc-border)',\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 8,\n};\n\nconst btnStyle: CSSProperties = {\n padding: '6px 16px',\n fontSize: 13,\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n cursor: 'pointer',\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function ImagePropertiesDialog({\n isOpen,\n onClose,\n onApply,\n currentData,\n}: ImagePropertiesDialogProps): React.ReactElement | null {\n const [alt, setAlt] = useState('');\n const [borderWidth, setBorderWidth] = useState(0);\n const [borderColor, setBorderColor] = useState('#000000');\n const [borderStyle, setBorderStyle] = useState('solid');\n\n useEffect(() => {\n if (!isOpen) return;\n setAlt(currentData?.alt ?? '');\n setBorderWidth(currentData?.borderWidth ?? 0);\n setBorderColor(currentData?.borderColor ?? '#000000');\n setBorderStyle(currentData?.borderStyle ?? 'solid');\n }, [isOpen, currentData]);\n\n const handleApply = useCallback(() => {\n onApply({\n alt: alt || undefined,\n borderWidth: borderWidth > 0 ? borderWidth : undefined,\n borderColor: borderWidth > 0 ? borderColor : undefined,\n borderStyle: borderWidth > 0 ? borderStyle : undefined,\n });\n onClose();\n }, [alt, borderWidth, borderColor, borderStyle, onApply, onClose]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n if (e.key === 'Enter' && !e.shiftKey) handleApply();\n },\n [onClose, handleApply]\n );\n\n if (!isOpen) return null;\n\n return (\n <div style={overlayStyle} onClick={onClose} onKeyDown={handleKeyDown}>\n <div\n style={dialogStyle}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-label=\"Image properties\"\n >\n <div style={headerStyle}>Image Properties</div>\n\n <div style={bodyStyle}>\n {/* Alt Text */}\n <div style={sectionStyle}>\n <div style={sectionLabelStyle}>Alt Text</div>\n <textarea\n style={textareaStyle}\n value={alt}\n onChange={(e) => setAlt(e.target.value)}\n placeholder=\"Describe this image for accessibility...\"\n />\n </div>\n\n {/* Border / Outline */}\n <div style={sectionStyle}>\n <div style={sectionLabelStyle}>Border</div>\n <div style={rowStyle}>\n <label style={labelStyle}>Width</label>\n <input\n type=\"number\"\n style={{ ...inputStyle, maxWidth: 80 }}\n min={0}\n max={20}\n step={0.5}\n value={borderWidth}\n onChange={(e) => setBorderWidth(Number(e.target.value) || 0)}\n />\n <span style={{ fontSize: 12, color: 'var(--doc-text-muted)' }}>px</span>\n </div>\n <div style={rowStyle}>\n <label style={labelStyle}>Style</label>\n <select\n style={selectStyle}\n value={borderStyle}\n onChange={(e) => setBorderStyle(e.target.value)}\n >\n <option value=\"solid\">Solid</option>\n <option value=\"dashed\">Dashed</option>\n <option value=\"dotted\">Dotted</option>\n <option value=\"double\">Double</option>\n <option value=\"groove\">Groove</option>\n <option value=\"ridge\">Ridge</option>\n <option value=\"inset\">Inset</option>\n <option value=\"outset\">Outset</option>\n </select>\n </div>\n <div style={rowStyle}>\n <label style={labelStyle}>Color</label>\n <input\n type=\"color\"\n value={borderColor}\n onChange={(e) => setBorderColor(e.target.value)}\n style={{\n width: 32,\n height: 24,\n padding: 0,\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n cursor: 'pointer',\n }}\n />\n <input\n type=\"text\"\n style={{ ...inputStyle, maxWidth: 90 }}\n value={borderColor}\n onChange={(e) => setBorderColor(e.target.value)}\n />\n </div>\n {borderWidth > 0 && (\n <div\n style={{\n marginTop: 4,\n padding: 8,\n border: `${borderWidth}px ${borderStyle} ${borderColor}`,\n borderRadius: 4,\n fontSize: 11,\n color: 'var(--doc-text-muted)',\n textAlign: 'center',\n }}\n >\n Preview\n </div>\n )}\n </div>\n </div>\n\n <div style={footerStyle}>\n <button type=\"button\" style={btnStyle} onClick={onClose}>\n Cancel\n </button>\n <button\n type=\"button\"\n style={{\n ...btnStyle,\n backgroundColor: 'var(--doc-primary)',\n color: 'white',\n borderColor: 'var(--doc-primary)',\n }}\n onClick={handleApply}\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dialogs/ImagePropertiesDialog.tsx"],"names":["overlayStyle","dialogStyle","headerStyle","bodyStyle","sectionStyle","sectionLabelStyle","rowStyle","labelStyle","inputStyle","selectStyle","textareaStyle","footerStyle","btnStyle","ImagePropertiesDialog","isOpen","onClose","onApply","currentData","alt","setAlt","useState","borderWidth","setBorderWidth","borderColor","setBorderColor","borderStyle","setBorderStyle","useEffect","handleApply","useCallback","handleKeyDown","e","jsx","jsxs"],"mappings":"gHAiCA,IAAMA,CAAAA,CAA8B,CAClC,QAAA,CAAU,OAAA,CACV,GAAA,CAAK,CAAA,CACL,KAAM,CAAA,CACN,KAAA,CAAO,CAAA,CACP,MAAA,CAAQ,EACR,eAAA,CAAiB,oBAAA,CACjB,OAAA,CAAS,MAAA,CACT,WAAY,QAAA,CACZ,cAAA,CAAgB,QAAA,CAChB,MAAA,CAAQ,GACV,CAAA,CAEMC,CAAAA,CAA6B,CACjC,eAAA,CAAiB,QACjB,YAAA,CAAc,CAAA,CACd,SAAA,CAAW,gCAAA,CACX,SAAU,GAAA,CACV,QAAA,CAAU,GAAA,CACV,KAAA,CAAO,OACP,MAAA,CAAQ,EACV,CAAA,CAEMC,CAAAA,CAA6B,CACjC,OAAA,CAAS,gBAAA,CACT,YAAA,CAAc,6BAAA,CACd,SAAU,EAAA,CACV,UAAA,CAAY,GACd,CAAA,CAEMC,EAA2B,CAC/B,OAAA,CAAS,WAAA,CACT,OAAA,CAAS,OACT,aAAA,CAAe,QAAA,CACf,GAAA,CAAK,EACP,EAEMC,CAAAA,CAA8B,CAClC,OAAA,CAAS,MAAA,CACT,cAAe,QAAA,CACf,GAAA,CAAK,CACP,CAAA,CAEMC,EAAmC,CACvC,QAAA,CAAU,EAAA,CACV,UAAA,CAAY,IACZ,KAAA,CAAO,iBACT,CAAA,CAEMC,CAAAA,CAA0B,CAC9B,OAAA,CAAS,MAAA,CACT,UAAA,CAAY,QAAA,CACZ,IAAK,CACP,CAAA,CAEMC,CAAAA,CAA4B,CAChC,MAAO,EAAA,CACP,QAAA,CAAU,EAAA,CACV,KAAA,CAAO,uBACT,CAAA,CAEMC,CAAAA,CAA4B,CAChC,IAAA,CAAM,EACN,OAAA,CAAS,SAAA,CACT,MAAA,CAAQ,6BAAA,CACR,aAAc,CAAA,CACd,QAAA,CAAU,EACZ,CAAA,CAEMC,EAA6B,CACjC,GAAGD,CACL,CAAA,CAEME,EAA+B,CACnC,GAAGF,CAAAA,CACH,SAAA,CAAW,GACX,MAAA,CAAQ,UAAA,CACR,UAAA,CAAY,SACd,EAEMG,CAAAA,CAA6B,CACjC,OAAA,CAAS,gBAAA,CACT,UAAW,6BAAA,CACX,OAAA,CAAS,MAAA,CACT,cAAA,CAAgB,WAChB,GAAA,CAAK,CACP,CAAA,CAEMC,CAAAA,CAA0B,CAC9B,OAAA,CAAS,UAAA,CACT,QAAA,CAAU,EAAA,CACV,MAAA,CAAQ,6BAAA,CACR,YAAA,CAAc,CAAA,CACd,OAAQ,SACV,CAAA,CAMO,SAASC,CAAAA,CAAsB,CACpC,MAAA,CAAAC,CAAAA,CACA,OAAA,CAAAC,CAAAA,CACA,QAAAC,CAAAA,CACA,WAAA,CAAAC,CACF,CAAA,CAA0D,CACxD,GAAM,CAACC,CAAAA,CAAKC,CAAM,EAAIC,cAAAA,CAAS,EAAE,CAAA,CAC3B,CAACC,EAAaC,CAAc,CAAA,CAAIF,cAAAA,CAAS,CAAC,EAC1C,CAACG,CAAAA,CAAaC,CAAc,CAAA,CAAIJ,eAAS,SAAS,CAAA,CAClD,CAACK,CAAAA,CAAaC,CAAc,CAAA,CAAIN,cAAAA,CAAS,OAAO,CAAA,CAEtDO,gBAAU,IAAM,CACTb,CAAAA,GACLK,CAAAA,CAAOF,GAAa,GAAA,EAAO,EAAE,CAAA,CAC7BK,CAAAA,CAAeL,GAAa,WAAA,EAAe,CAAC,CAAA,CAC5CO,CAAAA,CAAeP,GAAa,WAAA,EAAe,SAAS,CAAA,CACpDS,CAAAA,CAAeT,GAAa,WAAA,EAAe,OAAO,CAAA,EACpD,CAAA,CAAG,CAACH,CAAAA,CAAQG,CAAW,CAAC,CAAA,CAExB,IAAMW,CAAAA,CAAcC,iBAAAA,CAAY,IAAM,CACpCb,EAAQ,CACN,GAAA,CAAKE,CAAAA,EAAO,MAAA,CACZ,YAAaG,CAAAA,CAAc,CAAA,CAAIA,CAAAA,CAAc,MAAA,CAC7C,YAAaA,CAAAA,CAAc,CAAA,CAAIE,CAAAA,CAAc,MAAA,CAC7C,YAAaF,CAAAA,CAAc,CAAA,CAAII,CAAAA,CAAc,MAC/C,CAAC,CAAA,CACDV,CAAAA,GACF,CAAA,CAAG,CAACG,CAAAA,CAAKG,CAAAA,CAAaE,CAAAA,CAAaE,CAAAA,CAAaT,EAASD,CAAO,CAAC,CAAA,CAE3De,CAAAA,CAAgBD,kBACnBE,CAAAA,EAA2B,CACtBA,CAAAA,CAAE,GAAA,GAAQ,UAAUhB,CAAAA,EAAQ,CAC5BgB,CAAAA,CAAE,GAAA,GAAQ,SAAW,CAACA,CAAAA,CAAE,QAAA,EAAUH,CAAAA,GACxC,CAAA,CACA,CAACb,CAAAA,CAASa,CAAW,CACvB,CAAA,CAEA,OAAKd,CAAAA,CAGHkB,cAAAA,CAAC,OAAI,KAAA,CAAOhC,CAAAA,CAAc,OAAA,CAASe,CAAAA,CAAS,UAAWe,CAAAA,CACrD,QAAA,CAAAG,eAAAA,CAAC,KAAA,CAAA,CACC,MAAOhC,CAAAA,CACP,OAAA,CAAU8B,CAAAA,EAAMA,CAAAA,CAAE,eAAA,EAAgB,CAClC,IAAA,CAAK,QAAA,CACL,aAAW,kBAAA,CAEX,QAAA,CAAA,CAAAC,cAAAA,CAAC,KAAA,CAAA,CAAI,MAAO9B,CAAAA,CAAa,QAAA,CAAA,kBAAA,CAAgB,CAAA,CAEzC+B,eAAAA,CAAC,OAAI,KAAA,CAAO9B,CAAAA,CAEV,QAAA,CAAA,CAAA8B,eAAAA,CAAC,OAAI,KAAA,CAAO7B,CAAAA,CACV,QAAA,CAAA,CAAA4B,cAAAA,CAAC,OAAI,KAAA,CAAO3B,CAAAA,CAAmB,QAAA,CAAA,UAAA,CAAQ,CAAA,CACvC2B,eAAC,UAAA,CAAA,CACC,KAAA,CAAOtB,CAAAA,CACP,KAAA,CAAOQ,EACP,QAAA,CAAWa,CAAAA,EAAMZ,CAAAA,CAAOY,CAAAA,CAAE,OAAO,KAAK,CAAA,CACtC,WAAA,CAAY,0CAAA,CACd,GACF,CAAA,CAGAE,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO7B,EACV,QAAA,CAAA,CAAA4B,cAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO3B,EAAmB,QAAA,CAAA,QAAA,CAAM,CAAA,CACrC4B,eAAAA,CAAC,KAAA,CAAA,CAAI,MAAO3B,CAAAA,CACV,QAAA,CAAA,CAAA0B,cAAAA,CAAC,OAAA,CAAA,CAAM,MAAOzB,CAAAA,CAAY,QAAA,CAAA,OAAA,CAAK,CAAA,CAC/ByB,cAAAA,CAAC,SACC,IAAA,CAAK,QAAA,CACL,KAAA,CAAO,CAAE,GAAGxB,CAAAA,CAAY,QAAA,CAAU,EAAG,CAAA,CACrC,IAAK,CAAA,CACL,GAAA,CAAK,EAAA,CACL,IAAA,CAAM,GACN,KAAA,CAAOa,CAAAA,CACP,QAAA,CAAWU,CAAAA,EAAMT,EAAe,MAAA,CAAOS,CAAAA,CAAE,MAAA,CAAO,KAAK,GAAK,CAAC,CAAA,CAC7D,CAAA,CACAC,cAAAA,CAAC,QAAK,KAAA,CAAO,CAAE,QAAA,CAAU,EAAA,CAAI,MAAO,uBAAwB,CAAA,CAAG,QAAA,CAAA,IAAA,CAAE,CAAA,CAAA,CACnE,EACAC,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO3B,CAAAA,CACV,UAAA0B,cAAAA,CAAC,OAAA,CAAA,CAAM,KAAA,CAAOzB,CAAAA,CAAY,iBAAK,CAAA,CAC/B0B,eAAAA,CAAC,QAAA,CAAA,CACC,KAAA,CAAOxB,EACP,KAAA,CAAOgB,CAAAA,CACP,QAAA,CAAWM,CAAAA,EAAML,EAAeK,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAE9C,UAAAC,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,iBAAK,CAAA,CAC3BA,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,SAAS,QAAA,CAAA,QAAA,CAAM,CAAA,CAC7BA,cAAAA,CAAC,QAAA,CAAA,CAAO,MAAM,QAAA,CAAS,QAAA,CAAA,QAAA,CAAM,CAAA,CAC7BA,cAAAA,CAAC,UAAO,KAAA,CAAM,QAAA,CAAS,QAAA,CAAA,QAAA,CAAM,CAAA,CAC7BA,eAAC,QAAA,CAAA,CAAO,KAAA,CAAM,QAAA,CAAS,QAAA,CAAA,QAAA,CAAM,EAC7BA,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,OAAA,CAAQ,iBAAK,CAAA,CAC3BA,cAAAA,CAAC,QAAA,CAAA,CAAO,KAAA,CAAM,QAAQ,QAAA,CAAA,OAAA,CAAK,CAAA,CAC3BA,cAAAA,CAAC,QAAA,CAAA,CAAO,MAAM,QAAA,CAAS,QAAA,CAAA,QAAA,CAAM,CAAA,CAAA,CAC/B,CAAA,CAAA,CACF,EACAC,eAAAA,CAAC,KAAA,CAAA,CAAI,KAAA,CAAO3B,CAAAA,CACV,UAAA0B,cAAAA,CAAC,OAAA,CAAA,CAAM,KAAA,CAAOzB,CAAAA,CAAY,iBAAK,CAAA,CAC/ByB,cAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,QACL,KAAA,CAAOT,CAAAA,CACP,QAAA,CAAWQ,CAAAA,EAAMP,EAAeO,CAAAA,CAAE,MAAA,CAAO,KAAK,CAAA,CAC9C,MAAO,CACL,KAAA,CAAO,EAAA,CACP,MAAA,CAAQ,GACR,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,6BAAA,CACR,aAAc,CAAA,CACd,MAAA,CAAQ,SACV,CAAA,CACF,EACAC,cAAAA,CAAC,OAAA,CAAA,CACC,IAAA,CAAK,MAAA,CACL,MAAO,CAAE,GAAGxB,CAAAA,CAAY,QAAA,CAAU,EAAG,CAAA,CACrC,KAAA,CAAOe,CAAAA,CACP,QAAA,CAAWQ,GAAMP,CAAAA,CAAeO,CAAAA,CAAE,MAAA,CAAO,KAAK,EAChD,CAAA,CAAA,CACF,CAAA,CACCV,CAAAA,CAAc,CAAA,EACbW,eAAC,KAAA,CAAA,CACC,KAAA,CAAO,CACL,SAAA,CAAW,EACX,OAAA,CAAS,CAAA,CACT,MAAA,CAAQ,CAAA,EAAGX,CAAW,CAAA,GAAA,EAAMI,CAAW,CAAA,CAAA,EAAIF,CAAW,GACtD,YAAA,CAAc,CAAA,CACd,QAAA,CAAU,EAAA,CACV,MAAO,uBAAA,CACP,SAAA,CAAW,QACb,CAAA,CACD,mBAED,CAAA,CAAA,CAEJ,CAAA,CAAA,CACF,CAAA,CAEAU,eAAAA,CAAC,OAAI,KAAA,CAAOtB,CAAAA,CACV,QAAA,CAAA,CAAAqB,cAAAA,CAAC,UAAO,IAAA,CAAK,QAAA,CAAS,KAAA,CAAOpB,CAAAA,CAAU,QAASG,CAAAA,CAAS,QAAA,CAAA,QAAA,CAEzD,CAAA,CACAiB,cAAAA,CAAC,UACC,IAAA,CAAK,QAAA,CACL,KAAA,CAAO,CACL,GAAGpB,CAAAA,CACH,eAAA,CAAiB,oBAAA,CACjB,KAAA,CAAO,QACP,WAAA,CAAa,oBACf,CAAA,CACA,OAAA,CAASgB,EACV,QAAA,CAAA,OAAA,CAED,CAAA,CAAA,CACF,CAAA,CAAA,CACF,CAAA,CACF,EAnHkB,IAqHtB","file":"ImagePropertiesDialog-USMMRK6X.cjs","sourcesContent":["/**\n * Image Properties Dialog\n *\n * Modal for editing image properties:\n * - Alt text for accessibility\n * - Border/outline style, color, and width\n */\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface ImagePropertiesData {\n alt?: string;\n borderWidth?: number;\n borderColor?: string;\n borderStyle?: string;\n}\n\nexport interface ImagePropertiesDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onApply: (data: ImagePropertiesData) => void;\n currentData?: ImagePropertiesData;\n}\n\n// ============================================================================\n// STYLES\n// ============================================================================\n\nconst overlayStyle: CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n};\n\nconst dialogStyle: CSSProperties = {\n backgroundColor: 'white',\n borderRadius: 8,\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.15)',\n minWidth: 380,\n maxWidth: 440,\n width: '100%',\n margin: 20,\n};\n\nconst headerStyle: CSSProperties = {\n padding: '16px 20px 12px',\n borderBottom: '1px solid var(--doc-border)',\n fontSize: 16,\n fontWeight: 600,\n};\n\nconst bodyStyle: CSSProperties = {\n padding: '16px 20px',\n display: 'flex',\n flexDirection: 'column',\n gap: 16,\n};\n\nconst sectionStyle: CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: 8,\n};\n\nconst sectionLabelStyle: CSSProperties = {\n fontSize: 13,\n fontWeight: 600,\n color: 'var(--doc-text)',\n};\n\nconst rowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 8,\n};\n\nconst labelStyle: CSSProperties = {\n width: 60,\n fontSize: 12,\n color: 'var(--doc-text-muted)',\n};\n\nconst inputStyle: CSSProperties = {\n flex: 1,\n padding: '4px 6px',\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n fontSize: 12,\n};\n\nconst selectStyle: CSSProperties = {\n ...inputStyle,\n};\n\nconst textareaStyle: CSSProperties = {\n ...inputStyle,\n minHeight: 60,\n resize: 'vertical' as const,\n fontFamily: 'inherit',\n};\n\nconst footerStyle: CSSProperties = {\n padding: '12px 20px 16px',\n borderTop: '1px solid var(--doc-border)',\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 8,\n};\n\nconst btnStyle: CSSProperties = {\n padding: '6px 16px',\n fontSize: 13,\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n cursor: 'pointer',\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function ImagePropertiesDialog({\n isOpen,\n onClose,\n onApply,\n currentData,\n}: ImagePropertiesDialogProps): React.ReactElement | null {\n const [alt, setAlt] = useState('');\n const [borderWidth, setBorderWidth] = useState(0);\n const [borderColor, setBorderColor] = useState('#000000');\n const [borderStyle, setBorderStyle] = useState('solid');\n\n useEffect(() => {\n if (!isOpen) return;\n setAlt(currentData?.alt ?? '');\n setBorderWidth(currentData?.borderWidth ?? 0);\n setBorderColor(currentData?.borderColor ?? '#000000');\n setBorderStyle(currentData?.borderStyle ?? 'solid');\n }, [isOpen, currentData]);\n\n const handleApply = useCallback(() => {\n onApply({\n alt: alt || undefined,\n borderWidth: borderWidth > 0 ? borderWidth : undefined,\n borderColor: borderWidth > 0 ? borderColor : undefined,\n borderStyle: borderWidth > 0 ? borderStyle : undefined,\n });\n onClose();\n }, [alt, borderWidth, borderColor, borderStyle, onApply, onClose]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n if (e.key === 'Enter' && !e.shiftKey) handleApply();\n },\n [onClose, handleApply]\n );\n\n if (!isOpen) return null;\n\n return (\n <div style={overlayStyle} onClick={onClose} onKeyDown={handleKeyDown}>\n <div\n style={dialogStyle}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-label=\"Image properties\"\n >\n <div style={headerStyle}>Image Properties</div>\n\n <div style={bodyStyle}>\n {/* Alt Text */}\n <div style={sectionStyle}>\n <div style={sectionLabelStyle}>Alt Text</div>\n <textarea\n style={textareaStyle}\n value={alt}\n onChange={(e) => setAlt(e.target.value)}\n placeholder=\"Describe this image for accessibility...\"\n />\n </div>\n\n {/* Border / Outline */}\n <div style={sectionStyle}>\n <div style={sectionLabelStyle}>Border</div>\n <div style={rowStyle}>\n <label style={labelStyle}>Width</label>\n <input\n type=\"number\"\n style={{ ...inputStyle, maxWidth: 80 }}\n min={0}\n max={20}\n step={0.5}\n value={borderWidth}\n onChange={(e) => setBorderWidth(Number(e.target.value) || 0)}\n />\n <span style={{ fontSize: 12, color: 'var(--doc-text-muted)' }}>px</span>\n </div>\n <div style={rowStyle}>\n <label style={labelStyle}>Style</label>\n <select\n style={selectStyle}\n value={borderStyle}\n onChange={(e) => setBorderStyle(e.target.value)}\n >\n <option value=\"solid\">Solid</option>\n <option value=\"dashed\">Dashed</option>\n <option value=\"dotted\">Dotted</option>\n <option value=\"double\">Double</option>\n <option value=\"groove\">Groove</option>\n <option value=\"ridge\">Ridge</option>\n <option value=\"inset\">Inset</option>\n <option value=\"outset\">Outset</option>\n </select>\n </div>\n <div style={rowStyle}>\n <label style={labelStyle}>Color</label>\n <input\n type=\"color\"\n value={borderColor}\n onChange={(e) => setBorderColor(e.target.value)}\n style={{\n width: 32,\n height: 24,\n padding: 0,\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n cursor: 'pointer',\n }}\n />\n <input\n type=\"text\"\n style={{ ...inputStyle, maxWidth: 90 }}\n value={borderColor}\n onChange={(e) => setBorderColor(e.target.value)}\n />\n </div>\n {borderWidth > 0 && (\n <div\n style={{\n marginTop: 4,\n padding: 8,\n border: `${borderWidth}px ${borderStyle} ${borderColor}`,\n borderRadius: 4,\n fontSize: 11,\n color: 'var(--doc-text-muted)',\n textAlign: 'center',\n }}\n >\n Preview\n </div>\n )}\n </div>\n </div>\n\n <div style={footerStyle}>\n <button type=\"button\" style={btnStyle} onClick={onClose}>\n Cancel\n </button>\n <button\n type=\"button\"\n style={{\n ...btnStyle,\n backgroundColor: 'var(--doc-primary)',\n color: 'white',\n borderColor: 'var(--doc-primary)',\n }}\n onClick={handleApply}\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dialogs/TablePropertiesDialog.tsx"],"names":["overlayStyle","dialogStyle","headerStyle","bodyStyle","rowStyle","labelStyle","inputStyle","selectStyle","footerStyle","btnStyle","TablePropertiesDialog","isOpen","onClose","onApply","currentProps","width","setWidth","useState","widthType","setWidthType","justification","setJustification","useEffect","handleApply","useCallback","props","handleKeyDown","e","jsx","jsxs"],"mappings":"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","file":"TablePropertiesDialog-72CIUAZT.cjs","sourcesContent":["/**\n * Table Properties Dialog\n *\n * Modal for editing table-level settings:\n * - Preferred width (twips or percentage)\n * - Alignment (left, center, right)\n */\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface TableProperties {\n width?: number | null;\n widthType?: string | null;\n justification?: 'left' | 'center' | 'right' | null;\n}\n\nexport interface TablePropertiesDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onApply: (props: TableProperties) => void;\n currentProps?: {\n width?: number;\n widthType?: string;\n justification?: string;\n };\n}\n\n// ============================================================================\n// STYLES\n// ============================================================================\n\nconst overlayStyle: CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n};\n\nconst dialogStyle: CSSProperties = {\n backgroundColor: 'white',\n borderRadius: 8,\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.15)',\n minWidth: 360,\n maxWidth: 440,\n width: '100%',\n margin: 20,\n};\n\nconst headerStyle: CSSProperties = {\n padding: '16px 20px 12px',\n borderBottom: '1px solid var(--doc-border)',\n fontSize: 16,\n fontWeight: 600,\n};\n\nconst bodyStyle: CSSProperties = {\n padding: '16px 20px',\n display: 'flex',\n flexDirection: 'column',\n gap: 12,\n};\n\nconst rowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n};\n\nconst labelStyle: CSSProperties = {\n width: 80,\n fontSize: 13,\n color: 'var(--doc-text-muted)',\n};\n\nconst inputStyle: CSSProperties = {\n flex: 1,\n padding: '6px 8px',\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n fontSize: 13,\n};\n\nconst selectStyle: CSSProperties = {\n ...inputStyle,\n};\n\nconst footerStyle: CSSProperties = {\n padding: '12px 20px 16px',\n borderTop: '1px solid var(--doc-border)',\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 8,\n};\n\nconst btnStyle: CSSProperties = {\n padding: '6px 16px',\n fontSize: 13,\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n cursor: 'pointer',\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function TablePropertiesDialog({\n isOpen,\n onClose,\n onApply,\n currentProps,\n}: TablePropertiesDialogProps): React.ReactElement | null {\n const [width, setWidth] = useState<number>(currentProps?.width || 0);\n const [widthType, setWidthType] = useState<string>(currentProps?.widthType || 'auto');\n const [justification, setJustification] = useState<string>(currentProps?.justification || 'left');\n\n useEffect(() => {\n if (isOpen) {\n setWidth(currentProps?.width || 0);\n setWidthType(currentProps?.widthType || 'auto');\n setJustification(currentProps?.justification || 'left');\n }\n }, [isOpen, currentProps]);\n\n const handleApply = useCallback(() => {\n const props: TableProperties = {};\n if (widthType === 'auto') {\n props.width = null;\n props.widthType = 'auto';\n } else {\n props.width = width;\n props.widthType = widthType;\n }\n props.justification = justification as 'left' | 'center' | 'right';\n onApply(props);\n onClose();\n }, [width, widthType, justification, onApply, onClose]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n if (e.key === 'Enter') handleApply();\n },\n [onClose, handleApply]\n );\n\n if (!isOpen) return null;\n\n return (\n <div style={overlayStyle} onClick={onClose} onKeyDown={handleKeyDown}>\n <div\n style={dialogStyle}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-label=\"Table properties\"\n >\n <div style={headerStyle}>Table Properties</div>\n\n <div style={bodyStyle}>\n {/* Width type */}\n <div style={rowStyle}>\n <label style={labelStyle}>Width type</label>\n <select\n style={selectStyle}\n value={widthType}\n onChange={(e) => setWidthType(e.target.value)}\n >\n <option value=\"auto\">Auto</option>\n <option value=\"dxa\">Fixed (twips)</option>\n <option value=\"pct\">Percentage</option>\n </select>\n </div>\n\n {/* Width value */}\n {widthType !== 'auto' && (\n <div style={rowStyle}>\n <label style={labelStyle}>Width</label>\n <input\n type=\"number\"\n style={inputStyle}\n min={0}\n step={widthType === 'pct' ? 5 : 100}\n value={width}\n onChange={(e) => setWidth(Number(e.target.value) || 0)}\n />\n <span style={{ fontSize: 11, color: 'var(--doc-text-muted)' }}>\n {widthType === 'pct' ? '(50ths of %)' : 'tw'}\n </span>\n </div>\n )}\n\n {/* Alignment */}\n <div style={rowStyle}>\n <label style={labelStyle}>Alignment</label>\n <select\n style={selectStyle}\n value={justification}\n onChange={(e) => setJustification(e.target.value)}\n >\n <option value=\"left\">Left</option>\n <option value=\"center\">Center</option>\n <option value=\"right\">Right</option>\n </select>\n </div>\n </div>\n\n <div style={footerStyle}>\n <button type=\"button\" style={btnStyle} onClick={onClose}>\n Cancel\n </button>\n <button\n type=\"button\"\n style={{\n ...btnStyle,\n backgroundColor: 'var(--doc-primary)',\n color: 'white',\n borderColor: 'var(--doc-primary)',\n }}\n onClick={handleApply}\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/components/dialogs/TablePropertiesDialog.tsx"],"names":["overlayStyle","dialogStyle","headerStyle","bodyStyle","rowStyle","labelStyle","inputStyle","selectStyle","footerStyle","btnStyle","TablePropertiesDialog","isOpen","onClose","onApply","currentProps","width","setWidth","useState","widthType","setWidthType","justification","setJustification","useEffect","handleApply","useCallback","props","handleKeyDown","e","jsx","jsxs"],"mappings":"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","file":"TablePropertiesDialog-EMUEVYB3.js","sourcesContent":["/**\n * Table Properties Dialog\n *\n * Modal for editing table-level settings:\n * - Preferred width (twips or percentage)\n * - Alignment (left, center, right)\n */\n\nimport React, { useState, useCallback, useEffect } from 'react';\nimport type { CSSProperties } from 'react';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface TableProperties {\n width?: number | null;\n widthType?: string | null;\n justification?: 'left' | 'center' | 'right' | null;\n}\n\nexport interface TablePropertiesDialogProps {\n isOpen: boolean;\n onClose: () => void;\n onApply: (props: TableProperties) => void;\n currentProps?: {\n width?: number;\n widthType?: string;\n justification?: string;\n };\n}\n\n// ============================================================================\n// STYLES\n// ============================================================================\n\nconst overlayStyle: CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 10000,\n};\n\nconst dialogStyle: CSSProperties = {\n backgroundColor: 'white',\n borderRadius: 8,\n boxShadow: '0 4px 20px rgba(0, 0, 0, 0.15)',\n minWidth: 360,\n maxWidth: 440,\n width: '100%',\n margin: 20,\n};\n\nconst headerStyle: CSSProperties = {\n padding: '16px 20px 12px',\n borderBottom: '1px solid var(--doc-border)',\n fontSize: 16,\n fontWeight: 600,\n};\n\nconst bodyStyle: CSSProperties = {\n padding: '16px 20px',\n display: 'flex',\n flexDirection: 'column',\n gap: 12,\n};\n\nconst rowStyle: CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: 12,\n};\n\nconst labelStyle: CSSProperties = {\n width: 80,\n fontSize: 13,\n color: 'var(--doc-text-muted)',\n};\n\nconst inputStyle: CSSProperties = {\n flex: 1,\n padding: '6px 8px',\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n fontSize: 13,\n};\n\nconst selectStyle: CSSProperties = {\n ...inputStyle,\n};\n\nconst footerStyle: CSSProperties = {\n padding: '12px 20px 16px',\n borderTop: '1px solid var(--doc-border)',\n display: 'flex',\n justifyContent: 'flex-end',\n gap: 8,\n};\n\nconst btnStyle: CSSProperties = {\n padding: '6px 16px',\n fontSize: 13,\n border: '1px solid var(--doc-border)',\n borderRadius: 4,\n cursor: 'pointer',\n};\n\n// ============================================================================\n// COMPONENT\n// ============================================================================\n\nexport function TablePropertiesDialog({\n isOpen,\n onClose,\n onApply,\n currentProps,\n}: TablePropertiesDialogProps): React.ReactElement | null {\n const [width, setWidth] = useState<number>(currentProps?.width || 0);\n const [widthType, setWidthType] = useState<string>(currentProps?.widthType || 'auto');\n const [justification, setJustification] = useState<string>(currentProps?.justification || 'left');\n\n useEffect(() => {\n if (isOpen) {\n setWidth(currentProps?.width || 0);\n setWidthType(currentProps?.widthType || 'auto');\n setJustification(currentProps?.justification || 'left');\n }\n }, [isOpen, currentProps]);\n\n const handleApply = useCallback(() => {\n const props: TableProperties = {};\n if (widthType === 'auto') {\n props.width = null;\n props.widthType = 'auto';\n } else {\n props.width = width;\n props.widthType = widthType;\n }\n props.justification = justification as 'left' | 'center' | 'right';\n onApply(props);\n onClose();\n }, [width, widthType, justification, onApply, onClose]);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (e.key === 'Escape') onClose();\n if (e.key === 'Enter') handleApply();\n },\n [onClose, handleApply]\n );\n\n if (!isOpen) return null;\n\n return (\n <div style={overlayStyle} onClick={onClose} onKeyDown={handleKeyDown}>\n <div\n style={dialogStyle}\n onClick={(e) => e.stopPropagation()}\n role=\"dialog\"\n aria-label=\"Table properties\"\n >\n <div style={headerStyle}>Table Properties</div>\n\n <div style={bodyStyle}>\n {/* Width type */}\n <div style={rowStyle}>\n <label style={labelStyle}>Width type</label>\n <select\n style={selectStyle}\n value={widthType}\n onChange={(e) => setWidthType(e.target.value)}\n >\n <option value=\"auto\">Auto</option>\n <option value=\"dxa\">Fixed (twips)</option>\n <option value=\"pct\">Percentage</option>\n </select>\n </div>\n\n {/* Width value */}\n {widthType !== 'auto' && (\n <div style={rowStyle}>\n <label style={labelStyle}>Width</label>\n <input\n type=\"number\"\n style={inputStyle}\n min={0}\n step={widthType === 'pct' ? 5 : 100}\n value={width}\n onChange={(e) => setWidth(Number(e.target.value) || 0)}\n />\n <span style={{ fontSize: 11, color: 'var(--doc-text-muted)' }}>\n {widthType === 'pct' ? '(50ths of %)' : 'tw'}\n </span>\n </div>\n )}\n\n {/* Alignment */}\n <div style={rowStyle}>\n <label style={labelStyle}>Alignment</label>\n <select\n style={selectStyle}\n value={justification}\n onChange={(e) => setJustification(e.target.value)}\n >\n <option value=\"left\">Left</option>\n <option value=\"center\">Center</option>\n <option value=\"right\">Right</option>\n </select>\n </div>\n </div>\n\n <div style={footerStyle}>\n <button type=\"button\" style={btnStyle} onClick={onClose}>\n Cancel\n </button>\n <button\n type=\"button\"\n style={{\n ...btnStyle,\n backgroundColor: 'var(--doc-primary)',\n color: 'white',\n borderColor: 'var(--doc-primary)',\n }}\n onClick={handleApply}\n >\n Apply\n </button>\n </div>\n </div>\n </div>\n );\n}\n"]}