@sonicjs-cms/core 2.0.10 → 2.0.11

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 (67) hide show
  1. package/dist/{chunk-LW33AOBF.js → chunk-5RKQB2JG.js} +6 -222
  2. package/dist/chunk-5RKQB2JG.js.map +1 -0
  3. package/dist/chunk-AMSTLQFI.cjs +801 -0
  4. package/dist/chunk-AMSTLQFI.cjs.map +1 -0
  5. package/dist/{chunk-Z4H6DBVF.js → chunk-CLLJFZ5U.js} +1965 -1043
  6. package/dist/chunk-CLLJFZ5U.js.map +1 -0
  7. package/dist/{chunk-MXJJN4IA.js → chunk-DU7JJZN7.js} +5 -4
  8. package/dist/chunk-DU7JJZN7.js.map +1 -0
  9. package/dist/{chunk-YHG45LMU.js → chunk-FYWJMETG.js} +20 -4
  10. package/dist/chunk-FYWJMETG.js.map +1 -0
  11. package/dist/chunk-I5ZPYKNX.js +787 -0
  12. package/dist/chunk-I5ZPYKNX.js.map +1 -0
  13. package/dist/{chunk-Q7SL7U43.cjs → chunk-IM2LGCYD.cjs} +2114 -1192
  14. package/dist/chunk-IM2LGCYD.cjs.map +1 -0
  15. package/dist/{chunk-3PHG75W4.cjs → chunk-NNXPAPUD.cjs} +5 -4
  16. package/dist/chunk-NNXPAPUD.cjs.map +1 -0
  17. package/dist/{chunk-FTMKKKNH.js → chunk-QNWYQZ55.js} +3 -3
  18. package/dist/{chunk-FTMKKKNH.js.map → chunk-QNWYQZ55.js.map} +1 -1
  19. package/dist/{chunk-COBUPOMD.js → chunk-T7IYBGGO.cjs} +5 -770
  20. package/dist/chunk-T7IYBGGO.cjs.map +1 -0
  21. package/dist/{chunk-HXA5QSI3.cjs → chunk-X2VADBA4.cjs} +22 -6
  22. package/dist/chunk-X2VADBA4.cjs.map +1 -0
  23. package/dist/{chunk-MU3MR2QR.cjs → chunk-YU6QFFI4.cjs} +5 -222
  24. package/dist/chunk-YU6QFFI4.cjs.map +1 -0
  25. package/dist/{chunk-CAP6QQR2.cjs → chunk-ZMSYKV62.cjs} +5 -5
  26. package/dist/{chunk-CAP6QQR2.cjs.map → chunk-ZMSYKV62.cjs.map} +1 -1
  27. package/dist/{chunk-NBDPIRQS.cjs → chunk-ZPMFT2JW.js} +4 -786
  28. package/dist/chunk-ZPMFT2JW.js.map +1 -0
  29. package/dist/index.cjs +475 -104
  30. package/dist/index.cjs.map +1 -1
  31. package/dist/index.js +385 -10
  32. package/dist/index.js.map +1 -1
  33. package/dist/middleware.cjs +24 -23
  34. package/dist/middleware.js +3 -2
  35. package/dist/migrations-IHERIQVD.js +4 -0
  36. package/dist/migrations-IHERIQVD.js.map +1 -0
  37. package/dist/migrations-POFD5KNG.cjs +13 -0
  38. package/dist/migrations-POFD5KNG.cjs.map +1 -0
  39. package/dist/routes.cjs +25 -28
  40. package/dist/routes.js +6 -5
  41. package/dist/services.cjs +19 -18
  42. package/dist/services.js +2 -1
  43. package/dist/templates.cjs +17 -21
  44. package/dist/templates.js +2 -2
  45. package/dist/utils.cjs +11 -11
  46. package/dist/utils.js +1 -1
  47. package/migrations/001_initial_schema.sql +2 -2
  48. package/migrations/007_demo_login_plugin.sql +1 -1
  49. package/migrations/020_add_email_plugin.sql +22 -0
  50. package/migrations/021_add_magic_link_auth_plugin.sql +42 -0
  51. package/migrations/021_add_otp_login.sql +42 -0
  52. package/migrations/022_add_tinymce_plugin.sql +25 -0
  53. package/migrations/023_add_mdxeditor_plugin.sql +25 -0
  54. package/migrations/024_add_quill_editor_plugin.sql +25 -0
  55. package/migrations/025_add_easymde_plugin.sql +25 -0
  56. package/package.json +3 -2
  57. package/dist/chunk-3PHG75W4.cjs.map +0 -1
  58. package/dist/chunk-COBUPOMD.js.map +0 -1
  59. package/dist/chunk-HXA5QSI3.cjs.map +0 -1
  60. package/dist/chunk-LW33AOBF.js.map +0 -1
  61. package/dist/chunk-MU3MR2QR.cjs.map +0 -1
  62. package/dist/chunk-MXJJN4IA.js.map +0 -1
  63. package/dist/chunk-NBDPIRQS.cjs.map +0 -1
  64. package/dist/chunk-Q7SL7U43.cjs.map +0 -1
  65. package/dist/chunk-YHG45LMU.js.map +0 -1
  66. package/dist/chunk-Z4H6DBVF.js.map +0 -1
  67. package/migrations/002_faq_plugin.sql +0 -86
package/dist/index.cjs CHANGED
@@ -1,17 +1,19 @@
1
1
  'use strict';
2
2
 
3
- var chunkQ7SL7U43_cjs = require('./chunk-Q7SL7U43.cjs');
3
+ var chunkIM2LGCYD_cjs = require('./chunk-IM2LGCYD.cjs');
4
4
  var chunkDOR2IU73_cjs = require('./chunk-DOR2IU73.cjs');
5
- var chunkHXA5QSI3_cjs = require('./chunk-HXA5QSI3.cjs');
6
- var chunkNBDPIRQS_cjs = require('./chunk-NBDPIRQS.cjs');
7
- var chunkCAP6QQR2_cjs = require('./chunk-CAP6QQR2.cjs');
8
- var chunkMU3MR2QR_cjs = require('./chunk-MU3MR2QR.cjs');
5
+ var chunkX2VADBA4_cjs = require('./chunk-X2VADBA4.cjs');
6
+ var chunkAMSTLQFI_cjs = require('./chunk-AMSTLQFI.cjs');
7
+ var chunkT7IYBGGO_cjs = require('./chunk-T7IYBGGO.cjs');
8
+ var chunkZMSYKV62_cjs = require('./chunk-ZMSYKV62.cjs');
9
+ var chunkYU6QFFI4_cjs = require('./chunk-YU6QFFI4.cjs');
9
10
  var chunkF5ESJXI2_cjs = require('./chunk-F5ESJXI2.cjs');
10
- var chunk3PHG75W4_cjs = require('./chunk-3PHG75W4.cjs');
11
+ var chunkNNXPAPUD_cjs = require('./chunk-NNXPAPUD.cjs');
11
12
  var chunkRCQ2HIQD_cjs = require('./chunk-RCQ2HIQD.cjs');
12
13
  var chunkKYGRJCZM_cjs = require('./chunk-KYGRJCZM.cjs');
13
14
  require('./chunk-IGJUBJBW.cjs');
14
15
  var hono = require('hono');
16
+ var html = require('hono/html');
15
17
  var d1 = require('drizzle-orm/d1');
16
18
 
17
19
  // src/plugins/core-plugins/database-tools-plugin/services/database-service.ts
@@ -229,7 +231,7 @@ var DatabaseToolsService = class {
229
231
  };
230
232
 
231
233
  // src/templates/pages/admin-database-table.template.ts
232
- chunkMU3MR2QR_cjs.init_admin_layout_catalyst_template();
234
+ chunkYU6QFFI4_cjs.init_admin_layout_catalyst_template();
233
235
  function renderDatabaseTablePage(data) {
234
236
  const totalPages = Math.ceil(data.totalRows / data.pageSize);
235
237
  const startRow = (data.currentPage - 1) * data.pageSize + 1;
@@ -478,7 +480,7 @@ function renderDatabaseTablePage(data) {
478
480
  user: data.user,
479
481
  content: pageContent
480
482
  };
481
- return chunkMU3MR2QR_cjs.renderAdminLayoutCatalyst(layoutData);
483
+ return chunkYU6QFFI4_cjs.renderAdminLayoutCatalyst(layoutData);
482
484
  }
483
485
  function generatePageNumbers(currentPage, totalPages) {
484
486
  const pages = [];
@@ -553,7 +555,7 @@ function formatCellValue(value) {
553
555
  // src/plugins/core-plugins/database-tools-plugin/admin-routes.ts
554
556
  function createDatabaseToolsAdminRoutes() {
555
557
  const router2 = new hono.Hono();
556
- router2.use("*", chunkHXA5QSI3_cjs.requireAuth());
558
+ router2.use("*", chunkX2VADBA4_cjs.requireAuth());
557
559
  router2.get("/api/stats", async (c) => {
558
560
  try {
559
561
  const user = c.get("user");
@@ -733,18 +735,386 @@ function createDatabaseToolsAdminRoutes() {
733
735
  });
734
736
  return router2;
735
737
  }
738
+ function createEmailPlugin() {
739
+ const builder = chunkIM2LGCYD_cjs.PluginBuilder.create({
740
+ name: "email",
741
+ version: "1.0.0-beta.1",
742
+ description: "Send transactional emails using Resend"
743
+ });
744
+ builder.metadata({
745
+ author: {
746
+ name: "SonicJS Team",
747
+ email: "team@sonicjs.com"
748
+ },
749
+ license: "MIT",
750
+ compatibility: "^2.0.0"
751
+ });
752
+ const emailRoutes = new hono.Hono();
753
+ emailRoutes.get("/settings", async (c) => {
754
+ const user = c.get("user");
755
+ const db = c.env.DB;
756
+ const plugin = await db.prepare(`
757
+ SELECT settings FROM plugins WHERE id = 'email'
758
+ `).first();
759
+ const settings = plugin?.settings ? JSON.parse(plugin.settings) : {};
760
+ const contentHTML = html.html`
761
+ <div class="p-8">
762
+ <!-- Header -->
763
+ <div class="mb-8">
764
+ <h1 class="text-3xl font-bold text-zinc-950 dark:text-white mb-2">Email Settings</h1>
765
+ <p class="text-zinc-600 dark:text-zinc-400">Configure Resend API for sending transactional emails</p>
766
+ </div>
767
+
768
+ <!-- Settings Form -->
769
+ <div class="max-w-3xl">
770
+ <!-- Main Settings Card -->
771
+ <div class="rounded-xl bg-white dark:bg-zinc-900 shadow-sm ring-1 ring-zinc-950/5 dark:ring-white/10 p-6 mb-6">
772
+ <h2 class="text-xl font-semibold text-zinc-950 dark:text-white mb-4">Resend Configuration</h2>
773
+
774
+ <form id="emailSettingsForm" class="space-y-6">
775
+ <!-- API Key -->
776
+ <div>
777
+ <label for="apiKey" class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">
778
+ Resend API Key <span class="text-red-500">*</span>
779
+ </label>
780
+ <input
781
+ type="password"
782
+ id="apiKey"
783
+ name="apiKey"
784
+ value="${settings.apiKey || ""}"
785
+ class="w-full rounded-lg bg-white dark:bg-white/5 px-3 py-2 text-sm text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 placeholder:text-zinc-500 dark:placeholder:text-zinc-400 focus:ring-2 focus:ring-inset focus:ring-indigo-500 dark:focus:ring-indigo-400"
786
+ placeholder="re_..."
787
+ required
788
+ />
789
+ <p class="text-xs text-zinc-500 dark:text-zinc-400 mt-1">
790
+ Get your API key from <a href="https://resend.com/api-keys" target="_blank" class="text-indigo-600 dark:text-indigo-400 hover:underline">resend.com/api-keys</a>
791
+ </p>
792
+ </div>
793
+
794
+ <!-- From Email -->
795
+ <div>
796
+ <label for="fromEmail" class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">
797
+ From Email <span class="text-red-500">*</span>
798
+ </label>
799
+ <input
800
+ type="email"
801
+ id="fromEmail"
802
+ name="fromEmail"
803
+ value="${settings.fromEmail || ""}"
804
+ class="w-full rounded-lg bg-white dark:bg-white/5 px-3 py-2 text-sm text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 placeholder:text-zinc-500 dark:placeholder:text-zinc-400 focus:ring-2 focus:ring-inset focus:ring-indigo-500 dark:focus:ring-indigo-400"
805
+ placeholder="noreply@yourdomain.com"
806
+ required
807
+ />
808
+ <p class="text-xs text-zinc-500 dark:text-zinc-400 mt-1">
809
+ Must be a verified domain in Resend
810
+ </p>
811
+ </div>
812
+
813
+ <!-- From Name -->
814
+ <div>
815
+ <label for="fromName" class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">
816
+ From Name <span class="text-red-500">*</span>
817
+ </label>
818
+ <input
819
+ type="text"
820
+ id="fromName"
821
+ name="fromName"
822
+ value="${settings.fromName || ""}"
823
+ class="w-full rounded-lg bg-white dark:bg-white/5 px-3 py-2 text-sm text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 placeholder:text-zinc-500 dark:placeholder:text-zinc-400 focus:ring-2 focus:ring-inset focus:ring-indigo-500 dark:focus:ring-indigo-400"
824
+ placeholder="Your App Name"
825
+ required
826
+ />
827
+ </div>
828
+
829
+ <!-- Reply To -->
830
+ <div>
831
+ <label for="replyTo" class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">
832
+ Reply-To Email
833
+ </label>
834
+ <input
835
+ type="email"
836
+ id="replyTo"
837
+ name="replyTo"
838
+ value="${settings.replyTo || ""}"
839
+ class="w-full rounded-lg bg-white dark:bg-white/5 px-3 py-2 text-sm text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 placeholder:text-zinc-500 dark:placeholder:text-zinc-400 focus:ring-2 focus:ring-inset focus:ring-indigo-500 dark:focus:ring-indigo-400"
840
+ placeholder="support@yourdomain.com"
841
+ />
842
+ </div>
843
+
844
+ <!-- Logo URL -->
845
+ <div>
846
+ <label for="logoUrl" class="block text-sm font-medium text-zinc-950 dark:text-white mb-2">
847
+ Logo URL
848
+ </label>
849
+ <input
850
+ type="url"
851
+ id="logoUrl"
852
+ name="logoUrl"
853
+ value="${settings.logoUrl || ""}"
854
+ class="w-full rounded-lg bg-white dark:bg-white/5 px-3 py-2 text-sm text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 placeholder:text-zinc-500 dark:placeholder:text-zinc-400 focus:ring-2 focus:ring-inset focus:ring-indigo-500 dark:focus:ring-indigo-400"
855
+ placeholder="https://yourdomain.com/logo.png"
856
+ />
857
+ <p class="text-xs text-zinc-500 dark:text-zinc-400 mt-1">
858
+ Logo to display in email templates
859
+ </p>
860
+ </div>
861
+
862
+ <!-- Action Buttons -->
863
+ <div class="flex gap-3 pt-4">
864
+ <button
865
+ type="submit"
866
+ class="inline-flex items-center justify-center rounded-lg bg-zinc-950 dark:bg-white px-3.5 py-2.5 text-sm font-semibold text-white dark:text-zinc-950 hover:bg-zinc-800 dark:hover:bg-zinc-100 transition-colors shadow-sm"
867
+ >
868
+ Save Settings
869
+ </button>
870
+ <button
871
+ type="button"
872
+ id="testEmailBtn"
873
+ class="inline-flex items-center justify-center rounded-lg bg-white dark:bg-zinc-800 px-3.5 py-2.5 text-sm font-semibold text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 hover:bg-zinc-50 dark:hover:bg-zinc-700 transition-colors shadow-sm"
874
+ >
875
+ Send Test Email
876
+ </button>
877
+ <button
878
+ type="button"
879
+ id="resetBtn"
880
+ class="inline-flex items-center justify-center rounded-lg bg-white dark:bg-zinc-800 px-3.5 py-2.5 text-sm font-semibold text-zinc-950 dark:text-white ring-1 ring-inset ring-zinc-950/10 dark:ring-white/10 hover:bg-zinc-50 dark:hover:bg-zinc-700 transition-colors shadow-sm"
881
+ >
882
+ Reset
883
+ </button>
884
+ </div>
885
+ </form>
886
+ </div>
887
+
888
+ <!-- Status Message -->
889
+ <div id="statusMessage" class="hidden rounded-xl p-4 mb-6"></div>
890
+
891
+ <!-- Info Card -->
892
+ <div class="rounded-xl bg-indigo-50 dark:bg-indigo-950/30 ring-1 ring-indigo-100 dark:ring-indigo-900/50 p-6">
893
+ <h3 class="font-semibold text-indigo-900 dark:text-indigo-300 mb-3">
894
+ 📧 Email Templates Included
895
+ </h3>
896
+ <ul class="text-sm text-indigo-800 dark:text-indigo-200 space-y-2">
897
+ <li>✓ Registration confirmation</li>
898
+ <li>✓ Email verification</li>
899
+ <li>✓ Password reset</li>
900
+ <li>✓ One-time code (2FA)</li>
901
+ </ul>
902
+ <p class="text-xs text-indigo-700 dark:text-indigo-300 mt-4">
903
+ Templates are code-based and can be customized by editing the plugin files.
904
+ </p>
905
+ </div>
906
+ </div>
907
+ </div>
908
+
909
+ <script>
910
+ // Form submission handler
911
+ document.getElementById('emailSettingsForm').addEventListener('submit', async (e) => {
912
+ e.preventDefault()
913
+ const formData = new FormData(e.target)
914
+ const data = Object.fromEntries(formData.entries())
915
+
916
+ const statusEl = document.getElementById('statusMessage')
917
+
918
+ try {
919
+ const response = await fetch('/admin/plugins/email/settings', {
920
+ method: 'POST',
921
+ headers: { 'Content-Type': 'application/json' },
922
+ body: JSON.stringify(data)
923
+ })
924
+
925
+ if (response.ok) {
926
+ statusEl.className = 'rounded-xl bg-green-50 dark:bg-green-950/30 ring-1 ring-green-100 dark:ring-green-900/50 p-4 mb-6 text-green-900 dark:text-green-200'
927
+ statusEl.innerHTML = '✅ Settings saved successfully!'
928
+ statusEl.classList.remove('hidden')
929
+ setTimeout(() => statusEl.classList.add('hidden'), 3000)
930
+ } else {
931
+ throw new Error('Failed to save settings')
932
+ }
933
+ } catch (error) {
934
+ statusEl.className = 'rounded-xl bg-red-50 dark:bg-red-950/30 ring-1 ring-red-100 dark:ring-red-900/50 p-4 mb-6 text-red-900 dark:text-red-200'
935
+ statusEl.innerHTML = '❌ Failed to save settings. Please try again.'
936
+ statusEl.classList.remove('hidden')
937
+ }
938
+ })
939
+
940
+ // Test email handler
941
+ document.getElementById('testEmailBtn').addEventListener('click', async () => {
942
+ // Prompt for destination email
943
+ const toEmail = prompt('Enter destination email address for test:')
944
+ if (!toEmail) return
945
+
946
+ // Basic email validation
947
+ if (!toEmail.match(/^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/)) {
948
+ alert('Please enter a valid email address')
949
+ return
950
+ }
951
+
952
+ const statusEl = document.getElementById('statusMessage')
953
+
954
+ statusEl.className = 'rounded-xl bg-indigo-50 dark:bg-indigo-950/30 ring-1 ring-indigo-100 dark:ring-indigo-900/50 p-4 mb-6 text-indigo-900 dark:text-indigo-200'
955
+ statusEl.innerHTML = \`📧 Sending test email to \${toEmail}...\`
956
+ statusEl.classList.remove('hidden')
957
+
958
+ try {
959
+ const response = await fetch('/admin/plugins/email/test', {
960
+ method: 'POST',
961
+ headers: { 'Content-Type': 'application/json' },
962
+ body: JSON.stringify({ toEmail })
963
+ })
964
+
965
+ const data = await response.json()
966
+
967
+ if (response.ok) {
968
+ statusEl.className = 'rounded-xl bg-green-50 dark:bg-green-950/30 ring-1 ring-green-100 dark:ring-green-900/50 p-4 mb-6 text-green-900 dark:text-green-200'
969
+ statusEl.innerHTML = \`✅ \${data.message || 'Test email sent! Check your inbox.'}\`
970
+ } else {
971
+ statusEl.className = 'rounded-xl bg-red-50 dark:bg-red-950/30 ring-1 ring-red-100 dark:ring-red-900/50 p-4 mb-6 text-red-900 dark:text-red-200'
972
+ statusEl.innerHTML = \`❌ \${data.error || 'Failed to send test email. Check your settings.'}\`
973
+ }
974
+ } catch (error) {
975
+ statusEl.className = 'rounded-xl bg-red-50 dark:bg-red-950/30 ring-1 ring-red-100 dark:ring-red-900/50 p-4 mb-6 text-red-900 dark:text-red-200'
976
+ statusEl.innerHTML = '❌ Network error. Please try again.'
977
+ }
978
+ })
979
+
980
+ // Reset button handler
981
+ document.getElementById('resetBtn').addEventListener('click', () => {
982
+ document.getElementById('emailSettingsForm').reset()
983
+ })
984
+ </script>
985
+ `;
986
+ return c.html(
987
+ chunkYU6QFFI4_cjs.renderAdminLayout({
988
+ title: "Email Settings",
989
+ content: contentHTML,
990
+ user,
991
+ currentPath: "/admin/plugins/email/settings"
992
+ })
993
+ );
994
+ });
995
+ emailRoutes.post("/settings", async (c) => {
996
+ try {
997
+ const body = await c.req.json();
998
+ const db = c.env.DB;
999
+ await db.prepare(`
1000
+ UPDATE plugins
1001
+ SET settings = ?,
1002
+ updated_at = unixepoch()
1003
+ WHERE id = 'email'
1004
+ `).bind(JSON.stringify(body)).run();
1005
+ return c.json({ success: true });
1006
+ } catch (error) {
1007
+ console.error("Error saving email settings:", error);
1008
+ return c.json({ success: false, error: "Failed to save settings" }, 500);
1009
+ }
1010
+ });
1011
+ emailRoutes.post("/test", async (c) => {
1012
+ try {
1013
+ const db = c.env.DB;
1014
+ const body = await c.req.json();
1015
+ const plugin = await db.prepare(`
1016
+ SELECT settings FROM plugins WHERE id = 'email'
1017
+ `).first();
1018
+ if (!plugin?.settings) {
1019
+ return c.json({
1020
+ success: false,
1021
+ error: "Email settings not configured. Please save your settings first."
1022
+ }, 400);
1023
+ }
1024
+ const settings = JSON.parse(plugin.settings);
1025
+ if (!settings.apiKey || !settings.fromEmail || !settings.fromName) {
1026
+ return c.json({
1027
+ success: false,
1028
+ error: "Missing required settings. Please configure API Key, From Email, and From Name."
1029
+ }, 400);
1030
+ }
1031
+ const toEmail = body.toEmail || settings.fromEmail;
1032
+ if (!toEmail.match(/^[^\s@]+@[^\s@]+\.[^\s@]+$/)) {
1033
+ return c.json({
1034
+ success: false,
1035
+ error: "Invalid email address format"
1036
+ }, 400);
1037
+ }
1038
+ const response = await fetch("https://api.resend.com/emails", {
1039
+ method: "POST",
1040
+ headers: {
1041
+ "Authorization": `Bearer ${settings.apiKey}`,
1042
+ "Content-Type": "application/json"
1043
+ },
1044
+ body: JSON.stringify({
1045
+ from: `${settings.fromName} <${settings.fromEmail}>`,
1046
+ to: [toEmail],
1047
+ subject: "Test Email from SonicJS",
1048
+ html: `
1049
+ <div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto;">
1050
+ <h1 style="color: #667eea;">Test Email Successful! \u{1F389}</h1>
1051
+ <p>This is a test email from your SonicJS Email plugin.</p>
1052
+ <p><strong>Configuration:</strong></p>
1053
+ <ul>
1054
+ <li>From: ${settings.fromName} &lt;${settings.fromEmail}&gt;</li>
1055
+ <li>Reply-To: ${settings.replyTo || "Not set"}</li>
1056
+ <li>Sent at: ${(/* @__PURE__ */ new Date()).toISOString()}</li>
1057
+ </ul>
1058
+ <p>Your email settings are working correctly!</p>
1059
+ </div>
1060
+ `,
1061
+ reply_to: settings.replyTo || settings.fromEmail
1062
+ })
1063
+ });
1064
+ const data = await response.json();
1065
+ if (!response.ok) {
1066
+ console.error("Resend API error:", data);
1067
+ return c.json({
1068
+ success: false,
1069
+ error: data.message || "Failed to send test email. Check your API key and domain verification."
1070
+ }, response.status);
1071
+ }
1072
+ return c.json({
1073
+ success: true,
1074
+ message: `Test email sent successfully to ${toEmail}`,
1075
+ emailId: data.id
1076
+ });
1077
+ } catch (error) {
1078
+ console.error("Test email error:", error);
1079
+ return c.json({
1080
+ success: false,
1081
+ error: error.message || "An error occurred while sending test email"
1082
+ }, 500);
1083
+ }
1084
+ });
1085
+ builder.addRoute("/admin/plugins/email", emailRoutes, {
1086
+ description: "Email plugin settings",
1087
+ requiresAuth: true,
1088
+ priority: 80
1089
+ });
1090
+ builder.addMenuItem("Email", "/admin/plugins/email/settings", {
1091
+ icon: "envelope",
1092
+ order: 80,
1093
+ permissions: ["email:manage"]
1094
+ });
1095
+ builder.lifecycle({
1096
+ activate: async () => {
1097
+ console.info("\u2705 Email plugin activated");
1098
+ },
1099
+ deactivate: async () => {
1100
+ console.info("\u274C Email plugin deactivated");
1101
+ }
1102
+ });
1103
+ return builder.build();
1104
+ }
1105
+ var emailPlugin = createEmailPlugin();
736
1106
 
737
1107
  // src/app.ts
738
1108
  function createSonicJSApp(config = {}) {
739
1109
  const app = new hono.Hono();
740
- const appVersion = config.version || chunk3PHG75W4_cjs.getCoreVersion();
1110
+ const appVersion = config.version || chunkNNXPAPUD_cjs.getCoreVersion();
741
1111
  const appName = config.name || "SonicJS AI";
742
1112
  app.use("*", async (c, next) => {
743
1113
  c.set("appVersion", appVersion);
744
1114
  await next();
745
1115
  });
746
- app.use("*", chunkHXA5QSI3_cjs.metricsMiddleware());
747
- app.use("*", chunkHXA5QSI3_cjs.bootstrapMiddleware(config));
1116
+ app.use("*", chunkX2VADBA4_cjs.metricsMiddleware());
1117
+ app.use("*", chunkX2VADBA4_cjs.bootstrapMiddleware(config));
748
1118
  if (config.middleware?.beforeAuth) {
749
1119
  for (const middleware of config.middleware.beforeAuth) {
750
1120
  app.use("*", middleware);
@@ -761,20 +1131,25 @@ function createSonicJSApp(config = {}) {
761
1131
  app.use("*", middleware);
762
1132
  }
763
1133
  }
764
- app.route("/api", chunkQ7SL7U43_cjs.api_default);
765
- app.route("/api/media", chunkQ7SL7U43_cjs.api_media_default);
766
- app.route("/api/system", chunkQ7SL7U43_cjs.api_system_default);
767
- app.route("/admin/api", chunkQ7SL7U43_cjs.admin_api_default);
768
- app.route("/admin/dashboard", chunkQ7SL7U43_cjs.router);
769
- app.route("/admin/collections", chunkQ7SL7U43_cjs.adminCollectionsRoutes);
770
- app.route("/admin/settings", chunkQ7SL7U43_cjs.adminSettingsRoutes);
1134
+ app.route("/api", chunkIM2LGCYD_cjs.api_default);
1135
+ app.route("/api/media", chunkIM2LGCYD_cjs.api_media_default);
1136
+ app.route("/api/system", chunkIM2LGCYD_cjs.api_system_default);
1137
+ app.route("/admin/api", chunkIM2LGCYD_cjs.admin_api_default);
1138
+ app.route("/admin/dashboard", chunkIM2LGCYD_cjs.router);
1139
+ app.route("/admin/collections", chunkIM2LGCYD_cjs.adminCollectionsRoutes);
1140
+ app.route("/admin/settings", chunkIM2LGCYD_cjs.adminSettingsRoutes);
771
1141
  app.route("/admin/database-tools", createDatabaseToolsAdminRoutes());
772
- app.route("/admin/content", chunkQ7SL7U43_cjs.admin_content_default);
773
- app.route("/admin/media", chunkQ7SL7U43_cjs.adminMediaRoutes);
774
- app.route("/admin/plugins", chunkQ7SL7U43_cjs.adminPluginRoutes);
775
- app.route("/admin/logs", chunkQ7SL7U43_cjs.adminLogsRoutes);
776
- app.route("/admin", chunkQ7SL7U43_cjs.userRoutes);
777
- app.route("/auth", chunkQ7SL7U43_cjs.auth_default);
1142
+ app.route("/admin/content", chunkIM2LGCYD_cjs.admin_content_default);
1143
+ app.route("/admin/media", chunkIM2LGCYD_cjs.adminMediaRoutes);
1144
+ app.route("/admin/plugins", chunkIM2LGCYD_cjs.adminPluginRoutes);
1145
+ app.route("/admin/logs", chunkIM2LGCYD_cjs.adminLogsRoutes);
1146
+ app.route("/admin", chunkIM2LGCYD_cjs.userRoutes);
1147
+ app.route("/auth", chunkIM2LGCYD_cjs.auth_default);
1148
+ if (emailPlugin.routes && emailPlugin.routes.length > 0) {
1149
+ for (const route of emailPlugin.routes) {
1150
+ app.route(route.path, route.handler);
1151
+ }
1152
+ }
778
1153
  app.get("/files/*", async (c) => {
779
1154
  try {
780
1155
  const url = new URL(c.req.url);
@@ -838,87 +1213,83 @@ function createDb(d1$1) {
838
1213
  }
839
1214
 
840
1215
  // src/index.ts
841
- var VERSION = chunk3PHG75W4_cjs.package_default.version;
1216
+ var VERSION = chunkNNXPAPUD_cjs.package_default.version;
842
1217
 
843
1218
  Object.defineProperty(exports, "ROUTES_INFO", {
844
1219
  enumerable: true,
845
- get: function () { return chunkQ7SL7U43_cjs.ROUTES_INFO; }
1220
+ get: function () { return chunkIM2LGCYD_cjs.ROUTES_INFO; }
846
1221
  });
847
1222
  Object.defineProperty(exports, "adminApiRoutes", {
848
1223
  enumerable: true,
849
- get: function () { return chunkQ7SL7U43_cjs.admin_api_default; }
1224
+ get: function () { return chunkIM2LGCYD_cjs.admin_api_default; }
850
1225
  });
851
1226
  Object.defineProperty(exports, "adminCheckboxRoutes", {
852
1227
  enumerable: true,
853
- get: function () { return chunkQ7SL7U43_cjs.adminCheckboxRoutes; }
1228
+ get: function () { return chunkIM2LGCYD_cjs.adminCheckboxRoutes; }
854
1229
  });
855
1230
  Object.defineProperty(exports, "adminCodeExamplesRoutes", {
856
1231
  enumerable: true,
857
- get: function () { return chunkQ7SL7U43_cjs.admin_code_examples_default; }
1232
+ get: function () { return chunkIM2LGCYD_cjs.admin_code_examples_default; }
858
1233
  });
859
1234
  Object.defineProperty(exports, "adminCollectionsRoutes", {
860
1235
  enumerable: true,
861
- get: function () { return chunkQ7SL7U43_cjs.adminCollectionsRoutes; }
1236
+ get: function () { return chunkIM2LGCYD_cjs.adminCollectionsRoutes; }
862
1237
  });
863
1238
  Object.defineProperty(exports, "adminContentRoutes", {
864
1239
  enumerable: true,
865
- get: function () { return chunkQ7SL7U43_cjs.admin_content_default; }
1240
+ get: function () { return chunkIM2LGCYD_cjs.admin_content_default; }
866
1241
  });
867
1242
  Object.defineProperty(exports, "adminDashboardRoutes", {
868
1243
  enumerable: true,
869
- get: function () { return chunkQ7SL7U43_cjs.router; }
1244
+ get: function () { return chunkIM2LGCYD_cjs.router; }
870
1245
  });
871
1246
  Object.defineProperty(exports, "adminDesignRoutes", {
872
1247
  enumerable: true,
873
- get: function () { return chunkQ7SL7U43_cjs.adminDesignRoutes; }
874
- });
875
- Object.defineProperty(exports, "adminFAQRoutes", {
876
- enumerable: true,
877
- get: function () { return chunkQ7SL7U43_cjs.admin_faq_default; }
1248
+ get: function () { return chunkIM2LGCYD_cjs.adminDesignRoutes; }
878
1249
  });
879
1250
  Object.defineProperty(exports, "adminLogsRoutes", {
880
1251
  enumerable: true,
881
- get: function () { return chunkQ7SL7U43_cjs.adminLogsRoutes; }
1252
+ get: function () { return chunkIM2LGCYD_cjs.adminLogsRoutes; }
882
1253
  });
883
1254
  Object.defineProperty(exports, "adminMediaRoutes", {
884
1255
  enumerable: true,
885
- get: function () { return chunkQ7SL7U43_cjs.adminMediaRoutes; }
1256
+ get: function () { return chunkIM2LGCYD_cjs.adminMediaRoutes; }
886
1257
  });
887
1258
  Object.defineProperty(exports, "adminPluginRoutes", {
888
1259
  enumerable: true,
889
- get: function () { return chunkQ7SL7U43_cjs.adminPluginRoutes; }
1260
+ get: function () { return chunkIM2LGCYD_cjs.adminPluginRoutes; }
890
1261
  });
891
1262
  Object.defineProperty(exports, "adminSettingsRoutes", {
892
1263
  enumerable: true,
893
- get: function () { return chunkQ7SL7U43_cjs.adminSettingsRoutes; }
1264
+ get: function () { return chunkIM2LGCYD_cjs.adminSettingsRoutes; }
894
1265
  });
895
1266
  Object.defineProperty(exports, "adminTestimonialsRoutes", {
896
1267
  enumerable: true,
897
- get: function () { return chunkQ7SL7U43_cjs.admin_testimonials_default; }
1268
+ get: function () { return chunkIM2LGCYD_cjs.admin_testimonials_default; }
898
1269
  });
899
1270
  Object.defineProperty(exports, "adminUsersRoutes", {
900
1271
  enumerable: true,
901
- get: function () { return chunkQ7SL7U43_cjs.userRoutes; }
1272
+ get: function () { return chunkIM2LGCYD_cjs.userRoutes; }
902
1273
  });
903
1274
  Object.defineProperty(exports, "apiContentCrudRoutes", {
904
1275
  enumerable: true,
905
- get: function () { return chunkQ7SL7U43_cjs.api_content_crud_default; }
1276
+ get: function () { return chunkIM2LGCYD_cjs.api_content_crud_default; }
906
1277
  });
907
1278
  Object.defineProperty(exports, "apiMediaRoutes", {
908
1279
  enumerable: true,
909
- get: function () { return chunkQ7SL7U43_cjs.api_media_default; }
1280
+ get: function () { return chunkIM2LGCYD_cjs.api_media_default; }
910
1281
  });
911
1282
  Object.defineProperty(exports, "apiRoutes", {
912
1283
  enumerable: true,
913
- get: function () { return chunkQ7SL7U43_cjs.api_default; }
1284
+ get: function () { return chunkIM2LGCYD_cjs.api_default; }
914
1285
  });
915
1286
  Object.defineProperty(exports, "apiSystemRoutes", {
916
1287
  enumerable: true,
917
- get: function () { return chunkQ7SL7U43_cjs.api_system_default; }
1288
+ get: function () { return chunkIM2LGCYD_cjs.api_system_default; }
918
1289
  });
919
1290
  Object.defineProperty(exports, "authRoutes", {
920
1291
  enumerable: true,
921
- get: function () { return chunkQ7SL7U43_cjs.auth_default; }
1292
+ get: function () { return chunkIM2LGCYD_cjs.auth_default; }
922
1293
  });
923
1294
  Object.defineProperty(exports, "Logger", {
924
1295
  enumerable: true,
@@ -1086,171 +1457,171 @@ Object.defineProperty(exports, "workflowHistory", {
1086
1457
  });
1087
1458
  Object.defineProperty(exports, "AuthManager", {
1088
1459
  enumerable: true,
1089
- get: function () { return chunkHXA5QSI3_cjs.AuthManager; }
1460
+ get: function () { return chunkX2VADBA4_cjs.AuthManager; }
1090
1461
  });
1091
1462
  Object.defineProperty(exports, "PermissionManager", {
1092
1463
  enumerable: true,
1093
- get: function () { return chunkHXA5QSI3_cjs.PermissionManager; }
1464
+ get: function () { return chunkX2VADBA4_cjs.PermissionManager; }
1094
1465
  });
1095
1466
  Object.defineProperty(exports, "bootstrapMiddleware", {
1096
1467
  enumerable: true,
1097
- get: function () { return chunkHXA5QSI3_cjs.bootstrapMiddleware; }
1468
+ get: function () { return chunkX2VADBA4_cjs.bootstrapMiddleware; }
1098
1469
  });
1099
1470
  Object.defineProperty(exports, "cacheHeaders", {
1100
1471
  enumerable: true,
1101
- get: function () { return chunkHXA5QSI3_cjs.cacheHeaders; }
1472
+ get: function () { return chunkX2VADBA4_cjs.cacheHeaders; }
1102
1473
  });
1103
1474
  Object.defineProperty(exports, "compressionMiddleware", {
1104
1475
  enumerable: true,
1105
- get: function () { return chunkHXA5QSI3_cjs.compressionMiddleware; }
1476
+ get: function () { return chunkX2VADBA4_cjs.compressionMiddleware; }
1106
1477
  });
1107
1478
  Object.defineProperty(exports, "detailedLoggingMiddleware", {
1108
1479
  enumerable: true,
1109
- get: function () { return chunkHXA5QSI3_cjs.detailedLoggingMiddleware; }
1480
+ get: function () { return chunkX2VADBA4_cjs.detailedLoggingMiddleware; }
1110
1481
  });
1111
1482
  Object.defineProperty(exports, "getActivePlugins", {
1112
1483
  enumerable: true,
1113
- get: function () { return chunkHXA5QSI3_cjs.getActivePlugins; }
1484
+ get: function () { return chunkX2VADBA4_cjs.getActivePlugins; }
1114
1485
  });
1115
1486
  Object.defineProperty(exports, "isPluginActive", {
1116
1487
  enumerable: true,
1117
- get: function () { return chunkHXA5QSI3_cjs.isPluginActive; }
1488
+ get: function () { return chunkX2VADBA4_cjs.isPluginActive; }
1118
1489
  });
1119
1490
  Object.defineProperty(exports, "logActivity", {
1120
1491
  enumerable: true,
1121
- get: function () { return chunkHXA5QSI3_cjs.logActivity; }
1492
+ get: function () { return chunkX2VADBA4_cjs.logActivity; }
1122
1493
  });
1123
1494
  Object.defineProperty(exports, "loggingMiddleware", {
1124
1495
  enumerable: true,
1125
- get: function () { return chunkHXA5QSI3_cjs.loggingMiddleware; }
1496
+ get: function () { return chunkX2VADBA4_cjs.loggingMiddleware; }
1126
1497
  });
1127
1498
  Object.defineProperty(exports, "optionalAuth", {
1128
1499
  enumerable: true,
1129
- get: function () { return chunkHXA5QSI3_cjs.optionalAuth; }
1500
+ get: function () { return chunkX2VADBA4_cjs.optionalAuth; }
1130
1501
  });
1131
1502
  Object.defineProperty(exports, "performanceLoggingMiddleware", {
1132
1503
  enumerable: true,
1133
- get: function () { return chunkHXA5QSI3_cjs.performanceLoggingMiddleware; }
1504
+ get: function () { return chunkX2VADBA4_cjs.performanceLoggingMiddleware; }
1134
1505
  });
1135
1506
  Object.defineProperty(exports, "requireActivePlugin", {
1136
1507
  enumerable: true,
1137
- get: function () { return chunkHXA5QSI3_cjs.requireActivePlugin; }
1508
+ get: function () { return chunkX2VADBA4_cjs.requireActivePlugin; }
1138
1509
  });
1139
1510
  Object.defineProperty(exports, "requireActivePlugins", {
1140
1511
  enumerable: true,
1141
- get: function () { return chunkHXA5QSI3_cjs.requireActivePlugins; }
1512
+ get: function () { return chunkX2VADBA4_cjs.requireActivePlugins; }
1142
1513
  });
1143
1514
  Object.defineProperty(exports, "requireAnyPermission", {
1144
1515
  enumerable: true,
1145
- get: function () { return chunkHXA5QSI3_cjs.requireAnyPermission; }
1516
+ get: function () { return chunkX2VADBA4_cjs.requireAnyPermission; }
1146
1517
  });
1147
1518
  Object.defineProperty(exports, "requireAuth", {
1148
1519
  enumerable: true,
1149
- get: function () { return chunkHXA5QSI3_cjs.requireAuth; }
1520
+ get: function () { return chunkX2VADBA4_cjs.requireAuth; }
1150
1521
  });
1151
1522
  Object.defineProperty(exports, "requirePermission", {
1152
1523
  enumerable: true,
1153
- get: function () { return chunkHXA5QSI3_cjs.requirePermission; }
1524
+ get: function () { return chunkX2VADBA4_cjs.requirePermission; }
1154
1525
  });
1155
1526
  Object.defineProperty(exports, "requireRole", {
1156
1527
  enumerable: true,
1157
- get: function () { return chunkHXA5QSI3_cjs.requireRole; }
1528
+ get: function () { return chunkX2VADBA4_cjs.requireRole; }
1158
1529
  });
1159
1530
  Object.defineProperty(exports, "securityHeaders", {
1160
1531
  enumerable: true,
1161
- get: function () { return chunkHXA5QSI3_cjs.securityHeaders; }
1532
+ get: function () { return chunkX2VADBA4_cjs.securityHeaders; }
1162
1533
  });
1163
1534
  Object.defineProperty(exports, "securityLoggingMiddleware", {
1164
1535
  enumerable: true,
1165
- get: function () { return chunkHXA5QSI3_cjs.securityLoggingMiddleware; }
1166
- });
1167
- Object.defineProperty(exports, "MigrationService", {
1168
- enumerable: true,
1169
- get: function () { return chunkNBDPIRQS_cjs.MigrationService; }
1536
+ get: function () { return chunkX2VADBA4_cjs.securityLoggingMiddleware; }
1170
1537
  });
1171
1538
  Object.defineProperty(exports, "PluginBootstrapService", {
1172
1539
  enumerable: true,
1173
- get: function () { return chunkNBDPIRQS_cjs.PluginBootstrapService; }
1540
+ get: function () { return chunkAMSTLQFI_cjs.PluginBootstrapService; }
1174
1541
  });
1175
1542
  Object.defineProperty(exports, "PluginServiceClass", {
1176
1543
  enumerable: true,
1177
- get: function () { return chunkNBDPIRQS_cjs.PluginService; }
1544
+ get: function () { return chunkAMSTLQFI_cjs.PluginService; }
1178
1545
  });
1179
1546
  Object.defineProperty(exports, "cleanupRemovedCollections", {
1180
1547
  enumerable: true,
1181
- get: function () { return chunkNBDPIRQS_cjs.cleanupRemovedCollections; }
1548
+ get: function () { return chunkAMSTLQFI_cjs.cleanupRemovedCollections; }
1182
1549
  });
1183
1550
  Object.defineProperty(exports, "fullCollectionSync", {
1184
1551
  enumerable: true,
1185
- get: function () { return chunkNBDPIRQS_cjs.fullCollectionSync; }
1552
+ get: function () { return chunkAMSTLQFI_cjs.fullCollectionSync; }
1186
1553
  });
1187
1554
  Object.defineProperty(exports, "getAvailableCollectionNames", {
1188
1555
  enumerable: true,
1189
- get: function () { return chunkNBDPIRQS_cjs.getAvailableCollectionNames; }
1556
+ get: function () { return chunkAMSTLQFI_cjs.getAvailableCollectionNames; }
1190
1557
  });
1191
1558
  Object.defineProperty(exports, "getManagedCollections", {
1192
1559
  enumerable: true,
1193
- get: function () { return chunkNBDPIRQS_cjs.getManagedCollections; }
1560
+ get: function () { return chunkAMSTLQFI_cjs.getManagedCollections; }
1194
1561
  });
1195
1562
  Object.defineProperty(exports, "isCollectionManaged", {
1196
1563
  enumerable: true,
1197
- get: function () { return chunkNBDPIRQS_cjs.isCollectionManaged; }
1564
+ get: function () { return chunkAMSTLQFI_cjs.isCollectionManaged; }
1198
1565
  });
1199
1566
  Object.defineProperty(exports, "loadCollectionConfig", {
1200
1567
  enumerable: true,
1201
- get: function () { return chunkNBDPIRQS_cjs.loadCollectionConfig; }
1568
+ get: function () { return chunkAMSTLQFI_cjs.loadCollectionConfig; }
1202
1569
  });
1203
1570
  Object.defineProperty(exports, "loadCollectionConfigs", {
1204
1571
  enumerable: true,
1205
- get: function () { return chunkNBDPIRQS_cjs.loadCollectionConfigs; }
1572
+ get: function () { return chunkAMSTLQFI_cjs.loadCollectionConfigs; }
1206
1573
  });
1207
1574
  Object.defineProperty(exports, "registerCollections", {
1208
1575
  enumerable: true,
1209
- get: function () { return chunkNBDPIRQS_cjs.registerCollections; }
1576
+ get: function () { return chunkAMSTLQFI_cjs.registerCollections; }
1210
1577
  });
1211
1578
  Object.defineProperty(exports, "syncCollection", {
1212
1579
  enumerable: true,
1213
- get: function () { return chunkNBDPIRQS_cjs.syncCollection; }
1580
+ get: function () { return chunkAMSTLQFI_cjs.syncCollection; }
1214
1581
  });
1215
1582
  Object.defineProperty(exports, "syncCollections", {
1216
1583
  enumerable: true,
1217
- get: function () { return chunkNBDPIRQS_cjs.syncCollections; }
1584
+ get: function () { return chunkAMSTLQFI_cjs.syncCollections; }
1218
1585
  });
1219
1586
  Object.defineProperty(exports, "validateCollectionConfig", {
1220
1587
  enumerable: true,
1221
- get: function () { return chunkNBDPIRQS_cjs.validateCollectionConfig; }
1588
+ get: function () { return chunkAMSTLQFI_cjs.validateCollectionConfig; }
1589
+ });
1590
+ Object.defineProperty(exports, "MigrationService", {
1591
+ enumerable: true,
1592
+ get: function () { return chunkT7IYBGGO_cjs.MigrationService; }
1222
1593
  });
1223
1594
  Object.defineProperty(exports, "renderFilterBar", {
1224
1595
  enumerable: true,
1225
- get: function () { return chunkCAP6QQR2_cjs.renderFilterBar; }
1596
+ get: function () { return chunkZMSYKV62_cjs.renderFilterBar; }
1226
1597
  });
1227
1598
  Object.defineProperty(exports, "getConfirmationDialogScript", {
1228
1599
  enumerable: true,
1229
- get: function () { return chunkMU3MR2QR_cjs.getConfirmationDialogScript; }
1600
+ get: function () { return chunkYU6QFFI4_cjs.getConfirmationDialogScript; }
1230
1601
  });
1231
1602
  Object.defineProperty(exports, "renderAlert", {
1232
1603
  enumerable: true,
1233
- get: function () { return chunkMU3MR2QR_cjs.renderAlert; }
1604
+ get: function () { return chunkYU6QFFI4_cjs.renderAlert; }
1234
1605
  });
1235
1606
  Object.defineProperty(exports, "renderConfirmationDialog", {
1236
1607
  enumerable: true,
1237
- get: function () { return chunkMU3MR2QR_cjs.renderConfirmationDialog; }
1608
+ get: function () { return chunkYU6QFFI4_cjs.renderConfirmationDialog; }
1238
1609
  });
1239
1610
  Object.defineProperty(exports, "renderForm", {
1240
1611
  enumerable: true,
1241
- get: function () { return chunkMU3MR2QR_cjs.renderForm; }
1612
+ get: function () { return chunkYU6QFFI4_cjs.renderForm; }
1242
1613
  });
1243
1614
  Object.defineProperty(exports, "renderFormField", {
1244
1615
  enumerable: true,
1245
- get: function () { return chunkMU3MR2QR_cjs.renderFormField; }
1616
+ get: function () { return chunkYU6QFFI4_cjs.renderFormField; }
1246
1617
  });
1247
1618
  Object.defineProperty(exports, "renderPagination", {
1248
1619
  enumerable: true,
1249
- get: function () { return chunkMU3MR2QR_cjs.renderPagination; }
1620
+ get: function () { return chunkYU6QFFI4_cjs.renderPagination; }
1250
1621
  });
1251
1622
  Object.defineProperty(exports, "renderTable", {
1252
1623
  enumerable: true,
1253
- get: function () { return chunkMU3MR2QR_cjs.renderTable; }
1624
+ get: function () { return chunkYU6QFFI4_cjs.renderTable; }
1254
1625
  });
1255
1626
  Object.defineProperty(exports, "HookSystemImpl", {
1256
1627
  enumerable: true,
@@ -1278,43 +1649,43 @@ Object.defineProperty(exports, "ScopedHookSystemClass", {
1278
1649
  });
1279
1650
  Object.defineProperty(exports, "QueryFilterBuilder", {
1280
1651
  enumerable: true,
1281
- get: function () { return chunk3PHG75W4_cjs.QueryFilterBuilder; }
1652
+ get: function () { return chunkNNXPAPUD_cjs.QueryFilterBuilder; }
1282
1653
  });
1283
1654
  Object.defineProperty(exports, "SONICJS_VERSION", {
1284
1655
  enumerable: true,
1285
- get: function () { return chunk3PHG75W4_cjs.SONICJS_VERSION; }
1656
+ get: function () { return chunkNNXPAPUD_cjs.SONICJS_VERSION; }
1286
1657
  });
1287
1658
  Object.defineProperty(exports, "TemplateRenderer", {
1288
1659
  enumerable: true,
1289
- get: function () { return chunk3PHG75W4_cjs.TemplateRenderer; }
1660
+ get: function () { return chunkNNXPAPUD_cjs.TemplateRenderer; }
1290
1661
  });
1291
1662
  Object.defineProperty(exports, "buildQuery", {
1292
1663
  enumerable: true,
1293
- get: function () { return chunk3PHG75W4_cjs.buildQuery; }
1664
+ get: function () { return chunkNNXPAPUD_cjs.buildQuery; }
1294
1665
  });
1295
1666
  Object.defineProperty(exports, "escapeHtml", {
1296
1667
  enumerable: true,
1297
- get: function () { return chunk3PHG75W4_cjs.escapeHtml; }
1668
+ get: function () { return chunkNNXPAPUD_cjs.escapeHtml; }
1298
1669
  });
1299
1670
  Object.defineProperty(exports, "getCoreVersion", {
1300
1671
  enumerable: true,
1301
- get: function () { return chunk3PHG75W4_cjs.getCoreVersion; }
1672
+ get: function () { return chunkNNXPAPUD_cjs.getCoreVersion; }
1302
1673
  });
1303
1674
  Object.defineProperty(exports, "renderTemplate", {
1304
1675
  enumerable: true,
1305
- get: function () { return chunk3PHG75W4_cjs.renderTemplate; }
1676
+ get: function () { return chunkNNXPAPUD_cjs.renderTemplate; }
1306
1677
  });
1307
1678
  Object.defineProperty(exports, "sanitizeInput", {
1308
1679
  enumerable: true,
1309
- get: function () { return chunk3PHG75W4_cjs.sanitizeInput; }
1680
+ get: function () { return chunkNNXPAPUD_cjs.sanitizeInput; }
1310
1681
  });
1311
1682
  Object.defineProperty(exports, "sanitizeObject", {
1312
1683
  enumerable: true,
1313
- get: function () { return chunk3PHG75W4_cjs.sanitizeObject; }
1684
+ get: function () { return chunkNNXPAPUD_cjs.sanitizeObject; }
1314
1685
  });
1315
1686
  Object.defineProperty(exports, "templateRenderer", {
1316
1687
  enumerable: true,
1317
- get: function () { return chunk3PHG75W4_cjs.templateRenderer; }
1688
+ get: function () { return chunkNNXPAPUD_cjs.templateRenderer; }
1318
1689
  });
1319
1690
  Object.defineProperty(exports, "metricsTracker", {
1320
1691
  enumerable: true,