@parhelia/core 0.1.12112 → 0.1.12175

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 (121) hide show
  1. package/dist/components/ActionButton.d.ts +1 -1
  2. package/dist/components/ActionButton.js.map +1 -1
  3. package/dist/components/ui/button.d.ts +2 -2
  4. package/dist/components/ui/button.js +1 -0
  5. package/dist/components/ui/button.js.map +1 -1
  6. package/dist/components/ui/dialog.js +1 -1
  7. package/dist/components/ui/dialog.js.map +1 -1
  8. package/dist/editor/ConcurrentUserLimitDialog.d.ts +11 -0
  9. package/dist/editor/ConcurrentUserLimitDialog.js +72 -0
  10. package/dist/editor/ConcurrentUserLimitDialog.js.map +1 -0
  11. package/dist/editor/ContentTree.js +17 -15
  12. package/dist/editor/ContentTree.js.map +1 -1
  13. package/dist/editor/Editor.js +25 -4
  14. package/dist/editor/Editor.js.map +1 -1
  15. package/dist/editor/MainLayout.js +1 -1
  16. package/dist/editor/MainLayout.js.map +1 -1
  17. package/dist/editor/QuickItemSwitcher.js +21 -21
  18. package/dist/editor/QuickItemSwitcher.js.map +1 -1
  19. package/dist/editor/ai/AgentTerminal.js +256 -81
  20. package/dist/editor/ai/AgentTerminal.js.map +1 -1
  21. package/dist/editor/ai/AgentTerminalStatusBar.d.ts +1 -3
  22. package/dist/editor/ai/AgentTerminalStatusBar.js +3 -15
  23. package/dist/editor/ai/AgentTerminalStatusBar.js.map +1 -1
  24. package/dist/editor/ai/ContextInfoBar.d.ts +1 -3
  25. package/dist/editor/ai/ContextInfoBar.js +6 -148
  26. package/dist/editor/ai/ContextInfoBar.js.map +1 -1
  27. package/dist/editor/ai/InlineAiTrigger.js +46 -2
  28. package/dist/editor/ai/InlineAiTrigger.js.map +1 -1
  29. package/dist/editor/client/AboutDialog.js +4 -2
  30. package/dist/editor/client/AboutDialog.js.map +1 -1
  31. package/dist/editor/client/EditorShell.js +30 -5
  32. package/dist/editor/client/EditorShell.js.map +1 -1
  33. package/dist/editor/client/hooks/useEditorWebSocket.d.ts +6 -0
  34. package/dist/editor/client/hooks/useEditorWebSocket.js +80 -3
  35. package/dist/editor/client/hooks/useEditorWebSocket.js.map +1 -1
  36. package/dist/editor/field-types/RichTextEditor.js +4 -2
  37. package/dist/editor/field-types/RichTextEditor.js.map +1 -1
  38. package/dist/editor/field-types/RichTextEditorComponent.js +37 -3
  39. package/dist/editor/field-types/RichTextEditorComponent.js.map +1 -1
  40. package/dist/editor/field-types/richtext/components/ReactSlate.d.ts +2 -0
  41. package/dist/editor/field-types/richtext/components/ReactSlate.js +15 -2
  42. package/dist/editor/field-types/richtext/components/ReactSlate.js.map +1 -1
  43. package/dist/editor/field-types/richtext/contextMenuFactory.d.ts +13 -0
  44. package/dist/editor/field-types/richtext/contextMenuFactory.js +108 -3
  45. package/dist/editor/field-types/richtext/contextMenuFactory.js.map +1 -1
  46. package/dist/editor/field-types/richtext/types.d.ts +1 -0
  47. package/dist/editor/field-types/richtext/types.js.map +1 -1
  48. package/dist/editor/media-selector/MediaFolderBrowser.js +1 -1
  49. package/dist/editor/media-selector/MediaFolderBrowser.js.map +1 -1
  50. package/dist/editor/menubar/GenericToolbar.js +1 -1
  51. package/dist/editor/menubar/GenericToolbar.js.map +1 -1
  52. package/dist/editor/reviews/Comment.js +11 -1
  53. package/dist/editor/reviews/Comment.js.map +1 -1
  54. package/dist/editor/reviews/CommentDisplayPopover.js +3 -1
  55. package/dist/editor/reviews/CommentDisplayPopover.js.map +1 -1
  56. package/dist/editor/reviews/CreateReviewDetailsStep.d.ts +3 -1
  57. package/dist/editor/reviews/CreateReviewDetailsStep.js +2 -2
  58. package/dist/editor/reviews/CreateReviewDetailsStep.js.map +1 -1
  59. package/dist/editor/reviews/CreateReviewDialog.js +4 -1
  60. package/dist/editor/reviews/CreateReviewDialog.js.map +1 -1
  61. package/dist/editor/reviews/EditReviewSettingsDialog.js +6 -4
  62. package/dist/editor/reviews/EditReviewSettingsDialog.js.map +1 -1
  63. package/dist/editor/services/contentService.d.ts +1 -1
  64. package/dist/editor/services/contentService.js +2 -1
  65. package/dist/editor/services/contentService.js.map +1 -1
  66. package/dist/editor/services/editService.d.ts +12 -1
  67. package/dist/editor/services/editService.js +31 -2
  68. package/dist/editor/services/editService.js.map +1 -1
  69. package/dist/editor/services/reviewsService.d.ts +1 -1
  70. package/dist/editor/services/reviewsService.js +2 -1
  71. package/dist/editor/services/reviewsService.js.map +1 -1
  72. package/dist/editor/services/serviceHelper.js +38 -0
  73. package/dist/editor/services/serviceHelper.js.map +1 -1
  74. package/dist/editor/settings/About.js +260 -3
  75. package/dist/editor/settings/About.js.map +1 -1
  76. package/dist/editor/settings/status/coreStatusChecks.js +10 -2
  77. package/dist/editor/settings/status/coreStatusChecks.js.map +1 -1
  78. package/dist/editor/ui/SimpleTabs.js +1 -1
  79. package/dist/editor/ui/SimpleTabs.js.map +1 -1
  80. package/dist/editor/views/MediaFolderEditView.js +1 -1
  81. package/dist/editor/views/MediaFolderEditView.js.map +1 -1
  82. package/dist/index.d.ts +2 -0
  83. package/dist/index.js +2 -0
  84. package/dist/index.js.map +1 -1
  85. package/dist/licensing/EmailEntry.d.ts +6 -0
  86. package/dist/licensing/EmailEntry.js +30 -0
  87. package/dist/licensing/EmailEntry.js.map +1 -0
  88. package/dist/licensing/FeatureGate.d.ts +75 -0
  89. package/dist/licensing/FeatureGate.js +114 -0
  90. package/dist/licensing/FeatureGate.js.map +1 -0
  91. package/dist/licensing/LicenseActivationForm.d.ts +8 -0
  92. package/dist/licensing/LicenseActivationForm.js +27 -0
  93. package/dist/licensing/LicenseActivationForm.js.map +1 -0
  94. package/dist/licensing/LicenseCodeEntry.d.ts +8 -0
  95. package/dist/licensing/LicenseCodeEntry.js +70 -0
  96. package/dist/licensing/LicenseCodeEntry.js.map +1 -0
  97. package/dist/licensing/LicenseContext.d.ts +45 -0
  98. package/dist/licensing/LicenseContext.js +287 -0
  99. package/dist/licensing/LicenseContext.js.map +1 -0
  100. package/dist/licensing/LicenseOverlay.d.ts +1 -0
  101. package/dist/licensing/LicenseOverlay.js +17 -0
  102. package/dist/licensing/LicenseOverlay.js.map +1 -0
  103. package/dist/licensing/index.d.ts +7 -0
  104. package/dist/licensing/index.js +8 -0
  105. package/dist/licensing/index.js.map +1 -0
  106. package/dist/licensing/licenseService.d.ts +28 -0
  107. package/dist/licensing/licenseService.js +110 -0
  108. package/dist/licensing/licenseService.js.map +1 -0
  109. package/dist/licensing/types.d.ts +85 -0
  110. package/dist/licensing/types.js +12 -0
  111. package/dist/licensing/types.js.map +1 -0
  112. package/dist/revision.d.ts +2 -2
  113. package/dist/revision.js +2 -2
  114. package/dist/splash-screen/ModernSplashScreen.js +2 -4
  115. package/dist/splash-screen/ModernSplashScreen.js.map +1 -1
  116. package/dist/splash-screen/NewPage.js +13 -31
  117. package/dist/splash-screen/NewPage.js.map +1 -1
  118. package/dist/splash-screen/ParheliaAssistantChat.js +12 -1
  119. package/dist/splash-screen/ParheliaAssistantChat.js.map +1 -1
  120. package/dist/types.d.ts +2 -0
  121. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -60,4 +60,6 @@ export { default as ItemSearch } from "./editor/ui/ItemSearch";
60
60
  export { default as TreeListSelector } from "./editor/ui/TreeListSelector";
61
61
  export { PerfectTree } from "./editor/ui/PerfectTree";
62
62
  export { ItemConfigPanel } from "./editor/settings/panels/ItemConfigPanel";
63
+ // Licensing exports
64
+ export { LicenseProvider, useLicense, useLicenseOptional, LicenseOverlay, FeatureGate, useFeature, useLicenseStatus, LicenseBadge, UpgradePrompt, LicenseFeatures, hasFeature, } from "./licensing";
63
65
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAE/B,cAAc,SAAS,CAAC;AACxB,OAAO,EACL,mBAAmB,EACnB,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGlE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EACL,aAAa,EACb,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EACL,MAAM,EACN,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qCAAqC,CAAC;AAExE,OAAO,EACL,WAAW,EACX,iBAAiB,EACjB,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,iBAAiB,EACjB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAChD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAKpE,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAErE,OAAO,EACL,YAAY,EACZ,uBAAuB,GACxB,MAAM,kCAAkC,CAAC;AAG1C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAEhD,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAE1E,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,EACL,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,gDAAgD,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,EACL,aAAa,EACb,2BAA2B,EAC3B,aAAa,GACd,MAAM,6BAA6B,CAAC;AAErC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7E,OAAO,EAAE,oBAAoB,EAAE,MAAM,yBAAyB,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAOzD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EACL,OAAO,EACP,cAAc,EACd,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,+DAA+D,CAAC;AAErG,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAiB5D,0DAA0D;AAC1D,OAAO,EACL,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAC/D,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAC3E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAE,MAAM,0CAA0C,CAAC;AAE3E,oBAAoB;AACpB,OAAO,EACL,eAAe,EACf,UAAU,EACV,kBAAkB,EAClB,cAAc,EACd,WAAW,EACX,UAAU,EACV,gBAAgB,EAChB,YAAY,EACZ,aAAa,EACb,eAAe,EACf,UAAU,GACX,MAAM,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ interface EmailEntryProps {
2
+ onSubmit: (email: string) => Promise<void>;
3
+ error?: string;
4
+ }
5
+ export declare function EmailEntry({ onSubmit, error }: EmailEntryProps): import("react/jsx-runtime").JSX.Element;
6
+ export {};
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ export function EmailEntry({ onSubmit, error }) {
5
+ const [email, setEmail] = useState("");
6
+ const [isSubmitting, setIsSubmitting] = useState(false);
7
+ const [validationError, setValidationError] = useState();
8
+ const handleSubmit = async (e) => {
9
+ e.preventDefault();
10
+ setValidationError(undefined);
11
+ // Basic validation
12
+ if (!email.trim()) {
13
+ setValidationError("Email address is required");
14
+ return;
15
+ }
16
+ if (!email.includes("@") || !email.includes(".")) {
17
+ setValidationError("Please enter a valid email address");
18
+ return;
19
+ }
20
+ setIsSubmitting(true);
21
+ try {
22
+ await onSubmit(email.trim());
23
+ }
24
+ finally {
25
+ setIsSubmitting(false);
26
+ }
27
+ };
28
+ return (_jsxs("div", { children: [_jsx("h2", { className: "text-xl font-semibold text-white text-center", children: "Activate Your License" }), _jsx("p", { className: "mt-2 text-slate-400 text-center", children: "Enter your email address to get started." }), _jsxs("form", { onSubmit: handleSubmit, className: "mt-6 space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "email", className: "block text-sm font-medium text-slate-300", children: "Email Address" }), _jsx("input", { type: "email", id: "email", "data-testid": "license-email-input", value: email, onChange: (e) => setEmail(e.target.value), className: "mt-1 block w-full rounded-lg border border-slate-600 bg-slate-700/50 px-4 py-3 text-white placeholder-slate-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20", placeholder: "you@company.com", required: true, disabled: isSubmitting, autoFocus: true })] }), (error || validationError) && (_jsx("div", { className: "rounded-lg bg-red-500/10 border border-red-500/20 p-3 text-sm text-red-400", children: validationError || error })), _jsx("button", { type: "submit", disabled: isSubmitting, className: "w-full rounded-lg bg-blue-600 py-3 font-medium text-white transition-all hover:bg-blue-700 disabled:cursor-not-allowed disabled:opacity-50", children: isSubmitting ? (_jsxs("span", { className: "flex items-center justify-center gap-2", children: [_jsxs("svg", { className: "h-5 w-5 animate-spin", viewBox: "0 0 24 24", fill: "none", children: [_jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), _jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })] }), "Checking..."] })) : ("Continue") })] }), _jsxs("p", { className: "mt-6 text-center text-xs text-slate-500", children: ["By continuing, you agree to our", " ", _jsx("a", { href: "#", className: "text-blue-400 hover:underline", children: "Terms of Service" }), " ", "and", " ", _jsx("a", { href: "#", className: "text-blue-400 hover:underline", children: "Privacy Policy" })] })] }));
29
+ }
30
+ //# sourceMappingURL=EmailEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EmailEntry.js","sourceRoot":"","sources":["../../src/licensing/EmailEntry.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,75 @@
1
+ import { ReactNode } from "react";
2
+ interface FeatureGateProps {
3
+ /** Feature(s) required to show the children. Can be a string or array of strings. */
4
+ feature: string | string[];
5
+ /** If true, ALL features must be present. If false (default), ANY feature grants access. */
6
+ requireAll?: boolean;
7
+ /** Content to show when the feature is available */
8
+ children: ReactNode;
9
+ /** Optional content to show when the feature is not available */
10
+ fallback?: ReactNode;
11
+ /** If true, shows children even when license context is not available (useful for dev) */
12
+ allowWhenNoContext?: boolean;
13
+ }
14
+ /**
15
+ * Component that conditionally renders children based on license features.
16
+ *
17
+ * @example
18
+ * // Single feature check
19
+ * <FeatureGate feature="ai">
20
+ * <AIAssistantPanel />
21
+ * </FeatureGate>
22
+ *
23
+ * @example
24
+ * // Multiple features (any)
25
+ * <FeatureGate feature={["ai", "translation"]}>
26
+ * <AdvancedTools />
27
+ * </FeatureGate>
28
+ *
29
+ * @example
30
+ * // Multiple features (all required)
31
+ * <FeatureGate feature={["ai", "reviews"]} requireAll>
32
+ * <AIReviewsFeature />
33
+ * </FeatureGate>
34
+ *
35
+ * @example
36
+ * // With fallback
37
+ * <FeatureGate feature="page-wizard" fallback={<UpgradePrompt />}>
38
+ * <PageWizard />
39
+ * </FeatureGate>
40
+ */
41
+ export declare function FeatureGate({ feature, requireAll, children, fallback, allowWhenNoContext, }: FeatureGateProps): import("react/jsx-runtime").JSX.Element;
42
+ /**
43
+ * Hook to check if a feature is available
44
+ *
45
+ * @example
46
+ * const canUseAI = useFeature("ai");
47
+ * const canUseAdvanced = useFeature(["ai", "translation"], { requireAll: true });
48
+ */
49
+ export declare function useFeature(feature: string | string[], options?: {
50
+ requireAll?: boolean;
51
+ }): boolean;
52
+ /**
53
+ * Hook to get the current license status for display purposes
54
+ */
55
+ export declare function useLicenseStatus(): {
56
+ isLicensed: boolean;
57
+ licenseType: "trial" | "purchased" | null;
58
+ features: string[];
59
+ daysRemaining: number | undefined;
60
+ expiresAt: Date | undefined;
61
+ isLoading: boolean;
62
+ };
63
+ /**
64
+ * Upgrade prompt component shown when a feature is not available
65
+ */
66
+ interface UpgradePromptProps {
67
+ feature: string;
68
+ className?: string;
69
+ }
70
+ export declare function UpgradePrompt({ feature, className }: UpgradePromptProps): import("react/jsx-runtime").JSX.Element;
71
+ /**
72
+ * Badge showing the current license status
73
+ */
74
+ export declare function LicenseBadge(): import("react/jsx-runtime").JSX.Element | null;
75
+ export {};
@@ -0,0 +1,114 @@
1
+ "use client";
2
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useLicenseOptional } from "./LicenseContext";
4
+ import { LicenseFeatures } from "./types";
5
+ /**
6
+ * Component that conditionally renders children based on license features.
7
+ *
8
+ * @example
9
+ * // Single feature check
10
+ * <FeatureGate feature="ai">
11
+ * <AIAssistantPanel />
12
+ * </FeatureGate>
13
+ *
14
+ * @example
15
+ * // Multiple features (any)
16
+ * <FeatureGate feature={["ai", "translation"]}>
17
+ * <AdvancedTools />
18
+ * </FeatureGate>
19
+ *
20
+ * @example
21
+ * // Multiple features (all required)
22
+ * <FeatureGate feature={["ai", "reviews"]} requireAll>
23
+ * <AIReviewsFeature />
24
+ * </FeatureGate>
25
+ *
26
+ * @example
27
+ * // With fallback
28
+ * <FeatureGate feature="page-wizard" fallback={<UpgradePrompt />}>
29
+ * <PageWizard />
30
+ * </FeatureGate>
31
+ */
32
+ export function FeatureGate({ feature, requireAll = false, children, fallback = null, allowWhenNoContext = false, }) {
33
+ const license = useLicenseOptional();
34
+ // If no license context and we allow it, show children
35
+ if (!license && allowWhenNoContext) {
36
+ return _jsx(_Fragment, { children: children });
37
+ }
38
+ // If no license context, don't show gated content
39
+ if (!license) {
40
+ return _jsx(_Fragment, { children: fallback });
41
+ }
42
+ const features = Array.isArray(feature) ? feature : [feature];
43
+ let hasAccess;
44
+ if (requireAll) {
45
+ hasAccess = features.every((f) => license.hasFeature(f));
46
+ }
47
+ else {
48
+ hasAccess = features.some((f) => license.hasFeature(f));
49
+ }
50
+ return _jsx(_Fragment, { children: hasAccess ? children : fallback });
51
+ }
52
+ /**
53
+ * Hook to check if a feature is available
54
+ *
55
+ * @example
56
+ * const canUseAI = useFeature("ai");
57
+ * const canUseAdvanced = useFeature(["ai", "translation"], { requireAll: true });
58
+ */
59
+ export function useFeature(feature, options) {
60
+ const license = useLicenseOptional();
61
+ if (!license) {
62
+ return false;
63
+ }
64
+ const features = Array.isArray(feature) ? feature : [feature];
65
+ if (options?.requireAll) {
66
+ return features.every((f) => license.hasFeature(f));
67
+ }
68
+ return features.some((f) => license.hasFeature(f));
69
+ }
70
+ /**
71
+ * Hook to get the current license status for display purposes
72
+ */
73
+ export function useLicenseStatus() {
74
+ const license = useLicenseOptional();
75
+ return {
76
+ isLicensed: license?.isLicensed ?? false,
77
+ licenseType: license?.licenseType ?? null,
78
+ features: license?.features ?? [],
79
+ daysRemaining: license?.daysRemaining,
80
+ expiresAt: license?.expiresAt,
81
+ isLoading: license?.isLoading ?? true,
82
+ };
83
+ }
84
+ export function UpgradePrompt({ feature, className = "" }) {
85
+ const featureNames = {
86
+ [LicenseFeatures.AI]: "AI Assistant",
87
+ [LicenseFeatures.TRANSLATION]: "Translation",
88
+ [LicenseFeatures.PAGE_WIZARD]: "Page Wizard",
89
+ [LicenseFeatures.REVIEWS]: "Reviews & Feedback",
90
+ [LicenseFeatures.FULL]: "Full Access",
91
+ };
92
+ const displayName = featureNames[feature] || feature;
93
+ return (_jsx("div", { className: `rounded-lg border border-amber-200 bg-amber-50 p-4 ${className}`, children: _jsxs("div", { className: "flex items-start gap-3", children: [_jsx("div", { className: "flex-shrink-0", children: _jsx("svg", { className: "h-5 w-5 text-amber-500", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor", children: _jsx("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 15v2m0 0v2m0-2h2m-2 0H10m5-6a3 3 0 11-6 0 3 3 0 016 0z" }) }) }), _jsxs("div", { className: "flex-1", children: [_jsxs("h4", { className: "text-sm font-medium text-amber-800", children: [displayName, " requires an upgrade"] }), _jsx("p", { className: "mt-1 text-sm text-amber-700", children: "This feature is not available with your current license. Contact sales to upgrade." })] })] }) }));
94
+ }
95
+ /**
96
+ * Badge showing the current license status
97
+ */
98
+ export function LicenseBadge() {
99
+ const { isLicensed, licenseType, daysRemaining, isLoading } = useLicenseStatus();
100
+ if (isLoading) {
101
+ return null;
102
+ }
103
+ if (!isLicensed) {
104
+ return (_jsx("span", { className: "inline-flex items-center rounded-full bg-red-100 px-2.5 py-0.5 text-xs font-medium text-red-800", children: "Unlicensed" }));
105
+ }
106
+ if (licenseType === "trial") {
107
+ const isExpiringSoon = daysRemaining !== undefined && daysRemaining <= 7;
108
+ return (_jsxs("span", { className: `inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium ${isExpiringSoon
109
+ ? "bg-amber-100 text-amber-800"
110
+ : "bg-blue-100 text-blue-800"}`, children: ["Trial", daysRemaining !== undefined ? ` (${daysRemaining}d)` : ""] }));
111
+ }
112
+ return (_jsx("span", { className: "inline-flex items-center rounded-full bg-green-100 px-2.5 py-0.5 text-xs font-medium text-green-800", children: "Licensed" }));
113
+ }
114
+ //# sourceMappingURL=FeatureGate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FeatureGate.js","sourceRoot":"","sources":["../../src/licensing/FeatureGate.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface LicenseActivationFormProps {
2
+ email: string;
3
+ onSubmit: (email: string, name: string, companyName: string) => Promise<void>;
4
+ onBack?: () => void;
5
+ error?: string;
6
+ }
7
+ export declare function LicenseActivationForm({ email, onSubmit, onBack, error, }: LicenseActivationFormProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,27 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState } from "react";
4
+ export function LicenseActivationForm({ email, onSubmit, onBack, error, }) {
5
+ const [name, setName] = useState("");
6
+ const [companyName, setCompanyName] = useState("");
7
+ const [isSubmitting, setIsSubmitting] = useState(false);
8
+ const [validationError, setValidationError] = useState();
9
+ const handleSubmit = async (e) => {
10
+ e.preventDefault();
11
+ setValidationError(undefined);
12
+ // Basic validation
13
+ if (!name.trim() || !companyName.trim()) {
14
+ setValidationError("All fields are required");
15
+ return;
16
+ }
17
+ setIsSubmitting(true);
18
+ try {
19
+ await onSubmit(email.trim(), name.trim(), companyName.trim());
20
+ }
21
+ finally {
22
+ setIsSubmitting(false);
23
+ }
24
+ };
25
+ return (_jsxs("div", { children: [_jsx("h2", { className: "text-xl font-semibold text-white text-center", children: "Start Your Trial" }), _jsx("p", { className: "mt-2 text-slate-400 text-center", children: "Enter your details to start a free trial." }), _jsxs("p", { className: "mt-1 text-sm text-slate-500 text-center", children: ["Email: ", _jsx("span", { className: "font-medium text-slate-400", children: email })] }), _jsxs("form", { onSubmit: handleSubmit, className: "mt-6 space-y-4", children: [_jsxs("div", { children: [_jsx("label", { htmlFor: "name", className: "block text-sm font-medium text-slate-300", children: "Your Name" }), _jsx("input", { type: "text", id: "name", value: name, onChange: (e) => setName(e.target.value), className: "mt-1 block w-full rounded-lg border border-slate-600 bg-slate-700/50 px-4 py-3 text-white placeholder-slate-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20", placeholder: "John Smith", required: true, disabled: isSubmitting, autoFocus: true })] }), _jsxs("div", { children: [_jsx("label", { htmlFor: "company", className: "block text-sm font-medium text-slate-300", children: "Company Name" }), _jsx("input", { type: "text", id: "company", value: companyName, onChange: (e) => setCompanyName(e.target.value), className: "mt-1 block w-full rounded-lg border border-slate-600 bg-slate-700/50 px-4 py-3 text-white placeholder-slate-400 focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20", placeholder: "Acme Corp", required: true, disabled: isSubmitting })] }), (error || validationError) && (_jsx("div", { className: "rounded-lg bg-red-500/10 border border-red-500/20 p-3 text-sm text-red-400", children: validationError || error })), _jsxs("div", { className: "flex gap-3", children: [onBack && (_jsx("button", { type: "button", onClick: onBack, disabled: isSubmitting, className: "flex-1 rounded-lg border border-slate-600 py-3 font-medium text-slate-300 transition-colors hover:bg-slate-700/50 disabled:opacity-50", children: "Back" })), _jsx("button", { type: "submit", disabled: isSubmitting, className: `${onBack ? "flex-1" : "w-full"} rounded-lg bg-blue-600 py-3 font-medium text-white transition-all hover:bg-blue-700 disabled:cursor-not-allowed disabled:opacity-50`, children: isSubmitting ? (_jsxs("span", { className: "flex items-center justify-center gap-2", children: [_jsxs("svg", { className: "h-5 w-5 animate-spin", viewBox: "0 0 24 24", fill: "none", children: [_jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), _jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })] }), "Processing..."] })) : ("Start Trial") })] })] }), _jsxs("p", { className: "mt-6 text-center text-xs text-slate-500", children: ["By continuing, you agree to our", " ", _jsx("a", { href: "#", className: "text-blue-400 hover:underline", children: "Terms of Service" }), " ", "and", " ", _jsx("a", { href: "#", className: "text-blue-400 hover:underline", children: "Privacy Policy" })] })] }));
26
+ }
27
+ //# sourceMappingURL=LicenseActivationForm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LicenseActivationForm.js","sourceRoot":"","sources":["../../src/licensing/LicenseActivationForm.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ interface LicenseCodeEntryProps {
2
+ email: string;
3
+ onSubmit: (code: string) => Promise<void>;
4
+ onBack: () => void;
5
+ error?: string;
6
+ }
7
+ export declare function LicenseCodeEntry({ email, onSubmit, onBack, error, }: LicenseCodeEntryProps): import("react/jsx-runtime").JSX.Element;
8
+ export {};
@@ -0,0 +1,70 @@
1
+ "use client";
2
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
3
+ import { useState, useRef, useEffect } from "react";
4
+ export function LicenseCodeEntry({ email, onSubmit, onBack, error, }) {
5
+ const [code, setCode] = useState(["", "", "", "", "", ""]);
6
+ const [isSubmitting, setIsSubmitting] = useState(false);
7
+ const inputRefs = useRef([]);
8
+ // Focus first input on mount
9
+ useEffect(() => {
10
+ inputRefs.current[0]?.focus();
11
+ }, []);
12
+ const handleChange = (index, value) => {
13
+ // Only allow digits
14
+ const digit = value.replace(/\D/g, "").slice(-1);
15
+ const newCode = [...code];
16
+ newCode[index] = digit;
17
+ setCode(newCode);
18
+ // Auto-focus next input
19
+ if (digit && index < 5) {
20
+ inputRefs.current[index + 1]?.focus();
21
+ }
22
+ // Auto-submit when all digits entered
23
+ if (digit && index === 5) {
24
+ const fullCode = newCode.join("");
25
+ if (fullCode.length === 6) {
26
+ handleSubmit(fullCode);
27
+ }
28
+ }
29
+ };
30
+ const handleKeyDown = (index, e) => {
31
+ if (e.key === "Backspace" && !code[index] && index > 0) {
32
+ // Move to previous input on backspace if current is empty
33
+ inputRefs.current[index - 1]?.focus();
34
+ }
35
+ };
36
+ const handlePaste = (e) => {
37
+ e.preventDefault();
38
+ const pastedData = e.clipboardData.getData("text").replace(/\D/g, "").slice(0, 6);
39
+ if (pastedData) {
40
+ const newCode = [...code];
41
+ for (let i = 0; i < pastedData.length && i < 6; i++) {
42
+ newCode[i] = pastedData.charAt(i);
43
+ }
44
+ setCode(newCode);
45
+ // Focus appropriate input
46
+ const nextEmptyIndex = Math.min(pastedData.length, 5);
47
+ inputRefs.current[nextEmptyIndex]?.focus();
48
+ // Auto-submit if complete
49
+ if (pastedData.length === 6) {
50
+ handleSubmit(pastedData);
51
+ }
52
+ }
53
+ };
54
+ const handleSubmit = async (fullCode) => {
55
+ const codeToSubmit = fullCode || code.join("");
56
+ if (codeToSubmit.length !== 6)
57
+ return;
58
+ setIsSubmitting(true);
59
+ try {
60
+ await onSubmit(codeToSubmit);
61
+ }
62
+ finally {
63
+ setIsSubmitting(false);
64
+ }
65
+ };
66
+ return (_jsxs("div", { "data-testid": "license-code-entry", children: [_jsx("h2", { className: "text-xl font-semibold text-white text-center", children: "Enter Activation Code" }), _jsxs("p", { className: "mt-2 text-slate-400 text-center", children: ["We've sent a 6-digit code to", " ", _jsx("span", { className: "font-medium text-white", children: email })] }), _jsx("div", { className: "mt-8 flex justify-center gap-2", "data-testid": "license-code-inputs", children: code.map((digit, index) => (_jsx("input", { ref: (el) => {
67
+ inputRefs.current[index] = el;
68
+ }, type: "text", inputMode: "numeric", maxLength: 1, "data-testid": index === 0 ? "license-code-input-0" : undefined, value: digit, onChange: (e) => handleChange(index, e.target.value), onKeyDown: (e) => handleKeyDown(index, e), onPaste: handlePaste, disabled: isSubmitting, className: "h-14 w-12 rounded-lg border border-slate-600 bg-slate-700/50 text-center text-2xl font-bold text-white focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-500/20 disabled:opacity-50" }, index))) }), error && (_jsx("div", { className: "mt-4 rounded-lg bg-red-500/10 border border-red-500/20 p-3 text-sm text-red-400 text-center", children: error })), _jsxs("p", { className: "mt-6 text-center text-sm text-slate-500", children: ["Didn't receive the code?", " ", _jsx("button", { onClick: onBack, disabled: isSubmitting, className: "text-blue-400 hover:underline disabled:opacity-50", children: "Try again" })] }), _jsxs("div", { className: "mt-6 flex gap-3", children: [_jsx("button", { onClick: onBack, disabled: isSubmitting, className: "flex-1 rounded-lg border border-slate-600 py-3 font-medium text-slate-300 transition-colors hover:bg-slate-700/50 disabled:opacity-50", children: "Back" }), _jsx("button", { onClick: () => handleSubmit(), disabled: isSubmitting || code.join("").length !== 6, className: "flex-1 rounded-lg bg-blue-600 py-3 font-medium text-white transition-all hover:bg-blue-700 disabled:cursor-not-allowed disabled:opacity-50", children: isSubmitting ? (_jsxs("span", { className: "flex items-center justify-center gap-2", children: [_jsxs("svg", { className: "h-5 w-5 animate-spin", viewBox: "0 0 24 24", fill: "none", children: [_jsx("circle", { className: "opacity-25", cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "4" }), _jsx("path", { className: "opacity-75", fill: "currentColor", d: "M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" })] }), "Verifying..."] })) : ("Verify") })] })] }));
69
+ }
70
+ //# sourceMappingURL=LicenseCodeEntry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LicenseCodeEntry.js","sourceRoot":"","sources":["../../src/licensing/LicenseCodeEntry.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ import { ReactNode } from "react";
2
+ import type { LicenseStatus, ActivationState } from "./types";
3
+ interface LicenseContextValue {
4
+ /** Current license status from the backend */
5
+ licenseStatus: LicenseStatus | null;
6
+ /** Whether we're currently loading license status */
7
+ isLoading: boolean;
8
+ /** Whether the license is valid (trial or purchased) */
9
+ isLicensed: boolean;
10
+ /** License type if licensed */
11
+ licenseType: "trial" | "purchased" | null;
12
+ /** Available features */
13
+ features: string[];
14
+ /** Check if a specific feature is available */
15
+ hasFeature: (feature: string) => boolean;
16
+ /** Days remaining for trial licenses */
17
+ daysRemaining?: number;
18
+ /** Expiration date */
19
+ expiresAt?: Date;
20
+ /** Current activation flow state */
21
+ activationState: ActivationState;
22
+ /** Error message if any */
23
+ error?: string;
24
+ /** Start the activation flow */
25
+ startActivation: () => void;
26
+ /** Check email and determine next step */
27
+ checkEmail: (email: string) => Promise<void>;
28
+ /** Submit license request form (for trial) */
29
+ submitLicenseRequest: (email: string, name: string, companyName: string) => Promise<void>;
30
+ /** Submit activation code */
31
+ submitActivationCode: (code: string) => Promise<void>;
32
+ /** Refresh license status */
33
+ refreshLicenseStatus: () => Promise<void>;
34
+ /** Close the activation overlay */
35
+ closeActivation: () => void;
36
+ /** Email used in the activation flow */
37
+ activationEmail?: string;
38
+ }
39
+ export declare function useLicense(): LicenseContextValue;
40
+ export declare function useLicenseOptional(): LicenseContextValue | null;
41
+ interface LicenseProviderProps {
42
+ children: ReactNode;
43
+ }
44
+ export declare function LicenseProvider({ children, }: LicenseProviderProps): import("react/jsx-runtime").JSX.Element;
45
+ export {};