strapi-plugin-magic-mark 3.0.0 → 3.0.2

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 (51) hide show
  1. package/README.md +1 -1
  2. package/dist/_chunks/{App-C5UU0yUr.js → App-B6x0aSMN.js} +97 -55
  3. package/dist/_chunks/{App-Dt-v39BQ.mjs → App-BCliVBSB.mjs} +98 -56
  4. package/dist/_chunks/UpgradePage-Bm0SkuCi.js +353 -0
  5. package/dist/_chunks/UpgradePage-GoocQ4av.mjs +351 -0
  6. package/dist/_chunks/de-Cs9dd3Mr.js +138 -0
  7. package/dist/_chunks/de-DOVki5VS.mjs +138 -0
  8. package/dist/_chunks/en-CE3r46Y2.js +138 -0
  9. package/dist/_chunks/en-Cf5-O03L.mjs +138 -0
  10. package/dist/_chunks/es-Ba6JcPIm.mjs +138 -0
  11. package/dist/_chunks/es-D4AOyJYJ.js +138 -0
  12. package/dist/_chunks/fr-CWSfoA8i.js +138 -0
  13. package/dist/_chunks/fr-CrMBXR3c.mjs +138 -0
  14. package/dist/_chunks/{index-B-Cc7QNW.mjs → index-B_EiWnCU.mjs} +13 -4
  15. package/dist/_chunks/index-D5-84IjV.js +3365 -0
  16. package/dist/_chunks/{index-B11QBtag.js → index-DA7Jswi4.js} +12 -3
  17. package/dist/_chunks/index-DdTUt6EH.mjs +3361 -0
  18. package/dist/_chunks/pt-BXxZ1Zym.mjs +138 -0
  19. package/dist/_chunks/pt-DW_6r_mP.js +138 -0
  20. package/dist/admin/index.js +1 -1
  21. package/dist/admin/index.mjs +1 -1
  22. package/dist/admin/src/components/QueryBuilder.d.ts +12 -1
  23. package/dist/admin/src/components/RelationFieldSelector.d.ts +24 -0
  24. package/dist/admin/src/components/SimpleAdvancedFilterModal.d.ts +2 -0
  25. package/dist/admin/src/components/UpgradePrompt.d.ts +22 -0
  26. package/dist/admin/src/hooks/useFeatureGate.d.ts +88 -0
  27. package/dist/admin/src/hooks/useRelationSchema.d.ts +27 -0
  28. package/dist/admin/src/pages/UpgradePage.d.ts +6 -0
  29. package/dist/admin/src/utils/queryGenerator.d.ts +4 -0
  30. package/dist/admin/src/utils/queryToStructure.d.ts +8 -1
  31. package/dist/admin/src/utils/theme.d.ts +95 -0
  32. package/dist/server/index.js +212 -9
  33. package/dist/server/index.mjs +212 -9
  34. package/dist/server/src/controllers/index.d.ts +1 -0
  35. package/dist/server/src/controllers/license.d.ts +4 -0
  36. package/dist/server/src/index.d.ts +24 -1
  37. package/dist/server/src/services/index.d.ts +23 -1
  38. package/dist/server/src/services/license-guard.d.ts +48 -2
  39. package/package.json +1 -1
  40. package/dist/_chunks/de-Bag-366k.mjs +0 -49
  41. package/dist/_chunks/de-Dic_hhjg.js +0 -49
  42. package/dist/_chunks/en-C5BvHqNo.js +0 -54
  43. package/dist/_chunks/en-zokEerzt.mjs +0 -54
  44. package/dist/_chunks/es-BlSQpU1z.js +0 -54
  45. package/dist/_chunks/es-Br1ucP3h.mjs +0 -54
  46. package/dist/_chunks/fr-BHciYPYG.js +0 -54
  47. package/dist/_chunks/fr-Dzo3kt_q.mjs +0 -54
  48. package/dist/_chunks/index-BAmZV8aX.mjs +0 -2020
  49. package/dist/_chunks/index-RuDV4dTy.js +0 -2024
  50. package/dist/_chunks/pt-DQoGyzyD.mjs +0 -54
  51. package/dist/_chunks/pt-Dawo5aUA.js +0 -54
package/README.md CHANGED
@@ -644,7 +644,7 @@ Language automatically follows your Strapi admin interface setting.
644
644
 
645
645
  ## 🙏 Acknowledgments
646
646
 
647
- Built with ❤️ for the Strapi community.
647
+ Built for the Strapi community.
648
648
 
649
649
  Special thanks to:
650
650
  - Strapi team for the amazing CMS
@@ -8,7 +8,7 @@ const styled = require("styled-components");
8
8
  const designSystem = require("@strapi/design-system");
9
9
  const icons = require("@strapi/icons");
10
10
  const admin = require("@strapi/strapi/admin");
11
- const index = require("./index-RuDV4dTy.js");
11
+ const index = require("./index-D5-84IjV.js");
12
12
  const _interopDefault = (e) => e && e.__esModule ? e : { default: e };
13
13
  const styled__default = /* @__PURE__ */ _interopDefault(styled);
14
14
  const theme = {
@@ -33,6 +33,11 @@ const theme = {
33
33
  500: "#F59E0B",
34
34
  600: "#D97706"
35
35
  },
36
+ danger: {
37
+ 100: "#FEE2E2",
38
+ 500: "#EF4444",
39
+ 600: "#DC2626"
40
+ },
36
41
  neutral: {
37
42
  0: "#FFFFFF",
38
43
  50: "#F9FAFB",
@@ -381,6 +386,7 @@ const HomePageModern = () => {
381
386
  const { formatMessage } = reactIntl.useIntl();
382
387
  const navigate = reactRouterDom.useNavigate();
383
388
  const { get, post, del } = admin.useFetchClient();
389
+ index.useLicenseInfo();
384
390
  const [currentUser, setCurrentUser] = React.useState(null);
385
391
  const [bookmarks, setBookmarks] = React.useState([]);
386
392
  const [loading, setLoading] = React.useState(false);
@@ -391,11 +397,19 @@ const HomePageModern = () => {
391
397
  const [entriesPerPage, setEntriesPerPage] = React.useState("10");
392
398
  const [availableRoles, setAvailableRoles] = React.useState([]);
393
399
  const [availableUsers, setAvailableUsers] = React.useState([]);
400
+ const [licenseLimits, setLicenseLimits] = React.useState({
401
+ maxBookmarks: 10,
402
+ currentBookmarks: 0,
403
+ canCreate: true,
404
+ tier: "free",
405
+ features: {}
406
+ });
394
407
  React.useEffect(() => {
395
408
  fetchBookmarks();
396
409
  fetchCurrentUser();
397
410
  fetchRoles();
398
411
  fetchUsers();
412
+ fetchLicenseLimits();
399
413
  }, []);
400
414
  const fetchRoles = async () => {
401
415
  try {
@@ -439,6 +453,17 @@ const HomePageModern = () => {
439
453
  console.error("[Magic-Mark] Error fetching current user:", error);
440
454
  }
441
455
  };
456
+ const fetchLicenseLimits = async () => {
457
+ try {
458
+ const response = await get(`/${index.pluginId}/license/limits`);
459
+ if (response.data?.success) {
460
+ setLicenseLimits(response.data.data);
461
+ console.log("[Magic-Mark] License limits loaded:", response.data.data);
462
+ }
463
+ } catch (error) {
464
+ console.error("[Magic-Mark] Error fetching license limits:", error);
465
+ }
466
+ };
442
467
  const fetchBookmarks = async () => {
443
468
  setLoading(true);
444
469
  try {
@@ -490,6 +515,7 @@ const HomePageModern = () => {
490
515
  setShowModal(false);
491
516
  setEditingBookmark(null);
492
517
  fetchBookmarks();
518
+ fetchLicenseLimits();
493
519
  };
494
520
  const handleBookmarkClick = (bookmark) => {
495
521
  if (bookmark.path) {
@@ -529,52 +555,64 @@ const HomePageModern = () => {
529
555
  /* @__PURE__ */ jsxRuntime.jsxs(StatCard, { $delay: "0.2s", $color: theme.colors.success[500], children: [
530
556
  /* @__PURE__ */ jsxRuntime.jsx(StatIcon, { className: "stat-icon", $bg: theme.colors.success[100], $color: theme.colors.success[600], children: /* @__PURE__ */ jsxRuntime.jsx(icons.Sparkle, {}) }),
531
557
  /* @__PURE__ */ jsxRuntime.jsx(StatValue, { className: "stat-value", children: sharedWithMe.length }),
532
- /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Shared with Me" })
558
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: formatMessage({ id: `${index.pluginId}.stats.shared`, defaultMessage: "Shared with Me" }) })
533
559
  ] }),
534
560
  /* @__PURE__ */ jsxRuntime.jsxs(StatCard, { $delay: "0.3s", $color: theme.colors.warning[500], children: [
535
561
  /* @__PURE__ */ jsxRuntime.jsx(StatIcon, { className: "stat-icon", $bg: theme.colors.warning[100], $color: theme.colors.warning[600], children: /* @__PURE__ */ jsxRuntime.jsx(icons.Pin, {}) }),
536
562
  /* @__PURE__ */ jsxRuntime.jsx(StatValue, { className: "stat-value", children: pinnedBookmarks.length }),
537
- /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Pinned" })
563
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: formatMessage({ id: `${index.pluginId}.stats.pinned`, defaultMessage: "Pinned" }) })
538
564
  ] }),
539
- /* @__PURE__ */ jsxRuntime.jsxs(StatCard, { $delay: "0.4s", $color: theme.colors.neutral[600], children: [
540
- /* @__PURE__ */ jsxRuntime.jsx(StatIcon, { className: "stat-icon", $bg: theme.colors.neutral[100], $color: theme.colors.neutral[600], children: /* @__PURE__ */ jsxRuntime.jsx(icons.Link, {}) }),
541
- /* @__PURE__ */ jsxRuntime.jsx(StatValue, { className: "stat-value", children: bookmarks.length }),
542
- /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: "Total Available" })
543
- ] })
565
+ /* @__PURE__ */ jsxRuntime.jsxs(
566
+ StatCard,
567
+ {
568
+ $delay: "0.4s",
569
+ $color: licenseLimits.canCreate ? theme.colors.neutral[600] : theme.colors.danger[500],
570
+ onClick: () => !licenseLimits.canCreate && navigate(`/settings/${index.pluginId}/upgrade`),
571
+ style: { cursor: !licenseLimits.canCreate ? "pointer" : "default" },
572
+ children: [
573
+ /* @__PURE__ */ jsxRuntime.jsx(
574
+ StatIcon,
575
+ {
576
+ className: "stat-icon",
577
+ $bg: licenseLimits.canCreate ? theme.colors.neutral[100] : theme.colors.danger[100],
578
+ $color: licenseLimits.canCreate ? theme.colors.neutral[600] : theme.colors.danger[600],
579
+ children: /* @__PURE__ */ jsxRuntime.jsx(icons.Link, {})
580
+ }
581
+ ),
582
+ /* @__PURE__ */ jsxRuntime.jsxs(StatValue, { className: "stat-value", children: [
583
+ licenseLimits.currentBookmarks,
584
+ "/",
585
+ licenseLimits.maxBookmarks === -1 ? "∞" : licenseLimits.maxBookmarks
586
+ ] }),
587
+ /* @__PURE__ */ jsxRuntime.jsx(StatLabel, { children: licenseLimits.canCreate ? formatMessage({ id: `${index.pluginId}.stats.limit`, defaultMessage: "Bookmark Limit" }) : formatMessage({ id: `${index.pluginId}.stats.limitReached`, defaultMessage: "Limit Reached - Upgrade" }) })
588
+ ]
589
+ }
590
+ )
544
591
  ] }),
545
- loading && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", padding: 8, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Loader, { children: "Loading bookmarks..." }) }),
592
+ loading && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Flex, { justifyContent: "center", padding: 8, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Loader, { children: formatMessage({ id: `${index.pluginId}.loading`, defaultMessage: "Loading bookmarks..." }) }) }),
546
593
  !loading && sharedWithMe.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginBottom: 4, children: /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { style: {
547
594
  padding: theme.spacing.lg,
548
595
  background: theme.colors.primary[50],
549
596
  borderRadius: theme.borderRadius.lg,
550
597
  border: `1px solid ${theme.colors.primary[200]}`
551
598
  }, children: [
552
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "beta", style: { marginBottom: theme.spacing.sm, color: theme.colors.primary[700] }, children: "🤝 Shared with You" }),
553
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", style: { color: theme.colors.primary[600] }, children: [
554
- sharedWithMe.length,
555
- " bookmark",
556
- sharedWithMe.length > 1 ? "s" : "",
557
- " have been shared with you"
558
- ] }),
599
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "beta", style: { marginBottom: theme.spacing.sm, color: theme.colors.primary[700] }, children: formatMessage({ id: `${index.pluginId}.shared.title`, defaultMessage: "🤝 Shared with You" }) }),
600
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", style: { color: theme.colors.primary[600] }, children: sharedWithMe.length > 1 ? formatMessage({ id: `${index.pluginId}.shared.countPlural`, defaultMessage: "{count} bookmarks have been shared with you" }, { count: sharedWithMe.length }) : formatMessage({ id: `${index.pluginId}.shared.count`, defaultMessage: "{count} bookmark has been shared with you" }, { count: sharedWithMe.length }) }),
559
601
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { marginTop: 2, children: [...new Map(sharedWithMe.map((b) => [b.createdBy?.id, b.createdBy])).values()].map((creator) => {
560
602
  const creatorBookmarks = sharedWithMe.filter((b) => b.createdBy?.id === creator?.id);
561
603
  return creator && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "center", marginTop: 1, children: [
562
604
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", fontWeight: "semiBold", children: [
563
- creator.firstname || "Unknown",
605
+ creator.firstname || formatMessage({ id: `${index.pluginId}.bookmark.unknown`, defaultMessage: "Unknown" }),
564
606
  " ",
565
607
  creator.lastname || "",
566
608
  ":"
567
609
  ] }),
568
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", marginLeft: 1, children: [
569
- creatorBookmarks.length,
570
- " bookmark",
571
- creatorBookmarks.length > 1 ? "s" : ""
572
- ] })
610
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", marginLeft: 1, children: creatorBookmarks.length > 1 ? formatMessage({ id: `${index.pluginId}.shared.byCreatorPlural`, defaultMessage: "{count} bookmarks" }, { count: creatorBookmarks.length }) : formatMessage({ id: `${index.pluginId}.shared.byCreator`, defaultMessage: "{count} bookmark" }, { count: creatorBookmarks.length }) })
573
611
  ] }, creator.id);
574
612
  }) })
575
613
  ] }) }),
576
614
  !loading && bookmarks.length > 0 && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Box, { children: [
577
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { style: { marginBottom: theme.spacing.md }, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", style: { marginBottom: theme.spacing.md, color: theme.colors.neutral[700] }, children: "🔖 All Available Bookmarks" }) }),
615
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Box, { style: { marginBottom: theme.spacing.md }, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "delta", style: { marginBottom: theme.spacing.md, color: theme.colors.neutral[700] }, children: formatMessage({ id: `${index.pluginId}.allBookmarks.title`, defaultMessage: "🔖 All Available Bookmarks" }) }) }),
578
616
  /* @__PURE__ */ jsxRuntime.jsxs(FilterBar, { children: [
579
617
  /* @__PURE__ */ jsxRuntime.jsxs(SearchInputWrapper, { style: { flex: 1 }, children: [
580
618
  /* @__PURE__ */ jsxRuntime.jsx(SearchIcon, {}),
@@ -583,7 +621,7 @@ const HomePageModern = () => {
583
621
  {
584
622
  value: searchQuery,
585
623
  onChange: (e) => setSearchQuery(e.target.value),
586
- placeholder: "Search by name, description...",
624
+ placeholder: formatMessage({ id: `${index.pluginId}.search.placeholder`, defaultMessage: "Search by name, description..." }),
587
625
  type: "text"
588
626
  }
589
627
  )
@@ -593,12 +631,12 @@ const HomePageModern = () => {
593
631
  {
594
632
  value: filterType,
595
633
  onChange: setFilterType,
596
- placeholder: "Filter",
634
+ placeholder: formatMessage({ id: `${index.pluginId}.filter.placeholder`, defaultMessage: "Filter" }),
597
635
  size: "S",
598
636
  children: [
599
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "all", children: "Show All" }),
600
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "pinned", children: "Pinned Only" }),
601
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "unpinned", children: "Unpinned Only" })
637
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "all", children: formatMessage({ id: `${index.pluginId}.filter.all`, defaultMessage: "Show All" }) }),
638
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "pinned", children: formatMessage({ id: `${index.pluginId}.filter.pinned`, defaultMessage: "Pinned Only" }) }),
639
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "unpinned", children: formatMessage({ id: `${index.pluginId}.filter.unpinned`, defaultMessage: "Unpinned Only" }) })
602
640
  ]
603
641
  }
604
642
  ) }),
@@ -607,13 +645,13 @@ const HomePageModern = () => {
607
645
  {
608
646
  value: entriesPerPage,
609
647
  onChange: setEntriesPerPage,
610
- placeholder: "Entries",
648
+ placeholder: formatMessage({ id: `${index.pluginId}.entries.placeholder`, defaultMessage: "Entries" }),
611
649
  size: "S",
612
650
  children: [
613
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "10", children: "10 entries" }),
614
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "25", children: "25 entries" }),
615
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "50", children: "50 entries" }),
616
- /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "100", children: "100 entries" })
651
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "10", children: formatMessage({ id: `${index.pluginId}.entries.10`, defaultMessage: "10 entries" }) }),
652
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "25", children: formatMessage({ id: `${index.pluginId}.entries.25`, defaultMessage: "25 entries" }) }),
653
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "50", children: formatMessage({ id: `${index.pluginId}.entries.50`, defaultMessage: "50 entries" }) }),
654
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.SingleSelectOption, { value: "100", children: formatMessage({ id: `${index.pluginId}.entries.100`, defaultMessage: "100 entries" }) })
617
655
  ]
618
656
  }
619
657
  ) })
@@ -652,11 +690,17 @@ const HomePageModern = () => {
652
690
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "flex-start", gap: 0, children: [
653
691
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { fontWeight: "semiBold", ellipsis: true, style: { fontSize: "1.125rem", lineHeight: "1.4" }, children: bookmark.name }),
654
692
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { gap: 1, alignItems: "center", children: [
655
- bookmark.createdBy?.id && currentUser?.id && bookmark.createdBy.id === currentUser.id ? /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.primary[600], fontWeight: 500 }, children: "• My Bookmark" }) : /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.neutral[600] }, children: [
656
- "• Shared by ",
657
- bookmark.createdBy?.firstname || "Unknown"
693
+ bookmark.createdBy?.id && currentUser?.id && bookmark.createdBy.id === currentUser.id ? /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.primary[600], fontWeight: 500 }, children: [
694
+ "• ",
695
+ formatMessage({ id: `${index.pluginId}.bookmark.myBookmark`, defaultMessage: "My Bookmark" })
696
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.neutral[600] }, children: [
697
+ "• ",
698
+ formatMessage({ id: `${index.pluginId}.bookmark.sharedBy`, defaultMessage: "Shared by {name}" }, { name: bookmark.createdBy?.firstname || formatMessage({ id: `${index.pluginId}.bookmark.unknown`, defaultMessage: "Unknown" }) })
699
+ ] }),
700
+ bookmark.isPublic && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.success[600], marginLeft: "8px" }, children: [
701
+ "• ",
702
+ formatMessage({ id: `${index.pluginId}.bookmark.public`, defaultMessage: "Public" })
658
703
  ] }),
659
- bookmark.isPublic && /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.success[600], marginLeft: "8px" }, children: "• Public" }),
660
704
  bookmark.sharedWithRoles && bookmark.sharedWithRoles.length > 0 && !bookmark.isPublic && /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.warning[600], marginLeft: "8px" }, children: [
661
705
  "• Roles: ",
662
706
  bookmark.sharedWithRoles.map((roleId) => {
@@ -772,7 +816,7 @@ const HomePageModern = () => {
772
816
  }
773
817
  }
774
818
  ),
775
- /* @__PURE__ */ jsxRuntime.jsx(FloatingEmoji, { children: "" }),
819
+ /* @__PURE__ */ jsxRuntime.jsx(FloatingEmoji, { children: /* @__PURE__ */ jsxRuntime.jsx(icons.Sparkle, { fill: "warning500" }) }),
776
820
  /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { direction: "column", alignItems: "center", gap: 6, style: { position: "relative", zIndex: 1 }, children: [
777
821
  /* @__PURE__ */ jsxRuntime.jsx(
778
822
  designSystem.Box,
@@ -800,10 +844,10 @@ const HomePageModern = () => {
800
844
  color: theme.colors.neutral[800],
801
845
  marginBottom: "8px"
802
846
  },
803
- children: "No bookmarks yet"
847
+ children: formatMessage({ id: `${index.pluginId}.empty.title`, defaultMessage: "No bookmarks yet" })
804
848
  }
805
849
  ),
806
- /* @__PURE__ */ jsxRuntime.jsxs(
850
+ /* @__PURE__ */ jsxRuntime.jsx(
807
851
  designSystem.Typography,
808
852
  {
809
853
  variant: "omega",
@@ -813,11 +857,7 @@ const HomePageModern = () => {
813
857
  maxWidth: "500px",
814
858
  lineHeight: "1.6"
815
859
  },
816
- children: [
817
- "Navigate to any Content Manager view, apply filters, and click ",
818
- /* @__PURE__ */ jsxRuntime.jsx("strong", { children: '"Save Bookmark"' }),
819
- " to create quick access shortcuts"
820
- ]
860
+ children: formatMessage({ id: `${index.pluginId}.empty.description`, defaultMessage: 'Navigate to any Content Manager view, apply filters, and click "Save Bookmark" to create quick access shortcuts' })
821
861
  }
822
862
  )
823
863
  ] })
@@ -1138,7 +1178,7 @@ const LicenseGuard = ({ children }) => {
1138
1178
  marginBottom: "12px",
1139
1179
  display: "block"
1140
1180
  },
1141
- children: "🔐 Activate MagicMark Plugin"
1181
+ children: "Activate MagicMark Plugin"
1142
1182
  }
1143
1183
  ),
1144
1184
  /* @__PURE__ */ jsxRuntime.jsx(
@@ -1196,7 +1236,7 @@ const LicenseGuard = ({ children }) => {
1196
1236
  border: "2px solid #BAE6FD",
1197
1237
  width: "100%"
1198
1238
  },
1199
- children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", style: { fontSize: "13px", lineHeight: "1.6" }, children: useExistingKey ? "🔑 Enter your email and license key to activate." : useAutoCreate && adminUser && adminUser.email ? `✨ Click "Activate" to auto-create a license with your account (${adminUser.email})` : useAutoCreate ? 'Click "Activate" to auto-create a license with your admin account' : "💡 A license will be created with the details below." })
1239
+ children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", style: { fontSize: "13px", lineHeight: "1.6" }, children: useExistingKey ? "Enter your email and license key to activate." : useAutoCreate && adminUser && adminUser.email ? `Click "Activate" to auto-create a license with your account (${adminUser.email})` : useAutoCreate ? 'Click "Activate" to auto-create a license with your admin account' : "A license will be created with the details below." })
1200
1240
  }
1201
1241
  ),
1202
1242
  useExistingKey ? (
@@ -1262,15 +1302,17 @@ const LicenseGuard = ({ children }) => {
1262
1302
  },
1263
1303
  children: [
1264
1304
  /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", fontWeight: "bold", style: { marginBottom: "12px", display: "block" }, children: "Ready to activate with your account:" }),
1265
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", style: { marginBottom: "4px", display: "block" }, children: [
1266
- "👤 ",
1267
- adminUser.firstname || "Admin",
1268
- " ",
1269
- adminUser.lastname || "User"
1305
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "center", gap: 2, style: { marginBottom: "4px" }, children: [
1306
+ /* @__PURE__ */ jsxRuntime.jsx(icons.User, { fill: "neutral700", width: "14px", height: "14px" }),
1307
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", children: [
1308
+ adminUser.firstname || "Admin",
1309
+ " ",
1310
+ adminUser.lastname || "User"
1311
+ ] })
1270
1312
  ] }),
1271
- /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: [
1272
- "📧 ",
1273
- adminUser.email || "Loading..."
1313
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Flex, { alignItems: "center", gap: 2, children: [
1314
+ /* @__PURE__ */ jsxRuntime.jsx(icons.Mail, { fill: "neutral600", width: "14px", height: "14px" }),
1315
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "pi", textColor: "neutral600", children: adminUser.email || "Loading..." })
1274
1316
  ] })
1275
1317
  ]
1276
1318
  }
@@ -4,9 +4,9 @@ import { useIntl } from "react-intl";
4
4
  import { useNavigate } from "react-router-dom";
5
5
  import styled, { keyframes } from "styled-components";
6
6
  import { Flex, Loader, Box, Typography, SingleSelect, SingleSelectOption, Thead, Tr, Th, VisuallyHidden, Tbody, Td, Button, Table, TextInput } from "@strapi/design-system";
7
- import { Book, User, Sparkle, Pin, Link, Eye, Pencil, Trash, Search, Cross, Key, Check } from "@strapi/icons";
7
+ import { Book, User, Sparkle, Pin, Link, Eye, Pencil, Trash, Search, Cross, Key, Mail, Check } from "@strapi/icons";
8
8
  import { useFetchClient, useNotification } from "@strapi/strapi/admin";
9
- import { p as pluginId, C as CreateEditModal } from "./index-BAmZV8aX.mjs";
9
+ import { u as useLicenseInfo, p as pluginId, C as CreateEditModal } from "./index-DdTUt6EH.mjs";
10
10
  const theme = {
11
11
  colors: {
12
12
  primary: {
@@ -29,6 +29,11 @@ const theme = {
29
29
  500: "#F59E0B",
30
30
  600: "#D97706"
31
31
  },
32
+ danger: {
33
+ 100: "#FEE2E2",
34
+ 500: "#EF4444",
35
+ 600: "#DC2626"
36
+ },
32
37
  neutral: {
33
38
  0: "#FFFFFF",
34
39
  50: "#F9FAFB",
@@ -377,6 +382,7 @@ const HomePageModern = () => {
377
382
  const { formatMessage } = useIntl();
378
383
  const navigate = useNavigate();
379
384
  const { get, post, del } = useFetchClient();
385
+ useLicenseInfo();
380
386
  const [currentUser, setCurrentUser] = useState(null);
381
387
  const [bookmarks, setBookmarks] = useState([]);
382
388
  const [loading, setLoading] = useState(false);
@@ -387,11 +393,19 @@ const HomePageModern = () => {
387
393
  const [entriesPerPage, setEntriesPerPage] = useState("10");
388
394
  const [availableRoles, setAvailableRoles] = useState([]);
389
395
  const [availableUsers, setAvailableUsers] = useState([]);
396
+ const [licenseLimits, setLicenseLimits] = useState({
397
+ maxBookmarks: 10,
398
+ currentBookmarks: 0,
399
+ canCreate: true,
400
+ tier: "free",
401
+ features: {}
402
+ });
390
403
  useEffect(() => {
391
404
  fetchBookmarks();
392
405
  fetchCurrentUser();
393
406
  fetchRoles();
394
407
  fetchUsers();
408
+ fetchLicenseLimits();
395
409
  }, []);
396
410
  const fetchRoles = async () => {
397
411
  try {
@@ -435,6 +449,17 @@ const HomePageModern = () => {
435
449
  console.error("[Magic-Mark] Error fetching current user:", error);
436
450
  }
437
451
  };
452
+ const fetchLicenseLimits = async () => {
453
+ try {
454
+ const response = await get(`/${pluginId}/license/limits`);
455
+ if (response.data?.success) {
456
+ setLicenseLimits(response.data.data);
457
+ console.log("[Magic-Mark] License limits loaded:", response.data.data);
458
+ }
459
+ } catch (error) {
460
+ console.error("[Magic-Mark] Error fetching license limits:", error);
461
+ }
462
+ };
438
463
  const fetchBookmarks = async () => {
439
464
  setLoading(true);
440
465
  try {
@@ -486,6 +511,7 @@ const HomePageModern = () => {
486
511
  setShowModal(false);
487
512
  setEditingBookmark(null);
488
513
  fetchBookmarks();
514
+ fetchLicenseLimits();
489
515
  };
490
516
  const handleBookmarkClick = (bookmark) => {
491
517
  if (bookmark.path) {
@@ -525,52 +551,64 @@ const HomePageModern = () => {
525
551
  /* @__PURE__ */ jsxs(StatCard, { $delay: "0.2s", $color: theme.colors.success[500], children: [
526
552
  /* @__PURE__ */ jsx(StatIcon, { className: "stat-icon", $bg: theme.colors.success[100], $color: theme.colors.success[600], children: /* @__PURE__ */ jsx(Sparkle, {}) }),
527
553
  /* @__PURE__ */ jsx(StatValue, { className: "stat-value", children: sharedWithMe.length }),
528
- /* @__PURE__ */ jsx(StatLabel, { children: "Shared with Me" })
554
+ /* @__PURE__ */ jsx(StatLabel, { children: formatMessage({ id: `${pluginId}.stats.shared`, defaultMessage: "Shared with Me" }) })
529
555
  ] }),
530
556
  /* @__PURE__ */ jsxs(StatCard, { $delay: "0.3s", $color: theme.colors.warning[500], children: [
531
557
  /* @__PURE__ */ jsx(StatIcon, { className: "stat-icon", $bg: theme.colors.warning[100], $color: theme.colors.warning[600], children: /* @__PURE__ */ jsx(Pin, {}) }),
532
558
  /* @__PURE__ */ jsx(StatValue, { className: "stat-value", children: pinnedBookmarks.length }),
533
- /* @__PURE__ */ jsx(StatLabel, { children: "Pinned" })
559
+ /* @__PURE__ */ jsx(StatLabel, { children: formatMessage({ id: `${pluginId}.stats.pinned`, defaultMessage: "Pinned" }) })
534
560
  ] }),
535
- /* @__PURE__ */ jsxs(StatCard, { $delay: "0.4s", $color: theme.colors.neutral[600], children: [
536
- /* @__PURE__ */ jsx(StatIcon, { className: "stat-icon", $bg: theme.colors.neutral[100], $color: theme.colors.neutral[600], children: /* @__PURE__ */ jsx(Link, {}) }),
537
- /* @__PURE__ */ jsx(StatValue, { className: "stat-value", children: bookmarks.length }),
538
- /* @__PURE__ */ jsx(StatLabel, { children: "Total Available" })
539
- ] })
561
+ /* @__PURE__ */ jsxs(
562
+ StatCard,
563
+ {
564
+ $delay: "0.4s",
565
+ $color: licenseLimits.canCreate ? theme.colors.neutral[600] : theme.colors.danger[500],
566
+ onClick: () => !licenseLimits.canCreate && navigate(`/settings/${pluginId}/upgrade`),
567
+ style: { cursor: !licenseLimits.canCreate ? "pointer" : "default" },
568
+ children: [
569
+ /* @__PURE__ */ jsx(
570
+ StatIcon,
571
+ {
572
+ className: "stat-icon",
573
+ $bg: licenseLimits.canCreate ? theme.colors.neutral[100] : theme.colors.danger[100],
574
+ $color: licenseLimits.canCreate ? theme.colors.neutral[600] : theme.colors.danger[600],
575
+ children: /* @__PURE__ */ jsx(Link, {})
576
+ }
577
+ ),
578
+ /* @__PURE__ */ jsxs(StatValue, { className: "stat-value", children: [
579
+ licenseLimits.currentBookmarks,
580
+ "/",
581
+ licenseLimits.maxBookmarks === -1 ? "∞" : licenseLimits.maxBookmarks
582
+ ] }),
583
+ /* @__PURE__ */ jsx(StatLabel, { children: licenseLimits.canCreate ? formatMessage({ id: `${pluginId}.stats.limit`, defaultMessage: "Bookmark Limit" }) : formatMessage({ id: `${pluginId}.stats.limitReached`, defaultMessage: "Limit Reached - Upgrade" }) })
584
+ ]
585
+ }
586
+ )
540
587
  ] }),
541
- loading && /* @__PURE__ */ jsx(Flex, { justifyContent: "center", padding: 8, children: /* @__PURE__ */ jsx(Loader, { children: "Loading bookmarks..." }) }),
588
+ loading && /* @__PURE__ */ jsx(Flex, { justifyContent: "center", padding: 8, children: /* @__PURE__ */ jsx(Loader, { children: formatMessage({ id: `${pluginId}.loading`, defaultMessage: "Loading bookmarks..." }) }) }),
542
589
  !loading && sharedWithMe.length > 0 && /* @__PURE__ */ jsx(Box, { marginBottom: 4, children: /* @__PURE__ */ jsxs(Box, { style: {
543
590
  padding: theme.spacing.lg,
544
591
  background: theme.colors.primary[50],
545
592
  borderRadius: theme.borderRadius.lg,
546
593
  border: `1px solid ${theme.colors.primary[200]}`
547
594
  }, children: [
548
- /* @__PURE__ */ jsx(Typography, { variant: "beta", style: { marginBottom: theme.spacing.sm, color: theme.colors.primary[700] }, children: "🤝 Shared with You" }),
549
- /* @__PURE__ */ jsxs(Typography, { variant: "pi", style: { color: theme.colors.primary[600] }, children: [
550
- sharedWithMe.length,
551
- " bookmark",
552
- sharedWithMe.length > 1 ? "s" : "",
553
- " have been shared with you"
554
- ] }),
595
+ /* @__PURE__ */ jsx(Typography, { variant: "beta", style: { marginBottom: theme.spacing.sm, color: theme.colors.primary[700] }, children: formatMessage({ id: `${pluginId}.shared.title`, defaultMessage: "🤝 Shared with You" }) }),
596
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", style: { color: theme.colors.primary[600] }, children: sharedWithMe.length > 1 ? formatMessage({ id: `${pluginId}.shared.countPlural`, defaultMessage: "{count} bookmarks have been shared with you" }, { count: sharedWithMe.length }) : formatMessage({ id: `${pluginId}.shared.count`, defaultMessage: "{count} bookmark has been shared with you" }, { count: sharedWithMe.length }) }),
555
597
  /* @__PURE__ */ jsx(Box, { marginTop: 2, children: [...new Map(sharedWithMe.map((b) => [b.createdBy?.id, b.createdBy])).values()].map((creator) => {
556
598
  const creatorBookmarks = sharedWithMe.filter((b) => b.createdBy?.id === creator?.id);
557
599
  return creator && /* @__PURE__ */ jsxs(Flex, { alignItems: "center", marginTop: 1, children: [
558
600
  /* @__PURE__ */ jsxs(Typography, { variant: "pi", fontWeight: "semiBold", children: [
559
- creator.firstname || "Unknown",
601
+ creator.firstname || formatMessage({ id: `${pluginId}.bookmark.unknown`, defaultMessage: "Unknown" }),
560
602
  " ",
561
603
  creator.lastname || "",
562
604
  ":"
563
605
  ] }),
564
- /* @__PURE__ */ jsxs(Typography, { variant: "pi", marginLeft: 1, children: [
565
- creatorBookmarks.length,
566
- " bookmark",
567
- creatorBookmarks.length > 1 ? "s" : ""
568
- ] })
606
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", marginLeft: 1, children: creatorBookmarks.length > 1 ? formatMessage({ id: `${pluginId}.shared.byCreatorPlural`, defaultMessage: "{count} bookmarks" }, { count: creatorBookmarks.length }) : formatMessage({ id: `${pluginId}.shared.byCreator`, defaultMessage: "{count} bookmark" }, { count: creatorBookmarks.length }) })
569
607
  ] }, creator.id);
570
608
  }) })
571
609
  ] }) }),
572
610
  !loading && bookmarks.length > 0 && /* @__PURE__ */ jsxs(Box, { children: [
573
- /* @__PURE__ */ jsx(Box, { style: { marginBottom: theme.spacing.md }, children: /* @__PURE__ */ jsx(Typography, { variant: "delta", style: { marginBottom: theme.spacing.md, color: theme.colors.neutral[700] }, children: "🔖 All Available Bookmarks" }) }),
611
+ /* @__PURE__ */ jsx(Box, { style: { marginBottom: theme.spacing.md }, children: /* @__PURE__ */ jsx(Typography, { variant: "delta", style: { marginBottom: theme.spacing.md, color: theme.colors.neutral[700] }, children: formatMessage({ id: `${pluginId}.allBookmarks.title`, defaultMessage: "🔖 All Available Bookmarks" }) }) }),
574
612
  /* @__PURE__ */ jsxs(FilterBar, { children: [
575
613
  /* @__PURE__ */ jsxs(SearchInputWrapper, { style: { flex: 1 }, children: [
576
614
  /* @__PURE__ */ jsx(SearchIcon, {}),
@@ -579,7 +617,7 @@ const HomePageModern = () => {
579
617
  {
580
618
  value: searchQuery,
581
619
  onChange: (e) => setSearchQuery(e.target.value),
582
- placeholder: "Search by name, description...",
620
+ placeholder: formatMessage({ id: `${pluginId}.search.placeholder`, defaultMessage: "Search by name, description..." }),
583
621
  type: "text"
584
622
  }
585
623
  )
@@ -589,12 +627,12 @@ const HomePageModern = () => {
589
627
  {
590
628
  value: filterType,
591
629
  onChange: setFilterType,
592
- placeholder: "Filter",
630
+ placeholder: formatMessage({ id: `${pluginId}.filter.placeholder`, defaultMessage: "Filter" }),
593
631
  size: "S",
594
632
  children: [
595
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "all", children: "Show All" }),
596
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "pinned", children: "Pinned Only" }),
597
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "unpinned", children: "Unpinned Only" })
633
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "all", children: formatMessage({ id: `${pluginId}.filter.all`, defaultMessage: "Show All" }) }),
634
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "pinned", children: formatMessage({ id: `${pluginId}.filter.pinned`, defaultMessage: "Pinned Only" }) }),
635
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "unpinned", children: formatMessage({ id: `${pluginId}.filter.unpinned`, defaultMessage: "Unpinned Only" }) })
598
636
  ]
599
637
  }
600
638
  ) }),
@@ -603,13 +641,13 @@ const HomePageModern = () => {
603
641
  {
604
642
  value: entriesPerPage,
605
643
  onChange: setEntriesPerPage,
606
- placeholder: "Entries",
644
+ placeholder: formatMessage({ id: `${pluginId}.entries.placeholder`, defaultMessage: "Entries" }),
607
645
  size: "S",
608
646
  children: [
609
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "10", children: "10 entries" }),
610
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "25", children: "25 entries" }),
611
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "50", children: "50 entries" }),
612
- /* @__PURE__ */ jsx(SingleSelectOption, { value: "100", children: "100 entries" })
647
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "10", children: formatMessage({ id: `${pluginId}.entries.10`, defaultMessage: "10 entries" }) }),
648
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "25", children: formatMessage({ id: `${pluginId}.entries.25`, defaultMessage: "25 entries" }) }),
649
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "50", children: formatMessage({ id: `${pluginId}.entries.50`, defaultMessage: "50 entries" }) }),
650
+ /* @__PURE__ */ jsx(SingleSelectOption, { value: "100", children: formatMessage({ id: `${pluginId}.entries.100`, defaultMessage: "100 entries" }) })
613
651
  ]
614
652
  }
615
653
  ) })
@@ -648,11 +686,17 @@ const HomePageModern = () => {
648
686
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "flex-start", gap: 0, children: [
649
687
  /* @__PURE__ */ jsx(Typography, { fontWeight: "semiBold", ellipsis: true, style: { fontSize: "1.125rem", lineHeight: "1.4" }, children: bookmark.name }),
650
688
  /* @__PURE__ */ jsxs(Flex, { gap: 1, alignItems: "center", children: [
651
- bookmark.createdBy?.id && currentUser?.id && bookmark.createdBy.id === currentUser.id ? /* @__PURE__ */ jsx(Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.primary[600], fontWeight: 500 }, children: "• My Bookmark" }) : /* @__PURE__ */ jsxs(Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.neutral[600] }, children: [
652
- "• Shared by ",
653
- bookmark.createdBy?.firstname || "Unknown"
689
+ bookmark.createdBy?.id && currentUser?.id && bookmark.createdBy.id === currentUser.id ? /* @__PURE__ */ jsxs(Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.primary[600], fontWeight: 500 }, children: [
690
+ "• ",
691
+ formatMessage({ id: `${pluginId}.bookmark.myBookmark`, defaultMessage: "My Bookmark" })
692
+ ] }) : /* @__PURE__ */ jsxs(Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.neutral[600] }, children: [
693
+ "• ",
694
+ formatMessage({ id: `${pluginId}.bookmark.sharedBy`, defaultMessage: "Shared by {name}" }, { name: bookmark.createdBy?.firstname || formatMessage({ id: `${pluginId}.bookmark.unknown`, defaultMessage: "Unknown" }) })
695
+ ] }),
696
+ bookmark.isPublic && /* @__PURE__ */ jsxs(Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.success[600], marginLeft: "8px" }, children: [
697
+ "• ",
698
+ formatMessage({ id: `${pluginId}.bookmark.public`, defaultMessage: "Public" })
654
699
  ] }),
655
- bookmark.isPublic && /* @__PURE__ */ jsx(Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.success[600], marginLeft: "8px" }, children: "• Public" }),
656
700
  bookmark.sharedWithRoles && bookmark.sharedWithRoles.length > 0 && !bookmark.isPublic && /* @__PURE__ */ jsxs(Typography, { variant: "pi", style: { fontSize: "0.75rem", color: theme.colors.warning[600], marginLeft: "8px" }, children: [
657
701
  "• Roles: ",
658
702
  bookmark.sharedWithRoles.map((roleId) => {
@@ -768,7 +812,7 @@ const HomePageModern = () => {
768
812
  }
769
813
  }
770
814
  ),
771
- /* @__PURE__ */ jsx(FloatingEmoji, { children: "" }),
815
+ /* @__PURE__ */ jsx(FloatingEmoji, { children: /* @__PURE__ */ jsx(Sparkle, { fill: "warning500" }) }),
772
816
  /* @__PURE__ */ jsxs(Flex, { direction: "column", alignItems: "center", gap: 6, style: { position: "relative", zIndex: 1 }, children: [
773
817
  /* @__PURE__ */ jsx(
774
818
  Box,
@@ -796,10 +840,10 @@ const HomePageModern = () => {
796
840
  color: theme.colors.neutral[800],
797
841
  marginBottom: "8px"
798
842
  },
799
- children: "No bookmarks yet"
843
+ children: formatMessage({ id: `${pluginId}.empty.title`, defaultMessage: "No bookmarks yet" })
800
844
  }
801
845
  ),
802
- /* @__PURE__ */ jsxs(
846
+ /* @__PURE__ */ jsx(
803
847
  Typography,
804
848
  {
805
849
  variant: "omega",
@@ -809,11 +853,7 @@ const HomePageModern = () => {
809
853
  maxWidth: "500px",
810
854
  lineHeight: "1.6"
811
855
  },
812
- children: [
813
- "Navigate to any Content Manager view, apply filters, and click ",
814
- /* @__PURE__ */ jsx("strong", { children: '"Save Bookmark"' }),
815
- " to create quick access shortcuts"
816
- ]
856
+ children: formatMessage({ id: `${pluginId}.empty.description`, defaultMessage: 'Navigate to any Content Manager view, apply filters, and click "Save Bookmark" to create quick access shortcuts' })
817
857
  }
818
858
  )
819
859
  ] })
@@ -1134,7 +1174,7 @@ const LicenseGuard = ({ children }) => {
1134
1174
  marginBottom: "12px",
1135
1175
  display: "block"
1136
1176
  },
1137
- children: "🔐 Activate MagicMark Plugin"
1177
+ children: "Activate MagicMark Plugin"
1138
1178
  }
1139
1179
  ),
1140
1180
  /* @__PURE__ */ jsx(
@@ -1192,7 +1232,7 @@ const LicenseGuard = ({ children }) => {
1192
1232
  border: "2px solid #BAE6FD",
1193
1233
  width: "100%"
1194
1234
  },
1195
- children: /* @__PURE__ */ jsx(Typography, { variant: "omega", style: { fontSize: "13px", lineHeight: "1.6" }, children: useExistingKey ? "🔑 Enter your email and license key to activate." : useAutoCreate && adminUser && adminUser.email ? `✨ Click "Activate" to auto-create a license with your account (${adminUser.email})` : useAutoCreate ? 'Click "Activate" to auto-create a license with your admin account' : "💡 A license will be created with the details below." })
1235
+ children: /* @__PURE__ */ jsx(Typography, { variant: "omega", style: { fontSize: "13px", lineHeight: "1.6" }, children: useExistingKey ? "Enter your email and license key to activate." : useAutoCreate && adminUser && adminUser.email ? `Click "Activate" to auto-create a license with your account (${adminUser.email})` : useAutoCreate ? 'Click "Activate" to auto-create a license with your admin account' : "A license will be created with the details below." })
1196
1236
  }
1197
1237
  ),
1198
1238
  useExistingKey ? (
@@ -1258,15 +1298,17 @@ const LicenseGuard = ({ children }) => {
1258
1298
  },
1259
1299
  children: [
1260
1300
  /* @__PURE__ */ jsx(Typography, { variant: "omega", fontWeight: "bold", style: { marginBottom: "12px", display: "block" }, children: "Ready to activate with your account:" }),
1261
- /* @__PURE__ */ jsxs(Typography, { variant: "pi", style: { marginBottom: "4px", display: "block" }, children: [
1262
- "👤 ",
1263
- adminUser.firstname || "Admin",
1264
- " ",
1265
- adminUser.lastname || "User"
1301
+ /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, style: { marginBottom: "4px" }, children: [
1302
+ /* @__PURE__ */ jsx(User, { fill: "neutral700", width: "14px", height: "14px" }),
1303
+ /* @__PURE__ */ jsxs(Typography, { variant: "pi", children: [
1304
+ adminUser.firstname || "Admin",
1305
+ " ",
1306
+ adminUser.lastname || "User"
1307
+ ] })
1266
1308
  ] }),
1267
- /* @__PURE__ */ jsxs(Typography, { variant: "pi", textColor: "neutral600", children: [
1268
- "📧 ",
1269
- adminUser.email || "Loading..."
1309
+ /* @__PURE__ */ jsxs(Flex, { alignItems: "center", gap: 2, children: [
1310
+ /* @__PURE__ */ jsx(Mail, { fill: "neutral600", width: "14px", height: "14px" }),
1311
+ /* @__PURE__ */ jsx(Typography, { variant: "pi", textColor: "neutral600", children: adminUser.email || "Loading..." })
1270
1312
  ] })
1271
1313
  ]
1272
1314
  }