@parhelia/core 0.1.12390 → 0.1.12397

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 (79) hide show
  1. package/dist/editor/Editor.js +32 -17
  2. package/dist/editor/Editor.js.map +1 -1
  3. package/dist/editor/PictureCropper.js +9 -4
  4. package/dist/editor/PictureCropper.js.map +1 -1
  5. package/dist/editor/PictureEditor.js +12 -13
  6. package/dist/editor/PictureEditor.js.map +1 -1
  7. package/dist/editor/SetupWizard.js +20 -2
  8. package/dist/editor/SetupWizard.js.map +1 -1
  9. package/dist/editor/ai/AgentTerminal.js +14 -3
  10. package/dist/editor/ai/AgentTerminal.js.map +1 -1
  11. package/dist/editor/ai/dialogs/agentDialogTypes.d.ts +1 -1
  12. package/dist/editor/client/editContext.d.ts +4 -0
  13. package/dist/editor/client/editContext.js.map +1 -1
  14. package/dist/editor/page-editor-chrome/useInlineAICompletion.js +283 -298
  15. package/dist/editor/page-editor-chrome/useInlineAICompletion.js.map +1 -1
  16. package/dist/editor/pictureRawValue.d.ts +3 -0
  17. package/dist/editor/pictureRawValue.js +30 -0
  18. package/dist/editor/pictureRawValue.js.map +1 -0
  19. package/dist/editor/services/templateBuilderService.d.ts +7 -0
  20. package/dist/editor/services/templateBuilderService.js +7 -1
  21. package/dist/editor/services/templateBuilderService.js.map +1 -1
  22. package/dist/editor/settings/About.js +25 -19
  23. package/dist/editor/settings/About.js.map +1 -1
  24. package/dist/editor/settings/panels/AgentProfileEditorPanel.d.ts +14 -0
  25. package/dist/editor/settings/panels/AgentProfileEditorPanel.js +7 -0
  26. package/dist/editor/settings/panels/AgentProfileEditorPanel.js.map +1 -0
  27. package/dist/editor/settings/panels/AgentsPanel.js +2 -2
  28. package/dist/editor/settings/panels/AgentsPanel.js.map +1 -1
  29. package/dist/editor/settings/panels/ProjectTemplatesPanel.js +146 -8
  30. package/dist/editor/settings/panels/ProjectTemplatesPanel.js.map +1 -1
  31. package/dist/editor/setup-wizard/steps/CompleteStep.d.ts +2 -1
  32. package/dist/editor/setup-wizard/steps/CompleteStep.js +2 -1
  33. package/dist/editor/setup-wizard/steps/CompleteStep.js.map +1 -1
  34. package/dist/editor/setup-wizard/steps/LicenseActivationStep.d.ts +9 -0
  35. package/dist/editor/setup-wizard/steps/LicenseActivationStep.js +160 -0
  36. package/dist/editor/setup-wizard/steps/LicenseActivationStep.js.map +1 -0
  37. package/dist/editor/setup-wizard/steps/LicenseEmailStep.d.ts +10 -0
  38. package/dist/editor/setup-wizard/steps/LicenseEmailStep.js +101 -0
  39. package/dist/editor/setup-wizard/steps/LicenseEmailStep.js.map +1 -0
  40. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js +422 -65
  41. package/dist/editor/template-wizard/TemplateStructureInlineEditor.js.map +1 -1
  42. package/dist/licensing/EmailEntry.js +1 -1
  43. package/dist/licensing/EmailEntry.js.map +1 -1
  44. package/dist/licensing/LicenseActivationForm.js +1 -1
  45. package/dist/licensing/LicenseActivationForm.js.map +1 -1
  46. package/dist/licensing/LicenseCodeEntry.js +2 -2
  47. package/dist/licensing/LicenseCodeEntry.js.map +1 -1
  48. package/dist/licensing/LicenseContext.js +18 -9
  49. package/dist/licensing/LicenseContext.js.map +1 -1
  50. package/dist/licensing/LicenseOverlay.js +2 -1
  51. package/dist/licensing/LicenseOverlay.js.map +1 -1
  52. package/dist/licensing/licenseService.d.ts +10 -0
  53. package/dist/licensing/licenseService.js +28 -0
  54. package/dist/licensing/licenseService.js.map +1 -1
  55. package/dist/revision.d.ts +2 -2
  56. package/dist/revision.js +2 -2
  57. package/dist/task-board/TaskBoardWorkspace.js +3 -2
  58. package/dist/task-board/TaskBoardWorkspace.js.map +1 -1
  59. package/dist/task-board/components/ProjectDashboard.d.ts +4 -0
  60. package/dist/task-board/components/ProjectDashboard.js +1 -1
  61. package/dist/task-board/components/ProjectDashboard.js.map +1 -1
  62. package/dist/task-board/components/ProjectListContent.d.ts +1 -1
  63. package/dist/task-board/components/ProjectListContent.js +4 -1
  64. package/dist/task-board/components/ProjectListContent.js.map +1 -1
  65. package/dist/task-board/components/ProjectOverviewContent.d.ts +17 -0
  66. package/dist/task-board/components/ProjectOverviewContent.js +134 -0
  67. package/dist/task-board/components/ProjectOverviewContent.js.map +1 -0
  68. package/dist/task-board/components/ProjectSelector.d.ts +1 -1
  69. package/dist/task-board/components/ProjectSelector.js +1 -1
  70. package/dist/task-board/components/ProjectSelector.js.map +1 -1
  71. package/dist/task-board/components/TaskDetailPanel.js +59 -9
  72. package/dist/task-board/components/TaskDetailPanel.js.map +1 -1
  73. package/dist/task-board/services/taskService.d.ts +4 -1
  74. package/dist/task-board/services/taskService.js +3 -0
  75. package/dist/task-board/services/taskService.js.map +1 -1
  76. package/dist/task-board/taskBoardNavStore.d.ts +3 -1
  77. package/dist/task-board/taskBoardNavStore.js.map +1 -1
  78. package/dist/task-board/types.d.ts +30 -0
  79. package/package.json +1 -1
@@ -0,0 +1,160 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useRef, useState } from "react";
3
+ import { Button } from "../../../components/ui/button";
4
+ import { Input } from "../../../components/ui/input";
5
+ import { clearLicenseCache, requestLicense, storeLicense, verifyActivationCode, } from "../../../licensing/licenseService";
6
+ import { setupWizardService } from "../../../setup/services/setupWizardService";
7
+ import { AlertCircle, ArrowLeft, ArrowRight, CheckCircle, KeyRound, RefreshCw, } from "lucide-react";
8
+ export function LicenseActivationStep({ email, mode, onBack, onActivated, }) {
9
+ const [name, setName] = useState("");
10
+ const [companyName, setCompanyName] = useState("");
11
+ const [codeDigits, setCodeDigits] = useState(["", "", "", "", "", ""]);
12
+ const codeInputRefs = useRef([]);
13
+ const [loading, setLoading] = useState(false);
14
+ const [success, setSuccess] = useState(false);
15
+ const [error, setError] = useState(null);
16
+ const isTrialFlow = useMemo(() => mode === "trial_form", [mode]);
17
+ const trialFormComplete = useMemo(() => name.trim().length > 0 && companyName.trim().length > 0, [name, companyName]);
18
+ const codeComplete = useMemo(() => codeDigits.every((d) => d.length === 1) && codeDigits.join("").length === 6, [codeDigits]);
19
+ useEffect(() => {
20
+ if (!isTrialFlow) {
21
+ codeInputRefs.current[0]?.focus();
22
+ }
23
+ }, [isTrialFlow]);
24
+ const handleStoreLicense = useCallback(async (license) => {
25
+ const settingsExist = await setupWizardService.getSettingsExists();
26
+ if (!settingsExist) {
27
+ await setupWizardService.createSettingsItem();
28
+ }
29
+ const result = await storeLicense(license);
30
+ if (!result.success) {
31
+ throw new Error(result.message || "Failed to store license.");
32
+ }
33
+ try {
34
+ await clearLicenseCache();
35
+ }
36
+ catch {
37
+ // Non-fatal cache clear; backend will refresh eventually.
38
+ }
39
+ }, []);
40
+ const completePurchasedActivation = useCallback(async (fullCode) => {
41
+ try {
42
+ setLoading(true);
43
+ setError(null);
44
+ const response = await verifyActivationCode({ email, code: fullCode });
45
+ if (response.status !== "purchased" || !response.license) {
46
+ throw new Error(response.message || "Activation code is invalid.");
47
+ }
48
+ await handleStoreLicense(response.license);
49
+ setSuccess(true);
50
+ setTimeout(() => {
51
+ onActivated();
52
+ }, 800);
53
+ }
54
+ catch (e) {
55
+ setError(e?.message || "License activation failed.");
56
+ }
57
+ finally {
58
+ setLoading(false);
59
+ }
60
+ }, [email, handleStoreLicense, onActivated]);
61
+ const handleActivate = useCallback(async () => {
62
+ if (isTrialFlow) {
63
+ try {
64
+ setLoading(true);
65
+ setError(null);
66
+ if (!name.trim() || !companyName.trim()) {
67
+ setError("Please provide your name and company name.");
68
+ return;
69
+ }
70
+ const response = await requestLicense({
71
+ email,
72
+ name: name.trim(),
73
+ companyName: companyName.trim(),
74
+ });
75
+ if (response.status !== "trial" || !response.license) {
76
+ throw new Error(response.message || "Trial activation failed.");
77
+ }
78
+ await handleStoreLicense(response.license);
79
+ setSuccess(true);
80
+ setTimeout(() => {
81
+ onActivated();
82
+ }, 800);
83
+ }
84
+ catch (e) {
85
+ setError(e?.message || "License activation failed.");
86
+ }
87
+ finally {
88
+ setLoading(false);
89
+ }
90
+ return;
91
+ }
92
+ const code = codeDigits.join("");
93
+ if (code.length !== 6) {
94
+ setError("Please enter the activation code.");
95
+ return;
96
+ }
97
+ await completePurchasedActivation(code);
98
+ }, [
99
+ isTrialFlow,
100
+ name,
101
+ companyName,
102
+ email,
103
+ codeDigits,
104
+ handleStoreLicense,
105
+ onActivated,
106
+ completePurchasedActivation,
107
+ ]);
108
+ const handleCodeDigitChange = (index, value) => {
109
+ const digit = value.replace(/\D/g, "").slice(-1);
110
+ setError(null);
111
+ setCodeDigits((prev) => {
112
+ const next = [...prev];
113
+ next[index] = digit;
114
+ if (digit && index < 5) {
115
+ queueMicrotask(() => codeInputRefs.current[index + 1]?.focus());
116
+ }
117
+ const full = next.join("");
118
+ if (digit && index === 5 && full.length === 6) {
119
+ queueMicrotask(() => void completePurchasedActivation(full));
120
+ }
121
+ return next;
122
+ });
123
+ };
124
+ const handleCodeKeyDown = (index, e) => {
125
+ if (e.key === "Backspace" && !codeDigits[index] && index > 0) {
126
+ codeInputRefs.current[index - 1]?.focus();
127
+ }
128
+ };
129
+ const handleCodePaste = (e) => {
130
+ e.preventDefault();
131
+ const pasted = e.clipboardData.getData("text").replace(/\D/g, "").slice(0, 6);
132
+ if (!pasted)
133
+ return;
134
+ setError(null);
135
+ const padded = Array.from({ length: 6 }, (_, i) => pasted.charAt(i) || "");
136
+ setCodeDigits(padded);
137
+ const focusIdx = Math.min(pasted.length, 5);
138
+ queueMicrotask(() => codeInputRefs.current[focusIdx]?.focus());
139
+ if (pasted.length === 6) {
140
+ void completePurchasedActivation(pasted);
141
+ }
142
+ };
143
+ return (_jsxs("div", { className: "flex flex-col items-center text-center p-12", children: [_jsx("div", { className: "mb-8 rounded-2xl bg-blue-50 p-6 ring-1 ring-blue-100", children: _jsx(KeyRound, { className: "h-16 w-12 text-blue-600", strokeWidth: 1.5 }) }), _jsx("h2", { className: "text-3xl font-bold text-gray-900 mb-4 tracking-tight", children: isTrialFlow ? "Start Trial License" : "Enter Activation Code" }), _jsx("p", { className: "text-gray-500 mb-8 max-w-md leading-relaxed", children: isTrialFlow
144
+ ? "Complete your trial registration. We will store the signed license in Sitecore Settings."
145
+ : "Enter the one-time code sent to your email. We will verify and store your purchased license." }), success ? (_jsxs("div", { className: "flex flex-col items-center gap-3 text-green-600 animate-in fade-in zoom-in duration-500", children: [_jsx("div", { className: "rounded-full bg-green-100 p-3", children: _jsx(CheckCircle, { className: "h-10 w-10", strokeWidth: 2 }) }), _jsx("span", { className: "font-semibold text-lg", children: "License Activated" })] })) : (_jsxs("form", { className: "w-full max-w-md", onSubmit: (e) => {
146
+ e.preventDefault();
147
+ if (loading)
148
+ return;
149
+ if (isTrialFlow && !trialFormComplete)
150
+ return;
151
+ if (!isTrialFlow && !codeComplete)
152
+ return;
153
+ void handleActivate();
154
+ }, children: [_jsx("div", { className: "space-y-4 mb-6", children: isTrialFlow ? (_jsxs(_Fragment, { children: [_jsx(Input, { id: "name", value: name, onChange: (e) => setName(e.target.value), placeholder: "Your name", className: "h-11 rounded-xl border-gray-200 bg-white focus:ring-blue-500" }), _jsx(Input, { id: "company", value: companyName, onChange: (e) => setCompanyName(e.target.value), placeholder: "Company name", className: "h-11 rounded-xl border-gray-200 bg-white focus:ring-blue-500" })] })) : (_jsx("div", { className: "flex justify-center gap-2", "data-testid": "license-code-inputs", children: codeDigits.map((digit, index) => (_jsx("input", { ref: (el) => {
155
+ codeInputRefs.current[index] = el;
156
+ }, type: "text", inputMode: "numeric", maxLength: 1, "aria-label": `Activation code digit ${index + 1}`, "data-testid": index === 0 ? "license-code-input-0" : undefined, value: digit, onChange: (e) => handleCodeDigitChange(index, e.target.value), onKeyDown: (e) => handleCodeKeyDown(index, e), onPaste: handleCodePaste, disabled: loading, className: "h-14 w-12 rounded-xl border border-gray-200 bg-white text-center text-2xl font-bold text-gray-900 focus:outline-none focus:ring-2 focus:ring-blue-500/30 disabled:opacity-50" }, index))) })) }), error && (_jsxs("div", { className: "mb-8 flex items-start gap-3 rounded-xl border border-red-100 bg-red-50 p-4 text-left max-w-md", children: [_jsx(AlertCircle, { className: "h-5 w-5 shrink-0 text-red-600" }), _jsx("p", { className: "text-sm text-red-800", children: error })] })), _jsxs("div", { className: "flex items-center gap-4", children: [_jsxs(Button, { type: "button", variant: "ghost", onClick: onBack, disabled: loading, className: "rounded-full h-10 px-6 text-xs font-bold uppercase tracking-widest text-gray-400", children: [_jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }), "Back"] }), _jsx(Button, { type: "submit", disabled: loading ||
157
+ (isTrialFlow && !trialFormComplete) ||
158
+ (!isTrialFlow && !codeComplete), className: "px-8 h-10 rounded-full shadow-lg shadow-blue-200 transition-all active:scale-95 min-w-[220px] text-xs font-black uppercase tracking-widest bg-blue-600 hover:bg-blue-700 text-white", children: loading ? (_jsxs(_Fragment, { children: [_jsx(RefreshCw, { className: "mr-2 h-4 w-4 animate-spin" }), "Activating..."] })) : (_jsxs(_Fragment, { children: ["Activate License", _jsx(ArrowRight, { className: "ml-2 h-4 w-4", strokeWidth: 3 })] })) })] })] }))] }));
159
+ }
160
+ //# sourceMappingURL=LicenseActivationStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LicenseActivationStep.js","sourceRoot":"","sources":["../../../../src/editor/setup-wizard/steps/LicenseActivationStep.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export type LicenseActivationMode = "trial_form" | "code_entry";
2
+ interface LicenseEmailStepProps {
3
+ onNext: (payload: {
4
+ email: string;
5
+ mode: LicenseActivationMode;
6
+ }) => void;
7
+ onBack: () => void;
8
+ }
9
+ export declare function LicenseEmailStep({ onNext, onBack }: LicenseEmailStepProps): import("react/jsx-runtime").JSX.Element;
10
+ export {};
@@ -0,0 +1,101 @@
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useState } from "react";
3
+ import { Button } from "../../../components/ui/button";
4
+ import { Input } from "../../../components/ui/input";
5
+ import { getLicenseStatus, requestLicense, formatRetryTimeSimple, } from "../../../licensing/licenseService";
6
+ import { AlertCircle, ArrowLeft, ArrowRight, KeyRound, RefreshCw, } from "lucide-react";
7
+ export function LicenseEmailStep({ onNext, onBack }) {
8
+ const [email, setEmail] = useState("");
9
+ const [buildDate, setBuildDate] = useState("");
10
+ const [loading, setLoading] = useState(false);
11
+ const [error, setError] = useState(null);
12
+ const [countdownSeconds, setCountdownSeconds] = useState(null);
13
+ useEffect(() => {
14
+ let disposed = false;
15
+ getLicenseStatus()
16
+ .then((status) => {
17
+ if (!disposed) {
18
+ setBuildDate(status.buildDate || "");
19
+ }
20
+ })
21
+ .catch(() => {
22
+ // Non-fatal. License request works without build date as well.
23
+ });
24
+ return () => {
25
+ disposed = true;
26
+ };
27
+ }, []);
28
+ // Countdown timer for rate limit (update frequency depends on remaining time)
29
+ useEffect(() => {
30
+ if (countdownSeconds === null || countdownSeconds <= 0) {
31
+ return;
32
+ }
33
+ // Update every second when < 1 minute, every minute when >= 1 minute
34
+ const updateInterval = countdownSeconds > 60 ? 60000 : 1000;
35
+ const timer = setInterval(() => {
36
+ setCountdownSeconds((prev) => {
37
+ if (prev === null)
38
+ return null;
39
+ const next = prev - (updateInterval === 60000 ? 60 : 1);
40
+ return next > 0 ? next : 0;
41
+ });
42
+ }, updateInterval);
43
+ return () => clearInterval(timer);
44
+ }, [countdownSeconds]);
45
+ const handleContinue = useCallback(async () => {
46
+ if (!email) {
47
+ setError("Please enter your email address.");
48
+ return;
49
+ }
50
+ try {
51
+ setLoading(true);
52
+ setError(null);
53
+ const response = await requestLicense({
54
+ email,
55
+ // Placeholder values are only used for branching trial-vs-code on this first step.
56
+ name: "Setup",
57
+ companyName: "Setup",
58
+ parheliaBuildDate: buildDate,
59
+ });
60
+ if (response.status === "trial") {
61
+ onNext({ email, mode: "trial_form" });
62
+ return;
63
+ }
64
+ if (response.status === "code_sent") {
65
+ onNext({ email, mode: "code_entry" });
66
+ return;
67
+ }
68
+ if (response.status === "trial_expired") {
69
+ setError(response.message ||
70
+ "Trial period expired for this email. Use activation code flow.");
71
+ return;
72
+ }
73
+ if (response.status === "rate_limited") {
74
+ const retrySeconds = response.retryAfterSeconds || 60;
75
+ setCountdownSeconds(retrySeconds);
76
+ setError(`Too many requests for sending a new code. If you already have one, use "I already have a code". Otherwise try again in ${formatRetryTimeSimple(retrySeconds)}.`);
77
+ return;
78
+ }
79
+ setError(response.message || "Failed to start license activation.");
80
+ }
81
+ catch (e) {
82
+ setError(e?.message || "Failed to contact license service.");
83
+ }
84
+ finally {
85
+ setLoading(false);
86
+ }
87
+ }, [email, buildDate, onNext]);
88
+ return (_jsxs("div", { className: "flex flex-col items-center text-center p-12", children: [_jsx("div", { className: "mb-8 rounded-2xl bg-blue-50 p-6 ring-1 ring-blue-100", children: _jsx(KeyRound, { className: "h-16 w-12 text-blue-600", strokeWidth: 1.5 }) }), _jsx("h2", { className: "text-3xl font-bold text-gray-900 mb-4 tracking-tight", children: "License Activation" }), _jsx("p", { className: "text-gray-500 mb-8 max-w-md leading-relaxed", children: "Enter your email to start license activation. We will detect whether to continue with trial registration or one-time activation code." }), _jsxs("form", { className: "w-full max-w-md", onSubmit: (e) => {
89
+ e.preventDefault();
90
+ if (loading)
91
+ return;
92
+ void handleContinue();
93
+ }, children: [_jsx("div", { className: "space-y-4 mb-6", children: _jsx(Input, { id: "email", type: "email", "data-testid": "license-email-input", value: email, onChange: (e) => setEmail(e.target.value), placeholder: "you@company.com", className: "h-11 rounded-xl border-gray-200 bg-white focus:ring-blue-500" }) }), error && (_jsxs("div", { className: "mb-8 flex items-start gap-3 rounded-xl border border-red-100 bg-red-50 p-4 text-left max-w-md", children: [_jsx(AlertCircle, { className: "h-5 w-5 shrink-0 text-red-600" }), _jsxs("div", { className: "flex-1", children: [_jsx("p", { className: "text-sm text-red-800", children: error }), countdownSeconds !== null && countdownSeconds > 0 && (_jsxs("p", { className: "text-xs text-red-700 mt-2 font-medium", children: ["Retry available in ", formatRetryTimeSimple(countdownSeconds)] }))] })] })), _jsxs("div", { className: "flex items-center gap-4", children: [_jsxs(Button, { type: "button", variant: "ghost", onClick: onBack, disabled: loading, className: "rounded-full h-10 px-6 text-xs font-bold uppercase tracking-widest text-gray-400", children: [_jsx(ArrowLeft, { className: "mr-2 h-4 w-4" }), "Back"] }), _jsx(Button, { type: "submit", disabled: loading || !email, className: "px-8 h-10 rounded-full shadow-lg shadow-blue-200 transition-all active:scale-95 min-w-[220px] text-xs font-black uppercase tracking-widest bg-blue-600 hover:bg-blue-700 text-white", children: loading ? (_jsxs(_Fragment, { children: [_jsx(RefreshCw, { className: "mr-2 h-4 w-4 animate-spin" }), "Checking..."] })) : (_jsxs(_Fragment, { children: ["Continue", _jsx(ArrowRight, { className: "ml-2 h-4 w-4", strokeWidth: 3 })] })) })] })] }), _jsx("button", { type: "button", onClick: () => {
94
+ if (!email) {
95
+ setError("Please enter your email address first.");
96
+ return;
97
+ }
98
+ onNext({ email, mode: "code_entry" });
99
+ }, disabled: loading, className: "mt-5 text-xs font-semibold uppercase tracking-wider text-blue-600 hover:text-blue-700 disabled:opacity-50", children: "I already have a code" })] }));
100
+ }
101
+ //# sourceMappingURL=LicenseEmailStep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"LicenseEmailStep.js","sourceRoot":"","sources":["../../../../src/editor/setup-wizard/steps/LicenseEmailStep.tsx"],"names":[],"mappings":";AAAA,OAAc,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AACrD,OAAO,EACL,gBAAgB,EAChB,cAAc,EAEd,qBAAqB,GACtB,MAAM,mCAAmC,CAAC;AAC3C,OAAO,EACL,WAAW,EACX,SAAS,EACT,UAAU,EACV,QAAQ,EACR,SAAS,GACV,MAAM,cAAc,CAAC;AAStB,MAAM,UAAU,gBAAgB,CAAC,EAAE,MAAM,EAAE,MAAM,EAAyB;IACxE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,EAAE,CAAC,CAAC;IAC/C,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IACxD,MAAM,CAAC,gBAAgB,EAAE,mBAAmB,CAAC,GAAG,QAAQ,CAAgB,IAAI,CAAC,CAAC;IAE9E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,QAAQ,GAAG,KAAK,CAAC;QACrB,gBAAgB,EAAE;aACf,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;YACf,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,YAAY,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;YACvC,CAAC;QACH,CAAC,CAAC;aACD,KAAK,CAAC,GAAG,EAAE;YACV,+DAA+D;QACjE,CAAC,CAAC,CAAC;QAEL,OAAO,GAAG,EAAE;YACV,QAAQ,GAAG,IAAI,CAAC;QAClB,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,8EAA8E;IAC9E,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,gBAAgB,KAAK,IAAI,IAAI,gBAAgB,IAAI,CAAC,EAAE,CAAC;YACvD,OAAO;QACT,CAAC;QAED,qEAAqE;QACrE,MAAM,cAAc,GAAG,gBAAgB,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;QAE5D,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,EAAE;YAC7B,mBAAmB,CAAC,CAAC,IAAI,EAAE,EAAE;gBAC3B,IAAI,IAAI,KAAK,IAAI;oBAAE,OAAO,IAAI,CAAC;gBAC/B,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,cAAc,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACxD,OAAO,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC,CAAC,CAAC;QACL,CAAC,EAAE,cAAc,CAAC,CAAC;QAEnB,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IACpC,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAEvB,MAAM,cAAc,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAC5C,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,QAAQ,CAAC,kCAAkC,CAAC,CAAC;YAC7C,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,UAAU,CAAC,IAAI,CAAC,CAAC;YACjB,QAAQ,CAAC,IAAI,CAAC,CAAC;YAEf,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;gBACpC,KAAK;gBACL,mFAAmF;gBACnF,IAAI,EAAE,OAAO;gBACb,WAAW,EAAE,OAAO;gBACpB,iBAAiB,EAAE,SAAS;aAC7B,CAAC,CAAC;YAEH,IAAI,QAAQ,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;gBAChC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;gBACpC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBACtC,OAAO;YACT,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,eAAe,EAAE,CAAC;gBACxC,QAAQ,CACN,QAAQ,CAAC,OAAO;oBACd,gEAAgE,CACnE,CAAC;gBACF,OAAO;YACT,CAAC;YAED,IAAI,QAAQ,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;gBACvC,MAAM,YAAY,GAAG,QAAQ,CAAC,iBAAiB,IAAI,EAAE,CAAC;gBACtD,mBAAmB,CAAC,YAAY,CAAC,CAAC;gBAClC,QAAQ,CACN,0HAA0H,qBAAqB,CAAC,YAAY,CAAC,GAAG,CACjK,CAAC;gBACF,OAAO;YACT,CAAC;YAED,QAAQ,CAAC,QAAQ,CAAC,OAAO,IAAI,qCAAqC,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,CAAM,EAAE,CAAC;YAChB,QAAQ,CAAC,CAAC,EAAE,OAAO,IAAI,oCAAoC,CAAC,CAAC;QAC/D,CAAC;gBAAS,CAAC;YACT,UAAU,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAE/B,OAAO,CACL,eAAK,SAAS,EAAC,6CAA6C,aAC1D,cAAK,SAAS,EAAC,sDAAsD,YACnE,KAAC,QAAQ,IAAC,SAAS,EAAC,yBAAyB,EAAC,WAAW,EAAE,GAAG,GAAI,GAC9D,EACN,aAAI,SAAS,EAAC,sDAAsD,mCAE/D,EACL,YAAG,SAAS,EAAC,6CAA6C,sJAGtD,EAEJ,gBACE,SAAS,EAAC,iBAAiB,EAC3B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;oBACd,CAAC,CAAC,cAAc,EAAE,CAAC;oBACnB,IAAI,OAAO;wBAAE,OAAO;oBACpB,KAAK,cAAc,EAAE,CAAC;gBACxB,CAAC,aAED,cAAK,SAAS,EAAC,gBAAgB,YAC7B,KAAC,KAAK,IACJ,EAAE,EAAC,OAAO,EACV,IAAI,EAAC,OAAO,iBACA,qBAAqB,EACjC,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EACzC,WAAW,EAAC,iBAAiB,EAC7B,SAAS,EAAC,8DAA8D,GACxE,GACE,EAEL,KAAK,IAAI,CACR,eAAK,SAAS,EAAC,+FAA+F,aAC5G,KAAC,WAAW,IAAC,SAAS,EAAC,+BAA+B,GAAG,EACzD,eAAK,SAAS,EAAC,QAAQ,aACrB,YAAG,SAAS,EAAC,sBAAsB,YAAE,KAAK,GAAK,EAC9C,gBAAgB,KAAK,IAAI,IAAI,gBAAgB,GAAG,CAAC,IAAI,CACpD,aAAG,SAAS,EAAC,uCAAuC,oCAC9B,qBAAqB,CAAC,gBAAgB,CAAC,IACzD,CACL,IACG,IACF,CACP,EAED,eAAK,SAAS,EAAC,yBAAyB,aACtC,MAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,OAAO,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAC,kFAAkF,aAE5F,KAAC,SAAS,IAAC,SAAS,EAAC,cAAc,GAAG,YAE/B,EACT,KAAC,MAAM,IACL,IAAI,EAAC,QAAQ,EACb,QAAQ,EAAE,OAAO,IAAI,CAAC,KAAK,EAC3B,SAAS,EAAC,qLAAqL,YAE9L,OAAO,CAAC,CAAC,CAAC,CACT,8BACE,KAAC,SAAS,IAAC,SAAS,EAAC,2BAA2B,GAAG,mBAElD,CACJ,CAAC,CAAC,CAAC,CACF,0CAEE,KAAC,UAAU,IAAC,SAAS,EAAC,cAAc,EAAC,WAAW,EAAE,CAAC,GAAI,IACtD,CACJ,GACM,IACL,IACD,EACP,iBACE,IAAI,EAAC,QAAQ,EACb,OAAO,EAAE,GAAG,EAAE;oBACZ,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,QAAQ,CAAC,wCAAwC,CAAC,CAAC;wBACnD,OAAO;oBACT,CAAC;oBACD,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC,CAAC;gBACxC,CAAC,EACD,QAAQ,EAAE,OAAO,EACjB,SAAS,EAAC,2GAA2G,sCAG9G,IACL,CACP,CAAC;AACJ,CAAC"}