@strapi-community/plugin-io 5.0.6 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -5,7 +5,7 @@ import { Download, Upload, Check } from "@strapi/icons";
5
5
  import { useFetchClient, useNotification } from "@strapi/strapi/admin";
6
6
  import { u as useIntl } from "./index-CEh8vkxY.mjs";
7
7
  import styled from "styled-components";
8
- import { P as PLUGIN_ID } from "./index-DLXtrAtk.mjs";
8
+ import { P as PLUGIN_ID } from "./index-CzvX8YTe.mjs";
9
9
  const ResponsiveMain = styled(Main)`
10
10
  & > div {
11
11
  padding: 16px !important;
@@ -78,6 +78,23 @@ const ResponsiveButtonGroup = styled(Flex)`
78
78
  }
79
79
  }
80
80
  `;
81
+ const ToggleCard = styled(Box)`
82
+ padding: 16px;
83
+ background: ${({ $active, $color }) => $active ? `${$color}15` : "#ffffff"};
84
+ border-radius: 8px;
85
+ cursor: pointer;
86
+ border: 2px solid ${({ $active, $color }) => $active ? $color : "#dcdce4"};
87
+ transition: all 0.2s ease;
88
+ height: 100%;
89
+ min-height: 80px;
90
+ display: flex;
91
+ align-items: center;
92
+
93
+ &:hover {
94
+ border-color: ${({ $color }) => $color};
95
+ background: ${({ $color }) => `${$color}08`};
96
+ }
97
+ `;
81
98
  const InputWrapper = styled.div`
82
99
  width: 100%;
83
100
 
@@ -684,21 +701,12 @@ const SettingsPage = () => {
684
701
  /* @__PURE__ */ jsx(ResponsiveSectionTitle, { variant: "delta", as: "h2", children: t("security.title", "Security Settings") }),
685
702
  /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: t("security.description", "Configure authentication and rate limiting") })
686
703
  ] }),
687
- /* @__PURE__ */ jsxs(Grid.Root, { gap: 3, children: [
704
+ /* @__PURE__ */ jsxs(Grid.Root, { gap: 4, children: [
688
705
  /* @__PURE__ */ jsx(Grid.Item, { col: 6, s: 12, children: /* @__PURE__ */ jsx(
689
- Box,
706
+ ToggleCard,
690
707
  {
691
- padding: 4,
692
- background: settings.security?.requireAuthentication ? "success100" : "neutral0",
693
- hasRadius: true,
694
- style: {
695
- cursor: "pointer",
696
- border: `2px solid ${settings.security?.requireAuthentication ? "#5cb176" : "#dcdce4"}`,
697
- transition: "all 0.2s ease",
698
- minHeight: "110px",
699
- display: "flex",
700
- alignItems: "center"
701
- },
708
+ $active: settings.security?.requireAuthentication,
709
+ $color: "#5cb176",
702
710
  onClick: () => updateSecurity("requireAuthentication", !settings.security?.requireAuthentication),
703
711
  children: /* @__PURE__ */ jsxs(Flex, { gap: 3, alignItems: "center", style: { width: "100%" }, children: [
704
712
  /* @__PURE__ */ jsx(
@@ -709,34 +717,17 @@ const SettingsPage = () => {
709
717
  }
710
718
  ),
711
719
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "flex-start", gap: 1, children: [
712
- /* @__PURE__ */ jsx(
713
- Typography,
714
- {
715
- variant: "omega",
716
- fontWeight: settings.security?.requireAuthentication ? "bold" : "normal",
717
- textColor: settings.security?.requireAuthentication ? "success700" : "neutral800",
718
- children: t("security.requireAuth", "Require Authentication")
719
- }
720
- ),
721
- /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", style: { fontSize: "12px" }, children: settings.security?.requireAuthentication ? "✓ Active" : "Inactive" })
720
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", fontWeight: "semiBold", children: t("security.requireAuth", "Require Authentication") }),
721
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: settings.security?.requireAuthentication ? "Active" : "Inactive" })
722
722
  ] })
723
723
  ] })
724
724
  }
725
725
  ) }),
726
- /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsx(
727
- Box,
726
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, s: 12, children: /* @__PURE__ */ jsx(
727
+ ToggleCard,
728
728
  {
729
- padding: 4,
730
- background: settings.security?.rateLimiting?.enabled ? "warning100" : "neutral0",
731
- hasRadius: true,
732
- style: {
733
- cursor: "pointer",
734
- border: `2px solid ${settings.security?.rateLimiting?.enabled ? "#f59e0b" : "#dcdce4"}`,
735
- transition: "all 0.2s ease",
736
- minHeight: "110px",
737
- display: "flex",
738
- alignItems: "center"
739
- },
729
+ $active: settings.security?.rateLimiting?.enabled,
730
+ $color: "#f59e0b",
740
731
  onClick: () => updateSecurity("rateLimiting", { ...settings.security?.rateLimiting, enabled: !settings.security?.rateLimiting?.enabled }),
741
732
  children: /* @__PURE__ */ jsxs(Flex, { gap: 3, alignItems: "center", style: { width: "100%" }, children: [
742
733
  /* @__PURE__ */ jsx(
@@ -747,49 +738,34 @@ const SettingsPage = () => {
747
738
  }
748
739
  ),
749
740
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "flex-start", gap: 1, children: [
750
- /* @__PURE__ */ jsx(
751
- Typography,
752
- {
753
- variant: "omega",
754
- fontWeight: settings.security?.rateLimiting?.enabled ? "bold" : "normal",
755
- textColor: settings.security?.rateLimiting?.enabled ? "warning700" : "neutral800",
756
- children: t("security.rateLimiting", "Enable Rate Limiting")
757
- }
758
- ),
759
- /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", style: { fontSize: "12px" }, children: settings.security?.rateLimiting?.enabled ? "✓ Active" : "Inactive" })
741
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", fontWeight: "semiBold", children: t("security.rateLimiting", "Enable Rate Limiting") }),
742
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: settings.security?.rateLimiting?.enabled ? "Active" : "Inactive" })
760
743
  ] })
761
744
  ] })
762
745
  }
763
- ) }),
764
- settings.security?.rateLimiting?.enabled && /* @__PURE__ */ jsx(Grid.Item, { col: 6, s: 12, children: /* @__PURE__ */ jsx(
746
+ ) })
747
+ ] }),
748
+ settings.security?.rateLimiting?.enabled && /* @__PURE__ */ jsx(Box, { paddingTop: 3, children: /* @__PURE__ */ jsx(Grid.Root, { gap: 4, children: /* @__PURE__ */ jsx(Grid.Item, { col: 6, s: 12, children: /* @__PURE__ */ jsxs(ResponsiveField, { children: [
749
+ /* @__PURE__ */ jsx(Field.Label, { children: t("security.maxEventsPerSecond", "Max Events/Second") }),
750
+ /* @__PURE__ */ jsx(InputWrapper, { children: /* @__PURE__ */ jsx(
765
751
  NumberInput,
766
752
  {
767
- label: t("security.maxEventsPerSecond", "Max Events/Second"),
768
753
  value: settings.security?.rateLimiting?.maxEventsPerSecond || 10,
769
754
  onValueChange: (value) => updateSecurity("rateLimiting", { ...settings.security?.rateLimiting, maxEventsPerSecond: value })
770
755
  }
771
756
  ) })
772
- ] }),
757
+ ] }) }) }) }),
773
758
  /* @__PURE__ */ jsx(Box, { paddingTop: 4, paddingBottom: 2, children: /* @__PURE__ */ jsx(Divider, {}) }),
774
759
  /* @__PURE__ */ jsxs(ResponsiveSection, { children: [
775
- /* @__PURE__ */ jsx(ResponsiveSectionTitle, { variant: "delta", as: "h2", children: t("events.title", "Event Configuration") }),
776
- /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: t("events.description", "Global event settings") })
760
+ /* @__PURE__ */ jsx(ResponsiveSectionTitle, { variant: "delta", as: "h2", children: t("events.title", "Real-time Events") }),
761
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: t("events.description", "Configure which events are sent for which content types") })
777
762
  ] }),
778
- /* @__PURE__ */ jsxs(Grid.Root, { gap: 3, children: [
763
+ /* @__PURE__ */ jsxs(Grid.Root, { gap: 4, children: [
779
764
  /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsx(
780
- Box,
765
+ ToggleCard,
781
766
  {
782
- padding: 4,
783
- background: settings.events?.customEventNames ? "primary100" : "neutral0",
784
- hasRadius: true,
785
- style: {
786
- cursor: "pointer",
787
- border: `2px solid ${settings.events?.customEventNames ? "#4945ff" : "#dcdce4"}`,
788
- transition: "all 0.2s ease",
789
- minHeight: "110px",
790
- display: "flex",
791
- alignItems: "center"
792
- },
767
+ $active: settings.events?.customEventNames,
768
+ $color: "#4945ff",
793
769
  onClick: () => updateEvents("customEventNames", !settings.events?.customEventNames),
794
770
  children: /* @__PURE__ */ jsxs(Flex, { gap: 3, alignItems: "center", style: { width: "100%" }, children: [
795
771
  /* @__PURE__ */ jsx(
@@ -800,34 +776,17 @@ const SettingsPage = () => {
800
776
  }
801
777
  ),
802
778
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "flex-start", gap: 1, children: [
803
- /* @__PURE__ */ jsx(
804
- Typography,
805
- {
806
- variant: "omega",
807
- fontWeight: settings.events?.customEventNames ? "bold" : "normal",
808
- textColor: settings.events?.customEventNames ? "primary700" : "neutral800",
809
- children: t("events.customNames", "Use Custom Event Names")
810
- }
811
- ),
812
- /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", style: { fontSize: "12px" }, children: settings.events?.customEventNames ? "✓ Active" : "Inactive" })
779
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", fontWeight: "semiBold", children: t("events.customNames", "Use Custom Event Names") }),
780
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: settings.events?.customEventNames ? "Active" : "Inactive" })
813
781
  ] })
814
782
  ] })
815
783
  }
816
784
  ) }),
817
785
  /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsx(
818
- Box,
786
+ ToggleCard,
819
787
  {
820
- padding: 4,
821
- background: settings.events?.includeRelations ? "primary100" : "neutral0",
822
- hasRadius: true,
823
- style: {
824
- cursor: "pointer",
825
- border: `2px solid ${settings.events?.includeRelations ? "#4945ff" : "#dcdce4"}`,
826
- transition: "all 0.2s ease",
827
- minHeight: "110px",
828
- display: "flex",
829
- alignItems: "center"
830
- },
788
+ $active: settings.events?.includeRelations,
789
+ $color: "#4945ff",
831
790
  onClick: () => updateEvents("includeRelations", !settings.events?.includeRelations),
832
791
  children: /* @__PURE__ */ jsxs(Flex, { gap: 3, alignItems: "center", style: { width: "100%" }, children: [
833
792
  /* @__PURE__ */ jsx(
@@ -838,34 +797,17 @@ const SettingsPage = () => {
838
797
  }
839
798
  ),
840
799
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "flex-start", gap: 1, children: [
841
- /* @__PURE__ */ jsx(
842
- Typography,
843
- {
844
- variant: "omega",
845
- fontWeight: settings.events?.includeRelations ? "bold" : "normal",
846
- textColor: settings.events?.includeRelations ? "primary700" : "neutral800",
847
- children: t("events.includeRelations", "Include Relations")
848
- }
849
- ),
850
- /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", style: { fontSize: "12px" }, children: settings.events?.includeRelations ? "✓ Active" : "Inactive" })
800
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", fontWeight: "semiBold", children: t("events.includeRelations", "Include Relations") }),
801
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: settings.events?.includeRelations ? "Active" : "Inactive" })
851
802
  ] })
852
803
  ] })
853
804
  }
854
805
  ) }),
855
806
  /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsx(
856
- Box,
807
+ ToggleCard,
857
808
  {
858
- padding: 4,
859
- background: settings.events?.onlyPublished ? "primary100" : "neutral0",
860
- hasRadius: true,
861
- style: {
862
- cursor: "pointer",
863
- border: `2px solid ${settings.events?.onlyPublished ? "#4945ff" : "#dcdce4"}`,
864
- transition: "all 0.2s ease",
865
- minHeight: "110px",
866
- display: "flex",
867
- alignItems: "center"
868
- },
809
+ $active: settings.events?.onlyPublished,
810
+ $color: "#4945ff",
869
811
  onClick: () => updateEvents("onlyPublished", !settings.events?.onlyPublished),
870
812
  children: /* @__PURE__ */ jsxs(Flex, { gap: 3, alignItems: "center", style: { width: "100%" }, children: [
871
813
  /* @__PURE__ */ jsx(
@@ -876,16 +818,8 @@ const SettingsPage = () => {
876
818
  }
877
819
  ),
878
820
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "flex-start", gap: 1, children: [
879
- /* @__PURE__ */ jsx(
880
- Typography,
881
- {
882
- variant: "omega",
883
- fontWeight: settings.events?.onlyPublished ? "bold" : "normal",
884
- textColor: settings.events?.onlyPublished ? "primary700" : "neutral800",
885
- children: t("events.onlyPublished", "Only Published Content")
886
- }
887
- ),
888
- /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", style: { fontSize: "12px" }, children: settings.events?.onlyPublished ? "✓ Active" : "Inactive" })
821
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", fontWeight: "semiBold", children: t("events.onlyPublished", "Only Published Content") }),
822
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: settings.events?.onlyPublished ? "Active" : "Inactive" })
889
823
  ] })
890
824
  ] })
891
825
  }
@@ -1037,7 +971,7 @@ const SettingsPage = () => {
1037
971
  /* @__PURE__ */ jsx(Grid.Item, { col: 2, children: /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsx(Typography, { variant: "sigma", textColor: "neutral600", children: t("events.delete", "DELETE") }) }) }),
1038
972
  /* @__PURE__ */ jsx(Grid.Item, { col: 2, children: /* @__PURE__ */ jsx(Flex, { justifyContent: "center", children: /* @__PURE__ */ jsxs(Typography, { variant: "sigma", textColor: "neutral600", children: [
1039
973
  t("entitySubscriptions.allow", "ENTITIES"),
1040
- " 🆕"
974
+ " [NEW]"
1041
975
  ] }) }) })
1042
976
  ] }) }),
1043
977
  availableContentTypes.map((ct, idx) => {
@@ -1273,7 +1207,7 @@ const SettingsPage = () => {
1273
1207
  /* @__PURE__ */ jsxs(Badge, { children: [
1274
1208
  "/",
1275
1209
  ns,
1276
- config.requireAuth && /* @__PURE__ */ jsx("span", { style: { marginLeft: "4px" }, children: "🔒" }),
1210
+ config.requireAuth && /* @__PURE__ */ jsx("span", { style: { marginLeft: "4px" }, children: "[AUTH]" }),
1277
1211
  /* @__PURE__ */ jsx(
1278
1212
  Button,
1279
1213
  {
@@ -1295,7 +1229,7 @@ const SettingsPage = () => {
1295
1229
  /* @__PURE__ */ jsxs(Box, { children: [
1296
1230
  /* @__PURE__ */ jsxs(ResponsiveSectionTitle, { variant: "delta", as: "h2", children: [
1297
1231
  t("entitySubscriptions.title", "Entity Subscriptions"),
1298
- " 🆕"
1232
+ " [NEW]"
1299
1233
  ] }),
1300
1234
  /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: t("entitySubscriptions.description", "Allow clients to subscribe to specific entities") })
1301
1235
  ] }),
@@ -1340,63 +1274,231 @@ const SettingsPage = () => {
1340
1274
  ] }) })
1341
1275
  ] }) }),
1342
1276
  /* @__PURE__ */ jsx(Box, { paddingTop: 4, paddingBottom: 2, children: /* @__PURE__ */ jsx(Divider, {}) }),
1277
+ /* @__PURE__ */ jsx(ResponsiveSection, { children: /* @__PURE__ */ jsxs(Flex, { justifyContent: "space-between", alignItems: "center", children: [
1278
+ /* @__PURE__ */ jsxs(Box, { children: [
1279
+ /* @__PURE__ */ jsxs(ResponsiveSectionTitle, { variant: "delta", as: "h2", children: [
1280
+ t("presence.title", "Presence System"),
1281
+ " [NEW]"
1282
+ ] }),
1283
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: t("presence.description", "Real-time collaboration awareness - see who is editing what") })
1284
+ ] }),
1285
+ /* @__PURE__ */ jsx(
1286
+ Toggle,
1287
+ {
1288
+ checked: settings.presence?.enabled ?? true,
1289
+ onChange: (e) => updateSettings((prev) => ({
1290
+ ...prev,
1291
+ presence: { ...prev.presence, enabled: e.target.checked }
1292
+ }))
1293
+ }
1294
+ )
1295
+ ] }) }),
1296
+ settings.presence?.enabled !== false && /* @__PURE__ */ jsx(Box, { paddingTop: 3, children: /* @__PURE__ */ jsxs(Grid.Root, { gap: 3, children: [
1297
+ /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsxs(ResponsiveField, { children: [
1298
+ /* @__PURE__ */ jsx(Field.Label, { children: t("presence.heartbeat", "Heartbeat Interval (ms)") }),
1299
+ /* @__PURE__ */ jsx(InputWrapper, { children: /* @__PURE__ */ jsx(
1300
+ NumberInput,
1301
+ {
1302
+ value: settings.presence?.heartbeatInterval ?? 3e4,
1303
+ onValueChange: (value) => updateSettings((prev) => ({
1304
+ ...prev,
1305
+ presence: { ...prev.presence, heartbeatInterval: value }
1306
+ }))
1307
+ }
1308
+ ) })
1309
+ ] }) }),
1310
+ /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsxs(ResponsiveField, { children: [
1311
+ /* @__PURE__ */ jsx(Field.Label, { children: t("presence.staleTimeout", "Stale Timeout (ms)") }),
1312
+ /* @__PURE__ */ jsx(InputWrapper, { children: /* @__PURE__ */ jsx(
1313
+ NumberInput,
1314
+ {
1315
+ value: settings.presence?.staleTimeout ?? 6e4,
1316
+ onValueChange: (value) => updateSettings((prev) => ({
1317
+ ...prev,
1318
+ presence: { ...prev.presence, staleTimeout: value }
1319
+ }))
1320
+ }
1321
+ ) })
1322
+ ] }) }),
1323
+ /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, alignItems: "center", paddingTop: 6, children: [
1324
+ /* @__PURE__ */ jsx(
1325
+ Checkbox,
1326
+ {
1327
+ checked: settings.presence?.showTypingIndicator ?? true,
1328
+ onCheckedChange: (checked) => updateSettings((prev) => ({
1329
+ ...prev,
1330
+ presence: { ...prev.presence, showTypingIndicator: checked }
1331
+ }))
1332
+ }
1333
+ ),
1334
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", children: t("presence.typing", "Show Typing Indicators") })
1335
+ ] }) })
1336
+ ] }) }),
1337
+ /* @__PURE__ */ jsx(Box, { paddingTop: 4, paddingBottom: 2, children: /* @__PURE__ */ jsx(Divider, {}) }),
1338
+ /* @__PURE__ */ jsx(ResponsiveSection, { children: /* @__PURE__ */ jsxs(Flex, { justifyContent: "space-between", alignItems: "center", children: [
1339
+ /* @__PURE__ */ jsxs(Box, { children: [
1340
+ /* @__PURE__ */ jsxs(ResponsiveSectionTitle, { variant: "delta", as: "h2", children: [
1341
+ t("livePreview.title", "Live Preview"),
1342
+ " [NEW]"
1343
+ ] }),
1344
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: t("livePreview.description", "Real-time preview of draft changes for frontends") })
1345
+ ] }),
1346
+ /* @__PURE__ */ jsx(
1347
+ Toggle,
1348
+ {
1349
+ checked: settings.livePreview?.enabled ?? true,
1350
+ onChange: (e) => updateSettings((prev) => ({
1351
+ ...prev,
1352
+ livePreview: { ...prev.livePreview, enabled: e.target.checked }
1353
+ }))
1354
+ }
1355
+ )
1356
+ ] }) }),
1357
+ settings.livePreview?.enabled !== false && /* @__PURE__ */ jsx(Box, { paddingTop: 3, children: /* @__PURE__ */ jsxs(Grid.Root, { gap: 3, children: [
1358
+ /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsxs(ResponsiveField, { children: [
1359
+ /* @__PURE__ */ jsx(Field.Label, { children: t("livePreview.debounce", "Debounce (ms)") }),
1360
+ /* @__PURE__ */ jsx(InputWrapper, { children: /* @__PURE__ */ jsx(
1361
+ NumberInput,
1362
+ {
1363
+ value: settings.livePreview?.debounceMs ?? 300,
1364
+ onValueChange: (value) => updateSettings((prev) => ({
1365
+ ...prev,
1366
+ livePreview: { ...prev.livePreview, debounceMs: value }
1367
+ }))
1368
+ }
1369
+ ) })
1370
+ ] }) }),
1371
+ /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, alignItems: "center", paddingTop: 6, children: [
1372
+ /* @__PURE__ */ jsx(
1373
+ Checkbox,
1374
+ {
1375
+ checked: settings.livePreview?.draftEvents ?? true,
1376
+ onCheckedChange: (checked) => updateSettings((prev) => ({
1377
+ ...prev,
1378
+ livePreview: { ...prev.livePreview, draftEvents: checked }
1379
+ }))
1380
+ }
1381
+ ),
1382
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", children: t("livePreview.draftEvents", "Emit Draft Events") })
1383
+ ] }) }),
1384
+ /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsxs(ResponsiveField, { children: [
1385
+ /* @__PURE__ */ jsx(Field.Label, { children: t("livePreview.maxSubs", "Max Subscriptions/Socket") }),
1386
+ /* @__PURE__ */ jsx(InputWrapper, { children: /* @__PURE__ */ jsx(
1387
+ NumberInput,
1388
+ {
1389
+ value: settings.livePreview?.maxSubscriptionsPerSocket ?? 50,
1390
+ onValueChange: (value) => updateSettings((prev) => ({
1391
+ ...prev,
1392
+ livePreview: { ...prev.livePreview, maxSubscriptionsPerSocket: value }
1393
+ }))
1394
+ }
1395
+ ) })
1396
+ ] }) })
1397
+ ] }) }),
1398
+ /* @__PURE__ */ jsx(Box, { paddingTop: 4, paddingBottom: 2, children: /* @__PURE__ */ jsx(Divider, {}) }),
1399
+ /* @__PURE__ */ jsx(ResponsiveSection, { children: /* @__PURE__ */ jsxs(Flex, { justifyContent: "space-between", alignItems: "center", children: [
1400
+ /* @__PURE__ */ jsxs(Box, { children: [
1401
+ /* @__PURE__ */ jsxs(ResponsiveSectionTitle, { variant: "delta", as: "h2", children: [
1402
+ t("fieldChanges.title", "Field-level Changes"),
1403
+ " [NEW]"
1404
+ ] }),
1405
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: t("fieldChanges.description", "Send only changed fields instead of full entities (bandwidth optimization)") })
1406
+ ] }),
1407
+ /* @__PURE__ */ jsx(
1408
+ Toggle,
1409
+ {
1410
+ checked: settings.fieldLevelChanges?.enabled ?? true,
1411
+ onChange: (e) => updateSettings((prev) => ({
1412
+ ...prev,
1413
+ fieldLevelChanges: { ...prev.fieldLevelChanges, enabled: e.target.checked }
1414
+ }))
1415
+ }
1416
+ )
1417
+ ] }) }),
1418
+ settings.fieldLevelChanges?.enabled !== false && /* @__PURE__ */ jsx(Box, { paddingTop: 3, children: /* @__PURE__ */ jsxs(Grid.Root, { gap: 3, children: [
1419
+ /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, alignItems: "center", paddingTop: 2, children: [
1420
+ /* @__PURE__ */ jsx(
1421
+ Checkbox,
1422
+ {
1423
+ checked: settings.fieldLevelChanges?.includeFullData ?? false,
1424
+ onCheckedChange: (checked) => updateSettings((prev) => ({
1425
+ ...prev,
1426
+ fieldLevelChanges: { ...prev.fieldLevelChanges, includeFullData: checked }
1427
+ }))
1428
+ }
1429
+ ),
1430
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", children: t("fieldChanges.includeFullData", "Include Full Data") })
1431
+ ] }) }),
1432
+ /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsxs(ResponsiveField, { children: [
1433
+ /* @__PURE__ */ jsx(Field.Label, { children: t("fieldChanges.maxDepth", "Max Diff Depth") }),
1434
+ /* @__PURE__ */ jsx(InputWrapper, { children: /* @__PURE__ */ jsx(
1435
+ NumberInput,
1436
+ {
1437
+ value: settings.fieldLevelChanges?.maxDiffDepth ?? 3,
1438
+ onValueChange: (value) => updateSettings((prev) => ({
1439
+ ...prev,
1440
+ fieldLevelChanges: { ...prev.fieldLevelChanges, maxDiffDepth: value }
1441
+ }))
1442
+ }
1443
+ ) })
1444
+ ] }) })
1445
+ ] }) }),
1446
+ /* @__PURE__ */ jsx(Box, { paddingTop: 4, paddingBottom: 2, children: /* @__PURE__ */ jsx(Divider, {}) }),
1343
1447
  /* @__PURE__ */ jsx(ResponsiveSection, { children: /* @__PURE__ */ jsx(ResponsiveSectionTitle, { variant: "delta", as: "h2", children: t("monitoring.title", "Monitoring & Logging") }) }),
1344
- /* @__PURE__ */ jsxs(Grid.Root, { gap: 3, children: [
1448
+ /* @__PURE__ */ jsxs(Grid.Root, { gap: 4, children: [
1345
1449
  /* @__PURE__ */ jsx(Grid.Item, { col: 6, s: 12, children: /* @__PURE__ */ jsx(
1346
- Box,
1450
+ ToggleCard,
1347
1451
  {
1348
- padding: 4,
1349
- background: settings.monitoring?.enableConnectionLogging ? "primary100" : "neutral0",
1350
- hasRadius: true,
1351
- style: { cursor: "pointer", border: `1px solid ${settings.monitoring?.enableConnectionLogging ? "#4945ff" : "#dcdce4"}` },
1452
+ $active: settings.monitoring?.enableConnectionLogging,
1453
+ $color: "#4945ff",
1352
1454
  onClick: () => updateMonitoring("enableConnectionLogging", !settings.monitoring?.enableConnectionLogging),
1353
- children: /* @__PURE__ */ jsxs(Flex, { gap: 3, alignItems: "center", children: [
1455
+ children: /* @__PURE__ */ jsxs(Flex, { gap: 3, alignItems: "center", style: { width: "100%" }, children: [
1354
1456
  /* @__PURE__ */ jsx(
1355
- Checkbox,
1457
+ Toggle,
1356
1458
  {
1357
1459
  checked: settings.monitoring?.enableConnectionLogging || false,
1358
- onCheckedChange: (checked) => updateMonitoring("enableConnectionLogging", checked)
1460
+ onChange: (e) => updateMonitoring("enableConnectionLogging", e.target.checked)
1359
1461
  }
1360
1462
  ),
1361
1463
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "flex-start", gap: 1, children: [
1362
- /* @__PURE__ */ jsx(Typography, { variant: "omega", fontWeight: "bold", children: t("monitoring.connectionLogging", "Connection Logging") }),
1464
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", fontWeight: "semiBold", children: t("monitoring.connectionLogging", "Connection Logging") }),
1363
1465
  /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: t("monitoring.connectionLoggingHint", "Log client connections") })
1364
1466
  ] })
1365
1467
  ] })
1366
1468
  }
1367
1469
  ) }),
1368
- /* @__PURE__ */ jsx(Grid.Item, { col: 4, s: 12, children: /* @__PURE__ */ jsx(
1369
- Box,
1470
+ /* @__PURE__ */ jsx(Grid.Item, { col: 6, s: 12, children: /* @__PURE__ */ jsx(
1471
+ ToggleCard,
1370
1472
  {
1371
- padding: 4,
1372
- background: settings.monitoring?.enableEventLogging ? "primary100" : "neutral0",
1373
- hasRadius: true,
1374
- style: { cursor: "pointer", border: `1px solid ${settings.monitoring?.enableEventLogging ? "#4945ff" : "#dcdce4"}` },
1473
+ $active: settings.monitoring?.enableEventLogging,
1474
+ $color: "#4945ff",
1375
1475
  onClick: () => updateMonitoring("enableEventLogging", !settings.monitoring?.enableEventLogging),
1376
- children: /* @__PURE__ */ jsxs(Flex, { gap: 3, alignItems: "center", children: [
1476
+ children: /* @__PURE__ */ jsxs(Flex, { gap: 3, alignItems: "center", style: { width: "100%" }, children: [
1377
1477
  /* @__PURE__ */ jsx(
1378
- Checkbox,
1478
+ Toggle,
1379
1479
  {
1380
1480
  checked: settings.monitoring?.enableEventLogging || false,
1381
- onCheckedChange: (checked) => updateMonitoring("enableEventLogging", checked)
1481
+ onChange: (e) => updateMonitoring("enableEventLogging", e.target.checked)
1382
1482
  }
1383
1483
  ),
1384
1484
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "flex-start", gap: 1, children: [
1385
- /* @__PURE__ */ jsx(Typography, { variant: "omega", fontWeight: "bold", children: t("monitoring.eventLogging", "Event Logging") }),
1485
+ /* @__PURE__ */ jsx(Typography, { variant: "omega", fontWeight: "semiBold", children: t("monitoring.eventLogging", "Event Logging") }),
1386
1486
  /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: t("monitoring.eventLoggingHint", "Log all events for debugging") })
1387
1487
  ] })
1388
1488
  ] })
1389
1489
  }
1390
- ) }),
1391
- settings.monitoring?.enableEventLogging && /* @__PURE__ */ jsx(Grid.Item, { col: 12, s: 12, children: /* @__PURE__ */ jsx(ResponsiveField, { children: /* @__PURE__ */ jsx(InputWrapper, { children: /* @__PURE__ */ jsx(
1490
+ ) })
1491
+ ] }),
1492
+ settings.monitoring?.enableEventLogging && /* @__PURE__ */ jsx(Box, { paddingTop: 3, children: /* @__PURE__ */ jsx(Grid.Root, { gap: 4, children: /* @__PURE__ */ jsx(Grid.Item, { col: 6, s: 12, children: /* @__PURE__ */ jsxs(ResponsiveField, { children: [
1493
+ /* @__PURE__ */ jsx(Field.Label, { children: t("monitoring.maxLogSize", "Max Log Size") }),
1494
+ /* @__PURE__ */ jsx(InputWrapper, { children: /* @__PURE__ */ jsx(
1392
1495
  NumberInput,
1393
1496
  {
1394
- label: t("monitoring.maxLogSize", "Max Log Size"),
1395
1497
  value: settings.monitoring?.maxEventLogSize || 100,
1396
1498
  onValueChange: (value) => updateMonitoring("maxEventLogSize", value)
1397
1499
  }
1398
- ) }) }) })
1399
- ] })
1500
+ ) })
1501
+ ] }) }) }) })
1400
1502
  ] }),
1401
1503
  /* @__PURE__ */ jsx(Box, { marginTop: 3, padding: 3, background: "success100", hasRadius: true, children: /* @__PURE__ */ jsxs(Flex, { gap: 2, alignItems: "center", children: [
1402
1504
  /* @__PURE__ */ jsx(Check, {}),
@@ -51,7 +51,7 @@ const index = {
51
51
  },
52
52
  id: `${PLUGIN_ID}-settings`,
53
53
  to: `${PLUGIN_ID}/settings`,
54
- Component: () => Promise.resolve().then(() => require("./SettingsPage-88RdJkLy.js")).then((mod) => ({ default: mod.SettingsPage }))
54
+ Component: () => Promise.resolve().then(() => require("./SettingsPage-4OkXJAjU.js")).then((mod) => ({ default: mod.SettingsPage }))
55
55
  },
56
56
  {
57
57
  intlLabel: {
@@ -60,7 +60,7 @@ const index = {
60
60
  },
61
61
  id: `${PLUGIN_ID}-monitoring`,
62
62
  to: `${PLUGIN_ID}/monitoring`,
63
- Component: () => Promise.resolve().then(() => require("./MonitoringPage-HxHK1nFr.js")).then((mod) => ({ default: mod.MonitoringPage }))
63
+ Component: () => Promise.resolve().then(() => require("./MonitoringPage-K5Y3hhKF.js")).then((mod) => ({ default: mod.MonitoringPage }))
64
64
  }
65
65
  ]
66
66
  );
@@ -78,11 +78,21 @@ const index = {
78
78
  id: "socket-io-stats-widget",
79
79
  pluginId: PLUGIN_ID
80
80
  });
81
- console.log(`[${PLUGIN_ID}] Socket.IO Stats Widget registered`);
81
+ console.log(`[${PLUGIN_ID}] [SUCCESS] Socket.IO Stats Widget registered`);
82
82
  }
83
83
  },
84
- bootstrap(app) {
85
- console.log(`[${PLUGIN_ID}] Bootstrapping plugin...`);
84
+ async bootstrap(app) {
85
+ console.log(`[${PLUGIN_ID}] [INFO] Bootstrapping plugin...`);
86
+ try {
87
+ const { default: LivePresencePanel } = await Promise.resolve().then(() => require("./LivePresencePanel-CNaEK-Gk.js"));
88
+ const contentManagerPlugin = app.getPlugin("content-manager");
89
+ if (contentManagerPlugin && contentManagerPlugin.apis) {
90
+ contentManagerPlugin.apis.addEditViewSidePanel([LivePresencePanel]);
91
+ console.log(`[${PLUGIN_ID}] [SUCCESS] LivePresencePanel injected into sidebar`);
92
+ }
93
+ } catch (error) {
94
+ console.log(`[${PLUGIN_ID}] [INFO] Content Manager panel injection not available:`, error.message);
95
+ }
86
96
  },
87
97
  async registerTrads({ locales }) {
88
98
  const importedTrads = await Promise.all(
@@ -50,7 +50,7 @@ const index = {
50
50
  },
51
51
  id: `${PLUGIN_ID}-settings`,
52
52
  to: `${PLUGIN_ID}/settings`,
53
- Component: () => import("./SettingsPage-DBIu309c.mjs").then((mod) => ({ default: mod.SettingsPage }))
53
+ Component: () => import("./SettingsPage-DMbMGU6J.mjs").then((mod) => ({ default: mod.SettingsPage }))
54
54
  },
55
55
  {
56
56
  intlLabel: {
@@ -59,7 +59,7 @@ const index = {
59
59
  },
60
60
  id: `${PLUGIN_ID}-monitoring`,
61
61
  to: `${PLUGIN_ID}/monitoring`,
62
- Component: () => import("./MonitoringPage-DLZdTZpg.mjs").then((mod) => ({ default: mod.MonitoringPage }))
62
+ Component: () => import("./MonitoringPage-Bn9XJSlg.mjs").then((mod) => ({ default: mod.MonitoringPage }))
63
63
  }
64
64
  ]
65
65
  );
@@ -77,11 +77,21 @@ const index = {
77
77
  id: "socket-io-stats-widget",
78
78
  pluginId: PLUGIN_ID
79
79
  });
80
- console.log(`[${PLUGIN_ID}] Socket.IO Stats Widget registered`);
80
+ console.log(`[${PLUGIN_ID}] [SUCCESS] Socket.IO Stats Widget registered`);
81
81
  }
82
82
  },
83
- bootstrap(app) {
84
- console.log(`[${PLUGIN_ID}] Bootstrapping plugin...`);
83
+ async bootstrap(app) {
84
+ console.log(`[${PLUGIN_ID}] [INFO] Bootstrapping plugin...`);
85
+ try {
86
+ const { default: LivePresencePanel } = await import("./LivePresencePanel-BeNq_EnQ.mjs");
87
+ const contentManagerPlugin = app.getPlugin("content-manager");
88
+ if (contentManagerPlugin && contentManagerPlugin.apis) {
89
+ contentManagerPlugin.apis.addEditViewSidePanel([LivePresencePanel]);
90
+ console.log(`[${PLUGIN_ID}] [SUCCESS] LivePresencePanel injected into sidebar`);
91
+ }
92
+ } catch (error) {
93
+ console.log(`[${PLUGIN_ID}] [INFO] Content Manager panel injection not available:`, error.message);
94
+ }
85
95
  },
86
96
  async registerTrads({ locales }) {
87
97
  const importedTrads = await Promise.all(
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
- const index = require("../_chunks/index-BVQ20t1c.js");
2
+ const index = require("../_chunks/index--2NeIKGR.js");
3
3
  module.exports = index.index;
@@ -1,4 +1,4 @@
1
- import { i } from "../_chunks/index-DLXtrAtk.mjs";
1
+ import { i } from "../_chunks/index-CzvX8YTe.mjs";
2
2
  export {
3
3
  i as default
4
4
  };