@depup/base44__vite-plugin 1.0.4-depup.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (167) hide show
  1. package/README.md +34 -0
  2. package/changes.json +22 -0
  3. package/compat/agents.cjs +13 -0
  4. package/compat/base44Client.cjs +6 -0
  5. package/compat/entities.cjs +25 -0
  6. package/compat/functions.cjs +9 -0
  7. package/compat/integrations.cjs +9 -0
  8. package/dist/ErrorOverlay.d.ts +12 -0
  9. package/dist/ErrorOverlay.d.ts.map +1 -0
  10. package/dist/ErrorOverlay.js +51 -0
  11. package/dist/ErrorOverlay.js.map +1 -0
  12. package/dist/bridge.d.ts +8 -0
  13. package/dist/bridge.d.ts.map +1 -0
  14. package/dist/bridge.js +8 -0
  15. package/dist/bridge.js.map +1 -0
  16. package/dist/capabilities/inline-edit/controller.d.ts +3 -0
  17. package/dist/capabilities/inline-edit/controller.d.ts.map +1 -0
  18. package/dist/capabilities/inline-edit/controller.js +203 -0
  19. package/dist/capabilities/inline-edit/controller.js.map +1 -0
  20. package/dist/capabilities/inline-edit/dom-utils.d.ts +7 -0
  21. package/dist/capabilities/inline-edit/dom-utils.d.ts.map +1 -0
  22. package/dist/capabilities/inline-edit/dom-utils.js +59 -0
  23. package/dist/capabilities/inline-edit/dom-utils.js.map +1 -0
  24. package/dist/capabilities/inline-edit/index.d.ts +3 -0
  25. package/dist/capabilities/inline-edit/index.d.ts.map +1 -0
  26. package/dist/capabilities/inline-edit/index.js +2 -0
  27. package/dist/capabilities/inline-edit/index.js.map +1 -0
  28. package/dist/capabilities/inline-edit/types.d.ts +29 -0
  29. package/dist/capabilities/inline-edit/types.d.ts.map +1 -0
  30. package/dist/capabilities/inline-edit/types.js +2 -0
  31. package/dist/capabilities/inline-edit/types.js.map +1 -0
  32. package/dist/consts.d.ts +11 -0
  33. package/dist/consts.d.ts.map +1 -0
  34. package/dist/consts.js +11 -0
  35. package/dist/consts.js.map +1 -0
  36. package/dist/error-overlay-plugin.d.ts +3 -0
  37. package/dist/error-overlay-plugin.d.ts.map +1 -0
  38. package/dist/error-overlay-plugin.js +15 -0
  39. package/dist/error-overlay-plugin.js.map +1 -0
  40. package/dist/html-injections-plugin.d.ts +8 -0
  41. package/dist/html-injections-plugin.d.ts.map +1 -0
  42. package/dist/html-injections-plugin.js +132 -0
  43. package/dist/html-injections-plugin.js.map +1 -0
  44. package/dist/index.d.ts +9 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +158 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/injections/layer-dropdown/consts.d.ts +20 -0
  49. package/dist/injections/layer-dropdown/consts.d.ts.map +1 -0
  50. package/dist/injections/layer-dropdown/consts.js +41 -0
  51. package/dist/injections/layer-dropdown/consts.js.map +1 -0
  52. package/dist/injections/layer-dropdown/controller.d.ts +4 -0
  53. package/dist/injections/layer-dropdown/controller.d.ts.map +1 -0
  54. package/dist/injections/layer-dropdown/controller.js +88 -0
  55. package/dist/injections/layer-dropdown/controller.js.map +1 -0
  56. package/dist/injections/layer-dropdown/dropdown-ui.d.ts +13 -0
  57. package/dist/injections/layer-dropdown/dropdown-ui.d.ts.map +1 -0
  58. package/dist/injections/layer-dropdown/dropdown-ui.js +186 -0
  59. package/dist/injections/layer-dropdown/dropdown-ui.js.map +1 -0
  60. package/dist/injections/layer-dropdown/types.d.ts +26 -0
  61. package/dist/injections/layer-dropdown/types.d.ts.map +1 -0
  62. package/dist/injections/layer-dropdown/types.js +3 -0
  63. package/dist/injections/layer-dropdown/types.js.map +1 -0
  64. package/dist/injections/layer-dropdown/utils.d.ts +25 -0
  65. package/dist/injections/layer-dropdown/utils.d.ts.map +1 -0
  66. package/dist/injections/layer-dropdown/utils.js +143 -0
  67. package/dist/injections/layer-dropdown/utils.js.map +1 -0
  68. package/dist/injections/navigation-notifier.d.ts +2 -0
  69. package/dist/injections/navigation-notifier.d.ts.map +1 -0
  70. package/dist/injections/navigation-notifier.js +34 -0
  71. package/dist/injections/navigation-notifier.js.map +1 -0
  72. package/dist/injections/sandbox-hmr-notifier.d.ts +2 -0
  73. package/dist/injections/sandbox-hmr-notifier.d.ts.map +1 -0
  74. package/dist/injections/sandbox-hmr-notifier.js +10 -0
  75. package/dist/injections/sandbox-hmr-notifier.js.map +1 -0
  76. package/dist/injections/sandbox-mount-observer.d.ts +2 -0
  77. package/dist/injections/sandbox-mount-observer.d.ts.map +1 -0
  78. package/dist/injections/sandbox-mount-observer.js +18 -0
  79. package/dist/injections/sandbox-mount-observer.js.map +1 -0
  80. package/dist/injections/unhandled-errors-handlers.d.ts +2 -0
  81. package/dist/injections/unhandled-errors-handlers.d.ts.map +1 -0
  82. package/dist/injections/unhandled-errors-handlers.js +93 -0
  83. package/dist/injections/unhandled-errors-handlers.js.map +1 -0
  84. package/dist/injections/utils.d.ts +65 -0
  85. package/dist/injections/utils.d.ts.map +1 -0
  86. package/dist/injections/utils.js +186 -0
  87. package/dist/injections/utils.js.map +1 -0
  88. package/dist/injections/visual-edit-agent.d.ts +2 -0
  89. package/dist/injections/visual-edit-agent.d.ts.map +1 -0
  90. package/dist/injections/visual-edit-agent.js +583 -0
  91. package/dist/injections/visual-edit-agent.js.map +1 -0
  92. package/dist/jsx-processor.d.ts +17 -0
  93. package/dist/jsx-processor.d.ts.map +1 -0
  94. package/dist/jsx-processor.js +129 -0
  95. package/dist/jsx-processor.js.map +1 -0
  96. package/dist/jsx-utils.d.ts +16 -0
  97. package/dist/jsx-utils.d.ts.map +1 -0
  98. package/dist/jsx-utils.js +98 -0
  99. package/dist/jsx-utils.js.map +1 -0
  100. package/dist/processors/collection-id-processor.d.ts +20 -0
  101. package/dist/processors/collection-id-processor.d.ts.map +1 -0
  102. package/dist/processors/collection-id-processor.js +182 -0
  103. package/dist/processors/collection-id-processor.js.map +1 -0
  104. package/dist/processors/collection-item-field-processor.d.ts +39 -0
  105. package/dist/processors/collection-item-field-processor.d.ts.map +1 -0
  106. package/dist/processors/collection-item-field-processor.js +289 -0
  107. package/dist/processors/collection-item-field-processor.js.map +1 -0
  108. package/dist/processors/collection-item-id-processor.d.ts +12 -0
  109. package/dist/processors/collection-item-id-processor.d.ts.map +1 -0
  110. package/dist/processors/collection-item-id-processor.js +50 -0
  111. package/dist/processors/collection-item-id-processor.js.map +1 -0
  112. package/dist/processors/static-array-processor.d.ts +28 -0
  113. package/dist/processors/static-array-processor.d.ts.map +1 -0
  114. package/dist/processors/static-array-processor.js +173 -0
  115. package/dist/processors/static-array-processor.js.map +1 -0
  116. package/dist/processors/utils/collection-tracing-utils.d.ts +36 -0
  117. package/dist/processors/utils/collection-tracing-utils.d.ts.map +1 -0
  118. package/dist/processors/utils/collection-tracing-utils.js +390 -0
  119. package/dist/processors/utils/collection-tracing-utils.js.map +1 -0
  120. package/dist/processors/utils/shared-utils.d.ts +96 -0
  121. package/dist/processors/utils/shared-utils.d.ts.map +1 -0
  122. package/dist/processors/utils/shared-utils.js +600 -0
  123. package/dist/processors/utils/shared-utils.js.map +1 -0
  124. package/dist/statics/index.mjs +16 -0
  125. package/dist/statics/index.mjs.map +1 -0
  126. package/dist/utils.d.ts +2 -0
  127. package/dist/utils.d.ts.map +1 -0
  128. package/dist/utils.js +22 -0
  129. package/dist/utils.js.map +1 -0
  130. package/dist/visual-edit-plugin.d.ts +3 -0
  131. package/dist/visual-edit-plugin.d.ts.map +1 -0
  132. package/dist/visual-edit-plugin.js +100 -0
  133. package/dist/visual-edit-plugin.js.map +1 -0
  134. package/package.json +75 -0
  135. package/src/ErrorOverlay.ts +71 -0
  136. package/src/bridge.ts +8 -0
  137. package/src/capabilities/inline-edit/controller.ts +254 -0
  138. package/src/capabilities/inline-edit/dom-utils.ts +58 -0
  139. package/src/capabilities/inline-edit/index.ts +2 -0
  140. package/src/capabilities/inline-edit/types.ts +35 -0
  141. package/src/consts.ts +11 -0
  142. package/src/error-overlay-plugin.ts +19 -0
  143. package/src/html-injections-plugin.ts +166 -0
  144. package/src/index.ts +225 -0
  145. package/src/injections/layer-dropdown/LAYERS.md +258 -0
  146. package/src/injections/layer-dropdown/consts.ts +51 -0
  147. package/src/injections/layer-dropdown/controller.ts +109 -0
  148. package/src/injections/layer-dropdown/dropdown-ui.ts +242 -0
  149. package/src/injections/layer-dropdown/types.ts +30 -0
  150. package/src/injections/layer-dropdown/utils.ts +175 -0
  151. package/src/injections/navigation-notifier.ts +43 -0
  152. package/src/injections/sandbox-hmr-notifier.ts +8 -0
  153. package/src/injections/sandbox-mount-observer.ts +25 -0
  154. package/src/injections/unhandled-errors-handlers.ts +114 -0
  155. package/src/injections/utils.ts +208 -0
  156. package/src/injections/visual-edit-agent.ts +706 -0
  157. package/src/jsx-processor.ts +169 -0
  158. package/src/jsx-utils.ts +131 -0
  159. package/src/processors/collection-id-processor.ts +261 -0
  160. package/src/processors/collection-item-field-processor.ts +439 -0
  161. package/src/processors/collection-item-id-processor.ts +69 -0
  162. package/src/processors/static-array-processor.ts +260 -0
  163. package/src/processors/utils/collection-tracing-utils.ts +507 -0
  164. package/src/processors/utils/shared-utils.ts +785 -0
  165. package/src/utils.ts +27 -0
  166. package/src/visual-edit-plugin.md +358 -0
  167. package/src/visual-edit-plugin.ts +110 -0
package/README.md ADDED
@@ -0,0 +1,34 @@
1
+ # @depup/base44__vite-plugin
2
+
3
+ > Dependency-bumped version of [@base44/vite-plugin](https://www.npmjs.com/package/@base44/vite-plugin)
4
+
5
+ Generated by [DepUp](https://github.com/depup/npm) -- all production
6
+ dependencies bumped to latest versions.
7
+
8
+ ## Installation
9
+
10
+ ```bash
11
+ npm install @depup/base44__vite-plugin
12
+ ```
13
+
14
+ | Field | Value |
15
+ |-------|-------|
16
+ | Original | [@base44/vite-plugin](https://www.npmjs.com/package/@base44/vite-plugin) @ 1.0.4 |
17
+ | Processed | 2026-03-17 |
18
+ | Smoke test | failed |
19
+ | Deps updated | 4 |
20
+
21
+ ## Dependency Changes
22
+
23
+ | Dependency | From | To |
24
+ |------------|------|-----|
25
+ | @babel/generator | ^7.28.5 | ^7.29.1 |
26
+ | @babel/parser | ^7.28.5 | ^7.29.2 |
27
+ | @babel/traverse | ^7.28.5 | ^7.29.0 |
28
+ | @babel/types | ^7.28.5 | ^7.29.0 |
29
+
30
+ ---
31
+
32
+ Source: https://github.com/depup/npm | Original: https://www.npmjs.com/package/@base44/vite-plugin
33
+
34
+ License inherited from the original package.
package/changes.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "bumped": {
3
+ "@babel/generator": {
4
+ "from": "^7.28.5",
5
+ "to": "^7.29.1"
6
+ },
7
+ "@babel/parser": {
8
+ "from": "^7.28.5",
9
+ "to": "^7.29.2"
10
+ },
11
+ "@babel/traverse": {
12
+ "from": "^7.28.5",
13
+ "to": "^7.29.0"
14
+ },
15
+ "@babel/types": {
16
+ "from": "^7.28.5",
17
+ "to": "^7.29.0"
18
+ }
19
+ },
20
+ "timestamp": "2026-03-17T16:30:48.610Z",
21
+ "totalUpdated": 4
22
+ }
@@ -0,0 +1,13 @@
1
+ const { base44 } = require("./base44Client.cjs");
2
+
3
+ module.exports = new Proxy(
4
+ {},
5
+ {
6
+ get: (_, prop) => {
7
+ if (prop === "agentSDK" || prop === "default") {
8
+ return base44.agents;
9
+ }
10
+ return base44.agents[prop];
11
+ },
12
+ }
13
+ );
@@ -0,0 +1,6 @@
1
+ const { createClient } = require('@base44/sdk');
2
+
3
+ module.exports.base44 = createClient({
4
+ appId: process.env.VITE_BASE44_APP_ID,
5
+ serverUrl: process.env.VITE_BASE44_BACKEND_URL
6
+ });
@@ -0,0 +1,25 @@
1
+ const { base44 } = require('./base44Client.cjs');
2
+
3
+ module.exports = new Proxy({}, {
4
+ get: (_, entityName) => {
5
+ return new Proxy({}, {
6
+ get: (_, prop) => {
7
+ if (entityName === 'User') {
8
+ if (prop === 'me') {
9
+ return base44.auth.me;
10
+ }
11
+ if (prop === 'loginWithRedirect' || prop === 'login') {
12
+ return base44.auth.loginWithRedirect;
13
+ }
14
+ if (prop === 'logout') {
15
+ return base44.auth.logout;
16
+ }
17
+ if (prop === 'updateMyUserData') {
18
+ return base44.auth.updateMe;
19
+ }
20
+ }
21
+ return base44.entities[entityName][prop];
22
+ }
23
+ });
24
+ }
25
+ });
@@ -0,0 +1,9 @@
1
+ const { base44 } = require('./base44Client.cjs');
2
+
3
+ module.exports = new Proxy({}, {
4
+ get: (_, prop) => {
5
+ return (...args) => {
6
+ return base44.functions.invoke(prop, ...args);
7
+ }
8
+ }
9
+ });
@@ -0,0 +1,9 @@
1
+ const { base44 } = require('./base44Client.cjs');
2
+
3
+ module.exports = new Proxy({}, {
4
+ get: (_, prop) => {
5
+ return (...args) => {
6
+ return base44.integrations.Core[prop](...args);
7
+ }
8
+ }
9
+ });
@@ -0,0 +1,12 @@
1
+ declare const HTMLElement: {
2
+ new (): {};
3
+ };
4
+ export declare class ErrorOverlay extends HTMLElement {
5
+ static getOverlayHTML(): string;
6
+ close(): void;
7
+ static sendErrorToParent(error: Error, title: string, details: string | undefined, componentName: string | undefined): void;
8
+ constructor(error: Error);
9
+ }
10
+ export declare const errorOverlayCode: string;
11
+ export {};
12
+ //# sourceMappingURL=ErrorOverlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorOverlay.d.ts","sourceRoot":"","sources":["../src/ErrorOverlay.ts"],"names":[],"mappings":"AAGA,QAAA,MAAQ,WAAW;;CAA0B,CAAC;AAE9C,qBAAa,YAAa,SAAQ,WAAW;IAC3C,MAAM,CAAC,cAAc;IAMrB,KAAK;IAIL,MAAM,CAAC,iBAAiB,CACtB,KAAK,EAAE,KAAK,EACZ,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,aAAa,EAAE,MAAM,GAAG,SAAS;gBAqBvB,KAAK,EAAE,KAAK;CAuBzB;AAGD,eAAO,MAAM,gBAAgB,QAG5B,CAAC"}
@@ -0,0 +1,51 @@
1
+ /// <reference lib="dom" />
2
+ // Make HTMLElement available in non-browser environments
3
+ const { HTMLElement = class {
4
+ } } = globalThis;
5
+ export class ErrorOverlay extends HTMLElement {
6
+ static getOverlayHTML() {
7
+ return `
8
+ <div>
9
+ </div>
10
+ `;
11
+ }
12
+ close() {
13
+ this.parentNode?.removeChild(this);
14
+ }
15
+ static sendErrorToParent(error, title, details, componentName) {
16
+ // Send error to parent using framewire
17
+ if (globalThis.window?.parent) {
18
+ try {
19
+ globalThis.window.parent?.postMessage({
20
+ type: "app_error",
21
+ error: { title, details, componentName, originalError: error, stack: error?.stack },
22
+ }, "*");
23
+ }
24
+ catch (error) {
25
+ console.warn("Failed to send error to iframe parent:", error?.message);
26
+ }
27
+ }
28
+ }
29
+ constructor(error) {
30
+ super();
31
+ const stack = error?.stack;
32
+ let componentName = stack?.match(/at\s+(\w+)\s+\(eval/)?.[1];
33
+ if (componentName === "eval") {
34
+ componentName = undefined;
35
+ }
36
+ const title = componentName
37
+ ? `in ${componentName}: ${error.message?.toString()}`
38
+ : error.message?.toString();
39
+ const details = error?.stack;
40
+ // Call editor frame with the error (via post message)
41
+ ErrorOverlay.sendErrorToParent(error, title, details, componentName);
42
+ // Create the overlay element using HTML template
43
+ const overlay = document.createElement("div");
44
+ overlay.innerHTML = ErrorOverlay.getOverlayHTML();
45
+ // Add to DOM
46
+ document.body.appendChild(overlay);
47
+ }
48
+ }
49
+ // vite/react-plugin transpiles classes with _SomeClass, so we need to replace all _ErrorOverlay with ErrorOverlay
50
+ export const errorOverlayCode = ErrorOverlay.toString().replaceAll("_ErrorOverlay", "ErrorOverlay");
51
+ //# sourceMappingURL=ErrorOverlay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorOverlay.js","sourceRoot":"","sources":["../src/ErrorOverlay.ts"],"names":[],"mappings":"AAAA,2BAA2B;AAE3B,yDAAyD;AACzD,MAAM,EAAE,WAAW,GAAG;CAAQ,EAAE,GAAG,UAAU,CAAC;AAE9C,MAAM,OAAO,YAAa,SAAQ,WAAW;IAC3C,MAAM,CAAC,cAAc;QACnB,OAAO;;;KAGN,CAAC;IACJ,CAAC;IACD,KAAK;QACF,IAAY,CAAC,UAAU,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,iBAAiB,CACtB,KAAY,EACZ,KAAa,EACb,OAA2B,EAC3B,aAAiC;QAEjC,uCAAuC;QACvC,IAAI,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,WAAW,CACnC;oBACE,IAAI,EAAE,WAAW;oBACjB,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE;iBACpF,EACD,GAAG,CACJ,CAAC;YACJ,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,IAAI,CACV,wCAAwC,EACvC,KAAe,EAAE,OAAO,CAC1B,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,YAAY,KAAY;QACtB,KAAK,EAAE,CAAC;QAER,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,CAAC;QAC3B,IAAI,aAAa,GAAG,KAAK,EAAE,KAAK,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7D,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,aAAa,GAAG,SAAS,CAAC;QAC5B,CAAC;QACD,MAAM,KAAK,GAAG,aAAa;YACzB,CAAC,CAAC,MAAM,aAAa,KAAK,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;YACrD,CAAC,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,KAAK,EAAE,KAAK,CAAC;QAE7B,sDAAsD;QACtD,YAAY,CAAC,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAErE,iDAAiD;QACjD,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9C,OAAO,CAAC,SAAS,GAAG,YAAY,CAAC,cAAc,EAAE,CAAC;QAElD,aAAa;QACb,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;CACF;AAED,kHAAkH;AAClH,MAAM,CAAC,MAAM,gBAAgB,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,UAAU,CAChE,eAAe,EACf,cAAc,CACf,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Sandbox bridge — bundled via tsup into dist/statics/index.mjs.
3
+ * Only the visual edit agent needs the bridge (for local dev iteration
4
+ * via ?sandbox-bridge=local). All other features load as individual
5
+ * sync script tags from node_modules.
6
+ */
7
+ export { setupVisualEditAgent } from "./injections/visual-edit-agent.js";
8
+ //# sourceMappingURL=bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.d.ts","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC"}
package/dist/bridge.js ADDED
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Sandbox bridge — bundled via tsup into dist/statics/index.mjs.
3
+ * Only the visual edit agent needs the bridge (for local dev iteration
4
+ * via ?sandbox-bridge=local). All other features load as individual
5
+ * sync script tags from node_modules.
6
+ */
7
+ export { setupVisualEditAgent } from "./injections/visual-edit-agent.js";
8
+ //# sourceMappingURL=bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bridge.js","sourceRoot":"","sources":["../src/bridge.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,mCAAmC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { InlineEditHost, InlineEditController } from "./types.js";
2
+ export declare function createInlineEditController(host: InlineEditHost): InlineEditController;
3
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../src/capabilities/inline-edit/controller.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAYvE,wBAAgB,0BAA0B,CACxC,IAAI,EAAE,cAAc,GACnB,oBAAoB,CA+OtB"}
@@ -0,0 +1,203 @@
1
+ import { injectFocusOutlineCSS, removeFocusOutlineCSS, selectText, shouldEnterInlineEditingMode, isStaticArrayTextElement, } from "./dom-utils.js";
2
+ import { PLUGIN_ELEMENT_ATTR } from "../../injections/utils.js";
3
+ const DEBOUNCE_MS = 500;
4
+ export function createInlineEditController(host) {
5
+ let currentEditingElement = null;
6
+ let debouncedSendTimeout = null;
7
+ let enabled = false;
8
+ const listenerAbortControllers = new WeakMap();
9
+ // --- Private helpers ---
10
+ const repositionOverlays = () => {
11
+ const selectedId = host.getSelectedElementId();
12
+ if (!selectedId)
13
+ return;
14
+ const elements = host.findElementsById(selectedId);
15
+ const overlays = host.getSelectedOverlays();
16
+ overlays.forEach((overlay, i) => {
17
+ if (i < elements.length && elements[i]) {
18
+ host.positionOverlay(overlay, elements[i]);
19
+ }
20
+ });
21
+ };
22
+ const reportEdit = (element) => {
23
+ const originalContent = element.dataset.originalTextContent;
24
+ const newContent = element.textContent;
25
+ const svgElement = element;
26
+ const rect = element.getBoundingClientRect();
27
+ const message = {
28
+ type: "inline-edit",
29
+ elementInfo: {
30
+ tagName: element.tagName,
31
+ classes: svgElement.className?.baseVal ||
32
+ element.className ||
33
+ "",
34
+ visualSelectorId: host.getSelectedElementId(),
35
+ content: newContent,
36
+ dataSourceLocation: element.dataset.sourceLocation,
37
+ isDynamicContent: element.dataset.dynamicContent === "true",
38
+ linenumber: element.dataset.linenumber,
39
+ filename: element.dataset.filename,
40
+ position: {
41
+ top: rect.top,
42
+ left: rect.left,
43
+ right: rect.right,
44
+ bottom: rect.bottom,
45
+ width: rect.width,
46
+ height: rect.height,
47
+ centerX: rect.left + rect.width / 2,
48
+ centerY: rect.top + rect.height / 2,
49
+ },
50
+ },
51
+ originalContent,
52
+ newContent,
53
+ };
54
+ if (isStaticArrayTextElement(element)) {
55
+ message.arrIndex = element.dataset.arrIndex;
56
+ message.arrVariableName = element.dataset.arrVariableName;
57
+ message.arrField = element.dataset.arrField;
58
+ }
59
+ window.parent.postMessage(message, "*");
60
+ element.dataset.originalTextContent = newContent || "";
61
+ };
62
+ const debouncedReport = (element) => {
63
+ if (debouncedSendTimeout)
64
+ clearTimeout(debouncedSendTimeout);
65
+ debouncedSendTimeout = setTimeout(() => reportEdit(element), DEBOUNCE_MS);
66
+ };
67
+ const onTextInput = (element) => {
68
+ repositionOverlays();
69
+ debouncedReport(element);
70
+ };
71
+ const handleInputEvent = function () {
72
+ onTextInput(this);
73
+ };
74
+ const makeEditable = (element) => {
75
+ injectFocusOutlineCSS();
76
+ element.dataset.originalTextContent = element.textContent || "";
77
+ element.dataset.originalCursor = element.style.cursor;
78
+ element.contentEditable = "true";
79
+ element.setAttribute(PLUGIN_ELEMENT_ATTR, "true");
80
+ const abortController = new AbortController();
81
+ listenerAbortControllers.set(element, abortController);
82
+ element.addEventListener("input", handleInputEvent, {
83
+ signal: abortController.signal,
84
+ });
85
+ element.style.cursor = "text";
86
+ selectText(element);
87
+ setTimeout(() => {
88
+ if (element.isConnected) {
89
+ element.focus();
90
+ }
91
+ }, 0);
92
+ };
93
+ const makeNonEditable = (element) => {
94
+ const abortController = listenerAbortControllers.get(element);
95
+ if (abortController) {
96
+ abortController.abort();
97
+ listenerAbortControllers.delete(element);
98
+ }
99
+ if (!element.isConnected)
100
+ return;
101
+ removeFocusOutlineCSS();
102
+ element.contentEditable = "false";
103
+ element.removeAttribute(PLUGIN_ELEMENT_ATTR);
104
+ delete element.dataset.originalTextContent;
105
+ if (element.dataset.originalCursor !== undefined) {
106
+ element.style.cursor = element.dataset.originalCursor;
107
+ delete element.dataset.originalCursor;
108
+ }
109
+ };
110
+ // --- Public API ---
111
+ return {
112
+ get enabled() {
113
+ return enabled;
114
+ },
115
+ set enabled(value) {
116
+ enabled = value;
117
+ },
118
+ isEditing() {
119
+ return currentEditingElement !== null;
120
+ },
121
+ getCurrentElement() {
122
+ return currentEditingElement;
123
+ },
124
+ canEdit(element) {
125
+ return shouldEnterInlineEditingMode(element);
126
+ },
127
+ startEditing(element) {
128
+ currentEditingElement = element;
129
+ host.getSelectedOverlays().forEach((o) => {
130
+ o.style.display = "none";
131
+ });
132
+ makeEditable(element);
133
+ window.parent.postMessage({
134
+ type: "content-editing-started",
135
+ visualSelectorId: host.getSelectedElementId(),
136
+ }, "*");
137
+ },
138
+ stopEditing() {
139
+ if (!currentEditingElement)
140
+ return;
141
+ if (debouncedSendTimeout) {
142
+ clearTimeout(debouncedSendTimeout);
143
+ debouncedSendTimeout = null;
144
+ }
145
+ const element = currentEditingElement;
146
+ makeNonEditable(element);
147
+ host.getSelectedOverlays().forEach((o) => {
148
+ o.style.display = "";
149
+ });
150
+ repositionOverlays();
151
+ window.parent.postMessage({
152
+ type: "content-editing-ended",
153
+ visualSelectorId: host.getSelectedElementId(),
154
+ }, "*");
155
+ currentEditingElement = null;
156
+ },
157
+ markElementsSelected(elements) {
158
+ elements.forEach((el) => {
159
+ if (el instanceof HTMLElement) {
160
+ el.dataset.selected = "true";
161
+ }
162
+ });
163
+ },
164
+ clearSelectedMarks(elementId) {
165
+ if (!elementId)
166
+ return;
167
+ host.findElementsById(elementId).forEach((el) => {
168
+ if (el instanceof HTMLElement) {
169
+ delete el.dataset.selected;
170
+ }
171
+ });
172
+ },
173
+ handleToggleMessage(data) {
174
+ if (!enabled)
175
+ return;
176
+ const elements = host.findElementsById(data.dataSourceLocation);
177
+ if (elements.length === 0 || !(elements[0] instanceof HTMLElement))
178
+ return;
179
+ const element = elements[0];
180
+ if (data.inlineEditingMode) {
181
+ if (!shouldEnterInlineEditingMode(element))
182
+ return;
183
+ // Select the element first if not already selected
184
+ if (host.getSelectedElementId() !== data.dataSourceLocation) {
185
+ this.stopEditing();
186
+ host.clearSelection();
187
+ this.markElementsSelected(elements);
188
+ host.createSelectionOverlays(elements, data.dataSourceLocation);
189
+ }
190
+ this.startEditing(element);
191
+ }
192
+ else {
193
+ if (currentEditingElement === element) {
194
+ this.stopEditing();
195
+ }
196
+ }
197
+ },
198
+ cleanup() {
199
+ this.stopEditing();
200
+ },
201
+ };
202
+ }
203
+ //# sourceMappingURL=controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../../src/capabilities/inline-edit/controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare const isStaticArrayTextElement: (element: HTMLElement) => boolean;
2
+ export declare const injectFocusOutlineCSS: () => void;
3
+ export declare const removeFocusOutlineCSS: () => void;
4
+ export declare const selectText: (element: HTMLElement) => void;
5
+ export declare const isEditableTextElement: (element: Element) => boolean;
6
+ export declare const shouldEnterInlineEditingMode: (element: Element) => boolean;
7
+ //# sourceMappingURL=dom-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom-utils.d.ts","sourceRoot":"","sources":["../../../src/capabilities/inline-edit/dom-utils.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,wBAAwB,GAAI,SAAS,WAAW,KAAG,OAE/D,CAAC;AAUF,eAAO,MAAM,qBAAqB,YAWjC,CAAC;AAEF,eAAO,MAAM,qBAAqB,YAEjC,CAAC;AAEF,eAAO,MAAM,UAAU,GAAI,SAAS,WAAW,SAM9C,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,SAAS,OAAO,KAAG,OAMxD,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,SAAS,OAAO,KAAG,OAK/D,CAAC"}
@@ -0,0 +1,59 @@
1
+ const FOCUS_STYLE_ID = "visual-edit-focus-styles";
2
+ const EDITABLE_TAGS = [
3
+ "div", "p", "h1", "h2", "h3", "h4", "h5", "h6",
4
+ "span", "li", "td", "a", "button", "label",
5
+ ];
6
+ export const isStaticArrayTextElement = (element) => {
7
+ return !!element.dataset.arrField;
8
+ };
9
+ const passesStructuralChecks = (element) => {
10
+ if (!EDITABLE_TAGS.includes(element.tagName.toLowerCase()))
11
+ return false;
12
+ if (!element.textContent?.trim())
13
+ return false;
14
+ if (element.querySelector("img, video, canvas, svg"))
15
+ return false;
16
+ if (element.children?.length > 0)
17
+ return false;
18
+ return true;
19
+ };
20
+ export const injectFocusOutlineCSS = () => {
21
+ if (document.getElementById(FOCUS_STYLE_ID))
22
+ return;
23
+ const style = document.createElement("style");
24
+ style.id = FOCUS_STYLE_ID;
25
+ style.textContent = `
26
+ [data-selected="true"][contenteditable="true"]:focus {
27
+ outline: none !important;
28
+ }
29
+ `;
30
+ document.head.appendChild(style);
31
+ };
32
+ export const removeFocusOutlineCSS = () => {
33
+ document.getElementById(FOCUS_STYLE_ID)?.remove();
34
+ };
35
+ export const selectText = (element) => {
36
+ const range = document.createRange();
37
+ range.selectNodeContents(element);
38
+ const selection = window.getSelection();
39
+ selection?.removeAllRanges();
40
+ selection?.addRange(range);
41
+ };
42
+ export const isEditableTextElement = (element) => {
43
+ if (!(element instanceof HTMLElement))
44
+ return false;
45
+ if (!passesStructuralChecks(element))
46
+ return false;
47
+ if (isStaticArrayTextElement(element))
48
+ return true;
49
+ if (element.dataset.dynamicContent === "true")
50
+ return false;
51
+ return true;
52
+ };
53
+ export const shouldEnterInlineEditingMode = (element) => {
54
+ if (!(element instanceof HTMLElement) || element.dataset.selected !== "true") {
55
+ return false;
56
+ }
57
+ return isEditableTextElement(element);
58
+ };
59
+ //# sourceMappingURL=dom-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom-utils.js","sourceRoot":"","sources":["../../../src/capabilities/inline-edit/dom-utils.ts"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,0BAA0B,CAAC;AAElD,MAAM,aAAa,GAAG;IACpB,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI;IAC9C,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,OAAO;CAC3C,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,OAAoB,EAAW,EAAE;IACxE,OAAO,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC;AACpC,CAAC,CAAC;AAEF,MAAM,sBAAsB,GAAG,CAAC,OAAoB,EAAW,EAAE;IAC/D,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACzE,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,EAAE;QAAE,OAAO,KAAK,CAAC;IAC/C,IAAI,OAAO,CAAC,aAAa,CAAC,yBAAyB,CAAC;QAAE,OAAO,KAAK,CAAC;IACnE,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,IAAI,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC;QAAE,OAAO;IAEpD,MAAM,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAC9C,KAAK,CAAC,EAAE,GAAG,cAAc,CAAC;IAC1B,KAAK,CAAC,WAAW,GAAG;;;;GAInB,CAAC;IACF,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AACnC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,EAAE;IACxC,QAAQ,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;AACpD,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAoB,EAAE,EAAE;IACjD,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACrC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,YAAY,EAAE,CAAC;IACxC,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,SAAS,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAgB,EAAW,EAAE;IACjE,IAAI,CAAC,CAAC,OAAO,YAAY,WAAW,CAAC;QAAE,OAAO,KAAK,CAAC;IACpD,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACnD,IAAI,wBAAwB,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACnD,IAAI,OAAO,CAAC,OAAO,CAAC,cAAc,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,OAAgB,EAAW,EAAE;IACxE,IAAI,CAAC,CAAC,OAAO,YAAY,WAAW,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;QAC7E,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;AACxC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { createInlineEditController } from "./controller.js";
2
+ export type { CollectionInfo, InlineEditController, InlineEditHost } from "./types.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/capabilities/inline-edit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAC7D,YAAY,EAAE,cAAc,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { createInlineEditController } from "./controller.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/capabilities/inline-edit/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,29 @@
1
+ export interface CollectionInfo {
2
+ id: string;
3
+ references: string[];
4
+ }
5
+ export interface InlineEditHost {
6
+ findElementsById(id: string | null): Element[];
7
+ getSelectedElementId(): string | null;
8
+ getSelectedOverlays(): HTMLDivElement[];
9
+ positionOverlay(overlay: HTMLDivElement, element: Element, isSelected?: boolean): void;
10
+ clearSelection(): void;
11
+ createSelectionOverlays(elements: Element[], elementId: string): void;
12
+ }
13
+ export interface ToggleInlineEditData {
14
+ dataSourceLocation: string;
15
+ inlineEditingMode: boolean;
16
+ }
17
+ export interface InlineEditController {
18
+ enabled: boolean;
19
+ isEditing(): boolean;
20
+ getCurrentElement(): HTMLElement | null;
21
+ canEdit(element: Element): boolean;
22
+ startEditing(element: HTMLElement): void;
23
+ stopEditing(): void;
24
+ markElementsSelected(elements: Element[]): void;
25
+ clearSelectedMarks(elementId: string | null): void;
26
+ handleToggleMessage(data: ToggleInlineEditData): void;
27
+ cleanup(): void;
28
+ }
29
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/capabilities/inline-edit/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC7B,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,EAAE,CAAC;IAC/C,oBAAoB,IAAI,MAAM,GAAG,IAAI,CAAC;IACtC,mBAAmB,IAAI,cAAc,EAAE,CAAC;IACxC,eAAe,CACb,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,OAAO,EAChB,UAAU,CAAC,EAAE,OAAO,GACnB,IAAI,CAAC;IACR,cAAc,IAAI,IAAI,CAAC;IACvB,uBAAuB,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;CACvE;AAED,MAAM,WAAW,oBAAoB;IACnC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,OAAO,CAAC;CAC5B;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,IAAI,OAAO,CAAC;IACrB,iBAAiB,IAAI,WAAW,GAAG,IAAI,CAAC;IACxC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC;IACnC,YAAY,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACzC,WAAW,IAAI,IAAI,CAAC;IACpB,oBAAoB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAChD,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAAC;IACnD,mBAAmB,CAAC,IAAI,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACtD,OAAO,IAAI,IAAI,CAAC;CACjB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/capabilities/inline-edit/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,11 @@
1
+ export declare const DATA_COLLECTION_ID = "data-collection-id";
2
+ export declare const DATA_COLLECTION_ITEM_ID = "data-collection-item-id";
3
+ export declare const DATA_COLLECTION_ITEM_FIELD = "data-collection-item-field";
4
+ export declare const DATA_COLLECTION_REFERENCE = "data-collection-reference";
5
+ export declare const DATA_ARR_INDEX = "data-arr-index";
6
+ export declare const DATA_ARR_VARIABLE_NAME = "data-arr-variable-name";
7
+ export declare const DATA_ARR_FIELD = "data-arr-field";
8
+ export declare const ALLOWED_CUSTOM_COMPONENTS: string[];
9
+ export declare const MAX_JSX_DEPTH = 10;
10
+ export declare const EXCLUDED_FIELDS: string[];
11
+ //# sourceMappingURL=consts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,uBAAuB,CAAC;AACvD,eAAO,MAAM,uBAAuB,4BAA4B,CAAC;AACjE,eAAO,MAAM,0BAA0B,+BAA+B,CAAC;AACvE,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AACrE,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C,eAAO,MAAM,sBAAsB,2BAA2B,CAAC;AAC/D,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAE/C,eAAO,MAAM,yBAAyB,UAAoB,CAAC;AAC3D,eAAO,MAAM,aAAa,KAAK,CAAC;AAChC,eAAO,MAAM,eAAe,UAAyB,CAAC"}
package/dist/consts.js ADDED
@@ -0,0 +1,11 @@
1
+ export const DATA_COLLECTION_ID = "data-collection-id";
2
+ export const DATA_COLLECTION_ITEM_ID = "data-collection-item-id";
3
+ export const DATA_COLLECTION_ITEM_FIELD = "data-collection-item-field";
4
+ export const DATA_COLLECTION_REFERENCE = "data-collection-reference";
5
+ export const DATA_ARR_INDEX = "data-arr-index";
6
+ export const DATA_ARR_VARIABLE_NAME = "data-arr-variable-name";
7
+ export const DATA_ARR_FIELD = "data-arr-field";
8
+ export const ALLOWED_CUSTOM_COMPONENTS = ["Image", "Link"];
9
+ export const MAX_JSX_DEPTH = 10;
10
+ export const EXCLUDED_FIELDS = ["children", "length"];
11
+ //# sourceMappingURL=consts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.js","sourceRoot":"","sources":["../src/consts.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,uBAAuB,GAAG,yBAAyB,CAAC;AACjE,MAAM,CAAC,MAAM,0BAA0B,GAAG,4BAA4B,CAAC;AACvE,MAAM,CAAC,MAAM,yBAAyB,GAAG,2BAA2B,CAAC;AACrE,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAC/C,MAAM,CAAC,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AAC/D,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAE/C,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,EAAE,CAAC;AAChC,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Plugin } from "vite";
2
+ export declare function errorOverlayPlugin(): Plugin;
3
+ //# sourceMappingURL=error-overlay-plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-overlay-plugin.d.ts","sourceRoot":"","sources":["../src/error-overlay-plugin.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAEnC,wBAAgB,kBAAkB,IAc3B,MAAM,CACZ"}